Search
Write a publication
Pull to refresh
-13
0

Инженер

Send message

Телефоны с дисплеями E-Ink: для тех, кому нужна связь и не хочется отвлекаться

Reading time4 min
Views31K

Привет, Хабр! Не так давно стало известно о проекте Mudita Kompakt — это мобильный телефон с черно-белым E-Ink-экраном, базовым набором приложений для связи, заметок, чтения и музыки и без сервисов Google (фича, а не баг). Устройство для тех, кто не хочет отвлекаться на сообщения и видео. У него есть и современные, привычные пользователю функции, включая беспроводную зарядку и сканер отпечатков пальцев.

В этом посте предлагаю вспомнить, какие еще модели телефонов такого рода есть на рынке. О тех телефонах, что были некогда доступны и популярны, вроде Yota Phone, писать не будем: в свое время их обозрели так обозрели.

Читать далее

ChatGPT без VPN за 10 минут (и установка нативного приложения)

Level of difficultyEasy
Reading time4 min
Views174K

Уверен, многие читатели Хабра знакомы с этим способом, ведь он существует не первый день. Чтобы сэкономить ваше время, я скажу всего два слова: comss DNS.

Все остальные - велком под кат :-)

Читать далее

Хитрости для программистов: пять команд Linux, с которыми ваша жизнь не будет прежней

Reading time8 min
Views86K

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

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

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

Читать далее

Изобретаем JPEG

Reading time28 min
Views178K

Вы правильно поняли из названия, что это не совсем обычное описание алгоритма JPEG (формат файла я подробно описывал в статье «Декодирование JPEG для чайников»). В первую очередь, выбранный способ подачи материала предполагает, что мы ничего не знаем не только о JPEG, но и о преобразовании Фурье, и кодировании Хаффмана. И вообще, мало что помним из лекций. Просто взяли картинку и стали думать как же ее можно сжать. Поэтому я попытался доступно выразить только суть, но при которой у читателя будет выработано достаточно глубокое и, главное, интуитивное понимание алгоритма. Формулы и математические выкладки — по самому минимуму, только те, которые важны для понимания происходящего.

Знание алгоритма JPEG очень полезно не только для сжатия изображений. В нем используется теория из цифровой обработки сигналов, математического анализа, линейной алгебры, теории информации, в частности, преобразование Фурье, кодирование без потерь и др. Поэтому полученные знания могут пригодиться где угодно.

Если есть желание, то предлагаю пройти те же этапы самостоятельно параллельно со статьей. Проверить, насколько приведенные рассуждения подходят для разных изображений, попытаться внести свои модификации в алгоритм. Это очень интересно. В качестве инструмента могу порекомендовать замечательную связку Python + NumPy + Matplotlib + PIL(Pillow). Почти вся моя работа (в т. ч. графики и анимация), была произведена с помощью них.

Внимание, трафик! Много иллюстраций, графиков и анимаций (~ 10Мб). По иронии судьбы, в статье про JPEG всего 2 изображения с этим форматом из полусотни.
Читать дальше →

Как устроен формат JPEG

Reading time13 min
Views108K

Изображения формата JPEG встречаются повсюду в нашей цифровой жизни, но за этим покровом осведомлённости скрываются алгоритмы, устраняющие детали, не воспринимаемые человеческим глазом. В итоге получается высочайшее визуальное качество при наименьшем размере файла – но как конкретно всё это работает? Давайте посмотрим, чего именно не видят наши глаза!




Легко принять, как само собой разумеющееся, возможность отправить фотку другу, и не волноваться по поводу того, какое устройство, браузер или операционную систему он использует – однако так было не всегда. К началу 1980-х компьютеры умели хранить и показывать цифровые изображения, однако по поводу наилучшего способа для этого существовало множество конкурирующих идей. Нельзя было просто отправить изображение с одного компьютера на другой и надеяться, что всё заработает.
Читать дальше →

Декодирование JPEG для чайников

Reading time9 min
Views282K

[FF D8]


Вам когда-нибудь хотелось узнать как устроен jpg-файл? Сейчас разберемся! Прогревайте ваш любимый компилятор и hex-редактор, будем декодировать это:


Jpeg file in hex editor


Специально взял рисунок поменьше. Это знакомый, но сильно пережатый favicon Гугла: Google favicon


Последующее описание упрощено, и приведенная информация не полная, но зато потом будет легко понять спецификацию.


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


[FF D8] — маркер начала. Он всегда находится в начале всех jpg-файлов.


Следом идут байты [FF FE]. Это маркер, означающий начало секции с комментарием. Следующие 2 байта [00 04] — длина секции (включая эти 2 байта). Значит в следующих двух [3A 29] — сам комментарий. Это коды символов ":" и ")", т.е. обычного смайлика. Вы можете увидеть его в первой строке правой части hex-редактора.

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

Решаем проблему устаревания кэширующих серверов. Смотрим на телевизоре. Не VPN

Reading time3 min
Views106K

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

В качестве нашего «кэширующего» сервера будем использовать дешевый одноплатный компьютер MangoPi MQ-Quad (или другой аналогичный), стоимостью не более $29.

Читать далее

Обвиваем YouTube змеем, или как смотреть и скачивать видео с YouTube без VPN на чистом Python-е. Часть 1

Level of difficultyEasy
Reading time13 min
Views171K

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

В этой статье я хочу рассказать, как можно скачивать видео, аудио (1 часть статьи), плейлисты и целые каналы с YouTube (2 часть статьи) без использования VPN и на чистом Python-е. Сразу оговорка: VPN нам не понадобится, но мы сделаем собственное средство, которое будет решать "проблему с устаревшим и изношенным оборудованием Google Global Cache" (вы поняли, о чём я). Я думаю это средство будет особенно актуально сегодня, когда у многих россиян YouTube почти или совсем не работает.

Читать далее

Криптономикон: великий баян, привет из 90-х и лучшая книга о технарях

Reading time7 min
Views61K
Эту книгу я перечитывал много раз, и в переводе, и в оригинале. Настолько много, что, рассказывая о ней, чувствую себя немного странно. Примерно как Капитан Очевидность, который вдруг осознал, что он Капитан.

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

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

Трудно научить криптографической безопасности даже умного человека. Особенно умного.

Названный одним из характерных представителей стиля «киберпанк», Нил Стивенсон в «Криптономиконе» возвращается к реальности дня сегодняшнего и даже уходит в прошлое (вплоть до древних греков), в попытке оценить роль «технарей» в современном обществе. Книга была опубликована в 1999 году, и 17 лет назад казалось, что автор испытывает чрезмерный оптимизм по поводу влияния компьютеров и интернета на человечество, рисует реалистичную, но в чем-то утопию. Сейчас так уже не кажется. Милые артефакты 20-го века вроде Windows NT и BeOS совершенно не мешают актуальности вселенной «Криптономикона». Технологии ушли вперед, но люди… Люди почти не изменились, как в хорошем смысле, так и в плохом.

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

Игра в прятки с оптимизатором. Гейм овер, это CTE PostgreSQL 12

Reading time6 min
Views38K


Эта статья — продолжение рассказа о новом в PostgreSQL 12. Мы уже разобрали SQL/JSON (патч JSONPath) в статье «Что заморозили на feature freeze 2019. Часть I. JSONPath», теперь очередь CTE.

CTE


CTE это Common Table Expression — общие табличные выражения, их еще называют конструкциями с WITH. Фактически это создание временных таблиц, но существующих только для одного запроса, а не для сессии. К ним можно обращаться внутри этого запроса. Такой запрос хорошо читается, он понятен, его легко видоизменять, если потребуется. Это очень востребованная вещь, и она в PostgreSQL давно.

Но удобства могут обойтись дорого. Проблемы связаны с материализацией выражения после AS внутри конструкции WITH… AS (). Его еще называют внутренним выражением и вычисляют перед тем, как начать вычисление остального, его нельзя встроить в запрос верхнего уровня (no inlining). Планирование этого выражения происходит без учета остальной части запроса. Такое поведение называют барьером для оптимизации, или fencing. Кроме того, сама материализация требует под себя work_mem. И если выборка большая, то начинаются проблемы (об этом, например, есть в докладе Ивана Фролкова на PGConf 2019).
Читать дальше →

VPN: последний выпуск. Завтра об этом писать нельзя

Level of difficultyEasy
Reading time5 min
Views171K

Закрываем двери в свободный интернет: завтра, 30 ноября, вступает в силу закон №406-ФЗ запрещающий распространять информацию о способах обхода блокировок.

Кто знает о визитах на Pornhub?
- Какие именно данные сохраняют провайдеры о нас — с VPN и без.
- Что нового запретят обсуждать о VPN (и почему).
- VLESS — замена VPN, которую ещё можно упомянуть (пока).
- ТРИ способа как вычислить, что вы зашли через прокси или VPN.

Читайте, пока это ещё не заблокировали!

Читать далее

Я тебя найду и позвоню

Level of difficultyEasy
Reading time6 min
Views177K

Абсолютно легальные инструменты за смешные деньги могут позволить вам: звонить всем активным клиентам ваших конкурентов, построить десяток эффективных мошеннических схем, или даже позвонить предполагаемому любовнику вашей девушки/жены, а заодно проверить где она была вчера вечером! Обнаружил я это в ходе одного из расследований утечек заявок клиентов. И я твердо уверен, что такого быть не должно. Инструмент использующийся в статье эффективнее всех утечек вместе взятых, нашими данными не должны так легко легально торговать практически в режиме онлайн. Можно найти любого и позвонить любому из нас. Почему и как это работает, какие риски это несет и как этому противодействовать?

Расскажу далее.

Пишем свою Diffusion модель с нуля

Level of difficultyMedium
Reading time12 min
Views16K

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

Меня зовут Юра, я - разработчик, фаундер и ML энтузиаст, также пишу свои заметки в своем ТГ канале. Я решил разобраться и понять, как устроена Diffusion модель внутри, понять ее математику и постараться объяснить и разложить ее на пальцах. Ну и конечно пописать код, который (спойлер) заработал. На гифке изображены примеры итоговых картинок на моей финальной модели.

Если вам тоже интересно, то читайте дальше

Читать далее

Моя петиция EB-1A на грин-карту талантов, одобренная с первой попытки

Level of difficultyMedium
Reading time43 min
Views24K

Моя полная петиция на грин-карту по программе талантов EB-1A. 557 страниц, 7 критериев, одобрена с первой попытки без RFE. Все мои рассуждения по выбору критериев, подготовке и описанию доказательств, переводам, оформлению и отправке.

Читать далее

constexpr Game of Life

Level of difficultyMedium
Reading time20 min
Views22K

В C++ уже больше 10 лет существует constexpr, который позволяет программисту ушло возложить часть вычислений на компилятор. В свое время это взорвало мне мозг, ведь компилятор может посчитать какие-то достаточно сложные вещи еще до запуска программы!

В какой-то момент я подумал: если компилятор сможет сам посчитать все за тебя, то зачем тогда тебе вообще рантайм? Что ты там будешь делать — ответ выводить что ли? Глупости какие-то. Это неспортивно.

На этом моменте и зародился мой челлендж:

"Без рук" или "даже не думай запускать exe-файл"

Челлендж принят!

Неочевидные для начинающих тонкости Postgres

Level of difficultyMedium
Reading time15 min
Views47K

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

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

За исключением… Postgres.

Не потому, что официальная документация несовершенна (она прекрасна!), просто её очень много. Если распечатать её как стандартный PDF на бумаге формата Letter, то получится 3206 страниц (для текущей версии 17)1. Разработчик-джун вряд ли сможет сесть и прочитать её с начала до конца.

1. Если печатать на бумаге A4, то получится 3024 страницы; наверно, это ещё один аргумент в пользу стандарта.

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

Надеюсь, это упростит процесс освоения для читателей моей статьи.

Стоит отметить, что многое из описанного может быть применимо и к другим системам управления базами данных (СУБД) SQL и вообще к базам данных в целом, но я слабо знакома с ними, так что не буду утверждать с уверенностью.
Читать дальше →

Транзакции в Spring: сила управления данными

Level of difficultyMedium
Reading time8 min
Views5.6K

Привет, Хабр! Сегодня разберемся с транзакциями в Spring так, чтобы всё стало ясно и понятно: зачем они нужны, как работают и как их настроить так, чтобы данные были под контролем.

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

В Spring управление транзакциями стало простым и интуитивно понятным благодаря хорошим инструментам и абстракциям. Рассмотрим, как это всё работает.

Читать далее

Обзор способов защиты контейнеров Docker: от простого к сложному

Level of difficultyMedium
Reading time11 min
Views14K

Безопасность Docker — один из главных вопросов, занимающих умы DevOps‑инженеров и аналитиков безопасности. Согласно последним отчетам Snyk и Red Hat более 44% всех контейнеров, которые находятся в коммерческой эксплуатации, содержат уязвимости, даже несмотря на доступность обновления базовых образов. Угроза не ограничивается выявленными недостатками — хакеры беспрерывно ищут новые векторы атак на системы, построенные с использованием Docker и Kubernetes.
Читать дальше →

Скачиваем и смотрим YouTube на своём хостинге

Level of difficultyMedium
Reading time6 min
Views55K

У пользователей в РФ возникли затруднения с доступом к YouTube. Причины известны, как и варианты решения. Однако это битва кота и мыши: ТСПУ эволюционируют, и популярные инструменты часто перестают работать.

Чуть надёжнее использовать свою инфраструктуру в зарубежном дата-центре. Так можно скачать контент с YouTube на свой сервер, а оттуда раздать трафик внутри РФ любым удобным способом без всяких «замедлений».

Получается что-то вроде зарубежного прокси для YouTube. И это совершенно легально (пока).

Читать далее

ByeDPI + Redsocks на OpenWRT: дарим свободу локальной сети на дровах (на примере ASUS RT-N12 ROM/ОЗУ: 8/32 Мб)

Level of difficultyEasy
Reading time6 min
Views108K

Решение проблемы зачастую упирается в использование роутеров с ограниченными ресурсами, таких как ASUS RT-N12 VP B1 с ROM/ОЗУ 8/32 Мб. В этой статье я расскажу, как настроить связку ByeDPI и Redsocks на роутере с OpenWRT, даже если ваш роутер далеко не топ по характеристикам.

## Зачем нужны ByeDPI и Redsocks?

ByeDPI — это утилита для обхода DPI (Deep Packet Inspection), которая изменяет сетевые пакеты таким образом, чтобы они не распознавались системами фильтрации трафика.

Redsocks — это прокси-инструмент, который перенаправляет трафик через SOCKS или HTTP прокси, даже если приложение не поддерживает прокси напрямую.

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

Ставим ByeDPI и Redsocks на OpenWRT

Information

Rating
5,797-th
Location
Санкт-Петербург и область, Россия
Registered
Activity