BusTimes.ca

2012

Find the time of your next bus, fast! – BusTimes.ca

BusTimes.ca is a Web-based application for mobile devices, designed to help answer the question of “When is the next bus?”

Read the rest of this entry »

Canadian Population Pyramids

 

2012

Canadian Population Pyramids is a Web-based visualization that allows users to explore the 2011 Canadian Census, Age-Sex data set. Read the rest of this entry »

Victoria Rental Map / Breeze

2012

Victoria Rental Map is a Web-based visualization that shows apartments for rent in Victoria, in relation to bus routes to the University of Victoria. Read the rest of this entry »

Why I won’t be getting a Lumia 900

The Nokia Lumia 900 is a great looking phone, running what I believe to be a great operating system. It was named “Best of CES” by CNET. It is powered by the latest LTE technology. But I won’t be getting it. If you’re in Canada, I recommend you don’t either.

Not that it’s not a great phone. On paper, the phone is actually pretty amazing, and I’d be happy to have one. But instead of being an example of what is right in the Windows Phone, it has become a symbol for what is wrong with telecommunications in Canada.

Before I get into all of that, let me step back a bit, and catch you up to this point. I’ve been an iPhone user for years. I ordered my first iPhone, the iPhone 3G, the first week that it became available in Canada. If I recall correctly, it was actually on the day after it was released (I didn’t get it the first day because I was negotiating with Rogers for a better plan). I was really happy with my iPhone 3G, up until iOS 4.

Like many 3G owners, as soon as I installed iOS 4, the whole experience went sideways. Things that were really responsive before, and could be completed quickly, were suddenly taking 20 seconds to respond, to keyboard press. This included things like Google Maps, Email, and many others.

I quickly moved up to the iPhone 4, and these problems quickly went away. But something didn’t feel right. But I went ahead using my phone as if nothing was wrong.

This year, while talking with one of the post-docs in my research group, I had the sudden epiphany. I was no longer in love with my phone. Somewhere along the way, we had drifted apart. The shiny button like icons that had once thrilled me, no longer brought me joy. Suddenly I realized, I had regressed to my childhood. I had once loved my phone so much, now every time I looked at it, all I could think about was Windows 3.1, with its folders and icons.

iOS had stagnated. The once innovative young company that was happy to break the rules, no longer tried, because the rules were made by it. Instead of releasing revolutionary new systems that would change their users lives, they were happy to release evolutionary new features, that would improve them, slightly, at a price.

I tried everything. I used all of the iOS 5 betas, hoping that I could rekindle the flame, but with big features like Notification center, and iMessage, it was hopeless. I new what had to be done.

After talking with my colleagues, and sleeping on it, many nights, I knew in my heart I needed something new. Android wouldn’t do it. Android at this point was essentially an open copy of iOS. The only one out there that seemed to be innovating was Microsoft.

Windows Phone 7 from Microsoft was a big rethink of what mobile should be. Instead of small icons with little number notifications, it used tiles, that could actually show more meaningful information. I knew that this was something I would have to try. It was very different of course, so with such a big change, a big risk would be involved. The best way to know for sure would be to try it. But nobody I knew had it. Well, not nobody, but no one near by. I had a few friends that had them, but none where I could really get my hands on it.

This would be something that people would have to get their hands on I thought to myself. If I had one, and liked it, I knew I would convert many people, but I’d have to get one first.

As a side note here, I like to create things. This is important to note at this point because as a friend of mine pointed out, there was a way I could get a Windows Phone for free. Well, not exactly free, but while doing something I loved doing anyway, creating things.

Microsoft knew that one of the biggest weaknesses in its platform was the lack of apps. Apple had millions, and the Windows Phone Marketplace, well, not so much (don’t worry though, all the big ones are there).

To entice developers to develop for the Windows Phone, they started a program to give them incentives. They called it the Developer Movement (Canada only). For each of your first two apps you made, you’d get a reward. As pointed out by a friend of mine, there, next to app number two, was my new phone.

So I started learning how to develop for Windows Phone. I hadn’t worked with C# in a while, but I was eager to learn again. From signing up for the program, learning the frameworks, to finishing two apps, all done in under 2 months. (If you’re interested, you can check out my apps at www.laudable.net).

So now you’re pretty much caught up. My second app was accepted April 6th (Good Friday. I was surprised to see my app get approved on a holiday). So now I can choose my reward. A brand new Windows phone. Or a $500 American Express gift card.

I knew, I threw that second possibility in there kind of late. The Windows Phone that the program had up for grabs was a Lumia 800, but one of my friends pointed out another possibility. The Lumia 800 was great, but I could take the gift card of $500, and buy the brand new Lumia 900. The 900 had a few features the 800 didn’t. Front facing camera. Access to the brand new, high speed LTE network. The review were pretty awesome. These all sounded very cool, but could I get it for $500? Apparently, yes I could. The word was, it would be available for $450, no contract.

Well, at least in the States it would be $450. But this is the no contract price. With a Canadian dollar essentially floating on parity with the American and no tariffs on cellphones, there would be little reason it shouldn’t be the same, right?

There is only one company in Canada that will be selling the Nokia Lumia 900, Rogers Communications. Rogers is one of, if not the largest, Wireless communications company in Canada. It has one of the largest numbers of subscribers in the market, and it knows how to use that to it’s advantage, and it does.

But the prices got leaked. No big surprise, the largest wireless company in Canada was not trying to compete with it’s American counterpart. Where AT&T was offering the Lumia 900 for $99 on a Two year contract and $450 with no commitment, Rogers would be offering the same device for $99 on a Three year contract, or $529.99. Why the higher price? Because they can, who else are you going to buy from.

So where does that leave me? Well, I had a decision to make.

I could pony up the extra cash ($29.99 extra for the phone + $63.60 in taxes, and that’s still not unlocked)…

Or I could just take the Lumia 800 from the Developer Movement, not have to deal with the extra hassle, and make a small stand against the greed in the Canadian wireless system.

I think I know which way I’ll be going.

Fixed: ExecJS RuntimeError and FATAL ERROR: v8::Context::New() when deploying Rails to Shared Hosting

I’ve recently been working on setting up a rails app for a site I’m building for one of my side projects.  While I’ve mostly been working on this in my spare time, I decided that it would be important, to one day be able to deploy it to a larger audience (like friends and family). After trying to get rails set up on my old hosting, and being told that Rails 3 wasn’t supported. I recently moved to Vexxhost. Two things enticed me: 1) they’re Canadian; 2) Their hosting is bloody cheap.

So after moving my PHP sites over, I got to work on deploying my currently simple rails app.  And that’s when I hit a problem.

The Problem

ExecJS::RuntimeError in Home#index

Showing /home/jrstarke/apps/___/releases/20120128224905/app/views/layouts/application.html.erb where line #6 raised:

FATAL ERROR: v8::Context::New() V8 is no longer usable (in /home/jrstarke/apps/___/releases/20120128224905/app/assets/javascripts/charities.js.coffee)

Now if you’re finding yourself  in a similar situation, Stop. Take a breath. You’re not very far.

The reason you are finding this is because Rails is clever. The .erb and .js.coffee files in application are compiled, compressed, and this all happens dynamically. They call this the ‘Asset Pipeline’.

The problem is that if you’re shared hosting is anything like Vexxhost (and I imagine most that use cpanel are), their servers in their shared hosting are based on efficiency.  This compiling of assets dynamically takes time and resources, and really, once you’d deployed it to the server, they don’t usually change much (with the exception of a new version, but then that won’t change much either until the next version).

The Solution

It turns out that the solution isn’t all that hard, in fact, most of it I found through a great article on the Ruby on Rails site about The Asset Pipeline – In Production Environments.

The trick is that you essentially need to turn off the asset pipeline. During the dynamic compilation on the fly of assets into a more static compilation. This will still compile your multiple stylesheets and javascript into single files though.

Without further ado, to the solution.

First you need to go into your config/application.rb and disable the application pipeline. You will look for the following line:

config.assets.enabled = true

and turn it to false

config.assets.enabled = false

Update (thanks Hien)If that doesn’t solve it:  go to your Gemfile and comment out the following 3 lines:

gem 'sass-rails', " ~> 3.1.1"
gem 'coffee-rails', "~> 3.1.1"
gem 'uglifier'

These are all the changes we need to make, but before we can deploy the application, we need to compile the assets, ourselves. This is where you will use the following line.

bundle exec rake assets:precompile

At this point use whatever tool you normally use to deploy your app (in my case, Capistrano). If you’re using Capistrano, don’t forget to commit the new assets that would have just been created in your public/assets folder.

Next you’ll need to log into your cpanel, or whatever actually controls your app, stop and restart it. Even if your deploy tool (like Capistrano) just said it restarted your app, don’t believe it, just restart it. This part caught me for a few hours trying to fix this bug. Even though Capistrano said it restarted the app, it still seemed to hold onto the old gems (sass and coffee) until I actually restarted.

With any luck, try your app now, and if your system is anything like mine, it will have worked.

MacBook Pro unable to connect to internet after waking from sleep

The Problem

I recently I’ve been having some problems with my MacBook Pro.  At first, I would seem to get disconnected from the internet randomly.  After a few weeks, I finally figured out what the pattern was to the problem.

One morning sat down on the couch, opened my MacBook, and as was becoming normal, I was unable to connect to the internet. The AirPort icon on the menu bar was fully black (meaning that the signal was good).

So I went into the browser and tried to to the router address.  To my surprise, I could fully connect to router. I mean fully. I could log in. I could change the settings. I could ping different websites. It all worked flawlessly. But as soon as I went back to my browser and attempted to connect to a website, any browser, it would complain that I wasn’t connected to the internet.

I would turn off the Wi-Fi a few times, and eventually it would connect fully. So then an idea came to me: Maybe it was related to the fact that I just woke it from sleep. I thought back. Every time I could remember, I had just opened the computer, and it would have difficulty connecting.

So I tried it. I made sure I could access different websites. All signs were a go. Then I closed the lid, and waited for the status light to start flashing. After it did, I would wait a few seconds, and then open the lid. I logged in, opened Chrome, and tried gmail. Gmail is currently unavailable it would tell me. So I opened Safari, and tried again. Same story. After going to the AirPort icon turning it off and on a few times, it came back. I decided to try it again. Sure enough same story. So I tried it a few more times.

After having successfully reproduced this exact approach 6 times, I decided it was time to call Apple. I talked to a rep one day, who walked me through a few steps, that failed to get any results, and before we could go through everything, I had to leave for a meeting. I called back a few days later, and got a Wonderful rep. named Ryan. After 17 minutes on the phone, my problem was solved. I was ecstatic.

The Solution

So the solution to the problem was actually pretty simple. I post it here, so that it might help others (or me if the problem recurs sometime). Remember to back up before hand, as it is possible that you might lose something.

I would also recommend storing your Wi-Fi password on your computer (especially if your password is as complex as mine is).

Here’s what worked for me:

  1. Open Finder.
  2. From the Menu at the top, choose ‘Go’ -> ‘Computer’.
  3. Open your hard drive (probably called ‘Macintosh HD’).
  4. Open the ‘Library’ folder.
  5. Open the ‘Preferences’ folder.
  6. Locate the ‘SystemConfiguration’ folder (likely at the bottom).
  7. Drag this folder to your desktop (as far as I can tell, this is to back it up incase something goes wrong)
  8. Once the copy is complete, drag the original to the trash.
  9. In Finder, open Applications (If you don’t have it on the sideback, use ‘Go’ -> ‘Applications’).
  10. Open the ‘Utilities’ folder.
  11. Open ‘Keychain Access’.
  12. Select ‘login’ from the list of Keychains.
  13. In the list to the right, locate an object with the name of your wireless network.
  14. Select it and press ‘delete’ on your keyboard.
  15. Select ‘System’ from the list of Keychains.
  16. Repeat steps 13 and 14 above.
  17. Restart your MacBook.
  18. Once your computer has restarted, connect to your wireless network.

With any luck your computer will now no longer have issues with your wireless network. This worked perfectly with my D-Link DIR-655 router, on which I could reproduce the wireless network issues flawlessly. Since I performed the steps above, my wireless connection has worked flawlessly.

Update: If this has worked successfully for you, you can go ahead and delete the SystemConfiguration folder that you copied to your desktop. It was designed as a backup, and is no longer needed.

Best software for On-line Communities?

I’m Looking for advice as to what the best software is for creating online communities.

I’m currently trying to set up a Graduate Students’ Association in my Computer Science department at the University of Victoria.

After talking to a number of Graduate students in my department about what they think would be useful to them, I received a number of great suggestions. Based on the suggestions, I came up with 3 features that I think would be useful:

  • A Blog: Which will allow the Grad. Association to keep grad students informed about important upcoming events.
  • A Forum or discussion board: Will allow grad. students to discuss whatever they feel is important to them or their work.
  • A Wiki: This will allow grad. students to easily create useful resources for other grad students.

There are many possible choices, but it all seems to come down to trade-offs.

As A Service or Host your own

There are two major options for hosting the community. You can either choose to use an As a Service model, where someone else manages the infrastructure, or the Host your own, where you take the software and run it on an infrastructure you control.

The obvious trade off here is Control for maintenance and cost. By going with an as a service, you will decrease costs, and maintenance, but you also decrease your control. By hosting your own, you increase the three.

In the maintenance category, I would like to reduce as much maintenance as possible, as this will likely be run by busy grad students. At the same time though, if we lose all control, we are completely at the liberty of the service to decide what we can do, and how long we can keep it up.

Separate Services or an All-in-one

Again, it is possible that we can use a number of different systems (such as a blog system, a forum and a wiki), or we can find a system that does all three.

In this case we have a trade off between consistency and maintenance versus precision. Of course, if you use 3 systems, you have to deal with maintaining 3 systems, and if you have 3 systems, it is unlikely that the three systems can be consistent.

In the precision category though, any one system will likely be good at a small number of features, and will be less good a others. So by going three systems, they’ll likely be better at the particular thing they do.

For this, I’d like to make the ease of use as easy as possible. If it is really hard for the users to go from one aspect to the other, like the discusion forum to the wiki or the blog, they are less likely to do it, unless it is absolutely necessary. If it’s not possible to link to the other systems consistently, this will be particularly hard.

Community Advice

I’ve use WordPress for blogs before, and they work pretty well. I’ve also considered CMS systems like TikiWiki, but it appears to be particularly buggy. I’ve also used Drupal, and it’s particularly bad for maintenance (which makes me die a little inside).

So this is where I look for advice from the community. What software can you recommend?

How to collect a Network Log for Google Chrome

Are you having some weird networking problems and want to report a bug to Google Chrome? The most helpful thing you can do to speed up the process is get a network log so that the Chromium team can have a better chance at diagnosing the problem.

In this tutorial, we will walk you through how to collect a Chrome Net-Internals log, and a WireShark Capture.

Pre-requisites:

What is Wireshark?

Wireshark is a tool for collecting network traffic.  This will allow the Chrome team to get a better idea of what might be causing the network issues.

Reduce Background Noise

Before attempting to make a network log, it is important to try to reduce the background noise.  Normally our computers have a number of programs running in the background, many of which are connecting to external sources.  To give yourself the best chance for success, turn off all unnecessary programs, for the duration of the log.  After you finish, feel free to turn everything back on.

Collecting the Logs

To collect your network logs, perform the following steps:

  1. Close Google Chrome and all it’s windows
  2. Restart Google Chrome (if it isn’t already open)
  3. Open the Net-internals page in a new window or tab (make sure to leave this open) using the following address:
    about:net-internals
  4. Open Wireshark
    1. From the Capture menu, select Interfaces
    2. Find the Description describing your network interface (It will likely have the growing number next to it). Press the Start button to the right of this connection
  5. Return to Google Chrome
  6. Open a new tab or window and perform whatever operation you want to log (For example, go to gmail.com if you want to demonstrate a slow loading behaviour). Continue until you feel you have a sufficient sample (in the case that it never completes)
  7. Open the net-internals page you left open.
    1. Under Dump data press the Dump to file button
    2. This log will be downloaded to your downloads folder
  8. Go to Wireshark
    1. From the Capture menu, select Stop
    2. From the File menu, select Save As…
    3. Enter a descriptive File name (for example ‘gmail-capture’) and for convenience, save it to a location you will remember (such as “My Documents”)

