Stopped off at the library to return last weeks book (one of Shakespeare’s comedies), and checked out two more: one on sewing and one on fishing. The latter, obviously because I haven’t gone fishing in years and years! The former, both because I’ve always been interested in how things are sewn by hand, and because I’ve had an interesting idea.

Since I’m now ‘issued’ my mothers cell phone whenever I’m out without her (if I wanted a chaperone in the car, I would go courting, not driving around), it would be easier to carry if my jeans had leg pockets instead of the usual waist pockets. Some what like a pair of military trousers have, well American ones anyway. Possessing both a frugal mind and an engineers heart, of course rather than buy new pants meeting that criteria, my first query is to figure out whether it’s practical to use some old jeans for raw materials and graft such pockets onto the pairs I use, lol. I know I can figure out enough to do such a thing eventually, the question is how to do it properly by hand with the material involved. Having to answer my mothers “Where the **** are you?” call today while I was sitting in traffic at a red light, is a prime example of why such a modification is worth scouting out. I would likely be cussed at if I don’t answer, even if it’s not easily fished out of a waste pocket when you’re behind a wheel, let along that I refuse to chatter on a cell phone while actively driving. Period. Whenever my mother’s involved, you can bet it is a lose, lose situation for me o/.

My main interest for the day however was checking out a certain fishing spot. I found 4 points of interest. One is within 15km of here, another (but very costly) one is about 65km away. Been there before, years ago. The other two are Georgia state parks, on the other flank (approx 20~30km SE of) Atlanta that it would never get past HRP. I purposely avoid locations near Atlanta because of her paranoia. The other is almost a good 100km to the south of here.

Today I wanted to check out the nearest one, since it’s located between the city limits and a neighbouring town. Someday I would like to check out that park to the south and go exploring, as well as see how it is on the fishing pier. Being in the opposite direction from Atlanta is a plus for getting permission to use the car, the downside is it’s far enough that I’ll need to buy gas to replace what’s used on such a trip—I’m not the kind to leave her with next to nil gas. I am the reasonable one here…

Since just getting use of the car for the afternoon was an argument of it’s own! I was so preoccupied over  whether it would be a driving or a walking mission, that I didn’t have time to plan the trip properly; so I ended up getting lost instead of finding my destination. To make it worse the gas station didn’t have any Twinkies! For some reason watching Tallahassee’s quest for the snacks throughout Zombieland has got twinkies on my brain for the first time in years :-/. Since it was my fault for not mapping it out, I replaced the petrol wasted and filled the tank while I was at it. Never mind that I would’ve planned correctly if I would not have to push just to get that far.

Personally I hate highway travel. The higher speeds burn gas much faster than local travel speeds (it’s an old ford)  and the windows need to be shut or fuel efficiency suffers even more; ma also has a standing (near 20 year long) order that the A/C is not to be used. Never mind that at GA highway speeds, it’s actually the most budget friendly way not to drive in a ’93 oven and arrive feeling like a drenched goat.

Spent some time exploring the local sporting goods store: despite what some have said, it actually has very good prices. My main interests being to grep the huntin’ fishing sector, and conclude some other ‘research’ on the way out. I expect what tackle I have stored will do, and my rod/wheel seems to be viable despite it’s lack of use; but it is always best to be prepared just in case.  Some how all that trip through the tackle only served to make me hungry, as odd as that sounds. Maybe I’m part fish? lol.

My research there was more aimed at biking than fishing. Where as most of yesterday was spent on the fish and work situations: last night I took some time to check through the stores online portal. The local shop prices own their online listings. Seems the best choice in this berg too. More specificly my poi was in cycle, helmet, hydration, plus a few associated odds and ends. Can’t know what the operating range is, but biking should be sufficient for my needs. Heck if I can walk like 30 klicks by foot and not get a heart attack, it shouldn’t be hard to do a few miles worth of peddlin’ a bicycle. An occasional snack bar and some water is cheaper than petrol anyway.

It would obviously be some what of a problem that I never learned to ride a bike growing up, kinda the apartment dwellers curse (no bikes, boards, skates, or anything else fun allowed). For the cost of human fuel and getting some much needed cardio-exercise, I’m not above breaking my neck in the figuring-it-out-the-hard-way, as there isn’t any ‘ideal’ places to pactice. Economy matters. For what the future holds, I would consider the massive price gaps between bicycle, motorcycle, and automobile, strongly in favour of building muscle. You need a driver’s license to get around in this freaking country, but you do not necessarily need a car to get around in.  It’s a wonder people don’t drink bath water more often; it’s become that stupid in America. I’m fully open to alternatives to driving, even if it’s likely to generate a few bruises.


That however is quite a fair ways off, it will take some measure of saving to afford that kind of kit anyway plans are sliced. It’ll probably be one of the first things on my private list to fall, once I’ve got a steady income to work with that is. How far way reaching that point in time will be, however is largely at the bitch on wheels’ mercy: because I’m not willing to work (locally or anywhere else in Georgia) unless it is proven, that I will have sufficient freedom with the car to be able to hold down a job without being screwed. It’s the principal of the matter. You don’t want to argue principals with a programmer, not even a totalitarian can win that debate. With a track record that can only breed my distrust, and the difference between road (35-55mph) travel speeds and foot (~3mph) travel speeds, even within comfortable walking distance: whether it’s pissing distance or long distance to get to work or anywhere else, I am not willing to be constrained—especially not by my mothers pathological paranoias: and the only way to ensure that (she) doesn’t come back to bite, is of course not having to rely on access to my mothers otherwise stationary vehicle. Reducing her costs would be one of the points of having a job anyway, including getting my own means of transport in the long haul. Which is obviously necessary for my long term plans.

Before heading home, I hit Walrus Country to search the sporting goods section in like wise fashion, and pick up a fishing license on my way out. Also had to pick something up that ma wanted. She almost owes me more money now than I have saved in my chequeing account lol. Fishing licenses are only needed off private property, but it’s worth having! Stopped off on the way home at another gas station in hopes of finding a Twinkie but had to settle for a LD mini coffee cake and strawberry roll :-(.

Seriously, someone must have gotten to people about cholesterol or something. What kind of world are we living in when gas stations stop selling twinkies!!!!

Somehow I find it highly offensive, that I can’t even go for a walk without being driven nuts; yet my mother is perfectly willing to enlist me to check on racket outside, instead of moving herself 8=).

What next, a lock and key?

To tired to focus on code at the moment, yet much to awake to sleep o/. Been tinkering with an old project: tpsh. Mostly I’ve been polishing the codebase and doing a bit of refactoring; there’s no a debug mode, which reduces some of the cruft that’s crept in from testing. Sometime I also need to import the test scripts lol.

One of the changes, is adding support for running off the Strawberry Perl distribution rather than ActiveStates Perl distrio for Windows. The downside is, most of tpsh biggest problems have to do with Perls portability, namely Windows quirks. Gotta love’em.

Since the merge of the “Code generator”, tpsh has supported a very limited subset of sh script. Not very usefully however, since the shell doesn’t have a real concept of $? yet. Likewise there needs to be some changes in the handling of environment variables. Most ideal IMHO, is a tied hash wrapping $ENV (a magicly tied hash of environment variables) with the ability to hook reads and writes, etc. Preferably in a user-exposabe way that can be extended by shell functions, rather than being limited to the scripts own Perl code.

It’s the more general case however, of having to build up the language rather than use its building blocks. The problemo isn’t in maintainability, but in portability and development time.

Having reactored a chunk of the shells initialization code,  I know that I’ll have to retackle the readline stuff.  To say that I hate Term::ReadLine would be an understatement. I’ve no love for the GNU Readline API either (I would use linenoise), but the GRL C API isn’t as nasty in practice as the plugable Term::ReadLine system Perl uses. The only good thing I can say is that there is a semi-useless stub version included. Licensing issues of just having a GRL backend aside >_>. In my experience, mileage varies quite a lot between Perl readline pacakges, even within the scope of the fscking manual. It’s just a load of crap.

Actually if there’s a way of accessing the API  functions needed for unix termios / windows console, I would be tempted to throw out the fucking thing and just write a Term::ReadLine::SANE module based on linenoise (A C library). I’m more familiar with the unix parts of that.

Tactical Zombie Hunting

There is just something so cool about employing fire and manoeuvre techniques against a horde of zombies, and on the fly to boot.

How do you survive? Team up, nut up, and shoot’em up!

Some how I could swear, the closer proximity I have to family, the worse my existence is.

The STAMAN Project: Phase IV,

Having thought of tasks and storage formats, it’s now time to figure out an implementation language, i.e. what programming langauge am I going to write the task manager in.

O.K. based on what we’ve got so far, it is easy to infer the following is worth having:

  • Portable between systems—a must for me 😉
  • Easy access to SQLite—usually trivial.
  • Better tools than gmtime().
That means this page is rather useful, for what languages can be ruled out. In my répertoire this means Go (aww), Scheme, AWK, and shell languages can be skipped. Reason being the portability of Scheme bindings in general, and the others lacking sufficient portability (for my taste) at this time. That still leaves about 13 languages, lol. PHP, Java, Lua, JavaScript, and X86 assembly are easy for me to rule out. Reasons for that can all be easily guessed; at least if you remember how much I enjoy Suns Java tools. JS/Lua are great choices but I don’t want to screw with the bindings and stuff.

I’m not very interested in compiling SQLite in C/C++ on Windows, or the CLI binding everywhere. So this effectively makes the choice Perl, Python, or Ruby. Out of those three, none is perfect either: perl doesn’t come with the required database code, it just has the definitive interface for databases everybody mimics. Python and Ruby on the other hand, come with SQLite bindings—which many distributions separate out into separate packages. It’s just a lose, lose situation when you think about dependencies, but it does beat writing your own everything for every program. Sometimes. Setup with these three dynamic languages would be easy though, in so far as we’ve gotten with the above.

Time handling is another issue. Perl has fairly minimalist handling of time built in, but on the upside, if you need it, it’s probably three abreast on CPAN. Time::Format and the core Time::Piece module each come to mind. What isn’t built into Perl, often comes with it or can be added to it. Ruby provides a simple but effective Time class, that makes for more natural code than you may expect. More complex operations will require Googling for a Ruby gem, or hand coding it on demand. Python on the other hand provides a comprehensive datetime module, and supporting time and calendar modules, all out of the box! I would say Python takes the lead here.

Rule one of getting work done: know how to leverage libraries.

In terms of programming languages, Perl, Ruby, and Python are generally equal enough for most tasks, so long as you don’t shoot yourself in the foot. Some subtle differences that personally irk me:

  • Perls autovivification can be almost as much a miss-feature as it can be a convenience. You’ve just got to learn the damn language :-P.
  • Ruby functions are not first class objects! Some things can also be weird if you’re not used to Ruby.
  • Python doesn’t always stand up well to typos, especially if they involve indentation o/.

Because of how many lines of code I’ve done in Python over the years, I am more familiar with it’s set of “Irks” than Ruby’s, like wise I know Sh, C, and Perl more intimately than other languages, so I really know their irks. For perl, it’s mostly thin things that get in inconvenient when combing the warnings pragmata with the nature of perl syntax. They spiritually conflict at times. Under Ruby, I mostly find gripes that have a bigger place in programmer culture. My issues with Python generally have to do with trade-offs that I disagree with as a matter of my convenience, even if it usually results in a Good Thing overall. It comes from a C-oriented background meshed with a love for the Perl programming language.

This is a fact: you will always be irked by your programming language, if you use it enough. What can I say, nothing is perfect. Shoot!

For this particular application, there’s some things worth noting also: language portability. If the machine doesn’t run perl, it’s not a real computer. Most systems you’re likely to care about will run Ruby and Python, and there’s probably a crusty old version of Python for those you don’t (nor directly should). In contrast however, Perl is often a lower level of “Cross platform” behaviour than Ruby/Python. You’ll find this highlighted well in the Camel book. One reason I use Python frequently, it always behaves as expected without so many subtle hiccups.

How much this pertains to the current matter, i.e. implementing STAMAN. Perl is the most universally available language, and I’m more prone to need such a feature than most people. A plus over Ruby is no crappy 1.8.x/1.9.x porting issues…! Of course however, I have a camel to ask about minor details, hehe. In my experience the Python 2k/3k thing is less issue than Ruby’s for writing code yourself, more of an issue in leveraging existing code.

So I reckon, that means Perl or Ruby is best called for here. I exclude Python, because I just use the frick’n thing to often.

I think I’m more tired now than when I fell asleep, but at least Zombieland is on :-/.

The STAMAN Project: Phase III, of tasks and storage formats

At least, for me, there are only two pieces to STAMAN that are not trivial to work out before writing the code: choosing the storage format and implementation language.  Both also happen to be areas where experience strongly augments ones intrusion, more so than the rest of the app’.

In the design outline, I noted that YAML would work quite nicely, yet an exposition of the outline suggests that something closer to SQL could better serve the applications design. The reasons behind it should be fairly obvious, if you’ve ever worked with textual data before.

During Phase I, I concentrated on the data involved with task management. It’s not hard to implement an SQL schema capable of representing that. Even better, most dialects offer useful features for handling times/dates. Virtually every programming language has a way of interfacing with such an SQL database, either through natural bindings or calling out to scriptable client programs. SQLite, MySQL, and PostgreSQL in fact provide both means, I’m not familiar with MSSQL. So that’s a big set of pluses all the way around. We even get a reusable DSL to help without having to write it!

The problem however, becomes one of migration paths: what happens if you need to change the data structures, perhaps heavily? That means having a lot more work whenever restructuring is needed, and it’s IMHO, less scriptable than a little perl golf: sufficiently so that I’m not going to screw with it. Insert shameless plug for Ruby on Rails here ;).

In a commercial environment; i.e. oriented on making money off the program, XML would be more likely than any other textual format, but not very convenient for me. I also hate XML parsing with a passion. It is however sufficient for getting the job done, if a bit, ahem, jacking the amount of internal documentation you need to write (or later wish you had) several notches higher than it need be.

Someone might think of a simple Comma Separate Value (CSV) format, but CSV is any thing but simple. Don’t believe me? Just think about data that may contain commas. That being said, the only good things I can say about CSV, from a programming perspective, is CPAN rocks. Unless you’re munging address books or spreadsheet data around, and need a LCD: it is best to avoid CSV, period.

The best bet, in terms of structured text: but one sufficiently able to represent the data set, and be easily edited by hand. What is really needed is a dedicated format: enter YAML. It’s basically a hierarchial way of recording data as sequences of elements and key/value mappings. Works excellently.

The SQL solution relinquishes fine control over the operations, where as the YAML method is assured to slurp up memory in proportion to the input. It’s a lot more like DOM oriented XML, only the translation between the code and textural representation is a hell of a lot more natural. When working with program generated output, it also doesn’t need to be fed through a pretty printer to be comprehensible, which can’t be said of XML—without more pain for someone.

Pro YAML:

  • Easily edited by hand (notepad) and many unix tools.
  • So simple you can skip reading the spec0
  • If you have to write your own parser, make it YAML and save grey hairs.
  • It’s easy to serialize/marshal data around, as easy as it gets without eval().
  • More likely to benefit from compression.
Pro SQL:
  • Less imperative-style code to be written.
  • The hardest processing code is already in the database engine.
  • Can focus on querying data, not parsing it.
  • Languages/frameworks are more likely to ship SQLite bindings then a YAML parser.
Con’ YAML: 
  • It really is as simple as it looks.
  • You have to write your own list/dictionary handling code.
  • Scales less.
Con’ SQL:
  • You have to learn basic SQL.
  • Not the most fun in some languages (C, C++, Java, and C#).
  • Can’t really get at the data, short of a database client.
Note that I haven’t said anything about separating the data store from the client application: using an SQL server is just as viable as storing YAML files on a network drive. It really is that simple.
My personal view? SQLs virtues likely outweigh YAMLs here—unless you’re going to be designing by exploration. I’m not in this case, and I am also competent enough not to shoot myself in the foot. If I was smart, I would make the application wide interface to the data store more abstract than writing SQL queries all over the place like an asshole. Yes, I can be that smart. Don’t tell your neighbours.
0: I read the YAML specification the first time I used it for a project, which was for a rake based built system. How else could I expect to hand write my build spec’s in YAML? :-).

Rules of Family Survival

  • Learn to become solid and expressionless as stone.
  • Don’t take open and seething hatred filled tirades personally; wish you had better ear plugs instead!
  • Remember you’re not a slave at beck and call.
  • Automatically disconnect yourself from being guilted over things you’re not responsible for.
  • Sometimes, you just need to duck…
Is it no surprise that most days are fucking miserable here?