DevHouseFriday Keynote – Railslove proudly presents: Channelthing musician v.0.2
Nach mehr als zwei Monaten Neuentwicklung kann sich heute beim DevHouseFriday das Ergebnis unser neu aufgelegten Version von Channelthing zeigen (Codename: “Musician” v.0.2). Die grundsätzliche Devise hieß dabei: “Less features” – und wir glauben, dass uns der neue Kurs gelungen ist.
Natürlich freuen wir uns morgen über zahlreiche Besucher bei unserer Railslove Keynote, in der wir euch die neue Version und seine Features vorstellen möchten. Natürlich gibt’s dazu auch ein paar Invites.
Mehr Informationen gibt es auf Facebook. Frische Updates auch immer bei channelthing, devhousefriday und railslove.
Wir freuen uns auf euren Besuch!
P.S. Wer nicht kommen kann, der kann einen Invite-Request auf unserer Landingpage abschicken.
Nächster Webmontag Köln am 13. Juli 2009

Am 13.07.2009 findet im Spielplatz der #19 Kölner Webmontag statt! Da die Teilnehmerzahl bei den letzten Webmontagen ein bisschen abgenommen hat, findet dieses mal die Ankündigung mit ein wenig Vorlaufzeit statt. Es bleibt daher genug Zeit um sich den Termin zu reservieren und/oder eine Präsentation vorzubereiten. Dazu reicht auch übrigens nur ein Eintrag auf der Wiki-Seite!
Railslove freut sich zusammen mit Rene, Nicole, Christoph Beckmann, Daniel Hepper und einigen mehr ein bisschen frischen Wind in die Runde zu bringen!
Ps.: Entsprechende Events sind auf venteria und upcoming eingetragen.
Ich vergaß zu erwähnen, daß wir auch Channelthing in seiner (hoffentlich) pre-Beta-Version vorstellen werden.
Webmontag allaaf!
channelthing – a big picture
Bald (!) ist es soweit – unsere “nigelnagelneues” channelthing-Release wird für unsere Alpha-User released. Fast täglich erreichen uns mittlerweile neugierige Anfragen und um die Vorfreude noch ein bisschen anzuheizen, möchten wir euch heute die Kern-Features von channelthing vorstellen.
Also, was ist channelthing?
channelthing ist ein Microblogging-Tool für Teams, mit dem Nachrichten und Dokumente ausgetauscht werden können. Alle Informationen werden zentral zugänglich in einem Online-Kanal gespeichert, aufbereitet und annotierbar; der Begriff “Informationen” ist dabei weit gefasst: wir möchten sämtliche multimedialen Schnippsel einfangen, die bisher über E-Mail, File-Server oder Dropbox-ähnliche Service verteilt wurden. Diese können sowohl über ein Webinterface im Blog-Stil oder direkt per E-Mail an einen Channel gesendet werden. Über verschiedene Wege (RSS, E-Mail, …) verteilt der Channel die Informationen dann wieder an ihre Empfänger.
Jedes Team-Mitglied entscheidet bei channelthing, wie und wann es Nachrichten empfangen möchte. So können z.B. eingehende E-Mails direkt weitergeleitet werden oder nur einmal am Tag gebündelt als Zusammenfassung.
Wie ist der Service aufgebaut?
In channelthing gehört jeder Coworker – das ist unsere Bezeichnung für einen Benutzer – einer oder mehreren Companies an und kann in beliebig vielen Channels seiner Companies mitarbeiten. Als Mitglied einer Company hat man automatisch Zugang zu deren Channels.
Darüber hinaus können Coworker aber auch in Channels fremder Companies eingeladen werden und dort mitarbeiten – ohne, dass sie Mitglied der Company werden und ohne, dass sie Zugriff auf übrige Channels dieser Company haben. Dies ist dann sinnvoll, wenn z.B. Freelancer in einem Projekt eingebunden werden.
Scopes und Logins
Die Company ist in channelthing das höchste verbindende Element zwischen Coworkers. Daher befindet sich jeder Coworker während der channelthing-Nutzung in einem Company-Scope, d.h. es werden in allen Ansichten der Anwendung nur die Informationen angezeigt, die die jeweils ausgewählte Company betreffen, bis man sich zu einem bewussten Scope-Switch entscheidet und in eine andere Company wechselt.
Allerdings besitzt jeder Coworker genau einen channelthing-Login. Egal wie vielen Companies oder Channels er angehört – alle sind über ein globales Dashboard erreichbar.
Gemütlich quatschen in der Lounge
Jede Company besitzt beliebig viele Channels. Damit jedoch nicht für jedes Gesprächsthema ein neuer Channel gestartet werden muss, existiert für den gemütlichen Plausch zwischendurch die Company Lounge. Sie funktioniert genauso wie ein Channel auch, verbindet aber immer alle Mitglieder einer Company.
Projektbezogen arbeiten in Channels
Sie sind das Herzstück von channelthing. Hier treffen sich Coworker, um Themen- oder Projekt-bezogene Informationen zu sammeln, um Vorgehen zu planen, Termine zu finden, Dokumente oder Links auszutauschen und zu kommentieren. Wie bereits erwähnt müssen sie dabei nicht zwangsweise der ursprünglichen Company angehören, sondern können auch als “Externe” oder Freelancer in einem Channel mitarbeiten.
Agieren und reagieren
Ob in der Company-Lounge oder im Channel: Das Teilen von Informationen soll einfach wie möglich von der Hand gehen – und daher existiert dafür auch nur ein Textfeld, das allerdings ein bisschen schlauer ist als andere. Du kannst Coworker mit einen @ direkt ansprechen und damit zur Reaktion auffordern, mittels #hashtags werden Nachrichten direkt getagged und sind so anschließend über sie Suche auffindbar oder abonnierbar. Auch Orts-Informationen können über eine L:-Syntax gekennzeichnet werden. Links zu Bildern oder Videos werden natürlich interpretiert und Texte mit einem abschließendem Fragezeichen? als Frage an das Team deklariert.
Unlimited Uploads
Allein Textinformationen reichen natürlich meist nicht aus und channelthing erwartet es geradezu, dass du es mit Dokumenten fütterst. Lade mehrere Dateien auf einmal hoch und schreibe noch währenddessen einen kurzen Text dazu. Audio-Dateien werden anschließend in einem Player abspielbar und Bilder verkleinert angezeigt. Über eine gesicherte Verbindung können deine Coworker die Dateien auch herunterladen.
Suchen und filtern
Last but not least: die Suchfunktion. Was nutzt ein Informationsspeicher, wenn man an die Informationen nicht mehr herankommt? Aus dieser Überlegung heraus, legen wir auf die Such- und Filtermöglichkeiten besonders wert.
Zurzeit sind “Coworker”- und “Message Type”-Filter sowie eine Volltextsuche vorhanden, in der Entwicklung befinden sich außerdem eine Indizierung und Volltextsuche von hochgeladenen Text-Dokumenten (z.B. PDF), sowie eine als Feed oder per E-Mail abonnierbare Suche über Tags/Coworker-Kombinationen.
It’s all scriptified
JavaScript macht channelthing an vielen Ecken noch runder: Sei es der Hintergrund-Upload bei Dokumenten, das Einladen von Coworkern oder das Ändern von Company-Logos ohne Reload. Wir legen wert darauf, dass der kreative Arbeitsprozess nicht durch unnötige Kontextwechsel aus dem Fokus rückt.
Wenn dein Rechner allerdings aus Sicherheitsgründen kein JavaScript erlaubt: keine Sorge, bei uns läuft auch alles ohne.
Wann gehts los?
Das aktuelle alpha-Release liegt gerade auf unserem Staging-System und wird sich noch ein paar kritischen Tests unterziehen müssen. Vermissen wir noch eine Funktion? Wie fühlt es sich an? Um diese Fragen zu klären haben wir ein paar Leute aus unseren engsten Entwickler-Kreis eingeladen.
Voraussichtlich in der nächsten Woche wird es dann soweit sein, dann werden wir auch weitere Einladungen rausschicken. Falls noch nicht gemacht, tragt euch am besten direkt in unseren Verteiler ein!
One more thing… ;-)
Zusammen mit @flxmllr werkeln wir gerade auch noch an einem iPhone-Client für channelthing. Seid gespannt!
(via Channelthing Blog)
Using Paperclip with S3 authenticated url
Für Channelthing ist es besonders wichtig, dass die hochgeladenen Dokumente, die wir bei S3 ablegen, nur durch authentifizierte Benutzer abgerufen werden können. Daher haben wir uns eine kleine Extension zu Paperclip gebaut, die solch eine verschlüsselte URL von S3 erhält, sobald ein Dokument, etc. angezeigt werden soll.
Dazu muss man zum einen den Bucket erstmal “sicher” machen. Mit der kleinen Firefox-Extension S3Fox Organizer. Man erlaubt nur dem Owner auf das Bucket zuzugreifen.
Unsere Extension erhält nur die Methode authenticated_s3_url die über die get_link Methode von dem s3-Objekt unsere URL mit einem Hash zurückgibt der nur über eine bestimmte Zeit aufgerufen werden kann. Die url-Methode von Paperclip überscheiben wir anschliessend.
module Railslove module Paperclip module SecureS3 def authenticated_s3_url(style = nil, include_updated_timestamp = true, time_limit = 15.minutes) url = original_filename.nil? ? interpolate(@default_url, style) : self.s3.interface.get_link(self.s3_bucket.to_s, self.path(style), time_limit) include_updated_timestamp && updated_at ? [url, updated_at].compact.join(url.include?("?") ? "&" : "?") : url end end end end Paperclip::Attachment.send(:include, Railslove::Paperclip::SecureS3) Paperclip::Attachment.class_eval("alias :url :authenticated_s3_url")
Man sollte daran denken auch die entsprechenden Rechte, jedem hochgeladenem Dokument zu setzen. Die können über den Parameter s3_permissions gesetzt werden:
paperclip:
storage: "s3"
s3_credentials: <%= "#{RAILS_ROOT}/config/s3.yml" %>
path: ":attachment/:id/:style.:extension"
bucket: "RailsloveLovesS3"
s3_permssions: "authenticated-read"Nun haben wir unser gewünschtes Ziel erreicht.
DevHouseFriday – Die perfekte REST-API
Gestern hat natürlich unser wöchentlicher DevHouseFriday Talk stattgefunden. Diesesmal wurde in der Runde das Thema diskutiert, wie eine perfekte API aussehen kann. Die eine Antwort darauf wurde auch nicht erwartet, aber anhand einiger Beispiele im Netz kamen viele Impulse aus der Runde die das Entwickeln einer “sauberen” API bestimmt helfen können.:
- Schicke nicht “so viel wie möglich” mit einer Anfrage mit. Mach das immer abhängig von deinem Anwendungskontext – was ist relevant, was “könnte” relevant sein. Wenn du dir nicht sicher bist – lass lieber was weg. Das ist entscheidend während der Evolution deiner API – wenn viele unabhängige Clients deinen Service benutzen, kann das entfernen von Attributen die mit einem Response zurückgegeben werden, sehr problematisch werden. Aber berücksichtige das – eine API lebt.
- Implementiere selber einen Client während der Gestaltung deiner API – probiere sie direkt aus.
- Versioniere deine API. Damit kannst Du sie (mit Vorsicht) ausbauen oder Attribute wieder entnehmen, indem Du die Änderungen Versionierst. Bei der Versionierung gibt es drei Möglichkeiten: entweder du kennzeichnest die Version in der URI – über die URL (z.B. Amazon oder Github) oder einen Parameter oder du setzt deinen eigenen content-type für den Request. Bei der Veränderung der URL solltest man sich im klaren sein, dass zwei unterschiedliche Identifier (../v1/.. und ../v2/..) ein und die selber Ressource beschreiben.
Das waren meiner Meinung nach die drei wichtigsten Themen die wir gestern in der Runde angesprochen haben. Wir werden die Erkentnisse für die Entwicklung unserer API für Channelthing bestimmt mitnehmen und sind gespannt auf unseren ersten iPhone-Prototypen der sie direkt ausprobieren kann (danke an @flxmllr).
Freu mich schon aufs nächste DevHouseFriday!
Btw.: stay in touch via unserem wiki und unserer facebook-guppe


