Switched from Gowalla to Foursquare

July 21, 2010

So for a long time, I’ve been a Gowalla fan for all my ‘location tagging’ social needs. In fact, some might have called me a fan of it. You see, ‘many years ago’ when I worked at Digg.com, Foursquare came out. It seemed like a neat service and concept and tons of my fellow Digg employees loved it.

Thing is, they lived in San Francisco. Foursquare only worked if you where in one of a certain set of big metropolitan areas. I live in the boonies comparatively and so it was completely useless to me. I shrugged and went back to a ‘location tagging-less’ world.

Now, Foursquare wasn’t the first service out there either, Dodgeball and Brightkite both come to mind as services that ‘tried’ before. But Foursquare was starting to get traction.

Fast forward a year, and Gowalla comes out. It has a really nice clean interface, works well (more on that later), adds in the ‘game’ aspect of collecting/dropping items, but most importantly, it allows any user (me) to create any spot.

This is amazing and I become a fan. Suddenly I can start creating spots all around me, I go back to their website, I curate them, tweak their position, adjust their radius, and have a grand time of it. During this time, Foursquare gets bigger, more marketshare, and they quickly ‘catch up’. By the time I realize tons of my friends are on Foursquare and I try it again, they’ve got the whole ‘points system’ game going, Mayorships are ‘the thing’ and even special deals are being offered by companies to their Mayor. But most of all, they fix the problem of ‘boonies’. It works near me. In fact, they ‘one-upped’ Gowalla, and appear to have auto-inserted every business name that you could possibly google for.

Now, I didn’t bother considering switching, who cared, I used Gowalla and I liked it.

Until recently. What happened? Simply put, Gowalla stopped working for me. I constantly started running into the fact that I couldn’t check in at the location I was physically at. I’d be sitting in a restaurant, half-way through my meal, and go “Oh yeah, I should check in”. I’d pull up Gowalla, but since it couldn’t get a GPS lock indoors, it would do cell tower triangulation. Now Gowalla thought I was 0.5 miles farther away than I really was. This is a problem since Gowalla requires you to be on top of the location to check in. The only way I could check in, would be to walk outside, check in, then go back into the building.

That’s crazy.

Not to mention that it had a similar issue if there were lots of locations near you. It would only let you scroll 2 pages or so of locations, so go to an airport where there is a location for every store, every gate, every everything. And you’d gamble as to whether the place you wanted to check into actually came up.

Simply put. They broke the ONE thing that you are supposed to do with the service. Check in at the location you are at.

I got so frustrated at one point, and some friends of mine at HiiDef were talking about Foursquare again, so I tried it out, and fell in love. I can always check in at whatever location I’m at. It presents a nice simple list, and I can even search for it by name. I’ve never had an issue checking in. And that’s the ONE thing you want to work.

So if you recently got a friend invite from me for Foursquare, now you know why. I bought in hook/line/sinker, and removed Gowalla from my phone.

Advertisements

Conferences, Speakers & Presentations

March 17, 2010

There has been alot of chatter in the PHP community lately about conferences, speakers and specifically the fact that many speakers at conferences seem to be doing last-minute preparations for their presentations instead of being professional and ready well in advance.

Most recently this came out because a number of speakers for ConFoo (A PHP/Python/Ruby/Java conference in Montreal) were tweeting about working on their slides the days/nights before their talks. Some people starting taking offense at this and calling it unprofessional

First of all, I want to point out a simple fact that while yes, a SELECT FEW presenters are the types that only start making slides the night before a talk. The majority of people (myself included) who are presenting, have made our slides at least weeks in advance (if not earlier). However, we continue to tweak them up until the minute we present. We want them to be perfect, and so we keep reviewing them and modifying them. In fact, I’ve been known to change my slidedeck in response to other discussions happening at the conference, or due to information that was passed on in the Keynote.

In those rare other cases, those speakers are ones that know their topic intimately and are simply planning on having a conversation about the topic with the attendees. In those cases, the slides are less important in the first place.

But let’s put that aside for a moment, because I want to focus on something actually completely different.

