Artikel der Kategorie Webentwicklung

Wer auf die Twitter-API zugreift kennt das Problem des ständigen Polling der API, d.h. man muß in der Software mit Hilfe von Cronjobs oder ähnlichem aller paar Sekunden nach neuen Tweets schauen.
Das hat sich letztes Jahr zum Glück mit der Twitter Streaming API geändert. Nun kann man per Stream auf die Tweets zugreifen, eine tolle Sache!
Um den Stream mit Ruby zu nutzen gibt es ein Gem von Intridea genannt TweetStream. Mit diesem Gem ist es sehr einfach möglich Tweets zu lesen, sogar ein Daemon ist enthalten.
require 'rubygems'
require 'tweetstream'
# The third argument is an optional process name.
TweetStream::Daemon.new('user','pass','tracker').track('keyword1','keyword2') do |status|
# Do something like dump the status to ActiveRecord
# or anything else you want.
end
Wo man es herbekommt, wie man es installiert und nutzt erklären Sie in Ihrem Blog:
TweetStream: Ruby Access to the Twitter Streaming API
Happy Streaming!

Für Webentwickler ist es immer wichtig zu wissen, welche Browser am meisten genutzt werden. Bisher war dies immer der Internet Explorer in der Version 6 oder 7. Doch seit einigen Wochen oder sogar Monaten hat sich der Firefox in der Version 3.5 den ersten Platz erkämpft. Mit dem heutigen Datum sieht die Top 5 der meist genutzen Browser laut der 4stats Browser Statistik mit Version so aus:
1. 26.20% Firefox 3.5
2. 17.42% Internet Explorer 8.0
3. 16.96% Internet Explorer 7.0
4. 13.23% Internet Explorer 6.0
5. 11.56% Firefox 3.0
Safari liegt mit 3.44% auf Platz 7, gefolgt von Opera (1.9%) und Google Chrome (1.7%).
Der Wechsel an die Spitze ist sicher auf die Schnelligkeit des Firefox und den wachsenden Bekanntheitsgrad zurückzuführen. Wir dürfen gespannt sein, ob es bei einem erneuten Versions-Update des Firefox so bleibt und ob der Internet Explorer dank Windows 7 vielleicht doch Platz 1 wieder in Beschlag nimmt. In der Browser Statistik der Marktanteile ohne Versionsnummer ist der Internet Explorer mit fast 48% immer noch auf Platz 1. Aber auch hier ist der Firefox mit ca. 40% dicht dran. Das Rennen der Browser geht weiter!

Wenn man PHP-Code bzw. bestehende oder neue PHP-Dateien in WordPress einbinden möchte, macht man das am besten im aktuellen Theme von WordPress. Man legt ein sogenanntes Seiten-Template an, welches man bei der Bearbeitung der Seite in WordPress wählen kann. In diesem Template befindet sich dann das gewünschte PHP-Script.
Weiterlesen >>
Seit gestern ist eine Schwachstelle in Ruby On Rails bekannt, die dem Angreifer über Cross-Site-Scripting (XSS) ermöglicht, HTML-Code in die betroffene Webseite bzw. Applikation zu integrieren. Betroffen sind alle Ruby On Rails Versionen ab 2.0.0. Nicht betroffen sind Applikationen, die unter Ruby Version 1.9 laufen. Aktuelle Patches, sowie Fixes für die Versionen 2.3.4 und 2.2.3 sind bereits veröffentlicht.
Die Schwachstelle befindet sich in den Escaping-Funktionen der Form-Helper. Der Angreifer kann durch manipulierte Unicode-Strings die Escaping-Prüfungen umgehen und so beliebiges HTML injecten.
An alle die Rails im Einsatz haben: Bitte umgehend updaten!
gem update
Brian Mastenbrook, der die Lücke entdeckt hat, hat eine Injection bei Twitter innerhalb 15 Minuten geschafft und sofort Twitter und 37signals (Bekannte Rails-Entwickler-Company rund um das Rails-Mastermind David Heinemeier Hansson) benachrichtigt. Wie Brian schreibt, hat 37signals weder einen Ansprechpartner für Sicherheit, noch angemessen auf seine Hinweise per Mail reagiert, was mich doch etwas enttäuscht. Erst eine Mail an das Security-Team von Ruby On Rails brachte den Stein ins Rollen.
Links:
- Offizielle Security-Meldung von RubyOnRails inkl. Patches und allen Infos
- Blog-Post von Brian Mastenbrook
- Update: Offizieller Blog-Post auf der Ruby On Rails Webseite
Die tolle Ruby-Funktion time_ago_in_words bzw. distance_of_time_in_words und distance_of_time_in_words_to_now aus dem Rails-Framework zeigt die vergangene Zeit seit einem bestimmten Zeitpunkt in Worten an. Wer das Ganze für Rails-Versionen kleiner 2.2 in deutsch haben möchte, kann folgende ins Deutsche übersetzte Funktion einfach in den ApplicationHelper unter app/helpers/application_helper.rb einfügen:
def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)
from_time = from_time.to_time if from_time.respond_to?(:to_time)
to_time = to_time.to_time if to_time.respond_to?(:to_time)
distance_in_minutes = (((to_time - from_time).abs)/60).round
distance_in_seconds = ((to_time - from_time).abs).round
case distance_in_minutes
when 0..1
return (distance_in_minutes == 0) ? 'weniger als einer Minute' : 'einer Minute' unless include_seconds
case distance_in_seconds
when 0..4 then 'weniger als 5 Sekunden'
when 5..9 then 'weniger als 10 Sekunden'
when 10..19 then 'weniger als 20 Sekunden'
when 20..39 then 'einer halben Minute'
when 40..59 then 'weniger als einer Minute'
else '1 Minute'
end
when 2..44 then "#{distance_in_minutes} Minuten"
when 45..89 then 'ca. 1 Stunde'
when 90..1439 then "ca. #{(distance_in_minutes.to_f / 60.0).round} Stunden"
when 1440..2879 then '1 Tag'
when 2880..43199 then "#{(distance_in_minutes / 1440).round} Tagen"
when 43200..86399 then 'ca. 1 Monat'
when 86400..525599 then "#{(distance_in_minutes / 43200).round} Monaten"
when 525600..1051199 then 'ca. 1 Jahr'
else "#{(distance_in_minutes / 525600).round} Jahren"
end
end
Nicht über den Funktions-Namen wundern, time_ago_in_words ist ein Alias für distance_of_time_in_words.
Update:
Viel einfacher wäre es natürlich, die I18n-Funktionen, die ab der Rails-Version 2.2 oder besser 2.3 enthalten sind zu nutzen. Hierfür muß man einfach in der Datei config/environment.rb den String
config.i18n.default_locale = :de
(nach Rails::Initializer.run do |config| und vor end) einfügen und eine Datei unter config/locales/de.yml mit folgendem Inhalt anlegen:
# German translations for Ruby on Rails
# by Clemens Kofler (clemens@railway.at)
de:
datetime:
distance_in_words:
half_a_minute: 'eine halbe Minute'
less_than_x_seconds:
zero: 'weniger als 1 Sekunde'
one: 'weniger als 1 Sekunde'
other: 'weniger als {{count}} Sekunden'
x_seconds:
one: '1 Sekunde'
other: '{{count}} Sekunden'
less_than_x_minutes:
zero: 'weniger als 1 Minute'
one: 'weniger als eine Minute'
other: 'weniger als {{count}} Minuten'
x_minutes:
one: '1 Minute'
other: '{{count}} Minuten'
about_x_hours:
one: 'etwa 1 Stunde'
other: 'etwa {{count}} Stunden'
x_days:
one: '1 Tag'
other: '{{count}} Tage'
about_x_months:
one: 'etwa 1 Monat'
other: 'etwa {{count}} Monate'
x_months:
one: '1 Monat'
other: '{{count}} Monate'
about_x_years:
one: 'etwa 1 Jahr'
other: 'etwa {{count}} Jahre'
over_x_years:
one: 'mehr als 1 Jahr'
other: 'mehr als {{count}} Jahre'
prompts:
second: "Sekunden"
minute: "Minuten"
hour: "Stunden"
day: "Tag"
month: "Monat"
year: "Jahr"
Quelle: Original-Datei mit noch mehr Übersetzungen (auch für Active-Record-Messages und in anderen Sprachen) gibt es hier.
Bild von Darren Hester auf flickr.
Am 9. April 2009 gibt es viele nackte Webseiten zu sehen, wenn es wieder heisst “CSS Nackig Tag” – Webseiten sind auch ohne Design leserlich. Die Idee dahinter ist, den Webstandard, genauer den korrekten Gebrauch von (X)HTML, semantischem Markup, hierarchischer Struktur und den Inhalt zu fördern.
An diesem Tag werden alle teilnehmenden Webseiten Ihre Stylesheets entfernen, die das Design jeder Webseite festlegen. Anmelden kann man sich leider nicht mehr, mitmachen aber trotzdem. Ich bin dabei!
Mehr Informationen, sowie Tools und Verweise auf WordPress-Plugins gibt es hier in deutsch und hier in englisch im Original.

Wenn sich die Domain oder Url einer Website geändert hat, empfiehlt sich eine Weiterleitung auf die neue Adresse mit dem HTTP-Statuscode 301 (Moved Permanently). Der Code 301 deshalb, damit auch Suchmaschinen wie Google wissen, das sich die Adresse für immer geändert hat und nur die neue Url verwendet werden soll. Google berücksichtigt hier auch den Pagerank und ordnet diesen der neuen URL zu.
Die Technik
Technisch gesehen werden vom Webserver im HTTP 2 Zeilen an den Client (Nutzer mit Browser, Suchmaschine) gesendet. Eine mit dem Statscode und eine mit dem Ziel der Weiterleitung:
HTTP/1.1 301 Moved Permanently
Location: http://www.neue-url.de/pfad/zur/datei.htm
Eine HTTP-Sitzung per Telnet auf Port 80 sieht dann zum Beispiel so aus:
# telnet alte-domain.de 80
Trying 12.34.56.78...
Connected to alte-domain.de.
Escape character is '^]'.
GET / HTTP/1.1
Host: alte-domain.de
HTTP/1.1 301 Moved Permanently
Date: Thu, 25 Feb 2009 20:06:55 GMT
Server: Apache/2.2.11
Location: http://neue-domain.de/
Content-Length: 225
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://neue-domain.de/">here</a>.</p>
</body></html>
Connection closed by foreign host.
mod_rewrite – die Lösung
Um dies mit Hilfe des Webservers Apache zu lösen, hilft uns das Modul Rewrite, kurz mod_rewrite. Hat man Zugriff auf die Konfigurationsdatei des Webservers, kann man die Rewrite-Weiterleitung im VirtualHost, in der Directory- oder Location-Direktive vornehmen. Anonsten erstellt man eine .htaccess-Datei und nimmt die Konfiguration hier vor.
Um mod_rewrite zu aktivieren, benötigen wir folgende zwei Zeilen:
RewriteEngine on
RewriteBase /
Weiterlesen >>
Yeah.. darauf haben wir gewartet. Endlich ein Tool, in dem ich eine Webseite in verschiedenen Versionen des IE rendern kann. Version 5.5 bis 8 beta stehen zur Verfügung. Wenn jetzt noch eine Rendering-Engine des Firefox und Safari vorhanden wäre, wär das Tool perfekt. Hier schonmal der Link, Testbericht folgt noch.
Link zum IETester.

Via codecandies.de.
Als Webdesigner hat man oft ein Problem, wenn man die gerade neu erstellte Website in mehreren oder am Besten allen gängigen Browsern testen möchte. Entweder steht das entsprechende Betriebsystem nicht zur Verfügung (Windows, Mac, Linux) oder es lassen sich nicht mehrere Versionen des gleichen Browsers gleichzeitig installieren, wie es bei Internet Explorer der Fall ist. Abhilfe schaffen hier drei Tools:
- IE NetRenderer
Komplett kostenlos. Ermöglicht Tests (als Screenshot) in IE 5.5, 6, 7 und sogar 8 beta
- Browsershots
Über 50 verschiedene Browser-Versionen und 4 Betriebsysteme: Windows, Mac, Linux, BSD
- Litmus
Testet auch E-Mail-Clients. Viele verschiedene Versionen und Betriebsysteme.
Via Kid Tech Gutu.
Ich habe gestern mit einem Kollegen versucht, eine Selectbox mit dem Javascript-Framework Prototype per Ajax zu füllen. Mit jQuery – was wir in letzter Zeit mehr einsetzen – keine grössere Sache. Mit Prototype aber mussten wir etwas grübeln. Da ich in Google nicht wirklich fündig geworden bin, gibt es hier nun ein Beispiel. (Und ich kann gleich das Syntax-Highlighting in WordPress testen :-)
Weiterlesen >>