Willkommen auf der Blog-Seite von hubionmac.com!
Alles rund um AppleScript und was mich sonst noch so interessiert ;-)!

Ich musste mich leider von meinem alten Webhoster verabeschieden. In Zeiten von Let's Encrypt noch für eine kleine Web-Präsenz für SSL-Verschlüsselung zu zahlen, wollte ich einfach nicht einsehen.
Ich bin nun zu netcup gewechselt und bin, abgesehen vom Support eigentlich zufrieden. Es nervt mich ein bischen, dass ich die Wordpress-App (eine für eine andere Domain) nicht an Laufen bekomme und mir der Support nichts weiter zu sagen hat, als dass sie für eine Dritthersteller-Software wie Wordpress keinen Support übernehmen könnne. Eine coole Ausrede, wenn doch eigentlich alles auf dem Webspace nur Dritthersteller-Software sein kann ;-) Egal, ich habe mich damit arangiert, zumal ich die Haupt-Seiten eh mit Grav realisere. Der Rest ist ok, das Packoffice ist etwas langsam und Mail unterstütz auch kein Push mehr... NERV! Egal, für die nächsten 2 Jahre bin ich erst mal hier, den Umzugsstress gebe ich mir nicht mehr so schnell wieder.
Aber für die Mail-Problematik habe ich eine schöne Lösung gefunden. Mailbox.org bietet mir für schlanke 12 Euro im Jahr einen sauper verschlüsselte Mailbox und ich kann auch Mails über meine eigene Domain erhalten und direkt verschicken. So ist Netcup jetzt raus aus dem Mail-Verkehr und zudem kann ich meine Adressen und Termine auch über Mailbox sicher abwickeln, also sind Google und iCloud auch aussen vor.

Fazit des ganzen.

  • Sobald mein alter Provider vielleicht doch mal für mich kostenlose Let's Encryp-Verschlüsselung unterstützt, bin ich sofort wieder bei ihm.
  • Netcup ist schön günstig und reicht vollkommen aus, solange man nix vom Support haben möchte
  • mailbox.org ROCKT!

Continue reading...

Es ging um eine Frage in einem Forum, wie man am besten via Skript das Benutzerkennwort ändern kann. Da in OSX damit auch gleichzeitig der Schlüsselbund bei Anmeldung entschlüsselt wird, muss das Kennwort hierfür auch gleich mit geändert werden... das machte die Sache etwas komplizierter, aber eigentlich doch nicht.
Das Skript habe unter 10.12.1 getestet... sollte aber auch auf früheren Versionen funktionieren

##erst mal alle lokalen Nutzer abfragen... wenn es nur einen gibt, direkt weiter
tell application "Finder" to set localUsers to name of every folder of (path to "usrs") whose name is not "Shared"
if (count of localUsers) > 1 then
    set localUser to choose from list localUsers with prompt "Welcher Nutzer soll bearbeitet werden?"
    if localUser is false then
        ##Script abbrechen, wenn auf Abruch gedrückt wurde... also choose list false zurück gibt
        error number -128
    end if
else
    set localUser to localUsers as string
end if
##Alte und neue Kennworte erfragen
set olderpassword to ""
repeat until olderpassword ≠ ""
    set olderpassword to text returned of (display dialog "Bitte alte Kennwort für User \"" & localUser & "\" eingeben" default answer "" with hidden answer)
end repeat
set newpassword to ""
repeat until newpassword ≠ ""
    set newpassword to text returned of (display dialog "Bitte neues Kennwort für User \"" & localUser & "\" eingeben" default answer "" with hidden answer)
end repeat

##Benutzerkennwort ändern.... es muss mit administrator privileges (Abfrage eines Admin Kennwortes) laufen, da sonst ein prompt in der Shell kommen würde....
## Soweit zumindest mein Kenntnisstand vielleicht gibt es aber auch eine schönere Lösung ohne Admin rechte ;-)
try
    do shell script "dscl . -passwd /Users/" & localUser & " " & quoted form of newpassword with administrator privileges
    display notification "System-Kennwort erfolgreich geändert"
on error msg
    display notification "Fehler beim Ändern des Systemkennworts: " & msg as string
    error number -128
end try
##Schlüsselbund Kennwort ändern
try
    do shell script "security set-keychain-password -o " & quoted form of olderpassword & " -p" & quoted form of newpassword with administrator privileges
    display notification "Schlüsselbundkennwort erfolgreich geändert"
on error msg
    display notification "Fehler beim Ändern des Schlüsselbundkennwortes: " & msg as string
    error number -128
end try

Continue reading...

Ich habe vor einiger Zeit mal diesen IPSW-Downloader geschrieben, damit man gerade als Apple-Supporter nicht immer erst die passende iOS-Software laden muss, wenn man mal einen iPod oder ein iPhone resetten möchte. Die Software lädt also einfach die neuesten Software-Versionen für alles iOS Devices, iPods und Apple-TVs herunter.
Bis zum Update von iOS 10, als auf einmal die Namensgebung so gar mehr mit dem übereinstimmte, was Apple bisher gemacht hatte.
Die neue Version kommt nun auch mit den neuen Dateinamen klar und anstelle auf jedem Client dieses riesen XML-Datei parsen zu lassen, fasst nun ein Script dieses Server-Seitig zusammen, so dass der Download noch schneller starten kann. Weitere Neuerungen sind:

  • Alte Dateien werden rot markiert und können so nachdem das Skript gelaufen ist, vom nutzer leicht identifiziert und gelöscht werden, damit man sich den Rechner nicht mit veralteten Versionen zumüllt.
  • Wenn mal ein Download-Abgebrochen wird (manchmal kicken einen die Server einfach raus), bricht das Skript nicht mehr ab, sondern fängt den Fehler ab. Der angebrochene Download wird gelöscht und wenn man das Skript später noch einmal laufen lässt, wird dann die fehlende Datei erneut geladen. So gehören zumindest defekte Dateileichen der Vergangenheit an ;-)

ipsw downloader 4.zip

Continue reading...

Ich war auf einer Vortragsveranstaltung und um den Ablauf so gut wie möglich zu timen und damit die Redner Ihren Time-Slot nicht überziehen, musste eine Countdown angezeigt werden. Die Vorgabe für den Countdown haben wir zunächst per Funkt erhalten und dann auf einem Laptop einen entsprechenden Countdown laufen lassen. Das war nur leider nicht wirklich praktikabel, da sich teilweise während des Vortrages der Countdown ändern sollte und wir über Funk oft gar nicht verstehen konnten, wieviel Minuten es sein sollte. So ist diese Anwendung entstanden. Der Verantwortliche für den Countdown hat kurzerhand eine Remote-App (in Form einer Webseite) erhalten, über die er die Seite mit dem Countdown selber steuern konnte ;-)remotecountdown.zip

Continue reading...

Ich muss mir immer wieder Daten aus Dokumenten ziehen, die so eigentlich nicht zu parsen sind. Bestes Beispielt war heute eine .doc-Datei, die einen Zeitplan beinhaltete und dieses Word-Konstrukt sollte nun in eine Datenbank eingefügt werden.
Kurz, das automatisch einzulesen war utopisch und jedes Feld nun via Copy&Paste zu befüllen kostet echt Zeit... Nun, ich bin zu einem Kompromiss gekommen, der mit das Leben in Zukunft auch etwas leichter machen:

Das Skript überwacht einmal gestartet die Zwischenablage. Am Anfang kann man noch eingeben wieviele Spalten die Tabelle haben soll und von da an wird jeder neue Inhalt in der Zischenablage zur Tabelle hinzugefügt. Tabelle heißt in diesem Fall eine tab-separierte Textdatei. Damit man beim Kopieren auch etwas Feedback erhält, wird jede Aktion von einem Ton begleitet und zudem sieht man in einem Terminal-Fenster, wie die Text-Datei anwächst...

Zu theoretisch? Ok, hier ein

und natürlich der Quellcode:


#Clipboard to Data Table 2016-08-19 © hubionmac.com
#Copies the clipboard contents to a text file, to make tables
# script ends as soon as you have the string "ende" in you clipboard

##Settings
set data_file_name to "clipboard_data_" & (do shell script "date '+%s'" & ".txt")
set columcount to (text returned of (display dialog "Count of Data Columns" default answer 2)) as integer
do shell script "touch ~/Desktop/" & quoted form of data_file_name
tell application "Finder" to set data_file to ((item data_file_name of desktop) as alias) as string
#show what happens to the file while the script is adding data
tell application "Terminal"
    do script "tail -f ~/Desktop/" & quoted form of data_file_name
end tell

set ccb to the clipboard
set column_pointer to 0
set theline to {}
#### OMG repeat for ever!!! ;-)
repeat until 1 is 0
    delay 1
    if ccb as text ≠ (get the clipboard) as text then
        set ccb to the clipboard as text
        ##remove newline characters from clipboard
        set tmp to my replace_chars(ccb, "\n", "")
        set tmp to my replace_chars(tmp, "\r", "")
        set theline to theline & {tmp}

        #play some feedback sound
        do shell script "afplay /System/Library/Sounds/Tink.aiff"
        if ccb is "ende" then
            # when the clipboard = ende then quit the script
            say "ende"
            exit repeat
        else
            set column_pointer to column_pointer + 1
            # when the line is full of data, write it to file and start over
            if column_pointer = columcount then
                ##join theline to tap delimited line
                set AppleScript's text item delimiters to tab
                set theline to theline as text
                set AppleScript's text item delimiters to ""
                ##write theline to file
                my write_to_file(theline & "\n", data_file, true)
                do shell script "afplay /System/Library/Sounds/Blow.aiff"
                ## reset vars for next run
                set column_pointer to 0
                set theline to {}
            end if
        end if
    end if
end repeat

on replace_chars(this_text, search_string, replacement_string)
    if this_text contains the search_string then
        set od to AppleScript's text item delimiters
        set AppleScript's text item delimiters to the search_string
        set the item_list to every text item of this_text
        set AppleScript's text item delimiters to the replacement_string
        set this_text to the item_list as string
        set AppleScript's text item delimiters to od
    end if
    return this_text
end replace_chars

on write_to_file(this_data, target_file, append_data)
    ##slightly tweaked routine from http://www.macosxautomation.com/applescript/sbrt/sbrt-09.html which now writes utf-8 text files =)
    try
        set the target_file to the target_file as string
        set the open_target_file to open for access file target_file with write permission
        if append_data is false then set eof of the open_target_file to 0
        write this_data to the open_target_file starting at eof as «class utf8»
        close access the open_target_file
        return true
    on error
        try
            close access file target_file
        end try
        return false
    end try
end write_to_file

Continue reading...