Applimizer
Version History

Version 1.5

July 2004

  • New: support for the optimization of cascading style sheets (CSS) as part of the HTML optimization algorithms.
  • Re-designed and improved the user-interface optimization algorithm.
  • Minor improvements for special HTML and user-interface files. Only selected applications will benefit from this.
  • Modified the preview handling of options. Unregistered users will no longer be disturbed by warning messages when they switch on an advanced option. Instead, the buttons are simply disabled.
  • Added an exception rule for the optimization of string files for Safari.
  • The warning regarding the eSellerateEngine removal will now appear when the options is switched on.
  • Corrected an oversight regarding the preferences that governs whether language settings should be saved.
  • Extended the credits in the about box in honor of Donald Duck's 70th birthday.

Version 1.4.1

July 2004

  • Quick fix for a situation where Applimizer got stuck in an endless look while showing a warning message after encountering a carbon application which it cannot optimize.

Version 1.4

July 2004

  • New feature: Applimizer can now scan folders for applications to optimize. From the file menu, select "Open Applications in Folder...".
  • The individual view now also shows the application icon. Applimizer is again compatible with Mac OS X 10.1 or later.
  • Some parts had to undergo major changes for this.
  • Applimizer will now unlock files before removing them, for example during de-localization. This allows us to optimize applications where embedded files are flagged as UF_IMMUTABLE. One such culprit is the Windows Media Player.
  • The check for update window now also informs the user about the file size of the download file.
  • Changed the internal data model to streamline the access to the statistical data (and save 7.5 kB of compiled object code).
  • Changed the encoding of the optimization settings in the preferences. As this is no longer compatible with prior versions (1.3 or earlier), optimization settings stored with older versions will be ignored.
  • Added four items to the help menu: "Open Online User Guide", "Open Online FAQ", "Open www.tredje.se", and "Send Us an E-Mail".
  • When all applications are in preview mode, then the "Optimize All" button is also disabled.
  • Fixed an incorrect connection to the button for the eSellerateEngine removal option. This is why this option and the string file optimization option were in some cases not correctly restored when re-loading the saved options.
  • Removed the quit button from the warning window.
  • Corrected the copyright message in the about box.
  • Minor spelling corrections to the American and British English localizations.

Version 1.3

June 2004

  • New feature: optimization of embedded user interface files, that is the NIB files used by Cocoa applications to define window objects and their layout. The model definitions in those files can be optimized through the removal of redundant white-space characters. On average, this has shown to result in savings similar or larger to those achieved by string file optimization.
  • Added a new option to allow the user to change the threshold size for embedded files. Only files that are larger than the threshold size will be optimized. The default threshold is 4096 bytes; this is the value used in previous versions.
  • String file optimization, when used on Localizable.strings files, will now remove redundant string pairs. This can result in significant savings for the strings of the development localization.
  • Added a novice warning about the consequences of changing the aforementioned threshold size.
  • Added a novice warning informing the user about how to enter a new language to the list of preferred languages.
  • Modified the attachment of novice warning messages. The novice warning on the eSellerateEngine removal is no longer attached to the main window.
  • The minimum system requirement is now Mac OS X version 10.2 (was 10.1). This was necessary due to limitations with third-party libraries and dynamic linking.
  • Moving to 10.2 fixed an issue with the "check for update" feature which did not work properly on Mac OS X 10.1.
  • Fixed an incorrect size calculation when handling unicode-encoded string files.
  • Re-connected a missing connection to the drag and drop response view in the British English version of the GUI.
  • Corrected some spelling mistakes.

Version 1.2

June 2004

  • Re-designed the main window. For clarity, the statistics are now presented in two categories: single application and summary of all applications.
  • The main window is now resizable. This may make is easier to view all application names (summary view) or language names (individual view), but you can also use tool tips for this purpose, that is rest your mouse over the list of application names or languages.
  • Added support for drag and drop. You can now drag and drop an application icon from the finder onto Applimizer's main window.
  • Added a U.S. English localization.
  • In U.S. English, the application is now named Applimizer.
  • British English (en_GB) is still the development language. If you use British English, the application goes under the name Applimiser and you will continue to see references to "optimise" and "analyse".
  • The internal handling of embedded bundles is now hidden from the user.
  • The corresponding option was removed.
  • The progress bar is now a barber pole during backup. "Initializing..." is now called "Scanning...".
  • The file count is now shown during in the initial scanning stage.
  • Fine-tuned the string optimization algorithm for speed.
  • When selecting more than one application in the open panel, all of the selected items are now processed.
  • Modified the internal dynamic handling of applications. The main application will now stay at the front until all its bundles are taken care of. This fixes a cosmetic glitch in the statistics.
  • Corrected an appearance issue where no language may have been listed for applications or bundles that do not have language localization files. For these cases, the application's development language is now shown.
  • Corrected the cosmetic problem that odd statistical data may have shown up as optimization progressed.
  • Checking for updates now uses the CFBundleShortVersionString.

Version 1.1.1

June 2004

  • Applimizer now correctly registers its development language as "British English" (hence the unusual spelling).
  • Added a note on the language localization to the "About Applimizer" window.
  • Added a safeguard that prevents the user from analyzing an application which is already in memory.
  • Fixed a bug when optimizing HTML files which (in defiance of the W3C standard) start with a comment in the very first line. This fixes a crash with Firefox or Mozilla.

Version 1.1

June 2004

  • New feature: embedded string files can now be optimized. This works through the removal of comments that are only useful to the developer who is responsible for the localization of the strings for a new language. These comments are not needed by the user and can be safely removed.
  • Tests indicate that the string file optimization is more than 3 times more efficient than HTML optimization. This is even though an application typically contains a few string files but hundreds of HTML files. The main reason behind this is that string files contain a large number of comments (one per string pair).
  • Added a safeguard that ensures that comments in string files are correctly identified. Similarly, there must be an equal sign between the two strings.
  • Added a new switch to the settings window to be able to disable the string file optimization (it is on by default).
  • Rephrased some of the texts in the settings window.
  • Moved the eSellerateEngine removal switch into the advanced section.
  • Improved the HTML optimization by about 70 percent (through more efficient white-space removal the reintroduction most of old rules.
  • Corrected a small mistake in the dynamic statistics as seen during optimization; the total size is now correctly going down as optimization proceeds.
  • Changed the guidance messages to refer to the application "on the left" as opposed to the on "at the front".

Version 1.0.4

May 2004

  • Re-coded the HTML optimization from the ground up. It is no longer based on regular expressions, thus avoiding the crash that could be seen during analysis (where the crash log mentioned "pcre.c").
  • Better still: the new HTML algorithm is both faster and not as hungry on memory!
  • Applimizer lost a couple of pounds in the process (it is about 150 kB smaller).

Version 1.0.3

May 2004

  • Fixed a crash during analysis when trying to establish which language to keep.
  • Detached two of the warning messages again. This solves the "machine gun" issue for unregistered versions of Applimizer.
  • Attempt to fix a crash in the PCRE library.

Version 1.0.2

May 2004

  • Fixed the bug in the "Open Applications in Folder..." methodology, but had to disable this functionality until I have a more memory efficient optimization engine. Sorry.
  • Temporarily removed the corresponding section from the user guide as well.
  • Modified some of the guidance messages.

Version 1.0.1

May 2004

  • Fixed the crash related to the missing AGRegex framework.

Version 1.0

May 2004

  • Now using Xcode 1.2 (April 2004).
  • New preview mode. If the user has insufficient access rights to modify an application, she will still be able to preview the optimization statistics. Of course, optimization will not be possible for those applications.
  • Added new guidance messages for those cases where one or more applications are in preview mode.
  • Added a quick and dirty help document. Added a novice warning at startup, informing the user that she will need to have an administrator account to be able to optimize programs in the Applications folder.
  • Got rid of the tool-tip messages in the settings window as all the options already have self-explanatory help texts. Those that are used in the preferences window have been updated.
  • The check for update results window is now placed near the center of the screen.
  • Spell-checked all string messages as well as this text.
  • Other than that, it is pretty much identical to the (much successful) previous beta version.

Version 0.6b

April 2004 (first beta version)

  • The list of languages is now sorted alphabetically by the language ISO codes, for example "en, en_US, de, es". The development language is always the first in the list.
  • Some of the warning panels have now been attached to the main window. However, if a sheet is already attached to the main window, the warnings may also appear in a detached shape, form, and appearance.
  • Applimizer now keeps track of how much space it has saved (ever).
  • Fixed a bug that ignored the setting of the language de-localization switch and failed to update the list of languages in the main window.
  • Disabled the security authorization sections of the code as it is still beta quality.
  • Modified files are no longer deleted, but overwritten, thus preserving the file's Posix permissions.
  • Applimizer no longer relies on the .app extension to identify suitable applications as this is unreliable - the Mac OS X version of GraphicConverter, for instance, has no .app extension.
  • Fixed a bug that caused the advanced file optimization algorithms to be skipped.
  • File optimization now verifies the access permissions as well as the user and group ids of a file.
  • Added a novice warning that will appear when the user does not have the correct access permissions to modify an application.
  • Yet another novice warning when the program is not registered. The user will be notified that a number of advanced optimization algorithms will therefore be in preview mode.
  • Re-opening an application through the "Open Recent..." menu will no longer produce an incorrect error message.
  • Modified the defaults encoding for the warning messages and the main preferences. Now using a dedicated class that handles the new encoding.
  • Fixed the progress bar counter max setting.
  • Simplified the registration dialog.
  • Redesigned the check for update dialog window. The release notes are now shown directly. Also, the version information contains both the current and the new version.
  • Simplified the version checking algorithm to fixed a bug.

Version 0.5d

April 2004 (development build)

  • Finalized the language side of the settings window.
  • Re-phrased the text underneath the option to keep the default language of an application.
  • Added buttons to allow editing of the language list: "Add", "Remove", and "Reset All" (you can guess what they do).
  • Resting your mouse over the applications counter in the main window will now produce a tool-tip with the names of all the applications that have been analyzed.
  • New functionality: Applimizer can now handle applications as one item (as before), or all the bundles (the application bundle and any embedded bundles) separately.
  • Added a new switch to the settings window to allow switching between these two modes. A new "Advanced" tab was added to the settings window for this.
  • Modified the guidance messages to reflect the mode that we are in, for example "applications", or "bundles".
  • Accounted for a border-line situation in which the user has changed to "bundles", ignored/optimized one, and changed back to "applications". Now the main application bundle is gone and only embedded bundles remain. In this situation, the guidance message changes to "Parts of XYZ are ready for optimization" and the application name is shown in brackets: "(XYZ)". Pressing ignore/optimize now, will act on the remaining bundles for that application.
  • Changed the field title "Applications:" to a button with the same functionality as the corresponding option in the settings window. When on, the title changes to "Bundles:".
  • Resting your mouse in the applications statistics on the left will produce a tool tip with the path of the application (or bundle).
  • Fixed a small problem with the timer that is used to update the statistics in the main window.
  • Changed the encoding of the languages. Internally, Applimizer now keeps track of the ISO language codes rather than the long language names.
  • New functionality to remember the list of languages as a preference setting.
  • New option in the preferences window to enable the above.
  • More flexible language selection. If no direct match is found, a different dialect of the same language may be chosen, for example "British English" in the absence of "English".
  • Now using our own language names database. Updated with a number of other dialects (most of which will never be used).
  • The "(more...)" field is no longer saved as hidden in the NIB file, as this is incompatible with Mac OS X versions prior to 10.2.
  • The efficiency of the white-space compression of the HTML files turned out to be inefficient, especially with larger files. It was necessary to hard-code my own optimization algorithm.
  • Rearranged some code to ensure that the progress sheet pops up earlier. When analyzing large applications, there used to be a delay. The delay is still there, but now the progress sheet is visible, showing the text message "Initializing...", and a barber-pole-style progress bar.
  • Modified the initialization algorithm to be more responsive to the user pressing the cancel button.
  • Improved the memory efficiency; we no longer store the entire sub-directory tree of an application after it was evaluated. Added safeguards to ensure that the tree is evaluated before using any of the internal tests.
  • Fixed the progress counter during optimization; it now correctly accounts for removed directory items.
  • Enhanced the directory removal algorithm to be able to handle non-empty directories.
  • Fixed the redrawing of the progress message; the second message is now fully readable.
  • Small fix to clear the list of languages again in the main window when there are no applications in memory.
  • Fixed a missing target connection in the preferences window.
  • The second alert message after the "internal resource missing" message is now suppressed - one message is surely enough.
  • Checking for updates now uses the CFBundleVersion string from the application bundle's info dictionary to obtain the version number.
  • Made the number formatting that is used in the main window localizable.
  • Added a personal prefix to the defaults names, just as a precaution.
  • Minor modification of the defaults handling.
  • Now using some project-independent, shared sources.
  • Upgraded eSellerateEngine to version 3.5.6.
  • Fixed the processing of the serial number which now takes any required names into account.
  • Once registered, the "Register or Purchase..." menu item correctly changes to "Check for Update..."
  • The informational alert message after a successful check for update now mentions both the new and the current version numbers.
  • Fixed the encoding of all text files; we now use UTF-8 throughout.
  • Spell-checked this and other documents regarding Applimizer.

Version 0.4d

March 2004 (development build)

  • Substantial re-coding to allow users to authorize themselves for operations that require administrative rights, for example the optimization of programs in the Applications folder.
  • Secondary re-code to optimize run-time and memory footprint.
  • And again.
  • Implemented the option to remove Mac OS Classic code, but only if it were to coexists with native code. Added a switch to the options panel for this.
  • When optimizing for Classic, Info-macosclassic.plist would be removed as well.
  • New backup option. When enabled, a backup copy will first be made in a user-defined directory, before an application is optimized. Added a section in the preference window where the user can select the backup directory. If the directory does not exists, it will be created.
  • A backup will be made immediately before the first optimization algorithm is used. Therefore, if an application is not changed by Applimizer, no backup is necessary and no backup is made.
  • If an error occurs during backup, the user will be informed and given the opportunity to stop the optimization.
  • Added a browse button to the preferences window, allowing the user to use a standard open dialog for the selection of the backup directory.
  • Disabled editing of the backup directory name text field since it was difficult to determine when the user was finished editing it (the controlTextDidEndEditing method is not evoked when the user simply closes the window). The sole method of setting the backup directory is now via the browse button. This also eliminates the need of implementing code to check if the directory exists or needs to be created.
  • Since we can no longer delete the backup directory name, I had to add a button to the preferences window with which the backing up can be enabled or disabled.
  • Changed the default backup directory to "~/Temporary Items".
  • HTML optimization
  • File smaller than 4 kB will no longer be optimized as the resulting file would still occupy 4 kB of disk space. Optimizing such small files is a waste of time. Indeed, this improves run-time by about a factor of two!
  • Changed the encoding of the pattern; they can now be case-sensitive.
  • Added a safe-guard rule to prevent the removal of macro comments such as AppleTopicListRowBegin or AppleSegmentStart.
  • Added a safe-guard rule to prevent the removal of suspicious comments (as used by iPhoto).
  • Yet another safe-guard rule to prevent the removal of pre-processing macros hidden in comments (as used by RealOne Player).
  • Added a new rule to remove meta data of type "generator", "originator", and "distribution".
  • Added a rule to remove empty CSS style definitions in the presence of an external style sheet (as used by QuickTime Player).
  • Added a rule to remove duplicate robot meta tags (as found in QuickTime Player's help pages).
  • Added a new optimization option that will remove internal copies of the eSellerateEngine, provided it has already been installed in the correct location. This option is off by default.
  • Added a warning message that will pop up when the user is about to optimize away the eSellerateEngine if it were not properly installed.
  • Changed the way the languages are listed in the main window. Languages that will not be optimized are listed at the front. Optimized languages are listed thereafter and are shown in red. Additionally, the development language is underlined.
  • Since the list of languages can exceed the space that has been allocated for this in the main window, the list is also added to the tool tip for that field. The user can thus see the entire list of languages by resting the mouse over the text.
  • Changed the progress message from "There are %d files to analyze" to "Remaining: %d files". The file count is now continuously updated.
  • Added an estimate regarding the duration of the process to the progress message.
  • Changed the guidance message shown when only one application is in memory (analyzed). The application is now mentioned by name.
  • Fixed a fault that ignored some of the settings in the options dialog.
  • Fixed the behavior of the language warning dialog. It will no longer (re-)appear if none of the languages were changed.
  • Added shareware control functionality using eSellerate's service. Added their engine to the executable, thus blowing up the code by 300 kB. Before that, Applimizer had a nice footprint of a mere 150 kB, sigh.
  • Fixed the optimization limitations for non-registered copies of the application.
  • Until we support the help button in the registration window, the help button is hidden automatically.
  • Upgraded eSellerateEngine to version 3.5.5.

Version 0.3d

February 2004 (development build)

  • Redesign of the main window. Moved the progress bar and the cancel button into a separate sheet that will attach itself to the window during the analysis and optimization stages. Resized the progress sheet to fit better on top of the main window.
  • The options drawer was redesigned to be a floating window. This resolves the issues with the drawer opening. The different optimization settings have been grouped into different "tabbed" categories - otherwise the window would need to be quite large.
  • Various code amendments to be able to handle the new windows.
  • Added a message section to the main window where we will show usage suggestions.
  • Renamed the "Skip" button to "Ignore".
  • Fixed the tool-tip help texts of the buttons.
  • Added an information on the file count to the analysis progress message as well as to the statistics in the main window.
  • Added usage suggestions to three typical cases: after start-up, and after analysis of one or several applications.
  • Added credits to the about box; acknowledged the use of the open source PCRE library for regular expression support.
  • New methodology for HTML file optimization; it is no longer a separate process.
  • Constrained the language optimization such that at least one language will remain. This will only ever happen if an application that is optimized has none of the preferred language localizations. No fair method exists as to which of the languages should then remain; for simplicity, the last language in the list is kept.
  • Added a detailed warning that will appear when language optimization would cause the removal of all language localization files (see above). This warning may pop up at the end of each analysis or optimization step, as well as when the list of languages is modified, or when language optimization is being switched on.
  • Fixed the link warnings related to pre-binding the custom framework that is responsible for the handling of regular expressions.
  • Added an option to prevent the optimization of the default language of an application. This setting can be changed in the options window under the language section.
  • Changed the preferences encoding of which warning message is visible or hidden. Added a switch to the preferences dialog with which the user can select whether all or none of the warnings are shown. When all warnings are enabled, each type of warning message can be disabled individually through the "keep reminding me about this" button in the warning dialog.
  • Removed the tool tips from the switches in the preferences window as they did not add any additional information. The switch titles are already self-explanatory.
  • Simplified the identification of the optimization buttons through the use of the tag values; the tags correspond to the internal optimization id number.
  • Added functionality to remember the optimization settings in the preferences.
  • Added a rudimentary preferences window, allowing us to make use of the feature named just above.
  • Smart resizing of warning messages. If the title of the alert message is too large to fit into the window, the window is resized. Ditto for the default button which may change title. This accommodates better for any future foreign localization since we cannot anticipate all the text widths during the design of the layout.
  • When the main window is not visible, alerts cannot be attached to the window in form of sheets. Therefore, they will now be shown in the form of ordinary alert windows.
  • Improved the identification of carbon applications.
  • Added a warning regarding the fact that we cannot optimize carbon applications.
  • The buttons now update correctly and without delay at the end of the analysis step.
  • Fixed the window redrawing. While the data may still be briefly rendered unreadable during analysis or optimization, it will now be correctly redrawn once the process is finished.
  • The progress message under the progress bar now disappears nicely once the process is finished.
  • Spell-checked this document.

Version 0.2d

January 2004 (development build)

  • Designed a cool icon based on an old-fashioned oil can.
  • Redesigned the processing methodology that is used for HTML optimization.
  • Added a new optimization option to remove Finder .DS_Store files. These are created in the application package when the user browses the contents of the application in the Finder (through Ctrl-Click "Show Package Contents"). Any folder browsed in this way will be given a .DS_Store file in which the Finder remembers the viewing options for that folder. Obviously, the application itself will never need these files.
  • Known problems: Despite extensive efforts, the HTML optimization is still observed to hang when run for the first time. Thereafter, it appears to run smoothly.

Version 0.1d

September 2003 (development build)

  • First version.
  • Built a database model that stores all the statistical data for the applications. The database supports multiple applications.
  • Designed the main control window. The usage model is apparent from the window design: the user can analyze as many applications as she likes; the top-most application and a summary for all applications is shown. Three main choices now exist: (1) do not optimize the top-most application, (2) optimize the top-most application, and (3) optimize all applications. Added three buttons for each of these choices. The obvious fourth choice (do not optimize any of the applications) is equivalent to closing the window or quitting Applimizer.
  • Two optimization options are currently available: language de-localization and HTML optimization. Applimizer can optimize either or both; the user can decide.
  • The user can control the optimization through an options window that can slide out from underneath the main window. Selecting or de-selecting an option will dynamically alter the optimization statistics in the main window.
  • Designed a custom data formatter used by the text fields that show the size for the applications. It will show both a short form of the size, for example 1.5 MB, as well as the actual size in bytes.
  • Added more statistics fields that show the saving that is achieved. Two fields are added: the absolute saving and the relative saving as a percentage of the overall size of the application(s).
  • Modified the optimization algorithms to support the addition of new optimization techniques in future versions.
  • Known problem: HTML optimization appears to hang.