Все потоки
Поиск
Написать публикацию
Обновить
110.94

Ненормальное программирование *

Извращения с кодом

Сначала показывать
Порог рейтинга
Уровень сложности

Реверси на TCL в 64 строки

Время на прочтение4 мин
Количество просмотров4.4K
На хабре уже есть топики про написание игры Реверси (Отелло) на Python, Silverlight.
Изобретем велосипед на Tcl/Tk. Кроссплатформенно (работает даже на Windows Mobile при небольшой модификации), всего в 64 строки.

image

Код, небольшое описание и скрин с WinMobile под хабракатом.
Читать дальше →

~~Две тильды

Время на прочтение1 мин
Количество просмотров10K
Внезапно встретил такой JS-код:
var a = ~~b;
Сразу вспомнил, что ~ — это битовое дополнение, показалось, что написано просто
var a = b;
Однако битовые операции применимы только к целым числам, поэтому тут ещё неявное приведение типа. Самый короткий способ написать var a = Math.floor(b);?

Но не ведитесь на короткую крутую запись: Math.floor() работает вдвое быстрее (проверил в FF3.6).

~~$x для округления работает и в Перле, причём по времени столько же, сколько int($x). Интересно, что в других языках? В Питоне, наверно, тоже сработает? Upd: не сработало.

Все знают что "++i + ++i" — плохо, но что-же за ширмой?

Время на прочтение3 мин
Количество просмотров30K
Баг, выглядывающий из-за ширмы на вас о_ОНесомненно, все программисты знают что использование выражений, подобных тому что приведено в заглавии поста, не то что нежелательно, а строго противопоказано. Такие конструкции, поведение компилятора в которых не определено, могут принести множество трудноуловимых ошибок и нежелательных последствий. Но уверен, многим начинающим программистам хотелось бы по глубже понять эту проблему и, заглянув за ширму компилятора, узнать что же именно происходит в таких случаях. Изучению одного из примеров подобного кода я и посвящаю этот пост. Добро пожаловать под кат :)
Читать дальше →

Шуточный конкурс с дельными призами

Время на прочтение1 мин
Количество просмотров1.1K
Сообщество MSUG объявило о веселом конкурсе. Вы придумываете и присылаете анекдоты или шутки в формате программного кода или сказки, притчи и басни на ИТ тематику. Это могут быть видео и аудио варианты вашего творчества или стихотворения в стиле Крылова — выбор за вами!

Публиковать свои произведения альтернативного искусства можно в твиттере: анекдот-код с тегом #codejoke, басни/притчи — #itfairytale, на форуме или прямо в комментариях.

Нет никаких ограничение в выборе языка программирования для #codejoke. Для затравки:

image

Авторы лучших #codejoke и #itfairytale получат лицензированную Windows 7 Ultimate!

Кроме того, мы разыграем купоны со скидками для сдачи сертифицированных экзаменов, предоставим участникам доступ к оригинальным электронным книгам по последним технологиям Microsoft.
Читать дальше →

STDIO плагины или как совместить несовместимое

Время на прочтение1 мин
Количество просмотров745
Идея проста — подключаем к программе внешний модуль через pipe (STDIO или TCP/IP).
Обмен текстовыми командами в формате командной строки: <команда> [параметр [параметр [...]]]<CR/LF>
В качестве параметров могут быть любые сериализованные данные. Как в протоколах POP3/SMTP.
image
Таким образом, можно подключать к программе, например, проверку синтаксиса или переводчик, который реально находится где-то в интернете. Можно подключать плагины, написанные на любых скриптовых языках (батники, например) и платформах. Можно даже подключить программу саму к себе. =)

Весь нюанс в том, чтобы использовать пайпы как API для плагинов (вместо прямого вызова кода), а не для фильтров. Идея далеко не нова, но почему-то очень редко используется.
Читать дальше →

Море волнуется раз ..., или Капча 4D

Время на прочтение2 мин
Количество просмотров4.1K
Как то я уже писал топик про каптчу 3D
Дай карму! :)
А вчера решил слегка переделать, добавить рюшечек и еще одно измерение.
Долго сказка пишется, да быстро дело делается, рушил сделал и вот наваял гиперкуб Капчу 4D.
А посмотреть что получилось можно здесь

Деревянные игрушки или Как я писал мобильные игры с телефона

Время на прочтение4 мин
Количество просмотров9.7K
Когда-то, когда деревья были большими, а мобильники — ещё совсем дикими, и не существовало единых стандартов и Винды для телефонов, я был счастливым обладателем Siemens C72 — одного из немногих телефонов, позволяющих полноценно работать с файловой системой (на других телефонах в то время доступ к ФС был либо сильно ограничен, либо полностью отсутствовал).

