Skip to content

Google Summer of Code Ideas List

Jeremy B edited this page Feb 27, 2019 · 41 revisions

Welcome

To jump directly to the proposals, click here.

Why choose us?

This might interest you if you want to:

  • make things for kids, teachers, and scientists
  • work with researchers at a university
  • write Scala and CoffeeScript
  • hack on compilers and interpreters
  • do functional programming
  • build a web application
  • use the Play web framework
  • do your work on GitHub (https://github.com/NetLogo)

What is NetLogo?

NetLogo is a programming language for kids, teachers, and scientists to build simulations and games. Anyone can use it to learn how to program. Teachers use NetLogo simulations to teach science, math, social studies, and other subjects. Researchers in many fields build simulations and study their behavior.

Traditional dialects of Logo only have one turtle, or a few. NetLogo lets you make thousands of turtles and use them to represent people, animals, particles, or anything you can imagine. Turtles can move, grow, interact, reproduce, and die. The NetLogo world also includes patches (the grid cells turtles move over) and links (which connect turtles to each other).

NetLogo grew out of the earlier StarLogo language, which came out of the MIT Media Lab. NetLogo began in 1999 and has been open-source software since 2011, under a GPL license. NetLogo was created by Uri Wilensky. Development is based at Northwestern University. Most of our funding comes from the National Science Foundation.

For more information, visit:

What does it look like?

NetLogo code looks like this:

code

Running that code produces this:

DLA Simple

Here are some other models from our Models Library of hundreds of examples:

What is NetLogo Web?

NetLogo Web is our new, browser-based implementation of NetLogo.

The original, mature NetLogo implementation is written in Scala and Java and runs on the JVM (Java Virtual Machine), with a Swing-based user interface. Simulations created in the desktop application can be saved as Java applets to run in a browser.

NetLogo Web is our effort to reimplement NetLogo on a HTML5/JavaScript base. It will backwards-compatibly run existing NetLogo models in-browser and replaces applets, which are a dead technology. By contrast, JavaScript and HTML5 are secure and nearly universally available.

Working on NetLogo Web involves the following languages:

  • The NetLogo Web simulation engine is in CoffeeScript.
  • The NetLogo Web compiler is in Scala and produces JavaScript code. We use ScalaJS to produce a JavaScript version of the NetLogo compiler, which then runs in the browser along the CoffeeScript-based simulation engine.
  • The NetLogo Web web app server-side is in Scala, using the Play framework.
    • This is only part of the truth, and only applies to NetLogo Web development. The NetLogo Web site is actually just static HTML files scraped from a Play application.
  • The NetLogo Web browser client uses CoffeeScript, HTML5, and CSS.

More information on NetLogo Web (development status, architecture, source code, build instructions, etc) is here:

Project Ideas

The main point of contact for projects will be Jeremy. Additional support will be offered by Charly.

Web: Engine Performance

Brief explanation:

Simulation engines need to be fast, and NetLogo Web's engine is no exception in that regard. The standard, JVM-based version of NetLogo is fast, but NetLogo Web isn't nearly as fast as it could be. Addressing this issue would involve benchmarking models, seeing what functions in the engine are taking a long time, and optimizing them.

Expected results:

A faster NetLogo Web engine.

Knowledge prerequisite:

  • JavaScript or another common compile-to-JavaScript language (e.g. CoffeeScript)

Skill level:

Medium-High

Web: Performance of Code Generated by Compiler

Brief explanation:

Just as the simulation engine needs to be fast, the code generated by the compiler also needs to be fast. Since NetLogo Web would benefit greatly from performance improvements and it does almost no compiler optimization, this is a huge area for potential speedups.

Expected results:

Faster code being generated by the NetLogo Web compiler.

Knowledge prerequisite:

  • Scala
  • JavaScript or another common compile-to-JavaScript language (e.g. CoffeeScript)

Skill level:

Medium

Web: Model Sharing

Brief explanation:

Currently, NetLogo Web can save files to your computer as .nlogo or standalone HTML files. We would like to expand those capabilities to make it easier to store models in the cloud, to open those stored models, and to distribute them to others.

Expected results:

Cloud-based saving, loading, and sharing of models in NetLogo Web.

Knowledge prerequisite:

  • HTML
  • CSS
  • JavaScript or another common compile-to-JavaScript language (e.g. CoffeeScript)
  • Server-side language and database

Skill level:

Medium-High

Desktop: Improved Editing Support for Widgets

Brief explanation:

When modelling in NetLogo, our users have often expressed the desire to be able to do more with our widgets and widget editor. The current editor is certainly serviceable, but we've had a number of requests come in over the years to make it more user-friendly. Some of these ideas are listed below. While each of these ideas is fairly modest individually, taken together they could make a big difference for our users.

  • Support widget "default values"
  • Add model control widget - Issue
  • Add a "multi-chooser" widget - Issue
  • Add widget alignment/snapping lines - Issue

Expected Results:

An easier-to-use experience when editing widgets in NetLogo, enhancing the capability of NetLogo widgets and removing some problems users encounter

Knowledge prerequisite:

  • Java
  • Scala
  • Swing

Skill level:

Easy-Medium

Desktop: NetLogo Programming Assistant

Brief explanation:

NetLogo is not a particularly large or complex language, but many NetLogo users are novice programmers and may need (or want) assistance in producing working programs. For more advanced users, there multiple ways to construct semantically equivalent statements (some of which have vastly divergent performance). There are also many times when we're parsing NetLogo code when we would like to be able to analyze a complete program, even if it doesn't match the user's not-quite-complete program. The following tasks (or a subset thereof) could form a major enhancement to NetLogo.

  • Introduce a method to return warnings or suggestions from the NetLogo compiler
  • Add a mode to the NetLogo compiler which facilitates parsing incomplete or non-compiling programs
  • Add NetLogo compiler support for error recovery and/or repair to allow returning multiple errors and warnings
  • Extend the NetLogo user interface to present warnings or suggestions to the user

Expected Results:

A tool which offers suggestions to the user and potentially offers options to change the code as well as a few sample suggestions.

Knowledge prerequisite:

  • Java
  • Scala
  • Swing
  • Compilers (preferred)

Skill level:

Medium-High

Desktop: Debugger

Brief explanation:

NetLogo is used both for teaching first-time programming to students as well as for complex modeling. Sometimes a debugger would make it easier to see what's going on in NetLogo, whether for a novice who's just learning or an experienced user with a complex model. Adding a debugger would involve modifying the code tab to make it possible to add breakpoints, adding a "debugging window" so users could see what was going on, and likely modifying the NetLogo virtual machine to make it friendlier to inspect and step through.

Expected results:

A visual debugger for NetLogo.

Knowledge prerequisite:

  • Java
  • Scala
  • Compilers and/or virtual machines

Skill level:

Medium-High

Desktop: Conversion of UI from Swing to JavaFX

Brief explanation:

Desktop NetLogo currently uses Java's Swing UI framework, much to the chagrin of many people who try to make GUI modifications to the NetLogo application. We would like to abandon Swing in favor of JavaFX, which uses standard web technologies (e.g. HTML and CSS) for building GUIs, which would make GUI construction in NetLogo much more accessible and pleasant for people.

Expected results:

A NetLogo UI that is entirely free of Swing and uses JavaFX instead.

Knowledge prerequisite:

  • Java
  • Scala
  • Swing
  • HTML
  • CSS

Skill level:

Medium-Hard

Desktop: Rewrite of HubNet Networking

Brief explanation:

Desktop NetLogo has a major component called HubNet which uses a client to connect participants to a NetLogo model running on a host machine (the HubNet "server"). The HubNet server runs normal NetLogo code using HubNet primitives to control interaction between the HubNet clients and the model. These primitives allow for the server to read values from the HubNet clients as well as to send information to the clients.

The HubNet networking stack provides the foundation for this interaction. Unfortunately, this networking stack was written many years ago by developers who weren't seasoned hands at network interaction and has a lot of socket and threading code that should be abstracted away by a modern networking toolkit. The protocol is not well-specified and thus very difficult to test. In some cases, networking code is being run on the swing event thread. All of this results in hard-to-debug problems and unfixable (or nearly unfixable) bugs.

Expected results:

A HubNet networking protocol and implementation which work and are well-tested. The networking protocol will preferably be built on a modern, well-tested networking toolkit such as Netty or ZeroMQ.

Knowledge prerequisite:

  • Java
  • Scala
  • Networks / Distributed Systems
  • Threading
  • Swing (recommended, not required)

Skill level:

Hard

Questions?

If you have questions, input, or ideas of your own to propose, please send them to the netlogo-devel group.

Clone this wiki locally