Как стать автором
Обновить
0
0
Владимир @dva46

Пользователь

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

Matrix: децентрализованные открытые мессенджеры с E2E-шифрованием. Обзор возможностей и настройка своего сервера

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

В этой статье я расскажу о протоколе Matrix и мессенджерах, основанных на нем, а так же приведу инструкцию по настройке своего сервера и клиентов.

Matrix — открытый протокол мгновенного обмена сообщениями и файлами с поддержкой голосовой и видеосвязи. Почему стоит обратить на него внимание, если у нас уже есть WhatsApp и Telegram? Причин несколько.

Во-первых, в последние дни Роскомнадзор снова начал развлекаться блокировками WhatsApp и Telegram, и иногда у него это даже получается более-менее успешно. В таких условиях всегда неплохо иметь запасной вариант, и Matrix здесь очень хорошо подходит, потому что во-первых он позволяет создавать свои собственные сервера, а во-вторых его протокол со стороны выглядит как самый обычный HTTPS.

Во-вторых, все больше и больше людей не доверяют WhatsApp и Telegram. В случае с Matrix же можно поднять свой личный сервер, протокол Matrix - открытый, исходники клиентов - открыты, исходники серверов - тоже открыты, а в самом протоколе end-to-end шифрование включено для чатов по умолчанию из коробки (в отличие, например, от Telegram, где оно доступно только в "секретных чатах"). Ну и само собой, не требуется нигде вводить телефонный номер для регистрации.

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

Сервер Matrix может работать как изолированно ("только для своих"), так и в составе "федерации" - когда разные серверы общаются между собой, и пользователи, подключенные к разным серверам, могут общаться друг с другом. Есть здесь олды, которые помнят Jabber и IRC? Ну вот, здесь такой же принцип. Я бы даже сказал, что Matrix - это этакий хипстерский Jabber на стероидах.

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

Что должен уметь мидл бэкенд-разработчик

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

«Бэкенд — это просто! Выгрузить данные в нужном формате из одной системы и загрузить в другую. И так почти на каждом проекте!», — заявил недавно мой коллега Сергей, старший Python-разработчик. Я спросил у бэкендеров в нашей компании, с какими задачами они сталкиваются, какими hard и soft skills должны обладать мидлы в бэкенд-разработке.

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

CSS: о выводе коротких и длинных текстов

Время на прочтение8 мин
Количество просмотров44K
Когда, пользуясь возможностями CSS, создают макет страницы, важно учитывать то, что в различных элементах этой страницы могут выводиться короткие и длинные текстовые материалы. Страницы, кроме того, нужно тестировать на предмет того, как они отображают тексты разной длины. Если разработчик чётко понимает то, как обрабатывать различные тексты, выводимые на странице, если он соответствующим образом спроектировал макет, это способно избавить его от множества неприятных неожиданностей.



Есть много ситуаций, в которых изменение некоего текстового фрагмента путём добавления или удаления всего одного слова способно заметно изменить внешний вид страницы, или, что ещё хуже «поломать» макет и сделать невозможной нормальной работу с сайтом. Когда я только начинал изучать CSS, я недооценивал последствия, к которым может привести добавление единственного слова в некий элемент или удаление из него всего одного слова. Здесь я хочу поделиться различными способами обработки текстов разной длины средствами CSS.
Читать дальше →
Всего голосов 26: ↑24 и ↓2+30
Комментарии7

«Кто мутит воду – 2»: или всё, что вы хотели знать об обратном осмосе

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


Мой первый материал — сравнение бытовых фильтров для воды «Кто мутит воду» готовился в запале исследователя-переселенца. Когда впервые переезжаешь в свою собственную квартиру, начинаешь уделять внимание мелочам — потому что делаешь и покупаешь для себя, и надо, чтобы всё было «на века». В посте я поделился опытом сравнения фильтров-кувшинов и сорбционных проточных фильтров разных производителей. Планов будить воинствующих комментаторов изначально не было… А потом в дверь личку постучали и сказали: «Пиши ещё, гостем будешь!». И я написал.
Всего голосов 99: ↑82 и ↓17+65
Комментарии354

Кто мутит воду? Большое подробное сравнение-тест бытовых фильтров для очистки воды

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


Не так давно мы с супругой наконец-то обзавелись собственным жильём, и я озадачился вопросом — как умнее и экономнее всего организовать дополнительную очистку воды у себя дома. Так как я работаю в компании, занимающейся в том числе и химическими исследованиями, получилось провести почти полноценные лабораторные испытания нескольких моделей фильтров. Процесс тестирования и сравнения оказался интересным, так что я решил поделиться этими своими наблюдениями и выводами здесь.
Всего голосов 68: ↑50 и ↓18+32
Комментарии193

Как правильно маркировать рекламу после получения токенов из ОРД?

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

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

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

Принципы SOLID: как писать хорошо масштабируемый и поддерживаемый код

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

Вам когда-нибудь говорили, что вы пишете плохой код? 

Здесь стыдиться нечего. Мы все пишем несовершенный код, когда только учимся. Хорошая новость в том, что улучшить его — довольно просто, главное — желание. 

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

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

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

Разбираемся в анимациях и временных переходах в CSS

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

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

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

Clustered index в InnoDB и оптимизация запросов

Время на прочтение7 мин
Количество просмотров19K
В последнее время в сети часто пишут про clustered index в InnoDB и таблицах MySQL, но, несмотря на это, на практике используют довольно редко.
В данной статье мы покажем на двух реальных примерах, как мы оптимизировали достаточно сложные системы Badoo, основываясь на понимании принципов работы clustered index.

Clustered index – форма организации таблицы в файле. В InnoDB данные хранятся в дереве, в таком же, в котором лежат обычные B-TREE ключи. Таблица InnoDB сама по себе уже является большим B-TREE. В качестве значений ключа используется clustered index. Согласно документации, в качестве clustered index выбирается PRIMARY KEY. Если PRIMARY KEY отсутствует – выбирается первый UNIQUE KEY. Если и такого нет, то используется внутренний 6-тибайтный код.

Что же вытекает из такой организации данных на диске?
Читать дальше →
Всего голосов 78: ↑65 и ↓13+52
Комментарии41

Оптимизация при работе с MySQL — экономия на спичках или с миру по нитке?

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

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

Читать далее
Всего голосов 14: ↑9 и ↓5+6
Комментарии19

MySQL Performance real life Tips and Tricks

Время на прочтение9 мин
Количество просмотров37K
Пообещал вчера написать статью о реальных случаях оптимизации БД MySQL.
Пришлось сегодня вставать утром пораньше чтобы воплотить обещанное в жизнь.
Централизованное управление мыслями поддерживать еще сложно, поэтому не судите строго за казусы и ляпсусы в моей статье.

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

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

Читать дальше →
Всего голосов 143: ↑139 и ↓4+135
Комментарии93

Как обрабатывать Fatal Error в PHP

Время на прочтение4 мин
Количество просмотров20K
В одном из наших проектов (социальная генеалогическая сеть), о котором я писал в данном топике, мы используем очередь отложенных событий, реализованную на мемкеше. Ее архитектура такова: приложение записывает в эту очередь различные события и данные, относящиеся к ним (тип события, входящие параметры, и функция обработчик этого события). После чего менеджер(-ы) очереди разбирают эту очередь и выполняют отложенные события. В частности такая очередь используется для сбора статистики, но также и для других более критичных к выполнению задач.
Поэтому очень важно обеспечить high availability для менеджера(-ов) очереди.

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

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

MySQL и JOINы

Время на прочтение6 мин
Количество просмотров148K
Поводом для написания данной статьи послужили некоторые дебаты в одной из групп linkedin, связанной с MySQL, а также общение с коллегами и хабролюдьми :-)

В данной статье хотел написать что такое вообще JOINы в MySQL и как можно оптимизировать запросы с ними.

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

Универсальное поселение как точка роста следующего социально-экономического уклада

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

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

Как это может быть сделано?
Всего голосов 6: ↑4 и ↓2+3
Комментарии22

Что не так с качеством в ИТ

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

Эту статью я решил написать после прочтения резонансных эмоциональных публикаций на тему технического регресса в ИТ-индустрии (https://habr.com/ru/post/596517/ и https://habr.com/ru/post/673236/). Поскольку я сам много лет занимался вопросами безопасности и качества в сфере транспорта, в ней я постараюсь осветить корни проблемы и возможные пути её решения.

Снижение качества продукции в сфере ИТ — часть общемирового тренда на падение уровня качества во всех ключевых отраслях экономики. Если посмотреть динамику за последние 30 лет, то ситуация в ИТ принципиально ничем не отличается от ситуации в строительстве или любой другой отрасли. Эту проблему тщательно замалчивают, поскольку предание её огласке поставило бы множество неудобных вопросов перед органами власти в любом государстве.

Читать далее
Всего голосов 45: ↑26 и ↓19+14
Комментарии134

В софте все всрато и становится еще всратее

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

Приветствую хабравчане!

Глава 1 - Нытье про то, что раньше было лучше

Десяток лет читаю Хабр, в основном разработка, программирование, старое железо и посты с адовым рейтингом. Видел несколько постов об ожирении сайтов, софта. О разочаровании в программировании с 2000+ постов. И пост, что в софте все ок, но никто не доволен или как оно там. А не важно. Хочу поделиться своими мыслями и наблюдениями на этот счет.

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

Читать далее
Всего голосов 541: ↑457 и ↓84+459
Комментарии1418

KISS — принцип проектирования, содержащий все остальные принципы проектирования

Время на прочтение12 мин
Количество просмотров95K
Постараюсь объяснить сущность принципа проектирования KISS просто и одновременно очень подробно. KISS – это очень общий и абстрактный принцип проектирования, который содержит в себе практически все остальные принципы проектирования. Принципы проектирования описывают как писать «хороший» код. Однако что значит хороший код? Некоторые считают, что это код, который выполняется максимально быстро, некоторые – что это код, в котором задействовано как можно больше паттернов проектирования… Но верный ответ лежит на поверхности. Код – это информация в чистом виде. А основные критерии ценности информации – это 1)достоверность 2)доступность 3)понятность. То, почему важны достоверностью и доступность – очевидно. От кода нет проку, если он работает с ошибками или если сервер с приложением «лежит». Почему же важна понятность кода? В понятном коде проще искать ошибки, проще его изменять, дорабатывать и сопровождать. Итак, понятность – основная ценность, к которой должен стремиться программист. Однако тут есть одна неувязочка. Дело в том, что понятность – вещь сугубо субъективная.
Читать дальше →
Всего голосов 22: ↑9 и ↓13-4
Комментарии84

Как защититься от dos/ddos, или Как я начал вновь высыпаться по ночам

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

Приветствую тебя, дорогой читатель. Скорее всего, если ты это читаешь, то уже очень устал получать кучу алертов о том, что твоя площадка загибается от регулярных набегов печенегов ботов или других нежелательных посетителей контента. Я надеюсь, что эта статья поможет тебе спать спокойно и оградит тебя от недугов, а также внесет больше ясности в твое понимание теории и практики защиты от dos и ddos. Приятного чтения!

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

Укрепление Nginx с помощью Fail2ban: тестируем и оцениваем «профит»

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

«Только запустил Nginx-приложение, а в access.log уже десятки записей с непонятными запросами, переборами паролей и другого» — типичная ситуация для незащищенного сервера. Это следствие работы «ботов» для сканирования белых сетей, поиска открытых портов, сбора информации о версиях запущенных служб и подбора паролей к сервисам.

В статье расскажу, как с помощью open source-инструмента Fail2ban укрепить Nginx и защитить сервисы от взлома. А также продемонстрирую способы блокирования DDoS-атак. Подробности под катом.
Читать дальше →
Всего голосов 45: ↑43 и ↓2+49
Комментарии47

Обзор паттернов хранения деревьев в реляционных БД

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

Всем привет! Меня зовут Пантелеев Александр и я бекенд разработчик в компании Bimeister. Постараюсь описать исчерпывающе, кратко и понятно суть основных паттернов хранения деревьев в реляционных базах данных. Надеюсь, что статья будет полезна тем, кто до сего момента не сталкивался с такими паттернами, и станет отправной точкой в их понимании.

Читать далее
Всего голосов 30: ↑21 и ↓9+16
Комментарии25

Информация

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

Специализация

Web Developer
Middle
PHP
MySQL