Как стать автором
Обновить
18
0
Вадим Лукичёв @dolpheen

Flutter Enthusiast

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

Настолько ли общество прогнило?

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

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

Читать далее
Всего голосов 164: ↑128 и ↓36+124
Комментарии1078

Я год шпионил за собой — что из этого вышло. Простой секрет личной эффективности

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

На стенах храма Аполлона было написано "Познай самого себя", но там нигде не было сказано как это сделать. Предлагаю исправить такое положение дел, да и к тому же разобраться как это поможет стать более продуктивным.

Читать далее
Всего голосов 76: ↑69 и ↓7+83
Комментарии146

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

Время на прочтение15 мин
Количество просмотров84K
Два года назад я сделал вебсайт для своего бизнеса. Сочетание моих собственных нулевых навыков дизайна и приличного шаблона дало на выходе сайт, который выглядел более-менее. Я сказал себе, что если дело пойдет в гору, я найму настоящего дизайнера, чтобы всё смотрелось профессионально.



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

В результате редизайна я получил следующее:
Читать дальше →
Всего голосов 62: ↑61 и ↓1+81
Комментарии222

Паттерны проектирования в Dart

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

В последние годы растет популярность фреймворка для кроссплатформенной разработки приложений Flutter, а вместе с ним вторую жизнь получил и язык программирования Dart. Dart создавался как потенциальная замена JavaScript и мог бы занять нишу, которая сейчас принадлежит TypeScript, но по ряду причин он так и оставался длительное время "одним из проектов Google", который не был оценен ни для использования в web (после транспиляции в JavaScript), ни для создания серверных или десктопных приложений.

При этом компилятор Dart создает оптимизированный высокопроизводительный код для основных операционных систем и может также использоваться для компиляции в другие аппаратные архитектуры (например, для микроконтроллеров) и, в целом, Dart может использоваться как язык общего назначения для создания серверных приложений (Shelf, Aqueduct), устройств умного дома (с целевой платформой ARM и пакетом dart_periphery) и, конечно, десктопных, мобильных и веб-приложений (Flutter).

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

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

Fuchsia OS глазами атакующего

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

Fuchsia — это операционная система общего назначения с открытым исходным кодом, разрабатываемая компанией Google. Эта операционная система построена на базе микроядра Zircon, код которого написан на C++. При проектировании Fuchsia приоритет был отдан безопасности, обновляемости и быстродействию.

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

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

Статический анализатор, который изменит вашу архитектуру

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

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

Читать далее
Всего голосов 20: ↑9 и ↓11+2
Комментарии37

Память в браузерах и в Node.js: ограничения, утечки и нестандартные оптимизации

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

Интро: почему я написал эту статью


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



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


Разрабатывая проект на JavaScript (TypeScript, ClojureScript или каком-то другом языке, транслируемом в JavaScript), мы привыкли создавать объекты, массивы, строки и вообще писать код, как будто память бесконечна. Это не так. Я расскажу о видах проблем с памятью, о том, какие ограничения мы часто забываем и как их можно преодолеть. В ответ браузеры и пользователи скажут вам спасибо.


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

Как стать хорошим техлидом

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

В 2006 году Яндекс и Google приехали в Петербург в Borland, который сокращал команду. Обе компании одновременно открывали в Петербурге свои офисы на его базе. Тогда к нам пришли замечательные ребята. Мы много общались, но больше всего запомнились слова Толи Орлова. Он сказал, что рост Яндекса на тот момент ограничивает только количество лидов, которые бы могли развивать продукты. Что роли техлида и тимлида очень существенны, и часто рост компании зависит только от наличия сильных лидеров. Тогда мне и захотелось узнать, как им стать.

Меня зовут Владимир Горовой. Я был тимлидом, потом перешёл в менеджмент, руководил созданием разных сервисов, в том числе, Яндекс.Путешествий. Сейчас работаю в Яндекс.Вертикалях. У меня есть разный опыт: менеджерский, разработческий и тимлидский. Всем этим и хочу с вами поделиться.

Читать далее
Всего голосов 43: ↑40 и ↓3+47
Комментарии39

Все айтишники делают это, или почему у вас скорее всего отваливается спина

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

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

Читать далее
Всего голосов 56: ↑40 и ↓16+37
Комментарии98

Анатомия асинхронных фреймворков в С++ и других языках

Время на прочтение20 мин
Количество просмотров43K
Привет! В этой статье я расскажу об устройстве асинхронных движков с корутинами и без них. Для начала сосредоточимся не на конкретном движке, а на том, почему во всех популярных языках программирования появились корутины и чем они так хороши. Это может быть интересно не только C++-разработчикам, но и всем, кто занимается разработкой сетевых приложений или интересуется архитектурой современных фреймворков.

Пройдёмся по разным архитектурам построения серверов — от самой простой синхронной к более интересным, посмотрим на типичную архитектуру корутинового движка, а после окунёмся в дебри C++ и взглянем на самое страшное на примере нашего фреймворка userver.

Пишем синхронный сервер


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

void naive_accept() {
  for (;;) {
    auto new_socket = accept(listener);

    std::thread thrd([socket = std::move(new_socket)] {
      auto data = socket.receive();
      process(data);
      socket.send(data);
    });

    thrd.detach();
  }
}
Читать дальше →
Всего голосов 56: ↑53 и ↓3+63
Комментарии32

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

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


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

Разработчики день-деньской смотрят на код. Разве не стоит попытаться усовершенствовать этот опыт, чтобы продуктивность возрастала? Существует большое количество шрифтов, которые служат именно этой цели. К самым популярным относятся Fira Code, Source Code Pro, Jetbrains Mono и Ubuntu Mono, но это только несколько примеров – есть еще множество других.

Вот несколько причин, по которым выбор подходящего шрифта поможет разработчику в работе:
  • Проще замечать баги
  • Быстро находятся переменные и функции
  • Легко опознаются специфичные для программирования символы
  • Снижается нагрузка на глаза

Ну и смотрятся они здорово, а это разве плохо?
Читать дальше →
Всего голосов 33: ↑31 и ↓2+38
Комментарии151

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

Время на прочтение18 мин
Количество просмотров11K
Гость второго выпуска Run Loop — подкаста о тех, кто делает продукты своими собственными руками — Егор Бугаенко. Расспросим его о цели создания своей криптовалюты Zold. Узнаем, почему для ее написания используется Ruby. Поговорим сразу о многом, начиная от распорядка дня и книг, заканчивая провокационными вопросами о качестве работы программистов. И напоследок обсудим, что разработчики, не умеющие участвовать в Open Source проектах, скоро станут никому не нужны.



Ведущие: Илья Царев, Алексей Милеев, Роман Бусыгин.

Илья Царев занимается iOS разработкой в Альфа-банке, выступает на различных митапах и конференциях.

Алексей Милеев разрабатывает Android версию App in the Air, ведет Telegram-канал по Android разработке, и курирует доклады на AppsConf.

Роман Бусыгин — ведущий разработчик Яндекс.музыки для iOS, часто выступает на конференциях и участвует в подкастах.

В гостях: Егор Бугаенко — основатель и CEO компании Zerocracy, разрабатывающей AI-роботов для управления программистами; ООП-фундаменталист; автор «Elegant Objects» — серии книг об объектно-ориентированном программировании; создатель Cactoos, Takes Framework, JCabi и Rultor, а еще блогер и филантроп.
Читать дальше →
Всего голосов 40: ↑31 и ↓9+22
Комментарии1

Холиварный рассказ про линтеры 

Время на прочтение20 мин
Количество просмотров65K
Все мы пишем код. Много кода. Само собой, бывают ошибки. Иногда это просто кривой код, а иногда цена ошибки — взорванный космический корабль. Конечно, никто не делает намеренных косяков, все в меру возможностей стараются следить за качеством, но без инструментов статического анализа вряд ли можно быть уверенным, что всё идеально.

Линтеры помогают приводить код к единому стилю и избегать ошибок. Правда, только в том случае, если вы готовы к страданиям, а не отмахиваетесь в конце концов «pylint: disable», только чтобы оно отстало. Какой должен быть линтер, и почему таки не обойтись Pylint, знает Никита Соболев (sobolevn), который понимает и любит линтеры настолько, что даже свою компанию назвал так, чтобы их не расстраивать — wemake.services.

image

Ниже текстовая версия доклада на Moscow Python Conf++ про линтеры, как их делать правильно и как не нужно. В выступлении было много интерактива, онлайна и общения с аудиторией. Спикер по ходу дела проводил опросы и старался переубедить слушателей: смотрел на тренд, и как в дебатах, пытался выровнять соотношение и поменять общественное мнение. Какая-то часть с опросами попала в расшифровку, но не вся, поэтому для полноты картины прилагается видео.
Всего голосов 30: ↑26 и ↓4+22
Комментарии19

Книга «Элегантные объекты. Java Edition»

Время на прочтение21 мин
Количество просмотров34K
imageПривет, Хаброжители! Эта книга всерьез пересматривает суть и принципы объектно-ориентированного программирования (ООП) и может быть метафорически названа «ООП Лобачевского». Егор Бугаенко, разработчик с 20-летним стажем, критически анализирует догмы ООП и предлагает взглянуть на эту парадигму совершенно по-новому. Так, он клеймит статические методы, геттеры, сеттеры, изменяемые методы, считая, что это — зло. Для начинающего программиста этот томик может стать просветлением или шоком, а для опытного является обязательным чтением.

Отрывок «Не используйте статические методы»


Ах, статические методы… Одна из моих любимых тем. Мне понадобилось несколько лет, чтобы осознать, насколько важна эта проблема. Теперь я сожалею обо всем том времени, которое потратил на написание процедурного, а не объектно-ориентированного программного обеспечения. Я был слеп, но теперь прозрел. Статические методы — настолько же большая, если не еще большая проблема в ООП, чем наличие константы NULL. Статических методов в принципе не должно было быть в Java, да и в других объектно-ориентированных языках, но, увы, они там есть. Мы не должны знать о таких вещах, как ключевое слово static в Java, но, увы, вынуждены.. Я не знаю, кто именно привнес их в Java, но они — чистейшее зло.. Статические методы, а не авторы этой возможности. Я надеюсь.
Читать дальше →
Всего голосов 37: ↑20 и ↓17+3
Комментарии118

Проблема циклических зависимостей при инициализации типов

Время на прочтение10 мин
Количество просмотров21K
Некоторые из читателей, которые когда-либо сталкивались с проблемой, описанной в названии статьи, наверняка оставались на работе до поздна и проводили много часов в отладчике. Для других это может быть не более чем игрой слов и жаргонными словечками. Однако, давайте отойдем от жаргона в сторону и раскроем понятия:
  • Инициализация типа: это код, который выполняется чтобы проинициализировать все статические переменные класса и выполнить статический конструктор;
  • Циклическая зависимость: два кусочка кода, которые зависят друг от друга. В нашем случае это два класса, инициализация типов которых требует уже проинициализированного типа другого класса.

Ну и небольшой пример, чтобы показать, о чем идет речь:
using System; 
	
class Test 
{     
    static void Main() 
    { 
        Console.WriteLine(First.Beta); 
    } 
} 
	
class First 
{ 
    public static readonly int Alpha = 5; 
    public static readonly int Beta = Second.Gamma; 
} 
	
class Second 
{ 
    public static readonly int Gamma = First.Alpha; 
}


Результатом выполнения этого кода будет 0
Читать дальше →
Всего голосов 37: ↑34 и ↓3+31
Комментарии20

Бенчмарк реальных Android-проектов на современных MacBook

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

Правильные тесты скорости сборки реальных Android-проектов на семи MacBook различных поколений: с Intel i7, i9 и всех вариациях Apple M1 в разных размерах ноутбуков. Результаты не такие однозначные, как могли бы быть...

Узнать результаты
Всего голосов 23: ↑19 и ↓4+17
Комментарии28

Как ускорить автотесты

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

Подбираем эффективную конфигурацию под ваши нужды

Всем привет! Меня зовут Иван Левиков, я старший инженер по тестированию.

ВКонтакте развиваю и ускоряю автотесты, анализирую и улучшаю инфраструктуру, создаю новые решения.

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

Рассмотрим самые популярные места для запуска автотестов: 
• облачные решения;
• решения на физических девайсах. 

Disclaimer. В статье рассмотрим конфигурацию, которую вы можете внедрить в свои проекты. При этом помните про несколько факторов:

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

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

Микросервисы, Apache Kafka и Domain-Driven Design

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

Почему Apache Kafka стала стандартом и основой архитектуры микросервисов. Как Kafka не только заменяет другое промежуточное ПО, но и позволяет создавать сами микросервисы с помощью DDD и нативных API Kafka: Kafka Streams, ksqlDB и Kafka Connect.

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

Мой опыт технического собеседования: как не превратить его в экзамен и найти профпригодного сотрудника

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

Привет, Хабр! Меня зовут Леонид Титов, я бэкенд разработчик в #CloudMTS. Так уж сложилось, что я не только пишу код, но и иногда собеседую кандидатов. Мне нравится процесс, и, думаю, у меня это получается.

Начал я этим заниматься ещё на предыдущем месте работы, где мы с тимлидом собирали новую команду. С тех пор прошло уже N лет, практика продолжилась, и после очередного собеседования я решил упорядочить свои знания. Кто-то считает, что от собеседований вообще толку нет, а кто-то наоборот (не будем показывать пальцем) проводит их в 3-5 раундов. Я уверен, что собеседования нужны, но важно четко понимать, зачем именно.

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

Еще я поделюсь неожиданными впечатлениями от ситуации, когда оказался «по ту сторону», лайфхаками, фейлами и неплохо зарекомендовавшими себя практиками. Про soft skills тут ничего не будет — это отдельная важная тема. Прежде всего мы затронем вопрос профпригодности, определения ее наличия или отсутствия. Во второй половине статьи приведу собственный список вопросов, переведенный на русский, с комментариями.
Читать дальше →
Всего голосов 47: ↑35 и ↓12+36
Комментарии68

Информация

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