May Release - "MGMT"

Earlier today, I pushed out our May release, which we codenamed "MGMT". This release represents quite a bit of backend work, which I'll go over below. There are a few frontend changes though:

  • Enabled high accuracy GPS. It might take a few seconds to acquire an accurate position, but this should solve the issue where people were several miles away from places and those places appeared close to them. This probably happened because those people were around tall buildings or indoors.

Okay, so just one change. :) The backend is probably of more interest to everyone, since a lot of work went into planning it and making it as close to perfect as possible. Besides basic stuff like tracking the latest version of GeoCouch and changing to a Rack app rather than a Rails app, we basically did an extensive rethink of our application. When developing the RestlessNapkin application, we designed it around what core functions we needed to accomplish our goal, but we left it open to be extensible in the MacroDeck Platform. The idea was that we would get our app going, and figure out what we needed to do to get the "essence" of our application. Something that we could use to build other, different apps with if we wanted.

So, one step in doing this would be to actually code that core set of functionality. I came up with a Sinatra application, currently called MacroDeck App, that works with the MacroDeck Platform to:

  1. Figure out what objects are defined (right now, the platform needs this broken out into the app part, since our application's objects don't need to be in your application :) )
  2. Display those objects to the end user, and based on how fields are defined in the appropriate DataObjectDefinition, different things render differently. For example, a phone number will render as a telephone link, a URL will render as a URL, a geographical coordinate will render as a map (currently static but will be made dynamic), and a time will render as a time. There is room for improvement here.
  3. Allow people to edit those objects, and again depending on the settings of the object's DataObjectDefinition, a field might be a text area, a text field, a date/time picker, and so on. Lots of room for improvement here.
  4. Allow creating new objects in the same manner as editing them. Currently there's no support for telling the app what types of objects can be children of the object you want to create a child under, but that's planned. You wouldn't want to try to insert a country under a neighborhood - that doesn't make sense, and surely won't work! :)

And I should be sure to clarify that it does these things without the app knowing anything specific about the objects in the database, just how to render different fields. There's lots of room for improvement - and making more things customizable (right now HTML is generated in the objects that process the fields - which I called behaviors) is one of my priorities. But with the amount developed currently, it makes for a pretty useful admin interface:

(download)
I'm definitely not finished, but I think that these backend changes will lead to really cool stuff. At some point even, it might be possible to let the community develop additional features, since it would be a matter of just defining how the objects that need to be added relate to each other and behave.

What's planned next release? More content, and more backend changes. This time, it'll be something that you'll get to actually use.

January Release - "rn [heart]s 4sq"

Our fifth iteration of RestlessNapkin brings in some valuable content. The popular location-based "game" foursquare has some golden nuggets of data that most overlook.

I personally haven't checked into foursquare since the summer as I have countless badges that don't mean anything and it's pretty frigging hard to obtain new badges. I do however use foursquare every time I enter a restaurant to view the tips people leave. Tips are twitter length Yelp reviews. Yelpers generally write painfully long and detailed reviews about every second of their experience at a place when all I want is to scan the basics. A foursquare tip provides just that; I can glance at tips in a few seconds and extract the important stuff quickly.

Not only are we pulling these foursquare tips, but are displaying the number of tips at a place via the place lists. Now, you can see at a glance which places have the most tips before actually reading the tips. Surprisingly, this is something foursquare themselves don't provide.

Photo_1

When you filter, places are sorted to make it even easier to find the right place quickly.

Photo_2

December Release - "There you are"

Our tiny team of two has released our fourth iteration of RestlessNapkin since September called "There you are."  As you can guess, it is our entry into the geolocation world.  We wanted a feature that would show us what was immediately close to us without having to know what neighborhood we were in to filter by.  When you load up the places feed at http://restlessnapkin.com (button in the upper right hand corner) you will be prompted about whether you want to enable RestlessNapkin to check your geographic location.  Once you click 'ok' we find all locations within a mile and a half radius and return them to you sorted from closest to furthest away.

This feature can be very helpful when in a part of town that you're unfamiliar with, but also helps finding hidden spots nearby that you've overlooked.  I personally have found a new taco joint near my house and a quick and cheap Chinese place minutes from my office(i've lived in the same place for four years and worked at the same place for three).  As always, this feature works great on your desktop web browser as well as your mobile smartphone browsers.  Head over to http://restlessnapkin.com and click 'places' in the upper right hand corner to check it out and let us know what you think!

Filed under  //   Release  

What's Happening?

Hello everyone! I'd like to write and let you know that we pushed our latest release ("What's Happening?") to www.restlessnapkin.com. Some of the new features include:

  • Search using CouchDB-Lucene (C-L). Lucene is a search engine backend used by many different sites, including the new Twitter. CouchDB-Lucene integrates Lucene with our database server, CouchDB. We plan to have much more functionality built in to our search bar in the near future - it can do much more than we're currently doing.
  • Share links on place and happening pages so that you can share places and happenings with your friends. Currently, this happens via e-mail, but we'll likely open it up to SMS depending on device support.
  • Filtering in the happening feed. Now you can click on the happening type and see all happenings of that type, or the neighborhood and see all happenings in that neighborhood. We've tried to filter the list of neighborhoods down to what neighborhoods have happenings, but there are times when it'll still show a neighborhood that doesn't have any active happenings. We're working on that.
  • Feed items no longer get cut off. This results in a zero net change for the majority of happenings and places, but for the places and happenings that have longer titles or fares/types, it makes all the difference. Let us know if you have any feedback; in our tests, people didn't seem to mind that some feed items were larger than others.
  • Happening and place action buttons are now lighter and provide a greater contrast.

We have lots of plans for the December release, so stay tuned! In the mean time, check out the November release on www.restlessnapkin.com.

Filed under  //   Release  

What's the number for...?

I had another real world use for RestlessNapkin today, which is convenient because this app was really created for my own selfish use. How often do you want the number to a place and resort to a google search that may or may not give you the results you want?

Using our beta search release at http://beta.restlessnapkin.com I went straight to the places feed and searched for 'delaware' and was given a list of the two 'Delaware sub shops' in Austin. I picked the one I wanted then hit the phone icon and made my to-go order.

Easy peasy.

 

(download)

 

Filed under  //   In the Wild   Tips  

Shine and Polish

Our second release happened without much fanfare a few weeks ago as it was really a maintenance update of things we weren't able to put into the app before the initial launch.  The biggest change that we made was to the desktop browser version of the site.  You'll notice a nice Austin background and filters on each side of the feed.  The filters allow you to easily narrow down what type of place you are looking for.

For example, about a week ago I had a craving for mexican food and decided to give RestlessNapkin a spin.  I was actually pleasantly surprised to find a taco place called 'Dos Batos' within walking distance to my house that I was completely unaware of simply by clicking 'Allandale' for the neighborhood, then 'Mexican' for the fare.  Even in its infant state, the website performed the duty it was built for!  Not only that, the taco place is amazing and I've been back several times since.

Other updates include adding roughly 1500 places to the places feed and minor bug fixes.  November's release is centered around search which will allow you to more easily find happenings by typing 'margarita' or 'brunch' then have current happenings brought right to the top.

We hope you are enjoying what were working on, stay tuned as there is much much more to come.

Filed under  //   Release  

Technology and Ideologies Behind Restless Napkin

As you probably noticed, we launched Restless Napkin the other day. As the software developer, I figured I'd give everyone some background into the body of work that has gone into this project.

The project is a culmination of several years of rewrites, false starts, and core changes. At some point in developing, we decided to make an application to help you find out what's happening, where it's happening, and when it's happening, because all of the applications available then (and now!) don't do a very good job of telling you what's happening right now. Let's say it's Sunday night, you're hungry, don't want fast food, and want to know what's open. Good luck finding a place, and you'll get brownie points if you find a place with some kind of special. You might as well go to your favorite fast food joint and get the usual. We hope to fix that, all while integrating with the services you know and love.

Originally, we took this idea and implemented it as a Facebook application using a standard relational database (MySQL). The way we designed the application, however, was that every object can be related to any other object, and there are different types of objects. Let me be the first to tell you, if you didn't already know, relational databases are not very good for storing objects that relate with other objects that have varying numbers of fields. A place has a parent-child relationship with an event, but events don't have addresses or phone numbers. It's inconvenient and inefficient to have one table for every object you intend on storing (especially since we had dozens!), and the other option is just crazy because it would require us to have every field in every object as a field for every object. It ought to be illegal to give a place a start time or recurrence value, since a place neither starts nor recurs!

Most people with this problem solve it by serializing the uncommon information in a field in some format, usually XML. We used YAML because that's what Rails does. This quickly exposed a problem: how do you search those fields? More enterprisey databases are capable of parsing the XML (at a significant speed cost), had we stored it that way. But that just didn't seem to be the way to go. After having lots of information stored in the database, we started to resort to rendering certain expensive page components at night and returning stale information. Live searches were not very good, and it was impossible to view anything by date without going through a city's events one-by-one to figure out which ones need to be displayed.

Clearly, this wouldn't work. And it didn't help that Facebook kept breaking their API. We threw away this application and began to research better ways to make our application happen. That's when we came across CouchDB, which is a simple document store. It lacks almost every feature that relational databases absolutely require to function, like validation and forced field types. This omission of constraints is specifically what makes CouchDB able to perform. It doesn't care what your data is, it just makes it really fast to query any and all of it. The most important part is that it didn't require us to change our platform to store our data in it. MySQL (and any relational database) required us to bend around it; CouchDB does not. CouchDB also has a very smart way of doing queries, at least for our dataset.

And that's where we are today. We have CouchDB providing the lightning-fast queries of our dataset, sitting on our Rails application. We developed a thin wrapper on top of the (in my opinion) best CouchDB library for Ruby, CouchRest, that permits us to define the different objects in the application. That is, we have the capability of creating everything but the visual interface for a data type from a web interface. It also enforces validations and sets what fields an object will have. It's currently open source and on GitHub, if you're interested in the code.

Hopefully my future posts are way shorter and are actually interesting to more people. But until then, I hope this post was informative and gave some transparency to our whole operation. Feel free to contact me with questions. @ZiggyTheHamster or ziggy at ignition hyphen project dot com.

Launch - Hello World!

On Wednesday September 1st we were able to successfully meet our self imposed deadline and launch RestlessNapkin to the city of Austin.

The aim of RestlessNapkin is to simplify the task of finding great places to eat and drink.  There are so many options available to us that we often become the victims of the paradox of choice and gravitate towards familiar or recently visited places because they are 'top of mind.'  We plan to experiment with ways to help you make that decision and branch out to new exciting places more easily.  We want to become the Netflix of the bar and restaurant world.

We're not silly enough to overlook the fact that we are entering a crowded market.  There are countless sites that already have passionate and established user bases.  That doesn't mean we can't make something better and more intuitive.  We took on this task because we are people that utilize the existing tools and found still to be wanting more(or less in regards to cluttered user interfaces).

Alas, we launched with something very simple.  A filterable list of places in alphabetical order, and a rolling feed of happenings(food, drink and entertainment).

This isn't to say that we threw this together overnight.  Quite the opposite as RestlessNapkin is the result of over four years of work for Keith and myself.  This project has always been a side one and thus suffered neglect every once in a while as well as a few different incarnations.  This application had once been a facebook app called 'Places' until we realized that mobile was where we wanted to be and a native facebook app couldn't offer that to us.  We also tore out the guts of the underlying framework several times for no better reason than knowing we wanted to create a solid long term and flexible platform(macrodeck) that we were 100% happy with.

After all the hard work, stress and toil, we now have the beginnings of a framework and application we are very happy with and which will allow us to evolve RestlessNapkin on our terms.  We look forward to sharing our creations future with you and hope you love it as much as we do.

Filed under  //   Release