This may be just what you’ve been waiting for: MKVToolNix 1.4.0.

To quote Mosu:

I’m releasing the new mkvtoolnix version including all the fancy new stuff. It’s v1.4.0.

So what has changed? Tons of new features, tons of bug fixes, tons of
new bugs ;) The more important things are: – support for MPEG-1 and MPEG-2 video read from PS and ES streams, – support for AVC (aka h.264) video from MP4 files, – support for concatenating files, – support for the new elements needed for menus, – support for WAVPACK4 lossless and lossy audio, – support for extracting VobSubs…

Finally, we’ve got VobSub support, menus, file merging, and new audio streams.

You can find it at the same place, same time.

Not really much of note, so I figure this is a “diary” entry, rather than being “front page” worthy –
I’ve updated my unofficial build of uControl to install under MacOS 10.3.8 – trivial work, at best, I know.

I’ve also torn out the guts of my forum, with quite a few CSS changes, more custom template modifications, the integration of an “Ignore User” function, and a few pre-cache tests, so it should load quicker, despite it’s rather elegant (if not image heavy) design.

A few more internal tweaks have been placed upon my download file manager, and I have the stubs set up for Rollator to move to PHP5’s mysqli – as I moved to my own custom shims long ago, this is mostly “above the board”, requiring only the support frameworks be added for mysqli native works.

I’ve removed the left sidebar from my diary page – I figure it’s not really useful – and there’s not much of a point to having it there. I have thought about making it a true frame for all areas of my website, however, it’s so closely tied to my front page – and the lack of useful data.. there’s no point, since I already have my search functionality on the front page, and available due to intelligent 404 (no document) handling.

I’ve been tinkering under the hood, yet again.

Earlier last year, I added support for mirror sites. However, it was a rather trivial hack, which merely allowed you to state wether there were mirrors, and what the relative paths were for these files.

However, tonight I’ve finally fixed things up a bit more – I’ve added a boolean for each specific file, which is either NULL, or a variable stating wether the file is morrored. When I decide on a global scape for this, it will probably be rewritten to include an array of all possible download points, and perhaps do trivial HTTP connections to assure that the host connects, and the path is not a 404.

As for now, enjoy my now slightly-lopsided download manager.

PHP, despite what many “purists” might say, is a powerful programming language. It’s inception has created many things which now exist on the Internet in record time – programs that used to be written in CGI, with custom libraries and horrible amounts of development time, can now be produced with less time, less Q&A, and much less effort.

This, of course, comes at a price. It can do many things, and it assumes the author to know exactly what they’re doing – that, and for the bazillion things it does offer – there are many things it does not.

For instance, I’m currently working on a “Who’s Online” system, which allows one to add friends by name, and see if they’re utilizing a certain service. This is pretty trivial, but PHP does not natively offer case-insensitive searches.

This would mean that you might have to iterate through an entire array and do string comparisons, since there’s no obviously-easy way to do an array-wide strtolower() or strtoupper(), et al.

However, rather than killing CPU cycles and memory on this, there is a somewhat-odd solution I tried, and worked – mapping the array unto another array.. and performing a function on that during the mapping. E.G:

$lowerUserConnected = array_map(‘strtolower’, $usersConnected);

This assigns the $lowerUsersConnected variable to assume the data of $usersConnected, after performing the internal strtolower() function upon it. It seems a bit awkward, but it works. Being that it keeps the keys (which are numeric), it’s possible to obtain the data from the $usersConnected array, and utilize the data in the $lowerUsersConnected array for comparison – it seems a bit costly, but certainly less than manually stepping through and converting $usersConnected by any user-written function.

Thus, it’s possible to:

$arbitrary_data = array_intersect($lowerUsersConnected, $friendsList));

and utilize the appropriate names from $usersConnected.