Anything, really http://byte.atrona.ch Nothing beats a nice title. posterous.com Thu, 12 Apr 2012 00:36:00 -0700 Microsoft mouse USB dongle as pure bluetooth receiver. http://byte.atrona.ch/microsoft-mouse-usb-dongle-as-pure-bluetooth http://byte.atrona.ch/microsoft-mouse-usb-dongle-as-pure-bluetooth

If you want to use the bluetooth receiver provided with some Microsoft mice with any bluetooth device, you have to switch it to hardware mode to make it a real bluetooth receiver.

lsusb output with mine:

Bus 001 Device 003: ID 045e:0707 Microsoft Corp. Wireless Laser Mouse 8000Bus 001 Device 004: ID 045e:0713 Microsoft Corp. Wireless Presenter Mouse 8000

Download Intellipoint (I used 8.x for Windows 7 64-bit) and:

  • start "Microsoft Mouse"
  • go to "Wireless" tab
  • in "Bluetooth Connection" group, click "Advanced" button
  • change to "Hardware mode"

I actually did that in a Win7 Virtualbox VM since my host is an Archlinux machine. You may have to replug the device a number of times (once for clicking on 'advanced' to work, once when having set the dongle to hardware mode) and don't forget to reconnect it to the guest if needed (the "Microsoft Presenter Mouse" actually became a "Microsoft Transceiver v3.0")

Now I can use it under the Archlinux host with all my bluetooth devices.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Fri, 17 Jun 2011 02:30:00 -0700 Trouble with audio device http://byte.atrona.ch/trouble-with-audio-device http://byte.atrona.ch/trouble-with-audio-device

Error message:

  • in english: "A device ID has been used that is out of range for your system"
  • in french: "Un numéro de périphérique en dehors de la portée de votre système a été employé."

This error message comes from the WinMM stack and is error code 2.

My context is as follows, but apparently this can happen with various other hardware/software combinations so this is really for the sake of reference.

VMware Player with an Ubuntu 11.04 Natty Narwahl guest on a Windows 7 64-bit host fails to connect or keep connected the guest virtual soundcard to the host. Although it does not quite matter the sound card is a Realtek HDA on a Dell XPS desktop machine.

It appears there is some sort of mismatch between what the host provides and what the guest asks for. This seems to happen when the host card and driver knows if things are pluggen in each of its jack ports, reports it to the OS, which then refuses to proceed with some sound system initialization. This can also happen when something went wrong somewhere in the driver system (e.g broken or mismatched registry settings).

The workaround for me was to disable all audio input in the virtual machine. To do so, go to Sound Preferences, go to the Hardware tab, and select a Profile in the list which matches what you want. I selected "Analog Stereo Output" instead of "Analog Stereo Duplex". This way VMware won't try to access a nonexistent microphone. I also had to reenable and then redisable the login screen sound for that sound not to play and therefore the soundcard not to disconnect when reaching the login screen, as apparently this area of the system does not respect sound settings.

Others have reported that plugging a microphone or speakers in the proper ports could fix the issue. There are also reports that disabling a number of enhancement features  like noise cancellation would work too. Another solution in case the driver system went broken somehow is to uninstall/remove the device from the Windows Device Manager and/or try to switch or reinstall drivers. For my soundcard, Realtek HDA drivers were installed and I uninstalled them, then Windows found some generic HDA ones straight from Microsoft. This last step did not fix anything for me but interestingly enough this removed the crapfest that is the Realtek sound panel.

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Wed, 13 Apr 2011 07:36:00 -0700 Evaporative Cooling http://byte.atrona.ch/evaporative-cooling http://byte.atrona.ch/evaporative-cooling

There are some patterns that you experience and recognize, but that you fail to name or define. Then someone comes up with a picturesque name precisely capturing its essence. This is one of those:

[Evaporative Cooling] occurs when the most high value contributors to a community realize that the community is no longer serving their needs any more and so therefore, leave. When that happens, it drops the general quality of the community down such that the next most high value contributors now find the community underwhelming. Each layer of disappearances slowly reduces the average quality of the group until such a point that you reach the people who are so unskilled-and-unaware of it that they’re unable to tell that they’re part of a mediocre group.

(Via Another Way to View the “Decline” of HN)

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Sun, 09 Jan 2011 12:57:05 -0800 Of analogies and monocultures http://byte.atrona.ch/35041667 http://byte.atrona.ch/35041667

Analogies are great tools. Their goal is to explain stuff pertaining to a certain context to someone which has insufficient knowledge about that context, but sufficient knowledge about another one where similar stuff happens.

Basically you extract meta-stuff and put it in a known context so that you can make a point. Analogies do not make a point by themselves. Ever.

Take for example this analogy rebuttal, wherein software monocultures are equated to Ireland physical monoculture which led to a disaster.

I think that the analogy still makes some sense if you apply it to the same scale.

The biological case "Ireland farmed one species of potatoes. Said potatoes went irrevocably compromised. Ireland hungered to death." cannot be compared to a single corporate IT infrastructure.

Imagine that (admittedly non-realistic) case: "Ireland relies solely on the Microsoft ecosystem. Said ecosystem gets massively infected by a critically damaging virus. Ireland economy grinds to a screeching halt.", that is the proper analogy. If half of the companies in the country had its IT infrastructure based on another system, then half of the country would still run. Just as half of the potatoes would be palatable.

At the other end of the scale, a single corporate IT infrastructure with heterogeneous ecosystem would be more like a single farmer cropping multiple species of potatoes. It can indeed get costly as at this scale managing the peculiarities of each species (soil, maturity...) could become complicated. Yet it can still be quite worth it.

Real life example: when McAfee AV false-positived and quarantined some kernel32.sys or whatever, turning our Windows machines into useless boxes, we could still save the day thanks to our few Linux and Mac machines.

So, making a point and explaining it through analogy is valid, yet analogies do not make a point by themselves. More often than not it is a double-edged sword that might bite back while you end up being sidetracked in endless arguments irrelevant to the initial context, and therefore issue.

Therefore, make your point first. Explain the context as best as you can. Then and only then enlighten the context with a thoroughly thought analogy. Only by keeping both clearly separate can you identify the analogy shortcomings (or lack thereof).

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Mon, 03 Jan 2011 10:06:00 -0800 We are away http://byte.atrona.ch/we-are-away http://byte.atrona.ch/we-are-away

Hah! Miraculously, my Tumblr blog has been indexed and "sysv_ipc python aix" is finally ranked correctly by Google, blekko and DuckDuckGo.

Too late Tumblr.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Tue, 30 Nov 2010 12:59:00 -0800 And then, it was indexed http://byte.atrona.ch/and-then-it-was-indexed http://byte.atrona.ch/and-then-it-was-indexed

With no intervention whatsoever on my part except updating the site link on my Twitter profile, the very blog you're reading has been spidered by GoogleBot. The irony is that right now, googling for 'lloeki tumblr' turns up the aforementioned Posterous article about how the Tumblr black hole sucks at being indexed.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Tue, 16 Nov 2010 13:54:00 -0800 Try, and try again http://byte.atrona.ch/try-and-try-again http://byte.atrona.ch/try-and-try-again

So I'm giving posterous a try.

Now the above phrase really is supposed to be the conclusion of the current post.

My previous blog was on Tumblr. I have been satisfied with Tumblr from a writer's point of view (Markdown!) or even a designer's point of view (those themes are really easy to customize), yet it completely fails at actually making its content available to search engines.

Now you see, Tumblr is big. Failing to percolate content through search engines means that whatever bit of information you put in Tumblr instantly accretes into its mass in a trajectory hopelessly leading well beyond its event horizon. Seriously, have you ever ended up on a tumbr page from a search engine?

Tumblr is a creepy, useless black hole.

The content I put online is often some result of research pertaining to some peculiar issue I happened to have to solve out of sheer need. By virtue of nerdiness affliction, I also happen to hate kludges and more often than not will try hard to put together a proper solution, or failing that, a supposedly nice hack. So, having spent a handful of hours sorting through a boatloat of tiny, scattered bits of information and assembling the relevant components into a working solution, I happen to think that it would actually be nice to others to not waste the processing time I just spent swimming through swarms of data carefully filtering the signal out of pure noise.

Having that content not crawlable by a search spider, folks, is the absolute deal breaker.

Now stops the rant.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Fri, 16 Apr 2010 14:57:00 -0700 Compiling SYSV_IPC python module with GCC on AIX 5.2 http://byte.atrona.ch/post/525726296 http://byte.atrona.ch/post/525726296

I had a need to use good old SYSV message queues to interoperate with a bunch of old C programs, straight from python. Come in sysv_ipc module to the rescue, which works great on a variety of systems, but I need it on AIX.

Using Perzl wonderful rpm packages for AIX, I was able to compile it with GCC 4.2 and setup it into Python 2.6.

Modify common.h to unset SHM_SIZE (Obsolete step as of sysv_ipc 0.6):

