NerdyNerds blogging nerds…

14Aug/100

Teil 3: MVC – Model-View-Controller, was ist das eigentlich?

geschrieben von silent

Da sich Ruby on Rails an dem MVC-Muster orientiert kann es nicht schaden zuersteinmal zu klären was das MVC überhaupt ist.

MVC steht für Model-View-Controller, es beschreibt ein Architekturmuster in der Software-Entwicklung. Es teilt den Entwurf einer Software in drei Bereiche ein - die Datenschicht (engl. model), die Präsentation (view) und die Steuerung (controller). Der Ziel dieses Musters ist der flexible Programmentwurf, bei dem es möglich wird Änderungen oder Erweiterungen mit wenig Aufwand durchzuführen. Aber auch die Wiederverwendbarkeit von einzelnen Komponenten der Software spielt eine Rolle. Da Rails das DRY-Prinzip ("Don't repear yourself") verfolgt ist auch klar, wieso MVC die 1. Wahl für Rails ist.

Aber wie genau funktioniert das jetzt?

M - das Modell

Das Model ist unabhängig vom Controller und dem View, es verwaltet (lesen, ändern, speichern, löschen) quasi nur die Daten, die ihm vom Controller übergeben werden und überprüft die vom Controller bekommenen Daten auf Gültigkeit und verweigert oder lässt dann eine Speicherung zu. Das Model stellt das Backend dar und verwaltet die Daten in der Datenbank (oder je nach Implementierung auch ohne Datenbank) und kümmert sich um konsistente Datensätze.

V - die Präsentation

Die View nimmt die Daten des Models entgegen und erstellt daraus die geforderte Ansicht.

C - die Steuerung

Der Controller verwaltet die Koordination von Modell- und Präsentationsschicht. Er wertet Benutzeraktionen aus und agiert entsprechend. Daten werden nicht in der Steuerung manipuliert, sondern in der Modellschicht.

Beispiel - Mitarbeiterübersicht anzeigen

Wir gehen einmal davon aus, dass wir unsere Mitarbeiterverwaltung nun fertig implementiert haben. Nach dem MVC-Muster sollte es dann so aufgebaut sein, dass wir - wenn wir die Seite über den Browser (http://127.0.0.1:3000/mitarbeiterverwaltung) betreten - zuersteinmal eine Übersicht (als HTML-Dokument) aller Mitarbeiter erhalten. Alleine für diese Ansicht musste unser Webserver schon einiges tun: Unser Browser hat die Anfrage GET /mitarbeiterverwaltung an den Server gesendet. Dieser hat Sie an Rails weitergeleitet, Rails hat dann (gemäß Konvention wird / zu /index) unseren erstellten Controller index damit kontaktiert und führt nun den Code des Controllers index aus. Da unser Controller anweist, die Daten aus der Model-Schicht zu holen, weist er das Model index an alle Mitarbeiterdaten aus der Datenbank auszulesen. Nachdem das Model fertig ist, werden die Datensätze vom View index gerendert und in eine tabellarische Ansicht gebracht, dass diese für uns übersichtlich erscheinen. Anschließend schickt der Webserver die Ausgabe an unseren Browser und wir erhalten unsere angefragte Übersicht.

Weitere Informationen zum MVC sind unter http://de.wikipedia.org/wiki/Model_View_Controller zu finden.

gespeichert unter Offtopic keine Kommentare
13Aug/100

Ruby on Rails – Erstes Projekt anlegen

geschrieben von silent

Ich möchte zunächst mit einem einfachen, kleinen Projekt Mitarbeiterverwaltung beginnen. Ziel soll es sein, über den Browser Mitarbeiter anzulegen, zu editieren, zu ändern und zu löschen.

1. Um mit Rails ein neues Projekt anzufangen, startet man zunächst mit der Eingabeaufforderung und wechselt in das Verzeichnis, in das das neue Projekt abgelegt werden soll:

x:\>cd <InstantRails>\rails_apps
x:\
<InstantRails>\rails_apps\>rails mitarbeiterverwaltung -d mysql
create
create  app/controllers # hier werden später unsere Controller abgelegt
create  app/helpers # hier kommen die jeweiligen >Helferlein< rein, die wir mehrmals brauchen
create  app/models # die Model-Schicht, hier lagern die Daten und werden gespeichert/gehalten/gelesen
create  app/views/layouts # hier kommt das Seitenlayout unserer Seite später rein
create  config/environments
create  config/initializers
create  config/locales
create  db
create  doc
create  lib
create  lib/tasks
create  log
create  public/images # öffentlich zugängliches Verzeichnis für den Webserver, hier lagern die Bilddateien
create  public/javascripts
# öffentlich zugängliches Verzeichnis für den Webserver, hier lagern die JavaScripte
create  public/stylesheets # öffentlich zugängliches Verzeichnis für den Webserver, hier lagern die CSS-Dateien
create  script/performance
create  test/fixtures # hier landen die fiktiven Daten für unsere Testfälle
create  test/functional # funktionelle Tests lagern hier
create  test/integration # integrelle Tests lagern hier
create  test/performance # performance Tests lagern hier
create  test/unit # unit Tests zum überprüfen der korrekten Arbeitsweise von Models
create  vendor
create  vendor/plugins
create  tmp/sessions
create  tmp/sockets
create  tmp/cache
create  tmp/pids
create  Rakefile
create  README
create  app/controllers/application_controller.rb
create  app/helpers/application_helper.rb
create  config/database.yml # Konfigurationsdatei für Datenbank
create  config/routes.rb # Routen, damit Rails weiss wie mit GET-Parametern umgegangen werden soll
create  config/locales/en.yml # englische Sprachdatei
create  db/seeds.rb
create  config/initializers/backtrace_silencers.rb
create  config/initializers/inflections.rb
create  config/initializers/mime_types.rb
create  config/initializers/new_rails_defaults.rb
create  config/initializers/session_store.rb
create  config/initializers/cookie_verification_secret.rb
create  config/environment.rb # globale Konfigurationsdatei für das komplette Projekt, um z.B. Plugins einzubinden oder die richtige Railsversion vorzugeben
create  config/boot.rb
create  config/environments/production.rb
create  config/environments/development.rb
create  config/environments/test.rb
create  script/about
create  script/console
create  script/dbconsole
create  script/destroy
create  script/generate
create  script/runner
create  script/server
create  script/plugin
create  script/performance/benchmarker
create  script/performance/profiler
create  test/test_helper.rb
create  test/performance/browsing_test.rb
create  public/404.html
create  public/422.html
create  public/500.html
create  public/index.html
create  public/favicon.ico
create  public/robots.txt
create  public/images/rails.png
create  public/javascripts/prototype.js
create  public/javascripts/effects.js
create  public/javascripts/dragdrop.js
create  public/javascripts/controls.js
create  public/javascripts/application.js
create  doc/README_FOR_APP
create  log/server.log
create  log/production.log
create  log/development.log
create  log/test.log

Die Datei x:\<InstantRails>\rails_apps\mitarbeiterverwaltung\config\database.yml enthält jetzt schon die richtigen Einstellungen (da wir mit der Anweisung -d mysql angeg. haben MySQL als Adapter zu nutzen) für den Zugriff auf eine MySQL-Datenbank. Den MySQL-Server haben wir ja bereits mit InstantRails zusammen installiert.
Unser "Skelett" wurde jetzt von Rails angelegt. Es beinhaltet alles (und meistens viel mehr) was wir für ein neues Projekt benötigen.

2. Nun wechseln wir in der Konsole mit cd mitarbeiterverwaltung in das soeben durch Rails erzeugte Verzeichnis. Dort führen wir nun rake db:create:all aus, um die drei Datenbanken mitarbeiterverwaltung_development, mitarbeiterverwaltung_production, mitarbeiterverwaltung_test anzulegen. Das können wir mit einem Besuch von http://127.0.0.1/mysql überprüfen. Innerhalb dieser Datenbanken sind allerdings noch keine Tabellen, die kommen später dazu. Die Datenbanken sind - wie der Name schon verät - für die drei Umgebungen Entwicklung (_development), Test (_test), Produktion (_production) für den späteren Praxisbetrieb.

3. Wir testen schonmal ob bis hierhin alles klappt. In der Konsole tippen wir dazu im Verzeichnis mitarbeiterverwaltung ruby script/server ein, damit veranlassen wir, dass Rails den (Mongrel-)Webserver für unser Projekt Mitarbeiterverwaltung (und nur für dieses!) startet. Das dauert einen kleinen Augenblick. Danach sollte der Server laufen und über die Adresse http://127.0.0.1:3000/ erreichbar sein. Dort findet sich die Standard-Rails Seite. Mit einem Klick auf About your application’s environment finden sich weitere Informationen zur Rails-Umgebung. Falls hier ein Fehler auftritt, so liegt meist ein Fehler in der Konfiguration des Datenbankservers. In Teil 1 habe ich erklärt, wie man vorgehen muss, wenn man einen MySQL-Server anstelle des SQLite 3 verwenden möchte.

4. Wohlgemerkt finden wir auf der geöffneten Seite außer der Standard-Seite von Rails keine weiteren Seiten. Das ist auch richtig, weil wir bisher nur ein Projekt angelegt haben, das beinhaltet nur den Rahmen der eigentlichen Funktionalität. Uns fehlen noch die eigentlichen Seiten (auch Views genannt, das V aus MVC was wiederum die Abkürzung für Model-View-Controller ist). Wie das genau funktioniert erkläre ich im dritten Teil.

Übrigens: Für Anregungen und Kritik darf man mir gerne Kommentare unter dem Artikel hinterlassen ;)

11Aug/100

InstantRails 2.0 unter Windows installieren

geschrieben von silent

Es gibt prinzipiell mehrere Möglichkeiten Ruby on Rails aufzusetzen, ich erkläre es aber anhand von InstantRails, weil es meiner Meinung nach ein sehr komfortabler Weg und einen leichten Einstieg ermöglicht, ähnlich XAMPP.

  • InstantRails: Komplettpaket aus Apache (inkl. PHP) + MySQL (inkl. phpMyAdmin zur Administration der DB), Ruby (inkl. Rails) und RubyGem

InstantRails stellt das Komplettpaket mit zwei Beispielprojekten zur Verfügung und kann mit nur wenig Aufwand auf einem Rechner ohne Installation (also ohne Veränderungen am Betriebssystem) aufgesetzt werden. Dazu muss man sich von http://rubyforge.org/projects/instantrails/ InstantRails 2.0 herunterladen. Nach dem Download ist nur ein Entpacken in ein beliebiges Verzeichnis auf der Festplatte notwendig (z.B. D:\InstantRails\). Danach einfach D:\InstantRails\InstantRails.exe starten und die Nachfrage nach dem geänderten Pfad bestätigen. Dabei wird die Umgebungsvariable PATH um den Ruby-/Railspfad (in meinem Beispiel also um D:\InstantRails\) erweitert und ist danach von jedem Ort aus über die Shell erreichbar. Das heisst, dass man nicht immer extra den kompletten Pfad zur ruby.exe angeben muss, sondern in jedem Verzeichnis direkt mit ruby <command> arbeiten kann. Sehr praktisch ;)

Nach dem Starten sollte man gleich ein Update auf die aktuelle Version per Commandline durchführen, da das InstantRails 2.0 seit Dezember 2007 scheinbar nicht weiter gepflegt wird. Dazu gehen wir in unsere Eingabeaufforderung und geben folgenden Befehl ein:

gem update rails --include dependencies

Dieser Befehl updated Rails auf die aktuellste verfügbare Version. Der Parameter --include dependencies ist hier eigtl. überflüssig, er gibt einfach an, dass die Updates auch auf die Abhängigkeiten auf Gems innerhalb von Rails-Projekten beachtet werden sollen. Da wir aber noch kein Projekt angelegt haben, ist dieser Befehl an dieser Stelle nicht wichtig.

Wer wie ich lieber mit MySQL statt SQLite 3 arbeiten möchte, der sollte auch noch den Befehl

gem install mysql

ausführen lassen, damit auch die aktuellste MySQL-Gem installiert wird. Erst danach kann auch der MySQL-Adapter unter Rails verwendet werden. Standardmäßig arbeitet Ruby on Rails aber mit SQLite 3.

Den Apache brauchen wir übrigens nur für den Zugriff auf phpMyAdmin, der komfortablen Oberflächer zur Wartung von MySQL-Datenbanken. Da phpMyAdmin in PHP geschrieben wurde, ist hier natürlich auch das Modul PHP für den Apache konfiguriert. Zu erreichen ist die Datenbank dann über http://127.0.0.1/.

Das wars auch schon, die Entwicklungsumgebung ist geschaffen. Ab jetzt kann man damit beginnen ein eigenes Ruby on Rails Projekt zu starten. Als Editor kann ich Aptana RadRails empfehlen. Zu finden ist dieser auf Eclipse basierende Editor unter http://www.aptana.com/products/radrails. Er ist sehr mächtig im Umgang mit Rails-Projekten. Man behält einfach den besseren Überblick über die gesamte Projektstruktur. Es macht einfach Sinn diesen Editor zu nutzen, zumal er kostenlos ist!

Hinweise bei der Verwendung von MySQL: Um Probleme beim Starten des Mongrel vorzubeugen, muss die libmySQL.dll von <InstantRails>\mysql\bin\ nach <InstantRails>\ruby\bin\ kopiert werden.

Im nächsten Teil werde ich dann erklären wie man sein erstes Projekt unter Ruby on Rails beginnt und wie Ruby on Rails dabei vorgeht.

10Aug/100

Was ist Ruby on Rails?

geschrieben von silent

Es ist schon einige Zeit her, dass ich mich das letzte mal zu Wort gemeldet habe - Zeit genug um neues auszuprobieren.

Genauer gesagt 'Ruby on Rails'. Ich spiele schon eine ganze Zeit damit rum, wollte einfach mal testen wie es so ist, was es kann und überhaupt wie es denn funktioniert. Zuerst war mir nur der Begriff 'Ruby on Rails' bekannt, aber dass es eigtl. ein Framework für die Sprache Ruby ist, wusste ich nicht. Naja, und ein Umstieg auf Frameworks wollte ich sowieso schon lange in Erwägung ziehen. Kommt also sehr passend, dieses RoR.

Ja gut: gelesen und getan. Da gab es eigtl. nur ein Problem: meine bisherigen Arbeiten bezogen sich immer auf eine relativ 'geordnete' Apache-Umgebung, RoR bringt hier sehr viel neuen Wind ins Geschehen - Begriffe wie WEBRick, Mongrel, Rake, MVC, DRY, GEMs, ... sind hier anzutreffen. Naja okay, da musste ich durch. Nach einiger Einlesungszeit habe ich dann auch so langsam aber sicher verstehen können, wie der prinzipielle Aufbau von Rails funktioniert.

Am Anfang war der Rubin - Ruby

Es gibt die Sprache Ruby, diese wurde im Dezember 1995 von Yukihiro 'Matz' Matsumoto. Yukihiro stammt aus Japan, die Sprache wurde aber erst ab dem Jahr 2000 in anderen Ländern bekannt. Durch die Lizenzierung unter der GPL verbreitete sie sich aber relativ schnell und fand viele Anwedungen auch außerhalb von Japan. Die Sprache entstand hauptsächlich aus der Unzufriedenheit verfügbarer Skriptsprachen heraus. Sie lehnt an Perl und Python, sowie LISP, Ada, JavaScript und weiteren ähnl. Sprachen an.

David Heinemeier Hansson veröffentlichte im Juli 2004 erstmals das Webapplication Framework Ruby on Rails - das wie der Name schon sagt, auf Ruby aufbaut. Es wurde so entwickelt, dass ein ständiges Wiederholen von bereits geschriebenem Code verhindert wird, indem es das DRY-Prinzip ("Don't repeat yourself") verfolgt und "Konvention vor Konfiguration" gilt. Das ermöglicht agile Softwareentwicklung, indem eine schnelle Umsetzung der geforderten Spezifikationen einer Software möglich wird.
Zu dieser schnellen Umsetzung wird es erforderlich gewisse Richtlinien einzuhalten, damit das Framework auch weiß, wie es mit der relativ geringen Menge an Code umgehen soll - genau das ist "Konvention vor Konfiguration". Und durch die zwangsläufige Einhaltung des Model-View-Controller Musters (kurz MVC) ist für jeden Rails-Entwickler möglich, sich problemlos in anderen Rails-Projekten zurecht zu finden.

21Jun/100

Wissenswertes zu Akkus

geschrieben von silent

Akkus sind heutzutage meistens aus den chemischen Elementen Lithium-Ionen (LiIon) und NiMH (Nickel-Metallhydrid) zu finden. NiMH werden hauptsächlich für Zellen der Bauform Typ AA und Typ AAA, sowie allen gänigen Formaten für die meisten elektronisch betriebenen Utensilien gebaut. LiIon-Akkus für Geräte mit hohem Energiebedarf wie z.B. Laptops, Mobiltelefone und Co.

Da ich mich etwas intensiver mit dem Thema Akkus auseinandergesetzt habe, will ich hier einige Dinge erläutern die wahrscheinlich auch anderen Lesern behilflich sein werden. Zu diesem Zweck hab' ich einige Fragen zusammengestellt.

  • Was bedeutet eigtl. mAh?
    • mAh steht für Milliampere Stunden (engl. h = Stunden; 1000 mA = 1 Ampere)
  • Für was steht mAh und was gibt mir dieses Maß an?
    • Milliampere geben die Stromstärke einer Zelle an, je höher die angeg. Zahl ist, umso länger kann man mit dem Akku arbeiten
  • Welches Ladegerät sollte ich benutzen, wenn ichs eilig habe?
    • Es gibt Schnellladegeräte, diese können Akkus in wenigen Stunden aufladen. Der Vorteil ist natürlich, das die Akkus schnell voll geladen werden. Das Problem besteht aber darin, dass der Akku dabei mit einer - für diese Akkus - sehr großen Stromstärke (um ca. 1000-2000mAh) geladen werden, was dem Akku auf Dauer nicht gut tut. Ab und zu macht das natürlich nichts, man sollte aber in Zukunft Vorausplanen und Akkus etwa 24 Stunden mit einem geringen Stromfluss (bei etwa 120-400mAh) aufladen, das verhindert, dass der Akku zu heiß wird und damit nicht überhitzt.
  • 24 Stunden aufladen? Geht das nicht schneller?
    • Klar, es gibt Ladegeräte bei denen kann man die Stromstärke manuell regeln und es gibt auch Ladegeräte die regeln das automatisch. Die billigen aus dem Supermarkt haben meist nur eine Einstellung, bei diesen muss man die eingerichtete Stromstärke so hinnehmen. Ein Ladegerät das unterhalb von etwa 500mAh Akkus lädt sollte optimal sein und die Akkus am wenigsten belasten. Das kostet zwar Zeit, die lohnt sich aber! Bei einer Schnellaufladung sollte man niemals einen Ladestrom größer als 1/4 der Kapizität des Akkus anlegen, bei einem Akku mit 2400mAh enstpricht das dann 600mAh als Maximalwert.
  • Wie berechne ich die Ladezeit eines Akkus?
    • Für NiMH/NiCd: (Kapazität des Akkus in mAh) / (Ladestrom in mA) x 1,4 = benötigte Zeit in Stunden (der Multiplikator 1,4 kommt von der benötigten Arbeit (etwa 30-40% bei NiMH), die eine Zelle mehr braucht um vollständig aufgeladen zu werden)
  • Wieso sind manche Ladegeräte so teuer, die laden doch auch nur, oder nicht?
    • Nein! Es gibt sehr viele Unterschiede bei Ladegeräten. Die Hauptmerkmale liegen dabei auf Ladestrom (mA), automatischer Umschaltung in Erhaltungsladung, Überhitzungsschutz, Enladefunktion (nur für NiCd notwendig, werden aber - aufgrund der giftigen Inhaltsstoffe - nicht mehr verkauft) und Check-Test-Zyklen zum dyn. entladen/laden, falls notwendig. Ladegeräte für nur wenige Euro haben diese Funktionen definitiv nicht, außer es gibt irgendwo ein super Angebot dazu (dann möchte ich den Link haben!). Bei Ladegeräten ab etwa 30 Euro finden sich diese "Pflege-Lader". Man kann dann einfach selbst bestimmen, ob der Akku schnell geladen werden soll oder eben nicht. Die Funktion "Defekt", die es bei einigen Ladern gibt, gibt zusätzlich noch an, ob der Akku zum Sondermüll wandern kann. Die wichtigste Funktion ist aber die automatische Umschaltfunktion in Erhaltungsladung. Das bedeutet, dass das Ladegerät aufgrund eines Mikrocontrollers selbständig erkennt, wann ein Akku voll aufgeladen ist und diesen dann nicht weiter 'brät', sondern schön mit der Stromstärke runterfährt und den Akku auf diesem Lade-Niveau hält.
  • Muss man NiMH Akkus entladen bevor man sie auflädt?
    • NiMH Akkumulatoren haben eben genau diese Eigenschaft, dass sie in jedem Zustand aufgeladen werden können. Sie bußen dabei keine Leistung ein.
  • Kann ich Akkus eine lange Zeit lagern, ohne dass ich sie dann vor der Verwendung laden muss?
    • Generell sollte man Akkus erst dann komplett aufladen, wenn man sie unmittelbar danach verwenden möchte. Es gibt von einigen Herstellen aber weiterentwickelte Typen, die über eine geringere Selbstentladung verfügen.
  • Was sind das für Akkus, die man so lange lagern kann?
    • Diese haben durch ihre Superkristallgitter-Legierung der Kathode und durch die geänderte Nickelhydroxid-Legierung der Anode die Eigenschaft über die Zeit weniger Ladung zu verlieren als Akkus ohne diese Veränderungen. Der 'Trick' besteht im Grunde darin, dass ein chemischer Abbau verlangsamt wird und somit nur etwa 15% im ersten Monat und anschließend pro Jahr nur etwa 15% an Kapazität verloren gehen. Der eingesparte Platz innerhalb der Zelle nimmt Platz für mehr Grundkapazität. Aus diesem Grund gibt es die NiMH-Akkus mit geringerer Selbstentladung (englisch low self-discharge NiMH battery, LSD-NiMH) auch nur mit geringerer Kapizität als gewöhnliche NiMH-Akkus von rund 2000mAh. NiMH-Akkus bieten für Bauformen vom Typ AA eine Kapizität bis zu 3000mAh. Das ist aber nicht wirklich eine Einbuße, denn von der vorhanden Kapazität kann schließlich auch viel mehr genutzt werden. Zum Vergleich: herkömmliche NiMH-Akkus haben eine Selbstentladung von etwa 15%-50% pro Monat!
  • Wie Lagere ich NiMH-Akkus, die ich lange Zeit nicht benutze?
    • Akkus von denen man weiß, dass man sie in den nächsten Monaten nicht brauchen wird, sollte man etwa bis zur Hälfte entladen und an einem kühlen, trockenen Ort ab etwa o°C lagern. Am besten im Kühlschrank, allerdings auch so verpacken, dass Lebensmittel nicht damit in Berührung kommen können. Das ist die schonendste Variante für den Akku. Man muss aber ebenfalls darauf achten, dass Akkus einmal im Monat genutzt werden sollten, d.h. 'verbrauchen' und wieder aufladen, damit der Akku lange hält und zwar auch dann wenn man diesen Kühl lagert.
  • Was ist für gewöhnlich die optimale 'Arbeitstemperatur' für einen Akku?
    • Etwa 0°C bis 40°C sind optimal
  • Was ist eigtl. dieser Memory Effekt (Lazy-Battery-Effekt)?
    • Der Memory-Effekt tritt nur bei NiCd-Akkus auf und kann durch etwa fünf Lade-/Enladevorgänge behoben werden. Akkus sind immer dann davon betroffen, wenn sie vor dem laden nicht vollständig entladen wurden. Diese werden bei vielen elektronischen Geräten dann als "leer" angezeigt, obwohl noch Kapazität vorhanden ist. Das liegt daran, dass die Spannung dadurch etwas geringer ist, als sie eigtl. sein sollte.
  • Sollte ich meinen Laptop-Akku bei Netzbetrieb rausnehmen?
    • Diese Frage findet man häufig. Die elektronische Steuerung eines Laptops funktioniert so gut, dass sie einen vollen Akku erkennt und diesen nicht weiter auflädt, was zu einer Überhitzung führen könnte. Deshalb macht es keinen Unterschied, ob der Akku im Laptop ist oder nicht. Es ist sogar sehr vorteilhaft einen Akku ständig drin zu behalten. Man beachte den Fall eines Stromausfalls (der ist zwar relativ selten, aber möglich): hier würde sich ein Akku bezahlt machen, denn er überbrückt ähnlich einer USV (unterbrechungsfreien Stromversorgung) die Zeit, in der kein Strom aus der Netzsteckdose verfügbar ist. Zudem sollte der Akku sowieso monatlich 'arbeiten', damit er keinen Schaden erleidet und mindestens einmal geladen werden.

Ich muss sagen, ich habe wieder mal was dazu gelernt und habe mir im Kalender schonmal einen 'Battery-Day' eingetragen, um meine Akkus monatlich zu 'pflegen'. Allerdings mache ich das nur mit denen aus meiner Kamera, dem Laptop und dem passenden Zubehör, für alles andere ist mir das nicht allzu wichtig!

17Jun/100

Zugriffsrechte in CMS managen

geschrieben von silent

Ich bin gerade dabei eine Möglichkeit für das Rechtemanagement innerhalb eines CMS zu schaffen. Ziel soll es sein, Gruppenrechte zentral über alle Bereiche des CMS zu managen. Das ganze soll in ein bereits vorhandenes System eingearbeitet werden. Es soll sowohl die Navigationsstruktur, sowie die zuständigen Controller (zur Steuerung mit Request-Parametern innerhalb des Webportals) und das Modul, das diese Rechte verwaltet davon berüht werden.

Es gibt fünf Benutzergruppen. Die Konfiguration soll, je nachdem welcher Benutzer gerade mit dem System arbeitet, die jeweiligen Berechtigungen zur Laufzeit aus einer Konfigurationsdatei laden. Die Konfigurationsdatei ist bis jetzt händisch zu pflegen. Eine genaue Planung, ob die Berechtigungen später noch über eine Datenbank gepflegt werden soll, gibt es bis jetzt noch nicht. Evtl. werde ich mir da noch was überlegen. Da das ganze aber sowieso auf modulare Art und Weise aufgebaut ist, ist ein Austausch aber jederzeit unkompliziert möglich.

15Jun/100

Suchmaschinenindizierung, Spam und Attacken effektiv vermeiden

geschrieben von silent

Jeder kennt es und es nervt extrem, wenn die Suchmaschine E-Mail Adressen oder Webadressen zu internen Bereichen indiziert. Erstens wird damit den Ganoven geholfen, die E-Mails für Spam missbrauchen und zweitens ist es für die Welt ziemlich uninteressant wo der interne Bereiche von Müllers Homepage zu finden ist. Genausowenig möchte man großes Aufsehen eregen und Leute dazu animieren sich daran zu versuchen, in den internen Bereich zu gelangen, sei es durch Bruteforce Attacken, Analyse von (X)HTML- und JavaScript-Quellcode oder einfach nur das rumspielen mit irgendwelchen Links.
Dabei ist es eigentlich ganz einfach, man muss nicht viel dafür tun. Hier gehts in erster Linie darum Dinge die wichtig sind, erst gar nicht danach aussehen zu lassen bzw. wenns geht erst gar niemandem zeigen. Denn was man nicht weiß, macht einen nicht heiß.

Gerade große Suchmaschinen sind vielen kleineren Suchmaschinen eine große Hilfe, wenn es darum geht Daten zu sammeln. Das gilt allerdings nur beschränkt. Man gebe nur mal seinen Namen in eine Suchmaschine seiner Wahl ein schaue was man da so alles findet, zur Not tuts auch der alte Nick aus dem Forum XY, den man früher mal nutzte. Wenn der Name nicht gerade häufig vorkommt wird man sicherlich sehr schnell fündig und so einige Erinnerungen werden geweckt.
Als Webmaster sollte man sich in jedem Falle darüber im klaren sein, wie eine Suchmaschine grob funktioniert. Sie kann - im Allgemeinen - nur solche Inhalte finden, die irgendwo mit einem Link dorthin zeigen. Ist ein Link erst einmal auf einer gelisteten Seite gesehen worden, so wird auch schnell die neue Seite in der Suchmaschine zu finden sein.

Nachfolgend nun einige Tipps von mir, die man in relativ kurzer Zeit auch mit nur wenig technischen Kenntnissen schnell umsetzen kann.

Eine Seite komplett von der Indizierung ausschließen

Um eine Seite komplett von der Indizierung zu verbannen gibt es praktisch zwei Möglichkeite, das auf höfliche Weise zu tun. Dafür wurde Anfang Juni 2008 eine Übereinkunft der drei großen Suchmaschinen von Google, Yahoo und Microsoft getroffen. Diese gesteht dem Webmaster die Freiheit zu, seine Seite(n) nach belieben indizieren zu lassen oder eben nicht. Dazu gibt es je nach Suchmaschine einige Feinheiten.

robots.txt: die Datei besteht aus mehreren Blöcken, die für die gewünschte Suchmaschine steht und diese informiert welche Bereiche nicht gecrawlt werden sollen. Die Datei muss sich im Wurzelverzeichnis befinden (meistens html/robots.txt, httpdocs/robots.txt oder httpsdocs/robots.txt). Ein Hinweis sollte aber gegeben sein: die robots.txt ist lediglich ein Hinweis und kein muss für die Crawler. Nicht alle beachten diese Einstellung.

Beispiele für die Konfiguration per robots.txt

# Anweisung für alle Suchmaschinen, diese Seite überhaupt nicht zu crawlen
User-agent: *
Disallow: /

# Anweisung für alle Suchmaschinen, /impressum.html und /interne-bilder.html nicht zu crawlen
User-agent: *
Disallow: /impressum.html
Disallow: /interne-bilder.html

# Anweisung für die Suchmaschine XYZ, die Seite /impressum.html und alle PDF-Dateien  nicht zu crawlen
User-agent: XYZ
Disallow: /impressum.html
Disallow: /*.pdf$
Disallow: /*.PDF$

# Anweisung für die Suchmaschine X nur die Seiten innerhalb des Ordners /gute-crawl-seiten/gibts-hier/ zu crawlen
User-agent: X
Disallow: /
Allow: /gute-crawl-seiten/gibts-hier/

Eine Mischung mehrerer solcher Blöcke aus 'User-agent' gefolgt von 'Disallow'/'Allow' sind zulässig. Ein Robot liest die Datei für gewöhnlich von oben nach unten und hält dort, wo sein 'User-agent' auftritt und arbeitet dann bis zum nächsten 'User-agent' alle Befehle ab. Das macht eine Mischung und spezielle, extrem spezifizierte Konfiguration für mehrere Suchmaschinen möglich. Aber wie bereits erwähnt ist diese Art der Aussperrung nur eine höfliche Bitte an die Suchmaschine und man sollte sich die Befehle und jeweiligen user-agent's bei einer so speziellen Konfiguration direkt von der jeweiligen Suchmaschine holen.

Meta-Tags: die Anweisungen findet der Crawler direkt in der (X)HTML-Datei

Beispiel für die Konfiguration im (X)HTML-Quelltext innerhalb des <head>-Tags

<!-- keine Indizierung dieser Seite erwünscht und auch Links sollte nicht gefolgt werden -->
<meta name="robots" content="noindex,nofollow" />

NOFOLLOW in Hyperlinks: die Anweisung findet der Crawler direkt innerhalb des <a>-Tags im Attribut rel

Diese Anweisung ist z.B. sinnvoll um den Link zum Impressum oder internen Seiten mit optionalem Passwortschutz nicht indizieren zu lassen

<!-- gewöhnlicher Link, wie er auf jeder Homepage zu finden ist, Suchmaschine würde hier folgen -->
<a href="http://www.nerdynerds.de/">Tolle Informationen findet ihr hier</a>

<!-- Link, dem nicht gefolgt werden soll -->
<a href="http://www.nerdynerds.de/" rel="nofollow">Tolle Informationen findet ihr hier</a>

ACHTUNG: Alle bis hier angegebenen Methoden helfen nur für die sog. freundlichen Suchmaschinen, die sich an die Standards halten und diese auch befolgen. Die Nutzung dieser Methoden kann angesichts der einfachen Handhabung aber nur wärmstens empfohlen werden! Suchmaschinen, die eine Seite bereits indiziert haben bieten meistens auch eine Funktion an um diese manuell wieder zu entfernen. Das geschieht beispielsweise bei Google über die Webmaster-Tools, die mit einem kostenlosen Account genutzt werden können. Normalerweise kann man aber auch einfach eine gewisse Zeit abwarten, bis der Bot die Seite erneut crawlt und feststellt, dass es nicht länger erwünscht wird.

Die Maßnahmen sollten für sämtliche Kommentarfunktionen, Gästebücher, Shoutboxen und das Impressum genutzt werden. Wie oben bereits erwähnt bedienen sich kleinere Spammer gerne bei den Großen und Suchen einfach mal wahllos nach Begriffen wie gb, guestbook, comment, post.php, shoutbox etc. Diese Dateien sollten auf gar keinen Fall indiziert werden und die Ordner und Dateinamen sollte man so weit als möglich umbenennen.

Aussperren von internen Seiten mit Login oder .htaccess

Der Schutz von internen Seiten sollte - je nachdem wie wichtig die dort anzutreffende Information ist - passwortgeschützt sein. Für den einfachen Einsatz empfiehlt es sich das von Apache von Haus aus mitgelieferte .htaccess zu verwenden. Damit ist es sehr schnell möglich verschiedene Benutzerzugänge einzurichten und die große Masse abzuhalten.
Wer allerdings einen komfortablen Bereich mit Sessions verwaltet, der kommt wohl oder übel nicht um ein Loginscript herum. Hierfür gibt es allerdings schon gute fertige Klassen und auch Scripte, die das gut bewerkstelligen. Erfahrenere Benutzer können sich diesen auch selbst schreiben.

Bestimmte Hosts/IPs aussperren

Mit .htaccess gibt es weiterhin die Möglichkeit bestimmte IP-Adressen, Hostnames usw. auszuschließen.

Beispielkonfiguration für den Ausschluss von Zugriffen über IP-Adressen per .htaccess

# Sperrt den Zugriff von *.nerdynerds.de und alle Adressen 123.156.*.*, erlaubt aber 123.156.189.101
Order deny,allow
Deny from .nerdynerds.de
Deny from 123.156
Allow from 123.156.189.101

E-Mails niemals im Klartext veröffentlichen

E-Mails sollte man niemals auf einer öffentlich zugänglichen Seite im Klartext präsentieren. Einmal gecrawlt kann schon zu spät sein. Es empfiehlt sich hier die Adresse zumindest als Bilddatei einzufügen. Das ist die wahrscheinlich einfachste Möglichkeit, aber leider können gute Bots auch Schriften erkennen, viele werden aber trotzdem abgewehrt. Wer es aufwändiger möchte kann auch zu einem Obfuscator greifen. Der funktioniert meist mit JavaScript und verschleiert die E-Mail möglichst so, dass man nicht erkennen kann, dass es sich dabei um eine E-Mail Adresse handelt. Der Vorteil hierbei ist, dass der gewohnte E-Mail Link erhalten bleibt und weiterhin wie gewohnt funktioniert. Nachteilig wäre nur der Einsatz von JavaScript, aber ich konnte bei bereits vielen Seiten feststellen, dass fast alle Besucher JavaScript standardmäßig eingeschaltet haben. Noch bessere Bots können wahrscheinlich auch JavaScript-Code ausführen, deshalb empfiehlt es sich vielleicht ein Kontaktformular zu verwenden, das die E-Mail Adresse gar nicht erst sichtbar macht. Bei größeren Seiten empfiehlt es sich sowieso mit Captcha zu arbeiten oder einen geschickten Ablauf zu wählen, der beispielsweise eine gewisse Zeit von der Anfrage des Formulars bis zum Absenden dieses Formulars überprüft und bei Unterschreitung von etwa 3 Sekunden keine Nachricht abschickt.

Personennamen und deren Adressen in Personensuchmaschinen

Leider gibt es auch Suchmaschinen, die nur auf der Suche nach Namen sind und diese dann auf ihren Seiten listen möchten. Solche Seiten sammeln Namen und Adressen, sowie Links zu Seiten auf denen diese Person zu finden ist. Es empfiehlt sich hier seinen Namen möglichst nicht im Klartext auf eine öffentlich zugängliche Seite zu veröffentlichen. Ein Bild kann hier aushelfen. Idealerweise kann man auch hier einen Link einbauen der zusammen mit JavaScript und einem ausgeklügelten Zeitintervall arbeitet um den bestmöglichen Schutz zu garantieren.

Zusammenfassung

Zusammenfassend muss gesagt werden, dass immernoch der Webmaster derjenige ist, der die größte Verwantwortung für seine Seite trägt. Das reicht vom kleinen Verein im Dorf bis zu größeren Communities oder Firmenseiten. Gerade hier sollten sich alle Webmaster auf ihren Seiten darum kümmern, dass persönliche Daten von Personen - sofern nicht ausdrücklich eine Absprache mit der betreffenden Person stattgefunden hat - geschützt bleiben.

Weiterführende Links

15Jun/100

Canon EF-S 55-250mm Testbilder

geschrieben von silent

Einige Testbilder mit der Canon EOS 1000D und dem Canon EF-S 55-250mm 4,0-5,6 (mit GeLi ET-60)

Die Bilder wurden nachträglich nicht bearbeitet!

12Jun/100

Objektivvergleich Canon EF-S 18-55 / EF-S 55-250

geschrieben von silent

Ich habe heute einen kleinen Test gestartet und das Canon EF-S 18-55mm 1:3,5-5,6 IS mit dem Canon EF-S 55-250mm 1:4-5,6 IS auf der Canon EOS 1000D verglichen.

Hardware:

  • Canon EOS 1000D
  • Velbon CX 560 Stativ
  • Phottix Fernauslöser (kabelgebunden)
  • HOYA Circular Polfilter (58mm)
  • Canon EF-S 18-55mm 1:3,5-5,6 IS mit Canon EW-60C GeLi
  • Canon EF-S 55-250mm 1:4-5,6 IS mit Canon ET-60 GeLi

Einstellungen:

  • IS und AF war bei beiden Objektiven eingeschaltet
  • kein Blitz
  • ISO 800 voreingestellt
  • Av-Modus für Blendenauswahl mit automatischer Wahl der Belichtungszeit

Persönliche Meinung: Das Motiv des Telezooms hat meiner Meinung nach schönere, sattere Farben. Allerdings sollte man bei der Einstellung Av berücksichtigen, dass die Belichtungszeit automatisch ermittelt wird. Da hier beide unterschiedlich sind werde ich den Test unter gleichen Bedingungen wiederholen.

Folgende Bilder ergaben sich beim direkten Vergleich der Objektive bei 55mm:

EF-S 18-55mm - 55mm / F5.6 / 1/250 Sek.

EF-S 55-250mm - 55mm / F4 / 1/640 Sek.

10Jun/100

Canon EOS: Anzahl der Ausloesungen ermitteln!

geschrieben von ChecksumError

Jeder der schon einmal eine gebrauchte digitale Spiegelreflexkamera verkaufen oder aber auch kaufen wollte/will weiß, dass die Anzahl der bisherigen Auslösungen beim Kauf eine zentrale Rolle spielt. Bei den Modellen der professionellen EOS 1x Reihe ist das ganze kein Problem, doch wie schaut es bei den semi-professionellen und Einsteigerkameras aus?

Dafür gibt es natürlich von Haus aus keine Lösung, aber aufgepasst, eine findige Person hat es doch hinbekommen diverse Einstellungen aus der Kamera auszulesen. Wie man dafür vorzugehen hat, erfahrt ihr natürlich hier.

Aber ACHTUNG: Das Programm läuft ausschließlich unter Microsoft Windows! Einen Link zu der MAC-Variante findet ihr jedoch ebenfalls unter dem nachfolgenden Link.

  1. Download der „setupeosinfo.exe“
  2. Installation dieser
  3. Anschließen der Kamera via USB-Kabel an den PC
  4. Starten von „EOS Info“
  5. „Shutter Count“ auslesen
  6. –fertig–

Unterstütze Kameras: 40D, 50D, 450D, 1000D

Ich hoffe sehr allen Leidgetragenen eine Hilfe gewesen zu sein ;-)