Несколько дней назад на xkcd.com был опубликован комикс о неэффективных методах сортировки. Alt-текст к нему рассказывал о сортировке методом StackSort, который заключается в том, чтобы скачать со StackOverflow блоки кода, которые можно найти по запросу «сортировать список» и запускать один за другим, пока не найдётся работоспособный вариант. Бред? Ещё бы не бред! Встречайте на Гитхабе реализацию StackSort на JavaScript.
Читать полностью »
Рубрика «ненормальное программирование» - 108
Сортировка методом StackSort
2013-03-18 в 19:33, admin, рубрики: eval() is evil, Алгоритмы, коллективный разум, краудсорсинг, ненормальное программирование, метки: коллективный разумОсобенность Clip2Net дает доступ к персональным данным
2013-03-06 в 7:39, admin, рубрики: информационная безопасность, ненормальное программирование, файлохранилище, метки: parser, информационная безопасность, файлохранилище
Вступление
Добрый день, дорогой хабр!
Один из моих знакомых, с которым я работаю, часто использует сервис Clip2Net. Это удобно: делаешь скриншот, и он автоматически загружается в сеть, а ссылочка сразу идет в буфер обмена. И вот слал он мне скриншоты, слал, пока я не заметил одну интересную вещь. Оказалось, ссылки имели нечто общее, почти неуловимое глазу:
clip2net.com/s/2U4cw
clip2net.com/s/2U4cx
clip2net.com/s/2U4bA
А вы заметили приятную плюшку? Исходный код парсера картинок + разбор составляющих под катом.
Читать полностью »
Хак поиска кратчайшего пути в StarCraft
2013-03-04 в 10:33, admin, рубрики: blizzard, game development, Starcraft, История ИТ, ненормальное программирование, метки: blizzard, Starcraft
Один из ведущих разработчиков Warcraft и Starcraft Патрик Вайат периодически публикует воспоминания о своей работе в компании Blizzard в 90-е годы. Очень интересно посмотреть изнутри на процесс разработки игр, которые стали впоследствии культовыми. В последней заметке Патрик поведал замечательную историю, как пришлось впопыхах исправлять баги в StarCraft перед выпуском игры и что из этого получилось.
Читать полностью »
Автоматическое дифференцирование «на пальцах»
2013-02-28 в 5:19, admin, рубрики: Блог компании Intel, математика, ненормальное программирование, производная, численные методы, метки: математика, производная, численные методы В компании Intel разрабатывают не только ПО для «внешних» потребителей — пишутся и программы, которые используются только внутри Intel. Среди них довольно много средств для численного моделирования различных физических процессов, протекающих при изготовлении процессоров — ведь именно последние и являются основной продукцией Интела. В этих программах, конечно, широко используются различные методы вычислительной математики и физики.
Вот некоторое время назад мне понадобилось программно решать одно уравнение методом Ньютона. Казалось бы, все просто, но для этого надо уметь вычислять производную левой части уравнения. Эта левая часть у меня была довольно сложная — даже просто вычисление ее значений в программе было разбросано по нескольким функциям, — и перспектива вычислять производную на бумажке меня не радовала. Перспектива воспользоваться каким-нибудь пакетом символьных вычислений меня радовала не больше — перенабирать все формулы, содержащие к тому же несколько частных случаев, далеко не очень приятно. Вариант вычислять производную численно как разность значений функции в двух соседних точках, деленную на соответствующее приращение независимой переменной, чреват потерей точности и вообще необходимостью подбирать подходящее приращение этой переменной.
Подумав некоторое время, я применил следующий подход. Потом я узнал, что он называется «автоматические дифференцирование», для него существует довольно обширная литература на английском, и ряд библиотек — но на русском я нашел только некоторые научные статьи про применение этого метода, и пост на Хабрахабре, в котором все рассказывается через смесь дуальных и комплексных чисел, и понять который с ходу, на мой взгляд, тяжело. С другой стороны, для понимания и практического применения автоматического дифференцирования не нужны никакие дуальные числа, и этот подход я тут и изложу.
Читать полностью »
Эзотерический язык 4DL
2013-02-27 в 5:57, admin, рубрики: ненормальное программирование, эзотерические языки, языки программирования, метки: эзотерические языки, языки программированияЯзык 4DL был изобретён в 2001 г. автором Cliff L. Biffle. Как он сам объяснил, придумал он его во-первых, потому, что до этого языков с четырехмерными программами не существовало, а во-вторых, потому что четырёхмерное пространство довольно сложно для понимания, и надо же дать людям возможность потренировать мозги.
Русская Википедия относит этот язык к семейству «фунгеоидных». Это языки, ведущие свой род от языка Befunge, программы в котором записываются в виде символов на прямоугольной решётке и могут выполняться в произвольном направлении. В 4DL для представления программы используется четырёхмерная решётка, и направлений её выполнения, соответственно, 8.
Программа на 4DL может выглядеть, например, вот так:
X , B / B + 2 B - < ? T B - T
y __ 10 __ __ 7 __ __ A __ __ __ __ 07 __ __
------------------------------------------------------------------
__ Y __ __ __ __ __ __ __ __ . __ x __ __ x || __ __ __ __ __ __ __ __ __ __ 20 __ __ __ __ __
t X __ __ __ q + 2 q - < ? Z q - Z || z __ __ __ __ __ __ __ __ . b . x __ __ x
Эта программа написана не на «базовом» языке, а на его расширении, но об этом позже.
Читать полностью »
Непоследовательный компьютер
2013-02-15 в 18:23, admin, рубрики: fpga, биоинформатика, Исследования и прогнозы в IT, ненормальное программирование, отказоустойчивость, метки: fpga, отказоустойчивость Двое английских учёных Peter Bentley и Christos Sakellariou создали компьютер, который подобно мозгу человека выполняет инструцкии не последовательно, а сегментами в случайном порядке.
По словам учёных, такой механизм позволяет этому компьютеру адаптироваться к критическим ситуациям и обходить их без остановки работы.
Читать полностью »
Вычисление рекуррентных соотношений на Perl
2013-02-15 в 14:23, admin, рубрики: dsl, perl, ненормальное программирование, метки: dsl, perl Привет,
в этом посте я расскажу рецепт добавления функциональности в Перл.
Как уже стало понятно из названия, мы будем вычислять рекуррентные соотношения.
Например, формулы для вычисления факториала выглядят вот так:
f(0) = 1 f(n) = n * f(n-1)
Функциональные языки программирования позволяют определять такие функции достаточно просто, в Erlang это делается следующим образом:
factorial(0) -> 1; factorial(N) -> N * factorial(N-1).
А теперь попробуем сделать нечто похожее, что позволяло бы нам писать код вида:
#!/usr/bin/perl -I./lib
use strict;
use bigint;
use Recurrent;
recurrent fib => {
arg(0) => lambda { my($n) = @_; return 0 },
arg(1) => lambda { my($n) = @_; return 1 },
arg(n) => lambda { my($n) = @_; return fib($n-1) + fib($n-2) },
};
print fib(1000);
Из примера видно, что у нас появились новые функции recurrent, arg, n и lambda. На самом деле, практическая польза есть только у recurrent, все остальные нужны лишь для получения более «красивого» кода.
Давайте напишем модуль Recurrent.pm
Читать полностью »
Portable Prism
2013-02-14 в 19:42, admin, рубрики: .net, nuget, patterns and practices, pcl, Portable Class Library, Prism, WinRT, wp8, ненормальное программирование, разработка под windows phone, метки: .net, nuget, patterns and practices, pcl, Portable Class Library, Prism, winrt, wp8Посвящается фанатам группы Microsoft Patterns&Practices и просто любителям такой полезной штуки как Microsoft PRISM.
Разработчики, которые в своей практике встречались с Microsoft PRISM, вероятно, имеют двоякое мнение об этом фреймворке. С одной стороны, в своей по номеру 4-й, а по порядку 3-й, версии – это очень мощный и гибкий инструмент для создания композитных приложений, а с другой стороны довольно непонятная и запутанная библиотека. Но можно на PRISM взглянуть и просто как на реализацию шаблона MVVM, чем PRISM для Windows Phone по сути и является.
Читать полностью »
Универсальный пульт управления электроприборами из Android смартфона
2013-02-06 в 13:04, admin, рубрики: android, ненормальное программирование, освещение, Смартфоны и коммуникаторы, умный дом, метки: освещение, умный дом
Включение/выключение электроприборов удаленно — мечта многих лентяев и/или рационализаторов. Сидишь себе на кресле/диване, и выключаешь те светильники или электроприборы, которые не нужны. Разработчик Майк Лесли смог создать систему, которая выключает/включает лампы и светильники в его доме, слушаясь команд, подаваемых на смартфон.
Игры для программистов
2013-02-06 в 6:41, admin, рубрики: игры для программистов, ненормальное программирование, метки: игры для программистовДолжен признаться, что я плохой программист. Я не люблю настраивать Maven и писать конфигурации для Spring Framework. Я не знаю в деталях, как работает JVM (да и в общих чертах представляю это себе довольно смутно). Я плохо понимаю паттерны проектирования, а любая новая технология вводит меня в уныние. И тем не менее, я люблю программировать.
Специально для таких как я (а может, и для каких-то других) существует небольшой класс игр, представляющих собой квинтэссенцию программирования. В них не нужно скрещивать ежа с ужом и беспокоиться о версиях библиотек. Лишь кристально чистое алгоритмическое программирование, обёрнутое в симпатичный интерфейс — вот моё маленькое счастье.
Минуточку внимания.
Я не стану говорить о Robot Battle и тому подобных вещах. Вот не стану и всё. Возможно, я странный человек, но мне не нравится иметь дело с чем-то, хоть отдалённо напоминающим реальную физику. Интересующиеся могут почитать об этой игре здесь, а статья немного о другом.