- New: support for the
optimization of cascading style sheets (CSS) as part of the HTML optimization
- Re-designed and improved the user-interface optimization
- 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.
- 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
- 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
- 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
- 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
- Added four items to the help menu: "Open Online User
Guide", "Open Online FAQ", "Open www.tredje.se", and "Send Us an
- 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
- Minor spelling corrections to the American and British
- 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.
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.
- 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
- 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
- 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
- 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
- Checking for updates now uses the
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
- 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
- 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
- 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".
- 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
- 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).
- Fixed a crash during analysis when trying to establish which language to
- Detached two of the warning messages again. This solves the
"machine gun" issue for unregistered versions of Applimizer.
to fix a crash in the PCRE library.
the bug in the "Open Applications in Folder..." methodology, but had to
disable this functionality until I have a more memory efficient optimization
- Temporarily removed the corresponding section from the
user guide as well.
- Modified some of the guidance messages.
- Fixed the crash related to the missing AGRegex
- Now using Xcode 1.2 (April
- 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
- 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
- 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
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
- 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
- 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
- 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
- Simplified the version checking algorithm to fixed a bug.
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.
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.
functionality: Applimizer can now handle applications as one item (as before),
or all the bundles (the application bundle and any embedded bundles)
- 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
- 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
- Now using our own language names database. Updated with a
number of other dialects (most of which will never be used).
"(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
- 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
- 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
- Fixed a missing target connection in the preferences
- 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
- Added a personal prefix to the defaults names, just as a
- Minor modification of the defaults handling.
using some project-independent, shared sources.
eSellerateEngine to version 3.5.6.
- Fixed the processing of the serial
number which now takes any required names into account.
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
- Fixed the encoding of all text files; we now use UTF-8
- Spell-checked this and other documents regarding
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
- 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
- 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
- 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
- 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.
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
- 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
- Upgraded eSellerateEngine to version 3.5.5.
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
- 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
- Added credits to the about box; acknowledged the use of
the open source PCRE library for regular expression support.
methodology for HTML file optimization; it is no longer a separate
- 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.
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
- Added functionality to remember the optimization settings in
- 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
- 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
- The progress message under the progress bar now disappears
nicely once the process is finished.
- Spell-checked this document.
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.
September 2003 (development
- First version.
- Built a database model that stores
all the statistical data for the applications. The database supports multiple
- 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.