[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.31938 Reply
File: 1357437582862.jpg
Jpg, 237.88 KB, 1280×1440 - Click the image to expand
edit Find source with google Find source with iqdb
1357437582862.jpg
Не вижу никакого js-рилейтед треда. Короче, начал учить js, пишу какой-то код, но все выглядит как-то коряво и неправильно. Покритикуйте, пожалуйста, малюсенький файлик начинающего по поводу объектов/прототипов, организации кода и вообще. Да и просто пример хорошо организованного кода тоже бы помог.
http://pastebin.com/FYkJDt4M
>> No.31939 Reply
>> No.31940 Reply
>>31939
А... как мне их использовать-то?
>> No.31948 Reply
>>31940
Точно так же:
button.onClick = {{{ тут замыкание }}}
>> No.31950 Reply
>>31938

Tileset.prototype = {...} не далай так.
Используй второй способ Wall.prototype.func game = new Game ну сам понимаешь, что некрасиво.

А для организации наследования лучше написать какой-нибудь отдельный метод, который перетащит все что нужно из родителя не заменяя prototype.
>> No.31951 Reply
>>31950
> для организации наследования
в 99.95% случаев оно не требуется. Достаточно объявить обычный член-функцию.
>> No.31957 Reply
>>31948
А, ну, это понятно.
Кстати, я тут увидел, как кофескрипт при трансляции оборачивает каждый класс в анонимную функцию - это зачем?
>>31950
Почему? Ведь изначально это просто пустой объект, точно такой же экземпляр Object - почему не заменить?
>>31951
Какую функцию?
>> No.32995 Reply
File: backbone[1].png
Png, 19.90 KB, 899×160 - Click the image to expand
edit Find source with google Find source with iqdb
backbone[1].png
Коданы, что думаете за backbone.js?
>> No.32996 Reply
File: 90b49dfbe01181b327993094fa7c7ba3.jpg
Jpg, 18.55 KB, 448×221 - Click the image to expand
edit Find source with google Find source with iqdb
90b49dfbe01181b327993094fa7c7ba3.jpg
>>32995
я думаю, что лучше http://knockoutjs.com/ или http://angularjs.org/
Хотя backbone тож годен. Есть ещё knockout+backbone в одной таре http://kmalakoff.github.io/knockback/

Можно ещё набрать оттуда http://todomvc.com/

А ещё я думаю что -> >>u/104773 годная паста. Себя не похвалишь - никто не похвалит.
>> No.33021 Reply
>>31957
Кстати, на сайте кофискрипта их траснлятор так не делает. А по поводу оборачивания - Хабр говорит, что
> Первым делом обратим внимание, что весь код спрятан внутри анонимной функции, которую мы сразу же вызываем.
Этот прием позволяет прятать все локальные переменные внутри функции, не заботясь о том, что они будут засорять глобальную область видимости. Ниже в статье мы будем опускать эту функцию для наглядности.
>> No.33023 Reply
>>33020
> <scipt
WAT?
Алсо проверь, что файл lib/test.js загрузился. Файрбаг это умеет.
>> No.33024 Reply
>>33023
Ебать я даун. Спасибо.
С другой стороны, я узнал, что файрбаг может проверять, подгрузился ли файл.
>> No.33154 Reply
<body>
    <input type="button" value="Run" id="btn1">
    <script>
        var btn =  document.getElementById('btn1');
        var tester = new Test();
        btn.onClick = tester.run();
    </script>

</body>
По неизвестной мне причине, функция run запускается, когда прогружается страница. Я же хочу, чтобы она запускалась только по нажатию на кнопочку btn. Что делать?
>> No.33155 Reply
>>33154
btn.onClick = tester.run; попробуй
>> No.33156 Reply
Уточню - почему нельзя сделать, как выше (точнее, можно, но скрипт сразу грузится), но если обернуть вызов run в анонимную функцию, которую уже и повесить на onclick, то все работает?
>> No.33157 Reply
>>33156
Похоже, движок JS думает, что ты хочешь:
а) выполнить "tester.run()"
б) записать результат в "btn.onClick"
И тупо запускает "run()" в контексте объекта "tester".
>> No.33270 Reply
>>33155
Лол, так оно работает, но в контексте объекта btn. Хотя, если подумать, то правильно все.

А как тогда нормально делать обработку событий так, чтобы не срать в глобал? Так и оборачивать в анонимки, или как?
>>33157
Да, похоже на то.
>> No.33279 Reply
>>33270
А как ты ими засрешь? Выполняются в глобальном контексте не означает, что они занимают в нем имена.

Используй addEventListener вообще.
>> No.33759 Reply
Смотри, Антоша. Есть такой вод код фактически, код из http://www.nodebeginner.ru/#javascript-and-nodejs только с классами
Server = (function() {

    function Server(route) {
        this.route = route;
        this.http = require('http');
        this.nodeStatic = require('node-static');
        this.url = require('url');

        this.http.createServer(this.onRequest).listen(8080);
        this.url.parse("ololo");
        console.log('Server running on port 8080');
    }

    Server.prototype.onRequest = function(req, res) {
        var pathname;
        pathname = this.url.parse(req.url).pathname;
        console.log("Request received.");
        this.route(pathname);
        res.writeHead(200, {
          "Content-Type": "text/plain"
        });
        res.write("" + pathname);
        return res.end();
    };

    return Server;
})();

exports.Server = Server;
Так вот на pathname = this.url.parse(req.url).pathname; он вываливается с ошибкой, что this.url не определен (и это правда). В конструкторе эта переменная точно получает значение, проверил. ЧЯДНТ?
>> No.33770 Reply
>>33759
Сделай console.log(this) и ты увидишь что у этих функций совершенно разный scope в рантайме.
>> No.33796 Reply
>>33770
Запоздалое спасибо за запоздалый ответ. Спустя часа два я уже вспомнил, что в документашке по кофискрипту (собственно, я на нем и пишу) натыкался на конструкцию =>, про которую говорилось что-то на тему контекста. Перечитав еще раз и погуглив ключевые слова, выяснил, что у коллбеков другой this.
Тем не менее, спасибо. Потому что я мог и не найти этого.
>> No.33906 Reply
>>31938
Привет. Я с вопросами по поводу юзерскриптов.
1) Как использовать API. Ну серьёзно, как вообще его обернуть?
Дальше буду задавать вопросы по ходу работы, если будут возникать.
>> No.33908 Reply
>>33906
Лучше расскажи что именно ты хочешь через это АПИ сделать.

Как пример - кусок самой Ханибиры, который тащит посты через апи, ятоб развернуть тред:
 $.get('/api/thread/expand/'+board+'/'+thread, function(res) {
   th.html(res);
   BindCrosses($(".delete input", th));
 });
>> No.33911 Reply
File: 688_v1.png
Png, 20.98 KB, 740×180 - Click the image to expand
edit Find source with google Find source with iqdb
688_v1.png
Есть проблема, суть такова. Есть хтмл-страница на жёстком диске, которую просто открываю в браузере. На странице скрипт делает запрос на доброчан. Из-за того, что запрос межсайтовый, браузер показывает фигу и нихуя не делает. Гугл говорит использовать всякую перенаправлящую лабуду на стороне сервера, но у меня же нет сервера, я просто открыл страницу с диска. Как это решить минимальными с затратами? Пикрандом
>> No.33913 Reply
>> No.33914 Reply
>>33913
Ну и при чём тут гризманки? Или это очередное славянское "тебе это не надо, смотри как надо"?
>> No.33915 Reply
>>33914
Ну я так понимаю, что ты что-то там джаваскриптом парсишь с доброчана и хочешь видеть это в виде отдельной странички? Так запили юзерскрипт, который работает на какой-нибудь статичной странице доброчана (типа http://dobrochan.com/help/wakabamark) и будет тебе счастье
>> No.33916 Reply
>>33915
Юзерскрипты тут не катят. В планах это всё потом переносить на ведроид и вообще куда угодно, где есть вебкит. Такая вот извращённая кросс-платформенность, ага.
>> No.33918 Reply
File: cordova_bot[1].png
Png, 35.12 KB, 320×360 - Click the image to expand
edit Find source with google Find source with iqdb
cordova_bot[1].png
>>33916
Ммм, тогда я ничем тебе не могу помочь. Ибо для каждого браузера это будет какое-то своё решение (если вообще будет) в виде твикинга настроек, и на ведре оно может даже и не заведётся.

Могу только посоветовать тебе посмотреть на http://cordova.apache.org/ (я только знаю о существовании этой платформы, сам я её не изучал)
>> No.33919 Reply
File: b5fede732147.jpg
Jpg, 37.71 KB, 452×500 - Click the image to expand
edit Find source with google Find source with iqdb
b5fede732147.jpg
>>33918
Выглядит интересно, спасибо.
>> No.33921 Reply
>>33918
А в прочем, нет. Эта вундервафля какая-то не юзабельная и вдобавок предназначена только для мобилок. Буду искать хаки для вебкита.
>> No.33922 Reply
>>33921
Попробуй запустить хром с опцией --disable-web-security
По идее, твоя страничка должна заработать.
>> No.33923 Reply
>>33908
> Лучше расскажи что именно ты хочешь через это АПИ сделать.
Для начала я хочу прикрутить автообновление. Да, я знаю про Куклоскрипт.
> Как пример
Непонятный пример.

Кстати, как начался ДДоС, я перешел на .com, соответственно приписав // @include dobrochan.com/* в скрипте. Однако теперь скрипт вообще не работает на странице. Не работает даже alert("");. Почему?
>> No.33924 Reply
>>33922
Угу, должна, но нам не помешает лишний браузер ради этого ставить неохота. Так что мне предстоит ещё развесёлый квест по компиляции вебкита, в qt вроде всё почти само сделается, но эти засранцы не хотят выкладывать готовую сборку, а предлагают качать овер9000 либ самостоятельно.

>>33923
Ошибки в консоли есть? Небось опечатался где-нибудь. А вообще код в студию, лучше на пастебит какой-нибудь.
>> No.33925 Reply
>>33923
> Для начала я хочу прикрутить автообновление.
Ты умеешь работать с http://jquery.com/ ? Если нет - изучай.

Вообще, в моём примере >>33908 как раз автоподгрузка постов и показана

мы просим jQuery
> $.get
обратиться к API Доброчана, которые возвращает посты треда
> ('/api/thread/expand/'+board+'/'+thread,
и выполнить нашу функцию, которая показывает эти посты, передав ей ответ API как параметр res
> function(res) {
> th.html(res);
> BindCrosses($(".delete input", th));
> });
> я перешел на .com, соответственно приписав // @include dobrochan.com/* в скрипте
Кажется правильная запись будет
// @match http://dobrochan.com/*
>> No.33927 Reply
>>33924
> Так что мне предстоит ещё развесёлый квест по компиляции вебкита, в qt вроде всё почти само сделается, но эти засранцы не хотят выкладывать готовую сборку, а предлагают качать овер9000 либ самостоятельно.
Я даже боюсь спрашивать, что за монстра ты делаешь.
>> No.33928 Reply
>>33927
Альтернативный доброридер с няшами и тортиками
>> No.33929 Reply
>>33925
> Ты умеешь работать с http://jquery.com/ ? Если нет - изучай.
Теперь всё понятно! Неужели на голом JavaScript не уедешь?
> Кажется правильная запись будет
Нет, так тоже можно. Тут написано http://habrahabr.ru/post/129343/
>> No.33930 Reply
File: wait-what.jpg
Jpg, 55.44 KB, 597×446 - Click the image to expand
edit Find source with google Find source with iqdb
wait-what.jpg
>>33928
Зачем тебе для этого вебкит?

>>33929
> Теперь всё понятно! Неужели на голом JavaScript не уедешь?
Уедешь. jQuery же сама по себе на джаваскрипте написана. Просто если ты пишешь юзерскрипт для доброчана (и только для него), то тут уже по дефолту подключается jQuery (правда версии 1.3.2). И я не вижу смысла самостоятельно долбиться об джаваскрипт, когда всё тоже самое гораздо проще делается через обёртку jQuery.
> Нет, так тоже можно.
А ты попробуй с моим вариантом. У меня с include тоже не сработало, пока я его на match не поменял.
>> No.33931 Reply
>>33929
jQuery удобней просто. Запрос к json с получением готового объекта в jQuery делается одной строчкой, на голом жаваскрипте это что-то страшное. Плюс удобные селекторы для поиска элементов на странице. Ну ещё всякая мелочь.
>> No.33932 Reply
>>33930
Чтобы написать весь функционал на жабаскрипте и хтмл, а платформозависимой была только обёртка
> А ты попробуй с моим вариантом. У меня с include тоже не сработало, пока я его на match не поменял.
Странные вы, гризманки сам прописывает вилдкарды через include при создании скрипта. А match уже в более поздних версиях появилось.
>> No.33934 Reply
>>33930
> У меня с include тоже не сработало
Заработало с include.

Кстати, правильно ли будет, если я обращусь к кнопке "скрыть форму" подобным образом?
unsafeWindow.hide_info(); Работает, но в консоли пишет TypeError: event is undefined @ http://dobrochan.ru/js/hanabira-0.5.1292.js:277. То есть я не определяю какой-то event.
>> No.33935 Reply
>>33934
> Кстати, правильно ли будет, если я обращусь к кнопке "скрыть форму" подобным образом?
Оно ругается, потому что hide_info() требует параметров. И не просто что-то там, а как минимум эвент ему надо передать.

Лучше делай так: $('#hideinfotd a').click()
>> No.34113 Reply
File: ss-(2013-08-29-at...
Png, 10.93 KB, 319×375
edit Find source with google Find source with iqdb
ss-(2013-08-29-at-12.53.02).png
File: ss-(2013-08-29-at...
Png, 5.31 KB, 713×90
edit Find source with google Find source with iqdb
ss-(2013-08-29-at-12.55.00).png

>>31938
Привет, няши.
Пытаюсь написать UserScript для HabbitRPG, который бы вырезал рекламу. И как-то не очень понятно, как это сделать.
Красным цветом я обвел то, что надо вырезать. Это обычная ссылка на сайт амазона (пик 2), без id и без классов. Это первая проблема.
Не долго думая, написал - $("a").hide(); Для тестирования скрипта я использовал alert. Оказалось, что скрипт выполняется несколько раз подряд и в конечном итоге не выполняется. То есть вот он скрыл все ссылки, а через 2 секунды страница дозагружается и ссылки опять появляются.
Что можете посоветовать?
>> No.34114 Reply
>>34113
Помнится адблок отлично решил именно эту проблему.
>> No.34115 Reply
>>34114
Стоит AdBlock plus и не решает эту проблему. Это же обычные ссылки на странице, как он их будет вычислять?
>> No.34120 Reply
>>34113

$('<style type="text/css">.task-column a{display: none;}</style>').appendTo("head"); Ты бы больше хтмл-я запостил, а то не понятно, где там кусок рекламы начинается. (а я её там не вижу, зашёл на сайтик - рекламы нет)
>> No.34121 Reply
File: ss-(2013-08-29-at-09.58.50).png
Png, 184.85 KB, 1366×768 - Click the image to expand
edit Find source with google Find source with iqdb
ss-(2013-08-29-at-09.58.50).png
>>34120
> а я её там не вижу, зашёл на сайтик - рекламы нет
Потому что я зарегистрировался там. Вот какие они хитрые, сволочи.
>> No.34122 Reply
>>34121
Ну вот сделай так - >>34120
Не помогает, разве?
>> No.34123 Reply
>>34122
Оно заработало. Спасибо!
Скажи, а почему именно appendTo("head")? Эта строчка говорит о том, что стиль нужно вставить рядом с элементами head?
>> No.34125 Reply
>>34123
Стили у нас как бы в голове лежат. Посмотри в инспекторе содержание <head>, увидишь там этот кусочек в самом конце.

Ну и в конце концов - http://api.jquery.com/appendTo/
>> No.34860 Reply
Анон, лови мою поделку(маленький хелпер): http://jsfiddle.net/hdn9Q/

Суть хелпера в том, чтобы кросс-браузерно эмулировать работу watch() из FireFox для value input[type="text"]. Возможность обойтись без setTimeout() будет тогда, когда вызнаю где в Chrome можно следить за value input[type="text"]'а(хоть как-нибудь уже, можно даже через жопу). Пока поиски, даже по исходникам Chromium'а, никуда не привели(пичаль).
>> No.35540 Reply
>>31938
Привет, анончики.
Пишу юзерскрипт на jQuery. Появилась проблема - необходимо применить форматирование к тексту, заключенному в # и <br></br>. То есть, к тексту, который начинается со знака "#" и кончается <br></br>, необходимо применить .css('color','red');
<div class = message> #Текст для форатирования <br><br> Обычный текст <br><br> #Текст для форатирования <br><br> Обычный текст </div>
Мои попытки это организовать окончились провалом.
>> No.35543 Reply
>>35540
форматирования*
Алсо, код, начинающийся с <div class = message> #Текст для форматирования <br></br> Обычный текст <br></br> #Текст для форматирования <br></br> Обычный текст </div> - пример того, с чем надо работать.
>> No.35546 Reply
File: 2.PNG
Png, 4.73 KB, 518×362
edit Find source with google Find source with iqdb
2.PNG
File: 1.PNG
Png, 4.19 KB, 503×345
edit Find source with google Find source with iqdb
1.PNG

Можно я тут вопрос по верстке задам?
Пишу календарик с добавлением записок, соответственно создаю по div-у для каждого дня. Проблема в том, что когда я добавляю новую записку jquery append к div-у моего дня, то он почему то съезжает вниз.

Может это какая то общеизвестная вещь?
>> No.35576 Reply
>>31938
Что-то js-гуру куда-то разбежались.
>> No.35597 Reply
Господа, есть ли нормальные документации, книги или тьюториалы, хорошо и правильно раскрывающие суть этого прототипно-ориентированного программирования и ООП в этом javascript. Везде какие-то ошмётки информации.
inb4: не нужно, не используется в 99 процентов и т.д.
>> No.35599 Reply
>>35540
Перебирай все ноды, ищи вхождения символа решетки, потом ищи две бырки, запоминай начало и конец отрезка, закукливай его в тег со своим оформлением.

>>35546
Ну скрины ты выложил. а код - нет.
Смотри в девелопертуле что там его растягивает, похоже, что там просто появляется дивчик высотой в строку.
>>35597
Ну Флэнаган жи
>> No.35601 Reply
>>35543
Или даже не так, берешь иннерхтмл от <div class = message> и травишь на него регулярку. чтоб найти участи для форматирования.
>> No.35610 Reply
>>35597
Во! Я нашёл кое-что! Вот в Мозилле могут нормально писать, что к чему.
Вот тут про объекты вообще:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structure[...]tures
Вот тут про объекты-литералы, которые можно прямо присваивать переменным.
https://developer.mozilla.org/en/JavaScript/Guide/Values,_variables,_a[...]erals
И вот тут про цепочки прототипов, конструкторы и object.create:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inherita[...]chain
>> No.35748 Reply
>>35599
>>35601
У меня получается найти знак # с помощью match, но как найти <br></br> сразу после строки с этим знаком?
>> No.35753 Reply
>>35748
''#[\s\S]+?<br>
>> No.35754 Reply
>>35753
Упс. Первые два символа ненужны.
>> No.35757 Reply
>>35597
Внезапно SICP, потому что javascript на самом деле функциональщина.
>> No.35758 Reply
>>35757
Меня интересовал синтаксис.
>> No.35759 Reply
>>35757
> javascript на самом деле функциональщина
Не настолько же, чтобы SICP читать.
>> No.35763 Reply
>>35753
Не, не работает. Однако спасибо за то, что показал куда копать. А не работает потому что это только для текста, а не для всего div. А в тексте <br>, очевидно, отсутствует.
Нужно искать другой подход.
>> No.35764 Reply
>>35763
Что ты несешь? Зачем тебе весь див?
Сейчас оно аккурат берет от решетки до бырки. Реплейсом оборачивай в тег с нужными стилями да и все. Иннер хтмл бери, дубина, там и бырки, все есть.

И да дай угадаю, ты у мамы джикверист-яваскриптненужнист?
>> No.35770 Reply
>>35764
Ты откуда вылез такой?
> И да дай угадаю, ты у мамы джикверист-яваскриптненужнист?
Нет, я просто решил написать себе userscript. К веб технологиям имею посредственное отношение.
>> No.35774 Reply
Где хорошо описывается ajax?
>> No.35777 Reply
>>35774

Например, здесь: http://xmlhttprequest.ru/

А ещё можно не заморачиваться и использовать jQuery. http://jquery.com/ http://api.jquery.com/category/ajax/
>> No.35783 Reply
>>31938

От скуки переписал твой код на CoffeeScript: http://pastebin.com/zMhZzZZ6
>> No.35786 Reply
>>35777
> А ещё можно не заморачиваться и использовать jQuery.
Я хотел сначала хотя бы по верхам пройтись по самому js.
>> No.36090 Reply
Сегодня луркал, как на ангулярном правильно отследить нажатие энтера, и нашел на SO такую директиву: http://pastebin.com/HXpJ5vN5 Она же целиком состоит из магии! Насколько нужно вкурить в этого углового, чтобы такое сочинять? А после того, как ng-class магическим образом заменил из пяти css-классов элемента именно тот, что нужно, безо всяких действий с моей стороны http://pastebin.com/NJj5MPQM я вообще отчаялся хоть что-нибудь понять.
Расстроился я, короче, и ушел писать говнокод дальше.
>> No.36091 Reply
>>36090
> на ангулярном
Что? Ещё что-то новое W3C вкатил? Или ещё одна супер-технология? Технологии плодятся как грибы после дождя. Что это за ангулярный? Вот этот - http://angularjs.org/
>> No.36092 Reply
>>36091
Ну да, он самый. Ньюфренду от него столько головной боли - лучше бы на старом добром бэкбоне все писал.
>> No.36095 Reply
>>36090
Я не знаю, что там у вас за ангуляр такой, но код в пастебинах вполне очевидный. (ну окей, второй не понятен без контекста, а вот первый вполне доходчиво написан)

мимоаллигатор
>> No.36248 Reply
File: 1387664015454.jpg
Jpg, 74.69 KB, 600×398 - Click the image to expand
edit Find source with google Find source with iqdb
1387664015454.jpg
>>31938
Антон у меня багет. Есть приложение с кучей анимации на Raphael.js. Размер svg, скажем, 500x500. Так вот, когда браузер развернут на весь экран, fps падает до 20-30, хотя при просто окне стабильно на ~60. Размер полотна не меняется при изменении окна, что может приводить к замедлению?
>> No.36257 Reply
>>36248

Во всех браузерах?
>> No.36266 Reply
>>36248
> что может приводить к замедлению?
Ты случаем вместо Хрома какими-нибудь глупостями не пользуешься? Эксплорером или там вообще Фаерфоксом?
>> No.36267 Reply
File: 1355315146509.png
Png, 0.50 KB, 10×10 - Click the image to expand
edit Find source with google Find source with iqdb
1355315146509.png
>>36266
Иди как ты в другое место разжигать.
>> No.36268 Reply
>>36267
А что тут разжигать? В Лисе оно именно так и работает, как анон написал. А в эксплорере рафаель лажает - там эффективнее сделать руками самому сразу в VML
>> No.36269 Reply
>>36268
Называть отличные от хрома браузеры глупостями не розжиг, нет.
>> No.36270 Reply
>>36269
Что поделать десу. Только Опера догадалась на вебкит перейти.

Если у него Хром - он что-то делает не так. Если же не Хром - лучше отказаться от Рафаэля и сделать всё по другому. Потому как в Лисе (и тем более в эксплорере) вся эта фигня начинает от души так подтормаживать, если ты рисуешь чуть больше, чем пару десятков примитивов. А что ломается у лисы при переходе в фуллскрин я до сих пор не понимаю. Не дружит она с видеокартами видимо.

Единственное, что и правда работает - это для старых эксплореров делать отдельную реализацию на чистом VML без лишних костылей. Тогда эксплорер даже лису обгонять начинает.
>> No.36272 Reply
>>36266
Ты с катушек съехал, что ли? Кто-то исключительно для себя делает веб-приложения? Показывать пользователям надпись:"Скачайте гугл хром?" вместо приложения? Люди пашут, чтобы в старых браузерах что-то было и без js, а он предлагает хромом ограничиться.
>> No.36277 Reply
File: 1387815601889.jpg
Jpg, 360.93 KB, 1280×1033 - Click the image to expand
edit Find source with google Find source with iqdb
1387815601889.jpg
>>36257
>>36266
>>36268
>>36270
У меня хром. Анимация, опять таки, внезапно подскакивает когда открыта консоль. Кстати может я плохо выразился, никакого фуллскрина нет, просто развернутое на весь экран окно.
>> No.36278 Reply
>>36277
Забыл сказать, только на хроме.
>> No.36462 Reply
Анон, поясни по callback'ам. Есть функция, спрашивающая у гугла адрес по координатам:
function codeLatLng(latLng) {
    var coords = latLng;
    geocoder.geocode({ 'latLng': latLng }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            // Получили результат, обрабатываем
            addressParsed(coords, results[0].formatted_address)
        } else {
            alert("Невозможно найти адрес в данной точке");
        }
    });
}
Передать параметр coords из "внешней" функции, как я понимаю, можно. А что происходит пока мы ждем ответа от гугла? Может ли произойти такое, что codeLatLng вызовется при ожидании еще раз и coords перетрется другими координатами (и при получении первого ответа будут сохранены неправильные координаты)?
Если может, то как такого избежать? Создавать очередь из координат не стоит, потому что их адреса могут прийти в другом порядке. Остается только делать булевскую переменную, которая не даст вызвать эту функцию еще раз от просто return'а в начале функции, до включения неактивности кнопкам на интерфейсе, не суть важно, пока не получили ответ от предыдущего вызова. Или есть все же более адекватные варианты?
>> No.36463 Reply
>>36462
Надеюсь не пишу хуиты. При ожидании первого ответа первый scope (данные первой функции) будет жить и колбак будет работать с coords только этого scope'a, в ожидании ответа ты, например, вновь нажал кнопочку и создался второй отдельный scope и другой отдельный callback будет работать с данными этого второго scope'a никак не задевая первый.
>> No.36464 Reply
>>36463
Простите за косноязычность.
>> No.36465 Reply
>>36462
При втором запуске codeLatLng, в ней же должен быть создан уже второй колбэк, никак не связанный с первым. Так же как и при создании конструктором любого другого объекта. Данные для каждого вызова функции хранятся отдельно.
>> No.36469 Reply
>>36463>>36465
О, тогда просто прекрасно, спасибо.
>> No.36703 Reply
Анон, подскажи какое-нибудь простое решение, чтобы запилить в жс аналог инклуда/импорта с генерацией одного файла.
>> No.36705 Reply
>>36703
RequireJS не то ?
>> No.36706 Reply
>>36703
Зависит ещё мне кажется от используемой технологии. То есть от языка и движка/фреймворка. В рельсах, например, из коробки есть.
>> No.36716 Reply
>>36705
Но он в риалиайме же, не? Мне просто неудобно работать со здоровым файлом, особенно когда надо два куска одновременно видеть.
>>36706
Да нет фрейморка, если jquery не считать за таковой.
>> No.36717 Reply
>>36716
> он в риалиайме же
Эм, на стороне клиента.
> нет фрейморка
Не могу сообразить, тебе нужно на серверной стороне дамп всех скриптов в один делать или у тебя этой стороны вообще нет?
>> No.36718 Reply
>>36717
Просто сделать дамп всех скриптов один. Неужели я так не понятно изъязняюсь? Такое ощущение, что для любых вещей сложнее приветмира принято использовать исключительно фреймворки или компиляторы другого языка в жс, но никак не чистый жс.
>> No.36719 Reply
>>36718
> любых вещей сложнее приветмира принято использовать
..серверную сторону. Что за чистые js приложения такие?
> Неужели я так не понятно изъязняюсь?
Из твоего реквеста тяжело сообразить (по крайней мере мне), что ты делаешь.
>> No.36720 Reply
>>36719
Юзерскрипты же. Сейчас ты скажешь, что мне это не нужно, да?
>> No.36721 Reply
>>36720
В greasemonkey юзерскриптах есть директива @require, если bookmarklet, то подключение отдельных файлов через добавление <script> элемента к хедеру.
>> No.36722 Reply
>>36721
@require предполагает откуда-то закачивать скрипт и по смыслу предназначена для подключения библиотек.
У меня по факту вообще ромбовидная структура зависимостей получается - объект, занимающийся всеми настройками, его используют все остальные подсистемы и им порой надо знать включена ли другая подсистема, и всё это в итоге должно оказаться в одном файле. Сомневаюсь, что гризманки обрабатывает скрипты в @require как юзерскрипты.
>> No.36723 Reply
>>36722
Увы, я нихуя не понять. Спокойной ночи.
>> No.36740 Reply
>>36717
> Эм, на стороне клиента.
Как @import в CSS? Серьёзно? Говно, чё тогда про неё столько говорят. Нужна тулза для сервера и чтобы с кешированием. Это чтобы по-нормальному.
>>36718
Хватит называть отсутствие фрейморков "чистым название ЯП". Это глупо, ты всех запутаешь.
> Такое ощущение, что для любых вещей сложнее приветмира принято использовать исключительно фреймворки или компиляторы
Ощущение тебя не подводит. Фреймворки, либо CMS, либо другое готовое решение.
> но никак не чистый жс.
Он вообще только на стороне клиента выполняется. Если не используется node.js. На серваке крутят пыху, руби, питон или что-то.
>>36719
> Из твоего реквеста тяжело сообразить (по крайней мере мне), что ты делаешь.
Всё предельно ясно. Нужно, чтобы все js(и css тоже вообще говоря) сливались в один файл(один js и один css) на стороне сервера и этот файл кешировался, чтобы всё качалось пользователем в один запрос. Это увеличивает производительность. В рельсах из коробки есть, только не знаю, есть ли там проверка на повторую вставку. Есть куча каких-то таких фич и для пыхи и скорее всего для всего, но я не знаю.
>> No.36741 Reply
Ща вроде почитал, пишут, что вроде RequireJS запускается не только у клиента, но можно на серваке запускать, используя Rhino или Node. В Grunt, пишут, вроде есть возможность использовать консольный таск.
>> No.36749 Reply
>>36703

Browserify, может?
>> No.36770 Reply
>>36740
> Всё предельно ясно. Нужно, чтобы все js(и css тоже вообще говоря) сливались в один файл(один js и один css)
Ну до этого я дошел, вот только про серверную сторону ничего нет, мне казалось, он хочет, чтобы это происходило во время выполнения в браузере.
>> No.36792 Reply
Ничего я не хочу уже, пилю велосипед себе. Вечно в этом вашем жс костыли нужны, не могли как в питоне всё сделать.
>> No.36795 Reply
>>36792
Ты нод.жс, что ли юзаешь? Что ты используешь вообще? Что за технологии?
>> No.36797 Reply
>>36795
Юзерскрипт я делаю, сказал же уже.
>> No.36798 Reply
>>36792
Что тебе как в питоне? Импорт? Так там тоже не тупой дамп. Пытаются навесить какой-то странный функционал, а потом язык обвиняют.
>> No.36799 Reply
>>36798
стандартный функционал любого вменяемого языка. Энивей, я запилил примитивный препроцессор для инклудов с проверкой на повторное включение файлов, вопрос закрыт. Выше по треду один няша давал что-то подобное, но зело монстроузное и еще более костыльное
>> No.36800 Reply
>>36797
Выражался бы яснее. Я думал, это кто-то предложил тебе юзерскриптами дампать джаваскрипты скрипты на сервере. Да, ты изъясняешься абсолютно непонятно. И ещё у тебя в голове какая-то каша:

Джаваскрипт - интерпретируемый язык. Это значит, что он может выполняться только интерпретатором. В случае с простым джавасриптом из одного .js файла, интерпретатором служит интерпретатор, предусмотренный в браузере. Тебе нужно, если ты хочешь, чтобы сливал не браузер, а уже было слито, предусмотреть другой интерпретатор и тулзу, которые будет выполнять слитие.
>> No.36803 Reply
>>36799
О чем ты говоришь, js общепринято пользовать для веба, где вполне себе есть элемент script, на серверной стороне (node.js) require есть. Для web 1.0 страничек функционала жс хватало с лихвой, не все прозревали серьезные масштабируемые веб приложения.
Чисто из интереса, что делает твой скрипт?
>> No.36813 Reply
>>36803
html развивался, css развивался, а js так и остался в эпохе 1.0. И всем норм, лучше же запилить еще один компилятор нормальный_язык->жс. Ставить ноде.жс ради такой мелочи мне влом, тем более, что нет никакого сервера и мне так же ручками запускать команду на обработку файлов.
>> No.36814 Reply
>>36813
> лучше же запилить еще один компилятор нормальный_язык->жс
Да. Лучше. Гораздо лучше. Настолько лучше, что никакие прочие альтернативы даже в сравнение не идут.

Впервые за двадцать лет мы привели весь зоопарк стандартов и реализаций к какому-то единому виду. JS работает одинаково в любом браузере. CSS везде один и тот же, ни у одного браузера нет своих особых представлений о том, как должны работать селекторы. Всё. Отлично. Так и должно быть. Я сам скомпилирую CoffeeScript в JS, а Stylus - в CSS. Браузеры не должны их нативно поддерживать, потому что это приведёт к новому эпизоду зоопарка, когда FF поддерживает CS версии 1.6.1, Chrome - 1.5.4, а IE обеспечивает неполную реализацию 1.2.6 с рядом нестандартизированных расширений, а его разработчики сидят в сторонке и нюхают клей. Поели уже этого говна в 2000-е, спасибо, больше не надо.
>> No.36815 Reply
>>36813
Ты полностью проигнорировал вообще всё, что я тебе объяснил про интерпретаторы.
>> No.36824 Reply
>>36815

Мне ты ничего не объяснял, я мимо проходил. Просто не смог проигнорировать тот текст, который процитировал. И в любом случае я не особо понимаю, что такого я проигнорировал, на что мне следовало бы обратить внимание. Ты пол-треда жалуешься на то, что в JS нет питоновских импортов - ну так поешь говна и умри, хосспади. Никто не обязан делать именно такие импорты, которые нравятся тебе. require() - вполне годный вариант. Алсо, попробуй всё-таки заюзать browserify, а то у меня стойкое ощущение, что ты жрёшь кактус.
>> No.36825 Reply
>>36824
Нет, я написал скрипт на 10 строчек окей, 29, который делает то, что мне надо. browserify слишком жирный и пытается делать вид, будто он не является хаком, мне не нравится такой подход. Хватит уже поднимать эту тему.
>> No.36826 Reply
>>36825
> пытается делать вид, будто он не является хаком
В чём хак-то? Ты вызываешь require - получаешь модуль. Нигде не прописано, как именно этот метод должен быть реализован и где должны храниться эти самые модули. Алсо, если я правильно понял, то ты написал то же самое. Алсо, browserify не жирный. Алсо, долой велосипеды.
> Хватит уже поднимать эту тему.
Какие мы нежные.
>> No.36827 Reply
>>36826
Мой велосипед лучше. Сосни.
>> No.36828 Reply
>>36827

Чем?
>> No.36830 Reply
>>36828
1. Он на питоне.
2. Он маленький.
3. Он делает ровно то, что мне нужно.
>> No.36832 Reply
>>36830
> 1. Он на питоне.
Дальше не читал.

Ну серьёзно, как можно говорить "моя программа лучше, потому что она на языке N"? Кроме того, JS традиционно уделывает питон во всех тестах.
>> No.36833 Reply
>>36830

А, да, возвращаясь к теме велосипедов. Написанное за 15 минут обычно хорошим не бывает. Или разваливается, когда разработчик пытается впилить в него новые фичи. Ну или всё-таки превращается в программу среднего размера.

Я, конечно, никому ничего не навязываю: нравится - пользуйся. Просто меня как-то удивляют выпады то в сторону browserify, то в сторону CommonJS, то в сторону самого JS - это напоминает мне обезьян, которые кидаются фекалиями.
>> No.36834 Reply
>>36832
> Дальше не читал.
Окей, тоже не буду.:3
>>36833
> Написанное за 15 минут обычно хорошим не бывает. Или разваливается, когда разработчик пытается впилить в него новые фичи. Ну или всё-таки превращается в программу среднего размера.
Ну не знаю, я как-то написал велосипедный генератор сфер для майнкрафта, так до сих пор иногда пользуюсь. В интернетах ничего лучше не нашёл. Я всегда сначала ищу готовое, потому как слишком ленив, чтобы писать самому. Так что в избыточном велосипедизме меня обвинить не выйдет.
>> No.36835 Reply
>>36834
> Так что в избыточном велосипедизме меня обвинить не выйдет.
Было бы желание. Велосипедостроение ведь градаций не имеет: оно либо есть, либо нет его. Алсо, тут можно было бы начать разговор о пользе данного процесса, но мне в лом; могу только посоветовать желающим задуматься, чем отличается кресло от хорошего кресла.
>> No.36836 Reply
>>36830
То есть ты каждый раз при дебаге/запуске своего юзерскрипта прогоняешь его через некий питоновский скрипт? Что-то не догоняю.
>> No.36837 Reply
>>36836

При каждом изменении. Обычная практика. Легко автоматизируется (см. nodemon, grunt-watch и подобное).
>> No.36853 Reply
Это самое.
Может, кто-нибудь подскажет?
Вроде, ерундовая проблема, но сам не разберусь.
Толком js никогда не изучал.
>> No.36854 Reply
>>36853
Хмм, не вижу проблемы.
>> No.36855 Reply
>>36853
Да.
>> No.36886 Reply
>>36853
Уверен, здесь есть жиквери-плагин для решения твоей проблемы. Просто попробуй погуглить что-нибудь вроде жиквери+проблема.
>> No.36887 Reply
File: Capture.PNG
Png, 8.93 KB, 689×196 - Click the image to expand
edit Find source with google Find source with iqdb
Capture.PNG
>>36886
Спасибо, анон!
>> No.36899 Reply
File: T1iJBHuyQB8.jpg
Jpg, 118.57 KB, 1280×720
Your censorship settings forbid this file.
r-18
Дело такое, хочу сделать небольшую обучающую ерунду потипу кодакадеми. У нас есть окошко с описанием задачи, окошко с вводом решения и окошко результата. Сорт оф.
Так вот. Какой стек технологий подойдет под реквест? В первую очередь хочу изучить что-то новое (например кнокаут). Во вторую, построить более-менее годную архитектуру.
Что посоветуете, доброчаньки?
Могу в яваскрипт и жуквери. Хочу изучить кнокаут или что-то такое. Какую архитектуру посоветуете?
>> No.36903 Reply
>>36824
> Ты пол-треда жалуешься на то, что в JS нет питоновских импортов
Это не я. Я, лол, думал это ты жалуешься, хотел объяснить, почему так. Тащемта я против таких импортов, потому что это лишние запросы. Это ж ты написал, что js застрял?
>> No.36908 Reply
>>36903
> потому что это лишние запросы
В питоне же препроцессор вроде. Или я ошибаюсь?

мимокрок
>> No.36914 Reply
File: image.jpg
Jpg, 1005.32 KB, 2048×1536 - Click the image to expand
edit Find source with google Find source with iqdb
image.jpg
>>36899
Ангуляр лучше смотри. Хотя можно и кнокаут, но он некое промежуточная версия между зоопарком разрозненных жс либ и ангуляром.
>> No.36915 Reply
>>36908
Достали, обращайте внимание, в ответ на что написан пост.
>> No.36917 Reply
>>36903

Нет, не я. Я вот: >>36814
>> No.36946 Reply
File: 1111111.png
Png, 19.96 KB, 403×158 - Click the image to expand
edit Find source with google Find source with iqdb
1111111.png
Вот я сейчас осваиваю ноду, а конкретно — события.
И есть такой код, который при загрузке файла кидает событие, а мы его ловим.
И в отмеченной строке хочется, чтоб было написано через this.emit() или вообще emit(), но в этом контексте this не определён, он вообще undefined.
1) Как мне переписать этот код, что бы такое было возможно?
'use strict';
var fs = require('fs');
var EventEmitter = require('events').EventEmitter;
var em = new EventEmitter();
em.load = function (url) {
    fs.readFile(url, function (err, data) {
        if (err) {
            throw err;
        } else {
            em.emit('loaded', data.toString()); // <- тут
        }
    });
};
module.exports = em;
2) как мне сделать так, что бы код на картинке не выдавал такого ворнинга?
>> No.36950 Reply
>>36946
У меня встал на твой редактор. Что это?
>> No.36952 Reply
>>36946
> но в этом контексте this не определён, он вообще undefined.
Ммм, ты проверял этот факт? В этом случае он, ЕМНИП, будет равен readFile.
По сабжу - тебе вообще нужно класс писать, который наследуется от EventEmitter, и экспортировать уже его. Что-нибудь вроде:
var EventEmitter, Extended, fs, _ref,
    __hasProp = {}.hasOwnProperty,
    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

fs = require('fs');

EventEmitter = require('events').EventEmitter;

Extended = (function(_super) {
    __extends(Extended, _super);

    function Extended() {
        _ref = Extended.__super__.constructor.apply(this, arguments);
        return _ref;
    }

    Extended.prototype.load = function(url) {
        var _this = this;
        return fs.readFile(url, function(err, data) {
            if (err != null) {
                throw err;
            }
            return _this.emit('loaded', data.toString());
        });
    };

    return Extended;

})(EventEmitter);

module.exports = Extende
За наследование отвечает __extends. Вообще, про наследование в JS можешь прочитать здесь: http://learn.javascript.ru/prototype#%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1[...]otype
Затем ты расширяешь свой класс функцией load.
>> No.36954 Reply
>>36946
Вот еще что:
1)Чтобы тебе был доступен тот this, который тебе нужен, ты определяешь переменную, в которую записываешь инстанс того this, который тебе нужен. Т.к. коллбек readFile-а определен в load, то ему доступны определенные внутри load переменные, т.е. тот самый _this. В общем-то, со своим em ты делал то же самое.
советовал бы использовать кофе вместо нативного JS. Во-первых, оно и вправду удобнее опасносте - начинаешь забывать, как все это делается на чистом JS. Во-вторых, на 10 входных строк выхлопа - 23. Разница в количестве кода в проекте на 100+ строк уже дововольна велика. Для примера, запощенный мною код на CS:
fs = require 'fs'
EventEmitter = require('events').EventEmitter

class Extended extends EventEmitter
    load: (url) ->
        fs.readFile url, (err, data) =>
            if err?
                throw err
            @emit 'loaded', data.toString()
            
module.exports = Extended
Олсо:
if (err) {
    throw err;
} else {
    em.emit('loaded', data.toString()); // <- тут
}
Можно просто
if (err)
    throw err;
em.emit('loaded', data.toString()); // <- тут
Код после выброса исключения не будет выполняться.
>> No.36959 Reply
File: 138270282673356.jpg
Jpg, 54.50 KB, 480×480 - Click the image to expand
edit Find source with google Find source with iqdb
138270282673356.jpg
>>36950
Божественный WebStorm, по мне так 10/10.

>>36954
Ой, пасибо большое, столько всего.
Я слышал про кофе, но мне бы сначала разобраться в тонкостях обычного ЖС, а то сейчас от некоторых выурутасов у меня трещит шаблон, лол.
>> No.36960 Reply
File: Nyuu_for_my_Taylor_by_Gothic_Satanica.jpg
Jpg, 85.90 KB, 600×888 - Click the image to expand
edit Find source with google Find source with iqdb
Nyuu_for_my_Taylor_by_Gothic_Satanica.jpg
>>36952
Неправда, наследование в яваскрипте устроено не так. Это какие-то поздние способы хакинга.

В яваскрипте функция одновременно может являться и объектом, если зовется через new. У функции-объекта есть публичные методы и поля, которые устанавливаются через this.anyMethod = function ... или this.anyField = 'some value'; И приватные поля и методы которые просто пишутся внутри через var или как вложенная функция.
function SpiceCake () {
    var privateField = 'private value';
    this.publicField = 45; // radius
    
    this.publicMethod = function () {}
    function privateMethod() {}
}
Теперь про наследование. Чтобы унаследовать чего-нибудь, нужно это чего-нибудь прописать в прототип.

Прототипы это простые словарики - можно заменять их целиком родителем, можно выдрать из родителя отдельные методы, можно множествено наследовать, расширяя словарик.

Прописывать в прототип можно двумя способами: 1) в ран-тайме объекта через this.--proto-- и 2) не в рантайме объекта через FunctionObject.prototype.

Смотри, вот твой класс в двух разных способах прописывания.

http://paste.org.ru/index.pl?cbcd9f

StrangeLoader это копирование прототипов в чистом виде - видишь, оно делается вне тела функции, это способ не в рантайме.

StrangeLoader2 это уже копирование в ран-тайме через --прото--.

Первый способ олдфажнее, второй стандартизирован или нет не помню, в стандарт неохота лезть.

По поводу this. Нужно помнить, что у эта переменная вяжется не так как все остальные. Все остальные-то в яваскрипте вяжутся лексически - как выглядит в исходниках, а вот this вяжется то ли динамически то ли еще как-то не так. С ней действительно нужно просто заводить в начале функции переменную и работать с ней. Как в >>36952 написали
var _this = this;
или как у меня написано
var me = this;
>> No.36961 Reply
File: Nyuu_by_Luppi7.png
Png, 4.78 KB, 209×186 - Click the image to expand
edit Find source with google Find source with iqdb
Nyuu_by_Luppi7.png
>>36946
Да и еще отдельное замечание по поводу твоего throw. Ты где его ловить собрался? Если уж делаешь асинхронно, то делай все и эмить событие при ошибке, вообщем посмотри на paste.org.ru как сделано.
>> No.36962 Reply
>>36960
> http://paste.org.ru/index.pl?cbcd9f
И еще строчка 7 там не нужна. Вот.
>> No.36963 Reply
>>36959
> но мне бы сначала разобраться в тонкостях обычного ЖС
А вот это правильно. Но вообще, советовал бы делать это несколько иначе. Во-первых, уже упомянутый мною learn.javascript.ru люто годный. Единственное, что если ты намерен подвизаться в области только лишь Node.JS, то вторую часть можешь смело пропускать, да и третью по большей части. Практиковаться лучше в пердольке браузера, притом примеры юзать совсем небольшие, только чтобы протестить, как оно все работает.
Во-вторых, лучше, прежде чем писать что-то свое на ноде, поглядеть, как вообще выглядят реальные проекты, разобраться, как и что там работает. До того, как я нашел работу, я тыкал ноду месяцев 5. Спустя месяц после того, как начал работать, я узнал больше, чем за эти три месяца раза так в три.
P.S.: суровые реалии ноды таковы, что сложно найти чистую сервер-сайд работу на ноде. Почти наверняка ты будешь пилить еще и фронтенд.
>> No.36966 Reply
>>36960
То есть можно наследовать через
someClass.prototype = superClass.prototype;
или в конструкторе
this.__proto__ = new superClass();
?

А вот так можно?
FileLoader.prototype = new EventEmitter();
FileLoader.prototype.load = function (url) {...}
про throw понял.
>> No.36967 Reply
>>36966
> ?
Да.
> А вот так можно?
Можно, но неудобно. Теряешь доступ к полям объекта. Как ты к _this будешь в этом случае обращаться, например?
>> No.36969 Reply
File: i.jpg
Jpg, 4.42 KB, 126×150 - Click the image to expand
edit Find source with google Find source with iqdb
i.jpg
>>36967
Хотя нет, к this есть доступ. Можно вот так

http://paste.org.ru/index.pl?sn91ry
>> No.36970 Reply
>>36960
> Неправда, наследование в яваскрипте устроено не так. Это какие-то поздние способы хакинга.
"Я этого не знаю и не понимаю => этого не существует, это что-то неправильное.".
>> No.36971 Reply
Вроде про прототипы и ООП в жс написано хорошо на сайте мозилы.(на ангельском, разумеется.)
>> No.36972 Reply
>>36970
> этого не существует, это что-то неправильное
Ты уж определись, как я якобы считаю, что не существует или что не правильное?
>>36971
Про них почти везде написано плохо, кроме итт. Мазила не является исключением.
>> No.36973 Reply
>>36972
Кроме треда на доброчане? Что прямо нету годной книги ни одной? А что конкретно на мозиле не так? А по прототипному наследованию есть что-то годное?
>> No.36974 Reply
>>36973
> Кроме треда на доброчане?
Что смущает? Надо чтобы с погонами было и чтобы ручьи текли от списков публикаций?
> Что прямо нету годной книги ни одной? А по прототипному наследованию есть что-то годное?
Есть хорошие, но книжка это книжка, в ней намылено много и интерактивного общения нет. Из всех источников известных мне источников наиболее ценным представляется

http://iolanguage.org/scm/io/docs/IoGuide.html#Objects

но там прототипная система не очень похожа на яваскрипт, и в отличие от последнего недоступна для хакинга. Если основываться на ней, приходится объяснять много разницы и много деталей, непонятно выйдет.
> А что конкретно на мозиле не так?
Когда рассказываешь про объекты, наследование и все такое, следует оперировать сущностями максимально на них похожими. Чтобы с конструкторами, с методами, полями и все такое. Чтобы скрывалось состояние и был обмен сообщениями, пусть они и не называются сообщениями, а методами. А на мозилле все какие-то JSON-словарики зовут через Object.create, бухтят про отличия от С++. Конечно яваскрипт, как и любой другой динамический ЯП в этом смысле не однозначен - у него все в одном: и функция, и объект и все остальное. Но уж что-что, а JSON-словарики называть объектами можно в самой меньшей мере - у них работа с общим состоянием крайне затруднена, если не невозможна, какой это объект-то тогда?
>> No.36979 Reply
File: 13498485903380.jpg
Jpg, 20.50 KB, 400×270 - Click the image to expand
edit Find source with google Find source with iqdb
13498485903380.jpg
ИТТ
>> No.36985 Reply
>>36974
> Когда рассказываешь про объекты, наследование и все такое, следует оперировать сущностями максимально на них похожими. Чтобы с конструкторами, с методами, полями и все такое. Чтобы скрывалось состояние и был обмен сообщениями, пусть они и не называются сообщениями, а методами. А на мозилле все какие-то JSON-словарики зовут через Object.create, бухтят про отличия от С++. Конечно яваскрипт, как и любой другой динамический ЯП в этом смысле не однозначен - у него все в одном: и функция, и объект и все остальное. Но уж что-что, а JSON-словарики называть объектами можно в самой меньшей мере - у них работа с общим состоянием крайне затруднена, если не невозможна, какой это объект-то тогда?
Я считаю, что синтаксис ООП в конкретном языке - это одно, а рассказ самого ООП - это другое. Хотя модель жс и требует специальных разъяснений.
>> No.36993 Reply
JS прототипно-ориентированный, наркоманы!
>> No.36994 Reply
File: nyuu__happy_by_umaybedead.jpg
Jpg, 88.24 KB, 962×610 - Click the image to expand
edit Find source with google Find source with iqdb
nyuu__happy_by_umaybedead.jpg
>>36993
> Я считаю, что синтаксис ООП в конкретном языке - это одно, а рассказ самого ООП - это другое. Хотя модель жс и требует специальных разъяснений.
Так про само ооп и не говорилось, говорилось про его реализацию.
>>36993
> JS прототипно-ориентированный
Неправда, JS ориентированным на что-либо языком вообще не является, так как не вынуждает пользователя к мышлению в рамках той или иной парадигмы. Кто что хочет - тот на нем то и городит: эндофункторы, обещания, гигантские человекоподобные фреймворки, копипасты с руби он рейлс и многое другое.
>> No.36995 Reply
File: 1328008020792.jpg
Jpg, 309.58 KB, 600×437
edit Find source with google Find source with iqdb
1328008020792.jpg
File: 1390894439345.png
Png, 0.90 KB, 300×20
edit Find source with google Find source with iqdb
1390894439345.png

http://jstherightway.org/ Что думаете насчет тезисов с этого сайта, котаны?
>> No.37004 Reply
>>36995

Думаю, что он у меня не открывается.
>> No.37005 Reply
File: isup.png
Png, 90.23 KB, 1366×768 - Click the image to expand
edit Find source with google Find source with iqdb
isup.png
>>37004
Провайдеропроблемы. http://www.isup.me/jstherightway.org
>> No.37006 Reply
>>37005

Сам ты провайдеропроблема. Впрочем, теперь открылось.

Вижу краткий такой обзор основных концепций JS, инструментов, фреймворков и чтива. Что о нём можно думать? Разве что отсутствие в списке NodeUnit глаз резануло.
>> No.37013 Reply
File: 136962216688237.jpg
Jpg, 14.73 KB, 200×250 - Click the image to expand
edit Find source with google Find source with iqdb
136962216688237.jpg
>>36995
> http://jstherightway.org/
Эй ты!
Это пособие по яваскрипту направлено на наставление новых разработчиков и не очень новых лучшим практикам яваскрипта.

Несмотря на свое название, пособие не содержит в себе как такового "правильного пути" к яваскрипту.

Мы просто собрали все говно от ведущих разработчиков и сложили его сюда. Так как оно вышло из опытных, видавших виды, задниц мы можем сказать, что это и есть "правильный путь" или по-просту лучшее из того, что у нас есть.
>> No.37016 Reply
>>37013
> наставление новых разработчиков и не очень новых лучшим практикам яваскрипта
Не нужно наставление. Нужны годные доки и талмуды. Впрочем у остальных ещё хуже.=__= Создаётся ощущение, что джаваскрипт - это язык, которых известен хуже всего, как какой-то космос.
>> No.37017 Reply
>>37016
> Создаётся ощущение, что джаваскрипт - это язык, которых известен хуже всего, как какой-то космос.
Вот что тебе нужно? Что?
Что в джаваскрипте стоит подробнейшего изучения, чего нет в других языках?
Синтаксис? С-подобный. Концепция прототипного программирования? Разжевано где нипопадя. Задачи для изучения на практике? Возьми любой учебник-задачник по программированию и велосипедь это на джаваскрипте.

А все почему? Исторически сложилось, что веб программируют на перле, пыхе, рубях, whatever. И когда понимаешь что нужен еще джаваскрипт чтобы формочки двигать в браузере, то он легко и непренужденно занимает свою область.
>> No.37020 Reply
>>37016
Ты ничего не понимаешь и никогда не поймёшь, просто делай умное лицо и обсирай всех, кто не понимает. Это и есть суть жс-сообщества.
>> No.37023 Reply
>>37017
> Что в джаваскрипте стоит подробнейшего изучения, чего нет в других языках?
Его инфраструктура, его сообщество, привычки, традиции и ритуалы кодирования. Ты же не пишешь на нем абстрактные комбинаторы в вакууме?
> Ты ничего не понимаешь и никогда не поймёшь, просто делай умное лицо и обсирай всех, кто не понимает. Это и есть суть жс-сообщества.
Не сердись, на сердитых воду возят, а на дутых - кирпичи.
>> No.37024 Reply
>>37017
> Что в джаваскрипте стоит подробнейшего изучения, чего нет в других языках?
Прототипы и отсутствие классов, разумеется. Вообще реализация ООП и типов. В руби всё является классом, даже nil и true/false. А в джаваскрипте число - это вообще класс или нет, я так и не понял. Я понял, как присвоить прототипу объекта в жс значение, но я так и не понял, что это за прототип и как он приблизительно реализован. Я вообще не могу предсказать его поведение. Что будет, если я изменю предка, изменятся ли потомки? Можно ли через объект повлиять на его предка? Чтобы чётко. И не надо мне говорить, что де "это не нужно, нужно только привязать несколько строк к событиям jQuery". жс используют по-всякому и его стоит изучить и понять.
>> No.37036 Reply
>>37024
Ну это тебе стандарт надо читать. Вот этот файлик

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

На странице 99 рассказано про создание объектов. На странице 100 рассказано про конструктор. Там много методов в скобочках, типа [[Get]] - это внутренние методы объектов жс, которые только транслятор звать может.

На странице 39 рассказано про некоторые другие внутренние методы.

И мне кстати тоже его надо почитать, потому что вот так

   SomeClass.prototype = SuperClass.prototype

делать нельзя - словарик prototype скопируется по ссылке и изменение прототипа SomeClass приведет к изменению прототипа SuperClass, что очень плохо. Так что вовсе это не олдфажный метод, а дурацкий.

Метод c --proto-- этим не страдает, где-то там при создании объекта словарик копируется и прототип суперкласса остается нетронутым. Где конкретно что-то не удается понять из стандарта напрямую.
>> No.37037 Reply
>>37024
> Я понял, как присвоить прототипу объекта в жс значение, но я так и не понял, что это за прототип и как он приблизительно реализован. Я вообще не могу предсказать его поведение. Что будет, если я изменю предка, изменятся ли потомки? Можно ли через объект повлиять на его предка? Чтобы чётко.
Да, тут муть какая-то, если нечетко, пока насчитано 3 способа отнаследоваться 1) через копирование prototype - дурной, потому что потомок влиает на папку, 2) в рантайме, через --proto-- пока самый нормальный (потомок на папку не влияет, папка на потомка влияет), третий через Object.create он самый типовой - создает цепочку прототипов, но по способу вызова самый дурной - то, от чего наследуешься определяется при инстанциации объектов - то есть в одном месте я один и тот же объект могу наследовать от селедки, а в другом от радио.

Надо засесть и разобраться, правда неохота - не так уж и часто приходится выстраивать адские иерархии объектов.
>> No.37038 Reply
>>37036
Хм, ECMAScript 5.1. Были бы тут отображены особенности ещё разных версий. А то в IE8 это не полетит никуда.
>> No.37039 Reply
>>37038
Алсо, а реализован ли он и кем? Стандарт - это лишь чья-то хотелка. И всё таки хотелось бы про стиль программирование на жс.
>> No.37040 Reply
>>37037
> Да, тут муть какая-то, если нечетко, пока насчитано 3 способа отнаследоваться
Я тебе говорю, что я уже разобрался, как отнаследоваться, но этого мало.
> в рантайме, через --proto--
Это ж только в фаерфоксе работает.
>> No.37041 Reply
>>37040
> Я тебе говорю, что я уже разобрался, как отнаследоваться, но этого мало.
А я нет, делись.
> Это ж только в фаерфоксе работает.
В вебките тоже, в последнем осле тоже. Где у тебя не работает?
>> No.37042 Reply
>>37039
> И всё таки хотелось бы про стиль программирование на жс.
А такого вообще нет. Используемые библиотеки определяют то, как пишешь.
>> No.37043 Reply
>>37039
Если под стилем программирования понимается coding convension, то например
http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml
>> No.37044 Reply
>>37041
Ну в конструкторе через this.prototype и в Object.create. Чё-то ты путаешь меня. Что такое инстанциация объектов? Какая ещё инстанциация?
>> No.37045 Reply
>>37044
> через this.prototype
Как-то поздновато. В конструкторе оно работать не будет же.
> Что такое инстанциация объектов?
Создание новых экземпляров объектов, пусть есть объект
function A () {}
и инстанцицией будет, например,
var aInstance =  new A();
>> No.37047 Reply
>>37045
Где ты подцепил эту терминологию?
function A () {} - это конструктор, а не объект.
var aInstance = new A(); - это и есть объект, это называется создание объекта вызовом конструктора. На офф. сайте мозиллы такая терминология была принята. По-моему всё потому, что опять у всех возникает желание выкинуть жс и вернуть на место классы, которых нету.
>> No.37055 Reply
>>37047

CoffeeScript решает.
>> No.37059 Reply
>>37055
Сформулируй мысль яснее.
>> No.37060 Reply
>>37059

Куда уж яснее. Если кому-то не нравится реализация ООП в JavaScript, то решение проблемы - CoffeeScript, потому что в нём всю эту кашу превратили в нормальные классы.
>> No.37063 Reply
>>37060
Так бы и сказал сразу.
>> No.37197 Reply
Анончики, посоветуйте годный гайд по юзерскриптам. Есть один говносайт, админ которого не желает следовать в ногу со временем. Хочу основательно перепилить интерфейс. В жс полный нуль.
>> No.37199 Reply
>> No.37205 Reply
>>37199
Прочитал. Решил отказаться от этой затеи. Спасибо.
>> No.37220 Reply
File: Nyuu_dumm_xD_by_NyuuMashiba.jpg
Jpg, 62.51 KB, 900×506 - Click the image to expand
edit Find source with google Find source with iqdb
Nyuu_dumm_xD_by_NyuuMashiba.jpg
>>37047
> Где ты подцепил эту терминологию?
Реальность, создание реальности - реализация. Электрифицированность, создание электрифицированности - электрификация. Инстанс чего-нибудь, создание инстансов - инстанциация. Элементарно, Ватсон, же.
> По-моему всё потому, что опять у всех возникает желание выкинуть жс и вернуть на место классы, которых нету.
Ты удивишься от того, как ты одинок в этом. Во-первых для тех кому нужны были классы создали кофийскрипт, а впоследствии дельфиблядок написал для них роскошнейший typescript, с классами, интерфейсами, генериками, полиморфизмом, выводом типав, типами для функций, поддержкой визуал студии, вообщем всем тем, чтобы зашедший в веб-погромирование шарпоблядок не чувствовал себя одиноким.

Только вот не так уж много пишут что на тайпскрипте, что на кофийскрипте по сравнению с жс. Ну да это понятно, такие языки они всегда маргинальные, их очень сильно форсить надо. А кофийскрипт вообще кажется недоделкой. Сделали отступы как в питоне и гордятся до пенсии, а то что destructive assignment они сделали, а сопостовление с образцом забыли (а до него надо было сделать всего лишь 1 маленький шажочек) это типа ничего. Плюс не сделали каких-нибудь асинков на уровне языка, получается непонятно, зачем его применять. Чтобы {} менять на отступы, а this на собаку?

Второе. То, о чем говорилось итт, по сути и было попыткой показать тебе классы в жс. Классы в аспекте той терминологии, когда под классом подразумевается сущность, где описывается семантика объекта, а под инстансом - собственно объект со своим индивидуальным состоянием, который в отношении этого индивидуального состояния описанную классом семантику исполняет. В случае использования Object.create о таком не может идти и речи, потому что отношения наследования являются частью описания семантики и должны быть определены в "классе" (конструкторе в терминологии мазилы), а Object.create работает с инстансами. Поэтому мои мешки с тонером для лазерных принтерав черным-черны, а аргументы, факты и доводы на сайте мазилы неправильны.
>> No.37221 Reply
>>37220

Парень, я прочитал последнее предложение в этом посте, и у меня возник вопрос - абсолютно серьёзный, без подколок и прочего. Как называется та трава, с которой тебя так штырит?
>> No.37222 Reply
>>37221
> Как называется та трава, с которой тебя так штырит?
Она называется "ньюфаги не знают мемов", молоденький врунишка.
http://knowyourmeme.com/memes/your-argument-is-invalid
>> No.37223 Reply
>>37222

(почесал бороду, вспомнил свои пять лет на бордах) Мне кажется, ты что-то неправильно понял. Ещё мне кажется, что "мешки с тонером" - это уже вне области мемов и из области чистой наркомании. Ещё мне теперь кажется наркоманским вообще весь пост - не из-за содержания, а из-за твоей манеры изъясняться. Про наезды на CoffeeScript я вообще молчу.
>> No.37224 Reply
>>37223
> Про наезды на CoffeeScript я вообще молчу.
Напрасно. Ведь обсуждение меня в отличие от обсуждения "наездов на кофескрипт" для окружающих не представляет никакой ценности.
>> No.37225 Reply
>>37220
Ну создал ты "инстансы". Два инстанса. И тут кто-то в один добавил новое поле и убрал два старых. И что? Твои инстансы поехали, больше это не инстансы. Ты можешь и на Си писать по методологии ООП с классами и инстансами. От этого Си не станет объектно-ориентированным. И классы в жс от этого не появятся.

А ежели я пишу банальное
$(".owl-carousel").owlCarousel({
    autoPlay : true,
    singleItem : true,
    transitionStyle : "fade"
});
то тут я подаю на вход методу owlCarousel объект, определённый с помощью литерала. Такие литералы на каждом шагу в реальном жс. И объясни мне на милось, инстансом чего именно этот объект является? А? А в реализации метода можно ведь и отнаследоваться от него между прочим.

жс-кодер обезумел, сумеешь ли ты остановить его!
function owlCarousel(options) {
    var wtf = Object.create(options);
}
Короче говоря, здесь нет инстансов, объекты сами по себе.
>> No.37226 Reply
File: Снимок-экрана-2014-02-01-в-21.15.17.png
Png, 10.75 KB, 298×37 - Click the image to expand
edit Find source with google Find source with iqdb
Снимок-экрана-2014-02-01-в-21.15.17.png
>>37225
> Ну создал ты "инстансы".
И суть в том, что при их создании не пришлось прописывать их отношения наследования, не пришлось вообще даже думать о них. То есть налицо абстракция, которой при Object.create нет.
> И тут кто-то в один добавил новое поле и убрал два старых.
Ну, требовать какой-то защищенности от жс вообще абсурдно, не по эту душу он делан.
> От этого Си не станет объектно-ориентированным.
К чем здесь это? Ведь русским по оранжевому выше было писано, что жс ориентированным на что-либо языком вообще не является.
> И классы в жс от этого не появятся.
Конечно не появятся, ведь они оттуда никуда и не пропадали.
> И объясни мне на милось, инстансом чего именно этот объект является?
см. картинку
> Короче говоря, здесь нет инстансов, объекты сами по себе.
А options это что по твоему?
>> No.37228 Reply
>>37224

