nilchan pub
8.37K subscribers
109 photos
24 videos
2 files
37 links
База знаний и приватное сообщество:
@nilchanbot

YouTube канал:
https://www.youtube.com/@nilchanpub

VK Видео:
https://vkvideo.ru/@nilchanpub
Download Telegram
Ну что ойтишники как дела у вас

Я столкнулся с проблемкой)) Всё это время хуярил видосик аля "курс с нуля до миддла", где вот прям от рассказа зачем нужна оперативная память и что такое переменная до написания пет-проекта с докером базами брокерами, чтобы вот один курсик пройти и сразу резюме можно было делать

Только вот нахуй я до конца про гошку рассказать не успел, как у меня 40+ часов исходников было xD Ну там понятное дело много вырезалось + правилось, ну вот пока смог сократить до цифры в 28 часов таймлайна... НО СУКА КТО Ж ЗНАЛ что ютуб максимум 12 часов видики пропускает (если >12 часов видосы найти на ютубе то это либо давно загружены видосы либо при помощи бага, но в общем случае хуй ты загрузишь видик >12 часов)

Выход в этой всей хуйне только один... Это высирать видосы в плейлисте ;( Я пиздец как не хотел плейлист, ибо один видос "с нуля до миллиарда в наносекунду" гораздо лучше продвигается чем отдельные видосы "что такое defer" "что такое переменная" в плейлисте

Ну что поделать, придётся наслаждаться <1k просмотрами. Ну и похуй, всё равно давно хотел полноценный технический курс записать, а то вокруг блять одни оры "КРУТИ ОПЫТ" и "ТОРГУЙСЯ ЗА ДЕНЬГИ В ОФФЕРЕ" (да и я сам не исключение) а как написать конкурентное приложение и запихнуть его в докер знает полторы калеки, ходят по чатам ищут сливы курса Козырева ахаха (осуждаю)

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

Как говорится я всё просчитал но я был плох в математике, думал щас как ультану одним видосом, но оказывается ультанул только жидким себе в штанину

Ну а так как теперь каждая отдельная тема это отдельный видос, то сразу появились ideas как можно максимум выжать из такого формата. Думаю через недели полторы первые видосы начнут дропаться
🔥167👍2518😁3👏2🤡2🤣2👨‍💻1
тизер-трейлер
This media is not supported in your browser
VIEW IN TELEGRAM
🤣107🔥24😁5😢21
Пересматриваю сейчас один из своих любимых мультсериалов детства: Аватар легенда об Аанге

И тут между персонажами диалог. Между Зуко и дядей Айро.

Зуко: Эти люди пытались нас убить!
Дядя: Это мои старые друзья ;)
Зуко: Все твои друзья пытаются тебя убить?
Айро: Хм... Все ли друзья пытаются меня убить?

И тут я подумал как в мозге обрабатывается ответ на вопрос "Все ли друзья хотят меня убить?". Ну очевидно я буду один за одним перебирать своих друзей и проверять пытался ли очередной перебираемый в моей голове друг меня убить или нет, и если хоть один не пытался меня убить то ответ "нет, не все друзья пытаются меня убить", а если я переберу всех и окажется что не встретилось ни одного кто не пытался бы меня убить то ответ "да, все друзья пытаются меня убить".

Потом я прикинул как бы я это реализовывал программно, и пришёл к выводу... что точно также
func allFriendTryToKillMe(friends []Friend) bool {
for _, friend := range friends {
if !friend.TriedToKillMe {
return false
}
}

return true
}


Вопрос где та грань которая отделяет нас от программы, и почему большую часть нашего мышления можно описывать простейшими программными алгоритмами?

isKaif := thing.Do()

for ifKaif {
isKaif = thing.Do()

if thing.Harmful {
chanceToExitHarmfulKaif = 10 // percent
if rand.Intn(100) < changeToExitHarmfulKaif {
break
}
}
}

Это кстати алгоритм описывающий наше поведение, когда мы взаимодействуем с какими-то вещами, которые приносят нам удовольствие:

1. Попробовал
2. Если кайфанул (неважно, горные лыжи или пиво), то попробовал ещё раз
3. Потом начал задумываться а это вообще вредно, кайфовать таким образом?
4. Если вредно, то с некоторым шансом ты прекратишь это делать, иначе пойдёшь делать снова
5. Этот цикл прервётся только если вещь перестанет приносить кайф, либо если ты с каким-то шансом на успех соскочишь

Чёт грустно ощущать себя простейшим алгоритмом, особенно если он выглядит как-то так
for {
pivo.Drink()
}


Кто будет спорить мол не поддаётся алгоритмическому описанию тот лошох

Кто тоже гуманоид программный — к вам вопросов нет
🔥51🤡2810👍7😁6💩4🤓2🕊1💯1🍌1🗿1
По поводу курса "с нуля до миддла" или как я его назову ещё хз — первая часть на днях дропается, разберём основы программирования, порешаем домашку и сделаем в конце небольшой учебный проект по пройденному материалу

Опытные могут скипать, опытным надо ждать следующей (или через-следующей) части где уже будем разбирать конкурентную работу и сетевое взаимодействие
81🤡12💩5🔥4👎3🗿3👍1😈1
Первая часть полного курса по Golang для начинающих:
https://www.youtube.com/watch?v=dpvRDJjUJf8

Приватное сообщество с домашними заданиями и учебными проектами:
@nilchanbot

Исходные коды из уроков первой части:
https://github.com/nilchan-social/golang-full-course/tree/main

Видео-решения домашних заданий/разъяснения и написание учебного проекта/удобные конспекты по пройденным материалам и взаимопомощь в обучении доступны в приватном сообществе на уровне "Инсайдер": @nilchanbot

В первой части разберём кратко устройство компьютера и уже не кратко основы программирования.

Мне важна ваша активность, и ещё больше важна обратная связь. Необходимо сделать ещё минимум две (а может и четыре...) части по 12 часов, чтобы наконец-то дойти с нуля до солидного бекенд-приложения, поэтому мне важно видеть что мои усилия кому-то помогают, и я хочу знать слабые точки своей формы повествования.

Буду максимально признателен за поддержку
263🔥89👍20💩4❤‍🔥3🍓2
Гайз вижу и в комментах и в приватке вопросы "когда вторая часть"

Честно вам скажу: возможно я как-то неправильно подхожу к созданию контента, но первая часть у меня заняла больше месяца от первых шагов до нажатия на кнопку "Опубликовать". Я хуярил каждый день без выходных по 6-12 часов на энергосах и предтренировочных комплексах (да, эта хуйня штырит получше кофя). Это очень трудоёмкий процесс, и записываю каждую тему обычно раза с 3-го 4-го, ибо по ходу объяснения постоянно выясняется что что-то ты упустил или слишком сложно начал загонять. Плюс постобработка это жесть, на 12 часов итогового хронометрожа было часов 30+ исходников (это я даже не считаю то, что уже записано, но пойдет в следующую часть). Пуки чихи вздохи чавканья хуявканья, это всё нужно отсматривать и вырезать. Это очень сложно и морально и физически, поэтому на этойй неделе следующую часть ждать точно не стоит. В хорошем случае ещё через месяц я дропну вторую часть. Там рассмотрим конкуретную работу приложения, доразберём гошку, и, возможно, успеем посмотреть на http и постгрю.

Я не меньше вас хочу увидеть вторую часть, но не хочу из-за спешки сделать плохо, и так даже в первой части многим пришлось пожертвовать чтобы не выпускать её через пол года.

Планируется от трёх до пяти частей. В конечном итоге напишем классное бекенд-приложение. Но это требует времени. Ваша лучшая поддержка это лайки комментарии и подписки на каналы и в приватку🐱

Возможно сейчас пару дней посушу вёсла, а то пиздееец как устал( И буду выкакивать в этот канал какие-то постики. А может не буду. Всех обнял
Please open Telegram to view this post
VIEW IN TELEGRAM
344👍42🔥18🙏12😢3
This media is not supported in your browser
VIEW IN TELEGRAM
Нилчановцы признавайтесь кто из вас жоско напиздел в резюме и в додо пиццу на ios разработчика залетел?

TraditionalThinTraditionalThinTraditionalThin
😁168🤣20🤯53👍3
Осторожно, много мата и кринжа:
👍111
😁60🫡8🤯2💘2🦄21🤡1
так, меня в комментах просветили, автоплатёж есть, его надо было просто поискать🥳

ну vds всё равно пидоры, ну а чё они внатури ну в самом деле ну
Please open Telegram to view this post
VIEW IN TELEGRAM
😁45👍64
pov кладёшь месяц жизни на первую часть курса по гошке

что вселенная тебе посылает в ответ:
🤣199😁29🔥6🎉5😭4💊43👍2💩1🆒1
tl;dr https://t.me/nilchanbot/nilchanbase

База знаний в нашей приватке стремительно растёт, и я понял, что если продолжу в текущем виде отгружать новые инсайды/гайды/контент в приватное сообщество, то навигироваться по всему этому будет максимально неудобно. Многие скажут "хештег повесил и кайфуй" но нет, навигация по хештегам это лютый кал, ты просто пишешь в поиске хештег, и получаешь миллион сообщений, которые хуй пойми вообще в чему относятся. А учитывая, что у нас на подходе инсайды на новые стеки (qa/ios/android/etc), то что-то с организацией информации срочно нужно было предпринять.

Я долго думал как лучше поступить, пока меня не посетила идея сделать мини-приложение, где все наши знания из приватного сообщества будут организованы в виде графа, по которому можно будет максимально удобно находить нужную тебе информацию. Поначалу мне слабо верилось что я смогу что-то подобное реализовать, всё-таки миниприложение это в том числе фронтенд, с которым я не то что на "вы", скорее на "увы", да и как мне автоматизировать агрегацию информации из чата в что-то, что можно скормить фронтенду, чтобы этот самый фронтенд нарисовал мне граф... Но идея с миниприложением уж слишком сильно меня вдохновила, чтобы я с таким количеством лет анальной айтишки за спиной не решился попробовать реализовать задуманное.

Как это всё устроено в техническом плане мы разберём в следующих постах, там скорее для гиков, которым интересно как это всё живёт под капотом, а система в итоге получилась достаточно масштабная, я думаю будет о чём рассказать)

А пока те, кто уже вступил в приватку, могут смотреть прикреплённый видос для того, чтобы научиться пользоваться нашей новой базой знаний.

Те, кто не вступил в приватку — вступайте: @nilchanbot
Media is too big
VIEW IN TELEGRAM
🔥6017❤‍🔥9👍1🤡1
Как миниприложение работает под капотом? Часть 1.

(в конце изображение со схемой всей системы)

Чтобы в телеграмме создать миниприложение, необходимо иметь постоянную https ссылку на веб-страницу, которая будет открываться в среде телеграмма и называться собственно миниприложением. То есть миниприложение — это просто сайтик, который открыт в среде телеграмма. То есть сразу нужны:
— Веб-морда. Верстай как хочешь, но без веб-морды нет и миниприложения.
— HTTPS подключение. То есть сертификаты. То есть нужен домен.

Ну сразу вырисовывается стандартная картина фронтент+бекенд, где продовый бекенд крутится на сервере с купленным доменом, плюс ещё каким-то образом нужно HTTPS соединение поддержать (раньше я ничего подобного не делал своими руками).

Хорошо, допустим с вёрсткой веб-морды и покупкой домена я как-то разберусь. Но откуда вообще брать инфу для построения графа? На каждый новый пост в базе знаний лезть в продовую бд и руками править json-представление графа? Нууу... заебусь и окончательно облысею от такого капитального заёба. Нужно как-то автоматизировать агрегацию информации из базы знаний, чтобы я мог просто накакать новый пост, а этот новый пост сам подсосался в граф и как следствие в миниприложение. Как?

Решение оказалось довольно очевидное. Телеграмм (до сих пор не знаю одна тут м должна быть или две) чаты поддерживают возможность копировать ссылки на сообщения, и есть возможность по нажатию на эти самые ссылки — сразу переходить на нужное сообщение, то есть телега сама перекидывает юзера на нужный топик + нужное сообщение, да ещё и подсвечивает это самое сообщение. Получается я могу все сообщения запихнуть в один топик (не обязательно в один, но в одном удобнее), в одних сообщениях давать ссылки на другие, в этих других сообщениях давать ссылки на третьи сообщения, ну и так далее. То есть уже вырисовывается графовое представление всей базы знаний, благодаря возможности телеграмма переходить на конкретное сообщение со ссылке. Осталось только это всё добро как-то автоматически парсить и строить по этой инфе json, который я буду отдавать фронтенду, и по которому этот самый фронтенд будет строить nilchan-obsidian😄

У тг-ботов нет возможности читать произвольные сообщения в чате. Зато такая возможность есть у меня. Но как мне заставить программу от моего имени открыть чат, начать читать сообщения и переходить по ссылкам на другие сообщения? А у телеграмма даже такая возможность есть. Можно на сайте телеги зарегистрировать своё приложение, тебе выдадут api_id+api_hash, по которым ты сможешь коннектиться к апи телеграмма и делать практически любые действия от своего имени, только при помощи программы (можно даже сообщения другим людям отсылать, но я так один раз чуть акк не проебал из-за того, что кто-то на спам пожаловался xd). Но голая telegram api выглядит очень страшно, а вот разного рода обёрточки на питончике выглядят уже более привлекательно. Решил не экспериментировать с аналогами на гошке, и взял telethon либу для питона, и поехали.

Получается алгоритм такой: изначально даю программе ссылку на корневое сообщение (корневую ноду) в базе знаний в телеграмм-чате. Эта программа получает текст сообщения, парсит все ссылки из этого сообщения, и если эта ссылка — это ссылка на другое телеграмм-сообщение, то переходит на это другое телеграмм-сообщение и повторяет алгоритм (опять ищет все ссылки на другие сообщения и переходит на них). Параллельно запоминая каждое сообщение в котором мы побывали + запоминая переходы между сообщениями (из какого конкретно сообщения дана ссылка на другое сообщение, чтобы понимать как рисовать связи между нодами). Получается тот самый обход графа в глубину) А вы говорите алгоритмы не нужны. Шучу. Не шучу. В общем окей, спарсили целый топик, построили граф, сдампили в json. Что дальше?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2832🍓2
Как миниприложение работает под капотом? Часть 2.

А дальше нужно думать, как лучше организовать отдачу собранного json'а. Если я на каждое открытые веб-страницы (на каждый запрос на получение графа в бекенд) буду прогонять описанный выше алгоритм, то веб-страница будет открываться очень долго, секунд 10-15, но как вы видите открывается она практически моментально. Всё потому, что было принято решение раз в N времени (сейчас это раз в пол часа) прогонять описанную программу (называл её crawler, типо как в гугл хроме, типо крутой в общем), crawler собирает раз в пол часа актуальный json и сохраняет его в файл. Вы знали что в linux'е для периодического запуска команд существует утилита cron + crontab для её настройки? Потом уже на запрос от фронтенда "дай мне json представление графа" я просто буду отдавать готовый файлик, что стократно быстрее.

Хорошо, мы умеем автоматически читать базу знаний из приватки и собирать по ней json граф, что дальше? Дальше вопрос как организовать HTTPS подключение к серверу. Поизучав информацию, я понял что можно воспользоваться Caddy (современный аналог nginx, только caddy АВТОМАТИЧЕСКИ сгенерирует мне сертификат и подпишет его, БЕСПЛАТНО😏). Плюс Caddyfile (аналог nginx.conf) выглядит ну гораздо приятнее и понятнее аналога от nginx.

ХАРАШО, бекенд считай готов. Crawler раз в пол часа собирает json, Caddy по https умеет этот json отдавать (на самом деле я написал гошную приложуху в 1 эндпоинт, которая читает json файл и отдаёт его, а Caddy уже ходит за json'ом в эту гошную приложуху, но мне просто хотелось чтобы в этом большом проекте была частичка гошки xd, так то понятно что можно было этот самый json как статику отдавать напрямую через Caddy). Понятное дело что как Caddy, так и Crawler, так и гошная приложуха на 1 эндпоинт — всё завёрнуто в докер-контейнеры и деплоятся одной кнопкой через Makefile + dockercompose.

Что с фронтендом? Как рисовать граф? Сначала я пытался понять как obsidian строит свои графы (ведь у обсидиана есть веб-версия, как-то же они это делают), но в итоге наткнулся на библиотеки для React'а для построения графа. Был выбор из нескольких, одна более красиво рисует граф но ужасно регистрирует касания и клики, вторая не так красиво отрисовывает но замечательно регистрирует пользовательский ввод. Очевидно смысла в красивом но неудобном графе нет, поэтому был выбран не самый красивый но наиболее удобный вариант (вы его видите в миниприложухе).

Окей, есть библиотека для реакта, но я в душе не ебу как этот реакт устроен, как на нём писать, как устроено взаимодействие компонентов, и что самое главное как это потом деплоить в прод. И тут я бы мог встрять на пару месяцев, но мне на помощь пришла моя девушка, которая уже какое-то время изучает фронтенд на реакте, она помогла мне разобраться, так сказать, в базовых ценностях, да и компоненты поиска и инфопанели (которые вы видите в миниприложении) она верстала, за что ей большое спасибо.

Фронтенд был самой сложной и мучительной частью, этот css это просто пиздец, 99999 свойств на один эффект и нахуй ни одно свойство не работает как надо. Плюс борьба с телеговской средой запуска веб-страниц, в которой если я открываю клавиатуру (например когда хочу в поиске что-то вбить), то нахуй рабочая область уменьшается в 2 раза и по пизде едет вся вёрстка. Тут уже пришлось 10 тысяч запросов в нейронку написать, чтобы на десять тысяч первый запрос она выдала рабочее решение, которое с помощью ебейшего костыля помогает обойти эту особенность телеграм-среды для веб-страниц.

Кое-как допинали этот фронтенд до адекватного внешнего вида, теперь вопрос как это деплоить. Опять же поискав инфу, я узнал что React приложения компилируются в js+css+html, и потом на проде веб-сервером (nginx или Caddy) просто отдаются как статика. Интересно. В общем описываю докер-контейнер который на базе nodejs-имаджа собирает прям на прод-сервере мне статику и через docker-volume отдаёт её в папку, из которой уже Caddy отдаёт полученные файлы в качестве веб-страницы юзеру.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥185🏆2💯1
Как миниприложение работает под капотом? Часть 3.

Я пока опускаю очень много неожиданной головной ебли в виде различных CORS-политик (это когда ты через curl делаешь запрос на прод — всё работает, делаешь запрос из js-приложения — хуй тебе на нос, ошибка доступа) и прочих прелестей, ибо тогда написание этих постов займёт ещё пару недель, а до конца дочитает 1% населения нилчана.

Так же в миниприложении у некоторых нод вы можете видеть изображения (иконки). Опять же вопрос откуда эти изображение брать и что самое главное как эти новые изображения добавлять, да так, чтобы мне не приходилось каждый раз руками лезть в файловую систему прод-сервера, закидывать туда изображение, дописывать в React-приложуху новый путь до нового изображения, и пересобирать полностью React-приложуху, чтобы изменения были видны юзерам. Решение: S3 сервер. И есть отличное решение: open-source'ный бесплатный S3-совместимый сервер: minio. Его я развернул так же в докер-контейнере на проде, через Caddy на отдельном суб-домене организовал туда доступ, и теперь могу в веб-интерфейсе докидывать новые изображения, а потом в Crawler'е генерировать ссылки на эти изображения, и складывать их в тот же json, куда кладу граф (понимаю, для новичка это просто набор букав, но статья чисто для гиков). Благодаря чему больше нет необходимости лезть на прод и что-то там пересобирать просто для того, чтобы добавить новую изображеньку в миниприложение.

А так, в целом, касаемо миниприложения, всё) Кажется глобально ничего не забыл
🔥183🍓3👏1
Вся система миниприложения на схеме
🔥206❤‍🔥2🏆2
😫

p.s. ну, если у кого-то ещё подобные вопросы есть, доступ к контенту из базы знаний + доступ к сообществу покупается тут @nilchanbot (в описании тг канала жи есть ну ёма)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁291🫡1
Есть широко распространённое в узких кругах мнение, что в тг-канале следует стабильно поддерживать активность, независимо от того, есть ли тебе что сказать, есть ли чем поделиться — пофик, даже если нет — придумай очередную гойду "бляяя hr'ы ваще плохие кароче бляяя" и запости, а иначе как же, люди забудут про тебя, ты же ничего не постишь в канал. Возможно оно так и есть, но я что-то пока не дозрел в своём познании до этого, ну это же как ебаный дейлик: обязан высрать из себя хоть что-то, даже если по-сути сказать то и нечего. Поэтому если кто-то не может без стабильного упоминания коварности найма, злого кабанчика и абсолютно прорывной и свежей ранее нигде и никем не упомянутой идеи о том, что нужно крутить опыт — штош, nilchan pub не сможет удовлетворить вашу потребность. Это всё к вопросу о том, почему новые посты публикуются настолько редко.

А так, почему я вообще решил прервать радиомолчание: на днях выбрались за город, сняли на авито домик на сутки, и просто поймали подарок судьбы — хорошую солнечную погоду среди затяжной питерской ебливой серости. Пожарили шашлык, надышались свежим воздухом, набухались, поиграли в карты. Как же иногда не хватает простого человеческого вот этого вот всего. Делюсь с вами частичкой этого вайба 🏕
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
69🔥35👍5🤡5💘2
блять палундра нахуй, в открытый люк колесом заехал
🫡44😁19🗿4😢1🥴1