Planet Yakko

September 01, 2010

Slow.

I have gotten a chance to play with a few ninja badges in the past week or two. I Started laying out the screens and menus on the Arduino platform.

I also ordered some parts from mouser to make a prototype badge. (without RF) Those should be coming this week. I will have some progress picture up then.

August 29, 2010

My Life, an Update

I guess to deviate away from my typical techie articles, I'll write a bit about my life and what I've been doing in the last 6 to 8 months (since I know nobody reads my blog for the tech stuff anyways, so here's to you faithful readers, if you even exist O.o).  My life is [...]

August 24, 2010

The Actor/Message Passing System of Concurrency

Lately, a lot of research has gone into how to make concurrency easier, both conceptually and programmatically. One of the models, originally created by Erikkson for the language Erlang, is the Actor/Message Passing system. The idea behind this system is that you a dispatcher creating tasks in response to some data. Information about the tasks are bundled up into objects, and each object is sent to an actor. The actors are sitting on top of a thread pool, waiting for a task. When they get a task, it goes into their mailbox. The next time that actor checks its mailbox, it retrieves the information in the message, grabs a thread from the thread pool, and begins performing that task. When it finishes that task, it sends the output of that task either back to the dispatcher or to another actor, and it checks its mailbox again.

The above model is conceptually very simple as long as your tasks are easily broken up into repeatable chunks. For example, it would be very easy to write a log parser. I have an actor polling the log, and when a new line comes in, it sends it to one of the parser actors. The parser actor figures out what to do with it, such as printing it to a different file if it is a particularly important event, and then returns to checking its mailbox. This works wonderfully where, say, the parser must go to the web or to disk to fetch some data to complete the task. The parser gives up the thread while waiting for the network or disk to return the data, and another parser gladly picks it up and begins executing. When the waiting parser is ready to complete its task, it gets back in line for a thread in the thread pool. Eventually, the operating system will assign it a thread, and it can finish its task.

This works well for systems where you have many similar tasks to perform concurrently, such as running the same program with different parameters many times. It also works well for networked solutions, as the messages are easily encapsulated and sent over a network to a waiting receiving dispatcher.

A modern implementation that has been gaining a lot of traction lately is Scala. Scala is a functional language that runs on the JVM and uses a Python or Ruby-esque syntax. It embrasses the actor/message passing system and makes it trivial to write code that utilizes concurrency with this model. As an example, I’ve written a simple IRC bot that uses this model. Polling the socket is done by a function running on one thread. The entire body of the polling function, once we’re connected to the socket, is:

val responder = new IRCResponder(connect, ircBotNick, ircBotDescription, homeChannel)
responder.start()

while(true)
      {
      val line = in.readLine()

      if(line != null)
        {
        if(line.substring(0,4).equalsIgnoreCase("ping")) {
          val pongmsg = "pong " + line.substring(5)
          responder ! IRC_Response(pongmsg)
        }
        else {
          responder ! IRC_Message(line)
          println("SENT TO RESPONDER")
          println(line)
        }
      }
    }

Note the lines with the exclamation point. Those are the lines that send the IRC_Message object to the responder actor. Really easy, right? responder.start() tells the responder object we just created to start running as an actor. When objects are sent to the responder, different actions are taken depending on what type of object was sent.

  def act() {
    // This thread will throttle the parsing threads by only allowing one thing to write at once.
    // So when data is sent back to here, write it out in the order that it came in.
    loop {
      react {
        case message: IRC_Message =>
        // Figure out which parser to send this message to and send it
        listOfParsers(findParser()) ! message

        case response: IRC_Response =>
        // Write the response to the socket
        sendData(response.response)
      }
    }
  }

The above code is the code the Responder object uses to figure out how to handle the object sent to it. If a IRC_Message is sent to it, then find a parser (this function finds the parser with the smallest mailbox) and send it to that parser for processing. If it is an IRC_Response, then we are getting a response back from a parser, so write it to the socket. The Parser’s act function looks a lot like this, except that the only case is for IRC_Messages, and then it probes the string in that message to see how it should respond.

The code is similar for the parser:

def act() {
    loop {
      react {
        case message: IRC_Message =>
        val line = message.message.toLowerCase

          // So we've received a message from the responder, figure out how to parse it.
          if ( line contains "define" ) {
            sender ! IRC_Response(toChat(getDef(line)))
          }
          else if ( line contains "find" ) {
            sender ! IRC_Response(toChat(getTorr(line)))
          }
          else if ( line contains "roll the dice" ) {
            sender ! IRC_Response(toChat("4."))
          }
      }
    }
  }

Using this method, the same bot could easily handle several chat rooms at once, including requests to grab data from the internet (such as torrents, Wikipedia summaries, definitions, etc.) using screen scraping or APIs. It would also be trivial to write a simple web server using this model, just treat each HTTP request as a separate task to be completed by an actor. In fact, using a very simple web server with a file cache, I was able to easily handle over 3000 conn/s with under 150 lines of code. Try it out, I think you might end up enjoying it. It is a very fun model to program with.

August 20, 2010

Playing with the display buffer

I got a chance to play around a bit with the display buffer on Wednesday. The Ninja badge buffer images and Ladyada’s images are stored and written into the buffer differently. The ones in the ST7565 Library fill the buffer using 8 bits at a time drawing down to left. For example; 10000000, 01000000, 00100000 (0×80, 0×40, 0×20) would draw a diagonal line down 3 pixels wide. This is different from the way other code writes to it. I was able to go through and view all of the characters that are in the badge. There was one that was kind of confusing, echelon….what?

Here is the Ninja character that is displayed on the badge.

unsigned char ninja_large[] = {
 50, 46,
 0xfe, 0xfe, 0xfc, 0xf9, 0xf2, 0xf0, 0xf1, 0xf1,   /* 0x0 */
 0xf1, 0xf1, 0xe3, 0xe0, 0xe0, 0xc0, 0x80, 0x80,   /* 0x8 */
 0x03, 0x03, 0x01, 0x00, 0x00, 0x80, 0x80, 0xc0,   /* 0x10 */
 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,   /* 0x18 */
 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,   /* 0x20 */
 0xff, 0xff, 0xfe, 0xfc, 0xf9, 0xf0, 0xe0, 0xe1,   /* 0x28 */
 0xe3, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* 0x30 */
 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf8,   /* 0x38 */
 0xf8, 0xf0, 0xf0, 0x70, 0x0c, 0x02, 0x01, 0x00,   /* 0x40 */
 0x80, 0xc0, 0xe0, 0x20, 0x60, 0x60, 0x20, 0xe0,   /* 0x48 */
 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,   /* 0x50 */
 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xcd,   /* 0x58 */
 0x9b, 0x37, 0x6f, 0xdf, 0xbf, 0x7f, 0xff, 0xff,   /* 0x60 */
 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* 0x68 */
 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,   /* 0x70 */
 0x10, 0x0c, 0x03, 0x01, 0x00, 0x00, 0x00, 0x80,   /* 0x78 */
 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x48, 0xd0,   /* 0x80 */
 0xc0, 0xe0, 0xfc, 0xf4, 0xf0, 0xf0, 0xe0, 0xc0,   /* 0x88 */
 0x80, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, 0xff,   /* 0x90 */
 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,   /* 0x98 */
 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* 0xa0 */
 0xff, 0xff, 0xff, 0xff, 0x3f, 0x0f, 0x0f, 0x0f,   /* 0xa8 */
 0x0f, 0x0c, 0x38, 0xf0, 0x00, 0x00, 0x00, 0x00,   /* 0xb0 */
 0x00, 0x01, 0x00, 0x00, 0x00, 0xf0, 0xfe, 0x13,   /* 0xb8 */
 0x41, 0x21, 0x83, 0x07, 0x07, 0x0f, 0x3f, 0xff,   /* 0xc0 */
 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,   /* 0xc8 */
 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,   /* 0xd0 */
 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* 0xd8 */
 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xc0,   /* 0xe0 */
 0x00, 0x08, 0x10, 0x10, 0x08, 0x00, 0x0f, 0x7f,   /* 0xe8 */
 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x10,   /* 0xf0 */
 0x88, 0x90, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff,   /* 0xf8 */
 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,   /* 0x100 */
 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,   /* 0x108 */
 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   /* 0x110 */
 0xf8, 0xf0, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00,   /* 0x118 */
 0x00, 0x00, 0x00, 0x04, 0x3c, 0xfc, 0xfc, 0xfc,   /* 0x120 */
 0xfc, 0xfc, 0xfc, 0x0c, 0x04, 0x04, 0x04, 0x04,   /* 0x128 */
 0x04, 0x04, 0x04, 0x84, 0xc4, 0xe4, 0xf4, 0xfc,   /* 0x130 */
 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,   /* 0x138 */
 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,   /* 0x140 */
 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

I will have more time to work with this over the weekend. I need to get my hands on a official Ninja badge to figure out the way the application is supposed to work.

August 17, 2010

Wells Gardner 19K7201 Cap Kit (P757-D)

Well, we ended up buying our cap kit from WG because we couldn’t find a list of capacitors needed for the 19K7201 Deflection Board. In case anyone else is looking for a list, I thought I’d share what came in our kit. There are a couple revisions for the K7200 series boards, you should make sure this is the right one for you before ordering anything. If you find any errors or have any comments on the list, leave a comment so I can keep this as accurate as possible.

Here it goes:

Location Item Number Description Quantity
C42 045X0560-006 1000 UFD @ 16V 1
C45 045X0560-020 470 UFD @ 16V 1
C40 045X0560-033 2200 UFD @ 35V 1
C101 045X0560-052 100 UFD @ 160V 1
C57 045X0560-052 100 UFD @ 160V 1
C12, C18, C22 045X0560-514 1.0 UFD @ 50V 3
C13, C20, C21 045X0560-518 10 UFD @ 25V 3
C015 045X0560-532 100 UFD @ 63V 1
C48 045X0560-532 100 UFD @ 63V 1
*C50 045X0560-042 680 UFD @ 35V 105DEG 1
C011 045X0560-060 22 UFD @ 35V 105DEG 1
C80 045X0560-504 100 UFD @ 16V 1
*C204 045X0566-004 4.7 UF @ 160V 1

* The kit came with a 50V capacitor, but higher voltage capacitors won’t cause any issues so I’m guessing we just got what was more readily available.
** This capacitor is on the neckboard only, and can vary if your neckboard isn’t the matching one for a 19K7201. (This was the case for ours)

Hope this was helpful!

August 16, 2010

New Stuff

Some new toys came in last week. A while back before I started the badge project, I ordered a thermostat because it said it had built in Zigbee, a LCD, and some input buttons. I figured It would be a cool device to hack on but after looking into it more, most of the sites including the manufacturer side said that it was a Zwave module. So I kinda wrote that off as a bad buy. But after getting it in I found out It did have Zigbee. It had an Xbee module that I could remove and use in other projects. Possibly to dev on the badge project.

Second I got my Arduino Pro 3.3v in. I didn’t realize how much easier it would be to have the nice FTDI cable to program it. I don’t have a built-in Serial adapter (Macbook Air) so I tried to use a the USB to Serial adapter while supplying the board with 9v, but the adapter I have kind of sucks so that board is on hold until I order the FTDI cable.

I was able to get some input buttons working on the dev board. I also switched to a bigger bread board to accommodate some more components. I had 6 push buttons but after doing some testing I found that only 4 of them actually worked. So I wired up the 4 that I had and I was then able to to move up, down, left, and right on the bottom menu. Next I need to figure out what this thing is going to actually do, be it a game or some other type of application.

First month of Vim

I’ve recently made the upgrade from the wonderful Mac text editor Textmate to Vim (in the form of MacVim).  What initially led me away was a hope to be able to run SPSS syntax from within Vim, which would allow me to avoid SPSS 16′s abysmal syntax editor.  While this turned out not to work quite as easily as I had hoped, and is still a bit broken (a post for another time), I learned quite a bit about Vim’s scripting language.  Seeing how easily extensible Vim was, I decided to make the switch full time.  I downloaded a copy of MacVim and started creating my .vimrc.

The first thing I did was create an easy way to update my Git repositories when I was finished editing them.  This turned out to be ridiculously simple. Just put this in your .vimrc:

command -nargs=+ Commit :!git commit -a -m "<args>"; git push</args>

creates a new command in Command mode called “Commit”. So if you hit “:” to switch to Command Mode in vim, and type:

Commit Version 0.96 Updated XXX to do XXX, fixed bugs in XXX

and hit return, it will commit the changes to the repository and then push the code for you. This makes it effortless to keep your repositories up to date from within Vim.

I’m still retraining myself to navigate around the document using the shortcut keys. The shortcut keys, when I am in the mood where I actually use them instead of arrowing around, sped up my code development greatly. Also, being able to run terminal commands from within Vim has provided me with countless new ways of interacting with my code. I’d highly recommend everyone spend a month or so using Vim. The learning curve is a bit harsh at first, but the payoff is fantastic.

Here is what my MacVim looks like:

More Vim tips to come, along with some zsh tips and the SPSS/Vim bridge.

First Post

I’ve decided to give the website a revamp graphically, finally update my CV, and begin adding details on my research.  This website is primarily here in order for me to share handy programming tips and tricks, espouse my viewpoints on various things, and generally engage in narcissism.

Keep posted, I’ll try to actually update this thing this time.

August 11, 2010

Added Small Font

I added a smaller font to the library. I wanted to fit some more text on the screen but didn’t have enough room with the default font.

Here is the font and a comparison.

Here is a start to a game menu. The goal of this project is to have a fully customizable and fully open Arduino board with a mounted LCD and Zigbee wireless. There are a lot of other shields out there that can potentially do the same thing but I personally would like to see it all incorporated onto one board.

If you would like to use the small font in your project you can download it here: ST7565-smallfont

Connecting to WMU’s Cisco VPN from Linux

So if you're like me and you happen to use Linux instead of Windows or Mac OS X and you want to connect to Western's VPN (or any Cisco based VPN really, though I'll go though some Western specific steps) then I'm writing this for you.  For this guide I'll be assuming you're running Ubuntu [...]

August 10, 2010

Display Progress

I took some time yesterday to sit down and play with the display. As I mentioned before I’m currently using Ladyada’s ST7565 library. I used a program “bitmap2LCD” to make a 128×64 background image. In that program you can choose which direction you want the display table to be laid out. If you are using this program and ST7565 lib then you want to choose the “down” arrows when exporting your bitmap to a file. Here’s a pic of one of the display images I was playing with.

I’m not really sure what the name of the badge is going to be when I get done but I just threw that in there for lack of a better name.

EDIT: another pic for those mega man fans.

August 09, 2010

LCD Testing

My LCD came in on Saturday from Adafruit. I would recommend them if you are looking for some kit type stuff. No hassles and fast shipping (from NY).

Here is the LCD with some wires that I soldered to it.

Adafruit included a library (which is awesome) that you can download from their github page. It comes with an example which is great for testing it out. I thought it was funny how they loaded their logo into the buffer when you load the library. It took me a second to figure out why I couldn’t use glcd.display(); without getting their logo to show. I have a feeling I will be tweaking the header file when I get some time.

That’s about a far as I got on Saturday night. Looking forward for the Arduino Pro 3.3v to come in this week.

August 06, 2010

LCD Ordered

I order this LCD a couple days ago from adafruit.

After doing some research into electronic badges I found out that most of them are using somewhere around 3.3v instead of 5v+. This LCD’s input is 3.3v. It does come with a 4050 level shift so that I can test it with one of the Arduinos I already have. I was also thinking about getting an arduino pro 3.3v (they also have 5v version) so that I didn’t have to use the extra level shifter. Sparkfun has one.

After doing some more poking around, I saw that the Ninja guys started with the same approach.

Hopefully the LCD comes in today/tomorrow so that I can do some testing this weekend.

August 04, 2010

Starting some development

I got another Arduino in the mail yesterday. I am going to look into which GLCD is going to be best for this project. I think I am just going to order the generic 128×64 LCD for now to get started.

August 03, 2010

The Uberman Sleep Schedule

So I've decided to try a Polyphasic sleep schedule while I still have a month left of my summer. After doing a fair amount of reading, I was going to start a Biphasic sleep schedule but then after considering it more and reading more I decided the Uberman would be the most fun to try. [...]

Back from DEFCON 18

Well, I just got back from DEFCON 18 late last night and I must say I had a blast.

First, I was able to write a little something for the Router Arduino project. I only had a couple hours to write it on the plane, so It isn’t very cool but at least I had something. Here is the sketch if you care to take a look. I will write up a full page on the project.

As always the badges were awesome. Here is a picture of them.

The Ninja Networks Party Badge was absolutely amazing. It totally dwarfed the official DEFCON badge. I was able to pick up a plus one ticket in the hardware hacking village. I started helping to help a girl (leah) get the bonus item in the Ninja Badge game. Apparently you could solder the Tx and GND from the DEFCON badge to the Rx and GND on the Ninja badge and it would send the string “NINJA”, which would give you an unlocked Item. After finding out it wasn’t working we tried to pull out my Arduino and send the string to it trough TTL that way. After a whipping up a little sketch, cstone (developed the badge software) came over and tried to help us get that working. We didn’t have any luck and came to the conclusion there might be a bug in the software. We wern’t able to get real badges, but Mark and I we able to score some “Plus One” cards so that we could attend the party.

I got a chance to talk to both woz and cstone about developing the badge and they told me they would be releasing the Gerber/Eagle files along with the source for the program. I have some plans to modify it a bit and create another badge that plays or interacts with the the 2010 Ninja Party Badge. That is going to be my new project for the coming months. Luckily, Volty scored a Ninja badge for being a goon and agreed to let me test the badge I develop with the official one.

Here is a pic of the Ninja Badge.

http://www.wired.com/images_blogs/threatlevel/2010/07/defcon_ninja_eecue_001_ninja_badge.jpg

The Ninja Party was off the hook. The event was sponsored but Lookout and Facebook. The rented out a small hotel (the entire thing) and had free drinks for all the attendees. I met a lot of cool people and it was definitely one of the highlights of the trip.

July 31, 2010

A (new) Taste of Kalamazoo

Central City Taphouse is a new bar that opened downtown Kalamazoo just 5pm yesterday evening. Some Computer Club friends and I had heard it was opening, and decided to check it out.

Most of the domestic beers on tap we were all quite familiar with: Dogfish Head’s 90 Minute IPA, Bell’s Two Hearted, etc; and some of the imported beers seemed a bit cliche, such as Stella Artois and Hacker-Pschorr. Despite that, it was nice to see some foreign beers on draft instead of in bottles. Opportunities to try foreign beers that are not bottled are quite rare, and I would not recommend trying many bottled beers that have traveled a great distance.

The first beer I had was called Blonde by Aflingen which was a belgian strong pale ale. I’m normally not a fan of belgian/yeasty type beers, but I was quite satisfied with this one. The second beer I had was on special for $5, and is listed on the menu as $9. It was a Maibock beer by Hofbrau, and it was higher in alcohol content and the flavor was quite complex and full with a noticeable honey taste to it, which made it quite delicious.

My friends and I decided to split a margherita pizza, and a bread plate that came with a few different spreads. The bread came out first and we were pleasantly surprised with the pesto and hummus and other spread (of which I have forgotten the name.) Mix that with a few sips of excellent beer, and you’re in heaven. The pizza was also quite delicious. There was some dispute/bribing over the last piece of pizza involving trying to get someone to start smoking again (or quit quitting)… but luckily I was able to get my fill.

The atmosphere was pleasant, the music was European, and the waiter was quite friendly and helpful. I would highly recommend it if you are looking for a great meal downtown.

Update:

Revisited the Tap House once more this weekend, and decided to try their BEER FLOAT! The beer they used was Cocoa Loco from Arcadia Brewing. They also drizzled on some chocolate syrup and put some whipped cream on top. Overall, quite a delicious treat.

July 29, 2010

(Mostly) Finished. Leaving for Defcon.

I got a chance to work on and (mostly) finish the Router Arduino project last night. I didn’t get to add anything extra like cool LEDs or anything but I did get the power to the Arduino and the Serial wired up. I still don’t have it doing anything cool yet but hopefully I can whip something cool up on the flight down there.

First I want to show the serial harness. I do have to say, I was a fan of the solid core wire for this project. It makes it almost like clay in the regard that you can mold and shape it however you want. The Serial Harness talks TTL from the Router to the Arduino. It uses a GND, Tx, and Rx on the router to go to the respective places on the arduino.

Here it is installed.

Here it is not installed.

Next I went ahead and applied a heatsink to the broadcom chip. I haven’t overclocked it yet but that doesn’t mean I won’t. In any case it seems to work quite well. (unless I do the USB mod)

Some people might have been wondering why I designed this with the arduino to sit so far back in the case instead of setting it flush to the back like the router. Well I needed to snag some power from the router and I had an old power cord that didn’t work with a 2.1” jack on it. So I decided to use that to power the arduino. The power to the router is 9v and 0.7a. I was a little worried that the amp draw might be too much for both devices but it seemed to work OK. Since the power cord didn’t work I had to get out a volt meter to test it and find the positive and negative sides. The green wire temporarily tied around was to help me remember which side was positive. I then Had to find a 9v lead and a GND off the board so tap into. I figure the best place was right by the power input and I found a great spot.

Putting it all back together…

And the Grand Finale…

July 25, 2010

L4D2 on a 6600GT

So a few weeks ago my "better" graphics card died (granted it wasn't anything great, a Nvidia 7900GS) and I was left with only an old Nvidia 6600GT (minimum required graphics card for L4D2).  Now if you follow graphic technology at all, I went from a 4 year old card to more like a 6 [...]

July 22, 2010

WordPress Security and Database Prefix Alterations

Just a note on an easy way to keep your WordPress install a little safer. Beyond keeping your WordPress version up-to-date, the WP Security Scan plugin is an easy way to quickly check for unnecessary vulnerabilities(file permission errors, missing .htaccess files, etc) that could leave you exposed.

If you intend to use their tool for renaming your database prefix(I’d recommend it!), a note about the process to do so. When I was running the tool to change my database prefix, I made the mistake of not making my wp-config.php file writable during the process. The process failed near the end and I had a few things I had to update afterwards as a result.

The first update that was required was changing the wp-config.php file to include the new database prefix, which was as simple as changing the text “wp_” to “xyzwp_”. Unfortunately though, when I went to go make sure everything was working properly again, I found out that my site was completely borked because it hadn’t finished updating the database.

Fortunately, a few other people have run into this same issue, and I was able to find a workable solution here. I was able to get my wordpress install working again by running:

UPDATE xyzwp_usermeta

SET meta_key = REPLACE( meta_key, 'wp_', 'xyzwp_');

Since this isn’t the average fix you’d immediately try after running into this issue, I figured I’d pass along the info in case anybody else happens to run into it.

Why Root Your HTC Droid Incredible

So, you just rooted your droid and now your thinking to yourself "sweet, now what?"  Well here's a list of apps that require root that will make you wonder how you ever lived without in no particular order. 1. Wireless Tether This is by far my favorite app.  It makes my phone into a mobile [...]

Rooting the HTC Droid Incredible (the easy way)

So I've had my Droid Incredible for about a month now, and I have to say I'm very happy with it.  The 1ghz snapdragon processor is very responsive and the phone is really nice to use.  I upgraded to this phone from a RIM BlackBerry 8330 and anyone who's used one before will know how [...]

July 11, 2010

Brian and Halley go to Hawaii

Halley and I went to the beautiful island of Oahu for a romantic getaway over 4th of July weekend. Also, we got engaged! Check out some more pictures here: Hawaii Trip July 2010.

June 28, 2010

SF Pride Parade 2010 Pictures

I went to the Pride Parade yesterday and snapped some pics. It was a beautiful day and everyone looked like there were having a great time. Check out the rest at my flickr set: San Francisco Pride Parade 2010.

May 26, 2010

Sponsor ING drops Bay to Breakers

The outlook is bleak on the yearly Bay to Breakers race as ING has decided to stop footing the bill. The official word from Sam Singer, a spokesman for the race, is that they simply “chose not to renew for the 100th anniversary next year”.

Unofficially, however, word is ING is fed up with all the bad publicity that the race has generated in recent years, especially the complaints of residents around the Panhandle and Alamo Square about revelers and runners urinating, defecating and generally behaving rudely.

Let’s hope someone else steps in as the sponsor. The beer industry should be able to get behind this, right? Budweiser? Or is Tecate more the San Francisco style? They’re practically the official sponsor of Dolores Park already.

[Via: Sponsor ING drops Bay to Breakers.]

May 20, 2010

Google IO: The Hits Keep Coming

First, an announcement from today: the next version of Android. Better performance, wifi tethering (!), ‘update all’, and more! I can’t wait to get this. These are much-needed updates that make the platform much more powerful. Check out the embedded video below for details.

[Via: Google Announces the Next Version of Android.]

New fonts on endenizen.netNext, an announcement from yesterday: easy web fonts! The previous solutions to non-web-fonts-on-the-web involved rendering images, embedding flash objects, or using canvas (when it was available). These methods might have gotten the job done, but they were difficult to implement and each had its share of drawbacks.

Along comes Google Font API and all those problems disappear. Now you can easily use real fonts without adding complexity. Best of all, it’s cross-browser (even IE6!) and works just the way it should: just set the font-family in css. I’ve already added a new font to my blog which you can see in the screenshot. It really was as easy as they say:

<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Tangerine">
<style>
  body {
    font-family: 'Tangerine', serif;
    font-size: 48px;
  }
</style>

(Note: I’m not actually using Tangerine. I tried it, and it’s gross.)

[Via: Making Good Typography on the Web Easier: Google Introduces Font API and Directory.]

May 17, 2010

Mama’s Kitchen Coming to the Haight

Another new restaurant coming to the Haight? Parada 22 turned out to be very impressive (not to mention delicious) and we could certainly use more of that.

Mamas Kitchen, previously located at 321 Kearny Street and not to be confused with the ever-popular Mamas in North Beach, is looking to reopen in the Haight in place of what is currently a tattoo parlor called Soul Patch 1599 Haight.

[Via Mama’s Kitchen Coming to the Haight -- Grub Street San Francisco.]

True Blood: Season 3 (Trailer)

In case you missed it… HBO unveiled the first trailer for Season 3 of True Blood. Looks good.

May 14, 2010

New Programming Jargon

Categorization is hard. Categorization of code is boring. This list (made up of responses to a question posted on Stack Overflow) spices it up a bit by giving you FUN ways to talk about your most dreaded bugs, design patterns, and lack of documentation. A few of my favorites:

  • Banana Banana Banana: Placeholder text indicating that documentation is in progress or yet to be completed. Mostly used because FxCop complains when a public function lacks documentation.
  • Bugfoot: A bug that isn’t reproducible and has been sighted by only one person.
  • Counterbug: A defensive move useful for code reviews. If someone reviewing your code presents you with a bug that’s your fault, you counter with a counterbug: a bug caused by the reviewer.
  • Shrug Report: A bug report with no error message or “how to reproduce” steps and only a vague description of the problem. Usually contains the phrase “doesn’t work.”
  • Smug Report: A bug report submitted by a user who thinks he knows a lot more about the system’s design than he really does. Filled with irrelevant technical details and one or more suggestions (always wrong) about what he thinks is causing the problem and how we should fix it.

[Via New Programming Jargon — Global Nerdy.]

May 13, 2010

Adam Sandler taking ‘Pixels’ to big-screen

Remember the short film Pixels, where video game characters from the ’80s take over New York? Happy Madison is turning it into a feature-length film. This news comes just a week and a half after Heat Vision noted that Hollywood is feeling shorts fatigue:

Now Hollywood is suffering a shorts overdose. Execs and agents realize a guy with a computer can create a spaceship over a city but wonder if that person can tell a story. And not just once, in a hyped-up short.

Adam Sandler seems to think this short has something special. Watch it again below because it’s just that awesome. Here’s hoping they don’t screw it up…

The French filmmaker behind “Pixels,” Patrick Jean, has teamed up with Adam Sandler’s production banner Happy Madison to develop a big-screen take. The team is in talks with Columbia, where Happy Madison has its first-look deal, to set up the project at the studio.

[Via Adam Sandler taking Pixels to big-screen.]

May 12, 2010

HTML5 & CSS3 Browser Readiness Visualized

Screenshot of HTML5 and CSS3 Readiness Visualization

Trying to decide whether to implement that great HTML5 or CSS3 feature you just read about? Take a look at the HTML5 & CSS3 readiness dashboard to see if it’s supported in your target browsers. It’s not the most visually informative or user-friendly way of presenting the data but it works. It’s also neat to compare the state of the browser in 2010 with 2009 or 2008.

[Via: information aesthetics]

May 11, 2010

Fallout: New Vegas Collector’s Edition Details

Fallout: New Vegas Collectors Edition

I’m a big fan of Fallout 3 (and of the greater post-apocalyptic genre) so I am very excited for New Vegas. Destructoid has the details on the collector’s edition which will be available when the game is released this fall.

[Via: Destructoid]

February 16, 2010

Welcome to dev-random.me

So, I decided it would be fun to move away from Blogger and onto WordPress since it seems to be the popular thing to do.  So far, I like it.  It's a lot more customizable than Blogger, especially since I get to host it myself.  I also enjoy WordPress themes more then the Blogger ones. [...]

January 18, 2010

And so it continues

Well, it's been a while.  I've been telling myself I'm going to write a blog entry since ... November.  Woops! Oh well, at least I'm working on one now.  So I guess to start I'll summarize my last semester real quick, meh.  It wasn't bad, defiantly an improvement over last year, but I could have done things a lot [...]

November 19, 2009

Update

I finally got around to updating wordpress. Woohoo!

October 13, 2009

The New Direction

Just so everyone (and no one) knows, I am aware that nobody follows my blog, but that is alright, I thought I would at least explain my change in direction to the Internet ghosts. The past few months have taught me a lot about life and one thing I've learned is that if you want [...]

October 05, 2009

AT&T Uverse vs. Aastra 55i

Several months ago we switched from AT&T DSL to AT&T Uverse at my home. It offered “cable” TV and quick Internet for a price that worked or us. Uverse also offers its own VoIP service but we declined that part of the service in favor of using a 3CX remote extension using a Sipura SPA3000 that I bought a few years back.In my experience so far, Uverse is not a Voip-friendly provider unless you use their service. For one, you are stuck with their gateway box. Yes, you can use the “DMZPlus” mode to add your own firewall into the mix but it’s far from perfect. I did manage to get my SPA3000 to work. The Aastra 5xi series of phones doesn’t have as many NAT traversal options however so it wasn’t quite as easy.

First I went to the Global SIP screen and set things up in the usual way so that the phone had the information needed to register to the PBX, etc.

This would work great if the phone could route directly to the PBX and back again but with Network Address Translation occurring on my end throws a monkey wrench into the works when it comes to SIP and RTP.

So next I looked on the Network settings. This is where all of the NAT options live. With typical cable or DSL service, I’d just set a STUN server, maybe check the Rport box and go. In the case of the Uverse 2Wire Residential Gateway, however no combination of these options that I tried worked.

So in the end it seemed necessary to take a look at the available settings on the 2Wire device and see what my options were. There weren’t many.

I ended up explicitly allowing the UDP ports that the phone uses. On the Uverse gateway. Here are the steps:

First I went to the Firewall tab and then Firewall Settings. I selected the phone from the Computer drop down and selected “Allow individual application(s)” like so.

Next, I clicked Add a new user-defined application and created a user-defined app as below.

The phone sends and receives RTP traffic on ports beginning with UDP 3000. I opened up ten ports allowing for five simultaneous calls. This seemed like more than enough for my purposes.

When I was done I clicked “Add Definition” and then the new user-defined app was ready to go. I Selected it on the following page, clicked Add, and then Done. After that the phone worked great.

What I did find odd is that I didn’t need to define a stun server on this phone to get it to work in this situation. The 2Wire residential gateway must do some sort of manipulation of SIP packets because from what I could tell all of the fields looked correct with the appropriate public IPs in the right places.

It’s unfortunate that the phone couldn’t be made to work without making changes to the firewall. But something with the way that the 2Wire handles RTP seems to make it necessary.

Enjoy!

Matt

June 12, 2009

travis-thompson.info

Today I bought travis-thompson.info for 99 cents from godaddy.com. So far I'm much happier with godaddy than I was with 1and1, admin interface is much nicer (the number of features and ease of use is great for 99 cents a year). I already have it registered with Google Apps Standard Edition to handle email (travis [...]

April 19, 2009

NCUR 2009

On Thursday, I spoke at NCUR (National Conference of Undergraduate Research) about my neural network battery prediction model.


Me in front of the UW-La Crosse clock tower

April 13, 2009

Snom 370 SIP Phone Through NAT to 3CX

My article relating to this was accepted and posted in the official 3CX blog.  You can read it here.

February 09, 2009

More Mead!

I made yet another batch of mead today.  This batch had the usual 15 lbs of honey in it but this time I also added cinnamon, allspice, nutmeg, cloves, and two vanilla beans.  It should prove delicious.  We’ll find out for sure in about a year.

January 06, 2009

American What?

I need to rant.

What is the deal with American Cheese anyway?  I don’t understand how people can call it cheese at all?  What’s sad is that it is the type of “cheese” that many people in the U.S. were brought up on so they continue to buy it not even knowing that something that doesn’t taste like processed pond scum is readily available.

According to Wikipeda Kraft Singles contain:

“milk, whey, milkfat, milk protein concentrate, salt, calcium phosphate, sodium citrate, whey protein concentrate, sodium phosphate, sorbic acid as a preservative, apocarotenal (color), annatto (color), enzymes, vitamin D3, cheese culture.”

What is milk protein concentrate anyway and why does color need to be added?  What color would these things be if they didn’t change it?

Velveeta is even better.  According to another Wikipeda article about Velveeta “In 2002, the FDA warned Kraft that Velveeta was being sold with packaging that described it as a ‘pasteurized processed cheese food,’ which the FDA claimed was false (’cheese food’ must contain at least 51% cheese). Velveeta is now sold as a ‘cheese product,’ using a term for items that contain less than 51% cheese.”

Cheese product?  Less than 51% cheese?  I sure am glad that the FDA has such standards as to ensure that something called cheese is more than half made of cheese.  It’s no wonder that all you have to do to make a product sound substandard is to paste the word American on the front of it.  Are we that stupid?  What is the matter with real food anyway?

I’m done…for now.