Things that live here:

  1. Work log, where I note things I feel I'll have to Google later.
  2. Journal, very similar but about non-IT topics.
  3. Blog for rare longer-form posts (last one below).

Feel free to look at what you can find here and enjoy yourself.


~17% of my country is occupied by Russia, and horrible things are happening there. You can help stop this! If you can donate - I contribute to (and fully trust) Come Back Alive and Hospitallers, but there are also other ways to help.


Latest posts from the Work log

Day 2074 / Developing a 3D Slicer extension

Debugging

Basics

Starting Slicer

Loads the module automatically (for some reason doing it manually doesn’t preserve it across restarts?..)

Slicer  --additional-module-path /path/to/my/extension/one/lower/than/what/i/would/pick/in/Slicer/GUI

Logging

CLI modules

Latency etc.

Solution: CLI module (not extension), which can be added to new extension from extension editor.

Now I understad this better: Module Overview — 3D Slicer documentation

  • CLI modules are simple I/O, non-blocking, that’s where the networkig logic should go to
  • scripted are python scripts with GUIs

Day 2066 / 3dslicer extension deployment options

Slicer --help:

  --testing                                     Activate testing mode. It implies --disable-settings and --ignore-slicerrc. (default: false)
  --disable-python                              Disable python support. This is equivalent to build the application with Slicer_USE_PYTHONQT=OFF.
  --python-script                               Python script to execute after slicer loads.
  --python-code                                 Python code to execute after slicer loads.
  -c                                            Python code to execute after slicer loads. By default, no modules are loaded and Slicer exits afterward.
  --ignore-slicerrc                             Do not load the Slicer resource file (~/.slicerrc.py).
  --additional-module-path                      Additional module path to consider when searching for modules to load.
  --additional-module-paths                     List of additional module path to consider when searching for modules to load.

Day 2044 / rsync on file changes with inotifywatch

inotifywait(1) - Linux man page

#!/bin/sh
while inotifywait --format '%:e %f' p.* *.bib; do
  sleep 1  # files get moved often
  echo "rsync!"
  rsync -avzirh --progress  p.* *.bib me@server.net:dir
done

Day 2043 / Boltctl monitor exists

boltctl monitor shows changes as they happens — nice when something breaks. I used to do a lot of watch boltctl list before in this exact scenario

(having a monitor subcommand in your thing says a lot about stuff, actually, — the best interpretation is that it’s written with developers in mind)

Day 2041 / Quarto CSS grid to better position absolute elements

Very proud of this idea, haha :)

For absolute positioned elements one needs to “guess” the correct sizes etc., may not be trivial. Using a pixel ruler won’t help because the .absolute coords don’t map to the screen ones.

Solution:

.grid {
  // https://stackoverflow.com/questions/4191260/drawing-a-grid-using-css
  background-image:
    repeating-linear-gradient(lightblue 0 2px, transparent 2px 100%),
    repeating-linear-gradient(90deg, lightblue 0 2px, transparent 2px 100%);
  background-size: 50px 50px;
  //border: 2px solid red;
}

.smallgrid {
  background-image:
    repeating-linear-gradient(#ccc 0 1px, transparent 1px 100%),
    repeating-linear-gradient(90deg, #ccc 0 1px, transparent 1px 100%);
  background-size: 10px 10px;
  width: 100%;
  height: 100%;
}
::::: {.absolute left=0 right=0 top=0 bottom=0 .grid}
::: {.smallgrid}
:::
:::::

Pasted image 20240803004440.png

It’s not exactly aligned but close enough to judge the widths and heights involved!

Rectangle in the pic is:

:::: {.redrect .absolute right=200 top=130 width=200 height=100}
::::

(And the small grid can be omitted if not needed by removing the div in the middle. )

For bonus points, can be saved as a file and included if needed:

{\{< include ../_shared/smallgrid.qmd >}\}

ALSO:

// show the border of the slide
.reveal .slides {
  border: 1px dashed red;
}

Day 2040 / Quarto vertical align one last time

DAMN.

Figures – Quarto:

:::: {layout="1,1,1],[1],[1,1,1" layout-valign="center"}

if it’s a layout I do get a valign thing. I just have to use layouts, not columns. Damn.

Day 2039 / quarto positioning SVG absolute

This doesn’t work on SVGs for me:

![](images/02/svgs/02_seqsiii.svg){.absolute top=0 left=0}

This does:

::: {.absolute top=0 left=0}
![](images/02/svgs/02_seqsiii.svg)
:::

Day 2038 / You can enter svg code as html and animate graphviz like this

SO.

One can literally generate a plot w/ graphviz, export as svg, open and edit in inkscape, save as optimized svg, paste into quarto, and manually add the correct class="fragment" data-fragment-index=4 bits to the relevant groups.

Insert with the usual {=html} thing.

Damn.

Day 2037 / leaderline.js in a neat library to draw arrows between HTML elements

LeaderLine

almost works with quarto, except that line.position needs to be called on slide change — ergo likely won’t work in pdf export mode.

Day 2033 / Animating plots in quarto

maurosilber/pyfragments: Animated figures for Quarto installs as-is

IT WORKS FOR PDF MODE TOO! And uses fragments

# | fig-width: 15
# | fig-height: 10
# | output: asis
import matplotlib.pyplot as plt
from pyfragments import AnimatedFigure

with AnimatedFigure() as ani:
# Data for plotting
  train_loss = [1.0, 0.6, 0.3, 0.2, 0.1]
  val_loss = [1.2, 0.8, 0.5, 0.4, 0.6]
  iterations = [1, 2, 3, 4, 5]

  plt.xlim(0, 6)
  plt.ylim(0, 1.5)

# Labels and legend
  plt.xlabel('Trainingsiterationen', fontsize=14)
  plt.ylabel('Loss', fontsize=14)
  plt.legend(loc='upper right', fontsize=12)

# Plot
  for x in range(len(train_loss)+1):
    with ani.fragment():
      plt.plot(iterations[:x], train_loss[:x], 'bo-', label='Training', linewidth=2)
      plt.plot(iterations[:x], val_loss[:x], 'go-', label='Validation', linewidth=2)

# Add a dashed vertical line in the middle
  mid_iteration = (iterations[0] + iterations[-1]) / 2

  with ani.fragment():
    plt.axvline(x=mid_iteration, color='r', linestyle='--', linewidth=1.5)

Latest post from Blog

'The Hacker Manifesto', переклад українською

Оригінал: .:: Phrack Magazine ::.
Контекст: Маніфест хакера — Вікіпедія / Hacker Manifesto - Wikipedia
Існуючий дуже класний переклад, не відкривав, поки не закінчив свій: Маніфест хакера | Hacker’s Manifesto | webKnjaZ: be a LifeHacker

                               ==Phrack Inc.==

                    Том I, випуск 7, Ph-айл[0] 3 з 10

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Наступне було написано невдовзі після мого арешту...

	                        \/\Совість хакера/\/

	                               автор:

	                          +++The Mentor+++

	                           8 січня 1986р.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

	Сьогодні ще одного спіймали, пишуть у всіх газетах. "Кібер-скандал:
підлітку повідомили про підозру", "Кіберзлочинця затримали після
проникнення в систему банку".
	Тупа школота[1], вони всі однакові.

	Та чи ви, з вашою трафаретною ментальністю[2] та знаннями 
інформатики зразка першої половини пʼятидесятих[3], коли-небудь дивилися 
в душу хакера?[4] Чи вас колись цікавило, що є причиною його поведінки[5], 
які сили на нього впливали, що його сформувало?
	Я хакер, ласкаво прошу у мій світ...
	Мій світ почався ще зі школи... Я розумніший за більшість інших
дітей, і дурниці, які нам викладають, мені набридають.
	Тупий відстаючий[6], вони всі однакові.

	Восьмий, девʼятий, десятий, одинадцятий клас[7]. В пʼятнадцятий
раз слухаю, як вчителька пояснює, як скорочувати дроби. Мені все ясно. "Ні, 
Вікторія Миколаївна[8], я не написав проміжні кроки, я розвʼязав все усно..."
	Тупий підліток. Мабуть списав. Всі вони такі.

	Сьогодні я зробив відкриття. Я знайшов компʼютер. Ха, почекай-но,
це круто. Він робить те, що я від нього хочу. І якщо він помиляється,
це тому, що помилився я. А не тому що він мене не любить...
                         Або відчуває від мене загрозу...
                         Або думає що я тіпа самий умний[9]...
                         Або не любить викладати[10] і йому тут не місце...
	Тупий підліток. Він постійно тільки грає в свої ігри. Всі вони такі...

	Потім це відбулось... відчинились двері в світ... несучись телефонною 
лінією як героїн венами наркомана, надсилається електронний пульс,
шукається спасіння від невігластва навколо...[11] Знаходиться борд.[12]
	"Це воно... це те, до чого я належу..."
	Я з усіма тут знайомий... попри те, що я з ними ніколи не 
зустрічався, не розмовляв, і колись можливо більше нічого не чутиму про 
них... Я їх всіх знаю...
	Тупий підліток. Знову займає телефонну лінію... Вони всі однакові.

	Та можете не сумніватись,[13] що ми всі однакові... Нас годували
дитячими сумішами з ложки, коли ми хотіли стейк... а ті куски мʼяса, які 
до нас все ж потрапляли, були вже пережовані і без смаку. Над нами
панували садисти, або нас ігнорували байдужі. Для тих, хто хотіли чомусь 
нас навчити, ми були вдячними учнями, але їх було як краплин дощу в
пустелі.

	Цей світ зараз наш... світ електрона і комутатора, світ краси
бода[14]. Ми користуємося існуючою послугою не платячи за те, що могло б 
бути дуже дешевим, якби ним не завідували ненажерливі бариги[15], і ви 
називаєте нас злочинцями. Ми досліджуємо... і ви називаєте нас 
злочинцями. Ми шукаємо знання... і ви називаєте нас злочинцями. Ми 
існуємо без кольору шкіри, без національності і без релігійної 
нетерпимості... і ви називаєте нас злочинцями. Ви будуєте атомні бомби, 
ви ведете війни, ви вбиваєте, обманюєте, і брешете нам, намагаючись 
заставити нас повірити, що ви це робите для нашого блага, і попри все - 
це ми тут злочинці.

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

	Я хакер, і це мій маніфест. Можливо ви зупините мене як особу, але ви 
ніколи не зупините нас всіх... зрештою, ми всі однакові.
	

Замітки:

  1. Ph-айл: worst of both worlds between phile and файл
  2. Damn kids: тупі/кляті/грьобані діти/школота1/малолітки2? Дякую цьому твіту Букви, який дає мені моральне право використовувати слово “школота”, бо нічого інше не клеїлося (“Окаяні дітлахи!")
  3. three-piece-psychology: інтерпретую як невисоку оцінку розвитку внутрішнього світу. Тому: пересічним/шаблонним/банальним/трафаретним3/примітивним/нехитрим/безхитрим; psychology: ‘інтелект’ але не зовсім, мені подобається ‘ментальність’
  4. and 1950’s technobrain: Німецький переклад, який сподобався англіцизмами та дав ідею перекласти technobrain в значенні “знання про компʼютери”, а не слово в слово: Berühmte Manifeste 2 – openPunk
  5. хакер/гакер: Вікіпедія вважає обидва допустимими; сам Авраменко ссилаючись на ті самі правила українського правопису теж вважає обидва допустимими, але все ж любить “г” більше (Хакер чи гакер - експрес-урок - YouTube). А я не можу і не буду. Хакер. I will die on this hill.
  6. what makes him tick: TODO, нічого не подобається. Що його рухає/надихає, що у нього в середині, …
  7. underachiever: хай буде “відстаючий”. Хоча пригадую з ЗНО, що суфікси уч/юч обмежені у вживанні, правильніше ВІДСТАЛИЙ мені не подобається.
  8. junior high or high school: тут додаю драми замість дослівності, тому що все ближче до оригіналу, що я можу придумати, занадто канцеляристично: “я закінчую базову чи повну загальну середню освіту”..?
  9. Ms. Smith:
  10. I’m a smart ass
  11. doesn’t like teaching: оплакую невикористаний варіант від душі “ненавидить себе, дітей, і педагогіку”. Дуже оплакую.
  12. a refuge from the day-to-day incompetencies is sought
  13. a board is found: мається на увазі електронна дошка оголошень (BBS — Вікіпедія), дід форумів і прадід іміджбордів. Найцікавіше слово для перекладу. Якщо буде “борд” то збережеться драматизм оригіналу, але є шанси, що хтось спутає з іміджбордами. Коли вони були популярні, нормальні люди в Україні їх не називали ніяк, російською були варіанти “доска”, “бибиэска”4. “BBS” був би найпростішим виходом; “електронна дошка оголошень” знову ж таки канцеляризм. По контексту далі очевидно, що мова йде про якесь спілкування, тому хай буде “борд”, принесу в жертву однозначність і зрозумілість милозвучності.
  14. you bet your ass we’re all alike: як же складно підбирати такі речі. Умовні embeddings з ML тут були б в тему. “Дай мені щось на кшталт ‘авжеж’ тільки більш emphatical”. Попередня версія “Авжеж ми всі однакові!”
    1. You bet – phrases: базара нет, по любому, я вас умоляю
    2. Будьте певні5
    3. ЩЕ Б ПАК — СИНОНІМІЯ | Горох — українські словники
      1. Авжеж?6
  15. the beauty of the baud: Бод — Вікіпедія Нехай мій (і єдиний можливий) переклад буде всім настільки ж зрозумілим, наскільки мені був зрозумілий оригінал, коли я його читав вперше.
  16. profitteering gluttons

Hat tip to:

Random: