Saturday, July 21, 2012

Autoretweet from Twitter list

It's finally there!
We've just released new feature for RoundTeam which allows you to automatically retweet from any public Twitter list.

Using this feature you can autoretweet all feed generated by particular list on Twitter. You still can filter it by #hashtags, @mentions, or keywords.

Of course, retweeting from followers, following (those who are followed) and all Twitter is there as always.

More about how to use and configure auto retweet from Twitter list here: http://roundteam.co/faq#faq14

You are welcome to give it a try, it's a big fun :)

Like us on Facebook: http://facebook.com/RoundTeam
Follow us on Twitter: @RoundTeam
Visit our web-site: http://roundteam.co

Sunday, July 8, 2012

Design and implementation pattern

One of my favorite approaches to design and implement new application components is the following:

I start with the public interface of the component, defining how it will communicate with the other app components and external world.

This provides a vision of how future component will be integrated into the application.
Then I continue with writing a skeleton for "business" methods. These methods are usually very high-level, they don't have complicated parsing, validation, operations with DB etc. Usually all such methods are quite declarative and can easily be read. For example:


public function add(Team $team, $allListItemStr) {
$listItemsToAdd = $this->parseAll($allListItemStr);
$listItemsExisting = $this->allByTeam($team);
$newItems = $this->findNew($listItemsExisting, $listItemsToAdd);
foreach ($newItems as $newItem) {
$newItem->setTeam($team);
$newItem->save();
}
}


This is simplified example of one of the components of RoundTeam web-app responsible for adding new list items.

So, I start with writing such skeletons for each public interface method. It helps to identify the workflow of these methods, extract future common helper methods etc. Nothing more is done at this point. Such methods like "parseAll" and "findNew" are not yet implemented.

This process can take several recursive steps in depth when one of the methods used in public interface methods requires invocation of several other methods to work etc.

Once this work is done, full component architecture is visible. How it will communicate with outer world, what is the workflow of the business logic methods etc.

After that I start writing actual low-level code like parsing, DB operations from the very bottom. From the most low-level methods. Those methods can usually be easily unit-tested since they are "atomic" meaning they don't rely on other complex methods etc. Those methods are implemented and covered with unit-tests one by one, level by level, until the most high level business logic methods actually start to work. At that point usually it's also easy to cover them with unit-tests, since all methods they rely on are already implemented and unit-tested.

This approach of course has it's own boundaries, but in general it's quite commonly used in my development.

One of the pitfalls here, is to think in advance about the error handling. How errors are going to be propagated from the low-level methods and influence the behavior of the high-level methods. If one missed this step in the beginning of design phase, there is a risk whole architecture should be re-done in the middle of the implementation stage.

Monday, April 30, 2012

RoundTeam: Objective


Have you ever faced a situation that you'd like to share tweet with particular group of people, but don't want to follow each of them directly on Twitter?

What if you'd like to target your tweets to different Teams, not individual team members? Team is every group of people which has common interest(s), such as classmates, football team, neighbors, ornithologists of New York area, or any other.

Team members may come and leave, however Team stays the same. This is another reason to keep connection to the Team in general, not to each individual team member.

RoundTeam is free autoretweet service, a Twitter application, which invents a concept of a Twitter Team. Team is just an account from Twitter perspective, but it represents an interest or group of interests, not an individual person.

So, there are four simple steps to leverage Twitter in a new way:
  1. Choose existing or create new Twitter account to represent your team.
  2. Add this account to RoundTeam -- free online retweet service
  3. Specify what and from whom to retweet. It can be #hashtag, @mention, or just a keyword.
  4. Invite people to follow your Team on Twitter
Now every time there is new tweet on Twitter which matches the criteria of the Team, this tweet will be automatically retweeted. Thus all Team followers will see this tweet in their Twitter timeline (or even get an SMS on their cell phone).

Some of the benefits of this approach:
  • No need to follow each team member directly. Individuals may join and leave, commmunity tweets are still delivered to those who are interested.
  • This is better than Twitter "saved search" because saved search cannot send SMS to your mobile device once new tweet is available. Also saved search is something that each team member have to configure on their accounts.
RoundTeam mission is to create communities on Twitter. Such an islands of precisely targeted tweets in the world ocean of Twitter data.

Visit RoundTeam at http://roundteam.co