Author Archive

Mit Powershell und Regulären Ausdrücken Dateien umbenennen.

Ausgehend von Powershell und Reguläre Ausdrücke hier eine Erweiterung des Skripts dahingehend, dass der alte Pfad zerlegt wird und mit dem sauberen Dateinamen wieder zusammengebaut wird.

ls -recurse |  % {
if ($_.name -match "\d{8}_\d{8}.+") {
    $full  =  $_.fullname 
    $split =  $_.fullname.split("\") 
    $last  = $split[$split.length-1]
    $newpath = $split[0]
    foreach ($number in 1..($split.length-2) ) { $newpath += "\" + $split[$number] }
        $newpath += "\" + $last.substring(9,$last.length-9)
    }
    "mv"+ "`t" + $full + "`t" + $newpath
}

Geht sogar noch deutlich einfacher, wenn man einfach den Dateinamen im vollen Pfad sucht und durch die saubere Version ersetzt:

ls -recurse |  % {
if ($_.name -match "\d{8}_\d{8}.+") {
    rni $_.fullname $_.name.replace($_.name,$_.name.substring(9,$_.name.length-9))
}}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Powershell und Reguläre Ausdrücke

Folgendes Skript findet alle Dateien, die ein Datum fälschlicherweise doppelt im Dateinamen haben.

ls -recurse |  % {if ($_.name -match "\d{8}_\d{8}-.+") {$_.fullname}}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

LaTeX: Zwei Bilder nebeneinander

Für das Setzen von zwei Bildern nebeneinander, die nur eine Unterschrift haben, gibt es das subfig-Paket von Steven Douglas Cochran. In der Anleitung gibt es auch ein schönes Beispiel, das mit LaTeX-Bordmitteln auskommt und bei dem jedes Bild seine eigene Unterschrift hat:

\begin{figure}%
\centering
\parbox{0.45\textwidth}{%
\centering
\includegraphics[width=0.45\textwidth]{name1.png}\caption{First.}\label{fig:bild1}}%
\qquad
\begin{minipage}{0.45\textwidth}%
\centering
   \includegraphics[width=\textwidth]{name1.png}\caption{Second.}\label{fig:bild2}%
\end{minipage}%
\end{figure}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Excel-Automation mit Powershell

Hier mal ein kurzes Beispiel für COM-Automation mit Excel.

$excel = New-object -comobject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
$workbook = $excel.Workbooks.Add()
$sheet = $workbook.Worksheets.Item(1)
$sheet.Name = 'Hallo Welt'
$workbook.SaveAs('C:\hallowelt.xlsx')
$workbook.Close()
$excel.Quit()

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Programmieren für Einsteiger mit Microsoft Small Basic

Von Microsoft Small Basic gibt es jetzt die siebente Community Preview. Bei Small Basic handelt es um eine Programmiersprache für Einsteiger, die mit wenigen Schlüsselwörtern auskommt. Microsoft selbst schreibt auf http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx:

Microsoft Small Basic aims to make computer programming accessible to beginners.

Ein PDF-Tutorial gibt es auch: http://download.microsoft.com/download/9/0/6/90616372-C4BF-4628-BC82-BD709635220D/Introducing%20Small%20Basic.pdf.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Google Flu Trends

Mit Google Flu Trends (http://www.google.org/flutrends/intl/de/de/) gibt es ein schönes Beispiel, zuwas die Auswertung von Suchanfragen nützlich sein kann.

Zitat von der Webseite:

Woche für Woche suchen Millionen von Nutzern auf der ganzen Welt online nach Informationen zum Thema Gesundheit. Erwartungsgemäß gibt es während der Grippezeit häufiger Suchanfragen zur Grippe und während des Pollenflugs mehr allergiebezogene Anfragen sowie im Sommer mehr Anfragen zum Thema Sonnenbrand. Sie können derartige Suchvolumenmuster mit Google Insights for Search genauer analysieren. Aber können Trends bei Suchanfragen tatsächlich als Basis für akkurate und zuverlässige Modelle von Phänomenen, die im echten Leben vorkommen, dienen?

Unsere Beobachtungen haben gezeigt, dass es einen engen Zusammenhang zwischen der Anzahl der Suchanfragen zum Thema Grippe und der Anzahl der Personen mit Grippesymptomen gibt. Natürlich ist nicht jede Person, die nach dem Begriff „Grippe“ sucht, tatsächlich krank, aber wenn man alle grippebezogenen Suchanfragen zusammenfasst, ergibt sich ein Muster. Wir haben die Anzahl der Suchanfragen mit den Ergebnissen traditioneller Grippeüberwachungssystemen verglichen und herausgefunden, dass bestimmte Suchanfragen besonders während der Grippezeit gestellt werden. Durch die Zählung dieser Suchanfragen können wir schätzen, wie häufig die Grippe in bestimmten Ländern und Regionen weltweit auftritt.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Skriptsprachen zur Windows-Automation

Neben Powershell gibt es noch eine Reihe anderer Skriptsprachen, mit denen sich immer wiederkehrende Aufgaben unter Windows bequemer erledigen lassen:

  • AutoIt
  • AutoHotkey, das auch von der c’t Toolsammlung ac’tivAid genutzt wird

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

PHPExcel

Habe in einer alten c’t einen Hinweis auf PHPExcel gefunden, eine Bibliothek, die dynamisch Excel Dokumente erzeugen kann.

Hier mal ein „Hello World!“ Beispiel von der Webseite http://phpexcel.codeplex.com:

<?php
/** Error reporting */
error_reporting(E_ALL);
 
/** Include path **/
ini_set('include_path', ini_get('include_path').';../Classes/');
 
/** PHPExcel */
include 'PHPExcel.php';
 
/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.php';
 
// Create new PHPExcel object
echo date('H:i:s') . " Create new PHPExcel object\n";
$objPHPExcel = new PHPExcel();
 
// Set properties
echo date('H:i:s') . " Set properties\n";
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
 
 
// Add some data
echo date('H:i:s') . " Add some data\n";
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!');
 
// Rename sheet
echo date('H:i:s') . " Rename sheet\n";
$objPHPExcel->getActiveSheet()->setTitle('Simple');
 
 
// Save Excel 2007 file
echo date('H:i:s') . " Write to Excel2007 format\n";
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
 
// Echo done
echo date('H:i:s') . " Done writing file.\r\n";

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Orbit

Habe heute ein nettes Flashgame für zwischendurch gefunden: Orbit (http://www.firstscience.com/home/games/orbit.swf. Ziel ist es, den Kometen so zu platzieren, dass er die Zeit übersteht und nicht vorher in einen Planeten gezogen wird.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Pseudo-Adressen generieren

Vor einiger Zeit habe ich mal ein paar Zeilen Java zusammengeschustert, um Pseudo-Adressen zu generieren. Hier der Quellcode, der weder sonderlich kompakt noch schön ist, seinen Zweck aber erfüllt:

/**
 *
 * @author Uwe Ziegenhagen, www.uweziegenhagen.de
 */
 
import java.util.*;
 
public class Addressmaker {
    static java.text.DecimalFormat format =  new java.text.DecimalFormat("00000");
    static String[] vornamen = new String[]{"Uwe","Andreas","Max","Moritz","Susi","Steffi","Janine","Tim","Tom","Marko","Hans","Thomas","Maria",
    "Bernd","Mandy","Ben","Thorsten","Sabine","Isabell","Doreen", "Nicole","Sabrina","Jenny","Klaus","Heinz","Sabrina"};
 
    static String[] nachnamen = new String[]{"Meier","Meyer","Mayer","Müller","Schulze","Lehmann",
    "Köster","Schmidt","Schuster","Wagner","Schmied","Küster","Möller"};
 
    static String[] initial = new String[]{" "," "," "," A. "," B. "," C. "," D. "," E. "," "," "};
    static String[] adressinitial = new String[]{"","a","b","c","d","","","","","",""};
    static String[] adresszusatz = new String[]{"bei Schmidt","c/o Schmidt","p.Adr. Max Mustermann"};
 
    static String[] ortsprefix = new String[]{"Wald","Wiesen","Groß","Klein","Mittel","Ober","Ham","Nieder","Alt","Alten",
    "Königs","Langen","Moos","Mühl","Morgen","Schön","Tannen","Vogel","Wolfen","Kirch","Bären","Heide","Hohen","Breiten","Ehren","Eber","Fichten","Grün"};
 
    static String[] ortssuffix = new String[]{"heim","dorf","hausen","burg","ow","au","furt","stein","aue","finow","tal","thal"};
    static String[] strassenprefix = new String[]{"Wald","Wiesen","Amsel","Drossel","Finken","Wasser","Sonnen","Schiller","Goethe","Nachtigall","Spatzen"};
    static String[] strassensuffix = new String[]{"straße","weg","gasse","allee","platz"};
    static String[] domains = new String[]{".info",".de",".com",".info",".ac.uk",".ru",".ac.jp"};
 
    static String vname = "";
    static String nname = ""; 
 
    public static void main(String[] args) {
        Random generator = new Random(new Date().getTime());
 
        int wieoft = 100;
        boolean email = true;
 
        for (int i=0;i<wieoft;i++){
            vname = vornamen[generator.nextInt(vornamen.length)];
            nname = nachnamen[generator.nextInt(nachnamen.length)];
 
        System.out.print(vname + initial[generator.nextInt(initial.length)] +  
                 nname + "\n");
 
        if (generator.nextInt(100)<3){
                    System.out.println(adresszusatz[generator.nextInt(adresszusatz.length)]);   
 
        }        
 
        System.out.print(strassenprefix[generator.nextInt(strassenprefix.length)] + 
                strassensuffix[generator.nextInt(strassensuffix.length)]+ " " + generator.nextInt(99) + adressinitial[generator.nextInt(adressinitial.length)] +  "\n");
 
        System.out.print(format.format(generator.nextInt(99999)) + " " + 
                ortsprefix[generator.nextInt(ortsprefix.length)] + 
                ortssuffix[generator.nextInt(ortssuffix.length)]+"\n");
 
        if (email==true){
            vname = vname.replaceAll("ö", "oe");
            vname = vname.replaceAll("ä", "ae");
            vname = vname.replaceAll("ü", "ue");
            nname = nname.replaceAll("ö", "oe");
            nname = nname.replaceAll("ä", "ae");
            nname = nname.replaceAll("ü", "ue");
            System.out.println(vname.toLowerCase() + "." + nname.toLowerCase() + "@" + ortssuffix[generator.nextInt(ortssuffix.length)] + domains[generator.nextInt(domains.length)]);
        }
 
        System.out.print("\n");
        }
 
    }
 
}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website