| Comments: |
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 24th, 2008 - 01:59 pm |
|---|
| | | (Link) |
|
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 24th, 2008 - 05:16 pm |
|---|
| | | (Link) |
|
В Огнелисе по инструкции работает как надо, вопросов нет. Но в Опере почему-то странности какие-то
Я Яваскрипта не знаю, так что, пока пытался исправить, узнал много нового (сценарий ketmar у меня вдруг в Опере заработал, хотя не сразу, но он для Оперы и делал).
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 24th, 2008 - 10:25 pm |
|---|
| | | (Link) |
|
я там отписался у себя. надо убрать BOM.
а делал я универсал -- Opera/Firefox. кстати, скрипт многоуважаемого phantom'а я обработал напильником и засунул туда же, в разворачиватель.
phantom, вы не против, надеюсь? кредиты проставлены, всё как полагается. %-)
не против (я игнорирую копирайт), я даже и кредитов не ставил бы. если хочется сохранить родословную, то таблицу символов я взял отсюда: http://userscripts.org/scripts/review/6565кстати, у тебя очень полезный скрипт. какой IDE ты используешь для JS? существует ли дебаггер для JS?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | 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).
зыж интересно, чей способ разбора строки шустрей: мой через регулярку или твой? я, честно говоря, нифига не понял, что ты там со строкой делаешь, потому тупо переписал. %-)
> FireBug или Venkman. я ними не пользовался, не в курсе, насколько они хороши.
я попробовал FireBug - очень хорош и функционален только не как дебаггер, а как DOM-explorer и т.п.
> ыж интересно, чей способ разбора строки шустрей: мой через регулярку или твой?
разбор строк вручную всегда должен быть быстрей. как правило, регулярки должны приближаться к этому, это, кроме прочего, сильно зависит от их реализации.
> я, честно говоря, нифига не понял, что ты там со строкой делаешь, потому тупо переписал. %-)
я просто JS не знаю, и чтобы не использовать высокоуровневых функций, сделал по-быстрому:
пробегаем по строке (цикл по i), для каждой позиции проверяем, входят ли 2 следующих символа в symbols, если да - это транслитерированная в две русская буква, если нет, это две различных переведенных русских буквы. я сразу обобщил на возможные длинные сочетания ("щ"), но по-простому двух достаточно (внутренний цикл по j). функция pick(s, i, j) = substring(s, i, j), просто substring у меня не заработал с ходу, и я переписал.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | 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.
так у меня неоптимизированно было. неважно что строки иммутабельны, аллокаторы обычно шустро работают.
вот от реализации регулярных выражений и будет зависеть скорость их работы: чтобы они действительно быстро работали они должны быть компилируемыми, а JS, как известно, интерпретатор, и всегда регулярные выражения будут медленнее, чем эквивалентный им строковый парсинг.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 25th, 2008 - 03:04 am |
|---|
| | | (Link) |
|
>так у меня неоптимизированно было. да это понятно. %-)
>чтобы они действительно быстро работали >они должны быть компилируемыми а фиг знает, что он там в кишках делает — лень исходник читать. я ему позволял сделать прекомпиляцию — я создавал регулярку один раз, а не при каждом вызове test/match/replace.
>всегда >регулярные выражения будут медленнее, >чем эквивалентный им строковый парсинг. неа. %-) в Lua бывает наоборот, особенно на шибко больших строках.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 25th, 2008 - 02:17 pm |
|---|
| | | (Link) |
|
Значит там плохая библиотека регулярных выражений используется, либо очень неэффективно. Странно.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 25th, 2008 - 02:24 pm |
|---|
| | | (Link) |
|
да и хер бы с ней. spidermonkey никогда особой скоростью не отличался, не зря они tamarin пилят. к сожалению, консольную версию оперного движка не дают, нормально протестить сложно.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 25th, 2008 - 02:14 pm |
|---|
| | | (Link) |
|
> я, честно говоря, нифига не понял, что ты там со строкой делаешь, потому тупо переписал. %-)А я понял! Я всё переписал, даже пытался ставить разнообразные closure, анонимные функции, addeventlistener и т.п. (всё, о чём прочитал вчера), делать всё одной функцией (с минимумом переменных), но в Опере всё равно не работало. Преобразование алгоритмически можно делать быстрее, конечно, но смысла нет (и не факт, что в Яваскрипте действительно будет быстрее, да и быстродействие с учётом размеров комментариев неважно) — сэкономить на попытке преобразовать пару символов, когда первый заведомо единственный. Короче говоря: язык интерпретируемый, без изысков библиотечные регулярные выражения должны работать быстрее, чем циклы и вообще последовательности команд (в особенности функция pick). Всё-таки регулярные выражения такого уровня — конечный автомат, который для поиска всех вхождений проходит по строке ровно один раз. Вот ketmar указал, что дело скорее всего в байтиках со значениями 128-255 — кодировка не UTF-8. Глюк Оперы, на мой взгляд. Но после перекодировки в UTF-8 (сначала я просто русский текст переписал: э,Э, утошга каледин, кря, — через \u
, потом табуляцию, потом автоматически обработал, чтобы CRLF) странное сообщение об ошибке исчезло, а работать всё равно не стало. Ну да ладно, посмотрю, как сделал ketmar, в Опере у него определённо должно было заработать, пойму, чего не хватало. Изучу на досуге Яваскрипт, штука в таком виде (пользовательском) полезная
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 25th, 2008 - 02:36 pm |
|---|
| | | (Link) |
|
>язык интерпретируемый, без изысков библиотечные регулярные выражения >должны работать быстрее, чем циклы и вообще последовательности команда ни разу не факт, потому что все его компилируют в VM. что Опера, что Mozilla. >Всё-таки регулярные выражения такого уровня — конечный автомат, который >для поиска всех вхождений проходит по строке ровно один раз.это если они написаны именно так (лом лезть в исходники spidermonkey). >странное сообщение об ошибке исчезло, а работать всё равно не сталогы. а это потому, что сравнение со строкой «[b]kaledin[/b]». а Опера в данном случае выдаёт тэги в upper case. %-) проверь (давай уж на «ты», а? %-), увидишь. >посмотрю, как сделал ketmarвот так %-) (это примерно в 4 раза быстрее, чем оригинал). и заменил проверку на case insensetive. >Изучу на досуге Яваскрипт, штука в таком виде (пользовательском) >полезная…на самом деле язык убойный. с поддержкой замыканий, анонимных функций, run-time расширяемых классов с приватными данными и ты пы. только мало кто этот язык знает, хотя и много кто на нём пытается писать. %-) зыж а ещё в Опере есть свойство innerText (а в тормозилле нет, и поэтому они мудаки странные люди). то же, что innerHTML, только все тэги выкидывает нафиг.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 25th, 2008 - 04:09 pm |
|---|
| | | (Link) |
|
Ясно. Давай. Можешь меня и во "френды" внести (политику твою я читал на этот счёт).
А как проверять быстродействие?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 25th, 2008 - 04:24 pm |
|---|
| | | (Link) |
|
>Можешь меня и во «френды» внести да на здоровье, мне не жалко. журнал читать пока лень (но в RSS засунул), по общению вроде адекват. %-)
ну, если мой дневник смотрел — я матерюсь, неполиткорректно выражаюсь, мне насрать на чужое мнение и ты пы. если вдруг захочешь «френдовыноса» — пиши, оформим точно так же. %-)
>А как проверять быстродействие? лично я проверяю консольным интерпретатором js от Mozilla. как обычно — цикл кучу раз и замеряем встроеной в шелл командой time.
то же самое можно делать и в броффзере (см. объект Date, он умеет давать текущее время), но лениво.
консольный инерпретатор я честно собрал из исходников spidermonkey с мозиллосайта. как оно собирается под винду — совершенно не в курсе, к счастью, я уже несколько лет как о ней практически забыл. %-)
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 25th, 2008 - 04:30 pm |
|---|
| | | (Link) |
|
консольный инерпретатор я честно собрал Вряд ли у меня дойдёт до этого
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 25th, 2008 - 04:36 pm |
|---|
| | | (Link) |
|
в линуксе оно просто. svn co, ./configure && make && make install, и всё собралось да поставилось.
ну, пусть не совсем так просто, я для себя ещё руками пилял, но суть не меняет. %-)
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | 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]](http://lj.rossia.org/userpic/197531/22349) | | From: | 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]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 25th, 2008 - 06:45 pm |
|---|
| | | (Link) |
|
(Сложности с jsiter в 1.7.0 [и 1.60?] исправлены человеком по ссылке, для того и качал make-файл, а в текущей ветке всё немного сложнее. Собрал в итоге 1.7.0 с помощью скачанного make-файла без каких-либо изменений.)
кстати, есть ли под линукс (визуальный) дебаггер баша?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 04:09 pm |
|---|
| | | (Link) |
|
фигассе. честно уронил челюсть. %-)
не знаю, даже не искал. я вообще дебаггерами практически не пользуюсь, только иногда под виндой ещё юзал.
собственно, а зачем? если логика настолько сложная, что уже надо отлаживать, не стоит ли подумать о perl/python/Lua/etc?
зыж фтопку баш. zsh наше фсьо. %-) может, в zsh что-то и есть по этому поводу, я всё никак не соберусь сего монстра выучить. %-)
>зыж а ещё в Опере есть свойство innerText (а в тормозилле нет, и поэтому >они мудаки странные люди). то же, что innerHTML, только все тэги >выкидывает нафиг.
в FF это называется textContent, что соответствует 3 уровню DOM
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 25th, 2008 - 08:07 pm |
|---|
| | | (Link) |
|
да хоть analFixation. ребята из в3ц в очередной раз радостно проигнорили то, что было до них (абсолютно логичный innerText, который можно логически вывести из innerHTML) и придумали свою хуету. «потому что своя». при этом innerHTML не уничтожили и не заменили на htmlContent (см. HTML5, где innerHTML есть официально), как было бы (снова-опять) логично.
в общем, я всегда говорил, что в в3ц сидят исключительно неадекватные пидарасы в плохом смысле слова. если там и был кто вменяемый, ему давно выебли и высушили весь моск.
вообще, DOM API — то ещё говнище. я не знаю, чем думали его авторы, но подозреваю, что это слово начинается на «ж» и заканчивается на «опа».
>Изучу на досуге Яваскрипт, штука в таком виде (пользовательском) >полезная…
о, я бы не советовал, а порекомендовал бы что-нибудь более изысканное, кроме того, есть ли под JS инструментальная поддержка (дебаггер и т.п.) - вот в чём вопрос.
ну, может это я привык уже к комфорту, хотя, отутствие инструментов может тебе серьёзно затормозить процесс, как кажется
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 02:36 pm |
|---|
| | | (Link) |
|
Знаешь, моя лень, недостаток времени, а особенно то, что я трудоустраиваюсь сейчас программистом на цепепе (в то время, как последние годы цепепе только читаю, и то не каждый день), может затормозить изучение сильнее:) Дальше поток сознания. ну, может это я привык уже к комфортуТы забыл, наверное: я Дельфам нередко предпочитаю редактор Фара (что вызвано тормозным вылезанием автодополнения для свойств-методов-элементов классов-объектов-интерфейсов: если знаешь, что хочешь, быстрее набить самому, чем выбрать из списка, тем более, что названия не всегда оптимизированы: бывает много строк, начинающихся, например, на "item", когда чаще всего ты пользуешься, например, "items", ну и для других популярных объектно-ориентированных штук [типа: "somepointer as TMyMiddleClass"] не очень ИСР зажигают). С js я уже собрал (что тривиально по модулю настроенности инструментов на компьютере) jsshell — текстовую версию в командной строке (spidermonkey), так что какие-то минимальные инструменты есть. Ява, например, мне отчаянно не нравится (как более мощный и "изысканный" инструмент из другой весовой категории; к тому же в Паскале многие библиотеки для работы с интернетом тоже есть, как и в давно знакомом цепепе), а яваскрипт как помощник при регулярном пользовании броузером — штука гораздо более лёгкая. Всё упирается в DOM-ы, которые придётся изучать. А также внутреннюю структуру часто посещаемых сайтов. С самим языком проблем нет, ты же, наверное, прочитал ketmar: проблема-то была в том, что Опера переводит метки команд в верхний регистр (что лечится сравнением без учёта регистра), прочитать же и понять код на Яваскрипте я могу и без подготовки, как и передрать какой-нибудь чужой код, по модулю таких заковык.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | 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()? %-)
да, поддерживаю с xpath, на него достаточно часа.
в DOM тоже важна идея, а не реализация - нужен он лишь для траверса по XML-дереву, а также для манипулирования его узлами.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 07:25 pm |
|---|
| | | (Link) |
|
>да, поддерживаю с xpath, >на него достаточно часа. и потом немного траханины, чтобы выяснить, где что как реализовано.
>в DOM тоже важна идея, >а не реализация но логика ввода/именования методов и свойств там совершенно марсианская.
кстати, про xpath: как выделить нод, внутри которого выполнены критернии, например, тэг А, который содержит определённый текст (заселектить нужно именно А, а не текст внутри)?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 29th, 2008 - 07:14 pm |
|---|
| | | (Link) |
|
это тебе, я полагаю, надо использовать XPath Axes. например: //tr[descendant::a[@class='forumlink']] находит ячейку таблицы, которая содержит ссылку с классом forumlink.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | 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]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 09:18 pm |
|---|
| | | (Link) |
|
пример, конечно, насквозь artificial, зато показывает заморочки с closures. для «3» — она не «статическая», она «замкнутая». при вызове функции js создаёт «замыкание» со всеми описаными локальными переменными (но не с аргументами функции! я на этом погорел однажды %-), и дальше этот «микрокосм» живёт себе отдельно. тут бы по совету phantom тебе пригодился опыт со scheme, там замыкания достаточно широко используются. в компилируемых же языках такого механизма в принципе нет (в java есть, но сделано через жопу, многословно и толком всё равно не работает %-).
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 10:13 pm |
|---|
| | | (Link) |
|
То, что написал я про "статические" абсолютно верно (я же описал механизм, это то же самое, то, что она не является статической в смысле, например, Цепепе, итак ясно):)
Употреблять слово "замкнутая" — та же фигня, я написал "статическая" как человек новый.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 09:12 pm |
|---|
| | | (Link) |
|
>jsshell.exe 1.js 37
Это со смыслом ответ, или так?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 09:23 pm |
|---|
| | | (Link) |
|
>Это со смыслом ответ, или так? надо было до «42» дотянуть, не догадался. так что без смысла, просто цифры. %-)
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 04:29 pm |
|---|
| | | (Link) |
|
>что-нибудь более изысканное например? (не флейма для) синтаксис дело десятое. а если всмотреться, то js — гибрид императивщины и функциональщины. %-) closures есть, lambda calculus есть. не знаю, правда, оптимизируют ли вендоры tail calls. при этом есть классы с приватными данными и возможностью расширять/урезать/менять методы в рантайме.
если на мой скрипт глянуть — это одна большая анонимная функция. а внутри активно применяются замыкания и даже есть один класс. %-)
несмотря на поддержку этого, синтаксис JS грязноват - сказывается возраст и наследие синтаксиса C. т.к. ppkk математик, я бы ему советовал Хаскел или Лисп. лучше изучить язык с более чистым синтаксисом, а потом рассматривать другие языки через призму "чистых", чем сначала испортиться "грязными", и смотреть через "грязное" стекло. у меня самого тяжёлое наследие знания "мэйнстримовых" языков, сейчас предпочитаю Немерле, в основном, - это гибрид ООП, функционального и императивного подходов, макросы ещё есть.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 05:17 pm |
|---|
| | | (Link) |
|
>т.к. ppkk математик, >я бы ему советовал Хаскел или Лисп.поздно, он уже Delphi знает. %-) а хаскель точно для математиков, я ниасилил. %-) лисп да, хорошо, писал на нём (на самопальном диалекте). мозг прочищает неплохо. >сейчас предпочитаю Немерлемоё изучение немерле закончилось на буквах «.Net». после чего поделие отправилось фтопку, а авторам — пожелание убиццо апстену.
а какие у тебя претензии к дотнету, и какие предлагаешь альтернативы?
хаскел поддается изучению, просто "с наскока" его изучать не стоит.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 07:00 pm |
|---|
| | | (Link) |
|
>а какие у тебя претензии к дотнету винда only. mono не предлагать.
>какие предлагаешь альтернативы? java (Кэтмар блюёт). а вообще — нафига эти монстры? Python+PyQt/PyGTK, Lua+luaqt/luagtk.
>хаскел поддается изучению, просто >"с наскока" его изучать не стоит. да понятно, что всё возможно. лично для меня — должна быть веская причина ломать моск. пока не нашёл такой.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 07:00 pm |
|---|
| | | (Link) |
|
ну и, кстати, Oberon.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 25th, 2008 - 02:52 pm |
|---|
| | | (Link) |
|
Я за деньги на Яваскрипте помогал кому-то писать что-то, анализирующее синтаксис (типа калькулятора?), а также графику какую-то рисующее. Это не требовало знания вообще ничего. (Это было репетиторство.) Я ещё на Яве пару раз того же человека репетировал, но это было менее результативно и более порнографично. Никакой документации ни по Яве, ни по Яваскрипту я при этом не читал. По Яваскрипту впервые читал вчера, да и то не по самому языку, а по пользовательским сценариям для Оперы. Честно говоря, такой фрустрации, как с твоим сценарием, у меня в описанных ситуациях не было (я всё ещё не посмотрел, что кроме перекодировки сделал ketmar, чтобы твой сценарий работал в Опере).
я очень извиняюсь - почему-то моя радость от удачной пробы пера обернулась почему-то твоей фрустрацией, гм.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 03:46 pm |
|---|
| | | (Link) |
|
Так фрустрация вызвана-то не самим языком, а сложностями с его приложением к Опере: сначала в UTF-8 перекодируй, потом с регистрами воюй.
С самим языком пока фрустрации не было.
Ладно, сегодня, если успею (ну, или на неделе), попробую сделать кнопку для возвращения выделенному фрагменту или всему комментарию Каледина его албанско-молдавского (он иногда пишет на английском). Если опять выйдет фрустрация вместо результата, то ты прав: это не для меня.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 04:31 pm |
|---|
| | | (Link) |
|
>попробую сделать кнопку для возвращения выделенному фрагменту или всему >комментарию Каледина его албанско-молдавского кстати. невозбранно спёр идею. щас себе приделаю. %-)
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | 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]](http://lj.rossia.org/userpic/197531/22349) | | From: | 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]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 10:33 pm |
|---|
| | | (Link) |
|
>if (loadingPages) return false; это чего? Это копировать-вставить:) См. UnfoldAll()
Читал бы я ещё подробно про работу с событиями, до утра бы сидел.
вообще, всё сохранение в массив здесь для того, чтобы новосгенерёные ноды не похерили цикл Ну надо же:() Это-то понять ума большого не потребовало, а вот for-in или см. ниже я долго искал способ применить и не нашёл.
А можно ли childNodes скопировать в массив разом (с той же целью)?
Как я понимаю, редкость появления консоли в Опере вызвана try...catch, как же тогда проверять ошибки, держать исходники без отлова исключений, а потом снимать комментарии?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | 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]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 28th, 2008 - 12:52 pm |
|---|
| | | (Link) |
|
А почему массив-то работал без "new", раз это ошибка?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | 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]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 10:50 pm |
|---|
| | | (Link) |
|
>if (loadingPages) return false; это чего?
Я подумал, что это против загрузки страницы и перескока поля видимости с текущего места на, например, верх страницы.
Это не так?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 10:54 pm |
|---|
| | | (Link) |
|
нет. это флажок «я щаз догружаю next pages, потому что ты сам на [unfold all pages] кликнул, потому отстань, занят я».
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 28th, 2008 - 12:33 pm |
|---|
| | | (Link) |
|
Ну что ж, значит всё равно получилось правильно.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 10:08 pm |
|---|
| | | (Link) |
|
Если мой метод не слишком жуток, можешь его вставить (может с пробелом если только после картинки)? Если ОСОБО жуток, напиши, почему (кроме того, что исходник я читал и тоже использовал).
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 10:15 pm |
|---|
| | | (Link) |
|
я тебе откаментил на исходник. а так — я успел приделать свой (и даже выложить) до твоего поста. %-)
кстати, «Date:» тоже заметил до и прибил. %-)
да каледин, слава яйцам, один такой пока, ну ещё вторая утошга есть, да. но давай лучше что-нибудь более полезное захуярим, и не к ЛЖР, а вообще или к часто используемым сайтам.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 27th, 2008 - 08:11 pm |
|---|
| | | (Link) |
|
Я уже поразбирался. Фрустрации немного (вот for-in с массивами почему-то работает не так, как я ожидаю), но ещё не закончил (не слишком тривиальных ошибок не исправляю).
Обнаружил какое-то количество глюков (буква "щ", "Дате:", текст при ответе на комментарий Продвинутого Архаичного Линуксоида, например).
буква "щ", и только она, требует двух проходов (моего) унтранслиттера, кроме неё встречаются максимум 2-буквенные комбинации (ср. "сч")
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 31st, 2008 - 01:43 pm |
|---|
| | | (Link) |
|
С учётом того, что гражданин ещё и с ошибками пишет очень часто, автоматический "перевод" его на русский с распознаванием вкраплений английского, особым выделением цитат на русском и исправлением ошибок — задача на всю жизнь, на которой можно защитить несколько диссертаций (по психиатрии, психологии, филологии и математическому обеспечению ЭВМ, наверное).
да я вообще хуею с этих фашиствующих субъектов. мало того, что гражданин "уже весь сервер заебал" своим транслитом, по его же словам, а теперь вот ketmar написал о скрипте, и этот гражданин каледин говорит "а не могли бы вы долабать нам движочек? а то мы 3 года этого сделать не можем сами". немного хуею с такой наглости. вообще бы всем мотематигам запретил бы в интернет ходить, разводят разную херню фашистскую вместо того, чтоб делом заниматься.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 28th, 2008 - 12:50 pm |
|---|
| | | (Link) |
|
Ты пробовал-то мой текст? Вряд ли, но к вопросу о славе поздних доразработчиков Фара: ты написал довольно топорный не очень нужный пользовательский Яваскрипт, заточенный под один броузер. Я написал немного другого толка ненужную хрень (по идее демонстрирующую мою способность за ограниченное время прикрутить что-то к чужому исходнику на 40 Кб и пользоваться при этом Яваскриптом и ОМД [DOM:)], включая события), но максимум, на что я могу претендовать: написать, что я не совсем лох, оправдываться за ссылку на объективные обстоятельства (про фрустрацию).
Чего в похожей ситуации можно ожидать от нынешних разработчиков Фара?
Насчёт полезного: лично я скорее займусь обдиранием пары новостных сайтов, чтобы было легче сохранять новости в личный архив без ссылок на все сегодняшние события на полях и т.п., но с иллюстрациями и ссылками по теме. В жижах кроме разворачивателя комментариев я затрудняюсь подумать об усовершенствованиях нужных (на обоих просматриваемых мной журналах усовершенствования не очень требуются).
тем не менее, я считаю, один в поле воин. т.е. один может разработать полезное ПО.
>обдиранием пары новостных сайтов
это называется "скрейпинг", и я сомневаюсь, что для этого инструментарий JS лучший - для разбора иерархий, и в т.ч. DOM-а, удобно иметь поддержку pattern matching. кроме того, вряд ли стоит это делать "из броузера" - м. б., там crazy security
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 31st, 2008 - 01:46 pm |
|---|
| | | (Link) |
|
тем не менее, я считаю, один в поле воин. т.е. один может разработать полезное ПО.
Не спорю: вот Рошаль сделал Фар. А с поддержкой, обновлениями, всё плохо: ибо некоммерческое ПО. (Линуксы с кучей народа на зарплате в корпорациях и т.п. — пример самый известный, но нетипичный. Считать его некоммерческим — бабушка надвое сказала. Как и ОпенОфис, естественно.)
это называется "скрейпинг",
кроме того, вряд ли стоит это делать "из броузера" - м. б., там crazy security
Ничего не понял. Разъясни, пожалуйста.
>А с поддержкой, обновлениями, всё плохо:все ж хотят программировать типа. а поддержка, документация это "не царское дело" как считается. и пишут по 100 раз одно и то же, не зная или не понимая аналогов. >это называется "скрейпинг", … кроме того, вряд ли стоит это делать >"из броузера" - м. б., там crazy security > >Ничего не понял. Разъясни, пожалуйста.см. Scrapingя подозреваю, чтобы не оставлять особых дыр, часть "опасных" действий должна быть запрещена, например, в Опере нельзя делать cross-site get, как пишет ketmar, а может быть, и такие простые вещи, как запись/чтение файлов нельзя делать. но библиотеки есть почти под каждый язык - скачать страницу можно при помощи пары строк, разобрать её на части - уже сложнее, я говорю, что стоит выбрать язык, поддерживающий фичу pattern matching (сопоставление с образцом). для разбора неоднородных иерархий очень удобно. pattern matching - это switch-и на стероидах, если его в языке нет, вместо него будут кучи вложенных if-ов (хотя если код достаточно легкий, можно, конечно, обойтись и без таких изысков)
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 31st, 2008 - 11:01 pm |
|---|
| | | (Link) |
|
Ну, сохранять-то я хотел бы с помощью средств броузера, а не программой. Ты немного преувеличил мои намерения, которые и так могут не реализоваться.
Я имел в виду: для начала на паре конкретных популярных сайтов обдирать мусор для удобства сохранения избранных новостей в архив.
Можешь подробнее про p m?
Вообще, если на паскале написаны компиляторы Паскаля, то вряд ли всё так плохо с Паскалем. Или с Сипипи. Вопрос, конечно, в целесообразности изобретения велосипеда, так что можно подробнее?
на паскале написаны компиляторы Паскаля
так многие компиляторы написаны, это называется bootstrapping
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 04:30 pm |
|---|
| | | (Link) |
|
>но наскучили мне си-подобные давно уж. он скорее scheme-подобный. %-)
зачем тогда с него начинать, если можно сначала изучить Схему? в ней больше поддерживается фич, и научиться гораздо большему.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 27th, 2008 - 07:23 pm |
|---|
| | | (Link) |
|
дык я так понял, что Delphi уже того… так что всё равно моск попорчен.
да не, никогда не поздно исправиться, нужно только разум оставлять открытым для новых идей (open-minded) и ещё, конечно, постоянно и непрерывно учиться | |