`git` vs `git --bare`
Ваш гит репозиторий может существовать в двух вариантах: обычный и
Вы можете на своём впс создать
Почему-то когда создаёшь обычный, то он для себя создаёт отдельную директорию
Смешная шутка: если вы положите
#linux #howto #man #githttps://hshhhhh.name/2025/11/09/5235/
Ваш гит репозиторий может существовать в двух вариантах: обычный и
--bare. Обычный это ~гит-клиент, а необычный это ~гит-сервер. Ну то есть как бы нет, но --bare существует чтобы его как remote использовали обычные репозитории. И в нём ещё нет файлов.Вы можете на своём впс создать
--bare `репозиторий и через `ssh в него синхронизироваться не используя никаких сервисов вроде гитхаба. И каждый у кого будет ssh доступ тоже сможет его использовать как remote.Почему-то когда создаёшь обычный, то он для себя создаёт отдельную директорию
/.git, а когда --bare то он указанный путь использует как .git.> git init ./git-normal/
Initialized empty Git repository in /tmp/.dotfiles/git-normal/.git/
> git init --bare ./git-bare/
Initialized empty Git repository in /tmp/.dotfiles/git-bare/
> ls -lah git-normal/
.git/
> ls -lah git-bare/
hooks/
info/
objects/
refs/
HEAD
config
description
Смешная шутка: если вы положите
--bare в ./.git/, то оно будет выглядеть как будто бы ./ тут есть гит, и он даже есть, но его нет!fatal: this operation must be run in a work tree
#linux #howto #man #git
Шорткаты терминала
В терминале можно неплохо удалять. Например, если у вас есть строка и курсор в центре:
То вы можете:
-
-
Почему?
#linux #why #wtf #cursedhttps://hshhhhh.name/2025/11/10/5287/
В терминале можно неплохо удалять. Например, если у вас есть строка и курсор в центре:
xxx xxx █ xxx xxx
То вы можете:
-
CTRL+W чтобы удалить слово слева-
ALT+D чтобы удалить слово справаПочему?
#linux #why #wtf #cursed
Послушайте, а вот представьте что вы видите апач, но этот апач внутри того докера.
То есть как бы апач, а как бы и внутри докера.
То есть вот вас вроде бы и тошнит, а вроде бы и в пакет.
#linux #apachehttps://hshhhhh.name/2025/11/12/5289/
То есть как бы апач, а как бы и внутри докера.
То есть вот вас вроде бы и тошнит, а вроде бы и в пакет.
#linux #apache
Много сгоревших свечей пришлось сжечь чтобы разобраться как работает генератор статических сайтов zola.
Оно использует
Оказалось, что оно не может рендерить
Это печально — упасть на тексте который не надо трогать.
#zola #web #ssg #markdown #wtfhttps://hshhhhh.name/2025/11/16/5297/
Оно использует
.md файлы и это должен быть максимально безопасный вариант.Оказалось, что оно не может рендерить
``` и зачем-то внутри всё оборачивает слоями <code> и <p> даже если выключена подсветка.Это печально — упасть на тексте который не надо трогать.
#zola #web #ssg #markdown #wtf
А что если мы посмотрим на OPIE и OTPW и решим что это нам не нужно.
Но сделаем регистрацию на сайте через генерацию OTP. Однофакторную. Пока есть доступ к секретному ключу — есть доступ к сайту.
Не нужно ни помнить паролей, ни использовать ни имейлов, ни имён!
Свежо! Тупо и свежо!
#whatif #otp #ideahttps://hshhhhh.name/2025/11/18/5320/
Но сделаем регистрацию на сайте через генерацию OTP. Однофакторную. Пока есть доступ к секретному ключу — есть доступ к сайту.
Не нужно ни помнить паролей, ни использовать ни имейлов, ни имён!
Свежо! Тупо и свежо!
#whatif #otp #idea
Когда
Но этого можно избежать этими двумя способами:
Во втором случае не будет предупреждения! Но не потому что мы просто отключаем проверку, а мы делаем хост нам известным!
Теперь вы понимаете что профессионала отличает то какие способы он выбирает! Будьте профессионалами, выбирайте безопасность!
#linux #ssh #safetyhttps://hshhhhh.name/2025/11/22/5330/
ssh подключается к неизвестному хосту она зачем-то просит человека написать "yes". Никто не знает зачем это нужно делать, но без этого ssh не подключается.Но этого можно избежать этими двумя способами:
# 1. Отключить опцией (небезопасно)
$ ssh -o "StrictHostKeyChecking no" user@example.com
# 2. Автоматически сделать так чтобы хост был известным
$ ssh-keyscan -t rsa example.com >> ~/.ssh/known_hosts
$ ssh user@example.com
Во втором случае не будет предупреждения! Но не потому что мы просто отключаем проверку, а мы делаем хост нам известным!
Теперь вы понимаете что профессионала отличает то какие способы он выбирает! Будьте профессионалами, выбирайте безопасность!
#linux #ssh #safety
Google развивает ОС Aluminium для ноутбуков и планшетов
А будет форк OS Aluminum?
#deep
There are two types of hooks: Actions and Filters.
Actions allow you to add data or change how WordPress operates.
Filters give you the ability to change data during the execution of WordPress Core, plugins, and themes.
function add_action( $hook_name, $callback, $priority = 10, $accepted_args = 1 ) {
return add_filter( $hook_name, $callback, $priority, $accepted_args );
}
function has_action( $hook_name, $callback = false ) {
return has_filter( $hook_name, $callback );
}public function has_filters() {
foreach ($this->callbacks as $callbacks) {
if ($callbacks) {
return true;
}
}
return false;
}#php #wordpress #why
Все мы знаем что
Точно так же каждый
Символ
Удобно. Униформатично.
И тут приходит глупый твиттер и решает что теперь все будут
Всё потеряно. Дальше только хуже.
#deep #blasphemyhttps://hshhhhh.name/2025/11/28/5359/
email@example.com -- это имейл. Но что значит имейл? А значит оно что на сервере который находится по адресу example.com есть аккаунт с именем email. Ещё мы знаем что это имейл поэтому мы знаем на какой порт обращаться и какой протокол использовать (уточним детали в dns).Точно так же каждый
*nix аккаунт можно записать как user1@computer1 что значит что на computer1 есть аккаунт user1.Символ
@ буквально называется at:- user1-at-computer1 - email-at-example.comУдобно. Униформатично.
И тут приходит глупый твиттер и решает что теперь все будут
@user2 и сломал интернет. ТВИТТЕР ДОЛЖЕН БЫЛ ИСПОЛЬЗОВАТЬ user2@ !!!111Всё потеряно. Дальше только хуже.
#deep #blasphemy
🤔1
Вы уже знаете что я презираю
У меня есть очереди сообщений и их опустошаютпчёлы воркеры. Воркеры раз в час умирают, но мой любимый крон их оживляет и заставляет работать дальше.
Это всего один сервер и больше серверов никогда не будет (но меньше будет) поэтому не надо меня критиковать пожалуйста.
Воркеров много (несколько), очередей ещё больше (несколько несколько), они жили в гармонии, но у меня что-то не получилось и воркеры начали смертельно крутиться и жрать память. И сожрали всю.
Используя несложные заклинания вроде "раньше всё было нормально, значит виноваты мои вчерашние изменения" достаточно легко получилось найти какой воркер сломался. Он был убит совсем, а остальным было сказано работать и игнорировать труп рядом.
И они работали. Час. А потом нет. Руками запускаешь -- работают. А сами потом не работают.
Было удивительно ведь крон никто не трогал, память перестала пропадать, а воркеры не хотят оживать.
Книга жизни (
Оказалось что когда воркеры сожрали всю память -- следящая собака убила крон. Я сомневаюсь что она поняла что именно крон виновник пропадающий памяти, просто попался под лапу смерти.
Первый раз в моей жизни сторожевая собака убила крон! Невероятно!
А выжили бы
Загадка. Можно было бы конечно провести эксперимент, но не нет. Императивные знания нужны только людям со слабой верой!
#linux #cron #oom #outofmemory #memory #memoryleak #loopofdeath #systemd #systemdtimershttps://hshhhhh.name/2025/12/09/5377/
systemd, сильно больше чем wayland, но будущее когда-нибудь будет в будущем, а прошлое всё ещё будет в прошлом.У меня есть очереди сообщений и их опустошают
Это всего один сервер и больше серверов никогда не будет (но меньше будет) поэтому не надо меня критиковать пожалуйста.
Воркеров много (несколько), очередей ещё больше (несколько несколько), они жили в гармонии, но у меня что-то не получилось и воркеры начали смертельно крутиться и жрать память. И сожрали всю.
Используя несложные заклинания вроде "раньше всё было нормально, значит виноваты мои вчерашние изменения" достаточно легко получилось найти какой воркер сломался. Он был убит совсем, а остальным было сказано работать и игнорировать труп рядом.
И они работали. Час. А потом нет. Руками запускаешь -- работают. А сами потом не работают.
Было удивительно ведь крон никто не трогал, память перестала пропадать, а воркеры не хотят оживать.
Книга жизни (
/var/log/syslog | grep -i cron) сказала что крон работал нормально, но очень давно в последний раз, а потом перестал.Оказалось что когда воркеры сожрали всю память -- следящая собака убила крон. Я сомневаюсь что она поняла что именно крон виновник пропадающий памяти, просто попался под лапу смерти.
Первый раз в моей жизни сторожевая собака убила крон! Невероятно!
А выжили бы
systemd timers? Попали ли бы они под лапу смерти сторожевой собаки?Загадка. Можно было бы конечно провести эксперимент, но не нет. Императивные знания нужны только людям со слабой верой!
#linux #cron #oom #outofmemory #memory #memoryleak #loopofdeath #systemd #systemdtimers
😱1
Всегда восхищали таблицы в
Вроде бы всё очень просто, понятно и непонятно как сделать иначе. Но совершенно непонятно и невозможно сделать красиво без очень умного редактора.
Можно сделать некрасиво и тоже будет работать, но это же некрасиво!
Но таблицы это что-то очень для слабеньких и богопослушных.
Люди восстали и решили гневать богов полностью и придумали GoAT diagrams.
Восхитительно травмирующе. Бесконечно проклято.
#cursed #godslayer #gods_layerhttps://hshhhhh.name/2025/12/13/5387/
markdown:| Column 1 | Column 2 |
| ------------- | ------------- |
| Cell 1, Row 1 | Cell 2, Row 1 |
| Cell 1, Row 2 | Cell 1, Row 2 |
Вроде бы всё очень просто, понятно и непонятно как сделать иначе. Но совершенно непонятно и невозможно сделать красиво без очень умного редактора.
Можно сделать некрасиво и тоже будет работать, но это же некрасиво!
Но таблицы это что-то очень для слабеньких и богопослушных.
Люди восстали и решили гневать богов полностью и придумали GoAT diagrams.
Восхитительно травмирующе. Бесконечно проклято.
#cursed #godslayer #gods_layer
👍1😍1 1 1
На всех клавиатурах придумали две пипки (и третья на нампаде) чтобы в несмотря на клавиатуру можно было бы найти C4.
Неплохо. Забыли всем рассказать, но неплохо.
Остальные клавиши оставили гладкими, а что если на все них нанести Бугорки Брайля? (забудем про незначительную группу людей которым недостаточно латинского алфавита)
Ведь мы бы могли построить нашу цивилизацию зная что все могут читать пальцами.
Например, в темноте в комнате темно, ты щупаешь вокруг руками и вдруг понимаешь что это -- включатель света. Можно призвать свет!
Или лежишь в темноте и читаешь пальцами книгу рядом перед сном без страха что она упадёт тебе на лицо!
Уважаемые боги, очень нужно!
#deep #whatif #ideahttps://hshhhhh.name/2025/12/15/5399/
Неплохо. Забыли всем рассказать, но неплохо.
Остальные клавиши оставили гладкими, а что если на все них нанести Бугорки Брайля? (забудем про незначительную группу людей которым недостаточно латинского алфавита)
Ведь мы бы могли построить нашу цивилизацию зная что все могут читать пальцами.
Например, в темноте в комнате темно, ты щупаешь вокруг руками и вдруг понимаешь что это -- включатель света. Можно призвать свет!
Или лежишь в темноте и читаешь пальцами книгу рядом перед сном без страха что она упадёт тебе на лицо!
Уважаемые боги, очень нужно!
#deep #whatif #idea
2025.02.20: Mozilla диверсифицирует бизнес через AI-продукты и платформу online-рекламы
2025.11.16: В Firefox развивают режим для навигации с использованием AI
2025.12.16: Назначен новый руководитель Mozilla Corporation, делающий ставку на AI в Firefox
2025.12.19: Обновление Firefox 146.0.1. В Firefox появится опция для полного отключения AI
#mozilla #whathappened #ai
👎1 1
Очевидно, что использование
И как может быть иначе когда вы можете один раз указать имя, порт, какой ключ использовать (да, вы можете использовать разные ключи для разных сервисов), да и специфические параметры для хоста и забыть.
И, конечно же, алиасы:
Обычно, через некоторое время,
Но сегодня необычный день и поэтому у меня для вас есть необычная новость! Оказывается (кто-то вообще читал мануал?),
Пожалуйста! Живите более лучше чем жили до этого!
#ssh #linuxhttps://hshhhhh.name/2025/12/31/5448/
~/.ssh/config отличает настоящего опытного линуксоида от ваннаби кубунтушника.И как может быть иначе когда вы можете один раз указать имя, порт, какой ключ использовать (да, вы можете использовать разные ключи для разных сервисов), да и специфические параметры для хоста и забыть.
И, конечно же, алиасы:
$ cat ~/.ssh/config
Host hshhhhh_blog
HostName hshhhhh.name
IdentityFile ~/.ssh/keys/private_key
User blog
WarnWeakCrypto no
$ ssh hshhhhh_blog
Обычно, через некоторое время,
~/.ssh/config превращается в отвратительную простыню из мёртвых хостов и удалённых ключей. И как обычно с этим ничего нельзя сделать. ~/.ssh/config о двух концах.Но сегодня необычный день и поэтому у меня для вас есть необычная новость! Оказывается (кто-то вообще читал мануал?),
~/.ssh/config поддерживает включения и поэтому вы можете разнести эту помойку по маленьким аккуратным кучкам:$ cat ~/.ssh/config
SetEnv EDITOR=vim
ServerAliveInterval 30
Include ./conf.d/my_hosts
Include ./conf.d/work_hosts
$ cat ~/.ssh/conf.d/my_hosts
# for syntax highlighting
# vi: ft=sshconfig
Host hshhhhh_blog
HostName hshhhhh.name
IdentityFile ~/.ssh/keys/private_key
User blog
WarnWeakCrypto no
Пожалуйста! Живите более лучше чем жили до этого!
#ssh #linux
👍1😍1
Иногда вы разрабатываете. Иногда вам нужно посылать почту. Более иногда (менее иногда?) вам нужно посылать почту когда вы разрабатываете.
Совсем никогда не нужно чтобы эта почта была послана в интернет. Кому будет приятно получить 50 тестовых писем? И чтобы все они были ещё и сломаны.
Самый безопасный и удобный способ (предлагайте свои более лучшие способы в комментариях!) -- ловец писем.
Какой-нибудь ненастоящий
Если вы не любите себя любить, то можно делать знаменитый однострочник:
Ну, оно работает. Спасибо!
Если вам хочется сделать ловушку для почты общей на нескольких человек, то ничего лучше чем
А если вам хочется локально, то просто добавьте в свой
Потом найдите там как-нибудь сами в вашем докере где этот ваш новый контейнер будет и указывайте его как
Можете ещё виртуальный хост создать если ваш сервис зачем-то проверяет валидность домена.
Ну вы сами знаете как это всё делать я вам рассказывать не буду (я не знаю).
Потом посылаете письмо, открываете этот ваш контейнер как-то и у вас там локальныйmailtrap mailtpit!
Очень удобно мне нравится очень вам рекомендую!
#docker #mailtpit #mailtrap #coolhttps://hshhhhh.name/2026/01/08/5469/
Совсем никогда не нужно чтобы эта почта была послана в интернет. Кому будет приятно получить 50 тестовых писем? И чтобы все они были ещё и сломаны.
Самый безопасный и удобный способ (предлагайте свои более лучшие способы в комментариях!) -- ловец писем.
Какой-нибудь ненастоящий
SMTP сервер который будет письма ловить, но и всё. Если вы не любите себя любить, то можно делать знаменитый однострочник:
$ python -m smtpd -n -c DebuggingServer localhost:1025
Ну, оно работает. Спасибо!
Если вам хочется сделать ловушку для почты общей на нескольких человек, то ничего лучше чем
mailtrap.io нет (есть ещё mailpit, но надо самохостить). А если вам хочется локально, то просто добавьте в свой
docker-compose.yml:# https://mailpit.axllent.org
smtp-mailpit:
image: axllent/mailpit
container_name: smtp-mailpit
ports:
#- "1025:1025" # pass STMP port to the host machine
- "8025:8025" # WEB UI port
environment:
MP_SMTP_AUTH_ACCEPT_ANY: 1
MP_SMTP_AUTH_ALLOW_INSECURE: 1
Потом найдите там как-нибудь сами в вашем докере где этот ваш новый контейнер будет и указывайте его как
SMTP сервер host:1025 с любым паролем и работающим tls.Можете ещё виртуальный хост создать если ваш сервис зачем-то проверяет валидность домена.
Ну вы сами знаете как это всё делать я вам рассказывать не буду (я не знаю).
Потом посылаете письмо, открываете этот ваш контейнер как-то и у вас там локальный
Очень удобно мне нравится очень вам рекомендую!
#docker #mailtpit #mailtrap #cool
👍3 2