You will now have both a Google Chrome net-internals log, and a wireshark log. Make sure to keep track of where you saved them, and when appropriate, attach them to the bug report.

If you have any questions about this tutorial, please let me know.

Are Google’s Services Running Slow in Chrome? Try Disabling Spdy

Update: After further testing, the issue seems to be with the NSS-SSL library, rather than SPDY, however the steps below will still likely resolve your speed issues.

Update #2: I am no longer having this issue. It appears to be some odd interplay between the NSS-SSL protocol in Chrome/Firefox and the Traffic shaper at my University, that has since been reconfigured. This means that it is now more important than ever that if you’re experiencing this issue, to report it to the Google Chrome team.

Are you trying to connect to your Gmail, and it seems to take forever to connect? What about Google Docs? Google Plus? All of the above? It might not be Chrome that is the problem, but actually Google’s SPDY protocol behind the scenes.

So what is SPDY? It is a protocol that Google uses, where it keeps a single persistent connection to Google for all of your Google Accounts information. This is utilized by a number of Google Services, including Gmail, Google Docs, and most recently Google Plus. When this is working properly, it allows Google to do what Google does best: Speeding up the web. However, when it fails, it will bring down your Google world, in a thunder of Loading icons.

It it Google Chrome?

The most important first step is it make sure that the problem is actually Google Chrome. To do this, try a different web browser, such as Internet Explorer if you’re on Windows, or Safari if you’re on a Mac.

If you tried a different web browser and the problem still happens, then it is likely due to a different problem, such as a slow internet connection. If however tried the same thing in a different web browser, and it worked fine, then it is probably Google Chrome.

Google knows about this issue (I know, because helped provide information for one of the bug reports), but so far they haven’t narrowed it down.

Collect a log

If you are finding that you have a problem like this, then it might be useful to provide some details to the Chrome team so that they can hopefully make it better.  At this stage, this is optional, but highly encouraged.  This will be your best bet at getting any Google Chrome issues resolved though in the long run.  If you are willing to collect a log, you can do so by following my tutorial How to collect a Network Log for Google Chrome.

The Fix

Disclaimer: This fix is only temporary, and your best bet is to comment on the open Google Chrome Issue for this phenomena.

The good news is that there is a solution you can use for the problem (although it is temporary, as I will cover after). This wasn’t discovered by me, but rather one of my colleagues (Christoph Treude). Essentially what you have to do is disable spdy and Chrome’s enhanced SSL, which can be done using the following steps:

Windows

  • Right click on the short-cut you’re using to start Chrome
  • Select Properties
  • Modify Target from
    • ...\chrome.exe"

      into

    • ...\chrome.exe" --use-spdy=off --use-system-ssl

      (note: the command line arguments have to go after the quotation marks)

  • Click Apply
  • Close all Chrome windows
  • Restart Chrome

Mac

  • Open the terminal (In your Applications -> Utilities folder)
  • Type into terminal to change to Chrome’s Directory using:
    cd /Applications/Google\ Chrome.app/Contents/MacOS
  • Rename Google Chrome to Chrome in the terminal:
    mv Google\ Chrome Chrome
  • Copy the following 3 lines for the contents of our execution script:
    #!/bin/sh
    # This will execute your Google Chrome with SPDY disabled, and set it to use your System SSL
    /Applications/Google\ Chrome.app/Contents/MacOS/Chrome --use-spdy=off --use-system-ssl
  • Type the following into the Terminal to make a file from what you just copied:
    pbpaste > Google\ Chrome
  • Type the following into the terminal to it so our new Google Chrome can run:
    chmod +x Google\ Chrome
  • Close Google Chrome using the Apple menu, or Command-Q:
  • Restart Google Chrome

If you had this problem and this solution worked for you, I would recommend you add your voice to the discussion on the bug, as during my last correspondence, they suggested that this might be a problem localized to my network (which it might, but I suspect it isn’t). This solution is only temporary, as if you end up creating a new shortcut somewhere, or you update Google Chrome, you will likely have to redo the fix, or the problem may come back.

Collect a Log (If you didn’t above)

If you found this solution worked for you, but you didn’t collect a log above, perhaps now would be a good time to do so.  However, first we will have to disable the fix above (as the problem will not exhibit itself while the fix is in place). Don’t worry, once you have your log, you can easily turn it back on using the steps above.

Disable fix on Windows

  • Right click on the short-cut you’re using to start Chrome
  • Select Properties
  • Modify Target from
    • ...\chrome.exe" --use-spdy=off --use-system-ssl

      into

    • ...\chrome.exe"
  • Click Apply
  • Close all Chrome windows
  • Restart Chrome

Disable Fix on Mac

  • Open the terminal (In your Applications -> Utilities folder)
  • Type into terminal to change to Chrome’s Directory using:
    cd /Applications/Google\ Chrome.app/Contents/MacOS
  • Rename Chrome back to Google Chrome in the terminal:
    mv Chrome Google\ Chrome
  • Close Google Chrome using the Apple menu, or Command-Q:
  • Restart Google Chrome

Collecting the Log on Both

So you’ve decided to help out? I’m glad, this will increase both of our chances at having this resolved.  As I mentioned above, you can collect your Network Log by by following my tutorial How to collect a Network Log for Google Chrome.

Submit to the Issue

If you found that this worked for you, you’re not alone, but unfortunately, as I mentioned above, this solution is only temporary, and you will likely need to redo it the next time you update Google Chrome, or change your shortcuts.  So perhaps now would be a good time to help Google Chrome find a long term solution.   There is already an open issue for Google Chrome about this phenomena, and you can easily submit your information to that issue.  If you need help doing so, let me know, but the Network Logs mentioned above would be highly beneficial to this process.

Could this be better?

So what do I think would be a better solution? For the most part, the average user doesn’t even know what Google Chrome is doing behind the scenes.

The solution above would work, but it isn’t exactly, user friendly. I suggested that in a case like this, perhaps after a few seconds of attempting to connect with SPDY (Google themselves have suggested that users spend less time at slow pages), and not getting any data (which Will Chan said was the case in my case), maybe it would be a good opportunity to say to the user that it’s failing to connect with one method, and to attempt connecting with another.

In this case, the system could try something like the solution above does, disable spdy and ssl, and try then. Sure it’s not a perfect solution, but unless you have to do something explicitly in Chrome (which few people do), this would probably stop you from Switching to an alternative browser.

In search of a New Side Project

So last weekend, I wrote on Google Plus about how I was looking for a new side project. Although I still haven’t decided on one, I did decide that as I find one, it might be fun to document the journey and the lessons learned.

Lesson one: Finding a side project is hard.

You always want to have something that is going to be meaningful, and perhaps even help people (it’s always easy to minimally do something that helps yourself, until you actively try to do this, then it’s next to impossible to notice any problems you are actually finding.

What I’ve figured out so far:

  • Probably something’s technology based.
    • It’s something I’m skilled at, so I might as well utilize that right?
  • Not necessarily software engineering based.
  • I’d like to do something that can help someone.
  • Having kids does not apply. I just don’t feel like I’m ready for kids yet.
  • I would be eager to incorporate some new technologies, if they apply, just for the experience:
    • iOS
    • HTML5
    • Windows Phone
    • Android
  • Although I enjoy the odd game, I am not a game designer, and would prefer something that helps with productivity, although I am open to suggestions.
  • I have both Windows and Mac machines at my disposal, as well as an iPhone and iPad.
  • Money is a bonus, not the goal.
    • I’ve run a small tech support business before. The money was decent, but it was rarely rewarding.
    • Previous side projects that I enjoyed were creating websites, and web based tools (like TweetSeeker) although I never really made any money off them. TweetSeeker was a work in progress related to a research project that got shelved. Since then, as no one else seems to use it, I just can’t get motivated to advance it.
  • This is to be thought of as a 20% time project (mostly Saturdays, or slow Sundays)

So if anyone else has some ideas, or questions that might help me narrow it down, I’d love the feedback. Comments, or emails are greatly appreciated.

As I mentioned before, I’ll write about the side project as it unfolds, and I’ll tag it as “Side Project” for easy finding.

Older posts «