В этой статье представлен паттерн, который может быть использован для обеспечения динамического связывания без использования виртуальных функций для вызова перегруженных методов для объектов неоднородного контейнера при его обходе. Читать полностью »
Рубрика «ненормальное программирование» - 105
Полиморфизм без виртуальных функций
2013-06-10 в 13:05, admin, рубрики: c++, CRTP, pattern, sfinae, virtual, ненормальное программирование, ооп, полиморфизм, метки: c++, CRTP, pattern, sfinae, virtual, ооп, полиморфизмAssembler для Brainfuck
2013-06-09 в 12:54, admin, рубрики: Brainfuck, compiler, ruby, translator, ассемблер, брейнфак, компилятор, компиляция, ненормальное программирование, Песочница, руби, трансляция, метки: brainfuck, compiler, ruby, translator, ассемблер, брейнфак, компилятор, компиляция, руби, трансляция Одним холодным майским днем от скуки решил я таки приступить к изучению этого удивительного языка — Brainfuck'a.
Его интерпретаторы публиковали на Хабре уже очень много раз.
Но мне хотолось изучить поглубже сам язык и алгоритмы на нем, а не писать очередной интерпретатор. Поэтому было решено сделать из мухи слона компилятор какого-нибудь высокоуровневого языка в brainfuck.
Однако очень быстро начался реальный brainfuck: отсутствие оператора if, отсутствие произвольного доступа к ячейкам и куча других проблем сразу свалилась на меня. Пришлось повременить с высокоуровневым языком и сделать для начала ассемблер, в который и будет компилироваться высокоуровневый язык.
О реализации ассемблера под катом.
Читать полностью »
Классы в lua, или избавляемся от двоеточия
2013-06-03 в 19:13, admin, рубрики: Lua, классы, ненормальное программирование, ооп, метки: lua, классы, ооп Как всем известно, в lua нет как таковых классов и объектов. Однако есть метатаблицы и синтаксический сахар.
С помощью указанных механизмов достаточно просто реализовать подобие классов.
В итоге и получается нечто такое:
local MyClass = {} -- the table representing the class, which will double as the metatable for the instances
MyClass.__index = MyClass -- failed table lookups on the instances should fallback to the class table, to get methods
-- syntax equivalent to "MyClass.new = function..."
function MyClass.new(init)
local self = setmetatable({}, MyClass)
self.value = init
return self
end
function MyClass.set_value(self, newval)
self.value = newval
end
function MyClass.get_value(self)
return self.value
end
local i = MyClass.new(5)
-- tbl:name(arg) is a shortcut for tbl.name(tbl, arg), except tbl is evaluated only once
print(i:get_value()) --> 5
i:set_value(6)
print(i:get_value()) --> 6
Всё это конечно хорошо, даже при определённой сноровке можно реализовать наследование…
Но где public и private члены класса? Дефакто в этом примере они все public. Да ещё и надо помнить, где использовать двоеточие:
MyClass:myFunc()
а где просто одну точку:
MyClass.myOtherFunc()
А статические члены класса? Неужели придётся отказываться?
Читать полностью »
Пишем свой интерпретируемый шестнадцатиричный язык программирования для QR-кодов
2013-05-27 в 16:18, admin, рубрики: java, QR-коды, дополненная реальность, интерпретатор, ненормальное программирование, Программирование, метки: java, QR-коды, дополненная реальность, интерпретаторВдохновившись проектом Google Glass, я подумал, как хорошо было бы сделать крайне простой, но мощный инструмент дополненной реальности специально для таких очков. И почему бы не сделать его на основе такой широко используемой технологии как QR-коды. Так родилась задумка языка QuRava — набора байтов, записанных в QR-коде и интерпретируемого в полноценную программу, реализующую часть возможностей языка Java.
Хочу сразу предупредить, что все нижеизложенное — альфа-версия, сделано за несколько вечеров. Поэтому по поводу маленьких возможностей сильно не ругайтесь и вопросов про отсутствие лямбда-исчисления не задавайте.
Читать полностью »
Самая маленькая сбойная программа на C
2013-05-26 в 22:09, admin, рубрики: C89, компиляция, компоновщик, ненормальное программирование, метки: C89, MAIN, компиляция, компоновщикШведский студент Джестер Огвист (Jesper Öqvist) получил в универе домашнее задание: написать самую маленькую программу C, которая вылетает с ошибкой (segfault). Обычно студенты в таких ситуациях используют деление на ноль.
int main()
{
return 1/0;
}
Из этого кода ещё можно удалить пару байтов, если вместо инструкции использовать присвоение значения переменной.
int main()
{
i=1/0;
}
VNC через GIF
2013-05-24 в 18:56, admin, рубрики: gif, vnc, анимированный gif, Веб-разработка, ненормальное программирование, метки: gif, vnc, анимированный gifПолгода назад на Хабре излагалась идея GIF-сокетов — коммуникаций в реальном времени, используя анимированный GIF в качестве транспорта.
Идея в том, что в формате анимированного GIF'а не указывается количество фреймов, так что после отображения картинки браузер ждёт новых фреймов с сервера до тех пор, пока не получит сигнальные биты о конце файла. Другими словами, сервер легко может пушить в браузер сообщения по открытому каналу в GIF.
Сегодня на гитхабе опубликована программка vnc-over-gif, которая элегантно использует этот принцип. Программа снимает скриншоты экрана и транслирует их через анимированный gif.
Читать полностью »
Визуальный язык Дракон и его применение в ракетно-космической отрасли, медицине и других областях. Видео доклада В. Паронджанова
2013-05-23 в 14:45, admin, рубрики: Алгоритмы, Дракон, ненормальное программирование, обучение, Учебный процесс в IT, метки: Алгоритмы, Дракон, обучение Википедия о Драконе.
Дракон иногда называют правильными блок-схемами. Но в первую очередь он отлично подходит для записи алгоритмов.
Внутри НПЦ АП (Научно-производственный центр автоматики и приборостроения) Дракон используется с помощью закрытой технологии ГРАФИТ-ФЛОКС. За рамками НПЦ АП есть открытые технологии, на которых можно писать реальные программы на гибридных языках Дракон-Си, Дракон-Delphi, Дракон-1С, Дракон-ASM, Дракон-Erlang и т.д.
Доклад читает Владимир Паронджаров в Институте проблем управления РАН им.Пилюгина.
Автоматизация однотипных операций при настройке коммутаторов через telnet без программирования
2013-05-20 в 16:59, admin, рубрики: telnet, автоматизация, коммутаторы, ненормальное программирование, Сетевое оборудование, системное администрирование, метки: telnet, автоматизация, коммутаторыВступление
Добрый день уважаемые читатели!
Описанные ниже способ поможет сократить количество рутинной работы при настройке коммутаторов (например Planet, D-Link и др.) в случаях, когда необходимо выполнить несколько десятков — сотен однотипных операций вроде объявления виланов, добавления их на интерфейсы, экспорта конфигурационных файлов на tftp сервер. Безусловно решение далеко не оптимальное и рациональное, но, надеюсь, имеет право на жизнь.
Настройка производится через подключение по протоколу telnet. Увы, не смотря на то что современные свитчи поддерживают ssh и snmp, многие старые железки разумеют только telnet. Способ подойдет для среднего пользователя Windows, не программиста, т.к. используется всего лишь блокнот и пакетные bat файлы (просьба неровнодышащим к параолимпийским играм программистов дальше не читать).
Читать полностью »
Малая автоматизация, или как два байта переслать
2013-05-20 в 9:24, admin, рубрики: hardware, plc, автоматическое управление, ненормальное программирование, Программинг микроконтроллеров, метки: hardware, plc, автоматическое управлениеНемного обо мне
Я занимаюсь промышленной автоматикой. Буквально от головы до задницы, т.е. от полевого уровня (датчики/исполнительные механизмы) до верхнего (программирование ПЛК/разработка SCADA). Так получилось, что больше всего я занимался наладкой, но последний год — преимущественно разработкой. Кроме того, для меня программные и аппаратные средства делятся на Siemens и всё остальное.
О проекте
Суть проекта заключается в обновлении систем автоматики на довольно большом количестве насосных станций (водонапорных и канализационных). Кроме собственно обновления, была поставлена задача собирать и передавать текущие значения ряда параметров в общую диспетчерскую для централизованного архивирования и наблюдения. Территориально всё это хозяйство находится в Нижней Галилее, в Израиле.
На момент начала работ средства автоматики на разных станциях представляли собой весьма разнообразный зоопарк: от контроллеров ET-200S CPU на более свежих станциях до релейной логики на более старых. На текущий момент на разных станциях работают контроллеры Siemens, Twido (Schneider), Koyo, GE Fanuc.
Получилось так, что формально этот проект реализует Schneider Electric, наша компания является субподрядчиком. Это определило выбор SCADA для диспетчерской (Vijeo Citect) и контроллеров для станций, где требуется их замена.
Игра Жизнь и преобразование Фурье
2013-05-18 в 10:50, admin, рубрики: fft, life, жизнь, математика, ненормальное программирование, Программирование, свертка, фурье, метки: fft, life, жизнь, свертка, фурьеМногие слышали о великом и ужасном быстром преобразовании Фурье (БПФ / FFT — fast fourier transform) — но как его можно применять для решения практических задач за исключением JPEG/MPEG сжатия — зачастую остается неясным вопросом.
Недавно я наткнулся на интересную реализацию игры «Жизнь» Конвея, использующую быстрое преобразование Фурье(!!!) — и надеюсь, оно поможет вам понять всю силу и универсальность этого алгоритма.Читать полностью »