GithubHelp home page GithubHelp logo

numworks / epsilon Goto Github PK

View Code? Open in Web Editor NEW
1.7K 1.7K 457.0 63.02 MB

Modern graphing calculator operating system.

Home Page: https://www.numworks.com/resources/engineering/software/

Makefile 1.20% C++ 69.33% Ruby 0.02% HTML 0.10% C 24.31% GDB 0.02% Awk 0.01% Assembly 0.01% Python 3.00% Java 1.69% Objective-C++ 0.07% JavaScript 0.17% Shell 0.05% CSS 0.01%

epsilon's People

Contributors

0b101 avatar adriweb avatar artaxxx avatar arthurnumworks avatar boricj avatar claire-savinas avatar coco33920 avatar critor avatar daffyb avatar debrouxl avatar ecco avatar emilienumworks avatar felixnumworks avatar gabrielnumworks avatar gregnumworks avatar hugonumworks avatar ian-abbott avatar jacobly0 avatar leanumworks avatar marcnumworks avatar martijnnumworks avatar mathieunumworks avatar nsajko avatar pianumworks avatar redgl0w avatar robertanumworks avatar rubennumworks avatar serenelanumworks avatar vardai avatar zardam avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

epsilon's Issues

Add option to use the indicator LED to display charging status.

It is common for USB-charged devices with internal LiPo batteries to have an externally visible LED (often dual-color) that users can view at a glance to determine charge status. Many NumWorks users will have their devices closed or covered while charging so it may be difficult to quickly determine the charge status.

Since the RGB LED is available, and can be viewed when the case is closed, it may be beneficial to use it as a charge indicator for the battery. There are a number of different ways it can be illuminated for this purpose, e.g. blinking while charging, solid when charged, or red when charging, green when charged, etc.

Not all users are going to want to see a charge LED at all, so it would be a good idea to allow users to enable or disable the charge LED from the settings applet.

SHIFT activated icon ?

I see that alpha does have one when pressed on the top right bar, is it possible to add one for shift too ?

Pressing empty keys causes crashs

Some keys are empty, I guess that's because the layout doesn't match the physical one and then are useless.

If any one of the empty keys are pressed, the app crash with error:

app.elf: escher/src/run_loop.cpp:34: bool RunLoop::step(): Assertion `event.isDefined()' failed.

Change the toolbox icon on keyboard

This icon is supposed to be a toolbox. However it also looks like a printer icon, which is what I and jacobly0 thought it was (and probably many others).

If you want to keep the toolbox, angling the edges like this should be enough to not mistake the handle for a sheed of paper.

However, since you've mentioned you base your design on smartphones, why not use the menu icon from android? It would be more recognizable.

Division Remainder issue

Try to compute
rem(100000000000, 10) -> returns undef

Maybe in division_remainder.cpp :
replace if (isnan(f1) || isnan(f2) || f1 != (int)f1 || f2 != (int)f2)
with if (isnan(f1) || isnan(f2) || f1 != (int64_t)f1 || f2 != (int64_t)f2) ?

Same goes for the quotient

gcd(10^10,5) returns undef

It can be fixed by using long long instead of int (overflow happens for integers larger than 2^53 instead of 2^31), with the following code in poincare/src/great_common_divisor.cpp

template<typename T>
Evaluation<T> * GreatCommonDivisor::templatedEvaluate(Context& context, AngleUnit angleUnit) const {
  Evaluation<T> * f1Input = m_args[0]->evaluate<T>(context, angleUnit);
  Evaluation<T> * f2Input = m_args[1]->evaluate<T>(context, angleUnit);
  T f1 = f1Input->toScalar();
  T f2 = f2Input->toScalar();
  delete f1Input;
  delete f2Input;
  long long upper=(1LL<<53);
  if (f1>upper || -f1>upper || f2>upper || -f2>upper || isnan(f1) || isnan(f2) || f1 != (long long)f1 || f2 != (long long)f2) {
    return new Complex<T>(Complex<T>::Float(NAN));
  }
  long long a = f2,b = f1,r;
  while(b!=0){
    r = a -std::floor(double(a)/b)* b; // a%b and a/b not supported on ARM
    a = b;
    b = r;
  }
  if (a<0) a=-a; // insure positive gcd if b=0
  return new Complex<T>(Complex<T>::Float(std::round((T)a)));
}

Reverse Polish Notation (RPN) input

A nice feature would be to have RPN mode. It's not a popular feature in calculators nowadays, but it can be very useful in understand how stacks work and how early calculators would work.

License forbids modification, but pull requests accepted

Hello!

First of all, I want to thank you for reaching out and attempting to open up one of the most classic areas of non-free, dated software -- calculators.

The license you chose, however, is not merely non-free (in the sense of freedom), but not open source. CC-BY-ND-NC forbids anyone from making modifications to your source code -- even though you state in your project's README that you welcome contributions and that pull requests are accepted.

This means everyone who submits a pull request to you is technically infringing on your copyrights. If your goal is to allow active contributions from the community, I suggest switching to another software license. CC-BY-NC-SA is still "non-free", but it would at least stop up the problem of active infringement while still forbidding other commercial uses.

That being said, I do highly suggest considering a more free software license such as the GPL. This would allow you to continue to benefit from other people's work on epsilon, including other companies who might want to (for example) build support for their products into epsilon. (Wolfram Alpha on your calculator? Yes please!)

Issues building the simulator on Windows

I ran into a bunch of issues when trying to build the simulator on windows:

  • Full dependency list for a clean msys2 install, which should be updated in the sdk docs:
    • 32-bit: pacman -S mingw-w64-i686-gcc mingw-w64-i686-freetype mingw-w64-i686-fltk git make bison python
    • 64-bit: pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-freetype mingw-w64-x86_64-fltk git make bison python
  • There should be a native msys/mingw toolchain that has SFLAGS = -D_USE_MATH_DEFINES and EXE = exe yet uses the native gcc or clang.
  • In the liba bridge, it tests __GLIBC__ to add strlcpy, but windows needs the same thing.
    • As far as I can tell, only BSD and BSD support libraries have strlcpy.
  • On windows, alloca is defined in malloc.h instead of alloca.h.
    • A liba bridge include could be used to redirect alloca.h to malloc.h on windows and the next alloca.h elsewhere.
  • python/src/py/nlrx86.c just doesn't compile on 32-bit windows, but this is possibly an upstream issue.

Inliner silently fails on MSYS2

Inliner will successful compile (on the travis branch) but failed silently when run, meaning no CPP/H files are generated and the build fails overall

gdb: unknown target exception 0xc0000008 at 0x77c36b12

Thread 1 "inliner" received signal ?, Unknown signal.
0x77c36b12 in ntdll!EtwDeliverDataBlock () from /c/WINDOWS/SYSTEM32/ntdll.dll
(gdb) backtrace
#0  0x77c36b12 in ntdll!EtwDeliverDataBlock () from /c/WINDOWS/SYSTEM32/ntdll.dll
#1  0x77c14258 in ntdll!RtlEnterCriticalSection () from /c/WINDOWS/SYSTEM32/ntdll.dll
#2  0x77c14175 in ntdll!RtlEnterCriticalSection () from /c/WINDOWS/SYSTEM32/ntdll.dll
#3  0x77a68eb3 in unlock () from /c/WINDOWS/System32/msvcrt.dll
#4  0x77a792ef in msvcrt!fread () from /c/WINDOWS/System32/msvcrt.dll
#5  0x77a79288 in msvcrt!fread () from /c/WINDOWS/System32/msvcrt.dll
#6  0x68d4f600 in ?? () from /mingw32/bin/libpng16-16.dll
#7  0x68d590fb in ?? () from /mingw32/bin/libpng16-16.dll
#8  0x68d4a448 in ?? () from /mingw32/bin/libpng16-16.dll
#9  0x00401378 in main ()

[simulator] Navigation keys repeated

When using the navigation keys, the key is repeated a lot of times, on home like it's impossible to do "right" key to use Functions, the right key repeats and it jumps to Parameters.

Inside the Calc apps, doing "up" will do the same, jumping on top instead of just the previous row.

Linking fails with relocation errors

Building on Ubuntu 17.04 64bit.

Building with LC_ALL=C make PLATFORM=simulator VERBOSE=1, final LD fails.
I removed the @ from LD line to get command, and also stripped the number of lines since they are all the same error.

CXX     escher/src/timer.o
CXX     escher/src/view.o
CXX     escher/src/view_controller.o
CXX     escher/src/warning_controller.o
CXX     escher/src/window.o
LD      app.elf
clang++ liba/src/bridge.o --stripped all others .o-- apps/exam_icon.o `fltk-config --ldflags` -o app.elf
/usr/bin/ld: ion/src/simulator/init.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: ion/src/simulator/display/fltklcd.o: relocation R_X86_64_32S against symbol `_ZTV7FltkLCD' can not be used when making a shared object; recompile with -fPIC
--stripped all others ones--
/usr/bin/ld: final link failed: Nonrepresentable section on output
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:88: recipe for target 'app.elf' failed
make: *** [app.elf] Error 1

SDK doc: make dfu_flash or app_flash ?

When trying to do a make dfu_flash I got an error :

$ LC_ALL=C make dfu_flash
LD      dfu.elf
ion/src/device/boot/rt0.o: In function `start':
rt0.cpp:(.text.start+0x32): undefined reference to `ion_app()'
Makefile:88: recipe for target 'dfu.elf' failed
make: *** [dfu.elf] Error 1

It looks like it's app_flash instead, which launched dfu-util and flashed the calc.

Will we be able to add applications coded in C/asm?

On Casio calculators, you can code an application (called addin) in C (or any language that compiles to asm), that is transferred on the storage memory and disabled in exam mode. I think it's the same on TI.

This feature would be very useful, because while some applications would benefit being incorporated into the OS (such as Eigenmath, geometry app, physics app), since the storage memory isn't unlimited it'd be better if the users could choose which apps they could add. And I don't think you'd accept my pull request of my sokoban game coded sloppily :p

Also, you could add a slot for an SD card in order to add more apps, if the flash is small.

[apps/graphing] Find an intersection point between 2 functions?

Some popular calculators (such as Ti-84 Plus) have a "find intersection" ability that finds the point of intersection between 2 or more functions. Is this possible with Epsilon? I've noticed some strings (Intersection, SelectLowerBound, SelectUpperBound) in the i18n file, but they don't seem to be used. Is this a planned feature? It would be very useful in my Algebra 2 class.

sum() function doesn't work

Doing sum(3,4,6) will return undef instead of 9. I tried some other variations but they still return undef.

License might not allow contributions.

Disclaimer: I'm not a lawyer, and this is assembled from my own, humble, legal knowledge. Correct me if I'm wrong.

The README states:

We welcome contributions. For smaller changes just open a pull request straight away.

However, the whole code is licensed under CC-BY-NC-ND, which does not allow derivative works. Setting a side that CC licenses are not designed with software in mind, a "derivative work" is not defined by the CC-BY-NC-ND, but states the following conditions in section 2.a.1:

  1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:

A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and
B. produce and reproduce, but not Share, Adapted Material for NonCommercial purposes only.

Emphasis are mine. Which can be interpreted that a fork with modifications is in violation of the license, because the material has been "adapted" and/or "modified" (therefor, a derivative work has been created) and is being actively distributed. Contributing by patches seems therefor impossible.

Various possible solutions come to mind (in no particular order):

  • Remove the suggestion to contribute and state clearly that modifications are not allowed under the license.
  • Extend the license to explicitly allow forks and patches (note that this might require the consent of all contributors).
  • Drop the ND requirement (note that his will require the consent of all contributors).
  • Change to a software license, like the GPL (note that his will require the consent of all contributors).

Epsilon changelog

It would be very nice to have, perhaps on the NumWorks blog, a changelog on each new version release (with a link from the workshop).

And in this particular context of having an open-source software, mentioning the external contributors that participated in this version would encourage even more contributions :)

For a more technical changelog, I suppose a git log will be enough... Although there are some fancy tools to make it look nice.

Simulator build/run on macOS failing

Just getting started here...

Trying to build and run epsilon simulator on macOS 10.12.6. Followed (excellent) instructions on the web site to install the homebrew requirements. The build appears to succeed but the simulator fails to launch with the following:

lucky13:epsilon dean$ make clean;make PLATFORM=simulator;make app_run
CLEAN
HOSTCC  kandinsky/fonts/rasterizer
RASTER  kandinsky/src/small_font.h kandinsky/src/small_font.c
RASTER  kandinsky/src/large_font.h kandinsky/src/large_font.c
BISON   poincare/src/simplify/rules_generation/rules_parser.cpp
HOSTCC  poincare/src/simplify/rules_generation/rules_parser.o
FLEX    poincare/src/simplify/rules_generation/rules_lexer.cpp
HOSTCC  poincare/src/simplify/rules_generation/rules_lexer.o
HOSTCC  poincare/src/simplify/rules_generation/node.o
HOSTCC  poincare/src/simplify/rules_generation/rule.o
HOSTLD  poincare/src/simplify/rules_generation/rulegen
RULEGEN poincare/src/simplify/rules.cpp
FLEX    poincare/src/expression_lexer.cpp poincare/src/expression_lexer.hpp
BISON   poincare/src/expression_parser.cpp poincare/src/expression_parser.hpp
poincare/src/expression_parser.y: conflicts: 7 reduce/reduce
QSTRDAT python/port/genhdr/qstrdefs.generated.h
HOSTCC  escher/image/inliner
INLINER apps/calculation/calculation_icon.cpp
CXX     apps/calculation/calculation_icon.o
INLINER apps/graph/graph_icon.cpp
CXX     apps/graph/graph_icon.o
INLINER apps/on_boarding/logo_icon.cpp
CXX     apps/on_boarding/logo_icon.o
INLINER apps/probability/probability_icon.cpp
CXX     apps/probability/probability_icon.o
INLINER apps/probability/images/binomial_icon.cpp
CXX     apps/probability/images/binomial_icon.o
INLINER apps/probability/images/calcul1_icon.cpp
CXX     apps/probability/images/calcul1_icon.o
INLINER apps/probability/images/calcul2_icon.cpp
CXX     apps/probability/images/calcul2_icon.o
INLINER apps/probability/images/calcul3_icon.cpp
CXX     apps/probability/images/calcul3_icon.o
INLINER apps/probability/images/calcul4_icon.cpp
CXX     apps/probability/images/calcul4_icon.o
INLINER apps/probability/images/exponential_icon.cpp
CXX     apps/probability/images/exponential_icon.o
INLINER apps/probability/images/focused_binomial_icon.cpp
CXX     apps/probability/images/focused_binomial_icon.o
INLINER apps/probability/images/focused_calcul1_icon.cpp
CXX     apps/probability/images/focused_calcul1_icon.o
INLINER apps/probability/images/focused_calcul2_icon.cpp
CXX     apps/probability/images/focused_calcul2_icon.o
INLINER apps/probability/images/focused_calcul3_icon.cpp
CXX     apps/probability/images/focused_calcul3_icon.o
INLINER apps/probability/images/focused_calcul4_icon.cpp
CXX     apps/probability/images/focused_calcul4_icon.o
INLINER apps/probability/images/focused_exponential_icon.cpp
CXX     apps/probability/images/focused_exponential_icon.o
INLINER apps/probability/images/focused_normal_icon.cpp
CXX     apps/probability/images/focused_normal_icon.o
INLINER apps/probability/images/focused_poisson_icon.cpp
CXX     apps/probability/images/focused_poisson_icon.o
INLINER apps/probability/images/focused_uniform_icon.cpp
CXX     apps/probability/images/focused_uniform_icon.o
INLINER apps/probability/images/normal_icon.cpp
CXX     apps/probability/images/normal_icon.o
INLINER apps/probability/images/poisson_icon.cpp
CXX     apps/probability/images/poisson_icon.o
INLINER apps/probability/images/uniform_icon.cpp
CXX     apps/probability/images/uniform_icon.o
INLINER apps/regression/regression_icon.cpp
CXX     apps/regression/regression_icon.o
INLINER apps/sequence/sequence_icon.cpp
CXX     apps/sequence/sequence_icon.o
INLINER apps/settings/settings_icon.cpp
CXX     apps/settings/settings_icon.o
INLINER apps/statistics/stat_icon.cpp
CXX     apps/statistics/stat_icon.o
INLINER apps/code/code_icon.cpp
CXX     apps/code/code_icon.o
INLINER apps/exam_icon.cpp
CXX     apps/exam_icon.o
CXX     apps/calculation/app.o
CXX     apps/calculation/calculation.o
CXX     apps/calculation/calculation_store.o
CXX     apps/calculation/edit_expression_controller.o
CXX     apps/calculation/history_view_cell.o
CXX     apps/calculation/history_controller.o
CXX     apps/calculation/local_context.o
CXX     apps/calculation/scrollable_expression_view.o
CXX     apps/calculation/selectable_table_view.o
CXX     apps/calculation/text_field.o
CXX     apps/graph/app.o
CXX     apps/graph/cartesian_function.o
CXX     apps/graph/cartesian_function_store.o
CXX     apps/graph/function_title_cell.o
CXX     apps/graph/graph/banner_view.o
CXX     apps/graph/graph/curve_parameter_controller.o
CXX     apps/graph/graph/graph_controller.o
CXX     apps/graph/graph/graph_view.o
CXX     apps/graph/list/list_controller.o
CXX     apps/graph/values/derivative_parameter_controller.o
CXX     apps/graph/values/function_parameter_controller.o
CXX     apps/graph/values/values_controller.o
CXX     apps/home/app.o
CXX     apps/home/app_cell.o
CXX     apps/home/controller.o
CXX     apps/hardware_test/app.o
CXX     apps/hardware_test/arrow_view.o
CXX     apps/hardware_test/battery_test_controller.o
CXX     apps/hardware_test/keyboard_test_controller.o
CXX     apps/hardware_test/keyboard_view.o
CXX     apps/hardware_test/led_test_controller.o
CXX     apps/hardware_test/pattern.o
CXX     apps/hardware_test/pattern_view.o
CXX     apps/hardware_test/pop_up_controller.o
CXX     apps/hardware_test/reset_controller.o
CXX     apps/hardware_test/screen_test_controller.o
CXX     apps/hardware_test/usb_test_controller.o
CXX     apps/on_boarding/app.o
CXX     apps/on_boarding/language_controller.o
CXX     apps/on_boarding/logo_controller.o
CXX     apps/on_boarding/logo_view.o
CXX     apps/on_boarding/update_controller.o
CXX     apps/probability/app.o
CXX     apps/probability/calculation/calculation.o
CXX     apps/probability/calculation/discrete_calculation.o
CXX     apps/probability/calculation/left_integral_calculation.o
CXX     apps/probability/calculation/right_integral_calculation.o
CXX     apps/probability/calculation/finite_integral_calculation.o
CXX     apps/probability/calculation_controller.o
CXX     apps/probability/cell.o
CXX     apps/probability/image_table_view.o
CXX     apps/probability/law/binomial_law.o
CXX     apps/probability/law/exponential_law.o
CXX     apps/probability/law/law.o
CXX     apps/probability/law/normal_law.o
CXX     apps/probability/law/one_parameter_law.o
CXX     apps/probability/law/poisson_law.o
CXX     apps/probability/law/two_parameter_law.o
CXX     apps/probability/law/uniform_law.o
CXX     apps/probability/law_controller.o
CXX     apps/probability/law_curve_view.o
CXX     apps/probability/parameters_controller.o
CXX     apps/regression/app.o
CXX     apps/regression/banner_view.o
CXX     apps/regression/calculation_controller.o
CXX     apps/regression/even_odd_double_buffer_text_cell.o
CXX     apps/regression/go_to_parameter_controller.o
CXX     apps/regression/graph_controller.o
CXX     apps/regression/graph_view.o
CXX     apps/regression/initialisation_parameter_controller.o
CXX     apps/regression/prediction_parameter_controller.o
CXX     apps/regression/store.o
CXX     apps/regression/store_controller.o
CXX     apps/sequence/app.o
CXX     apps/sequence/graph/banner_view.o
CXX     apps/sequence/graph/curve_parameter_controller.o
CXX     apps/sequence/graph/curve_view_range.o
CXX     apps/sequence/graph/go_to_parameter_controller.o
CXX     apps/sequence/graph/graph_controller.o
CXX     apps/sequence/graph/graph_view.o
CXX     apps/sequence/graph/term_sum_controller.o
CXX     apps/sequence/graph/vertical_cursor_view.o
CXX     apps/sequence/list/list_controller.o
CXX     apps/sequence/list/list_parameter_controller.o
CXX     apps/sequence/list/sequence_toolbox.o
CXX     apps/sequence/list/type_parameter_controller.o
CXX     apps/sequence/values/interval_parameter_controller.o
CXX     apps/sequence/values/values_controller.o
CXX     apps/sequence/local_context.o
CXX     apps/sequence/sequence.o
CXX     apps/sequence/sequence_store.o
CXX     apps/sequence/sequence_title_cell.o
CXX     apps/settings/app.o
CXX     apps/settings/main_controller.o
CXX     apps/settings/settings_node.o
CXX     apps/settings/sub_controller.o
CXX     apps/shared/banner_view.o
CXX     apps/shared/button_with_separator.o
CXX     apps/shared/cursor_view.o
CXX     apps/shared/curve_view.o
CXX     apps/shared/curve_view_cursor.o
CXX     apps/shared/curve_view_range.o
CXX     apps/shared/editable_cell_table_view_controller.o
CXX     apps/shared/float_pair_store.o
CXX     apps/shared/float_parameter_controller.o
CXX     apps/shared/function.o
CXX     apps/shared/function_app.o
CXX     apps/shared/function_curve_parameter_controller.o
CXX     apps/shared/function_go_to_parameter_controller.o
CXX     apps/shared/function_graph_view.o
CXX     apps/shared/function_graph_controller.o
CXX     apps/shared/function_store.o
CXX     apps/shared/function_expression_cell.o
CXX     apps/shared/function_title_cell.o
CXX     apps/shared/go_to_parameter_controller.o
CXX     apps/shared/initialisation_parameter_controller.o
CXX     apps/shared/interactive_curve_view_controller.o
CXX     apps/shared/interactive_curve_view_range.o
CXX     apps/shared/interactive_curve_view_range_delegate.o
CXX     apps/shared/interval.o
CXX     apps/shared/interval_parameter_controller.o
CXX     apps/shared/list_controller.o
CXX     apps/shared/list_parameter_controller.o
CXX     apps/shared/memoized_curve_view_range.o
CXX     apps/shared/message_controller.o
CXX     apps/shared/new_function_cell.o
CXX     apps/shared/ok_view.o
CXX     apps/shared/range_parameter_controller.o
CXX     apps/shared/regular_table_view_data_source.o
CXX     apps/shared/store_controller.o
CXX     apps/shared/store_parameter_controller.o
CXX     apps/shared/tab_table_controller.o
CXX     apps/shared/text_field_delegate.o
CXX     apps/shared/text_field_delegate_app.o
CXX     apps/shared/values_function_parameter_controller.o
CXX     apps/shared/values_parameter_controller.o
CXX     apps/shared/values_controller.o
CXX     apps/shared/zoom_parameter_controller.o
CXX     apps/statistics/app.o
CXX     apps/statistics/box_banner_view.o
CXX     apps/statistics/box_controller.o
CXX     apps/statistics/box_range.o
CXX     apps/statistics/box_view.o
CXX     apps/statistics/calculation_controller.o
CXX     apps/statistics/histogram_banner_view.o
CXX     apps/statistics/histogram_controller.o
CXX     apps/statistics/histogram_parameter_controller.o
CXX     apps/statistics/histogram_view.o
CXX     apps/statistics/store.o
CXX     apps/statistics/store_controller.o
CXX     apps/code/app.o
CXX     apps/code/editor_controller.o
CXX     apps/code/executor_controller.o
CXX     apps/code/menu_controller.o
CXX     apps/code/program.o
CXX     apps/alpha_lock_view.o
CXX     apps/apps_container.o
CXX     apps/apps_window.o
CXX     apps/battery_timer.o
CXX     apps/battery_view.o
CXX     apps/constant.o
CXX     apps/backlight_dimming_timer.o
CXX     apps/empty_battery_window.o
CXX     apps/exam_pop_up_controller.o
CXX     apps/global_preferences.o
CXX     apps/i18n.o
CXX     apps/led_timer.o
CXX     apps/lock_view.o
CXX     apps/main.o
CXX     apps/math_toolbox.o
CXX     apps/node.o
CXX     apps/suspend_timer.o
CXX     apps/title_bar_view.o
CXX     apps/toolbox_node.o
CXX     apps/usb_timer.o
CXX     apps/variable_box_controller.o
CXX     apps/variable_box_leaf_cell.o
CXX     ion/src/shared/console_line.o
CXX     ion/src/shared/events_keyboard.o
CXX     ion/src/shared/events_modifier.o
CXX     ion/src/shared/events.o
CXX     ion/src/shared/software_version.o
CXX     kandinsky/src/color.o
CXX     kandinsky/src/context.o
CXX     kandinsky/src/context_line.o
CXX     kandinsky/src/context_pixel.o
CXX     kandinsky/src/context_rect.o
CXX     kandinsky/src/context_text.o
CXX     kandinsky/src/framebuffer.o
CXX     kandinsky/src/framebuffer_context.o
CXX     kandinsky/src/ion_context.o
CC      kandinsky/src/large_font.o
CXX     kandinsky/src/point.o
CXX     kandinsky/src/rect.o
CC      kandinsky/src/small_font.o
CXX     kandinsky/src/text.o
CXX     poincare/src/simplify/expression_builder.o
CXX     poincare/src/simplify/expression_match.o
CXX     poincare/src/simplify/expression_selector.o
CXX     poincare/src/simplify/rules.o
CXX     poincare/src/simplify/simplification.o
CXX     poincare/src/simplify/simplification_generator.o
CXX     poincare/src/absolute_value.o
CXX     poincare/src/addition.o
CXX     poincare/src/arc_cosine.o
CXX     poincare/src/arc_sine.o
CXX     poincare/src/arc_tangent.o
CXX     poincare/src/binary_operation.o
CXX     poincare/src/binomial_coefficient.o
CXX     poincare/src/ceiling.o
CXX     poincare/src/complex.o
CXX     poincare/src/complex_argument.o
CXX     poincare/src/complex_matrix.o
CXX     poincare/src/confidence_interval.o
CXX     poincare/src/conjugate.o
CXX     poincare/src/cosine.o
CXX     poincare/src/derivative.o
CXX     poincare/src/determinant.o
CXX     poincare/src/division_quotient.o
CXX     poincare/src/division_remainder.o
CXX     poincare/src/evaluation.o
CXX     poincare/src/expression.o
CXX     poincare/src/expression_lexer.o
CXX     poincare/src/expression_parser.o
CXX     poincare/src/factorial.o
CXX     poincare/src/floor.o
CXX     poincare/src/frac_part.o
CXX     poincare/src/fraction.o
CXX     poincare/src/function.o
CXX     poincare/src/expression_matrix.o
CXX     poincare/src/global_context.o
CXX     poincare/src/great_common_divisor.o
CXX     poincare/src/hyperbolic_arc_cosine.o
CXX     poincare/src/hyperbolic_arc_sine.o
CXX     poincare/src/hyperbolic_arc_tangent.o
CXX     poincare/src/hyperbolic_cosine.o
CXX     poincare/src/hyperbolic_sine.o
CXX     poincare/src/hyperbolic_tangent.o
CXX     poincare/src/imaginary_part.o
CXX     poincare/src/integer.o
CXX     poincare/src/integral.o
CXX     poincare/src/list_data.o
CXX     poincare/src/leaf_expression.o
CXX     poincare/src/least_common_multiple.o
CXX     poincare/src/logarithm.o
CXX     poincare/src/matrix.o
CXX     poincare/src/matrix_data.o
CXX     poincare/src/matrix_dimension.o
CXX     poincare/src/matrix_inverse.o
CXX     poincare/src/matrix_trace.o
CXX     poincare/src/matrix_transpose.o
CXX     poincare/src/multiplication.o
CXX     poincare/src/naperian_logarithm.o
CXX     poincare/src/nth_root.o
CXX     poincare/src/opposite.o
CXX     poincare/src/parenthesis.o
CXX     poincare/src/permute_coefficient.o
CXX     poincare/src/power.o
CXX     poincare/src/prediction_interval.o
CXX     poincare/src/preferences.o
CXX     poincare/src/product.o
CXX     poincare/src/reel_part.o
CXX     poincare/src/round.o
CXX     poincare/src/sequence.o
CXX     poincare/src/sine.o
CXX     poincare/src/square_root.o
CXX     poincare/src/store.o
CXX     poincare/src/subtraction.o
CXX     poincare/src/sum.o
CXX     poincare/src/symbol.o
CXX     poincare/src/tangent.o
CXX     poincare/src/variable_context.o
CXX     poincare/src/layout/absolute_value_layout.o
CXX     poincare/src/layout/baseline_relative_layout.o
CXX     poincare/src/layout/bracket_layout.o
CXX     poincare/src/layout/condensed_sum_layout.o
CXX     poincare/src/layout/conjugate_layout.o
CXX     poincare/src/layout/expression_layout.o
CXX     poincare/src/layout/fraction_layout.o
CXX     poincare/src/layout/grid_layout.o
CXX     poincare/src/layout/horizontal_layout.o
CXX     poincare/src/layout/integral_layout.o
CXX     poincare/src/layout/nth_root_layout.o
CXX     poincare/src/layout/parenthesis_layout.o
CXX     poincare/src/layout/product_layout.o
CXX     poincare/src/layout/sequence_layout.o
CXX     poincare/src/layout/string_layout.o
CXX     poincare/src/layout/sum_layout.o
CC      python/src/py/mpstate.o
CC      python/src/py/nlrx86.o
CC      python/src/py/nlrx64.o
CC      python/src/py/nlrthumb.o
CC      python/src/py/nlrxtensa.o
CC      python/src/py/nlrsetjmp.o
CC      python/src/py/malloc.o
CC      python/src/py/gc.o
CC      python/src/py/qstr.o
CC      python/src/py/vstr.o
CC      python/src/py/mpprint.o
CC      python/src/py/unicode.o
CC      python/src/py/mpz.o
CC      python/src/py/reader.o
CC      python/src/py/lexer.o
CC      python/src/py/parse.o
CC      python/src/py/scope.o
CC      python/src/py/compile.o
CC      python/src/py/emitcommon.o
CC      python/src/py/emitbc.o
CC      python/src/py/asmbase.o
CC      python/src/py/asmx64.o
CC      python/src/py/asmx86.o
CC      python/src/py/asmthumb.o
CC      python/src/py/emitinlinethumb.o
CC      python/src/py/asmarm.o
CC      python/src/py/asmxtensa.o
CC      python/src/py/formatfloat.o
CC      python/src/py/parsenumbase.o
CC      python/src/py/parsenum.o
CC      python/src/py/emitglue.o
CC      python/src/py/persistentcode.o
CC      python/src/py/runtime.o
CC      python/src/py/runtime_utils.o
CC      python/src/py/scheduler.o
CC      python/src/py/nativeglue.o
CC      python/src/py/stackctrl.o
CC      python/src/py/argcheck.o
CC      python/src/py/warning.o
CC      python/src/py/map.o
CC      python/src/py/obj.o
CC      python/src/py/objarray.o
CC      python/src/py/objattrtuple.o
CC      python/src/py/objbool.o
CC      python/src/py/objboundmeth.o
CC      python/src/py/objcell.o
CC      python/src/py/objclosure.o
CC      python/src/py/objcomplex.o
CC      python/src/py/objdict.o
CC      python/src/py/objenumerate.o
CC      python/src/py/objexcept.o
CC      python/src/py/objfilter.o
CC      python/src/py/objfloat.o
CC      python/src/py/objfun.o
CC      python/src/py/objgenerator.o
CC      python/src/py/objgetitemiter.o
CC      python/src/py/objint.o
CC      python/src/py/objint_longlong.o
CC      python/src/py/objint_mpz.o
CC      python/src/py/objlist.o
CC      python/src/py/objmap.o
CC      python/src/py/objmodule.o
CC      python/src/py/objobject.o
CC      python/src/py/objpolyiter.o
CC      python/src/py/objproperty.o
CC      python/src/py/objnone.o
CC      python/src/py/objnamedtuple.o
CC      python/src/py/objrange.o
CC      python/src/py/objreversed.o
CC      python/src/py/objset.o
CC      python/src/py/objsingleton.o
CC      python/src/py/objslice.o
CC      python/src/py/objstr.o
CC      python/src/py/objstrunicode.o
CC      python/src/py/objstringio.o
CC      python/src/py/objtuple.o
CC      python/src/py/objtype.o
CC      python/src/py/objzip.o
CC      python/src/py/opmethods.o
CC      python/src/py/sequence.o
CC      python/src/py/stream.o
CC      python/src/py/binary.o
CC      python/src/py/builtinimport.o
CC      python/src/py/builtinevex.o
CC      python/src/py/builtinhelp.o
CC      python/src/py/modarray.o
CC      python/src/py/modbuiltins.o
CC      python/src/py/modcollections.o
CC      python/src/py/modgc.o
CC      python/src/py/modio.o
CC      python/src/py/modmath.o
CC      python/src/py/modcmath.o
CC      python/src/py/modmicropython.o
CC      python/src/py/modstruct.o
CC      python/src/py/modsys.o
CC      python/src/py/moduerrno.o
CC      python/src/py/modthread.o
CC      python/src/py/vm.o
CC      python/src/py/bc.o
CC      python/src/py/showbc.o
CC      python/src/py/smallint.o
CC      python/src/py/frozenmod.o
CC      python/src/py/emitnative.o
CC      python/port/port.o
python/port/port.c:53:52: warning: incompatible pointer types initializing 'mp_fun_kw_t' (aka 'void *(*)(unsigned long, void *const *, struct _mp_map_t *)') with an expression of
      type 'mp_obj_t (uint, const mp_obj_t *, mp_map_t *)' (aka 'void *(unsigned int, void *const *, struct _mp_map_t *)') [-Wincompatible-pointer-types]
MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open);
                                                   ^~~~~~~~~~~~~~~
python/src/py/obj.h:301:87: note: expanded from macro 'MP_DEFINE_CONST_FUN_OBJ_KW'
        {{&mp_type_fun_builtin_var}, true, n_args_min, MP_OBJ_FUN_ARGS_MAX, .fun.kw = fun_name}
                                                                                      ^~~~~~~~
1 warning generated.
CXX     python/port/interrupt_helper.o
CC      python/port/modkandinsky.o
CXX     python/port/modkandinsky_impl.o
CC      python/port/mphalport.o
CXX     escher/src/alternate_empty_view_controller.o
CXX     escher/src/app.o
CXX     escher/src/buffer_text_view.o
CXX     escher/src/button.o
CXX     escher/src/button_row_controller.o
CXX     escher/src/chevron_view.o
CXX     escher/src/clipboard.o
CXX     escher/src/container.o
CXX     escher/src/dynamic_view_controller.o
CXX     escher/src/editable_text_cell.o
CXX     escher/src/even_odd_cell.o
CXX     escher/src/even_odd_buffer_text_cell.o
CXX     escher/src/even_odd_editable_text_cell.o
CXX     escher/src/even_odd_expression_cell.o
CXX     escher/src/even_odd_message_text_cell.o
CXX     escher/src/expression_table_cell.o
CXX     escher/src/expression_table_cell_with_pointer.o
CXX     escher/src/expression_view.o
CXX     escher/src/highlight_cell.o
CXX     escher/src/image_view.o
CXX     escher/src/invocation.o
CXX     escher/src/input_view_controller.o
CXX     escher/src/key_view.o
CXX     escher/src/list_view_data_source.o
CXX     escher/src/message_table_cell.o
CXX     escher/src/message_table_cell_with_buffer.o
CXX     escher/src/message_table_cell_with_chevron.o
CXX     escher/src/message_table_cell_with_chevron_and_message.o
CXX     escher/src/message_table_cell_with_chevron_and_expression.o
CXX     escher/src/message_table_cell_with_editable_text.o
CXX     escher/src/message_table_cell_with_message.o
CXX     escher/src/message_table_cell_with_switch.o
CXX     escher/src/message_text_view.o
CXX     escher/src/modal_view_controller.o
CXX     escher/src/palette.o
CXX     escher/src/responder.o
CXX     escher/src/run_loop.o
CXX     escher/src/scroll_view.o
CXX     escher/src/scroll_view_data_source.o
CXX     escher/src/scroll_view_indicator.o
CXX     escher/src/scrollable_view.o
CXX     escher/src/selectable_table_view.o
CXX     escher/src/selectable_table_view_data_source.o
CXX     escher/src/selectable_table_view_delegate.o
CXX     escher/src/simple_list_view_data_source.o
CXX     escher/src/simple_table_view_data_source.o
CXX     escher/src/solid_color_view.o
CXX     escher/src/stack_view.o
CXX     escher/src/stack_view_controller.o
CXX     escher/src/switch_view.o
CXX     escher/src/tab_view.o
CXX     escher/src/tab_view_cell.o
CXX     escher/src/tab_view_controller.o
CXX     escher/src/tab_view_data_source.o
CXX     escher/src/table_cell.o
CXX     escher/src/table_view.o
CXX     escher/src/table_view_data_source.o
CXX     escher/src/text_cursor_view.o
CXX     escher/src/text_area.o
CXX     escher/src/text_field.o
CXX     escher/src/text_view.o
CXX     escher/src/tiled_view.o
CXX     escher/src/toolbox.o
CXX     escher/src/timer.o
CXX     escher/src/view.o
CXX     escher/src/view_controller.o
CXX     escher/src/warning_controller.o
CXX     escher/src/window.o
LD      app.elf
arm-none-eabi-gdb -x gdb_script.gdb app.elf
GNU gdb (GNU Tools for ARM Embedded Processors 6-2017-q2-update) 7.12.1.20170417-git
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin10 --target=arm-none-eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
"/Users/dean/Documents/github/blackketter/epsilon/app.elf": not in executable format: File format not recognized
gdb_script.gdb:2: Error in sourced command file:
localhost:3333: Operation timed out.
(gdb) quit 

