kalker/README.md

120 lines
5.7 KiB
Markdown
Raw Permalink Normal View History

2021-05-28 16:20:13 +02:00
![](logo.png)
2020-06-12 01:08:07 +02:00
2021-06-02 22:32:30 +02:00
Kalker (or "kalk") is a calculator program/website that supports user-defined variables, functions, derivation, and integration. It runs on Windows, macOS, Linux, Android, and in web browsers (with WebAssembly).
2021-06-04 22:12:08 +02:00
[![Crates.io](https://img.shields.io/crates/v/kalker)](https://crates.io/crates/kalker) ![npm](https://img.shields.io/npm/v/@paddim8/kalk) [![GitHub](https://img.shields.io/github/license/PaddiM8/kalk)](https://github.com/PaddiM8/kalker/blob/master/LICENSE) [![Docs.rs](https://docs.rs/kalk/badge.svg)](https://docs.rs/kalk/latest/kalk/) ![Build status](https://img.shields.io/github/workflow/status/PaddiM8/kalker/Rust?event=push&label=build%20%26%20test)
2021-05-28 16:20:13 +02:00
2022-05-23 13:01:22 +02:00
[Kanban](https://kolan.strct.net/Board/4RAdMjLDz) | [Website - Try it out here!](https://kalker.xyz)
2020-06-04 19:57:48 +02:00
2022-01-01 17:02:11 +01:00
<img src="preview.png" width="750">
2021-09-24 21:40:45 +02:00
# Features
2021-05-18 19:48:13 +02:00
* Operators: `+`, `-`, `*`, `/`, `!`
2022-06-03 00:21:53 +02:00
* Groups: `()`, `[]`, `⌈ceil⌉`, `⌊floor⌋`
* [Vectors](https://kalker.xyz/#vectors): (x, y, z, ...)
* [Matrices](https://kalker.xyz/#matrices): [x, y, z; a, b, c; ...]
* [Pre-defined functions and constants](https://kalker.xyz/#functions)
* User-defined functions and variables. `f(x, y) = xy`, `x = 5`
2022-06-03 00:21:53 +02:00
* Root finding using Newton's method (eg. x^2 = 64). Note: estimation and limited to one root
2021-06-02 22:32:30 +02:00
* Derivative of functions (derivatives of noisy functions or of higher order can be a bit inaccurate). `f'(2)`, `sin'(-pi)`
* Integration. `∫(0, pi, sin(x) dx)` or `∫(0, π, sin(x) dx)`, maybe sometimes be slightly off
* Understands fairly ambiguous syntax. Eg. `2sin50 + 2xy`
* Syntax highlighting
2022-01-01 17:02:11 +01:00
* Special-symbol completion on tab. Eg. write `sqrt` and press tab. It will be turned into `√`
2020-06-12 01:12:36 +02:00
* Sum function: `sum(start, to, expression)` Eg. `sum(1, 3, 2n+1)` is the same as `2*1+1 + 2*2+1 + 2*3+1` = `15`
2022-01-01 17:02:11 +01:00
* Piecewise functions: `f(x) = { f(x + 1) if x <= 1; x otherwise }`, pressing enter before typing the final `}` will make a new line without submitting
* Load a file including predefined functions and constants. For example, if you're going to use kalker for physics, you load up your file with physics functions/constants when starting kalker. This is done either using the `-i file` flag or by putting files in a certain directory and then doing `load filename` inside kalker. [More about files here](https://kalker.xyz/#files)
* Different number bases: Either with a format like `0b1101`, `0o5.3`, `0xff` or a format like `1101_2`. The latter does not support letters, as they would be interpreted as variables
* Misc: separate expressions by a semicolon to write them on the same line, use the `ans` variable to get the value of the previously calculated expression
2020-06-04 19:57:48 +02:00
2021-09-24 21:40:45 +02:00
# Installation
2021-09-24 21:40:45 +02:00
## Package managers
2021-05-18 19:48:13 +02:00
2021-09-24 21:40:45 +02:00
### macOS
`brew install kalker`
2021-09-24 21:40:45 +02:00
### Arch Linux
`kalker` in the AUR, eg. `yay -S kalker`
2021-05-18 19:48:13 +02:00
2021-09-24 21:40:45 +02:00
### Nix/NixOS
2021-09-24 16:45:25 +02:00
Kalker is available through [`nixpkgs`](https://search.nixos.org/packages?channel=unstable&show=kalker&from=0&size=50&sort=relevance&type=packages&query=kalker).
The most up to date version is also available as a [`flake`](https://search.nixos.org/flakes?channel=unstable&show=kalker&from=0&size=50&sort=relevance&type=packages&query=kalker).
2022-06-04 07:33:28 +02:00
### NetBSD
2022-06-04 07:39:06 +02:00
Kalker is available from the [`official repositories`](https://pkgsrc.se/math/kalker),
2022-06-04 07:33:28 +02:00
`pkgin install kalker`
2021-09-24 21:40:45 +02:00
## Binaries
2021-05-18 19:48:13 +02:00
2021-06-02 22:32:30 +02:00
Pre-compiled binaries for Linux, Windows, and macOS (64-bit) are available in the [releases page](https://github.com/PaddiM8/kalker/releases).
2021-05-18 19:48:13 +02:00
2021-09-24 21:40:45 +02:00
## Compiling
2021-05-18 19:48:13 +02:00
2020-12-14 10:23:20 +01:00
**Minimum rust version: v1.36.0**. Make sure you have `diffutils` `gcc` `make` and `m4` installed. **If you use windows:** [follow the instructions here](https://docs.rs/gmp-mpfr-sys/1.2.3/gmp_mpfr_sys/index.html#building-on-windows) (don't forget to install `mingw-w64-x86_64-rust` in MSYS2).
2021-09-24 21:40:45 +02:00
### Cargo
2021-05-18 19:48:13 +02:00
2021-06-02 22:32:30 +02:00
Run `cargo install kalker`
2021-09-24 21:40:45 +02:00
### Manually
2021-05-18 19:48:13 +02:00
2021-06-02 22:32:30 +02:00
1. Go into the `cli` directory.
2. Run `cargo build --release`
3. Grab the binary from `targets/release`
2021-09-24 21:40:45 +02:00
# Donation
2022-05-23 13:01:22 +02:00
Kalker is completely free and open source. If you wish to support further development of Kalker and contribute towards it one day getting published on the Google Play Store, you can do so here: [PayPal](https://paypal.me/oliverwaldemar)
2021-09-24 21:40:45 +02:00
# Libraries
There are currently three different libraries related to kalker.
* [kalk](https://crates.io/crates/kalk): The Rust crate that powers it all.
* [@paddim8/kalk](https://www.npmjs.com/package/@paddim8/kalk): JavaScript bindings for `kalk`. This lets you use it in the browser thanks to WebAssembly.
* [@paddim8/kalk-component](https://www.npmjs.com/package/@paddim8/kalk-component): A web component that runs `@paddim8/kalk`, which let's you use kalk in the browser with a command line-like interface.
2021-09-24 21:40:45 +02:00
# Syntax
2021-05-18 19:48:13 +02:00
2022-06-03 00:21:53 +02:00
A more complete reference can be found on [the website](https://kalker.xyz).
2021-09-24 21:40:45 +02:00
## Functions
2021-05-18 19:48:13 +02:00
**Defining:** name(parameter1, parameter2, ...) = expression\
2022-05-23 13:01:22 +02:00
**Example:** $ f(x) = 2x+3 $
2021-05-18 19:48:13 +02:00
**Using:** name(argument1, argument2)\
2022-05-23 13:01:22 +02:00
**Example:** $ f(2) $
2021-09-24 21:40:45 +02:00
## Variables
2021-05-18 19:48:13 +02:00
**Defining:** name = expression\
2022-05-23 13:01:22 +02:00
**Example:** $ x = 3 $
2021-05-18 19:48:13 +02:00
**Using:** name\
2022-05-23 13:01:22 +02:00
**Example:** $ x $
2021-09-24 21:40:45 +02:00
# Contributing
2021-06-02 22:32:30 +02:00
## kalk and cli (Rust)
2021-05-18 19:48:13 +02:00
2021-10-06 00:07:10 +02:00
After making changes to the kalk library (in `kalk/`), you can easily try them out by going to the root of the project directory, and doing `cargo run`. This will start kalker (cli), with the new changes. If you're using Windows, you will need to [follow the instructions here](https://docs.rs/gmp-mpfr-sys/1.2.3/gmp_mpfr_sys/index.html#building-on-windows), but also make sure to install `mingw-w64-x86_64-rust` in MSYS2.
All Rust code is expected to be formatted with `rustfmt
2021-06-02 22:32:30 +02:00
## web (Svelte, TypeScript, Sass)
Run:
1. `npm install`
2. `npm run dev` - this will automatically re-compile the project when changes are made
2021-06-02 22:32:30 +02:00
## mobile (Android)
Run:
1. `npm install`
2. `npm run build`
3. `npx cap sync`
4. Build the project using Android Studio, or Gradle directly.