Search
Write a publication
Pull to refresh
37
0
Илья Сазонов @poxvuibr

Software developer

Send message

Jitsi Meet: опенсорсная альтернатива «шпионскому» видеоприложению Zoom

Reading time4 min
Views144K
В связи с массовым переходом на удалённую работу приложение для видеоконференций Zoom резко выросло в популярности. Но это не идеальный вариант с точки зрения безопасности. Хотя Zoom предлагает end-to-end шифрование для текстовых чатов, а шифрование видеоконференций можно активировать на стороне хоста, если верить разработчикам проприетарной программы.

Но тип шифрования невозможно проверить, потому что код закрыт, а с точки зрения приватности приложение Zoom вызывает вопросы у некоторых экспертов. Например, хост может активировать странную функцию «трекинг внимания» (attention tracking). Она отслеживает, что участник не отвлекается от совещания больше, чем на 30 секунд (окно приложения должно быть открыто и активно).

PostgreSQL. Добавляем not null constraints в большие таблицы

Reading time10 min
Views17K


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


Одной из команд, с которой надо быть осторожным на таблицах с большим количеством записей, является добавление not null constraint на столбец. При добавлении данного constraint PostgreSQL приобретает access exclusive lock на таблицу, в результате чего другие сессии не могут временно даже читать таблицу; затем БД проверяет, что в столбце действительно ни одного null нет, и только после этого вносятся изменения. Под катом я рассмотрю различные варианты, как можно добавить not null constraint, лоча таблицу на минимально возможное время или даже не лоча ее совсем.


TL;DR:


  1. В PostgreSQL 12+ можно добавить check constraint на таблицу, а затем "преобразовать" его в not null constraint для конкретного столбца.
  2. Чтобы полностью избежать блокировки таблицы, можно напрямую внести изменения в системную таблицу pg_attribute (этот пункт подробно разбирается в статье).
Читать дальше →

Учимся разворачивать микросервисы. Часть 4. Jenkins

Reading time14 min
Views119K


Привет, Хабр!


Это четвертая и заключительная часть серии статей "Учимся разворачивать микросервисы", и сегодня мы настроим Jenkins и создадим пайплайн для микросервисов нашего учебного проекта. Jenkins будет получать файл конфигурации из отдельного репозитория, собирать и тестировать проект в Docker-контейнере, а затем собирать Docker-образ приложения и пушить его в реестр. Последней операцией Jenkins будет обновлять кластер, взаимодействуя с Helm (более подробно о нем в прошлой части).

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

Освободи свой Android — алаверды

Reading time5 min
Views34K

О чём это?


Данная статья написана в качестве продолжения статьи Освободи свой Android. Зачем? Очень просто — та статья очень подробно и хорошо описывает, как перешить смартфон на LineageOS. Но она просто требует продолжения о том, как потом с этим перешитым смартфоном жить. Некий отчёт из реальной жизни просто необходим. Вот такой отчёт я и хочу здесь предоставить.
Читать дальше →

Освободи свой Android

Reading time12 min
Views151K


Некоторое время назад на Хабре вышла статья замечательной девушки fur_habr о проблемах безопасности, приватности и конфиденциальности мобильных коммуникаций и о путях решения этих проблем на платформе Android.

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

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

Вопросы к собеседованию Java-backend, Java core (60 вопросов)

Reading time17 min
Views263K
image

Добрый день! Представляю вашему вниманию список вопросов к собеседованию Java Backend, которые я оформлял на протяжении около 2х лет.

Вопросы разбиты по темам: core, collections, concurrency, io, exceptions, которые задают основные направления хода технического собеседования. Звездочками отмечен субъективный (с точки зрения автора) уровень сложности вопроса, в сноске спойлера — краткий ответ на вопрос. Ответ представляет для интервьювера правильное направления развития мысли кандидата.
Читать далее

YouTube — Ошибка. Повторите попытку позже. Идентификатор воспроизведения: <...>

Reading time3 min
Views256K


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

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

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

Под катом — причина возникновения ошибки (для тех, кому лень читать, это AdBlock), и что с этим можно сделать. Конечно, кроме отключения самого блокировщика рекламы.
Читать дальше →

Простое обнаружение проблем производительности в PostgreSQL

Reading time5 min
Views70K
Существует ли в мире очень большая и крупная база данных, которая время от времени не страдает от проблем с производительностью? Держу пари, что их не так уж много. Поэтому каждый DBA (администратор базы данных), отвечающий за PostgreSQL, должен знать, как отслеживать потенциальные проблемы производительности, чтобы выяснить, что на самом деле происходит.

Повышение производительности PostgreSQL после настройки параметров


Многие думают, что изменение параметров в postgresql.conf — это реальный путь к успеху. Однако это не всегда так. Конечно, чаще всего хорошие параметры конфигурации базы данных очень полезны. Тем не менее, во многих случаях реальные проблемы будут возникать из-за странного запроса, скрытого глубоко в некоторой логике приложения. Даже вполне вероятно, что запросы, вызывающие реальные проблемы, не являются теми, на которые вы обратили внимание. Возникает естественный вопрос: как мы можем отследить эти запросы и выяснить, что на самом деле происходит? Мой любимый инструмент для этого — pg_stat_statements, который всегда должен быть включен по моему мнению, если вы используете PostgreSQL 9.2 или выше (пожалуйста, не используйте его в более старых версиях).
Читать дальше →

Математика восхождения по лестнице богатства

Reading time5 min
Views57K

(с)

С точки зрения программиста среднемесячная зарплата в России составляет 44 тыс. руб. — ниже всяческих ожиданий богатства и успеха. Но откуда вообще берутся представления об успехе, финансовом достатке и о методах их достижения?

Как изменится ваша жизнь, если дать вам 10 тыс. руб.? А как насчет 1 млн руб.? Или 100 млн руб.? Ответ на этот вопрос не так прост, как кажется, и зависит от вашего возраста, семейного положения и текущих накоплений. Еще более важно, что изменения, которые произойдут с вашим поведением после того, как у вас появится такая сумма, могут многое рассказать о текущем финансовом положении.

Стюарт Баттерфилд, создатель Flickr и Slack, развил эту мысль до самобытной концепции «пирамиды богатства», которая помогает прийти к парадоксальному выводу: даже большие деньги не обязательно улучшат вашу жизнь каким-либо заметным образом.
Читать дальше →

do {Yoga} while (болит спина)

Reading time9 min
Views39K

Вступление


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

image

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

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

С чего все началось и чем закончилось


Итак, все началось давным давно и довольно банально, как и у большинства моих соотечественников. А именно: 10 лет сидячий жизни в школе = проблемы с осанкой, + 7 лет сидячей жизни в университете = проблемы с осанкой (уже видимо начались непосредственно проблемы с позвоночником) + 10 лет сидячей работы в IT = проблемы с осанкой (уже совершенно точно серьезные проблемы с позвоночником). Я периодически занимался какими-то физическими упражнениями типа игры в футбол, катания на сноуборде или нерегулярных походов на тхэквандо, но, насколько мне кажется теперь, это скорее негативно, чем позитивно отражалось на состоянии моей спины.
Читать дальше →

Подкроватный хостинг: жуткая практика домашних хостингов

Reading time7 min
Views76K

«Подкроватный» хостинг — жаргонное название сервера, расположенного в обычной жилой квартире и подключённого к домашнему интернет-каналу. На таких серверах обычно размещался публичный FTP-сервер, домашняя страничка владельца и иногда даже целый хостинг для других проектов. Явление было распространено в ранние времена появления доступного домашнего интернета по выделенному каналу, когда аренда выделенного сервера в дата-центре была слишком дорогой, а виртуальные сервера ещё не были распространены и достаточно удобны.

Чаще всего для «подкроватного» сервера выделялся старый компьютер, в который устанавливались все найденные жесткие диски. Он также мог выполнять роль домашнего роутера и файрвола. Такой сервер обязательно был дома у каждого уважающего себя сотрудника телекома.

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

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

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

Кетогенная диета: от лечения эпилепсии до вредной моды

Reading time11 min
Views20K


Каждая эпоха человечества полнится своими кумирами. Люди, которые каким-то образом выделились из толпы, часто становятся примером для подражания, наследования и копирования. Так было всегда и так происходит сейчас. В наши дни социальные сети, доступ к котором можно получить из каждого второго устройства, доминируют в вопросах общественного мнения. В некоторых ситуациях это даже хорошо, если человек, к которому приковано внимание тысяч или миллионов его подписчиков, делится информацией полезной и точной. Однако чаще всего мы наблюдаем ситуацию, когда кто-то «известный» сказал что-то не совсем умное, а толпа его поддержала, ибо работает принцип «ну это же «Имя», он ерунды не скажет». Подобная ситуация сложилась и вокруг кетогенной диеты, используемой ранее в спорте и в лечении эпилепсии. Кетодиета, основанная на высоком содержании жиров и низком содержании углеводов в пище, стала популярна среди некоторых «селебритис» (уж простите за англицизм). Но так ли хороша, а главное, полезна ли такая диета для организма человека? Как выяснили ученые из Йельского университета, вреда от нее куда больше, чем пользы. Какие процессы протекают в организме во время кетодиеты, каковы ее последствия и стоит ли вообще сидеть на диете? Об этом мы узнаем из доклада исследовательской группы. Поехали.
Читать дальше →

PostgreSQL Antipatterns: ударим словарем по тяжелому JOIN

Reading time6 min
Views23K
Продолжаем серию статей, посвященных исследованию малоизвестных способов улучшения производительности «вроде бы простых» запросов на PostgreSQL:


Не подумайте, что я так сильно не люблю JOIN… :)

Но зачастую без него запрос получается ощутимо производительнее, чем с ним. Поэтому сегодня попробуем вообще избавиться от ресурсоемкого JOIN — с помощью словаря.


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

Android NDK: работа с OpenSL ES

Reading time11 min
Views15K
День добрый, Хабражители.

Я ранее писал про OpenAL. Позже товарищ zagayevskiy написал хорошую статью по OpenSL ES. В одной из наших игр, дабы не переписывать весь код по работе со звуком, мы не стали переписывать всё на OpenSL ES (при порте на Android). В игре использовалось не так много звуков, поэтому проблем с OpenAL не было. А вот в последней игре у нас использовалось много звуков (специфика игры обязывает), вот тут-то мы и столкнулись с большой проблемой (задержки при воспроизведении — меньшая из них). Было решено переписать всё на OpenSL ES. Для этого я написал парочку враперов, про которые уже рассказывал. Решил поделиться этим и на хабре, может кому-то пригодится.

  1. Краткое описание OpenSL ES.
  2. Аудио контент.
  3. Немного про обёртки.
  4. Принцип работы с объектами.
  5. Инициализация библиотеки (контекста).
  6. Работа со звуками.
  7. Проигрывание PCM.
  8. Проигрывание сжатых форматов.
  9. Заключение.
  10. Доп. информация.

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

MyBatis как более быстрая альтернатива Hibernate

Reading time11 min
Views107K
В Java сообществе Hibernate framework де-факто считается стандартом для удобной работы с базой данных. Разработчику трудно выбрать другой фреймфорк, потому что порой он не знает о существовании альтернатив. В этой статье я проведу курс молодого бойца по работе с MyBatis framework. Полностью охватить весь framework не получится, но информации будет достаточно, что бы увидеть преимущества и слабые стороны данного framework'а и начать работать с MyBatis.
Читать дальше →

Spring Data JPA: доводим напильником

Reading time14 min
Views71K

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

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

На пути к идеальной клавиатуре

Reading time9 min
Views61K

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


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


image

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

'Hello World' вам в облако

Reading time69 min
Views25K

Мир сходит с ума, заталкивая калькулятор для 2+2 в облака. Чем мы хуже? Давайте Hello World затолкаем в три микросервиса, напишем пару-тройку тестов, обеспечим пользователей документацией, нарисуем красивый пайплайн сборки и обеспечим деплой в условный облачный прод при успешном прохождении тестов. Итак, в данной статье будет показан пример того, как может быть построен процесс разработки продукта от спецификации до деплоя в прод. Инетересно? тогда прошу под кат

Как собрать образ Oracle DB для Testcontainers

Reading time12 min
Views15K

Код должен тестироваться на той СУБД, с которой он будет работать. Testcontainers — это такая библиотека, которая позволяет использовать в юнит тестах практически любую СУБД с той же лёгкостью, что embedded базы данных типа HSQLDB или H2. Был бы только Docker образ



Именно сборке удобного для использования с Testcontainers докер образа посвящена эта статья. У меня при попытке его сделать возникли проблемы, и тут я делюсь своим решением.
Собирать буду образ для Oracle 11, потому он небольшого размера и мне версии 11 хватает. С другими версиями подход примерно тот же.


Для того, чтобы было понятно, как использовать образ, тут также будет код на Java, который демонстрирует применение образа для тестирования Spring Boot приложений. Способ подключения к testcontainers я привёл, наверное, не самый лучший. Но во-первых он демонстрирует как использовать настройки, заданные при создании образа. Во-вторых он простой. И в-третьих он почти не завязан на Spring, его можно воткнуть даже в джава код, в котором нет ничего, кроме public static void main.


Предполагается, что читатель обладает поверхностным знакомством с Docker и Testcontaners, а также хорошо знает Java. Для сборки нужно использовать linux, если собираете под Windows, нужно будет применить msys2 или что-то в этом духе.


Демонстрационный код залит на гитхаб вот сюда https://github.com/poxu/testcontainers-spring-demo Поправленные скрипты для сборки образа можно посмотреть в моём форке Оракловских инструкций https://github.com/poxu/docker-images/tree/master/OracleDatabase/SingleInstance

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

Как в линуксе подключиться к корпоративному VPN с помощью openconnect и vpn-slice

Reading time14 min
Views76K

Хотите использовать линукс на работе, но корпоративный VPN не даёт? Тогда эта статья может помочь, хотя это не точно. Хочу заранее предупредить, что вопросы администрирования сетей я понимаю плохо, поэтому не исключено, что я всё сделал неправильно. С другой стороны не исключено, что я смогу написать руководство так, что оно будет понятно обычным людям, так что советую попробовать.


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


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


Большинство ip адресов подверглись жестокой обфускации, поэтому если видите адрес наподобие 435.435.435.435 — там должен быть какой-то нормальный ip, специфичный для вашего случая.


У меня Ubuntu 18.04, но думаю с небольшими правками руководство можно применять и к другим дистрибутивам. Однако в этом тексте линукс == Ubuntu.


Cisco Connect


Те, кто сидит на Windows или MacOS могут подключиться к нашему корпоративному VPN через Cisco Connect, которому нужно указать адрес гейтвея и при каждом подключении вводить пароль, состоящий из фиксированной части и кода, генерируемого Google Authenticator.

Что делать на линуксе

Information

Rating
Does not participate
Date of birth
Registered
Activity