Announcing the JustAProgrammer github organization

This is a programming blog. Sometimes the authors of this site write code specifically for articles contained here. For all intents and purposes, said projects home pages are the blog articles in which they appear. Naturally anything of consequence gets stored in version control. In the past,, the has meant my personal github repo.

Not anymore! Recently I have made a github organization for these projects. This means that justaprogrammer has its own little place in github, and the authors can make shared repositories. There is already on repository with one powershell script. Expect an article on that soon.

Cassini is now on github.

This weekend I created a github repository for Cassini, the small, single executable, Ms-PL web server which Microsoft released for developers. This was motivated by my SVG experiments, because Cassini does not serve svg files with the proper content type.

I coded a simple workaround to set the mime type and wanted to give it back to the community. While there are two codeplex projects with Cassini enhancements, Cassini++ and CassiniDev, I felt github was the place to host Cassini changes. There are a multitude of small enhancements that have been made to Cassini, and Cassini is not the sort of project that works well with strong central leadership.

Currently the version of Cassini available in my github repo sports the following features:

I’m hoping that hosting my changes on github will foster the sharing of Cassini enhancements. I will reach out to both Cassini projects on codeplex and let them know of my changes so that can incorporate them into their projects.

jquery.collapsiblePanel: A collapsable panel plugin for jQuery

I’m pleased to announce my first open source jquery plugin, collapsiblePanel.

Basically, this plugin surrounds a given html element with a box and places a title bar on top. Clicking on the title bar will toggle between expanding and collapsing the element.

My main motivation for creating this plugin is to for the tangential lessons I will learn. Some of the tangential lessons I am learning as a result of this:

  1. How do you use the google closure compiler?
  2. How do you use git, and github specifically.
  3. How do you automate the release build process for a static html website. This means automatically renaming the javascript file with the version number, compressing it, and creating a git branch.
  4. Whats is a good javascript editor? Right now I’m liking komodo edit.
  5. Can I use javascript and svg to create animated graphics?

The plan is to blog as I learn, sharing my experiences with you all.

Github, because software kittens should be cloned, not adopted

This is a tale of two open source software projects. However, unlike two certain European cities, there fates are not particularly intertwined, and there is little greatness about their history.

The projects are mqmanager, and console. Mqmanager is a tool for managing MSMQs written in .NET. Console is a multi-tabbed wrapper around cmd.exe.

Both projects are hosted on sourceforge. Neither project is terribly popular, although console is more so than mqmanager. The difference is in the SCM or source control management.

See mqmanager uses SVN, after a CVS migration, while Console uses git. More specifically Console hosts git on github.

“Whats so special about github?” you may ask. Well, mainly the forking presentment, or more specifically the one click forking. See, svn is centralized source control management, there is one repo that everyone reads from and writes to. In git, everyone has a full copy of the repo, and people can push and pull from each other based on network availability and security settings. More importantly, every open source git repo (they have a paid for option for closed source hosting) on github has a “fork button.” Want to fork project? Make an account, login, browse to the project, click the fork button. You have a full copy of the repo, along with the ability to add issue tracking, downloads, etc.

Now your asking, “Doesn’t this make forking too easy?” Well forking in and of itself isn’t that bad. Current trends in SCM policies for commercial companies as well as open source projects. And making it easier to fork doesn’t make it easier to make anyone care about anyone elses forks. If I forked emacs or firefox, few people would use my fork, regardless of how long it took me to setup SCM. My fork would do little to distract any resources besides my own.

I established forking does little harm, but whats the benifit? The benefit, at least the one I care about is for the less popular projects. Console is much more popular than mqmanager, but neither are hugely popular. Neither have funding or a development team of more than one person.

When I found mqmanager, it was abandoned like a stray kitten. I contacted the original developers, and was given control of the project. I improved it, used it, and forgot about it. Someday someone else might make changes to the code that they want to contribute back to the community. They will have to find me, I will have to give them access to the source forge project, and they will be stock caring for the project.

With console its a different model. The sourceforge page has  a sorce archive and a binary archive. I wanted an installer, and I was willing to write one myself. I made an account on github, forked the project (there is a fork button on each repo that will fork any project), made some changes, committed to my branch, and sent a pull request to the original author. Github makes it quite clear that I am a fork of bozho, and bozho can accept my changes at any time. A year from now someone can fork my version and send bozho and myself push requests.

The benefit of github is you don’t have to ask permission. Your cloning my kitten, not adopting him. Thats important for smaller niche open source projects. If I write a niche open source product, I probably won’t be using it regularly two years from now, but someone else might need it. The decentralized github model works better than the forge model for this.

I have adopted a few kittens over the years, and have a few kittens in need of adoption. I plan on migrating all my OSS project over to github. I will keep up the sourceforge pages, but  strip most of the sourceforge functionality to encourage use of the github pages. Perhaps people will fork these projects. Maybe at the time I will be to busy to evaluate their pull requests, but in the end my software . . . my craft . . . my art will live on and hopefully be mare more useful by others.