There is also https://bedit.handmade.network/
There is also https://bedit.handmade.network/
Thanks Martins and Simon. I was not aware of 101 Editor or BEdit. Both those programs are pretty much exactly what I had in mind.
My wheel reinvention project is a web app that replicates some of the Twitter functionality really well, enables a weird use case that Twitter can't do and consists of 97% C++/GLSL and only 3% web stuff. Right now it's at a cool engineering demo stage, and I hope to spend the jam week making it more useful as a tool.
Once upon a time I encountered a guy on Twitter who posts a lot of interesting threads and links related threads to each other. Official apps make it hard to keep track of what is read and which paths haven't been explored, so it's easy to get lost in the maze. I figured it would be interesting to build a dedicated web tool to view these threads as a graph, and to do it with C++/wasm/WebGL to spice up the challenge. It was cool to not deal with arbitrary restrictions that DOM puts on the building blocks available and to see what it takes to build a UI from pixels.
Currently the app can load the network of 2K threads/19K tweets as a blob, display every type of tweet pretty close to how Twitter would do it, teleport you to a random thread and show the incoming/outgoing connections with arrows.
You can check it out at https://visa-viz.github.io/ (best viewed on desktop and beware the slow initial load).
Things that might get implemented during the jam:
My project will be a re-imagination and generalization of text editors. It will be changing the definition of a text editor from "a program for editing text files" into "a program for editing any file that can be converted into a textual representation".
Text editors have been around for decades and are still popular for good reasons. Editing content as plain text is an easy and natural interaction with a computer. The files text editors work with are text files, basically a sequence of characters. We store a lot of content in text files, mainly because this allows any text editor to display and edit them. That's a huge benefit compared to other formats that might need specialized software for editing them.
On the other hand, text files have quite some shortcomings:
First of all, they are typically a lot less efficient than binary files, both in terms of storage size and reading efficiency. For example, I've seen ~10x improvements in size and performance when we were switching some large csv files to a binary format.
Second, many text formats have syntax rules that a text editor might not understand. A text editor will happily store files containing errors, and you might only discover it later when trying to parse the file. If you've ever pushed something to CI that then reported 15 minutes later that you've made a trivial syntax error in some configuration file, that's what I'm talking about.
Third, text files inherently mix content and presentation. Take programming languages as an example: They usually don't care where you put additional whitespace, but your choices are stored in the file anyway and shared with the whole team. There have been countless discussions about code formatting rules, preferable line lengths or whether or not to use curly braces for code blocks. There's no generic right answer to these questions because they are depending on individual preference. People have different tastes and needs, so there's no one-size-fits-all.
So what if all of these issues could be solved while still allowing the text editing we like so much?
My idea is to create a public registry of so-called "converter plugins". These plugins are WASM modules and basically provide two functions, present and store. present takes a sequence of bytes and converts it into a text. store does the opposite, taking a text and converting it into a sequence of bytes.
A text editor using these kinds of plugins works like this: When opening a file, the editor checks the file format and lets the user choose a compatible converter plugin. The plugin converts the file content into a textual representation. This text can then be edited just like in a regular text editor. When saving the file, the textual representation gets parsed and converted into the storage representation.
This simple enhancement provides a decoupling of how files are stored on disk and how they are displayed in a text editor. This has some big advantages:
I've been experimenting with this idea over the last couple of months and have written some code already. I want to use the jam to bring these experiments into a usable state and focus on sharing the idea more broadly.
Changing something as fundamental as text editors, it really feels like I'm reinventing the wheel here. Let's see if I can get rid of some of the larger edges our current wheels are having ;-)
I'm looking forward to the jam and especially to the other's projects. If you're working on a text editor and would like to integrate support for these plugins, I'd be glad to collaborate. See you soon!
I was thinking about what program I would personally really want to improve, and windows explorer was the clear winner here. Like tomthornt0n said, it just sucks so let’s improve it!
Soo in the middle of writing about this, I sadly realized that I don’t think not going to make this, but here is my idea anyway:
I want to make a simple and snappy explorer that’s fun to use. I already have a very clear vision for what I want to make, and I feel like I’ll be more productive and comfortable if I tackle it alone this time. But I 100% support the idea of sharing the ideas instead of keeping them secret for yourself, so I'll describe what I have planned so far and if you want to discuss ideas, msg me on discord (@Eero#4198).
The design goal is to stay simple and make everyday file navigation, searching, creating and moving files as fluent and fast as possible. I don’t care about fancy features.
Here is a quick draft I made: https://imgur.com/h1TFaMy
Very simple compared to win explorer, not a lot going on. I’m not against buttons, just didn’t spend any time adding them. But for this project I AM against hidden menus/dropdowns. It’s good to have everything immediately available because file explorer is used so much.
The first obvious improvement is tabs. Tabs are nice. The second biggest change is the way navigation works. I’ve borrowed the idea of directory columns from Mac OS. I like it a lot more than just having a single folder open at a time, but the problem becomes that if you have a deep path with few files in each folder, you’ll waste and quickly run out of screen space.
My idea is that clicking once on a folder opens it regularly in a new column, but double clicking a folder also collapses the current column it’s in. So you can double click your way and all previous folders will be collapsed. In the bottom you can see the path, and in dark gray you can see folders that are collapsed (“mammals”, “cute”). The collapsed folders are collapsed “between” that vertical double-line. You can also click on the words in that path, and it will collapse/uncollapse those folders.
You might wonder what that new-tab + button does. It opens an empty directory which is a temporary and anonymous folder where you can drag and create files. It is destroyed when you close the explorer. I think this could be pretty useful.
Other noteworthy things:
-No crap like “This PC”, just straight to the point with C:/ and D:/ and other pinned base directory buttons. Drag and drop directories there to pin them.
-I was thinking you could press space and start typing/filtering directory/file names, pressing tab could autocomplete the folder name and go inside. Basically keyboard navigation.
-Recent files are instantly accessible. I was originally thinking this space could potentially be replaced with a rectangle that holds a temporary folder, the same thing as the new-tab + button does, but idk.
-FAST file search that updates as you type. It’s ridiculous how slow the windows search is.
-copy/paste the path as text
-ability to launch cmd in the folder
-mouse extra buttons for going back/fourth
-generous padding so that there is empty space where to click
Ooo the list keeps getting worse
-setting it as the default file manager on windows, so when you double-click a folder or press “show in folder” on a chrome download, use my file manager instead of windows explorer. This can be done somehow, because XYplorer can do that, not sure how. However, it’s not perfect. If you for instance say “Open File” in any program, it will still use the default windows explorer. I’m not sure if that can be solved.
-undo, redo. Deleted files will have to be restored from the trash bin
-smooth window resize, draw while still resizing. I’m using vulkan and I have no clue if that’s even possible.
-custom window border. I already have code that does this.
-drawing file icons. Picture files, pretty ez, but what about an ordinary icon for a text file? You’d have to look at which program is the default program for that extension, then read that programs icon (.ico) file and then make an image out of that… It doesn’t sound fun.
-folder links, hidden folders
-Right click menu options… Some programs add their custom options there. Right click -> open in notepad++. Or right click -> 7zip -> extract. XYplorer right click menu actually has these too, but I don’t know how they’ve done it. I guess they’re somehow using the UI library from windows (which I’ve never used) to add the identical right-click menu. Ironically this means you will also get the latency of the windows right click menu.
I went through the effort of designing this thing, but realized finally that uhh yeah I’m not gonna do that :( Just too many things that I don’t believe I’m going to be able to solve, many to do with windows. Hopefully my ideas will be inspiring though, and best of luck to whoever is going to try to make a windows explorer replacement!
I might think about another project idea in the following days.
I am thinking of reinventing the browser basically with lua, a project that I have in my todo list for some time now
If anyone is interested, feel free to contact me on discord.
I'll be working on a video editor - hopefully very simple, but I love the SilverNode/Blender idea of having an interface that leaves your left hand on the keyboard and the right on the mouse as much as possible for combining digital and analog inputs.
It'll be mac-first, but I'm going through a platform layer, so will be porting to Essence asap ;)
I've always wanted to create a programming language. I have something small in mind, but it is possible I'm underestimating the task.
The language is going to be dynamic and compiled, hopefully with same ease-of-scripting as Python, but with the peformance somewhere between C and LuaJIT.
One week will be a lot of time, to implement a lot of the things I want. This however is not just going to be a jam project, since I want to work and improve upon it after. I'm basically using this jam, as an excuse to finally get started on a project, I've wanted to create for several years.
The overall goal is a language that fits my needs very well, but I will put effort into making it a community project on GitHub.
As for what it's reinventing, I mean... It's another programming language, amongst the many many languages out there.
I intend on streaming the development and uploading devlogs of the project. I'm also going to be creating a short series of videos after, that goes through the development of the entire language (parser, compiler), using simple and beautiful graphics.
My project idea is to reinvent the digital audio workstation (DAW). There is no shortage of free DAWs, but there is a lack of quality. Electronic music production being a creative field requires a tool that enables individual workflows and supports the user as their workflow evolves. In my recent searching, I found tools such as Cakewalk, LMMS, or Reaper either didn't support my workflow or features that were important to me.
I'm using a few main pillars to keep the scope of my program as small as I can:
These pillars give rise to the following features:
During the jam, I hope to finish the first two features.
I plan on developing this in rust, and taking advantage of https://github.com/RustAudio for the heavy lifting & audio processing. I also have a bit of experience with elm, so I'll be using https://github.com/iced-rs/iced for gui.
I'm primarily making this program for myself, so I'd prefer to discover it over the course of the jam first. That being said, if anyone is interested in helping after the jam I'm totally open to it & can provide support!
I really need to switch to a non-linear note taking system.
Most notes I have taken in the past year are practically inaccessible, as they're all in one huge tree structure, which isn't much more explorable than a linear list.
As I haven't found an existing solution that I'm happy with, I'll use the jam to begin creating my own one.
Things I don't like about existing solutions:
Things I like:
I probably forgot a ton. If you have any pains/ideas, I'd be glad to hear them!
I'm so excited by all the responses here! This is a great turnout already, and I'm so excited to see what everyone can get done in a week.
I just wanted to show my appreciation for a few ideas I find personally exciting:
Notion's structured editor. (Even though it's laughably slow.)
I am a big fan of Notion as well, but I'm really concerned about how slow their app already is. And with such elegant data organization, it seems like a shame that they aren't doing more to help you search and visualize your notes. Leddoo, I'm really happy to hear that you're gonna explore this space!
My wheel reinvention project is a web app that replicates some of the Twitter functionality
ilidemi, this thing is already super cool 100x more pleasant than actually navigating tweets on Twitter. Super excited to see what else you can do with it!
a mobile application that would render and organize ChordPro files
I am always super excited to hear about projects like this that reach outside the domain of programming tools. Projects like this are in large part why we wanted to do this jam in the first place!
I will be working on a word processor / typesetting format.
I am so excited to see prototypes in this space. (This was one of the things we had on our starter list!) Best of luck Samuel, I'll definitely be paying attention to this one!
This jam is gonna be great! I'm itching to kick this thing off 😁
The wheel reinvention project I have in mind is a cross-platform Orthodox File Manager.
Total Commander is the first app I install on a new PC, but I can't use it on Linux or Mac, or in remote SSH terminal for that matter.
Midnight Commander meanwhile only has an unofficial Windows port (and has other missing features).
The idea is being able to compile the same app with a GUI or TUI and the same operations being available to you under the same shortcuts. Filenames may be condensed and the layout may be a bit different in the terminal, but you'd be able to keep your workflow.
For the Jam only a small part of this project is expected to be realized, and TUI support is a secondary concern.
Initial prototype goals for the Jam week:
It'll be written in Odin.
I am registering for the Jam. The project I will be working will be codenamed "Ambrosia".
I will reveal what the idea will be at the beginning of the Jam.
It will be written purely in Odin using may of the built-in vendor libraries such as SDL and the native port of rxi's microui.
Going to use this jam to put together a
.procreate file reader and hopefully exporter. I have an app already that I use to export PSD files and ASE files. But my current workflow is making art on my iPad in procreate. Then I have to hit
export save it as a PSD, save that to my computer, then I can export that to PNG.
So I hope to:
.procreatefiles and get the layer and image data.
.procreatefiles on my computer and add new ones.
I just took a compute shader workshop the last eight weeks by the artist arsiliath. I've implemented the exercises using Rust and WebGPU. I mostly have one-off scripts that are quite complex -- I'd like to make a framework to simplify their logic.
In particular, there are a number of patterns I've been laboriously repeating. For example, texture swapping, managing a buffer of read-only parameters, implementing read/write buffers, instancing for 2D-to-3D pixel effects, and windowing.
In many ways, this is reinventing the wheel -- easy-to-use shader toys already exist. However, this one is being written in Rust using the WebGPU API, making it somewhat unique. I also hope to use this framework in future projects that incorporate the setup and shaders into larger animated works.