September 30th, 2015

(make with the clicky to see the giffy)


static image from the above:



static image from the above:


Temple OS

There’s an OS I’ve been trying to find back – but it’s either dropped from the web or I have bad search terms/search-fu. Built on a video-game platform, I thought it was PacMan, but it might have been Galaxian or something.


April 16th, 2015

glitch twitter 1



July 7th, 2014


When they make me write code during an interview.

NB: that is NOT Consolas.


May 6th, 2014

Packt celebrates International Day Against DRM, May 6th


According to the definition of DRM on Wikipedia, Digital Rights Management (DRM) is a class of technologies that are used by hardware manufacturers, publishers, copyright holders, and individuals with the intent to control the use of digital content and devices after sale.

However, Packt Publishing firmly believes that you should be able to read and interact with your content when you want, where you want, and how you want – to that end they have been advocates of DRM-free content since their very first eBook was published back in 2004.

To show their continuing support for Day Against DRM, Packt Publishing is offering all its DRM-free content at $10 for 24 hours only on May 6th. Check it out!

NB: I was offered two free ebooks to promote this event with the above. I like the books Packt puts out, I like things being DRM-free.

See more about the International Day Against DRM at Defective By Design, a campaign of the Free Software Foundation.


April 29th, 2014


See Also:

video walkthrough and wikipedia article.


April 25th, 2014

Continuing my obsession with that Picasso picture, I’ve created three small glitch-gifs.



I’m using a small processing app.




Adapted from some code found online.




I don’t see myself suddenly becoming a “glitch artiste” (ahem). But it is a fun aesthetic; even when the results are crap they can still be quite dynamic. Cheap thrills!

My end-goal is to adapt these processes to images of text, and then see where that leads.

To those ends, I started cataloging some glitch/processing-glitch sources.


April 15th, 2014

I’ve automated the process that build the gif in kosmic.loop.art. It’s preliminarily online at github.io with the source-code, unsurprisingly, on github.

Internally the code is a mess, but represents my first time integrating a processing.pde with external javascript, use of the dat.gui library, use of a gif-library, use of drag-n-drop, web-workers. Instead of outputting individual frames that were stitched together in an external application, the code uses a library to put the frames together – with the first, unmodified image as the starter 1/2 second frame.

Here’s the revised gif:


original, for reference:


They’re not in sync, since the speed is faster on the revised version.


April 4th, 2014


Generated by a project I’m working on. Encoding by the jsgif project.

Source image (seen briefly in animation):


No idea why I had this. Something to illustrate some arcane point arcanely in a forum, probably.

I have no idea where I got this. Probably google-images. Also found at Rave Flyers in the 90s. Which looks like FUN.

See also: rave preservation project (which has a BORING click-filled interface), flyers from the rave project archive, and some flickr collections of rave flyers.

UPDATE 2014.04.15: Automated version.


March 27th, 2014

The Quantum Uncertainty Theory of Comment Threads:


You can either fully understand an online discussion, or you can participate in it.


As a principle, the Comment Uncertainty relationship must be something that is in accord with all experience. However, humans do not form an intuitive understanding of this indeterminacy in online life, so it may be helpful to deploy moderators and/or graphite ban-hammers to dampen the ensuing chain-reactions (“flame wars”).

Now, while there is the timelike-discussion interpretation (“most recent first” or “Flat Earth model”), and the nested-reply-discussion interpretation (“Yggdrasil model”), do not confuse this with the Disinterested Observer Effect. Both of these alternative conceptualizations of quantum commenting can be examined with the goal of demonstrating the key role the uncertainty principle plays.

The major criticisms of these models rely on the thought experiments “Pandora’s Box” and “Pandora’s Slit”, but they are generally considered NSFW and somewhat trollish. The other major school of thought relies on the Copenhagen Interpretation which believes that online comments are a hive of scum and villainy and should never be enabled.


Originally posted at bbs.boingboing.net.


March 24th, 2014


(larger size at flickr.)

This was the back-page ad from … some magazine. The (c) is 1997, but it could have been between then and 2000 when I tore it off and put it on my cubicle wall. It’s been there, on every cube or office I’ve been in since. Well, minus the xray-specs which were hanging elsewhere, until BWING: some particle pings off of some neuron. Plus, filters added in Picassa (hah!) and poorly-taken photo from my crappy phone.

There’s something to be said for crappy phones. I loved my old clamshell that a job provided. It was 0.3 megapixels, and had a crappy lens. The photos could be awesome! My current phone is a “feature-phone” which means it has a touch-screen and enough functions to be annoying, but not enough to make it user-friendly. And no flash. Which totally sucks. But it is always in my pocket, so there’s that.

(The only Macintosh I ever owned was a sad-faced classic Mac [that would only boot to the sad-face]).

see also: Apple’s ‘Think Different’ campaign and Picasso-inspired Mac-logos.


Over lunch today, I twiddled with the image some more in Picassa (because: (1) why not (2) I no longer have Photoshop installed and (3) the GIMP is just too awkward and long-loading). And THEN I started working with Processing:


The core of the pixellization routine was originally from Jeffery Thompson but he is in no way to blame for what came later. Color averaging code was based on an answer at StackOverflow. Animation courtesy of mothereffinganimatedgif.com.

Future work might include generating gifs from inside of Processing [update: DONE], and tiling from the CENTER of the image, instead of the upper-left. This would allow for cropping the image to fit a specific canvas size.

Code is on GitHub.


See, even when I do post something other than an animated GIF to this blog, it’s still an animated GIF.

UPDATE 2014.04.16: See also: kosmic.loop.art and pixl8r.art


January 16th, 2014



December 5th, 2013

NB: view the original; it’s huge.

(source via source)

This is probably from the movie Hackers – visual and text themes match up, but I can’t find a canonical source for this gif or desktop-as-a-whole.

2013.12.18: Wait. While this is certainly inspired by the movie Hackers, there’s no way it could be from the movie Hackers — references to google and Firefox Aurora in 1995? MEA CULPA.


August 30th, 2013



node.js is working funky on my work machine.

For whatever reason, jake’s jake.mkdirP which resolves to utilities.mkdirP which ultimately splits a path and calls fs.mkdirSync(currPath, mode || 0755); is not creating directories.


Rather, it’s creating a single file at the drive-root.




I’ve run this before, but only on my home machine.

Both are windows7, only work has UAC turned on.


Same drive as shell prompt or cross-drive, doesn’t make a difference (I remember running into this as an issue for _something_. Vanilla node fs?).

Running shell as Administrator doesn’t make a difference.

Reducing the path to a single directory doesn’t make a difference.






UPDATE @ 10:30pm: confirmed that jake.mkdirP(path) does work on my home machine. aaaargh. Is it a UAC thing?


UPDATE @ 2013.09.03: it does work on my work machine. The trick is that jake/utilities did not want to create directories from the root of my c: drive. Not that I got any coherent errors out of it. But switching to the d: drive got it to work. The mental disconnect came in that I was writing to the c: and d: drives at home, and thought that I had tried both of them at work. So it goes.



July 21st, 2013

A few months ago — late March, apparently, BoingBoing had a post about using IFTTT to automate collecting wonderful things. I stuck it in my open-tabs, and there it resided for some time.

Finally, earlier in July I implemented the ideas in it.

Basically, use the automation site If This Then That to take new photos (animated-gifs, in this case) from a public DropBox folder, and make a new WordPress post out of them.

Not life-saving, and not world-changing. However, like a lot of other people, I am fond of animated gifs, in ways that I don’t fully understand. But in order to explore that fondness, I’d like to post some of the gifs for later perusal. But… I don’t care enough to save the gif, open the WordPress dashboard, create a new post, add media, yadda yadda yadda.

But with this recipe, I can just save a gif to a folder, and IFTTT does all that annoying grunt-work for me.

There are some drawbacks: gifs remain in dropbox, with an image-link to them, not uploaded as media to the blog. So they can’t be displayed with lightbox, f’r instance.

The post has an odd sequence of divs added:

  <img src='https://dl.dropboxusercontent.com/s/iguwidtgvjqoocm/usa.gif'
       style='max-width:600px;' />

At least one of the extra divs seems to be required. I no clear idea why. And don’t really care enough to dig deeply into it. But it’s a bit of a nuisance when staring at one of the posts. Enough to note it, but not enough to fix it now.

So, this is why you may now see more animated gifs on this blog than posts with words in them. Any individual animated picture may be worth less or more than one thousand words of another blog post, but they are a lot easier to post.

Also of interest: a list of IFTTT recipes.


July 7th, 2013

I use Emacs, and one of the key roles I use Emacs for is journaling — keeping a log of what I do, as regards to work (I could do a better job of personal journaling, but I wouldn’t need or use Emacs for that, I’d probably put that in a paper-based journal). For computer work — whether it’s day-job related, freelance-related, or personal-project related, tracking what I did and when can be invaluable when I try to recreate a setup or recall what I was doing last month when project X started working/failing.


For years I used a simple journal, original built by someone else, that I had enhanced. It’s up at github, but I’ve recently (April/May 2013) started using org-mode and I am happier (sorry, old-journal-code!).


The below extract is taken from my org-init.el file, and needs some tweaking. They were inspired by Journaling with Emacs OrgMode. There is still some reliance on global-functions (aren’t they all, in Emacs-lisp?) from my old journal-mode, but they do the job of opening a new file where I need it. Then org-mode does all the rest.

(global-set-key "\C-c\M-jw" 'org-journal-work)
(global-set-key "\C-c\M-jp" 'org-journal-personal)
(global-set-key "\C-c\M-jf" 'org-journal-freelance)
(defun org-journal-work ()
  "Send work-based directory to org-journal for day-job journaling."
  (org-journal "D:/home/Personal/org-journal-work/" "work"))
(defun org-journal-personal ()
  "Send dropbox-based directory to org-journal for personal journaling."
  (org-journal "D:/Dropbox/Emacs/org/org-journal-personal/" "personal"))
(defun org-journal-freelance ()
  "Send dropbox-based directory to org-journal for freelance journaling."
  (org-journal "D:/Dropbox/Emacs/org/org-journal-freelance/" "freelance"))
(defun org-journal (&optional root suffix)
  "Open .org file named after today's date, format YYYY-MM-DD-Day.jnl,
in subdirectory named in variable root, set in ~/.emacs,
else as defined below.
    (setq root (or root "D:/Dropbox/Emacs/org-journal/"))
    (setq default-directory (year-month-dir root))
    (setq todays-date (format-time-string "%Y-%m-%d-%a" nil))
    (let ((sfx (if suffix (concat "." suffix) "")))
    (setq filename (concat todays-date sfx ".org")))
    (list (read-file-name
"Open journal-org file: " default-directory filename nil filename)))
  (find-file filename) ;; switch to buffer if exists, or open file
  ;; following lines based on http://metajack.im/2009/01/01/journaling-with-emacs-orgmode/
  ;; heading is not working correctly if it is the result of (today)
  (let ((isearch-forward t) (heading (get-today)))
        (unless (org-goto-local-search-headings heading nil t)
          ((lambda ()
             (insert heading)
             (insert "\n\n"))))
        ;; (org-show-entry)
        ;; (org-narrow-to-subtree)
        ;; (end-of-buffer)
        ;; (backward-char 2)
        ;; (unless (= (current-column) 2)
        ;; (insert "\n\n "))


May 30th, 2013

I’ve been working on a boostrap-theme/skin for PmWiki.


It’s beginning to take shape, but there’s a long way to go to make it a “real theme.” (I should note that it was extracted from a ready-to-install PmWiki “kit” with bootstrap in it; I’ve made it standalone, and am enhancing the feature-set and building documentation.).


I’ve been learning how to use git, GitHub, (guthub-flavored) markdown, more work with Bootstrap, deep-diving back into PmWiki development, playing with Emacs’ org-mode for journaling, and using Trello for planning.


PHP is annoying the !@#!@# out of me, as is GitHub’s wise advice to use relative links in a README.md, but making it impossible to use relative links to files in the wiki.


I’m hitting a bunch of tasks on my TODO list.




May 25th, 2013

Remember Google Buzz? I still haven’t gotten used to Google+.

Buzz user,

In October 2011 we announced Google Buzz was shutting down. On or after July 17th, 2013, Google will take the last step in the shutdown and will save a copy of your Buzz posts to your Google Drive, a service for storing files online. Google will store two (2) types of files to your Google Drive, and the newly-created files will not count against your storage limits.

The first type of file will be private, only accessible to you, containing a snapshot of the Google Buzz public and private posts you authored.
The second type of file will contain a copy of only your Google Buzz public posts. By default it will be viewable by anyone with the link, and may appear in search results and on your Google Profile (if you’ve linked to your Buzz posts). Note, any existing links to your Google Buzz content will redirect users to this file.
Any comments you made on other users’ posts will only be saved to those users’ files and not to yours. Once the change described in this email is final, only that user will be able to change the sharing settings of those files. This means that if you have commented on another author’s private post, that author could choose to make that post and its comments public. If you would like to avoid that possibility, delete all your Buzz content now.
The new Google Drive files will only contain comments from users that previously enabled Google Buzz, and the files will not contain comments that were deleted prior to moving the data to your Google Drive.

Once the files are created, they will be treated the same as any other Drive file. They are yours to do with as you please. This includes downloading them, updating who can access them, or deleting them.

Before these files are created, you can view the Google Buzz posts you have authored here. If you do not want any of your Buzz posts or comments saved to Google Drive files, you can immediately delete your Google Buzz account and data.

Thank you for using Google Buzz.

© 2013 Google Inc. 1600 Amphitheatre Parkway, Mountain View, CA 94043

You have received this mandatory email service announcement to update you about important changes to your Google Buzz account.


May 17th, 2013

See Part One


I tried to run init.el from within my existing emacs, but got an error, so I launched it suppressing my config-files

emacs -q -l d:homeemacs.jsinit.el


Basically got the following error (although with a longer trace indicating where it had occured):

Debugger entered--Lisp error: (invalid-function (tool-bar-mode -1))
  ((tool-bar-mode -1) (menu-bar-mode -1) (scroll-bar-mode -1))
  (if window-system ((tool-bar-mode -1) (menu-bar-mode -1) (scroll-bar-mode -1)))
  eval((if window-system ((tool-bar-mode -1) (menu-bar-mode -1) (scroll-bar-mode -1))))
  call-interactively(eval-last-sexp nil nil)


The root seems to be THIS snippet that doesn’t like to work from appearance.el


(if window-system
    ((tool-bar-mode -1)
     (menu-bar-mode -1)
     (scroll-bar-mode -1)))


Now, each of those lines can execute individually, but none of them like to execute in that block.

Why is that?


Oh, my elisp-fu is woefully faded.


hrm. THIS seems to work:


(if window-system
    (progn (tool-bar-mode -1)
           (menu-bar-mode -1)
           (scroll-bar-mode -1)))


so. I update that.



set-default-font: Font Inconsolata-12′ is not defined





End Part Two


read Part One


May 17th, 2013

I’m still trying to figure out how I should be using my wiki and my blog – what content goes where?

I’ve been putting a lot more this-is-what-I-did notes into the wiki, and cleaning them up as I redo it/find other/better ways.

I’m going to try putting them HERE in the blog first (in pmwiki-markup), and then clean them up a bit for the wiki.


That’s the idea, anyway….


This is Part One; read Part Two



So, I decided to test-install emacs.js


NOTE: the installation instructions presume Linux. Because: 1337. Because: Us windows users suck.

Or something like that.


NOTE: the notes below are pretty much unedited transcripts of my attempts to get this to work. They are more a reflection on my unfamiliarity with cygwin than they are of the lack of Windows installation docs. Although making this into an ELPA package would solve this problem in one fell swoop.

read more…


February 21st, 2013

Looks like Threeplicate SRL, the company that produced ScrewTurnWiki has shut down completely. I hadn’t realized that.


This gives a better understanding as to why they stopped STW development in 2012, and to why they aren’t communicating so much right now.


What’s really surprising is that the shutdown appears to have happened in June/July, and communications regarding development hand-over to the community didn’t cease until September (or so).


UPDATE 2013.05.15: The STW community is coming together over @ https://stw.codeplex.com


  • syndicate

    • Add to MyMSN
    • Add to MyYahoo
    • Add to Google Reader
    • Add to Bloglines
    • Add to Newsgator
    • Add to NewsIsFree