Search
Write a publication
Pull to refresh
-2
0
Алексей Дебелов @AlienJust

Разработчик ПО

Send message

Венеция: дикий профит на паре голых скал

Reading time13 min
Views40K
В посте про транспортную систему Венеции я обещал чуть больше рассказать про сам город и острова. Поэтому ниже — минутка пятничного урбанизма.



Примерно в 452 году зажиточные крестьяне убегали от варваров под предводительством Аттилы, бродящих толпами по материку. Лагуна мелкая, но для переправы нужны лодки, потому что проплыть 6 километров на коне как-то сложно. Ну и Аттила законно подозревал, что десантирование на острова — далеко не его основной бизнес.

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


Эту картинку NASA открыла для Вики, а я добавил выделение Венеции

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

Оставалась только одна проблема — вокруг был тотальный голяк. То есть можно было рыбачить, но зажиточные крестьяне всё же хотели большего. Ну и дальше пошла история Серениссимы, Светлейшей республики. Одной из самых странных стран в истории человечества: фактически, без территорий, но зато с обширными морскими владениями.
Читать дальше →

9 лучших опенсорс находок за ноябрь 2019

Reading time2 min
Views20K

Доброй зимы, дамы и господа. Подготовил для вас подборку самых интересных находок из опенсорса за ноябрь 2019.


За полным списком новых полезных инструментов, статей и докладов можно обратиться в мой телеграм канал @OpensourceFindings (по ссылке зеркало, если не открывается оригинал).


В сегодняшнем выпуске.
Технологии внутри: Rust, TypeScript, JavaScript, Go, Python.
Тематика: веб разработка, инструменты для QA, работа с данными, инструменты разработчика и администратора.


Прошлый выпуск.

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

STM32 USB Mass Storage Bootloader

Reading time12 min
Views77K
Известно, что софт можно дописывать вечно, а всякого рода недочёты на плате полностью исправляются ревизии так к третьей. И если с железом уже ничего не поделаешь, то для обновления микропрограмм придумали неплохой способ обхода ограничений пространства и времени — Bootloader.

Загрузчик — это удобно и полезно, не правда ли? А если загрузчик собственной реализации, то это еще более удобно, полезно и гибко и не стабильно. Ну и конечно же, очень круто!

Так же, это прекрасная возможность углубиться и изучить особенности используемой вычислительной машины — в нашем случае микроконтроллера STM32 с ядром ARM Cortex-M3.

На самом деле, загрузчик — это проще, чем кажется на первый взгляд. В доказательство, под cut'ом соберём свой собственный USB Mass Storage Bootloader!

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

Процесс компиляции программ на C++

Reading time5 min
Views237K

Цель данной статьи:


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

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

Голливудский принцип (IoC)

Reading time6 min
Views7.3K
В этой статье я постараюсь рассказать о принципе проектирования, называемом Inversion of Control / Инверсия управления (IoC), называемом еще Голливудским принципом. Покажу, какое отношение это имеет к принципу подстановки Барбары Лисково (LSP), а также внесу свою лепту в священную войну private vs protected.


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

Монада «Reader» через async/await в C#

Reading time9 min
Views7K


В моей предыдущей статье я описал, как реализовать паттерн "Монада Maybe" с помощью операторов async / await. В этот раз я расскажу, как реализовать другой популярный шаблон проектирования "Монада Reader", используя те же приемы.


Этот шаблон позволяет неявно передать некий контекст в иерархию вызовов функции без использования параметров или полей классов, и его можно рассматривать как еще один способ реализации внедрения зависимости (Dependency Injection). Например:

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

Создание игры для SEGA Mega Drive/Genesis в 2019 году

Reading time12 min
Views50K
image

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

В прошлом году я написал статью о создании игры для Game Boy. Сегодня я поделюсь своим опытом создания трёх игр для домашней консоли SEGA Mega Drive/Genesis. Вероятно, благодаря современным мощным инструментам, это самая простая машина для разработки homebrew-игры. Например, мне даже удалось создать (очень простую) игру всего за 60 минут, и она на самом деле запускается на консоли!

NILFS2 — пуленепробиваемая файловая система для /home

Reading time7 min
Views27K


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

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

Для решения подобных проблем прекрасно подойдёт файловая система NILFS2.
Читать дальше →

7 бесплатных курсов для разработчиков от Microsoft

Reading time5 min
Views83K
Привет, Хабр! Сегодня мы начинаем серию статей, в которую войдет 5 подборок бесплатных обучающих курсов от компании Microsoft. В этой статье у нас самые крутые курсы для разработчиков, которые сильнее всего нравятся программистам.

Кстати!

  • Все курсы бесплатные (вы даже сможете попробовать платные продукты бесплатно);
  • 6/7 на русском языке;
  • Начать обучение можно мгновенно;
  • По окончании вы получите бейдж об успешном прохождении обучения.

Присоединяйтесь, подробности под катом!

Новая серия статей


Следующая серия статей, начало 2020 года


Эта серия статей, 2019 год


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

Как сделать ваш HTML отзывчивым, добавив одну строку кода на CSS

Reading time4 min
Views65K
Привет, Хабр! представляю вашему вниманию перевод статьи «How to make your HTML responsive by adding a single line of CSS» автора Per Harald Borgen.



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

Самое крутое, что для добавления отзывчивости потребуется написать одну строчку кода на CSS
Читать дальше →

Программы для непрерывного мониторинга глюкозы крови для Windows

Reading time5 min
Views7.5K
Статья больше предназначена людям, идущим по жизни с сахарным диабетом 1 типа, которые знакомы с технологией CGMS (система непрерывного мониторинга глюкозы крови) и хотят поменьше отвлекаться на контроль за уровнем глюкозы в крови.
Читать дальше →

Практический опыт обновления MySQL 5.7 до версии 8.0

Reading time3 min
Views37K
image

Недавно мы обновили свои сервера с MySQL 5.7 на 8.0.

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

Зачем айтишнику личный бренд

Reading time13 min
Views34K
Слово «бренд» часто связывают с материальной выгодой. HR-бренд позволяет эффективнее нанимать, а личный бренд — наниматься. А еще у личного бренда есть одно неочевидное преимущество, которое никак не связано с качеством/посылом/стратегией личного бренда. Неважно, знают вас как щепетильного перфекциониста или любителя хайпа, вы получаете свои плюшки и становитесь лучшим программистом.



Под катом бытовая нейрофизиология для айтишников и традиционно ошибающийся здравый смысл.
Читать дальше →

WebAssembly: что и как

Reading time9 min
Views152K


Эта статья основана на моём выступлении на конференции ITSubbotnik, прошедшем 2 ноября 2019 года в Москве.


Вообще я бэкенд программист, но меня заинтересовала эта технология, она позволяет использовать мои знания бэкенда на фронте.


Проблема


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

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

Выявляем процессы с дисковой активностью в Linux

Reading time13 min
Views85K
TL;DR: статья рассказывает об удобном, быстром и надежном способе определения Linux-программ, записывающих данные на диск, что помогает в выявлении большой или аномально частой нагрузки на дисковую подсистему, а также позволяет оценить накладные расходы файловой системы. Это особенно актуально для SSD в ПК, EMMC и Flash-памяти в одноплатных компьютерах.
В ходе написания статьи обнаружилось, что запись нескольких килобайт данных на файловую систему BTRFS приводит к записи 3 мегабайт реальных данных на диск.

Введение

«Ой, ерунда, ячейки памяти на современных SSD выйдут из строя через десятки лет обычного использования, не стоит об этом беспокоиться, и уж тем более переносить swap, виртуальные машины и папку профиля браузера на HDD» — типичный ответ на вопрос о надежности твердотельных накопителей c гарантированными ≈150 TBW. Если прикинуть, сколько типичное ПО может писать данных, то кажется, что 10-20 ГБ в сутки — уже большая цифра, пусть будет максимум 40 ГБ, куда уж больше. При таких цифрах ответ вполне разумен — нужно 10 лет, чтобы достичь гарантированных значений по количеству перезаписи ячеек, при 40 ГБ записанных данных ежедневно.
Однако за 6 лет я пользуюсь уже третьим SSD: у первого вышел из строя контроллер, а второй начал перемещать данные между ячейками несколько раз в день, что оборачивалось 30-секундными задержками в обслуживании записи.

После 7 месяцев использования нового SSD я решил проверить количество записанных данных, как их сообщает сам диск через SMART.
19.7 ТБ.
Всего за 7 месяцев я использовал 13% от гарантированного количества записанных данных, притом, что он настроен в соответствии с рекомендациями по выравниваю разделов и настройке ФС, swap у меня почти не используется, диски виртуальных машин размещены на HDD!
Читать дальше →

Не учите фреймворки, учите архитектуру

Reading time5 min
Views199K
Некоторое время назад у меня состоялся интересный разговор, коллега активно защищал Angular, говорил, что тот ускоряет веб-разработку. Я более десяти лет разрабатываю сложные web-сервисы, работал в Microsoft, в Spotware Systems на Кипре, сейчас создаю приложение для стартапа из Кремниевой долины, и в общем то слежу за трендами. Однако почувствовал себя динозавром, потому что не видел смысла использовать фронтэнд-фреймворки до того момента, а оказалось, что это уже мейнстрим. Шёл 2014-й год, я погрузился в мир Angular, Knockout и Backbone, что из этого вышло, почему я от них в итоге отказался и рекомендую коллегам сделать то же самое – под катом.
Читать дальше →

«Криптосистемы-протоколы»: Диффи—Хеллмана, Эль-Гамаля, MTI/A(0), STS

Reading time7 min
Views29K
Предисловие
Данный текст будет являться одной из переписанных глав для учебного пособия по защите информации кафедры радиотехники и систем управления, а также, с этого учебного кода, кафедры защиты информации МФТИ (ГУ). Полностью учебник доступен на github (см. также draft releases). На Хабре планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам. Предыдущие разделы главы «Криптографически протоколы»: 1, 2, 3

Как и создатели трёхпроходных протоколов из предыдущего раздела, авторы следующих алгоритмов считали их не просто математическими конструкциями, обеспечивающие некоторую элементарную операцию (например, шифрование с открытым ключом), но пытались вокруг одной-двух формул построить законченную систему распространения ключей. Некоторые из этих конструкций, преобразовавшись, используются до настоящего времени (например, протокол Диффи-Хеллмана), некоторые — остались только в истории криптографии и защиты информации.

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

Юрий Рябцев: «Первый перехват баллистической ракеты — событие, примерно равное полету Гагарина»

Reading time19 min
Views69K


Доктор технических наук, профессор Юрий Рябцев — выпускник МФТИ, многолетний сотрудник ИТМиВТ и ИНЭУМ. В 1976 году он стал лауреатом государственной премии за разработку вычислительного комплекса для С-300, в 1986-м — лауреатом Ленинской премии за разработку «Эльбруса-2». В интервью из нашей исторической серии Юрий Степанович рассказывает, как готовили инженеров для передовых оборонных программ, объясняет, как в СССР взаимодействовали институты и целые отрасли, делится мнением о крупных советских проектах в области ИТ.

Организация простой архитектуры в андроид-приложении со связкой ViewModel+LiveData, Retrofit+Coroutines

Reading time6 min
Views20K
Без долгих вступлений расскажу, как можно быстро и просто организовать удобную архитекруту вашего приложения. Материал будет полезен тем, кто не очень хорошо знаком с mvvm-паттерном и котлиновскими корутинами.

Итак, у нас стоит простая задача: получить и обработать сетевой запрос, вывести результат во вью.

Наши действия: из активити (фрагмента) вызываем нужный метод ViewModel -> ViewModel обращается к ретрофитовской ручке, выполняя запрос через корутины -> ответ сетится в лайвдату в виде ивента -> в активити получая ивент передаём данные во вью.
Читать дальше →

Компиляция программ с помощью Notepad++

Level of difficultyHard
Reading time17 min
Views61K

Компиляция программ при помощи текстового редактора на примере Notepad++




Цель статьи: Научиться компилировать программы из командной строки. Научиться компилировать из текстового редактора Notepad++ (вернее научиться писать скрипты и связывать их), создавать скрипты и макросы, устанавливать системные переменные.

Сам текстовый редактор ничего не компилирует и не запускает. Также как и IDE не компилирует. Компиляция происходит с помощью компилятора. Выполнение производится некоторой средой выполнения. Это может быть интерпретатор команд или среда выполнения.
При компиляции программы на C# упаковываются в сборки. Код на языке IL автоматически преобразуется в код для конкретного процессора. Что касается языка java, то скомпилированные файлы .class выполняется виртуальной машиной Java. Файлы .java компилируются в бай-код, то есть некоторый промежуточный код. Компиляция в exe файл тоже производится компилятором.

.EXE (сокр. англ. executable — исполнимый) — расширение исполняемых файлов, применяемое в операционных системах DOS, Windows, Symbian OS, OS/2 и в некоторых других, соответствующее ряду форматов. Процесс получения exe файла состоит из следующих этапов: препроцессинг, ассемблирование, компилирование, линковка.

ОUT файлы — исполняемые файлы для UNIX-подобных операционных систем.
Файл может хранить исполняемый код, общую динамическую библиотеку или объектный код.

Терминология

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

Information

Rating
Does not participate
Location
Екатеринбург, Свердловская обл., Россия
Date of birth
Registered
Activity