It's hard to believe 2008 is over. It feels like just last week I started Little Stream Software but I've been in business for over 18 months now. I've decided to do a short review of my 2008 goals:
- Grow my business to make $100,000 in revenue in 2008
Yea, that goal was a bit extreme for my first full year in business. I adjusted it down to a level that was 50% more than what I was making a full time employee and almost reached it. The problem was I had a few slow months where I was figuring out the feast vs famine cycle of freelancing.
- Finish my personal and business emergency savings
I completed these goals but around August Ilana and I purchased our first home. That took a chunk out of our personal savings but it should be replaced in the next couple of months. Having the cushion of savings for my business has helped my Little Stream Software be more flexible, from floating late payments from customers to being able to work on a few side projects.
- Get 3 paid Ruby on Rails projects
By summer I reached this goal. By the end of 2008, I'd completed about half a dozen Ruby projects. A few of them ended up being plugins for Redmine and some enhancements for other Open Source projects.
- Grow my RSS and newsletter subscribers to 500 people
I wasn't about to keep up my posting frequency in 2008 so my subscriber count had only a slight growth in 2008. I have since started using Twitter throughout the day and am starting to get a nice sized following there. If you want some shorter, more frequent updates follow me on Twitter.
- Redesign my core websites
I'm working currently working with someone to do the redesigns. The designs are almost done and I should have them launched to Little Stream Software and theAdmin by the end of January.
- Participate on 10 Open Source projects
I was able to meet this goal by creating and Open Sourcing several Redmine plugins in 2008. I still have a few I'm getting ready to release, but you can see the complete list on my GitHub page.
- Incorporate my business
As of Monday, I've created a LLC for Little Stream Software. My accountant advised me to wait until 2009 because it would be less tax paperwork to fill out. If you are operating a full time business as a sole proprietor, you should take a look at a corporation or LLC. All said and done, my LCC required me to fill out one form online for Oregon and to fax a single document to the state capital.
- Write a short ebook ( 30 to 100 pages )
This goal fell by the wayside for 2008. I ended up focusing on other things and didn't even try to work towards this one. I'm still interested in writing one, maybe in 2009 I'll be more motivated.
- Contribute a patch to Ruby on Rails
I started to create a patch for Ruby on Rails, I just lost track of it after summer. I don't consider a total loss though, I was able to figure out how the contribution process works so it should be easier now. Mike Gunderloy wrote up a great process for contributing a patch to Rails, it's worth a look if you are working with Rails.
- Meet 100 new people (I forgot to include this in my 2008 goals blog post.)
Since my business works on relationships, I needed to meet more people in order to grow and 100 people a year sounded like a good amount. Turns out, I was able to meet 147 new people in 2008. For the mathematically inclined, that's over 12 new people every month. I think the main cause for such a smashing victory is from my participation in the Open Source community. It doesn't take a lot of time and I'm able to meet people from all over the world. Plus it's fun talking to new people.
I ended up with a few goals completed in 2008 and a few of them unfinished. Considering everything that happened in 2008, I'm very happy with the results. I'll be posting my 2009 goals soon. I'm taking a different focus with 2009, with a lot of concentration on improving my core development skills.
Eric
Tagged: 2008 business goals
I'm Open Sourcing another Redmine plugin, the System Notification plugin. This is a simple plugin that will let Administrators send emails to a list of users to let them know of important events (e.g. downtime, upgrades). You can check out the details about it on the plugin page on Redmine.org.
I welcome any contributors, the list of proposed features is in my Redmine and can fork my code on GitHub.
If you are currently working on a Redmine plugin and need help or have an idea for a plugin you would like developed, please contact me. My company, Little Stream Software, specializes in the development of custom Redmine features and Redmine plugins.
Eric
Tagged: open source redmine redmine plugins
With large systems, it's useful to be able to visualize the relationships between the different components and systems. Redmine is no exception, weighing in at a hefty 286 classes and almost 14,000 lines of application code. The RailRoad gem aims to help automate the generation of Ruby on Rails class diagrams, showing methods and fields for each Model and Controller found.
Using the latest version of Redmine (r2029), I was able to generate the following graphs for the Models and Controller.
Models
Controllers
Full sized versions
Post a comment if you found these diagrams useful.
Eric
Tagged: redmine ruby ruby on rails
It's that time again..... yes, I'm Open Sourcing another Redmine plugin. This time it's the Redmine Exception Handler plugin. This plugin will allow Redmine to send emails whenever an exception or error occurs. I created this plugin because I kept hearing about bugs but I having a hard time reproducing them. This plugin uses the exception_notification Rails plugin created by Jamis Buck.
Features
- Allows configuration of recipients, sender address, and subject line without restarting the web server
- Email contains a stack trace and full environment dump that can be used to reproduce the issue
- Test controller to test the system settings
Getting the plugin
A copy of the plugin can be downloaded from Little Stream Software or from GitHub.
Install
- Follow the Redmine plugin installation steps on the Redmine wiki
- Login to Redmine as an Administrator
- Setup your mail settings in the Plugin settings panel
- Test your settings using the "Test settings" link
License
This plugin is licensed under the GNU GPL v2. See COPYRIGHT.txt and GPL.txt for details.
Help
If you need help you can create an issue directly into the bug tracker. If you would like to contribute any changes, you are welcome to fork my code on GitHub and send me patches.
If you are currently working on a Redmine plugin and need help or have an idea for a plugin you would like developed, please contact me. My company, Little Stream Software, specializes in the development of custom Redmine features and Redmine plugins.
Eric
Tagged: open source redmine redmine plugins
A friend wrote:
you seem to really like git. Whats your take on git vs svn?
It's not a matter of git versus svn but more about what is git good at and what is svn good at. git and svn have different designs so they provide different solutions. Thing is, git does what it's supposed to so well that it's used as a substitute for svn. svn is meant as a central place to store source code and is basically cvs with some improvements. git is a content storage system with versioning, which are the two things needed to store source code. Though most git repositories store source code, it doesn't have to. I run a personal wiki using git as the data storage and I've seen blog engines use git to store their content. There's even a backup system written using git to store your files.
On a more pragmatic level, here is what I like about git over svn. I'll use a large project I'm working on as an example because I use both git and svn with it and it's a svn large repository:
- 2.8 GB in size
- around 6000 revisions
- 197,902 files
Where git rocks
1. git is fast
Running any svn command on the project takes at least 60 seconds. git takes 1-2 seconds. svn commit and svn diff on the full project are typically run into the "go and make a sandwich" range. git barely gives me enough time to check twitter.
2. git stores the entire repository locally
Every single commit, log, and diff is local so git will never have to go out to the network until you are ready to share. svn in contract, stores only the last version locally and hits the network for the majority of it actions. (This is one cause for the speed difference in #1)
3. Since git has everything local, you can work offline
You can still work if the wifi is flakey or the proverbial "working on a plane". By work I mean; commit, rollback, merge, diff, etc. svn in contrast will let you change your code but you only have one copy so you have to "Save as..." frequently.
4. git is efficient with it's storage
Even though the project is over 2.8GB, git only adds 100MB to store the entire history of the project. Compare that to svn, where svn has two copies of every file (check inside those .svn folders if you doubt me).
5. Only one directory is needed to store the information for git
git will create only one directory in the very top level of your project called .git. This makes it really easy to rearrange directories in the project. No more .svn folder littering the project with hard-coded urls.
6. gitk
I have never seen such a great (ugly) tool that presents complex information so easily. Being able to visualize the different ways the code makes my job so much easier. All the visual svn tools I tried either sucked or didn't work.
Sidebar
Next are the fun parts of git, which really shows how git works socially. I think it's amazing when you give people the ability to work alone and isolated, that they end up drifting even closer together. But that's another blog...
7. git is distributed
When you combine #2 and #3 you get the distributed nature of git. With everyone having a copy of the full repository, the central server is just another copy. This means at any time, the hosting server could blow up and with a few commands, any person with the git repository can have the repository back online. This makes the "central server" wherever everyone agrees to put their final changes.
8. git is easy to branch and merge
It gives you the freedom to experiment with different ideas and then throw away the bad ones. I can tell you from recent experience, merging separate development branches in svn is hard. Super hard. As in set aside a week to do it.
9. git allow collaboration
Since it's easy to create a branch, it encourages people to take the code, modify it, and mold it into their idea. Sometimes this sucks, but most of the time it results in a lot of novel ideas. The great part is you call pull in the ideas you like and leave out the parts that suck.
Where svn rocks
1. It's popular
Many people are using svn and there is a lot of tools built around it. But popularity isn't correlated to good (i.e. Microsoft Windows and any other Operating System)
2. svn is stable
I've used svn for over 4 years now and it's been rock stable as soon as I started using the fs-store option on the repository. Sure you can mess up your local copy but that's mostly due to you pushing svn's design too hard.
Where git sucks
1. It's still a bit arcane
Some of the commands are difficult for a beginner and you need to be good at Googling if get stuck. But us Rubyists have Scott Chacon and the rest of the GitHub team if we get really stuck.
2. Git will not allow you to checkout only part of a project
This is hard especially if you are used to organizing your repository in a svn way (e.g. trunk, branches, tags). I think the biggest hurdle here is learning to keep separate repositories for the different parts or using clean branches for them. I still struggle with this myself.
Where svn sucks
1. It depends on the network
I don't mind using the network since I only work at home on a fiber optic connection. But having to go out to the network in order to work enough of a interruption that I lose context. I've also been bitten by "the Subversion server is down" way too often.
2. Keyword Substitution is bad
I don't mind the automation svn tries to do but if it's going to modify files I add to it, I start to lose trust that the system will protect my data. I've never worked on a project that used keyword substitution right.
3. svn wastes tons of disk space
I know disk space is cheap but using twice the space for each file is just inefficient. That 2.8 GB project I have just ballooned to 6.6GB with all the svn copies. That doesn't even include my hourly backups and S3 backups (minimum of 3 additional copies).
Conclusion
That said, these are my own opinions based on my habits and my work flow. I've only been using git since January 2008 so I'm still a bit new to it but it has made it dramatically easier for me to write code. At the end of the day, that's what really matters. Does your tool git out of your way and let you do what you need to do? For me, svn didn't but git does.
Eric
Update
Scott Chacon just created Why git is Better Than X, a website that compares git to hg, bzr, svn, and perforce.
Tagged: git github svn
I'm happy to announce that I'm Open Sourcing another Redmine plugin, the Bulk Time Entry plugin. This plugin allows a user to enter multiple time logs from one convenient screen. I created this plugin because needed to enter several time logs at the end of every day and I got tired of going into each project to add my time.
Features
- Enter multiple time entries from a single page
- Auto fills the issue id based on the selected project
Getting the plugin
A copy of the plugin can be found in the downloads at Little Stream Software and also on GitHub.
Install
- Follow the Redmine plugin installation steps on the Redmine wiki
- The link to the plugin should appear on the top left of your menu, called "Bulk Time Entries"
Usage
- Enter the time entry details
- Click "Add Another" or use the accesskey of Alt + A to add another time entry form
- Click "Save" to save all the time entries
License
This plugin is licensed under the GNU GPL v2. See COPYRIGHT.txt and GPL.txt for details.
Help
If you need help you can create an issue directly into the bug tracker. If you would like to contribute any changes, you are welcome to fork my code on GitHub
If you are currently working on a Redmine plugin and need help or have an idea for a plugin you would like developed, please contact me. My company, Little Stream Software, specializes in the development of custom Redmine features and Redmine plugins.
Eric
Tagged: open source redmine redmine plugins
I recently converted my server to use Phusion Passenger to host my Rails and Rack applications. Phusion Passenger has pretty good for Rack applications and Sinatra but I was running into a lot of issues with hosting my git-wiki. After some debugging, I found git-wiki wasn't loading the view path correctly while hosted under Passenger. With a quick change to my config.ru file, I was able to force git-wiki to load the view properly. Here's my current configuration for my running wiki, I hope it helps someone else who has a similar issue:
require 'sinatra/lib/sinatra'
require 'rubygems'
ENV['WIKI_HOME'] = '/home/websites/wiki.theadmin.org/wiki'
Sinatra::Application.default_options.merge!(
:run => false,
:env => ENV['RACK_ENV'],
:raise_errors => true,
:views => '/home/websites/wiki.theadmin.org/application/views'
)
require 'git-wiki.rb'
run Sinatra.application
Eric
Tagged: git git-wiki passenger ruby sinatra wiki
I'm happy to announce that I'm Open Sourcing a new Redmine plugin, the Google Analytics plugin. I created this plugin because I didn't want to hard code my Google Analytics code into my Redmine. It's a simple plugin, and a very basic example of how to use the new Redmine plugin hook API that will be included in Redmine 0.8.
Features
Adds your Google Analytics code to every pageview depending on your User roles; Anonymous user, Authenticated User, and Administrator.
Installation and Setup
Download the plugin. There are three supported ways:
Install it using Rail's plugin installer
script/plugin install git://github.com/edavis10/redmine-google-analytics-plugin.git
Login to your Redmine install as an Administrator.
- Configure your settings in Administration > Information > Configure
License
This plugin is licensed under the GNU GPL v2.
Help
If you need help you can create an issue directly into the bug tracker. If you would like to contribute any changes, you are welcome to fork my code on GitHub
If you are currently working on a Redmine plugin and need help or have an idea for a plugin you would like developed, please contact me. My company, Little Stream Software, specializes in the development of custom Redmine features and Redmine plugins.
Eric
Tagged: open source redmine redmine plugins
written by edavis on September 30, 2008
0 Comments
I'm using git and git-svn for all my projects now. It's wonderful to use git even if the main repository is still in Subversion. Recently though, I had a problem where the Redmine svn repository url changed. Normally you are just recommend to clone the new subversion url with a fresh git-svn repository. Unfortunately, my Redmine git repository is publicly published and several people are actively developing with it. If I re-cloned, all of the commit SHAs would change and I'd have a lot of angry people knocking on my (virtual) door.
Not being content with just having multiple git repositories lying around, I searched the interwebs and stumbled upon the GitSvnSwitch page on the git wiki. It described a funky process where you can change the url for a svn repository without rewriting all the commits. The process went like this:
Edit the svn-remote url URL in .git/config to point to the new domain name
Run git svn fetch - This needs to fetch at least one new revision from svn!
Change svn-remote url back to the original url
Run git svn rebase -l to do a local rebase (with the changes that came in with the last fetch operation)
Change svn-remote url back to the new url
Run git svn rebase should now work again!
I'm still not entirely sure what it did but somehow in between steps 4 and 6 the git-svn-id changed to the new url without git-svn complaining. The results of this switch over can be seen in commit ae0ed7f.
Now I have one git-svn repository that can pull commits from Redmine's svn, push and pull to GitHub, and I can use it to commit back to Redmine. The greatest benefit though, is I can now start to check out the other Redmine forks on GitHub for some new code. If you are the owner of one of those forks and have some killer code, send me a pull request and I'll see about pushing it back into the Redmine core.
Eric
Tagged: git github open source redmine
written by edavis on September 26, 2008
0 Comments
A few days ago I converted my Ruby on Rails server to run Phusion Passenger. I've been running nginx and mongrels for about a year now and they have served me well (no pun intended). The only problem is my RAM been maxing out, but I guess that happens with 5 mongrels, a sinatra app, and MySQL on a 1GB slice from Slicehost.
Ever since RailsConf, I've been meaning to try out Phusion Passenger. There were two benefits that drew me to it:
It would scale servers as they were needed, thus saving RAM if one site isn't in use. Since my business site and Mephisto are both heavily use page caching, they are not really in use for the majority of requests. But my Redmine gets spikes of traffic and I'd like to have it scale up to meet the demand.
Since Passenger works on demand, I now have more flexibility to host more applications. This means I can finally get to some side projects I've been putting off.
So if you haven't checked out Phusion Passenger yet or you are still running your Ruby on Rails applications with FastCGI, try it out now. You'll be surprised how easy it is to host Rails now.
Eric
Tagged: passenger ruby ruby on rails sysadmin