Today's Smalltalk 4 You looks at the Pharo settings - one of the ways you can make immediate modifications to your development environment. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube. To watch now, click on the image below:
If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.
Hope it's OK to cross-post this, I figured there might be interested people on both sides. I finished the updates of the Xtreams port to match the VW version, so everything (that is available) should work as advertised in the documentation .
Tony Fleig talks about using a set of open source web tools to automate the testing of a Seaside app:
The WebClient package includes a simple and easy to use HTTP client. Soup is a port of the Beautiful Soup Python HTML/XML parser designed for screen-scraping. The combination of these two made it possible to perform black-box testing of my Seaside web application.
It's one thing to come up with a few simple tools to automate a build - all things considered, that's not a terribly difficult thing (which begs the question: why hasn't the vendor of VW, Cincom, come up with something better than RTP?). The harder problem is fitting the technical siolution into the process that your project has evolved.
That's where I am today. I have a simple tool that reliably creates a build, using this set of steps:
Starting from a base image, load Store, then load the master application bundle
Do some baseline "cleanup" - close the various windows that got opened as part of the postLoad process, then save the image as a development snapshot
Fire up that saved image, unload a set of development packages, and then put it into a runtime state
Execute a perm save of the resulting image
Finally, fire up another image, load the image compression tools, and compress the saved runtime, yielding the final build.
All of that happens from a "driver" image - it's straightforward to launch a new image and hand it a command line argument to file in a script. That's the easy part though - now I need to get it integrated into the process, and that's the far more interesting piece of the project :)
As John Gruber says, this makes very little sense: Google is dropping h.264 support from Chrome:
Specifically, we are supporting the WebM (VP8) and Theora video codecs, and will consider adding support for other high-quality open codecs in the future. Though H.264 plays an important role in video, as our goal is to enable open innovation, support for the codec will be removed and our resources directed towards completely open codec technologies.
Umm, yeah - and you still support Flash because...... .
Update: A commenter on Facebook notes that this could easily be a scare over patent issues surrounding H.264. There are many patent trolls out there....
I'll be at StS 2011, giving a talk on Smalltalk on the server side, focusing on cloud services. I still need to register - as I write this, the STIC website (where the registration page lives) is down though. I'll get to it when the site pops back online :)
Dave Buck will be offering an online refactoring course in March:
For anyone interested in improving their design skills in Smalltalk, Simberon will be holding an instructor-led Refactoring Object Oriented Design course by Webcast on the week of March 7th, 2011. The course focuses on when and why to refactor and explains many concepts and principles that even more advanced developers may not know.
Head over to Simberon.com for full details and registration information.
In the meantime, perhaps STIC should have someone edit the Apache configuration on their server, remove the redirect to the (non functional) WordPress site, and put up a static page with some basic links on it - at least until they get the problem solved.
Update: Sometime while I was asleep, the site came back :)
Join the Facebook Group to discuss the tutorials. You can view the archives here.
To watch now, click on the image below:
If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.
You would think that getting the version comment for a package or bundle you've published to Store would be simple - there's a method called #versionComment right there in Pundle - but you would be mistaken. No, that's not the comment you type into the text field when you publish.
Why do I care? Well, as part of my build automation work, I'm generating a small report, and part of that report involves pulling out the comment for a published package. That takes more work to get at than you might think:
Just tracing Store code to figure that out was painful; the comparison tool Version Browser doesn't make it obvious. Then there's the whole head scratching nature of "why isn't there a method that does this for me in Pundle?" Anyway, that does the job I wanted, and now I have that bit of my reporting task handled.
Today's Smalltalk 4 You takes a brief overview tour of Monticello in the Pharo environment. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube. To watch now, click on the image below:
If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.
I've been building BottomFeeder without RTP for awhile now, but until I started looking at build automation for this new job, I hadn't fully automated it. That's something I've done now, and one thing that I really like about the process I use is the predictability.
With RTP, if you let it scan and strip, you're never really sure what it took out. Oh, sure, there's a report it generates, and you can go through that - but it's not easy to digest. Instead, I have a script that pulls out a set of named packages - this is one of the advantages to the newer releases of VW, btw - having defined blobs of code that have structure not only makes loading easier, it makes unloading easier. Here's what I have my script do:
"Unload the debugger and other tools"
(Store.Registry pundleNamed: 'Tools-Debugger') ifNotNil: [:pundle |
pundle leafItems do: [:each | each markNotModified].
[pundle markNotModified; unloadFromImage] on: Warning do: [:ex | ex
resume: true]].
(Store.Registry pundleNamed: 'Tools-Refactoring Browser') ifNotNil: [:pundle |
pundle leafItems do: [:each | each markNotModified].
[pundle markNotModified; unloadFromImage] on: Warning do: [:ex | ex
resume: true]].
(Store.Registry pundleNamed: 'Tools-Parcel Manager') ifNotNil: [:pundle |
pundle leafItems do: [:each | each markNotModified].
[pundle markNotModified; unloadFromImage] on: Warning do: [:ex | ex
resume: true]].
(Store.Registry pundleNamed: 'Tools-Changes') ifNotNil: [:pundle |
pundle leafItems do: [:each | each markNotModified].
[pundle markNotModified; unloadFromImage] on: Warning do: [:ex | ex
resume: true]].
(Store.Registry pundleNamed: 'Tools-File Browser') ifNotNil: [:pundle |
pundle leafItems do: [:each | each markNotModified].
[pundle markNotModified; unloadFromImage] on: Warning do: [:ex | ex
resume: true]].
(Store.Registry pundleNamed: 'UIPainter') ifNotNil: [:pundle |
pundle leafItems do: [:each | each markNotModified].
[pundle markNotModified; unloadFromImage] on: Warning do: [:ex | ex
resume: true]].
(Store.Registry pundleNamed: 'StoreForPostgreSQL') ifNotNil: [:pundle |
pundle leafItems do: [:each | each markNotModified].
[pundle markNotModified; unloadFromImage] on: Warning do: [:ex | ex
resume: true]].
The handler block allows the script to proceed if anything odd happens; I should probably be logging those events. The larger point is this: I know exactly what got pulled, and, more importantly - what didn't. Unless you're really careful (and you have to be careful every time code has changed), RTP will strip code from your application. That's usually safe, but if you use constructed message sends for any reason (good or bad), you can get smacked. I think this approach is vastly safer.
I've posted before on how I put the image into a runtime state, but it's worth going over again:
Have a subclass of UserApplication. Specify your prereq subsystems, and implement #main. In that method, start your application. It'll get called when it's safe to do so at startup, based on the prereqs you specified
Execute the following code after you do whatever other image prep is necessary:
"set up logging and exception handling"
DeploymentOptionsSystem current startInRuntime: true.
Notifier current: RuntimePackager.RuntimeEmergencyNotifier.
RuntimePackager.RuntimeManager errorLogPath: 'error.log'.
Notifier logToFile: true.
"set up runtime state"
UI.WindowManager noWindowBlock: [:windowManager | ].
stream := WriteStream on: String new.
stream nextPutAll: 'changeRequest'; cr; cr; tab.
stream nextPutAll: '^true'.
VisualLauncher compile: stream contents.
VisualLauncher allInstances do: [:each | each closeAndUnschedule. each release].
ObjectMemory garbageCollect.
Workbook allInstances do: [:each | each closeRequest].
(Delay forSeconds: 20) wait.
Parcel searchPathModel value: (List with: (PortableFilename named: '.')).
SourceFileManager default discardSources.
"Now save the image such that this file doesn't get looked for at startup"
[ObjectMemory permSaveAs: runtime' thenQuit: false] fork.
[(Delay forSeconds: 25) wait.
RuntimeSystem isRuntime ifFalse: [ObjectMemory quit]] fork.
I actually use some of the RTP infrastructure (the runtime exception handler and logging) - I just don't use it to create the image. It's a pretty simple process, and once you have the script created, it's easy to have a "one button click" UI drive it - from another image
Welcome to episode 13 of Independent Misinterpretations - a Smalltalk and dynamic language oriented podcast with James Robertson, Michael Lucas-Smith, and David Buck. This week David Buck and I interview Mike Taylor, President and CEO of Instantiations about the future directions for Instantiations. It was mostly a high level talk - if you want more of a tech focused look at Instantiations, go back to our two part interview with John O'Keefe - part 1 here, part 2 here.
You can subscribe to the podcast in iTunes (or any other podcatching software) using this feed directly or in iTunes with this one.
To listen now, you can either download the mp3 edition, or the AAC edition. The AAC edition comes with chapter markers. You can subscribe to either edition of the podcast directly in iTunes; just search for Smalltalk and look in the Podcast results. You can subscribe to the mp3 edition directly using this feed, or the AAC edition using this feed using any podcatching software. You can also download the podcast in ogg format.
If you like the music we use, please visit Josh Woodward's site. We use the song Troublemaker for our intro/outro music. I'm sure he'd appreciate your support!
If you have feedback, send it to jarober@gmail.com - or visit us on Facebook - you can subscribe in iTunes using this iTunes enabled feed.. If you enjoy the podcast, pass the word - we would love to have more people hear about Smalltalk!
Welcome to episode 13 of Independent Misinterpretations - a Smalltalk and dynamic language oriented podcast with James Robertson, Michael Lucas-Smith, and David Buck. This week David Buck and I interview Mike Taylor, President and CEO of Instantiations about the future directions for Instantiations. It was mostly a high level talk - if you want more of a tech focused look at Instantiations, go back to our two part interview with John O'Keefe - part 1 here, part 2 here.
You can subscribe to the podcast in iTunes (or any other podcatching software) using this feed directly or in iTunes with this one.
To listen now, you can either download the mp3 edition, or the AAC edition. The AAC edition comes with chapter markers. You can subscribe to either edition of the podcast directly in iTunes; just search for Smalltalk and look in the Podcast results. You can subscribe to the mp3 edition directly using this feed, or the AAC edition using this feed using any podcatching software. You can also download the podcast in ogg format.
If you like the music we use, please visit Josh Woodward's site. We use the song Troublemaker for our intro/outro music. I'm sure he'd appreciate your support!
If you have feedback, send it to jarober@gmail.com - or visit us on Facebook - you can subscribe in iTunes using this iTunes enabled feed.. If you enjoy the podcast, pass the word - we would love to have more people hear about Smalltalk!
Today's Smalltalk 4 You takes a look at doing runtime builds in VisualWorks. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube. To watch now, click on the image below:
If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.
Join the Facebook Group to discuss the tutorials. You can view the archives here.
To watch now, click on the image below:
If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.
I've been doing (yet another) playthrough of "Fallout: New Vegas", which was inspired by my first (basically failed) crack at the "Dead Money" DLC. I went in with a level 30 character, but I had the wrong skills for the DLC:
Low Sneak (not upped at all)
Low Unarmed (not upped at all)
Low Melee (not upped at all)
Low Survival (not upped at all)
I was able to get through the Villas with difficulty - my character had high science, speech, guns, and lockpick - none of which were terribly useful out there. There are virtually no guns or energy weapons (the HoloRifle has very little ammo available), so you really, really need to go with unarmed or melee. So.... I started over.
That's been something of a revelation for me. So many encounters have been so much easier with high sneak - even with mediocre weapon skills, I can get close enough to line up and kill without ever using VATS. I expect that I'll get through the DLC much better this time (although I'll have to wait for the PC edition or get my work schedule to support some remote work - no XBox in the hotel). Even with that, it's been a lot of fun to play this way - it's almost like a new game.
Today's Smalltalk 4 You takes a look at the Pharo debugger, using it to diagnose and fix a small bug. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube. To watch now, click on the image below:
If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.