одним рядком

написав собі функцію для «розрізання» текстового рядка на слова.

split_parameters () {
($DEBUG) && printf "Received: «%s»\n" "$PARAM_STRING"
  
($DEBUG) && printf "Start parsing parameters string...\n"

  # Parameters string is not empty, contains
  #   at least one character
  local TOKEN=""
  local CHAR=""
  local i=0

  # Split the raw parameters string into array
  while [[ i -lt "${#PARAM_STRING}" ]] ; do
    local CHAR="${PARAM_STRING:$i:1}"

($DEBUG) && printf "  Reading %s: «%s» (current token: «%s», string=%s)\n" $i "$CHAR" "$TOKEN" "$STRING"
    
    case "$CHAR" in
      " " )
        PARAM_ARRAY+=("$TOKEN")
        TOKEN=""
        CHAR=""
      ;;

      * )
        # Any other character just goes to the current token
        TOKEN="$TOKEN$CHAR"
        CHAR=""
      ;;
    esac
    i=$( expr $i + 1 )
  done

  # Do not forget that token still contains last parameter
  PARAM_ARRAY+=("$TOKEN")

($DEBUG) && printf "Finished parsing. Checking array...\n"

  # Process the parametrs array to set options and read value
  for (( i=0; i <= $(expr ${#PARAM_ARRAY[@]} - 1 ) ; i++ )) ; do
    printf "  Element %s: «%s»\n" $i "${PARAM_ARRAY[i]}"
  done

}

вельми задоволений собою. але те саме робиться одним рядком:

IFS=', ' read -r -a PARAM_ARRAY <<< "$PARAM_STRING"

насправді, звісно, не все так просто. я знав про рішення з read, але сподівався навчитися зберігати фрагменти між лапками ("…") вкупі, в одному елементі масиву. не вийшло — бо оболонка прибирає ті рядки ще на етапі передачі параметрів скрипту, як я зрозумів.

тому повернувся до простішого one-liner'а.

p.s. вподобав собі розставляти чекпоінти для зневадження, згодом DEBUG=true вельми спрощує життя, якщо коли щось іде не так:

($DEBUG) && printf "…\n"

gauge

— петько́, прилади?!
— триста!
— що «триста»?
— а що «прилади»?
(бородатий анекдот)

після налаштування отого монітора процесора на іскрах мені дуже захотілося змайструвати ще кілька моніторів — пам'яті, дискового простору

тож закатав рукава і попрацював трохи на bash'тані.

результат на скрінкасті (чи то пак на відеознятку). це мій gauge — універсальний псевдографічний візуалізатор відсотків для командного рядка на bash. він приймає як параметр число, і малює горизонтальний або вертикальний індикатор. додатковими параметрами можна наказати йому малювати рамки чи ні, домальовувати числове значення з різними розмірностями тощо.

динамічні індикатори на скрінкасті — то тестові скрипти, що в циклі викликають gauge.

одна біда: десь я нахімічив, і скрипт глючить, якщо параметри передавати не явно, а запомповувати в stdin, приміром так:

echo 45 | gauge

але я знайду причину, і тоді ніщо не спинить мене наклепати різних індикаторів до системної панельки.

монітор процесора на іскрах

індикатор завантаження процесора на скріншоті — текстова псевдографіка. вивід зліплено з пари простеньких bash-скриптів та вбудованої функції виводу панелі tint2 (так, я знову на openbox'і).

найцікавіший з двох скриптів — генератор спарклайнів spark, що я його колись давно випадово надибав на github'і та трохи підправив для своїх потреб.

оті «спарклайни» — цікавинка, я не стрічав раніше цієї назви. англійська вікіпедія про них знає, українська — поки що ні. і конче треба вигадати якусь українську назву для них.

другий скрипт, для розрахунку навантаження на процесор, я запозичив на rosetta code і теж досить сильно похакав.

p.s. скрінкаст (ще один претендент на цікавий новотвір) записано за допомогою вельми приємної невеличкої софтинки peek для linux.
пережили день святого валентина в канаді. спробую коротко передати свої враження… за допомогою образної аналогії. лише прошу не аналізувати її дослівно.

уявіть собі «день презерватива». в цей день ви купуєте кольорові презервативи і весело надуваєте разом з дітками. на вулиці чи не кожен третій громадянин і громадянка йдуть на роботу підстрибом, несучи наповнені гелієм презервативи у формі сердечок. кондитери змагаються в майстерності, виготовляючи мармулядові презервативи. в скляні презервативи наливають пиво, в'язані презервативи носять на голові, рукавички з пиптиками на кожному пальчику продаються на кожній розкладці. ієдине, чого ви не побачите і не почуєте в цей день — та й взагалі будь-якого дня, — то для чого ці презервативи насправді потрібні.

день святого валентина в канаді — це що завгодно, але не день закоханих. дурнуваті червоні валентинки, цукерки або інші подарунки дарують одне одному хто завгодно, де завгодно, але вони ніяк не стосуються витоків свята та теми пристрасного кохання, бо ця тема вельми затабуйована.

це все нмсд, звісно.

підтримайте українське!

агов, панове українці. щойно звернув увагу, що itc.ua — (колись виклчюно) російськомовний онлайновий часопис про it, — вже кілька років публікує час від часу деякі новини та огляди українською мовою (з теґом «україна»). редакцію вже багато разів просили переходити на українську, але лише зараз я починаю розуміти, як смішно ці заклики звучали: я відкрив кілька новин українською на сайті, і бачу переважно російськомовні коментарі під ними! українська мова з'являється там вельми рідко, навіть під новинами українською.

тепер гляньте на ситуацію очима редакції: хтось там робить експеримент, публікуючи новини українською, але бачить, що вони нікому не цікаві — їх продовжують читати й коментувати ті самі люди, що читають російські тексти. яку мотивацію робити український сайт чи хоча би публікувати матеріали українською може редакція принести керівництву?

звідси питання, чи то пак прохання: а чи так вже нецікаво вам читати українську стрічку на itc.ua та коментувати там? навіть якщо потенційно це могло би допомогти зробити цей якісний — найкращий наразі в україні, нмсд, — ресурс про itc україномовним?

зрозуміло, що війна, зрада і «всьо вот ета вот» важливіші, ніж така дрібничка, але особисто я хотів би колись читати український itc.ua. як ще натякнути? підтримайте українське!
не наслухаюся і не надивлюся.

текстові редактори: atom vs geany

люблю текст, а ще більше за текст я люблю… простий текст. тож мені часто потрібен текстовий редактор — і то не примітивний, а такий, щоби зручний і приємний. оскільки emacs я не подужав приборкати до пуття (а за vim навіть не брався) — жоден з них не видається мені ані зручним, ані приємним. довший час я користувався geany на linux та windows, але щось мені в ньому муляло, аж поки я не спробував…

atom. вільний текстовий редактор, зліплений з усього, що було під рукою (c++ / node.js / coffeescript / javascript / css / html — див. вікіпедію), навголо ядра chromium. я мав це спробувати.

за кілька днів повернувся до geany, і поки що з ним залишуся. далі короткий підсумок тестування.

обидва редактори
+ мають все, що потрібно для звичайної роботи з текстом (я не програмую, порівнювати специфічні функції не беруся);
+ показують стрічку з «мапою» файлу (здається, вперше з'явилася в sublime text);
+ дозволяють записувати/відтворювати макрокоманди;
+ мають чималу кількість втулків.

atom
+ має підсвітку синтаксису для формату ledger!
+ пропонує значно більшу кількість втулків, включно з досить екзотичними (кому годинник та заряд батареї ноутбука в статусі?);
+ схематична «мапа» файлу (втулок) вигулькує під час гортання, потім ховається і не заважає;
+ має режим no distraction (втулок);
+ пропонує зручніший (без модальних діалогів) інтерфейс пошуку по тексту;
– гарячі клавіші не працюють в кириличній розкладці (wtf?)
– має проблеми з відображенням шрифтів на екранах з високою роздільністю під windows (wtf?!)
– дуууууже повільно стартує, як повновісний веб-оглядач чи текстовий процесор.

geany
+ стартує миттєво!
+ виглядає чудово як на linux, так і на windows;
+ жодних проблем з гарячими клавішами незалежно від розкладки;
– не має підсвітки синтаксису для формату ledger (і щоби додати, тре, здається, мати докторат з програмування);
– не має режиму distraction-free (і не матиме, здається).

в підсумку geany не має кількох функцій, котрі не є критичними — зате бездоганно реалізує справді важливі, тому його залишив, atom згодував злому pacman'ові.

а чим ви редагуєте свої тексти?

ledger is awesome

я поки що просто залишу це тут:
цитата | «ledger is awesome stuff — it's basically a multi-variable tree structured calculator» (архів hacker news).
для тих, хто любить гуглити, дражнилочка: облік персональних фінансів у форматі plain text та автомагічне формування звітів… але цитати це не пояснює, тут треба глибше копати. колись обов'язково напишу.