Technik, Gothic und Anderes

Technik ist Spiel, Gothic ist ernst und Zeit hat man zuviel

  • Kategorien

  • Tags

  • Archiv

  • Links

    zu Bee5

    blog.oncode.info läuft bei Cyon und ich bin sehr glücklich damit.

Do you Poken? Die Brücke zwischen dem echten Leben und dem Web 2.0.

Geschrieben von skaldrom am 10. February 2009

[Trigami-Anzeige]
POKEN Auch im Zeitalter von Web 2.0 kann es passieren, dass man Maus und Tastatur verlässt um höchstselbst an einer Veranstaltung mit realen, oftmals menschlichen Personen teilzunehmen. Man unterhält sich per akustischem Netzwerk, versteht sich gut, möchte weiter in Kontakt bleiben und dann geht es los: Handynummer? Hm, “<schrei>4 9 2 oder 3? Hä?</schrei>”, ein Stift ist nie zur Hand und Kajal auf Handrücken ist auch sehr unzuverlässig und darum nicht zu empfehlen. Bist Du auf Facebook? Nein aber auf Xing? Welcher Namen? MySpace? Da bin ich nicht…
Und so zieht es sich hin… Pokens sind eine gute und einfache Lösung des Problems, ohne heiser zu werden oder am Austausch eines Links zu verzweifeln.

Vier Pokens versammelt

Vier Pokens versammelt

Die Idee

Gute Ideen sind einfach, so auch diese: Man legt auf www.doyoupoken.com eine oder mehrere Identitäten an, in denen man sowohl Daten aus dem echten Leben (Name, Adresse, Telefonnummern, Mailadressen, Blog-URL, …) als auch Links zu den Profilen in verschiedenen Social Networks (von Xing, LinkedIn über Flicker, Facebook, MySpace, Twitter bis hin zu usgang.ch, etc) angeben kann. Wenn nun das Gegenüber auch ein Poken dabei hat, dann hält man die Pfötchen kurz aneinander und schon ist die ID ausgetauscht. An einem beliebigen Compie mit Internetanschluss und USB können die ID’s vom Poken abgerufen werden und man sieht die entsprechenden Profile auf www.doyoupoken.com:

Die Identität, die mit Pokens ausgetauscht werden kann.

Die Identität, die mit Pokens ausgetauscht werden kann.

Die hochgeladenen Freundesprofile können verschieden sortiert, abgelegt und gesucht werden. Die Ganze Sache ist also sehr effizient und benutzerfreundlich…

Am Schluss dieses Beitrages könnt Ihr lesen, wie Ihr zwei Pokens gewinnen könnt!

Lesen Sie den Rest des Beitrags »

Teile und geniesse:
  • Technorati
  • del.icio.us
  • MisterWong
  • Digg
  • StumbleUpon
  • Facebook
  • Google Bookmarks
  • Netvibes
  • Reddit
  • Twitter
  • Print this article!
  • E-mail this story to a friend!

Eingeordnet in Webapplikationen | 17 Kommentare »

Kleines Projektverwaltungstool für Projektarbeiten in Schulklassen

Geschrieben von skaldrom am 22. January 2009

projectProjektunterricht gehört zu den handlungsorientierten Formen im Unterricht. Weil wir Leute ausbilden möchten, die auch TUN können und es nicht beim Schwatzen darüber sein lassen, gehört er zu unserem methodischen Handwerkszeug. Theoretisch ist es eine gute Sache, praktisch stellt der Projektunterricht einiges an Herausforderungen. Ein einziges Projekt zu managen ist schon fast unmöglich, wie soll es denn mit vielen parallelen Projekten funktionieren? Erschwerend kommt hinzu, dass die Lernenden oftmals noch nicht wirklich Projekterfahrung haben.

Es braucht darum eine gute Organisation, mehr Projektverwaltung als Projektmanagement. Die Resultate müssen klar beschrieben und die Wege so gut wie möglich vorgegeben sein. Dokumentation und Inhalte sollten nicht viel Raum für Zweideutigkeiten enthalten und auch die Bewertung sollte den Lernenden einleuchten. Normalerweise wird dies in einem Projektmanual geregelt.

Für die Organisation habe ich eine kleine Accessdatenbank entworfen. Sie ist für accesskundige Lehrpersonen gedacht und sicher nicht idioten- geschweige den lehrpersonensicher (*hüstl*). Vielleicht hat noch jemand Anwendung dafür. Verbesserungen nehme ich natürlich auch gerne wieder zurück.

Die Projektverwaltung und ihre Features

Das "Dashboard"

Das Dashboard

Lesen Sie den Rest des Beitrags »

Teile und geniesse:
  • Technorati
  • del.icio.us
  • MisterWong
  • Digg
  • StumbleUpon
  • Facebook
  • Google Bookmarks
  • Netvibes
  • Reddit
  • Twitter
  • Print this article!
  • E-mail this story to a friend!

Eingeordnet in Bildung und Unterricht | Keine Kommentare »

Avaloq IT-Adventure Battle-Day

Geschrieben von skaldrom am 18. January 2009

battledaySo, nun ist er also durch, der Avaloq IT Adventure Battle Day. Etwa 40 Anmeldungen verzeichnete Avaloq für den Wettbewerb, die 10 besten Agenten sowie deren Coderz wurden zu diesem Event eingeladen. Das Resultat vorneweg: Mein Agent wurde nach Strich und Faden zerzaust :boxen: und landete auf Platz 8. Nicht den Hauch einer Chance. Ich war schon sehr stolz, in einer solch illusteren Runde überhaupt anwesend sein zu dürfen. Zum Einen war die Veranstaltung Bi-National mit Teams aus Bonn, Köln, Dresden und Berlin, und der Schweiz, zum Anderen bin ich mir schon wie Joe the Plumber vorgekommen :) . Mathematikstudenten, Dozenten, passionierte Spieleprogrammierer, die schon während der Präsentation Fachdispute geführt haben :) .

Beim ersten Spieldurchgang haben sich die Programmierer der Agenten vorgestellt und die implementierten Strategien und Taktiken erläutert. Das war wirklich mehr als spannend und lehrreich. Grundsätzlich haben sich zwei Kategorien herausgebildet: Die Bewerter und die Durchspieler (fachlich korrekte Namen aus der Spieletheorie nach Wahl einsetzen).

Die Bewerter haben verschiedene Faktoren gewichtet miteinander verrechnet: Änderung des Maxflows, Änderung des Current-Flows, eine Kantenwichtigkeit, Quellen- oder Senkenkanten, … Die zweite Gruppe von Agenten hat versucht, möglichst viele Spiele durchzurechnen und so die Züge, bzw. Kanten zu bewerten. Die Durchspieler haben obsiegt (mindestens Rang 1 und 2 gingen an Agenten dieser Kategorie).

Informatikerkino

Informatikerkino

Der Gewinner hat mit einer Vorversion des Agenten schon letztes Jahr gewonnen (obwohl dieser angeblich einen Bug hatte und beim ersten Zug die am schlechtesten bewertete Kante ausgewählt hat :) ). Er war auch der Einzige, der daran gedacht hat, dass die Turnier-Maschinen mehrere Cores haben könnten und diese auch aktiv ausgenutzt hat (an den eigenen Kopf hau! Oft und feste! :kopfklatsch: ). In seinem Handout hat er ein interessantes Paper zur Spieletheorie angegeben.

Avaloqix hat eine neue Version des Spielfeldes mit erweiterten Debug-Ausgaben gezeigt. Auf einem der Laptops lief ein Matchmaker, der die Agenten automatisch aufeinander los liess; DAS wäre ein gutes Tool gewesen beim Entwickeln :) . Sie denken leider eher nicht, dass sie den Wettbewerb noch ein drittes mal durchführen werden. Dafür sind Ideen im Raum, die Spieloberfläche zu opensourcen.

Der Nachmittag war äusserst spannend und ich habe viel gelernt. Unter Anderem auch, wie hemdsärmelig mein Algorithmus in Tat und Wahrheit war. Etwas mehr Theorie und Optimierung hätten wahrlich nicht geschadet.

Ich gratuliere allen Gewinnern und danke Avaloq und den Anderen.

Die Photos sind auf Flickr verfügbar.

Nachtrag: Juhuu, ich bin doch dabaei in Marrakesch! Das nennt man Lucky Looser :freu: !

Teile und geniesse:
  • Technorati
  • del.icio.us
  • MisterWong
  • Digg
  • StumbleUpon
  • Facebook
  • Google Bookmarks
  • Netvibes
  • Reddit
  • Twitter
  • Print this article!
  • E-mail this story to a friend!

Eingeordnet in Coding | 6 Kommentare »

Der Avaloqix Spielagent

Geschrieben von skaldrom am 14. January 2009

Juhuu! Mein Spieler hat sich anscheinend gut geschlagen und ich wurde an den Battleday von Avaloq eingeladen! An diesem Datum werden die programmierten Spieler in einem spassigen Turniermodus gegeneinander antreten. Noch mehr freue ich mich auf die Präsentationen der anderen Mannschaften und auf die Leute. Ich kann mir da sehr spannende Begegnungen, Gespräche und Kontakte vorstellen. Ich werde mit Photoapparat bewaffnet davon berichten.

Nun kann ich auch kurz die Taktik meines Spielagenten vorstellen, da er sich ja anscheinend nicht ganz überschlecht angestellt hat. Wenn für Sie als Leser bis hier alles nur nach Bahnhof geklungen hat, dann möchte ich Sie ermuntern, die restlichen Beiträge dieser Serie durchzulesen.

Grundsätzlicher Ablauf

Struktogramm meines Spielers

Struktogramm meines Spielers

Nach der Initialisierung und der Aktualisierung verschiedener Attribute wird zuerst der maximale Fluss nach Edmonds-Karp (Ford-Fulkerson mit BFS) berechnet.
Danach werden möglichst viele „minimale Schnitte“ gesucht. Minimale Schnitte in diesem Kontext sind Kombi­natio­nen von Kanten, die alle bei einer maximalen Flusskonstellation durchflossen sind – in der Summe mit den maxi­ma­len Fluss – und die den Graphen teilen.

Lesen Sie den Rest des Beitrags »

Teile und geniesse:
  • Technorati
  • del.icio.us
  • MisterWong
  • Digg
  • StumbleUpon
  • Facebook
  • Google Bookmarks
  • Netvibes
  • Reddit
  • Twitter
  • Print this article!
  • E-mail this story to a friend!

Eingeordnet in Coding | 1 Kommentar »

Stressfreies Affiliate-Marketing: Geld verdienen mit Bee5

Geschrieben von skaldrom am 3. January 2009

[Trigami-Review]

moneyWas zum Teufel ist denn ein Affiliate? Ein kleines, Bananen-essendes Getier? Sonst etwas Bissiges mit langen Armen?

Bee5: Blogst Du noch oder verdienst Du schon?

Affiliate oder “Partner-Marketing” ist ein altes und ganz einfaches Prinzip: Ich besorge Kunden für ein Produkt und werde dafür – wenn diese einkaufen oder sich irgendwo anmelden – am Umsatz beteiligt.

Das kann nun auf verschiedene Arten praktiziert werden. So könnte man sich in der Fussgängerzone einen Finger und einen Zeh abfrieren und versuchen, Spenden einzutreiben und/oder Abonnements und Mitgliederausweise loszuwerden. Oder man bewaffnet sich mit Vertreterkoffer, Schuhen mit Stahlkappen – die man in die Türe halten kann die zugeschlagen wird – und einem anständigen Anzug und versucht von Haus zu Haus Staubsauger und/oder Versicherungen sowie Schuhreinigungsutensilien loszuwerden. Ebenfalls beliebt sind “Parties”, in denen luftdichte Plastikschachteln, Schmuck oder Kosmetika an “noch”-Freunde feil geboten werden.

…oder man kommt im Jahre 2009 an und benutzt Email, eine Website, ein Blog oder gar Microblogging wie Twitter. Ab und zu finden sich Dinge im Materialkosmos, über die man durchaus schreiben kann und will. Sollte durch diese “Werbung” jemand zum Kunden werden, nähme man gerne auch ein Entgelt dafür. Wenn die Empfehlung ehrlich ist, finde ich das moralisch und ethisch absolut vertretbar, ist sie unehrlich, wird das sowieso dem Ruf des Schreiberlings schaden.

Die drei Affiliate-Systeme

Am Anfang war das direkte System. Mit einem Hersteller oder Buchautor (beispielsweise Amazon) wird eine Quote ausgehandelt die pro geworbenem Kunden oder abgesetzter Einheit ausbezahlt wird. Das ist nett, direkt und irgendwie archaisch. Das Problem dabei ist allerdings, dass man dann im grossen Stil absetzen muss um überhaupt etwas ausbezahlt zu bekommen. 3 Euro für zwei verkaufte Bücher erzeugen nur Aufwand und Spesen statt Freude, Sekt, Parties und Orgien. Eine Vielzahl von individuellen Verträgen bedeutet Verwaltungsaufwand, der sich überhaupt einmal auszahlen muss.

Das wurde schnell bemerkt und so kam die Zeit der “Partnerunternehmen”. Diese schliessen Verträge mit verschiedenen Kunden ab und übernehmen die Verrechnung. Klingt zuerst mal ganz gut, meine Erfahrungen damit sind jedoch eher schlecht. Ich möchte das an einem typischen Szenario zeigen: Man hat etwas gekauft (sei es ein Leucht-Dings mit Tasten, ein Buch oder Sonstwas) und bloggt darüber. Man teilt seine Erfahrungen und beschreibt, wie man Linux darauf installiert oder wie man das Teikl dazu bringt, Saltos zu machen. Natürlich verlinkt man eine Einkaufsquelle und möchte auch etwas für seine Mühe verdienen. Bei den Partnerunternehmen muss man sich nun bei einem Shop für eine Kampagne “bewerben”, warten bis man akzeptiert wird, und hoffen das eigene Textlinks erlaubt sind. Da man normalerweise nicht Millionen von Einheiten verkauft, kommt man in die schlechteste Beteiligungsklasse. Bis man etwas bezahlt erhält, wird man alt und grau, denn die Auszahlungsgrenze richtet sich normalerweise an Grossverdiener. Ausserdem – und das ist doch eher sehr verwirrend – ist es verboten, selber über den Link einzukaufen. Das hat sicher gute Gründe, die ich kognitiv nicht zu fassen vermag.

Ein hiernichtgenanntesabererfragbares Partnerprogramm hat mir sogar monatlich ein Email geschrieben, dass meine Umsätze minimalst seien und dass sie den Vertrag jederzeit künden dürfen [wenn ich mich nicht sofort mehr in mein Hinterteil klemme und gefälligst Kohle ranschaffen (Ergänzung von mir)]. Ja wo sind wir denn da? Das erinnert mich eher an Mafia-Methoden.

Genau hier kommt Bee5 mit einer Lösung ins Spiel. Bee5 hat sich verschiedenen Affiliatesystemen (Zwischen 10 bis 14, je nach Quelle) angeschlossen, die mit insgesamt über 3000 Partnerprogrammen (Shops) zusammenarbeiten. Sie sind also eigentlich eine dritte Stufe in diesem System. Das hat einen Nachteil, dafür aber auch ziemlich viele Vorteile. Der Nachteil: Eine weitere Stufe kostet und muss Geld verdienen. Bee5 mach das sehr transparent und gibt in den FAQ an, dass sie maximal 30% der Auszahlungen behalten. Geht ok aus meiner Sicht, bei Trigami ist das ähnlich.

Die Vorteile sind:

  • Als Grossanbieter können sie bessere Quoten aushandeln. Das heisst, dass man unter Umständen trotz den 30% mehr verdient als wenn man selbst Mitglied in einem Partnerprogramm ist.
  • Man hat eine zentrale Stelle zur Verwaltung mit einem Auszahlungssatz für alle Programme.
  • Alle Verdienste laufen zentral, damit wird der Auszahlungssatz (der mit 15 Euro im Übrigen sehr human ist) schneller erreicht
  • Da Bee5 der Partner ist, darf man auch ganz legal selber darüber einkaufen.

Bee 5 in der Praxis

Dokumentation und Affiliate Links

Bee5 hat sich grosse Mühe gegeben, das System zu erklären. Hilfe, FAQ, alles ist vorhanden. Ein sehr anmächelig gestaltetes PDF-Dokument gibt einen Überblick und für Leute, die lieber Bildlein, ansehen gibt es Comics:

Lesen Sie den Rest des Beitrags »

Teile und geniesse:
  • Technorati
  • del.icio.us
  • MisterWong
  • Digg
  • StumbleUpon
  • Facebook
  • Google Bookmarks
  • Netvibes
  • Reddit
  • Twitter
  • Print this article!
  • E-mail this story to a friend!

Eingeordnet in Blogging, Web | 3 Kommentare »

Lokale Turniere für CodeRuler

Geschrieben von skaldrom am 17. December 2008

coderulerCodeRuler ist ein geniales Programmierspiel von IBM. Es eignet sich sehr für eine spielerische Beschäftigung mit der Programmiersprache Java.

Für Turniere hat das Spiel eine eingebaute Serverfunktion. Rulers werden ganz bequem von Eclipse aus eingereicht und stehen dann auf dem Server zur Verfügung. Wenn man allerdings eigene Rulers gegeneinander antreten lassen möchte, oder wenn das Netz securitymässig so abgeriegelt ist dass Peer to Peer Verbindungen nicht möglich sind, muss man etwas tricksen. Hier die einfachste Möglichkeit unter Linux (eventuell portierbar), die ich gefunden habe. Kompliziertere Möglichkeiten gibt es natürlich auch.

  1. Die MyRuler.java Dateien müssen irgendwie auf den Servercomputer kommen. Ev. mit E-Mail, USB-Stick oder Flaschenpost.
  2. Den Server in Eclipse Starten mittels: Window → Preferences → Games → Start. Eventuell sollte vor dem Start der Port angepasst werden (9999 ist gut).
  3. Für jeden Ruler muss ein eigenes “Game” Projekt in Eclipse erstellt werden. Die MyRuler.java dorthin kopieren.
  4. Für jeden Ruler Folgendes erledigen:
    1. Projekt öffnen und Games.xml anklicken.
    2. Mit dem Pfeil den Bereich Game Server erweitern und die korrekten Daten ausfüllen.
    3. Identification ausfüllen.
    4. Ruler submitten.
    5. Im Workspace Verzeichnis (Ersichtlich unter File → Switch Workspace) in .metadata/.plugins/com.ibm.games/players wechseln
    6. Das Verzeichnis localhost in irgendetwas Anderes umbenennen

Turniere können nun an Zwei Orten durchgeführt werden:

  • Entweder Direkt von einem games.xml aus.
  • Im Turniermodus: Window → Preferences → Games → Tournaments.

Der Turniermodus ist ein Sensibelschen. Turniere scheinen nur mit neu submitteten Rulern möglich zu sein. Ausserdem: Im Hintergrund wird sofort mit dem Turnier begonnen! Das GUI zeigt keine direkte Reaktion, nicht mal ein Eintrag des neuen Turniers ist ersichtlich, aber im Hintergrund kämpfen die armen Gesellen. Das Spiel kann dann mit dem Button Play angesehen werden. Hier hat erst ein Klick auf den schwarzen Bereich das Spielfeld zum Vorschein gebracht.

Teile und geniesse:
  • Technorati
  • del.icio.us
  • MisterWong
  • Digg
  • StumbleUpon
  • Facebook
  • Google Bookmarks
  • Netvibes
  • Reddit
  • Twitter
  • Print this article!
  • E-mail this story to a friend!

Eingeordnet in Applikationen, Desktop, eLearning | Keine Kommentare »

MySQL berücksichtigt keine Gross- und Kleinschreibung bei select?

Geschrieben von skaldrom am 11. December 2008

Manchmal habe ich echt das Gefühl, ein paar Jahre ganz feste kognitiv eingeschränkt gewesen zu sein. Per Zufall stellte ich heute fest, was das “ci” bei den Datenbank Collations in Mysql heisst.

<musik typ="leicht-nervig" creator="Synthesizer" dauer="10" />
Moderator: Wahaaas bedeutet das Zeh Ih (_ci) bei den Datenbank Collations in MySQL?
Kandidat: Hmmm, uff, kann ich es im Kontext haben?
Moderator: Natürlich! Zeh Ih wie in utf8_general_ci.
Kandidat: Ui, das weiss ich nicht, gibt es Auswahlmöglichkeiten?
Moderator: Ja sicher:

  1. collation identifier
  2. childish internet
  3. clown institut
  4. corporate identity
  5. case insensitive


Und die Lösung: CASE INSENSITIVE

Was bedeutet _ci in der Praxis?

Tabelle:

+----+----------+----------+------------------------------------------+
| id | username | salt     | password                                 |
+----+----------+----------+------------------------------------------+
|  1 | Admin    | 2IT8mKiX | 8fd334609270a4b78c536dbdee4182b5b1d00bb7 |
+----+----------+----------+------------------------------------------+

Tja, folgender Tabelleneintrag wird gefunden mit folgenden Selects:

SELECT * FROM users WHERE username='Admin'; -- Klar, logo
SELECT * FROM users WHERE username='ADMIN'; -- Ui
SELECT * FROM users WHERE username='admiN'; -- Uiui
SELECT * FROM users WHERE username='admin'; -- Uiui, huch

Und das impliziert wiederum, dass ein User, der sich ADMIN nennt, unter Umständen vor dem eigentlichen Admin gefunden wird. Das ist doch eher hässlich. Wieso ist mir das nicht früher aufgefallen..?

Und die Lösung?

Die Collation ändern! Von utf8_general_ci zu utf8_bin und schon verhält sich die Datenbank erwartungskonform.

Was bedeutet dies für Rails?

Zum Einen sollte die Collation in der Datei config/database.yml festgelegt werden:

development:
  adapter: mysql
  encoding: utf8
  collation: utf8_bin
  database: lomas_development
  pool: 5
  username: lomas
  password: sagichnit
  socket: /var/run/mysqld/mysqld.sock

Leider wird die Collation bei Tests in Ruby on Rails nicht berücksichtigt! Das treibt mich zur Verzweiflung, echt!

Ausserdem gibt es noch etwas zu beachten bei validates_uniqueness_of. validates_uniqueness_of ist case-sensitive. Das heisst, auch hier werden admin und ADMIN akzeptiert. Erst ein weiterer Parameter verbietet dies:

validates_uniqueness_of :username, :case_sensitive => false
Teile und geniesse:
  • Technorati
  • del.icio.us
  • MisterWong
  • Digg
  • StumbleUpon
  • Facebook
  • Google Bookmarks
  • Netvibes
  • Reddit
  • Twitter
  • Print this article!
  • E-mail this story to a friend!

Eingeordnet in Theorie und Schnipsel, Webapplikationen | 2 Kommentare »

Kleine Tricks in Ruby on Rails

Geschrieben von skaldrom am 5. December 2008

Hier eine kleine Sammlung von Dingen, die mir geholfen haben beim Lösen der Probleme die sich einem N00b so stellen.

Exportieren von Datensätzen ins YAML Format

Rails Fixtures sind Testdatensätze, die im relativ übersichtlichen YAML-Format gespeichert werden. Möchte man bestehende Datenbankinhalte als Testdatensätze verwenden, so können Sie direkt in YAML exportiert werden.

Ich halte mich an den Beitrag von NetManiac. Den Code habe ich nur soweit ergänzt, als dass ich das Exportieren der magischen Felder “id”, “created_at” und “updated_at” verhindere und den Dateinamen ändere, damit keine bestehenden Fixturen überschrieben werden.

Aufgerufen mit rake extract_fixtures['mymodel'] speichert es mymodel.dumped.yml im richtigen Verzeichnis.

Datei: libs/tasks/extract_fixtures.rake:

desc 'Create YAML test fixtures from data in an existing database.
Defaults to development database. Set RAILS_ENV to override. Use args
table and limit to dump one table and limit number of records'

