Показ дописів із міткою підказки. Показати всі дописи
Показ дописів із міткою підказки. Показати всі дописи

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

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

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

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

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

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

рецепт лікування знайшовся на форумах videolan: потрібно налаштувати масштабування інтерфейсу qt перед стартом vlc:

QT_SCREEN_SCALE_FACTORS=0.5 vlc

зрозуміло, що не обов'язково щоразу друкувати так багато, можн експортувати змінну у файлі конфігурації ~/.bashrc, створити аліас для vlc з  в тому ж таки ~/.bashrc тощо. головне, що після цього відео відтворюється нормально.
гаразд, я поборов тачскрін — тепер працює гортання двома пальцями, масштабування та емуляція правої кнопки миші за довгим тапом, решта жестів мені не потрібні, тож не пробував.

початок історії з налаштуванням планшетного режиму в попередньому дописі.

в тенетах знайшлося багато підказок та рецептів на різні випадки, які лише умовно можна об'єднати темою «тачскрін і linux», і треба думати. мій випадок був такий: manjaro linux (на базі arch'а) розпізнав тачскрін як підключений пристрій, підключив драйвер і дозволив користуватися як однокнопочною мишкою. найточнішу підказку знайшов на форумах arch'а. ось вивід xinput list:

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SYN1B7B:00 06CB:2991 Touchpad             id=10   [slave  pointer  (2)]
⎜   ↳ SYNAPTICS Synaptics Touch Digitizer V04 Pen       id=14   [slave  pointer  (2)]
⎜   ↳ SYNAPTICS Synaptics Touch Digitizer V04   id=15   [slave  pointer  (2)]
⎜   ↳ TESORO TESORO Gaming Mouse                id=16   [slave  pointer  (2)]
⎜   ↳ TESORO TESORO Gaming Mouse                id=18   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]
    ↳ Acer WMI hotkeys                          id=12   [slave  keyboard (3)]
    ↳ HD WebCam                                 id=13   [slave  keyboard (3)]
    ↳ TESORO TESORO Gaming Mouse                id=17   [slave  keyboard (3)]
    ↳ USB-HID Keyboard                          id=19   [slave  keyboard (3)]
    ↳ USB-HID Keyboard                          id=20   [slave  keyboard (3)]

цікаво, до речі, чому миша tesoro sagitta spectrum зареєструвалася як два пристрої… але то питання на інший раз. тачскрін теж зареєстрований двома пристроями, і я не розумію, що то за pen (id=14), адже стилусом не користуюсь; мене цікавив лише id=15 (підсвітив кольором). параметри пристрою (вивід xinput list-props 15):

Device 'SYNAPTICS Synaptics Touch Digitizer V04':
        Device Enabled (139):   1
        Coordinate Transformation Matrix (141): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Calibration Matrix (449):      1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Calibration Matrix Default (450):      1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Send Events Modes Available (262):     1, 0
        libinput Send Events Mode Enabled (263):        0, 0
        libinput Send Events Mode Enabled Default (264):        0, 0
        Device Node (265):      "/dev/input/event13"
        Device Product ID (266):        1739, 30332
        libinput Horizontal Scroll Enabled (267):       0

отже, суть підказки на форумах arch в тому, що потрібно додати відповідний розділ до файлу конфігурації xorg. в старіших дистрибутивах це /etc/X11/xorg.conf, а в новіших може бути кілька окремих файлів у теці /etc/X11/xorg.conf.d — у мене там лежали файли з налаштуваннями клавіатури, монітора та ще якась інформація від автоматичного конфігуратора manjaro, але нічого про тачскрін:

00-keyboard.conf
90-mhwd.conf
90-monitor.conf

задля експерименту я створив новий файл у цій теці (з-під рута або sudo!), назвавши 10-touchscreen.conf, додав запропонований на форумі код.

щоправда, на форумі запропоновано трохи довший фрагмент, але методом наукового тику (себто емпірично) я з'ясував, що ідентифікувати драйвер та точку монтування тут не потрібно. зокрема, точка монтування в мене «стрибає» від завантаження до завантаження, але на роботу тачскріна з таким файлом конфігурації то ніяк не вплинуло.

Section "InputClass"
        Identifier "touchscreen"
        MatchIsTouchscreen "on"
        Option "Mode" "ABSOLUTE"
        Option "TapButton1" "1"
        Option "TapButton2" "2"
        Option "TapButton3" "3"
        Option "Evdev Wheel Emulation" "on"
        Option "Evdev Wheel Emulation Axes" "6 7 4 5"
        Option "VertTwoFingerScroll" "on"
        Option "HorizTwoFingerScroll" "on"
        Option "EmulateTwoFingerMinZ" "40"
        Option "EmulateTwoFingerMinW" "8"
        Option "CoastingSpeed" "0"
        Option "VertScrollDelta" "50"
        Option "HorizScrollDelta" "50"
        Option "ZoomDistance" "100"
EndSection

і це, власне, все. можна перезавантажити комп'ютер, або лише ікси (ctrl+alt+backspace), і тачпад працює як слід. я в захваті від свого 13-дюймового планшета =)

ноутбук в режимі планшета

припустімо, у вас є сучасний ноутбук-трансформер з сенсорним дисплеєм, і на ньому linux, і це не ubuntu… тоді є висока ймовірність, що…
  • серсорний екран працює в примітивному режимі (без мультитача і жестів на кшалт скролу двома пучками);
  • після складання в планшет клавіатура і тачпад не працюють;
  • екранної клавіатури немає «з коробки»;
  • нема як швидко повернути зображення на екрані в портретну орієнтацію та назад;
  • автоматичний поворот зображення не працює.
і так, ubuntu не пропонувати (так само як встановлення kde/plasma, якщо там все це працює з коробки).

поки що не все з цього пофіксив, але дещо знайшов.

екранна клавіатура

поки що користуюсь onboard, але без зручностей, до яких звикаєш на мудрофоні: скажімо, відкривати клавіатуру доводиться руками з системного меню (хоча onboard має опцію автоматичного вигульку, але вона не працює без модуля gnome, який в мене не вставновлений і поки що не потрібен.

увімкнення клавіатури і тачпада

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

#!/bin/sh
[ "root" != "$USER" ] && exec sudo $0 "$@"
lsmod | grep '^[^ ]*hid' | cut -f1 -d " " | xargs -n1 rmmod
udevadm trigger
sleep 1
xinput|grep SYN1B|cut -f2 -d"="|cut -f1|xargs -n1 xinput --enable

скрипт потребує рутових прав для роботи, довелося трохи поморочитися із sudoers'ами, аби дозволити виконання з користувацького профіля.

поворот зображення

для повороту знайшов інший простий скрипт. довелося трохи змінити один рядок, бо в мене xrandr не позначає поточний екран як primary:

XDISPLAY=`xrandr --current | grep " connected" | sed -e 's/ .*//g'`

так, в лапках є пробіл перед connected, інакше, природньо, grep видає також рядки з disconnected. запускається з параметром normal / left / right / inverted для встановлення відповідної орієнтації, рута не потребує.

додав у системне меню та «повісив» на клавіатуру (super+стрілки), працює але хочеться колись прив'язати до акселерометра, тож ще гуглитиму.

далі буде.
продовжую ексеприментувати з різними інструментами для віддаленої роботи з комп'ютером. мета — отримати зручний і прозорий доступ до інтернету з українського ip через vpn з канади.

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

openssh: командний рядок на віддаленому комп'ютері

підключаюсь до комп'ютера в україні за допомогою того ж таки teamviewer'а — і вкотре радію, що перед від'їздом налаштував цей спосіб доступу: не елегантно, але працює. створюю собі там новий користувацький профіль (нехай test_ssh), щоби не логінитися через ssh в той, під яким там працюють люди.

попри чималий вже досвід використання linux, я майже чайник у багатьох питаннях, що стосуються налаштування серверних функцій. аж ось виникло бажання навчитися деяких фокусів — приміром, підключатися по ssh до віддаленого комп'ютера (я в канаді, комп'ютер — в україні), дистанційно налаштувати там vpn і зробити собі зашифроване вікно у світ.

після закриття fs.to і ex.ua задача трохи втратила свою актуальність, але не зовсім: лишаються торенти, за які тут можуть надавати по руцях. ну і взагалі — чи не сором цього не вміти, користуючись linux'ом? отож.

наразі на віддаленій машині працює teamviewer — чудовий інструмент, але не  «канонічний»: не вільний і працює над wine'ом, що прийнятно для запуску забавок, але не для більш чи менш серйозних задач.

duckdns: як «пробити» динамічний ip

отже, задача — «пробити» динамічний ip (себто, задача не в самім ip, зрозуміло, а в тому, щоби адресувати віддалену машинку, яка отримує динамічний ip від свого провайдера). найвідоміший сервіс — dyndns, але він віднедавна недоступний задурно. з чималої кількости альтернатив зупинився на duckdns. сервіс прекрасний своїм мінімалізмом.

скрипт quaketerm: проблема xy

поміняв два рядки у скриптику для «квейкізації» терміналу — вирішив остаточно проблему з фокусом вікна. щоправда…

…спершу довелося усвідомити, що пошук способу керувати фокусом був типовим випадком «проблеми XY»: коли програміст перестає бачити суть задачі, замість цього борячись із проблемами свого уявлення про її вирішення, чи якось так.

зненацька усвідомив, що зовсім не обов'язково робити shade, below для вікна терміналу! — все одно повна аналогія з терміналом quake не працює через брак візуалізації розгортання вікна згори донизу. а коли так — достатньо мінімізувати вікно, і фокус автоматично повертається до попереднього вікна в стеку.

все, задачу вирішено.

щоправда, довелося скористатися xdotool, бо wmctrl наразі не вміє мінімізувати вікна. тепер міркую, що треба було би взагалі весь скрипт переписати під xdotool.

quaketerm і brocket — прості bash’ики

днями відкрив для себе два хаки, і тепер навіть не уявляю, як користувався ноутбуком без них раніше:
  • terminator в режимі quake;
  • brocket.
прості скрипти справді роблять комп'ютер зручнішим.

    terminator в режимі quake

    спершу був термінал quake, потім та ж красива ідея дала yakuake, tilda і guake. але я давно користуюся terminator'ом, звик до нього. простенький bash-скрипт дозволяє перетворити будь-який термінал на pull-down у стилі quake:
    #!/bin/sh
    TerminalName="Quaketerminal"
    TerminalX=183
    TerminalY=0
    TerminalW=1000
    TerminalH=500
    # Check if Terminator window exists
    # and launch terminator if it doesn't
    wmctrl -l | grep ${TerminalName}
    if [ $? -ne 0 ]; then
      terminator --title=${TerminalName} --geometry=${TerminalW}x${TerminalH}+${TerminalX}+${TerminalY} &
    fi
    # Unshade and bring to front
    if [ -f $HOME/.quaketerm.shaded ]; then
      wmctrl -F -R ${TerminalName}
      wmctrl -F -r ${TerminalName} -b remove,below
      wmctrl -F -r ${TerminalName} -b remove,shaded
      rm $HOME/.quaketerm.shaded
    # Shade and send to back
    else
      wmctrl -F -r ${TerminalName} -b add,shaded
      wmctrl -F -r ${TerminalName} -b add,below
      touch $HOME/.quaketerm.shaded
    fi
    exit 0

    чернетку скрипта знайшов у тенетах, трохи вдосконалив для себе. я назвав скрипт quaketerm, кинув до $HOME/bin і «причепив» на win-t. працює як годинник. хоча код кривуватий і потребує ще допилювання:
    • задавати ширину терміналу в % від екрану і центрувати автоматично;
    • знайти спосіб повертати фокус до попереднього вікна, ховаючи термінал.

    brocket

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

    тепер достатньо на win-f (або win-w) «повісити» таке:

    brocket -c firefox

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

    навіть і не пригадаю, звідки в мене таке в голові сиділо, але я приблизно уявляв собі, що треба шукати. трохи погугливши та почитавши, спинився на makeblock, а серед їх продуктів — на комплекті starter robot kit: в одній коробці все, що треба для збирання гусеничного «марсохода» на базі arduino, з керуванням по bluetooth, можливістю додавати модулі та з доступом до вихідних кодів програми. ну чи ж не мрія?
    • вам посилка! про вартість, замовлення, термін доставки;
    • перші враження. про півгодини концентрованого хлопчачого щастя;
    • прикрий фейл. про те, що зібраний марсохід не хоче їхати;
    • без паніки! про те, навіщо читати далі;
    • головна біда. про брак детальної покрокової підказки в інструкції makeblock;
    • діагностика проблеми. про спроби зрозуміти, чому дистанційне керування не працює;
    • нова надія. про дві невеликих, але важливих події;
    • на роздоріжжі. про вибір програми для завантаження прошивки робота;
    • майже готово? про важливі налаштування перед завантаженням прошивки;
    • компіляція і завантаження. про підступний нюанс і done uploading;
    • поїхали! про успішне випробування;
    • резюме і плани. про те, як ще можна вдосконалити марсохід.
    допис довгий, містить багато ілюстрацій, одне відео, і має щасливий фінал.

    dlna на колінці за 5 хвилин

    вітальню прикрашає телевізор з чималою діагоналлю, але власне до телебачення він ніколи не був підключений — це smart tv з підключенням до інтернету по wifi та зовнішнім usb-накопичувачем з невеликою фільмотекою. за бажання переглянути якийсь новий фільм є кілька опцій:
    • відкрити megogo — і розчаруватися, бо вибір куций, переважно попса і кацапські «шедеври», нові стрічки за окрему плату (незважаючи на річну передплату), і цвях у кришку труни: додаток megogo на телевізорі не дозволяє вибрати мову звукової доріжки навіть для тих (порівняно небагатьох) фільмів, які її мають (на пк чи смартфоні це можна зробити);
    • шукати в тенетах (ex.ua, fs.to, піратські торент-звалища тощо), завантажувати на ноутбук, перезаливати на накопичувач — і тоді вже дивитися.
    оте «перезаливати на накопичувач» почина дратувати: процес нешвидкий та ще й тре з дивану вставати, щоби кабель перекинути двічі. морока.

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

    перше, що трапилося під руку в версії для linux — tvmobili. дуже обмежене в безкоштовній версії, але швидко налаштувалося і дозволило наживо перевірити — працює. але це не true linux way, тож одразу видалив. ще трохи пошукавши в тенетах, дізнався про minidlna (зараз називається readymedia) в репозиторіях debian — мабуть, це те, що треба.

    традиційно найдетальніша підказка з налаштування — в енциклопедії archlinux. все досить просто.

    підказка: скрипти bash без sed/cut/awk

    в розділі tips, tricks and scripts англомовного форуму crunchbang знайшов цю підказку за авторством imbecil: як уникнути використання (чудових!) утиліт sed, cut і awk для нескладної обробки текстових рядків у bash-скриптах. стаття досить детально викладена, з прикладами — тож вирішив перекласти повністю і зберегти тут собі на згадку.

    може ще комусь стане в пригоді? тоді не полінуйтеся, будь ласка, зареєструватися на форумі й подякувати авторові =)

    1. вступ
    2. приклади
      2.1. спосіб «sed+cut»
      2.2. спосіб «лише bash»
    3. швидкодія
      3.1. тестовий скрипт
      3.2. результати тестування швидкодії
    4. заключне слово

    1. вступ

    що?

    чимало скриптів bash часто потребують інформації з текстових змінних (або з виводу команд), приміром:

    variable="   якийсь текст XXXX-YYYY-ZZ 0xab2345 траляля"
    #         ^^^ зауважте пробіли на початку текстового рядка


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

    чому?

    будучи впертим (уникаю використання python/ruby/perl) пуристом (навіщо викликати сторонні утиліти на кшалт sed у випадках, коли bash і сам достатньо потужний), я натрапив на згадку про «дивовижну кількість команд для операцій з текстовими рядками» та «масиви», інтегровані у bash, і відкрив для себе, що чимало операцій можна запрограмувати за допомогою цих команд замість вдаватися до запуску sed, cut і awk. а оскільки більшість пошукових запитів у google приводять саме на рецепти з sed/cut/awk, мені видалося непоганою ідеєю порекламувати інтегровані команди bash за допомогою кількох прикладів.

    як?

    робиться це навдивовижу просто, і, на мою гадку, семантично елегантніше в порівнянні до рецептів з sed, cut і awk. є певні недоліки, зокрема деякі однорядні команди (one-liners) неможливо зконструювати в силу особливостей роботи команд bash. для обробки тексту і масивів, проте загальне враження таке, що використання інтегрованих команд bash робить скрипти більш зрозумілими для читання.

    далі йтимуть декілька прикладів…

    2. приклади

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

    1680x1050+2880+23


    звісно, неважко впізнати звичний рядок з «геометрією» дисплея, такі видає команда xrandr.

    2.1 спосіб «sed+cut»

    ось простий скрипт, щоби зробити це за допомогою sed:

    # приклад SED
    # задаймо текстовий рядок
    xrandroutput="1680x1050+2880+23"

    # визначмо символ табуляції TAB ('\t')
    # знадобиться для sed та cut
    TAB=$(echo -e "\t")

    # замінімо «x» на тауляцію '\t'
    array=`echo "$xrandroutput" | sed "s/x/$TAB/"`

    # замінімо «+» на табуляцію '\t'
    array=`echo -e "$array" | sed "s/+/$TAB/g"`

    # збережімо потрібні значення
    H=`echo -e "$array" | cut -f 1`
    W=`echo -e "$array" | cut -f 2`
    X=`echo -e "$array" | cut -f 3`
    Y=`echo -e "$array" | cut -f 4`


    гакери скрикнуть: «навіщо sed двічі?!» — і матимуть рацію, скрипт можна трошки скоротити:


    # приклад SED
    # задаймо текстовий рядок
    xrandroutput="1680x1050+2880+23"

    # визначмо символ табуляції TAB ('\t')
    # знадобиться для sed та cut
    TAB=$(echo -e "\t")

    # замінімо «x» і «+» на тауляцію '\t'
    array=`echo "$xrandroutput" | sed "s/[x+]/$TAB/g"`

    # збережімо потрібні значення
    H=`echo -e "$array" | cut -f 1`
    W=`echo -e "$array" | cut -f 2`
    X=`echo -e "$array" | cut -f 3`
    Y=`echo -e "$array" | cut -f 4`


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

    2.2 спосіб «лише bash»

    а тепер обіцяний приклад використання лише інтегрованих команд bash:

    # приклад ARRAY
    # задаймо текстовий рядок
    xrandroutput="1680x1050+2880+23"

    # замінімо всі «x» на пробіли « », скориставшись
    # потужною інтегрованою в bash командою заміни
    # тексту за шаблоном:
    # ${string//substring/replacement},
    # і збережімо результат до змінної «array»
    # (поки що це не масив)
    array=${xrandroutput//x/" "} # результат: "1680 1050+2880+23"

    # замінімо всі «+» на пробіли « » і збережімо
    # результат тепер як масив у змінній «array»,
    # використавши дужки «(» і «)»
    # заувага: дужки приймають пробіл як роздільник
    # і таким чином створюють масив значень
    array=( ${array//+/" "} ) # результат: ( "1680" "1050" "2880" "23" )

    # надрукуймо результат
    echo "array[0] = ${array[0]}"
    echo "array[1] = ${array[1]}"
    echo "array[2] = ${array[2]}"
    echo "array[3] = ${array[3]}"


    звісно ж дві команди заміни можна об’єднати в одну:

    # приклад ARRAY-SINGLE
    ...
    # замінімо всі «x> і «+» на пробіли « »
    # і збережімо результат в масив з назвою «array»
    array=( ${xrandroutput//[x+]/" "} )
    ...


    ну хіба ж не простіше і зрозуміліше? вже мовчу про те, що на виході всі дані маємо в одному масиві, а це досить зручно і не захаращує код назвами змінних.

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

    3. швидкодія

    3.1 тестовий скрипт

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

    #!/bin/bash
    # використання: test [кількість_ітерацій]

    iter=10000
    # перевірмо, чи задано кількість ітерацій в командному рядку
    if [ -n "$1" ]
    then
    iter="$1"
    fi

    TAB=$(echo -e "\t")

    # проженімо ітерації
    for i in `seq $iter`
    do
    #
    # робочий код для тестування
    #
    done


    цей тестовий скрипт запускається таким чином:

    $ /usr/bin/time -f "\nReal: %E\nUser: %U\nSys: %S" ./test 100000


    всередині циклу «do … done» вміщуємо тестовий код (я прибрав коментарі задля компактності):

    # приклад SED
    xrandroutput="1680x1050+2880+23"
    array=`echo "$xrandroutput" | sed "s/x/$TAB/"`
    array=`echo -e "$array" | sed "s/+/$TAB/g"`
    H=`echo -e "$array" | cut -f 1`


    а потім другий варіант:

    # приклад ARRAY
    xrandroutput="1680x1050+2880+23"
    array=${xrandroutput//x/" "} # "1680 1050+2880+23"
    array=( ${array//+/" "} ) # ( "1680" "1050" "2880" "23" )


    зауважте, що у варіанті «приклад SED» ми змушені зберігати результат до змінної «H», тоді як у варіанті «приклад ARRAY» всі чотири значення зберігаються в одному масиві з доступом через «array[i]».

    3.2 результати тестування швидкодії

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

    а результати такі:

    приклад SED: 1000 ітерацій = 2,17 секунд
    приклад ARRAY: 1000 ітерацій = 0,011 секунд


    так, різниця 200-кратна на користь варіанту «приклад ARRAY». отже, інтегровані команди bash працюють значно швидше, ніж виклик sed.

    дивно? ну, я очікував дещо вищої продуктивності, але ж не 200-кратно… насправді, тут я запрошую знавців написати оптимальніший код з використанням sed. можливо, це можна зробити краще, ніж вийшло у мене.

    4. заключне слово

    отже, чи варто користуватися інтегрованими командами bash? спробую підсумувати:

    переваги (аргументи на користь внутрішніх команд bash:
    + це значно швидше;
    + код зрозуміліший (на мою думку), з меншою кількістю змінних;
    + мені здається, що це простіше програмувати.

    недоліки (проти):
    - значна залежність від bash;
    - хоча масиви і команди обробки рядків мають бути доступні в сучасних версіях bash (вище третьої), все-таки можуть виникати проблеми сумісності в старших версіях;
    - неможливо реалізувати деякі однорядкові команди (one-liners), які досить просто отримати перенаправленням виводу.

    наостанок кілька слів:

    а) сподіваюся, комусь це стане в нагоді. розумію, що хтось скаже: «о, я це й так знав», інші запитають «про що це він взагалі говорить?», проте я таки сподіваюся, що хтось навчиться чогось нового;
    б) перепрошую, що не спромігся пояснити коротше; також перепрошую за кострубату англійську;
    в) не соромтеся збиткуватися з мене, якщо я десь тут припустився помилки.

    кінець.

    linux: підключення старої фотокамери

    маю в господарстві стареньку цифрову фотокамеру canon powershot a60. апарат вже можна вважати пенсіонером — це був мій перший цифровичок, придбаний ще у 2003 році одразу після народження першого синочка. попри те, що, на превеликий жаль, не всі знімки та відео з того часу збереглися, але ця камера бачила перші тимошкові кроки, записувала на відео перші його слова…

    можна сказати, родинна реліквія. ніяк не можна викидати.

    на додачу, цей canon ще й нівроку знімає після заміни матриці, і зі своїми 2-ма мегапікселями легко дає фору більшости сучасних смартфонів з їхніми 8-ми та 13-мегапіксельними «дірочками». саме тимко зараз нею і користується час від часу.

    камера підключається до комп’ютера, як ptp-пристрій, але на linux не монтується, як накопичувач, тож до сьогодні я мусив щоразу витягати 256-мегабайтну (!) картку compatc flash і шукати по шухлядах карт-рідер.

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

    смачна малинка

    корпус для «малинки»? надрукуй сам! макет готовий, роздають безплатно, — бери й друкуй на цупкому картоні, ба навіть кольоровому (як на ілюстрації).

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

    raspberry pi працює. смішна штучка… слабенька? так. але не має ані вентиляторів, ані жорстких дисків, споживає до вата, має розмір сигарентної пачки, завантажується з картки sd, якій ціна 70 грн за 8 гб. і крутить linux.

    залишилося знайти час на святах і вирішити, як її застосувати. наразі варіанти є такі:
    з часом, гадаю, таки перетворю його на мультимедійну коробочку, щоби на кухні дивитися громадське, еспресо та музичні кліпи (ну не сприймаю я традиційне телебачення, пробачте). але спершу, мабуть, зберемо з синочком свій сервер minecraft ;-)
    проблизно рік тому я запитував, як краще впорядкувати електронну бібліотеку.

    якось ця головоломка склалася сама собою: всі електронні тексти зібралися в dropbox’і, в такій ієрархії тек:

    > розділ (художня література, навчальна, технічнна тощо)
      > автор
        > серія
          > мова (Ukr, Eng, Fra, Rus)
            > тексти (формат назви: ім’я прізвище - назва (рік) [мова].epub)

    невеличкий виняток — збірки humble ebook bundle та storybundle, що лежать у своїх окремих теках.

    тепер копія бібліотеки лежить на кількох комп’ютерах, де встановлено клієнт dropbox; доступ для поповнення є також через веб-інтерфейс; на смартфон та електронну читанку можна в будь-який момент завантажити потрібний текст і одразу почати читати…

    оскільки я давно і надійно з crunchbang linux, і в осяжному майбутньому жодної еквілібристики з дистрибутивами (що називається distrohopping’ом) не передбачаю (ну, хіба що спробувати arch? гиги) — то ось така екстенсивна збірка підказок з «допилювання» crunchbang 11 waldorf з різних боків ще не раз стане в нагоді:
    • round-off your crunchbang waldorf (частина 1)
    • round-off your crunchbang waldorf (частина 2)
    англійською мовою. це — на додачу до невеличкої купки власних нотаток на кшалт нюансів налаштування aspire s3, налаштування розкладки клавіатури та «прикручування» меню пристроїв.

    curlftpfs для монтування ftp в локальну теку

    мав собі віддавна в господарстві таку от цікаву штуку: packard bell netstore 3500. це кишеня для жорсткого диска ide, трішки незвична тим, що… має мережевий інтерфейс і може виконувати функції мережевого файлового накопичувача, якщо підключити, скажімо, до рутера.

    коштувало це щастя якихось смішних грошей ($10 чи 15 без диска), і купував я його два чи три роки тому не як nas, а лише щоби «порятувати» старий диск на 320 гб, що лежав без діла, — використовуючи його через usb як зовнішній накопичувач.

    лише днями підключив коротким пачкордом до рутера… працює: дає доступ до диска по ftp, дозволяє налаштувати доступ для кількох користувачів, кожному зі своїм паролем та (за необхідності) до своєї теки. що ще треба?

    хіба що навчитися монтувати nas в локальну теку?

    що надіти?

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

    як не смішно, найбільшою проблемою для мене тут є не вибір між брендами та моделями — мені треба банально зорієнтуватися в тому, що саме треба на себе надіти, щоби комфортно кататися 1-2 години при 0…+15°, можливо під дрібним дощиком чи в туман… жодних планів перезимувати на педалях я не маю, але брак досвіду катання в міжсезоння і широченний вибір різного вбрання (від дуже специфічного велосипедного до туристичного і навіть «цивільного») дещо збивають з пантелику.

    www.bicycling.com/whattowear

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

    налаштування aspire s3 + crunchbang

    віддали мені на «перевиховання» aspire s3-391 з діагнозом «мертвий модуль wifi» і з пустим місцем замість штатного ssd. свого часу це був перший недорогий ультрабук (дешевше тисячі) на базі intel core третього покоління.

    переваги:
    • тонкий корпус (13 мм), невелика вага (1,35 кг), досить компактний 13-дюймовий форм-фактор;
    • металева кришка;
    • чималий тачпад;
    • intel core i7-3517u + 4 гб озу + ssd = миттєва реакція системи.
    недоліки:
    • поганенька матриця дисплея, і лише 1366x768 пікселів;
    • акумулятор… 3-4 години реальної автономності?!
    • дистрофічні курсорні клавші, та й вся клавіатура посередня;
    • досить «дешевий» зовнішній вигляд, якщо придивитися.

    mutt is manna

    мені просто подобається його стиль:
    цитата: Yes, I know. mutt is manna, straight from heaven. I am a lesser human being because I can’t get mutt to work. I fail and resign myself to an eternity in the Abyss because I rely on alpine to read e-mails (читати повністю)
    нова реінкарнація цього блога про цікаві утиліти командного рядка в *nix — inconsolation (wordpress.com)

    framaroot — швидке приrootчення liquid e2

    здається, це найшвидше рутування на моїй пам’яті: для того, щоби отримати права root на смартфоні acer liuqid e2 (та інших апаратах на платформах mediatek, якщо не помиляюся), достатньо завантажити один apk*, запустити на смартфоні (попередньо в налаштуваннях дозволивши встановлення з «невідомих джерел»), вибрати програму для контролю плав (рекомендую supersu) — і перезавантажити машинку.

    все. навіть нема потреби підключатися  кабелем до ноутбука (apk залив через dropbox). тепер я знову можу робити скріншоти та синхронізувати закладки fbreader між смартфоном та електронною читанкою*.