Как стать автором
Обновить
-8
0.1

Пользователь

Отправить сообщение

PCIExpress 1.0 2.5GT/s analyzer на базе ПЛИС своими руками

Время на прочтение12 мин
Количество просмотров8.8K

На работе я занимаюсь созданием PCIExpress устройств на ПЛИС. Некоторые из ПЛИС имеют встроенное PCIExpress ядро, позволяющее работать с этим интерфейсом на уровне пользовательского приложения. ПЛИС серии ECP5UM фирмы Lattice использует Soft-IP Core для реализации протокола, написанный на языке HDL, а в микросхему лишь встроен блок, отвечающий за работу физического уровня. Мне пришла в голову идея попробовать сделать PCIExpress анализатор на базе этой микросхемы.

Цены на профессиональные анализаторы не доступны простому разработчику, да и зачастую неподъёмны даже для небольших фирм. Хотя для целей диагностики и обучения возможно создание бюджетного прибора, который хоть и будет уступать профессиональному устройству, но при этом будет выполнять основные функции анализатора, удовлетворяющие большинству потребностией в вопросах отладки протокола.

В данной статье я предлагаю описание первого устройства, созданного для проверки концепции. В ней содержится краткое описание архитектуры PCIExpress, общая идея проекта, результаты реализации и тестирования первого прототипа.

Читать далее
Всего голосов 60: ↑60 и ↓0+60
Комментарии14

11 советов, как говорить по-английски свободно и уверенно, чтобы преодолеть языковой барьер

Время на прочтение5 мин
Количество просмотров39K

Молчи – за умного сойдешь! Эта установка крепко сидит в голове людей, прошедших советскую школу обучения. Понимание, которое застряло внутри, что не нужно высовываться, если ты не уверен на 250% в том, что  хочешь сказать. В учебе это очень вредный совет, особенно в английском. 

Что же нам поможет заговорить на английском?

Читать далее
Всего голосов 14: ↑11 и ↓3+11
Комментарии6

Don’t be cringe — не будь занудой

Время на прочтение14 мин
Количество просмотров31K

По долгу работы мне приходится много общаться с иностранными разработчиками. И к сожалению, каждый раз когда в коллективе появляется новый разработчик из России, мне приходится слушать всякие “Oh no, another crazy Russki is here”.

Но, что бы они там не говорили, все прекрасно понимают, что русские программисты — одни из самых востребованных на рынке. Так что иностранные коллеги просто мирятся с Crazy Russians. Более того, последние 10 лет я наблюдал, как команды становились всё более и более разношёрстными. Бельгийцы, французы, немцы, австралийцы постепенно вливаются в коллективы.

Но, я считаю, что ситуацию не стоит усложнять. Под катом вы найдёте советы и личный опыт по поводу того, как избежать смешных ситуаций и облегчить себе жизнь, работая удалённо.
Читать дальше →
Всего голосов 83: ↑73 и ↓10+96
Комментарии162

Как найти удаленную работу в США с прицелом на релокацию: описания виз, списки ~1000 компаний, полезные инструменты

Время на прочтение5 мин
Количество просмотров33K

Поиск работы в американских компаниях, особенно с прицелом на будущий переезд – это всегда актуальная тема. Я сам живу в США уже более пяти лет, прошел все стадии профессиональной эмиграции, запустил здесь не один бизнес и нанял немало людей. 

В этой статье я собрал материалы для тех, кто задумывается о поиске сначала удаленной работы в США, а затем и о переезде. В тексте есть описания виз, списки компаний, нанимающих на remote, инструменты для подготовки к собеседованиям. Надеюсь, будет полезно!

Читать далее
Всего голосов 32: ↑18 и ↓14+14
Комментарии11

Go: как программа восстанавливается после паники?

Время на прочтение3 мин
Количество просмотров7.1K

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

Читать далее
Всего голосов 6: ↑4 и ↓2+2
Комментарии0

Доводим распределённые действия до конца с использованием простейшего паттерна Saga

Время на прочтение11 мин
Количество просмотров23K

Привет! Меня зовут Иван, я занимаюсь бэкенд-разработкой в Ozon: пишу микросервисы на Go для личного кабинета продавца. В прошлом году мы запустили новый процесс регистрации продавцов, в котором задействовано сразу несколько микросервисов. В нём стало больше шагов, при этом каждый из них выполняется в разных микросервисах. Поэтому мы задались вопросом: «А что будет, если один из шагов упадёт?».


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


image

Читать дальше →
Всего голосов 47: ↑44 и ↓3+53
Комментарии25

Сборка собственного RPM-пакета, содержащего простую Go-программу

Время на прочтение5 мин
Количество просмотров17K
Процесс развёртывания программ обычно состоит из множества этапов. Некоторые из этих этапов могут представлять собой довольно-таки сложные последовательности действий. В наши дни имеется широкое разнообразие инструментов, позволяющих создавать описания процессов развёртывания программ, которые можно воспроизводить на разных системах.

