choosenim 0.8.5 release announcement?

2024-08-21 Thread PMunch
We have a couple other moderator updates that we wanted to bundle into one post. The 0.8.5 version is basically the exact same as the 0.8.4 version but now under the nim-lang GitHub organisation. It's only to be able to tell which version you're using. More updates will come soon!

Forum logo issue

2024-08-21 Thread PMunch
I can't speak for the initial decision since that was taken by someone else a long time ago. But I'm not opposed to switching it to an SVG and improving accessibility. Make a PR for it and if there was a good reason for it to be a PNG people can comment on it there. Otherwise we can merge it in

Forum logo issue

2024-08-20 Thread PMunch
It's not just you, I'll fix it! Might take a little while for caches to clear though

NimConf 2024 - registrations

2024-08-19 Thread PMunch
Very nice! Happy to see NimConf return, I'll see if I can find something interesting to pitch a talk about.

what is the type of exception raised by malebolgia?

2024-08-16 Thread PMunch
It's a `ValueError`, if you put `echo getCurrentException().repr` in your "other error" branch you can see all that it contains. Unfortunately though it doesn't set your exception as the parent, so you can't cast a custom exception up through this mechanism.

Created my first binding! I am impressed!

2024-08-15 Thread PMunch
Nice! Bindings in Nim are very easy once you get the hang of it. Now for bonus points write a header file and generate the wrapper automatically with Futhark!

can we use `method` to replace `httpMethod` and `reqMethod`?

2024-08-14 Thread PMunch
`method` is a [keyword in Nim](https://nim-lang.org/docs/manual.html#lexical-analysis-identifiers-amp-keywords), so unfortunately that won't work.

Using Nim's heap allocator on a pre-allocated memory region

2024-07-31 Thread PMunch
You could always use GCCs wrap functionality. I did an experiment where I wrapped `mmap` to make all the memory used by a Nim process shared so I could run a second program which loaded all the shared memory and allowed the two programs to pass memory addresses between them. But I guess you'd ha

how to use newColonExpr in macro for initializer proc generation

2024-07-31 Thread PMunch
Simply create the `nnkObjConstr` first, then add your `ColonExpr` nodes to that. Something like this: var myObj = nnkObjConstr.newTree(newIdentNode(strVal(name))) for field in fields: myObj.add newColonExpr(newIdentNode($field[0]), nodeMap(field[1])) Run

Can't get started nim with a simple postgres querying

2024-07-30 Thread PMunch
That's because you're missing the shared library libpq used by the postures bindings. `brew install libpq` should sort you out.

Fake Nim books an Amazon, which ones are real?

2024-07-26 Thread PMunch
I got a private message telling me that Amazon has done an internal review and that all the books are now cleaned off-of their store. I can't find any of these books any more on Amazon, so I'll consider this topic as solved!

Heap vs stack & value-type vs reference-type

2024-07-17 Thread PMunch
Wrote an article about this a while ago, might be interesting to you:

Software design ideas to deal with ownership when writing high level wrapper of C code

2024-07-16 Thread PMunch
Pretty much exactly what I had in mind! But does this solution work or not?

Software design ideas to deal with ownership when writing high level wrapper of C code

2024-07-16 Thread PMunch
My MAPM bindings deals with this, but simply by creating managed types. In C the same object can be returned both managed and unmanaged as you mention, so defining a generic `Managed` type is tempting. It could even have a static field with the destructor required (defaulting to regular old `fre

Nim 2.2.0 RC1 available

2024-07-14 Thread PMunch
I've also encountered this with similar control flows

error: assigning to 'xxx' (aka 'xxx') from incompatible type 'xxx'

2024-07-12 Thread PMunch
Ah sorry, looking more closely at the error messages this is just a linker issue. Futhark, unlike c2nim doesn't add header pragmas in order to support a wider variety of linking scenarios. What you're supposed to do is to add the C-based linking whichever way you see fit. In this case I'd assume

error: assigning to 'xxx' (aka 'xxx') from incompatible type 'xxx'

2024-07-11 Thread PMunch
Not sure if it'll help, but first thing you could try is to update Futhark. I can tell by the output that this is not the latest version.

Claude 3.5 (Sonnet)

2024-07-06 Thread PMunch
To be fair any human would also pick that up, but most people aren't as easily convinced as LLMs to give up their free time to solve problems for strangers. If you had boiled your code down to a minimal reproduction (and not caught it yourself in the process) you'd have gotten much quicker repli

Nim version 2.0.8 released

2024-07-03 Thread PMunch
Not so unpopular I think. But you are right, we are working on officially forking choosenim. It's mostly a matter of crossing T's and dotting I's, so expect an official choosenim soon! Initially it will be a 1:1 with the current one, but with the open PRs from the original it should quickly impr

Problems debugging an app made with the wxpython library imported through nimpy

2024-06-30 Thread PMunch
Any particular reason why you're not using wxNim?

Sending Modbus Packet Using Nim Sockets

2024-06-27 Thread PMunch
For some more context the argument-less version of `newSocket` defaults to a TCP socket: As an aside though that array looks wrong. You define it to be 12 integers long, aka 12*8 on a 64 bit machine, but you only spec

Forum on Firefox is broken

2024-06-23 Thread PMunch
Another Firefox user here chiming in, works exactly the same as in Chrome for me. Which version of Firefox do you use? Got any strange plugins?

windows defender said new install nim 2.0.6 got trojan

2024-06-23 Thread PMunch
It's a recurring issue that antivirus flags Nim binaries as viruses. They're false positives though, but still annoying to deal with

Design Q: Why was result chosen? Why not re-use return?

2024-06-22 Thread PMunch
Not even a special rule could save you. This is also valid Nim, and there would be no way to distinguish between them: proc test(x: int): string = if x < 100: result = "Number is small" result = if x < 10: "Number is very small" else: return

Can't import nim package that I have built and installed locally

2024-06-21 Thread PMunch
It sounds like you've done it right. It might be a naming issue in your library. Do you have a folder `src` containing a `mylib.nim` file and the appropriate line in your nimble file to install this folder? If you look in `.nimble/pkgs2` do you see your library? Do you find `mylib.nim` within th

Nim version 2.0.6 released

2024-06-20 Thread PMunch
The odd numbers are used for dev versions

Design Q: Why was result chosen? Why not re-use return?

2024-06-20 Thread PMunch
Probably just ambiguity. Consider this: proc test(x: int): string = if x < 100: result = "Number is small" result = if x < 10: "Number is very small" else: result if result.len == 0: return "Number is pretty big" Ru

Conversion from apointer to a seq

2024-06-20 Thread PMunch
> Is it because the original sequence, once dereferenced, is copied to "var > arr", hence "cols" is not added to it but to a copy which is deleted once the > proc returns? Yup, spot on

Openziti (zero trust networking)

2024-06-20 Thread PMunch
I would recommend Futhark as well. Manual wrapping is tricky to get right even if you know C, and c2nim is fairly unmaintained and can create some bad results on certain inputs (granted for a header you might be fine). To put it like this, I wrote Futhark because I was tired of wrestling with ma

Passing an optional proc is not working

2024-06-19 Thread PMunch
Add `{.nimcall.}` to `FooFunc` and it should work fine. It's just some weirdness in how Nim handles procedure types.

How to write the Nim version of a C function pointer and pass it as argument to C function

2024-06-18 Thread PMunch
1\. No Looking at the code that `double** jac` should probably be `ptr UncheckedArray[ptr UncheckedArray[cdouble]]`. 2. With the double array in Nim you would assign values to the matrix elements the same way as in C, with double square brackets.

Can I use OpenACC pragma in nim?

2024-06-16 Thread PMunch
Seems like that should work, you can always try with `--nimcache:./nimcache` to have Nim put the generated C files in a local folder so you can inspect them yourself. Be warned though, Nims C output isn't exactly pretty..

template import non compile in nim 2.0.4

2024-06-14 Thread PMunch
The error message is super unhelpful (it's says it can't find the file). However if you mark the template as `{.dirty.}` then it works.

Stock address instead of plain object in a table : C to Nim

2024-06-08 Thread PMunch
It seems like we're misunderstanding each other. Your objects being a `ref object` is exactly what you want, and the code I shared should do exactly the thing you're after. If I understand you correctly. But lets walk through this. You have 1 objects which are not trivially small (say somew

Stock address instead of plain object in a table : C to Nim

2024-06-08 Thread PMunch
Well they need to exist _somewhere_. The code I shared above only stores a reference to the object in the table, the object itself lives on the heap. The reason for this is because the object is declared as a `ref object`. If you try to change that to just `object` then you will see the program

Stock address instead of plain object in a table : C to Nim

2024-06-08 Thread PMunch
As I mentioned, the whole premise of what you're doing is incorrect, so solving the problems you are facing won't actually solve your problem. Instead try this: import tables type MyObj = ref object age: int var testTable: Table[string, MyObj] proc po

Stock address instead of plain object in a table : C to Nim

2024-06-07 Thread PMunch
There's a couple things wrong with this code. But let's start with the wrong assumption(s) that led you to try this in the first place. > I've realized that storing the entire object requires a lot of memory Your object is the size of an integer, so it is exactly the same size as a pointer. Of

Nimsuggest and Manjaro Nim installation

2024-06-07 Thread PMunch
I think it was just a revelation. He thought they where using the same method, but it turns out they have diverged. You made him aware of this bug and he's presumably fixing it. At least that's how I read it.

Why not use AI to create momentum in Nim?

2024-06-06 Thread PMunch
Yet you bump a two day old topic to do just that? You're right that further discussion along these lines will not be tolerated. I didn't remove the original post (which in retrospect I probably should've because it's quite off-topic) because it is close to the best estimates for Palestinian cas

Please help, learning NIM to speed up Python programs, but strange results

2024-06-05 Thread PMunch
> `for l in lines(file)` should be slightly faster than your `while` loop. That actually made more of a difference than I would've expected! > There is no reason to assume that though since you're mostly using Python's > interface to compiled code. To expand a bit on this: Many of Pythons libra

Please help, learning NIM to speed up Python programs, but strange results

2024-06-05 Thread PMunch
Hard to tell without having `somelargefile.nt.gz` to test with. But some general ideas: * Did you compile with `-d:release`? Debug builds can be pretty slow * For benchmarking you should really use `std/monotimes` instead of `cpuTime`, but I doubt this would change much. * Not sure how opt

varargs pragma - expanding a seq[cint]

2024-06-05 Thread PMunch
Looking at the igraph library it looks like you should simply be using `igraph_create` for this.

varargs pragma - expanding a seq[cint]

2024-06-04 Thread PMunch
Unfortunately C varargs and Nim varargs are quite different from each other. C varargs are basically just a pointer to somewhere in memory and it's up to the callee to handle this collection of arbitrary data (typically done by C macros which will advance the pointer depending on the type you "t

choosenim: what is the development state?

2024-06-02 Thread PMunch
Again, please don't turn this topic into one about Dominik. We're discussing choosenim here. We can undo the "mess", for Choosenim it is as simple as forking the project and continuing development, or at least maintenance.

choosenim: what is the development state?

2024-06-02 Thread PMunch
That quote is taken quite out of context, reading the discussion linked it is clear that this comment in particular is about the people of the Nim community who split out and created the Nimskull fork. And please let us keep on topic here and discuss choosenim. That being said Dominik has left

Wrapping ESP-IDF for embedded - Futhark - PlatformIO

2024-06-01 Thread PMunch
This is very likely not going to work. You need to provide the system libraries with `sysPath` otherwise it tries to wrap with the default libraries for the platform you're compiling from.

Privilege Escalation with Nim Package Manager - John Hammond

2024-05-30 Thread PMunch
Yeah, by looking at this it seems like a "perfect storm" kind of scenario built for the CTF. Allowing something like `nimble run` or `nimble install *` to be run as other users isn't a great idea.

CodeTwig - a small project-viewer

2024-05-29 Thread PMunch
This is super cool! Do you use nimsuggest to read the source, or do you parse the Nim files yourself?

Wrapping ESP-IDF for embedded - Futhark - PlatformIO

2024-05-28 Thread PMunch
Hi, creator of Futhark here! Haven't looked at the library you're trying to wrap but I can pretty much guarantee that it isn't too complex. I've wrapped FreeRTOS with the full SDK for a chip before, so definitely doable. What exactly are you trying to wrap? I might be able to take a look.

Upcoming "Nim for Pythonistas" talk at PyCon Italy

2024-05-25 Thread PMunch
Very cool to see some Nim at a Python conference! I haven't had time to look at it yet, but I passed it on to the resident Python user at work

"fall-through" and default values

2024-05-22 Thread PMunch
That's because of implicit returns. Procedures will implicitly return the last statement. Try blocks (and most other blocks) will also return their last statement. Of course each branch has to return the same type, Nim is strictly typed after all. Combining this knowledge we can look at your sni

String to AST

2024-05-18 Thread PMunch
You seem to be very confused about something, or not communicating what you're trying to do very well (at least I'm pretty lost..) I didn't propose npeg as a solution to your problem (it's a great parsing library. But not what you need). But rather as a library which is an example of creating g

String to AST

2024-05-18 Thread PMunch
I think you might be confused. If you simply want to use meta-programming there is no reason to set up your own compiler. Or did you want to plot full control flow graphs for your entire program? Npeg for example allows you to write out the parsing graphs for your program which is quite handy.

Latest GCC version (14.1) breaks Nim's C backend

2024-05-15 Thread PMunch
I've pinned this, should help avoid a barrage of questions once this version is dropped elsewhere.

Issue: regression on 2.x.x: push warning[HoleEnumConv]:off does not work.

2024-05-12 Thread PMunch
Did you report this on the GitHub issue tracker? If not then please do so, it's easy to lose track of things here.

Any suggestions on how to use nimsuggest?

2024-05-11 Thread PMunch
You could always write a nice wrapper for it though. I've got some ideas for stuff I'd like to have in a tool like that.

Issue with C array

2024-05-05 Thread PMunch
I tried to explain this in my reply in the Futhark issue, but I was on my way to the airport so the answer was a bit brief. What you're seeing in `AV_CHANNEL_LAYOUT_MASK` is an object constructor, however since C doesn't have typed macros it doesn't tell us which object its constructing for. The

get object field by variable

2024-05-05 Thread PMunch
I think the question was how you can access a field in an object through a variable holding the name of the field. Unfortunately (at least in this case, most often it is very fortunate) Nim is a statically typed compiled language, so the names of fields aren't really accessible at runtime. You

Passing seq or array to cpp function that takes iterators.

2024-05-04 Thread PMunch
Try passing `a[0].addr` and changing the type of your sequence to `seq[cfloat]`. Arrays in C/C++ are just a pointer to consecutive elements in memory. Nim sequences are also that, but with a couple fields to track length and capacity. So by getting the pointer to the first element you have a poi

When's NimConf 2024?

2024-04-25 Thread PMunch
All NimConfs thus far have been online, so not exactly sure where you would fly (I guess into the cloud, but strangely enough there's better internet on the ground). As for dates nothing has been announced.

Can’t wrap my head around this TypeError

2024-04-25 Thread PMunch
What is the `CardSet` type defined as?

Fake Nim books an Amazon, which ones are real?

2024-04-23 Thread PMunch
Haha, good to hear what Mr. AI has to say about it. The tech is cool, and I've used AI to spell check and improve my own articles before so it's not without merit. These are unfortunately the laziest form of AI usage. I'd be surprised if a human had spent more than an hour on any of these books.

Fake Nim books an Amazon, which ones are real?

2024-04-22 Thread PMunch
And I'm sure they'll be able to pump these out faster than we can create a list of them all.

Fake Nim books an Amazon, which ones are real?

2024-04-21 Thread PMunch
With the rise of LLMs and AI based text generation in general there has been a flood on poorly made "books" hitting web-stores like Amazon. These are simply a money-grabbing scheme, trying to pray on people either meaning to buy other books, or being led by the nice (AI generated) titles and blu

Odd Segfault when using dynlib

2024-04-19 Thread PMunch
Haven't checked with a debugger, but I would assume it's a memory issue. I'm not sure if you're supposed to be able to pass managed memory in and out off dynamic libraries. It at least used to be the case that you had to link against nimrtl in order for it to only run one instance of the GC. But

Dear Araq, how do I create a programming language?

2024-04-18 Thread PMunch
For anyone interested in writing a programming language in Nim we've also got the "langdev" channel on Discord which is bridged to the "#nim-langdev" on Libera.chat (IRC), and to "#nim-langdev:matrix.org" on Matrix.

FFI - memory management issues

2024-04-13 Thread PMunch
Freeing a pointer doesn't typically null it out. Of course in this case you should simply not manually destroy an object which will be destroyed later. Or you could null out the pointer after you've freed it to show that it has been freed already.

How to serve acme-challenge file dynamically with Jester REST API?

2024-04-10 Thread PMunch
Have you seen this? . It outlines how to set up Nim with Nginx and certbot.

Announcement: Use Nim for programming on Bluetooth chips

2024-04-10 Thread PMunch
Seems to still be some Nim code shipped with their SDKs: Should be fairly easy to use Nim with any such chip though, but cool that they have official examples!

Best way to pass many parameters to a function

2024-04-08 Thread PMunch
Globals are not a great way to do this. Typically you'd make an object which holds all your fields, and then pass that object around. It's pretty much the same thing you'd do in Python, just that procedures don't belong to the object, they simply take this object as the first parameter. Because

Help needed: binarylang issue

2024-04-06 Thread PMunch
I agree that 1 is a bug, but 2 is really just a design choice. Since Nim doesn't have a 7 bit datatype both binaryparse and binarylang has decided to use the smallest data type which can fit a field, in this case an 8 bit integer. They also both returns tuples which makes the macro generation s

Sublime Text user experience

2024-04-05 Thread PMunch
No idea what to answer for your latest question, but seems like I missed one from last year. I did have semantic highlighting planned, but the spec wasn't finalised last time I looked at it. Probably it's more stable now though

forum mirror

2024-04-05 Thread PMunch
Ooh, that's actually a very good idea

Help needed: binarylang issue

2024-04-05 Thread PMunch
Had a look in `binaryparse` which is the precursor to `binarylang`. Seems like the bug is caused by the extraction of the lower field just using `and` and not extending the sign bit. You can manually extend the sign bit, but this should definitely be fixed upstream: import binaryla

forum mirror

2024-04-05 Thread PMunch
"Moderated" is just any user which isn't manually accepted yet. Moderators see topics and messages from "moderated" users, but normal users don't. When we mark them as "spammer" then they disappear for us moderators as well. Since we for the most part don't delete spam it should be possible to e

Attempting a DSL on top of htmlgen for fun/learning

2024-04-02 Thread PMunch
You seem to be generating macro output which is only accidentally valid for htmlgen. If you change your code to this then it works fine: let html = traverseTree: dv(id = "1", h1(style = "value", "hello world"), p("This is a paragraph")) echo html

List of GC'ed types

2024-04-02 Thread PMunch
This should be put into the manual somewhere! As for the closure thing they get turned into a pointer to a normal procedure and a pointer to an environment. This environment contains all the state captured by the closure. When the closure is called it's actually a static procedure which is call

About a VFS library

2024-03-24 Thread PMunch
On Linux at least you can use [libfuse](https://github.com/PMunch/libfuse-nim/). I assume there are similar solutions for the other OSes which you can wrap in a similar way. Maybe if you find all of them it'd be a good idea to create a convenient wrapper over virtual filesystem.

Issues with identifier equality and FFI

2024-03-21 Thread PMunch
Should be fairly simple to solve, but first off, which bindings to you use?

Tesseract and Leptonica

2024-03-20 Thread PMunch
Ah yes, those are part of the "it just works" philosophy of Futhark. Unlike c2nim and nimterop you're not supposed to edit neither the code going in, nor the code coming out. To facilitate this Futhark adds these guard statements. You can disable them with `-d:nodeclguards` at the risk of the wr

Tesseract and Leptonica

2024-03-20 Thread PMunch
Updated Futhark now to 0.12.3. Turns out it was a new feature in libclang 17 which wasn't implemented yet. After fixing a small typo on line 17 of your sample it now compiles. Tested it on one of my own images and it rotates it, so it seems to work as intended.

Tesseract and Leptonica

2024-03-19 Thread PMunch
Ooh, that's a rare bug! Or rather some part of the C spec I haven't encountered yet. Probably an easy fix though. And having links to examples is a great idea!

forum mirror

2024-03-19 Thread PMunch
> As a side note, I had no idea the forum experienced so much spam. Filtering > and mods must do a pretty good job at getting rid of it quickly. It ebbs and flows, it's been higher than normal lately. But good to hear that our moderation efforts works! The most annoying thing is that new users a

Tesseract and Leptonica

2024-03-18 Thread PMunch
Interesting project! Just out of curiosity, is there a reason why you don't just automatically generate the C bindings with Futhark?

How to preallocate cstring for FFI call that fills it up

2024-03-18 Thread PMunch
When you have a C library that populates a string it is good practice to use `setLen` on the string afterwards. Most of these APIs returns the amount of bytes actually written (in this case by the `length` parameter to `glGetActiveUniform` as long as it is not `nil` as in your case. This reports

A template to emit ARM asm

2024-03-13 Thread PMunch
Remember that templates are code substitution. I think what's going on here is that `AHB1ENR` returns `volatileLoad(RCC_AHB1ENR)`, this is a statement which resolves to the type `RCC_AHB1ENR_Val`. Now in `GPIOAEN` this is used once in the emit statement which causes a read, then it is passed on

Custom type conversion

2024-03-13 Thread PMunch
Well if you look at the `to` procedure in the `json` module it takes a `JsonNode` and a `typedesc`. It is also very generic so your code could simply be: import json type Object = object val1: int val2: string let js = parseFile("status.

Custom type conversion

2024-03-13 Thread PMunch
Ah, no that is probably not handled. Also it might not be a great idea. Certainly not very "Nim like". Hard to tell without seeing some more code. You can make a converter anonymous by naming it `_` it seems.

Custom type conversion

2024-03-13 Thread PMunch
Then I'm not entirely sure what your actual concern is. You could always overload the `to` proc with your own implementation for any other format. Or you could name it something else. Another option would be to write a [converter](https://nim-lang.org/docs/manual.html#converters) if you want the

Custom type conversion

2024-03-13 Thread PMunch
It sounds like you might be looking for `to` from the `json` module: That being said you could also work with the JSON object directly, just verify it's structure with something like `jsonschema` beforehand.

Have I written a silly program or is there a "controlled" memory leak?

2024-03-06 Thread PMunch
Very hard to tell without actually seeing the program. Have you tried running it with `-d:useMalloc`? By default Nim has an internal memory pool. So when it frees things it doesn't necessarily free it back to the OS right away.

What will happen if allocation fails?

2024-02-27 Thread PMunch
A `MemoryDefect` or a panic I'd imagine

Download nim-2.0.2_x64.zip for windows 11 will be blocked by Windows Defender.

2024-02-25 Thread PMunch
This comes up from time to time, maybe we should add a prominent note somewhere (maybe even a locked sticky forum post). Last time seems to have been [this one](https://forum.nim-lang.org/t/10824). Basically it boils down to false positives based on the AV vendors using silly metrics. All Nim p

What is `-d:nimNetLite`?

2024-02-25 Thread PMunch
It checks for a _[define](https://forum.nim-lang.org/postActivity.xml#define) `nimNetLite` and as with any other define you can pass it with `-d:nimNetLite`. It presumably enables a lighter net stack, and judging by the other flags that imply it I'd say it's primarily used by light RTOS targets.

nimble.directory has been down for a few days now

2024-02-24 Thread PMunch
Talked to the maintainer who simply wasn't aware that it had gone down. It should be back up again now!

Futhark and editor tooling

2024-02-19 Thread PMunch
Happy to hear that Futhark is working out for you :) I've found that structuring the code like the "Shipping wrappers" section suggests greatly helps editor support. You might have to restart the plugin/editor after the first build if it doesn't pick up the file automatically though. Here's the

Is it impossible to declare an _empty enum_ under quote in order to populate it later in a macro?

2024-02-19 Thread PMunch
You've basically stumbled upon the solutions. `quote` requires actual valid Nim syntax, so the way to solve it is to add dummy nodes which you can then later replace. I do that in [Futhark](https://github.com/PMunch/futhark/blob/master/src/futhark.nim#L393-L396) in order to get doc com

Is there a way to create a musl binary (static binary) in a project using libcurl.nim?

2024-02-16 Thread PMunch
Yes, something along those lines. Not entirely sure if you need the `.so` part, might just be `--dynlibOverride:libcurl` or even `--dynlibOverride:curl`, but not entirely certain.

Is there a way to create a musl binary (static binary) in a project using libcurl.nim?

2024-02-16 Thread PMunch
Since libcurl uses the `dynlib` pragma you should be able to use `dynlibOverride` to avoid having to modify the libcurl sources:

Wishlist: Ideal UI library for Nim

2024-02-13 Thread PMunch
You can always reach out to community members in our live chats on Discord/Matrix/IRC, the forums unfortunately doesn't have a direct message function. And yes, we moderators read a lot of forum posts, so we do notice questions like these fairly often. But feel free to contact us in the live ch

  1   2   3   4   5   6   7   8   >