DeepGit: Blobs
Ч1, Ч2
blob (binary large object) - файл который содержит полный текст файла.
Что примечательно, для git-a не имеет значение в каком именно файле были сделаны изменения.
Простыми словами:
Если мы созданим новый файл с текстом "some text" ,
и этот же текст добавим в новый другой файл
и сделаем
И если мы сделаем
Проголосуйте под этим постом, нужно ли разбавлять ленту другими темами или бустом разберемся с git-ом ?
P.P.S У нас появился чат, нажмите кнопку Discuss(Обсудить) справа внизу. Буду всем рад.
Ч1, Ч2
blob (binary large object) - файл который содержит полный текст файла.
Что примечательно, для git-a не имеет значение в каком именно файле были сделаны изменения.
Простыми словами:
Если мы созданим новый файл с текстом "some text" ,
и этот же текст добавим в новый другой файл
и сделаем
git hash-object
то получим всего один новый blob файл.И если мы сделаем
git write-tree
то увидим в файле дерева имя этого blob-a накатываемого на оба файла.100644 blob <hash> first_file.txtP.S. Последние статьи были исключительно про git. Я еще много чего хочу рассказать по этой теме, потому могу разбавлять ленту более профильным контентом ( инструменты, плагины, расширения итд).
100644 blob <hash> second_file.txt
Проголосуйте под этим постом, нужно ли разбавлять ленту другими темами или бустом разберемся с git-ом ?
P.P.S У нас появился чат, нажмите кнопку Discuss(Обсудить) справа внизу. Буду всем рад.
Разоблачаем "домашних хакеров"
На одном из "хакерских" каналов увидел статью про взлом bluetooth колонок. Вот копия статьи.
Короткий пересказ статьи:
- Находим девайсы по близости;
- Получаем их MAC адреса;
- Пушим на девайс тысячу запросов ping или connect что-бы колонка отвалилась;
- Радуемся.
Звучит прекрасно, если ты не знаешь как работает bluetooth.
Во-первых, у bluetooth-спикеров есть состояние "discoverable", когда к аудиодевайсу никто не подключен его действительно можно обнаружить сканерами, получить MAC адрес и даже подключиться. Но, если у девайса уже есть активное подключение, то ничего из вышеперечисленного вы сделать не сможете.
Даже зная заранее MAC адрес девайса, и начав отправлять ему запросы, все они будут отклонены.
Единственное, что у вас теоретически может получиться, это имея MAC адрес девайса понять находиться ли он в зоне видимости.
По этому поводу есть хак трехлетней давности на stackoverflow.
Вся статья будет работать только для включенных девайсов без активного подключения, но в таком случае к нему можно просто подключиться.
P.S. Как Вам такой формат публикаций? Если интересно, то могу иногда выпускать подобные "разоблачения".
На одном из "хакерских" каналов увидел статью про взлом bluetooth колонок. Вот копия статьи.
Короткий пересказ статьи:
- Находим девайсы по близости;
- Получаем их MAC адреса;
- Пушим на девайс тысячу запросов ping или connect что-бы колонка отвалилась;
- Радуемся.
Звучит прекрасно, если ты не знаешь как работает bluetooth.
Во-первых, у bluetooth-спикеров есть состояние "discoverable", когда к аудиодевайсу никто не подключен его действительно можно обнаружить сканерами, получить MAC адрес и даже подключиться. Но, если у девайса уже есть активное подключение, то ничего из вышеперечисленного вы сделать не сможете.
Даже зная заранее MAC адрес девайса, и начав отправлять ему запросы, все они будут отклонены.
Единственное, что у вас теоретически может получиться, это имея MAC адрес девайса понять находиться ли он в зоне видимости.
По этому поводу есть хак трехлетней давности на stackoverflow.
Вся статья будет работать только для включенных девайсов без активного подключения, но в таком случае к нему можно просто подключиться.
P.S. Как Вам такой формат публикаций? Если интересно, то могу иногда выпускать подобные "разоблачения".
DeepGit: Hashing names
Ч1, Ч2, Ч3
Что-бы закончить с blob-aми , деревьями и коммитами надо разобраться как git генерирует имена файлам и как хранит все версии всех файлов.
Название git файла определяется следующим образом:
Общее правило: тип файла => решетка => длина текста => нулевой байт.
Это наш хедер.
Что-бы получить название файла:
Добавляем к хедеру текст файла и берем SHA1 сумму от результата.
Текст файла git сжимает через
Как это можно реализовать на python:
Первые два символа из
Резюме: Внутри git нет никакой магии, все данные весьма просто храняться и так-же просто используются.
Напоминаю Вам, что у нас есть чат: https://t.me/developer_tools_chat , непонимаю почему вас там так мало :)
Ч1, Ч2, Ч3
Что-бы закончить с blob-aми , деревьями и коммитами надо разобраться как git генерирует имена файлам и как хранит все версии всех файлов.
Название git файла определяется следующим образом:
tree #{text.lenght}\0
Общее правило: тип файла => решетка => длина текста => нулевой байт.
Это наш хедер.
Что-бы получить название файла:
Добавляем к хедеру текст файла и берем SHA1 сумму от результата.
Текст файла git сжимает через
zlib
.Как это можно реализовать на python:
[1]: import hashlib
In [2]: from hashlib import sha1
In [3]: sha = hashlib.sha1()
In [4]: line = "developer tools test line"
In [5]: header = f"blob {line.__len__()}\0"
In [6]: content = (header + line).encode()
In [7]: sha.update(content)
In [8]: sha.hexdigest()
Out[8]: '7f0571380d1f5e2a2fb13bb25eeefe5761895e7a'
In [9]: import zlib
In [10]: zlib.compress(content)
Первые два символа из
7f0571380d1f5e2a2fb13bb25eeefe5761895e7a
пойдут как название директории, а остальные в название файла.Резюме: Внутри git нет никакой магии, все данные весьма просто храняться и так-же просто используются.
Напоминаю Вам, что у нас есть чат: https://t.me/developer_tools_chat , непонимаю почему вас там так мало :)
DeepGit: Экзамен
Мы разобрались с оновными основами основ в git:
Как выглядит директория git-a
Какие есть типы данных в git
Как git сохраняет версии и накатывает их
Что такое blob и как он хранит данные
Как собирается hash и архивируется текст
Давайте теперь глянем как это все собрать воедино:
- создадим репозиторий;
- добавим новый файл с текстом;
- коммит;
- добавим новый файл с другим текстом и изменения в первом файле;
- коммит.
C помощью привычного git-a выглядит следующим образом:
По большому счету, чтобы восстановить полностью проект достаточно иметь бекап его
Завтра или послезавтра на @dev_quiz опубликую пару тестов по разобраному тут материалу с git-ом.
Следующее, что мы будем разбирать в git будут референсы и все, что с ними связано.
Напоминаю, если у вас остались вопросы или пожелания, можно их обсудить в нашем чате: @developer_tools_chat
Мы разобрались с оновными основами основ в git:
Как выглядит директория git-a
Какие есть типы данных в git
Как git сохраняет версии и накатывает их
Что такое blob и как он хранит данные
Как собирается hash и архивируется текст
Давайте теперь глянем как это все собрать воедино:
- создадим репозиторий;
- добавим новый файл с текстом;
- коммит;
- добавим новый файл с другим текстом и изменения в первом файле;
- коммит.
C помощью привычного git-a выглядит следующим образом:
git initТеперь как это можно сделать с помощью низкоуровневых команд git:
echo "text" >>1.txt
git add 1.txt
git commit -m "commit"
echo "text1" >> 1.txt
echo "text" >> 2.txt
git add .
git commit -m "commit 2"
git initВот и все.
echo "text" >> 1.txt
git hash-object -w 1.txt
git update-index --add 1.txt
git write-tree
echo "commit" | git commit-tree <tree>
echo "text1" >> 1.txt
echo "text" >> 2.txt
git hash-object -w 1.txt
git hash-object -w 2.txt
git update-index --add 2.txt
git update-index 1.txt
git write-tree
echo "commit 2" | git commit-tree <tree> -p <pcommit>
По большому счету, чтобы восстановить полностью проект достаточно иметь бекап его
.git
директории, в которой есть все версии и состояния проекта.Завтра или послезавтра на @dev_quiz опубликую пару тестов по разобраному тут материалу с git-ом.
Следующее, что мы будем разбирать в git будут референсы и все, что с ними связано.
Напоминаю, если у вас остались вопросы или пожелания, можно их обсудить в нашем чате: @developer_tools_chat
Привет)
Меня спрашивают какие инструменты и технологии я использую регулярно.
Starter Pack:
Terminator - мой первий эмулятор для работы в нескольких терминалах в одном окне.
Tmux - на него я перешел с terminator и пользую по сей день. Считаю его одним из лучших решений для работы с несколькими терминалами.
Перейдя на tmux необходимость в terminator отпала, но у меня там уже были настроены цветовые схемы, шрифты, потому решил оставить его.
Zsh - я просто начал использовать его весто bash.
autojump для быстрого перемещения между папками.
Ну и fzf для поиска, истории, kill.
У меня, на самом деле, включено гораздо больше инструментов и плагинов. Все о чем пишу на канале я тестирую на себе.
P.S. Код я пишу в JetBrains софте.
Много раз я пробовал безуспешно перейти на NVim.
Меня спрашивают какие инструменты и технологии я использую регулярно.
Starter Pack:
Terminator - мой первий эмулятор для работы в нескольких терминалах в одном окне.
Tmux - на него я перешел с terminator и пользую по сей день. Считаю его одним из лучших решений для работы с несколькими терминалами.
Перейдя на tmux необходимость в terminator отпала, но у меня там уже были настроены цветовые схемы, шрифты, потому решил оставить его.
Zsh - я просто начал использовать его весто bash.
autojump для быстрого перемещения между папками.
Ну и fzf для поиска, истории, kill.
У меня, на самом деле, включено гораздо больше инструментов и плагинов. Все о чем пишу на канале я тестирую на себе.
P.S. Код я пишу в JetBrains софте.
Много раз я пробовал безуспешно перейти на NVim.
explainshell
Очень удобный сервис, который разбирает шелл команды.
Я не особо хорошо умею в bash скриптинг и зачастую пользую готовые решения вместо сложных команд.
Но периодически на форумах ищу решения и натыкаюсь на огромную шелл команду которая делает что-то непонятное.
На explainshell.com можно разобрать что именно происходит в команде.
Оч удобно.
Очень удобный сервис, который разбирает шелл команды.
Я не особо хорошо умею в bash скриптинг и зачастую пользую готовые решения вместо сложных команд.
Но периодически на форумах ищу решения и натыкаюсь на огромную шелл команду которая делает что-то непонятное.
На explainshell.com можно разобрать что именно происходит в команде.
Оч удобно.
Привет)
У меня вопрос по качеству видео. Формат подходит? Нужна возможность перематывать и ставить видео на паузу? Или может другие рекомендации? Го с предложениями в чат )
У меня вопрос по качеству видео. Формат подходит? Нужна возможность перематывать и ставить видео на паузу? Или может другие рекомендации? Го с предложениями в чат )
Anonymous Poll
40%
Все супер
25%
Не смотрю видео
2%
Отвечу в чате
34%
Нужны паузы и перемотка видео
DeepGit: refs
Блок 1
В крайней статье, мы смогли построить полноценное дерево коммитов.
Была единственная проблема в том, что нам надо было передать hash последного коммита.
В папке
Чтобы создать референс в git нужно сделать следующее:
мы можем использовать
Базовый функционал ссылок это и есть наши git branches.
Для того что-бы "создать" ветку, достаточно просто связать ее название с крайним хешом коммита.
Через крайний хеш коммита уже можно воссоздать полностью дерево.
Блок 1
В крайней статье, мы смогли построить полноценное дерево коммитов.
Была единственная проблема в том, что нам надо было передать hash последного коммита.
В папке
.git/refs
хранятся файлы которые хранят в себе хеш коммита. Чтобы создать референс в git нужно сделать следующее:
echo "<hash>" > .git/refs/heads/<name>Ну или используя более безопасное решение:
git update-ref refs/heads/<name> <hash>Теперь вместо просмотра дерева через
git log <commit-hash>
мы можем использовать
git log master
.Базовый функционал ссылок это и есть наши git branches.
Для того что-бы "создать" ветку, достаточно просто связать ее название с крайним хешом коммита.
Через крайний хеш коммита уже можно воссоздать полностью дерево.
DeepGit: HEAD
Забыл в последней статье упомянуть про HEAD.
В файле
С помощью команды
Можно ставить HEAD.
Теперь можно полностью понять как работает
И дальше уже проходим по blob-ам, и записываем туда версии.
P.S Это весьма топорная реализация
Впереди нас еще ждет статья про
Забыл в последней статье упомянуть про HEAD.
В файле
.git/HEAD
лежит ссылка на рефернс. 09:32:21 in tmp/git_/first on master •99%
➜ cat .git/HEAD
ref: refs/heads/master
С помощью команды
git symbolic-ref HEAD refs/heads/<branch_name>
Можно ставить HEAD.
Теперь можно полностью понять как работает
git checkout <branch>
.cat .git/HEAD
cat <ref_path>
git cat-file -p <commit_hash>
git cat-file -p <tree_hash>
И дальше уже проходим по blob-ам, и записываем туда версии.
P.S Это весьма топорная реализация
git checkout
, на самом деле все работает немного иначе.Впереди нас еще ждет статья про
pack
файлы и про то, как git оптимизирует хранение файлов.Git unstaged diffs
Недавно наблюдал как знакомый использовал
Для того чтобы убрать unstaged diffs в git.
Для этих целей пользую обычно
Все варианты делают почти одно и тоже.
Ну только стеш еще и сохраняет изменения.
Одинаковую задачу в git можно решить огромным количеством способов.
Как ты обычно чистишь ненужные изменения? Может есть еще какие-то варианты?
Го в наш чат - @developer_tools_chat
Недавно наблюдал как знакомый использовал
git diff | git apply --reverse
Для того чтобы убрать unstaged diffs в git.
Для этих целей пользую обычно
git stashили иногда
git checkout .
Все варианты делают почти одно и тоже.
Ну только стеш еще и сохраняет изменения.
Одинаковую задачу в git можно решить огромным количеством способов.
Как ты обычно чистишь ненужные изменения? Может есть еще какие-то варианты?
Го в наш чат - @developer_tools_chat
Brave, Bat и при чем тут черное зеркало
Basic Attention Token или Bat - продукт по рекламному продвижению на базе крипты.
Я давно смотрел в сторону Brave, но как-то не доходили руки разобраться в чем там дело.
- Внутренний adblocker
- Tor
- Bat
BAT это решение по показе рекламы без нарушения вашей анонимности.
Как это работает:
Рекламодатель размещает публикации, которые попадают в общий каталог реклам.
Пользователь Brave выбирает рекламу из каталога и показывает ее вам.
Вы получаете бонусы за просмотр или взаимодейсвие с рекламой, которые потом можно вывести на кеш или задонатить.
Из важного: ваши данные никогда не покидают ваш девайс, вся аналитика происходит исключительно на вашем пк без отправки ее на сервера.
Basic Attention Token или Bat - продукт по рекламному продвижению на базе крипты.
Я давно смотрел в сторону Brave, но как-то не доходили руки разобраться в чем там дело.
- Внутренний adblocker
- Tor
- Bat
BAT это решение по показе рекламы без нарушения вашей анонимности.
Как это работает:
Рекламодатель размещает публикации, которые попадают в общий каталог реклам.
Пользователь Brave выбирает рекламу из каталога и показывает ее вам.
Вы получаете бонусы за просмотр или взаимодейсвие с рекламой, которые потом можно вывести на кеш или задонатить.
Из важного: ваши данные никогда не покидают ваш девайс, вся аналитика происходит исключительно на вашем пк без отправки ее на сервера.
gh
gh cli - после многочисленных реализаций cli для github-a, он решил выпустить свой.
На странице в гитхаб его сравнивают с hub.
Ссылка.
Попробов, я не нашел ничего нового.
Просмотр задач, пр и прочее уже все давно написано.
gh cli неплохой вариант если не пользуете никакой врапер на гитом.
Особо причин переходить на него не вижу.
Надеюсь в дальнейшем для него сделают что-то уникальное.
gh cli - после многочисленных реализаций cli для github-a, он решил выпустить свой.
На странице в гитхаб его сравнивают с hub.
Ссылка.
Попробов, я не нашел ничего нового.
Просмотр задач, пр и прочее уже все давно написано.
gh cli неплохой вариант если не пользуете никакой врапер на гитом.
Особо причин переходить на него не вижу.
Надеюсь в дальнейшем для него сделают что-то уникальное.
Codespace VS Gitpod
Github запустил регистрацию на ранний доступ к браузерной IDE на базе VSCode - Codespaces.
Мне раньше не приходилось натыкаться на браузерные IDE, потому считал Codespaces - новинкой на рынке.
Оказалось что довольно давно и успешно существуют решения вроде GitPod.
Как получу доступ к Codespaces смогу сделать сравнение этих двух IDE.
В целом: браузерные IDE - прикольная игрушка.
Возможность редактирования файлов доступна и сейчас, а код писать все продолжат локально.
Думаю Codespace станет просто красивой оберткой над уже существующими возможностями Github-a.
Что думаете по поводу браузерных IDE? Есть у них будущее? Зачем они нужны?
Го в чат -> https://t.me/developer_tools_chat
Github запустил регистрацию на ранний доступ к браузерной IDE на базе VSCode - Codespaces.
Мне раньше не приходилось натыкаться на браузерные IDE, потому считал Codespaces - новинкой на рынке.
Оказалось что довольно давно и успешно существуют решения вроде GitPod.
Как получу доступ к Codespaces смогу сделать сравнение этих двух IDE.
В целом: браузерные IDE - прикольная игрушка.
Возможность редактирования файлов доступна и сейчас, а код писать все продолжат локально.
Думаю Codespace станет просто красивой оберткой над уже существующими возможностями Github-a.
Что думаете по поводу браузерных IDE? Есть у них будущее? Зачем они нужны?
Го в чат -> https://t.me/developer_tools_chat
Довольно часто получаю фидбек по каналу.
Спасибо всем кто пишет критику и рекомендации.
Периодически приходят просьбы об изменении формата видео.
К этому посту прикрепляю другую версию видео из крайней публикации. В ней больше акцентов, есть возможность делать паузы и перемотки.
Обсудить канал, как всегда, можно в чате или написав мне в личку: @bogbel .
А поддержать молодого инфлюенсера(меня) можно
через ЯндексДеньги по ссылке: https://money.yandex.ru/to/410017713757333
или
Монобанк: 4441114444687642
(Может когда-то доберусь до патреона, но это не точно)
Надеюсь канал вам по душе и вы черпаете от сюда что-то полезное)
P.S. Проголосуйте плз за формат видео который вам зашел больше.
Спасибо всем кто пишет критику и рекомендации.
Периодически приходят просьбы об изменении формата видео.
К этому посту прикрепляю другую версию видео из крайней публикации. В ней больше акцентов, есть возможность делать паузы и перемотки.
Обсудить канал, как всегда, можно в чате или написав мне в личку: @bogbel .
А поддержать молодого инфлюенсера(меня) можно
через ЯндексДеньги по ссылке: https://money.yandex.ru/to/410017713757333
или
Монобанк: 4441114444687642
(Может когда-то доберусь до патреона, но это не точно)
Надеюсь канал вам по душе и вы черпаете от сюда что-то полезное)
P.S. Проголосуйте плз за формат видео который вам зашел больше.
NoCoin no Profit?
Перебирая материал на канал наткнулся на репозиторий NoCoin.
NoCoin - браузерное расширение которое блокирует майнинг крипты на сайтах.
Конкретно он уже не работает, как и сайт с майнерами на который он ссылался (Coinhive),
Майнинг происходит c помощью js скрипта который запускается при загрузке страницы и начинает садить вам CPU пока вы находитесь на странице.
Сейчас есть решения вроде coinimp и crypto-loot.
На сайтах они позиционируются как альтернативная монетизация сайта.
Что вы думаете по этому поводу?
Как вы относитесь к тому что сайт майнит крипту за ваш счет?
Перебирая материал на канал наткнулся на репозиторий NoCoin.
NoCoin - браузерное расширение которое блокирует майнинг крипты на сайтах.
Конкретно он уже не работает, как и сайт с майнерами на который он ссылался (Coinhive),
Майнинг происходит c помощью js скрипта который запускается при загрузке страницы и начинает садить вам CPU пока вы находитесь на странице.
<script src="https://coin-hive.com...coinhive.min.js">
<script>
var miner = new CoinHive.Anonymous('token');
miner.start
</script>
Сейчас есть решения вроде coinimp и crypto-loot.
На сайтах они позиционируются как альтернативная монетизация сайта.
Что вы думаете по этому поводу?
Как вы относитесь к тому что сайт майнит крипту за ваш счет?
ElasticSearch Head
Браузерное расширение со сносным UX, которое позволяет работать с кластером невыходя из браузера.
В доступности:
- построение запросов через фильтры с плашками ;
- написание ручных запросов;
- работа с индексами.
UX как по мне - кошмар, но лучшего решения я не нашел.
github
Браузерное расширение со сносным UX, которое позволяет работать с кластером невыходя из браузера.
В доступности:
- построение запросов через фильтры с плашками ;
- написание ручных запросов;
- работа с индексами.
UX как по мне - кошмар, но лучшего решения я не нашел.
github