Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

scrottie (4167)


My email address is Spam me harder! *moan*

Journal of scrottie (4167)

Tuesday July 21, 2009
05:40 PM

Anyone have any work for me?

At YAPC, I talked a bit about what I've been doing -- writing Perl for the Vegas gaming market. More specifically, I'm technically an employee but I'm invoicing for hours I use. So far this month, all of my projects have been blocked on various things -- waiting for a vendor, waiting for a specialist to do some work that I can't, waiting for a trip to the office to be scheduled so I have access to some hardware I need to test against, etc. An even longer list of things were recently completed. Hourly sucks when you get your work done quickly. Bad for me, but good for you.

I got in a vacation to Portland and Seattle and I got some time to code on one of my favorite personal projects, but it's time for me to get back to work here. My resume is at I've worked on advanced things, played with Perl innards, completed large projects by myself, played organizer and default speaker to a Perl Mongers group, and even written a book that most people didn't hate. If you can keep me busy for a while, drop me a note at


Friday July 03, 2009
06:27 AM

GUI MUD with xterm's Tektronix emulation

Update: mostly fought with telnet options rather than making the editor not completely minimal, but it's running live. telnet to 2003 using the stock 'xterm' and without GNU screen in the way and help me draw races, classes, creatures, objects, and locations. Read below for more and check out my terrible example screen shot. A humanoid should probably be 2/3rds or 3/4 as tall as the top part of the screen. A building or tree as tall as. Swords or whatever should be laying on the floor. Your line data gets saved as you go. I'll peek at it later.


Yeah, I'm still screwing with this.

Back in the Netscape 3 days, I put a shitton of work into making a JavaScript/HTML client. It had a round robin queue of hidden frames with forms in them that got populated and force submitted to send user events back to the server, and the TCP connection server-pushed (remember server push?) JavaScript to animate other players moving around the map and to scroll the map and fill in rows and columns exposed during scroll.

Then I abandoned it for a long time but never forgot about it. Eventually Java came out, and I grabbed Java in a Nutshell as soon as I could and learned Java 1.2. I took my original crayon drawn graphics, , and made the tile array larger. It was 5x3 before. The hard work of writing the MUD-side tools of crawling the graph based map and building a 3D array representation of it was done even if most of the MUD didn't map out. It could be fixed and made to map out and automatically crawled. Default tiles were assigned to rooms by scanning their descriptions and looking for keywords (trees, path, store, building, etc, etc). I even recruited a friend to help me and let him write piles of pointlessly disorganized Java. But he bailed.

One day, a guy hops on IRC and starts asking questions that sound suspiciously like he's trying to write an RPG style game. Turns out he is. I convince him that doing it from scratch is too much work (most MUDs don't get very far in the wheel reinvention process before they die) and tell him what I've got. We agree to work together. He does some brilliant work in Flash but then starts dabbling with audio/video, which is okay I suppose, then decides he wants to focus on that and get rid of the game. There was a language barrier too and we were having a hard time getting ideas to sync up. The legacy bits of the MUD got in the way, too. And Flash gets really slow when you have too many objects on the screen. I didn't have a machine fast enough to play the half-finished version that didn't have monsters or equipment on the screen yet.

We tried Processing but it wound up having cloned a lot of Flash's problems, with redrawing everything and having busy spinning threads in the background. That was fun but this fizzled.

Meanwhile, I'm back to work on the server side and eventually decide that rather than trying to make everything map out flat, I should just render the map from the perspective of the player. A graph is basically hyperdimensional. An arbitrary number of dimensions may be rendered down to two by throwing away (or folding together with sine and cosine) detail. Part of that process is picking a vantage point. A simple breadth first recursive crawl did the trick. But like rendering 4D down to 2D, things tend to move and shift in very disturbing ways as you move around them. Ahh, well. All part of the fun.

So I've got all of this infrastructure in place. I've paid artists and bribed them with Apple laptops and begged and pleaded for more art with no luck. I used to draw a bit but I'm badly out of practice. I'm having a hell of a time finding the right technology. I shouldn't have abandoned JavaScript. In the ten years or so since I did that version, JavaScript has matured. I've spent time ripping tiles out of NES games but almost everything you see on the screen on the NES is at least 4x4 mini-tiles put together and probably 4x8 or more. Trying to figure out how all of the little pieces fit is a huge task.

Is it silly of me to just go Kingdom of Loathing on this shit and start drawing stick figures?

