Illusory Follies Sed quis debuget ipsos debugatores?

20Nov/082

How I feel at work these days…

I've had a heck of a time staying productive this week. I don't think that it's been helping that I've been trying to do a lot things on the side. But something about this week felt different. I have clearly defined tasks but I've been procrastinating an awful lot more than usual. I tend to have 25 things to do and continually shuffle the top 5 things. I finish them and instead of hitting things farther down the list I substitute the most interesting next 5 things that I can do. So a backlog is typical. My problem is that recently I've been feeling guilty about tasks way down in the 20's and spend a lot of my "free" time trying to focus on that.  So instead of knocking out high-priority tasks, I've been ineffectively working on low-priority things.

I tend to mix my personal goals, chores, continuing education, and regular  work all into the same priority pile. I find it hard to segment it any other way. Unfortunately that means that at the office sometimes I'll blow time on things that aren't work related meaning that now I have to work evenings, stay late, take vacation, etc. This would ideal if I was working as a consultant and could make my own hours. I've never felt like I needed a boss to motivate me and enjoyed the shorter-term goals of contract work and the variety of experience that they innevitably demand.

Here's a list of things that I'd like out of work:

  1. I'd really like to be able to work with companies and individuals that need services that I can offer.
  2. I'd like to be able to excel in providing these services to the point that my value is clearly seen.
  3. I'd like my work to offer me the opportunity to be creative -- not simply implementing known entities.
  4. I'd like to be location-agnostic for much of my work (i.e. telecommuting should be an option for 90% of the time).
  5. I'd like the project sizes to be such that I can cycle to new projects or new clients every 6 months.

As a software engineer, I feel much more like a [traditional brick-and-mortar] architect than a manufacturer or general contractor. What I do should be bigger than simply implementing a known solution -- it should be validating, improving, and refining a requirement and then implementing an innovative solution that may be somewhat unexpected. I know that's a lot of buzz-words, but it seems accurate. I don't want to help people install Microsoft Word on their computers, I want to help them think about the problems of word processing, document management, collaborative editing, world-wide publishing, and the myriad of associated goals and put whatever solution in place that makes sense for them (hopefully it's not Microsoft Word).

Anyway, enough angst-filled longing for today.

...Back to the ever-fun-and-exciting C++ experience...

17Nov/082

Cell Phones

Well my new position has been keeping me busy writing software for Symbian, Nokia's primary phone operating system. I hate it. It's fun to learn new stuff and it's probably a good thing to be learning. But it's still awful. Documentation is terrible. Developer forums have lousy support. Two unique programming elements: descriptors and the cleanup stack just make life agonizing.

I've never appreciated C# so much.

On the bright side, it's drawn me back into C/C++ coding which I haven't done in years. That part is fun. It's funny how many things I take for granted with C#. I've even gotten lazier considering some of the wonderful upgrades to C#  3.0. For example:

List<string> list = new List<string> { "Susie", "Lucy", "Bobbie" };

This makes sense to me. It's easy and straightforward. It saves [development] time.

At work things have been interesting because I've been working with developers firmly set in an embedded mindset. They think in terms of saving bytes. My .NET programs take up 20MB of RAM just in basically displaying a simple window with a few controls. It bugs them.

I don't know -- I see the point of using assembly, C, even the horrible descriptors of Symbian for situations where you are highly concerned with efficiency. However, it does seem that you're going to be forced to spend more development time (by a huge amount) and the code will almost by necessity be much more difficult to maintain. When there's no clear single way to convert a descriptor to a char * every developer will do it differently and the code will be more and more complex and incomprehensible. It might run fast, but it's not flexible.

In the world of mobile development, optimization for speed seems important but if you take 6 months to update your application when new feature sets become available, your product likely isn't selling.

Along these lines of thought, I'm considering pouring a bit of time into iPhone development. I've always shuddered at Objective C but I need to bite the bullet and get into it. My assumption is that I'll be happy with it since from what I've heard it balances maintainable,  understandable and easy-to-write code with reasonable performance/stability.

I'll keep you posted.

10Oct/082

Christ Church, Victoria, B.C.

We saw this church in Victoria, B.C. and it truly was amazing (and I believe God-centered and glorifying in its design). It's a pity that churches are often just like business offices or other "ordinary" places. I guess some would disagree but I think that a return to "great" architecture in church buildings is a wonderful thing. The UMC and some other denominations seems to have gone through a period of uglification in their architecture -- somehow trying to modernize or reinvent something that wasn't in need of an update. People in general seem to be less willing to spend the big bucks on churches than on other things like the poor and the needy. I know other issues can't be ignored, but worshiping God in a place like this seems to really help put things in perspective. Just like the robe, the solemnity of the service, and the order of the liturgy, the architecture seems to be a huge aid in the worship. I'm sure like all things in the Christian life and even those things in worship, it can become an idol but I have a hard time believing it's wasted money or effort. The Temple was a truly glorious place; a feeble attempt at showing the glory that will be revealed in heaven, but a worthy attempt. As Christians we carry out the creation mandate to bring order out of chaos in the world. A building like this that's built not to commemorate its long-standing members, nor to enshrine saints, but to stand as a place of worship -- a place set apart.

I know it's far, far away for our small group (and even a large and prosperous church like the above took over 100 years to get where they are), but I look forward to the beginning of such an effort.

Update: Regarding Dave's comment -- I wasn't very specific about what "like this" I think is good... I think it's architecture that reflects attributes of God and his nature. So yeah -- creative is a good thing but I think that awesome and majestic is important too... Obviously some of these characteristics are a little subjective. I hadn't really thought of it so much but Dave mentions the re-using and revitalizing of buildings; this seems perfectly to reflect the transformative power of God's Kingdom. Thanks Dave. :-)

13Jun/081

I’m getting old…

Today on the way back from work I stopped at the wonderful oasis of Fry's. I was kind of stressed out from a long and not terribly rewarding week of work and I figured that for once I'd actually just buy a game.

Well, I ended up with two games! I drove home, slightly faster than usual. After some much-needed mowing in the back and dinner I figured I'd get down to installing them. But wait, the computer I intend to install them on is in pieces after I'd tried swapping some parts around. 45 minutes later it's all assembled (I had to reattach the motherboard and everything) and booted it up. But wait, I had Ubuntu on these disks, not Vista or XP so I've got to install the wonderful Microsoft product before I can start. Vista installs quickly (I was actually sort of impressed. But not that much.) But wait, although the video card is detected and installed, the audio drivers aren't. A hardware scan doesn't even see them I power off and pop in a spare sound card that I have lying around. The audio drivers get installed and the game begins. I start with the tutorial. Patrick (who has been very patient this whole time) is interested. He especially likes when the guys I'm controlling open fire on an opposing team. Explosions, gun fire, this is great stuff. We finish up the tutorial and start the first mission. Within 30 seconds the sound card starts crackling and 10 seconds later the sound dies. I check the connectors and then check the software settings. When I try to save the software settings, the game crashes.

So, despite being home by about 7:45pm, it is now 11:45pm and I've barely even started playing the game since I've been too busy working (again). How depressing.

The worst thing is that the game felt a little confusing and difficult (I'm sure it's not -- it's just me getting old). I'm pretty sure that Patrick understood it. If I'd let him, I'm sure he'd be on there for the rest of night.

Or maybe the worst part is that I just spent the last 10 minutes writing this blog entry. So much for crazy wild 7+ hour gaming sessions. I'm lucky if I can clean out my inbox.

I'm exhausted. Time for bed.

28May/081

Personal Blogging

Edit: This blog has grown! I have now added my associate, anonymously referred to as CoderGuy who will be adding posts related to identity, online security, and other privacy issues as well as technology in general. So, faithful readers, not all posts on this site are written by me! You should see the author at the bottom of each post. Hope you enjoy! And now, without further ado...

I am, by nature, a paranoid person; I lock my computer screen when I use the bathroom, in my own house! I have passwords on everything; mail, finances, personal directories, etc. I lock my car in my garage and when I get gas, I shred everything, even it it only has my name on it. OK, so maybe I am an extreme case (I am sure psychologists would have a field day with me), but that isn't the purpose of this post. The thing is, I actually have no reason to be this way, I don't do anything that I wouldn't want anyone to know about, and am not in the witness protection program, I was just raised in an environment that personal things are personal, and if you want to keep them that way, you don't invite others in.

I have been using the net almost since Al Gore created it (circa 1990) when you had to use comic book inspired apps in Windows 3.1 to get files and documents (remember Archie, Veronica, Jughead, and Gopher (Gopher? Where's Betty!?)) and I spend way too much time surfing. I spend most of my time on news sites and technical sites, including technical related blogs. It wasn't until recently that I started looking at some personal blogs and thinking about becoming a little more social.

I am finding that I am both intrigued and perplexed at the level of personal stuff I have seen on some blogs; pictures, names, details of honeymoons, information about family stuff I wouldn't share with my own family, yet, people seem to be fine with this amount of information sharing. Being an ultra paranoid person as I am, all I can think of is while I read some of these posts is, “Are you crazy? Telling people that?”

Along my path of discovery, I have found that I am not completely paranoid, as I have seen stories of stalkers, people getting fired for their blog posts, people not getting hired because of their blog posts, even suicides and murders. So maybe a little paranoia is a good thing.

So my question is this; what is a good balance between too paranoid and too open? Are there others that feel as I do or do the majority of people think I am just way too cautious?

I am interested in getting some other opinions and comments.
21Feb/080

Whole Disk Encryption Insecure

Hmm... well this is kind of a blow for the security departments that have been relying on this. My "work" (notice the parentheses) laptop has whole disk encryption and it's terrible. For some reason it usually (like 4 out of 5 times) does not ask me for my password anymore (and it really does seem random) and it takes noticeably longer to do anything on the machine (which is why I barely use it and didn't even take it with me this trip). Now it's revealed that it apparently doesn't even really protect anything!

So much for "corporate security".

10Feb/080

Multi-Function Printers that Work

I've been looking for a multi-function (print, scan, copy, fax) printer for the last few months. I've been really disappointed with what I've found.

What I want to be able to do is the following:

  • Print documents from any modern operating system across the network
  • Scan documents/pictures from an auto-document feeder or a flatbed and in some way have this data end up on whatever system on the network I want
  • Copy documents/pictures by standing at the printer unit itself
  • Receive faxes and send faxes from anywhere on the network

I know that there are problems with some of these -- specifically Scanning and Faxing. I see multiple issues with these:

  1. Storage (where does the scanned or faxed document get stored physically?)
  2. Notification (even if a fax is stored, how does a user know when it arrives?)
  3. Configuration (the above should ideally be accomplished without configuring anything on the end-systems)

I see a solution but I've not found a sub $1000 printer that accomplishes it. Some of the high-end "counter-top"-sized systems (that run $10,000 and above) have something similar but are usually way overblown.

  • Storage would be provided by flash memory (something as simple as 1-16GB Compact Flash card).
    • Sharing of this storage would be accomplished by using a Samba server running on an embedded Linux kernel (similar to the sort of functionality that currently exists on home routers).
    • Samba shares would be exposed to Linux, Mac, and Windows systems by using something like Avahi (or whatever the Linux version of ZeroConf is that works best at the time). Bonjour could be used on the client end if you're running Apple to easily see these auto-configured shares but it would have to be installed specially on Windows clients.
  • Notification could be accomplished via email. If a simple SMTP setup is configured once on the printer unit itself, it could automatically route emails to a specific user, multiple users, or different groups depending on the fax number used or other variables. There are many other alternatives using things like the XMPP or even SMS for notification.
  • Configuration -- as mentioned this would work like magic on a Mac and slightly less magically (and unfortunately much less beautifully) on a Windows PC. Any system on the network could access recently scanned or faxed documents or perhaps be only restricted by a username/password (heck -- even tie it into an LDAP server if you've get centralized directory services). Basically, this largely gets rid of the need for client software other than just the printer driver itself. In reality, I'm not clear why we even need a specialized print driver when a web interface (again, hosted on the device) could likely provide any custom features (software-based maintenance, looking at the queue, etc.)

So why isn't it out there?

30Jan/080

An Essay on essaying

There's always so much to do. Every task that is completed falls into the category of "repeating event" that will simply have to be performed again as entropy sets in (cleaning, cooking, personal hygiene -- such as it is, etc.) or "nice try" which was simply an imperfect and increasingly simplistic appearing attempt at a solution. To some extent you're stuck with the repeating events and must simply hurry and do them well enough to at least stay in place like the Red Queen in Alice Through the Looking Glass. For everything else, there's a sense of struggle to churn out something that's really superior. You want the best and you constantly strive for it. But you make imperfect relationships, imperfect software applications, imperfect decisions. As time goes by you can review (if you're depressed) the imperfections that trail behind you. The farther away ones are usually laughable, considering that at one time that was your best shot. The closer ones still seem reasonable but somewhat lacking. But of course as time goes by and they recede into the past as well you'll start to chuckle at them too.

So are things really getting better? Is the stress of "getting better" actually creating better results? The problem seems to be that the perception of your abilities on a continuum slides backwards at the same rate at which progress occurs.  The more you learn and grow and "better yourself" the more you realize that you had previously overrated your knowledge, experience, and skills.

I don't think this means that we shouldn't try. But we should try to keep in mind that perfection is unattainable (here on Terra Firma at least) and if we're humbled by looking at our mistakes from 1 or 5 or 10 years ago, then consider that 1 or 5 or 10 years from now we'll likely be just as humbled looking back to what we're doing or thinking or speaking (or writing in a blog) right now.

I know this isn't much of an "essay" but it made for a cutesy title. I'm sure I'll think better of the idea later.

Tagged as: No Comments
22Jan/082

Computer Science vs. Programming

There have been a few Slashdot submissions here and here. They're concerned with an article published by two professors from NYU that assert that Java (and similar high-level languages) are damaging to teach as the "first language" of a Computer Science education. Since I wasn't a real CS major, I'm perhaps a little outside of this discussion. However, I cut my teeth on C/C++ at school before moving on to the high-level languages (really just .NET and some very high-level languages like Ruby and Python).

I tend to agree with the conclusions. It's not that there's no place for Java. It's just that without the fundamentals of pointers, memory management, and basic understanding of the construction of complex data structures which are just handed to you with Java or .NET, it's very difficult to fully comprehend what you're doing

I had a very good professor that taught algorithms and data structures at school and although at the time, the experience was painful, I'm sure it has helped immensely. Despite my affection for things like Ruby on Rails which is extremely high level, I'm annoyed sometimes because of the indeterminacy of functions and the vagueness of the specifications. When you write a language that can do powerful things in one line of code, you're taking a lot of shortcuts and it can be surprising when a function returns something very unlike what you expected do the complexity of the underlying code. Basically, you ignore things like sorting algorithms entirely in favor of the "built-in" sort routine. How does it work? Well, you can dig it up in the code, but most people will simply use it and assume that it's the fastest for all of their needs. What happens is that writing code becomes an assembling of pre-built components. It reminds me of "building" Ikea furniture. Granted it takes a certain amount of handiness to put together your new desk but you're not gaining skills that you can use to build anything yourself without first being handed the pre-built pieces.

I tend to think of myself as primarily a Software Engineer. I'm not just a programmer because I do a lot more than write code. But I'm also not much of a Computer Scientist because I spend very little time actually attempting to improve upon techniques and mechanics of processing information. These definitions are a little vague, but I feel that Software Engineering is more what I do because I apply creativity to the process. I think one can be a Computer Scientist and a Software Engineer but I don't think my work normally falls into both categories. I've always found the role of a traditional Architect to be similar to Software Engineering. It's an application of creativity (design, color, texture, material, etc.) to a field of science (physics) that results in [hopefully] useful buildings. There are some "cutting edge" Architects that attempt new and innovative projects but most Architects are working with existing ideas and applying them creatively.

I've heard that Frank Lloyd Wright's buildings although amazing in appearance and remarkable in their artistic qualities are often problematic in simple ways. Flooding basements, leaking roofs, etc. were the result of a poor implementation of a great and artistic idea. It's not enough to be artistic and creative; a good system like a good building works and functions as it should in addition to its aesthetic qualities (which make it unique).

I've always seen this distinction between implementation-focused approaches and theory-focused approaches. Implementation is desirable for the production of new applications and system but will always be held back by advances in theory. It seems that Computer Science has largely lost its way in North American schools by focusing too much on implementation without teaching theory. Programmers are cheap. It doesn't take a lot of brains to assembly code from pre-built components and creativity often is the only difference between a good programmer and a mediocre or poor programmer. Without new advances in theory, applications and systems will simply have to stand on their desirability of implementation (i.e. how easy is to use?). New ideas must be infused into the process for real advances to be made.

The use of so-called AJAX seems an interesting example. The ability to use things like the XMLHttpRequest object were available for quite some time before companies like Google began using it to do amazing things. This is entirely focused on implementation. Web 2.0 applications (whose primary distinction seems to be AJAX technology) are an innovation in implementation only. Many "hard-core" programmers find the terribly sloppy and inefficient results that often result less than satisfying. It does cool things but isn't there a Better Way? I use AJAX quite a bit these days and it's handy. However, I have only a bare understanding of how it works and what might be a better design. I don't tend to concern myself with the next evolution of the Internet-- I focus on building things that work with the technologies that now exist. But AJAX really isn't a huge advance -- in fact its "magic" often results in massive security holes, odd and unpredictable behavior, and hugely increased server overhead.

At the same time, a Software Engineer who truly understands the science of the code that he writes is likely to make far fewer mistakes and write much more efficient code. Even without much creativity, a programmer who can optimize code is a desirable catch for any software company. I think that everyone should understand the underlying details of code even if some end up focusing on the creative, implementation focused approach or the theoretically, algorithmic approach.

I mentioned security in regards to AJAX and this seems important. It's well and good to provide applications that do the same things in easier ways but without a strong cadre of Computer Scientists, developing faster, more secure, and more reliable ways of doing business, we end up with applications that are never properly tested (it's difficult to test code that just does magical things!) and never adequately secured.

A little rambling of a post -- hopefully I've managed to convey something. Your comments welcome.

7Jan/084

Fight the law, or let the law win?

I'm not a big fan of government (see Ron Paul posts below). I'm also sick and tired of the police state. Today on my way to work I was pulled over for using the HOV lane. Foolishly, instead of letting the officer write the ticket and getting it dismissed (it was before 5:00am and the HOV lane was open to all traffic) I pointed it out. He paused, looked annoyed and told me that I was speeding at 72 miles per hour ALSO. This is a little silly because I always cruise at 68-69. Yes, it's speeding and still technically ticketable but I've found that it's the speed that everyone cruises on that stretch of road. I'm very consistent with my speed and always use cruise control. If he had given me a ticket for 68 or 69 I would have grumblingly accepted it.

Anyway, I told the officer this but he ignored me and told me to "have a good night". As I tried to decide whether I should tell him it's morning or hand him a Ron Paul flyer (I had a bunch on the front seat) I realized that he had already scurried back to his car. A little vexed, I continued to drive to work. I was annoyed but figured I'd live with it.

Upon arriving at work, I realized that the ticket I had received said that I had committed a traffic offense on "N/B I-5 at S. 200th". This is plain silliness. I never take I-5 to work (I use the Valley Highway and then take I-405 around Seattle). He had neatly signed the area that read "I certify under penalty of perjury under the laws of the state of Washington that I have issued this on the date and at the location above.". Ironically, the form was automated (actually printed in his car) and I think the only fields that he had to manually enter are the citations themselves and the location. My only conclusion is that the officer was delusional. Everything fits.

I think I'll take a softer approach at the hearing but since I clearly didn't speed on I-5 on January 7 at 4:49am I think I have a good case. We'll see what the courts say.

Update: By the way, because I know I'm "near the edge" on the speeding thing, I think I'm going to make the assumption that the new, super-secret, real speed limit of the Valley Highway and I-405 is 65 instead of 70. I don't relish more run-ins. These guys have tasers and they're not afraid to use 'em!