Pull to refresh
4
0

Программист программ

Go — 100 вопросов/заданий с собеседований

Level of difficulty Medium
Reading time 87 min
Views 41K

Приветствую тебя, хаброжитель!

В этой статье разберём 100 вопросов, они покрывают львиную долю того, что могут спросить на собеседовании джуниор Go-разработчика с практически любой специализацией. Конечно же, в реальной работе на Go требуются немного другие скиллы, чем умение быстро ответить на любой вопрос. Однако сложилась добрая традиция делать из собеседования викторину с главным призом в виде трудоустройства — к этому нужно быть готовым.

Читать далее
Total votes 51: ↑42 and ↓9 +33
Comments 14

DIY Zigbee датчик СO2 для вашего Умного дома

Level of difficulty Easy
Reading time 14 min
Views 20K
Приветствую всех читателей Habr. Меня зовут Андрей, примерно около 5 лет я осознано занимаюсь DIY разработкой электронных устройств для своего «Умного дома», да и не только для своего. Сегодня хочу рассказать об одном из моих DIY проектов, небольшом устройстве для контроля уровня углекислого газа. Проект называется EFEKTA iAQ, это датчик с круглым IPS TFT дисплеем, сенсором CO2, работающий на протоколе Zigbee.

Читать дальше →
Total votes 48: ↑46 and ↓2 +44
Comments 49

Припой припою рознь, или Несколько слов о флюсах

Reading time 7 min
Views 37K

Общаясь сейчас со связистами на предмет «сообщите, кому какой припой нужен», получил достаточно типовой ответ — «хороший, чтобы всё паял». Углублённое обсуждение вопроса вынесло на поверхность несколько запомнившихся людям торговых марок — в первую очередь Asahi — но и только. Про флюсы и их различия сказано ничего не было.

Спектр задач по пайке при этом у связистов простирается от антенно-фидерного хозяйства (кабели, разъёмы), через аксессуары (зарядки, гарнитуры) и до ремонта собственно радиоаппаратуры (SMD-компоненты).

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

Итак: какие бывают флюсы в припоях, что лучше — ORL0 или ROM1 (я проверил гуглем, обе аббревиатуры на Хабре встречались 0 раз), где искать эту информацию и зачем вообще это надо.

Читать далее
Total votes 141: ↑133 and ↓8 +125
Comments 92

Моя борьба с санкциями или как появился умный VPN

Reading time 3 min
Views 74K

Зачем людям ранее был нужен VPN (кроме мошенников конечно) - чтоб ходить на Linkedin и обходить всякие разные запреты РКН.

Когда ввели санкции и некоторые сайты перекрасились в сине-желтый цвет, то многие по старой памяти подумали - включим VPN и всё сразу станет как раньше, разве что русские сайты начнут открываться на 50мс медленнее.

Но не тут-то было. Вместе с перекраской сайтов, началась волна DDoS и хакерских атак на различные сервисы в РФ. В итоге, российские сайты закрылись от остального интернета. И с VPN стало очень некомфортно - хочешь пользоваться Terraform или там MatterMost скачать - включаешь VPN и сразу же не можешь сходить ни на Ozon ни на Госуслуги.

Интернет разделился на InnerNet и OuterNet.

Читать далее
Total votes 46: ↑39 and ↓7 +32
Comments 130

Моделируем процессы в OpenFOAM и отображаем результаты в веб

Reading time 13 min
Views 8K

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


Я обычный разработчик, и не являюсь специалистом в данной научной области. С этим видом задач я столкнулся впервые в рамках недавно прошедшего хакатона FIT-M 2020, где мне посчастливилось поучаствовать в качестве со-организатора и ментора. Опыт мне показался интересным, в частности из-за возможности прикоснуться к области высокопроизводительных вычислений (англ. High Performance Computing), которые часто запускают на суперкомпьютерах. Я разобрался как можно довольно быстро наладить запуск вычислений на сервере в облаке и посмотреть на результат прямо через браузер, хоть с планшета или телефона!


Мне показалось, что материалов на русском языке по теме визуализации результатов в web не так много, хотя сама по себе тема довольно полезная и интересная. Надеюсь, это пошаговое руководство поможет кому-то в их вполне практических ежедневных задачах. А может быть, это станет для кого-то первым шагом в новую и интересную область науки.


Barcelona Supercomputing Center - Centro Nacional de Supercomputación
Картинка взята из Barcelona Supercomputing Center

Читать дальше →
Total votes 4: ↑4 and ↓0 +4
Comments 1

[Личный опыт] «Повзрослевшая Россия»: тонкости переезда в Канаду

Reading time 17 min
Views 63K

В июле 2020 года, в разгар уже опостылевшей всем пандемии, ValCanada получил статус резидента Канады и переехал с семьёй в Северную Америку.


Откровенно и искренне он поделился с нами особенностями страны, про которые мало говорят в инструкциях о релокации: как получить максимум баллов для ПМЖ, каким IT-специалистам легче найти работу, как законно сэкономить на съёмном жилье (но, возможно, заработать невроз), почему при переезде стоит одеваться теплее, и как обстоят дела с новомодным дайверсити.


Впереди лонгрид!




Читать дальше →
Total votes 46: ↑40 and ↓6 +34
Comments 128

PostgreSQL. Плохие запросы, примеры и их поиск

Reading time 9 min
Views 27K

При поиске проблем в RDBMs разработчик обычно подозревает медленные запросы. А что, если дело не в них? О том, какого типа запросы дают нагрузку на базу данных, не позволяя вашему приложению работать должным образом, рассказал в своем докладе на конференции Saint HighLoad++ Online 2020 администратор баз данных Data Egret Андрей Сальников. 

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

Читать далее
Total votes 18: ↑18 and ↓0 +18
Comments 7

Создаём свою «идеальную программерскую» раскладку или Недооценённый AltGr

Reading time 5 min
Views 12K

Самая удобная раскладка для программиста, раскладка сделанная программистом для самого себя. Конечно, есть Dvorak programmer, но он не может похвастаться возможностью вводить спец-символы в домашнем ряду, да и не всем нравится именно Dvorak.

И вот на сцену выходит недооценённый AltGr, который всего лишь нужно нажимать правым большим пальцем! И вот, что у меня получилось.

Читать далее
Total votes 18: ↑17 and ↓1 +16
Comments 32

Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS

Reading time 14 min
Views 27K

Привет, меня зовут Иван, и я делаю Авито Доставку. Когда пользователь покупает товар с доставкой, мы показываем ему список отделений служб доставки с ценами. Цена доставки может меняться от отделения к отделению. Мы смотрим на область карты, где покупатель ищет товар и информацию по объявлению, например, координаты продавца, вес и размеры товара. И на выходе показываем человеку список отделений с адресами и ценой доставки в каждое из них.


В ходе разработки калькулятора цены доставки возникла такая задача: есть структура базы данных PostgreSQL и запрос к ней от сервиса на Go. Нужно заставить всё это работать достаточно быстро. В итоге нам удалось поднять пропускную способность сервиса с 50 до 5000 RPS и выявить пару нюансов при общении сервиса с базой. Об этом и пойдёт рассказ.


Читать дальше →
Total votes 52: ↑47 and ↓5 +42
Comments 44

Капитальный ремонт в сталинке и организация видеонаблюдения

Reading time 26 min
Views 59K
image

Часть 2. Про «немножечко IT» внизу статьи. Про организацию видео наблюдения нашего дома. Тыц

Платформа ютуб стала основным источником информации по ремонту. Огромное количество талантливых людей делятся своим опытом абсолютно бесплатно, учат, показывают, кладут все в рот практически пережеванным. Им нужно признание и желание поделиться, а зрителям нужны ответы на бытовые проблемы.

Обратная сторона профильных видео на ютубе — я стал сомневаться в людях (ютьюбодеформация), если они не смотрят ютуб по профилю своей специальности. Новая поговорка звучит так: скажи мне на что ты подписан, и я скажу кто — ты. 

Я не могу отказаться от увиденного на мониторе результата, если он технически совершеннее и теоретически достижим за те же деньги. Насмотревшись видосиков, я кинул клич по одной известной платформе для поиска исполнителей с полным описанием своей задачи — замену полов. Ни один из 5 откликнувшихся не предложил мне то, чего я желал. А хотел я стяжку про профлисту, как делают по Питеру в старых домах!

Я лучше знал что я хочу и как хочу, и никто не сможет в этом мне помочь. Я был отравлен восхваленными лайками и просмотрами видео. Измученный сомнениями, я принял единственное неправильное решение в этой ситуации — сделать все самостоятельно. Я медленно превращался в ютуб-одиночку... 
Читать дальше →
Total votes 204: ↑149 and ↓55 +94
Comments 249

Как мы в 2020 году изобретали процесс разработки, отладки и доставки в прод изменений базы данных

Reading time 10 min
Views 15K
На дворе 2020 год и фоновым шумом вы уже привыкли слышать: «Кубернетес — это ответ!», «Микросервисы!», «Сервис меш!», «Сесурити полиси!». Все вокруг бегут в светлое будущее.

Подходы в том, что касается баз данных, в нашей компании более консервативны, чем в прикладных приложениях. Крутится база данных у нас не в кубернетесе, а на железе или в виртуалке. Для изменений базы данных процессинга платежных сервисов у нас есть устоявшийся процесс, который включает в себя множество автоматических проверок, большое ревью и релиз с участием DBA. Количество проверок и привлекаемых людей в этом случае негативно влияет на time-to-market. С другой стороны, он отлажен и позволяет надежно вносить изменения в продакшен, минимизируя вероятность что-то сломать. А если что-то сломалось, то нужные люди уже включены в процесс починки. Этот подход делает работу основного сервиса компании стабильнее.

Большинство новых реляционных баз данных для микросервисов мы заводим на PostgreSQL. Отлаженный процесс для Oracle хоть и надёжный, но несет с собой избыточную сложность для маленьких БД. Тащить тяжёлые процессы из прошлого в светлое будущее никто не хочет. Проработкой процесса для светлого будущего заранее никто не занялся. В итоге получили отсутствие стандарта и разножопицу.



Если хотите узнать, к каким проблемам это привело и как мы их порешали, — добро пожаловать под кат.
Читать дальше →
Total votes 36: ↑36 and ↓0 +36
Comments 34

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

Reading time 10 min
Views 7.5K
Объем трафика в интернете растет (особенно в последние месяцы, когда мы все оказались на удаленке и многие перевели свои активности в онлайн). Увеличивается и число автоматических средств взаимодействия с контентом на веб-сайтах и, как следствие, все большую актуальность получает фильтрация нежелательной автоматизированной активности. Сегодня до 50% интернет-активности генерится автоматически с помощью так называемых веб-ботов (или просто ботов). И в данном случае речь о любой активной в сети программе, вне зависимости от целей ее использования. Обычно такие программы выполняют повторяющиеся, простые в автоматизации действия. Например, поисковые движки Google или Yandex используют краулеры для периодического сбора контента и индексации страниц в интернете.

Итак, есть два типа веб-ботов — легитимные и зловредные. К легитимным можно отнести поисковые движки, RSS-ридеры. Примеры зловредных веб-ботов ― сканеры уязвимостей, скрейперы, спамеры, боты для DDoS-атак, трояны для мошенничества с платежными картами. После определения типа веб-бота к нему могут быть применены различные политики. Если бот легитимный, можно уменьшить приоритет его запросов к серверу или снизить уровень доступа к определенным ресурсам. Если бот определен как зловредный, можно его заблокировать или отправить в песочницу для дальнейшего анализа. Обнаруживать, анализировать и классифицировать веб-боты важно, так как они могут нанести вред: например, вызвать утечку важных для бизнеса данных. А также это снизит нагрузку на сервер и сократит так называемый шум в трафике, ведь до 66% трафика веб-ботов — это именно зловредный трафик.
Читать дальше →
Total votes 3: ↑3 and ↓0 +3
Comments 6

Основы мониторинга PostgreSQL. Алексей Лесовский

Reading time 22 min
Views 57K

Предлагаю ознакомиться с расшифровкой доклада Алексей Лесовский из Data Egret "Основы мониторинга PostgreSQL"


В этом докладе Алексей Лесовский расскажет о ключевых моментах постгресовой статистики, что они означают, и почему они должны присутствовать в мониторинге; о том, какие графики должны быть в мониторинге, как их добавить и как интерпретировать. Доклад будет полезен администраторам баз данных, системным администраторам и разработчикам, которым интересен траблшутинг Postgres'а.


Total votes 25: ↑25 and ↓0 +25
Comments 6

Памятка для пострадавшего от слезоточивого газа/перцового баллона

Reading time 22 min
Views 146K
Началась эта история еще в докоронавирусное время, еще тогда когда в моем LAB66 была всего пара тысяч подписчиков и работал бот-автоответчик. И вот в этот бот как-то постучался русскоговорящий парень из Чили и задал вопрос про слезоточивый газ. Про то, как жить вообще, когда по улицам ездят автомобили и распыляют «просроченный слезоточивый газ из Бразилии». Тогда я клятвенно пообещал вопросом этим заняться. Прошло… а прошло всего лишь полгода (хотя из-за обилия событий в 2020 кажется, что прошло 20 лет :) и я решил наконец написать парню ответ. Извини за задержку, Sergio из Чили, я был занят коронавирусом… Читай ответ под катом!


Всякое в жизни бывает, а вдруг да и пригодится...
Total votes 142: ↑139 and ↓3 +136
Comments 116

Пишем свой dependency free WebSocket сервер на Node.js

Reading time 11 min
Views 12K


Node.js — это популярный инструмент для построения клиент-серверных приложений. При правильном использовании, Node.js способен обрабатывать большое количество сетевых запросов, используя всего один поток. Несомненно, сетевой ввод — вывод является одной из сильнейших сторон этой платформы. Казалось бы, что используя Node.js для написания серверного кода приложения, активно использующего различные сетевые протоколы, разработчики должны знать, как эти протоколы работают, но зачастую это не так. Виной тому еще одна сильная сторона Node.js, это его пакетный менеджер NPM, в котором можно найти готовое решение практически под любую задачу. Используя готовые пакеты, мы упрощаем себе жизнь, переиспользуем код (и это правильно), но в то же время скрываем от себя, за ширмой библиотек, суть происходящих процессов. В этой статье мы постараемся разобраться в протоколе WebSocket, реализуя часть спецификации, не используя внешних зависимостей. Добро пожаловать под кат.

Читать дальше →
Total votes 29: ↑29 and ↓0 +29
Comments 4

Храним числа экономно

Reading time 7 min
Views 14K
Недавно в одном из проектов встала задача: есть набор множеств (Set), которые надо достаточно эффективно хранить в оперативной памяти. Потому что множеств много, а памяти мало. И с этим надо что-то делать.

Так как язык, на котором всё это написано — C#, то есть нюансы. А именно, что стандартный HashSet<int> на хранение одного числа тратит 16 байт, также влияет филл фактор. Есть более эффективные реализации (когда-нибудь и про них напишу), но с другой стороны, можно же тупо хранить в массивах, по 4 байта на число (требуется хранить инты), что достаточно эффективно. Но можно ли уменьшить ещё?

Сразу скажу, у меня нет ответа, как лучше сделать, возможно его не существует, ибо есть множество факторов, связанных с особенностями распределения конкретных данных. Но есть идеи, которыми я поделюсь: какие варианты экономии памяти существуют. Также рекомендую до прочтения поста подумать самостоятельно, всё-таки это неплохая разминка для ума. Для определённости сформулирую задачу следующим образом:

Есть набор неотрицательных уникальных интов (32 бита). Требуется хранить их эффективно в оперативной памяти, из операций — создание набора и получение всех элементов. Не нужно получать элементы по индексу, добавлять новые или удалять.

В статье будет много букв и цифр и ни одной картинки (кроме упакованного котика на КДПВ).
Что можно с этим сделать?
Total votes 25: ↑23 and ↓2 +21
Comments 60

Юлия → Iuliia. Всё о транслитерации

Reading time 8 min
Views 61K

Транслитерация


Транслитерация — это запись кириллических слов латиницей (Анна → Anna, Самара → Samara). Её используют в загранпаспортах, водительских удостоверениях, трансграничной доставке, библиотечных каталогах и множестве других международных процессов.


Так вышло, что я недавно окунулся в эту тему, а в Википедии она раскрыта слабо. Поэтому расскажу, что к чему (спойлер — если вы думаете, что с транслитерацией всё плохо, то на самом деле всё ещё хуже).


И конечно, поскольку это Хабр — предложу open-source библиотеки для решения проблемы.

Читать дальше →
Total votes 193: ↑192 and ↓1 +191
Comments 543

Отладка многопоточных программ на базе FreeRTOS

Reading time 13 min
Views 33K

image

Отладка многозадачных программ дело не простое, особенно если ты сталкиваешься с этим впервые. После того, как прошла радость от запуска первой задачи или первой демо программы, от бесконечно волнительного наблюдения за светодиодами, каждый из которых моргает в своей собственной задаче, наступает время, когда ты осознаешь, что довольно мало понимаешь (вообще не врубаешься) о том, что на самом деле происходит. Классика жанра: «Я выделил целых 3КБ операционной системе и запустил всего 3 задачи со стеком по 128Б, а на четвертую уже почему-то не хватает памяти» или «А сколько вообще стека я должен выделить задаче? Столько достаточно? А столько?». Многие решают данные задачи путем проб и ошибок, поэтому в этой статье я решила объединить большинство моментов, которые, в настоящее время, значительно упрощают мне жизнь и позволяют более осознанно отлаживать многопоточные программы на базе FreeRTOS.

Данная статья рассчитана, в первую очередь, на тех, кто только недавно начал осваивать FreeRTOS, однако вполне вероятно, что и хорошо знакомые с этой операционной системой читатели найдут для себя здесь что-то интересное. Кроме того, несмотря на то, что статья ориентирована на разработчиков встраиваемого ПО, прикладным программистам она тоже будет интересна, т.к. много слов будет сказано о FreeRTOS как таковой, безотносительно микроконтроллерной романтики.

В данной статье я расскажу о следующих моментах:


  1. Настройка OpenOCD для работы с FreeRTOS.
  2. Не забываем включать хуки.
  3. Статическое или динамическое выделение памяти?
  4. Сказ, о параметре configMINIMAL_STACK_SIZE.
  5. Мониторинг использования ресурсов.
Читать дальше →
Total votes 26: ↑26 and ↓0 +26
Comments 21

Легкий способ защитить свой Mikrotik от атак

Reading time 4 min
Views 119K
upd-2020-03-16. В свете последних событий метод остается актуальным, вырезал из статьи все лишнее, оставил только про honeypot и port-scanners.

Хочу поделиться с сообществом простым и рабочим способом, как при помощи Mikrotik защитить свою сеть и «выглядывающие» из-за него сервисы от внешних атак. А именно всего тремя правилами организовать на Микротике honeypot.

Итак, представим, что у нас небольшой офис, внешний IP за которым стоит RDP сервер, для работы сотрудников по удаленке. Первое правило это конечно сменить порт 3389 на внешнем интерфейсе на другой. Но это ненадолго, спустя пару дней журнал аудита терминального сервера начнет показывать по несколько неудачных авторизаций в секунду от неизвестных клиентов.

Другая ситуация, у Вас за Mikrotik спрятан asterisk, естественно не на 5060 udp порту, и через пару дней также начинается перебор паролей… да да, знаю, fail2ban наше вcё, но над ним еще попыхтеть придется… вот я например недавно поднял его на ubuntu 18.04 и с удивлением обнаружил, что из коробки fail2ban не содержит актуальных настроек для asterisk из той же коробки того же ubuntu дистрибутива… а гуглить быстрые настройки готовых «рецептов» уже не получается, цифры у релизов с годами растут, а статьи с «рецептами» для старых версий уже не работают, а новых почти не появляется… Но что-то я отвлекся…
Читать дальше →
Total votes 30: ↑28 and ↓2 +26
Comments 85

Поиск работы за границей и иммиграция в Канаду

Reading time 12 min
Views 87K

Всем привет!


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


TL;DR: Сейчас я живу в городе Виктория, на острове Ванкувер. Это Канада, Британская Колумбия. Свою мечту жить у океана я реализовал, но это заняло 5 лет, и сначала были совершенно другие планы. Более подробно ниже. Ниже картинка моих рабочих мест за последние 10 лет.



Меня всегда тянуло уехать куда-нибудь. Поначалу было все равно, я хотел лишь находиться в новом для себя месте, желательно не России. Это совершенно не связано с политическим климатом или еще чем-то. Я родился и учился в Москве, и Москва это офигенный город. С карьерой более-менее все хорошо было.


В студенческие годы мой отец, подсунул мне ссылку на world4u — это волонтерская организация по обмену. В 2007, 2008, 2009 я посетил Германию, Францию и Италию. В среднем программа была по 1-2 месяца и нужно было оплатить только за перелет. Именно эти европейские проекты оказали на меня влияние, я увидел мир, и понял, что это скучно прожить жизнь в одном месте, даже с комфортом. Картинка ниже очень хорошо передает мой основной мотив:



Это из детского рассказа про Улитку и Кита:


Начинаем рассказ (занимайте места!)
Про малютку улитку и великана кита.
Вот скала,
Где над морем улитка жила,
И вздыхала она то и дело:
-Как мне все надоело!
Мир огромен, а я тут сижу на скале,
А могла бы уплыть на большом корабле…
Читать дальше →
Total votes 58: ↑47 and ↓11 +36
Comments 127

Information

Rating
5,109-th
Location
Россия
Registered
Activity