Chris Lamothe’s weblog.

Recent Photos

 

 

Browsing all posts in Development.

Rails: SQLite Replaces MySQL as Default Database

If you’ve waited until now before upgrading to Ruby on Rails 2.0 now you may be in for a little surprise.  As of version 2.02 the default database in Rails is SQLite, arguably because there is no need to for grants or the creation of tables, meaning a simpler setup for n00bs.  If you still [...]

Montreal On Rails 2

So this Tuesday I had the honour of presenting at Montreal on Rails 2, where I demoed the Acts As Authenticated and Role Requirement plugins. I think Marc Andre Cournoyer’s review impressed me the most, mainly that “…[it] is an exploit to be able to code a live app in front of a crowd like [...]

Come see me on Sept 4th

I’m happy to announce that I will be speaking about user authentication at the next Montreal on Rails meetup, scheduled for Tuesday the 4th of September at the McGill MAASS Chemistry building, room 328. The show starts at 18h45 and I think I’ll be the first to present, so come early. Although user authentication may [...]

BASH: How to strip the last character of a word.

The integrators at work had a problem recently with a shell script that generates SQL deployment and rollback scripts on the fly based on SQL patches submitted by developers. The problem was that sometimes the name of an object would include a “(” at the end of it (e.g. “FN_RESET(” instead of “FN_RESET“). Here’s a [...]

Tales from the Computer Club

Last night’s Montreal on Rails meetup (their first ever) was a large step up from the Commodore 64 disk swaps of my youth, but probably a lot more significant as far as self improvement goes. A good 30-35 people showed up and the two presentations given were fantastic. The first presentation topic was improving tests, [...]

Link grab bag for July 2007

Here are some of the links that I bookmarked for the month of July. I highly recommend the 101 meals at the bottom of this list. Development a free service oriented architecture diagram. Some simple SQL rules to live by Agile Bookshelf: Ten must read books Keep your data in the tables! Best programmer quotes [...]

Exception Handling Best Practices in Java

I’m in the process of migrating some old Java 1.3 code to Java 6 and I really didn’t like the way exceptions were handled in the code. Before rewriting things I did some research as to what are considered the “Best Practices” when it comes to Java exception handling. Although On Java’s Best Practices for [...]

 
PHVsPjxsaT48c3Ryb25nPndvb19hYm91dDwvc3Ryb25nPiAtIEhpLCBteSBuYW1lIGlzIENocmlzIExhbW90aGUuICBJIGxpdmUgaW4gQmFuZmYgTmF0aW9uYWwgUGFyaywgdGhlIGNyb3duIGpld2VsIG9mIHRoZSBDYW5hZGlhbiBSb2NraWVzIHdoZXJlIEknbSB0aGUgc2VuaW9yIHdlYiBzcGVjaWFsaXN0IGZvciA8YSBocmVmPSJodHRwOi8vd3d3LmJhbmZmY2VudHJlLmNhLyIgdGl0bGU9IlRoZSBCYW5mZiBDZW50cmU6IEluc3BpcmluZyBDcmVhdGl2aXR5Ij5UaGUgQmFuZmYgQ2VudHJlPC9hPi48L2xpPjxsaT48c3Ryb25nPndvb19hYm91dGxpbms8L3N0cm9uZz4gLSBodHRwOi8vZnVydGl2ZWNvZGUuY29tL2Fib3V0LzwvbGk+PGxpPjxzdHJvbmc+d29vX2Fkczwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV8xPC9zdHJvbmc+IC0gL2ltYWdlcy9hZC0xMjV4MTI1LmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzI8L3N0cm9uZz4gLSAvaW1hZ2VzL2FkLTEyNXgxMjUuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfMzwvc3Ryb25nPiAtIC9pbWFnZXMvYWQtMTI1eDEyNS5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV80PC9zdHJvbmc+IC0gL2ltYWdlcy9hZC0xMjV4MTI1LmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8xPC9zdHJvbmc+IC0gaHR0cDovL2V4YW1wbGUuY29tL2Fkcy9hZDFfZGVzdGluYXRpb24uaHRtbDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8yPC9zdHJvbmc+IC0gaHR0cDovL2V4YW1wbGUuY29tL2Fkcy9hZDFfZGVzdGluYXRpb24uaHRtbDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8zPC9zdHJvbmc+IC0gaHR0cDovL2V4YW1wbGUuY29tL2Fkcy9hZDFfZGVzdGluYXRpb24uaHRtbDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF80PC9zdHJvbmc+IC0gaHR0cDovL2V4YW1wbGUuY29tL2Fkcy9hZDFfZGVzdGluYXRpb24uaHRtbDwvbGk+PGxpPjxzdHJvbmc+d29vX2FsdF9jb2xvdXJzPC9zdHJvbmc+IC0gZGVmYXVsdC5jc3M8L2xpPjxsaT48c3Ryb25nPndvb19hbHRfc3R5bGVzaGVldDwvc3Ryb25nPiAtIGNsZWFuLWxpZ2h0LmNzczwvbGk+PGxpPjxzdHJvbmc+d29vX2FyY2hpdmVzPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYXNpZGVzX2NhdGVnb3J5PC9zdHJvbmc+IC0gQXNpZGVzPC9saT48bGk+PHN0cm9uZz53b29fYXNpZGVzX2VudHJpZXM8L3N0cm9uZz4gLSAxMDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9uYXZfMTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X25hdl8xMDwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X25hdl8xNTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X25hdl8xNjwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X25hdl8xNzwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X25hdl8xODwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X25hdl8xOTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X25hdl8yPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzIwPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzIxPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzIyPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzIzPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzI0PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzI1PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzI2PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzI3PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzI4PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzI5PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzM8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9uYXZfMzA8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X25hdl80PC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9uYXZfNDE8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X25hdl80ODwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X25hdl80OTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X25hdl81PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzUwPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2XzY8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9uYXZfNzwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfbmF2Xzg8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9uYXZfOTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY3VzdG9tX2Nzczwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2N1c3RvbV9mYXZpY29uPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fZGVsaWNpb3VzPC9zdHJvbmc+IC0gZnVydGl2ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2RpZ2c8L3N0cm9uZz4gLSBodHRwOi8vZGlnZy5jb20vdXNlcnMvZnVydGl2ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2ZhY2Vib29rPC9zdHJvbmc+IC0gaHR0cDovL3d3dy5mYWNlYm9vay5jb20vZnVydGl2ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2ZlZWRidXJuZXJfaWQ8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19mZWVkYnVybmVyX3VybDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2ZsaWNrcjwvc3Ryb25nPiAtIGNocmlzdG9waGVybGFtb3RoZTwvbGk+PGxpPjxzdHJvbmc+d29vX2ZsaWNrcl9pZDwvc3Ryb25nPiAtIDEwNDYwMTI1QE4wNzwvbGk+PGxpPjxzdHJvbmc+d29vX2dvb2dsZV9hbmFseXRpY3M8L3N0cm9uZz4gLSA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp2YXIgZ2FKc0hvc3QgPSAoKCJodHRwczoiID09IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sKSA/ICJodHRwczovL3NzbC4iIDogImh0dHA6Ly93d3cuIik7DQpkb2N1bWVudC53cml0ZSh1bmVzY2FwZSgiJTNDc2NyaXB0IHNyYz0nIiArIGdhSnNIb3N0ICsgImdvb2dsZS1hbmFseXRpY3MuY29tL2dhLmpzJyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnJTNFJTNDL3NjcmlwdCUzRSIpKTsNCjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KdHJ5IHsNCnZhciBwYWdlVHJhY2tlciA9IF9nYXQuX2dldFRyYWNrZXIoIlVBLTcwNDM2Ny0xIik7DQpwYWdlVHJhY2tlci5fdHJhY2tQYWdldmlldygpOw0KfSBjYXRjaChlcnIpIHt9PC9zY3JpcHQ+PC9saT48bGk+PHN0cm9uZz53b29fbGFzdGZtPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fbGF5b3V0PC9zdHJvbmc+IC0gaGVhZGVyLWFsdC5waHA8L2xpPjxsaT48c3Ryb25nPndvb19saW5rZWRpbjwvc3Ryb25nPiAtIGh0dHA6Ly93d3cubGlua2VkaW4uY29tL2luL2xhbW90aGU8L2xpPjxsaT48c3Ryb25nPndvb19sb2dvPC9zdHJvbmc+IC0gaHR0cDovL2Z1cnRpdmVjb2RlLmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzUtY2hyaXMucG5nPC9saT48bGk+PHN0cm9uZz53b29fbWFudWFsPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL3N1cHBvcnQvdGhlbWUtZG9jdW1lbnRhdGlvbi90aGljay88L2xpPjxsaT48c3Ryb25nPndvb19vdGhlcl9lbnRyaWVzPC9zdHJvbmc+IC0gNDwvbGk+PGxpPjxzdHJvbmc+d29vX3Jlc2l6ZTwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19zaG9ydG5hbWU8L3N0cm9uZz4gLSB3b288L2xpPjxsaT48c3Ryb25nPndvb19zaWRlX2ltYWdlPC9zdHJvbmc+IC0gL3N0eWxlcy9jbGVhbi1saWdodC9pbWFnZXMvYWQtMTIweDI0MC5qcGc8L2xpPjxsaT48c3Ryb25nPndvb19zaWRlX3VybDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX3N0dW1ibGU8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb190aGVtZW5hbWU8L3N0cm9uZz4gLSBUSGlDSzwvbGk+PGxpPjxzdHJvbmc+d29vX3R3aXR0ZXI8L3N0cm9uZz4gLSBmdXJ0aXZlY29kZTwvbGk+PGxpPjxzdHJvbmc+d29vX3VwbG9hZHM8L3N0cm9uZz4gLSBhOjM6e2k6MDtzOjU3OiJodHRwOi8vZnVydGl2ZWNvZGUuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNS1jaHJpcy5wbmciO2k6MTtzOjU3OiJodHRwOi8vZnVydGl2ZWNvZGUuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNC1jaHJpcy5wbmciO2k6MjtzOjU3OiJodHRwOi8vZnVydGl2ZWNvZGUuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMy1jaHJpcy5wbmciO308L2xpPjxsaT48c3Ryb25nPndvb195b3V0dWJlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy55b3V0dWJlLmNvbS91c2VyL2Z1cnRpdmU4MDg8L2xpPjwvdWw+