2 February 2012 :
code, php, rails, ruby, wordpress
Some seven years ago, I began life as a web programmer by learning PHP to build my first WordPress blog. Over the past twenty four hours I’ve embarked on my first project using a “new-to-me” programming language called Ruby on Rails. While I’ve been working my way through Michael Hartl’s Ruby on Rails Tutorial Book an upcoming presentation to a potential partner led me to just jump in and start buidling a prototype. Here’s a couple of things I’ve learned:
- Rails is very different from PHP, yet somehow more elegant
- Scaffolds are a great way to cheat as a programmer, but messy to clean up if you do something wrong
- Don’t use a plural name for a model (i.e. “news”) because it will cause you a world of pain
- Google as always is your friend but be sure to add the phrase “Rails 3″ to your searches
- That said, there are answers to your questions out there, just be patient and try to find answers on stackoverflow. They truly are the best out there.
Anyways, I’ve been at this too long. Time to go home and get some sleep. More soon!
2 January 2012 :
code, new year, php, programming, wordpress
Today, I relaunched my blog design. As regular readers of this blog will note, I probably spend more time writing about reprogramming my blog than actually writing it. I’m hoping to change that in 2012 but allow me for a minute to discuss the story behind the latest incarnation of RasheqRahman.com.
The impetus began this past summer when Twitter announced its new CSS framework called Twitter bootstrap. As I read more about the theme and downloaded the v1.0 source code, the simple, clean design tugged at me as if begging me to use it in a project. I had looked for years for a simple theme that was mainly white for the text part but had a fixed top navigation bar that could pull together my different interests (photography, writing, web development) but in a compartmentalized way so that the output of each activity could be cleanly displayed in a format that highlighted its unique characteristics. Bootstrap provides such a lattice upon which build such websites. As always, WordPress is the brains behind this project because, like the dependable friend that it is, I can connect it to my front end HTML and CSS almost immediately and know that the key files will be in the right place and easily customizable.
I vowed for this project to use as few WordPress plugins as possible, relying more on code snippets and design patterns to customize my website so I truly understood what was “under the hood.” As I hope to share in coming posts in the code category, I did this in order to improve my PHP skills and to gain a better understanding of WordPress theming. Having now completed this site and several others this year I am excited to declare that I intend to “hand roll” my own themes from here on out, i.e. using only HTML templates and adding in the WordPress code myself. If you are at the point of having configured a few existing off the shelf WordPress sites yourself and are looking to really grow as a WordPress developer, I highly recommend the “roll your own” approach.
Overall the process took some four months, with a two month long break in the middle and several pauses in the middle while I thought about the design and how I wanted everything to fit together. I decided to launch it today to kick start the New Year knowing full well that both content and design need some continued tweaking.
Look for the aforementioned coding posts in the coming weeks and please feel free to comment below. I look forward to your thoughts and questions.
6 April 2008 :
featured, mac, php
Today, I sold my old Powerbook G4 to someone else, bringing to the end my first Mac laptop in the modern (post Jobs’ return to Apple) era. This Mac was where I learned to program PHP and run MYSQL queries, where I first blogged and built my first production level website – www.nybap.org. It lasted for four and half years, much longer than I expected!
Fortunately, last week I purchased a new MacBook Pro 15 inch 2.4GHZ beast which will carry me forward!
26 April 2006 :
bangladesh, featured, general, php
Hi. If you are a regular reader or spammer of this blog you’ve may have noticed that the blog has been down for the past couple of days. This all started with a badly botched attempt to upgrade my blog from WordPress 1.5.2 to v.2.0.2. Within minutes of copying over the files per the upgrade instructions, I was getting the dreaded “white screen of death” in php when I tried to load my home page. For the past days I’ve been working with the good folks at Textdrive, posting on their forums, but with no luck.
However this morning, I retraced my steps a little bit and with the help of the WordPress forums and Google, I was able to piece together a hack for my wp-config.php. I’m still not sure why this works but the hack turns off magic_quotes_gpc and disables the WordPress cache. I hope if any WordPress gurus are reading they will comment and shed some light on what these hacks do. Nonetheless, my site is up and running again, so please visit once more.
Now I have to get on to writing something worth reading …
31 May 2005 :
bangladesh, featured, php
Tod Maffin wrote about my OPML project for on his blog, iloveradio.org. Let’s see how long it takes to for Tod’s entry to be the top item when you google “rasheq rahman”
(As of this writing, his original post is #10 on the results page.)
26 May 2005 :
opml, php
A few days back as I was skimming through my plethora of rss feeds on Bloglines I came across a post from Tod Maffin looking for a programmer to write a simple script which would parse an OPML file of podcasts into HTML which could be included in a web page. The task was straightforward enough and given the ubiquity of OPML in RSS readers, I knew someone else would have at least written a basic parser in PHP that I could start with. I wrote back to Tod telling him that I was the man for the job and set about working on the script. I offered to do the script pro-bono as a way to help spread the word about public-radio podcasts which keep me entertained and amused throughout the day.
A quick google search brought me to Joe Grossberg’s PHP script for including his OPML Bloglines subscription list as an HTML un-ordered list on his blog. His code was very straightforward and well writen so I decided to use it as a base.
My first task was to strip out all the code that was particular to Bloglines OPML format and customize the script to the format of Tod’s OPML file (you can find an example here). This proved to be more difficult than I originally anticipated and I had to consult the PHP manual to understand how the PHP function, xml_parse_into_struct function worked in order to make sure I was pulling out the parsed podcast feed title and URL. However, after a few hours of trial and error, I was able to parse the OPML file correctly into an ordered list. I even added a small bit of code to ignore the first entry in his OPML file which is a link to add new podcasts. (Tod had hardcoded that link into his website and he only provided the link in the OPML file so that it could be used in the Ipodder directory to have podcast listeners contact him about new podcasts).
With the parsing complete, I turned to the task of displaying the podcast information in an HTML table. I took my cue from Tod’s orginial page which he had been manually updating as new podcasts were added. In that layout, podcasts were organized by categories and alternating categories had the same color so that it was easy to distinguish between categories. I wanted my script to generate the table entirely using PHP so I had to reaquaint myself with the process of writing code by hand because my script would have to add the table tags dynamically depending on how many podcasts were in the OPML file. After a few hours of tweaking the code and a night’s worth of sleep I finally had it generate a basic table which I could include in another PHP file.
In order to make the table a little easier to read, I used the trick of alternating colors for table rows that’s become popular around the Net and in applications like Apple’s iTunes. The easiest way I found to do this was to keep track of the number of podcasts in each category. Every time my script would go to write out the table cell definition for a podcast it would check to see if the podcast number was divisible by two meaning that it was even. Even numbered podcasts would be colored using one color and odd numbered podcasts would use a different color. To make things even more interesting, I kept track of the category number as well and wrote code to create two sets of even/odd color pairs – one for even numbered categories and other for odd-numbered categories. You can admire the results at http://todmaffin.com/feeds/ . http://publicradiofeeds.com.
With Tod’s permission I’m releasing the source code for my file under GPL so that others might benefit and improve on it. The file is called ipodder.opml.class.php. To use it, you’ll need to add the following code snippet as a table row in another .php file:
In addition you’ll want to set the color values for even/odd podcasts and categories using the following four variables:
Anyways here is the link to the ipodder.opml.class.php file.
I hope you find it useful in and of itself or as a point of departure for building your own OPML parser. Please email me with any feedback you might have at projects@rasheqrahman.com.
8 May 2005 :
open source, php
I was first drawn to open source by the promise of free software. Blogs I read and respected would suggest a GPL’d app which I would download, use and not think twice about as long they worked. Open source apps were like any other piece of software – the only difference was they didn’t cost me anything.
However, now that I’ve been learning PHP, I have begun to appreciate open source apps in a completely different way. For me, taking apart a PHP program, tracing functions and variables across different include files, has taught me more than any book about how to write proper PHP scripts. The fact that I can “look under the hood” to see how a program is constructed is fascinating and has inspired me to do some tinkering myself.
Scuttle, my bookmark manager has a great feature which allows you to mark a bookmark public or private. This is most often done when the bookmark is first added but can be amended later by editing the bookmark on another page. By default, new bookmarks are publicly viewable which means that you don’t have to log in to access them. This is great for most uses but for personal bookmarks I would have to either remember to set my bookmark to private when I first added or click on the edit link which would take me to a separate page where I would have access to edit all fields (URL, description, tags, etc) related to that bookmark. All I wanted was a simple link on the page which would allow me to mark something as private or public without having to edit the entire boomark record. However, I noticed that beside the “edit” link there was another link called “delete” which allowed me to directly delete a link without having to go to another page.
Harnessing the power of open source, I was able to learn that the delete function worked quite simply and elegantly by parsing a URL which contained the id number of the boomark to be deleted. This boomark id was used by a php script to construct a DELETE query in MYSQL which removed the bookmark from the list of visible bookmarks. Knowing that making my bookmarks private or public was just a matter of executing an UPDATE query to set the bookmark status to either (0) for public or (2) for private, I easily copied the php file used for the delete action and modified the SQL script to UPDATE instead of DELETE. In the main bookmarks file, I also added two links to the script that created the bookmarks list which would allow me to mark boomarks public or private. Voila !! Without having to put in a feature request to the author I was able to customize scuttle to suit my work style.
Simply put, that’s really cool …
18 April 2005 :
code, php, programming
I wrote a few weeks ago about learning php. Well today I got stumped by a php problem so I took the brave step of contacting the author of my php book, Jason Gilmore, to see if he could shed some light on my problem. I was surprised to see an answer from him by the time I had finished dinner and he even dropped a nice comment on my blog.
For a beginner like me, it’s nice to know that great help is out there.
10 April 2005 :
code, php, programming
I’ve been using del.icio.us for the past few months and I’ve been really pleased with how easy it is to maintain and access my bookmarks anywhere. However, I’ve often wished that there was a privacy feature in del.icio.us so that I could make some links publicly viewable and the rest would be private. Well this morning I was reading a few blogs and came across a link to Scuttle as an personalized version of del.icio.us. I played around with the test site a little and realized this is exactly what I was looking for. Marcus Campbell, the creator of scuttle has recreated del.icio.us in PHP and MYSQL allowing anyone with a webserver to store their bookmarks on their localhost. He’s also done a great job of using css to make the links easy to read. Best of all he’s tweaked the category creation logic so that you can have a category link “Cool Links” instead of having to smash it together with underscore characters (i.e. Cool_Links). I’ll let you install Scuttle to figure out how he accomplishes this.
Because Scuttle is open-source and very cleanly written, its very easy to customize. It’s also gotten me thinking about a project I’d like to work on. I’ve been meaning to write a bookmarklet which parses the ISBN number of an Amazon link and creates a boomark in my Scuttle list. I’ve wanted a good way to keep track of books that friends recommend without relying only on the Amazon wishlist system. I’ve done some poking around the scuttle file structure and I think this could be done easily. If anyone reading this has some ideas about how to go about doing this, drop me a line at projects@rasheqrahman.com. Hopefully I can give back to the open source community.
30 March 2005 :
code, php, programming
Now that I have my own domain and access to a server, I’ve been poking around with some cool open source apps. One of the first applications I installed was Wikka (formerly known as Wakka). Wikka is an Wiki written in PHP with some great features:
- PHP and MYSQL make it lightweight and fast. (Okay so that’s propaganda from the website but it really is great.)
- Page level security so you can determine which pages can be viewed and edited by others.
- Like other Wikis it uses the CamelCase syntax for links to other pages but it also has some neat tricks for creating elements like lists, horizontal bars, etc.
- Its functionality can be extended using plugins called actions. People have written actions to display rss feeds and calendars among others.
This last feature really got my creative juices flowing. As I examined the actions that others had written and p0ked around the actions folder in the Wikka installation, I saw that people were doing some pretty powerful things using pretty simple code. One project in particular to make Wikka into a Personal Information Manager really excited me as I wanted to use the Wiki as a my online dossier for ideas, programming projects, etc. Seeing different implementations of to-do-lists, calendars and schedules made me want to build my own.
My first step was to start learning PHP and MYSQL. Since I do a lot of work with SQL in my day job on Wall Street, I knew I would have no trouble writing the queries I would need for my event calendar. Being a semi-pro VB developer I thought PHP as a sister programming language would be pretty straightforward as well. I picked up J.W Gilmore’s Beginning PHP5 and MYSQL: From Novice to Professional. The book is great for beginners, easy to read especially if you are familiar with basic programming concepts but not so basic that you feel the author is treating you like a novice. After the first sixty pages and a few examples, I felt confident enough to poke around myself and I printed out some of the Wikka action code to see if I could pull it apart.
With the help of the book and some specific searches of the PHP.net website, I was able to write a simple date action which would allow me to enter “{{date}}” on a Wikka page and it would print out a formatted version of the current date. Emboldened by the simple success, I jumped way ahead of my skill set to the end of Gilmore’s book and peeked at the code for connecting mysql to PHP. Here I was bested by the most humble of creatures: the semicolon.
I began my quest to connect a simple Contacts table in MYSQL to a small routine which would print out the results of a dynamic query into Wikka via a “{{contacts}}” action. I found some simple code on the About.com website and modified it with the login details from my own server. However, everytime I would load the sample.php file I would get a blank page. Coming from the VB background, I’m used to having Excel or Access shout at me via a dialog box with a cryptic error message which I would have to decipher using the posts of others on VB programming bulleting boards. By contrast this silent refusal to execute my commands was at first puzzling but soon became frustrating. I thought at first my php code didn’t like the MYSQL user name and password that I had set up for my test database. So I changed the user password several times. Then, I commented out the whole program and just concentrated on getting the connection to the database to work and print out “Database connected.” Once I got that working, I slowly started uncommenting my program line by line until the point where I would get the blank screen again. By the end of about two hours I had unraveled about half of the code and gotten it to work. My wife called me away for dinner sensing that I need some fuel. Nurished, I return to the joust. However as I was reviewing one line of code, I noticed that I was missing a semicolon at the end of the line. After adding it in and checking the remaining commented code for missing semicolons, I took a huge step and uncommented all of the code. With baited breath, I clicked the refresh button on my browser and to my joy, the formatted output of my query appeared in its proper place on my wiki.
My advice to young programmers who may find this post among the annals of history: remember your semi-colons.