А именно, в мире Linux уже довольно давно существуют менеджеры пакетов. Например — это RPM и YUM. Они упрощают установку, обновление и удаление программ в Linux-системах. Собственно говоря, в этой статье я хочу рассказать о том, как создать собственный простой RPM-пакет, хочу показать, что это совсем несложно.



Надо отметить, что во многих организациях менеджеры пакетов используются лишь для установки программ, предлагаемых разработчиком используемого этими организациями дистрибутива Linux. Для управления развёртываниями собственных программ менеджеры пакетов не применяются. Тому, кто попытается собрать свой первый RPM-пакет, может показаться, что это не так уж и просто. Но обычно тот, кто учится создавать такие пакеты, тратит время с пользой. Дело в том, что соответствующие знания способны помочь ему в деле оптимизации его рабочих процессов. Здесь мы рассмотрим процесс создания RPM-пакета, содержащего простую программу, написанную на Go.
Читать дальше →
Всего голосов 26: ↑25 и ↓1+34
Комментарии3

PostgreSQL Antipatterns: «слишком много золота»

Время на прочтение6 мин
Количество просмотров13K

Иногда мы пишем SQL-запросы, мало задумываясь над тем фактом, что сначала они должны быть по сети как-то доставлены до сервера, а затем их результат - обратно в клиентское приложение. Если при этом на пути до сервера присутствует еще и пулер соединений типа pgbouncer, дополнительно "перекладывающий" байты между входящими и исходящими коннектами, ситуация становится еще тяжелее...

Поэтому сегодня рассмотрим некоторые типичные ситуации, в которых разработчики иногда принимают не самые оптимальные решения, гоняя по сети мегабайты трафика при общении с сервером PostgreSQL - а заодно посмотрим, как можно увидеть такую ситуацию в плане с помощью explain.tensor.ru и подумаем над вариантами, как сделать подобное взаимодействие более эффективным.

Читать далее
Всего голосов 23: ↑22 и ↓1+27
Комментарии6

Что такое Core Scheduling и кому он будет полезен?

Время на прочтение9 мин
Количество просмотров14K

Не за горами выход новой версии ядра Linux 5.14. За последние несколько лет это обновление ядра является самым многообещающим и одно из самых крупных. Была улучшена производительность, исправлены ошибки, добавлен новый функционал. Одной из новых функций ядра стал Core Scheduling, которому посвящена наша статья. Это нововведение горячо обсуждали в интернете последние несколько лет, и наконец-то оно было принято в ядро Linux 5.14.

Если вы работаете с Linux или занимаетесь информационной безопасностью, вам интересны новые технологии, то добро пожаловать под кат.
Узнать подробности
Всего голосов 39: ↑38 и ↓1+55
Комментарии26

Почему PostgreSQL тормозит: индексы и корреляция данных

Время на прочтение12 мин
Количество просмотров36K

"Хочешь ускорить запросы, построй индекс" – классический первый шаг по увеличению производительности в PostgreSQL. Вот только на практике можно встретить ситуацию, когда индексы в PostgreSQL есть, но тормоза никуда не делись. Не все индексы являются эффективными. Одна из возможных причин тормозов индексов – это отсутствие корреляции данных. Давайте поговорим о пенальти на производительность, которое дает расположение данных: почему это происходит и как это можно предотвратить.

Ускорить свой PostgreSQL
Всего голосов 46: ↑46 и ↓0+46
Комментарии29

Хождения по собеседованиям, или Как самоучке полтора года искать работу в ИТ

Время на прочтение7 мин
Количество просмотров75K

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

Знаете, есть такие особые признаки, известные всем, когда точно понимаешь, что надо «линять» с текущей работы, ибо уже вилы. Как раз такое приключилось у меня с прошлой работой. В совсем уж подробности вдаваться не буду, но немного все же порефлексирую на тему своих скитаний по рынку труда. Опустим, что происходило уже на прошлой работе (спойлер: новое место работы я нашел), так как меня смело можно укорить в том, что я точно задержался, постоянно откладывая уход, и что все то, что происходило там, — вымысел и быть не может. Но, к сожалению, происходило. В общем не будем о плохом. Как написал А. С. Пушкин в стихотворении "Если жизнь тебя обманет", "Что пройдет, то будет мило".

Читать далее
Всего голосов 62: ↑56 и ↓6+64
Комментарии241

Чиним проблемы нагрузок в Go с помощью настройки пула HTTP-соединений

Время на прочтение5 мин
Количество просмотров11K

- Ребята, кажется, вы таймаутите. Вот трейс, на котором видно, что мы не дождались от вас ответа за 2 секунды. 

- Ничего подобного, у нас все норм — мы за 200 миллисекунд отвечаем в 99% запросов. А вот вы по какой-то причине часто преждевременно обрываете соединение. 

Такой разговор однажды произошёл у нас в Ozon между моей командой личного кабинета продавца и коллегами, которые пишут сервис аутентификации. Причина проблемы оказалась в дефолтных настройках Go для пула HTTP-соединений. Как так вышло, как мы обнаружили проблему и как исправлять подобные ситуации в микросервисах на Go – об этом моя сегодняшняя история. 

Так что же там было?
Всего голосов 19: ↑13 и ↓6+12
Комментарии15

Embedded Linux в двух словах. Первое

Время на прочтение9 мин
Количество просмотров62K

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

Платформой послужит плата BeagleBone Black с процессором производства Техасских Инструментов AM3358 и ядром Arm Cortex-A8, и, чтобы не плодить мигающие светодиодами мануалы, основной задачей устройства будет отправка смайлов в топовый чат, широко известного в узких кругах, сайта,  в соответствии с командами от смайл-пульта. Впрочем, без мигания светодиодами тоже не обошлось.

Читать далее
Всего голосов 34: ↑32 и ↓2+43
Комментарии15

Перехват и обработка событий в файловой системе Linux

Время на прочтение11 мин
Количество просмотров7.9K

В предыдущей статье мы рассмотрели сборку и установку пакета на Linux системах, в которой упомянули про Linux Kernel Module (LKM) и обещали раскрыть позднее подробности о пути к нему и его создании. Ну что ж, настало его время. LKM – мы выбираем тебя.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии8

Rust crashcourse. Правило трёх — параметры, итераторы и замыкания

Время на прочтение28 мин
Количество просмотров8.4K
Ниже представлен перевод одной из частей серии статей Rust Crash Course от Майкла Сноймана, которая посвящена механизмам передачи параметров, итераторам и замыканиям относительно того, как передаётся владение, и соотносится с мутабельностью и временами жизни.

Так же постарался переводить максимально близко к авторскому стилю, но сократил немного междомедий и восклицаний, не сильно значимых для смысла.
Читать дальше →
Всего голосов 21: ↑20 и ↓1+28
Комментарии4

Systemd для продолжающих. Part 2 — Триггеры на различные события

Время на прочтение5 мин
Количество просмотров17K

Продолжаем цикл популярного балета, под названием «Systemd для продолжающих». В этой части, являющейся логическим продолжением предыдущей, поговорим о различных триггерах не связанных со временем. Эта часть будет не такой объёмной, но, не менее интересной. Вперёд!

Попробовать стащить сыр!
Всего голосов 48: ↑48 и ↓0+48
Комментарии31

Лучшие практики при написании безопасного Dockerfile

Время на прочтение9 мин
Количество просмотров31K

В данной статье мы рассмотрим небезопасные варианты написания собственного Dockerfile, а также лучшие практики, включая работу с секретами и встраивание инструментов статического анализа. Тем не менее для написания безопасного Dockerfile наличия документа с лучшими практиками мало. В первую очередь требуется организовать культуру написания кода. К ней, например, относятся формализация и контроль процесса использования сторонних компонентов, организация собственных Software Bill-of-Materials (SBOM), выстраивание принципов при написании собственных базовых образов, согласованное использование безопасных функций, и так далее. В данном случае отправной точкой для организации процессов может служить модель оценки зрелости BSIMM. Однако в этой статьей пойдет речь именно о технических аспектах.

Читать далее
Всего голосов 64: ↑62 и ↓2+73
Комментарии20

Давайте напишем командную оболочку Linux

Время на прочтение11 мин
Количество просмотров11K

Всем привет!

Хочу поделиться своим опытом написания собственной командной оболочки Linux используя Posix API. Усаживайтесь поудобнее.

Что должен уметь наша командная оболочка?

1. Запуск процессов в foreground и background режиме

2. Завершение background процессов

3. Поддержка перемещения по директориям

Читать далее
Всего голосов 21: ↑18 и ↓3+26
Комментарии13

Возможности SQLite, которые вы могли пропустить

Время на прочтение8 мин
Количество просмотров42K
Если вы используете SQLite, но не следите за его развитием, то возможно некоторые вещи, позволяющие сделать код проще, а запросы быстрее, прошли незамеченными. Под катом я постарался перечислить наиболее важные из них.
Читать дальше →
Всего голосов 76: ↑76 и ↓0+76
Комментарии35

Монорепо: жизнь до и после

Время на прочтение9 мин
Количество просмотров27K
Это история о том, почему в одном из направлений «Юлы» отказались от практики отдельных репозиториев на микросервисы и внутренние библиотеки, перейдя на монорепозиторий, и что из этого вышло. О проблемах, с которыми столкнулись в компании, и тех, которые получилось решить при помощи этого переезда, рассказал на конференции Golang Live 2020 руководитель b2b-разработки «Юлы» Валентин Дубровский.


Читать дальше →
Всего голосов 16: ↑13 и ↓3+14
Комментарии14

Информация

В рейтинге
3 918-й
Зарегистрирован
Активность