You are browsing as a guest. Sign up (or log in) to start making projects!

Keyboard1000n17

@Keyboard1000n17

Joined May 31st, 2026

  • 31Devlogs
  • 3Projects
  • 0Ships
  • 0Votes
dev of OSPedia ! learn about them operating systems!

but of course, the person writing about operating systems is also making a linux distribution, that is, amethystOS! and he's making a terminal markdown renderer cuz he don't like the others–see it at reMDer!

he doesn't devlog everyday: only when there's actually something to write about, he doesn't like yapping about nothing :v:.
Open comments for this post

6h 28m 43s logged

finished :ubuntu: gutsy gibbon article :rupnil-devlog:

this is really not good. if it takes this long to do one article… :despair-kitty:
i still have 36 articles left. if i need like 5 hours for each article, that’s 180 hours :nvs: well this won’t be fun. im going to create a template for this then, should make it easier.

this devlog is supposed to be short, yes, literally nothing else

Changelog

  • (104ae23) Finish Gutsy Gibbon article
0
0
12
Open comments for this post

1h 12m 24s logged

improvements and fixes to inline rendering

this is way earlier than my normal schedule, but that’s because i’ve got something to show. basically, inline rendering was bugged, and not only did i fix it, i also made it so that it works better! that’s all you need to know, do NOT read the rest of this if you don’t want to be bored to death, its a really lengthy explanation of this


the initial bug was that inline rendering wouldn’t work at all. i figured out the problem was that i wasn’t pushing "inline" to the state array somewhere. i realized that it wasn’t working when called in the table rendering function, and that was because i wasn’t pushing "inline" to the state array.

the reason for this is because the renderInline function slices the state array at the index after the "inline" string, so if its something like ["paragraph", "inline", "bold", "italic"], the function slices at index 2 because "inline" is at index 1, and we get ["bold", "italic"]. the problem is, if "inline" doesn’t exist, running indexOf("inline") returns -1, so it slices at -1 + 1, which is 0, so its just the whole array. but anything before “inline” isn’t a valid style, and since the function for that is undefined, it goes kaboom and throws an error saying that it’s not a function.

also gpt found 5 other bugs but they’re kinda irrelevant


the fix was making it so that the renderInline function itself pushed "inline' to the state array instead of depending on it being already there. this also removed the need for making sure that the inline string was already there. i might do this with the rest of the functions too actually :goonology: also removed unnecessary state.pop() occurrences since the pop method is destructive and can mess up everything


as for the improvement, you might see in the first screenshot that there’s a bunch of text tokens together. yk, they could be squished together into one token… oh right, that’s what i did! i changed the renderInline function to make a variable where the text accumulates until there’s no more text or if there’s an image, on which it gets pushed to the contents array


now the most important thing is that there’s only one more thing left to do: html rendering. this is the last thing before i get to actually rendering stuff on the screen! this is exciting! :yippeee: :yayayayayayay: :ultrafastparrot:


Changelog

  • (9de477d) Fix, improve inline rendering

please like this took more than an hour to write :pls: :nvs:

0
0
18
Open comments for this post

4h 15m 8s logged

THAT WAS SO LONG WHAT ON EARTH :whatthefuck:

in short, tables now work and the inline rendering function is fixed! this took a while because i genuinely had no idea what i was doing. now the long stuff:

tables go brr

i got distracted while writing this and realized everything’s actually borked, but tables do somewhat work! its still borked tho–

also i realized that my whole code is borked, but…

inline rendering includes links now!

still have no idea how i missed that

other

i just changed image function so that it returns an object with a prototype function instead of unnecessarily repeating the function as a property of all the image objects, so if there’s 10 pictures in a file, there will only be one function to render each as opposed to 10 instances of that function :yayayayayay:

Changelog

  • (d8feb46) Add table support, fix inline rendering

oh fuck, my code is COMPLETELY borked :fear: :despair-kitty: :agadespair:

0
0
11
Open comments for this post
Reposted by @Keyboard1000n17

1h 6m 30s logged

WELCOME TO THE EXPERIMENT

we will now cheese stardance’s algorithm into giving me tons of views
and i will explain how
jump to the bottom to skip the technical stuff

how stardance’s algorithm shows things:

so it checks for actions in the last 7 days and here are the most
important ones by order:

  • likes
  • reposts
  • views
  • project followers
  • comments
    BUT stardance also recommends content based on WHO liked followed the
    project etc and thats the key

instructions

i need you to leave a comment just with your project and if its cool i
will promote it here
then i need you to like repost and follow the project thats it

special people

these people should be the key to everything here they all are from one
specific interest and should make me pop up to everyone thats the same
and that intrest is: i dont know, i will try to tag all the people that i
think the project they work on is very universal

for the special people

its very important each of you do the instructions thats why i tagged
you
we will start with the person i stole this idea from and all the people
he tagged:
@jam06452
@vejas
@kingvon
@Keyboard1000n17
@SeradedStripes
@Rupnil
and others
@Lightfury
@PAPER_01
@sol4r_on_hackclub
@tjingi_
@water

also

lets add funny pictures for engagement and a cat + dog

24
6
1220
Open comments for this post

2h 30m 4s logged

PEAK CODE

gng TS IS PEAK!!!!

i added a function that renders code AND ITS PEAK JUST SEE THE SS


now some of this time came from trying to figure out why my code was joining the contents of a function, and it was because i forgot to add the argument that gave the coloring function (chalk library) the text to color. hey, at least i found a way to read the contents of functions :shrug3d: time to go steal code from closed-source packages


leaving that aside, my next step is thematic breaks. this shouldn’t be too hard, in fact, i’ll do it rn since it’s that easy. rn its 8:49 PM GMT+0300, i’ll tell in the next paragraph when i finish it.


[8:54 PM] just did it, it only took like 2 mins, the other 3 were because i found a bug that never removed codeBlock from the stack after it was added.


that’s about it, and this devlog was quite short. well, comparatively, to my other devlogs, after all there’s people posting 4 word devlogs. you should follow this project tho :nodnod:


Changelog

  • (a17bd2b) Add thematic break support
  • (e28f1b1) Add code block styling
4
0
24
Open comments for this post

4h 28m 37s logged

when the FUCK did this become 4 hours :hs:

so uhh i spent like all of this time debugging and improving my code.

first thing is, i replaced these “microfunctions”, as i call them, with
an object that had keys whose values were arrow functions. these arrow
functions did the exact same thing and took up less space and was even
more readable!


second, i spent some time on a stupid bug where the main function in
stylize.js would hang. i thought it was an issue with the image
function, but after half an hour or so, when i added console.log(done)
right before the return, i realized it had to do with the main function
that was calling the image function, and sure enough, the second i
looked at it, i realized the problem: it was a while loop and i forgot
to add a line that incremented the index, so it just kept doing the
same thing forever until i killed the process :sk: oh well, more hours for me :shrug3d:


third, i improved (or rather cleaned) my image function. it returns
promises and doesn’t use terminal-image directly. instead, i made it
so that it would return an object with a bunch of keys, one of which is a
function that takes the whole object as an input. this function
actually renders the image, since i plan to write the function to
display it in a way that deals with image rendering after rendering
text, and while the images get rendered, a spinner takes their place
temporarily, but the images replace those spinners once they are
processed


fourth thing is, i made it so that the main function calls the
renderInline function instead of the paragraph function. in fact,
this paragraph function is completely useless, so i went ahead and
removed it too.


lastly, i upgraded a bunch of packages:

  • upgraded typescript from version 5 to 5.9.3
  • upgraded got from version 15.0.7 to 15.1.0
  • upgraded markdown-it from version 14.2.0 to 14.3.0
  • upgraded shiki from version 4.3.0 to 4.3.1

if you wonder what these packages are

  • typescript is, well, the typescript language, not sure why i have
    it, might be a dependency for another package.
  • got is some package that does pretty much the same thing as the
    default fetch() but it can give me a buffer, which i need for images
  • markdown-it is the markdown parser
  • shiki is for coloring code. fancy, right?

Changelog


aight this took me 2 hours to write and i started coding again in the
middle of writing this :sk:

0
0
10
Open comments for this post
Reposted by @Keyboard1000n17

1h 59m 45s logged

https://stardance.hackclub.com/projects/8100

Do you want to know how computers actually work? Do you want to remove the wool placed over your eyes by modern languages? Abstraction breeds ambiguity! Crawssembly is the first step to seeing clearly. The only assembly langiage made for education. (Now as fast as native C!)

Advertaise here at, https://billboard.jam06452.uk

15
3
4439
Open comments for this post

i want to cheese 🔥

Open comments for this post

56m 23s logged

like @sebashtioon said “I want to cheese”
This is a completely cheesed devlog this should NOT be number one.

While yall are here checkout https://url.jam06452.uk
Shoutout to @jam06452 they made peak projects. @vejas cause im nice. @kingvon cause idk, @Keyboard1000n17 for making OSPedia, @SeradedStripes cause why not. and maybe @Rupnil

PS I love nachos but after I found out how they are made I might not eat them anymore.

17
5
14
Open comments for this post

4h 22m 17s logged

sheesh!!! this was quite a bit of work, so i’ll use a bunch of paragraphs here:

first thing is, i found a way to deal with the logo. you see, by default, the logos are in light mode, having black text, but in dark mode, that black text cannot be seen, as a result, i need to change the logo in dark mode. however, i had no idea how to do this without using javascript. see, if the user has javascript disabled, then the logo won’t change and it’ll just be an ugly thing. but i found out (using google’s ai mode) that i can use this css property called content, and set it to the url of the dark mode logo in dark mode! so i don’t need javascript for that then.

next, i actually did the macOS golden gate article, though i have to put some stuff for the infobox and put the logo.

third, i was lurking around in the macondo chat when someone sent a link to this icon set called lucide and HOLY SHIT their icons are SO good, so i got a few of those icons and used them in the bottom bar AND THEY LOOK GORGEUS ÆÆÆÆÆÆÆÆÆÆÆ

fourth, i changed some breakpoints, though i still have to fix some :hs: i’ll get to it next week tho (see below)

finally, i fixed a bunch of problems with the bottom bar. you see, for some reason, the bottom bar itself was 5rem high, but the content stretched outside it. after a half hour or so of debugging, i figured that the images were the problem. after another hour or so of debugging, i eventually asked chatgpt, and finally found (after another half an hour :im_fucking_sobbing: ) that min-height: 0; on the div elements fixed the problem. i also made it so that the bar looked like a beautiful island instead of an ugly bar like it was before. i actually came up with this bottom bar in a rush back in :flavortown: flavortown before shipping at the end of the event

what’s next?

