Search This Blog

Friday, September 30, 2011

Solid Sprint: day 0

Like a good C/C++ programmer I start to count from zero :-) Just to finish day -1 (Sep 28): after a nap to get over the sleepy feeling I met Alex Fiestas, Alex's brother, Raphael (ereslibre), and a friend of theirs to have dinner. I must say I really like Spanish food. After the dinner I and Alex were going back to the hotel and Ilia Kats approached us in the subway wagon. I have been talking to Ilia for several months but that was the first time we met, it was a good surprise. Unfortunately for us the subway closed before we could switch to the final line, so we went to the hotel by taxi. End of day -1 :-)

Day 0: Since the usability master (Björn) would arrived only at afternoon, Ilia and I tried to fix this annoying bug in Plasma NM in the meantime. In the end we found that it is an upstream bug in Qt, Ilia managed to create a workaround to prevent it. It is not perfect but since Qt4 seems "frozen" we do not see much hope to have this bug fixed, so the workaround is going to stay until we move to Qt5.

Björn arrived at afternoon as expected, unfortunately some guys did not make it to the sprint, but that is ok. Dario almost lost the sprint, but he is here and as always killing bugs like Rambo kills his enemies :-) During the rest of the day (and almost all night) and started the usability study on Plasma NM. I will not spoil so you will have to wait to see the results when we start to commit the changes.

That is all for day 0 :-D

Wednesday, September 28, 2011

Solid Sprint: day -1

Finally I got to the hotel room in Madrid, I think it is the same room I stayed last year by the view on the window. I took me 20 hours and 20 minutes of traveling to get here. My calculations was wrong by ~40 minutes (~3%). I need to improve this next time hehe. Now I need to rest (25 hours without sleeping + jet lag). Metal workers, see ya tomorrow, except for Rodrigo Belem (another Brazilian) and Ilia Kats, who must be arriving at any time here at the hotel.

Tuesday, September 27, 2011

Solid Sprint: day -2

Ok, ok, the sprint has not started yet. I am still here at home packing my stuff, checking the last details for the trip and writing the post :-D. That will be long trip until Madrid. Just to get to the airport it will take me three hours and two buses, more ~10 hours flying to Lisbon, about one and a half hour more to reach Madrid and one more hour to get to the hotel in Madrid by underground/subway. If I add the time I am going to sit waiting for buses, flights and underground it will be almost 21 hours of traveling. Last year it took me more than that because I had to wait five hours in São Paulo's airport in Brasil before flying to Madrid, now I am going to wait two hours in Lisbon.

If you follow my commits you have noticed they have been more intense in the last week. I wanted to push some fixes now and concentrate on the usability changes during the sprint. Am I exaggerating? No, there are plenty of problems to solve and things to implement in Plasma NM and also in other parts of KDE's network management too, so there will still be much to do after the sprint. Network management is not easy to work on, when you try to fix something sometimes you find another bug in the way, you try to fix that one, and another one appears. That was what happened to me and why I did so many commits in the last week :-) There is still one fix left that I wanted to do before the trip but will have to wait until I come back from the sprint. Or maybe I can fix it during all those waiting hours until Madrid.

Today I have also fixed one problem in kded's networkstatus module: it does not work if you start a KDE session with NM stopped. It also stops working if you restarts NM because it did not watch for NM DBus service appearing and disappearing, now it does :-) It seems there is another problem in networkstatus module, more precisely in ntrack support. Since I have never used ntrack and, of course, do not have it installed, I could not test if my diagnostic is really correct.

Well, the week is still starting and serveral things have happened already. It looks like a great week ahead :-D

Saturday, September 17, 2011

Plasma NM: usability changes

Solid Sprint is going to start in less than two weeks in Madrid. This time one of the attendees (Björn Balazs) is an usability guy, so we are going to talk about usability problems in the software we maintain, in my case Plasma NM. Some days ago Björn asked about the points we (the other attendees) would like to discuss during the sprint. Well, I already sent my list, which is not that extense but is not short either:

In the last months I have received several complaints about Plasma NM user interface. I have also thought about what I could change and today I decided to implement some of my thoughts in my private Plasma NM repository. What you are going to see is not a mock up :-)

For those who do not believe that is not a mock up, here is the screencast:

Those changes are not final. I am going to discuss them with Björn Balazs and the other Solid guys before commiting anything. This is post is to present and ask comments about them. Do not expect any GUI changes in Plasma NM before the end of the sprint next month.

Update: answering some questions:

  • @damian, 1. the "Enable" checkboxes are there not only for users clicking on them but also for NetworkManager daemon  to inform which features are enabled. NM can disable network, wireless and mobile brodband without user intervention, if I move the checkboxes to the interfaces tab then users will have to go to interfaces tab to see why there is no connection listed when wireless is disabled for instance. Also, mobile broadband is always disabed by default by NM daemon, so for mobile broadband connections checking the "Enable mobile broadband" checkbox is required. Well, actually if you click on the mobile broadband connection it will enable mobile broadband, so it is not required :-) But if the modem takes too much time to active itself the connection can times out and some modems, like my Sony MD300, can be activated only once by NM. After that I have to remove it from the USB port and plug it again to make another connection. In resume: keeping the checkboxes in the connection list tab saves one click in some situations. 2. I like the fact that I can access the details tab by clicking on one active connection, specially because now there is no visible way to associate one interface to one connection. Think about people who have more than one instance of the same interface type. I have a 3G modem and when I plug my cellphone I will have a second gsm interface. I can connect the same Gsm connection using either device. In this case it is usefull to get to the interface details by clicking on the connection instead of first figuring out which network interface is activated and then clicking on it. 3. I like the "Show More" button (now "Show all" checkbox) and it is going to stay there as long as I am working on Plasma NM :-P. The item is required because of the way NM work. I explain: after creating a hidden wifi connection it HAS to be activated so that NM uses wpa_supplicant's ap_scan=2 option to search for it. NM uses ap_scan=1 by default, do not ask me why, maybe to save power or to be faster, I do not know. When using ap_scan=1 wpa_supplicant does not search for hidden networks, with ap_scan=2 it does. So I need a way to ask the ssid and activate the hidden network after it has been created. It is not a normal connection because normal connections do have to be activated right after creating them. Maybe adding a new "Hidden" checkbox in wireless dialog is better, but since there are two bug entries about the complexity of creating connections I am not willing to add more widgets to connection dialogs.
  • @Anonymous, I will change Plasma NM to save the "Show More" state across restarts. Maybe I can add a option in "Manage Connections" -> Other to always show all connections. When it is activated I can hide the "Show More" button / "Show all" checkbox. "when the mouse cursor is floating over a interface of the list it should change the line of the video that says 'Connected to xxxxxxx' with 'Click to disable' if the interface is enabled & 'Click to enable' if the interface is disabled." It is good suggestion, I will see what I can do. Just keep in mind that wired ethernet cannot be enable/disabled in NM, only wireless and mobile broadband can. The "mini-icon" (disconnect button) on the interface item only appears if there is one activated connection using that interface. I do not see a need to change colors to indicate the connection state. Also, keep in mind that there are daltonian people (like me) out there who have difficulty to distinguish colors, specially in tiny buttons like that one. I prefer to show/hide the tiny button, it is more visible. OBS: although I am daltonian I can distinguish between red and green, there are several levels of daltonism, luckily for me mine is not that severe.
  • @Srk9, unfortunately NM's API does not provide means to change the default route from one network interface to another, so it is not possible for me to implement your suggestion.
  • @Anonymous, yes, there are some artifacts in Plasma NM GUI, but they are not as bad as in the youtube video, which was recorded at 15 frames per second by the way. I will use 30 fps the next time I do a screencast, I think youtube trancodes the video to 15 fps, right? Some of the "artifacts" in the video are actually Plasma effects, they look much better in real time :-). In fact, the only two artifacts that really happens in the video happen when changing the network interface used in interface details tab and when clicking on the "Show all" checkbox. The connection list is a Plasma::ScrollWidget class, which adds all items first before creating the vertical scrollbar and shrinking the visible part of the list. That is a bug (or whatever you want to call it) in Plasma::ScrollWidget triggered by the fact that all QGraphicsWidget (Plasma's widget base class) are shown by default, in contrast to the hidden default used in QWidget class used by most KDE's software.
  • @emilsedgh, allowing to select which interface details to show is already a pending implementation. You can enable notifications to show the connection state, just to go Manage Connections (or system settings -> Network Settings) -> Other -> Configure Notifications and enable "Establishing Network Connection" and "Network Connection Succeed". You can enable "Interface changed state" instead but it is more "verbose". The system tray icon also shows the connection state change, but I agree that it is really subtle.
  • @Anonymous, how is it more complicated? Main window is smaller and there are less widgets in it.
  • @Anthony Vital, thanks for the tip about Plasma::ScrollWidget, it works great. One less artifact in Plasma NM GUI :-)
  • @Anonymous, I kind of like the kickoff plasmoid.
  • @yoda, some people do not like the "Show More" button, they have difficulty to figure out what it really does :-/ So I am trying to keep it there without drawing to much attention. Plasma allows more entries in right click menu icon, I can add some more items there. I just do not know if I can add QAction's there like you suggested. Kmix is not a plasmoid so it is able to add QAction's at will, I just need to figure out if plasmoids can do the same. Update Sep 20: it can, just return the QAction list in contextualActions(). "how I'm supposed to see details of other interface?" For now it works like you described, you need to go back to the Interfaces tab and click on the second interface to see its details. I like the mockup you created, I will join the Details tab to the Interface tab like you suggested. Maybe not exactly like in the mockup but I will. I have just commited to branch nm09 the change to show interface details instead of deactivating the connection when clicking on an active connection. That already works in the youtube video and since it does not change the GUI I do not see why not commiting it now.
  • @Aaron J. Seigo, thanks, I am glad to know people like the changes :-) I plan to save the "Show all" checkox state between restarts. When ready I can change the "Show all" default to enabled and the connection list will be completely visible. Those, like me, who prefer "Show all" unchecked will need to change it only once. I think that is the best solution.
  • @BajK, I am taking the oportunity to talk in person to someone with skills in usability to assist me :-) Well, this commit partially fix your problem: the plasmoid will be shown poped up, but I do not know exactly why the background still keeps the icon's dimensions instead of the popup's dimensions. I will try to figure out why. Update Sep 20: problem fixed.

Wednesday, September 7, 2011

Common errors when migrating to or using NM-0.9

I have seen people having problems to migrate from NetworkManager-0.8 to 0.9, here are some tips to solve those problems:

  • NM-0.9 requires wpa_supplicant-0.8. You need to add the entries  CONFIG_CTRL_IFACE_DBUS=y, CONFIG_CTRL_IFACE_DBUS_NEW=y and CONFIG_CTRL_IFACE_DBUS_INTRO=y to wpa_supplicant's .config file before compiling it. Alternatively, you can patch wpa_supplicant-0.7.3 to make it support the new DBus API, which is what NM-0.9 really requires.
  • You cannot have more than one instance of wpa_supplicant running or NM's wifi support will be unstable or even not work. wicd, ifplugd, net_applet are some programs that also start wpa_supplicant, which can cause this problem.
  • wpa_supplicant have to be started with the '-u' parameter (enable DBus support) or NM's wifi support will not work at all. nmcli will return "unmanaged" for wifi interfaces when this happens.
  • NM supports most network interfaces types nowadays, you do not need to mix it with other network manager software (wicd, net_applet, ifplugd, etc). Most of the time those programs will conflict with NM and things may not work. So choose one of them and disable the others.
  • Some distributions disables NM support for one or more specific network interfaces. If you are migrating from one of the network manager software cited in the last item you must make sure NM is enabled to manage your network interfaces. Usually the file /etc/network/interfaces is reponsable for this configuration. In Gentoo, the distribution I use, the file is /etc/conf.d/net.
  • There are two versions of Plasma NM, one for NM-0.8 and other for NM-0.9. Of course, you must use the correct one for you NM installation.
  • If the message "We need NetworkManager version >= x.y.z to work, found ''" appears in Plasma NM's main window that probably means NM is not running (the version found is an empty string).
  • Make sure to use the correct Solid's NM backend for your network manager software. Solid supports NetworkManager 0.7/0.8, NetworkManager 0.9 and Wicd). Go to systemsettings -> Information Sources and make sure you are using the NetworkManager-0.9 backend.
  • There is a "Fake NetworkManager-0.9" backend introduced in KDE SC 4.7.1. That backend provides network status information to kdelibs's Solid::Networking::status() call and only network status information, which is not enough to make Plasmsa NM/nm09 work. If that backend is listed as the first in systemsettings -> Information Sources you must change the configuration to make NetworkManager-0.9 backend to be the first. The reason to introduce that backend in 4.7.1 is because kdelib's Solid::Networking API is not able to use the NM backend in Plasma NM/nm09 repository (binary compatiliby issues).
  • The shared connection feature does not work if you are running a name server (bind, dnsmasq) or a dhcp server (dhcpd) in the same computer. That is because NM needs to start dnsmasq with the correct parameters, since dnsmasq is a name server it needs to bind to port 53. If there is another process bound to that port (bind or another dnsmasq instance) dnsmasq is going to fail to start. dnasmasq is also a dhcp server, running two dhcp servers in the same computer can cause conflicts that can prevent the shared connection to work properly.
  • Sometimes reloading the wifi driver can make shared connections work.

Tuesday, September 6, 2011

Plasma NM: bugs closed after 4.7.0

Now that NetworkManager 0.9.0 was released it is the perfect time to deprecate Plasma NM for NM-0.8.x, which resides in our branch master. There are some bugs in Plasma NM that only happen with NM-0.8 and since our team is small (in number, not in spirit) we need to concentrate efforts on what really matters. New features have been added to branch nm09 only for quite some time, all Plasma NM developers use only branch nm09 AFAIK, so please migrate to NM-0.9 as soon as possible :-)

Also keep in mind that the monolithic knetworkmanager is unmaintained since early this year. Everybody should have migrated to the plasmoid version of KDE's Network Management (Plasma NM) by now. There will be no monolithic version in branch nm09 by my part. The current monolithic knetworkmanager code do not even compile because of the changes I had to do when I imported Solid's NetworkManager backend to branch nm09 months ago. If anybody wants to take the task of maintaining the monolithic version feel free to contact me. The plasmoid and monolithic versions share about 85% of code, so it is not a huge task, but since I am already busy fixing/implementing new features in Plasma NM and doing my real life work (Android, nothing related to KDE, unfortunately) I do not have the time to do it myself. By the way, if anybody knows about a position to work on something related to KDE, I can send my CV :-)

Ah, the minimum NM version required for Plasma NM/nm09 has been increased to 0.9.0 because of the fix for bug #276486, which is an upstream bug by the way.

All said here is the traditional list of bugs closed since my last post. First for branch nm09:

209464: make hidden wifi networks work. This bug used to be our most hated bug, now we need a new one :-)
249872: Show overlay icon in system tray to indicate that at least one VPN connection is active, also adds that information in systray's tool tip along with all active VPN connection's names.
281074: prevents crash when ethernet carrier goes off in wired connections.
275502: sort connection list by type, then by activation state and then by connection name (or ssid if applicable).
. fix handling of network appearance/disappearance in ScanWidget.
. fix build on Fedora 15 which doesn't have the latest NM 0.9 yet
280913: don't send empty OpenConnect secrets to NM.
259284: show band and channel in ScanWidget/details.
280873: prevents crash when configuring WEP access point using networkmanagement_configshell.
280701: treat ad-hoc connections as normal wifi connections in connection list.
. update BSSID's tooltip and what's this in wireless edit dialog.
. add support for allowing/forbidding GSM roaming.
. add support for 802.1x subject_match and altsubject_match setting introduced in NetworkManager 0.9.0.
279676, 280494: ignore other non-binary compatible backends (NM-0.8 and Wicd) to prevent crashes.
. when in WDS mode there will be several access points with the same ssid, choose the one with strongest signal instead of the first one found when selecting the BSSID.
. add option to mark the GSM PIN as "Not Required" for devices that do not have the PIN set.
. add one tooltip for the the Show More button and one for the system connection checkbox in edit connection dialog.
. make shared connections easier to setup: the "add" button in wired and wireless tabs in Manage Connection widget is now a menu button with two options: Wired / Shared and Wireless / Shared. Also, unneeded widgets are hidden in wireless dialog when adding a shared wireless connection.
. simplify wireless edit dialog.
. use the correct column when updating the LastUsed info in Manage Connection widget.
. prevents crash when disabling the bluetooth controller with interface details opened for a bluetooth device. Also adds missing method setModemCardIface to Solid's NM frontend.
. automatically adds logged username to connection's permissions when changing connection from system scope to user scope. Without this change users would have to add the login name manually. If they forget to do so then the connection will not change from system to user scope and there will be no warning or error message about that.
. make WEP key validation work.
. fix VPN settings dialogs.
. disable NetworkManager going offline notification by default.
. fix crash when creating connections with networkmanagement_configshell.
. watch for kded restarts, call FinishInitialization to activate notifications.
. allow deactivating a connection while it's activating.
. display the AP's strength in its tooltip.
. let the user decide if he wants to store his 802.1x passwords or type them in every time, add real auth dialogs for 802.1x and wireless (needed for LEAP).
. don't copy certificates for 802-1x connections to our own storage to prevent conflicts with other NM's clients (i.e. nm-applet).
. set Connections entry in networkmanagementrc file to empty after importing NM-0.8 connections. The old files are still instact in case someone needs to redo the importing process.
277889: fix crash when trying to connect to wpa.enterprise eduroam.

That sums up to 33 entries. 6 of them are crash fixes, 8 are bug fixes (including minor bugs), the other 19 are new features (including small features). So, in despite of the name "bugs" they are mostly new features.

Now for branch master:

281074: prevents crash when ethernet carrier goes off in wired connections.
280826: fix plasma Shell crush after the mobile boardband connection stoping.
280701: treat ad-hoc connections as normal wifi connections in connection list.
. when in WDS mode there will be several access points with the same ssid, choose the one with strongest signal instead of the first one found when selecting the BSSID.
. add one tooltip for the the Show More button and one for the system connection checkbox in edit connection dialog.
. simplify wireless edit dialog.
. use the correct column when updating the LastUsed info in Manage Connection widget.
. prevents crash when disabling the bluetooth controller with interface details opened for a bluetooth device. Also adds missing method setModemCardIface to Solid's NM frontend.
. remove obsolete user-name stuff from OpenVPN.
. fix loading/saving of VPN connections.
. disable NetworkManager going offline notification by default.