Giter Club home page Giter Club logo

molecube's Introduction

Molecube

Modular, tactile children's toy.

As digital technology continues to permeate nearly every aspect of our day-to-day lives, there has lately been a significant amount of focus on better leveraging computers in the classroom. Indeed, this is not a new idea; some of us are probably old enough to remember programming on PDP minicomputers in High School. As technology improves, however, the possible applications for it within the field of education are moving far beyond geeky teenagers, and seem poised to radically affect the educational experience of nearly every child in this country.

It's difficult to argue with the general premise of this idea. Indeed, one could consider primary education to be ripe for innovation; after all, despite a century of technological and social progress, the basic paradigm of schooling, as a set of auditory-visual lessons delivered by a teacher to a room full of students, has changed remarkably little. This is in spite of mounting evidence that the traditional, lecture-based method of teaching children is not optimally effective. The book "Ways of Learning" identifies a full seven different dimensions of intelligence, six of which are not well catered-to by traditional schooling.

In recent years, advances into the primary education market have been made by well known companies such as Apple and Microsoft. When it comes down to it, however, most of the products being offered are traditional laptops, or perhaps tablets if the company in question is feeling especially creative. While a valid need has clearly been identified by these companies, their method of addressing it is woefully misguided.

Consider, for instance, the attributes of a standard tablet:

  • Large and clunky.
  • Fragile.
  • Expensive.
  • Internet-connected.

It's not exactly an ideal product for children...

Ultimately, the problems associated with the existing products on the market seem to boil down to a design choice: Companies seem to think that they can take products designed for adults and adapt them for use by children, in the process changing the software and very little else. This approach is fundamentally misguided, and is likely to result in nothing aside from failure, frustration, and the funneling of money from your public schools to the Cayman Islands. Ultimately, then, the problem is that education is ripe for a technology-driven overhaul, but the major companies do not seem to have taken the time to design a solution properly.

How it works

Molecube is a novel device which can't be easily slotted into the categories that we're used to. It's designed to replace much of the existing technology that most children interact with on a daily basis, with an emphasis on facilitating education in a hands-on manner. As its name suggests, it features a novel user interface designed such that a user interacts with it primarily through physical manipulation.

In order to allow for interaction, the device provides visual, audio, and tactile readout. This is accomplished with a small display, a speaker, and a vibration motor, respectively. The device's distinguishing characteristic, however, is it's ability to be physically linked with other devices. When linked together, the devices are not only magnetically attached, but can also communicate with one another. This interaction is the backbone of the user interface.

Software

Each cube is its own Linux system, complete with onboard storage. The cubes are capable of running third-party applications, which is where most of their functionality comes from. There will be a standard set of APIs for applications to use. Linking agains the API will allow them to leverage both the actual hardware, and the simulator.

Since the cubes have no wireless networking, application administration is handled through the cube's charging base. This is something that will likely be done by parents, rather than kids.

Developing

We welcome contributors. Below are instructions on building and running the code.

Simulator

The simulator can be run as follows:

~$ bazel run //simulator:demo_game

Make sure that you use Python 2 for this and that you have Tkinter installed.

Applications and LibMC

To build the applications and library, use bazel:

bazel build -c dbg ...

All artifacts will be located in the bazel-out directory.

molecube's People

Contributors

djpetti avatar gav228 avatar duffym4 avatar aidan-anselmi avatar

Stargazers

Dragos Popescu avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

gav228

molecube's Issues

Unit Testing

Has to happen at some point. Use unittest module to test Python side, and googletest to test C++ side.

Toolchain Setup

Set up Bazel to build the cube code with the correct ARM toolchain.

Linux Enablement

Right now, the hardware is designed around a microcontroller, but it has become clear that this is not the easiest and cost-effective approach. For one, the micro can't run Linux, and it's relatively expensive considering its capabilities.

A better option is to use a dedicated microprocessor and DRAM chip. I have spec'd these parts already, but the schematics and PCB design need to be modified to include them.

Set up Logging

We're using Python's logging module. It needn't be fancy, but the output should be redirected to some file, and messages of level INFO or higher should be displayed.

Incidentally, this is a good opportunity for someone to learn how logging works in Python.

Config File

It would be nice to have a configuration file for the simulator that allowed us to specify the constants that are currently specified as static variables in various classes. This can be done using Python's native config file format, or with YAML.

Fix Check Cube Hopping Bug

If you try to move the check cube while the animation is running, it kind of hops around and throws an assertion error. Someone should investigate and fix this.

NOTE: After PR 1 gets merged, this might be no longer that issue. Investigation is needed.

Better README

We need to at least try to explain the project...

Set up CircleCI

This is something that I will take care of, since I have the account already.

Enhance README

Add pictures, and some "getting started" instructions.

Determine and Remove Unecessary Hardware

In order to save money, it might be prudent to axe some of the hardware. In order from most disposable to least, this might include:

  • Wireless charging
  • IR communication
  • Secondary micro

This issue has two parts. First, determine what, if anything, we want to get rid of. Then, modify the PCB schematics to remove it.

QEMU proof-of-concept

Prove that we can:

  • Run multiple QEMU instances with custom images.
  • Communicate between the instances and the host system.

Consider Moving to Python 3

Python 3 tends to be the default version installed on people's computers nowadays, so this would make it easier for people to get started.

Grid Features

Explore possibility of snapping cubes to a grid at all times. The grid should be explicitly shown when actively dragging.

Offscreen Cubes

Right now we allow cubes to be dragged off-screen. We shouldn't do that.

Fix Snapping Logic in Simulator

The snapping logic in the simulator seems to contain several bugs, which range from easy to esoteric. Fixing this involves spending a lot of time playing with the simulator, and trying to break it.

Comprehensive API Specification

All applications running on the cubes will use an API to talk to the hardware/simulator. This API needs to be formally specified. Doing so will require extensive knowledge of the hardware and its capabilities.

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.