Skip to main content

the avatar of Hollow Man's Blog

My Google Summer of Code 2022 – Google Blockly Workspace MultiSelect Plugin

My Presentation at 2023 Blockly Developer Summit: Multi-Select Plugin

More about 2023 Blockly Summit

GSoC 2022 @ MIT App Inventor
GSoC 2022 Certificate

Project Repository Link

Try out the plugin online

PRs and issues resolved during GSoC 2022:

Public Announcement

My GitHub

Introduction

Hi there! If you prefer watching videos, check this out for an episode demoing the plugin:

For you guys who prefer reading, in this blog post I will introduce you to my work on the plugin for selecting, dragging, and doing actions on multiple blocks. The project is sponsored by Google Summer of Code (GSoC) 2022, under MIT App inventor.

Backgrounds

Aim

The project aims to enable the selection of multiple blocks at the same time and allow moving and doing actions on multiple blocks on Blockly.

This behavior is the same as when you try to manage your files on your Operating System. You can click on the files while pressing the control key, drag a rectangle to select multiple files. Then move them around, copying and deleting.

It sounds a little bit easy, but actually, I would say that it’s not. Multiple selections can become a crazy-complex feature when you start thinking about the details.

History

This feature request has remained open on GitHub Issues for six years. However, it was still in the discussion phase and far from the beginning of Implementation before my project began.

Since the Blockly community long wants this feature, we base our plugin on the latest Blockly so that it can be applied to everyone’s project. The App Inventor uses a Blockly version that is much older, so it’s a pity that we can’t see it work on App Inventor now. Let’s hope that the App Inventor can upgrade the Blockly version to the latest soon.

Realization

The “drag a rectangle to select” feature is realized with the help of the DragSelect plugin. I submitted a PR to add the pointer-events so that it can work for Blockly, and it got merged into v2.4.4.

In addition, I disable the drag surface feature in Blockly, which stops us from moving multiple blocks simultaneously. Also, there’s evidence suggesting that we can perform better without a drag surface.

So, how does the plugin work? Well, generally, the plugin acts like an adapter. It maintains its own multiple selection set, which keeps currently selected blocks and make sure we always have one of the selected blocks as the selected one in Blockly core. When users do some actions, the plugin also passes all the actions to the other blocks in our set besides the selected one in Blockly core.

Functionalities

Let’s check out what the plugin can do!

  1. Additional blocks can be selected by holding the SHIFT key while clicking the new block. You can also deselect the block by clicking the already selected block.
  2. Clicking on the button above the trashcan is equivalent to holding or releasing the SHIFT key for switching between the multiple selection mode and the normal mode.
  3. We can clear the selection by clicking on the workspace background.
  4. Clicking a new block without holding SHIFT key can clear the multiple selections and change the selection to only that block.
  5. Holding SHIFT key to drag a rectangle area to select can reverse their selection state for the blocks touched by the rectangle.
  6. In multiple selection mode, workspace dragging and block dragging will all be disabled. You can only drag to draw a rectangle for selection.
  7. When some of the selected blocks are in one block stack, for example, some top blocks and some of their children blocks are in the selection simultaneously. If applicable, the plugin only disconnects the selected most top block in that stack with its parent block. Move along with all the children’s blocks of that most top block as a whole.
  8. You can also drag all the blocks to the trash can.
  9. When you edit the fields while selecting multiple blocks, we will automatically apply that to all the blocks with the same type.
  10. There’s also an MIT App Inventor-only feature that has been migrated into this plugin, that you can double click to collapse or expand currently selected blocks.
  11. For the context menu, the Duplicate will duplicate the selected most top block in the block stack and all the children blocks of that most top block. The selection will be changed to all newly created duplicate blocks’ most top blocks. For all the other items, The actions to show are determined by the state of the block which the user right-clicks on, and the same action will be applied to all the blocks no matter their individual state. We will append the currently applicable number of user-selected state-changing blocks, and the number will only be shown when it is greater than 1.
  12. The Add Comment / Remove Comment option will add / remove comment buttons to all the selected blocks.
  13. The Inline Inputs / External Inputs option will convert the input format with all the selected blocks.
  14. The Collapse Block / Expand Block option will only apply to the selected most top block in the block stack.
  15. The Disable Block / Enable Block option will only apply to the selected most top block in the block stack. All the children blocks of that most top block will also get disabled.
  16. The number in Delete [X] Blocks is the count of the selected most top block in the block stack as well as all children of those selected most top block. Clicking on that option will delete the blocks mentioned.
  17. The Help option displays just the helping information of the block the user just right-clicked on.
  18. We add Select all Blocks in the workspace context menu.
  19. For the shortcut keys, These actions will only apply to the selected most top block in the block stack. when you press Ctrl A, you can select all the blocks in the current workspace. Ctrl C to copy the selected blocks, Ctrl X to cut the selected blocks to the clipboard, and Ctrl V to paste all the blocks currently in the clipboard and get all the newly pasted blocks selected.
  20. Bumping neighbors after dragging to avoid overlapping is disabled in this plugin by default, since I find it disturbing sometimes for multiple selections.
  21. Click on a block will bring that block to the front in case Bumping neighbours is disabled.

Usage

If you want to integrate the plugin into your project, you can add the dependency into your package.json. In the source code, pass the workspace to the plugin, and initialize the plugin, and then it’s done! You can choose to disable double-click the blocks to collapse or expand and enable bumping neighbors after dragging to avoid overlapping. For the multi-select controls, you can also choose to hide the icon and customize the icons of each state. More details can be found in the README.

You can also choose to integrate the plugin with other ones, like the scroll options, which enable the edge scroll and wheel scroll for Blockly. The only thing you have to pay attention for the scroll options plugin to work is to assign the original blockDragger value required for scroll options to baseBlockDragger in our plugin. During the project period I also submitted a PR for fixing the a bug that makes scroll options unable to work without the drag surface, and it has already got merged.

Finally

That’s all for this blog post. Before it ends, I would like to say thank you to my mentors, Evan Patton and Li Li, as well as the MIT App Inventor Team for guiding me throughout the project. They are really supportive. Also, special Thanks to Beka Westberg. She devoted a lot of time to giving suggestions and helping review the code. We can’t have this plugin without her! Finally, thanks for reading this blog post!

the avatar of Hollow Man's Blog

My Summer of Bitcoin 2022 Project – CI for CADR

Synopsis

Before the Summer of Bitcoin project, Cryptoanarchy Debian Repo (CADR) lacked Continuous Integration (CI), which troubles the new coming contributors because setting up the developing environment can be complex. I finally successfully implemented the CI using GitHub Actions default runners. The CI can be triggered manually, or by sending PRs as well as pushing directly to the master branch.

The CI is divided into 2 jobs:

  • The first one is the build job. It builds the running podman environment image, uploads the image to Artifacts for reuse. Then with the podman environment, builds the CADR packages, checks their sha256 sum, and then uploads the built Debian packages as well as their sha256 sum values to Artifacts.
  • The second one is the test job. It runs when the build job finishes. The testing jobs are run in parallel for each package. The test job first downloads the built images and packages Artifacts uploaded in the build job, then use make test-here-basic-% and make test-here-upgrade-%(% for package name) to run tests.

Road of Implementation

First try

At first, I ignored the fact that there already exists a dockerfile for CADR running (although it was not for building), and setup my own dockerfile from scratch by adding dependencies when I encounter any errors.

My own dockerfile turned out to work fine on GitHub Actions for the building process, but failed for the test process. Initially I thought it was some more dependency issues, since the test can work on my own computer.

When checking the logs I found that it’s due to the unshare issue.

Then I noticed that adding a --privileged parameter can fix the unshare issue for docker. But then a systemd issue just came after it. Finally I noticed the dockerfile in the codebase that already exists for CADR, and just as how it works, I made the systemd to start as the first process.

VOLUME [ "/sys/fs/cgroup" ]
CMD ["/lib/systemd/systemd"]

and add --tmpfs /tmp --tmpfs /run --tmpfs /run/lock -v /sys/fs/cgroup:/sys/fs/cgroup:ro as additional parameters to share some host machine resources and make it as the daemon container. Operations are done using docker exec to attach to the container. But still it doesn’t fix the systemd issue.

Finally I switched to podman and the systemd issue got fixed (it supports --systemd=true) because I occasionally found this article when I Googled the issue.

However, a new issue occurs suggesting failed to override dbcache.

Can’t see any errors from the workflow logs, even though the missing bc dependency has been fixed and I can confirm that the command here works correctly in the container running on my PC. Moreover when I manually skip the test just mentioned, the test further shows that there is an unneeded reindex:

Which suggests that it’s related to issue 108 maybe? Have opened an issue here. I can skip that test, but further error suggesting electrs is not available. It can be fixed with this PR

Even if those issues are fixed, another platform may still be needed since the full test requires too much space:

Only testing the regtest part will be fine with no space issue.

Fixing the tests

The first issue is to find out why overriding dbcache fails. This takes me quite a few weeks to find out the solution. Originally, when determining bitcoin dbcache size, bc is invoked. But bc is not guaranteed to be installed, thus it can fail. Then instead of doing maths wizardry, I submitted a PR to just match on ranges: RAM < 1024 -> default dbcache, RAM < 2048 -> dbcache=512, …, RAM => 8192 -> dbcache=4096. However, the failed to override dbcache still exists when running in GitHub Actions workflow with this PR. It’s very weird, as when I run the test manually using the same methods from the workflow with the podman container on my PC, such an issue won’t appear. So the issue seems to belong to GitHub Actions workflow environment only even though it’s running in the container.

Then after a lot of trial and error, I finally found the culprit. By referring to PR, previously the debcrafter dropped all capabilities which seems to cause errors when the host kernel capabilities do not match those known to setpriv. We need to only drop supported capabilities by the current kernel.

Then I submitted a PR to fix this, and got merged.

The second issue is to find out why the unneeded reindex error exists. I noticed that although the test failed on test-here-basic-electrs with unneeded reindex when running make test, running make test-here-basic-electrs alone won’t fail. So prior to fixing this issue, my guess was that maybe it’s still related to issue issue 108, which is that after updating existing non-pruned nodes in experimental -reindex was used despite pruning not being changed. Or the test environment didn’t get cleaned up before test-here-basic-electrs when executing make test. My final result proves that the later is right, and submitted a PR to clean up the chain mode marker, since we want it to be clean with package_clean_install.sh

I also submitted a PR to force linked-hash-map version to be 0.5.4 for fixing the build issue of debcrafter that just came up during the project period.

The test can be successful on GitHub Actions when only tested with regtest and after PR 200, 201, 203, 204 get merged.

Research on cloud provider

I also researched on which cloud service to use, as we were intended to use a GItHub self-hosted runner. As I checked on cloud service providers AWS, Google Cloud and Azure. I find that GitHub Actions uses Azure as their default runners, to build a GitHub self-hosted runner, Azure would be a good choice if we use the same provider as the GitHub default hosted runner. Also Azure has a trial period with 200 dollars for one month when starting a new account, so we can start free, while other cloud service providers don’t offer such a great discount.

Investigation on other possible CI platforms

I find out that unlike GitHub Actions that runs CI in a virtual machine, Travis CI, GitLab CI/CD, Jenkins all run the CI predefined Docker containers without without systemd support. Then it would be not possible to run a systemd supported podman container inside such a container. Azure DevsOps is a valid one for our use case, and I also tried to use it. Then I noticed that for a single CI job, each step, it only allows 1 hour maximum, otherwise it would get cancelled, while our build job as well as full net test job last much longer than 1 hour, it’s also not suitable for us. Then finally the GitHub Actions would be the only good choice to have.

Self-hosted runners for GitHub Actions

I had also tried to use Azure Virtual Machines service by myself to set up Self-hosted runners for GitHub Actions, but it seems like the environment doesn’t automatically get cleaned each time, and is contaminated from previous runs.

Divide and Conquer

Finally I came up with a new way for testing. We can use the divide and conquer to bypass the short of disk space issue as well as the contaminated running environment issue when running tests on both the mainnet and regtest. I can see that the make test is composed of make test-here-basic-% and make test-here-upgrade-%(% for package name), we can just use the matrix in GitHub Actions to test each package in separate environments, and then the disk space would be enough, and PR 204 can be closed because we now always have a clean environment.

Then I successfully implemented and tested that method, and it works! So right now it’s the full test and I have reached the project goal with even a solution that has no money cost for CI building and testing!

The CI can be successful if the previous tests fixing PRs get merged first.

Final Deliverables

After my mentor @Kixunil‘s review, I began to use --locked parameter to make cargo use cargo.lock which contains correct versions. Also I fixed a security issue, make a user account user and built/tested with user, and made to upload the sha256sum result for the built deb packages afterwards so people can check hashes.

In addition, I fixed tests for bitcoin-regtest after setting bitcoind nosettings enabled in PR 205. Then there should be some kind of bug in core for this wallet location difference in the GitHub runner and the physical machine, so the PR gets closed and another solution that makes tests independent of wallet location was committed.

The CI runs successfully with the above changes, and everything works fine, nothing left to do.

Conclusion

My Summer of Bitcoin project is a great experience for me as I learned a lot about Bitcoin and related DevOps knowledge.

If you are interested in Bitcoin and would like to start contributing to Cryptoanarchy Debian, with my work, you can easily fork the repo and add more test or new packages by committing the code to your fork’s master branch on GitHub, the CI will help you build the deb packages and locate possible errors, no need to setup the developing environment on your computer again.

Summary of PRs

Merged

Closed as resolved in another way

a silhouette of a person's head and shoulders, used as a default avatar

openSUSE Tumbleweed – Review of the week 2022/32

Dear Tumbleweed users and hackers,

We reach the end of a week crowded with snapshots. We published 7 snapshots in total since my last review (0804…0810). The number of failed packages is quite high currently in Factory, so I’d like to ask everybody to help out on that front (https://tinyurl.com/ysy4nnnz)

The major updates delivered this week are:

  • Mesa 22.1.4
  • Mozilla Firefox 103.0.1
  • AppArmor 3.0.6
  • gdb 12.1
  • Linux kernel 5.18.15 & 5.19.0
  • libvirt 8.6.0
  • nvme-cli 2.1.1
  • Poppler 22.08.0
  • KDE Plasma 5.24.4
  • Samba 4.16.4
  • Plymouth 22.02.122
  • RPM 4.17.1, with some significant rework on the spec, i.e previously bundled things like debugedit and python-rpm-packaging are split out)
  • Virt-Manager 4.1.0
  • Postfix 3.7.2
  • GNOME 42.4 (mostly complete, gnome-shell, mutter, and gnome-desktop missing)

In the staging area, the following updates are being prepared and worked on:

  • glibc 2.36
  • Linux kernel 5.19.1
  • Binutils 2.39
  • Shadow 4.12
  • wxWidgets 3.2.0: breaks build of wxPython
  • fmt 9.0: breaks ceph and zxing-cpp
the avatar of openSUSE News

New Kernel, HarfBuzz Versions update in Tumbleweed

Consecutive openSUSE Tumbleweed snapshots have been rolling out to users each day this week.

Among the few major version releases this week are the 5.19 Linux Kernel and the 5.1 HarfBuzz version, which both arrived in snapshot 20220810.

Snapshot 20220810 also brought tons of other packages. Highlights being discussed about the release of kernel 5.19 point to increased arm support, TCP improvements related to larger IPv6 package sizes, and graphical improvements for Intel and AMD GPUs. The text shaping engine harfbuzz 5.1 fixed regressions in bitmap font rendering, improved support for some Arabic and Hebrew fonts and improved the handling of command line options. The hplip 3.22.6 package added support for several new printers and added support for new distros that were recently released. There were Italian and Serbian translation changes in the gnome-software 42.4 update, which also fixed detail text when it contains markup. An update of webkit2gtk3 2.36.6 fixed the handling of touchpad scrolling on GTK4 builds as well as several crashes and rendering issues. Other packages to update in the snapshot were postfix 3.7.2, ModemManager 1.18.10, mutt 2.2.7 and more.

The open-source antivirus engine ClamAV updated to the 0.103.7 version in snapshot 20220809. The updated package allows for the skipping of files in solid archives and upgrades the UnRAR library to version 6.1.7. An update of the Remote Desktop Protocol package freerdp 2.8.0 backported several items and prevent out of bound reads for ffmpeg. The kernel-firmware package provided several Intel Bluetooth updates and added firmware for audio amplifier chip Cirrus CS35L41. Also in the update was the atomic updates package transactional-update, which transitioned from release candidate to the actual 4.0.0 version. The package used in MicroOS added a method to delete a snapshot and changed the “List” method of snapshot D-Bus. An update of yast2-trans enhanced several Swedish translations. A majority of the remaining packages in the snapshot were RubyGems updates.

While the successor of snapshot 20220808 had RubyGems updates, this snapshot had mostly Python Package Index updates. Among the updated PyPI package were python-httpx 0.23.0, python310-pyparsing 3.0.9 and python-kiwisolver 1.4.4. An update of python-setuptools went from the 58.3.0 version to 63.2.0; this newer python-setuptools included performance optimization, removed some packaging dependencies and fixed some broken functionality appearing in version 60.8.0. Two other important packages to update in the snapshot were virt-manager 4.1.0, which refreshed and dropped patches, and rpm 4.17.1, which fixed a Common Vulnerabilities and Exposures; CVE-2021-3521 was a flaw in RPM’s signature functionality.

Snapshots 20220807 and 20220806 both had several RubyGems updated. The 20220807 snapshot updated the boot processing package plymouth to a 22.02.122 version, which updated a script for source-code beautifier uncrustify. Another major version to arrive this week was an update of hwinfo 22.0. The hardware information tool improved treatment of NVME devices, fixed a compiler warning and added a new NVME hardware class.

KDE fans received an update in snapshot 20220805. KDE’s Plasma 5.25.4 arrived in the snapshot and added keyboard navigation support in the Plasma Desktop. The power consumption controller PowerDevil updated battery notifications and now shows a notification when AC voltage is plugged in when the battery drains. GNOME’s text editor gedit 42.2 fixed text cut off situations and updated translations. An aws-cli 1.25.45 update added requirements in the spec file for setup.py. Almost a year’s worth of updates arrived in the libostree 2022.5 version. The version provided fixes for s390x SE, Application Programming Interface additions and fixed Rust bindings.

a silhouette of a person's head and shoulders, used as a default avatar

Type support: getting started with syslog-ng 4.0

Version 4.0 of syslog-ng is right around the corner. It hasn’tyet been released; however, you can already try some of its features. The largest and most interesting change is type support. Right now, name-value pairs within syslog-ng are represented as text, even if the PatternDB or JSON parsers could see the actual type of the incoming data. This does not change, but starting with 4.0, syslog-ng will keep the type information, and use it correctly on the destination side. This makes your life easier, for example when you store numbers to Elasticsearch or to other type-aware storage.

From this blog, you can learn how type support makes your life easier and helps you to give it a testdrive on your own hosts: https://www.syslog-ng.com/community/b/blog/posts/type-support-getting-started-with-syslog-ng-4-0

syslog-ng logo

a silhouette of a person's head and shoulders, used as a default avatar

Discogs

Last week I became a Discogs user. Why? I have been browsing the site for years to find information on albums. Recently I also needed a solution to create an easy to access database of my CD/DVD collection. Right now I am not interested in the marketplace function of Discogs, but that might change in the long term :-)

Information overload

For many years when I searched for an album, the first few hits were from YouTube and Wikipedia. Nowadays the first few results are often from Discogs. While Wikipedia sometimes provides some interesting background information about the creation of an album, Discogs has more structured and uniform information about albums. It also lists the many variants of the same album. Even for artists where I thought that I have all albums in my collection (like Mike Oldfield), I can find albums I have never heard about before. It is also easy to see who a given artist was working with and using TIDAL I can instantly listen to some really interesting (or awful…) music right away.

My collection

I only have a few hundred CDs, but that is already more than I can remember. When I am in a CD shop, I happily buy new CDs from artists I have never heard about before, as I can be sure that I do not already have that disc. However, when it comes to Solaris, Mike Oldfield or Vangelis, I can never be sure if I already have an album. Of course I tried some DIY methods, but it was difficult to maintain the lists and they were never at hand when I really needed them.

Discogs provides an easy to use mobile application to scan bar codes on the back of CDs. This can speed up adding new items to my collection tremendously. Of course not all bar codes are in available in Discogs, but until now there was only one CD that I could not find at all. The more difficult part is when it lists dozens of disks for the same bar code: various (re)prints of the the same album from around the World. I must admit that I am lazy here and just take an educated guess… I can use the same mobile app to check my collection when away from home.

A few weeks ago I realized that I have a duplicate album, and while entering my collection into Discogs, I discovered another one. I have no plans for selling them, I already know which of my friends would be happy to receive them. But in the long term it could be interesting to buy a few CDs which are otherwise impossible to buy here in Hungary.

Discogs also gives a price estimate for most CDs. It was a kind of surprising: some of my most expensive disks are not worth too much anymore, as they were printed in large numbers. On the other hand I have a large collection of Hungarian progrock music, and the price of those is much higher than I paid for them originally.

You can find my collection at https://www.discogs.com/user/pczanik/collection. The list is constantly growing, as I am still just at less than a half of my collection. The next time I visit my favorite CD shop, Periferic Records - Stereo Kft., I will have an easier job when I see a CD from a familiar artist :-)

flower

a silhouette of a person's head and shoulders, used as a default avatar

GNOME 43 Wallpapers

GNOME 43 Wallpapers

Evolution and design can co-exist happily in the world of desktop wallpapers. It's desirable to evolve within a set of constraints to create a theme in time, set up a visual brand that doesn't rely on putting a logo on everything. At the same time it's healthy to stop once in a while, do a small reflection on what's perhaps a little dated and do a fresh redesign.

I took extra time this release to focus on refreshing the whole wallpaper set for 43. While the default wallpaper isn't a big departure from 3.38 hexagon theme, most of the supplemental wallpapers have been refreshed from the ground up. The video above shows a few glimpses of all the one way streets it took for the default to land back in the hexagons.

GNOME 42 was the first release to ship a bunch of SVG based wallpapers that embraced the flat colors and gradients and benefited from being just a few kilobytes in file size. It was also the first release to ship dark preference variants. All of that continues into 43.

Pixels in Blender

Major change comes from addressing a wide range of display aspect ratios with one wallpaper. 43 wallpapers should work fine on your ultrawides just as well as portrait displays. We also rely on WebP as the file format getting a much better quality with a nice compression ratio (albeit lossy).

What's still missing are photographic wallpapers captured under different lighting. Hopefully next release.

Blender's geometry nodes is an amazing tool to do generative art, yet I feel like I've already forgotten the small fraction of what can be done that I've learned during this cycle. Luckily there's always the next release to do some repetition. Thanks to everyone following my struggles on the twitch streams.

The release is dedicated to Thomas Wood, a long time maintainer of all things visual in GNOME.

a silhouette of a person's head and shoulders, used as a default avatar

GNOME 43 Wallpapers

GNOME 43 Wallpapers

Evolution and design can co-exist happily in the world of desktop wallpapers. It’s desirable to evolve within a set of constraints to create a theme in time, set up a visual brand that doesn’t rely on putting a logo on everything. At the same time it’s healthy to stop once in a while, do a small reflection on what’s perhaps a little dated and do a fresh redesign.

I took extra time this release to focus on refreshing the whole wallpaper set for 43. While the default wallpaper isn’t a big departure from 3.38 hexagon theme, most of the supplemental wallpapers have been refreshed from the ground up. The video above shows a few glimpses of all the one way streets it took for the default to land back in the hexagons.

GNOME 42 was the first release to ship a bunch of SVG based wallpapers that embraced the flat colors and gradients and benefited from being just a few kilobytes in file size. It was also the first release to ship dark preference variants. All of that continues into 43.

Pixels in Blender

Major change comes from addressing a wide range of display aspect ratios with one wallpaper. 43 wallpapers should work fine on your ultrawides just as well as portrait displays. We also rely on WebP as the file format getting a much better quality with a nice compression ratio (albeit lossy).

What’s still missing are photographic wallpapers captured under different lighting. Hopefully next release.

Blender’s geometry nodes is an amazing tool to do generative art, yet I feel like I’ve already forgotten the small fraction of what can be done that I’ve learned during this cycle. Luckily there’s always the next release to do some repetition. Thanks to everyone following my struggles on the twitch streams.

The release is dedicated to Thomas Wood, a long time maintainer of all things visual in GNOME.

the avatar of Ish Sookun

Announcing the availability of two openSUSE mirrors in Mauritius

Yesterday, I attended an open source event organised by OSCA Mauritius and OceanDBA.

Open Source event at Flying Dodo, photo by Sandeep Ramgolam
Open Source event at Flying Dodo, photo by Sandeep Ramgolam

I was invited to speak at the event and I chose to explain a little about openSUSE, its different distributions and how we have managed to set up two mirrors to improve the performance of openSUSE updates in Mauritius.

Girish is a representative for OSCA Mauritius and he works at OceanDBA. He put all the effort into organising this event. At about 09h30, the conference room at Flying Dodo was almost full. Girish welcomed everyone and introduced the presentation themes for the day.

Girish Mahabir presenting the topics of the day
Girish Mahabir presenting the topics of the day

First presentation – Linux Kernel history by Chittesh Sham

Chittesh is a DevOps Engineer at Corel Corporation. He did a presentation on the Linux Kernel. He tried to summarise three decades of Linux history in one presentation. It was a very informative and fun prez.

Chittesh Sham, DevOps Engineer at Corel Corporation
Chittesh Sham, DevOps Engineer at Corel Corporation

Second presentation – Bash Scripting by Shravan Dwarka

Shravan is a Linux System Engineer at OceanDBA. He did a presentation on the Bourne Again SHell (Bash).

Shravan Dwarka, Linux System Engineer at OceanDBA
Shravan Dwarka, Linux System Engineer at OceanDBA

After explaining about Shells, Shravan gave a scenario where a database administrator had to automate backups and perform backup retention.

He then explained line by line how he wrote a Bash script to execute the backup.

Final presentation – openSUSE Mirrors in Mauritius

My presentation was last. It's been a while since I set up two openSUSE mirrors in Mauritius. Any openSUSE user on the island will now benefit from fast updates without having to configure anything on their openSUSE machine.

This event was an opportunity to make a public announcement about the mirrors and explain the process behind. That is, how I contacted sponsors for server/bandwidth in Mauritius and got in touch with the openSUSE Heroes to build the repo mirrors.

However, first I did a history lesson about S.u.S.E, SUSE and openSUSE. I clarified that openSUSE is a project and the various distributions have names like Leap, Leap Micro, Tumbleweed and MicroOS.

Ish Sookun talking about openSUSE Leap, photo by Neil Baichoo
Ish Sookun talking about openSUSE Leap, photo by Neil Baichoo

Then, I showed the tickets that I opened at openSUSE to get the ball rolling. Within a few days we had the mirrors set up.

I mentioned that the domain opensuse.mu is sponsored by the openSUSE project itself. Then, the Heroes created the records to point the domain & sub-domains to servers in Mauritius, sponsored by cloud.mu and Rogers Capital Technology Services.

Sponsors for openSUSE mirror servers in Mauritius
Sponsors for openSUSE mirror servers in Mauritius

While speaking about the mirrors, I explained how MirrorBrain works. It is an open source framework to run a content delivery network for mirror servers. The two openSUSE mirrors in Mauritius are mirror.opensuse.mu and mirror.rcts.opensuse.mu. To show how MirrorBrain works with these two servers, I opened get.opensuse.org to download the latest release of openSUSE Leap 15.4.

I selected the offline installation image and we checked the URL from which the image was downloading. It was the Rogers Capital Technology Services (RCTS) mirror server.

I SSH'ed on the cloud.mu mirror server to show how the rsync is done from the restricted rsync server of openSUSE.org. I did not SSH on the RCTS server because it requires a VPN (RCTS engineers take security very seriously 🤓). My VPN setup was on a different machine than the one I was doing my presentation on.

I explained the difference between rsync.opensuse.org and stage.opensuse.org, the former being a public rsync server. It can be used by anyone wishing to run a private openSUSE mirror for home or office use.

The conference room was packed with attendees which is a promising thing for an open source event.

Photo by Sandeep Ramgolam

At the end of the event, Joffrey Michaïe, the founder and CEO of OceanDBA addressed the attendees. He thanked the wonderful audience for showing up to the event. Joffrey explained that OceanDBA's business is built on open source technologies and that they have the open source philosophy at the heart of the company.

Joffrey Michaïe, founder & CEO of OceanDBA
Joffrey Michaïe, founder & CEO of OceanDBA

He was glad to see a lot of young folks attending the event and said that his company would be keen to sponsor such events again in the future. He mentioned that at the moment there are about fifteen open positions at OceanDBA and anyone wishing to apply could reach out to him directly or talk to any other personnel of the company.

The Managing Director of Rogers Capital Technology Services, Dev Hurkoo, and the Roshan Patroo, Manager at RCTS, attended the event. We met after my presentation. They both told me that they were impressed by the attendee turn-out for an open source event. Dev expressed his interest to support open source activities in the future too.

a silhouette of a person's head and shoulders, used as a default avatar

openSUSE Tumbleweed – Review of the weeks 2022/29-31

Dear Tumbleweed users and hackers,

I was in the fortunate situation of enjoying two weeks of offline time. Took a little bit of effort, but I did manage to not start my computer a single time (ok, I cheated, checked emails, and staging progress on the phone browser). During this time, Richard has been taking good care of Tumbleweed – with the limitations that were put upon him, like reduced OBS worker powers and the like. In any case, I still do want to give you an overview of what changed in Tumbleweed during those three weeks. There was a total of 8 snapshots released (0718, 0719, 0725, 0728, 0729, 0731, 0801, 0802). A few of those snapshots have only been published, but no announcement emails were sent out, as there were also some mailman issues on the factory mailing list.

Those snapshot accumulated the following changes:

  • Linux kernel 5.18.11
  • Pipewire 0.3.55 & 0.3.56
  • nvme-cli 2.1~rc0
  • XOrg X11 SFFmpeg21.1.4
  • ffmpeg 5.1
  • qemu 7.0
  • AppArmor 3.0.5
  • Poppler 22.07.0
  • polkit: split out pkexec into seperate package to make system hardening easier (to avoid installing it jsc#PED-132 jsc#PED-148).

The next snapshot being tested is currently 0804, which mostly looks good with some ‘weird’ things around transactional servers. This snapshot and the current state of staging projects promise to deliver these items soon (for any random value of time to fit into ‘soon’):

  • Mesa 22.1.4
  • Mozilla Firefox 103.0.1
  • AppArmor 3.0.6
  • gdb 12.1
  • Linux kernel 5.18.15, followed by 5.19
  • libvirt 8.6.0
  • nvme-cli 2.1.1 (out of RC phase)
  • KDE Plasma 5.25.4
  • Samba 4.16.4
  • Postfix 3.7.2
  • RPM 4.17.1, with some major rework on the spec, i.e previously bundled things like debugedit and python-rpm-packaging are split out)
  • python-setuptools 63.2.0
  • Python 3.10.6
  • CMake 3.24.0