Archive for category: entwicklung


Ordner via AppleScript synchronisieren über md5 Prüfsumme

5 October, 2008 (03:49) | AppleScript Schnipsel, applescript, entwicklung | By: hubi

Hatte mal wieder keine Lust ins Bett zu gehen und dabei ist dann das hier heraus gekommen:

(**

Installation:

   1. Wenn Du es das erste mal startest, erzeugt es einen Ordner mit dem Namen "SyncFolders_Script_aliases" auf deinem Start-Volumen und öffnet diesen.

   2. In diesen Ordner ziehst Du zunächst Aliase der Quell-Ordner (ja Du kannst mehrere Ordner in einen Zielordner synchronisieren).

   3. Diese Ordner-Alias bennenst Du um in SOURCE.. irgendwas, wichtig ist nur, dass SOURCE am Anfang steht

   4. Dann erstellst Du da noch einen Alias deines Zielordners, den Du DESTINATION irgendwas nennst

Dann nur noch starten und das Skript legt los =)

Wie es funktioniert?:

Die Dateien werden an Hand von md5 Prüfsummen unterschieden. Jede Dateien, deren md5-Prüfsumme mit denen der Dateien im Zielordner nicht übereinstimmt, wird umbenannt, nach dem Schema (+OUT<aktuelles Datum>) und dann kopiert. Sollte es beim Kopieren zu Problemen kommen, wird die Datei wieder "zurück-benannt" und das Skript läuft weiter. Am Ende erscheint in dem Fall aber eine Fehlermeldung.

In dem Skript Ordner wird zudem ein Datei log.txt geführt, in der dann bei jedem Start geschrieben wird, wie viel wohin kopiert wurde und ob es Fehler gegeben hat...

**)

set script_folder to "SyncFolders_Script_aliases"

set copycount to 0

set copiedpaths to ""

set errorpaths to ""

checkup(script_folder)

tell application "Finder"

set alias_folder to folder script_folder of startup disk

set source_aliases to (every alias file of alias_folder whose name starts with "SOURCE")

set destination_alias to (every alias file of alias_folder whose name starts with "DESTINATION")

end tell

set destination_files to md5_list(item 1 of destination_alias)

set source_files to {}

repeat with i from 1 to count of source_aliases

set source_files to source_files & md5_list(item i of source_aliases)

end repeat

-- assume that all sources are new sources

set newsources to source_files

repeat with destination_file in destination_files

set b to md5 of destination_file

repeat with source_file in source_files

if md5 of source_file = b then

--finally only new sources will stay in the newsources list 

set newsources to delete_from_list(source_file, newsources)

end if

end repeat

end repeat

set erroronmove to false

set prestring to "OUT+" & (do shell script "date +%Y%m%d")

repeat with newsource in newsources

set current_file to MacOSPath of newsource

tell application "Finder" to set current_file_name to (name of current_file)

--If the would be files already named "OUT+..:" that are NOT in the destination path 

--these would no be copied 

--if current_file_name does not start with "OUT+" then

set current_file to rename_file(current_file, prestring, current_file_name)

try

tell application "Finder"

set copiedfile to duplicate current_file to (original item of (item 1 of destination_alias)) as alias

set copycount to copycount + 1

set copiedpaths to copiedpaths & (POSIX path of (copiedfile as alias) as text) & return

end tell

on error msg

rename_file(current_file, "", current_file_name)

set errorpaths to errorpaths & (POSIX path of (current_file as alias) as text) & return

set erroronmove to true

end try

--end if

end repeat

--write Logfiles

set msg to "Copied " & copycount & " files at "

do shell script "echo " & quoted form of msg & "|cat>>" & quoted form of (POSIX path of (alias_folder as alias)) & "log.txt"

do shell script "date | cat>>" & quoted form of (POSIX path of (alias_folder as alias)) & "log.txt"

if copiedpaths "" then

do shell script "echo " & quoted form of copiedpaths & "|cat>>" & quoted form of (POSIX path of (alias_folder as alias)) & "log.txt"

end if

if erroronmove = true then

set msg to "Errors with files: "

do shell script "echo " & quoted form of msg & "|cat>>" & quoted form of (POSIX path of (alias_folder as alias)) & "log.txt"

do shell script "echo " & quoted form of errorpaths & "|cat>>" & quoted form of (POSIX path of (alias_folder as alias)) & "log.txt"

display dialog "Some files could not be copied (name already exsist perhaps) and so presstring has been removed from there names again (just in case the prestring is :" & return & prestring giving up after 10

end if

on rename_file(thefile, new_start, thefile_name)

tell application "Finder"

set no_error to false

set counter to 0

try

set name of thefile to new_start & thefile_name

on error

repeat until no_error = true

set counter to counter + 1

try

set name of thefile to new_start & "##" & counter & "##" & thefile_name

set no_error to true

exit repeat

on error

set no_error to false

end try

end repeat

end try

end tell

return thefile

end rename_file

on delete_from_list(item2delete, thelist)

set cleanList to {}

repeat with i from 1 to count thelist

if {thelist's item i} is not in item2delete then set cleanList's end to thelist's item i

end repeat

return cleanList

end delete_from_list

on md5_list(alias_file)

--INPUT: alias files of a folder

--OUTPUT: Record list of all files within this folder (1. Level)

-- each record contains (thepath & md5)

tell application "Finder"

set fileinfos to {}

set a to original item of alias_file

if kind of a (kind of folder 1 of startup disk) then

error "ALERT, ALIAS FILE IS NOT A FOLDER STOPPED!"

else

set thefiles to every file of a

repeat with thefile in thefiles

if name of thefile does not start with "." then

if (POSIX path of (thefile as alias)) does not end with "/" then

set md5_sum to do shell script "md5 -q " & quoted form of POSIX path of (thefile as alias)

set fileinfo to {md5:md5_sum, thepath:(POSIX path of (thefile as alias)), MacOSPath:(thefile as alias)}

set fileinfos to fileinfos & {fileinfo}

end if

end if

end repeat

end if

return fileinfos

end tell

end md5_list

on checkup(script_folder)

set orphan_alias to false

set allok to false

try

tell application "Finder" to set alias_folder to folder script_folder of startup disk

on error

tell application "Finder" to set alias_folder to make new folder at startup disk with properties {name:script_folder}

tell application "Finder" to open alias_folder

tell me to activate

error script_folder & " is empty, please place an ALIAS of each folders you would like to sync into this folder.

All aliases of Source folder you be named \"SOURCE...\" and the Destination Folder should be named \"DESTINATION...\""

end try

tell application "Finder"

if (count of (every alias file of alias_folder)) > 1 then

if (count of (every alias file of alias_folder whose name starts with "SOURCE")) > 0 then

if (count of (every alias file of alias_folder whose name starts with "DESTINATION")) = 1 then

set the_aliases to every alias file of alias_folder

repeat with k in the_aliases

try

set h to original item of k

on error

delete k

set orphan_alias to true

end try

end repeat

if orphan_alias = true then

error "Hm, there is something wrong with the aliases, orphan alias files have been deleted... script stops"

else

set allok to true

end if

end if

end if

end if

end tell

if allok = true then

return allok

else

error "Hm, please check the alias folder, perhaps you have not placed all Aliases in in or maybe they are not name correctly"

end if

end checkup


Textschnippsel automatisch einfügen

4 October, 2008 (01:12) | Softwareschmiede, applescript, entwicklung | By: hubi

Ich schreibe täglich bei der Arbeit immer wieder das gleiche "Hardwaretest i.O." oder "Kunden am nicht erreicht" und das mal im WebBrowser, oder in irgend einer anderen Anwendung. Das kostet Zeit und und Apps die ich kenne, die so etwas über ShortCuts erledigen könnten sind entweder kostenpflichtig oder funktionieren nicht immer so richtig, zumindest nicht
in jeder Anwendung (insbesondere Java-Anwendungen scheinen ein Problem darzustellen).
Nun, AppleScript scheint auch hier ein Lösung parat zu haben und so ist type4me blafasel entstanden.
Damit lassen sich ausgewählte Text-Schnipsel aus einer Text Datei in so gut wie jedem Programm einfügen.


MD5 Prüfsumme schnell überprüfen

5 September, 2008 (04:34) | Softwareschmiede, applescript, entwicklung, tools | By: hubi

Man hat unter Mac OS X md5 direkt im Zugriff über das Terminal. Damit ich aber beim Überprüfen der Prüfsumme nicht immer erst die Datei in das Terminal ziehen muss und dann von Hand vergleiche, habe ich ein kleines AppleScript-Programm geschrieben (Ja, wir war mal wieder langweilig). Man kopiert die korrekte MD5-Prüfsumme einfach in die Zwischenablage, wählt die entsprechende Datei im Finder aus und startet das Skript. Wahlweise kann man die Datei auf das Skript drauf-ziehen.
Wenn man gleich mehrere Datein prüfen möchte, kann man dies auch tuen, für jede erscheint dann ein separater Dialog für die Eingabe der validen Prüfsumme. Je nach Ergebnis erhält man dann eine entsprechende Meldung. Zumindest geht so das Überprüfen der Prüfsummen recht leicht von der Hand und ist so recht unkompliziert möglich.

Noch einfacher haben es FireFox-Nutzer, die können sich einfach ein Plug-In laden, dass den Job erledigt =)

Download MD5_Quick_Check Version 1.0

Downloaded a total of 53 times

md5:7eb9cfc763e5e64f671d15b7957e2c81 ;-)


Killall on Idle

27 August, 2008 (03:57) | OSX, entwicklung, terminal | By: hubi

Diese Terminal-Kommando checkt, ob und wie lange der Rechner inaktiv ist (keine Maus oder Tatstatur-Eingabe) und führt ggf. dann einen Befehl aus... ist recht praktisch, wenn es im Crontab läuft =)
idletime=`ioreg -c IOHIDSystem | perl -ane 'if (/Idle/) {$idle=(pop @F)/1000000000; print $idle,"";last}'|awk '{split ($0,a,".");print a[1]}'`;if [ $idletime -ge 4 ]; then killall VLC; fi &>/dev/null


Automatischer Zeilenumbruch nach x Zeichen in Apple Mail

13 August, 2008 (01:47) | applescript, entwicklung, tools | By: hubi

Sicherlich ein Grund, weshalb in Zeitungen und Magazinen immer der Text in Spalten unterteil ist, ist bestimmt die Lesbarkeit. Es strengt an, "zu lange" Text-Zeilen zu lesen und man verrutscht auch leicht.
Gerade bei längeren Emails verkleinere ich das Fenster, um die Lesbarkeit zu erhöhen, da viele einfach so ohne Zeilenumbrüche die Texte verfassen.

Wenn ich selber Emails schreibe formatiere ich oft den Text am Ende von Hand um, damit ca. alle 80 Buchstaben eine neue Zeile beginnt.

Um das jetzt aber nicht mehr von Hand zu machen, habe ich ein kleines Applescript geschrieben.
Jetzt muss ich nur noch nach dem Verfassen des Textes diesen in die Zwischenablage kopieren, das Skript starten und dies fügt nun automatisch die Zeilenumbrüche ein und kopiert diese Version des Textes wiederum in die Zwischenablage.

Beispiel:

Anwendung:

Download Zeilenumbrüche nach x Zeichen einfügen Version 0.1

Downloaded a total of 56 times

Code:


try
	display dialog "Umbruch nach ca. wieviel Zeichen?:" default answer "55"
	set line_char_count to (text returned of the result) as integer
	set finaltext to ""
	set thetext to the clipboard

	repeat with theline in every paragraph of thetext
		set charcount to count of every character of (theline as text)
		if charcount > line_char_count then
			set thepointer to 0
			set ret_line to ""
			repeat with i from 1 to charcount
				set thepointer to thepointer + 1
				if thepointer > line_char_count and (character i of theline) as text = " " then
					set thepointer to 0
					set ret_line to ret_line & return
				else if thepointer = 1 and (character i of theline) as text = " " then
				else
					set ret_line to ret_line & (character i of theline)

				end if
			end repeat
		else
			set ret_line to theline
		end if

		repeat with i from 1 to (count of every character of (ret_line as text))
			if (character i of ret_line) as text ≠ " " then
				set ret_line to characters i through -1 of ret_line
				exit repeat
			end if
		end repeat

		set finaltext to finaltext & ret_line & return
	end repeat
	set the clipboard to finaltext
on error msg
	error msg
end try

Doppelseitige PDFs erzeugen

17 May, 2008 (01:01) | Softwareschmiede, entwicklung, pdf, software, terminal | By: hubi

Vorangegangen ist dem ein Posting auf Apfeltalk, für das ich diese Lösung geschrieben habe:

Ich hätte da eine Lösung die über ein paar Terminal-Aufrufe funktioniert.
Zunächst bräuchtest Du aber xpdf, welches Du hier als Mac-Version laden könntest.
Und psnup... das habe ich über ein latex-Installation bekommen.

Aber ich habe hier mal etwas nettes geschrieben.

Download PDF_Doppelseiten_Erzeugen Version 1.0

Downloaded a total of 109 times

Ein Installer Script, das die notwendigen Dateien installiert und 2 Skripte.
Einfach eine oder mehrere PDF-Dateien auf eines der Skripte ziehen und es wird eine Doppel-Seitige Version im selben Ordner abgespeichert (prefix: _double_).
So funktioniert es auf dem manuellen Weg:

----

Sagen wir mal wir wollen die Datei bla.pdf auf dem Schreibtisch so konvertieren, wie Du das möchtest.
dann gibst Du folgendes im Terminal ein:

pdftops ~/Desktop/bla.pdf - | psnup -2 | cat>~/Desktop/bla.ps

pdftops ist ein Bestandteil von xpdf und konvertiert die PDF-Datei in eine PostScript-Datei (und bindet die Schriften mit ein, was GhostScript alleine wohl nicht zustande bringt).
psnup -2 ist für das doppelseitige Page-Layout verantwortlich
und das alles wird dann in eine neue PostScript-Datei geschrieben.

man könnte statt des letzten Kommandos auch

pstopdf -i -o _double_bla.pdf

eingeben, dann wird statt der PostScript-Datei ein PDF erzeugt.


PDF Wasserzeichen die II.

27 April, 2008 (15:12) | OSX, Softwareschmiede, applescript, entwicklung | By: hubi

Ich hatte ja bereits vor einiger Zeit mal eine Anleitung geschrieben, wie man PDFs mit Wasserzeichen versehen kann. Damals über einen CUPS-PDF-Drucker, der bei Belieben das PDF auch gleich weiter verschickt. Das ist sicherlich sehr praktisch für einen Server, nur habe ich jetzt die Client-Variente fertig =)
Dabei handelt es sich um einen Ordner-Aktion (10.4-10.5), die jedes PDF, das in den Ordner gelegt wird, mit einem Wasserzeichen versieht und dann an eine neue Email in AppleMail anhängt oder das PDF einfach nur öffnen.
Das besondere daran, ist dass ich es
endlich geschafft habe die Software, die das überhaupt erst möglich macht - pdftk nämlich - so zu kompilieren, dass sie wohl auf jedem Mac ob PPC oder INTEL unter 10.4 und 10.5 läuft. Im Klartext heisst das, dass sie auf PPCs normal läuft und auf Intel-Rechnern unter Rosetta, was der Geschwindigkeit in diesem Falle aber nicht wirklich abträglich ist.
Ich habe einen Installer via AppleScript geschrieben, der alles notwendige installiert, alles was man dann noch machen muss, sind die Aktivierung der Ordneraktionen und das Anhängen eines der Skripte an einen Odner.
Die Handhabung ist also wirklich simpel, was man vielleicht noch selber anpassen sollte, wäre das Hintergrund PDF. Dieses sollte als Hintergrund a