| | | News | | | I'm a hobbyist writer of fiction and poetry, which is to say that I write for the purpose of enjoying the pleasure the activity itself brings and for little other purpose. Sometimes I'll go back and read something I wrote some time ago, perhaps years ago, maybe even a decade or more. Sometimes when doing so a fairly odd thing will happen: I'll suddenly realize something that I was trying to say, something which was quite plainly there in what I had written, but which I was blind to at the time of writing. I've heard similar experiences from other writers, and if you are a writer you may have experienced the same thing too.
I had a similar experience with Plasma the other day. We get asked from time to time "Why Plasma?" or "What is the purpose of libplasma, exactly?". Or we get compared to other projects out there, even though there are only passing similarities. (I have yet to find another single project that approaches this problem space in the same way Plasma does; either Plasma is fairly unique or I'm just not looking hard enough. :) I have my stock answer about a scalable, repurposable interface component system with a high degree of data/visualization separation that emphasizes scripting, etc.
It ends up being an accurate description, but it's never been one that really speaks loudly to what drove the writing of libplasma or the design of Plasma itself. It's all about attributes of the system, after all, not motivations.
So let me try that now. Some of what follows will be familiar to those who have followed by writing here and elsewhere over the years, but I don't think it's probably ever come together this succinctly.
I Want To Write Workspaces
What I want to do is to be able to create a user interface that is "applet" or "widget" centric. I want to be able to design how that is presented to the user, how it fits together, how the interaction works for a given audience or device.
What I don't want to do is write all the applets/widgets myself in the process of doing that. A battery is a battery, a window list is a window list, a CPU graph is a CPU graph, a tweet is a tweet, etc. That's a hell of a lot of work just to get a new primary user interface on a device. Too much, in fact.
Plasma allows us to write a desktop, a netbook, a tablet, a mobile, a media center, a screen saver, a log-in screen and an in-app dashboard interface that can all use the same component model. We just write the workspace for them and all the details, from theming to configuration management, are handled for us.
In KDE3, Kicker had applets. They were pretty cool, but they were tied to Kicker. So SuperKaramba came along to let us do something similar (better in some ways, worse in others) on the desktop layer. It also brought a new API and we had to write a whole new set of widgets. Not the best.
Every other widget API out there tends to come with no way to build a workspace around it. Either they are tied deeply into an existing workspace presentation, or are so loosely coupled to the idea that you have to do all the work around them yourself. Plasma is the happy medium: it gives all the tools to easily make a workspace and access to it's own API as well as any other you wish to add, just as we've already done with Google Gadgets and SuperKaramba.
I Want To Write Killer Widgets / Gadgets
What I want to be able to do is sit together with a designer and a developer and put together a really cool widget that does something. I want that widget to run on my phone and my tablet and my laptop. Or maybe just my laptop. Or maybe just my tablet.
I want to let the designer do as much of the UI as possible. I want the developer to deal with the data. It all has to scale across devices. I want to be able to choose whether I use C++ or Javascript or GoogleGadget's API or ... I want to choose!
I want fancy things like animations and SVGs. I want simple things packaging and configuration handled for me. I want it all to be platform independent.
Plasma lets me quickly write widgets with a clear design and data separation that any workspace can use on any hardware platform libplasma is available on. In fact, not only can other workspaces use what I've done, but other widgets can even use my data level work!
A Toolkit That Fits Those Needs
Qt is an awesome toolkit. It is, however a general purpose toolkit. Ditto for the other libraries in kdelibs. They all lack what is needed to meet the above motivations. Plasma fills those gaps and provides a great way to write widgets and workspaces for them.
It isn't something you'd write a traditional monolithic app with (e.g. Digikam, Krita, K3B, etc), though you might use Plasma inside your app for the parts that have the aforementioned needs. It isn't meant to support the monolithic app concept on top of it, it is meant to support the componentized "app made of apps" concept. Nothing more, nothing less.
If we look around at what others are doing, whether it is companies like Apple and Microsoft or projects like Moblin or GNOME, no one is approaching it this way. Everyone is still making separate silo APIs welded into purpose-specific workspaces. I don't believe that "write a new workspace from scratch for every device on top of the generic toolkit" is a viable strategy in the new era where the device spectrum reigns supreme. In fact, I think the web itself is going to find itself one-up'd by the device spectrum reality and will experience displacement in the coming years. And I certainly can't imagine GNOME Shell running on my phone, no matter how good it would be on the desktop.
So this, then, is what I was writing when I started on the first classes in Plasma. Looking back all that was there, but I couldn't enunciate it because it was a new set of thoughts and ideas rolling around just out of reach. It is also what I see in the work of the others who have joined in on Plasma and made it more than I ever could have on my own.
I'm really excited that we're seeing the first device making companies picking up our API and building workspaces around them. It brings tears to my eyes. :)
Do You Want To Do This Too?
Would you like to do this too? I know it isn't for everyone, it's just a certain brand of odd fellows who think this is great, interesting, cool stuff. If, however, you are one of those people, libplasma is there just waiting for you to explore.
We have several ongoing projects of our own to create workspaces, with new ones such as Plasma Classroom just starting (more on that in a blog entry later in the week). But don't let what we're doing limit what you would do. Maybe you want to do something completely different. Maybe even just for yourself or a certain group of friends.
If you want to work on widgets, we have a growing number of tutorials and examples, and would welcome more if you'd like to write some.
If you want to make a new workspace ... well ... we haven't really had anything good for you. You'd have to rummage about the libplasma API, maybe read how Plasma Desktop or Netbook is stitched together. But documentation? *chortle* Well, that just won't do. So we've started a page, for now on community.kde.org until it is ready for the tutorials section on Plasma Desktop, that will document everything that goes into making a workspace shell, the way I'd always wanted to ever since picking up maintainership of Kicker all those years ago.
Questions? You can find us on irc (#plasma in irc.freenode.net) and our mailing list.
BackRead original postSend to a friend
Add comment
Add comment Show all posts
|
|
| |
|