замогильный уровень разработки
45 subscribers
117 photos
30 videos
3 files
44 links
Download Telegram
Продолжение:
Объясню суть:
🪑 фишка го в паралельных вычислениях
🪑 нахаляву пет-проекты/боты и тд это работа с апишками.
🪑 а на какой черт мне паралелить запросы к апи если ботлнек это запросы к айпи, т.е. бесплатные апишки и так ставят ограничения никакой скорости не будет по причине рейтлимита на них.
♠ удачно выбраная апи урбан дикшонари(в предыдущем посте ссылка) отдает несколько вариантов слова(термина), можно складывать их "паралельно" в один текст и отправлять в апишку tldr да такая тоже есть.
🔥3
Generics: 🚾♿️🅿️
Alright так как мы идем из руби, я сталкнулся с этим явлением впервые, и что не мало важно в видосах озона этого нету.
Суть в кратце это функции которые могут работать с разными типами, но так же этот функционал может использоваться для объяления кастомных типов.
Синтаксически это выглядит так - после названия функции и перед аргументами в квадратных скобочках пишем возможные типы

func printValue[T int32](value T) {
fmt.Println(value)
}

Далее написаное будет касаться букв/слов в квадратных скобочках
В примере выше мы явно указали только один тип, как будто могли и без дженерика обойтись.
📌Можно добавить еще один через пайп оператор [ T int32 | int16 ] таким образом мы можем принимать любой из двух типов.
📌Что бы не писать все возможные комбинации, в стд либ есть пакет который предлагает пресеты типов, например [ T Integer ] в котором все инты соответственно.
📌Если мы создали кастом тип, который является по сути наследником стандартного типа, то для включения его в список допустимых типов используется синтаксис тильды [ T ~int32 ]
📌И самое сложное однако часто встречающееся так как добавили синтаксический сахар шугаринг хуюгаринг(с) Когда функция принимает слайс(массив)
мож определить как [ U ~[]T, T any ] что значит наш генерик будет принимать массивы с любыми типами внутри.
По последнему пункту я не уверен в корректности объяснения на ноушн добавлю ссылки про генерики, и продублирую тут.

medium.com/the-godev-corner/go-generics-everything-you-need-to-know-52dd3796d8a1#143b
benjiv.com/golang-generics-introduction
youtu.be/Pa_e9EeCdy8?si=e_DJaIMRdNa8jk-z

🔝🔝🔝🔝🔝🔝🔝🔝
🤯3
📌Опять хочется вспомнить, from ruby to go книгу. А именно - я нашел ей замену, встречайте:
github.com/samber/lo

кто трогал javascript знают такю либу как lodash вот в гошке тоже самое, кто трогал руби поймет очередной раз насколько же руби удобный что в других языках одни из самых популярных библиотек/пакетов. И гошный LO построен на дженериках, поэтому мне он попался я углублялся еще в них, мне кажется что эта либа покроет 90%  в дженериках в проекте, хотя очевидно надо делать что то сложнее тг бота.
📌Кстати о проекте отрефакторил слегка бота, но добавил кнопок их еще не настраивал, на след выхи попробую залить(но это не точно) кудато бесплатно будет тг бот который ищет по urban dictionary.
📌20 числа 3 часа алгосиков + поведение в майкрософт, я оценил шансы и подумал надо поковырять литкод (можно на любом языке будет писать)
вот вам ссылка на самые популярные задачи с тегами компаний которые спрашивают там буду тренироваться.
seanprashad.com/leetcode-patterns/

Поэтому до 20 числа постов о гошке будет мало, всетаки интересно попробовать фаанг стайл собесы.
🔥2
♻️Здарова потенциальные гошники.♻️
Таки пойду 20 числа в майкрософт собесится.
План записать, и порешать на троечку алгосики.
Будет 1 бехейворал и 2 техникал, все по 45 минут и между ними 15 минут на поорать от безысходности.
Список дали как готовиться да, на данный момет утвердили первое и третье возможно второе(первое техникал) будет в другой день 🤡
🐳По гошке все прекрасно, нашел индуса которы за канкаренси патерны поясняет добавлю в ноушн. С тренировочным проектом надо что то делать, ноль поводов использовать канкаренси, надо что то с очередью придумать после собеса в майкрософт, займусь усердней - пора уже на го собесы ходить.
🔥6
🟥🟨
🟩🟦
Обсер у майрософта
на самом деле шансы были больше чем ожидал
в итоге было три этапа
1️⃣ - теория по ООП, первый вопрос различия полиморфизма в рантайме и компайл тайме 🤡 тут можно было выйти из собеса сразу
далее по классам и наследованию полегче. А потом задача симулятор футбола, ну такое надо много рассказывать там нет решения.
2️⃣ - бихейворал, дедуля индус про опыт спрашивал.Ему недостаточно сложно было в моих расскааах. Кароч надо не просто по STAR рассказыать а именно с обсером и как я выплыл, потому что он в конце такой "ты рассказываешь как будто просто делал то потом то потом это" линейность как бы, а ему хотелось что бы я незнал, а потом узнал. Как-то так.
3️⃣ - наконец DSA первая задача middle linked list так как я рубист чуваку было пофиг что я там пишу просил объяснять. Потом имплементировать класс wordDictionary, где можно добавлять и искать слово, а так же слово с пропущенными буквами. Один из методов через дерево, вот на нем и призошел пук среньк, чат гпт кстати знает как деревом решить.
🔥5
🤡ADHD Moment 🤡
Начнем пост цытаты
Место джаваскрипта в браузере либо на параше

так вот я рот того шатал "красить" кнопки в телеграм боте, трисет от любой ЮИ параши даже если она в виде инлайн кнопок телеграма. Была у меня идея, в этом проклятом пет проекте, для последующей реализации которой нужны были кнопки ну, я что то разогнался что аж пришлось редис подключать, вроде чемто позанимался, но опять же оверал скилы подключить/настроить ничего связанного канкаренси нету.
♿️Чет жалко стало времени высрал статью на медиуме буду ХРам тыкать, распечатаю и в вебку листики буду кидать а потом еще бабки привалят(нет) за контент, я кстати не разбирался еще наверно надо както настраивать, а то никакой карты с двух сторон фоткать не просили. Ну если я еще раз сверну в статьи на медиуме придется разбираться где конпка ЗП. THE ARTICLE - там кстати английский адвансед, читайте и офигевайте.
🪘TLDR для тех у кого болит голова и лишних фейспалмов лучше избежать
- кнопка имеет 2 аргумента, ее лейбл и ее "дата"
- если под датой вы подразумеваете что то что можно назвать текстом или хотя бы предложением то оно туда не влезет(лимит 64кб)
- прикручивает редис, запихивием в ключ айди чата + чето уникальное типа слова хотя можно и обойтись
- в велью ключа запихиваем вашу дату, как у меня для кнопок типа вперед назад разделяйте большой текст какимто символом "|"
- ну все достаем из редиса данные а разделенным символом делаем слайс что бы высрать конкретный кусок текста. Т.к. у нас next/prev кнопки то так же пихаем в дату текущую страницу и общее количество страниц, а так же "лейбл" в плане куда двигатся и какой элемент массива показать.
🧬 - опа нашлась.
В заключении
Обещаю в следующий высер уместить НАКОНЕЦТО что то гоферское, попытаюсь добавить channels, goroutine и waitgroup идея есть осталось реализовать.
Я кстати context уже заюзал, но это больше копипаста как прикрутить редис, а просто пересказывать теорию не хочу поэтому в другой раз.
🔥2⚡1
🐳хотел высраться в понеделньик, но сгорела джопа на работе + какието проблемы с интернетом я два дня легаси говно не мог в докере запустить в итоге обновил докер + ночью наладился инторнет 🐳
HERE WE GO гошные фичи которые потыкал
🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟
🐝 context 🐝
как говорится - хз загугли
- давайте начнем с общего представления о канкаренси в го, в отличии от руби "гыгы-гага 5 тредов тыкать базу запустим будет быстро" (да знаю что еще есть акторы, файберы, ну кому они нужны, камон).
Пример вы делаете 3 походов вкудато сразу, будь то апи или базка или очередь, но вам в зависимости от того где вам сразу ответят надо отменить остальное, или просто не тыкать слишком часто апишку. Контекст позволяет остановить выполнение кода, при каких либо условиях. Создаете контекст, передаете его в функцию/горутину с аргументом тайм либо с аргументом кенсел, если отмена вызывается из вне. Выглядит все очевидно, правда примеры во многих туториалах с селектом(об этом позже в других постах) может ввести в заблуждение представьте что селекта вообще нет, там он для наглядности. Есть некие правила от чего вкуда контекст наследуется, из background все остальные, а так же можно передавать значения, но не желательно.
🛎WaitGroup(sync)🛎
не помню что там еще в sync пакете, рассмотрим WaitGroup
- может применяться в противоположной логике, для аналогии транзакции в activ record, но не только касается бд
Пример, все теже 3 похода вкудато даже 3 вызова гоурутины которые считают что то тоже подходят в этом примере.
WaitGroup это счетчик операций(завершенных!) - создаете счетчик waitgroup.Add(3)
каждый вызов/поход дергаем через гоурутину это делается просто добавлением go перед вызовом функции и внутри добавляем waitgroup.Done(), значит что наша программа будет ждать пока счетчик не станет 3 и мы гарантированно соберем все данные.

📤 сегодня-завтра все будет в гитхабе, я делаю не правильно - мне надо это все потыкать для собесов, всмысле антипатерны и ворст практис.
🔥3❤‍🔥1
🐳 ВНЕЗАПНО 🐳
🐋спасибо что не отписались i'm really appreciate it 🐋
Были дела, внезапно привалило собесов по руби, сами писали, ради тренировок не отказывал + мелкие проблемы с оформлением в йувропке побегал по юристам и банкам(и продолжаю).
🍀🍀🍀🍀🍀
Ладно относительно гошки, на работе тоже решили двигаться в сторону гошки поэтому в свои статьи высеры на медиуме добавил ссылку на наш мега продающий лендинг.  Собственно сама статья - вот после тг бота решил всетаки поковырять веб, и там применять остальные паттерны гошки выдумывать нафига они в телеграм боте мне лень. В вебе больше примеров что можно будет под себя подстроить. Вероятно дальше будет так же много текста на высере в медиуме(может еще куда зарегится) и короткаяа сводка в тг - верю что интернет проситтуция принесет мне офферы наивный да Когда на собесы по гошке, не скажу думаю уже можно, но рутины много - еще поковыряю.
П.С. какойто набор антипаттернов волка в конце получился поидее можно ходить на собесы уже, просто все стало получше, но мелкие проблемки(рутина) появились и мотивации на гошку почти нету.
🔥4⚡2🌭1
♿️ночной высер♿️
расскажу о паттерне FAN IN FAN OUT
🧬🧬🧬
Начну с примера, и небольшое вступление:
Тащемто не хватило мне фантазии на развитие бота, решил сделать системы аля AI на своих данных. Подробнее об архитектуре расскажу позже(во время рефакторинга).
Мне понадобилось сохранять данные в векторной базе данных, выбор пал(зря) на Qdrant. Для сохранения данных нам надо перевести слова в вектора, и сохранить в базе где потом по векторам и будет найден текст(в идеале текст в "синтезируется" той самой чатГПТ моделью). Тут есть ограничение, слова(текст) в вектор "превращается" с помощью другой модели, у которой ограничение на 92 слова/вектора, так как текст может быть супер большим мы будем использовать КАЛКАРЕНСИ с паттерном FAN OUT, а потому сделаем FAN IN. С помощью ГОРУТИН мы запустим текст/92 слова запросов в модель - это и будет часть FAN OUT, из текста(потока данных) делаем несколько потоков

for _, chunk := range chunks {
wg.Add(1)
go func(n []string) {
defer wg.Done()

embeddings, err := es.CreateEmbedding(chunk)
if err != nil {
return
}
embeddingsFloat32 := make([][]float32, len(embeddings))
for i, emb := range embeddings {
embeddingsFloat32[i] = make([]float32, len(emb))
for j, val := range emb {
embeddingsFloat32[i][j] = float32(val)
}
}

results <- vectorWithPayload{
vector: embeddingsFloat32,
payload: strings.Join(chunk, " "),
}

}(chunk)
}

Для имплементации паттерна нам нужен пакет sync и WaitGroup(из прошлых постов) и гоурутины
Создаем канал с данными в который будем записывать все результаты наших гоурутин
Проходимся циклом по кускам текста/данных и каждая гоурутина записыват в канал данные которые получила из апи модели + я добавляю оригинальный текст/кусок текста что бы сопоставлять в будущем в поиске по векторам что же они нашли.
Когда канал будет готов, мы делаем FAN IN - проходимся по каналу(в некоторой степени это массив) и записываем в базу наши данные.
👻👻👻👻👻👻👻👻👻👻👻👻👻👻👻👻
П.C. у меня испыталка на сруби новый проект, поэтому редко посты, надеюсь в след месяце пойду по собесам по гошке.🤌
⚡3😱2🤯1
♿️♿️♿️ это я врываюсь в рынок вакансий golang, надоело выдумывать петпроект, буду проходить собесы (как будто позовут, наивный)
💩1. Экскримент один - юзаем бесплатный аи ноушна посмотрим как вообще реагируют на такое резюме
Перетекание из руби в гошку на последнем проекте
💩2. Эксримент два - врываемся и на djinni и на линкедине, на линкедине поменял последнее место работы на чисто бекенд, чуствую поменяю на голенг. 
💩3. Эксримент три - я смогу настроить обс, вот бы найти АИ который в видео на лицо клоуна поставит 🤡
П.С. Перерыв связан с внезапной смены работы на руби, не рискнул сидеть без работы пока не найду гошку поэтому проходил испыталку (успешно).
🔥5😱1
♿️🪑стал юзать терминал warp изначально что там можно курсор ставить где хочешь, а не прыгать по словам/буквам если исправить что то в команде. Для задротов там дофига фич должно быть, ну а для прогромистов завезли АИ, можно прям закинуть ему файл через cat команду, и он даже исправит то что ты попросил. Пишут что бесплатно 40 вопросов в месяц платно 500, буду еще пробовать с несколькими файлами или с большими посмотрим как воспринимает контекст проекта.
🔥2🌭1
♿️🪑получилось подать заявки на 5 вакансий 🤡
ну вопервых от 5, во вторых много из них делали тцк работать из европы низзя.
🔥3
♿️🪑3 скрининга забронькал в календаре, внезапно нашел еще пару паттернов почемуто они не сильно популярны если искать просто паттерны канкаренси в голенге. Ссылка с таймкодом https://youtu.be/hpwDdACSfrI?si=8WwqmgcPxPmgk3Wi&t=4764
гуглить надо done channel / or channel / tee channel. Впадлу мне придумывать применение, точнее придумаю к тех собесу, но примеры кода делать лень🗿. Надеюсь ОБС настрою нормально а не как в майкрософте без моего голоса(вам оно конечно не надо).
🔥4
♿️🪑а вот и первый собес, у собеседующих отвалилась разетка ⚡️💡🦙. Я уже настроил скрин рекордер, ладно перенесут запишем.
🛎🛎🛎Нашел тут разбор асинхронности в руби довольно большой, за выходные можно подумать над легендой почему с руби перешел на гошку.
Ваще интересно за три года сколько микросервисов не стыдно сделать? так то я/мы командой сделали два на джавке(для уважаемых собеседующих 22 на гошке).
❤‍🔥2
Media is too big
VIEW IN TELEGRAM
♿️🪑Сначала оправдания, сначала предупреждение об опасности контента, могут появится голоса в голове.
Теперь оправдания:
1️⃣ я не умею пользоваться скрин рекордерами и темболее редактурой
2️⃣я без наушников, надоели и жарко, интервьешра двоится эхом в динамиках🪣
3️⃣говорил минимум что бы добавлять в следующих собесах больше голенг историй о которых невозможно молчать, к завтрешнему чето напишу и буду с экрана читать
Всего было 22 минуты, остальная часть на украинском.
З.Ы. аллахом прошу не слушайте оно вам не надо, если будет толковое я скажу, закинул для себя.
🔥7
♿️🪑Был скрининг, гемблинг/беттинг записал выкладывать не буду там ничего интересного, без английского.
А даже если хотел бы не покажу, в наушниках не слышно ХР, хотя я проверил на ютубе, ютуб + мой голос слышно оба. А разговаривали мы через гугл, хз может через гугл записывать, но он же предупреждает что идет запись.
Ищут на проект под работу с платежными системами, голенг разработчика, таймзона европейская. Могут платить криптой или покрывать 12% нологов(это с натяжкой половина).
🔥3
Media is too big
VIEW IN TELEGRAM
♿️🪑Очередной скрининг, полностью на англ, сорян за эхо писал без ушей. Если дальше то будет онлайн тестовое, но не литкод а теория + техсобес + СТО. Впервые изучили резюме а там на заре работы совмещение аля фриланс и спрашивали как отнесся к этому работодатель. Нормально отнесся ковид начался меня и так на почасовку перевели. Да и заостряла внимание на совмещении/фрилансе несколько раз.
🔥5⚡1
замогильный уровень разработки
♿️🪑Был скрининг, гемблинг/беттинг записал выкладывать не буду там ничего интересного, без английского. А даже если хотел бы не покажу, в наушниках не слышно ХР, хотя я проверил на ютубе, ютуб + мой голос слышно оба. А разговаривали мы через гугл, хз может…
🤡👻почемуто был еще один скрининг с другим ХР, целый день просматривал собесы и просто поговорил о том же самом что в прошлый раз. Обещала следующий технический, с тим лидом и менеджером. Пойду еще в линкедине заявок накидаю, мб профиль поменяю на го девелопера(сейчас бекенд). Хорошо зовут через djinni/dou и отвратительно через линкедин дорогие иностранцы. Кстати вспомнил я скипнул некоторых на линкедин где апплай через мутную прокладку, где надо зарегаться и оставить кучу своих данных. Вообще те редкие собесы в EU что были показались легче, но фидбек отвратителен, ну точнее его надо уметь считывать в процессе. А так тебе говорят "хороший мальчик" 100 раз за собес, из-за этого стресса меньше чем на СНГ собесах где "что такое солид". Поэтому не понятно что фиксить в собесах на EU.
❤‍🔥4⚡1
♿️🪑ожидаю в пятницу собес и в понедельник, в понедельник должен был быть тест до собеса, надеюсь лайвкодинга не будет(обещали не должно).
наткнулся на примеры с пояснениями https://antonz.org/go-concurrency/ жмите читать онлай, пока 2 главы бесплатные.
🔥3
Media is too big
VIEW IN TELEGRAM
♿️🪑 тех обсер на вопроса о мапе го, я кстати хз че я ее не потыкал толком, зато слайсы/массивы норм зашли. Вопрос на порассуждать видимо ожидали чегото другого, но не то что бы огорчились от ответа. В сравнении с кучей мок собесов на ютубе было легче, про планировщик не спрашивали про базы тоже нет. Ну и сразу со стеком не угадал, в плане какойто NUT юзают вместо кафки, монгоДБ как база. Можно было бы чуток почитать если бы знал, сказал бы натс юзал. Пару линков что кидал мне в чат на собесе тимлид, https://go.dev/play/p/g3GeWDoRhRD https://go.dev/play/p/hNGnbr6LNz2
- почему в первом покажет пустой массив/слайс а второе это как исправить. Подожду фидбека, надеюсь что то существенное скажут.
🔥6