Adobe with McAfee

I have another rant.  This time it is Adobe who has ticked me off.

I rarely use Firefox or any web browser on my windows machine.  Mainly it sits there and has Windows Media Center full screen so I can watch TV.  Tonight I had to use Firefox on my windows machine.

Firefox prompted for the 3.6.6 upgrade (I was still at 3.6.4).  So I went ahead and installed the update.  After the update, Firefox update page warned me that my Adobe Flash plugin is outdated and I should update it.  I clicked that link and then the install link.  The standard extension window came up and I waited the 3 seconds.  I didn’t get why it was doing it via an extension, I thought this is how the update would be done.  The name was Adobe download manager.

To my surprise, after FireFox restarted, it proceeded to download and install some McAfee stuff onto my machine and then failed when it tried to install the plugin update.  So it failed to do what I originally wanted it to do and installed some additional stuff I didn’t even need nor want on my computer.  Again, just like with Google Chrome, I was not prompted or given the chance to opt out of this.

That software only lasted about 30 seconds on the machine, I quickly went into control panel > Program and Features and removed that software.  I am really annoyed yet again, software is being installed on my system.  It has done one up on Google Chrome by at least telling me it is installing it.  However without the option to not install it, it is forcing useless junk onto my machine.

I am not the only one with this issue, googling “Adobe firefox extension installed mcafee software” returns numerous results.  I have to say to the software companies, I do not want stuff on my machine installed secretly or forcefully.  I only want to install the stuff I want to install and not any 3rd party or affiliates software.

I truly should go the Apple route and remove Flash from all my systems.  YouTube is already HTML5 compliant and other sites will follow for non smartphone pages.  So it isn’t like I can’t live without Flash being installed on my system.  Maybe I will do that.

On the last note, I removed Flash, restarted firefox, and got the missing plugin notice.  I simply clicked the missing plugin notice, downloaded the Flash plugin and now flash is updated on my system.  If I don’t remove Flash from my system, I am going this route from now on to install all updates.

Automating modification packaing

Packaging mods is not the funnest part of building any mod.  So why should I do it manually?  I run Mac OS X which means I have a terminal and can run commands directly to accomplish the packaging process.  I just needed to build a script.  Easy to do and now its done, so I will just detail out the script.

// Da mads location!
$dir = ‘/home/smf/Mods/’;

// Disallowed stuff.
$disallowed_files = array(‘.’, ‘..’, ‘.DS_Store’);

// Our Tar binary executable
$tar_bin = ‘/home/software/gnutar/bin/tar’;

So, this is some settings.  The first tells me where my mods are located.  The path after this matches what I have in SVN for my mods.  So you can put together an image of what I have setup.  The next is an array of disallowed files that we want to ignore when reading directories.  The final one is the full  path and name to the tar binary.

I custom installed a tar binary since the built in OS X adds resource forks and I did not want to break anything by replacing the built in tar with my own (I doubt it would, but didn’t feel like finding out months later and having to fix it).

// No more changes!!!

// Package them?
if (isset($_POST[‘package’]))


This has no explanation really.  It is my header, packaging code, most list and footer (to properly close all html tags 😉 ).

// List the mods!
function listMods()

global $dir, $disallowed_files;

// Get the mods.
$mods = scandir($dir);

This is the start of my mod listing.  Which I globalize the directory and disallowed files.  Then I simply perform a scandir to get a listing of all my mods.  The next section of code contains html, so I will skip that since it isn’t important.

$modOut = array();
foreach ($mods as $mod)

if (in_array($mod, $disallowed_files))


$xmlData = simplexml_load_file($dir . ‘/’ . $mod . ‘/package-info.xml’);
$modOut[strtolower($mod)] = $xmlData->name;


Now simply put, this code will simply prepare the output by doing simplexml to create an object based on the xml data, which I can then use to get the name of the mod (much easier than reading, and pulling from the file with a regex).  Finally I sort the array by the key.  Again, more html to ouptut this data.  I simply used checkboxes.

function DoPacking()

global $dir, $tar_bin;

echo ‘
Packing…<br />’;

This function does the actual work.  For this one I just need to global the directory and tar binary.

$force = isset($_REQUEST[‘force’]) ? true : false;

This simply just allows me to force a mod to be packaged even if it exists for that version.  I didn’t need anything complicated as this rarely is needed.

// This just finds what mods we want to package.
$allowed_mods = array();
if (isset($_REQUEST[‘mods’]))

foreach ($_REQUEST[‘mods’] as $in)

$allowed_mods[] = trim($in);

This simply just does a loop to find all mods I want to package.  If this was a public script, I would need to validate the input against an array of mods that exist.  But since it is just used internally, I didn’t do that.  But now we get the the actual work.

// Get em!
$mods = scandir($dir);
foreach ($mods as $mod)

global $temp_key;

if (in_array($mod, $disallowed_files))


if (!empty($mods) && !in_array(strtolower($mod), $allowed_mods))


We first start by scanning the directory again, removing the files we don’t want, this time we are removing mods we didn’t want to package from the array.

// Files in this folder.
$files = scandir($dir . ‘/’ . $mod);

foreach ($files as $key => $file)

if (in_array($file, array_merge($disallowed_files, array(‘images’, ‘releases’))))


This just puts all files inside each mod folder into an array and removes the files/folders we do not want to package.  I use the same structure for all my mods, so I don’t have to worry about individual cases.

// Figure out our version, the first match is our keeper!
preg_match(‘~version\s+([\d\.]+)(^\S+)?~i’, file_get_contents($dir . ‘/’ . $mod . ‘/Readme.txt’), $matches);

I don’t usually update the version in my .xml file, only my readme.  So I need to get the latest data from my readme file.  This is going to be used to update my version info in multiple places.  The next part is more html, so I am skipping it again.  It basically is checking for existing versions of missing versions and letting me know.

// Update all version information.
foreach ($files as $file)

if (substr($file, -4) != ‘.xml’)


$new_contents = preg_replace(‘~<version>([^<]+)</version>~i’, ‘<version>’ . $matches[1] . ‘</version>’, file_get_contents($dir . ‘/’ . $mod . ‘/’ . $file));

// Null is ugly!
if (!is_null($new_contents) && !is_array($new_contents))

file_put_contents($dir . ‘/’ . $mod . ‘/’ . $file, $new_contents);


Now I simply loop through all files, looking for the .xml ones, as these have a version tag in them.  Once I located them, I simply update them with the new version.  Prior to updating the file, I make sure nothing went wrong.

// Change our directory.
chdir($dir . ‘/’ . $mod);

// Tar it!
// ZIP: zip -0XT ../ ./* -x .svn
exec($tar_bin . ‘ -czf releases/’ . $mod . ‘_v’ . $matches[1] . ‘.tgz ‘ . implode(‘ ‘, $files));

Now for the actual fun stuff.  Prior to packaging the mod, I need to change to the directory.  This prevents a path of folders when the mod is unpackaged.  Then finally I run the command to package the mod.  I have it automatically package it into the releases folder based on the mod name, and its version and explicitly name all files I want to package, thus avoiding disallowed files.

That is all the actual work to handle the packaging.  I haven’t tried it yet, but I added code with theoretically should allow this script to work from CLI.

// Not used yet, but can handle cli stuff.
function handle_cli()

if (in_array(‘force’, $_SERVER[‘argv’]))

$_REQUEST[‘force’] = true;

foreach ($_SERVER[‘argv’] as $in)

if (in_array($in, array(basename(__FILE__), ‘–‘, ‘force’)))


$_REQUEST[‘mods’][] = trim($in);



Someday I may actually test the code, but oh well for now.   The final bit is more html for the header and footer.  So that is all the code I need.

Download: modpacking.php (Right click and save file)

SimpleDesk Download Manager

For the SimpleDesk website, I made a very easy to use and very sleek download manager.  Complete with branch, version, file and mirror management.  Simply put, this thing is very powerful and flexible.  While I didn’t add it in, I could easily expand this script to manage multiple pieces of software as well.