Jak by vypadal skript v Pixie na najití všech uživatelů, kteří používají bash, (resp. s /etc/passwd vypsat první sloupec podle ":", když poslední obsahuje bash), nebo něco podobného?
Já když jsem byl "okouzlen" lisp syntaxí, tak jsem zkoušel na skriptovat v newLISP.
Pokud to nemá být oneliner, tak například takto (bez použití externích nástrojů):
(ns parser (:require [pixie.string :refer :all]
[pixie.io :refer :all]))
(defn select
[lines]
(->> (map #(split % ":") lines)
(filter #(ends-with? (nth % 6 "") "bash"))
(map first)))
(-> "/etc/passwd" slurp split-lines select)
Pro oneliner se dá ta funkce (její tělo) vecpat přímo do posledního threading makra, ale to už se blbě čte (IMHO).
Jak byste to opravil? Nikde jsem nenašel dokumentaci ke standartní knihovně. Existuje funkce, která spustí externí program a vrátí jeho výstup? Něco jako https://clojuredocs.org/clojure.java.shell/sh v clojure?
Ne, Pixie v současné podobě neumí STM, zmíním se o tom ve druhé (závěrečné) části. Popravdě - já to skoro nikdy nepotřeboval, protože pokud se aplikace skutečně píše stylem vstup→zpracování→výstup, tak tam buď není žádný skutečný stav, nebo se (většinou?) vystačí s atomy.
Základní knihovny: jsou řekl bych neúplné, zkusím to porovnat, ale už při převodu delších aplikací je to patrné. Většina rozdílů je řešitelná jednoduše přidáním funkce/makra.
Chapu to nahrazeni bashe necim jinym, kdyz bash nestaci. Zeptam se asi blbe, ale jaky je duvod to pouzivat? Kdyz mame build in python nebo si to muzeme odlehcit pres Lua? Chapu ten, zamer, ze aplikace a nejake funkcni skripty budou ve stejnem jazyce (to dava smysl pro programatora, nevim jeslti pro admina, kdyz v tom nikdy nepsal). Jeste neco zasadniho? Chapu, ze tam kde se pouziva Clojure to asi smysl dava, nebo to je i pro bezneho frantu admina?
To je správná otázka! Já tam vidím minimálně tři výhody, ale jestli to je pro běžného admina + nebo - záleží na něm :-) (a asi se BASHi stejně nevyhne...)
1) velmi snadné FFI, takže jdou volat i knihovní funkce (přiznám se, že nevím, jestli to neumí i BASH, dost pochybuju; Python a LuaJIT to zvládají určitě).
2) funkcionální kód se velmi snadno testuje a ladí (uznávám, pro onelinery je to buřt, ale pro delší věci je testovatelnost dost důležitá)
3) když je potřeba přenášet/ukládat/zálohovat různá metadata, tak .edn formát je IMHO mnohem lepší, rozšiřitelnější a flexibilnější, než se o něco podobného snažit v BASHi
(4) REPL Pixie je lepší, než ten v LuaJITu, u Pythonu je to napůl: klasický python interpretr je špatně použitelný, IPython naopak lepší.
Jak říkám, asi pro admina, co sám nedělá například deployment skripty nebo různé složitější zpracování a analýzu dat (například logů), to asi nebude to pravé.
podle toho co ctu vidim vase nadseni :) Asi taky bude zalezet na tom co myslite deploymentem, z mych usecases:
1.) system deployment / maintenance - ansible (na to co delam mi to staci), na vetsi veci vetsi kanon
2.) application deployment - zalezi na jazyce podle me, kde mam ruby pouzivam capistrano, kde mam python pouzivam fabric/fabistrano nebo fake.
3.) analyza dat hmm to resim pres jine nastroje, takze to asi nepotrebuju, nebo jsem jeste nenarazil na takovy usecase.
Takze rozumim, ze tam kde je Clojure a treba node.js (nemam s tim real zkusenosti) tak to dava smysl. Osobne se snazim vyhybat vsemu co obahuje slovo Java nebo obsahuje JS popr i pismenko J, ale to je muj nazor, chapu, ze se to nekde pouziva a tim padem musi resti.
Nicmene dekuju za odpoved.