Sunday, November 29, 2009

How he hires

LinkWhile ago I wrote an entry on how I hire.Today I came across this fellow opinion, which is similar to my own.

I agree with the author, and this this is how you should hire too.

The Essence of a Manager

I didn't write this, and I'm not sure it matters who did; only that it's true and bears memorialization.

Managers get to do a lot of knowledge-free decision making, which necessarily drives them insane. Here’s how the manager’s bipolar disorder works.

During maniacal periods, the manager is the only one who can do anything around here. This frequently happens when the manager is under external pressure, and he feels that control is slipping out of his hands. He’s trying to compensate for his lack of knowledge by immense concentration and willpower. (Managers always have ample emergency supplies of both.) “Concentration” translates to an ability to derive general and far-reaching conclusions from insignificant details, then “willpower” translates to aggression.

Then depression follows: “Don’t bother me with details”. This results partly from exhaustion quickly arrived at during the mania (especially if reports were wise enough to not argue with the manager, letting his efforts defeat their own purpose.) The manager has delivered his trademark concentration and willpower, so he no longer feels guilty on that front. However, he’s overwhelmed by information and (rightly) feels that he doesn’t know what’s going on. He decides it is none of his business and concentrates on the Big Picture (does nothing). Usually, the cycle repeats upon a new wave of external pressure.

Sunday, September 27, 2009

New Zealand

Much thanks to Mariusz for graciously hosting me in his home, and taking me out to see the sights with his family.

Thursday, September 24, 2009

Building Qt4 for Windows using MSVC 2008

  1. Make directories C:\Qt\src and C:\Qt\build (the build procedure really doesn't like fancy paths, so do use something this simple)
  2. Download and unzip Qt Open Source SDK to C:\Qt\src
  3. Copy C:\Qt\src\qt\mkspecs C:\Qt\build\
  4. Open your Visual Studio Command Prompt
  5. $ "bin\vcvars32.bat"
  6. $ cd C:\Qt\src
  7. $ bin\qtenv.bat
  8. $ cd qt\
  9. $ configure -opensource -platform win32-msvc2008 -prefix C:\Qt\build
  10. $ nmake
  11. $ nmake install
  12. set QTDIR=C:\Qt\build
note: Qt will hard-code the prefix path into it's binaries. It cannot be relocated in the file-system.
note: if you get link errors warning about inability to find MOC-related problems (mine was in WebCore), you may want to delete the mocinclude.tmp file (src/3rdparty/webkit/WebCore/tmp/moc/{debug,release}_shared/mocinclude.tmp).

Saturday, August 29, 2009

The dawning of the Windows era

Recently the RSI stress in my right hand is becoming too much to bear. I needed to find a way to reduce the stress on my hands so I went to pick up Dragon NaturallySpeaking. The idea is, for me to use voice recognition to do regular English writing, such as e-mails, blogs, and other non-coding writing.

Since trading NaturallySpeaking is a Windows only product, and the open source speech recognition tools are not nearly mature enough, this is meant that I've had to officially convert one of my machines to Windows. I think Dragon NaturallySpeaking can be made to work in wine, but when it comes to something as serious as my health I'd rather just bite the bullet, and exchange OS preference for physical comfort.

I purchased a Compaq Mini 10 inch laptop, with Windows XP installed, so that I can take it into a quiet room in order to dictate. The first thing I did with the laptop is remove all the preinstalled software that came with the laptop, and installed from source alternatives like Firefox, OpenOffice, VideoLAN, and ClamAV.

So far using Dragon NaturallySpeaking has been as smooth as silk, the error rate is extremely low, and if there is a mistake it's usually because I slurred my speech. In fact this whole blog entry has been dictated through Dragon NaturallySpeaking; in far less time and far more comfort than had I had to type it out. The only adaptation being having to think about what you say before you speak it,and make sure you enunciate clearly. it also includes a startlingly large dictionary with plenty of technical terms included such as Windows, Linux, Firefox, OpenOffice; all dictated directly without need for correction.

If there is one drawback, it's that writing become so easy, there is a tendency to carry on far too long. :)

Here's hoping someday open source speech dictation becomes as good as this.

Saturday, August 22, 2009

Glenn Beck's "Common Sense" in all it's glory

Since amazon removed this scathing criticism of the book, I'll repost it for posterity. It'd be a shame to let something this good go to waste.

647 of 678 people found the following review helpful: Don't Buy this Book - It's a Sham, August 10, 2009 By M. Mazenko

Well, I just finished Glenn Beck's "Common Sense," which, according to Beck, was "Inspired by Thomas Paine." Beck has clearly never truly read Thomas Paine and knows very little about him, his history, or his beliefs. For many readers, pages one to seven seem to make a lot of sense. There are some general and specific criticisms about government spending and corruption in Congress I agree with. Who wouldn't? But Beck's attempt to connect his neo-conservative positions with Founding Father Thomas Paine is shockingly ignorant of both Paine and American history.

Beck uses this book - and Paine's name - to criticize "Progressivism," blaming it for much of what ails the country. Sadly, this is a complete distortion of Paine's legacy. While the extent of most Americans' knowledge of Paine is "he wrote Common Sense, I teach his work in class every year. I use "The Crisis" and selections from "The Rights of Man" and "Age of Reason." If you want to understand Paine and his vision for America, you should read them. Beck doesn't understand Paine, but he does want to use the credibility of "The Founding Fathers" to promote an anti-government message.

Far from opposing "progressivism," Thomas Paine is one of the original "Progressives," though at the time he was called a radical for his liberal views. He is commonly associated with the origins of American liberalism. "Common Sense" was one small piece of his work - it was a pamphlet simply designed to encourage revolution against Britain. Paine later clearly outlined his vision of what he thought American government should look like. This is where Beck falls off the apple cart.

Beck uses this book to openly criticize progressive taxation, public education, social security, and "the progressive agenda." But readers should know something - Thomas Paine was one of the earliest advocates of progressive taxation, even drawing up tables and rates.

He was also the first proponent of the estate tax. And in Agrarian Justice he proposed a democratic ideal to combat poverty and income inequality by taxing the wealthy to give jobs and "grants" to young people. He also proposed using this system to provide government-sponsored pensions for the elderly. Historians cite Paine's Agrarian Justice as the earliest call for a national old-age pension - ie. Social Security. He wanted to tax the rich and give money to the poor.

He joined Thomas Jefferson in strongly advocating universal tax-supported public education, believing it was necessary to promote an educated electorate and was a necessary way to combat poverty. Paine also sought a federally guaranteed minimum wage, and long before Woodrow Wilson, Paine urged the establishment of, and US participation in, global organizations to help solve international problems and avoid wars.

Yet, this is all lost on Glenn Beck.

Beck criticizes Progressives for leading the United States away from its original purpose. He even goes as far as chastising Teddy Roosevelt. That's pretty bold for a guy whose only contribution to the United States has been as an entertainer. Has Glenn Beck completely forgotten "The Gilded Age"? While Beck, for whatever reason, is disturbed by progressive ideals, he fails to concede the un-democratic conditions that led to the desire of Americans for the rise of progressive reforms.

In fact, if you look at American history from 1776 to 1900 and from 1900 to present, you will see that Beck is right in that progressives shaped America into the country that it is. It's one with a thriving middle class, reasonably safe food and water, no child labor, forty hour workweeks, etc. If Beck wants to dismiss Progressives and return to life under President McKinley or Harding with robber barons running the economy and the atrocious work conditions chronicled by Upton Sinclair in The Jungle, he's crazy. Beck has never known what it would be like to live in an America not guided by the leadership of progressives. Instead, he lives comfortably in a nation defined by liberal and progressive policies, and then audaciously challenges the very notion of the peaceful prosperity they provide.

Beck ironically praises "our political leaders" that could inspire us to "defeat Nazism and fascism," and then goes on to criticize that leader - FDR - as helping destroy the country. Beck doesn't even concede that the United States would never have been able to wage WWII or build the Atomic Bomb or put a man on the moon or wage and win the Cold War if it weren't for the large-scale ability of the federal government to raise revenue, mainly through progressive taxation. He reviews the original foundation of the United States government in the Articles of Confederation, acknowledging that it failed because it was too weak, and then heaps his praise on the Constitution. However, he doesn't concede that the significant difference in power given to the federal government in the Constitution was the power to levy taxes. Even conservative Edmund Burke knew that "the revenue of the state is the state." Thus, weak revenue gathering equals weak government. And a weak federal government would never have been able to respond to two World Wars, the Cold War, and two Iraq wars.

Beck goes on to criticize Hillary Clinton and the public education system for "suggesting the community has a vested interest in what each child is taught." Who doesn't believe that? He offers no alternative proposals for how education should be carried out. Though I hardly believe he is proposing the end of public education. That would be so un-Jeffersonian, another Founding Father.

On page 99, Beck shifts from a scathing criticism of public education to promote God and religion in public life. This is completely disingenuous in a book "inspired by Thomas Paine." Paine was a deist who vigorously opposed Christianity or any organized religion. He often called himself an atheist. Paine was very anti-Christianity. He vehemently opposed the government supporting religion in any way. In fact, in his later life, he was practically exiled from the country because of his criticism of religion in America.

A few other criticisms:

On page 61, Beck paraphrases Barry Goldwater's quote, "A government big enough to give you everything you want is big enough to take everything you have," and doesn't even give the original mind credit.

On page 17, Beck paraphrases the well-known "You can't save the poor by destroying the rich" quote from Reverend William J. H. Boetcke and again doesn't give credit. Historians and English teachers call this plagiarism.

Finally, Beck writes a mere 111 pages, and then re-prints all of Paine's "Common Sense" which is in the public domain - and he charges $12.00 for the book. What a sham. I'm glad I checked it out of the library, but I hate that my library spent taxpayer funds on it. They should have waited until it was in the bargain bin for $.99

That's why Beck is disingenuous. He is a hack, and while I occasionally enjoyed some of his earlier work - I've read all three of his books - I am sadly disappointed in this mis-use of one of America's Founding Fathers. Beck says Americans do not know their history, but he is one of them, and with this book he is counting on their ignorance. Ultimately, he is

From what I know of American history, Thomas Paine would have been appalled by Beck associating their two ideologies, and he would have bitch-slapped Beck. And Beck would have deserved it.

Tuesday, August 18, 2009

Handedness in coordinate systems

When I learned about handedness in coordinate systems, it was algebraically (AxB=C, BxA=-C), which is interesting but doesn't build much intuition. I enjoy analytic arguments, but ultimately it's the intuitive reasoning that tends to stick with me and inform new insights.

I often had trouble remembering which meant which, staring at my hands trying to remember how "that stuff" went, looking rather silly the while. I recently wanted to recall what OpenGL and D3D respectively do, and came across this discussion on real-time rendering, pointing out that even the pros get mixed up sometimes.

His example gave me, finally, a good piece of intuition about handedness: label your thumb X, index Y, and middle Z.

A right-handed coordinate system is what you have when you imagine your world relative to your desk: X goes east, Y goes north, and Z goes into the sky.

A left-handed coordinate system is what you get when you imagine your world relative to your monitor: X goes right, Y goes up, and Z goes into the monitor.

A perfectly good reason why modellers would prefer their object coordinates to be in a RHS, and programmers might convert it to LHS.

Monday, August 10, 2009

In Response to "There is a beautiful message in understanding God"

The debate about atheism rages on the Red Deer Express. I'll quote the original poster in case it disappears again.

There is a beautiful message in understanding God


In response to the article titled, “Clearing up misconceptions about Atheistic community”, the cry in the heart of a man to relate to a personal God that loves them was so poignantly expressed by Bryan Rowsell who said, “I do wish there was a God...Life would be so much simpler if we all had someone to listen to our problems, help us through crises and carry us to a place more grand than this Earth.”

The joy is that there is such a personal God. A living being that has feelings, one who created this world. One in whose image we are created.

We long for friendships - and so does He long to be friends with us.

I think of the wonderful hymn that states, “What a Friend we have in Jesus, all our sins and griefs to bare...”

It is He who created the tree that Bryan Rowsell would get the seeds from to challenge Nancy Greenwood.

And this loving God who created all things for us to enjoy, who wouldn’t want to experience such deep love from a personal Creator?

Yes, many misrepresent Him to others, but that does not make Him non-existent or untouchable by anyone no matter what they have done or who they are.

True science is observable and repeatable. If you boil water and I boil water, our results are the same. We find the temperature to boil water to also be the same.

Since none of us was there to observe when this lovely world and everything in it started, we can only point to that “artistic works of an artist” like Greenwood mentioned as a point of understanding.

The “evidence” in the theory of evolution is not always accurate. Piltdown man was a proven hoax and came from the tooth of a pig. Fossilized teddy bears are now on sale.

Fossils can be produced in a short time with pressure and there are now fossilized hats on the market. So evolution regarding millions of years doesn’t add up any more.

Evolution says there is an adaptation of the animal to its environment over a period of time. Giraffes couldn’t have evolved at all because medically it is impossible for them to bend down and drink water without rupturing blood vessels in their brains.

Bryan Rowsell and others like him who are struggling are banking on so called evolutionary “evidence” to hold him away from a wonderful experience with Someone beyond our world.

May I invite them to meet the most wonderful friend they will ever have, who loves them, cares about their every need, and laid down His life to give them life?

This is the message that should be conveyed. It is a marvelous way to live now and in the future beyond the grave.

Padre Johnson
Red Deer

Padre Johnson correctly points out that science is observable and repeatable. He fails to remind us that it's purpose is to give us a consistent understanding of our observations in order to make correct predictions. When established scientific results, like the fossil record, make a prediction (for example "if you find a type of fossil at one layer of sediment, you can find another similar fossil in the same layer"), the prediction either helps scientists ("find fossils in a given layer") or doesn't and is rejected. It is selected for fitness to the observed world, not believed as a matter of faith.

The Padre mentions Piltdown Man ( as an example of faked scientific fossil data. However the deception was started in 1912 and revealed conclusively in 1953. This is a strength of science, not a weakness, as the find was not simply accepted with blind faith, but was examined closely and eventually refuted. To quote the above article, "In the decades prior to its exposure as a forgery in 1953, scientists increasingly regarded Piltdown as an enigmatic aberration inconsistent with the path of hominid evolution as demonstrated by fossils found elsewhere."

While we do no posses time machines to observe dinosaurs being fossilized, we can and do regularly observe and repeat experiments on the fossils themselves. Repeated experiments based on not just one technique of dating, but many different -- but ultimately agreeing -- methods. While it remains a ridiculously slim possibility that every single fossil -- out of millions unearthed an dated -- is an elaborate forgery, the far more likely conclusion is that it is just true.

The strength of the scientific evidence is not simply that fossils exist, or missing links exist, or speciation occurs, or tectonic plates shift, or carbon dating is accurate, or any other single fact you can isolate and find ways of "debunking". The strength of the scientific evidence is that the facts **all agree with each other** with such consistency, and to such an astonishing degree of accuracy, that the only possibility for fraud is one of cosmic proportions.

Either the world is as we see it, or god faked it that way in order to convince us at *every* turn, to such a degree that no *rational* man could possibly come to any other conclusion. Either we can understand our natural world through observation and rationalization, or we can only understand the world according to a single ancient book. Unfortunately for theists, the modern world, including this internet, was created by people who did the former; and the dark ages and the inquisition were created by people who did the latter.

It would be enjoyable to discuss the philosophy of science with theists if they didn't so consistently get their science so wrong. The Padre, mystifyingly, claims that "medically it is impossible for them to bend down and drink water without rupturing blood vessels in their brains", yet clearly here is video of a Giraffe doing just that... Perhaps the video has been faked -- after all it's easy to do with a computer.

If theists wish to claim that their methods help an individual reach a higher state of emotional peace, then they are welcome to make a case, but in trying to fight a force they so poorly comprehend only serves to show up their lack of scientific education.

Sunday, August 2, 2009

An Explanation of the Economic of Open Source

When I was in University, not long after discovering a thing called "Linux" and all the wonderful free software that came with it, I fell in love with Open Source. The ethics of openness and meritocracy really appealed to me. It just seemed to me to be the "right" way of doing things.

However it was a source of some good humoured tension between myself and my colleagues, circa Red Hat 6.0. Reaction against the idea of open source basically ranged from "anything given away for free can't be any good", to "very idealistic but it has no future since there is no way to make a living off of 'free'".

When he came to speak with us at the University, I asked the inventor of Java, Sun Fellow, and former Alum James Gosling, whether Java would ever be open sourced. He replied that this would be unlikely to ever happen, as no one had yet figured out an economic model for open source, and the quality of the software would likely remain below traditional proprietary products, since it could only be done by otherwise employed programmers in their free time -- not an uncommon sentiment at the time.

Since then both of Sun's flagship products, Java and Solaris have been open sourced.

Open Source is now big money, with many largest technology companies converting their product lines to open source, and many open source companies enjoying unprecedented profitability. What happened?

To finally reply to Mr. Gosling, people figured out the economics of it, and the economics are good.

Basically it's a sophisticated variation of a loss leader, like giving away razors so you can sell blades. Except you share the cost of developing razors (including R&D, which is significant for software) and development of the market (everyone already knows they need to shave, but not everyone knows they need a new "foobarizer" software); and all revenue thereafter is almost pure profit (as there is no manufacturing costs).

As razors are hardware, once designed to specification they can be mass produced by the cheapest manufacturer -- which is how everything tangible you buy in a store is made in China. In software, however, there is no cost to manufacture; the cost to design correctly is the entirety of the production overhead.

Since software is complex, and requires highly skilled, creative, and thus expensive designers; it cannot be out-sourced to the cheapest bidder. Companies that once made hardware, such as Intel and Nokia, are increasingly turning to software to help compete against strong Chinese companies good at cloning things.

That may explain why software is popular, but how is open source in specific profitable if you're giving away the designs to your products for free?

To get the complete picture of the economics of open source, I have reproduced the following reply I gave on reddit to this "old-school" take on open source economics by Erik Naggum.

The economics of open source are now well understood.

The part that Erik missed was neither source code itself nor the time invested by a programmer, no matter how expert, is intrinsically economically valuable. What's valuable is source code that creates value for a customer.

Let's say you create a library for Singular Value Decomposition. Good luck finding someone who finds that so valuable that they will pay you money for it. Maybe you can, but it'll take work to find such a person.

Now let's say you open source that library, and share the burden of maintaining it with other programmers in the same situation with you. You have code that is the product of 10 programmers at the expense of 1.

Now you have more time to integrate that library into a larger application, let's say one for visualizing complex data sets. Now you begin to start creating enough value that it's easy to find people who will pay you.

But what if it's GPL? You've still created value, but things are not as simple as being able to just sell it as a software license.

Well, no matter what you make, someone will always either manage to break it; or find some flaw they would like improvement in -- especially as time and market conditions change. So you sell support and contract upgrades.

But since everyone else can just take a copy and distribute it themselves, won't you have endless competition?

Well yes, but the hard truth is that's probably in your own long-term best interest. There is collective benefit to having competition.

As the creator of the software you have competitive advantage amongst any pretenders; you know it best, and your superior skill will tend to win out in the end. So the only people you are really competing against are other experts.

There are customers you cannot or will not serve yourself, that can be served well by your fellow competitors. Even if a competitor takes money out of your hand on one transaction, the fact that he even exists means the market for your goods is growing -- and in the aggregate -- you'll have more customers than if the market was entirely proprietary to you alone. Consumers will enjoy the competitive pricing and service, and will see it as an advantage over proprietary markets.

Moreover, since you now share a common open market, your product stands a chance of becoming a de-facto standard, meaning it becomes the platform for launching ever more specialized, value-added extensions to the original product. Even as the platform loses value, it's corpse fertilizes the ground for the next generation of products, ever climbing upward.

It's called "growing the pie", and is truly the healthy and productive free market at work; no "communism" or "sharing" anywhere. It's proprietary systems, trying to lock their own customers into traps they cannot escape to wring every last penny out, that is anti-free market.

It's not time (spend coding) that's economically valuable, it's the value that code creates for a customer. And if you don't know how your time creates value for customers, you don't deserve to be in business.

So to the summarize the economic proposition of open source:
  1. Decide what it is you do that provides value to someone with money; which we'll call V.
  2. Decide what is needed before-hand in order to enable V; a "platform", which we'll call P.
  3. Begin designing and producing P, as pre-requisite business development overhead necessary for V.
  4. Share P as open source, inviting outside participation in the evolution of P; a community of P of size N we'll call C.
As you can see, the key to this strategy is the development and maturation of P through the cooperative efforts of C.

With luck and management, the cost of development of P is divided by N. Moreover, as software creation is a highly creative task, the outside input from C has multiplied the value of P by N. On the down side, you also may have as many as N possible competitors to V.

However recall that you specifically chose V to be something that'd be hard for others competitors to replicate. If you did a good job, your "competitors" products are actually complementary to yours. If you did a bad job, you're no worse than any other firm in perfect competition.

With time, P grows and develops inertia that causes it to disrupt other similar (proprietary) platforms, lending V a competitive advantage because it uses P.

As all technology follows a typical S-curve life cycle, features lose value and migrate from V to P. This is natural and expected, and indeed necessary for the continued growth of P. New and more developed P enables newer and more valuable V.

Like a shark, firms must always be re-evaluating V to ensure they're still giving a reason for consumers to pay for V.

Wednesday, July 29, 2009

Sunday, July 26, 2009

Supply and Demand

It often annoys me to read about people complain about needing unsustainable ecologically unfriendly jobs because they need to put food on their table, or to hear how unfair it is that unskilled labor is being moved overseas; because I can't help but remember that those were probably the exact same people who, through lazy short-term their life choices, put themselves in that position. They took the "easy road", when the "hard road" -- choosing to train themselves in a profession that is in demand and thus pays well, wasn't very much extra work in the larger view of things.

They partied away high school, skipped university to go take a job as a waiter or in retail, and suddenly woke up one day married with children and painted in a corner by the fact that they are entirely replaceable. They do nothing unique that can't be found in someone who will work for less. Since there are so many unskilled workers, they need more and more of such jobs in order to stem the tide of losses due to technology or outsourcing to third-world countries, that they will destroy their native environment -- their children's future, in order to make up for the fact that they themselves short-sightedly aborted their own economic future.

What makes is a more bitter pill, is that in high school these were the same people who gave me a hard time, making my life difficult; teasing, bullying, but mostly just ostracisation. Now that I have given myself something economic value through a couple years of "hard" study, and have the freedom to work where and how I want, I am supposed to be sorry for those exact same people, and ask my government to pander to the proven short-term, self-destructive, who can't be bothered have invested 4 years into a "hard" degree?

These are the top 15 highest paid university degrees. To be explicit, let me host the chart directly:

Notice something in common in that list?

If you don't have a degree, or your degree isn't one of the above, and you want the government to destroy our shared environment, or you want whinge about how you got replaced by someone who will do your unskilled labor for less money, STFU. It's supply and demand, and idiots are in oversupply.


Saturday, July 25, 2009


Friday, July 24, 2009

Moblin 2.0 Beta Impressions

  • Boot is insanely quick. BIOS appears to take longer to come up.
  • Alpha software, not Beta. Crashes a lot. Functionality doesn't consistently work.
  • Reworked UI hints at amazing amount of promise. So many interesting new possibilities. So many of which are yet unrealized.
  • Pop-up activity menu: central means of task management. Saves a lot of screen real estate compared to windows/GNOME task bars. Can pop up unexpectedly when interacting with menus of your individual tasks. Not a lot of room for growth.
  • MyZone: aggregates what you've been doing with the netbook recently. Kind of like a local facebook feed page. Privacy concerns: don't surf porn unless you want a thumbnail of the site in question on the first page you see after boot.
  • Status: sets your presence info on IM and any web services. Interesting, but is this really a top-level task?
  • People: add IM accounts and display their presence status. Can't IM directly from this screen. Doesn't feel finished design-wise.
  • Internet: shows thumbnails of recently visited websites, and allows searching for or directly opening new sites. Nice and simple UI for the built-in WebKit-based browser.
  • Media: searches and plays local video, sound, and image files. Nice and simple UI for known libraries, but missing features for importing new media or complex library management. No MP3 or other "non-free" codecs (see previous bog).
  • Pasteboard: a simple copy-n-paste UI? I think it's a shame that no previous OS had a clipboard management UI, but at this point we really need this as a top-level task? If it was integrated with however, it might be a different story.
  • Applications: simple application finder. Non-Moblin apps, like Firefox and Terminal; and GNOME settings here. I changed my CAPS LOCK to a Ctrl key. :)
  • Zones: Moblin concept for window management. Seems like each application gets it's own virtual desktop. Interesting idea given such limited screen real estate, but the execution doesn't feel very comfortable.
  • Applets: one for screen/power, sound, and wireless. Wireless applet doesn't show signal strength.
  • Calender: Seems to be local, underpowered thingy. It's 2009 FFS, if you can't integrate with a web-based calender, don't bother! Very very unimpressed, as calender is integrated with MyZone, which could have made it a very smart feature.
  • Web Services: only integrates with twitter and, and as I don't use those, hard to say what this does. No Facebook integration is very disappointing.
  • Web browser: flash built in. Simple and fast. UI similar to Safari. Opening links in tabs doesn't seem to work yet, and entering URLs manually works spottily, making it basically unusable for serious work. Did this blog in it, so it's just a matter of time before bugs are cleaned out.
  • Media player: as expected clutter UI really shines here. Lots of thumbnails and animated progressions. Lacks complex importing such as from digital camera.
  • Email: appeared to understand my gmail account well enough to set up IMAP for it, but wasn't actually able to show me any of my emails.

  • This is Alpha software. Lots of basic functionality is missing or spotty. Lots of foundational work yet needed. UI specifically needs much testing, as the technology under the surface is mostly proven.
  • Clearly shows the results of such an ambitious effort to redesign and rewrite so much of the basic desktop software stack. I just hope the team has the balls to continue forward, and not let it die because of the tough road it has chosen, because there is *so* much potential to do something truly new and make a substatial improvement over what is available today.
  • As a *netbook* OS, one hopes for much better integration with existing web APIs. Specifically neither Google nor Facebook have any integration what so ever. Specifically I'd like to have the calendar and email applications handle web calendars and email as the primary use case.

Thursday, July 23, 2009

How to get GStreamer codecs working on Moblin 2.0 beta

Since the latest Moblin is based on Fedora 10, we can install gstreamer-plugins-bad over yum to get most codecs working correctly. However, we'll have to hack things somewhat.

Moblin uses the OpenSSL from F11, but libstdc++ 4.3 from F10. Since some media libraries seem to rely on both we will have to try to mix repositories carefully.

  1. download the latest rpmfusion and fedora release rpms, as they contain all the yum repository configurations
  2. force install rpmfusion release:
    • $ rpm -Uvh --nodeps rpmfusion*release*.rpm
  3. unpack fedora release:
    • $ rpm2cpio fedora-release.rpm | cpio -idv
    • $ cp ./etc/yum.repos.d/* /etc/yum.repos.d
  4. manually set configurations
    • $ sed -i 's/$releasever/11/' /etc/yum.repo.d/rpmfusion*
    • $ sed -i 's/$releasever/10/' /etc/yum.repo.d/fedora*
    • $ sed -i 's/enabled=1/enabled=0/' /etc/yum.repo.d/fedora*
    • $ sed -i 's/gpgcheck=1/gpgcheck=0/' /etc/yum.repo.d/fedora*
  5. install dirac-libs from F10
    • $ yum install --enablerepo=fedora,updates dirac-libs
  6. change to F11
    • $ sed -i 's/10/11/' /etc/yum.repo.d/fedora*
    • $ rm -rf /var/cache/yum
  7. install the rest
    • $ yum install --enablerepo=fedora,updates --exclude=dirac-libs gstreamer-plugins-bad gstreamer-plugins-flumpegdemux gstreamer-ffmpeg

Friday, July 10, 2009

In Reply to Nancy of Red Deer

I stumbled across this letter to the editor attacking atheists in in Red Deer, just north of Calgary. However, since it was near my home town, I thought i had a little bit of responsibility to say something. I submitted the following, but perhaps there are others who might be interested in debating.

The original post has moved, so I'll archive it here:

In response to the letter “Atheists have a problem claiming evidence to disprove God”, published in the July 1, 2009 paper, I think Johnnie Bachusky is using the media for free advertising for atheism especially now that he is the editor.

Unfortunately, the opinion of Kim Beach was another “same story” diatribe regarding this topic that Bachusky is using to sell papers.

Beach states there is no evidence for God. This is not true. There are some key factors involved in this thinking by atheists that are not usually published.

Being the hot topic of the day, any discussion of atheism, should include these ‘difficult to admit’ points:

Firstly, atheists claim that they themselves are god. They claim they have superior knowledge then the rest of us by trying to say that they have better knowledge because of their own thinking. They will not acknowledge anyone else to be above them.

Secondly, atheists have been hurt somewhere in their lives, can’t understand suffering, and are mad at God — so it is easier to deny there is one.

Thirdly, atheists are looking for God for the same reason a thief would be looking for a police officer. They don’t want to be accountable to a higher being because of the wrong things they do.

Fourthly, atheists forget that when a person goes to a museum and admires a painting, that there was a painter/designer of that art piece. The art piece is absolute evidence of a painter and not caused by random nothingness.

All of the world, stars, animals, plants, oceans, and mountains are absolute proof of a divine intelligent being (beyond our human ability and thinking) who made these things.

Can the atheist make a tree? It is scientifically impossible for bees to fly (laws of physics) and yet they do. It is impossible for our eyes to see and yet they do. What more proof does an atheist need than their own heart pumping in their chest without them commanding their heart to pump each beat in perfect timing each and every second necessary?

Fifthly, denial is a strong coping mechanism in crisis, but does not serve anyone in the long run. Like an ostrich with its head in the sand, an atheist denies God not because God does not exist—but because the atheist doesn’t want God to exist and does not want to see the truth and evidence in front of their eyes.

I would rather believe in God and make sure my life is doing what is acceptable to this Superior Being than to not believe in God and find out I will be accountable to this God for everything I’ve done after I die. With 84% of the world’s population believing in the existence of God, I think the majority rules in this case.

In closing, I would like to quote from the late Dr. J. Dominquez, MD, who said, “To be in error in Religion, is to have a ‘cancer in the soul’ can ruin the only life on Earth, and the eternal one after Death. I am a Doctor in Medicine and Surgery. When I have a patient with cancer, I love the patient, but I hate his cancer, and I try my best to eradicate it from him... The ‘Greatest Love’ is to eradicate an ‘error’ from a person, even if it hurts!...and in fact, the ‘Greatest Love’ is to lay down your life to clean the sins, the bad karma, of your friends and foes, and to eradicate their errors once and for all...”

I wonder how it is Nancy is so certain of her points, given she has clearly not in fact ever talked to an atheist, only created a strawman in her mind to argue against. Let me try to let Nancy know what atheists do in fact think, so that her next letter will have something worth discussion.

Firstly, atheists cannot think themselves god, because to them no concept of god exists. It makes as much sense as telling an atheist they must think they are unicorns. Atheists do not believe that their own personal "thinking" is "right", as if thinking existed separated from reality and is entirely subjective. That is the theist's point of view, where "thinking" comes not from a rational analysis of all existing facts, but from what is accepted on faith from a book or preacher, regardless of evidence to the contrary.

What atheists do believe, is that the world we inhabit obeys predictable rules; and those rules can be discerned through a process called science. Science is a process that involves curiosity, objectivity, doubt, and progressive advancement in our collective state of understanding -- all things anathematic to faith. This has been thoroughly demonstrated throughout history as science continues to explain more and more of the universe -- including how eyes evolved[1] and bees fly[2] -- relegating religion to smaller and smaller dark corners where science hasn't yet gotten around to illuminating.

All much to the continued benefit of the human race. It wasn't priests that invented the Internet that we are now using to discuss religion. Religion, in past times, provided us comfort, explanation of the mysterious, and social support when we could get it from no where else; however we now have much more powerful ways of protecting and nurturing the human race, and we have out grown the need for religion.

Secondly, we deny there is a Christian god the same way you deny there is a Zeus, a Shiva, or a tooth fairy -- we believe it's superstition. You can't argue god exists by starting out with the assumption that god exists.

And if we are to judge by who has been hurt and in need of a comforting by a supernatural father in the sky that makes everything right in the end, I am pretty sure atheists would not look so bad in the comparison.

Thirdly, accountability is an interesting topic. Atheists believe in holding yourself accountable for what is right, as defined by biological altruistic[3] imperatives, and learned social norms as codified as the laws of our ancestors. Meaning a invisible man in the sky is not required to make violence or subjugation immoral. It's immoral because any society based on such practices would very quickly destroy itself, and be replaced with ones who didn't.

If theists really believe that should the holy books be destroyed and memory of the passages be erased, that they themselves would instantly revert to evil without regard to their personal sense of right and wrong; that a single book is all that holds them back from praying on their fellow human beings mercilessly; then that is a scary group of humans I want my kids as far away from as possible!

Fourthly, atheists know that evolution is not a process of "random nothingness", but a stochastic process that converges to a stable solution given time. It is rather involved to see how it's obviously true, and requires an actually opened mind. So short of requesting a return trip to school, I am afraid you will continue to believe it's impossible, and science will continue learn new things beyond your ability to accept[4] regardless.

Fifthly, you're mistaken. Atheists do not believe god exists because there is no way for there to be a god, except by unsupported leap of faith.

Moreover people willing to make such irrational leaps[5] based on what is read in a book or spoken by a preacher, tend to do poorly at making this world a nice place to live in[6] -- kind of a self-fulfilling prophecy whereby belief in a better afterworld makes you likely sacrifice each other in the one we currently inhabit.

You also use Pascal's Wager, a much debunked argument[7]. Bottom line is while X% percent of the world may call themselves religious, the reality is those are all different religions, and in most of them, you go to hell with me. Perhaps you should worship all of them just to be safe?

Lastly, I'll offer a quote from R. Dawkins PhD. to help start your reinvestigation into what atheists really believe: “After sleeping through a hundred million centuries we have finally opened our eyes on a sumptuous planet, sparkling with color, bountiful with life. Within decades we must close our eyes again. Isn’t it a noble, an enlightened way of spending our brief time in the sun, to work at understanding the universe and how we have come to wake up in it? This is how I answer when I am asked—as I am surprisingly often—why I bother to get up in the mornings.”


Saturday, June 20, 2009

Where an illegal download is worth 3.33 a dead relative

I wonder what the thought process is when downloading bad pop music is worth $80,000 per song. How do you calculate that?

Thursday, June 18, 2009

Wednesday, June 17, 2009


Changed my blog profile and time zone to Tehran, Iran in solidarity with democracy protesters.

I guess in the end it's a fairly meaningless gesture, but it's better to do something small than nothing at all I think.

Saturday, June 13, 2009

Sunday, June 7, 2009

On Platforms and the Convergence of 2D and 3D Internet

Working in Virtual Worlds, we are often given to wonderful discussions about what the future will hold for the Internet, and when and how various technologies will converge.

One popular school of thought is that virtual worlds should be embedded in existing web browsers as "light" plug-ins -- in order to make installation easy, and leverage history's most popular connected application platform.

The other is that there should be a "heavy" viewer designed completely around a unique virtual world experience; which happens to contain a superset of features, including web-browsing.

I belong to the second school; and in fact that opinion had lead to conflicts within my previous company. Thankfully, my current employer very much shares my vision.

However there are many in the first camp, and I am sometimes asked why I will not join them, especially in light of recent developments specifically aimed at bringing 3D to web browsers. Let me try to explain why despite all the momentum for adding 3D to web browsers:

I believe placing a 3D virtual world viewer within a 2D web viewer is somewhat comparable to embedding a gopher viewer, or ftp viewer, or email viewer within a web browser -- it's of course been done, but it's backwards, leads to awkward results, and has never proven to be very popular.

In the long term, computer code is plastic. If the world decided to morph a web browser into a 3D application platform overnight, there is no technological reason why it couldn't happen. So the question of where to put certain features is more ideological, metaphorical, or about user interaction concerns

What is a web browser?

Is it the ultimate convergence point for anything internet-related? Is it a new OS that should have it's own version of OpenGL? Is it just a safer sandbox for internet applications that the OS itself?

For me, issues of security or specific features are not interesting. Clearly any application platform needs to constrain the ways in which hosted applications can access raw resources. And clearly the needs of the platform evolve over time, and that requires adding new APIs.

For me, the question of what makes a web browser is a question of design, and mental modes; and how the totality of those decisions affect the expressiveness of applications written for the platform.

A web browser, for me, is a transaction-oriented 2D document-centred internet application platform. A virtual world viewer is a stream-oriented real-time interactive 3D scene-centred internet application platform. I am not sure there exists any easy abstraction that allows one to fluidly translate concepts between categories. The commonality that they host applications that run on the internet is not enough to unite disparate modes, and inform the design of a coherent platform.

Web browsers will indeed need 3D features. But they way in which 3D will be used on the web will be document-oriented, and happen in transactions (not real time). Things like e-commerce catalogues can be made available in full 3D. Any number of static scenes relating to the host web document will add a lot of value -- the way embedded streaming video adds value to many current websites.

But World of Warcraft will never run in Firefox (not at least without a severe redefinition of "browser", "runtime", or "OS").

What is a platform?

What might the average computer look like in 10 years from the perspective of application platforms?

I feel that each computer will consist of several rings or layers of runtime platform:
  1. Native: applications are programmed against the native OS libraries, and constrained by native OS security model (ex: win32, POSIX, OpenGL, etc.)
  2. Managed: applications are programmed against a large, general purpose, coherent, high-level API; and run in a virtual machine with detailed, explicit, and programmable security model (.NET, Java, Python, etc.)
  3. Internet: applications are programmed against a special-purpose API, with clearly defined semantics, which is exposed though a common data model (the DOM for web) and standard set of operating primitives (HTTP for the web); security model is highly sandboxed, limiting access to private data where not explicitly required by the data model or operating primitives (IE, Firefox, and one day Virtual World Viewers?)
I expect that in the future, each computer will come equipped with one OS, a handful of managed runtimes, and precisely two internet application platforms: a web browser and a virtual world viewer.

How would the web look in a VW viewer?

I think it would be wrong to assume that because 2D embeds in 3D mathematically, that the web browser should go away -- entirely subsumed in a 3D viewer. That really ignores the long and ongoing history of humans quite preferring to do a lot of their most abstract work in 2D documents. It would also really undermine my own argument that the web and VWs are really very different modes of interaction.

Instead, I believe that the VW viewer will know of the system's web browser, and rely on it directly for all web-related tasks. Examples might be embedding a browser window for the purpose of authenticating with an OpenID or oAuth provider for some network resource, such as gaining access to your facebook profile, or to send emails through gmail. Web applications like Google Apps would also make a simple and effective document sharing service available from within a virtual space.

So from a user's perspective, the web browser would be rendering elements of the regular user interface, or displaying discrete web pages in an integrated manner without appearing as a full web browser. There will also be cases of rendering to texture in order to display web pages as in-world objects, but their purpose will be peripheral.

As a some what related aside, I find it constantly amusing to see VW implementers try to embed 2D documents in 3D spaces. With few exceptions, there is no benefit whatsoever to being able to see your spread sheet in perspective projection as a texture. Give me a use case where having 2D documents in 3D is more than a gimmick, and I'll give you a modified use case where dimensionality is irrelevant, and the interaction feels much more natural.

Not just the browser

Other internet applications that I feel should not be subsumed within the virtual world viewer, but instead should integrate smoothly with them using an inter-process communication channel are things like E-mail, IM/Chat networks, Streaming Media, Office programs, etc.; all of which are regular desktop applications that the viewer calls out to in response to in-world stimulus; or alternatively, will respond in-world to a stimulus from the user's desktop.

Imagine a "meet in-world" button on your IM client, or having the streaming audio in your virtual home synced with your current desktop play-list (or vice versa).

Saturday, June 6, 2009

Why Windows is not yet ready for the Desktop

I don't spend my time telling other people which OS should or shouldn't suit their way of working. But it seems there are people who do, and like to get blog hits for it.

The problem with these "critiques" is always that the author is carrying around the self-serving assumption that their preferred OS embodies the only real way to organize a software ecosystem, and all others have inferior value. Moreover, since they are naturally only looking for a way to justify their existing pre-conclusion, they are often sadly misinformed about most of their "complaints", half of which are either entirely subjective, or just flat-out wrong.

And it is thus that I find myself moved enough to mock their contribution to the state of public discourse as follows (public service announcement: this is tongue-in-cheek parody):


In this document we only discuss Windows deficiencies while everyone should keep in mind that there are areas where Windows has excelled other OSes.

A primary target of this comparison is Linux OS.

Windows major shortcomings and problems:

0. Premise: free and open software will stay indefinitely. Full stop. You may argue eternally, but free software is the ultimate disruptive technology, moving up from the low ground, replacing complicated and ill-fitting proprietary alternatives at every turn, such as web-browsers, e-mail clients, video players, office software, etc., which at one point cost money, but now most people find that they can no longer justify spending money to buy an upgrade for more "Clippy the Happy Assistant". Proprietary software will only be able to stay relevant by searching out ever more niche applications, or by massive expenditure on research in high-end applications for which it will take time for the ideas and algorithms to filter down to the greater community, and thus a brief window of profitability will remain. Software patents are nothing but a destructive force to retard innovation, and with more and more of the technology and legal communities realizing this basic fact, software patents are about to go away forever.

1. Security

1.1 History's greatest playground for malicious software. With unpatched machines on the internet taking only minutes to become infested with viruses, or become a slave bot for massive illegal spamming operations, Windows is a blight on the Internet's infrastructure.

1.2 Countless applications are released every year with obvious security holes. The programmers that make Windows applications are clearly some of the worst.

1.3 Microsoft has countless times avoided appropriate steps to secure the OS and limit the potential damage a compromised binary could cause. It has consistently either or added half-measures, out right refused to take necessary steps to ensure a safer computing environment for all users, for fear of making "Auntie Jo'" 10% more confused about the "1.3GHz hard drive" on her desk.

1.4 Every windows application I've ever installed messes with the Registry, places files about my hard drive which it never cleans up, installs icons, or worse surreptitiously installs spy- or ad-ware.

1.5 Any OS that regularly requires a wipe and reinstall to fix is beyond tolerance by any sane person.

1.6 A galore of software bugs across all applications. Just look into Vista, or call Microsoft tech support, pay exorbitant support fees, then wonder why some bugs are now ten years old with over several dozens of duplicates and no one is working on them.

2. User Interface

2.1 No consistent API. Win32? MFC? WinForms? WPF?

2.2 No scripting bindings for UI programming. No Python, Perl, Ruby, Java, etc.

2.3 Themeing and skinning support is laughable. Widget toolkit, display, rendering, input, and window managers, are all joined in a ridgid, monolithic blob, opaque to outside developers. Non-trivial changes to look and behaviour of the UI require either proprietary add-ons or third-party hacks; and even then most of your choices are hard-coded by Microsoft designers.

2.4 Lack of CLI (command line interface) errors for user applications (see clause 4.). All GUI applications should have a CLI errors presentation. Why on earth would you flash some crazy warning message to the user when you should be logging it to a file for a skilled technician to view instead of the poor unsuspecting end-user.

3. Interoperability

3.1 Windows has NO interoperability with non-Windows OSs. Installing Windows arrogantly destroys any previous OS boot-loader you may have had. Totally unable to read non-FAT or NTFS partitions.

3.2 Windows ships no other runtime environments except .NET. Has actively tried to disable or cripple competing platforms such as Netscape or Java.

3.3 Microsoft is in regular legal trouble for monopolistic and anti-competitive practices, which as a consumer of non-Microsoft products, means Microsoft considers me an enemy. Why own an OS that is constantly out to defeat you, from a vendor that requires massive anti-trust lawsuits to force it to simply not behave in an under-handed manner?

3.4 It should be possible to configure everything from the command line. Why should I give myself a work-place injury clicking everywhere with the mouse like a tweaking junkie in order to make a change that could be described succinctly in a line or two of text?

4. Drivers

4.1 Windows driver support is so abysmal, each individual device manufacturer must ship drivers with the device itself. If you have to reinstall windows, none of your devices will work until you individually download and install the latest versions from each vendor's website, potentially consuming many long frustrating hours.

4.2 Drivers often need to be installed, tweaked, or configured before they can even be used as intended. They often don't work "out of the box". Moreover, they never seem to be *just* drivers, there is always some application that gets installed without your consent which provides questionable value yet consumes resources and slows your computer down.

4.2 Drivers are one of the main sources of system instability (likely just behind viruses/malware). Poor quality drivers make Windows experience painful.

4.3 Windows has no means to reliably update drivers when critical updates have been made available for them.

4.4 A lot of Linux specific embedded devices do not have any Windows support. An argument that embedded device developers should make their device Windows compatible is silly since that way Windows won't ever gain even a traction of popularity among people who need source-level access to the OS. Why should I install an OS where my own hardware doesn't work?

5. Installing Applications

5.1 Very few Windows applications, by volume, are free or open source; which means you are totally beholden to application developer in ways that would never be allowed by law for makers of physical products. Happen to have your business critical data in a proprietary format when your license runs out? Lost your dongle just before the big presentation? Had to transfer your application to another computer because your laptop was stolen? Sorry to hear you just went out of business.

5.2 Windows has no regular time-based release cycle. You paid good money for a few features and a lot of bugs. It may be a few years from now when you can expect them truly fixed, but you can't count on it. And you'll have to pay again.

5.3 Windows has no central means of downloading new software, their dependencies, or upgrades. Each new application must be purchased from a physical store, or from each individual vendor's website. There is no dependency tracking (or worse no library sharing!), and updating for security, bug-fixes, or features is ad-hoc and entirely dependent on the whim of the vendor. Likely the vendor will use remote updating features to unethically sneak updates to your computer without your knowledge.

5.4 Windows comes almost barren on a fresh install. To get your machine back to a usable state, you must spend hours remembering what applications you had installed, and manually downloading and installing each one individually. With a reboot in between each install.

5.5 Windows applications need to reboot any time a new application or library is installed. 1991 called. They want their loading technology back. I hear DLL-hell isn't a problem any more though.

5.6 Microsoft enforces a great many intra-windows compatibility constraints to minimize the ever-present costs of portability, but it comes at the cost of inconsistent behaviour, buggy programs, and internal complexity that is slowing rotting Windows itself from the inside out.

5.7 Lack of hard-core Linux programs like grep/awk/GDB/valgrind/SystemTap/SELinux. Programmers just won't bother installing Windows until they can work for real.

6. Problems stemming from the fact that Windows isn't Linux

6.1 Ok I am officially tired of this game.

To be clear, I don't necessary truly believe all of the above, as unlike most people, I realize the world is full of complications and subtlety -- I'm just tired of hearing coming in the opposite direction, and had to vent lest my head explode from idiocy-overload.

Wednesday, June 3, 2009

Structured Streams

TCP done right, implemented over UDP, as a user-space library.

What more could you ask for? Seriously, the paper is simple yet beautiful.

Tuesday, May 26, 2009

Compiling WebKit on Windows

  1. If you're doing any open source programming, you'll need to constrain yourself to the Cairo-based WebKit, as Apple's CoreGraphics-based rendering is non-redistributable.
  2. You'll need VS 2005, as anything newer isn't supported. If you're using Express edition, make sure you have the Windows Platform SDK.
  3. You'll need cygwin to run the build scripts. Make sure you install perl (in cygwin) -- but not GCC, as this may interfere with the scripts finding Visual Studio's compiler.
  4. If cygwin has any problems with "/r" character in text files, run the command "dos2unix $(find . -name '*.sh' -o -name '*.pm')" in "C:\cygwin\home\$username", to convert bash and perl files to UNIX new-lines.
  5. Run "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat" to enable the path's needed to run the compiler from command line.
  6. Check out your source from SVN. Nightly tarballs have some sort processing step specific to the platform that may remove things you might want.
  7. Check out the SVN into "C:\cygwin\home\$username", as the build scripts assume this.
  8. Set the environment variables "WEBKITLIBRARIESDIR=C:\cygwin\home\$username\WebKitSupportLibrary\win" and "WEBKITOUTPUTDIR=C:\cygwin\home\$username\webkit\WebKitBuild".
  9. Configure WebCore/config.h to build with Cairo instead of "Safari", as according to this.
  10. Run WebKit/WebKitTools/Scripts/update-webkit
  11. Run WebKit/WebKitTools/Scripts/update-webkit-support-libs
  12. Run WebKit/WebKitTools/Scripts/update-webkit-auxiliary-libs
  13. Run WebKit/WebKitTools/Scripts/build-webkit --cairo-win32 --debug
  14. To be continued!

Friday, May 22, 2009

Tuesday, May 12, 2009

Does your ability to delay gratification corrolate directly to your success if life?

It would seem so. It would also suggest simple ways to ensure your child's future by teaching them about delayed gratification.

Saturday, May 9, 2009

Morality doesn't need a God

Wow... Smack. Down.

Read the first comment in reply to the challenge.

Monday, April 27, 2009

A Programmers Work-day

When I first started working as a programmer full time outside of school, in the "real world", I was a bit unsure what to expect. Would I spend all my day slaving at a keyboard? Would I spend it all in endless meetings? Buried under mountains of TPS reports? How does a real software house organize it's labour force on the day-to-day?

Starting my career in some poorly managed companies didn't provide a shining example for me to learn from.

I was literally shocked to see how much of the day co-workers just surfing out of boredom, but I was a little ashamed to ask anyone about their workplaces. Would anyone be honest about such flagrant waste of time? Would they look down on my workplace as a joke? Was the big horrible secret of the "working world" the fact that very little work actually gets done?

It touched protestant work ethic I didn't know I had. So much wasted time and money felt dirty to me.

That said, it wasn't long before I too #$%@ed my day away on websites; and for the same reason co-workers did: there was no serious management structure. Management didn't give anyone serious goals, or give developers the resources needed to meet them. Management provided no structure or oversight to the development process, and morale was fairly low; no one cared. One place I worked some of the developers showed up at 3pm and left before 7pm, four days of the week!

Over the development of my career no one has yet come out and given me a clear definition of what the professional standard for work ethic, but I have managed to develop my own idea of what should be expected of all programmers from a work day (you'll note I do not include managerial job titles):

Organizational Overhead

2 hours per day

This is the overhead that is not an output itself, but is a natural requirement of any development process, and thus is has to be done every day.

It's often characterized by a series of interruptible tasks that center around communication with other human beings.
  • Face to face meetings
  • Phone calls
  • E-mail and mailing-lists
  • Bug triaging and code reviews
  • Work-related blogs, websites, and IMs


4 hours per day

This is the "real" work, and is the measurable result by which your contribution to the group will be judged. If you're not producing here, you are not a developer.

This work is characterize by the necessity to spend long unbroken periods concentrating single-mindedly on the task(s) at hand.
  • Researching technologies or libraries
  • Devising designs
  • Proposing and discussing design details
  • Implementing code
  • Testing and debugging running code
  • Implementing tests and documentation

You'll also note that that accounts for only 6 hours, and the reason is that I essentially do not believe that knowledge workers' productivity, especially developers who are required to expend so much concentration for extended periods of time, scales linearly with time. Your brain needs breaks to open back up. Overwork just leads to burn-out.

The ideal work day for a programmer is some variation on the following:
  • 0900-1000: handle time-critical overhead tasks such as emails, bug reports, and meetings
  • 1000-1200: concentrate on priority work items
  • 1300-1400: regular meetings and emails
  • 1400-1600: concentrate on other important work items
It may look like a short day, but I do assume you have developed the ability to concentrate on your task, and you have the freedom to eliminate distractions. I do admit that it is often quite hard, and most people's day looks more like:
  • 1300-1700: try concentrate on work while being distracted by meetings and emails
If you really need to have an 8 hour work day for some reason, you'll only find that the extra two hours ends up going into work-place play or dawdling; and I'd personally prefer to go home to my family.

Trying to do too much per day leads to burn-out, which doesn't have to be emotional or dramatic; it can be intellectual, and manifest itself is a subtle lack of creativity that's hard to detect.

Do you agree with my experience-bought conclusion? Do you have your own? Let me know.

Thursday, April 23, 2009

Dotmatrix Rhapsody

Sunday, April 19, 2009

Mini book reviews

I buy and read a lot of computer books (for various definitions of "read" -- references often aren't page turners).

I always have my judgement about the book from my point of view, but I hesitate to share it with others, as I think there is no better opinion than the one a reader has after he's read the whole book on his own.

That said, when I buy books, I want to read what others thought of it. So to provide a service to my faithful readers, I am kicking off some mini-reviews of book's I've read, mostly in relation to my work.

About Face 3: Essentials of Interaction Design

For anyone like me, who hasn't formally studied Human-Computer Interaction in school but now finds themselves working on anything with a non-trivial user interface, this is the first book I recommend you read.

It's extremely easy to read, and spends a respectable part of the beginning of the book explaining why UIs need to be designed, before moving on to the how of designing one. If you're buying an interaction design book it's because you realize the need for UI design yourself, but may be first required to convince management that the interaction design process needs to be taken seriously; the beginning section will give you that ammunition.

However those who are already professional designers will likely find it fairly a waste of time, and spend most of the book skimming over repetitions of things they already know.

Those like myself, who feel they have a bit of intuition for user interaction design, will find a fair amount to skim over; however without any previous training HCI, it is reassuring to have your intuitions confirmed by the experts, and so even the skimming will be rewarding.

The reason why I chose this book over others is that it's a tutorial, and it proposes a simple design method that concentrates on the heart of designing any tool: people (personas) and what they want to do (goals). It's simple, direct, and resonates very well with my design sensibilities.

The middle part of the book introduces the core methodology (Goal-directed Design), and the latter part of the book moves on to placing that theory within the context of contemporary GUI design. An excellent combinational of motivation, leading into theory, leading into method, leading into example, in a comprehensive, intuition building manner.

Any software developer without existing library on user interaction design needs this book in their core library.

Content Networking: Architecture, Protocols, and Practise

I am not sure if the book defines "Content Networking" very well, but basically it amounts to "how do you get lots of cool content to lots of people on an Internet Scale?" This is very relevant question for our virtual world design efforts.

Printed 2005, this book is somewhat dated given that I am basically only looking out for state-of-the-art texts (or theory, which is undying).

It has chapters on web content, streaming media, IM, and P2P, but those chapters, for me, feel like very cursory survey chapters that don't tell me very much. I enjoyed reading them and found them useful, but I'd probably rather buy dedicated books on each of those topics separately.

What I found very interesting was the treatment of web content, and the secret weapon of the web that makes it so insanely scalable: load balancing and caching. Both of which are relatively simple techniques, but the book goes into specific methods in detail and really opened my eyes to what goes on that I merely took for granted. HTTP gets static for having higher overhead than UDP, but this book makes it pretty clear the stateless nature of HTTP means you can do amazing things with caching and load balancing that make the web scale to global levels.

If you're planning a large scale content deployment system I recommend taking a browse through this survey book, but otherwise it's not overly impressive. Borrow a copy.

Parallel and Distributed Simulation Systems

From the title it's appropriateness to virtual worlds is obvious. However its printing date of 2000 belies a different focus. The book assumes an audience of mostly military simulation designers, and makes direct reference to various standards published by the US military for use in war simulations. The book makes reference to "casual" uses outside tanks and jets, and may even use the phrase "virtual world", but it will take some imagination to remove the discussion from it's military context and place it in a VW one.

The book has a distinct academic feel, visible in its eagerness to categorize all different kinds of methods or system types and give them "helpful" acronyms. The reading is a bit dry, but not overly technical.

If you are looking for a systematic approach to simulations, and want to know what the baseline standards are, having been established in 2000 or earlier, it's worth spending some time to look through. It is probably reassuring to know some terminology within the book, and that you can't go wrong doing something the military has done previously. However there are no new or interesting ideas here at all. At best a reference for a fall-back implementation.

Level of Detail for 3D Graphics

Level of Detailing is quite possibly one of the single most critical linchpins for scalability in a virtual world. You can have a large number of objects sitting in a database, but at the end of the day, a camera sees everything up until the horizon, in all directions, and in some manner everything visible has to be brought into memory and drawn. Clearly the less work "drawing" all those things are, the higher your simulation can scale.

Sometimes reading a book is less about what it tells you as what it doesn't tell you, or rather what it tells you "don't worry, you're not missing anything":

Although the book is dated, the book told me the state of the art LoDing in 2003 boils down to the following decisions: when to LoD, what to LoD, and how far to LoD. LoDing itself is taken for granted as only mesh simplification, which was a bit of a disappointment in that I was hoping there were more magical techniques available, especially for textures which are a substantial burden in VWs. Perhaps there is more to LoDing, just all of it invented post 2003. I was also hoping to find some techniques that minimize loading of meshes, but perhaps the authors failed to consider anyone would be so reckless as to download meshes over the internet. :)

Disappointments aside, mesh simplification is extremely important for future reX, but I suspect that loading those meshes from over the network is by far the greater bottleneck, hitting long before the graphics card breaks a sweat from excessive vertices, so for us mesh simplification would have to happen before the client viewer downloads it.

Recommended for anyone who is implemented a LoD system where huge meshes are bottle necking the G/CPU.

Thursday, April 9, 2009

Looking for stock art or illustrations?

I recommend the guys at for their dedication in representing their clients protecting their copyrights.

It can be hard to make a living when copying work on the internet is so easy.

Monday, March 16, 2009

Sunday, March 15, 2009