First you get the job Fixing Samba. Then you get the book so you can learn how to Fix Samba. Then you figure out what the actual job entails (... which is not Samba).
Names and identifying details have been changed to protect the innocent. I'm probably not making this up.
With Ghostwriter I inject pen input on the device to show the output of LLM (Claude, ChatGPT, Gemini, etc) on-device. But the result is a bit messy. So here I give Claude Code some direction and access to the device to iterate experimentally!
Here is my initial prompt:
I would like to perfect drawing on the reMarkable using the pen, which can then be used to more quickly draw SVG or images to the screen using the injected pen input. Toward this end, I want you to set up an experiment loop. I have the remarkable available via
ssh rmppwhere you can run remote commands, including test commands that we scp over. We could also set up a remote-control that can act as a tool, so like a cli debug version of ghostwriter that runs one command and exits or accepts commands over http or something like that. In any case, you can run code on the thing and treat it like a remote-computer-use situation -- take screenshots, inject input, take a screenshot to verify the result. You can send pen and touch input. You can get a new page by swiping from right to left and then tapping the new-page icon that comes up on the right side, for example. You can tap on the tools menu, the tiny circle in the upper-left, and use that to see tools. You can tap with two-fingers at once to undo.So what I want is for you to bootstrap up some experiments to verify your capabilities, ultimately leading to an improvement in the drawing tools for ghostwriter -- especially the ability to accurately render SVG and png content using the injected pen input.
For example, you could iteratively (by a series of screenshots and pen/touch injection) verify that you can accurately:
- Draw a horizontal line
- Draw a vertical line
- Draw a diagonal line
- Draw a dot at any x/y coordinate
- Draw a triangle
- Draw a single dot
- Draw a png as a bunch of dots
- Trace an SVG
Between each you could send a bunch of undo-touches or try to go to a new page so that you can see what is happening. You can also experiment with being able to quickly change between tools. There are two pens, so one idea is that pen-1 is for the human and pen-2 is for ghostwriter.
From these series of built up experiments we should be able to document how to interact accurately and reliably with the screen to render content via pen input.
Some thoughts on modern generative code discomfort and the Four Color Problem
There is this little puzzle called the map coloring problem. If you have a map - let's say of countries - and you have some different colored crayons, you need to fill in each country so that no two countries touching each other share the same color.
I've just finished reading House of Leaves in a book club.
One of my favorite bits from the House of Leaves is that all through the whole thing there's all these footnotes and they're basically all just made up references to random academic journals or speeches or things that don't exist. And then out of nowhere in one of the citations, they are talking about the Frenchman Pierre Menard and mentioning it as fact, someone who is attempting (succeeding) to recreate Don Quixote.
This is actually a Jorge Louis Borges quote and a piece of one of his writings, which is completely unattributed inside of the House of Leaves footnote. It's like they are citing the fictional book, not the actual Borges book, but they didn't even cite the fictional book. Maybe both stories are set in the same universe.
Practice on my norns-powered digital four track: Hotel Yorba cover (including mistakes, heh)
(download)
A project which puts LLM-powered gremlins right into your runtime!

As previously mentioned, I enjoy trying out new tech like claude-code, making esoteric and ill-advised libraries that are maybe-jokes, pushing on meta-models and run-time eval, and like many others I don't mind 5 minutes of fame. So by that measure, TOTAL SUCCESS!

Using the new ChatGPT GPT-4o Image Generation to incrementally generate a photo of Hoda! (A "Chipin" is a 50-50 Chuhuahua and Mini-Pincer. Hoda is 70-20, so is a ChuhuaPin!)
Previously if you asked ChatGPT to generate you an image it would switch over to DALL-E, a separate image generation model. Each time it generated a new image it would more or less start from the beginning, maybe, and it was a challenge to get small incremental changes to an image.

Agency (a more useful concept of Free Will), has two important ingredients -- the ability to predict outcomes and the ability to influence outcomes -- both of which come in a spectrum of possible degrees. We can lay these out into a visualization that breaks down naturally into a four-square grid.
Since I'm going some consulting work I have to do a bit of time tracking. And you know what that means! Playing with my taskwarrior and timewarrior config!!!

openai: Generate an image of a stopwatch in the style of an impressionist oil painting with thick bold brush strokes
My friend Brad asked about what I've been reading lately in the AI/LLM space to keep up. Here's my link roundup! Things that have been on my rotation lately.

cat some_file.txt | llm -s 'Turn this into a CSV of street, city, state, zip' > data.csv
Figured out how to make opening a CSV in firefox pop open a terminal running VisiData (vd)
I like VisiData! If you are working with tabular data, like a CSV file, it is a lovely slicer and dicer. It's a pretty terminal-keyboard-heavy program, like a vim family thing. Like many of these power tools, I find that you can get into it best by finding ONE use-case and then gradually introducing new tricks from there. So the simple use-case for VisiData is simply viewing CSV files.

What distracted me today? Flameshot and Rofi.
--
It's a weekend, and on the weekends I am retired. And it has long been my declaration that someday when I retire I will spend all day every day messing with dumb config files. SO!

A small data transform / cleanup task using LLM labor.
My mom is now running a small business, $129 Arizona Discount Traffic Survival School, and I'm tinkering away at a website for her. The other day she gives me a google doc with venue addresses, asking if I can put it up on the site.

Drawing Xes in Boxes is harder than you might think! Teaching Ghostwriter a bit about space by pre-segmenting the input image gets us closer.
You may recall from TLT - 2024.11.23 - A Ghostly Game that Ghostwriter is ... not good with spatial awareness. For example, we can ask it to draw an X in a box and see how close it gets...

Working on Ghostwriter, making some incremental progress on playing tic-tac-toe.
I've been trying to play tic-tac-toe with Ghostwriter, but it is quite bad. Reading the LLM transcript, it sees that we are playing, has a good idea of what it wants to do, but can't aim its output very well at all.
In-Hub, LLM + Sonic Pi, dash of docker-compose
In-Hub, LLM Club, Mediapipe, Coffee Project, docker-compose
Assistants conceptWebsite updates to break insulation, bit of Human Essentials
#!/usr/bin/env ts-node and contains Typescriptblog command really lives, but vim $(which blog) works great :).data format directly into JSON so you could do the extract even after the upgrade .... but my data is migrated now and works fine so I lost momentumA week spent coughing, writing Java, and watching Andor. First World Problems hah. Not bad in the scheme of things! :)
Virtual errands, GPU token generation. Oh right, Alloy

Pairing, unicode tokens, graphviz bling

Applied LLM Demos; basic token output visualization with graphviz

Lunch table with Humans!
week indicator on this checkin is already upsettingLlamas, Pythons, Coffee, and Sway

Some notes and thoughts on Peter Kriens' video, as posted on the Alloy Discourse
Video: Peter Kriens - Thoughts on Alloy, Formal Models, and Software Engineering (youtube)
Fuzzy brained, but starting to figure this thing out.
In The Hub
chmod 666 /sys/bus/usb/devices/3-1/authorized which happens to be where I have it plugged inecho 0 > /sys/bus/usb/devices/3-1/authorizedPairing, Merging
layout.css.devPixelsPerPx to something bigger. I go in there... and it is set to 0.75!!! I changed it to the default and everything is already much better hahaFirst day of RC!
Packing up for my 6-week batch at the Recurse Center.
Blooming trees and forking path in Kalorama Park
Sharing some thoughts on my Recurse Center project, exploring how to bring Alloy or similar tools into the Day Job.
Robot opening a jar
I'm attending a 6-week retreat at Recurse Center! This will go from March 25 - May 3. So ... gotta get set up!
A robot making lists
Reflections on Github Copilot and AI coding assistants.
A robot intern delivering coffee. Image by DALL·E.
I found a weird self-published book in a street-side Little Library. Here is my review.
A robot version of the scarecrow from the wizard of oz, oil painting style. Image by Bing Image Creator.
Using OpenAI API GPT-3.5 to generate and judge stories.
Robot reading a script, oil painting style. Image by Bing Image creator.
Creating a simple snake game with the help of ChatGPT.
Pixelated snake, possibly in the desert, somewhat two-dimensional. Image by Bing Image Creator.

