« amusement | Main | electronics »

Today, I allowed my system to update to Kubuntu 8.04. While I can't say I've noticed any dazzling improvements yet (KDE 4.0 wasn't included) there were a few hiccups and impasses. I believe these to have stemmed from the inclusion of Firefox 3.0b5. Looking back over the past few hours, I realize that I should have just rolled back to a stable version from the 2.x tree.

The first problem came when I opened Thingamablog and updated my feeds. I prefer to read some of a post summary, and if it interests me, I'll open the whole post in my browser. None of the links would open. Firefox was not being launched. I had a similar problem the last time I updated. This time, the problem was still with libjdic, but it apparently wasn't because I wasn't using Sun's JRE. The expected version (5) of the libstdc++ library wasn't found (having been updated along with the rest of the system) and was no longer offered through Adept Manager (Kubuntu's package management system.)

I decided I'd rather not go through torment and suffering of trying to locate and install a past version of the library (and its dependencies, and their dependencies, and— oh, look, I've cut through a load-bearing column!) Instead, I'd export my feed from Thingamablog (as OPML) and import it into Akregator, KDE's feed reader. That part worked without a hitch. Even a few feeds I thought were dead came blossoming back to life.

It was easy enough to configure Akregator to open links in Firefox (since embedded video, etc. still has occasional trouble in Konqueror.) It was far from easy to get Firefox let me subscribe to feeds with Akregator. I could click the little orange RSS icon easily enough. I could tell Firefox to make /usr/bin/akregator the default handler for RSS feeds. But Firefox would just not launch Akregator or any other program I'd point to.

After a lot of fruitless hacking of Firefox's FeedConvertor.js, I happened upon two new pieces of information. First was an Ubuntu bug report for Liferea, another RSS reader. The person filing the bug had the same issue as myself. The fix in this case was to install the firefox-gnome-support package.

The second useful piece of information was that Firefox sends an oddly formatted URL to the external program. Apparently it sends http:/// instead of the usual http://. Writing a small wrapper script to remove the extra slash solved that problem.

Phew... that was a lot of work just to work around the difficulties arising from an update. At least nothing really bad happened this time (such as automagically messing up the bootloader.)

Posted on Sunday, June 01, 2008 at 10:53 PM
Categories: computer science
| | Permalink

When it gets the job done.

A few weeks ago, I needed to set up a mail server, pronto. A bigwig wanted the ability to send mail remotely, from his corporate e-mail account, without having to use the webmail system. Fine. It's not my job to argue, it's to make sure everyone else can get their work done.

While I could have set up a fancy VPN arrangement, I didn't want to make things too complicated. Instead, I opted to set up Postfix with SASL authentication, which would only require a tweak or two to the user's Outlook settings.

Since I was under a time constraint, I had to make do with whatever hardware I could scrounge up. I found an unused machine that seemed originally to have been a Linux-based firewall/router appliance. It had 512MB of RAM and a 300 MHz K6 processor. Not exactly a powerhouse by today's standards, but certainly sufficient to relay an e-mail message now and then. So, I reformatted its mess of a hard drive and began installing Ubuntu. Unfortunately, after the install completed, the machine entered some sort of bizarre spin cycle of reboots. Something about this ancient hardware was throwing Ubuntu for a loop.

After a little bit of research, I realized that something was probably the CPU itself, and Ubuntu just wasn't going to happen. Since I had already had FreeBSD running on some other pretty low-end hardware (almost identical, in fact) I figured it ought to work in this case, too. And it did.

Posted on Thursday, March 20, 2008 at 10:10 PM
Categories: computer science
| | Permalink

I am occasionally still asked about the differences between Linux and Windows. Oddly, I find that using terms such as free-as-in-speech, software monoculture, zero-day, design philosophy, proprietary, protocol, and computer usually leads to reactions such as blank stare, glassy stare, indifferent stare, or vacant stare.

Over time, I developed the following analogy. I can't say for sure whether taking Vista into account would change it much, but I suspect not.

Windows is like an ultra-modern kitchen in a condo you're leasing.

Your countertops, cabinets, and appliances are all done up in matching stainless steel. Your refrigerator not only dispenses reverse-osmosis water, ice cubes, and crushed ice, but also has a high-definition TV embedded in the door. Your cooktop has induction burners and a built-in grill. You've got a microwave oven with presets for every sort of food you can imagine, and also for dozens of types of food you can't imagine. You've even got a talking cookbook that volunteers to make simple dishes for you.

Of course, your friends all have that cookbook, too, so your dishes usually end up tasting pretty similar. Sometimes, the cookbook isn't even that helpful. For example, if you want to find out how to make an omelet, it might suggest a recipe for boiled water and present several tips on egg-cracking technique.

If you'd prefer a gas stove to an induction stove, that's too bad. Because the appliances and the kitchen itself belong to the building management, they can't be replaced until the management company is good and ready to do so, and even then, you'll probably just end up with a fancier induction stove. You can, of course, paint the kitchen whenever you like and then pretend like everything's new.

Suppose you want to make ice cream. You can't just pour a bunch of milk into your stand mixer and then put the mixer into the freezer. First of all, the mixer won't fit into the freezer. Even if it did fit, there's no electrical outlet in the freezer to plug the mixer into. Even if there was, that arrangement still wouldn't work all that well.

That leaves you with two or three options. Obviously, you could go buy an ice cream maker. Unfortunately, your choices there mostly fall into one of two categories. One one hand is an industrial soft-serve machine. It will churn out more ice cream than you could ever eat, and can also make any flavor of frozen yogurt. Of course, the price tag is rather steep, as it's really targeted toward someone who wants to open an ice-cream parlor. On the other hand, you could get a cute toy designed to fall apart after a certain number of uses, something like the Snoopy Snow-Cone Machine. And shaved ice is kind of like ice cream, isn't it? No? Well, that's all right, since you don't have to pay for the snow-cone machine unless you like the snow-cones it makes.

The third option is, of course, to go to the store and buy some ice cream.

Linux is like a well-stocked garage in a house you've inherited.

You've got a bewildering array of tools: hammers, screwdrivers, saws, planes, levels, and rows of things you can't even name. There are even tools for building new tools when the ones you've got are awkward or tedious. You don't have to do that very often, because most of the tools fit together. For example, if you've got a bunch of nails to pound, you can attach the hammer to the drill. You'll want to make sure there are no non-nail objects-- such as fingers-- in the hammering area, of course. If you want to make sure that you only hammer nails, you can try attaching a magnet to the hammer, or a jig that only allows it to pound nails. You can plug the whole apparatus into a timer and have all your nails hammered in the background.

Your neighbors with similar garages have developed some very elaborate contraptions, and most of these neighbors stopped by with copies of the blueprints to these contraptions when you moved in-- just being neighborly, of course.

The problem there is that quite a few of the blueprints require you to stop and refer to another set of blueprints, which themselves require you to stop and refer to yet another set of blueprints, and so forth, until you suddenly realize that you've somehow cut through a load-bearing column and your entire garage collapses on your head.

But as long as you manage to avoid chopping through load-bearing walls without taking adequate precautions, you're free to swap out just about anything in the garage: lights, cabinets, benches, appliances, even the walls and floor. You can make all of those things right there in your garage.

Posted on Monday, January 14, 2008 at 11:34 PM
Edited on: Monday, January 14, 2008 11:45 PM
Categories: amusement, computer science
| | Permalink

First up is a collection of retrofuturisitic artwork from Eastern Bloc popular science magazines. Even though I don't believe I've seen any of these pieces before, many of them seem strangely familiar. The sensor antenna or weapon aimed at a distant galaxy, the tree within a bubble within a frozen waste, the astronaut with the raygun.

Next, we have a cartoon that I think about now and then. I first encountered a slightly different version of in an old computer science textbook. (How old? It had a few pages on core memory.) Some of the artist's embellishments are good additions, particularly the easy chair suspended from the tree, and some I agree with a bit less (perhaps I'd switch "as documented" and "as supported".) But the lesson remains the same: the customer wants a tire swing. She wants to go forward, backward, left, right, and around in circles. She does not want to hold the swing and run back and forth, no matter how many seats it has. And while a stationary seat beneath a moving tree may be a clever solution and an impressive engineering feat, it's kind of like a whistling dog story. Like a whistling dog, it's astonishing that the thing can whistle -- but it doesn't actually whistle very well.

And speaking of which, Toyota has unveiled a violin-playing robot. Does it, I wonder, have a MIDI interface?

Posted on Thursday, December 06, 2007 at 11:50 PM
Categories: computer science, link-o-rama, robotics
| | Permalink

Q. There is this one query that I need to stop from going to the default page on my website (index.php). It doesn't do anything but I have my reasons! I have looked everywhere and no example I found has worked for me. Help me, Obi-Wan Kenobi!

A. Obi-Wan? That's a name I haven't heard in a long time. *roll eyes* As it turns out, one way that you can accomplish this is with Apache's mod_rewrite. If one wishes to entirely remove the query string "plugh=xyzzy" from queries to "http://www.example.com/index.php" this technique seems to work:

# match the forbidden query
rewriteCond %{query_string} plugh=xyzzy
# redirect without the query string
RewriteRule ^(.*) http://www.example.com/? [R,L]

Posted on Monday, December 03, 2007 at 11:27 PM
Categories: computer science, q+=a
| | Permalink

I discovered that if you are running Thingamablog 1.1b on Ubuntu, and it won't launch Konqueror or Firefox when you click on a link in the RSS pane, that could be due to your Java environment. Launch Thingamablog from a shell:

$ java -jar thingamablog.jar

If it says something like this when you click on a link:

Exception in thread libjdic.so: Can't load IA 32-bit .so on a IA 32-bit platform.

Then you should find out if you're using the free Java clone:

$ ls -la `which java`

If that shows a symbolic link to somewhere like /etc/alternates, then this is indeed the case. When I removed the free (as in speech) Java clone and replaced it with Sun's (free as in beer) Java, clicking on links produced the desired result. The linked pages open in Firefox, rather than Konqueror, but I can live with that.

Posted on Wednesday, November 14, 2007 at 11:30 PM
Edited on: Monday, November 19, 2007 12:41 AM
Categories: computer science, q+=a
| | Permalink

I don't know who this Paam person is or why PHP was expecting her, but it apparently has something to do with $. Doesn't it always? After consulting the following post, which was quite helpful, I discovered that I needed to put $ before my db. Apparently $ really is the root of all evil.

When you’ve stopped scratching your head or falling about laughing and calling your mates in to view the screen (’cos you can’t pronounce the words) just make sure that all your variables have their $s in tact! Googling for it will come up with interesting etymology when you have the time.

I’ve just had the expecting T_PAAMAYIM_NEKUDOTAYIM error
Posted on Saturday, August 25, 2007 at 11:08 PM
Categories: computer science
| | Permalink

Here's something I've wanted to see ever since my days on the wrong side of the food service counter: a "vending machine" interface to a fast food restaurant. This one has a point-and-click interface (or perhaps it should be called a "see-and-paw" interface, as it uses a touchscreen) that even a five-year-old could use...well, a five-year-old with a credit card, anyway.

Self Serve

This particular machine was installed at the Jack-in-the-Box in Murphy Canyon. According to the San Diego Business Journal, these kiosks were installed in three San Diego locations in December. That two were installed at this particular location isn't surprising, as the Jack-in-the-Box headquarters and test kitchens are only minutes away.

This has to be a win-win solution for customers and restaurants alike. The customer can place an order exactly as desired, with no possibility of miscommunication due either to an inattentive cashier or an inarticulate customer. The computer's digital voice is always unflinchingly polite and it never will come in with a hangover, nor will it get irritable at the end of its shift or chat with its friends when it should be working. I assume this will mean that restaurants in the future will all be impeccably spotless, as the remaining employees will have no excuse not to clean the tables and restroom. Unless, of course, the excuse is that they have a self-cleaning restroom. But why stop there? Why not have self-cleaning booths? Of course, periodically heating the entire dining room to five hundred degrees does pose some interesting challenges, but nothing that a little ingenuity can't fix.

Posted on Sunday, July 15, 2007 at 11:09 PM
Categories: computer science
| | Permalink

Electroplankton calls our attention to this article. Although it seems the existence of a "gay gene" is still contested, some researchers have found some biometrics that do seem to correspond with an individual being gay. For example, if a male's hair swirls counterclockwise (as mine does) and his index finger is longer than his ring finger (as mine is), if he's left-handed (I'm not), or if he has narrow fingerprint ridges (I don't think so) then there's a possibility that he's gay (true, but you already knew that.)

This is surely good news for the gaydar-impaired (such as myself) but this study also raises the same troubling possibility that the facial pattern matching widget did. Data can be mined for evil as well as good.

Although it would be difficult to get people to enter "hair swirl direction" and "finger length ratio" into their (say) DMV forms, it wouldn't be difficult to take their prints or determine which hand they used to sign the form. And while this data wouldn't be conclusive, it could raise a pink flag. This might not be that useful to an organization that precisely targets individuals. But to an organization that's after a population, especially if it doesn't matter that a few fish escape the net, it might be useful indeed.

Posted on Monday, June 18, 2007 at 11:57 PM
Categories: computer science, misc
| | Permalink

Today's question is from Jared in San Diego.

Q. My boss wanted me to also ask you if there was something particular that we have to do to make the clock on the server and on our individual computers to update to the time change. I tried to update but it will change back to the hour before.

Just so you know we have a Windows 2000 domain controller and Windows XP workstations.

A. Ah yes, the after-effects of the Energy Policy Act of 2005. Will it save lots of energy? I don't know! Will it get people to buy new appliances-- answering machines, time card clocks, sprinker timers, video recorders, etc? Probably!

Anyway, you are not the only person who has had to deal with this issue. You'll be happy to know that Microsoft has rolled out an update for Windows Server 2003 and XP, but unfortunately, Windows 2000 is too old to be bothered with. You'll just have to pay your licensing fees and step onto the upgrade treadmill with the rest of us.

Okay, okay, there are a couple of things you can try first. If your XP workstations are current on their updates, it may be that your sever is feeding them the wrong time, as all systems in a domain need to be synchronized for numerous boring reasons.

So to update the server, see the following link and look at "Method 2, Update The Time On A Single Computer" at about 3/4 of the way from the bottom. Basically, you will run the tzedit program on the server, and change the beginning and ending dates of Pacific Daylight Time. Once you have done that, temporarily change to another time zone to cause the server's clock to update.

Unfortunately, that may not solve all of your problems, as computers often compare time in terms of UTC rather than in terms of the local time zone. So your workstations may still display the local time incorrectly. In that case, try downloading the Update For Windows XP and applying it to the workstations.

Posted on Thursday, March 15, 2007 at 11:34 PM
Categories: computer science, q+=a
| | Permalink

Okay, dear readers, here's the scoop. As you will see to the right someplace, I use Thingamablog to publish The Electronic Replicant. It's a Java program that stores your blog entries in a local database, then publishes them via FTP as static HTML files. This means that the resulting site is portable and universal, making it easy to move from server to server (which I plan to do soon, but that's another story.) I also happen to like it since, as it's a Java program, I can put it on a FAT32 partition on my PC and use it in both Windows and Linux. And if I share that partition, I can also use Thingamablog on my notebook elsewhere in the house, such as on the couch in front of the TV.

That's where my trouble began. I don't know exactly what happened, but after completing and uploading last Sunday's post, I closed Thingamablog and told Windows to disconnect the mapped drive. Windows gave a warning about files being open, but since Thingamablog-- and all other programs, for that matter-- were closed, I assumed that Windows was simply being overprotective, and so I clicked OK. Later that night, I reopened Thingamablog on my PC, only to receive this nastygram:

Error Details...
java.lang.Exception
Unable to connect to database
net.sf.thingamablog.backend.HSQLDatabaseBackend.connectToDB(Unknown Source)
net.sf.thingamablog.gui.app.ThingamablogFrame$2.construct(Unknown Source)
net.sf.thingamablog.SwingWorker$2.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

Apparently, that means the database is toast. I was faced with the tedious task of copying text from my previously-uploaded pages, pasting said text into the TAMB editor, and backdating the replacement posts to approximately the correct date and time. That is a job for a computer, not a human! And, since Thingamablog can import and export all of a blog's posts via RSS, I decided to write a Perl script to munge my archives into an RSS feed. I am presenting this script here in its entirety, in the hope that it may be even a little bit useful to someone else in this position.

use File::Find;
use XML::RSS;
use Date::Manip;
&Date_Init("TZ=PST");
# Where are my files?
my $archive_dir = "c:\\erik\\archives";
my $rss_file = "c:\\erik\\rss.xml";
my $tempfile = "c:\\erik\\temp.txt";
# create an RSS 2.0 file
my $rss = new XML::RSS (version => '2.0');
$rss->channel(title => 'recovered blog', description => 'recovered blog' );
# enter directory containing downloaded archive folders
chdir ($archive_dir);
my @files_found = <*>;
my @search_dirs = ();
# make a list of the "year" folders
foreach $file (@files_found)
{
print $file . "\n";
if ($file =~ /\d{4}/)
{
push (@search_dirs, $file);
}
}
# Now process the files in there
find(\&wanted, @search_dirs);
# save RSS to a file
$rss->save($rss_file);
die("End");

sub wanted {
if ($_ =~ /html$/i)
{
my $file = $_;
print "opening $file . \n";

# How to find the data...
# Publication date be found within <h2 class="date">...<h2> and in the <div class="posted"> after at.
my $pubdate = "01-01-1980";
my $pubdate_open = "<h2 class=\"date\">";
my $pubdate_close = "</h2>";
# Title will be found within <h3 class="title">...</h3>
my $title = "default_title";
my $title_open = "<h3 class=\"title\">";
my $title_close = "</h3>";
# Description: everything after <h3 class="title">...</h3> and before <div class="posted">
my $description = "";
my $description_close = "<div class=\"posted\">";
# Category will be found within <div class="posted"> after Categories: inside <a href...>...</a>
my $category = "default_category";
my $permalink = "";

# Convert the raw HTML into something a little easier to parse
open (INFILE, $file);
open (OUTFILE, ">" . $tempfile);
while (<INFILE>)
{
#go thru file converting all whitespace characters to ' '
chomp;
s/\s+/ /g;
#if a '<' is encountered, print an "\n" then '<' then continue
s/</\n</g;
#if a '>' is encountered, print '<' then an "\n" then continue
s/>/>\n/g;
print OUTFILE $_;
}
close OUTFILE;
close INFILE;

#now go thru easy-to-read temp file searching for desired tags, which will be on individual lines
open (INFILE, $tempfile);

# get date
print "getting date... ";
do {$input = <INFILE>;}
until ((eof) or (uc($input) eq uc($pubdate_open) . "\n"));
$pubdate = <INFILE>;
print "$pubdate \n";
do {$input = <INFILE>; }
until ((eof) or (uc($input) eq uc($pubdate_close) . "\n"));

# get title
print "getting title... ";
do {$input = <INFILE>; }
until ((eof) or (uc($input) eq uc($title_open) . "\n"));
$title = <INFILE>;
print "$title \n";
do {$input = <INFILE>; }
until ((eof) or (uc($input) eq uc($title_close) . "\n"));

#get description
print "getting description...";
$input = "";
until ((eof) or (uc($input) eq uc($description_close) . "\n"))
{
$description .= $input;
$input = <INFILE>;
print ".";
}
print "\n";

#Get time
print "getting time...";
do {$input = <INFILE>; }
until ((eof) or (uc($input) eq uc(" Posted By ") . "\n"));
do {$input = <INFILE>; }
until ((eof) or (uc($input) eq uc("</a>") . "\n"));
$pubdate .= <INFILE>;
$date = ParseDate($pubdate);
#Put date/time into this format: Wed, 21 Feb 2007 24:57:14 -0800
$pubdate = UnixDate ($date, "%g");
print $pubdate . "\n";

#Get Category
print "getting category...";
do {$input = <INFILE>; }
until ((eof) or ($input =~ /Categories/i));
#discard href
$input = <infile>;
$category = <infile>;

print "\n";
close (INFILE);
$rss->add_item(title => $title, permaLink => $permalink, description => $description, pubDate=>$pubdate, $category=>$category);
}
}

I'm sure the real Perl wizards will scoff at this script, but at least it did work well enough for me to get my posts back. For some reason, it wouldn't pull in the category, but I didn't mind, since I'd been meaning to recategorize everything anyway. So I did. The next thing I had to do was to edit the default layout templates to resemble the ones I'd had before, but I didn't mind that either, as I'd been wanting to make a few changes here and there.

Finally, since I now really wanted to make sure that I would never have to go through any of this again, I wrote a batch file that will launch Thingamablog, and then automatically back up the database afterward:

@ECHO OFF
set zip="c:\program files\7-zip\7z.exe"
set tambdir="c:\erik\tamb2\"
set archivedir="c:\erik\archive\"
set options=a -r -tzip -mx9
set thingamablog="c:\program files\thingamablog1\thingamablog.jar"

java -jar %thingamablog%

for /f "tokens=1-3 delims=/ " %%a in ("%DATE%") do (
set dd=%%a
set mm=%%b
set yyyy=%%c)
set filename=%dd%%mm%%yyyy%.zip

cd %archivedir%
%zip% %options% %filename% %tambdir%

Posted on Sunday, March 04, 2007 at 8:03 PM
Categories: computer science
| | Permalink

Q. I've asked my friends to give me their broken appliances so that I could scavenge parts from them. Now I have so many circuit boards lying around that it takes me longer to look for a chip than it does to remove it from the board. How can I get more organized?

A. I had this same problem. The answer is to create a database. With the work of an hour or two, you'll soon have all your parts at your fingertips. And if you're a Windows user, chances are you may already have all the tools you need on your computer. I'm talking about MS Access. Sure, professional DBAs may scoff at this program, but it will be sufficient for cataloging a few hundred components. On the other hand, if you're an ambitious Linux user, you might be well-served to look into a Linux-Apache-MySQL-PHP (LAMP) solution. Whichever route you take, plenty of books and Web tutorials are available.

When I set up my database, I created tables for each sort of component I wished to track. For example, the IC table looks something like this:

ID Part_Number Description Style Container Datasheet
1 L272M Dual Op-Amp 8 Pin DIP 1 L272M.PDF

The Container field points to a record in the Container table, which represents either a circuit board or other container (such as a drawer of loose components):

ID Description Location
1 Brownish board marked LP1-CD MBD 1

The Location field points to a record in the Location table, which represents the various boxes and drawers used for storing Containers:

ID Description
1 Cardboard box #1

Now if I ever need an L272M, or an Op-Amp in general, I can query the database, which will tell me that there's one on Brownish board marked LP1-CD MBD in Cardboard Box #1 .

Posted on Sunday, February 25, 2007 at 7:55 PM
Categories: computer science, electronics, q+=a
| | Permalink

It's funny how one can start searching for one thing and end up finding something else.

For example, one could search for android-related information, but a typo could cause one to recall the word androne. This might have been one of many games for the Tandy Color Computer At this point, one might be overcome with nostalgia for a beloved 8-bit microcomputer , and peruse the entries for one's other favorites, such as Popcorn , Polaris , Microbes , Panic Button , Spidercide, the oddly unmentioned Robot Odyssey, and of course the (in)famous Dungeons of Daggorath .

One might sigh with regret at this point, recalling one's long-vanished CoCo2 and Program Paks therefore, but one might also breathe a sigh of joy to learn that modern reimplementations exist of both Robot Odyssey (as DroidQuest ) and of Dungeons of Daggorath.

I count myself lucky, actually, to have received a CoCo2 for my ninth birthday. I think that if I'd been given a more mainstream system, such as a Commodore 64, an Apple II, or even an IBM-PC, the ready availability of software for these systems would have led me to spend most of my time playing games written by others. Instead, I read lots of books on how to write games in BASIC and laboriously translated the examples therein to the proper dialect. As a result, I learned not just "how to work a computer" but how a computer works .

Posted on Thursday, February 08, 2007 at 7:19 PM
Categories: computer science, misc
| | Permalink

Discovery.com brings us the news about MEXICA , a fiction-writing computer program. Other random-story programs simply choose randomly from predefined bits and pieces. MEXICA actually establishes relationships among characters, that range from pure love (+3) to pure hate (-3). MEXICA then consults a database to select the events most likely to happen at that point in the story. The story's interestinginess is then calculated. If MEXICA determines the story to be boring-- that is, if the tensions among the characters don't vary-- events are replaced until the story becomes more interesting.

I used to joke about Stephen King, Danielle Steele, and other writers having become brands (like Betty Crocker) for the output of intricate mathematical models of successful works. Now, this is closer to becoming reality.

Posted on Monday, January 29, 2007 at 11:56 PM
Categories: computer science
| | Permalink

Extreme Programming

Extreme Programming

Originally uploaded by Akindemir

Posted on Wednesday, January 10, 2007 at 10:20 PM
Categories: computer science, misc
| | Permalink

Following a link from RootPrompt about a proposed Heath Robinson Rube Goldberg Computer , I learned of this relay-based computer constructed by Harry Porter of Portland State University. The picture gallery tells most of the story, but on the second page are a video, sounds of the computer in operation, and even a PowerPoint presentation explaining how it operates.

Posted on Thursday, October 05, 2006 at 11:00 PM
Categories: computer science, electronics
| | Permalink

Make: brings us an article on another homemade computer , this one built almost entirely from transistors. Three thousand surface-mount BC847/BC857 low frequency transistors make up the registers, arithmetic logic, and other units that are typically integrated into the microprocessor in today's computers. The MT15 runs at 500 kilohertz and has 128k of RAM, which is not transistorized.

work-ing...

This shows that "because I can," is often reason enough.

Meanwhile, Slashdot reports on the Open Prosthetics Project , a collaborative endeavor in which the share-and-share-alike Open Source philosophy is applied to prosthetics. I'll be watching this project with interest to find out how quickly it can get from peg-leg to cyberpunk .

Posted on Friday, September 22, 2006 at 8:22 PM
Categories: computer science, electronics, link-o-rama
| | Permalink

GRC.com  has an interesting utility  that generates 256-bit random numbers that it displays as strings of random ASCII characters. What's so interesting about that? Well, these strings are ideal for use as passwords or encryption keys:

Every one is completely random (maximum entropy) without any pattern, and the cryptographically-strong pseudo random number generator we use guarantees that no similar strings will ever be produced again.

Also, because this page will only allow itself to be displayed over a snoop-proof and proxy-proof high-security SSL connection, and it is marked as having expired back in 1999, this page which was custom generated just now for you will not be cached or visible to anyone else.

I don't know if it's that much of an improvement over, say, "cat /dev/urandom | strings"-- but it is a bit more portable.

Posted on Thursday, August 24, 2006 at 7:28 PM
Categories: computer science
| | Permalink

Linux Journal has a monthly column by Marcel Gagne , called "Cooking with Linux." In the August, 2006, installment, Mr. Gagne searches "for the Ultimate Desktop Enhancements," and to this end reviews a number of applets. Only until he mentioned Beagle did I really take notice. Beagle "is a search tool that ransacks your personal information space to find whatever you're looking for," rather like Google Desktop Search, except for Linux. How exciting!

Little did I know (nor did the Beagle site mention explicitly) that Beagle essentially requires the entire Gnome 2 platform (with Mono), and that one cannot simply install the pieces that Beagle uses piecemeal. I came to realize this at about five levels deep in the dependency chain (tree would be more accurate,) after building and rebuilding about fifteen libraries, not counting those that had several incompatible versions.

After a while it became clear to me that I would have to install all of Gnome from scratch. I decided to try GARNOME. I mean, what the hell, I use Konstruct to build KDE, and that works like a charm every time. It'll be a snap, right? Wrong. It appears that the configure scripts for a number of the packages it builds are faulty. Such as with dbus, which is where my troubles began. After that point, GARNOME would periodically crap out, and I would discover that I would need to find and manually install, say, Perl::XML, or Pyrex (and I would then need to upgrade Python), or qt (which, as a KDE user, I have, but the build can't find,) or the kernel headers.

Fine. I could use a new kernel anyway, especially since at some point in this process, my CD-ROM, sound card, and USB storage devices quit working. The kernel upgrade, at least, worked the way it was supposed to and didn't crap out halfway through. Unfortunately, upon reboot, I discovered that the version of the nvidia driver I had didn't like the new version of the kernel, and since the new kernel didn't like my wireless adapter, I decided that enough was enough.

There comes a time in a Linux system's life when it becomes so full of cruft and entangled dependencies that trying to install anything results in the entire structure collapsing like a house of cards and the user has no choice but to start over. This first happened to me with Red Hat 5.2, which is why I hate RPMs. This eventually happened again with Red Hat 7.2. You would have thought I'd have learned my lesson, but I installed Fedora Core 1 after that.

Anyhow, I decided I'd install Gentoo on Sunday night, and by this afternoon my system was not only fully operational, but optimized for its hardware, with nothing nonessential installed. That is, until I finally work up the nerve to type "emerge beagle."

Posted on Tuesday, August 22, 2006 at 11:25 PM
Categories: computer science, misc
| | Permalink

If you've never heard of the old Home Brewed Computer Club, look it up. This was a group of hobbyists that met in the 1970's to discuss and build their own computers around the new technology of microprocessors. Among the results was the original Apple computer. Of course, I was way too young to have ever participated in that group, but the idea of building a computer rather than just assembling one is very exciting to me. As it happens, Make: recently linked to an article about a British home-brewed computer, the Chaos computer, which I found quite interesting:

"The computer described on these pages was started in 1977 with the gift of a Signetics 2650 microprocessor by Mullard. Attempts during the previous year to order an Intel 8008 and a 2650 from Farnell had all proved impossible, and this 2650 processor was finally obtained after my father drafted me a letter which I sent to the Managing Director of Mullard. The 2650 was an 8 bit processor with 32Kbyte address range and 256 I/O locations. It has 7 general purpose registers and an on-chip return address stack for subroutines with 8 entries. It was not possible to make data access to this stack or flush it to memory. "
Posted on Tuesday, August 15, 2006 at 10:30 PM
Categories: computer science
| | Permalink

« amusement | Main | electronics »