Card Decks 2.1.1, Configurable Card Decks in Your Bag
SEPTEMBER 14, 2011 23:01 - CARDDECKS
Card Decks 2.1.1 is a universal build which adds a native iPad user interface:
In addition, it contains some small updates to the iPhone user interface.
Build 2.1.1 requires iOS 4.0 or later and is available from the App Store.
ah
LibComponentLogging, Maintenance Builds
AUGUST 7, 2011 12:12 - LIBCOMPONENTLOGGING
Build 1.1.4 of LibComponentLogging's Core fixes the definition of the main log macro which sometimes prevented it from being used as a natural replacement for logging functions:
http://github.com/aharren/LibComponentLogging-Core
Build 1.0.3 of qlog removes the trailing semicolons which were erroneously included in the macro definitions.
http://github.com/aharren/LibComponentLogging-qlog
ah
Card Decks 2.0.3, Processing for App Store
JUNE 25, 2011 17:05 - CARDDECKS
A small update to Card Decks is available in the App Store.
The new build adds an action menu to the cards view which can be activated by tapping on the top margin:
-
The actions menu contains buttons for shuffle and sort.
-
The actions menu contains buttons for play, fast-play, and stop.
-
When the deck is in play/fast-play mode, it will automatically switch to the next card after some time has passed.
-
The position of the actions menu (left/right) can be configured in the main settings.
The new build also fixes some user interface animation glitches.
ah
LibComponentLogging, Recent Updates
JUNE 24, 2011 23:23 - LIBCOMPONENTLOGGING
An update to the Core files of LibComponentLogging fixes a symbol visibility mismatch which may occur when the Core files are put into a static library. Build 1.1.3 is available from the Core repository at GitHub:
http://github.com/aharren/LibComponentLogging-Core
The following logging back-ends were also updated based on recent bug reports and feature requests:
http://github.com/aharren/LibComponentLogging-NSLog
http://github.com/aharren/LibComponentLogging-NSLogger
Build 1.0.2 of qlog adds additional logging macros which also take the log component as an argument:
http://github.com/aharren/LibComponentLogging-qlog
ah
Card Decks 2.0.2, A Small Update for Your Card Decks
DECEMBER 5, 2010 11:11 - CARDDECKS
An updated version of Card Decks is available in the App Store.
Card Decks 2.0.2 contains the following bug fixes and features:
-
Card Decks 2.0.2 adds support for different shake actions: shuffle all cards or select a random card while keeping the cards' order. You can select the shake action on a per-deck basis in the deck's settings.
-
Sometimes, when sending a card deck URL from within the application, some trailing characters in the URL got lost.
-
The 'quick open' mode is now enabled by default (if you have not changed this setting). So, a card deck can be viewed with a single tap from the card decks list and edited by pressing the blue detail button.
-
When a list view is put into edit mode (by pressing the button with the three bars), the red minus buttons for deleting a card or a card deck are now shown.
-
Modal views are now dismissed when the application enters background.
ah
LibComponentLogging, Logger Updates
NOVEMBER 7, 2010 17:55 - LIBCOMPONENTLOGGING
The GitHub repositories of the LibComponentLogging logging back-ends have been updated to reflect the recent changes to the Core files. The logging back-ends do now use 'pretty function names' to provide better log messages for applications which make use of Objective-C++:
http://github.com/aharren/LibComponentLogging-SystemLog
http://github.com/aharren/LibComponentLogging-LogFile
http://github.com/aharren/LibComponentLogging-LogFile-Example
The 'devel' branches of the repositories have also been upgraded to the latest Core files.
In addition, a new logging back-end has been added: The new NSLogger back-end integrates Florent Pillet's NSLogger logging client which supports remote logging for Mac OS X and iPhone OS / iOS devices:
http://github.com/aharren/LibComponentLogging-NSLogger
See http://github.com/fpillet/NSLogger for more details about NSLogger.
ah
LibComponentLogging Core, Maintenance Build 1.1.2
OCTOBER 21, 2010 22:42 - LIBCOMPONENTLOGGING
A small update to the Core files of LibComponentLogging fixes compile and link errors which occured when using the library with Objective-C++. Build 1.1.2 is available from the repository on GitHub.
ah
Card Decks 2.0.1, A More Detailed List of the Changes
AUGUST 29, 2010 21:02 - CARDDECKS
Card Decks 2.0.1 is now available in the App Store. Here's a more detailed list of the changes since Card Decks 1.1:
-
The card deck list and the card list are now always in edit mode, e.g. you can simply swipe to delete a card, or press the '+' button to add a new card. The toolbar button with the three bars can be used to show/hide the reorder controls.
-
New card decks are now created as a copy of the 'DECK DEFAULTS' deck which can also be edited.
-
New cards are created as a copy of the deck's 'CARD DEFAULTS' card.
-
Some settings are now stored on a per-deck basis, e.g. auto-rotation settings, shuffle settings, the deck's appearance etc.
-
The name of a card deck can be edited via the deck's settings.
-
The cards of a card deck can be rendered with rounded or cornered corners.
-
The index dots are now available in two styles: light and dark.
-
The cards of a deck can be shown side-by-side or as a stack.
-
If a card deck is shuffled, it will remember the shuffle ordering and show a large shuffle icon when opened again.
-
The 'shake for random' feature was replaced by shuffling and jumping to the first card ('Shake Shuffle' in the deck's settings).
-
The cards of a card deck are now rendered in full screen mode and the status bar is always hidden.
-
The card editor allows to define a fixed font size for a card. If a card uses a fixed font size, the size will be adjusted when the card is auto-rotated.
-
You can move up/down to the previous/next card in the card editor.
-
The card editor previews the font size and text orientation.
-
The card editor provides action buttons for copying color and text properties to/from the card defaults and to all cards of a deck.
-
Card Decks 2 no longer has a section in the Settings application, all settings can be
configured inside the application.
-
Some parts of the user interface are now configurable via the settings, e.g. you can configure whether a single tap or a double tap is needed to close the card view.
-
On iPhone 4, the cards, application icons and toolbar icons are rendered in high-resolution.
-
Card Decks 2 uses a new format when sending/receiving card decks as URLs, but still accepts URLs from Card Decks 1.x.
ah
Card Decks 2.0.1, Processing for App Store
AUGUST 25, 2010 22:23 - CARDDECKS
Card Decks 2.0.1 is right on its way to the App Store.
A short list of what has changed since Card Decks 1.1:
-
New user interface.
-
Support for iOS 4.
-
High-resolution graphics.
-
Cards with rounded corners.
-
Different card deck styles, e.g. stacked or side-by-side.
-
Per-deck settings.
ah
qlog - quick logging macros
JUNE 20, 2010 21:05 - LIBCOMPONENTLOGGING
qlog is a set of quick logging macros for LibComponentLogging.
http://github.com/aharren/LibComponentLogging-qlog
qlog provides a short macro for every log level of LibComponentLogging, e.g. qlerror() for error messages and qltrace() for trace messages. Additionally, all logging macros take the current log component from a preprocessor define which can be (re)defined in your application at a file-level, section-based, or global scope.
To use qlog, simply add the qlog.h file to your project and define the preprocessor symbol ql_component at a global scope with your default log component, e.g.
#define ql_component lcl_cDefaultLogComponent
Then, logging statements can be added to your application by using the qlog macros instead of LibComponentLogging's lcl_log macros, e.g.
qlinfo(@"initialized");
qlerror(@"file '%@' does not exist", file);
qltrace();
If you want to use a specific log component for all logging statements in a file, you can simply redefine ql_component to match this log component, e.g. by adding a #undef #define sequence at the top of the file:
#undef ql_component
#define ql_component lcl_cFileLevelComponent
ah
LibComponentLogging SystemLog, Feature Build 1.1.1
APRIL 2, 2010 14:45 - LIBCOMPONENTLOGGING
A new release of the LibComponentLogging SystemLog logger, which sends log messages to the Apple System Log facility (ASL), is available for download from the project's repository on GitHub:
http://github.com/aharren/LibComponentLogging-SystemLog
Build 1.1.1 adds the following features:
-
More log methods have been added to the SystemLog logger class: log with a single message, log with a format string and va_list var args, and log with a format string and ... var args. (issue 1)
-
The SystemLog class no longer relies on types and definitions from the Core files of LibComponentLogging thus making the logger useable without the Core files. (issue 2)
-
Support for thread-level ASL connections has been added. (issue 3)
-
The packaged template files have been updated and integrated into the unit tests. (issue 4)
-
Configuration options for enabling/disabling the inclusion of file names, line numbers, and function names in the ASL log messages have been added. (issue 5)
-
A configuration option has been added which tells the SystemLog class to use only ASL priority levels up to a specific last level, e.g. Notice. All log messages with a higher level will be mapped to the configured last level. Thus, Debug log messages get stored in the ASL data store without a reconfiguration of syslogd. (issue 6)
The SystemLog logger is compatible to LibComponentLogging Core 1.0 and 1.1, and can be used without LibComponentLogging Core.
ah
LibComponentLogging LogFile, Maintenance Build 1.1.2
FEBRUARY 21, 2010 23:07 - LIBCOMPONENTLOGGING
Build 1.1.2 of LibComponentLogging's LogFile logger fixes the following bug:
-
The time_c variable, which holds the current time, was not initialized if the file handle of the log file was unset and mirroring to stderr was enabled. This situation may arise if the log file couldn't be created, e.g. because its path is invalid, and the LogFile class falls back to mirroring to stderr. (issue 10)
The new build is available from the repository on GitHub:
http://github.com/aharren/LibComponentLogging-LogFile
ah
unifiedps 1.3.1
FEBRUARY 14, 2010 11:50 - UNIFIEDPS
Unifiedps also moved to GitHub. The initial build 1.3.1 removes some internal code which is no longer needed with the new repository, it also fixes some formatting issues in the source code and removes a warning with newer versions of Perl, e.g. on Mac OS X 10.6.
Additionally, the packaged .unifiedpsrc template file includes a new -AAx user-defined option which tells unifiedps to display information about the processes (including all parent and child processes) of all users, even those which are not connected to a controlling terminal, but not those which belong to root, nobody, daemon, and those users starting with a '_'.
ah
LibComponentLogging LogFile, Feature Build 1.1.1
FEBRUARY 10, 2010 20:57 - LIBCOMPONENTLOGGING
The first stable build of the LibComponentLogging LogFile logger 1.1 release is available from the project's repository on GitHub:
http://github.com/aharren/LibComponentLogging-LogFile
Build 1.1.1 adds the following features and bug fixes:
-
Convenience methods for generating default log file names have been added. These methods generate (partial) log file names based on the application's Info.plist file, e.g. a generated file name will have the format "~/Library/Logs/main/this.log" where main is the name of the main bundle, and this is the name of the bundle to which the LogFile class belongs. If the LogFile class is used in a Mac OS X framework, the log file will be placed into a log folder which belongs to the application, but the log file will have the name of the framework. (issue 2)
-
Line feed characters in multi-line log messages can be escaped in order to keep multi-line log messages on a single line in the log file. (issue 3)
-
The handling of nil paths and unsupported paths for the log file has been fixed and the LogFile class falls back to mirroring to stderr in these situations. (issue 4)
-
Configuration options for enabling/disabling the printing of file names, line numbers, and function names in the log file have been added. (issue 5)
-
A configuration option for limiting the size of a log message has been added. (issue 6)
-
The LogFile class no longer relies on types and definitions from the LibComponentLogging Core files thus making the logger useable without the Core files, e.g. in combination with some simple DebugLog macros which do not know about log components. (issue 7)
-
The packaged template files have been updated and integrated into the library's unit tests. (issue 8)
-
More log methods have been added: log with a single message, log with a format string and va_list var args, and log with a format string and ... var args. (issue 9)
The LogFile logger can be used in combination with LibComponentLogging Core 1.0 and 1.1.
ah
LibComponentLogging UserDefaults, Build 1.0.1
FEBRUARY 5, 2010 17:31 - LIBCOMPONENTLOGGING
UserDefaults is a LibComponentLogging Core extension which stores/restores settings to/from the user defaults. Currently, the extension can store/restore active log level settings.
The UserDefaults extension is living in its own repository on GitHub:
http://github.com/aharren/LibComponentLogging-UserDefaults
The following code shows a simple usage pattern for the UserDefaults extension in your application's main.m file:
#include "lcl.h"
#include "LCLUserDefaults.h"
int main(int argc, char *argv[]) {
// restore the log level settings from the standard user defaults
[LCLUserDefaults restoreLogLevelSettingsFromStandardUserDefaults];
// start your application
...
}
The UserDefaults extension uses the following format for storing log level settings in your application's domain:
"logging:<bundle identifier>:<log component name>:level" = <integer>
Examples:
"logging:com.yourcompany.YourApplication:Application/Component 1:level" = 5
"logging:com.yourcompany.YourApplication:Application/Component 2:level" = 3
You can simply change the log level settings from the command line by using the 'defaults' command, e.g.
defaults write <application>
"logging:com.yourcompany.YourApplication:Application/Component 1:level" -int 2
ah
LibComponentLogging Core, Feature Build 1.1.1
FEBRUARY 3, 2010 22:05 - LIBCOMPONENTLOGGING
Build 1.1.1 of LibComponentLogging Core is available on GitHub. It adds the following features:
-
A new
lcl_config_extensions.h file can be used for adding extensions for the library Core which are not loggers, e.g. a set of shorter log macros, file-level log macros, or other helper classes. (issue 5)
-
Missing
configure_* functions for identifiers and headers have been added. (issue 6)
-
If an unsupported log level is passed to one of the
configure functions, the highest available log level will be used.
-
If the preprocessor symbol
_LCL_NO_LOGGING is defined, the lcl_log() log macro will be defined to an empty effect which will effectively remove all logging calls from the application. (issue 7)
-
The log components' identifiers are now available as string constants. (issue 8)
-
The packaged template files have been updated and integrated into the library's unit tests. (issue 12)
ah
LibComponentLogging LogFile, Example Xcode Project
JANUARY 27, 2010 21:45 - LIBCOMPONENTLOGGING
Just pushed an example Xcode project to GitHub which bundles the library Core and the LogFile logger of LibComponentLogging with a small example application:
http://github.com/aharren/LibComponentLogging-LogFile-Example
The project contains the latest builds of LibComponentLogging Core (build 1.0.4) and the LogFile logger class (build 1.0.3).
ah
Card Decks, Maintenance Build 1.1.2
DECEMBER 24, 2009 07:23 - CARDDECKS
A maintenance update of Card Decks is now available in the App Store. Build 1.1.2 fixes the following bugs:
-
Fixed bug in the card deck editor which didn't add the card deck to the list of card decks when editing was quit via the 'Back' button.
-
Fixed crash when pressing the 'Edit' button while viewing an empty card deck.
ah
Introducing [a] Blank Space
DECEMBER 17, 2009 23:20 - BLANKSPACE
Blank Space is a tiny web application which serves as a blank space between the application icons on your iPhone's home screen. That's it. There's nothing more.
ah
Card Decks, Feature Build 1.1.1
NOVEMBER 7, 2009 07:55 - CARDDECKS
The first build of the 1.1 release of Card Decks is now available as an update in the App Store.
Card Decks 1.1 contains the following new featues:
-
Card Decks has now a section in the Settings application.
-
The settings are also available in the card deck view for quick changes.
-
The 'idle timer' which puts the device to sleep can be turned on/off via the settings.
-
The 'status bar' can be turned on/off via the settings.
-
The 'page control' (the small white dots at the bottom) can be turned on/off via the settings.
-
If the page control is turned off, it flashes when a new card is selected.
-
'Auto rotation' can be turned on/off via the settings.
-
The 'shake for random' feature randomly selects a card from the current card deck when the application receives shake events.
-
The 'shake for random' feature can be turned on/off via the settings.
-
The 'shuffle' feature shuffles the cards of the current card deck.
-
All editors show a 'Done' button which immediately quits editing and returns to the main view.
-
The card deck view now contains an 'Edit' button for direct editing of the current card and the card deck.
-
A new card editor provides a 'keyboard extension' for symbols (based on Unicode blocks) and for setting the text's orientation.
-
Card Decks has a new logo.
ah
Using the Unicode Symbols Keyboard in Card Decks 1.1
NOVEMBER 6, 2009 23:59 - CARDDECKS
Release 1.1 of Card Decks adds a 'keyboard extension' for Unicode symbols which lets you select special characters from the font directly when editing a card. So, you don't have to use the trick of adding special characters via their UTF-8 encoding in Card Decks URLs anymore.
The following screens show the list of Unicode symbol blocks in the keyboard, the first symbols of the 'Miscellaneous Symbols' block, and the snowman symbol. Just click on a symbol in the symbol list, and it will be inserted into your card's text.


By default, the symbols keyboard shows only a selected set of Unicode blocks and symbols. The 'full symbol table' can be enabled via the Settings application.
ah
Card Decks, Maintenance Build 1.0.3
OCTOBER 19, 2009 23:55 - CARDDECKS
Build 1.0.3 of Card Decks is now "Ready for Sale" in the App Store. This update fixes the following bugs:
-
Fixed layout bugs if the first or last line of a card's text was empty.
-
Fixed bug with wrong initial state of the color chooser.
ah
Card Decks, Maintenance Build 1.0.2
SEPTEMBER 10, 2009 18:01 - CARDDECKS
Maintenance build 1.0.2 of Card Decks is available in the App Store. It contains the following improvements and bug fixes:
-
Improved performance when opening a card deck.
-
Fixed flickerings when scrolling/stepping through the cards of a deck.
-
Fixed quick jumps to jump to the same cards, e.g. first card, card in the middle, last card.
-
Fixed layout bugs with long text lines.
-
Fixed missing escapes for some special characters when sending a card deck as an URL.
-
Fixed wrong usage of default colors when importing a card deck from an URL.
ah
LibComponentLogging Core, Maintenance Build 1.0.4
JULY 25, 2009 18:27 - LIBCOMPONENTLOGGING
Maintenance build 1.0.4 of LibComponentLogging Core fixes an issue with the main logging macro lcl_log in the Core part of the library which prevented the definition of custom logging macros on top of lcl_log.
With build 1.0.4, it is now possible to define simplified logging macros which draw the current log component from a file-level (or global) #define, e.g.
#define log_info(_format, ...) \
lcl_log(FileLevelLogComponent, lcl_vInfo, _format, ##__VA_ARGS__);
#define FileLevelLogComponent \
lcl_cUIC1
…
log_info(@"initialized");
ah
Using UTF-8 Encoded Characters in Card Decks URLs
JULY 25, 2009 16:01 - CARDDECKS
The font that is used by Card Decks contains a lot of special characters, e.g. the sun with rays symbol '☀', the cloud '☁', or the umbrella symbol '☂'. Unfortunately, the iPhone's keyboard is very limited with regard to the set of characters that can be selected, e.g. you cannot write the cloud symbol via the keyboard.
Until a future version of the iPhone OS, or the Card Decks application, adds support for specifying a character's encoding directly when editing a card, e.g. using UTF-8, you can create a Card Decks URL which encodes a deck with your cards and then import that card deck into the application. Within a Card Decks URL, special characters can be used with their UTF-8 URL encoding, e.g. the sun symbol has the UTF-8 encoding 0xe2 0x98 0x80 which can be encoded in an URL as %e2%98%80. Accordingly, the cloud symbol can be encoded as %e2%98%81, and the umbrella symbol as %e2%98%82.
A sample Card Decks URL which adds a new card deck named 'Weather' consisting of cards which show the sun, the cloud, and the umbrella symbol could look like this:
carddecks:///add?Weather,ffffff,000000&%e2%98%80&%e2%98%81&%e2%98%82
More information about the Card Decks URL scheme is available at the Card Decks project site at /CardDecks.
ah
Card Decks 1.0.1 available in App Store
JULY 16, 2009 23:23 - CARDDECKS
The first release of Card Decks is available in the App Store. Card Decks is a small iPhone OS application which provides decks of simple, configurable, colored, multi-line text cards which can be used for voting, or to show your opinion, argument, or mood.
ah
LibComponentLogging LogFile, Feature Build 1.0.3
JUNE 7, 2009 15:10 - LIBCOMPONENTLOGGING
Feature build 1.0.3 of LibComponentLogging LogFile adds the ability to append to an existing log file instead of always creating a new log file on startup.
ah
LibComponentLogging Core, Maintenance Build 1.0.3
MAY 30, 2009 16:34 - LIBCOMPONENTLOGGING
Maintenance build 1.0.3 of LibComponentLogging Core fixes some small issues in the Core part of the library:
-
The
lcl_vOff, symbol which represents the turned-off log level, is now a public symbol and can be used in calls to the lcl_configure_* functions.
-
The name of the array of log levels in
lcl.m is now consistent to the name in lcl.h.
-
In order to please the compiler, the type for log levels is now split up into a wide type which is used in function signatures and a narrow type which is used for the array of log levels.
ah
LibComponentLogging Core, Maintenance Build 1.0.2
APRIL 26, 2009 22:32 - LIBCOMPONENTLOGGING
The maintenance build 1.0.2 of the Core part of LibComponentLogging adds a missing import for the Foundation framework to the lcl.h main header file.
Without this import, the compiler may complain about a bad definition of the type _lcl_level_t if lcl.h is imported without a preceding import of the Foundation framework, e.g. if lcl.h is imported as the first file in the prefix header file or if no prefix header is used.
ah
Logging to a File or to the System Log
FEBRUARY 21, 2009 12:22 - LIBCOMPONENTLOGGING
Additional logger implementations are available for LibComponentLogging:
-
LogFile:
LogFile writes log messages to an application-specific log file. The application's log file is opened automatically when the first log message needs to be written to the log file. If the log file reaches a configured maximum size, it gets rotated and all previous messages will be moved to a backup log file. The backup log file is kept until the next rotation.
-
SystemLog:
SystemLog is a logger implementation which sends log messages to the Apple System Log facility (ASL). With ASL, log messages are stored as structured messages in a data store and can be queried via the syslog utility or the Console application.
ah
Component-based Logging for Objective-C Applications
JANUARY 25, 2009 23:15 - LIBCOMPONENTLOGGING
After working with Objective-C on Mac OS X and the iPhone OS for a while now, I've factored out some code for component-based logging for Objective-C applications into a small open source library named LibComponentLogging.
The library is designed ...
-
to provide log levels for distinguishing between error messages, informational messages, and fine-grained trace messages for debugging,
-
to provide log components for identifying different parts of an application,
-
to provide an active log level for each log component in order to enable/disable logging for certain parts of an application, and
-
to introduce only very low runtime-overhead when logging is disabled and to avoid evaluating log message arguments if the message is not going to be logged.
LibComponentLogging is split up into a Core part, which provides the main logging concepts like log levels and log components, and Loggers, which implement concrete logging strategies, e.g. writing the log messages into a file. This separation makes LibComponentLogging deployable for different application scenarios, e.g. an application may write its log message to a file while another application may send them to the system log.
ah
unifiedps 1.2.46 available
FEBRUARY 10, 2008 16:58 - UNIFIEDPS
An updated version of unifiedps is available on its project site at /unifiedps.
Changes since 1.2.31:
-
add options for displaying/hiding the header line
-
add options for changing the indentation of the pid and/or command field
-
add options for selecting parent/child processes
-
add new mark/restrict filters with matching operators (is, equals, contains, starts, ends,
and not-variants) and support for or-operation
-
cleanup user-defined options in the included example ~/.unifiedpsrc file
-
when displaying the help text, use the sorting order of user-defined options as defined in the user's ~/.unifiedpsrc file
ah
alias ps="~/bin/unifiedps"
SEPTEMBER 13, 2007 21:02 - UNIFIEDPS
$ ps
PID PPID USER TTY TIME COMMAND
1 0 root - 0:39.30 /sbin/launchd
: 146 1 ah - 1:07.48 /sbin/launchd
: 1787 146 ah - 0:00.51 /Applications/Utilities/Terminal
1788 1787 root s000 0:00.01 login -pf ah
: 1789 1788 ah s000 0:00.02 -bash
: 1819 1789 ah s000 0:00.02 unifiedps
Finally I made it to rewrite some Perl code which was originally only intended to display the running processes on different Unix-like platforms in a tree-structured format. Actually, just to find the right parent process to 'kill'.
The main component of this code was an abstraction of the different platforms' native 'ps' commands accompanied by a simple tree formatter. The supported platforms were AIX and i5/OS PASE, HP-UX, Linux, and Solaris.
The rewritten code at /unifiedps has grown to a more convenient wrapper for the native 'ps' commands and adds functionality for restricting and marking the displayed processes, a small macro processor for defining user-defined options, and additional platform support.
ah