Calque — калькулятор, который удобнее, чем консоль браузера

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

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

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

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

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

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



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

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

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



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

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

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

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

    UPDATE: Добавлена возможность копировать результаты.
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 89
    • +6
      Хорошо бы к операторам автоматически пробелы добавлять чтобы они с цифрами не слипались.
      • +6
        Эх, JS-кишки лезут наружу. Попробуйте назвать переменную constructor :)
        • +1
          Это особенно обидно на фоне того, что можно назвать переменную «if» или «return». То есть классических запретов нет, а специфические — есть.
          • 0
            while тоже не работает :)
        • +5
          Вы изобрели Mathcad:)
          • +1
            А лучше бы Mathematica :-)
            • +13
              Я крут, но не настолько.
              • 0
                Да ладно, уже лучше Mathcad'а работает :)
            • 0
              По-моему, он пока что изобрёл bc. Ну или максимум bc с подключёнными библиотеками, т.е. bc -l.
              • +3
                Были вещи и древнее маткада)
                Свежий скрин с телефона

                Последняя выпущенная версия 6.10 (2004 год), отлично бегает под Win7, ценю за скорость запуска, и минимализм в целом.
              • +3
                Реально круто! Огромное спасибо за инфо. Я уже несколько лет пользуюсь Soulver (программа для Mac OS). Но всегда хотел платформанезависимый аналог этого приложения.
                • +6
                  О, фича.
                  • +3
                    Отличная вещь.
                    PS: имперская система мер конечно вещь запутанная, но не настолько же:
                    image
                    • +1
                      Это просто погрешность плавающей запятой, а вывод честный без украшательтв.
                      • +1
                        В «железных» калькуляторах это обходится довольно просто — вычисления производятся с большей точностью, чем отображение на экран.
                        В итоге при выводе последний разряд округляется, и получаем адекватный результат.
                        • 0
                          В консоли можно включить вычисления с произвольной точностью
                          math.config({
                            number: 'bignumber',
                            precision: 64
                          });
                          

                          правда пропадает фича с единицами измерения
                      • 0
                        Хмм… у меня в Edge = 24.000000000000003
                        • 0
                          дык, floating point в последнем знаке vendor-dependent.
                      • +1
                        Волшебно!
                        Ещё добавить какой-нибудь способ делиться листом с расчётами (например, по урлу с хешем) — цены бы ему не было!
                        • +2
                          Можно сделать довольно просто: упаковывать всё содержимое textarea в base64, например, и подвешивать к урлу — для не очень длинных вычислений пойдёт, потом ещё через какой-нибудь сокращатель ссылок прогонять, чтобы в твит влезало :)
                          • +5
                            tinyurl.com/napqtzu

                            Вот набросал в блокноте, дольше возился с гитхабом :)
                            • +2
                              Теперь и с юникодом работает, если вдруг кому понадобится в калькулятора юникод :)
                              Форк тут: calcu.github.io
                              • 0
                                Здорово :)
                                • +2
                                  Не работает же

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

                                    А что юникодные имена переменных выдают ошибку в вычислениях, это претензии к автору оригинальной программы или Math.js, мопед не мой, я только возможность шаринга через URL прикрутил :)
                              • 0
                                Добавьте в примеры логические операторы, а то первым делом хочется "&&" и "||" попробовать, а они не работают.
                                • +2
                                  Есть «and» и «or», они работают.
                                • +1
                                  Офигенная вещь. Особенно, чтобы показывать небольшие расчеты в команде.
                                  Жаль, в sublime text такого нет, не хотите и туда плагин добавить?
                                  И вспоминая sublime — очень не хватает автодополнения названий переменных
                                  • –2
                                    • +3
                                      Консоль питона удобнее в качестве калькулятора (только для этого его и юзаю) + поддержка очень больших чисел в нём есть из коробки.
                                      • +1
                                        Особенно радует, что такой «умный калькулятор» можно носить в кармане, так как под андроид есть среда исполнения =)
                                    • +4
                                      Было бы здорово, если бы можно было выделять мышью не только выражение, но и результат, чтобы скопировать в буфер обмена.
                                      • +1
                                        Добавил такую возможность.
                                      • +5
                                        Идея отличная, набросал плюсики/минусики для изменения чисел. Если завтра руки дойдут доведу до нормального состояния и запушу
                                        • +4
                                          Было бы круто вместо плюсиков-минусиков повсюду сделать возможность выделять числа и увеличивать их значения стрелочками вверх и вниз.
                                          • 0
                                            причем я бы сразу предложил делать как в Nuke: там стрелочка меняет цифру _справа_ от курсора. Т.е. можно накрутить себе стрелками хоть тысячные, хоть десятки тысяч.
                                            • 0
                                              А ещё лучше — и колесом мыши тоже.
                                          • +1
                                            Классная штука, «джва года ждал». Ещё бы многострочные выражения поддерживать (например по Shift-Enter), чтобы матрицы можно было построчно вводить. И прямую сылку на документацию по функциям math.js
                                            • +2
                                              нужна фича: поддержка шестнадцатиричных лексем например 0xFС.
                                              • +3
                                                А почему результат скопировать нельзя?
                                                • 0
                                                  Самый главный минус. =(
                                                  • +1
                                                    Теперь можно!
                                                    • 0
                                                      grimalschi.github.io/calque/index.html — вот тут по прежнему нельзя. Или изменения в коде?
                                                      • 0
                                                        Я сделал копирование отдельных значений результатов — их можно выделять.
                                                    • 0
                                                      Вижу, результат в div, который в фоне расположен.
                                                      я бы сделал так:
                                                      Див + Textarea шириной допустим 400 пикселей, справа серый столбец шириной допустим 200, в который вставляется результат дублируется:
                                                      Выглядеть может как калькулятор в Win 10
                                                      Скриншот
                                                    • +2
                                                      Нужно такое же, но в терминале, с vi-управлением и ascii-кодами. :)
                                                      • +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
                                                        • 0
                                                          А разве в этой системе можно работать с составными величинами?
                                                          • 0
                                                            Это куда-то вот сюда: mathjs.org/examples/index.html
                                                            • 0
                                                              Спасибо, это в самом деле очень круто

                                                              Хм
                                                              image

                                                              P.S. какой-то баг хабра о_О. Я отправлял комментарий в корневую ветку комментариев.
                                                              • 0
                                                                Тот же результат для exp(pi*i)
                                                            • +2
                                                              Скроллинг textarea обрабатывается криво.
                                                              • +1
                                                                Осталось обернуть в MacGap и нарисовать иконку — будет клёвый десктопный калькулятор. Ну и копирование результата сделать…
                                                                • –1

                                                                  Ещё ++ и — не работают, к сожалению.
                                                                  • +1
                                                                    Копирование добавил.
                                                                    • +1
                                                                      Для мака уже есть numi.io
                                                                      • 0
                                                                        Конкуренция не повредит. ;)
                                                                    • 0
                                                                      Интересный ответ у выражения
                                                                      1 ' 0
                                                                      • +2
                                                                        Если б еще можно было результат скопировать — цены бы не было.
                                                                      • 0
                                                                        очень круто!

                                                                        но

                                                                        Это намеренно, или баг?
                                                                      • 0
                                                                        Для тех кто использует notepad++ есть похожий плагин NppCalc
                                                                        • 0
                                                                          отличная вещь)
                                                                          • +1
                                                                            Идея отличная.
                                                                            Голосую за стандалон версию (node-webkit?) и vim-навигацию.
                                                                            • 0
                                                                              Копировать результат к сожалению нельзя из-за перекрытия textarea
                                                                              • 0
                                                                                Текстовые блоки с результатом можно выделять мышкой.
                                                                                Удобно делать тройной клик по результату, чтобы он выделился.
                                                                                • 0
                                                                                  Или двойной, зависит от сложности результата.
                                                                                • 0
                                                                                  Поигрался немножко с math.js.

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

                                                                                    Увы :)
                                                                                    • 0
                                                                                      Очень здорово.
                                                                                      • 0
                                                                                        Попользовавшись один раз этим приложением, остаешься его любителем.

                                                                                        Спорное утверждение, я удалил Tydlig и оставил Soulver. Посмотрите ещё Calca, может больше понравится.
                                                                                        • +1
                                                                                          Порылся на оф.сайте — там есть тоже проект с удобным интерфейсом «Math Notepad»
                                                                                          Можно ссылки расшаривать, графики строить и т.д…

                                                                                          mathnotepad.com

                                                                                          По моему для студентов самое оно — и бесплатно! И дорабатывать/улучшать самим можно!!!
                                                                                          А тут на хабре постоянно рекламируют wolfram математику (платную), даже в ВУЗ ее закупили (недавно как раз обсуждали habrahabr.ru/company/wolfram/blog/262317)
                                                                                          • 0
                                                                                            Я обычно для такого использую эксель, но для яваскриптеров наверное подойдет, хотя у них и так консоль есть. Я чего-то не понимаю.
                                                                                            • 0
                                                                                              в консоли нет реактивности. а тут меняешь первую строку — всё пересчитывается
                                                                                              • 0
                                                                                                может, тогда консоль должна быть реактивной?
                                                                                                • +3
                                                                                                  Неожиданные реактивные выполнения команд, которые имеют побочные эффекты (например, удаляют какой-то файл на диске) — это последнее, что вы хотите от своей консоли.
                                                                                            • 0
                                                                                              А есть ли аналог Tydlig для Android? Данный сервис хороший, но печатать с телефона всё-таки не так удобно, как с клавиатуры.
                                                                                              • 0
                                                                                                Есть, Калькулятор++, например.
                                                                                                Он еще и опенсорсный.
                                                                                                • 0
                                                                                                  Вот, пожалуйста: Duktig
                                                                                                  Использует math.js и умеет всё, что умеет math.js. Дополнительно можно писать комментарии (//) и заголовки (# и ##).
                                                                                                  Для удобства ввода использовал кнопки из Калькулятора++, т.е. для ввода символа нужно тянуть кнопку вверх, вниз или вбок.
                                                                                                  Пользуйтесь на здоровье.
                                                                                                • 0
                                                                                                  интересно
                                                                                                  • –2
                                                                                                    Понравилось, добавлю в закладки)
                                                                                                    • 0
                                                                                                      Уравнения бы ещё.

                                                                                                      10 + x = 8 + 4
                                                                                                      x = 12
                                                                                                      • 0
                                                                                                        Писал когда то для себя, для того чтобы расписывать небольшие бюдежты — составляющие стоимости. Может кому тоже полезно будет: aroup.com/stringcalculator
                                                                                                        • +2
                                                                                                          В процессе обучения WinJS решил повторить это для Windows Phone 8.1, кому интересно может скачать приложение здесь. Все ссылки указаны на автора топика, большое ему спасибо.
                                                                                                          • +3
                                                                                                            А почему не сделали сразу и под Windows 10?
                                                                                                            • 0
                                                                                                              Спасибо за интерес, на крисмас запланировал переход на VS2015 и подготовлю приложение и для 10-ки.

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