Archiv Oktober 2013

Freitag, 25. Oktober 2013

Graustufenbilder mit ImageMagick in Schwarz-Weiss-Bilder umwandeln

Kürzlich hat Stephanie ihre Cumulus-Karte verlegt. Damit sie weiterhin bei jedem Einkauf eifrig Punkte sammeln kann, habe ich ihr meinen Barcode als Bild eingescannt und wollte diesen ausdrucken, um ihn auf die Rückseite der Supercard (Frevel!) aufzukleben.

Damit der Barcode-Leser der Kasse den Scan auch möglichst einwandfrei lesen kann, wollte ich den Scan aber von Farbe resp. Graustufen in ein monochromes Bild umwandeln. Mittels ImageMagicks convert geht das ganz simpel:

$ convert "Cumulus Barcode.png" -colorspace gray -auto-level -threshold 50% "Cumulus Barcode bw.png"

Tags: , , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 24. Oktober 2013

Mit PowerShell Dateien finden, die eine bestimmte Zeichenkette angehängt haben

Folgendes PowerShell-Script zeigt mir in einem Verzeichnis mit unzähligen PDF-Dateien diejenigen an, für welche es eine Version mit %NAMEN%.pdf sowie %NAMEN%-native.pdf gibt:

$duplicateIndicator = "-native"

function Get-ScriptDirectory {
  $Invocation = (Get-Variable MyInvocation -Scope 1).Value
  Split-Path $Invocation.MyCommand.Path
}

$scriptDir = Get-ScriptDirectory

$pattern = "*" + $duplicateIndicator + ".pdf"
Write-Host "Looking for $pattern ..."
Write-Host ""

$counter = 0
Dir $pattern | ForEach-Object {
	$counter++
	
	$duplicate = $_.name
	$original = $duplicate -replace $duplicateIndicator, ""
	$originalPath = $scriptDir + '\' + $original
	
	#Write-Host $duplicate
	#Write-Host $original
	
	#Write-Host "Looking for original file $originalPath"
	$fileExists = Test-Path $originalPath
	
	If ($fileExists) {
		Write-Host "Found duplicate for "
		Write-Host "    $original"
		Write-Host ""
	}
	
	#Dir $original
}

Write-Host "Scanned $counter file(s)."
Write-Host "Done."
Write-Host ""

Tags: , , , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 24. Oktober 2013

biber findet die Datenquelle nicht mehr

Kürzlich war ich auf einem Windows-Laptop mit folgendem Problem konfrontiert:

data source C:\Users\mario\AppData\Local\Temp\par-476f6e7a616c6f\cache-63038a22a6dc2bcfc65352f2f3a3448ce3f3ab68\recode_data.xml not found in.

Bei biber handelt es sich nicht um das Tier, sondern um ein Hilfstool aus dem LaTeX-Universum zur Verarbeitung von BibTeX Bibliographiedatenbanken.

Zuerst machte ich Microsoft und die kürzlich von mir aktivierten Offline-Dateien verantwortlich. Schlussendlich musste ich aber realisieren, dass das Problem rein von biber selbst zu stammen scheint. Nachdem ich den Ordner C:\Users\mario\AppData\Local\Temp\par-476f6e7a616c6f\ gelöscht hatte, lief auch biber wieder ohne Probleme durch.

Via: biber first aid for “data source not found”

Tags: , , , ,
Labels: Wissenschaft

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 23. Oktober 2013

Mit Scripts generierte ICS-Dateien mit dem korrekten Zeichensatz in Google Calendar anzeigen

Folgender kleiner Text (hier: in einem PHP-Script) hilft:

...
header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename="calendar.ics"');
...

Gibt man das Charset nicht explizit an, erscheinen in Google Calendar statt den Sonderzeichen schwarze Rhomben mit einem Fragezeichen: �

Via: Character encoding in external public calendars – Why is Danish UTF-8 character not show correctly?

Tags: , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 23. Oktober 2013

Mehrere Dateien in einem Rutsch mit PowerShell umbenennen

Dir | Rename-Item –NewName { $_.name –replace ".jpg",".jpeg" }

Tags: , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 8. Oktober 2013

Unter Linux eine aktive screen-Session übernehmen

Ab und zu kommt es vor, dass sich mein alter Mac mini in den Ruhemodus versetzt, während ich noch per SSH mit einer screen-Session verbunden bin. Mit folgendem Befehl kann ich die Session nach einem neuen Login mit SSH übernehmen:

$ screen -d -r

-d bedeutet „detach“, -r bedeutet „resume“.

Tags: ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Montag, 7. Oktober 2013

Mit Google Docs Spreadsheet eine Variable von einer Internet-Seite abrufen und als Zellwert verwenden

In Google Docs Spreadsheet ist es äusserst einfach, eigene Zellfunktionen zu definieren und diese danach mit einer JavaScript-basierten Funktion zu hinterlegen.

Ich habe mir diese Funktionalität zu Nutzen gemacht, um via meinen Linux-Server die aktuellen Gold- und Silberpreise in Schweizer Franken von einer Web-Site auszulesen und als „rohe“ Zahl an eine Zelle eines Google Docs Spreadsheet weiterzugeben. Basierend auf diesem Wert werden danach weitere Berechnungen in anderen Zellen angestossen.

Zuerst habe ich hierzu ein Spreadsheet eröffnet und sogleich unter Tools > Script editor… ein Script namens „Code.gs“ erstellt. Dort habe ich folgende (hier anonymisierte) JavaScript-Funktion abgelegt:

function getQuote(item) {
  if(item.length < 3) {
    return '#ERROR: parameter too short';
  }
  
  var response = UrlFetchApp.fetch("http://site.tld/index.php?item=" + item + "&raw=true");
  
  quoteRaw = response.getContentText();
  quote = parseFloat(quoteRaw).toFixed(2);
  
  return quote;
}

Anschliessend habe ich in der Zelle A1 den Wert „Gold“ hinterlegt. In Zelle A2 habe ich notiert „=getQuote(A1)“. Sobald man die Zelle A2 verlässt, versucht Google, die URL aufzurufen und die Antwort in eine Zahl umzuwandeln. Dies setzt natürlich voraus, dass das PHP-Script auf dem entfernten keinen HTML-Code zurückgibt, sondern Plaintext. Sobald Google die Funktion getQuote() aufruft, steht in der Zelle für ein bis zwei Sekunden „Thinking…“, während Google im Hintergrund meinen Server kontaktiert und die hinterlegte URL aufruft. Sobald der Wert empfangen wurde, wird dieser in der Zelle angezeigt.

Nebenbemerkung: Ja, den Umweg über meinen eigenen Server könnte ich mir selbstverständlich sparen. Ich bin mir es aber zu Schade, a) ausgedehntes JavaScript zu programmieren, zumal b) Google keine guten Debug-Werkzeuge im Script-Editor bereitstellt. Stattdessen verlasse ich mich auf PHP, Apache und auf dem Server installierte Linux-Tools mit ihren ausgefeilten Funktionen und einem sauberen Debug Logging.

Tags: , , , , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Montag, 7. Oktober 2013

Apache liefert ungefähr richtige Dateinamen aus

Ungefähr einmal im Jahr konfiguriere ich unter einer Mac OS X-Installation den lokalen Web-Server, um auf dem Gerät Web-Applikationen zu entwickeln. Und bei jedem Mal vergesse ich in der Regel, dass unter Mac OS X das Apache-Modul mod_negotiation installiert ist, welches spätestens bei der Verwendung von mod_rewrite zu komischem Verhalten führt.

Beispiel: Ich rufe im Browser die URL http://localhost/article/132 auf, welche eigentlich mittels mod_rewrite auf index.php umgeleitet werden sollte. Habe ich im DocumentRoot des Web-Servers aber dummerweise ein Script namens article.php rumliegen, wird Apache die Rewrite-Regeln nicht beachten und stattdessen article.php aufrufen.

Unter Mac OS X könnte man nun rabiaterweise einfach das Laden von mod_negotiation verhindern. Leider führt das zu neuen Problemen und Fehlermeldungen, welche ich hier aus Zeitgründen nicht ausführen möchte, weshalb man stattdessen die mod_negotiation-Funktionalität in der VirtualHost-Konfiguration für das DocumentRoot und alle darunterliegenden Verzeichnisse deaktiviert:

...
Options -Multiviews
...

Und gut is …

Tags: , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Montag, 7. Oktober 2013

Ein PHP-Script so geschwätzig wie möglich machen

<?php
	ini_set('error_reporting',E_ALL);
	ini_set('display_errors',1);

	...
?>

Tags: , , , , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 1. Oktober 2013

Zahlencodes von Samsonite Aeris Spinner-Koffern ändern

Tags: , ,
Labels: Reisen

Keine Kommentare | neuen Kommentar verfassen