Ah, the first public breath of a new project. So much potential and so much to do. Exciting times are afoot.
From the teaser page:
CB Reader (code name) is a new project that aims to help people centralize their many sources of incoming online articles and organize them through semantic analysis and social network influence.
This is an application / service for people who use RSS, “read later” tools, Twitter and other sources to manage and read online articles. The big goal is to help you get the most from your limited reading time.
The only real action for you at the moment is to sign up for the mailing list, should this type of app interest you. From here I will be inviting people to participate in various reviews and beta testing.
I’m going to be doing my best to blog progress at it happens. How this will break down:
- Clickable Bliss Blog — major release announcements only
- Mike Zornek.com — discussion of the creation process, coding and design
- “Future Product Blog” — user experience, tutorials, support, tips and tricks.
It feels great to be building things again. Ever since my return I’ve been drowning in accountants, lawyers, agreements and meetings. It’s been kind of a downer but, with this project starting to get momentum, I’m feeling great.
Posted on: March 7, 2013 – 3:31 PM | Comments (0)
Today, I am excited to announce that ProfitTrain, our Mac OS X application that helps freelancers and small businesses invoice clients, has been acquired by RazorAnt Software.
RazorAnt Software is the company face of Al Nyveldt. Al is a current ProfitTrain user and someone who in the past has given back to the ProfitTrain community through AppleScripts for third-party email clients. I have no doubt Al will provide a great burst of energy to ProfitTrain development that I sadly have not been able to do over the last year.
To the ProfitTrain users, I want to thank you for your support. I encourage to you to reach out to Al and let him know what you like about ProfitTrain and what you’d like to see improved.
ProfitTrain, previously Billable, was my first ever commercial product. While I’m sad to see my time with ProfitTrain end, I’m also very happy to have found a new home for it so that development can continue.
Posted on: February 18, 2013 – 4:01 PM | Comments (0)
Posted on: April 16, 2012 – 3:35 PM | Comments (0)
New Relic is a tool that helps you monitor your web apps, it’s users and the servers that run it all. We’ve been using it on Shindig and it’s been crazy helpful. During the Pro trial we were able to build a list of all the slowest queries and pages as well as monitor downtime and memory capacity warnings.
My only real issue with New Relic is that it can be a little pricey depending on your architecture and ability to sign a one year deal for a 25% discount. While I’d love to have the Pro version running on all of our app nodes, our startup is in lean spending mode so we’ve settled for Standard for the time being.
New Relic is also behind a great series of screencasts on scaling Rails which was so incredibly helpful.
If you run web apps you should definitely give New Relic a try.
Posted on: March 12, 2012 – 1:09 PM | Comments (0)
My main role for the Shindig project is that of a Rails programmer and as such I’ve had to build the Rails stack on a bunch of machines over the past few months. Sadly it’s easy to get tripped up so I thought I’d share my notes.
Install Mac OS X Lion
After the base system is running make sure you run Software Update and get the latest fixes.
Now there are two way to get Xcode. One way is through the Mac App Store but I generally prefer to download the DMG from the downloads directory of Apple’s developer site as it makes sharing across my collection of Macs just a little bit easier.
Since version 4.3 Xcode is now delivered as a app bundle and not an installer. If you had a previous version of Xcode installed it’ll give you the option of uninstalling the old
/Developer/directory when you launch the new version. Some of the tools that had been a part of the previous larger installation are now separate. If you are looking for Dashcode or one of the graphics tools see the download index.
Install GCC Tools
Xcode now uses LLVM as its complier but many open source projects still look for and expect GCC. To get this working I like to use Kenneth Reitz’s GCC Tools install which adds GCC but doesn’t interfere with Xcode. You can find a nice installer package linked in the project’s readme on GitHub.
With Xcode 4.3 Apple now also provides a package of command line tools for LLVM. I’ve used these tools to compile Ruby 1.9.3 without incident but still feel like GCC is a safer option and remains my recommend approach.
Lion comes installed with Ruby version 1.8.7 but I use and recommend 1.9.3 (or greater) as it’s much faster and the preferred version for Rails. In the past I’ve built Ruby from source and installed it in
/usr/local/ but these days I’m using RVM. The major advantage of RVM for me is that by installing everything including gems in my home directory is makes it just that much easier to delete if the need arises.
$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
Reload the shell or start a new one:
$ source ~/.bash_profile
Install Ruby 1.9.3:
$ rvm install 1.9.3
Start using it and make it the default:
$ rvm use 1.9.3 --default
We currently use MySQL for our Rails project. The current build is 5.5.x and is listed as the “MySQL Community Server” on the download page. For Lion I download and use the “Mac OS X ver. 10.6 (x86, 64-bit), DMG Archive”. The DMG includes the main installer plus a nice simple System Preferences pane which allows you to turn the DB server on and off as well as setup autostart on boot.
To interface with MySQL you can use the command line or any number of desktop GUIs. I tend to use the free and open source Sequel Pro.
On the command line if you type
which mysql the shell might not be able to find it. It is in fact installed in
/usr/local/mysql. To help the shell find it we’ll need to update or create a
.bash_profile file at the root of our home directory. I do this with TextMate by navigating to my home folder with a
cd and then creating the new file with
mate .bash_profile. Inside of the file we want:
This is basically saying when I issue a command, first look in my personal rvm directory, then look in
/usr/local/bin/, then look in
/usr/local/sbin/, then look in
/usr/local/mysql/bin/, then look in what ever paths you would previously look into.
Before we leave I’m going to recommend another quick addition to the
As Steve Madsen write in his great write up of the bug:
The problem is that the libmysqlclient shared library in the MySQL 5.5 package does not specify a full path to the library. When something links with it, such as the MySQL gem, it won’t be able to find the library at runtime.
This is one of two ways to solve the issue. I’ve done both but this one has the added benefit of working for multiple gem complies.
Install Gems via Bundler
At this point I typically checkout my project from GitHub and run
bundle is a command of Bundler, a great system where in you list all the gem dependancies of your project and Bundler make sure those versions are installed. There is a similar system for Cocoa that is under development called CocoaPods.
Aside: One of the things that annoyed me at first but I later came to appreciate was how when using bundler with RVM you have to append commands with
bundle exec. If you have multiple version of Rails installed and want to issue a command like
rails generate model Personit’s almost a crap shoot which version of Rails will be used but by preceding the command with
bundle execwe know which version to use. If you really dislike the verbosity of using that command each time there are ways to integrate it into your shell.
When you run
bundle install it should install and compile all the gems you need. If your project required the
mysql2 gem then our previous workaround should have avoided the complier issue.
Install current Rails
If you want to do a new project then just run
$ gem install rails
Be sure you just say
gem and not
sudo gem. What you need to know is this gem command is actually hosted inside of your RVM directory whereas if you did
sudo gem the system might use the default version of gem Lion shipped with.
In the process of editing this post a friend pointed out a script the ThoughtBot guys use to prep their Rails stack on a fresh OS X install. Some of it might be overkill depending on your needs but it is very interesting and something to checkout if you do lots of Rails installs for developers.
Posted on: March 12, 2012 – 12:39 PM | Comments (1)
Over the past few months I’ve been working on a new project with some friends. Sadly it’s not ready for public consumption just yet but we now have a teaser page with a newsletter signup form you can check out:
Shindig is an event management platform that enables conference and festival organizers to build mobile apps that deliver schedules, maps, news, and more to attendees.
The mobile apps themselves offer a completely native iPhone, iPad, Android or HTML5 experience. For event admins, we have a web app where they can edit all the data about their event which then flows down to the client apps.
One of our recent customers was the Macy’s Arts Sampler Weekend event held in Cincinnati. This event was available for iPhone, Android and MobileWeb. Feel free to check out those apps and let me know what you think.
Our next event is happening at the end of March and adds an iPad implementation. We’re hopeful to have a public release of the full platform in April, during Philly Tech Week.
Posted on: March 11, 2012 – 2:01 PM | Comments (4)
This is old news for those who already use it, but man Charles is helpful when you are working on web apps and caching.
What is Charles?
Charles is an HTTP proxy / HTTP monitor / Reverse Proxy that enables a developer to view all of the HTTP and SSL / HTTPS traffic between their machine and the Internet. This includes requests, responses and the HTTP headers (which contain the cookies and caching information).
Charles is also useful if you’d like to sniff the web traffic of your iOS devices.
Anyways if you haven’t already, check out the demo. If you are debugging network code this is tremendously valuable tool.
Posted on: February 28, 2012 – 12:03 PM | Comments (2)
One of my current projects in an event management system that generates mobile apps for the attendees of the event. Can’t wait to talk more about this project but that’s it in a nutshell.
In our iOS version we have a bookmark system. When a users goes to bookmark an event we present a dialogue asking if they’d like to enable a feature that would “mirror” their bookmarks onto the system’s calendar.
Question: Is this a good practice? Its seems like too aggressive of a feature to leave on by default but considering our users won’t have a long relationship with the app it’d be rare they discover this on their own. I’ve suggested we try to track usage of this feature so we can make a more informed default later and maybe drop the dialogue entirely. Thoughts?
The alert we currently show in beta is pretty bad.
**Save to calendar?** Would you like to automatically save bookmarks to your Calendar app? (You can change this preference later in your device settings) [Save to Calendar] [No]
Things I don’t like about this:
- It’s wordy.
- The string “Save to Calendar” is so long it makes the alert view use a different font size to fit it.
- The use of “No” is not a natural opposite to “Save…”. In general I don’t like YES/NO alerts as they require you to read the alert message. By using action words like SAVE, OPEN, CLOSE, LINK you have a better guess at what’s going to happen when you tap the button.
- Capitalization of “Calendar” isn’t consistent.
- The sentence inside of the parentheses doesn’t have a period.
- Using terms like “your Calendar app” are excessive for such a personal device. Of course it’s your Calendar. This isn’t a multi-user system.
A new alternative:
**Sync Bookmarks to Calendar?** Syncing will show all the events you bookmark in the Calendar app. [Sync] [Cancel]
I like the word sync better than save since we do in fact keep those calendar listings up to date with changes that come down the wire. I feel like dropping the whole “this can be changed later in preferences” message helps the alert feel less intimidating. The setting panel itself is actually a high level menu in our navigation controller. It’s not too hard to find if you go looking for it and this Calendar feature is the first setting listed.
Question: What do you think of my new alert dialogue? Have any further suggestions?
While it can sometimes feel excessive to analyze single alerts like this I do feel that small improvements do add up to make the overall app experience better. Hopefully you enjoyed a little insight into my own UI refactoring workflow.
Posted on: January 18, 2012 – 3:06 PM | Comments (7)
Mike Piatek-Jimenez of Gaucho Software has organized numerous other developers to donate their entire sales for a single day — 20 December 2011 — to charity: water, a non-profit organization bringing clean and safe drinking water to people in developing nations.
ProfitTrain is among the apps listed so we’ll be donating today’s. To learn more check out the websites:
Thanks to Mike for organizing and to everyone for their support.
Posted on: December 19, 2011 – 8:37 PM | Comments (2)
It was with sadness I found out this morning that Dex, my beloved Pokemon browser for iOS, was pulled from the App Store. Nintendo legal had been sending copyright notices to Apple for some time and while I tried to have a conversation with Nintendo to work something out they weren’t very talkative.
To the best of my knowledge this isn’t part of a larger plan of Nintendo or The Pokémon Company to lock down their intellectual property. While they continue to turn a blind eye to fan sites like Bulbapedia, Serebii, Marriland and Smogon they seem to really dislike apps serving the same data sets such as my own Dex, Timothy Oliver’s iPokedex and Nolan Lawson’s Pokédroid.
I suspect part of this is because they view these devices as competition against their own struggling handheld platform. Additionally Apple’s distribution is centralized making it that much easier to shut things down.
I’ve read a lot on the topic of Selective Copyright Enforcement and the legality/benefits of fan sites over the past few months. I’m not really prepared to do a larger write up only to say I think a move like this was in the disinterest of Pokémon fans and the Pokémon brand.
If you’d like to let your disagreement with this action be heard I’d recommend sending respectful feedback to The Pokemon Company directly. My contact there was:
To all the Dex fans out there, thank you so much for your support and well wishes over the last year. I’m happy I was able to improve your experience of the great Pokémon franchise.
Posted on: December 6, 2011 – 3:57 PM | Comments (14)