Demonstrationsfreiheit


guckmada

Die Demonstrationsfreiheit ist ein Teil der Versammlungsfreiheit gemäß Art. 8 GG und der Meinungsfreiheit gemäß Art. 5 GG und in Deutschland im Grundgesetz für alle fest verankert. Jeder darf sich hier friedlich und ohne Waffen einer Kundgebung anschließen und seine Meinung kundtun. So soll es auch bleiben!

Es wäre daher sinnvoll, wenn alle Beteiligten sich ruhig und friedlich verhalten. Die Initiatoren die Teilnehmer nochmals zur gewaltfreien Demonstration ermahnen und auf die möglichen Folgen einer Ausuferung hinweisen.

demonstration

Die gesellschaftlichen Folgen von gewalttätigen Demonstrationen wären für alle Mitbürger spürbar. Würden die sozialen Strukturen nachhaltig verändern und auf lange Sicht auch die politische Haltung der Wähler beeinflussen. Nichts wäre mehr so wie es mal gewesen ist!

Nachbarn, die sich vertrauten und gegenseitig halfen würden sich dann nicht mal mehr grüßen. Arbeitskollegen mit denen man früher gelacht hat, würde man argwöhnisch beäugen. Kinder im Kindergarten dürften sich am Wochenende nicht mehr zu Hause zum…

Ursprünglichen Post anzeigen 122 weitere Wörter

Advertisements

Open Source .NET – 1 year later


Performance is a Feature!

A little over a year ago Microsoft announced that they were open sourcing large parts of the .NET framework. At the time Scott Hanselman did a nice analysis of the source, using Microsoft Power BI. Inspired by this and now that a year has passed, I wanted to try and answer the question:

How much Community involvement has there been since Microsoft open sourced large parts of the .NET framework?

I will be looking at the 3 following projects, as they are all highly significant parts of the .NET ecosystem and are also some of the most active/starred/forked projects within the .NET Foundation:
Roslyn – The .NET Compiler Platform („Roslyn“) provides open-source C# and Visual Basic compilers with rich code analysis APIs.
CoreCLR – the .NET Core runtime, called CoreCLR, and the base library, called mscorlib. It includes the garbage collector, JIT compiler, base .NET data…

Ursprünglichen Post anzeigen 951 weitere Wörter

Happy New Year


Sylvester

Ich wünsche Euch allen ein tolles Jahr 2015.
Ich hoffe, alle Eure Wünsche gehen in Erfüllung und alle Eure Vorhaben werden so erfolgreich, wie Ihr Euch das nur vorstellen mögt.
Ich wünsche Euch viele Begegnungen mit tollen Menschen und unvergessliche Augenblicke.
Ganz einfach gesagt, ich wünsche Euch, dass Ihr glücklich seid.

Ursprünglichen Post anzeigen

Installer mit Qt Installer Framework


Was ist wenn man bestrebt ist Software für verschiedene Plattformen zu entwickeln ? Für die Entwicklung ist  das Qt-Framwork einen gute Wahl. Mit diesem Framework lassen sich Programme für die Plattformen Windows, Linux und selbstverständlich auch für OS X entwickeln. Das ist eine gute Lösung. Was ist aber mit dem Installationsprogramm ?

Aufwändige Lösungen

Wir können es natürlich perfekt machen. Jeder der oben genannten Plattformen stellt einen eigenen nativen Installer zur Verfügung. Für Windows ist es der Microsoft Installer, Nullsoft Installer und Inno Setup. Für Linux ist je nach Dialekt entweder ein Debian oder ein RPM Paket. Diese Lösungen sind selbstverständlich die besten für die jeweiligen System. Das liegt daran weil diese Programme oder Pakete speziell für diese Plattformen entwickelt wurden. Aus diesem Grund sind die auch am besten in die Systeme integriert.

Der Aufwand wird dadurch sowohl beim Lernen, wie auch bei der Paket Entwicklung riesig. Die Unterschiede zwischen diesen Systemen ist doch sehr groß. Obwohl OpenSuSE, Ubuntu und OS X irgendwie zu einer Familie gehören.

Die Qt Lösung

Es gibt aber zum Glück eine einfachere Lösung. Von dem Qt Projekt wird ein Installer Framework angeboten. Diese Framework wird und kann genau wie das Qt Framework für die wichtigsten Systeme verwendet werden. Wir, als Entwickler, können mit diesem Framework leicht Setup-Programme zur Verfügung stellen. Es muss nicht viel über die verschiedenen Systeme gelernt werden. Voraussetzung ist eine bestimmte Verzeichnis-Struktur und zwei Konfigurations-Dateien.

QtIFW_Directory_Layout
Verzeichnis Struktur für Qt Installer Framework

Das oben gezeigte Projekt ist ein Offline Projekt. Bei Offline Projekten sind alle Dateien in dem Installationspaket. Das Framework stellt auch die Möglichkeit für Online Pakete zur Verfügung. Bei Online Paketen müssen nur relativ kleine Setup’s zur Verfügung gestellt werden. Die eigentlichen Programme und Daten werden bei der Installation heruntergeladen. Noch eine Anmerkung zu der Größe des Installationspakets. Die mit dem Qt Installer Framework erzeugten Pakete sind recht groß. Aber Platz ist heute kein Problem mehr. Außerdem macht die Möglichkeit Online Installer zur Verfügung zu stellen das Größenproblem Wett.

Mit der Befehlszeile:
"~/Qt/QtIFW-1.3.0/bin/binarycreator --offline-only -c config/config.xml -p packages Setup"
lässt sich das Paket auf dem Mac erzeugen. Voraussetzung ist das QtIFW Paket in der Version 1.3.0 wurde mit den Standardeinstellungen installiert.

Bei dem Test der Installation wird aber schreckliches passieren. Der Installer stürzt ab. Hier wurde vom Hersteller etwas vergessen. In dem Installer muss eine NIB-Datei sein. Diese wird leider bei der Erzeugung  des Pakets nicht in dieses integriert.

Aber das ist kein Problem mit dieser Befehlszeile ist das leicht nachzuholen:
cp -R ~/Qt/QtIFW-1.3.0/Uninstaller.app/Contents/Resources/qt_menu.nib Setup.app/Contents/Resources

Viel Spaß mit dem Qt Installer Framework.

OS X Installationspakete erzeugen


Hier wird gezeigt wie einfach es ist mit dem Mac Installationspakete zu erzeugen.


Für Anwender ist es immer angenehmer ein Installationspaket zu haben. Das ist immer ein besseres Gefühl als irgendetwas irgendwohin zu kopieren.

Üblicherweise werden die Programme für den Mac als DMG angeboten. In diesen Disk Images sind dann die APPS versteckt. Die Installation des Programms ist dann auch ganz einfach. Mit der linken Maustaste das Programm-Icon packen und über dem Programm Ordner loslassen. Dadurch wird die Anwendung in das Programmverzeichnis kopiert und kann dort ab sofort gestartet werden. In vielen der DMG’s ist zusätzlich zu den Programmen auch eine Verknüpfung zu dem Programm-Verzeichnis vorhanden.

Wenn man selbst Programme schreibt muss man also einfach ein Disk Image erzeugen und kann dieses zum Download zur Verfügung stellen. Das ist recht einfach.

Hier die Anleitung

  1. Ein Diskimage erstellen.
    Das kann am einfachsten mit dem GUI-Tool „Festplattendienstprogramm“ aus dem Ordner „Dienstprogramme“ bewerkstelligt werden.
    Einfach dieses Programm starten und aus der Toolbar „Neues Image“ wählen…
    Alternativ kann das Image auch mit dem Kommandozeilenwerkzeug „hdiutil“ erzeugt werden. Im dem geöffnetem Terminal erzeugt der Befehl „hdiutil create -size 10m /tmp/tmp.dmg -ov -fs HFS+“ ein neues Image mit dem Namen „tmp.dmg“ in dem „/tmp“ Ordner. Die maximale Größe ist in diesem Beispiel 10MB.
  2. Das Image mounten (anklicken)
    Das klingt kompliziert ist aber einfach. Ich hier davon aus das Image ist in dem „/tmp“ Ordner. Im Finder mit „Gehe zu“ in den „/tmp“ Ordner wechseln und mit einem Doppelklick das Diskimage öffnen. Dadurch wird das Laufwerkssymbol auf dem Desktop angezeigt und lässt sich in dem Finder Fenster direkt anwählen.
  3. Mit Xcode ein install generieren lassen.
    XCode hat auch ein Kommandozeilenwerkzeug. Dieses wird jetzt benötigt. Mit „xcodebuild“ erzeugen wir jetzt ein zur Installation vorgesehene Version unseres Projektes. Dafür brauchen wir das Terminal und müssen in das Verzeichnis wechseln in dem unser Projekt zu Hause ist. Mit dem Befehl „xcodebuild clean install“ räumen wir zuerst auf, danach wir ein neues komplettes Build durchgeführt. Das Ergebnis landet aber diesesmal nicht in den tiefen des Library-Verzeichnisses sondern in „/tmp“. Da sind wir bereits im Finder. Durch den Aufruf von xcodebuild wurde hier ein neues Verzeichnis erzeugt. Dieses Verzeichnis trägt den Namen des Projekts mit dem Anhang „.dst“. In diesem Verzeichnis finden wir unsere für den nächsten Schritt benötigten Dateien.
  4. Das Programm in das Image kopieren.
    In dem oben genannten Verzeichnis existiert ein Unterordner. Dieser hat den nicht sehr überraschenden Namen „Applications“. Alles was hier zu finden ist muss in das neue Diskimage kopiert werden. Zusätzlich könnten hierher noch eine Versionshistorie und die Lizenzinformationen landen.
  5. Einen symbolischen Link auf das Programmverzeichnis generieren.
    Da wir die Vorgänge für unsere Anwender so einfach wie möglich gestalten wollen stellen wir noch einen Link zu dem Anwendungen Verzeichnis zur Verfügung. Jetzt kommen wir aber ohne die  Kommandozeile nicht mehr weiter. Zuerst müssen wir in das Diskimage wechseln. Da funktioniert über den Befehl „cd /Volumes/„. Da wir keinen Namen vergeben hatten lautet dieser bei uns „untitled“. Jetzt könnten wir kurz und knackig den symbolischen Link erzeugen. Dafür geben wir in die Befehlszeile: „ln -s /Applications Applications“ ein.
  6. Kopieren ins Projektverzeichnis
    Alles was in dem Verzeichnis „/tmp“ steht lebt nur bis zum nächsten Reboot. Deswegen müssen wir unser neues Werk als letzten Schritt noch in das Projektverzeichnis oder anders Verzeichnis unserer Wahl kopieren.
  7. Abschluß
    Das war alles. Jetzt haben wir ein fertiges professionell aussehenden Paket zur Installation unseres Programms erzeugt. Dieses Paket können wir schön verbreiten.

OS X Software internationalisieren


Die Sprache der Computer und Programmentwicklung ist englisch. Das wirft dann die Frage auf wie bekomme ich mein anständig auf englisch entwickeltes Programm dazu deutsche Texte zu verwenden. Das sollte selbstverständlich mit geringem Aufwand zu bewerkstelligen sein. Das am besten mit den vorhandenen Bordmitteln.

Lösung

In der NS (NS steht für NextStep) Bibliothek wird ein Makro zur Verfügung gestellt. Mit der Hilfe dieses Makro’s können die bereitgestellten Texte durch die der nativen Sprache ersetzt werden. Da das Foundation Framework sehr umfangreich ist wird das Makro in verschiedenen Ausprägungen zur Verfügung gestellt. Die Standard Version ist NSLocalizedString. Mit dieser Version wird anstelle des normalen Textes ein Platzhalter angegeben. Über diesen Platzhalter wird dann der auszugebende Text geholt.

Das Makro „NSLocalizedString(@“Message“, @“Comment“) würde  den Text „Message“ ausgeben. Wenn allerdings eine Internationalisierungsdatei vorhanden wäre, würde der Text „Message“ durch die jeweilige Anpassung ersetzt. Wäre also eine Datei „de.lproj“ an der richtigen Stelle vorhanden könnte die Ausgabe „Nachricht“ lauten.
In der Datei „de.lproj“ muss dafür die Zeile Message=Nachricht stehen. Wogegen in der original englischen Datei „en.lproj“ die Zeile Tag=Message steht.

Xcode

Voraussetzung für die Lokalisierung eines Projekts ist die Erweiterung des Projekts in Xcode-Projekts. Es muss zu der immer vorhandenen englischen Sprachanpassung die neue Sprache hinzugefügt werden. Das wird in der Projektansicht von Xcode erledigt.

Nach dem der Plus-Knopf angeklickt wurde zeigt Xcode die möglichen Dateien die lokalisiert werden können an. Wenn zuviel oder unnötige Dateien angezeigt werden kann durch Deselektierung  in diesem Dialog die jeweilige Datei ausgespart werden.
Die zuvor angebotenen Dateien stehen ab sofort in dem Projekt zu Lokalisierung bereit. In dem linkem Fenster wir dies durch das kleine Dreieck angezeigt. Ein Klick darauf klappt die Dateien auf und zeigt die möglichen Übersetzungen. 
Bei den einfachen Textdateien ist nun die Übersetzung problemlos möglich. 

Sonderfall XIB

Die XIB-Dateien erfordern  eine großen Aufwand. So ist hier keine direkte Übersetzung möglich. Es besteht die Möglichkeit die Benutzeroberfläche komplett in der neuen Sprache zu erstellen. Doch dieser große Aufwand ist in der Regel nur bei kleinen bis sehr kleinen Projekten zu vertreten. In der Regel machen Programmieren genauso ungern Übersetzungen wie Dokumentationen. So ist davon auszugehen das dieser Weg im wirklichen Leben nie beschritten wird.
Von Apple wird ein Kommandozeilen Werkzeug zur Verfügung gestellt. Dieses Programm extrahiert die zu übersetzenden Zeichenkette aus der XIB Datei. Die so gewonnen Zwischendateien können gut Übersetzt werden. Auch hier ist etwas Aufwand nötig.

CMake und OS X


CMake ist ein sehr nützliches Werkzeug. Mit diesem Tool wird die Entwicklung von Programmen sehr erleichtert.
Dieses Werkzeug wird von Kitware als Opensource vertrieben und steht über diese Adresse  http://www.cmake.org/cmake/resources/software.html zum Download bereit. Ursprünglich kommt das Werkzeug aus der Linux-Ecke. Allerdings steht es auch für Windows und für den OS X zur Verfügung. Wobei Mac OS X der interessante Teil für mich ist.

Installation

Nach dem Download steht auf dem Mac ein DMG in dem Download Ordner bereit. Nach dem dieses Disk-Image durch einen Doppelklick geöffnet wurde kann man es einfach installieren. Bei der Installation wird angeboten einen symbolischen Link für die Kommando-Zeile zur Verfügung zu stellen. Das macht absolut Sinn. Außer man ist geneigt für jeden Kommandozeilen Aufruf richtig viel zu tippen. Die Eingabe würde ohne den symbolischen Link auch den kompletten Pfad, einschließlich den Pfad in der App erfordern.

Nutzung

Am leichtesten lässt sich CMake mit der Hilfe des mitgelieferten GUI-Tools nutzen. Damit ist schnell und einfach die notwendige Datei CListMake.txt zu erzeugen. Diese Datei ist notwendig um das Makefile zu generieren. So lassen sich mit ein paar einfachen leicht zu verstehenden Befehlen komplizierte Projekte erstellen. Das geht sogar so weit dass ein Zusatzmodul dabei ist mit dem sich die Paketskript erzeugen lassen. Also kann man aus der CListMake.txt Datei erzeugte Programme gleich in die folgenden Pakete zusammenpacken:
  • TGZ
  • STGZ
  • TBZ2
  • TZ
  • ZIP
  • NSIS
  • DragNDrop (OSX)
  • PackageMaker (OSX)
  • OSXX1 (OSX)
  • Bundle (OSX)
  • CygwinBinary und CygwinSource
  • DEB (Linux)
  • RPM (Linux) 
Ich gebe zu das ist sehr beeindruckend. Allerdings werde ich trotzdem nicht damit arbeiten. Warum ist im nächsten Abschnitt zu lesen.

Fazit

Nach dem die „großen“ Qt und Xcodehttps://developer.apple.com/xcode/ ein durchdachtes Konzept für die IDE’s zur Programm Kompilierung eingesetzt haben macht CMake nicht mehr richtig Sinn. In der Umgebung in der ich arbeite schon einmal gar nicht. CMake macht hier aus einem „freien“ Projekt ein Xcode Projekt. Da kann man sein Projekt doch gleich in der richtigen Umgebung starten. Ich glaube es würde niemand auf die Idee kommen sein Projekt frei aufzusetzen. Zumal die aktuellen Projekte, die mit GUI, sehr aufwändig sind.