Visual Studio 2017

Visual Studio 2017

Kurz vorweg: Dieser Blog Post ist Teil einer Serie und setzt auf die früheren Teile auf. Lest bitte alle Teile, damit ihr nichts wichtiges verpasst. Zu finden sind alle Beiträge unter dem Tag VS2017.

Cross-Platform Entwicklung

Jetzt mal nur den PC / Laptop Markt im Blick, es gibt ja nicht nur Windows. Apples MacOS wird immer bekannter, woran Microsoft selbst Schuld ist, aber auch Linux wird immer bekannter, nicht zuletzt durch Kleinsysteme wie dem Raspberry Pi. Auf mobile Entwicklung, also Android und iOS, gehe ich hier nicht ein, ich habe keins dieser Geräte. Windows Phone ist der Erwähnung nicht wert, das Ende des Supports steht schon fest. Habt ihr schön gegen die Wand gefahren, Microsoft! Aber heute soll es nicht um die unzähligen Fehlentscheidungen aus Redmond gehen.

Heute arbeiten wir wieder an unserem Projekt aus dem 2. Teil. Nicht gelesen? Blöd. ^^

Vorab

Dieser Teil wird wiederum ein Mehrteiler. Es wird an manchen Stellen etwas komplex, und auch um die Konsole / Eingabeaufforderung werdet ihr leider nicht drum herum kommen. Alles in allem ist das aber nicht schlimm. Ich gliedere es in diese Punkte auf:

  • 3a) Programmierung
    Darum geht es in diesem Teil.
  • 3b) Kompilierung
    Hier wird es um die Kompilierung und um das "Publish" gehen, also das erstellen der fertigen Kompilate (bei Windows den .exe Dateien).
  • 3c) Veröffentlichung
    Das automatische verpacken in die für das System optimalen Formate.

Und ab geht's.

Programmierung

Prinzipiell sind wir schon recht gut vorbereitet. Erinnert ihr euch noch daran dass ich die Projektmappe "BlogExample" und das Projekt "BlogExample_FW" genannt habe? Gleich wisst ihr warum.

Wenn man von vorn herein auf Cross-Platform zielt, wäre es besser mit einer .Net Core Konsolenanwendung zu starten, statt einer regulären .Net Framework Anwendung. .Net Core ist hier und da ziemlich limitiert, was aber kein Problem ist, wenn man es weiß. So würdet ihr auf jeden Fall beim Programmieren sofort sehen, ok, das geht so nicht. Aber, viele Wege führen nach Rom.

Zu den gravierendsten Nachteilen für .Net Core zählen wohl: Keine interne Unterstützung für GUI (Windows Forms oder was auch immer) und - zumindest für mich - kein SerialPort. Aber dazu später. Viel später. Ich hab's nämlich noch nicht hin bekommen…

Unsere Testanwendung betrifft das jetzt aber nicht, ist ja auch nichts spezielles.

Wirklich programmieren brauchen wir hier eigentlich gar nichts, wir können den selben Code also 2x nutzen, für die Framework und die Core Version. Wer jetzt aber an Copy-Paste denkt… Gehen würde es natürlich. Gut wäre es aber nicht. Daher schrauben wir erst etwas am Projekt rum.

Das Projekt bearbeiten

Als Erstes räumen wir etwas auf. Standardmäßig werden mehrere Dateien erstellt, die nicht benötigt werden. 

Klickt im Projektmappen-Explorer erst auf "Alle Dateien anzeigen" und löscht dann diese 3 ausgewählten Dateien (sofern vorhanden). Nur die AssemblyInfo.vb / .cs wird benötigt, und natürlich unsere App.vb / .cs.

Als nächstes schließen wir das Visual Studio kurzzeitig. Geht im Datei Explorer in den Projektordner und erstellt ein neues Verzeichnis, ich nenne es immer gerne "SharedSource". Verschiebt die App.vb aus \BlogExample_FW\App.vb in \SharedSource\App.vb.

Startet Visual Studio erneut, öffnet das Projekt. Natürlich findet er die Datei jetzt nicht mehr.

Diese löschen wir jetzt. Danach klickt mit rechts auf die Projektmappe - "Hinzufügen" - "Neuer Projektmappenordner…". Benennt ihn wie den Ordner den wir erstellt haben, also "SharedSource". Klickt hierauf auch mit rechts, "Hinzufügen", "Vorhandenes Element…". Dort wählt ihr die App.vb aus. Ist streng genommen zwar nicht nötig, aber stark von Vorteil.

Jetzt brauchen wir die App.vb aber wieder in unserem Projekt. Klickt also mit rechts auf das Projekt - Hinzufügen - Vorhandenes Element. Wählt hier die App.vb aus, aber: Klickt nicht gleich auf Hinzufügen oder die Datei selbst, sondern markiert nur die Datei und klickt auf den Pfeil direkt daneben und wählt "Als Link hinzufügen" aus!

Danach sollte es so aussehen:

Hier sieht man an dem kleinen Icon dass die Datei App.vb nicht mehr wie vorher direkt im Projekt drin ist sondern nur verlinkt ist.

Vorbereitet ist jetzt alles, jetzt geht es weiter.

Ein neues Projekt erstellen

Macht also einen Rechtsklick auf die Projektmappe, Hinzufügen, Neues Projekt. Wir erstellen wieder eine Konsolenanwendung, dieses mal aber als .Net Core.

Diese nennen wir BlogExample_Core (statt _FW).

Die erstellte Program.vb brauchen wir nicht, weg damit. Wir fügen wieder unsere App.vb aus \SharedSource hinzu, natürlich wieder als Link, wie grade eben.

Sieht denn so aus:

Der Sinn hinter dem ganzen ist einfach. Wir haben jetzt 2 Projekte, eins für das reguläre .Net Framework, welches schon auf allen gängigen Windows Systemen vorinstalliert ist, und eine für das .Net Core, was leider noch nicht so verbreitet ist, aber dafür Cross-Platform-fähig ist. Jetzt wisst ihr auch warum das mit _FW und _Core. ;)

In den Projekteigenschaften (von beiden) könnt ihr natürlich noch Einstellungen anpassen, wie den Assemblynamen. Hier kann das Anhängsel natürlich entfernt werden. Copyright Informationen und so weiter, aber das ist ja schon seit zig Jahren Standard.

Für uns jetzt nicht benötigt, aber kann man mal im Hinterkopf behalten: Nicht nur SharedSource erstellen, sondern auch SharedResources, sowohl den Ordner als auch den Projektmappenordner. Der wäre denn für Bilder und sonstige angehängte Dateien (Lokalisierungsdaten, Dokumente wie Lizenzen, …).

Sehr nett hierbei (und das hätte ich nie gedacht), wenn ihr beide Projekte drin habt und am Programmieren seid, bekommt ihr per Intellisense gleich angezeigt wenn ein Projekt diesen Code nicht unterstützt:

And the beat goes on

Aber erst in Teil 3b. Behaltet den Tag VS2017 im Auge.


Visual Studio 2017

Visual Studio 2017

Kurz vorweg: Dieser Blog Post ist Teil einer Serie und setzt auf die früheren Teile auf. Lest bitte alle Teile, damit ihr nichts wichtiges verpasst. Zu finden sind alle Beiträge unter dem Tag VS2017.

Git

Heute soll es um Git gehen. Aber vorweg möchte ich noch etwas erwähnen. Es bringt absolut nichts, wenn ihr eure Quelltexte, die Git Repositories etc., an einem unsicheren Speicherort (wie Laufwerk C:) lagert. Sorgt lieber erst mal für Datensicherheit. Wie das geht habe ich bereits hier beschrieben: Darf's noch etwas sicherer sein?

Was ist Git?

Kurz vorweg ein paar Begriffserklärungen.

  • Repository
    Das ist das eigentliche Arbeitsverzeichnis von Git, wenn man so möchte. Hier liegt das Projekt drin, inklusive allen Vorgängerversionen, Branches, … normalerweise ohne Kompilate, also den fertigen Binärdateien (.exe) oder Releases (MeineApp.zip).
  • Pull
    Hiermit "zieht" man sich die aktuelle Version (oder die explizit angegebene) aus dem Repository heraus, ähnlich wie ein Download des Quelltextes von einer Webseite. Wird auch manchmal "Auschecken" genannt, auch wenn das hier nicht so ganz zutrifft.
  • Push
    Wer hätte es gedacht, das Gegenteil von Pull. Hiermit werden die Änderungen die man in seiner lokalen Arbeitskopie gemacht hat übertragen. Wird auch öfters "Einchecken" oder "Commit" genannt.
  • Sync
    Hierbei wird das lokale Repository mit einem Remote Repository abgeglichen, sprich Änderungen die ihr gemacht habt werden hoch geladen, Änderungen die ihr noch nicht habt werden heruntergeladen.
  • Branch
    Eine Verzweigung. Dies kann man sich ungefähr so vorstellen, Debian Linux ist der Master, der Ursprung (origin). Raspbian, Ubuntu, … basieren auf Debian, haben aber eine Andere Zusammenstellung, sind also ein Branch von Debian. Wie man das jetzt genau nutzt bleibt einem natürlich selbst überlassen.

Git ist eine Versionskontrolle. Gehen wir jetzt mal davon aus dass ihr nur alleine entwickelt. Irgendwann fangt ihr mit einem Projekt an, testet es, zumindest in Teilen, und befindet es für ok, also lauffähig. Dann könnt ihr eure Änderungen in Git pushen, wohlgemerkt mit einer Notiz was ihr warum geändert habt. Merkt ihr später dass ihr euch verrannt habt und eure Änderungen so doch nicht umsetzbar sind könnt ihr immer wieder zu Zeitpunkt X zurück kehren, natürlich vorausgesetzt dass ihr vorher auch eingecheckt habt.

Jetzt gibt es ein lokales Git Repository, aber vielleicht auch ein Remote Repository. In meinem Fall wäre das git.tightDev.Net. Das ist zwar optional, aber benötigt, wenn man mit mehreren Leuten gleichzeitig an einem Projekt arbeiten möchte. Es muss nicht unbedingt ein über das Web erreichbarer Server sein, es kann auch auf das Firmennetzwerk limitiert sein.

Es sei aber noch gesagt dass Git ein gewaltiges Thema werden kann, ich kratze hier nur an der Oberfläche und ich weiß auch noch nicht alles.

Vorbereitung

Erstellt jetzt ein leeres Verzeichnis wo eure Projekte drin liegen sollen, z.B. S:\Git falls ihr meinen Rat von oben befolgt habt. Ich gehe davon aus dass ihr Git bereits installiert habt (belasst alles bei den Standardeinstellungen).

Schnellstart

Ab jetzt gibt es 2 Wege. Ein neues Projekt erstellen oder ein existierendes öffnen.

Ein existierendes Projekt öffnen

Könnte man jetzt umständlich über die Konsole machen (git clone), aber man kann auch einfach vom Git Server die Kopie herunterladen. Diese entpackt ihr dann in S:\Git\Projektname. Danach einfach die Projektdatei öffnen.

Ein neues Projekt erstellen

Ich erstelle hier jetzt mit Absicht eine .Net Konsolenanwendung. Das liegt daran weil ich später noch auf Cross-Platform Entwicklung mit .Net Core eingehen möchte (dort ist leider noch keine GUI unterstützt, zumindest nicht von Haus aus). Mit der Konsole selbst kann man aber auch schon einiges machen. ;)

Als Name habe ich jetzt bewusst BlogExample_FW genommen, es ist eine .Net Framework Anwendung. Das _FW habe ich aus dem Projektmappennamen wieder raus genommen. Warum? Dazu kommen wir später, wenn es um Cross-Platform geht. Ich nutze hier VB.Net, aber ihr könnt es genau so auch mit C# machen, falls euch die Sprache eher liegt.

Wichtig ist hier noch unten rechts "Neues Git-Repository erstellen", der muss aktiviert sein.

Interessant wird es jetzt unten rechts:

Links zeigt an wie viele Änderungen noch an ein Remote Repository übertragen werden müssen (wenn man es nutzt). 2 ist hier ganz normal, es handelt sich hierbei um die Dateien .gitattributes und .gitignore (normalerweise versteckt). Diese konfigurieren Git, so dass z. B. bestimmte Dateien nicht synchronisiert werden. Die Attribute lassen wir so wie sie sind, aber die .gitignore sollten wir jetzt mal kurz im Notepad (o. Ä.) öffnen. Hier fügt ihr oben die folgenden Zeilen ein:

*.plb
Thumbs.db
.DS_Store

.plb Dateien werden von Photoline automatisch erstellt, Thumbs.db von Windows. Es handelt sich hier um Miniaturansichten der Grafiken. Braucht kein Mensch, muss nicht synchronisiert werden. .DS_Store erstellt MacOS auf jedem Laufwerk und in jedem Verzeichnis was es in die Finger bekommt. Nutzen bei allen gleich 0, also weg damit.

Zurück in's VS. Der Punkt rechts daneben (im Screenshot 0) zeigt die Änderungen an (veränderte, hinzugefügte und gelöschte Dateien).

Ein weiter öffnet den Team Explorer. Und zu guter Letzt könnt ihr den Branch auswählen oder einen Neuen erstellen. Ganz so tief gehe ich hier aber nicht in's Detail.

Der erste Quelltext

Im Projektmappenexplorer seht ihr jetzt dass eine Module1.vb erstellt wurde. Diese habe ich in App.vb umbenannt (mache ich immer so) und in ihr diesen Quelltext eingefügt:

''' <summary>Module containing all application related stuff.</summary>
Friend Module App

        ''' <summary>Application main entry point.</summary>
        Friend Sub Main()

                ' Ask for user name
                Console.Write("Enter your name: ")
                Dim sName As String = Console.ReadLine

                ' Greet the user
                Console.WriteLine()
                Console.WriteLine("Hello, " & sName & ".")

                ' Wait before exit
                Console.WriteLine()
                Console.WriteLine("Press any key to exit...")
                Console.ReadKey(True)

        End Sub

End Module

Der Quelltext ist eigentlich selbsterklärend, absolut nichts spezielles. Beachtet aber, dass ich vorher mit 3fach Kommentaren (''' in VB.Net, /// in C#) über dem Modul und der Sub spezielle Kommentare angelegt habe. Gewöhnt euch das gleich an, das wird später noch wichtig wenn wir zur Dokumentation kommen. Das <summary> und ggf. weitere Felder erstellt Visual Studio dann automatisch selbst.

Jetzt steht unten rechts auch dass wir 3 Änderungen im Projekt vorgenommen haben.

Klickt man hierauf sieht man diese.

"Module1.vb" wurde gelöscht, "App.vb" hinzugefügt. Technisch jetzt zwar nicht ganz so richtig, wir haben sie ja nur umbenannt, aber passt schon. Und natürlich wurde auch die Projektdatei bearbeitet.

Was jetzt zwingend noch gemacht werden muss ist oben im gelben Feld einzugeben was man seit dem letzten Commit bearbeitet hat. Da dies unser erster Commit ist können wir hier "Initial commit." eingeben, sonst natürlich eine Auflistung der Änderungen die wir gemacht haben.

Danach auf "Commit für alle" klicken und das lokale Git Repository wird aktualisiert.

Das erste "Whoops"

Machen wir jetzt nicht, aber nur rein theoretisch. Klickt unten rechts auf master (oder wie euer Branch heißt). Dort könnt ihr euch die Änderungen anzeigen lassen. In dem Verlauffenster seht ihr jede übertragene Änderung (jedes Commit) und könnt entweder die alte Version einer Datei öffnen (Doppelklick auf den Commit, die Dateien erscheinen dann im Team Explorer) oder komplett zum ausgewählten Commit zurück kehren.

Die Cloud

Welcher Vollhorst hat sich den Begriff überhaupt ausgedacht? Naja, Internet ist halt #Neuland… Es soll jetzt um ein Remote Repository gehen. Der kann im Netzwerk stehen aber auch über das Internet erreichbar sein.

Wie auch immer, ihr bekommt eine Git URL, wie https://git.tightdev.net/BlogExample.git. Abgesehen davon habt ihr natürlich eure Anmeldedaten. Jetzt muss das Ganze nur noch verlinkt werden.

Klickt hierzu unten rechts auf den Linken Button mit dem Pfeil hoch, danach auf "Git-Repository veröffentlichen". Dort fügt ihr die URL ein, danach Klick auf "Veröffentlichen".

Ihr werdet dann ggf. noch nach euren Anmeldedaten gefragt. Sollte ein Name für das Repository abgefragt werden benennt es auf jeden Fall "origin". Normalerweise wird das aber standardmäßig gesetzt. Mag sich ändern wenn es verschiedene Branches gibt, aber so weit sind wir noch nicht. ;)

Jetzt wird das Projekt, also das lokale Repository an den Server übertragen. Wenn ihr jetzt Änderungen vornimmt und wie gehabt per Commit diese in euer lokales Repository schreibt wird es nicht gleich auf dem Server synchronisiert. Dazu ist der Punkt Sync da (oder unten rechts der Pfeil nach oben). So werden auch neuere Dateien herunter geladen, falls euer lokales Repository nicht mehr aktuell ist.

Das wars…

… für heute. Im nächstem Teil wird es um Cross-Platform Entwicklung gehen. Seid gespannt. Und immer den VS2017 Tag checken! :)


Visual Studio 2017

Visual Studio 2017…

Ok. Ich programmiere schon seit ich 7 Jahre alt bin. Zugegeben, wirklich programmieren konnte man es damals noch nicht nennen. Zur damaligen Zeit, kann man sich heute kaum mehr vorstellen, gab es noch kein Internet. Wollte man neue Software haben hatte man 3 Möglichkeiten:

  1. Selber programmieren
  2. Disketten oder Datasetten kaufen
  3. Computerzeitschriften kaufen und Listings abtippen

Für mich kam damals natürlich nur letzteres in Frage. Daher meine ersten Erfahrungen mit Basic. Dabei ist es denn auch geblieben. Von einem Schneider CPC464 rüber zum PC mit MS-DOS und QBasic, über Visual Basic 1 zu 6, dann die VB.Net Schiene. Und hier hing ich Ewig auf Visual Studio 2008 / Visual Basic 2008 Express fest. Primär lag das daran weil das neuere Visual Studio 2010 fehlerhaft war und mir den Debugger des installierten 2008'ers, welchen ich weiterhin brauchte, erfolgreich geschrottet hat. Neuinstallation war nötig.

Aber es wird Zeit mit der Zeit zu gehen. Also mal das neue Visual Studio besorgt. Es hat ja auch diverse Vorteile, auf die gehe ich aber in den anderen Teilen dieser Serie ein. Nur so viel sei vorweg gesagt: Es wird auch unter Anderem auch noch um einige neue Eigenheiten der Sprache Visual Basic gehen, um die Veröffentlichung von Anwendungen und auch Cross-Platform Entwicklung ist ein Thema.

Die Tools die ich verlinke sind zwar fast nur für Windows, weil das mein Primärsystem ist, aber einiges gibt es auch für MacOS oder Linux. Vielleicht nicht ganz so komfortabel, einiges muss angepasst werden, aber so ist es halt.

Wie auch immer, diese Serie soll meine Erfahrungen und Lernerfolge wiedergeben, vielleicht hilft es ja auch dem Einen oder Anderen, etwas professioneller zu arbeiten.

Die Community Edition vom Visual Studio ist gratis, wie die Express Editionen früher. Und schon geht es los…

Systemvoraussetzungen

  • Windows 7 oder neuer.
  • 1,8GHz CPU oder besser.
  • Teilweise wird 64 Bit CPU und Betriebssystem vorausgesetzt.

Das sind aber schon extreme Mindestvoraussetzungen. Inoffizielle Mindestvoraussetzungen, also Anmerkungen meinerseits:

  • Kaffee! Weil, das wird dauern.
  • Schnelle Internetverbindung vorausgesetzt (je nach Konfiguration werden ~10-20GB geladen, ggf. sogar mehr).
  • Ohne SSD im Rechner (200GB aufwärts), ersetze Punkt 1 mit "Massig viel Kaffee! Es wird ewig dauern.".
  • 4GB RAM sind absolutes Minimum.

Naja, mein System passt noch, also ab dafür.

Installation

Heutzutage läd man sich ja keine Anwendungen runter, man läd sich Downloader runter die dann die Anwendung runter laden. Diese "schöne" neue Welt übertrifft das Visual Studio noch. Man läd sich einen Downloader runter der das Setup runter läd welches wiederum das Visual Studio runter läd. Aaahja. Naja, hat auch Vorteile, man läd nur Komponenten runter die man ausgewählt hat und die zumindest halbwegs aktuell sind. Den ersten Schritt hätte man sich trotzdem schenken können.

Ist das Setup gestartet dann kann man auswählen was man installieren möchte. Hier kann natürlich jeder das auswählen was er möchte, für mich - und die Folgeteile dieser Serie - sind aber die Punkte

  • .NET-Desktopentwicklung
  • ASP.NET und Webentwicklung
  • Plattformübergreifende .NET Core-Entwicklung

benötigt. Android und iOS lasse ich mangels vorhandenen Geräten links liegen, C++ ist so eine Sache für sich, ich stehe einfach nicht so auf diese Ansammlung von Smiley Gangbang's. Auch wenn ich in dieser Serie wohl nicht großartig auf ASP.NET eingehen werde, empfehle ich es trotzdem, wenn auch nur zum Bearbeiten von .css und anderen Webdateien, weil man in seiner Homepage was anpassen möchte.

Visual Studio Download

Weitere Sachen

Hier greife ich jetzt etwas vor, aber wenn ihr eh schon grad am runter laden seid, zieht das gleich mit. Es handelt sich um extrem hilfreiche Tools auf die ich später auch noch eingehen werde. Hier beschreibe ich nur kurz das Warum, aber nicht das Wie. Bitte erst zu Ende lesen, manchmal ist die Reihenfolge wichtig.

  • Git - Eine Versionskontrolle. Da das Thema sehr komplex ist mehr dazu später. Must-Have! Solltet ihr einen Windows Server haben und wollt euren Quelltext lieber damit synchronisieren statt irgendeinem Onlinedienst wie GitHub, wäre Bonobo Git Server einen Blick wert, den nutze ich selber. Für den lokalen Rechner braucht ihr das aber nicht.
  • Visual Studio Spell Checker - Der Name sagt alles, Rechtschreibprüfung für den Quelltext (wie Variablennamen) und Kommentare. Visual Studio muss erst fertig installiert sein!
  • HTML help workshop - Benötigt von Sandcastle Help File Builder, man selbst nutzt es nicht direkt.
  • Sandcastle Help File Builder - Benötigt um Hilfedateien (.chm, .docx) zu erstellen. Visual Studio muss erst fertig installiert sein! HTML Workshop sollte installiert sein!
  • OfficeToPDF - Konsolenanwendung um Office Dokumente in .pdf umzuwandeln. Setzt ein installiertes Office 2007 (besser 2010) oder neuer voraus.
  • Resource hacker - Sehr nützlich um in Resourcen von Anwendungen (wie Bilder, Icons, …) rein zu schauen und diese sogar zu bearbeiten.
  • ILSpy - Hiermit kann man in den Quelltext von .Net Binärdateien rein schauen. Man bekommt zwar natürlich nicht 1zu1 den Quelltext, aber häufig genug reicht das aus was man sieht. Alternativ wäre noch der .Net Reflector zu nennen, allerdings verachte ich die Firma Red-Gate! Als die Anwendung früher von Lutz Roeder hergestellt wurde war sie noch gratis und lief perfekt, jetzt muss man dafür n Kleinkredit aufnehmen. Get lost! Vielleicht findet ihr ja noch eine alte Version, packt diese mit in eure Sammlung und nicht Updaten!
  • ConfuserEx - Anwendung um Obriges, also das Dekompilieren zu verhindern. Ich erwähne es der Vollständigkeit halber, rate aber von der Nutzung eher ab. Genauer gehe ich darauf in einem späteren Teil ein. Fazit kurz vorweg: Bringt nicht viel Nutzen, aber jede Menge Nachteile, irrelevant welchen Obfuscator man nutzt (es gibt Alternativen, sowohl freie als auch kommerzielle).
  • Visual Studio Image Library - Verschiedene Bilder und Icons die gratis zur Verfügung gestellt werden (Lizenz beachten!). Vorsicht, ist 'ne Menge. Zieht euch die für alle Versionen, es sind Bilder, Bildern ist es egal ob ihr nun Visual Studio 2017 oder 2012 nutzt. Die vom Visual Studio 2005, 2008 und 2010 stehen leider nicht offiziell zum Download zur Verfügung, aus lizenztechnischen Gründen biete ich diese auch nicht an, sorry. Man könnte aber auf die Idee kommen danach zu suchen. VS2005ImageLibrary.zip, VS2008ImageLibrary.zip, VS2010ImageLibrary.zip. Könnte man. Aber ich hab' nix gesagt. Vieles wird in den Versionen eh gedoppelt sein.
  • 7zip, aber auch 7za.exe - Sehr gutes Komprimierungsprogramm. Speziell wird aber die 7za.exe benötigt, welche neuerdings im Extra Archiv ziemlich versteckt ist.
  • mkisofs.exe - Leider finde ich keine Projekthomepage mehr hierzu, daher hoste ich die Datei auf meinem Server. Ggf. passe ich den Link an. Es handelt sich um ein Konsolenanwendung um Images zu erstellen, z. B. CD Images, aber auch andere Typen können erstellt werden. Nette Besonderheit: Es unterstützt das Suchen nach Duplikaten und entfernt diese transparent, genau aus diesem Grund für mich unverzichtbar. Mehr dazu in einem späteren Teil.
  • Photoline (aktuell 59€) oder ein ähnliches vernünftiges Bildbearbeitungsprogramm. Häufig nicht kostenlos. (Klar, es gibt Gimp oder Paint.Net, mit denen konnte ich mich aber nie anfreunden. Persönliche Vorliebe und so. Die andere Alternative, welche bei mir den Titel "Der strudelfressende Nimmersatt des Geldbeutels" zu Recht bekommen hat, ernenne ich hier noch nicht mal namentlich. Ihr wisst welchen ich meine.)

Die meisten Programme werden entweder zu Dokumentationszwecken oder später zur Veröffentlichung verwendet. Wie genau sage ich denn wenn wir so weit sind. 

Solltet ihr Windows ≥8 verwenden dann rate ich an das .Net Framework 3.5 zusätzlich zu dem installierten 4.x zu installieren, sonst können eure Anwendungen nur für die neuen Versionen erstellt werden, was ältere Betriebssysteme ausschließt. Eine Anleitung hierfür bietet Microsoft selbst: https://docs.microsoft.com/de-de/dotnet/framework/install/dotnet-35-windows-10 (Danke, !)

Einrichtung

Ist alles heruntergeladen und (ggf.) installiert kann man das neue Visual Studio mal starten und einrichten. Ich persönlich bevorzuge das dunkle Theme, auch wenn es hier und da noch etwas Feintuning bedarf. Spielt hier erst mal etwas mit rum, was euch gefällt, was nicht. Im nächsten Teil geht's weiter. Was ich zu Erst ändere ist das Einrücken mit Leerzeichen. Es ist einfach nur falsch. War es immer und ist es immer noch. Dazu sind Tabs da! Wer so was will zentriert auch Text in Word mit Leerzeichen und Augenmaß. Es ist einfach nur dumm.

War's das?

Natürlich nicht, nur für heute. Sucht nach dem Tag VS2017, da findet ihr alle Beiträge zu der Serie. Allerdings (während ich diesen Post schreibe) ist die Serie noch im Entstehen, ist ja der erste Teil. Schaut also öfters mal vorbei. Smile

 

p.s.: Für die Ernennung ggf. kommerzieller Software ist deren Qualität und mein Vertrauen darin verantwortlich, keinerlei finanziellen Interessen. Selbst hätte ich Geld hierfür bekommen können, hätte ich das Angebot dankend abgelehnt, wie schon mal geschehen! Dieser Blog ist frei von kommerziellem Sponsoring.


Sicherheit

Nein, hier geht es jetzt nicht um Verschlüsselung bis zum Abwinken, das liest man ja schon länger an jeder Ecke, ob man will oder nicht. Wobei es schon lustig ist, Hauptsache die Verbindung zu Google und Facebook, die größten Datenkraken und -Schleudern überhaupt, ist verschlüsselt. Aaahja. Aber ich schweife ab.

Es soll hier um die Datensicherheit gehen, sprich Sicherheit gegen versehentliches Löschen oder Überschreiben von wichtigen Dateien. Viele Leute wissen nämlich nicht dass man mit geringstem Aufwand sein System so konfigurieren kann dass wichtige Daten automatisch geschützt werden. Mit wichtigen Daten meine ich jetzt unwiederbringliche Daten, wie Familienfotos, Quelltexte, Dokumente, E-Mails und ähnliches, nicht die FSK18 Videosammlung, auch wenn der Ein oder Andere sie für wichtig hält. ;)

Vorbereitung

Bevor ihr irgendwas macht was hier beschrieben ist: Sichert eure privaten Daten vorher auf einem externen Laufwerk / CD / DVD / BD! Normalerweise sollte zwar nichts schief gehen, aber man hat schon Pferde kotzen sehen, direkt vor der Apotheke. Ich übernehme keine Haftung.

Zu Erst sollte man ungefähr abschätzen können wie viel Speicherplatz die privaten Daten ungefähr brauchen. Also Eigene Bilder, Dokumente, … alles zusammen. Ich gehe hier mal von rund 10GB aus.

Um etwas Luft nach Oben zu haben (und genug Platz für Schattenkopien - mehr dazu später) sagen wir mal wir reservieren 32GB für die privaten Daten.

Partition verkleinern

Kurz vorweg: Anfängern sei angeraten möglicherweise angeschlossene USB Festplatten oder Sticks jetzt kurz zu entfernen, der Übersichtlichkeit halber. Geht in das Startmenü und im Suchfeld "Computerverwaltung" eingeben. Hier links unter "Datenspeicher" - "Datenträgerverwaltung" anklicken und kurz warten. Etwas später seht ihr den Aufbau von eurer Festplatte. Typischerweise sind hier 2 Bereiche: "System-reserviert" (normalerweise unsichtbar) und das Laufwerk C:

Je nach Betriebssystem kann die Größe von "System-reserviert" variieren, das ist normal.

Diese Anordnung hat gravierende Nachteile! Sollte irgendwas mal euer System zerschießen und ihr seid zu einer Neuinstallation gezwungen, tja, Pech, die Daten auf C: sind futsch. Sch… auf die Steam Library oder die Filme, kann man alles wieder bekommen, Fotos etc. sind dann weg.

Das wollen wir aber nicht. Also erstellen wir uns extra Platz, der selbst nach einer Neuinstallation noch intakt bleibt. Wie gesagt, ich gehe hier davon aus dass 32GB ausreichen, ihr könnt das für eure Bedürfnisse dementsprechend anpassen.

Macht einen Rechtsklick auf die Grafik von Laufwerk C: und wählt dort "Volume verkleinern" aus. Nicht wundern, das dauert einige Zeit.

Nach einiger Zeit bekommt ihr ein Dialogfeld wie dieses:

Pro-Tipp aus der Praxis: Vorm Erstellen von Screenshots nachprüfen ob für das Vorhaben auch noch genug freier Festplattenspeicher vorhanden ist. Ignoriert einfach dass hier das Maximum 7764MB ist, liegt an der überfüllten Festplatte. ^^'

Hier kann man eingeben wie viel Speicher freigegeben wird. Das bewirkt dass Laufwerk C: kleiner wird. Der Wert wird hier in MB angegeben. Rechnet man genau sind 32GB = 32 * 1024 = 32768MB. Gebt das hier ein. Falls das nicht möglich ist, ist eure Festplatte zu voll, dann müsste man vorher ein paar Daten wo anders hin auslagern oder einfach löschen, falls diese nicht mehr benötigt werden.

Hiernach auf "Verkleinern" klicken. Das dauert wieder etwas. Danach ist C: um 32GB (oder was ihr eingegeben habt) kleiner. Das führt dazu dass ihr freien Platz am Ende der Platte habt.

Partition erstellen

Jetzt habt ihr einen "Nicht zugeordnet" Bereich am Ende der Festplatten-Grafik. Klickt hier wieder mit rechts drauf, dann auf "Neues einfaches Volume…".

Vom Prinzip kann man jetzt immer auf Weiter klicken, ich würde als Laufwerksbuchstaben aber S: wählen (sicher / secure) und als Datenträgerbezeichnung etwas ähnliches, das bleibt aber jedem selbst überlassen. Vor allem wenn es sich überwiegend um Textdateien handelt kann man hier auch noch "Komprimierung für Dateien und Ordner aktivieren" ankreuzen, das spart noch etwas Speicher. Jetzt habt ihr ein zusätzliches Laufwerk, genauer gesagt Partition auf der Festplatte. Sollte dann in Etwa so aussehen (wegen Platzmangel nutze ich jetzt eine virtuelle Festplatte, daher wurde aus C: mal eben D:, ignorieren):

So, die Vorbereitungen stehen.

Schattenkopien / Computerschutz

Kurz vorweg ein paar relevante Infos. Schattenkopien und Computerschutz sind was ganz anderes, aber doch ähnlich in der Funktionsweise.

Auch wenn diese Methoden Daten retten können gilt trotzdem: Man sollte immer Backups machen, je nach Nutzung wöchentlich, monatlich, das muss jeder für sich selber entscheiden. Vorzugsweise auf externen Medien wie USB Sticks oder -Festplatten, SD Karte, CD / DVD / BD / Tape. Bei optischen Medien diese auf jeden Fall dunkel lagern, in einem Schrank z. B., da einige Rohlinge schon binnen 1-2 Jahren sonst nicht mehr lesbar sind. Eine weitere Alternative wäre natürlich ein Online Speicher, beispielsweise das HiDrive von Strato. Ist zwar nicht kostenlos (Rohlinge und andere Speichermedien auch nicht), aber selbst sollte euch die Hütte abbrennen, da sind die Daten noch sicher. 2€ monatlich (aktuell) sind nun auch nicht die Welt.

Ganz wichtig: Verlasst euch trotzdem nicht drauf! Es ist eine sehr sinnvolle und nützliche Ergänzung zu normalen Backups, ersetzt diese aber nicht! Raucht euch die Platte ab ist es irrelevant wie viele Kopien darauf gespeichert sind, wenn kaputt dann kaputt.

Was sind Schattenkopien?

Dieser Abschnitt betrifft nur Windows Server!

Belässt man alles bei den Standardeinstellungen dann wird von dem Laufwerk worauf Schattenkopien aktiviert sind jeden Werktag um 7:00 und 12:00 Uhr ein Backup der Daten gemacht. Hierbei handelt es sich um eine Art Differenzial-Backup, es werden also nur Änderungen gespeichert, was den für das Backup benötigten Speicher stark reduziert. Sollte man aus Versehen eine Datei löschen oder überschreiben kann man immer wieder zu einem früheren Zeitpunkt zurück kehren. Ändert sich an den Dateien nichts wird auch kein Speicherplatz belegt. Trotzdem sollte man diese Laufwerke auch nie überfüllen. Je voller desto weniger Kapazität für Backups, daher 32GB statt den eigentlich benötigten 10. ;)

Diese Methode lohnt sich definitiv nicht für Laufwerke, wo sich Daten regelmäßig ändern, wie C: wo das Betriebssystem drauf residiert, auch ist es nicht optimal für sehr große Datenmengen (Videosammlungen z. B.), hier geht es eher um kleinere, unwiederbringliche Dateien.

Schattenkopien aktivieren

Im "Server-Manager" unter "Speicher" Rechtsklick auf "Datenträgerverwaltung" - "Alle Aufgaben" - "Schattenkopien konfigurieren…".

Hier das Laufwerk auswählen was wir erstellt haben, dann auf "Aktivieren" klicken.

Nach einem kleinen Infotext und Klick auf "Ja" sind Schattenkopien für das Laufwerk aktiviert und die erste Kopie wird erstellt (dauert etwas). Danach kann man, falls gewünscht, unter "Einstellungen" noch den Zeitplan und Speicherlimits anpassen.

 

Unter "Schattenkopien des gewählten Volumes" kann man dann zu einem früheren Zeitpunkt zurück springen, falls was schief gelaufen ist. Einfach das Laufwerk auswählen (S:) und den gewünschten Zeitpunkt. Dann auf "Wiederherstellen…" klicken

Client Systeme (Windows 7, 10):

So schön komfortabel wie bei Serversystemen ist es hier leider nicht, aber es gibt zumindest noch den Computerschutz.

Zu finden ist der im Startmenü - Rechtsklick auf "Computer" - "Eigenschaften" - "Erweiterte Systemeinstellungen" (links) - "Computerschutz" (Tab).

Wählt das Laufwerk aus und klickt auf konfigurieren.

Hier ist oben standardmäßig der Schutz deaktiviert. Diesen also aktivieren. Unten kann man dann noch den zu verwendenden Speicher für die Wiederherstellungen einstellen. Wie hier schon beschrieben, es handelt sich um einen Maximalwert, man kann also ruhig großzügig sein.

Optional: Raid - aka gespiegeltes Volume

Zusätzlich könnte man noch ein Raid / Mirror / gespiegeltes Volume erstellen und eben darauf das Laufwerk S: erstellen.

Was ist ein Raid?

Ein Raid (Redundant Array of Independent Disks) ist ein Verbund aus mehreren Festplatten, es setzt also voraus dass ihr mindestens 2 Festplatten im System habt, idealerweise 2x die gleiche. Es gibt verschiedene Typen von Raid Verbunden, ich gehe hier nur auf die 2 gängigsten ein. Das wären Raid0 und Raid1. Beide haben Vor- und Nachteile. Als Eselsbrücke: Raid0 = Geht eine Platte kaputt -> 0 Daten. Raid1 = Egal wenn eine Platte ausfällt. Es werden beide Festplatten gleichzeitig genutzt, bei Raid0 so dass die Datengeschwindigkeit sich verdoppelt (rechnerisch, die Realität sieht das etwas anders), bei Raid1 werden die selben Daten auf beide Platten gleichzeitig geschrieben, daher ist es egal sollte eine der Platten den Geist aufgeben.

Hardware Raid setzt erstens spezielle Festplattencontroller voraus, außerdem müssen die Festplatten mindestens ähnlich groß sein, am Besten identisch. Ändert man das Mainboard oder den Raid Controller… Viel Spaß. Daher gehe ich hier auf Software Raid ein.

Ein gespigeltes Volume erstellen

Vom Prinzip ist es genau das Selbe wie oben unter "Partition verkleinern" und "Partition erstellen", nur halt 2x, für beide Festplatten. Der freie Speicher, also der für Laufwerk S: muss gleich groß sein. Es unterscheidet sich nur in einem Punkt: Statt auf "Neues einfaches Volume…" geht man hier auf "Neues gespiegeltes Volume". Der Rest ist relativ selbsterklärend, man fügt im ersten Bild noch die 2. Festplatte hinzu die verwendet werden soll, der Rest ist wie schon beschrieben.

Hierbei werden die Festplatten in dynamische Datenträger konvertiert. Man merkt keinen Unterschied, aber grade wenn schon Daten auf den Platten liegen kann das übernehmen der Änderungen eine Weile dauern.

Danach, wie Oben, wieder die Schattenkopien / Sicherheit aktivieren. Jetzt kann rein theoretisch jeder Zeit eine Festplatte kaputt gehen, auf der Anderen liegen die Daten auch noch, also kein Verlust.

Ein Hoch auf die Faulheit

Was nützt einen dieses sichere Laufwerk jetzt? Nichts, wenn man es nicht konsequent nutzt.

Viele Programme wollen immer in "Eigene Dokumente", "Eigene Bilder", "Eigene Dateien", … speichern, das liegt weiterhin aber auf Laufwerk C:. Blöd, vor allem wenn man nicht dran denkt und gezielt jedes Mal wieder auf S: speichert. Aber auch hier gibt es Abhilfe.

Sämtliche "Eigene…" Ordner kann man umlegen. Dies geht ganz einfach in den Eigenschaften der Ordner. Geht in euer Profil, Rechtsklick auf z. B. "Eigene Bilder" und dann "Eigenschaften":

Hier unter dem Tab "Pfad" auf "Verschieben" klicken und somit den Ordner auf S: legen. Um den Rest kümmert sich Windows selbst. Das Ganze wiederholt ihr für die anderen Ordner auch, zumindest für die wo es sinnvoll ist. "Downloads" muss jetzt nicht mit gesichert werden, kann man eh neu runter laden. ;)

Und sonst?

Es gibt auch Verzeichnisse die man möglicherweise umlegen möchte, aber es auf diesem Weg nicht kann. So stand ich vor dem Problem dass sich der hMailServer ausschließlich in C:\Program Files (x86)\hMailServer installieren lässt und auch dort sein Datenverzeichnis mit den ganzen E-Mails hat. Selbstverständlich ist dies nicht konfigurierbar, warum auch… <_<

Slap

Aber Windows bietet auch hier Hilfe, wenn auch nur über die Konsole. Erstmal muss man dafür sorgen dass nichts mehr in dem Verzeichnis aktiv läuft, also in diesem Fall den Dienst hMailServer stoppen. Falls es eine reguläre Anwendung ist diese beenden.

Jetzt einfach das Verzeichnis auf S: verschieben. Damit gleich aber wieder alles wie gewohnt funktioniert müssen wir eine spezielle Verknüpfung erstellen. Also Start - "Eingabeaufforderung" (ggf. als Admin starten).

Hier navigieren wir in das Verzeichnis in dem das verschobene Verzeichnis vorher war, z. B.:

CD "C:\Program Files (x86)"

Und jetzt erstellen wir eine Junction (spezielle Verknüpfung):

MKLINK /J hMailServer S:\hMailServer

Es wird hier ein quasi Verzeichnis erstellt, namens "hMailServer", was direkt auf "S:\hMailServer" verweist. Da das Ganze transparent gehandhabt wird funktioniert alles weiterhin wie gehabt. Nur noch den Dienst oder die Anwendung neu starten, fertig.

Und jetzt?

… sind die wichtigsten Daten relativ sicher. Blitzschlag, Feuer, Virenbefall … Aber dazu komme ich ausführlicher in einem anderen Beitrag. Grundsätzlich habt ihr jetzt aber alle wichtigen Daten an einem zentralen Ort, was das rüber ziehen auf einen USB Stick o. Ä. erheblich vereinfacht. Wer das vernachlässigt ist derweil selber Schuld ;)


Ich predige es immer wieder…

Niemals, wirklich niemals Standard Benutzernamen und Passwörter verwenden! Für ein pillepalle System was niemals in's Internet geht, ok, die Faulheit siegt manchmal. Aber sobald etwas mit der Öffentlichkeit kommunizieren kann, sei es nun PC, Laptop, Tablet, Router, AccessPoint, sämtliche IoT Geräte wie Raspberry Pi, Banana Pi, WiFi Überwachungskameras (ok, hier ist es eh egal, so unsicher wie die Scheißteile sind), … dann ist das Erste was gemacht werden muss das Passwort ändern, im Idealfall auch der Benutzername gleich mit. Letzteres ist manchmal nicht so leicht möglich, sollte aber angestrebt werden.

Warum?

Schönes Beispiel. Neuer Raspberry Pi, alles eingerichtet und es funktioniert endlich auch, dass er von außen per ssh ferngesteuert werden kann. Stolz wie Oscar weil ja alles geht wird es so belassen. Also Benutzername "pi" und Passwort "raspberry". Frage: Was für Benutzer- und Passwortkombinationen würde ein Angreifer der in euer Netzwerk eindringen will wohl als erstes versuchen?

Ist diese lächerliche Hürde erst genommen dient die Hardware als Türöffner in das gesamte interne Netzwerk. Sie ist also zum Zombie-Computer geworden, teilweise ohne dass man es merkt. Außer irgendwann flattern Abmahnungen rein oder die KriPo kommt mitsamt Tür in's Haus rein, weil noch ganz andere Sachen gemacht wurden.

Was mögliche Gefahren und Konsequenzen angeht kratze ich hier nur an der Oberfläche, darum soll es an dieser Stelle auch nicht gehen. Glaubt mir einfach, es ist wichtig.

Passwort ändern

Das ist beim Raspberry Pi noch relativ einfach. Entweder über raspi-config, gleich der erste Menüpunkt. Alternativ über die Konsole:

sudo passwd Benutzername

Benutzername ist im Standard halt pi. Das wäre zumindest schon mal das aller Nötigste.

Benutzernamen ändern

Jetzt wird es (un-)lustig, es sind nämlich mehrere Schritte notwendig. Im Idealfall macht ihr vorher ein Backup, sollte was schief gehen.

Linux erlaubt es nicht den aktuell angemeldeten Benutzer umzubenennen. Also brauchen wir einen Zweiten, den wir nachher wieder löschen. Nennen wir ihn bob. Möglicherweise kann man dies auch als root ausführen, dies geht scheinbar aber nicht über ssh, muss also direkt am System gemacht werden.

Kurz vorweg: In Linux dürfen Benutzernamen keine Leerzeichen beinhalten und werden immer lowercase, also klein geschrieben!

Temporären Benutzer erstellen

Also erstellen wir den Benutzer bob und geben ihm ein Passwort.

sudo useradd -m bob
sudo passwd bob

Der Benutzer hat jetzt aber noch keine Rechte. Da wir ihn eh nur ein paar Minuten brauchen machen wir ihn der Einfachheit halber zum root.

sudo usermod -g root bob
sudo usermod -g ssh bob

Der neue Benutzer ist jetzt erstellt, zumindest soweit wie wir ihn brauchen. Jetzt eine neue Session öffnen und als bob anmelden. Wenn das funktioniert prüfen wir auch noch die Rechte, beispielsweise mit:

sudo ls

Kommt keine Fehlermeldung ist alles perfekt.

Alten Benutzer abmelden

Erinnert ihr euch noch an Windows 95, wo man selbst beim Ändern der Bildschirmauflösung neu starten musste? Es gibt gleich Flashbacks.

Natürlich kann man jetzt den alten Benutzer abmelden, es laufen aber trotzdem noch Prozesse darunter. Es gibt 2 Wege: Die Prozesse einfach killen, beispielsweise mit:

sudo htop

oder: Neustart.

Benutzer umbenennen

Meldet euch wieder als bob an. Jetzt können wir den Benutzer und dessen home Verzeichnis umbenennen:

sudo usermod -l NeuerName AlterName
sudo usermod -m -d /home/NeuerName NeuerName

Benutzer testen

Jetzt, sofern alles geklappt hat, könnt ihr euch mit eurem neuen Benutzernamen anmelden. Testet hier aus ob auch noch alles funktioniert. In meinem Fall war dem so, also ist bob jetzt nicht mehr benötigt.

Temporären Benutzer löschen

Tja, bob muss abgemeldet werden, selbe Prozedur wie oben. Komischerweise konnte ich die Prozesse nicht killen, also: Windows 95 Neustart.

Mit dem umbenannten Benutzer angemeldet kann man ihn jetzt löschen:

sudo userdel bob
sudo delgroup bob

Jetzt ist nur noch bob's home Verzeichnis da, was auch gelöscht werden kann:

cd /home
sudo rm -r bob

Das wars, bye bob.

Somit ist der Benutzer umbenannt und ihr ein Stück weit sicherer. Wer sich jetzt noch versucht als Benutzer pi anzumelden, lass ihn doch, den gibt es nicht mehr ;)


Old man yells at cloud

Es ist schade...

... wir leben nicht im 23. Jahrhundert, wo - zumindest laut Star Trek - es kein Geld mehr geben wird. Wenn man etwas haben möchte muss man dafür bezahlen, normalerweise mit Geld. Das hat man nicht wenn man nicht selbst wiederum etwas leistet, sprich arbeiten geht. Ihr kennt das.

Ich möchte an dieser Stelle betonen dass ich diesen Beitrag nicht nur für mich verfasse. Es ist ein generelles Problem was sehr viele betrifft. Ich nehme mich jetzt nur als Beispiel.

Geiz ist geil...

... war mal ein Werbeslogan einer Marktkette. Hat sicherlich jeder schon gehört, immerhin hat der Spruch es schon in die Wikipedia geschafft. Aber stimmt das wirklich? Ich bin der Meinung: Nein! Wenn die Bedienung oder der Taxifahrer, was auch immer, nett war, dann gebe ich Trinkgeld. Immer. Ich mache lieber eine Person glücklich als was weiß ich 50 Cent mehr in der Tasche zu haben. Ok, 50 Cent klingt nicht nach viel, aber würde jeder so handeln würde es sich schon lohnen. Das Personal bedient ja nicht nur einen Kunden am Tag.

Auch die Bettler auf der Straße sitzen da nicht weil da der Kaffee so gut ist. Ok, es mag da bestimmt auch schwarze Schafe geben, aber die Meisten haben ein ziemlich hartes Schicksal zu tragen. An dieser Stelle möchte ich ein Video verlinken:

Was das jetzt mit mir zu tun hat

Also, ich bin kein Kellner, Taxifahrer oder Obdachlos, klar. Ich arbeite und bekomme dafür auch mein Geld. Aber da ist ja noch mehr. Dieser Blog zum Beispiel. Manche Leute denken tatsächlich weil sie sich bei Pinky oder einem anderem Internetanbieter ihren Internetzugang gekauft haben haben sie auch alle Dienstleister im Internet bezahlt. Dem ist nicht so. Und selbst wenn würde das Geld unter Garantie ungleich verteilt werden, die GEMA geht da mit bestem Beispiel voran.

Viele Webseiten bieten ihre Dienste gratis an. Es gibt so viel an gratis Software im Internet. Dabei darf man nicht vergessen dass dies trotzdem bezahlt werden muss - nämlich von dem der es bereitstellt. Nicht nur die Arbeit und Liebe die da rein geflossen ist, auch die Infrastruktur, also die Server, die Domains, ... müssen bezahlt werden. Nicht von euch, vom Anbieter. Wobei streng genommen bezahlt ihr dafür. Ich gehöre zwar nicht dazu, aber viele Webseiten zeigen Ads, also Werbung. Softwareentwickler verseuchen ihre Anwendungen mit Crapware wie Browser Toolbars, Pseudo Systembereinigung und ähnlichem Schwachsinn. Im Endeffekt werden hier persönliche Daten wie das Surfverhalten zu Analysezwecken verkauft.

Ich persönlich gehe mit diesem Vorgehen nicht konform. Ich werde weder meine Software (meine Schöpfungen, meine "Kinder") verstümmeln mit irgendeinem Mist mit dem ich nachher eh nur mehr Ärger als Nutzen habe, noch werde ich Werbung auf meinen Seiten schalten. Was ich gerne mache sind Hinweise auf Produkte die ich selber gerne nutze. Mein aktueller Serveranbieter Strato ist hier ein Beispiel. Ich könnte darüber auch Geld bekommen, das habe ich aber dankend abgelehnt. Ich möchte frei von jeglichem kommerziellen Sponsoring bleiben, sonst höre ich die Hater schon rufen "eh, der hat das da eh nur drin weil er dafür Geld bekommt".

Aber wie finanzierst du dich?

Kurz um: Fast gar nicht. Die Serverkosten trage ich aus eigener Tasche. Es ist mein Hobby und das mache ich gerne, genau so wie die Softwareentwicklung. Trotzdem: Ich habe ein PayPal Spendenkonto. Ich glaube das gibt es bereits seit 6 oder 7 Jahren. Und es ist tatsächlich was drauf eingegangen! In diesem Sinne vielen Dank an alle Spender, auch wenn es nur mal 1€ war, freut mich trotzdem. Aber in Summe waren es rund 200€ die in der gesamten Zeit eingegangen sind. Gerundet 2,50€ im Monat. Ungefähr 10% von dem was ich an Serverkosten habe.

Erstens kommt es anders und zweitens als man denkt

So kam es diesen Monat dazu dass neben privaten Problemen auch wieder die Servermiete zuschlug, diesmal volle Breitseite. Nein, Strato ist schon Preiswert, es kam nur vieles auf ein Mal, und das zum ungünstigsten Zeitpunkt.

Das hat mich mal dazu veranlasst ein paar Worte zu äußern:

Leute, wenn ihr etwas ständig nutzt, sei es nun eins meiner Projekte, vielleicht OpenOffice oder ein Internet Forum, was auch immer, was gratis angeboten wird... Schaut doch mal nach ob ihr da mal helfen könnt. Es muss ja nicht zwangsweise regelmäßig sein, und auch 1€ würde schon helfen wenn es genug Leute machen. Wenn ihr etwas Geld übrig habt denkt auch mal an die Leute denen ihr viel zu verdanken habt, teilweise ohne es zu wissen.

Ich mache das auch. MakerConnect bekommt öfters mal eine Spende von mir, um nur ein Beispiel zu nennen. Und seid mal ehrlich, was ist wichtiger? Vielleicht die 5€ die es gekostet hat und die ihr somit weniger habt? Oder das Wissen jemandem etwas Gutes getan zu haben, ihm Respekt und Dank für die Arbeit zu zeigen? Von selbst aus, ganz ohne Zwang?

Denkt mal drüber nach!

In diesem Sinne: Geiz ist nicht geil, Geiz ist asozial. CYa!


Alles eine Frage der Optimierung

So stand ich vor der Aufgabe eine Datei mit zig Zeichenfolgen zu überarbeiten. Also prinzipiell Duplikate löschen und die Datei sortieren.

Viele Wege führen nach Rom. Die Eingangsdatei hatte knapp 19 Millionen Zeilen - also Zeichenfolgen. Rund 190MB. Man könnte es schon Stress-Test nennen.

Wie setzt man dieses jetzt um? Also erst mal die Datei einlesen. Das geht recht unproblematisch mittels System.IO.File.ReadAllLines. Somit hat man jede Zeichenfolge als ein Element in einem String Array. Aber wie geht es weiter?

1. Versuch

Eine For Each Schleife, jedes Element in eine System.Collections.Generic.List(Of String) kopieren, vorher überprüfen lassen ob es nicht bereits existiert. Ich sage mal so... Ja, es geht. Nach 2 Wochen nonstop Laufzeit war er aber erst bei der Hälfte der Daten angelangt und wurde immer langsamer je weiter es fortgeschritten war. Unbrauchbar.

2. Versuch

Wieder For Each, dieses Mal mit einem Array gleicher Größe als Ziel. Abfrage per Array.IndexOf damit nichts doppelt rein kommt. Vergiss es. Das hätte nicht nur Monate sondern Jahre gedauert.

3. Versuch

Das Selbe wie in Versuch 2, nur mit Array.BinarySearch. Tjo, is schnell. Löschte auch hier und da etwas raus, Duplikate waren aber immer noch drin. Auch wieder unbrauchbar.

4. Versuch

Das Array vorher sortiert per Array.Sort, sonst wie im 3. Versuch. Selbes Ergebnis.

Jetzt musste der Gockel herhalten. Viele mit ähnlichen Problemen, aber ohne brauchbare Lösungen. Aber ein Gedankenansatz hat weiter geholfen. Der Code funktionierte natürlich nicht, aber die Grundidee war richtig.

5. Versuch

Also, Ausgangssituation ist immer noch ein Array mit den Zeichenfolgen aus der Datei. Dann das Array sortieren lassen (Array.Sort). Dann eine For Next Schleife erstellen die rückwärts durch das Array geht.

For i As Integer = Content.Length - 1 To 1 Step -1
        If String.Equals(Content(i), Content(i - 1)) Then Content(i) = String.Empty
Next

Es wird der Wert an der aktuellen Position mit der vorigen verglichen. Wenn identisch wird der aktuelle Wert gelöscht / auf String.Empty gesetzt. Später wird ein neues Array erstellt und alle Werte die nicht leer sind rein kopiert. Laufzeit: ca. 2 Minuten, da war's schon fertig.

Dieses Grundprinzip kann man garantiert nicht nur mit Strings verwenden. Auch könnte man natürlich noch ein Dictionary erstellen lassen welche Einträge wie oft vorgekommen sind, eine Variable wie viele Einträge insgesamt entfernt wurden, ...

Warum ich das jetzt hier schreibe?

Ganz einfach. Erstens um Anderen zu helfen, aber auch um ganz klar aufzuzeigen dass viele Wege nach Rom führen. Die Erde ist ja 'ne Kugel, irgendwann wird man schon ankommen. Das Sprichwort ist hier wörtlich zu nehmen. Unzählige Entwickler programmieren, haben wohl auch gute Ideen, aber funktioniert es erst mal dann... tja... funktioniert ja. Auf Performance wird heutzutage gar nicht mehr geachtet.

Leute, achtet mal wieder auf Performance und klatscht nicht blind irgendwas zusammen! Und damit meine ich bei Weitem nicht nur Hobby-Programmierer sondern auch große, namenhafte Firmen! Klar, Optimierung kostet Zeit und somit auch Geld, aber die Benutzer wird es freuen.

Ich schließe mal mit dem Satz ab:

"Qualität ist, wenn der Kunde zurück kommt, nicht das Produkt!"

Edit: Ach ja, das Projekt hat sich gelohnt. Von 187 MB runter auf 145 MB ;)


Systemsteuerung

Wer hätte das gedacht...

Obwohl ich schon gefühlte drölfzigtausendmal Windows installiert habe, das wusste ich noch nicht.

Es ist ja immer die Ersteinrichtung und ggf. später noch die Wartung des Systems. Ich vermute mal jeder war schon mal in der Systemsteuerung. Seit Vista (oder war es XP?) ist diese ja gruppiert. Gut, kann man ändern wenn man die Ansicht auf "Kleine Symbole" umstellt. Trotzdem...

Aber es gibt eine versteckte 2. Systemsteuerung. Der weg diese frei zu schalten ist mir aber neu gewesen. Befehle wie "regedit.exe", "gpedit.msc", ... sind wohl den meisten bekannt. Hier ist es etwas anders.

Erstellt einfach einen neuen Ordner auf dem Desktop (oder wo anders, tut nichts zur Sache) und nennt ihn "Systemsteuerung2.{ED7BA470-8E54-465E-825C-99712043E01C}". Das was vor dem . steht ist frei wählbar, der Rest ist wichtig. Das Symbol ändert sich und wenn ihr per Doppelklick in den "Ordner" gehen wollt öffnet sich die 2. Systemsteuerung.

Das war's schon. Ganz einfach, wenn man es weiß.

Via:


Fast TraceRoute Header

Beschreibung

Ich kürze das Ganze hier etwas ab: Der normale PC Anwender braucht es nicht. Wer aber weiß was die „tracert.exe“ macht, der schaut sich einfach das Video an.

Wer es nicht weiß aber trotzdem neugierig ist darf das natürlich auch ;)

p.s.: Ja, ich hole mir ein besseres Mikrofon ;)

Systemanforderungen

  • Windows 2000 oder neuer
  • Microsoft .Net Framework 2.0 oder neuer (ab XP im Betriebssystem integriert)

Mittels dem Mono Framework sollte die Anwendung auch unter ReactOS, Linux und MacOS laufen, dies ist aber als experimentell zu sehen.

Lizenz

  • Die Nutzung der Anwendung ist frei für private und kommerzielle Zwecke – solange kein Geld hiermit verdient wird.
  • Die Bearbeitung ist untersagt (z. B. das Ändern des Copyrights). Dies schließt auch „Installer“ oder „Downloader” ein die dem Benutzer andere Software anbieten. Siehe Punkt 1.
  • Die Nutzung des Quelltextes unterliegt diesen Richtlinien: http://source.tightdev.net/License.aspx

Download

Binary: FTraceRt_20170305.zip (71,58 kb)
Source: http://source.tightdev.net/Project.aspx?p=FastTraceRt

Nutzung:

Einfach entpacken und in einem Konsolenfenster (cmd oder PS) mit der IP Adresse oder Hostnamen als Argument starten. Es ist keine Installation notwendig.

ScreenCast

 


NetScan Logo

Beschreibung

NetScan ist ein Tool um ihr Heimnetzwerk zu scannen. Vielleicht kennen Sie das, aus irgendeinem Grund brauchen Sie die IP Adresse von einem Gerät was bei Ihnen im Netzwerk ist. Diese Adressen werden normalerweise automatisch von Ihrem Router vergeben. Möchten Sie jetzt z. B. ein Gerät sperren brauchen Sie die IP Adresse.

Dieses kleine Tool braucht nur gestartet zu werden und scannt automatisch alle Netzwerke durch mit denen Ihr Computer verbunden ist und listet die gefundenen Geräte auf, incl. deren IP und MAC Adresse.

Das Ganze können Sie auch unten in meinem ScreenCast in Aktion sehen. Es ist mein erster öffentlicher ScreenCast, also nicht gleich zerfleischen ^^

p.s.: Ja, ich hole mir ein besseres Mikrofon ;)

Systemanforderungen

  • Windows 2000 oder neuer
  • Microsoft .Net Framework 2.0 oder neuer (ab XP im Betriebssystem integriert)

Mittels dem Mono Framework sollte die Anwendung auch unter ReactOS, Linux und MacOS laufen, dies ist aber als experimentell zu sehen.

Lizenz

  • Die Nutzung der Anwendung ist frei für private und kommerzielle Zwecke – solange kein Geld hiermit verdient wird.
  • Die Bearbeitung ist untersagt (z. B. das Ändern des Copyrights). Dies schließt auch „Installer“ oder „Downloader” ein die dem Benutzer andere Software anbieten. Siehe Punkt 1.
  • Die Nutzung des Quelltextes unterliegt diesen Richtlinien: http://source.tightdev.net/License.aspx

Download

Binary: NetScan_2.1.zip (147,16 kb)
Source: http://source.tightdev.net/Project.aspx?p=NetScan

Nutzung:

Einfach entpacken und starten. Es ist keine Installation notwendig.

ScreenCast