29 August 2010

Lack of vision

<lis0r> that's because you're an idiot with no vision
<lis0r> take your head out of stallman's arse, and take a look around you

So I ended up having a messy fall-out with pretty much everyone in the York computer science IRC channel, mostly exacerbated by my general lack of argumentative skill. However, I'm going to continue my train of argument in a somewhat more structured and premeditated format here, because I need something substantial to post so I look as if I have substance.

My point is that even in the age of immersive 3D personal computer interfaces, I believe that I and others will still use the "orthodox" 2D display/keyboard/mouse interface design.

Here are my points:

  1. Immersive 3D destroys the personal computing metaphor.

    By the "personal computing metaphor," I mean the idea that the personal computer is a tool for information processing. It's a small point and not one that many will get worked up on, but I feel that the disconnection between the computer and its environment - the computer being an object in its environment - is an important one.

    Many years ago, Microsoft released an graphical user interface called "Bob," which replaced the window-based metaphor of Windows 3.x's Program Manager and File Manager with a virtual home, in effect making the computer interface emulate the environment the computer itself existed in. The user interface was not successful, and distanced people from the computer's main goal: to process information, and do it quickly.

    The most successful of today's user interfaces work in conjunction with the idea that the computer is a tool, and expose the computer's functions in a way designed for maximum usability, rather than making the computer behave like an environment in itself. By making the computer its own environment (admittedly different to crudely emulating one), in my opinion the implication is that the purpose of computing is shifted from using the computer as a data processing tool to using the computer as a virtual home. This is bad because user interface designers will likely try to make the immersive 3D environment more and more like a virtual home (cf Bob), and forget the reasons people use the computer inside their existing home in the first place.
  2. Don't fix what isn't broken.

    We have been using 2D monitors, keyboards and mice for decades, and hardly ever have people complained about their usability for general computing.

    Some businesses still make use of old hardware and software, sometimes many years after officially becoming obsolete. Why? Because it would be a waste of time and money (training and maintenance costs as well as initial purchase) to upgrade. The current system serves its purpose and serves it well.

    People will still use the 2D interface because it serves its purpose well. It's served its purpose since the dawn of graphical computing.
  3. 3D processing wastes system resources.

    With GPUs becoming ever more usable in general-purpose programming, I expect that by the time immersive 3D environments hit the market, they will already be very useful in complex general-purpose information processing. BOINC, a major distributed computing platform running such projects as protein folding simulators (which could be useful in medical breakthroughs in the near future), can already use some GPUs to accelerate processing tasks.

    3D immersive environments would need quite a bit more computer processing than that which is already used in 3D gaming. When the computer is being used for information processing (eg, not a game or for multimedia, both situations that I imagine immersive 3D may, just may, be useful and relevant), the overhead caused by the 3D processing will result in resources that could be used for the information processing being instead deferred to rendering the 3D scene. (Especially compiling!)
  4. 3D technology will be expensive.

    Some of us will have better things to do with our money than blow it on the latest and greatest technological gimmicks. Some people just won't be able to afford the new technology - are they idiots for being such?

    Eventually, the price will go down, but by then we will have people using 3D interfaces among people using 2D interfaces, and it will take quite a while for the latter market to become entirely extinct. DVDs came out in 1997 in the US, and VHSes took until 2008 to completely drop out of use there for film releases - a decade. Even then, VHSes are still in use across the world, and I dare bet that there are still many people who cannot afford to replace their VHS systems with DVD systems.
  5. Leaving one enviroment to enter a virtual environment has many drawbacks.

    Right now, with my computer being part of its environment, if I want to leave the computer and use another item in my environment (the bedroom), say my DS-8 keyboard, I simply get up from my chair and walk over to the next item. I can see it without changing anything other than turning my head to the left. I can see that it is on and that its amplifier is also on. In order to return to focussing on the computer, I just turn my head back to the right.

    If I were in an immersive 3D computer environment, to operate my keyboard I would first have to remove the 3D display equipment. At this point I leave one environment, the computer, and enter another, the bedroom. The two environments may be completely dissimilar, and I would likely need to take some time to acclimatise to the change in environment, just as I would if I walked outside of the bedroom and into the hallway.

    To check the state of the keyboard, which due to its own state of being technologically obsolete (but still fun to use) is not integrated into the computer environment, I must change environments. This concept is strange enough (for me, at least) to write about, let alone experience. It also removes a large part of the convenience of keeping everything in one environment - again, to look to something to the left of me in the real world, I need only turn my head left.

    Even worse is that the immersion of oneself in another visual environment is that it deprives us of the advantages of being to see our real environment. An unrealistic situation, I know, but if I'm surrounded by my file system, I can't see the person that just silently entered my room with a bloodstained knife and the look of murder in his eyes.

    Of course, augmented reality as opposed to replacing reality (overlaying one environment on top of another one, instead of replacing it) would go a long way to alleviating this issue. However, there is still the, admittedly even less likely but still possible, issue of that window I'm being shown in the top-left corner of my eye obscuring my vision of the knife in the hand of the person that just entered the room. For all I know, he could be holding a laser pen.
  6. Sight immersion is not everything.

    In order to really blur the difference between the real world and the simulated computer environment, there must be a believable simulation of all the other senses, too. This includes hearing (surround sound), touch (which would likely require many technological advances to simulate accurately), taste and smell (even less possible to emulate, without direct access to the brain).

    If my eyes are seeing a green field of grass, my ears are hearing the buzzing of bees, and my nose is smelling the moulding contents of the bin bag I'm sharing my real-life room with, then my brain is going to be rightly confused. If I'm watching the grass on a monitor and hearing the bees on a pair of speakers in front of me, I know that I'm in a room with the bin bag (which should really be taken out) and the other cues are coming from a simulation.

    On a related note, I worry that the immersion's depth will eventually improve to the point where it is impossible to tell what is reality and what is not. Fiction has dictated the results at least ten dozen times over, and to me it's still a very nightmarish concept.
Feel free to argue and disagree with the points I'm putting forward here, but I feel that at least some of the things I've said are perfectly valid points.

Also, I believe that just because I'm reluctant to embrace one narrow aspect of computer science innovation does not immediately make me an "idiot" with "no vision" who is unworthy of receiving a degree. There are many branches to computer science, and I believe that in the next three years I will find one I do agree with.

EDIT: Edsger Dijkstra, one of the most famous computer scientists of all time, didn't use a computer to write his theoretical manuscripts. A true idiot, I'm sure you'll disagree.

26 August 2010

Emergency exeunt

Sounds like a band name.

Today, I ported namcap, a pacman package analyser and sanity checker, to Arch Hurd's AUR.

The port is a bit flaky - I had to replace an entire module with a quick-fix kludge because it depended on ldconfig to find out where all the shared objects in a system were (Hurd not having ldconfig), and there seems to be a bit of trouble with dependency and permissions checking - but otherwise namcap seems to be functional and can be used to check your Arch Hurd packages for problems before they hit the AUR. It's even been patched to kick up a fuss if you use /usr (which is deprecated on Arch Hurd)!

24 August 2010

I have a github

but nowt in it. (Literally, as of time of writing.)

http://github.com/CaptainHayashi

In other news, finally managed to coax X into working on Arch Hurd (or, in my case, something more like Arch Hurp*), so I can now crash the Hurd in full 24-bit glory. That's got to be progress, right?

Thanks to everyone in Freenode #archhurd for putting up with me this long!


* Hurp a derp, a deedly derp. Hurrr durrr derpity derp. Derp.

22 August 2010

I don't know how to... not.

And another post today! God, is anyone ever going to read this thing?

I thought I'd just plonk down some notes regarding Arch Hurd, a distribution of the GNU Hurd suite. For those of you who don't know, the Hurd is the GNU project's attempt to replace the UNIX kernel with a series of servers (daemons) working in user-space above the GNU Mach microkernel.

I've managed to install Arch Hurd on a spare computer, thanks mainly to the efforts of maintainer barrucadu, and am going to be taking it for a spin over the next n days/weeks/months.

The Hurd is quite incomplete (it shows when such basic programs as ping fail due to missing protocol support) but already the structure seems to be something special. It boasts such features as multiple UIDs and GIDs per file, translators (allowing programs to handle input/output to files and directories, so that every access to that file/directory triggers that program. It's how the Hurd implements filesystems and mounting, and even allows for more complex but transparent operations as things from CD blocks to FTP and even HTTP content can be boiled down into the same file I/O system local files use)

Installing Arch Hurd at the moment is a somewhat involved process, as there are a few parts of Arch Linux's installer that don't yet work well with the Hurd, or parts of the Hurd that don't work well yet with the installer. Below are a few things I'm going to scribble down for the benefit of myself and possibly anyone actually reading this damned thing.

Please note that I don't really have the faintest clue what I'm doing, though most of the misguided information I'm farting out here comes from vague understanding or misunderstanding of what has been said before by people who do know what they're doing, so pay extreme caution if I recommend that anyone does anything with their system now or any time in the future.

- Visudo doesn't work, claims file is in use. -


EDIT: As of writing (24th of August), a fixed version of sudo is available in the testing repository.


This is due to the Hurd not supporting the file lock system call visudo uses normally, lockf().

Switching visudo to flock(), a different and supported system call, seems to work. In order to do so, use the ABS to pull a copy of visudo from the Arch Hurd repositories, using makepkg -so to save a local copy of the source. Then cd into the source and apply the following change (pulled from a debian-hurd mailing list):

~~~ snip ~~~
diff -r 91d8979bd32f configure.in
--- a/configure.in Thu May 06 19:39:12 2010 +0200
+++ b/configure.in Thu May 06 19:40:22 2010 +0200
@@ -1706,6 +1706,9 @@
;;
*-gnu*)
OSDEFS="${OSDEFS} -D_GNU_SOURCE"
+ # lockf() isn't implemented on the hurd -- use flock instead
+ ac_cv_func_lockf=no
+ ac_cv_func_flock=yes
;;
esac

