Geek


2
Sep 09

How to get Started in Vancouver Tech

I’ve been meeting quite a few people who are new to Vancouver and are looking to get involved in the local Web and Tech scenes. There’s quite a bit going on, and Google is your friend, but if you want to save some time here are the best places to go, meet people and see what’s going on. There’s also a score for how nerdy or business-y (?) the event is on a scale of 1-10.

Do your research

Nerdy: 5
Business: 4

Find out what you’re interested and search for companies based in Vancouver that do what you love. If you’re enthusiastic people will make time for you. Ask someone out for coffee or a pint and just talk. Don’t try and get a job, just figure out what’s going on. Like any “scene” you’re likely to hear conflicting viewpoints. Keep an open mind. Look for and talk with local bloggers and tech reporters. Look for events happening in your area. If you’re interested in Open source projects, find out if the people who work on them are in the area.

Democamp Vancouver

Nerdy: 7
Business: 5

Like most unconferences, Democamp is a loosely organized evening event where the people that attend make up the conference. In this case you bring an idea, and the idea is your demo. You don’t have to present, and it’s a good way to meet people that are interested in starting something new, or are working a project already. Democamp doesn’t happen nearly as often as it should, so if you’re interested in helping out there, check out the site and get in touch.

Launch Party Vancouver

Nerdy: 4
Business: 8

Every few months local entrepreneurs who are launching their projects meet up to celebrate all their hard work. Walk around and talk with people and get to know the people behind these projects. Most of the time the executives are presenting but ask to chat with some of the developers if that’s more up your alley. This is usually a very social event where you’re bound to meet a lot of interesting people – just don’t be shy.

Bootup Labs

Nerdy: 8
Business: 6

Bootup Labs is a local startup incubator which helps companies go from “zero to fundable”. The offices are located at 375 Water St, in Gastown and house a rotating group of Vancouver based startups which are always looking for talented help. Bootup has an open door policy so if you’re new to the area you can generally just pop in, but I suggest getting in touch with them first to arrange a quick (<30 minute) chat. Everyone is really friendly, and it’s a good way to plug in, or at least get pointed in the right direction.  Bootup helps run a few of the events in town, so pay attention to their upcoming feed for things that are happening

Techvibes

Nerdy: 5
Business: 5

Techvibes is a tech community blog and business directory. It’s a really good way to get to know which businesses are in the area and what they do. They also publish a list of events happening in town that range from an Entrepreneurial to Developer focus.

VEF

Nerdy: 2
Business: 10

If you’re more into the business and entrepreneurial side of things, I suggest checking out Vancouver Enterprise Forum or VEF. VEF hosts events on a monthly basis and it’s a great way to connect with other like-minded individuals.

Developer Meetups

Nerdy: 10
Business: 3

There are plenty of developer meetups happening in town. The umbrella meetup for all of these is the VanDev network. Join that and you’re bound to meet quite a few people. The most popular is the Ruby/Merb/Rails meetup which has events on a monthly basis.

I hope that’s enough to get you started! Let me know if there’s anything else you want added to the list.


22
Apr 09

URL Shortener Statistics on Twitter

URL Shortening services have gotten a lot of attention because of Twitter. The reason is that most significant links on the internet are longer than 140 characters and that doesn’t leave you any room to actually say anything when you tweet. Twitter will shorten some URL’s for you using TinyURL, but what about all of the other services? What’s the state of the URL shortening service world on Twitter?

Of course, the best people to answer this question is Twitter themselves, but since they haven’t published anything, and I doubt they’re interested in spending time answering my almost academic question I decided to write a quick app to get the stats myself.

The Twitter API is gorgeous. I mean. It’s simple, easy to use, and it’s fast. I grabbed a list of all the popular URL shortening services from a few locations, cross-referenced them and came up with 36 “popular” services. The actual number of URL shorteners is pretty incredible. (Some of them even have long names like “shortna.me” WTF are you thinking?)

The process is simple – Search for the urls of the shortening services using the search API, then count how many hits you get. Repeat every 30 seconds or so. (There are other nuances – look at the code).  This sampling was done over a 3 hour period on Wednesday April 22nd between the hours of 8AM and 11AM Pacific.

Results

Twitter URL Shortening Statistics - April 22 2009

Twitter URL Shortening Statistics - April 22 2009

Issues

You can only return 100 search results at a time, which means if you see 100 results for your term, there are probably way more of them. The only way to get around this would be to search more frequently for that specific term. I tried doing that and was quickly throttled by Twitter. Suffice to say, TinyURL is still the dominant force here, but probably because of their Twitter integration. This really throws off the numbers. There’s a fine line between searching too often, and getting accurate results. Tests in the middle of the night showed that TinyURL had about 30% of the URL Shortening Service market on Twitter. I’m 99% positive that TinyURL numbers are way higher.

Things to do

Optimize the searching algorithm so it displays more accurate results.

Record the time, and see statistics over the course of hours, days, weeks. I can tell you off the top of my head that TinyURL usage is high all times of the day, where as bit.ly usage is pretty much a “waking hours” service, as most others.

Better Reporting

GitHub

The scripts are on GitHub. Go bananas. http://github.com/Trevoro/urihz/tree/master


5
Feb 09

Why Serverside Javascript Matters

Javascript is a popular scripting language that comes embedded in most browsers. It’s usually what’s responsible for making your browsing experience as rich as it is, and for this reason we tend to categorize it in the realm of client-side development. In fact, running javascript on the server is odd enough for the phrase ‘Server-side Javascript’ to have been coined in the first place, but it isn’t exactly a new idea. Livewire, Netscape’s Enterprise Server product included server-side javascript functionality in 1996. But it hasn’t really caught on. Writing server-side code in PHP, Ruby, Python and Perl, ASP.Net and Java has been the “way we do things” and javascript remained something you messed around with once you wanted to spoil your users with a  richer experience. Before I explain server-side Javascript adoption, we need one important piece of background information.

There are economic concepts that dictate how you use services and hosting on the internet.

Do tell.

Computing is really cheap. Think about all the email that Gmail handles in a day. It’s so cheap that advertising can pay for it. But the “Network is the computer” after all, so we have to think about what it takes to get that information in and our of these clusters of cheap computing, and that’s the rub. Amazon charges $0.17/gig to get your data out of EC2, which is equivalent to almost two hours of their cheapest computing instance. This is a good scenario if the task you send to your cheap compute cluster can be defined in a very small package, and yields a relatively small result but typical web services and applications don’t work this way. The point is: Its cheaper to move the computing than it is to move the data.

So what?

This all clicked for me when I messed around with Freebases development environment, “Acre”. Acre is great. It lets you create, edit, and host your applications through a browser. Not only had I been messing around with Acre, but I’d also been toying with the idea of using Freebase as a mechanism for validating and normalizing data. The problem is asking Freebase for a bunch of information on say, “every city on the planet” is pretty expensive. Not only do you incurr a network transfer cost, but you then have to process the information. Not exactly ideal. But what if I could pose a question to an application running at Freebase? What if, instead of pulling out all the information about every movie and creating your own Freebase-based IMDB, you could host it right next to the data source. You get all the benefits of transferring the ‘heavy stuff’ over the WAN, and the browser gets the good stuff, but only when it asks for it.

This is why server-side javascript is perfect

Hosting Ruby, PHP, Python, etc is kind of a pain in the ass. Well its easier than it used to be but it could be a lot better. If I had to choose something relatively lightweight to interface to my data-source and create that rich browsing experience, you’d probably pick Javascript. My initial impression is that depending on your data-source, scaling it would be easy, too. Running computing close (as in LAN close) to the data-set means a few things

1. You can create cheaper mashups

2. You can eliminate all the cruft from your data before it gets sent over the wire

3. You can create nifty applications and ask them short questions that yield short answers but require huge amounts of data to determine

ZOMG How do I start?

You’ll have to learn javascript, and as a hosting or service operator you’ll have to choose an application for running it server-side. There are a few options. Trusty Wikipedia has a lengthy list of Server-side Javascript implementations. I’d recommend checking out the following:

Rhino

Spidermonkey

V8

AppJet

Jaxer

-Trevor


21
Jul 08

Rogers DNS Hijacking – A Summary So Far

Over the last few weeks we’ve seen Rogers pull some incredible stunts. Between the iPhone, Data Plans, and Funny Teaser Campaigns, Rogers has managed to get quite a bit of pie on its face. Nothing trumps that however as much as the recent reports that Rogers is redirecting invalid domain names to their own search page with custom advertisements. There’s a lot of confusion about what this is and how it works so I thought I’d summarize some of it here so that we can clear it up.

Rogers is redirecting traffic from invalid domains to its own search page. This doesn’t involve deep packet inspection, it simply means they’ve configured their DNS servers so that if you mis-spell the domain name in your browsers address bar you’ll go to a different site. DNS is a service that all ISP’s will run, and for the non-technical folk the process goes a little something like this (and for the technical please disregard my brushing over of the issue)

Every computer on the internet has a number, from 1-4 billion or so. When you type an address into your address bar and hit ‘go’ your computer will say “Do I know where that is already?” and if it doesn’t, it will ask a different computer, or DNS (Domain Name Server) for the number of the computer you want to visit. Every single time you type an address into your browser or click on a link this is what happens. For more information on how DNS really works go here (beginner), here (intermediate) or here (youalreadyknow).

Now, what normally happens when you type an invalid or non-existant domain name into your browser, the DNS server will return a special code that says ‘Theres no answer for this name’, and you just get a notification in your browser. Type in “http://example.co” using Firefox and you’ll get something that looks like this:

This is how DNS works, and how the browser is setup to respond to the message that says ‘Theres no answer’. Clear as mud? Lets move on.

The DNS servers that Rogers operates are doing something special. When your computer asks where ‘example.co’ is, the server won’t respond back saying ‘Theres no answer’, but will actually give you the answer containing the name of a server that belongs to Rogers. It will also do something speecial – It will build a page for you that contains links based on keywords of your domain. So if you typed in ‘search.example.co’ while using a Rogers DNS server, you’ll get a page that looks like this:

This does several things. For one it breaks the way DNS is supposed to work (and coincidentally the way some applications work), and it also violates some concepts regarding Network Neutrality. It represents a way for ISP’s to squeeze out as much value from their end-users as possible, and as John over at Blamcast writes it puts ads on invalid subdomains as well. This means that if you type in maill.google.com it will print up an ad on Rogers servers using Yahoo’s search feature.

I talked to some iPhone users and while they use Rogers, this doesn’t seem to be taking place on the 3G network’s DNS servers. I dont have those IP addresses so I can’t test it out myself. (Does anyone have that info kicking around?)

A couple companies also do this. A “feature” in IE8 is address-bar searching which is effectively the same thing. When you type an invalid domain into the address bar, it will direct you to Microsoft’s search page with results that suggest what you may have meant – and an ad or two of course.

Verizon also did this a few years ago with something called Site Finder but it ended rather quickly due to criticism.

Update: Parkerjon writes with information about an alternative Rogers DNS server, Here is the information

altdns.rnc.net.cable.rogers.com
64.71.255.202


google.load("language", "1"); var curstate = 0; var hasloaded = 0; function bnc_show_translated() { if (hasloaded == 0) { bnc_lang_callback(); hasloaded = 1; } for (i = 0; i < 0; i++) { var elem = $("bnc_original_" + i); if (elem) { if (curstate) { elem.show(); } else { elem.hide(); } } } for (i = 0; i < 0; i++) { var elem = $("bnc_trans_" + i); if (elem) { if (curstate) { elem.hide(); } else { elem.show(); } } } if (curstate) { $("bnc_trans_state1").show(); $("bnc_trans_state2").hide(); curstate = 0; } else { $("bnc_trans_state1").hide(); $("bnc_trans_state2").show(); curstate = 1; } } function bnc_detect_div(div_id) { var text = document.getElementById(div_id); if (text) { text = text.innerHTML; if (text.length > 0) { google.language.detect(text, function(result) { if (!result.error) { if (result.language != "en") { if (result.confidence > 0.25) { $("bnc_translating").show(); bnc_xlate_div(result.language, div_id, "en"); } } } } ); } } } function bnc_xlate_div(src_lang,div_id,o_lang) { var text = document.getElementById(div_id); if (text) { text = text.innerHTML; google.language.translate(text, src_lang, o_lang, function(result) { var translated = document.getElementById(div_id); if (result.translation) { translated.innerHTML = result.translation; } }); } } function bnc_lang_callback() { } function bnc_startup() { bnc_xlate_div("en", "bnc_translate_info", "en"); bnc_xlate_div("en", "bnc_translate_info2", "en"); } google.setOnLoadCallback(bnc_startup);