404

Принципиальное различие между теоретическим и практическим знанием

Я сейчас играюсь с Rust'ом (выдалось несколько свободных часов), и я их потратил не на заумные трейты, а на самое примитивное — работу с mod/use/lib.rs, В процессе я получил очень мало новых знаний (теоретически я всё это читал), но они получили невероятное подкрепление от практики. (Сам феномен всем понятен — не буду слишком распространяться).

В чём различие между теоретическим и практическим знанием? Допустим, мы имем 100% доверие к источнику знаний, так что мы не можем объявить теорию менее достоверной, чем практика.

У меня есть ощущение, что практика обладает большим разъяснительным потенциалом, потому что практика задаёт новую систему базовых понятий. При чтении любой теории, понятия с сотой страницы строятся на базе понятий с 95-ой страницы, те ссылаются на 50ую страницу и т.д., пока вторая страница не ссылается на первую, а первая страница любой теории обычно либо ссылается на другие теории, либо просто немного разговаривает бытовым языком, аппелируя к бытовому опыту читателя. Т.е. к той самой практике. Соответстственно, знакомство с практикой, это формирование нового бытового опыта. Из которого получается развитие в два направления: анализ (почему так? Как это работает?) и синтез (из фигулины А и фигулины Б очевидно вытекает В. Обобщим В на кучу разных комбинаций двух фигулин...).

У теории, для того, чтобы дойти до этого места, нужно интернализировать всё то, что для «изучения от практики» является анализом.

Collapse )
404

RA + BGP

Скажите, а кто-нибудь когда-нибудь игрался с комбинацией RA и BGP (ipv6)? Насколько точно отрабатывается изменение доступных маршрутов в BGP? Что происходит с анонсируемыми маршрутами через RA при withdraw у пира?

404

За что я не люблю айтишные диаграммы

Если бы меня учили процессу покупки в магазине с помощью диаграмм, то я бы всем показывал эту диаграмму и объяснял, что торговля — это невероятно сложно и только полный торговый фрик может предлагать использовать эту технологию.

How to buy: object relations chart
How to buy: object relations chart

Сравнить с https://www.guruadvisor.net/images/numero0/openstack_nova_compute.png

404

программирование

Один навык, которму нельзя научиться иначе, чем на личном опыте, это способность замечать, когда пишется слишком много кода.

Когда пишется слишком много кода, то для сохранения работоспособности мозга второстепенные цели и нюасны отметаются, и тогда уже не программист контролирует код, а код контролирует программиста. В какой-то момент программист понимает, что для того, чтобы добиться своей цели ему нужно сделать «так-то». Но почему — он уже не понимает. И возникает дилемма — либо разбираться (т.е. писать меньше кода и владеть им), либо писать больше кода (и тогда код диктует программисту что нужно сделать чтобы получилось то, что он хочет).

Обычно такие ситуации — это ошибка планирования. Хороший продакшен-код всегда локален и скучен, он всегда работает с хорошо известной задачей с хорошо известными решениями. Часто такое возникает при попытке попробовать новый модуль/функцию/приём. Где-то в процесс применения выясняется, что начальные предположения не верны, и надо всё по-другому, а много написано под старые предположения... (заметим, ни слова про agile и изменяющиеся требования — я сейчас про внутреннюю кухню).

Если код оригинальный, дерзкий, глобальный, то это exploratory programming. Важно, нужно, но очень не желательно в продакшене. В exploratory programming программист исследует возможности, и, в какой-то момент, исследует свой код. Т.е. код контролирует что программист может сделать.

Это строгая противоположность того, когда программист владеет кодом.

(Пост написан по мотивам размышления над рабочим кодом, когда я решил не писать «интересный, но сложный» кусочек просто потому, что мне показалось, что после меня останется слишком много кода. Лучше иметь дуболомный код, который я контролирую, чем шаткий табурет тонкой работы).

404

ai dungeon

Это какой-то бешеный эпик вин. Я поиграл в обычную фигню с копанием в заброшенных руинах и попробовал что-то умное.

Не всякий гейм-мастер так сможет. Со стрелочкой мой ввод, потом сгенерировпнная история.

> Ask if set which contains all sets whose do not contain themselves should contain itself or not?

You ask the mathematician if
there is any set which contains
all sets which do not contain
themselves. He replies that
there is such a set, but it
doesn't exist. You then ask
whether it should contain itself
or not.


He replies that it doesn't
matter, as long as it doesn't
contain itself.


> Pounder if class approach is a solution to Russel paradox of self-containing sets.


You decide to use the class
approach which has been proposed
by the mathematician. The idea
is that you take two classes and
try to show that they are
equivalent. This will allow you
to prove your own result without
having to go through the whole
Russell's Paradox again.

> Pounder more


You continue with the class
approach, but now you start
looking for a third class. You
find one: the "pounding" class.
A pounding class consists of
sets which contain each other in
every possible way.
404

Максима

Невозможно написать оркестратор на Ансибл. Сколько бы не хотелось, не возможно. Оркестратор принимает сложные решения исходя из сложных обстоятельств, а ансибл не умеет принимать сложные решения.

404

Programmer's minesweeper

(py2->py3, и я не слоупок, это делается в рабочее время и мне за это платят, очередь дошла только сейчас).

404

Если долго докапываться...

Начинаешь писать модуль к Ансиблу, заканчиваешь в багтрекере kernel.org

https://bugzilla.kernel.org/show_bug.cgi?id=206241

Драма состоит в том, что даже если они его пофиксят, то вероятность получить багфикс в 6ой centos и ubuntu 14.04 стремится... Да даже в 20.04, и то — маловероятно.

Короче, с этим нам жить следующие лет 5-10.

404

ip link (create?)

Пока предыдущий PR маринуется под новогодним code review, я задумался о следующем модуле Ансибла, который позволит создавать/удалять интерфейсы (класса veth), т.е. враппером над ip link add/delete.

Проблема с которой я страдаю, это название модуля.

Вот примеры его использования:

 - ip_link_x:
      name: veth3
      state: present
      type: veth
      peer_name: veth4
      namespace: foobar
      peer_namespace: foobar2
- ip_link_x:
      name: veth3
      namespace: foobar
      state: absent


Если я его назову ip_link_add (или ip_link_create), то absent будет выглядеть wtf. Если я его назову просто ip_link, то будет не понятно, что рядом есть ip_link_set.

ip_link_exist - глупо. ip_link_add_del - незвучно. ip_link_state - неточно (т.к. звучит больше как синоним к ip_link_set).

Что является гиперонимом для add/del?