pwlk blog Journaling since 2007

30May/110

Five Traits of the Perfect App

I spend a lot of time thinking about the perfect app. I haven't come up with the answer to the perfect app, but I have decided on some key criteria that the perfect app must possess.

The perfect app must...

  1. Be social.  I go back and forth on whether the social aspect of the app is mandatory for the user or not.  Either way has it's benefits.  When dial up started to disappear, the thing on everyone's minds was constant connectivity.  People didn't want to wait for beeps and blurps to hear they have mail, they wanted to open up the computer and be ready to go.  That happened and the world is better because of it.  Now the transition is towards smart phones where the constant connectivity extends to instant constant connectivity.  Instead of opening up the computer and being ready to go, now these wonderful things called notifications let you know when things are happening.  And with this instant constant connectivity, people want to stay up to date with what their virtual and real world friends are doing.  Even if the social aspect of the app is not person to person, but instead analytics of all users of the app, people want to be a part of something larger than themselves.
  2. Be fast.  This one should be pretty obvious.  The app needs to be fast, speedy, and be done loading before you open it is even open.  Simple?  eh...  The best example I have of an awesome app gone askew because of load times is Smule's Magic Piano.  I love this app.  I would recommend it to anyone.  But the load times are terrible.  Just to load the app, you sit staring at their splash screen for a while.  Then to load the song list you have to sit and wait for not only the song names to show up, but also your account balance to show up.  In order to play a single song, there are three separate wait times.  There has been a number of times I wanted to play a quick song but decided against it because I knew I'd have to wait for the app to load.
  3. Be quick.  This piggy backs on being fast.  When I say be quick I am talking about the whole user experience from loading the app to closing the app.  Load screens on being fast are only a part of being quick.  If I take my seat in a class, a meeting, the bathroom ... wherever ... I should be able to do something with the perfect app.  If I have 30 seconds or 30 minutes, the app should be available for a complete and full experience in that amount of time.  Now this is rather dependent on the content of the app.  There are some apps where this might be difficult.  A first persion shooter with long levels would be difficult to have a player get in and start destroying aliens for only 30 seconds.  But this is where the developer needs to get creative and offer short levels or some mini game that would be fun being played multiple times through and can be completed very quickly.  If it is a board game, the user should be able to take a turn quickly.  If it is a shopping app, the user should be able to look up and item and save it for later viewing.  A user that is familiar with the app should be able to start loading, use the content, and close the app within 30 seconds, one minute tops.
  4. Be fresh. The content in the perfect app must be constantly updated.  This is easy for social networking apps where the entire purpose is to see new content that is updated by your friends.  But for games or shopping apps, there must be new content to keep the experienced user interested.
  5. Be addictive.  Easier said than done, right?  The previous four notes tie into being addictive quite a bit.  The whole addictive factor means that the user has a positive experience with the mechanics of the app and they enjoy the content.  The perfect app must be addictive.  When a person gets on the bus for a trip downtown, they are going to pull out their phone and the first app they think of must be yours, the perfect app.

I really don't think there is just one perfect app, either.  I look at the iOS apps that I enjoy and sure they have their similar traits that I discussed above, but their content is completely different.  The keys is just finding the right balance between everything.  Be available when your user wants it, but don't be too intrusive.  Have content that your user finds interesting but don't flood them with too many new things at once.

I'll leave you with a list of apps that I consider extremely well done, some of which I have used for a very long time, some of which are new to my arsenal.  Thanks for reading.

  • YouTube
  • Pandora
  • NPR News
  • The Weather Channel
  • Evernote
  • What's On?
  • Facebook
  • Twitter
  • RedLaser
  • Angry Birds
  • Pocket Tanks
  • Flick Golf!
  • DoodleJump
  • Tiny Wings
  • CliffDiving
  • Stylish Spring
  • Super Stickman Golf
25Apr/110

San Antonio High Speed Internet

I couldn't find any really recent posts out there about shopping around for San Antonio high speed internet.  Soon, we will be moving into a house and internet is just one of those things that needs to get done FAST!

We don't need anything fancy, just internet that is decent speed and no phone or cable television (I think we might try AppleTV or GoogleTV with Netflix).

Here's the quick and dirty of what I found for my new area:

What I looked at

I researched three potential providers, AT&T DSL, TimeWarner RoadRunner, and Grande Communications.

Thoughts going in

I use AT&T for mobile phone already so thought it would be nice to bundle everything.  I quickly found out they don't offer DSL in my neighborhood (at least without phone service).

I have been with TimeWarner forever in Cincinnati and their customer service is some of the worst I have ever dealt with.  That in itself really makes me want to try a different provider.

Grande Communications was a new name to me but had read some positive reviews online.

Website use

You would think that a company that sells internet access would want their website to be very user friendly.  Eh... so much for that

