All Projects → elm → Projects

elm / Projects

Curated collection of projects for folks looking to collaborate within the Elm ecosystem.

Programming Languages

elm
856 projects

Projects that are alternatives of or similar to Projects

Fluidframework
Library for building distributed, real-time collaborative web applications
Stars: ✭ 3,592 (+767.63%)
Mutual labels:  collaboration
Riotjs Style Guide
Opinionated RiotJS Style Guide for teams.
Stars: ✭ 288 (-30.43%)
Mutual labels:  collaboration
Containers Roadmap
This is the public roadmap for AWS container services (ECS, ECR, Fargate, and EKS).
Stars: ✭ 4,132 (+898.07%)
Mutual labels:  roadmap
Crowdanki
Plugin for Anki SRS designed to facilitate cooperation on creation of notes and decks.
Stars: ✭ 271 (-34.54%)
Mutual labels:  collaboration
Text
📑 Collaborative document editing using Markdown
Stars: ✭ 282 (-31.88%)
Mutual labels:  collaboration
Pulsar
Network footprint scanner platform. Discover domains and run your custom checks periodically.
Stars: ✭ 314 (-24.15%)
Mutual labels:  collaboration
Lumen
A private Lumina server for IDA Pro
Stars: ✭ 257 (-37.92%)
Mutual labels:  collaboration
Learning Roadmap
The Front-End Developer Learning Roadmap by Frontend Masters
Stars: ✭ 336 (-18.84%)
Mutual labels:  roadmap
Wookteam
WookTeam是一款轻量级的开源在线团队协作工具,提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,知识库管理等工具。
Stars: ✭ 287 (-30.68%)
Mutual labels:  collaboration
Commuter
🚎 Notebook sharing hub
Stars: ✭ 353 (-14.73%)
Mutual labels:  collaboration
Faraday
Faraday introduces a new concept - IPE (Integrated Penetration-Test Environment) a multiuser Penetration test IDE. Designed for distributing, indexing, and analyzing the data generated during a security audit.
Stars: ✭ 3,198 (+672.46%)
Mutual labels:  collaboration
Visual Slam Roadmap
Roadmap to becoming a Visual-SLAM developer in 2021
Stars: ✭ 277 (-33.09%)
Mutual labels:  roadmap
Firestr
The Grass Computing Platform
Stars: ✭ 329 (-20.53%)
Mutual labels:  collaboration
Oorja
[archived] effortless video-voice chat with realtime collaborative features. extensible using react components 🙌
Stars: ✭ 270 (-34.78%)
Mutual labels:  collaboration
Semanticmediawiki
🔗 Semantic MediaWiki turns MediaWiki into a knowledge management platform with query and export capabilities
Stars: ✭ 359 (-13.29%)
Mutual labels:  collaboration
Hub
Dataset format for AI. Build, manage, & visualize datasets for deep learning. Stream data real-time to PyTorch/TensorFlow & version-control it. https://activeloop.ai
Stars: ✭ 4,003 (+866.91%)
Mutual labels:  collaboration
Yjs
Shared data types for building collaborative software
Stars: ✭ 5,894 (+1323.67%)
Mutual labels:  collaboration
Ml Roadmap
🤖 Roadmap to becoming a Machine Learning developer in 2020
Stars: ✭ 398 (-3.86%)
Mutual labels:  roadmap
Excalidraw
Virtual whiteboard for sketching hand-drawn like diagrams
Stars: ✭ 25,509 (+6061.59%)
Mutual labels:  collaboration
How To Collaborate On Github
A mini book about collaborating on GitHub
Stars: ✭ 346 (-16.43%)
Mutual labels:  collaboration

Before you get started, watch this video that outlines how collaboration works in the Elm community.



Elm Projects

For New Contributors

For Advanced Community Members

Again, it is very important that you watch this video and read these comments before diving into any of this stuff! Writing the code is definitely not the hard part on any of these!



Data structure evaluation website

Over time, the community will develop various implementations of data structures with different performance characterists. In my experiences in other languages, picking “the right one” is very time consuming. So the big goal here is to help people learn about these data structures and make the right choices for their application.

Say we have a couple Queue and PriorityQueue implementations, all with different performance characteristics. It would be wonderful to have a website that:

  1. Points people to great learning resources on immutable queues. What is a queue? What is a priority queue? Is it a tree structure? How does that work? Etc.

  2. Lets people race the implementations for various scenarios. Ideally folks could specify the size and shape of their data on the website and race based on that. If person A has ~100 items with Int priorities and person B has ~10000 items with String priorities, I would expect them to make the different choices.

  3. Maybe show graphs of performance vs. collection size so people can quickly get a feel for how data structures would work for their expected usage.

In the end, I think this would be an interactive website that approximates a college-level data structures course, but probably more fun! All the learning would be directed towards practical problems that folks actually have at the moment, and it will save them a bunch of time!

Some curration will be necessary to make this great. For example, there would have to be some process for including packages in these numbers. For example, if there is a package that is just has worse performance in all cases, it does not seem like a good use of time for people perusing this website. Ultimately, I think this project would need some coordination with core community members, so please talk about your work on discourse to get feedback as early as possible!


Profiling virtual-dom with V8 tools

The elm-lang/virtual-dom library is quite fast. It may be possible to do better though!

So the goal here is to get elm/virtual-dom setup with v8-natives. This would allow us to:

  1. Be sure that code is getting optimized (but not deoptimized!)
  2. Know more about how much garbage is produced.

Perhaps certain functions need to be broken into smaller chunks? Perhaps values can be made more monomorphic? A great result would be writeups of what you observe when testing things by hand. If that is useful, it would be best to make these tests a reproducible part of the library. This way any potential changes could be informed by performance implications.


WebGL

There is already a great foundation for WebGL with elm-community/webgl, allowing scenes like this.

From there folks are working on projects for terrain generation and loading 3D meshes.

I think we can make it really fun and easy to create 3D graphics with Elm, and it is a very deep topic. I recommend exploring topics like picking, entity-component systems, fancy shaders, etc. by digging into a project of your own and (1) seeing what you need and (2) sharing your observations in blog posts on /r/elm.


More Advanced Projects

There are a bunch of more speculative projects that it would be fun to look into.

These are probably best for people who are quite experienced with Elm. Maybe who have been using it for a year or more. Long enough to have a good sense of the design aesthetic of core Elm projects.


elm-find

Create a command line tool named elm-find that is all about quickly finding definitions and usages.

$ elm-find Fake.thing
[]
$ elm-find toFullName
[
    {
        "definition": {
            "isLocal": true,
            "path": "src/Student.elm",
            "module": "Student",
            "region": {
                "start": { "row": 22, "col": 0 }
                "end": { "row": 34, "col": 0 }
            }
        },
        "uses": []
    }
]
$ elm-find String.reverse
[
    {
        "definition": {
            "isLocal": false,
            "package": "elm/core",
            "module": "String"
        },
        "uses": [
            {
                "path": "src/Main.elm",
                "module": "Main",
                "region": {
                    "start": { "row": 22, "col": 14 }
                    "end": { "row": 22, "col": 20 }
                }
            }
        ]
    }
]

The implementation should focus on being as fast as possible. Think grep. The goal would be for commands to finish in under 500ms on 100k line projects, but I think it's possible to do a lot better.

This could be used to make a bunch of helpful tools:

  • A command line tool to do bulk renames in large projects.
  • Editor integrations for "Jump to Definition" and bulk renames.

I would recommend implementing this by starting with the existing compiler and stripping out anything that is not needed. This would give you a good foundation for crawling files efficiently, making nice command line arguments, and parsing very quickly.


In-browser REPL

Right now our REPL only runs on the command line. It would be amazing to have an in-browser REPL so we could actually see Html values and have a better UI for poking around expressions and values.

The most successful effort runs elm-repl on a server. This is quite handy, but I think we should take things like iPython notebooks as inspiration for the end goal.

I expect the early prototype would be a REPL for a simple lambda calculus (not connected to Elm at all) so you could test out the core UI ideas. From there, you would get in contact with community members who work on core tools and figure out what the path would be to bring it in. For example, it would be really cool if the time-travel debugger let you easily go into the REPL for any frame!


Type-Directed Autocomplete

If we see the following code:

longestName : List User -> Int
longestName users =
  users
    |> List.map .name
    |> ...

In the ... we know we want to get from List String to Int so we can suggest functions like List.length.

The best way to approach this problem is to try to implement the following function:

suggest : Dict String Type -> Type -> List Expr
suggest knownValues targetType =
  ...

type Type = Var String | Lambda Type Type | ...
-- simple representation of types

type Expr = Call String (List String)
-- in the simplest version, you suggest very minimal expressions
-- things like `List.foldl (+) 0`

By doing this, you decouple your work from other stuff. That means you can focus on making suggestions. If it goes well, integrating this with other things can be a separate project.

From there, perhaps we can rank suggestions based on which file or package they live in.

Note: Based on my experiences working on the Gmail team, I am very interested to see how well we can do with simple heuristics. Assuming quality is good, this approach has many benefits over machine learning. For example, you can easily special case thing, you can tweak heuristics without retraining, and the results may be more predictable for users. Point is, focus on the simplest plausible approach before diving into fancier techniques!


Explore Monomorphizing Compilers

The MLton project pioneered the “monomorphizing” compiler.

Normally functions like map : (a -> b) -> List a -> List b produce generic code that can work on any list, but if you happen to know that it is used as map : (Int -> Int) -> List Int -> List Int you could use a denser memory representation for the List Int, leading to quite serious performance improvements. Less indirection and less garbage generated!

This topic has a complex relationship to Elm because whole program optimization does not mix well with the kind of asset bundling you need to do in complex webapps.

The ideal result is documentation. What papers are relevant? What techniques are needed? Are there any Elm specific details or issues? This kind of thing can be shared as a blog post or on the Elm Discourse.


Explore WebAssembly

WebAssembly will be maturing over the next few years. Without a garbage collector, it is not viable for languages like Elm. In the meantime, there are a few questions it would be good to answer:

  • What are the facilities for representing UTF-8 strings? If you make it all from bit arrays and trees, we should do a “literature review” of how strings are represented in languages like JS, Java, Go, etc.
  • How does WebAssembly code interact with the DOM? What does that mean for Elm’s virtual-dom library?
  • How does WebAssembly interact with WebGL? What does that mean for Elm’s webgl library?

In all these cases, the ideal result is documentation that gets shared with discourse. Before making technical decisions and investments, certain big questions must be addressed. So it probably makes sense to do some prototyping, but the actual deliverable here is knowledge.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].