Skip to main content

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

Announcing repo-checker for all

Adapted from announcement to opensuse-factory mailing list:

Ever since the deployment of the new repository checker, or repo-checker as you may be familiar, for Factory last year there have been a variety of requests (like this one opensuse-packaging) to utilize the tool locally. With the large amount of recent work done to handle arbitrary repository setups, instead of being tied to the staging workflow, this is now possible. This means devel projects, home projects, and openSUSE:Maintenance can also make use of the tool.

The tool is provided as an rpm package and is included in Leap and Tumbleweed, but to make use of this recent work version 20180821.fa39e68 or later is needed. Currently, that is only available from openSUSE:Tools, but will be in Tumbleweed shortly. See the openSUSE-release-tools README for installation instructions. The desired package in this case is openSUSE-release-tools-repo-checker.

A project has been prepared with an intentionally uninstallable package for demonstration. The following command can be used to review a project and print installation issues detected.

$ osrt-repo-checker --debug --dry project_only home:jberry:repo-checker
[D] no main-repo defined for home:jberry:repo-checker
[D] found chain to openSUSE:Factory/snapshot via openSUSE_Tumbleweed
[I] checking home:jberry:repo-checker/openSUSE_Tumbleweed@9a77541[2]
[I] mirroring home:jberry:repo-checker/openSUSE_Tumbleweed/x86_64
[I] mirroring openSUSE:Factory/snapshot/x86_64
[I] install check: start (ignore:False, whitelist:0, parse:False, no_filter:False)
[I] install check: failed
9a77541
## openSUSE_Tumbleweed/x86_64

### [install check & file conflicts](/package/view_file/home:jberry:repo-checker/00Meta/repo_checker.openSUSE_Tumbleweed)

<pre>
can't install uninstallable-monster-17-5.1.x86_64:
  nothing provides uninstallable-monster-child needed by uninstallable-monster-17-5.1.x86_64
</pre>

Note that the tool automatically selected the openSUSE_Tumbleweed repository since it builds against openSUSE:Factory/snapshot. The tool will default to selecting the first repository chain that builds against the afore mentioned or openSUSE:Factory/standard, but can be configured to use any repository.

All OSRT tools can be configured either locally or remotely via an OBS attribute with the local config taking priority. The local config is placed in the osc config file (either ~/.oscrc or ~/.config/osc/oscrc depending on your setup). Add a new section for the project in question (ex. [home:jberry:repo-checker]) and place the configuration in that section. The remote config is placed in the OSRT:Config attribute on the OBS project in question. For example, the demonstration project has configured the architecture whitelist. The format is the same for both locations.

To indicate the desired repository for review use the main-repo option. For example, one could set it as follows in the demonstration project.

main-repo = openSUSE_Leap_42.3

The benefit of the remote config is that it will apply to anyone using the tools instead of just your local run.

As mentioned above the list of architectures reviewed can also be controlled. For example, limiting to x86_64 and i586 can be done as follows.

repo_checker-arch-whitelist = x86_64 i586

There are several options available (see the code), but the only other one likely of interest is the no filter option (repo_checker-no-filter). The no filter option forces all problems to be included in the report instead of only those from the top layer in the repository stack. If one wanted to resolve all the problems in openSUSE:Factory a project with such fixes could be created and reviewed with the no filter option set to True in order to see what problems remain.

Do note that a local cache of rpm headers will be created in ~/.cache/opensuse-repo-checker which will take just over 2G for openSUSE:Factory/snapshot for x86_64 alone. You can delete the cache whenever, but be aware the disk space will be used.

Enjoy!

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

Taipei, openSUSE Asia Summit, Power of Community

 

When you’re planning a trip to Asia, Taipei probably isn’t be the first destination that comes to mind, as it’s often ignored in favor of more popular tourist spots like Tokyo or Hong Kong. But don’t ignore a trip to Taiwan’s big city — it’s an inexpensive, quirky metropolis with some of the best night markets in all of Asia. This is the second time i’ve visited Taipei for openSUSE Asia Summit.

FYI, The last openSUSE.Asia Summit was held in Tokyo, Japan.

Here we go. Me and the famous Mr. gecko!!

Thursday 9 Aug, Day -1 (Travel to Taiwan)

This time, 14 people came from Indonesia to join openSUSE Asia Summit 2018 in Taipei. We divided to 3 groups. One group flight from Juanda Surabaya (Darian, Aftian, Joko, Rania). One group at morning flight from CGK (Haris, Edwin, Estu). Last group with afternoon flight from CGK (Kukuh, Didiet, Rifki, Yan Arief) And 3 others people; Tonny, Iwan Tahari, Siska join a separate flight.

My group is the first team landing in Taiyuan Airport. At international arrival gate, Franklin Weng pick us up to hostel, but we decided to visited Frank office before going to Hostel. We meet Eric Sun and their team. Artistic team who create video for opening ODF Reader on Android. The video created using Blender Software.

22.00 we arrive at hostel. Many thanks to Frank for deliver us. :D. A few hours later, 2 more groups arrived at hostel. We are stay at same hostel. A comfort dormitory with share room. First Hostel, not far from Daan Park. Let call it a day and sleep all the night.

Friday 10 Aug, Day 0 (openSUSE Board and Community Meetup)

Today we plan join meetup at Taiwan SUSE Office after Friday Prayer. We visited Taiwan Grand Mosque, not far from Daan Park and our hostel. Before Friday Prayer, we take breakfast at Sakura Canteen (with Indonesian Food), next to Taiwan Grand Mosque. After praying, we going to SUSE office by walk. We came late to SUSE office, after lost direction. What a day!

Main discussion on SUSE Office

We meet openSUSE boards, SUSE Beijing and SUSE Taiwan, openSUSE Japan, openSUSE Taiwan; Ana Martinez and Simon, Sunny and team, Alcho and team, Takeyama and team, Sakana etc. You can watch meetup video from Sakana here.

Our discussion focus on some point:

  • How to prepare for next summit. We start create guideline for better preparation
  • How to engage more student to join GSOC for openSUSE Project. We plan to choose local coordinator each country to break gap between GSOC/Mentor Team from openSUSE and students from various county, especially Asia.
  • openSUSE Asia Summit album. Takeyama as part of Japan openSUSE team hand over album to Sakana, as local committee for current summit.

Lets finish foods and take photos!! After that, we moved to near building for tonight’s party. COSCUP Welcome Party at Zhangmen Brewing — Breeze Songgao Store. Before party, Libre Office Taiwan invited us for dinner. Sounds like Taiwan Cuisine. Yummy..

19.00 we join the party. Nice place with Taiwan 101 as background. At this party I meet many friend from another community. Some people which I have meet at GUADEC 2015, some people I have meet at GNOME.Asia or FOSSAsia. Let’s call it a Big Reunion.

21.00 we back to hostel by MRT. Let’s rest for tomorrow but wait this is 1 day before Summit and I should check my laptop for prepare my presentation.

Saturday 11 Aug, Day 1 (Opening of openSUSE Asia Summit 2018)

This year, summit is special because joint event between openSUSE Asia Summit x GNOME Asia Summit x COSCUP 2018.

Venue at Taiwan Tech, International Building. Lets register first. I get nice booklet. There are the details of schedule, abstract from speaker, sponsor and etc. You can download apps too for detail of this event just search COSCUP at Google Play.

8:50 to 9:05 opening by Board members (Ana & Simon) at Main Hall. After that I join talk Open Source Social Innovation by Audrey Tang, a civic hacker and Taiwan’s Digital Minister in charge of Social Entrepreneurship.

Then I join Nuritzi Sanchez at 306 Room, The year of the GNOME. Mbak Nur, talk about what happening at GNOME this year; include their move to Gitlab, anonymous donation, etc. Nice talk and very impressive presentation.

Next lunch and move to 304 room. After lunch I join Aftian and Masayuki Igawa. Aftian talk about Nusantara Metode Input at openSUSE. What is Aksara Nusantara and how write using Aksara Nusantara at openSUSE. Nice history.

Masayuki Igawara talk How Building Tiny Private openSUSE Cloud using openstack and small server (1U). Interesting talk and very nice presentation.

After that, I join to 201 room. Get last presentation from  Max Lin. I start to prepare because my turn after Max Lin. I bring presentation about How Jogja Become City of GNU/Linux User Friendly. You can find my slide at this slideshares and read my story about this in Bahasa Indonesia Thank you for all friend who join my class, anyway.

After finish my duty, I join main hall again to watch Ralf Flaxa Talk, The Bright future of SUSE and openSUSE. until drop. First day will be closed by BOF Session.

We parting on three team. Ahmad Haris and Surabaya team join BoF with Libre Office Taiwan at Frank Office. Edwin, Kukuh join openSUSE BOF, here Kukuh start presentation to bid next openSUSE Asia Summit at Bali Island, Indonesia, and Shobha Tyagi bid too for India Team. After watch Kukuh presentation, I join to GNOME BOF.

at GNOME BOF we have some point:

  • Max and Emily step down for Asia Committee after 10 years
  • Review for GNOME Asia Summit.
  • GSOC at GNOME

That’s all for 1st day of summit. Time to back and rest.

Sunday 12 Aug, Day 2 (openSUSE Asia Summit 2018)

I came late, spent morning for rest and catch up for my work. I join 201 room, Alcho with Introduction OBS, Kukuh with openSUSE Leap & Flatpak. After that watch Daniel Lin, Introduction to openSUSE Portus. Last, join 304 room, Yan Arief with, Having fun with KDE:create a Plasmoid.

We start moving to main hall again for the closing Summit.

After summit done. Kukuh, Edwin, Haris and me join COSCUP dinner with openSUSE Board, SUSE Team, GNOME Board, and local committee at Restaurant, using Bus. Try Tiawan Cuasine again. There’s so many dellicious food. Starting with sashimi;raw seafood, crab soup, fried crab, stinky tofu, fried rice, etc.

At 21.30 we came back to hostel.

Monday 13 Aug, Day 3 (One Day Trip)

Many Speaker join one day trip. We gather at Taipei Main Station. After that we visit National Palace Museum using bus from Taipei Main Station. See a lot of historical inheritance. After that, we are going to Taipei 101. Before going up, we get lunch at grand floor Taipei 101. Thanks for local committee to serve Halal Food. After lunch, see Taipei City from 88th floor Taipei 101 Observatory. We lucky can go out site at 92th floor because that day sky is very clear.

17.00 we move to Taipei City Mall, search for GUNDAM. Edwin, Haris and Tonny buy lot of them. Darian, Joko and Aftian leave first to Airport. They flight at tonight. 19.30 we move to Masalut Restaurant. Thanks Eric and Frank for the food. After dinner. Kukuh and team leave to Airport. They flight at tomorrow morning. So, Rania, Haris, Edwin, Iwan Tahari and me will be last team who leave Taipei.

Epilog

That all my story about my journey at Taipei. I’m happy can join this summit. I think, it is impossible for me get this experience without contribution to community. My contribution not about code, I help prepare local committee to held openSUSE Asia Summit as part of Asia Committee with Edwin, Sunny, Takeyama, Alcho and many other. Joko, Darian, Rania and Rifki; It will be their first time going abroad. What do you feel guys?

Many thank to openSUSE and Binar Academy for travel support. Thanks to Max Huang, Alcho and COSCUP Teams, also thanks to Franklin Weng and Eric Sun for warm welcome!

See you next year summit at Bali(maybe).

Estu

Other photo can be access at flicker groups:

PS: other story:

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

The unsung upsides of staying put

This week will be my last at Unruly; I’ll be moving on just shy of nine years from when I joined a very different company at the start of an enthralling journey.

Unruly’s grown from around a dozen people when I joined to hundreds, with the tech team growing proportionally. Team growth driven by needs arising from commercial success with revenue growth, investment, being acquired, and continued success today.

A constant over the past few years has been change. We had continued success partly because we successfully adapted products to rapidly changing commercial contexts. Success in turn instigated change that required more adaptation.

It’s been a privilege to be part of a company that was successful, affording me with many opportunities and remaining interesting for nine years; I’d like to think I’ve played some small part in making it so.

It’s almost a meme in tech that one “should” move on to a new organisation every 2 years to be successful and learn. Those who stick in the same place for longer are sometimes even judged as lacking ambition or being content with not learning new things. “Do they have 9 years of experience or one year of experience 9 times?” people quip.

There are, however, benefits of staying at the same company for an extended period of time that don’t get talked about a great deal.

Witness Tech Lifecycle

A cliched reaction when reading code is “who [what idiot] wrote this?”. It’s easy to blame problems on the previous administration. However, to do so is to miss a learning opportunity. If we followed Norm Kerth’s prime directive:

“Regardless of what we discover, we understand and truly believe that everyone did the best job they could, given what they knew at the time, their skills and abilities, the resources available, and the situation at hand.”

We could see code or systems that surprise us as an opportunity to understand what the context was that led people to build things in this way. Yes, perhaps they did not have the skill to see your “obviously better” solution. On the other hand maybe they had no idea that what they were building would be used for its current application. Maybe they had cost, or technological constraints that are now invisible to you.

Understanding the history of our software and systems can help us shape them into the future, avoid past mistakes, and improve our understanding of the domain at the current point in time.

It has been particularly interesting to see first hand how things play out with tech over an extended period of time, such as

  • How early design decisions enable or limit longevity
  • TDDed codebases supporting substantial change safely for many years
  • Hot new hyped tech becoming tech nobody wants to touch
  • Tech being used for drastically different purposes to what it was built for
  • Code that is habitable and is “lived-in” out of necessity remaining easily maintainable for many years
  • Highly reliable and valuable systems suffering from operational-underload. Having little need to change they fade from memory to the point that no-one knows how to make a change when it’s needed.
  • Seeing the industry change rate outpace the rate at which software can be refactored.

Sticking around at the same place for a while makes it possible to observe all this happening. Even if you haven’t had the luxury of being a witness to the history, it’s an interesting exercise to dig through artifacts such as code, systems, documents, as well as speaking to those who were there to understand how things got to where they are today.

Witness Lifecycle of Practices

It’s been interesting to observe the cycle of teams trying new things to work more effectively. It often goes something like

  1. Frustration with the ineffectiveness of an aspect of how the team is working
  2. Experiment proposed
  3. Adoption of new working practice
  4. Cargo culted as “how we work”
  5. The original intent is forgotten
  6. The practice changes as people copy what they observe imperfectly
  7. Context changes
  8. The practice is no longer helpful; we keep doing it anyway out of habit
  9. Repeat

It seems to be relatively easy to communicate traditions and rituals through time—the things that we do that can be observed by new colleagues.

It appears much harder to retain organisational memory of the intent behind practices. This can lead to practices being continued after they stop being useful, or being twisted into a semblance of the original practice that doesn’t achieve the same benefits.

This happens on trivial things e.g. a team found they were recording meetings just because other teams were doing so, even though no-one was listening to their recordings.

It also happens in more dangerous contexts—we observed our practice of continuous deployment drifting from a safe, tight feedback loop to a fire and forget strategy of hope. Newcomers had observed regular, confident deploys, but missed the checking and responding part of the feedback loops.

Even well documented XP practices are not immune to this: the practice of continuous integration becoming synonymous with tooling and then used to support isolation rather than integration. TDD becoming synonymous with writing tests first rather than a feedback loop—creating resistance to refactoring rather than enabling it.

Various things help teams pick up on these sort of problems and adapt, but it takes longer to recognise there’s a problem when intent has been forgotten.

Our teams have regular retrospectives with facilitators from other teams. We’ve encouraged blogging & speaking about the way we work, both internally and externally. We even have a team of coaches who work to help teams continuously improve.

None of these are sufficient. I think where we’ve been most effective at retaining both practices and understanding of intent is where there’s a clear narrative that can be retold to new people in the team. e.g. tales of wins originating from Gold Cards (20% time), help people to understand why they’re valuable.

Sticking in the same place for a while gives the luxury of remembering the original intent behind working practices. Even if you’re new to a team it’s worth questioning things the team is doing, rather than assuming there’s a good reason; try to understand the intent and see if it’s still achieving that today. Fresh eyes are valuable too.

Observe Teams Grow

Seeing the same organisation at different stages of growth is quite interesting. Observing practices that worked at one scale ceasing to be effective.

It’s easy to look at things that work at other organisations and assume that they’ll work where you are as well. However, it’s enlightening to see things that used to work in your own organisation cease to work because the context has changed.

Take deployment strategies: when all your users are within earshot you can maybe just shout that there’s going to be an outage and see if anyone objects. At a larger scale, zero-downtime deployments become important. When risk is higher, things like canary deploys and blue-green deployments become necessary (if you want to continue to deliver continuously).

Take communication: if the team is small and co-located perhaps everyone can know what’s going on through osmosis. As the team grows, more deliberate communication is needed to keep people informed. As scale increases, more and more effort is needed to distil meaning from the noise of information.

Safely Explore Different Roles

Sticking in one place for a while affords one the luxury of not having to learn a new tech stack, domain, and culture. There’s of course plenty to learn just to keep up with the pace of change within the same tech stack and domain, but enough remains constant to create space for other learning.

For me it created space to learn leadership skills, change management skills, people management skills, coaching skills, facilitation skills and more.

In a supportive organisation it may even be possible to try out different sorts of roles without risking being out of a job if it doesn’t work out. Charity Majors’ post on the engineer manager pendulum really resonates with me. I’ve enjoyed the the opportunity to switch between very different roles within product development over the past few years. Others have even switched between BizDev, Adops, Product, Data and Development roles.

The last few years

I’ve been privileged to work for a supportive company that has provided me with opportunities without hopping around. I’ve had the honour of working with many brilliant people from whom I’ve learnt a great deal.

In the last nine years I’ve made many mistakes, and lived to correct them. I’ve helped build products that failed, and helped turn them into a success. I’ve hurt people, and been forgiven. I’ve created conflicts, and resolved them. I’ve seen code become legacy, and salvaged it. I’ve caused outages, and recovered from them.

I’m not suggesting that everyone should stick at the same place for a long time, just that it can be fulfilling if you find yourself in a place as great as Unruly.

The post The unsung upsides of staying put appeared first on Benji's Blog.

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

GNOME Asia Summit 2018 – Taipei, Taiwan

GNOME Asia Summit 2018 this time happen in Taipei – Taiwan, at National Taiwan University of Science and Technology, August 11 – 12, 2018. This summit is co-host between openSUSE Asia Summit and COSCUP, so the summit title is COSCUP 2018 x openSUSE Asia Summit 2018 x GNOME Asia Summit 2018.

I arrived at Taipei at Thursday – August 9. Franklin Weng from LibreOffice Taiwan pickup me at airport and go stright to A+A Workshop. A+A Workshop was place that FOSS Community from Taiwan used for meetup every Thursday. Franklin introduce me to others. Then go to First Hostel to meet other friends from Indonesia who also attend this conference. Most of them from openSUSE Indonesia.

#0 day

On Friday, me and others have free time. We go to Taipei Grand Mosque to Jum’ah (Friday) Praying, then I meet my High School Friends who live in Taipei. Then I go to Microfocus office to meet other Indonesian and openSUSE Community. At night, have dinner with LibreOffice Community around Asia, LibreOffice Taiwan (Franklin Weng) paid for our food.

Then we go to welcome party for speaker and staff. My role for this event was part of international staff, so I have invitation for this with others. It’s good time to see each others and good night few. Few openSUSE and SUSE member discuss with me about potential held openSUSE Asia Summit and GNOME Asia Summit together next year.

Taipei 101 from roof top

#1 day

This summit was very crowd comparing to COSCUP 2016 (I became speaker at that time). On first day attended by 1364 participant and on second day attended by 784 participant. It has 15 parallel classes. Few of them are in English, especially from openSUSE and GNOME.

In this summit, I help to manage coordinating for web content, design, and also material design such as logo. Many friends from Taiwan and Indonesia contribute in this. I’m not become speaker this time, but I bring few students and they become speaker.

Empty Class

On first day, I’m joining Benjamin Berg class, he’s talking about “Supporting Miracast on the GNOME Desktop” which is very interesting for me comparing to others. Then “Desktop applications: life inside a sandbox” by David King then The Year of the GNOME by Nuritzi Sanchez. I spent few hours for discussion with other participant. Sharing mine and their activity about contributing to FOSS. And also I try to find praying room, and found it next conference building. So comfortable. The organizer also give me food that compatible with Halal Food, and I see Sobha and her student got vegetarian food. It’s prepared well.

At evening, we have official two official BoF (openSUSE and GNOME) and one unofficial BoF (LibreOffice). I was realy confuse which one that I must join. But I made decission, because I bring 3 students that contribute in LibreOffice this year, so I will help them to join LibreOffice BoF. Before we go, I told Kukuh to join openSUSE BoF (because he’s President of openSUSE Indonesia Community, but also GNOME Foundation Member), Estu and Siska join GNOME BoF (both of them also GNOME Foundation Member). But suddenly, Siska joining LibreOffice BoF.

In this BoF, we share experience between each person about contributing LibreOffice with different ways each of us. And also we have food here. This is my first time eat Sushi. 😀

Delicious or not?

#2 day

I was late going to venue, I’m not joining for keynote speaker session and directly going to class at break time. Starting my day with Bin Li’s class talking about Flatpak vs Snap. The class in Chinese but slide in English, still understanable for me. Then go to Iwan’s class which talking about Using Inkscape do Design Shoes.

After lunch I joining two Kukuh’s class, first about GNOME Recipes & Local Wisdom then openSUSE Leap & Flatpak.

Dinner at #2 day

In evening I invited by COSCUP to join dinner together other Indonesian going to Ximending to buy some souvenir. I was the same table with Max Huang, Ines, Sunny, Edwin Zakaria, Kukuh, Estu, Fuminobu Takeyama, Naruhiko Ogasawara, and Syuta Hashimoto. The food is good and many COSCUP staff here so we have lot of chat each others. They also prepare Muslim compatible food and also vegetarian food. Sunny help us to tell wich one that contain pork.

Sushi, Again!

#3 Day

This is last day of the event, I joining one day tour for speaker. Going to National Palace Meuseum and Taipei 101. I’m not excited because I’ve been here. NPM for second time and Taipei 101 for third time. But having together with other are good for me.

At Evening, Franklin and Eric invite all Indonesian to have dinner (again). IMHO, this is the best food that I have when visiting Taiwan this time.

Everybody Looks Tired

Notes

  1. I’m GNOME Foundation Member and The Document Foundation Member, also from openSUSE Indonesia Community. Because of this, I have many chance to have chat with others.
  2. There’s no GNOME Exhibition Booth this time
  3. I help 3 students going to this conference, they never going abroad. I hope after this they can share their experience to others to increase contributor in Indonesia
  4. I have meeting on second day with Max, Emily, Sammy and Haggen. Max stepdown from GNOME Asia Committee. Both Max and Emily handle lead GNOME Asia for decade. Now it’s me and Sammy.

Thanks to Max Huang and COSCUP Teams, also thanks to Franklin Weng and Eric Sun!

 

the avatar of Alberto Garcia

De Oruxmaps a GoogleEarth

Si usáis vuestro teléfono Android para crear y manejar waypoints casi seguro conocéis Oruxmaps, probablemente la mejor app para geolocalización y mapas (por aquí ya ha salido varias veces).
Oruxmaps genera una pequeña base de datos (formato SQLITE) donde archiva todos los registros generados. Normalmente esta base de datos se encuentra en /storage/sdcard/oruxmaps/tracklogs/oruxmaps.db.
Si necesitáis extraer waypoints de la BD para (por ejemplo) consultarlos en GoogleEarth, podéis generar un KML así:
echo "Name,Latitude,Longitude,Description" > actual.csv && sqlite3 oruxmapstracks.db "SELECT poiname || ',' || poilat || ',' || poilon || ',' || '\"' || poidescr || '\"' from pois where poifolder='actual'" >> actual.csv && gpsbabel -i unicsv -f actual.csv -o kml -F actual.kml
Esta línea genera un archivo CSV con los waypoints que tengo en la carpeta “actual” de Oruxmaps y a continuación lo convierte a KML con gpsbabel

En esta imagen podéis ver todas las tablas y campos de la BD de Oruxmaps.

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

Integration Testing Browser Extensions with Jest

This post has been migrated to my new blog that you can find here:

https://pureooze.com/blog/posts/2018-08-16-integration-testing-browser-extensions-with-jest/

Previously I wrote about how I became the maintainer of Saka, an open source browser extension that allows users to search through and load open tabs, browsing history and bookmarks. I talked about how I came up with a solution for unit testing the extension to give me confidence with code changes. I also mentioned that there were issues with integration testing that I ran into which made it difficult to test components that relied on browser APIs.

Today I am happy to report that I have found a way to perform integration testing on extensions and want to share it with you in this post. But before we go down that particular rabbit hole lets first discuss integration testing and why it is useful for validating software.

The Testing Trophy

https://twitter.com/kentcdodds/status/960723172591992832

Kent C. Dodds has written about something he calls the ‘Testing Trophy’. If you have heard of the testing pyramid before this is a similar concept — it’s a visualization of how you should prioritize the different types of testing in applications. The title of Kent’s post says it all:

Write tests. Not too many. Mostly integration.

Why does he say this? Kent notes the problem with unit tests is that they only prove individual units work as expected— they do not prove that the units can work together as a whole. Integration testing on the other hand proves that all the components in our project can actually work together as expected.

To read the rest of this post it can be found on my new blog here:

https://pureooze.com/blog/posts/2018-08-16-integration-testing-browser-extensions-with-jest/


Integration Testing Browser Extensions with Jest was originally published in Information & Technology on Medium, where people are continuing the conversation by highlighting and responding to this story.

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

openSUSE Asia Summit 2018, Jogja dan Binar dalam Dunia Kode Sumber Terbuka

openSUSE Asia Summit 2018 selesai digelar kemarin. Rangkaian acara total digelar sejak 8-13 Agustus di National Taiwan University of Science and Technology, Taipei. Tulisan saya dalam Bahasa Inggris dapat dibaca pada tautan ini.

Sebagai Summit kedua di Taiwan, openSUSE Asia Summit 2018 berlangsung sangat ramai, banyak kawan-kawan lama dari beberapa summit lainnya ikut hadir. Acara Summit kali ini lebih spesial karena merupakan kolaborasi tiga acara COSCUP X GNOME.Asia Summit X openSUSE Asia Summit.

Saya kebagian sesi hari pertama, Sabtu 11 Agustus pukul 14.30. Materi yang saya bawakan berjudul: How Jogja Become City of GNU/Linux User Friendly. Slide presentasi saya dapat diakses di tautan ini.

Dalam sesi ini, saya menceritakan sejarah komunitas GNU/Linux di Jogja ketika awal-awal saya berkenalan dengan GNU/Linux dalam rentang tahun 2009-2015 bahkan era sebelum saya datang ke Jogja.

Era komunitas GNU/Linux di Jogja mulai pudar sejak periode Startup mulai menggeliat di Jogja, sekitaran tahun 2015. Dalam catatan ini saya melihat bahwa teknologi berkode sumber terbuka tidak lagi dalam tatanan bagaimana berkenalan. Namun sudah menuju bagaimana teknologi ini dapat dimanfaatkan secara maksimal.

Di bagian akhir cerita, saya menceritakan Apa itu Binar Academy dan bagaimana Binar Academy memanfaatkan GNU/Linux dan teknologi bersumber kode terbuka lainnya dalam proses akademi. Beberapa hal malah merupakan keharusan menggunakan teknologi tersebut dalam proses akademi.

Beberapa teknologi yang kita gunakan di Binar Academy:

  • Sistem operasi, Ervien, salah satu mentor dan saya menggunakan opensuse 42.3 dalam keseharian, beberapa mentor lainnya menggunakan Ubuntu 16.04 dan Linux Mint.
  • Bahasa pemograman, Ruby on Rails, Vue JS, Kontlin,
  • Metabase, Mattermost
  • Database, mysql, postgresql
  • Webserver, NGINX
  • AWS Platform, Heroku
  • Gitlab dan Gitlab-CI

Harapannya adalah semakin banyak orang, lembaga, perusahaan yang memanfaatkan GNU/Linux dan teknologi bersumber kode terbuka lainnya.

Terimakasih untuk openSUSE dan Binar Academy yang menjadi sponsor perjalanan saya.

Estu

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

Introducing openSUSE to Vocational High School Students

Friday, August 10. I got info from my boss that our company invited to give a workshop presentation about Linux in one of the colleges in Bekasi. STMIK Bani Saleh Bekasi.

STMIK Bani Saleh Bekasi is the campus where I studying. Indeed, my campus has a relationship with our company. They are hosting their web and system in our company and we are a consultant for their infrastructure.  So they invite our company to give a presentation about Linux and open a booth to showing our product.

But the workshop will be held on the next day. What the hell, it’s really unexpectedly. I think. The problem is we have to create a presentation just on one night.

The main aim of this workshop is how to utilize VPN remote to site using PPTP on Linux and promoting STMIK Bani Saleh to Vocational High School students in Bekasi. VPN server is installed using Debian Linux. So, the first thing I guess. It’s Debian and technical workshop that have a student audience.

But, I’m an openSUSE user and openSUSE contributor on Indonesia. So, I ask them how if I bring openSUSE to my presentation in the middle of Debian workshop :-D.

They agree. So, I bring openSUSE and Open Source software for my workshop. I didn’t bring a technical workshop. I will tell a story to the audience how we can have a lot of fun using Open Source Software.

So, I explain to them How we can travel around the world because of Open Source Software. How we can get friends around the world because of it. And i focused the Open Source Software to openSUSE.

First, I introducing about openSUSE. How we can contribute to openSUSE, telling about openSUSE community and the summit, and many more.

one of my presentation slide in Bahasa

I just have a short time to present it. So, i did not have time to promote about Google Summer of Code.

But, We have a lot of fun at the workshop. Although it’s a Debian workshop. Because the world is not separate from what distro that we use.

The post Introducing openSUSE to Vocational High School Students appeared first on dhenandi.com.

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

Dual head? Dual Seat! Two Users at One Computer at the Same Time!

Dual Head or Multi Monitor

If you have two monitors attached to your computer then the setup is called dual head, the generic term for any number of monitors is multi-monitor.

This setup useful if a single monitor is not enough for you to see all needed windows at once. But in this setup both monitors can be used only one person at the same time.

Dual Seat or Multi Seat

If you have two monitors what about attaching one more keyboard and mouse and “split” the computer and have independent sessions for each user? That setup is called dual seat or multi seat in general.

Linux is a multi user systems from the very beginning, but normally these users either work remotely or they simply share one seat and need to cooperate who will use the computer when.

Hardware

For this multi seat solution you need a separate graphics adapter for each seat. Fortunately to save some money you can combine discrete graphics cards with an integrated one.

If you use an integrated card you might need to enable the multi graphics support in BIOS because usually when a discrete graphics card is found the integrated one is automatically disabled.

BIOS settings

:information_source: This option is vendor dependant, check your mainboard manual.

Linux

I wanted to configure a multi seat in the past, but it was really complicated. I would have to tweak the X.org config manually and there were lots of hacks to make it work.

But actually it turned out that using a modern Linux distribution like openSUSE Leap 15.0 makes this very easy!

Using the loginctl Tool

As in almost all modern Linux distributions also in the openSUSE Leap 15.0 the console is managed by the systemd login manager. To interact with it from the command line you can use a tool called loginctl.

It can handle sessions, seats and users. Let’s see which seats are defined by default:

# loginctl list-seats
SEAT            
seat0           

1 seats listed.

Now we can list all hardware devices assigned to the default seat:

# loginctl seat-status seat0 
seat0
	Sessions: *2
	 Devices:
		  ├─/sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input5
		  │ input:input5 "Power Button"
		  ├─/sys/device…LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input4
		  │ input:input4 "Power Button"
		  ├─/sys/devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1
		  │ usb:usb1
		  ├─/sys/devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb2
		  │ usb:usb2
		  ├─/sys/device…2:00.1/ata2/host1/target1:0:0/1:0:0:0/block/sr0
		  │ block:sr0
		  ├─/sys/device…ata2/host1/target1:0:0/1:0:0:0/scsi_generic/sg1
		  │ scsi_generic:sg1
		  ├─/sys/device…1.3/0000:02:00.2/0000:03:04.0/0000:05:00.0/usb4
		  │ usb:usb4
		  ├─/sys/devices/pci0000:00/0000:00:03.1/0000:09:00.0/drm/card0
		  │ [MASTER] drm:card0
		  │ ├─/sys/device…000:00:03.1/0000:09:00.0/drm/card0/card0-DP-1
		  │ │ [MASTER] drm:card0-DP-1
		  │ ├─/sys/device…:00:03.1/0000:09:00.0/drm/card0/card0-DVI-D-1
		  │ │ [MASTER] drm:card0-DVI-D-1
		  │ └─/sys/device…00:03.1/0000:09:00.0/drm/card0/card0-HDMI-A-1
		  │   [MASTER] drm:card0-HDMI-A-1
		  ├─/sys/device…000:00/0000:00:03.1/0000:09:00.0/drm/renderD128
		  │ drm:renderD128
		  ├─/sys/device…i0000:00/0000:00:03.1/0000:09:00.0/graphics/fb0
		  │ [MASTER] graphics:fb0 "amdgpudrmfb"
...

The list will be very likely long as it contains all devices present in the system. Obviously all devices are currently assigned to this single seat.

Creating a New Seat

Each seat needs a master (main) device. In the list you should see the graphics card devices marked with the [MASTER] tag.

Adding Output Device

Each graphics card should have two devices, drm:card<number> and graphics:fb<number>. To create a new seat simply move these two master devices to the new seat. Use the loginctl attach seat <path> command, copy and paste the full device path from the previous list command:

# loginctl attach seat1 /sys/devices/pci0000:00/0000:00:03.2/0000:0a:00.0/graphics/fb1
# loginctl attach seat1 /sys/devices/pci0000:00/0000:00:03.2/0000:0a:00.0/drm/renderD129

You can check that the new seat is defined properly and contains the specified devices:

# loginctl seat-status seat1
seat1
        Sessions: *1
         Devices:
                  ├─/sys/devices/pci0000:00/0000:00:03.2/0000:0a:00.0/drm/card1
                  │ [MASTER] drm:card1
                  │ ├─/sys/device…000:00:03.2/0000:0a:00.0/drm/card1/card1-DP-2
                  │ │ [MASTER] drm:card1-DP-2
                  │ ├─/sys/device…:00:03.2/0000:0a:00.0/drm/card1/card1-DVI-D-2
                  │ │ [MASTER] drm:card1-DVI-D-2
                  │ └─/sys/device…00:03.2/0000:0a:00.0/drm/card1/card1-HDMI-A-2
                  │   [MASTER] drm:card1-HDMI-A-2
                  ├─/sys/device…000:00/0000:00:03.2/0000:0a:00.0/drm/renderD129
                  │ drm:renderD129
                  └─/sys/device…i0000:00/0000:00:03.2/0000:0a:00.0/graphics/fb1
                    [MASTER] graphics:fb1 "amdgpudrmfb"

Now I’d suggest rebooting the system. After reboot you should see the login screen on the both monitors. (BTW I’m using the default KDE SDDM login manager, I do not know if the other login managers support multi seat…)

Adding Input Devices

Now we need to assign also the input devices - a keyboard and a mouse. Find the keyboard and the mouse devices in the loginctl seat-status seat0 output and move them to the other seat with the loginctl attach seat1 <path> command.

It is easy if you use different keyboard and mouse models for each seat. If you use the same models then you cannot easily distinguish between the devices. In that case I suggest using the simple trial-and-error approach, just move a device to the other seat and test if it is routed to the correct monitor. If not then simply move it back to seat0 and move the other device to seat1. You do not need to reboot, you can test it immediately.

:information_source: Multimedia keyboards might have several devices, do not forget to move them all.

And That’s it!

And that’s it! Now monitor should behave as an independent login screen with separate mouse and keyboard devices. Enjoy! :smile:

The Data Persistence

The configuration is persistent, the attached devices are remembered and automatically set after reboot. You do not need to reassign the devices after each reboot.

The Drawback

There is one drawback of enabling the multi seat feature - the multi head setup does not work anymore.

To make it work back you would have to reconnect the monitors back to the same card and move the assigned devices back to the original seat. That’s quite annoying but you could possibly automate the monitor connection by an automatic HDMI switch if you use HDMI (or DVI) for connecting the monitors and some scripting…

The Use Case: Minecraft! :video_game:

With this approach you can avoid arguing who will play Minecraft. Since now you can run two Minecraft instances in separate sessions at once! :tada:

Two Minecraft instances at one computer!

It’s not obvious from the picture, but there is only one computer below the table!

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

zypper-upgraderepo-plugin is here

zypper-upgraderepo-plugin adds to zypper the ability to check the repository URLs either for the current version or the next release, and upgrade them all at once in order to upgrade the whole system from command line.

This tool started as a personal project when a day I was in the need to upgrade my distro quicker than using a traditional ISO image, Zypper was the right tool but I got a little stuck when I had to handle repositories: some of them were not yet upgraded, others changed slightly in the URL path.

Who knows how to Bash the problem is not exactly a nightmare, and so I did until I needed to make a step further.

The result is zypper-upgraderepo Ruby gem which can be integrated as a zypper plugin just installing the zypper-upgraderepo-plugin package.

Installing zypper-upgraderepo-plugin

Installing zypper-upgraderepo-plugin is as easy as:

  1. Adding my repo:
    sudo zypper ar https://download.opensuse.org/repositories/home:/FabioMux/openSUSE_Leap_42.3/home:FabioMux.repo
  2. Install the package:
    sudo zypper in zypper-upgraderepo-plugin

How to use it

Sometime we want to know the status of current repositories, the command zypper ref does a similar job but it is primarily intended to update the repository’s data and that slow down a bit the whole process.
Instead we can type:

$ zypper upgraderepo --check-current

To know whether or not all the available repositories are upgrade-ready:

$ zypper upgraderepo --check-next


As you can see from the example above all the enabled repositories are ready to upgrade except for the OSS repo which has a slightly different URL.

# The URL used in the openSUSE Leap 42.3
http://download.opensuse.org/distribution/leap/42.3/repo/oss/suse/
# The suggested one for openSUSE Leap 15.0
http://download.opensuse.org/distribution/leap/15.0/repo/oss/

Let’s try again overriding the URL without make any real change:

$ zypper upgraderepo --check-next \
--override-url 8,http://download.opensuse.org/distribution/leap/15.0/repo/oss/

Once everything is ok, and after performed a backup including all the repositories, it’s time to upgrade all the repository at once:

$ sudo zypper upgraderepo --upgrade \
--override-url 8,http://download.opensuse.org/distribution/leap/15.0/repo/oss/

Conclusions

That’s all with the basic commands, more information is available in the wiki page of zypper-upgraderepo gem where all the commands are intended with the only use of the gem, but installing the plugin they are also available as zypper subcommands like shown above, also a man page is available as

$ zypper help upgraderepo