Automatizálás
A Magyar Macintosh Wiki wikiből
Ha szeretnél megszabadulni a tipikusan ismétlődő, idegölően unalmas feladatoktól, jó kiindulópontra leltél! Néhány ilyen eset:
- Letöltöttél 326 képfájlt a digitális fényképezőgépről. A fájlok neve keveset mond, pl. "DSC03265.JPG". Szeretnéd mindegyiket átnevezni, hogy tartalmazzon egy szót és az aktuális dátumot. (Akár az is kivitelezhető, hogy amint csatlakoztatod a kamerát, teljesen automatikusan egy adott mappába töltődnek a képek, átneveződnek, átméreteződnek 800x600-as méretre, becsomagolódnak egy .zip fájlba és feltöltődnek egy FTP szerverre.)
- Szeretnél kiválasztani néhány képed iPhoto-d könyvtárából, lekicsinyíteni őket és elküldeni egy e-mail címre.
- A kiválasztott e-mailek összes mellékletét ki szeretnéd menteni egyetlen könyvtárba.
- Szeretnél konvertálni 150 jpg és egyéb képfájlt PDF-be és utána egyetlen PDF fájlba összefűzni őket.
- Webre szeretnél fájlokat feltenni, és szeretnéd, ha minden fálj neve "web-barát" legyen: kisbetűs, ne legyen benne se szóköz, se különleges betűk (azaz az angol abc-n kívüli karakterek).
A Macintosh-rendszereken már régóta elérhetőek viszonylag felhasználóbarát automatizálási megoldások. Az alábbiakban a Mac OS X v10.4 "Tiger"-ben fellelhető lehetőségeket tekintjük röviden át.
Tartalomjegyzék |
Automator
A Tigris (Mac OS X 10.4) megjelenése óta rendelkezésünkre áll egy valóban sokat ígérő, felhasználóbarát automatizálással kecsegtető program (és a hozzá tartozó technológia): a neve Automator, a gépben lakó kis robot. Amikor az Automator segítségével létrehozzuk kis automatizáló folyamatunkat, (elsősorban) előre elkészített lépéseket helyezünk el megfelelő sorrendben. A legegyszerűbb (ám annál hasznosabb) folyamatok nem igényelnek programozói tudást – bár nem árt, ha meg tudjuk fogalmazni, mely lépésekre van szükségünk a feladat megoldásához.
Misztikusan hangzik? Készítsünk egy kis folyamatot, mellyel automatikusan elküldhetünk e-mailben egy zenét az iTunes könyvtárunkból! Indítsuk el az Automator programot (/Applications/Automator)! Ha elindult a program, két fő részt láthatunk: a baloldali rész (Search, Library, Action és alul egy leírás) segítségével kereshetünk a munkafolyamathoz építőelemeket (Action), jobboldalt pedig majd a munkafolyamatunk lesz. Készítsük el a munkafolyamatot!
- Keressük meg a Mail > New Mail Message nevű akciót és húzzuk át jobbra, ezzel meg is van az első lépés. Nyissuk le az Options részt és pipáljuk ki a Show Action When Run négyzetet – így majd ha futtatjuk a kis munkafolyamatot, megadhatjuk a címzettet, a levél tárgyát és írhatunk pár sort (későbbi önálló kísérletezésre ajánljuk az alapértelmezett Show Entire Action helyett a Show Selected Items által kínált lehetőségeket).
- Keressük meg az iTunes > Ask for Songs akciót (természetesen rá is kereshetünk a Search mezőben) és húzzuk jobbra, a New Mail Message alá! Ez lesz a második lépésünk. A Prompt:-hoz írjuk be pl. hogy Válaszd ki az elküldendő dalokat! Az Allow Multiple Selections legyen kijelölve, ha esetleg több dalt is szeretnénk elküldeni. (Azért ne feledjük, hogy ha túl nagy az e-mail, az gondokat okozhat.)
- Harmadik akciónk a Mail > Add Attachments to Front Message lesz, húzzuk ezt is jobbra, az előző kettő alá.
Kész is vagyunk. Futtathatjuk a munkafolyamatot a Play gomb megnyomásával. Munkánkat el is menthetjük pl. File > Save menüponttal, az egyik lehetőség ha File Type alatt Application-t kérünk, így dupla kattintással indítható programot kapunk.
Mindez egy rövid bemutató volt Automatorról. Sok egyéb opció van, pl. munkafolyamataink elmenthetőek Plug-inként bizonyos programokhoz (pl. Finder), több módszerrel meg lehet változtatni a lépések sorrendjét, egy lépést ideiglenesen ki lehet kapcsolni, stb. Természetesen az Apple által adott építőelemek nem biztos, hogy elegendőek munkánk elvégézéshez. Szerencsére bárki készíthet ilyen elemeket, ezeket közzé is lehet tenni. Mások akcióit és kész munkafolyamatait használhatjuk. A különböző, OS X-hez készített programokkal már érkezhetnek Automator akciók is, ezek a többi közé beépülnek (vagy kézzel kell telepíteni őket).
Az Automator újdonság, gyerekbetegségekben szenved, melyek időnként rendkívül idegesítőek lehetnek. Legyünk türelemmel és bízzunk a programozók munkájában! :)
További információk:
- Az Apple oldalain:
- Mac OS X features – Automator, bemutató videó is van
- Automator letöltések
- Automator.us a Nyhthawk Productions nevű cég Automator-bemutató oldala, példákkal (az AppleScript csoport vezetőjének cége)
- MacWorld magazinban:
- Automator World – egy weboldal, mások akcióival és munkafolyamataival. Fórum, linkek.
- Automatoractions.com a MacScripter.net oldal Automator része
AppleScript
Az AppleScript a Mac OS beépített ún. szkriptnyelve. A szkriptek eredetileg olyan kis programok, melyek más programok működését kapcsolják össze, más programokat vezérelnek. Az AppleScriptnek ma is ez az egyik fő funkciója: az arra felkészített programokat lehet velük vezérelni, így feladatokat automatizálni. Most nem célunk az AppleScript szintaxisának és lehetőségeinek bővebb ismertetése, csak felhívjuk a figyelmet rá. OS X eljövetele előtt az AppleScript volt a fő automatizálási eszköz a Mac-en, segítségével automatikusan készülnek például termékkatalógusok (adatbázisból kép és szöveg, beillesztve egy kiadványszerkesztő programban, adott helyekre és formában) és sok egyéb. Egy feladatot sokféleképp meg lehet fogalmazni. Általában vannak szebb, egyszerűbb és jelentősen gyorsabb módszerek egy adott feladat elvégzésére. Nem árt megtalálni a legfrappánsabb megoldásokat, mert az AppleScript gyakran elég lassan dolgozik.
A rendszerhez kapunk kész AppleScripteket. Hogy kényelmesen használhassuk őket, nyissuk meg az /Applications/AppleScript/AppleScript Utility nevű programot, és pipáljuk ki a Show Script Menu in menu bar opciót (a Show Library scripts-et szintén): a menüsorban megjelenik egy kis iratot mutató ikon. Ha rákattintunk, felbukkannak a rendszerhez adott AppleScriptek. Futtatásukhoz elég a nevükre kattintani. Hasznosak a Finder szkriptek.
A Folder Actions Setup szintén hasznos: egy-egy mappához hozzárendelhetünk egy szkriptet, hogy valamely eseménykor automatikusan fusson: pl. új elem kerül a mappába (így pl. kivitelezhető a rendszerrel, hogy ha írunk egy PostScript fájlt, elmentjük a kérdéses mappába, a rendszer észreveszi, megnyitja, PDF-é konvertálja és letörli az eredetit).
Magunk is írhatunk AppleScript programokat. Ízelítőként nyissuk ki az /Applications/AppleScript/Script Editor alkalmazást, írjuk be az alábbit, majd nyomjuk meg a Run gombot!
display dialog "Hello!" beep 2
Ha vezérelni szeretnénk egy programot, meg kell szólítnunk, valahogy így:
tell application "iTunes" activate play end tell
Megnyithatjuk egy-egy AppleScriptre felkészített program "szótárát", mely az általuk értett parancsokat és utasítható részek nevét tartalmazza, a Script Editor File > Open Dictionary parancsának segítségével.
Közvetlenül futtathatunk UNIX parancsokat az AppleScript segítségével, a do shell script paranccsal, pl.:
do shell script "uptime" set theResult to the result display dialog theResult
Az Automatoron belül is van lehetőség saját AppleScript beillesztésére a munkafolyamatba, erre szolgál a Run AppleScript elem. Ma már önálló programok írhatók ezen a nyelven az XCode fejlesztőkörnyezetben, többek között saját Automator akciók is készíthetők, melyet aztán megoszthatunk programozni nem tudó ismerőseinkkel.
Linkek
- Apple
- Apple.com AppleScript oldala
- Apple.com AppleScript linkgyűjteménye
- Scriptable Applicatons – néhány szkriptelhető Apple-program, példákkal
- AppleScript Language Guide, PDF
- A "do shell script" lehetőségei, Apple TechNote 2065
- Más
- Angol Wikipedia AppleScript szócikke
- MacScripter.net
- The AppleScript Sourcebook
- Doug's AppleScripts for iTunes
UNIX szkriptek
Mac OS X alatt általában elérhetőek a standard UNIX eszközök, így használhatunk héjprogramozást (shell scripting), Perl, Python is van. Az Automatorhoz képest ez amolyan vadvízi evezésnek tűnhet.
Ha még nem láttál ilyet
A UNIX rendszerekre jellemzőek a parancssorból futtatható programok. Az ls parancs például kilistázza egy mappa tartalmát (különféle opciók lehetségesek). Próbaképp nyissuk meg az Applications > Utilities > Terminal nevű programot, írjuk be a parancssorba, hogy ls majd nyomjunk Returnt (Enter). Ezzel az aktuális mappa tartalmát listáztattuk ki, OS X alatt ez alapban a saját home mappánk (Users > felhasználónév). A parancsokat nem csak "kézzel", egyenként adhatjuk meg a gépnek, hanem készíthetünk egy egyszerű szövegfájlt, amiben egymás után felsorolhatjuk a teendőket (hasonlóan a DOS-os .bat állományokhoz). A szövegfájlt egy program (környezet) értelmezi, és legjobb tudása szerint végrehajtja a tartalmát. Készítsünk egy nagyon egyszerű ilyen fájlt!
1. Nyissuk ki a TextEdit nevű programot! Kapunk egy új dokumentumot. Ez azonban nem sima szöveg, hanem rtf lenne, ezért át kell alakítanunk sima szöveggé a Format > Make Plain Text menüpont segítségével.
2. Írjuk bele az alábbit:
#!/bin/bash echo "A könyvtár tartalma:" ls -G
3. Mentsük a dokumentumot most az egyszerűség kedvéért szkriptem néven (mindegy, hogy van-e kiterjesztése, de ha szkriptem.txt lesz a neve, a későbbiekben így kell rá hivatkoznunk; figyeljünk tehát az If no extension is provided, use ".txt"., valamint a Hide Extension opciókra!) a home mappánkba.
4. Tudatnunk kell a géppel, hogy futtatható állományról van szó. Nyissunk egy Terminal ablakot, s adjunk futtatható jogot a szkriptünknek pl. így: chmod +x szkriptem (most nem kellett előtte mappát váltanunk vagy elérési utat megadni, mert szkriptem az aktuális mappában – home – van).
5. Futtassuk a kis programunkat, írjuk be a Terminal ablakba: ./szkriptem
6. Kis elemzés: az első sor (#!/bin/bash) azt mondja meg, hogy milyen program fogja értelmezni a továbbiakat. A második sor (echo "A könyvtár tartalma:") kiírat egy szöveget az echo parancs segítségével, a harmadik sor (ls -G) kilistáztatja az aktuális mappa tartalmát, a -G opció színes kimenetet ad.
A shell programozható környezet, változókkal, ciklusokkal stb. Azzal, hogy sok apró programot összekapcsolhatunk egy ilyen szkripttel, sokkal összetettebb feladatokat is el tudunk végezni. Ezt nevezik szerszámosláda-elvnek.
Készítsünk egy kicsit izgalmasabb programkát:
#!/bin/bash
mkdir proba
cd proba
for ((x=1; x<=30; x++))
do
mkdir `printf "%04d" $x`
done
ls -G
(Figyelem, a printf előtt és a $x után álló jel nem sima aposztróf!) Elemzés: a BASH fogja értelmezni a programunkat (#!/bin/bash), készít egy proba nevű mappát (mkdir proba), majd bele is lép (cd proba), utána indul egy ciklus. A ciklus utasítások ismétlésére való. Szerepel benne egy ún. ciklusváltozó, x, melynek kezdőértéke 1 (x=1), utolsó felvett értéke majd 30 lesz (x<=30), s minden egyes ciklus végén 1-gyel nő az értéke (x++). A ciklus magja (mkdir `printf "%04d" $x`) könyvtárakat hoz létre, nevük x lesz, mindig 4 számjegy széles formában (tehát 0001, 0002, 0003 stb.). Az utolsó sorral (ls -G) kilistáztatjuk, mit is hoztunk létre.
Az alábbi programka a fentinek egy változata: az aktuális mappában minden .png kiterjesztésű fájlt átnevez 001.png, 002.png, 003.png stb. alakúra.
#!/bin/bash ls -G x=1 for fname in *.png do mv $fname `printf "%03d.png" $x` x=$(($x+1)) done ls -G
Az egyes utasításokról általában kaphatunk információt, ha kiadjuk a man parancs utasítást, pl. a printf program kézikönyvét elolvashatjuk, ha kiadjuk a man printf utasítást (kilépni belőle a Q betű lenyomásával lehet).
További információk tömkelege található a weben, pl.:
- Mi a shell? (Magyarul, HUP Wiki) illetve néhány szó a BASH-ről (egy tipp: OS X alatt a ~/.bash_profile fájlban helyezhetünk el pl. alias utasításokat)
- UNIX parancsok rövid listája magyarul, HUP Wiki
- Linux Shell Scripting Tutorial
- Scripting Mac OS X, O'Reilly MacDevCenter
- NACSE – UNIX tools and tips
Ha már láttál ilyet
Csak néhány tanács.
- Shell. Az alapértelmezett shell Tigris (Mac OS X v10.4.x) óta a BASH. A UNIX parancssoros felületet az Applications > Utilities > Terminal nevű program segítségével érhetjük el.
- Szerkesztők. A szkripteket általában lehet írni/szerkeszteni a TextEdit nevű programmal. Ha nyitunk egy új dokumentumot, az rtf fájl lenne, ezért a Format > Make Plain Text utasítással konvertáljuk sima szöveggé, mielőtt munkához látnánk! A sorvége jelek automatikusan UNIX-típusúak lesznek (LF), tehát a programunk egyből működni fog. Természetesen olyan szerkesztőt használhatunk, amilyet szeretnénk, pl. SubEthaEdit, vagy a szokásos UNIX eszközök egyikét (pico, vi, emacs stb.). A rossz sorvége jel gyakori hibajelenség, a gép Command not found. üzenettel jelzi.
- Futtatási jog. A megírt szkriptnek ne felejtsük el megadni a futtatható jogot. Használjuk pl. a szokásos chmod +x szkriptem vagy chmod 755 szkriptem parancsokat (ahol szkriptem a fájl neve).
Ha könyvtárat kell váltanunk a művelethez, van egy kényelmes rövidítés: a Terminalba írjuk be, hogy cd majd dobjuk a Terminal ablakára Finderből azt a mappát, ahová váltani szeretnénk (vagy nyissuk meg a mappát Finderben, majd az ablak tetején lévő mappa ikont ugyanúgy ráhúzhatjuk a Terminal ablakra). - Futás megszakítása. Ha túl sokáig futna a szkript és inkább leállítjuk, nyomjuk meg a Ctrl C kombinációt. Igen, Mac-en is Control, most nem az Alma.
- AppleScript meghívása is lehetséges egy UNIX szkriptből az osascript parancs segítségével (nem mindig működik!), például a
#!/bin/sh osascript -e 'tell application "Finder"' -e "activate" -e "display dialog \"hello\"" -e 'end tell'
unix szkript az alábbi AppleScriptet hajtja végre:
tell application "Finder"
activate
display dialog "hello"
end tell
Egyéb alkalmazások
Sok program vezérelhető AppleScript, illetve most már Automator akciók segítségével is. Emellett van, hogy egy alkalmazásba saját automatizálási mechanizmusokat (is) építettek készítőik. Említés szintjén lássunk egy-két gyakorit.
1. Adobe Photoshop és ImageReady. A két program jelenleg kissé logikátlanul eltérő képességekkel rendelkezik az automatizálás terén (melyek nem magyarázhatóak a két program funkcionális különbségével), pl. ImageReady-ben van lehetőség feltételes lépések beillesztésére. Fel lehet venni egy adott, ismétlendő lépéssort (a Window > Actions pont segítségével nyitjuk meg az Actions palettát), azt futtathatjuk magából a programból, vagy készíthetünk egy ún. dropletet is, mely önmagában egy pici programka, melyre rádobhatunk feldolgozandó mappákat / fájlokat, a többit a gép elvégzi.
- Néhány tutorial:
- Doing Droplets with Adobe Photoshop,
- Adactio: Articles – Photoshop Actions,
- Create own Actions and Droplets
- Creating Actions with Conditionals
- Conditional Actions in Adobe ImageReady (Creative Mac)
- Droplet Actions in Adobe ImageReady (Creative Mac)
2. Microsoft Word és az Office csomag többi tagjában felvehetünk / írhatunk / módosíthatunk makrókat. Kezelésük időnként szörnyen nehézkes és logikátlan – az ártó szándékú makrókról ne is beszéljünk. Munkánk megkönnyítése érdekében azonban magunknak felfedezhetjük, hogyan is működik. A Tools > Macro > Record New Macro menüpont jó kiindulópont, felvehetjük a saját lépéssorunkat.
Időzített futtatás
iCal
Egy-egy iCal esemény alarm opciójával futtathatunk időzítve AppleScript szkripteket, illetve indíthatunk programokat (Run script, majd Other...; illetve Open file).
Cron
A cron egy hagyományos UNIX időzítő program (háttérben futó, azaz daemon), a rendszer része. OS X alatt kényelmes a beállítása például a CronniX nevű program segítségével. Ha a gép épp nem megy akkor, mikorra egy feladat időzítve van, a gép feléledésekor nem fogja bepótolni. OS X 10.4 előtt a rendszer napi, heti és havi karbantartó szkriptje is a cront használta (OS X 10.4 óta a launchd végzi a feladatot).
Cron-puska haladóknak
| Mező neve | Megengedett értékek | Megengedett speciális karakterek |
| Másodperc (Seconds) | 0-59 | , - * / |
| Perc (Minutes) | 0-59 | , - * / |
| Óra (Hours) | 0-23 | , - * / |
| Hónap napja (Day-of-Month) | 1-31 | , - * ? / L W C |
| Hónap (Month) | 1-12 vagy JAN-DEC | , - * / |
| Hét napja (Day-of-Week) | 1-7 vagy SUN-SAT | , - * ? / L C # |
| Év (Year), opcionális | üres, vagy 1970-2099 | , - * / |
A speciális karakterek jelentése
- A * jelentése: "minden érték". Pl. a perceknél a * azt jelenti, hogy 'minden perc'.
- A ? jelentése: nincs megadva külön érték. A hónap napja és a hét napja közül az egyik lehet ilyen.
- A - karakterrel intervallumokat jelölhetünk ki: 10-12 az órák mezőben azt jelenti, hogy a 10., 11., és 12. órákban fut az adott utasítás.
- A , karakterrel több értéket sorolhatunk fel, pl. MON,WED,FRI azt jelenti a napok mezőben, hogy hétfőn, szerdán és pénteken is futtatjuk a parancsot.
- A / karakterrel növekményt adhatunk meg. Például a 0/15 a másodpercek mezőben jelenti a 0., 15., 30. és 45. másodpercet. Az 5/15 pedig jelenti az 5., 20., 35., 50. másodpercet. Ha a / jel elé * jelet írunk, az egyenértékű azzal, mintha 0-t írnánk. Ezzel a karakterrel csak azt mondhatjuk meg, hogy minden "hanyadik" valamiben történjen az esemény a lehetséges értékek közül. A 7/6 a hónap mezőben csak a 7. hónapot fogja aktiválni, nem pedig minden 6. hónapot.
- Az L karakter azt jelenti, hogy utolsó. Hónapok esetében pl. 31 lesz Januárban, de 28 Februárban (nem szökőévekben). A hét napja mezőben szombatot jelent. Ha ebben a mezőben egy szám után áll, azt jelenti: az utolsó xxx nap a hónapban, pl. 6L azt jelenti, hogy "a hónap utolsó péntekje".
- A W azt jelenti, hogy hétköznap, pl. 15W azt jelenti, hgoy ha 15-e épp szombat lenne, akkor 14-én fog aktiválódni, mert az péntek és legközelebb ez van 15-éhez. LW azt jelenti: a hónap utolsó hétköznapja.
- A # jelenti az x. valamilyen napját a hónapnak. Pl. 6#3 a hónap harmadik péntekje, 2#1 pedig a hónap első hétfője, 4#5 pedig a hónap ötödik szerdája.
- A C opció valószínűleg bonyolultabb, mint amilyen hasznos. :)
Anacron
A cron démonhoz hasonló program, de pótlólag is hajlandó parancsokat futtatni, ha a gép épp nem ment akkor, mikor valaminek történnie kellett volna. Anacron for Mac OS X 10.4 (Tiger)
Launchd
A Mac OS X 10.4 (Tigris) óta használhatjuk ezt a programot is időzített futtatásra. Az Apple már rábízta a napi, heti illetve havi karbantartást. A launchd beállítási fájljai xml fájlok. Láthatunk néhány példát a /System/Library/LaunchDaemons mappában, itt van például a com.apple.periodic.daily, com.apple.periodic.weekly és a com.apple.periodic.monthly is, ha akarjuk, átállíthatjuk a karbantartó szkripteket, hogy biztosan akkor fussanak, mikor megy a gépünk. Ha saját időzítéseket szeretnénk megadni, a beállítási fájlokat inkább helyezzük a /Library/LaunchDaemons mappába, a /System/Library/LaunchDaemons-hoz inkább ne nyúljunk.
Ha unix szkriptet/programot akarunk futtatni pl. bejelentkezéskor, nem tudnánk megtenni a System Preferences > Accounts > Login Items opcióval. Két lehetőségünk van. Vagy készítünk egy bundlit neki (pl. Platypus segíthet), és azt betesszük a Login Items közé, vagy pedig rábízzuk Launchd-re.
Mondjuk, minden bejelentkezéskor le szeretnénk tölteni egy fájlt wget segítségével (a munka kezdetekor). A parancs az alábbi lenne:
/usr/local/bin/wget -O /Users/ben/news.pdf http://news.ben.com/today_news.pdf
Lingon segítségével könnyen beállíthatjuk launchd opcióit.
1. Készítsünk egy új feladatot (File > New, aztán My Agents)
2. A label legyen, amit szeretnénk, pl. org.ben.news
3. A ProgramArguments-ben pedig a fenti parancs minden részét külön sorba kell betenni:
/usr/local/bin/wget -O /Users/ben/news.pdf http://news.ben.com/today_news.pdf
4. Pipáljuk ki a RunAtLoad opciót.
5. Adjunk valami nevet a ServiceDescription-höz is.
6. Save & Load
Megjegyzés: (jelenleg) teljes elérési útvonalakat kell Launchd-nek megadni, ~/news.pdf pl. nem működne.
- További információ a launchd-ről az Apple oldalán
- Lingon, egy ingyenes, remek beállítóprogram launchd-hez.