And man, if I knew about Tektronix terminal emulation in the 90's when there were 80 people on this thing solid... and I introduced graphics then... EverQuest wouldn't have had a chance. Everyone would still be playing AfterHours.

The real bummer is that unless you install an X server on your PC or Mac, this is only usable on Unix and Unix-like systems that ship with the real X xterm.

I implemented a little line-of-sight algorithm that's simpler and faster than raycasting that I'm pretty happy about. I need to draw more art and I need to fill in more graphic data for rooms that don't have a keyword match. The dynamic crawler doesn't look for players, monsters and items yet, and I need to make it do that and send the details down the wire. I think it did before I reworked it to do dynamic crawling from the player's point of view. I know it used to send updates when someone in your field of view moves, but just for players, not for monsters. Even if I implement yet another GUI later, this is a good test of the MUD server side infrastructure.

I have an extremely simple paint program that runs in te Tektronix terminal. I guess I could fix that up a bit and invite people to come draw critters for me. Dunno, what do you people think? Talk to me.

Here's a snapshot of what it looks like right now:


Thursday July 02, 2009
04:01 PM

Explaining why not PHP

Some times people come to me wanting to learn to program. Often we have this same discussion -- they want to learn PHP "because it's easy", and I want them to learn anything but. Seriously -- Java, JavaScript, Python, Ruby, C#, Haskell, Forth, Objective-C, Pike, Scheme... there are a million good languages to learn and PHP is not one. Oh, but it's easy!

There are two ways of thinking here. Either the world is a large, interesting place full of things you can learn. The stories have plots and twists and surprises that astonish and humble you. You have to grow to take it all in. Smart people play leading roles in the drama.

Or else everything is exactly as you expect it. There are no surprises. You can't get lost. No one is any smarter than you and even though you're a novice, no one really has any experience with what happens when things get complex because they just never do.

The first is the stuff of Hemmingway.

The second is preschool and old lady tour buses. It's for the proud who are afraid of their own weaknesses and risking not only defeat but fear any struggle. It's a cynical attitude that thinks little of the world and other humans. It's the wife who tells you what she wants for every birthday and anniversary. It's lost opportunity, low expectations, and narrow horizons.

Yes, the world is big and scary. Yes, it's full of surprises. Yes, smart people make you feel dumb, and there's a lot there for you to learn, at some pace. Don't pretend like there isn't. It all makes for a great story... a wonderful adventure. Don't fear it.

Logo, the old programming language for "turtle graphics", where you steer and move a line drawing cursor, is an old Lisp dialect but without all of the parenthesis. BASIC on the other hand is pointlessly limited for anything but the underpowered shared computer it was written for at Dartmouth. Would you continue to write BASIC when Logo is just as easy? Do you want your confined space to be that much smaller than necessary? Likewise, learning Ruby is no harder than learning PHP but far, far more rewarding. I'm not dissing Perl here; Perl does have a longer learning curve than most languages.

PHP does not make programming simpler. It just pretends that programming is simpler than it is, just as a tour bus doesn't make Italy more easy to experience, it just lets you pretend that you're experiencing Italy.


Tuesday June 30, 2009
01:44 PM

Playing with Tektronix emulation for vector graphics!

This is one of those, hmm, seems possible, wonder why no one has done it things.

The stock xterm that comes with X has emulation built in for the old Tektronix 4014 graphics terminal in addition to DEC220 emulation.

The Tektronix 4014 is a Vectrex like thing where lines are drawn directly onto the screen rather than being broken up into pixels and the entire surface of the display scanned. It also used a "storage tube" strategy where the beam detects what's already lit and re-energizes it, apparently mixing scanning with direct vector drawing. But that's beside the point of this. I've actually seen some of these beasts at UVA's Unix lab. The interesting bit is they draw vector graphics, xterm emulates them, and this works over bloody telnet. is the best resource I could find -- the original manual. Other example programs sucked. But even that manual was tricky.

print unpack "u", q{M&UL_,SAH&PP=?U]O7QUW7W=;'7];;UL=>U=_4QU_4V]3'7M7<U,=?TMO1QU_22V]/'7-'<T\=?T-O 0QUO0V]`};

... my new JAPH. Requires a real xterm (probably) without GNU screen in the way. That was the 3rd thing I wrote.

$|=1;print chr(27),"[?38h",chr(29);while(1){print chr(32+rand 32),chr(96+rand 32),chr(32+rand 32),chr(64+rand 32);}

... demo program, shortened for Twitter. That was the 2nd thing I wrote.

use strict;
use warnings;
use IO::Handle;
print chr(27), "[?38h"; sleep 1;  # TEK mode from vt-whatever mode; this is an xterm/DEC escape sequence, not a TEK one
print chr(27), chr(12); sleep 1;  # clear screen
print chr(13+16);  # 13 plus some offset relating to shift+ctrl to get into graphics mode
while(1) {
    print chr(32 + int rand 32), chr(96 + int rand 32), # the 5 high bits of Y+32, 5 low bits of Y + 96
          chr(32 + int rand 32), chr(64 + int rand 32); # the 5 high bits of X+32, 5 low bits of X+64
    sleep 1;

The first program in its final form, which is just a long version of the above.

The manual explained that to get into Tek graphics mode, push shift+control+M with the thing in loopback mode. I have no idea what ASCII code a Tektronix terminal sends when you do that so that was a little useless and originally I misread the table as just being a control-M. Through trial and error, I established it as being ord("^M")+16. Some control codes are escape (chr(27)) plus another character; others are just a control character. Tektronix terminals also have a character mode which itself has many options including up to 133 char display. I haven't played with any of that yet except that it operates as a dumb terminal with an addressable cursor (movable cursor) when its not in graphics mode, and text and graphics can be mixed.

The while loop needs explanation. To draw lines, four characters of certain ranges are sent. The X and Y high bits

Send the Y high byte (ASCII value of 32-63 encoding the top 5 bits), the Y low byte (96-127 encoding the low 5 bits), the X high byte (32-63, again), then the X low byte (64-95). I guess when it sees that X low byte, it actually draws the line. It's possible to skip sending the high bits and only send the low bits in which case the high bits just stay zero. The JAPH program does that.

There's no "okay, this is a line draw!" code or escape sequence between the line data; the line data just goes in place of ASCII and gets interpreted as points. That three different character ranges are used to specify four different points is a bit tricky. The X-high and Y-high ranges are one and the same and the value gets set twice. X-low and Y-low are different ranges though.

When sending coordinates like this, it always draws a line from the last coordinate unless you just switched to graphics mode with a chr(29). Of course you can switch into graphics mode while in graphics mode, so to reposition the beam and start drawing a new, unattached line, send chr(29) and then the four bytes encoding the coordinates. Also, the coordinates are relative the top right of the screen. Try to figure that one out. While the X and Y values can encode up to 1024 positions, the Y resolution is only 768 (hey, completely standard resolution!) so it's possible to draw off of the top of the screen (cuz, you know, the coordinates are backwards and upsidedown).

Output and input do not happen at the same time, but there's an additional mode where the cursor becomes a crosshair and mouse clicks are sent with the mouse location are sent and can be polled. The real 4014 didn't have a mouse but instead had two knobs, not unlike an Etch-o-sketch. The text mode is of course an input mode.

What's next? Hmm, do the sinus scroller I meant to do for YAPC for presentation software? XTank clone that runs over telnet? First person 3D GUI for the MUD with wireframe orcs and elves?


01:56 AM

How flash cards die

I've been running a 32gb AData Compact Flash card as a harddrive in my laptop (the Panasonic Toughbook CF-R1 2 pounder with the 10" screen) for over a year. It was kind of an experiment. Besides the 32gb card, the little CF-IDE adapter had a 4gb AData card that I had been using as swap. With the machine maxed at 256 megs of RAM, it did a heck of a lot of swapping. Firefox bloats up to that much memory in a few minutes of unattended "operation". The adapter accepts two cards. One is the master drive and the other the slave. CF cards are IDE devices. The adapter board only connects the pins. I found the thing on eBay for a couple bucks and it shipped directly from China. I've been buying a lot of electronics like that.

AData advertised wear leveraging. I've had good and bad luck with other flash cards. The Lexar thumbdrives have been bulletproof. On the other hand, Sandisk drives won't even fill up to their capacity once before they crap out.

Someone asked what the failure mode looks like. Well, in general, using the things as thumb drives, they won't write any more. Attempting to write gives errors. The data is readable. Half written data and metadata can leave a filesystem corrupt.

The AData CF card seemed to follow a similar mode. The machine seemed to be having trouble. I didn't run xconsole so I could see the messages and when Linux locks up, the dmesg errors are gone. But my Linux-fu is weak. I did an svn pull that went really, really slow, to the point where I stopped it. When I got back, the thing essentially locked up with the drive light stuck on, apparently starved for lack of data from the hard drive. When I tried to reboot it, it stuck part way through. When I tried to fsck the disc, it took a long time and found a lot of errors. It did finish though. But there was too much damage to boot again and it thought that the journal hadn't been recovered. That's when I dd'd the image off the card onto a HD and mounted it lookback and fsck'd that. But it was a little more involved than that.

dd won't write anything if it finds it can't read a sector. That would make all of the block addressing in the filesystem datastructures wrong and really cock things up. So you have to use the conv=sync,noerror argument. That'll make it insert 0'd to pad blocks it can't read and tell it to continue going after it can't read a block.

In my case, at block 55492570, it hit a block it couldn't read. All reads after that failed until the end of the card. As an experiment, I tried skipping ahead a bunch from there and it was able to read. So I did a binary search and settled on block 59475000 as being readable again after the error. I had to amend the dd command to do conv=sync,noerror,notrunc with matching skip and seek arguments of the block numbers so I could start dd'ing from in middle of the thing to in middle of the file I was creating from it.

The loopback mount was easy, of course: losetup /dev/loop0 /what/ever/file, then fsck /dev/loop0. Among the lost blocks were high level directory hash, so a large chunk of the filesystem wound up hung off of lost+found with their filenames and directory structures in tact.

I ran backups before I left using rsync to another machine (32gb isn't much of a chore to back up). I had also been carrying around a spare 32gb CF card that I rsync to also but that didn't happen to be the most recent copy. That got stuck in now and I'm running this experiment a bit longer but I'm also thinking of just throwing a HD back in there. Both of them make me nervous. If there were something more expensive with even less capacity that didn't wear itself out or easily take damage or have batteries that ran down, I'd be all over that.

Briefly though, when it can't find a block to forward to, it gets really slow and then just stops being able to write.

I really wish the thing had SMART that gave stats about how many spare blocks it had to forward bad blocks to, or otherwise stats about the capacity of the wear leveraging system's reserves. DMA would also be nice. I guess some of the "high speed" flash cards do DMA. Actually I'm not clear if this thing does or not. I turned it on on this laptop but it didn't work in another machine, but that was after the failure, so the DMA requests were probably failing because it was dead. I was only running DMA1 or 2. Also it does work at 66mhz.

The CF cards take radically less power than a HD *or* a SSD. The SSDs have large arrays that run in parallel to make them faster but that winds up making them drain a lot of power too. For the most part, Linux's caching insulated me from the slowness. Sometimes tab completion was painfully slow but for the most part, IO just happened in the back ground. I tend to run lightweight programs rather than bloatware that pegs the disc constantly. Battery life jumped from just over 2 hours to just short of 3 compared to the HD that was in there before. The draw of the CF card at idle is essentially nill. WiFi, the CPU, and the backlight are the other significant power draws.


Sunday June 28, 2009
01:37 PM

Convo with YAPC2010 organizer: it's all about Sun, Oracle

*** Candybar ( has joined channel #yapc
<Candybar> Hi... I hear some folks are chatting about YAPC::NA::2010 in Columbus
*** karen ( has joined channel #yapc
<cwest> that did happen
> I think after chatting about it, they said "yes".
> isn't that another steel town though?
> do we really need two steel towns, back to back?
<rjbs> Yes.
<rjbs> Bethlehem 2011
<Yaakov> Candybar: Howdy!
<Yaakov> Candybar: People are excited about Columbus, as is usual after a successful YAPC the next YAPC is anticipated.
> hrm, maybe if I take passage as a crewmember on a steam ship I could afford YAPC::EU...
*** lando ( has joined channel #yapc
<Yaakov> scrottie0: Stow away, its the cheapest.
<duaneb> as a first time attender of YAPC this year I'm looking forward to next years
<Yaakov> duaneb: Excellent.
<Candybar> I have already contacted the Bio Perl people
<Candybar> and they are very excited
<Yaakov> duaneb: Candybar is the crazy person^W^Worganizer.
<Candybar> here is our plan
<Candybar> two main threads
<Candybar> and a "misc" thread
<Candybar> bio perl thread
<Candybar> corporate perl thread
<Yaakov> Don't use threads!  fork()!
<Candybar> and misc things that kinda match
*** stash ( has joined channel #yapc
<Candybar> I have already contacted the OpenSource club at OSU
> I was talking to the SNOBOL guys after this go.  Myself and someone else have both done SNOBOL talks now.  It would be interesting to
+see them come out and even give a short talk themselves.
> 20 minutes is a wonderful thing.
> or, more broadly, I think it would be good for the Perl community to be exposed to more related topics if they can be presented by
+experts.  not every talk has to be a Perl tech talk.
<Candybar> the OpenSource club has already reserved the architecture building
<Candybar> for free
<purl> for free are they mad?
> shoot, go recruit someone to give a robotics talk.
> is there an I2C module for Perl?
<Candybar> my "Corporate Perl" is along the lines of how perl is used in big business
> sorry, I'm stuck on that "misc" track you mentioned.
<Candybar> I am talking to Oracle to see if I can get them involved and as a sponser
> oraperl, w00t!
<Candybar> dude I still got 4.036 clients man
<Candybar> they use oraperl 7.3.2 clients
*** Signoff: karen (Quit: karen)
<Candybar> ok YAPC is a year away and the misc track will probibly become somthing else
<Candybar> it all depends on what talks get submitted
> I missed the last DEFCON but there are always network security tools that get written in Perl... think about looking over that
+schedule and asking a few of those speakers to come out and give their talk again.
*** khaos ( has joined channel #yapc
*** Mode change "+o khaos" on channel #yapc by BinGOs
> YAPC is a wonderful thing but something isn't sitting right with me.  well, there's always something not sitting right with me.  and
+in this case, I think YAPC needs broaded horizons.  it's becoming too much of an echo chamber.
> and becoming too isolated.
> I should not be an example of someone doing something neat with Perl.  other people doing far more interesting things should be.
<khaos> Well at a YAPC around 50% of the attendees won't have been to one before
<Candybar> scrottie0: I would agree
<khaos> I'll have to wait for the survey responses to see what the stats are like for this one - but there were a lot of first time
+people there
<Candybar> but isn't that really what lighting talks are... people showing off cool things that end up being a talk later on
<khaos> Lightening talks are supposed to be that
> well, I wasn't refering to my lightning talk.
> but yes, lightning talks should be that.
> and various other things.  I was referring to the Vegas talk.
<khaos> but in the past few years they are become entertainment
<Candybar> ok here is what we have ...
<Candybar> we have a lot of corporations that need to see that perl is still used in business
> dunno.  I say we get Rocky Horror and pants the newbies.
<Candybar> we have a lot of students that use perl in the OSU biology department
*** Signoff: stash (Quit: Leaving.)
<Candybar> so that is two big hitters
*** stash ( has joined channel #yapc
<Candybar> so that is two big hitters
*** stash ( has joined channel #yapc
> and you have attendees that want to be excited about Perl.  but maintaining huge piles of legacy code ain't that.
> actually I almost put in a talk for maintaining huge piles of legacy code... which seems to be the defining characteristic of Perl in
+a large company.
> "How to Scale Your Big Ball of Mud Even Larger" or something like that.
<Candybar> **Wave** I get to maintain a big old warm pile of stinky "legacy code"
<Candybar> my unofficial title is "Perl Janitor"
> virtually everywhere.  it's not that companies have something against perl itself... they've come to hate the codebases, specifically
+the difficulty in extending them, that are written in Perl
<Candybar> I get to help clean up everyone piles of warm "code"
> they can't separate "rewrite" from "switch to <other language>" in their head.  no one wants a rewrite, but everyone wants to switch
+to Java|Ruby|Python|whatever
<Candybar> Ok so I know that Oracle uses perl.  I know Veritas uses perl.  I know that SUN (now Oracle) uses perl
<Candybar> and I have sales contacts in each one that I am working
> well, don't just worry about catering to your sponsors -- cater to your audiance.
<Yaakov> Candybar: I expect great things in Columbus.
> in fact, the way you're presenting this to me now, I'm nervous about the whole thing.
> I don't mind in principle of YAPC gets commercialized up a bit one go but if the content isn't geared towards me or anyone I know, I
+lack incentive to go.
<Candybar> the Columbus.PM bid was all about "involving" corporations in perl
<Yaakov> scrottie0: Another selling point!
<Candybar> the TPF decided that this was the direction that they wanted to try and go
<khaos> the theme for YAPC::EU this year is "Corporate Perl"
<khaos> and their program looks fine to me - as it is a good mix of things
> again, you've said a lot about what you're doing for your sponsors but not a thing about what you're doing for the attendees.  is this
+a free conference, like InteropNetworld?
<Candybar> I am not planning on "selling" perl out to anyone
<Yaakov> Candybar: I was thinking "Enterprise Perl" is a good way to go.
<Yaakov> scrottie0: Don't make Candybar cry you bastard.
<Yaakov> scrottie0: He's working one side at a time.
<Candybar> Sorry my 18 month old just threw her cheerios at me...  Back for a sec...
<Yaakov> Heh.
<Yaakov> She is also afraid you are selling out!
<purl> okay, Yaakov.
<Candybar> The message that I get all of the time from my Corporation is that perl is dead and java is the word
<Candybar> yet
<Candybar> they continue to purchase vendor applications written in perl
<Yaakov> Perl is the hidden hero.
<Candybar> they continue to use perl but "hide" it
<Candybar> exactly
> what corporations think matters.  what corporations can offer YAPC matters.  but I want to hear it out of your flapping pie hole
+feeder appendages that the people going to this and paying money to do so matter too.
<Yaakov> scrottie0: We are waiting for you to leave before revealing thesexy details of the attendee "special benefits".
<Candybar> here is what I don't want to do
<Candybar> I don't want to have T-Shirts that have Oracle or SUN spread all over them
> I don't care about that.
> the shirts already have sponsors on them.
<Candybar> I don't want to rename YAPC to Oracle World
> Java Mongers.  been there, done that.
<rGeoffrey> yippie, shirts that can be worn without extra advertising
> I hope youporn sponspors YAPC.
<Candybar> why not... lets ask em
<dngor> Has Mexico put in a bid for 2012?
<Yaakov> dngor: Amnesiac is an USAian now!
> Candybar, that's all tangent to what I was asking about -- yet again, do any of your plans revolve around bringing interesting content
+to the attendees?  or is this just Oracle's and Sun's job?
<rGeoffrey> 2012 should be extra special as we will never beyond the winter solstice that year
> your reasons listed for the two tracks you talked about had to do with the sponsor's wishes, not the betterment of the attendees.
> I wouldn't suppose that that's your only motive but you're not helping me dispel that myth either.
<Candybar> ok so I support over 300 perl programmers in my little corporation
<Candybar> I know tht this sounds crazy but I am their perl dude
<Candybar> I am planning this YAPC to cater to the corporation perl programmers in Columbus to get them excited about using perl more
<Candybar> the tracks are not set in stone but you might find the Bio Perl then more interesting
> okay, that's something.  but it still sounds to me a bit like a career fair, not a technical gathering.
<Candybar> actually it will be a career fair in a way
<Yaakov> People need jobs, a lot.
<Candybar> because I am working with the OSU office of student affairs
<Yaakov> It is currently very relevant.
<Candybar> and I want a perl class taught to seniors
<Candybar> with the understanding that right after graduation that they can attend and talk to recruiters
<Yaakov> yay!
<Yaakov> Candybar: Idea: One of the forks can be a "Practical Perl" fork.
<Candybar> that is interesting
<Yaakov> Enterprise Perl, Bio Perl, Practical Perl
<Candybar> because I already have a committment from my friend Mr Conway to come
> okay, so my Vegas talk shouldn't be an example of someone doing something exciting with Perl; doing maitenance with 299 other Perl
+programmers should be.
<Candybar> ok my kids are now screaming at me louder then scrottie0
<Candybar> I will be back sometime...
> give them icescream and a triple lattes and Mickey's for me.
<Candybar> take care and keep track of your thoughts
*** Signoff: Candybar (Quit: Leaving)

Thursday June 25, 2009
03:29 AM

YAPC madness

Somehow on a three day trip, I managed to do two double days. I'm not sure how that's physically possible.

Due to logistics, I didn't eat for 24 hours the first day. I had a light snack for breakfast, hopped on the plane, landed, met Beppu at the airport, hopped the 28X, walked to the hotel, took a cab to the arrival dinner, found we missed dinner (that's okay, we didn't pay, only wanted beer), had beer, stumbled upon a group of people including mst, drank until late... talk about drinking on an empty stomach.

I gave two talks. The second undid the good karma from the first. I'm a malcontent. I always want better. Sorry. But just because I'm a malcontent doesn't mean I'm an ingrate. Despite griping about which of my lightning talks they picked, I'm grateful for the chance to talk and for all the festivities provided for my amusement. Talks everyone! Awesome job! Yeah, the badges need to be double sided and have the nicks on them and coffee first thing in the morning is a really good idea because the little cafe upstairs cannot cope with hundreds of nerds in withdrawl who don't want to be up that time anyway, but I'm still impressed and grateful.

We had hand built rubber band powered airplanes launched into the main stadium. We saw traveling salesman solved in SQL and SQL do the Mandelbrot set. What else... I'm really sad I missed the SNOBOL talk.

Beppu and Awwaiid both talked. Beppu gave a lightning talk trying to introduce people to Coro and Squatting in 5 minutes. Awwaiid gave two talks, one on pop-up debugging back-door for CGI scripts that lets you inspect and change state and do a REPL and view the stack and then another on his HtmlUnit bindings.

The logic of Iron Man didn't convince me, but mst's sheer enthusiasm did. So I need to repost a hopefully less wearily written version of this elsewhere.

Like I grumped about, and like I've blogged about in the past, Perl programmers are obsessed with mucking about in Perl rather than *doing* things with Perl. I'm all for building tools to scale up your development and Perl is a fantastic language for that, but we have to, at some point, do something we these tools we've built -- something beyond just demo them. PHP spends very little time tooling up and goes straight for the kill with good results. I'm not saying it takes an idea tack on it, just that our lopsidedness here is revealing.

Saturday June 13, 2009
02:09 PM

Reply to alester's response to Tim's response to Ruby's resp

My reply to -cha.html ...


"Well, if I have to reply" replies are almost never warranted. Just don't reply and don't take the pock shot without contributing anything.

Yes, Twitter is a terrible format for discussion. That's part of it's strength; for the most part, readers are spared discussion.

"Unprofessional" is what a lot of these guys are going for -- especially younger guys working in newer technologies. It's a rebellion against the establishment. I accept that on principle but in practice, it's as mindless and destructive as the force they're rebelling against. It's the old "an enemy of an enemy is a friend" logic. If office culture is opposed to sexism and you're opposed to office culture then you just might decide that you're pro sexism. The main reason offices are so vocally anti-sexism is they've traditionally been complete boys clubs and they're trying to change their image. If these kids knew their history, they'd see that the office anti-sexism is a bit of a sham and their attempts to be contrary to office culture would lean them to be honestly, legitimately egalitarian. But everyone has to make their own mistakes. This is something that's going to come up every generation, and each generation is going to have to work through.

Our generation and Tim's accepted equality in principle but we didn't grow up seeing it in practice so we all have a certain blindness to it. Also, getting a bit far afield here, males have been having a bit of an identify crisis since the feminist movement. Different groups are experimenting with androgyny, pretending to be thugs/pimps/whatever, styling themselves as frat boys in a massive "bro" movement... I think the males of the younger generation have a legitimate question of how to style themselves. They're not so into golf. Football only has appeal to a limited chunk of the population that tends to exclude nerds. An alpha geek would love to be an alpha male, but they're not even sure what those look like, so they guess. And how well have our gender roles worked for us? We have not only record divorce rates but legions of lonely men on dating sites and women who won't even look at their ads. Our kids don't want to be losers like us.

Maybe there's a place for "boy's club" somewhere, but conferences that charge admission and make pretense to be a meeting of minds aren't it.

It's good that Perl has some respectable, likable... ahem... father figures... to set the basic tone of discourse.

I don't remember what it was, but Tim has made me think "what the hell?" a few times. One of them was an endorsement of _The Ten Immutable Laws of Marketing_, which I found to cherry pick examples from the current time that, as time passed, in all but a few cases, were proven to be examples counter what the book was arguing. This didn't surprise me as the logic in the book was badly broken. Between him and that Guy person, I've pretty well resolved to try to only read news and views from people who are actually doing things. These "thinkers" get way too far out of touch way too quickly otherwise. "Intuition" is plentiful, cheap, and without the rigors of testing from actual experimentation and application, unfiltered garbage.


Tuesday June 02, 2009
06:37 PM

Another way we make Perl look dead

Wanting to take a break from ActionScript and write some Perl, and being stuck in the curious position of having my main cell phone currently be the Sierra Wireless AirCard stuck in the side of my laptop, I hobbled together a SMS autoresponder. It uses my Acme::State to skirt having to explicitly read/write any database/data to disc, Algorithm::MarkovChain to do chatter-bot style replies, and the excellent Web::Scraper to pull down the meat from

The result is that anyone who texts me gets an even more drunken version of drunken texts. I'm in awe of myself and of Perl and the excellent CPAN modules. But I also feel hollow.

Something that really got my gears spinning is a kid in town who wrote some Ruby using the Shoes GUI layer for an "open sprints" bicycle race they have here now and then in a bicycle friendly pub. Yes, in the pub, on rollers, with beer, under a projected scoreboard generated by Ruby. Ruby hooks up to interrupters on the rear tires and computes speed and, more importantly, distance. It draws a progress bar of how much of the course you've completed. First one to the finish line wins. The mph is just for kicks.

The contrast between my little hack and this Ruby guy's hack, and between I think most Perl hacks and most Ruby hacks, is striking. Mine glorifies myself. His is a toy he brings to a party and shared with everyone.

Ruby people are full of themselves because they're hip, cool, edgy, artsy, and media literate. But Perl people are full of themselves too.

Who here remembers the old days, when you could be cocky about knowing Perl? I do, but I didn't know Perl then. The "don't bother me, or I'll replace you with a very small Perl script" well summarizes the particular flavor of Perl conceit. You had guys that very well knew how to use computers surrounded by people who very much didn't. Quite often they were sysadmins or technical people whose job position only implicitly suggested programming. And they tended to wall themselves off so they could enjoy life rather than get sucked their user's stupidity and the chaos that comes with that.

It seems like a lot of those attitudes have prevailed. Users are different now -- rather than being hopelessly non-technical, they're quite often partially technical or they're in the early stages of aspiring to be technical. Many are quite promising but are hung up on the same dumb stuff that every novice is. I think the old us-vs-the-dumb-users sysadmin-ish attitude doesn't do well in places like IRC. #php embraces the novice ignorance. #perl struggles with it. Novices ignore the FAQs, want people to write their code for them, ignore critical questions, blame Perl for their woes, etc. On #php, the response is "lol oh well youll get it". I myself am especially bad in this department. DEMONS OF STUPIDITY, BE GONE!

I idolized the Perl programmers at JaWS and their dark hacking and aspired to be like them. I learned the wrong lesson first -- cockiness. This happened a generation ago. Is it possible that this value is so ingrained that that's the perception of the new generation, and that in 15 years, when they've mastered Perl, it'll be the most perceivable attribute to the next generation of Perl programmers after them?

Of course, I'm speaking in generalizations here. All generalizations are false. Or, put another way, generalizations are only true to the degree that they are. None of this proves anything. It's merely one perspective. Please don't comment on the truthiness of it, only the usefulness of the perspective and ways that the perspective is confused.

Also note I'm not suggesting any specific course of action. My goal, as usual, is merely to understand what is happening in the world around me. I believe that bad behaviors take care of themselves in the light of understanding. I very much am still thinking about what kind of person and what kind of programmer I want to be. I neglect this thinking too much about the immediate task at hand.


Wednesday May 27, 2009
02:48 PM

Reply to elsewhere... ideas vs knowledge

[Another reply I attempted to post somewhere else only to find out after hitting submit that I needed to sign up for an account... fucking bullshit: ]

Haven't we learned from the dot com boom that ideas alone have no value? Scientists formulate hypothesis after hypothesis and test them. An idea is at best an untested hypothesis and at worst a thought that seems novel to the uninitiated but is well understood by even an acolyte. You're muddling your own idea down by talking about "ideas". [Ed: this person suggested an "idea search engine"]. Talk about concepts. Do a Markov Chains style graph between words, linking transitions and transition frequencies between sentence fragments (words, compound words, phrases, whatever). Then you have a chatterbot for people to talk to. Google uses Patricia Trees for something similar but that operates at the character level. Joking aside, that combined with Single Value Decomposition could be used to find other people writing about similar ideas. No reason you couldn't automatically scrape Twitter or other blogs for fodder for this database. Stepping back here, there are no original ideas here: these are known algorithms combined in obvious ways. That doesn't mean that the end result has no value. We programmers need to pay homage to the discipline of engineering -- knowledge skillfully applied -- rather than holding aloft the pseudoscience of men in suits sitting in board rooms having "ideas". But that doesn't mean that as technical folks we can't be exposed to more algorithms and applications for those algorithms.

What's the difference between an idea search engine, knowledge base, or concept base? Offhand, my first guess would be the correctness of the content with an "idea database" having little or no more higher quality content than a "concept database".