Archiv

Posts Tagged ‘Beschleuniger’

Von Zeit und Datenmengen

22. Juli 2014 Kommentare aus

Bei Datenmigrationen und der Batchverarbeitung kommen 2 Bereiche zusammen bei denen viele Entwickler (mich eingeschlossen) schnell an eine mentale Grenze stossen:

  • Zeit
  • Datenmenge

Wohl ist jedem bekannt das ein Tag 24 Stunden hat und ein Terabyte aus 1024 Gigabyte besteht. Und doch kommt es immer wieder zu bösen Überraschungen.

 

Eine Optimierung am Code ist reine Zeitverschwendung, da die Arbeit in einer Sekunde erledigt ist.

 

Wer hat nicht schon solche Aussagen gehört? Das Problem von dieser einen Sekunde ist nicht die Dauer. Das Problem liegt in der impliziten Aussage über die Geschwindigkeit. Eine Sekunde ist kurz, meine Arbeit gross und daraus folgt mein Code ist schnell. Wenn es so doch nur so einfach wäre…

 

Wie lange kann es auf der Produktion schon gehen wenn es auf dem Testsystem gar nicht messbar ist?

 

Ist die wohl noch schönere Frage. Wer schon einmal versuchte eine grössere Datenmenge zu migrieren kennt die unbequeme Antwort: Lange – viel zu lange.

 

Was genau messen wir?

Wie immer wenn etwas gemessen wird kommt es auf die Relevanz an. Ob 1 Sekunde schnell oder langsam ist hängt davon ab, was darin gemacht wurde. Wie viele Datensätze wurden verarbeitet? Und in welchem Verhältnis steht diese Datenmenge zum Zielsystem?

Die einzelnen Sekunden summieren sich sehr schnell, alles was es dazu braucht ist eine unterschiedliche Menge an Daten auf dem Test- und auf dem Produktionssystem. Bei einem linearen Anstieg wächst die Verarbeitungsdauer gleichmässig mit der Datenmenge. Verdoppelt sich die Datenmenge, verdoppelt sich auch die Verarbeitungsdauer. Hat man 60x mehr Daten in der Produktion als auf dem Testsystem wird aus dieser einen Sekunde bei der Einführung eine Minute.

 

Eine Hochrechnungstabelle

Was passiert aber wenn man statt auf dem Testsystem auf dem Entwicklungssystem gemessen hat? Da ist das Verhältnis vielleicht nicht 1:60, sondern 1:1’000, 1:10’000 oder gar 1:100’000. Wie lange waren nochmal 100’000 Sekunden?

Diese kleine Hochrechnungstabelle nimmt das Rechenbeispiel auf und geht von einer Sekunde für eine bestimmte Menge von Daten aus. 10x mehr Daten ergeben den Faktor 10, der für diesen linearen Anstieg auch in einer 10x längeren Dauer resultiert:

Faktor Datenmenge Dauer
1 00:00:01
10 00:00:10
100 00:01:40
1’000 00:16:40
10’000 02:46:40
100’000 27:46:40 oder 1 Tag 03:46:40
1’000’000 277:46:40 oder 11 Tage 13:46:40

Die 100’000x mehr Daten machen aus der getesteten Sekunde bei der Einführung eine Aufgabe die sich in einem Tag nicht mehr abschliessen lässt. Aber schon bei 10’000x mehr Daten dürfte so mancher Einführungsplan in den kritischen Bereich kommen.

 

Probleme vermeiden

Diese Probleme lassen sich am einfachsten dadurch vermeiden, dass man die Performance-Messungen auf vergleichbaren Systemen mit vergleichbaren Datenmengen macht.

Ist es nicht möglich muss man die Werte entsprechend umrechnen. Dies ist viel aufwändiger und weniger genau, aber immer noch besser als sich einzureden die Arbeit sei in einer Sekunde erledigt. Dabei gilt es aber nicht nur die Datenmenge zu bedenken. SSD-Festplatten sind gerade in Kombination mit kleinen Datenmengen deutlich schneller als so manche Server-Festplatte. Von CPU, Netzwerk und Systemdiensten die auch noch laufen ganz zu schweigen.

 

Fazit

Wenn man eine Performance-Messung nur auf die Dauer reduziert führt dies zu völlig falschen Annahmen. Um lange Wartezeiten bei der produktiven Einführung zu verhindern muss daher unbedingt beachtet werden wie sich die Daten und Systeme gegenüber der Produktion unterschieden. Mehr Daten bedeutet eine längere Verarbeitungszeit. Und nur weil es auf irgendeinem System schnell ist bedeutet dies nicht automatisch das man aufs optimieren verzichten kann. Ganz abgesehen davon dass eine exponentielle Zunahme der Verarbeitungszeit alles noch viel schlimmer macht…

 

Schlagworte: ,

SyncToy: Ein kleiner Backup-Helfer

15. Juli 2014 2 Kommentare

An Backups denkt man in der Regel erst wenn es zu spät ist. Vorher ist es immer zu aufwändig und man glaubt eh keine wichtigen Dateien zu haben die nicht noch irgendwo anders gespeichert sind. Um nicht eines besseren belehrt zu werden würde es genügen die Daten nur regelmässig auf ein externes Laufwerk zu sichern.
Mit SyncToy gibt es ein kleines Programm das genau für diesen Zweck gemacht wurde.

 

Download und Installation

SyncToy kann bei Microsoft als 32 oder 64bit Version heruntergeladen werden. Welche Version man wählt spielt keine Rolle. Bisher konnte ich keine Unterschiede feststellen die über das Installationsverzeichnis hinausgehen (Programme oder Programme (x86)).

Der Installationsdialog ist erstaunlich umfangreich und will sehr viele Bestätigungen. Wiederholtes klicken auf “Next” genügt zur Installation allerdings vollkommen.

 

Konfigurieren

Nach dem ersten Start begrüsst einem dieser einfache Dialog mit der Aufforderung ein Verzeichnispaar zu erstellen:

SyncToy

Der Dialog zum Erzeugen des Verzeichnispaares unterscheidet zwischen linkem (Left) und rechtem (Right) Ordner. Um meinen persönlichen Ordner zu sichern wähle ich diesen als linken Ordner aus und als rechten Ordner das Verzeichnis “Z:\Air\User.JGR”:

SyncToy 1. Schritt

Rechter und linker Ordner sind wenig gebräuchliche Begriffe. “Quelle” und “Ziel” dürfte einem bekannter sein. Allerdings kommt es sehr darauf an was man mit diesen beiden Ordnern machen will. Dies legt man auf dem 2. Schritt fest:

SyncToy 2. Schritt

Zur Auswahl stehen einem diese Optionen:

  • Synchronize: Neue, veränderte und gelöschte Dateien werden in beide Richtungen synchronisiert.
  • Echo: Veränderungen (hinzufügen, löschen, verändern) im linken Ordner werden auf den rechten appliziert.
  • Contribute: Nur neue und veränderte Dateien aus dem linken Ordner werden in den rechten Ordner übertragen. Im linken Ordner gelöschte Dateien bleiben im rechten Ordner erhalten.

Welche Option man auswählen soll hängt ganz vom Einsatzweck ab. Echo und Synchronize unterscheiden sich dadurch ob auch mit dem rechten Ordner gearbeitet wird. Ist dies der Fall sollte man Synchronize verwenden. Will man die Ordner nur 1:1 sichern genügt Echo.
Contribute kann einem dabei helfen auch gelöschte Dateien zurück zu holen. Da keine Dateien gelöscht werden muss man sich selber ums aufräumen kümmern.

 
Zum Abschluss benötige dieses Ordnerpaar noch einen Namen, unter dem man später die beiden Verzeichnisse identifizieren kann:

SyncToy 3. Schritt

 

Ordner synchronisieren

SyncToy lässt einem die Ordnerpaare einzeln oder gemeinsam ausführen. Letzteres ist vor eine Arbeitserleichterung da man sich nicht an alle gemachten Änderungen erinnern muss. Je nach Anzahl Änderungen, der Datenmenge oder der Geschwindigkeit des angehängten Laufwerkes muss man sich nach einem Klick auf “Run all” ein wenig gedulden:

SyncToy Resultat

 

Fazit

Mit SyncToy gibt es ein kleines Tool mit dem man einfach seine Daten sichern kann. Nach einer einmaligen Konfiguration genügt dafür ein einziger Klick. Dennoch ist es flexibel genug um auch spezielleren Wünschen bei der Synchronisierung Rechnung zu tragen.

Empfehlung: Unbedingt ausprobieren!

Schlagworte: ,

Heruntergeladene Assemblies entsperren