#undef SHM_SIZE

enum GET_SET_IDENTIFIERS {

Export those two vars:

LDSHARED="/opt/freeware/lib/python2.6/config/ld_so_aix gcc -bI:/opt/freeware/lib/python2.6/config/python.exp"
CC="gcc"

You can then go on and:

python setup.py install [--user]

Update: common.h should not be modified anymore.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Wed, 07 Apr 2010 19:33:00 -0700 Play a MP3 file with pymad and pyaudio http://byte.atrona.ch/post/503602749 http://byte.atrona.ch/post/503602749

Based on the wave example from pyaudio:

import pyaudio
import mad
import sys

if len(sys.argv) < 2:
    print "Plays a wave file.\n\n" +\
          "Usage: %s filename.wav" % sys.argv[0]
    sys.exit(-1)

mf = mad.MadFile(sys.argv[1])

p = pyaudio.PyAudio()

# open stream
stream = p.open(format =
                p.get_format_from_width(pyaudio.paInt32),
                channels = 2,
                rate = mf.samplerate(),
                output = True)

# read data
data = mf.read()

# play stream
while data != None:
    stream.write(data)
    data = mf.read()

stream.close()
p.terminate()

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Wed, 07 Apr 2010 19:32:00 -0700 Play an MP3 file with pymad and pyao http://byte.atrona.ch/post/503600551 http://byte.atrona.ch/post/503600551

This is for Mac OS X, adapt to your needs:

import mad, ao, sys

mf = mad.MadFile(sys.argv[1])
dev = ao.AudioDevice('macosx', bits=32, rate=mf.samplerate(), channels=2)
buf = mf.read()
while buf != None:
    dev.play(buf, len(buf))
    buf = mf.read()

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Wed, 07 Apr 2010 19:18:41 -0700 Crash on object deletion in pyao and pyogg http://byte.atrona.ch/post/503577816 http://byte.atrona.ch/post/503577816

The author of pyogg goofed up on python object deletion in the wrapper. This was reported.

Unfortunately libao (0.82) is also affected, and there’s no action even on the previous pyogg bug. It causes a “glibc double-free” on Linux and a “pointer being freed was not allocated” on Mac OS X.

The project seems quite dead, but is merely a wrapper to the C libs where the real action takes place, so there’s not much of a fuss to have it unmaintained.

Here is the patch against pyao:

--- src/aomodule.c.orig 2010-04-07 19:06:45.000000000 +0200
+++ src/aomodule.c  2010-04-07 19:06:56.000000000 +0200
@@ -150,7 +150,7 @@
 py_ao_dealloc(ao_Object *self)
 {
   ao_close(self->dev);
-  PyMem_DEL(self);
+  PyObject_DEL(self);
 }

 static PyObject *

And for reference, the patch against pyogg:

Index: legacy/pyvorbis/pyvorbisfile.c
===================================================================
--- legacy/pyvorbis/pyvorbisfile.c  (revision 20)
+++ legacy/pyvorbis/pyvorbisfile.c  (working copy)
@@ -173,8 +173,7 @@
   if (ret == NULL) {
     PyMem_DEL(newobj);
     return NULL;
-  } else
-    Py_DECREF(ret);
+  }

   return (PyObject *) newobj;
 }
@@ -191,11 +190,13 @@
        close */
     Py_DECREF(py_self->py_file);
   } else {
-    /* Otherwise, we opened the file and should close it. */
-    fclose(py_self->c_file);
+    /* Do NOT close the file -- ov_open() takes ownership of the FILE*,
+       and ov_close() is responsible for closing it. */
   }

-  PyMem_DEL(self);
+  free(py_self->ovf);
+
+  PyObject_DEL(self);
 }

 static PyObject *

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Fri, 02 Apr 2010 00:34:20 -0700 Uninstalling ActivePython and ActiveTCL http://byte.atrona.ch/post/489872930 http://byte.atrona.ch/post/489872930

Little script to easily uninstall either. Take care to adapt to your needs.

#activepython
sudo rm -R /Library/Frameworks/Python.framework /Applications/Python\ 3.1 /usr/local/bin/{2to3*,py*,idle*}

#activetcl
sudo rm -R /Library/Frameworks/{Tcl,Tk}.framework /Applications/Utilities/Wish\ 8.5.app /usr/local/bin/{tclsh8.5,wish8.5} /Library/Documentation/Help/ActiveTcl-8.5

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Fri, 02 Apr 2010 00:31:27 -0700 Untitled http://byte.atrona.ch/post/489868367 http://byte.atrona.ch/post/489868367

