Illusory Follies Sed quis debuget ipsos debugatores?

24Nov/111

Interfaces for creating?

I’ve found this discussion a very interesting one… There’s a lot of conjecture out there that the iPad (and similar devices) shifts use of the Internet away from “creating” and towards “consumption”. To some extent, some of this seems obvious. Activities like music and video are clearly consumptive and these activities often are more convenient (and seem more of a probable use) for portable devices like the iPad. Also, in general, reading is quite easy with the iPad/Kindle but typing is harder than with a regular laptop or keyboard. I find myself definitely being a consumer far more on the iPad. Even with emails, I tend to read and mark for later handling far more with the iPad. On my desktop on the other hand, I tend to immediately reply to the emails that I can knock out in the next minute or two. I might look at pictures on my iPad but I definitely don’t any editing (although the Photoshop Mobile app is kind of neat for really simple tweaking)

So while I can agree with the observation that iPads and other smaller devices are currently being used for consumption vs. creation, I think that this may just be a phase. Computer users have used keyboards for a long time. In fact, the first keyboard appears to date to the 18th century and our current qwerty keyboard dating to 1873. In addition, the mouse, first created in 1963 but not in common use until the 1980's is also ubiquitous in modern systems. One could argue that it's a powerful device for manipulating interfaces, but I don't think it's the end-all of human-machine interfaces.

There will be something new. There always is. Touch-based computing has its strengths and weaknesses. There's an almost nauseating volume of interfaces that can all be summarized as "sort of like the interface used in Minority Report". With faster processors, better algorithms for processing inputs, etc. it simply seems a matter of time before a new breed of general purpose input devices will become standard.

How would you like to write code with this?Keyboard input (and to a slightly lesser degree computer mouse input) are currently preferred because they are precise. Learning to type is a relatively easy task and provides a very easy-to-control way of interfacing with systems. Using a mouse is trivial to learn although it is much slower to use for many tasks. Its strength is that it works very well in dealing with graphical environments that involve manipulation of elements that rely on eye-hand coordination. The combination of both in modern systems allows precise control when needed, and manipulation of complex interfaces when needed.

Touch input devices provide a more natural feel for the second type of interface, but not the first. Precise input is slow and painful The value gained is that the iPad and similar devices are instant-on devices that don't require you to sit, position yourself, or even use both hands. A user gains speed, portability, and convenience but loses precision.

Two things really interest me in this area. The first is motion-based systems like (to some extent) the Wii and more importantly the Kinect. Both systems use the concept of movement (one with a controller you hold and the other by simply viewing the user themselves). The second is voice-based systems like Siri. There have been many voice-based systems previously, but Siri seems to have attained a more natural level of interaction that I think finally makes voice control more practical.

The interesting thing about both systems is that both approaches reduce precision in the system and attempt to get at underlying intent of the input. You can ask Siri "What's the weather like", "will it rain today", or "Weather" and it will give the same response. The attempt is to map a number of inputs to the same output. It can handle heavy accents, variations in speed, pitch, and intonation and still give results that make sense. Kinect based systems are looking at standard or typical behavior and are all about averaging inputs to try to get an approximate value rather than working with precise values.

These new technologies can be leveraged in interesting ways. It's clear that games that involve more physical activity are fun and interesting. It's also clear that being able to speak to your phone to perform tasks that would take longer to do with the touch input saves time. But will anything ever replace the keyboard?

I don't have a crystal ball, but I think the important thing is that touch input, voice input, and motion-based input are really not trying to solve that issue. All of these inputs are inherently less precise (just as a mouse is less precise than a keyboard). Although there are some very interesting efforts to use a Kinect to write code in Visual Studio, it seems more likely that at best, motion technology could replace only the mouse or replace the mouse for specialized types of manipulation. Speech seems to be a good way of performing out-of-band or contexual tasks (say for example you're in the middle of a coding task and want to send the current file to a team mate for review without stopping what you're doing and performing this task manually.

Rapid but precise input is what's needed for devices like the iPad to shift the trend from consuming information to creating information. This could be accomplished by new types of one-handed keyboards (which have been attempted); I have a hard time seeing that we will be able to achieve precision with devices not controlled by the human hand. Another option is a radical change in the interfaces themselves. To give an example, instead of writing code using a complex written syntax like that in most modern languages, a special language could be developed that encapsulated the structure of the code but could be represented in a format that could be more easily parsed and understood audibly. Transitions like this have already taken place in languages like LabVIEW which attempts to represent programming code in a visual format vs. a a written syntax. I have a hard time picturing how this could be accomplished, but in theory, I can see that it may be a possibility. There will be naysayers. But there are naysayers now with regards to high-level languages which already abstract an enormous amount of "what really happens" from the user.

Any thoughts on input devices and human-computer interaction as it's currently evolving?

 

1Mar/111

IT Dept. vs. IT Consultant

I moonlight from my full-time gig as a Software Engineer by doing IT support. This ranges from desktop support, hardware upgrades, purchasing assistance, remote access and support issues, network setup, configuration, and administration, etc. Basically, overall I'm acting as an IT Department for small companies.

I think I'm mostly productive in this role. Small offices don't have a lot of issues and to some extent users train themselves to accomplish routine IT-related tasks. The intersection of "IT Consultant" who typically charges a bit more per hour to be on call to resolve a wide range of issues and the role of "IT Guy" who is hired full-time to assist with any ongoing issues is interesting.

A consultant typically:

  • Is expensive on a per hour basis
  • Must perform constantly to avoid being replaced (which is usually trivial for his client to do
  • May not be available immediately since they have other clients, but can often be available FAIRLY quickly if your willing to pay even more
  • Is expected to resolve issues quickly and surgically

An IT employee:

  • Is cheap on a per hour basis
  • But is relatively difficult to fire and replace if performance becomes a problem
  • Is available immediately 5 days a week
  • Is expected to solve problems as they arise but with little motivation to finish them immediately

I believe that for small companies, the first option is almost always the best. One of the main reasons I believe is motivation. A consultant must perform constantly and consistently with every hour that they bill. They can be replaced easily in most circumstances, and therefore must "earn their keep". In addition, although there are definitely some conveniences of having local IT staff, most small companies do not have enough work to keep their staff busy. If they do, it's likely because processes are not streamlined. If a member of IT staff must do 4 hours of work every day just to keep systems running, they're probably wasting time. An expensive consultant might cost 5 times as much per hour but could be tasked to automate the process once and for all. In many cases, the IT staff member may not have the training or experience to perform automation (often consultants tend to have more rounded experience in process, software development, architecture, etc.) and normally they wouldn't have much motivation to automate a task that would make their own position no longer be needed.

For larger companies, the volume of IT work is likely sufficient to keep full-time staff busy even if they are constantly resolving old problems, and moving onto new problems. In a situation where a single contractor can no longer fill your IT needs, it's likely much cheaper to hire full-time IT staff.

There are scumbag employees and scumbag contractors. One of the biggest things that I have always striven for as a consulting contractor is to work myself out of a job. Ideally, I should be fixing things to a point that my client will only call when they want new features, new technology, new ideas. If all I do is treat a chronic IT wound, I'm part of the problem. Obviously, some systems take constant maintenance. But if I'm working on one system and I see a new system on the market that resolves or reduces these ongoing maintenance issues I will always point my client in that direction. My goal is to provide professional services that improve my client's bottom line -- not my own. Ideally, I'd love long-term relationships that are lucrative to me as well. But I want my customers to be successful with me as a partner, not in spite of me.

Ok, this is starting to sound like a sales pitch.

To summarize, in general, I advocate for IT consultants for small businesses and IT departments for medium to large sized companies (or perhaps specialized small businesses that have unusually high levels of IT needs). I think it's critical that your consultant is really, truly attempting to maximize your ROI, and that they're hired and rewarded in a manner that's consistent with this. The same applies for your employees -- your own IT staff must have support from management so that they can make their own positions more efficient and be rewarded for it. Contractors get greedy with high retainers, and employees get lazy with routine work. All organizations, large and small need to be aware of this and prepare for it in advance.

29Dec/100

George Orwell on Language

Posted many other places but I've always enjoyed this:

I am going to to translate a passage of good English into modern English of the worst sort. Here is a well-known verse from Ecclesiastes:

I returned and saw under the sun, that the race is not to the swift, nor the battle to the strong, neither yet bread to the wise, nor yet riches to men of understanding, nor yet favour to men of skill; but time and chance happeneth to them all.

Here it is in modern English:

Objective considerations of contemporary phenomena compels the conclusion that success or failure in competitive activities exhibits no tendency to be commensurate with innate capacity, but that a considerable element of the unpredictable must invariably be taken into account.

This is a parody, but not a very gross one.  [...] It will be seen that I have not made a full translation. The beginning and ending of the sentence following the original meaning fairly closely, but in the middle the concrete illustrations--race, battle, bread--dissolve into the vague phrase "success or failure in competitive activities." This had to be so, because no modern writer of the kind I am discussing--no one capable of using phrases like "objective considerations of contemporary phenomena"--would ever tabulate his thoughts in that precise and detailed way. The whole tendency of modern prose is away from concreteness. Now analyze these two sentences a little more closely. The first contains forty-nine words but only sixty syllables, and all its words are those of everyday life. The second contains thirty-eight words of ninety syllables: eighteen of its words are from Latin roots, and one from Greek. The first sentence contains six vivid images, and only one phrase ("time and chance") that could be called vague. The second contains not a single fresh, arresting phrase, and in spite of its ninety syllables it gives only a shortened version of the meaning contained in the first. Yet without a doubt it is the second kind of sentence that is gaining ground in modern English. I do no want to exaggerate. This kind of writing is not yet universal, and outcrops of simplicity will occur and there in the worst-written page. Still, if you or I were told to write a few lines on the uncertainty of human fortunes, we should probably come much nearer to my imaginary sentence that to the one from Ecclesiastes.

From George Orwell, "Politics and the English Language", 1946 -- emphasis is mine.

Perhaps my brain is turning to mush a bit young, but I'm often quite baffled by modern writers who seem to intentionally be making language become liquid and amorphous. Even more troubling, I find that people often will point to something like the parody sentence above and be convinced that because of its technical use of language, it's probably superior, and even more concrete. Loss of metaphor, use of highly specialized language, and tacking of rote phrases and clauses together results in a meaningless jumble of confusion.

See also: George Orwell on Writing

17Sep/100

Twitter: A great way to complain

I was pleasantly surprised recently to find a practical use for Twitter. I'm no Luddite, but I rarely find a lot of value in Twitter that I don't find elsewhere. I'm following a lot of tech writers/bloggers/developers and that can be good for keeping up with developing trends, but I digress.

The practical feature: Complaining.

We had a miserable experience at the local Red Robin recently (South Hill/Puyallup, WA). Dirty, long wait, poor waiter service, etc. I posted this on Twitter:

Just got back from #RedRobin -- disgusting.... that place has really gone downhill. Too bad.

Notice the tag on RedRobin. I was surprised when I fairly promptly got a reply on Twitter:

@andrewflanagan Yikes! Can you please send us the details/location at [email protected]? Thanks for your help.

The beauty of this is that anyone searching on Twitter for RedRobin will find my tag and see my post and my rotten rating. I sent an email, they replied (CC'ing a huge number of Red Robin staff) and I was asked if I wanted to talk to the manager.

This is pretty good service. My blog (yes, this one) is not exactly all that busy and I could have posted here for weeks without anyone at Red Robin being aware of it (or even if they were aware, they wouldn't care since it's not exactly all that visible).

So Twitter gives you visibility. Not just to a company, but to that company's customers. I suppose it's a little bit more like picketing a store instead of sending a letter to the management (which is more like a blog entry).

I also recently had an issue getting approved for our Bizspark account with Microsoft (you get free software -- essentially an MSDN subscription -- as well as help with your start up). Again I complained, and again I got a quick response (which was very civil). Interestingly, when I followed up via email, I was asked (somewhat rudely I would say) to remove my complaining post from Twitter. I complied, since they did fix the problem, but I'm somewhat surprised by just how much visibility I got.

What are your thoughts? Will the visibility last? Any similar experiences using Twitter or other social networks?

14Sep/103

Death of a Monitor

I have two of these at my desk:

I had for a while (since 2006 or so) and was really pleased with it. Good contrast and color, HDMI interface, very snappy. The controls are very awkward, but after initially configuring it, it was good to go. I purchased a second monitor intending to have a perfect matching set. The second monitor turned out to be a slight hardware revision that include a curved bottom bezel and a number of.... features that were quite annoying. First of all, unlike the first monitor of the same model number, it will not display it's "native" format of 1920x1200 so I'm stuck with it in 1920x1080. Not terrible, but awfully weird.

About a month ago, it suddenly started acting up. It would randomly just lose the signal and then a little later snap back on (almost like it had a loose connection). This condition went from slightly annoying to unusable within a week and then it stopped displaying at all at 1920x1080. I was able to get an image by reducing the resolution to 1280x768 but it had weird red overlays. My assumption was that it was failing and I bitterly unplugged it and went back to using one monitor. There went my productivity.

But thankfully, although I'm still mystified, the story has a good ending. I plugged my monitor back in a week ago and low and behold, the news of its death was greatly exagerated! It's been working flawlessly ever since. I think it may have been driver related but I'm just thankful it's back.

At my full-time gig, I also have dual monitors, although the overall resolution is a lot lower. I've found that it's a huge time saver... One side is my code, and the other is the dev web site. The problem is that now I'm spoiled; I tried to work recently on my 1360x768 laptop and felt like I couldn't see anything.

How about your setup? Do you use two monitors? If so, can you live without your second monitor once you've used it for a while?

Lifehacker has some great tips and links to tools for dual monitor setups.

19Mar/090

No Way…

I think I actually got a snippet of Symbian code to work on the first attempt! This is a first... Maybe I'm actually getting the hang of this. I just find the whole "descriptor" concept very odd.

Anyway, all I was trying to do was replace all plus signs with spaces. I normally wrestle with descriptor nonsense for a while but this time, I got it on the first try!

_LIT(TestData, "THIS+IS+A+TEST");
HBufC* heapBuf = HBufC::NewLC(255);
*heapBuf = TestData;
TPtr pHeapBuf(heapBuf->Des());
while (heapBuf->Find(_L("+")) > 0)
{
pHeapBuf.Replace(heapBuf->Find(_L("+")), 1, _L(" "));
}
 
CleanupStack::PopAndDestroy(heapBuf); //Don't forget!

Bleh... stupid Symbian. Thank goodness I didn't have to change the length of the descriptor...

21Jan/091

Variable Naming

Some in computer programming have insisted on using the prefix is for all boolean data types. I've been bumping against this lately. I think it's silly. It's a form of Hungarian notation which seems unnecessary considering that the compiler/interpreter in almost all cases will help us deal with type issues. For readabilities' sake, wouldn't it make sense to name something what it represents? For example, if the boolean variable represents the state of being done, I suppose isDone may be an OK name. But if it represents the state of something that may or may not have been done 3 years ago, a better name might be wasDone. What if we want special checking to take place if a flag is set? Should that flag be called isCheck? It seems silly -- maybe shouldCheck would work. What if we're talking about ownership or class relationship. isChild works as a name to indicate class relation, but hasChildren is a perfectly logical name to define the inverse relationship. I saw a few places that advocate the use of helping verbs (have, has, had, do, does, did, shall, should, will, would, may, might, can, could, and must) or verbs of being (am, is, are, was, were, be, being, and been) to prefix these names. This makes sense. However, we speak English and sometimes in English we drop helping verbs (think of did for example). Is something.didSucceed better or worse than something.succeeded? There are numerous similar examples.

I think in the end, naming variables to make them readable is much more important than following some convention. Or perhaps I should rephrase that: the convention we ought to follow is the convention of written English, not some tightly defined arbitrary subset.

8Jan/093

Driving me Crazy

Road to America by Macindow

One thought for alleviating some of the tension in driving:

Imagine each driver on the road around you is your mother.

Really, people -- it feels better to drive places and not get there as quickly as you can because you took the time to treat others with courtesy.

8Jan/091

Formats

I've been hitting this wall a lot recently. Just think about writing a document... Let's start with a simple document -- I just need section headers and simple wrapped paragraphs of text. No images, no tables, nothing complicated. I can do this in any simple text editor (Notepad, TextMate, SciTE, whatever). This works great at first. I can keep some notes in this format easily enough. It's easy to use -- nothing special to fiddle with.

Then something changes and I need some "special" formatting. Maybe some graphics, tables, more focus on things like margins, etc. We have a million options now. Convert it to Word? To Pages? (that's Apple's word processor for those unfamiliar) How about simply converting to HTML? I despise Word documents (especially because of the oddities associated with their formatting). Pages is nicer in a way (it doesn't get in your way while you're writing documents) but has many of the same problems. HTML is too loosely defined to display the same universally (on Firefox it will look great but something will inevitably go wrong on Safari/IE).

In the last couple years, I've started to use simple, consistent markup languages like WikiText, reStructuredText, etc. These have mostly been implemented on Wiki sites (like MediaWiki) but in theory, you could write a local application that used the same notation. These intermediate markup languages provide things like header formatting, table layouts, graphic alignment, etc. but don't tend to focus on the "page" related details like margins, headers/footers on printed output, and other details. They translate the result into a fairly rigorously tested standards-oriented HTML. This works fine for anything I don't intend to print into a glossy handout. Notes to myself, development and design comments, and many other daily working documents work well here.

Stack of Paper by cohdraBut then, after several weeks of tweaking a design doc, the PHB decides that he wants to see a copy of my design. He wants it printed. Printing the wiki-based version and handing it to him results in the comment "this isn't using standard headers/footers on each page is it?" So now I'm stuck. I paste the output into Word and spend far too long formatting it for his consumption. He marks up the Word copy and I had to merge my changes back into the wiki.

What a pain.

At work, I'm mostly stuck with Microsoft tools so I tend to use Word if I have to use anything complex. However, elsewhere I typically take an additional step: converting my Word/Pages output to Adobe PDF. It's sort of the universal printable format and it works for most things.

Wiki's have definitely answered my need for most documents. The only link that's missing is how to enable Wiki's and other screen-displayed documents to be able to be easily converted to printable documents (with  header/footers, page numbers, etc.). Ideally, there could be some meta-tags that did this sort of thing. The problem currently is that while a slightly varied HTML rendering is acceptable when viewing on a screen, the printable layout MUST conform to a strict standard. Maybe someone will (or already has) put together a plugin or something that will let this happen easily. I eagerly await the day...

Update: I will mention here that under the leading of a certain Coder, I was able to help build at least a partial tool that did this exact thing for my last position. It parsed MediaWiki content and converted to Word format. This was nice but it was a little limited. I'd like to see a more generic solution in place -- especially one that would allow output from the browser without having to have Word at all.

28Nov/081

George Orwell on Writing

Not that I follow these rules, but I've had this excerpt kicking around for a while in my notes and figured I'd post it somewhere I could reflect on it:

  • Never use a metaphor, simile, or other figure of speech which you are used to seeing in print.
  • Never us a long word where a short one will do.
  • If it is possible to cut a word out, always cut it out.
  • Never use the passive where you can use the active.
  • Never use a foreign phrase, a scientific word, or a jargon word if you can think of an everyday English equivalent.
  • Break any of these rules sooner than say anything outright barbarous.

"These rules sound elementary, and so they are, but they demand a deep change of attitude in anyone who has grown used to writing in the style now fashionable. One could keep all of them and still write bad English, but one could not write the kind of stuff that I quoted in those five specimens at the beginning of this article"*

From George Orwell, "Politics and the English Language", 1946.

*To see the full context of what he was talking about, you can take a look at the entire essay here.