Pull to refresh
20
0.1
Цыбулин Иван @Uranix

User

Send message

Игры для программистов, часть вторая

Reading time5 min
Views81K
Прошло четыре с половиной года с тех пор, как я, пользуясь свежеполученным инвайтом, написал предыдущий хабрапост с подобным заголовком. Большой срок для игровой индустрии. Успело появиться много новых хороших игр, и недавно я ощутил настоятельную необходимость поделиться знанием о них с широкой общественностью.

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

Infinifactory


image
И что же это за майнкрафт такой?
Total votes 58: ↑57 and ↓1+56
Comments74

Тяжелое расставание с Net-Tools

Reading time7 min
Views100K

Не секрет, что Net-Tools пора на почетную отставку. Да, многим админам и мне в том числе, до условного рефлекса Павлова знакомы команды ifconfig, route, netstat. На первый взгляд нет причин что-то менять, а лучшее как всегда враг хорошего.




Давайте узнаем почему Net-Tools уже не тот и как безболезненно с него перейти на iproute2 .

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

Создание полноценного видеохостинга своими руками (nginx+php5-fpm+ffmpeg+cumulusclips)

Reading time10 min
Views67K
Добрый день, хабровчане!

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

Задача была следующая:
Создать видеоресурс, способный проводить многопоточные односторонние трансляции с web камеры, а так же из любого файла (это например для защиты от прямого скачивания), видеошару с возможностью просмотреть видео в разных форматах и битрейтах.
Узнать больше
Total votes 85: ↑75 and ↓10+65
Comments58

Подробнее о разработке софта рентгеновского томографа

Reading time19 min
Views13K


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

Но ведь интереснее в него запихнуть муху.



Перед EDISON Software Developement поставили задачу написать софт для микротомографа. О том, как они успешно справились с задачей, была статья chookcha на Хабре (Как за 5233 человеко-часа создать софт для микротомографа) с описанием алгоритмов, математических методов, реализации и отладки.

Ненасытные читатели засыпали нас вопросами, на которые мы, наконец-то, сформулировали ответы…
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments4

Мониторинг выполнения задач в IPython Notebook

Reading time2 min
Views36K
Хотел бы поделиться простым, но полезным инструментом. Когда много работаешь с данными, часто возникают примитивные, но долгие операции, например: «скачать 10 000 урлов», «прочитать файл на 2Гб, и что-то сделать с каждой строчкой», «распарсить 10 000 html-файлов и достать заголовки». Долго смотреть в зависший терминал тревожно, поэтому долгое время я использовал следующий гениальный код:
def log_progress(sequence, every=10):
    for index, item in enumerate(sequence):
        if index % every == 0:
            print >>sys.stderr, index,
        yield item


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

Читать дальше →
Total votes 42: ↑39 and ↓3+36
Comments11

Steam Files. Часть 2 — BLOB, CDR, VDF, PAK, VPK

Reading time9 min
Views16K
Steam Logo

После значительной задержки публикую продолжение цикла своих статей.
Для ознакомления:

В данной статье я затрону оставшиеся форматы файлов:
  • BLOB — устаревший формат данных, служащий контейнером для двоичных данных. Содержал в себе базовые параметры (IP-адреса серверов, CRD-запись и еще много чего);
  • CDR (Content Description Record) — бинарный файл, содержащий данные о приложениях и их файлах кеша. На данный момент не используется;
  • VDF — бинарный/текстовый файл, содержащий множество данных и имеющий структуру, зависящую от конкретного применения. Разработан как замена BLOB и CDR;
  • PAK — ранее использовался в Half-Life 1, великое наследие Quake 1, уже не используется;
  • VPK — новый формат игровых архивов внутри самих игр, активно используется на данный момент. Подробное описание файла имеется на официальном ресурсе. В статье описана только первая версия формата.

Статья представлена только для ознакомления, поскольку актуальной информации здесь относительно мало, а примеров алгоритмов почти нет — всё можно просмотреть в упомянутом ранее репозитории.
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments1

Формирование музыкальных предпочтений у нейронной сети — эксперимент по созданию умного плеера

Reading time7 min
Views37K
Данная статья посвящена работе по исследованию возможности обучить простейшую (относительно) нейронную сеть «слушать» музыку и отличать «хорошую» по мнению слушателя от «плохой».

Цель


Научить нейронную сеть отличать «плохую» музыку от «хорошей» или показать, что нейронная сеть на это неспособна (данная конкретная ее реализация).

image
Читать дальше →
Total votes 48: ↑47 and ↓1+46
Comments19

CPU vs GPU. Distance field

Reading time5 min
Views22K
Привет всем. Я уже однажды писал про Distance Field и приводил реализацию «эвристическим» кодом, дающую неплохую скорость: «Честный glow и скорость».

Зачем он нужен?


DField можно применять:
  • Для значительного повышения качества шрифтов
  • Для эффектов например горения контура. Один из эффектов я приводил в своей предыдущей статье
  • Для эффекта «metaballs» но в 2д и для любых сложных шейпов. (возможно я когда-нибудь приведу пример реализации этого эффекта)
  • А в данный момент DField мне нужен для качественного сглаживания углов и удаления мелких деталей.

И если в первых двух случаях мы можем заранее вычислить DField, то для других эффектов нам нужно просчитывать его в реальном времени.
В статье будет рассмотрен наиболее популярный, я бы сказал классический Chamfer distance (CDA) с кучей картинок, объясняющих принцип его работы, а так же рассмотрен двухпроходный алгоритм на GPU.
Оба алгоритма реализованы в демонстрационных программах на FPC.
Читать дальше →
Total votes 39: ↑37 and ↓2+35
Comments24

Maple: составление уравнений Лагранжа 2 рода и метод избыточных координат

Reading time9 min
Views27K

Предисловие



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

С Maple (на кафедре была 6-я версия, а у лоточников домой была куплена 8-я) познакомился ещё студентом, когда начинал работать над будущей кандидатской под крылом моего первого (ныше покойного) научного руководителя. Были и добрые люди, что помогли на самом первом этапе разобраться с пакетом и начать работать.

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

Сделать всё то, что будет предложено читателю под катом, меня подвигла задача принесенная ученицей (приходится ещё заниматься и репетиторством) со школьной олимпиады. Условие задачи таково:
Груз, висящий на нити длины L = 1,1 м, привязанной к гвоздю, толкнули так, что он поднялся, а затем ударился в гвоздь. Какова его скорость в момент удара о гвоздь? Ускорение свободного падения g = 10 м/с2.

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



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

Это послужило катализатором для того, чтобы взять да и откопать свои старые задумки, накопленные ещё со времен работы в оргкомитете Всероссийской Олимпиады студентов по теоретической механике — три года подряд занимался там подготовкой задач компьютерного конкурса. Задумки касались автоматизации построения уравнений движений для механических систем с неудерживающими связями и трением, используя известные всем уравнения Лагранжа 2 рода



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

Что касается Maple, то его библиотека для решения задач вариационного исчисления дает возможность быстро получить уравнения Эйлера-Лагранжа, решение которых минимизирует действие по Гамильтону, что применимо для консервативных систем



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

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

Читать дальше →
Total votes 44: ↑43 and ↓1+42
Comments13

Несколько подробностей об std::string

Reading time10 min
Views75K
Недавно заинтересовался реализацией std::string в libstdc++. Не в связи с принятием нового стандарта, а чтобы разобраться. Благо требования к строковму типу почти не изменились.

Основным средством для анализа кода несомненно является метод пристального вглядывания, но чтобы сузить область вглядывывания и сделать процедуру более захватывающей можно реализовать для строки идиому «трассер» подсмотренную в «C++ Templates: The Complete Guide». Трассировка позволяет выявлять подозрительные интересные операции над строками.

Как известно, std::string это псевдоним для
std::basic_string<char>
и нам ничего не мешает определить
std::basic_string<X>
. В X можно определить несколько статических счетчиков и итерировать их в конструкторе, деструкторе и остальных методах. Выполняя разные операции над такой строкой можно будет проследить эффективность применяемых алгоритмов в терминах количества операций.
Кроме того, в g++ для
std::string a(«entrails»); 
выражение
std::cout << reinterpret_cast<char*>(*((void**)(&a))); 

выведет содержимое строки. Т.е. std::string — является, по сути, указателем на char.
Вобщем, эти и другие шокирующие поднобности под катом.
Читать дальше →
Total votes 51: ↑42 and ↓9+33
Comments23

Как я внедрял Linux в учебном заведении

Reading time12 min
Views103K


Описываемый проект внедрён и используется уже лет пять. Пришло время рассказать, как всё было и поделиться опытом.

Давным-давно работал я техником (что-то вроде лаборанта, но более узкоспециализировано) в одном из учебных заведений среднего профессионального образования нашей необъятной родины. Смотрел, как проходят занятия, видел, как неаккуратно обращаются с хрупким программным обеспечением студенты и преподаватели, участвовал в массовых рутинных операциях, таких как: «переустановить некую самую популярную ОС на 30 и более разных компьютеров», «ой, нам для нужд учебного процесса срочно нужно поставить вот этот программный пакет, но аудиторию ещё не знаем» и далее в таком же духе.

Был я не совсем доволен положением вещей. Казалось мне, что всё должно быть проще, легче, изящней и вообще работать чуть ли не само (знакомое чувство?). В итоге взрывоопасная смесь из юношеского максимализма, студенческой неопытности и желания изменить мир сотворили в моей голове «идеальную» картину, как оно всё-таки должно быть.

Под катом много текста c картинками, технические подробности, одна тяжелая гифка и 6-ти минутная видео презентация.
Читать дальше →
Total votes 164: ↑154 and ↓10+144
Comments93

Числовые классы типов в Rust

Reading time6 min
Views11K
Абстракции Rust отличаются от привычных в ООП. В частности вместо классов (классов объектов) используются классы типов, которые называются «trait» (не следует путать с trait из Scala, где под этим термином прячутся примеси — mixin).
Классы типов не уникальны для Rust, они поддержаны в Haskell, Mercury, Go, из можно реализовать слегка извращенным способом на Scala и C++.

Я хочу показать, как они реализуются в Rust на примере дуальных чисел и разобрать отдельные нетривиальные (или плохо проработанные) моменты.

Интерфейсы числовых типов довольно громоздки, и я буду вставлять здесь только фрагменты кода. Весь код доступен на github (Update: работающая версия доступна на crates.io).
Большинство реализованных здесь интерфейсов имеют статус experemental или unstable и скорее всего будут меняться. Я постараюсь поддерживать код и текст актуальными.

Rust поддерживает перегрузку операций, но, в отличие от C++, у операций есть метод-синоним с обычным буквенным именем. Так a+b может быть записано a.add(b), а для переопределения операции '+' надо просто реализовать метод add.

Что же такое - класс типов?
Total votes 31: ↑28 and ↓3+25
Comments15

Лучший подарок – книга. Делаем красивый переплет

Reading time8 min
Views259K
Идея создания книги собственными руками поселилась в голове изрядно давно. Изучив практическую сторону вопроса, я лишь укрепился в этом желании, но руки никак не доходили даже до выбора книги. И вот некоторое время назад судьба распорядилась за меня. В силу обстоятельств непреодолимой силы во мне появилось желание подарить уникальную вещь, а, как известно, лучше книги подарка нет. Выбор пал на любимое произведение объекта моего неконтролируемого интереса, невероятно мудрое и емкое, смыслом, а не словами, творение Экзюпери — «Маленький принц». Желание творить подстегивала и моя личная любовь к этой книге. Решение было принято, время неумолимо приближало момент вручения, и я приступил к работе.
Читать дальше →
Total votes 233: ↑219 and ↓14+205
Comments61

Khan Academy разработала быструю JavaScript-библиотеку для работы с математическими формулами

Reading time2 min
Views19K
Фактическим стандартом для работы с математическими формулами в вебе, записанными в формате TeX, является библиотека MathJax. Платформа онлайн-обучения Khan Academy имеет в своём арсенале множество курсов, посвящённых математике. Один из важных пунктов миссии академии — сделать качественное образование доступным всем, независимо от географического и материального положения, поэтому для Khan Academy очень существенна быстрая работа сайта на слабых старых компьютерах и мобильных устройствах. Именно поэтому разработчики академии решили написать собственную библиотеку для рендеринга TeX в HTML, которая в перспективе могла бы полностью заменить MathJax и работала бы гораздо быстрее.

Библиотека KaTeX пока ещё довольна молода (текущая версия — 0.1.0) и пока ещё не может сравниться с MathJax по функциональности. Текущий список поддерживаемых функций доступен в вики проекта. KaTeX поддерживает меньше выходных форматов по сравнению с MathJax, которая умеет рендерить формулы в HTML+CSS, SVG и MathML. В КаТеХ реализован вывод в HTML, поддержка MathML планируется в будущем. KaTeX не поддерживает старые (старше 8.0) версии IE.


Ключевое преимущество KaTeX - скорость
Total votes 49: ↑49 and ↓0+49
Comments31

Skype для Linux версии 4.2, не требующей обновления на более новую

Reading time2 min
Views61K
skype_linux_logo
Для собственного удобства и людей сделал пропатченную версию клиент Skype для Linux версии 4.2.0.13, которая может работать в текущих условиях и не требовать обновления на более новую. Что конкретно там исправлено говорить не буду, вы можете сами найти решение в сети. Те кому интересно, могут посмотреть отличия двоичных запускаемых файлов.
Читать дальше →
Total votes 113: ↑84 and ↓29+55
Comments118

Сравнение Rust и С++ на примерах

Reading time8 min
Views36K

Предисловие


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

Все C++ программы были собраны при помощи gcc-4.7.2 в режиме c++11, используя online compiler. Программы на Rust были собраны последней версией Rust (nightly, 0.11-pre), используя rust playpen.

Я знаю, что C++14 (и далее) будет залатывать слабые места языка, а также добавлять новые возможности. Размышления на тему того, как обратная совместимость мешает C++ достичь звёзд (и мешает ли), выходят за рамки данной статьи, однако мне будет интересно почитать Ваше экспертное мнение в комментариях. Также приветствуется любая информация о D.

Погрузиться в код...
Total votes 72: ↑66 and ↓6+60
Comments96

Ключевые возможности Rust

Reading time18 min
Views32K
Rust — новый язык программирования, разрабатываемый корпорацией Mozilla. Главная цель разработчиков — создание безопасного практичного языка для параллельных вычислений. Первая версия языка была написана Грэйдоном Хором в 2006 году, а в 2009 году к разработке подключилась Mozilla. С тех пор изменения претерпел и сам компилятор, изначально написанный на OCaml: он был успешно переписан на Rust с использованием LLVM в качестве back-end.

Основным продуктом, разрабатываемым на Rust, является новый веб-движок Servo, разработка которого также ведется Mozilla. В 2013 году к разработке Rust и Servo присоединилась корпорация Samsung Electronics, при активном участии которой код движка Servo был портирован на ARM архитектуру. Поддержка языка столь серьезными игроками IT индустрии не может не радовать и дает надежду на его дальнейшее активное развитие и совершенствование.

Язык Rust просто не может не понравится системным и сетевым разработчикам, тем, кому по работе приходится писать много кода, производительность которого критична, на C и C++, потому что:
  1. Rust ориентирован на разработку безопасных приложений. Сюда входит безопасная работа с памятью: отсутствие null-указателей, контроль за использованием не инициализированных и деинициализированных переменных; невозможность совместного использования разделяемых состояний несколькими задачами; статический анализ времени жизни указателей.
  2. Rust ориентирован на разработку параллельных приложений. В нем реализована поддержка легких (зеленых) потоков, асинхронного обмена сообщениями без копирования пересылаемых данных, возможность выбора размещения объектов на стеке, в локальной куче задачи или куче, разделяемой между задачами.
  3. Rust ориентирован на разработку эффективных по скорости и памяти приложений. Использование LLVM в качестве back-end позволяет производить компиляцию приложения в нативный код, а простой интерфейс взаимодействия с C кодом – легко использовать уже имеющиеся высокопроизводительные библиотеки.
  4. Rust ориентирован на разработку кросс-платформенных приложений. Компилятор официально поддерживается на платформах Windows, Linux и Mac OS X, при этом существуют порты на другие *NIX платформы, такие как FreeBSD. Также поддерживается и несколько архитектур процессоров: i386, x64 и ARM.
  5. Rust позволяет писать в разных стилях: объектно-ориентированном, функциональном, actor-based, императивном.
  6. Rust поддерживает уже существующие отладочные инструменты: GDB, Valgrind, Instruments.

Читать дальше →
Total votes 63: ↑59 and ↓4+55
Comments56

Подвешиваем CD-диск, или практический пример моделирования на базе OpenSCAD для 3д печати

Reading time7 min
Views48K


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

Будет показан пошагово весь путь моделирования и готовая, напечатанная 3д деталька в конце.

С помощью этой детальки можно подвесить сд-диск на нитке. Пользы для человечества планеты не так много, но благодаря решению этой хобби-задачи я (впервые) попробовал OpenSCAD, и за пол-часа «с нуля» нарисовал 3д модель.

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

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

Простая иллюстрация идеи:
нарисовать куб со стороной 10 мм
нарисовать сферу радиусом 10 мм
вычесть из куба сферу


И мы получим такой результат:


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

OpenFOAM на практике

Reading time3 min
Views26K

Open FOAM


image

OpenFOAM — свободно распространяемый инструментарий вычислительной гидродинамики для операций с полями (скалярными, векторными и тензорными). На сегодня является одним из «законченных» и известных приложений, предназначенных для FVM-вычислений.В частности пакет позволяет решать задачи гидродинамики ньютоновских и неньютоновских вязких жидкостей как в несжимаемом, так и сжимаемом приближении с учётом конвективного теплообмена и действием сил гравитации. Для моделирования турбулентных течений возможно использование RANS-моделей, LES- и DNS-методов. Возможно решение дозвуковых, околозвуковых и сверхзвуковых задач.
Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments6

Реализация алгоритма BFS на GPU

Reading time8 min
Views12K

Аннотация


В данной статье хочу рассказать как можно эффективно распараллелить алгоритм BFS — поиск в ширину в графе с использованием графических ускорителей. В статье будет приведен подробный анализ полученного алгоритма. Вычисления выполнялись на одном GPU GTX Titan архитектуры Kepler.

Введение


В последнее время все большую роль играют графические ускорители (GPU) в не графических вычислениях. Потребность их использования обусловлена их относительно высокой производительностью и более низкой стоимостью. Как известно, на GPU хорошо решаются задачи на структурных сетках, где параллелизм так или иначе легко выделяется. Но есть задачи, которые требуют больших мощностей и используют неструктурные сетки. Примером такой задачи является Single Shortest Source Path problem (SSSP) – задача поиска кратчайших путей от заданной вершины до всех остальных во взвешенном графе. Решение данной задачи рассмотрено мной в этой статье. Вторым примером задачи на неструктурных сетках является задача Breadth First Search (BFS) — поиска в ширину в неориентированном графе. Данная задача является основной в ряде алгоритмов на графах. Также она немного проще, чем поиск кратчайшего пути. На данный момент алгоритм BFS используется как основной тест для рейтинга Graph500. Далее рассмотрим, как можно использовать идеи решения задачи SSSP в задаче BFS. Про архитектуру GPU компании Nvidia и об упомянутых алгоритмах уже много написано, поэтому в этой статье я не стану дополнительно писать про это. Так же, надеюсь, что понятия warp, cuda блок, SMX, и прочие базовые вещи, связанные с CUDA читателю знакомы.
Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments7
1

Information

Rating
2,810-th
Location
Долгопрудный, Москва и Московская обл., Россия
Date of birth
Registered
Activity