Subscribe to the RSS feed: RSS feed icon

Thinking of developing some new apps

So I’m going to be working on a couple of apps as homework (senior project: you’ve got to prove you can actually do stuff!). We – my senior project team – haven’t yet decided which platforms our apps will run on, but Android is a good bet. We have to develop one app together as a team plus one app each personally.

One app idea I’ve recently rejected as homework (due to it not being original enough) is a podcast app for Ubuntu phones. I have decided I am going to write this app anyway during my free time. It would be very useful to me, and Podbird (the only other podcast app I can find for Ubuntu phones) needs a competitor.

One app idea I’m still considering as homework is a Usenet client for mobile devices. I haven’t decided yet whether I will target Android or Ubuntu. The advantage of Ubuntu is I have a physical phone. The advantage of Android is that Ubuntu’s SDK is buggy. I’ve already set up my Raspberry Pi to serve as a single-user NNTP server for testing the app.

My final idea for a personal homework project is a screenwriting app, something akin to the abandonware Celtx desktop software but more closely aligned to my vision for how it should work.

Note to self: Buy a faster Pi.

Finished Mimi & Eunice Transcription Project

In the days since fall term ended, I’ve been keeping busy. Busy playing games, programming, basically just doing whatever I feel like. Three of the projects I’ve been working on, which I started at the same time over the summer, are Mimi and Markov, Markov Comic Generator, and the Mimi and Eunice transcripts project.

The transcript project is essentially done. I have transcribed every Mimi and Eunice comic strip yet posted online. If more comics get posted in the future – which I think seems unlikely – then I will transcribe them as well. Until that happens, nothing new will get added to my transcript project’s git repo. I might still make some changes, such as correcting spelling errors or adjusting the position and size of word bubbles.

Out of curiosity, I’ve compiled some stats from the transcripts:

Character Words spoken Sentences spoken Words/sentence
Mimi 5067 966 5.2453
Eunice 3797 767 4.9505
Label 181 88 2.0568
Onomatopoeias 101 94 1.0745
Death 28 9 3.1111
God 26 5 5.2000
Online Commenter 15 7 2.1429
Foreigner 6 2 3.0000
Unknown 4 2 2.0000
Frédéric Bastiat 4 1 4.0000
Karl Marx 2 1 2.0000

“Label” refers to text that doesn’t belong to any characters. It might be considered the voice of a narrator.

Markov Comic Generator is not feature-complete but is definitely usable in its current state. I will do more work on it, I just don’t know when.

Mimi and Markov is entirely automated; I ended any real involvement in it months ago. One of my computers automatically pulls transcripts from the transcript project’s git repo and program code from MCG’s git repo, then runs the program. Pretty simple really. The only thing I have left to do is decide how long to keep the program running. It’ll be a long time before I fill up even the tiny amount of storage space I currently have on this server.

Starting work on Cybrinth again!

so I’m starting to work on Cybrinth once more. There’s a lot of stuff on my todo list for the game, the most important of which is the implementation of a settings screen so players can change settings in-game, without having to go and edit the settings file manually. Now I face two challenges:

  • Decide whether all the settings should be accessible from the settings screen, or only some. If not all, which?
  • Preferably preserve all the comments in the settings file, as I feel that they serve as useful documentation when somebody does edit the file manually.

Uploaded my WordPress theme to GitHub

so I realized I hadn’t posted the source code for my custom WordPress theme. Kinda goes against the whole Open Source focus of this site 🙂
That’s fixed now. It’s on GitHub. My web server (very cheap shared hosting provided by An Honest Host; I recommend giving them a try) doesn’t have git, so I can’t set it up to automatically sync with the GitHub repo, but I’ll try to keep them in sync. I don’t frequently make changes to my theme.

As I was typing the previous two sentences, it occurred to me that I can set up my Raspberry Pi, which currently is responsible for generating the daily Mimi and Markov comics and uploading them to the server, to facilitate the synchronization.

Long rambling post about how I don’t post much

I’ve been thinking lately about how infrequently I write blog posts. My thoughts are racing faster than I can type (no, I’m not high) so I may jump from point to point. This was inspired mainly by the sudden conversion of lots of Mimi and Markov comics into blog posts. Notice that I created a separate account on this web site, Markov Bot, and the old M&M page has been replaced with a link to all blog posts by that author.

I talked in my previous real blog post about how I used to auto-upload comics to the site, and how I planned to do it in the future. The future has arrived. Now, my Markov Comic Generator program can upload to any WordPress blog that has XML RPC enabled, which most do. To keep everything looking consistent, I decided had to re-upload all the existing comics in this new format, manually.

I tend to write real blog posts maybe once every six months to a year. My program has been generating new comics every day for about one and a half months. Imagine me having to suddenly create nearly 50 posts!

So yeah, that’s why I’m writing this. Because I just needed to add some actual, non-computer-generated content.

What to write about?

