Pull to refresh
4
0
Alexander Irbis @BlessMaster

Разработчик

Send message

Куча способов переиспользовать код в Rust

Reading time40 min
Views20K
Я нашел эту статью авторства Alexis Beingessner как наиболее понятное описание системы типов в Rust, и что с ними можно делать. Надеюсь, кому-нибудь этот перевод будет полезен. Не смотрите на то, что вначале описываются очевидные вещи — под конец можно утонуть. Статья огромная и скорее всего будет разобрана на главы. Переведено достаточно вольно. Авторский стиль сохранен. — прим.пер.

(статья написана о Rust 1.7 stable)

В системе типов Rust есть много всякого. Насколько я знаю, практически вся сложность этого всякого заключается в том, чтобы выразить программу в максимально обобщённом виде. Притом народ еще и требует большего! У меня всегда были проблемы с простым пониманием наиболее сложных вещей, потому этот пост скорее напоминалка самому себе. Но тем не менее, мне также нравится делать что-то, полезное другим, поэтому в данной статье также есть вещи, которые я вряд ли забуду, но о которых некоторые могут не знать.

В этой статье не будет исчерпывающего описания синтаксиса или общих деталей описываемых возможностей. Здесь рассказывается, почему происходит так или иначе, так как подобные вещи я всегда забываю. Если вы нашли эту статью в попытках выучить Rust полноценно, вам определенно стоит для начала ознакомиться с Книгой (оригинал вот — прим.пер.). В то же время я здесь буду уточнять некоторые произвольные теоретические аспекты того, что происходит.
Скорее всего, в этой статье полно ошибок, и она не должна претендовать на звание официального руководства. Это просто сборник того, что я накопал за неделю, пока искал новую работу.
Осторожно, там глубоко!

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

Reading time3 min
Views142K
Господа! Только что на сайте Imagination Technologies вышло исправленное издание бесплатного учебника на русском языке «Цифровая схемотехника и архитектура компьютера» Дэвида Харриса и Сары Харрис (кстати, они не супруги и вообще не родственники – просто так совпало). Предыдущее издание этого учебника вышло год назад, пост о нем собрал 145,000 просмотров на Хабре, количество скачиваний с британского сайта вызвало у его британских админов подозрение, что их атакуют русские хакеры, а впоследствие команду переводчиков лично благодарили за учебник преподаватели МФТИ, МВТУ им. Баумана, харьковского ХНУРЭ и других университетов.

silicon_russia_ad_selected_160730_174932

Книжка содержит «введение во все», доступное способному школьнику или младшему студенту, который после ее прочтения может спроектировать, написать на SystemVerilog или VHDL и реализовать на ПЛИС несложный, но при этом совершенно настоящий конвейерный процессор. Книга написана живым языком и для введения концепций, например конечных автоматов, использует примеры типа:


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

man!(C => D => Rust)

Reading time10 min
Views12K

Предыдущую статью восприняли лучше, чем я ожидал, так что решился на продолжение эксперимента. Это своеобразный ответ на перевод статьи Programming in D for C Programmers за авторством Дмитрия aka vintage. Как мне кажется, в области применения C Rust более уместен, чем замена Go, как предполагалось в прошлой статье. Тем интереснее будет сравнить. Опять таки, код на С приводить не буду, тем более что аналог на D всё равно смотрится лаконичнее.

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

Сказ царя Салтана о потенциале лапласиана

Reading time9 min
Views45K
«Три девицы под окном пряли поздно вечерком.»

image

Ну как пряли. Не пряли, конечно, а лайкали друг на друга. По условиям конкурса «мисс Салтан» девицы должны были выбрать меж собой лучшую.

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

Вскоре «в светлицу вошел царь — стороны той государь» (показан на рисунке). «Во все время разговора...», — ну понятно в общем.
«Собираем лайки нежности — формируем матрицу смежности», — бодро срифмовал он.
Девицы-красавицы с именами Алена, Варвара и Софья засмущались, но лайки (из балалайки) передали.

Вот что там было:
  • Алена получила 1 лайк от Софьи и 2 лайка от Варвары.
  • Варвара получила по лайку от Алены и Софьи.
  • А Софья получила 2 лайка от Алены и 1 от Варвары.

Царь взял лайки, покрутил гайки, постучал по колесам, пошмыгал носом, причмокнул губами, поскрипел зубами, сгонял в палаты и объявил результаты.

Наибольший вес лайков (7 баллов) получила Софья, но титул «мисс Салтан» достался Алене (15 баллов).

Подробнее о матрице лайков
Для матрицы


вектор потенциалов равен (5, 4, 7), а вектор потоков — (15, 12, 14).

После объявления результатов девицы бросились обратились к царю с просьбой рассказать,- откуда взялись эти странные цифры?
Действительно - откуда?

Big Data от А до Я. Часть 4: Hbase

Reading time11 min
Views103K
Привет, Хабр! Наконец-то долгожданная четвёртая статья нашего цикла о больших данных. В этой статье мы поговорим про такой замечательный инструмент как Hbase, который в последнее время завоевал большую популярность: например Facebook использует его в качестве основы своей системы обмена сообщений, а мы в data-centric alliance используем hbase в качестве основного хранилища сырых данных для нашей платформы управления данными Facetz.DCA

В статье будет рассказано про концепцию Big Table и её свободную реализацию, особенности работы и отличие как от классических реляционных баз данных (таких как MySQL и Oracle), так и key-value хранилищ, таких как Redis, Aerospike и memcached.
Заинтересовало? Добро пожаловать под кат.


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

Многопользовательский онлайн-шутер на WebGL и asyncio, часть вторая

Reading time17 min
Views24K

В этом материале постарался описать создание браузерного 3D-шутера, начиная от импорта симпатичных моделей танков на сцену и заканчивая синхронизацией игроков и ботов между собой с помощью websocket и asyncio и балансировкой их по комнатам.

Введение
1. Структура игры
2. Импорт моделей и blender
3. Подгрузка моделей в игре с babylon.js и сами модели
4. Передвижения, миникарта и звуки игры в babylon.js
5. Вебсокеты и синхронизация игры
6. Игроки и их координация
7. Балансировка игроков по комнатам и объектный питон
8. Asyncio и генерация поведения бота
9. Nginx и проксирование сокетов
10. Асинхронное кэширование через memcache
11. Послесловие и RoadMap

Всех кому интересна тема асинхронных приложений в Python3, WebGL и просто игр, прошу под кат.
Читать дальше →

Фильтр Калмана

Reading time10 min
Views456K


В интернете, в том числе и на хабре, можно найти много информации про фильтр Калмана. Но тяжело найти легкоперевариваемый вывод самих формул. Без вывода вся эта наука воспринимается как некое шаманство, формулы выглядят как безликий набор символов, а главное, многие простые утверждения, лежащие на поверхности теории, оказываются за пределами понимания. Целью этой статьи будет рассказать об этом фильтре на как можно более доступном языке.
Фильтр Калмана — это мощнейший инструмент фильтрации данных. Основной его принцип состоит в том, что при фильтрации используется информация о физике самого явления. Скажем, если вы фильтруете данные со спидометра машины, то инерционность машины дает вам право воспринимать слишком быстрые скачки скорости как ошибку измерения. Фильтр Калмана интересен тем, что в каком-то смысле, это самый лучший фильтр. Подробнее обсудим ниже, что конкретно означают слова «самый лучший». В конце статьи я покажу, что во многих случаях формулы можно до такой степени упростить, что от них почти ничего и не останется.
Читать дальше →

Нормальные числа. Эпизод II: атака де Брёйна

Reading time7 min
Views15K
Добрый день, любезные хабражители. Как, быть может, некоторые из вас помнят, в предыдущем посте я грозился показать, как конструируется нормальное число, доказательство нормальности которого возможно провести элементарными средствами. К сожалению, у меня целый месяц не было возможности написать этот пост вследствие неожиданного перехода моего аккаунта в режим рид-онли. Однако теперь я вернулся, так сказать, отдохнувшим и могу приступить к выполнению обещания.

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

image

А вот, собственно, и кат

Быстрая, экономная, устойчивая…

Reading time10 min
Views61K

Если вам понадобится алгоритм сортировки массива, который:
  • Работал бы гарантированно за O(N*log(N)) операций (обменов и сравнений);
  • Требовал бы O(1) дополнительной памяти;
  • Был бы устойчивым (то есть, не менял порядок элементов с одинаковыми ключами)

то вам, скорее всего, предложат ограничиться любыми двумя из этих трёх пунктов. И, в зависимости от вашего выбора, вы получите, например, либо сортировку слиянием (требует O(N) дополнительной памяти), либо пирамидальную сортировку (неустойчив), либо сортировку пузырьком (работает за O(N2)). Если вы ослабите требование на память до O(log(N)) («на рекурсию»), то для вас найдётся алгоритм со сложностью O(N*(log(N)2) — довольно малоизвестный, хотя именно его версия используется в реализации метода std::stable_sort().

На вопрос, можно ли добиться выполнения одновременно всех трёх условий, большинство скажет «вряд ли». Википедия о таких алгоритмах не знает. Среди программистов ходят слухи, что вроде бы, что-то такое существует. Некоторые говорят, что есть «устойчивая быстрая сортировка» — но у той реализации, которую я видел, сложность была всё те же O(N*(log(N)2) (по таймеру). И только в одном обсуждении на StackOverflow дали ссылку на статью B-C. Huang и M. A. Langston, Fast Stable Merging and Sorting in Constant Extra Space (1989-1992), в которой описан алгоритм со всеми тремя свойствами.

Так что же это за алгоритм?

Сетевая безопасность, Часть 2. Next-Generation Firewall

Reading time8 min
Views44K
Если посмотреть на интерактивную карту текущих кибер-атак, происходящих в мире, в режиме реального времени, то становится очевидно, что единственное место, где нет криминальной кибер-активности на Земле – это Антарктида. 2014 год был богат на громкие взломы и утечки данных. Взлом Apple iCloud с последующим выкладыванием в сеть интимных фотографий разных известных людей, утечка данных 80 миллионов клиентов из JP Morgan, троян в Regin на компьютерах администрации ЕС, взлом eBay, взлом Home Depot, DDoS-атака на сайт Кремля, взломы сети Московского метро и т.д. Однако взлом Sony Entertainment замечателен тем, что за последние три года инфраструктура компании взломана уже как минимум третий раз. Поэтому, прежде чем говорить о современных средствах сетевой защиты, я кратко опишу стратегию реализации сетевой атаки на примере одной из самых известных атак последнего времени – атаки на Sony Pictures Entertainment 2014.

Несколько слов о том, что, собственно, произошло. В пятницу, 21 ноября 2014 года, руководители Sony получили письмо с предложением заплатить определённую сумму за то, чтобы ИТ-инфраструктура Sony избежала «массированной бомбардировки». Письму не придали значения, у многих руководителей оно попало в спам, но уже 24 ноября 2014 года сотрудники Sony, придя в понедельник утром на работу, увидели у себя на мониторах следующую картинку:


Большинство компьютеров и ИТ сервисов компании было неработоспособно. Как утверждают некоторые источники, в течении нескольких следующих дней сотрудники Sony не пользовались рабочими компьютерами и работали при помощи ручки и бумаги. По ходу этой атаки (считают, что скрытая фаза атаки развивалась от нескольких месяцев до года) из Sony утекли данные (по некоторым оценкам, общим объёмом до 100 терабайт) на миллионы долларов. Впоследствии хакеры выложили в сеть несколько новых, ещё не выпущенных на экраны фильмов и большое количество конфиденциальной информации, включая личные данные сотрудников. По разным оценкам, примерный совокупный ущерб от этой атаки составил порядка 100 миллионов долларов.

Как это произошло и, главное, почему?
Читать дальше →

Использование bash completion в командной строке, собственных скриптах и приложениях. Часть 1

Reading time2 min
Views58K
Часть 2

Системный администратор — человек ленивый. Обычно он старается сделать максимум работы, приложив минимум усилий, а для этого зачастую требуется автоматизировать многие рутинные процедуры. Например — набор полных имен хостов при создании ssh-соединения, или же длинных аргументов некоторых команд :)

Сегодня я попробую рассказать про использование такого функционала шелла как bash completion.
вам интересно?

Черная археология датамайнинга: что может быть эффективнее атаки по словарю?

Reading time5 min
Views16K
Для тех, кому лениво читать дальше, сразу скажу ответ: атака «логин равен паролю». По статистике, логин равный паролю встречается чаще, чем самый распространенный пароль из словаря. Далее в статье будут некоторые статистические исследования на эту тему, и история, с которой всё началось.



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

Примеры использования MongoDB в e-commerce (часть 2)

Reading time25 min
Views29K


[ Первая часть ]

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

Случаи использования разделены там на восемь статей, которые условно можно разделить на три группы. Мне показались самыми интересными для перевода три материала, связанные с e-commerce.

  1. Операторы в aggregation framework
  2. Каталог продуктов
  3. Корзина и управления остатками на складе
  4. Иерархия категорий

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

Новые панели и соединения для Куботроника

Reading time4 min
Views10K
Ранее мы показали некоторые варианты панелей для оформления базовых кубиков, теперь мы выкладываем полный алфавит. Панели имеют две защелки и два направляющих выступа. Чтобы закрепить панель нужно опустить в начале одну защелку, а потом немного изгибая панель надвинуть в сторону второй. Панель должна занять свое место и опуститься во внутрь кубика.

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

Вопрос вызвал формат: «полнофункциональный набор» или ещё «настольная игра». Сразу отметим, что эти вопросы были и у нас. Т.к. когда распечатана куча панелей, а выбрать окончательный вариант электрического соединения не удается, то, передвигая заготовки, получаем разные схемы, которые и подводят к мыслям о настольных играх, т.е. просто «тащат за руку»…


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

Шпаргалка по mongodb: e-commerce, миграция, часто применяемые операции и немного о транзакциях

Reading time40 min
Views68K

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


Не хотелось бы, чтобы пост воспринимался в ключе холиваров на тему SQL vs. NOSQL И так понятно что везде есть свои плюсы и минусы, в данном случае это просто где-то немного справки, где-то немного примеров из того, с чем приходилось сталкиваться. Примеры на mongo shell и на python.


  1. Миграция в на новые версии в mongodb
  2. Запросы сравнения и логические
  3. Полнотекстовый поиск в Mongodb, regexp, индексы и пр.
  4. Атомарные операторы (модифицирующие данные )
  5. Немного о транзакциях в Mongodb
  6. Агрегационный фреймворк и JOIN-ы в Mongodb
  7. Примеры
  8. Небольшая песочница на Python

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

Moscow Python Meetup на тему «Async: why and when?» в офисе Rambler&Co

Reading time1 min
Views8.7K


Друзья, спешу сообщить, что 28 мая в 19:00 в офисе компании Rambler&Co пройдет встреча сообщества Moscow Python Meetup. Тема встречи — «Async: why and when?».

В программе интересные доклады, общение, холивары и море позитива.
Читать дальше →

Роскомнадзор и его планы

Reading time12 min
Views50K
Послепраздничные дни мая ознаменовались выходом огромного количества новых документов. Пока, как правило, в виде проектов, но все же. Как ни странно, но видимо привыкшие ко всему жители Хабра не обратили на это внимания. А между прочим, зря.

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

Но вернемся к нормотворчеству. Если в прошлом году нас пугали ростом уровня штрафов, то в этом году Роскомнадзор решил зайти с иной стороны, разместив проект Постановления Правительства РФ «Об утверждении Положения о государственном контроле и надзоре за соответствием обработки персональных данных требованиям законодательства Российской Федерации».

Думаю, большинство в курсе, что Роскомнадзор имеет так называемый Административный регламент, утвержденный Приказом Минкомсвязи России от 14.11.2011 N 312, в соответствии с которым, в частности, и должны проходить все проверки качества защиты персональных данных. На первый взгляд, проект Постановления Правительства очень напоминает этот регламент. Если бы не мелкие отличия.

Внимание! Публикация обсуждает элементы ужаса и мистики и не рекомендуется к чтению на ночь!
Читать дальше →

ISO 9241-110 — Принципы организации диалога

Reading time6 min
Views16K


В настоящее время я получаю второе высшее образование по программе MSc Usability Engineering в Райн-Ваальском Университете Прикладных Наук (Германия).

Данная программа является единственной в Германии, полностью посвященной Usability и HCD. Кроме того, в качестве преподавателей как правило выступают Usability-эксперты, работающие на такие компании, как Samsung, Siemens, Wargaming, Porsche и другие. Более того, некоторые из преподавателей входят в рабочие группы по разработке стандартов ISO для Usability.

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

Ресайз картинок в браузере. Все очень плохо

Reading time10 min
Views105K
Если вы когда-нибудь сталкивались с задачей ресайза картинок в браузере, то вы наверное знаете, что это очень просто. В любом современном браузере есть такой элемент, как холст (<canvas>). На него можно нанести изображение нужных размеров. Пять строчек кода и картинка готова:

function resize(img, w, h) {
  var canvas = document.createElement('canvas');
  canvas.width = w;
  canvas.height = h;
  canvas.getContext('2d').drawImage(img, 0, 0, w, h);
  return canvas;
}

Из холста картинку можно сохранить в JPEG и, например, отправить на сервер. Можно было на этом закончить статью, но сперва давайте взглянем на результат. Если вы поставите рядом такой холст и обычный элемент <img>, в который загружена та же картинка (исходник, 4 Мб), то вы увидите разницу.

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

Знакомство с OsmocomBB: 0x01 Введение

Reading time6 min
Views85K
image
OsmocomBB — это проект, целью которого является свободная (Open Source) имплементация стека протоколов GSM. OsmocomBB предоставляет исходный код прошивок для совместимых телефонов, а также программное обеспечение для их взаимодействия с компьютером. В этом цикле статей я постараюсь описать наиболее интересные возможности, тонкости и ошибки, которые могут возникнуть при работе с данным ПО. Заинтересованных приглашаю под кат!
Читать дальше →

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity