I’ll be making my notes available

After the TEE (November 19th) if any student in WA finds them useful (although most of them will sadly be for outdated subjects that are no longer taught next year).

They will be in PDF format, Copyright to me but licensed under BY-CC-SA.

Subjects are:
TEE Applicable Mathematics,
TEE Physics,
TEE History,
TEE English Literature,
Media Production and Analysis 3AB
Computer Science 3AB.

You’ll have to put up with my messy handwriting and drawings though, sorry.

I’m just going to leave this here

c++ube parity achieved with KWin!

Im just going to leave this here

How-To transfer notes from your computer to your HP39xx/40xx calculator

[This post isn't compiz related at all, regular readers can skip over it, this is perhaps to save the few who have been desparately searching Google / the HP documentation with no useful results]

Ah HP, how your documentation for one of the most convoluted programs I have ever used is completely useless to anyone.

Sigh

COMPLETELY USELESS TO HUMANZ!

Thank you for pointing your users to a completely useless piece of documentation on the subject of trying to transfer notes from notepad to your calculator. May your documentation team be forever fired.

So seriously, here is how you do it:

Step 1) Actually use the bare documentation above to make some form of a start.

Plugging in the calculator and installing the Windows [TM] only software (sigh) is fairly self explainitory. Once you open up the terribly named Conn3x application, plug in your calculator and it should automagically pick up and give you a totally useless view of your filesystem and not an interface to your calculator.

Selecting a dir

Selecting a directory

On the sidebar have some new empty directory ready that you created in Windows Explorer. Highlight that dir and ensure that your calculator is plugged in.

Its not working

On the calculator press Shift+ 0 (Notepad), create a new empty note then hit send. When it asks you where scroll down until you see ‘USB Disk Drive’ and pick that. Pick the first option on the next menu then it will complain that it needs to format the drive (yeah I know, wtf right?), anyways, go ahead and hit yes if you are sure the directory you have selected in Conn3x is empty. Once that’s done you can send your empty note over.

Step 2) Work around bad designs

There is one problem when you send that empty note, it gets saved as a .000 file. That’s really … useful? Anways, right click it in explorer, open with, blah blah blah wait for Redmond to do its thing, open with Notepad (what, you were expecting to edit it with Word? Hahaha) and type in your brilliant note that will help you pass your Graphics Calculator OK test/exam/whatever. Save the file and don’t change it’s extension

Then back on your calculator, delete the note you just created earlier, hit the RECV hotkey, select Disk Drive (USB) once again, pick the file, download it, done.

The NOTEYay!

Hope it helps anyone in need – Sm

Debunking the ‘compiz is so bloated’ myth

I’ve got a Google Alerts hint set on compiz. That means that whenever something new pops up in Google’s index about compiz, I’m usually one of the first to know. Google sends me a nice little email saying exactly who is saying what about it.

A recent trend I’ve noticed is this myth that compiz is bloated.

My argument here is that compiz is not bloated but rather it is modular.

That last link is a nice little definition of bloat from Wikipedia:

Software bloat is a term used to describe the tendency of newer computer programs to have a larger installation footprint, or have many unnecessary features that are not used by end users, or just generally use more system resources than necessary, while offering little or no benefit to its users. – (c) Wikimedia Foundation

So the way I see it, there are three ways of defining software bloat:

  • Large installation footprint
  • Lots of unnecessary features
  • Large memory / CPU footprint

I’m going to be focusing on the last one more, since that is the one that would be of most concern.

Large installation footprint:

Considering the fact that compiz has tons of plugins, the installation footprint of compiz tends to be quite large. Perhaps not as large as most windows applications these days but certainly larger than your typical window manager. However compiz by definition is a modular window manager. The size of the actual executable for compiz-0.8 with debug symbols and all is 909.3KB as I measure it here. Metacity comes in at a more lightweight 531.1 KB but it doesn’t have a plugin interface (that I know of). Compiz 0.9 is slightly heavier at about 3.3MB but is written in C++ which means lots of symbol mangling and repetition but it has the OpenGL and Composite bits ripped out. This makes it rather lightweight for a C++ version of compiz. (libopengl.so is about 2.0 MB, libcomposite.so comes it at about 842 KB)

Compiz has gotten a bit bigger in that sense but it has been redesigned so that it is not as bloated by including so many features in it’s core. You can use compiz as a similar window manager to metacity without all the opengl and composite stuff.

What tends to be large is all the plugins compiz comes with. You have move, resize, place and decoration as sort of essential plugins (all quite small) but then you have the plugin packs with quite large plugins. However compiz itself is quite small.

Lots of useless features that nobody ever uses

A fairly good example of bloatware was probably the first one that comes to mind, which was Windows Vista that comes from our friends at Redmond. You’re probably thinking though ‘You so crazy! Comparing a window manager to an OS!’. But consider this, most of the ‘features’ that came with Vista that nobody ever used or wanted (*cough* Windows Mail *cough cough* Windows Activation) were part of the core distribution of the OS. The compiz plugins, asides from Move, Resize and Place are not really.

YouTube videos tend to show off how much bling you can fit in a 10 minute screencast with compiz. That causes some pundit to say ‘Wow, look how pointless that is’ which eventually manifests into ‘Compiz is bloated because some pundit saw useless compiz features on YouTube and didn’t actually use a minimal version of compiz’. Remember that all this ‘useless bling’ are implemented in plugins, we have very strict rules about what goes in core and the more stuff that can be taken out of core the better. (Example: OBS plugin, or more recently the entire OpenGL and compositing bits).

In compiz 0.9 we have a CMake buildsystem that allows for very flexible builds of lots of plugins in one pack or just a few. It is possible for distributions to ship a version of compiz with just the core functionality quite easily.

Memory / CPU footprint

People seem to be concerned these days with ‘the amount of memory and CPU time compiz take up’. First of all, if compiz or Xorg have high CPU time /when idle/ than it is most likely your broken proprietary graphics driver. Rendering should not happen on the CPU. Secondly, just in case the WRAP loops for lots of plugins do happen to take up CPU time when they just check variables then disable them, we have added code that allows plugins to have their functions called at all, which means less CPU time wasted on superfluous variable checking every paint cycle.

Planet readers, here is where it starts to look ugly, so for the memory argument, please just hit the more tag

Read more »

The iPhone/iPod Touch scene is starting to fall apart….

This post is going to be a whole bunch of Apple whoring and hating at the same time. If you find the whole thing irrelevant then please, move right along ;-) .

Ever since the launch of the Apple iPod Touch, I’ve owned once since December 2007, had it repaired once, but still a device of the same generation (1st Gen). It’s a great little device for what it is worth, I have found it incredibly useful as a music player (for which it has transformed me into a total music buff) and as an internet device. I don’t really use it for much else. But the nature of the air seems to be telling me that it’s time to move on to something more open.

I’ll save most of my concerns for Apple for another blog post (which will be far more interesting than this one), but the general feeling is this: Apple has been super-monetizing their industry since mid-2007 and has gone totally downhill. They’ve reported their most profitable quarter yet.

I guess the most interesting thing about the scene was Jailbreaking. I was on 1.1.1 at the time and jailbreaking was as easy as pointing your device at a website. Apple’s locked it down a bit since then, now exploits must be done at the non-rewritable firmware level. I have a lot of respect for the iPhone Dev Team and Chronic-Dev for this.

The best thing about Jailbreaking was that it gave you total freedom. And there was a community that really enjoyed this total freedom, there were free and sometimes open-source applications distributed through an (although closed source) Installer.app. People were beginning to write an API, everything was going well. It was reminiscent of the current Linux scene we have today.

Then came system 2.0. System 2.0, as you probably know introduced the App Store which introduced the ‘Apple’ model for iPhone hacking. It was no longer about community spirit but rather $$$. How much money could you make out of the iPhone. Apple gets a 30% cut. Quick everyone, make an iPhone app, they are profitable! Soon, lots of developers left the community scene in pursuit of bigger dreams of making money on the App Store. I don’t blame them – If developers want to be paid, developers should be paid. The only problem is that creating an environment where hacking turns into a buisness where rather than empowering users you are now making them subservient to you ruins the community.

Apple of course, was ridiculously draconian. No NC-17, No Emulators, No Turn by Turn GPS, No this, No that. Probably the biggest two were no executing arbitrary code and no background processes. That eliminates 99% of potential applications that could improve the iPhone/iPod Touch itself. Developers new to the scene found this really annoying and quickly found the much larger jailbreak audience, which Apple continues to try and mistakenly plug up. Of course, these developers are used to the ‘Pay me for my software’ model rather than ‘I’ll give a bit to the community and let it grow’ model that open source software provides. The jailbreak distribution model then picked up this model to accomadate these developers. Soon the other ‘hacker culture’ developers noticed and started using this model.

Now what this has done is alienate the very users who came together for the sake of freedom on a restricted platform. Anything mildly useful is now a pay-for app buried amongst 1000s of not-so-useful themes. Even developers of previously FOSS applications are negotiating with their original copyright owners to close source them and licence the software so they can make a profit. It’s an absolute mess. Abusing the community that created you. As a user of this software, I am now alienated because it’s not possible to pay for it unless you are over 18 years of age (credit card needed).

I’ve been looking at a Maemo based phone (N900) for a while now. Hopefully that will stay open…..

Why things are the way they are

(or: Why isn’t my feature being implemented!)

Someone in the comments asked me to address the issue as to why we don’t yet have commonly requested functionality such as minimized window previews and input redirection. This post will address this and some of the solutions that we may have in the future.

Minimized window previews

This applies to a whole bunch of things. From the fact that we don’t have minimized taskbar thumbnails, showing minimized windows in scale, showing minimized previews in switchers instead of ugly icons etc etc etc.

The right way of doing things

The whole problem begins with the fact that there is no right way to handle minimized window previews. At best we could have something like this right now, in order from hacky to clean

  • #1 Snapshot the window and raster it to a texture before the window is minimized. This is what we used to do in Beryl for the window previews plugin:
    • Pros: Easy to implement, no need to mess with the window itself
    • Cons: No animated window thumbnails, takes up unecessary memory, causes lag when rastering large thumbnails
  • #2 Temporarily unminimize windows:
    • Pros: Easy, just tell all the windows to minimize
    • Cons: Severly messes with windows, lots of unecessary havoc going on as we unminimize a bunch of windows, lots of unecessary hacks in order to prevent animations etc etc etc
  • #3 Tell windows they are minimized, but really just animate their minimize, set the minimized hint, don’t display them and shape out their input
    • Pros: Window is always mapped, we always have it’s texture to draw, live thumbnails
    • Cons: Messes with windows, window thinks it’s minimized but it really isn’t so it might stop drawing or do erratic things
  • #4 Don’t tell windows they are minimized, animate their minimize, don’t display it and shape it’s input
    • Pros: Window acts as though it was still displaying, videos still play etc
    • Cons: Games etc would still expect input from the user, would not pause etc

You’re probably leaping to hit the comments button and say “But KWin and Mutter do #3 and #4!”. Yes they do, although it’s always been disabled by default in KWin.

The main problem comes with the fact that there is no way to tell a window to keep displaying but not expect any input.

There are a number of solutions but they require changes elsewhere:

  • #1 Have an input minimize event in X. This requires a _lot_ of work in the X Window System and might result in an ABI change – the last time that happened was when XI2 was introduced.
  • #2 Adjust EMWH to accoutn for this as KWin developer LucasĀ  Murray suggested to me

Both would provide a standard way of telling windows they have this particular state, so any application that doesn not behave as expected would simply be broken.

X Server Input Redirection

Yes, we’ve been waiting for years for this.

The good news is that all the code to do this is there. You can go compile an X Server and XComposite with input redirection right now if you want.

The problem is that it keeps on getting delayed. This is understandable since there are a lot of architectural changes going on in the X Server.

We probably need to push it harder though.

The Road to Compiz++ Part One: Plugin-Plugins

So from now until we finally make a Compiz 0.9.0 beta release I will be doing some short blog posts on what the differences between Compiz 0.8 and Compiz 0.9 are for both users and developers. Compiz 0.9 is a complete re-thinking of Compiz 0.8. It’s like KDE4 was to KDE3. Totally new frameworks. Totally new buildsystem. Totally new API. It’s supposed to clear the ground from major architectural flaws that were in older versions of compiz to make development far easier and faster even for future version of compiz.

So without further ado, here starts the series:

Plugin Plugins (or Plugin Plugin Plugins or Plugin … Plugins)

One of the main problems with the 0.8 compiz series was that it was not easy to extend plugins and it was not easy to make library plugins. You could expose functions to other plugins from within your own plugin but it only just sort-of worked and there were all kinds of problems that needed to be overcome for it to work with a lot of unclean code that was essentially redundant, made the whole thing unstable and wasted a lot of time. It’s not quite as simple as importing some plugin as a lib then calling it’s functions, rather it had to do awkward function maps that were inserted as what looked like new plugins that other plugins then accessed with a special number then had to rely on the function map being correct and nothing moving around then had to call functions indirectly.

Compiz 0.9, with it’s object oriented design, strives to fix a lot of the problems associated with this. To understand this, we classify any plugin that works with other plugins into 2 categories:

Extension plugins

These plugins exist soley to extend the functionality of other plugins. For example, cubeaddon extends cube directly by hooking it’s functions as does scaleaddon extending scale. Animationaddon extends animation by working with animation’s internal animation manager to add new animations. It’s a one-to-one relationship between plugins.

Getting both these methods to work is complicated enough, for the former you need to handle internal functions being hooked by other plugins and for the latter you need more function maps to explain to other plugins how to add more objects to their plugins.

Compiz 0.9 has an Object Oriented design. This makes sense considering that we are working with all sorts of real things evident to the user, windows, screens, outputs, animations, plugins etc etc. It’s not like everything is a copy of a copy of a copy. This has large benefits because it means that a lot of the code to manage objects is already there and you don’t need to worry trying to tell other plugins exactly how to add objects to a queue. You just provide a base class their object derives from and that does all the work. As for the former case, there is now far more control over how functions are hooked.

Library Plugins

Library plugins are plugins that are loaded into compiz but don’t actually do anything on their own, rather they just provide functionality that other plugins can use. An example of this is the text plugin or the mousepoll plugin. The whole purpose of these library plugins is to provide functionality to other plugins that would otherwise be very similar code that is duplicated again and again. It also allows some kind of consistency.

Library plugins in Compiz 0.9 now provide real objects to other plugins rather than just function tables to manage internal variables. This means that you can take some text, render it and draw it in a few lines of code rather than having to go through a whole bunch of internal functions to make it work. The plugin only needs to be loaded for some context settings bits and pieces. Lots of functionality will be collected into library plugins for use by all plugins because they are now really easy to write. For example, we already have a compiz-toolbox plugin which performs miscellaneous functions used by a lot of the switcher plugins and both staticswitcher and switcher now use that plugin rather than duplicating lots of code. It means that any plugin now that will be similar to switcher and staticswither can just use those functions rather than having to understand any potentially confusing internal code.

The end result

  • Things are organised much better
  • Tricks that certain plugins do can be expose to other plugins rather than having to rewrite them
  • Extension interfaces are now easy to write

Poetry

When will our compiz
Be supported on haiku
That is the question

Screenshot-Haiku [Running] - VirtualBox OSE-1

Forum

Hey everyone,

If you see spam on the forum, please don’t feel shy to report it, it seems that we are getting more and more these days.

If the spam takes a while to go away, we apologize, it would either be that none of us are awake / around or that we are having trouble with the forum software again (recently I spent about an hour trying to prune out spam because I couldn’t log in _at_ _all_)

I am discussing things with the forum admin and iXce.

- Sm

3 things:

1) Your favorite switcher

1) Your favorite switcher

2) Your second favorite switcher

2) Your second favourite switcher

3) Desktop of the week - featuring embedded projectM + gnome-terminal + conky-colors + mirav2 + cairo-dock

3) Desktop of the week - featuring embedded projectM + gnome-terminal + conky-colors + mirav2 + cairo-dock

Bits and pieces:

  • I’m on final year-end university entrance exams so I’m pretty quiet in all facets of life these days
  • We are still doing maintenance 0.8 releases and the next release will have some fixes for some rather annoying bugs:
    • Not crashing when there is no mipmapping extension when mipmap blur is on (very rare case)
    • Wobbly and resize obey the constrain_y option in move (so windows can’t be resized or ‘thrown’ offscreen where they cannot be dragged by titlebar)
    • Getting the largest possible icon from libwnck for Shift, Ring, Switcher, Staticswitcher [this fixes blurry looking icons in /some/ cases]
    • Fixed some crashes on 64-bit arch due to 0 != NULL
  • Still waiting on cube from rcxdude – I sent him a mail about it, last I heard it is almost done but he tends to drift away from compiz at places
  • 0.9 release is still coming, hopefully by the end of this year.
  • I finish exams in the middle of November, so hopefully things should move a little faster then.