How about “How We Did It”. Yeah, that’s a start I guess. So Gabe and I filmed the first in what we hope will be a video series entitled “How We Did It”, in which we document our filmmaking process. We did two or three full takes (each taking a surprising half an hour – we had expected closer to 10 minutes each) plus one take that ended after a few minutes due to my camera running out of batteries. I plan to post the edited video as soon as I can get up the courage to fire up a video editor and watch an hour and a half of us talking. I hate hearing my own voice and seeing my face. That’s a common – I don’t know the word for it. Fear? Dislike? Discomfort? – and the only way I know of to get over it is to make yourself do exactly what you don’t want to. Make yourself edit your own videos.

The fact that other people have faced this problem and gotten over it does not make it any easier for me.

I’m so glad I learned to touch type in high school. When I get into ‘writing mode’, as I call it, my fingers can almost keep up with my thoughts. Which is quite an accomplishment, seeing as my writing can be long and can wander from topic to topic.

The other thing I wanted to mention was my programming. Specifically my apparent tendency to take on lots of projects and then just abandon them. While it is true that I have lots of projects on the back burner, they are never truly abandoned. I still have a place in my heart and my head for all the projects I liked enough to take on in the first place.

My movie script, I was just thinking about yesterday, trying to decide how to end it and what I want to do with it once it is ended. This isn’t the movie Gabe and I are working on right now. Right now we’re working on “Mother Night”, based on a short poem of the same name. My movie script is called “The Rose And The Wolf”. You can find an early draft of it here (I think – not sure it survived the move to this domain) and a different draft uploaded as a PDF to my DeviantArt account. I’m thinking that, since my original motivation for starting this script was non-economic (it was a homework assignment), and I’m not particularly interested in making an actual movie out of it myself (it would require a much higher budget than I can possibly afford, and some significant work that I don’t want to commit to at this time), and I’ve already published drafts of it online, I’m just going to post the entire thing online if I ever do finish it. I will release it to the public in the hope that somebody else makes a movie of it. It has always been my intention to pass the script off to somebody else. The script is a remix (everything is a remix) based on Campbell’s Monomyth idea as filtered through the mind of Christopher Vogler and his book The Writer’s Journey: Mythic Structure For Writers. I want to see how other filmmakers remix my work. This is Free Culture.

Programming-wise, I haven’t forgotten about Cybrinth or Mines-Perfect; they’re just on the back burner until I get that burst of inspiration which comes from time to time.  Cybrinth I would say is in a beta state, by which I mean it has all the features I want to add (again, I hope other programmers will contribute whatever features they want). Now I’m trying to get it to compile and run without error on computers other than my own. This is turning out to be far more challenging than I ever anticipated. But that’s another blog post. Mines-Perfect: I’m just enjoying playing it but haven’t really given serious consideration to actually fixing the remaining bugs because I’m not actually familiar with the programming language in which it’s written, and I don’t want to learn it right now. I’m learning Python and am about to start taking a required class in Haskell, plus a general “introduction to programming languages” class, so learning C# is not really an option at the moment.

Otherwise, I’ve been spending my time lately catching up on podcasts and playing Super Nintendo games on my computer thanks to zsnes and my Retrode. My Kindle Fire, which I had been using as a podcatcher, got torn apart, so I’ve lost track of which specific podcast episodes I’ve already heard. Not that it matters, since I enjoy every podcast Im subscribed to, but it is annoying to be ten minutes into an episode and then realize that “this sounds so familiar… wait a minute, I heard this three months ago!”

Stay happy, stay free, and don’t forget that you don’t need to be a consumer.



I got myself a new toy a few days ago: a Retrode. What is a Retrode? It’s a cartridge reader for Super Nintendo and Sega Genesis cartridges. It makes backing up your games dead simple. Now I’m a firm believer in the idea that if a file doesn’t exist in 3 places, it effectively doesn’t exist. I have these game files, 4 MiB each, in cartridge form. Now I can also burn these files to CD (I still use optical disks for backups) and on my backups-dedicated external hard drive.

Thanks to the Retrode, my investment in these games, and the associated childhood memories, are safe.

But that’s not all a Retrode does. It also has ports to plug in my old SNES controllers (Sega controllers too, but I never had a Sega). My computer now sees these controllers as USB gamepads. Finally I can play Cybrinth with these old controllers; it’s almost as if Cybrinth were running on a SNES.

And the best part? Plugins. There are plugin adapters that will let my Retrode read Game Boy, Nintendo 64, and Sega Master System cartridges and use N64 controllers. Hello GoldenEye!

If you want your own Retrode, head on over to DragonBox.

Auto-publishing posts from Python

As I work on my latest program, Markov Comic Generator, I find myself increasingly wishing that it had the ability to automatically post the generated comics to this site. The way I’m currently handling auto-posting of Mimi and Markov works but is not optimal: I wrote a shell script which, after running MCG, scp‘s two copies of each comic to a certain directory on the server. One of the copies is named with the current date, the other is always given the name “current.png”. On this site I have a static page which always shows “current.png”. I also have a WordPress plugin called FileAway which is responsible for generating the RSS feed and the file list displayed on the past comics page.

This is undesirable because it relies on extra software being installed on both the blog server (FileAway) and the computer running MCG (scp).

I’ve found out that both WordPress and Python support this protocol called XML-RPC. All I have to do now is figure out how to get them to play nice together…


Spent the week experimenting with Python so I can write GIMP plugins. Didn’t write anything much more complex than “Hello World”.

That’s all I have to say in this week’s blog post.

No progress this week, but I tried

I haven’t made any progress on open source projects this week, but it’s not for lack of trying.

Part of the problem this week has been indecisiveness. There are so many things I want to do, so many programs I want to contribute to. I want to write plugins for Firefox, GIMP, Guayadeque, and Thunderbird.

I tried working on a couple of Firefox extensions. For Edit Tab Titles, I’ve been trying to figure out how to right-click on a tab and then have the extension figure out which tab got right-clicked on. No progress there. I found another idea which I may incorporate into Edit Tab Titles soon: scrolling the title’s text as a marquee.

I created and then almost immediately deleted a new extension for manually resizing individual tabs in Firefox. I think that if a tab’s title is really short, one should be able to shrink just that tab. The reason I deleted it is because there is no documented way for an extension to access or edit a tab’s size. Not much point in keeping an extension that does nothing.

I read on Mozilla’s Add-ons Blog that they’re now, as of the 26th of February, recommending the use of a tool called jpm for creating new extensions. I’ve been using the previously recommended tool, cfx. Installing JPM was a pain: first, because the recommended way to get it is using NPM, which I’d never heard of before. Found NPM in Ubuntu’s repositories, installed it, then used it to install jpm. Headed over to for instructions on how to create a new extension using jpm. Instructions say to run the command “jpm init”. Instructions incorrect; no error message given but nothing gets done either. Uninstalled jpm, reinstalled jpm with sudo privileges. Tried again, nothing. Uninstalled jpm again, reinstalled again without sudo privileges. Tried again, nothing. Lather, rinse, repeat. Until at one point I discovered by way of a typo that “npm init” works. Now I know that whenever that page says to use the jpm command, I should use the npm command instead.

I also want to create an extension for the GIMP: a feature it lacks, which I think woud greatly improve the program, is adjustment layers. Google “Photoshop adjustment layers” to see what I’m talking about. In basic terms, what an adjustment layer is is a layer that thinks “Whatever happens to me, I’ll make it look like it happened to all the layers beneath me.”. So if you want to darken a bunch of layers in an image, just create an adjustment layer and darken that. Simple, right? Apparently not: the GIMP’s developers are well aware of the need for this feature but, according to their wiki, implementing it would require a massive amount of work to be done first.

Fine, I thought. I still want to learn to write GIMP extensions. Here comes another problem: they can be written in either of two scripting languages, neither of which I’m particularly familiar with. Script-Fu is GIMP’s own language. Python is the other option. I look into using Python because I want to learn that anyway, only to find that I can’t use my favorite Python IDE because there’s a module called gimp that apparently can only be loaded when the script is run from within GIMP itself. Not convenient at all.

As for Guayadeque and Thunderbird, I haven’t even gotten around to looking at Guayadeque and I don’t know what I would want to create for Thunderbird.

Various stuff

I’m working on Firefox extensions as I write this. This blog entry is kind of a stream-of-consciousness thing.

First, here’s some stats for my Edit Tab Titles extension: Edit Tab Titles graphs

On the one hand, I’m kind of pleasantly surprised to see so many downloads and users, considering that I’m doing nothing at all to get the word out about this extension. On the other hand, I’m not sure I trust these numbers. I mean look at the data underneath the Top Applications graph. Zero users counts as 11%? How does that work?

In other news, I found that another extension I was working on is unneeded. Last week I began work on an addon for open Firefox’s back/forward history in new tabs. Today I found that the same functionality is built into the browser. Just hold the ctrl key (to open a new tab) or shift (for a new window) when clicking the back or forward button. So, that’s one git repository I get to delete from GitHub.

I helped a friend not in this class to get rid of an unwanted, accidentally-created submodule in git the other day. I’d never heard of git submodules before. I think I could use this. Edit Tab Titles depends on a couple of other git repositories not under my control. Previously what I had done is simply clone those repos into a subdirectory of my own repo, add that subdirectory to my repo’s .gitignore file, and put instructions into the readme saying that’s what needs to be done. Thus I ensured that anyone downloading my code for the first time will download up-to-date copies of those two repos, but only if they read and comprehend the readme. Now that I’ve converted them to submodules, if I’m understanding the man page correctly, they should get cloned automatically whenever my repo is cloned.

I’ve also been working on an art piece lately (here‘s a nearly finished work in progress). There’s one feature I’ve heard of in Photoshop that I’m really starting to wish GIMP had too: adjustment layers. I may have to add that feature myself. Created an empty repo on GitHub as a reminder.