Coole Hardware!

Mich kann eigentlich kaum was aus den Latschen hauen, aber bei einem soeben gefundenen Video war ich schon erstaunt, wie weit die Technologie schon ist. Es handelt sich um riesige Touch-Screens, die zu Forschungszwecken genutzt werden können. Die Möglichkeiten scheinen schier unendlich und vielleicht haben wir schon bald Bildschirme wie in „Minority Report„.
Wer sich für Software-Ergonomie und neuartige Eingabegeräte interessiert, sollte sich dieses Video nicht entgehen lassen: http://www.youtube.com/watch?v=v_j8bAo0_ns
Es scheint schon etwas älter zu sein, dennoch ist es verblüffend, wie viele Anwendungen schon gezeigt werden. Der Microsoft-Surface Tisch von der Telekom hat bis jetzt nicht mehr als ein paar Spielereien zu bieten…
Ich will auch solche Bildschirme 🙂

Update:

Da das ursprüngliche Video mit dem Titel „ETH Zurich – Value Lab“ in Deutschland nicht über Youtube verfügbar ist, habe ich ein anderes Video gefunden, welches ein paar Eindrücke des Value Lab zeigt: Value Lab Impressions

Ansonsten kann man sich auch direkt auf der Seite des Value Lab informieren: http://www.valuelab.ethz.ch

Counter mit Ruby on Rails

Eine der ersten Anforderungen von Kunden an eine Webseite ist: Wie viele Besucher tummeln sich auf meiner Seite? Dazu baut man einen sogenannten Zugriffszähler (oder auch counter) in seine Applikation ein. In meinen Anfängen schon oft mit PHP gemacht, nie aber mit Rails. Das soll dieser Artikel ändern. Er ist aber auch eine (Gedanken-)Stütze für mich, wenn ich mal wieder drüber nachdenke, wie man einen solchen Counter schreibt oder erweitern kann.

Eigentlich ist es recht einfach, einen Counter in Rails zu erstellen. Wir erzeugen zuerst ein Model ‚visit‘, welches einen Besuch eines Nutzers darstellt.

script/generate model visit

Dann schreiben wir noch die migrations um und migrieren unsere Datenbank auf die neueste Version.

class CreateVisits < ActiveRecord::Migration
  def self.up
    create_table :visits do |t|
      t.string :ip
      t.string :referrer
      t.string :browser_agent
      t.string :page
      t.timestamps
    end
  end
 
  def self.down
    drop_table :visits
  end
end
rake db:migrate

Dann brauchen wir noch eine Methode, in der wir neue User in die DB packen. Ich habe das ganze über eine Methode in meinem PagesController (der meine Seiten verwaltet) gelöst. Diese Methode wird in einem before_filter aufgerufen.

class PagesController < ApplicationController   
before_filter :write_statistics 
 
# ... andere Logik  
 
protected   
def write_statistics     
# Suche nach Einträgen von heute mit passender IP und Browser Agent     
visit = Visit.find(:first, :conditions =>{
      :ip => request.remote_ip.to_s,
      :browser_agent => request.env['HTTP_USER_AGENT'],
      :updated_at => DateTime.now.beginning_of_day..DateTime.now.end_of_day
    })
    if visit.nil?
      # eintrag existiert noch nicht -> anlegen, fertig
      v = Visit.new({
          :ip => request.remote_ip.to_s,
          :browser_agent => request.env['HTTP_USER_AGENT'],
          :page => "#{params[:controller]}/#{params[:action]}",
          :referrer => request.env['HTTP_REFERRER']
        })
      # Logging
      logger.error "Fehler beim Speichern eines Visits" unless v.save
    end
  end
 
end

Den Inhalt der Methode kann man natürlich nach seinen Wünschen anpassen. In dem Fall wird jeder Besucher pro Tag einmal gespeichert. (Hinweis: Evtl. müssen die Parameter config.time_zone und config.active_record.default_timezone in der environment.rb auf die gewünschte Zeitzone angepasst werden)
Ergänzend dazu kann man nun einige Helper erstellen, die überall verwendet werden können:

