Как стать автором
Обновить
82.76

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

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

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

HTTP сервер на bash

Время на прочтение1 мин
Количество просмотров16K
Вполне себе полноценный HTTP сервер, написаный на bash, одной строкой.

:;while [ $? -eq 0 ];do nc -vlp 8080 -c'(r=read;e=echo;$r a b c;z=$r;while [ ${#z} -gt 2 ];do $r z;done;f=`$e $b|sed 's/[^a-z0-9_.-]//gi'`;h="HTTP/1.0";o="$h 200 OK\r\n";c="Content";if [ -z $f ];then($e $o;ls|(while $r n;do if [ -f "$n" ]; then $e "`ls -gh $n`";fi;done););elif [ -f $f ];then $e "$o$c-Type: `file -ib $f`\n$c-Length: `stat -c%s $f`";$e;cat $f;else $e -e "$h 404 Not Found\n\n404\n";fi)';done

Автор сего извращения любопытного проекта — Alexey Sveshnikov.
Всего голосов 187: ↑168 и ↓19+149
Комментарии77

Io Language: Система сообщений

Время на прочтение5 мин
Количество просмотров2K
Сегодня продолжим цикл статей, начатый достопочтенным semka. Поговорим о сообщениях.

В Ио нет вызовов функций, но есть посылка сообщений. У сообщения могут быть аргументы (почти как аргументы функции), но аргументы сообщений не выполняются перед посылкой.
Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии20

www.contextfreeart.org — программирование на службе искусства

Время на прочтение2 мин
Количество просмотров1.6K
Пост тем, кто хочет немножко отвлечься от работы и поразвлекаться с умом.

Сегодня наткнулся на интересный проект: contextfree

Все помнят курс теории компиляторов с университета? contextfree — генератор изображений на основе контекстно-свободных грамматик. Терминалами выступают простые графические примитивы (CIRCLE, SQUARE, TRIANGLE и т.д.). Нетерминалы задаем мы. Правила вывода могут включать в себя так называемые преобразования (повернуть, отразить, сдвинуть, поменять цвет). На основе этой простой модели можно получать очень интересные вещи… буквально несколькими строчками кода.

Начнем с простого примера:
startshape JustASquare //Начальный символ грамматики

background { b -1 } //Здесь мы задаем фон. b -1 - означает преобразование
//По умолчанию фон белый (brightness = 1), мы изменяем brightness до 0.

rule JustASquare { // Здесь мы задаем простое правило.
SQUARE { b 1 r 45 } // Белый квадрат, повернутый на 45 градусов.
}



Дальше сложнее...
Всего голосов 73: ↑72 и ↓1+71
Комментарии44

Io Language: Объектная система

Время на прочтение4 мин
Количество просмотров2.1K

Введение


Продолжая писать про io, совершенно необходимо остановиться отдельно на устройстве объектной системы этого чудесатого езычка. Главная проблема в том, что даже если вы «знаете» ООП, вполне может сложиться ситуация, что вы просто не поймете, как оно устроено в io. Сейчас под ООП почему-то подразумевается модель Java, чаще всего. C++ нельзя назвать объектно-ориентированным языком, потому что он язык поддерживающий парадигму ООП, но это не его основная парадигма. Java больше подходит под гордое звание Ъ-ООП языка, но вот беда, ООП диктуемое Java-like языками довольно извращено. Изначально принципы ООП зарождались в Smalltalk'е и там все выглядело несколько иначе, объекты общались друг с другом не посредством вызова методов, а посредством передачи друг другу сообщений, мне до сих пор странно, почему же от этой модели ушли, ведь такое построение позволяет ввести прозрачную параллельность в язык без костылей. Посмотрите на нынешние круто параллелящиеся языки, тот же Erlang например, там все сделано через сообщения. Опять же нагородили огородов из RPC, COM и прочего dbus'а. А ведь как все хорошо начиналось.
Читать дальше →
Всего голосов 46: ↑43 и ↓3+40
Комментарии72

Истории

Io Language: Синтаксис

Время на прочтение4 мин
Количество просмотров3.7K

В продолжение серии статей про Io, хотелось бы отдельно остановиться на синтаксисе языка.
В двух словах синтаксис Io можно описать так: простой, но странный. Многих удивит такой подход, но, спешу заверить, как и в Lisp, синтаксис неудобен только при взгляде со стороны. С эстетической точки зрения можно отдельно выделить тот факт, что многие прогаммы на Io внешне кажутся излишне разреженными, на экране остается много «лишнего», незаполненного полезным кодом места, это ощущение меня не покидает довольно давно, я пока не придумал, как полностью избавиться от этого вывиха мозга, я просто придумал для себя некоторые правила оформления кода, при соблюдении которых эффект значительно сморщивается:
  • Длина строки не должна превышать 80 символов (Привет, text mode!)
  • Между клонированием объекта и описанием тела нового должна быть пустая строка
  • Методы и свойства группируются
  • Без лишней необходимости скобки на новую строку не переносятся


Ну что, поехали. Вынос мозга №2.
Читать дальше →
Всего голосов 50: ↑45 и ↓5+40
Комментарии17

Io programming language

Время на прочтение3 мин
Количество просмотров9.3K
По факту защиты мной диплома образовалось некоторое свободное время и я таки решил собраться и написать про эту чудесную штучку.
Мы в последнее время видим всплеск интереса ко всяким языкам очень высокого уровня, с анонимными функциями, каррингом, мапом/фолдом, метапрограммированием и прочим блэкджэком. Слава богу, я считаю.
Задачи усложняются и если люди применяют относительно низкоуровневые средства разработки зачастую наступает ситуация, когда набор абстракций оказывается мал в рамках решаемой задачи, примерно так появляется «спагетти» и велосипеды. Хорошего мало. Хотя умалять роль низкоуровневого программирования не хочется совершенно, по понятным причинам.

Совсем недавно, в 2002 году, бравый американец Стив Декорте понял, что ему как-то все вокруг не нравится. Ну то есть нравится, но как-то по частям. Нравится Smalltalk своей Ъ-ООП природой, нравится Lisp своей системой метапрограммирования и общей мегаизвратностью, нравится Self своими прототипами, нравится Lua, потому что маленькая и клево встраивается куда угодно. А вот что бы все и сразу — что-то не то. Погоревал бравый американец, да и наколбасил свой собственный язык программирования — Io.

Io


Io это маленький, полностью объектно-ориентированный язык программирования с динамической типизацией и развитой системой метапрограммирования, анонимными функциями и вытекающими отсюда плюшками. Кроме того, Io невероятно прост, как в синтаксисе, так и внутри. Существуют всего две сущности: объекты и сообщения. На этом базисе построено все остальное. Вообще весь язык следует дзенскому духу минимализма и простоты.
В Io нет понятия класс, только объект. Объект может быть склонирован и изменен, таким образом мы получаем другой объект (Это и есть прототипы). Все типы данных, значения и прочая — объекты.

Ну что, поехали.
Читать дальше →
Всего голосов 109: ↑109 и ↓0+109
Комментарии136

Микроядерная Real Time OS — необходимый функционал на простом примере

Время на прочтение2 мин
Количество просмотров1.2K
Какие действия выполняет микроядерная ОС, работающая в реальном режиме времени при такой простой задаче, как ручное сканирование?
Для чего может быть нужно ручное сканирование? Предположим, вам необходимо отсканировать пару десятков полос в разных газетах. А газеты — в библиотеке.
Конечно, можно взять обычный сканер и ноутбук, набрать стопку газет и не спеша их сканировать, вырезая потом нужные блоки.
А другой вариант — взять ручной сканер с USB подключением, USB HDD ну или на крайний случай — флешку, соединить с некоторым «iQube», представляющим гламурную коробочку с сенсорными боковушками и usb разъемами
Читать дальше →
Всего голосов 7: ↑6 и ↓1+5
Комментарии10

Цветовая идентификация

Время на прочтение1 мин
Количество просмотров790
function get_username_html_color($username )
{
   return '#' . substr( md5($username ), 0, 6 );
}

Я, например, вот такой subz. Первые попавшиеся под руку %username%: rost, anvar, navosha.
Пытливым умам посчитать хватит ли краски для всех хабраюзеров.

Спасибо Dreadatour за реализацию dreadatour.ru/username
Спасибо salvator за реализацию ssalvator.googlepages.com/colorizer.html
Читать дальше →
Всего голосов 80: ↑71 и ↓9+62
Комментарии116

Чем изучение Haskell/Python вредит программисту

Время на прочтение5 мин
Количество просмотров28K
От переводчика:

На этот перевод меня толкнула очередная ситуация «мозгового ступора» при написании банального кода на C++/C#: я часами смотрел на уродливый код, но не мог сделать его по-настоящему лучше; мне пришлось просто принять то, что уродливым его видел только я один, и это была моя проблема, а не проблема в коде или языке. Я вспомнил те времена, когда такого со мной не было — а заодно вспомнил и эту старую статью, автор которой пострадал так же, как и я, при этом хорошо написав об этом.


Я обнаружил, что изучение Python и Haskell не улучшило меня как программиста на других языках (что противоречит тому, что иногда пишут об этом). В частности, Haskell — являясь настолько непохожим на императивные языки — по идее, должен был дать мне просветление в программировании, которое помогало бы мне даже без использования какого-либо языка вообще. Мой текущий опыт не совсем соответствует этому, и вот, почему:
Читать дальше →
Всего голосов 94: ↑85 и ↓9+76
Комментарии222

Зачетный аутсорсинг PHP проекта

Время на прочтение1 мин
Количество просмотров792
Достался один проектик, написанный румынскими аутсорсерами для немцев.

В следующей процедуре румыны проверяют, дал ли пользователь допустимое имя таблице для MySQL (имя вводится в форму, по нему создается таблица).
Читать дальше →
Всего голосов 99: ↑88 и ↓11+77
Комментарии147

К вопросу об интроспективных программах

Время на прочтение1 мин
Количество просмотров1.5K
Интроспективной называется программа, которая на вывод подает свой же исходный текст. Но я наткнулся на более интересный вариант: программа на Haskell, которая выводит программу на Python, которая выводит программу на Ruby, которая выводит исходную программу на Haskell.
Посмотреть исходный код
Всего голосов 33: ↑30 и ↓3+27
Комментарии30

Прохождение сапера на поле 9x9 с 32-мя минами

Время на прочтение2 мин
Количество просмотров12K
Вот до чего иногда доводят безобидные развлечения. 2 месяца назад я неожиданно увлекся игрой в сапера. Особенно мне было интересно побить рекорд не по времени, а по количеству мин на поле. На уровне игры «новичок» дается поле 9x9 и 10 мин. Разумеется, это было очень просто, и я стал наращивать количество мин. 12, 15, 20 штук, это была простая разминка. Затем прошел 25 после большого числа попыток. Игра с 27-ю минами (каждая 3-я клетка заминирована) отняла у меня несколько часов. Не остановившись на достигнутом, я выставил сразу 30 штук. Выиграл спустя полторы недели, играя по часу в день.

Более месяца пытался разминировать 32 мины, причем даже в лучших попытках оставалось найти около 10 мин, затем подрывался. А мне очень хотелось победы, и решил, что без радикальных мер могу затратить еще пару лет. Пришла мысль написать программу подсчета вероятности нахождения мины в каждой клетке, в любой момент игры.
Читать дальше →
Всего голосов 83: ↑80 и ↓3+77
Комментарии119

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

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань

[prog] debug при разработке сайтов

Время на прочтение1 мин
Количество просмотров1.5K
Странички сейчас все сплошь динамические — на скриптах. Тоже ведь программы в своем роде. А вот вопрос отладки как-то слабо поднимается (если сравнить с C++ тем же). Все сводится к оценке на глаз, правке и так по кругу. Сообщения от ошибках выводятся в ту же HTML страницу — так проще.

Читать дальше →
Всего голосов 9: ↑5 и ↓4+1
Комментарии10

[prog] Как облегчить мучения пользователей и себя пользователями

Время на прочтение2 мин
Количество просмотров1.4K
Вот пишите вы, допустим, какой-то софт. Не то чтобы для себя пишете, а так — для коллег или для фирмы. А может и на продажу. Только пока вы делаете это один — сам себе и швец, и жнец — т.е на звонки пользователей тоже отвечать приходится. То это не работает, то это…
Читать дальше →
Всего голосов 5: ↑3 и ↓2+1
Комментарии15
12 ...
100

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