Logitech LCD Framework for G Series Keyboards

by Philippe Hausler on Jul.14, 2009, under MacOS X, Objective-C

Here is the latest rendition of the LogitechLCD.framework now with Interface Builder support and automatically updating views for devices. Additionally there is a screencast to give a brief tutorial on how to use the framework and the Interface Builder support.

Download the Logitech LCD Framework

Comments Off more...

G Series Keyboard LCD Framework

by Philippe Hausler on Jul.12, 2009, under MacOS X, Objective-C

I just recently purchased a G13 keypad. I fell in love with the scriptability of it, but longed to be able to add application support to it. Sadly the Logitech SDK that is shipped is a bit on the mangled side and does not play well with threaded applications. So I ventured to write my own version.

The framework binds the c library for the device but skips out on the “EZ-LCD” c++ stuff… the framework does not pose any obj-c++ requirements on any handlers. Additionally the display architecture implements notifications of key events, and is built to be very similar to AppKit (methinks maybe Interface Builder extension in the works?)

I will post a tutorial once I finish testing for bugs.

But if you like, here is a beta version that works for text, images, and progress bars plus events for the soft keys, applet, and device.

Comments Off more...


by Philippe Hausler on Apr.09, 2009, under Lua, MacOS X, Objective-C

Lua is definitely one of the most powerful and easy to use scripting languages out there. Unfortunately the api caters to c, there are a few libraries out there that implement c++ bindings for Lua, but none that implement the state handlers in obj-c. Until now.

LuaKit.framework is a fully contained lua api for obj-c, it allows base accessors to the stack via NSString, NSNumber(NSUInteger/NSInteger as well), and also allows pushing obj-c “closures” (aka selectors to an object, NSInvocations) to give the developer a seamless transition from obj-c interfaces to the Lua stack.

This project is licensed as GNU LGPL so feel free to integrate it in your app. Please make sure to give me credit, but hopefully it will aide in producing some killer scriptable apps.

Examples coming soon.
Google Code Project Page

Download LuaKit.framework

Comments Off more...


by Philippe Hausler on Apr.03, 2009, under MacOS X, Objective-C

Why doesn’t Foundation allow for runtime abstraction into Objective-C classes?
Why doesn’t Foundation have STL like classes for lists, deques and queues (more than NSSet, NSArray, and NSMapTable)?
Why doesn’t Foundation have regular expressions for strings?
Why doesn’t Foundation have tcp sockets as a more compatible version than NSSocket?
Aren’t base Foundation classes like, NSArray, NSString, NSData etc missing a ton of handy/commonly re-used functions?

Well now it can! Introducing FoundationAdditions.framework: a collection of classes and extensions to the base Foundation framework allowing all the way from adding unique objects to a NSMutableArray to the objective-c runtime as an abstraction to objective-c objects to STL classes implemented in objective-c (not objective-c++ btw) classes.

This is however not a complete framework yet, its missing a fair amount of commentary and usage examples. So please consider this as a work-in-progress. Most of the classes have been tested, that being said there may be some memory leaks/bugs etc.

Download FoundationAdditions.framework

Comments Off more...


by Philippe Hausler on Mar.31, 2009, under Database, MacOS X, Objective-C, SQLite

Wouldn’t it be great to be able to access SQLite databases with just Objective-C calls?
Now you can with SQLite.framework. This framework supports NSFastEnumeration on SQLiteResults as well as per result enumeration. Additionally the database connections provide update callbacks into the database delegate object.

Here is some example usage.

SQLiteDatabase *db = [SQLiteDatabase databaseNamed:@"mydatabase.db"];
if([db executeQuery:@"CREATE TABLE foo (bar TEXT, baz NUMERIC, car INTEGER, caz BLOB);"])
    [db executeQuery:@"INSERT INTO foo VALUES('500.0', '500.0', '500.0', '500.0');"];
for(NSDictionary *row in [db executeQuery:@"SELECT * FROM foo"])
    NSString *bar = [row objectForKey:@"bar"];
    NSNumber *baz = [row objectForKey:@"baz"];
    NSNumber *car = [row objectForKey:@"car"];
    NSData *caz = [row objectForKey:@"caz"];

Download SQLite.framework

Note: This framework is still fairly un-tested and a bit on the alpha side, however future releases may add features like query building and detailed table/row/record information. Additionally I am creating a SequelPro-like client app to demonstrate the framework and provide an easy tool to manipulate SQLite databases.

Comments Off more...

Cocoa TCPSockets

by Philippe Hausler on Dec.05, 2008, under MacOS X, Objective-C, iPhone/iPod Touch

Unfortunately Cocoa does not have native sockets that are universal enough to connect to other language built applications as a pre-built class. The server is intended to be a more thematic method for creating a server in Cocoa than the alternatives. The primary mechanic for connections being established, data incoming and connections closed are all based on delegate notifications by the TCPServerDelegate and TCPServerConnectionDelegate protocols. Data buffering, packet encapsulation and reachability are all upon the host application’s responsability to deal with. The server class set is intended to handle opening a TCP port for hosting, creating new connections to that TCP port, sending/receiving raw data, and Bonjour broadcasting. The TCPClient class also bends BSD sockets to preform similarly. The end result is a simple, easy to use socket server and client class which is portable from Mac OS X desktop to iPhone/iPod which can connect and transact with other applications such as software written for Windows.

Here is an example of a simple chat server.

@implementation TCPChatServer
- (id)init
	self = [super init];
	server = [[TCPServer alloc] init];
	server.delegate = self;
	[server listenOnPort:5543];
	[server broadcastOnDomain:@"" type:@"_tcpchat._tcp" name:@"My Chat Server"];
	[server publish];
	return self;
- (void)server:(TCPServer *)aServer didAcceptConnection:(TCPServerConnection *)aConnection
	aConnection.delegate = self;
- (void)connection:(TCPServerConnection *)aConnection didReceiveData:(NSData *)data
	[server write:data excluding:aConnection];
@implementation TCPChatClient
- (id)init
	self = [super init];
	client = [[TCPClient alloc] init];
	client.delegate = self;
	return self;
- (void)connectToServer:(TCPHost *)host
	[client connectTo:host];
_ (void)send:(NSString *)msg
	[client write:[msg dataUsingEncoding:NSUTF8StringEncoding]];
- (void)client:(TCPClient *)aClient didReceiveData:(NSData *)data
	NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];


Comments Off more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...