Category Archives: workflow

Songwhip

songwhip.com oldalt: megkeresi neked a tracket minden streaming music service-ben és kiteszi a linkjeiket egy listába. Ordít róla, hogy ebből Alfred workflowt kell csinálni (Ottó régóta kérte már ezt tőlem, plusz tök jó érzés pont pénteken kipipálni egy pet projektet). Csak egy kis Python kell hozzá XPath-tal és már ki is túrtuk a lényeget:

#!/usr/bin/python
import sys, os, json, requests
from lxml import html
# get url from clipboard
url = os.getenv('cb')
query = 'https://songwhip.com/' + url
page = requests.get(query)
url = page.url
tree = html.fromstring(page.content)
data = { "items": [] }
mods = {
	"cmd": {
		"subtitle": "Copy link to clipboard"
	},
	"alt": {
		"subtitle": url
	}
}
song = tree.xpath('/html/head/title/text()')[0]
data["items"].append({"valid": True, "uid": "00songwhip", "title": "SongWhip", "subtitle": song, "arg": url, "icon": {"path": "icon.png"}, "mods": mods})
items = tree.xpath('//a[@role="button"]')
i = 0
for item in items:
	i = i + 1
	title = item.text
	url = item.get("href")
	file_icon = "icons/icon.png"
	if os.path.isfile("icons/" + title + ".png"):
		file_icon = "icons/" + title + ".png"
	mods = {
		"cmd": {
			"subtitle": "Copy link to clipboard"
		},
		"alt": {
			"subtitle": url
		}
	}
	data["items"].append({"uid": str(i).rjust(2,"0") + title, "title": title, "subtitle": song, "arg": url, "icon": {"path": file_icon}, "mods": mods})
sys.stdout.write(json.dumps(data))
Installáld a workflowt, másolj be egy music streaming URL-t a kedvenc streaming szolgáltatásodból a clipboardba, majd Alfredben add ki a “sw” keywordöt és voila: Ha tetszik, viheted a packal.org-ról. Have fun!]]>

Mac workflow: Markdown to MS Word .docx

Markdownban tartom, a Word dokumentumoktól meg az Isten óvjon, úgyhogy a pandoc becenevű fegyverrel tüzeltem az ajánlatokra:

brew install pandoc
pandoc -o cv.docx -f markdown -t docx cv.md
A pandoc az a minden OS-re megírt svájci bicska, amit először kell körbenézni akkor, ha valaha arra lenne szükséged, hogy két különböző markup formáttum között konvertálj. Update: ha ezen fellelkesültél volna és mondjuk innentől minden Markdown doksit is CLI-ből szeretnél PDF formátumúvá konvertálni, az sem lehetetlen. A pandoc ehhez a pdflatex binárist használja, ami a basictex csomagban lakik eltemetve, de mi kibányásszuk:
brew cask install basictex
ln -s /Library/TeX/texbin/pdflatex /usr/local/bin/pdflatex
Innentől látszik a pdflatex a pandocnak, már onthatjuk a README.pdf-eket:
pandoc -o README.pdf -f markdown README.md
]]>

Mac workflow: hátha SONOSt hoz a Jézuska

  • Apple === zártság, ezt tudtuk eddig is. Persze AirPlay servert azért csinálhatunk egy Raspberry Pi-ből, használhatunk hozzá egy kis Airport Expresst vagy egy Apple TV-t ha elég annak az egy darab digitális audiokimenete, de ezekhez még mind speakert kell illesztenünk ugye.
  • Az AirPlay lagos. Isten látja lelkemet, amióta az AirPlay megjelent, azóta várom, hogy majd a szuper mérnökök megoldják azt, hogy az egymástól 10 méterre levő két hangszóróból egyszerre szóló zene ne legyen a késés miatt visszhangos, de a 2010 szeptembere óta létező AirPlay a mai napig késik, úgyhogy épp 6. éve már, hogy képtelenek orvosolni a bosszantó problémát.
  • Ahhoz, hogy AirPlayen játszak le, a mai napig futnia kell egy AirPlay targetre zenét küldő szoftvernek valami dedikált frontend vason.
  • Sokat olvastam már a SONOS-ról, csábított is, de az Apple Music támogatás hiánya mindig vissza tartott. Pár hónapja azonban megjött a SONOSokba ez is, úgyhogy az idei karácsonyi hajrában bevásároltunk egy kazal speakert. A SONOS speakerek saját maguk cibálják el a zenét a forrásból, a controller szoftvernek csak addig kell futnia, amíg te kiválasztod, hogy mit akarsz hallgatni, melyik hangszórókon és milyen hangerőn. Hab a tortán, hogy brit szoftveresek rég meg tudták oldani a lag problémát: az összes hangszóró teljes szinkronban tolja ugyanazt a kontentot. Ez így közel tökéletes lenne, ám nekem sokszor jött elő munka közben, hogy egy playlistben olyan track került sorra, ami zavart. Ilyenkor taskot kell váltani meg egerezni ahelyett, hogy a billentyűzet elengedése nélkül foshatnám a kódot. Na ezért született a SONOS Controller workflow. A SONOS Controller egy Alfred 3-ba begyógyítható workflow. Az agyát nem én írtam, hanem 2012-ben itt Sydneyben a Music Hack Day nevű eseményen kezdte Rahim Sonawalla, majd egy csodálatos Python fejlesztői közösség gyűlt köré és tartja karban a projektet a mai napig. Ahhoz, hogy az általam hackolt Alfred workflow bármit is csináljon a SONOS speakereiddel, előbb a SoCo python classt kell installálnod mondjuk a Python csomagkezelőjével:
    pip install soco
    Eszembe nem jutott zeneválasztó funkcionalitást gyártani, hiszen egyfelől a SONOS kismillió adatforrásból képes audiot lejátszani, másfelől erre tökéletesek a desktop és mobil appok, amiket a gyártó ingyen kínál, végül pedig nem ez volt a cél, hanem csak annyi, hogy meló közben gyorsan tracket léptessek, halkítsam/hangosítsam a cuccot, vagy megállítsam a streamet, mindezt úgy, hogy a kezemnek ne kelljen elhagynia a billentyűzetet. A workflow két keywordöt ismer:
    • sc – ha ezzel a kulcsszóval indítasz, akkor az összes zónát vezérled egyszerre: soco_alfred-commands_on_selected_zone
    • scs – ez a kulcsszó pedig előbb összeszedi a LAN-odon látható SONOS speakereket, amikből választasz egyet, majd ezután kapod a parancsmenüt, ami így értelemszerűen a már az előbb kiválasztott speakerre fog vonatkozni: soco_alfred-zone_selector
    A parancslista sincsen széjjel bonyolítva:
    • play – elindítja a lejátszást
    • pause – megállítja a lejátszást
    • next – a következő trackre ugrik
    • inc – emel a hangerőn 5%-ot
    • dec – csökkent a hangerőn 5%-ot
    • vol XX – beállítja a hangerőt XX% értékre, ha XX-nek 0-100 közötti egész számot definiáltál: soco_alfred-set_volume
    Az ikonokon nem megbotránkozni, én Mórickáztam össze őket éjjel amíg ti alukáltatok (a 10 óra timezone offset legrosszabb tulajdonsága, hogy az azonnali agymenéses petprojecthez nem tudok leakasztani egy ingyendesignert :)) A workflowt szokás szerint szedheted a packal.org-ról vagy tőlem. Boldog Karácsonyt!]]>

    Mac workflow: Alfred set color label

    A probléma Egér nélkül akarjuk a Finderben kiválasztott elemek color label tag-jét beállítani.

    A megoldás

    Csinálunk hozzá Alfred workflow-t. A workflow kétféleképpen használható:
    1. Van benne 8, paraméter nélkül használható keyword: lred, lorange, lyellow, lpurple, lblue, lgreen, lgray, lnone – ezek értelemszerűen a nevekben szereplő színűre állítják a kiválasztott Finder elemeket. set-color-label_workflow2
    2. Az “scl” kulcsszóval és az utána írt color paraméterrel ugyanígy beállítja a kívánt színt a Finder által használt 7 féle variációból: set-color-label_workflow1
    A workflowt szedheted a packal.org-ról, vagy tőlem innen. ]]>

    Mac workflow: textfile to Reminders items

    Tatra panorama Erától kaptam szép hosszú szerelmetes levelet to-do listát emailben, amit nekem kényelmesebb lenne kipipálgatni egy Reminders listában. Szerencsére van egy kis eszünk, AppleScriptünk, meg a Remindersnek AppleScript supportja, úgyhogy csak bemásoljuk az emailből a hosszú listát a clipboardba, aztán ráeresztjük ezt a scriptet és voila:

    tell application "System Events"
    	set myText to paragraphs of (the clipboard as text)
    end tell
    repeat with myLine in myText
    	if length of myLine is greater than 0 then
    		tell application "Reminders"
    			tell list q
    				make new reminder with properties {name:myLine}
    			end tell
    		end tell
    	end if
    end repeat
    ]]>

    Mac workflow: Alfred translate-shell CLI translation

    a dict.cc szótáraihoz csináltam Alfred workflowt. Nemrég szembejött a csodás shell-ben való fordításhoz írt translate-shell, amely használja a Google Translate, Bing Translator és a Yandex online service-eket, ráadásul a fejlesztők naprakészen tartják az alkalmazást, így ha a Google teker egyet az API-n, csak a translate-shellt kell frissíteni és már működik is újra minden. Ez kell nekem, ebből csináltam is gyorsan egy Alfred workflow-t (a workflowban szerepel egy, az Alfred 3 által bevezetett var/arg manipulator widget, így Alfred 2-vel nem lesz kompatibilis, de mivel az Alfred 3 már kijött a bétából, így ez nem lehet gond). A trans workflow “trans” keywordjét a translate-shell szintaxissal kell használni: trans-keyword trans-output trans-multilang trans-multilang-output A nyelv-specifikus keywordöknél a target language előre definiált és a kifejezéseket nem kell idézőjelbe tenned: thu-keyword trans-output A trans workflow-t viheted innen, vagy a packal.org-ról.]]>

    Mac workflow: Alfred dict.cc translation

    Alfred Google Translate workflow-t, ám a Google egy ideje DDOS attacknak veszi a workflow ismétlődő lekérdezéseit és ez azt eredményezi, hogy viszonylag gyorsan kizár a szolgáltatásból egy teljes napra. Nem volt mese, más fordító megoldás után kellett nézni – így akadtam rá a dict.cc-re. Innen már csak pár lépés volt Raphael Baron dict.cc-hez írt Python kódja, onnan meg Thomas Hirsch Alfredre szabott workflow-ja. Thomas megoldása sajna bedrótozta a workflowba, hogy az angol->német irányban fordítson, viszont a dict.cc angolról és németről számos más nyelvre képes fordítani, így csak egy picit kellett megpiszkálni a workflowt ahhoz, hogy angol<->magyar és angol<->lengyel irányokban is fordítson: dict_cc-en-hu dict_cc-hu-en dict_cc-en-pl dict_cc-pl-en Újabb forrás->cél nyelv hozzáadásához csak újabb script filtert kell létrehozni: dict_cc-definitions amiben csak ezeket kell cserélgetned: dict_cc-script-filter-details A workflow-t szedheted tőlem, vagy a github forkból.]]>

    Mac workflow: klikkmentes to do

    Things alkalmazást. Ez egész odáig tartott, míg a fejlesztő srácok el nem kezdték ígérgetni a cloud sync támogatást, ami csak nem akart megérkezni – én pedig továbbléptem, előbb a The Hit List-re, aztán az OS X / iOS gyári Reminders alkalmazására, majd a német Wunderlist appra. Mindegyikkel volt valami bajom, aztán nemrég szembejött egy review, amiben újra nyakig dícsérték a Things-et, ezért úgy gondoltam, visszanézek – és nem bántam meg 🙂 Amivel már jó ideje kísérletezek az az, hogy a munka közben eszembe jutó teendőket minél kevesebb erőfeszítéssel rögzíthessem. Erre optimális lenne, ha a feladatkezelő alkalmazás korrektül scriptelhető lenne, én meg egy Alfred workflow-val beletolhatnám a mondandómat – ezt fogjuk most megcsinálni a Things mellé. A Things-hez létezik már többféle Alfred workflow, én viszont egyikkel sem voltam elégedett. Olyat szerettem volna, amihez egy sorban kitölthetem a taskhoz tartozó összes paramétert mindenféle egerezés nélkül. Ehhez még hozzáálmodtam azt is, hogy felszedhetné az aktív Safari ablak URL-jét és az oldal címét, hátha csak épp azt akarom elmenteni. Tudom, van Reading list Safariban, amit viszont nem tudok taggelni és főleg fejlesztői doksiknál sokszor élem át azt, hogy emiatt nem találok meg egy korábban látott oldalt. Szóval legyen benne task description meg task note kitaláló, de gyorsan állíthassak határidőt, feladatcsoportot és tageket is. Kitaláltam ehhez a következő szintaxist: things-workflow-sample Az eleje a feladat leírása, a @ után álló “3d print” a feladatcsoport (a Things nyelvén “project vagy area of responsibility”), a # utáni “Ultimaker” a feladatra akasztott címke, a > karaktert követő 1 érték pedig azt mondja a workflownak, hogy ez a munka holnap határidős. Mindezt látod is on-the-fly, ahogy gépeled be a feladatot. Csak elsőre hangzik bonyolultan, 5 task kézzel és már ott is van az izommemóriában 🙂 Ez pedig a Safari autofill – így néz ki, amikor felszedi az aktív Safari ablak címét és URL-jét: things-workflow-safari-autofill-sample A > karakter utáni dátummal tud minimálisat matekozni. Megadhatsz neki 8 (=YYYYMMDD), 6 (=YYMMDD), 4 (=MMDD), vagy 2 (=DD) jegyű dátumot – ha nem teljes a dátum, akkor a hiányzó darabokat az aktuális napi dátumból kiegészíti. Magyarul a >1201 ma 2014 december elsejét jelenti a workflownak. Ezen túlmenően tud hozzáadni illetve elvenni napokat az aktuális dátumból: az első karakter az előjel, azt követi egy szám, majd az utolsó karakter opcionálisan jelölhet nap helyett hetet (w), hónapot (m) vagy évet (y). Egy példán keresztül: a mai napon gyártott to do-n a >+3w dátummatek 2014 december 17-ét állítja be due date-nek, mivel az van 3 hét múlva. Ha tetszik és kipróbálnád, a workflow-t szedheted tőlem vagy a packal.org-ról is. Update: kicsit szellősebbre vettem a parser által kitalált to do elemeket, illetve most már felismeri a @today és @someday targeteket is és a megfelelő Things listákba pakolja az így címzett to do itemeket: things-alfred-workflow-v1_1 ]]>

    Android a házban, avagy egy geek ebédje

    IP Webcam alkalmazás kell, meg persze némi mount a telefonnak a konyhában, valahogy így: IP_webcam-in-da-kitchen Kamera a helyére, app elindít, aztán már jön is a secondary monitorra a stream egy Chrome ablakban, mi meg nem aggódjuk halálra magunkat, hogy véletlenül odaég a drága pecsenye: IP_camera-UI Persze ugyanez megy iOS alatt is, ott IP Cam az áhított alkalmazás neve, csak én szívesebben állítottam a Moto G-t a sercegő hús mellé. ]]>

    Mac workflow: Alfred

    Alfred viszont annál inkább a szívemhez nőtt. Az Alfred a készítők definíciója szerint egy “productivity” alkalmazás, mely a korábbi Quicksilver, illetve a most is aktívan fejlesztett Launchbar launcherek konkurrense. Most eltekintek attól, hogy a sok default Alfred jóságot részletesen ismertessem, azokról született már kismillió jó írás. Rettenet erő lakik a szoftverben, főleg, ha pénzt áldozol a 17 GBP-be kerülő PowerPack kiegészítésre. Amint van PowerPackod, már gyárthatod is a friss workflow-kat Alfredben. Én is csináltam sok ilyet és használok mások által fejlesztetteket – ebből szedtem most össze egy csokorra valót kedvcsinálónak. Lássuk a macit!

    Uni-Call

    FaceTime vagy Skype hívást tudok desktopról indítani anélkül, hogy az egeret használnám, így: callf calls

    Currency converter

    Árfolyamot vált, baromi gyorsan, bármiről bármire. Beállíthatod a kedvenc célárfolyamod default targetnek, de harmadik paraméterként bármikor konvertálhatsz tetszőleges másikra is: curr1 curr2 curr3

    Image dimensions

    Kép méretét adja vissza azonnal: dim1 dim2

    Encode

    URL/UTF8/Base64 formába konvertálja az inputot: encode

    Animgif search

    giffy

    Google translate

    UI-ben tökölés nélkül fordítja az inputot azonnal. Csináltam belőle 3 targetet: magyarra, angolra és lengyelre: gt-2hu gt-2en gt-2pl

    Safari history search

    h

    IP és Mac addressek CLI nélkül, gyorsan

    ip mac

    Disk space check azonnal

    space

    Compose mail

    m

    Keresés a menubarban egér nélkül

    menu

    Új file gyártása és azonnali megnyitása

    nf nfo

    Cheatsheet azonnal

    qr

    Rate current iTunes track és add current iTunes track to singalong playlist

    rate singalong

    Recent items

    rec rec-doc rec-downloads rec-folders

    Save current URL with tags

    save1 save2

    Send current URL

    send1 send2

    Show all iCloud tabs

    tabs

    Timezones

    tz Ha kedvet csináltam, már megérte! ]]>