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

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

Send message

10 типичных ошибок в LinkedIn, которые пора исправить

Reading time8 min
Views12K

Когда пользователи откликаются на Remote вакансии в LinkedIn, они часто не получают ответов. Есть подходы, которые помогают увеличить количество ответов на запросы, например, прямое общение с работодателями через Inmails. Но для верного и результативного общения требуется сделать ряд подготовительных действий. Первое из которых - обновление профиля в LinkedIN и исправление наиболее частых ошибок.

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

Не стоит повторять одни и те же ошибки. Здесь мы рассмотрим 10 типичных ошибок, которые совершают многие пользователи LinkedIN при создании профиля и поясняем, как повысить эффективность профиля за счет их исправления.

Читать далее

Простейшая нейросеть: еще раз и подробнее

Reading time10 min
Views64K

Машинное обучение это незаменимый инструмент для решения задач, которые легко решаются людьми, но не классическими программами. Ребенок легко поймет, что перед ним буква А, а не Д, однако программы без помощи машинного обучения справляются с этим весьма средне. И едва ли вообще справляются при минимальных помехах. Нейросети же уже сейчас решают многие задачи (включая эту) намного лучше людей. Их способность обучаться на примерах и выдавать верный результат поистине очаровывает, однако за ней лежит простая математика. Рассмотрим это на примере простого перцептрона.
Данная статья представляет собой пересказ-конспект первой части книги Тарика Рашида "Создай свою нейросеть" для тех, кто начал изучать тему, не понял отдельные детали или с трудом охватывает общую картину.

Читать далее

Сколько школ во всем мире? Чтение сотен гигабайт OpenStreetMap данных в JVM из Apache Arrow

Reading time6 min
Views4.3K

JVM основная платформа для Big Data решений, таких как Hadoop, Spark, Presto, NiFi но на производительность значительно влияют копирование/сериализация данных "на каждый чих" с последующей сборкой мусора и отсутствие SIMD оптимизаций при работе с данными.

А можно ли в программе на JVM прочитать сотни гигабайт Parquet файлов без Spark/Hadoop? В этом нам поможет библиотека Apache Arrow - проект, которым объединяются десятки решений для работы с Большими Данными. Но для этого даже не обязателен кластер с тысячами ядер и петабайты хранилища! Обработку данных начнем с "золотого стандарта" для open source: PostgreSQL 14 + PostGIS 3.2.0, а продолжим на OpenJDK 11 + Apache Arrow 9.0.0.

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

Читать далее

DevOps-инструменты как новая ступенька для разработчика

Reading time6 min
Views8.8K

В октябре Владислав Килин, Кирилл Борисов и учебная команда Слёрм проведут «DevOps Tools для разработчиков» — практический интенсив в новом формате. Его цель — расширить стек специалистов и познакомить их популярными эксплуатационными инструментами. Мы провели интервью с автором идеи интенсива и руководителем одной из учебных команд Слёрма, Евгением Бутыриным. Он рассказал, в чём идея «DevOps Tools для разработчиков» и кому он будет полезен, почему было принято решение внедрить изменения в отработанный формат обучения.

Читать далее

Практическое использование JCStress

Reading time8 min
Views4.6K

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

Цель данной статьи - показать читателям использование JCStress не только в лабораторных работах для демонстрации эффектов связанных с JMM, но и для доказательства правильности преобразований кода. Тренироваться будем на кошках JDK.

Читать далее

Снижение тепловыделения ноутбука в 2022 году

Reading time10 min
Views63K

Однажды я купил ноутбук Dell, да не простой, а XPS, о котором мечтал давным-давно, и хотя это была не компактная 13”-14” модель, а 15”, это не помешало ему стать моей верной рабочей лошадкой. Спустя некоторое время ноутбук начал греться и шуметь вентиляторами, в том числе во время простоя. В какой-то момент он просто начал жарить мои штаны.

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

Штаны Well Done

KnownReader. Читалка и словари

Reading time8 min
Views8.7K

Всем привет!

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

Читать далее

Во что вам обойдется конкурентная обработка. Иерархия проблем

Reading time47 min
Views6.3K

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

Если этот первый абзац вселил в вас надежду, то второй ее обломает: в этой статье я не собираюсь углубленно анализировать самые низкоуровневые аспекты конкурентной производительности. Мы попросту очень многого не знаем о том, как выполняются атомарные инструкции и барьеры памяти, и эту тему мы пока отложим.

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

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

Читать далее

Распределённые транзакции Kafka + PostgreSQL средствами Spring

Reading time9 min
Views32K

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

Особенно интересной эта задача становится, когда для интеграции используется Kafka, так как она имеет свои ограничения, касающиеся реализации транзакционности. Вообще, сейчас Kafka достаточно широко применяется именно  в качестве платформы для асинхронной интеграции, это справедливо и для проектов, которые мы в ЛАНИТ — Би Пи Эм реализуем, например, в Альфа-Банке и ВТБ. Поэтому, надеемся, данная тема будет интересна многим.

В этой статье рассмотрим подход к реализации распределённых транзакций (в рамках одного Java-приложения), которые охватывают Kafka и реляционную СУБД. Для этого воспользуемся средствами управления транзакциями, имеющимися в Spring.

Варианты с организацией eventual consistency с помощью типовых паттернов (Saga, Transactional Outbox и др.) и/или использования дополнительных платформ (Debezium, Kafka Connect и пр.) - тема для отдельной статьи (так что ждите продолжения). В этой статье тему затрагивать не будем. 

Читать далее

JSON pipes в шелле

Reading time4 min
Views23K
Чем больше я пишу однострочники в шелле, тем больше я прихожу к двум важным идеям:
  1. Это очень мощное средство для «непосредственного программирования», то есть указания компьютеру, что делать.
  2. Большая часть однострочника посвящена grep/awk/cut/tr, которые каким-то образом выковыривают и приводят в человеческий вид вывод предыдущих утилит.

При том, что модель pipe'ов восхитительна, совершенно грязные хаки по отлову нужных полей в выводе во втором пункте («а вот тут мы можем выделить нужное нам по характерной запятой с помощью awk -F, '{print $2}'...) делают процедуру спорной по удовольствию, и уж точно нечитаемой.

Ещё одна серьёзная проблема: при том, что шелл даёт довольно много идиом из функционального программирования, в нём нет идиомы фильтрации списка по результату выполнения внешней программы. То есть „грепнуть“ список мы можем. А вот оставить в списке только те элементы, для которых какая-то программа вернула „успех“ — нет.

При этом есть враждебная и не очень хорошо написанная среда — powershell (винды). В которых взяли хорошую идею (пайпы передают не текст, а объекты), но испортили её двумя вещами:
  1. Неэргономичной консолью виндов (Shift-PgUp где, а? говорят, Ctrl-PdUp в новых версиях)
  2. предложением пойти и выучить .net для того, чтобы нормально с методами работать.
  3. Отсутствием под большинство операционных систем


Хочется иметь объекты в пайпе в тёплом ламповом линуксовом шелле. С hand-candy (мало печатать), eye-candy (приятно смотреть) и общей эргономичностью процесса использования. Ещё хочется иметь возможность сочетать „новый подход“ со старым, то есть обычным текстовым pipe'ом.

Идея


Надо написать набор инструментов, которые позволят в pipe-style оперировать с структурированными данными. Очевидным выбором является XML JSON.
Нам нужно:
  1. Утилиты, которые примут типовые форматы на вход и сконвертируют их в json.
  2. Утилиты, которые позволят в pipe'е манипулировать с json'ом.
  3. Утилиты, которые приведут json в „обычный“ формат.

В этом случае человек не будет видеть json на экране, но будет иметь возможность работать с ним.

Для затравки


(для понимания я буду писать длинные имена утилит, в реальной жизни это будут короткие сокращения, то есть не json-get-object, а что-то типа jgo или jg)

Выводит только файлы, для которых file сумел определить тип:
ls -la | ls2json | json-filter 'filename' --exec 'file {} >/dev/null' | json-print

Выкачивает с некоторого сайта токен для авторизации, выковыривает его из json'а и выставляет в переменные среды окружения, после чего скачивает список и отфильтровав по регэкспу поле „автор“ выкачивает все url'ы:
curl mysite/api.json | env `json-get-to-env X-AUTH-TOKEN`;curl -H X-AUTH-TOKEN $X-AUTH-TOKEN mysite/api/list.json | json-filter --field 'author' --rmatch 'R.{1,2}dal\d*' | json-get --field 'url' | xargs wget

Парсит вывод find -ls, сортирует по полю size, вырезает из массива элементы с 10 по 20, выводит их в csv.
find . -ls | ls2josn | json-sort --field 'size' | json-slice [10:20] | json2csv
Читать дальше →

K8s кластер в Oracle Cloud для Always Free аккаунтов

Reading time6 min
Views10K

На хабре уже не раз писали про бесплатные вычислительные ресурсы (ARM, 4 CPU, 24ГБ), которые можно развернуть в Oracle Cloud. После регистрации вы получаете $300 и 30 дней триального аккаунта, когда для развёртывания доступны все виды ресурсов. Когда эти 30 дней заканчиваются, аккаунт получает статус Always Free, и количество доступных ресурсов значительно урезается. Чтобы снова получить доступ к ним ко всем, можно сделать upgrade своего аккаунта до Pay-as-You-Go. Это односторонняя операция, переход обратно на Always Free невозможен, и после такого перехода нужно аккуратно следить и и контролировать траты. Тем не менее, Pay-as-You-Go аккаунты также могут бесплатно использовать Always Free ресурсы.

Oracle Cloud предоставляет возможность managed развёртывания K8s кластера (в документации он называется OKE – Oracle Container Engine for Kubernetes), однако он недоступен для Always Free аккаунтов.

Чтобы обойти это ограничение, используем подход полностью ручного выделения облачных ресурсов (сети, виртуальных машин) и установки необходимых компонентов. На выходе получим кластер с четырьмя узлами (один control-plane и три worker'а) с установленным K8s'ом, балансировщиком нагрузки, публичным IP адресом и (бонусом) бесплатным доменом. Воспроизводимые Terraform скрипты (и readme по их использованию) опубликованы на github'е.

Читать далее

Kubernetes для разработчиков: какие знания нужны?

Reading time10 min
Views14K

В преддверии запуска Вечерней школы по Kubernetes, в этот раз для разработчиков, подготовили интервью с Павлом Селивановым архитектором в Mail.ru Cloud Solutions и Марселем Ибраевым CTO Слёрма. Речь пойдет о том, какие конкретно знания нужны разработчику в компаниях с Kubernetes, Павел и Марсель поделятся кейсами из своей практики.

Читать

Доказательная медицина в оториноларингологии за последние 10 лет (мифы и что вы не знали про это)

Reading time13 min
Views47K

Этот актёр часто используется как наглядное пособие. В настоящий момент у его персонажа подозрение на искривление перегородки носа.

Клинические рекомендации для врача — своего рода инструкция по делопроизводству. В лор-протоколах строго прописано, что назначать, если болит горло, в придаточных пазухах носа скопился гной или замучил тонзиллит. Эти протоколы не пересматривались последние лет 15, а научные исследования с высокой степенью достоверности за это время выходили. И они как бы намекают, что нужно перестать делать многие вещи, которыми сейчас мучают пациентов.

Для примера, если при гайморите предлагают схему «рентген — пункция — антибиотики», то поздравляю, вы в надёжных руках врача образца мышления 2010 года. В 2020-х уже гораздо чаще назначается домашнее промывание (не «кукушка»), безрецептурные анальгетики и интраназальные глюкокортикоиды.

Всего за 10 лет поменялись и технологии, и подход. Вот примеры изменений:

  1. Больше нет операций вслепую. Аденоиды удаляют с помощью эндоскопа: так нет риска повредить трубные валики, создать грубые рубцы или оставить часть лимфоидной ткани. Под контролем камеры проводят также септопластику.
  2. Септопластика избавилась от большей части ада после операции: например, марлевые тампоны, которыми фаршировали пациента через нос, заменены на адекватные силиконовые трубки, которые дают возможность дышать и спокойно их доставать из носа.
  3. Сильно изменились показания к антибиотикам.
  4. Ларингит не лечат ингаляциями минералки и «пшикалками». Потому что доказано, они ни разу не помогают. Но зато могут спровоцировать удушье. Современный рецепт — голосовой покой и много воды.
  5. Отит — это не кабинет физиотерапии и синяя лампа над ухом, а капли и таблетки по рецепту. Уже доказано, УФ-лучи не проникают вглубь барабанной перепонки и не локализуют воспаление.
  6. Классический рентген по любому поводу тоже ушёл в прошлое, на практике используется КТ, в частности позволяющее видеть воспаления в клиновидных пазухах.

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

Панель управления собой: 10 простых шагов к порядку в вашей жизни

Reading time31 min
Views32K

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

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

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

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

Читать далее

Автоматическое создание changeSet'ов Liquibase из Java entity

Reading time6 min
Views11K

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

Каждый раз при добавление или изменение Entity, мы должны добавить новый changSet. Но что если я скажу, что есть плагин, который сам создает changeSetы на основе нашей Entity и уже существующей структуры базы данных?

Нам понадобится java, spring, gradle и liquibase plugin.

Начальные данные

Для начала нужно создать проект и пару простых Entity.

В файл build.gradle добавляем плагин:

plugins {
id 'org.liquibase.gradle' version '2.0.4'
}

Можно так же указать в переменных файл

liquibase {

activities {

main {

changeLogFile "$buildDir/generated-migrations.yaml"

url database.getProperty("dbUrl")

username database.getProperty("dbUsername")

password database.getProperty("dbPassword")

referenceUrl 'hibernate:spring:entity?dialect=org.hibernate.dialect.PostgreSQL10Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy'

logLevel 'debug'

}

runList = "main"

}

}

Читать далее

Где научиться оформлению резюме под зарубежные компании?

Reading time1 min
Views5.8K

Cобрала ссылки на ресурсы Harvard, Yale, Stanford, Washington Universities по оформлению резюме под американские и международные вакансии. Подходит для удаленных вакансий, проверено на собственной шкуре.

Читать далее

Почему не все сеньоры получают оффер мечты, и что с этим делать

Reading time11 min
Views36K
На Хабре много познавательных статей про то, «как я собеседовался в X» (раз, два, три, или вот четыре). Часто они написаны с одной стороны баррикад, т.е. со стороны соискателя. Читая очередную, я понял, что мое представление о найме тоже однобоко — и решил воспользоваться служебным положением, чтобы порасспросить HR одного из крупных рекрутинговых агентств, работающих в IT, как все это видится с их стороны.

Итак, ситуация: вполне себе квалифицированный и успешный сеньор хочет устроиться в конкретную большую компанию, собеседуется, проходит все этапы, но оффера так и не видит. Почему? Что он делает не так? Давайте разбираться.


Приятного чтения!

Создаем самоорганизующуюся команду: пошаговый алгоритм

Reading time10 min
Views20K

Меня зовут Андрей Булов. Я простой питерский технарь, архитектор, разработчик, DevOps технический менеджер. Сейчас работаю в Quantori.

Я не буду описывать самоорганизующиеся команды, а расскажу про алгоритм их создания. Это мой личный опыт — я так работаю с командами (их было 30+). Он перекликается с Management 3.0, моделью Херши-Бланшар, LeSS, Sсrum и даже SAFe, а также со многими другими софтовыми областями. И в нем есть конкретика на уровне действий.

Для ленивых: я исследую окружение, проектирую дизайн культуры, объясняю правила и делегирую задачи команде. Я не поддерживаю внедрение самоорганизации через фреймворк. Видео моего выступления об этом на конференции TeamLead Conf 2021 можно посмотреть здесь.

Читать далее

Мои собеседования 2021 edition

Reading time13 min
Views45K

Внимание: повествование будет идти в стиле "здравствуй дорогой дневничок", без критики и срывов покровов. Я строго против публичной критики компаний в разрезе процесса интервью. Хотят устраивать 5 алгораундов - их дело, они будут платить тебе деньги и вправе решать как они собеседуют. С другой стороны, я считаю, что могу высказывать свое мнение без конкретных имен. Все описанные компании не российские. Извиняюсь за англицизмы.

Читать далее

Хотели как в FAANG, а вышло как всегда или Опыт собеседования в Тинькофф в 3 актах

Reading time9 min
Views140K

Предисловие Около года назад я задался целью получить оффер от FAANG. Как следствие, постоянной частью моей жизни стали тематические форумы, площадки и вся сопутствующая атрибутика. Спустя какое-то время я попробовал себя на собеседованиях в околоFAANGoвые компании: Lyft, Spotify, Booking и т. д, где-то успешно, где-то не очень. В это же время мне порекомендовали попробовать пройти собеседование в Тинькофф банк, который внедрил схожий процесс. После стандартного общения с HR менеджером была получена ссылка на описание процесса собеседования. “Хм, почти что FAANG + тех. интервью по Primary Skill”, - подумал я и сказал, что готов приступать. В тот же час было назначено 2 интервью: техническое и coding, а вот 3 этап, system design, нужно было заслужить успешным прохождением первых двух. Почему именно эти 2 части являлись основополагающими, осталось неясным.

Акт первый, технический

В назначенный час я встретился со своим интервьюером. Собеседование выглядело “добротным” и стандартным в заданной проф. области, оттого местами скучным. Было много задач на ревью кода и обсуждения специфики языка, в частности...

Читать далее

Information

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