Programming My Life Rotating Header Image

Mint Sucks Redux

After writing about Mint, I decided to give it a second chance to impress me.  While I maintain that software should be intuitive (e.g. I should be able to change categories of purchases easily, anywhere), I gave in and used the method Mint seems to be forcing me toward;  I used the ‘transactions’ tab to go through my purchases from the last six months to re-categorize any mistakes.

Now that my purchases are categorized appropriately for my budget, I would like to analyze my spending for those six months.  When it comes to my spending habits, I can compare my purchases this month to last month by category. This is mildly interesting, but month-to-month it is easy to have large (or unusually small) expenditures in a given category throw things off.  I really need to look at my average spending over a longer time scale to determine whether I am over or underestimating my spending in specific categories.

One way to do this is to look at the ‘This Year’ tab on the Trends page.  However, this only shows categories, not subcategories.   This means I can see how much I spent on food but not how much I spent on restaurants vs. groceries.  This provides very little insight.  While doing this, I saw that my spending in the automobile category seemed a bit high.  I wanted to click through to see what I had spent so much on for my car, but I am unable to.  Unacceptable.

The only way I was able to look into my spending in subcategories was to go through each month and perform the arithmetic myself to average my spending. Worse than not being able to do this fundamental budgeting task is the fact that I can’t seem to determine what statistics I should look at to see where I can improve my budget.  I’ve tried clicking around the Trends page and seeing if any of the provided statistics give me any insight into my finances, but none of them do.

I’ve noticed a couple of other minor problems since my last Mint article like the inability to spread a lump sum payment over several months; my gym membership is done by semester, though I’d like to divide it up monthly.  Also, it would be great if Mint would ‘learn’ what categories a purchase should be in if I change it for several months in a row;  my ATM withdraws have Penn State in the name of the ATM and thus go into the ‘tuition’ category.  If these minor problems were all that existed, I would be writing a glowing review of how excellent Mint software is with a small addendum on features I’d like to see in the future.  But here we are.

I would like to address why we are here.  It was not my intention to write two articles disparaging Mint (or any other software).  In fact, when I began using Mint, my initial notes were quite positive.  I couldn’t wait to write a review of how great this software was and how it helped me fine tune my budget with little to no effort on my part.  That simply isn’t the case, though.  I will likely still use Mint to keep track of my spending, but I can’t see recommending it to anyone with such a lackluster interface.  When it comes to budgeting, there is too much work for the user to do to come up with meaningful statistics to consider Mint a tool for quick, easy budgeting.

A Non-Apology

I’ve heard a few bloggers advise against repeatedly apologizing for lulls in posting.  If I were to have apologized each time I lapsed on this blog, it might be filled with nearly as many apologies as topical posts.  Consequently, I’m not going to apologize here for taking a month off, but I am going to give you the primary reason for my absence:

The World Cup trophy. Source at link.

I’ll provide a link to the picture of Larissa Riquelme of Paraguay for work safety (no nudity, just a lot of cleavage):  http://inapcache.boston.com/universal/site_graphics/blogs/bigpicture/worldcup_06_25/w18_24042095.jpg

She claimed she would pose nude if Paraguay won.

The other person we would have seen naked had his team won: Diego Maradona. Source at image link.

There are far too many story lines from the tournament to list here, but there are several stories well told in pictures from The Boston Globe’s galleries here, here, here, and here.  All images below are from these galleries.

This flag representing the host nation as well as all others in the tournament.

Certainly the best moment of the tournament for any fan of the US team.

Just one of many controversial decisions by the officials, this picture is of the goal never given to England in their match with Germany.

I've never seen as many angry Brazilians as I did in this game. One of the biggest upsets of the competition.

The only perfect record from the tournament came from Paul the octopus who went 8/8 in predictions.

The goal that won it all. This was the latest first goal in World Cup Final history.

The champions: Spain.

I can't imagine how great this must have been from inside the stadium.

I didn’t give any real consideration to traveling to South Africa until after the tournament began.  I’m going to start looking into how I can go to Brazil for 2014 in the next couple of years.

I should be back to my approximately weekly posting schedule for the foreseeable future.

Seeing is Believing: Why Prototyping is Worth the Time

This week I was joined by a former colleague who previously helped work on a story-based course similar to the one we are trying to design.  The previous course had no game elements and was targeted at the general university student rather than at the middle school level, but the design of the art and story could be similar for these two projects.  While we had a few ideas for the story and individual game segments prior to his arrival, bringing him in really jump-started the project and helped flesh out many ideas for the story and gameplay.  More important than the help of another person, though, was seeing prototypes for ideas that we had previously only talked about.

The first example of this came when my colleague decided to mock-up a martian landscape.  We had been discussing using a martian landscape with a space station as the main setting for weeks.  Seeing the basic landscape allowed me to consider the finer details of the scene instead of just the big picture.  It also assured that the picture in everyone’s mind for this space station was nearly identical, rather than the unlimited possibilities we leave open by simply discussing it and not having any visual representation.

The second major breakthrough came when I was able to convince my boss that having controllable 3D characters was a perfectly reasonable possibility for this game.  At one point, we were debating having much of the story happen through comic strip-like interludes with text possibly supplemented by movies.  But with Unity, I found it was not much of a challenge to put together a control and camera scheme for any 3D model that we have.   I thought perhaps my boss was simply more fond of the movies/comic idea than having controllable characters until I showed her a demo with a controllable character having a discussion with an NPC (non-playable character).  She then informed me that she previously was concerned that controllable characters would have taken more time than we would be able to allocate.

Giving visual representation to ideas can serve two purposes in software design (games or otherwise):

1.  It gives your team a unified representation of the visual object you are discussing.

2.  It proves that the idea can be put into action.

In creating the dialogue between the playable character and the NPC, I presented a basic paragraph about Mars (borrowed from the wiki entry), then presented the user with a question and the ability to offer 3 answers, each with its own response from the NPC.  While the code for this would be quite inefficient for a larger dialogue, I have proven that dialogue between characters can be done in a short time. While I’ll need to tackle the dialogue problem in the near future, this prototype demonstrated to my boss that player controllable characters can be used to do nearly anything we require in order to convey the story.  With only a few hours of work, I was able to settle a debate we had been having for months.  Even if this wasn’t what we wanted, having this decided for only a few hours of work is certainly worth the small investment.

Software: Mint

I love the idea of Mint.com.  I love that their business model is based on anonymous user data. A one stop shop for all of my financial accounts is an amazing convenience for me;  I have five financial institutions whose online services I use.  Finally, having a product that allows me to plan a monthly budget and keeps track of how well I stick to that budget is amazing.  The idea of Mint is great.  Unfortunately, the execution couldn’t be more disappointing.

Mint has been around since 2006, and in November of 2009 it was acquired by Intuit, the makers of Quicken and Turbo Tax according to Wikipedia. I would expect most of Mint’s major functionality issues to be ironed out after four years of development time and now having Intuit’s design experience. In the 5 months that I have had my account, they have not.

One problem I can easily forgive is Mint’s inability to correctly categorize all of my transactions.  Fine, I get it, you don’t know every retailer and what they do.  Even if you did, what if I wanted to categorize things a different way?  This is not a problem.  What is a problem, though, is how I am supposed to categorize purchases.  While I could keep up with every transaction I make in the Transactions tab, I much prefer to check my spending at the end of each month and make changes there.

To do this, I must click the ‘Planning’ tab, go into a preset category (or the default ‘Everything Else’ category) and see individual purchases in each.  Up to this point I have no problems.  Now I re-categorize something.  Great.  Next, I want to go back and check what that purchase was under ‘Shopping’ that seemed like it might need changed to a more specific category.  Where do I go?  I have to go back to the ‘Planning’ tab, go back into the month I was correcting (the default is the current month, and I am usually correcting the previous month), reopen the category I want to see, and finally check the transactions for that subcategory.  After four or five corrections, it becomes apparent just how awful this interface is.

I want to be clear here that I am not an interface designer.  I’ve been doing some minor interface design for work recently, and it has made me realize just how tedious it can be (should I move this text box 5 pixels left? up?) and how much work goes into making it so the user never thinks about it.  It isn’t a flashy job.  Rarely does someone say ‘you know, the placement on that text box was so perfect.’  More likely it will be ‘Oh yes, that was easy to use, but I don’t know why.’  With that out of the way, this is not a minor interface gripe where I think a box should have been moved or something should have been presented in a different way.  When I go into the ‘Planning’ tab, open a category (or categories), then click through to a specific subcategory to change a transaction, there absolutely needs to be a button that brings me back exactly to where I was.

For a simple example of how this design can ruin a project, imagine if Facebook had a similarly designed interface.  I click on Jack’s profile and want to see what his favorite bands are, so I go to his info.  Now I want to see his wall.  The correct design allows me to simply click that tab and go there.  However, with a design analogous to Mint, I would have to go back to my list of friends and find Jack again before I was able to check a different section of his profile.  As much as I might love to waste time on Facebook, I prefer to do so efficiently.

There are other problems I have with Mint (both major and minor), including the lack of a running tally for my accounts, but these pale in comparison to the clunky interface.  Software is meant to be designed so that users can’t get it wrong.  Mint just doesn’t have the ease of use that would make its product great.  For now, I’ll continue going to my individual financial institution sites until Mint can clean up its act.

Google Pac Man

As many of you probably already know, yesterday Google changed their logo to a playable Pac Man game in honor of the 30th anniversary of the game.  A few members of StackOverflow put together the code and assets to allow others (like me) to host it on their own site or even locally. Here is the game:

Google Pacman

And here are the assets if you want to host it locally:

Google Pacman at GitHub

Unity

Currently, my job is to create a game to teach astronomy to middle school students. Luckily for me, there is an abundance of options for game engines to help me ranging from the simple and free (Scratch and Alice) to the expensive and complex (Unreal, etc). For our project we wanted an engine deep enough to cover multiple game types in one game that was reasonably priced.  After debating over the 2D vs. 3D issue, I decided 3D might be too complex for the style of game we wanted to create.  However, after prototyping a few game ideas in several different engines, we settled on Unity for its flexibility and affordability (free for the indie version $1200 for the pro version).  Even though it is primarily a 3D engine, 2D games can be made without much trouble.

In order to get familiar with the Unity engine, I followed two tutorials I found in the Unity forums. The first was a basic shmup.

The second tutorial was a redux (in C#)  of the first plus an extension that included models for the ship and asteroid.  While I followed along with this tutorial, I decided to keep everything in JavaScript.  This helped me to clarify some of the elements of the Unity engine independent of language.

After completing the tutorials, I decided to extend the game a bit to include bombs, more asteroids and large asteroids.  As of this writing, I haven’t made final decisions for how to complete the game (whether it will be a score the player must or a set time limit), but the current version can be found here:

http://programmingmylife.com/spaceShooter/spaceShooter.html

Unity makes the process of uploading any game you build in the engine to a website incredibly easy.  When making a build of a game you simply have to use the following settings:

File >  Build settings > web player      (make sure to include all scenes)

When you build the game it will create a *.unity and a *.html file (the * represents the name of the game that you set).  Assuming your web host knows what to do with the .unity file, you can simply upload the two files and the game will run at that web location.  If, like me, your web host doesn’t support the .unity file format you will simply need to include in the directory with the .unity and .html file the following in a file called web.config:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>
    <system.webServer>

        <staticContent>
            <mimeMap fileExtension=".unity3d" mimeType="application/vnd.unity" />

     </staticContent>
    </system.webServer>

</configuration> 

I was able to find these instructions from this query at Unity Answers.  Unity Answers is a great service that runs in addition to the Unity forums.  These two complementary services along with the users give Unity a strong community that should allow users from novice to advanced to find answers to any problems they might have.

How to Set up androidVNC with TightVNC and a Linksys WRT54G Router (Windows)

Have you ever gotten to work and realized you forgot to start the download for that movie that just released today?  Or maybe Steam is having a sale and you want the game downloaded before you get home so you don’t have to wait to play.  VNC clients allow you to do just that, and now you can do it from anywhere with an Android device and a data plan (or on Wifi).

In the past week since I bought my Droid Incredible, I have been scouring the internet and asking friends to suggest their favorite apps.  Nearly all of the apps have been easy to install and use, save for one.  AndroidVNC requires a small amount of setup by the user (especially if your home network is not configured for outside VNC access). I wanted to create this post because while this isn’t a complicated process, I wasn’t able to find a set of instructions with all the steps in one place.

I intend to make ‘How to’ posts for any software or hardware project I do that requires me to use multiple sources to finish.  This will hopefully serve to help others that use similar configurations in the future and to remain as a record of what I’ve done for my own reference.

NB:  If you are trying to do this with a different router, you should determine how to forward the ports (5900, 5800, 5500) on your router, then skip to step 2.

Step 1:

To begin, we need to setup port forwarding on our WRT54G router.  First, you will need to enter the setup page for your router. The default address for this page is 192.168.1.1 which you can simply enter into your browser address bar.  If this doesn’t work, you likely either have a dynamic IP (here is how to set up a static IP), or your router’s IP address has been set to a different address and you will need to go there instead.  Upon entering the settings page, you should be asked for a username and password.  The defaults here are to leave username blank and enter the password ‘admin’ without the single quotes. I do suggest changing these to include a real username and a non-dictionary word password for better home netowrk security.

Now that you are logged in to your router settings page, you need to click the security tab and uncheck the ‘Block Anonymous Internet Requests’ box seen here:

After you have done that, be sure to click the ‘Save Settings’ button at the bottom of the page.

Before we can forward our ports, we need to know what the local address of the PC is.  You will need to open the ‘Run’ box of your operating system.  In Windows 7 and Vista, just type run into the search box in the start menu.  For XP, click the run button in the start menu.  Type ‘cmd’ (again, without single quotes) into the box and hit enter.  In the window, type ‘ipconfig’ (no quotes), hit enter, and look for the value next to IPv4 Address.  It should be of the form ‘192.168.1.XXX’.  Write this down.

Finally, we are ready to forward the ports!  Back in the WRT54G setup window, click the ‘Applications and Gaming’ tab.  Type the ports to forward as seen below, check the enable boxes (on the three lines you are changing), enter the last part of the IP address you found above in the IP address boxes, and hit the Save settings button again.  If done correctly, the settings should be on the page when it reloads.  If you do not enter an IP address into the box(es), the ports will not save and you will need to re-enter the information.

Step 2:  Finding your IP Address

This one is simple.  Simply click the following link:

What is my IP Adrress?

Look for the number after ‘Your IP Address is:’.  Write this down.

Step 3:  Setting up TightVNC

Go to the TightVNC website, and download the software.  Be sure to get the latest beta version if you are using Windows 7 or Windows Vista.  Now, install the software using the default settings. During the installation, TightVNC should ask you for an administration and primary password.  Be sure to set these up now and write them down.  Now that TightVNC is set up, go to the start menu and run TightVNC Server.  Run application mode if you want the service to end on log out (if you have multiple users on your system or if you have safety concerns).  Otherwise, either application mode or running as a service should be fine.

Step 4:  Setting up AndroidVNC on the Device

First, download the AndroidVNC program from the Android Marketplace, or scan the following QR code:

Open the program, leave the ‘Nickname’ field blank, enter the primary password that you created for TightVNC (not the administrative password, if you made them different), and enter your IP Address from step 2.  Click connect and you should be able to control your PC from your Android device!

Incredible

Last week, I decided to jump on board the Android bus and bought the HTC Droid Incredible. I haven’t had it long enough to give a full review, but I’d like to give a review of my first experiences with my own smart phone (I have played with other smart phones, but having one all the time for a few days is a different experience than playing with one even for an extended period).

Technically, my first smart phone was the LG Vu. I returned it within the 30 day return period because 1. I couldn’t justify the extra expense of the data plan 2. The internet and phone in general were sluggish and 3. The apps that currently make smart phones much more enticing were nearly nonexistent. The Vu was mostly just a touchscreen version of the LG Shine (which is the phone I ended up going with).

The Incredible’s 1 GHz Snapdragon processor along with the relative maturity of the Android App Marketplace take care of the latter two concerns. I have not yet felt as though the phone was slow to do anything. Snapping through the home screens and getting into apps are a breeze thanks to the processor. So far, most of the apps seem interesting, but I haven’t had reasons to use them naturally. I’ve opened them up and looked around, but I haven’t wanted movie times because I was going to a movie or looked for a specific youtube video using the app for example. I’ll get around to discussing those things when I’ve had a better chance to interact with those apps organically.

What I have had much more interaction with thus far are the widgets. These alone have nearly justified my purchase. The home screen widget from HTC gives me a large display of the time and the weather, which I would hardly ever check before I had this phone. I also have a habit of not checking my Google Calendar nearly as much as I’d like to remember important dates and events. I have been checking it more often now that it is more easily accessible, and I think I will be using my it more often now that I don’t have to go out of my way to see it.

The Scoreboard widget has also helped me out already. Friday night I had a bit of time to kill before leaving to meet some friends, and the widget reminded me that a hockey game was on that I wanted to see. Without that, I would have likely forgot and done something else. It is a quick and convenient place to check when my favorite teams are playing next.  It also send notifications for score updates for my favorite teams.

Also, during dinner Friday night I was able to use the internet to come up with some trivia my friends and I were debating (did you know John Milius directed Conan?).

The Facebook widget hasn’t really done much to change how I view Facebook. It scrolls through some of the most recent status updates, but if I really want to check Facebook, I will always open the full app to scroll faster.  The same goes for Twitter.

Another big upside to having a smart phone with a data plan is being able to take advantage of Google Voice.  One way to justify the extra expense of the data plan is using Google Voice to manage text messages.  While you can’t send to multiple recipients or send MMS messages, all regular texts are free and get sent to the Google Voice app.  The only difference between checking a regular text and one through Google Voice is which button you click to open the message.  Depending how much you pay for texts each month, this alone could justify the price of the data plan.  Additionally, I can’t stand that carriers see fit to charge for texts with a data plan.  There is nothing special about the data in a text.  It is simply a packet of data of predefined size that your wireless carrier charges you a special rate for because they can.  There are other advantages to Google Voice, but sticking it to the man is the one that matters most to me.

So while I am still getting used to having a phone capable of all this (as well as getting used to a touchscreen keyboard), I can’t see myself going back to a ‘dumbphone’.  I’ll get into any problems I run into with the phone in a post in the near future, but for now, I can’t come up with anything negative about this phone: it’s just too incredible.

Blog Chronology

I was recently approached about programming a small app for Android.  I have been following Android’s development for a while and decided this was a great opportunity to dive in and start seeing what I could do without an Android device.  I haven’t done much in the way of programming for Android yet, but I’ll be sure to update when I do.  In my search for information about how to get started with development for Android, I came across the Replica Island blog*.

While some blogs may have outdated early postings (who will care what I thought about Windows 7 when Windows 10 is out?), a blog devoted to one project, such as the Replica Island blog, is better read chronologically.  I appreciate the default layout of placing the newest posts first for most blogs; it makes sense for the vast majority of visitors to a site.  However, I haven’t seen any blogging site or software that gives the reader an option to reverse the posts and place them in chronological order easily on the main page.

In the case of a specific project blog, this is really the only order that makes sense.  When I came across the Replica Island blog, I wasn’t concerned with the newest post because I wanted to read about the entire project from the beginning.

In addition to blogs devoted to a single project, I have had to emulate this feature for other blogs I enjoy reading.  Before starting this blog, I decided to see how some of the bloggers I enjoy reading started off (Joel Spolsky, Jeff Atwood, Scott Hanselman).  As with this blog, each of those have a front page featuring all of the posts in reverse chronological order.  Instead of clicking a link that puts the posts in chronological order, I had to find the first post and work from there.

*For those interested in more about Replica Island, also see this video.

Browser Tab Stagnation

In the same way that it would be hard for me to imagine life without a cell phone, I can’t imagine going back to browsers without tabs.  Tabs allow me to organize my browsing more efficiently.  In fact, I currently have 17 tabs open in just this browser (12 in my other browser).  However, since being introduced to Firefox a few years ago (and Chrome more recently), I have not seen tabs change in a way to allow for more efficient sharing of information or to allow for more control over my browser’s state.

Specifically, I would like to see a browser allow the user to group tabs for two specific purposes.  First, when I am taking a break at work and decide to look at a few sites, or even if I am waiting for something at the end of the day and find a few stories just before leaving, I just copy and paste the URLs and email the to myself.  It would be significantly more efficient if I could group those tabs and have the browser take care of the URLs for me in a small file I could email myself.

Second, if a colleague wants me to provide some background on a subject (or vice versa), I typically do exactly what I do for myself: open several tabs, then copy and paste the URLs into an email or IM.  It would be nice if I could send a file that opened the URLs in his browser so that he could see all of the links rather than opening them individually.

It would also be great if I could break a set of tabs into a named group.  Currently, I have 4 Chrome windows open because I want to separate articles into specific groups so that I’m not jumping from one focus to another between articles.  I am realizing in my ‘computing articles’ window that it is quickly being divided into articles about computing technology and articles that instruct me on something I want to do (overclock my GPU, make a hackintosh, etc.).  So now I’m looking at potentially more windows.  It would be great if I could save all of these tabs into one file that would open them all.

Some may quip that bookmarks serve the purposes I am asking for, but beyond these smaller quibbles that can be solved with some copying and pasting lies a much larger issue I have with the current state of tabbed browsing: saving the state of my tabs is handled autonomously leaving me to guess at the saved state of my tabs.

Chrome’s greatest advantage (tabs as there own processes) is its greatest weakness here.  In order to restart the browser and get all of my tabs back, I need to ensure that all of my tabs are in one window and that I shut down that window.  The same goes for Firefox.

This week while troubleshooting an unrelated problem, my network admin closed my Firefox window and opened a new one,  leaving my previous save state (and all 732 tabs I had open) to vanish into the ether.  By allowing me to save and store tabs, I would never have to worry about him or anyone else (including myself) doing this.

Productivity software (Word, Excel, etc), games, even podcasts in iTunes all offer both manual and automatic save states.  Why can’t browsers?