Archive
Job Opportunity (Smalltalk and Seaside)

I’m pleased to announce that we are looking for another full-time developer to join our agile team of long time Smalltalk fans. Here at DeepCove Labs our primary focus is evolving and maintaining a mature industry leading international payment processing platform that we have built from the ground up over the past 6 years.
Ideal candidate is someone who has experience with Smalltalk, SQL and last, but definitely not least, Seaside. They must be enthusiastic, motivated and as excited about using cutting edge technology to solve business problems as we are. I should point out that good self task management and time management skills are a big plus as we work as equal peers and share roles every day of the week. We are not XP fanatics, but some things are second nature to us,
- keeping things simple
- plenty of unit tests
- no code ownership
- frequent integration
- lots of refactoring
- frequent releases
- no overtime
- our customer shares the same address
Our primary requirements are as follows:
- at least five years general software development experience
- several years experience developing with dynamic languages (Smalltalk, Ruby, Python, Lisp)
- one year recent Smalltalk experience
- experience developing applications of at least moderate complexity
- demonstrated experience working directly with users
Experience with any of the following would be a major plus:
- agile test driven development
- financial services
- SQL, specifically Microsoft SQL Server
- web application development, specifically with Seaside and moderate amounts of JavaScript
- deployment of large scale applications in managed services environment
Our office is located in the heart of Downtown Vancouver, steps away from Pacific ocean, beautiful parks, shopping and entertainment district and all major transit connections. All employees receive excellent health/dental benefits package and few other perks. We like to think we are an open, flexible and friendly place to work, so please drop me an email with your resume if you are interested.
Update (Nov 26): Few folks had pinged me to ask if telecommuting is an option and the simple answer is that for this particular position we would like someone who would be willing to relocate to Vancouver and work from our office together with the rest of the team.
Handy JavaScript Components
Via Ajaxian come two handy components this morning,
- First another JavaScript accordion, but this time based off Prototype, which we Seasiders are most familiar with thanks to excellent Scriptaculous integration by Lukas Renglli
- Second, a new upload manager, which might be a nice replacement for SWFUpload if you don’t want to enforce Flash in your applications
Enjoy and please let everyone know if these are any good, as I obviously haven’t used them personally quite yet.
Seaside + Google Analytics
We now return to regularly scheduled programming. First up, adding Google Analytics tracking code to your Seaside application. It’s an absolute must have if you are serious about your application.
- Do you have an Analytics account already?
- Yes – Find your Account ID by clicking on “Edit Analytics Account”
- No – Sign up, it’s free
- On your root component (one that implements #canBeRoot and #initialize) add (or augment) the following three methods,
- updateRoot: root
super updateRoot: root.
root linkToScript: ‘http://ssl.google-analytics.com/urchin.js’. - renderContentOn: html
self renderAnalyticsOn: html. - renderAnalyticsOn: html
html script: ‘_uacct=”UA-XXXXXX”;urchinTracker();’
- updateRoot: root
- Change “UA-XXXXXX” to your actual Account ID from Step 1.
- Change URL in #updateRoot: to “https” if you intend to host your application behind SSL, otherwise most browsers will display a warning about linkage to non-secure content from a secure page.
- Slightly more advanced example for those who care, you can skip it completely if you don’t
- Of many tracking options that Analytics supports, two most commonly used ones are User Defined values and Explicit URLs
- User Defined value is useful if you want to separate users according to some arbitrary criteria, for example if multiple instances of your application live on a single domain (www.domain.com), but different URLs (/live, /demo, /whatnot)
- Explicit URLs are important for Seaside applications if you want to track “Content” which is normally not distinguishable based on Seaside-generated URLs, but implementation will largely depend on your application, consider the following as an example only
- renderAnalyticsOn: html
| ws |
ws := String new writeStream.
ws
nextPutAll: ‘__utmSetVar(“‘;
nextPutAll: self analyticsKeyword;
nextPutAll: ‘”);_uacct=”UA-XXXXXX”;urchinTracker(”’.
crumbs do: [:ea | ws nextPutAll: ea title asAnalyticsURL] separatedBy: [ws nextPut: $/].
ws nextPutAll: ”’);’.
html script: ws contents - String>>asAnalyticsURL
^self asLowercase copyReplace: Character space with: $_
- Of many tracking options that Analytics supports, two most commonly used ones are User Defined values and Explicit URLs
As always, comment if you have any questions please.
2 things you have to have
I’m back after a bit of a hiatus with vacation, Xmas and all, so lets get cranking, shall we?
I’ve been meaning to post about 2 tools that I’ve become addicted to over the past little while, so others could get high on them with me. Chances are you already know about both, but if you don’t you can thank me in the comments :)
Firebug (http://www.getfirebug.com)
Screenshots won’t do it justice, you *have* to check it out. Here’s a short (and incomplete) list of things you can do with it,
- Inspect and edit HTML (live!)
- Inspect and edit CSS (yes, live as well)
- Debug and profile JavaScript (you’ll use this a lot, admit it)
- Monitor network activity (much much better than Google’s page analyzer at that)
- … the list goes on, you have to see it to believe it!
I should point out, that even though its free (as in beer), please chip in with a small donation to ensure continuous improvement (I’m not at the receiving end of it, by the way, just spreading the word), this tool can really change the way you do web development (for the better).
Selenium (http://www.openqa.org/selenium)
SUnit for your web applications that runs directly in the browser(s), need I say more? ;)
Did JavaScript need to be this confusing?
Just noticed this gem over at YUI Blog,
JavaScript is a prototypal language, but it has a new operator that tries to make it look sort of like a classical language. That tends to confuse programmers, leading to some problematic programming patterns.
[...]
There is a time to new, and a time to not.
Check out the rest for an interesting back-and-forth. By the way, this isn’t meant to diss the Yahoo! folks, they’re churning out some amazing libraries, patterns and hints given the constraints they need to work in and articles like this one are much appreciated. Its just that every time I dive in there, I find myself having to learn to swim every time, it really feels like its more convoluted than it needs to be.
