← All posts tagged JavaScript

OCTAGRAM
программирование JavaScript Смотрю я на свой код шестилетней давности и не узнаю себя
if (nameDivSpanNext.nodeType == 3) {
Почему ==, а не ===, ещё как-то можно понять. Не убедил меня тогда ещё JS-Lint, что всё же двойное грешновато. Но почему не if (3 === nameDivSpanNext.nodeType) ?

Как сейчас помню, учил меня Каменский Никита Викторович в НГУ в птичьих языках программирования на всякий случай при сравнении ставить константу всегда влево. Я так и делаю, на птичьих языках — константа влево, а на нормальных языках — гордо ставлю вправо. НГУ был раньше, чем я писал скрипт. Я как будто забыл, а потом вспомнил. Странно это.
OCTAGRAM
web Java JavaScript CheerpJ как я заметил, уже вышел из закрытых альфа-тестов и находится в бете.

Те же разработчики, что делают Cheerp, транслятор C++ в JavaScript/Asm.js/WASM, делают CheerpJ для Java. Позиционируется он как нормально портированная Java. Никаких ограничений, как в GWT. Поддерживается байт-код. Поддерживаются Swing и Java-апплеты как с оффлайн конвертацией, так и в виде шима. Есть плагин для Хрома.
OCTAGRAM
web IE TGC обозреватели 15-10 лет назад…

Доминирует IE, с ним конкурирует… например, Maxthon, тоже на движке Trident.

В языке JavaScript трассирующая сборка мусора соседствует с полнейшим отсутствием поддержки слабых ссылок. Когда-нибудь эта пороховая бочка должна была бахнуть, и она бахнула. Разразился скандал про несобираемые цепочки из JavaScript и DOM элементов, во всяких jQuery появились разные костыли, заменяющие слабые ссылки. По результатам скандала в браузерах могли бы наконец появиться нормальные слабые ссылки, но не появились, зато производители бросили жирную кость поклонникам трассирующей сборки мусора, реализовав сборку циклов в FireFox и Internet Explorer. С тех пор о быстрых браузерах остались только воспоминания.

Будущий лидер веба известен в узких кругах красноглазиков. Браузер называется Konquerror, а движок — KHTML, и у его разработчиков даже и в мыслях нет, что они вытеснят вообще всех, кто на слуху: IE, Оперу, FireFox.
OCTAGRAM
наука РИНЦ ОбъектныеСистемы На конференции «Объектные системы» по-прежнему тихо. С виду. Если зимняя сессия 2015 опубликована здесь, то логично ожидать, что зимняя сессия 2016 будет здесь. А тут тоже пусто.
Но я тут сегодня зашёл через РИНЦ и узнал, что долгожданный сборник там появился. Без моей статьи. На странице сборника этого не видно, но можно зайти в любую статью и увидеть «Перейти на полный текст на внешнем сайте», защищённую JavaScript. Для получения ссылки нужно войти на elibrary, у меня там логин есть, я зашёл и получил ссылку на свёрстанный сборник. И там тоже моей статьи нет. Примечательно, что на странице 98 идёт агитация за доклады на декабрь 2017, то есть, в мае 2017го действительно какая-то заминка.
Выглядит, прямо скажем, некрасиво.
Ермаков Илья Евгеньевич, Заместитель директора, казенное учреждение Орловской области «Региональный центр оценки качества образования», Технический директор, НПО «Тесла», Россия, ОрёлЕго я видел на forum.oberoncore.ru . Ада и Оберон — это близко, значит, свой человек. При прочих равных скорее надо поддержать, чем нет.
Шалыто Анатолий Абрамович, д.т.н., проф., лауреат премии Правительства РФ в области образования, Заведующий кафедрой «Технологии программирования», Санкт-Петербургский государственный университет информационных технологий механики и оптики, Россия, Санкт-ПетербургЕго я знаю по мыслям об алгоритмах и программах, среди которых очень близок сердцу (и духу моего проекта) номер 18 про шоу-бизнес и разноцветные кирпичи. Мысли не его, но он на своей площадке поддержал их, значит, надо его поддержать.
С виду достойные люди, их присутствие в редколлегии склонило меня при выборе, где публиковаться, в пользу именно этой конференции. Так бы давно уже, где и раньше, опубликовался бы. Что это может быть?
1. Первейшее предположение моего научрука — что статью припрятали и будут публиковать без ссылок на меня, а, может, ещё и грантик попытаются выбить. Сделать — не сделают, а деньги получат. Он свидетелем таких историй был.
2. Мы с главредом в ноябре спорили при рецензировании, номерами карточек обменялись, я даже готов был возврат оргвзноса получить, но кончилось тем, что лимит страниц подняли, я статью увеличил, чтоб непосвящённым был контекст понятен, и её приняли. Вот, может быть, за кулисами редколлегия всё-таки передумала, а мне «забыли» сообщить, также «забыли» сборник напечатанный, хоть и без моей статьи, отправить, также «забыли», если не печатать сборник и не публиковать статью, то хоть оргвзнос вернуть, так я бы тоже понял, что статью там публиковать не будут, и побежал бы с ней в другой журнал.
3. Статью отложили на майскую сессию, майская не состоялась, и теперь она отложена вообще до следующего декабря.
4. В РИНЦе и на сайте черновик, который ещё будет дополнен и перевёрстан, либо дополнен не будет, но когда это решится, вот тогда-то мне и собирались это сообщить. Из-за того, что это черновик, на сайте до сих пор сборник нормально как новость не опубликован.

Я вообще не люблю лишний раз обращаться, особенно, когда нас таких много, но тут уже пора.
OCTAGRAM
? JavaScript Android iOS Дорогой жуйк, мне нужна помощь коллективного разума. Какой движок на JavaScript для мобильных платформ по опыту хороший? Не думал, что буду так интересоваться HTML5, но вот так в уме прикинул, чего стоит один раз запинать asm.js и попасть в каждый умный телевизор, и чего стоит запинать набор компиляторов под разные платформы, и ещё с GUI там пострадать, и подумал, что привязки изнутри asm.js к чему-то HTML5'ному были бы неплохим путём отступления. Будет плюсом, если через какой-нибудь Electron можно на компе запускать и получать осмысленное поведение.

Ангуляр не предлагать, я эту пакость как пользователь едва могу терпеть. SproutCore или что там сейчас у Apple, кто-нибудь видел?
OCTAGRAM
JavaScript ada RAII AdaMagic При преобразовании в C++ адские контролируемые типы проецируются на struct, при этом у них нет ни деструктора, ни перегруженной операции присваивания. Вместо этого компилятор оставляет в локальных контекстах rts_master_record, на которые навешиваются все контролируемые типы. Полагаю, это такое тяжёлое наследие ATC, на который в последних версиях компилятора GNAT, допустим, уже забили. Однако, в браузере, даже если я сам не использую ATC, вдруг то, что я написал, долго работало, и юзер нажал «остановить скрипт» — вот, пожалуйста, случился ATC. И AdaMagic сможет из этого выпутаться, при возврате управления понять, что и где нужно освободить. А на обычных платформах современный GNAT скомпилирует без этих штучек.
OCTAGRAM
Android Постучался заказчик, который год назад профинансировал покупку Андроид устройства. Пришлось-таки вернуться к вопросу оживления. Скачал SP Flash Tools. Забыл, что надо третью версию, а не пятую, пришлось потом переделывать. На сайте МТС прошивки не нашёл, пришлось на форуме 4PDA скачивать. В SPFT после загрузки разметки прошивки стояли галочки не на всех разделах, и эта штука, пока всё не поставишь, не хотела работать. Недостающие нашлись по соответствующим именам в архиве с прошивкой. __NODL_ в названии сделал их по умолчанию не перепрошиваемыми, а я что могу сделать, если без этого программа не работает? Так уж и быть, поставил галочки. На форуме 4PDA пишут, что перепрошивать PRELOADER и DSP_BL крайне не рекомендуется, только если устройство в состоянии кирпича, а что я могу сделать, если программа без этого не работает? Вот ей надо, чтобы все галочки стояли, и всё тут. И да, наверное, состояние кирпича — это про мой случай.
С разделами CACHE и USRDATA было посложнее. Их в прошивке не было. Думал, что же делать, придумал сдампить с самого устройства и потом так же и зашить обратно. Чтобы считать раздел с устройства, надо указать его начало и длину. В разбивке разделы перечислены один за другим, и известен только адрес начала. А размер, видимо, надо посчитать самому. С CACHE прошло успешно, а вот после USRDATA 0x4af4c000 идёт __NODL_RSV_OTP 0xffff0200. По аналогии с CACHE отнял одно от другого, начал дамп, долго ждал, сходил погулял. Наконец, смог проставить все галочки, и SP Flash Tools перестал меня посылать при попытке начать прошивку. Теперь другие проблемы начались. Места не хватает, видите ли. Включил логи, посмотрел, там сравнение размера идёт, и сумма размеров всех разделов не влезла в StorageSize=0X00000000E9000000. И как я должен был об этом узнать?
Ладно, пересчитал новый размер USRDATA с учётом того, что он должен упереться в 0xE9000000. Ещё подумал, что __NODL_RSV_OTP 0xffff0200 — это, должно быть, отрицательное смещение с конца, и надо на всякий случай уменьшить 0xE9000000, чтобы не перезатереть. Уменьшил. Перспектива ждать ещё пару часов, когда сдампится файлик другого размера, мне не улыбнулась, поэтому откромсал dd'шечкой кусок нужного размера.
Прошил. Заработало.

Пользуясь случаем, подписался в WeChat на Русский центр в ШПУ, филиал Русского мира в Сиане. Посмотрел, что там МРК постили на странице, которая вроде как для общения русских и китайцев позиционировалась, но по факту там всё на китайском. И у Русского центра та же история, правда тот ни на что такое не претендовал. Только Магазета в WeChat пишет по-русски.

Ещё увидел, что у QQ появилась английская версия приложения для мобильных устройств. Вот это интересно. У почты QQ вроде как есть IMAP, но я не смог к нему подключиться, а со всякими Яндексами есть другие проблемы, так что оповещение для почты QQ какое-то нужно. И даже английский интерфейс Qzone есть, в отличие от сайта Qzone, который на английский не переключить. Андроидное приложение Фрилансера приятно удивило тем, что снова пустило. В принципе, оно не не сильно нужно, но в браузере сайт Фрилансера перегружен жирными ангулярами, и в сочетании со сборкой мусора в JavaScript всё это люто тормозит. Вот откроешь вкладку со Фрилансером — уже понятно, что через какое время браузер начнёт люто фризить, «скрипт на странице не отвечает», и надо его перезагрузить. А для Андроид приложение нормальное, можно оставить в фоне. Печально, что на ПК вроде как писать приложение не очень обязательно, и приходится иметь дело с лютыми тормозами браузера, сборкой мусора, ангуляром.
OCTAGRAM
наука UX РИНЦ Пытаюсь зарегистрироваться в РИНЦ. Встречает меня развесистая анкета, заполняемая отчасти только через JavaScript, где рубрики, например. Куча обязательных полей. После нажатия «сохранить» пустая страница. Попытался залогиниться в другой вкладке, нет, я не зарегистрирован ещё. Проверил почту, пусто. Нажал на вкладке с пустой страницей «Назад», с неудовольствием заметил, что многие поля сбились, и их нужно заполнять по-новой. Включил инструменты разработчика (Ctrl+Shift+K), ещё раз заполнил эту анкету. А там, оказывается, ошибка 500. Ну офигеть теперь.
OCTAGRAM
время posix ada GNAT FILETIME Разобрался с конвертацией времени. Как выясняется, в GreyLink DC++ время хранится совсем не в том формате, в котором я подумал, а в FILETIME. Также выяснилось, что и FILETIME в Windows, и time_t в POSIX могут быть как с високосными секундами, так и без. FILETIME, похоже, с високосными секундами не встречается, но тут пишут, что это не исключено. time_t согласно POSIX.1 тоже не должен поддерживать их:
IEEE Std 1003.1-1988 (``POSIX.1'') legislates that a time_t value of 536457599 shall correspond to "Wed Dec 31 23:59:59 GMT 1986." This effectively implies that POSIX time_t's cannot include leap seconds and, therefore, that the system time must be adjusted as each leap occurs.… но я смотрю на маны posix2time и time2posix и вижу, что совместимость с POSIX где-то может быть сломана в угоду монотонности времени. Всегда надо уточнять, с високосными секундами время или нет, иначе будет разъезжаться на 25 секунд, и с каждым годом всё больше. Вот, допустим, MySQL поддерживает високосные секунды в полях TIMESTAMP, если работать с этими значениями через функцию UNIX_TIMESTAMP. Но как мы уже выяснили, подлинный UNIX time_t не содержит високосных секунд, значит, это может быть только модифицированный. И если вы создаёте значение инструментом, который не вставляет эти секунды, у вас время начнёт разъезжаться. Вот в JavaScript по стандарту временная шкала нелинейная, как и в POSIX.1. Но если POSIX.1 где-то нарушается, то, может быть, и EcmaScript тоже? Давайте проверим:
OCTAGRAM
время ada GNAT В GNAT Ada.Calendar.Time реализован как Long_Long_Integer в наносекундах, а 0 — это 2150й год. Правда, The Ada Epoch отсчитывается всё же от 1901го года, где ещё хватает разрядов для представления настолько малых чисел. И високосные секунды там учитываются (в отличие от времени UNIX и JavaScript), но мы, конечно, не можем знать, сколько их накопится к 2150му году, поэтому с их учётом адский «0» будет на несколько секунд позже Нового 2150го Года.
OCTAGRAM
web emscripten asmjs WebAssembly Поизучал предмет. Необходимость возврата управления, по видимому, невероятно серьёзная проблема. Есть emterpreter, но он не годится для интерпретации «всего», а только в режиме «белого списка», как в DOSBox. Но хорошо, что в emscripten есть способ относительно прозрачно сочетать emterpreter с обычным исполнением.

Неприятно было посмотреть, как сделана интеграция C++ с JavaScript. Главным образом — потому что там одиночные ссылки на объекты, а из–за бардака со счётчиками ссылок нет единого решения. Как я понял, научить любой конкретной реализации можно, но это уже получается не из коробки. Вот берём Objetive-C, и он уже лет 20 как со счётчиком ссылок для всех объектов, и любой потребитель/производитель знает, как делать этот подсчёт, а берём C++ — и там бардак, и берём WebIDL binder, и получаем интерфейс, где на объекты должна быть только одна сильная ссылка. Я на такое насмотрелся в Delphi, и мне это сильно не понравилось. Особенно тот момент, когда в Delphi 2009 или около сделали возможность заворачивать исключения в исключения, а чтоб завёрнутое исключение не уничтожилось, ему надо сделать AcquireException, то есть, у нас в одном языке появилось два способа подсчёта ссылок, один у TInterfacedObject, другой у Exception. А для многих объектов внятного управления памятью не было, и память замечательно текла, если программист что–то не рассчитал, положил в какой–нибудь TStrings, который счётчик ссылок не дёргает by design, и забыл. Или TComponentList, который тоже счётчик ссылок не дёргает, а сразу прибивает. Ещё раз такую петрушку наблюдать не хочется, пусть лучше сразу будет счётчик ссылок. Просто и понятно.

Objective-C в emscripten, к сожалению, не поддерживается. А так бы взять libdispatch, взять Reactive Extensions для Objective-C и что–нибудь бы получилось. Но нет. Пока там только геморрой.

При всей геморройности asm.js интересный. Если делать новый компилятор и заложить в нём поддержку этой платформы, это могло бы поспособствовать распространению.
OCTAGRAM
web C++ JavaScript emscripten Using C++ classes in JavaScript
Вычитал тут такое:
JavaScript will automatically garbage collect any of the wrapped C++ objects when there are no more references. If the C++ object doesn’t require specific clean up (i.e. it doesn’t have a destructor) then no other action needs to be taken.Это каким, интересно, образом, движок JavaScript залезет в кучу emscripten и пометит область памяти как неиспользуемую именно тем способом, каким это делает текущая версия аллокатора emscripten
OCTAGRAM
pascal JavaScript DOS Разобрался с JS-DOS
Я думал, он подвисает, а, оказывается, там что–то типа лимита на запущенные программы. Первой программой должен быть mount, второй программой — собственно программа, и если я во встроенном Z:\COMMAND.COM намылился выполнить многострочник, то ничего у меня не получится, после второй программы зависнет, а вот в NDOS.COM можно запихать команд сколько влезет.
Теперь осталось скрестить это с PasteBin (именно поэтому оно сначала компилируется, а потом запускается) и разместить по ключевым словам «Паскаль Онлайн». Страница по таким ключевым словам у меня давно была, на неё неплохо ломятся, только ни во что особенное она не вела.
OCTAGRAM
JavaScript wxwidgets wxWebView не богат на события, а задача состояла в том, чтобы сделать такое приложение, которое, если соблюсти ТЗ, будет состоять из сильно переплетённых нативных и скриптовых частей. Если из натива в скрипт ещё можно что–то посылать через RunScript, то обратно пришлось экспериментировать с EVT_WEBVIEW_NEWWINDOW, и он себя неплохо показал для этих целей. Можно в начале html прописать <base target="_blank" />, и все ссылки и даже формы вместо навигации будут вызывать это событие. Это даже лучше, чем JSONP через wxWebViewHandler
OCTAGRAM
HTML JavaScript IE MSHTA Некоторые факты об mshta.exe:
1. Помешать закрыть окно с не сохранёнными данными при помощи beforeunload не получится. Вопрос вылезет, но что ни отвечай, всё равно закроется. Это известный, признанный Microsoft баг.
2. setAttribute для динамически созданных элементов DOM вообще по боку. Только свойствами можно порулить поведением. Пришлось свои библиотечки адаптировать под эту инопланетную среду. Я всегда считал, что манипуляции с DOM первичны, а всякие свойства типа style — это нечто вроде синтаксического сахара. В mshta.exe всё наоборот.
3. Если checkbox вставляется в другой DOM элемент, его checked обнуляется.
4. Скрипт с type="text/javascript" не запустится
5. Свойства приложения описываются в теге HTA:APPLICATION, но никто не знает, какой URI у пространства имён HTA. Его просто нет, и он рвёт шаблоны зияющей пустотой своего отсутствия.
6. Пока не нашёл работающего способа сделать background-size: cover. Библиотеки, которые должны работать даже в IE7, не могут в mshta.exe
7. Динамически навесить обработчик события, записанный строкой, не получится. Подойдёт только настоящее замыкание.

Есть и положительная сторона. Я давно не видел, чтоб что–то браузерное так быстро работало. Electron такого ощущения не давал.