Чего там обсуждать? На тему "JS vs CS" ничего нового с 2009-го года не придумано. Первые чего-то балаболят про "это закос под Ruby/Python/Scala/Haskell/C++/Brainfuck/ассемблер PDP-11", "я не понимаю, в чём смысл менять скобки на отступы", "просто поменять синтаксис мало, вы должны были привинтить ещё async, эмулятор x86, интерфейс для управления ядерными ракетами и руководство про препарированию мышиных мозгов". Вторые просто пользуются, и им по кайфу. CoffeeScript - это один из лучших языков программирования. Если кто-то этого не понимает - ну не понимайте, ёп, мне-то что.
>> No.37229 Reply
>>37228
Похоже тебе никак не становится понятно. Обсуждаться должны наезды на кофескрипт, а ты все наезжающих и наезжаемых пытаешься обсудить.
>> No.37230 Reply
>>37229

Да мне-то как раз всё понятно, это тебя всё никак не отпустит. Мне глубоко наплевать и на наезды, и на наезжающих, и на наезжаемых (ещё одно наркоманское словечко). До лампочки мне вся эта движуха. А вот наркоманов потыкать - это всегда интересно, они порой такие перлы отмачивают, что просто диву даёшься.
>> No.37231 Reply
>>37226
Про Object я запамятовал. Мог сразу напомнить про него.
>> No.37232 Reply
>>37231
Но всё равно называть объекты инстансами объекта кажется странным.
>> No.37237 Reply
>>37232
Ну в этом есть правда. Говорю же, это особенность динамических языков. Вот в джаве, наверное, или в С++ понятно, что класс это класс, а объект это объект - множества этих сущностей не пересекаются. А в динамических все объект - и класс и инстанс. Плюс люди привыкли называть инстансы объектами, что вносит дополнительную путаницу.

Точно такая же картина со структурами данных - в паскале, си, с++ отдельно есть вектор, есть массив, есть очередь, есть словарь. А в жс - у массива можно устанавливать кастомные ключи и итерировать по ним. В питоне точно такая же картина - у массива есть методы стека и списка. Структуры данных сделаны максимально универсальными, а их свойства "размазаны".
>> No.37275 Reply
>>37220
> Плюс не сделали каких-нибудь асинков на уровне языка, получается непонятно, зачем его применять. Чтобы {} менять на отступы, а this на собаку?
А еще он не заставляет работать выходной жыэс быстрее. Ну не педики ли, а?
По факту, кофе только предоставляет только сахар плюс немного всяких защит по мелочи. Кодить на нем куда удобнее, чем на жыэсе. Его никто и не позиционирует иначе, чем удобную ручку к тому камню, коим ты делаешь себе хижину. Ну кроме норкоманов вроде тебя, которые к тому же его не используют. Но кому какое дело до наркоманов за пределами борд?
>> No.37278 Reply
Что если я замечу, что если есть функциональность, оптимизирующая жс и есть функциональность переделывания его синтаксиса, то нет причин прибивать их друг к другу гвоздями? Если бы у создателей cf были оптимизации, они бы их выпустили отдельно, чтобы все могли пользоваться, а не только те, кто программируют на cf. Или я чего-то не понимаю?
>> No.37279 Reply
>>37278

Всё правильно понимаешь.
>> No.37286 Reply
>>37275
> Его никто и не позиционирует иначе, чем удобную ручку к тому камню, коим ты делаешь себе хижину.
Все правильно, поэтому и было сказано, что это недоделка. Не что-то абсолютно плохое и ненужное, а недоделанное хорошее.

А вот по поводу камней - это неправильно сказано. Яваскрипт - это хороший крепкий молоток, а кофескрипт - это бумажечка, которой некоторые держат гвозди из-за того, что часто промахиваются и попадают себе по пальцам.
> Что если я замечу, что если есть функциональность, оптимизирующая жс и есть функциональность переделывания его синтаксиса, то нет причин прибивать их друг к другу гвоздями?
Это зависит от того, что ты хочешь достигнуть. Если оправдать девиз "It's just javascript" или скажем обеспечить некую интероперабельность между исходниками на разных языках, то конечно не стоит прибивать. В противном случае, если есть возможность сделать специальную удобную нотацию для асинхронных вычислений, то почему бы не сделать ее, ведь это в пределах совершенно типовых возможностей, которыми обладает автор нового языка программирования.

Впрочем с другой стороны, авторов кофескрипта можно понять, в то время когда он был написан асинхронные библиотеки только в пеленках были и было непонятно, какие выиграют, а какие проиграют. Поэтому и не получилось у них устроить что-нибудь подобное.
>> No.37287 Reply
>>37286
Тогда наверное недоделкой его не стоило называть, ведь бумажечка это не недоделка, а вполне хорошее вспомогательное средство при забивании гвоздей.
>> No.37289 Reply
>>37286

Наркоман, уйди из треда.
> кофескрипт - это бумажечка
Тогда JS - это бумажечка для ассемблера.
> в то время когда он был написан асинхронные библиотеки только в пеленках были и было непонятно
Было вполне понятно, потому что и в браузерах окружение событий-ориентированное, и Node.js (который уже существовал) был построен весь вокруг идеи асинхронного I/O.

Ты ни черта не понимаешь в обсуждаемой теме, а в голове у тебя туман.
>> No.37293 Reply
>>37289
> Тогда JS - это бумажечка для ассемблера.
Неправда, в отличие от ассемблера яваскрипт избавляет разработчика от множества инфраструктуропроблем, начиная с распределения памяти, продолжая конвенциями вызова и заканчивая возней с низкоуровневыми форматами данных и abi. Он даже некоторым образом избавляет от возни со сторонними API, потому что API в яваскрипте единственное - то, что дает ему браузер. Все стороннее делается через по крайней мере HTTP, что уже большой плюс.
> Было вполне понятно, потому что и в браузерах окружение событий-ориентированное, и Node.js (который уже существовал) был построен весь вокруг идеи асинхронного I/O.
Это проблема асинхронности давно была понятна. А вот решения ее наметились позже. Async.js имеет первый коммит May 13, 2010, JQuery.defer тоже появилось где-то в 2011 году.
>> No.37295 Reply
>>37286
> > Его никто и не позиционирует иначе, чем удобную ручку к тому камню, коим ты делаешь себе хижину.
> Все правильно, поэтому и было сказано, что это недоделка.
Ручка - вполне себе законченный продукт. Да, она немыслима без камня в данных терминах. Но тот же JS немыслим без JS-движка, etc.
> Яваскрипт - это хороший крепкий молоток, а кофескрипт - это бумажечка, которой некоторые держат гвозди из-за того, что часто промахиваются и попадают себе по пальцам.
Когда ты наконец-то решишь отказаться от тех странных суеверий, что витают в твоей голове норкомана и попробовать использовать CS, ты заметишь, что защита от промахов по пальцам - это так, приятное дополнение. Настоящее же преимущество CS - удобство и краткость. Там, где у тебя выйдет 1000 строк кода, я обойдусь 100. Ты за день выполнишь три тикета, я - 30. Ты за день заработаешь 1000р., я за день заработаю 10000р. + еще успею поспать до обеда (бесценно). Ты будешь мыть полы где-нибудь в Сомали, я же в это время буду отдавать приказания своим верным военам, пока стройные няшные азиатки будут обмахивать меня и подносить к моим устам мороженку.
>> No.37297 Reply
>>37293
> Неправда, в отличие от бла-бла-бла-бла
Про то, что незачем пытаться прикрутить к скальпелю кувалду, я уже всё сказал.
> имеет первый коммит May 13, 2010, бла-бла-бла
То есть все четыре года разработки авторы CoffeeScript отвергали предложения дополнить язык свистелками и перделками только потому, что в 2009-м году их не было. Разупорись уже.
>> No.37300 Reply
>>37295
> Настоящее же преимущество CS - удобство и краткость
> Ты будешь мыть полы где-нибудь в Сомали, я же в это время буду отдавать приказания своим верным военам, пока стройные няшные азиатки будут обмахивать меня и подносить к моим устам мороженку.
Все бы хорошо, игемон. И тому непонятливому куну coffeescript был бы сразу понятен. Только вот переписывая код на своем языке ты не заметил ошибку с throw. В контексте этого легко понять, что свободное время до обеда было бы у кого-то другого, но не у тебя.
>> No.37301 Reply
>>37300
> переписывая код
А зачем что-то переписывать? Они могут прекрасно существовать в одном проекте.
>> No.37303 Reply
>>37301
> А зачем что-то переписывать? Они могут прекрасно существовать в одном проекте.
Имелся ввиду код того непонятливого куна, спрашивавшего про наследование. Он ниже был переписан на кофескрипте, с ошибкой с throw. Конкретно при возникновении исключения, отсутствует место, где его можно отловить.
>> No.37304 Reply
>> No.37305 Reply
Собственно, если подробнее о том, как происходила вся эта заваруха.

Сначала появился некий web 2.0, который в отличие от 1.0 начал общаться с сервером без перезагрузки странички. Так как тредов в яваскрипте не было, то все общение вынуждено было быть асинхронным, реализованным на каллбаках. Оно и раньше было асинхронным конечно, но раньше и программки на яваскрипте были маленькие, там ничего не представляло затруднений. А вот при асинхронном общении с сервером ситуация поменялась - появились различные цепочки запросов/ответов, связанные некоей нетривиальной логикой. Родился калбачный ад ( http://callbackhell.com )

Потом появилась jQuery. Она проблему асинхронности в общем виде не решала, но очень упрощала создание анимации на яваскрипте, можно было писать
messageBox.show().delay(4000).hide().
что всем понравилось.

Потом вышла node.js и яваскрипт пришел в серверсайд, проблема еще больше обострилась. С этих пор, насколько позволяет судить память, и началось развитие асинхронных библиотек. Сначало это были всякие копипасты с других языков, вроде http://thechangelog.com/do-simple-async-javascript-library/. Потом появилась async.js, и наконец обещания ( http://blog.parse.com/2013/01/29/whats-so-great-about-javascript-promises/ ), которые на сегодняшний день есть в JQuery, в ангуляре и находятся на вершине популярности. Это если про библиотечки.

Под яваскрипт также написано несколько языков, пытающихся решить проблему некрасивого асинхронного кода. Из известных мне - это iced coffee script и elm. С ними все сложнее, ведь язык лочит код на разработчика гораздо сильнее чем библиотека, поэтому предпочтение отдается библиотекам.
>> No.37306 Reply
>>37297
> То есть все четыре года разработки авторы CoffeeScript отвергали предложения дополнить язык свистелками и перделками только потому, что в 2009-м году их не было.
Да нет, не поэтому. Потому что эти библиотеки поддерживаются и в кофескрипте и потому что возникает риск нарушения совместимости между версиями языка, что является очень серъезной угрозой.

Толку от введения в язык дополнительных конструкций в том, что при этом стандартизируется способ решения неких задач - и, например, легче понимать код, написанный другими разработчиками. Или можно применить какие-нибудь интересные оптимизации. А если вводить их в середине развития языка, то и совместимость нарушишь и ничего не стандартизируешь.
>> No.37309 Reply
>>37300
> Только вот переписывая код на своем языке ты не заметил ошибку с throw.
Чини детектор, ты меня явно с кем-то путаешь. Может, тебе все-таки стоит завязывать с веществами?
>>37303
И таки я пролистал тред и посмотрел, о чем ты. К сожалению, даже будь я тем, с кем ты меня путаешь, твой аргумент все равно инвалид, т.к.:
1)Непонятливый кун не просил детектить ошибки по исключениям и их ловле.
2)Есть случаи, когда ловить исключения большого смысла нет. Как-то: ошибка, несовместимая с дальнейшей работой приложения (использование в работе), тестирование работы исключений (учебные цели), etc.
>> No.37312 Reply
>>37309
Это не отменяет того, что наличие свободного времени от косметических улучшений в синтаксисе языка зависит мало.
> 1, 2
Беспомощно.
>> No.37313 Reply
>>37306

Ещё раз: не надо прикручивать к скальпелю кувалду. Хватит мне доказывать, что надо.
>> No.37314 Reply
>>37312
> Это не отменяет того, что в моих мокрых фантазиях наличие свободного времени от косметических улучшений в синтаксисе языка зависит мало.
Ну а тем временем в реальности...
> Беспомощно.
А куда подевались развернутые, полные аргументов норкомана ответы? Ах да, я и забыл, что у тебя в сутках всего 8 часов свободного времени. Бедняжечка, мне тебя так жаль. Ну да ладно, не буду тебя мучить и заставлять надумывать новые бредни в попытках оправдать право на существование твоей несколько несовместимой с реальностью точки зрения. Лучше пройду-ка я в опочивальню, дабы засыпать под урчание своих котиков.
>> No.37315 Reply
>>37313
> скальпелю кувалду
Сравнение некорректное. Поддержка асинхронных вычислений в языке, область применения которого подразумевает большое количество таких вычислений, это нечто желанное, рациональное. В отличие от того, что ты пытаешься тут навязать.
> Хватит мне доказывать, что надо
Но ведь тебе никто ничего не доказывает, а лишь объясняют. В частности в >>37306 объясняются возможные мотивы тех или иных поступков авторов языка.
>> No.37316 Reply
>>37314
> А куда подевались развернутые, полные аргументов
На чужой лоток не разевай роток, маленький жадина. Спокойной ночи.
>> No.37326 Reply
>>37315
> ты пытаешься тут навязать
Это ты пытаешься тут навязать. Человек, который не понимает, зачем нужен CoffeeScript, рассказывает всем, каким он должен быть.
> Сравнение некорректное
По-моему, отличное.
>> No.37364 Reply
В JavaScript в браузерах запилили многопоточность, по идее настоящую. Веб воркеры. Но в них нет доступа к ДОМ-дереву. Но можно слать AJAX-запросы. И тут jQuery проштравилась по ходу, я так понял. Их обёртки аякса в веб-воркерах не работают.

Задача стоит дёргать пхп-скрипт, который должен делать муторную работу по парсингу. Он делает часть работы и жс должен периодически по завершению его очередного запуска отчитываться и запускать его снова. Стал делать это в отдельном веб-воркере, чтобы цикл вызова скрипта не подвешивал страницу. И тут мне jQuery в ногу и выстрелил.

Короче, придётся же юзать другую либу терепрь для аякса в веб-воркерах. Что посоветуете?
>> No.37368 Reply
>>37364
> чтобы цикл вызова скрипта не подвешивал страницу
А что мешает на колбэках сделать? Не очень удобно, конечно, но всё же.
>> No.37383 Reply
>>37368
Написать примерно код можешь? Я вижу только способ с рекурсией, где колбек завершения аякса вызывает аякс ставя себя как колбэк аякса. Не хотеть программный стек наполнять.
>> No.37384 Reply
>>37383
Алсо, кстати, я заметил, что все в основном к веб воркерам относятся с больими сомнениями, вплоть до презрения. Вообще сложно инфу искать. пхп-бобуины в своём репертуаре
>> No.37388 Reply
>>37383

Асинхронные операции стек не используют.
>> No.37390 Reply
>>37388
Как тогда будет рекурсия работать?
>> No.37391 Reply
Братишки, помогите, пожалуйста. Второй день втыкаю как сделать лучше. Суть вот в чем, есть удаленный сервер, на нем висит скрипт а-ля ScrapBook, только сохраняет мне, а не дяде из ФСБ. Ну и планирую заделать вырезку рекламы, сохранение в пдф и так далее. Если надо кому, то допилю до нормально состояния и выложу. Короче, задумка такая — с помощью Custom Button нужно передать на скрипт текущий урл. У меня два варианта — сокет и как-нибудь типа http://server.com/http://dobrochan.com/s/index.xhtml. Проблема в том, что в JS я совсем зеленый. Сейчас у меня там висит сокет, но я так и не понял как из браузера отослать ему текущий адрес. В общем, посоветуйте-помогите, а я закончу и выложу для всех.
>> No.37397 Reply
>>37390

Так и работает, без стека. Тебе подробно объяснить?
>> No.37400 Reply
>>37397
Да, объясни подробно. При увеличении глубины, точки возврата в предыдущие вызовы всё равно будут где-то храниться. Выйдет что-то типа структуры в 1000 элементов, если будет 1000 рекурсивных вызовов.

Ну и плюс рекурсия будет выглядеть quirky, не оправдано ничем её применять.
>> No.37403 Reply
Вот гуглишь ты такой либы для жс. А тут:
http://javascriptlibraries.com/
http://bajax.berlios.de/
Этот ЖС-код!
>> No.37409 Reply
>>37400
Рекурсия же идет через браузерный евент-луп, а значит стек будет релаксироваться (сбрасываться).
>> No.37411 Reply
>>37409
Блин, точно, я протупил. Да это ж вообще не рекурсия. Или рекурсия. Блин, надо больше почитать об устройстве колбэков. Но всё равно код странный выходит, мне кажется.
>> No.37470 Reply
Где в тонкостях расписана реализация аякса в браузерах? Чому асинхронные аякс-запросы, запущенные одновременно хоть и работают как будто параллельные, асинхроно, завершаясь каждый раз в разном порядке, но не дают никакого прироста производительности за счёт параллельности? Они вообще робят параллельно? А веб-воркеры запросто дали многократный прирост. И запуск через айфреймы тоже. У меня в голове каша.
>> No.37490 Reply
>>37470
А с чего бы green threads должны увеличивать производительность? Они совсем не для этого нужны.
>> No.37491 Reply
>>37470
Вообще в браузерах многопоточность примерно такая же как в node.js: написанный тобой код исполняется строго в 1 потоке, но в процессе своего выполнения он может обращаться к асинхронным IO-вызовам (в случае браузера это XHR-запросы в основном), которые как раз выполняются параллельно - либо раскидываются по пулу потоков, либо направляются в какую-либо более низкоуровневую штуку вроде libev.

Чтобы браузер не превращался в DoS-машину у него есть ограничения на число соединений. Скорее всего это ограничение проставляется на тред и ты в него упираешься. Или, если там сделан вариант с пулами потоков, то ты просто в размер пул упираешься и все.

Создавая айфрейм ты создаешь новый ДОМ документ, а стало быть и новый тред со своей отдельной машинерией. И это ограничение обходишь. С веб-воркерами ситуация аналогичная.
  
>>37490
"Green-thread"'ами как раз таки производительность увеличивается неплохо. И грин-тредами в браузерах как раз таки и можно назвать веб-воркеры.
>> No.37494 Reply
>>37491
> "Green-thread"'ами как раз таки производительность увеличивается неплохо.
Какая производительность?
IO? Может быть иногда. Вычислений? Не все VM могут раскидывать зелёные треды по ядрам.
>> No.37495 Reply
>>37491
> Скорее всего это ограничение проставляется на тред и ты в него упираешься.
Ограничение равно одному треду, судя по тому, что сами по себе асинхронные аякс-запросы без воркеров вообще никакого ускорения не дают, то есть там нет и двух потоков. Нелогично.
> И грин-тредами в браузерах как раз таки и можно назвать веб-воркеры
Документации заверяют, что потоки нативные, на уровни оси. Вот мозила:
https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers
> The Worker interface spawns real OS-level threads
>> No.37496 Reply
>>37494
P.S. Я не занимаюсь вебнёй, так что это возглас с дивана.
>> No.37497 Reply
>>37494
> IO? Вычислений?
И того и другого, в основном за счет того что рантайм языка имеет больше информации о том, что он исполняет. В самых удачных случаях, оверхед гринтредов приближается к оверхеду кооперативной многозадачности - там где только счетчик команд хранить надо.
> Может быть иногда.
> Не все
О панацее речи и не шло. Везде есть удачные и неудачные реализации.
>> No.37498 Reply
>>37497
То есть, скажем, матрицы на js перемножаются быстрее в нескольких зелёных тредах внутри одного нативного? Это какая-то особая магия.
>> No.37499 Reply
>>37498
1) В жс нет зеленых тредов, по информации от >>37495. Говорить не о чем. Вот в хачкеле можешь попытаться.
2) Ты путаешь кванторы. Утверждалось, что зеленые треды неплохо подходят для увеличения производительности. Это подразумевает, что существуют реализации зеленых тредов, которые эту самую производительность увеличивают. Говоря "скажем", ты подразумеваешь, что "все реализации зеленых тредов увеличивают производительность, поэтому я могу взять любой пример, например яваскрипт (в котором эти треды якобы есть)".
3) Увеличение производительность достигается не единственным путем раскидывания параллельных задач по ядрам. Вообще-то зелеными тредами в основном борются с большим оверхедом нативных и вытекающими оттуда накладными расходами на планирование и переключение.
>> No.37500 Reply
>>37499
> 1) В жс нет зеленых тредов, по информации от >>37495.
Я написал про веб воркеры в этом посте. Как работают аякс-запросы, я понятия не имею. Человек выше сказал, что это они зелёные. Или я не так его понял.
>> No.37503 Reply
File: Снимок-экрана-2014-02-09-в-12.20.02.png
Png, 15.54 KB, 631×154 - Click the image to expand
edit Find source with google Find source with iqdb
Снимок-экрана-2014-02-09-в-12.20.02.png
>>37495
Че-то у тебя не так. Смотри вот сервер. Специальный, задерживающий каждый ответ на 1 секунду, чтобы считать удобно было

http://paste.org.ru/index.pl?5qiq0p

вот клиент

http://paste.org.ru/index.pl?eqiiog

Результаты на картинке. Как видно браузер троттлит запросы, но налицо ускорение в ~5 раз по сравнению с последовательным запрашиванием.

Может у тебя бутылочное горлышко не там, где ты возюкаешься с IO а в обработке запросов, которая ведется в одном потоке?
>> No.37504 Reply
>>37503
Абсолютно точно - нет.
>> No.37505 Reply
Чё-то я ничё не понял, как это запускать? php-скрипт заранее запустить, что ли? Куда пихать код и как назвать файлы?
>> No.37506 Reply
>>37505
Тут нету поп скрипта. Сервер для node js после того как его запустишь проходишь по адресу локалхост:1337 открываешь консоль в браузере и копипастишь туда клиент. После этого можешь начать вызывать функции что на картинке
>> No.37507 Reply
>>37503
А! Тьфу! Я забыл, что внутри колбэка аякс-запроса у меня бесконечный цикл сидит, который дальше мотает синхронные аякс-запросы...
>> No.37515 Reply
У меня тут завалялось пятое издание носорогобука, оригинал аж в 2006 году был.
Думаю покурить его, а потом полирнуть пдфкой шестого издания. Или не взлетит?
Цены на принт удивительные, конечно.
>> No.37517 Reply
>>37515
Не взлетит, 2006 - это юрский период по меркам веба. По крайней мере я б ОЧЕНЬ не советовал. Вообще если ты надеешься на ламповые бумажные издания да ещё на орочьем, то тебя вообще работа кодера не будет никогда радовать.
>> No.37518 Reply
>>37517
Ну как сказать. Бумажные предпочитаю для основательных талмудов, ибо такую большую пдфку я заброшу ещё до середины, мелкие ещё туда-сюда.

А спрашиваю того, что судя по табличке enwiki://JavaScript#Version_history
с каждой версией просто досыпают фич без особых кардинальных изменений. То есть потом можно подтянуть до актуальных версий.
>> No.37519 Reply
>>37518
Ты счишком просто всё воспринимаешь. Дело не только в фичах, но и в том, как надо писать джаваскрипт. Там прямо такой крутой стоящий талмуд? Я прям засомневался в этом. Надо глянуть.
>> No.37520 Reply
Кстати о книгах. Смотрите, какую книгу я нашёл:
http://chimera.labs.oreilly.com/books/1234000000262
Годная? Возможно это то, что я искал, если внутри всё так же хорошо, как в содержании.
>> No.37528 Reply
>>37518
> человек может прочитать большую книгу, но не может прочитать большой PDF
Это как вообще?
>> No.37529 Reply
>>37528
Очень просто - чтение книжки это отдельный конкретный процесс, а не одно из многих окошек в ящике.
Для худлита это не так критично, а для учебной/технической литературы весьма и весьма. Да и просто удобнее, тащемта.
>> No.37532 Reply
>>37529

Лет пять уже читаю книги только на компьютере. Разницы не чувствую. Что я делаю не так?
>> No.37533 Reply
>>37532
Думаешь, что все такие же как ты.
>> No.37534 Reply
>>37529
Можно читалку/планшет/телефон юзать. От экрана, мне кажется, тоже зависит.
>> No.37538 Reply
>>37533

А с другими что-то не так?
>> No.37539 Reply
File: Nigga_b57bed_1129342.gif
Gif, 28.96 KB, 342×409 - Click the image to expand
edit Find source with google Find source with iqdb
Nigga_b57bed_1129342.gif
>> No.37540 Reply
>>37539

No, srsly. С ними что-то не так? Или со мной? Кого больше? От чего это зависит? Просто привычка, и следующее поколение будет читать электронные книжки и не париться? Или листы бумаги вечны? Или ещё как-то?
>> No.37543 Reply
Есть такой кусочек кода, от которого меня тошнит: http://pastebin.com/FmXuZVNG
По идее, то же можно сделать красиво с помощью .reduce или чего-то подобного, только я в ум не возьму, как. Никто с ходу не сообразит?
>> No.37545 Reply
>>37543
Тут нужен не редьюс а фильтр.
>> No.37546 Reply
>>37545
Я думал, тут можно каким-то образом одной функцией вернуть единственный элемент. Ну фильтром сделал, спасибо.
>> No.37551 Reply
>>37543
А я бы оставил как есть. Ибо http://jsperf.com/reduce-vs-loop/2
>> No.37552 Reply
>>37551
Ты бы еще посмотрел что этот код делает, оптимизаша.
>> No.37553 Reply
>>37552
На что намекаешь? На то, что искомый элемент будет чуть ли не первым при поиске? А если последним (скажем миллионным)?

Кусок кода вырван из контекста и фиг его знает где он применяется - так что лучше оставить его максимально быстрым.
>> No.37556 Reply
>>37553
Да нет это вполне понятный кусок кода из ангулара и судя по имени lines он меняет пропертя неким визуальным элементам, так что на скорость итерирования можно забить. Впрочем пусть автор кода расскажет.
>> No.37562 Reply
>>37556
Да, их мало, и функция запускается редко.
> меняет пропертя неким визуальным элементам
Вот, кстати, с этим у меня связан очень постыдный баг и вопрос, раз уж нарвался на знакомого с энгуляром.
На самом деле, lines - массив, возвращаемый ресурсом, и на отдельных line иногда выполняется .$save, но видишь, я не знаю, как ее избавить от .open, относящейся только к визуальной части конкретного представления, потому что в ngRepeat мне нужны именно lines.
>> No.37617 Reply
>>37562
Ох, не заметил break в твоем коде. Тогда тут вообще логичнее всего while бы смотрелся, хотя если ты привык к функциональной композиции, то почему бы и нет? В любом случае редьюс тут не очень хорош, язык-то не такой, где из него профиты можно извлечь.
> Вот, кстати, с этим у меня связан очень постыдный баг и вопрос, раз уж нарвался на знакомого с энгуляром.
Кинь кодом, для меня слишком абстрактно звучит.
>> No.37619 Reply
>>37617
Что-то в таком духе http://pastebin.com/hsTBxLcB Короче, вопрос, подозреваю, в том, как вместо lines в ng-repeat использовать какие-то вызуальные объекты, но данные оттуда все равно сохранять в lines.
>> No.37644 Reply
>>37619
> http://pastebin.com/hsTBxLcB
> я не знаю, как ее избавить от .open, относящейся только к визуальной части конкретного представления
Разве это неправильно? Контролеры же как раз и должны контролировать конкретные визуальные представления? Или твой transForm шарится между разными представлениями? То есть непонятно, где у тебя тут должен быть обобщенный код. По-моему ок, но у меня еще мало опыта в ангуляре.
>> No.37812 Reply
File: images_download_attachments_29004883_tistudio_arch.png
Png, 112.51 KB, 800×906 - Click the image to expand
edit Find source with google Find source with iqdb
images_download_attachments_29004883_tistudio_arch.png
>>31938
Есть тут люди пробовавше писать приложения на Titanium Appcelerator? Неужели панацея?
>> No.38695 Reply
Если делать игру на js+canvas или js+svg, какой стек технологий подойдёт? Я имею в виду фреймворки, либы, сервер-сайд язык, возможно тулзы. Стоит осваивать веб-сокеты и нод.жс?
>> No.38696 Reply
>>38695
Алсо, может сейчас js/html соперничать с флешом? В плане производительности.
>> No.38697 Reply
>>38696
Ну квейкоту всякую запилили, значит может.
Есть орейлевская книжка графика на жс, вроде хвалят, хотя там и часть левака есть.
>> No.38698 Reply
>>38697
Просто пипец. Я о казуалках. Я всё равно рисовать не умею. Меня интересовало, на чём удобнее.
>> No.38699 Reply
>>38698
js/html будет только расти, а флеш уже медленно умирает, так что выбор очевиден.
>> No.38700 Reply
>>38699
Я говорю, какие фреймфорки стоит использовать для организации кода? Какие либы для АПИ? В чём конкретно лепить? Ангуляр? Бэкбон? Эмбер?
>> No.38701 Reply
>>38700
Это я тебе не отвечу, я больше бэкэндщик с некоторым опытом гуглопастинга на жс, и планирую переползать на него.
Жди более опытных анонов.
>> No.38702 Reply
>>37812
Он же анально-платный стал совсем, не?
>> No.38704 Reply
>>38702
Всё платно. Время потраченная на порты, поиск багов, написаное кода - это всё тоже платное и весьма анально. Если б можно было бы один раз написать прогу под браузер, андроед и айфон, то это было бы пипец дёшево. Но я как-то не верю, знаете ли.
>> No.38713 Reply
Ананас, я после попытки использовать веб-воркеры(OS-level потоки в js) огрёб целую прорву багов в браузерах. В хроме нельзя делать дочерние веб-воркеры, прорва багов при использовании аякс-реквестов из веб-воркера, часто не фурычат то throw, то console.log, и тем более не робит alert, дебажить очень трудно.

Как дела обстоят с канвасом и веб-сокетами? Там с багами получше ситуация или тоже можно нарваться на кучу неожиданностей и полную нестабильность? Можно игры делать?
>> No.38870 Reply
File: Безымянный.png
Png, 25.07 KB, 465×175 - Click the image to expand
edit Find source with google Find source with iqdb
Безымянный.png
Только начал изучать js.

В чем смысл команды return?

Вот есть функция. В этой функции есть переменная. Это понятно. Но зачем нужен return?

Мне тут примеры показывают, но я так и не понял фишки.

Вот с ретерном:

var addition = add(12, 6);

console.log(addition);

function add(firstNumber, secondNumber)
{
   var total = firstNumber + secondNumber;
   return total;
}

Вот без него:

add(12, 6);

function add(firstNumber, secondNumber)
{
   var total = firstNumber + secondNumber;
   console.log(total);
}

консольлог - это же сепаративная команда, которая никак не зависит от того, что я там внутри функции написал. КОнсольлог отображает переменную. А переменная отображается за счет функции. Зачем тут нужен return?
>> No.38888 Reply
>>38870
> Зачем тут нужен return?
Чтобы не плодить функций с побочными эффектами? Кроме возврата значения, может return прервать выполнение функции в любом месте.
>> No.38903 Reply
>>38870
А теперь представь, что нужно не только console.log, а еще как-нибудь по-другому использовать результат додавания чисел. Второй вариант соснулей.
>> No.38904 Reply
>>38870
Js как первый язык? Очевидно же.
Алсо, есть каноническое разделение на функции и процедуры. Процедура просто выполняет какие-то действия, а функция выполняет действия и возвращает результат.
>> No.38907 Reply
>>38888
> терминология фп
> жс как первый язык
Ты с ним полегче. Вообще я почему-то не верю, что можно нормально учиться кодить, начав с жс. Почти все книги и учебные материалы по жс подразумевают, что ты прекрасно знаешь, зачем нужен return.
>>38870
Подразумевается, что add мог один человек, а запускть её другой, или тот же, но по прошествию времени. Код вызова функции обязан иметь смысл даже без просмотра тела функции. Иначе тебя расстреляют из огнемёта. add не может кидать в лог, она должна складывать или добавлять, ибо она так названа. Плюс у тебя сложение может и не выводиться, а использоваться как-то по-другому.
>> No.38962 Reply
Анончик, есть один юзерскрипт http://pastebin.com/Gb3u9ud4 . Он раньше работал, а теперь нет, хотя если последний блок кода ввожу в консоль, то всё работает. В чём хуйня?
>> No.38968 Reply
>>38907
> > терминология фп
Не обязательно ФП же, в процедурном паскале тоже зачем-то разделяются понятия процедуры и функции.
>> No.38970 Reply
>>38962
Вроде как проблема в live, он депрекейтед и не взлетает. Мне что-то такое попадалось и вроде в этом было дело. Погугли в этом направлении, в общем.
>> No.38971 Reply
>>38968
Функции паскаля могут иметь сколько угодно сайд-эффектов в действительности.
>> No.38972 Reply
>>38970
Можно попробовать старую джКвери.
>> No.38973 Reply
>>38970
Спасибо, разобрался. Заменил на
$(document).on('click', 'a.twitter-timeline-link', function(e) {
>> No.38974 Reply
>>38972
Судя по тому, что из консоли работает, у твиттора есть своя подходящая. Но хз, доступна ли она из юзерскрипта, я не особо понимаю, как оно там взаимодействует.
>> No.38975 Reply
>>38974
Доступна. наверняка. Но лучше используй noconflict.
http://pastebin.com/PGLW8Dga
>> No.38976 Reply
>>38975
Возможно нужно это обернуть в $(document).ready(function(){ })
>> No.38977 Reply
>>38975
Ну это пусть реквестирующий анон пробует, я так, мимопомогаю, ибо вспомнил про этот live.
Возможно, что взлетит даже просто после удаления этой require строчки.
>> No.38998 Reply
>>38977
Я разобрался, заменил live на
$(document).on('click', 'a.twitter-timeline-link', function(e) { >>38976
В userscript это необязательно.
>> No.39042 Reply
>>38998
Дело скорее в делегировании событий. Здесь клик делегирован на всех потомков документа, являющихся a.twitter-timeline-link при клике на документ. Документ то существует сразу, вроде, а сами <a> могут добавляться позже, но событие на них выстрелит. Или что? Они подключаются типа только когда вся страница прогрузится?
>> No.39046 Reply
>>38888
В императивных язычках все грязное. И функции для этого там только нужны.
>> No.39133 Reply
>>39046
> В императивных язычках
Но ведь bacon.js
>> No.39569 Reply
File: ss-(2014-06-19-at-10.50.12)-—-копия.png
Png, 2.07 KB, 209×104 - Click the image to expand
edit Find source with google Find source with iqdb
ss-(2014-06-19-at-10.50.12)-—-копия.png
>>31938
Охайо.
Пишу один userscript. Задача - изменить стиль текста от <div> до первого <br> (пикрелейтед).
Посоветуйте, пожалуйста, как это лучше всего сделать.
>> No.39570 Reply
>>39569
Надо этот текст до этого запилить в какой-то span и прямо его менять.
Ну или регекспом контент дива реплейсить, как быстрохак.
>> No.39571 Reply
А, это юзерскрипт. Ну тогда второй вариант.
>> No.39572 Reply
>>39046
> В императивных язычках все грязное.
Будто в декларативных всё такое чистое.
>> No.39573 Reply
File: -.png
Png, 4.45 KB, 170×27 - Click the image to expand
edit Find source with google Find source with iqdb
-.png
Здравствуйте. У меня 2 глупых вопроса и один глупый, сложный и не обязательный.
1. Как сделать так, чтобы при нажатии на Enter в textarea добавлялось два пробела?
2. Как сделать так, чтобы при нажатии на кнопку добавлялся текст вокруг выделенного текста? Как на пикрелейтед.
3. У меня есть поле ввода текста, а так же кнопка, при нажатии на которую выполняется php код (на этой же странице), который сохраняет содержимое в файл. Есть так же другая кнопка, которая вызывает AJAX(?) скрипт, который берет содержимое поля ввода, кормит внешнему php коду, затем записывает результат в другой блок.
Как сделать так, чтобы и при сохранении содержимое сначала пропускалось через внешний код, а потом сохранялось в файл?
Спасибо.
>> No.39574 Reply
>>39573
> 1. Как сделать так, чтобы при нажатии на Enter в textarea добавлялось два пробела?
Очевидно, что поставить на textarea обработчик keypress события и при нажатии кнопочки с нужным кодом выполнять не действие по умолчанию добавить символ, а своё чегонить.
> 2. Как сделать так, чтобы при нажатии на кнопку добавлялся текст вокруг выделенного текста? Как на пикрелейтед.
Повесить обработчик на событие click. Потом получить выделенный текст http://www.codetoad.com/javascript_get_selected_text.asp и по желанию обработать его как угодно.
> а так же кнопка, при нажатии на которую выполняется php код
Всмысле происходит POST/GET запрос с перезагрузкой страницы? Код php на сервере же. Читнул бы про HTTP.
>> No.39598 Reply
>>39570
>>39571
Спасибо, анон, разобрался почти со всем, кроме одного момента.
У меня есть 2 числа: номер начального символа и номер конечного символа (перед <br>). Как мне впилить туда <span style="..."></span>?

>>39569 - кун
>> No.39599 Reply
>>39598
Не знаю, что там за позиции. Вот примерно что я предлагал.
str = str.replace(/(<div class="ololo">)([^<]*)/, '$1<span class="yoba">$2</span>');
>> No.39600 Reply
Ох лол, это я переусердствовал. Для контента дива будет:
str = str.replace(/^([^<]*)/, '<span class="yoba">$1</span>');
>> No.39602 Reply
>>39600
Круто, я бы до такого не догадался.
Как модернизировать регэксп, чтобы span применялся от спецсимвола, например, @, до <br>? Если у тебя - от начала, до <br>, то как от @ до <br>?
>> No.39606 Reply
>>39602
Замени первый ^ на @.
>> No.39614 Reply
>>39574
Спасибо.
Первое реализовал, но криво, ибо добавлялся текст тупо в начале поля ввода, отказался от этой идеи.
Второе сейчас гуглю, тоже пока выходит не очень, но разберусь, думаю.
> Всмысле происходит POST/GET запрос с перезагрузкой страницы?
Да.
> Код php на сервере же.
А это что-то меняет?
> Читнул бы про HTTP.
Хорошо.
>> No.39680 Reply
>>31938
Привет, анон. Помоги разобраться с аутентификацией в Last.fm из расширения для Chrome. Думаю, расширение можно отнести к Web application, поэтому выбираю эту инструкцию. http://www.lastfm.ru/api/webauth
Пункт 3 вызывает затруднения.
> Once the user has granted permission to use their account on the Last.fm page, Last.fm will redirect to your callback url, supplying an authentication token as a GET variable.
Как мне поймать этот token? Что за callbback url я должен использовать?
>> No.39681 Reply
>> No.39686 Reply
File: 1402744198176.jpg
Jpg, 181.81 KB, 1024×1024 - Click the image to expand
edit Find source with google Find source with iqdb
1402744198176.jpg
>>31938
Анон, у меня с недавних пор появилось ощущение что я мастер javascript-а. Как разрушить это самодовольное убеждение?
>> No.39687 Reply
>>39686
Запили DooM в 1kb кода.
>> No.39691 Reply
>>39690
Подозреваю, что надо проверять локейшн и вынимать токен когда он есть.
>> No.39692 Reply
>>39691
Выглядит костыльно, но похоже что так.
>> No.39694 Reply
>>39686
Никак. Это тебе не кресты с тоннами темной магии.
>> No.39696 Reply
>>39691
>>39692
> Подозреваю, что надо проверять локейшн и вынимать токен когда он есть.
Уже не так. За ночь всё поменялось (или починилось). Теперь я не могу понять, где брать токен. Раньше всё было как в спецификации - происходил редирект на callback_url, который является ссылкой на ресурс расширения, и в строке url выдавался ответ вида http://chrome-extension//xxx/?=token
Теперь сайт так явно не редиректится на этот ресурс, а вставляет свою заглушку вида http://www.lastfm.ru/api/grantaccess. При обращении к http://chrome-extension//xxx/, ничего не появляется. Что ещё можно почитать?
В интернете все используют готовые библиотеки. А я был бы рад их использовать, но не знаю как из-за политики безопасности.
>> No.39697 Reply
>>39696
Oh shi~ оно опять работает как прежде. Этот ваш ластик это что-то с чем-то.
>> No.39698 Reply
File: -.txt
Txt, 0.00 KB, 0 lines - Click the image to get file
view edit
-.txt
>>39686
Можешь сказать, почему массив hotkeys не изменяется функцией setCookie?
>> No.39699 Reply
>>39698
Не мог на пастбин или куда-нибудь выложить, чтобы хотябы подсветка синтаксиса была. Чё так дико?
>> No.39700 Reply
>> No.39701 Reply
File: dDKZxZ73AYw.jpg
Jpg, 44.03 KB, 402×604 - Click the image to expand
edit Find source with google Find source with iqdb
dDKZxZ73AYw.jpg
>>39700
Когда ты пишешь
> value = encodeURIComponent(value);
Указателю value присваивается адрес нового value encodeURIComponent(value). Соответственно старый value не меняется.

я не он >>39699
>> No.39702 Reply
>>39701
Можно общие черты заменить конкретными величинами из кода? Не понимаю.
>> No.39703 Reply
>>39702
Всмысле? Что конкретно непонятно.
>> No.39704 Reply
>>39700
А это не тебе ли я помогал с зачёркивалкой?

Во-первых: почему куки а не localStorage? Настоятельно рекомендую забить на печеньки и юзать localStorage.

Во-вторых: JSON ёлки палки! Используй его!
> почему массив hotkeys не изменяется функцией setCookie?
Потому что внутри этой функции с массивом hotkeys ничего не происходит.

В контексте setCookie есть некая переменная value, которая при вызове как бы указывает (но не совсем) на внешнюю переменную hotkeys. Потом ты этой переменной value присваиваешь другое значение (результат encodeURIComponent) и она от этого окончательно теряет связь с внешней переменной hotkeys.

Если тебе очень надо, заставь setCookie возвращать новое значение и выполняй её вызов так:
hotkeys = setCookie("hotkeys", hotkeys);
Ну и ещё: переосмысли этот кусок кода. Серьёзно. Ужасно сделано. Ты потом проклянёшь всё, когда будешь с ним возиться дальше.
>> No.39705 Reply
>>39703
Ниже более подробно уже объяснили, спасибо.
>>39704
> А это не тебе ли я помогал с зачёркивалкой?
Думаю, нет.
> почему куки а не localStorage? Настоятельно рекомендую забить на печеньки и юзать localStorage.
Я, вроде, попробовал его пользовать, но ничего не вышло. Может, что-то надо подключить?
> Во-вторых: JSON ёлки палки! Используй его!
Я его не знаю совсем.
> Если тебе очень надо, заставь setCookie возвращать новое значение
Но мне надо наоборот в нее записать значение.

Правда, забыл упомянуть один момент: когда куки еще не были проставлены, все сработало. Но, когда они записались, тогда и перестало все записываться.
При этом все работает, если вместо массива простая переменная.

Но, раз уж
> Ну и ещё: переосмысли этот кусок кода.
Тогда лучше пойду возиться с localStorage. Спасибо.
>> No.39706 Reply
>>39705
С localStorage совершенно аналогичная ситуация. В первый раз массив изменился, затем меняться перестал.
>> No.39707 Reply
>>39706
А, может, проблема в том, что после сохранения hotkeys более не массив?
>> No.39708 Reply
>>39705
> Я его не знаю совсем.
Другими словами, ты хочешь сказать что совсем не знаешь JavaScript? Печально это.

>>39707
Да. По этому я тебе и предложил использовать JSON.
>> No.39709 Reply
>>39708
> совсем не знаешь JavaScript?
Почти, да. Только самые-самые основы.
Проблему, вроде, решил, только теперь не могу удалить значения, лол.
http://pastebin.com/GeEvTeZt
>> No.39710 Reply
>>39709
Прошу прощения, нашел ошибку, до боли глупая.
>> No.39711 Reply
>>39707
А если точнее:

Внутри setCookie нет ничего, что могло бы тебе дать доступ к переменной hotkeys (опустим пока тот факт, что эта переменная доступна из глобального скоупа). Зато у тебя есть другая переменная, которая есть массив, элементы которого ссылаются туда же, куда и элементы hotkeys.

>>39709
> Почти, да. Только самые-самые основы.
Значит ты знаешь JSON.
>> No.39712 Reply
>>39711
Т.е. конфликт переменных?
Спасибо, в общем, наконец разобрался с localStorage, теперь под него все изменю, а от куки откажусь.
>> No.39713 Reply
>>39712
> Т.е. конфликт переменных?
Нет.

Вроде допёрло как проще объяснить: в параметрах функций передаются не сами переменные, а лишь их значения.

вот так работать не будет:
var myFunc = function(param){
    param = 8;
}

var chislo = 10;

myFunc(chislo);

console.log(chislo); // всё ещё 10
зато будет работать вот так:
var myFunc = function(param){
    param[0] = 8;
}

var massiv = [1,2,3];

myFunc(massiv);

console.log(massiv); // получим [8,2,3]
>> No.39715 Reply
>>39713
Т.е. не переменной присваивал новое значение, а старому значению?
Если и сейчас не прав, до, думаю, я и не пойму. В любом случае, от этого кода отказался.
Добра всем отписавшимся.
>> No.39716 Reply
>>39715
> Т.е. не переменной присваивал новое значение, а старому значению?
Да, можно и так сказать.
>> No.39718 Reply
File: 1398512804_1245227452.gif
Gif, 199.39 KB, 384×384 - Click the image to expand
edit Find source with google Find source with iqdb
1398512804_1245227452.gif
Доброкодер, выручи нуба.

Мне нужно отрисовать анимацию поиска гамильтонова цикла с помощью arbor.js, пока не получается ни того, ни другого, лол.

Суть -- у меня есть объект Renderer, вот такой: http://pastebin.com/X69XNaXG
В нем нужна последовательная анимация обводки некоторых граней каким-нибудь цветом.. если пользоваться методом addselectededge(v1, v2),
то грани подсвечиваются, но без задержки, просто меняют цвет на красный. Если между вызовами поставить паузу, то просто ничего не отрисовывается, пока она не закончится.

Впрочем, черт бы с ней, с анимацией, не так это важно сейчас.

А важно то, что я не представляю как туда засунуть метод для, например, жадного алгоритма, потому что переменная particleSystem почему-то оказывается неинициализирована нигде, кроме методов redraw(), и initMouseHandling() и почему-то получается теребить список граней только внутри этой функции.

Я не понимааааат
>> No.39720 Reply
File: tumblr_mt5rx054kx1r6j7rho1_500.gif
Gif, 566.01 KB, 500×651 - Click the image to expand
edit Find source with google Find source with iqdb
tumblr_mt5rx054kx1r6j7rho1_500.gif
>>31938
Ананасы, смотрите, какая беда. http://pastebin.com/qijT6zbf
В консоли вижу такую картину:
string1: MyText
string2: undefined
Раз на месте string2 переменная string не определена, то как мне вернуть нужную строку с помощью return?
>> No.39721 Reply
>>39720
Стандартный камень же.
Этот блок (коллбек) сработает когда запрос выполнится, а выполнение пойдет дальше сразу, поэтому так.
Погугли javascript callbacks и вникни в эту схему.
>> No.39722 Reply
File: 327e1d60a988e00a217a0313f28efe34.jpg
Jpg, 225.97 KB, 500×500 - Click the image to expand
edit Find source with google Find source with iqdb
327e1d60a988e00a217a0313f28efe34.jpg
>>39721
Спасибо, всё получилось.
>> No.39751 Reply
>>31938
Аноны, как надо написать regexp, чтобы вычленить из строки "http://xxxxxxx/yyy#access_token=TOKEN&expires...." token?
>> No.39752 Reply
>>39751
/access_token=([алфавит токена]+)\&/i
>> No.39753 Reply
>>39752
Спасибо.
>> No.39754 Reply
File: Screenshot-from-2014-07-12-16:07:28.png
Png, 266.14 KB, 811×612 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot-from-2014-07-12-16:07:28.png
>>31938
Анон, я тут Three.js смотрю, и пикрилейтед. Почему оно так все пидорасит?
https://gist.github.com/anonymous/4d067d72cbd4481a08a3
>> No.39755 Reply
Можно ли заделать переход с фейковым рефером с клиентсайда?
>> No.39766 Reply
>>39755
Нет, нужна какая-нибудь уязвимость на том сайте, чей реферер подделываешь.
>> No.39854 Reply
>>31938
Начал учить js, пишу код, но все выглядит как-то коряво и неправильно.
В моей программе появилось много асинхронных запросов, соответственно всё состоит из колбэков и лапши. Каждую ерунду необходимо оборачивать в функцию и запускать из предыдущей функции. Правильно ли это?
var obj = {};
start();

function start(){
      var url = "~~~~";
      get(url, pass); //асинхронный запрос, следующая функция
} 

function pass(){
      obj.key = JSON.parse(this).key;
      request();
}

function request(){
      var url = "http://site" + obj.key;  
      get(url, nextFunction);
}

function nextFunction(){
    
     //.......
}
>> No.39855 Reply
File: nononono-1204080.jpg
Jpg, 135.20 KB, 800×1149 - Click the image to expand
edit Find source with google Find source with iqdb
nononono-1204080.jpg
>>39854
> все выглядит как-то коряво и неправильно.
> В моей программе появилось много асинхронных запросов, соответственно всё состоит из колбэков и лапши
Короткий ответ: научись пользоваться чем-нибудь из разряда jquery promises (jquery deferred), async.js и прочих подобных йоб.

Развернутй ответ: Так происходит, потому что ты подспудно чуешь, что в твоем коде есть повторяющийся фрагмент, но абстрагировать - вынести в отдельную функцию - этот фрагмент не можешь. Твой повторяющийся фрагмент - это асинхронный вызов get, а абстрагировать ты его не можешь, потому что функция в яваскрипте синхронна. В синхронное не запрячешь асинхронное без дополнительных ухищрений.

   Чтобы таки запрятать асинхронное в синхронное, обычно используют специализированные вычислители. Это совсем несложно, для этого нужно представить твой код как пошаговое вычисление, найти в этом вычислении повторяющиеся, достаточно универсальные, шаги и вынести их в вычислитель. Конкретно в твоем коде повторяющиеся шаги - это вызов асинхронной функции с передачей ей каллбака для последующего шага. Вычислитель можно написать по разному, но удобнее и традиционнее это делать объектом, методы которого возвращают самого себя. Это чтобы эти методы можно было выстраивать "паровозиком", как в jquery.

Из твоего кода в результате получится что-то вроде
new Async()
   .then(function () { return '~~~~'})
   .then(function (res) { return JSON.parse(res).key })
   .then(nextFunction)
   .run()

где Async - возможная реализация специализированного вычислителя ( http://paste.org.ru/index.pl?quyha4 ). Названия технологий, перечисленные в кратком ответе как раз таки варианты этих специализированных вычислителей.
>> No.39857 Reply
>>39855
> http://paste.org.ru/index.pl?quyha4
Пример, честно говоря, не понял. var Async = function (){} - вычислитель, то есть, когда ты пишешь .then(function () { return '1'}), то в Async должно что-то передаваться? Вот этот момент непонятный.
>> No.39858 Reply
>>39857
> то есть, когда ты пишешь .then(function () { return '1'}), то в Async должно что-то передаваться?
.then передает в вычислитель куски вычисления, т.е. вычисление при помощи этих методов строится. А исполняется при помощи .run().

Куски вычисления обернуты в функции, потому что специализированному вычислителю самому нужно управлять срабатыванием этих кусков, напиши бы мы просто .then('1').then(async.res+'2') оно бы все сразу вычислилось и ничего бы не получилось.
>> No.39859 Reply
>>39858
> напиши бы мы просто .then('1').then(async.res+'2') оно бы все сразу вычислилось и ничего бы не получилось
Да, я столкнулся с этой проблемой. Но твой код я не понял. Вот что делают строки 9-28?
Всё равно непонятно, что куда передается. Почему ты передаешь return? Какой код запускается, в какую строчку вычислителя передается значение и куда потом идет? Нужен пример попроще или ключевые слова для гугла.

Воспользовавшись данным объяснением http://www.html5rocks.com/en/tutorials/es6/promises/#toc-promisifying-[...]quest , примитивно упаковал свой код и появилось несколько вопросов.
Мой код выглядит так:
get(url)
    .then(JSON.parse)
    .then(function(response){
	obj.key = response.key;
    })
    .then //а тут нужно опять делать асинхронный запрос 
Насколько я понял, моё представление сильно отличается от того, что ты написал в своём примере. В чём отличие?

Как выполнить два асинхронных запроса подряд в данном коде? Упаковать promises в функции и вызывать как было с калбэками? Но от этого, вроде, хотелось изначально уйти.
>> No.39860 Reply
File: Безымянный.png
Png, 17.53 KB, 673×728 - Click the image to expand
edit Find source with google Find source with iqdb
Безымянный.png
>>39859
> Вот что делают строки 9-28?
this.run и this.then - это интерфейс объекта Async, а step - это как раз таки шаг вычислителя. Он получает аргумент из кусков вычисления, вызывает get с этим аргументом, и в каллбаке get'а вызывает следующий шаг. Ифы - это проверки на пустоту для завершения: если вместо данных очередной кусок вычисления передал нам пустоту или больше не осталось кусков, то вычисление заканчивается.
> Всё равно непонятно, что куда передается. Почему ты передаешь return?
   Вычислитель передает куску вычисления данные через аргументы функции, а кусок возвращает данные вычислителю через return. Примерно как на картинке. Общение между вычислителем и кусками вычисления должно осуществляться строго через аргументы функции (funciton (res) ) и return. В яваскрипте это не сказать чтобы особо строгое правило, но в общем случае имеет смысл делать куски вычисления так, чтобы они общались с внешним миром только через аргументы и return. Без фанатизма конечно, если очередной шаг вычисления должен показывать попап на страничке или чего-нибудь рендерить, то ничего не поделаешь.
> Насколько я понял, моё представление сильно отличается от того, что ты написал в своём примере. В чём отличие?
Вычислители разные (специализированные же). Мой неуниверсальный, который только и может, что делать get-запросы, вычислитель promises'ов более универсальный. Судя по твоей ссылке два асинхронных запроса в нем выполняются примерно так:
get(url)
    .then(JSON.parse)
    .then(function(response){
 	    return get(response.key);
    })
    .then(function (response2_result) {
        // Сюда прилетит результат выполнения второго асинхронного запроса.
    })
Но точно утверждать не могу, разбирайся с ним сам, а то будет неинтересно.
>> No.39861 Reply
>>39860
Хорошо, спасибо за помощь.
>> No.39862 Reply
>>39861
Он изучает язык, а вы привязываете его к фреймворку.
>> No.39863 Reply
>>39862
Там этого языка на пару десятков страничек, если не считать браузерной хуиты.
мимо
>> No.39864 Reply
>>39863
Есть книги по JS Крокфорда, там явно больше двадцати страниц.
>> No.39865 Reply
>>39862
К какому?
>> No.39866 Reply
>>39864
Ну это уже всякие паттерны-кукбуки и прочее, что есть для любого языка.
Вот от флэнегана есть карманный справочник, там как раз всё что надо, в отличии от полноформатного кирпича от него же для лошков.
>> No.39868 Reply
>>39865
Я тупанул, ни к какому фреймворку вы его не привязываете.
>> No.39869 Reply
>>39864
> 175 страниц
> одну большую и интересную статью растянули на одну небольшую книгу, запихнув в неё кучу откровенно лишнего.
> Первые главы посвящены грамматике — подробное описание синтаксиса языка
> кажется эти картинки занимают полкниги
> Одна из последних глав, так вообще — просто справочник методов стандартных типов данных
Для меня это выглядит как очередное оверрейтед говно от Известного Разработчика, например.
>> No.39906 Reply
Доебло, почему все тьюториалы и книги по ноду учат джаваскрипту, а не самому ноду, его развёртыванию и пакетам. Да знаю я, что такое колбэк и событие. Ну что за бараны. Что есть получше, почём учить нод?
>> No.39907 Reply
>>39906
В вакансиях пишут, что требуется "опыт работы с Node", просто знание никому не нужны.
>> No.39909 Reply
>> No.39910 Reply
>>39906
Есть много книг, которые не нужно читать от корки до корки. Нужно брать только то, что тебе надо. Ты не умеешь работать с материалом.
>> No.39914 Reply
>>39907
Ты это к чему вообще?
>> No.39916 Reply
>>39914
Это он, видимо, к тому что чем вкуснее вакансия, тем выше требования к опыту, а не знаниям.

Что он этим хотел сказать? Может - "учить бесполезно, набирайся опыта"?
>> No.39934 Reply
>>31938
Господа, как создать сложную структуру данных в js? У меня есть музыканты и песни каждого музыканта: artist, music.
Соответственно, нужно сделать вложенную структуру:
artist1:{
   music1:'',
   music2:'',
   musicN:''
},

artist2:{
   music1:'',
   music2:''
}
Так, чтобы было легко добавлять неограниченное количество позиций, используя переменные.
object[artist + i] = artist; не позволяет создать вложенные структуры.
>> No.39936 Reply
File: artist-container.png
Png, 16.63 KB, 361×332 - Click the image to expand
edit Find source with google Find source with iqdb
artist-container.png
>>39934
Неочень ясно что тебе нужно. Пикрилейтед?
>> No.39937 Reply
>>39936
Не совсем.
var audioContainer = {
   artist_1: {
       track_1:'',
       track_2:'',
       track_N:''
   },
   artist_2: {
       track_1:'',
       track_2:'',
       track_N:''
   },
   artist_N: {
       track_1:'',
       track_2:'',
       track_N:''
   }
}
В коде я полностью заполняю данную структуру. То есть, если у меня 50 исполнителей, то надо будет добавить artist_50.
Заполняю в цикле:
for (var i in count){
    audioContainer["artist_" + i] = artist;
}
Как заполнить треки? То есть, заполнить вложенную структуру?
>> No.39938 Reply
File: js.png
Png, 6.78 KB, 558×91 - Click the image to expand
edit Find source with google Find source with iqdb
js.png
>>39937
А чему у тебя равен artist? Можно ведь просто написать
audioContainer["artist_" + i] = {
track_1: "pokpoksongname1",
track_2: "pokpoksongname2",
track_3: "pokpoksongname3"
};

Или у тебя уже существуют поля track1, track2... track_N? Если так, то пикрилейтед.
>> No.39940 Reply
>>39938
Разобрался. Всё работает, спасибо.
>> No.40003 Reply
Здравствуйте. Подскажите пожалуйста, как сверстать поле ввода текста, как в http://ace.c9.io/#nav=about , но только (в смысле, без богатого функционала) с подсчетом строк?
>> No.40008 Reply
File: scrapbook-saver.js.jpg
Jpg, 75.70 KB, 861×279 - Click the image to expand
edit Find source with google Find source with iqdb
scrapbook-saver.js.jpg
Люди, дайте пинка в нужном направлении - не хватает полшага.
Вот код - сделал пикрелейтед для наглядности - scrapbook (расширения FireFox), который по окончании сохранения страницы показывает всплывающее окно (1). По клику на нём выполняется код (2). Понимание того, что делает что я нагуглил в документации к Mozilla.

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

Я меняю местами (1) и (2) - логично, что должно сработать сразу же загрузка страницы предусмотреным способом - а вот нет. Вместо всплытия окна просто ничего не делается.
Это конечно говорит о том, что ф-цию я нашёл правильно и меняю в том месте где нужно, но ситуация глупая, нужный URI уже в руках (= "chrome://scrapbook/content/view.xul?id=" + data), а сделать с ним ничего не могу и идей нет.

В JS и в расширения FF я влез впервые, до ф-ции добрался тупо grep-ая папку с расширениями, программлю на другом языке. Scrapbook незаменим как раз в том, чтобы сразу редактировать нагугленные сниппеты.
>> No.40009 Reply
>>40008
не думаю, что особо помогу, но попробую.
> Я меняю местами (1) и (2)
в скопе (области видимости), где был (1) не вижу переменной data
> выполняется код (2)
точно выполняется - если вставить вместо loadURL алертик, то алертик покажется?
> нужный URI уже в руках
> открылась сохранённая страница в текущей вкладке
data точно содержит то, что тебе надо? если руками получившую урлу вбить в адресную - все окей? меня, возможно, из-за зашкаливающего старперства, очень смущает использование псевдо-протокола chrome для просмотра страничек.
>> No.40010 Reply
File: scrapbook-saver-complete.bmp
Bmp, 13.47 KB, 866×251 - Click the image to expand
edit Find source with google Find source with iqdb
scrapbook-saver-complete.bmp
>>40009
Чёрт возьми, ты был абсолютно прав, бро: datа существует только внутри ф-ции, а я думал, что она глобальная - поэтому ничего и не открывалось.
Я на свежую голову почитал документацию чуть глубже и сделал всё как надо:
(1) установил срабатывание по показу алерта - теперь есть и оповещение о удачном сохранении, и собственно показ того, что сохранилось
(2) заставил открываться страницу в той же вкладке, а не в новой - это получилось методом тыка.

Спасибо!
>> No.40110 Reply
File: file.jpeg
Jpeg, 918.69 KB, 2755×3858 - Click the image to expand
edit Find source with google Find source with iqdb
file.jpeg
Взлетаем.

Так, привет. Есть кто-то, кто на Нодке писал что-нибудь сложнее хэлловорлда и может пояснить про то, как оно работает?

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

Картинка для привлечения внимания, стыбженная с гелборы говнокодом.
>> No.40132 Reply
>>40110
> Я понимаю, что такое замыкание, но коллбэки исполняются в разных лексических контекстах и в некоторых данные, внешние по отношению к функции, определённой в коллбэке, не определены. В других - определены.
Не совсем понятно. Так замыкание лексического контекста и говорит о том, что внешние данные, которые [лексически] видны в том месте, где написана функция будут замкнуты на нее. Же. Приведи пример контекстов, в которых это нарушается.
>> No.40133 Reply
>>40132
> Так замыкание лексического контекста
Ахх, как ты сложно говоришь.
> Приведи пример контекстов, в которых это нарушается.
Я просто вставлю кусочек кода.
http://pastebin.com/Hkb8zmN8
>> No.40134 Reply
>>40110
Это у тебя будет получатся в любом коде на жс. В том числие и все эти скрипты к браузерам так выглядят. Если ты до этого писал на жс под браузер и не заметил, то это только потому, что пишешь только ну совсем простые вещи и в основном не понимаешь как работает жс. Кроме того замыкания сейчас есть почти во всех современных языках. И каскады колбэков - это более чем нормально. Попробуй программировать на лиспе или хаскеле, там ничего нет кроме каскадов колбэков и вызовов функций друг за другом. Основной принцип функционального программирования - функция есть значение. Ты не описываешь функцию как просто кусок кода и обращаешься к нему как в С. Функция создаётся, когда выполнение кода до неё доходит, если она куда-то присваивается. При этом в момент создания она захватывает значения, которые определены вне неё. В джаваскрипте замыкания ловят все подряд внешние переменные. Посмотри, как замыкания пишутся в С++11 или PHP. Там замыкания ловят только то, что им предписано ловить. От этого картинка станет яснее.
>> No.40135 Reply
File: utena-016_00392633.jpg
Jpg, 79.37 KB, 1024×768 - Click the image to expand
edit Find source with google Find source with iqdb
utena-016_00392633.jpg
>>40133
> Ахх, как ты сложно говоришь.
Это просто я акцент сделать хочу на то, что замыкаются именно лексически видимые переменные (т.е. те, что видны из функции в исходном тексте, не могу понятнее объяснить).
> Я просто вставлю кусочек кода.
> http://pastebin.com/Hkb8zmN8
Тут все должно работать. И работает ведь: http://paste.org.ru/index.pl?mwox7y
>> No.40136 Reply
>>40135
Кстати, коли уж получилось наплодить непонятности, то я добавлю еще, заметив, что в жс лексически замыкается все, кроме this (коротый замыкается динамически, вроде бы).
>> No.40137 Reply
>>40133
//handleXml(body); <--- не работает. А потом handleXml(new xmldoc.XmlDocument(body) Что это вообще было то? body есть и во всех ф-ях, созданных внутри handleXmlRequest. И в каждом обработчике body это строка. handleXml(body) не работает ибо handleXml ожидает принять xmldoc.XmlDocument.

Интерпретатор разбирает ф-ю handleXmlRequest. Джля неё он выделяет контекст выполнения. Замечая body он добавляет её в контекст. По мере своего продвижения он добавляет безымянную ф-ю и опять выделяет джля неё немного личного пространства. В дополнение к этому он даёт этой ф-ии право читать контекст ф-ии handleXmlRequest, поскольку в её контексте эта ф-я родилась. Такаяж фигня и у самой handleXmlRequest. Её внешний контекст стал доступен внутри. И безымянная ф-я внутри неё тоже получила право читать внешний контекст.
>> No.40138 Reply
>> No.40139 Reply
File: file.jpeg
Jpeg, 163.05 KB, 527×750 - Click the image to expand
edit Find source with google Find source with iqdb
file.jpeg
>>40133
Ах да.
Собственно замыкания там нет. Есть переменная, внешняя по отношению к анонимным функциям.
Как я понимаю механизм работы node, на событие регистрируется функция (без выполнения кода). Сам код выполняется в каком-то ином окружении.
Проблема в том, что обе функции зарегистрированы в одном месте и логично было бы ожидать, что обе будут выполняться в одном окружении (обработчика). И я не понимаю. Либо первая функция выполняется в окружении handleXmlResponse (похоже, это тот случай), либо она "захватывает" переменную body с собой. Но если она захватывает, то почему вторая анонимная функция этого не делает? Выходит, они выполняются в разном окружении.

Картинка с Сэйбой прилагается.
>> No.40140 Reply
>>40133
Касательно этого кода, если бы ты создал объект, где боди была бы полем, а функции - методами объекта(полями с колбяками), то всё было бы куда очевиднее. Даже если хорошо знать, как это работает, всё равно чертовня. Мне лично сама идея изменять захватываемые переменные кажется сомнительной.
>> No.40141 Reply
File: file.jpeg
Jpeg, 183.83 KB, 842×595 - Click the image to expand
edit Find source with google Find source with iqdb
file.jpeg
Ладно. Пока я отходил, мне уже настрочили ответ и я его не понял.

>>40134
> Это у тебя будет получатся в любом коде на жс
"Это" что?
> каскады колбэков - это более чем нормально
Спорно. Во-первых, они не добавляют читаемости коду. Во-вторых, стоит проблема передачи коллбэкам значений/получении из них. По крайней мере, у меня. Решать всё глобальными переменными мне не хочется.
> Попробуй программировать на лиспе или хаскеле
NO thanks.
>>40135
> Тут все должно работать
И тут я на свежую голову написал то же самое и заработало. Хм. Чудеса.
>> No.40142 Reply
File: file.jpeg
Jpeg, 226.84 KB, 450×900 - Click the image to expand
edit Find source with google Find source with iqdb
file.jpeg
>>40140
> Мне лично сама идея изменять захватываемые переменные кажется сомнительной.
Ну извини, Марио, твоя принцесса в другом замке. Сначала я пишу максимально простой код (и мне куда проще было бы написать его блокирующим).
>> No.40143 Reply
File: c47e771314aa2a8c51c585f53cecac15e5b8d719.jpg
Jpg, 483.14 KB, 800×1600 - Click the image to expand
edit Find source with google Find source with iqdb
c47e771314aa2a8c51c585f53cecac15e5b8d719.jpg
>>40139
> Собственно замыкания там нет.
> Есть переменная, внешняя по отношению к анонимным функциям.
Это ведь и есть замыкание. Любая ф-я всегда имеет доступ к тому пространству, в котором она создана. Помойму ты попутал this и контексты выполнения.
> Но если она захватывает, то почему вторая анонимная функция этого не делает?
Делает же. Покажи ошибки. У тебя в другом ошибка.

>>40141
> И тут я на свежую голову написал то же самое и заработало. Хм. Чудеса.
Какие там ошибки то были? Может ты в body вместо o поставил о? Хрен разберёшь, кокая буква латинская, а кокая кирилическая.
>> No.40144 Reply
Пользуйте промисы, епта.
http://howtonode.org/promises
>> No.40145 Reply
>>40141
> Хм. Чудеса.
А можешь показать то, что не работало? Или там запикивать придется много?
>> No.40146 Reply
>>40141
> "Это" что?
Куча колбэков с замыканиями в каскадах.
> Решать всё глобальными переменными мне не хочется.
Вообще то тру функциональный стиль подразумевает, что ты опираешься на то, что функции что-то берут и куда-то возвращают. Они по идее должны литься одна в другую. Ты что-то делаешь не так.
> NO thanks.
Джаваскрипт, конечно, не хаскель, но он и нод сильно инспирированы функциональщиной. Нужно отдавать себе в этом отчёт, когда за него берёшься.
>>40142
> Сначала я пишу максимально простой код
И не знаю, как он вообще должен работать и почему не работает. А при чём тут то, что он блокирующий? Это безотносительно параллелизма сомнительно.

Прочёл, что я тебе про объекты сказал?
>> No.40148 Reply
>>40146
> Вообще то тру функциональный стиль подразумевает, что ты опираешься на то, что функции что-то берут и куда-то возвращают.
Это круто, но мне даже нечего сказать. А если и надумаю, у нас будет срач о том, какой должна быть функциональщина.
Хотя мне хочется сказать, что в js функциональщина заканчивается на анонимных функциях, замыканиях и функциях как значениях, которые можно передавать.
> он и нод сильно инспирированы функциональщиной.
Да, я понимаю. Для меня эвент-ориентированное программирование в сильную новинку, да ещё и достаточно низкоуровневое.
> Прочёл, что я тебе про объекты сказал?
Разверни мысль. Честно говоря, до ООП в js я не добрался. Посмотрел, что это похоже на ассоциативный массив с функциями как полями и this вычисляется в его теле в сам объект. Самостоятельно пока ни одного объекта не конструировал, нужды не было.

пишу сумбурно, отвлекают
>> No.40149 Reply
>>40146
> А при чём тут то, что он блокирующий?
При том, что можно писать в обычном стиле. Каждая последующая строка выполняется строго после предыдущей и зависит от полученных результатов. Это гораздо проще и привычней.
> Это безотносительно параллелизма сомнительно.
Да не об этом речь.
>> No.40150 Reply
>>40148
Пытаться изучать нод до изучения синтаксиса жс как такового было глупостью. Вернись на ступень назад на время. Разобраться жс самим по себе не просто. Сейчас у тебя траблы с самим жс, а не с нодом.
>> No.40151 Reply
>>40150
> Пытаться изучать нод до изучения синтаксиса жс как такового было глупостью.
Ноуп. Я не говорил, что не понимаю синтаксис и понятия не имею, откуда ты такое взял. Бэкграунда хватает, чтобы си-подобными конструкциями писать код в процедурном стиле, временами используя замыкания и функции высших порядков. Как работают скоупы в js в чертах, достаточных для понимания того, как использовать замыкания, я понимаю, про особенности типа "подтягивания" функций и переменных осведомлён. Хотя мне претит читать 300 страниц хорошего тысячетомного описания, чтобы побеждать в дискуссиях на имиджбордах, но не писать код.
То есть, определённо у меня есть пробелы, но я предпочитаю их заполнять, натыкаясь на проблемы.
>> No.40152 Reply
>>40151
Это не смешно, никто в 2014 не программирует без ООП, разве что на чистом С на специфичных для него задачах. Без понимания ООП тебе тут нечего делать. Лезть с процедурным стилем на нод - это как пилить гранату.
>> No.40153 Reply
>>40152
ООП в 2014? Да ты же старый пердун, у нас во дворе все котируют только ФП.
мимо
>> No.40154 Reply
>>40152
Окей. I'll dig into it.

Всё это выросло из небольшого замечания о стиле, собственно. И я продолжу, если мне не будет стыдно, запиливать сюда процедурный говнокод.
>> No.40155 Reply
>>40152

ООП на javascrip?

мимокрокодил
>> No.40156 Reply
>>40152
Будто на Няшном нельзя программировать с применением ООП.

>>40155
А что не так? Там очень мощное наследование например. Круче чем в кокихнибудь плюсах.
>> No.40158 Reply
>>40156
> Там очень мощное наследование например.
Ковыряние в хеш-таблицах (не нашел в объекте - посмотри в прототипе) нонче оказывается "мощное наследование".
> Круче чем в кокихнибудь плюсах.
Рор.
>> No.40159 Reply
File: talking_captcha.png
Png, 1.49 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
talking_captcha.png
>>40158
В js объект может сам решить, от кого наследоваться. В любой момент.
>> No.40162 Reply
>>40159
И что из этого? Делегирование (которое ты наследованием называешь) можно на тех же крестах запилить, тем же хешем. Ты бы лучше объяснил зачем это нужно, какие проблемы вселенского масштаба оно разрешает?
>> No.40164 Reply
>>40156
> А что не так? Там очень мощное наследование например. Круче чем в кокихнибудь плюсах.
Ты эту хуйню работодателю рассказываешь так мотивируя необходимость прибавки к зарплате? Типа ты настолько крут что применяешь ООП там где его нет и быть не должно?
>> No.40165 Reply
>>40162
Оно не решает вселенских проблем. Оно чуточку удобнее. Делегирование бесплатным получается.

Попробуй это http://live13.livejournal.com/467547.html читнуть.
>> No.40167 Reply
>>40155
Читай предыдущие посты. Если бы речь шла о паре фишечек на веб-странице, а не о ноде, то пожалуйста. Так тоже пожалуйста, но я думаю, что появятся траблы. К тому же ладно это наркоманское делегирование, надо хотя бы эти ебанутые хеши(объекты) и конструкторы(функции, которые с new вызываются) раскурить. Это по любому все используют.
>>40156
Я сказал "разве что на С".
>> No.40168 Reply
>>40165
> Оно не решает вселенских проблем. Оно чуточку удобнее.
Чем оно тогда круче или мощнее классического ООП, ммм? Удобнее - понятие относительное, тем более чуточку.
> Попробуй это ... читнуть.
А смысл? Я оттуда ничего нового не узнаю. Прототипы - паллиативное ООП для нищих от мира динамико-дрисни, в котором так-то ни классов, ни интерфейсов, ни типов, ни черта одним словом. Я не против прототипного ООП и даже иногда пишу на JS и Lua, просто вещи надо называть своими именами и не делать заявлений уровня:
> очень мощное наследование ... Круче чем в кокихнибудь плюсах
Может тогда погромисты обретут мир ^__^
>> No.40172 Reply
>>40152
Когда кода мало, можно и без оопе.
>> No.40173 Reply
>>40172
Когда? Когда ты последний раз писал проект, где кода мало? Разве что какой скриптец в несколько строк. Но какой ты там на ноде скриптец поришь? Это же для серверных программ технология. И то, сука, напишешь ты им этот скрипец, когда они тебе говорят, что вот им только вот этот скриптец надо и всё. А потом как в этом мультике:"Сначала тебе корыто, а потом подавай стиральную машину". Написал "скриптец за три дня", а потом, через пол года, бля, этот "скриптец" ебаный уже в виде большого грязевого шара с кучей багов, по функционалу только кофе не варит, и остаётся только переписывать. Мало кода бывает только в универе, а так кода всегда вагон.
>> No.40174 Reply
>>40168
Я не хочу с тобой спорить, но таки советую читнуть http://live13.livejournal.com/462582.html и http://live13.livejournal.com/467547.html в частности. Ежели хочешь, то можешь читнуть оригинал http://gameprogrammingpatterns.com/ на ангельском. Это современное переосмысление ООП-паттернов программирования. В том числе там и про паттерн "Прототип" есть собсна сначала я дал ссылку на него.
> Может тогда погромисты обретут мир
Такого не будет пока все программы не будут написаны. А значит не будет никогда.
>> No.40176 Reply
>>40173
И таки все равно. Не смотря на все понты, которые ты тут раскидал, когда кода мало, то можно и без оопе.
>> No.40177 Reply
>>40176
Я не раскидываю ничего, когда кода мало, то можно, но кода редко когда бывает мало, я просто хотел указать на это.
>> No.40179 Reply
>>40177
Хорошо тогда.
>> No.40180 Reply
>>40177
Количество кода никак не сказывается на удобстве применения тех или иных методов. Нормальному программисту, достаточно просто быстро разобраться какой функционал в каком из сотен файлов лежит и что делает та или иная функция при классическом функциональном подходе. А вот пройти по матрёшке из классов с сотнями ветвлений в наследовании, да ещё и в реалиях JavaScript – удовольствие сомнительное.
>> No.40181 Reply
>>40179
Ещё я хотел сказать, что мало того, когда мало сейчас, потом он может вырасти. Потому что требования всё время меняются.
>> No.40182 Reply
>>40174
> Это современное переосмысление ООП-паттернов программирования.
Это описание основных шаблонов проектирования применительно к гейдеву для чайников даунов.
> про паттерн "Прототип"
Какое отношение описание паттерна прототип имеет к твоей изначальной посылке?
> Я не хочу с тобой спорить
Не хотел давно бы уже слился\послал подальше. Ты скорее не можешь чем не хочешь, ибо продолжаешь постить нерелевантную ерунду. Я тебе, таки, тоже посоветую что-нибудь читнуть. Почему динамико-дрисня ненужна, например: http://komar.bitcheese.net/ru/it-faq
>> No.40183 Reply
>>40180
> просто быстро разобраться какой функционал в каком из сотен файлов лежит и что делает та или иная функция
> пройти по матрёшке из классов с сотнями ветвлений в наследовании - удовольствие сомнительное
Рор, нормально двоемыслишь :3
>> No.40184 Reply
>>40183
Никакого двоемыслия. На разборки матрёшек из классов времени уходит намного больше чем на обычную функциональщину.
>> No.40185 Reply
>>40182
> Это описание основных шаблонов проектирования применительно к гейдеву для чайников даунов.
Ну да. А это плохо? Дай мне лучшую альтернативу GoF тогда. За 20 лет таки кой чего поменялось в паттернах. Оно всё было апробировано и оттестировано.
> Какое отношение описание паттерна прототип имеет к твоей изначальной посылке?
Как прототипы относятся к прототипному ООП? Догадайся с трёх раз.
> Ты скорее не можешь чем не хочешь, ибо продолжаешь постить нерелевантную ерунду.
Немогу что? Программить на плюсах? Могу. Но зачем? Кресты плохо решают мои задачи.
> http://komar.bitcheese.net/ru/it-faq
> > Так какие же инструменты — правильные? Что нужно использовать?
> > Не знаю.
А я знаю. Надо использовать те инстурменты, которые решают поставленную задачу лучше других.

Так вот. Мои задачи лучше решает прототипное ООП. Оглянись. Ты в js-треде. Здесь автоматически js лучше крестов, поскольку тем людям, которые тут сидят js гораздо лучше помогает решать их задачи. Разумеется js априорно лучше чем плюсы, когда ты решаешь задачи, которые решаются лучше на js чем на крестах.

Разве только замечу, что в ООП без классов удобнее. Ибо ООП это про соединении данных и кода обработки этих данных. Классы встают между данными и кодом. Лишний слой абстракции же.

Алсо про python и ruby в целом согласен. GIL нинужен.
>> No.40186 Reply
>>40180
> Нормальному программисту, достаточно просто быстро разобраться какой функционал в каком из сотен файлов лежит и что делает та или иная функция при классическом функциональном подходе. А вот пройти по матрёшке из классов с сотнями ветвлений в наследовании, да ещё и в реалиях JavaScript – удовольствие сомнительное.
Плохая шутка. Особенно про "классический функциональный подход".
>>40184
Ты вообще знаешь, что такое функциональщина?
>> No.40191 Reply
>>40180
> А вот пройти по матрёшке из классов с сотнями ветвлений в наследовании, да ещё и в реалиях JavaScript – удовольствие сомнительное.
Сомнительное удовольствие - плодить больше трёх слоёв наследования. В любом ЯП. Плодить слишком много слоёв абстракции одного порядка это всегда плохо.
> при классическом функциональном подходе
Классический ФП подход такое же дерьмо, как и классическое ООП с классами ящитаю. Лучше всего получается, когда смешиваются ООП и ФП. Они хорошо дополняют друг друга же.
>> No.40192 Reply
>>40181
Ну конечно, если есть хотя бы малейшая возможность такого, то необходимо закладывать запас прочности. Другое дело, что все равно такое бывает не всегда.

Ты должно быть в последнее время работал над большими проектами, поэтому тебе так и кажется. Есть же разовые задачи, под которые пишется разовый код - например миграция данных из одного хранилища в другое, какая-нибудь прокси-фигня. Ну и конечно ты к лаба1 задачам относишься пренебрежительно, но они из реального ирл от этого не исчезают же. Пишет кто-нибудь книжку, в книжке нужны примеры, которые должны быть коротенькие и по делу, а не еба-ооп-композиция.

Помимо этого существует сценарий "напидорасить прототип, а потом, если взлетит то делать уже по-хорошему, на другом языке программирования, обвешивая прототип костылями в это время". Как раз для ноды подходит - и написать несложно и выбросить потом не жалко, благо сил ушло чуть.
>> No.40193 Reply
File: 1271098608.jpg
Jpg, 70.75 KB, 736×736 - Click the image to expand
edit Find source with google Find source with iqdb
1271098608.jpg
>>40180
> Количество кода никак не сказывается на удобстве применения тех или иных методов.
А философский камень позволяет инплейс сортировать монаду-масив за О(1).
>> No.40198 Reply
>>40192
> Как раз для ноды подходит - и написать несложно и выбросить потом не жалко, благо сил ушло чуть.
Ты мог начать с того, что не считаешь ноду чем-то серьёзным.
>> No.40201 Reply
>>40191
> Они хорошо дополняют друг друга же.
Поехавший.
Классический джавовский ООП: давайте смешаем стейт и алгоритмы. Стейт спрячем, чтобы до него никто не смог добраться в обход геттеров и сеттеров.
ФП: стейт -- зло! Избавимся от него, где только можно, сделаем его настолько явным, насколько можно.
Это полностью противоположные подходы.
>> No.40203 Reply
File: dsasd.jpg
Jpg, 77.51 KB, 900×726 - Click the image to expand
edit Find source with google Find source with iqdb
dsasd.jpg
>>40198
> Ты мог начать с того, что не считаешь ноду чем-то серьёзным.
Не сердись, все не совсем так, вернее совсем не так. Я считаю яваскрипт неплохим средством быстрого прототипирования. Как средство для написания долгоиграющих проектов он не так хорош, но такой-то хайп позволяет применять его и таким образом.
>>40201
> Классический джавовский ООП: давайте смешаем стейт и алгоритмы. Стейт спрячем, чтобы до него никто не смог добраться в обход геттеров и сеттеров.
> ФП: стейт -- зло! Избавимся от него, где только можно, сделаем его настолько явным, насколько можно.
Не знаю как там с ФП, но оопе больше говорит о том, что давайте мол весь огромный стейт программы разделим на множество маленьких стейтиков, так и в голове продумывать меньше, а маленькие стейтики и операции над ними на вшивость проверять легче.
>> No.40204 Reply
>>40201
> Это полностью противоположные подходы.
Это джве крайности со своим набором недостатков. Фанатичное отстаивание крайностей это юношеский максимализм как по мне.

Кто тебе сказал, что их нельзя сочетать в одном ЯП и при том успешно? Я чтотоу не вижу в них противоположности. ООП/ФП это ведь не декларативное/императивное. Они вообще о разном. ООП больше о данных, а ФП больше о обработке данных. Глупо не использовать их одновременно в определённой пропорции. И добавить немного других парадигм и фишек по вкусу.
>> No.40205 Reply
File: Путин-обещаю-обещать-политота-70370.jpeg
Jpeg, 72.31 KB, 600×633 - Click the image to expand
edit Find source with google Find source with iqdb
Путин-обещаю-обещать-политота-70370.jpeg
>>40203
> все не совсем так, вернее совсем не так. Я считаю яваскрипт неплохим средством быстрого прототипирования. Как средство для написания долгоиграющих проектов он не так хорош, но такой-то хайп позволяет применять его и таким образом.
Уж не Путин ли ты часом?
>> No.40206 Reply
>>40205
Но какое отношение это имеет к яваскрипту? Не рациональнее ли на борде про программирование обсуждать программирование?
>> No.40209 Reply
File: file.jpeg
Jpeg, 653.02 KB, 1536×2210 - Click the image to expand
edit Find source with google Find source with iqdb
file.jpeg
Yay! Тредик ожил! Срачики не очень по теме! Yay!
>> No.40227 Reply
File: 32.jpg
Jpg, 78.21 KB, 600×427 - Click the image to expand
edit Find source with google Find source with iqdb
32.jpg
Доброкодер, помоги мне. При появлении события resize (использую jQuery) у меня выполняется анимация. Даже при небольшом изменении ширины окна генерируется куча событий resize - в результате анимируемый блок сходит с ума. Как сделать, чтобы выполнялся лишь последний resize. Не один час бьюсь над этой проблемой, не могу сообразить.
>> No.40228 Reply
>>40227
Выпиливать + запиливать таймаут на каждый ресайз. Тогда сработает последний запил.
>> No.40229 Reply
>>40227
нужно выставил debounce. Это означает, что функция выполняется только спустя сколькол-то времени после последнего наступления события. Его просто написать, но мне кажется, проще плагин взять в инете. Полезно при любых часто возникающих событиях, как ввод в текстовое поле, перетаскивание и т.п. Реализовать просто, но сам приём часто забывают и он очень полезен.
>> No.40230 Reply
>>40227
Переменную "флажок" создать не судьба? Выполнился ресайз -> тру, запустил анимацию. Завершилась анимация -> флаг в фалс. Если нужно, перед установкой флага в фалс, проверь размеры окна, если у тебя анимация как-то от этого зависит.
>> No.40233 Reply
>>40230
Ты не так его понял, "несудьба". Он не может найти момент, когда ресайз закончился, чтобы на нём начать анимацию. Ресайз стреляет непрерывно каждый момент при непрерывном измненении размера.
>> No.40234 Reply
File: 49.jpg
Jpg, 34.70 KB, 385×200 - Click the image to expand
edit Find source with google Find source with iqdb
49.jpg
Благодарю за идеи. Воспользовался советом по "запиливанию" таймаута, чем проблему и решил, спасибо.
>> No.40254 Reply
>>40227
Аргх! Интерфейс нужен чтобы получать информацию, или чтобы смотреть на анимации при ресайзе? Ненавижу это.
мимовеб2.0хейтер
</offtopic>
>> No.40257 Reply
>>40254
веб2.0 - базвёрд, ненавижу базвёрды. Ты хочешь, чтобы мы тебя поняли? У автора термина определение было не имеющее никакого отношения к анимациям. К слову, я ненавижу вообще никакие анимации нигде. Мне кажется, что окна на всех операционках сворачиваются и разворачиваются целую вечность, транжирят время, вынуждают меня ожидать конца анимации. Почему нельзя просто захуярить мне окнецо, где надо с ходу.
>> No.40258 Reply
>>40257
> просто захуярить мне окнецо, где надо с ходу
use xmonad
>> No.40259 Reply
>>40254
А на сосаче интерфейс позволяет окно ответа перемещать. Это круто.
Если запилить неудобный интерфейс, люди жалуются.
Без обработки события "resize" никакой ресайз сделать вообще нельзя.
>> No.40260 Reply
>>40259
Речь об анимациях. Они увеличивают ВРЕМЯ, затрачиваемое на действие. Вот сделал ты 1000 миллисекунд анимации ресайза, теперь на каждом ресайзе надо эти сраные 1000 миллисекунд ждать, бесит.
>> No.40261 Reply
>>40258
А он не развалится при малейшей попытке реально юзать его, а не играться с ним и его ещё не забросили? Что-то я не верю, что кроме гнома да кед что-то может просто так взять и работать.
>> No.40262 Reply
>>40260
Ну ладно.
>> No.40263 Reply
>>40262
Разумеется это относится к местным жителям, которые херачат по кнопкам как водитель маршрутки по педалям. Кто-то будет стонать при виде этих анимаций.
>> No.40264 Reply
File: 2h9bCVESn7777xM.jpg
Jpg, 43.66 KB, 464×340 - Click the image to expand
edit Find source with google Find source with iqdb
2h9bCVESn7777xM.jpg
>>40261
> А он не развалится
Почти не трогаю конфиг уже года три, всё стабильно.
> Гнома и кед
> xmonad
Неужели ещё остались люди, не различающие WM и DE?
>> No.40265 Reply
>>40264
А чё толку различать их? Да, в теории, конечно, всё это конструктор из независимых компонентов, которые можно собирать в любом порядке. Но на практике можно юзать только самые популярные комбинации выставленные в виде цельных кусков. Всё остальное просто развалится нахуй от использования.

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

Давай проведём эксперемент, если так уверен в xmonad. Сделай сейчас, чтобы скайп и сандербёрд запускались на старапе и сворачивались куда-нибудь стандартными какими-нибудь средствами, которые должны документально работать. 78%, что что-нибудь сдохнет.
>> No.40266 Reply
>>40265
> Всё остальное просто развалится нахуй от использования.
Проблема в чьих-то руках. Я три года юзаю xmonad + kde и полгода xmonad + mate на другом компе. Ничего не разваливается и, главное, не должно. Поскольку замена WM -- очень распространённая процедура, которая поддерживается самими DE.
> Сделай сейчас, чтобы скайп и сандербёрд запускались на старапе и сворачивались куда-нибудь стандартными какими-нибудь средствами, которые должны документально работать. 78%, что что-нибудь сдохнет.
Скайпа не имею, а громоптиц у меня всегда запущен на 9-м рабочем столе, куда он автоматически перемещается стандартными средствами xmonad.
>> No.40268 Reply
>>40265
> xmonad
А как его запрограммировать на языке jquery?
>> No.40269 Reply
>>40266
Я попробую этот твой xmonad. На чём с ним меньше было траблов, на kde или на mate?
>> No.40270 Reply
>>40268
Собрать с помощью ghcjs.
>>40269
В кедах.
>> No.40273 Reply
>>40268
Нет такого языка. $ - это тупо обычный символ для названия переменной или функции в js. Господи, так толсто, что я подозреваю, что он серьзёно.
>> No.40276 Reply
>>40273
Но ведь этот $ действительно выглядит как магия. Особенно если начинать жс сразу с жквери.
>> No.40284 Reply
>>40276
А потом такие, делают вот такие глаза О__О когда показываешь им скрипт с аяксом без их жыквери. Многие всерьёз думают что это какая то магическая библиотека расширяющая возможности браузера и что без неё всё это написать просто невозможно.
>> No.40285 Reply
File: 1212017891100.jpg
Jpg, 89.52 KB, 626×600 - Click the image to expand
edit Find source with google Find source with iqdb
1212017891100.jpg
>>40270
> Собрать с помощью ghcjs.
Биндинги к иксам под язык жиквери тоже соберет?
>>40273
>>40276
>>40284
Успокойтесь, няши, жиквери это действительно волшебная библиотека, правда она только для маленьких девочек. Бородатым емаксерам, вроде вас^ остается только сетовать на времена и нравы, и воздыхать о былом CreateObject("MSXML2.XMLHTTP").
>> No.40418 Reply
File: noobseriouslyshakespeare580px-thumb.jpg
Jpg, 35.42 KB, 800×350 - Click the image to expand
edit Find source with google Find source with iqdb
noobseriouslyshakespeare580px-thumb.jpg
я нажал ctrl+f и набрал "brackets.io". почему-то было найдено "0 из 0" - это очень странно.
>> No.40419 Reply
File: noobseriouslyshakespeare580px-thumb.jpg
Jpg, 59.39 KB, 604×464 - Click the image to expand
edit Find source with google Find source with iqdb
noobseriouslyshakespeare580px-thumb.jpg
>>40285
> CreateObject("MSXML2.XMLHTTP")
няша, актив-иксы как-то по-другому криэйтились же. как думаешь, когда-нибудь htc заберет былую славу у своего имперсонатора? джиквери для девочек - грех не согласиться.
>> No.40446 Reply
>>40285
Ты мог сказать "на языке джаваскрипт" или "с использованием HTML или другого языка вёрстки" или просто не говорить "на языке" рядом с jquery. Я зануда, да.
>> No.40449 Reply
Мда. Время сейчас действительно странное пошло. Вместо того чтобы писать что-то своё, хватают чужое. Кто вам сказал, что все эти библиотеки и фреймворки ускоряют работу? Кто вам, блять, сказал, что вы сами не можете написать более гибкий аналог всего этого, подходящий именно вам под ваш проект и именно вам? Вы, блять, думаете, что на это уйдёт больше времени, чем на костыли к вашим фреймовркам? Или что разработчики всего этого дерьма умнее вас? Вместо одной странички с html формочкой для отправки данных с маленьким файликом js для функций валидации полей, пихают слона в виде angular или подобного и гордо обзывают это дерьмо MVC. Какое впизду MVC если контроллером к вашей вьюхе выступает такой же кусок яваскрипта крутящийся в браузере пользователя? Вы совсем пизданулись? К этому контроллеру нужен ещё один контроллер или сервис на бэкэнде, нахуй так жить, а? Вместо работы на два часа, вхуячивать неделю на написание всей этой ебатни. Вы свой код специально в этот пиздец, якобы, объектно-ориентированного программирования превращаете, чтобы ваш хуй казался длиннее? От ваших жыквери и событийных моделей поведения элементов, одни и те же функции вызываются по сотне раз на каждый чих пользователя, у вас доходит до перегрузки частей интерфейса аяксом на событии потери фокуса у элемента. По нескольку, блять, раз за секунду, параллельными запросами. И не пиздите мне что у вас этого нет. Все вы одинаковые. Больше 500 строчек в цветастенькой табличке нарисованной на extjs к хуям вешают любой браузер на любой системе. Это нормально? Загрузка «классов» налету? Только когда они нужны? А нахуя, если они все будут нужны при загрузке страницы и никуда из неё не денутся в процессе работы приложения? Научитесь уже программировать, а не использовать чужой код, и хватит дрочить на ООП. Вы не умеете применять его там, где оно действительно нужно. И нихуя о нём не знаете, раз пытаетесь всунуть его в скриптовый язык, который даже близко ООП не поддерживает.
>> No.40450 Reply
>>40449
> ...в скриптовый язык, который даже близко ООП не поддерживает.
JavaScript поддерживает ООП.
>> No.40451 Reply
>>40449
Злотред в другой стороне. А жиквери я использую потому, что там апи удобней нативного в некоторых случаях. Где не удобнее, там голый дом.
>> No.40456 Reply
>>40449
ты прямо, как плохой сюжет аниме. все так классно. смотришь, смотришь, смотришь. нравится, нравится, нравится. а в последней серии оказываешься в другой обстановке, абсолютно оторванной от сюжета. все так правильно говорил. от сердца. а потом: "даже близко ООП не поддерживает" - зачем так?
>> No.40457 Reply
>>40456
> смотришь, смотришь, смотришь. нравится
> Научитесь уже программировать, а не использовать чужой код
Нравится такое может, только если это что-то типа аракавы или коновских поделий в не самом его психологически здоровом состоянии.
>> No.40460 Reply
>>40449
Или тролль, или неопытный подросток, никогда ничего не писавший из больших проектов, или ещё один функционально-сектант.
>> No.40461 Reply
>>40457
он, по сути, говорит: "включи мозг, подумай" - очень здравая мысль. жалко, что в самом конце он обосрался.
>> No.40462 Reply
>>40461
Это где ты такое увидел? Я вижу сообщение полное боли от копипастеров туториалов из интернета и неправильно сделаный из этой боли вывод, что ничего стороннего использовать нельзя и все надо велосипедить самому.
>> No.40463 Reply
>>40462
Это как же должно повезти человеку, чтобы его проблема решалась простым копипастом туториала из интернета?!
>> No.40465 Reply
>>40463
С чего ты взял, что его проблемы решились? И он же скорее всего сайтовёрт. "Я делаю сайтики и обожаю битрикс и джумлу. Ненавижу ООП, оно нах не нужно в пхп, я всё могу сам написать, библиотеки и фреймворки для неумёх, к тому же я не знаю пиндосский, как я прочту эти документации?"
>> No.40468 Reply
>>40462
> Это где ты такое увидел?
так вот тут:
> Вы свой код специально в этот пиздец, якобы, объектно-ориентированного программирования превращаете, чтобы ваш хуй казался длиннее?
> одни и те же функции вызываются по сотне раз на каждый чих пользователя
> Загрузка «классов» налету? Только когда они нужны?
> хватит дрочить на ООП
>> No.40469 Reply
>>40468
"Хватит дрочить на ООП" не имеет никакого отношения к "включи мозг". ООП нужно долго изучать, чтобы понимать все принципы и знать как и зачем их использовать, а выгода от его применения есть почти везде в любом проекте с больше чем 1000 строками кода и во многих проектах меньше.

И я же писал эти формы на пыхе и вообще без любых CMS и фреймворков и без единого объявления классов в процедурном стиле. Мне потом код хотелось всегда выкинуть, но было уже поздно. И с помощью битрикса я писал на этих ебанутых компонентов, которые почти никак не переделаешь всегда. И с помощью симфони, рельс, yii. На MVC-фреймворках мне куда удобнее и быстрее. И можно писать и миллионы строк и в них будет всё понятно даже без комментариев, если написать, соблюдая все основные принципы. Да, работает на пару процентов медленнее от прогрузки всех эти штуковин и что.

И причём здесь вообще про функции на каждый чих и и аяксы при потере фокуса. jQuery виноват, что ли, в том, что они такие мудаки? jQuery ничего такого делать не заставляет. Аякс, жс и жквери не виноваты в том, что мудаки копипастят скрипты из интернета и вообще нее думают и не знают о том, как это будет работать. В конце концов мои джаваскрипты не вызывали никаких подвисаний и вообще большинство были написаны по принципу unobtrusive javascript.

Алсо, если при потери фокуса полей аяксом проверяется коректность данных, то это нормально, если там просто выскакивает сообщение и меняется цвет поля, зачем перегружать части интерфейса.
>> No.40470 Reply
>>40469
бывает такое, что люди друг друга просто не слышат
>> No.40474 Reply
В яваскрипте появилось ООП? Щито? А покажите, мне интересно, а то гугл что-то странное выдаёт.

миможабакодер
>> No.40476 Reply
>>40474
http://dklab.ru/chicken/nablas/40.html
http://javascript.ru/tutorial/Object
твое любимое ключевое слово class тоже придумали для в шестой версии, но оно лишнее, на самом деле
>> No.40477 Reply
>>40474
В этом треде это уже раза три или четыре обсуждалось, Ctrl+F. А то стек переполнится.
>> No.40478 Reply
>>40476
Не сочтите за толстоту, но вот это засовывание "ссылки" на функцию в объект, или какое то странное запихивание свойств в функцию вы называете ООП? Спасибо за ответ, всё что хотел, я узнал.
>> No.40479 Reply
>>40478
> Спасибо за ответ, всё что хотел, я узнал.
Жаббалюб пришел в яваскрипт и увидел, что жабба там так и не появилась. Вот это открытие!
>> No.40481 Reply
>>40478
Ну и по существу, а то вдруг кто не знает. ООП называется такая парадигма, в рамках которой моделировать задачу предлагается следующим образом: разобъем весь стейт задачи на маленькие, удобные для обработки стейтики, заключим каждый такой стейтик в сущность, которая ограничивала бы набор операций над этим стейтиком специфичным для прикладной задачи образом. Эти ограниченные стейтики обзовем объектами.

Между объектами, разумеется, можно городить всякие отношения - наследования, например, или какого-нибудь "миксинства", а можно и не городить. Отсутствие знакомых эксперту отношений между объектами не позволяет говорить об отсутствии ООП.
>> No.40482 Reply
>>40481
Это по существу, а если по совести, то жаболюбы садятся на свой мотороллер и воображают себя крутыми бородатыми байкерами, вы тоже считаете себя крутыми байкерами, только садитесь вы не на мотороллер, а на трехколёсный велосипед и прицепляете к колесу трещотку, чтобы хоть звук был.
>> No.40485 Reply
File: java-js-anime.jpg
Jpg, 41.86 KB, 450×350 - Click the image to expand
edit Find source with google Find source with iqdb
java-js-anime.jpg
>>40482
Неправда, у хорошего программиста на яваскрипте достаточно мало иллюзий относительно своего инструмента. Просто мы смогли полюбить этот язык таким, какой он есть, а остальные пытаются вылепить из него то, что уже знают и чем пользуются (жабба, пасквиль, петон, руби, ...).

Иногда у них получается - см. кофескрипт, тайпскрипт, ельм, фей, гвт - имя им легион. Но это только у тех, кто умеет лепить. Кто лепить не умеют приходят в этот итт и ищут утешения.
>> No.40486 Reply
>>40478
ооп это метода. когда нечто-вроде-класса является объектом (дада, совершенно спокойно изменяемым объектом) появляется очень много гибкости. например, реализация ути-пути-паттерна "состояние" одной строчкой без хлама, вроде this.state. оценить гибкость можно строго при использовании - точно так же мне никогда не понять, в чем преимущества ручного и нудного задания типа каждой (даже самой мелкой) переменной.
>> No.40487 Reply
>>40481
> разобъем весь стейт задачи на маленькие, удобные для обработки стейтики, заключим каждый такой стейтик в сущность, которая ограничивала бы набор операций над этим стейтиком специфичным для прикладной задачи образом. Эти ограниченные стейтики обзовем объектами.
Только на днях этим занимался. Хм, мне плевать, объекты это или нет. Если судить по виду - создаётся конструктором, изолирует состояние, предоставляет интерфейс, через который можно дёргать состояние. Можно дажже наследоваться js-way. Похоже на объект. Работает и ладно, пусть пуристы это ООП не считают.

Мне кажется, вся эта дискуссия - попытка объяснить поведение объектов js в терминах ООП. Ну, что-то возможно. Что-то возможно с геммороем (вроде изоляции приватных структур через замыкания). Что-то невозможно вообще. Но оно и так заебись работает, пусть и не как в какой-нибудь джаве.
>> No.40488 Reply
>>40487
> изоляции приватных структур через замыкания
не боюсь оказаться непопулярным (т.к. знаю, что окажусь). private, как и mvc, для девочек - мальчики любят api, plugins и конфижи.
>> No.40494 Reply
>>40478
И это тоже обсуждалось, и, что ты потом скажешь, - тоже. Стек уже почти переполнился.
>> No.40507 Reply
File: 7db1b1753994dce99e073f80a333bc67.png
Png, 248.97 KB, 700×596 - Click the image to expand
edit Find source with google Find source with iqdb
7db1b1753994dce99e073f80a333bc67.png
>>40494
Пост побудил полуркать.
Кстати, при опредлённом везении Harmony будет иметь оптимизацию хвостовой рекурсии. Мне этого не хватало, блджад, да здравствуют рекурсивные helper functions! Yay!

Кому-нибудь интересно, какие там нововведения?
>> No.40508 Reply
>>40507
про async/spawn функции по-пацански расскажи, плиз
>> No.40519 Reply
File: b7aa88a23edf66240d277dd90a323feb.jpg
Jpg, 522.45 KB, 1000×667 - Click the image to expand
edit Find source with google Find source with iqdb
b7aa88a23edf66240d277dd90a323feb.jpg
>>40508
Я понятия не имею, что за spawn-функции.

Бложик ahead!

%%Пересел на медленный пк на линуксах. Пара мыслей оформилась.
1. Определённый стандартным образом (без async/defer?) в html джаваскрипт блокирует отображение остального контента до момента, пока скрипт не загрузится и не исполнится.
2. Любые длительные (тяжёлые) вычисления завесят окно браузера, будь они блокирующие или нет. Пока js выполняется, таб браузера не отвечает ни на какие действия пользователя.%%

%%Выводы:
Стоит использовать асинхронную загрузку js. Хотя бы async как атрибут скрипта. Иначе придётся скрипеть зубами всё время, пока скрипты грузятся, даже если контент уже виден.%%

%%Не имеет смысл писать код на js, время исполнения которого больше пары сотен миллисекунд. На мобильных девайсах это растянется на секунды. Имея выбор, я уйду с такого сайта.
Возможно, web-workers спасут ситуацию, когда нужно исполнять какой-то тяжёлый код. Например, генерировать ключи. Я не знаю, не приходилось пользоваться.%%

%%Всякий мусор типа кнопок "+1! Лайк! Втвиттор!" говно. Я не знаю, тянется ли оно каким-то скриптом или работает как-то, через айфрэймы, к примеру. Но говно. Блокирует взаимодействие со страницей и я не знаю, браузер ли начинает глючить или код блокирующий.
Неудивительно, что на каждый чих на смартфонах есть мобильные приложения. %%

А ещё вакабамарк говно. А бб-коды для спойлеров на доброчане я не знаю.
>> No.40521 Reply
>> No.40522 Reply
>>40521
Вакабамарк говно.
Спасибо. Видел много раз.
>> No.40523 Reply
>>40522
Почему тогда не запомнил как правильно?
>> No.40524 Reply
>>40523
Потому что вопить говно-говно-говно гораздо проще.
>> No.40525 Reply
>>40523
Как "правильно" что?
Условия, при которых разметка ломается, разнятся от борды к борде. Там, где я пощу больше всего, строчный спойлер не ломается просто потому, что используется перенос строки. Здесь ломается. Ну и чёрт с ним, запомню.
Бб-коды для спойлеров разнятся так же. [sp], [h], [spoiler]. Какой из них работает на доброчане? Я не знаю.

>>40524
Thank you for your opinion.
>> No.40526 Reply
>>40525
У тебя все перепуталось в голове. Одна разметка не может быть плохой оттого, что кто-то привык к другой.
>> No.40527 Reply
>>40525
> Как "правильно" что?
Как правильно на доброчане писать многострочные спойлеры.
>> No.40528 Reply
>>40527
Что поделать. Забыл.
>>40526
> У тебя все перепуталось в голове.
Нет.
> Одна разметка не может быть плохой оттого, что кто-то привык к другой.
Ты прав.
>> No.40529 Reply
>>40519
эээээ... ты зачем про harmony написал, если про html-атрибуты рассказать хочешь? ну да ладно: от твоих размышлений никому хуже не стало, а дед-мороз-2010 так и вовсе улыбнулся. что-то типа спасибо за попытку.
>> No.40530 Reply
>>40519
Веб-воркеры номинально поддерживаются всеми современными браузерами, но там такое количество багов, что я сильно пожалел, что связался с ними. Но мне тогда нужна была только удобная асинхронность, а не настоящие OS-левел потоки. Я делал аякс-запросы из самих веб-воркеров, при чём, долго работающие. При аяксе из веб-воркера там везде куча багов, целое минное поле. Плюс куча багов и траблов, мешающий отладке. Лучше не связываться или только с осторожностью, если действительно надо. Хотя, может это я неопытный дурачок просто.
>> No.40533 Reply
>>40529
О господи. Я на это даже отвечать не буду.
>>40530
Интересно, спасибо.
>> No.40535 Reply
>> No.40602 Reply
>>40010
scrapbook-кун снова на связи.
Модифициорованный "FirefoxPortable_English\Data\profile\extensions\{53A03D43-5363-4669-8190-99061B2DEBA5}.xpi" постоянно заменяется на оригинальный. Как мне зарегистрировать изменнёное дополнение FireFox правильно? Или это у меня тихой сапой делает антивирус?
>> No.40962 Reply
Привет анон, мне нужно реализовать калькулятор стоимости перевозки грузов, простой, городА, городБ, вес, объём.
Как это проще всего сделать?


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]