Forgot your password?
typodupeerror
User Journal

Journal: Competition needed 1

Journal by DaChesserCat

When you go to fill up your car, you have a choice of where to fill the tank. All too often, all of the gas stations in an area have the same price. Or if one is slightly cheaper than another, there's some other factor that "evens" them out.

Where is the competition? Are these stations fixing the price of gasoline? That's hard to prove. They probably don't have any kind of agreement, formal or otherwise. It's entirely possible that the price they're selling for is the balance point between the best price they can offer (based on what their supplier charges) vs what the market will bear (people tend to drive less when they're broke, or when gasoline is significantly more expensive). The latter case is basic supply and demand, nothing sinister or conspiratorial about it.

If we want to get around for less money, more competition is needed. And that means some other form of energy. Diesel isn't an answer; it uses the same supply chain as gasoline. Ethanol isn't really an answer, either; the companies that supply the gasoline also supply high-ethanol fuels (E85, for example) because there are tax credits to be had for the company that "blends" the gasoline and the ethanol. So ethanol has been effectively co-opted by the same suppliers.

There is where Plug-in Hybrid Electric Vehicles (PHEVs) come into play. Like the Chevy Volt.

If I can charge up my vehicle and drive, say, 45 miles without burning any gasoline, especially if my daily commute is 45 miles or less, electricity has just become a competitor to gasoline.

In my area, electricity is 8.5 cents / kWh. And many of the electric vehicles (Nissan Leaf, Mitsubishi iMIEV, Chevy Volt) get at least 3 miles / kWh. Which means 2.8 cents / mile or less.

At $3.20 / gallon of gasoline, I'd need 113 mpg to drive around as cheap on gasoline. I'd need about 138 mpg on diesel ($3.80 / gallon) to match that. I'm lucky if I can find a vehicle which gets half that.

Electricity has another little advantage. If the increase in electricity consumption causes the price of electricity to go up, many of us have the option of acquiring solar panels or small-scale wind or hydroelectric equipment and making some of our own. No, I'm not joking; I live in rural territory. I've lived in rural places where I had a creek running through the property. A small water turbine, running off a creek, can produce a small-but-steady amount of electricity and make a small dent in your electric bill with the right equipment.

You can't make your own gasoline. And while some people have found a way to make their own diesel (biodiesel), it only takes a few people doing that before the supply gets eaten and you end up back where you started. There simply isn't enough waste vegetable oil around to provide fuel for a significant number of people.

In theory, you could make your own ethanol, buy gasoline, blend it to make your own E85 and run a flex-fuel vehicle on that. The only reason ethanol has its current price, though, is through economies of scale and because it is subsidized. As a small-scale producer, you don't have the same economy of scale and there are a LOT of legal headaches to making your own ethanol.

I have nothing but respect for Elon Musk and Tesla Motors. The fact that they're building Supercharger stations, where you can use high voltage and current to add significant mileage in a hurry, means that they understand that there needs to be infrastructure before people can buy their battery-only vehicles. For most people, buying a pure electric vehicle means that they have to have an additional vehicle, for those times when you want to travel beyond the range of your battery pack. Sure, if the battery is enough to do your daily commute, you can charge up at home. But without something like a network of Supercharger stations, you probably can't go "over the river and through the woods to grandmother's house." There just isn't enough of the right kind of infrastructure.

We need more PHEVs. The ability to run on gasoline when you need longer range, or when you forget to plug in and just need to get home, cannot be understated. Sure, you'll still need some gasoline or diesel fuel, occasionally. Until such time as we can ALL make use of Supercharger stations, we need a period of backward compatibility with the existing, fueling infrastructure.

And may the better economic choice win.

User Journal

Journal: Truly private email

Journal by DaChesserCat

The problem with modern email systems is that the emails are stored in plaintext. Some systems may use site-wide public/private key encryption but, if a third party gets access to the site's private key, everything is, effectively, plaintext.

So how do we fix this?

Do all encryption/decryption on the client. The client holds the private keys. The server has everyone's public keys. All traffic and stored data is, by default, encrypted.

More specifically:

Messages on this system are more like posts than emails. Responses and the like are other posts. Each post has a unique message ID. If you choose to quote or reference another post, your post would contain a reference to the message ID and what offsets within the message you wish to quote/repeat. Under no circumstances would content be copied from one post to another. The reason for this will become clear in a moment.

You want to create an account on the system. You create a user ID and a public/private key pair. You give the user ID and public key to the system. The private key is kept only on your client system(s).

When you want create a post, you compose it on your client machine, then generate a session key for some shared-key cryptosystem. You encrypt the message with the session key. Then, you send that encrypted data (not the session key) to the system. The system gives you a message ID.

Note: this is how HTTPS works (the actual content is encrypted with a shared-key system, the shared key is encrypted with public keys for transport) and how PGP works (message is encrypted with shared-key system, shared key is encrypted with recipient's public key for security and sender's private key for sender verification).

You then tell the system what user IDs are allowed to view the message. You request (possibly cache) public keys for such people. For each authorized viewer, you encrypt the message's session key with that viewer's public key. You pass the viewer's user ID and the encrypted session key to the server. The system tracks a many-to-many relationship between viewers and messages, with the encrypted session key on the join table.

The data and the session keys are NEVER stored as plaintext. That information is only held on the client system(s).

If someone succeeds in breaking a session key they will gain access to the contents of one, and only one, message. If this message contains a reference to another message they will need to break the (different) session key for THAT message, as well, to see anything in it. This way, you never have ciphertext (an encoded message) and plaintext (decoded data from another message) with which to help break other session keys.

Decoding a session key is unlikely to provide enough information to determine someone's private key. They'd have better luck trying to reverse-engineer it from the public key.

You connect from your client system and tell the server you want to read your email, probably using some kind of public/private key negotiation. The server determines what message IDs you can see. Your client determines whether or not you've seen them (tracking message IDs is ok; most RSS readers do this so that you aren't seeing the same messages over and over again) and downloads the message IDs you choose to see. The server provides you with the public-key-encrypted session key for each message. Your client system has to use the private keys to decode the session keys, allowing you to further decode the messages.

You can see who else can see the message. You don't really know, from that metadata, who wrote it, though. All you can determine is who can see it.

If you have reason to believe that someone's account has been compromised, you can remove that person from the authorized viewers of one or more messages. The system deletes the link between their account and the message, deleting the session key in the process. That way, if someone attempts to use the compromised account info, they'll have access to fewer messages.

It would also be very easy to setup the system so that so-and-so can see this message for 5 days, then the access is auto-deleted. Or you could choose to delete your access to the message. Then, there would be no metadata connecting you to the message, nor any way for the message to become visible if your account was compromised.

Message IDs which have no references to any user IDs would be auto-deleted by the system. That would break any other messages which referred to it. But that's the only way to ensure that one message can't compromise another. The actual information, in one message, which referenced another would be part of the encrypted data, so there would be no way to determine metadata about which messages refer to which.

In this fashion, the system administrators cannot read your mail. Nor can any third party. Even if they have a warrant and/or other court order. They simply don't have any way to access the plaintext. A third party would have to compromise a client system, then use that information to view messages a) that person is allowed to see b) before other people become wise to their being compromised and disconnect that user from their messages

Naturally, this mechanism can also be used to store notes. Post a message which only you can see. Maybe add access for someone else later on.

Gee, I've NEVER emailed myself some information, from a desktop or laptop PC, so that I could access it on my smartphone :-)

If the system can encrypt arbitrary bit-streams of great length, you could use this as a secure data locker. Store pictures, music, videos, whatever. Only give someone else access if you wish. Revoke that access if you wish. Revoke your own access to something shared by someone else. The people managing the system have no mechanism to see what you have stored.

I've NEVER emailed myself a file as a transfer mechanism from one machine to another :-).

User Journal

Journal: Graphical SQL query builder

Journal by DaChesserCat
There has been significant talk, as of late, about how to to do programming using a graphical interface, instead of the usual text-based ones. A previous entry into this journal talked about that. It's time to start nailing down some more concrete ideas about this.

First off, I tend to think of anything involving aggregates (and yes, SQL queries are operations across an aggregate of records/objects/tuples/whatever) as map-reduce operations. You create a function which will filter/transform each tuple individually (map) and you may do something across the resulting set to reduce the total number of tuples. Selecting a subset of fields from a tuple is a map operation. Selecting a subset of tuples from the total set is a reduce operation. As such, you can think of a SQL query as one or more map-reduce operations. For example:

select f1, f2, f3 from t1 where f1 = 'blah' and f2 = 1

We do map across tuples from set t1, emitting only fields f1, f2 and f3. We do a reduce across the records such that we only emit records where f1 = 'blah' and f2 = 1. In principle, the output of map -> reduce will be the same as the output of reduce -> map. In reality, we may want to do the reduce(s) first, emitting only the primary key values from t1 where the fields meet the criteria, then do the map across the fields for tuples with the appropriate primary keys. The 'where' clause can be broken into two pieces (f1 = 'blah'; f2 = 1) with the output of one feeding the input of another. As such, we would have a reduce (f2 =1; comparing numbers goes faster than comparing strings) feeding into another reduce (f1 = 'blah') feeding into a map. The reduce operations can run in parallel (functional partitioning) and the map operation can be run in parallel (data partitioning), feeding into an implicit reduce operation which puts all of the parallel-generated output results into some single stream. Many databases already do this behind the scenes when they build a query plan, using various internally-tracked statistics to determine which comparisons should be done first, using a knowledge of which fields are indexed and which aren't, to optimize the performance of the query. And if you run the same query twice, with slightly different values, the second query will usually run much faster because the database is able to leverage the already-built query plan.

So, how do we represent this, visually?

We can start with the tree-based structure mentioned in my previous journal article. But that limits you to a particular sequence of events. I'd like something a little more abstract. I'd like the system to be able to optimize the query.

Represent each table/tupleset as a circle. There are lines radiating off this circle, representing fields/attributes in each tuple in the set. You can connect one or more lines from one circle to one or more lines on another such circle, indicating a join. We would need some kind of graphical representation indicating inner/outer join. Fields which are indexed should be easily recognizable. Field(s), singular or composite, which comprise the Primary Key should also be easily recognizable.

You wrap another polygon around that, with a line reaching the edge of the polygon. This polygon represents a filter/reduce/where clause. You would have to put something on the edge of that polygon representing the limiting criterion. Need multiple criteria, such as an 'and' statement? Add another such polygon around that one, pulling a field out to this polygon and specifying criteria for this field. Each criterion polygon is an implicit 'or' statement; you can have multiple criteria for a single field. Multiple concentric filter polygons can be merged into one, thicker filter polygon, hiding the overall filtering criteria. Or a thick one could be 'exploded' back into multiple, single-field-criteria polygons with one dragged inside or outside another, if you really want to mess with the order in which they're done.

What fields come out of this query? Find the lines representing the values on the initial tupleset circles and pull them through all the polygons, such that they radiate outwards. These can, then, be connected to other tuplesets, filtered or otherwise.

You can do a filter around the result of a join. But, if the filter is only applied to one field from one tupleset within that join, the filter can be 'shrunk' down to surround that tupleset, with the join happening after the filtering. And, realistically, this what the database will probably do, internally, so as to reduce the number of tuples which need to be joined.

We would also need another polygon representing modifications to the fields. For example, if you need a case...when statement, that would be another polygon which filters the values. One or more lines from the tupleset would hit the polygon and one line would come out. An aggregate statement, such as a sum() or count() would also have a polygon. And one polygon can be pulled inside or outside another to indicate what order (inside -> outside) the various modifications can be applied. Naturally, if an aggregate depends on the output of a modification, the modification will have to remain inside the aggregate. Or they can all be squashed into one, thick polygon, to hide the actual representation of what's going on and make it easy to use the output of this within a larger query.

What about insert, update or delete statements? Many of those involve queries to extract values which will be inserted or updated, or they use queries to determine which fields get modified or deleted. So a query is still the basic building block of all of those.

And, of course, as with any touch-based application, you can zoom in/out to show/hide the details.

So, what's the deal with each filtering polygon only filtering on one field? And one modifying polygon only producing one output? That's where factoring comes into play. If you end up with multiple criteria which all do the same modification or all do the same filter, it may be possible to pull those 'components' out and create a view. Then your queries can filter from that view. It would be relatively straightforward to spot when this is possible and it would be relatively easy for the editor to allow you to select the tupleset(s), possibly joined, the modifications and the filters and refactor everything. Anyone who's done significant work with a database knows that a querying a view will, quite often, provide a performance improvement over querying raw tables. Few and far between, however, are the people who are able to spot these refactoring opportunities, looking at raw SQL code.

