Wednesday, November 11, 2009

In App Purchases (Part 2)

And now that Apple allows IAP on free apps, the App Store will become even more "shareware-y".

Thursday, June 11, 2009

iPhone OS3

I think that when the iPhone OS3 drops, the App Store will be come a much less friendly place. Part of the beauty of its current incarnation is in its simplicity. You know what you're buying and how much you're paying for it. Once Apple allows in-game purchases, apps will start getting all annoying with nickel-and-dime upgrades on top of seemingly low app prices. "Sure you can get this awesome driving game for 99 cents! Oh, you want tires on that car? That'll be an in-game purchase of $3.99 please."

Get ready for the App Store to be a lot less fun to shop.

Tuesday, May 12, 2009

Correlated Subfeeds

RSS is one of those technologies that is amazing in its simplicity yet extremely versatile. I think of it of the Twitter of yesteryear. Nearly every blog and website exposes an RSS feed for easy consumption by RSS readers such as Google Reader and Newsgator. These tools allow you to easily see updates to several blogs, all in one place, without ever having to visit the multitudes of sites you may be subscribed to.

And therein lies the rub. A typical RSS subscription only brings in the posts of a blog, not the comments people have made on those posts. As Fred Wilson of AVC.com has said, often, the comments are just as, if not more valuable than the posts themselves. Its also difficult to join a community around a blog like Endgadget or Lifehacker when all you see are the blog posts themselves. Much of the sites' flavor and sense of community comes from the comments.

Google Reader offers the ability to comment on posts and even share thos comments with friends but those comments only live withing the Google Friend Connect universe (for now). Friendfeed tries to address this problem but can only be successful if all your commentors are using Friendfeed. Disqus.com makes it easier to follow comments on your own blog and helps you track comments that were made as replies to your own comments but still falls short when it comes to watching conversations in your favorite blogs.

What I'd love to see in RSS is "Correlated Subfeeds". Before you start Googling it, you should know that I just made up the term. It was inspired by Correlated Subqueries which derive part of their filtering clause from a parent query. In other words, allow every RSS feed to specify a subfeed that would take the unique post ID for any post in the feed, and insert into a new feed request for comments on that post.

For example: suppose I've defined a feed for this blog at http://izontech.com/rss/posts. My subfeed would be http://izontech.com/rss/comments/postid{0}. The {0} would then be replaced with the ID of each post. Readers that support this feature would be able to provide a tree view under each post that would show the comments belonging to each post. This would also make subcribing to a discussion forum much more intuitive. Instead of subscribing to a new thread feed and then to individual discussion feeds, we could just have one feed, "New Threads" and the discussions would be captured in the correlated subfeeds.

Perhaps the world has moved on from RSS and embraced newer technology. The real-time aspect of these alternatives is incredible attractive. However, RSS has been around for a long time and will continue to be for a while. Why not make it more useful?

Thursday, February 26, 2009

Power Copy-n-Paste

Have you ever copied something to your Windows clipboard and were ready to paste it when you realized you needed to copy and paste something else? Yep, you had to go copy and paste the new item, then go back to your original source and the copy and paste that again. What a hassle. Here's a little timesaver I've discovered. Don't copy and paste the new item - instead, select the new text with your cursor and the ctr+drag it to its new location (or just drag it for cut and paste). Then when you hit "paste" or ctrl+v - you're original text is still in the clipboard and gets pasted!
Reblog this post [with Zemanta]

Tuesday, February 17, 2009

Testing PayPal IPN

When working with PayPal as a payment provider, you'll inevitable wind up dealing with their Instant Payment Notification (or IPN). Its not always instant and not always payment related but is a notification.

An IPN is a simple HTTP form post that PayPal sends your server (to a url specified in your account settings or the "notify_url" parameter of the transaction) that provides information about the transaction that just took place. It contains information like item names and codes, price information, and the buyers shipping info. Because it is sent directly from PayPal's servers to yours without passing through the user's browser, it is much more secure and less susceptible to tampering.

However, when working behind a firewall or NATed router, PayPal's IPN has no way of reaching your development machine! Sure, you can forward a port to your PC but chances are, your port 80 is already being forwarded to a real web server (or you might not have access to the router).

To get around this problem, I built a simple ASP.Net page on our public facing test server (that has access to our internal network) that simply accepts the post from PayPal and reposts it to my development machine. The code is very simple:


_internalURL = "http://mydevmachineurlhere";

string postData = "a=" + "a";
for (int i = 0; i < Request.Form.Count; i++) {
postData += "&" + Request.Form.AllKeys[i] + "=" + Request.Form[Request.Form.AllKeys[i]];
}

encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(postData);

// Prepare web request...
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(_internalURL); myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;
Stream newStream = myRequest.GetRequestStream();

// Send the data. newStream.Write(data, 0, data.Length);
newStream.Close();


As you can see, this page will redirect the POST to an internal URL of your choice. You can even get fancier and have the repost go to different URL's based on any parameter you want (e.g. "payer_email", "item_name" etc.) to facilitate testing for multiple developers - without having to mess with your firewall.
Reblog this post [with Zemanta]

Thursday, February 12, 2009

First!

How often do you get to do something first? I'm not talking about being the first to comment "First!" on a forum post or YouTube video or grabbing a hot new video game console at 5am. I mean true pioneering, creating technology that has not been created before. That's part of what I love about working at Aviary. We just launched our vector editor, Raven. It's the first web based vector editor out there. We may not have cured cancer but it still feels great! Way to go guys!

Tuesday, February 3, 2009

Computer Savvy-ness

Working in the computer field has taught me several things. One of the biggest lessons I've learned is that if your job description, company name or industry has the word "computer" or "internet" in it, friends and family assume you know the answer to all their computer problems and have the time (and desire) to fix their issues.

The truth is, computer savvy is not about having all the answers in your head. Sure, its gratifying when a stymied colleague ooh's and ah's when you pull a nugget about an Asus motherboard driver incompatibility out of thin air, but usually, 5 minutes on Google can come up with the same answer. Its more about the understanding that computers are not infallible machines and the patience to research, try and fail until the problem is solved. "Unsavvy" people are used to dealing with machines like blenders and power tools. These machines seldom fail in a way that the average layman can fix so an expectation of unwavering mechanical reliability is created. When these expectations are transferred over to computers (and cars to some extent), people develop an intolerance for anything other than normal operation. When computers do fail, whether its an OS or hardware issue, this intolerance will cause people to throw up their hands and call.... me.

The cycle of research, try and fail is not something magical that only computer savvy people can perform. It is the standard process of learning. Although it may be time consuming at first, the more you learn, the more you know. The more you know, the shorter the cycle is next time around. And there's always a next time, believe me - I know.

Thursday, January 29, 2009

Indispensable iPhone Apps

Everyone has a favorite app or two that they can't live without. This is my list of apps that I feel should be installed on "every" iPhone.

  1. Cydia - Jailbreak your iPhone to get this homebrew-ish installer. It is the gateway to all the "unapproved" apps and theme goodness. Unapproved does not mean bad or illegal; most of the apps below are totally legit, they just provide functionality that Apple does not make available through their SDK and by extension, the App Store.
  2. QuickGold - an iPhone adaptation of QuickSilver for the mac, this app converts your Home button into an all-inclusive search that encompasses apps, contacts, phone numbers and web history. This makes it really easy to launch apps with just 2 touches, even if they are 5 screens away (or buried in Categories, see blow). Available through Cydia.
  3. Categories - acts like folders for your iPhone. Instead of staring at 9 screens filled with 16 icons each, you group them behind a single icon labelled "Utilities". This keeps clutter to a minimum. You can still use QuickGold to launch commonly used apps instantly without drilling down through your categories so you get the best bang from your buck when using these to apps together. Also available through Cydia.
  4. SBSettings - allows easy access to toggles for Wifi, 3G and other settings to help extend your battery life. It's activated by a simple swipe across the top of your home screen so it's much more convenient (and takes up less real estate) than icon-launched apps with similar features. As a bonus, it also shows your iPhone's memory and disk usage. Get it through... you guessed it... Cydia.
  5. Clippy - a relatively new app that adds cut-n-paste buttons to your numerical keyboard. Lack of cut and paste has been an oft-lamented omission by Apple, and while Clippy doesn't allow, cutting from non-input fields (like Safari web pages), its still a huge step in the right direction. By now, you've probably guess where you can get it :).
  6. Installo.us - a controversial app that lets you install cracked apps. While I don't condone piracy at all, I've found this very useful for evaluating an app that I'm considering buying to see if it actually works correctly (so many App Store apps are simply crap and App Store reviews are unreliable). Their web site has instruction for adding the repository to Cydia (its http://cydia.hackulo.us). Once installed, this somewhat clunky app can browse or search through available apps and then lets you download and install the app you want (assuming you don't get broken links).
  7. Smart Dial (iTunes Link)- a 99 cent App Store application that brings some old-school and more mainstream behavior to the iPhone's dialer. In stead of browsing through Favorites to call your wife, you can assign her to a speed dial number so that holding down the number 2 will call her. I really missed this speed dial functionality when I first got my iPhone. It also lets you start typing a phone number and it will suggest contacts from your Contact List. You can even start typing the name (e.g. 764 for "Smi") and it will suggest contacts names Smith. Pretty cool. One caveat, it is an App Store app so it has to play by Apple's rules. That means it does not have access to Recently Called or Voicemail the way Apple's dialer does. It's still pretty awesome though.
Others may have their personal favorites but I tried to be objective here. These apps should be useful to everyone who has an iPhone. Do you have any favorites that make you iPhone even better than it already is?

Wednesday, January 28, 2009

I Like Technology

I like technology. I do. It has permeated every aspect of my day and life; whether its writing code and playing with servers at work or mucking with VoIP and Windows MCE at home. I'd like to share some of my thoughts and findings and hopefully show you a cool thing or two.

Quick background: I work for Aviary, a small startup that is doing amazing things with Flex and Flash. We also run Worth1000.com, a really cool Photoshop contest site. Check it out if you're bored and have a few hours to spare. I'm a jack-of-all-trades maintaining the internal network, test and staging environments, production environments and writing/managing server-side code. I don't have as much time for "fun" tech like I used to but I still try to keep up to date.