Working on a Referral Pre-Launch Site

Since I’m at zero followers, I’m crafting a plan to bring in as many emails as possible in a week’s time so I’m not “launching to crickets” as the Harry’s founders phrased it. What Harry’s did was nothing short of remarkable. They acquired more than 100,000 email addresses in seven days on a referral campaign where they awarded products to those who participated. The more referrals a person garnered, the greater the reward. If you’re interested in the whole story, check it out here.… read more


Making Commitments, Reaching Out

In a very real sense, today is monumental for me. Today, I committed developer resources (not just my own) to my upcoming mobile app. I don’t quite have the specs together for the developer, but I have enough now that I can get him started on building some of the foundational components of the app. We’re making room in our collective schedule to get this project formally under way.… read more


Preparing for Countdown

Today, I focused on setting up email and twitter accounts so I could begin to get the word out for Matchpoint.… read more


Ground Zero

I am at ground zero for a new venture I’m launching. So, let’s talk about what I’m planning and where I hope to go with it.… read more


A Reflection of the Technologies I Built Things With

Sometimes, a random event triggers a walk back down memory lane. That moment came for me the other day when I came across a CDR containing the code I ever wrote the first 15 years of my programming career. For just over 30 years, I’ve been building software professionally and I have kept backups of nearly everything I’ve ever written. What somewhat surprised me as I looked through all this old code is the breadth of machines, operating systems, and languages I touched along the way. As I thought on this list, I wondered what all I made use of during my career and wondered what that list might look like, so I set out to compile just such a list. If I used the language, operating system, or platform and built a complete application that was deployed and used… read more


Dynamic Routing in Rails Revisited

Ever since my original post Creating Dynamic Routes at runtime in Rails 4, I have been digging into Rails routing more and more. I’ve gotten a lot of feedback on the post itself as well as comments in the IRC #rubyonrails channel with an over abundance of passionate pleas not to do routing this way in Rails.… read more


Creating Dynamic Routes at runtime in Rails 4

I was working on a fairly simple site that has a content management component to it and wanted to find a way to dynamically generate the routes to the pages that were managed on the back-end by the site authors. This article presents an alternative to the usual approach of creating a catch-all route in the routes.rb by generating specific routes to each and every page.… read more


Adding Google Analytics script to Sprockets

Today, I wanted to add Google Analytics for tracking my website’s usage history. Rails 4.0 has an excellent assets pipeline that generally works well out of the box with little fuss, but when you try to do something outside adding another require to the “assets/javascripts/application.js.coffee” file, it gets a little more complicated to implement. Here, I show you exactly how to add Google Analytics as a coffeescripted script that is only loaded in the production environment.… read more


Gems you should consider for every Rails projects

Ruby on Rails provides a lot of great functionality out of box, but there are a few gems I almost always add to my new Rails projects. Here are some of those gems I practically cannot live without.… read more


Weak Password will get you Hacked!

If you’re like me and you are online a lot, you probably have more website accounts than you can count from Facebook and Twitter all the way to your banking and blogging accounts. Today, I got an alarming email from my email provider saying that multiple attempts were made to log into my account from Argentina. Fortunately, my provider blocked the attempt, sent me an alert and I was able to act promptly! How did they do it? Well, over time, the major web services collect a lot of data on break in attempts and patterns of behavior and, whether you like it or not, know your general behavior, frequency, and geographical areas where you log in most. If you live in Georgia and then fly to California and attempt to log into a service like Facebook, Twitter, or Google,… read more


Ramaze vs. Padrino Benchmarks

I have been developing all of my web-based projects in Ramaze since January 2009 when I switched from Rails to Ramaze. At that time, I did some benchmark comparisons. The other day, I heard about Padrino, the micro-framework for Sinatra, which is comparable to the Ramaze micro-framework for Innate. What caught my eye was the benchmark tests the Padrino folks had run that put Ramaze at the bottom of the stack. I thought to myself, “no way!” and set out to run my own benchmarks comparing Padrino to Ramaze as I know at the very least, Ramaze quite outshines Rails’ performance. Something ain’t quite right.… read more


A comparison JRuby vs. Ruby MRI with Sequel

For the most part, I stick with Apache 2, Phusion Passenger, and Ruby MRI as my deployment stack. Even so, I regularly foray into other territories to see what’s going on in the wide world of Ruby. This weekend, I turned my eyes to JRuby again for the first time in almost 18 months. I wanted to explore how what JRuby would do performance-wise with a database intensive application.… read more


Making Ruby talk to MSDE

Getting Ruby to talk to Microsoft SQL Server 2005 is one thing. Getting Ruby to talk to Microsoft SQL Server Developer Edition 2000, has one twist that threw me off for hours. Here, I’ll show you how to do and hopefully save you lots of frustration and brain damage from banging your head against the wall.… read more


Implementing Ruby jobs in the background

I needed a way to kick off a background job that was triggered by an end-user on my Ramaze-backed website and could run for almost two hours! This article brings together all the elements to get the job done.… read more


What makes a top award candidate, anyhow?

In our local Linux user group mailing list, one of the participant asked the group for recommendations for open source software projects that should be considered for a prominent publication’s top 100 awards. The ensuing discussion got me to wondering: What is the purpose behind doing the awards? Most of what I see talked about are all well-known and well-used, such as git, mercurial, word press, joomla, django, and so on. Usually, when I look at a list like this, I’m looking to uncover new and undiscovered projects that have real potential to make a real impact in my daily life and thus was somewhat surprised that such mature projects are being so heavily promoted in the discussions.… read more


macports is not darwinports

For those of you who don’t keep a close eye on the macports system that provides you with convenient builds of popular open source software, let me put you on guard: macports supplanted darwinports a few years back to avoid continued confusion over the name. I was having a good bit of trouble getting ports to install ImageMagick and have had trouble many other times getting ports to install things. As such, I often fell back on fink or compiling and installing from source rather than figuring out the root causes of my macports problems. Macports was surprisingly easy to fix up and get fully operational again, and this was on a fairly old machine that I am pretty certain I started with “Darwin Ports” roughly 3.5 years ago.… read more


One ActiveRecord Model Acting as a List and Tree

Occasionally, Rails can appear to make your life extremely easy while silently throwing you a curve-ball. I needed a model that required a hierarchy while also preserving order of the records. Although fairly straightforward to set up and start immediately using, there are a couple of “gotchas” to watch out for and this article covers those pitfalls and shows how to apply the cool new “dirty attributes” feature in ActiveRecord.… read more


Rails vs. Ramaze Performance Comparison

One of my biggest concerns of late is that my “more than just a little trivial” Rails projects seem to find their way straight into the heavyweight category in no time at all. While I am quite hopeful that Merb being the 3.0 version of Rails will resolve many of the issues I face today, I have no idea when I can truly count on Rails 3.0’s arrival at the party. Thus, I have begun looking at other frameworks that are available today.… read more


Bootstrapping my Blogs

Ever notice that blogs that are tutorial in nature spend a lot of time providing instructions on installing things, but a whole lot depends on what the author already has installed that he’s forgotten to tell you about? Or perhaps the author simply left out the details necessary for you to fully replicate his environment? For me personally, I get downright tired of writing the same thing over and over.… read more


Ultraviolet gives new life to Syntax highlighting

I am tired of Google’s Syntax highlighter.  If I accidentally switch to Visual mode in the editor and do some edits and switch back to HTML mode, then I lose the class=”code” moniker and I have to go through the entire post and fix. Another drawback I have with Google Syntax highlighter is that the page renders without highlighting and then all the code listings change to syntax highlighted text a few moments later. Introducing Ultraviolet, a syntax highlighter supporting over 50 syntaxes and any TextMate theme.  Ultraviolet is based on Oniguruma, a regular expression library that comes standard with Ruby 1.9. Ultraviolet requires a little more effort for me to cut and paste, but I am definitely much happier with the end results and Wordpress no longer mungs my posts. Only real complaint I have is that I can’t… read more


Ramaze and ActiveRecord

Thanks to the great folks on IRC over at Freenode#ramaze, I was able to not only get Ramaze working with Erubis and Activerecord for a pseudo apples to apples comparison of Rails vs. Ramaze performance benching, but I was also able to get Apache 2.2.9 talking to Passenger to Ramaze. This quick post will take you through the basics.… read more


Initial release of Elemental

I am happy to announce the initial release of Elemental 0.1.1. Elemental provides enumerated collection of elements that allow you to associate ruby symbols to arbitrary “display” values, thus allowing your code to think symbolically and unambiguously while giving you the means to easily display what end-users need to see. Additionally, symbols are associated with ordinal values, allowing easy storage/retrieval to persistent stores (databases, files, marshalling, etc) by saving the  Element#value as appropriate (String by default, Fixnum if you “persist_ordinally”). The primary aim of Elemental is to collect and abstract literals away from your code logic. There’s an old programmer’s wisdom that you should not encode your logic using literal values, especially those the end-user is exposed to. Complete details provided in README.txt http://github.com/mwlang/elemental/tree/master http://rubyforge.org/projects/elemental/ From Gem:… read more


Ruby, Mysql, CentOS 5, and 64-bit

