You are reading articles by Simplificator, a Swiss-based custom software development agency. Here we write about the problems we solve and how we work together.
VCR ist ein Library um Tests zu schreiben welche HTTP Requests auf externe Services machen.
VCR nimmt die Anfragen an den Service auf und spielt die Antworten bei bedarf wieder ab. Somit können Tests beschleunigt und unabhängig von externen Diensten gemacht werden.
Um zu bestimmen ob eine aufgenommene Antwort wieder abgespielt werden soll, greift VCR auf Request Matchers zurück. Nebst diversen bereits vorhandenen Matchern kann VCR um eigene Matchers erweitert werden.
Ein Matcher ist ein “callable” welches zwei Argumente nimmt (zwei Requests welche verglichen werden müssen) und ein Boolean wert zurückgibt.
do|a, b| true end
Ein einfacher (und nutzloser) Matcher.
Man kann Custom Matcher einsetzen um z.B. bestimmte Parameter zu ignorieren oder Host Name basiertes loadbalancing (api1.foo.com, api2.foo.com…) abzudecken.
Während MS Access sicher nicht zu unseren favorisierten Tools gehört um Daten zu verarbeiten, so kann es trotzdem vorkommen, dass unsere Kunden Applikationen auf Access Basis betreiben.
Access kann diverse Datenquellen nutzen unter anderem Datenbanken welche direkt in der MDB Datei eingebettet sind.
Sollen nun solche Daten von aussen bearbeitet, ergänzt oder gelöscht werden, so kann dies ohne grossen Aufwand via SQL erfolgen. Dazu muss nur eine DSN eingerichtet (die geübten Entwickler können das natürlich auch auf Linux versuchen, z.B. mit libmdbodbc, wir haben das ganze auf einem Windows Server gemacht) und, schon etwas komplizierter, ruby mit odbc zum laufen bekommen werden.
Aus historischen Gründen müssen wir Ruby 1.8.7 verwenden, odbc sollte durch folgende Schritte zum laufen bekommen werden
Kopiere den Inhalt des Zipfiles nach C:ProgramsRuby187libruby1.8i386-mingw32 (und ja: es macht weniger Probleme wenn Ruby in einem Verzeichnis ohne Spaces installiert ist)
gem install dbi
gem install dbd-odbc
Das wars.
Testen:
in irb
require'rubygems' require'dbi'
username =nil# depends on the DSN password =nil# depends on the DSN
DBI.connect('dbi:odbc:DSN_NAME', username, password)do|connection| res = connection.execute("SELECT * FROM SOMETABLE") res.eachdo|row| # … end res.finish end
Natürlich fängt der Spass hier erst an, in unserem Use-Case sind noch CSV Import von verschlüsselten Attachments und zwei weitere Datenbanken dabei. Stundenweise Spass mit falsch encodierten Dateien und SQL Server sind garantiert:-)
Natürlich würde ich persönlich gerne die ganze Access Applikation als Webapplikation neu bauen. Auf aktuellen Technologien aufsetzend und hübsch gestaltet. Aber der Aufwand würde sich aktuell nicht rechtfertigen lassen und dann ist die Wahl via ODBC auf eine Access DB zuzugreifen auch im Sinne des Kunden.
Für einige Kunden verwenden wir das Rails Hosting von heroku. Es bietet sich dann an, auch die staging Umgebung auf heroku zu betreiben damit keine wesentlichen Unterschiede zur produktions Umgebung bestehen.
Ein paar Schritte reichen dazu:
Staging App erstellen
Add-Ons hinzufügen, bei beiden Umgebungen mindestens pgbackups installieren
Datenbank von Produktion nach Staging kopieren: heroku pgbackups:restore <DB_URL> -a name-der-staging-app `heroku pgbackups:url -a name-der-production-app`
Die Brotseiten iOS App ist im App Store verfügbar und natürlich auch auf unserer Seite dokumentiert.
Es freut uns, dass die App auch bereits positives Feedback erhalten hat, z.B. meint User MarcG78:
Kommt echt gut. 20 Min und Blick am Abend sind eh viel zu reisserisch und deprimierend. Im Vergleich ist das inspirierende und hochwertige Unterhaltung für unterwegs.
Sollte man sich unbedingt mal anschauen: Die neue iOS App “BROTSEITEN” Die clevere Alternative zu den Pendlerzeitungen. Ausgewählte Geschichten für dein Smartphone & Tablet. In der perfekten Länge für unterwegs. Zum Lesen und Hören. Programmiert von … Simplificator!
BROTSEITEN gewinnt den “seif Award for Social Entrepreneurship 2013”! Weitere Infos zum Projekt auf http://www.brotseiten.com/
Dieses Problem kennen alle Web-Entwickler: es sieht gut in Chrome aus aber in Firefox stimmen die Schriften nicht. Oder es sieht gut in Safari aus aber im IE ist der Abstand viel zu gross.
Auch wenn sich die Situation in den letzten Jahren deutlich entspannt hat, besonders zwischen FF, Safari, Chrome und neuen Versionen von IE.
Aber ältere Versionen (d.h. alles < 10) tun sich teilweise immer noch schwer mit Stylesheets welche auf anderen Browsern gute Resultate erzielen.
Bei unserer Webseite jedoch…war es ein Fehler beim entwickeln. Die Webseite basiert auf Bootstrap und die Stylesheets werden mittels SASS “pre-processed”. Durch einen unabsichtlichen mehrfach Import von Bootstrap hatten wir zuviele Regeln in einem einzelnen Stylesheet und nichts ging mehr.
Beim Technologiewechsel von unserem CMS wurde auch die URL generierung geändert. Somit sind gewisse URLs nicht mehr gültig.
Um diesem Problem vorzubeugen, SEO und Benutzerfreundlichkeit lassen grüssen, verwenden wir Rack::Rewrite um alte URLs mit einem 301 Status Code zu beantworten und gleich an den richtigen Ort weiterzuleiten.
config.middleware.insert\_before(ActionDispatch::RequestId, Rack::Rewrite) do
# company
r301 '/de/firma', '/de/company'
# offers
r301 '/de/angebote', '/de/offers'
# references
r301 '/de/referenzen', '/de/projects'
r301 '/en/references', '/en/projects'
r301 %r{/de/referenzen/.\*}, '/de/projects'
r301 %r{/en/references/.\*}, '/de/projects'
....
....
end