Python и Свободное ПО
В Новосибирске я прочитал студентам лекцию об истории Свободного ПО и о том чем Свободное ПО отличается от Opensource. До этого слушал Столлмана и все такое.
С темой различия все интересно: дьявол кроется в деталях: СПО и OpenSource очень похожи по форме, но заметно отличаются по целеполаганию. СПО это поделиться своей страстью к программированию со всем миром, OpenSource это про то чтобы достичь успеха через публикацию исходников: публиковать исходники это модно, мы свои тоже опубликуем, продвинем свой продукт, заработаем бабла.
Далее там шел список косвенных признаков по которым можно определить относится ли продукт к СПО или к OpenSource, но сейчас не об этом.
По результатам этого всего, мне стало более понятно почему мне так не нравиться python. Python это практически целиком про OpenSource, и почти не про Свободное ПО. Python создан для того чтобы быстро добиваться успеха: личного -- не очень длинный туториал, и ты уже питон-программист, иди работай, и корпоративного -- нанял горсть таких программистов и они тебе всё написали... Но python -- это не про страсть к программированию. Это poor man язык программирования. Если ты богат внутри как программист, на python'е ты не задержишься. Весь design питона сделан в интересах неофита, на нем красиво и страстно не напишешь. Я не помню ни одного человека который бы был бы высококлассным инженером и писал бы при этом на питоне. Ну нету...
Верно и обратное, если вы хотите действительно глубоко погрузиться в профессию, бегите с python'а. Он очень сильно калечит способность правильно думать. Не надо вам этого...
Демократия как власть фейрис
Лежит у меня сейчас на столе детская книжка "Knights of the Round Table". Заказал я ее на амазоне в каком-то далеком году, экспериментируя тогда с амазоновскими рекомендациями. Книжка вопреки моим ожиданиями оказалось галимым пейпербэком который не особо хочется держать в руках. Ну и совсем-совсем детской. На эту тему она много лет простояла на полке. И вот в рамках избавления от лишнего я задумал оставить ее в книгообмене, а перед этим все-таки прочитать. 100 страниц крупным шрифтом — ерунда...
Прочитал несколько страниц и глубоко призадумался... С каноном фейрис я знаком еще со времен ролевых игр. А правильно читать мифические сюжеты дальнейшие, гм, практики научили...
Что показали эти несколько страниц: Мерлин, кем бы он ни был, явный деятель из мира фейрис. Он магический, и тема украденного/отданного ребенка это явная фейрис-стори. Господа рыцари явные болваны: появляется во вспышке света камень с мечом и надписью, они и поверили и давай этот меч оттуда тягать... Ни на секунду не задумавшись за чей счет и в чьих интересах проводится этот банкет. Таким образом можно явно сказать, что Артур — явная креатура фейрис, через него они проводят все интересы и как следствие весьма вероятно все что делал Артур так или иначе было в сделано в интересах фейрис.
А вот теперь смотри на сейчас. Весьма сомнительно, что англо-саксонская демократия наследует демократии греческой, ну чем-то кроме названия. Где англосаксы и где греки. А вот традиции рыцарей круглого стола, которая глубоко въелась в англосаксонское коллективное бессознательное, она совершенно несомненно наследует. А рыцари круглого стола, как было показано выше, были собраны в интересах фейрис. И англосаксонская демократия получается тоже функционирует в их же интересах, если не под прямым управлением.
И, надо сказать, это многое объясняет. Если в каждом пункте где хочется сказать "чего это они такие странные", пояснить "фейрис, это все фейрис", все сразу становится на свои места. Кто умеет такие вещи считывать, посмотрите, насколько точное попадание...
Как форкнуть процесс в соседний виртуальный терминал
Я люблю работать в консоли. Люблю автоматизацию скриптами. И если надо что-то массово параллельно обработать, то запустить все это в разных окнах tmux'а или screen'а, и любоваться процессом. И вот чего мне не хватало, так это возможности в каком-нибудь сложном скрипте наделать дочерних процессов и разложить их по разным окнам tmux'а. Кажется что естественная хотелка, а вот как сделать -- не понятно. И вот дошли руки разобраться как же такой фокус делается
( Read more... )
Третьим будешь?
Московские товарищи, которых интересует массаж живота (в первую очередь самомассаж).
Нам нужен третий!
Цель: научиться разминать всё там в животе, для здоровья пищеварения и всеобщего здоровья организма. Учиться этому сильно удобнее втроем, когда пробуешь не только на себе, но и на товарище. Поэтому нам нужен третий.
Где и когда: в предстоящую субботу ближе к утру в Железнодорожном.
Междусобойчик "для своих", денег не беру.
P.S. Ролевикам может быть особенно интересно из-за пересечения тусовок.
В коммунизм через потребительские сообщества
Сошлась в голове очередная мозайка. Могу этим поделиться.
Уж не знаю как Мракс пришел к идее коммунизма, визионировал ее или как, но судя по всему дело стоящее... При этом как к этим практикам переходить совершенно непонятно. Натурный эксперимент показал что пройти в нее минуя стадию капитализма не представляется возможным. Да и из капитализма оно само вырастать как-то не хочет. Максимум что получается это социально ориентированные государства. Не хотят, видите ли трудящиеся бороться за свои права. А если начинают, то получается полная херня.
Давайте для начала посмотрим на то как формировались два предыдущих строя.
Возникло земледение, технологии развились до того уровня, что появились излишки которые можно сохранять и перемещать. Появились ушлые люди, которые решили, а давайте эти излишки будут нашими. Как они будут нашими? А мы будем контроллировать рабочую силу (силой грубой физической) и они сами нам будут отдавать излишки. Кажется что полная фигня, но тут выяснилось, что это офигительно повышает эффективность, потому что если ты контролируешь достаточно рабочей силы, то способен реализовывать большие инфраструктурные проекты сильно повышающие эффективность производства. Поэтому эта форма отношений постепенно захватила мир, потому что те кто в государстве (а так появилось именно государство), те рулили. А те кто нет, тех захватывали другие государства.
Прогресс неудержимо рос, производство становилось все более высокотехнологичным, и роль средств производства в процессе производства всё возрастала. И тут другие ушные люди сказали, а мы тоже хотим излишков. Но как? А мы будем контролировать средства производства (без них вы ничего не произведете) а от того что произведете с ними, часть произведенного будет наша. Товарищи из п.1 были сильно не рады этому заходу, но тут выяснилось, что такой подход дает феноменальную гибкость и адаптивность, которую ни одно государство развить не может, и гибкость приводила к очень большой эффективности. И в результате серии буржуазных революций капиталисты сильно потеснили государство (но не уничтожили, оно является базой для их функционирования, но заметно снизили роль)
Маленькое отступление. Походу ошибка Ленина была в том, что он собирался средствами государства контролировать капиталистов. Но это движение назад, так не работает. Нужно двигаться вперед. Оно по логике развития событий должно как-то вырасти из капитализма, при этом за счет роста технологического прогресса.
- Наши дни. Технологической прогресс вырос настолько, что тот факт, что ты что-то производишь, вообще никого не удивляет и не радует. Производится столько что не всё может быть потреблено. А произведенное, но не потребленное не является благами, а является расходованием ценных ресурсов на производство мусора. А ушлые товарищи они хотят именно блага. Т.е. произведенное и потребленное. Именно акт потребления (не будем тут делать разницу между покупкой и потреблением) заставляет потребителя поделится своей личной долей в общественном производстве, которую можно потратить на очередную яхту. Критичной точкой тут является именно момент потребления, и смотрите, сейчас всякая сволочь стремится повлиять на то как я потребляю. Их очень интересует как я это делаю, и как на меня можно повлиять, чтобы я это делал в их интересах. Начиная с репостов-розыгрышей публикуемыми мелкими частниками во вконтакте и заканчивая мощными системами рекламной аналитики гугла-яндекса-фейсбука.
Смотря на это все, я всё недоумевал. А где тут эффективность? Да, оно позволяет лучше заниматься добровольным отъемом денежных средств у населения (о айфоны, вы идеал!!! Джобс -- гений), но не повышает эффективность общества в целом. Скорее наоборот понижает.
Но это похоже не финальная стадия развития. Фишка в том, что точка потребления находится на стороне потребителя. Ему её гораздо проще контролировать, чем скажем трудящемуся контролировать средства производства. Вероятно, желающие контролировать свое потребление, будут организовываться в потребительские сообщества, чтобы не допустить ушлых товарищей до этой своей интимной точки. И вот в этом месте как раз наблюдается та самая эффективность. Люди входящие в такие сообщества будут бочаге, свободнее и здоровее чем те кто не входит. Более того, сформировавшись такие сообщества начнут заниматься производством для внутреннего потребления. И поскольку у этого производства будет не капиталистическая цель, средства производства могут вполне оставаться под контролем тех кто ими трудится, или под контролем всего сообщества, которое будет совместно получать выгоду от этого производства. Т.е. практически коммунизм, в некоторой его форме.
Прикинул это к известным мне сообществам: Сообщество свободного ПО, автостопщики, торрет-сидеры, пиратские библиотеки... Всё действительно начинается с совместного потребления. Совместное потребление остается превалирующей деятельностью. При этом постепенно начинает возникать и производство в интересах сообщества, где-то больше, где-то меньше. И производство это совершенно не капиталистическое (хотя включает деньги и всё такое). Оно пост-капиталистическое.
Так что судя по всему путь именно таков. Можно готовиться и занимать удобные места.
(no subject)
DW'шный енжин RSS не сумел распарсить одну из записей ленты постгрессовых блогов, и как он это любит, вывалил raw-html вывод на эту тему... Один фразмент привел меня в глубокую задумчивость:
<img alt="😂" class="wp-smiley c1" src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f602.png" />
Из не вошедшего
-- Нет, его автоматизировать не надо... Этим ребятам автоматизация не нужна, им своих автоматов хватает".
Пусть будет записано буковками...
Выпустил релиз игры Goblin Camp v0.23
Goblin Camp — попытка создать опенсорсный клон игры Dwarf Fortress. Смысл игры в управлении поселением Гоблинов (или в оригинале Гномов), при этом управления косвенного, в игре не предусмотрено прямого управления Гоблинами/Гномами, можно лишь ставить задачи в общем виде, а вот как подопечные поведут себя в результате — вопрос мастерства организации...
https://gitlab.com/dhyannataraj/goblin-camp/-/releases/v0.23
Изначально Goblin Camp написал некто Ilkka Halila, в 2010, повозился с ней годик и забросил. Мне как любителю Dwarf Fortress, Rim World и прочих симуляторов колоний с непрямым управлением, постоянно хотелось запустить в них руки, но сильно останавливала закрытость кода. Возможность писать моды есть, но тратить свое время на разбирательство в закрытом коде, я считаю неуважением к человечеству, поэтому стараюсь избегать к этого… И вот я в какой-то момент таки нашел ту программу в которую запустить руки не зазорно.
На тот момент Gobln Camp была давно заброшена и категорически не собиралась на современных дистрибутивах. Пришлось приложить не нулевое количество усилий, чтобы оно заработало и задышало.
Этот релиз закрывает проблему с работой графических тайлов. Оригинальная версия от Ilkka Halila использовала библиотеку SDL версии 1, а сейчас доступна только SDL2. Пришлось разбираться и переделывать.
Кроме того, есть у меня подозрение, что графические тайлы там вообще никогда толком не работали: они не целиком загружались. Там были существенные проблемы с вычислением координат мышки и смещения при перетаскивании.
Самый лучший баг был такой: если устроить перетаскивание и перемещать мышь строго влево-вверх, то при отпускании кнопки мыши, оно дополнительно срабатывало как однократное нажатие левой кнопки. Если был хоть раз в процессе вильнул вниз или вправо, эффекта не возникало.
Плюс современная библиотека libtcod (которая лежит в основе движка игры) на этот старый код выдает кучу deprecation-warning’ов. Начал их постепенно зачищать…
Еще один веселый способ выстрелить себе в ногу
Сижу, переделываю код. Есть необходимость отучить постгрес запускать разные сервисные процессы. Решил по случаю переделать это по уму...
Переделываю кусок, запускаю, проверяю, переделываю, проверяю и тут падает оконная система... Вся.
Логинюсь обратно, восстанавливаю рабочий контекст, перехожу к проверке и оконная система падает снова.
Я, матерсь, выключаю компьютер, включаю компьютер, возвращаюсь к прерванной мысли, и оконная система падает снова.
Понимая, что дальше работать несудьба, прикидывая чего такое в компе должно сдохнуть чтобы было вот так вот, в ужасе понимая, что если это проблема в железе, то вообще трындец, мне в понедельник надо выходить в онлайн, другого компа у меня нет, и на работе замену выдать не успеют, все будут на конференции, я сворачиваю работу и начинаю двигаться к следующей точке сегодняшнего дня.
Пока еду, до меня начинает доходить...
Там для порождения сервисных процессов есть спец. фабрика, которая в качестве результата возвращает pid нового процесса. Для оторванных процессов я стал возвращать -1.
Видимо по какой-то своей внутренней логике, она после запуска сразу посылала одному из процессов какой-то сигнал (имеет право). А в линуксе процесс с номером -1 — это корневой процесс (скажите sudo pkill -9 -1, только не на подакшене, плиз)
Что это был за сигнал, и почему он будучи посланным от юзера (я постгрес запускал под собой) таки доходил до системного процесса — я не знаю, и наверное не буду разбираться, просто оторву посыл сигналов задезейбленным воркерам, благо там это тоже централизовано). Но эпичность допущенной ошибки меня восхитила. Можно мерить в сатиФаустах...
PS: и да, оконная система падала по нажатию Ctrl+C. Нажимаешь Ctrl+С в консоле и исчезает всё включая консоль!
Оно при принужительном завершении основного процесса кидало сигнал завершения детям, а он вместо этого уходил корневому процессу системы
- dev,
- it,
- извращения
Призовая игра с встраиванием питона
Я не возьмусь определять что мне более отвратительно libboost или python. Но право скажу собранные вместе в boost::python они производят на свет субстанцию непревзойденного свойства.
#include <boost/python.hpp> #include <stdio.h> int main() { Py_InitializeEx(0); boost::python::object modMath = boost::python::import("math"); boost::python::object cosFunc = modMath.attr("cos"); Py_Finalize(); }
С 2.7м питоном работает нормально, с третьем падает с невнятной ошибкой при отработке хуков при выходе...
Историю с локализацией места проблемы в портируемой программе с последующим вынесением в приведенный standalone, я опущу из-за малосодержательности и нецензурности... Скажу только, что gdb плюс правильно выбранные места для breakpoint'ов рулят.
Далее в процессе плясок вокруг этого примера вдруг обнаруживаю что вот так не падает:
int main() { Py_InitializeEx(0); { boost::python::object modMath = boost::python::import("math"); boost::python::object cosFunc = modMath.attr("cos"); } Py_Finalize(); }
Ага! думаю я. Оно позвало деструктор до финалайза а не после и все перестало падать... Надо сделать так же!
Но вот проблема... аналог переменной cosFunc в портируемой программе глобальная... Создается пустая, а потом после инициалайза заполняется. Можно было бы раскинуть мозгами, как запихнуть туда указатель вместо самого объекта, и сказать ему в нужный момент delete. Но менять весь остальной код очень не хотелось...
А нельзя ли так, чтобы для сложного объекта вызвался деструктор а сам объект опять заполнить пустым значением?
Оказывается можно:
int main() { Py_InitializeEx(0); boost::python::object cosFunc; { boost::python::object modMath = boost::python::import("math"); cosFunc = modMath.attr("cos"); } cosFunc = boost::python::object(); Py_Finalize(); }
оно заменяет сложное значение cosFunc
тривиальным, при этом для заменяемого значения вызывается деструктор.
И вот так -- тоже не падает...
P.S. Отдельно доставила рекомендация документации на 1.55 boost::python просто не вызывать Py_Finalize()
, типа не надо вам это.
P.P.S. Пришел к мысли что сам питон не падает только потому что и так ползает. And you should not boost it.
P.P.P.S. Честно говоря не верил, что осилю с этим разобраться. Без знания, что буста, что питона... Ан нет, получилось...
Телеграмм головного мозга
У человека заведшего себе телеграмм в мозгу происходят неизбежные (но надеюсь что обратимые) изменения. Если коротко, он начинает считать что все остальные должны тоже установить телеграмм и с ним в этом телеграмме общаться. Он сильно недоумевает, если ему попытаться объяснить что это не так. И даже обижается. О такой вещи, как приватность он не знает вовсе.
Подозреваю что изменения эти целенаправленно инспирированы администрацией телеграмма (см. ниже п.1.), и с моей точки зрения являются диверсией мирового масштаба.
Примеры:
Мне по работе таки стало жестко необходимо читать несколько групповых чатов. Один раз, не этот самый, думаю я и регистрирую телеграм на один из своих публично известных номеров. И тут, внимание, о том что я завел телеграмм автоматически узнают все у кого этот номер был в записной книжке, и начали мне писать радостные восклицания. Повлиять на этот процесс я не мог никак. Приватность? Нет, не слышали! Отдельно доставляет что остальные пользователи сливали мой номер вместе со списком остальных контактов третьим лицам. С моей точки зрения это действие является явно не этичным, и очень расстраивает, что такие вещи стали нормой. Я проклял телеграмм, поставил этот аккаунт на удаление, и завел другой аккаунт на номер который никто не знает.
В этом аккаунте у меня установлена иконка, явным образом указывающая что телеграмм является нежелательным средством связи, а вместо имени указаны предпочитаемые контакты. Но отдельных товарищей из знающих этот аккаунт, это факт не останавливает, они все равно пытаются использовать этот способ связи, и обижаются если объяснять им что этого не надо делать. Мораль — единственный способ обеспечить приватность — полная секретность. Как только контакт становиться известен, телеграммные пользователи туда начинают ломиться как зомби.
Для настройки бридж-бота мне понадобился аккаунт заведенный на корпоративный номер (бридж корпоративный, контроль должен быть у компании а не у меня). Посовещавшись завели его на рабочий телефон одного из админов. Теперь мне время от времени на этот аккаунт приходят сообщения адресованные ему. И это не остановить никак... ВООБЩЕ НИКАК. Нет возможности сказать "меня нету". Завел аккаунт, вышел в онлайн, ты есть, ты ОБЯЗАН общаться.
Товарищи, это вообще трындец. Это большой трындец. Мне очень жаль что его никто не видит, даже если в него прицельно тыкать пальцем...
На вопрос что делать, в личном порядке, ответ наверное есть, я об этом говорил, но это тема для отдельной заметки...
Этот ваш python течет...
#include <Python.h> int main() { Py_Initialize(); Py_Finalize(); }
Собрать с санитайзером ASan, хоть со вторым, хоть с третьим питоном
clang-11 test.c -fsanitize=address -g -O0 -I /usr/include/x86_64-linux-gnu/python2.7 -I /usr/include/python2.7 -lpython2.7
clang-11 test.c -fsanitize=address -g -O0 -I /usr/include/x86_64-linux-gnu/python3.9 -I /usr/include/python3.9 -lpython3.9
Результат один: кучка мемори ликов. В 2.7 побольше, в 3.9 небольшая...
А если под полезной нагрузкой, так их вообще на много экранов...
И эти люди мне запрещают ковыряться в носу!
Надо позаимствовать у Витуса тег "злые люди"....
Полное удвоение разнядности
Ну все... beldmit,
vitus_wagner, ликуйте!
У меня таки не осталось осмысленных хост-машин с архитектурой i386. Извел последнюю....
Этой зимой благополучно издох Енот, который был аппаратно 32х битный.
Под первые выстрелы спецоперации он был благополучно заменен на 64х битного Вомбата. И на вновь обретенной системе мной была опробована процедура crossgrade'инга, перевода системы с i386 на amd64. Глючная как моя жизнь. Нет. corssgrade'инг глючнее, и это говорит о многом.
Теперь я на своем отпуске-больничном, таки проапгрейдил все контейнеры с домашнего сервера и перекинул их на того самого новообретенного Вомбата. И вот теперь получил возможность безопасно crossgrade'нуть домашний сервер. Который аппаратно был amd64 давно, но когда я его сетапил, 64битный линукс глючил безбожно и не показывал важный тогда для некоторых сайтов флеш...
Кроссгрейдинг прошел успешно. Торренты водружены на место. Как работает бэкап -- узнаем ночью...
Так что теперь у меня все актуальные хосты 64битные, есть достаточно 32х битных контейнеров, но это исправимо. И все контейнеры обновлены как минимум до buster. Такой свежести моя инфраструктура давно не знала :-)
И обросло питонами
Пока болею, причесываю свою серверную инфрастуктуру.
Старый svn контейнер со времен минимум squeeze (не выбразывать же) переехал на хетзнер. Там проблем с пробросом нужных портов нету. Зато важен размер контейнера, поэтому задался вопросом, почему он такой толстый... Ну те то чтобы Толстый, но заметно толще вновь созданных. В поцессе исследования обнаружил там питоны 2.7, 3, 3.4, 3.5, 3.7, 3.9. Ну или какие-то следы от них. Перла обнаружено только два: 5.28 и 5.32 (ну или опять же какие-то следы от них).
Буду изучать вопрос поиска и удаления obsolete packages. Авось поможет :-)
СЯУ How to git ignore
TL;TR: это про .git/info/exclude
, если знаете, то можно пропускать.
С постгресом у меня была вечная проблема: я пытаюсь таки перейти на разработку в vim'е (с переменным успехом, но последовательно движусь). Для того чтобы в vim'е переходить по имени функции к месту ее определения нужно созать tags-файлы при помощи утилиты ctags. Все хорошо, но потом эти tags файлы в огромном количестве болтаются в выводе git status
. А если добаивть их в .gitignore
то надо постоянно следить за этой незакоммиченной правкой (в апстрим ее никто не возьмет)
И вот мне это окончательно надоело и я пошел гуглить. Выяснилось, что есть еще локальный гитигнор, который называется .git/info/exclude
. Работает абсолютно идентично, но в remote не попадает.
Добавил туда tags
, и теперь доволен как слон... :-)
perl redo: Век живы, век учись
my $i=0; foreach (1,2,3) { print $_,"\n"; $i++; redo if $i<2; }
печатает
1 1 2 3
PS так, постойте... В DW был же маркдаун... Куда делася? Не вижу как включить...
Как я со всем этим справляюсь
Так вот, что мне помогает не сойти с ума и не впасть в панику.
1. Маятники. (в общем случае центрирующая техника)
2. Медитация на высший порядок. (Слово дхарма имеет много смыслов. Одно из них порядок или закон, в том числе и высший. Если установить контакт с источником этой дхармы, многое становиться легче. Этакое структурирование сверху)
3. Найти то что действительно реально ценно. Любимая женщина, дети, родители. То ради чего следует быть в адеквате, и ориентируясь именно на эти ценности делать все остальное. Именно личные ценности, не глобальные.
Это то что позволило стабилизороваться. Но далее что с этой стабильностью делать, при этом так чтобы ее не растратить:
4. Изолиовал себя от чужой паники. Во вконтакте есть кнопка не "показывать неделю". Очень рекомендую применять ко всем высказываниям по теме, вне зависимости от того в какую строну вас это высказывание триггерит. В случае личного общения разговоры об ЭТОМ либо просить свернуть, либо прерывать вообще всю коммуникацию, если люди не говорить об этом не способны.
5. Занялся решением практических вопросов которые могут возникнуть в новой надвигающейся реальности. Без паники. В моем случае это оказалось сделать полный бэкап виртуальных серверов которые у меня в германии, и еще купил БУшный сервер для работы тут (благо это было и так запланировано). Что могу — делаю. Что не могу — на то воля аллаха...
6. Помню, что я не могу ничего поменять. Все что происходит, уже на самом деле произошло, надо просто дождаться пока эта информация до меня доедет. Понимаю, что я не могу помочь всем. Поэтому только близким. Остальные успокоительные слова по остаточному принципу. Но что я точно не делаю, не гружу других своей паникой.
И вообще берегите силы нервы и здоровье. Катаклизмы рано или поздно заканчиваются и силы после них понадобятся очень сильно. Не сливайте их сейчас попусту...
https://blog.nataraj.ru/~/GeneralPurposeBlog/Как%20я%20со%20всем%20этим%20справляюсь