An account for the club to post official updates. Includes historical posts from previous blog

Imported from Originally published: 2021-12-17

rumors of my demise have been greatly exaggerated

Forest 2021-12-17


If you're a wondering “what is capsul?”, see:

Here's a quick summary of what's in this post:

  • cryptocurrency payments are back

  • we visited the server in person for maintenance

  • most capsuls disks should have trim/discard support now, so you can run the fstrim command to optimize your capsul's disk. (please do this, it will save us a lot of disk space!!)

  • we updated most of our operating system images and added a new rocky linux image!

  • potential ideas for future development on capsul

  • exciting news about a new server and a new capsul fork being developed by co-op cloud /



Life happens. Cyberia Computer Club has been hustling and bustling to build out our new in-person space in Minneapolis, MN:

Hackerspace, lab, clubhouse, we aren't sure what to call it yet, but we're extremely excited to finish with the renovations and move in!

In the meantime, something went wrong with the physical machine hosting our BTCPay server and we didn't have anywhere convenient to move it, nor time to replace it, so we simply disabled cryptocurrency payments temporarily in September 2021.

Many of yall have emailed us asking “what gives??”, and I'm glad to finally be able to announce that

“the situation has been dealt with”,

we have a brand new server and the blockchain syncing process is complete, cryptocurrency payments in bitcoin, litecoin, and monero are back online now!

—> <—



Guess what? Yall loved capsul so much, you wore our disks out. Well, almost.

We use redundant solid state disks + the ZFS file system for your capsul's block storage needs, and it turns out that some of our users like to write files. A lot.

Over time, SSDs will wear out, mostly dependent on how many writes hit the disk. Baikal, the server behind, is a bit different from a typical desktop computer, as it hosts about 100 virtual machines, each with thier own list of application processes, for over 50 individual capsul users, each of whom may be providing services to many other individuals in turn.

The disk-wear-out situation was exacerbated by our geographical separation from the server; we live in Minneapolis, MN, but the server is in Georgia. We wanted to install NVME drives to expand our storage capacity ahead of growing demand, but when we would mail PCI-e to NVME adapters to CyberWurx, our datacenter colocation provider, they kept telling us the adapter didn't fit inside the 1U chassis of the server.

At one point, we were forced to take a risk and undo the redundancy of the disks in order to expand our storage capacity and prevent “out of disk space” errors from crashing your capsuls. It was a calculated risk, trading certain doom now for the potential possibility of doom later.

Well, time passed while we were busy with other projects, and those non-redundant disks started wearing out. According to the “smartmon” monitoring indicator, they reached about 25% lifespan remaining. Once the disk theoretically hit 0%, it would become read-only in order to protect itself from total data loss. So we had to replace them before that happened.

We were so scared of what could happen if we slept on this that we booked a flight to Atlanta for maintenance. We wanted to replace the disks in person, and ensure we could restore the ZFS disk mirroring feature.

We even custom 3d-printed a bracket for the tiny PCI-e NVME drive that we needed in order to restore redundancy for the disks, just to make 100% sure that the maintenance we were doing would succeed & maintain stability for everyone who has placed thier trust in us and voted with thier shells, investing thier time and money on virtual machines that we maintain on a volunteer basis.

Unfortunately, “100% sure” was still not good enough, the new NVME drive didn't work as a ZFS mirroring partner at first ⁠— the existing NVME drive was 951GB, and the one we had purchased was 931GB. It was too small and ZFS would not accept that. f0x suggested:

[you could] start a new pool on the new disk, zfs send all the old data over, then have an equally sized partition on the old disk then add that to the mirror

But we had no idea how to do that exactly or how long it would take & we didn't want to change the plan at the last second, so instead we ended up taking the train from the datacenter to Best Buy to buy a new disk instead.

The actual formatted sizes of these drives are typically never printed on the packaging or even mentioned on PDF datasheets online. When I could find an actual number for a model, it was always the lower 931GB. So, we ended up buying a “2TB” drive as it was the only one BestBuy had which we could guarantee would work.