Так уж вышло, что ПК к тому времени у меня ещё не было, а окунуться в увлекательный мир программирования уже хотелось. Так я поставил и родилась идея — начать кодить на мобильнике. Жесть, скажете вы? Оренбургские программисты настолько суровы, что мы пишут мобильные приложения на самих мобильных. Да, именно так, и я решил написать свою первую статью на Хабр, основываясь на своём опыте, т.к. в рунете подобные темы ещё не поднимались.

Итак, с чего все начиналось?

Читать дальше →

No Canvas

Время на прочтение7 мин
Количество просмотров2.6K
Возможно, это лучше перенести в «Я пиарюсь» или «JavaScript» (принимаются предложения). А может, стоит оставить всё как есть. Тем не менее...

3D с z-buffer-ом, субпиксельной точностью и освещением по Гуро на javascript? Да кто угодно сможет это сделать, используя canvas!

Можно долго и вкусно описывать преимущества канваса, но статья не про это; не менее интересно
посмотреть, чем же канвас плох.

Так чем же?

Лепестки роз на bash

Время на прочтение1 мин
Количество просмотров3K
Два года тому назад я вступил в братство хранителей тайны лепестков розы. Потратил на это два вечера и решил, что потратить еще один для написания игры на баше, будет не менее увлекательным занятием.

image

Для тех, кто не знаком с этой загадкой советую почитать историю о том, как вступал в братство Бил Гейтс
Читать дальше →

Сетевой морской бой на bash

Время на прочтение2 мин
Количество просмотров9K
Недавно с целью изучения bash написал на нем игру в «морской бой» для игры по сети. Игра получила название «Sink 'em all».

image

Из внешних программ используются только nc (для организации взаимодействия по TCP), stty (для выключения эха при нажатии клавиши) и clear (для очистки терминала).
Читать дальше →

Свои судоку на своих батниках

Время на прочтение2 мин
Количество просмотров5.2K
image
С предыдущего хабратопика я понял, что хабражителям очень понравился сапер на своих батниках и поэтому рискнул написать еще одну игру, а именно — Судоку. И опять же, на своих батниках.
Как и Minesweeper, Sudoku for cmd.exe имеет ряд следующих преимуществ:
  • Оригинальное лого
  • Двухцветный текстовой графический интерфейс (фон — чёрный, текст — серый)
  • Возможность воспроизведения программы практически на любом компьютере
В общем, это Судоку для настоящих мужчин. И скачать эту замечательную игру вы можете прямо сейчас, воспользовавшись этими ссылками: Plain Text | Google Docs
Читать дальше →

Работа с массивами в bat

Время на прочтение6 мин
Количество просмотров57K
Прочитав пост Свой сапер на своих батниках и пробежавшись по коду, наткнулся на комментарий, что в батниках нет массивов (кстати, в последней версии Сапера, о котором идёт речь в том посте, нет этого комментария). Так вот, если в батнике необходимо использовать некоторый набор значений, то логично объявить такое кол-во переменных, которое требуется и работать с ними. Собственно данный сценарий эту задачу помогает решить проще. Вот несколько примеров:

echo Создание массива А:
call :array new A "'one','two','three','foo','bar'"
echo Получение третьего элемента в result:
call :array get A 3 result
echo %result%
echo Изменение нулевого элемента
call :array set A 0 "первый элемент"

подробнее

Ближайшие события

Программируем «на уровне операционной системы»

Время на прочтение2 мин
Количество просмотров7.6K
b.s Сразу отбросим вопросы производительности, безопасности и оптимальности. Для данной зарисовки они не важны.

Последние топики про программирование на языке bat файлов напомнили вот такую концепцию. Оно конечно написано в шутку, но почему бы и нет. Может у кого-то в голове что-то и перевернет. ;)

Не претендую на авторство — наверняка такая идея уже кем-то была придумана ранее.

Итак. Возьмем для примера программку на языке C. Пишем, компилируем, получаем черный ящик бинарного кода. Он выполняется в отдельной области памяти и недоступен для простого обывателя (ну разве что вооруженного дебагером).

Для программки на скриптовом языке примерно то же самое — хоть исходники и под рукой, но что происходит в памяти интерпретатора — темный лес.

А не вывернуть ли все это наружу? На уровень доступный пользователю ОС. На уровень файловой системы. :)
Читать дальше →

Цепной квайн произвольного порядка на Python