Finally, this format isn't limited to SQL. If you put a filter on a field which does a regular expression match, but the database you are targeting can't do a regular expression match, that would indicate that some of the work for this query will need to be done programmatically, outside of the SQL query. And, if you are targeting a NoSQL database or an XML-based object store, the querying can be turned into XPath/XQuery and the modifications can be turned into XSL. In this fashion, this could provide a powerful tool not just for visualizing, but also for code generation.

Naturally, it should be able to parse existing SQL queries and, if possible, XPath/XQuery/XSL and create the visual representation. In this fashion, it would extremely useful for maintaining existing codebases. Couple that with the ability to generate code, possibly different from the input languages, and you have a powerful tool for migrating from, say, SQL-based relational databases/tables to NoSQL or XML object stores.

User Journal

Journal: Conversion slide rules

Journal by DaChesserCat
I mention, in a previous journal entry, the fact that I want a wristwatch with a slide rule bezel. We do a lot of traveling, frequently to places where they use Metric, instead of the Imperial units with which I'm familiar. I have also traveled to places which had significantly different currencies. When I was in Norway, it was approx. 6.5 NOK = 1 USD. When I was in South Korea, it was about 800 SKW = 1 USD. When we went to Chile, it was about CLP 500 = 1 USD. Slide rules are very good at multiplication, which is all you really need to do to convert between currencies and between measurement systems.

In the absence of such a wristwatch, it might be helpful to print a set of concentric, circular slide rules on a piece of paper or cardstock and take that with me. I anticipate the following, on one side of the paper/card stock:
  1. miles
  2. meters/km
  3. feet and pounds
  4. grams/kg
  5. ounces

Naturally, because kilometers, meters and centimeters all vary exactly by orders of magnitude, you could convert miles to meters or kilometers, just as easily. And you could convert feet to meters or centimeters, just as easily. The 1 or 10 mile mark would be around the 16 meter mark (1609 meters / mile). The 1 or 10 meter mark would be around the 30.5 foot (and pound) mark (30.48 feet / meter). The 2.2 or 22 pound (or foot) mark would be around 1 or 10 gram/kg mark (2.2 pounds / kg). The 28 gram/kg mark would be around the 1 or 10 ounce mark (1 ounce = 28.35 grams).

That would be a total of 5 concentric, circular slide rule scales. That's about as much as you could hope to put on one side of a piece of paper without getting too confusing.

They should probably be color-coded. Let's assume that those five scales were printed in:

  1. red
  2. green
  3. blue
  4. purple
  5. black

(outermost to innermost).

  • red -> green = miles -> meters/km
  • green -> blue = meters/km -> feet
  • blue -> purple = pounds -> grams/kg
  • purple -> black = grams/kg -> ounces

Five scales, four useful conversions.

For the other side, starting from the outer-most scale and working in, I'd do:

  1. gallons
  2. liters and local currency
  3. US Dollars

As such, this would need to be reprinted anytime I was going to a different country. The reason for this progression is simple. I need to be able to convert between liters and gallons. I also need to be able to convert between currencies. The three scales, in this order, would also allow me to convert local currency / liter -> local currency / gallon -> US Dollars / gallon. So, three scales, a total of three useful conversions.

When you determine where you're going, find the exchange rate and print these sets of scales on opposite sides of a piece of paper or card stock. Trim off the excess and throw the result in your bags. Then, when you get there, you have everything you need to convert between measurements and currencies, as well as do a more complicated conversion (USD / gallon to whatever / liter, and vice versa).

If you wanted to make a more permanent "device," you could make a double-sided circular slide rule. All of the scales on one side (length and weight) would be fixed. Only the inner-most scale on the other side (currency conversion) would need the ability to move. Someone with a laser cutter/engraver could probably fabricate the pieces, pretty easily.

User Journal

Journal: Ideal wristwatch

Journal by DaChesserCat

Lately, I've come to the conclusion that I'd like a wristwatch with a slide rule bezel. I've spent plenty of time playing with slide rules so I'm pretty proficient with their use. Having one on my wrist would be nice.

I've spent time, at various department stores and jewelry stores, explaining to sales clerks what they're good for. Travelling in a foreign land? With a foreign currency? Set the slide rule to the currency exchange value and quickly convert prices between currencies. Simply find the "local" price on one scale and see the other price on the other scale. Are they using metric? And you'd like quantities, distances, etc. in imperial units? Or vice versa? Set the slide rule for the appropriate conversion factor and you're good. If you know what you're doing, you can even do more complicated conversions, like Chilean Pesos / liter to US Dollars / gallon. Or Norwegian Kroner / kilogram to US Dollars / pound. I have done these, and many more, at various points in my life.

There are a few problems with most slide-rule-bezel watches:

  • Most of them put 60 at the 12 o'clock position. That's useful for doing time calculations. I don't anticipate doing that very often. I'd like the 10 at the 12 o'clock position. That way, I can use the minutes on the watch face to calculate logarithms (anyone who's used the L scale on a slide rule, in conjunction with the D scale, knows how to do this). And I don't want any other values cluttering up the space between the minutes and the inner scale. For me, at least, that just gets in the way. I've managed to find one Casio watch where the inner scale moves, so I can line that scale up with 10 = 12 o'clock. For most watches, the outer scale moves and the inner scale is fixed, with 60 = 12 o'clock.
  • With all too many of them, the numbers on the scales are just too small for my aging eyes. I'm looking at you Casio and Seiko.
  • The slide rule bezel is more of a marketing gimmick, so they don't put much effort into being accurate. As an example, line up the 10 in the inner scale with the 10 on the outer scale. Do the numbers line up, all the way around the dial? For some of the lower-priced watches, the answer is "no, they do not." Now, line up the 10 on the inner scale with the 30 on the outer scale. Do the multiples line up? On all too many, the answer is, again, "no, they do not." Which means any calculations you attempt will be inaccurate.

Here's my wishlist, in order of decreasing priority:

  1. Accuracy. Must pass both of the aforementioned tests. Otherwise, it's just "marketing" (translation: lying, bait-and-switch, etc.).
  2. Numbers on the scales are large enough and high-enough contrast that I can see them without needing a magnifying glass.
  3. Either the inner scale has 10 = 12 o'clock OR the inner scale moves so I can set it that way. If you absolutely must put time-conversion numbers on one of the scales, put it on the outer one, preferably outside of the slide rule scale. I want the slide rule scales as close together as possible to limit errors caused by parallax.
  4. No excessive ornamentation getting in the way of the minutes tic marks. I want to be able to see them very clearly so I can calculate logarithms.
  5. A complication (secondary, inner dial) showing time in an alternate time zone (UTC), preferably on a 24-hour scale.
  6. Solar powered, so I never need to change the battery.
  7. Ability to read the time in the dark

Anyone know of a watch which fits the bill? Citizen makes some which fit most of these, but not #3. Casio makes one which fits #3, but fails on #2 (possibly #1 as well).

User Journal

Journal: Time to update the Metropolis keyboard

Journal by DaChesserCat

Many years ago, some researchers at IBM came up with a design for an on-screen keyboard. They analyzed the QWERTY keyboard, the FITALY keyboard and a couple others, determining how fast someone could type on them. QWERTY scored lower than any other, around 30 wpm. Their keyboard scored > 40 wpm.

Details can be found here

They get into a long analysis of Fitts Law, which explains how long it will take to move from one character to another. It's logarithmically related the ratio of how far it is from one key to another to how big the destination key is. Based on this, they come up with a hexagonal pattern to make their keyboard more "dense" and arrange the characters such that the most commonly used transitions (digraphs/trigraphs) are as close together as possible.

They're assuming every key on their keyboard will have a unique symbol on it. That might work for something like a tablet, but it stinks on a modern smartphone. I can't use a traditional keyboard on mine. My fingers are too fat. I find myself getting a pretty good input speed with a compact- or T9-formatted keyboard. Larger buttons are easier to hit/more forgiving; more forgiving = faster, assuming that the text prediction software is any good.

Let's take another look at Fitts Law, again. The shorter the distance from one key to another, the faster you get there. No surprise, there. But it's inversely proportional to the size of the key. Bigger keys mean faster response.

What happens if you put two characters/symbols on each key? Can you just take their keyboard and squash 2 adjacent symbols onto the same key and depend on text prediction to make up the difference?

Their original design for the keyboard was nearly circular. After all, the shape with the shortest distances from random-point-a to random-point-b is going to be a circle. Joining multiple symbols into a single key is going to be problematic. Maybe joining 3 at a time would get the job done.

They also designed it with a single "space" button in the middle. This is because, within most text corpi, the space is the single-most-used symbol in the bunch. After all, it's used as the separator between each word, and some of those words (such as "I" and "a") are single letters. I'm thinking that rates either an oversized "space" area (as with the oversized space bar on hardware keyboards and the oversized "space" on most on-screen keyboards) or multiple "space" areas (as with the OPTI and FITALY keyboards).

I think it's time to re-do the analysis done in that paper, with an eye toward putting 2-3 symbols on each key. If you have a cluster of letters which are on the low-end of the frequency distribution, it might make sense to put them on the same key. Letters on the high-end of the frequency distribution might rate their own key. The whole idea is to get the number of keys down, so the individual sizes can be larger.

My biggest worry is that you'd end up with multiple of the vowels on a single key and the text prediction software would have a very difficult time figuring out which word you're attempting to input. I have no idea how to design the layout to make the text prediction more efficient. I know that it tends to be more efficient with a compact keyboard than with a T9 keyboard, because compact has fewer symbols / key.

Anybody have any ideas how to approach this?

User Journal

Journal: Programming != typing

Journal by DaChesserCat

A while back, I was looking at a forum where someone asked if you'd use a tablet to do computer programming. Most of the responses were centered around "typing is slow/awkward on a tablet."

I agree. Typing is awkward. But, who says programming has to equal lots of typing? Yes, it does, currently. But does it have to?

I took a compilers course a few years ago. One of the things which I learned in that course was that a compiler does multiple steps, largely in series, where each one feeds into the next, with the object code being the final result.

The first step: going through the code, recognizing various kinds of constants, keywords and potential identifiers (variable names, class names, function/method names). Once it has a sequence of these, the next thing is to create something known as an Abstract Syntax Tree. For example:

a = b + c * d

Would be turned into a tree of nodes, containing operations, variable or constants. At the top, is an equals sign (assignment). "a" is on the left and "+" is on the right. The "+" also has nodes extending below it, "b" on the left and "*" on the right. The "*" also has nodes extending below it, "c" on the left and "d" on the right.

The next thing which usually happens is to "decorate" the tree. If "a" is a double and "b", "c" and "d" are all integers, we need to mark the "*" and the "+" as integer math, but we need to do some kind of implicit casting before the assignment. Usually, you "decorate" the various variables according to what type they are, then deal with the operations, then figure out where one type needs to be cast to another.

An interpreter or a compiler will start at the lowest point on the tree and work its way up. So, the aformentioned code becomes integer:c * integer:d, with the result being added to integer:b, with the result being cast to a double the assigned to double:a.

Most programs have more than one expression. Quite frequently, if you calculate "a" in one expression, then use "a" in the next expression, you could rewrite the two expressions as one. Shorter expressions, though, tend to be easier for a human to read, which is why only sadists and functional programmers (like me) tend to bother with creating really long expressions.

It doesn't really matter what source language you're starting with; whether you're using Java, C++, RPG, Cobol, Perl, PHP, Ruby or Javascript, the starting point is ALWAYS to turn it into a tree.

So, if the code you're writing is going to be turned into a tree, why can't you just create a tree? Such things tend to be awkward when you're using an interface dependent on a mouse and a keyboard, but they're much more natural in a touch-screen environment (tablet).

Something else I learned from that compilers course. Do you know what you get if you create a serialized version of the Abstract Syntax Tree, using prefix notation (such as "+ a b") instead of infix notation (such as "a + b") and put each simple expression inside a set of parentheses?

Lisp.

Indeed, the reason Lisp has such power over certain groups of programmers is that you're almost explicitly creating an Abstract Syntax Tree, in text. And it provides the means, not only for the programmer to create an AST, but also to programmatically create and manipulate ASTs. In other words, you can write code whch writes/modifies code. And you aren't doing anything as clumsy as putting together a string and running

eval(stringVariableContainingProgramCode);

You're starting one or two levels down the chain from there, with the initial parsing steps already done.

As such, the first step toward creating a touch-screen code development environment would be to create something which lets you drag various Lisp commands from a palette of commands, drop them onto the tree, and then execute the whole thing. From there, the next question becomes: do you want output in Lisp, or can we run some kind of code generator on this tree to create output in some other, more commonly used language?

Note: anything which can be done from XML or XSL can be done from Lisp. If we can drag-and-drop components into a Lisp program, we can also drag-and-drop components into XML and any of its derived forms (such as HTML, XHTML, HTML5, etc.).

So, would you use a tablet for writing code?

Transportation

Journal: As seen on Waterworld 1

Journal by DaChesserCat

Another idea.

I was watching "Waterworld" the other night. I'm rather enamored with the Mariner's trimaran (boat). I like the vertical axis wind turbine (VAWT) on the mast. But, just how would you do that?

Here's my thought.

You make something like a cross between a Darrieus turbine and a Gorlov Helical Turbine. In short, one of those twisted, multi-blade, egg-beater-looking turbines. Mount it with the central axis on the mast.

O.k. That leaves you with no way to put sails up. The blades will sweep into the area occupied by the main sail and any jib you may have.

Unless, of course, you build the blades of flexible material. Make the upper hub able to lower down the mast, bowing the blades outward into the wind, or rise up the mast, pulling the blades in flat, against the mast. This would give you a way to completely stow the blades, for those times when you want to use sails. It would also give you a way take the turbine out of the wind in gusty conditions, when the sudden gusts could overstress the mast or capsize the boat.

O.k. So, why would you WANT one of these on your boat? Well, if the bottom hub has a generator in it, it would provide a significant amount electricity when your sails are stowed and you are sitting at anchor/in port, etc. That would be a considerable amount MORE electricity than you'd get with a traditional wind turbine, mounted elsewhere on the hull.

I can imagine a boat with a couple "auxiliary/maneouvering screws" powered by electricity, with some batteries. Charge up the batteries while you're sitting at anchor, and use stored electricity to move in/out of port.

Depending on the efficiency of the whole system, and the swept area of the turbine, you might even be able to run the turbine and have it feed power to the screws for regular propulsion, if you are going to be changing course frequently and don't want to fight with the sails.

I'd be interested in hearing the thoughts of others, on this idea.

Transportation

Journal: Electric busses with minimal infrastructure 1

Journal by DaChesserCat

I had an idea, this last week.

We went on vacation, recently. While in Seattle, WA and Vancouver, BC, we saw plenty of electric busses. They have long poles on the back which hold up electric contacts, which connect with overhead catenaries (conductive, electrical wires) to provide current. Plenty of people complain about what an eyesore those cables are. Additionally, since the busses can only go where the wires go, the routes are kinda limited. It's a bit like a cross between electrically-driven light rail and traditional bus service. The electric busses can only go where the catenaries go, but they don't have the added expense of building rails.

So, what if you could make a bus which only occasionally needed connectivity to recharge?

The bus drives around on normal city streets. Occasionally, it pulls into a bus stop and, while passengers are loading and unloading, it puts a contact up or down, connects with electrical power and rapidly recharges. I could see two ways to do this:

  1. the bus has a pantograph on the roof, which extends up to an overhead catenary, which is only found at select bus stops
  2. the bus puts a "foot" down onto the ground, which sits on top of a inductive charging device (like the "paddles" used on the EV-1, only much larger); this transfers a significant amount of current, even when wet, without the possibility of electrocution, so it can be built into the road

There would be a limited number of charging points, so there would still be some limitations on routes, but not nearly as much as a bus which needed a constant electrical supply. Minimal eyesores, as well. The latter could be built into the road, keeping the overheard area completely clear.

Various companies are working with ways to make high-charge-rate (and high-discharge-rate) batteries, and there are always supercapacitors, but I'm thinking of running a pump to build up hydraulic pressure, then run the bus as a hydraulic hybrid. If you could get enough hydraulic capacity to cover 5 miles of level ground, you could hit quite a few stops without needing much more infrastructure than a traditional, diesel-powered bus. And yet, you wouldn't have the pollution of the diesel-powered bus. Instead of waiting on new technologies which are still under development or under limited production (the aforementioned batteries and supercaps), hydraulic hybrid systems tend to use off-the-shelf parts.

This idea could be extended further to light-rail systems. Since steel wheels on steel rails have less rolling resistance than rubber tires on pavement, a given amount of hydraulic storage would go further in a light-rail system. Also, since the vehicles tend to be larger, they would (presumably) have more room for hydraulic storage.

For either bus or light-rail, the pantograph would seem to be the better idea. If you want either vehicle to be able to recharge without stopping, you could put in a short distance of electric catenary (say 1/4 mile) and the vehicle could contact it while in motion. You don't have to be stopped to use that system, unlike the inductive charger.

Imagine a hydraulic hybrid bus, without an actual engine on board. It would have an electrically-powered pump, but the electricity would come from outside sources.

I'd like to see that happen.

User Journal

Journal: A different brand of hybrid 1

Journal by DaChesserCat

Most of the hybrid vehicles in the world (and all of them for commercial sale, at this point) are electric hybrids. By that, I mean that propulsion comes from electricity and something else (typically an internal combustion engine). There, are, however, other hybrid technologies out there, some of which are starting to get more attention.

Some years ago, Ford was playing with an "air hybrid." The idea was that they had a large air tank somewhere in the car, and the engine had electrically actuated valves which could take in air from the intake or from the air tank, and output exhaust to the exhaust manifold or to the air tank. Basically, if you wanted to slow down, turn off the fuel and ignition and use the engine as a big, two-stroke air pump (air comes in thorugh the intake and is compressed into the air tank). When you are ready to pull off the light or climb a hill, use the engine as a two-stroke air motor (pressurized air from the air tank is fed to the intake on the engine, pushing the cylinders down, then simply ejected through the exhaust manifold; no fuel or ignition). Yet, when you run out of air pressure or you want to cruise, use the normal four-stroke system with the normal intake, exhaust, fuel and ignition. In this fashion, they were able to leverage a large number of existing components; the only real addition was the extra connectivity with the air tank and the electrically actuated valves which let you un in the engine in a two-stroke air pump or air motor mode, or four-stroke conventional mode.

I've read about it, but I'm having a hard time finding any current links on the subject. If you find any, feel free to bring them to my attention.

This recently got some more attention, when a Korean company suggested a car with batteries and an electric motor providing the main cruise power, and compressed air providing a hybrid mode for starting/stopping. Batteries don't handle large surges in input or output very well, so let the compressed air system handle that, and let the batteries do what they do best (slow, steady power).

Another type of hybrid technology is a hydraulic hybrid. This one requires adding some components to the drivetrain (a hydraulic pump/motor), some storage (called accumulators), and a variety of valves, lines and a controller.

What's an accumulator? Think of a long hollow cylinder with a piston in it. One end has hydraulic fittings and lines on it, and the other end has some kind of compressed gas fitting on it (nitrogen gas is popular). If you have no hydraulic pressure one one side, and about 1,000 psi gas pressure on the other side, that will push the piston all the way down by the hydraulic fittings. That's considered "pre-charged." Now, put some hydraulic fluid, under pressure, through their fittings. This will push the piston away from the hydraulic side, compressing the gas to even higher levels. The aircraft I've worked with usually had about a 1,500 psi pre-charge, and the hydraulic system usually ran about 3,000 psi. With full pressure on the system, that would push the piston about 1/2 way down toward the gas fitting, compressing the gas to the same 3,000 psi as the hydraulics. If you then closed the hydraulic valve, you could store energy in this fashion for days at a time. We used them extensively in the F-16. Consequently, it's relatively lightweight (you don't want to put a lot of heavy stuff in an aircraft), it's reliable (I never replaced a single one in four years as a jet mechanic, nor am I aware of anyone else who had to), and it can store a significant amount of energy (ever tried turning over a jet turbine? The F-16 uses stored hydraulic pressure to start a small jet engine, which then starts the main engine).

As with electric hybrids, there are both series and parallel varieties. The parallel variety is sometimes known as a "hydraulic launch assist." The basic idea is that, when you are braking, the valves are set so that hydraulic fluid is being pumped into the accumulators. This provides mechanical resistance, which slows you down, and stores the energy. When you're ready to get off the light or climb a hill, pressure from the accumulators can turn the hydraulic pump (which is now functioning as a hydraulic motor) and provide power for this. Normally, the systems envisoned cut out at around 30 miles/hour, but that's enough to damp out most stop-and-go traffic.

The series variety has a motor turning a hydraulic pump, some accumulators, and a hydraulic pump/motor turning the drive shaft. Such a vehicle typically doesn't need a transmission, which is a nice feature. I've found less coverage on this type of system.

Early in my Air Force days, I was talking to a friend about making a vehicle with four-wheel independent power, and no drive shafts or axle shafts. Put a hydraulic motor in each wheel hub and tie a hydraulic pump to the engine. I wasn't too worried (at that point) about regen braking, and I didn't understand accumulators well enough to think about adding regen braking to the system. My friend (Carl) liked the idea; he had a late '60's Mustang he was putting together, and it sounded like a cool idea. I talked to some more experienced mechanics, though, and they said that, while the idea was reasonably sound, the fly in the ointment would be the hydrodynamics. Getting the pressure to each of the wheels wouldn't be too difficult (hydrostatics), but I'd need a certain number of gallons-per-minute to maintain power at highway speeds, and that would be difficult. I'd need some really fat, heavy-duty tubing to carry it, very careful attention to bends in those lines (sharp bends tend to cause severe resistance to fluid flow), etc., all of which would be heavy and would generate a lot of heat (more gpm = more heat), which would seriously impact the performance and efficiency. They knew more about the subject than I did, and the obstacles sounded pretty overwhelming, so I dropped the idea (it took some SERIOUS explanation before Carl finally gave up on the idea, as well). If engineers are actually working on highway-capable hydraulic series hybrids, someone must have found ways around these issues.

In the meantime, I've seen and heard about a few other hydraulic-driven vehicles. Something they were fond of showing us in the Air Force was a film titled The Business of Paradigms. At one point, the narrator asked us what we would think of a small vehicle which got over 100 mpg. Most people can't even picture that. Then, we got to see the vehicle. It was a three-wheeler (a trike) which had a small motorcycle engine, turning a hydraulic pump, which fed to some hydraulic accumulators and a hydraulic motor which turned the rear wheels. The motor always ran at its most efficient setting, and the throttle would control fluid flow to the wheels. It also offered regen braking. While it only carried one person, and it couldn't do interstate speeds, it did exactly what the narrator described. I would characterize it as a hydraulic series hybrid.

Ever seen a skid-steer loader? They're better known as "Bobcats," even though Bobcat is only one of the companies which now manufactures them. The engine turns a hydraulic pump, the wheels are turned by hydraulic motors, and the pedals and levers simply control valves feeding fluid flow to the wheel motors and the forklift/loader mechanism. I wouldn't want to try driving one on the highway, though.

Also, while I was in the Air Force, I was acquainted with a machine known as a "jammer." Like a Bobcat, it had a small engine, which turned a hydraulic pump, which could operate a hydraulic lift or turn the wheels. Jammers were usually operated by "load toads," who used them to lift bombs (anywhere from 500 to 2000 pounds each) up and attach them to the bomb racks on the planes. Once again, a hydraulic series hybrid. I don't know if they had accumulators in them, though; I distinctly remember hearing the pitch of the engine change as they lifted objects or accelerated forward or in reverse.

I'm starting to wonder about the possibilities of some of these other technologies. Some of the newer hydraulic systems can handle over 5,000 psi, which makes them very power-dense. Also, pneumatic (air) systems are getting up to the 5,000 psi range, in no small part because people are looking for systems which can store significant amounts of hydrogen gas or natural gas (5,000 psi puts more energy in a cubic foot than 3,000 psi). The air-electric hybrid, in particular, is starting to sound VERY interesting. Too bad I never learned to read Korean (I spent a year in South Korea, but never learned the language).

User Journal

Journal: Ideal EV Battery

Journal by DaChesserCat

I had a complete mindstorm the other night: a combination voltaic cell and multi-layer supercapacitor, integrated into one, physical unit.

Didn't get that? Some background is probably in order.

I'm thinking about lead-acid batteries. These are usually made of lead electrodes, sitting in some kind of acid-based electrolyte. If you want a starting battery (which needs to dump a great deal of current for a short period of time), you usually use electrodes which have a sponge texture (sponges have tremendous surface area, packed into a small volume). The problem is that, if you discharge most of the current, the lead starts to dissolve into the acid solution. When you recharge the battery, the lead tends to precipitate out of the solution, bonding to the lead electrodes, and fill in the pores in the spongey electrodes. This reduces the surface area, which reduces the amount of current the battery can release. Consequently, a few deep cycles will basically kill a starting battery. Letting them sit, discharged, for a while, will further dissolve the electrodes, sometimes beyond the point which charging can recover them. The result is lead from the electrodes bonding chemically with the sulfur in the sulfuric acid electrolyte, making a lead sufate "mud" which sits in the bottom of the battery. There is no known way to recover a "sulfided battery;" replace it, or drain the electrolyte (and the "mud") and put new electrolyte in it.

Electric Vehicles are usually made with deep-cycle batteries. These batteries still use lead electrodes and acid-based electrolyte, but they use flat plates. If you deep discharge them, the leads starts to dissolve into the electrolyte, but recharging them just puts layers of lead back on the flat plates. This doesn't reduce the surface area (how do you reduce the surface area of a flat plate?) so the batteries keep their capacity for much longer (about 500 cycles to 80% depth of discharge is typical). The newest versions of these batteries don't have the plates sitting in liquid; the electrolyte is either gelled or absorbed into some kind of fiberglass mat (Advanced Glass Mat or AGM batteries). Since their flat-plate electrodes have a lower surface area than the sponge electrodes in starting batteries, they can't provide as much current.

The latest trend is called a spiral cell. Use a long, thin sheet of lead, cover it with a thin glass mat (with the electrolyte absorbed into it), then another lead sheet (the other electrode; always two, there are, a positive and a negative), then a thin layer of some kind of insulator. Then, roll the whole thing up like a jelly roll. The result is something with a very large surface area (able to dump high current), but still able to handle multiple deep-discharge cycles.

Spiral cells are fairly new; I don't of any EV's (yet) which use them.

Batteries still aren't able to comfortably handle very high discharge rates, though. For dumping significant power for, say getting off a stop light or climbing a hill, or for absorbing lots of power from regenerative braking, you need supercapacitors (sometimes known as a supercaps).

I mention supercaps in other journal entries; suffice it to say they don't store as much energy as batteries, but they can very quickly dump what they do store. Consequently, you couldn't do an entire EV with just supercaps, but a few of them added to the system would allow the vehicle to accelerate quickly (high power) for a few seconds, then settle into a more moderate cruising speed. If you think about it, that's what most passenger vehicles need to do. Unfortunately, I don't know of any controllers which can handle both batteries and supercaps. Consequently, building an EV which uses them is still way out in the experimental range.

Supercapacitors are usually made by taking a thin, aluminum plate, covering it with some kind of very porous solid electrolyte (activated carbon is popular), another thin plate (like a battery, a capacitor needs two electrodes), then covering it with some kind of insulator and rolling the whole thing up like a jelly roll.

One good jelly roll deserves another, don't you think?

So here's the idea. Lay down the first electrode, electrolyte and second electrode for a supercap (we'll call this the "layer one supercap"), then some kind of resistive material (not a full insulator; an insulator has extremely high resistance, effectively preventing any energy transfer through it; we WANT energy transfer through this layer, just not too quickly), then lay down all three layers for a second supercapacitor (call it the "layer two supercap"), then another resistance layer, then the three layers for the battery, THEN we lay down an insulator. Now, roll up this entire mess into one cell.

Tie the layer-one supercap to the terminals on the battery.

If you put energy into layer one, it will build up the voltage in that layer. When the layer one voltage goes higher than the voltage in layer two, energy will move through the resistance layer until they equalize. The same is true for layer two and the battery layer.

If the whole thing is charged up, then left sitting, you'll end up with the battery layer being charged, and both of the supercap layers being charged to the same voltage. When you draw current from the cell, layer one will discharge first. As its voltage drops, layer two will feed energy to layer one (but not too quickly). As layer two's voltage drops (slower than layer one), the battery layer will feed layer two (even slower), which will feed layer one. The result is a three-stage punch: very high power for a few seconds, fading into high power for a few seconds more, fading into moderate power from then on. The supercap layers will discharge first, then the battery.

If you feed energy back in from regenerative braking, layer one will charge first. When its voltage goes above layer two, energy will flow from layer one into layer two (not too quickly, though). When layer two's voltage goes above the battery layer, energy will flow from layer two to the battery (again, not too quickly). Consequently, the supercap layers will charge first, the battery last.

Either way, the two layers of supercap will buffer all the major surges in and out, so the battery gets relatively low current flow in either direction.

The resulting battery would have less total capacity than a regular battery of the same weight (supercaps pack less storage per pound than batteries, and this battery is part supercap), but it would be able to handle larger power surges (in either direction) better than a starting battery and be able to handle at least as many deep discharges as a deep-cycle battery. And, since the battery handles all of this internally, you wouldn't need a fancy, new controller and separate supercaps.

You would, however, need direct taps into the layer two supercap and battery layers, if only so you could accurately gauge the state of charge in each layer. I mean, a traditional EV uses a voltmeter as a kind of "fuel gauge," because batteries tend to lose voltage (slowly) as they discharge. Such a meter, tied to the main terminals (and therefore, the layer one supercap), would be swinging around all over the place. A voltmeter tied directly to the battery layer (low current; we want just enough flow to determine how much is there, so we're talking a tiny fraction of an amp) would provide a fairly accurate "fuel gauge" reading, while a volt tied to all the supercaps would provide a kind of "boost gauge," indicating how long you can hold the pedal down before the car turns into a gutless wonder.

An improvement on this idea would be to put a Zener diode between the layer two supercap and the battery. A diode generally allows electric current to flow in only one direction. More accurately, it provides very low resistance to current flow in one direction (called the "forward bias"), but very high resistance to current flow in the other direction (called the "reverse bias"). A Zener diode is slightly different; it provides very low resistance on the forward bias, and high resistance on the reverse bias (like a regular diode), until the voltage goes above a certain level. Then, it allows reverse bias current flow with very low resistance. If you put a Zener diode between the layer two supercap and the battery layer, and set it so that it wouldn't allow current back into the battery layer until, say, the supercap layer went above 2.35 volts, about the ONLY time the battery layer would get current inbound would be when we eat a SERIOUS amount of inbound current from the regen braking (riding the brakes down the side of a mountain, for example), or when we actually want to charge the battery (most battery chargers put a lead-acid battery at about 14.25 volts for charging; since there are six cells in a 12-volt battery, 2.35 volts x 6 = 14.1 volts, so the 14.25 from a charger would get past the diode and charge the battery layer). The rest of the time, the supercaps would eat ALL of the inbound current. This would be a good thing, since you don't typically want to partially discharge, then partially charge, then partially discharge batteries.

In the absence of such batteries, though, you could probably build a "power module" from an existing battery, some supercaps and resistors or Zener diodes, then tie that into the system in place of the battery. That would probably be a good starting point.

And yes, this idea could be applied to other battery technologies, so long as the battery involves a spiral wrap of some kind. The Zener diode would be extremely helpful if you wanted to a combo supercap/NiCad battery, since NiCad batteries are well known for having a "memory effect," meaning that partial charging and discharging will prevent the battery from fully charging.

User Journal

Journal: Gas going up, but still no EV

Journal by DaChesserCat

Well, gasoline has broken $2/gallon around here, and I'm still no closer to owning an EV.

I've almost given up on converting an existing vehicle to electric. Existing vehicles are heavy (typically upwards of 3,000 pounds), which will require a pretty powerful motor ($$$), more batteries ($$$), more supercaps ($$$), etc. What's needed is something smaller, lighter, which gets by on significantly less power.

I've been looking at stuff by R.Q. Riley, specifically the TriMuter. If they can do interstate speeds in this thing with a 16 hp Briggs and Stratton, it probably won't take much electrical power to get this thing up and moving. It's smaller, lighter, etc., which reduces the required power, required batteries, etc. It would cost about $3k to build one, which is the rough part. I mean, I can get a pretty decent used car for the 3 grand.

On the battery front, Lithium Ion prices continue to fall in price. I figure I can build a 20 kWh pack (good for a 100-mile range) for about $7K. That's down from $20K about a year ago, which is a big improvement. If I'm willing to go with lead-acid batteries, Exide has recently started building spiral-wound Valve-Regulated Lead-Acid (VRLA) Absorbed Glass Mat (AGM) batteries. One particular model, the 31XCD, has specs WAY above any other lead-acid battery I've ever seen. At 12 volts and 115 Ah, that's 1.38 kWh for one battery. At only 54 pounds, that's over 56 Wh/kg. Note: most of their batteries in this class are in the 30-35 Wh/kg range. 25-35 Wh/kg is normal for lead-acid batteries. If the specs on this thing are accurate, a 20 kWh battery pack would weight only 972 pounds (that's 18 batteries, which will give nearly 20 kWh at 80% Depth of Discharge). Most EV's have over 1,500 pounds of batteries (if they use lead-acid), so this is a major jump. I'm HOPING the specs are accurate, but they almost seem too good to believe. Since they're asking about $150 per battery, that would be <$3K for the battery pack.

That would put the whole idea a lot closer to "possible," even if it isn't too probable.

User Journal

Journal: Follow-up to multiple stages

Journal by DaChesserCat

In a follow-up to my previous journal entry titled "Multiple Stages," I'd like to add the following link:

Finn EV Tech

I mentioned the fact that you'd be best served by batteries AND supercapacitors. Well, these guys are producing something they call the "powerpak," which is a lithium battery with an integrated supercap. The result is something which is part main store and L1 power cache. It can dump high power until the supercap is drained, then dump a more normal amount of power from the battery. The result: high energy density AND high power density. A few of these, and I could probably make a freeway-capable electric motorcycle.

Oh, and let's not forget these guys. Want a hub-motor for your vehicle, so you can do away with the transmission, differential and drive shaft? No problem; the largest one the make, at the moment, is about 14 kW (about 19 hp), but if you put one in each wheel, you've got nearly 80 hp STRAIGHT TO THE WHEELS! That should sufficient to make some little two-door putt-putt get up and hustle. And, since you eliminate a large part of the complexity (and friction), you improve the miles-per-kilowatt-hour, which mean 20 kWh of batteries will take you even further.

Getting VERY close to being able to make my own, practical, BEV.

User Journal

Journal: Update on electric vehicles

Journal by DaChesserCat

As I've mentioned before, I've been looking for some kind of Electric Vehicle (EV) to cut the cost of commuting to/from work. Building in a little extra range to get around traffic jams, I figure I need about 90 miles/150 km of range on a single charge. So far, though, there aren't any vehicles available which will do the job. There have been, but they were leased, not sold, and most of them have been withdrawn and destroyed by their manufacturers.

One of the reasons why there aren't more EV's out there is the fact that batteries tend to be low in capacity and very heavy. That's changing, though. More and more companies are coming out with Lithium-Ion-powered prototypes and concept cars, which have range and performance similar to existing Internal Combustion Engine (ICE)-powered vehicles. Consequently, we're getting closer to the day when I can drive to/from work on electric, instead of gasoline.

I'm really looking forward to that day.

I ran across an interesting website this last week: EVUK. In this site, the author complains (frequently) about the fact that all these wonderful electric cars are available in the US, but not in the UK (where they are frequently paying more than USD 6/gallon for gasoline; and I thought the prices around here were bad!). Sorry to burst your bubble, guys, but most of these vehicles aren't actually available over here. Some are prototypes, some are vaporware (announced, but not actually in production), some are just plain speculation, some have been cancelled. Their website does have some interesting links, though. For example, they turned me on to a battery company I hadn't heard of: Thunder Sky, in China. They are supplying high-capacity lithium-based batteries, for very good prices. I'm estimating their energy density at 267 Wh/kg; the best I'd seen, previously, was < 200 for lithium-ion batteries, and those were the small ones you find in aftermarket laptop batteries. These guys are building large, high-capacity batteries, not the small wimpy stuff.

How much capacity is that, really? Let's play with a theoretical situation. I need 90 miles per charge. If my car gets 5 miles / kWh (that's do-able, for something compact), that's 18 kWh. With their batteries, that's only 68 kg/ 148 pounds of batteries. Thats about as much weight as about 23 gallons of gasoline. Yes, you're reading that right: 90 miles in an EV, and the battery pack weighs about as much as two tanks of gas.

At that rate, it shouldn't be hard to make something with a higher range. Indeed, they have. Take a look here. They list motorcycles/scooters, cars and even BUSSES which are running pure electric. These vehicles have been built, but only as showcases for their technology. I believe they are actually building the busses, though, as part of an agreement with the bus manufacturers.

Want more specs? Take a look here. Metric Mind is now supplying their batteries, along with everything else you need to do an electric conversion. Some of those cars not only have enough range to get me to/from work, they also have enough range to drive to my mother-in-law's place. While I'm not that keen on visiting my in-laws, that's a trip we take fairly often. My dad lives a little closer than that, so any vehicle that can take us to see my wife's family can also take us to see mine. That's useful for more than just going to/from work; that eliminates most of the need for a gasoline vehicle, altogether.

This changes things. Soon, I hope.

I took a fish head to the movies and I didn't have to pay. -- Fish Heads, Saturday Night Live, 1977.

Working...