The problem with Linux distributions.

OK, before I say anything else, let me just assure you Linux lovers that I am a fellow Linux/UNIX lover, but I’m not talking about the Linux kernel itself in this article, but instead, the distributions that ship with Linux.

Linux distributions are amazing considering they’re free (speaking in a general sense). But there are multiple problems I see regularly on nearly every Linux distribution.

One – the lack of attention to detail.

(i) The lack of attention to detail is apparent on most operating systems, there is only one operating system I’ve ever seen that really takes attention to detail to the top (I’ll get to that later).

Anti-aliased rounded corners – if you can’t anti-alias it, don’t round it, it just looks appalling. Here are some examples:

Ubuntu 13.10 Window (Top Right)

Ubuntu/Unity 13.10 Window (Top Right)



MATE 1.6 Window (Top Right)

MATE 1.6 Window (Top Right)



Xfce Window TopRight

Xfce 4.10 Window (Top Right)



It’s not just those desktops that do this, it’s LXDE, KDE (these are mitred at least, but still not anti-aliased), and more that I’ve probably never heard of.

BTW, it’s not JUST most Linux distributions that do this, it is also Windows 7:

Windows 7 Start (Top Right)
This is the Windows 7 Start menu (Top Right), visibly jagged.

(ii) borders that are lighter than one background that it borders but darker than the other, or only slightly darker than both backgrounds surrounding it. Here is an example:

Xfce Window TopRight

 From someone who develops and designs websites, that looks awful, it’s messy. It looks tacky or botched, even. The  answer is not to make the border darker, because you’d need an absolute black border to make it fit in, and that would look worse. The answer is to make the border solid black, but give it some alpha, make it semi-transparent. This way it will blend correctly with any background colour perfectly (Look at OS X, they’ve done it since day one, they even had anti-aliased rounded corners in 2001, come on Linux! Catch up!).

(iii) A lot of the time, objects are tightly squashed together, it makes the system look crowded and cluttered. Here is an example:


 As you can see, the green circular lizard button is pressed right against the edges, and directly next to it are icons and no clear boundary or spacing between them, when things are packed together too much, it can make things hard to spot quickly.

(iv) I often see aspects of systems messy and tacky. Take this next example:


The icons used in the toolbar are generic, they don’t look fitting with the background they’re on, if the icons were a dark grey with an inset shadow (like the icons inside the window action buttons), it would look really clean. The use of skeuomorphism doesn’t always look good. Also, in this example, there is no clear division between toolbar and the location bar (the bit where it says “> Home”), maybe put the location bar inside a light grey box with a darker grey bottom border inside the white files and folders area at the top.

A few more things to do with this example is the side bar and its contents. It’s the same colour as the background, but it has a border with a lighter highlight at the top to make it look somewhat outset. And then there is the contents inside it, instead of chopping off the end of green box around the name of the folder, don’t make the sidebar scrollable. Instead, just wrap the icon and the text with a box with a similar style to the one currently used, but instead of cutting the box off, cut the text off inside it with a “…” or just fade it out the closer it gets to the edge and then finally make it invisible. Then all it should require to reveal the full name is a hover over area and then a tooltip to pop up with the name inside it.

Then this next example (still part iv):


That search box has this light green inset glow, it doesn’t look fitting, it looks tacky. You can also see parts of the black background through the green glow, it’s quite messy when you look at all the details.


All of these details may seem trivial, but when you add them up, it’s clear that there is a serious problem throughout the different systems.

Two – the lack of standardisation.

I’ve seen this problem time and time again in the Linux community. There are new and upcoming display servers/compositors that are all trying to supersede X11, the main ones people are talking about are Wayland and Mir. There needs to be one central organisation that sets the standards and sets new goals and deadlines. The Linux developer community would communally work on these goals (I guarantee things would happen, quickly). This organisation could look at commonly requested features from the community and check if they are good ideas to implement. There could be polls if the organisation are unsure, then the public could vote for themselves.

