Это статья — вторая (и заключительная) часть из серии о создании своих криптокотиков. В первой части мы узнали, что из себя представляет каждый Криптокотик, кто контролирует ход игры и как сделать котика в виде токена. Но для по-настоящему прорывного приложения нам необходимо определелить для них механизм размножения, а главное — рыночной торговли, чтобы участники могли выкупать друг у друга самых породистых котят.
Читать полностью »
Рубрика «ненормальное программирование» - 48
Создаем свои криптокотиков (Часть 2)
2018-03-12 в 6:03, admin, рубрики: blockchain, cryptocurrencies, erc20, Ethereum, solidity, token, биллинговые системы, монетизация игр, ненормальное программирование, Программирование, разработка игрРазработка игр под NES на C. Главы 17-21. Своя игра
2018-03-11 в 17:32, admin, рубрики: C, cc65, Nes, Nintendo Entertainment System, ненормальное программирование, разработка, разработка игрВ этой части соберем все вместе и сделаем простую скроллерную стрелялку на космическую тему: корабль летит и лазерами отстреливает врагов
<<< предыдущая следующая >>>
Источник
Планирование
Оптимизация кода в уме, или «Ну так же однозначно быстрее»
2018-03-08 в 15:30, admin, рубрики: C, c-lang, c++, ненормальное программирование, оптимизация кода, Программирование, системное программированиеНамедни работая над одной ошибкой в одном опенсорсном проекте, увидел как коллега (тоже работающий параллельно над той же проблемой) залил такой вот коммит [31a078bec7]:
/*
- * Select the list item based on the index. Negative operand means
- * end-based indexing (-2, ...), and -1 means out of range.
+ * Decode end-offset index values.
*/
- if (opnd < -1) {
- index = opnd+1 + objc;
- } else {
- index = opnd;
- }
+ index = opnd + (opnd <= TCL_INDEX_END)*(objc - 1 - TCL_INDEX_END);
pcAdjustment = 5;
Изменение само по себе правильное (теперь TCL_INDEX_END
есть константное определение (-2)
).
И грубо говоря в уме это разворачивается в следующее (все переменные int):
index = opnd + cmp(opnd, (-2))==>(0 | 1) * (objc - 1 - (-2));
Т. е. он как бы тем самым хотел сэкономить здесь один условный переход.
И всё как бы ничего, однако меня всё же насторожила такая казалось бы пустячная «оптимизация» с уклоном в арифметику.
Во первых, это изменение касается самой «главной» функции в этом проекте (TEBCresume
), ибо она ответственна за исполнение байт-кода (JIT скомпилированных инструкций языка TCL). По этой причине эта функция еще и самая большая (порядка 6 тысяч строк + примитивы и макросы) и одна из самых сложных в кодовой базе проекта, с множественными `goto`, головоломными макросами для работы со «стеком» исполнения, свёртка/развертка NRE (nonrecursive evaluation) и т.д. и т.п.
Т.е. изменения этой функции нередко рассматриваются под лупой, а то и под микроскопом (т.к. бывало что даже незначительные модификации могут перевернуть весь код этой функции с ног на голову)…
Во вторых, по роду деятельности мне часто приходится оптимизировать сишный код, разглядывая его ассемблерное отражение, выжимая доли микро- а то и нано-секунд, и я часто вижу, что там очень всё совсем не однозначно бывает. Как минимум иногда разворачивая такие вот «экономящие» условный jump конструкции обратно в if
или даже if/else
, я видел улучшение как и в результирующем ассемблерном коде, так и явно при конечном сравнении производительности результатов исполнения.
Собственно к чему я все это писал — хотелось на примере показать как оно бывает, ну и раз уж коснулись этой темы, собрать немного статистики. Посему пара опросов в конце статьи…
Читать полностью »
DSP на Java
2018-03-08 в 14:22, admin, рубрики: dsp, gnuradio, java, radio, rtlsdr, Алгоритмы, ненормальное программирование, Разработка систем связиJava — язык программирования общего назначения. Общего назначения — значит можно писать почти любые программы. Вот я и попытался написать программу, которую обычно пишут на С или C++. Под катом я попытаюсь рассказать, как я декодировал спутниковые снимки с Метеор-М №2.
Как я написал самую быструю функцию мемоизации
2018-03-06 в 0:35, admin, рубрики: javascript, memoization, optimization, ReactJS, redux, Клиентская оптимизация, ненормальное программированиеНа самом деле я писал возможно самую медленную функцию мемоизации, да получилась быстрая. Моей вины тут нет. Все дело в балансе.
В балансе между тем насколько долго будет исполнятся мемоизируемая функция, сколько дополнительного времени потребует сахар мемоизации, и (про это все забывают) сколько програмистов потребуется, чтобы эту мемоизацию правильно прикрутить.
Но начнем с простого — что же это за слово такое странно — «мемоизация».
Читать полностью »
Теория дряхлого ноутбука
2018-03-04 в 18:42, admin, рубрики: Железо, ненормальное программирование, Программирование, производительность, теории, юмор
Здравствуйте. Хочу поделиться немного глупой теорией. Суть ее в том, что дохлые ноутбуки, да и «железо» в принципе, заставляют вас делать софт лучше.
Читать полностью »
Разработка игр под NES на C. Главы 14-16. Работа со звуком
2018-03-03 в 21:17, admin, рубрики: C, cc65, Nes, Nintendo Entertainment System, ненормальное программирование, разработка, разработка игрВ этой части базовая информация о работе со звуком. Оно весьма запутано и использует специфическую терминологию, так что внятно описать его не особо получается.
Источник
Начало работы со звуком
Обзор инструментов, которые представляет нам платформа NES. Впрочем, дальше мы уйдем на более высокий уровень и будем использовать библиотеку Famitracker.
Проще всего пощупать звуковые возможности консоли можно с помощью демки Sound Test, разработанной SnoBrow. Она совместима не со всеми эмуляторами, но FCEUX поддерживается.
Кнопка Селект переключает звуковые каналы, Старт включает их. Доступны 4 канала:
1 — меандр 1
2 — меандр 2
3 — треугольный сигнал
4 — шум
Python, под пиратским флагом
2018-01-06 в 11:32, admin, рубрики: python, ненормальное программирование, программирование для начинающих, хакингЙо-хо-хо!
Пока IT сообщество увлеченно наблюдает за криптовалютами и их добычей, я решил помайнить то, что майнилось задолго до того, как крипта и все связанное с ней стало мэйнстримом. Речь конечно же об игровом золоте в ММО играх.
Реализовать задумку мне помог python 3.6 и советы коллег программистов. Хотя статья и будет опираться на пример в конкретной игре, цель ее больше не рассказать историю хака, а расхвалить питон и показать еще не освоившим, что с ним может делать человек-не-программист и почему это так круто.
Кроссплатформенная новогодняя демка на .NET Core и Avalonia
2017-12-29 в 7:44, admin, рубрики: .net, .net core, avalonia, C#, GUI, linux, MacOS, UI, unsafe, wpf, XAML, ненормальное программирование, Программирование, Разработка под Linux"ААА! Пришло время переписывать на .NET Coreǃ", говорили они, WPF в комментариях обсуждали. Так давайте же проверим, можно ли написать кросс-платформенное GUI приложение на .NET / C#.
Новогоднее настроение навеяло идею сделать анимацию падающего снега. Были такие демки под DOS, горящий огонь, фракталы, снежок, падающий на ёлочку, и так далее.
Как увидим ниже, это не только весело, но и позволит испытать ключевой функционал UI фреймворка. Поехали!
Визуальное программирование на языке ДРАКОН
2017-12-22 в 10:19, admin, рубрики: javascript, визуальное программирование, Дракон, ненормальное программирование, Программирование, структурное программированияВизуальное и текстовое программирование
Что является в программе движущей силой? Что порождает полезный результат? Конечно, алгоритм. Алгоритм создает тот эффект, ради которого написана программа. Алгоритм работает не один. Он работает совместно со структурами данных. Но именно алгоритмы составляют наибольшую часть программы.
Исторически сложилось, что алгоритмы в программах записываются в виде исходных текстов. Почти никто не ставит под сомнение, что текст — это и есть лучшее средство представления алгоритмов. Алгоритм кодируется внутри функций на языке программирования, например, C или JavaScript. Для тех, кто хочет разобраться в алгоритме с высоты птичьего полёта, предусмотрен псевдокод. Однако с текстом есть серьезные проблемы. Дело в том, что человек не оптимизирован под сплошной текст. Человек оптимизирован на восприятие графики. Текст — это относительно новое изобретение, а вот графическую информацию организмы обрабатывают уже миллионы лет.
Исходя из этого, логично было бы составлять алгоритмы в графическом виде. Посмотрите на инженеров. Они повсеместно используют чертежи. Чем же программисты хуже? Они тоже могли бы составлять чертежи алгоритмов. Некоторые здесь возразят: визуальное программирование якобы неэффективно. UML неудобен, а в блок-схемах легко запутаться. Уж лучше программировать традиционным способом — текстом. В структурном программировании есть хотя бы структура, и она обеспечивает порядок и единообразие. А кроме того, рисовать диаграммы долго и трудно. Печатать быстрее, чем рисовать.
Так что же, программисты обречены всю жизнь работать только с текстом?
Возможно, не всё так плохо. Существуют визуальные языки для представления алгоритмов, в которых тоже есть порядок и структура, например ДРАКОН, BPMN и LML Action Diagrams. Здесь мы рассмотрим визуальный алгоритмический язык ДРАКОН.
Как программировать на языке ДРАКОН
ДРАКОН не является самостоятельным языком программирования. Он работает в паре сЧитать полностью »