Время на прочтение3 мин
Количество просмотров1.8K
   Впечатленный цепным полиглотным квайном японца, приведенным в этом хабратопике, я, ранее уже встречавшийся с программами-квайнами, решил познакомиться с ними плотнее. После беглого гугления и непродолжительного чтения вики/блогов/сайтов по теме, у меня зачесались руки и захотелось написать свой квайн. Квайн был написан, даже в нескольких вариантах, но этого мне показалось мало. Позже я даже написал двойной квайн (код на python генерирует код на prolog а код на prolog в свою очередь первоначальный python-код).

   Однако, тут возник вопрос. А можно ли написать квайн любого порядка (т.е. тот, который будет переходить сам в себя после N запусков)? Как оказалось, это вполне возможно. Результатом изысканий явился следующий код:

# xonix
L=19;B,Q,N,q,n=map(chr,(36,81,78,39,10))
X='import sys;sys.stdout.write(%s%s%s.replace(chr(36)+chr(81)+chr(36),chr(39)).replace(chr(36)+chr(81),chr(36)).replace(chr(36)+chr(78)+chr(36),chr(10)).replace(chr(36)+chr(78),chr(36)))'
Y='# xonix%sL=%s;B,Q,N,q,n=map(chr,(36,81,78,39,10))%sX=%s%s%s%sY=%s%s%s%sE="""%s""";exec E%simport sys;sys.stdout.write(b())'
E="""def b(l=L):
  if l==L: Ql=q
  else: Ql=B+Q*(L-l)+B;Nl=B+N*(L-l)+B
  if l>0: return X%(Ql,b(l-1),Ql)
  else: return Y%(Nl,str(L),Nl,Ql,X,Ql,Nl,Ql,Y,Ql,Nl,E.replace(n,Nl),Nl)"
"";exec E
import sys;sys.stdout.write(b())


Читать дальше →

Свой сапер на своих батниках

Время на прочтение6 мин
Количество просмотров14K
image

Однажды захотелось мне написать Minesweeper… на батниках. И я его написал.

Встречайте!!! Minesweeper for cmd.exe

Итак, особенности данного продукта:
  • Оригинальное лого
  • Двухцветный текстовой графический интерфейс (фон — чёрный, текст — серый)
  • Возможность воспроизведения программы практически на любом компьютере
В общем, это настоящий сапер (а не те жалкие подобия — KMines и сапер for Windows) для настоящих мужчин. И далее вы сможете прочитать как сделать свой крутой сапер.
Читать дальше →

Немного Математики, Хабра и Марио или играемся с табулированием

Время на прочтение1 мин
Количество просмотров1K
Здравствуйте!
Возможности компилятора MSVC практически безграничны для творчества, поэтому я решил поэкспериментировать с табулированием и знаками "+"/"-". Пока создан только один экспонат, но я надеюсь развить эту мысль и сделать что-то грандиозное!
Читать дальше →

PHP: массивы, возвращаемые функцией

Время на прочтение4 мин
Количество просмотров11K
Мне нравится PHP (если вам не нравится — пожалуйста, забудьте про этот топик. Не надо холиварить) и еще мне нравится одна штука, которая прям везде есть, а в PHP отсутствует:

superFunction(foo, bar)[2];


Что делает этот код? Правильно! Возвращает третий элемент массива, который возвращает superFunction() с аргументами foo и bar.

В PHP-синтаксисе это выглядело бы так:

superFunction($foo, $bar)[2];


Вот только этот код выдает Parse Error. «И поделом!» — раздаются уж крики ненавистников синтаксического сахара. Я предлагаю им тоже отправиться подальше от этого топика, чтобы не холиварить и не доказывать, что это не нужно (посмотрите, в каком я блоге это разместил, в конце-то концов).

На сайте PHP я узнал, что такого синтаксиса разработчики позволять не планируют даже в 6 версии. Ну, блин. Я и сам — молодец! Итак, за ночь я написал небольшой класс, который, если его правильно использовать, разрешает работать с массивами по-человечески.

мне не страшно

Ностальгия: «Ящеры» на батнике

Время на прочтение3 мин
Количество просмотров6.5K
Все мы помним свой первый компьютер, а если вы программист, то и первую программу. Первым компьютером у меня был ZX-Spectrum, а первой написанной под него программой была игрушка «Ящеры» на Бейсике. Ну, если быть честным, то я ее просто переписал из одной книги1, попутно разбираясь в коде и исправляя допущенные автором ошибки :)

2.jpg - Picamatic - upload your images

Решил я дать вторую жизнь вышеуказанной игрушке. Но переписать ее на любом из известных мне языков было бы слишком просто. А так как я люблю писать батники, то переписал я ее на последних :)

Читать дальше →

Вклад авторов