TGViewer
Channel Public Channel
Гепардово гнездо

Гепардово гнездо

@gepardchan

El nido del guepardo.

@gepardius тащит в гнездо всякое интересное из мира программирования (и не только).

Etaoin shrdlu cmfwyp!

Еще один мой канал: @sofcheck.
Subscribers
617
Photos
41
Videos
0
Links
81

Showing posts older than #135 · Back to latest

Older Posts 19 shown
Post #132 1.15K
Как я в Nim коммитил

Немного расскажу про то, как я коммитил (раз, два) в язык программирования Nim.

Сначала кратко про сам язык. Если бегло посмотреть на примеры кода, то может показаться, что это компилируемый и типизированный Python. Однако такое описание не совсем точное: на самом деле, кроме Python, язык позаимстововал кучу полезных штук из C++, Pascal (из моего любимого — возможность легко делать индексы массивов enum'ами) и не только. В языке еще есть своя система отслеживания эффектов и гибкие макросы (из интересного — конструкция => для простого создания лямбд задана не как часть синтаксиса, а в виде макроса). Borrow checker'а и подобных штук для memory safety, как в Rust, нет, зато есть сборщик мусора (впрочем, можно писать код и на сырых указателях без него, если хочется)

Авторы языка не стали делать компиляцию через LLVM, а компилируют через трансляцию кода в C, C++ или JavaScript (что позволяет легко интегрироваться с существующими либами на этих языках)

В общем, язык довольно интересный, и я решил попробовать на нем написать какой-нибудь код. За это время я обнаружил пару интересных багов и решил занести фиксы в upstream.

Чтобы пофиксить баг, надо сначала научиться собирать компилятор. Как полагается современным языкам, компилятор Nim написан на нем самом :) Поэтому собирают его так: сначала надо взять предварительно оттранслированные в Си исходники и собрать компилятор из них, а затем уже, используя собранный из исходников на Си компилятор, собрать его еще раз, но теперь уже из исходников на Nim. Кажется довольно нестандартным, потому что обычно self-hosted языки можно собрать предыдущей стабильной версией компилятора. Но не в случае Nim: здесь сборка последней стабильной версией оказалась not supported and I don't know if it's fixable 🐳

После сборки компилятора все пошло довольно просто: надо написать код и прогнать тесты. Для удобной работы с репозиторием компилятора придумали утилиту koch, которая «a replacement for make and shell scripting», но «much more portable.» [угадайте, на чем эта portable утилита написана? :)]

Дальше осталось только сделать PR'ы (раз, два) и ждать, пока мейнтейнеры обратят на тебя внимание и заставят все переделывать. К счастью, здесь все прошло довольно гладко, и мои PRы влили без вопросов. Разве что их CI довольно любит флапать 🐳

Пост уже и так получился длинный, поэтому впечатления от самого языка, наверное, описывать здесь подробно не буду. Поделюсь лишь кратко: видно, что проект интересный, и потенциал у него есть, но в то же время у языка куда меньше пользователей и разработчиков, чем у Go, Rust и других мейнстримных языков, поэтому с библиотеками все сложнее (хотя пакетный менеджер имеется). Еще из минусов — язык местами слишком гибкий, и позволяет писать одинаковые вещи очень по-разному. А в остальном выглядит неплохо :)
  • 👍 16
  • 🐳 2
Post #131 930
master vs main

В интернетах давно существуют споры про то, как называть главную ветку в Git проектах — master или main. Предлагаю альтернативный вариант — называть главную ветку в git'е просто m.

Плюсы:
- легко запомнить
- быстро набирать
- коротко и ясно
- не несет никаких негативных смыслов

Минусы:
- непривычно
- больше не нашел

Что думаете? :)
  • 🔥 14
  • 💩 2
  • 💊 2
  • 👍 1
Post #130 1.25K
Для контекста: есть старое видео про то, почему нельзя кричать на HDD'шки в датацентре

