Gowalla Over Foursquare

I like to try social networks.  I find them fun.  So when you combine a social network with a game element, it should be a sure fire hit with me right?  That’s why I tried Foursquare.  It’s a location based social network game.  This should be fun, I check in at places see who else is there, and the more places you check in over the course of a night, the more points you get.  Well, I don’t go out nearly as much as I used to (being married and having kids does that do a person), so I wasn’t so interested in the points.  But the idea intrigued me.

So I tried to make use of Foursquare.  Whenever I went somewhere I’d try to check in.  This is where the problems started.  The Foursquare iPhone app, is horrible.  It doesn’t do one of the things it should do, search for locations based on your current GPS or cell signal location.  If I’m in my home town of Katy and do a search for Jason’s Deli (because that’s where I am with my family), it should find the Jason’s Deli on Mason Road.  Nope, it pulls up the Jason’s Deli location that’s in downtown Houston, 27 miles away from where I’m at.  In internet meme terms, this is known as “FAIL” (ie broken).

Enter Gowalla.  Gowalla is similar to Foursquare in that it is a location based social network with a game element.  You can get points for visiting certain places and there are “trips” you can take that involve checking in at multiple locations.  Successfully completing a trip earns you points.

But Gowalla does something that Foursquare can’t seem to do (at least for me).  When I go to check in, it pulls up surrounding spots based on my GPS or cell signal location.  In other words, it actually uses my location to determine where I might be.  I have found one bug (but I haven’t check to see if its fixed in the latest version).  That bug is if I check in from inside a building (no GPS signal), if the cell tower it’s getting my location from is not on top of the building I’m in, then it won’ t let me check in, it tells me that I’m not actually at that location.  While I understand what the point of this is, there should be some leeway to say if you’re within a certain radius, allow the check in.

But that’s not all that Gowalla handles better.  If you try to check in at a place that isn’t in their list, you can add a new place to the GPS coordinates for where you are at.  In Foursquare, you need to have the address of where you are at (very annoying).  You simply type the name of the place, assign it a category and it adds the location to Gowalla’s database and then you can check in there.

In the end, I have chosen to go with Gowalla over Foursquare.  There are some elements of Foursquare that are fun and it definitely is more fun for people that go out all the time.  But the lack of ability to check in based on my location and needing to know the address to add a new place is a huge hindrance for me.  Gowalla suits my lifestyle a lot better and to me their iPhone app is just flat out better.  Foursquare is riding Dodgeball coat tails (the same people are behind both services), but it needs to get its act together when it comes to its iPhone app because for a location based service it kind of stinks.

My Gowalla Profile: mkoby

Posted in Technology | Tagged , , , , , | 7 Comments

Why You Want to Learn C in Today’s Programming World

If you flip through some of the “I want to learn C” questions on StackOverflow, you’ll find an interesting trend.  That trend, is that at least one person will try to disuade the user from learning C, siting that languages like C# and Java are better, and don’t require the programmer to worry about memory management.  A good example is this question.

Before we go any further, I think it is important to mention that I make a living doing development in C# and that I have also recently picked Java backup so i could write some programs for phones running Google’s Android OS.  So I have experience in both of these popular “managed” languages.  And I should also note that both languages are very good languages and allow a developer to accomplish things a lot quicker (and sometimes easier) than in a language like C.  With that disclaimer out of the way, lets move on.

The Importance of C

