in General

Packet and Denby

This is Packet.

This is Denby.

I mention in the video that it’ll end up being “like TweetDeck”. I breezed past that a tad too quickly — it’s definitely not going to be an HTML5 clone of TweetDeck! (Turns out they’re working on one of those already.)

Instead, it will take inspiration from the multi-column approach, but hopefully improve the user experience on a number of levels:

  • It’ll be 100% Free Software / Open Source… and one hopes, peer produced.
  • JavaScript on the server, JavaScript on the client, with liberal doses of “HTML5″ (the platform your platform could be), whatever that means to you.
  • No Adobe AIR, and thus, no vicious memory and CPU abuse! Seriously: Firefox TweetDeck is wasting more CPU time sitting “idle” than Chromium and node.js are using to run Denby. Oh, and node.js is 12MB resident.
  • It can work a bit like a desktop app… use the “web page as application” tool your browser provides. Firefox has Prism, Chromium has… a menu item. ;-) Denby will support things like desktop notifications, audio bleeps, drag-n-drop (for media uploads), inline display of media, etc.
  • Run local or hosted. Once I’m happy with the user experience, I’ll start thinking about cool things the server could do while you’re not connected to it! For now, it only maintains the connection to Twitter while a client is connected.
  • I want to build delicious multiple account support, without complicating the single account experience. It’ll merge streams, detect the context you’re acting upon (click reply and you’ll be replying from the appropriate account), etc.

Please comment if you have any thoughts or suggestions… crimes committed by other Twitter clients, ideas for lovely web/desktop integration, and so on. Thanks! :-)

HELLO DENBY.

* * *

Note that I’ve already had questions about StatusNet and identi.ca support. Thus far, they don’t have user streams, which was one of the main reasons behind building Denby. That said, it is entirely possible for the Denby server to poll the REST API (given that it already talks to Twitter’s) and send the results down the WebSockets tube… so, we’ll see.

Hmm. Perhaps this is the best way to build a user streams API for StatusNet anyway? The web app could send JSON messages to node.js, which could relay them to the intended users… via multiple protocols! Long-running HTTP, WebSockets, whatever. If anyone is inspired to do this, StatusNet could have a bi-directional WebSockets API before Twitter does!

* * *

Update: I made another quick video, showing a few improvements (including update bleeps — no chicken noises as yet), Denby in Firefox’s Prism environment, and sharing some thoughts about the web as a development platform. Enjoy!

Write a Comment

Comment

Comments will be sent to the moderation queue.

14 Comments

  1. One thing that annoys me about tweetdeck is I have to waste a whole column for direct tweets and a whole column for mentions. I’d like to collapse/consolidate/combine Twitter “streams” into one column. Maybe segment a column into two or three sections with a maximum setting for the number of tweets to show up in that section of that column…

  2. TweetDeck sucks, *especially* its multi-column approach, so anything that takes no inspiration from it whatsoever would be a rather better starting point.

    • I think they got very excited about columns, decided to make a separate column for everything, and then realised how… let’s see… user hostile it was. :-) Denby will merge a fair bit of what TweetDeck separates, but still let you split things out when you want to.

    • Hmm, so “in stock GNOME” might be an amusing thought experiment… Denby is pretty much a straight-up web application. The JavaScript logic underneath could probably work in other environments, but certainly much of the HTTP logic relies on node.js APIs.

      I do wonder what it would be like to forge an unholy combination of node.js, Seed (as node.js is built on v8) and GObjectIntrospection (providing access to lots of delicious GNOME-native stuff, like Clutter).

      :-)

  3. So, here’s my wishlist (sorry for not being a bit more constructive and actually try to contribute, but I’m not at my best coding mood lately):

    Proper RT handling: At twitter.com, doing retweets is quite straightforward, you don’t have to worry about lenght. You just RT. However this is not the case in TweetDeck and friends. which is rather annoying!

    As per the full feed. In TweetDeck, there is a limit in the amount of history you can access, which is a pain in the arse as well.

    As per the good multiuser support. For guys in charge of a few tweeter accounts like me (@codethink, @gtktoolkit, @acruiz). A client that discourages tweeting from the wrong account is in REAL need! That’s the one reason I keep using TweetDeck, and even so, I do leak stuff from time to time. I’d like it to come back to the “default” account after every tweet so that I don’t post personal stuff in the “corporate” accounts :-)

    • So recent versions of TweetDeck let you choose between “new style” and “old style” (editable) RTs… but in a really annoying way. You can either choose the behaviour you want globally, or have it ask you every single time.

      There’s a legitimate use case for both styles, so I’m actually going to have two buttons for “retweet”… icons kind of like [♻] for new style, [RT:] for old style.

      Although I plan to keep it single-account for a short while, getting the multi-account stuff right is totally on my list. Things like knowing the context of your interaction (when you reply, it should reply from the account the tweet arrived through), very consistent behaviour, making it easy to see if you’re going to make a mistake, etc.

      (Digression: I’ve been thinking about this rather like modern games with single and multi-player modes… I like it when developers create a wonderful single player story or campaign, so you care about what’s going on even in multi-player. Plus, the best games are those for which the developers separately and deliberately designed each angle, rather than just adding a lame deathmatch mode.)

      History stuff… hopefully, because the design involves the use of a server (which you can run on your desktop, but can be hosted elsewhere pretty much as easily), we can do some fancy things with data retention, searching, etc. Solving one of the biggest problems with “the cloud”!

      Thanks heaps for your feedback, Alberto.

      • For old style re-tweets, where you’ve added a comment, you should really set the “in-reply-to”. I’ve never seen a client that does this.

        Also, being able to view in chronological order would be nice. Nothing like reading a “thread” in reverse to do your head in!

        • Hmm… it sounds like a good idea, but I suspect Twitter will pay even more attention to the in-reply-to field than /^@/ when determining who should see your tweet… if Twitter regards it as a reply, then only people who follow both parties will see it.

  4. I’d started on something similar to “scratch my itch” for a decent web client that did things the way I would prefer. Been too busy and hadn’t made much progress. I’ve now run “rm -rf” on my few hundred lines of code in anticipation of Denby.

    As others have suggested I’d put “replies”, “mentions” and “others re-tweeting your tweets” into a single column.

    I’d like some kind of de-duplication so that, according to some hierarchy, tweets only appear in a single column. i.e. If you see a tweet in your stream, you don’t also need it in the replies/mentions column (or vice versa, depending on your preference).

    And as per my earlier reply: a setting to view in chronological order; different links/icons for new and old school re-tweeting; old school re-tweets that set “in-reply-to”.

    • Merged “me” column: check!

      My brain skipped over the ordering suggestion in your previous reply. Great thought… this often annoys me, as well. One starting point could be a chronological conversation “in context” view, a la Identi.ca… but I think this deserves more thought in general.

      Thanks heaps — awesome feedback.

      • I think the “in context” thing is a proportional response to tbe desire to have a “conversation” flow without trying to do full “threading” in the primary interface.

        Do you dynamically create a new column where you can break out either a conversation or hashtag you are watching? You don’t want column-itis but you also don’t want to break the flow of the two primary columns.

        • Yes — I had an interesting idea a few nights back about how to handle multi-column with delightful flexibility (for users and devs), and your “break out a conversation” suggestion would be a fantastic application of it. Great idea — thanks again!