Pull to refresh
17
0
Юрий Павлов @sparhawk

Ведущий разработчик Java

Send message

Переносим философию Unix в 21 век

Reading time5 min
Views23K

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

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

Делаем из Power Mac G4 универсальный и дешевый ретро-компьютер

Reading time7 min
Views24K
Ретрогейминг на ПК. С чем в первую очередь это ассоциируется? Конечно же с этими огромными кинескопными мониторами и неизменно стоящими рядом системниками на которых в подавляющем большинстве стояла какая-нибудь Windows 98. Но существовал особый пласт компьютеров от фирмы Apple, которые в странах бывшего СНГ видели единицы, а уж про игры на них вообще не стоит и заикаться. Так что, давайте разбираться, возможен ли ретрогейминг на старом компьютере от Apple.
Сразу хочу предупредить, что это своего рода эксперимент, а не руководство к эксплуатации. Да, библиотека игр на Mac поскуднее будет, но она немальнькая. И в Mac Os есть свои приколы и баги, но не будем об этом.

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

Reading time6 min
Views13K

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

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

Читать далее

Использование Nginx FastCGI Cache

Reading time9 min
Views29K

FastCGI Cache — это система кэширования данных реализованая на уровне HTTP-сервера Nginx.

Преимущество FastCGI Cache заключается в том, что Nginx вернёт закешированный ответ пользователю сразу, как только получит запрос, при этом слой приложения не будет вовсе обрабатывать поступивший HTTP-запрос, если он имеется в кэше Nginx. 

Использование FastCGI Cache — отличный способ снизить нагрузку на вашу систему.

Если на вашем сайте есть страницы, которые изменяются редко или задержка обновления информации на некоторое время не критична, то FastCGI Cache именно то, что нужно.

Читать далее

Что недоговаривают Тинькофф Инвестиции. Вытаскиваем все данные по портфелю через API в большую таблицу Excel

Reading time11 min
Views246K

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

Собираем все данные по портфелю и по всем операциям через Tinkoff API.

Строим огромную Excel таблицу со всеми данными.

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

Пытаемся понять, что нам с этим делать.

Read more

Ubuntu 16.04: Получаем обновления безопасности после окончания основной поддержки

Reading time1 min
Views12K

В апреле 2021 у операционной системы Ubuntu 16.04 закончилась стадия основной поддержки https://wiki.ubuntu.com/Releases и тем самым обозначило прекращение выхода обновлений для неё.

Данный релиз был выпущен в апреле 2016 года и поддерживался до апреля 2021 года.

Однако, пользователи Ubuntu 16.04 могут получить патчи безопасности для своей системы до апреля 2024 года.

Для этого используется подключение к программе Ubuntu Advantage и на один аккаунт можно добавить 3 машины (бесплатно для персонального использования) получив ключ. Все что необходимо для этого - это Ubuntu One аккаунт.

Для коммерческого использования предлагается платная подписка, цены варьируют от $25 за desktop, $75 за виртуальный сервер и $225 за физический сервер в год и выше, более дорогие цены подразумевают не только обновления, но и получение технической поддержки через тикеты и по телефону.

В одном из последних обновлений Ubuntu 16.04 в систему устанавливается утилита ua с помощью которой происходит подключение к сервису

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

sudo ua attach ваш_токен

Проверить статус подключения можно командой

sudo ua status

Тем самым вы будете получать обновления еще три года до апреля 2024. Также следует отметить, что если вы являетесь Ubuntu community member, то вы сможете подключить к сервису до 50 машин.

Следует отметить, что для релизов, которые еще актуальны (ubuntu 18.04, 20.04) существует сервис livepatch и с его помощью возможно получение и установка патчей безопасности ядра без перезагрузки системы. Условия использования сервиса такие же - 3 машины бесплатно (и до 50 машин для community members).

Читать далее

Как без усталости кодить по восемь с лишним часов

Reading time6 min
Views88K


Всю свою жизнь я писал код неправильно.

Я думал, что достаточно просто сесть за стол, открыть ноутбук, выбрать задачу из моего списка to-do и кодить, пока не устану.

Но на самом деле такой стиль работы убивал мой уровень продуктивности спустя 2–4 часа написания кода. Я ощущал себя таким уставшим, что мне не хотелось ничего, кроме как других задач, требующих низких затрат энергии (например, code review).

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

Что же изменилось?

Мой подход к работе.

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

В статье я расскажу, как этого достиг.
Читать дальше →

Сила композиции

Reading time20 min
Views19K


Функциональное программирование может отпугивать сложностью и непрактичностью: «Я далек от всех этих монад, пишу на обычном C#, в докладе про функциональщину ничего не пойму. А если даже напрягусь и пойму, где мне потом это применять?»


Но когда объясняет Скотт Влашин, все совершенно не так: его доклад о композиции с конференции DotNext 2019 Moscow — пример того, как можно доносить функциональные идеи простыми словами. Он за час перешел от бананов к монадам так, что второе кажется немногим сложнее первого. А в конце объяснил, почему осмыслить композицию полезно даже тем, кто не собирается покидать мир ООП. Примеры кода в докладе как на F#, так и на C#.


Уже завтра начнется новый DotNext, где я помогу Скотту выступить с другим докладом, а пока что публикую перевод его выступления про композицию. Далее повествование будет от лица Скотта.

Читать дальше →

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

Reading time11 min
Views37K

JPA безусловно самая распространённая технология работы с базами данных на платформе Java. Но она же и наименее пригодна для разработки быстрых и поддерживаемых систем. В этой статье я расскажу почему JPA лучше не использовать в продакшене и что можно использовать вместо неё.

Читать далее

Свод правил по работе с целыми числами в C/C++

Reading time11 min
Views60K

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

Apache Kafka: основы технологии

Reading time9 min
Views518K

У Kafka есть множество способов применения, и у каждого способа есть свои особенности. В этой статье разберём, чем Kafka отличается от популярных систем обмена сообщениями; рассмотрим, как Kafka хранит данные и обеспечивает гарантию сохранности; поймём, как записываются и читаются данные.


Статья подготовлена на основе открытого занятия из видеокурса по Apache Kafka. Авторы — Анатолий Солдатов, Lead Engineer в Авито, и Александр Миронов, Infrastructure Engineer в Stripe. Базовые темы курса доступны на Youtube.

Читать дальше →

Микросервисы: от CRUD до Native Image. Часть вторая

Reading time9 min
Views6.5K

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

Эта половина статьи сосредоточится на опыте нашей команды BellSoft. Поговорим о том, каким образом мы взаимодействуем с миром микросервисов: здесь будет и про универсальный Java-рантайм, и про крошечные контейнеры, и про Spring. Я разложу микросервис на слои, соберу в образ, запущу и покажу, что влияет на его скорость.

Читать далее

Как извлечь пользу из статической типизации

Reading time29 min
Views16K

Эта статья о том, как извлечь максимум пользы из статической системы типов при дизайне вашего кода. Статья пытается быть language agnostic (получается не всегда), примеры на Java и взяты из жизни.

Читать далее

Бесплатные сервисы для разработчиков — огромный список

Reading time8 min
Views60K

Бесплатное хранилище артефактов PackageCloud

Удивительно, но в интернете сотни сервисов, которыми разработчик может пользоваться совершенно бесплатно. «Бесконечное» время (пока компания не обанкротится или не изменит условия), без рекламы, пробного периода и других подводных камней.

Недавно мы обсуждали эту тему в статье «Боль разработчика: “Никогда не давайте пользователям бесплатный тариф”». Речь шла о том, что на самом деле бесплатный план вовсе не бесплатен — приходится тратить массу времени и усилий на поддержку этих тарифов.

Но для некоторых бесплатный тариф — единственный способ завлечь новых клиентов. Это просто замечательно с точки зрения самих пользователей. Ведь перед нами десятки бесплатных хостингов, API, CMS, CDN, сервисов обработки данных, поисковых движков, репозиториев, инструментов проверки кода и других. Бесплатный тариф идеален для опенсорс-разработчиков, любительских и некоммерческих проектов, маленьких стартапов. Ни за что не надо платить.
Читать дальше →

Я единственный из 1400, или самый крутой рекрутинг, что я проходил

Reading time9 min
Views130K

Я уже лет 10 пишу код на питоне, и последние 2.5 года стабильно работал на американскую компанию. Наверно, многим знакома история, когда ты кодишь-кодишь, вроде всё неплохо, и внезапно ты - самый знающий и опытный в команде и добро пожаловать в тим лиды. Астрологи объявили неделю менеджмента, количество кода снизилось на 100%.

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

Да что же там?

Приёмы неблокирующего программирования: полные барьеры памяти

Reading time9 min
Views9.8K

В первых двух статьях цикла мы рассмотрели четыре способа упорядочить доступ к памяти: load-acquire и store-release операции в первой части, барьеры чтения и записи в память — во второй. Теперь пришла очередь познакомиться с полными барьерами памяти, их влиянием на производительность, и примерами использования полных барьеров в ядре Linux.


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


  • Load-acquire операции выполняются перед последующими чтениями и записями.
  • Store-release операции выполняются после предыдущих чтений и записей.
  • Барьеры чтения разделяют предыдущие и последующие чтения из памяти.
  • Барьеры записи разделяют предыдущие и последующие записи в память.

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

Чтение выполняется... Запись выполняется...
… после чтения smp_load_acquire(), smp_rmb() smp_load_acquire(), smp_store_release()
… после записи ??? smp_store_release(), smp_wmb()
Оказывается, обеспечить глобальный порядок записей и последующих чтений из памяти гораздо сложнее. Процессоры вынуждены прилагать отдельные усилия для этого. Сохранение такого порядка стоит недёшево и требует явных инструкций. Чтобы понять причину этих особенностей, нам придётся спуститься на уровнь ниже и присмотреться к тому, как процессоры работают с памятью.
Читать дальше →

Эволюция создания веб-приложений на Java

Reading time18 min
Views30K
История развития построения веб-приложений на языке программирования Java с примерами их использования на временном промежутке от появления спецификации сервлетов до сегодняшнего дня.


Читать дальше →

C++ быстрее и безопаснее Rust, Yandex сделала замеры

Reading time15 min
Views132K

Спойлер: C++ не быстрее и не медленнее и вообще смысл не в этом. Эта статья является продолжением славных традиций развенчания мифов крупных российских компаний о языке Rust. Предыдущая была "Go быстрее Rust, Mail.Ru Group сделала замеры".


Недавно я пытался заманить коллегу, сишника из соседнего отдела, на Тёмную сторону Rust. Но мой разговор с коллегой не задался. Потому что, цитата:


В 2019 году я был на конференции C++ CoreHard, слушал доклад Антона antoshkka Полухина о незаменимом C++. По словам Антона, Rust еще молодой, не очень быстрый и вообще не такой безопасный.

Антон Полухин является представителем России в ISO на международных заседаниях рабочей группы по стандартизации C++, автором нескольких принятых предложений к стандарту языка C++. Антон действительно крутой и авторитетный человек в вопросах по C++. Но доклад содержит несколько серьёзных фактических ошибок в отношении Rust. Давайте их разберём.

Бенчмарки для Linux-серверов: 5 открытых инструментов

Reading time4 min
Views26K
Сегодня мы расскажем об открытых инструментах для оценки производительности процессоров, памяти, файловых систем и систем хранения данных.

В список вошли утилиты, предлагаемые резидентами GitHub и участниками тематических тредов на Reddit, — Sysbench, UnixBench, Phoronix Test Suite, Vdbench и IOzone.

Читать дальше →

Реактивное программирование на Java: как, зачем и стоит ли? Часть II

Reading time15 min
Views83K

Реактивное программирование — один из самых актуальных трендов современности. Обучение ему — сложный процесс, особенно если нет подходящих материалов. В качестве своеобразного дайджеста может выступить эта статья. На конференции РИТ++ 2020 эксперт и тренер Luxoft Training Владимир Сонькин рассказал о фишках управления асинхронными потоками данных и подходах к ним, а также показал на примерах, в каких ситуациях нужна реактивность, и что она может дать.

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

Читать далее

Information

Rating
3,711-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity