Skip to main content

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

GNOME yang Jelek atau Akhlak Kalian yang Buruk?

GNOME 3.28 beberapa waktu lalu baru rilis, cukup memancing banyak komentar. Tanggal 26 April kemarin, Ubuntu 18.04 meluncur dengan menyertakan GNOME 3.28 sebagai Desktop Environment baku. Unity sudah tidak dipergunakan lagi, mungkin tim Ubuntu sudah lelah.

Berawal dari move on-nya si Ubuntu, banyak penggemarnya kecewa, dan merasa GNOME itu jelek, tanpa bisa menunjukkan kejelekannya. Mari kita mundur beberapa waktu lalu.

 

Awal muncul GNOME 3, saya termasuk orang yang tidak suka, antar mukanya aneh. Lebih nyaman dan sederhana GNOME 2. Saya yang saat itu masuk di tim pengembang BlankOn, bersama rekan-rekan membedah kejelekannya sehingga muncullah bibit-bibit pemberontakan dengan dimulainya BlankOn Panel yang berujung pada Manokwari.

Manokwari sendiri perlu dibuat karena kedepannya, semua pustaka GNOME 2 akan ditinggalkan dan beralih ke GNOME 3. Tapi saya dan teman-teman tidak siap untuk sepenuhnya menggunakan GNOME 3 karena beberapa kejelekannya.

2014, saat GNOME Asia di Beijing, saya ngomong sendiri bahwa GNOME jelek ke pimpinan desainer UI/UX, Allan Day, dan berujunglah diskusi panjang. Saya pasti kalah sama mereka dalam hal penjelasan, saya cupunya minta ampun. Tapi saya menang dengan menceritakan bahwa GNOME 3 membutuhkan sumber daya komputer cukup besar (misal RAM 1 GB) di mana masyarakat Indonesia tidak banyak yang bisa memenuhinya. Sedangkan Manokwari, bisa bekerja (waktu itu) pada RAM 256 MB. Toh Manokwari masih menggunakan pustaka GNOME.

Sekitar 2011, Ubuntu merilis Unity, banyak yang komplain dan gak nyaman. Pindah ke KDE juga takut gengsinya turun lantara KDE di masa itu (sampai masa kini sih) mirip MS Windows dan banyak kutu (sekarang udah jauh mendingan).

Kita terbiasa ngedumel dan menjelek-jelekkan tanpa bisa menunjukkan apa yang bisa dilakukan untuk memperbagus hal tersebut. Mental kita lebih banyak sebagai pencela dari pada penebar “Rahmatan Lil Alamin”.

Saya dulu, mantab pindah ke GNOME 3.x saat memiliki layar dengan resolusi di atas FHD (3K) dan layar sentuh. Banyak perabotan GNOME bisa berfungsi dengan baik, seperti:

  • di Yoga 3 Pro, di layar ada logo jendela, saat disentuh, akan bisa menampilkan Activities. Pada DE lain tidak bisa
  • di layar sentuh, on screen keyboard sangat mudah tampil saat kita merasa memerlukannya (atau pada tablet mode). Tentunya hal ini tidak terjadi jika komputer kalian masih konvensional.

Jadi, sebelum mencela GNOME, lebih baik kopdar, ngopi-ngopi dulu dengan teman-teman komunitas GNOME. Saya traktir!

Catatan: saya belum nemu orang komplain dengan DE-nya Endless OS. Kalau komplain terkait tidak bisa booting dan sampai mencela saya tidak beretika sih ada.

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

Zwei neue Pakete für openSUSE

openSUSE Tumbleweed enthält jetzt zwei neue Pakete welche ich erstellt habe: python-emoji und python-ntfy. Ersteres hat es sogar noch in openSUSE Leap 15.0 geschafft.

Die Funktionalität von python-emoji ist schnell erklärt und trotzdem unglaublich nützlich, wie diese leichte Abwandlung des Beispiels aus der Paketbeschreibung auf PyPI zeigt:

>> import emoji
>> print(emoji.emojize('Python ist :thumbs_up:'))
Python ist 👍

Natürlich funktioniert dies sowohl in modernem Python als auch in klassischem Python.

Eines der Pakete welche von python-emoji profitieren ist python-ntfy. python-ntfy ermöglichte es aus der Konsole Benachritigungen zu verschicken. Diese können entweder auf der Arbeitsfläche angezeigt werden, oder über verschiedene Backends an ein Smartphone weitergeleitet werden. Allerdings sind momentan noch nicht Backends auch für openSUSE paketiert. Besonders praktisch ist der Befehl ntfy done. Nutzt man diesen um einen lange laufenden Prozess zu starten, so bekommt man, sobald dieser fertig ist, eine Nachricht welche auch über Erfolg oder Misserfolg und die Laufzeit des Prozesses informiert. Man kann sich also ganz gemütlich in die Hängematte legen während der Rechner ackert. 😉

the avatar of Hans Petter Jansson

Introducing Chafa

Chafa logo

Here’s something I didn’t know: The DEC VT100 turns 40 in August. This factlet comes courtesy of Wikipedia, as I’m not quite old and wise enough to have made its acquaintance outside of a museum. None the less, the VT100 and its extended family of hard-working office furniture has always been with me in terms of the ECMA-48 standard, better known as ANSI X3.64 or simply (and these days, probably as accurately as any formal descriptor) “ANSI codes“, which it helped pioneer.

This pinnacle of 1970s UX is somehow still going strong, and recent developments like lots and lots of colors, ubiquitous Unicode support, good monospace fonts, etc. have opened up some interesting possibilities for creative abuse in a rich tradition that dates all the way back to manual typewriters, if not further. Previous entrants in this category are the venerable aalib and libcaca, and more recently there’s timg and others that use the U+2580 half-block symbol.

I wrote a small tool to further improve on this. It combines a range of Unicode symbols in an attempt to minimize the squared error of the output, and has plenty of bells and whistles besides. Check it out.

a silhouette of a person's head and shoulders, used as a default avatar
a silhouette of a person's head and shoulders, used as a default avatar
darix posted in English at

More fun with Freeipa and DNS: Funky records

After all the fun we had in part 1 of our FreeIPA + DNS series, we now come to a new chapter.

During the move of openSUSE to Let’s Encrypt we used the excellent tool from ssllabs to verify each server after we changed the certificate. One of our coworkers noted “Hey, why don’t you have a CAA record. It would give you an even better score”. CAA records allow the domain owner to specify which certificate authorities are allowed to create certificates for this domain. Which seems to be a nice benefit for little work. For a longer explanation see this blog post from Qualys.

the avatar of Federico Mena-Quintero

Madrid GNOME+Rust Hackfest, part 3 (conclusion)

The last code I wrote during the hackfest was the start of code generation for GObject interfaces. This is so that you can do

gobject_gen! {
    interface Foo {
        virtual fn frob(&self);
    }
}

and it will generate the appropriate FooIface like one would expect with the C versions of interfaces.

It turns out that this can share a lot of code from the existing code generator for classes: both classes and interfaces are "just virtual method tables", plus signals and properties, and classes can actually have per-instance fields and such. I started refactoring the code generator to allow this.

I also took a second look at how to present good error messages when the syn crate encounters a parse error. I need to sit down at home and experiment with this carefully.

Back home

I'm back home now, jetlagged but very happy that gnome-class is in a much more advanced a state than it was before the hackfest. I'm very thankful that practically everyone worked on it!

Also, thanks to Alberto and Natalia for hosting me at their apartment and showing me around Madrid, all while wrangling their adorable baby Mario. We had a lovely time on Saturday, and ate excellent food downtown.

Sponsored by the GNOME Foundation

Hosted by OpenShine

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

From novice to Community Manager

As of March 28th, 2018, my contract as Community Manager for LOPSA started. Indeed, of all the adventures I've had in openSUSE, this is the biggest yet. Many readers are probably wondering how my position in LOPSA can be considered an openSUSE adventure. In short, without openSUSE it almost certainly wouldn't have been possible.

The purpose of this article is twofold. First, as thanks to the openSUSE Community. And to invite the openSUSE Community to join me!

To join, sign up at https://lopsa.org/Join-or-Renew and apply the coupon-code 'OPENSUSE' at checkout. You can also email me directly at community@lopsa.org with any questions, comments, or suggestions. 

Thank you openSUSE Community!

I could go on at great length about the numerous valuable things I learned over the years of my participation in the openSUSE project. To do so, however, is beyond the scope of this article and would lead it to be entirely too verbose. That story is for a later time.

