User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
Admin
Wyvern-shaped software developer and hobby vector artist. Also sometimes a fluffy werewolf alien creature (Areon).

Creator of the neofoxes, neocats and other emojis.
wvrnBox
Website
https://volpeon.ink/
Speaking German, English
Age 30s
Pronouns he / him
Backup Account @volpeon@goto.wyvern.rip
Bonus Content @areon@icy.wyvern.rip
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
I always have grand ideas, just like with my art and programming projects
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
I should've done this sooner because I always get frustrated that material I need for my buildings is way too cumbersome too obtain at scale drgn_woozy
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
I never played Minecraft in creative mode so I'm doing that now. drgn_uwu
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
@anthropy I added the numa part for virtiofs. Looks weird to me, too, but that's what you're supposed to do according to their docs: virtio-fs.gitlab.io/howto-qemu.html

(I only did one thing differently, and that is using memory-backend-memfd instead of memory-backend-file)
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
@anthropy I really need to clean this thing up. It grew over the years. drgn_woozy
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
@anthropy I allocated 32gb. I'm not sure about ballooning, but here's the command I use:
taskset -c ${CPU_CORE} qemu-system-x86_64 \
   -name "Windows 10" \
   -machine q35,mem-merge=off,vmport=off \
   -accel kvm \
   -accel kvm,kernel-irqchip=on \
   -cpu host,+topoext,kvm=off,hv_spinlocks=0x1fff,hv_relaxed,hv_vapic,hv_time,hv_crash,hv_reset,hv_vpindex,hv_runtime,hv_synic,hv_stimer,hv_vendor_id=Gigabyte \
   -smp 12,sockets=1,cores=6,threads=2 \
   -global ICH9-LPC.disable_s3=1 \
   -global ICH9-LPC.disable_s4=1 \
   -m ${RAM_SIZE} \
   -mem-prealloc \
   -rtc clock=host,base=localtime,driftfix=slew \
   -global kvm-pit.lost_tick_policy=delay \
   -overcommit mem-lock=off \
   -global kvm-pit.lost_tick_policy=discard \
   -nographic \
   -vga none \
   -serial none \
   -parallel none \
   -k en-us \
   -msg timestamp=on \
   -spice port=${SPICE_PORT},disable-ticketing=on \
   -usb \
   -audio driver=pipewire,model=hda,id=snd1 \
   -device ioh3420,chassis=1,bus=pcie.0,addr=03.0,id=ioh3420-root-port-1 \
   -device ivshmem-plain,memdev=ivshmem,bus=pcie.0 \
   -object memory-backend-file,id=ivshmem,share=on,mem-path=/dev/shm/looking-glass,size=128M \
   -chardev socket,id=chrtpm,path=/var/run/emulated_tpm/swtpm-sock \
   -tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 \
   -object iothread,id=iothread0 \
   -netdev bridge,id=virbr0 \
   -device virtio-net-pci,netdev=virbr0,id=nic1 \
   -object input-linux,id=kbd1,evdev=${EV_KBD},grab_all=on,repeat=on,grab-toggle=alt-alt \
   -object input-linux,id=mouse1,evdev=${EV_MOUSE} \
   -device virtio-mouse-pci \
   -device virtio-keyboard-pci \
   -device vfio-pci,host=${VGA_ADDR},bus=ioh3420-root-port-1,addr=00.0,x-pci-sub-device-id=${VGA_SSID},x-pci-sub-vendor-id=${VGA_SVID},multifunction=on,x-vga=on \
   -drive file=${KVM_CODE},if=pflash,format=raw,unit=0,readonly=on \
   -drive file=${KVM_VARS},if=pflash,format=raw,unit=1 \
   -device virtio-scsi-pci,iothread=iothread0,num_queues=8,id=scsi \
   -drive file="${KVM_DISK}",index=0,media=disk,format=raw,if=none,aio=native,cache.direct=on,id=disk \
   -drive file="${KVM_DISK_2}",index=1,media=disk,format=raw,if=none,aio=native,cache.direct=on,id=disk2 \
   -device scsi-hd,drive=disk \
   -device scsi-hd,drive=disk2 \
   -drive file="${KVM_OPTI}",index=1,media=cdrom \
   -drive file="${KVM_CDRV}",index=2,media=cdrom \
   -device usb-tablet ${USB_DEVS} \
   -boot menu=on \
   -chardev stdio,mux=on,id=monitor-0 \
   -mon chardev=monitor-0 \
   -chardev socket,id=char0,path=/tmp/vhostqemu \
   -device vhost-user-fs-pci,queue-size=1024,chardev=char0,tag=Host \
   -object memory-backend-memfd,id=vfsmem,size=${RAM_SIZE},share=on \
   -numa node,memdev=vfsmem
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
@kura But how would Windows even be able to go beyond the 32gb RAM I allocated? 32gb is immediately gone, but there's about 20gb that gets used on top of that and it only returns long after I stopped QEMU.
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
Good luck suspending me on my own instance lmfao
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
At start, I was at ~15gb and nothing in swap. After QEMU it's this and I got lag because of the swapping. Why. Process managers don't show me any process using this much.
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
There's something that's eating quite a lot of RAM when using my Windows VM in QEMU. I don't know what it is because it persists for a while after I stopped QEMU.
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
It Minecraft time drgn_cool
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
This is the result of a 3D map with 2 layers. The · are pillars which appear in identical spots across all layers.
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
@unnick That's right drgn_uwu
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
It lacks backtracking, but that shouldn't be too difficult. But more importantly, even though this implementation is more powerful the code is way more concise than what I had in TypeScript
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
Heck yeah, it works! ​:areonNMlem:​
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
You can tell that Koka is still far from being complete. The language server will often get stuck on errors in your code and will stop updating information about the rest of the file until the error is resolved. Makes it a bit annoying to work with, but it's not impossible. woozy_baa
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
Not only did a sneaky mosquito take my blood, the puncture sites are very big and itchy as heck neofox_googly_shocked
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
What I really love about it is that you can just replicate language features without changing anything about the compiler. They use async/await in the docs as an example for this. What I needed were list comprehensions, so I added
fun for(low: int, high: int, f: int -> list<b>): list<b>
  list(low, high).flatmap(f)

fun pure(a: a): list<a>
  [a]

fun guard(a : bool, f: () -> list<a>): list<a>
  if a then f() else []




and now I can use them like this:
pub fun cuboid(layers: int, rows: int, cols: int): cuboid
  val coords =
    with layer <- for(0, layers)
    with row <- for(0, rows)
    with col <- for(0, cols)
    pure((layer, row, col))
  // ...
User avatar
privTri Volpeon areonNSmol @volpeon@icy.wyvern.rip
10mo
I'm working on the isometric map generator and I made some nice changes to the fundamentals. For starters, instead of hardcoding 4 directions it now uses a graph so it can handle 2D, 3D, hex grids... anything really. The structure I'm going to use for now is a 3D map to support floating objects (such as bridges) as well.

Koka is strange at first, but I'm starting to get how things work. The standard library lacks a lot of things so I wouldn't use it for anything but toy projects. Not even maps or sets. There's a repo which adds them, so I don't have to start from scratch at least.
​:areonVFlat:​