Saturday, June 30, 2012

Mac Software I Can't Live Without

June 30, 2012 Posted by Jason No comments

I've had a Mac Mini for a few years now, but have continued to use a Windows box as my daily driver. I've decided I want to get into IOS and Mac OS development and recently ordered a new MacBook Pro. With that in mind I've been working to build up my collection of applications - below are those that I use and value the most. I'm always on the lookout for good development/design/productivity applications - let me know if you have any recommendations.



Butlers HatAlfred (with powerpack)

Mac OS has an embarrassment of riches with respect to available 3rd party launchers. The in-built Spotlight is actually pretty good and reminds me of the Windows 7 "run" functionality (I assume spotlight hit the market first…) which I use countless times daily. There are many great alternatives, however, allowing applications to be launcher, files to be found and commands to be executed with ease. I ended up using Alfred (with powerpack) mainly because of its simplicity and low barrier to entry. It's simple to use, aesthetically pleasing and - if you hand over the cash for the powerpack upgrade - comes packed with plugins one can use to speed up just about any activity they perform on a Mac. It even includes a tracking mechanism to show you your usage stats - and based on the number of times I've used it in a couple of short months it’s already paid for itself.




I set out to find the perfect email client for the Mac, and found exactly what I was looking for in Sparrow. The UI is beautifully minimalistic and account setup was insultingly simple (a 4 year old could do it…seriously). I never thought I'd say it, but the ability to pull to refresh my emails works tremendously well (with a Magic Mouse) and is a feature I can barely live without. I’ve used a LOT of mail applications and I think this one is my favorite – I’ve already found myself switching to my Mac mini when I want to send an email. At the very least, I’d suggest everyone check out their ad-supported free version – I’m willing to bet you’ll like it and end up buying the full version, as I did…





The most beautiful RSS reader on any mobile device is also available on the desktop. I fell in love with this reader when I bought my first iPad and its desktop sibling is everything I had hoped for. Production values are as high as in the mobile version, including a dock icon which shows the count of unread feeds, full screen mode and a bunch of export options. I use reeder daily and consider the $10 price tag a bargain.




TwitterTwitter (Official Client)

Of all the applications on the list, this one surprised me the most. While I'm not a fanatical tweeter, I have used the service for some time and check multiple times daily. Normally the “own-brand” implementation is bare-bones and so I looked at a bunch of alternatives before trying the official client. It’s pretty, it’s fast and it’s free. I'm mightily impressed!




Balsamiq Mockups

A long time ago I posted a review of Mockups, a tool that subsequently found a permanent place in my toolkit. I won't rehash the review, except to say that Balsamiq Mockups remains the best mockup tool out there. And, because it is Adobe Air based, it runs exactly the same on the Mac as it does on Windows (without requiring an additional license). I use this tool exclusively for mockups and it was the first tool I installed on my new MacBook. This is the only mockup tool I’ve ever used that’s quicker than mocking up on paper. Seriously! Don't let the ~$100 (last time I checked) price tag scare you away - this tool is invaluable…and platform independent!





1Password is the de facto standard for password storage on the Mac. There isn't a whole lot to say - it stores passwords, allows generation of strong passwords and integrates beautifully with many mainstream browsers. I'm getting to the point where I don't need to know most of my passwords - I just need to be able to access them without jumping through hoops. 1Password makes this easy especially with its 1Password anywhere feature that allows passwords to be accessed via a secure site within the user's dropbox account.





I'll be using my MacBook Pro to develop Cocoa applications, but also plan to use it as a Windows development box when I'm travelling or parked in front of the television. I've heard good things about both Parallels and VMWare and really don't have a big preference either way. I love the ability to use a bootcamp VM in Parallels - ideally I'd like to use Mac OS X for everything in order to familiarize myself with the O/S, and only boot into my bootcamp partition when performance requires it. Parallels offers this and was very reasonably priced (discounts seem pretty common…), so I went this route.




Dropzone is a simple (but beautifully finished) application that allows zones to be created to automate simple tasks. For instance when I move my mouse to the leftmost part of the screen a number of circles appear, each supporting different actions. It is highly customizable and I use it often, dragging multiple PDFs so that they are sent straight to my printer, or dragging a code file to one of my FTP circles so it automatically gets uploaded to my web server. It's a hard one to explain, but it's pretty amazing and a BIG time saver!




Store News

While I could probably live without Store News, it has been a free and invaluable mechanism for finding deals on App Store applications…a.k.a impulse buying. It simply allows the user to check for applications that have been recently discounted. I found deals on Dropzone, Forklift and a number of other utilities using this application and, let's face it, it's always more fulfilling to purchase applications at a discount rate!





Bartender is an (still beta) application that essentially lets you minimize the number of applications that appear in your menu bar. It's one of those "I wish I had thought of it first ideas" and really helps to cut down on the clutter.






This application is one (planned) update *ahem, multi-step gradients* away from being the best gradient generator on the market (IMHO). The interface is simple yet manages to hide a lot of readily-available complexity. CSS is generated in real-time and the new addition of SASS (SCSS/Compass) output makes a good tool great!




Markdown Pro

If you had told me a month ago that I’d be using markdown on a near daily basis, I would have smiled politely, excused myself, and walked out of the room. Not that I had anything against markdown per se, I just never understood where it fit in. By chance I purchased Markdown Pro (thanks a lot Store News) and since then have used it as my go to editor for almost everything. Ugly input becomes beautifully formatted output that can easily be transmitted via email, saved to PDF or output to HTML. It’s almost like mixing the simplicity of Notepad with some of the benefits of Word (I hate wordpad, I don’t know why…). I’ve since reviewed a number of markdown editors on the MAC and with it’s editing and previewing abilities – as well as multiple built-in output templates and the ability to add custom templates using CSS, Markdown Pro remains my favorite




I've purchased a bunch of other software that I like but have yet to really use in a significant way. Honorable mentions include Coda 2, Textexpander (I literally purchased it yesterday…), Objectify (which looks awesome and which I have every hope will simplify JSON translation to Cocoa objects..), Forklift, Coderunner and finally Fantastical - the nicest looking calendar I've ever seen with really amazing language processing built in!



I'd really like to try:

There are also a couple of pieces of software that I don't yet own that I'd like to try - feedback is VERY welcome. The first is an alternative to XCode AppCode. I love Jetbrains on the .NET stack so can only imagine Appcode is good. However, I'm keen to use XCode exclusively for a while as I learn Cocoa development so I'm not dependent on external tools. The second is a sweet looking tool called Paintcode used to turn graphical objects into Cocoa code. It looks really nice, but with my currently limited Cocoa skills (and a hefty $99 price tag – I’m not complaining – I’m just “Laptop Poor” right now, so to speak!) I may hold off on this for a little while..


What am I missing

Tell me please! I normally purchase development/design/productivity apps but would love feedback on any apps you consider must-haves

Sunday, June 24, 2012

Using localtunnel to allow external access to IIS Express

June 24, 2012 Posted by Jason No comments

Why Bother?

There are varying reasons why one might want to tunnel through the internet to allow external access to his/her development web server. It's useful in a variety of reasons (providing someone remote with access to your dev environment, testing web applications on mobile devices, etc.) and I personally find it especially handy when testing callbacks from 3rd party sites.
For instance, I recently worked on the integration of a new payment vendor into an existing ecommerce website. This involved sending a customer to the third party site and receiving a callback from that site when a payment succeeded or failed. This is easy in production, but a real pain in development, when you need to the test the 3rd party's (test system's) callback integration. Obviously passing a localhost:80 as the callpack URI won't work and, short of hosting my development environment online and having a static IP or DNS entry, this was something traditionally difficult to test.
localtunnel makes this free and easy! It basically binds a specified port on your local PC to a real (temporarily accessible) domain name over SSH. The only tough part is getting IIS express on board...

Installing localtunnel

You'll need Ruby installed and can install the localtunnel gem with the following command
gem install localtunnel
For security purposes you'll need to provide localtunnel with an SSH key upon first loading the application. This is easiest by using cygwin and running the following command:
Now that you've generated your ssh key, you can run localtunnel on the desired port (in my case port 80) with your key:
localtunnel -k ~/.ssh/ 80
For subsequent calls you will not need to provide the key
localtunnel 80
You should see something like this:
Port 80 is now publicly accessible from ...
At this point localtunnel is working but if you navigate to an IIS Express site, you'll probably see a 503 error

Making IIS Express work with localtunnel

Modifying the ACL

You'll definitely want to modify your Access Control List if you do not plan to run Visual Studio as an administrator, as in my case
netsh http add urlacl url=http://*:80/ user=everyone
Note: I suggest deleting these entries once you have completed the development you are working on. To do so:
First enumerate the acls on your system
netsh http show urlacl
Once you've identied the acl you want to remove, do so by replacing the url in the following command with your URL
netsh http delete urlacl url=http://*:80/

Modifying applicationhost.config

You'll need to modify your applicationhost.config file (located at %userprofile%\Documents\IISExpress\config\) to allow wildcards.

<site name="testsite" id="2">

            <application path="/" applicationPool="Clr4IntegratedAppPool">

                <virtualDirectory path="/" physicalPath="C:\Users\jirwin\Documents\My Web Sites\testsite" />


            <application path="/test">

                <virtualDirectory path="/" physicalPath="C:\Users\jirwin\Documents\Visual Studio 2010\Projects\testsite\testsite" />



                <binding protocol="http" bindingInformation="*:80:" />



The important part here is the bindingInformation section. Essentially what you are telling IIS Express here is that you do not want to limit based on IP address or host header when connecting to this site:

Proof of the Pudding

At this point you should be able to enter the provided address ( in the above example) in the address bar of your favorite browser and see your local website load up over the internet. Brilliant!

Further Work

The only thing I haven't played with yet is using a combination of port 80 and 443 (for SSL) through localtunnel. I'm not sure if this is possible - it looks distinctly like only a single port can be tunneled (which would obviously make sense at a conceptual level). I'm willing to bet that the best idea in this case is to use 443 exclusively when testing and to follow all the steps above using port 443 instead of 80. I'd be very interested to hear if anyone has experience with this...