#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