What’s the dealio, yo? (or, why write FOSS)

2010.03.06

If the post title is lost on you I recommend you stop reading this, go watch Zoolander then come back and read this.  Much like viewers of Zoolander either seem to love it or want their 2 hours back, open source  software seems to be viewed in two ways, there are the authors that love contributing and being a part of it and there are those software developers that don’t seem to see why anyone would want to contribute to something for free.

I’m certainly from the school of like on both.  I think Zoolander is an amazing comedy that gets funnier every single time I watch it (I’ve seen it over 10 times at this point).  I also love writing and contributing to open source software.

I think people generally get started contributing to open source in similar ways.  The software you want is either not available or expensive or you need to extend something that already exists and is open source.  I got started writing free open source software (FOSS) when I wanted a twitter app for my windows mobile phone.  This was ages ago when there weren’t many third party apps especially for mobile and the timeline was restricted to 20 requests per hour.  The great thing is I got to write it exactly how I wanted it.  I got quite a bit of feedback from users, some great and some frustrating.  The nice thing about it being free software though is there’s no motivation to please everyone and if someone wants to have a particular feature added in you can certainly branch the source and add it in your own copy or contribute it back to the original copy.  This is true of most open source projects.

I get asked pretty often what I get out of it.  There are certainly good and bad sides of writing and contributing to open source.  I think your exposed to more of the bad if you write and distribute a piece of open source software for end users than if you are contributing to a larger project.  Lets break down some of the advantages.

Great Stuff:

  • You learn a lot about your desired platform (remember you chose to work on this, free will!)
  • You get an chance to have your source commented on and learn to improve it
  • You can save someone else time who has to do the same thing (make your code reusable!)
  • By reducing others time doing the same tasks the result is everyone has more time for new ideas/software
  • Self satisfaction that you created something you can use and that other people value
  • Increased organizational skills, you become a master of saving yourself time
  • You’ll make new friends with common interests that are brilliant and push you to improve yourself

There are tons of positives beyond this list, but there is also a darker side to open source software that can drive you crazy as a developer.  Lets take a look at some of the downsides.

Suckie stuff:

  • You get a lot of feedback like this -> “This thing sucks” and that’s it, no details or comments on how to improve or fix whatever issues caused the problem.  This is one of the most frustrating things for me as an open source developer
  • You’ll invest a decent amount of time developing things for little or no financial return
  • You have to spend extra time documenting and hardening your software since it’s for mass use
  • If your blazing new ground you might have trouble getting help
  • You’re probably your own support staff

If you’re not currently contributing to an open source project I can’t recommend it enough.  If you’re using open source software and don’t think you have it in you to start something from scratch see if you can contribute to an existing project, there’s always bugs waiting for developers to fix them.  Don’t be afraid to modify an existing open source project for yourself either if you want a new feature it’s pretty likely that others do too.

“For Serious.”

–Darek Zoolander

PlainNote Progresses

2010.03.04

201003041553


Work on PlainNote is continuing. Eventually it will hopefully turn into the PlainNote ecosystem. I’m currently working on a sync library to sync up with a server that doesn’t exist yet. The server side is going to get some help from @funkatron. We have been collaborating on a google doc for the API.


Notable Items about the API


  • Try to be RESTful, but don’t get stupid about it
  • JSON is much better than XML, so only support JSON initially
  • This needs to be open and hostable by others, so don’t use closed-source tech to power it
  • If we’re worried about security at all, we should probably run this over SSL, since we’re sending account identifiers. That does make the backend stuff a little more complex, but doable. I wouldn’t worry about it at first.

Current Methods include

  • login
  • all (get all notes from the server)
  • list (get an abbreviated list of notes from the server)
  • one (get one note from the server)
  • update (update a single note on the server)
  • updatemany (update several notes on the server <future>)
  • delete (delete a note from the server)

In the interest of being open I thought I’d get some information out there on what we’re working on. The ultimate hope would be to have the ability to view and edit notes across any device as well as the web and have it all play nice together. There are a lot of timing issues to think about as far as updates on multiple devices without sync. For simplicities sake I think our current direction is going to be take the latest edit as master and not try to merge.



Good things to come shortly…. (like the below WebOS version of PlainNote)


201003041602

Categories : Apple   iPhone

PlainNote updates and instaPaperLib Rocking updates!

2010.02.21

I’ve been doing some more work on PlainNote and added several fixes and features over the past week.  There is now protection code in case you exit the app while editing via the home button or get a call or sms and exit to deal with those your note will be autosaved.

I also changed the mail button on the note detail screen to an action button which now shows two actions.  The original action of "mail" to mail your note and a new action of instapaper which will send your note to instapaper.com.  This is a fast way to get your note online and you can pick it up via their website or in your rss feed if you subscribe to your own instapaper feed.

While creating the code in PlainNote for posting to instapaper I created it as a stand alone library so it could be included in other applications and have open sourced it.  The code is available at github here.  It’s pretty easy to use and you basically instantiate the library and then call one call to send it all to instapaper and you get a Yes or No back indicating if it went alright.

instaPaperLib *IPLib = [[instaPaperLib alloc] init];
BOOL response = [IPLib postToInstapaperWithUserName:@"username"
                                        andPassword:@"password"
                                            andBody:@"sample text snippit"
                                             andURL:@"http://www.somesiteurl.com"
                                           andTitle:@"Your post title"];

The new binary for PlainNote was also submitted to Apple this afternoon and hopefully it won’t be more than a day or so until the app is updated with these new features on the AppStore.

AppStore: Rejected

2010.02.12

Posted PlainNote for review two days ago and got the rejection notice last night.  I used an action button to spawn the mail view and this was against user interface guidelines.

Just a quick swap to a text label and resubmitted it.  For future reference if your trying to do something that isn’t an action button don’t use this:

use this:

Or map a custom image to your button which is also possible.  Hopefully in a couple more days it will be available.  I’m encouraged by how fast it got reviewed though that was only about 48 hours vs my previous submissions taking over two weeks.

Exciting things

2010.02.10

The Lowdown

I’ve been working for a few weeks on a pretty basic note pad application for the iPhone.  It’s called PlainNote.  It’s got a basic set of functions and should be as usable as the built in note pad that comes with the iPhone.  Initially the functionality will be very basic and allow for standard notepad use.  In the future I plan to expand it with online syncing, change the storage method from plist to a database, perhaps some basic themes (probably just reverse white text on black).

Initial Features:

  • Create / Update / Delete notes
  • Sort by date so newest notes are always at the top
  • In App mailing of notes

Vision

I had a goal in mind when I started PlainNote of learning to code something that used a UITableView and to write it in Objective-c.  I’ve always had the intentions of releasing the source for PlainNote so that other people could see how I accomplished certain tasks such as storing dates in a plist, sorting an array by date, in app mail etc…

The app store reviews should be interesting on this one since it is just another note pad.  Hopefully people will get that it is an open source project so other budding developers can see how to accomplish things in Objective-c but I don’t have high hopes for that.  The reviews seem to be a pretty mixed bag on applications.

I submitted it to the AppStore on 2/9/2010 so lets see how long it takes to get there.

Facebook advertiser privacy nightmare

2009.07.24

Facebook has chosen to allow 3rd party advertisers to use of your uploaded pictures without permission as a default.  Basically this means that your face/avatar may show up in a singles ad on your friends pages.  It would have been nice if Facebook set the default to “no one” but they have chosen to enable this use of your photos by 3rd parties by default.

Managing your privacy on Facebook is a confusing difficult process and something you would do well to take a look at.  There is a good write up at mashable on this subject.

You can disable the advertisers use of your photos by logging into facebook and selecting Settings -> Privacy, then choose  News feed and Wall.  There are two tabs there select the Facebook Ads tab and select “no one” and click save.  Your photos will now not be shown in 3rd party ads.

Picture 2

Categories : tips

MyWebClip mini review and AppStore rating idiocy

2009.07.20

Picture 8One of my favorite iPhone applications is MyWebClip from forYou inc.  It’s a bookmarklet aggregator as well as a quick dial application.  It’s a very nice way to link to frequently used web applications and I find it a lot easier having them all categorized in one place without having to dig through my screens for a specific icon.  It’s nice knowing all web applications are in one place.  I find it fast and very well written to act just like another screen of icons on your iPhone.  It gives me quick access to my home automation whic his web based, full screen weather maps from weather underground, google reader etc…  You manage it just like the regular iPhone application icons by touching and hold to bring up the X to delete items and you can add items by URL or by browsing and then adding like a bookmark to create an icon.  I have very few applications I use multiple times a day and this is one that I wouldn’t want to live without.

I got an upgrade today that had a few nice new features:

  • browse with google mobile proxy
  • shake for full screen view
  • numerous bug fixes

While I haven’t had much trouble with any bugs or crashes it’s nice to see them keeping up with some updates.  I was happy to get the update but I was disappointed to see a 17+ rating on this application when I installed it.  I would guess this is due to the application being able to access the web from inside of it but this is no different than safari which ships with every iPhone.  Should we restrict iTouch and iPhones to anyone over 17 due to them shipping with Safari?  There have been countless articles about the idiotic and inconsistent ratings of the AppStore but this is the first one I had personally experienced vs just reading about it so I thought it was worth a mention.  This application should be rated general for everyone and I feel like it got a bum rap with an adult rating.

Picture 7

Categories : Apple   Review   iPhone

Griffin Clarifi iPhone Scratch Warning

2009.07.15

I love my Griffin Clarifi, I’ve got about 8 iPhone cases and it’s by far my favorite one but I’ve recently acquired an inCase Power Slider so I removed my Clarifi for the first time in several months to put my iPhone into the Power Slider and I was disappointed to see that the Clarifi and given my iPhone a nice set of scratches.

clarifi

You can see to the left of the lens in this picture (click for a bigger size) that the macro lens on the Clarifi sliding back and forth has put a nice set of scratches on my iPhone.  I’m sure that the Clarifi on a clean phone is fine and doesn’t lead to scratches but after a bit of time in and out of your pocket/purse your phone picks up some dust.  Since there is nothing between the sliding lens and the phone dust builds up in there and the sliding action plus the dust creates an ideal environment for scratches.  I’d like to see a future iteration of the Clarifi put a plastic shield between the sliding lens and the phone body to prevent the lens from sliding on the phone body.

Below is a picture of the inside of the case where you can see the sliding lens back exposed to the phone body.  As you move the lens back and forth that slides on or very near your iPhone body and small dust or dirt particles between it and your phone will create the scratches.  As I said above a thin layer of plastic and push the lens out slightly further from the phone would solve this.

Picture 4

At any rate I still love my Clarifi and have and will continue to recommend it to many people with this one caveat.

UPDATE:

I got a response from Griffin via twitter which was a bit disappointing.  My other 8 cases haven’t scratched my phone after using them for a few months.  Anyway, I just wanted to include it here for reference sake.

clarifiresponse

Categories : Apple   Review   iPhone   tips
Tags :   

TTYtter group support library

2009.06.26

As referenced in my previous post I’m a pretty big fan of TTYtter.  I won’t go into it’s advantages here you can find that information in my previous post.  I follow quite a few people so one of the first things I did when I started using TTYtter was to write a group add on library for it.  The previous post and the TTYtter site have good information on how to enable these libraries and also how to write them.  This library is pretty good size and performs quite a few operations that I thought would be a good example for someone else looking to extend TTYtter for their own use.

Operations:

  1. Custom commands for handling groups
  2. Bookmark of tweet id for place tracking what already was evaluated
  3. Filtering based on dynamic lists of users
  4. Add users to groups from inside TTYtter
  5. Remove users from groups inside TTYtter
  6. Add users to multiple groups

The easiest way to get started is to install this and get it going.  Download the library from svn and modify the one configuration item at the top of the library to set the group file storage path.  Reference the library from your .ttytterc file or use the library command line switch.

Once loaded you might want to have a look at the command set supported out of the library, there is built in help accessible from within TTYtter

/grouphelp
Group commands are as follows.

/group [groupname]
display stored tweets from group

/groups
list the current groups on the filesystem

/grouplist [groupname]
list the members of group [groupname]

/groupadd [groupname] [username]
add [username] to group [groupname]

/groupdel [groupname] [username]
delete [username] from group [groupname]

At this point you can add some users to a group via something like the following command which adds myself to a group called coders.

TTYtter> /groupadd coders vkoser
User vkoser added to group coders
TTYtter>

Once you have some groups built up it’s really easy to view them in TTYtter by using the /group coders command to list the last 20 tweets from that group.  That’s reasonable if your activly using TTYtter but it’s much more useful to use something like GNU Screen to view multiple groups and assign one screen section per group.  I typically set mine up with split windows and a large scrollback buffer configuration which lets me scroll back through pages of information.

I hope someone can get some value out of this as a learning tool and possibly expand it for your own use.  It’s not overly error proof as an add on for my own use but it works pretty well.  If anyone would like to submit changes or enhancements to the library just send them over to me or contact me on twitter and I’ll see about getting them migrated into the library.

The current release can be gotten here [TTYtterGroups.pl] from the svn repository.

Categories : tips   tools
Tags :     

extending TTYtter

2009.06.15

One of my favorite twitter apps is @TTYtter and you can download it from floodgap.com.  It’s written by Cameron Kaiser aka @doctorlinguist on twitter.  Now before we get all crazy and discount TTYtter because it’s not a fancy graphical application with sliding panels and lots of things you can click you need to understand why this is a great tool.

  • Scriptable (make your own search/harvesting tool)
  • Schedulable (run it, grab search output dump to a file etc…)
  • Automate posting information (use it to tweet your coffee pot status etc…)
  • Extensible
  • Open Source
  • Easily runs on almost all varieties of Unix

There are many other features but if your prone to requiring a mouse to interact with a computer this might not be a good fit for you.  It’s the idea of extensibility that I’m going to discuss in this post.  TTYtter has a really nice way to extend it’s functionality or override it’s default behaviors.  One of the things I like most is the ability to just change how it behaves.  If your using an open source client you could just modify the source but then your stuck with what to do when there is an upgrade you have to integrate your changes into the new version if they weren’t something that was accepted back into the project distribution.  TTYtter uses a user defined library that is loaded from your own file.  You can specify a library at runtime that will be loaded with TTYtter that gives a user the opportunity through the use of a little perl to extend or alter the default behaviors.  The big win for this architecture is if a new version of TTYtter comes out it still just loads your custom user library and you get all your customizations with the new version.

I’ve recently fallen back in love with iChat on the mac after finding a nice plug-in that allowed a unified contacts list and I’ve grown used to the time stamp format.  I wanted to add this time stamp format into TTYtter.  There is a default provided time stamp option on TTYtter but it places the time stamp on each tweet which really adds to the width of the displayed line.  I had the idea to create a time stamp that inserted itself every 5 minutes or so that would give me an indication of 5 minute blocks of tweets and also let me find my place if I’m away from my desktop for a meeting or something so I can scroll back to unread items.

Picture 9

You can see in the above screen shot there are two displayed timestamps in the form of “–Mon Jun..”.  The small library I’m going to discuss here inserts those time stamps into the listing of tweets.  This probably isn’t the most elegant way to handle this but it does give you a preview of the type of alterations you can do to TTYtter with your own libraries.

Lets take a look at the code:

$handle = sub {

my $delayInSeconds = 60 * 5;

#load the Lib_past with current time on first run
if(!$Lib_firstrun){
     $Lib_firstrun = true;
     print "Seeding timestamp generator\n";
     $Lib_past = time;
}

#if we have elapsed $delayInSeconds then print a time stamp
if($Lib_past < (time - ($delayInSeconds))){
     $Lib_past = time;
     print "--" . localtime time . "\n\n";
     print "\n";
}

#this allows TTYtter to handle displaying the tweet normally
my $ref = shift;
&defaulthandle($ref);

return 1;

};

The above code is fairly self explanitory but lets take a look at whats happening.  You want to save this code into a file, ichat.pl for instance might be a nice logical choice.  Then when launching TTYtter you need to specify -lib=ichat.pl and this will load your library along with TTYtter.  The above code will be called every time a tweet is received allowing you to customize and extend what happens at that time during code execution.  The last two lines of code are of interest because those two lines allow TTYtter to handle the tweet display as it normally would.  If you want to modify how the tweet is displayed you have full access to do so and override the default behavior.  This is useful for modifying how details are shown, for instance you could add the source client information if you like.  For this library we just want to display our custom time stamp so we’ll let TTYtter handle the tweet display.

You can read all about this advanced use of TTYtter at the website where it is documented.  I encourage you to play around with it it really is quite fun to get things working just the way you like.  I have a much more complicated library that allows me to group users and filter those users tweets into files.  It also allows for group management within TTYtter via custom /commands.  I’ll post details on that in the coming days and add it to the software download page.

Categories : tips   tools
Tags :