Friday, September 03, 2010

Moving to Tumblr

The blogger system that this runs on has been driving me crazy, so I've up and moved!

You can reach my new blog at tumblr now.


Monday, March 08, 2010

Billing

I mentioned in my previous post that the billing project is making progress and that we are clearing some hurdles. It's interesting because right now it's both lots of coding and lots of (re)design work. Our initial attempt at the new billing platform ended up using the wrong solution (or perhaps I should say, we used the solution incorrectly). For our database layer, we chose to use Rose::DB. Unfortunately, both our inexperience with Rose, and our quest (yes, a quest) to also use Moose at the same time ended up causing a far greater increase in complexity than anyone had expected, and a significant impact on performance.

Recently we started replacing that database layer with our own thin layer built on top of a query generator (SQL::Abstract). It's going much easier. It's made more of the platform transparent, and makes it easier to both see the design, and recognize other design possibilities.

Recently I've been (re)reading Robert Martin's book Clean Code (I'll write a review of it once I am done). I don't agree with everything in the book, but it's after having to really think about what he's saying, and comparing it to what we're trying to accomplish at work.

Interestingly, something I came across in it really helped pull together a design idea/problem we're facing - how to keep a clean separation between our data access layers and our business logic. Fortunately I came across the chapter that includes a brief discussion of the DECORATOR pattern, which after some thought and a few scribbled diagrams, and some further reading on the web, has become the leading candidate for solving this separation problem. (For the curious, we now want to wrap our business layer with a Data Access Object, which in turn may end up being wrapped within a caching layer). The wikipedia page I linked to above has a reasonable explanation of the design pattern. Personally I found the description within Head First Design Patterns to be a bit more practical for my tastes.

Readings


Inviting Disaster is the book that describes what engineers and software developers rarely openly admit :-).

The book reviews various failures/disasters caused by what initially might be thought of as equipment failure, but quickly becomes a view on how poor training, communication, and an outright ignorance of potential problems leads to disasters that could have been avoided. It's amazing how many of the systems people design and spend enormous amounts of money to produce are quickly left to people with little or no training, changes made that are undocumented, and a habit of people believing that since something didn't fail the last time it was used, it won't fail the next time. It's more frightening when you realize how much of the software industry makes the same mistakes, but really does seem to accept the high failure rate.

Iron Heart was a quick read, but almost morbidly fascinating. Brian Boyle was a high school swim athlete just getting ready for college when he was struck by a dump truck while driving. The fact that he lived considering the state he was in is impressive - the ER doctors basically expected him to die, then they expected him to never walk again. His heart was pushed over to the middle of his chest cavity, several organs had to be removed. His heart stopped several times. He was put in an induced coma. Two and a half years later he successfully completed his first IronMan competition. Read the book to fill in the blanks :-). Worth reading.

Computing
It's been many years since my last computer upgrade (yes really!). Now, as you can imagine (are you imagining), someone who is in front of a computer most waking hours is going to be picky :-). I wanted something for gaming, photoshop, programming, video encoding, and anything else I may throw at it.


Here's the spec for those hardware geeks among you:
Intel Core i7 920
Noctua NH-U12P heat sink
ASUS P6X58D Premium motherboard
12GB Corsair XMS3 Dominator RAM
Kingston 128GB SSD
2x Seagate 1.5TB 7200.11 SATA-300 drives
Vantec 59-in-1 card reader
XFX Radeon HD 5870
Corsair 1KW power supply
Coolermaster Haf922 midtower
Windows 7 64-bit

And yes, it plays games sooooooooo smoooooooothly. Battlefield: Bad Company 2 now runs like butta!

Chess
Uh-oh, there's that addiction again. I don't have the time to really study chess, and certainly not play in tournaments again, but once again I'm starting to pick it up, play a little online, check out what training software is available, etc. I'll have more in future as I review various software programs and online chess servers to play on.

For those curious the position in the image is from a game between Capablanca and Alekhine in their World Championship match, in Buenos Aires, 1927 (game 11).

Labels: , , , , ,

Saturday, February 27, 2010

Been pretty much regular progress the last couple of weeks. Riley is still cute, though he grunts a lot... Making progress with the billing project at work. I think we're clearing some of the hurdles now.













Readings

In the Department of Mad Scientists, the author take you through a fascinating look at DARPA - The Defense Advanced Research Projects Agency. You may not have heard of DARPA, but among other things, they funded and helped develop something that today is called the Internet... If you have an interest in how big (outlandish) ideas get turned into a reality when no one else in the world even thinks it's possible, read this book :-).


I remember a little of Jacques Cousteau being on TV when I was growing up. In the Sea King, the author manages to hit all the highlights of Cousteau's life. From his spying on the Germans during WWII, the invention of the SCUBA, to showing the underwater world on TV for 10 years. It's unfortunate that near the end of his life his relationship with those around him, particularly his son, were not an example of how he had lived his life until that point.


For a short photographic essay that follows Lance Armstrong during his comeback from retirement to placing 3rd in the Tour de France, this book has a nice selection of photos. This is really for those who want everything Lance, or want to see what a professional photographer can produce. Worth studying some of the shots if you're eager to see what it takes to be in the right place at the right time.




Education
The on-going's of trying to keep up with technology in a world that produces more technology, faster, every day. I'm basically working my way through Clean Code. It's amazing how you can forget some of these practices when you're buried in design, development, documenting, and general team management every day.

I had an interesting discussion (and realization) this week at work. I was discussing the design of our database layer, and our layers on top of the DB with a co-worker, and how the data should be organized into our higher-level objects. A key word that my co-worker mentioned was composition (not the kind you get in grammar). The idea that an object is 'composed' of it's own information AND other objects. It's a common approach, but, oddly, one that I haven't really though about since I used to do some Java programming. Java (or actually, design patterns) make common use of the idea of composition. It's not really particular to a language, though Java seems to be where it's discussed frequently. The odd thing is, in the years that I've been doing Perl, we rarely if ever discuss the idea of composing objects together in this way. Maybe it's specific to where I work, the company is not very object-oriented in it's approach to Perl (though that is changing).

Gaming
Currently playing:
Battlefield: Bad Company 2 (beta). Pretty good so far, the full release comes out March 2.
Dragon Age: Origins. Nice game, now if I can just get through that circle of fire...
Up soon: Assassins Creed 2, Mass Effect 2.

Labels: , ,

Thursday, February 11, 2010

On the blog again...


So it's been a little while...about 1/2 year since I added any updates here. I'm going to try and change that by making more frequent updates, as I find there's quite a bit to blog about.


First up, let's get the big, obvious one out of the way - I have a son :-). This is Riley, born Feb 3, 2010.

He's already got that thoughtful look...

Readings
I've read a slew of books lately (where a slew is 10+). It's been an interesting mix. I want to highlight a few of them. Most of these I've been reading as eBooks on my iPod:

Feynman's Rainbow by Leonard Mlodinow. Mlodinow was a young physicist who worked for a time at Caltech during Richard Feynman's later years. Whether you're interested in physics or not, this book is interesting because it reminds you that regardless of what you're trying to understand, everyone around you has had the same problems.

The Drunkard's Walk by Leonard Mlodinow. An excellent book on understanding 'randomness'. Both for recognizing things that are random when you thought there was an actual pattern, and for recognizing there's a pattern when you thought something was random. More people need to read this book, it would reduce a lot of that "why does this always happen to me" type of thinking.

Collider by Paul Halpern. A fascinating look at the Large Hadron Collider, and previous colliders that have led up to the LHC. Finding the answers to the greatest questions about how the universe formed are being worked on underground in Geneva. This book provides a view into that work.

Roving Mars by Steven Squyres. Squyres is the principal investigator on the Mars missions that landed the rovers Spirit and Opportunity. This is an exciting behind-the-scenes look at how it was done. Fascinating view of what NASA puts people through to get a mission accomplished, particularly when faced with the whims of politicians.

More reviews to come, I have about 15 other books I want to mention that I've read in the last 6 weeks.

Fitness
The Vancouver Sun Run is coming up May 9th of this year. Time to get myself back to running. Considering how mild this winter is turning out, I don't think I'll have to worry about running in several inches of slush this time.

There's also a 5K Science Fair Fun Run happening at Science World on May 30 which helps to raise funds for sending students to science fairs.

If my feet hold together, there's even the possibility of a half-marathon later this year (Scotiabank Half Marathon takes place June 27, from UBC down to Stanley Park).

Education
I continue to read about software development. There's a huge array of material in different topics to read about, though reading about something is not always the same as studying something. Studying requires deeper thinking, more questioning, more practicing.

One of the things I've noticed is that most fields of interest that acquire enough people interested in the subject end up having a magazine dedicated to the topics within that field. There's magazines for just about everything these days. Whether you're a trucker, knitter or gardener, there's a magazine out there to keep you informed of what's happening, articles to provide encouragement, offer hints and tips and advertise products that may be of interest to you. They do it year-round, and they always have reminders, regardless of your level of proficiency, of what you can be doing to improve.

Programming has had it's share of magazines too, with one of the longest lasting being Doctor Dobbs Journal (DDJ). Unfortunately, it has succumbed, and is now a minor feature within an IT related magazine.

There doesn't seem to be much that fills the gap. Maybe it's all been replaced by information online - blogs maybe? But sometimes that seems like you're getting smaller, less researched information. Granted, you can now become part of a conversation, which may lead you to a better understanding, and able to ask questions directly to the author and others reading their blog.

Still, I do miss having a magazine that makes me aware of the things I didn't know about, that I didn't even know to ask about. Hopefully I can find an equivalent online.

Labels: , , ,

Saturday, July 04, 2009

Random Bits...

iPhone redux
In my last post, I mentioned that I see computing platforms like the iPhone to be the wave of the future for mobile computers that also include a phone. Jeff Atwood over at Coding Horror posted a considerably more thought out version that arrives at the same conclusion :-). Worth taking a read of.

Software Developer's and education
Our development teams at airG have grown quite large, and there is a real mix
in knowledge level. Note, I'm not referring to talent/innate ability, I mean knowledge - the stuff you acquire from doing stuff or from others showing you stuff. However, it seems that there are only a few people actively pursuing improving their knowledge. Or maybe, they are all trying to, but they're not all sure how to do so. It's a large problem that shows up in small details.

Something that an experienced (whatever that is) developer might consider 'common-sense' isn't common at all. They learned it from someone else, or through reading what others have done - basically educating themselves on what they should be doing. But what happens when you have a team of mostly junior - intermediate developers? How do they gain these basic concepts and then move onto more complicated ones if that knowledge isn't getting transferred around or picked up from external sources?

As such, a gr
oup of the more senior developers have gotten together, and we're trying to start with some of the basics we 'assume' people should know, but occasionally see being ignored and start gently educating people. Not too many things at once (who needs a list of 50 rules?? No one's going to remember them all). But a few across a couple of weeks, make sure it's adopted by everyone under the right conditions, let it become part of their work flow, their habits. Then add more and repeat.

Photography
I haven't posted much since my photography was on hold for awhile, but I've been doing a few things lately - photographing racers at the Test of Metal mountain bike race in Squamish, and on Canada Day, photographing road racers at the Yaletown Grand Prix.

I think I managed to get quite a few good shots at both races. I try not to focus just on the lead racers, but on as many riders as possible. I think all the competitors are worthy of photos :-). Oh, and an interesting thing with the Yaletown racer photos - I've been contacted by a manager of one of the teams in the race, asking if they could use some of the photos on their team page. They're not there as of this writing, but hopefully soon.


















Billing

High-level design of our new billing platform is moving along nicely. I think we've come up with a solution to our database design that should last considerably longer that the current version and make it easy to scale out horizontally in future with minimal effort. Now I'm on to attacking the most difficult (or perhaps it's more accurate to say 'unknown') area of the new design involving a middle ware layer. There's a few commercial solutions out there (cha-ching $$). Will have to evaluate what they offer over rolling our own custom-solution.

As part of all this billing design, I'm thinking far more about scalability, but not just how it applies to our billing system, but how all of our platforms handle growing in capacity. There's a growing amount of information on the web from others who have gone through various growth patterns (think Flickr, Google, Yahoo, YouTube, etc). The best place I've found is the High Scalability site. If you even think you might need to deal with capacity, this is a site that can get you going in the right direction.

Training
Of course, after all that design, I'll also be helping to implement it all :-). Keep in mind, I've been more manager than developer the last three years so I'm going to have to dive back into coding. This ties back to the training goals I push on the junior developers - what's your plan for improving your knowledge?

My plan:
Three areas of improvement I want to work on (aside from the current material I'm studying for design and capacity ideas):
  • More advanced Perl (and relearning some of the basics I might not have been using for all these years).
  • Relearn Design Patterns, but not necessarily using the "Gang of Four" book. Instead I'm going to use Oreilly's Head First Design Patterns which has gotten a large number of recommendations.
  • And finally, to dive into SQL and database concepts (again). I never use to find databases all that interesting. I use them, I'll set up some schema and I can normalize them, but never really got into them. That's changing. There's a whole world of complexity in there that's actually quite interesting, and when you apply it to go beyond simple queries on simple tables, and instead start dealing with huge volumes of data spread across tables, databases, servers and you have to figure out how all that's going to work - you take an interest ;-).

Labels: , , , , , , , , , , ,

Thursday, June 11, 2009

Regex
An interesting (to programmers) book has just made it's way out to release: Regular Expressions Cookbook. It says it's for beginner to intermediate, but word is there's material in there that self-considered regex experts will find new as well. Considering one of the authors wrote RegexBuddy and PowerGREP, they would seem to be...quite knowledgeable.

iPhone
I have seen the future, and it is mobile. Well, who hasn't figured that out already, duh! I work for a mobile wireless content provider so it was pretty easy to see coming ;-). But what's interesting is that the vision of a future where you have a mobile device that is a phone, handles email, calendars, music, tv, movies, gps, has voice activation, is able to run tons of apps (about 50,000) and games and is basically your one-stop computing platform now exists in the most recent iteration of Apple's iPhone ( the 3G S). The Palm Pre is also an example, and with Google's AndroidOS available for handsets, you're seeing this future rushing towards us faster and faster. If the cost for data in Canada wasn't so horrendously out of whack compared to...well, almost the entire rest of the world, the iPhone would be my choice of computing/communicating platform.




Labels: ,

Wednesday, June 03, 2009

From Integration to Billing

airG
I'm a couple of weeks into not doing the Integration Team Lead role, and it's amazing how much more time I have (mostly due to the sudden drop in the number of meetings). So what am I doing now? Billing Team Lead! So basically instead of managing all of Integrations and Billing (about 14 people total), I'm only managing 5 now. And I'm designing the architecture for our new billing platform.

The only meetings I attend now are billing related, and wrapping up a few things on the Integrations side - or things that just require someone who knows where things are, regardless of the team they manage :-). Coming up to 5 years at airG, I'm one of the few who knows where all sorts of weird things are, particularly with the older systems.

Billing
Billing is an interesting topic (to me anyways). We've done a lot of work on it over the years (integrating billing with carriers), but to design a cohesive platform that supports all sorts of new features, capabilities, reporting, etc., takes considerably more up-front thinking.

It's also an interesting mix because while we do a lot with wireless carriers, and we could just model our billing directly on how most carriers do theirs, it doesn't quite fit. We're essentially a mobile web-based social network. Our backend is more Web 2.0 than carrier (if that makes sense). We move fast, we change, we adapt and we're always being chased by our competition. That pace is reflected in our backend - it has to adapt quickly, sometimes to radical changes going on in the industry. Carrier-based systems...well, they're not noted for their rapid pace ;-). So while we can get ideas from how their systems are designed, the implementation tends to diverge to make use of our strengths and the nature of our business.

To refresh and improve my knowledge, I've been studying architecture - from the simple book 97 Things Every Software Architect Should Know to Beautiful Architecture to my current read Software Architecture in Practice. They've all given me ideas, though I think a large part of what I get from them is being put into the right frame-of-mind that's needed while trying to design something. If I were sitting down to code a specific section, I think I'd be better off reading something like The Pragmatic Programmer, again, to be in the right frame-of-mind.

Google
On the note of how quickly things change, there is a recording of Google's I/O conference (http://code.google.com/events/io/). The video that shows them demoing 'wave' shows how email should (and likely will) be. if you've ever wished that email really allowed you to carry on a conversation, include real-time chat, display videos (and I don't mean as attachments, I mean embedded right into your email), and other features, then check out the coming Wave.

Mac
So I've had my MacBook for a little while now. Dam it's sweet :-). A unix core with a consistent GUI? Yeah! Recently what I found surprising is that it can see and communicate with my Dell Axim x51v (PDA) via Bluetooth. Why is that a big deal? Because the Axim runs WinCE, and uses Microsoft's ActiveSync (under Windows). Or more, it tries to, but ActiveSync is a piece-o-crap that only works some of the time. I HAVE TO USE MY MAC TO SYNC TO MY WINDOWS PDA!! Microsoft = EPIC FAILURE.

Labels: , , , , ,