I made it into Google+…first impressions

Today I finally got into Google+ after trying to catch the invite windows. I’d been sitting on 2 invites since day one, but never managed to hit registration when it was unlocked. Today that all changed, and now I get to experience what other techies have been on about.

My first impressions:

  • UI – an emphatic +1. I’ve already changed my gmail theme to ‘Preview (dense)’ because I love the clean simplicity and minimalism; beyond that everything is beautiful and make excellent use of HTML5, CSS3, and all those other web goodies to provide a beautiful interface.
  • UX – again, an emphatic +1. Here, I would have to use the word ‘graceful’ to describe their use of HTML5, CSS3, et al to provide an exceptional user experience. Nothing is in your face about its activity; but the more you look, the more you see.
  • Circles – I like this implementation of what many are calling Facebook Groups. Other than the lovely way of implementing your groups, the UI provides for much better control and understanding of both your own Circles, as well as the Circles that you have been added to. +1 from me.
  • Hangouts – the hangouts interface is smooth. An intuitive, clean interface that doesn’t beg for lots of assistance. It just gets down and does what it’s meant to do. I’ll have to wait til I’m at a real computer (with a web-cam), but then I’m all up for some serious testing of this.
  • Chat – pretty much just the same as Gmail Chat from my first look. That said, gmail chat is a good IM client anyway, so all good.
  • Photos – again, the interface is well implemented. I’ll need to have a decent play over the next few days, but I can’t say I expect to be disappointed at all.

It’s pretty obvious that the word-of-mouth surrounding Google+ and the features it is offering forced Facebook’s hand and made them bring forward the “awesome announcement” that they were integrating Skype into their framework. However, it already makes them look like they’re playing catch-up to Google+; as XYZ said the other day: “they aren’t the first to integrate video calling with social, MySpace did it in 2007, but now it’s the right timing for the product”. Google+ seems to have opened the gate first, if only by a couple of days. Facebook is already having to justify why their implementation is better (“most people only want to use person-to-person”).

The converse is also true though, as it seems Google+ is already fast-forwarding their Beta schedule and allowing more and more invites to be cashed in. This is possibly in response to Facebook’s moves; or, it could just be a response to public demand and the quality performance of Google+ internally for Google. They would much rather offer a schedule of months, and deliver in days or weeks, than the other way around. This is afterall the Google who still had gmail in beta 5 years after launch, but had been fully open to the public for 2 and 1/2 years of that 5 years (Wikipedia).

I’m going to be having a dive into the features as much as possible this weekend, I can’t wait. Here’s a vid:

XKCD wins again

Mathematically annoying advertising

Things You Should Never Do [quoted]

The following is a directly quoted post from April 2000 by Joel Spolsky, the co-founder of Stack Overflow. I’ve quoted the post in it’s entirity as, while it is almost 11 years old, the concept discussed is still absolutely valid and is still overlooked and not understood by much of the development community. The original is here.

Things You Should Never Do, Part I

Netscape 6.0 is finally going into its first public beta. There never was a version 5.0. The last major release, version 4.0, was released almost three years ago. Three years is an awfully long time in the Internet world. During this time, Netscape sat by, helplessly, as their market share plummeted.

It’s a bit smarmy of me to criticize them for waiting so long between releases. They didn’t do it on purpose, now, did they?

Well, yes. They did. They did it by making the single worst strategic mistake that any software company can make:

They decided to rewrite the code from scratch.

Netscape wasn’t the first company to make this mistake. Borland made the same mistake when they bought Arago and tried to make it into dBase for Windows, a doomed project that took so long that Microsoft Access ate their lunch, then they made it again in rewriting Quattro Pro from scratch and astonishing people with how few features it had. Microsoft almost made the same mistake, trying to rewrite Word for Windows from scratch in a doomed project called Pyramid which was shut down, thrown away, and swept under the rug. Lucky for Microsoft, they had never stopped working on the old code base, so they had something to ship, making it merely a financial disaster, not a strategic one.

We’re programmers. Programmers are, in their hearts, architects, and the first thing they want to do when they get to a site is to bulldoze the place flat and build something grand. We’re not excited by incremental renovation: tinkering, improving, planting flower beds.

There’s a subtle reason that programmers always want to throw away the code and start over. The reason is that they think the old code is a mess. And here is the interesting observation: they are probably wrong. The reason that they think the old code is a mess is because of a cardinal, fundamental law of programming:

It’s harder to read code than to write it.

This is why code reuse is so hard. This is why everybody on your team has a different function they like to use for splitting strings into arrays of strings. They write their own function because it’s easier and more fun than figuring out how the old function works.

As a corollary of this axiom, you can ask almost any programmer today about the code they are working on. “It’s a big hairy mess,” they will tell you. “I’d like nothing better than to throw it out and start over.”

Why is it a mess?

“Well,” they say, “look at this function. It is two pages long! None of this stuff belongs in there! I don’t know what half of these API calls are for.”

Before Borland’s new spreadsheet for Windows shipped, Philippe Kahn, the colorful founder of Borland, was quoted a lot in the press bragging about how Quattro Pro would be much better than Microsoft Excel, because it was written from scratch. All new source code! As if source code rusted.

The idea that new code is better than old is patently absurd. Old code has been used. It has been tested. Lots of bugs have been found, and they’ve been fixed. There’s nothing wrong with it. It doesn’t acquire bugs just by sitting around on your hard drive. Au contraire, baby! Is software supposed to be like an old Dodge Dart, that rusts just sitting in the garage? Is software like a teddy bear that’s kind of gross if it’s not made out of all new material?

Back to that two page function. Yes, I know, it’s just a simple function to display a window, but it has grown little hairs and stuff on it and nobody knows why. Well, I’ll tell you why: those are bug fixes. One of them fixes that bug that Nancy had when she tried to install the thing on a computer that didn’t have Internet Explorer. Another one fixes that bug that occurs in low memory conditions. Another one fixes that bug that occurred when the file is on a floppy disk and the user yanks out the disk in the middle. That LoadLibrary call is ugly but it makes the code work on old versions of Windows 95.

Each of these bugs took weeks of real-world usage before they were found. The programmer might have spent a couple of days reproducing the bug in the lab and fixing it. If it’s like a lot of bugs, the fix might be one line of code, or it might even be a couple of characters, but a lot of work and time went into those two characters.

When you throw away code and start from scratch, you are throwing away all that knowledge. All those collected bug fixes. Years of programming work.

You are throwing away your market leadership. You are giving a gift of two or three years to your competitors, and believe me, that is a long time in software years.

You are putting yourself in an extremely dangerous position where you will be shipping an old version of the code for several years, completely unable to make any strategic changes or react to new features that the market demands, because you don’t have shippable code. You might as well just close for business for the duration.

You are wasting an outlandish amount of money writing code that already exists.

Is there an alternative? The consensus seems to be that the old Netscape code base was really bad. Well, it might have been bad, but, you know what? It worked pretty darn well on an awful lot of real world computer systems.

When programmers say that their code is a holy mess (as they always do), there are three kinds of things that are wrong with it.

First, there are architectural problems. The code is not factored correctly. The networking code is popping up its own dialog boxes from the middle of nowhere; this should have been handled in the UI code. These problems can be solved, one at a time, by carefully moving code, refactoring, changing interfaces. They can be done by one programmer working carefully and checking in his changes all at once, so that nobody else is disrupted. Even fairly major architectural changes can be done without throwing away the code. On the Juno project we spent several months rearchitecting at one point: just moving things around, cleaning them up, creating base classes that made sense, and creating sharp interfaces between the modules. But we did it carefully, with our existing code base, and we didn’t introduce new bugs or throw away working code.

A second reason programmers think that their code is a mess is that it is inefficient. The rendering code in Netscape was rumored to be slow. But this only affects a small part of the project, which you can optimize or even rewrite. You don’t have to rewrite the whole thing. When optimizing for speed, 1% of the work gets you 99% of the bang.

Third, the code may be doggone ugly. One project I worked on actually had a data type called a FuckedString. Another project had started out using the convention of starting member variables with an underscore, but later switched to the more standard “m_”. So half the functions started with “_” and half with “m_”, which looked ugly. Frankly, this is the kind of thing you solve in five minutes with a macro in Emacs, not by starting from scratch.

It’s important to remember that when you start from scratch there is absolutely no reason to believe that you are going to do a better job than you did the first time. First of all, you probably don’t even have the same programming team that worked on version one, so you don’t actually have “more experience”. You’re just going to make most of the old mistakes again, and introduce some new problems that weren’t in the original version.

The old mantra build one to throw away is dangerous when applied to large scale commercial applications. If you are writing code experimentally, you may want to rip up the function you wrote last week when you think of a better algorithm. That’s fine. You may want to refactor a class to make it easier to use. That’s fine, too. But throwing away the whole program is a dangerous folly, and if Netscape actually had some adult supervision with software industry experience, they might not have shot themselves in the foot so badly.

[original source here]

my iPad app round-up

So, I’ve had my iPad for over a month now, and I felt it was time to review the apps I have on it now. I figure a month is enough time to settle into my usage patterns and have discarded apps that just didn’t do it for me afterall.

1: Social Networking –

I don’t run one app for all my social networking, some people prefer to but I have found it better to have apps that focus on one thing, and do what they do do well. For Twitter, I was originally using Twitterific, and had just upgraded to the paid version the day before Twitter released their own app. Since then I have been devoted to the official Twitter app which is clean, intuitive, and just pretty much perfect in my book.

For Facebook, I am still floating between two apps; Friendly and the official Facebook iPhone app. Both are pretty good, Friendly is more aesthetically pleasing due to being designed for the iPad form-factor, while the official FB app seems a little more intuitive and “like” Facebook itself (as you would expect).

I’m also running FourSquare on my iPad, as I don’t have an iPhone (still!!).

2: Utilities / Lifestyle –

I have quite a few utilities set up on my iPad, for news I am running the fantastic NYTimes app, the TVNZ News app, and the NZ Herald app. I also use GeekNews to pull all my geeky tech blogs together into one streamlined place. The Mashable! app is great for a quick check up on what is trending or popping up online currently.
I am currently using PrinterShare for printing directly from the iPad on my home network. This will hopefully change when iOS4 is released for iPad (rumors indicate late November 2010 maybe).
I also have Google Earth, the IMDb app, and a great tracking app – Parcel – which allows you to just put in your tracking code allocated to the delivery you are expecting. Saves having to visit different websites and remember your tracking numbers for different companies. Some other little gems are:
Epicurious
Wikipanion
Evernote
– The WordPress app for blogging on the go
Shazam
Then for a bit of creative fun, I have GrooveMaker and Drums! GrooveMaker lets you mix tracks, and even create your own tracks on the fly. Drums! is just that, a complete drum set on your iPad – in fact, it’s actually three complete drum sets, as you can choose between Standard, Groove, and Acoustic kits. The sound is true to life, so go get it.

3: Web Dev –

A few free web-dev helpers tucked on the iPad too. I’ve got JsAnywhere and three great apps from Interactive Blasphemy. JavaScript Anywhere is a JavaScript tool which enables you to edit your JS script, adjust the CSS, and then view the results in an HTML page. You can email the results to yourself. From Interactive Blasphemy I have robots.txt, which is just that, a robots.txt generator; Password, which generates passwords of random characters of length and complexity specified; and RGB/HSB/Hex, which enables you to create that perfect shade for you web job, and also then suggests good matching and contrasting colors.

4: Games –

Yep, the main reason most people have an iPad. I am personally a big fan of the logic/strategy games. I’ll list them all, then comment on a few of them, with more in-depth reviews being added, along with links to the iTunes store, later on:
– iFighter – essentially the classic fighter game 1945 remade for the iPad
– Harbor Master
– FlightControl HD
– Canabalt
– Gravity Hook
– Angry Birds
– Angry Birds (Halloween Special)
– Cut the Rope
– Pocket Frogs
– Plants vs Zombies
– Fruit Ninja HD
– Steve Young Football
– Build-A-Lot 2
– Blue Block
– Crazy Traffic: Crashed XL
– Train Conductor 2: U.S.A.
– No, Human
– Trainyard
– UFO On Tape
– Railway
– Chicktionary
– NOM
– Fish Eat Fish
– Dismount
– GearedHD
– Air Hockey
– TicTacDojo
– Little Metal Ball
– Soosiz HD
– Physics HD
– Gravity HD
– Tilt to Live HD
– NinJump
– Red Bull RC
– Asymmetry
– 8Bit Rebellion (the Linkin Park game)

Surprisingly enough, I have found my usage of the iPad to be alot different than I planned for. I have found the games an easy way to take a 5 minute break when I need to, but have found that I actually now tend to jump on Twitter or a news site when I want a 5 minute chill out. I am still just working with iBooks as my book-reader and PDF-reader of choice. Primarily because I have no need of the flasher features of the other readers out there. Overall, I have to say that the iPad is proving itself to be very worthwhile as a tool; and I keep finding new ways for it to excel and prove it’s worth.

easy links to iTunes content

Just a quick post to highlight the funky little tool on the iTunes website for automajickally [sic] generating links to specific apps with the iTunes store. The appropriately named iTunes Link Maker is able to be targeted by Country, Media Type, or Genre/Category; as well as being able to be searched by name.

It has been out for a while, and is not guaranteed by Apple at all. In fact, they go so far as to state

The Link Maker tool is provided by Apple as an accommodation only. Apple assumes no responsibility for your use of any links, and makes no representation regarding their accuracy or performance.

amongst other parts of the disclaimer. But, hey, it’s easier than trying to figure it out and do it yourself. Right??

quick update – needing to get posting again….

I haven’t posted for a while, been off-line a bit, and doing a lot of reading and preparation for job hunting. It’s interesting times at the moment; there are jobs out there, but they don’t just leap out at you and chase you down. When I find the one, I’ll definitely be letting you all know.

I’ve moved to using Windows Live Writer now, as well as a couple of plug-ins to enable easier posting of code etc. Hopefully this gets me back to blogging a lot more regularly, and also posting some more tutorials and sample scripts. I’ve been working in PHP lots, and diving back into shell scripting (mainly in PowerShell – which I’m loving!!). Most people will balk there and scream GEEK!!! But, for those who understand, they will appreciate the joy I’m feeling (yes, joy is a relative term).

I’ll be pulling some stuff together over the next few days and get a full update and some new tutorials etc up mid-week.

internet domain suffixes

Below is a listing of all of the types of Internet domain suffixes or Top-Level Domains (TLD) and the associated locations of the domain and/or the type of domain. I keep looking them up, and figured I might as well put up a list of them all for reference.

# | A | B | C | D | E | F | G | H | I | J | K | L | M
N | O | P | Q | R | S | T | U | V | W | X | Y | Z

Domain Type / Location
A
.ac Educational network (same as .edu). British academic site.
.ad Andorra
.ae United Arab Emirates
.aero Air Transportation Industry
.af Afghanistan
.ag Antigua and Barbuda
.ai Anguilla
.al Albania
.am Armenia
.an Netherlands Antilles
.ao Angola
.aq Antarctica
.ar Argentina
.arpa ArpaNet sites
.as American Somoa
.at Austria
.au Australia
.aw Aruba
.ax Aland Islands – part of Finland
.az Azerbaijan
B
.ba Bosnia / Herzegovinia
.bb Barbados
.bd Bangladesh
.be Belgium
.bf Burkina Faso
.bg Bulgaria
.bh Bahrain
.bi Burundi
.biz United States Business site
.bj Benin
.bm Bermuda
.bn Brunei Darussalam
.bo Bolivia
.br Brazil
.bs Bahamas
.bt Bhutan
.bv Bouvet Island
.bw Botswana
.by Belarus / Byelorussia
.bz Belize
C
.ca Canada
.cc Cocos Islands – Keelings
.cf Central African Republic
.cg Congo
.ch Switzerland
.ci Ivory Coast / Cote DIvoire
.ck Cook Islands
.cl Chile
.cm Cameroon
.cn China
.co Colombia / Commercial networks, same as .com.
.com

United States Commercial web site.

.coop Business coops,organizations
.cr Costa Rica
.cs Former Czechoslovakia
.cu Cuba
.cv Cape Verde
.cx Christmas Island
.cy Cyprus
.cz Czech Republic
D
.de Germany
.dj Djibouti
.dk Denmark
.dm Dominica
.do Dominican Republic
.dz Algeria
E
.ec Ecuador
.edu United States Education site
.ee Estonia
.eg Egypt
.eh Western Sahara
.er Eritrea
.es Spain
.et Ethiopia
.eu European
F
.fi Finland
.firm Internet site for business and/or firm
.fj Fiji
.fk Falkland Islands / Malvinas
.fm Micronesia
.fo Faroe Islands
.fr France
.fx Metropolitan France
G
.ga Gabon
.gb Great Britain
.gd Grenada
.ge Georgia
.gf French Guiana
.gh Ghana
.gi Gibraltar
.gl Greenland
.gm Gambia
.gn Guinea
.gov United States Government site
.gp Guadeloupe
.gq Equatorial Guinea
.gr Greece
.gs South Georgia / South Sandwich Islands
.gt Guatemala
.gu Guam
.gw Guinea-Bissau
.gy Guyana
H
.hk Hong Kong
.hm Heard and McDonald Islands
.hn Honduras
.hr Croatia/Hrvatska
.ht Haiti
.hu Hungary
I
.id Indonesia
.ie Ireland
.il Israel
.in India
.info United States information site
.int International institute site
.io British Indian Ocean Territory
.iq Iraq
.ir Iran
.is Iceland
.it Italy
J
.je Jersey – Channel Islands a UK dependancy
.jm Jamaica
.jo Jordan
.jobs Job related sites.
.jp Japan
K
.ke Kenya
.kg Kyrgyzstan
.kh Cambodia
.ki Kiribati
.km Comoros
.kn Saint Kitts / Nevis
.kp North Korea
.kr South Korea
.kw Kuwait
.ky Cayman Islands
.kz Kazakhstan
L
.la Laos
.lb Lebanon
.lc Saint Lucia
.li Liechtenstein
.lk Sri Lanka
.lr Liberia
.ls Lesotho
.lt Lithuania
.lu Luxembourg
.lv Latvia
.ly Libya
M
.ma Morocco
.mc Monaco
.md Moldova
.mg Madagascar
.mh Marshall Islands
.mil United States Military site
.mk Macedonia
.ml Mali
.mm Myanmar
.mn Mongolia
.mo Macau
.mp Northern Mariana Islands
.mq Martinique
.mr Mauritania
.ms Montserrat
.mt Malta
.mu Mauritius
.museum Worldwide museums
.mv Maldives
.mw Malawi
.mx Mexico
.my Malaysia
.mz Mozambique
N
.na Namibia
.name Individuals, families
.nato NATO site
.nc New Caledonia
.ne Niger
.net United States Internet administrative site.
.nf Norfolk Island
.ng Nigeria
.ni Nicaragua
.nl Netherlands
.no Norway
.nom Personal site
.np Nepal
.nr Nauru
.nt Neutral Zone
.nu Niue
.nz New Zealand
O
.om Oman
.org United States and Britain Organization sites
P
.pa Panama
.pe Peru
.pf French Polynesia
.pg Papua New Guinea
.ph Philippines
.pk Pakistan
.pl Poland
.pm St. Pierre and Miquelon
.pn Pitcairn
.pr Puerto Rico
.pro United States Professional site
.pt Portugal
.pw Palau
.py Paraguay
Q
.qa Qatar
R
.re Reunion
.ro Romania
.ru Russian Federation
.rw Rwanda
S
.sa Saudi Arabia
.sb Solomon Islands
.sc Seychelles
.sd Sudan
.se Sweden
.sg Singapore
.sh Saint Helena
.si Slovenia
.sj Svalbard / Jan Mayen Islands
.sk Slovakia
.sl Sierra Leone
.sm San Marino
.sn Senegal
.so Somalia
.sr Suriname
.st Sao Torme and Principe
.store United States domain for retail business site
.su Former USSR
.sv El Salvador
.sy Syria
.sz Swaziland
T
.tc Turks and Caicos Islands
.td Chad
.tf French Southern Territory
.tg Togo
.th Thailand
.tj Tajikistan
.tk Tokelau
.tm Turkmenistan
.tn Tunisia
.to Tonga
.tp East Timor
.tr Turkey
.travel Travel related sites.
.tt Trinidad and Tobago
.tv Tuvalu
.tw Taiwan
.tz Tanzania
U
.ua Ukraine
.ug Uganda
.uk United Kingdom
.um United States minor outlying islands
.us United States
.uy Uruguay
V
.va Vatican City State
.vc Saint Vincent and the Grenadines
.ve Venezuela
.vg British Virgin Islands
.vi United States Virgin Islands
.vn Viet Nam
.vu Vanuatu
W
.web Internet site about the World Wide Web
.wf Wallis and Futuna Islands
.ws Samoa
X
  Currently none
Y
.ye Yemen
.yt Mayotte
.yu Yugoslavia
Z
.za South Africa
.zm Zambia
.zr Zaire
.zw Zimbabwe