TGViewer
Channel Public Channel
dev notes

dev notes

@junsenior

Пишу про Go, Vim, и про то, как я медленно ползу в сторону FAANG.

С предложениями: @junsenpub
Subscribers
1.39K
Photos
33
Videos
6
Links
189

Showing posts older than #270 · Back to latest

Older Posts 20 shown
Post #269 1.4K
реакции есть, так что кто считает, что ему нужна помощь, пишите: @junsenpub

чтобы пост не был из одной строчки, поделюсь еще своими наблюдениями о собеседованиях

я уже давно собеседовал php-разработчиков на разные грейды, и около года как начал собеседовать go-разработчиков на senior и middle позиции

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

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

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

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

какой тут можно сделать вывод: если у тебя совсем нет знаний, и ты решил таким путем быстро получить работу - волшебной кнопки не бывает, и будь готов, что помимо денег за доступ к чату таких же "хакеров", ты еще потратишь очень много нервов, времени и сил на поиск компании, с которой этот номер пройдет
если у тебя уже есть какие-то знания - вероятно, полезней будет посмотреть примеры прохождения собесов на твоем стеке на youtube - это бесплатно, и очень часто совпадает с реальными собесами
  • 🔥 9
  • 👎 3
  • 😢 3
  • 👍 2
Post #267 2.61K
как человек, работающим с докером только в рамках докеризации небольших кусков приложений, открыл для себя крайне интересную вещь
может быть, для многих очевидную, но как показал опрос коллег - мало кто про это знает :)

unionfs - это слоистая файловая система, 1 из 4-х базовых компонентов любого контейнера
почему система называется слоистой? потому что одно действие, например через директиву RUN в Dockerfile - выполняется на одном слое, затем этому слою выдается hash, который в дальнейшем может быть переиспользован на последующих слоях

так вот докер помечает все ранее выполненные слои как read only, и каждая следующая команда не может изменить данные, оставшиеся на слое выше

иначе говоря, если мы пытаемся скачать архив, затем распаковать его, переместить файлы и удалить, и делаем это 4-мя разными командами:
RUN wget https://releases.hashicorp.com/terraform/0.12.28/terraform_0.12.28_linux_amd64.zip
RUN unzip terraform_0.12.28_linux_amd64.zip
RUN rm terraform_0.12.28_linux_amd64.zip
RUN mv terraform /usr/local/bin/


у нас ничего не получится, в таком случае 3-я команда не сможет удалить данные, а 4-ая не сможет их перенести

чтобы все сработало, нужно сделать это в одну команду:
RUN wget https://releases.hashicorp.com/terraform/0.12.28/terraform_0.12.28_linux_amd64.zip \
&& unzip terraform_0.12.28_linux_amd64.zip \
&& rm terraform_0.12.28_linux_amd64.zip \
&& mv terraform /usr/local/bin/
  • 👍 25
Post #266 2.65K
пожалуй, лучшее объяснение того, как устроены мапы в golang - это доклад Кейта Рэндалла на GopherCon 2016 - https://www.youtube.com/watch?v=Tl7mi9QmLns
Кейт работает в google, занимается райнтаймом языка и точно знает, о чем говорит

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

мапа - это структура данных, позволяющая хранить данные в формате ключ-значение
простейшая реализация мапы делается в два действия: создаем структуру полем-ключом и полем-значением, и объявляем массив этих структур
какая основная проблема такой реализации? в случае большого объема данных мы теряем в скорости: для поиска конкретного ключа нам нужно перебрать все данные
как решить? разбить данные на несколько групп
например, по алфавиту мы бы могли разбить на 4 группы:
A-F - первая, G-M - вторая, N-S - третья и T-Z - четвертая
возникает другая проблема - данные могут распределиться неравномерно
например, ключи могут быть ссылками, ссылки начинаются с http, и все данные в таком случае улетят у нас во вторую группу
в качестве решения мы можем взять хорошую hash-функцию, которая равномерно сможет распределить данные по группам
в go такие группы называются buckets
один бакет может содержать максимум 8 пар ключ-значение
в случае, если пачка данных не вмещается в один бакет (что решает hash-функция), структура может содержать указатель на дополнительный бакет

когда мы выделяем мапу через var m map[string]float64 m - это указатель
указывает m на область памяти, называемую map header
header хранит указатель на массив с бакетами, информацию о размерности мапы, информацию о количестве бакетов и другую мета-информацию
YouTube GopherCon 2016: Inside the Map Implementation - Keith Randall Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
  • 🔥 10
Post #265 1.99K
открыл для себя тулзу для интеграционного тестирования gonkey - https://github.com/lamoda/gonkey
если коротко, она позволяет поднять в пару строк моки на все внешние сервисы, в интеграции с которыми будет тестироваться приложение, описать сценарии в yaml-файлах, где можно задать нужные фикстуры и указать их порядок, описать ответы на запросы и проверить, что в итоге залетело в базу
затянул на все свои проекты, и крайне рекомендую, если ты пишешь на go
GitHub GitHub - lamoda/gonkey: Gonkey - a testing automation tool Gonkey - a testing automation tool. Contribute to lamoda/gonkey development by creating an account on GitHub.
  • 🔥 9
  • 👍 3
Post #264 1.94K
в golang есть такая интересная вещь, как netpoller - это пакет, который позволяет преобразовать асинхронный ввод/вывод в блокирующий
зачем это нужно?
golang заточен работать под блокирующие вызовы
например, происходит синхронное чтение из файла, горутина блокируется и ждет, пока чтение завершится
планировщик, через 10 мс выбрасывает ее вниз очереди ожидания, и берет в работу другую горутину
с синхронными вызовами все просто и понятно
а что если вызов асинхронный? в go поступили просто - умеем работать с синхронными? значит сделаем из асинхронного синхронный :)
тут в дело вступает netpoller - компонент рантайма, который умеет блокировать горутину, при этом не блокируя текущий поток выполнения
текущий поток выполнения берет в работу новую горутину из очереди, а netpoller тем временем подписывается на API операционной системы, которое работает с асинхронными вызовами
как только API выбросит событие, что ответ получен - netpoller разбудит горутину и сообщит планировщику, что ей нужно выделить процессорное время
после чего планировщик заберет горутину в один из потоков и возьмет ее на выполнение

второй интересный момент из модуля про планировщик - asynchronous preempation
это механизм, добавленный в go 1.14, позволяющий вытеснить горутину, работающую дольше 10 мс, и дать возможность поработать другим горутинам из локальной очереди
да, до версии 1.14 в случае, если мы работали на одном ядре и запускали там горутину с бесконечным циклом - поток блокировался до явного вызова runtime.Gosched()
более подробно, если тебе интересно, про это можно почитать тут - https://habr.com/ru/post/502506/
Хабр GO Scheduler: теперь не кооперативный? Если вы читали release notes для версии GO 1.14, то возможно заметили несколько довольно интересных изменений в рантайме языка. Вот и меня очень заинтересовал пу...
  • 🔥 12
  • 👍 7
  • 👎 1
Post #262 2.55K
Вообще, посты у меня и так были не часто, а на фоне всего происходящего очень сложно вести канал и поддерживать какую-либо работу.
С одной стороны - это кажется неуместным, и, вероятно, так и есть.
С другой, я попробую продолжить это делать, и надеюсь, кому-то это будет сейчас полезно: любая такая информация это возможность что-то изучить и что-то в последующем поменять.

Немного скажу про то, что я тут пилил пару недель назад в режиме лайвкодинга.
Зрителей было немного, но основная идея - приложение, которое будет отслеживать реальный уровень инфляции. Источников, которые показывали бы всё кристально чисто - я не нашёл.
Смысл такой: каждый день через определённые интервалы времени я набираю одну и ту же продуктовую корзину, и смотрю, насколько изменилась цена за предыдущий день.
Раз в неделю смотрю, как изменилась за неделю.
И раз в месяц финалим стату за 30 дней.
Собственно, софтина готова, кроме ротации проксей, небольшого количества асинхронщины и интеграции с парой крутых либ - особо интересного там ничего нет, поэтому код пока открывать смысла не вижу.
Изначально идея была настроить автопостинг этого в твиттер, но переписка с dev-саппортом твиттера затягивается, поэтому на днях сделаю автопостинг этого в отдельный канал в telegram. Вероятно, кому-то будет интересно посмотреть, что происходит с ценами, и насколько больше/меньше сегодня нужно будет заплатить, чем вчера.
Затем, если будут заинтересованные, может провести несколько сессий по рефакторингу в режиме лайв-кодинга: есть идея прикрутить дженерики, добавить больше асинхронщины и в целом привести всё к божескому виду.
  • 👍 29
  • 🔥 2
Post #259 2.39K
проверил бота выше, есть контакт
единственное, судя по всему из-за нагрузки, крипта конвертится чуть дольше, чем за 72 часа, у меня пришло почти через 4 дня
Post #258 2.38K

Forwarded from Диджитализируй!

Кому нужна международная Visa карта для оплаты сервисов - @Bankoff_Bo_Bot работает. Карта выдается в телеграм боте, чтоооо вообще происходит:) Пополнение через крипту USDT (её TRX или BEP20 вариант, не ETH) — видос о том, как купить крипту, был на канале. На бинансе было бы дешевле, но я брал на kassa.cc.

Пополнение этой карты с крипты долгое, до 72 часов. Много людей к ним повалило и они зашиваются, там похоже команда вся 4 офигевших от своего счастья человека:).

Но я вчера пополнил, сегодня дошли. Оплатил снова Ютуб премиум, чтобы видосы слушать можно было на телефоне, свернув программу. Работает.

Только ребят, дисклеймер — я ответственности никакой не несу за этот банкофф и никого не призываю туда слать крипту. Просто рассказал о своём опыте, он положительный.
  • 👍 1
  • 🔥 1
Post #255 2.16K
всем аллоха :)
сегодня будет лайвкодинг, без подготовки, в режиме реальной разработки: с гуглом и туплением, в общем всё, как обычно :)
цели на сегодня:
- написать несколько парсеров с интеграцией с какой-нибудь субд, скорее всего это будет что-то документоориентированное, и скорее всего - монга, но может и её аналоги
- поднять веб-сервер, написать несколько ручек, которые будут выводить данные, собранные парсерами
- если всё пройдёт относительно быстро (1.5-2 часа), то порефачить всё написанное и прикрутить к парсерам многопоточную работу; если всё пройдёт не быстро, то сделаю это либо на 2-ом стриме, либо за кадром

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

кому интересно включить что-то фоном - ссылка будет в канале в 18-19 по мск
  • 👍 14
  • 🔥 1
Post #254 1.96K
хочу протестировать трансляции в телеге, и сделать немного лайвкодинга
серверная часть будет на go, со стороны сервера на первой итерации будут веб-парсеры и веб-сервер с парой ручек
со стороны морды будет vue, задача которого - отобразить эти самые пару ручек

ничего сложного, проект на пару-тройку вечеров, писаться всё будет без подготовки, просто кодим в реал-тайме
если интересно - плюсуй
  • 👍 46
  • 👎 1
  • 🔥 1
Post #253 2.67K
постоянно обновляемый список пакетов/бандлов/софта, в котором обнаружена малварь или иные, связанные с последними событиями, вещи:

https://docs.google.com/spreadsheets/d/1H3xPB4PgWeFcHjZ7NOPtrcya_Ua4jUolWm-7z9-jSpQ/htmlview?usp=sharing&pru=AAABf7rAbC0*P8SbG5KHN5WLt2JJJhoK-Q

проверьте свои зависимости
возможно, имеет смысл сейчас жёстко из зафиксировать
  • 👍 6
Post #250 1.48K

Forwarded from Диджитализируй!

Многие спрашивают в комментах — это вы всё выпендриваетесь, я вот поставил бесплатный VPN и всё работает у меня. Или плагин в браузер. Или платный VPN купил.

Тем временем РКН заблокировал уже 20 VPN сервисов:) Что произойдёт, когда ваш бесплатный или платный — чужой — сервис просто перестанет работать? Или будет работать, но без нужных вам сайтов? Ну, можно будет искать очередной и ждать, пока заблокируют его.

Думаю, что сейчас самое время научиться устанавливать свои VPN и подобные им решения. Это то, что вы контролируете в отличие от чужих сервисов. Ваши решения тоже могут быть заблокированы, но знания останутся с вами и вам будет проще найти другой рабочий вариант. Их сейчас огромное количество. Действительную ценность имеют ваш опыт и ваши навыки. Всегда полезно их развивать.

И да. Стоит сказать, что понимание ценности Open Source решений у меня сейчас поднимается на новый уровень.
  • 👍 15
Post #249 1.29K
выше я делился мануалом по настройке wireguard от канала "Диджитализируй", по которому и сам настроил себе vpn
у меня и всех, кому я его расшарил - отлично работает
всем, кто пользуется сторонними решениями - рекомендую
во-первых, это дешевле
во-вторых, вероятность его блокировки гораздо ниже, чем у какого-либо стороннего сервиса
ну и в-третьих, аргументы, которые описывает автор мануала:
Post #248 1.75K
Post #247 1.71K
Post #245 1.6K

Forwarded from Диджитализируй!

Текстовая инструкция по настройке Wireguard к видео.

Обновляем сервер:
apt update && apt upgrade -y


Ставим wireguard:
apt install -y wireguard


Генерим ключи сервера:
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey


Проставляем права на приватный ключ:
chmod 600 /etc/wireguard/privatekey


Создаём конфиг сервера:
vim /etc/wireguard/wg0.conf


[Interface]
PrivateKey = <privatekey>
Address = 10.0.0.1/24
ListenPort = 51830
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE


Вставляем вместо <privatekey> содержимое файла /etc/wireguard/privatekey

Настраиваем IP форвардинг:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p


Включаем systemd демон с wireguard:
systemctl enable wg-quick@wg0.service
systemctl start wg-quick@wg0.service
systemctl status wg-quick@wg0.service


Создаём ключи клиента:
wg genkey | tee /etc/wireguard/goloburdin_privatekey | wg pubkey | tee /etc/wireguard/goloburdin_publickey


Добавляем в конфиг сервера клиента:
vim /etc/wireguard/wg0.conf


[Peer]
PublicKey = <goloburdin_publickey>
AllowedIPs = 10.0.0.2/32


Вместо <goloburdin_publickey> — заменяем на содержимое файла /etc/wireguard/goloburdin_publickey

Перезагружаем systemd сервис с wireguard:
systemctl restart wg-quick@wg0
systemctl status wg-quick@wg0


На локальной машине (например, на ноутбуке) создаём текстовый файл с конфигом клиента:

vim goloburdin_wb.conf


[Interface]
PrivateKey = <CLIENT-PRIVATE-KEY>
Address = 10.0.0.2/32
DNS = 8.8.8.8

[Peer]
PublicKey = <SERVER-PUBKEY>
Endpoint = <SERVER-IP>:51830
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20


Здесь <CLIENT-PRIVATE-KEY> заменяем на приватный ключ клиента, то есть содержимое файла /etc/wireguard/goloburdin_privatekey на сервере. <SERVER-PUBKEY> заменяем на публичный ключ сервера, то есть на содержимое файла /etc/wireguard/publickey на сервере. <SERVER-IP> заменяем на IP сервера.

Этот файл открываем в Wireguard клиенте (есть для всех операционных систем, в том числе мобильных) — и жмем в клиенте кнопку подключения.
  • 👍 5
  • ❤ 1
Post #244 1.31K

Forwarded from Диджитализируй!

Настроим в этом видео WireGuard VPN. Это легко конфигурируемый, быстро работающий и нетребовательный к ресурсам VPN, работающий — внезапно — лучше тех платных VPN сервисов, которые я за прошедшие дни пробовал. Помимо доступа к ресурсам, которые перестали работать — а сейчас могут не открываться даже сайты заказа лекарств, WireGuard это безопасный интернет за счёт шифрования трафика, а также возможность объединять несколько компьютеров в одну сеть с доступом откуда угодно. И самый сок — всё настраивается куда проще, чем в случае с OpenVPN, конфиги в несколько понятных строк. Будем поднимать!

https://www.youtube.com/watch?v=5Aql0V-ta8A
YouTube WireGuard VPN — лучше платных сервисов и проще OpenVPN. Полная настройка WireGuard! Подпишись на Телеграмушку, чтобы не потеряться и читать оперативный контент! https://t.me/t0digital Настроим в этом видео WireGuard VPN. Это легко конфигурируемый, быстро работающий и нетребовательный к ресурсам VPN, работающий — внезапно — лучше тех платных…
  • 👎 2
Post #242 2.07K
Нашёл огненную статью по профилированию и отладке go-программ: https://habr.com/ru/company/badoo/blog/301990/

Огромный массив информации про инструменты и методы, позволяющие найти в программе места, где плохо памяти, процессору, или где не стоит пересобирать регулярку в цикле :)
После прочтения понимаешь, что авторы языка сумели сделать не просто много инструментов для профилирования кода, они сумели ещё и сделать их крайне удобными.
А автор статьи сумел показать на примерах, как эти инструменты использовать.
Хабр Профилирование и оптимизация программ на Go Введение В этой статье я расскажу, как профилировать и оптимизировать приложения на языке Go с использованием встроенных и общих инструментов, доступных в ОС Lin...
Post #241 1.49K

Forwarded from AppSec & Compliance

https://github.blog/2022-02-17-code-scanning-finds-vulnerabilities-using-machine-learning/

GitHub объявил о добавлении в сервис Code scanning экспериментальной системы машинного обучения для выявления распространённых типов язвимостей в коде. На этапе тестирования новая функциональность пока доступна только для репозиториев с кодом на языках JavaScript и TypeScript. Отмечается, что применение системы машинного обучения позволило заметно расширить спектр выявляемых проблем, при анализе которых система теперь не ограничивается проверкой типовых шаблонов и не привязывается к известным фреймворкам. Из выявляемых новой системой проблем упоминаются ошибки, приводящие к межсайтовому скриптингу (XSS), искажению файловых путей (например, через указание "/.."), подстановке SQL- и NoSQL-запросов.

Сервис Code scanning позволяет выявлять уязвимости на ранней стадии разработки через сканирование каждой операции "git push" на предмет потенциальных проблем. Результат прикрепляется непосредственно к pull-запросу. Ранее проверка осуществлялась с использованием движка CodeQL, анализирующего шаблоны с типовыми примерами уязвимого кода (CodeQL позволяет сформировать шаблон уязвимого кода для выявления наличия подобной уязвимости в коде других проектов). Новый движок, использующий машинное обучение, может определять ранее не известные уязвимости так как он не привязан к перебору шаблонов кода, описывающих конкретные уязвимости. Ценой подобной возможности является увеличение числа ложных срабатываний по сравнению с проверками на основе CodeQL. (https://www.opennet.ru/opennews/art.shtml?num=56719)
The GitHub Blog Code scanning finds more vulnerabilities using machine learning Today we launched new code scanning features powered by machine learning. The experimental analysis finds more of the most common types of vulnerabilities.
  • 👍 6
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 →