На Go писатель, серверов пинатель.
Beego — это уже не Go
Хайп Go пришелся где-то на 2014ый год, когда авторы приложений имевших от силы 1000RPM (requests per minute) вдруг как один решили, что им срочно нужен concurrency, потому что вот-вот их 1000RPM превратиться в 1000RPS (что тоже не так много, на самом деле).
Результатом хайпа стало то, что к Go приобщилось много людей, привыкших к MVC архитектуре приложения, буть то Spring, Django или Ruby on Rails. И эту архитектуру, как сову на глобус, они стали натягивать на Go. Так появились кадавры вроде Beego и Revel. Revel благополучно сдох, хотя его и пытаются все еще откачать. А вот о Beego хочется поговорить отдельно.
Немалый вклад в продвижение Beego среди масс вложил Richard Eng своим циклом статей «A word the Beegoist». Практически «Евангелие от Ричарда». Иронично, что не смотря на то, что Ричард оголтело продвигает Go, сам он на нем не пишет.
В свою очередь я с Go, а еще хуже, с Beego, проработал не мало. И могу сказать, что это явно не тот путь, которым должна идти разработка на Go.
Реверс-инжиниринг неизвестного процессора по единственной программе
TL;DR: мы выполнили обратную разработку программы, написанной для полностью неизвестной архитектуры ЦП без какой-либо документации на ЦП (без эмулятора, без ISA, без всего) всего за десять часов. Из статьи вы узнаете, как нам это удалось…
В прошлые выходные мы с командой CMU PPP поучаствовали Teaser CTF 2019 команды Dragon Sector, чтобы расслабиться и отойти от жёсткого дедлайна CHI 2020. Dragon Sector — это уважаемая польская команда, имеющая историю интересных CTF, поэтому мне было интересно, что у них есть в запасе.
Решив “ummmfpu”, — задачу, в которую входил реверс-инжиниринг байткода для сопроцессора с плавающей запятой Micromega uM-FPU, я решил поучаствовать в соревновании по решению задачи CPU Adventure, которая на тот момент не была решена ни одной из команд (в результате мы оказались единственными, кто справился с заданием).
Вот описание задачи CPU Adventure:
Мой дедушка в 60-х годах занимался разработкой компьютеров. Наводя порядок на его чердаке, я нашёл странную машину. Рядом с машиной лежала стопка перфокарт с пометкой “Dragon Adventure Game”. Спустя какое-то время мне удалось подключить её к современному оборудованию, но игра слишком сложная и я не могу добраться до конца без читерства. Сможете мне помочь? Прилагаю транскрипцию перфокарт, используемых в машине. Утверждается, что машина имеет 4 регистра общего назначения, 1 кибибайт памяти данных и 32 кибибайта памяти команд. Чтобы сыграть в игру, подключитесь к серверу следующим образом:socat tcp4-connect:cpuadventure.hackable.software:1234 fd:0,rawer
Подсказка: процессор машины уникален, не пытайтесь гуглить информацию по нему.
game.bin
Лабораторная работа: настраиваем lvm, raid на linux
Небольшое отступление: данная л\р является синтетической.
Некоторые задания которые здесь описаны можно сделать гораздо проще, но поскольку задача л/р — познакомиться с функционалом raid, lvm то некоторые операции искусственно усложнены.
Требования к инструментам для выполнения л\р:
- Средства виртуализации, например Virtualbox
- Установочный образ linux, например Debian9
- Наличие интернета для скачивания нескольких пакетов
- Подключение по ssh к установленной VM (опционально)
ВНИМАНИЕ
Данная лабораторная работа связана с такой тонкой материей как сохранность данных — это такая область, которая позволяет из-за мельчайшей ошибки — одной лишней буквы или цифры потерять все ваши данные.
Поскольку вы выполняете лабораторную работу вам ничего не грозит, разве что придется начать делать ее заново.
В реальной жизни все гораздо серьезнее, поэтому следует очень внимательно вводить имена дисков, понимая что именно вы выполняете текущей командой и с какими дисками работаете.
Собираем, парсим и отдаём логи с помощью Logstash
Так уж сложилось, что по долгу работы мне приходится много времени уделять логам. Это и участие в выработке правил и политик сбора/хранения/использования логов, это и разбор разных инцидентов и обнаружение аномалий. За сутки наши программы, сервисы и серверы генерируют ОЧЕНЬ большое количество логов. И потребность копания в логах растёт постоянно.
Мне довелось поработать с коммерческими лог-менеджмент продуктами типа ArcSight, RSA Envision, Q1 Labs. У этих продуктов есть как плюсы, так и минусы. Но в статье речь пойдёт не о них.
Речь будет о Logstash.
Что же такое Logstash? Зачем он нужен? Что он умеет?
Сбор и анализ логов демонов в Badoo
Введение
В Badoo несколько десятков «самописных» демонов. Большинство из них написаны на Си, остался один на С++ и пять или шесть на Go. Они работают примерно на сотне серверов в четырех дата-центрах.
В Badoo проверка работоспособности и обнаружение проблем с демонами лежат на плечах отдела мониторинга. Коллеги с помощью Zabbix и скриптов проверяют, запущен ли сервис, отвечает ли он на запросы, а также следят за версиями. Кроме того, в отделе анализируется статистика демонов и скриптов, работающих с ними, на предмет аномалий, резких скачков и т.п.
Однако у нас до недавнего времени не было очень важной части — сбора и анализа логов, которые каждый демон пишет локально в файлы на сервере. Зачастую именно эта информация помогает на самом раннем этапе поймать проблему или постфактум понять причины отказа.
Мы построили такую систему и спешим поделиться подробностями. Наверняка у кого-то из вас будет стоять похожая задача, и прочтение данной статьи убережет от ошибок, которые мы успели совершить.
Очень много YouTube-каналов для прокачки английского языка для программистов
С помощью YouTube можно ощутимо и сравнительно быстро улучшить английский.
Понимание на слух как минимум. Истина не нова, но мало кто смотрит английский YouTube, потому что легко потеряться в бесконечности каналов. Но для вас я собрал самые стоящие каналы!
Добавляйте в закладки и подписывайтесь на меня!
Дальше вас ждет много крутых статей.
Поучить английский
AJ Hoge. На его канале есть всё: от базовых слов до размышлений о важности языка тела в общении. Чувак пилит видосы уже много лет, материальчик накопился.
EngVid. Если бы можно было выбрать что-то одно для улучшения английского, то это оно. Разные преподы и тематики, постоянное обновление, бездонный ресурс. Ещё сайт одноимённый крутой, с удобной навигацией — можно найти очень узкую тему по интересам.
22 сайта для программиста, которые помогут заговорить на английском
Сделал подборку из 22-х сайтов для изучения английского языка.
Подборка поможет изучить английский легко, без зубрежки и учебников.
Приступим!
Учить лексику
Плагины, мобильные приложения и сайты, которые помогут перевести и запомнить незнакомые термины с русского на английский и обратно.
ЛеоПереводчик
С этим плагином удобно переписываться с коллегами. Он автоматически переводит непонятные слова и выражения. Незаменимый инструмент, когда нет времени на доскональные переводы и нужен срочный ответ.
Gonkey — инструмент тестирования микросервисов
Gonkey тестирует наши микросервисы в Lamoda, и мы подумали, что он может протестировать и ваши, поэтому выложили его в open source. Если функциональность ваших сервисов реализована преимущественно через API, и используется JSON для обмена данными, то почти наверняка Gonkey подойдет и вам.
Ниже я расскажу о нем подробнее и покажу на конкретных примерах, как его использовать.
Как работать с Postgres в Go: практики, особенности, нюансы
Неожиданное поведение приложения в отношении работы с базой приводит к войне между DBA и разработчиками: DBA кричат: «Ваше приложение роняет базу», разработчики — «Но ведь до этого всё работало!». Хуже всего, что DBA и разработчики не могут помочь друг другу: одни не знают про нюансы работы приложения и драйвера, другие не знают про особенности, связанные с инфраструктурой. Было бы неплохо такой ситуации избежать.
Надо понимать, часто недостаточно полистать go-database-sql.org. Лучше вооружиться чужим опытом. Еще лучше, если это будет опыт, полученный кровью и потерянными деньгами.
Конечный автомат (он же машина состояний) на чистом С
И много кто, начиная писать реализацию какого-либо протокола, задумывался как написать её красиво, изящно, так чтобы через месяц было понятно что ты имел в виду, чтобы она не отжирала всю память
И вот тут на помощь приходят машины состояний, они же конечные автоматы (те самые которые используются в регулярных выражениях).
Собственно через регулярные выражения я к ним и пришёл.
Шейдеры растворения и исследования мира
Часть 1: шейдер растворения
Шейдер растворения возвращает красивый эффект, к тому же его легко создать и понять; сегодня мы сделаем его в Unity Shader Graph, а также напишем на HLSL.
Вот пример того, что мы будем создавать:
Как это работает
Чтобы создать шейдер растворения (dissolve shader), нам придётся работать со значением AlphaClipThreshold в шейдере «Shader Graph» или воспользоваться функцией HLSL под названием clip.
По сути, мы прикажем шейдеру не рендерить пиксель на основании текстуры и переданного значения. Нам нужно знать следующее: белые части растворяются быстрее.
Шейдерный эффект дудла
Последние несколько лет этот стиль становится всё более популярным и активно используется в таких играх, как GoNNER и Baba is You.
В этом туториале рассказано всё необходимое, от основ кодирования шейдеров до используемой математики. В конце статьи есть ссылка на скачивание полного пакета Unity.
На создание этого туториала меня вдохновил успех Doodle Studio 95!.
Bash-скрипты, часть 7: sed и обработка текстов
Bash-скрипты: начало
Bash-скрипты, часть 2: циклы
Bash-скрипты, часть 3: параметры и ключи командной строки
Bash-скрипты, часть 4: ввод и вывод
Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
Bash-скрипты, часть 6: функции и разработка библиотек
Bash-скрипты, часть 7: sed и обработка текстов
Bash-скрипты, часть 8: язык обработки данных awk
Bash-скрипты, часть 9: регулярные выражения
Bash-скрипты, часть 10: практические примеры
Bash-скрипты, часть 11: expect и автоматизация интерактивных утилит
В прошлый раз мы говорили о функциях в bash-скриптах, в частности, о том, как вызывать их из командной строки. Наша сегодняшняя тема — весьма полезный инструмент для обработки строковых данных — утилита Linux, которая называется sed. Её часто используют для работы с текстами, имеющими вид лог-файлов, конфигурационных и других файлов.
Стажёр Вася и его истории об идемпотентности API
Идемпотентность — звучит сложно, говорят о ней редко, но это касается всех приложений, использующих API в своей работе.
Меня зовут Денис Исаев, и я руковожу одной из бэкенд групп в Яндекс.Такси. Сегодня я поделюсь с читателями Хабра описанием проблем, которые могут возникнуть, если не учитывать идемпотентность распределенных систем в своем проекте. Для этого я выбрал формат вымышленных историй о стажёре Васе, который только-только учится работать с API. Так будет нагляднее и полезнее. Поехали.
Безумие дотфайлов
В моём собственном 25 обычных файлов и 144 скрытых. В дотфайлах хранятся данные, которые не принадлежат мне: они принадлежат программистам, чьи программы решили захватить моё пространство, предназначенное для хранения моих личных файлов.
Я не могу убрать эти файлы в другое место. Если я попытаюсь их удалить, они появятся снова. Всё, что я могу сделать — это сидеть и знать, что в темноте, за кулисами, они есть. Ожидание в тишине. Некоторые из этих программистов решили дополнительно разместить здесь несколько обычных файлов и каталогов. Они хорошо видны каждый раз, когда я выполняю
ls
. Понятия не имею, как в мою личную папку попали каталог node_modules
, файлы package-lock.json
, yarn.lock
(я никогда сознательно даже не ставил yarn
!), какие-то два странных лог-файла от какой-то Java-программы, явно использующей СУБД H2, и папка Desktop
. Последнюю создал Steam, что довольно неудачно, поскольку на моей машине просто нет рабочего стола или какого-то десктопа. Боюсь того дня, когда услышу громкий стук в дверь — и один из этих программистов ворвётся и сообщит, что собирается хранить часть своей мебели посреди моей гостиной, если я не возражаю.Чек-лист: что нужно было делать до того, как запускать микросервисы в prod
Эта статья содержит краткую выжимку из моего собственного опыта и опыта моих коллег, с которыми мне днями и ночами доводилось разгребать инциденты. И многих инцидентов не возникло бы никогда, если бы всеми любимые микросервисы были написаны хотя бы немного аккуратнее.
К сожалению, некоторые невысокие программисты всерьёз полагают, что Dockerfile с какой-нибудь вообще любой командой внутри — это уже сам по себе микросервис и его можно деплоить хоть сейчас. Докеры крутятся, лавешка мутится. Такой подход оборачивается проблемами начиная с падения производительности, невозможностью отладки и отказами обслуживания и заканчивая кошмарным сном под названием Data Inconsistency.
Если вы ощущаете, что пришло время запустить ещё одну аппку в Kubernetes/ECS/whatever, то мне есть чем вам возразить.
English version is also available.
UTF-8 кодировка в названиях и паролях Wi-Fi (Emoji)
Взаимодействие сайта в браузере и локально запущенной программы
Иногда возникает необходимость передать данные между работающим в браузере приложением и программой, выполняющейся на той же системе, на которой запущен браузер. Это может понадобиться, например, если нам нужно поработать с оборудованием, подключенным локально. Считывателем смарт-карт, аппаратным ключом шифрования и так далее.
Картинка отсюда
Первыми приходят в голову три способа решить эту задачу:
- Обойтись средствами браузеров, или написать плагины к ним
- Организовать обмен данными через backend, выступающий в роли посредника
- Добавить в программу HTTP-сервис, и обращаться к ней напрямую из браузера
Третий пункт выглядит хорошо, позволяет убрать авторизацию в программе, не требует вообще никакого пользовательского интерфейса. Попробуем его реализовать, написав программу на C# под .NET Framework 4. Так как речь пойдет о .NET, решение будет только для Windows (XP и новее). Веб-приложение сделаем на angular.
Используем GPG для шифрования сообщений и файлов
Кратко о том, как создавать ключи, шифровать и подписывать файлы и отправлять ключи на сервер ключей.
GPG (также известный как GnuPG) создавался как свободная альтернатива несвободному PGP. GPG используется для шифрования информации и предоставляет различные алгоритмы (RSA, DSA, AES и др.) для решения этой задачи.
Information
- Rating
- 6,235-th
- Date of birth
- Registered
- Activity