i have to do this stuff in the immediate future:

  • add the macOS golden gate logo and infobox
  • change the bottom bar into a menu that opens when you press a button (with animations!)
  • update the macOS sequoia article (i noticed i haven’t updated the beginning paragraphs
  • ACTUALLY fix the breakpoints (they still broken as heil)
  • finish the ubuntu articles (i have 32 left :fear: )

as for further plans:

  • i want to remove the background pictures, they’re not great
  • also, i need to add a modal to change themes, speaking of which, i need to write some javascript to change themes too. it’ll just save the class name of the theme to localstorage, should do well.
  • adding more operating systems is on my list, and the next ones i have in mind are debian and arch linux.
  • there’s many more things that i’ll do one day…

Changelog

that was so long, holy shit :fear: anyways, i’ll be back to working on my other projects! specifically, remder, you should follow it :nodnod: i will still be working on this, but not as much for a week or two. i also really need to go back to [amethystOS](https://stardance.hackclub.com/projects/5560 :hs:

wait you actually read all that? damn, ty!

2
0
34
Open comments for this post

5h 13m 14s logged

ok so i didn’t do the golden gate article, but who cares? i’ve revamped the styling system! now i can easily change styles and add new themes using css variables! here’s a list of the benefits this provides:

  • easier theme selection: while i do need to fix my javascript to use this new system and add a modal for selecting themes, this paves the way for a much more robust system! you see, this works by adding a class to the <body> element which has a bunch of css variables defined, so i can just store the class name in localStorage and then add that class to the body element :yayayayayay:
  • easier updating of styles: now all the styles are defined in mixins, and these mixins reflect the purpose of the styles inside them. not only that, if i add a new section that requires custom styles (like i did for the demos), i can easily define a mixin with an appropiate name, import that into a separate .scss file, and add it in the eleventy template
  • themes themes themes: all the themes! all i need to do to add a new theme is to define these variables:
    --doc-bg-color: rgba(255, 255, 255, 0.75);
    --background-color: rgba(255, 255, 255, 0.75);
    --text-color: black;
    --padding: 15px;
    --link-color: #002dc9;
    --link-hover-color: #665cc9;
    --border-radius: 15px;
    --border: none;
    --backdrop-filter: blur(5px);
    --vh: 99dvh;
    
    and if a theme isn’t going to change one of these variables, it just doesn’t define its own value. these are the default values for these variables

now all i have to do is add the modal and actually do the macos golden gate article :ultrafastcatppuccinmauveparrot: also, i registered a subdomain for the unstable branch, so now you can see the borked stuff on https://unstable.ospedia.site!!!!!! :yippeee:

tl;dr

  • new styling system :yayayayayay: very fun, very easy
  • new subdomain for unstable branch
  • must do modal & macOS golden gate article

Changelog

1
0
38
Open comments for this post

1h 53m 54s logged

hi guys! it’s been two weeks, but there isn’t much to say here. all i
did was

  • make the page for macOS golden gate
  • add a badge to the readme that shows how long i’ve spent on the
    website according to hackatime (inaccurate, i’ve spent at least another
    200 hours that didn’t get tracked)
  • finish the feisty fawn article

next thing i’m doing is the golden gate article, it shouldn’t be too
hard since the page is on wikipedia. besides that, i’m also going to
revamp the styling system, it’s really bloated and confusing rn :heavysob:
visit the page i finished at https://unstable--ospedia.netlify.app/ubuntu/7.04-feisty-fawn!

Changelog

0
0
33
Open comments for this post

5h 35m 42s logged

oof! that was a lot of work, but now we’re REALLY getting somewhere!!!

  • first thing, headings actually work now, and if there’s a link in the
    heading, it gets displayed right below the heading! tbf i did rip the
    heading thing straight out of the original index.js file when i was
    trying to make a markdown parser using regex :isob:

  • secondly, and the more important thing, image rendering now works. pretty big milestone. i achieved this through the terminal-image npm package. however, this took a while because i couldn’t figure out why it wouldn’t render. the problem was tmux–it was stripping the codes it didn’t recognise :heavysob: so i implemented another system to detect if the terminal had color and/or image support to decide whether to use ansi blocks or actual images. now, it works! ts so peak fr

tl;dr

  1. headings work (i ripped them out of my original implementation in
    index.js)
  2. images work (took me a while because it didn’t work properly in tmux
  3. we getting somewhere with this one 🔥

Changelog

6
0
331
Open comments for this post

6h 13m 27s logged

holy this shit is so long

heyo! this is a long one, so i’ll go over this commit by commit

  • (0ad2cb2) Start paragraph parsing

    here, i did these:

    • i made a global string state to maintain the nesting while styling. managing this was quite tedious and useless
    • i added a helper function to get the style of a token called getStyle(). i’ll explain the use for it below.
    • i continued working on the heading() and paragraph() functions as well as the stylize() function
  • (eb218d2) Add markdown extensions
    as for this one, i added a bunch of packages, mostly extensions for markdown-it. these are:

    • markdown-it-footnote
    • markdown-it-github-alerts
    • markdown-it-sanitizer
    • markdown-it-table
    • markdown-it-task-lists
    • shiki (for code highlighting)
    • terminal-image
      i removed a few of these later because they were either not really working properly or just weren’t necessary.

    besides these, i also configured the plugin to use the plugins, enable the autolink extension and also replace all HTML line breaks (<br>) with double newlines (\n\n)

  • (5ecef2c) Start working on image rendering and colors/styles

    now here is where i found a gem in my dependency tree. you see, i was searching for a package to handle color rendering since i sure as hell wasn’t gonna deal with the hex codes shiki, the code-highlighting plugin, was giving me for the colors of the tokens. so i saw a package called chalk and it sounded familiar. turns out, shiki had chalk as a dependency, so it was already installed!

    for that reason, i added a chalk import in this commit. i also started working on an image function to render images, and named it renderImage(). also added a great error message if two requirements weren’t met:

    throw new Error("WRONG TOKEN IDIOT DEV");
    

    but that was all i really did in that function

  • (0dc393d) Remove unnecessary object processing and dependencies

    this is where i removed markdown-it-footnote and markdown-it-table because i realized there just wasn’t a point in those since they weren’t letting me test my function, they were erroring out for some reason and i found out markdown-it-table already had support for markdown tables. i also removed the mapping function in the parser stage that i made to give myself only a few fields. it was pretty useless since i kept randomly finding that i’d need some new property.

  • (8a5200c) Continue work on inline parsing, add terminal-link

    latest commit, this is where i did a lot of work:

    • i removed terminal-image as a dependency since i found that bun already provided a class for it (Bun.Image) and it also had webp support unlike terminal-image, so no point in another package when a built-in one works better :wiltedrose:
    • i made the getStyles() function better
    • i added a bunch of micro-functions like bold(), italic(), etc. i also renamed renderImage() to image()
    • i combined two if statements into one in this image() function because why 2 if statements when 1
    • i did a lot of work in the renderInline() function. now it uses computed function names that call those micro-functions.
    • i also changed that global string state to a global array, made things much easier.
    • i worked on the heading() and paragraph() functions further

that’s about it gng, also its 12:28 am for me rn :fear: :1000-yard-stare: this is why we devlog more often gng ✌️

0
0
11
Open comments for this post

2h 47m 3s logged

toiling away…

toiling away at this code…
today was a bunch of stuff

  • i added a renderInline() function to render stuff inline. i still need to add images and links, but i’d need a lib for links, and maybe for the images too
  • i worked more on the main function. right now, im trying to get paragraphs actually rendered, which will take a while.
  • i also added a heading() function that will render headings, emphasis on will because its not being called yet
    it took me a lot of thinking to get here so that part wasn’t too fun (a person who thinks all the time, has nothing to think about 🔥)

changelog

  • (e24a192) Work more on the stylizer
  • (1a02163) Start actual work on stylizer
0
0
26
Open comments for this post

1h 31m 58s logged

revamp!

i revamped the parse-input.js file! now, it has two functions:

  1. giveFields(obj)
    this is a function called by the second function. since markdown-it
    (the parser im using now!) has a lot of fields that i don’t need. so
    this function returns a mapped array with the fields type, tag,
    nesting, content, and children. as for this children field, the
    children field is an array of objects, where the objects are just like
    the parent object, with lots of unnecessary fields. for those, i used
    recursion! (it’s my first time using recursion :yayayayayay:
    )

  2. parse(input):
    this is the function that i’ll be using to get the tokens i need to
    style! what it does is pretty simple:

  • initialize a new instance of the MarkdownIt constructor (? i’m not
    too sure if it’s a constructor)
  • get markdown-it’s tokens using their parsing function
  • make a constant whose content is an array of objects returned by the
    first function (giveFields() if your memory is that terrible). again
    its a mapped array that gives only select fields from the markdown-it
    tokens
  • return that constant

in other news, i wrote 2 more test markdown files. one tests the
behaviour of headings and the other tests the behaviour of inline stuff like bold and italic text!

Changelog

0
0
15
Open comments for this post
Reposted by @Keyboard1000n17

2h 44m 18s logged

Crawssembly is soon to be shipped on version 1.0.0! A massive milestone for a project I started ~11 months ago. The raffle discs have been burned, and final preparations are underway for release.

1
1
167
Open comments for this post

2h 34m 9s logged

FUCK

fuck this rewrite, i’m abandoning this shithole of a parser i’m trying
to make, i’ll just go use an already existing parser, its just not worth it
it’s too much hassle to make an in-house parser, so here’s my plan:

  • i install a markdown parser that returns a tree of text, not html, and as a dependency
  • in the styling part, i’ll go ahead and read the tree of text that the parser returns
  • it gets passed to the renderer
    hopefully this will move much faster now!
0
0
24
Open comments for this post

3h 11m 11s logged

:ubuntu: feisty fawn 🔥

aAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa help me its so annoying to do this

  • most of this was on the linux kernel 2.6.20 section of the feisty fawn article which took a while because the release notes were gigantic and i gave up doing it because what the fuck
  • i spent like 5 minutes on the GCC section of the article because most of it was explained in the previous article and gcc 4.1.2 was a minor update
  • i also added support for subsubsubheadings (level 4 headings) and subsubsubsubheadings (level 5 headings) and they now show up in the contents sidebar

stuff i gotta do:

  • add the xubuntu, kubuntu, edubuntu and release announcements sections to the article (:im-fucking-sobbing:)
  • add the macos golden gate article
  • still need those performance improvements
  • still need to add those collapsible stuff, see previous devlog

anyways, go see my still unfinished article on my site!

Changelog

  • (99ff492) Work even more on Feisty Fawn article
  • (7c175c8) More work on Feisty Fawn article
0
0
35
Open comments for this post

2h 11m 34s logged

:ubuntu:

ubuntu feisty fawn 🔥
i did some work on ospedia for once! i started working on the ubuntu
7.04 article. you see, writing articles is quite a bit of work since you
have to do a bunch of research and in my case, explain a bunch of
technical terms. for example,

  • i have to try my best to explain the introduction of kvm in linux
    kernel 2.6.20 because that’s the version ubuntu 7.04 shipped with.

  • i also have to try explaining the release notes for the kernel at a
    high level because its supposed to be a wiki that explains a bunch of
    stuff like this.
    stuff i have to do:

  • add a macos golden gate article: it was announced like a week ago :pf:

  • i also have to do some performance improvements, i’m terrible when it
    comes to writing performant code

  • i need to add a collapsible thing for the sub-headings because the
    contents thing can get really long, there can be a lot of stuff
    anyways, you can check out the unfinished article at
    https://unstable–ospedia.netlify.app/ubuntu/7.04-feisty-fawn

Changelog

b15af67: Start work on Feisty Fawn

0
0
21
Open comments for this post

2h 1m 16s logged

rewrite

i started a rewrite! what i was doing earlier was honestly too messy to actually use.
my earlier way was making a bunch of regexes and using those to match the remaining text. my new method is still using regexes, but i split the whole thing into two parts: block parser and inline parser.

block parser

  • the block parser splits the markdown doc on newlines and checks what it starts with or ends with.
  • when it finds that some line is not a paragraph, it pushes a token to the tokens array indicating that it is the start of a block. when it detects that the block has ended, it pushes a token to the tokens array indicating the end of the block.
  • this is currently only implemented for headings, more are coming. it took this long because me dumb :dumbass:

inline parser

  • the inline parser loops through the existing tokens array made by the block parser and looks for characters that indicate the start of an inline token like bold, italic and so on.
  • like the block parser, it will push start and end tokens to the tokens array
  • the implementation of the inline parser has not started yet

new character

i added a backslash to the giant block letters i made for headings!

Changelog

(bac8c5a) Start parser rewrite
(664713e) Add backslash in heading

0
0
22
Loading more…

Followers

Loading…