The openSUSE Community is full of so many wonderful people, full of energy, passion, skill, and good-will. Volunteering with openSUSE has afforded me some of my best and most memorable experiences in my adult life. It's been a privilege to work with such exceptional people, and my life has certainly been enriched by it.

To give full credits would be a long crawl, but a couple pivotal figures I feel must be mentioned. 
  • Drew Adams is a long-time friend whom I first met in meat-space at a friend's Birthday. He got me involved with the openSUSE Project, showing me I didn't need to be a programmer to contribute. As a current LOPSA board member, he alerted me to the Community Manager position, which thankfully due to the involvement he engaged me in so many years ago I qualified for. 
  • Bryen Yunashko was a member of the openSUSE board when I began participating in the Project. He encouraged me to represent openSUSE at the 2011 Novell Brainshare Expo in Salt Lake City. He also helped me to arrange the means to get there. At the time I remember arguing for my own lack of experience and knowledge against this. His vehement encouragement pushed me to go and showed me I had not been giving myself enough credit. 

Join me and the LOPSA Community!

LOPSA is a great community and organization already. My appointment as their first Community Manager signals an upshift to more dynamic expansion. Besides expanding our Membership and Chapters, we are working on deals and alliances to afford more benefits to our Members. Currently, I'm negotiating a number of initiatives with the Linux Professionals Institute (LPI). In conjunction with our newly revamped and relaunched Mentorship Program, we are angling to provide learning opportunities to advance our Member's careers. 

I want to invite you, my friends and peers to join me at LOPSA. Now is a very exciting time to get involved with huge developments on the horizon as we move forward to becoming a much more dynamic organization. I hope that we can inject a healthy dose of the openSUSE spirit into LOPSA and have a lot of fun

To join, sign up at https://lopsa.org/Join-or-Renew and apply the coupon-code 'OPENSUSE' at checkout. You can also email me directly at community@lopsa.org with any questions, comments, or suggestions. 

the avatar of Federico Mena-Quintero

Madrid GNOME+Rust Hackfest, part 2

Hacking on gnome-class continues apace!

Philippe updated our dependencies.

Alberto made the syntax for per-instance private structs more ergonomic, and then made that code nice and compact.

Martin improved our conversion from CamelCase to snake_case for code generation.

Daniel added initial support for GObject properties. This is not finished yet, but the initial parser and code generation is done.

Guillaume turned gir, the binding generator in gtk-rs, from a binary into a library crate. This will let us have all the GObject Introspection information for parent classes at compilation time.

Antoni has been working on a tricky problem. GTK+ structs that have bitfields do not get reconstructed correctly from the GObject Introspection information — Rust does not handle C bitfields yet. This has two implications. First, we lose some of the original struct fields in the generated bindings. Second, the sizes of the generated structs are not the same as the original C structs, so g_type_register_static() complains that one is trying to register an invalid class.

Yesterday we got as far as reading the amd64 and [ARM][arm] ABI manuals to see what the hell C compilers are supposed to do for laying out structs with bitfields. Most likely, we will have a temporary fix in gir's code generator so that it generates structs with the same layout as the C ones, with padding in place of the space for bitfields. Later we can remove this when rustc gets support for C bitfields.

I've been working on support for GObject interfaces. The basic parsing is done; I'm about to refactor the code generation so I can reuse the parts that fill vtables from classes.

Yesterday we went to the Madrid Rust Meetup, a regular meeting of rustaceans here. Martin talked about WebRender; I talked about refactoring C to port it to Rust, and then Alex talked about Rust's plans for 2018. Fun times.

Sponsored by the GNOME Foundation

Hosted by OpenShine

[arm]:

the avatar of Federico Mena-Quintero

Madrid GNOME+Rust Hackfest, part 1

I'm in Madrid since Monday, at the third GNOME+Rust hackfest! The OpenShine folks are kindly letting us use their offices, on the seventh floor of a building by the Cuatro Caminos roundabout.

I am very, very thankful that this time everyone seems to be working on developing gnome-class. It's a difficult project for me, and more brainpower is definitely welcome — all the indirection, type conversion, GObject obscurity, and procedural macro shenanigans definitely take a toll on oneself.

Gnome-class internals

Gnome-class internals on the whiteboard

I explained how gnome-class works to the rest of the hackfest attendees. I've been writing a document on gnome-class's internals, so the whiteboard was a whirlwind tour through it.

Error messages from the compiler

Antoni Boucher, the author of relm (a Rust crate to write GTK+ asynchronous widgets with an Elm-like model), explained to me how relm manages to present good error messages from the Rust compiler, when the user's code has mistakes. Right now this is in a very bad state in gnome-class: user errors within the invocation of the procedural macro get shown by the compiler as errors at the macro call, so you don't get line number information that is meaningful.

For a large part of the day we tried to refactor bits of gnome-class to do something similar. It is very slightly better now, but this really requires me to sit down calmly, at home, and to fully understand how relm does it and what changes are needed in the syn parser crate to make it easy to present good errors.

I think I'll continue this work at home, as there is a lot of source code to understand: the combinator parsers in syn, the error handling scheme in relm, and the peculiarities of gnome-class.

Further work during the hackfest

Other people working on gnome-class are adding support for GObject properties, inheritance from non-Rust classes, and improving the ergonomics of class-private structures.

I think I'll stop working on error messages for now, and focus instead on either supporting GTypeInterfaces, or completing support for type conversions for methods and signals.

Other happenings in Rust

Paolo Borelli has been porting RsvgState to Rust in librsvg. This is the big structure that holds all the CSS state for SVG elements. This is very meticulous work, and I'm thankful that Paolo is paying good attention to it. Soon we will have all the style machinery for librsvg in Rust, which will make it easier to use the selectors crate from Servo instead of libcroco, as the latter is unmaintained.

Food

Food in Madrid

Ah, Spanish food. We have been enjoying cheese, jamón, tortilla, pimientos, oxtail stews, natillas, café con leche...

Thanks

Thanks to OpenShine for hosting the hackfest, and to the GNOME Foundation for sponsoring my travel. And thanks for Alberto Ruiz for putting me up in his house!

Sponsored by the GNOME Foundation

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

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

BlankOn dalam Konferensi Libreoffice ID

2018-03-25 14.47.48

Ini kali kedua konferensi, saya g ikut jadi pembicara. Sebelumnya PyConf ID di PENS 19 Desember silam, hanya cuma submit judul dan tidak lolos (dan memang berharap tidak lolos). Acara di PENS Desember silam termasuk perjalanan ajaib, karena kali pertama saya nyoba bawa sepeda lipat naik pesawat.

Konferensi LibreOffice kemaren saya semacam penyusup, karena sedikit bikin acara dalam acara. Agenda terselubungnya adalah mengumpulkan pengembang-pengembang BlankOn dalam satu lokasi. Semacam BlanKopdar.

Perjalanan ke timur. Rencana awal berangkat naik bus, tapi beberapa jam menjelang berangkat, tiba-tiba malah beli tiket kereta Jayakarta. Dan dapat kabar, kereta jalur selatan asal dan menuju Bandung mengalami terlambat. Karena ada kereta anjlok. Dan Pak Didiet sudah misuh-misuh dari sore.

Untuk penginapan di Surabaya, sebulan sebelumnya saya sudah memesan kamar dormitory di Anjani B&B tidak jauh dari PENS. Memesan 3 kamar dengan total 10 tempat tidur. 2 kamar dengan 4 kasur. 1 kamar untuk tim openSUSE.ID dan 2 kamar untuk BlankOn. Cukup murah.

Saya sampai Surabaya Jumat pagi jam 5, dan langsung ke homestay. Di homestay sudah ada Pak Slamet dan Pak Kuriyanto yang sudah sampai Surabaya sejak Kamis.

Hari Jumat 23 Maret 2018

Setelah mandi dan sarapan, terus langsung ke PENS. Ketemu Pak Edwin. Pak Noor Azam, Pak Eric dan Pak Franklin Weng. Juga ketemu beberapa pendekar yang sebelumnya belum pernah ketemu. Ada Pak Sofyan, Pak Kifli, Pak Syamsul, yang saya baru pertama ketemu. (Maafkan bila ada yg terlupa tidak disebut, keterbatasan memori)

Agenda Jumat adalah Workhop LibreOffice bareng Pak Andika. Break Solat jumat, kemudian dilanjutkan seremonial antara Panitia, Pembicara, Pihak Kampus dan Sponsor sekalian makan siang.

2018-03-23 13.53.04

Setelah Ashar saya balik ke homestay lagi sekalian mengantar Pak Edwin. Sebelum balik, Pak Darian nitip, “Pak ntar malam ada undangan makan di Jenggala Resto”. Siap ndan. Pak Darian makin lemu, mungkin efek stress menjadi koordinator panitia lokal. Selama makan malam, banyak obrolan teknis dan non teknis. Beberapa merupakan temu kangen. Tidak tiap tahun bisa kopdar komunitas seperti ini.

Setelah selesai undangan makan malam, balik homestay. Kita mulai Hackathon di Homestay. Kita bagi tugas tiap-tiap orang, apa aja yang bisa dikerjakan.

BlanKopdar kali ini ada beberapa target yang ingin dikejar:
1. Tambal Paket, terutama terkait Sofware Center dan Appstream Data
2. Nutupin Tiket BlankOn Installer
3. Rilis Manokwari, sekalian mengundang Pak Fadlun buat Hackathon, sebagai kontributor Manokwari paling aktif saat ini.
4. Beberapa konfigurasi infra yang dibutuhkan

Dalam kenyataannya adalah zsync jahitan, install, debug, koding-koding, commit, rilis paket, masuk ke irgsh, jahit dan ulangi dari awal. Jam 1 pada mulai tepar, namun hasilnya produktif. Beberapa bug minor terdeteksi dan dapat ditambal.

Hari Pertama Konferensi, Sabtu 24 Maret 2018.

Tempat acara di Gedung Pasca Sarjana PENS lt. 6. Saya agak telat datang. Pak Slamet dan Tim sudah duluan untuk persiapan Stand Pameran. Saya baru jam 11 sampai PENS. Tak lama dapat telepon dari Pak Aftian. Ya salah satu target utama datang ke Surabaya ini memang untuk ketemu Pak Aftian sebagai supermen di Proyek BlankOn.

Saya banyak menghabiskan di Stand Pameran, ngadep laptop. Jam set 1 ketemu Pak Aftian. Sesi curhat dimulai, antara Pak Aftian, tim JK, Tim Riset dan saya. Membahas bagaimana appstream data bekerja. Paket ini paket wajib sebagai basisdata aplikasi yang bisa dipasang menggunakan GNOME Software Center. Kesulitannya adalah dokumentasi paket ini tidak sampai ke Pengembang Uluwatu. Diskusi berjalan lama dan Pak Herpiko sudah mendapat inspirasi. Siap-siap buat praktek.

Sebelum magrib saya balik homestay. Dan kata Panitia, ada undangan makan malam lagi di Ayam Bakar Primarasa. Kali ini tema obrolan di meja adalah proyek penerjemahan. Ada Pak Andika, Pak Kukuh, dan satu lagi Mbak dari Mozilla. Rencananya mau bikin Konferensi Translasi untuk memasukkan beberapa bahasa lokal ke LibC. Masih akan digodok dan semoga bukan wacana.

Balik ke homestay. Lanjut ke appstream-data bareng Pak Herpiko. Setelah coba-coba, jalan. dan paket yang ada direpo akan selesai diexport ke yml besok pagi. Pak Sofyan masih sibuk nambal BlankOn Installer. Saya tidur duluan.

Hari kedua konferensi, Minggu 25 Maret 2018.

Hari ini kepala masih penuh sama pertanyaan, Kapan rilis? Sudah ditodong pak haris ketika makan malam. Sayangnya tidak ada pemaket yang hadir di BlanKopdar dadakan ini. Ya sudah, belajar ngenter didampingi pak Aftian. Paket appstream-data Uluwatu harus sukses dimasak oleh irgsh.

Menjelang selesai acara akhirnya sukses masak di irgsh. Siap-siap jahit lagi. Saya pun balik ke homestay lagi. Sekalian nganter pak Edwin yang balik ke Jakarta penerbangan malam.

Saya termasuk lupa ngambil foto kegiatan. Baru sadar pas udah selesai, g ikut foto bareng :(. Sampai bertemu di Konferensi selanjutnya. Terimakasih untuk Panitia, Sponsor dan semua pihak atas undangan accara, kesempatan ngisi Stand Pameran dan tak lupa Jamuannya.

2018-03-24 21.53.02

April, Uluwatu Rilis!

Estu, yg masih utik-utik jahitan RC4.