AT&T website was terrible.  At first I thought I was on the right track after entering my address and saw I had the options between traditional DSL with up to 6 Mbps or UVerse with something in the 20's if I remember correctly.  But while continuing through the process it ended up trying to make me purchase a mobile phone ... WHAT?  I closed the page and started over only for it to tell me on entering my address once more that no DSL was available in my area.  Thanks...

Time Warner wasn't much better.  It seems like these website have 10 pages that look the same but take you in different directions.  On my first go I kept running into the website wanting me to log in.  I tried to, but apparently I don't have a login?  Maybe they deleted my account when I dropped their service in Cincinnati some 4 months ago?  They had a nice option to shop without logging in.  But once you try that it asks for name, phone and zip.  I provided and it said it couldn't locate my account.  Wait, I thought I didn't have to log in?  Grrr....  Eventually I created a new account only to find that I didn't have to sign in in the first place.

Grande Communications was a breeze.  Easy website to go through and easily understood prices and packages.  Yay!

Prices

AT&T - not offered in my area

Time Warner
$30: up to 10 Mbps
$40: up to 15 Mbps
$50: up to 20 Mbps
And the modem is included in all these prices

Grande
$28: up to 3 Mbps
$36: up to 8 Mbps
$46: up to 12 Mbps
$56: up to 16 Mbps
And the modem is NOT included in all these prices
I don't know anything about ESPN3.com but it is apparently included with these prices

Final thoughts

Well that's unfortunate.  Nothing compares to the big bad TimeWarner customer service nightmare company.  At least TimeWarner has customer service to call unlike some other big bad companies (Urban Active!!!!).  I would love to give Grande a try, but not at those prices.

Hopefully the prices I found aren't promotional to new customers even though I might be a new customer if they deleted me from the system.  If this helped you in a move to San Antonio, glad I could help.  But if anyone knows of another internet provider in the area that I didn't consider, let me know!

30Mar/110

One Big Social Network

The Internet is rather popular. Well duh...

What is interesting about the Internet being so popular is how people interact while on the Internet. There is this huge concept of social networks on the Internet. Facebook, Linkedin, Myspace ...

Today I came across a tweet from Google introducing their new +1 button. It basically sounds a lot like the Facebook "Like" button. You click +1 on webpages and when your connected friends search for similar topics, they can see that you recommended a specific page.

It is interesting that social networking on the Internet is attempting to turn all of the Internet into one big social network. And I really like the way it is becoming more passive. Sure I like scrolling through my Facebook mini-feed and seeing pictures from friend's vacations and status message updates, but a lot of the time I really don't care to see every single webpage that someone feels the need to share.

If a friend of mine finds a website for all things bread machine related, it doesn't do me much good when I'm not looking for a bread machine. But four months down the road when I'm looking to buy my wife a bread machine I would love to see that website that is most likely long forgotten. Instead of the Internet always telling me what pages it thinks I should go to, it should enhance my "surfing" experience.

People want the Internet to be a good resource for others. People like that social factor. Check out sites like Wikipedia, Trip Advisor, or even Bed Bath and Beyond. People enjoy keeping articles current or writing reviews for others to view.

Let's just hope Google +1 button gets off the ground better than Google's old promote button.

8Dec/100

Toshimote – iPhone remote for Linux media server

Welcome to Toshimote! Toshimote is a web application that I developed for use with an Ubuntu media server I have hooked up to my television. I was tired of using VNC to do something as simple as pause a video and Toshimote is the result.

If you would like to make visit my static apps page on Toshimote, head over to: http://www.pwlk.net/apps/toshimote

AND click here to view a hands on (non-working) demo of the site (best viewed from iPhone).

Resources

Overview

There are really two main parts to this project, (1) web applilcation and (2) server applications. All the website is doing is sending commands to the server to be executed with the TV as the display. Immediately below is a video demonstration I put together showing how this all works. It might be a good idea to give it a quick view so you have a mental image of what's going on when I go through the sections below.

Server

The very first item that needs to be mentioned is how you redirect output to the physical monitor attached to the server, in my case, the television. The global variable DISPLAY stores what display is being used. Typically the change to DISPLAY is so that you can execute X11 programs from the server on your local machine. But this time we want to redirect a little differently.

export DISPLAY=":0.0"

I believe this value is typically consistent, but you can double check on your server by seeing what the value of $DISPLAY is.

echo $DISPLAY

The server apps are extremely simple thanks to xte. Xte is an application that reads arguments to execute key strokes and mouse movements. All I did was write a shell script for each individual command I wanted to execute and stored the script in /usr/local/bin. Here are a few examples of some scripts I use.

#Ubuntu menu

#!/bin/bash

xte 'keydown Alt_L';
xte 'key F1';
xte 'keyup Alt_L'

#Move mouse to the left

#!/bin/bash

touch /home/jason/flags/mousemove.flag;
while [ -f /home/jason/flags/mousemove.flag ];do
xte 'mousermove -2 0'
done

#Stop mouse movement

#!/bin/bash

if [ -f /home/jason/flags/mousemove.flag ];then
rm -f /home/jason/flags/mousemove.flag
fi

Keep in mind that this is where lots of modification would need to be done. I opened up the keyboard shortcuts application in Ubuntu and used that as my resource for writing all the scripts.

The last thing that I'd like to mention about the server is in the Apache setup. I couldn't in a short amount of time get the web user (www-data) to either execute commands or change the DISPLAY value (I can't remember anymore). To solve this I took a step that will make most everyone cringe. I modified /etc/apache2/envvars and changed the login to the one and only real user of the box, 'jason'. You probably noticed that I had my flag for mouse movements hard coded to /home/jason. I know that ~ does not work but I never checked ${HOME}. As I am only developing this application for myself, I took the easy/lazy way out and rounded a few corners. As for security, I basically tossed it out the window. It doesn't take a genius to realize that they could do some serious damage to my files with this web app, but the site is hosted locally on the server that is behind the router. And if someone were to spend the time ... it is just my media server, nothing important is kept on that box.

Web App

The GUI is simple. A three column and infinite number of rows table. Oh yes I did. Tables are still alive and well in my world. Honestly this is the most perfect use of an HTML table that I've ever used. There really is nothing complex about the GUI.

AJAX is our friend in this app. We don't want the remote to reload every time we click a button. Especially when we use the mouse and have to click twice (once to start the movement of the mouse and once to stop the movement). When a button on the remote is clicked, the name of the script is sent through to a PHP script that executes that command. Yes, I know, as I said above, security nightmare. But that's really all there is to the web app side. Here are a few code snippets:

runScript.php

$com = $_REQUEST['com'];
$run_command='export DISPLAY=":0.0";'.${com};
exec($run_command);

Javascript function

function doCommand(command)
{
if (command=="xte_mouse_left_go" || command=="xte_mouse_right_go" || command=="xte_mouse_up_go" || command=="xte_mouse_down_go") {
// show the full screen banner that user clicks to stop mouse
document.getElementById("banner").style.visibility="visible";
document.getElementById("controls").style.visibility="collapse";
document.getElementById("banner").innerHTML="[less than]a href=\"#\" onClick=\"doCommand('xte_mouse_stop');\">Click to stop mouse[less than]/a>"
} else {
// hide the full screen banner that user clicks to stop mouse and show buttons
document.getElementById("banner").style.visibility="hidden";
document.getElementById("controls").style.visibility="visible";
}
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","runScript.php?com="+command,true);
xmlhttp.send();
}

Where next?

Realistically what I plan to do with Toshimote is to just add more buttons whenever the need arises. I will zip up all my code and post it on the site here as a resource to any that want to set up something similar. But for further development towards a public easy to use release, eh...

What should happen if I were to continue this project is mainly secure it up. I would make one single script that is the middle man between the web app and the actual commands being run on the server. It would take arguments and execute the proper script based on the arguments. That way, commands that aren't xte scripts couldn't be executed.

I would also put more effort into getting the default www-data user up and running and/or do a little more research on how things are suppose to be run on the server from the outside world.

Those are really the two main things that come to mind right off the bat. I'm sure I'll come up with many more things that I want the remote to be able to do while laying in bed trying to fall asleep, though. If you have anything that you'd like to see on the Toshimote, either contact me or leave a comment here.

13Apr/101

Browser Frustrations on OS X

I'm writing this post from my newest installed application on my Mac, Opera.  It is my last hope!

Some 2 1/2 years ago I made the switch from Windows to Mac and I haven't ever even teased the thought of going back.  But I have one major complaint about OS X, the Internet browsers are all terrible!  Maybe it is just me, but I'm pretty sure it isn't....

Mozilla Firefox

Not too much wrong, love the plugins and the community.  The killer is the load time!  I just opened up Firefox on my machine and the icon in the dock bounced a total of 47 times!  That is totally unacceptable.

Apple Safari

Safari on the other hand has a fantastic load time.  This is mainly the reason that I keep going back to it.  But the one major annoyance with it is its lack of ability to move on in loading a page after it gets stuck on an 'item'.  For example, I point the browser towards some page and the status bar starts going and tells me X of Y items loaded.  All appears to be fine, but then it just hangs.  The status bar will say something like 67 of 72 items loaded (3 errors) and it will just wait there.  Below is a screen shot of the status bar from a tab that has Google Reader.  The tab has been open for over a 1/2 hour and just sits there.  Some images on the page won't load because they are one of the remaining items left to load.  I know the images work because I am able to right click and view the image in a new tab.  Also when I try and load the page in Firefox, everything works fine.

Opera

I haven't played around with it too much yet, but it seems like the page loads are fairly slow.  Also the load time of the application was pretty slow.  This might be cause it hasn't been used too much and is still working on starting up the application efficiently.  But it is my last hope.  I'm intrigued by the Opera Turbo, but I'm skeptical of the whole application because it is not nearly as mainstream as Firefox or Safari.

If anyone else has had these issues and has a fix, I would be amazing if you could help me out.  Computers are so frustrating sometimes.