I have lately switched away from Ubuntu as my desktop and started using CentOS 5.2 because I wanted better support for a lot of RAM and virtualization (where I can quickly commission Linux servers to build out my testbed of target environments).  With the change, I also make the leap into pure 64-bit libraries with little to no 32-bit libraries installed.  There’s been a few sticky points to push through and one of them is getting Mysql and the appropriate mysql gems installed.  This quick post shows the way.… read more


Overview of Xen Virtualization

Many people start looking at Virtualization Technologies because of the promise of doing more with less and high-availability solutions that the technology offers. However, there are many other benefits to virtualizing your data center, which are explored herein. Here, we will mainly focus on the free, open-source offering of Xen. This post closely follows a presentation I gave at the local Classic Hackers UGA Linux Users Group (CHUGALUG) in Athens, Georgia.… read more


Getting mouse wheel to work with KVM and Ubuntu

I have been busy getting a Ubuntu based Network Attached Storage server up and running as well as finally switching my trusty desktop to Ubuntu running my old Windows XP as a VMWare Server image.  All was fine and dandy until I decided to add a KVM to the mix so I could easily switch between the NAS and my workstation without having to have two monitors and keyboards. Turns out the mouse wheel would stop working after a switcharoo.  It took me a little while to track down the solution on the Ubuntu forums.  There was a lot of back and forth in the comments, but this is the dead-simple solution:… read more


Jumpstarting your Virtual tour with Oracle VM

Server virtualization technology has come a long ways in the last 18 months (today being a wonderful October 28, 2008 crisp, cold Fall Sunny day).  Here, I am going to take a look at Oracle VM, one of the relative newcomers to the game and show you how to quickly get up and running with a Xen host and virtual server.… read more


Rails has and belongs to many (habtm) demystified

Every time I have to implement a many-to-many relationship between Rails models, I seem to have to figure out how to do it effectively all over again. Especially as Rails seems to evolve the relational hooks with better support and elegance. Here, I will show a has_and_belongs_to_many strategy that works well for me. Along the way, I’ll expose a few other minor tricks, such as adding a custom inflector for pluralizing your model or not adding the ID column on a table declaration. The following Browser Edit form is what we’re going for. That is, having a list of Operating Systems to check off while editing a Browser object:… read more


Changing ANSI colors in Terminal on Macs

Probably the most frustrating experience I have had with Macs so far is figuring out how to change the ANSI colors in Terminal (Terminal.app) so that I can read the outputs of man and most especially ls and comments in vi when colorization is activated and I have chosen a dark background theme. I am using Mac OS X Leopard 10.5.4 at the time of this writing. These are the steps I took to fix that most hideous of all colors, dark blue on black background:… read more


Converting Oddmuse Wiki to Edgewall Trac

Our company began long ago with wiki’s, but we chose the Oddmuse wiki way back when. These days, we’re heavy users of Trac wiki because of its integrated ticket support system. So what to do with all those old wiki’s that folks have stopped using and reading. The Oddmuse wikis still hold valuable data, but they have since become an administrative overhead to keep around, so I decided to convert them all to Edgewall’s Trac. To get started, I needed to know how to get the data into Trac. The following links gave me an API I could utilize to create trac pages and content:… read more


Configuring ntpd to hand out time to local servers

Syncing your servers to public time servers is one of the most common ways of keeping server times in sync. Apparently the less common approach of configuring one server to sync with public servers and it in turn becomes the authoritative time keeper for the rest of your servers is less well-known. Digging through the copious ntp documentation, I have to say, its some very, very dense documentation mainly because the jargon isn’t well translated to a layperson’s “How do I?” inquiry. I combed the documentation for days trying to figure out exactly how to set up a server to hand out time to all my other servers. Normally, my Google-fu can pierce just about any need, but “time” “server” “local” and so on are all too common terms in both client-and-server and client-only configurations and by far and away,… read more


Pradipta's Rolodex

Something funny happened last night. A one, Max Archie from Indiana hired an India-based Call Center to find a couple of Ruby developers. Well, by and by, the recruiter mass-mails some 400 developers asking if they’re interested. Within about 10 mins, I had to 10 emails of somewhat ticked off developers begging for people to stop replying! Unfortunately, it was getting on late and stressed out developers up after midnight tend to get a little cantankerous and start poking real fun at the world in ways only we can do. Today, we have Pradipta’s Rolodex! digg link Reddit. To all developers out there unfortunate enough to get caught in this web, thanks, for you have made me laugh out loud harder than I have in a good while! Cheerios!… read more


Geocoded Zipcodes

You would think that loading up a database of zip codes would be an extremely simple case of finding a public database on www.usps.gov, and then loading up with a database bulk load. It turns out that, while the USPS does offer products for you to purchase, and a rather nice lookup interface for looking up zip codes and so on, there’s not really any free data to be had that I could tell. So the hunt was on to find some zip code data, preferably geocoded (latitude/longitude for GIS) zip codes and then load them into MySQL. A bit of hunting around turned up this list of zip code databases. The first link to CivicSpace database appears to be defunct (I got a Go Daddy “this page is parked” page). So, the next free one, offered by Popular Data… read more


DRYing your Views

Let me start out by saying that I am finally beginning to understand a bit about that magical Ruby block notion and how implementing methods through block passing can really empower you as a Ruby developer. Thanks to, a most excellent Ruby tutorial, I am definitely feeling a good bit more empowered about getting my Views in Rails all DRY’d up. The problem: I wanted to introduce a property editor metaphor for the website I’m working on where properties could expose edit forms for just about any situation, much like wordpress’ widget interface does. That is, there’s an area of the current page that shows basic information about the property in a read-only (and preferably compact) form, and user could click an “edit” button and exposed an editable version of the properties. The “edit” link becomes a “cancel” link, which,… read more


Cross-browser AJAX updates to table elements

It seems that one of the toughest Javascript challenge is to get your AJAX code consistently behave between browsers when you’re dealing with IE’s handling of table elements vs. Gecko and other engines. It took quite a bit of finagling to figure out exactly where the issues and trappings are. Most web developers know about IE’s, ahem, rather unque way of handling tables and the likes, but what’s a web application to do if (s)he is gonna bring some sanity to the picture? Well, Mootools 1.2 goes a long ways towards easing your misery in terms of interacting with the DOM and doing some really cool Javascript things in a consistent manner, but you still have to figure out the specifics that you’re encountering for your application’s needs. My needs were simple. I wanted to use AJAX to pop up… read more


A model-free wizard

Maybe I’m taking the whole MVC thing too far, but I’ve been reading and learning both Ruby and Rails at a fairly fast clip and just when I thought I was getting the hang of what goes in models, views, and controllers respectively, along comes The Advanced Recipe for Rails book with a recipe for implementing a wizard that threw me for a loop here. This implementation just so happens to be based off acts_as_state_machine, which plugs into your model classes. And of course, the acts_as_wizard plugin wasn’t too far behind! Well, asking myself whether the wizard logic should be allowed to bleed over into the model prompted me to see just how hard it was to build a wizard in a web interface anyhow (this is my first attempt at a multi-step workflow bit on the web). Most of… read more


Handling Date Entries

Separate inputs for a single Date Entry? pop-up Calendars? Enforce one way (i.e. enter in “mm/dd/yyyy” format)? What happened to the end-user perspective? User input parsing and validation is classic computer science and usability fodder, yet we seem to get ever more clever at making it more cumbersome to enter a date than to get a date! (I’ll leave the pun implications to the reader…)… read more


Why Macs?

For Years, I have used nothing but Microsoft Windows desktops and my development effort was 100% Windows based systems. Long story, short, lets just say I knew way more about the inner bowels of Windows and its various API’s than I will ever care to recall nowadays. Around 2001, I realized “The Web” was where the future lies and took nine months off from doing paid contract work to rediscover UNIX, or more specifically Linux where I set up DSL and my first server at home and ran various websites off Zope (python-based CMS). But I still used Windows as my main desktop. Then around late 2005 or early 2006, our company, which does Ruby on Rails development, decided to buy a couple of the first Intel MacBook Pros and give them a whirl.… read more


Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging …and with that, I almost did delete this post to begin start blogging.… read more


Conway's Game of Life in CoffeeScript

I was recently invited by Jonathan Wallace to a local Code Retreat where the developers were going to tackle Tim Conway’s famous Game of Life  Unfortunately, I was unable to attend, but the whole idea sparked my own self-exploration into both CoffeeScript and Middleman, which I had little practice and practical experience with.  You can find the resulting code in its entirety at https://github.com/mwlang/life_with_coffeescript… read more


Apache 2.2 and Active Directory and Group restrictions

I was really struggling with getting Apache and Active Directory talking and restricting access (authorizing) only a sub-set of users that belonged to a particular group. Here, I show you how I solved the problem.… read more


Install Passenger on Ubuntu Intrepid 8.10

Phusion Passenger is one of the easiest Rails and Rack environments to set up and configure with Apache2. With my bootstrapping scripts, the ability to establish a Virtual machine image and have a working Rails application on it in minutes is a reality. Here is how I do it.… read more


Bootstrap Ubuntu Server 8.10 Intrepid 64-bit

This post covers getting the basic Ubuntu Server 8.10 Intrepid up and going and ready for further configuration (such as Ruby on Rails, or MySQL Server, or Bind 9, etc.).… read more