Categories
About

Nodeta is a software development company that focuses on web software. We employ a highly agile and effective process. We have worked both on light independent projects and in the environment of large global enterprises.

Archives

Flowdock screencast (+700 new invites!)

Mikael Roos, January 20th, 2010

It’s been a crazy busy winter as we’ve been developing our shiny new group collaboration web app, Flowdock. Up till now, we’ve had about 100 teams trying out Flowdock and today marks the moment when we ship out over 700 more invites to people who want to see how Flowdock could make their teams’ lives easier. Haven’t requested an invite yet? Add your email address at flowdock.com.

Here’s something brand new right off the presses: a Flowdock screencast, showing the most important and interesting parts of the app, briefly illustrates how Flowdock can make your teamwork immensely more efficient and simply flowing.

In the following days we’ll be posting about some new things we have in store for our users. So, stay tuned! Also, check out @flowdock on Twitter and our Facebook fan page.

Flowdock went Silicon Valley

Mikael Roos, November 5th, 2009

Me, Otto and Karri spent last week in California around the Bay Area promoting Flowdock and making connections. With us we had veritable crème de la crème of young Finnish entrepreneurs, including the founders of Powerkiss, award winning independent iPhone app developer Elias Pietilä (now from Qvik), and the CEOs from GrowVC and Mysites amongst others.

We had a great time, met awesome people and owe big thanks to the organizers of the trip, Aalto Entrepreneurship Society plus ArcticStartup. We especially want to thank Kristo Ovaska, Krista Kauppinen, Riku Seppälä and everyone who made the trip possible and awesome.

Flowdock went to Silicon Valley with AaltoES and ArcticStartup

Flowdock Press

We did a lot of press contacting to prepare for the public launch of Flowdock later this year and even gave an early video interview to ArcticStartup. Amongst tons of meetings we met with an insightful lady, Tanja Aitomurto, who blogs regularly to Helsingin Sanomat here (in Finnish) about what’s buzzing in the Silicon Valley and got to demo Flowdock to her and get her feedback.

We were also interviewed by Skype Journal in a bit of a controversial situation, where we ended up criticizing Skype as a collaboration tool for its lack of ability to make anything useful out of the information gathered with it.

From Silicon Valley we dove straight back into the slush of Finland’s beginning winter and Slush Helsinki 09, the aptly named startup event where we demoed Flowdock live to the public hordes for the first time ever. Here’s a video interview with Karri pitching Flowdock in Slush by FreejamTV.

How tags changed the way we work

Otto Hilska, October 28th, 2009

Flowdock is a real-time collaboration web app directed to teams. It allows co-workers to work together closely and coexist in the same space within their browser. Right now it’s going through an alpha stage where some 10 companies are trying it out and giving feedback.

The public beta is to be expected later this year. Before that we want to share some of the ways of using Flowdock with you. Today I’ll show you some ways to use one of the coolest features in Flowdock, tagging.

Lowering the barrier

We’ve noticed that lots of useful content is generated in instant Messaging, e-mail, Twitter and other medias. In a couple of minutes it may be totally forgotten, because it’s in no-one’s interest to structure that data to a wiki page, or even worse, to a Word document.

Imagine if logging a simple bug would mean just writing a short description to your group chat and ending the line with a #bug hashtag? With Flowdock’s team chat, that’s exactly how it works.

Flowdock team chat with tags

Tags can be added as hashtags or afterwards with a separate UI by anyone in your team. This helps you to ensure that all relevant content is tagged properly.

Information always accessible

All tagged content, including chat, files, content from e-mails etc. can be found using Flowser, an app-in-app of Flowdock for information management. When a bug is closed, for example, the user can simply remove the #bug tag.

When I’m looking for a screenshot of Flowdock for a blog post, I’m going to open Flowser and search for #screenshot. If I wanted to find screenshots only about our future promo site, I could just search for #screenshot #promo.

Searching for screenshots in Flowdock

All this has truly changed our way of working. Now I’ll never forget who’s managing contracts at one of our customers, because that information is tagged in our flow. And tagging that information didn’t cost me anything.

Meet Scalandra: Scala wrapper for Cassandra

Ville Lautanala, August 28th, 2009

Developing Flowdock, a real-time environment allowing teams to work together seamlessly, we needed a database able to scale horizontally for huge amount of write operations. Cassandra’s data model and performance characteristics made it a perfect fit for our needs. It is a distributed database with a data model slightly like Google’s BigTable. Cassandra was originally developed by Facebook to run their in-site messaging system, Inbox. If you want to learn more about Cassandra, Evan Weaver’s up and running with Cassandra is a good place to start.

In the beginning of July when we started to use Cassandra, there wasn’t any usable bindings for  Scala, which we use for Flowdock back-end, and hence we decided to develop our own. Two months later, the Thrift API is barely recognizable, but still bag of hurt in Scala. Others have also noticed this and developed their own bindings for Scala, but they all have slightly different approaches.

In Flowdock we use Scalandra to handle three tasks: wrap the Thrift API in a more painless interface, manage connections efficiently using a pool and to serialize and deserialize byte arrays, which are used in Cassandra to store data. In Scalandra you can use three levels of serialization to support all possible combinations of different data types in Cassandra data model.

Scalandra has two levels of interaction. At the lower level, it provides a similar API to the Thrift interface with commands for get, slice, insert, remove and count operations. Client API is meant to be used together with connection pooling to make sure that only a reasonable amount of sockets is opened. Unfortunately for our purposes, Scala doesn’t have RAII and because of that connections have to be managed more explicitly.

