Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

A ile ty skryptujesz?

Jedna z książek, która na mnie bardzo wpłynęła swego czasu to zadziwiająca pozycja - "Zarządzanie czasem. Strategie dla administratorów systemów". Nie żebym był administratorem systemów. Nie, żebym kiedykolwiek myślał o kwestii zarządzania czasem - ten zasadniczo dość często marnuję.

Ale książka ta zawiera trochę rzeczy, które po zaimplementowaniu w odpowiedni sposób zdecydowanie poprawiły jakość mojego życia. Niektóre z nich dotyczą prostych rzeczy, takich jak to, że portfel zawsze leży w tym samym miejscu, więc wiem, gdzie go szukać. Nie zaimplementowałem jednak systemu zarządzania zadaniami opisanego przez autora (ani też nie stosuję GTD ani pomidorów). Książka jednak pomogła mi zrozumieć kilka prawd dotyczących robienia pewnych rzeczy. A że była skierowana do ludzi "technicznych", to pomogła zrozumieć pewne prawdy dotyczące technikaliów, które "zwykli" ludzie będą ignorować.

Jedną z rzeczy, o których warto pamiętać, są skrypty. Skrypty pozwalają naszym komputerom robić pewne rzeczy bez naszego świadomego udziału. Skrypty zrobią po kolei to, co zrobiłby człowiek. I zazwyczaj zrobią to szybciej od człowieka.

Co powinniśmy skryptować? Wszystko! No, może niekoniecznie. Mówi się, że istnieją dwie kategorie rzeczy do zrobienia: rzeczy trudne i rzeczy łatwe. Przemnożyć to należy przez częstość wykonywania: rzeczy często wykonywane, rzeczy rzadko wykonywane. Co warto zautomatyzować z takich grup?

Rzeczy łatwe, ale wykonywane często.

Jest garść rzeczy, które są dość proste, ale wykonuje się je dość często i są żmudne. Na przykład prosty backup - podłączam dysk zewnętrzny i na niego kopiuję ważne dla mnie pliki.

Napisałem sobie do tego prosty skrypt .bat, który klikam dwukrotnie i który wykonuje wielokrotnie kopiowanie różnych źródeł i celów przy użyciu nieocenionego narzędzia robocopy. Po prostu klikam i kopia się dzieje sama, nie muszę się specjalnie przejmować - wszystko się dzieje samo.

W podobny sposób zautomatyzowałem sobie konwersję filmików z kamery samochodowej. Moja kamerka jest bardzo prostym sprzętem, który zapisuje filmiki w postaci plików AVI z kodekiem MJPEG. Te same pliki przekonwertowane do kodeka H.264 i w kontenerze MP4 zajmują o wiele mniej miejsca i nie tracą zbytnio na jakości. Konwersja jest dość prosta, wystarczy Handbrake lub mencoder. Dzięki automatyzacji nie muszę pamiętać o wszystkich parametrach, które powinienem przekazać do HandbrakeCLI i których nazwy niekoniecznie są specjalnie intuicyjne. Nie muszę również niczego klikać i mogę skrypt odpalić dla kilku filmików naraz. A do tego mogłem zrobić jeszcze jedną rzecz - skrypt potrafi automatycznie nazywać pliki w zależności od daty zapisu do pliku przez co z "SUNP0001.AVI" robi się nagle "20150503-1021.mp4". Mógłbym zmieniać nazwy ręcznie, ale coś może mnie wyręczyć!

Pewnym problemem może być tylko fakt, że skrypt wygląda jak magiczne zaklęcie i działa zapewne dobrze tylko dla określonego rodzaju filmików z określonej kamerki.

Rzeczy trudne, wykonywane rzadko

Są też operacje, które robi się dość rzadko i są nieco skomplikowane. To też warto zautomatyzować. Głównie dlatego, że jeżeli się coś robi rzadko, to się o tym potem zapomina.

Taką operacją może być na przykład stworzenie nowego certyfikatu do domowego OpenVPN. Operacja nie jest przesadnie trudna, ale wymaga uruchomienia openssl kilka razy podając różne parametry w odpowiedniej kolejności, a potem skopiowania wygenerowanych plików w odpowiednie miejsca. Skrypt, który raz napisałem, oszczędza moją pamięć - nie muszę się martwić tym, że zapomnę zrobić -config w wywołaniu openssl przez co to niezbyt zadziała.

Zdarza się również, że mam filmy zapisane kodekiem H.264, ale w kontenerze MKV. Mój telewizor nie obsługuje tego, ale poradzi sobie z MP4. Rzadko to rzadko, ale fajnie by było przerobić jedno na drugie, a najlepiej bez transkodowania i straty jakości (i czasu!) z tym związanej. Sprawa nie jest trudna, ale używa się narzędzi o których nie pamiętam (mkvtoolnix i MP4Box) aby wyekstrahować ścieżkę wideo i audio, a potem włożyć do pliku MP4.

I w końcu jest jeszcze jedna rzecz, wykonywana rzadko, ale skomplikowana. Ustawianie nowego komputera. Lubię kiedy pewne ustawienia systemu są skonfigurowane w określony sposób. Oczywiście, byłbym w stanie to wszystko samemu wyklikać, ale to zajmuje czas, a i tak zapewne zapomniałbym, co trzeba zrobić. Skrypt sam wyłączy pewne rzeczy, inne włączy i w ten sposób dostosuje komputer do moich oczekiwań. A jak często się go użyje? Raz na kilka lat!

Tutaj dygresja: podobny skrypt do konfiguracji wstępnej komputera, tylko służbowego, może być już wykonywany o wiele częściej, w zależności od wdrożenia. Używanie skryptów ma oczywiście też zaletę taką, że wykonuje się to na wielu komputerach automatycznie równocześnie. Bo są rzeczy wykonywane często i są też rzeczy wykonywane wielokrotnie na różnych maszynach. Nie jestem administratorem, więc Chef i Puppet to dla mnie czarna magia, ale proste skrypty spełniają obecnie swoje zadania.

A pozostałe dwie kategorie?

No dobrze, zostały nam proste rzeczy wykonywane rzadko - tych bym nie automatyzował.

Mam na dysku plik .bat, który "opakowuje" szyfrowanie z użyciem GPG. Ale jest to na tyle prosta komenda, że wpisuję ją "z palca" równie szybko. I nie muszę się zastanawiać ani jak się mój skrypt nazywa, ani jakie parametry mu są potrzebne.

Bo czy jest duża różnica pomiędzy:

gpg-encrypt ktos@ktos.info file.txt

a

gpg -e -a -r ktos@ktos.info file.txt

Gorzej się sprawa ma z rzeczami trudnymi, wykonywanymi często. Autor książki radzi w takiej sytuacji aby napisać lub znaleźć istniejące oprogramowanie, na wyższym poziomie działania niż prosty skrypt. Granica pomiędzy skryptem i programem oczywiście może być zatarta, ale to temat na inną dyskusję.

Mam na dysku również prosty skrypt, który miał w założeniu porównywać dwa foldery zwracając różnice pomiędzy nimi. Sposób prezentacji jego danych nie był specjalnie przyjazny. Okazało się, że to samo doskonale jest przecież w stanie zrobić kdiff3 czy WinMerge i to w graficznej formie zamiast suchej listy plików.

W podobny sposób wygodniejsze od wpisywania magicznych poleceń okazało się dodanie pod menu kontekstowe opcji "zmień rozmiar obrazka" uruchamiającego graficzny program pozwalający na wykonanie jeszcze do tego podglądu. A już w ogóle krokiem naprzód było zmienienie ręcznego wrzucania plików do galerii zdjęć (bo chodziło o galerię zdjęć na stronie internetowej) odpowiednią aplikacją internetową, która dostawała zdjęcia i sama robiła miniaturki. I pozwalała sortować i zmieniać kolejność interfejsem graficznym.

I także skrypt PowerShella do wyliczania sumy MD5 pliku jest gorszy od prostego programu md5sum - i o wiele mniej przenośny, bo istnieje tylko na moich komputerach, a md5sum także na wielu Linuksach.

Automatyzacja - opisz to!

Automatyzujesz? Świetnie! Tylko warto to robić z głową. Oprócz tego, co skryptować, ważne jest jeszcze jedno - aby to udokumentować. Mam na dysku kilka skryptów, które działają, ale do których nigdy nie pamiętam co należy przekazać, aby zadziałało. I muszę je sobie otwierać, analizować, i dopiero uruchamiać. Fajnie jest, gdyby to wszystko miało zrobione komentarze i opisy jak się używa. Niestety, część z nich pochodzi z mojej mrocznej przeszłości, kiedy wszelkiej pracy nad komentowaniem kodu unikałem jak ognia.

Moim osobistym problemem stało się również kolekcjonowanie skryptów w pewnym momencie. Było kilka rzeczy, które uznałem, że sobie zapiszę, że zapewne się przydadzą. I nigdy ich nie używałem. Obecnie siedzą w katalogu C:\Scripts i czekają, że kiedyś na nie spojrzę. Lub może by tak wreszcie usunąć? 

programowanie

Komentarze

0 nowych
marrrysin   6 #1 03.05.2015 23:07

Nic, chciałbym zacząć ale mam ciągle pod górkę... :P
Wartościowy wpis, mam nadzieję że znajdę tyle energii żeby przeczytać tę książkę.

Autor edytował komentarz.
Hatred   5 #2 03.05.2015 23:23

@marrrysin: Ale to jest straszny staroć. Pierwsze wydanie było w roku 2007 ,,,lol,,,

jrd   4 #3 04.05.2015 11:15

Książkę posiadam... skryptowałem wiele, teraz może mniej. Ale jeśli chodzi o dokumentowanie, to już mój promotor na studiach (dawno, dawno temu w odległej galaktyce :-) wpoił mi komentowanie kodu. Szczególnie, że pisałem pracę w assemblerze... gdzie bez komentarza po krótkim czasie nie pamiętałbym kompletnie o co w tym wszystkim chodziło. I tak mi zostało, za co mojemu promotorowi jestem wdzięczny. Nigdy nie piszę programu bez komentarzy... choć nie należy przeginać w drugą stronę i wpisywać komentarzy na siłę, gdzie tylko się da.

Autor edytował komentarz.
awangardowy   7 #4 04.05.2015 12:02

ja bardzo dużo:
- Windows:
python + wsadowe bat
(do PowerShella mnie nie ciągnie)

- Linux:
bash + python + czasami coś uzupełnię javą

ze skryptami jest różnie... raz pisałem skrypt pół dnia, żeby tylko osiągnąć jakiś skomplikowany efekt. Udało się. Ale co z tego, jak ze skryptu skorzystałem może 5-10 razy. Szybciej byłoby gdybym nie stracił pół dnia i nie ułożył tego skryptu. Niby jest taka teoria, że im więcej skryptowania tym później szybciej się to robi, ale z tym też różnie bywa. W tej chwili mam z 40 skryptów, i rzeczywiście jest coraz łatwiej i szybciej coś napisać, ale można też stracić czas (a nie tylko go zyskać).

Autor edytował komentarz.
mktos   10 #5 04.05.2015 12:57

@Hatred: To nie jest książka stricte techniczna, one nie starzeją się tak szybko.

Jest tam troszkę kodu i technikaliów, ale np. Makefile opisywany przez autora, czy Postfix, praktycznie się nie zmieniają. Aczkolwiek wzmianki o PDA na systemie Palm, pagerach, CVS, T1 itp. są śmieszne w dzisiejszych czasach :-)

mechanic__   4 #6 04.05.2015 13:03

Co do obliczania sum kontrolnych, to jak się nie myle w wersji 4 PowerShella, dodali komende Get-FileHash, czyli od Windowsów 8.1(nie wiem czy w Win8.0 jest) w góre, już jest wbudowane, właściwie dzięki temu częściej sprawdzam sumy.

wojski   7 #7 04.05.2015 13:49

@awangardowy: Jeżeli poprzez to "tracenie czasu" czegoś się nauczyłeś to warto. Następnym razem masz wiedzę, którą możesz wykorzystać i możliwe, że skrypt wstawisz do crona i zapomnisz o części obowiązków :)

Rower1985   6 #8 04.05.2015 15:39

Ja tam wolę okienkowe programy do automatyzacji. Raz nagrywam makro z ruchami myszy/danymi z klawiatury i jak przyjdzie potrzeba, to je uruchamiam. Chyba to łatwiejszy (i oszczędny czasowo) sposób, niż klepanie w notatniku (zapis do pliku .bat)/konsoli jakiś komend?

awangardowy   7 #9 04.05.2015 16:51

@Rower1985:
a jak ci się zmieni układ okienek w "Windows"? Korzystałem z autohotkey, mam skrypty po 500 linii, niejeden raz nagrywałem jakieś makro. Przyszedł format dysku i połowa się "zepsuła".

co jak co, ale vim+python+bash+Linux miażdży wszystko :)
Windows nie nadaje się do skryptowania, a PowerShell (w porównaniu do wygody bash/zsh) to masochizm.
pisanie skryptów ma sens, wtedy gdy system ma jakiegoś potężnego shella który trzęsie całym układem katalogów i plików a użytkownik ma zmiar z tego korzystać, ale musi to też być wygodne i przejrzyste.
Ewentualnie można przejść do tych tradycyjnych języków - typu C++/java/php - i już skupiać się na programowaniu bezpośrednio, a nie pisać kodu w wątpliwych autohotkeyach czy tam językach interpretowanych.

a co do "czasowo" to różnie bywa, przemyślenie i napisanie 2 linijek w skryptu bash to kilkanaście sekund dla kogoś wytrawnego...

Autor edytował komentarz.
  #10 04.05.2015 17:36

Może nie jestem adminem, tylko koderem, ale staram się skryptować wszystko. Nawet jeśli użyję tylko raz. To poprawia moją wiedzę i lubię to robić. W dłuższej perspektywie można wyznaczyć sobie lepsze narzędzia. Albo, żeby szybciej pisać jednorazowe skrypty. Albo, żeby te jednorazowe sprawy były jakoś standaryzowane lepiej.

  #11 04.05.2015 18:29

Wszystko fajnie, tylko książka trochę trudnodostępna :/

  #12 04.05.2015 18:34

jeżeli chodzi o komentowanie skryptów PowwerShell-owych polecam poczytać o comment based help. Dzięki kilku dodatkowym linijkom Twoje skryptybędą działały jak natywne commandlety - z podpowiadaniem przełączników włącznie

Rower1985   6 #13 04.05.2015 18:50

@awangardowy: Okienka zmaksymalizowane i po problemie :)


Skrypty w bashu na linuxie to inna bajka - dają masę możliwości, niż w windowsie. Także uważam, że skryptowanie na Windowsach nie ma sensu.

mktos   10 #14 04.05.2015 20:38

@awangardowy: IMO zarówno PowerShell, jak i bash nie zasługują na miano "wygodnych" narzędzi. Brr. W obydwu składnia mnie po prostu odrzuca.

Pamiętam, że wiele lat temu profesor od systemów operacyjnych opowiedział nam o csh, który miał mieć według niego składnię "podobną do C". Ależ srodze się zawiodłem na tcsh i tym "podobieństwie" do C ;-)

@Rower1985: Temat skryptów dla Windows jest bardzo szeroki - od plików wsadowych, przez VBScript, do PowerShella. Też jest masa możliwości.

Windows warto sobie wspomóc niektórymi narzędziami GNU coreutils tak nawiasem, bez tego nie ma życia.

Lasdar   4 #15 06.05.2015 01:18

Fajny wpis. Osobiscie dopiero raczkuje w skryptowaniu daybyday, do tego bardziej w pracy niz w domu, ale mam zamiar to zmienic, a dzieki temu wpisow zabiore sie za to wczesniej niz pozniej.

Z wlasnego doscwiadczenia moge polecic rzecz wydawaloby sie oczywista, w twoim wpisie jednak pominieta, mianowice podpinanie skryptow do windowsowego Task Schedulera, badz jego linuksowego odpowiednika jakim jest chyba crontab. Poczynajac od skryptow okresowo backupujacych dane, po zabijanie procesow pozostawianych przez zle zaprojektowane aplikacje do ktorych kodu nie ma sie dostepu.

Serdecznie tez dziekuje za przyklad uzycia HandBreaka. Doslownie kilka dni temu przyszla mi na mysl zmiana FormatFactory na cos command lineowego. Swoja droga ta linijka Powershellowa moglby byc dodana jako tekst kopiowalny, jako baza dla laikow takich jak ja.

Pozdrawiam,

Autor edytował komentarz.
mktos   10 #16 06.05.2015 16:15

@Lasdar: Ta linijka jest przygotowana dla moich filmików z kamerki, które są dość specyficzne (i z moimi ustawieniami profilu).

Można to samo podpatrzeć samemu - uruchomić HandBrake i obejrzeć Activity Log i tam jest polecenie, które on wydaje sobie w wersji konsolowej.