Pull to refresh
0
0
Кирилл @kroshanin

Разработчик веб-систем

Send message
Раз есть PhantomJs, то стоит добавить и его аналог SlimerJS.
Разница между ними в том, что PhantomJs использует движок WebKit (Google Chrome), а SlimerJs использует движок Gecko (Mozilla Firefox). Последний в бОльшей степени поддерживает стандарты ECMAScript.
Proxy включен в стандарт ES-2015 и на текущий момент (еще пока) поддерживается далеко не всеми браузерами.
Поэтому меня очень и заинтересовала реализация перехвата функций в библиотеке TOM.js
Указанный мной пример точно будет работать на браузере Мозилла.
Полный список поддерживающих Proxy браузеров можно глянуть здесь: https://kangax.github.io/compat-table/es6/
Очень не хватает работающих (!) примеров. Попытался реализовать пример перехвата функций, но ничего не выходит:
http://jsbin.com/tumayopuje/edit?html,console,output

В js уже включена возможность проксей, вот пример:
http://jsbin.com/vocuzoxegi/edit?html,console,output
Но хочется "поюзать" и вашу реализацию.

Также, как мне кажется, было бы лучше, если бы вы разделили свою библиотеку на три (по функциональности), а не "все в кучу".
Зря вы так. HTML5 предоставляет широчайшие возможности в области работы с канвой. И в модулях отрисовки графики вполне вероятны "битвы" за каждую миллисекунду времени.
Хотел поковыряться, но у меня почему-то и ваш начальный код, и ваш конечный код выдают одинаковое время, равное 20 мс, вот ссылка:
http://jsbin.com/hevikonuhu/edit?html,console,output
Возможно, я что-то делаю не так?
Критика должна быть конструктивной. А когда человек разработал свой язык (!), а большинство вам подобных обрушивается на него в стиле "зачем вы это сделали, есть же Lisp?" — такая критика никакому прогрессу не способствует.
Я недавно на хабре. Также как и вы хотел просто поделиться своей разработкой — библиотекой связывания (binding) данных для JavaScript. И что вы думаете? Вместо "Молодец! Так держать!" лишь гора отрицательных комментариев в стиле "зачем это нужно, если уже есть вот это". А буквально вчера на почту приходит сообщение "Спасибо за вашу библиотеку! Как раз то, что я и искал!". Было очень приятно, что кто-то наконец оценил по достоинству возможности моей библиотеки.

В общем, что я хочу сказать: вы зря так скептически относитесь к собственной разработке. Ваши идеи, повторюсь, заслуживают и внимания, и проработки. Однако пока еще, как мне кажется, рано ими делиться: все достаточно "сыро" и требуется еще немало работы, чтобы придать более-менее интересный вид и прикладной характер. Мне кажется, что сейчас вам нужно попробовать найти какую-нибудь область, в которой в силу тех или иных причин именно ваши разработки будут как нельзя кстати.
Очень некрасиво, что вы игнорируете советы читающих вас пользователей, как минимум по более читабельному оформлению статьи, не говоря уже о конструктивной критике самого языка.
У каждого программиста бывает этап, когда он считает себя самым умным и остается глух к советам и мнению других людей. Но я думал, что у вас данный этап уже пройден.

По статье: тип данных «граф» я не смог до конца понять — очень не хватает картинки. Мне кажется, что «внутри» данный тип данных реализован у вас не совсем верно, поскольку скорей всего вы храните лишь таблицу связей и таблицу маркеров, но без таблицы самих узлов. Отсюда вытекает и такое неудобное его задание (G.NET(1,1,"",1,4);), гораздо удобнее было бы продумать методы задания вида G.addChild() -> GrafUzel.
Было бы здорово, если бы в начале/в конце статьи вы бы кратко перечисляли возможности, о которых пойдет речь.
Например, так:
  • Первый пример показывает, как программа может изменять значения инициализации массива в своем собственном коде
  • Второй пример показывает, как программа может выполнить лишь раз определенный фрагмент своего кода, а затем удалить его

По самой идеи: у вас получается крайне неустойчивая система. Я и в свой-то код стараюсь без необходимости не лезть, а если в него еще и сам компьютер будет вносить правки, это будет будет просто ужасно. Может вам стоит подумать про версионность? Во всяком случае на текущий момент, как я думаю, поддерживать код на вашем языке будет крайне проблематично.
Идея само-модифицирующихся программ далеко не нова, но очень интересна по своей сути.
Статья у вас никудышная, но это вовсе не значит, что ваши идеи бесперспективны и их стоит забросить.
Не обращайте внимание на минусы и продолжайте работать в этом направлении.
Рано или поздно вы обязательно достигните успеха.
У меня однажды была обратная ситуация. Собеседование состояло из двух частей: с программистом и с руководителем.
С программистом вопросы были прикладного характера, на которые я практически на все ответил, потом еще несколько «практических» (код писать) заданий, с которыми я также справился что называется «на ура».
А дальше предстояло собеседование с руководителем. Я думал, что это будут чисто организационные вопросы, мол какую зарплату хочу, какой график и т.д. А руководитель оказался бывшим программистом и начал спрашивать меня как происходят те или иные вещи на нижнем уровне. Например, как организовано хранение данных в MySQL или как на нижнем уровне передается файл на сайт и т.д. И я «поплыл», поскольку мои знания по большей части прикладного характера, т.е. я знаю, что если по полю БД должен осуществляться поиск, его нужно сделать индексированным, а как это там внутри по кластерам или по страницам разбивается — в этом я не силен.
В общем, забраковали меня тогда, Было очень обидно, поскольку я обладал требуемыми им знания, но мои знания просто не были увидены.

А по вашему примеру: как мне кажется, вы должны были предоставить хоть какое-то решение. Пусть «в лоб», пусть громоздкое и плохое, но готовое работающее решение. Вы рано сдались. Поставьте себя на место работодателя: он дал кандидату не особо сложную задачу, а кандидат ее не выполнил. Естественно, он откажет данному кандидату и возьмет на работу того, который выполнит задание.
Вы ajax-ом получаете HTML формы\таблицы или таки данные для неё
Я использую серверный фреймворк Yii2, в нем есть компонент GridView, который генерирует таблицу. В нем есть возможность «обернуть» данную таблицу в PJAX, чтобы записи добавлялись/изменялись без перезагрузки всей страницы, а только перезагрузкой непосредственно самой таблицы. Т.е. через ajax приходит именно полноценный html-код страницы, загружается, и затем вызывается событие «ТаблицаЗагружена».

А вообще спасибо. Ваши комментарии приятно читать (в них не содержится негатива).
Да, ваш код почти то, что нужно. Возможно, если бы я тогда «дошел» до него или увидел в примерах, то пытался бы адаптировать именно его, а не разрабатывать свое решение.

Единственное, есть несколько вопросов.
Вы, как я понял, определяете для div'а переменную, затем записываете в переменную полученное содержимое, после чего вызываете scope.$scan() для обновления связей. Нельзя ли выполнить обновления связей без использования переменной? Просто в моем случае загружаемый фрагмент будет очень огромный. Не хотелось бы хранить его в переменной.

И второй вопрос: если в загружаемом фрагменте будут скрипты — они отработают? У меня в табличной части используются виджеты, а они добавляют для себя js-скрипты. Этот вопрос я могу, в принципе, и сам проверить, но лучше спрошу у вас.
Прежде чем «шохать» могли бы и на код краем глаза взглянуть.
Это эмулятор загрузки с сервера: те строки, которые были изменены но на которых не была нажата кнопка «Сохранить» возвращаются в исходное состояние при обновлении, поскольку «на сервере» данные не были обновлены.
Почему же сразу «велосипедостроение»? Я же указал вам конкретную задачу, которая была передо мной поставлена. На текущий момент никто из комментирующих простое решение не показал, никто не показал даже хоть какое-нибудь решение. Зато вот критикуют все кому не лень.

