jan Pontaoski's Thoughts

tenpo ni li tawa sitelen e ni.

ilo Ikona lon. ona li kama e ale (pi sitelen Ikon).

wan lili

ni li wan tawa mi tan ni: mi pali e ona. ona li pona mute.

ona li ilo KDE li ilo Rust li nanpa wan. mi sona e rust-qt-binding-generator. taso mi lukin ala e ilo pi li kepeken ona.

ilo

Ikona's home screen

ilo Ikona li pana e pali tu tawa sina: lipu kule anu lukin pi sitelen Ikon.

Ikona's colour palette.

ilo Ikona li jo e lipu kule pona. lipu kule li tawa sitelen Breeze.

Ikona's preview screen, light Ikona's preview screen, dark

kepeken ilo Ikona la sina ken e ni: lukin e sitelen sina lon lipu pona.

tenpo nanpa wan la sitelen Ikon ona li sama lukin e sitelen Ikon Ikona. taso ona li ken pona mute. ona li ken pali e ijo .ikona.app.svg. tan ona la ona li ken pali e ijo lili. sina pali e sitelen Ikona sina la sitelen Ikon pi ilo Ikona li sama lukin e ona.

Export screen

kepeken e ni la sina ken toki e ni: “ilo Ikona o, pali e ijo lili tan ijo suli.”

ilo Ikona li ken sitelen e lipu pi sitelen Ikon sina tan ni: sina ken pana e ona tawa jan ante.

ilo Cli

 ➜ ikona-cli
ikona-cli 1.0
Carson Black <uhhadd@gmail.com>
Command-line interface to Ikona

USAGE:
    ikona-cli [SUBCOMMAND]

SUBCOMMANDS:
    class       Class your icon
    convert     Convert your icon from light <-> dark
    extract     Extract icons from an Ikona template file
    optimize    Optimize your icon

ilo lon ilo Ikona Cli li ni: – class: pali lukin. – convert: suno tawa mun en mun tawa suno. – extract: ijo suli li pana e ijo lili. – optimize: sitelen ike li kama sitelen pona.

tenpo kama la...

ilo Ikona li ken pali e sitelen Ikon mute mute mute.

ilo Ikona li ken pali e sitelen Ikona pi li jo ala e kule.

Tags: #tpolibre

welp, looks like it's finally time to write this :D

so, ikona 1.0 is here and ready to take on the world (of helping icon designers).

some firsts

so, this is a personal first for me. it's the first time I've released a GUI application that I feel like is actually thoroughly polished.

I believe this is also the first KDE application to be released that's predominantly programmed in Rust—I'm aware of rust-qt-binding-generator, but I haven't seen any KDE apps consume it.

the application itself

would be heretical to write a blog post about the 1.0 release of Ikona without talking about what it actually is, ja?

Ikona is a companion application to a vector editor like Inkscape, providing utilities for wrangling with icons and an icon preview.

Ikona's home screen

Ikona opens up to a fairly unassuming screen, giving users two options: the colour palette or the icon view.

before we get to the meat of Ikona, let's look at the colour palette.

Ikona's colour palette.

Ikona's colour palette is fairly simple—it shows a bunch of colours, and clicking them copies the hex code. the colour palette was designed to offer icon designers a vibrant and large array of colours that fit into the Breeze style.

Ikona's preview screen, light Ikona's preview screen, dark

this is where Ikona's meat lies—the application icon view. it displays application icons at a pixel-perfect size in an environment similar to a Plasma desktop.

by default, it just shows Ikona's icon. the real meat is when you press “Create Icon.” this exports a special type of SVG with the suffix .ikona.app.svg.

the .ikona.app.svg is a special type of input SVG that ikona knows how to process. normally, multiple sizes of an icon are stored as different files, making managing all of them cumbersome. however, the .ikona.app.svg combines all sizes of an application's icon into a single file, making it easier to cross-reference elements shared between sizes in the same file. this also allows Ikona to intelligently split and place icons in the correct locations on export.

Ikona can also support regular SVG files, however only one size of icon can be previewed at a time and Ikona cannot export optimized icons from this format.

saving the icon will cause Ikona to instantly update its preview of the icon.

once you're done designing your icon, you use the export screen to export your icon.

Export screen

you can select which sizes to export, and how to export the icon (to one folder with different names, or to folders per size with same name).

you can also take montages of your icon using Ikona. for ease of sharing, the montages are copied directly into your clipboard for pasting into your favourite chat application.

that's it for the GUI application, but not for Ikona.

ikona-cli

Ikona isn't just a GUI application—there's also a fully independent command line interface to its functionality.

 ➜ ikona-cli
ikona-cli 1.0
Carson Black <uhhadd@gmail.com>
Command-line interface to Ikona

USAGE:
    ikona-cli [SUBCOMMAND]

SUBCOMMANDS:
    class       Class your icon
    convert     Convert your icon from light <-> dark
    extract     Extract icons from an Ikona template file
    optimize    Optimize your icon

There are four subcommands: – class — Injects stylesheets and replaces colours with stylesheet colours. – convert — Converts light icons to dark and dark icons to light. – extract — Allows splitting .ikona.app.svg icons into multiple files on the command line. – optimize — Optimizes your icon with a variety of methods. Unlike more commonly used SVG optimizers, Ikona is able to optimize for ease of rendering, reducing the work SVG libraries have to do to render an icon. this translates to faster rendering and better performance, despite a slightly larger file size.

for the next release

for the next release, two features are planned:

­— wrangling with icon themes. icon themes are a pain to deal with, and a tool like Ikona can be scaled to wrangle with hundreds or thousands of icons instead of just a few being designed. — monochromatic icon preview stylesheet injection and classing are perfect for dealing with monochromatic icons, and Ikona will be able to preview them.

for the packagers

yes, rust sucks to deal with.

if your distro mandates that you aren't allowed to bundle dependencies, most of Ikona's dependencies are dependencies of librsvg, a package that most distros should have. this means only a few new packages are needed if they're not already used by other applications.

if your distro is fine with you bundling dependencies, then you're in for happy days. just rename the cargo vendor tarball to ikona.cargo.vendor.tar.xz and plonk it in the source root alongside CMakeLists.txt. CMake will take care of the rest of the job for you.

Tags: #libre

Taigo

I've recently started work on an app called Taigo (ilo Tajiko). It's basically Tamagotchi, but GNOME-ified and on your dekstop. Among its features are an extreme aversion to theming. So strong, that I had to remove some of its aversion as it got in the way of me developing it. I may re-add the removed blocks if I feel like it. In particular, I really like the icon that I made w/ the help of LCP. (jan Jesepi)

openSUSE Welcome

So like, I've been working on openSUSE Welcome some. Mostly in the Xfce area, as a quick customisation screen is in the process of being added. Some language-specific social medias have been added as well.

Fluent Stylesheet for GTK (win32, updated)

This WIP stylesheet is what I'm working on when I have nothing else to do. It has one goal: Replace gtk's current win32 stylesheet as the stylesheet of choice for GTK apps running on Windows. As its name implies, it's modeled after Fluent design.

kulupu Linu

The Linux discord nobody asked for! :D Basically your run-of-the-mill Linux discord, but since I can't get any active members, I've been using it as my testing place.

Link for the (probably not) interested.

Pali Pona

This project is where I'm stashing all of my Toki Pona apps. It's currently home to lon (weather) and ilo pona (dictionary).

My to-do list:

Here are some things I'll (probably) work on:

  • Breeze GTK gradients. I dropped these when giving Breeze GTK the ability to respect the user's colourscheme. Now that all the infrastructure is in place for it, I can add it back.
  • libdnf version lock plugin. Little experience with the library, little experience with the programming language, and absolutely no idea how to test what you're doing is working? sign me the eff up
  • GObject state machine library. I need one of these for Taigo, so might as well make it public.

