Search
Write a publication
Pull to refresh
5
0

Экспериментальное велосипедостроение

Send message

Изучение геймплейного цикла на примере раннеров

Reading time4 min
Views11K
Три последних месяца мы в студии GILP работали над двумя разными играми в жанре endless runner: Upside Down и Zoic Adventures (условное название, обе игры ещё в процессе разработки). Хотя в них разная механика, обе построены на одном принципе: убеги как можно дальше, избегая препятствий.

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


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

Введение в OCaml: The Basics [1]

Reading time10 min
Views28K
(предисловие от переводчика: сел учить окамл, обнаружил, что отсутствует перевод на русский язык руководства для начинающих. Восполняю этот пробел).

Основы


Комментарии


Комментарии в OCaml обозначаются символами (* и *), примерно так:
(* Это однострочный комментарий *)

(* Это комментарий
   на несколько
   строк.
*)

Другими словами, комментарии в OCaml очень похожи на комментарии в Си (/* ... */).

В настоящий момент нет однострочных комментариев (как #... в Перле или // ... в C99/C++/Java). Когда-то обсуждалась возможность использовать ## ..., и я весьма рекомендую окамловским товарищам в будущем добавить эту возможность (однако, хорошие редакторы открывают возможность использования однострочных комментариев даже сейчас).

Комментарии в OCaml вложенные, это позволяет очень просто комментировать куски кода с комментариями:
(* This code is broken ...

(* Primality test. *)
let is_prime n =
(* note to self: ask about this on the mailing lists *) XXX;;

*)

Вызов функций


Допустим, вы написали функцию, назовём её repeated, которая берёт исходную строку s, число n и возвращает новую строку, состоящую из n раз повторённой строки s.

В большинстве С-подобных языков вызов функции будет выглядеть так:
repeated ("hello", 3) /* this is C code */

Это означает «вызвать функцию repeated с двумя аргументами, первый аргумент — строка hello, второй аргумент — число 3».

Подобно остальным функциональным языкам программирования, в OCaml, запись вызовов функций и использование скобок существенно отличается, что приводит к множеству ошибок. Вот пример того же самого вызова, записанного на OCaml: repeated "hello" 3 (* this is OCaml code *).

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

Логика сознания. Часть 8. Пространственные карты коры мозга

Reading time27 min
Views24K

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

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

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

Так ли быстр ваш любимый С или нативная реализация линейной алгебры на D

Reading time2 min
Views18K
Тем, кто занимается системами машинного обучения и компьютерным зрением, хорошо знакома такая библиотека как OpenBLAS (Basic Linear Algebra Subprograms). OpenBLAS написан на C и используется повсеместно там где нужна работа с матрицами. Так же у него есть несколько альтернативных реализаций таких как Eigen и двух закрытых имплементацией от Intel и Apple. Все они написаны на С\С++.

В настоящий момент OpenBLAS используется в матричных манипуляциях в таких языках как Julia и Python (NumPy). OpenBLAS крайне хорошо оптимизирована и значительная её часть вообще написана на ассемблере.

Однако так ли хорош для вычислений чистый C, как это принято считать?

Встречайте Mir GLAS! Нативная реализация библиотеки линейной алгебры на чисто D без единой вставки на ассемблере!
Читать дальше →

ФСБ планирует дешифровать весь интернет-трафик россиян в режиме реального времени

Reading time2 min
Views59K
ФСБ, Минкомсвязь и Минпромторг обсуждают набор технических решений, которые позволят дешифровать весь интернет-трафик россиян в режиме реального времени. Об этом со ссылкой на собственные источники сообщает газета "Коммерсантъ".

image

В опубликованной статье сообщается, что обсуждаемая ФСБ технология является частью реализации нашумевшего «пакета Яровой».
Читать дальше →

Запускаем Linux на FPGA: Hello, World

Reading time9 min
Views22K
UPD 21.09.16: BusyBox теперь успешно запускается.

image

Вдохновившись серией статей на сайте проекта Марсоход, в которых автор пытается запустить на FPGA-плате Марсоход 2 открытую систему на кристалле Amber SoC и Linux, я решил попробовать повторить этот опыт на своей плате Terasic DE2-115. Но, вместо древней как говно мамонта устаревшей версии Linux 2.4.27, я буду запускать последнюю версию Linux на данный момент — 4.8.0-rc5.
Читать дальше →

Что необходимо знать о резисторах?

Reading time5 min
Views95K


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

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

Начнём с самого простого и старого.

Углеродные композиционные резисторы


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

Modest — разработка открытого движка HTML рендера на «голом» Си

Reading time5 min
Views18K
Всем привет! Меня зовут Александр Борисов и я разрабатываю Modest — открытый движок HTML-рендера на «голом» Си без использования внешних зависимостей (далее движок). Сразу хочется пояснить, что значит «без внешних зависимостей» — весь код пишется с нуля, код нигде не заимствован.

После моей последней публикации прошло немало времени. За это время многое изменилось и я хочу поделиться с вами достижениями в разработке.
Приступим!

Симулятор нервной системы. Часть 2. Модулируемый нейроэлемент

Reading time7 min
Views16K


На заглавном изображении моллюск рода Аплизия, в его нервной системе всего 20 000 нервных клеток. Практически таких же как и в Вашей нервной системе, те же самые дендриты, аксоны, медиаторы. Те же самые белки и вещества. И путь к понимаю природы сознания и сложного интеллектуального поведения не может проходить мимо этого скромного существа.

Здравствуй, Geektimes, и мы переходим ко второй части, которая будет посвящена второму типу нейроэлементов – это модулируемому нейроэлементу.
Читать дальше →

Subtle Patterns: фоновые текстуры для вашего сайта

Reading time1 min
Views72K

Если вы запускаете новый сайт и заканчиваете его оформление, то есть смысл посмотреть коллекцию Subtle Patterns: отлично оформленную коллекцию фоновых текстур (паттернов) под лицензией Creative Commons Attribution 3.0 Unported. Их можно использовать без ограничений.



Сайт привлекает удобным предварительным просмотром: каждую текстуру можно мгновенно применить на всей странице в качестве фона. Сейчас там 93 работы, коллекция еженедельно пополняется отличными новинками.


Все текстуры на сайте Subtle Patterns являются повторяющимися, то есть склеиваются в бесшовную заливку.

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

Логика сознания. Часть 3. Голографическая память в клеточном автомате

Reading time10 min
Views29K
Ранее мы описали клеточный автомат, в котором могут возникать волны, имеющие хитрый внутренний узор. Мы показали, что такие волны способны распространять информацию по поверхности автомата. Оказалось, что любое место автомата может быть, как приемником, так и источником волн. Чтобы принять волну в каком-либо месте, достаточно посмотреть, какой узор получается в нем в момент прохождения волны. Если этот узор запомнить и впоследствии воспроизвести в том же месте, то от этого узора распространится волна, повторяющая на своем пути узор исходной волны.

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

Автомат, который мы описываем обладает памятью. Точнее, памятью обладают все его элементы. Память элемента специфична. Единственное, что видит элемент автомата – это узор, составленный из активности своих соседей. Единственное, как элемент может отреагировать на тот или иной узор – это либо самому стать активным, либо, наоборот, выключиться. Память элемента – это набор запомненных им узоров с указанием, как на них реагировать: включаться или выключаться.
Читать дальше →

Забудьте про иностранные языки и музыку — учите детей программированию

Reading time6 min
Views35K
Дж. Пол Гибсон начал преподавать программирование тинейджерам от досады. Преподаватель информатики в Государственном университете Ирландии, к 1998 году он был по горло сыт невежеством своих студентов. «Я наблюдал 18- и 19-летних, с трудом усваивающих элементарные концепции программирования, которые я освоил в 12 лет, — вспоминает Гибсон, самостоятельно научившийся программировать на Sinclair ZX81. — Я осознал, что до сих пор не видел программирования в школьной программе, и подумал, что, может быть, одна из наших проблем состоит в том, что мы подходим к нему слишком поздно.» Когда молва о курсе Гибсона распространилась, начальные школы в окрестностях Дублина тоже заинтересовались его услугами.

К началу 2000-х Гибсон использовал задачки из области разработки игр для обучения восьми- и девятилетних детей основам Java. Его успех в этой возрастной группе вызвал к жизни вопрос: а в каком, собственно, возрасте чересчур рано программировать?
Читать дальше →

Как мы ускорили PHP-проекты в 40 раз с помощью кэширования

Reading time4 min
Views17K


Вопросы SEO-оптимизации и улучшения User eXperience, которые в определенный момент встали перед командой Wrike, потребовали значительного увеличения скорости работы наших веб-проектов. На тот момент их было порядка десяти (основной сайт, блог, справочный центр и т. д.). Решение по ускорению проектов было выполнено на основе связки Nginx + fastcgi cache + LUA + LSYNC.

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

Это маленькое чудо — алгоритм Кнута-Морриса-Пратта (КМП)

Reading time9 min
Views192K
Алгоритм Кнута-Морриса-Пратта используется для поиска подстроки (образца) в строке. Кажется, что может быть проще: двигаемся по строке и сравниваем последовательно символы с образцом. Не совпало, перемещаем начало сравнения на один шаг и снова сравниваем. И так до тех пор, пока не найдем образец или не достигнем конца строки.
Читать дальше →

Вариант работы с кешем без доступа к бэкенду на примере Yii2

Reading time4 min
Views6.3K
Я веб-разработчик и не так давно (подрабатывая на стороне от основной работы) мне пришлось решать довольно нестандартную в наших кругах задачу: разработать фронтенд на Yii2 к сайту, весь бэкенд которого написан на древнегреческом ASP VBScript (простите, я уже забыл, как правильно это писать: просто ASP, или просто VBScript?).
Читать дальше →

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

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

silicon_russia_ad_selected_160730_174932

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


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

Математика для искусственных нейронных сетей для новичков, часть 1 — линейная регрессия

Reading time8 min
Views157K
Оглавление

Часть 1 — линейная регрессия
Часть 2 — градиентный спуск
Часть 3 — градиентный спуск продолжение

Введение


Этим постом я начну цикл «Нейронные сети для новичков». Он посвящен искусственным нейронным сетям (внезапно). Целью цикла является объяснение данной математической модели. Часто после прочтения подобных статей у меня оставалось чувство недосказанности, недопонимания — НС по-прежнему оставались «черным ящиком» — в общих чертах известно, как они устроены, известно, что делают, известны входные и выходные данные. Но тем не менее полное, всестороннее понимание отсутствует. А современные библиотеки с очень приятными и удобными абстракциями только усиливают ощущение «черного ящика». Не могу сказать, что это однозначно плохо, но и разобраться в используемых инструментах тоже никогда не поздно. Поэтому моей первичной целью является подробное объяснение устройства нейронных сетей так, чтобы абсолютно ни у кого не осталось вопросов об их устройстве; так, чтобы НС не казались волшебством. Так как это не математический трактат, я ограничусь описанием нескольких методов простым языком (но не исключая формул, конечно же), предоставляя поясняющие иллюстрации и примеры.

Цикл рассчитан на базовый ВУЗовский математический уровень читающего. Код будет написан на Python3.5 с numpy 1.11. Список остальных вспомогательных библиотек будет в конце каждого поста. Абсолютно все будет написано с нуля. В качестве подопытного выбрана база MNIST — это черно-белые, центрированные изображения рукописных цифр размером 28*28 пикселей. По-умолчанию, 60000 изображений отмечены для обучения, а 10000 для тестирования. В примерах я не буду изменять распределения по-умолчанию.
Читать дальше →

Персональный рейтинг депутатов каждому при помощи JavaScript и браузера Chrome

Reading time6 min
Views20K

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


Голоса депутатов находятся на vote.duma.gov.ru. Нам остаётся проголосовать за важные для нас законопроекты в соответствии со своим видением и получить рейтинг на основе которого и делать выбор на выборах.


Я выбрал наименее затратный путь и написал JavaScript расширение для Chrome. Работа с ним организованна через консоль браузера (Ctrl + Shift + J). Бонусом я протестировал поддержку русского языка в JavaScript без препроцессоров.


Под катом вас ждёт код с комментариями и комментарии к статье.


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

Фильтр Блума для веб-разработчиков

Reading time4 min
Views17K
На хабре уже немало рассказано про фильтр Блума. Напомню, что это структура данных, которая позволяет проверить принадлежность элемента ко множеству, не храня при этом сам элемент. Существует вероятность ложно-положительного ответа, но отрицательный ответ всегда достоверен. В фильтре с точностью 1% требуется всего лишь несколько бит на элемент.

Эта структура часто применяется для ограничения числа запросов к хранилищу данных, отсекая обращения за элементами, которых там заведомо нет. Кроме того, её можно применять для примерного подсчёта числа уникальных событий, пользователей, просмотров и т.д. Больше примеров интересных применений.

Однако есть трудности, которые могут сдерживать веб-разработчиков от применения фильтра Блума.
Читать дальше →

Гарвардский курс по основам программирования CS50 теперь на русском

Reading time4 min
Views183K
image

Предыстория: кто мы и как дошли до жизни такой

Мы — команда проекта JavaRush. А JavaRush, кто еще не в курсе, — это полностью автоматизированный обучающий онлайн-курс по Java. Когда-то давно, именно благодаря поддержке хаброюзеров и статьям на хабре, JavaRush и появился. В то время мы собирались переучить на программистов миллион человек.
Читать дальше →

Information

Rating
4,463-rd
Registered
Activity