Как стать автором
Обновить
6
-4
Danila Fominykh @dancheg

0xFC04D07F75B663FC

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

Синдром рефакторинга

Время на прочтение5 мин
Количество просмотров9.4K
image
Бытует мнение, что программные системы, будучи объектом не совсем материальным, не поддаются старению. И если говорить о старении физическом, то действительно, шансы на то, что буковка “o” в имени класса вдруг от старости ссохнется и превратится в букву “c” – действительно малы. Но вместо старения физического, программные системы стареют морально.  Со временем накапливается груз ошибок за счет неточностей в исходных требованиях, непонимания требований самим заказчиком, архитектурных ошибок или неудачных компромиссных решений; да и ошибки поменьше, типа слабопонятного кода, его высокой связности, отсутствия юнит-тестов и комментариев делают свое черное дело. Все это приводит к накоплению технического долга (о котором шла речь в прошлый раз), из-за которого при добавлении новой возможности в систему приходиться платить «проценты» в виде более высокой стоимости реализации и более низкого качества получаемого результата.
Читать дальше →
Всего голосов 59: ↑53 и ↓6+47
Комментарии40

Рефакторинг программы на Go: ускорение в 23 раза

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


Привет! Меня зовут Марко, я работаю в Badoo в отделе «Платформы». У нас довольно много всего написано на Go, и зачастую это критичные к производительности системы. Именно поэтому сегодня я предлагаю вашему вниманию перевод статьи, которая мне очень понравилась и, я уверен, будет вам очень полезна. Автор пошагово показывает, как он подходил к проблемам производительности и как их решал. В том числе вы познакомитесь с богатым инструментарием, доступным в Go для такой работы. Приятного чтения!

Несколько недель назад я прочитал статью «Хороший код против плохого кода в Go», где автор шаг за шагом демонстрирует рефакторинг реального приложения, решающего реальные бизнес-задачи. Она сфокусирована на превращении «плохого кода» в «хороший код»: более идиоматичный, более понятный, полноценно использующий специфику языка Go. Но автор также заявлял о важности производительности рассматриваемого приложения. Во мне взыграло любопытство: давайте попробуем её ускорить!
Всего голосов 94: ↑93 и ↓1+92
Комментарии26

Делаем «router-on-a-stick» в linux namespaces

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров6.5K


Не буду томить вас долгим вступлением. Ниже подробное описание этой реализации.

Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Комментарии5

Настройка производительности диска и памяти в Linux

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров13K

В отличие от таких операционных систем как HPUX (dbc_min_pct, dbc_max_pct) или AIX (minperm%, maxperm%), в Linux нет возможности настраивать размер кэша страниц, читаемых с диска (страничный кэш, page cache). Под страничный кэш Linux использует всю доступную память. Размер страничного кэша можно увидеть в /proc/meminfo в параметре "Cached". В /proc/meminfo есть также значение "Buffers", которое часто путают с размером страничного кэша. "Buffers" — это память, содержащая сырые дисковые данные (raw disk data) и выступающая в роли промежуточного буфера между процессами, ядром и диском.

В этой статье рассмотрим, как Linux работает с памятью, и, в частности, со страничным кэшем, а также исследуем, как доступный объем памяти влияет на производительность буферизованного ввода-вывода (buffered IO).

Читать далее
Всего голосов 28: ↑27 и ↓1+26
Комментарии4

10 рекомендаций по VS Code для повышения продуктивности

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров45K
Visual Studio Code остаётся наиболее предпочтительной IDE среди разработчиков. Причём этот редактор всё чаще используют именно начинающие программисты. Источник: survey.stackoverflow.co/2023

А вы знали, что 73% разработчиков по всему миру используют один редактор кода? Так и есть. Результаты проведённого в 2023 году опроса Stack Overflow показали, что VS Code является самой популярной средой разработки.

И мы все знаем почему — он очень крут!

Но в полной ли мере мы задействуем его потенциал? Текущая статья будет посвящена знакомству с некоторыми интересными возможностями VS Code, способными повысить продуктивность работы. К ним, помимо прочих, относятся локальный контроль исходного кода, анимация курсора и быстрое удаление строк. Использование этих возможностей поможет ускорить реализацию проектов разработки.
Читать дальше →
Всего голосов 103: ↑95 и ↓8+87
Комментарии83

Мы живем в компьютерной симуляции. Мнение программиста (2024)

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров38K

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

В этой статье:

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

Обсудим квантовую запутанность (оптимизация вычислений).

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

Обсудим возможность существования мультивселенной и параллельных миров.

Также поговорим про эффект Манделы и Ложные воспоминания, что поговорит о том, что прошлое можно менять при определенных условиях.

Читать далее
Всего голосов 94: ↑57 и ↓37+20
Комментарии289

Почему открытые прошивки важны для безопасности

Время на прочтение6 мин
Количество просмотров8K
Недавно на GoTo Chicago я читала лекцию на эту тему и подумала, что будет неплохо написать статью с выводами. Этот пост посвящён тому, почему прошивки с открытым исходным кодом важны для безопасности.

Уровни привилегий


В типичном стеке у вас различные уровни привилегий.

  • Кольцо 3. Приложения: минимальные привилегии, за исключением песочницы в пользовательском пространстве, которая ещё больше ограничена.
  • Кольцо 0. Ядро: ядро операционной системы, в случае ОС с открытым исходным кодом вы видите его код.
  • Кольцо −1. Гипервизор: мониторинг виртуальных машин (VMM), создаёт и запускает виртуальные машины. В гипервизорах с открытым исходным кодом, таких как Xen, KVM, bhyve и другие, вы видите код.
  • Кольцо −2. Режим управления системой (SMM), ядро UEFI: проприетарный код, подробнее об этом ниже.
  • Кольцо −3. Движок управления: проприетарный код, подробнее об этом ниже.

Отрицательные кольца указывают на уровни с привилегиями больше, чем у нулевого.
Всего голосов 30: ↑29 и ↓1+28
Комментарии10

Каким образом спецслужбы отслеживают пользователей мессенджеров (без доступа к устройству и ключам)

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров55K

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

Читать далее
Всего голосов 69: ↑67 и ↓2+65
Комментарии177

Harmony, гармония или что там с безопасностью в HarmonyOS

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

Современный рынок мобильных операционных систем поделен на два сегмента. К одному относятся аппараты на базе Android, к другому — iPhone. Однако в 2019-м году после некоторых событий компания Huawei представила свою операционную систему Harmony OS.

Что такое Harmony OS

Разработанная Huawei операционная система взаимодействует с несколькими умными устройствами для создания своей экосистемы. На данный момент она поддерживает следующие устройства:

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

Все о фабричном конструкторе в Dart

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров5.3K

Изучив классы фреймворка, пакеты сторонних разработчиков или документацию Dart / Flutter, вы, натыкались на ключевое слово factory и задавались вопросом, что это значит.

В этой статье мы собираемся прояснить:

Значение ключевого слова

Когда вам следует его использовать

Разница между factory и порождающим конструктором

Различия между factory и static

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

Генетика происхождения. Гаплогруппы

Время на прочтение5 мин
Количество просмотров34K
Происхождение — один из самых интересных разделов генетического теста Атлас. Из него можно узнать свою гаплогруппу, популяционный состав и насколько ты неандерталец. В серии статей мы решили рассказать о генетике происхождения подробнее: как эту область исследуют, какие данные мы можем получить и что они означают. В первой статье рассказываем про гаплогруппы.


Модель Земли с миграцией предков из личного кабинета Атласа
Читать дальше →
Всего голосов 18: ↑13 и ↓5+8
Комментарии18

Загрузка и сборка AOSP

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

Решил поделиться своей инструкцией как собрать AOSP (Android Open Source Project). Эта инструкция будет полезна тем кто хочет посмотреть что-же внутри Android и возможно заняться системной разработкой. В любом случаи эти знания полезны для понимания самого Android, как раз для этого и решил собрать AOSP.

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

Актуальные подходы к формированию технологических карт в 2023 году

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

По данным «Коммерсанта», под влиянием западных санкций промышленное производство в России снизилось почти на 4% — предприятия столкнулись с дефицитом импортных компонентов, нарушились привычные партнерские связи и логистические цепочки. Если верить прогнозам инвестгруппы «Финам», отрицательная тенденция в российской промышленности в ближайшее время сохранится. Рост цен на комплектующие, увеличение затрат на транспортировку, дефицит квалифицированных кадров — «долгоиграющие» факторы. Если вашему предприятию эти трудности знакомы не понаслышке, самый верный путь — заняться оптимизацией расходов на техобслуживание и ремонт оборудования. Сегодня мы хотим поговорить о правильном формировании технологических карт, от которых напрямую зависят затраты на ТОиР. 

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

Легенда о Фреймворке Всевластия

Время на прочтение11 мин
Количество просмотров13K
В последнее время набирает популярность тренд «исчезающих фреймворков», локомотивом которого, без сомнения, можно считать SvelteJS — buildtime-фреймворк и компилятор в ванильный javascript.

Несмотря на то, что концептуально Svelte весьма прост, а в использовании еще проще, многие разработчики задаются вопросом, в чем же killer-фича данного фреймворка, да и подхода в целом? Почему это не «yet another javascript framework»?

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

Давайте разберемся, но сначала я расскажу вам одну легенду…


Читать дальше →
Всего голосов 33: ↑24 и ↓9+15
Комментарии12

Go Code Generation from OpenAPI spec

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

OpenAPI specification


One of the nicest features of Go is the power of code generation. go generate command serves as a Swish knife allowing you to generate enums, mocks and stubs. In this article, we will employ this feature to generate a Go code from OpenAPI specification. OpenAPI specification is a modern industrial standard for REST API. This standard has fantastic tooling support and allows you to conveniently render and validate the spec. We are going to befriend the power of Go code generation with the elegance and clarity of the OpenAPI specification. In this way, you don't have to manually update the Go boilerplate code after every change in the spec. You also ensure that your docs and your code are a single entity, as your code is being begotten from the docs.


Let's start dead-simple: we have a service that accepts order requests. Let's declare endpoint order/10045234 that accepts PUT requests, where 10045234 is an ID of a particular order. We expect to receive an order as a JSON payload in the following format.


    {"item":  "Tea Table Green", "price":  106}

How can describe this endpoint in the OpenAPI spec?

Read more →
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

В поисках gRPC-шлюза

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

Дано:

несколько gRPC-сервисов, каждый слушает свой порт.

сервисы могут доверенно подключаться друг к другу, для аутентификации используется Mutual TLS.

некоторые процедуры предназначены только для внутреннего пользования, доступ извне к ним должен быть ограничен

Найти:

единую точку входа для API (API Gateway) для gRPC, HTTP/2.

Дисклеймер: решение так и не найдено, зато проведено исследование gRPC-отражения (reflection). Много ссылок.

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

Rest шлюз для gRPC сервисов на го — gRPC-gateway

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

Всем привет!

Данная статья является гайдом по построению REST прокси поверх существующих gRPC сервисов. После прочтения данного материала можно будет вызывать любой из существующих gRPC сервисов используя стандартный REST API, а так же получить полную документацию в swagger формате.

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

Анонс Dart 2.0: Оптимизированный для клиентской разработки

Время на прочтение5 мин
Количество просмотров19K
Сегодня мы анонсируем Dart 2, перезагрузку языка, которая более полно отражает наше видение Dart как уникально оптимизированного языка для клиентской разработки на Web и мобильных платформах.

Dash - официальный маскот языка
Dash — официальный маскот языка
Читать дальше →
Всего голосов 28: ↑25 и ↓3+22
Комментарии27

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность