Advent of code
Christmas is around the corner. On the 1st of December, we usually get a new advent calendar. It means that kids may get every day before Christmas some sweets. For programers brings the advent calendar each day new challenge. If we solve those challenges we will get a working mobile operating system under the Christmas tree.
The tasks will be published here:
1 – hello world
As a starter task, you should prepare your developer environment. Install Manjaro Linux into the Virtual machine and install the nemomobile packages on it. Install the image on an SD card and try it. Let us know if you managed to do that. Share your experience with us. Make some photos as proof.
2 – letter for Santa Claus
Santa Claus and his elves have already received some of your letters. Elves are doing everything to keep the position of Santa’s place secret. They avoid google or apple cloud services, but they’ve managed to get your letters into the phone.
Santa Claus is an elderly person and his sight is not what it used to be. Unfortunately, the Pinch to zoom function in the Gallery application doesn’t work smoothly and seamlessly as expected. Your task is to fix zoom problem and save Christmas, otherwise some children may not get their presents.
3 - how many days are left until Christmas?
Elves haven’t managed to finish the calendar application before the start of December. Now they are running around Santa’s village, confused and afraid that they won’t have time to wrap all the presents for the children. Santa cannot check if have been nice for the whole year. Some mighty hackers with skills in user interface design and programming may help. The day, month, and agenda view are already implemented in the glacier-calendar application. Same, the adding, removing, and updating of events is already possible. The part with the week and year overview is missing, and this is exactly your task.
4 – light up the candle
It is the second advent Sunday! It means that two candles on the Advent wreath should be shining.
The PinePhone kernel provides the sys interface to control the flashlight. However, it requires root privileges and it is device specific.
echo 1 > /sys/class/leds/white:flash/brightness
Nemomobile uses MCE. The abbreviation stands for Mode Control Entity and it was originally for Nokia computers. Next, there is NGFD which stands for Non-graphical feedback daemon. Those two are probably good interfaces to control flashlight LEDs from the end-user apps or glacier home.
5 - packaging presents from 9 to 5
Elves have to package a few quetta-packages until Christmas. It seems that improvement in automation may help with testing and may accelerate whole process.
While elves in Shenzhen are preparing packages with hardware inside, the programmers are working on PKGBUILDs. Every change in component requires a rebuild of a package. This takes elves a lot of time. There is already some package rebuild automation in Manjaro Linux GitLab and image rebuilds in github actions.
To makes task more difficult we are have three places to start with: Manjaro Gitlab (or as submodules), github/nemo-packaging, and/or Arch Linux.
Automation with GitHub Actions which produces images with package recompilation would be a big help for elves. Where to start unraveling this puzzle? This is task for Monday.
6 - no more letters for Santa?
It is maybe too late to send a letter by postal service. Many children may not write anything on the phone because the on-screen keyboard in Nemomobile is not showing for some reason. Our wish is to have such smooth experience as with Bluetooth keyboard.
Currently, we are using maliit-framework with maliit-nemo-keyboard and maliit-gtk-input-context. The nemo-keyboard package provides qml based keyboard adjusted for Nemo. It is based on Qt Quick Controls Nemo so it can keep nemo color scheme and font settings.
The keyboard it self is rendered as independent application over other applications. Application detects dimensions of keyboard and render its content according to that.
7 - Santa’s naughty or nice list
Santa is using the Glacier Contacts application to keep an eye on all the nice kids. Christmas magic allows him to manage all 8 billion people on the planet on his phone. Unfortunately, he cannot store photos directly in the contact, but only as a link to a file. He needs to clean up his gallery in order to be able to find all the presents, but he needs to keep faces in his contact list.
8 - Present for GTK Friends
Santa’s reindeer Comet thinks that GTK users should also be able to write their letters in GTK4-based applications. Nowadays, Phosh-based user interfaces are using Squeakboard, but Nemo is using Maliit. And the Maliit keyboard also supports GTK apps. Unfortunately, it doesn’t work with GTK4.
The current code is based on objects such as
GdkWindow, which is now
not accessible in GTK4. Other hints to solve that challenge are in
the GTK migration guide.
9 – Nemo, go home, you are drunk
Some people tend to over-celebrate during the Christmas period. The current home screen is not in the best shape, but it wasn’t made by people who were drunk. It does have some technical debt, as it is hard to verify that all use cases are working properly. Non-native applications don’t react to orientation at all, or they appear upside down, while native applications do not distinguish between portrait and landscape mode properly. Furthermore, the window thumbnails do not fit in the placeholders when rendered. Therefore, it is clear that orientation-related features need some care.
10 – Unlock Santa’s SIM Card to save Christmas
Santa Claus lost his SIM card, and the new one is locked by a PIN. He is not able to connect to the network due to a bug in glacier-pinquery. Santa wouldn’t be able to contact his elves and organize his Christmas Eve deliveries. Will some smart hacker find a fix?
The glacier-pinquery is using
libqofono-qt5 and ofono.
It seems that the
ofono/tests/list-modems script returns all properties correctly, and the property
contents is ‘pin’ as expected. The
QOfonoSimmanager, however, doesn’t show the property. The
QOfonoSimmanager doesn’t send a dbus query with
GetProperties at all. Further exploration shown that the
modem is not valid in that class for some reason.
11 - well played, Grinch
The Evil Elf Grinch is trying to disrupt Christmas by adding the string
/usr to random file URLs in the Glacier
Settings application. It is absurd that even the Glacier logo on the About page isn’t visible. The sabotage was
carried out ingeniously. The cause of this is still a mystery. This began roughly when Glacier Settings
amended the plug-in architecture. Initially,
plugins were defined by JSONs and the entry QML file, but after the redesign, plugins are defined by shared
objects. Now the main page of the application is loaded from the QRC resource, while plugins are loaded from
the file system. Using QRC itself does not appear to be having any effect.
12 – Sync your calendars
Time is running and everything needs to be planned precisely and carefully. All tasks for the elves are in the Glacier Calendar application. However, Santa’s wife is using Google Calendar, which cannot be easily synchronized to NemoMobile right now. Being out of sync with Mrs. Claus may end up in a disaster.
The calendar application is based on nemo-qml-plugin-calendar, which uses libaccount, mkcal, and kcalendarcore. Buteo-sync-plugins-social should allow synchronization with the Google account. The configuration dialog could possibly be implemented into glacier-settings-accounts, which uses nemo-qml-plugins-accounts, nemo-qml-plugins-signon, and signon-ui
13 – Join to Nemomobile, we have cookies.
Some people think that voice calls and SMS messages are essential features of the smartphone operating system. Receiving SMS messages works, but sending SMS or MMS does not. It is already 30 years since the first SMS was sent. It is probably stable enough to implement in Nemo.
I have been a good boy this year and I would like to ask for a special gift. Can you please help me fix all the NemoMobile issues that I have been having? I have left some cookies and milk out for you, and I hope you enjoy them when you come to visit.
Thank you for all that you do, and I can’t wait to see what you bring me this year.
Where should we start with the investigation? Nemo is using glacier-messages, which is based on telepathy-ofono. It also uses libofono-qt, which is a different project than libqofono. In the end, it uses onofo to control the modem.
14 - Jammed WiFi at the North Pole: Where is my wire?
Christmas is coming, and the North Pole is a busy place. Santa’s workshop is filled with the sounds of elves building toys and packing presents, but there’s one problem - the WiFi network is down. It seems that Santa’s storage, where hundreds of ESP8266 devices are stored, is causing radio interference and breaking the WiFi.
Santa needs a reliable connection to Nemo to be able to debug all the issues and make sure everything is running smoothly. Fortunately, fixing the USB networking may be the solution. Nemo is using usb-moded, which should provide the option to reconfigure the USB connection. There is a pinephone-setup-usb-network.sh script that may help us understand what is missing and get the USB connection working again.
15 - Buddy’s surprise in jeopardy
As Christmas approaches, the elves at the North Pole are busy preparing for the holiday season. One group of elves has a special project in mind: creating a calendar featuring Buddy, the lovable and mischievous elf from the movie “Elf”.
The elves have already prepared the costumes and props for each month of the calendar, and have planned out the poses for each picture. They are excited to capture the fun and playful spirit of Buddy, and to share the calendar with other elves and with Santa.
However, they are encountering a problem: the camera on their Pinephone is not working properly. They have tried using the Mexapixels application, but it is not well-suited to Nemo’s user experience. They have also attempted to use the QtMultimedia library and GStreamer pipeline to take pictures, but they are having difficulty configuring the pipeline.
Desperate for a solution, the elves turn to YOU, skilled hackers, for help. They know that the Pinephone’s camera requires a newer kernel, which is available in Manjaro Linux, and that the libcamera library may need to be patched in order to work properly with the QtMultimedia library. With your help, the elves hope to be able to configure the GStreamer pipeline and capture high-quality pictures for their calendar.
The 15th day of the advent of code challenge is all about helping the elves to configure the GStreamer pipeline and capture Full HD video using the Pinephone and Nemo. Can you rise to the challenge and save Christmas for the elves?
16 – Swipe in the loop to cheer Rudolph the reindeer
Rudolph the reindeer has always been passionate about improving the user experience, and he spends his free time tinkering with the Nemomobile operating system, trying to find ways to make it more intuitive and user-friendly. One of his favorite features was the ability to swipe on the home screen in both directions, but recently this feature stopped working and Rudolph is devastated. He refuses to light up his nose, which is a crucial part of his navigation system, until the issue is fixed.
The other reindeer are concerned about Rudolph and try to cheer him up, but nothing seems to work. They decide to brainstorm and come up with a solution to fix the issue with the swiping feature on the home screen. They believe that if they can get this feature working again, it will help Rudolph feel better and be able to focus on his navigation duties. You can help with fixing the issue. There were already some drafts of the fix, but it wasn’t working correctly on the phone.
17 - North pole calling?
Someone from the North Pole was calling us, but unfortunately we don’t know what they wanted because we couldn’t hear them. Please help us fix the issue. The phone calls feature seems to be both close and far away at the same time. Right now, the phone calls work but don’t transmit sound. It’s only possible with an unlocked SIM card.
The voice is not transmitted because the pulse audio profile is not switched. It
can be manually switched with the command
pactl set-card-profile 0 "Voice Call".
The ofono is controlled via dbus. The
/var/lib/environment/ofono/debug.conf may help to find the issue. There were some permissions in the settings to check:
<policy user="radio"> should probably be
<policy user="network">, and
/etc/ofono/dbusaccess.conf should allow use for the ‘wheel’ group:
* = deny; group(network) | group(wheel) = allow;
18 – Helping Santa Deliver on Time
With only one week left until Christmas, the elves are working at full speed to prepare for the holiday. However, they are running into a problem with their delivery tracking system. When they receive a notification from a delivery company via SMS, the lipstick compositor, which is responsible for processing notifications, is not opening the glacier-messages app as it should when the elf clicks on the notification. As a result, they are unable to open the message directly and view the tracking details. This is slowing down the work of the elves and could potentially cause serious issues with preparing all the presents in time. Is there a hacker out there who can help us track the related D-Bus messages and identify which part of the system is broken in order to fix it? We need your help to ensure a smooth Christmas for Santa and the elves!
19 - Fixing the Broken Vibration on Silent Night
It’s the week before Christmas and Santa Claus is having trouble with the vibration feature on his Nemomobile phone. He needs to be able to catch calls from the elves at the North Pole, but the phone isn’t vibrating when he receives them.
Rudolph the red-nosed reindeer, who has been working on the Nemomobile operating system, is trying to reproduce the issue using the glacier-testtool. He has narrowed the problem down to one of the following packages: ngfd, ngfd-plugin-native-vibrator, qt5-feedback-haptics-native-vibrator, and qt5-feedback. The Issue with loading of ngfd vibra plugin may help to understand where is a problem.
Despite Rudolph’s efforts, the vibration feature is still not working and Santa is at a loss for what to do. That’s where you come in.
Your task is to investigate the issue and come up with a solution that will get the vibration feature working again in time for Santa’s journey on Christmas Eve. You’ll need to dig into the code and see if you can find the root cause of the problem. Good luck!
20 - Stuck with Unwanted Gifts
As Christmas approaches, the elves at the North Pole have been using their Nemo mobile devices to prepare for the holiday season. However, they have run into a problem: they are unable to uninstall unwanted software packages, or “gifts”, from their devices.
The elves typically tried to uninstall gifts by pressing and holding on the gift’s icon on the home screen and choosing the option to uninstall on their previous devices. However, this method is not possible on Nemo mobile devices. The elves have also tried using the package manager to uninstall the gifts, but this is not working either.
As a result, the elves’ devices are becoming cluttered with gifts that they do not want or need, and they are running out of storage space. Santa and the elves also have a need to remove tracking apps to keep the exact location of the North Pole a secret. Can you help the elves fix this problem by implementing a way to uninstall unwanted gifts from the user interface of their Nemo mobile devices?
To solve this problem, the elves need a way to uninstall gifts from the user interface of their Nemo mobile devices. This could be done by implementing a user interface in the glacier-packagemanager application that allows the elves to uninstall gifts, or by implementing an interface between glacier-packagemanager and glacier-home to allow the elves to uninstall gifts in a familiar way.
The goal of the task is to help the elves find a solution to easily and quickly uninstall unwanted gifts from their Nemo mobile devices using the user interface.
21 - Disconnecting the Modem for a Smooth Journey
It’s the few days before Christmas and Santa Claus is getting ready for his annual journey around the world. As he packs his sleigh and checks his list twice, he realizes that he’ll be traveling through many different countries and the cost of roaming will be exorbitant.
To save money on roaming fees, Santa decides to turn off the internet connection on his Nemomobile phone while he’s traveling. However, when he tries to do so, he discovers that the option to disconnect the modem is not reacting as it should. No matter how many times he tries, the internet connection remains active.
Frustrated, Santa turns to the elves for help. They try their best to fix the problem, but they can’t seem to find a solution. They check the modem settings, the network settings, and even try restarting the phone, but nothing seems to work.
Your task is to investigate the issue and come up with a solution that will allow Santa to turn off the internet connection on his Nemomobile phone. You can try using the following hint to help you troubleshoot the problem:
qdbus --system org.ofono /quectelqmi_0 org.ofono.ConnectionManager.DeactivateAll
With your help, Santa will be able to save money on roaming fees and have a smooth journey around the world.
22 – Dancer’s troubles with jinglebells ringtone
Reindeer Dancer wants to use the jinglebells melody as a ringtone on his Nemo mobile device, but he finds the process of transferring files to and from the device using sshfs to be too complicated. He decides to try using the USB MTP feature instead, but unfortunately it doesn’t seem to be working.
To help Reindeer Dancer get the USB MTP feature working again, you’ll need to investigate the root cause of the issue and come up with a solution. You might need to check the logs of the relevant system component, the usb-moded daemon, to see if there are any error messages that could help identify the problem. You should also check the configuration of the system to ensure that it is set up correctly to support USB MTP. You may find some hints in other implementations, such as the pinephone-usb-gadget.sh script, that could help you troubleshoot the issue.
23 - Santa’s Missed Calls
It’s December 23rd, and Santa is getting ready for his big trip on Christmas Eve. He relies on his NemoMobile device to stay in touch with his elves and keep track of all his appointments. However, he has noticed that the call history page in the dialer application is not showing any calls. There should be a record of all the calls – outgoing, incoming, and most importantly, missed calls – but the page is completely blank.
Santa is worried that he might have missed important calls and messages from his elves, and he doesn’t want to risk missing any more. To help Santa get the call history page working again, you’ll need to investigate the root cause of the issue and come up with a solution. You might need to check the logs and code of the relevant system components, such as the commhistory-daemon, libcommhistory and ofono, to see if there are any error messages that could help identify the problem. You’ll also need to check the configuration of the system to ensure that it is set up correctly to show the call history in the dialer application. This could involve checking the settings for the dialer application, as well as the account settings for the device’s communication services.
As you troubleshoot the issue, you may find it helpful to use a simulation tool to show the D-Bus messages being sent.
24 – Santa’s Last-Minute Letters
It’s December 24th, and the elves at the North Pole are working hard to make sure everything is ready for Santa’s big journey. One of the elves has noticed that the email client on his Nemo mobile device is not working properly. He is unable to send or receive emails, including important letters from children to Santa. He’s not sure if the problem is with the account configuration or somewhere else.
To help the elves communicate with Santa and each other, you’ll need to investigate the root cause of the email client issue and come up with a solution that will get it working again. You might need to check the logs of the relevant system components, such as the email client and the email server, to see if there are any error messages that could help identify the problem. You’ll also need to check the configuration of the system to ensure that it is set up correctly to support the email client. If the problem is with the account configuration, you might try modifying the settings in glacier-settings-accounts.
Merry Christmas, and good luck!