Tumblr_l07ykfsas81qzvclyo1_1280

XKCD easter egg commands

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Mon, 29 Mar 2010 10:55:09 -0700 Untitled http://byte.atrona.ch/post/481309326 http://byte.atrona.ch/post/481309326

Lovely command to obtain the processes (or rather, PID) using a socket port (here 23) on AIX:

$ netstat -Aan  | egrep '\.23 ' | awk '{print $1}' | \
    sed -e 's/^\(.*\)$/sockinfo \1 tcpcb/' | kdb | egrep '^pvproc' | awk '{print $4}'  | sort | uniq | \
    sed 's/^\(.*\)$/hcal \1/' | kdb | grep Value | awk '{print $6}'

Useful when you don’t have lsof at hand.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Fri, 29 Jan 2010 23:09:20 -0800 Untitled http://byte.atrona.ch/post/360205712 http://byte.atrona.ch/post/360205712

Tumblr_kx147kwwjr1qzvclyo1_1280

A little bit of humor.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Thu, 07 Jan 2010 19:24:03 -0800 Untitled http://byte.atrona.ch/post/321870752 http://byte.atrona.ch/post/321870752

Stringio

(via peterpanandwendyturnedoutfine)

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Thu, 07 Jan 2010 19:23:27 -0800 Untitled http://byte.atrona.ch/post/321870008 http://byte.atrona.ch/post/321870008
Scar tissue is stronger than regular tissue. Realize the strength, move on.

Henry Rollins (via malty)

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Sun, 29 Nov 2009 10:34:39 -0800 Apple should lower their prices. Not. http://byte.atrona.ch/post/261896939 http://byte.atrona.ch/post/261896939

I am sick of hearing all around things like:

Hey, Apple hardware/software is awesome, but is too pricey! They should lower their prices and then sell millions and crush everyone! And then masses could bathe everyday in Apple goodness!

Apple cares less about market share. Apple cares about profit by relying on excellence.

It’s just like exotic cars. Of course Porsche, or Ferrari, or Aston Martin, or Bugatti, whatever would sell more of their cars if they divided their price by two or three. But nobody wants that, not (e.g.) Porsche nor their customers. Porsche wants to make the very best cars and make profit selling them, customers want the very best cars and pay the matching price. Excellence is much more than the simple sum of its parts, and is therefore paid (exponentially) more, but without that hefty price tag, there would be no will of attaining excellence from Porsche, nor exigence of excellence from their customers.

Apple works just the same, only it’s just not the same playground.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Sun, 15 Nov 2009 18:07:00 -0800 MonoRail custom scaffolded views http://byte.atrona.ch/post/244931961 http://byte.atrona.ch/post/244931961

A long time ago, I needed (and still need) Castle MonoRail to use custom NVelocity scaffolded views instead of the embedded ones. This feature is supposed to be present, unfortunately a bug prevents it from picking filenames correctly.

I reported MR-ISSUE-537 with the text above and a patch against svn revision 5884. We’re at r6332, the patch still applies cleanly (read: it has not been checked in). I sure can be comprehensive, but reviewing and applying a patch that trivial is quite a no-brainer.

Scaffolding uses embedded views, unless some are provided locally. Unfortunately, this feature is broken for all scaffolded views except list.vm. It boils down to the various ComputeTemplateName method being vastly incoherent and returning broken paths.

I successfully patched the affected files and rebuild MonoRail. The feature then works as expected.

Here is the patch, if you ever need scaffolding to behave:

Index: MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/RemoveAction.cs
===================================================================
--- MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/RemoveAction.cs   (revision 5738)
+++ MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/RemoveAction.cs   (working copy)
@@ -35,7 +35,7 @@

        protected override string ComputeTemplateName(IControllerContext controller)
        {
-           return String.Format(@"{0}\{1}removed", controller.Name, Model.Type.Name);
+           return controller.Name + "/remove";
        }

        protected override void PerformActionProcess(IEngineContext engineContext, IController controller, IControllerContext controllerContext)
Index: MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/UpdateAction.cs
===================================================================
--- MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/UpdateAction.cs   (revision 5738)
+++ MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/UpdateAction.cs   (working copy)
@@ -36,7 +36,7 @@

        protected override string ComputeTemplateName(IControllerContext controller)
        {
-           return controller.Name + "\\update{1}";
+           return controller.Name + "/update";
        }

        protected override void PerformActionProcess(IEngineContext engineContext, IController controller, IControllerContext controllerContext)
