Yoda, in some wierd reference to eastern philosophy i suppose, states that; Size matters not. Look at me. Judge me by my size, do you? Hmm? Hmm. And well you should not. For my ally is the Force, and a powerful ally it is. Life creates it, makes it grow. Its energy surrounds us and binds us. Luminous beings are we, not this crude matter. [emphasis mine] I’m having trouble understanding this disdain for the »crude« matter. I’m rather leaning toward Neil deGrasse Tyson’s view; I know that the molecules in my body are traceable to phenomena in the cosmos. That makes me want to grab people in the street and say, have you heard this? Indeed we are »luminous« beings — just by living, we produce and emit heat as infra-red light. But there’s no »force«, no »soul« trapped inside us. We are our »shells«.
Lifestream:
-
»Luminous beings are we«
http://eval.nu/blog/2010/05/07/%C2%BBluminous-beings-are-we%C2%AB/
May 7 2010, 7:00am | Permalink
-
Because a happy future is a thing of the past
http://eval.nu/blog/2010/04/25/because-a-happy-future-is-a-thing-of-the-past/
I was spending most of my Sunday reading Hellblazer, and it got me thinking about how well it seems to capture the spirit of the ’80s (though I can’t be sure, having missed them myself). The rampant stratification, Thatcher’s each-to-his-own politics, the nihilism and the rise of nazi gangs all mix very well with demons and occult magic. You get the picture of a crumbling world assaulted by debauching yuppie demons from one side, and witch-burning right-wing Christian nuts, whose god really is the fire and brimstone god of the Westboro Baptist Church, from the other. And then John Constantine in the middle, always trying (very reluctantly) to postpone the seemingly inevitable apocalypse. Though I really like Hellblazer, my standing all-time favourite comic series is The Invisibles. Interestingly enough, it seems to be about the ’90s in the same sense that Hellblazer was about the 80’s; it’s full of parallel realities, psychedelic drugs, wierd clothes and way too many words with »cyber« in them. While Hellblazer has a rather stable reality, the world of The Invisibles seems to be in a perpetual state of identity crisis. It doesn’t seem to know if it really exists or not, and what to do about it. There isn’t even a clear line between good and evil, and time itself is frequently bent. Maybe it’s the gloomy atmosphere of Hellblazer getting to me, but when I started thinking about what would classify the 00’s, I though of continued and worsened identity crisis, to the point where there isn’t any consensus at all about anything, and where all generalizations are regarded as equally arbitrary. But most of all I thought about the widespread lack of faith in the future. A happy future does indeed, like in Chumbawamba’s »Pass It Along«, seem to be a thing of the past in the public mind. God, I’m sick of this century already.
April 25 2010, 2:37pm | Permalink
-
Managing your music library and digital audio player with musync
http://eval.nu/blog/2010/03/05/managing-your-music-library-and-digital-audio-player-with-musync/
One of my few (or rather: my only) successful programming projects is musync. It began as a weekend hack to solve the growing problem of how to selectively synchronize music to my portable digital audio player into a somewhat coherent file/directory structure. Shortly after musync became practically usable, however, udoprog started hacking on it, and the current version is only loosely related to my old code (that was, for all I know, lost — for the better I believe). My current role in musync’s development is more or less reduced to finding bugs and hammering udo on IRC until he fixes them. So, what musync does is it takes a number of music files (or folders if running in recursive mode) runs a specified command to add them to the file/folder structure according to a given rule, optionally filtering and/or replacing non-wanted characters in the process. The file-folder structure may for example be »artist/album/NN-title.ext«, and the add command could be simply copying the files. But starting with recent musync versions, commands are Python lambda expressions, and can thus mean running several commands in sequence per file; I, for example, have my add command set to both copying the files to their calculated targets and then telling xmms2, my music player, to add them to its database. Here’s a code snippet for the relevant parts of musync.conf:
[site] root: "/var/storage/Musik" xmms2_sync_lib: lambda file: m.execute("/usr/bin/nyxmms2", "server", "import", file) add: lambda src, dest: (sh.copy(src, dest), xmms2_sync_lib(dest)) The rest of the file is, more or less, the sample configuration file; sh and m are imported in the [import] section as explained there, among other things, and they provide musync’s helper functions and the Python shutil library respectively. To add newly ripped or downloaded music to my collection with musync, all I now need to do is running musync -c site add <files or directories>. Other uses would include transferring music files (or directories) to a music player, optionally transcoding them to a format of choice in the process (I keep my collection mostly in FLAC but transcode it to vorbis to save space when I put it on my DAP), maintaining multiple different directory structures of the same music files using (symbolic-) links or making a »shadow root« with sorted symbolic links to unsorted originals still left in the downloads/incoming directory.
- Tags:
- in English
- Python
- programming
- unix
- music
- musync
March 5 2010, 4:56am | Permalink
-
Winky, an arduino-based temperature logger: project plan
http://eval.nu/blog/2010/01/06/winky-an-arduino-based-temperature-logger-project-plan/
I know my camera's horrible. I spent New Year’s with my cousins (also known as The Swedish Shortsnouts), where I came in contact with a project of their father’s, a PIC-based temperature monitor/logger named Dobby. When I returned home, I felt rather inspired, and dug up my Arduino Duemilanove and a SHT15 sensor I bought earlier. At this point, I’d like to mention I had some rather bad experiences with micro controllers (and don’t get me started on interrupts!) during my time at The RIOT, and I haven’t exactly been keen on hardware hacking since then. Low-level work never suited my short attention span. If I have to think about memory allocation or pin voltages I’m quickly loosing sight the big picture, and end up making luminous fish in stead. Or, to take an example from reality, researching the possibility of keeping pet jellyfish. Fortunately, after a quick WWW search, I found both wiring shemes and a library for communication with the SHT15. The hard part turned out to be getting the code onto the Arduino, since the IDE is Java-based, and Swing is written by people who clearly know nothing about the X windowing system and since the command-line approach for code uploading is heavily based on a semi-official Makefile that was apparently dropped from the recent versions of the Arduino SDK because it didn’t really work and nobody bothered fixing it. Thanks to wmname (Suckless to the rescue as usual!), recommended in a helpful dent, I got the official IDE working. It’s really nothing I’d like to spend much time in, but it works for loading code and communicating over the USB TTY, which was all I needed. So now I’ve got some rather messy code to log temperatures from the Arduino and send them once every second to anything listening on the USB TTY. Which happens to be a small, also rather messy Python program that logs the temperature and humidity in a text file with a Unix time stamp. This file is then read by a second Python program, using mathplotlib. My error handling is horrible: I just let Python disregard any non-sane values (i.e. any where string->float conversion of the incoming data fails or where the values are clearly invalid), but it works. Rather well, I might add. However, my goal is a much more stand-alone-ish logging device, so I’ve set up a project plan to try to keep my focus at least somewhat intact.
Try soldering the sensor, and connect it with network (RJ 45?) connectors. Make sure it’s working. Add a RTC module and make sure it’s working. Have Winky time stamp its own messages, in stead of the PC doing it as it’s recieving them. Implement an administrational interface for the USB serial console. JSON-encode the data. Preferrably through some already existing library. Fix persistent data storage somehow
Find a suitable physical storage medium (probably SD or CF) Implement it. Probably without FAT or any other file system. Make sure space is being re-used, i.e. when the medium is full, the oldest stored entries are automatically replaced with the newest. Without messing up the output order, of course (possibly, this could be fixed by sorting on time stamps during print-out).
Buy or make an ethernet shield and get it to work. DHCP may be needed. Implement as much HTTP as required to hand over the logs in JSON, and not a single line of code more. Somewhat RESTful:y. Buy a new or convert an old separate power supply. Find a suitable box. An old hub, router or switch is probably perfect. Make it work with a variable number of sensors.
How are these supposed to be detected? Should I just try to initiate all sensors, and skip those that fail? What about plug-and-play? Writing code to continuously loop to see if there’s a new sensor attached isn’t really my idea of fun.
Write some cool client code, perhaps real-time graphing with Javascript? There’s probably a library for that. I hope. Or else I will have to rely on Udoprog writing me one for cookies.
- Tags:
- in English
- Python
- Arduino
- hacks
- lists
- Makefile
- Microcontrollers
- Open hardware
- PIC-based temperature monitor/logger
- plans
- programming
- projects
January 5 2010, 6:12pm | Permalink
-
Thoughts on software and desktop interface design (from a design hater’s perspective)
I previously wrote about website design. Now I’d like to continue my argument and move it to the desktop in stead. I’m going to begin by explaining my motives and approach to computing, continue by pointing out some important problems of most modern desktop environments, give some examples of what is being done about this and finish by very loosely sketching the work flow of an example application. Computers are all about data. Somehow this has been lost in much of the modern design practices of graphical user interfaces. In stead, they all seem to employ Eben Moglen’s “caveman” principle; you point and you grunt. This type of design is very efficient for some tasks, drawing for example, when you only want to point out a position. This is one of the main reasons why I have kept as far as possible away from GUI applications. Not because they employ a GUI, there’s really nothing wrong in that, but because they do it poorly. Ridiculously poorly. Another problem with most modern desktops is all the micro-management necessary to optimize your screen usage. This has become especially important with the advent of the wide screen. As a solution, many desktops either implement work spaces, tiling window management or both. The latter can for example be seen in Apple’s “Active Corners”. The final fundamental problem of modern desktop environments is one they share with the Web; it is difficult and inflexible to move data between programs. Of course, there’s typically a clipboard with some cut-and-paste function, but it’s often unbuffered (i.e. can only contain only a limited amount of data at a time), and don’t keep the semantics of the transmitted data. I’d like to tell my music player to transmit my currently playing track data to the letter I’m currently writing. Of course, this could be done by copying and pasting the data, but that would mean unnecessary plumbing. I wouldn’t be transmitting data, I would be copying a string, switching workspace or program and then pasting it in. What if, say, I wanted a different representation of the track/artist/album data than the music player used? There are multiple examples of interface designs that try to go beyond the norm. Emacs is one; most Emacs users end up doing a lot of hacks to the way Emacs works. Still, most new modules respect these modifications and fit in nicely (or at least can be convinced to do so). Information can be, and typically is, passed between different Emacs modules and components through function calls and shared data structures. This, of course, is a potential source of errors and would be a nightmare to debug, but it’s a rather good illustration of what I’m talking about. Another example is the web browser Conkeror, ironically an Emacs-work-alike, which employs rudimentary facilities to move data between programs by allowing external programs to be run on embedded objects or their URL:s. And apparently, the Semantic Web has a sibling project on the desktop called the “Semantic Desktop“. I have heard very little about this though, but it might be something to look forward to. I’d say that the desktop needs a major overhaul. First of all, the concept of fixed and separate applications should be discarded, and different concepts should be separated. For example, the same text input program could be used to supply both a web browser, an email and a word processor with input data. I hear Plan 9 is doing something similar to this, but its UI is horribly caveman-ish. An example of how language can be used could be, say, a music library browser driven by an input box where the user enters either an [removed]using some syntax) or a simple text string, which is fuzzily matched in the spirit of Emacs’ ido-mode. This box could then be surrounded with context data, such as for example the covers of the matched albums or further search suggestions.
- Tags:
- in English
- emacs
- Clipboard
- computing
- Conkeror
- Desktop environment
- GUI
- human-computer interaction
- Semantic desktop
November 28 2009, 10:35am | Permalink
-
Anonymous WWW: Tor and i2p
http://eval.nu/blog/2009/11/05/anonymous-www-tor-and-i2p/
I’ve recently tried out both Tor and i2p, two very popular tools for anonymous data exchange. They both have different anonymization implementations, but I’m not going to go into that in this post, mainly because I haven’t researched either of them very well. Instead, I’m going to focus on my experiences with them both, as a user, and then I’m going to discuss them in a wider perspective. The first thing I noticed is how different their implementations are. Tor is rather clean, and does come pre-packaged for Debian. i2p is the usual mess you’d expect from a Java program, and doesn’t. It is also much slower at start-up (and it only recently started working with Free Javas). Tor also seems to handle load much better than i2p. Both solutions provide a local proxy server (Tor has a SOCKS proxy which is typically connected to a separate HTTP proxy server on the same machine), which the user is supposed to set his or her web browser to use, but i2p while i2p additionally has its entire configuration UI interfaceable as a HTTP server, Tor is mainly configured through the usual text files (though a configuration GUI named Vidalia exists). Tor provides, typically very slow, access to the normal www, i2p doesn’t. They both provide anonymous communication between internal sites with the pseudo TLD:s .onion and .i2p for Tor and i2p respectively. The “domain names” are quite lengthy hash-like strings for Tor, where they are much like normal domains for i2p. This comes with the cost of having to re-implement a DNS-like system that could’ve been simpler (this is, however, also a problem of the original DNS). i2p and Tor both provide “hidden services” such as web mail, message boards and wikis. i2p also comes bundled with a web-based bittorrent client modified to work with i2p, and the network has several “hidden” trackers running. There seems to be a different userbase for i2p and Tor. While Tor, judging by the message boards, seems to be mainly used by pedophiles, tin foil hats, conspiracy theorists and free speech fundamentalists of ridiculous proportions (the type that considers the moving of threads on a message board to the “spam” section to be “censorship”), i2p’s userbase, again judging by the message boards, seems much more tech-savvy, friendly and, well, sane. Another difference is speed: i2p is significantly faster than Tor, perhaps because all nodes are participating in the routing by default, whereas one must actively reconfigure Tor to act as a router. So, to sum up what I’ve said this far: Tor is a wonderful software with an insufferable user base, i2p is an insufferable software with a wonderful user base. Now, for that pretentious “wider perspective” I promised earlier. I have two objections to the design of i2p and Tor. My first objection is that it seems quite a waste to have nodes pass data to each other in streams, just to throw it away when the stream has finished. Distributed storage would seem much more efficient. My second objection is that they still don’t solve the problem of giving people a voice. Rather, their conception of “free speech” seems to be limited to allowing everyone to hear what someone with a voice (read: servers) is saying anonymously. Interpreted this way, the concept of free speech becomes the freedom of the already privileged to speak their minds, and the freedom of everyone else to listen. I’m sceptical of network designs that separate speakers from listeners, and both Tor and i2p does this. It can, however, be argued that this could be solved at a higher-level protocol, but this would be highly inefficient since the already existing communications infrastructure and node databases of the various protocols would have to be re-implemented. Finally, it should be mentioned that I’m not a free speech fundamentalist. I have no problem with violent sects, pedophiles, racists and tin foil hats being “censored”.
November 5 2009, 8:52am | Permalink
-
Thoughts on Blog Design (From A Design Hater’s Perspective)
http://eval.nu/blog/2009/10/31/thoughts-on-blog-design-from-a-design-haters-perspective/
Normally, I’d consider designing web pages the very antithesis of my vision of what the web ought to be. I’m dreaming of a network of information, free of representations. Or, to put it differently, I’d like every web page to look the same. Design is irrelevant, I just want the data. However, since most web site– and browser developers are putting their efforts toward further shoehorning of applications into a document format, I’m confident this text will stay relevant for at least a couple of years. With “good design”, I mean “functional” rather than “visually appealing”; a blog is first and foremost about text, and this text should be readable. Everything else is secondary. By the way, the rest of this post will be a list of N things. I know, I should avoid it, but I couldn’t help myself.
Do not re-implement windows or window handling or any sort of GUI. At all. In fact, this shouldn’t even be the web browser’s responsibility, but the window manager’s. Despite this most modern web browsers re-implement window management in the shape of tabs. So if you find yourself thinking about pop-ups or lightboxes or similar: don’t. They are slow and they are annoying and they force certain browsing patterns on the viewer needlessly. Avoid needless Javascript. In fact, keep away from it entirely as much as possible. Also avoid frames or iframes like the plague. Don’t impose your screen size as the norm. Avoid fixed width and fixed font sizes and your blog will have a greater chance of rendering well on both very small and very large screens. Keep the screen clean, focus on the text. Use a bare minimum of widgets, menues, links and similar attention-hogs. Imagine your typical reader being a four-year-old with ADD. If possible, consider displaying only one post at a time. Try to stay away from Angry Fruit Salad colour themes.
Of course, my current theme (the Wordpress default) makes many of these mistakes. In particular, it seems to put a unproportionate amount of focus on the background, leaving only a thin streak of text in the middle. Why this is I can only speculate, but I welcome proposals of better Wordpress themes!
October 31 2009, 4:07pm | Permalink
1


