Обновить
137.29

Ненормальное программирование *

Извращения с кодом

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

Эмулятор в эмуляторе для проигрывания чиптюн-мелодий на YM2149F

Время на прочтение4 мин
Охват и читатели6.6K

Кто помнит Tetris 2 на Спектруме? Там были куча уровней, возможность играть вдвоём и классная музыка.

Недавно мы сделали 8-битный компьютер для несложных игр, но никаких звуковых возможностей в нём не предусмотрели. И вот захотелось добавить туда какую-нибудь 8-битную музыку. Мне вспомнилась именно мелодия из Tetris 2 (много за ним часов проведено), поэтому я стал с ней ковыряться.

Процессор ATmega328P в нашем компьютере большую часть времени занят отрисовкой изображения, поэтому времени на синтезирование нормальной музыки совсем нет. Значит нам понадобится звуковой процессор YM2149F (он же AY-3-8910), такой же как в ZX Spectrum и других компьютерах.

Когда 2 + 2 = «4»

Время на прочтение3 мин
Охват и читатели21K
Во время отдыха от отладки JavaScript, я читал статью про особенности PHP и неожиданно задумался каковы же будут результаты сравнения 2 + 2 = «4» для разных языков программирования. И вот что из этого получилось.
Итоговая таблица для тех кто не хочет много читать
Результат Ошибка компиляции False True
Языки C++
Pascal
FORTRAN-95
Java
C#
Go
Rust
Haskel
C
Lisp
Python
Lua
Ruby
JavaScript
PHP
Perl

Компилятор C выдаёт предупреждение, компилятор C++ ошибку которая превращается в предупреждение если указать флаг -fpermissive.

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

Бонусом — функции вывода на консоль для этих языков.
Читать дальше →

Вложенные логические выражения

Время на прочтение9 мин
Охват и читатели9.4K
Привет. В этой статье я расскажу, как можно очень сильно заморочиться. Как несколько мыслей могут захватить голову на годы, и даже повлиять на жизнь. Я расскажу, как складывать и умножать числа, как вычислить md5, а может и искать числа из гипотезы Эйлера.
Читать дальше →

Разработка игры Frogger для компьютера Vectrex

Время на прочтение21 мин
Охват и читатели4.9K
Какое-то время назад я переводил рассказ Chris Salomon о его разработке игры Frogger для компьютера Vectrex. Тот рассказ, написанный им в 1998 году, является, на мой взгляд, очень интересным документом, позволяющим проникнуться как духом этой необычной платформы, так и спецификой разработки на ассемблере вообще.

Chris не забросил Vectrex и, сравнительно недавно, довёл до релиза собственный эмулятор Vectrex для Windows (лучший, на данный момент) под названием «Vide». Мне, к слову, приятно, что мои исходники Electric Force помогли ему реализовать приличную поддержку отображения векторных кривых в этом эмуляторе.

И вот, получив в руки такой мощный инструмент, Chris не смог отказать себе в удовольствии вернуться к своему старому Frogger'у, чтобы доработать и улучшить его. Об этом он рассказал в своём блоге.

Таким образом, здесь я публикую две части моего перевода — первую, об оригинальной разработке 1998 года (из файла progger.txt, бродившего вместе с исходниками игры) и вторую — о её продолжении (из блога автора).

Нестандартный подход к программированию микроконтроллера

Время на прочтение4 мин
Охват и читатели22K
В данной статье будет рассмотрен нестандартный подход к созданию программы для микроконтроллера. Для примера построим проект «кодового замка»; программа для микроконтроллера будет написана в визуальной среде Horizont Configurator.
Читать дальше →

Пишем задачки на FBD. Пятнашки и Симпсон

Время на прочтение10 мин
Охват и читатели29K
Здравствуйте.

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

Для начала напомню правила игры: игра в «15», «Пятнашки», «Такен» — популярная головоломка, придуманная в 1878 году Ноем Чепмэном. Представляет собой набор одинаковых квадратных костяшек с нанесёнными числами, заключённых в квадратную коробку. Длина стороны коробки в четыре раза больше длины стороны костяшек для набора из 15 элементов, соответственно в коробке остаётся незаполненным одно квадратное поле. Цель игры — перемещая костяшки по коробке, добиться упорядочивания их по номерам, желательно сделав как можно меньше перемещений.

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

Вот что получилось в итоге:


Описание программы, комментарии и картинки под катом.
Читать статью

Работа мечты и бесплатный кластер на 1 миллион мета-данных

Время на прочтение4 мин
Охват и читатели12K
Доброго времени суток!

Мы решили дать публичный доступ к архиву 1 млн насыщенных мета-данными сообщений соцмедиа (несколько сотен источников, включая посты и комментарии соцсетей, блогов, форумов, СМИ и т.п.).
Предлагаем попробовать свои силы в создании различных эвристик, закладываемых в классические SMA-системы (Social Media Analytics). Чем больше эвристик вы придумаете и сможете реализовать, тем выше ваш класс в Data Scientist. Возможно в вас живет настоящий профи: Data Scientist — одна из крутых профессий ближайшего будущего!

Для состоявшихся фанатов-профи — это возможность проверить и показать свои способности, а также, при обоюдном желании и радости, получить годовой контракт на $30.000 — $50.000.



Подробнее под катом
Читать дальше →

Игра «Wappo» на FBD или минутка доброты

Время на прочтение10 мин
Охват и читатели9.5K
Приветствую всех.

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

Недавно с одним из коллег зашел разговор про начало двухтысячных, и почему-то вспомнились первые наши мобильные телефоны Siemens и игра Wappo. В итоге сама собой родилась идея написать эту игрушку использую средства проектирования ПТК «Квинт 7». Т.к. больших усилий и кучи времени на это не требовалось, то вот результат:



На все это дело затрачено две половинки обеденных перерывов (совместно с распитием кофе) и пара часов вечером на рисование картинок в MS Paint.
Подробное описание под катом

Фишки XAML-разработчика: динамический Grid

Время на прочтение6 мин
Охват и читатели19K
В статье рассмотрим несколько полезных усовершенствований для контрола Grid.
image
Читать дальше →

Забытое слово: environment

Время на прочтение2 мин
Охват и читатели13K
Давным-давно, когда компьютеры были большими, а программы маленькими, использовалось такое важное понятие, как Environment. Этот хороший термин уже утратил зарезервированный смысл, но не потерял своей актуальности. В связи с широким использованием виртуализации, информация об операционном окружении стала предметом обсуждения и в чем-то даже спортивного интереса среди программистов. Поучаствовать в этом мы решили с «железным» аргументом — инструкцией CPUID.
Читать дальше →

Используем TSQL для игры в «Судоку»

Время на прочтение6 мин
Охват и читатели9.7K
После того как при помощи TSQL была успешна решена «Балда» (статья) я решил попробовать решить на нем «Судоку» (спасибо за идею shavluk).

Решение судоку получилось на удивление достаточно простым.

Базовая схема имеет следующий вид:

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

Личный веб-сервер на Wolfram Language

Время на прочтение5 мин
Охват и читатели14K
Иногда людям хочется быстро сделать веб-сервер, корневая логика которого будет на Wolfram Language. Существует правильный и долгий путь. Наградой будет красота решения и производительность. И существует второй путь. О нем мы и поговорим.
Читать дальше →

Простая игра средствами ПТК «Квинт 7»

Время на прочтение8 мин
Охват и читатели10K
Здравствуйте.

Продолжаем тему написания простых и забавных программ, используя ПТК «Квинт 7» российской разработки. В предыдущих постах показывалось как можно просто и быстро написать игрушку вроде змейки или сапера. Но не смотря на то, что это две совершенно разные игрушки, с точки зрения программирования на CFC (в результате спора с одним товарищем пришли к мнению, что данный язык все-таки ближе к CFC чем к FBD) это была фактически одна и та же программа с небольшими косметическими изменениями. В этой статье мы с вами рассмотрим новый пример программирования, написав с нуля простенькую игрушку «БлэкДжек». Если Вас заинтересовала эта тема, добро пожаловать под кат.

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

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

Пример простейшего cgi сервера

Время на прочтение7 мин
Охват и читатели45K
Думаю многие знают, как работает CGI взаимодействие между клиентом и сервером: клиент получает от сервера и отдает серверу данные через стандартные stdin и stdout. Многие наверное даже сами писали CGI клиентов, ведь по сути — любой скрипт для веб-сервера это и есть CGI-клиент.
А многие ли задавались вопросом, как именно происходит эта «магия»? Каким образом стандартные функции для ввода/вывода вместо экрана взаимодействуют с сервером?

Результаты поиска ответа в сети меня не удовлетворили и я решил сам написать простейший CGI сервер, который сможет:
  • Запускать дочерний процес — CGI скрипт
  • Передавать скрипту переменные окружения и переменные командной строки
  • Принимать от скрипта ответ
  • Завершаться, когда завершится процесс клиента

Кроме этого, мне хотелось, чтобы клиент и сервер компилировались как в Windows, так и в Linux.
Подробности

Программирование смайликами

Время на прочтение2 мин
Охват и читатели14K
image

В честь сегодняшнего светлого дня публикую эту статью. Ведь вам тоже иногда кажется, что код состоит из смайликов?

Ruby


Определение значения по умолчанию или мимика губами:
foo ||= []
foo ||= {}
foo ||= ''
foo ||= 0

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

Чат вконтакта в качестве терминала

Время на прочтение3 мин
Охват и читатели24K
Вдохновлённый постом «Простой диспетчер задач с веб-интерфейсом, написанный на языке GO для Unix-систем включая Android», языком Go и утилитой simple status, я решил написать в качестве забавного эксперимента чат-бота для социальной сети Vkontakte со схожим функционалом.

Почему выбор пал на чат-бота и социальную сеть? Кроме очевидного just for fun имеются и практические выкладки:
  • Не нужны дополнительные телодвижения для доступа к приложению, запущенном на компьютере с динамическим ip или находящимся за роутером.
  • Доступ к Вконтактике есть практически везде – достаточно иметь при себе телефон с доступом в интернет.
  • Вопрос о реализации аутентификации на уровне конечного приложения практически отпадает.

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

Кроссплатформенная оценка графических возможностей в контексте UEFI

Время на прочтение4 мин
Охват и читатели9.3K
В отличие от систем с архитектурой x86, использование UEFI (Unified Extensible Firmware Interface) на ARM-платформах не стало топом в IT-новостях. Из этого не следует, что расширяемый интерфейс фирменного программного обеспечения – идея только для рынка персональных компьютеров. Спецификация UEFI декларирует универсальные подходы для инициализации любого аппаратного обеспечения и его взаимодействия с операционной системой.

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

Генерация P/Invoke сигнатур в C#. Нецелевое использование Interface Definition Language и OLE Automation Type Libraries

Время на прочтение20 мин
Охват и читатели17K
Это НЕ очередная статья о том что такое P/Invoke.

Итак, допустим в сферическом C# проекте необходимо использовать какую-либо технологию, отсутствующую в .NET, и все что у нас есть это Windows SDK 8.1 в котором имеется лишь набор заголовочных файлов для C/С++. Придется объявлять кучу типов, проверять корректность выравнивания структур и писать различные обертки. Это большое количество рутинной работы, и риск допустить ошибку. Можно конечно написать парсер заголовочных файлов… Тут просто и понятно все кроме количества требуемых на это человекочасов. Поэтому этот вариант отбрасываем и постараемся как либо иначе свести к минимуму количество необходимых действий для взаимодействия с unmanaged кодом.

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

Гик приспособил Kinect для игры в Tetris

Время на прочтение1 мин
Охват и читатели1.2K


Понятно, что сам по себе тетрис уже мало кого интересует в качестве игры (хотя, это не совсем верное утвеждение, в тетрис играет множество людей, хотя бы на мобильном телефоне, стоя в очереди за пивом билетами в театр). Однако гики используют эту игру для того, чтобы показать собственное умение приспосабливать всякие неподходящие для игры устройства в качестве платформы для тетриса. Самой игрой никого не удивишь — ведь даже уже некоторые модели осциллографов есть со встроенным тетрисом, что уж и говорить о мобильных телефонах, часах и тем более, игровых консолях. Один из умельцев объединил старую игру (Тетрис) и новый гаджет (Microsoft Kinect), создав нечто особое.

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

Пишем интерпретатор Brainfuck на Mercury

Время на прочтение5 мин
Охват и читатели2.5K
Продолжая неделю Brainfuck на хабре и свои эксперименты с Mercury, написал свою версию интерпретатора. Заранее прошу извинить, что еще не представил «вступительную» статью о Mercury. На самом деле, она в процессе написания.
Пока же приведу код решения, который проиллюстрирует заодно несколько возможностей языка Mercury.
Читать дальше →

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