I'm proud to announce that today I've released my first Mac OS X app under the MIT License on Github. Over the last few months I've been working on Objective Octocat Notifications; a mac app to hook Github Notifications into the Mac Notifications Center. The app will poll the Github API for new notifications every minute. When it gets new notifications it uses the Mac Notifications Center to display an alert to the user. When the alert is clicked it will open a browser with the related url as well as mark the Github Notification as read.
My inspiration for this app came while working for Flowboard. Here at Flowboard we use Github pull requests to code review before anything new gets merged into the main development branch. That kind of workflow is useful for ensuring that all new code gets reviewed before making it into production, but it can slow down development if the pull requests aren't merged in a timely fashion. When we first implemented this, I found it hard to see that something was waiting on me (I don't like receiving emails for stuff like this since I check it 2 - 3 times a day). Thats when it came to me that I would love to have the notifications pop up for me on my Mac. I tried to use the Github Mac app for this, but couldn't ever get it to post notifications to my Mac. Thats when I decided to put together my own app.
Features
Uses Github OAuth for authentication.
Github OAuth will only authorize the app for read access to your notifications compared to complete read/write access to everything (private repos included) on your account granted by a user auth token.
Mac Keychain integration to save your Github Auth Token so authentication doesn't need to be run on every launch of the app.
Status bar app with a circle icon designed after the github button so it doesn't take space on your dock.
The status bar icon glows blue when you have notifications that need to be addressed.
Features Coming Soon
The majority of features coming will revolve around adding user preferences. Here are a few of the preferences that I'd like to add in the near future:
The amount of time that the app waits before checking for more notifications. (It currently waits a minute before checking again.)
Integrate with Notification Reasons to allow user to set which "reasons" they want to be notified about.
One other feature that may be useful is to add a preference to allow the app to not take up valuable space on the status bar. The one issue with this is that there would no way to quit the app with this type of configuration. I'm thinking we could solve this by doing one or both of:
Create a CLI program to close the app.
Have the user "start" the app again to get a prompt asking if you want to quit the app that is already running.
Download
You can download the latest build of app from the Releases page on github.
If you would like to contribute, feel free to fork the app on Github and submit a pull request.
Thanks
Flowboard
First off I would like to thank Flowboard for which I would not have been inspired to create this app not to mention the fact that they provide me a wonderful environment to build beautiful things. I also couldn't have done this without my co-workers who have contributed quite a bit of objective c knowledge, testing, and patience.
AFNetworking
Thank you Mattt Thompson for creating AFNetworking! It greatly reduced the amount of time needed to create this app.
Popup Example
Thank you Vadim Shpakovski for creating a great Mac status bar example app. It has taught me a ton, not to mention contributed quite a bit to the usefulness of this app.
I'm still working on getting our development team virtualbox images for development and I haven't made a lot of progress until recently. The game changer has been vagrant which makes this task considerably easier.
Due to the fact that our production servers use arch linux and there weren't any vagrant boxes that are current enough to use; my first real foray into vagrant has been to create an arch linux box for vagrant. I've made a pull request to the vagrantboxe.es repo to add my two boxes to the list, but there hasn't been any movement made on it yet. In the mean time, they are available to download for free at sourceforge.
The minimal box is a basic arch install plus the packages that are necessary to run vagrant. The chef box builds on top of the minimal box to include packages that allow it to be provisioned with chef via vagrant. I'm not extremely happy with the end size of the boxes. In my opinion they're a bit too large to be considered minimal installs. Sometime in the near future I may create a micro box were I'll uninstall the base install packages that aren't completely necessary to get up and running with vagrant, such as nano. Then anything that the end user wants can be installed easily via pacman.
My next step is to integrate with chef, a systems integration framework. That way we can have the same server build as the ones running in production for our development use. I'm so excited to have development servers that I've been dreaming about for a couple years now!
A while back I was working on setting up a LAMP stack with CentOS 5.8 and ran into this problem with Apache. It took a bit of work to figure out via google, so I'd like to add my the solution I found to the web for the sake of others as well as myself. #### Port 80 Blocked On a vanilla CentOS install, port 80 will be blocked via iptables. This can prove very frustrating when you see that Apache is running fine over the localhost but the machine can't be hit over the local network. I added the following to /etc/sysconfig/iptables then ran `service iptables restart`. > -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT Two good articles to learn more about iptables: http://www.centos.org/docs/4/4.5/Security_Guide/s1-firewall-ipt-basic.html http://www.cyberciti.biz/faq/howto-rhel-linux-open-port-using-iptables/
I have been working on creating a local dev environment that I can export and share with my fellow web devs. The goal is that it should be easy to install while mirroring the production environment as much as possible. Since our prod environment runs CentOS 5 I decided to install it in VirtualBox. As I've gone through this process I've come across a few gotchas that I'll be blogging the answers to since I also found that it is a bit more difficult to google solutions for CentOS than Ubuntu. Not to mention that I'll also have a reference for myself later on.
The first issue I came across when trying to install CentOS 5.8 as a VirtualBox Guest was that I wasn't able to boot from the iso. When trying to boot I would get the following error:
PIIX4: not 100% native mode: will probe irqs later
No matter how I would change the storage settings for my virtual machine I couldn't get it to boot. The solution was the check the box in the Settings > System > Motherboard tab to "Enable IO APIC". Once that was enabled I was able to boot into the machine and install CentOS.
So I finally did it, I took the plunge and upgraded my Mac Book Pro from Snow Leopard to Lion. Overall it has worked out ok. I did a clean install on a new hard drive with more space since I eventually want to install Windows 7 on another partition. Having Snow Leopard and all my files on my old hard drive proved invaluable since I had forgotten to dump all my MySQL databases. So all I had to do was boot up my old hard drive via a usb enclosure, log into my old account and dump the dbs into sql files to import on my new system. This is all to say that the migration went fairly well until I reached my last step, set up Time Machine to back up to my Ubuntu desktop.
Let me back up to say that a couple years ago I set up an Ubuntu Desktop with two 1 TB hard drives in a RAID 1 set up for back up purposes. It was all sparked by a blog post by kremalicious that shows how to set up Time Machine to back up to Ubuntu over the network. I was successful in setting it up with Snow Leopard and have been extremely happy that I did since it has saved my bacon more than once.
While contemplating the upgrade to Lion I had checked for compatibility with my frequently used apps including Time Machine. During that compatibility search I did find people with Lion problems in kremalicious' post comments, however, they seemed to able to resolve the incompatibilities. I on the other hand had quite the run around trying to get Ubuntu and Time Machine to play nice. This post is a chronicle of my journey to find a solution.
Fist off, the issue. I got the following error when trying to backup:
Time Machine could not complete the backup.
The network backup disk does not support the required AFP features.
I thought, oh well should've known better than to think everything was going to be easy. I went to kremelicious' post comments which led me to this fix which I'm sure has worked for others, but I couldn't seem to get working. So I kept searching and found this articlewhich explained Lion's issue with my Ubuntu setup. Once I realized that all I needed was a Netatalk upgrade to 2.2 I steadied my gaze at google until I found this forum post that helped me piece together a way to upgrade to Netatalk 2.2. Here what I patched together from the different posts in that forum thread.
George Polyard came to me wanting a simple calling card with a blind impression. I came up with this layout using Futura and an inkless impression of his monogram.
Simple and effective. Printed on 140lb 100% cotton Holyoke Rag.
Tumblr grew tremendously in the past year. In the last twelve months, the number of pages we serve daily has more than quintupled, while our small team continues to roll out huge new aspects of the platform. The story of the humbling growth of our creative communities has been well told. Up until...
I'm excited to hear about the inner workings of tumblr!
Today I accidentally added a git tag with a dash ( - ) for the name. A mere typo ended up creating quite the headache. I quickly found that I could delete the tag locally with no problems using:
$ git tag -d -
However when I pushed my update to the server I noticed that it didn't update the remote sources. A git pull would recreate the tag on my local repo. This frustration led to a quick google search which resulted in this nice and simple howto. I thought I would share the answer here on tumblr in case that page gets lost one day to the 404 monster. Here is the answer assuming that the tag name is '12345'
This is officially my first post as a blogger! Yes, I know, as a web developer I should be able to say that I've been blogging since that fateful day that Peter Merholz coined the term. I sincerely hope that my procrastination so far is due to the #1 virtue of a programmer according to Larry Wall. However, I'm sure that is not the case since that means I would've written a program that would assume my identity and write a blog for me. Oh well, I guess I have a ways to go yet. Thats actually what I hope this blog becomes. A web log of my journey through the tech world. That being said, I'm sure other ramblings and misguided anonymities will find their way on here since tumblr has made it dead easy to do so.