There are many successful one man software projects. I can think of many - you don't have to look very far. For example, Resourcer was made by one guy: Doug McKenna. I believe the game Glider Pro was written by one guy. Woz wrote the BASIC interpreter for the Apple I. I've done one person projects myself to deliver application software before many times.

My advice is that you don't just demand more people. Get their requirements and make a realistic plan of how you can complete the project by yourself. By "get their requirements" you need to have a good understanding of not only what the software needs to do, but what an acceptable solution might look like. Is it OK to use open source third party libraries in your solution? Whether they will allow this will make a big difference in how long it will take.

Come up with at least a high level design for the software/system. Decompose it into parts. Identify those parts that you know how to write and those where you are going to have to gain additional expertise. Make an estimate as to how long it will take to make each part. At this stage, your estimate should consist of two numbers. The earliest you think it could be finished if everything goes right and the latest it could be finished in the 90% worst case scenario. For parts of the project you know well, your estimates will be a little tighter. For parts of the project that you don't know well, your estimates will have to be looser. Budget time to get up to speed with any technology you don't know. Be a little generous with yourself here. If you do the project by yourself, it is actually a blessing because you will gain new skills by working in areas outside your normal expertise.

Make a list of any things you might need to buy in order to do the project. This could be computers, other equipment, software libraries, tools, etc. You might want to shop around for third party libraries to solve some of your problems. For example, let's say you decided to use XML in your project, you might need to shop around for an XML parser. Make sure it meets your technical AND business requirements. For example, can you use LGPL stuff in your project? How about GPL? If you go commercial - do you have the budget? Does the vendor require a royalty? These are just some of the questions.

Next, plan a proposed team that could complete the project. Your company might prefer to use contractors for this if they do not want the burden of additional full time employees. You probably will need at least one test engineer. This person could be a contractor. Speaking of quality, you need to understand their quality requirements. This will probably be driven by who the customer is and how critical the system is. If your bosses are non-technical, be prepared to answer why betty the office manager can't do your testing or why the users can't just test the system when it is deployed. Explain that while both of these things might have some value, those ideas basically mean that you are testing the software yourself which has risks because programmers tend to get myopic and have a difficult time testing their own code.

You need to have a plan for deploying the solution. If it replaces an existing solution, then the deployment plan will be more complex.

Then when you propose it to your bosses, lay out the various scenarios. One where you do everything yourself, then another where maybe it is just you and a test engineer, and then maybe a third solution where you bring in some additional developer(s) who have specific skillsets that complement yours. Explain to them that the benefit of this third solution is that they don't have to pay you to learn technology X where X is important for a specific reason and you don't know X already. If you want to do a great job, you could estimate the costs of each of these solutions for them.

Also, keep your team as small as possible. If you are hiring developers, make sure they pass a code test. An easy way to do this is to setup a clean machine with just the development environment, pick a topic like Poker and give your candidate a printout of the rules, and ask him to write a program to sort poker hands. It doesn't have to be poker - it could be anything like that. This is the simplest way I know not to hire a complete bozo. Be aware that you might have to interview ten people to find one that is not a bozo. Having a degree - even a PhD - or having worked for a big name company does not mean they know how to program.

Hello, i've hesitated to put this blog post on KDE, afraid being told this is a crazy idea.Finally i'm open for challenges, at least this post shows an idea.

Plasma is maturing, more widgets have been added. As a result it enables some other possiblites.

Recently i've seen the beauty of Ribbon UI in Office 14 and Windows 7.And googling the Ribbon UI on Linux, found two implementations:GTK# version in Mono:It seems to be (maybe intended to be) 1-1 copy of M$'s Ribbon UI, where's their creativities?

Integrate KRunner into the main window. Application and its plugins can provide its own krunner plugin, the main window manage/merge them, To quickly search this application's actions, help info, quickly tag the document etc... anything that krunner can do. (You can see from my above pics, there's a filter button and a lineedit besides the tabbar, that's it).

Ribbon like menubar as i mentioned above, but merge the application and its plugins' sub actions( maybe need to extend kde's xml gui somehow )

My thought is realistic:1. Will nepomuk really be more usable with portable/distributed stored meta information ?I don't know much of nepomuk's server implementations, afaik it seems use a central database to index/store these information, so I've a question to ask : when user move his file to another local folder, will the file's meta information get lost , updated later(next time to index) or updated instantly (use inotify )? The first result(lost) is totally un acceptable, the second is OK, but nepomuk's value/power will be limited, the third is good, just stick to central storage.

2. How to implement it ?someone has suggested to use side-car file, other suggested xattr.There is a seems better way to implement it : file forks/resource forks (not process fork),http://en.wikipedia.org/wiki/Fork_(filesystem)http://en.wikipedia.org/wiki/Resource_forkIt's invented by Apple , store text file's encoding, applications' icon ...

Quote:Apple's HFS, and the original Apple Macintosh file system MFS, were designed to allow a file to have a resource fork to store metadata that would be used by the system's graphical user interface (GUI), such as a file's icon to be used by the Finder or the menus and dialog boxes associated with an application.

It tightly bonded/embed to a file unlike side-car file, but also bypass the size limit of xattrs(Extended File Attributes), the size limit is the largest file you can create, and you can also assign serveral meta info file to one file.This is a practise proof method,but only modern filesystem support it:Only Apple's HFS, Microsoft's NTFS, Solaris's ZFS has full support.

And extensively used by Apple(store all sorts of metadata) and Microsoft(store its system backup related infomation, security control info).

Oops the main linux file system, ext2/3/4, XFS, JFS... doesn't support it well.

3. Is it possible/hard to implement it under linux ? (you can skip the following paragraphs if you're not interested in implementing such things in kernel)

In my personal opinion, not hard indeed, i want :) and asume it to be implemented in VFS level (so all sorts of filesystem beneath this level gain support).The simplest way is to add a "dentry" to each "general inode", that from the filesystem's view(not user visible), a regular file can be associated with a "directory" too, all metadata files resides under that "directory".like this:/home/xx/xxx/a.jpeg ----> nepomuk.xml

user.encoding

user.img.source.url

....And make getfattr/setfattr related system call to lookup that dentry too, this method also remains backward compatible with xattrs (Extended file attributes), but remove the size limit put on them.

Or we can add new system call like getfmeta/setfmeta ....

Of course, we need more analysis/profiling to say sth. on the memory/time performance.:) Just make a predication, the extra memory requirement it introduces(an extra "dentry" pointer) is affordable, and there's no/very subtle extra time needed by open/write ..regular system call, and it will be fast than create side-car files, since we needn't to create/open the side-car files from user space and pollute a directory with side-car file per data file, kernel handles it ..

Also need some security concerns.

Anyway, to implement portable meta information, i think we need support from underline library/filesystem/architecture.

4. This method's disadvantages:

a.We have no POSIX standard to define the API, and Apple's HFS, Microsoft's NTFS and Solaris's ZFS use different api for similar functionalities. We may need to abstract the api to make KDE cross platform.

b.No major filesystems under linux provide file forks / resources forks support now. Need to implement it or make feature requirement.

c.We can't directly associate a xml as a file's meta info, since xml is not an appendable format, data corruption may happens when we update this file's meta info while user eject the source disk, suddenly power goes off ,etc.......... These problems need to be solved if we want to support portable/distributed meta information.

I just dumplicate the mail and add some more pics :)Moved to kdereview/plasma/applets/

It's mainly an applet for input methods, so that persons use difference input methods can share the same user interface and the unified systemsettings input method configure integration.And also include a standalone application and a control module for systemsettings now.

Its main features:

Multiple backend support, currently support SCIM and IBus(1.1.0+ version)

Able to float out and embbed into panel dynamically, The floating statusbar(a qwidget) is just a view on the same qgraphicswidget.

Skin support:

You can choose the skin to follow current plasma theme, then it will auto switch skin when user change plasma theme.

Use custom theme, support install theme from Get Hot New Stuff

Internally use javascript to layout svg, enable the abilities to do adaptive svg layout and "theme" the layout.

KCModule based configure, config pages for ui, backends are combined to one dialog.

Provide a standalone version with floating statusbar only if you don't want to add the applet to panel.

Its design is simple, just provide a dbus service for input methodsBackends(SCIM,IBus, fcitx ...) dbuskimpanel (org.kde.impanel)communicate by signals only.

Currently the above features are finished, Except:

Only one kcmodule for ui now, haven't provide kcmodule for backend,

The kcmodule is working, but lack help text, theme auto preview , other eyecandies........

The extra two themes are only make for horizontal statusbar and horizontal candidate window layout only, but default theme fully working.

And it's also stable now, no crashes in my everyday use.

The backend need to be configured before test this applet, see backend/scim/README and backend/ibus/READMEYou can even mix use SCIM and IBus for different types of programs(eg. scim for qt, IBus for xim and gtk), but you still have the same user interfaceand can't tell the difference without looking at their logo icon.

I'd like to include it in KDE 4.3 but it will be soft freeze is in early April,So i think i have to ask for review now.