I have had several people ask what the state of development is on this application. To be honest, I have not touched it in a long time. Technically speaking, if you can install cherrypy on your iPhone (no, it’s not in a Cydia package) it should work. Otherwise, you may be out of luck.
I really would like to get it working on 2.0, but I am strapped for time at the moment. I shouldn’t even be spending time writing this post; I have lots of other things I need to do. Cydia has a nice pyObjC package now I see, but I daresay that you will not see any developments in jComix for the next few months as I try to wade through all the exams and work I need to get done.
For those of you that don’t know, the AppleTV is a small, low powered OSX-running PC that has been built specifically for streaming and playing videos to a TV via WiFi. It has HDMI, component, optical audio, 802.11n and is completely fanless (yay!). Thanks to a few people (notably Turbo and the NitoTV team), the AppleTV has been opened for development.
Although I didn’t realise it at first, writing a portable driver for the USB13700 in python was a very good idea. There is a USB port on the back of the AppleTV that is initally disabled. If I remember correctly, all set top boxes sold in the US need an external debug port to be approved by the FCC (or something along those lines). Since Apple doesn’t want anyone using the port, it is disabled by the Mach kernel after loading. To get around this is quite a complex process and I wont go into it completely here, but follow these steps (google is your friend here): Continue reading ‘USB13700 on AppleTV!’
I have been playing with Henri’s USB13700 graphical LCD controller for some time now on my Windows box. Its a neat little piece of hardware; very flexible and powerful. A few days ago, I set about programming a python pseudo-driver for it so I could use the screen under Linux. The screen is encapsulated in an easy to access class, USB13700. It currently runs quite slow (I am still trying to work out why) but PoC code to draw a moving sine wave follows: Continue reading ‘Using the USB13700 controller in Linux with Python’
It all started a few years ago when I discovered the book Project Arcade: Build your own Arcade Machine! I have always been a closet old-skool gamer and so I bought the book. As soon as I had devoured its information, I began designing my own.
It flopped. Quickly. I never got out of the planning stages for the machine. There was no room at home, and it would end up costing too much. But I did order enough buttons for a two player panel, and the extremely expensive (but high quality) iPac encoder. I ended up drilling a few holes with a spade bit and plonking it all on a piece of wood that I sat between two boxes. That thing was hideous. Continue reading ‘HIDeous Arcade: its not that ugly, is it?’
I recently discovered Project Euler in one of my trawls through Stumbleupon. If you have ever done work with complex numbers, you will know all about Euler. True to its name, it is a website that lists a series of algorithm design problems, often with bit of math thrown in. You are given a description of the problem and a box to enter your result in. So far, it has proved to be an invaueable resource for refining my skills.
The website is great because it fosters an environment in which people can choose to be competitive or not. Users are ranked by their skill, but this ranking is never displayed unless you go looking for it. My favourite thing is that the problems can be completed in your own time. I enjoy a good programming puzzle, but I generally have very little time to spare. Having a high score on Project Euler could also look good on a CV/resume.
It was difficult for the first few sets as, in my case, I had never really done these kinds of problems. However, once you get a small cache of reusable functions going (checking for primality, etc) the problems transform from intimidating mind-benders to simple programming exercises. I will definitely be attempting more problems over the next few years, hopefully I can make it all the way to 100%!
I heartily recommend that everyone who is interested in programming gives it a go.
First of all, thanks to everyone who is currrently using jComix! It’s great to see people actually use your software. Another note: please read this whole post before trying the new jComix. Continue reading ‘Merry Christmas: jComix kinda does CBZ’
So, I received a few emails (thanks guys!) about difficulty installing jComix. Thats not a problem anymore; I have just created an Installer.app repository with jComix in it. Incidentally, if anyone is trying to create zip files for distribution through Installer.app, WinRAR zips do not work (that one cost me a few hours of tinkering).
To get jComix running: Continue reading ‘jComix now in Installer.app’
Although I thought jComix was useful, I got sick and tired of only reading comics when I was in range of my own WiFi. So I sat down with my Python Reference Manual and ported the entire application to Python; the reason being that, unlike Ruby, the Python build for the iTouch is not broken. Now before you download this, a warning is in order:
This took me all of 3 hours to make. There are probably better ways of doing it. There are probably faster ways of doing it. I did the best I could inside my limited timeframe. Nonetheless, there may be bugs, both benign and malignant. I take absolutely no responsibility for anything that breaks or ceases to function as expected. Again, this application is released under the GNU GPL v2 (http://www.fsf.org/licensing/licenses/info/GPLv2.html).
Now that the yucky legalese is over, lets have some download: Download jComix Native Edition here.
I don’t have time right now to write a full install tutorial, so here are the basics:
- Install Python from Installer.app
- Download the archive (linked above)
- Extract the contents to a folder
- Copy that folder to your iPod/iPhone
- Make the install script executable
- Run the install script
- Delete the install folder
- Run this line in a shell:
python /var/root/jcomix/jComix.py
- Head to http://127.0.0.1:8080/ in Safari and you should see your comic (after a little wait)
- If you want jComix to run on startup, save this file to /System/Library/LaunchDaemons.
If you notice anything wrong (or right
), drop me a comment here or send an email to jeremy DAHT 006 AHT gmail DAHT com.
UPDATE: Check here for an Installer.app version.
So I finally bit the bullet and bought myself an ARRR-duino (arduino.cc) from a nice little shop called Little Bird Electronics, which by the way has a really cool design in comparison to other webshops. Even though I already have an AVR development platform (the wonderful STK500), it will be nice to have a simple, no extras needed dev kit with USB support. I know USB is complex and all, but dev kit makers, you are still living in the dark ages. My recent computer breakdown decision to upgrade meant it was time for a QuadCore processor. For this, I needed a motherboard upgrade as well. Props to Murphy’s Law, because my new motherboard has no COM ports.
I’m also pleased that this thing gets its power over USB. There is no need to lug a chunky power brick wherever you take it. So I can make little projects and just plug it into my iPod charger (which I take with me anyway) to power it up. Brilliant.
Now I just have to work out how to program it from my iPod Touch…
Picture copyright Pip 2007
The Tengu is simply a small LED matrix hooked up to a microcontroller and a electret microphone. The cool part comes in when playing music; the Tengu appears to be lip-syncing. After seeing just what it can do, I knew I needed to have one. But why buy one when you can make it yourself?
It was actually surprisingly easy to drive the LED matrix. The ‘faces’ are stored as eight chars; one for each line of the matrix. Basic code follows:
/* This file assumes that the NPN-transistors are hooked up to PORTB and the cathodes are connected to PORTD */
#include <avr/io.h>
void output_matrix (unsigned char matrix[8]);
unsigned char mouth_closed[] = {0x00, 0x66, 0x66, 0x00, 0x7E, 0x00, 0x00, 0x00};
unsigned char mouth_pursed[] = {0x00, 0x66, 0x66, 0x00, 0x7E, 0x7E, 0x00, 0x00};
unsigned char mouth_open[] = {0x00, 0x66, 0x66, 0x00, 0x7E, 0x81, 0x7E, 0x00};
unsigned char mouth_large[] = {0x00, 0x66, 0x66, 0x00, 0x7E, 0x81, 0x81, 0x7E};
unsigned char mouth_big_smile[] = {0x00, 0x66, 0x66, 0x00, 0x7E, 0x42, 0x42, 0x3C};
unsigned char mouth_smile[] = {0x00, 0x66, 0x66, 0x00, 0x42, 0x42, 0x3C, 0x00};
unsigned char mouth_surprise[] = {0x00, 0x66, 0x66, 0x00, 0x7E, 0x42, 0x42, 0x7E};
int main (void)
{
DDRB = 0xFF;
DDRD = 0xFF; /* Ports are all output */
while (1)
{
output_matrix(mouth_open); /* Forever print the face */
}
return 0;
}
void output_matrix (unsigned char matrix[8])
{
int x; /* Loop control variable */
for (x = 0; x < 8; x++) { /* For each LED in the array */
PORTB = (1 << x); /* Turn on the NPN connected to the 'x' row */
PORTD = matrix[x]; /* Output data */
}
}
I haven’t yet been able to test it with a microphone because my new motherboard does not have any COM ports, so I can’t program any of my AVRs on my STK500. But cables are coming in from eBay soon, so I should have it running sometime in the near future (maybe even make some PCBs!).