Pull to refresh
2
0
Дмитрий @dastanaron_dev

Программист

Send message

Zip-файлы: история, объяснение и реализация

Reading time76 min
Views97K


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

В статье очень подробно объясняется, как работают Zip-файлы и схема сжатия: LZ77-сжатие, алгоритм Хаффмана, алгоритм Deflate и прочее. Вы узнаете историю развития технологии и посмотрите довольно эффективные примеры реализации, написанные с нуля на С. Исходный код лежит тут: hwzip-1.0.zip.
Читать дальше →
Total votes 133: ↑132 and ↓1+174
Comments45

Zenity на службе у системного администратора

Reading time5 min
Views34K
Задумала как-то одна компания перейти на ПО свободное. И скачали себе линукс на все компьютеры, и сервер с дисками заморскими поставили, и учетные записи для пользователей сделали. И приказал начальник чтобы все сотрудники поставили себе пароли заковыристые. А они хоть и послушали рассказы о том, что за зверь перед ними, а вот где поменять пароль не знают. Или в настройках найти не могут. А от консоли бегут сломя голову. И начинают бегать к админу со словами «админ-админушка, помоги найти кнопочку», и начинает админушка бегать да нервничать, от дум важных отвлекается...

Не секрет, что для многих пользователей (особенно не связанных напрямую с IT) переход на новую операционную систему и ПО часто проходит болезненно. И во многом это связано с привычками. Люди запоминают что где находится на их компьютере и, если все переставить — они теряются. В результате многие простые действия могут вызывать сложности, такие как потеря времени и нервов.

Появилась идея: а что, если для задачи, требующей незамедлительного вмешательства пользователя (вроде замены пароля из былины выше), еще не знакомого с интерфейсом системы, ему явно дать окно с возможностью эту задачу решить? В поисках простого решения я наткнулся на zenity.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments15

Создаем установочные пакеты для macOS средствами системы

Reading time3 min
Views8.1K

Как-то так вышло, что раньше я довольно скептически относился к macOS, поскольку не имел возможности поработать с ней в более-менее устоявшейся корпоративной среде (т.е. не когда на всю компанию в 500-600 человек есть 2 мака, и те у генерального с его замом, да еще и с виндой в буткемпе). Но несколько лет назад мне повезло познакомиться с очень масштабной гетерогенной средой, показавшей, что в современных компаниях macOS не только успешно сосуществует с привычной Windows, но иногда и превалирует над ней в общей доле клиентских машин.

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments2

7 производителей печатных плат вместо JLCPCB. Где можно заказать платы в 2023 году

Level of difficultyEasy
Reading time6 min
Views71K

Привет, Хабр! Я – Дима, в компании отвечаю за закупку компонентов. Долгове время у нас было два поставщика печатных плат. Один из них вышеупомянутый JLCPCB. После того, как он ушел из России, пришла проблема откуда не ждали – второй поставщик начал подводить по срокам и отгружать откровенный брак. 

Встал вопрос о поиске новых производителей. Я пытался найти в сети честные отзывы, но их либо не было, либо были заказные. За год я попробовал работать с 7 производителями. Ниже делюсь своими впечатлениями: плюсы и минусы.

Для удобства в конце привожу сводную таблицу с кратким описанием преимуществ и недостатков производителей.

Читать далее
Total votes 48: ↑48 and ↓0+48
Comments67

Go в браузер. Создание веб-приложений с использованием Web Assembly на Go

Reading time6 min
Views17K

Технология WebAssembly появилась относительно недавно (в 2015 году) и позиционировалась как альтернатива JavaScript для выполнения в среде браузера с максимально достижимой производительностью. Приложение на WebAssembly может использовать все возможности, доступные в "песочнице" браузера для JS (доступ к Document Object Model, дополнительным классам HTML5), но при этом может быть изначально написано на других технологиях разработки и скомпилировано в формат байт-кода WASM, предоставляя свои интерфейсы сценариям на JavaScript.

Наиболее известным набором инструментов для компиляции в wasm32 является emscripten, с его помощью можно скомпилировать приложение, написанное на C/C++ или на любом языке, имеющим frontend-компилятор для LLVM. При этом компилятор подменяет вызовы OpenGL и POSIX на соответствующие аналоги в браузере, что например используется при компиляции библиотеки skia для браузера (canvaskit) из исходного кода на C++, а также портирование существующих библиотек (например, ffmpeg или opencv). Но некоторые языки программирования поддерживают wasm32 как одну из целевых платформ, среди которых можно выделить Kotlin (Native) и Go. В этой статье мы обсудим общие вопросы о запуске приложений Go в среде браузера и использование библиотеки Vecty для создания веб-приложений на основе переиспользуемых компонентов.

Читать далее
Total votes 15: ↑12 and ↓3+9
Comments10

Chrome Headless против cloudflare JS challenge

Level of difficultyMedium
Reading time41 min
Views24K

Автоматизация сбора информации с различных ресурсов - обычная задача для людей разных сфер деятельности. Жаль, что не всегда бывает достаточно сделать простой GET запрос и разобрать полученный html. Веб-сайты, с которых собираются данные, принимают защитные меры для предотвращения автоматизированных запросов. Одной из таких мер является использование cloudflare. Сегодня мы посмотрим, как cloudflare выявляет ботов через javascript и коснёмся темы деобфускации скриптов.

Читать далее
Total votes 82: ↑82 and ↓0+82
Comments6

Бенчмарки в Go

Reading time4 min
Views67K

Бенчмарки


Бенчмарки это тесты для производительности. Довольно полезно иметь их в проекте и сравнивать их результаты от коммита к коммиту. В Go есть очень хороший инструментарий для написания и запуска бенчмарков. В этой статье я покажу, как использовать пакет testing для написания бенчмарков.
Читать дальше →
Total votes 30: ↑27 and ↓3+24
Comments2

Bash Auto Completion в Linux

Level of difficultyEasy
Reading time5 min
Views17K

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

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

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

Читать далее
Total votes 29: ↑27 and ↓2+29
Comments6

Играем в Mortal Kombat с помощью TensorFlow.js

Reading time18 min
Views19K
Экспериментируя с улучшениями для модели прогнозирования Guess.js, я стал присматриваться к глубокому обучению: к рекуррентным нейронным сетям (RNN), в частности, LSTM из-за их «необоснованной эффективности» в той области, где работает Guess.js. В то же время я начал играться с свёрточными нейросетями (CNN), которые тоже часто используются для временных рядов. CNN обычно используют для классификации, распознавания и обнаружения изображений.


Управление MK.js с помощью TensorFlow.js

Исходный код для этой статьи и МК.js лежат у меня на GitHub. Я не выложил набор данных для обучения, но можете собрать свои собственные и обучить модель, как описано ниже!
Читать дальше →
Total votes 68: ↑65 and ↓3+62
Comments11

Машинное обучение с Node.js при помощи библиотеки Tensorflow.js

Reading time10 min
Views31K
Привет всем, коллеги!

Возможно, поклонники библиотеки Tensorflow, уже заметившие у нас в предзаказе эту книгу, также присматривались к возможностям машинного и глубокого обучения в браузере, тем более, что тему не обошел вниманием и сам Франсуа Шолле. Интересующихся приглашаем под кат, где рассказано, как при помощи библиотеки Tensorflow.js распознаются изображения.
Читать дальше →
Total votes 19: ↑18 and ↓1+17
Comments8

Wireshark — приручение акулы

Reading time10 min
Views1.1M


Wireshark — это достаточно известный инструмент для захвата и анализа сетевого трафика, фактически стандарт как для образования, так и для траблшутинга.
Wireshark работает с подавляющим большинством известных протоколов, имеет понятный и логичный графический интерфейс на основе GTK+ и мощнейшую систему фильтров.
Кроссплатформенный, работает в таких ОС как Linux, Solaris, FreeBSD, NetBSD, OpenBSD, Mac OS X, и, естественно, Windows. Распространяется под лицензией GNU GPL v2. Доступен бесплатно на сайте wireshark.org.
Установка в системе Windows тривиальна — next, next, next.
Самая свежая на момент написания статьи версия – 1.10.3, она и будет участвовать в обзоре.

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

Начинаем плаванье


Для начала захвата достаточно выбрать свой сетевой интерфейс и нажать Start.
Читать дальше →
Total votes 207: ↑202 and ↓5+197
Comments60

KPHP спустя 2 года

Reading time7 min
Views16K

Ровно два года назад — в ту же самую дату и в то же самое время — я опубликовал статью «ВКонтакте снова выкладывает KPHP».

Сегодня рассказываю, куда мы продвинулись за эти два года: про язык, рантайм, использование KPHP вне ВКонтакте, другие open-source проекты и февраль 2022-го.

Читать далее
Total votes 65: ↑60 and ↓5+77
Comments25

Парсинг сайта кинотеатра на Golang

Reading time3 min
Views26K
Всем привет, в этой статье мы рассмотрим небольшой пример кода, написанный для сбора данных с сайта на популярном сегодня языке программирования Go.

Эта статья будет особенно интересна тем, кто много слышал о Go, но пока еще не попробовал его самостоятельно.

Для одного из внутренних проектов, нам нужно было собрать данные о фильмах, которые идут в прокате и расписании показов, сейчас рассмотрим первую (простейшую) версию парсера, с которой все и началось.
Читать дальше →
Total votes 5: ↑4 and ↓1+7
Comments0

Изучаем структуры MBR и GPT

Reading time9 min
Views176K
Для работы с жестким диском его для начала необходимо как-то разметить, чтобы операционная система могла понять в какие области диска можно записывать информацию. Поскольку жесткие диски имеют большой объем, их пространство обычно разбивают на несколько частей — разделов диска. Каждому такому разделу может быть присвоена своя буква логического диска (для систем семейства Windows) и работать с ним можно, как будто это независимый диск в системе.

Способов разбиения дисков на разделы на сегодняшний день существует два. Первый способ — использовать MBR. Этот способ применялся еще чуть ли не с появления жестких дисков и работает с любыми операционными системами. Второй способ — использовать новую систему разметки — GPT. Этот способ поддерживается только современными операционными системами, поскольку он еще относительно молод.
Читать дальше →
Total votes 38: ↑37 and ↓1+36
Comments32

Авторизация клиентов в nginx посредством SSL сертификатов

Reading time4 min
Views139K

Введение:


Потребовалось мне тут как-то написать небольшой API, в котором необходимо было помимо обычных запросов принимать запросы с «высокой степенью секретности».
Не я первый с этим столкнулся и мир давно уже использует для таких вещей SSL.

Поскольку на моём сервере используется nginx, то был установлен модуль SSL
Гугл не выдал ни одного работоспособного howto, но информация в сети есть по частям.

Итак, пошаговое руководство по настройке nginx на авторизацию клиентов через SSL-сертификаты.
Читать дальше →
Total votes 41: ↑34 and ↓7+27
Comments32

Правила перезаписи PostgreSQL

Reading time7 min
Views11K

Представления (Views) — это не совсем то, о чём вы можете подумать. В этой статье мы разберём правила перезаписи PostgreSQL, как они работают, что они могут и чего не могут делать.

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

Фактически правила перезаписи — это то, как представления реализованы в PostgreSQL. Когда вы обращаетесь к представлению, ваш запрос фактически переписывается в соответствии с правилом, которое было создано при создании представления. По сути, представление — это, как мы сейчас увидим, правило перезаписи.

Однако не стоит расслабляться — некоторые условности всё же есть. Например, эти правила перезаписи сильно отличаются от плагинов перезаписи MySQL и в целом являются более комплексными.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments2

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

Reading time9 min
Views46K

Каждый Ангуляр разработчик видел декораторы в тайпскрипт коде. Их используют, чтобы описать Модули, сконфигурировать Dependency Injection или настроить компонент. Другими словами, декораторы используются, чтобы описать дополнительную информацию, или метаданные, для фреймворка или компилятора (в случае Ангуляра). При чем, Ангуляр лишь один из примеров. Существуют многие другие библиотеки, использующие декораторы для простоты и наглядности кода, как декларативный подход. Как .NET разработчик в прошлом, я вижу много сходства между TS декораторами и .NET аттрибутами. Наконец, набирающий популярность NestJS фреймворк для бекенд приложений (абстракция над Node), также построен на интенсивном использовании декораторов и декларативном подходе. Как это все работает и каким образом использовать декораторы в своем коде, чтобы он был более удобным и читабельным? Мы все понимаем, что после компиляции TS кода мы получаем Javascript код. В котором нет понятия декоратор, как и многих других Typescript особенностей. Поэтому для меня наиболее интересным является вопрос, во что превращается декоратор после компиляции. Занимаясь этим вопросом, я сделал выступление на митапе в Минске и хочу поделиться статьей.


Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments33

NestJS. Загрузка файлов в S3 хранилище (minio)

Reading time6 min
Views16K
NestJS — фреймворк для создания эффективных, масштабируемых серверных приложений на платформе Node.js. Вы можете встретить утверждение, что NestJS является платформо-независимым фреймворком. Имеется в виду, что он может работать на базе одного из двух фрейморков по Вашему выбору: NestJS+Express или NestJS+Fastify. Это действительно так, или почти так. Эта платформо-независимость заканчивается, на обработке запросов Content-Type: multipart/form-data. То есть практически на второй день разработки. И это не является большой проблемой, если Вы используете платформу NestJS+Express — в документации есть пример работы для Content-Type: multipart/form-data. Для NestJS+Fastify такого примера нет, и примеров в сети не так уж и много. И некоторые из этих примеров идут по весьма усложненному пути.

Выбирая между платформой NestJS+Fastify и NestJS+Express я сделал выбор в сторону NestJS+Fastify. Зная склонность разработчиков в любой непонятной ситуации вешать на объект req в Express дополнительные свойства и так общаться между разными частями приложения, я твердо решил что Express в следующем проекте не будет.
Читать дальше →
Total votes 3: ↑2 and ↓1+2
Comments6

Мультиформатные баннеры в Tinkoff.ru и подход к верстке адаптивных баннеров в Google AdWords

Reading time7 min
Views9.6K
Сегодня я расскажу о том, как удивительно устроены адаптивные баннеры в Google AdWords и что делать, если для рекламной кампании нарисовали только один баннер.

image

Реализация мультиформатного баннера, шаблон Leaderboard 1.

Мы обратили внимание, что проблема адаптивного баннера уже решена для медийных баннеров в AdWords, и детально исследовали эту технологию. Обнаружили много интересного, подробности — под катом.
Читать дальше →
Total votes 59: ↑30 and ↓29+1
Comments18

Information

Rating
Does not participate
Location
Егорьевск, Москва и Московская обл., Россия
Date of birth
Registered
Activity