Pull to refresh
2
0
Олег Смирнов @koolshen

Пользователь

Send message

Ищем сокровища в исходном коде Aladdin

Reading time34 min
Views35K
image


На момент своего выхода в 1993 году Disney’s Aladdin на Sega Genesis (или Mega Drive, если в начале 90-х вы жили с другой стороны лужи) была удивительно красивой игрой.

Благодаря использованию технологии, которая позже стала известной, как Digicel, правильному выбору промежуточного ПО и впечатляющему таланту авторов Aladdin смогла выделиться на фоне других игр Genesis той эпохи. Красивая нарисованная от руки графика Aladdin установила новую планку качества для того, чего можно добиться на «железе» Genesis. Это стало возможным не с помощью особенно интересных растровых эффектов или тайных аппаратных приёмов, а благодаря сочетанию эффектной графики, дизайна и правильно выбранной технологии.

Эта уникальная смесь графики и технологий стала основной причиной, позволившей игре Aladdin занять особое место в истории видеоигр. Поэтому мне так радостно было найти архив с полным исходным кодом игры в коллекции Video Game History Foundation! Кроме бесценного источника данных, этот архив является для меня отличной возможностью создать стандарты для сохранения исходного кода, отслеживания зависимостей инструментов и многих других процессо-ориентированных аспектов в VGHF.
Total votes 109: ↑107 and ↓2+105
Comments14

Почему SQL одерживает верх над NoSQL, и к чему это приведет в будущем

Reading time10 min
Views40K

SQL пробуждается и наносит ответный удар силам тьмы — NoSQL

С самого начала компьютерной эры человечество собирает экспоненциально растущие объемы данных, и вместе с этим растут требования к системам хранения, обработки и анализа данных. Из-за этого в последнее десятилетие разработчики ПО отказались от SQL как от устаревшей технологии, которая не могла масштабироваться вместе с растущими объемами данных — и в результате появились базы данных NoSQL: MapReduce и Bigtable, Cassandra, MongoDB и другие.

Однако сейчас SQL возрождается. Все основные поставщики облачных услуг предлагают популярные управляемые сервисы реляционных баз данных: Amazon RDS, Google Cloud SQL, база данных Azure для PostgreSQL (запущена буквально в этом году) и другие. Если верить компании Amazon, ее совместимая с PostgreSQL и MySQL база данных Aurora стала «самым быстрорастущим сервисом в истории AWS». Не теряют популярности и SQL-интерфейсы поверх платформ Hadoop и Spark. А в прошлом месяце поддержку SQL запустила и Kafka. Авторы статьи скромно признаются, что и сами разрабатывают новую базу данных временных рядов, которая полностью поддерживает SQL.

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

Переведено в Alconost

Часть 1. Новая надежда

Читать дальше →
Total votes 52: ↑37 and ↓15+22
Comments105

Взлом визуальной системы: 11 оптических иллюзий в графическом дизайне

Reading time7 min
Views68K
Глубока ли кроличья нора?

image

Сколько минут вам потребуется, чтобы понять в чем фишка?

Фрэнсис Бэкон в 1620 году разделил источники человеческих ошибок, стоящих на пути познания, на четыре группы, которые он назвал «призраками» или «идолами» (лат. idola).

  • «Призраки рода» проистекают из самой человеческой природы, они не зависят ни от культуры, ни от индивидуальности человека. «Ум человека уподобляется неровному зеркалу, которое, примешивая к природе вещей свою природу, отражает вещи в искривлённом и обезображенном виде».
  • «Призраки пещеры» — это индивидуальные ошибки восприятия, как врождённые, так и приобретённые. «Ведь у каждого, помимо ошибок, свойственных роду человеческому, есть своя особая пещера, которая ослабляет и искажает свет природы».
  • «Призраки площади (рынка)» — следствие общественной природы человека, — общения и использования в общении языка. «Люди объединяются речью. Слова же устанавливаются сообразно разумению толпы. Поэтому плохое и нелепое установление слов удивительным образом осаждает разум».
  • «Призраки театра» — это усваиваемые человеком от других людей ложные представления об устройстве действительности. «При этом мы разумеем здесь не только общие философские учения, но и многочисленные начала и аксиомы наук, которые получили силу вследствие предания, веры и беззаботности». [Wikipedia]

Под катом — наглядная демонстрация уязвимости нашего мозга к атакам через визуальный ввод. Представляю вам перевод статьи продуктового дизайнера и фронтэнд-разработчика Balraj Chana, про то как можно использовать/нейтрализовать эффект оптических иллюзий.
Читать дальше →
Total votes 86: ↑78 and ↓8+70
Comments28

BaumankaCoin – велосипед в 3000 строк или блокчейн на пальцах

Reading time8 min
Views22K

Про Blockchain сегодня не пишет только ленивый. Существует огромное количество статей разной степени понятности и полезности. Это очередная из них. Нам захотелось создать максимально простой, но работающий блокчейн и написать кратко, но понятно для неспециалистов, как же эта собака этот блокчейн работает. Так родился проект BaumankaCoin, исходники которого можно загрузить c GitHub-а.


Многие люди представляют себе технологию блокчейн и криптовалют как некий мега rocket science. Безусловно, чтобы понять все тонкости и нюансы – потребуется потратить много времени; но в действительности данная технология, если разобраться, оказывается гораздо более простой для понимания, чем принято считать. Реализовав свой coin мы намеревались помочь людям понять "на пальцах" устройство данных технологий.


Читать дальше →
Total votes 25: ↑23 and ↓2+21
Comments7

Астигматизм – зрение как в королевстве «кривых зеркал»

Reading time7 min
Views253K
Друзья, после некоторого перерыва мы возобновляем публикации о зрении и технологиях для его восстановления. Пауза была связана с моей загруженностью операциями и участием в конференциях: в ближайшее время опубликую обзор самых интересных технических новинок в офтальмологии, которые были на них представлены, а сегодня мы поговорим об астигматизме.

Что такое астигматизм

Современная статистика удручает. Более половины населения планеты страдает нарушением зрения, наиболее распространенными проблемами являются близорукость и дальнозоркость. Но офтальмологи часто диагностируют еще одно заболевание, название которого многим незнакомо. Астигматизм – дефект оптической системы глаза, когда резкость изображения ассиметрична по вертикали и горизонтали. И параллельные лучи света, проходящие через глаз, фокусируются не в точку, а в «восьмерку». Для человека это означает, что видимость изображения становится нерезкой, причем часто это касается как дальних, так и близких предметов. В результате вместо нормального изображения человек видит искаженное, в котором одни линии четкие, другие — размытые. Представление об этом можно получить, если посмотреть на свое искаженное отражение в овальной чайной ложке. Аналогичное искаженное изображение формируется при астигматизме на сетчатке глаза.

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

Однако, достаточно много людей нуждаются в специальном лечении или коррекции этого нарушения с помощью очков, контактных линз или даже операции.
Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments57

Тернистый путь Hello World

Reading time16 min
Views33K

Вдохновение на написание данной статьи было получено после прочтения похожей публикации для архитектуры x86 [1].


Данный материал поможет тем, кто хочет понять, как устроены программы изнутри, что происходит до входа в main и для чего всё это делается. Также я покажу как можно использовать некоторые особенности библиотеки glibc. И в конце, как и в оригинальной статье [1] будет визуально представлен пройденный путь. В большинстве своём статья представляет собой разбор библиотеки glibc.


Итак, начнём наш поход. Будем использовать Linux x86-64, а в качестве инструмента отладки — lldb. Также иногда будем дизассемблировать программу при помощи objdump.


Исходным текстом будет обычный Hello, world (hello.cpp):


#include <iostream>
int main()
{
        std::cout << "Hello, world!" << std::endl;
}
Читать дальше →
Total votes 76: ↑75 and ↓1+74
Comments4

Математика игры 2048

Reading time22 min
Views34K

Часть 1. Расчёт минимального количества ходов для победы с помощью цепей Маркова


Screenshot of 2048

После недавнего обновления экран «You win!» игры 2048 начал показывать количество ходов, потребовавшихся для победы, и я задался вопросом: сколько же нужно ходов, чтобы выиграть?

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

Количество ходов, необходимых для победы, зависит от случайности, потому что игра добавляет тайлы 2 и 4 случайным образом. Анализ также покажет, что распределение минимального количества ходов до победы имеет стандартное отклонение в 8,3 хода, и что его общая форма хорошо аппроксимируется смесью биномиальных распределений.
Читать дальше →
Total votes 49: ↑48 and ↓1+47
Comments24

Как работает буфер обмена в Windows

Reading time12 min
Views49K
Недавно у меня появилась возможность выполнить отладку буфера обмена в Windows, и я решил, что хорошо бы поделиться информацией, которую удалось узнать. Буфер обмена — это тот компонент Windows, который многие из нас используют десятки (сотни?) раз в день, особо не размышляя об этом. Прежде чем взяться за это дело, я даже никогда не задумывался, как всё устроено. Как выяснилось, там столько интересного, что вы даже не можете себе представить. Сначала опишу, как приложения хранят разные типы данных в буфере обмена и как извлекают их оттуда, а затем — как приложения могут «прицепиться» к буферу и отслеживать изменения в нём. В обоих случае вы увидите отладочные записи, которые показывают, как получить доступ к данным из отладчика.

Начнём с обсуждения форматов буфера обмена. Такие форматы используются для описания, какие типы данные можно поместить в буфер. Там есть некоторое количество предопределённых стандартных форматов, которые может использовать приложение, вроде битового массива, текста ANSI, текста в Юникоде и TIFF. Windows также позволяет приложению установить собственный формат. Например, текстовый процессор может зарегистрировать формат, включающий в себя текст, форматирование и картинки. Конечно, это ведёт к определённой проблеме: что произойдёт, если вы скопируете данные из текстового редактора и вставите их в «Блокнот», который не понимает всего этого форматирования и не отображает картинки?
Читать дальше →
Total votes 44: ↑44 and ↓0+44
Comments40

Как довести первый проект до конца. Часть 2. Мифы, ошибки и провалы

Reading time3 min
Views15K


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

И сейчас мы рассмотрим мифы и ошибки, на которых я споткнулся. И, хотя игру хвалили многие, она на момент написания статьи получила только 61 загрузку!

Ну вот как так может быть?
Total votes 20: ↑20 and ↓0+20
Comments20

Генетический алгоритм и виртуальный мир ботов

Reading time1 min
Views16K
Не так давно я написал публикацию про генетический алгоритм и геном, состоящий из одной инструкции.


Хочу поделиться с читателями Geektimes видео от foo52ru, которое стало стимулом для экспериментов и во многом определило содержание моей работы.
Total votes 23: ↑21 and ↓2+19
Comments29

Играем с квантовой монеткой

Reading time4 min
Views14K
Привет, Хабр!

Свой первый пост я решил посвятить квантовой информатике и ее приложению к теории игр. Эта идея абсолютна не нова и своими корнями уходит в статью Жиля Брассарда 1999 года [1]. Квантовая механика сама по себе удивительная вещь, а возможность ее использования в играх вдвойне удивляет!


«Если квантовая механика вас не потрясла до глубины души, значит, вы ее еще не поняли.» (Нильс Бор)
Читать дальше →
Total votes 23: ↑23 and ↓0+23
Comments27

«Как по нотам!» или Машинное обучение (Data science) на C# с помощью Accord.NET Framework

Reading time6 min
Views33K
Вчера после публикации статьи zarytskiy «Какой язык программирования выбрать для работы с данными?» я понял, что .net в целом и C# в частности не рассматривается, как инструмент для машинного обучения и анализа данных. Не то, чтобы для этого совсем не было объективных причин, но все же надо восстановить справедливость и потратить пару минут на рассказ о фреймворке Accord.NET.

Итак, в прошлой статье цикла, посвящённого обучению Data Science с нуля, мы с вами разбирали вопрос создания своего собственного набора данных и обучение моделей из библиотеки scikit-learn (Python) на примере задачи классификации спектров излучения ламп и дневного света.

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


Читать дальше →
Total votes 26: ↑22 and ↓4+18
Comments8

Проектирование программного обеспечения

Reading time5 min
Views310K
Сегодня процесс создания сложных программных приложений невозможно представить без разделения на этапы жизненного цикла. Под жизненным циклом программы будем понимать совокупность этапов:
  • Анализ предметной области и создание ТЗ (взаимодействия с заказчиком)
  • Проектирование структуры программы
  • Кодирование (набор программного кода согласно проектной документации)
  • Тестирование и отладка
  • Внедрение программы
  • Сопровождение программы
  • Утилизация

Остановимся детально на процессе проектирования. В ходе проектирования архитектором или опытным программистом создается проектная документация, включающая текстовые описания, диаграммы, модели будущей программы. В этом нелегком деле нам поможет язык UML.
Читать дальше →
Total votes 52: ↑36 and ↓16+20
Comments36

Сигналы на c#

Reading time4 min
Views15K
Доброго времени суток Хабр. Вдохновленный моделью синхронизации потоков в go и сигналов в QT появилась идея реализовать нечто подобное на c#.

image

Если интересно, прошу под кат.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments42

Играючи BASH'им

Reading time17 min
Views41K
Как я написал игру на bash'е.

image

Нетерпеливые могут посмотреть\поиграть, скачав игру тут, а пользователи Ubuntu 18.04 могут установить игру apt'ом:
sudo apt install -y piu-piu

Далее небольшой рассказ о процессе создания и разбор интересных (по моему мнению) мест.
Читать дальше →
Total votes 110: ↑110 and ↓0+110
Comments33

Blockchain

Reading time9 min
Views122K
Данный текст будет являться новой главой для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на github. На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам.

Когда у вас есть знания о том, что такое криптографически стойкая хеш-функция, понять, что такое blockchain («цепочка блоков») очень просто. Blockchain – это последовательный набор блоков (или же, в более общем случае, ориентированный граф), каждый следующий блок в котором включает в качестве хешируемой информации значение хеш-функции от предыдущего блока.

Технология blockchain используется для организации журналов транзакций, при этом под транзакцией может пониматься что угодно: финансовая транзакция (перевод между счетами), аудит событий аутентификации и авторизации, записи о выполненных ТО и ТУ автомобилей. При этом событие считается случившимся, если запись о нём включена в журнал.

В таких системах есть три группы действующих лиц:

  • источники событий (транзакций)
  • источники блоков (фиксаторы транзакций)
  • получатели (читатели) блоков и зафиксированных транзакций.

В зависимости от реализации эти группы могут пересекаться. В системах типа BitCoin, например, все участники распределённой системы могут выполнять все три функции. Хотя за создание блоков (фиксацию транзакций) обычно отвечают выделенные вычислительные мощности, а управляющими их участников называют майнерами (см. раздел про децентрализованный blockchain далее).

Основное требование к таким журналам таково:

  • Невозможность модификации журнала: после добавления транзакции в журнал должно быть невозможно её оттуда удалить или изменить.
Читать дальше →
Total votes 53: ↑49 and ↓4+45
Comments73

Мириады запущенных задач на C#

Reading time7 min
Views51K

Недавно на ресурсе Medium были опубликованы две статьи от одного и того же автора, затрагивающие функциональность C# async/await.


Основными выводами были:


  • рекурсивный вызов асинхронного метода в C# подвержен StackOverflowException
  • goroutine'ы лучше задач (тасков) в .NET в плане производительности

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


Далее в статье я попытаюсь раскрыть суть проблемы более подробно с примерами решения.


TL;DR

После небольшой правки кода исходных примеров, реализация бенчмарка на .NET оказывается быстрее варианта Go. Попутно решаем проблему переполнения стека у рекурсивных асинхронных методов.


NB: использоваться будут свежевыпущенный .NET Core 2.0 и Go 1.8.3.

Читать дальше →
Total votes 32: ↑29 and ↓3+26
Comments35

Новости нейробиологии: бессонный мозг ест сам себя, волшебная шляпа Илона Маска, переключатель-кутила, и кое-что ещё

Reading time4 min
Views31K
image
Сон – это важно. Сон – это хорошо. Рано или поздно все мы приходим к этому заключению (я скучаю по тем дням детства, когда дневной сон был обязанностью, а не удовольствием, за которое сегодня приходится краснеть). Во время сна новые воспоминания консолидируются, а токсичные побочные продукты дневной мозговой активности выводятся. Но вот что было неожиданно, так это открытие исследователей из Политехнического университета Марча, обнаруживших, что недостаток сна включает тот же самый процесс – однако, в этом случае он проходит в экстремальном варианте. Выходит, что хроническая потеря сна переводит мозг из режима нормальной уборки по выходным в режим маниакального опустошения – при этом он устраняет и здоровые, необходимые нейронные связи.
Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments28

Погружение в F#. Пособие для C#-разработчиков

Reading time12 min
Views83K

Этот пост будет не о том, как «перевести» код с C# на F#: различные парадигмы делают каждый из этих языков лучшим для своего круга задач. Однако вы сможете оценить все достоинства функционального программирования быстрее, если не будете думать о переводе кода из одной парадигмы в другую. Настало время любопытных, пытливых и готовых изучать совершенно новые вещи. Давайте начнем!



Все материалы из серии переводов русскоязычного сообщества F#-разработчиков вы сможете найти по тегу #fsharplangru.
Читать дальше →
Total votes 48: ↑47 and ↓1+46
Comments74

Нейронные сети для начинающих. Часть 2

Reading time14 min
Views573K


Добро пожаловать во вторую часть руководства по нейронным сетям. Сразу хочу принести извинения всем кто ждал вторую часть намного раньше. По определенным причинам мне пришлось отложить ее написание. На самом деле я не ожидал, что у первой статьи будет такой спрос и что так много людей заинтересует данная тема. Взяв во внимание ваши комментарии, я постараюсь предоставить вам как можно больше информации и в то же время сохранить максимально понятный способ ее изложения. В данной статье, я буду рассказывать о способах обучения/тренировки нейросетей (в частности метод обратного распространения) и если вы, по каким-либо причинам, еще не прочитали первую часть, настоятельно рекомендую начать с нее. В процессе написания этой статьи, я хотел также рассказать о других видах нейросетей и методах тренировки, однако, начав писать про них, я понял что это пойдет вразрез с моим методом изложения. Я понимаю, что вам не терпится получить как можно больше информации, однако эти темы очень обширны и требуют детального анализа, а моей основной задачей является не написать очередную статью с поверхностным объяснением, а донести до вас каждый аспект затронутой темы и сделать статью максимально легкой в освоении. Спешу расстроить любителей “покодить”, так как я все еще не буду прибегать к использованию языка программирования и буду объяснять все “на пальцах”. Достаточно вступления, давайте теперь продолжим изучение нейросетей.
Читать дальше →
Total votes 46: ↑42 and ↓4+38
Comments37

Information

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