Ну что ойтишники как дела у вас
Я столкнулся с проблемкой)) Всё это время хуярил видосик аля "курс с нуля до миддла", где вот прям от рассказа зачем нужна оперативная память и что такое переменная до написания пет-проекта с докером базами брокерами, чтобы вот один курсик пройти и сразу резюме можно было делать
Только вот нахуй я до конца про гошку рассказать не успел, как у меня 40+ часов исходников было xD Ну там понятное дело много вырезалось + правилось, ну вот пока смог сократить до цифры в 28 часов таймлайна... НО СУКА КТО Ж ЗНАЛ что ютуб максимум 12 часов видики пропускает (если >12 часов видосы найти на ютубе то это либо давно загружены видосы либо при помощи бага, но в общем случае хуй ты загрузишь видик >12 часов)
Выход в этой всей хуйне только один... Это высирать видосы в плейлисте ;( Я пиздец как не хотел плейлист, ибо один видос "с нуля до миллиарда в наносекунду" гораздо лучше продвигается чем отдельные видосы "что такое defer" "что такое переменная" в плейлисте
Ну что поделать, придётся наслаждаться <1k просмотрами. Ну и похуй, всё равно давно хотел полноценный технический курс записать, а то вокруг блять одни оры "КРУТИ ОПЫТ" и "ТОРГУЙСЯ ЗА ДЕНЬГИ В ОФФЕРЕ" (да и я сам не исключение) а как написать конкурентное приложение и запихнуть его в докер знает полторы калеки, ходят по чатам ищут сливы курса Козырева ахаха (осуждаю)
В общем буду выпускать в две итерации:
— первая это фулл записать материал по гошке + шлифануть его насколько можно, и начать дропать видосы одни за одним + домашку расписывать на каждую тему
— вторая итерация: так же записать фулл материал по написанию приложения из нескольких микросервисов, после чего начать дропать видосы по этой теме
Как говорится я всё просчитал но я был плох в математике, думал щас как ультану одним видосом, но оказывается ультанул только жидким себе в штанину
Ну а так как теперь каждая отдельная тема это отдельный видос, то сразу появились ideas как можно максимум выжать из такого формата. Думаю через недели полторы первые видосы начнут дропаться
Я столкнулся с проблемкой)) Всё это время хуярил видосик аля "курс с нуля до миддла", где вот прям от рассказа зачем нужна оперативная память и что такое переменная до написания пет-проекта с докером базами брокерами, чтобы вот один курсик пройти и сразу резюме можно было делать
Только вот нахуй я до конца про гошку рассказать не успел, как у меня 40+ часов исходников было xD Ну там понятное дело много вырезалось + правилось, ну вот пока смог сократить до цифры в 28 часов таймлайна... НО СУКА КТО Ж ЗНАЛ что ютуб максимум 12 часов видики пропускает (если >12 часов видосы найти на ютубе то это либо давно загружены видосы либо при помощи бага, но в общем случае хуй ты загрузишь видик >12 часов)
Выход в этой всей хуйне только один... Это высирать видосы в плейлисте ;( Я пиздец как не хотел плейлист, ибо один видос "с нуля до миллиарда в наносекунду" гораздо лучше продвигается чем отдельные видосы "что такое defer" "что такое переменная" в плейлисте
Ну что поделать, придётся наслаждаться <1k просмотрами. Ну и похуй, всё равно давно хотел полноценный технический курс записать, а то вокруг блять одни оры "КРУТИ ОПЫТ" и "ТОРГУЙСЯ ЗА ДЕНЬГИ В ОФФЕРЕ" (да и я сам не исключение) а как написать конкурентное приложение и запихнуть его в докер знает полторы калеки, ходят по чатам ищут сливы курса Козырева ахаха (осуждаю)
В общем буду выпускать в две итерации:
— первая это фулл записать материал по гошке + шлифануть его насколько можно, и начать дропать видосы одни за одним + домашку расписывать на каждую тему
— вторая итерация: так же записать фулл материал по написанию приложения из нескольких микросервисов, после чего начать дропать видосы по этой теме
Как говорится я всё просчитал но я был плох в математике, думал щас как ультану одним видосом, но оказывается ультанул только жидким себе в штанину
Ну а так как теперь каждая отдельная тема это отдельный видос, то сразу появились ideas как можно максимум выжать из такого формата. Думаю через недели полторы первые видосы начнут дропаться
🔥167👍25❤18😁3👏2🤡2🤣2👨💻1
Пересматриваю сейчас один из своих любимых мультсериалов детства: Аватар легенда об Аанге
И тут между персонажами диалог. Между Зуко и дядей Айро.
Зуко: Эти люди пытались нас убить!
Дядя: Это мои старые друзья ;)
Зуко: Все твои друзья пытаются тебя убить?
Айро: Хм... Все ли друзья пытаются меня убить?
И тут я подумал как в мозге обрабатывается ответ на вопрос "Все ли друзья хотят меня убить?". Ну очевидно я буду один за одним перебирать своих друзей и проверять пытался ли очередной перебираемый в моей голове друг меня убить или нет, и если хоть один не пытался меня убить то ответ "нет, не все друзья пытаются меня убить", а если я переберу всех и окажется что не встретилось ни одного кто не пытался бы меня убить то ответ "да, все друзья пытаются меня убить".
Потом я прикинул как бы я это реализовывал программно, и пришёл к выводу... что точно также
Вопрос где та грань которая отделяет нас от программы, и почему большую часть нашего мышления можно описывать простейшими программными алгоритмами?
Это кстати алгоритм описывающий наше поведение, когда мы взаимодействуем с какими-то вещами, которые приносят нам удовольствие:
1. Попробовал
2. Если кайфанул (неважно, горные лыжи или пиво), то попробовал ещё раз
3. Потом начал задумываться а это вообще вредно, кайфовать таким образом?
4. Если вредно, то с некоторым шансом ты прекратишь это делать, иначе пойдёшь делать снова
5. Этот цикл прервётся только если вещь перестанет приносить кайф, либо если ты с каким-то шансом на успех соскочишь
Чёт грустно ощущать себя простейшим алгоритмом, особенно если он выглядит как-то так
Кто будет спорить мол не поддаётся алгоритмическому описанию тот лошох
Кто тоже гуманоид программный — к вам вопросов нет
И тут между персонажами диалог. Между Зуко и дядей Айро.
Зуко: Эти люди пытались нас убить!
Дядя: Это мои старые друзья ;)
Зуко: Все твои друзья пытаются тебя убить?
Айро: Хм... Все ли друзья пытаются меня убить?
И тут я подумал как в мозге обрабатывается ответ на вопрос "Все ли друзья хотят меня убить?". Ну очевидно я буду один за одним перебирать своих друзей и проверять пытался ли очередной перебираемый в моей голове друг меня убить или нет, и если хоть один не пытался меня убить то ответ "нет, не все друзья пытаются меня убить", а если я переберу всех и окажется что не встретилось ни одного кто не пытался бы меня убить то ответ "да, все друзья пытаются меня убить".
Потом я прикинул как бы я это реализовывал программно, и пришёл к выводу... что точно также
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🤡28❤10👍7😁6💩4🤓2🕊1💯1🍌1🗿1
По поводу курса "с нуля до миддла" или как я его назову ещё хз — первая часть на днях дропается, разберём основы программирования, порешаем домашку и сделаем в конце небольшой учебный проект по пройденному материалу
Опытные могут скипать, опытным надо ждать следующей (или через-следующей) части где уже будем разбирать конкурентную работу и сетевое взаимодействие
Опытные могут скипать, опытным надо ждать следующей (или через-следующей) части где уже будем разбирать конкурентную работу и сетевое взаимодействие
❤81🤡12💩5🔥4👎3🗿3👍1😈1
nilchan pub
Пересматриваю сейчас один из своих любимых мультсериалов детства: Аватар легенда об Аанге И тут между персонажами диалог. Между Зуко и дядей Айро. Зуко: Эти люди пытались нас убить! Дядя: Это мои старые друзья ;) Зуко: Все твои друзья пытаются тебя убить?…
для таких людей алгоритм по жизни выглядит вот так
for {
govno.Eat()
mocha.Drink()
}❤74😁52🤡31💩19🤣9💯3👍2🔥2🆒1
Первая часть полного курса по Golang для начинающих:
https://www.youtube.com/watch?v=dpvRDJjUJf8
Приватное сообщество с домашними заданиями и учебными проектами:
@nilchanbot
Исходные коды из уроков первой части:
https://github.com/nilchan-social/golang-full-course/tree/main
Видео-решения домашних заданий/разъяснения и написание учебного проекта/удобные конспекты по пройденным материалам и взаимопомощь в обучении доступны в приватном сообществе на уровне "Инсайдер": @nilchanbot
В первой части разберём кратко устройство компьютера и уже не кратко основы программирования.
Мне важна ваша активность, и ещё больше важна обратная связь. Необходимо сделать ещё минимум две (а может и четыре...) части по 12 часов, чтобы наконец-то дойти с нуля до солидного бекенд-приложения, поэтому мне важно видеть что мои усилия кому-то помогают, и я хочу знать слабые точки своей формы повествования.
Буду максимально признателен за поддержку
https://www.youtube.com/watch?v=dpvRDJjUJf8
Приватное сообщество с домашними заданиями и учебными проектами:
@nilchanbot
Исходные коды из уроков первой части:
https://github.com/nilchan-social/golang-full-course/tree/main
Видео-решения домашних заданий/разъяснения и написание учебного проекта/удобные конспекты по пройденным материалам и взаимопомощь в обучении доступны в приватном сообществе на уровне "Инсайдер": @nilchanbot
В первой части разберём кратко устройство компьютера и уже не кратко основы программирования.
Мне важна ваша активность, и ещё больше важна обратная связь. Необходимо сделать ещё минимум две (а может и четыре...) части по 12 часов, чтобы наконец-то дойти с нуля до солидного бекенд-приложения, поэтому мне важно видеть что мои усилия кому-то помогают, и я хочу знать слабые точки своей формы повествования.
Буду максимально признателен за поддержку
YouTube
GOLANG ПОЛНЫЙ КУРС ДЛЯ НАЧИНАЮЩИХ | ЧАСТЬ 1 | ОСНОВЫ ПРОГРАММИРОВАНИЯ
👾 Домашние задания и учебные проекты теперь доступны в нашем приватном сообществе:
https://t.me/nilchanbot
📢 Каналы:
ТГ: https://t.me/nilchanpub
Макс: https://max.ru/id470326397117_biz
📌 Исходные коды с уроков:
https://github.com/nilchan-social/golang-full…
https://t.me/nilchanbot
📢 Каналы:
ТГ: https://t.me/nilchanpub
Макс: https://max.ru/id470326397117_biz
📌 Исходные коды с уроков:
https://github.com/nilchan-social/golang-full…
❤263🔥89👍20💩4❤🔥3🍓2
Гайз вижу и в комментах и в приватке вопросы "когда вторая часть"
Честно вам скажу: возможно я как-то неправильно подхожу к созданию контента, но первая часть у меня заняла больше месяца от первых шагов до нажатия на кнопку "Опубликовать". Я хуярил каждый день без выходных по 6-12 часов на энергосах и предтренировочных комплексах (да, эта хуйня штырит получше кофя). Это очень трудоёмкий процесс, и записываю каждую тему обычно раза с 3-го 4-го, ибо по ходу объяснения постоянно выясняется что что-то ты упустил или слишком сложно начал загонять. Плюс постобработка это жесть, на 12 часов итогового хронометрожа было часов 30+ исходников (это я даже не считаю то, что уже записано, но пойдет в следующую часть). Пуки чихи вздохи чавканья хуявканья, это всё нужно отсматривать и вырезать. Это очень сложно и морально и физически, поэтому на этойй неделе следующую часть ждать точно не стоит. В хорошем случае ещё через месяц я дропну вторую часть. Там рассмотрим конкуретную работу приложения, доразберём гошку, и, возможно, успеем посмотреть на http и постгрю.
Я не меньше вас хочу увидеть вторую часть, но не хочу из-за спешки сделать плохо, и так даже в первой части многим пришлось пожертвовать чтобы не выпускать её через пол года.
Планируется от трёх до пяти частей. В конечном итоге напишем классное бекенд-приложение. Но это требует времени. Ваша лучшая поддержка это лайки комментарии и подписки на каналы и в приватку🐱
Возможно сейчас пару дней посушу вёсла, а то пиздееец как устал( И буду выкакивать в этот канал какие-то постики. А может не буду. Всех обнял
Честно вам скажу: возможно я как-то неправильно подхожу к созданию контента, но первая часть у меня заняла больше месяца от первых шагов до нажатия на кнопку "Опубликовать". Я хуярил каждый день без выходных по 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
TraditionalThinTraditionalThinTraditionalThin
😁168🤣20🤯5❤3👍3
так, меня в комментах просветили, автоплатёж есть, его надо было просто поискать🥳
ну vds всё равно пидоры, ну а чё они внатури ну в самом деле ну
ну vds всё равно пидоры, ну а чё они внатури ну в самом деле ну
Please open Telegram to view this post
VIEW IN TELEGRAM
😁45👍6❤4
tl;dr https://t.me/nilchanbot/nilchanbase
База знаний в нашей приватке стремительно растёт, и я понял, что если продолжу в текущем виде отгружать новые инсайды/гайды/контент в приватное сообщество, то навигироваться по всему этому будет максимально неудобно. Многие скажут "хештег повесил и кайфуй" но нет, навигация по хештегам это лютый кал, ты просто пишешь в поиске хештег, и получаешь миллион сообщений, которые хуй пойми вообще в чему относятся. А учитывая, что у нас на подходе инсайды на новые стеки (qa/ios/android/etc), то что-то с организацией информации срочно нужно было предпринять.
Я долго думал как лучше поступить, пока меня не посетила идея сделать мини-приложение, где все наши знания из приватного сообщества будут организованы в виде графа, по которому можно будет максимально удобно находить нужную тебе информацию. Поначалу мне слабо верилось что я смогу что-то подобное реализовать, всё-таки миниприложение это в том числе фронтенд, с которым я не то что на "вы", скорее на "увы", да и как мне автоматизировать агрегацию информации из чата в что-то, что можно скормить фронтенду, чтобы этот самый фронтенд нарисовал мне граф... Но идея с миниприложением уж слишком сильно меня вдохновила, чтобы я с таким количеством лет анальной айтишки за спиной не решился попробовать реализовать задуманное.
Как это всё устроено в техническом плане мы разберём в следующих постах, там скорее для гиков, которым интересно как это всё живёт под капотом, а система в итоге получилась достаточно масштабная, я думаю будет о чём рассказать)
А пока те, кто уже вступил в приватку, могут смотреть прикреплённый видос для того, чтобы научиться пользоваться нашей новой базой знаний.
Те, кто не вступил в приватку — вступайте: @nilchanbot
База знаний в нашей приватке стремительно растёт, и я понял, что если продолжу в текущем виде отгружать новые инсайды/гайды/контент в приватное сообщество, то навигироваться по всему этому будет максимально неудобно. Многие скажут "хештег повесил и кайфуй" но нет, навигация по хештегам это лютый кал, ты просто пишешь в поиске хештег, и получаешь миллион сообщений, которые хуй пойми вообще в чему относятся. А учитывая, что у нас на подходе инсайды на новые стеки (qa/ios/android/etc), то что-то с организацией информации срочно нужно было предпринять.
Я долго думал как лучше поступить, пока меня не посетила идея сделать мини-приложение, где все наши знания из приватного сообщества будут организованы в виде графа, по которому можно будет максимально удобно находить нужную тебе информацию. Поначалу мне слабо верилось что я смогу что-то подобное реализовать, всё-таки миниприложение это в том числе фронтенд, с которым я не то что на "вы", скорее на "увы", да и как мне автоматизировать агрегацию информации из чата в что-то, что можно скормить фронтенду, чтобы этот самый фронтенд нарисовал мне граф... Но идея с миниприложением уж слишком сильно меня вдохновила, чтобы я с таким количеством лет анальной айтишки за спиной не решился попробовать реализовать задуманное.
Как это всё устроено в техническом плане мы разберём в следующих постах, там скорее для гиков, которым интересно как это всё живёт под капотом, а система в итоге получилась достаточно масштабная, я думаю будет о чём рассказать)
А пока те, кто уже вступил в приватку, могут смотреть прикреплённый видос для того, чтобы научиться пользоваться нашей новой базой знаний.
Те, кто не вступил в приватку — вступайте: @nilchanbot
Media is too big
VIEW IN TELEGRAM
🔥60❤17❤🔥9👍1🤡1
Как миниприложение работает под капотом? Часть 1.
(в конце изображение со схемой всей системы)
Чтобы в телеграмме создать миниприложение, необходимо иметь постоянную https ссылку на веб-страницу, которая будет открываться в среде телеграмма и называться собственно миниприложением. То есть миниприложение — это просто сайтик, который открыт в среде телеграмма. То есть сразу нужны:
— Веб-морда. Верстай как хочешь, но без веб-морды нет и миниприложения.
— HTTPS подключение. То есть сертификаты. То есть нужен домен.
Ну сразу вырисовывается стандартная картина фронтент+бекенд, где продовый бекенд крутится на сервере с купленным доменом, плюс ещё каким-то образом нужно HTTPS соединение поддержать (раньше я ничего подобного не делал своими руками).
Хорошо, допустим с вёрсткой веб-морды и покупкой домена я как-то разберусь. Но откуда вообще брать инфу для построения графа? На каждый новый пост в базе знаний лезть в продовую бд и руками править json-представление графа? Нууу... заебусь и окончательно облысею от такого капитального заёба. Нужно как-то автоматизировать агрегацию информации из базы знаний, чтобы я мог просто накакать новый пост, а этот новый пост сам подсосался в граф и как следствие в миниприложение. Как?
Решение оказалось довольно очевидное. Телеграмм (до сих пор не знаю одна тут м должна быть или две) чаты поддерживают возможность копировать ссылки на сообщения, и есть возможность по нажатию на эти самые ссылки — сразу переходить на нужное сообщение, то есть телега сама перекидывает юзера на нужный топик + нужное сообщение, да ещё и подсвечивает это самое сообщение. Получается я могу все сообщения запихнуть в один топик (не обязательно в один, но в одном удобнее), в одних сообщениях давать ссылки на другие, в этих других сообщениях давать ссылки на третьи сообщения, ну и так далее. То есть уже вырисовывается графовое представление всей базы знаний, благодаря возможности телеграмма переходить на конкретное сообщение со ссылке. Осталось только это всё добро как-то автоматически парсить и строить по этой инфе json, который я буду отдавать фронтенду, и по которому этот самый фронтенд будет строить nilchan-obsidian😄
У тг-ботов нет возможности читать произвольные сообщения в чате. Зато такая возможность есть у меня. Но как мне заставить программу от моего имени открыть чат, начать читать сообщения и переходить по ссылкам на другие сообщения? А у телеграмма даже такая возможность есть. Можно на сайте телеги зарегистрировать своё приложение, тебе выдадут api_id+api_hash, по которым ты сможешь коннектиться к апи телеграмма и делать практически любые действия от своего имени, только при помощи программы (можно даже сообщения другим людям отсылать, но я так один раз чуть акк не проебал из-за того, что кто-то на спам пожаловался xd). Но голая telegram api выглядит очень страшно, а вот разного рода обёрточки на питончике выглядят уже более привлекательно. Решил не экспериментировать с аналогами на гошке, и взял telethon либу для питона, и поехали.
Получается алгоритм такой: изначально даю программе ссылку на корневое сообщение (корневую ноду) в базе знаний в телеграмм-чате. Эта программа получает текст сообщения, парсит все ссылки из этого сообщения, и если эта ссылка — это ссылка на другое телеграмм-сообщение, то переходит на это другое телеграмм-сообщение и повторяет алгоритм (опять ищет все ссылки на другие сообщения и переходит на них). Параллельно запоминая каждое сообщение в котором мы побывали + запоминая переходы между сообщениями (из какого конкретно сообщения дана ссылка на другое сообщение, чтобы понимать как рисовать связи между нодами). Получается тот самый обход графа в глубину) А вы говорите алгоритмы не нужны. Шучу. Не шучу. В общем окей, спарсили целый топик, построили граф, сдампили в json. Что дальше?
(в конце изображение со схемой всей системы)
Чтобы в телеграмме создать миниприложение, необходимо иметь постоянную 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
🔥28⚡3❤2🍓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 отдаёт полученные файлы в качестве веб-страницы юзеру.
А дальше нужно думать, как лучше организовать отдачу собранного json'а. Если я на каждое открытые веб-страницы (на каждый запрос на получение графа в бекенд) буду прогонять описанный выше алгоритм, то веб-страница будет открываться очень долго, секунд 10-15, но как вы видите открывается она практически моментально. Всё потому, что было принято решение раз в N времени (сейчас это раз в пол часа) прогонять описанную программу (называл её crawler, типо как в гугл хроме, типо крутой в общем), crawler собирает раз в пол часа актуальный json и сохраняет его в файл.
Хорошо, мы умеем автоматически читать базу знаний из приватки и собирать по ней json граф, что дальше? Дальше вопрос как организовать HTTPS подключение к серверу. Поизучав информацию, я понял что можно воспользоваться Caddy (современный аналог nginx, только caddy АВТОМАТИЧЕСКИ сгенерирует мне сертификат и подпишет его, БЕСПЛАТНО
ХАРАШО, бекенд считай готов. 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
🔥18❤5🏆2💯1
Как миниприложение работает под капотом? Часть 3.
Я пока опускаю очень много неожиданной головной ебли в виде различных CORS-политик (это когда ты через curl делаешь запрос на прод — всё работает, делаешь запрос из js-приложения — хуй тебе на нос, ошибка доступа) и прочих прелестей, ибо тогда написание этих постов займёт ещё пару недель, а до конца дочитает 1% населения нилчана.
Так же в миниприложении у некоторых нод вы можете видеть изображения (иконки). Опять же вопрос откуда эти изображение брать и что самое главное как эти новые изображения добавлять, да так, чтобы мне не приходилось каждый раз руками лезть в файловую систему прод-сервера, закидывать туда изображение, дописывать в React-приложуху новый путь до нового изображения, и пересобирать полностью React-приложуху, чтобы изменения были видны юзерам. Решение: S3 сервер. И есть отличное решение: open-source'ный бесплатный S3-совместимый сервер: minio. Его я развернул так же в докер-контейнере на проде, через Caddy на отдельном суб-домене организовал туда доступ, и теперь могу в веб-интерфейсе докидывать новые изображения, а потом в Crawler'е генерировать ссылки на эти изображения, и складывать их в тот же json, куда кладу граф (понимаю, для новичка это просто набор букав, но статья чисто для гиков). Благодаря чему больше нет необходимости лезть на прод и что-то там пересобирать просто для того, чтобы добавить новую изображеньку в миниприложение.
А так, в целом, касаемо миниприложения, всё) Кажется глобально ничего не забыл
Я пока опускаю очень много неожиданной головной ебли в виде различных CORS-политик (это когда ты через curl делаешь запрос на прод — всё работает, делаешь запрос из js-приложения — хуй тебе на нос, ошибка доступа) и прочих прелестей, ибо тогда написание этих постов займёт ещё пару недель, а до конца дочитает 1% населения нилчана.
Так же в миниприложении у некоторых нод вы можете видеть изображения (иконки). Опять же вопрос откуда эти изображение брать и что самое главное как эти новые изображения добавлять, да так, чтобы мне не приходилось каждый раз руками лезть в файловую систему прод-сервера, закидывать туда изображение, дописывать в React-приложуху новый путь до нового изображения, и пересобирать полностью React-приложуху, чтобы изменения были видны юзерам. Решение: S3 сервер. И есть отличное решение: open-source'ный бесплатный S3-совместимый сервер: minio. Его я развернул так же в докер-контейнере на проде, через Caddy на отдельном суб-домене организовал туда доступ, и теперь могу в веб-интерфейсе докидывать новые изображения, а потом в Crawler'е генерировать ссылки на эти изображения, и складывать их в тот же json, куда кладу граф (понимаю, для новичка это просто набор букав, но статья чисто для гиков). Благодаря чему больше нет необходимости лезть на прод и что-то там пересобирать просто для того, чтобы добавить новую изображеньку в миниприложение.
А так, в целом, касаемо миниприложения, всё) Кажется глобально ничего не забыл
🔥18❤3🍓3👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁29❤1🫡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