Linux-Zeilenumbrüche in Textdateien auf Windows-Format ändern

Ich erstelle unter Linux einige Logfiles, die ich auch gerne unter Windows anzeigen lassen würde. Der Editor meiner Wahl (PSPad) hat damit zwar kein Problem, aber der Standard-Texteditor notepad.exe, den "normale" Benutzer verwenden, leider schon: Zeilenumbrüche werden als kleine Kästchen dargestellt und verunstalten den Text.

Mit sed oder awk kann man die Linux-Zeilenumbrüche (\n) aber recht einfach in Windows-Zeilenumbrüche (\r\n) umwandeln:

sed 's/$/\r/' linux.txt > windows.txt
awk 'sub("$", "\r")' linux.txt > windows.txt
Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Mit PHP Werte per POST an eine Website übergeben (z.B. Benutzerlogin)

Heute hatte ich den Wunsch, die Inhalte eines kleinen Forums als RSS-Feed anzubieten. Die Umwandlung der Daten in RSS ging mittels Regular Expressions recht einfach, jedoch liegen die Seiten des Forums hinter einer Login-Seite, die Benutzernamen und Passwort in einem HTML-Formular abfragt. Danach wird ein Cookie gesetzt und die Forumsseiten sind zugänglich. Wie kann ich diesen Login-Vorgang nun mit PHP in einem Script durchführen, dass dann per Cronjob automatisch aufgerufen wird?

Eigentlich recht einfach mittels curl. Zunächst gilt es, die Packages zu installieren:

apt-get install curl php5-curl

Danach sollte das folgende Script laufen und die Forenseiten jeweils als HTML-Datei abspeichern:

  1. // die Foren werden über eine einheitliche URL aufgerufen,
  2. // die lediglich den Parameter ID bekommt
  3. $url = "http://adresse.des.forums/forum.php?id=";
  4. // die Foren sollen als HTML-Datei abgelegt werden,
  5. // um später geparst zu werden
  6. $ids = array(
  7.          "123" => "Forum123.htm",
  8.          "234" => "NochEinForum.htm"
  9. );
  10. $curl = curl_init();
  11. curl_setopt($curl, CURLOPT_HEADER, 0);
  12. curl_setopt($curl, CURLOPT_POST, true);
  13. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  14. curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  15. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  16. // diese Datei wird zum Speichern des Cookies verwendet
  17. curl_setopt($curl, CURLOPT_COOKIEFILE, "cookiefile");
  18. curl_setopt($curl, CURLOPT_COOKIEJAR, "cookiefile");
  19. // der Aufruf der Login-Seite
  20. curl_setopt($curl, CURLOPT_URL, "http://adresse.des.forums/login.php");
  21. // hier müssen die Benutzerdaten eingetragen werden
  22. curl_setopt($curl, CURLOPT_POSTFIELDS, "login=Benutzername&passwort=geheim");
  23. $xxx = curl_exec($curl);
  24. foreach ($ids as $id=>$name)
  25. {
  26.         echo "Hole " . $name . "...\n";
  27.         // hier wird die URL des Forums zusammengesetzt
  28.         curl_setopt($curl, CURLOPT_URL, $url . $id);
  29.         $xxx = curl_exec($curl);
  30.         file_put_contents("/pfad/zum/script/" . $name, utf8_encode($xxx));
  31. }
  32. curl_close ($curl);

Nun noch den ganzen Kram in die /etc/crontab eingetragen und es kann losgehen (jede dritte Stunde werden die Seiten geladen):

0  */3    * * *   root    /pfad/zum/script/getPages.php
Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Xing

17. January 2008 um 22:14:31 - 60 Wörter - Beitrag Nr. 602

Ich habe es getan: Meine erste Anmeldung in einem Social Network (von einigen Fake-Accounts in den Standard-Communities mal abgesehen ;-) ) Ab heute bin ich Mitglied bei Xing.

Mal schauen, ob das vielgepriesene Networking (mir) tatsächlich irgendetwas bringt. Aber wenn in unserem Studiengang das "Socializing" am Abend quasi schon auf dem Stundenplan steht, muss da ja was dran sein :-)

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Software-Architekturmuster

Sooo... nach den üblichen 5,5 Stunden Zugfahrt (1 davon in einem engen Abteil mit 3 Kindern ;-) ) bin ich heute abend in Nürnberg angekommen, wo ich die nächsten 3 Tage mal wieder meinem Studium widmen werde. Morgen halte ich mit zwei Kommilitonen einen kleinen Vortrag zum Thema Software-Architekturmuster. Im Rahmen eines Praktikums im Fach Software-Technologie war dies eine der gestellten Aufgaben. Ich denke, die Ergebnisse könnten den ein oder anderen interessieren, weshalb ich sie einfach mal hier zum Download anbiete.

Die einzelnen Architekturmuster wurden zwar nicht tiefergehend betrachtet, aber gerade die genannten Quellen dürften interessant sein, da es zu einigen Mustern wirklich wenig Informationen gibt. Unser Dokument bietet auf jeden Fall einen guten Überblick über die folgenden Muster:

  • Layered
  • Subsumption
  • Pipes and Filters
  • Blackboard
  • Distributed
  • Batch Sequential
  • Repository-centric
  • Model View Controller (MVC)
  • Rule-based
  • Frame-based
  • Event-driven
  • Interpreter
  • Disposable

Download

Gesetzt wurde das Dokument natürlich in LaTeX :-) Es erhebt weder den Anspruch vollständig zu sein, noch wurde es unter Berücksichtigung wissenschaftlicher Arbeitsweisen erstellt. Es dient lediglich als Handout zu unserer Präsentation.

Software-Architekturmuster.pdf

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

PowerShell: Webcomic-Download-Script

Ich lese jeden Morgen in der Frühstückspause ein paar Webcomics. Einer meiner Favoriten ist Cyanide and Happiness (oder auch explosm). Leider bin ich erst vor Kurzem auf diese Seite gestoßen und daher habe ich viele Comics nicht gelesen. Wenn ich zwischendurch mal extreme Langeweile habe (Nein, das kommt nicht vor. Ich will mich nur vorm Lernen drücken.), möchte ich dies nun nachholen. Leider hat die Seite manchmal eine recht lange Ladezeit und sooo viel Zeit habe ich ja nun auch nicht :)

Daher habe ich mir mal schnell ein kleines Download-Script für die PowerShell gebastelt, das die Comics für mich herunterlädt, sodass ich sie später lesen kann. Das ganze funktioniert mit Regular Expressions, da bei explosm die Comics (also die tatsächlichen Bilddateien) nicht etwa durchnummeriert sind, sondern frei vergebene Namen haben und in verschiedenen Ordnern liegen.

Das folgende Script öffnet nach Übergabe von 2 Parametern (Start- und Endnummer) die entsprechenden Comics von explosm und versucht, die URL der Bilddatei zu ermitteln. Sollte das nicht klappen, kann es sein, dass es das Comic mit der Nummer nicht gibt (nicht schlimm), oder dass die URL nicht ausgelesen werden konnte (dann muss der RegEx angepasst werden). Bei letzterem Fall wird die Nummer in die Datei errors.txt gespeichert. Ansonsten lädt das Script die Bilddatei herunter und speichert sie mit der Nummer zu Beginn des Dateinamens ab.

explosmdownloadscript.jpg

  1. if ($args.Count -ne 2)
  2. {
  3.     Write-Host "Start and end number needed" -foregroundcolor "red";
  4.     exit;
  5. }
  6. #
  7. $start = $args[0];
  8. $end = $args[1];
  9. #
  10. $path = Split-Path -Parent $MyInvocation.MyCommand.Path;
  11. $pattern = [regex] 'img alt="Cyanide and Happiness, a daily webcomic" src="(?<url>http:\/\/www\.explosm\.net\/db\/files\/(Comics\/)?(?<author>[a-zA-Z0-9]*\/)?(?<file>[\(\) a-zA-Z0-9_-]*\.[a-zA-Z]{3,4}))"';
  12. $errPattern = [regex] "WAHT YOU DOEN";
  13. $clnt = New-Object System.Net.WebClient
  14. #
  15. for ($i = $start; $i -le $end; $i++)
  16. {
  17.     Write-Host "Comic No" $i.ToString("0000");
  18.     $url = "http://www.explosm.net/comics/" + $i + "/";
  19.     $html = Get-Url $url;
  20.     $m = $pattern.Match($html);
  21.     if ($m.Success)
  22.     {
  23.         $pic = $m.Groups['url'].Value;
  24.         $filename = Join-Path $path ($i.ToString("0000") + "_" + $m.Groups['file'].Value);
  25.         Write-Host "  Saving" $i.ToString("0000") -foregroundcolor "green";
  26.         $clnt.DownloadFile($pic, $filename);
  27.     }
  28.     else
  29.     {
  30.         $m = $errPattern.Match($html);
  31.         if ($m.Success)
  32.         {
  33.             Write-Host "  does not exist" -foregroundcolor "yellow";
  34.         }
  35.         else
  36.         {
  37.             Write-Host "  error" -foregroundcolor "red";
  38.             Add-Content "errors.txt" $i;
  39.         }
  40.     }
  41. }
Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Meine 15 Must-Have-Tools für Windows-Nutzer

Ich bereite gerade die Neuinstallation von Windows auf meinem Notebook vor (die Erstinstallation war vor 2 Jahren) und um mal eine Übersicht über die verschiedenen nützlichen Tools zu bekommen, die ich tagtäglich so nutze, habe ich mir in meinem Wiki eine Liste aller Programme angelegt, die ich bei einer Windows-Installation gleich mitinstalliere.

Meine Top 15 sind die folgenden Progamme (in dieser Reihenfolge). Natürlich sind alle kostenlos bzw. teilweise sogar Open Source.

  1. ZoneAlarm
    Das erste Programm, das nach Windows installiert wird, sollte eine Firewall sein :-) ZoneAlarm setze ich nun schon seit vielen Jahren ein und ich habe bislang auch keine Ambitionen sie abzulösen.
  2. AntiVir
    Als zweites ist wohl ein Virenscanner ratsam. AntiVir hat sehr schnelle Updatezeiten was die Virendefinitionen angeht und schneidet in Vergleichstest meist sehr gut ab.
  3. 7Zip
    Irgendein Entpacker muss ja sein. Früher habe ich mal FilZip verwendet, doch inzwischen bin ich bei 7Zip gelandet.
  4. PSPad
    DAS Schweizer Taschenmesser für mich! Gibt es etwas, das dieser Texteditor nicht kann bzw. das nicht über Plugins nachgerüstet werden kann?
  5. Firefox
    Muss ich dazu wirklich was sagen? Ok: WebDeveloper Toolbar, DOM Inspector, MouseGestures, FireBug, HTML Validator etc. Mehr gibt es hier: 10 reasons&questions why my firefox is so much better than your IE
  6. Thunderbird
    Analog zu Punkt 5 ;-)
  7. VLC Media Player
    Der beste Ersatz für den Media Player. Spielt DVDs, Streaming-Videos etc. und kann letztere sogar abspeichern.
  8. Foxit Reader
    DIE Alternative zum Adobe Reader. Einmal installiert, will man nie wieder zurück zum schwerfälligen, Feature-armen großen Bruder.
  9. TortoiseSVN
    Subversion ist der de facto Standard für die Versionsverwaltung und TortoiseSVN der beste Windows-Client. Integriert sich ins Windows-Kontextmenü. Einfacher geht's nicht.
  10. PuTTy
    Auch Windows-Nutzer wie ich benötigen ab und an mal Zugriff auf Linux-Server. PuTTy ist mein Mittel der Wahl, wenn es um SSH-Verbindungen geht
  11. FileZilla
    Auch ein FTP-Programm sollte nicht fehlen. FileZilla hat viele Funktionen und wird ständig weiterentwickelt (wenn man mal von den häufigen Updates in letzter Zeit ausgeht ;-))
  12. GNU Utilities und gVim
    Da ich insgeheim eigentlich Linux-Liebhaber bin, installiere ich mir mit den GNU Utilities und gVim gleich die wichtigsten Linux-Befehle unter Windows. Wie schmerzlich vermisse ich sonst tail, grep, less und Konsorten (auch wenn die PowerShell schon ein Schritt in die richtige Richtung ist).
  13. Azureus
    Ein schicker und funktionsreicher BitTorrent-Client gehört zur Standardausrüstung eines Windows-PCs. Gerade wenn man häufiger mal Debian-Images und Filme downloaden muss ;-)
  14. Sysinternals Suite
    Wer diese Tools, nicht installiert ist selbst schuld! So ziemlich alle wichtigen Sysinternals-Tools sind hier vereint. Seien es handle, die pstools oder autoruns.
  15. PDFCreator
    Zuletzt noch das Werkzeug meiner Wahl zum Erstellen von PDF-Dateien. Früher habe ich mal FreePDF verwendet, aber der PDFCreator ist ein wenig ausgereifter.

Hat noch jemand Ergänzungen? Die Liste im Wiki ist noch ein wenig länger, aber ich wollte es nicht übertreiben ;-)

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Lost Season 4

12. January 2008 um 20:32:16 - 301 Wörter - Beitrag Nr. 595

Bald ist es soweit: Lost Staffel 4 kommt!

Passend dazu gibt es eine lustige Zusammenfassung des bisherigen Geschehens. Die Länge des Videos ist 8:15 Minuten. Na, klingelt's? ;) Lost in 8:15 Minuten. Und einen Trailer zur neuen Staffel gibt es auch schon seit Längerem: Lost. Season 4. Trailer. Extra lang.

Heroes geht auch bald (Februar) weiter nach der mit 11 Folgen mehr als kurzen zweiten Staffel. Einen Trailer gibt es hier: Heroes - Villains Trailer

Und schon ab Montag kommen endlich die neuen Folgen von Prison Break! Ist ja auch ein Skandal, dass die nach nur 8 Folgen der dritten Staffel eine Pause gemacht haben. Tja, der Autorenstreik wirkt sich auch auf mein Leben aus ;-)

Wie gut, dass ich in der Zwischenzeit mit Columbo eine gute Alternative gefunden habe. Die Originalstimme von Peter Falk gefällt mir inzwischen richtig gut und die Serie ist einfach zeitlos... Ich habe zwar sehr viele Folgen bereits auf deutsch gesehen (Wann kamen die nochmal? Dienstags abends auf RTL?), aber bei den 12 Staffeln sind doch noch einige Folgen dabei, die ich nicht kannte (z.B. die komplette dritte Staffel und viele Folgen der zweiten und fünften Staffel). Kaum zu glauben, dass die Filme teilweise schon über 35 Jahre alt sind. Und wie man hier lesen kann, soll 2008 Columbos 70ster und letzter Fall veröffentlicht werden: Inspektor Columbo ist 80.

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

PowerShell: Zugriff auf MySQL-Datenbank

Mit der PowerShell auf eine MySQL-Datenbank zuzugreifen ist eigentlich recht einfach, da vorhandene .NET-Klassen in der PowerShell verwendet werden können. Man benötigt nur die entsprechenden Klassen für den MySQL-Zugriff. Das ist in meinem Fall der MySQL Connector/Net 5.1. Die früheren Versionen funktionieren mit meiner Datenbank nicht (MySQL-Version 5.0):

Error connecting to the server: Unable to connect to any of the specified MySQL hosts.

Der Download ist zwar eine MSI-Datei, man benötigt aber lediglich die MySql.Data.dll aus dem Verzeichnis Binaries\.NET 2.0, nachdem die Installation abgeschlossen ist. Diese muss im selben Verzeichnis liegen, wie das folgende Script. Alternativ kann man auch in Zeile 5 einen konstanten Pfad angeben.

  1. # the connection string used to connect to the database
  2. $connString = "Server=localhost;Uid=benutzer;Pwd=password";
  3. #
  4. # get the script's execution path
  5. $myPath = Split-Path -Parent $MyInvocation.MyCommand.Path;
  6. #
  7. # load MySQL driver and query database
  8. [void][system.reflection.Assembly]::LoadFrom($myPath + "\MySQL.Data.dll");
  9. $conn = New-Object MySql.Data.MySqlClient.MySqlConnection;
  10. $conn.ConnectionString = $connString;
  11. $conn.Open();
  12. $command = New-Object MySql.Data.MySqlClient.MySqlCommand;
  13. $command.Connection = $conn;
  14. $command.CommandText = "SELECT * FROM table";
  15. $reader = $command.ExecuteReader();
  16. while($reader.Read())
  17. {
  18.   write-host $reader.GetString(0);
  19. }
Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Serverumzug (fast) abgeschlossen

Ich bin jetzt mit fast allen Websites (inkl. diesem Blog) auf meinen neuen Server (stefan-macke.com) umgezogen und muss sagen, dass die Performance deutlich zugelegt hat. Na gut, vorher hatte ich 256MB Arbeitsspeicher und nun 2GB. Da muss sich ja was tun :-)

Jetzt fehlt nur noch die Übertragung meiner übrigen Domains auf Hetzner und dann ist alles abgeschlossen. Interessant wird noch die Übertragung des Mailservers. Obwohl auf dem neuen Server schon Postfix läuft, habe ich durch die Verzögerung aufgrund des KK-Vorgangs sicherlich einige Tage Ausfall, bis mein neuer Server als MX im DNS eingetragen ist :-(

Wordpress hat beim Übertragen gleich mal ein wenig gezickt, da es auf einmal nur noch englische Datumsangaben ausgab und auch das Backend in Englisch war. Nicht, dass mich das stören würde, aber es sieht doch unschön aus, wenn alles andere in Deutsch ist... Die Lösung für das Problem fand ich allerdings recht schnell hier: Wordpress - keine deutsche Sprache mehr?. Und jetzt läuft alles wunderbar.

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Mein neuer Rootserver

Zu Weihnachten muss man sich auch mal was gönnen, dachte ich mir. Und so habe ich mir vorletzte Woche einen Rootserver DS3000 von Hetzner bestellt. Bereits am folgenden Tag war der Server, am selben sogar schon der Zugang zum Webinterface für die Domainverwaltung freigeschaltet.

Nicht, dass ich mit meinem bisherigen vServer unzufrieden wäre, aber in letzter Zeit häuften sich die Ausfälle aufgrund von Speichermangel und die Reaktionszeiten waren auch nicht mehr ganz zufriedenstellend. Naja, die Ansprüche wachsen halt ;)

Meine Domain stefan-macke.com ist die erste, die bereits umgezogen ist. Dort werde ich in Kürze dieses Blog und alle übrigen Seiten neu aufsetzen. Es kann also in den kommenden Tagen ab und an zu Ausfällen dieser Seite kommen. Bis alle .de-Domains (inkl. dieser) endgültig übertragen sind, kann es aber noch ein Weilchen dauern.

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description