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

Тёплый деревянный звук

Аманда Гассей, которая несколькими месяцами ранее умудрилась распечатать на 3D-принтере работающую грампластинку, продолжает безумствовать. Опираясь на наработки из предыдущей серии экспериментов, теперь она с помощью скриптов на Python и Processing преобразовала файл MP3 в программу для 120-ваттного лазерного резака Epilog Legend 36EXT и смогла вырезать грампластинку из дерева и даже из плотной бумаги. Характеристики несколько хуже, чем у записей, распечатанных на 3D-принтере — 4-5 бит и 4,5 кГц. Как и в прошлый раз, подробное описание эксперимента и все использованные скрипты опубликованы на Instructables.

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

imageВ предыдущем топике я обещал подробнее описать особенности программирования промышленных PLC, и почему такое программирование все больше напоминает разработку обычного софта. О языке IEC61131-3 (промышленном диалекте Паскаля) я уже писал, также хорошим вступлением можно считать вот этот хабратопик. Этот пост — о компиляторах PLC, средах разработки, особенностях программирования и эволюции языка и экосистемы.
Читать полностью »

Задача: Язык javascript. Имеется большой массив объектов. Нужно выбрать из массива некоторые объекты, в зависимости от значений свойств этих объектов.

Внимание! Всё нижеследующее возможно дикий баян и скорее всего стрёмный велосипед. Приведённый код опытным программистам отрубает пальцы, а неопытных разрывает в клочья.
Читать полностью »

Недавно заинтересовался инстанцированием плюсовых шаблонов. В интернетах втречается термин code bloat. Для с++ это может означать неконтроллируемое увеличение кода генерируемого компилятором. Код увеличивается за счет того что инстанцирование новой функции имеет более высокий приоритет чем преобразование аргументов к более удобному типу. Т.е. template T foo(T a); для int и char — это две разные функции. Получить одну функцию можно либо отказом от шаблонов, либо использованием явного преобразования типов.
Но давайте вывернем проблему наизнанку и попробуем получить из минимума строк кода исполняемый файл максимально возможного размера.
Результат не очень впечатил — у меня получилось всего 53Mb из 60 строк кода. И то лишь для одного из трех опробованных компиляторов и ценой нескольких часов компиляции. Максимальное отношение объем/строки — 2.3МБ/строку для объема 14МБ.
Как и почему так получилось — под катом.
Читать полностью »

Today's software engineering word is «farpotshket.» This is a Yiddish word meaning, «broken, because someone tried to fix it.»
(с) Andr Zerozero

Схлеснулись мы тут на днях на работе по вопросу «А хорошо бы закешировать регулярку», в совершенно банальной функции

  uncached = function(data_in) {
    return /_(d)+(?:#(d)+)?$/.exec(data_in);
  };

сделав как-то так

  cached = (function() {
    var pattern = /_(d)+(?:#(d)+)?$/;
    return function(data_in) {
      return pattern.exec(data_in);
    };
  })();

Идея популярная, но многие ли задумывались о реальном профите и накладных расходах?
Читать полностью »

Давным-давно, когда трава была зеленее, а деревья выше, жил-был тролль, по имени Xenocephal. Жил он, в принципе, во многих местах, но мне повезло встретить его на одном форуме, где я, в то время, набирался ума-разума. Я уже не вспомню топика, в котором протекала беседа, но суть ее сводилась к тому, что Xenocephal пытался убедить всех окружающих, что Lisp (с его макросами) — всему голова, а C++, с его шаблонами, жалкое подобие левой руки. Также утверждалось, что наметапрограммировать в нем что-то сложнее набившего оскомину факториала не представляется возможным.
Читать полностью »

Пришла мне однажды идея: есть стек вызовов и стек как структура данных. А нельзя ли использовать стек вызовов для хранения данных?
Немного поразмыслив я понял, что можно, только с ограничениями: во первых для обработки значений придётся использовать колбеки (ведь пока значение на стеке, нельзя выходить из того вызова, в котором мы его сохранили). Во вторых доступ строго LIFO.
Реализация — под катом.
Читать полностью »

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

В статье будут затронуты вопросы:

  • Работают ли реально эти технические ограничения?
  • Как сказываются эти ограничения на заказчике и исполнителе?
  • Что делать в итоге?

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

Марафонские задачки по С++Приветствую всех!

В этом посте мы обсудим решение нескольких задачек, которые я подсмотрел из «Марафон задач по С++» (мне кажется ссылки легко найдутся поисковиком). Нет, к сайту я решительно никакого отношения не имею, однако узнал о нем с хабра: либо был у кого-то в профиле, либо была ссылка в комментариях. Итак, определимся с задачками, решения которых будут рассматриваться (задачек всего 9, но эти показались мне интересными):

  • Забыл, как умножать. Помогите!
    Умножить число на 7, не используя операцию умножения.
  • Два в одном.
    Какой-то умник поменял местами кнопки в лифте. Поставил вместо первого этажа второй, а вместо второго – первый. Честное слово, мне лень ковырять кнопки. Я лучше перепрограммирую лифт. Но программировать мне тоже лень. На вас вся надежда. Напишите, пожалуйста, функцию-переключатель, которая возвращает 1, если на входе 2 и 2, если на входе 1.

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

Играем в Pong на стене 29 этажного здания (видео)

В пятницу вечером жители Филадельфии могли любоваться непривычным зрелищем: игрой в Pong на стене 29-этажного здания. Здание покрыто сетью светодиодов, которые и позволили создать соответствующую систему. Автор системы — Фрэнк Ли, профессор Университета Дрексела. Система, созданная этим специалистом, позволила контролировать игровой процесс с обычного ноутбука, подключенного к управляющей системе.

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


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