New project; Hypercaine
Good evening guys!
Firstly, i much apologise for once again "abandoning" the blog. With VTemp out there, i decided to take some time to myself. However, that didn't last long, and on the 29th of January, i was already at work on my new project. Some of you will no doubt be aware of what it is. For those that aren't, i'll post up a link to the project page; http://www.innuendo-eu.co.uk/Hypercaine/
Read it? Good. Even if you haven't, it's cool. I mean, it's not like i'm not gonna tell you what it is here is it ;)
I like to call it a "3D Desktop Environment". Realistically, it's a suite of applications performing one purpose each. Because of this, i call them "Modules". What's unique about these modules is that they can be rotated and zoomed in 3D space. It's a completely different take on minimising the space taken up by UI's. What's marvellous about my implementation is that YOU control the angles and zoom, and no functionality is lost regardless of the angle or zoom level chosen. You could rotate it so it's 10% as wide as it was originally, and the UI would STILL be fully functional. What's equally impressive is that the rotation is done on the interface, rather than an element within a window. Sure, there's a window there containing the visible UI, but the window itself is transparent, doesn't have an "application title bar" and is completely click-through to things behind it. If you click on part of the interface though, you're interacting with that Hypercaine module as you would any other application.
Being based on the Embarcadero Firemonkey framework means that all UI's of Hypercaine are GPU accelerated. It also allows VERY smooth animation with NO CODE NEEDED. There's a whole range of effects you can add, and everything looks so pretty. It was too good to be true though. It's also cross-platform, but this was to be it's downfall for my own purposes. The limitations of Firemonkey did prove to be an issue at first. For example, it's not possible to mix components that aren't compatible with Firemonkey into a Firemonkey form. This means the traditional Windows-style components (known as VCL) that have been used for over 15 years can't be used on a Firemonkey-based form. This meant i was severly limited in what i could do with Firemonkey.
I then made use of a trick i'd read about some time before which fixed everything (well, almost); changing 3 letters in the project file to allow me to add a VCL form to my project, then changing those 3 letters back making it a Firemonkey Application. From here on in, anything that was VCL-only and not compatible with Firemonkey could be dropped onto the VCL form. What's awesome, even if expected, is that all the properties of the components on the VCL form can still be set when "called" from the Firemonkey form, as if there was never any inconsistencies in the first place! Suddenly, it WASN'T too good to be true.
When building Hypercaine's first module, the Quicklauncher, i came upon the issue of extracting icons from exe files. See, due to Firemonkey only being ~6 months old, it's nowhere near as mature or documented as VCL is. This means you've got to either get lucky or do it yourself. In my case, i designed the icon extractor in VCL, set it up to accept parameters (e.g. the exe to extract icons from), and then built the quicklauncher UI in Firemonkey. When you extract an icon, it's actually running the VCL extractor in the background. This will probably change before release and be built into one application (using the method mentioned earlier).
The next module, the Calenmdar and Schedule was exceptionally easy to build and there was no worries about inconsistencies.
The latest module, the Audio Player (called "H-ATOM Player", or "Hypercaine - A Taste Of Music") gave me the most issues. An audio player is usually shown as one of the simplest projects out there. However, most of those that are shown don't have the basics such as a trackbar or volume control! They use a progress bar to show song progress, and their idea of volume control involves changing the master volume of the computer - not ideal.
I had 2 options for playing media; an old standard mediaplayer component, or Windows Media Player. Each has it's advantages, but only with WMP is it easy to get song information (e.g. artist, title, bitrate, etc). Sure, there's numerous ID3-reading routines out there, but all of them have some sort of issue. Now, 3 nights of work has yielded an almost finished Media Player module. There's still some things to clean-up to do, but so far, it's all working well.
I've got plans for the following modules; Clock, Twitter, Quicknotes, System Information, VTemp Information Integration, SSD Read/Write speeds. I also want to get these done as well; RSS Feeds, Weather, Youtube Video Player, Facebook, Tumblr, but i can't guarantee them. RSS Feeds should be relatively easy, but the others in there could be pretty complicated. Facebook is least likely to get done due to the platform being a pain in the ass to work with.
SSD Read/Write speeds is actually quite complicated too, as i'll be using the WinSAT interface to get speeds, but there's so little documentation on how to interface with it. You may think that it only outputs 5 scores, but in reality, it has a massive amount of performance stats under the hood.
VTemp integration will require a patch for VTemp itself, but it's honestly not that big of an issue.
-----
The other important thing about Hypercaine is that i want to make it extendable. By that, i mean i want other developers to be able to build their own modules and output it in a Hypercaine module. For this purpose, i'm going to put together some prebuilt modules that don't contain any information themselves, but have elements already setup and good to go. They'll simply execute the blank module most appropriate for their data type with a parameter pointing to a config file, and the Hypercaine module will handle the rest. In this way, Hypercaine itself becomes a framework that other developers can interact with. Now, due to the nature of this sort of thing, i'm going to be making it so it can only display information, and can't interact with the system. Users can interact with the interface, and developers can put links and such in, but it won't allow developers to use Hypercaine to, for example, delete the contents of the users drives, or change their HOSTS file, or anything else that could cause a security issue.
Overall, i'm very excited about the project, and aiming to make it my best product so far. As usual, you can expect it to be released completely free of charge without exception.




