The new BASIC computer that runs in your browser!

Overview

Screenshot of atto showing code to print the Fibonacci Sequence

atto

The new BASIC computer that runs in your browser!

Try it live: jamesl.me/atto

What is atto?

atto is a virtual fantasy computer system that's designed to teach people coding through a BASIC-like programming language.

atto is a mix of simplicity from the days of 1980s computing, paired with the modern functionality of computers today.

Why?

Educational programming languages today don't give the user quite the same sense of ownership and accomplishment that BASIC gave when it was the predominant language of its time. Additionally, other programming languages do have their strengths and weaknesses:

  • Scratch, although extremely easy for learners to use and understand, often is regarded as a misrepresentation of actual programming in that the language is not text-based. This makes it harder to jump from Scratch to other, text-based languages.
  • Python is a great first language for text-based coding, considering it can be used in professional contexts too, but it doesn't seem as fun to use as Scratch and other block-based languages since it is mainly used in a text-based shell environment.

atto seeks to combine the best of both languages. BASIC has been proven to be a great programming language for learning with, since entire generations of kids became interested in the field of computer science in the 80s. Our text-based BASIC derivative hopes to use the success of the BASIC language and combine it with the modern systems of today.

Features

atto is still in development, but hopefully, it'll have the following features:

  • Runs entirely in the browser, making it easy to get started with
  • Code authoring that's familiar to the BASIC users of the 80s, but with modern features such as text selection, copy and paste, syntax highlighting and multiline editing
  • Rich graphics with a 640x480 resolution, full RGBA colours and turtle drawing mode (turtle coming soon)
  • Accessible and inclusive to assistive technologies such as screen readers and switches (beta)
  • Music/melody programming, with text-to-speech support
  • Project link sharing to let others run the projects you make
  • API support, letting your code access external services and browser features such as WebUSB to connect to game controllers
  • Broadcasting to communicate between multiple instances of atto over WebRTC for making multiplayer projects
Comments
  • attoX

    attoX

    attoX logo

    attoX is the extension system for atto, which allows features to be added to the language through JavaScript .attox.js files.

    Extensions can be loaded with extload url, and unloaded with extunload url. An extension's commands can be then accessed with name.command, where name is the extension name, and command is the command for that extension. The extension's name can be assigned to the user by entering extload url, name, which can also be used to load multiple instances of the same extension.

    Example usage of attoX:

    10 extload "http"
    20 extload "json"
    30 input "Enter your name: ", name$
    40 http.get "https://api.agify.io?name="; name$, data$
    50 json.parse data$, "age", age%
    60 print "Your age is probably "; age%; "..."
    70 print "Don't quote me on that, though!"
    

    Here's a few extensions that either already exist for attoX (in this PR), we are working on, or we'd like to add:

    • [x] HTTP GET/POST (eg. http.get "https://atto.devicefuture.org", data$, status)
    • [x] JSON parsing (eg. json.parse `{"data": {"number": 123, "string": "hello"}}`, "data.string", data$)
    • [x] WebRTC/broadcasting communications
    • [ ] Weather API (we could use something like OpenWeatherMap)
    • [ ] Raspberry Pi/Arduino GPIO interfacing
    • [ ] micro:bit interfacing
    • [ ] LEGO Mindstorms NXT/EV3 robotics interfacing
    enhancement attoX 
    opened by James-Livesey 3
  • [Announcement] atto is moving to a new home soon!

    [Announcement] atto is moving to a new home soon!

    DeviceFuture logo

    Over the coming days, we plan to move atto to a new home, where we will continue to develop atto and build new projects that are part of the atto ecosystem. We're calling our new home DeviceFuture, since we believe that atto plays a part in the future of creating open, accessible software and hardware that anyone can get their hands on and start using to learn about the world of digital technology!

    atto will still be maintained by the same people, and we've got some awesome features planned for the future of atto. In order to do this, we're creating the DeviceFuture organisation to develop a unified brand consisting of atto and its related projects.

    We will soon be moving atto over to the @devicefuture GitHub organisation where we will then resume fixing bugs, adding features and making atto cooler with every release. This will mean that atto will experience downtime for a short period while we perform this migration. We expect the downtime to last up to a few hours, but if all goes well, you shouldn't notice a thing.

    We will move atto to a new domain (atto.devicefuture.org) and to a new GitHub path (devicefuture/atto). GitHub will automatically redirect the old path (James-Livesey/atto) to the new one for those who have made bookmarks of the repo. We will also redirect the jamesl.me/atto path to our new domain, along with all of atto's subpages and custom links. That way, you (hopefully) won't have to manually update all your bookmarks and links to atto!

    We're looking forward to the (device)future of atto, and can't wait to work on new projects that we're sure you'll love! Feel free to leave any questions about this migration on this issue, and I'll do my best to answer them ASAP. 😀

    -James

    announcement 
    opened by James-Livesey 2
  • Unicode support

    Unicode support

    Atto has problems with some Unicode characters (like emoji).

    Example program:

    10 PRINT "Καλημέρα 😄"
    

    test.atto.txt

    2021-09-24_16-37

    The problem is that when accessing chars like text[9], the emoji is returned in two parts (positions 9 & 10). A workaround is to do:

    var chars = Array.from(text);

    Then chars[9] will return "😄".

    Applying this change to term.js:print() and canvas.js:drawText() seems to be enough to make the above program run correctly. The program listing still has problems though, because of the hid.js:render function.

    bug 
    opened by pavlos256 2
  • Dark mode

    Dark mode

    Implement a simple dark mode theme.

    • Auto-detection happens once on startup using a media query
    • Changed the absolute minimum amount of code

    Further possible enhancements:

    • Move all color definitions to the new theme.js
    • Export default background and default foreground colors from theme.js
    • (Maybe) replace media query with toggle button and use localStorage to remember choice

    Note: Feel free to make any changes you like or even reject the PR. I just went ahead and implemented it for my use case as I saw best. Thanks for atto!

    opened by pavlos256 2
  • Turtle graphics implementation

    Turtle graphics implementation

    This PR implements turtle graphics commands, namely show, hide, forward, backward, left, right, penup, pendown and angle. Relevant reference documentation for turtle graphics is also available in this PR.

    opened by James-Livesey 2
  • GOTO should fall-through when given an invalid line

    GOTO should fall-through when given an invalid line

    Consider this program:

     10 PRINT "OK"
     20 GOTO 1
    

    This reports an error ("cannot goto a nonexistant line"), but I think it should fall-through. Reporting an invalid line is probably the correct choice with:

     10 PRINT "BLAH"
     20 GOTO 3000
     2000 PRINT "BLAH"
    

    I guess here the expectation is that GOTO should go to the named line, and if it isn't present the next one that is there. But be limited by the upper-bound of lines that was used.

    enhancement 
    opened by skx 2
  • Add shell command reference

    Add shell command reference

    This includes commands such as list, edit, import, export etc. which can't be used inside programs; only the shell. A new styling for the <kbd> element was also added so that keyboard shortcuts for these commands can be displayed too.

    documentation enhancement 
    opened by James-Livesey 1
  • Allow for boolean variable conditions without equality check in `if`

    Allow for boolean variable conditions without equality check in `if`

    We should be able to write just if booleanCondition instead of having to write if booleanCondition=1, much like with other programming languages. This may require a much-needed overhaul to some of the boolean logic operator behaviour and operator evaluation in general.

    We also should have true and false constants, which could be evaluated to 1 and 0 respectively. Then, if conditions can check if an expression's value is nonzero as a means of checking if the value is true.

    enhancement 
    opened by James-Livesey 1
  • Add emoji support and rendering fixes

    Add emoji support and rendering fixes

    Fixes #21. This pull request adds emoji support, allowing users to insert multi-codepoint characters. It also modifies the syntax highlighting system and canvas rendering system to do so.

    Emojis are scaled by a scale factor of 0.65 to ensure that they do not leave rendering artifacts when rendering on top of an old representation of a cell (a dirty cell).

    opened by James-Livesey 1
  • Fix for Issue#15 and a number line typo

    Fix for Issue#15 and a number line typo

    Based on the comments on Issue #15 https://github.com/James-Livesey/atto/issues/15 I proposed the changes for the gosub example. On the other hand, a typo on the repeat example foes not allow to run it

    opened by carloshm 1
  • gosub does not work as expected not ending nicely the program

    gosub does not work as expected not ending nicely the program

    the sample code: 10 diameter=5 20 gosub 100 30 print area 40 diameter=12 50 gosub 100 60 print area 70 end 100 print "The area of a circle of diameter "; diameter; " is: "; 110 area = pi*(diameter/2)^2 120 return run The area of a circle of diameter 5 is 19.6349540849 The area of a circle of diameter 12 is 113.0973355292 Mismatched statement closing mark at line 70

    Adds an error when no error should be the expected

    In this other example (forget about the logic ) Nothing to return to at line 160 Ready shows up

    10 cls 20 number_marks = 0 30 while number_marks < 100 40 if number_marks mod 2 = 1 50 ratius=10 60 gosub 140 70 else 80 ratius=5 90 gosub 140 100 break 110 number_marks = number_marks + 1 120 loop 130 end 140 move 250, 200 150 draw ratius, ratius + number_marks 160 return

    bug 
    opened by carloshm 1
  • Add more courses

    Add more courses

    There's only two courses in the help guide so far. It would be great to have more courses on some of the other aspects of atto, too!

    One example of a course to write is how to make subroutines using gosub/return.

    documentation good first issue 
    opened by James-Livesey 3
  • Add getkey and readkey commands

    Add getkey and readkey commands

    This adds the getkey command that opens the door to games! I was surprised this isn't already built-in (although I did find the undocumented key variable).

    Accompanying getkey is readkey, which is the same but will not block if there is no key waiting.

    enhancement 
    opened by pavlos256 0
Owner
James Livesey
Co-founder of @EmuxApp and knows 14+ programming languages. Great friends with @sebastiandoe5 & @EmuxMatt!
James Livesey
Easiest 1-click way to install and use Stable Diffusion on your own computer. Provides a browser UI for generating images from text prompts and images. Just enter your text prompt, and see the generated image.

Stable Diffusion UI Easiest way to install and use Stable Diffusion on your own computer. No dependencies or technical knowledge required. 1-click ins

null 3.5k Dec 30, 2022
A browser-based emulator for Zeal 8-bit Computer

Zeal 8-bit Computer emulator This project is a software emulator for Zeal 8-bit Computer: a homebrew 8-bit computer based on a Z80 CPU. Click here for

Zeal 8-bit 33 Nov 27, 2022
View maps, graphs, and tables of your save and compete in a casual, evergreen leaderboard of EU4 achievement speed runs. Upload and share your save with the world.

PDX Tools PDX Tools is a modern EU4 save file analyzer that allow users to view maps, graphs, and data tables of their save all within the browser. If

PDX Tools 24 Dec 27, 2022
BASIC is a web application contains basic applications related to studies, love, health, weather, productivity. This project aim to simply the user's life in anyway.

BASIC is a web application contains basic applications related to studies, love, health, weather, productivity. This project aim to simply the user's life in anyway. Supported by all operating system, need an internet connection for working properly.

IRUTHAYA SANTHOSE I 1 Dec 19, 2021
This project will be a basic website that allows users to add/remove books from a list. The main objective is to understand how to use JavaScript objects and arrays and dynamically modify the DOM and add basic events.

Awesome-books Awesome Books This project will be a basic website that allows users to add/remove books from a list. This project is part of the Microv

Aleksandra Ujvari 10 Oct 3, 2022
Basic website that allows users to add/remove books from a list. Achieved using JavaScript objects and arrays, dynamically modifying the DOM and adding basic events.

Awesome Books Basic website that allows users to add/remove books from a list. Achieved using JavaScript objects and arrays, dynamically modifying the

Didier Peran Ganthier 6 Dec 20, 2022
Scans your computer for node modules that are potentially vulnerable to supply chain attacks

Scans your computer for node modules that are potentially vulnerable to supply chain attacks. You still need to review the code of modules that are not vulnerable, but this helps.

Brandon Nozaki Miller 4 Apr 11, 2022
A simple menubar app for GNOME Shell that tracks how long you've been using your computer uninterruptedly

Welcome to Since Indicator ?? ?? Homepage Since Indicator is a simple menubar app for GNOME Shell that tracks how long you've been using your computer

Lorenzo Carbonell 3 Oct 20, 2022
A public board for all the Computer Society and Students to display their profile. An online year-book for you to display your profile in the most creative manner

Student's Yearbook by IEEE Computer Society Student's yearbook is an open-source project which intends to dispaly the students who will be graduating

IEEE Computer Society 11 Dec 18, 2022
Awesome Books is a basic website that allows users to add/remove books from a list (including the title and author). It has threee different sections: 1. books list, 2. add new book, 3. contact.

awesomeBooks-modules Awesome Books is a basic website that allows users to add/remove books from a list (including the title and author). It has three

Juan Diaz 6 Aug 26, 2022
Papers from the computer science community to read and discuss.

Papers We Love (PWL) is a community built around reading, discussing and learning more about academic computer science papers. This repository serves

Papers We Love 66.8k Dec 31, 2022
An interpreter for College Board's specified pseudocode for the AP Computer Science Principles Exam.

College Board Pseudocode Interpreter A playground for this interpreter is up on my website. This project is a mostly-functioning interpreter for Colle

Daniel 7 Nov 16, 2022
The ICPverse service to extract the metadata from an existing NFT project on the Internet Computer.

Infinity_Rank The ICPverse service to extract the metadata from an existing NFT project on the Internet Computer. Requirements for Use: npm installed

ICPverse 10 Nov 5, 2022
PEARL (Planetary Computer Land Cover Mapping) Platform API and Infrastructure

PEARL API & Infrastructure PEARL is a landcover mapping platform that uses human in the loop machine learning approach. This repository contains the A

Development Seed 47 Dec 23, 2022
API4AI is cloud-native computer vision & AI platform for startups, enterprises and individual developers

API4AI is cloud-native computer vision & AI platform for startups, enterprises and individual developers. This repository contains sample mini apps that utilize Brand Recognition API provided by API4AI.

api4ai 11 May 24, 2022
Open-source NFID SDK for Internet Identity, a blockchain authentication system for the Internet Computer.

NFID-SDK is an open source software development kit that contains examples and packages for developers to integrate NFID into your application

Internet Identity Labs 15 Dec 23, 2022
A web-based 3D visualization tool for 3D computer vision.

Wis3D: A web-based 3D visualization tool for 3D computer vision Online Demo | Installation | Tutorial | Documentation Wis3D is a web-based 3D visualiz

ZJU3DV 131 Dec 27, 2022
Free computer-aided transcription system for stenographers

AlleyCAT is a free, open-source computer-aided transcription (CAT) system for stenographers. It lets you write and edit documents such as court transc

Sammi De Guzman 20 Nov 6, 2022
Project of "Web Development" course for the Bachelor's degree in Computer Engineering, taken at the University of Pisa. Final evaluation: 30/30.

La battaglia della Meloria Welcome! This is the ???? version of the README file. Click here for ???? version. Introduction Historical reinterpretation

Daniel Namaki 3 Oct 6, 2022