Notes from the Changelog interview with Cory Doctorow on Chokepoint Capitalism
Lemonade stand operated (or perhaps supervised?) by a robot. Image by Bing Image Creator.
While driving to and waiting for Millie (the car) to get maintenanced, I listened to Examining capitalism's chokepoints, an interview with Cory Doctorow discussing his book Chokepoint Capitalism. This touched on all sorts of things, but right up at the front was an off-topic question - How is Cory so prolific?
I'm trying to solidify my understanding of the schema organization for Human Essentials. The goal is to build up some documentation to make contribution even easier for new folks. Also I like to play with PlantUML and GraphViz.
First I ran rails erd filetype=dot attributes=false and got a beast of a diagram. This includes all of the models and some indirect relationships.
Initial attempt at My Little Dog, part of the 2023 RPM Challenge
I did a voice recording of this in April 2022, noodling around on the mandolin and singing to Hoda while she (quite obviously from the lyrics) lay basking in the sun. Here is the voice recording:
(download)
I'm going to try to do the RPM Challenge again this year. Millionth try is a charm?
The challenge: 10 tracks or 35 minutes of original music recorded during the month of February.
I had ChatGPT write me a poem .... but first some somewhat irrelevant background information!
I've purchased and chained a few Neopixel-like LED fairy-light strands (these ones on Amazon) as a fun winter/Christmasy project. I have them hooked up to an Arduino-like, right now this M4 Feather Express, but I'm planning on switching to an ESP32-S2 TFT Feather. Each LED is individually controllable using Arduino/C++. The idea is to make some holiday light displays with different colors and twinkling and all that. While learning how to use it I made a few toy animations, such as this simple snake:
In today's sugary exploration, let's take a look at a shorthand for object key expansion in Javascript (ECMAScript 2015+, es6+). For an overview of the TON of delicious sugar that was added to Javascript at around es6, check out es6-features.org.
Most of the "scripting" languages (Python, Ruby) have "dictionaries" or "hashes", a datastructure of key-value pairs. In JS these are called "objects", and they do a lot of other things beyond this basic data-storage behavior. In JSON -- JavaScript Object Notation -- you can see the basic literal declaration syntax. Let's build an addressbook, keyed (indexed) by name.
let addressBook = {
"alice": {
"street": "123 Elsewhere Lane",
"zip": "32341"
},
"bob": {
"street": "221 Baker Street",
"zip": "00234"
},
"clarence": {
"street": "P.O. Box 17",
"zip": "88877"
}
};
console.log("Bob's info", addressBook["bob"]);
We're using Firebase as the hosting service for https://covidcanidoit.com and the experience has been kinda weird, coming from a more traditional server-database world.
First, I didn't even realize that Firebase was more than a cloud-JSON-blob! Our initial use of it was only for static asset hosting. This is a VueJS application that so far mostly lives in the browser, so static hosting is perfect. I generally use Github Pages for this purpose, but another team member had already set up Firebase for us.
Once I learned that it was even a thing, all was good. I wrapped the CLI that Firebase provides into yarn land, and now you can do yarn deploy and it'll build up the local assets and push them up. Works quite well! The auth is stored somewhere else on my computer. If a new dev wants to deploy, you add their google account to the Firebase project and presto!
I got a Pocket Operator PO-33 a while back, and find it super fun -- it is minimalist and usable. It inspires me to play around with beats and tunes ... and it also inspires me to work on my own samplers, sequencers, and synths.
Let's see what we can do with Web Audio these days! Starting with a basic VueJS app, I googled lots of stuff. Somewhat randomly, I wanted a Wicki-Hayden hexagon style keyboard, so had to find some CSS that makes hex-buttons. I'll probably switch to this Hexi-Flexi-Grid at some point, to make dynamically sized hexagons easier, but these work.
Combine that with a simple synth, and now we have a playable thing. I had to make some tweaks to get it to work tolerably on my phone -- fix the layout size, use touch events. Unfortunately it isn't very usable at this point due to a sizeable delay between pushing a button and the sound. I'm going to write a pure-JS snippet to eliminate any overhead from VueJS, and if that is also slow then I'm not sure what I'll do. It's kinda cool that I can use Web Audio ... and I'd sure like to keep using it. We'll see!
I'm working on making the jump from READING about recent machine learning techniques to APPLYING recent machine learning techniques. I have some nice datasets at work, so I am doing a bit of double-dipping by playing with those.
I previously struggled with getting started, getting bogged down in picking technologies and such. I'm specifically going after some Neural Network models, so also get overwhelmed with the Python ecosystem of tools and libraries. The best way to get started is to get started .. so I turned the corner with a little help.
Fluent Python (book): Great advanced-introduction to Python, letting me better understand/recognize meta-programming and DSLs. Things like the array-slice syntax turning into an object which can be passed to any class that implements the right methods.
Generative artwork, floating and fading.

let gray = amt => color(amt, amt, amt);
function setup() {
randomSeed(7);
createCanvas(600, 600);
for (let i = 0; i < 200; i++) {
x1 = randomGaussian(300, 120);
y1 = randomGaussian(300, 50);
y2 = randomGaussian(300, 50);
fill(gray(x1 / 600 * 255));
line(x1, y1, x1, y2);
ellipse(x1, y1, 20, 20);
ellipse(x1, y2, 20, 20);
}
}
I think it's important to learn through destruction. I like to probe the edges of things, and one of the best ways of knowing where IS the edge is to go over it. So ... let's go over the edge.
First we need a nice fresh ubuntu:
awwaiid@zokei:~$ docker run -it ubuntu bash
root@1cf14a7465fd:/#
I've been doing a spot of accounting at work over the last few months. This is clearly a failure of delegation and management on my part, but it has led to at least one deep observation that I mightn't have had otherwise.
Perhaps that is a slight exaggeration. They don't ACTUALLY travel through time. But if you hang out with them a bit and observe their twisted time and verb conjugation ... well it's obvious that they would be right at home hopping around a branching multiverse.
I Dockerized this website yesterday! I had already built a cpanfile that declares the Perl5 dependencies of OddMuse, which made it easy. I'm also going to run this with the data directory directly bind-mounted.
First the Dockerfile:
FROM perl:latest
# Set up the deploy user
ARG uid=1000
ARG gid=1000
RUN echo groupadd -g $gid deploy
RUN groupadd -g $gid deploy
RUN useradd --create-home -u $uid -g $gid -ms /bin/bash deploy
WORKDIR /app
COPY cpanfile .
RUN cpanm -qn --installdeps .
USER deploy
I gave a lightning talk at The Perl Conference about my collection of Perl6 Colons. Looks like Geoff gave me 34 extra seconds... not sure that I approve :)
Enjoy!
[
There are many tools in my programming toolbox, but one that I've felt is missing is constraint and logic programming. I've done a spot of Prolog and played with some inference systems of various types ... but even when I run into something where I think it's the right hammer... I don't have a go-to tool.
I got The Reasoned Schemer a while back, hoping to use it to learn clojure's core.logic or similar, but the writing still KILLS me. Hate it so much. It is like the worst extreme sort of Socratic Method that I can imagine, literally everything has two columns of question and answer. But the QUESTIONS are obtuse! Working through it that way is not the sort of enlightenment that I'm going for ... I don't want to apply a unification algorithm on my understanding of logic programming with the contents of the book! The programming system might be "backwards" that way, but my way of learning isn't.
Anyway. One dumb thing that I had a hard time getting over was things ending in -o, like conso and emptyo. But tonight I had a breakthrough! See those 'o' things, according to the internets, are supposed to be sort of like question-marks except describing a goal. So now if I read the 'o' as '-objective' (as in, "goal") then they sound much better. cons-objective, empty-objective. Declaring the goal of the statement.
I've been having lots of fun with https://github.com/vimwiki/vimwiki lately! I've mixed in a bit of encryptfs to have a private directory of notes. Sometime during boot, I set it up with:
sudo mount -t ecryptfs \
-o key=passphrase,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=no,ecryptfs_enable_filename_crypto=yes,ecryptfs_fnek_sig=1a9380706fdf5bce \
~/docs/private/vimwiki ~/notes
I haven't done much customization yet. But one thing I'm playing with now is making it easy to post notes from VimWiki directly onto my website.
Last night at the DC Perl Mongers meetup we collaboratively built a proof-of-concept for storing key/value pairs as messages in a slack channel, https://github.com/plicease/globalhash. This was made straightforward by great Slack API docs and cpan:WebService::Slack::WebApi. Example usage:
# writes "hello=world" into the #globalhash channel
$ globalhash set hello world
# reads the #globalhash channel for the most
# recent value of hello and prints it
$ globalhash get hello
world
There are of course a TON of things you could do from here. Some ideas:
A fun thing to do is to explore things using introspection/reflection. In Ruby and Perl6, for example, we can get a list of methods for a given object instance pretty easily:
# Ruby
"hello good people!".methods.each { |method| puts method.to_s }
# Perl6
for "hello good people!".^methods -> $method { say $method }
On the REPL (irb/pry or perl6) this is even shorter since it prints out lists of things by default, so you can do:
One of the codebases I work on regularly has a large and slow test suite. So slow that it typically only runs in totality in a continuous-integration (ci) environment, and there it uses the parallel_tests gem to slice it into pieces and run in parallel. This gets it to run in like 30 minutes instead of 2.5 hours.
But I want to run the whole thing linearly sometimes, especially so I can make sure tests aren't conflicting with each other. So I created a new ci job that runs it linearly ... and got a fail that I didn't get otherwise. Took forever to figure it out!
This was about a worker that I call a "sweeper" -- it's job is to run once a day and make sure nothing was missed by other realtime jobs during the day. Here is a simplified version.
<include "ICFP Contest 2016">
Idea for a programming language: make experienced programmers twitch by forcing minor and common errors to be part of the language.
/* This is a comment /*
print "Hello, world!' /* Strings must have balanced quotes /*
if 5 + 2 = 4:
print 'Everything is awesome!"
for(var i; i < 1; ++) print i;
class Foo {
private method greeting [
print "Muahahaha'
]
}
foo.new.Greeting(
I enjoyed presenting at DCRUG tonight on React.rb, which I've been playing with for the last few weeks. Good turnout too!
Resources:
Welcome to the DC-Baltimore Perl Workshop!
This workshop started innocently enough. The year was 2010 -- October. We were at the Pittsburgh Perl Workshop when Brad Lhotsky said he wanted to host a similar workshop in the DC/Baltimore region. I told him no. But then he talked me and some others into it. During 2011 we worked out some details and at the 2011 Pittsburgh Perl Workshop we announced that the first DCBPW would be held April 14, 2012! We even made fliers!
Here we are six wonderful years later. We've had a few of the organizers step back over the years, mostly due to moving away, but we picked up a few others and have a core of dedicated volunteers that put this workshop together every year. We get support from The Perl Foundation and also get support from local businesses and communities. It has gone pretty well! And yet... sometimes I've felt unhappy.
Today I attended http://retroruby.org, a great un-conference in Arlington. I got my toehold in the local Ruby community at the Arlington meetup, and was happy to visit with lots of familiar people. I didn't meet any new people, though that was mostly because it was easy to spend time catching up.
Next time I want to jump in a bit stronger on the new-dev track, maybe walk through some hands-on exercises or do a group activity (Randori).
My favorite, besides talking to people, was the lightning talks. These have a bit more technical depth and include some code getting projected, which I love. I gave a quick this-thing-exists talk on http://reactrb.org.
Tags: Perl6, Perl5, Ruby, Polyglot
In response to the "Perl 5 and Perl 6 are mortal enemies" article.
We are definitely framing this whole thing wrong. We have two choices:
Tags: Perl6
In my recent talks about perl6, one thing that I keep neglecting is Grammars. Part of that is because I hadn't used them yet!
I was putting together a talk on some clojure code, and was getting mad at my slide software not syntax-highlighting with magical rainbow parenthesis. Clojure being a LISP-like, it lacks some visual clues for structure and is WAY easier to glance at (in my opinion) when parenthesis are highlighted. I have vim doing this for me... but no dice in my slides.
Tags: Clojure, REPL
When I first learned Linux, my friend taught me a few commands. How to to list files, how to change directories and see your current directory, how to run things, how to ask a program what parameters it takes, and how to look at a file (ls, cd, pwd, ./foo or /usr/bin/foo or foo, foo --help, cat foo or more foo). After that I just... ran a lot of stuff. I eventually discovered 'man' -- but going through /bin and running ALL the commands was really educational.
Let's get some basic tools to do that with the Clojure REPL! The major things we want to do are find things (mostly functions), and then learn all about them individually.
Tags: Polyglot, Ruby, Perl6, Python
Here are the slides for Polyglot Bridges (pdf) lightning talk that I gave today at RubyNation.
slideshare:www.slideshare.net/awwaiid/mad-science-a-dash-of-polyglot
Tags: Clojure, Overtone, Music
Today I'm playing with Open Sound Control (OSC), which is more general-purpose than midi but kinda similar idea. I have an android app on my phone named Control which has a few existing UIs, in my case I'm playing with the multi-touch. I set it to have two touch inputs.
In my Overtone REPL, I first set it up to listen for OSC events, and dump out whatever events it sees:
Tags: Clojure, Overtone, Music
Good progress today -- I made a hack to get around that BUNCHES of midi issue. Needed that because when I would hit a single note on my jack-keyboard (virtual midi keyboard), I got a whole bunch of events. I'm guessing I was getting 64 of them.
I also got Overtone Vim Integration working. Well technically I already had it working (had fireplace.vim installed, etc), I just didn't know it. Now I can start up the REPL in one terminal and start up vim in another. In vim do ":Require" and it finds the running REPL and hooks into it. I also added "nnoremap
Tags: Clojure, Overtone, Music
Today I'm watching Overtone and ClojureScript which is a coding session of someone setting up an web UI to play Overtone stuff. Building a UI like this reminds me of the one-string guitar that I got at an art festival the other day. Clearly home-made, including an energy drink as the echo chamber. And very awesome. Also fun to see someone iterate through their development. Lots of interesting things in there, most of them I can read more or less but doesn't mean I could write them. One thing I noticed was ( ...) to pull in instrument libs. I'll try that.
The Cheat Sheet is interesting, but I don't know enough to actually use a lot of the things on there. Current mission is to get the instruments working.
Tags: Clojure, Overtone, Music
So I've gone through Overtone Getting Started a few times, and am up and running. Only trick at all is that I already have my own jackd wrapper script to get jack started. Just like the other times that I went through this tutorial, I get to this point and say "now what?"
There are two different directions to explore. I have the REPL working, but it would be nice to be able to execute from a file and also do some interactive editing via Vim (or Emacs I suppose). The other path is to ... you know ... make some music (er... noise).
I just wrote up a call-for-people post about the DC-Baltimore Perl Workshop over at blogs.perl.org. I say it all there -- but in a nutshell, come and join us! :)
Tags: Vacation, Flood, Rental Car, Rain
For Labor Day weekend (last week), Beth and I took off from work on Friday, rented a car, and headed out to Berkeley Springs, WV - aka "Bath". Nice drive up there, only a few hours away from DC. We've been around there before, and this time we decided to stay in-town so we could park our car and walk around more than we have in the past. We stayed on the top floor of a Bed & Breakfast downtown.
Saturday was a rainy day. We wandered about, looked at some junk shops, had lunch, took a long nap. I kept waking up to booming rolling thunder, but felt safe and cozy. Once we were up and about there was this weird siren that kept going off (sounded like an air raid) -- the inn keeper told me that it was their fire department and all-purpose alarm, and that it's not a big deal.
I've traditionally thought of code comments as having two audiences. One audience is me, or whomever will be taking over the code after me. This consists of notes or hints as to what I was thinking when I wrote something. Typically these are regular code comments, possibly right on the end of a line. The second audience is the users of my code. Usually this is other programmers, in the case of a library (as opposed to the consumer of a resulting UI, which I guess is a sort of third non-engineer audience who doesn't read code comments). This second group is the one for which you typically use POD (or similar in other languages - javadoc).
Increasingly, however, I have decided to act as though there is only one audience. When you separate code out the way I describe above, you immediately run into a question -- what do you do for a private method? You don't expect the users of your library to call it, and yet you might have some high-level usage guide that goes beyond what you might put in an inline comment. Same thing for private instance variables, or other internal helper functions.
I've also noticed that I have two different sets of code that I write, and for each there is ultimately one audience. The first is at work. Here I am writing code that my peers will use. But my peers will also maintain the code itself. Similarly, I also write code for open-source projects. For the most part my code here will be consumed - but if and when I do actually get contributions to the library, the contributors are the consumers first and contributors second. They are pretty much exactly like the people at my work.
I'm watching the first video for the CSU CS440 Intro to AI class, taught by Chuck Anderson. Man... so far this looks great. In addition to delicious shout outs to Turing and Hume and so on, tossed out a reference to the XKCD take on some AI concepts. Did I mention that we are using a wiki rather than WebCT as our primary interaction point? hmm!
I haven't seen the video for the CSU CS414 Object-Oriented Programming course.
Eliza: I am the psychotherapist. Please, describe your problems. Each time
you are finished talking, type RET twice.
Me: My friend Mike doesn't know who you are.
Eliza: Why do you say that?
Tags: Perl, PPW, Conference
This weekend I attended PPW2011 - I think this is my 3rd PPW, and my fourth perl conference in Pittsburgh (YAPC::NA 2009 was there).
The theme this year was "DevOps", and I think maybe that was not quite to my taste (though does seem practical). I like talks that push my understanding and stretch my mind, whereas the talks tended toward solid best practices for corporate environments. I gave a talk on debugging, and I even feel that my own talk went that way a bit :)
Tags: Perl, DCPM, Programming
Last Tuesday was our monthly DC Perl Mongers meeting.
We dove right in, talking about how perl caches various values for a variable to be used in different contexts. So, for example, let's say you start off with a number, but then use it in string context, perl will cache both the string and the number. This can be shown using cpan:Devel::Peek like this:
Tags: Perl6, Rakudo, Programming
A while back I wrote about TLT - 2006.03.03 - Funky Function Filters. Let me refresh your memory - we have a Python and a Ruby snippet and we translate it into Perl5. The code is a toy to show some fancy shmancy lambda (unnamed functions) usage. The idea is to take a list of functions, filter them, and then with the remaining ones show what happens with parameters from -10 to 10.
Python example:
Tags: Perl6, Rakudo, Programming
The "Whatever-Star" was at first alarming to me! I first noticed it when I learned how to shuffle an entire list. The Whatever-Star can do some other stuff, too. But that's ok, we'll start with this.
my @shuffled = < alice bob carol dave erik frank >.pick(*);
Tags: Coffee, Music
On my way to Safeway, I stopped in at Filter Coffee to see how they are doing. The nearby Safeway (The Secret Safeway) is closed, but this is still roughly on the way to The Soviet Safeway anyhow. A seat was open so down I plopped.
First they played the entire Rage Against The Machine, Battle of Los Angeles album, and now we're on to the Ramones with Blitzkrieg Bop. Sounds like they're going to play this whole album too.
This song popped into my head today, and the muse took it all the way to a recording!
(download)
We're starting our usual monthly DC Perl Mongers meeting a bit early this Tuesday (September 7th) to have a little pizza and celebrate Rakudo-Star! Arrive at 6:30pm at the Starbucks at 18th and K Street NW (call me, Brock, if you miss us and need to be let in, number on the website) if you want food. But feel free to wander in any time thereafter, we usually stay as late as 10:00pm. We'll swoop down and look for people at the normal 7:30pm time too :)
Other activities:
Ever since I got my terminals and mutt all working well with international characters, I've been fascinated by the Chinese spam I get. First of all it looks neat to see in a terminal. But sometimes I throw it into google translate just to see what it is I'm getting spammed about, and every now and then it's mildly interesting. Take this for example:
任可一种管理绩效的产生,首先都是原于一种先进的管理理念。而任何一种先进的管理理念都必须有一种适合它的管理模式作为载体。人们似乎都很乐意去接受先进的理念,并且善于以最惊人的速度去传播。可是人们在践行的过程中得到的结果却是参差不齐。就象丰田的精益理念早就传遍了整个世界一样,而世界却始终未能复制出第二个“丰田”。这究竟是为什么呢?主要原因在于人们虽然已经接受了新的理念,却没有能够找到其精髓的所在。因此也就无法去设计一种适合自身需要的管理模式来作为载体
Which translates (probably very poorly since it is machine translation, but good enough for bloggin') to:
Tags: Perl, Programming, Conference
(er... Actually I meant to post this sometime back in like February 2010. Oh well!)
I attended the Orlando Perl Workshop 2010 and had a lovely time. The talks I attended were:
I love this song so much, and it is as fun to play as I imagined.
(download)
I saw some article about cpan:HTML::FormHandler, and decided I'd give it a try. I'm probably not really using it as intended... and I'm also not pushing this confluence of tech nearly as far as it can go.
#!/usr/bin/perl
use strict;
use MooseX::Declare;
use KiokuDB;
use Continuity;
First we just pull in some libraries. We'll use cpan:MooseX::Declare for fun :) . Now let's make a lovely base class for our forms, to set up some good defaults an an updater.
Tags: Mercurial, hg, Debugging, Testing
So at work we're switching over to Mercurial (hg), and I'm trying out some of the more advanced features. One which I've been looking forward to for a while is 'bisect' (which git and others have also).
The idea is straightforward. I have a unit test that fails. I know that it worked like a month ago or something. Someone committed something between then and now that made it fail. But what was it? Bisect will systematically help find it -- start in the middle, and if it was good there go back half of the remaining time. If bad, go forward. In just a few chops like this it will narrow down to the exact commit that caused an issue.
Tags: Perl
You might have stumbled upon some IBM developerWorks articles titled "Cultured Perl" while googling for random things. I think it's awesome and that it isn't linked to enough. Just a few weeks ago the latest article came out, Cultured Perl: Storage management on Amazon S3, which is well written and up-to-date with the latest technologies.
Thank you, Cultured Perl!
So I was right, I completely messed up the previous example and it wasn't electrified by Creox at all. But I've rectified this situation, and for your listening pleasure (pain?), here is a smaller snippet of just the guitar part of the song, before-and-after.
Original acoustic guitar (download)
Electrified by Creox (download)
I was playing with Creox the other day, which can make an acoustic guitar sound electric (amongst other things). I recorded a quick song... but it doesn't sound nearly as electric when I listen to it now as it did when I first recorded it (and now I wonder if I even had my Jack settings right for recording what I was hearing...). But it did end up with a fun crackly sound on the voice I think. Listen for yourself:
"Oh my baby" (download)
And it gave me an excuse to add an mp3 player plugin :)
Tags: C++, Programming, UIUC, Data Mining, Homework
In the class I'm taking (Intro to Data Mining) we get to implement a classifier. Alas... we must use either C++ or Java. I haven't programmed in either for quite a few years, and even with further pursuit I'm not allowed to use OCaml.
That's OK! Best to stretch my mind out a bit. I'm afraid I'm getting rusty at being multi-lingual in my old age anyway, so this is good exercise. First thing first, I have to read in the training data. But best start with the basic Hello World even before that. Google... I figure I'll start with the basics, and now I have:
I was just exploring the latest and greatest Oddmuse modules, and see that someone made it easy to embed youtube/google videos. So now I feel like I have a real blog and I can post the random crap that everyone else does! To prove it, here is a totally awesome song my friends turned me on to:
[YouTube:nstI0bjTqwQ](/
Tags: Perl, Debugging, Idea
I've got to get this idea written down so that I can go back to doing other things... it is too distracting as-is.
In a nutshell -- more or less cpan:Devel::Trace except that at each step you record all of the lexical (global?) state. Then you can not only see the full execution history of your program, but the value of every variable at every point.
Tags: perl, linux, music
Oh how I love linux... perl... scriptability. I have a fun little command line music player named Polly. It is pretty minimalist, really just starting whatever player I like with whatever preferences I like on a whole directory tree of files. One thing that is annoying is that I have to switch over to the terminal and it ^Z to pause and then do 'fg' to play.
So I finally decided to write a simple pause toggle script. I approached this in the most brute force way I could... I just take the list of all my media players and send a massive STOP (effectively ^Z) command to all to pause, and then a massive CONT (effectively 'fg') to all to continue. To determine if I want to pause or continue, I just look to see if I have any paused player processes.
Scott linked an article from new scientist, Memories may be stored on your DNA, which relates with what has been on my mind lately.
I was reading about some hardware evolution experiments while at the bookstore the other day. They were using a FPGA to create (evolve) a sine wave generator, if I recall correctly. The end result of the first run worked perfectly, but had some bizarre attributes -- it programmed a section of the gate array but didn't wire that section to the rest. When the unconnected section was turned off, the circuit no longer worked. It also didn't work when the same design was put onto an identical FPGA. As far as the experimenters could tell, the evolved solution depended upon some subtle property of that specific FPGA chip.
In other words: GP solutions cheat like hell.
It's been over 4 hours since Android was released... but still no port to the Neo. Pft.
Tags: OSCON, perl, continuity, lightning talk, oscon2008, REPL
At the last minute I ended up giving a Lightning talk at OSCON 2008 (in the Perl track). I showed my Devel::REPL + Continuity debugging tool.
Here are my notes: