Posts Tagged ‘Web-Entwicklung’

Sonntag, 27. Februar 2011

McKinsey BTO hat Web-Applikationen einfach nicht begriffen

Per Zufall bin ich gestern auf McKinsey Horizon 2011 aufmerksam geworden und habe mich vorhin über die Web-Oberfläche des Beratungsunternehmens für die Teilnahme an diesem Anlass beworben. Spätestens mit diesem Blog-Artikel habe ich wohl alle Chancen verspielt, um aufgeboten zu werden …

In Barcelona soll im Mai 2011 ausgewählten Summa Cum Laude-Absolventen (bin ich notabene auch nicht) der Unternehmensbereich Business Technology Office (BTO) vorgestellt werden. Das BTO bietet laut Eigenwerbung folgende Dienstleistung an:

Ziel unserer Beratung ist es, durch effektiven Einsatz von Technologie unternehmerische Probleme zu lösen und somit den substanziellen Wert eines Unternehmens nachhaltig zu steigern. Insbesondere helfen wir unseren Klienten, Investitionen in Technologie erfolgreich zu managen und mit den strategischen Prioritäten des Geschäfts in Einklang zu bringen.

Quelle: Business Technology Office

Schade nur, dass die Web-Applikation für die elektronische Eingabe der Bewerbung aus dem Mittelalter des Webs zu stammen zu scheint. Nicht gerade rühmlich, wenn dieselbe Firma gleichzeitig Tipps geben möchte, wie man Unternehmens-IT besser einsetzt.

Was bemängle ich konkret? Es sind dies drei Punkte:

Browser-Inkompatibilität

McKinsey Browser Issue
image-4456

Ruft man die Web-Site mit Safari 5 unter Mac OS X 10.5 auf, erscheint folgender JavaScript-Alert:

Only people with IE 4.0 and higher, and Firefox browsers for Windows can use this application. Please download and install either IE or Firefox for Windows, and then return to apply on-line.

Immerhin funktioniert die Applikation mit Firefox 3.6 unter Mac OS X 10.5 ohne zu Murren.

Dennoch: Liebe McKinsey, im Jahre des Herrn 2011 und 20 Jahre nach der Erschaffung des World Wide Webs tummeln sich doch einige Rendering-Engines mehr auf dem Markt als nur MSIE und Firefox:

  • Microsoft Internet Explorer
  • Gecko (Mozilla Firefox)
  • WebKit (Apple Safari, Google Chrome)
  • Opera

Da die Bewerbungsapplikation eigentlich nur simple Formularfelder und einige Dateiupload-Widgets zur Verfügung stellt, die seit 1993 zum HTML-Standard gehören, sollte jede dieser Rendering-Engines unterstützt werden.

Dass Mac OS X unter den Führungskräften von morgen überproportional verbreitet ist, muss ich in diesem Zusammenhang nicht erwähnen, oder? Und ja, es gibt sogar Leute, die sind mit Linux (bspw. Ubuntu) unterwegs. Oder dem iPhone und dem iPad, auf welchen iOS läuft. Was ist mit all diesen Betriebssystemen?

Spezialwerte für Formularfelder

McKinsey Work History
image-4457

Please enter your work history in chronological order with most recent position listed first. If you are currently employed, the system will require you to submit an End Date. In that instance, please enter 01/01/2050.

Ehrlich? Das ist ein typischer Fall, wo ein Web-Entwickler geschlampt hat und stattdessen nun Tausende von Bewerbern durch das Usability-Nightmare waten müssen.

Session Timeout

McKinsey Session Timeout
image-4458

Bekanntermassen ist das Verfassen von Bewerbungen auch in elektronischer Form ein langwieriger Prozess. Umso bitterer, wenn nach etwa einer Stunde folgende von JavaScript-generierte Warnmeldung erscheint:

For security reasons, your session has timed out and you need to restart your application. We apologize for any inconvenience.

Natürlich gehen dabei alle bereits erfassten Formulardaten verloren.

Fazit

McKinsey, Note ungenügend, bitte setzen. Das Unternehmen sollte sich mal selbst von der eigenen BTO beraten lassen, um mit dem „effektiven Einsatz von Technologie unternehmerische Probleme zu lösen“ …

Dieses Bewerbungsformular ist ein Paradebeispiel, wie benutzerunfreundlich das Web auch heute noch sein kann. Und das völlig unnötigerweise — denn das Wissen ist vorhanden, es müsste nur umgesetzt werden.

Tags: ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Freitag, 25. Februar 2011

Ruby on Rails 3-Kleinigkeiten

Nachfolgend eine Sammlung von Ruby on Rails 3-Kleinigkeiten, die den Umstieg von PHP-Programmierern auf diese Programmiersprache/dieses Framework erleichtern sollen.

Kommentare

Werden mit # eingeleitet.

Helper

Um die Views schlank zu halten, empfiehlt es sich, häufig benutzte (respektive umfangreiche) Funktionen in den jeweiligen Helper auszulagern. Eine gute Einleitung in die Thematik findet sich im Artikel Using helper methods in Ruby on Rails.

return fehlt

Das besondere an Ruby-Methoden: Das Resultat der letzten Zeile einer Methode wird automatisch zurückgegeben, man muss also keine aus anderen Sprachen gewohnte return-Anweisung notieren.

Helper HTML ausgeben lassen

Um mit Ruby on Rails 3 eine Helper-Methode HTML-Code zurückgeben zu lassen, muss das Resultat als „safe“ gekennzeichnet werden (via Ruby on Rails Helper Method – HTML is displayed as plain text). Ansonsten werden „<“ „>“ im Rückgabewert automatisch in HTML-Entities umgewandelt. Konkret:

def machHtml
	html = "<h1>Titel</h1>"
	html.html_safe
end

Heredoc

Wie PHP kennt auch Ruby die Heredoc-Notation (via Heredocs – oder – Code in der 2. Dimension), mit welcher man HTML-Code zeilenübergreifend notieren und Ruby-Variablen einfügen kann:

html = <<HTML
	<tr>
		<td></td>
		<td></td>
		<td></td>
	</tr>
HTML

Das besondere ist hierbei, dass man bei der Angabe eines Bindestrichs „-“ beim Beginn des Heredocs den EOL auch einrücken kann, um den Programmcode lesbarer zu machen:

html = <<-HTML
	<tr>
		<td></td>
		<td></td>
		<td></td>
	</tr>
	HTML

Um in Heredoc Ruby-Variablen auszugeben, werden diese als #{variable} notiert.

Zahlen auf zwei Nachkommastellen gerundet ausgeben

rounded = "%.2f" % val

Seiten-Template

Das Template der Standardseite (HTML Header und Footer) ist unter ~/app/views/layouts/application.html.erb abgelegt.

Stylesheets einbinden

Sobald man ein CSS-Stylesheet in ~/public/stylesheets ablegt, wird dieses automatisch in das Template eingebunden.

Zeitzone

In ~/config/application.rb sollte man die richtige Zeitzone notieren:

...
config.time_zone = 'Bern'
...

Um den erwarteten Wert herauszufinden, bemüht man sich folgenden Befehls:

$ rake time:zones:local

locale

Um die locale auf Deutsch zu ändern, muss zuerst eine vorgefertigte locale-Datei heruntergeladen und in ~/config/locales abgelegt werden. Leider ist de-CH.yml kaputt, de.yml funktioniert hingegen:

$ cd ~/config/locales
$ wget --no-check-certificate "https://github.com/svenfuchs/rails-i18n/raw/master/rails/locale/de.yml"

Anschliessend passt man ~/config/application.rb an:

...
config.i18n.default_locale = :de
...

Deutsche Zeit ausgeben

Hierzu stellt Ruby on Rails 3 eine Locale-Funktion bereit:

l(date, :format => '%a %d.%m.%Y')

Sortierung in der index-Ansicht ändern

Im Controller der Applikation unter ~/app/controllers/stamps_controller.rb kann man nach dem Scaffolding natürlech eigene Anpassungen vornehmen:

def index
    #@stamps = Stamp.all
    @stamps = Stamp.find(:all, :order => 'date_start')

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @stamps }
    end
  end

Mit @stamps = Stamp.find(:all, :order => 'date_start') macht man im Grunde dasselbe wie mit @stamps = Stamp.all, doch sortiert die Resultate datenbankseitig (!) bereits nach einem bestimmten Feld. Die Sortierrichtung kehrt man um, indem man noch DESC an den Befehl anhängt.

Tags: , , , ,
Labels: Web

1 Kommentar | neuen Kommentar verfassen

Donnerstag, 24. Februar 2011

Das erste kleine Ruby on Rails 3-Projekt

Nachdem man Ruby on Rails 3 auf seinem Entwicklungsserver eingerichtet hat, kann man sich sofort hinter die Entwicklung einer ersten Testapplikation machen.

Meine Anleitung richtet sich an Web-Entwickler, die mit einem PHP-Hintergrund Ruby on Rails ausprobieren möchten und mit dem MVC-Paradigma vertraut sind (sprich schon mit dem Zend Framework, Symfony, CakePHP etc. produktiv gearbetiet haben).

Vorbemerkung: Versionschaos

Im Netz gibt es unzählige How-Tos und Tutorials um eine erste Rails-Applikation hinzubiegen — sehr hilfreich war für mich Enabling Rails 3 for your application. Leider beziehen sich die wenigsten Anleitungen auf Ruby on Rails 3. Leider vernachlässigen es die Autoren solcher Werke oftmals zudem, darauf hinzuweisen, auf welche Rails-Version sich die Anleitung denn eigentlich bezieht. Dies hole ich hier explizit vor — meine Version lautet:

$ rails -v
Rails 3.0.4

Notabene: Es gibt anscheinend die Möglichkeit, mit der neuesten Rails-Version auch Projekte anzulegen, welche nach einer der älteren Versionen aufgebaut sind (rails _2.3.5_ APP_NAME via How can I create previous version rails in rails 3?). Wenn aber jemand Rails lernen möchte, sollte er dies mit der aktuellsten Version tun — so meine Überzeugung.

Beispielapplikation: Arbeitsjournal

Um rasch Gemeinsamkeiten und Unterschiede zu PHP aufzuzeigen, habe ich mich hierbei entschlossen, eine bestehende PHP-Webapplikation mit Ruby on Rails nachzubauen: Das Arbeitsjournal. Mit diesem führe ich für einen meiner derzeitigen Jobs Buch, wie lange ich arbeite und welche Aufgaben ich wann erledigt habe. Das Tool zeigt mir die Gesamtarbeitszeit für einen Monat und berechnet auch gleich, ob ich die gemäss Arbeitsvertrag erforderlichen Stunden abgearbeitet habe oder nicht.

Der Projekttitel liegt auf der Hand: arbeitsjournal.

Applikations-Skelett erstellen

Ich habe mich entschieden, meine Projekte unter /var/rails abzulegen. Nachdem ich dieses Verzeichnis erstellt habe, welches alle zukünftigen Ruby-Projekte enthält, wechsle ich da hinein und erstelle mir die Projektstruktur. Dank Rails ist dies Sache eines einzigen Befehls:

# mkdir /var/rails
$ cd /var/rails
$ rails new arbeitsjournal -d mysql

Die Option -d gibt an, dass man die Modelle und Daten in einer MySQL-Datenbank abgelegt haben möchte (Standard ist sqlite3)

Datenbankverbindung herstellen

Als Datenbank habe ich MySQL gewählt. Das Vorgehen ist identisch wie bei PHP-Web-Projekten: Zuerst erstellt man sich eine Datenbank (bei mir ruby_arbeitsjournal), einen MySQL-Benutzer (ruby) mitsamt Passwort und weist ihm Schreibrechte auf die neu erstellte Datenbank zu. Nach einem FLUSH PRIVILEGES; liest die MySQL-Datenbank den neuen Benutzer ein. Ich verwende dazu als Relikt vergangener Tage das GUI phpMyAdmin, obwohl ich auf der MySQL-Kommandozeile mittlerweile viel rascher ans Ziel kommen würde.

Unter Rails gibt man die Datenbankoptionen in der Datei ~/config/database.yml an:

...
development:
  adapter: mysql
  database: ruby_arbeitsjournal
  host: localhost
  username: ruby
  password: ********
...

Modell erstellen

Nun ist es an der Zeit, das Modell zu erstellen. Da es sich um eine Applikation mit ein, zwei Datenbanktabellen handelt, welche wiederum kaum Felder beinhalten, kann man dies bequem auf der Kommandozeile machen. Als Objektbezeichnung für einen Arbeitszeiteintrag habe ich mich an die gute, alte Stempeluhr erinnert und das Objekt deshalb Stamp genannt:

$ rails generate scaffold Stamp date_start:datetime date_end:datetime description:text

Das Objekt heisst Stamp und es weist drei Felder auf: date_start, date_end und description, denen die jeweiligen Titel zugewiesen werden. Nützlich war mir hier eine Liste der für’s Scaffolding verfügbaren Feldtypen.

Dies erstellt den Controller, welcher für das Auflisten (index), Anzeigen (show), Erstellen (new), Speichern (create) Editieren (edit), Aktualisieren (update) und Löschen (destroy) zuständig ist. Natürlich ohne, dass ich als Entwickler eine einzige Zeile Code schreiben muss. Genial!

Datenbanktabelle erstellen

Zuletzt erstellen wir nun die physische Tabelle in MySQL:

$ rake db:migrate --trace

Webserver starten

Ich habe einige Zeit damit verbraten, die Applikation über Apache 2 bereitzustellen. Leider momentan noch fruchtlos, u.a. weil sich die Anleitungen auf Rails 2 beziehen, welches offenbar noch ein dispatch.fcgi mit sich brachte. Dies fehlt im DocumentRoot ~/public einer 3er-Applikation.

Die Verwendung von Apache ist dabei gar nicht zwingend nötig — für Web-Entwickler stellt Rails (natürlich!) einen eigenen rudimentären Web-Server zur Verfügung. Man startet diesen über

$ cd /var/rails/arbeitsjournal
# rails server

Aus dem Intranet kann man nun auf den Testserver zugreifen, indem man Port 3000 anspricht. In meinem Falle war dies mad4you.homeip.net:3000.

Routing einrichten

Wer obigen Link aufruft, erhält die Standard-Willkommensseite für Rails-Projekte zu gesicht, die unter ~/public/index.html abgelegt ist.

Benennt man diese Datei kurzerhand um, kriegt man eine Fehlermeldung zu Gesicht. Rails kann nämlich nicht hellsehen und weiss nicht, was der Benutzer eigentlich für eine Seite angezeigt erhalten möchte. Ein Abstecher in die Routing-Datei ~/config/routes.rb und eine klitzekleine projektbezogene Anpassung hilft weiter:

...
root :to => "stamps#index"
...

Auf Deutsch: Diese Anweisung sagt Rails, dass falls ein Request namens GET / reinkommt, dieser auf die Stamps-Objekte weitergeleitet werden soll und dort die Auflistung aller Datenbankwerte

Views und Helper anpassen

Jetzt folgt die Knochenarbeit — zum ersten Mal muss Ruby programmiert werden. Hier sollte sich jeder Web-Entwickler rasch heimisch fühlen, denn abgesehen von einer anderen Programmiersprache ist das Vorgehen nun jedem mit dem MVC-Paradigma vertrauten Entwickler bekannt: Views anpassen, Helper-Funktionen entwickeln und im Controller Kollisionsabfragen etc. implementieren.

Die Pfade zu den entsprechenden MVC-Elementen lauten in meinem Fall:

  • ~/app/models/stamb.rb
  • ~/app/views/stamps/*.html.erb
  • ~/app/controllers/stamps_controller.rb

Insbesondere in ~/app/views/stamps/index.html.erb kann man genügend rumfuhrwerken. Hier vermischen sich HTML-Code und Ruby-Code, und hier kann der Entwickler genauestens steuern, wie die erfassten Daten ausgegeben respektive ausgewertet werden sollen.

Sehr wichtig ist ~/app/helpers/stamps_helper.rb, um die View nicht mit Ruby-Code zu überladen. Dorthin lagert man sich alle nützlichen kleinen Methoden aus, die mehrmals im Code benutzt werden und es deshalb Sinn macht, Redundanzen zu vermeiden.

Fertig? Fertig!

Ab jetzt verfügt man über eine funktionierende Web-Applikation, um Arbeitsstunden zu erfassen. Rails hat die entsprechenden Controller-Aktionen automatisch bereitgestellt und ich kann sofort mit dem Einfüllen von Daten beginnen.

In einem weiteren Artikel werde ich mich um einige Finessen kümmern, die für PHP-Entwickler anders, ungewohnt, oftmals aber äusserst erleichternd sind.

Tags: , , , , ,
Labels: Web

3 Kommentare | neuen Kommentar verfassen

Mittwoch, 23. Februar 2011

Ruby on Rails 3 unter Debian GNU/Linux installieren

Aus gegebenem Anlass habe ich mich heute Morgen das erste Mal seit langem wieder mit dem Web-Framework Ruby on Rails aus der Küche von David Heinemeier Hansson (einer der Partner hinter 37signals) auseinandergesetzt.

Nachfolgend habe ich zusammengefasst, wie ich das Framework auf meinem heimischen Entwicklungsserver zum Laufen gekriegt habe.

Installation Ruby

(Ich folge der englischen Anleitung Debian Lenny – Ruby on Rails von SliceHost)

Zuerst lädt man Debian-Pakete herunter und installiert diese:

# apt-get install ruby-dev ruby ri rdoc irb libreadline-ruby libruby libopenssl-ruby sqlite3 libsqlite3-ruby libsqlite-dev libsqlite3-dev

Anschliessend lädt man die Quellen von RubyGems herunter und kompiliert diese (man sollte auf das vorkompilierte Debian-Paket verzichten weil es mit Version 1.2.0 unglaublich veraltet ist):

# cd /tmp
# wget "http://rubyforge.org/frs/download.php/74234/rubygems-1.5.2.tgz"
# tar xvzfz rubygems-1.5.2.tgz
# cd rubygems-1.5.2
# ruby setup.rb

Nun noch die obligatorischen Update-Anweisungen, die man sich als Linux-Benutzer von vielen Paketmanagern kennt, und dann ist man bereit:

# gem update

Bei mir erhielt ich bei der Ausführung von gem update folgende Fehlermeldung zu Gesicht:

# gem -v
/usr/bin/gem:10: undefined method `manage_gems' for Gem:Module (NoMethodError)

Der Anleitung unter RubyGems: undefined method ‘manage_gems’ for Gem:Module (NoMethodError) – easy fix folgend wurde ein veraltetes Binary installiert, welches zuerst mit einer aktuellen Version ersetzt werden muss:

# mv /usr/bin/gem /usr/bin/gem-backup
# ln -s /usr/bin/gem1.8 /usr/bin/gem

Anschliessend aktualisiert man das System (nun hoffentlich erfolgreich):

# gem update
# gem update --system

Notabene: Bei mir wurden keine Updates nachgeladen, alles war bereits auf dem neuesten Stand …

Installation sqlite3

Damit Ruby mit der Datenbank sqlite3 sprechen kann, muss ein entsprechender Treiber bereitgestellt werden. Falls bei

# gem install sqlite3

die Fehlermeldung

Fetching: sqlite3-1.3.3.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing sqlite3:
	ERROR: Failed to build gem native extension.

        /usr/bin/ruby1.8 extconf.rb
extconf.rb:3:in `require': no such file to load -- mkmf (LoadError)
	from extconf.rb:3


Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/sqlite3-1.3.3 for inspection.
Results logged to /usr/lib/ruby/gems/1.8/gems/sqlite3-1.3.3/ext/sqlite3/gem_make.out

erscheint, hat man im obigen apt-get für die Grundinstallation vergessen, die Header-Pakete von Ruby zu installieren (via Stackoverflow). Dies holt man mit folgendem Befehl nach:

# apt-get install ruby-dev libsqlite3-dev

Installation MySQL-Treiber

Obwohl man Ruby (on Rails) natürlich auch mit sqlite3 benutzen könnte, ist der LAMP-Web-Entwickler primär mit MySQL vertraut — so kann diese Datenbank mit der ansprechenden GUI phpMyAdmin administriert werden und ist bei grösseren Datenmengen auch klar performanter als sqlite3.

Um den Treiber zu installieren, bemächtigt man sich folgender Debian-Pakete:

# apt-get install libmysql-ruby libmysqlclient-dev

Anschliessend ist

# gem install mysql

Problemlos möglich.

Installation Rails

Mit dem Ruby-Paketmanager gem kann man sich nun endlich Rails aus dem Netz herunterladen und installieren lassen:

# gem install rails

Fertig! Jetzt sollte man eine funktionierende Ruby on Rails-Installation auf dem Server liegen haben und man ist bereit, mit Bordmitteln das erste Projekt anzulegen. Wie dies genau vor sich geht, folgt in einem weiteren Artikel.

Tags: , , , , ,
Labels: Linux, Web

1 Kommentar | neuen Kommentar verfassen

Donnerstag, 23. Dezember 2010

Automatische Überwachung von Servern mit sensitiven Informationen? Fehlanzeige.

After gaining access to gawkers MySQL database we stumble upon a huge
table containing ~1,500,000 users. After a few days of dumping we
decided that 1.3 million was enough.

Quelle: Hacker News | From the readme: After gaining access to gawkers MySQL database we stumble upo…

Ist ja nicht so, als gäbe es solche Hacks erst seit November 2010 … Wieso zum Teufel setzt jemand, der 1.5 Millionen Benutzerdaten in seiner MySQL-Datenbank rumliegen hat, keine Software ein, die Alarm schlägt, wenn tagelang Daten „abgesaugt“ werden? Eine Schande für die gesamte Web-Entwickler-Zunft.

Tags: , , ,
Labels: IT, Web

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 24. November 2010

Wie Projektmanager Agile Entwicklung und Scrum zerstören

The very first Certified Scrum Master course was taught at the Object Mentor offices in Vernon Hills, Illinois. … Frankly, I thought the idea was a bit silly. I didn’t think thousands of people would be lining up to get their certifications. But I had not considered the lure of elitism. It didn’t occur to me that this special training course, coupled to the term Certified Scrum Master, would become a wedge to break the alignment between authority and responsibility.

Who was it who lined up to take the CSM courses? Was it Scrum team members who wanted to help their teams? Was it programmers and testers? Yes, there were certainly some CSMs who came from existing teams. But the vast majority of CSMs have a project management background. In essence they have added CSM to the PMBOK. They have become CSMs so that they have the authority to manage Scrum teams.

This was never the intent. The role of the coach was to act as a gentle reminder of process and discipline. The coach was never supposed to manage the project or the schedule! Indeed, these two roles were supposed to be adversarial!

Quelle: gist: 710960 – What Killed Waterfall Could Kill Agile.- GitHub

Tags: ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 22. September 2010

Höhere Datenbankkunde mit Facebook

„We need some way of applying the changes that we missed after the copy was started,“ he said. OSC does so using database triggers. „When the copy finishing, we replay all of the changes that were logged by the triggers, and then we briefly – for a fraction of a second – block access to the table and then we switch the original table with the copy.“

Quelle: Facebook open sources live MySQL makeover • The Register

Jede populäre Web-Applikation kann an einen Punkt heranwachsen, bei dessen Überschreitung das mit den Datenbanken kein Spass mehr ist, sondern eine grosse, grosse Bürde. Inkrementelle Backups und Schema-Upgrades — halleluja. Aber meist gibt es halt keinen Weg drumherum.

Tags: , , ,
Labels: IT, Web

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 22. September 2010

CMS muss direkten Zugriff auf HTML-Code bieten

A CMS should never, ever output HTML that is beyond the control of the developer. Every single tag and attribute should be possible to change by modifying templates or providing settings in function calls. If you have to use regular expressions and output buffers to get the HTML you want, something is wrong with the CMS.

Quelle: A good CMS gives you total markup freedom | 456 Berea Street

Drupal lässt grüssen …

Mein eigenes kleines CMS, das eMeidi.smt, speichert seit jeher Plain-Text HTML. Oder PHP. In einer Datenbank (die letzten zwei Bemerkungen disqualifizieren mich als ernstzunehmenden CMS-Entwickler). Egal.

Tags: , ,
Labels: IT, Web

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 27. Juli 2010

Vacation-Meldung als Antwort auf automatisch generierte Mails verhindern

Sommerzeit — Ferienzeit — Vacation-Meldungszeit!

Dies hat heute dazu geführt, dass auf der Arbeit auf automatisch generierte Mails (mit Infos über Änderungen im Personalverzeichnis) mit Vacation-Meldungen der angeschriebenen Mitarbeiterinnen geantwortet wurde.

Um dies zu verhindern, sollte es ausreichen, wenn dem automatisch generiert Mail folgende zwei Header-Zeilen mitgegeben werden:

...
Precedence: bulk
Auto-submitted: auto-generated
...

Die meisten aktuellen Mail-Server sollten auf solche Mails nicht mehr mit einer Vacation-Meldung reagieren.

PHP Mailer

In meinem konkreten Fall sah die Anpassung im PHP-Script folgendermassen aus (ich verwende die vorzügliche Klasse PHP Mailer, um Mails zu generieren und zu versenden):

...
$mail->AddCustomHeader('Precedence: bulk');
$mail->AddCustomHeader('Auto-submitted: auto-generated');
...

Und still ward’s auf dem Web-Server …

Tags: , , ,
Labels: Allgemein

Keine Kommentare | neuen Kommentar verfassen

Montag, 21. Juni 2010

Das neue (?) Web-App-Paradigma

On the other hand, if you’re starting a new project today, there is absolutely no good reason why you shouldn’t begin your design with an API

Quelle: Software, APIs and all the king’s men | The Accidental Businessman

Tags: ,
Labels: IT, Web

Keine Kommentare | neuen Kommentar verfassen