There would be a base system with these features:

  • The Linux kernel.
  • A modern, standardised display server and compositor (something like Wayland/Weston).
  • A modern, standard GUI toolkit that can be easily themed with CSS-style code by the user. Then the developer should be able to theme their application with CSS-style code or directly drawing to the widget’s graphics context (for animations and special effects). Make it as easy as possible, basically.
  • A sound server.
  • A networking server.
  • Other important operating system elements.

There would be different versions with the same base system:

  • The full version – this would come with all of the bells and whistles like cool animations, more anti-aliased elements and extremely polished themes.
  • The light-weight version – this would be made for running older machines, wouldn’t be hard to maintain, just use the full version and remove the effects and animations and anti-aliasing.
  • The server version – this would just be the command-line and would include lots of interpreters (PHP/Python/Perl/Ruby etc.) and server software (Apache/Nginx etc.).

With this model, I’m not suggesting we limit everyone to one look and desktop. 3rd party developers could develop new themes, these themes would use the same toolkit and desktop environment, but the themes could make vast changes to looks and layouts. So a theme layout could be XML-like. A theme-layout would have access to everything below:

  • Open applications (windows, titles and active/inactive states).
  • Application menu items (so the theme could do something like Ubuntu or go Windows style).
  • Desktop items (icons, titles).
  • Installed applications and categories.
  • Current Time/Date.
  • Battery level and time remaining.
  • Volume level.
  • Wifi connections.
  • Notifications.
  • Quick launch shortcuts.
  • More.

Themes could change where and how any of the above are shown and change the looks of each and every one.

Themes would be able to change everything below on any element:

  • Shapes (with vectors or equivalent).
  • Borders (size, type, colour, gradient, alpha, blur under).
  • Shadows (size, radius, colour, gradient, alpha, position, blur-under, inset).
  • Backgrounds (positions, colour, gradient, tiled/normal images, alpha, blur-under).
  • Fonts (smoothing level, size, colour, gradient, shadow, bold, underlined, strike, italic, upper/lower/normal case, alignment).
  • Rounded corners (anti-aliasing, radius, mitre on/off).
  • Dragging/resizing regions.
  • Overall Transparency.
  • Animations (via a scripting language for complex animations such as apples genie effect).

Themes would be able to define taskbar areas and positions. The theme would be able to respond to events with some sort of scripting language. The theme would decide where and how notifications are shown. The theme would be able to play sounds to let the user know a notification has arrived. If a theme crashes, there would be backup theme (the default theme, in other words) you could activate with some sort of CTRL+ALT+DEL shortcut, and failing that, get to a tty.

Themes would be able to be as minimalistic or as full on as the theme creator wants, without having to change desktop environments and make sacrifices on features.

I believe a system such as this would do well. I would be designing themes straight away.

This theme system could probably be built on WebKit and javascript, where there is no “window manager” as such. Windows are just elements, and a windows content is shown inside that element, and the window element CAN be handled by the theme or the application itself to accomplish certain effects/animations.


I’ve gone off on a bit of tangent here, but still, my point stands. This lack of standardisation between systems is what’s causing the problem of there being bad compatibility and lack of big companies porting their apps to Linux. If this whole organisation were to start off, I’d be happy to help out. Not with the coding aspect of it, I’m not knowledgeable enough with C or C++ to code operating systems, but I’d be a designer and I’d write apps in Python or something (maybe settings panels and stuff). I believe an operating system like this would do very well. I’d prefer it over Windows and OS X any day, purely because of the flexibility.

Thanks for reading, hope you enjoyed reading it as much as I enjoyed writing it!

[PHP] Random Code Generator

This script is used for generating random strings of any chosen length.

WARNING: This script should not be used for generating salts when hashing passwords as the results generated by this function are not cryptographically secure. I will post another PHP tutorial for cryptographically secure salt generators.

The function

function Random($len)
	$charArray = array();
	/* this is our "alphabet", you can change this
	 * to create random strings with different characters.
	$alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
	/* loops $len times and adds a random character from
	 * $alpha on each iteration.
	for($i = 0; $i < $len; $i++)
		// -1 becuase offsets start at 0.
		$charArray[] = $alpha[mt_rand(0, strlen($alpha) - 1)];
	// shuffle the chosen chracters for another mix up.
	return implode($charArray);


echo Random(8); // outputs something like "d8alrn5x"


My Workstation.

My workstation (seen below) is what I use for all home computing, it’s specifications are as follows:

  • CPU: Intel Core i5 3570 3.4GHz.
  • RAM: 8GB Corsair Vengeance Pro Blue – soon to be 16GB.
  • SSD: 240GB SanDisk Extreme.
  • HDD[1]: 1TB WD Caviar Black 7200RPM.
  • HDD[2]: 160GB Seagate 7200RPM.
  • GPU: Nvidia GTS 450 1GB – soon to be upgraded to a much better card.
  • Motherboard: Gigabyte Z77-DS3H.
  • Case: Coolermaster HAF-X.
  • OS[1]: OS X 10.8.
  • OS[2]: Windows 7 Professional.
  • OS[3]: Windows XP Professional.
  • Monitor[1]: 22″ LG HD 1920×1080.
  • Monitor[2]: 22″ LG HD 1920×1080

It’s a fast computer, it mostly does everything I need. I just need some more RAM and a better graphics card as I sometimes run out when using lots of memory intensive applications, and when using virtual machines and 3D graphics can sometimes be jittery and sometimes Photoshop gets choppy on hi-res images with lots of different layers, styles and effects.

Here is a picture of it (note: this pictures shows the computer running Windows 7, OS X 10.8 is my main operating system):



BTW, I do have a proper computer chair now, this picture was taken while I had my temporary chair.


Thanks for reading!

About me, Caelan Stewart.

I am Caelan Stewart. I am a web developer living in South East England. I don’t specialise in just one thing, I can code all manners of web applications. You’ll most likely see most of them posted here in future.

The main technologies I work with are:

  • PHP(5) – I can code OOP/Procedural. Doesn’t make any difference; OOP can just be easier to work with.
  • HTML(5) – Everyone with any interest in websites knows HTML (or part of it) anyway. Although coding clean HTML with no bloat is something that isn’t commonly seen anymore.
  • CSS(3) – Flat/Skeuomorphic/2003, you name it, I’ll code it.
  • JavaScript(jQuery) – jQuery is a huge asset to client-side coding, AJAX, Animations and many other handy features are a PITA without jQuery, it’s doable, but when libraries like jQuery are as widely accepted as they are, you’d be silly not to use jQuery (or any preferred equivalent). Although with smaller and simpler functions, standard JavaScript wins hands down, especially when you need topmost performance.
  • MySQL(improved) – MySQL has been the web standard for a long time, newer database options are beginning to pop up, so it wouldn’t hurt to learn others.
  • JSON – I use JSON mainly for transferring data client-to-server or vice versa. But I also use JSON for configuration and language files in my web applications. It’s very clean and straightforward – easy to use.

As well as web development, I’ve taken a liking to graphics. I usually make all of the graphics for my web applications myself. Sometimes, however, I  use free icon sets because this saves loads of time making hundreds of icons. In fact, you’ll notice one of those icons is used as the favicon here.

Here are some other things I like to do:

  • Listen to music – not just one genre, I listen to many both old and new.
  • Play table tennis – it’s a fun game, I got quite good at it, but I haven’t played in a while.
  • Kick a ball around – not serious games, just literally kicking a ball around.
  • Mess around with different operating systems – I use OS X mainly, but sometimes I test out different distributions of Linux and very old versions of Windows just for a laugh.

There are many other things I could tell you about, but it would take (p)ages.

Stay tuned for posts about my projects or tutorials for different effects/functions.