Assuming that we had a Cassandra instance running at localhost and it is configured to contain a standard column family “Users” in keyspace “Keyspace1″, we could use the Scalandra API to insert and read data like the following example.

import com.nodeta.scalandra._
import com.nodeta.scalandra.serializer.StringSerializer
import com.nodeta.scalandra.pool.StackPool

val pool = StackPool(ConnectionProvider("localhost", 9160))

pool { connection =>
  // Let's create a client which assumes everything is a String
  val client = Client(connection, "Keyspace1", StringSerializer)

  // Let's insert some data to Cassandra
  client.insertNormal(
    ColumnParent[String]("Users", "jsmith"),
    Map("first" -> "John", "last" -> "Smith")
  )

  // Slice all results from Column Parent
  // None parameters are lower and upper bounds for slice
  client.slice(
    ColumnParent[String]("Users", "jsmith"),
    None,
    None,
    Ascending
  )
  // Returns data from previous insert

  client.get(ColumnPath("Users", "jsmith", "first"))
  // Returns Some("John")

  client.get(ColumnPath("Users", "jsmith", "nonexistent"))
  // Returns None
}

As the Casssandra data model is basically a multi-dimensional map, we’ve built a Map-like interface to Cassandra. It is not very polished in its current state. Mutations work, but are not always intuitive to work with because they might require a Scalandra Map object as parameter. Using the previously inserted data, the map model could be used like this:

import com.nodeta.scalandra.map.StandardRecord
import com.nodeta.scalandra.ColumnParent

class User(protected val connection : Connection, key : String
 ) extends StandardRecord[String, String] {
  protected val path = ColumnParent[Any]("Standard1", key)
  protected val keyspace = "Keyspace1"
  protected val columnSerializer = StringSerializer
  protected val valueSerializer = StringSerializer
}

pool { connection =>
  val user = new User(connection, "jsmith")

  // User is basically the same map as inserted before
  user("first") // returns "John"

  // But also, slice actions exist
  user.slice("bar", "foo")
  // Returns Map("first" -> "John")

  // Insert value
  user("age") = "53"

  // John doesn't need to have a last name so let's remove it
  user -= "last"
}

Scalandra Git repository is located at Github. We’ve also generated Scaladocs to help with usage information.

If you have any comments or use this, please drop us a line. Also, patches are welcome :)

Flowdock update: Time-lapsed daily scrums

Karri Saarinen, July 21st, 2009

A quick update. Along with elegant git branching, we’ve been busy taking Flowdock forward.

To show you a bit about our processes, we have been recording our daily scrum stand-ups and now compiled it all to a single time-lapsed video.

As you can see in the video, in start of each sprint we have our stories, represented as white A5s and tasks as Post-its on the left side of the whiteboard. Stories are prioritized from top to down, top being the most important.

When a task—for example, “make a time-lapse video”—is put on the board, it’s moved from left to right according to the approximate amount of work done, measured in Zörgöns. On the most right is the “done” column, where tasks regarded as complete are moved.

Video holds about 4,5 sprints (10 weeks) of daily Scrums in 30 seconds. Check it out below.

Read the rest of this entry »

Announcing Flowdock – Real-time collaboration for teams

Karri Saarinen, July 5th, 2009

Flowdock
Today, we are happy announce our next product, Flowdock.

Flowdock is a real-time collaboration app that lets you work together as a team and talk things over smoothly and easily, all in the web browser.

What we want is to create a place for your team to share thoughts and work with each other, either formally or more casually over the web without the hassle of installing clients, fiddling with user names or zapping your productivity with annoying interruptions.

Armed with unobtrusive group messaging and a JavaScript platform for real-time collaborative apps, which we hope to help your team focus on your real goals. Flowdock can be used by just a one team or group inside your company—converting the whole company is not necessary.

In addition, Flowdock will present a full-fledged API at the disposal of third-party developers, allowing everyone to take advantage of our collaborative platform to the fullest extent.

Making web collaboration work

We are really excited about how Flowdock could change the process of communicating and working together at the office. Anyone working in a company without an IRC channel knows how hard it is to do even the most basic things like sharing interesting (*cough* youtube) links or figuring out the time and place for a lunch.

Also, when you’re drafting an important document, the chances are there are several people to have their say about it. Without a smart version control,  it’s rather painful. You send the document back and forth and at some point, somebody drops the ball and you’re all confused about which is the most recent version.

Usually you don’t know that well what others are doing unless you’re practicing Scrum, or a similar model with daily meetings. Even in that case you can’t be sure what others are working on right now, without bugging them about it.

Ville guiding Hannu and Raine through the inner workings of Flowdock

Ville guiding Hannu and Raine through the inner workings of Flowdock

Trying to solve these problems for ourselves last fall, we grew tired of the tools available and decided to make our own, starting with research on various Comet technologies, super-scalable message queuing and distribution, asynchronous storage and so on. Needless to say, implementing all this into web environment has not been trivial.

However, we put our man, Ville Lautanala, to work full-time on the research, and he subsequently started working on a Rails prototype. Now, with the help of the APIdock team we have managed develop a few sprints of alpha versions and at the time of writing, we are using it internally.

Flowdock will be available in this fall. Right now, you can go to our splash page and show your interest by subscribing to our mailing list. Later on, we’ll be able to let you know when we are ready to unveil the awesomeness we’ve been working on for the past year!

Also, you can subscribe to this blog or follow us on twitter to stay tuned on future developments, feature highlights and technical behind-the-scenes information.