Вот, набросал play-ground: Пример связывания в табличной части
Там эмуляция табличной части и пример моего решения при помощи RainyJs.
Буду рад, если вы предложите свой вариант на Angular, Angular Light или на любом другом фреймворке или библиотеке. Думаю, что достаточно многие программисты сталкиваются с подобной задачей, особенно те, кто используют для разработки серверные фреймворки.

Вот! Об этом я и твержу. Чтобы реализовать простейшее связывание вида «цена-количество-сумма» мне пришлость бы генерировать html-код на Angular. А у меня он уже сгенерирован, я использую стандартный yii2-компонент GridView, т.е. мне нужно без всяких ng-repeat, просто связать поля ввода!

А теперь как это сделать на RainyJs:
01) в поле цены и поле суммы добавляем rxname=«priceX» и rxname=«countX», где X — номер или индекс строки
02) в поле суммы добавляем rxdata=«priceX countX» и код функции rxcode=«return priceX*countX»
03) после загрузки обновленного содержимого вызываем rainy($("#GridId"))
И все! Без всяких контроллеров, директив, шаблонов и т.д.

А вообще не ожидал я такого от хабра. Столько отзывов и ниодного положительного, одна критика, причем необоснованная. Хотя продукт, на самом деле, действительно, заслуживает внимания.
Чтобы я еще хоть раз делился своими разработками — нет уж, увольте.
Я считаю, что полного рабочего дня для поиска в интернете решения конкретной проблемы более чем достаточно. В общей сложности на поиски готового решения ушла где-то неделя.
Библиотеку написал за неделю. Столько же времени ушло на сайт, но на сайт больше на «украшательство», нежели чем на функционал.
В работе я использую серверный фреймворк yii2, который генерирует html-код и в input'ы ставит соответствующие значения из базы. Инициализация (ng-init) мне нужна, поскольку установленное в input значение angular не учитывает, а берет значение своей модели:
    <div>
      <label>Имя:</label>
      <input type="text" value="ЭтоНеВидит!!!" ng-model="yourName">
      <hr>
      <h1>Привет, {{yourName}}!</h1>
    </div>

Вы, наверное, разработчик Angular Light? Именно ваша библиотека показалась мне наиболее интересной, очень долго пытался именно на ней реализовать необходимый мне функционал.
Немного не в тему: у меня не работало обновление через alight.bootstrap() после загрузки ajax-содержимого. Разбирая ваши исходники выяснил, что дело во флаге ma_bootstrapped, поэтому для обновления связей делал так (код тестовый):
	tag = $("#id004");
	delete tag[0].ma_bootstrapped;
	$("#b01").removeAttr("al-init");
	alight.bootstrap(tag[0],{"name":value});
Ух, столько комментариев, даже не ожидал. Думаю, лучше я просто опишу проблему, с которой пришлось столкнуться.
Есть веб-страница документа, у которого табличная часть. В табличной части присутствуют колонки Кол-во, Цена, Сумма. Заказчик оправдано сказал, что неудобно считать сумму самостоятельно и нужно сделать, чтобы при изменении Цены или Кол-ва сумма пересчитывалась. Проблема в том, что записи добавляются/изменяются динамически через ajax-запросы. Каким будет ваше решение?

За несколько дней я не смог найти простого и подходящего решения. И написал библиотеку. Решил поделиться ей с миром. И мне не совсем понятна критика уровня «это все есть в Angular». Может и есть. Но если так мыслить, то зачем вообще AngularLight или vue.js, если есть Angular? Если моя библиотека не будет востребована, то через некоторое время она сама собой отомрет, уступив место чему-то более подходящему. И в этом нет ничего страшного, это обыкновенный процесс развития технологий.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity