I’m adding a last_login column that I want to be non-null, but because it has no default value most DBs won’t allow the new column to be added (it violates data integrity). So the thing is to add the column without a a non-null constraint, populate it with acceptable values, and then to change the column to include the constraint.
As part of this amazing new game that we are working on we have an online pixel editor component. Right now it is a rough proof of concept. The primary goal is to create a simple online editor that provides the right blend of tools to easily create 32×32 pixel images which can then be saved locally or uploaded to the server. You can even load previously uploaded images, sweet!
The inspiration is Pixen, but instead of being Mac-only it will be available online for all platforms. Pixen provides a strong tool set and a great interface, but why be so exclusive about it? I know, right? The browser is the future anyway, and doesn’t crash as often.
Check out Pixie here. The idea is to keep it simple, there are only a few features missing from fullfilling every one of my wildest dreams (undo, selection, semi-transparency). For fun check out the JS code, it was designed with clarity and extensibility in mind. It’s a purely JS/CSS based editor, built using Prototype.js.
Editing images is fun!
To get the images to the server they undergo an amazing (and probably inefficient) journey. Each pixel is read from the “canvas” and put into an ancient (late 90s) JS PNG encoder. That PNG encoder then spits out the image as a png data file which is then base64 encoded and sent to the server. The server base64 decodes the file and saves it to the local file system. Loading images from the server makes it even crazier! Since this ancient PNG encoder doesn’t load PNG data (to my knowledge) the server uses RMagick to read the uploaded image’s pixels and convert them to a JS array of hex color values, then passes that array into a load method back on the client. It’s amazing!
My home-boy A-Tang was recently in a car driving back from a party. He asked his friends if he should yell “Boners 5-0″ out the window at a policeman who had pulled someone over. The consensus was that he obviously should.
A-Tang: Boners 5-0!
** Lights + Siren **
Policecop: I heard someone yell something out the window, do you require any assistance?
Partygoer: Uhh… no officer, we’re all fine here.
Policecop: Well I see you’re missing your seatbelt, that’s a ticket. Do you have your license and registration?
Drivey-Tang: Sorry, I don’t have my license with me…
Policecop: That’s another ticket. [To A-Tang] Are you happy? You just got your friend two tickets.
This story illustrates a point. Regardless if something is a good idea or not, if it is convenient to do and it might be a good idea then it is much more likely to be done than something that is difficult and definitely a good idea. For context check out The Easiest Way to Change People’s Behavior.
This applies a lot to personal habits. Anything within arms distance should be good for you. Tired of always eating a ton of chips and soda? Move them into the garage. Getting distracted by things nearby? Move to a different room or location where distractions are further away.
Here’s the kicker though: being a knowledge worker who needs to use the internet for most tasks distractions are always within arms reach. There might be some programs out there that move the most distracting and least productive parts of the internet away and if so they are probably of some value. Self-restraint will also help, but for maximal productivity it takes more than just that. Other solutions: Put on a business hat when doing business and a party hat when just surfing the net, designate certain computers/locations for work or play and keep them separate; your brain will figure it out if you are consistent. Adding a physical component to the context switch will put it out of arms reach.
Writing tests first is your only opportunity as a developer to black-box test your own code. If you write tests after you write the code then you are too familiar with it’s workings to do successful black-box testing. This doesn’t matter so much in a larger team where you have designated QA and can get other developers to write tests for your code (or in La-La Land as it is called). If you are a solo developer or on a real team where everyone else has their own problems and everyone can barely find time to eat then test first is your only opportunity to black-box test.
Sure, maybe if you’re the best developer in the world your code can’t be improved by testing or otherwise. Maybe if you’re not the best developer your code can’t be improved either, but in the same sense that the Home Improvement boardgame can’t be improved, not a good position to be in.
So don’t listen to Joel and Jeff, well I mean, do listen… and they’ll probably be first to agree that you need to do your own research and find what works for you and not take anything on either side of the argument as gospel.
I remember installing a userscript that would display Google search results in two columns in days of yore. Then one day it stopped working. All the other Google userscripts were massive customize everything about Google ever. I just want two columns homie, and favicons, but I’ve already got the FF plugin for that.
So here it is, the amazing remake that is as good as the original… Two Column Google, nothing fancy, just two columns.