Use BCD for calculations

I don't know why you've chosen floating point instead of BCD like Casio and TI, but there are issues that arise from that (see http://0.30000000000000004.com/).

If you type 0.1+0.2 it returns 0.3, but only because there isn't enough precision when displaying the result (there should be more precision btw). However if you type 0.1+0.2-0.3 it returns 2.775558e-17 instead of 0, and obviously a calculator that returns the wrong result isn't a good calculator.

The only solution that I know of is to use BCD for calculations.

Allow the user not to close parens, quotes etc.

Set up:
In the calculation app, a user types 2 * ( 3 + 5 then presses [EXE].

Current situation:
The calculator tells the user that there is a syntax error.

Proposed situation:
The calculator ignores the missing closing X character (in this case, X being a parenthesis) and computes what the user intended: 2*(3+5), resulting in less time wasted.
To be clearer to the user, as soon as an open-X character is typed, the OS would append the matching closing one to the current input, in a lighter color for instance.

Comments:

  • This could work for characters like parens (for expressions), quotes (for strings), brackets (both curly and square, for lists and matrices).
  • Support for nested characters would have to be done.
  • ... and support for characters being deleted, too, where the inserted matching closed one would go away as well.
  • Note: this is the way things work on some TI calculators (ignoring only on the z80/ez80, "grey draw" on the Nspire), and possibly others.

Example:
grey draw example

Exam mode can be (I think) bypassed easily

As I said here, all it takes for the exam mode to be bypassed is to remove the lines of code that block memory access, recompile the OS, then transfer it on the calculator.

Now, I could be wrong and one couldn't do that (I can't test since I don't have access to the real calculator), but if it is possible you should prevent this.

Adding a language

Hello,
as explained to Romain I would like to add the Occitan language (Talked in Spain, Monaco, Italy and South France).
I wonder how to do:
on the file, should I add it after Portuguese or before?
I'd like to start translating this week-end.

Wrong order for libpng CC line causes error

I'm trying to build the firmware on Linux (Ubuntu 17.04) and it fails about libpng:

$ LC_ALL=C make PLATFORM=simulator VERBOSE=1
========= BUILD SETTINGS ======
DEBUG = 0
PLATFORM = simulator
CC = clang
CXX = clang++
LD = clang++
CFLAGS = -std=c99
CXXFLAGS = -std=c++11 -fno-exceptions -fno-rtti -fno-threadsafe-statics
SFLAGS = -DDEBUG=0 -DOS_WITH_ONBOARDING_APP=0 -DOS_WITH_SOFTWARE_UPDATE_PROMPT=0 -Os -Ilib -I. -Wall -MD -MP -Iliba/include/bridge -Iion/include -DKD_CONFIG_H=1 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2  -Ikandinsky/include -Ipoincare/include -Ipython/src -Ipython/port -Iescher/include -Iquiz/include
LDFLAGS = -fPIE -pie -lfltk -lX11
===============================
CLEAN
HOSTCC  kandinsky/fonts/rasterizer
RASTER  kandinsky/src/small_font.h kandinsky/src/small_font.c
RASTER  kandinsky/src/large_font.h kandinsky/src/large_font.c
BISON   poincare/src/simplify/rules_generation/rules_parser.cpp
HOSTCC  poincare/src/simplify/rules_generation/rules_parser.o
FLEX    poincare/src/simplify/rules_generation/rules_lexer.cpp
HOSTCC  poincare/src/simplify/rules_generation/rules_lexer.o
HOSTCC  poincare/src/simplify/rules_generation/node.o
HOSTCC  poincare/src/simplify/rules_generation/rule.o
HOSTLD  poincare/src/simplify/rules_generation/rulegen
RULEGEN poincare/src/simplify/rules.cpp
FLEX    poincare/src/expression_lexer.cpp poincare/src/expression_lexer.hpp
BISON   poincare/src/expression_parser.cpp poincare/src/expression_parser.hpp
poincare/src/expression_parser.y: warning: 7 reduce/reduce conflicts [-Wconflicts-rr]
QSTRDAT python/port/genhdr/qstrdefs.generated.h
HOSTCC  escher/image/inliner
/tmp/ccpT67zI.o: In function `main':
inliner.c:(.text+0xd8): undefined reference to `png_sig_cmp'
inliner.c:(.text+0x112): undefined reference to `png_create_read_struct'
inliner.c:(.text+0x14d): undefined reference to `png_create_info_struct'
inliner.c:(.text+0x192): undefined reference to `png_init_io'
inliner.c:(.text+0x1a6): undefined reference to `png_set_sig_bytes'
inliner.c:(.text+0x1bf): undefined reference to `png_read_info'
inliner.c:(.text+0x1d8): undefined reference to `png_get_image_width'
inliner.c:(.text+0x1f7): undefined reference to `png_get_image_height'
inliner.c:(.text+0x216): undefined reference to `png_get_color_type'
inliner.c:(.text+0x235): undefined reference to `png_get_bit_depth'
inliner.c:(.text+0x2dc): undefined reference to `png_get_rowbytes'
inliner.c:(.text+0x315): undefined reference to `png_read_image'
collect2: error: ld returned 1 exit status
escher/Makefile:77: recipe for target 'escher/image/inliner' failed
make: *** [escher/image/inliner] Error 1

Doing the following change make this part to build:

--- a/escher/Makefile
+++ b/escher/Makefile
@@ -75,7 +75,7 @@ INLINER := escher/image/inliner
 
 $(INLINER): escher/image/inliner.c
        @echo "HOSTCC  $@"
-       @$(HOSTCC) -std=c99 `libpng-config --cflags` `libpng-config --ldflags` $< -o $@
+       @$(HOSTCC) -std=c99 `libpng-config --cflags` $< `libpng-config --ldflags` -o $@
 
 %.h %.cpp : %.png $(INLINER)
        @echo "INLINER $@"

Option to dim the screen?

I find in bright environments the default screen brightness is fine, but when working in a more dimly lit area the screen is painfully bright. Could a brightness adjustment tool be added to the settings panel?

IRC channel?

I see that #numworks on FreeNode has been registered by @Ecco, but there are only a few of us there.
I think it should be promoted somewhere on the website and I guess on the repo's Readme file.
Would be even better if the developer team could join so that we could discuss things like github issues etc. more quickly!

Support for boolean algebra/logic calculations

Feature idea: support, right in the Calculation app, for boolean algebra/logic, or at the very least of boolean values.
Thus we could say 1+1=3 and it'd return false. And then, manipulate such boolean values with operators like xor, etc.

Fuzzing (Poincare especially?)

I (and others) believe it would be interesting to launch some fuzzer instances (probably afl-fuzz) on the different modules, but probably Poincare especially.
The goal would be to reveal bugs/crashes in an automated way for things like unexpected inputs yielding unhandled cases.

I have some experience in that, so I'll try to see what I can do but if anyone wants to join in and help/give ideas, please do :)

In any case, this issue could be useful to keep track of the status of that, and possibly to report bad cases found by the instances, if they aren't worth having their own github issue or PR.

[Idea] Online "make-your-own-OS" build tool

Considering that more and more suggestions are about (or getting categorized as) "build-time options" (because why not, it could save space for people not needing them), I've been thinking about having an online service (builder.numworks.com ?) that users could use to customize & download their own build (in addition to being able to download official/popular ones).

The idea itself is rather simple and would work like existing services that do so (for instance in the world of web-dev: jQuery UI, FabricJS, Initializr...):

  • The user is presented with a list of togglable features to be built, some enabled by default (for the default/official build).
  • Once the user is done choosing a set of options, he submits the form and the server builds it and serves him the firmware file.
  • Custom/popular sets of options would be directly available making downloads instantly available.
  • We could even imagine emscripten builds to be done on the fly so that the user can actually try an app/feature online before embedding it in his "distro"

Where things get a bit more complex (but not so much, really) is that there'd be a server responsible to receive build orders, make them (shouldn't really take more than a few dozens of seconds max. on a decent enough computer) and serve those builds somewhere (adding to the list of available builds in the set of options, so the next person selecting those same options will have an instant download).
Depending on the number of options available (might be just a few initially), it would probably be worth it to just generate all the possible combinations, so all downloads are ready.

Until (if it's ever going to be the case) there's dynamic code loading, this could very well be some kind of [not-so-]poor man's "App Store": on the developers' side, features/apps finding their way into online builds, and on the users' side, easy usage of a customized OS as they like it without having to download a toolchain/sdk/etc. to make it themselves :)

This also allows to see which optional features are the most popular.

I18N: Add support for Polish

Hey

I translated all of the software into Polish. I will be sending separate patches soon. I ran into some issues with extra unicode characters. Those end up as garbage glyph blocks. I looked at the text drawing functions and I didn't find any shade of UTF-8 support so I assume those need to be mapped into the 8-bit blocks somehow. Am I missing anything? Any advice on how to fix that? I'll send my patches later today as they are on a separate machine.

Feature : Middle school interface

please add a way to switch between classic epsilon and light interface for middle school students. With this feature, students will be accustomed to numworks earlier and will learn to use it step by step.

make clean leaves some .o present

After a make clean there is still some .o present, this could create build issues (I got one) :

$ make clean
CLEAN
$ find . -iname '*.o'
./ion/src/shared/crc32.o
./ion/src/shared/power.o
./ion/src/shared/console_stdio.o
./ion/src/shared/random.o
./ion/src/shared/dummy/fcc_id.o
./ion/src/shared/dummy/backlight.o
./ion/src/shared/dummy/battery.o
./ion/src/simulator/keyboard/fltkkbd.o
./ion/src/simulator/display/fltklcd.o
./ion/src/simulator/usb.o
./ion/src/simulator/led.o
./ion/src/simulator/init.o
./ion/src/simulator/boot/main.o
./liba/src/bridge.o

Arrow keys triggering too many presses

When running the fltk simulator on linux, even pressing the right arrow key briefly jumps to the farthest option to the right. Menus have the same issue where pressing down jumps to the last option.

Add a Python REPL

It would be pretty useful to have a Python shell where you can input a Python snippet and have it executed straight away.

sqrt(-1) is undef

After updating my device (with stock firmware) to firmware version 1.1.0 (git head points to commit 88630ad), now, if I do:

i^2
          -1

sqrt(Ans)
          Undef

I'm not familiar with the code base so for now, it's hard to tell if it's my build environment or it's a issue
in the firmware. My build environment is Debian Stretch (even cross compiler comes from Debian).

ii  git                            1:2.11.0-3                     amd64        fast, scalable, distributed revision control system
ii  libfreetype6-dev               2.6.3-3.2                      amd64        FreeType 2 font engine, development files
ii  bison                          2:3.0.4.dfsg-1+b1              amd64        YACC-compatible parser generator
ii  flex                           2.6.1-1.3                      amd64        fast lexical analyzer generator
ii  python                         2.7.13-2                       amd64        interactive high-level object-oriented language (default version)
ii  gcc-arm-none-eabi              15:5.4.1+svn241155-1           amd64        GCC cross compiler for ARM Cortex-A/R/M processors
ii  gdb-arm-none-eabi              7.12-6+9+b2                    amd64        GNU debugger for ARM Cortex-A/R/M processors
ii  libfltk1.3-dev                 1.3.4-4                        amd64        Fast Light Toolkit - development files
ii  clang                          1:3.8-36                       amd64        C, C++ and Objective-C compiler (LLVM based)

Add a random() function

The feature is very useful in high school to give an interactive feeling of randomness to students.

On the technical side, the MCU features an actual RNG, we may as well use it.

SDK documentation ?

I wasn't able to find docs of the internals of the "SDK".

One "easy" thing would be to use Doxygen, it's inline with code using comments, and can generate HTML documentation to view online.

It would be easier to find things like "what a base app needs", "how to draw a box", "display some text" etc.
And to know the differences between View or MessageController used in the apps (to build one).

Maybe some HelloWorldApp can be created later for the documentation purposes.

no git tag ?

After cloning the github tree, I've noticed that there were no tags.
Would it be possible for you to start using them ?

Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.