Автор Тема: OberonJS  (Прочитано 1494 раз)

vlad

  • Hero Member
  • *****
  • Сообщений: 1388
    • Просмотр профиля
Re: OberonJS
« Ответ #60 : Февраль 20, 2017, 03:40:07 pm »
Это плохая идея, так как компилятор пол мегабайта весит :)

Ты так говоришь, как будто пол гигабайта ;) Я не специалист в Web и не знаю как такие проблемы решаются правильно с текущими технологиями, но одно из существующих/проверенных решений это добавление хэша к имени файла скрипта. Естественное это подразумевает какую-то автоматизацию сборки сайта.

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 66
    • Просмотр профиля
Re: OberonJS
« Ответ #61 : Февраль 21, 2017, 09:09:27 am »
Создал тебе issue на GitHub. А обновлять надо с Ctrl+F5, чтобы весь кэш обновился.

Фикснул. Но возможно еще будут какие-то похожие штуки вылазить - сообщай плз.
А с кэшем надо что-то делать - иначе у других пользователей такая же проблема будет.
Спасибо, обновил компилятор. Вот еще проблема есть. Не понимаю почему в режиме публикации зависает скрипт...
https://models.molpit.org/ready/52
В режиме редактирования все нормально работает при этом. И дерево нормально работает:
https://models.molpit.org/ready/51
Такое ощущение, что проблема возникает с теми модулями, где используются шрифты.

С кэшем кажется была проблема из-за такого конфига сервера:
        location ~* \.(html|jpg|jpeg|gif|png|ico|css|js)$ {
                expires       30d;
                add_header    Cache-Control public;
        }

Закомментировал пока эти инструкции.

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 66
    • Просмотр профиля
Re: OberonJS
« Ответ #62 : Февраль 21, 2017, 09:31:04 am »
С проблемой зависания вроде разобрался, не совсем корректно передаю JS через ajax. Поэтому ++ в цикле пропал.

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 66
    • Просмотр профиля
Re: OberonJS
« Ответ #63 : Февраль 21, 2017, 12:18:23 pm »
Ох уж эти web технологии. Стоит добавить букву o или число Пи, как программы перестают нормально кодироваться в base64.

Может кто-то знает метод?!

Пока лучшее, что я нашел это вот такая функция.
function b64EncodeUnicode(str) {
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
        return String.fromCharCode('0x' + p1);
    }));
}

vlad

  • Hero Member
  • *****
  • Сообщений: 1388
    • Просмотр профиля
Re: OberonJS
« Ответ #64 : Февраль 21, 2017, 02:26:31 pm »
Может кто-то знает метод?!

Ты гуглил? ;) Из общих соображений и для проверки правильного понимания концепций: base64 это кодировка для бинарей, перед тем как ее использовать надо текст перегнать в бинарь, чтобы текст перегнать в бинарь надо определиться в какой кодировке будет этот текст будучи в бинаре (UTF8?).

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 66
    • Просмотр профиля
Re: OberonJS
« Ответ #65 : Февраль 21, 2017, 03:05:47 pm »
Может кто-то знает метод?!

Ты гуглил? ;) Из общих соображений и для проверки правильного понимания концепций: base64 это кодировка для бинарей, перед тем как ее использовать надо текст перегнать в бинарь, чтобы текст перегнать в бинарь надо определиться в какой кодировке будет этот текст будучи в бинаре (UTF8?).
Да, много часов потратил на эти поиски. UTF8 подойдет, да.

encodeURIComponent как раз вроде перегоняет в бинарь.
http://ecmanaut.blogspot.ru/2006/07/encoding-decoding-utf8-in-javascript.html
« Последнее редактирование: Февраль 21, 2017, 03:09:30 pm от Ivan Denisov »

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 66
    • Просмотр профиля
Re: OberonJS
« Ответ #66 : Февраль 21, 2017, 03:12:19 pm »
вот так заработало!

function b64EncodeUnicode(str) {
    return btoa(unescape(encodeURIComponent(str)));
}

Сейчас еще проверю на задачке Дагаева.

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 66
    • Просмотр профиля
Re: OberonJS
« Ответ #67 : Февраль 21, 2017, 03:13:19 pm »
Не работает все равно :(

function Draw(){
D.SetFont("Times New Roman");
D.String("Это высказывание ложно", 50, 100, 40);
D.String("ЭтЈ4,</script>

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 66
    • Просмотр профиля
Re: OberonJS
« Ответ #68 : Февраль 21, 2017, 03:49:42 pm »
Вот вроде есть рецепт тут, и тоже не работает :(
https://scotch.io/tutorials/how-to-encode-and-decode-strings-with-base64-in-javascript

vlad

  • Hero Member
  • *****
  • Сообщений: 1388
    • Просмотр профиля
Re: OberonJS
« Ответ #69 : Февраль 21, 2017, 03:53:00 pm »
вот так заработало!

Да, это типа рекомендованный способ. Видимо проблема где-то в другом месте.

vlad

  • Hero Member
  • *****
  • Сообщений: 1388
    • Просмотр профиля
Re: OberonJS
« Ответ #70 : Февраль 21, 2017, 04:10:08 pm »
Вот эти две функции работают с русскими буквами и прочими пи в моем хроме:
function encode( s ) {
  return btoa( unescape( encodeURIComponent( s ) ) );
}
function decode( s ) {
  return decodeURIComponent( escape( atob( s ) ) );
}

encode("варпваπ");
"0LLQsNGA0L/QstCwz4A="

decode("0LLQsNGA0L/QstCwz4A=")
"варпваπ"

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 66
    • Просмотр профиля
Re: OberonJS
« Ответ #71 : Февраль 21, 2017, 04:21:42 pm »
Мне кажется я перемудрил. Достаточно простого encodeURIComponent для кода и он нормально передается через ajax запрос... а опыт сегодняшнего дня с base64 забуду как страшный сон

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 66
    • Просмотр профиля
Re: OberonJS
« Ответ #72 : Февраль 21, 2017, 04:26:57 pm »
Влад, а тут Comdiv интересовался, почему проверка индексов так много времени занимает?
Он пример накидал, что разница в 10 раз получается:
https://models.molpit.org/model/59

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 66
    • Просмотр профиля
Re: OberonJS
« Ответ #73 : Февраль 22, 2017, 12:52:00 am »
Добавил обработчики мыши, получился слайдер
https://models.molpit.org/model/52

В целом осталось добавить базовые преобразователи, доработать модуль работы со строками и можно говорить про некую альфа-версию :-)

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 66
    • Просмотр профиля
Re: OberonJS
« Ответ #74 : Февраль 22, 2017, 02:21:26 am »
Влад, я сделал модуль для базовых операций со строками. Но вот ASSERT когда срабатывает, нельзя ли указывать в какой он процедуре сработал?