Как стать автором
Обновить
4
0

Научный сотрудник

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

22 порт SSH переносить или нет

Время на прочтение2 мин
Количество просмотров30K
Случайно наткнулся на дискуссию трехмесячной давности, о необходимости переноса порта SSH. Очень много участников дискуссии убеждено в отсутствии необходимости переноса порта на нестандартный порт.

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

Компоненты электровелосипеда: мотор

Время на прочтение6 мин
Количество просмотров55K
Приветствую снова!

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



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

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

От Alibaba до «Пятерочки»: кто и как использует систему распознавания лиц в бизнесе

Время на прочтение5 мин
Количество просмотров19K
Платить за бургер без карты, не ждать регистрации в отеле, не стоять в очереди на кассу —все это возможно с помощью технологий распознавания лиц. В последние годы подобные решения активно тестируют многие крупные российские и зарубежные ритейлеры. Мы отобрали пять самых интересных примеров.



Узнать больше о том, как использовать распознавание лиц, нейросети и машинное обучение в бизнесе, можно на интенсивном курсе AI School.
Читать дальше →

Как ускорить машинное обучение на GPU — представлена новая open source платформа

Время на прочтение4 мин
Количество просмотров14K
Nvidia представили open source платформу Rapids, задача которой ускорить работу алгоритмов машинного обучения на GPU. Рассказываем об особенностях инструмента и его аналогах.

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

Вредоносное машинное обучение как диагностический метод

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


Привет всем!

Продолжая проработку темы глубокого обучения, мы как-то раз хотели поговорить с вами о том, почему нейронным сетям повсюду мерещатся овцы. Эта тема рассмотрена в 9-й главе книги Франсуа Шолле.

Таким образом мы вышли на замечательные исследования компании «Positive Technologies», представленные на Хабре, а также на отличную работу двоих сотрудников MIT, считающих, что «вредоносное машинное обучение» — не только помеха и проблема, но и замечательный диагностический инструмент.

Далее — под катом.
Читать дальше →

Контроль консистентности кода в Go

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


Если вы считаете консистентность важной составляющей качественного кода — эта статья для вас.


Вас ждут:


  • Разные способы сделать одно и то же в Go (эквивалентные операции)
  • Менее очевидные факторы, влияющие на однородность вашего кода
  • Способы увеличения консистентности вашего проекта
Читать дальше →

Связь драйвера и устройства по _HID методу ACPI на примере GPIO контроллера Lynxpoint

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

Постановка задачи


В Linux есть стандартный интерфейс для работы с GPIO через sysfs. Документацию на него можно посмотреть тут.

Если кратко, то в папке "/sys/class/gpio" есть файлы «export» и «unexport». С помощью записи числа X в файл export можно открыть интерфейс в user space для управления GPIOX

# открыть интерфейс в user space для управления GPIO12
$ echo 12 > /sys/class/gpio/export

После открытия интерфейса появится папка /sys/class/gpio/gpioX/ в которой будут такие файлы как «value» или «direction», и путём записи «in» или «out» в файл «direction» и записи 1 или 0 в файл «value» можно управлять выводом GPIO напрямую через командную строку.

# настроить GPIO на вывод
$ echo "out" > /sys/class/gpio/gpio12/direction

# установить 1 на выводе GPIO
$ echo 1 > /sys/class/gpio/gpio12/value

Чтобы команда «echo X > /sys/class/gpio/export» приводила к созданию папки «gpioX», в ядре должен быть зарегистрирован драйвер контроллера GPIO, открывающий интерфейс к линиям GPIO.

Так получилось, что я работаю над портированием coreboot для кастомной платы на базе процессора Intel Haswell i7 [Для тех, кто не знает, coreboot это open source проект по созданию BIOS с открытым исходным кодом (https://www.coreboot.org/)]. В мой процессор встроен южный мост LynxpointLP в котором есть 94 линии GPIO. И я захотел открыть их в sysfs…
Читать дальше →

Программный модуль оцифровки поврежденных документов

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

Оптическое распознавание символов (OCR) — это процесс получения печатных текстов в оцифрованном формате. Если вы прочитали классический роман на цифровом устройстве или попросили врача поднять старые медицинские записи через компьютерную систему больницы, вы, вероятно, воспользовались OCR.


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


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


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


image


Для обучения использовалось 144 картинки. Размер может быть разным, но желательно должен быть в пределах разумного. Картинки должны иметь формат PNG. После считывании изображения используется бинаризация – процесс преобразования цветного изображения в черно-белое, то есть каждый пиксель нормализуется в диапазон от 0 до 255, где 0 – это черный, 255 – белый.


Чтобы обучить сверточную сеть, нужно больше изображений, чем имеется. Было принято решение разделить изображения на части. Так как обучающая выборка состоит из картинок разного размера, каждое изображение было сжато до 448х448 пикселей. В результате получилось 144 изображения в разрешении 448х448 пикселей. После чего все они были нарезаны на неперекрывающиеся окна размером 112x112 пикселей.

Читать дальше →
IT-эволюция - шутка парадоксальная. Например, сначала на компьютерах моделировали нагрузку на АТС, затем программно управляли вызовами, а теперь телефония - это облачное решение, которое разворачивается за несколько минут и объединяет все корпоративные коммуникации. Кажется, между этими изменениями мало общего. На самом деле они стали возможными благодаря принципам программирования, заложенным полвека назад. И чтобы лучше увидеть эту связь, мы решили вспомнить историю С++ - одного из самых “взрослых” языков программирования. Он может быть и удобным инструментом разработки, и ночным кошмаром, и частью корпоративной истории. std::begin( )
Подробности — под катом

К вопросу о кривых Безье и быстродействии Ардуино, часть вторая

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

Мы пойдем мимо — и дальше




В своем предыдущем посте я показал, как можно улучшить быстродействие расчета точек на кривой Безье (КБ) путем:

  1. Преобразования расчетных формул — ускорение в ~3 раза.
  2. Перехода от чисел ПТ к ФТ — ускорения почти нет, но позволяет провести 3.
  3. Заменой операции деления умножением и сдвигом — ускорение еще на 40%.

Печальное отступление
— я допустил неточность в последней формуле можно было еще чуть ускорить вычисления, свернув еще одно константной выражение и, исключив умножение, вместо 502 получить 410 тактов на цикл вычисления. К сожалению, никто из читателей предыдущего поста мне на это не указал в комментариях… а я на это надеялся, значит, я не смог достаточно заинтересовать своих читателей, чтобы они правильно (то есть внимательно) читали мои опусы. Ладно, попробуем еще разок.

Для тех, кто готов читать правильно

Работа с абстрактными синтаксическими деревьями JavaScript 

Время на прочтение7 мин
Количество просмотров15K
Зачем парсить свой код? Например, для того, чтобы найти забытый console.log перед коммитом. А что делать, если вам надо изменить сигнатуру функции в сотнях вхождений в коде? Справятся ли тут регулярные выражения? В этой статье будет показано, какие возможности перед разработчиком открывают абстрактные синтаксические деревья.



Под катом — видео и текстовая расшифровка доклада Кирилла Черкашина (z6Dabrata) с конференции HolyJS 2018 Piter.

Вариационные автокодировщики: теория и рабочий код

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


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

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

Разработчик! Прекрати считать себя недостаточно хорошим специалистом, это неправда

Время на прочтение7 мин
Количество просмотров62K
Около месяца назад мы подготовили большую статью с невыдуманными историями об IT-самозванцах, где рассказали об ушлых ребятах из Азии, которые любыми путями пытались устроиться к нам на удаленную работу. Весь текст был посвящен разного сорта авантюристам — людям, которые чаще всего ничего не смыслили в IT и разработке, но выдавали себя за девелоперов. В той статье мы упоминали, что подобных Остапов на территории СНГ практически нет. Ну как-то не тянет наших соотечественников и людей из ближнего зарубежья пытаться кого-то обмануть таким образом. Но на другом берегу этой истории с самозванцами стоят настоящие разработчики — люди умные, компетентные, опытные, одним словом, хорошие специалисты. И как раз они, чаще всего, формируют вторую сторону медали поднятой нами истории.


Стив поверил в себя, так и ты поверь

Все дальнейшие рассуждения, советы и пояснения строятся на одном простом факте: очень часто при трудоустройстве через Crossover выходцев из СНГ мы сталкиваемся с ситуацией, когда специалист заявляется на позицию с более низкими требованиями по сравнению с его реальной квалификацией. То есть представители русскоязычного IT-сообщества систематически себя недооценивают. И это — массовая проблема.
Читать дальше →

Делаем собственный имплант для электроники

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


История от Bloomberg о том, что на материнских платах якобы были установлены некие импланты [Китайцы использовали микрочип, чтобы контролировать американские компьютеры], не прошла незамеченной. После неё многие люди делились идеями по поводу возможности создания подобных имплантов (их предполагаемого размера, возможностей или способа их обнаружения).

Через несколько дней журнал Bloomberg выпустил статью с дополнительными доказательствами. Вот что конкретно подогрело наш интерес:
Легальный сервер отправлял сообщения одним способом, имплант – другим, но казалось, что весь трафик происходит от одного доверенного сервера.

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

Данные высокого рода

Время на прочтение8 мин
Количество просмотров7.1K
Да-да, вам не привиделось и вы не ослышались — именно высокого рода. Род (kind) — это термин теории типов, означающий по сути тип типа [данных].

Но вначале немного лирики.

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

Эта статься — мои пять копеек в этот хайп. Мы рассмотрим валидацию данных в Хаскеле.

Валидация типом


Ранее было рассмотрен пример методики валидации при помощи валидации типом:

type EmailContactInfo  = String
type PostalContactInfo = String

data ContactInfo = EmailOnly EmailContactInfo | 
                   PostOnly PostalContactInfo | 
                   EmailAndPost (EmailContactInfo, PostalContactInfo)

data Person = Person 
  { pName :: String,
  , pContactInfo :: ContactInfo,
  }

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

Валидация данными высокого рода




В этой статье мы посмотрим иной метод валидации — при помощи данных высокого рода.

Пусть у нас есть тип данных:

data Person = Person
  { pName :: String
  , pAge  :: Int
  }

И мы будем валидировать данные лишь в том случае, когда валидны все поля записи.
Поскольку Хаскель по функциональным возможностям на голову превосходит большинство функциональных языков, на нём можно легко избавится от большинства рутины.

Тут можно и поэтому данный метод широко используется среди авторов библиотек на Хаскеле.
Читать дальше →

Julia и уравнения в частных производных

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


На примере типичнейших физических моделей закрепим навыки работы с функциями и познакомимся с быстрым, удобным и красивым визуализатором PyPlot, предоставляющим всю мощь питоновской Matplotlib. Будет много картинок (упрятанных под спойлеры)

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

Введение в комлексные числа

Время на прочтение2 мин
Количество просмотров32K
Привет!

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

image

А школьники могут что-то новое узнать ;)
// Всех кого заинтересовал прошу под кат.
Читать дальше →

Важнейшие заблуждения о разработке игр

Время на прочтение8 мин
Количество просмотров60K
Здравствуйте, коллеги.

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


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

The Kernel-Bridge Framework: мостик в Ring0

Время на прочтение7 мин
Количество просмотров9.6K
Хотели ли Вы когда-нибудь заглянуть под капот операционной системы, посмотреть на внутреннее устройство её механизмов, покрутить винтики и посмотреть на открывшиеся возможности? Возможно, даже хотели поработать напрямую с железом, но считали, что драйвера — rocketscience?

Предлагаю вместе пройтись по мостику в ядро и посмотреть, насколько глубока кроличья нора.

Итак, представляю драйвер-фреймворк для kernel-хакинга, написанный на C++17, и призванный, по возможности, снять барьеры между ядром и юзермодом или максимально сгладить их присутствие. А также, набор юзермодных и ядерных API и обёрток для быстрой и удобной разработки в Ring0 как для новичков, так и для продвинутых программистов.

Основные возможности:

  • Доступ к портам ввода-вывода, а также проброс инструкций in, out, cli и sti в юзермод через IOPL
  • Обёртки над системной пищалкой
  • Доступ к MSR (Model-Specific Registers)
  • Набор функций для доступа к юзермодной памяти других процессов и к памяти ядра
  • Работа с физической памятью, DMI/SMBIOS
  • Создание юзермодных и ядерных потоков, доставка APC
  • Юзермодные Ob*** и Ps***-каллбэки и фильтры файловой системы
  • Загрузка неподписанных драйверов и ядерных библиотек

… и многое другое.
Читать дальше →

Как создать процедуральный арт менее чем за 100 строк кода

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


Generative art (генеративное или процедуральное искусство) может отпугнуть, если вы никогда с ним раньше не сталкивались. Если коротко, то это концепция искусства, которое буквально создает само себя и не требует хардкорных знаний программирования для первого раза. Поэтому я решил немного разбавить нашу ленту, погнали.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Раменское, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность