importx
Because JS is JS, I can’t use normal blocking socket reads, instead i have to use this weird structure of promises, like I think async functions and promises are awesome but like when some things need promises and some things (unix socket API) do not have promises i have to make this weird linking layer which involves things like:
.then to a function to trick JS into thinking it’s some weird function-promise object, then use Proxy on that mutant to make a weird kind of object thats a function and can be await’ed and can also have properties set and accesses and all properties are also this cursed thingasync) and resolving/rejecting it OUTSIDE THE FUNCTION like i send a promise but another function wayy outside resolves it?in libimportx-js:
(sorry for the code screenshot but since this devlog is only a stepping stone (it does not implement importx yet, just the framewrok underneath), i dont have any output to show
Log in to leave a comment
exportx (and all required functions it depends on) in the JS implementationnow i have 2 languages with implementations (python,JS) so i can test it out. look in the screenshot, it should seem cursed to you if you are a normal person like im importing a js file as if its nothing and its just seamless, i can even move around unserializable objects (even files, not shown).
in libimportx-js (most relevant to this ship):
in libimportx:
Log in to leave a comment
now you can send back a handle the client sent to you and it will work
in libimportx:
libimportx-python:libimportx-js (new repo):
Log in to leave a comment
Now you can pip install libimportx
In libimportx:
libimportx-python
Log in to leave a comment
exportx implementation in Pythoni made the python implementation for exportx and also some tests for it
in libimportx
libimportx-python
for pesky ft reviewers: the screenshot is technically “output” not “code”
for normal people the screenshot shows me testing the client:
+
und which does not exist, so the client returns an error, errors are prefixed with minusmydict which is successful so its prefixed with plusjson module however modules cant be sent over JSONjson.dumps
json.dumps but i didnt put any args so it errors
Log in to leave a comment
yeah turns out the previous one had many errors and was unimplementable so i fixed than and made it better
The JSON output always starts with + or - for success and error. This means I can read one byte to see if it is successful or not.
Dynamically generated functions (like functions returning functions) could not be serialized before because they didn’t have an identifier as they were not in any variable. Now it allows both static and dynamic functions.
Compiled languages and languages which dont use # for comments would straight up not work since without a shebang the OS would not be able to figure out how to run it. Now the library itself figures it out.
Data that could nto be serialized (eg file objects) would not work, now it just uses a special opaque type. so objects that dont exist/cant be moved to the other language can be used as well. (so i could write to a file object through languages!)
here is a diagram i made to explain how the opaque object thing works.
Log in to leave a comment
this is just for being able to vote
Log in to leave a comment
wait what im documenting it before making it?? yes you heard that right. the reason im doing this is for procastination so that i have a clear and consistent implementation plan. i will have to make this in a million languages so im making sure i dont have to improvise
here is this diagram i made to explain the protocol loosely
Log in to leave a comment
FT has a system which detects if you clicked the demo and repo links or not. Now it automatically tracks that as well. The demo link clicked is always true (since you start out on the demo page) and if you ever switch to the repo tab that is sent to the server as well.
itzmetanjim/spaceshipvote
itzmetanjim/github.com:
Log in to leave a comment
the github app and the welcome app. for the github app i had to make my own github client since github.com does not let me iframe
now when you log in you will see a welcome screen and there is a dock to launch apps. you can close (double click titlebar), resize (shift drag titlebar) or move (just drag titlebar) windows
itzmetanjim/hackeros:itzmetanjim/github.com:itzmetanjim/solarsystem
This one is a seperate FT project
Log in to leave a comment
its a very generic project but hey i unlock a sidequest!
This actually helped me get the votes for the ship faster. Yay!
(military grade encryption is the same as normal people encryption it means absolutely nothing)
This is actually secure, without your password even if i take your device and hack my website it still will be impossible for me to get your data.
itzmetanjim/hackeros
itzmetanjim/solarsystem
this is a seperate FT project but this depends on this. im including the commits I made there that are just because of this project
itzmetanjim/github.com
(nothing yet that is related to this)
Log in to leave a comment
Log in to leave a comment
The bugs fixed are:
In itzmetanjim/spaceshipvote
In itzmetanjim/github.com
Log in to leave a comment
Since real github.com does not allow iFrames, i decided to make my own client using the API. As you see i didnt really try too hard to make it look realistic since i am not trying to be phishing. You can try this client out by replacing github.com with tanjim.org/github.com in a repo URL.
Importantly, this supports Github releases as many people use that as their demo link
In the spaceshipvote repo, I did some mnor changes
In the repo for the client,
Log in to leave a comment
Now it works! hooray!
I also registered the extension by adding the X-Flavortown-Ext-17833:true header which is how FT tracks how many people use the extension. This took less than 15 mins thats why it want in a seperate devlog
HOWEVER! Github does not allow iframing so I have to use the Github API to make a github viewer thing. I guess this is an oppurtunity to optimize the client for voting or something
In the screenshot: the sidebar on the right is what my extension added
since you are voting you probably have a lot of votes left so to make them faster for you and use less RAM download this then continue voting (takes ~5 minutes to download). now back to the devlog…
I moved all the stuff to the left by using this simple uncentrify function, then put an example div there (where the iframe stuff will live) using element.after on the div that shows the project info and devlogs.
function uncentrify(x){
x.style.alignItems="flex-start"
x.style.marginInline="0"
}
Log in to leave a comment
Log in to leave a comment
well
what
1240% better alternative to brigadier. what takes 62 lines (not counting boilerplate) in brigadier takes 5 lines here. this is JUST the command definitoins not even logic
i built this for past me because i had to suffer this fate when making https://github.com/itzmetanjim/mcgit
the thing builds successfully! time to make a mod to test it out
(look this is not screenshot of code, this is technically output (build passes). i could put it in a non monospace font if you like that better)
Log in to leave a comment
Log in to leave a comment
This is a small project showing off a single algorithm. But I proved Mark Rober wrong
it finally works! i also added an automatic testing tool (you can write JS to automatically battle against my algorithm)
Log in to leave a comment
Made the demo!
Log in to leave a comment
the reviewer requested README changes. i did that. and there was also this other complicated bug that was fixed by refactoring the code.
download v1.0.1 from GitHub https://github.com/itzmetanjim/mcgit/releases/tag/v1.0.1 and put it in your mods folder
Log in to leave a comment
Requires Fabric 1.21.11
All commands have been implemented! you can even clone my house if you want: https://github.com/itzmetanjim/village
/git init <name> Initialize a new MCGit repository./git activate <name> Switch to the specified repository./git add <coords> Add one block at the specified coordinates to the staging area./git add <coords> <coords> [|hollow|outline] Add a cuboid of blocks to the staging area/git rm <coords> [coords] [|hollow|outline] Remove blocks/entities from the staging area and revert them. NOTE: Changing blocks/entities in the world needs to be done by issuing commands, as this is a clientside mod./git unstage ... does not revert , only removes from staging area./git commit [-m] "message" Commit the staged changes with a message. The -m flag does nothing./git revert [commit-hash] /git reset but it changes the world as well. Commit hash can be ommitted to revert to the latest commit./git reset [commit-hash] Reset to a specific commit hash or the latest commit. This does not revert the actual world. THis is the reverse of /git add
/git status Show the current status of the repository, including staged changes, unstaged changes, but not untracked blocks/entities./git listCommits Lists all commits in the current branch./git listRepos Lists all available repositories./git autoadd [toggle|on|off] Enable or disable automatic addition of changes to the staging area. To quickly switch between, use an enchanted red wool in offhand to make this act toggled (so if you have it in offhand, auto add is off, otherwise on)./git autorm [toggle|on|off] Enable or disable automatic removal of deleted blocks/entities from the staging area. To quickly switch between, use encha…
Log in to leave a comment
revert reset status listCommits listRepos
NOTE: The Couldn't set block messages are NOT a bug! The command is working properly with all blocks being set correctly.
/git revert ... /git reset but --hard, ... is a commit hash. This does change the world./git reset [commit-hash] Reset to a specific commit hash or the latest commit. This does not revert the actual world./git status Show the current status of the repository, including staged changes, unstaged changes, but not untracked blocks/entities./git listCommits Lists all commits in the current branch./git listRepos Lists all available repositoriesLog in to leave a comment
Requires Fabric 1.21.11
/git init <name>: Initialize a new MCGit repository with name. Names have to be unique. Repositories are shared between worlds and servers and stored locally (unless you add a remote)/git add <coords1> [optional coords2] ["hollow","outline", or nothing] Add a single block/a cuboid of blocks to staging. (after another update, automatic adding of placed blocks will be added)/git rm <coords1> [optional coords2] ["hollow","outline", or nothing] Remove a single block/a cuboid of blocks from the world and the repository. (after another update, automatic removal of broken blocks will be added)/git unstage <coords1> [optional coords2] ["hollow","outline", or nothing] Similar to /git rm or git rm --cached in real git. Removes from the repository but not from the world./git commit <message...> Commit!/git origin <coords> Change the origin of your build. By default, this is the place where you init ed or cloned the repository. All blocks are relative to this origin./git activate <repo_name> Switch to another repository
Log in to leave a comment
amazing project
yoo thanks
ok because of hackatime update delay this devlog covers a lot of things:
In the video, you can notice:
Log in to leave a comment
Made the demo for the captcha.
This is incredibly easy for humans, as we can “stop” mvoing the slider in real time. But for AI, you have to send a whopping 50 images to a multimodal (image supporting) AI model. Even using a light model like Gemini 3 Flash, it will take 27,225$ or 54,450 input tokens (equivalent to an 150 page book) and JUST TO CRACK ONE OF THESE!
Oh, if you are thinking of pasting the ASCII text that wont work since the Markov Chain produces decoys that have the same local patterns as real ASCII text art and the AI gives answers all of the decoy texts, and even when its not a decoy its the wrong answer. So without images AI can’t “read” ASCII text art.
The “fake” ASCII arts are generated using a special markov chain algorithm (implemented in the previous devlog) that makes it harder for an ML model to recognize which text is the real one.
Log in to leave a comment