task :extract_fixtures, :table, :limit, :needs => :environment do |t, args|
  args.with_defaults(:table => nil, :limit => nil)
  limit = args.limit.nil? ? "" : "LIMIT #{args.limit}"
  sql = "SELECT * FROM %s #{limit}"
  skip_tables = ["schema_info" ]
  if args.table.nil?
    tables = ActiveRecord::Base.connection.tables - skip_tables
  else
    tables = [ "#{args.table}"]
  end

  ActiveRecord::Base.establish_connection
  tables.each do |table_name|
    i = "000"
    File.open("#{RAILS_ROOT}/test/fixtures/#{table_name}.dumped.yml" , 'w' ) do |file|
      data = ActiveRecord::Base.connection.select_all(sql % table_name)
      file.write data.inject({}) { |hash, record|
        record.delete_if{|key, value| ['id', 'created_at', 'updated_at'].include?(key)}
        hash["#{table_name}_#{i.succ!}"] = record
        hash
      }.to_yaml
    end
  end
end

ActiveRecord Attribute beim Auslesen mit Defaultwerten überschreiben

Wenn ein Attribut immer beim Auslesen mit eineb bestimmten Wert belegt werden soll wenn noch nichts vorhanden ist, so geht dies mittels folgendem Codefragment:

def my_attribute
  read_attribute(:my_attribute) or another_attribute.capitalize+" "+yet_another_attribute
end

has_and_belongs_to_many mit Checkboxen in Fieldsets

Eine Rolle hat viele Permissions und umgekehrt. Um solche Assoziationen abzubilden, kann man collection_select verwenden, das aber leider nur ein hässliches Listfeld ausgibt. Eine ambitioniertere Variante arbeitet mit Checkboxen.

HABTM mit Checkboxen

HABTM mit Checkboxen

Zuerst wird in Permission.get_indexed_by_controller ein Hash of Hashes gemacht, der als ersten Schlüssel die Überschriften hat (controller) als zweiten Schlüssel die Feldbeschriftungen mit dem Zustand als Inhalt. Folgendes Partial gibt ein Formular aus und versieht sie mit “(Un-)Check all” Links:

<%= link_to_function 'Check all', "$$('input.permission').each(function(checkbox) { checkbox.checked = true; })" %> |
<%= link_to_function 'Uncheck all', "$$('input.permission').each(function(checkbox) { checkbox.checked = false; })" %>
<% @permissions_indexed_by_controller=Permission.get_indexed_by_controller %>
<br />
<%- for controller in @permissions_indexed_by_controller.keys -%>
  <% field_set_tag controller do %>
    <%- for permission in @permissions_indexed_by_controller[controller] -%>
      <%= check_box_tag 'role[permission_ids][]', permission.id, @role.permissions.include?(permission),{ :id => "role_permission_ids_"+ permission.id.to_s, :class => "permission"} -%><%= permission.description %>
    <%- end -%>
  <% end %>
<%- end -%>

Wichtig ist, dass im entsprechenden Controller in der update Funktion ein leeres Array erzeugt wird wenn nichts übergeben wird, sonst ändert sich nichts wenn man alle Häckchen rausnimmt:

params[:role][:permission_ids] ||= []

Erzeugen eines Hash of Hashes in Ruby

Die Hash/Array implementierung in PHP ist immernoch ungeschlagen. Will man in Ruby ein Hash of Hashes machen und einen Wert mittels << hinzufügen wenn noch kein leerer Hash besteht, so tut es blöd. Insbesondere wenn man Records in einem Hash abspeichen will, hilft folgendes Idiom:

(ret[map_key] ||= []) << record
Teile und geniesse:
  • Technorati
  • del.icio.us
  • MisterWong
  • Digg
  • StumbleUpon
  • Facebook
  • Google Bookmarks
  • Netvibes
  • Reddit
  • Twitter
  • Print this article!
  • E-mail this story to a friend!

Eingeordnet in Theorie und Schnipsel, Webapplikationen | Keine Kommentare »

Dynamisches Navigationsmenü mit Highlightning in Ruby on Rails

Geschrieben von skaldrom am 25. November 2008

Und es kam so: Gerade eben aufgestanden und am Gliedersortieren, sprach der Duschkopf zu mir: “Hey, du!”. Obwohl überrascht über diese ungewohnte Intimität des Duzens, war meine Aufmerksamkeit geweckt. “Jetzt mal ehrlich”, so sprachs weiter, “mit dem Symfony Framework hälst Du es gleich wie mit dem Latein: Oftmals angefangen, aber nie ganz warm geworden, gelle.”. Mein Hirn lief schon an der Grenze seiner morgentlichen Leistungsfähigkeit, aber eine Antwort darauf war wahrscheinlich auch gar nicht verlangt. “Du weisst schon, dass PHP eine Templatesprache ist, oder? Wieso hörst du nicht auf mit der Verulkung und versuchst Dich endlich mal am Original?”. Ich entgegnete was in der Richtung, dass die genuinen Römer (TM) schon ziemlich lange die Arena von unten ansehen. “Nein, du Dumpfbacke! Ruby on Rails sollst du versuchen und Freude daran haben! Frohlocken! Beweg deinen alternden Denkapparat du Assemblerheini!”

Natürlich folge ich allen Anweisungen meiner Badezimmerarmaturen, und so habe ich mich unverzüglich an die Arbeit gemacht. Die Standardinstallation hat es natürlich nicht getan (…und Zeit hat man zu viel…), Rails 2 musste es sein, mittlerweile released als Rails 2-2. Auch eine Entwicklungsumgebung musste her, und ich habe mich für Netbeans entschieden, da sie für zwei weitere Projekte (Handygames und JavaFX) eh angesehen werden wollte. Wie das Glück so spielt, hatten auch die Netzbohnen gerade ein grösseres Update auf 6.5 durchgemacht und kleinere Fluchereien mit verwurschtelten Projekten ausgelöst. Naja.

Mit verschiedenen Offline- und Onlinequellen habe ich mich an die Arbeit gemacht, und muss sagen, Ruby on Rails ist, hmm, ungewohnt. Bis jetzt geht es überraschend flüssig, auch wenn ich bei jeder Zeile 4 verschiedene Quellen konsultieren muss um es richtig (TM) zu machen.
Lesen Sie den Rest des Beitrags »

Teile und geniesse:
  • Technorati
  • del.icio.us
  • MisterWong
  • Digg
  • StumbleUpon
  • Facebook
  • Google Bookmarks
  • Netvibes
  • Reddit
  • Twitter
  • Print this article!
  • E-mail this story to a friend!

Eingeordnet in Theorie und Schnipsel, Webapplikationen | 2 Kommentare »

Kubuntu Linux auf dem Elitebook 8530p

Geschrieben von skaldrom am 30. October 2008

Ich hab das Christkind überfallen und ihm einen neuen Laptop, genauer ein HP EliteBook 8530p abgenommen! Das Überzeugende waren nicht etwa die Prozessorkerne, die unglaublich vielen schnuckligen Gigabites auf der Festplatte oder die sonstigen Ports, nein, es hat ein eingebautes Lämpchen (HP Night Light genannt)!

Nachdem sich ein paar Bytes im RAM quer gestellt haben, funktionierte die zweite Version und Windows hat wirklich schön gebootet.

Linux Bootprobleme

Voller Freude versuchte ich eine Ubuntu 8.04 und eine Kubuntu 8.10 RC1 (Interpid) zu booten, und damit begann die Odyssee: Schwarzer Bildschirm und Ruhe.

Damit sich Ubuntu 8.04 zum Mitspielen und Aufstarte überreden liess, brauchte es den Kernelparameter noapic. Nachdem ich splash und quiet entfernt habe, sah ich folgendes, das mir das Blut in den Adern gefrieren lies:

BUG: soft lockup - CPU#1 stuck for 11s! [modprobe:1913]

Über diesen Fehler schweigt sich das Internet leider aus. Bei Kubuntu 8.10 RC1 sah es nicht viel besser aus und der Bootvorgang blieb stehen bei:

ACPI: Thermal Zone

Lesen Sie den Rest des Beitrags »

Teile und geniesse:
  • Technorati
  • del.icio.us
  • MisterWong
  • Digg
  • StumbleUpon
  • Facebook
  • Google Bookmarks
  • Netvibes
  • Reddit
  • Twitter
  • Print this article!
  • E-mail this story to a friend!

Eingeordnet in Hardware, Linux | 15 Kommentare »