Recent comments in /f/coolgithubprojects

code_architect t1_j7c1kwk wrote

If you have to use the mouse to click buttons with hover effects, is it really still the terminal? Might as well just be a GUI at that point. I guess there a corner case of wanting to run this on a server you only have headless access to. Still quite impressive for what it is though.

That cat command is neat, does it play nicely with pipes?

5

TheLogicMaster OP t1_j5ddrfk wrote

Thanks. Yeah, this is really my first time posting about the project since it's in a working state, and I wasn't aware of that sub, I mostly perused the source code.

That's always fun. I've considered doing something with LLVM, but I opted instead to make something that's a bit more unique in some of the design choices, prioritizing that over pure performance.

1

shai_almog t1_j5dc8n4 wrote

Interesting. Good luck with the project and keep us posted. I'm surprised you didn't post about it to /r/cn1 which admittedly isn't a huge sub. But its nice to see new projects.

I'm also considering writing a new AoT VM. More for the backend than mobile. I have some ideas that I need to explore in that direction but I'm pretty busy with other tasks at the moment.

1

TheLogicMaster OP t1_j5dbkl9 wrote

Yep, Java constructors and finalizers have to be treated as normal methods completely separate from C++ constructors and destructors, which is reasonable, anyway, with how Java objects are normally constructed. Trying to merge the Java and C++ constructors would definitely present issues, and destructors would be worse. Virtual inheritance is definitely a pain, requiring a number of workarounds to get everything compiling, plus sketchy behavior like needing a shared pointer to the object that's been partially destructed while calling the finalizer, or calling the finalizer to begin with, since the virtual function table changes during destruction. Everything has been working quite reliably so far, though, not running into any issues with the thousands of generated classes that I've tested.

Yeah, it's primarily the issue of debugging it. I've considered what would be required to implement one here, and it wouldn't be too bad to implement a similar one, but I've just spent so long debugging GC bugs in the C version, I opted for peace of mind and the performance hit, knowing that it may have been a decision I would regret later. It basically resolved all of the memory bugs, though, and the performance is still sufficient for now, so I'm quite happy with it. It's also nice not having to worry accidental collection in native code, though that could be mitigated with convenient C++ features.

1

shai_almog t1_j5d91cq wrote

There are some nuances in the Java object model such as constructor order, object initialization, etc. that are very fine and might collide with C++. That's my main concern here. Also virtual inheritance is a pain. Anyway, I hope that works for you.

Curious though why you didn't port the GC?

I get that it's hard to debug but it's kind of an important part of the puzzle. It isn't very complicated either.

1

TheLogicMaster OP t1_j5d8fm6 wrote

Yeah, C++ seemed like an interesting challenge due to the object hierarchy issues, but I think most of the issues have been resolved with just using virtual inheritance. The additional flexibility with C++ makes a lot of the solutions much more elegant, which has been nice to actually work with. Most of the handwritten C++ for intrinsic functions looks quite similar to their Java counterparts, for instance. The whole concept was a bit on the impractical side, since there's no GC, so performance is a bit limited, but it's sufficient for simple games, and completely removes the need for additional countless hours debugging GC bugs.

UWP was more of an afterthought here, since it could be achieved with slight modifications to the C++ codebase while hopefully maintaining identical behavior to the other platforms. The main goal was Xbox support with UWP, since it's for a game framework, but the future of UWP on Xbox seems uncertain, so it was just another feature to throw in for fun. The primary goal of the project was always the Nintendo Switch backend, though there are plenty of other interesting possibilities like wasm.

1

shai_almog t1_j5d5ybq wrote

Interesting. We specifically chose C and not C++ for ParparVM because of the inherent incompatibility between the object models. I see you're running into some of those problems right now.

Why aren't you using our UWP work based on iKVM?

2

TheLogicMaster OP t1_j5cnt7c wrote

This is a project created to bring Java codebases to platforms without a JVM using plain C++. It primarily exists to support the LibGDX game framework backend for Xbox and Nintendo Switch, SwitchGDX, though the generated C++ could be used in any environment. It was originally just a modified fork of the Parpar VM to compile with plain C and support further runtime library features like file I/O, but has been completely rewritten as far as the transpiler and native code is concerned to make use of modern C++ features and provide memory safety.

3

EvitanRelta OP t1_j463a01 wrote

sflr!

Then i guess my converter library has that edge over Pandoc. Specifically, this library can preserve the HTML better than pandoc

So, what im getting is that:

  • u want to make a tasklist app
  • that stores the notes in markdown
  • with an commandline function that inserts a string as a list item under a specific header

sounds like it can be done by just using a bash script to parse the markdown file, find the headers, and just insert the listitem.

for the nested AST idea, im not sure what itd be useful for.

1

causa-sui t1_j3enkaq wrote

Learn the tools and how to work with pipelines in the shell. Read the manpages etc. Unix philosophy is that everything does one thing but can be easily linked through pipelines. Then you can combine tools to do arbitrary things like this, rather than memorizing incantations.

4

djsnipa1 t1_j3dyrgn wrote

This looks nice so far!

Iโ€™ve been wanting to input a url and get readability like output in markdown (where it okay keeps the main article and not all the nav and header and footer, etc. I havenโ€™t found one I like so if I end up building my own, Iโ€™d like to try to implement this with it.

2

seanpuppy t1_j3aeh8f wrote

It most likely can't convert the html tag to stay as html. an <h1/> tag literally is a header with one # in markdown. Markdown was meant to be a more human read/write able form of HTML, where its meant to directly translate to HTML.

&#x200B;

For "inserting markdown" I wish I had a better example ready, I haven't open-sourced this thing yet (or finished it) but it started as an idea to make using my existing note system more powerful / easy to use without actually opening a file.

All my notes from day to day are in markdown, and lets say I use a template with something like below, so that I have a dedicated note file for every single day. (I use a cool VS code extension called Dendron which is similar to Obsidian for markdown notes)

# TODO
* cure cancer
* take a nap

# Ideas
* turn water to wine

# Meetings

## Meeting 1
blah blah

## Meeting 2...
blah

I want to be able to quickly jot down an idea or todo item, but I don't want to have to actual do the mental context switch of switching windows and finding the daily file. My work computer is a mac laptop, and ive found Alfred to be a very powerful and flexible tool to do basically anything from any context.

&#x200B;

So ideally I could have an Alfred command for "ideas" or "todos" etc... that would insert a string of text into my daily notes into the right spot. So in this case something like `inst $todo email joe about that thing` would insert "email joe about that thing" into a list block under a header tag called 'todo'

&#x200B;

with an output like:

TODO

  • cure cancer
  • take a nap
    • email joe about that thing

Ideas

  • turn water to wine

&#x200B;

But that got me thinking, there's potential for a powerful / flexible system of converting markdown into a tree like AST syntax that would let me reference different levels of the note similar to how one could reference nester JSON.

&#x200B;

So I started exploring pandoc, which converts all sorts of things into an AST (Abstract syntax tree) which is almost what I want, except its flat. No hierarchy except bulleted lists. To me, a <h2> below an <h1> is a second level in - BUT pandoc would treat it as a flat list of different markdown elements.

&#x200B;

I started out trying to write a python pandoc filter (see https://pandoc.org/filters.html ) but realized its intended design couldn't do what I want, but that doesn't really matter as pandoc can handle reading/writing from/to a pandoc AST, so any python script that reads in and spits out a compatible tree will work fine.

SO I created a python script that can handle SOME Markdown aspects, turn it into a nested tree, and spit back out a flat tree, which can then be used as ran through pandoc again to get markdown back out. Once I have that tree, I can start to design a syntax for specifying a part of the tree, and text I want to add, resulting in a modified nested tree, which can still be ultimately converted back to markdown.

&#x200B;

Unfortunately I haven't opened sourced it yet, I haven't finished but realistically its got enough functionality to be worth sharing as WIP. I hope all this made sense, I'm not sure if I've explained this project to anyone in this much detail yet.

1