The mention of the word: “unprofessional”. Speakers at PHP conferences are, by definition, unprofessional. The PHP ‘conference circuit’ if you will, is one that has grown up in a different manner than other conference circuits that I’ve been familiarized with in the past (Java, Adobe, ‘Web’, etc).

In most of these other areas, the speakers are PAID to attend. Some of the speakers in fact make their living (or a good portion of it) via being paid to present at conferences. They will get a significant payment for being there, as well as expenses being covered.

On the flip side, in the PHP conference circuit, every speaker there, in fact, is PAYING for the right to attend that conference and be a part of it. (Or, if they are lucky, their companies are covering their expenses) Sure, most of the conferences do their best to offset the expenses that the speakers will accumulate, but that’s it. The standard package involves a free conference pass, a night or two hotel per presentation, and airfare being covered. (Though some conferences, like OSCon, cover much less).

There are still so many expenses that a speaker will have. Transportation from airport to conference venue. Parking at their home airport. Meals that are not otherwise provided (usually only lunch is). Extraneous flight expenses (checked bags, etc).

All of this is being paid by the speaker (or their company) for the privilege of speaking at the conference. This is a net negative, not even breaking even, let alone being a paid speaker who would be taking their position as a ‘professional’, being paid to do a job. Heck, let’s not even take into account the direct loss of productivity that the companies take by allowing the speakers to attend (though other great benefits are gained by doing so)

In the end, my point is this. I feel that given the nature of all of these conferences. That the organizers and attendees need to understand the situation and treat the speakers not as a ‘professional speaker that they paid good money to see’. But as what they really are. Far more akin to an Open Source Developer, who is donating their time for the better good and education of the masses.

That is until at least, the situation overall changes. Where conference organizers are able to pay a respectable payment/stipend for the amount of time actually spent by a speaker in preparation and execution of a session. Also where attendees are willing to pay a conference fee that accordingly will cover those speaker payments. It would not be nearly so inexpensive as conferences now are.


An intriguing use of lambda functions

March 10, 2010

I’ve been working hard on Goodsie.com lately trying to bring it to launch. It’s been great being in on a new PHP project from (near) the beginning, as it frees up a number of things.

One of those, is the fact that I can be using PHP 5.3 and all the new features that come with PHP 5.3. While I’ve used my fair share of the short-cut ternary already (?:), the bigger win for me, are the Lambda functions with scoping (anonymous functions).

I found a very specific use out of the blue of Lambda functions that I have now used and I see as a great use-case. Which is specifically passing functions/logic from your Controller to your View.

In the case of Goodsie, I’m using PHP for my templating language and as usual I’m trying to remove as much logic from my View as possible, while still allowing the view to be malleable.

The specific case I had, was a subview that was generating some pagination code for me. You know, the standard ‘previous, page 1, page 1, next’ section of links. The basic HTML template I had, looked looked similar to:

<div class="pagination">
    <a href="<?= $baseurl . '/page:' . ($page - 1) ?>">&larr; Previous</a>
    Page <?= $page ?> of <?= $total ?>
    <a href="<?= $baseurl . '/page:' . ($page + 1) ?>">Next &rarr;</a>
</div>

Rather straight forward, but I quickly ran into a problem. The way it worked, as you see, is that you passed in a base URL, and the page number you are currently on, and it generated appropriate forward/back links. (Ok, there was also some other logic where it determined if you needed the prev/next links at all, but I’ve removed that for clarity)

But I then had a case, where I wanted to reuse this subview in an ajax situation. Where instead of straight URL’s being passed in, I might want to pass in a javascript function, and have that function be called with the page number as a parameter. That would be nice as I could use it in both situations. What pagination looked like, could completely change, and still work on both cases. Perhaps we’d want to give a full list of all possible pages. Or show a couple forward/back, etc. The view could handle all of that without a change to the controller.

But therein lied the problem. When using a URL based pagination, I wanted to concat the page number onto the end of the URL. But when using javascript, it wasn’t pure concatenation, it instead needed to wrap the page number with the function call. Oh the pain a simple ) could cause me.

I started writing code, where I ended up with tons of switch statements and logic inside of the view. I’d have to pass in two different possible values, a URL or a javascript function. The view at every point where it would output a link, would need to see which version was being used, and from that decide what type of output to create. In short, it was a mess.

But then the solution dawned upon me. A lambda function would work admirably here. So what I did, is inside of my controller I created a function on the fly, that would generate the appropriate type of link that I was wanting. It looks something like:

if ($jsfunc) {
    $url = function ($p) use ($jsfunc) { return "javascript:{$jsfunc}({$p})"; };
} elseif ($baseurl) {
    $url = function ($p) use ($baseurl) { return "{$baseurl}/page:{$p}"; };
}

Now I could simply rewrite my original template, to use this lambda function $url to generate it’s URLs.

<div class="pagination">
    <a href="<?= $url($page - 1) ?>">&larr; Previous</a>
    Page <?= $page ?> of <?= $total ?>
    <a href="<?= $url($page - 1) ?>">Next &rarr;</a>
</div>

Now not only would this work for my specific situation, but ANY controller could reuse this pagination subview and define exactly how it wanted it’s URLs to be formed. Now, the view could completely change around how the pagination section is displayed, show as many, or as few pages as it wants to, and all that without ever touching the controller.

This is one simple example, but I’ve become enamored of this approach. Using lambda functions in this way, you are able to have complicated logic represented inside of your view, but encapsulated/created by the controller. Also of note is the fact that the view is managing to use the $jsfunc and $baseurl values, but without actually having to be granted access to them. This allows for another level of encapsulation, as I exposed one function, instead of 2 separate variables. In the future if other data points start being needed to determine what a URL should be, the view never needs know that, as the controller will continue to update the function on it’s behalf.


Why I want an iPad

February 24, 2010

There has been much talk in the tech-sphere lately about the iPad.  Primarily from people honestly putting it down and ragging upon it.  Saying how it doesn’t have <insert feature they wanted>.  Or saying how it’s a toy because you can’t hack it, put your own unapproved software on it, hook up a USB keyboard, etc.

I don’t disagree with those statements actually.  There are some features that I wished it would have had, I might have been excited to have seen it run OS/X instead of the iPhone operating system, so that I could have used it more like a real computer.

But in the end, I think that starts to miss the point.  It’s not a ‘real computer’, it *is* something new, and the more I think about it.  The more I end up wanting one.  Perhaps I’m an edge case, I can accept that.  But ever since the announcement, I keep thinking to myself: “I’d love an iPad right now”.

So why do I want one?  What are the situations where I find myself wanting one?  Typically they are situations where I’m wanting to stay ‘connected’, do some computing and/or online things.  But I’m not wanting to be tied to a laptop.  Afterall, a laptop is actually an intrusive thing.   Try sitting at the breakfast table with one.  It’s there.  Projecting itself into the space.  Acting as a wall between you and anyone else at the table.  However, sit down with a magazine, or a newspaper, or even a cell phone / iPhone, and it’s not in the way, it’s laying flat, you are picking it up to view things, you can easily lay it back down.  You are using technology but staying more connected to the people around you.

Plus there are just places where a laptop is awkward to use.  For example, in your lap strangely enough.  At a doctor’s office, on the airplane, etc.  It’s all these times, when I sit back and start thinking: “You know if I had an iPad right now”.  So many of these situations come up, such as:

  • The aforementioned breakfast table, checking the morning news/twitter/email.  (Heck, just doing email in general with something less intrusive than a laptop, but better built for it than an iPhone)
  • Sitting on the couch with family watching TV while also checking things online.
  • While playing video games and needing to look up some information online.
  • While at a non-profit meeting, wanting to look something up.
  • When spending a ‘short time’ at a coffee shop, relaxing while wanting to stay on top of things.

In general, I think that an iPad is going to be superior in use to a large laptop, because of it’s form factor, as well as to a netbook, because honestly I agree with Steve Jobs about netbooks.  I have one, I rarely use it, and when I do I wonder why I didn’t just grab a real computer instead.  Tiny screen, bad interface, etc.

Plus the iPad is going to add functionality that I can only imagine how I may want to use it:

  • As a book reader (I’d been debating about getting a Kindle, now, to me, this is a no-brainer that I’d rather have an iPad)
  • As a video playing device (just the right size to hold in lap)
  • As a new way to share photos with family.

In the end, I kinda don’t want to be excited about the iPad, since I have many of those geek tendencies to dislike it solely because it didn’t have X/Y/Z.  But in the end, I keep finding myself back at that “If I only had an iPad right now” stage.  I see myself using it.   Interestingly enough, 90% of the time I see that use being Wifi only based.  So dropping the extra $130 plus $30 a month for a separate data connection, I don’t see.

Which does bring me to my one complaint though, and the one reason I don’t want an iPad:

  • Price

Really that’s it.  I know, I realize, that $499 is an amazing price for a product with a 10″ touchscreen, massive battery life, etc.  But in the end, it’s still more than I want to pay for this device, given how I know I’m going to use it.  That is, as a device to use when my iPhone is ‘too small’ for the job and when pulling out the laptop is overkill.

To that end, I wish it was more like $199

That being said, I still want one, and I’m going to have a mention struggle between now and release date as to whether I can justify buying one.  The one biggest thing (other than price) that is holding me back at this moment, is that I’m unsure how easy it’s going to be to use the ‘bigger onscreen keyboard’.  Because honestly much of the use I expect out of the iPad, is going to involve typing, which is slow on the iPhone.  I expect the iPad to be ‘slower’ than a real keyboard.  But I’d hope that I could put it in my lap, and semi-touch-type on it.  If I can’t really do that.  If typing is going to be at ‘cell phone thumb speed’.  Then that’s a problem for me.  That may become the killer.  Because if I can’t type easily-enough on it.  I’m going to get frustrated.

In summation?  I dunno, I’m still torn.  I want an iPad, but I have a couple concerns.  Let’s see if I can resist when the day comes.


At my new job … HiiDef / Goodsie

February 13, 2010

It’s been too long (as usual) between my posts. But I honestly hope to remedy that now. For the last year-ish of my life I’ve made very scant blog posts. Primarily because I was working at Zend as Editor-in-Chief of DevZone and the bulk of my creative writing juices were being spent there. It’s amazingly hard to focus on writing in two places at once.

But as of 2 weeks ago, I started my new job and I’ve been very excited about it so far. I’ve joined the team over at HiiDef, which is a web incubator/holding company for lack of a better description. Basically they come up with some great web 2.0 styled websites, so far, more focused in nature, and they bring them to life. It’s a very eclectic team of people that are 100% remote though mostly clustered on the East Coast of the US. They’ve focused on hiring the ‘right people’ regardless of what technology base said people used. And hence with their three projects they currently have going, one is Python/Django, one is Ruby on Rails and the other, is PHP.

That’s where I came in. Their newest product is Goodsie, which is built on PHP/MySQL. It’s a website that’s designed to make it easy for people to create a storefront online and sell their goods. But to offer an easy way to truly configure that website to be a custom storefront, versus other options (Ebay, Etsy), where things are far more cookie cutter.

It’s “[pretty close]” to launching. Though without a firm date. I was brought on board to take over as Lead Developer for the project which had previously been worked on by a part-time contractor, so that they could have a full-time guy to take it from 80% to launch and beyond.

Anyway, it’s been an exciting first couple weeks and everyone here is a great attitude about how a company should be run and the value of employees.

The future is looking bright. (Though a bit covered in snow at the moment)


Presentations Uploaded

December 9, 2009

Ok, I’ve been a slacker, I’ll admit it.  I hadn’t uploaded slides from my last three conferences:

  • PHP Conference Brasil 2009
  • CodeWorks DC 2009
  • DCPHP 2009

I’ve now done that, they are all available on my website’s presentations page:

http://eliw.com/presentations/


Brazil: Conference, Vacation, More

December 7, 2009

P1020357So I recently got back from Brazil, where I was asked to Keynote at the 2009 PHP Conference Brasil. It was a great experience and I’ve written up my experiences and feelings about the conference itself over as a PHP Conference Brasil Wrapup blog post on Zend’s DevZone.

But the point of this post, is just to talk about the amazing experience of being in Brazil, and what our feelings were. You see, the conference was during what would have been Thanksgiving vacation for me, so I went there for the whole week before hand to act as my replacement Thanksgiving and brought my wife (Heather) with me. We sent our son to Camp Gramma for the week.

P1020308Because of where the conference was, we stayed in São Paulo, which depending on which chart you look at, ranges from being ranked the 3rd largest city in the world, down to the 7th. I’ll state that São Paulo has a plethora of Tourist things to do, but isn’t really a tourist destination perse.

Don’t get me wrong, we did plenty of things and had a great time. Saw a number of museums, lots of great historical cathedrals and more. But really the primary tourist attraction for us, was just in experiencing the completely different culture, and being in, essentially a 3rd world country, though taking great leaps and bounds to break out of that.

P1020084One of the biggest ‘attractions’ that we experienced, was the traffic. It seems that traffic is a major problem in São Paulo, as it regularly took 1-3 hours to get from location to location. We’d often end a day feeling very accomplished that we hit 2-3 different sites that day. But afterwards were realizing that in a tourist town, you’d have hit 10-15 in that same timeframe. Imagine going to DC where instead of being able to walk from museum to museum, and go easily from the White House, to the Capitol, to Washington and Lincoln memorials in a day if you wanted. To having each of those locations be hours of car traffic apart.

This was coupled with the fact, that since we needed a ride to get back to our hotel, and that São Paulo was so big that we needed to get back home at a decent time every night, instead of heading out to any night spots. Plus where we were staying (Osasco) really didn’t have much around it (ok, at all), so when we were left back at the hotel in the evening, all we really had was the minibar, and a nice pizza restaurant downstairs in the lobby.

The language barrier was actually pretty formidable. Before going there, we had studied up on some basics of the language, but all the tourist guides we read were stating that 1/3rd of the people (at least) spoke English. Well, perhaps 1/3rd do, but not the 1/3rd we ran into. Things were translated into English all over. But it was rare to run into someone who spoke english. Only 1 waiter and 1 bar tender at our hotel (a Best Western) spoke English. Noone at the front desk spoke it well, only a couple people who spoke it very haltingly. As we went around playing the role of tourist, we found very very few places that had English speaking hosts or help. Primarily at the high end restaurants. I will say we got quite a few stares as we were walking around speaking English all the time.

What made it worse, in a way, is that the Brazilian people are VERY friendly, and really try to be helpful. But that actually made it worse. Because any time we tried to buy something (food, souvenir, etc), they wanted to ask us all sorts of questions, about what other things we want to buy, what options in payment we have, etc. In the US, you are lucky to get a cashier to even consider speaking to you. Hold up your merchandise and a Credit Card, and the most you are likely to hear is: “Sign here”.

P1020132One particularly funny (to me at least) incident revolved around me trying to order 2 Big Macs at a McDonald’s at a mall, while hanging out with the PHP Community there and drinking. (Yes, they have bars in the mall). I walked up, and said: “Dois Big Mac” and proudly held up 2 fingers to drive it home. What ensued was I’m sure a great comedy routine, as she tried asking me something. I kept alternating between “Dois Big Mac” and “Inglês?” while trying to get her to understand that I just wanted 2 Big Macs, and that I only spoke English. 10 minutes later, she finally rung me up, and gave up on whatever she was trying to ask me.

In general whenever we went to try to converse with someone (Heather and I spent one day, and a few evenings by ourself, exploring), the reaction when we would respond with: “Inglês?” was laughter. Not ‘we are laughing at you’ type. But a more nervous chuckle of “Oh boy, a tourist, here, and I don’t know English”. The funny thing is, they didn’t try to come up with physical demonstrative ways of expressing concepts after that as one would expect. Pointing at signs, holding things up, etc. Instead they KEPT trying to speak Portuguese to us, and I swear they were doing the: “If I say it louder, and slower, they’ll understand me” trick.

There was also a healthy bit of ‘danger’ on the trip as well, that made it a little less exciting as it could have been. I had a number of friends down there, and everything was couched with a statement of: “Oh, but please don’t walk there at night”, or “Don’t go there alone”. It seems that crime is a major issue in São Paulo and combining that with our inability to communicate, made it hard to just get around to do things. We shouldn’t walk places, nor come back too late on the Subway. But at the same time we couldn’t easily take Taxi’s or other public transit either. It made for some frustration that we were locked into our Hotel, all sorts of great things around for us to see, but no way to do it. Especially since we had a US Citizen’s point of view on things, that we wanted to rush to see as much as possible.

That in itself is very different from the Brazilian attitude. People are actually very laid back there. They show up when they are ready, they take their time with things. Meals are long experiences to be savored. In fact at a restaurant they rarely bring you the bill until you ask for it, stating that you are done eating. Otherwise they don’t disturb you. In a US restaurant, they are trying to get you out of that seat as soon as possible to get someone else seated.

The food was excellent though, especially the beef, which was prevalent and cheap. I had my first experience eating ‘hump’, as the beef there comes from Brahma cattle. They also have a strong Italian influence making great pasta dishes abound, and pizzerias the #1 restaurants. I do admit, they made some amazing pizza.

We experienced a number of markets, ranging from the ‘Little Tokyo’ one, to the arts fair at Embu, to walking downtown through a massive shopping fest that filled the streets. It was exciting, but at the same time, except for some few select items, shopping didn’t play a big role, since most everything there cost more than it does at home, even taking into account the fact that we had essentially a 2:1 exchange rate that was very favorable to us.

P1020373I will wrap up this rambling discussion, with a quick anecdote that rolled much of the experience into one. Which was when I had a drunk Brazilian guy screaming Portuguese into my face, just inches from touching me. We were in a beer shop in the mall. (BTW, Bud lovers? You’d love Brazil. 98% of what is drunk there, the chopp (translation: draft) could be considered a Bud clone. It’s even made by the same company. I longed for getting back to the US and some tasty microbrews). Wait, I digressed. So we were drinking in the mall and behind us, some guys drinking from a 5 liter pitcher of beer got a bit animated, and hit the table to make a point.

The table being rather flimsy, it rattled, and sent multiple classes crashing to the floor creating quite a mess. My wife and I were very surprised, specifically because noone seemed to think twice about this. The guys stayed there drinking and calling for more glasses. The wait staff ran over to clean up. We were talking about this with Rafael Dohms, our host for the week, and contrasting how that would be handled in the US. With the guy being tossed out immediately by the manager. It seems that we looked his way a few too many times, and so he came over to rant at us. There he was, screaming in my face, and not letting up. I turned to Rafael, who picked up the conversation. In the end, it seems, the guy spent 10 minutes yelling at us about how he is poor, and drinking is all that he has, and that he didn’t break our stuff, so why are we caring that he broke things. The whole time, the service staff (and the manager) just sat back at watched. The guy never got the hint that we didn’t understand Portuguese, and even at the end, spent a few minutes whispering into my wife’s ear and rubbing her back (it seems just repeating the same words about how he was poor, and these two rich guys couldn’t understand him). In the end, Rafael got the owner to waive the charge for our drinks, and we left as soon as we could.

P1020339I do owe Rafael Dohms a huge debt of gratitude. He took the entire week off, to act as tour guide for my wife and I. We realize in retrospect that it’s amazingly good that he did so. The city was very hard (almost impossible) to navigate without knowing at least a smattering of Portuguese and we would have probably ended up spending most of the week paying really expensive prices to take long cab rides everywhere, or just sitting in our hotel the whole time not knowing what to do, had Rafael not offered to be our tour guide, and run us around to all the sites. We literally can’t thank him enough for that.

Also, thanks to Ivo Nascimento (@ivonascimento) and Ivan Rosolen (@ivanrosolen) for picking us up at the airport. Anderson Casimiro (@duodraco) for driving us to the ‘Beach Day’ of the conference and back to the airport on our last day. Augusto Pascutti (@augustohp) for helping me find/buy wine for my wife in a place surrounded by beer. Guilherme Blanco (@guilhermeblanco) for being the official evening event planner. Er Galvao Abbott (@galvao) for being an excellent conference host and inviting us down there. Alex Piaz (@zaip) for being a great conversationalist and fellow beer lover, and of course Tiscilla Dohms (@tiscilla), Rafael’s wife, for showing my wife a good time and becoming great friends.

We look forward to going back to Brazil in the future (after all, we have 5 year visa’s now!), but we hope to make the next trip be somewhere other than São Paulo. Rio comes to mind, or the northern beaches. Perhaps some of the inner country resorts/springs. Until next time Brazil: Tchau!