Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет dibr ([info]dibr)
@ 2012-08-23 21:37:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
калькулятор
     Несколько недель назад возжелал я "калькулятор, похожий на античный GWBASIC, но чтобы не монстр-пакет типа маткада". Предложений напредлагали много, первичную фильтрацию прошло мало... а сейчас, после какого-то времени реального использования, выяснилось, что из предложенного прижилось (то есть, оказалось удобным мне).
     А удобным оказался, внезапно - написанный [info]david_m@lj "чисто из интереса вот прям тогда" калькулятор на JS. Интерфейс "интутивно понятен", единственное из неочевидного - в калькуляторе сделана переменная "_", хранящая результат вычислений предыдущей строчки.
     Лично меня, как хромоюзера, порадовала хромовая возможность "создать ярлык приложения" ("Настройки → Инструменты → Создать ярлыки приложения") - при этом получается отдельная иконка, запускающаяся в отдельном окошке, и выглядящая так, будто это вообще не хром, а и правда отдельное приложение (в результате "калькулятор" не теряется в куче открытых хромоокон).

     "Мелкие скриптики" побеждают! :-)


(Добавить комментарий)


[info]xelenka@lj
2012-08-23 14:45 (ссылка)
а прикольно, что если вернуться на несколько срочек назад и изменить, то он пересчитывает все, что ниже - даже не спрашивая

(Ответить) (Ветвь дискуссии)


[info]xelenka@lj
2012-08-23 14:47 (ссылка)
а еще можно было бы добавить вызов более ранних результатов. раз уж _ - предыдущий результат, можно было бы сделать _х - результат х-той строки.

(Ответить) (Уровень выше)


[info]xelenka@lj
2012-08-23 14:51 (ссылка)
и еще интересно, что за функция x^y.
она ему знакома, результат выдает, но я что-то не могу ее опознать :)

вообще интересно.
работает и просто ^x
и результат зависит от предыдущих строк

+х и -х тоже дают какой-то результат, зависящий от предыдущих строк.

а мануал к нему есть?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 14:57 (ссылка)
Побитный xor, похоже. Степень по другому делается - pow(a,b) :-)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]xelenka@lj
2012-08-23 15:03 (ссылка)
похоже, да
осталось понять, что с унарными +-^ :)
пока не получается догадаться :)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 15:11 (ссылка)
Да, что-то загадочное :-) JS я знаю не настолько, чтобы понять, что там при этом происходит :-)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]bolk@lj
2012-08-23 15:20 (ссылка)
Нет там никакого унарного ^. Это xor с предыдущим результатом.

(Ответить) (Уровень выше)


[info]david_m@lj
2012-08-23 15:25 (ссылка)
А можно примеры конкретных выражений?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]xelenka@lj
2012-08-23 15:34 (ссылка)
в принципе, похоже на сложение с предыдущим и вычитание из предыдущего. но не всегда :)
1:+1
1
2:+3
4
3:+5
9 //пока все логично
4:^4
13 //ну наверное, не проверяла
5:+1
12 //а вот здесь уже не очень понятно. вместо сложения - вычитание
6:+2
14 //опять все нормально
7: ^3
13
8: +2
11 // опять вычитание вместо сложения
9: -6
-15 //а что тут - я вообще не понимаю

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-08-23 15:46 (ссылка)
Круто! Я примерно понимаю, почему так, но всё равно круто:)

Попробую исправить.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]xelenka@lj
2012-08-23 16:54 (ссылка)
у xor'а самый низкий приоритет? :)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-08-23 17:10 (ссылка)
Да фиг его знает. Суть в том, что строки вообще склеиваться не должны:)

Починил уже.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]xelenka@lj
2012-08-23 17:14 (ссылка)
тот, что по ссылке, все равно склеивает
1+10
11
*2
21

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-08-23 17:15 (ссылка)
Возможно, надо понажимать ctrl+f5. И отдельно открыть http://hiero.ru/david/webtools/calc-worker.js и на нём тоже понажимать.

Сорри — для себя писал, так что удобств маловато:)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]xelenka@lj
2012-08-23 17:18 (ссылка)
теперь так:
1+10
11
*2
Error: undefined

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-08-23 17:19 (ссылка)
Во-о. Это правильно.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]vpluto@lj
2012-08-23 23:09 (ссылка)
Вот только после любой ошибки в вводе калькулятор превращается в тыкву :(
1+10
11
*2
Error: unexpected_token
5+5
Error at line 2

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-08-24 03:07 (ссылка)
Это нормальное поведение — последующие строки могут зависеть от предыдущих, и если в предыдущих ошибка, то последующие непонятно как считать.

(Ответить) (Уровень выше)


[info]dibr@lj
2012-08-23 15:40 (ссылка)
Ой, а можно, тсзть, "пользуясь случаем, попросить"?
Мы тут внезапно выяснили, что если его сохранить на диск (save as, "webpage, complete") - оно после этого с диска не работает.
А можно сделать локальную версию (можно из нескольких файлов), чтобы работала без сети? А то случаи всякие бывают... :-)

Спасибо :-))

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-08-23 15:43 (ссылка)
Там надо скачать http://hiero.ru/david/webtools/calc-worker.js и положить рядом с calc.html.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 16:02 (ссылка)
Что-то у меня всё совсем странно.
http://hiero.ru/david/webtools/calc.html при "save as" предлагает сохраниться как JSCalc.htm (берет имя из title, вероятно), после этого не работает. Если сохранить как calc.html - тоже не работает. calc-worker.js лежит рядом, jquery-1.7.2.min.js и prism.js - в *_files.

При этом у меня откуда-то взялся файл calc.html (откуда? ранняя версия?), который работает, но несколько отличается по содержимому от JSCalc.htm.

"Я запутался" :-)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-08-23 16:23 (ссылка)
Так. Похоже, это я всё-таки виноват…

Во-первых, вот ссылка на архив со всеми файлами, нужными для работы: http://ge.tt/6zArjUM/v/0?c

Во-вторых (плохая новость) с локального диска этот архив работать не будет. Потому что там используются web worker-ы, а они локально не работают. Старый ваш calc.html — он воркеров не использует, поэтому может работать с диска.

В общем, в текущем виде автономного режима не получается — мне надо будет над этим поработать.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-08-23 16:26 (ссылка)
Это я просто после нашего разговора ударился в эксперименты и поломал локальность — потому что не думал, что оно реально будет полезно.

(Ответить) (Уровень выше)


[info]dibr@lj
2012-08-23 16:29 (ссылка)
Спасибо! Подтверждаю: с диска не работает, с локального веб-сервера - работает.
Ладно, пока буду так использовать - если действительно приспичит обойтись без сети, есть старая версия...

(Ответить) (Уровень выше)


[info]unreal_undead@lj
2012-08-24 04:41 (ссылка)
> Потому что там используются web worker-ы
Я. в общем то, за параллелизм всегда и везде...но зачем оно в калькуляторе???

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-08-24 04:43 (ссылка)
Воркер используется в качестве песочницы для пользовательских вычислений (скриптов по сути). Я хотел сделать возможность сохранять вычисления и как-то делиться ими, а для этого их надо выполнять в безопасной среде. Ну вот среду сделал, а остальное нет:)

(Ответить) (Уровень выше)


[info]unreal_undead@lj
2012-08-24 04:38 (ссылка)
Но при этом если ошибиться с вводом - перестаёт считать новые выражения, пока старую строчку не поправишь.

(Ответить) (Уровень выше)


[info]termsl@lj
2012-08-23 14:47 (ссылка)
Его скачать можно куда-нибудь?

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 14:55 (ссылка)
Ээээ... на жёсткий диск? Ну там, правая кнопка, "save as", или как именно в твоём браузере?
В-общем, суть проблемы не понял: у меня всё сохраняется, и при запуске с диска работает.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]termsl@lj
2012-08-23 15:12 (ссылка)
Дык вопрошаю попробовав - не работат сохраненный. Хром последний.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 15:20 (ссылка)
Хм. У меня, оказывается, тоже. Но работало же!
Ушёл разбираться...

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]termsl@lj
2012-08-23 15:37 (ссылка)
Свисни, если получится, а я тут прожку ваяю, чтобы по команде управлять интерфейсами цисок из под винды.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 15:42 (ссылка)
Попросил автора, у него всяко быстрее получится разобраться :-)

(Ответить) (Уровень выше)


[info]dibr@lj
2012-08-23 16:09 (ссылка)
Всё ещё веселей: у меня есть старая сохранённая версия - она работает. И новая - она не работает. О как.
Пока разбираемся, в чём дело - вот старая версия (проверял под хромом):
http://dibr.homenet.org/temp/jscalc.rar
Будет работать новая - напишу :-)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]termsl@lj
2012-08-23 16:16 (ссылка)
Спасиб

Хрень какая-то:
45-44
1
+10
11
*2
21 (ДВАДЦАТЬ ОДЫН)))

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 16:21 (ссылка)
http://dibr.livejournal.com/509011.html?thread=6806867#t6806867

А сколько должно-то быть? Ты же "_" не использовал :-)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]termsl@lj
2012-08-23 16:44 (ссылка)
45-44
1
+10 плюс 10, ожидаемо 11- ок
11
*2 умножить на 2 одиннадцать, ожидаю 22
21 получаю 21


да _*2 = 22, но не явно и неожиданно...

(Ответить) (Уровень выше)


[info]xelenka@lj
2012-08-23 16:52 (ссылка)
а это он, похоже, не к последнему результату применяет, а интерпретирует все как одно выражение. при этом у умножения получается выше приоритет и получается не (1+10)*2, как ожидалось, а 1+(10*2)

(Ответить) (Уровень выше)


[info]dibr@lj
2012-08-23 15:35 (ссылка)
Хм. Подтверждаю - после сохранения не работает, поковырявшись - так и не понял, почему. А я, оказывается, по ошибке создал application shortcut прямо на сетевую версию - она работает :-(

(Ответить) (Уровень выше)


[info]termsl@lj
2012-08-23 15:17 (ссылка)
И что-то у меня в хроме нет создать ярлык приложения ..

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 15:37 (ссылка)
У меня оно выглядит так:

Image

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]termsl@lj
2012-08-23 15:41 (ссылка)
Спасиб, а я в настройках лазил, хром такой хром))

(Ответить) (Уровень выше)


[info]constdr@lj
2012-08-23 15:05 (ссылка)
Всегда под рукой:
http://www.gnu.org/software/bc/bc.html

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 15:15 (ссылка)
Таких "интерактивных вычислялок" десятки, и почему они меня не устраивают как калькулятор, обсуждалось ещё тогда, три недели назад.
Хотя как язык - вполне возможно нормально.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]constdr@lj
2012-08-23 15:23 (ссылка)
Честно говоря я его исключительно как калькулятор использую. Тупой и без заморочек.
IMHO, "язык" в калькуляторе -- лишнее. Проще воспользоваться чем-то более естественным, типа python shell, или пару строчек в перле написать.

ps: sorry, я похоже пропустил предыдущее обсуждение.

(Ответить) (Уровень выше)


[info]albom85@lj
2012-08-23 15:10 (ссылка)
Интересный калькулятор. Возьму на заметку (может с мобильника будет работать). А вообще использую Smallbasic. Только не майкрософтский, а вот этот:
http://smallbasic.sourceforge.net/
Сначала использовал на своём Palm z22, а сейчас использую как под виндой, так и в линухе.

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 15:17 (ссылка)
Ух ты, какая штучка!
Как "калькулятор" не катит (ибо язык, и надо жать "run"), но возьму на заметку. Жаль, современные мобильные платформы (винда, андроид) отсутствуют...

(Ответить) (Уровень выше)


[info]bolk@lj
2012-08-23 15:22 (ссылка)
http://habrahabr.ru/company/apps4all/blog/147574/

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 15:38 (ссылка)
Оу. Мне-то надо было "для писюка", но надо будет попробовать :-)

(Ответить) (Уровень выше)


[info]avryabov@lj
2012-08-23 15:41 (ссылка)
он же не локальный - 3 куска снаружи грузит.
жаль.

(Ответить)


[info]akm_nn@lj
2012-08-23 18:41 (ссылка)
уйду в оффтопик:
вот не понимаю я как эта хромовская бня в виде "url как приложение" работает! вот есть у меня такой ярлык на гмыл, в гмыле есть три аккаунта, внутри "ярлыка приложения", будучи залогиненным, я нажимаю "войти в другой", открывается отдельная вкладка, там логинюсь, всё хорошо, но основное окно "приложения" - тоже перелогинивается на вторичный акк. и пока из всех аккаунтов не выйдешь - основной в отдельном окне не вернешь. рукожопие какое-то, правда не исключено что с моей стороны.

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 18:51 (ссылка)
Как обычное окно/вкладка, только "особого внешнего вида". Отсюда всё и проистекает - раз это просто окно, значит куки и прочая сайтоспецифичная инфа у него общая с остальными вкладками/окнами, а значит если ты перелогинился там - ты перелогинился везде.

Для подобных штучек (несколько сессий одновременно) в хроме есть Incognito Window - его куки не пересекаются с куками других окон, и там можно держать отдельную сессию (или несколько отдельных сессий, в нескольких отдельных incognito windows), но я сомневаюсь, что можно сделать incognito application shortcut...

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: Ответ на ваш комментарий к записи "калькулятор"
[info]akm_nn@lj
2012-08-23 18:54 (ссылка)

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

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-08-23 19:02 (ссылка)
Вкладок - не "инкогнито", обычных?
Тогда я не понимаю, как они это смогли сделать :-) Точнее, мысли есть, но они странные (не в URL же информацию об авторизации прятать).
У меня в гугле только один аккаунт, поэтому перепроверить не могу.
Ну, а почему с отдельным окном так - я думаю, потому, почему я написал. Но как бороться - непонятно...

(Ответить) (Уровень выше)


[info]david_m@lj
2012-08-25 18:37 (ссылка)
Вы можете иметь несколько аккаунтов в Хроме. Это делается в chrome://chrome/settings/ через «Добавить пользователя».

(Ответить) (Уровень выше)


[info]unreal_undead@lj
2012-08-24 04:37 (ссылка)
Меня вполне фаровский плагин устраивает, запущенный FAR под рукой всегда имеется.

(Ответить)


[info]david_m@lj
2012-08-25 18:29 (ссылка)
http://jscalc.net/
Там же ссылка на гитхаб, откуда можно скачать архив (и да, он будет работать локально).

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2012-08-25 18:42 (ссылка)
Ура! Спасибо :-)
В хроме, опере и ФФ работает, в msie (у меня) не завелось, ну да и фиг с ним :-)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-08-25 18:44 (ссылка)
В опере и ff не будут (вероятно) работать файловые операции, плюс там не будет безопасного выполнения скриптов (но это для личного пользования не так важно).

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-08-25 18:52 (ссылка)
> В опере и ff не будут (вероятно) работать файловые операции

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

(Ответить) (Уровень выше)