(стоит отметить при этом, что SSD'шки на крик так не реагируют)
  • 😁 9
  • 😱 3
  • 🕊 2
Post #129 966
Смотрите, что нашел:
https://crates.io/crates/unicode_categories

> всего лишь 16 звезд на гитхабе
> пакет давно заброшен, последний релиз был 7 лет назад, последний коммит — 3 года назад
> ссылка на доку ведет на несуществующий более сайт
> тем не менее, пакет имеет почти 20 млн скачиваний на crates.io и доходит до 60000 скачиваний в день, из-за того, что от него зависит https://crates.io/crates/sqlx

Кандидат на новый leftpad? 🤔🤔
  • 😱 6
  • 😈 3
  • 🤡 1
Post #128 2.05K
Каналу исполняется год!

Ровно год назад я совершил ошибку и создал этот замечательный канал. Поздравляю всех подписчиков [и себя тоже :)] с этим событием 🎉🎉🎉

В комментариях можете писать любую критику, пожелания и предложения насчет канала, а также гневные отзывы насчет малого количества постов :) :) :) Скажу честно: я не обещаю, что учту весь фидбек, но узнать мнение читателей всегда бывает интересно

Кстати, насчет количества постов: я понял, что мне довольно трудно постить что-либо по графику. Когда канал только создавался, у меня была куча всякого накопленного за много лет материала (в виде закладок в браузере и заметок в markdown-файликах). Поскольку контента было достаточно много, я изначально писал посты каждый день или через день, а точнее, писал сразу много постов за один день и ставил их с интервалом в один-два дня в отложку

Увы, старый интересный материал за пару месяцев закончился, а новое появляется не так быстро :( Сейчас я по-прежнему использую отложку, но обычно с очень небольшой задержкой, не более часа [угадайте, кстати, почему так :)]. Только иногда, когда интересного сразу накопилось много, я пишу много постов сразу с задержкой где-то в четыре дня

В любом случае, я намерен продолжать вести этот канал, и скинуть еще больше интересного за следующий год ✍️

Stay tuned ;)
  • 🐳 19
  • 👍 8
  • 👌 1
Post #127 1.7K
  • 🤯 12
  • 🔥 10
  • 🐳 6
  • 👍 4
Post #126 1.93K
How to sound smart in your TEDx Talk

https://www.youtube.com/watch?v=8S0FDjFBj8o

Посмотрите, очень забавно :) Спойлер: там спикер своей манерой выступления и речи производит впечатление, будто он рассказывает что-то важное, а на самом деле он несет чепуху и рассказывает о том, как он притворяется

(для тех, кто cannot unsterstand English speech good enough, есть неплохие русские субтитры)
YouTube How to sound smart in your TEDx Talk | Will Stephen | TEDxNewYork This talk was given at a local TEDx event, produced independently of the TED Conferences. In a hilarious talk capping off a day of new ideas at TEDxNewYork, professional funny person Will Stephen shows foolproof presentation skills to make you sound brilliant…
  • 🔥 13
  • 👎 2
  • 🤯 2
  • 👍 1
Post #125 1.47K
Канал про C++: дайте буст
C++: у нас уже есть буст дома
Буст дома: boost
  • 😁 22
  • 🔥 5
  • 👍 1
Post #124 1.66K
Тонкости парсинга JSON

Казалось бы, JSON — формат очень простой, и сложно его интерпретировать неправильно. Но на самом деле у него есть свои тонкости, которые в разных языках и библиотеках учитываются очень по-разному. Например:

* 1, false, null, "valid json" — валидные JSON'ы? Или на верхнем уровне могут встречаться лишь массивы и объекты?
* насколько большие числа допускаются в JSON? Обязан ли парсер обрабатывать целые числа больше 2^31? А целые числа больше 2^53 без округления? А больше 2^63?
* повторяющиеся ключи — это ошибка или валидный JSON? Если второе, то какое значение стоит брать?
* какова должна быть кодировка самого JSON-файла? Произвольная? UTF-8? UTF-16?
* что считать валидными строками? Любая ли последовательность байт допустима? Если строка состоит из Unicode-кодпоинтов, то допустимо ли в ней нахождение суррогатных пар UTF-16?
* какие символы в JSON-файле считать пробелами? Допустимы ли '\r' и '\n'? А таб? А U+2060, который по стандарту Unicode считается пробелом?

Чтобы ответить на многие из этих вопросов, были придуманы разные RFC: RFC 7159, RFC 7493 (I-JSON) и, наконец, RFC 8259.

Более подробно можно почитать здесь. Автор этого поста сравнивает огромное число парсеров JSON на соответствие RFC 8259 на указанных выше (и других!) примерах.
  • 🔥 5
  • 😱 3
  • 👍 2
Post #122 1.52K
Очень захотелось сделать вот такие вот два мема
  • 😐 13
  • 🤯 5
  • 😁 3
  • 👎 2
  • 🤨 2
  • 🐳 1
Post #121 1.55K
Итак, разгадка

Функция из предыдущего поста принимает год, месяц и день, и возвращает порядковый номер дня с 1 января 1 года. При этом високосные годы учтены правильно:
foo(1, 1, 1) = 1
foo(1, 1, 31) = 31
foo(1, 2, 1) = 32
foo(2000, 2, 28) = 730178
foo(2000, 3, 1) = 730180
foo(2100, 2, 28) = 766703
foo(2100, 3, 1) = 766704
foo(2023, 8, 16) = 738748

Объяснение, как это работает, можно почитать здесь: https://dotat.at/@/2008-09-10-counting-the-days.html

Там же описана и обратная операция (по номеру дня вычислить дату), но она уже производится несколько сложнее: https://dotat.at/@/2008-09-15-the-date-of-the-count.html

Код для обратной операции выглядит вот так:

void G(int d, int *py, int *pm, int *pd) {
int y, m;
d += 305;
y = d*400/146097 + 1;
y -= y*1461/4 - y/100 + y/400 > d;
d -= y*1461/4 - y/100 + y/400 - 31;
m = d*17/520;
d -= m*520/17;
if (m < 11) m += 2; else m -= 10, y += 1;
*py = y, *pm = m, *pd = d;
}
  • 🤯 11
  • 🤨 2
  • 👍 1
  • 🔥 1
Post #120 1.22K
Угадайте, что делает следующий код:

int foo(int b, int a, int r) {
if (a > 2) a += 1; else a += 13, b -= 1;
return b*1461/4 - b/100 + b/400 + a*153/5 + r - 428;
}

Названия переменных здесь специально изменены, чтобы чуть затруднить угадывание :)

Разгадка (и объяснение!) будет завтра
  • 🤔 4
  • 🤯 2
Post #119 1.49K
Так, автор канала вышел из творческого кризиса длиною в месяц, и теперь здесь снова будут посты 🎉

Falsehoods Programmers Believe About Phone Numbers

https://github.com/google/libphonenumber/blob/master/FALSEHOODS.md

Забавно, кстати, что эта статья лежит прямо в репозитории libphonenumber — библиотеки для работы с телефонными номерами :)
  • 🤯 8
  • ✍ 4
  • 👍 2
Post #118 1.9K
  • 👍 14
  • 🤯 2
Post #117 2.38K
Every cloud has a server lining.

(за пояснительной бригадой сюда)
  • 😁 4
  • 👍 2
  • 🔥 1
Post #116 1.86K
http://lib.ru/INOFANT/BRAUN_F/etaoin.txt

Нашел вот такой вот фантастический рассказ 1942 года. Забавно, насколько он связан с современными большими языковыми моделями :)
  • 🔥 4
  • 🤔 3
  • 👍 1
Post #115 1.81K
Гепардово гнездо ClickHouse и баги в Poco В мире C++ есть такая известная библиотека, как Poco. По сути, это универсальный фреймворк для Web-приложений на C++, который содержит кучу всего: JSON, парсинг конфигов, HTTP клиент и сервер, работу с БД и много чего еще. Библиотека…
Update: мой (наполовину мой) pull request в Poco наконец-то залили 🎉

Осталось только дождаться, когда они выкатят очередной релиз
GitHub Fix thread counter leak by alex65536 · Pull Request #3992 · pocoproject/poco I noticed that Poco HTTP server becomes slow after some uptime, especially when the load is high. The reason is that there is a race condition when decrementing _currentThreads. Because of this, _c...
  • 🔥 12
  • 👍 4
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →