Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/migueldeicaza/TweetStation

MonoTouch based Twitter client
https://github.com/migueldeicaza/TweetStation

Last synced: about 1 month ago
JSON representation

MonoTouch based Twitter client

Lists

README

        

TweetStation

TweetStation was originally a sample program that I created
for my own use. I was a fan of the older UI in Echofon and
liked many of the elements of Tweetie2, but like every
programmer, I wanted to make some changes.

It was also a test bed for testing APIs and answering
MonoTouch users's questions. It is the original application
that lead to the creation of MonoTouch.Dialog, as I figured
that there should be a better way of constructing dialog boxes
than creating models and delegates left and right.

TweetStation is an open source, MIT X11 licensed twitter
client written for MonoTouch. See the file LICENSE for
details.

I setup a web site at: http://tirania.org/tweetstation as
the oficial user-centric web site for TweetStation.

The official description for the app is on TweetStation.txt

Building
========

To build TweetStation, you will need a side-by-side
MonoTouch.Dialog release, since they are co-developed,
you will likely need the latest version.

Design Goals
============

These design goals are just some basic principles, but like any
other project, they change depending on my mood each day or when
faced with harsh realities.

The Murray Hill Style

For years researchers from Bell Labs at Murray Hill published
various computer books on C, Unix, compilers and design that
were incredibly succinct. They were amazing pieces of code
that were short and concise. I call this style of code the
Murray Hill style.

The TweetStation code was not designed to be incredibly
extensible or reusable as-is. I wrote this code to be succinct
and short, if it is reusable for other projects it is an
unintended side effect.

If you want to reuse code from TweetStation, you will likely
want to alter it to suit your needs.

Exceptions

The code uses try/catch extensively in the code in areas that
have to process data from twitter, I assume that the data
might be broken or that my original assumptions or their
documentation might be wrong. You will notice in the code
that all exceptions are printed out, I want to keep that this
way for that reason.

MonoTouch.Dialog

Most of the UI was created with MonoTouch.Dialog and various
custom views and Elements designed for twitter. There is not
a single UITableView coded in the traditional style.

Memory Usage

In some parts of the code I tried to minimize memory usage by
not creating thousands of objects that would be thrown out
(Tweet parsing for example), so I just recycle some instances
sometimes.

The ImageStore is also specialized for Twitter use, for instance
the keys kept in the cache and on the file system are keyed by
a long value and not by the URL, so we are not forced to keep
the strings for the Urls in memory.

A general purpose image downloader/cache would use URLs or
something else.

Singletons

There are a handful of singleton classes as well, I tend to
reset those instead of creating new instances as they would
avoid creating expensive objects or objects that are known to
leak in CocoaTouch anyways.

Pending Task Queue

I never know if a tweet has been starred or not when there is
no network connectivity. With TweetStation all the pending
requests are kept in a queue and flushed at periodic intervals.

This is used both to post tweets and favorite posts, allowing
the settings to take place right away, even if there is no
network connectivity

Implementation Notes
====================

In the original TweetStation, I ended up doing a of database
operations on the main thread, as opposed to doing it on a
background thread.

I am moving towards locking the Database.Main to allow the
parsing of initial tweets to take place in the background

OAuth and xAuth
===============

TweetStation supports both OAuth and xAuth authentication from
twitter. Currently the source code is hardcoded to the values
that I obtained by registering my app at:

http://dev.twitter.com/apps

It uses OAuth by default and it does this by opening an embedded
UIWebView to let the user enter their login and password and
granting the user authorization over at Twitter's site.

To improve the experience, Twitter offers access to xAuth, but
this requires application developers to request from Twitter
special access, you can enable this for your code if you
negotiate this.