Technology
I was once a respected coder. But for 5 years I’d designed ASIC’s using Verilog (where everything happens at once) and then for 5 years I’d turned to business. And it all changes in a decade. I’d let my skills lapse and in the interim C++ had morphed to Java and then suddenly CPU’s got really fast and scripting was back in vogue.Â
I realized that my CS undergrad was quickly becoming worthless. Web programming was a complete mystery to me. (Whether that was really a problem is a philosophical question beyond the scope of a humble blog entry). Here is my road to recovery. In bullet point form amenable to PowerPoint and as buzzword compliant as possible.
Jan 1st, 2008: Resolve to brush up on programming skills.
Which language should I learn? Web development seems cool….what’s involved in that? Narrowed it down to a) the LAMP stack or b) Ruby on Rails. Do I want to be a) paid as a programmer or b) hip ?
I went with Hip. Rails it is.
Here are the steps (and mistakes) I took on the road to recovery:
- Linux – I remember that: “ls -al” and all that. It’s the sine qua non for a real programmer.
- F@(k. That’s a lot of variants of Linux. Go with Ubuntu because I’m semi-African.
- Hmm… Windows XP is standard issue at work.
- Get an old PC from my IT guy. Spend an entire day installing Ubuntu. Realize I’m now a web programmer so start again and install the server version. What the hell? What’s involved with web programming anyway. Will I be writing the client or the server?
- Call college roommate who is on “tiger team” at Yahoo. He says: “Buy Pickaxe“. Sold. In a flash of environmental sympathy I buy the PDF version. It also saves $10. Print it out on corporate printer. Double sided to save the environment.
- Need the Rails part: Buy “Agile Web Development with Rails“. We invested in an Agile software company so “agility” must be good.
- Start reading. In the interest of time and an anxiety to see the global greeting I dispense with Linux and deploy InstantRails on Windows –> Instant gratification. (Nice to see those programmer types have dropped their antipathy towards Microsoft. I’m a web programmer. Even if it’s only on localhost. (Wow: It’s only February and I could compete with Amazon if I wanted to and if I knew where to buy all the books for my bookstore)
- I have a bookstore up and running. No one can see it. That’s ok….how hard can deployment be.
- March. Deploytment is hard. People don’t recommend Windows. Could I be the only person writing Ruby code in a Rails environment on Windows XP. Seems to be from my google searches.
- Let’s reinstall Ubuntu Linux.
- Install ruby gems. Rinse. Repeat. Rinse. Repeat. Check dependencies. Rinse Repeat. Rinse. Repeat.
- Install MySQL. (It’s nice that I don’t need to think too much about the database. Seems like something business people should concern themselves with).
- Stuff is working. Slow as all hell on this ancient PC but what the hell. People will wait for the page to load.
- Becoming a problem that I can only work on my hobby at work. Can’t afford another PC at home.
- VMware to the rescue. Downloading an Ubuntu VM on my home PC is a cinch. And hip. Which is important.
- Realize I need a real hosting service. (Weeks of agonizing research). Settle on Dreamhost. (I love those guys!)
- Deploy app. Hmmm…this is a f@(k1ng nightmare!
- Passenger (mod_rails) is released a few days later. I realize I’m back on the cutting edge. Deployment is now piss easy.
- www.assetcorrelation.com (Live as of June 1st, 2008 — 5 months start to finish)
- Start to harass Google to show me some organic search love.
It’s been a wild ride. And not as hard as I thought. In the end, we return to the beginning. I still hate writing test benches. Hacking is still fun. And not having deadlines is the way to go. 🙂
I was at a conference this morning where Spansion and Virident were presenting their latest flash memory technology designed to replace DRAM in web servers. Some interesting facts:
- Cooling and power distribution losses account for 50% of the electricity consumed in US datacenters.
- Datacenter power use doubled from 2000 to 2005 and will almost double again by 2010. Growth in electricity use has been slowed somewhat by the advent of server virtualization over the last few years.
- US datacenters use more electricity than countries like Sweden and Iran
- Datacenters use almost 100 billion kilowatt hours each year at approximately $0.10 per kilowatt hour. Datacenter electricity consumption is growing at 15% per year (!)
- Datacenter memory (DRAM) uses 2x more electricity than the total capacity of US solar panel installations.
- US, EU and Japan use 3/4 of the world’s electricity.
It will be interesting to see whether Spansion’s newly announced EcoRAM can put a dent in these problems. They are citing some impressive numbers:
- 1/5th the power of DRAM at comparable read performance.
- 800x faster than NAND flash access times.
- 30 mins to write 1TB of data on EcoRAM vs 5 hours using traditional NOR DIMM’s.
On the other hand, the representatives from Intel and AMD certainly weren’t giving their unqualified support to EcoRAM.
Wired has an excellent article on an optimal memorization algorithm developed by Piotr Wozniak. The technique has been embodied in a software program called SuperMemo and an open-source alternative called Mnemosyne
I’m somewhat skeptical that spending more time on memorizing facts is that useful but given that a few months ago I could barely remember the equation for the roots of a quadratic perhaps I should be more open-minded.
The algorithm is straightforward:
- Split the knowledge into smallest possible items.
- With all items associate an E-Factor equal to 2.5.
- Repeat items using the following intervals:
I(1):=1
I(2):=6
for n>2: I(n):=I(n-1)*EF
where:
I(n) – inter-repetition interval after the n-th repetition (in days),
EF – E-Factor of a given item
If interval is a fraction, round it up to the nearest integer. - After each repetition assess the quality of repetition response in 0-5 grade scale:
5 – perfect response
4 – correct response after a hesitation
3 – correct response recalled with serious difficulty
2 – incorrect response; where the correct one seemed easy to recall
1 – incorrect response; the correct one remembered
0 – complete blackout. - After each repetition modify the E-Factor of the recently repeated item according to the formula:
EF’:=EF+(0.1-(5-q)*(0.08+(5-q)*0.02))
where:
EF’ – new value of the E-Factor,
EF – old value of the E-Factor,
q – quality of the response in the 0-5 grade scale.
If EF is less than 1.3 then let EF be 1.3. - If the quality response was lower than 3 then start repetitions for the item from the beginning without changing the E-Factor (i.e. use intervals I(1), I(2) etc. as if the item was memorized anew).
- After each repetition session of a given day repeat again all items that scored below four in the quality assessment. Continue the repetitions until all of these items score at least four.
There is a website called Memverse which has implemented this algorithm for memorizing popular bible verses. I’ve been using the site for about 3 months now and it is very impressive how much you can retain using the algorithm.
Skype has released version 4.0 (beta) and seem to have completely lost the plot on GUI design. In prior versions it was possible to have one’s contact list docked on the right side of the screen leaving plenty of real estate for working. The new layout now takes half of a 21″ monitor and can’t be made any smaller! That now makes it impossible to keep Skype open and periodically monitor online contacts. I would be ok with Skype taking over my screen once a call has started. Before that time, though, it should remain as unobtrusive as possible while still allowing me to monitor my contact list.
Skype needs to realize that our PC’s are not phones. Communication is a means; not an end.
I would recommend staying with Skype 3.8 until this issue is resolved.
I have been using SmugMug for hosting my photos for a while now. There are a few benefits that make it worth the small annual subscription and don’t seem to be available from any of the free offerings:
- Your friends and family can download photos in full resolution
- Absolutely zero ads. Not having ads posted alongside your photos makes them look a LOT better.
- Unlimited storage and quick/easy bulk uploads
- A personalized URL
- Backups in 3 states.
- No need to login to view the photos (strangers really aren’t interested in your photos!)
- More professional look and feel. This is a website that is used by many pros.
I’ve used SmugMug for three years now and have been extremely happy with all aspects of the service. If you’d like to save $5 on a subscription, enter the following coupon in the ‘Referred by’ field:Â LQvt6m1M08vGw
Over Memorial Day weekend I migrated my Rails Application to Dreamhost using mod_rails (Passenger). It was not an entirely smooth process but I was also upgrading from Rails 1.8.x at the same time. That was compounded by making the foolish mistake of trying to rebuild my database using Rake migrations. (That’s a bad idea. I could have saved many hours by just uploading the schema)
Here is the procedure I followed (hat tip to Nock):
- cd ~/
- rails your_app_name -d mysql
- Copy app/, database.yml, routes.rb, db/
- Change public/.htaccess from .cgi to .fcgi
- put your app into production mode (uncomment line 5 in environment.rb)
- run rake db:migrate RAILS_ENV=production
- chmod -R 755 ~/your_app_name/app
- rm your_app_name/public/index.html
- killall -USR1 dispatch.fcgi
- killall -USR1 ruby
One comment on step 4. For some reason none of my stylesheets would load. Much of the advice gleaned from endless Google searches seemed to suggest that the problem would be fixed by setting the RewriteBase in /public/.htaccess. That turned out to not be the case.
My stylesheet problem was caused by having this line twice in my .htaccess file
RewriteRule ^(.*)$ dispatch.fcgi[QSA,L]
DO NOT uncomment the one before RewriteEngine On , as all the tutorials seem to imply, just change the .cgi to .fcgi in the block below it.
Thanks to Dreamhost for their stellar support over a frustrating (for me!) Memorial Day weekend. In the end, (as is so often the case), very little of the frustration was caused by Dreamhost or mod_rails but, rather, by some of the vagaries of Rails. I’m guessing that future deployments would be much smoother as this was my first time deploying to a shared hosting environment.
I use Dreamhost to host my websites and they have now added support for Passenger (a.k.a mod_rails). Ruby on Rails deployment hassles should be a distant memory soon!
If you’re looking for a cheap and cheerful hosting company for your Rails app, I highly recommend Dreamhost. It’s great for the solo developer (or small team) because for a small amount per year you can launch your site on a shared hosting service and then later easily migrate it to a virtual private server as your needs change.Â
To link to Amazon, use the following code
http://www.amazon.com/exec/obidos/ASIN/<10 digit ASIN number>/simplelight-20
Simply insert the relevant ASIN number for the product that you are linking to. You can find the ASIN number at Amazon’s Associate page
For example, to you would link to For One More Day by Mitch Albom like this:
To enable 640×480 video in Skype (instead of the usual 320×240 resolution), add the following lines to the config.xml file in the Skype user directory
<Video>
   <CaptureHeight>480</CaptureHeight>
   <CaptureWidth>640</CaptureWidth>
   <Fps>30</Fps>
</Video>Â
There will probably already be a <Video> … </Video> section in the file so just add the middle three lines in that section.
The config.xml file is typically located in:
c:\users\<win_username>\AppData\Roaming\Skype\<skype_username>
Note: The “AppData” folder is a hidden folder so you’ll have to search for it. Either that, or just make all the folders in c:\users\<win_username> visible.
I’m running Windows Vista 64-bit so your location might be different. (If you do have the location for a different OS please leave a comment and I’ll update the post). If you enable “Display technical call info during calls” under Skype->Options->Advanced->Connection, you will be able to monitor the resolution and frame rate. (Hover your mouse over the main Skype tab and a yellow box will pop up with all the technical Skype data, including frames per second, transfer and receive resolution. This is useful for testing whether you are indeed sending the higher resolution image.)
Also, make sure you have the latest Logitech webcam driver installed. You don’t need the Logitech app, just the driver. I use the Logitech Quickcam Ultra Vision  and the image quality is very good.
Skype has gone to great lengths to differentiate this “hack” from their HQ (high quality) video (which requires Skype-endorsed webcams) but I think the difference is marginal if you have decent hardware and bandwidth. It appears that as of Skype 3.8 you will no longer see the usual HQ Video logo but you will still be transmitting video at the higher resolution. Your frame rate might take a slight hit depending on your uplink bandwidth.Â
(As an aside: I highly recommend not upgrading to the current Skype 4.0 beta)
The Tiobe Programming Index gives an indication of the popularity of programming languages. I’m pleased to see that Ruby (and consequently Ruby on Rails) continues to move up the rankings. I guess I’m going to have to learn Java at some point.