Рубрика «ненормальное программирование» - 110

Стремимся к «pixel perfect» + прячем окно от RDP!

imageЭто продолжение серии постов с префиксом «15000 FPS», начатло тут: часть 1 и часть 1.5. Можно и к этому окну добиться 15К FPS, но разумный подход тут не долбить FPS в цикле Render(), а перерисовывать лишь при необходимости, а большую часть остальной работы за нас винда сама сделает. Глядя на скриншот, первая мысль кодера — «ха, да мы все умеем делать нестандартные окна!».
Но дизайнер поопытнее заподозрит неладное: тень от окна какая-то не виндовая, и вообще тут градиенты и альфа-смешивание, не обошлось без честных 8 бит на альфа-канале. Как?
А нужен только Win32 API + System.Drawing.Bitmap, работать будет даже на Win2K с .Net 2.0 и это окно великолепно и быстро масштабируется и перемещается без глюков.
«Кастомное альфа-смешивание окна на десктоп и не тормозит? Вы шутите?».
Читать полностью »

Сказал как-то раз Евклид, что параллельные линии не пересекаются. И назвал он это пятым постулатом. Жалко, что не вторым.

В этой статье я бы хотел перейти от сферических котов Шредингера в резонаторах Гельмгольца к чему-то более практичному, тем более, что Хабр интересуют физические реализации и применение квантовых компьютеров.

Тут я решил рассказать про составные системы и описать алгоритм Дойча.

Читать полностью »

Хей, Амиго!
Я уже очень давно читаю Хабрахабр и встретил очень мало статей, посвященных квантовым компьютерам. И ни одной про квантовые вычисления.

«Надо это дело исправить», подумал я. Тем более, что эта тема довольно интересна.
Читать полностью »

Ранее я уже писал о том как решал проблему представления скриптов в удобочитаемом виде в одном активационном проекте, в сфере традиционной телефонии. Напомню, что речь шла о передаче управляющих команд на АТС Alcatel S12 и M200 через Serial или TCP-соединение. Несмотря на всю «велосипедность» описанного подхода, он полностью себя оправдал. Уже первый просмотр сгенерированного скрипта, позволил обнаружить и исправить серьезные ошибки в логике активации, поиск которых непосредственно в таблицах AST-представления занял бы гораздо больше времени.

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

Добрый день хабр. В статье я расскажу, как используя синтаксис php, можно написать функцию, для вывода переданной ей строковой переменной, не использующую в своем теле символы «a-zA-Z0-9<>?»

Вообще на хабре уже проскальзывали ссылки на статьи об использовании undefined variable, так что ничего нового я скорее всего не открою.
Читать полностью »

С новым годом! или Демосцена на калькуляторе
Захотел я сделать всем подарок на новый год, а какой подарок может быть лучше демки?
Да не простой, а новогодней демки для графического калькулятора.
Читать полностью »

image

В один прекрасный день меня одолело странное желание — пользоваться всей мощью моего андроид-смартфона в консоли. Очень удобный способ для всяческих утилитарных задач. В консоли — это ключевой момент моего повествования.
Как таковая разработка под Android (если мы говорим про стандартный Android SDK, а не NDK) не подразумевает консольного программирования. Активити, сервисы, интенты — в общем, на эту тему написан не один десяток статей, а моя — о другом.
Читать полностью »

Однажды в своем блоге коллега разместил картинку:
image

Вспомнив про статью Задача о восьми Ферзях на Oracle SQL, решил попробовать решить ее аналогичным путем.
Читать полностью »

Я работаю программистом более 5 лет (web), и хотел бы поделиться методикой, которая экономит силы, время и помогает автоматизировать процесс проектирования.

Методика основана на объектно-ориентированном проектировании, но несколько необычна. Зато имеет очевидные плюсы:
— в идеале, программирование по CORE сводится к описанию задачи (код близок к бизнес-логике)
— чётко разделяет систему на слабосвязанные компоненты
— легко автоматизируема, позволяет генерировать осмысленный код

Почему методика называется CORE и как это расшифровывается? Отчасти потому, что у меня тяга к красивым названиям. По буквам:
Context — контекст вычислений (что инициировало вычисления)
Object — объект, который производит вычисления
Request — действие, которое нужно совершить, чтобы объект смог продолжить вычисления
Event — событие, которое происходит с объектом

Плюсы по сравнению со стандартными способами разработки:
— ускорение стадии проектирования за счёт формализованной схемы проектирования
— ускорение стадии разработки за счёт умной генерации кода
— автоматизация создания юнит-тестов
— неглючная реализация бизнес-логики практически любой сложности
— простая поддержка кода
— простота совместного владения кодом

Минусы стандартных способов по сравнению с CORE:
— часто нельзя окинуть одним взглядом всю часть системы
— нужно самому продумывать когда и в каком месте будут вызываться обработчики тех или иных действий. CORE разруливает вызовы автоматически.
— часто вводятся дополнительные уровни абстракции, не связанные с бизнес-логикой, чтобы реализовать её особенности. в CORE это не нужно.
— программист часто совершает кучу однообразных действий, которые легко можно автоматизировать
— юнит-тестирование внедрять тяжелее

Читать полностью »

Сотрудница instructables.com Аманда Гассей проделала впечатляющую работу по созданию технологии трёхмерной печати грампластинок. Практической пользы от этого пока немного, но подробная история её исследований и экспериментов, выложенная на instructables, читается, как увлекательный детектив. Разрешения лучших современных 3D-принтеров едва хватает, чтобы добиться качества звучания, сравнимого с первыми аудиозаписями XIX века, но тем интереснее задача.


Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js