Adam Howitt's Blog

Sep 04
2013

ADT Pulse Broadband Unavailable on Verizon FiOS Actiontec

I recently had ADT Pulse installed which uses my home network to allow me to connect remotely to monitor the system and turn it on and off. We started to get messages that the Service was Unavailable in the app while away from the house. When we returned home I discovered the connection used by the system was unavailable, taking it offline.

The quick fix was to unplug the ADT pulse netgear box and plug it back in, at which point it would come back online. I suspected a DHCP issue - the Verizon wifi router giving away the IP address for the Netgear box to something else on the network when it's lease expired.

I knew I'd need to look at the router settings to try to statically assign the same IP address to the netgear box so it maintained the same IP address between Verizon router reboots or other devices coming and going or lease renewals. I came across a great post on the verizon forums:

Log into your router. "Go to the advanced menu and select IP address distribution and then connection list. There you can set up a static IP for the mac address of the PC, so it will always be issued the same address. Then your computer will show up in My Network and you can forward to it by name. I believe if you set up your PC to use a dynamic address and then go where I stated, you will be able to edit the entry and select a box that says make static. Or you can add a static entry there.

The username and password for your actiontec router is on the side and you'll need to visit http://192.168.1.1 in your browser to access the admin portal from your home network.

Next I found the IP address of the ADT netgear pulse box in the web portal under system > devices > gateway > broadband lan ip address.

Look in the verizon actiontec router connection list for that IP address. Click on that to see the mac address, the host name and an unchecked box next to "static". Check the box and hit save.

Now whenever the ADT Netgear box loses it's IP lease or the power goes out on either that or the Actiontec box, the router will assign it the same IP address again. Problem, apparently, solved.

Oct 31
2012

Hubway Data Visualization Challenge

Chris Lanoue, a colleague here at Workbar, created a 3D data visualization tool modeling the trip data of the Boston Hubway project. Hubway is like zipcar for bikes. For $85 per year members get to pick up a bike at a hub and drop it off somewhere else. Through his visualization you can interact with Fan Pier trip data showing the most popular destinations from that pickup location and the gender breakout of the riders between each point. He's submitting the visualization into their contest so once you've had a look, please head over and cast your vote on the challenge site.

Entry
Image credit to Nick Taylor @ SocialContests - another Workbar colleague.

For interested riders, the most popular Hubway destination by females from the Fan Pier Hubway station is Dorchester Ave. at Gillette Park.

To view the visualization, download and install the Unity Web Player. Right click on the visualization and select Full Screen for full control.

To orbit and zoom the camera around the visualization hold down the middle mouse button (or two-fingered click on the touchpad) with the alt/option or control key.

"The "Hurricane Sandy Inspired 3D Visualization" project arose when I realized how awesome it would look if I combined the satellite images of Hurricane Sandy with one of my favorite data visualizations - Nightingale's Rose. Given that I am working on spatial 3D data visualizations with Innovosoy, LLC, I thought I would give the hybrid visualization a shot with the data provided in the Hubway Data Visualization Challenge.

Given the time constraints of the challenge, I needed to work fast, so using the provided trip data in SQLite I picked a random Hubway station, Fan Pier, and found the top twenty stations with which bikers traveled in terms of trip counts. I processed this data and created the twenty 3D wedges using Python and Blender, but it just wasn't that interesting. To make it a bit more interesting as a visual, I decided to grab the percentage of males (blue wedge) and females (visible pink wedge) that made up these trips (the part of the wedge that is not filled by males or females is made up of guests that aren't registered with Hubway). It started to get way more interesting, but it didn't fully utilize the 3D modeling environments, so I spiraled the wedges and text by changing their z-values to resemble the hurricane.

Now we are getting somewhere, but Blender doesn't give a user as much freedom to explore the data as Unity3D, so I exported the meshes and text curves as a .FBX file and added it to a new Unity file. With the Unity project, I was able to write a couple quick C# scripts to add orbiting with the mouse and keyboard and let the user interact with the model - interaction is not available with this visualization because of the time constraint. If there is more interest with this project, I am thinking of adding colliders to all the wedges where a user can click on one of the end stations and that end station becomes the start station in the center (and the data is updated to reflect the new chosen station) with of course plenty of cool looking animation of the spiral disappearing one wedge at a time and then reappearing with the new data."

Sep 21
2012

Help Apple Fix iOS 6 maps

With all the outcry about Apple's maps and directions in iOS 6 you'd have thought they were the first company to go through the growing pains of launching this kind of service. Here's a quick refresher of some highlights

So let's all step off the ledge:
CNN: Apple Maps Complaints
Yahoo: Apple iOS 6 Maps App Awful Now World Knows It
Anil Dash: Who Benefits from iOS6s Crappy Maps
and let's not call Steve Jobs' legacy dead just yet or consider yourself insightful enough to decide WWSD: Forbes: Steve Jobs Would Never Have Released iOS 6 like this

Sure, there are some kinks:
The Amazing iOS6 Maps

iOS6 turn by turn directions screenshotBut let's be clear, the new maps are visually stunning when the tiles are done rendering and the turn by turn directions over bluetooth are a huge upgrade for drivers. I just completed a move from Chicago to Boston via Cleveland, Niagara Falls, Syracuse and Cooperstown a month ago under the watchful eye of Siri's turn by turn navigation and didn't have a single issue (thanks to the developer private beta program). The delivery and timing of turns, exits and instructions was far better than my experience of a few years ago with dedicated GPS units and the re-routing significantly faster (thanks to Jeff for distracting me as we approached an exit).

Fixing the 1%

What can you do if you've upgraded to iOS 6 and are having issues with the maps? Report a problem. Apple has provided some extensive tools baked into the map to get your input. In the bottom right corner of the map you'll find a curled page you can tap to reveal map options including traffic and map types. Above the options you'll see a link "Report a Problem". Tap that to see a list of things Apple is expecting. Tap one and you'll see a check mark. Hit Next and you'll get a chance to provide feedback in different ways depending on your issue.

  • Search results are incorrect - Select the search you are having issues with, hit next to add comments and hit send to submit it to Apple.
  • Street or other label is incorrect - Tap the street or feature you believe is incorrectly labeled, hit next and then suggest a correction of the name.
  • Location is missing - Drag the pin to the correct location, hit next and then provide address, phone number, hours, URL, pick a category and hit send to submit it to Apple.
  • Problem with directions - Select the direcions you are having issues with, hit next to add comments and hit send to submit it to Apple.
  • Problem with satellite image - Pan and zoom the map to the area you are having problems with and hit next. Apple offers options to report outdated satellite images or poor quality images or select "my problem isn't listed" and add constructive comments before hitting send to submit it to Apple.
  • My problem isn't listed - Provide constructive comments in the text box and hit submit to send it to Apple.

You better believe Apple has a squad of folks just like Google's Ground Truth team battling away to address every bug they get:
How Google Builds it's Maps and What it Means for the Future of Everything

So please, join the community and help improve the Apple maps. Search, use driving directions and, for the 1% of the time you experience problems, don't just ignore it - report it and we'll all benefit.

Aug 14
2012

Broken Workflow: In-App Purchases

In-App purchases are a great way to build an app with upgrades to let your customers decide what they're willing to pay for but the workflow for in-app purchases is broken.

I've just suffered about 20 minutes of frustration thanks to in-app purchases. I bought flighttrack back in 2011 and have been a big fan. For the past year or so I've forwarded every itinerary I get for flights to plans@tripit.com and automagically it appears in my flighttrack account so that as my departure date comes I get status updates on the flight.

I'm running the latest beta of the iOS 6 software and decided it was finally time to start from "app zero" - a fresh install and just add back the apps I use as I need them. Last week I received a flight itinerary and forwarded it to plans@tripit.com as usual. Last night I saw that I had a flighttrack update I hadn't installed so I pulled it down.

This morning when I came to check the details of my mother-in-law's inbound flight from Boston it wasn't there. After a brief pause that made sense - I hadn't logged into tripit since my user data was gone. I dug around but all I could find was a toggle to sync with tripit but for a $4.99 upgrade. Furious (not enough coffee yet either). I pulled out the new iPad and saw that it was also not showing my plans. Even more annoyed.

Stomped around my keyboard on my macbook as I looked online to find out if they'd removed the tripit sync feature. I'd payed $4.99 for this app - why the hell would I pay extra now for what was a core feature. I felt cheated and fired up mail and prepared to email support with a firey complaint.

Just as I typed the first paragraph I had a vague recollection that I might have purchased the upgrade... The Apple store didn't help me discover if I'd bought it - there was no indication. Skimming purchase history but I had no idea when I'd bought it. Looking at the app there was no indication that I might have already purchased the upgrade.

Gmail. Bottomless email. I opened Gmail where my receipts go and searched for FlightTrack and found that in 2011 I'd not only purchased flighttrack but the same receipt period also included the $4.99 upgrade. Tada.

Okay, so I purchased it but how to reinstate the purchase? Our app WalkJogRun had in-app purchases at one point and I remember the customer service nightmare of telling people that the app store doesn't forget that if you purchase something once, it's yours forever but that's a leap of faith I'd asked people to make. I was asking them to do what I was facing now.

I clicked the "details" button in FlightTrack to se the upgrade info. Tentatively I pushed the button marked "Upgrade for $4.99":

"Confirm your in-app purchase". Do you want to buy one FlightTrack Pro Upgrade for $4.99 [Cancel/Buy]".

Wait - I know I bought this but it *seems* like the app store has forgotten me! Use the force.

I clicked buy and see the Apple ID dialog to login. That makes sense. If I've not logged in recently it doesn't want to assume I'm approving a purchase. Login.

"You've already purchased this. Tap OK to download it again for free. [Cancel / OK]"

Phew. But really, that was touch and go for a while. I mean, not life threatening but certainly troublesome to think I'm going to be cheated into paying a second time for something I already purchased. It's made more nerve wracking by the sequence of events if you're logged in and haven't purchased something before:

Click Upgrade > see the confirm your in-app purchase dialog > hit Buy - you're charged and the upgrade happens.

Fixing the flow

Apple provides, as part of the storekit api, a mechanism for checking for user purchases designed to be triggered when the app opens so puchases are automatically re-instated on any devices you add but many developers don't make this happen. It's sad because it's such an easy thing to test - purchase your upgrade, delete the app and then reinstall it. Confirm that your storekit calls to reinstate purchases are being called and the purchases are reinstated correctly.

I would like to see Apple add options though to the API for alternative workflows. Instead of Buy and Cancel before you login, prompt the user to login before showing the confirmation dialog. Once a user logs in, the visitor would either see "you've already purchased this..." or "Confirm your in-app purchase..." It's a minor tweak but as it stands, iOS devs are getting customer service requests, some of which they can mitigate but a less scary checkout would certainly help!

Anyway, go download FlightTrack. It's a great app and worth paying $9.99 out of the box for but if you're in doubt, get the $4.99 version and manually add a flight you're taking to see what you think.

Jul 09
2012

Fixing JRun4 ColdFusion on OS X Mountain Lion

This is a brain dump rather than the usual verbose format since I've got a feeling some of this might change when Mountain Lion launches but basically running JRun4 on Mac OS X Lion broke when I installed the developer preview of Mountain Lion due to the change to the Apache 2.2.22 configuration.

Running virtual hosts 1. Forbidden content: change default site root to match your folder. in my case ~/Sites If errors check error_log

tail /private/var/log/apache2/error_log

2. Confirm vhosts file is loading - uncomment this:

Include /private/etc/apache2/extra/httpd-vhosts.conf
restart apache with
sudo apachectl restart

test config by running from terminal

locate httpd
(mine in /usr/sbin/httpd) Run
/usr/sbin/httpd -S
to see vhosts for named hosts and confirm your hosts entries resolve correctly to the right line number

3. CF Config Apparently removed again from

/etc/apache2/httpd.conf
Note Last line:
Include /private/etc/apache2/other/*.conf
We can create a conf file that won't get edited whenever OS X updates or apache is updated.

Go to that directory Create a file coldfusion.conf with contents :

# JRun Settings
LoadModule jrun_module /Applications/JRun4/lib/wsconfig/1/mod_jrun22.so
<IfModule mod_jrun22.c>
JRunConfig Verbose false
JRunConfig Apialloc false
JRunConfig Ignoresuffixmap false
JRunConfig Serverstore /Applications/JRun4/lib/wsconfig/1/jrunserver.store
JRunConfig Bootstrap 127.0.0.1:51020
AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf
    <IfModule dir_module>
        DirectoryIndex index.cfm index.html
    </IfModule>
</IfModule>

Go to terminal

locate wsconfig
Note the location and of mod_jrun22.so and put that in the loadModule line Replace the JRunConfig Serverstore location with the path to your jrunserver.store Look at your ColdFusion startup log to get the boostrap port and replace the 51020 with that

Save the file

Restart apache Boom

May 18
2012

Comcast "Business Class" and the RCN Business Tax

After a month of outages at the office for our "Business Class" Comcast internet service we've started shopping for a new provider. Thought I'd share an enlightening explanation of what business class means.

First off, Comcast charges us $99.95 for 22mbps internet per month for it's business class service. I thought this meant 24 hour problem resolution (or at least it did back in 2007 when I started using it). Turns out we've had a week of intermittent service (mostly outages) so when they told me it would be 3 days to getting a team out to address the issue this time, I started to question what business class actually means.

RCN Business Tax

We looked up RCN and for just $70 per month we could get RCN 75mbps internet service! Imagine our disappointment to learn that since we're a business we'd have to go through their business division. They offered us 60 mbps for just $230. That's right folks 3x the price for a slower service. When asked what could cost $160 per month on top of the residential rate the associate told us "you make money by using our services so we charge more". He *did* mention 24 hour customer service but we've seen how Comcast clearly doesn't give a shit about that promise so forgive me if I'm a little skeptical.

So the bottom line is, if you want residential service at an office, they'll charge you $160 per month extra for the privilege of being a business that makes money.

My advice - be a work at home business and screw Comcast/RCN out of their pound of flesh.

Feb 08
2012

Seeking Android Developer

I'm the CEO of WalkJogRun.net, a Chicago based startup in the Ravenswood Corridor. Our site gets over 16,000 visitors a day from around the world from runners looking to map a route, download a training plan or log their training to our diary. Our iPhone app has generated over $70,000 since it's launch 2 years ago and we're looking to replicate that success on the Android platform.

We're in search of a talented Android Developer and wondered if you know any devs that fit the bill. If so, please have them send over a letter of introduction. I'm looking for people with a passion and a talent, not a resume 18 pages long ;-)

We're looking for an intern looking to get their feet wet in a real world project that generates real revenue. I fully expect that the developer who can get this done would be hired to work full time on all of our platforms dabbling in the iPhone app and the website built on ColdFusion and MySQL. A passion for running would be ideal.

I see this as a great final year project or internship for the right candidate with some amazing opportunities with WalkJogRun at the end of the project.

Does location matter? Preferably greater Chicago area for the sake of simplicity but we're definitely not looking to offshore this project. I want someone who can grow with the company.

Jan 06
2012

User does not have permission to run DBCC TRACEON

I ran into an issue with a Microsoft Query based Excel work sheet a month ago and again just yesterday so I thought I'd share the workaround/fix here for my own sake and anyone else who is butting their head against a wall! The exact error message is as follows:

Connection failed:
SQLState: '37000'
SQL Server Error: 2571
[Microsoft][ODBC SQL Server Driver][SQL Server]User 'username' does not have permission to run DBCC "TRACEON".

The issue, as I understand it, is that Microsoft Query uses Microsoft Excel or Microsoft® Excel as the app name in the query string when it tries to connect which causes SQL Server to check for DBCC permissions (permission to run commands in the console). This request to turn TRACEON for a production server is actually frowned upon in favor of a system wide setting at startup so we need a workaround.

In Excel 2010 for PC you can edit the connection string by going to the data tab > connections > edit your connection and then the second tab of that dialog box lets you edit the connection string. Replace APP=Microsoft® Excel; with your own app name e.g. APP=Workaround; and hit OK and close the connection manager. Refresh your data, enter your password and Bob's yer Uncle.

Oct 19
2011

Getting Started with iCloud - Entitlement Issues

After battling through what seemed like a simple procedure to setup WalkJogRun for iCloud I figured I'd share the fix that worked for me.

The procedure as I understood it was as follows

  1. Enable iCloud for your fully qualified appId in the provisioning portal
  2. Regenerate and download your development provisioning profile and install it on your device and in Xcode
  3. Click my project in Xcode (4.2) and view the summary page for my target
  4. Scroll to the bottom and check the box to enable entitlements. It prepopulates the entitlement file and sets the two keys to match my app id
  5. Call
    NSString *containerId = @"com.mycompany.myapp";
    NSURL *iCloudURL = [[fileManager URLForUbiquityContainerIdentifier:containerId];
    NSLog(@"%@", [iCloudURL absoluteString]);
  6. Build and run on the device

The requested container identifier is not permitted by the client's com.apple.developer.ubiquity-container-identifiers entitlement

If I didn't see this error message the actual device would start to throw up in debug mode so I had to restart the phone to try again. I found an article that mentioned that you need the Team ID too for this approach so if you open the provisioning profile you'll find the team ID listed
<key>Entitlements</key>
    <dict>
        <key>application-identifier</key>
        <string>XXXXXXXXX.com.mycompany.myapp</string>
        <key>aps-environment</key>
        <string>development</string>
        <key>com.apple.developer.ubiquity-container-identifiers</key>
        <array>
            <string>YYYYYYYYY.*</string>
        </array>
You'll notice that the actual com.apple.developer.ubiquity-container-identifiers key is a wildcard so that any apps you develop can use iCloud as long as you use your Team-ID (the YYYYYYYY part). So the fix to my code is
NSString *containerId = @"YYYYYYY.com.mycompany.myapp";
NSURL *iCloudURL = [[fileManager URLForUbiquityContainerIdentifier:containerId];
NSLog(@"%@", [iCloudURL absoluteString]);

Build and run that and you should have success. However, I don't think I did, initially.

After some frustrating hours of trial and error I noticed the innocuous statement that specifying the containerId as nil will use the first one listed in your entitlements file. Huh. I tried it, built and run. Tada! NSLog shows the local fileURL my app can write to to send stuff to the cloud.

Now here's where it gets a little cloudy. Having seen that success I went back to my snippet code above with the YYYYYYY prefixed container ID and it seemed to work now. I'm not sure if I was missing a step when I first tried that but it's certainly working after the edit to pass nil instead.

Hope this helps!

Oct 17
2011

Cisco VPN on Lion Workaround Update

After a few months of booting into 32 bit mode, that got tiresome too. Shutting everything down, rebooting and then doing the work I needed before rebooting to go back to 64 bit again. Yawn. So two updates for you.

Faster switching

The first is that there is an easier way to switch between 32 and 64 bit mode without sitting holding keys down. You'll need to create a file called 32bit.sh in your home folder containing the two lines:
systemsetup -setkernelbootarchitecture i386
reboot
This simply tells your mac to set the boot architecture to 32 bit and then starts the reboot. To use this make it executable by typing
chmod +x 32bit.sh
in a terminal window when you're in your home directory. You'll want to add a corresponding 64bit.sh file too
systemsetup -setkernelbootarchitecture x86_64
reboot
and, again, make it executable.

To go to 32 bit mode, make sure you've saved everything you have open and then at the terminal type

./32bit.sh
If all has gone to plan you'll see it flash the commands on the screen and then your machine will reboot in 32 bit mode so you can start your VPN. Once you're done reverse the operation by running the 64bit.sh script.

No switches necessary

This one is a little more complicated but if you're looking for info about VPN fixes/workarounds I'm certain you'll keep up. You'll need the VPN remote desktop workaround I mentioned in the last post about VPNs. Once you have that working and have tested using the VPN while logged in remotely on RDC come back here for the next steps.

Okay, still with me. Next you'll need to install Cygwin on the Windows box and include the openSSH option from the list of packages. Lifehacker has a great setup guide for that.

Once you've got thru that install, test logging into the machine from your mac terminal window. You'll need the local IP address of the box running cygwin and your username. If your username has a space in it, at the command line you'll need to add a backslash before the space as an escape character e.g.

ssh My\ Username@192.168.1.110
If that works you're almost there.

The final step in connecting your mac to the VPN is to find out which ports on the VPN machines you're trying to hit. In my case, the client has MySQL and SQL Server databases so that's 3306 and 1433 respectively. To connect to SQL Server I created another shell script in my home directory on the mac called clientNameSQLServer.sh and made it executable. The contents

ssh -L 1433:xxx.xxx.xxx.xxx:1433 My\ Username@192.168.1.110
obviously replacing xxx.xxx.xxx.xxx with the IP Address for the remote VPN SQL Server, replacing "My\ Username" with your username and the local IP address with your own IP for the machine with Cygwin. This script forwards any requests on localhost:1433 to the remote VPN IP address you provided.

To fire it all up you'll remote desktop to the windows box. Start the VPN and reconnect to the remote desktop if it boots you. If you don't get back to the desktop, something wasn't right. As long as you see the remote desktop launch cygwin to make sure it's up and running. On your mac, go to the command line in terminal and execute the shell script

clientNameSQLServer.sh
. Now you can use your local Mac SQL Server client of choice, or even Microsoft Excel / Query to connect to the server. The only change to the way you would expect is that instead of setting the servername of the SQL server in your tool to the actual remote IP you use localhost:1433.

You're welcome.

More Entries