SABconnect++

Along with my Gmail Contact Formatter (which is temporarily on hold for this project), I am working on another project called SABconnect++ (Link to the Chrome Web Store page). For those not familiar with this extension, it’s simply a convenient interface to SABnzbd+ from Google Chrome (SABnzbd+ is a web application written in Python that handles downloads from binary newsgroups).

I use the Google Chrome extension extensively, and as I used it more I noticed that development on the project was starting to go stale. My motivation to work on this project started with the fact that there was a memory leak that occurred over time in the extension that would eventually cause it to crash. The cause of this memory leak is due to an architectural issue in the Google Chrome Extension API. To summarize, there are parts of the API that allow message passing between content scripts (scripts that live only in a web page, provided by the extension) and the background page (the main “hidden” page in an extension that has is always open so long as the extension is enabled). This API, when used to pass messages between two scripts in the same background page, causes a memory leak. Naturally like other Extension APIs are designed, this scenario should not be so subtle, as normally the browser will not allow the message passing to even occur. Needless to say, the amount of memory leaked was significant, especially since this message passing was happening several times each second.

My first goal was to fix the bug issue and adjust the architecture of the extension to provide for the fix (the design of the extension relied heavily on this broken message passing usage). Once I fixed that, I quickly began implementing several other features:

  • A new settings page, which utilizes a javascript API named fancy-settings to implement a settings page for SABconnect++ that closely resembles the settings page for Google Chrome.
  • A context menu, which provides a sort of “stop-gap” solution to cases where users cannot send NZB URLs to SABnzbd because that provider (indexer site) is not supported by the extension.
  • Real-time updates to content scripts when the user changes options in the settings page (this previously required a page refresh).

My future plans for the extension:

  • Complete redesign of the popup
  • Do some R&D work on the experimental WebRequest API in Google Chrome to intercept NZB download responses from the server & forward that to SABnzbd (this eliminates any DOM injection we currently do to support specific providers).

As it currently stands, I am working in collaboration with 2 other developers on this project (they are the two devs that already were on the project when I joined). However, they no longer have the time to contribute to the project so I am the only active developer for the extension.

There is a link to the project page for SABconnect++ in this post and also in the main navigation menu system at the top of my site. Go check it out, install it, and enjoy!

Gmail Contact Formatter

I have a ton of Gmail contacts and all of the contact data, especially phone numbers, is inconsistently formatted. I wasn’t able to find a Chrome extension that provided the ability to consistently format Gmail contacts, so I decided to write my own. This will also give me some good web development experience.

I’ve updated the “My Work” menu to show my latest project, Gmail Contact Formatter. This is a Google Chrome extension that will consistently format your Gmail contacts’ data, such as phone numbers. At the time of this writing, I have not been working on this extension long and isn’t functional yet. However, there is code to be shown that demonstrates my web development capabilities as they apply to Chrome extensions.

My first goal is to get something basic, with very little interface, that will format phone numbers for contacts. I’ll grow it into something more aesthetically pleasing with more advanced functionality as I go. I’ll post more updates as progress further into the project.

New Portfolio: Sortable Table

In preparation for an interview with Microsoft, I wanted to expand my technical skill set even further by learning HTML, Javascript, and CSS (I already knew a lot about CSS already). Since I learn best by doing hands-on activities, I started working on my own small little website. This website has a simple table in it that is procedurally filled with content via Javascript. My scripts generate a bunch of random numbers in an array and generate table rows from the data in that array. After table generation, I allow the table to be sortable on a per-column basis using a jQuery plugin (Why reinvent the wheel, right?).

I’ve spent about 2-3 days working on this and so far I feel like I understand Javascript very well. How did I pick up on it so quickly? Well, I already know C++ and Python, and Javascript feels like a mix between the two. The only reason why I compare Javascript to Python is because Javascript is dynamically typed as Python is. Syntactically, Javascript is very close to C++ (But probably more like C, since the way you implement classes in Javascript feels very C-like).

Someone at Microsoft once told me that it seems like once you master C++, picking up other languages is a breeze. I can relate to this!

I welcome everyone to check out my new portfolio. You can also navigate to it via my menu system at the top of my website. Thanks and please leave me any suggestions or comments if you have any at all!

Also on another unrelated note, my aforementioned SQL Server portfolio hasn’t been forgotten. I am still in the process of figuring out how to properly distribute it. Hopefully I will add that portfolio to my website very soon as well.

Learning SQL

This past week or two, I’ve been working on a small project to help me learn SQL, specifically SQL Server 2008. This application is a task management application written in C# .NET as a Winforms project. The kind of task management we’re talking about here is something a programmer might use to keep track of what they’re working on and how many hours it took.

So far I have to say SQL has been trivial. In as little as two days I’ve mastered database concepts and designs, SQL syntax, .NET System.Data.Sql interfaces, and the following features of SQL:

  • SQL commands: Select, Where, Insert, etc.
  • Table Joins (Inner, Left, Right, Full)
  • Stored Procedures
  • Table Constraints
  • Primary Keys
  • Foreign Keys

Right now the only thing I have to figure out is how to package and distribute my application so I can place it on my website under my Portfolios section. My application will need to create the appropriate tables and columns, as well as create the stored procedures and constraints required. Once I get this figured out, it most certainly will be available for downloading! For now, please admire the screenshots of this very simple application below.

Video Games Live in Dallas

This last weekend my wife, a few old coworkers, and myself went to go see Video Games Live in Dallas. I had never seen them before, although I had heard about them on multiple occasions. Personally I think the show is pretty amazing. The Dallas Symphony Orchestra did a very good job (it was also my first time to hear them play as well). Below are some photos I took of the concert as it was starting. Unfortunately my iPhone 3Gs camera isn’t that great, so the pictures look quite terrible.

They played music from well-known classic games such as Super Mario Bros., Zelda, and Tetris. They also had a few tunes from Warcraft. The last half of the show was a bit more progressive, as a guitarist joined in with the orchestra. I would gladly pay to see Video Games Live again, especially since they play different video game themes at each show.

Resume moved to Google Docs

I edit my resume from multiple locations sometimes, so it makes sense for me to have my resume on Google Docs. Not only did I move my resume to Google Docs, but I also chopped it up a lot. My work history was a mess. I had entirely too much text there. Some sections under work history were 30+ lines long, and I’ve shrunk them down to 3-5 lines. My skill list no longer uses a fancy table, it’s just a very direct list of skills.

If you haven’t seen my resume in a while, please check it out. The “Download resume” button that used to be on the right side of my blog has been removed. A “Resume” link has been added to the top menu bar, however. This will redirect you to the public view of my resume.

League of Legends

I remember back in the old days when I used to play Warcraft III. I was never really into the official gameplay of Warcraft III, however I was a big map developer/programmer. I made a lot of my own custom maps and played many that others had made. One particular type of map type in Warcraft that I liked was called Defense of the Ancients (DotA). The basic objective of the game is to destroy the opposing team’s main fortress or building, which is protected by minions that are constantly spawning and smaller defensive towers. Each player controls a hero type character that gains experience from killing minions and other heros. As you gain levels, you can purchase items to make your hero stronger.

Unfortunately I haven’t played Warcraft III in a very long time, but I recently found out about a game called League of Legends, which is a DotA remake. It has a very similar theme to Warcraft III and plays basically the same. It’s a very well made game and is pretty simple to learn and play. Another good (and somewhat unrelated) point about League of Legends is that it is easy to mediate your play time, which is much harder to do in an MMORPG. That means it doesn’t completely drain away all of my free time!

Added Work History to Resume

Well, my resume before was pretty empty and I thought it was time for an update. My old resume didn’t show any work history past January of 2009, however that is no longer the case. Two new companies have been added my work history:

  • Escalation Studios - This is currently where I work (as of this posting).
  • Red Sword Studios – An iPhone/iPad game development company that was formed in January of 2009 and I guess you could technically call me one of the “Founders”, although I no longer contribute work there.

So I haven’t been just sitting around for the past 17 months :)

Quitting Aion

Well, it’s been a fun ride, but the day has finally come where I quit Aion. While leveling up was fun, the game got extremely boring as far as end-game content goes. Additionally, if I’m playing Aion all the time I won’t have time for more important things in life, such as programming. I really need to start working on a project. So far I haven’t been very dedicated to the programming aspect of life because Aion used up most of my free time.

The one thing I’m going to miss about Aion is my legion, Marked Souls. They’re a great bunch of guys & gals. I look forward to reuniting with them in the next MMO I might play (TERA Online anybody?). Farewell, NCsoft!

Logitech Illuminated Keyboard

I guess you could call me a Logitech fan boy. I really love Logitech. They’ve always made peripherals that I’ve been impressed with. For many years I’ve been typing on a G15 (The older G15 with 18 macro keys, not the newer edition) or G11 keyboard. I’ve always loved the way they functioned and how smooth typing felt.

Logitech Illuminated Keyboard

At my new programming job I had to work on an iMac for the first few weeks. While I don’t like Macs that much, I do love the Apple keyboard. It has the feel of a laptop keyboard. Really, I think I loved it way too much because now I can’t go back to a G15/G11 keyboard. Typing on it feels too “bulky”. The keys are huge in comparison. This basically started a hugekeyboard battle. I started buying a lot of keyboards, trying to find one that wasn’t made by apple but had the “slim” keys that felt super nice to type on. I eventually came across the Logitech Illuminated Keyboard.

Coming from a G15 keyboard which is loaded with extra non-standard keys (media keys, macro keys, etc), you’d think that this keyboard wouldn’t be advanced enough. The thing is, it doesn’t have to be. It has all the features I need:

  • Media Keys: Pause/Play, Next, Previous (It is missing a ‘Stop’ key, but I can live without it).
  • Numpad (Yes, this is important. The diNovo Edge does not have one).
  • Volume control keys (Up, Down, Mute).

I never really used the G15/G11 macro keys for anything important. I used them for a few things in Visual Studio, but I can live without them. Anyway, if anyone is looking for a great and inexpensive keyboard, the Logitech Illuminated Keyboard is for you.