#linux
Не такие уж и сложные исходники systemd оказываются: https://github.com/systemd/systemd/blob/main/src/core/job.c Это конечно беглая оценка, но после всего вычитанного в интернете ожидал увидеть какую-нибудь убойную си-портянку, но в итоге даже мне не-сишнику было понятно что примерно происходит в коде
Не такие уж и сложные исходники systemd оказываются: https://github.com/systemd/systemd/blob/main/src/core/job.c Это конечно беглая оценка, но после всего вычитанного в интернете ожидал увидеть какую-нибудь убойную си-портянку, но в итоге даже мне не-сишнику было понятно что примерно происходит в коде
GitHub
systemd/src/core/job.c at main · systemd/systemd
The systemd System and Service Manager . Contribute to systemd/systemd development by creating an account on GitHub.
#dev #bash #сомнения
Столько философских дум у меня вообще ничего не вызывало. Сидишь пишешь эти портянки на баше, и думаешь - а может нахер его, взять ruby или go и пусть себе дергают system вызовы? Потом думаешь - нет уж, допишу на баше, и абстрагирую. Упарываешься в абстрагирование на баше и понимаешь, что проще написать as is и забить, уж больно не уклюжэ все эти высоко-уровневые абстракции выражаются на баше. Да даже простые абстракции не очень удобно выражать. В общем, хрен знает.
Дописываю уже какую версию своего provise/backup/restore - скрипта для своих маленьких серваков с докером. И все это порой так неуклюже, если честно. Зато работает для меня и моих серваков.
Успокаиваю себе так - это hand crafted development, тут от души и уникально.
Программисты должны хотеть унифицировать, это как бы естественное желание — но баш, блин, это прям испытание воли для унификатора.
Наверное его нужно принять и очень сильно полюбить. После осознания команды test и отказа от if у меня как-то получше пошло.
P.S. - средства провизионинга ака ansible не предлагать, знаю, цель не развернуть, а в чем-то другом ... пока не понял в чем.
Столько философских дум у меня вообще ничего не вызывало. Сидишь пишешь эти портянки на баше, и думаешь - а может нахер его, взять ruby или go и пусть себе дергают system вызовы? Потом думаешь - нет уж, допишу на баше, и абстрагирую. Упарываешься в абстрагирование на баше и понимаешь, что проще написать as is и забить, уж больно не уклюжэ все эти высоко-уровневые абстракции выражаются на баше. Да даже простые абстракции не очень удобно выражать. В общем, хрен знает.
Дописываю уже какую версию своего provise/backup/restore - скрипта для своих маленьких серваков с докером. И все это порой так неуклюже, если честно. Зато работает для меня и моих серваков.
Успокаиваю себе так - это hand crafted development, тут от души и уникально.
Программисты должны хотеть унифицировать, это как бы естественное желание — но баш, блин, это прям испытание воли для унификатора.
Наверное его нужно принять и очень сильно полюбить. После осознания команды test и отказа от if у меня как-то получше пошло.
P.S. - средства провизионинга ака ansible не предлагать, знаю, цель не развернуть, а в чем-то другом ... пока не понял в чем.
#bash
Шла 2-ая неделя осознания bash scripting'а, а значит я уже готов подойти к самой больной теме для меня: как вернуть массив из bash-функции (и обработать его). Открываю ящик пандоры. В целом, после осознания IFS стало проще эту проблему рассматривать.
Шла 2-ая неделя осознания bash scripting'а, а значит я уже готов подойти к самой больной теме для меня: как вернуть массив из bash-функции (и обработать его). Открываю ящик пандоры. В целом, после осознания IFS стало проще эту проблему рассматривать.
#bash
Дописал свою бек-апилку на bash'е. За время работы над этим набором скриптов узнал и осознал про баш и линукс так много, как не узнавал за несколько лет работы. Линукс конечно "прост" (как говорят) в концепции, но на деле это тысячи мелочей и делателей, и чтение любого мана на какую-нибудь около ядровую тему - целая работа. Мозг очень долго вставал на тему того как можно безопасно переадресовывать uid из хоста в контейнера — но дело даже не в самой концепции, а в том как это все подружить с докером, бекапами, правами и прочим.
В остальном же я понял, что нужно изучать ansible и не выпендриваться :)
- тема безопасности контейнеров заслуживает внимания (да и любая другая тема в отрасли, но это прям очень важная тема оказалась - https://arxiv.org/pdf/2104.07508.pdf), наверное за рутовые контейнеры в рутовом докере надо ругать, ну или как в основном сейчас делают, надеятся что создатели образов будут указывать пользователя контейнера
- как подсказал мне один мой давний друг, что это стокгольмский синдром, но в какой-то момент баш начинает нравиться; но писать на нем что-то большее 500 строк уже становится трудно ... и на самом деле лениво. 😀 а стиль написани на нем должен быть максимально "в лоб", потому что иначе это не безопасно, особенно когда распространяешь скрипты в интернете ... 😃
https://github.com/pechorin/pbr.sh
Дописал свою бек-апилку на bash'е. За время работы над этим набором скриптов узнал и осознал про баш и линукс так много, как не узнавал за несколько лет работы. Линукс конечно "прост" (как говорят) в концепции, но на деле это тысячи мелочей и делателей, и чтение любого мана на какую-нибудь около ядровую тему - целая работа. Мозг очень долго вставал на тему того как можно безопасно переадресовывать uid из хоста в контейнера — но дело даже не в самой концепции, а в том как это все подружить с докером, бекапами, правами и прочим.
В остальном же я понял, что нужно изучать ansible и не выпендриваться :)
- тема безопасности контейнеров заслуживает внимания (да и любая другая тема в отрасли, но это прям очень важная тема оказалась - https://arxiv.org/pdf/2104.07508.pdf), наверное за рутовые контейнеры в рутовом докере надо ругать, ну или как в основном сейчас делают, надеятся что создатели образов будут указывать пользователя контейнера
- как подсказал мне один мой давний друг, что это стокгольмский синдром, но в какой-то момент баш начинает нравиться; но писать на нем что-то большее 500 строк уже становится трудно ... и на самом деле лениво. 😀 а стиль написани на нем должен быть максимально "в лоб", потому что иначе это не безопасно, особенно когда распространяешь скрипты в интернете ... 😃
https://github.com/pechorin/pbr.sh
GitHub
GitHub - pechorin/pbr.sh: backup & restore for small ubuntu hosts with remote setup and namespace remapping for docker
backup & restore for small ubuntu hosts with remote setup and namespace remapping for docker - pechorin/pbr.sh
#dev #ansible #bash #гештальт_закрыт
После нескольких месяцев борьбы с башем по ночам таки познал этого зверя чуть больше (относительно предыдущего непонимания), и дико рад этому, во многих "программерских ситуациях" теперь можно ощущать себя увереннее, впрочем, это эффект любого обучения и освоения.
Но поддерживать все эти вещи ... короче, я попробовал перевести пару своих хостов, их развертывание, бекапы и восстановление теперь уже на такую связки (уйдя от plain bash + restic): ansible -> bash + jinja2 templates
И о боги, как же проще теперь программировать bash логику с jinja, спасибо ansible.
При этом на хост:
- ansbile генерирует и заливает два скрипта: backup.sh и restore.sh, которые можно просто запустить (там уже все настроено)
- скрипт на бекап добавляется в крон
- после успешного или не успешного бекапа мне приходит уведомление в телегу :)
Так же смог зафигачить playbook с local action'ом: локальная тачка теперь бекапится каждую ночь (если ноутбук работает) с самыми hot данными, и раз в неделю делается archive бекап с всякими фотками/книгами и прочими cold данными.
Итого имеем (на мой вкус):
- закрытый гештальт на тему бекапов, как локальных так и хостовых.
- ansible это круто, и это мега правильно, потому что написов несколько тысяч строк кода на баше (и переписав несколько раз программу) ты приходишь для себя к некому майндсэту готовых паттернов (а баш дает большое разнообразие в выборе этих паттернов, поэтому выносит мозг) и по сути ansible все это заменяет давая тебе нужные reusable блоки.
Немного на тему безопасности:
- Немного подзабил и засвечиваю credentials данные в env переменных в скриптах, так делают все, но это очень плохо. В следующей итерации перепишу на такой способ доступный только в bash:
- файл roles_webserver_tasks_main.yml не только настраивает сервер, но и делает namespace remapping, чтобы ваши контейнеры не имели доступа к руту хоста.
https://gist.github.com/pechorin/ebb3991a118d804b5a7bee20a47e599c
После нескольких месяцев борьбы с башем по ночам таки познал этого зверя чуть больше (относительно предыдущего непонимания), и дико рад этому, во многих "программерских ситуациях" теперь можно ощущать себя увереннее, впрочем, это эффект любого обучения и освоения.
Но поддерживать все эти вещи ... короче, я попробовал перевести пару своих хостов, их развертывание, бекапы и восстановление теперь уже на такую связки (уйдя от plain bash + restic): ansible -> bash + jinja2 templates
И о боги, как же проще теперь программировать bash логику с jinja, спасибо ansible.
При этом на хост:
- ansbile генерирует и заливает два скрипта: backup.sh и restore.sh, которые можно просто запустить (там уже все настроено)
- скрипт на бекап добавляется в крон
- после успешного или не успешного бекапа мне приходит уведомление в телегу :)
Так же смог зафигачить playbook с local action'ом: локальная тачка теперь бекапится каждую ночь (если ноутбук работает) с самыми hot данными, и раз в неделю делается archive бекап с всякими фотками/книгами и прочими cold данными.
Итого имеем (на мой вкус):
- закрытый гештальт на тему бекапов, как локальных так и хостовых.
- ansible это круто, и это мега правильно, потому что написов несколько тысяч строк кода на баше (и переписав несколько раз программу) ты приходишь для себя к некому майндсэту готовых паттернов (а баш дает большое разнообразие в выборе этих паттернов, поэтому выносит мозг) и по сути ansible все это заменяет давая тебе нужные reusable блоки.
Немного на тему безопасности:
- Немного подзабил и засвечиваю credentials данные в env переменных в скриптах, так делают все, но это очень плохо. В следующей итерации перепишу на такой способ доступный только в bash:
restic --password-file=<(echo $backup_storage_password)- файл roles_webserver_tasks_main.yml не только настраивает сервер, но и делает namespace remapping, чтобы ваши контейнеры не имели доступа к руту хоста.
https://gist.github.com/pechorin/ebb3991a118d804b5a7bee20a47e599c
Gist
backup with ansible + restic + rclone (local backup included); server setup for docker with optional namespace remapping
backup with ansible + restic + rclone (local backup included); server setup for docker with optional namespace remapping - backup.sh.j2
👍2
Forwarded from Двач
This media is not supported in your browser
VIEW IN TELEGRAM
На размышление 30 секунд
😁3
#js #оптимизации_компилятора
Пару лет считал себя недостаточно умным для статьи https://mrale.ph/blog/2015/01/11/whats-up-with-monomorphism.html
Если кратко, то ничего не изменилось, но давайте о коде:
Такой код будет жестко закеширован (inline caching) компилятором v8, но чтобы это было возможным нужно понять что объекты, а точнее их поля одинаковы (shapes).
Есть проблема, shape'ы объектов легко могут быть не равны, при внешней схожести:
Но по итогу не надо об этом беспокоиться. Эта штука интересна с точки зрения того как v8 оптимизирует и компилирует код в более эффективное представление. Интересно, есть ли шейпы в ruby компиляторе.
Успокоительный итог от автора:
> Indeed worrying about polymorphism is usually futile. Instead benchmark your code on a realistic dataset, profile it for hotspots and if any of them are JS related - check out IR that optimizing compiler produces.
> If in the middle of your tight number crunching loop you see IR instruction called XYZGeneric or anything marked with red changes[*] (aka “changes everything”) marker - then (only then!) it might be the right time to start worrying.
Пару лет считал себя недостаточно умным для статьи https://mrale.ph/blog/2015/01/11/whats-up-with-monomorphism.html
Если кратко, то ничего не изменилось, но давайте о коде:
function f(o) {
return o.x
}
f({ x: 1 })
f({ x: 2 })
Такой код будет жестко закеширован (inline caching) компилятором v8, но чтобы это было возможным нужно понять что объекты, а точнее их поля одинаковы (shapes).
Есть проблема, shape'ы объектов легко могут быть не равны, при внешней схожести:
function A() { this.x = 1 }
function B() { this.x = 1 }
var a = new A,
b = new B,
c = { x: 1 },
d = { x: 1, y: 1 }
delete d.y
// a, b, c, d all have DIFFERENT SHAPES for V8
Но по итогу не надо об этом беспокоиться. Эта штука интересна с точки зрения того как v8 оптимизирует и компилирует код в более эффективное представление. Интересно, есть ли шейпы в ruby компиляторе.
Успокоительный итог от автора:
> Indeed worrying about polymorphism is usually futile. Instead benchmark your code on a realistic dataset, profile it for hotspots and if any of them are JS related - check out IR that optimizing compiler produces.
> If in the middle of your tight number crunching loop you see IR instruction called XYZGeneric or anything marked with red changes[*] (aka “changes everything”) marker - then (only then!) it might be the right time to start worrying.
#dev #search
Перевод тут моментами не очень хорош, в плане смысловой передачи и описания последовательности процесса поиска, но важно не это.
Вроде ничего так, что github так подробно делится такими важными внутренними архитектурами и решениями — не каждый корпорат будет таким заниматься 🙂
https://habr.com/ru/company/skillfactory/blog/718350/
Перевод тут моментами не очень хорош, в плане смысловой передачи и описания последовательности процесса поиска, но важно не это.
Вроде ничего так, что github так подробно делится такими важными внутренними архитектурами и решениями — не каждый корпорат будет таким заниматься 🙂
https://habr.com/ru/company/skillfactory/blog/718350/
Хабр
Как работает поиск по коду на Github
От запуска ознакомительной версии нового улучшенного поиска кода год назад до публичной беты , которую мы выпустили на GitHub Universe в прошлом ноябре, появилась масса инноваций и резких изменений в...
#android
Таки решился оставить комфортную инфраструктуру Эпла. Андроид, конечно, подтянулся за последние годы, и ощущения от oneplus самые люксовые :) Да, бывают глюки, зато магазины приложений могу поставить разные, и есть даже опенсорсные вроде F-Droid.
Удивило что ни Google Диск, ни Яндекс Диск не умеют в автоматическую синхронизацию папок (именно папок и файлов, не фоток), Эпл это умел. Но и это решилось бесплатным приложением FolderSync.
Все мои приложения есть на обоих платформах. Заметки фигачу в Obsidian, так что проблем с отказом от стандартных Эпловских заметок не было.
А разделение экрана на Андроиде вообще бомба, и не думал что так удобно может быть, а не квадратик в углу как у Эпла (а с санкциями теперь и не посмотришь таким образом Ютюб).
Короче норм. Амолед экраны Самсунга победили.
Таки решился оставить комфортную инфраструктуру Эпла. Андроид, конечно, подтянулся за последние годы, и ощущения от oneplus самые люксовые :) Да, бывают глюки, зато магазины приложений могу поставить разные, и есть даже опенсорсные вроде F-Droid.
Удивило что ни Google Диск, ни Яндекс Диск не умеют в автоматическую синхронизацию папок (именно папок и файлов, не фоток), Эпл это умел. Но и это решилось бесплатным приложением FolderSync.
Все мои приложения есть на обоих платформах. Заметки фигачу в Obsidian, так что проблем с отказом от стандартных Эпловских заметок не было.
А разделение экрана на Андроиде вообще бомба, и не думал что так удобно может быть, а не квадратик в углу как у Эпла (а с санкциями теперь и не посмотришь таким образом Ютюб).
Короче норм. Амолед экраны Самсунга победили.
Last.fm разбанили, за это спасибо, перед приездом товарища Си наверное 😀
🔥1
#openai
Всю жизнь нас учат конкурировать и мы делаем это ... но учили ли нас конкурировать с роботами? К такому меня жизнь не готовила, но кажется это уже начинается. Ну ок, вдруг это еще не самое страшное. А страшное начнется когда по-настоящему вскроют (взломают) концепт мышления/сознания.
Всю жизнь нас учат конкурировать и мы делаем это ... но учили ли нас конкурировать с роботами? К такому меня жизнь не готовила, но кажется это уже начинается. Ну ок, вдруг это еще не самое страшное. А страшное начнется когда по-настоящему вскроют (взломают) концепт мышления/сознания.
#habr просто по цифрам уже не торт. Открыл только что статью 2021-го года, около 1000+ комменатриев. В статьях 2023-го года я таких цифр не помню даже примерно. Goodbay, dear habr, ты был крут.
#games
Genshin impact это просто феноменально ахрененно, отбрасывая детали гачи и прочей херачи. Хочется просто лазить по скалам, раздувать огонь ветром, смотреть на местные поляны и бектречить сундучки и старые локации. Не могу передать как скупо теперь ощущаются другие открытые миры.
Genshin impact это просто феноменально ахрененно, отбрасывая детали гачи и прочей херачи. Хочется просто лазить по скалам, раздувать огонь ветром, смотреть на местные поляны и бектречить сундучки и старые локации. Не могу передать как скупо теперь ощущаются другие открытые миры.
Richard Stallman's thoughts on ChatGPT, Artificial Intelligence and their impact on humanity
For those who aren't aware of Richard Stallman, he is the founding father of the GNU Project, FSF, Free/Libre Software Movement and the author of GPL.
Here's his response regarding ChatGPT via email:
I can't foretell the future, but it is important to realize that ChatGPT is not artificial intelligence. It has no intelligence; it doesn't know anything and doesn't understand anything. It plays games with words to make plausible-sounding English text, but any statements made in it are liable to be false. It can't avoid that because it doesn't know what the words _mean_.
For those who aren't aware of Richard Stallman, he is the founding father of the GNU Project, FSF, Free/Libre Software Movement and the author of GPL.
Here's his response regarding ChatGPT via email:
I can't foretell the future, but it is important to realize that ChatGPT is not artificial intelligence. It has no intelligence; it doesn't know anything and doesn't understand anything. It plays games with words to make plausible-sounding English text, but any statements made in it are liable to be false. It can't avoid that because it doesn't know what the words _mean_.
#opensource
Ура, мой небольшой патч-доработку приняли в ruby rswag https://github.com/rswag/rswag/pull/605
Мелочь, а с утра приятно 🙂
Не в рельсу, так хоть в rswag'г поконтрибьютил.
Совет от себя: лучше юзайте zerorails openapi (https://github.com/zhandao/zero-rails_openapi) и подобные решения, test-based-openapi это такое себе, на любителя или на того, кто дальше первой ссылке в гугле не ходит.
Ура, мой небольшой патч-доработку приняли в ruby rswag https://github.com/rswag/rswag/pull/605
Мелочь, а с утра приятно 🙂
Не в рельсу, так хоть в rswag'г поконтрибьютил.
Совет от себя: лучше юзайте zerorails openapi (https://github.com/zhandao/zero-rails_openapi) и подобные решения, test-based-openapi это такое себе, на любителя или на того, кто дальше первой ссылке в гугле не ходит.
GitHub
parameter[:getter] option by pechorin · Pull Request #605 · rswag/rswag
Problem
Adopted pull request #436
Fix known issue: conflict with rspec default matchers include #188 (and also with status method)
Solution
Add support for :getter parameter option to explicitly de...
Adopted pull request #436
Fix known issue: conflict with rspec default matchers include #188 (and also with status method)
Solution
Add support for :getter parameter option to explicitly de...