Shameless plug for /r/mi_lon – the /r/me_irl for Toki Ponans

Toki! \o

There are two types of Discord servers: those with less than 100 members, and those with 100 or more members.

As you near 100 members, things change – enough people are in your server to where you no longer have to actively go out of your way to advertise to get the server to grow. Your issues will change from those related to too few people to those related to too many people.

Pre-100 Preparations

There are some things you absolutely need before hitting 100 people:

  • At least one or two other top-level administrators.
  • At least one moderation bot to assist moderation.
  • A well-defined channel layout that will not be changed in the near future.

Getting past 100 members

The Ideal Method

Ideally, you would have an existing community of people that were looking for something unfulfilled by existing servers. If you have that community of people, you should do the following things:

  • Tailor the server to meet the fulfillment that your existing community desires, without over tailoring.
  • Getting a concrete staffing and setup ASAP is critical here – moreso than when you're starting from true scratch.

The From Scratch Method

If you don't know anyone interested in what server you're doing, you face a different set of arguably harder challenges than a server with a preexisting community.

  • You need to get a critical mass of a few active members- these mates will be your lifeblood for a long time.
  • You're more free to make changes until your server's concrete starts drying, so to speak. Enjoy this freedom and find what works before you have to start minding the community having to adapt.
  • Partnerships are critical- partner with other servers your size.

After 100

Don't be afraid to celebrate hitting 100 people- you made the most critical milestone of a server, and you should be proud of it.

I would explain what to do after 100 people, but that's outside the scope of this blog post. Mi tawa! \o

So, out of boredom one day, I decided to try elementaryOS. Here are my thunks.

Installer

Elementary Installer Good old Ubiquity. Not fancy, but does the job well. Keyboard Layout Selection Updates and other software Installation type

The Destkop

Desktop ElementaryOS starts up to a desktop showing off the wallpaper, the top panel, and the dock. The wallpaper is similar to macOS's “Antelope Canyon.” Of course, the desktop doesn't make the distro, the apps do.

The Apps

Mail

Mail It's okay, I guess? User interface isn't particularly well organized and the top bar feels messy.

Terminal

Terminal This is all the customization you get. 0/10 needs something other than Solarized variants.

Unsplash Browser

Unsplash Browser I forgot what this application was called, but it's kinda neat I guess? Lets you browse Unsplash, albeit the interface stands out from the other AppCenter curated apps.

Applets and AppCenter

Applets and AppCenter AppCenter is pretty neat. It looks pretty decent, the curation is nice, and it's respectable. The applets are kinda neat. Only issue with them is that there doesn't seem to be an easy way to get to your open applets besides mashing the minimize keycombo.

Other Things

Keyboard Shortcuts

Keyboard Shortcuts This key listing looks pretty nice. It's odd seeing this pop up when you hit Super (Win key) instead of an app launcher, but it's convenient.

General Thoughts

elementaryOS is overall pretty neat, but visually inconsistent and some of the apps are eh. Even so, the maturity of the app ecosystem for elementaryOS-specific apps is well beyond that of apps specific to other desktop Linux platforms.

Barista now has two stunning new features: You can edit commands and Barista will apply them! How cool!

Barista can also quote things now and let you reply to them. Run sudo help in the bots channel to see!

There was also a lot of tidying in the backend, making commands easier to write.

Cafétera

Cafétera looks like a single bot from a first glance, but in reality, it's actually multiple bots.

The reason why we use multiple bots instead of a single bot is because one bot cannot be the best at everything. The saying goes: “Jack of all trades, master of none.”

So, here are the bots bringing work to you in the background.

Unnamed Bot

This bot provides most of the Linux Cafe-specific functionality. They'll run bash commands, search distro packages, manage profiles and screenshots, and some other things. You can find their source at linux-cafe/unnamed-bot on GitHub.

Red

Red, they're a pretty cool bot. They have a very extensible system, but the only extension they have active is one to provide swingin' tunes in the nightclub. Their source is at Cog-Creators/Red-DiscordBot on GitHub.

Discord.RSS

Discord.RSS is a busybee. They don't look up from their job of sifting through hundreds of RSS posts a day (mostly Arch Linux package updates). They keep on posting. You'll find their source here at synzen/Discord.RSS on GitHub.

YAGPDB

YAGPDB loves helping the moderation team. It's all they really do. They'll keep the modlog working to keep that transparency at 100%. They also offer rolemenus, but that's super trivial for them compared to their job of moderation. Their source is at jonas747/yagpdb on GitHub.

Maiden Voyage

Maiden Voyage spends most of her time carrying messages between different services. She allows people to communicate on a fully free platform with a community backed by fully free bots. She's an instance of 42wim/matterbridge on GitHub.

Why These Bots?

These bots are 100% open source. And 100% means 100%. They also did whatever job they were supposed to the best.

Why Not These Bots?

  • Valkyrja. I personally think YAGPDB has nicer configuration for a lot of things Valkyrja does. Mostly open source, but Valkyrja.secure is kept in a private repository, and it contains bot functions such as antispam. Not 100% open source. Additionally, the licenses can be somewhat conflicting. The website identifies itself as Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License, while the README for the website identifies the website as Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License, while the LICENSE file says the website is MIT. Pick a license, yo.
  • Mee6. Modern version is not open source, and barebones in useful features. Also the levels thing is annoying and a huge mistake. It serves no useful function to chat other than to get people to post messages to post messages rather than to actually chat.
  • Blargbot. BBTAG is what would happen if someone learned Lisp in a day, got lobotomized, and tried to recreate Lisp from scratch. Code is often unreadable and it cannot do many things.

Transparency helps allow a Discord guild to gain trust with everyone.

Principles

Informative

Transparency shows the history of your guild's leadership and allows users to see what they're dealing with.

Two-Way

Transparency allows users to become more comfortable about sharing useful criticism.

Usage

Moderation Actions

Transparency helps users become more aware of what will and what won't get them in trouble.

Status

Transparency provides timely feedback about the state of the guild.

Setup

Moderation Logs

These should offer feedback to users about current moderation actions. Deleted messages, nickname changes, etc. are not moderation actions and should not be logged in a moderation log.

Audit Logs

Make these public. There's no reason not to. They were created for the sole purpose of being public. They can't be spoofed.

Community Involvement

The community should be able to see the brains of the server. Ask yourself what good reason is there to hide leadership discussion from the community. Controversial decisions they won't like? Just kicking the can down til later. Boring? So is the modlog. Whatever reason you have, it's probably invalid.

You should poll the community's thoughts on the server from time to time. Member counts are useless, retention and opinion are useful.

This is the first post on here, so welcome I guess. This is basically where I'll make random posts related to running a Discord server.

Channels

Channels should be: – Distinct. Do not make multiple channels that are close or identical in topic. – Purposeful. Do not make channels just because you feel like it. They should serve a purpose of conversation. Do not be afraid to trim unused channels. – Topical, but not overly specific.

Channel Names

Channel names should be: – Related to their topic. Good: #linux-customization. Bad: #channel-7 – Self explanatory. Good: #linux-customization. Bad: #unix-porn. – Concise. Good: #sysadmin. Bad: #system-administration-chat – Non-thematic. Good: #support. Bad: #man-pages. Note: you can tweak word choice to add a bit of flair, but you should retain the self explanatory aspect. A good format is a single noun, plus a second word to clarify if needed. For example: #support, #support-type.

Category Names

Category names should be: – Short. One word at the most. Any more is excess. – Nouns. Good: Contribution. Bad: Contributing. – Emoji-free. – Non-thematic. Good: Chat. Bad: /var/.

Channel Organization

Channels should be organized in this order:

  • Welcome
  • Information, modlog, etc.
  • Webhook channels (news, github updates, etc)
  • Chat channels
  • Private channels