Comm Lab Web: probablyGonna

For my comm lab web class, we finished the course working exclusively with Ruby and Sinatra.  The learning curve was particularly high, and I spent a lot of time wrestling with getting my apps working on Heroku and on my MacBook Air, since there were a lot of subtle changes that had to be made to get the apps working on each.  But I got my Ruby, Sinatra, Postgres, and permissions straightened out on my laptop, and now I can do Shotgun development, which is fantastic because it’s pretty much real-time building of code.  Heroku takes some interpretation of cryptic error messages and symptoms to diagnose how to get things going, but it’s so nice to operate from the console — they have some hotshit engineers there.

So here was my pitch for my final project, probablyGonna.

Like, you might be, “I’m probably gonna go dancing this Saturday in Adams Morgan, so if anyone’s in the area…”  Or, “I’m probably gonna go hiking some weekend, is anyone possibly down?”  The person who opens the ProbablyGonna item is the pioneer of fun.  But the pioneer always needs the validators, the next few who make the event a “go”.  Then everyone else piles on.  But you need the initial sparks, and you need to nurture the kindling until it catches fire.

The thing is, with events, most people don’t plan well in advance.  Facebook has events and our email gets spammed with e-vites, but really, don’t you just end up at 4PM on Friday or Saturday wondering what the hell you really want to do?

Most plans happen at the last minute.  Some even happen on the fly, when you’re in the area.  Who has enough active friends on Foursquare to use it to locate a place nearby to go?  Who checks in regularly on Foursquare?

It’d be nice if someone puts out an open invite for friends (or even strangers) to converge on one spot — at their own leisure.  This also gives context to a location’s events during a specific time.  Look, there are these parties going on at this venue; once you get there of course, the parties dissolve into one mass of people enjoying the location. (it would be nice to have a site where you could do wrap-ups of how cool a party was the night before and what cool stories happened that you just HAVE to tell)

I want to do this because I hate when people blow their Friday and Saturday nights not knowing where the fun is.  I want to do this because I think it’d be cool to have a job where you just ensure that people attend one kickass party that they’ll talk about forever.

So with ProbablyGonna, you just need to enter in a rough when/where/activity entry, and see if others will join.

I’m also thinking there’ll be reputations, developed over time, with how reliable someone is for actually making an event happen after declaring it on ProbablyGonna.  That is, if someone posts 5 invites but bails on all 5, he’ll get a 0% reputation, whereas someone who’s solid will signal to others that it’s safe to make the trek to that venue because the host is definitely going to have made it happen.

The problem with my app was that my physical computing project ended up dominating my life, and I also ran into some last-minute deployment issues.  For instance, I found a great gem, Chronic, that does interpretation of human time (this Friday, next weekend, etc.) into database-readable time.  But on Heroku, they use the latest version of Ruby, 1.9.2, and Chronic was only compatible with Ruby 1.8.7, which was what I used for local development.  So I learned how to deploy to an older version of Ruby on Heroku.  I also had some problems setting up a one-to-many or many-to-many relationship in my database.  I wasted a lot of time on that.  I also couldn’t figure out how to build a proper authentication system for users when they log in — it’s one of the weakest points of my knowledge for web site development, making sure users are who they say they are and making sure their passwords are safe.

The result was that I gave what I thought was a horrible demo of the app in class.  A lot of features didn’t work, and there was far less to show than I had hoped in terms of what the idea could do.  I built it out so that you could easily create an event, for people to probably attend, and then you could easily browse different time scales or events for what you wanted.  But that was about it.  Sure, that’s all the idea is, but I could tell the demo did not resonate as well as it did when I explained the concept behind it.  So I really dropped the ball in executing the simplicity of the idea.

That really troubled me, particularly since I spent the rest of the night all-nighting an attempt to save my failed phys-comp project.  I felt like I was having major problems condensing a simple idea into simple execution, something that would really grab a hold of people instantly.  I’m hoping I just didn’t get enough time to spend on it, and that some mending later will make it more appealing, and my familiarity with it will help me reduce extraneous elements.

Anyway, you can demo the probablyGonna site if you like, over at Heroku.

Here are some screenshots.  I’m taking a break from coding over the Christmas holiday, and am hoping I can implement the site better in my spare time next semester.  I’m also probably gonna work with classmates Phil and Federico on something very similar, matching people to learn their respective skills over coffee, on the NYU campus.

I got some good feedback during the presentation, which indicated that people really liked the idea.  People did not like the name probablyGonna, because they felt it was too uncertain.  Would the originator of an event actually show up if he organized it?  What if you could set a threshold for whether an event will happen, like if it gets over 5 people?  I responded that I felt almost any originator will actually attend his own event, but I guess I could see that if people just started throwing out events onto the site, maybe it’d just get spammy but not deliver.  I think my original idea for this, however, was that people would earn reputations.  Did the person bail on events, particularly his own?  Did people show up when they said they would?  Did someone’s events really pack a punch and get good after-action reviews?  Reputation here, as will be for most sites in the future, will be key towards making the site efficient and usable.  I guess what I wanted to be wary of was making the site too ordered and structured — that product already exists, and it’s called Google Calendar.  But when we’re not in offices and not planning well in advance, how do we actually decide what we’re going to do?  We wait until almost the day of, or the morning of, to weed out the worse options and then settle on the best one.  We also might just want to grab lunch with whomever’s around, and probablyGonna can do that, too.

Comm Lab Web Poll Homework: Favorite Sexual Position

For my comm lab web homework, I had to build a simple poll using Sinatra and Ruby.  I decided to do something a little more interesting, a variant of my favorite Halloween candy app that I posted up on github.

This poll asks people to choose their favorite between two sexual positions.  The choices: missionary, doggystyle, giving oral, receiving oral, giving anal, receiving anal, 69, scissoring, over the table, on the table, cowgirl, reverse cowgirl, dry humping, making out, public sex, mutual masturbation, mammary sex, standing sex, and spooning sex.  The great thing about this type of poll is that it still gives you plenty of options, but since it compares two of the options, it encourages voting multiple times instead of just once.  From there you can approximate peoples’ favorites by seeing how the choices were weighed against each other.  (I wish presidential elections were this way too)

I had a lot of problems with this poll’s development but that was mainly because I’d never coded in Ruby or set up views for an app before.  I also had problems configuring my MacBook Air for shotgun and Sinatra.  But I got those installed correctly after doing a git clone of sinatra and then getting the appropriate Ruby gems.  I also had to adjust my .profile path.  But then it worked after all the clean installations and it was beautiful making changes to my code without restarting Sinatra!  What a lovely development environment!

I tried to deploy my app to heroku because the ITP server runs like garbage (edit: turns out there were some runaway scripts on the server), but I couldn’t get it to run and my heroku logs weren’t very helpful.  I’m sure it was a newbie mistake related to using the right config.ru and Gemfile files, along with using the right database adapter configuration line for DataMapper.  Eventually I got it all working — I switched over to Postgres after also figuring out how to install Postgres on my MacBook Air.  This was a lot of front-loading on my Mac but it’s going to be sweet to use for development from here on out.  The comm lab web class has been great for this reason alone, getting my Mac in order, but I’ve also completely crash-coursed in Ruby and Sinatra and I love it.

I also learned you can’t do incrementers like “i++” in Ruby.  But += will work fine.  I’m not a fan of strict casting and whatnot (being a lazy PHP loser).

At any rate, it looks like the old traditional positions are the running favorites (Not Safe For Work, NSFW).  Doggystyle and cowgirl came in at the top.  Results seemed fairly consistent across genders.  I got 925+ votes on this thing in just a week or two.  I didn’t spot any abnormal results really, although it looks like almost all men preferred receiving oral to other things, whereas for women it was split.  Women were more receptive to doggystyle and reverse cowgirl than I might have thought.

Again, here’s the poll.  There’s also a great chart of the data, broken down by men, women, and unknown, further split into which of their choices won or lost.  I made this using Ruby pulling from YAML into HighCharts, which is a great library online.

Comm Lab: Web, ProbablyGonna

Our first class of comm lab: web.  We went over some HTML and forms.  Our homework was to produce two documents, one with a recipe, and the other with a basic email form.  I have a feeling we’ll be building upon these documents since we were told to mark them up clearly and as much as possible.  This will make styling easier once we start doing some CSS.  I went ahead and added more IDs and classes, and threw in some jQuery as well for the form validation.  The documents are valid under HTML5.

My recipe page, I wanted to make a recipe for making “A Good Human”.  A flawed recipe I’m sure, but it’s good enough for now.  Hoping it may tie into Galapag.us at some point.

My email form was a preview for something I’m hoping to generate through the course of the class, ProbablyGonna.  One thing I hate is being out on the town but finishing early, and wanting to still go out and have more fun.  I know some friends are out and about, but it’s too hard at some point to meet up with people once they’re already having fun.  So I wanted to make a service that lets you put what you’re probably gonna do.

Like, you might be, “I’m probably gonna go dancing this Saturday in Adams Morgan, so if anyone’s in the area…”  Or, “I’m probably gonna go hiking some weekend, is anyone possibly down?”  The person who opens the ProbablyGonna item is the pioneer of fun.  But the pioneer always needs the validators, the next few who make the event a “go”.  Then everyone else piles on.  But you need the initial sparks, and you need to nurture the kindling until it catches fire.

The thing is, with events, most people don’t plan well in advance.  Facebook has events and our email gets spammed with e-vites, but really, don’t you just end up at 4PM on Friday or Saturday wondering what the hell you really want to do?

Most plans happen at the last minute.  Some even happen on the fly, when you’re in the area.  Who has enough active friends on Foursquare to use it to locate a place nearby to go?  Who checks in regularly on Foursquare?

It’d be nice if someone puts out an open invite for friends (or even strangers) to converge on one spot — at their own leisure.  This also gives context to a location’s events during a specific time.  Look, there are these parties going on at this venue; once you get there of course, the parties dissolve into one mass of people enjoying the location. (it would be nice to have a site where you could do wrap-ups of how cool a party was the night before and what cool stories happened that you just HAVE to tell)

I want to do this because I hate when people blow their Friday and Saturday nights not knowing where the fun is.  I want to do this because I think it’d be cool to have a job where you just ensure that people attend one kickass party that they’ll talk about forever.

So with ProbablyGonna, you just need to enter in a rough when/where/activity entry, and see if others will join.

I’m also thinking there’ll be reputations, developed over time, with how reliable someone is for actually making an event happen after declaring it on ProbablyGonna.  That is, if someone posts 5 invites but bails on all 5, he’ll get a 0% reputation, whereas someone who’s solid will signal to others that it’s safe to make the trek to that venue because the host is definitely going to have made it happen.

So this is what I’ll be working on, hopefully in Sinatra/Ruby, so I can learn those languages.  If those don’t work out, I’ll switch back to PHP.