~~~ snip ~~~



Another thing that might help is to scroll down into the same configure.in file where it mentions LOCKF then FLOCK in that order, and switch them around so the configure file tries to find FLOCK first. I don't know the repercussions of changing the locking call, security or otherwise, except that it made visudo run on my system.

Another change I made on my local copy of sudo was (again in configure.in) to change env_editor to on. (There are probably cleaner ways to do it - in fact, there should be a command line flag to ./configure that does the job - I just failed to get it to work (and happened to be poking in configure.in anyway)) This makes (or should make) visudo respect EDITOR and VISUAL environment variables, which apparently compromises security - but I can't fathom vi, so I like it being there so I can use nano or emacs with visudo.

Then, run autoconf on the configure.in and either ./configure and make (for a local visudo binary) or try going back to the pkgbuild and makepkg -e. (This didn't work when I tried it, though.)

/sbin/adduser: cannot make pipe for command substitution: Address family not supported by protocol

The following as root might help:

touch /servers/socket/1
settrans -fgap /servers/socket/1 /hurd/pflocal

(thanks to barrucadu)

Sierpinski triangles IN SPACE

To conclude the madness, here's the third and final Sierpinski triangle program my twisted mind has forced me to code:

C-C-C-C-CHAOS GAME

This version uses what Wikipedia cheerfully refers to as a http://en.wikipedia.org/wiki/Chaos_game to very slowly and painstakingly conjure a Sierpinski triangle out of a set of slightly randomised points.

The process results in an end result somewhat like this:

Out of chaos, order.

I apologise in advance for the state of the code - especially the fact that I've left a remnant of the iterative version's triangle-drawing code in as part of the method to start the chaos game. Also, the program deliberately ignores the first 6 points, as the first points have a tendency not to lie in the Sierpinski triangle.

I promise that this is the last you'll ever hear of the damned things for quite a while.

Sierpinski triangles, oh my

<barrucadu> I recommend a fractal generator. It's nontrivial (even if you only do mandelbrot sets), and generates pretty output :)


Circadian rhythms are delicate things.

Mess with your circadian rhythm, and you may end up unable to sleep at night and unable to stay awake during the day.

Really mess with your circadian rhythm, and you could end up doing something like this.

It's a lightweight and quite cruddy Sierpinski triangle renderer I wrote for the express purpose of fulfilling the above life goal.

It's one letter away from being called "strangle"!
It uses C implementations of the Wikipedia pseudocode for Bresenham's line-drawing algorithm and an optimised boundary fill to draw and then fill in the triangles. Only integers are used directly - no floating point logic in the main code file. The x86_64 binary when compiled with clang is also only 14kB in size. Uselessness has never been so compact!

Unfortunately, it's not a terribly accurate renderer - the result is horrendously aliased (and with integer division always rounding to zero, holes are a bit further up sometimes than they should be) - and it's specifically coded to only work if the triangle bases are parallel to the X axis (this assumption allowed me to completely skip using trigonometry to draw the triangles). But hey! It draws graphics! It comes with a default colour set of seafoam on navy! What more could you possibly want!?

Possibly coming soon: something we can all use.


Also, yes, I use XFce.


EDIT: I realised somewhat late that there's little point to the renderer drawing the seafoam triangles over and over again when it's really the "hole" triangles that get changed each iteration, so I simplified the code somewhat. The renderer is now even smaller than ever (11kb stripped x86_64 clang), but the render quality has dropped a bit (since the holes are now eating mercilessly into the triangle without the triangle being able to defend itself with redraws):




The optimised (or not? you decide) renderer is here.

E1M1

Bloody hell, I was such a whiny brat three years ago.

I've just had to reclaim this blog - which was last updated from a wifi point on Noah's Ark - from such delightful posts as "Waah! I'm only in the chorus of the school musical! I want to die!" and "lol I'm working on MZXnet and AsieSite!".

Anyway, I really mean it this time. I am going to keep this blog updated if it's the last thing I do. No more losing the data down the sofa. No more forgetting I even had a Blogger account. Nope.

Postscript: If I can afford some hosting at university, I'll probably move to another free software blog package. Until then, you're getting Blogger. Sorry.