1 Fisch online kaufen?!

29. July 2008


Eine klasse Idee: Fisch online kaufen auf www.send-a-fish.de Toll das es jemand wagt, so ein kompliziertes Produkt Online zu verkaufen und dann auch noch zu versenden. Ich, als altes Nordlicht hätte gerne 10kg Krabben. Die Knüppel, wie man im Norden sagt, und die Majonaise bekomme ich vorot. Ich würde so viele Krabbenbrötchen schmieren…
Die kosten dann aber auch 440€.

0 Collagen von Winston Smith

12. July 2008

 Tijuanna No! Contra-Revolucion Avenue, 1998

Eine meiner Lieblingskünstler. Auf die Collagen bin ich über das Insomniac-Album von Green Day gekommen. Winston Smith

0 Benutzer, Rechte und die Eigentümer?

12. July 2008

Ich hatte mal die simple Fragestellung, in Ruby on Rails ein Login-System mit Benutzerrechten und Profilen zu bauen. Kurz gesagt: ein Standard. Nun hab ich das RESTful Authentication- in Kombination mit dem acl_system2-plugin verwendet. Kurz darauf kam bei mir die Frage auf, wie man das denn schön machen kann mit dem Owner! Also der Nutzer kann seine Profildaten ändern, darf aber die der anderen nicht verändern. klare sache!
Mein erster Ansatz war es mit einem before_filter zu prüfen, ob bei der Ressourse (ja, REST) bzw. dem Objekt es sich um den Eigentümer handelt. Leider liegen die Filter in der Ausführungsreihenfolge recht weit vorn, wodurch meine erste Lösung unschön wurde.
Das Problem erledigte sich quasi von selbst, sobald man bei den 7-REST methoden als Ressource den aktuellen Benutzer verwendet, der ja dann in der Session gespeichert ist und nicht den Benutzer anhand der ID aus der Datenbank liest.
…manchmal ist man halt auf dem Holzweg.

1 kleintippen: Ruby on Rails HABTM destroy relationship

12. July 2008

Bei einer has_one Beziehung zwischen Models gibt es die Option :dependent => :destroy, womit sich alle Assoziationen löschen, sobald das Vaterelement gelöscht wird. Was ist nun mit einer has_and_belongs_to_many also ner n:n Assoziation? Mit destroy_all werden alle bin Beziehung stehenden Daten gelöscht. Manchmal ist es jedoch notwenidg nur die Daten der Assoziationstabelle zu entfernen und manchmal hat nun diese Assoziationstabelle keine eigene ID, so kommt man mit dem Standardbefehlssatz nicht weiter. Eine Lösung ist es folgende optionen zu verwenden:

1
2
:join_table => :assoziationstabelle, 
:delete_sql => 'DELETE FROM assoziationstabelle WHERE assoziatiation1_id = #{id}'

Also das ganze nochmal als Beispiel, denn ein Code sagt mehr als tausend worte.

Wir haben drei Models *cool*, die die Verbindung zwischen Bneutzer und Benutzerrollen darstellt. Rollen und Benutzer haben eine n:n-Beziehung. Diese sehen so aus:

Das Benutermodel:

class User < ActiveRecord::Base
  has_and_belongs_to_many :roles
end

Die Assoziationstabelle, die keine eigene id hat, sondern als Primärschlüssel die Kombination aus role_id und user_id:

class RolesUser < ActiveRecord::Base
 
end

…und die Rolle:

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users
end

Nun will ich die roles_user löschen, wenn ich einen Benuztzer lösche. Also dann das User-Model erweitern um:

class User < ActiveRecord::Base
  has_and_belongs_to_many :roles, 
:join_table => :roles_users, 
:delete_sql => 'DELETE FROM roles_users WHERE user_id = #{id}'
end

fertig ist der lack!

0 git on Windows

1. July 2008

Um git, die svn-alternative in Windows zu nutzen einfach den one-click-installer
http://code.google.com/p/msysgit/
herunterladen und los gehts!
Dann das Tool starten und per Linux-Kommandos in das Rails-Projektverzeichnis wechseln.
Mit git init wird das Rails-Projekt zu einem git-repository.

Als nächstes sind einige Dateien auszuschleißen. Hierzu einfach eine Datei namens:
.gitignore anlegen. Und mit den Werten füllen, die nicht ins Repository
aufgenommen werden sollen.

z.B.
log/*.log
tmp/**/*
config/database.yml

Um leere Verzeichnisse in das Repository zu tun, sollte man:
touch /tmp/.gitignore /log/.gitignore /vendor/.gitignore ausführen.

Mit git status kann man alle Verzeichnisse des Repositpories abfragen.

Dann mit git add . alles in git überführen und
mit git commit -a -m "Erstes Repository" -v die änderungen abschicken.

Dies muss man machen, um das eigene Rails-Projekt zu einem git-repository zu machen.
Wenn man dann änderungen wieder einchecken will, einfach:

git push origin master

master ist der Branch
origin ???

mit
git status
lassen sich dann noch die Änderungen nachverfolgen

Um nun z.B. ein Plugin ins eigene Projekt zu laden, einfach in das /vendor/plugin Verzeichnis gehen und dann mit:

git clone git://projektverzeichnis/projektname.git

das ganze herunterladen.

0 Aspektorientierte Aufgabenbearbeitung

28. June 2008

Vorsicht! Bei dem folgenden Text handelt es sich um erste Gedanken zu einem Thema. Es erhebt keinen Anspruch auf Vollständigkeit oder Richtigkeit. Spannend finde ich, wie ich durch dieses methodische Vorgehen fehler vermeide ;-)

“Oft stehe ich vor der Herausforderung Aufgaben zu erldigen, die mehrere Funktionen gleichzeitig erfüllen. Das Ergebnis hat dabei oft einen besonderen Schwerpunkt auf meine Kernkompetenzen und Interessen. Der Faktor, für den ich mich interessiere hat dabei die beste Qualität. Dann kommt das, was ich gelernt habe und das, wovon ich mal gehört habe. Dabei passiert es durchaus, dass ich Aspekte komplett vergesse.”

Worum gehts eigentlich?

In jedem Unternehmen kann man zwei verschiedene Arten von Funktionen ausführen. Die einen sind Dinge, die man immer wieder auf gleiche Art und Weise ausführt. Wichtig ist hierbei sauber und schnell zu arbeiten. Die anderen Aufgaben sind kreativerer Natur, Aufgaben die viele Schnittstellen zu anderen Abteilungen und Funktionen haben und in ihrer Art die individualität eines Unternehmens wiederspiegeln und die übergeordneten Unternehmensziele bestmöglich erreichen.

Es geht darum, bei kreativen Aufgaben ausgewogene Ergebnisse zu erzielen. Würde z.B. eine Marketingabteilung so arbeiten, wie sie es will, gäbe es bald kein Geld mehr in dem Unternehmen und ein unendlicher Bekanntheitsgrad. Würde der Programmierer einen freien Lauf bekommen, so gäbe es saubere Software, die nie fertig sein würde. Beide Abteilungen müssen bzw. sollten oft zusammen arbeiten.

Ein Beispiel

Es gilt eine Startseite für einen Internetauftritt zu gestalten. Über die Startseite bekommt der Kunde (angenommen wir haben einen Web-Shop) den ersten Eindruck. Aber was soll Sie noch können?
Der Betriebswirt:
Die Startseite muss verkaufen, also einen guten Eindruck machen, die Produkte präsentieren.

Der Designer:
Die Seite müss schön sein, Kompositorisch und vielleicht künstlerisch reichhaltig.

Der Usability-Experte:
Die Augenführung muss stimmen, alle Elemente logisch angeordnet.

Der Entwickler:
Das Design sollte auf allen Browsern gleich aussehen, also so gestaltet sein, dass Probleme gar nicht erst entstehen.

Jeder hat auf die Startseite also eine andere Perspektive, jeder interessiert sich für einen anderen Aspekt. Das Problem ist hierbei, alle Aspekte betrachtet zu haben und dann alle unter einen “Hut” zu bekommen. Da in kleineren Unternehmen aber alleine schon nicht für jeden Aspekt eine Person gibt, kann es dazu führen, dass der Designer die Usability macht, aber ohne es zu wissen. Der Entwickler ist für die Suchmaschinenoptimierung, könnte es auch gut machen, aber nur wenn er die Aufgabe bekommt , dies zu tun.

Das Vorgehen
Als erstes das Aufgabengebiet definieren. Dann alle an einen Tisch, brainstormen und sammeln. Es geht darum Aspekte, die die Startseite erfüllen muss zu identifizieren. Dadurch, dass alle Aufgabenträger beteiligt sind, wird jeder in dem Team für das Thema der anderen sensibilisiert. Hinzu kommt, dass Aspekte aufgenommen werden, von denen keiner Fachwissen dazu hat. Zurück zum Beispiel Startseite:

Aufgabe:
Startseite eines eCommerce-Shops

Aspekte:
Soll

  • schön aussehen
  • benutzbar sein
  • die Produkte präsentieren
  • Für Suchmaschinen gut indizierbar
  • neue Produkte oder Funktionen zeigen
  • alle Käufergruppen ansprechen (impulskäufer, etc.)
  • vertrauen schaffen
  • rechtlich einwandfrei sein
  • in das Gesamtkonzept passen
  • relevante Käufergruppen ansprechen
  • ansprechende texte haben
  • schnell laden

Nun das ganze noch aufbereitet

  • Design
  • Usability
  • Marketing
  • Texte
  • Bilder
  • SEO
  • Recht
  • Corporate Identity

Das interessante hierbei ist, dass die Aspekte generaliesierbar sind. Wahrscheinlich würden die gleichen Aspekte von vielen Teams ermittelt werden. Die Individualität des Unternehmens ist dabei durch die kreative Umsetzung und Gewichtung der Aspekte determiniert. Wenn der eine Weiss, was der andere tut, so können fehler vermieden und die effektivität erhöht werden.

Fürs Erste soll das hier reichen. In Zukunft möchte ich die Methode weiter ausarbeiten und ggf. mit anderen Methoden integrieren.

1 Hallo

18. September 2006

Jeder Blog hat einen ersten Eintrag. In diesem Blog geht es in Zukunft um Ruby on Rails, Webentwicklung, eCommerce, Wirtschaftsinformatik und gelegentlich auch persönliches.

Tschau!