So, lesson learned the hard way. If you want to use ZFS mirroring and maybe replace a drive later, make sure to choose a fixed partition size which is slightly smaller than the typical avaliable space on the size of drive you're using, in case the replacement drive was manufactured with slightly less avaliable formatted space!!!

Once mirroring was restored, we made sure to test it in practice by carefully removing a disk from the server while it's running:

While we could have theoretically done this maintenance remotely with the folks at CyberWurx performing the physical parts replacement per a ticket we open with them, we wanted to be sure we could meet the timeline that the disks had set for US. That's no knock on CyberWurx, moreso a knock on us for yolo-ing this server into “production” with tape and no test environment :D

The reality is we are vounteer supported. Right now the payments that the club receives from capusl users don't add up to enough to compensate (make ends meet for) your average professional software developer or sysadmin, at least if local tech labor market stats are to be believed.

We are all also working on other things, we can't devote all of our time to capsul. But we do care about capsul, we want our service to live, mostly because we use it ourselves, but also because the club benefits from it.

We want it to be easy and fun to use, while also staying easy and fun to maintain. A system that's agressively maintained will be a lot more likely to remain maintained when it's no one's job to come in every weekday for that.

That's why we also decided to upgrade to the latest stable Debian major version on baikal while we were there. We encountered no issues during the upgrade besides a couple of initial omissions in our package source lists. The installer also notified us of several configuration files we had modified, presenting us with a git-merge-ish interface that displayed diffs and allowed us to decide to keep our changes, replace our file with the new version, or merge the two manually.

I can't speak more accurately about it than that, as j3s did this part and I just watched :)



We wanted to upgrade to this new Debian version because it had a new major version of QEMU, supporting virtio-blk storage devices that can pass-through file system discard commands to the host operating system.

We didn't see any benefits right away, as the vms stayed defined in libvirt as their original machine types, either pc-i440fx-3.1 or a type from the pc-q35 family.

After returning home, we noticed that when we created a new capsul, it would come up as the pc-i440fx-5.2 machine type and the main disk on the guest would display discard support in the form of a non-zero DISC-MAX size displayed by the lsblk -D command:

localhost:~# sudo lsblk -D NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO sr0 0 0B 0B 0 vda 512 512B 2G 0

Most of our capsuls were pc-i440fx ones, and we upgraded them to pc-i440fx-5.2, which finally got discards working for the grand majority of capsuls.

If you see discard settings like that on your capsul, you should also be able to run fstrim -v / on your capsul which saves us disk space on baikal:

welcome, cyberian ^(;,;)^ your machine awaits

localhost:~# sudo lsblk -D NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO sr0 0 0B 0B 0 vda 512 512B 2G 0

localhost:~# sudo fstrim -v / /: 15.1 GiB (16185487360 bytes) trimmed

^ Please do this if you are able to!

You might also be able to enable an fstrim service or timer which will run fstrim to clean up and optimize your disk periodically.

However, some of the older vms were the pc-q35 family of QEMU machine type, and while I was able to get one of ours to upgrade to pc-i440fx-5.2, discard support still did not show up in the guest OS. We're not sure what's happening there yet.

We also improved capsul's monitoring features; we began work on proper infrastructure-as-code-style diffing functionality, so we get notified if any key aspects of your capsuls are out of whack. In the past this had been an issue, with DHCP leases expiring during maintenance downtimes and capsuls stealing each-others assigned IP addresses when we turn everything back on.

capsul-flask now also includes an admin panel with 1-click-fix actions built in, leveraging this data:

I acknowledge that this is a bit of a silly system, but it's an artifact of how we do what we do. Capsul is always changing and evolving, and the web app was built on the idea of simply “providing a button for” any manual action that would have to be taken, either by a user or by an admin.

At one point, back when capsul was called “cvm”, everything was done by hand over email and the commandline, so of course anything that reduced the amount of manual administration work was welcome, and we are still working on that today.

When we build new UIs and prototype features, we learn more about how our system works, we expand what's possible for capsul, and we come up with new ways to organize data and intelligently direct the venerable virtualization software our service is built on.

I think that's what the “agile development” buzzword from professional software development circles was supposed to be about: freedom to experiment means better designs because we get the opportunity to experience some of the consequences before we fully commit to any specific design. A touch of humility and flexibility goes a long way in my opinion.

We do have a lot of ideas about how to continue making capsul easier for everyone involved, things like:

  1. Metered billing w/ stripe, so you get a monthly bill with auto-pay to your credit card, and you only pay for the resources you use, similar to what service providers like Backblaze do.

(Note: of course we would also allow you to pre-pay with cryptocurrency if you wish)

  1. Looking into rewrite options for some parts of the system: perhaps driving QEMU from capsul-flask directly instead of going through libvirt, and perhaps rewriting the web application in golang instead of sticking with flask.

  2. JSON API designed to make it easier to manage capsuls in code, scripts, or with an infrastructure-as-code tool like Terraform.

  3. IO throttling your vms: As I mentioned before, the vms wear out the disks fast. We had hoped that enabling discards would help with this, but it appears that it hasn't done much to decrease the growth rate of the smartmon wearout indicator metric. So, most likely we will have to enforce some form of limit on the amount of disk writes your capsul can perform while it's running day in and day out. 80-90% of capsul users will never see this limit, but our heaviest writers will be required to either change thier software so it writes less, or pay more money for service. In any case, we'll send you a warning email long before we throttle your capsul's disk.

And last but not least, Cybera Computer Club Congress voted to use a couple thousand of the capsulbux we've recieved in payment to purchase a new server, allowing us to expand the service ahead of demand and improve our processes all the way from hardware up.

(No tape this time!)

Shown: Dell PowerEdge R640 1U server with two 10-core xeon silver 4114 processors and 256GB of RAM. (Upgradable to 768GB!!)



Yes! We are not the only ones working on capsul these days. For example, another group, has forked capsul-flask and set up thier own instance at

Thier source code repository is here (not sure this is the right one):

Having more people setting up instances of capsul-flask really helps us, whether folks are simply testing or aiming to run it in production like we do.

Unfortunately we don't have a direct incentive to work on making capsul-flask easier to set up until folks ask us how to do it. Autonomic helped us a lot as they made thier way through our terrible documentation and asked for better organization / clarification along the way, leading to much more expansive and organized README files.

They also gave a great shove in the right direction when they decided to contribute most of a basic automated testing implementation and the beginnings of a JSON API at the same time. They are building a command line tool called abra that can create capsuls upon the users request, as well as many other things like installing applications. I think it's very neat :)

Also, just donating or using the service helps support, both in terms of maintaing and reaching out and supporting our local community.

We accept donations via either a credit card (stripe) or in Bitcoin, Litecoin, or Monero via our BTCPay server:

For the capsul source code, navigate to:

As always, you may contact us at:

Or on matrix:

For information on what matrix chat is and how to use it, see:

Forest 2021-12-17

© Attribution-ShareAlike 4.0 International Cyberia Computer Club 2020-∞

COVIDaware MN app investigation

Imported from Originally published: 2020-11-27

starless 2020-11-27

Greetings to Netizens and Minnesotans!

It's your friendly neighborhood Cyberians here with an update on the new COVIDaware app as announced by the Governor.

You might be wondering: “Hey, how bullshit is this app? Will it track me when I sleep, will it tell the cops where I am for no good reason, will it take my firstborn son?”

We were wondering these things, too. We're hard at work finding answers to all these questions and more, and due to the urgent nature of the pandemic, wanted to give you an update.

Recently, the state of Minnesota released an app to help manage COVID-19 contact tracing, The COVIDaware MN app is based on an open source foss app for something called 'contact tracing', which helps people backtrack the places they've been in the last two weeks, should they later learn that they were contagious but pre-symptomatic for COVID-19. Due to the delicate nature of this sort of app, we reached out to the folks who wrote the open source app that COVIDaware MN is based on, and got a handful of helpful replies back.1 We also reached out to the state of Minnesota, but haven't gotten a response yet.2

