tag:blogger.com,1999:blog-53249265028773952032024-03-13T23:14:45.850-07:00Running AmokUnknownnoreply@blogger.comBlogger11125tag:blogger.com,1999:blog-5324926502877395203.post-91526504259134400112009-07-16T21:08:00.000-07:002009-07-16T21:10:14.300-07:00Security and the Cloud<style type="text/css"> <!-- @page { margin: 0.79in } P { margin-bottom: 0.08in } --> </style> <p style="margin-bottom: 0in;">I was browsing through my unread tweets earlier today and I came across tweets from Evan, the CEO of Twitter. Apparently some enterprising cracker had managed to guess the passwords of several Twitter employees and gain access to their confidential documents, then sent them to a popular tech startup blog. I do not condone the actions of the cracker nor those of the writers of that blog. I think what they did was unethical and will mostly likely be detrimental to Twitter; thus, I'd rather not direct you to their site and increase their traffic. I'll be honest: I love Twitter. As much as I could easily write an entry extolling them while condemning the cracker and his cohorts, I leave that up to other concerned users. While everyone else is fixated on what this means for Twitter, no doubt focusing on its ambitious plans, the whole fiasco struck me more as a failure of cloud computing. What most people don't realize is the exploits of one fame seeking cracker not only undermined the plans and operations of Twitter, but also highlighted some problems of widespread corporate adoption of cloud computing.</p> <p style="margin-bottom: 0in;">The proponents of cloud computing, particularly at Google, would like us to believe that cloud computing is <i>safe</i>, and perhaps safer than traditional hosting solutions. They argue that your fragments of your data are distributed across several servers and in the event a single server is compromised, the attacker won't be able to retrieve your data as he will only have access to a possibly useless fragment. While this may hold true for attacks against servers, I prefer to exercise restraint when claiming cloud computing in general is safe.</p> <p style="margin-bottom: 0in;">The biggest strength of cloud computing is its ability to turn any internet connected device into your personal computer. Its main selling point is <i>you can access your files from anywhere</i>. It frees you from being restricted to a single device and its associated limitations or from the difficulty of synchronizing multiple devices. For instance, suppose your laptop/netbook is somehow irreparably damaged, cloud computing would spare you from 1) scrambling for the latest backup files, and 2) the pains of having to configure your replacement laptop. In fact, given any device can become your own personal computer, you can stop lugging around that heavy laptop with that clunky hard drive altogether.</p> <p style="margin-bottom: 0in;">Its biggest weakness: <i>"you" can access your files from anywhere</i>. Without the need to physically access a target device, your data is no longer secure once your credentials are compromised. While cloud computing may have defenses in place against attacks on servers, it has always been far easier to compromise the account of an individual user than it is to compromise an entire server. Granted, this is an issue shared with most, if not all, networks connected to the internet. However, cloud computing amplifies this problem by having all your data readily accessible from the internet.</p> <p style="margin-bottom: 0in;">Of course, the problem could be somewhat mitigated by a security policy that enforces requirements on password strength, as well as setting a finite time for the period of its validity. On the server end, it would help to support seamless encryption with private keys being stored locally (although this would go against the whole “any computer can become your computer” concept.)</p> <p style="margin-bottom: 0in;">There are other issues which I believe to be of lesser importance and will refrain from discussing in this blog but will address in another blog concerning Chrome OS in the near future.</p>Unknownnoreply@blogger.com7tag:blogger.com,1999:blog-5324926502877395203.post-13215627169600075362009-05-28T09:45:00.000-07:002009-05-28T09:53:50.055-07:00@replies, direct message support in a plasmoidFelt the microblog plasmoid would be more useful if it displayed mentions and direct messages so I gave it a little love. :)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQRb0giv-cY53FH_WojV3q2M7ioQyKqYB_1p-wiVyQbXXE6zfrfdRVtr2COLl4Iyysy1FwAMP-CVVyP2-bQAqMdeTOrvIbsxCcbz05jXa0Cq_7-kEDNc_holBjSCtXMmgxB3ABbNsD0jyB/s1600-h/replies.jpeg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 242px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQRb0giv-cY53FH_WojV3q2M7ioQyKqYB_1p-wiVyQbXXE6zfrfdRVtr2COLl4Iyysy1FwAMP-CVVyP2-bQAqMdeTOrvIbsxCcbz05jXa0Cq_7-kEDNc_holBjSCtXMmgxB3ABbNsD0jyB/s320/replies.jpeg" alt="" id="BLOGGER_PHOTO_ID_5340917419151301138" border="0" /></a><br />I have a couple more itches to scratch but hopefully this will be in KDE 4.4.Unknownnoreply@blogger.com10tag:blogger.com,1999:blog-5324926502877395203.post-52864757563353442022009-01-30T07:39:00.000-08:002009-01-30T08:03:04.387-08:00Multiple Actions for KRunner in KDE 4.2I'd been meaning to blog in a quite a while but didn't quite have the time to do so. For much of December and January I had been exclusively using Ruby. It got to the point that when I finally got a little bored with Ruby and decided to resume work on KDE related projects again, it took several seconds for it to register in my brain that comments don't begin with a # in C++. Anyway, now that 4.2.0 is released I figured I could give a semi-technical discussion of what's new in 4.2.0 with regards to KRunner.<br /><br /><span style="font-weight: bold;">Multiple action support</span><br /><br />As mentioned in some of my previous posts, KRunner now supports multiple actions. What does this mean for ordinary users? Well, prior to 4.2, runners (or the plugins that provide the matches for a search), could only provide a default action usually corresponding to "open". For example, given an html document match, KRunner would open it with the default viewer, in most cases the web browser. This isn't a problem if you wanted to view the file, however, if you wanted to edit it with a text editor, this behavior is not ideal. Multiple action support allows us to add another action such as "Edit" that would allow us to edit the file instead of opening it with the default browser. We could even add another action to open the file with a different browser.<br /><br />Unfortunately, there are no runners included with 4.2.0 that support multiple actions. For this reason, I am bundling together <a href="http://www.kde-apps.org/content/show.php?content=98529">two runners that support multiple actions and releasing it in kde-apps.org</a>. The first runner is a modified desktop search runner that adds open with actions and service menu support. For those of you who were former Katapult users and grew fond of the Amarok plugin, the service menu support will allow you to play, append to your playlist, or queue any track nepomuk has found. There is a typo in the service menu desktop file though, replace <span style="font-style: italic;">amarok -e</span> with <span style="font-style: italic;">amarok -a</span>. You'll also need to create a script to call the correct DBus methods because the service menu contains an outdated command for the "append and play" action.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQF2qlDdcs3FxBRl15fPwEBA5Yv8MBsDmK0jqqKTF0-ZjpTlPMJPqm9gra81iv2aEaEHiZ-g-MnkkLNUGLSisZyOqE1M7Tt4uKB01pYED1HNDfAsAb0DJJ_8zmbaeBY48g0m-4kzZpN9RI/s1600-h/windowmanagement.jpeg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 201px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQF2qlDdcs3FxBRl15fPwEBA5Yv8MBsDmK0jqqKTF0-ZjpTlPMJPqm9gra81iv2aEaEHiZ-g-MnkkLNUGLSisZyOqE1M7Tt4uKB01pYED1HNDfAsAb0DJJ_8zmbaeBY48g0m-4kzZpN9RI/s320/windowmanagement.jpeg" alt="" id="BLOGGER_PHOTO_ID_5297115662798801570" border="0" /></a><br />The second runner is a window management runner. It can perform any action that supported by the task manager of the panel, aside from moving a window. That means you can minimize/maximize, or shade a window, move it to a different desktop, keep it above other windows and many other actions.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjat425D-cnFK-EVLw2nesGNW5q4DCbDjIKTuqC2vxAUVoYTdq7z6nvl0NbfrBuOuw7sjnFxKqjz3Mhw2se1_K8Q2Dw0ryeXzlvWh69W3FCgucd59Ap1b7QM56jXnQAw8CPn5HGXlcEfE4y/s1600-h/desktopsearch.jpeg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 198px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjat425D-cnFK-EVLw2nesGNW5q4DCbDjIKTuqC2vxAUVoYTdq7z6nvl0NbfrBuOuw7sjnFxKqjz3Mhw2se1_K8Q2Dw0ryeXzlvWh69W3FCgucd59Ap1b7QM56jXnQAw8CPn5HGXlcEfE4y/s320/desktopsearch.jpeg" alt="" id="BLOGGER_PHOTO_ID_5297115659396293682" border="0" /></a><br />For the developer seeking to take advantage of multiple action support, reimplementing the actionsForMatch method and modifying the run method are all that need to be done. For convenience, commonly used actions can be stored by the runner by calling the addAction method and the action can be retrieved by calling the action method. The run method of the runner needs to distinguish between actions and can determine the selected action by calling the selectedAction method of the match. Because it is possible that the user interface does not support multiple actions, the run method also needs to support a default action in case no action is selected.<br /><br />For example given:<br /><code><br /><pre><br />void FooRunner::run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &match)<br />{<br /> foo(match);<br />}<br /></pre><br /></code><br /><br />adding multiple action support is as easy as:<br /><br /><code><br /><pre>QList<QAction*> FooRunner::actionsForMatch(const Plasma::QueryMatch &match)<br />{<br /> // In some cases we'd want to examine the match and choose appropriate actions based on it<br /> // but in this example we assume all matches have the same actions<br /> if (!action("foo")) {<br /> addAction("foo", QIcon(), "Foo");<br /> }<br /> if (!action("bar")) {<br /> addAction("bar", QIcon(), "Bar");<br /> }<br /> QList<QAction*> ret << action("foo") << action("bar");<br /> return ret; <br />}<br /><br />void FooRunner::run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &match)<br />{<br /> // Check if an action was selected<br /> if (QAction *a = match.selectedAction()) {<br /> if (a == action("foo")) {<br /> break;<br /> }<br /> bar(match);<br /> return;<br /> }<br /> // Perform the default action<br /> foo(match);<br />}<br /></pre><br /></code><br /><br /><span style="font-weight: bold;">QuickSand</span><br /><br />Despite the fact that KRunner now comes with multiple-action support, the default interface does not expose this functionality. KRunner now comes with an alternative interface that allows you to make use of multiple actions. In order to enable it, open the configuration dialog by clicking on the wrench icon, click on the interface tab and select the "task-oriented" option.<br /><br />If a match supports multiple actions, a second pane containing the actions will appear below the match pane. Press tab to switch to the action pane or click on the arrow icon on the top right portion of the action pane.<br /><br />Note: Bugfixes for QuickSand didn't make it in time for 4.2.0 so the experience might not be as smooth as it could be. I missed the tagging by 28 hours. Oops. They should be in 4.2.1 though.Unknownnoreply@blogger.com6tag:blogger.com,1999:blog-5324926502877395203.post-76938811127236613972008-11-07T04:22:00.001-08:002008-11-07T04:26:22.975-08:00Runner ServicesI felt the urge to see what I could do with libkonq so I played around a bit with the Nepomuk search runner last week and came out with this:<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrlTEeCMT5qm8aB5ME4cClnakvI0zheOyA9KgnIxI9j-iDo2HxPu3S-5MYWWRmwQK3KzCYmOpmUSxM4xh7jPMfhl1WNITVuz3cEZJjS2s9ku5GQJVk4OAPkJrPh1zJmAK6dPKKbU8ErwRW/s1600-h/servicemenu.jpeg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 162px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrlTEeCMT5qm8aB5ME4cClnakvI0zheOyA9KgnIxI9j-iDo2HxPu3S-5MYWWRmwQK3KzCYmOpmUSxM4xh7jPMfhl1WNITVuz3cEZJjS2s9ku5GQJVk4OAPkJrPh1zJmAK6dPKKbU8ErwRW/s320/servicemenu.jpeg" alt="" id="BLOGGER_PHOTO_ID_5265890122594860466" border="0" /></a><br />Open with actions and service menu support work with my copy of the nepomuk search runner. :) The open with dialog correctly appears, the amarok queue track action also works (but append & play doesn't because the dbus call is wrong.)<br /><br />I'm still looking for more runners to add multiple actions to so if you have any ideas, tell me :DUnknownnoreply@blogger.com4tag:blogger.com,1999:blog-5324926502877395203.post-11534151391565784302008-10-23T00:14:00.000-07:002008-10-23T00:18:59.835-07:00Swamped...My apologies to everyone, I have been busy working on my thesis of late. I knew that neglecting it for too long would backfire on me sometime and for the past month I've holed myself up at home until I finished it.<br /><br />Unfortunately, aside from completely wreaking havoc on my social life, which all geeks should have, it also had the nasty side effect of robbing me of time to work on anything related to KDE.<br /><br />Anyway, I found a couple of free hours and I decided to fix up the 4.1 branch of QuickSand which is now in kde-apps.org. I make no guarantees about application stability for the 4.1 version as I have been unable to test it much given my limited development time. For those of you who wanted to try it out though, feel free to do so. :)Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5324926502877395203.post-53057530989679194792008-09-26T01:26:00.000-07:002008-09-26T01:34:20.668-07:00A few clarificationsI realize that my last post didn't make things clear enough for everyone to understand so let me address some questions about QuickSand.<br /><br /><span style="font-weight: bold;">What exactly is QuickSand?</span><br />It is simply an alternative to the spinning squares in the default KRunner interface. At its core, it is still powered by the infrastructure of KRunner.<br /><br /><span style="font-weight: bold;">Where can I get it?</span><br />If you read the latest commit digest, you'll see I committed it to playground. It's in trunk/playground/base/plasma/quicksand. But before you checkout the sources, let me address a related question.<br /><br /><span style="font-weight: bold;">Can I run QuickSand in KDE 4.1 and lower?</span><br />No. Actually, you can't even compile it using the code in trunk. Multiple action support requires two things: 1) a patched libplasma that supports multiple actions, and 2) runners that actually use multiple actions. To fix #1, there's a patch included in the directory. The patch is against trunk/KDE/kdebase/workspace. #2 is not really an issue but runners that have multiple actions can be found in playground (mediaplayer and windows directories).<br /><br /><span style="font-weight: bold;">Won't you release a KDE 4.1 version?</span><br />The interface itself can be run in KDE 4.1.x. Initial development occured on my stable 4.1.1 installation. I still have a KDE 4.1 branch locally. However, multiple action support requires the use of a patch which is against trunk. If enough people clamor for a 4.1.x version I could release a QuickSand version without multiple action support. (Please do not send me e-mail asking for one, a comment here would suffice.)<br /><br /><span style="font-weight: bold;">Are we aping GNOME Do?</span><br />No. Similarities between GNOME Do and QuickSand are due to the fact that they are both inspired by Quicksilver. If anything, QuickSand is more related to Katapult than the relatively new GNOME Do. GNOME Do and Katapult mimicked the Bezel interface. QuickSand emulates the default interface (Primer) but I think most of you will agree it looks way better.<br /><br />The primary inspiration for making KRunner multithreaded was my experience getting multithreading to work properly with Katapult. Anyone remember Katapult-Fast Track? One of the comments for Katapult-Fast Track encouraged me to work on KRunner. Well, guess what... I did. :)<br /><br />Recall the feature list of improvements in Katapult-Fast Track: real transparency, multiple matches per search, multiple actions per match, and multiple threads. These have all been implemented (or at the very least are in the process of being implemented) in KRunner (and thus QuickSand). All that's really left is adaptive search. Oh yeah, would have loved to do all of this for GSoC. :)<br /><br /><span style="font-weight: bold;">Can't you just get rid of the popup box?</span><br />The design isn't _all_ about eyecandy. Sure only having scrolling icons may look nice, but in practice it may be difficult to work with. Take the following picture as an example.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6ULMw6BbGtmeZpN8HD_qMW8ervQRTfaUgX6vitU0T_EmeAOMaRzMe9VqCWj-ohSkh4O1Y1cKC1m3ENF16lQmkopQ2ucm81Fhz1UBOYeVcXwgsm1gNPMKALhU2W9xBWRT6MazUFa0fm_xu/s1600-h/multiple.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6ULMw6BbGtmeZpN8HD_qMW8ervQRTfaUgX6vitU0T_EmeAOMaRzMe9VqCWj-ohSkh4O1Y1cKC1m3ENF16lQmkopQ2ucm81Fhz1UBOYeVcXwgsm1gNPMKALhU2W9xBWRT6MazUFa0fm_xu/s320/multiple.png" alt="" id="BLOGGER_PHOTO_ID_5250244507920865138" border="0" /></a><br />Can anyone tell me which is the match for result.h without scrolling through all items? Thought so.<br /><br />I don't want to _have_ to scroll through all the items to find one particular match. Having the popup completion box makes it easy to distinguish between items with similar icons and select the desired match immediately. The popup completion box also enables interaction with the mouse. Scrolling through the items and selecting matches when the popup box is not shown can currently only be done using the keyboard.<br /><br />Don't want to see the popup box? Just press escape or click elsewhere. Never want to see it? I'll add an option to hide it in the config dialog sometime soon.<br /><br />Miscellaneous stuff:<br /><br />A picture of text mode which I forgot to include.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-hm75C5yBoJHiRSMPfcShJUTRNu3aha1JqKBtF7fNnF76E4FkGVcj5-USBnbIOy4HmSjhDNb_EpR7wiMHFZpfzPvJvPDtDfDa0OzHbzvPohwhCnIwGDjljaaH9xC10fAgzZ-O7JHBnWcP/s1600-h/textmode.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-hm75C5yBoJHiRSMPfcShJUTRNu3aha1JqKBtF7fNnF76E4FkGVcj5-USBnbIOy4HmSjhDNb_EpR7wiMHFZpfzPvJvPDtDfDa0OzHbzvPohwhCnIwGDjljaaH9xC10fAgzZ-O7JHBnWcP/s320/textmode.jpg" alt="" id="BLOGGER_PHOTO_ID_5250244511617573282" border="0" /></a>And just a minor plug, I like where the Raptor menu is going. :)Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-5324926502877395203.post-63076384603380655322008-09-22T04:19:00.000-07:002008-09-22T04:44:41.437-07:00Alt+Space<span style="font-style: italic;">Didn't get the following to Danny on time. Anyway here it is :)</span><br /><br /><span style="font-weight: bold; font-style: italic;">Introducing QuickSand</span><br /><br /><div style="text-align: justify;">QuickSand is an alternative interface heavily inspired by the Primer interface of Quicksilver in Mac OS X.<br /></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5HWR9Za3BSPJVZ07sbE2rld0XCAvkWsTVCQSMoLXQ_6NdiH3W8CctJvYPuJaPj5LGtQRR5mstcIP2S2thoYoUyran2txRalbLWL8zgfP7rAq8bwRuwStlpL_DdLlU0B_xW9Zn3ssY7Ali/s1600-h/01_main.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5HWR9Za3BSPJVZ07sbE2rld0XCAvkWsTVCQSMoLXQ_6NdiH3W8CctJvYPuJaPj5LGtQRR5mstcIP2S2thoYoUyran2txRalbLWL8zgfP7rAq8bwRuwStlpL_DdLlU0B_xW9Zn3ssY7Ali/s320/01_main.png" alt="" id="BLOGGER_PHOTO_ID_5248804622955264210" border="0" /></a><br /><div style="text-align: justify;">QuickSand differs from the current KRunner interface in several ways. QuickSand has 3 different display modes: Icon Parade, Selected Item, and Text mode. The default display mode is "Icon Parade". Instead of displaying a line-edit, QuickSand presents the user with a match pane asking the user to type something to be searched. Upon typing, the search string is displayed on the upper left corner of the match pane. If matches are found, the number of matches is displayed on the upper right corner of the match pane. The icons are of the matches are lined up horizontally in the match pane and a popup completion box is shown to guide the user in selecting the appropriate match. The user can scroll through the available matches by pressing the up and down keys (when the popup box is shown) or the left and right keys.<br /></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ0jzxbDbmsc07Io0LZtif-b-KdAd76GSTygp5btl1jRRY-fSsoJ6uBGmVWdbAUy-IBCSdj6uqWBEEXBMQsAVU2KXMJQX3jNCuPG3zv6pm3wz7eGDs8cmF4nzGEaGwyP5g7GuTC_gHY49O/s1600-h/02_iconparade.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ0jzxbDbmsc07Io0LZtif-b-KdAd76GSTygp5btl1jRRY-fSsoJ6uBGmVWdbAUy-IBCSdj6uqWBEEXBMQsAVU2KXMJQX3jNCuPG3zv6pm3wz7eGDs8cmF4nzGEaGwyP5g7GuTC_gHY49O/s320/02_iconparade.png" alt="" id="BLOGGER_PHOTO_ID_5248804622779255106" border="0" /></a><br /><div style="text-align: justify;">Hitting enter will select the match and display only the selected item. Clicking on the arrow on the upper right corner of the match pane will toggle between Icon Parade and Selected Item modes.<br /></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitenpepq7jUCSK8iu2WZMaMJd3yX5jNi9SDK1JVLwykGORN0DR1GG_9Zd-7p5-6R98uJ3-ELc1KTCldXdERCEaCSwNa5d0sOJun91JptMaaL_SL1Yfm09fqWx4Za9qBfnX_kX6jKeVpIs2/s1600-h/03_selecteditem.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitenpepq7jUCSK8iu2WZMaMJd3yX5jNi9SDK1JVLwykGORN0DR1GG_9Zd-7p5-6R98uJ3-ELc1KTCldXdERCEaCSwNa5d0sOJun91JptMaaL_SL1Yfm09fqWx4Za9qBfnX_kX6jKeVpIs2/s320/03_selecteditem.png" alt="" id="BLOGGER_PHOTO_ID_5248804625990783410" border="0" /></a><br /><div style="text-align: justify;">If the user would rather see a line edit, pressing the period (.) key will change the display to text mode. A line edit will replace the scrolling icons in the match pane.<br /></div><br /><div style="text-align: justify;">One of the primary reasons for writing QuickSand was to provide support for multiple actions. For example a match for an open application window can have several actions associated with it. The window can be minimized, set on all desktops, etc. QuickSand supports multiple actions in the same manner as matches for a search. If a particular match has several actions associated with it, an action pane appears below the match pane with the first action selected. Pressing tab will switch to the action pane and the user can select from the various available actions in the same manner as matches.<br /></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrZtIwtS8h7h6cDRTPKvd3at-QPXCvgfOLjbFJJFsqTdei0GWBlpzuRPRRwgWPfk72u3zgVDh6xBLnPQvYeg2TfOsyYe6IDuOs7RpCnJTuhXe0fNs8axf1WF2eYlcjToVMxbIM3U54vzzi/s1600-h/04_multipleaction.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrZtIwtS8h7h6cDRTPKvd3at-QPXCvgfOLjbFJJFsqTdei0GWBlpzuRPRRwgWPfk72u3zgVDh6xBLnPQvYeg2TfOsyYe6IDuOs7RpCnJTuhXe0fNs8axf1WF2eYlcjToVMxbIM3U54vzzi/s320/04_multipleaction.png" alt="" id="BLOGGER_PHOTO_ID_5248804625189339090" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSuWZUpP3emVUSMYutFdaZ4R64LKvhTpQD0WTylOIvPUrTtnU6De7RDcpz7jRMYkIUXP0U_phd0K-2cpdnfZktwrYiEps-kMOoF5ISm9LrmLCCDfymd2Sz64g73iE4i_pw-i_6aCeZiz6V/s1600-h/05_selectaction.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSuWZUpP3emVUSMYutFdaZ4R64LKvhTpQD0WTylOIvPUrTtnU6De7RDcpz7jRMYkIUXP0U_phd0K-2cpdnfZktwrYiEps-kMOoF5ISm9LrmLCCDfymd2Sz64g73iE4i_pw-i_6aCeZiz6V/s320/05_selectaction.png" alt="" id="BLOGGER_PHOTO_ID_5248804630330298738" border="0" /></a><br /><div style="text-align: justify;">Hopefully, QuickSand will be provided as an option in KRunner allowing users to select between the default interface and QuickSand.<br /><br />Another future development would be support for actions that require objects/targets. For example given a match for a file "sshot.jpg" and an action of "e-mail to...", a possible object would be "johndoe@commit-digest.org". Support for objects would be as simple as placing an object pane below the action pane and displaying it whenever the currently selected action requires an object.<br /></div>Unknownnoreply@blogger.com7tag:blogger.com,1999:blog-5324926502877395203.post-22708585291916634052008-09-10T21:55:00.000-07:002008-09-10T21:59:15.026-07:00Some people fall in love and touch the skySome people fall in love and find QuickSand<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9-S0YsaYju9kh_g1Hd3cyPgLc9IJpqmFPZ1Es7zOl7XeIE6IA7lAlhXoRCCiI3t5iz30eZ7LD-ZqqdJdnn07gfikZ6lxa0WwMPVBmkULF49kGy1YWw8nfyPITpTCvaYN_0YHX4mPSN7Hb/s1600-h/quicksand.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9-S0YsaYju9kh_g1Hd3cyPgLc9IJpqmFPZ1Es7zOl7XeIE6IA7lAlhXoRCCiI3t5iz30eZ7LD-ZqqdJdnn07gfikZ6lxa0WwMPVBmkULF49kGy1YWw8nfyPITpTCvaYN_0YHX4mPSN7Hb/s320/quicksand.png" alt="" id="BLOGGER_PHOTO_ID_5244623341197601714" border="0" /></a><br />(Coming soon. :) )Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-5324926502877395203.post-29526720883026675742008-08-18T20:28:00.000-07:002008-08-18T22:25:52.338-07:00Configuring the Plasma Panel<span style="font-style: italic;">I had several papers to write last night and found myself looking for excuses not to write them. I eventually ended up reflecting on how I felt about writing documentation and to be honest, it isn't something I enjoy. In fact, the two things I hate the most about writing applications are: 1) writing documentation, and 2) writing configuration dialogs, but the second issue is out of the scope of this entry. ;) I suppose my objections to writing documentation stem from my opinion that they waste my time. I could be better off doing something more productive like writing new code (or perhaps playing sudoku :D). A program should be self-explanatory to the point that a user can understand what to do without having to read documentation. Nevertheless, I never really exerted effort in writing documentation so I decided I'd give it a try. (Please spare me the flames in case I do poorly. You have been warned.)</span><br /><br /><span style="font-style: italic;">One area that could use improvements in documentation is configuring panels in Plasma. Sebas did a good job but he only dedicated one paragraph to it in the documentation and it didn't have any pretty pictures. Most people react to visuals more so I decided to supplement the documentation.</span><br /><br />___________________________<br /><br /><span style="font-weight: bold;">Configuring the Panel</span><br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYRxpMxYnUMzxqvb7krzVxc6aTwV8qgeMjTYwL5dIY5cei44yen5rJWNSJUAfpR6C-wGHGKQO37Awr0DwNeFO2NiGLJXjYQYE8VNANnubyhWv4K39_qyRliZ5rcBQb9WbpfgJlWfWZ0Q62/s1600-h/panel.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYRxpMxYnUMzxqvb7krzVxc6aTwV8qgeMjTYwL5dIY5cei44yen5rJWNSJUAfpR6C-wGHGKQO37Awr0DwNeFO2NiGLJXjYQYE8VNANnubyhWv4K39_qyRliZ5rcBQb9WbpfgJlWfWZ0Q62/s320/panel.png" alt="" id="BLOGGER_PHOTO_ID_5236090082975157634" border="0" /></a><span style="font-weight: bold;">Figure 1</span> The Default Panel<br /></div><br />Similar to the panel layout in previous KDE versions, the default panel configuration consists of: 1) an application launcher button, 2) a device notifier button, 3) a pager, 4) the task manager, 5) the system tray, and 6) the system clock. By default, the panel takes up the entire width of your screen.<br /><br />The application launcher defaults to the Kickoff menu style. If you prefer a traditional hierarchical menu, right click on the application launcher and select "Switch to Classic Menu Style". (Figure 2)<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIG2BOw2a70DBSkSVcVZ-tbJJzbOBQuwfbqb84iOGU8GvGUSZq8tne4DPqjKl71mkB2fUna4SExMpLTSI8MIWK9SLWnBy0tYWl2TPpfGjXaGf5FAxKPwGlp4IRB2M80RLqLVYtsEpTz2dZ/s1600-h/panel-menu.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIG2BOw2a70DBSkSVcVZ-tbJJzbOBQuwfbqb84iOGU8GvGUSZq8tne4DPqjKl71mkB2fUna4SExMpLTSI8MIWK9SLWnBy0tYWl2TPpfGjXaGf5FAxKPwGlp4IRB2M80RLqLVYtsEpTz2dZ/s320/panel-menu.png" alt="" id="BLOGGER_PHOTO_ID_5236090574125675282" border="0" /></a><span style="font-weight: bold;">Figure 2</span> Switch to traditional launch menu<br /></div><br />The panel may be configured by clicking on the plasma logo, (commonly referred to as the "cashew") at the right-most end of the panel. If the cashew is not visible, right click anywhere on the panel or desktop and select "Unlock Widgets". Alternatively, you can unlock the widgets by pressing Ctrl-L when there are no active windows.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfm5s0U8ltdJWf5x9EI_7WMGelrvGWc-ysfMs5hzXy8TbCCatEuc3fwPdVnZ8A938BEHECZ2Ab7bbaLXf6szZu8qkLI7sfeNOf7fFMUfuy85J0wl5YAXFm_lWMpIsAIA6u06die0e33UJL/s1600-h/panel-unlock.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfm5s0U8ltdJWf5x9EI_7WMGelrvGWc-ysfMs5hzXy8TbCCatEuc3fwPdVnZ8A938BEHECZ2Ab7bbaLXf6szZu8qkLI7sfeNOf7fFMUfuy85J0wl5YAXFm_lWMpIsAIA6u06die0e33UJL/s320/panel-unlock.png" alt="" id="BLOGGER_PHOTO_ID_5236090856216282802" border="0" /></a><span style="font-weight: bold;">Figure 3</span> Unlocking Widgets<br /></div><br />Clicking on the plasma logo opens up the panel settings window just above the panel. (Figure 4)<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTC8sJQiWZube7T0MoCimzh8b-biXYg0-kmmRNu-WlN_BNtIRyarr_wTNNBeD6w0cbpyNEpc4OVqqAGzg6ON36442POOvI2aEQ_0Mh0sqPjeadrlzYtU8kQ4hQvEb3zeYl7oTYryF0v1NL/s1600-h/panel-settings.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTC8sJQiWZube7T0MoCimzh8b-biXYg0-kmmRNu-WlN_BNtIRyarr_wTNNBeD6w0cbpyNEpc4OVqqAGzg6ON36442POOvI2aEQ_0Mh0sqPjeadrlzYtU8kQ4hQvEb3zeYl7oTYryF0v1NL/s320/panel-settings.png" alt="" id="BLOGGER_PHOTO_ID_5236091380861698610" border="0" /></a><span style="font-weight: bold;">Figure 4</span> Panel Settings Window<br /></div><br />This window allows users to configure the position, alignment and size of the panels. The window also allows repositioning of plasmoids within the panel.<br /><br /><span style="font-style: italic; font-weight: bold;">Changing Panel Alignment, Position and Size</span><br /><br />The panel may be configured to be anchored to the left side of the screen, the center of the screen, or the right side of the screen depending on your preferences. Simply select the desired alignment by clicking on the appropriate button in the panel settings window. (Figure 5)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjqBoUwQEew27ykRFj6fFXDNRdtOvz_CwLZzlx5UwuWhnvWZxbNm5xLzmPYQby4GPBZimAQ0emo7U7xoM362xal-s_Il2YWU6ynJT5MZz58impRcACxCleD3nDfKQAZ9y97CY7-QHpVkOy/s1600-h/panel-alignment.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjqBoUwQEew27ykRFj6fFXDNRdtOvz_CwLZzlx5UwuWhnvWZxbNm5xLzmPYQby4GPBZimAQ0emo7U7xoM362xal-s_Il2YWU6ynJT5MZz58impRcACxCleD3nDfKQAZ9y97CY7-QHpVkOy/s320/panel-alignment.png" alt="" id="BLOGGER_PHOTO_ID_5236093724807602322" border="0" /></a><div style="text-align: center;"><span style="font-weight: bold;">Figure 5</span> Panel Alignment Buttons<br /></div><br />At the bottom of the panel settings window there are slider handles of three different colors. The gray slider handle dictates the offset from the current panel anchor point. For left-aligned panels, moving the gray slider will move the beginning of the panel a fixed distance to the right of the left edge of the screen. For right-aligned panels, the panel will be moved a fixed distance from the right edge of the screen. For center-aligned panels, the position of the gray slider handle will be treated as the center of the panel.<br /><br />Plasma supports dynamically adjusting panels that grow based on the contents of the panels. The green slider handles specify the minimum panel width. The panel is guaranteed to be at least as wide as specified by these slider handles even as the contents of the panel decrease. On the other hand, the blue slider handles control the maximum width of the panel. The panel size will not grow beyond the points specified by the blue slider handles. Panel growth is dependent on alignment of the panel. Left-aligned panels will only grow towards the right edge of the screen. Similarly, right-aligned panels only grow towards the left edge of the screen. Center-aligned panels grow towards both edges of the screen. Figures 6 and 7 illustrate the growth of the panel after the addition of a widget.<br /><br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0Z_pzRWyG-y3aFbpu6QSGa2phg1kTr8dx-CvYXrkD-bvg9GDcO-xYL5V3wZmeIimspfIKcXRFGuN5XwarxdxYo8WNxFgSw6v98B3zY_XmjjuMsp5gNGD0vXs8w2DTXrExJWLii9R4i3rd/s1600-h/panel-minimum.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0Z_pzRWyG-y3aFbpu6QSGa2phg1kTr8dx-CvYXrkD-bvg9GDcO-xYL5V3wZmeIimspfIKcXRFGuN5XwarxdxYo8WNxFgSw6v98B3zY_XmjjuMsp5gNGD0vXs8w2DTXrExJWLii9R4i3rd/s320/panel-minimum.png" alt="" id="BLOGGER_PHOTO_ID_5236091384726458306" border="0" /></a><span style="font-weight: bold;">Figure 6</span> Panel Size is at Minimum<br /><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsoK6IAiuv9-HDPmZDVohRftKIpgzboHKHKpPjLlgPplUfU53D9R812RSlijtDZAD_H2_WnQrZg8TQ1yOcYsuF5kfN1aNdpAlv9ozPqEaoB1lXb4ZqYyTzk6MU1j4B2JqKurlZ1h1DXlcG/s1600-h/panel-grow.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsoK6IAiuv9-HDPmZDVohRftKIpgzboHKHKpPjLlgPplUfU53D9R812RSlijtDZAD_H2_WnQrZg8TQ1yOcYsuF5kfN1aNdpAlv9ozPqEaoB1lXb4ZqYyTzk6MU1j4B2JqKurlZ1h1DXlcG/s320/panel-grow.png" alt="" id="BLOGGER_PHOTO_ID_5236093731946018546" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKePosfXzYa7qHq1v9_VV2LR9GdXmpFaAfzbUQR8WZlBeqx5LYYs__9N9j-YtbtpT3ysfC-uc0jqhiHG8iKlzgEz8KqI5Sw3qlbnxzj0m6P_DeWKb5GHcX2NVoSZ5Im6AHvcuV_bBgWWE5/s1600-h/panel-added.png"></a><div style="text-align: center;"><span style="font-weight: bold;">Figure 7</span> Panel Growth after adding Widget<br /></div><br />The panel height can also be changed by dragging the topmost portion of the panel settings window until the desired panel height is reached. Widgets will automatically resize themselves based on this new height. (Figure 8)<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLeaCzNdA7nDwinYKNrlECETUefVKiosIAZ5iAQw4Jx8vhIviugPEpH3iVNGHdy_Mjqo1rIFeaiUjsWSykDo0GWxh1Y7NGSkHdn-w9Pfn4loNTfqSv21eTHCD7D9mPLP56tqT7Nf66qFDK/s1600-h/panel-height.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLeaCzNdA7nDwinYKNrlECETUefVKiosIAZ5iAQw4Jx8vhIviugPEpH3iVNGHdy_Mjqo1rIFeaiUjsWSykDo0GWxh1Y7NGSkHdn-w9Pfn4loNTfqSv21eTHCD7D9mPLP56tqT7Nf66qFDK/s320/panel-height.png" alt="" id="BLOGGER_PHOTO_ID_5236093734134053538" border="0" /></a><span style="font-weight: bold;">Figure 8</span> New Panel height<br /></div><br /><span style="font-weight: bold; font-style: italic;">Adding Widgets</span><br /><br />Additional widgets can be added to the panel to provide more functionality. New widgets can be added by clicking on the Add Widgets button in the panel settings window. Alternatively, right clicking anywhere on the panel and selecting "Add Widgets..." will also open the Add Widgets dialog box. (Figure 9)<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiczI2QZoVBFD3u9rwRyCLIba6VnQ-fotpSflrFvslRRxKNWK3a76PfFZ9oIKzvsMxQOVFgWczfEuEkgI3hPQXAyc_zN8zPtxFZ3jRQsDKKv8obf4uD2r9bnN354AQA6By5CIcaWrx7pTSz/s1600-h/add-widgets.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiczI2QZoVBFD3u9rwRyCLIba6VnQ-fotpSflrFvslRRxKNWK3a76PfFZ9oIKzvsMxQOVFgWczfEuEkgI3hPQXAyc_zN8zPtxFZ3jRQsDKKv8obf4uD2r9bnN354AQA6By5CIcaWrx7pTSz/s320/add-widgets.png" alt="" id="BLOGGER_PHOTO_ID_5236091392465299442" border="0" /></a><span style="font-weight: bold;">Figure 9</span> Add Widgets dialog box<br /></div><br />Widgets can be added to the panel by double-clicking on the desired widget or selecting the widget and clicking on "Add Widget". By default, the widget is placed at the right-most end of the panel. (Figure 10)<br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKePosfXzYa7qHq1v9_VV2LR9GdXmpFaAfzbUQR8WZlBeqx5LYYs__9N9j-YtbtpT3ysfC-uc0jqhiHG8iKlzgEz8KqI5Sw3qlbnxzj0m6P_DeWKb5GHcX2NVoSZ5Im6AHvcuV_bBgWWE5/s1600-h/panel-added.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKePosfXzYa7qHq1v9_VV2LR9GdXmpFaAfzbUQR8WZlBeqx5LYYs__9N9j-YtbtpT3ysfC-uc0jqhiHG8iKlzgEz8KqI5Sw3qlbnxzj0m6P_DeWKb5GHcX2NVoSZ5Im6AHvcuV_bBgWWE5/s320/panel-added.png" alt="" id="BLOGGER_PHOTO_ID_5236093727326858066" border="0" /></a><span style="font-weight: bold;">Figure 10</span> Position of Newly Added Widget<br /></div><br />If a specific position is desired, a new widget can instead be positioned by dragging it to its desired location from the Add Widget dialog box.<br /><br /><span style="font-weight: bold; font-style: italic;">Changing Widget Positions</span><br /><br />In some cases, you may want to change the position of a widget. To do this, open the panel settings window and hover the mouse over the widget you wish to move. A move emblem will be placed over the center of this widget. (Figure 11)<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUC5lc5hSwfCiuJfi8RK9UShAYq66mMyinHI3SF8rA39M7xd7lm65rTatGzBAEDcCgdg8SU48xScMo76J3eyZ98zuACHlj7g2441XFzYrvHoPX8CMLlWI9UOJDbnYB3Giqp3tY2Hmw-kiv/s1600-h/move-handle.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUC5lc5hSwfCiuJfi8RK9UShAYq66mMyinHI3SF8rA39M7xd7lm65rTatGzBAEDcCgdg8SU48xScMo76J3eyZ98zuACHlj7g2441XFzYrvHoPX8CMLlWI9UOJDbnYB3Giqp3tY2Hmw-kiv/s320/move-handle.png" alt="" id="BLOGGER_PHOTO_ID_5236091397289523682" border="0" /></a><span style="font-weight: bold;">Figure 11</span> Move Emblem over Widget<br /></div><br />Select the widget by clicking on it. This will highlight the background of the widget. (Figure 12)<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzj7ySCep2pjdAmAVGHy12h7AxPJq-iWXalmFyt1IUuNM-cktP_kzQh9Gep7wPOs1vZmHKM1zmbiCrlWHZ_-GSC1RpfZIdlw_fkTiF51A3mkkRibt-ud58T1YuNaCdlPM489ukBj0wiL-a/s1600-h/move-selected"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzj7ySCep2pjdAmAVGHy12h7AxPJq-iWXalmFyt1IUuNM-cktP_kzQh9Gep7wPOs1vZmHKM1zmbiCrlWHZ_-GSC1RpfZIdlw_fkTiF51A3mkkRibt-ud58T1YuNaCdlPM489ukBj0wiL-a/s320/move-selected" alt="" id="BLOGGER_PHOTO_ID_5236093723198224754" border="0" /></a><span style="font-weight: bold;">Figure 12</span> Selection of Widget to Move<br /></div><br />Move the mouse over the desired position. Plasma will highlight the new position of the widget. (Figure 13)<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqMdflyzBxXk8Dxtii4DI219B4jn13kdIozLxaV2Jtx7iMtU_3t2YvXlHZFmjtpLU9RmzVMnk4nA6UPe-9NQ5vzf24dT4tu07jIadqdSISXi3gZXCCYpkc2moaIy5kekD1VoOIPnJIgDjW/s1600-h/move-move.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqMdflyzBxXk8Dxtii4DI219B4jn13kdIozLxaV2Jtx7iMtU_3t2YvXlHZFmjtpLU9RmzVMnk4nA6UPe-9NQ5vzf24dT4tu07jIadqdSISXi3gZXCCYpkc2moaIy5kekD1VoOIPnJIgDjW/s320/move-move.png" alt="" id="BLOGGER_PHOTO_ID_5236091404544531234" border="0" /></a><span style="font-weight: bold;">Figure 13</span> Selection of New position<br /></div><br />Left click on the widget to finalize its new position.Unknownnoreply@blogger.com13tag:blogger.com,1999:blog-5324926502877395203.post-40146826012772079982008-08-11T05:20:00.001-07:002008-08-11T05:27:06.296-07:00Powered by LithiumSometime last month I found myself looking for a KDE4 power manager. To be more specific, I was looking for a KDE4 port of KPowersave, but didn't find any. So I took it upon myself to port KPowersave to KDE4 and Solid only to conclude that it would be much easier to write a Solid based power manager from scratch. When looking for Solid documentation, I stumbled upon solidshell which I previously had no clue existed. Later that day I had written a simple power management application that could change brightness. When I had free time a few weeks ago I decided I'd upload my little app to playground, only to discover that 1) there was already a kde4powersave plasmoid and 2) there was a kded daemon based on the plasmoid. :-/<br /><br />Anyway, it seems like a waste to stop working on it completely so I'll share my progress with you. First, I cloned the tooltip from guidance power manager.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhttXBxFixX9ksWF2FUsY4Mke6tobheHwQsj7W6neLtpiBLqYpi9uBNXoAsnUTf_NcAG7Hy2SA2-YOJkR2m_lXbI_hUKL3uS6YdF4qB0fWNEulUgJ3RyULIKD7q4cEwxR8n-zvUHIhxdNtl/s1600-h/tooltip.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhttXBxFixX9ksWF2FUsY4Mke6tobheHwQsj7W6neLtpiBLqYpi9uBNXoAsnUTf_NcAG7Hy2SA2-YOJkR2m_lXbI_hUKL3uS6YdF4qB0fWNEulUgJ3RyULIKD7q4cEwxR8n-zvUHIhxdNtl/s320/tooltip.png" alt="" id="BLOGGER_PHOTO_ID_5233234161918459106" border="0" /></a><br />Then I created something similar to the detailed dialog from KPowersave.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheABB5y19vLk_5xA2FR9rsmp4tHGQw4DzD8SPY4pIxrMtI_HxDBwWujDjOb-8ZmL1sL8GNbo-n7CwATx4AUryQ7TOBBpGpr2TCgQuSKUEMVBT3QDISAj2i4lD_gPLmzvWImDS-rXIVSwGF/s1600-h/detailedialog.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheABB5y19vLk_5xA2FR9rsmp4tHGQw4DzD8SPY4pIxrMtI_HxDBwWujDjOb-8ZmL1sL8GNbo-n7CwATx4AUryQ7TOBBpGpr2TCgQuSKUEMVBT3QDISAj2i4lD_gPLmzvWImDS-rXIVSwGF/s320/detailedialog.png" alt="" id="BLOGGER_PHOTO_ID_5233234418156850466" border="0" /></a>As well as the context menu structure of KPowersave.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqrlMOOLW71E8Vd8LQpmcgBoUIjJi7ofT0e3QL1C5bsSo2tvE7cNncTDgcWaapFaFBaDBrzsEeuA76chE7T_uonRfRKg3AMU1jN751TRGR-qpySqC0e0klrNdpsGP1cUjKk794e0Ue70A5/s1600-h/contextmenu.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqrlMOOLW71E8Vd8LQpmcgBoUIjJi7ofT0e3QL1C5bsSo2tvE7cNncTDgcWaapFaFBaDBrzsEeuA76chE7T_uonRfRKg3AMU1jN751TRGR-qpySqC0e0klrNdpsGP1cUjKk794e0Ue70A5/s320/contextmenu.png" alt="" id="BLOGGER_PHOTO_ID_5233234691420946274" border="0" /></a>But almost everything is powered by Solid and thus works similarly to solid-shell. However, I fixed the brightness controls to work on my system. KPowersave only set the brightness of the first laptop panel it received, solid-shell sets the brightness of every brightness control. On some systems such as my system that will result in conflicting brightness settings.<br /><br />One thing I didn't like about previous power managers was that they polled to check system activity. The power manager is supposed to be an application that helps _conserve_ battery power but instead previous implementations may have served to further _drain_ battery power by unnecessary polling. In designing the system activity checking system for Lithium, I looked for solutions that would limit the need for polling. Lithium checks for system activity based on the smallest period that needs the system idle time.<br /><br />For example, autodim is enabled and the timeout period set for autodim is 3 mins. A timer will start once Lithium is started and if after 3 minutes, the system is still active (i.e. idle time is 0), the timer will restart for another 3 minutes. This means that at worst polling will occur every 3 minutes for a system that is under continuous use. If after 3 minutes, the system has only been idle for 1.5 minutes, the timer will restart for 1.5 minutes.<br /><br />To perform the opposite task of checking if the system is resuming from an idle state, previous power managers again polled the system. Lithium uses an ingenious solution adopted from the kde4powersave plasmoid which in turn borrowed it from ksnapshot. An offscreen widget grabs mouse and keyboard support and if it detects activity, it releases control and the system performs the necessary actions (restore brightness, etc.).<br /><br />Working on a power manager brought to my attention that HAL doesn't necessarily correctly set the maximum speed of the processor. I also could not find a means to get the current CPU frequency from HAL. I ended up reading the information from /sys/devices/system/cpu which isn't ideal.<br /><br />There are several more features I need to add such as an OSD and KMilo like functionality, better scheme support and config dialogs. I'll get to them sooner or later. It'll also be great to integrate my work with the kded daemon and the plasmoid but one reason I wrote an application that lived in the systray was to be able to use Lithium in other desktop environments.<br /><br />So for my next little project, I will address another minor annoyance. I'm quite sick of people complaining about the lack of a KDE4 knetworkmanager so if no one else does so by Friday next week I'll begin work on a system tray icon port of knetworkmanager to KDE4. Or I could help out with the plasmoid... If someone's already working on it, please tell me so we don't duplicate any efforts. I've got a lot of other interesting projects that are begging for my attention. :)Unknownnoreply@blogger.com19tag:blogger.com,1999:blog-5324926502877395203.post-8473026952511738242008-06-11T08:13:00.000-07:002008-06-11T09:02:08.857-07:00Tiberian DreamI suppose it's quite awkward for me to write my first post in this blog on a topic that doesn't really concern KDE. Moreover, most of you have no clue whatsoever who I am. Let me begin by introducing myself. My name is Ryan Bitanga. I am a 21 year old KDE developer and user who began by using Mandrake Linux in 2000 and am currently using Kubuntu. You may have seen my name 2 or 3 times on aseigo's blog concerning KRunner. Well, most of the work I've done is for KRunner. :)<br /><br />Unfortunately I haven't been able to spend as much time as I wanted on KDE lately. More pressing matters took center stage in my life and as of the past week or two something more interesting came up.<br /><br />If the words "peace through power" ring a bell for some of you, you most probably got it from Command & Conquer. There was a project that tried to implement the original game, FreeCNC. 5 years ago, I wrote a patch for FreeCNC to support bindable hotkeys compatible with the bindable hot keys used in Tiberian Sun as well as mouse-over health check ups a la TA and RA2, (and most if not all modern RTS's). Unfortunately, the developers didn't respond to my e-mails, the codebase diverged significantly, and for a while, I lost interest. Two years ago there were efforts to revive the project before the two active developers claimed that no one was volunteering to work on it. Well, I did attempt to contact them and I know several other people did as well to no avail. So sometime this month I decided to make things happen.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJbF8W9k5u7kMq9ArjeOllcKq8CUAGHFw24pAD8r6RmHqxJKyySZZx_BaA8OloV092LOgV0y_eQ0kUIwfnVRtJAlQpeSEtwiPw6I9YezlPLvOFWXwHKPUjq8oEf2DMH_AUfG_Kc401uekF/s1600-h/death.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJbF8W9k5u7kMq9ArjeOllcKq8CUAGHFw24pAD8r6RmHqxJKyySZZx_BaA8OloV092LOgV0y_eQ0kUIwfnVRtJAlQpeSEtwiPw6I9YezlPLvOFWXwHKPUjq8oEf2DMH_AUfG_Kc401uekF/s320/death.png" alt="" id="BLOGGER_PHOTO_ID_5210650115819294082" border="0" /></a><br />The screenshot above doesn't show much. But if you look a little closer you'll see an infantry death animation. Majority of the work I've put into the program has been on infantry animations. You'll find that unit movement, attack, and death animations work properly. Infantry now also dive for cover when under attack and stand up a few seconds after they are safe. The idle animations are also correctly rendered. You'll see grenadiers doing push-ups and riflemen cleaning their rifles.<br /><br />But these improvements only signal the start of better things to come. If you loved the original game and you're interested in helping, start by checking out the source code from <span style="font-style: italic;">https://tiberiandream.svn.sourceforge.net/svnroot/tiberiandream<span style="font-style: italic;"><span style="font-style: italic;"><br /><br /></span></span></span><span>I am in the midst of rewriting significant portions of the code but would welcome your help, support, and ideas :)</span><span style="font-style: italic;"><span style="font-style: italic;"><span style="font-style: italic;"><br /></span></span></span>Unknownnoreply@blogger.com6