module PagesHelper
 
  def visitors_today
    v = Visit.find(:all, :conditions => {
        :updated_at => DateTime.now.beginning_of_day..DateTime.now.end_of_day
      })
    v.size
  end
 
  # day as DateTime
  def visitors_on day
    v = Visit.find(:all, :conditions => {
        :updated_at => day.beginning_of_day..day.end_of_day
      })
    v.size
  end
 
  def visitors_total
    Visit.count
  end
 
end

Erweiterungsmöglichkeiten:

  • Alle Seiten speichern, die der Besucher aufruft, Vorteil: bessere Auswertungsmöglichkeiten (Welche Seiten werden häufig besucht, etc.), Nachteil: sehr schnell viele Daten – abhängig von Seitenzahl
  • Weitere Kontrollen einbauen: Cookies, Sessions, etc.
  • Helpermethoden in einem Partial zu einer „Statistik-Box“ zusammenfassen

Master-Thesis: Thema in Sicht

So langsam aber sicher neigt sich mein Studium dem Ende. Ich werde voraussichtlich im Spätsommer 2010 das Studium mit dem Master of Science abschließen.

Vorher muss ich allerdings noch einige Prüfungen bestehen und eine Master-Thesis schreiben. Diese werde ich zum Thema Prozessmanagement schreiben. Wie das Thema genau lautet, weiß ich noch nicht. Es wird aber unter anderem um die Workflow-Engine jBPM gehen. Schreiben werde ich die Arbeit bei der BFPI GmbH, bei der ich aktuell angestellt bin.

Wenn es soweit ist, werde ich mehr darüber berichten.

Endlich die Lösung

Dies ist ein Update meines vorherigen Posts.

Ich habe lange gebraucht, um mal wieder was am Server mit RubyOnRails zu machen. Nun habe ich eine Lösung gefunden, wie ich auf meinem Ubuntu 8.04 Server, Ruby on Rails zur Verfügung stellen kann.

Ich habe mir überlegt, dass es sinnvoll wäre das von strato zur Verfügung gestellte Plesk zu nutzen, um Kunden auf dem vServer zu verwalten (pro Kunde soll es vorerst eine Rails-Applikation geben). Ich habe dann überlegt, wie man Ruby on Rails da integrieren kann. Ich stieß auf einige Doku-Seiten bei parallels, die zeigen, wie man RoR aktivieren kann. Allerdings arbeitet diese Variante mit fastcgi. Ich wollte aber mit mongrel, nginx oder (am liebsten) Phusion Passenger arbeiten. Außerdem bekam ich bei der dort gezeigten Variante einige schlecht nachvollziehbare Fehlermeldungen, die ich nicht lösen konnte.

Es musste also eine andere Lösung her: Ich habe dann einen etwas älteren Artikel gefunden, der zeigt, wie man RoR in Plesk integrieren und dabei Phusion Passenger nutzen kann.

Meine Schritte im Überblick:

  1. Erstellen eines Kunden in Plesk
  2. Manuelle Installation einer relativ aktuellen Ruby-Version (1.8.7) auf dem Server
  3. Installation einer aktuellen rubygems-Version
  4. Installation aller nötigen gems (rails, builder, etc.)
  5. Befolgen der Anweisungen aus dem oben genannten Artikel (passenger gem installieren, passenger Installation starten, vHost.conf erstellen und DocumentRoot eintragen, den Schritt mit RubyEnterprise habe ich weggelassen)
  6. Hochladen der Applikation (über angelegten Kundenaccount) per ftp
  7. Apache evtl. neustarten, Applikation aufrufen

Einige Hinweise noch:

  • Neustart der Rails-Applikation per touch der Datei  /tmp/restart.txt
  • diese Variante macht nur eine Rails-Applikation pro Nutzer möglich, das wollte ich aber bewusst so, im Artikel oben sind aber Hinweise zu finden, wie man Subdomains nutzen kann

Ubuntu 8.04 LTS Server mit Ruby on Rails

Hinweis: Es gibt ein Update zu diesem Artikel, der eine neue Variante zeigt:

Seit ich in meinem Job als Entwickler im Bereich Ruby on Rails arbeite, stelle ich auch meine privaten Projekte auf diese Kombination um.

Dazu habe ich mir einen vServer bei strato gemietet und möchte hier dokumentieren, wie ich die Installation und Einrichtung des Systems angegangen bin.

Vor jeglicher Installation ist es wichtig zu entscheiden, wie man den Server nutzen will. Ich strebe hier einen Server mit mehreren Benutzern und mehreren Applikationen an.

Ich habe dazu mehrere Schritte vorgesehen:
1. Grundlegende Installation
1.1 Installation von Ruby

Als Grundlage für den Betrieb von Ruby on Rails Anwendungen benötigt man Ruby. Ich setze dabei auf meinem Server momentan folgende Version ein:

ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]

Installieren kann man Ruby unter Ubuntu recht einfach mit apt:

sudo apt-get install ruby ruby1.8-dev build-essential

Die beiden letzten Pakete vermeiden Fehler, die man sonst bei der Mongrel-Installation bekommen würde.

1.2 Installation von RubyGems

Nachdem Ruby installiert wurde, können wir RubyGems installieren. RubyGems ist ein Paketsystem in Ruby. Es wird per Konsole über gem aufgerufen.

sudo apt-get install rubygems

1.3 Installation von Rails

to be continued…

Der Strato-Server ist da…

Nachdem ich mich am Samstag dafür entschieden habe, einen vServer von strato zu mieten, ist es nun soweit: Nur 3 Tage danach ist er da. Vorinstalliert ist OpenSuse. Das habe ich natürlich ersteinmal geändert und die Neuinstallation mit Ubuntu 8.04 ausgelöst.

Ich werde hier nach und nach Informationen dazu veröffentlichen, was ich mit dem Server machen will. Nur soviel: nachneun.de wird endlich mal begonnen!

Website – Rent a Jet

Im Rahmen der Vorlesung eCommerce bei Prof. Dr. Dr. Neunteufel galt es eine Webanwendung zu schreiben, die es ermöglicht Business Jets zu buchen. Dabei waren Kosten sowie Angaben zur Flotte der Firma gegeben.

Geschrieben wurde die Anwendung in PHP5 und MySQL5. Insgesamt gibt es 6 DB-Tabellen. Für das User-Interface kommt das JavaScript-Framwork jQuery zum Einsatz.

Am Montag (15.12.2008) haben Frank Lange und ich die fertige Webseite vorgestellt und haben auch die Anwendungen unserer Kommilitonen gesehen. Ich muss sagen, dass es viele gute Ideen gab und dass ich gerüstet bin, eine reale Business-Jet-Buchungs-Applikation zu bauen.

Bestaunen kann man die Seite hier: Rent-A-Jet

Bachelor-Thesis fertiggestellt

Endlich habe ich meine Bachelor-Thesis fertiggestellt und heute abgegeben.
Nachdem ich ca. 8:30Uhr zum Copyshop gegangen war, begann um 10 Uhr nach mehrmaligem Durchsehen der Druck.
Es stellte sich heraus, dass ein Exemplar ca. 2h dauerte. Das wurde ziemlich knapp mit der Abgabe.
Um 14Uhr wollte ich zu Hause los und die Arbeiten abholen. Allerdings musste ich noch die beiliegenden CDs brennen. Dazu wollte ich meine 10MB-Word(2007)-Datei in eine PDF-Datei umwandeln. Das dauert jedoch auch 1-2h und ich musste das abbrechen. Daher ist jetzt auf den CDs die Word-Datei… Naja…

Ich habs jedenfalls noch gerade so geschafft. 14:55, als 5 Minuten vor Ende, war ich im Prüfungsamt und hab die Arbeit eingereicht. Kurz und Schmerzlos. Irgendwie hätte ich mehr Zeremonie erwartet, nun gut =)

Es ist vorbei… Jetzt noch verteidigen und alles wird gut…!

*In die Luft spring*

Flex Builder 3.0.1

Soeben hat mich das Update des Flex Builders erreicht.

Adobe hat die Version 3.0.1 des Flex Builders veröffentlicht. Allerdings konnte ich bisher nirgends Informationen zu dem neuen Release finden. Laut Flex-Bug-Tracker soll aber die Eclipse Version 3.4 unterstützt werden.

Ich bin gespannt, wann Adobe Release Informationen veröffentlicht.

UPDATE: hier also die offiziellen Informationen von Adobe: http://www.adobe.com/devnet/flex/articles/sdk3_fb301.html