7. Mai 2014 Kommentare aus

Ein Sicherheitsfeature von Windows ist für Entwickler besonders mühsam: Die Blockierung von aus dem Internet geladenen .Net-Assemblies. Versucht man so eine *.dll in einem Visual Studio Projekt zu verwenden trifft man auf diese Fehlermeldung:

Error 172 Could not load the assembly file://**/*.dll. This assembly may have been downloaded from the Web. If an assembly has been downloaded from the Web, it is flagged by Windows as being a Web file, even if it resides on the local computer. This may prevent it from being used in your project. You can change this designation by changing the file properties. Only unblock assemblies that you trust. See http://go.microsoft.com/fwlink/?LinkId=179545 for more information.

 

Da sich der Entwickler ein wenig Zeit für eine sinnvolle Fehlermeldung genommen hat findet man im MSDN eine entsprechende Lösung. Für einzelne Dateien genügt es diese im Explorer zu öffnen und mittels Rechtsklick den Eigenschaften-Dialog zu öffnen. Dort wird einem der Zulassen-Knopf prominent angezeigt:

Datei von fremden Computern zulassen

Diese Lösung dürfte den meisten bekannt sein. So lange man nur wenige Dateien entsperren muss kommt man damit auch gut zurecht. Hat man allerdings ein Projekt mit unzähligen Assemblies, die noch für alle möglichen Windows-Plattformen in Unterprojekte gegliedert sind, braucht es etwas Besseres.

 

Streams

Um Dateien massenhaft und rekursiv über verschachtelte Ordner zu entsperren empfiehlt Microsoft das Tool “Streams” von Sysinternals. Auch wenn dies mittlerweile in die Jahre gekommen ist macht es seinen Job noch immer zuverlässig.

Nach dem herunterladen und installieren steht einem Streams als Konsolenanwendung zur Verfügung. Startet man das Tool ohne Parameter zeigt es einem die möglichen Optionen an:

C:\>D:\Pfad\zu\Streams\streams.exe
Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com

usage: D:\Pfad\zu\Streams\streams.exe [-s] [-d] <file or directory>
-s     Recurse subdirectories
-d     Delete streams

Um den Ordner _DEV rekursiv zu entsperren genügt dieser Aufruf:

C:\>D:\Pfad\zu\Streams\streams.exe –s –d _DEV

 

Fazit

Ein an sich guter Schutz für Gelegenheitsanwender ist für Entwickler in der täglichen Arbeit ein Hindernis. Je nach Projekt wird man sehr häufig Dateien aus dem Internet herunterladen und jedes Assembly von Hand entsperren ist auf die Dauer nicht nur mühsam, sondern braucht auch viel Zeit. Mit einem Werkzeug wie Streams lässt sich dieses Problem aber glücklicherweise sehr einfach lösen.

Schlagworte: , ,

Kurz-Tipp: Bessere Screenshots mit Greenshot

18. März 2014 Kommentare aus

Um etwas zu erklären hilft ein Bild oft mehr als viele Worte. Bei der Bildschirmarbeit sind Screenshots daher kaum mehr wegzudenken. Wie aber macht man möglichst einfach solche Bilder? Meine Antwort darauf ist seit einiger Zeit Greenshot.

Mit diesem kostenlosen Programm kann man den ganzen Bildschirm, ein einzelnes Fenster oder nur einen Teilbereich abfotografieren. Wirklich praktisch sind aber die Zeichenfunktionen zum Hervorheben von Bereichen. So muss man nicht lange nach den entscheidenden Ausschnitt suchen. Und hat man für einmal einen Bereich den man nicht zeigen will kann man diesen unkenntlich machen:

Greenshot im Einsatz

Da alles Wesentliche in der kleinen Oberfläche untergebracht ist braucht man für die Alltagsarbeiten nicht extra ein Grafikprogramm zu starten. Wem dies alles zu viel ist und die Bildschirmfotos nur in die Zwischenablage haben will kann dies ebenfalls einrichten.

 

Fazit

All diese oft benötigten Zusatzfunktionen machen Greenshot äusserst nützlich. Hat man sich einmal an die einfach zu bedienende Oberfläche gewöhnt will man nicht mehr zu den Windows-Bordmitteln zurück. Dafür ist dieses kleine Tool viel zu praktisch.

Schlagworte: ,

Kurz-Tipp: Windows 8.1 Startseite besser integrieren

27. Dezember 2013 Kommentare aus

Trotz längerer Arbeit mit Windows 8.1 habe ich mich immer noch nicht an die neue Startseite gewöhnt. Wann immer ich die ehemalige “Metro”-Oberfläche starten muss fühlt sich dies wie ein Fremdkörper an. Es gibt allerdings einen ganz einfachen Trick mit dem man diese Startseite viel besser in den Desktop integrieren kann – ganz ohne irgendwelche zusätzliche Software.

 

Das Problem

Wann immer ich an meinem Computer arbeite sieht dies so aus:
Mein Desktop

 
Sobald ich aber ein Programm starten will lande ich in diesem Fremdkörper:
Original Startseite

 

Die Lösung

Gut versteckt in den Einstellungen der Taskliste gibt es eine Option um die Startseite besser zu integrieren. Dazu genügt ein Rechtsklick auf die Taskliste um das Menü für Einstellungen aufzurufen:
Eigenschaften in der Taskleiste

Im Reiter Navigation kann man nun den Hacken vor der Option „Desktophintergrund auf der Startseite anzeigen“ auswählen:
Option auswählen
Hinweis: Wer direkt nach dem Start den Desktop sehen möchte kann zudem die obere Option ebenfalls anwählen.

Beendet man diesen Dialog über „OK“ erscheint die Startseite in Zukunft mit dem gleichen Hintergrund wie der Desktop. Diese kleine Änderung erweckt nun den Eindruck als ob sich die transparente Startseite über den eigenen Desktop legt:
Meine neue Startseite

 

Fazit

Eine kleine Einstellung an der richtigen Stelle und die Startseite von Windows 8.1 erscheint nicht mehr als Fremdkörper. Hat man dies nicht selber probiert kann man kaum glauben wie gross der Unterschied in Sachen Benutzerfreundlichkeit ist. Schade nur dass diese Option nicht vorselektiert wurde.

Schlagworte: , ,

Buch-Rezension zu “Build Awesome Command-Line Applications in Ruby”

12. Dezember 2012 Kommentare aus

Build Awesome Command-Line Applications in Ruby: Control Your Computer, Simplify Your Life” von David Copeland erschien im März 2012 bei The Pragmatic Programmers. Anwendungen für die Kommandozeile zu schreiben scheint in Zeiten von HTML 5 und Cloud Computing ein sinnloser Zeitvertreib zu sein. Dem ist aber nicht so.

Will man seine täglichen Arbeiten automatisieren und Abläufe vereinfachen sind Kommandozeilenprogramme mit einer ganz spezifischen Aufgabe von grossem Wert. Das einfache Interface und der Verzicht auf ein GUI ist da kein Nachteil, sondern ein Motivator um noch mehr zu automatisieren.

 

2 Tätigkeiten als Ausgangspunkt

Copeland steigt mit 2 alltäglichen Aufgaben ins Thema Kommandozeilenprogramme ein:

  1. Ein Backup-Tool für MySQL
  2. Eine ToDo-Verwaltung

Beide Aufgaben sind schon in unzähligen Büchern erklärt worden und so kann man sich eine grosse technische Einführung ersparen. Die Seiten werden stattdessen für ein genaues ausleuchten der unterschiedlichen Aspekte verwendet. Beim Backup-Tool liegt der Schwerpunkt in der Konfigurierbarkeit während es bei der ToDo Anwendung mehr um die Benutzerführung geht.

Im Verlauf des Buches werden die beiden Anwendungen ständig ausgebaut. Man erfährt dabei die Motivation hinter vielen Kommandozeilenprogrammen der UNIX-Plattformen, wieso diese so gut zusammenarbeiten und welche Erweiterungsmöglichkeiten sich für eigene Werkzeuge bieten.

 

Gute Werkzeuge erstellen

Was macht ein gutes Werkzeug aus? Und worauf soll man achten? Obwohl jeder Entwickler hier wohl unterschiedliche Schwerpunkte setzt ist die Auflistung von David Copeland mehr als nur ein guter Start. Seine Anforderungen an ein gutes Werkzeug sind:

  • löst ein klar definiertes Problem
  • ist einfach zu verwenden
  • unterstützen den Benutzer
  • arbeitet mit anderen Anwendungen zusammen
  • stehen Gelegenheitsnutzern nicht im Weg
  • ist einfach zu konfigurieren
  • lässt sich leicht verteilen
  • kann ohne grossen Aufwand erweitert werden

Zu all diesen Punkten wird gezeigt wie man diese meist mit geringem Mehraufwand erfüllen kann. Seine Tipps helfen einem dabei nicht jedes Mal von vorne beginnen zu müssen. Und oft sind es nur ganz kleine Dinge wie ein passender Kommentar in der Hilfe der einem später unzählige Stunden an Arbeit ersparen kann.

 

Selber bauen mit Methadone

Hat man erst einmal die Möglichkeiten kennen gelernt möchte man wohl selber anfangen so hilfreiche Anwendungen für die Kommandozeile zu schreiben. Damit man sich auf die interessanten Teile konzentrieren kann schrieb Copeland das Gem Methadone. Dies lässt sich wie alle anderen Gems einfach installieren und kann sogleich für eine neue Anwendung verwendet werden:

gem install methadone
methadone newgem

Mit dem zweiten Befehlt wird das Grundgerüst für die eigene Anwendungen erstellen. Neben allen Abhängigkeiten für die testgetriebene Entwicklung wird auch gleich die gewählte Lizenz hinterlegt und alles zum paketieren vorbereitet. Die detaillierte Anleitung mit allen Optionen findet sich auf der Projektseite von Methadone.

 

Fazit

David Copeland liefert mit seinem Buch praxisbezogene Tipps um alltägliche Aufgaben mit Ruby zu automatisieren. Abgesehen von ein wenig Ruby wird kaum Wissen vorausgesetzt und alles kompakt aber verständlich erklärt.

Beim realisieren eigener Kommandozeilenanwendungen ist das Buch ein gutes Nachschlagewerk und hat mir schon oft geholfen. Ich kann dieses Buch daher ohne Vorbehalte weiterempfehlen.

 

Zum Buch

Build Awesome Command-Line Applications in Ruby: Control Your Computer, Simplify Your Life” von David Copeland, 2012 The Pragmatic Programmers, ISBN 978-1-9343-5691-3, 224 Seiten, Englisch

Schlagworte: , ,

MiniProfiler für Ruby

7. November 2012 Kommentare aus

MiniProfiler ist ein äusserst hilfreicher Profiler für Webanwendungen, den ich hier schon vorgestellt habe. Hat man sich erst einmal an den immer verfügbaren Profiler gewöhnt will man nicht mehr ohne dieses Werkzeug entwickeln. Und man will es auch für alle anderen Plattformen nutzen.
Wie sich zeigt geht dies nicht nur mir so. MiniProfiler wurde auf Ruby portiert und bietet einem dort den gleichen Funktionsumfang.

 

Installation und Konfiguration

Die Installation und Konfiguration ist unter Ruby deutlich einfacher als in .Net. Es genügt das Gemfile seiner Rails-Anwendung um einen Eintrag zu Miniprofiler zu ergänzen:

gem 'rack-mini-profiler'

Nach einem bundle install kann man die Anwendung starten und MiniProfiler sofort nutzen:

Will man wissen wie viel Zeit man für eine Methode benötigt übergibt man diese in einem Block an MiniProfiler:

  def index
    Rack::MiniProfiler.step("fetch items") do
      @items = Item.all
    end 
    ....
  end

Die Auswertung unterscheidet sich nicht gross von der aus .Net bekannten Darstellung:

 

MiniProfiler in der Produktion

Standardmässig wird die Rack-Middleware nur in der Entwicklungsumgebung aktiviert. Da Rails in diesem Modus keine Optimierungen macht variieren die Werte recht stark. Dieses Problem lässt sich lösen in dem man MiniProfiler auch in der Produktion aktiviert.

Dazu erweitert man am besten die Datei application_controller.rb um einen Before-Filter:

before_filter :miniprofiler

private
def miniprofiler
  Rack::MiniProfiler.authorize_request 
  # Optional mit Einschränkung der Sichtbarkeit: 
  # if user.developer?
end

 

Fazit

Mit dem portierten MiniProfiler kann man die unter .Net schätzen gelernten Möglichkeiten auch für Rails-Anwendungen nutzen. Die Konfiguration ist durch die Implementierung als Rack-Middleware sogar noch einfacher als im Original. Somit gibt es keinen Grund auf MiniProfiler zu verzichten nur weil man Rails nutzt.

Schlagworte: ,
Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.

Schließe dich 297 Followern an