avva: (Default)
[personal profile] avva
(интересно будет только программистам)

1. Совершенно замечательное демо трехмерного путешествия по губке Менгера. Смотреть в любом браузере, кроме Эксплорера. Весь код укладывается в 512 байт!

Там используется интересный алгоритм, который называется ray-marching. Должно быть не очень сложным и поучительным упражнением сделать unobfuscation всему этому коду и подробно объяснить, как он работает. Рекомендую; если кто-то сделает это, дайте ссылку и я сюда помещу.

2. Длинная, подробная и интересная запись о том, что неправильно делали разработчики Tcl/Tk, и почему этот язык/среда потеряли в значительной степени свой mindshare к 2010-му году. Трудно подытожить всю эту запись в одном предложении, не буду и пытаться; замечу только, что по мере того, как автор объяснял, что таким-то и таким-то образом у программистов постепенно портилось мнение о Tcl и Tk-программах, я кивал головой: да, именно так я и думал, именно такие - зачастую ложные - впечатления у меня формировались пять и десять лет назад. Все это вместе можно читать как мини-руководство к тому, как не развивать и не поддерживать популярный язык программирования. Комментарии, кое в чем успешно спорящие с автором, тоже интересны.

Date: 2010-03-31 06:33 pm (UTC)
From: [identity profile] incogn1too.livejournal.com
Очень радуют такие посты. Спасибо.

Date: 2010-03-31 06:36 pm (UTC)
From: [identity profile] dmarck.livejournal.com
Про тикль хорошо. Надо б попереводить, но и времени мало, и язык, увы, для меня не совсем лёгок (оборотов там необычных -- для меня -- хватает)...

Upd: Just to clarify: язык заметки, а не тикль, хотя, конешно, за эти годы его я тоже насмерть позабыл ;-)
Edited Date: 2010-03-31 06:40 pm (UTC)

Date: 2010-03-31 09:06 pm (UTC)
From: [identity profile] saccovanzetti.livejournal.com
Мозилла 2-я подвисает

Date: 2010-03-31 09:14 pm (UTC)
From: [identity profile] spicausis.lv (from livejournal.com)
Деобфусцировал, насколько мог, тут: http://spicausis.lv/jspongy/ , но принцип действия ускользает от понимания: как генерируется мочалка из простого, скучного массива представляется мне полной мистикой. Очень надеюсь, что кто-нибудь сможет прокомментировать код как следует: интересно!

Date: 2010-03-31 09:49 pm (UTC)
From: [identity profile] avva.livejournal.com
Очень неплохо! Я добавлю то, что понял, когда сам примерно до того же дошел.

Массив sponge в вашей нотации - всего лишь вспомогательный трюк для того, чтобы выделить "среднюю треть" из 128 элементов. Он заполнен единицами с 43-й по 86-й элемент, и нулями во всех остальных местах.

Главный цикл работает вот как. Сначала мы вычисляем наше текущее положение, в трехмерных координатах, внутри мочалки - это X,Y,Z: обратите внимание, что они одинаковы для всех точек битмапа и могут быть вынесены за пределы циклов, они зависят только от time. time помогает нам симулировать наше движение внутри мочалки. Далее, в главном цикле для каждой точки битмапа мы вычисляем направление, в котором должен двигаться "луч зрения", когда мы смотрим под соответствующим углом из нашей точки X,Y,Z; числа u, v, w дают нам сдвиг координат для каждого небольшого шага вдоль луча зрения. Двигаясь этими шажками в третьем вложенном цикле, мы на каждом шагу уменьшаем число света, которое мы хотим нарисовать в точке (x,y) - это число h. Почему уменьшаем число света? - потому что чем дальше препятствие, в которое упрется взгляд, тем светлее мы его делаем. Когда мы прекратим третий цикл, в h будет число от 0 до 127, где 0 - самый белый, 127 - самый черный цвет. Мы умножаем его на два и делаем значением opacity данной точки внутри битмапа, не ставя никаких RGB-значений, одну opacity (для этого i двигается по индексам 3, 7, 11... - это opacity последовательный точек, в то время как 0,1,2 4,5,6 8,9,10 - их RGB-значения).

Мы хотим остановить третий цикл в тот момент, когда наш луч зрения упрется в препятствие. Препятствие для нас - когда мы натыкаемся на первую или третью треть ребра куба, а не на серединную треть, которая вырезана; причем это рекурсивно спускается на вложенные кубики. Этим занимается четвертый цикл. Значение m может меняться так: 1, 3, 9, 27 - и все, если оно еще раз увеличится, то цикл закончится. Каждое из этих значений соответствует уровню рекурсии вложения кубиков. Для каждого из них мы смотрим на 7 последних бит координат X, Y, Z после умножения на m и проверяем с помощью массива sponge, не попали ли мы в "среднюю дырку" по данной координате. Если попали по двум или трем, четвертый цикл заканчивается на маленьком значении m, и третий цикл делает следующий шажок. Если попали всего по одной или нулю, причем для всех уровней m, то мы прекращаем третий цикл и останавливаем луч и записываем, сколько освещения здесь надо, и переходим к следующей точке.

Что мне остается невыясненным, и я бы хотел увидеть подробно расписанным:

- почему условие в четвертом цикле < 2, хотя казалось бы надо < 3
- как именно time интерпретируется в качестве текущего места внутри мочалки, и как получается сдвиг луча зрения ("поворот")
- подробно объяснить преобразования координат и вычисления X,Y,Z, u, v, w.

Update: исправил в этом комментарии неправильные слова насчет смысла X,Y,Z.
Edited Date: 2010-03-31 09:58 pm (UTC)

Date: 2010-04-01 12:08 am (UTC)
From: [identity profile] msh.livejournal.com
Мне кажется, значительно интереснее было бы узнать не как Tcl потерял mindshare, а как он его вообще приобрел. Я помню, как я практически одновременно изучал Tcl и тогда едва появившийся Perl 5, и с радостью выкинул книжку по Tcl и все что на нем написал как только слегка понял Perl.

Мне совершенно непонятно что может быть в Tcl привлекательного, ну кроме что Tk. Вообще его существование я могу объяснить только мощным авторитетом Sun на то время, а сейчас он застрял в каких-то замшелых нишах

Непонятное, короче, для меня явление. Типа американских стиральных машин с пропеллером.

Date: 2010-04-01 12:26 am (UTC)
From: [identity profile] avva.livejournal.com
каким пропеллером? зачем пропеллер? :-)

Date: 2010-04-01 01:29 am (UTC)
From: [identity profile] msh.livejournal.com
Ну традиционная американская конструкция стиральной машины - это вертикальный барабан, в котором вращается пропеллер. Эта конструкция хуже европейской всем, вообще всем. Для ее существования нет никаких причин, она устарела уже лет 50 тому назад. И тем не менее - их выпускают до сих пор, и не просто выпускают улучшают и развивают

Вот это такое же непонятное мне явление, как Tcl сосуществующий с Perl и Python.

Date: 2010-04-01 05:23 am (UTC)
From: [identity profile] dimrub.livejournal.com
ППКС. Единственный проект на Tcl/Tk, который я получил в руки, переписал на Perl/Tk при первой же возможности.

Date: 2010-04-01 06:50 am (UTC)
netch: (Default)
From: [personal profile] netch
Tcl хорош несколькими вещами:
1. Компактностью ядра - для встраивания.
2. Лёгкостью и естественностью метапрограммирования. Не настолько, как в LISP, где вообще программа и данные различаются только содержанием, но очень близко к нему - но при этом сохраняя императивность. Собственно, Tk это плотно использует - биндингам других языков приходится сильно извращаться для достижения того, что на Tcl естественно.

Вместе взятого, этого хватает, чтобы у него были поклонники, ниши и устойчивое развитие.

А ещё у него неплохая библиотека (например, регэкспы мощнее и быстрее перловых)

Date: 2010-04-01 08:13 am (UTC)
From: [identity profile] mikhailian.livejournal.com
И поддержка юникода постарше и посерьёзнее, чем у многих современных языков и графических тулкитов.

Date: 2010-04-01 05:32 am (UTC)
From: [identity profile] janatem.livejournal.com
Насчет демо: так и задумано, что изображение сильно размытое, с какими-то яркими пятнами-дефектами? К тому же оно тормозит и загружает на 100% одно процессорное ядро.

Хотя, конечно, 512 байт -- это круто!

Date: 2010-04-01 08:00 am (UTC)
From: [identity profile] avva.livejournal.com
Это просто то, чего удалось добиться в 512 байтах :)

Date: 2010-04-10 06:06 pm (UTC)
From: [identity profile] http://users.livejournal.com/_ieronim/
Давно хотелось бы почитать аналогичный текст про Перл :) Хотя я понимаю, что по сравнению с Tcl он в полном порядке, обидно, что его значимость настолько стабильно и необратимо падает.

Правда, я понимаю, что такой текст мог бы представлять собой ровно четыре слова, а именно:

CGI и Perl 6.
From: (Anonymous)
Seeing some recent activity around JSpongy, I decided to have a second look at the code and size optimize it, for real. It's now down to 321 bytes, and I'm sure I can squeeze a few more bytes.

http://www.p01.org/releases/512b_jspongy/jspongy_hardcore.htm
/!\ this version is heavily optimized for size, not for speed.


Hope you appreciate this as much as the original ;)

Mathieu 'p01' Henri
http://www.p01.org
From: [identity profile] gotoxy.livejournal.com
Я дико извиняюсь, но что я не так делаю? Сохраняю код по ссылке (уже уменьшенного варианта). Код весит аж 545 байт. Вроде он пишет, что размер уменшил до 321 байт. Я понимаю, что где-то чего-то недопонимаю. Но что? =)

January 2026

S M T W T F S
    1 2 3
4 5 6 7 8 910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 9th, 2026 10:09 pm
Powered by Dreamwidth Studios