I think to understand why C is important as a language you have to look back to when C first came about.  When C first came out there were languages like Assembly, Pascal, and FORTRAN.  All of these, while nice were either hard to use or understand.  When C came along the idea of “high level” was still pretty foreign.  The C language changed that.  It was easy to understand, allowed low level access to things like memory, and was fast.  C did a lot to change how people looked at programming and made it slightly easier for people to write code.  One might equate going from Assembly to C is like going from C to Java (or C#).  There’s just that much difference in how easy it is to get things done that a whole new level of people can program.

Why C is Still Relevant

So in today’s languages, a programmer does not have to concern themselves (too much) with memory management, or even performance (not like before anyway).  Computers are so much faster and come with so much more memory than before that things like memory management and maximizing performance are not top considerations anymore.  Use to be, you had to pay attention to memory because you had less than 1 megabyte of it.  Your processor weren’t as fast so every computation had to count in a big way.  But in languages like C# or Java, these aren’t top concerns.  Both have garbage collectors (that you as a programmer can’t directly control), they both run on top of their own runtime so there’s an added layer when it comes to running the application.  Both C# and Java are extremely high level languages, a lot of stuff is written for the developer already and so both have awesome libraries ready for use.

But could you write an operating system in C# or Java?  Even if you could, should you?  If you need something to run its fastest, shouldn’t it talk to the hardware as directly as possible?  This is where languages like C (and even C++) come in.  The C language doesn’t run on top of a runtime.  It compiles into machine code, not Java Byte Code or IL code (C#).  There are performance gains to using a language like C when writing drivers, massive computation programs, and even libraries.  The less your program as to go through to talk to the hardware, the faster it’s going to be.

Caveats

Of course, a language like C comes with its own set of problems.  For starters, there is no such thing as garbage collection.  When writing applications in C, you have to make sure you take care of your memory, and you have to do so in an efficient and correct way.  Otherwise you get memory leaks which can cause performance to degrade.

Working with C is no different than working in any other language, you have to know how to use it.  You have to make sure you write good clean code, handle your memory correctly, and make your calculations count.  You can write bad C code, just like you can write by Java code.

Conclusion

I think to tell someone that they shouldn’t bother with C does a disservice to programmers. Programmers should know and understand where their languages come from. The Java and C# languages are heavily rooted in C. But I think the idea that it is better to code something in C# rather than C (or C++) is a misnomer, and other facts need to be considered before such a statement is made. If you’re interested, I found some benchmarks at Dr Dobb’s website for Java, C#, and C++. Give them a look to see what kind of performance you get out of the various languages.

Posted in programming | Tagged , | 2 Comments

Why You Want to Learn C in Today's Programming World

If you flip through some of the “I want to learn C” questions on StackOverflow, you’ll find an interesting trend.  That trend, is that at least one person will try to disuade the user from learning C, siting that languages like C# and Java are better, and don’t require the programmer to worry about memory management.  A good example is this question.

Before we go any further, I think it is important to mention that I make a living doing development in C# and that I have also recently picked Java backup so i could write some programs for phones running Google’s Android OS.  So I have experience in both of these popular “managed” languages.  And I should also note that both languages are very good languages and allow a developer to accomplish things a lot quicker (and sometimes easier) than in a language like C.  With that disclaimer out of the way, lets move on.

The Importance of C

I think to understand why C is important as a language you have to look back to when C first came about.  When C first came out there were languages like Assembly, Pascal, and FORTRAN.  All of these, while nice were either hard to use or understand.  When C came along the idea of “high level” was still pretty foreign.  The C language changed that.  It was easy to understand, allowed low level access to things like memory, and was fast.  C did a lot to change how people looked at programming and made it slightly easier for people to write code.  One might equate going from Assembly to C is like going from C to Java (or C#).  There’s just that much difference in how easy it is to get things done that a whole new level of people can program.

Why C is Still Relevant

So in today’s languages, a programmer does not have to concern themselves (too much) with memory management, or even performance (not like before anyway).  Computers are so much faster and come with so much more memory than before that things like memory management and maximizing performance are not top considerations anymore.  Use to be, you had to pay attention to memory because you had less than 1 megabyte of it.  Your processor weren’t as fast so every computation had to count in a big way.  But in languages like C# or Java, these aren’t top concerns.  Both have garbage collectors (that you as a programmer can’t directly control), they both run on top of their own runtime so there’s an added layer when it comes to running the application.  Both C# and Java are extremely high level languages, a lot of stuff is written for the developer already and so both have awesome libraries ready for use.

But could you write an operating system in C# or Java?  Even if you could, should you?  If you need something to run its fastest, shouldn’t it talk to the hardware as directly as possible?  This is where languages like C (and even C++) come in.  The C language doesn’t run on top of a runtime.  It compiles into machine code, not Java Byte Code or IL code (C#).  There are performance gains to using a language like C when writing drivers, massive computation programs, and even libraries.  The less your program as to go through to talk to the hardware, the faster it’s going to be.

Caveats

Of course, a language like C comes with its own set of problems.  For starters, there is no such thing as garbage collection.  When writing applications in C, you have to make sure you take care of your memory, and you have to do so in an efficient and correct way.  Otherwise you get memory leaks which can cause performance to degrade.

Working with C is no different than working in any other language, you have to know how to use it.  You have to make sure you write good clean code, handle your memory correctly, and make your calculations count.  You can write bad C code, just like you can write by Java code.

Conclusion

I think to tell someone that they shouldn’t bother with C does a disservice to programmers. Programmers should know and understand where their languages come from. The Java and C# languages are heavily rooted in C. But I think the idea that it is better to code something in C# rather than C (or C++) is a misnomer, and other facts need to be considered before such a statement is made. If you’re interested, I found some benchmarks at Dr Dobb’s website for Java, C#, and C++. Give them a look to see what kind of performance you get out of the various languages.

Posted in programming | Tagged , | 2 Comments

Continuous Integration Workshop

This past Saturday I had the (scary) privilege of running a workshop on Continuous Integration.  The workshop was put on by the Houston Alt.NET Group at the Houston Microsoft office.

The workshop covered many topics including Martin Fowler’s CI Principles, source control using Subversion and Git, NAnt, and TeamCity.  While there wasn’t a ton of “workshop” related activities for the participants to do, all the topics mentioned were covered in-depth.  With lots of on screen demonstrations (so some of the slides from the presentation are lacking in actual content).

Video was taken of the event and if that ever makes in online, I’ll be sure to post it for everyone to see.  In the meantime, you can look at the presentation slides in either PDF or Powerpoint formats by click on the links below.

Houston Alt.NET Continuous Integration Workshop (PDF) (PPT)

Posted in programming | Tagged , , | Comments Off on Continuous Integration Workshop

C Bitwise Operators

When I got laid off I decided that I had some extra time to finally go through the book “The C Programming Language” by Kerninghan and Ritchie (aka “K&R C Book”). I got through the first chapter without too much issue but the section on bitwise operators in the second chapter had left me stumpped. Most of the stuff on bitwise operators is easy to understand, but when you start trying to do the exercises you realize that the book’s content on this subject is a little lacking for what the exercises want you to do. I’m going to spend some time today going over bitwise operators and hopefully help any future would-be C developers understand this subject. Continue reading

Posted in programming | Tagged , , | Comments Off on C Bitwise Operators

Properly Using Twitter & FriendFeed

Over the last few months I’ve been using FriendFeed more. It took me some time (as it did with Twitter) to figure out how to utilize the service in a way that worked for me. Here’s what I found worked for me. Use Twitter to follow those you know, sprinkle in a few that you don’t but mainly keep for those you really know or are related to your field. What you want to use FriendFeed for is everything else.

I’m a .NET developer by trade, its my job and software development as a whole is a general interest. So as a result I’ve kept my Twitter follow list closely to those in that field. Sure there are people I know personally, people I work(ed) with, and a few social media people I find interesting. But if you were to look at my following list, you’d see mostly developers if it’s not someone I know. This keeps my Twitter feed relevent to me because it’s my friends and my field. But since programming isn’t my only interest, I use FriendFeed to fill in the holes for my other interests.

I like keeping up with social media, Web 2.0, general technology that’s not necessarily related to software development. So I use FriendFeed to follow highly prolific folks who would otherwise overrun my Twitter stream. People like Robert Scoble, Louis Gray, Om Malik, Michael Arrington, and other bloggers and writers that if I were to follow on Twitter would cause my friends and those in my specific field to be lost in the mix because they just post so much stuff. I don’t want to miss that stuff though, so I use FriendFeed to see it and comment on it. FriendFeed also has “groups” which allow you to follow things in a more organized manner should you need it. There are several user created groups so you can follow areas of interest which brings in more items.

Basically to boil it down, I keep my Twitter stream fairly focused while my FriendFeed stream is anything but focused. FriendFeed is for those that desire information overload. When I don’t have time for the information, I can simply not go to the FriendFeed page or open the desktop application I’m using for it. When I’m done with work I can log into FriendFeed and the more popular stuff is going to be towards the top so I will always get the best or most controversial news items because FriendFeed moves them to the top when new likes or comments appear on a specific item.

FriendFeed is a nice service but its purpose is vastly different than Twitter and that can take some getting used to. Hopefully this helps a few people use FriendFeed more since it can be a little hard to figure out, especially if you’re coming from Twitter.

Posted in Technology | Tagged , , | Comments Off on Properly Using Twitter & FriendFeed