Index: MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/CreateAction.cs
===================================================================
--- MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/CreateAction.cs   (revision 5738)
+++ MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/CreateAction.cs   (working copy)
@@ -33,9 +33,9 @@
        {
        }

-       protected override string ComputeTemplateName(IControllerContext controllerContext)
+       protected override string ComputeTemplateName(IControllerContext controller)
        {
-           return controllerContext.Name + "\\create";
+           return controller.Name + "/create";
        }

        protected override void PerformActionProcess(IEngineContext engineContext, IController controller, IControllerContext controllerContext)
Index: MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/EditAction.cs
===================================================================
--- MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/EditAction.cs (revision 5738)
+++ MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/EditAction.cs (working copy)
@@ -34,7 +34,7 @@

        protected override string ComputeTemplateName(IControllerContext controller)
        {
-           return controller.Name + "\\edit";
+           return controller.Name + "/edit";
        }

        protected override void PerformActionProcess(IEngineContext engineContext, IController controller, IControllerContext controllerContext)
Index: MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/NewAction.cs
===================================================================
--- MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/NewAction.cs  (revision 5738)
+++ MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/NewAction.cs  (working copy)
@@ -49,7 +49,7 @@
        /// <returns></returns>
        protected override string ComputeTemplateName(IControllerContext controller)
        {
-           return String.Format(@"{0}\new{1}", controller.Name, Model.Type.Name);
+           return controller.Name + "/new";
        }

        /// <summary>
Index: MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/ConfirmRemoveAction.cs
===================================================================
--- MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/ConfirmRemoveAction.cs    (revision 5738)
+++ MonoRail/Castle.MonoRail.ActiveRecordSupport/Scaffold/ConfirmRemoveAction.cs    (working copy)
@@ -37,7 +37,7 @@

        protected override string ComputeTemplateName(IControllerContext controller)
        {
-           return controller.Name + "\\confirm";
+           return controller.Name + "/confirm";
        }

        protected override void PerformActionProcess(IEngineContext engineContext, IController controller, IControllerContext controllerContext)

Enjoy.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki
Sun, 08 Nov 2009 16:29:00 -0800 Underrated technology http://byte.atrona.ch/post/237062124 http://byte.atrona.ch/post/237062124

Since the advent of graphical environments, the desktop metaphor has become the core of the modern computer experience. It is the very first thing a user will experience of his computer. It is also the least spoken about, and quite underrated.

The desktop metaphor presents a number of interesting side-effects inferred from its very design, or rather non-design. Being a bunch of icons of any kind that can be placed in any way on any background it is essentially a sandbox, precisely like a physical desk. As such, a desktop eventually ends up being very personal.

Everything starts with the background. I swear the first thing - or close enough - anyone has been taught on a modern computer is how to change the desktop background. For newcomers to the digital world, this feat alone provides both a sense of achievement and make that bland, beige or grey thing a familiar place to come back to. “I can master this thing, I can make it mine”. Instant - although partial - relief.

Somehow though, the sense of privacy is being skewed when people use computers. As a consequence, I have been shocked numerous times at how intensely I have been assaulted by a sudden jump into someone’s privacy, projected on a wall in all its 3x2 meters glory.

At a glance, a desktop can give a lot of insight about that person. Are the icons lined up? are they snapped to a grid? are they sorted by kind, name, date? are default or unusual settings in use? are they grouped manually? are they covering the background? From the position, grouping, ordering, or absence of icons down to the kind and name of what they represent is a showcase not of someone computer’s mastery but of his thought process. And for decades since the desktop era, I couldn’t help but notice that the vast majority of users digital desktops are a mess.

Now, computers being made to help you achieve tasks, and the desktop being so emphasized, you have to ask yourself: how is your desktop integrated into your workflow? This is an important question, because this is all about reducing friction. Just as the digital desktop took inspiration in the physical world, take a look at your real desk.

My physical desk is minimalist, up to the point that I do not need a dedicated desk at all. It serves as a temporary workspace, a short-lived sandbox. It fulfills my spatial requirement for the task at hand. My digital desktop is no exception and shares the same workflow. If I ever begin to steer away from that workflow and use my desktop as an inbox, or a permanent storage space, a huge mess ensues in a very short time span.

So, whatever your workflow is, keep your desktop true to it: it’s very little overhead to reap huge benefits in the end.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/670336/default.png http://posterous.com/users/4wK9iOcWwy41 lloeki lloeki