My iOS Apps

Comments Off

So I’ve had quite a few people asking what are some great iOS to start with so I decided I would simply put up a blog post. This will cover both iPad and iPhone apps. Any apps that have a * beside it will be universal apps that will run on both the iPhone and iPad. I will still list them in both columns though. These are in no order at all.

iPhone Apps

General

  • Autostitch – great little app for making panoramas
  • Amazon.com* – just great for buying stuff on amazon
  • Grocery IQ – a fairly simple but GREAT list maker for the grocery store, I don’t shop without it
  • Byline – So far my favorite iPhone RSS Reader, syncs to Google Reader
  • FML – Its just amusing
  • Dropbox – Makes it easy to grab stuff in your dropbox, essential on all platforms
  • iStat – fun app that allows you to monitor your iphone stats and if you set it up, you can monitor remote machines as well
  • Lastpass – ESSENTIAL. If you don’t use lastpass, you shouldn’t be allowed on the internet
  • Deliveries* – This app is great for just tracking any shipment by any carrier, it syncs to a mac dashboard widget and is great!
  • Weather HD – The default weather app SUCKS this app looks beautiful and makes the weather more exciting
  • Audible – If you use audible, this is a MUCH better way of listening to your books
  • Omnifocus – Great productivity app though its quite expensive
  • Mapquest – Free GPS, I love it
  • Epicurious* – Great app for recipes
  • ESPN ScoreCenter – You have to check a score every once in a while!
  • Mr. Tap – this is a DUMB app that serves a great purpose! If you have 4 people who won’t make decisions, this is the 21st century version of “drawing straws”
  • Air Video* – Allows you to stream video or audio from a mac or windows pc to ios devices
  • Netflix – DUH
  • Pandora – gotta love it
  • imdb – Makes looking up actors and movies MUCH easier than the web interface
  • Pimp My Home Screen* – lots of great backgrounds and lock screens
  • Prompt* – Hands down, no questions asked the BEST SSH client on any iOS device

Games

  • Ancient Frog – a neat puzzle game
  • Fieldrunners – Fun tower based strategy game
  • Cut the rope – I rank this right up there with angry birds as far as simple puzzle games go!
  • Scrabble – Classic!
  • Touchgrind – Skateboarding with your fingers
  • Fruit Ninja – Great fun for anyone
  • Plants vs Zombies – this game is essential for ANYONE. Don’t let the title scare you off , its AMAZING

iPad Apps

General

  • Weather HD – If Weather HD is good on the iPhone, its freaking AMAZING on the iPad
  • Reeder – best rss reader on the iPad I’ve found
  • Flipboard – Great way to read news from around the web, very interesting design
  • Amazon – yea, its great on the iPad too
  • MyPad – good facebook app for fairly cheap
  • Air Video – same as for iphone, only bigger :P
  • Weatherstation – good little app for watching the current weather
  • Amplitube – this is awesome for running a guitar through and giving it awesome effects
  • Holy Bible HD – Good bible for the iPad
  • Pimp Your Home Screen – same as for iPhone, good app
  • LastPass – once again, lastpass is awesome

Games

  • Plants vs Zombies – Greatest. Game. Ever.
  • Fruit Ninja – great on the ipad as well
  • Angry Birds – does anything else really need to be said about this game?

Well thats it for now. I’ll attempt to add any more that I come across but those are the ones that I survive on primarily.

Summer Goals

No Comments

Let me start off by saying I’m a list NERD. Anything and everything I need to do goes on a list. I love Omnifocus like it was my own kid and I use it constantly to keep up with what I want to be and should be doing. However I’m also into lists outside of just todos. Anytime I’m doing any sort of repetitive work, be it installing software on multiple computers or just moving things from one place to another, I usually make a list so that I don’t miss anything.
Another thing I’m big on is list of goals. This does not typically fit the “GTD” idea because typically in GTD this should just go on your “someday maybe” list and then when you get to them you get to them, but I’m a big fan of publicly confessing those items which need to move from “someday maybe” into, “someday soon”. Having made this information public it usually forces me into doing it and I usually end up performing better at the given tasks.
Now that the preamble is completed, this is my list of goals for the summer. This summer will be huge for me because my wife and I are moving into a new house which is always exciting to me(I LOVE MOVING!! YOU GET TO START NEW!!) and this should allow me to “tidy up” some tech related items I’ve been meaning to do. So here they are!

Summer Goals

  • Setup an old Macbook for use as a Webdav Server
  • Syncing Omnifocus has been quite an issue for me since the iPod app came out and I’ve tried multiple solutions(iDisk, File Sharing, etc) and unfortunately either they haven’t done what I wanted them too or I’m too cheap to continue paying for it (iDisk is just not worth the cost to me). I’ve decided to just setup webdav on an old macbook and use it for my syncing. I will probably also use this Macbook for other various server tasks I’m looking to complete.

  • Migrate Rails Project to Git
  • I’ve been putting this one off for a long time. I like SVN. It was the first version control system I ever used and I’m still impressed by it daily. Unfortunately though it seems that all rails development is going the way of GIT and I must stay current. Also, the ability to branch easily sounds like a great addition. I currently only have on major rails project so I’ll be taking the time this summer to migrate that to GIT as well as set up a git “server” on the macbook most likely.

  • Setup Capistrano…Again
  • In the past, I used capistrano like a mad man and loved it. One command deployment was amazing. Unfortunately somewhere along the line when I changed servers, I never set this back up and I’ve been going through the tedious task of deploying by hand with each release. This MUST stop. I will setup capistrano to work with GIT and deploy perfectly.

  • Get a part time job with rails
  • This one is the last one though I find it to the be the most important myself. Over the next year I want to improve my skills in Rails and I want to find a job that will allow me to do so. I would like a part time job working remotely that would allow me to get more experience and to grow in my skills. About this time next year I would love to get a full time rails job and this is the beginning of that. After completing the above tasks I will be updating my resume and sending it out to positions I feel would be a good fit for me. Wish me luck!

    Conclusion

    That’s about it really. Those are my goals. I use the word goals here lightly because more than anything they are a to do list that will be completed. The only real goal on the list is a job and I’m going to put every bit of effort I have into completing that one just as if it were a task also. Check back here over the next few months or so as I write up information on each of my tasks and how they went!

Setting up a Rails development enviroment on OS X Leopard

No Comments

Over the past year it seems like I’ve setup a new mac for daily usage at least 5 times and for the life of me I can’t remember why this has happened so much. I really haven’t purchased that many new computers(in fact only 1), but I remember this painstaking process quit vividly multiple times. The thing that I dread most about setting up a new computer for use is setting up my rails enviroment. Not that rails in itself is terribly hard to setup(it comes preinstalled on leopard), but for some reason it never fails, I run into trouble setting up MySQL to properly connect to the rails system. I spend pointless hours scouring the internet searching for the ONE solution that finally fixes my issue and then I’m too tired to get any REAL work done by the time I find it. I’m solving this issue now. I am documenting this for myself and everyone else to save some trouble.

First, a few caveats. I am setting up this enviroment for an existing rails application that I’ve been working on for about a year and a half now. It functioning properly is my primary concern. This is the main reason that I must have MySQL working and I can’t rely on sqllite as some other solutions propose. If that works for you, more power to you, but personally I need MySQL and a few other things so lets get to work.

Let me also say this. This may not be the best way to go about this. This is my way of doing it that worked for me. I may have gone all the way around the world and done it completely wrong, but it worked for me and I’m happy with it.

Here are my requirements:

  • Rails
  • MySQL working with rails
  • Passenger – It just makes life easier
  • Git

Alright everybody got their thinking caps on and ready to go?! Let’s do this!

Preparation

Make sure you Mac is fully up to date. I don’t know if it will change anything but to make things on even grounds, lets start there. Also you will need to install the Xcode tools that are free from apple.com

Homebrew

Pop on over to the homebrew page and use the command there to install the homebrew system.

Then go ahead and install git.

brew install git

RVM

RVM is simple to set up. Simply use the following command:

$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

Then modify your zshrc(or bash file) to add the path as needed:

[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm

Then continue with your rvm setup by installing 1.9.2 and setting it as default.

rvm install 1.8.7
rvm 1.8.7 --default

Ruby Gems

Now lets update ruby gems

sudo gem update --system
sudo gem update
sudo gem install rails

You may need to run the update command a few times to be completely up to date.

MySQL

This where it begins to get dicey. First comes the easy part. Installing MySQL is as simple as grabbing a package from here. Just be sure to pick the appropriate package for your architecture. It may not be newest release, but its close enough for my needs. Also, there is a nice little preference pane in the package that you can install to turn the server on and off.

After throwing this on there unfortunately it still doesn’t take care of the issue of actually connecting rails to MySQL. If you leave it at this point you will be forced to go through the pain of throwing to open your rails app or migrate your database and be given an error similar of missing the MySQL adapter. This is a simple fix just run the command:

sudo gem install mysql ARCHFLAGS="-arch i386" ruby extconf.rb --with-mysql-dir=/usr/local/mysql

This should take care of MySQL. Also please note, I know that a lot of developers stick with only using SQLlite for development and although while I highly recommend this due to speed, at the moment I still had a few projects that I actually need MySQL on so I done this just for those projects.

Phusion Passenger

Don’t get me wrong, webrick is great, but if you’re working on multiple projects at once, the ability to easily name all your environments using passenger and not have to start them by hand is a BIG plus for development in my book. Also, its not hard at all to setup so to me its well worth the few minutes it takes.
First lets set up the gemset and install passenger

vm gemset create global
rvm gemset use global
gem install bundler
gem install passenger
sudo passenger-install-apache2-module

The second line there is awesome because passenger will go out and do all the hard work for you. The only thing you’ll be told to do is drop a few lines into your apache config and you’re set to go on passenger…well kinda.

At this point you technically are setup and ready to use passenger however, in order to do so you would have to go into your apache config and setup each rails app by hand but thanks to a wonderful preference pane that is offered for free by Fingertips, you don’t have to do any of that. Just grab the preference pane, install it and its pretty much self explanatory.

Conclusions

So that’s it. Not too bad I hope! I’m not sure if this is necessary for most people but if you’re setting up a new computer for rails this would be a good place to start at least. If you feel I should add or change anything, feel free to leave me a comment.

4-H Camp Control Center – Technical Side

No Comments

vce_desktop_medium

This post is in regards to the 4-H Camp Control Center that I built for the local 4-H office in Henry County. I have described the project in detail regarding its use and requirements in a previous post so please at least skim that over and this post will make a bit more sense most likely. My goal of this post is just to give you some general ideas regarding the technical specs of this project and its features in a bit more depth.

Development Platform
The system was built in Ruby on Rails with a MySQL database for both development and production. All development was done on a Mac and the production server was running on Mongrel on an Ubuntu server. The project was stored in a subversion repository on the same machine as the production and database server. As for the applications I used in development, I lived primarily on Textmate and the leopard terminal. I did use CSSEdit some for the CSS work. I tested the layout and system using just about any browser I could find on both Windows and OS X.

vce_desktop_medium

Stats

According to ‘rake stats’ this project is currently up to 3601 lines of code. The code to test ratio is an embarrassing 1:0.4 currently but I’m working on increasing this. At its heaviest usage there were 11 users logged in and using the system constantly and it performed great.

Features

  • Receipt/Camper Entry via forms
  • Simple Searching of campers and receipts
  • Excel export
  • Image Import for Receipts allowing for signatures
  • Some models have in place editing allowing for easy updating
  • Sortable columns on lists
  • Role and permission based authentication system that allows for an exact definition of what a role should be allowed to do based on controller actions
  • Javascript updating of forms based on input
  • Input validation on all required fields
  • Receipt entry does constant validation on input(no need to submit before realizing problems
  • Exception E-mailing

Conclusion

The majority of the system was developed in a time frame of approx 3 months. Since the first use I have probably spent about 80 hours updating features that I wanted to change. The system currently is being prepped for its second year of use in the registration system and is currently being used for a few early registrations. If you have any questions regarding this system, please feel free to e-mail me at anytime.

4-H Camp Control Center – The Story

No Comments

Over the next few weeks I’m going to take the time and highlight a few of the projects that I’ve worked on in web development and any other technological area. I’m doing this so that employers that may be interested in my work can quickly see what I can do as well as my potential.

The first project I’m going to showcase is probably the biggest of all my projects, and quite possibly the most fun of all of them too: the 4-H Camp Control Center. This is the post that will explain in great detail the story behind this and how well it went. If you are more interested in only viewing the technical details of the project please check out this post.

A picture of the page used for logging into the 4-H System

A picture of the page used for logging into the 4-H System

Introduction
In the Fall of 2007 my mother was working with the 4-H Group in Martinsville and Henry County. There biggest task throughout the year was signing up children for their yearly summer camp. They have the largest registration of any group in Virginia(nearly 400 children) and their registration was held on a single day. The primary reason for being held on a single day was to allow for a fair method of “first come, first serve” mentality for sign ups as every year there are children who have to be denied due to limitations on spacing.

During a single registration there are typically 4 volunteers who sit at a table and take a set fee for camp registration in either check or money order. While doing this, they must fill out a receipt by hand and give it to the parent. They must keep a copy of the receipt so that after the typical 6 hour registration is over, they can verify how much money they have received and that all money is accounted for.

While the parents were waiting in line to pay for their child’s camp fees they were required to fill out a registration form which held all the childs pertinent information such as name, age, sex, but it also contained information regarding the child’s preferences for camp such as their roomate preference and the classes they wanted to take while at camp. Shortly after receiving their receipt this form was given to another volunteer that would place the paper in a stack which, at a later point would be entered manually into an excel sheet by one of the teenage volunteers. This sheet would typically then be passed around by a usb drive from person to person in the office as necessary and updated. If someone from the 4-H District Office needed information, this sheet would be formatted in the way that they requested and a copy would be sent to them.

A list of extra options including the excel sheets available in the system.

A list of extra options including the excel sheets available in the system.

To put it lightly, this was a tedious system. Don’t get me wrong, data is not fun for anyone and that can’t be eliminated in most cases but it can definitely be improved. The system they were currently using had so many flaws that it was truly sad. To begin with, after a person had been receipted, if they wanted to receive a refund or if any of the staff wanted to verify a payment it required that the payment be tracked down, by hand, in a receipt book and verified. When the campers where entered into an excel sheet it did not allow easily for any sort of statistics or data manipulation. Also, the method of sharing the data was causing multiple issues due to multiple copies being on hand and some not being updated properly and data being lost. Simply put, they need a better solution.

The idea
At the time, I was a senior in college for web development. I knew most of the office staff that worked with 4-H and all were fairly “user” tech savvy but were not computer experts by any means and they didn’t really know what they needed or wanted. When my mom first approached me she was looking for something that would allow them to enter the receipts into an excel sheet all at once(4 users on the same sheet) and then print receipts out for each one individually. To be honest, at first I hesitated to even get involved due to my course load being heavy as it was and this sounded like something that would grow to a huge size and it would also be a completely volunteer effort, but in the end, I decided I wanted to see what I could do, so I jumped in head first.

After considering many solutions, some of which even included a basic Access setup to help them out, I came to the conclusion that a simple web application for entering receipts would be the most appropriate. The system would have a very simple form of authentication for the users to login. After logging in, the users would be given a very simple list of current receipts in the system or the ability to add more receipts. As they entered receipts, they would be able to list the receipts in whatever they preferred, modify them, delete them and eventually I wanted to add the ability to output the list in an excel sheet so that they could have it backed up in a form that they could use in the future if they ever decided to not use the web system.

I had been working with rails at this point for 3 months. I had dealt with PHP and perl before but after using a few tutorials in rails and kicking the tires a bit I decided that the best way to learn if rails was a good system or not would be to jump in and actually complete a project and so I did!

The Project Begins
The application started off just as requested, a simple CRUD(Create, Retrieve, Update, Delete) application. It used authentication for the logins and receipts were “owned” by the users who created them and each user had an image on file of their signature that would be shown on the receipt copy that would be given to parent. During this process I got excited about how quickly I update my work. I had this up and running in no time compared to what it would have taken me in php and I have even had some testing coding to back up my things! To put it lightly, I loved rails! At this point I got ambitious and decided that we should add other features before the big registration day in April and really speed up this process!

Now to back up just a bit and explain a few things. The rails development at the time was being done on my 12” Powerbook G4 1.33 ghz with 1.25mb of ram using Rails(pre 2.0 although I can’t be sure of the exact version at the time), MySQL and Textmate. I was using an old compaq 800mhz with 256mb of ram running Ubuntu Server to store my subversion repository. I was also using this server as the production server for use by the office(when it came to that point). After a lot of trial an error I finally had ironed out the process of using capistrano to deploy my application directly from SVN and was absolutely thrilled out how easy it was to develop, test and then deploy. I will be quite honest at this point and admit that my testing was lacking quite a bit but once again, I was just beginning.

The Plot Thickens
After deciding that the receipt entry was sufficient for use I decided to move onto the process of registering campers in the system was well. To begin with, this was also a simple CRUD step until we added in the fact that campers need to be associated with a “Pack”(somewhat like a team) which brought me into a many to one relationship and they also had to be put into classes which would force me to use a many to many relationship. At this point I considered that, due to the limited amount of time available, we should just set up each of these fields to just be a static value rather than having true associations. After all, previously they had no method of seeing how many children were in a pack or a class without sorting them appropriately and counting by hand, it wouldn’t be a huge problem if this was not a feature after my system came out.

Unfortunately, the programmer in me could not let this one happen. Having data be stored where it couldn’t be sorted and counted properly using database calls was just unacceptable so I had to research using many to many tables and also work on implement features so that the staff could easily add packs as well as classes to the system without much effort. This was not a light task by any means. This involved organization and planning. There was also another issue. The receipts could have multiple children attached to them but a camper registration was for a single camper. This made the task of pulling data directly from a receipt into a camper form a bit of a problem.

In the end, I decided that when you were viewing an individual receipt and see a child’s name and are interested in adding that child a registration form that it would automatically open the camper form and put that child’s details into the form so that you would not have to enter twice but there would also not be a direct link between the receipt and the camper because there were some students, such as scholarship students, who may not have a receipt attached to them. This is still a design decision that I’m debating on, but currently it is working.

A list of campers in 4-h system.

A list of campers in 4-h system.

The day draws closer
After I had these features implemented and working I began to test all of them heavily. I had to find out what kind of verification of data I needed and exactly how to make all of this easier on the users. One of the first things I found out was that with the addition of campers, I needed to offer a few more options of excel sheets to be output so that when the district office or state office requested data be sent to them that it would be a simple button to grab an excel sheet for what was needed and send it up. This turned out to be one of the most valued features for the staff as it is not uncommon for them to be requested for this information multiple times in a week and usually it had to be compiled from multiple sources. With this method it was a simple 2 minutes to login, download the sheet and e-mail it to the appropriate resource.

Another feature that had never been considered by me before was the issue of accounting for the receipts in a single day. Though all the receipts were being stored and easily sorted and output to excel we had no way of knowing exactly how much money we had taken in for a given day or total. This was a simple addition of calculation the amount of money receipted either total or for a single day. This feature turned out to be a lifesaver on registration day as it would allow us to easily know the amount of money that we should have in checks and money orders.

After adding the last few touches to the features I decided to draw a line on features as the date was too close for any new features and I wanted to concentrate on fixing any possible bugs on the system. I’ll admit, I was terrified. My system was about to be bombarded by people who would rip it apart with multiple hits and entries. Only one of the four volunteers who would be entering data on the day of registration had even seen the system prior to using it so it had to be very easy to use as well as flawless in execution. I wasn’t sure how stable the system was and even more of a concern was how much of a performance hit it was on my poor little server. However after watching multiple requests come in during a controlled testing I had determined that my server could handle it and I thought the system was stable enough to handle four users and I’d be ok. This was when I got my last big shock…

ARE YOU CRAZY?
As we were prepping for the final days before registration, Brian, the head of the 4-H office proposed a scenario. The prior process required that after the day of registration someone enter all the registration information into the excel sheet by hand. The reason this was done the day after was that the number of applications coming in would exceed the workload for a single individual and because the file was only being shared by jump drive, having multiple people entering the data was not a great idea. Brian suggested that we should have 4 teen volunteers entering the camp registration data immediately as the form is turned in so that all the data input is done and over with on a single day. You have to be kidding me…

Now let me explain something here, this was my first big programming project that was going to actually be used in any manner other than for a professor to grade it. The idea that in addition to the 4 people who would be banging away on receipt entry, they now wanted another 4 people who have never seem my system and will have no prior training to also add registration information. The registration system was the newest and most definitely the least tested due to the fact that this would be entered by one person over a period of a few weeks so if there were small issues I could take care of them as they came up. This was definitely a shocking terrifying request, but the programmer in me assured myself that the code was ready to go and that my server could handle it so with much reluctance I gave the go ahead and setup user accounts for 4 trusted teens.

D-Day
On the morning of registration I was more frightened then I can ever remember being before. This was huge. My system, written entirely too fast and with not enough testing(in my mind there is never enough time or testing, no matter how much you spend on it) was going to be debuted in the most taxing situation possible. If my server died or my code failed I would be holding up approximately 400 parents and their children as well as the staff of the 4-H office. Heaven forbid a fatal error wipe out all my data and we lose all of what we’ve done.

I took precautionary measures. The system would automatically back the database up to an off site server every 15 minutes so that if something happened the most we could lose is 15 minutes. Unfortunately this done little to calm me but there was no time to freak out now, the process had began. At 8:00am we opened the doors, our receipt entry personnel took money and typed up numbers and our teens began entering classes and packs. I sat at my computer watching the log file go by, watching the processes on my server and praying to the Rails Gods to hold tight.

After about 30 minutes I began to relax some when I realized we hadn’t had any issues and I started to walk around and check out how things were going on a personal level. It was good! People were enjoying not having to write everything down by hand and everything seemed to be working well.

About 9:30am one of the teen volunteers came running to me with looking exhausted and said that I was needed at receipt entry. This was it. The server crashed, all my backups failed, my own personal hell had come to life! Lucky for me it was nothing that dramatic or even a problem. One of the people entering receipts was having an issue with entering a camper id number and the system had told her that the camper id number was already in use. They all insisted that this could not possibly be as the camper id numbers were in numerical order on the camp registration forms and none had been duplicated. I calmly agreed, assumed that there some small logic bug in my code and asked for 5 minutes while no one else entered a receipt. Just take a coffee break and I would let them know what we would do.

I walked over to my computer as calm as possible and started to pull up my code but I stopped myself. Before checking my code, let me just MAKE SURE that this wasn’t a human error. Surely it can’t be, but there’s never any harm in making sure. So I pulled up the receipts, about 100 had been entered so far, and I search for a camper id matching the one we were having issues with. Sure enough there it stood with another campers name on the receipt. I’m not sure I could have smiled more while I walked over and simply explained that a prior receipt had already been entered with this camper id and either someone had been given a duplicate number of there was a simple typing mistake that would need to be resolved. Within minutes we realized that it was simple typing mistake, updated the wrong entry and went along our merry way!

At around 10:45am I noticed that there were only a few parents left in line and began to inquire if we had a low turn out this year due to something else going on. Normally a registration takes at least 5 hours so for the line to be gone this quickly was unheard of. I pulled up the number of receipts we had handed out and realized that we had already receipted more than 350 parents and had more campers waiting to be admitted should someone drop out! The staff had completed their receipt entry at least 2 hours faster than what they normally do and this year they were also done entering registration also. To put it lightly, I was pumped. My system had completely outperformed my expectations as well as everyone else’s!

The Aftermath
Since that single day, I’ve made a few small changes to the system that we thought needed improving but nothing major. The office was so impressed that they recommended that we try and get the entire district to use it rather than just our office. I was excited about the idea as was the leader of the district but unfortunately due to budget cuts they could not afford to pay me for the development that would be required to expand it to multiple districts and the changes that each office would need based on their individual camps. They are still speaking with me about doing this in the future I would love to do it but for now, I’m only doing minor updates on the system and I’m preparing to see it in use again this year!

This project taught me more about programming than anything else. I was forced to work on a deadline, forced to work directly with customers to determine exactly what they wanted out of the system and what they actually needed from the system and I was put in a situation that demanded a lot from a system in a very short span of time. I have no doubt that this helped shape my impression of programming as well as the development process in general.

If you’re interested you can look at a more “technical” look at the project by checking out this post.

A year in the life

No Comments

ical

I know it seems a bit late for the “New Year’s Resolution” type post but I’m a bit late sometimes!

Over the last year a lot in my life has changed; I’ve graduated from college, got married, worked as a .NET developer and I’m currently working as a technician in a school system. This has lead me to change the way I want to interact with technology in multiple ways and therefore I’ve come to a few conclusions and decisions that I thought I would share:

  1. I am a progammer
  2. I worked for a small development company that work only in .NET programming and it made me realize that I LOVE writing code.  Before this job I was never quite certain that I wanted to work on coding directly for 40 hours a week but after this I have no doubt.  Unfortunately the job itself was not quite the fit I was looking for as it was a desktop programming job and I would prefer to stick to the web side of things and it was also an hour commute…

  3. I love Rails
  4. After working in multiple languages and frameworks all throughout school and since(PHP, Java, Cocoa, C,VB.NET) I have concluded that I prefer Rails overall. It is a wonderfully robust framework and I feel content when I write code in rails. Its not perfect and when it doesn’t fit the job, I’m always willing to use something else, but when it works, I love it!

  5. I need to stick to my strengths
  6. I can’t be everything to everyone. I’m not a designer. Let me say that again, I AM NOT A DESIGNER! No matter how hard I try, I still do not have the creative requirements for such a position, however, I am good at other things. I personally think I am a great software engineer. I love to spend hours going through my code and fixing every issue and making sure everything works exactly the way a user wants it too. However this doesn’t just apply to things outside of the coding arena, I’ve learned that rather than learning a lit bit of everything I want to concentrate my efforts on a few things. Instead of trying to stay sharp on PHP, Java, Rails and every other language I’ve learned I want to stick to being REALLY good at Rails and for any other type of work I think I’ll be using Drupal.

So what does all this mean? Nothing to most people, but to me it means a lot.. It means that I’ve learned what I want to do in life. I want to work on Rails. I want to spend my hours coding away. For now, I’m going to stick with my technician job because I don’t want to abandon the people I work with after having just joined the team so I’m going to take this time to work on Rails on the side as much as I can and sharpen those skills so that when I do go looking for employment, the person who seems my resume will have no doubt that I’m the perfect candidate.

Wish me luck!

SSH Key Pairing

No Comments

This is going to be a very short post. I’m going to tell you in simple terms how to setup ssh key-pairing for automatic login via ssh. In this example we will have two computers – a server and a workstation. We will be connecting from workstation to server remotely(or in the same network, it doesn’t matter). Follow these steps and you’ll be done in approx 5 min. This tutorial assumes that you know the ip address of the server and can remotely access it already via ssh.

1. On the workstation type the following command:

    ssh-keygen -t rsa

This will create two files in the ~/.ssh directory. One is .id_rsa and the other is .id_rsa.pub. I’m not going to cover what these files are, this is only a walk through.
2. Upload the id_rsa.pub file to server and put it in the ~/.ssh directory.
3. On server run the command

      cd .ssh
      touch authorized_keys
      cat id_rsa.pub >> authorized_keys

4. You’re done! Assuming everything was correct, you should be able to login to your remote server using the ssh command you should not be prompted for a password.

One word about Drupal

No Comments

So I only have one thing to say about Drupal. AWESOME. I started playing around with this system about a year or so ago and honestly I’ve only REALLY started to do anything with it in the past few months and the more I use it, the more I love it. I’m currently running 3 separate sites in addition to this site using Drupal 6. Now comes time for a fun story!

This morning I decided that I would start to play around with Moodle, which is a classroom course management system. Miranda wants a way to give quizzes to her students because they seem to enjoy using the computers and get excited about testing when its online. Well I know that moodle may be overkill but honestly I see no point in building her a rails/php app for something thats already been done and can expand as she wants to. So I decided to check this out.

Moodle is your standard php app when it comes to installation. Throw up a new database, downloaded and untar into your php directory and run the installer. Simple right? Exactly, until during this process you manage to type a wrong command! Something like ‘rm -rf * tar.gz’ instead of ‘rm -rf *.tar.gz’….yea for you guys who don’t understand what that means, I just wiped out my entire web directory in one command! So now comes the clean up process. To be honest, it shouldn’t be too bad considering I have regular backups of everything(ALWAYS ALWAYS ALWAYS BACKUP), however I’ve been trying to find a good time to migrate all three of these websites into one single drupal install using multiple databases and so I decided to take the leap and I have to be honest, it was VERY easy.

There are a ton of tutorials on how to do this out there so I won’t tell you which to use, mainly because I used a combination of multiple different ones myself but I’m sure you can manage. Now I have 3 sites,2 running off of one domain in a sub directory and one running of a different domain name. All of which now share the same install directory which makes upgrading the base a LOT easier! Anyway, for anyone who is running multiple drupal installs, STOP NOW, this is great!

Rails v ASP.NET

No Comments

So for the past few weeks at work I’ve been working with ASP.Net for a simple project. This is my first impression of ASP and I’ll have to say, I’m less than impressed. I’ve used a few web languages beforehand, Perl, PHP, java(both servlets and jsp) and lately I’ve been in love with Ruby on Rails. ASP has a very different way of going about things that I don’t care for.
First of all let me say that I don’t like the .Net framework but I don’t hate it either. For simple windows applications, its not bad. However for web work it just doesn’t cut it. ASP makes you go all around the world to perform the most simple of functions(like database access). Things that are so simple on Rails make life very hard on ASP. I also don’t like the fact that ASP produces some code that is not multi browser compliant. That’s a big no no in my book. As a personal preference I don’t’ care for how data is output, rather than giving me the option to call variables and such from within the view, it requires that I place things such as labels and data grids to access my data. This is just strange and unnecessary to me, but I wouldn’t argue against it either, I think thats a matter of personal preference.
Now there are a few things about ASP that are nice. The first would be the IDE. If you’re a fan of IDEs(I’m not personally), then it doesn’t get much better than Visual Studio. Intellisense, snippets,macros all work wonderfully. Also getting up and running in a development environment couldn’t be easier. Create your project and click debug and you’re running. As for the language, Csharp and vb aren’t terrible, they’re just not my choice, but thats preference once again. Overall, I’ll stick with Rails personally, but I could live with ASP if forced to…