Все потоки
Поиск
Написать публикацию
Обновить
1079.78

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Программирование для PlayStation 2 — старт

Время на прочтение4 мин
Количество просмотров17K
image
Каждый справляет новый год по разному.
Кто-то помнит его, а кто-то нет.
Я стоял на балконе и курил, наблюдая салют. Вобщем-то, я ждал когда запишется диск.
Диск было не жалко ради такого эксперимента – он того стоил.
Это было мое первое приложение под PlayStation 2. Правда, все, что оно умело – это выводить клавиатуру и, с помощью джойстика, печатать, но это был уже прогресс!
Итак, запуск! Работает!

Сама суть


Так я начинаю цикл статей по программированию для PlayStation 2
Сначала будет длинная теория.
Потом практика. Поскольку я не профессионал С++ (или С — кому как нравится, но я буду рассказывать на С++), то прошу строго не судить о коде.
Также, по PlayStation 2 SDK желательно использовать Red Hat 6 или выше, однако, я пишу все это под Windows 7. Хоть все и работает криво, но работает – и ладно.
К началу практических экспериментов советую иметь чипованную PlayStation 2 и сетевой кабель. Для моих экспериментов выбрана PlayStation 2 Slim 90006 формата NTSC чипованная и сетевой кабель синего цвета =) (Я не использовал для дебага режим iLink, поскольку драйвера в комплекте идут только под Linux, да и жесткий диск нужен).

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

Язык D2 и метапрограммирование: всё страньше и страньше

Время на прочтение9 мин
Количество просмотров4.2K
Не так давно Monnoroch опубликовал несколько прекрасных вступительных статей по языку D2, и это было хорошо. Но, прочитав последнюю статью, посвящённую метапрограммированию, захотелось сделать ещё лучше и раскрыть тему немножко подробнее. Дьявол, как известно, в деталях — и именно внимание к мелочам делает реализацию meta-парадигмы в D2 столь удобной. Если вы не читали статью Monnoroch, рекомендую вначале ознакомиться с ней, т.к. в рамках этой не хотелось бы тратить время на базовые вещи.

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

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

Профилирование программ в QNX Momentics

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

Общие сведения



QNX Momentics Professional Edition (PE) основанная на платформе Eclipse — это полнофункциональный и высокоинтегрированный профессиональный комплект разработчика, который содержит все необходимое для построения и оптимизации приложений для ОСРВ QNX Neutrino. Благодаря широкому набору удобных инструментов – от средств встраивания на процессорную плату до средств удаленной диагностики – комплект QNX Momentics PE обеспечивает единую, гибкую программную среду для всего цикла разработки.

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

В данном руководстве по шагам профилируем учебное, многопоточное приложение sy21 с помощью инструментов QNX System Profiler и QNX Application Profiler, для демонстрации возможностей средств профилирования в QNX Momentics.

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

Go: производительность горутин

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

Введение


В этом посте мы рассмотрим производительность горутин (goroutine). Горутины — это нечто в роде очень дешевых и легковесных потоков. Больше всего, наверное, они похожи на процессы в Erlang.

Согласно документации мы можем использовать сотни тысяч горутин в наших программах. И цель статьи — проверить и конкретизировать это.
Читать дальше →

Рисуем картинки с помощью кривой Гильберта

Время на прочтение5 мин
Количество просмотров46K
В субботу на прошлой неделе «дело было вечером, делать было нечего», и мы с хабраюзером sourcerer разговаривали не понятно о чём. И почему-то речь зашла речь о задаче обратной к задаче построения графика функции по её выражению. То есть, например, у нас есть выражение y(x) = (cos0,5x ⋅ cos 200x + |x|0,5 − 0,7)(4 − x2)0,01. График такой функции чем-то напоминает сердечко. Но нам был интересен обратный вопрос, как, имея, например, изображение сердечка, получить выражение для функции, графиком которой будет это самое сердечко.

Какие-нибудь ряды Фурье вспоминать не хотелось, а хотелось чего-то простого и красивого. Мы начали вспоминать известные нам результаты, связанные с этим вопросом. В результате получилась программка, которая по изображению генерирует ломаную линию, чем-то напоминающую исходное изображение. На примере котёнка по имени Гав это выглядит примерно так (смотреть лучше издалека):



Если интересно как такое сделать, а также узнать про формулу конопли, формулу, график которой является этой же формулой, то добро пожаловать под хабракат. (Будет много картинок.)

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

Искусство программирования?

Время на прочтение4 мин
Количество просмотров17K
Я люблю читать статьи о программировании, в которых нет ни строчки кода. Такие статьи отлично развивают «вглубь» и часто дают повод посмотреть на давно устоявшиеся вещи под другим углом. Поэтому, рискуя навлечь на свою и без того чахлую карму гнев определенного среза общественности, я всё же решил опубликовать эту статью, в надежде, что кому-то она даст не только пищу для размышлений, но и поможет по-новому взглянуть на свою деятельность.

Начало


Так сложилось, что на текущем месте работы программисты предоставлены самим себе. То есть, конечно, кодят на благо предприятия, но совершенно бесконтрольно, вплоть до отсутствия банального тестера. ТЗ даже на «тяжелые» программы редко превышает объема в три листа А4 (один из которых — подписи всех причастных).

Звонки по поводу проблем с ПО направляются напрямую программистам. С этого всё и началось.
Читать дальше →

Три самых любимых бага

Время на прочтение3 мин
Количество просмотров1.6K
Бывают баги а бывают и БАГи. И если баги обычно фиксятся и забываются, то БАГи остаются с нами навсегда. Хочу поделиться с Вами тремя такими БАЖищами.

Первый такой казус произошел в 2005 году, когда я работал на фирме FriendScout24. У нас была тулза для мониторинга, в которой была хтмлная табличка и в каждой строчке по серверу. Если сервер отвечал нормально — он отрисовывался зеленным, если нет то красным. Обычно всё было спокойно зелененьким. И тут, в один прекрасный августовский день, сервера начали падать лесенкой. Пам-Пам-Пам — 4 сервера за 3 минуты. Через 5 минут всё снова позеленело, как будто ничего и не было.

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

Язык программирования D — продолжение

Время на прочтение7 мин
Количество просмотров3.5K
Доброго всем времени суток!
Итак, я решил продолжить рассказ о замечательном языке программирования D.
Моя прошлая статья была о мультипарадигменности языка, о том, что он естественным и гармоничным образом поддерживает большинство современных популярных стилей программирования.
В этот раз я задумал осветить другую сторону языка — менее общую и фундаментальную, но не менее полезную. А именно возможности метапрограммирования и compile-time computations.
Читать дальше →

Вышел стандарт C11 (C1X)

Время на прочтение1 мин
Количество просмотров24K
19 декабря 2011 года международная организация по стандартизации ISO обьявила о выходе стандарта C — ISO/IEC 9899:2011 (ранее неофициально известного как C1X).

Основные изменения по сравнению с C99:
  • Выравнивание данных
  • Спецификатор функции _Noreturn
  • Выражения, не зависящие от типа (Type-generic expressions) с использованием ключевого слова _Generic
  • Поддержка многопоточности
  • Улучшенная поддержка Unicode
  • Функция gets, была признана устаревшей и заменена на gets_s
  • Статические утверждения(Assertions)
  • Функция quick_exit
  • Макросы для создания комплексных чисел


Частичная поддержка функций нового стандарта имеется в компиляторах GCC и Clang.

Подробнее (англ)

UPD:
Финальной версии стандарта, привычно, нет в свободном доступе, но можно скачать последний черновик

Язык программирования D

Время на прочтение5 мин
Количество просмотров45K
Доброго всем времени суток!
Возникло желание (и даже возможность!) рассказать сообществу о замечательном языке программирования D. Как ни печально, в сети по нему все еще минимум информации, а на хабре и того меньше.
Все скорее всего о нем даже знают, но мало кто пытался писать на нем проекты, а все из за того, что он, видите ли, «не выстрелил», что у него нет будущего. Основная задумка, с которой я пишу эту статью — развеять некоторые заблуждения по поводу этого, несомненно, замечательного языка программирования, ну и заодно, конечно, просто отдать в широкие массы еще немного информации о нем.
Читать дальше →

Github выпустил сервер непрерывной интеграции на базе Jenkins

Время на прочтение1 мин
Количество просмотров8.6K
Github выпустил сервер непрерывной интеграции проектов Janky, сделанный на базе Jenkins под управлением CoffeeScript-бота Hubot. Фактически, Janky — это просто интерфейс для работы с Jenkins через скрипты и команды Hubot.

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

Понятно, что Github как нельзя лучше подходит для работы в режиме непрерывной интеграции. Система Janky заточена на использование Github, в том числе она создаёт соответствующие web-hook’и, а также может ограничивать доступ для сотрудников организации на Github.

Сервер Janky сделан на основе известной системы Jenkins (Hudson). Использование бота Hubot придаёт Janky особый шарм, управление сервером осуществляется с помощью простых команд.

Рейтинг на основании истории

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

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


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

Задача: сделать систему рейтинга по результатам турнира. Поскольку играем не «на вылет», финала нет. Учитывать количество очков несерьёзно из-за разношерстности игроков. То есть система рейтинга должна быть такой, что выигрыш у самого слабого игрока или проигрыш у самого сильного практически не должны влиять на наш рейтинг.
Читать дальше →

Релиз Qt 4.8

Время на прочтение2 мин
Количество просмотров2.9K
Коллеги, поздравляю нас с выходом очередной версии этого очень хорошего кроссплатформенного фреймворка. В первую очередь Qt — это набор примитивов и готовых модулей для разработки GUI кроссплатформенных приложений на C++, но за годы развития область применения Qt значительно расширилась. Код для создания «резиновых», легко локализуемых интерфейсов давно доступен не только из C++, но и из многих других языков — python, ruby, php. Технология QML, о которой в последний месяц мы много прочитали благодаря конкурсу от Nokia, позволяет создавать полноэкранные интерфейсы, основанные не на виджетах, а на графических примитивах, их взаимодействии и анимации. Встроенные средства для использования Javascript в качестве скриптового языка приложений, тесная интеграция с WebKit, собственная кроссплатформенная IDE — о Qt можно рассказывать довольно долго. Но я этого делать не буду — только кратко расскажу про то, что нового.

Под катом - краткий список нововведений

Ближайшие события

Тестирование программ в сложных «погодных условиях»

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

Здравствуй, уважаемый Хабр! Я являюсь участником разработки автоматизированных систем управления высокой надежности, которые применяются на электростанциях, космодромах, сложных производствах и т.п. Однажды передо мной встала задача придумать метод проверки работоспособности программ в условиях загруженности всяких железяк, а именно:
  1. Загруженность процессора
  2. Загруженность сети отправкой/приемом
  3. Нехватка оперативной памяти
  4. Загруженность жесткого диска запросами чтения/записи
а также придумать способ оценки, на сколько та или иная программа может создавать задержки/помехи, для работы других программ. На мой взгляд, наиболее интересный из этих четырех — первый пункт, поэтому речь пойдет именно о нем.
Под катом описываются две утилитки, которые у меня получились и принцип их работы, а так же парочка скриншотов и видео.
Читать дальше →

Как создать ТЗ для программиста

Время на прочтение6 мин
Количество просмотров110K
Рекомендации геймдизайнеру от программиста (архитектора).


Вступление

Компьютерные игры — относительно молодая отрасль, которая в перспективе сменит киноиндустрию, так-же как кинофильмы заменили театр. Создание игры — это коллективное творчество, во многом напоминающее создание кинофильма. Кроме того, создание компьютерных игр — одна из самых сложных IT задач, поскольку она включает все себя практические все IT области.

Все слышали про pre poduction, но мало кто знает как именно это происходит. И если про стадию разработки написано много, а про стадию издания — еще больше, то про стадию планирования известно очень мало. В лучшем случае вам посчастливится ознакомится с результатами планирования. А вот как были достигнуты эти результаты? — загадка во тьме.

Этот документ является результатом «разбора полетов» после написания игры Звездная арена для социальных сетей. В этом документе я попытался упорядочить список проблем и решений к которым я и Александр пришли в процессе совместной работы над игрою. Кроме того этот документ является частью большой работы по выстраиванию рабочего процесса создания компьютерных игр.

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

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

Сказ о том, как робот башни собирал

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


Сразу оговорюсь, что под «башнями» в заголовке поста подразумевается игра-головоломка «Саровские башни», расположенная на сайте bashni.org, о существовании которой я узнал из хабрапоста Как построить башню.

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

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

Как я делал змейку на LabVIEW

Время на прочтение5 мин
Количество просмотров16K
«от нефиг делать / just for lulz» посвящается…



Змейка. Игра старая (как утверждает Wikipedia: середины или даже конца 1970х годов), но от того не менее интересная, по крайней мере в качестве примера несложного но интересного алгоритма для иллюстрации возможностей графического программирования на LabVIEW 2009.

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

Паттерн Visitor. Продвинутое использование

Время на прочтение7 мин
Количество просмотров50K
Здравствуйте, дорогие хабравчане!

Я хочу поделиться с вами своим опытом использования паттерна проектирования visitor и его интересной модификацией, которую я назвал upcast visitor. К сожалению, непросто придумать простой короткий пример и описать как все работает, также эта статья может показаться сложной для начинающих, тем не менее я постараюсь максимально упростить задачу. Примеры кода приведены на языке С++ и обязательны к прочтению. Без понимания кода вникнуть в суть статьи будет затруднительно.

Предыстория


Представьте, что мы проектируем 2D игру, в которой фрукты падают с дерева, по пути ударяясь о ветки. Цель игры — поймать все фрукты, двигая корзину под деревом.
Строим следующую диаграмму классов:
Читать дальше →

Reactive Extensions for JavaScript. Полное руководство

Время на прочтение7 мин
Количество просмотров41K
Хотите использовать Observable Collections? Слышали про Reactive Extensions? Нравится LINQ? Не нравится писать спагетти-код? Нужны монады? И все это на JavaScript?
Тогда прошу под кат

Вклад авторов