You are currently browsing the Technology category.
While I am always attracted to Java and Open Source, I’m also not adverse to pitching in on other projects, including those using .Net. C# is really quite a good language. There I said it. I know it is a clone of Java in many ways, but it is quite clean and well thought out, for the most part.
One of the biggest differences working on a Java and .Net project is the Microsoft lock-in on the latter. Sure, the database may be SQL Server or Oracle, but other than that, most .Net shops buy the whole Microsoft tool-chain hook, line and sinker. Microsoft Server, VisualStudio, TeamTest, TFS, WCF, etc.
And most .Net developers are quite happy with this. They don’t get the disdain that other developers may show towards them. Microsoft produces tools they like and know. And lately I also notice that they like and know their iPods, iPhones and iPads…
What? How is it that Microsofties are all in love with Apple? The once and always adversaries for the desktop. I didn’t get it at first. Was I misreading people.
And then is started to dawn on me. While Microsoft has crushed its competition though market weight, with some say a monopolistic edge to it, it has at least done so, for the most part, in a competitive way. No closed app store for Microsoft. Apple, champion of great design, has recently been criticized for its controlling approach to its ecosystem.
And that’s where some .Net developers become fanbois. In many ways, the .Net development environment has become a closed shop. If you like Microsoft tools, you are comfortable there. Similarily, if you like iOS apps, you are also comfortable. So it is not so much that .Net developers are defecting to Apple, it is that Apple is adopting the close ecosystem model that .Net developers have already become comfortable with in the Microsoft development ecosystem.
Or maybe they are just overwhelmed, like the rest of us, by the Paradox of Choice…
There was a case of a psychology experiment in which the scientists left some chickens over the weekend with an automatic feeder that periodically dispensed food. When they returned on Monday they found the chickens were performing some very odd dances and moves. It turned out to be a case of partial reinforcement with the chickens repeating any action that had preceded the appearance of food. Eventually more food would appear, reinforcing their repetitive actions.
Where does that leave me.
Well, at a cottage in the Quebec wilderness with a misbehaving pump and a sketch 3G service.
The pump seems to be acting up, shutting off after about 5 seconds of pumping and then coming on again a few minutes later. Sometimes, anyway. And sometimes it just works. But one of the times it just worked was when the cistern was already pretty full. The message: “pump the water frequently when the cistern is full”. So, we kept running it frequently and it started working better. Just like a dancing chicken.
That was last year. This year it acts up even when the cistern is almost full. There goes that theory.
Similarily my 3G service, while better than dial-up, is somewhat strained, often dropping from 3.1 Mbs to 153.6 kbs. And there I am, like a dancing chicken, holding the dongle in just the same way as the last time I got a better signal; or pushing my laptop to the edge to the table where I had got a better signal, or maybe pecking at the floor while flapping one wing in the air.
We’re all just eventually dancing chickens.
Posted 1 year, 6 months ago. Add a comment
I used to hoard programs. Or more specifically, installation programs. If you’re old enough, and a geek, you probably know what I’m talking about. When the web came along in the mid-90′s every geek’s computer I knew had a “downloads” directory full of stuff like:
- netscape-install-1.2.7.zip
- pkunzip.something.exe (or .sh)
- ftp-tool.or-other.zip
I don’t have that anymore. If I want an application I download the latest version or use my update manager to get or update it.
My bookmarks in the browser window used to be full of stuff too. Every time I’d see an interesting page I would bookmark it into the long list of “WORN” URLs (“Write Once Read Never”). I then moved to del.icio.us, since it had better tags and meant I could get to them from anywhere. I don’t even bother doing that anymore either. Google is my friend.
And who still doesn’t have a music folder crammed full of mp3 files, bought, ripped, downloaded or otherwise acquired?
Why did we hoard all this stuff, why don’t we any longer, and what’s up with music?
We hoarded since the cost of downloading was high and we were afraid of losing it. But we learned over time for installation programs that they were always being updated and it was only getting quicker to re-download them. Easier and safer to offload the management of them to the internet. Need to re-install Firefox? Got to http://www.getfirefox.net . Or more probably, type it into Google, and have it remind you of the URL.
Segue into bookmarks. I hardly ever looked at my bookmarks, even on del.icio.us, and so have handed the job of finding stuff to the internet. The search engines are all good enough that if I want to show my kids the “Who’s on First” routine I do a four second search.
Music remains the hoarder’s treasure. A variety of reasons make it so. There is the obvious licencing issues, but more importantly music is more like applications than links or install programs. Something that costs a lot (in time) to download but that we want to use over and over again. Faster bandwidth can reduce this download cost, but there is still the issue of ownership. Unlike videos, the value of a piece of music goes up the more you listen to it, so renting it (even through subscription services) is something unattractive to us. If copyright laws restrict us in how we can access it, we want to control the music we do have, and that means having it sit on our metal.
We hoard two things: things we use infrequently but are hard to find or expensive to get; and things we use a lot. The first go away as the network and its services improve; the second are unlikely to.
Which is why I’m skeptical of user-targeted cloud services ever taking off.
Posted 1 year, 11 months ago. Add a comment
There seems to be a ongoing debate about whether comments are necessary or even good in your code. The self-documenting code camp claims that if your code is well-factored and well-written then there is no need for comments. Any talented programmer will be able to follow the intent of the code and understand it.
It seems to me that there are two problems with this:
- Mismatch between coding paradigm and problem domain.
- Concurrency.
Let me give you an example of the second one. I was recently debugging some open source telephony code for a client of mine when I ran across this pseudo-code used to make a call:
this.setCallID(reserveCallId());
provider.createCall(this.getCallID(), address, terminal, dialedDigits);
this.toActive(Event.CAUSE_NEW_CALL);
I was getting a null-pointer exception in the last line, which I traced down to the “call id” being null. But “reserveCallId()” is guaranteed never to return null.
After uncovering the cause, the psudo-code fix was:
this.setCallID(reserveCallId());
provider.createCall(this.getCallID(), address, terminal, dialedDigits);
if(this.getCallID() == null) { return null;}
this.toActive(Event.CAUSE_NEW_CALL);
At first glance, this new third line makes no sense. Another programmer would not easily understand why we would stop what we are doing if the call id is null at this point. Without comments, it is hard to see how any amount of refactoring or renaming of code would explain this logic.
The underlying reason for this odd code is that, depending on the telephony system, createCall() may not return until the call is connected. If, while being set up, the call is canceled by another thread issuing a hangup command, then the call state is wiped out and the call id is set to null. Perhaps instead of checking for a null call id to see if this has happened, we can check the call state, but that is still not very clear: why would a newly created call be in an INVALID state?
A few lines of comments — ten seconds worth — is enough to explain it to whoever has to follow in your shoes:
// check if the call has been disconnected during set up,// such as by an asynchronous hang-upif(this.getCallID() == null) { return null;}
Is that so hard?
Posted 2 years, 4 months ago. 5 comments
Well, here in Ottawa the technology sector seems to be rapidly changing. When I starting up my consulting company the dot com bubble was still inflating and almost all of my work was with technology companies in Ottawa or Montreal. I would get calls from people who I had worked with in the past. People who knew me; knew the work I could do; knew the energy and enthusiasm I could bring to a project.
Not so much lately.
While I still do work for private sector companies, more and more I am finding that my clients are in the public sector. And here in Ottawa that generally means the Federal Government. Not that that is bad in any way.
But it is different.
Government procurement is built on fairness. If the sponsorship scandal taught us anything, it is that the public has no appetite for nepotism. And the politicians do listen to the public, at least at election time. But one man’s nepotism is another man’s efficiency. Being hired because someone knows what good work you do is indistinguishable from being hired for who you know. Efficiency looks like favouritism. And so we go to grids and competitions and lowest price contracts.
Even if it risks the project, slows things down or favours mediocre work. No one can accuse the project of favouritism. It isn’t efficient, which is why most businesses don’t act like this, but it is fair. We may say we want our government to be efficient, but what we really want is fairness. We are after all, the shareholders of the government. We expect returns. Not monetary returns that inspire efficiency even if there is a bit of nepotism, but service returns that demand equity and equality.
So it’s a different game now. More of a hassle. We’ll see if my new Secret Security Clearance helps things out.
Posted 2 years, 8 months ago. Add a comment