Pull to refresh
64
Павел@Hemml

астрофизик

1
Rating
21
Subscribers
Send message

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

Sorry за саморекламу, но у меня есть концепция по развитию этой идеи :)

Суть в том, чтобы отказаться от JSON вообще, а передавать на устройство прямо код, который оно будет исполнять (в моем случае -- это JS, передаваемый в браузер через вебсокет). Код может не просто отрисовывать элементы, но и определять новые функции, так что можно просто передать клиенту функцию для отрисовки сложного элемента (включая всю внутреннюю логику его работы и всякие анимации/переходы), а потом просто вызывать ее. Или пусть он сам ее вызывает по событию. У меня это реализовано на Common Lisp (извините :), который компилируется в JS, но можно и для других языков это сделать.

как они проведут проверку, если инстаграм заблокирован?

А как работает трехфазное УЗО? Если я правильно понимаю, в случае баланса трех фаз через ноль ток может вообще не идти.

А есть ли где-нибудь рейтинг рейтингов? По какому принципу он составляется?

Вот уж что действительно не поможет ситуации, так это вынос дискуссии за пределы научного сообщества, на площадки типа Хабра и пр. Возьмем эту статью, например. Один из параграфов -- откровенная манипуляция: Горькавый (если что, я знаю его лично и уважаю) забанен в astroph, все знают Горькавого, значит astroph не прав и всё плохо. А если бы было написано, что лжеученый из Китая Ли Фу Фу забанен на известном международном сайте препринтов за лженаучные статьи якобы опровергающие доказанные теории инфляции, то же самое действие было бы в глазах общественности оправдано. Вообще, arXiv.org это та еще помойка, но к делу это не относится. Научные проблемы должны решаться научными методами и внутри научного сообщества. Химики должны разбираться с химиками, математики -- с математиками. С каждым случаем надо разбираться отдельно, читать и анализировать статьи, писать аргументированные рецензии, спорить и задавать вопросы на конференциях (они для этого и проводятся). Общественное обсуждение же стоит ровно ничего, так как все его участники даже обсуждаемых статей не читали, а если читали, вряд ли поняли хотя бы половину слов.

У меня, собственно, нет никаких особых протоколов общения -- я через вебсокет посылаю в браузер JS-код, браузер его выполняет и возвращает ответ через тот же вебсокет, всё. А уж код может создать элемент, вернуть высоту элемента, всё что угодно. Код пишется тоже на лиспе и потом компилируется (на хосте) в JS перед отправкой.

О, Smalltalk, мое уважение!

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

(let ((el (create-element "div" :|innerHTML| "Hello world!")))
  (ensure-element el ;; execute the following code when the element really appears
    (jslog (jscl::oget el "clientHeight"))))

Если же мне надо будет зачем-то узнать высоту элемента на бэкенде, я должен явно запросить ее у браузера или пусть браузер вызовет RPC и сообщит:

(defun-r rpc-report-height (height)
  (format t "The height is ~A px!~%" height))

(defparameter-f *my-div* nil)

(defun-f get-div-height ()
  (jscl::oget *my-div* "clientHeight"))

(defun-f make-div ()
  (setf *my-div* (create-element "div" :|innerHTML| "Hello world!"))
  (ensure-element *my-div*
    (rpc-report-height (get-div-height)))
  nil)

(make-div) ;; The #'rpc-report-height must be fired
(sleep 1)
(print (get-div-height)) ;; call browser-side function

В принципе, бэкенд не контролирует браузер на 100%, просто дает ему команды и браузер их выполняет. Я даже хочу реализовать "production mode", когда сокет вообще не открывается, а браузер сразу получает весь код, скомпилированный и упакованный, оставив текущую схему для разработки/отладки, а также для приложений, где важна интерактивность.

можно и совместить!

когда к ним с замечаниями и предложениями приходит другой такой "старшевозрастной программист"

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

я могу сказать, почему Сережа не пишет сразу подсистему ролей -- потому что эта подсистема клиенту не нужна и у клиента возникнет закономерный вопрос, почему он должен платить за разработку ненужного ему кода. Если ему впоследствии потребуется система ролей, то Сережа напишет и ее. Но, из вашего же примера видно, что система ролей не нужна и в последствии. Если у клиента 2 (два) оператора и одному надо запретить определенные действия в воскресенье утром, то городить отдельную таблицу, придумывать интерфейс к ней, прописывать права доступа уже к этому всему (еще одна система ролей?!), обучать клиента работе с ней, писать документацию, чтобы клиент в красивой форме вписал это правило и забыл про нее на следующие 10 лет -- оверкил. Сережа прав.

