Не верь, не бойся, не проси - [entries|archive|friends|userinfo]
phantom

[ website | My Website ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

[Mar. 24th, 2008|07:54 am]
Previous Entry Add to Memories Tell A Friend Next Entry
LinkLeave a comment

Comments:
[User Picture]
From:[info]ppkk
Date:March 24th, 2008 - 01:59 pm
(Link)
Сегодня увидел ещё сценарий на ЛЖР: http://lj.rossia.org/users/ketmar/127313.html
[User Picture]
From:[info]ppkk
Date:March 24th, 2008 - 05:16 pm
(Link)
В Огнелисе по инструкции работает как надо, вопросов нет. Но в Опере почему-то странности какие-то… Я Яваскрипта не знаю, так что, пока пытался исправить, узнал много нового (сценарий [info]ketmar у меня вдруг в Опере заработал, хотя не сразу, но он для Оперы и делал).
[User Picture]
From:[info]ketmar
Date:March 24th, 2008 - 10:25 pm
(Link)
я там отписался у себя. надо убрать BOM.

а делал я универсал -- Opera/Firefox. кстати, скрипт многоуважаемого phantom'а я обработал напильником и засунул туда же, в разворачиватель.

phantom, вы не против, надеюсь? кредиты проставлены, всё как полагается. %-)
From:[info]phantom
Date:March 25th, 2008 - 12:59 am
(Link)
не против (я игнорирую копирайт),
я даже и кредитов не ставил бы.
если хочется сохранить родословную,
то таблицу символов я взял отсюда:
http://userscripts.org/scripts/review/6565

кстати, у тебя очень полезный скрипт.

какой IDE ты используешь для JS?
существует ли дебаггер для JS?
[User Picture]
From:[info]ketmar
Date:March 25th, 2008 - 01:11 am
(Link)
>не против (я игнорирую копирайт),
аналогично. но кредиты — это не копирайт, это дань уважения предыдущему автору. а так если есть возможность — я свой код обычно кидаю как public domain.

>кстати, у тебя очень полезный скрипт.
tnx. я его делал для себя (как и почти все полезные вещи обычно делаются %-). теперь решил, что ещё кому-то пригодится. заодно попробовал заточку под Firefox (поскольку я тормозиллу не использую, было поучительно).

>какой IDE ты используешь для JS?
ты будешь ржать: mcedit. или joe, в зависимости от настроения.

>существует ли дебаггер для JS?
для Firefox — FireBug или Venkman. я ними не пользовался, не в курсе, насколько они хороши.

для Оперы — только Error Console. были потуги сделать нечто, похожее на дебагер (даже у меня были), но оно того не стоит. ибо идея — в препроцессинге js-кода и хитрых манипуляциях с ним. удолбище выходит.

в принципе, если ты мой скрипт почитаешь, найдёшь там закоментареные остатки логов (opr.postError).

зыж интересно, чей способ разбора строки шустрей: мой через регулярку или твой? я, честно говоря, нифига не понял, что ты там со строкой делаешь, потому тупо переписал. %-)
From:[info]phantom
Date:March 25th, 2008 - 01:39 am
(Link)
> FireBug или Venkman. я ними не пользовался, не в курсе, насколько они хороши.

я попробовал FireBug - очень хорош и функционален
только не как дебаггер, а как DOM-explorer и т.п.

> ыж интересно, чей способ разбора строки шустрей: мой через регулярку или твой?

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

> я, честно говоря, нифига не понял, что ты там со строкой делаешь, потому тупо переписал. %-)

я просто JS не знаю, и чтобы не использовать
высокоуровневых функций, сделал по-быстрому:

пробегаем по строке (цикл по i), для каждой позиции
проверяем, входят ли 2 следующих символа в symbols,
если да - это транслитерированная в две русская буква,
если нет, это две различных переведенных русских буквы.
я сразу обобщил на возможные длинные сочетания ("щ"),
но по-простому двух достаточно (внутренний цикл по j).
функция pick(s, i, j) = substring(s, i, j), просто
substring у меня не заработал с ходу, и я переписал.
[User Picture]
From:[info]ketmar
Date:March 25th, 2008 - 02:31 am
(Link)
>разбор строк вручную всегда должен быть быстрей.
э, нет. зависит от реализации строк. в JS они immutable, поэтому, например, charAt() каждый раз создаёт новый объект «строка» из одного символа (как понимаешь, операция не шибко шустрая). так что регулярки могут быть шустрее в разы — у меня один replace. правда, я тоже со строкой манипулирую. лень бенчмарк писать. %-)

>я просто JS не знаю, и чтобы не использовать
>высокоуровневых функций, сделал по-быстрому:

не, я не настолько тупой, %-) я написал криво. надо было написать: «мне лом было разбираться в твоём коде». %-)

зыж гы. таки мой способ медленней. убрал одну регулярку — стал шустрей. переписал без регулярок, с двумя словарями — стало ОХЕРЕННО шустрей. тестировал на spidermonkey, для Оперы не проверял. %-)

твой:
16.67s user 0.49s system 82% cpu 20.781 total
мой:
19.83s user 0.34s system 85% cpu 23.565 total
мой без одной регулярки:
14.19s user 0.25s system 85% cpu 16.848 total
мой без регулярок, с двумя словарями:
js test_$num.js 4.10s user 0.08s system 83% cpu 5.013 total
гы. %-)

невозбранно проапдейтил jsunfold.
From:[info]phantom
Date:March 25th, 2008 - 02:54 am
(Link)
так у меня неоптимизированно было.
неважно что строки иммутабельны,
аллокаторы обычно шустро работают.

вот от реализации регулярных выражений
и будет зависеть скорость их работы:
чтобы они действительно быстро работали
они должны быть компилируемыми, а JS,
как известно, интерпретатор, и всегда
регулярные выражения будут медленнее,
чем эквивалентный им строковый парсинг.
[User Picture]
From:[info]ketmar
Date:March 25th, 2008 - 03:04 am
(Link)
>так у меня неоптимизированно было.
да это понятно. %-)

>чтобы они действительно быстро работали
>они должны быть компилируемыми

а фиг знает, что он там в кишках делает — лень исходник читать. я ему позволял сделать прекомпиляцию — я создавал регулярку один раз, а не при каждом вызове test/match/replace.

>всегда
>регулярные выражения будут медленнее,
>чем эквивалентный им строковый парсинг.

неа. %-) в Lua бывает наоборот, особенно на шибко больших строках.
[User Picture]
From:[info]ppkk
Date:March 25th, 2008 - 02:17 pm
(Link)
Значит там плохая библиотека регулярных выражений используется, либо очень неэффективно. Странно.
[User Picture]
From:[info]ketmar
Date:March 25th, 2008 - 02:24 pm
(Link)
да и хер бы с ней. spidermonkey никогда особой скоростью не отличался, не зря они tamarin пилят. к сожалению, консольную версию оперного движка не дают, нормально протестить сложно.
[User Picture]
From:[info]ppkk
Date:March 25th, 2008 - 02:14 pm
(Link)
> я, честно говоря, нифига не понял, что ты там со строкой делаешь, потому тупо переписал. %-)
А я понял! Я всё переписал, даже пытался ставить разнообразные closure, анонимные функции, addeventlistener и т.п. (всё, о чём прочитал вчера), делать всё одной функцией (с минимумом переменных), но в Опере всё равно не работало.

Преобразование алгоритмически можно делать быстрее, конечно, но смысла нет (и не факт, что в Яваскрипте действительно будет быстрее, да и быстродействие с учётом размеров комментариев неважно) — сэкономить на попытке преобразовать пару символов, когда первый заведомо единственный.
Короче говоря: язык интерпретируемый, без изысков библиотечные регулярные выражения должны работать быстрее, чем циклы и вообще последовательности команд (в особенности функция pick). Всё-таки регулярные выражения такого уровня — конечный автомат, который для поиска всех вхождений проходит по строке ровно один раз.

Вот [info]ketmar указал, что дело скорее всего в байтиках со значениями 128-255 — кодировка не UTF-8. Глюк Оперы, на мой взгляд.
Но после перекодировки в UTF-8 (сначала я просто русский текст переписал: э,Э, утошга каледин, кря, — через \u…, потом табуляцию, потом автоматически обработал, чтобы CRLF) странное сообщение об ошибке исчезло, а работать всё равно не стало. Ну да ладно, посмотрю, как сделал [info]ketmar, в Опере у него определённо должно было заработать, пойму, чего не хватало.

Изучу на досуге Яваскрипт, штука в таком виде (пользовательском) полезная…
[User Picture]
From:[info]ketmar
Date:March 25th, 2008 - 02:36 pm
(Link)
>язык интерпретируемый, без изысков библиотечные регулярные выражения
>должны работать быстрее, чем циклы и вообще последовательности команд

а ни разу не факт, потому что все его компилируют в VM. что Опера, что Mozilla.

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

это если они написаны именно так (лом лезть в исходники spidermonkey).

>странное сообщение об ошибке исчезло, а работать всё равно не стало
гы. а это потому, что сравнение со строкой «[b]kaledin[/b]». а Опера в данном случае выдаёт тэги в upper case. %-) проверь (давай уж на «ты», а? %-), увидишь.

>посмотрю, как сделал [info]ketmar
вот так %-) (это примерно в 4 раза быстрее, чем оригинал). и заменил проверку на case insensetive.

>Изучу на досуге Яваскрипт, штука в таком виде (пользовательском)
>полезная…

на самом деле язык убойный. с поддержкой замыканий, анонимных функций, run-time расширяемых классов с приватными данными и ты пы. только мало кто этот язык знает, хотя и много кто на нём пытается писать. %-)

зыж а ещё в Опере есть свойство innerText (а в тормозилле нет, и поэтому они мудаки странные люди). то же, что innerHTML, только все тэги выкидывает нафиг.
[User Picture]
From:[info]ppkk
Date:March 25th, 2008 - 04:09 pm
(Link)
Ясно. Давай. Можешь меня и во "френды" внести (политику твою я читал на этот счёт).

А как проверять быстродействие?
[User Picture]
From:[info]ketmar
Date:March 25th, 2008 - 04:24 pm
(Link)
>Можешь меня и во «френды» внести
да на здоровье, мне не жалко. журнал читать пока лень (но в RSS засунул), по общению вроде адекват. %-)

ну, если мой дневник смотрел — я матерюсь, неполиткорректно выражаюсь, мне насрать на чужое мнение и ты пы. если вдруг захочешь «френдовыноса» — пиши, оформим точно так же. %-)

>А как проверять быстродействие?
лично я проверяю консольным интерпретатором js от Mozilla. как обычно — цикл кучу раз и замеряем встроеной в шелл командой time.

то же самое можно делать и в броффзере (см. объект Date, он умеет давать текущее время), но лениво.

консольный инерпретатор я честно собрал из исходников spidermonkey с мозиллосайта. как оно собирается под винду — совершенно не в курсе, к счастью, я уже несколько лет как о ней практически забыл. %-)
[User Picture]
From:[info]ppkk
Date:March 25th, 2008 - 04:30 pm
(Link)
консольный инерпретатор я честно собрал
Вряд ли у меня дойдёт до этого…
[User Picture]
From:[info]ketmar
Date:March 25th, 2008 - 04:36 pm
(Link)
в линуксе оно просто. svn co, ./configure && make && make install, и всё собралось да поставилось.

ну, пусть не совсем так просто, я для себя ещё руками пилял, но суть не меняет. %-)
[User Picture]
From:[info]ppkk
Date:March 25th, 2008 - 06:43 pm
(Link)
svn
Это ты гонишь: у них CVS (который у меня падает при вводе пароля, но всё равно исходники скачать можно). С помощью SVN ты качаешь не с mozilla.org, полагаю.

Потом я долго настраивал Visual Studio (для работы в командной строке: у них есть спец. файл для прописывания путей, но он их прописывает неправильно).

Потом я нарыл make-файл в интернете http://bindzus.wordpress.com/2008/02/08/spidermonkey-solution-file-for-microsoft-visual-studio-2005/ — он подходит для 1.7.0, для текущей ветки не подходит (там какие-то сложности с jsiter, именно как человек и обнаружил и исправлял, не знаю, почему работает под Линуксом).

Так что jsshell.exe у меня теперь свежесобранный (но не из свежайших исходников от разработчиков) есть.

Так что фигня та же (основной геморрой был из-за сбитых настроек VS, которые она сама берётся восстанавливать, но восстанавливает неправильно).
[User Picture]
From:[info]ketmar
Date:March 25th, 2008 - 07:03 pm
(Link)
>Это ты гонишь: у них CVS
думаешь, я помню точно, как я там качал кучу месяцев назад? %-)

>не знаю, почему работает под Линуксом
у меня древнючий JavaScript-C 1.8.0 pre-release 1 2007-10-03. новые «фичи» типа итераторов меня совершенно не волнуют, пока их не добавят в Оперу. надеюсь, и не добавят, ибо в стандарте ECMAScript я такого не видел. остальное работает. собралось, помню, без шаманства (или почти без шаманства).

с MSVS работать не умею вообще, MinGW наше всё. %-)
[User Picture]
From:[info]ppkk
Date:March 25th, 2008 - 06:45 pm
(Link)
(Сложности с jsiter в 1.7.0 [и 1.60?] исправлены человеком по ссылке, для того и качал make-файл, а в текущей ветке всё немного сложнее. Собрал в итоге 1.7.0 с помощью скачанного make-файла без каких-либо изменений.)
From:[info]phantom
Date:March 27th, 2008 - 01:40 pm
(Link)
кстати, есть ли под линукс
(визуальный) дебаггер баша?
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 04:09 pm
(Link)
фигассе. честно уронил челюсть. %-)

не знаю, даже не искал. я вообще дебаггерами практически не пользуюсь, только иногда под виндой ещё юзал.

собственно, а зачем? если логика настолько сложная, что уже надо отлаживать, не стоит ли подумать о perl/python/Lua/etc?

зыж фтопку баш. zsh наше фсьо. %-) может, в zsh что-то и есть по этому поводу, я всё никак не соберусь сего монстра выучить. %-)
From:[info]phantom
Date:March 25th, 2008 - 07:56 pm
(Link)
>зыж а ещё в Опере есть свойство innerText (а в тормозилле нет, и поэтому
>они мудаки странные люди). то же, что innerHTML, только все тэги
>выкидывает нафиг.


в FF это называется textContent,
что соответствует 3 уровню DOM
[User Picture]
From:[info]ketmar
Date:March 25th, 2008 - 08:07 pm
(Link)
да хоть analFixation. ребята из в3ц в очередной раз радостно проигнорили то, что было до них (абсолютно логичный innerText, который можно логически вывести из innerHTML) и придумали свою хуету. «потому что своя». при этом innerHTML не уничтожили и не заменили на htmlContent (см. HTML5, где innerHTML есть официально), как было бы (снова-опять) логично.

в общем, я всегда говорил, что в в3ц сидят исключительно неадекватные пидарасы в плохом смысле слова. если там и был кто вменяемый, ему давно выебли и высушили весь моск.

вообще, DOM API — то ещё говнище. я не знаю, чем думали его авторы, но подозреваю, что это слово начинается на «ж» и заканчивается на «опа».
From:[info]phantom
Date:March 27th, 2008 - 01:54 pm
(Link)
>Изучу на досуге Яваскрипт, штука в таком виде (пользовательском)
>полезная…


о, я бы не советовал, а порекомендовал бы
что-нибудь более изысканное, кроме того,
есть ли под JS инструментальная поддержка
(дебаггер и т.п.) - вот в чём вопрос.

ну, может это я привык уже к комфорту,
хотя, отутствие инструментов может тебе
серьёзно затормозить процесс, как кажется
[User Picture]
From:[info]ppkk
Date:March 27th, 2008 - 02:36 pm
(Link)
Знаешь, моя лень, недостаток времени, а особенно то, что я трудоустраиваюсь сейчас программистом на цепепе (в то время, как последние годы цепепе только читаю, и то не каждый день), может затормозить изучение сильнее:)

Дальше поток сознания.

ну, может это я привык уже к комфорту
Ты забыл, наверное: я Дельфам нередко предпочитаю редактор Фара (что вызвано тормозным вылезанием автодополнения для свойств-методов-элементов классов-объектов-интерфейсов: если знаешь, что хочешь, быстрее набить самому, чем выбрать из списка, тем более, что названия не всегда оптимизированы: бывает много строк, начинающихся, например, на "item", когда чаще всего ты пользуешься, например, "items", ну и для других популярных объектно-ориентированных штук [типа: "somepointer as TMyMiddleClass"] не очень ИСР зажигают).

С js я уже собрал (что тривиально по модулю настроенности инструментов на компьютере) jsshell — текстовую версию в командной строке (spidermonkey), так что какие-то минимальные инструменты есть.

Ява, например, мне отчаянно не нравится (как более мощный и "изысканный" инструмент из другой весовой категории; к тому же в Паскале многие библиотеки для работы с интернетом тоже есть, как и в давно знакомом цепепе), а яваскрипт как помощник при регулярном пользовании броузером — штука гораздо более лёгкая.

Всё упирается в DOM-ы, которые придётся изучать. А также внутреннюю структуру часто посещаемых сайтов. С самим языком проблем нет, ты же, наверное, прочитал [info]ketmar: проблема-то была в том, что Опера переводит метки команд в верхний регистр (что лечится сравнением без учёта регистра), прочитать же и понять код на Яваскрипте я могу и без подготовки, как и передрать какой-нибудь чужой код, по модулю таких заковык.
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 04:47 pm
(Link)
>Всё упирается в DOM-ы, которые придётся изучать
на самом деле достаточно десятка методов и свойств. я, например, досконально этот идиотский API не знаю. %-)

ещё полезно поучить XPath, чтобы удобно ноды выбирать.

>прочитать же и понять код на Яваскрипте я могу и без подготовки
хихик.
function A () {
  function B () {
    var i = 5;
    return [(i++)+(arguments.length?arguments[0]:0), arguments.callee, function () { return (i++); }];
  }
  var t = B(2);
  var z = 7+t[0]+t[1]()[0];
  z += t[2]()+B()[0]+t[2]();
  return z;
}

результат вызова A()? %-)
From:[info]phantom
Date:March 27th, 2008 - 07:19 pm
(Link)
да, поддерживаю с xpath,
на него достаточно часа.

в DOM тоже важна идея,
а не реализация - нужен
он лишь для траверса по
XML-дереву, а также для
манипулирования его узлами.
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 07:25 pm
(Link)
>да, поддерживаю с xpath,
>на него достаточно часа.

и потом немного траханины, чтобы выяснить, где что как реализовано.

>в DOM тоже важна идея,
>а не реализация

но логика ввода/именования методов и свойств там совершенно марсианская.
From:[info]phantom
Date:March 29th, 2008 - 07:07 pm
(Link)
кстати, про xpath: как выделить нод,
внутри которого выполнены критернии,
например, тэг А, который содержит
определённый текст (заселектить
нужно именно А, а не текст внутри)?
[User Picture]
From:[info]ketmar
Date:March 29th, 2008 - 07:14 pm
(Link)
это тебе, я полагаю, надо использовать XPath Axes. например:
//tr[descendant::a[@class='forumlink']]
находит ячейку таблицы, которая содержит ссылку с классом forumlink.
[User Picture]
From:[info]ppkk
Date:March 27th, 2008 - 09:08 pm
(Link)
В общем, в зависимости от того, что считать подготовкой, я разобрался скорее всего с подготовкой:)

Сборку jsshell, наверное, следует считать подготовкой.

Расстановку print() и манипуляции со скобками — тоже, наверное:)

Сперва я зашёл в тупик с вызовом t[2]: думал, ругнётся на отсутствие i.

Потом началась порнография с использованием jsshell…

Спасибо за пример, ты в чём-то прав, но возраст не позволил мне послать неправильный ответ
1. о том, что функция ругнётся на отсутствие i,
2. вторая же версия тоже оказалась неверна (B(...)[2] берёт значение i, дошедшее до неё на момент определения функции),
3. на самом деле f=B(...)[2] держит у себя ?статическую? переменную, создаваемую при вызове B, и при каждом вызове f её увеличивает (но для разных вызовов B переменные эти разные):)
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 09:18 pm
(Link)
пример, конечно, насквозь artificial, зато показывает заморочки с closures.

для «3» — она не «статическая», она «замкнутая». при вызове функции js создаёт «замыкание» со всеми описаными локальными переменными (но не с аргументами функции! я на этом погорел однажды %-), и дальше этот «микрокосм» живёт себе отдельно. тут бы по совету [info]phantom тебе пригодился опыт со scheme, там замыкания достаточно широко используются. в компилируемых же языках такого механизма в принципе нет (в java есть, но сделано через жопу, многословно и толком всё равно не работает %-).
[User Picture]
From:[info]ppkk
Date:March 27th, 2008 - 10:13 pm
(Link)
То, что написал я про "статические" абсолютно верно (я же описал механизм, это то же самое, то, что она не является статической в смысле, например, Цепепе, итак ясно):)

Употреблять слово "замкнутая" — та же фигня, я написал "статическая" как человек новый.
From:[info]phantom
Date:March 27th, 2008 - 10:20 pm
(Link)
в немерле есть замыкания
[User Picture]
From:[info]ppkk
Date:March 27th, 2008 - 09:12 pm
(Link)
>jsshell.exe 1.js
37


Это со смыслом ответ, или так?
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 09:23 pm
(Link)
>Это со смыслом ответ, или так?
надо было до «42» дотянуть, не догадался. так что без смысла, просто цифры. %-)
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 04:29 pm
(Link)
>что-нибудь более изысканное
например? (не флейма для)
синтаксис дело десятое. а если всмотреться, то js — гибрид императивщины и функциональщины. %-)
closures есть, lambda calculus есть. не знаю, правда, оптимизируют ли вендоры tail calls.
при этом есть классы с приватными данными и возможностью расширять/урезать/менять методы в рантайме.

если на мой скрипт глянуть — это одна большая анонимная функция. а внутри активно применяются замыкания и даже есть один класс. %-)
From:[info]phantom
Date:March 27th, 2008 - 04:42 pm
(Link)
несмотря на поддержку этого,
синтаксис JS грязноват -
сказывается возраст и
наследие синтаксиса C.

т.к. [info]ppkk математик,
я бы ему советовал Хаскел или Лисп.
лучше изучить язык с более чистым
синтаксисом, а потом рассматривать
другие языки через призму "чистых",
чем сначала испортиться "грязными",
и смотреть через "грязное" стекло.

у меня самого тяжёлое наследие
знания "мэйнстримовых" языков,
сейчас предпочитаю Немерле, в
основном, - это гибрид ООП,
функционального и императивного
подходов, макросы ещё есть.
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 05:17 pm
(Link)
>т.к. [info]ppkk математик,
>я бы ему советовал Хаскел или Лисп.

поздно, он уже Delphi знает. %-)
а хаскель точно для математиков, я ниасилил. %-)

лисп да, хорошо, писал на нём (на самопальном диалекте). мозг прочищает неплохо.

>сейчас предпочитаю Немерле
моё изучение немерле закончилось на буквах «.Net». после чего поделие отправилось фтопку, а авторам — пожелание убиццо апстену.
From:[info]phantom
Date:March 27th, 2008 - 06:52 pm
(Link)
а какие у тебя претензии к дотнету,
и какие предлагаешь альтернативы?

хаскел поддается изучению, просто
"с наскока" его изучать не стоит.
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 07:00 pm
(Link)
>а какие у тебя претензии к дотнету
винда only. mono не предлагать.

>какие предлагаешь альтернативы?
java (Кэтмар блюёт). а вообще — нафига эти монстры? Python+PyQt/PyGTK, Lua+luaqt/luagtk.

>хаскел поддается изучению, просто
>"с наскока" его изучать не стоит.

да понятно, что всё возможно. лично для меня — должна быть веская причина ломать моск. пока не нашёл такой.
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 07:00 pm
(Link)
ну и, кстати, Oberon.
From:[info]phantom
Date:March 25th, 2008 - 12:54 am
(Link)
я сам на яваскрипте фактически
первый раз попробовал кодить.

я уже на любом языке из си-семьи
могу с ходу писать, подсмотрев
пару примеров и заглядывая, например
на компаративные таблички для ЯПов
(http://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)

но наскучили мне си-подобные давно уж.
[User Picture]
From:[info]ppkk
Date:March 25th, 2008 - 02:52 pm
(Link)
Я за деньги на Яваскрипте помогал кому-то писать что-то, анализирующее синтаксис (типа калькулятора?), а также графику какую-то рисующее. Это не требовало знания вообще ничего. (Это было репетиторство.) Я ещё на Яве пару раз того же человека репетировал, но это было менее результативно и более порнографично. Никакой документации ни по Яве, ни по Яваскрипту я при этом не читал. По Яваскрипту впервые читал вчера, да и то не по самому языку, а по пользовательским сценариям для Оперы.

Честно говоря, такой фрустрации, как с твоим сценарием, у меня в описанных ситуациях не было (я всё ещё не посмотрел, что кроме перекодировки сделал [info]ketmar, чтобы твой сценарий работал в Опере).
From:[info]phantom
Date:March 27th, 2008 - 01:50 pm
(Link)
я очень извиняюсь -
почему-то моя радость
от удачной пробы пера
обернулась почему-то
твоей фрустрацией, гм.
[User Picture]
From:[info]ppkk
Date:March 27th, 2008 - 03:46 pm
(Link)
Так фрустрация вызвана-то не самим языком, а сложностями с его приложением к Опере: сначала в UTF-8 перекодируй, потом с регистрами воюй.

С самим языком пока фрустрации не было.

Ладно, сегодня, если успею (ну, или на неделе), попробую сделать кнопку для возвращения выделенному фрагменту или всему комментарию Каледина его албанско-молдавского (он иногда пишет на английском). Если опять выйдет фрустрация вместо результата, то ты прав: это не для меня.
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 04:31 pm
(Link)
>попробую сделать кнопку для возвращения выделенному фрагменту или всему
>комментарию Каледина его албанско-молдавского

кстати. невозбранно спёр идею. щас себе приделаю. %-)
[User Picture]
From:[info]ppkk
Date:March 27th, 2008 - 10:04 pm
(Link)
Узнал много нового. for-in не даются. У меня так:
function TranslitToRus (s) {
  if (s == 'Date:') return '\u0414\u0430\u0442\u0430:'; // return s; is worse, because even kaledins may write "
Date:
" var res = "", len = s.length; for (var f = 0; f < len; f++) { var n = s.charAt(f); var rus = trTable[n], dif = trTableDif[n]; if (dif) { var n1 = s.charAt(f+1); rus1 = dif[n1]; if (rus1) { rus = rus1; f++; } } res += rus?rus:n; } return res; } function DeKaledin(evt) { evt.preventDefault(); if (loadingPages) return false; var ec = evt.currentTarget; // comment or text ?br? var i = ec.childNodes[0]; // var t = ec.childNodes[1]; // comment or text var w = ec.childNodes[2]; //
if exists var v = doc.createElement("img"); v.setAttribute("width","22"); v.setAttribute("height","20"); // if pictures are not loaded var u,v; if (t.nodeName == "#comment") { v.setAttribute("src","http://lj.rossia.org/img/btn_prev.gif"); u = doc.createTextNode(t.nodeValue); } else // #text { v.setAttribute("src","http://lj.rossia.org/img/btn_next.gif"); u = doc.createComment(t.nodeValue); } ec.appendChild(v); ec.appendChild(u); if (w) { ec.removeChild(w); } else { w = doc.createElement("br"); ec.appendChild(w); } ec.removeChild(t); ec.removeChild(i); return false; } function UntranslitNode (node) { if (!node) return; if (node.nodeName == "#text") { var s = node.nodeValue; node.nodeValue = TranslitToRus(s); var pn = node.parentNode; var t; t = doc.createElement("img"); t.setAttribute("src","http://lj.rossia.org/img/btn_next.gif"); t.setAttribute("width","22"); t.setAttribute("height","20"); // if pictures are not loaded var original_kal = doc.createComment(s); var dl = document.createElement("a"); dl.href = "#"; dl.appendChild(t); dl.appendChild(original_kal); dl.addEventListener("click", DeKaledin, false); pn.insertBefore(dl,node); } else { if (node.hasChildNodes) { var nn = Array(); // childNodes is alive var i = node.childNodes.length; for (var f = 0; f < i; f++) // for-in does not work as I expect nn.push(node.childNodes[f]); for (var f = 0; f < nn.length; f++) UntranslitNode(nn[f]); } } }
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 10:14 pm
(Link)
>for-in не даются
и не надо оно там. %-)

>if (loadingPages) return false;
это чего?

в createElement() тэги лучше писать капсом (похуй, но так рекомендуют).

t.setAttribute() нужны только для тупой тормозиллы, в опере можно напрямую: t.width = 20;

>var nn = Array();
можно заменить на var nn = []; более того — тут ошибка: не = Array(), а = new Array(); потому что иначе не создаётся новый объект.

>for-in does not work as I expect
и не будет, ибо childNodes() не массив, а for-in только для массивов и js-объектов (которые тоже массивы). childNodes() же — native object.
вообще, всё сохранение в массив здесь для того, чтобы новосгенерёные ноды не похерили цикл (ибо childNodes() отображает именно текущее состояние документа, а не снапшот).
[User Picture]
From:[info]ppkk
Date:March 27th, 2008 - 10:33 pm
(Link)
>if (loadingPages) return false;
это чего?

Это копировать-вставить:)
См. UnfoldAll()…
Читал бы я ещё подробно про работу с событиями, до утра бы сидел.

вообще, всё сохранение в массив здесь для того, чтобы новосгенерёные ноды не похерили цикл
Ну надо же:() Это-то понять ума большого не потребовало, а вот for-in или см. ниже я долго искал способ применить и не нашёл.

А можно ли childNodes скопировать в массив разом (с той же целью)?

Как я понимаю, редкость появления консоли в Опере вызвана try...catch, как же тогда проверять ошибки, держать исходники без отлова исключений, а потом снимать комментарии?
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 10:44 pm
(Link)
>Ну надо же:() Это-то понять ума большого не потребовало
кому как. я об этом упоминаю, потому что неоднократно спотыкался. сужу по себе.

>а вот for-in или см. ниже я долго искал способ применить и не нашёл.
у объектов нет метода-итератора, поэтому for-in не будет работать для native objects (в частности, любых коллекций нодов) никогда. это раз.
два: надо быть очень аккуратным с for-in, потому что даже в простом массиве могут оказаться далеко не только те ключи, которые ты сам туда поместил.

>А можно ли childNodes скопировать в массив разом (с той же целью)?
нет. praise the excellent API.

>Как я понимаю, редкость появления консоли в Опере вызвана try…catch
нет, отсутствием ошибок. %-) а также флажком «я срал на вашу консоль, не показывайте мне эту хренотень».

>как же тогда проверять ошибки, держать исходники без отлова исключений, а
>потом снимать комментарии?

не делать try/catch вообще. у меня это:
а) leftover'ы;
б) обход дурацкого бага последних бет Оперы.
[User Picture]
From:[info]ppkk
Date:March 28th, 2008 - 12:52 pm
(Link)
А почему массив-то работал без "new", раз это ошибка?
[User Picture]
From:[info]ketmar
Date:March 28th, 2008 - 02:26 pm
(Link)
послабление от авторов для неаккуратных скриптописателей. встроеные типы вообще ведут себя неадекватно. рекомендую на это не полагаться, а писать new везде. пример, зачем:
function XA (z) {
  this.data = z;

  return this;
}

var a = XA(5);
a.data = 6;
var b = XA(4);

print(a.data);
print(b.data);

запускаем в jsshell, наблюдаем две четвёрки. с new — 6 и 4, как и ожидалось.
[User Picture]
From:[info]ppkk
Date:March 27th, 2008 - 10:50 pm
(Link)
>if (loadingPages) return false;
это чего?


Я подумал, что это против загрузки страницы и перескока поля видимости с текущего места на, например, верх страницы.

Это не так?
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 10:54 pm
(Link)
нет. это флажок «я щаз догружаю next pages, потому что ты сам на [unfold all pages] кликнул, потому отстань, занят я».
[User Picture]
From:[info]ppkk
Date:March 28th, 2008 - 12:33 pm
(Link)
Ну что ж, значит всё равно получилось правильно.
[User Picture]
From:[info]ppkk
Date:March 27th, 2008 - 10:08 pm
(Link)
Если мой метод не слишком жуток, можешь его вставить (может с пробелом если только после картинки)? Если ОСОБО жуток, напиши, почему (кроме того, что исходник я читал и тоже использовал).
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 10:15 pm
(Link)
я тебе откаментил на исходник. а так — я успел приделать свой (и даже выложить) до твоего поста. %-)

кстати, «Date:» тоже заметил до и прибил. %-)
From:[info]phantom
Date:March 27th, 2008 - 07:23 pm
(Link)
да каледин, слава яйцам,
один такой пока, ну ещё
вторая утошга есть, да.
но давай лучше что-нибудь
более полезное захуярим,
и не к ЛЖР, а вообще или к
часто используемым сайтам.
[User Picture]
From:[info]ppkk
Date:March 27th, 2008 - 08:11 pm
(Link)
Я уже поразбирался. Фрустрации немного (вот for-in с массивами почему-то работает не так, как я ожидаю), но ещё не закончил (не слишком тривиальных ошибок не исправляю).

Обнаружил какое-то количество глюков (буква "щ", "Дате:", текст при ответе на комментарий Продвинутого Архаичного Линуксоида, например).
From:[info]phantom
Date:March 29th, 2008 - 07:18 pm
(Link)
буква "щ", и только она, требует
двух проходов (моего) унтранслиттера,
кроме неё встречаются максимум
2-буквенные комбинации (ср. "сч")
[User Picture]
From:[info]ppkk
Date:March 31st, 2008 - 01:43 pm
(Link)
С учётом того, что гражданин ещё и с ошибками пишет очень часто, автоматический "перевод" его на русский с распознаванием вкраплений английского, особым выделением цитат на русском и исправлением ошибок — задача на всю жизнь, на которой можно защитить несколько диссертаций (по психиатрии, психологии, филологии и математическому обеспечению ЭВМ, наверное).
From:[info]phantom
Date:March 31st, 2008 - 02:37 pm
(Link)
да я вообще хуею с этих
фашиствующих субъектов.

мало того, что гражданин
"уже весь сервер заебал"
своим транслитом, по его
же словам, а теперь вот
ketmar написал о скрипте,
и этот гражданин каледин
говорит "а не могли бы вы
долабать нам движочек?
а то мы 3 года этого
сделать не можем сами".

немного хуею с такой наглости.
вообще бы всем мотематигам
запретил бы в интернет ходить,
разводят разную херню фашистскую
вместо того, чтоб делом заниматься.
[User Picture]
From:[info]ppkk
Date:March 28th, 2008 - 12:50 pm
(Link)
Ты пробовал-то мой текст? Вряд ли, но к вопросу о славе поздних доразработчиков Фара: ты написал довольно топорный не очень нужный пользовательский Яваскрипт, заточенный под один броузер. Я написал немного другого толка ненужную хрень (по идее демонстрирующую мою способность за ограниченное время прикрутить что-то к чужому исходнику на 40 Кб и пользоваться при этом Яваскриптом и ОМД [DOM:)], включая события), но максимум, на что я могу претендовать: написать, что я не совсем лох, оправдываться за ссылку на объективные обстоятельства (про фрустрацию).

Чего в похожей ситуации можно ожидать от нынешних разработчиков Фара?

Насчёт полезного: лично я скорее займусь обдиранием пары новостных сайтов, чтобы было легче сохранять новости в личный архив без ссылок на все сегодняшние события на полях и т.п., но с иллюстрациями и ссылками по теме. В жижах кроме разворачивателя комментариев я затрудняюсь подумать об усовершенствованиях нужных (на обоих просматриваемых мной журналах усовершенствования не очень требуются).
From:[info]phantom
Date:March 29th, 2008 - 08:03 pm
(Link)
тем не менее, я считаю, один в поле воин.
т.е. один может разработать полезное ПО.


>обдиранием пары новостных сайтов

это называется "скрейпинг", и я сомневаюсь,
что для этого инструментарий JS лучший -
для разбора иерархий, и в т.ч. DOM-а,
удобно иметь поддержку pattern matching.
кроме того, вряд ли стоит это делать
"из броузера" - м. б., там crazy security
[User Picture]
From:[info]ppkk
Date:March 31st, 2008 - 01:46 pm
(Link)
тем не менее, я считаю, один в поле воин.
т.е. один может разработать полезное ПО.


Не спорю: вот Рошаль сделал Фар. А с поддержкой, обновлениями, всё плохо: ибо некоммерческое ПО. (Линуксы с кучей народа на зарплате в корпорациях и т.п. — пример самый известный, но нетипичный. Считать его некоммерческим — бабушка надвое сказала. Как и ОпенОфис, естественно.)

это называется "скрейпинг", … кроме того, вряд ли стоит это делать
"из броузера" - м. б., там crazy security


Ничего не понял. Разъясни, пожалуйста.
From:[info]phantom
Date:March 31st, 2008 - 05:45 pm
(Link)
>А с поддержкой, обновлениями, всё плохо:

все ж хотят программировать типа.
а поддержка, документация это
"не царское дело" как считается.
и пишут по 100 раз одно и то же,
не зная или не понимая аналогов.


>это называется "скрейпинг", … кроме того, вряд ли стоит это делать
>"из броузера" - м. б., там crazy security
>
>Ничего не понял. Разъясни, пожалуйста.


см.
Scraping

я подозреваю, чтобы не оставлять особых дыр,
часть "опасных" действий должна быть запрещена,
например, в Опере нельзя делать cross-site get,
как пишет ketmar, а может быть, и такие простые
вещи, как запись/чтение файлов нельзя делать.

но библиотеки есть почти под каждый язык -
скачать страницу можно при помощи пары строк,
разобрать её на части - уже сложнее, я говорю,
что стоит выбрать язык, поддерживающий фичу
pattern matching (сопоставление с образцом).
для разбора неоднородных иерархий очень удобно.

pattern matching - это switch-и на стероидах,
если его в языке нет, вместо него будут кучи
вложенных if-ов (хотя если код достаточно легкий,
можно, конечно, обойтись и без таких изысков)
[User Picture]
From:[info]ppkk
Date:March 31st, 2008 - 11:01 pm
(Link)
Ну, сохранять-то я хотел бы с помощью средств броузера, а не программой. Ты немного преувеличил мои намерения, которые и так могут не реализоваться.

Я имел в виду: для начала на паре конкретных популярных сайтов обдирать мусор для удобства сохранения избранных новостей в архив.

Можешь подробнее про p m?

Вообще, если на паскале написаны компиляторы Паскаля, то вряд ли всё так плохо с Паскалем. Или с Сипипи. Вопрос, конечно, в целесообразности изобретения велосипеда, так что можно подробнее?
From:[info]phantom
Date:April 1st, 2008 - 03:47 pm
(Link)
вот здесь, например.
From:[info]phantom
Date:April 1st, 2008 - 03:54 pm
(Link)
на паскале написаны компиляторы Паскаля

так многие компиляторы написаны,
это называется bootstrapping
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 04:30 pm
(Link)
>но наскучили мне си-подобные давно уж.
он скорее scheme-подобный. %-)
From:[info]phantom
Date:March 27th, 2008 - 07:16 pm
(Link)
зачем тогда с него начинать,
если можно сначала изучить Схему?
в ней больше поддерживается фич,
и научиться гораздо большему.
[User Picture]
From:[info]ketmar
Date:March 27th, 2008 - 07:23 pm
(Link)
дык я так понял, что Delphi уже того… так что всё равно моск попорчен.
From:[info]phantom
Date:March 29th, 2008 - 07:14 pm
(Link)
да не, никогда не поздно исправиться,
нужно только разум оставлять открытым
для новых идей (open-minded) и ещё,
конечно, постоянно и непрерывно учиться