The app that COVIDaware is based on is very privacy-friendly and the company behind it seems to have good values, but we still don't know exactly how much that source code was customized before it was released for use by Minnesotans. It's likely that the state's IT folks just added the appropriate assets to customize links to the local health department and that sort of thing, but we won't know that for sure without a response to our inquiry. There's a chance they've inadvertently done more than that, too— we'd love to read over the source code and check the modifications the state of Minnesota made to the FOSS base app.

We'll let you know when we hear back from the state, but for now, the base app looks very promising.

Additionally, should it become feasible (likely dependent on the state of Minnesota releasing the source code for the app), we're already hoping to be an alternative source for the official app, should you prefer something that's built on hardware not managed by the state of Minnesota.

We hope to hear back from our fair state government soon, and until then, wish you all a warm & safe holiday season!

source code:

© Attribution-ShareAlike 4.0 International Cyberia Computer Club 2020-∞

Imported from Originally published: 2020-05-20

Forest 2020-05-20


Capsul has been operated by hand so far, with business conducted via email. Obviously, this isn't the best user experience. If no one is on the other end at the time, the user might feel as if they are shouting into the void.

Ideally, users could pay for service, create and destroy capsuls, and monitor their capsul's status at any time.

So we set out to create an application enabling that, while keeping things as simple as possible. As of today, you can experience it firsthand!

—> <—


Capsul started out as a “for fun” project to host multiple VMs with different operating systems on the same physical server.

A cloud compute provider experiment to find out:

  • How hard is it to build basic compute-as-service functionality that has been mythologized and commoditized by some of the biggest software businesses of all time.

  • What problems have to be solved in order to do this at a small scale?

  • And last but not least, how much better-than-the-big-boys can we do? :P

I heard about Capsul and I thought, cool, why not.

At first, I was slightly dismissive of the project — why re-invent the wheel? There are lots of established tools for creating cloud services already out there, surely they would be hard for us to measure up to.

Of course, you could argue, that's not the point. It's all about the journey, popping the hood and learning how things are put together.

But on the other hand, Capsul is something that we want to use, not just a pet project.

Can I depend on it?

/⁀\ _/‾⁀|, (‾‾____‾‾) | xx . .| / \ | [ >)
/ \ | ‶` ‾ |

Whether excited or doubtful, the tone of the question expresses the real utility and risk associated with DIY.

We have to make our own seat belts for this, an experience and practice that I personally feel is highly under-rated.

I don't want to give up and just leave it to the experts.

I want to build the confidence necessary to make my own systems, and to measure thier stability and efficacy.

(_/) [. .] ==<.>==

“ Anyone can Cook “

It probably helps that I've never seen a friend get hurt because of a flaw in something I designed, but even if I had, I'd like to think that I'd continue believing in the idea that technology is never “beyond” us. I could never make it through Technoholics Anonymous, because I'd never be able believe a Higher Power will restore sanity to the machine and save us from ourselves.


First step was to chose a language and framework. We made this decision (Python 3, Flask) almost entirely based on which language was the most commonly known in our group. I was the only one who had never used Python before, and I felt up to the task of learning a language as a part of this process.

Next, we had to decide how the system would work.

How would we secure user's accounts? How would users pay for capsuls? Would it be like a subscription, would you buy compute credits, or a receive a bill at the end of the month?

In the interest of simplicity, we opted to use a tumblr-style magic-link login instead of requiring the user to provide a password. So, you have to receive an email and click a link in that email every time you log in.

We also decided to go with the “purchase credits, then create capsul” payment workflow, because it was the easiest way we could accept both credit card and cryptocurrency payments, and we believed that requiring the user to pay first was an appropriate level of friction for our service, at least right now.

I had never worked on a project that integrated with a payment processor or had a “dollars” column in a database table before. I felt like I worked at the Federal Reserve, typing

INSERT INTO payments (account, dollars) VALUES ('forest', 20.00);

into my database during development.

The application has three backends:

  • a postgres database where all of the payment and account data is stored

  • the virtualization backend which lifecycles the virtual machines and provides information about them (whether or not they exist, and current IP address)

  • Prometheus metrics database which allows the web application to display real-time metrics for each capsul.

All of the payments are handled by external payment processors Stripe and BTCPay Server, so the application doesn't have to deal with credit cards or cryptocurrency directly. What's even better, because BTCPay Server tracks the status of invoices automatically, we can accept unconfirmed transactions as valid payments and then rewind the payment if we learn that it was a double-spend attack. No need to bother the user about Replace By Fee or anything like that.

The initial development phase took one week. Some days I worked on it for 12+ hours, I think. I was having a blast. I believe that the application should be secure against common types of attacks. I kept the OWASP Top 10 Web Application Security Risks in mind while I was working on this project, and addressed each one.

  1. Injection We use 100% parameterized queries, and we apply strict validation to all arguments of all shell scripts.

  2. Broken Authentication We have used Flask's session implementation, we did not roll our own sessions.

  3. Sensitive Data Exposure We do not handle particularly sensitive data such as cryptocurrency wallets or credit card information.

  4. XML External Entities (XXE) We do not parse XML.

  5. Broken Access Control We have added the user's email address to all database queries that we can. This email address comes from the session, so hopefully you can only ever get information about YOUR account, and only if you are logged in.

  6. Security Misconfiguration We made sure that the application does not display error messages to the user, we are not running Flask in development mode, we are not running Flask as the root user, the server it runs on is well secured and up to date, etc.

  7. Cross-Site Scripting (XSS) We apply strict validation to user inputs that will be represented on the page, whether they are path variables, query parameters, form fields, etc.

  8. Insecure Deserialization We use the most up-to-date json parsing from the Python standard library.

  9. Using Components with Known Vulnerabilities We did check the CVE lists for any known issues with the versions of Flask and psycopg2 (database connector), requests, and various other packages that we are using, although automating this process would be much better going forward.

  10. Insufficient Logging & Monitoring We may have some room for improvement here, however, verbose logging goes slightly against the “we don't collect any more data about you than we need to” mantra.

If you would like to take a peek at the code, it's hosted on our git server:

© Attribution-ShareAlike 4.0 International Cyberia Computer Club 2020-∞

Imported from Originally published: 2020-05-01

Subject: Cyberia Services Update: 2020-04 From: j3s Date: 01/05/2020


A lot has happened in services-land this month, and I'm hoping to pack as much of it as I can into this email. I will try to be brief, as there is a lot to cover. I'll also probably miss some stuff, woops!

Capsul ======

We added many new subscribers and many new features to Capsul this month, both technical and financial.

  • OpenBSD 6.6 support Hello puffy! We now fully support OpenBSD 6.6 as an operating system choice on Capsul, and will support future releases of OpenBSD as well.

  • Streamlined BTC/XMR payments Pay with bitcoin or monero? There is now a simple payment processor you may use to make donations or pay for Capsuls. See for details.

  • Guix System 1.1.0 support Guix System support is very near completion! There is one bug left to squash before it's available as a fully supported option! :D

  • IPv6-only support Soon, you will be able to purchase IPv6-only Capsuls at a $2 per month discount from IPv4 prices.

  • Cheaper base prices Pricing will very soon be heavily revised, and all Capsuls will be cheaper. Existing customers will be refunded the difference between the price they paid and the new Capsul price.

  • À la carte disk size selection

    • All instances will start with a fully backed-up 10GB root volume.
    • We will be capable of taking variable disk size requests at 0.2c per GB per month! You are no longer stuck with the disk size your instance came with.
    • These additional disks are not covered by our backup schedule, otherwise we'd run out of disk space almost instantly :D we may offer a paid backup system for these additional disks in the future.

A huge thank you to our early Capsul users, I hope that everything has been running smoothly for you.

Nullhex =======

I have not focused on Nullhex much throughout April, but I do have some exciting ideas to share. Hit me up if you're interested.

  • Reputation Nullhex emails are no longer marked as spam by Protonmail or Gmail, our domain reputation has grown substantially.

Matrix ======

Matrix has cemented itself as the center of our communication platform. If you aren't there already, feel free to register at and join the conversation.

If you don't like Matrix for some other reason, email me directly and we can figure out a way to bridge you into our conversations.

  • Backend updated The backend has been updated & now supports cross-signing.
  • Bridging We are considering bridging specific Matrix rooms with specific Discord rooms; more to come on this front.

Riot ====

  • End to end encryption by default Riot-web is receiving an update next week™ that enables end to end encryption and cross-signing by default for all private conversations. Please prepare thyselves! More deets:

  • New preferences There are two new potentially userful riot-web preferences, in case you may have missed them:

    • sort rooms alphabetically
    • auto-syntax-highlight-detection

Forge =====

Forge is our development and project tool. It is intended to be used by anyone in the Cyberia community to host their projects, and Cyberia will eventually use it exclusively to host our group projects.

Forge is approaching the end of the alpha phase. There is still a bit of rockiness, but we've mostly settled on it as a full-fledged service, supported by Cyberia Services.

Forge handles the following (for now):

  • git repositories
  • mailing lists
  • ticket trackers
  • git-driven wiki pages
  • paste service

Forge may handle the following in the future, if we have need for it:

  • builds
  • continuous integration
  • mercurial repositories

Registration is now open to the public, sign up today!

Mailing Lists =============

There are now three important mailing lists that people might consider subscribing to: = general announcements like this = services branch discussion operational stuff = – everything else

See them and read about them on the Forge:

If you have questions or comments about this announcement letter, feel free to email and ask us about it :)

Misc ====

  • Prometheus awareness We monitor our systems with Prometheus – like everything else Cyberia does, we operate it publically. Check it out at

  • Grafana awareness We recently set up Grafana, and fack has been hacking on some dashboards. It's available at for public consumption. If you'd like a read-write account, email me and I'll set one up for you.

  • deprecated The list has been moved to the list. I moved all previous subscribers to the new list, no action is required.

  • Infra Hackathon There are thoughts about hosting a huge infra hackathon to move our systems from Debian to Alpine, with a giant laundry list of crap to do. We will be targeting a full weekend in the future. Just a heads up.

  • Operations Handbook We have decided that a monorepo for all of our operational-related things is appropriate. See the handbook here:

A final note: our services would be useless without the community that makes use of them. Thanks for all of your valuable feedback and discussion. You're all wonderful. Let's open the next world together.

Your lovely head of services,


© Attribution-ShareAlike 4.0 International Cyberia Computer Club 2020-∞

Imported from Originally published: 2020-03-11

Subject: Simple trusted compute: Announcing Capsul From: j3s Date: 11/03/2020

+———————————————————————————+ | | | ANNOUNCING CAPSUL | | | +———————————————————————————+

Over the last year we've moved at light speed. Cyberia Computer Club is now an entity. A formal nonprofit organization with a democratic structure.

We organized and bought a server. We crowdfunded, and spent countless nights testing different configurations. We strived to make the service very simple, and very maintainable. We're very proud of what we're announcing today. We think it's a very unique service.

Capsul is a service that provides people with compute in the form of virtual machines. All machines run on very fast solid state storage, and have direct T3 network access on a shared link. We do not collect user data (besides your email address), and discard as many logs as we feasibly can. Every VM is automatically backed up A more official privacy policy and TOS are coming soon.

To get you excited, here's a list of initially supported operating systems:

operating system supported ———————— ————- alpine yes ubuntu18 yes debian10 yes centos7 yes centos8 yes OpenBSD 6.6 planned GuixSD 1.0.1 planned Windows no, never AIX whyyyy

Our prices start at ~$5.99 a month:

type yearly cost cpus memory ssd ——— —————– —— ——— —— f1-s $70 1 512M 10G f1-m $120 1 1024M 25G f1-l $240 1 2048M 55G f1-x $480 2 4096M 80G f1-xx $960 4 8096M 160G f1-xxx $1920 8 16G 320G

Capsul is very easy to use – no signup or registration is necessary. Simply send an email to with your requirements, and you'll have VMs that you can ssh into within a day or so.

Capsul machines are currently paid for on a yearly basis, and we'll make every effort to remind you of payment before your year expires. Capsul is very price-similar to services like Vultr or Digital Ocean.

What sets Capsul apart?

Simply: our organization and our morality.

Cyberia Computer Club values privacy, simplicity, transparency, accessibility, and inclusion. We have no shareholders, investors, or loaners, therefore every change we make is directly beneficial to you. We actually care about your experience, and it will only get better with time – never worse.

We have a lot more coming for Capsul. The next planned features include: – private networking – openbsd support – monthly payments – instant provisioning and decoms – ipv6 support (with a reduced price instance type) – a storage service (for those who want pictures)

That's all for now! Send us an email and get started with Capsul today! :)



additional resources;

Check out the Capsul website: Check out our bylaws here: Donate to the cause: All of our source code: Chat with us on Matrix: Chat with us on IRC: #cyberia on freenode

© Attribution-ShareAlike 4.0 International Cyberia Computer Club 2020-∞

Imported from Originally published: 2020-02-25

  • UPDATE 2023-05-24: This is a historical document for the previous blog system for Cyberia. The new blogging system, writefreely, has a web editor that is simpler to approach without this excellent writeup. However, it does not have the classic Cyberia asthetics of the original (white text on a black background. You can still visit the old blog at

Subject: How to write a blog post for Cyberia From: j3s Date: 25/02/2020

Hi everyone! The new site design is live! Mad inspiration taken from

In this blog post, I'll be walking through how to add a new blog post to the site, but first: specific requirements for formatting your blog post.

Tools ============ * git and git send-email ( * a text editor

Requirements (in the form of commandments) ============ * thou post shalt be written in plain text > posts appear exactly as written * no line of thy post shalt be wider than 57 characters > this breakeths the smol phones > this rule isn't firm, but is a best practice

So, with the above in your head, you're ready to write a blog post. You have questions! Naturally. Let me preemptively answer them.

+==================+ | WHY NOT MARKDOWN?| +==================+ because everybody knows plain text

+====================+ | WHAT ABOUT TABLES? | +====================+ the beauty of plain ascii is that you get to decide how to do your own tables.

for example:

+——————————————————+————–+ | Col1 | Col2 | +——————————————————+————–+ | trash | Value 2 | | garbage | cols | | This is a pretty traditional table | | +——————————————————+————–+


┌──────────────────────────────────┬─────────┬ │ Col1 │ Col2 │ ├──────────────────────────────────┼─────────┼ │ Value 1 │ Value 2 │ │ Separate │ cols │ │ This is a row with only one cell │ │ └──────────────────────────────────┴─────────┴

or, simply:

random text header

awihfiweoifj owiefj w strange Big blah blah time things Blah blah blah

The choice is yours! Just keep them under 57 chars wide! If you need wider tables, consider linking to an external source or linking to a picture.

—-THE PROCESS—- Before you put text to document, let's make things easy on you – I've written a script to generate a new blog post! It's very simple. Let's go through the steps together.

–> cd ~/projects –> git clone –> cd website/blog –> ./mkblog title-of-blog-post –> ls -l # discover the new blog posts name

Now you can open the new blog post in the text editor of your choice! Proceed with writing it.


... ..




.. ..

. ..


Now that you're finished writing, it's time to submit your blog to a maintainer for approval! The simplest way of doing this is via email. We use the process built into git for this – git-send-mail.

First, if you aren't subscribed to the mailing list yet, be sure to subscribe.

After you have received confirmation that you were subscribed to the mailing list, send us a patch!

–> git add . –> git commit -m 'Add blog post about unicorns' –> git send-email —to=“” HEAD^

Tah dah! That's it, your patch has been submitted.


Now that you have submitted your own blog post, it is time to wrap up!

I've used several different header and writing styles throughout this document to give you an idea of how you can write your own posts. Hopefully that is helpful and inspiring!

I hope that you will see that plain text can be a liberating and artistic format! The only limitation is the character width :]

Now go forth and write your own post about unicorns, or games, or something even slightly related to Cyberian interests, (like how narwhals don't exist) and submit it! Make a little project out of it! It's a good way to broadcast branch happenings, meetings, or personal projects. Or talk about your new RPG system, or philosophy, or opinion!

That's all for now. As always, this post is the result of much thought, from your humble head of services.


^(;,;)^ j3s ^(;,;)^

© Attribution-ShareAlike 4.0 International Cyberia Computer Club 2020-∞