Давайте называть вещи своими именами. То, что вы называете "говнокодом", на самом деле просто сложный код, который понимает только Сережа, который его писал. А почему он такой сложный легко понять из оговорки автора про "точное выполнение заданий" -- Сережа пишет код так, чтобы клиент получил в точности то, что заказал -- все кнопки и цвета на своих местах. Для этого ему приходится наворачивать сложности. Другие программисты в конторе пишут простой и понятный код, красивый, по гайдлайнам. Но этот простой код не удовлетворяет клиентов (они не видят код, они видят результат) на 100% и они хотят Сережу. Странные они.

Вообще, вы не задумывались почему программисты старшего возраста (то есть, с многолетним опытом работы), поголовно вот такие "Сережи"? Они просто умеют писать сложный код, читать сложный код и править сложный код так, чтобы он работал. И пользуются этим умением, чтобы получать нужные результаты, посмеиваясь про себя над "студентами".

На самом деле, существуют способы писать сложный код просто, но для этого надо использовать правильные инструменты. Например, функциональное программирование. Такие языки, как Lisp и пр. Но до них надо дорасти. Я вполне допускаю мысль, что если Сережа случайно прочтет SICP (о, бойтесь этого!) и, потом, не к ночи будь помянут, "Common Lisp Recipes", то он начнет писать код красиво и еще в несколько раз быстрее. Но вы этот код понять не сможете от слова совсем. Впрочем, это будет иметь мало значения, потому что ваш отдел сократят в полном составе, так как Сережа будет справляться один со всей работой.

Сегодня снова баловался с устройством. В меню нет пункта "обновить" или я его не нашел, но сказал ему голосом "обнови прошивку" и он обновил! KION появился, запустился и работает. Из проблем -- он не открывается, если устройство в "детском режиме", однако в этом режиме вполне открывается шоппинг, например, что странно. Ну и пока нельзя использовать KION вместо Смотрёшки, это самый главный минус, говоришь ему "включи такой-то канал", включается Смотрёшка и говорит, что канал платный, вместо того, чтобы включить KION, где он в подписке :(

А вообще, отличное устройство, вы молодцы!

Заказал сбербокс, на посмотреть. Приложения KION в нем нет или я не понимаю, как его найти. Поиска приложений нет, ни на телефоне, ни в интерфейсе (или я не нашел, где поиск, лол). Сказал ассистенту "найди приложение kion" (распозналось хорошо, в том числе kion латиницей), но ничего не нашлось.

Отлично! А оно интегрировано с помощником? То есть, можно сказать "включи мне такой-то канал" и оно включит его через KION? Дело в том, что у меня основной пользователь -- мама, ей уже очень много лет и для нее всё это тот еще квест. Сейчас у меня подключена приставка apple-tv, залоченная на приложении KION (чтобы мама не могла зайти не туда), но там для нее тоже всё не просто. Ищу вот альтернативы...

А каналы только от Смотрёшка доступны? Или можно подключить другие сервисы, KION, например?

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

Это немного другое. Если я правильно понимаю, idom просто генерирует HTML из python-кода. Я когда-то использовал питоновскую библиотеку Nagare, где это доведено до абсолюта, а код выполняется через систему continuations. Даже когда-то писал статью на Хабре про нее, но она куда-то пропала вместе со всем содержимым моего аккаунта.

там довольно небольшой трафик каждый раз, если не писать код функции на 10 экранов, конечно. В принципе, ничего не мешает заливать в клиента весь код сразу (в случае продакшен-версии), просто это пока не реализовано.

По нескольким причинам:

  1. Он мне нравится

  2. Для него есть self-hosted компилятор в JS (JSCL)

  3. Через систему макросов можно легко работать с исходным кодом функций, прозрачно передавая код browser-side функций компилятору JSCL

  4. REPL -- можно отлаживать приложение "в живую", не занимаясь постоянно компиляцией, сборкой, даже обновлять страницу не нужно -- я меняю функцию, перекомпилирую ее одним нажатием и вот у меня уже в браузере новая функция, сразу видно, что изменилось и как работает.

В принципе, я думаю, можно применить этот подход и к другим языкам, но будет не так удобно, как с Lisp. За исключением, может быть, питона -- существует реализация питона на Common Lisp, возможно, просто добавлением нескольких функций можно заставить питон так же точно работать. Но это уже другая история)

Information

Rating
2,258-th
Location
Москва и Московская обл., Россия
Registered
Activity

Specialization

CFD-моделирование
Lisp
Fortran
C
Latex
Прикладная математика
Python
SQL
Docker