Приветствую.

Существует приложение для iOS — Tydlig, которое буквально переосмысливает калькулятор, и делает его потрясающе удобным. Попользовавшись один раз этим приложением, остаешься его любителем.

Однако для бытового использования на десктопе ничего удобнее, чем консоль браузера, по моему мнению, нет. В консоли можно использовать переменные, функции, работать с выражениями как с текстом — выделять, копировать и вставлять. Это удобно, и многие годы консоль верно заменяла мне калькулятор даже для самых простых операций.

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

Поиск чего-то похожего на Tydlig ничего не дал, и было принято решение писать свое приложение.

Что из этой затеи получилось:



Откуда идея? Идея не моя. Впервые подобное я увидел в LightTable. Затем отображение промежуточных результатов вычислений появилось в инструментах для разработчика Google Chrome.

Я лишь взял идею, нашел подходящую математическую библиотеку (Math.js), и написал удобный интерфейс.

Работает все следующий образом:



Весь интерфейс — текстарея с прозрачным фоном, под которой находится контейнер с результатами.

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

Буду рад, если приложение окажется полезным не только мне. Спасибо!

Попробовать в живую: http://grimalschi.github.io/calque/index.html
Ссылка на ГитХаб: https://github.com/grimalschi/calque/

UPDATE: Добавлена возможность копировать результаты.

Комментарии (86)


  1. E_STRICT
    05.08.2015 19:31
    +6

    Хорошо бы к операторам автоматически пробелы добавлять чтобы они с цифрами не слипались.


  1. eyeless_watcher
    05.08.2015 20:06
    +6

    Эх, JS-кишки лезут наружу. Попробуйте назвать переменную constructor :)


    1. ruikarikun
      05.08.2015 20:59
      +1

      Это особенно обидно на фоне того, что можно назвать переменную «if» или «return». То есть классических запретов нет, а специфические — есть.


      1. Woodroof
        06.08.2015 16:59

        while тоже не работает :)


  1. kalmarius
    05.08.2015 20:11
    +5

    Вы изобрели Mathcad:)


    1. vintage
      05.08.2015 20:20
      +1

      А лучше бы Mathematica :-)


      1. grimalschi
        05.08.2015 20:32
        +13

        Я крут, но не настолько.


        1. tzlom
          05.08.2015 21:31

          Да ладно, уже лучше Mathcad'а работает :)


    1. mikhailian
      05.08.2015 22:00

      По-моему, он пока что изобрёл bc. Ну или максимум bc с подключёнными библиотеками, т.е. bc -l.


    1. Jban
      06.08.2015 00:11
      +3

      Были вещи и древнее маткада)
      Свежий скрин с телефона

      Последняя выпущенная версия 6.10 (2004 год), отлично бегает под Win7, ценю за скорость запуска, и минимализм в целом.


  1. esudnik
    05.08.2015 20:23
    +3

    Реально круто! Огромное спасибо за инфо. Я уже несколько лет пользуюсь Soulver (программа для Mac OS). Но всегда хотел платформанезависимый аналог этого приложения.


  1. Coob
    05.08.2015 20:43
    +6

    О, фича.


  1. kornerz
    05.08.2015 20:48
    +3

    Отличная вещь.
    PS: имперская система мер конечно вещь запутанная, но не настолько же:
    image


    1. Mirn
      05.08.2015 20:50
      +1

      Это просто погрешность плавающей запятой, а вывод честный без украшательтв.


      1. kornerz
        05.08.2015 22:24
        +1

        В «железных» калькуляторах это обходится довольно просто — вычисления производятся с большей точностью, чем отображение на экран.
        В итоге при выводе последний разряд округляется, и получаем адекватный результат.


        1. standy
          05.08.2015 22:54

          В консоли можно включить вычисления с произвольной точностью

          math.config({
            number: 'bignumber',
            precision: 64
          });
          

          правда пропадает фича с единицами измерения


    1. Danov
      05.08.2015 22:27

      Хмм… у меня в Edge = 24.000000000000003


      1. mickvav
        11.08.2015 21:08

        дык, floating point в последнем знаке vendor-dependent.


  1. Abyasov
    05.08.2015 20:58
    +1

    Волшебно!
    Ещё добавить какой-нибудь способ делиться листом с расчётами (например, по урлу с хешем) — цены бы ему не было!


    1. Goodkat
      05.08.2015 21:26
      +2

      Можно сделать довольно просто: упаковывать всё содержимое textarea в base64, например, и подвешивать к урлу — для не очень длинных вычислений пойдёт, потом ещё через какой-нибудь сокращатель ссылок прогонять, чтобы в твит влезало :)


    1. Goodkat
      05.08.2015 23:57
      +5

      tinyurl.com/napqtzu

      Вот набросал в блокноте, дольше возился с гитхабом :)


    1. Goodkat
      06.08.2015 03:48
      +2

      Теперь и с юникодом работает, если вдруг кому понадобится в калькулятора юникод :)
      Форк тут: calcu.github.io


      1. maxim_ge
        06.08.2015 10:31

        Здорово :)


      1. Georg
        06.08.2015 18:22
        +2

        Не работает же

        image


        1. Goodkat
          06.08.2015 18:30

          Работает же, смотрите в адресной строке — можете скопировать URL, вставить его в другом браузере, и там откроется тот же самый текст.
          В первой версии юникод не «сохранялся» в адресной строке, так как btoa() работает только с ASCII.
          Если без юникода, то URL будет короче.

          А что юникодные имена переменных выдают ошибку в вычислениях, это претензии к автору оригинальной программы или Math.js, мопед не мой, я только возможность шаринга через URL прикрутил :)


  1. ruikarikun
    05.08.2015 21:03

    Добавьте в примеры логические операторы, а то первым делом хочется "&&" и "||" попробовать, а они не работают.


    1. grimalschi
      05.08.2015 21:04
      +2

      Есть «and» и «or», они работают.


  1. nightrain912
    05.08.2015 21:49
    +1

    Офигенная вещь. Особенно, чтобы показывать небольшие расчеты в команде.
    Жаль, в sublime text такого нет, не хотите и туда плагин добавить?
    И вспоминая sublime — очень не хватает автодополнения названий переменных



  1. Longer
    05.08.2015 23:10
    +3

    Консоль питона удобнее в качестве калькулятора (только для этого его и юзаю) + поддержка очень больших чисел в нём есть из коробки.


    1. Beltoev
      05.08.2015 23:13
      +1

      Особенно радует, что такой «умный калькулятор» можно носить в кармане, так как под андроид есть среда исполнения =)


      1. olekl
        06.08.2015 12:14

        А можно подробнее?


        1. Beltoev
          06.08.2015 12:33
          +1

          Конечно: qpython.com


  1. roodz
    05.08.2015 23:11
    +4

    Было бы здорово, если бы можно было выделять мышью не только выражение, но и результат, чтобы скопировать в буфер обмена.


    1. grimalschi
      06.08.2015 12:04
      +1

      Добавил такую возможность.


  1. Levsha128
    06.08.2015 01:06
    +5

    Идея отличная, набросал плюсики/минусики для изменения чисел. Если завтра руки дойдут доведу до нормального состояния и запушу


    1. grimalschi
      06.08.2015 12:11
      +4

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


      1. damat
        07.08.2015 04:21

        причем я бы сразу предложил делать как в Nuke: там стрелочка меняет цифру _справа_ от курсора. Т.е. можно накрутить себе стрелками хоть тысячные, хоть десятки тысяч.


      1. StreetStrider
        07.08.2015 10:36

        А ещё лучше — и колесом мыши тоже.


  1. Bronx
    06.08.2015 08:32
    +1

    Классная штука, «джва года ждал». Ещё бы многострочные выражения поддерживать (например по Shift-Enter), чтобы матрицы можно было построчно вводить. И прямую сылку на документацию по функциям math.js


  1. yrouban
    06.08.2015 09:00
    +2

    нужна фича: поддержка шестнадцатиричных лексем например 0xFС.


  1. ainu
    06.08.2015 09:11
    +3

    А почему результат скопировать нельзя?


    1. silvansky
      06.08.2015 10:06

      Самый главный минус. =(


    1. grimalschi
      06.08.2015 12:05
      +1

      Теперь можно!


      1. ainu
        06.08.2015 13:00

        grimalschi.github.io/calque/index.html — вот тут по прежнему нельзя. Или изменения в коде?


        1. grimalschi
          06.08.2015 13:04

          Я сделал копирование отдельных значений результатов — их можно выделять.


    1. ainu
      06.08.2015 12:59

      Вижу, результат в div, который в фоне расположен.
      я бы сделал так:
      Див + Textarea шириной допустим 400 пикселей, справа серый столбец шириной допустим 200, в который вставляется результат дублируется:
      Выглядеть может как калькулятор в Win 10
      Скриншот


  1. StreetStrider
    06.08.2015 09:30
    +2

    Нужно такое же, но в терминале, с vi-управлением и ascii-кодами. :)


  1. sabio
    06.08.2015 10:00
    +2

    Ещё можно добавить сокращённую запись: ln(x) = log(x, e) и lg(x) = log(x, 10)
    И поддержку конвертации «составных» величин: m/s to km/h
    А ещё было бы здорово — календарную арифметику: 2015-08-06 — 2015-08-03 и 18:00 — 204 m


    1. Danov
      06.08.2015 12:11

      А разве в этой системе можно работать с составными величинами?


    1. Keyten
      06.08.2015 13:34

      Это куда-то вот сюда: mathjs.org/examples/index.html


    1. Keyten
      06.08.2015 13:39

      Спасибо, это в самом деле очень круто

      Хм
      image

      P.S. какой-то баг хабра о_О. Я отправлял комментарий в корневую ветку комментариев.


      1. Bronx
        07.08.2015 08:16

        Тот же результат для exp(pi*i)


  1. AMDmi3
    06.08.2015 10:07
    +2

    Скроллинг textarea обрабатывается криво.


  1. silvansky
    06.08.2015 10:07
    +1

    Осталось обернуть в MacGap и нарисовать иконку — будет клёвый десктопный калькулятор. Ну и копирование результата сделать…


    1. silvansky
      06.08.2015 10:10
      -1


      Ещё ++ и — не работают, к сожалению.


    1. grimalschi
      06.08.2015 12:05
      +1

      Копирование добавил.


    1. bayandin
      06.08.2015 19:35
      +1

      Для мака уже есть numi.io


      1. silvansky
        07.08.2015 10:52

        Конкуренция не повредит. ;)


  1. cruzo
    06.08.2015 10:22

    Интересный ответ у выражения
    1 ' 0


  1. lasalas
    06.08.2015 10:35
    +2

    Если б еще можно было результат скопировать — цены бы не было.


    1. grimalschi
      06.08.2015 12:11

      Уже можно.


  1. gen4
    06.08.2015 10:57

    очень круто!

    но

    Это намеренно, или баг?


    1. grimalschi
      06.08.2015 11:06

      Намеренно. Вот полное описание синтаксиса: mathjs.org/docs/expressions/syntax.html


  1. RinOS
    06.08.2015 11:25

    Для тех кто использует notepad++ есть похожий плагин NppCalc


  1. AStek
    06.08.2015 13:02

    отличная вещь)


  1. Miklos
    06.08.2015 14:36
    +1

    Идея отличная.
    Голосую за стандалон версию (node-webkit?) и vim-навигацию.


  1. c4boomb
    06.08.2015 16:15

    Копировать результат к сожалению нельзя из-за перекрытия textarea


    1. grimalschi
      06.08.2015 16:16

      Текстовые блоки с результатом можно выделять мышкой.
      Удобно делать тройной клик по результату, чтобы он выделился.


    1. grimalschi
      06.08.2015 16:17

      Или двойной, зависит от сложности результата.


  1. Keyten
    06.08.2015 16:45

    Поигрался немножко с math.js.

    image


  1. Woodroof
    06.08.2015 17:04

    fn(x) = x * fn(0) + 1
    fn(2) // RangeError: Maximum call stack size exceeded

    Увы :)


  1. Yggaz
    06.08.2015 19:02

    Очень здорово.


  1. Vyazovoi
    06.08.2015 19:36

    Попользовавшись один раз этим приложением, остаешься его любителем.

    Спорное утверждение, я удалил Tydlig и оставил Soulver. Посмотрите ещё Calca, может больше понравится.


  1. FreeMind2000
    06.08.2015 21:06
    +1

    Порылся на оф.сайте — там есть тоже проект с удобным интерфейсом «Math Notepad»
    Можно ссылки расшаривать, графики строить и т.д…

    mathnotepad.com

    По моему для студентов самое оно — и бесплатно! И дорабатывать/улучшать самим можно!!!
    А тут на хабре постоянно рекламируют wolfram математику (платную), даже в ВУЗ ее закупили (недавно как раз обсуждали habrahabr.ru/company/wolfram/blog/262317)


  1. Shablonarium
    07.08.2015 10:11

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


    1. Guria
      11.08.2015 10:27

      в консоли нет реактивности. а тут меняешь первую строку — всё пересчитывается


      1. Shablonarium
        18.08.2015 14:09

        может, тогда консоль должна быть реактивной?


        1. StreetStrider
          19.08.2015 00:40
          +3

          Неожиданные реактивные выполнения команд, которые имеют побочные эффекты (например, удаляют какой-то файл на диске) — это последнее, что вы хотите от своей консоли.


  1. antoo
    08.08.2015 04:12

    А есть ли аналог Tydlig для Android? Данный сервис хороший, но печатать с телефона всё-таки не так удобно, как с клавиатуры.


    1. pav5000
      18.08.2015 18:35

      Есть, Калькулятор++, например.
      Он еще и опенсорсный.


    1. serso
      19.08.2015 13:55

      Вот, пожалуйста: Duktig
      Использует math.js и умеет всё, что умеет math.js. Дополнительно можно писать комментарии (//) и заголовки (# и ##).
      Для удобства ввода использовал кнопки из Калькулятора++, т.е. для ввода символа нужно тянуть кнопку вверх, вниз или вбок.
      Пользуйтесь на здоровье.


  1. Kilovat_energii
    11.08.2015 11:22

    интересно


  1. Amikko
    17.08.2015 14:05
    -2

    Понравилось, добавлю в закладки)


  1. Serabas
    18.08.2015 07:14

    Уравнения бы ещё.

    10 + x = 8 + 4
    x = 12


  1. Olegi4
    19.08.2015 23:16

    Писал когда то для себя, для того чтобы расписывать небольшие бюдежты — составляющие стоимости. Может кому тоже полезно будет: aroup.com/stringcalculator