взаємні почуття

я ненавиджу powershell. і, здається, воно ненавидить мене навзаєм. ось невеличкий приклад:

function test([string] $a, [string] $b) {
  Write-Host "аргумент 1: $a"
  Write-Host "аргумент 2: $b"
}


судячи з формату визначення, функцію треба викликати так:

test("один", "два")

невірно, сідай, двійка. правильно — за задумом творців powershell, — ось так:

test "один" "два"

бо «л» — це логіка!

це тим більше логічно (з великої літери /\), що методи класів у тому ж таки powershell правильно викликати… з дужками і комами, звісно ж:

$b.Replace("два", "три")

як це чому? тому що логіка! рукалице.

p.s. найгірше те, що перший, неправильний виклик функції test("один", "два") жодної помилки не генерує: powershell просто зліпить все, що в дужках, докупи й передасть до функції як перший аргумент ($a), залишивши другий порожнім. я вже згадував логіку?

паніка з паролями

відкриваємо ось цей сайт, вказуємо свою адресу електронної пошти, отримуємо перелік витоків персональних даних, де ця адреса засвітилася, панікуємо…


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

ризикну дати кілька підказок
  1. вигадайте спосіб запам'ятовувати свої паролі й ніколи, ніколи не записуйте їх відкритим текстом (наприклад: пригадайте якусь дитячу пісеньку, в котрій ви робили помилку і співали не так, як інші).
  2. пароль до кожного сайту/сервісу має бути унікальним — це не так складно зробити, як здається (можна щось додавати до типового пароля).
  3. якщо ваші паролі за вас пам'ятає firefox чи chrome — ви їх забудете, гарантовано.
  4. для зберігання паролів linux має чудовий мінімалістичний інструмент: pass; звісно, пароль до самого pass (чи, точніше, до в'язки ключів gpg) має бути надійним.
зима прийшла: надворі –15..–20° і десь 20-20 см снігу.

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

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

китайська за ніч

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

днями надійшов термін здавати практичну роботу з програмування (python) в коледжі, а старий студент всі різдвяні й новорічні канікули протринькав: грав з дітками, грався сам (bioshock, ghost recon, medal of honor) та хворів на грип…

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



що це? це спрощений до неможливості симулятор інкапсуляції даних протоколами на кшталт tcp/ip та фільтрування пакетів мережевим екраном... чи щось таке.

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

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

то навіщо воно тут? собі на згадку.

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

автоповорот екрана для linux

чорнова версія скрипту для автоповороту екрана між портретним та пейзажним режимами для linux — працює.

запуск:

tabletizer --cont

якщо не вказати параметр --cont, скрипт відпрацює один раз і завершиться; --cont [інтервал] запускає циклічне опитування акселерометра зі вказаним інтервалом в секундах (за замовчуванням 1 с).

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

залежностей мінімум: xrandr, xinput, grep, sed. перевірено лише на aspire r13 (r7-371t) з arch linux (manjaro kde), але і на інших «трансформерах» та під іншими дистрибутивами теж має працювати (можливо, з невеликими модифікаціями), якщо встановлено відповідні драйвери для linux industrial i/o.

можуть бути вади, пов'язані з кількома моніторами чи робочими просторами (як в kde) — поки що не мав часу все перевірити.



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

відкриваємо:

onboard && dbus-send --type=method_call --print-reply --dest=org.onboard.Onboard /org/onboard/Onboard/Keyboard org.onboard.Onboard.Keyboard.Show > /dev/null

"onboard &&" на початку — простіше, ніж перевіряти, чи програму вже запущено.

закриваємо:

dbus-send --type=method_call --print-reply --dest=org.onboard.Onboard /org/onboard/Onboard/Keyboard org.onboard.Onboard.Keyboard.Hide > /dev/null

перемикаємо (toggle):

dbus-send --type=method_call --print-reply --dest=org.onboard.Onboard /org/onboard/Onboard/Keyboard org.onboard.Onboard.Keyboard.ToggleVisible > /dev/null