Pull to refresh
3
0
Send message

Репликация первого в мире цифрового голосового скремблера

Reading time5 min
Views12K

Этот аналогово-цифровой преобразователь 1943 года обеспечил радиосвязь, которую невозможно расшифровать



Фото: Jon D. Paul

В начале 1940-х немецкая разведка могла декодировать радиопереговоры американцев, несмотря на частотное скремблирование. После Перл-Харбора главным приоритетом стала разработка невзламываемого речевого скремблера, и его создали в 1943 году. В устройстве под названием SIGSALY впервые реализованы многие технологии, критически важные для современных цифровых медиа, включая систему связи с шумоподобными сигналами и первый случай использования кодово-импульсной модуляции (PCM) для передачи голоса.
Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments20

Выброшенные на помойку умные лампочки — ценный источник личной информации

Reading time3 min
Views242K


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

На свалку отправляются жесткие диски, полные данных, телефоны с контактными книжками и данными владельцев, а также умные устройства с сохраненными паролями и логинами. Поскольку редкий пользователь использует больше 2-3 логинов и паролей, то такие гаджеты могут стать для взломщиков источником ценной информации.
Читать дальше →
Total votes 86: ↑75 and ↓11+64
Comments153

Бикватернионы

Reading time15 min
Views18K
Если вы открыли данную статью, то наверняка уже слышали о кватернионах, и возможно даже используете их в своих разработках. Но пора подняться на уровень выше — к бикватернионам.

В данной статье даны основные понятия о бикватернионах и операции работы с ними. Для лучшего понимания работы с бикватернионами показан наглядный пример на Javascript с использованием Canvas.
Читать дальше →
Total votes 54: ↑53 and ↓1+52
Comments27

Разработка прибыльной Android игры двумя школьниками

Reading time6 min
Views196K
В данной статье хочу рассказать вам об опыте разработки одной простенькой игры под Android, которая многократно окупилась еще на стадии разработки!

image

Читать дальше →
Total votes 147: ↑138 and ↓9+129
Comments145

Как я делал свой учет финансов под андроид с блэкджеком, СМС и ФНС

Reading time9 min
Views45K

Введение


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


  • необходимость вводить все транзакции вручную. Притом, что доля безналичных платежей непреклонно росла, а банк на каждый чих шлет вам смс.
  • нет глобального взгляда на бюджет в длительном временном разрезе. То есть хотелось видеть таблицу, предположим, на год, где для каждого месяца было бы видно, сколько планировалось потратить и заработать и сколько вышло по факту, плюс итого по всем строкам и столбцам. Тут ориентиром был YNAB.
  • нет синхронизации между устройствами. Да был Flowzr, но как-то он мне не зашел.

Если вторая проблема решилась экспортом в CSV и всемогущим экселем, то с остальными нужно было что-то делать. Очевидный вариант — сменить программу. Поизучав предложение, пришел к выводу, что все приложения делятся на скудные по функционалу и на дорогие:) Тем временем шел 2015-й год и мне все сильнее хотелось изучить разработку под мобильные девайсы. Что ж, звезды сходятся, принято решение пилить свое приложение!


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



Читать дальше →
Total votes 46: ↑45 and ↓1+44
Comments67

Коллапс волновой функции: алгоритм, вдохновлённый квантовой механикой

Reading time11 min
Views31K
image

Алгоритм Wave Function Collapse генерирует битовые изображения, локально подобные входному битовому изображению.

Локальное подобие означает, что

  • (C1) Каждый паттерн NxN пикселей в выходных данных должен хотя бы раз встречаться во входных данных.
  • (Слабое условие C2) Распределение паттернов NxN во входных данных должно быть подобным распределению паттернов NxN в значительно большом количестве наборов выходных данных. Другими словами, вероятность встречи определённого паттерна в выходных данных должна быть близка к плотности таких паттернов во входных данных.
Читать дальше →
Total votes 91: ↑89 and ↓2+87
Comments7

Фракталы в простых числах

Reading time3 min
Views154K


Я обнаружил этот фрактал, когда разглядывал интерференцию волн на поверхности речки. Волна движется к берегу, отражается и накладывается сама на себя. Есть ли порядок в тех узорах, которые создаются волнами? Попробуем найти его. Рассмотрим не всю волну, а только вектор ее движения. «Берега» сделаем гладкими, для простоты эксперимента.

Эксперимент можно провести на обычном листке в клеточку из школьной тетради.
Читать дальше →
Total votes 190: ↑183 and ↓7+176
Comments33

Создание npm-пакета

Reading time2 min
Views62K


Типичная ситуация — в проекте существует некий модуль. Модуль развивается, становится самостоятельным элементом и копируется в другой проект. Потом еще один проект. И еще.
В каждом проекте модуль обновляется и улучшается, и, в какой-то момент, становится не понятно, где актуальная версия. Да ладно, «не понятно где актуальная версия»! Вполне возможно, что в каждом проекте у модуля будут свои модификации, в которые будет достаточно сложно привести в порядок для использования в следующем проекте.
Вполне можно ограничиться созданием отдельного репозитория для модуля, например на GitHub или Bitbucket. Но добавлять репозиторий как субмодуль для GIT — это путь к приключениям.
Но можно пойти дальше, и создать на основе такого модуля npm-пакет. Работать с такими пакетами очень просто. Установить npm-пакет можно с помощью команды npm install, а обновить с помощью npm update.
Подробности
Total votes 31: ↑24 and ↓7+17
Comments4

Успехи и неудачи при создании своего проекта (стартапа)

Reading time6 min
Views6.5K
Привет, друзья. Решил сегодня написать не о конкретном техническом решении, а о том, зачем эти технические решения вообще нужны. Слово «Стартап» уже порядком набило оскомину, поэтому буду употреблять «Свой проект». В статье будет много философии и аналитики. Так как без этого рассчитывать на успех сложно. Итак, сегодня я поделюсь с вами своим опытом, и опытом многих моих коллег, которые пытались спрыгнуть с корпоративной галеры и подняться на своем проекте.
Читать дальше →
Total votes 31: ↑20 and ↓11+9
Comments15

Правильно «готовим» прототип. Технологии прототипирования корпуса

Reading time5 min
Views19K
Как выбрать правильную технологию для прототипа корпуса любого устройства, какие головные боли возникают у разработчиков, когда виртуальная 3D-модель становится физической, и как их лечить? Смотрите инструкцию. Главное здесь — понять, что конкретная технология прототипирования предназначена для решения конкретной задачи.

image

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

Распознавание номеров. Практическое пособие. Часть 1

Reading time6 min
Views102K
Пример распознавания номерных знаков

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

И в один прекрасный день МВД Украины открыло доступ к реестру транспортных средств. Теперь по номерному знаку стало возможным проверять некоторую информацию про автомобиль (марку, модель, год выпуска, цвет и т.д. )! Скучная рутина линейного программирования померкла перед новой свехзадачей — считывать номера по всей базе фото и валидировать эти данные с теми, что указывал пользователь. Сами знаете как это бывает «глаза загорелись» — вызов принят, все остальные задачи на время стали скучны и монотонны… Мы принялись за работу и получили неплохие результаты, чем, собственно и решили поделиться с сообществом.
Для справки: на сайт AUTO.RIA.com, в день добавляется около 100 000 фото.
Датасаентисты давно уже знают и умеют решать подобные задачи, поэтому мы с dimabendera написали эту статью именно для программистов. Если вы не боитесь словосочетания «сверточные сети» и умеете писать «Hello World» на питоне — милости просим под кат…
Читать дальше →
Total votes 67: ↑66 and ↓1+65
Comments58

Осваиваем async/await на реальном примере

Reading time9 min
Views57K
Конструкция async/await представляет собой сравнительно новый подход к написанию асинхронного кода в JavaScript. Она основана на промисах и, в результате, не блокирует главный поток. Новшество этой конструкции заключается в том, что благодаря ей асинхронный код становится похожим на синхронный и ведёт себя подобным образом. Это открывает перед программистом замечательные возможности.

image

До появления async/await при разработке асинхронных механизмов программ использовались коллбэки и промисы. Автор материала, перевод которого мы публикуем сегодня, предлагает сначала вспомнить о том, как писать код по-старому, а потом, на реальном примере, изучить применение async/await.
Читать дальше →
Total votes 53: ↑45 and ↓8+37
Comments23

Методы наименьших квадратов без слёз и боли

Reading time10 min
Views50K


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

Итак, начнём. Давайте представим, что у меня есть триангулированная поверхность со сканом моего лица (на картинке слева). Что мне нужно сделать, чтобы усилить характерные черты, превратив эту поверхность в гротескную маску?



В данном конкретном случае я решаю эллиптическое дифференциальное уравнение, носящее имя Симеона Деми Пуассона. Товарищи программисты, давайте сыграем в игру: прикиньте, сколько строк в C++ коде, его решающем? Сторонние библиотеки вызывать нельзя, у нас в распоряжении только голый компилятор. Ответ под катом.
Читать дальше →
Total votes 54: ↑54 and ↓0+54
Comments58

Школа магии TypeScript: дженерики и расширение типов

Reading time7 min
Views46K
Автор статьи, перевод которой мы сегодня публикуем, говорит, что TypeScript — это просто потрясающе. Когда он только начал пользоваться TS, ему страшно нравилась та свобода, которая присуща этому языку. Чем больше сил программист вкладывает в свою работу со специфичными для TS механизмами — тем значительнее получаемые им выгоды. Тогда он использовал аннотации типов лишь периодически. Иногда он пользовался возможностями по автодополнению кода и подсказками компилятора, но, в основном, полагался лишь на собственное видение решаемых им задач.

Со временем автор этого материала понял, что каждый раз, когда он обходит ошибки, выявляемые на этапе компиляции, он закладывает в свой код бомбу замедленного действия, которая может рвануть во время выполнения программы. Каждый раз, когда он «боролся» с ошибками, используя простенькую конструкцию as any, ему приходилось платить за это многими часами тяжёлой отладки.



В итоге он пришёл к выводу о том, что лучше так не делать. Он подружился с компилятором, начал обращать внимание на его подсказки. Компилятор находит проблемы в коде и сообщает о них задолго до того, как они могут нанести реальный вред. Автор статьи, глядя на себя как на разработчика, понял, что компилятор — это его лучший друг, так как защищает его от него самого. Как тут не вспомнить слова Альбуса Дамблдора: «Требуется большая храбрость, чтобы выступить против своих врагов, но не меньше ее требуется и чтобы выступить против своих друзей».

Каким бы хорошим другом ни был компилятор, ему не всегда легко угодить. Иногда избежать использования типа any очень непросто. А порой кажется, что any — это единственное разумное решение некоей проблемы.

Этот материал посвящён двум ситуациям. Избежав использования в них типа any можно обеспечить типобезопасность кода, открыть возможности по его повторному использованию и сделать его интуитивно понятным.
Читать дальше →
Total votes 41: ↑37 and ↓4+33
Comments29

Восстановление смазанных и расфокусированных изображений с помощью фильтра Винера. Реализация на C++ OpenCV

Reading time2 min
Views24K

В продолжении статьи про восстановление расфокусированных и смазанных изображений хочу поделиться своими результатами восстановления реальных изображений с помощью фильтра Винера. В качестве библиотеки обработки изображений использовалась OpenCV 3.4. Фотокамера – Nikon D320, объектив Nikon DX AF-S NIKKOR 18-105mm, расфокусировка осуществлялась вручную, съёмка осуществлялась без штатива.

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

Information

Rating
Does not participate
Registered
Activity