Oatmeal & Coffee by Philip Regan
Simple Cataloger v3.1.1 Update 
Saturday, December 26, 2009, 03:19 PM - General
Posted by Administrator
Here is the rundown of the new features that are included and/or are now fixed:

  • Custom delimiters between data points.
  • User selects when and where catalog metadata get saved (At beginning, at end, or not at all).
  • Simple Cataloger is now a document-based application. Multiple catalogers can be run at the same time, and catalogers can be saved for later reuse.
  • Added a Recent Items menu, and support for opening the most recent item by default when starting the application.
  • The frontmost cataloger window can be saved as the default preferences.
  • Verified Mac OS 10.6 (Snow Leopard) compatibility.


I'm still not entirely clear as to what happened with the v3.1 release, but the v3.1.1 update sorts everything out, is thoroughly tested, and uploaded to the server. So, what's done is done, and it's not so much about the mistake as it is the recovery. It took a little longer than I had wanted (and expected) to get this out the door, but it's done and that's what's important.

I hope you find this new version as useful as I do, and, as always, I'm happy to hear any and all feedback you have.

add comment   |  0 trackbacks   |  permalink   |   ( 3 / 79 )
Simple Cataloger: Third time wasn't the charm it seems 
Thursday, December 10, 2009, 07:59 PM - Programming & Computers
Posted by Administrator
Well, I made a huge mistake of epic proportions: I complied the wrong code and posted it for all of the world to download. The one that got posted was an alpha I had kicking around, but wasn't feature complete and still had the moral equivalent of a few wires and hoses hanging out of an open hatch. It wasn't the final product.

I could blame this on a number of things: I was in a vaguely self-imposed rush, I have a sleep-deprived, addled brain from caring for a newborn, whatever. But there really isn't an excuse. Frankly, I'm mortified by this, and to cap it all off, I can't seem to reconcile what is supposed to be the correct set of code. For someone who desperately would love to become a full-time programmer, I fell flat on my face.

The earliest I will be able to deal with this is this weekend. So, until then, I'm going with the notion that it isn't about the mistake, it's about the recovery. To that end, please feel free to download the Simple Cataloger 2 here...

http://www.oatmealandcoffee.com/softwar ... loger2.zip

...and please use this code to unlock all of the features:

OCSC20-4W3R2N-0M7R6R-37608

Sorry about this, everyone. You deserve better. A fix is on the way.
add comment ( 3 views )   |  0 trackbacks   |  permalink   |   ( 3 / 65 )
Simple Cataloger 3: The third time is the charm 
Sunday, December 6, 2009, 04:51 PM - General
Posted by Administrator
Simple Cataloger 3 is now available. There are quite a few changes in this version, and they are largely as a direct result of feedback from our users.

  • Custom delimiters between data points.
  • User selects when and where catalog metadata get saved (At beginning, at end, or not at all).
  • Catalog settings can be saved for later use. Also added support for a Recent Items menu.
  • Multiple catalogers can be run at the same time. For preferences, the frontmost cataloger window can be saved as the default preferences.
  • Verified Mac OS 10.6 (Snow Leopard) compatibility.


The single biggest change is that Simple Cataloger is now free. I enjoy working on this project, and to all of those people over the past couple of years that have purchased licenses and sent in feedback, I would like give my most heartfelt gratitude. I will continue to support the software and all of you, and I hope everyone enjoys the new changes. I look forward to hearing what everyone thinks.

The other major change is that there is now an open source branch of the code hosted in the ARBP's Source Code Repository. Please note that this is not the same code that is used in the commercial version hosted on my site and I will be independently developing that as needed. As such, there are still some unfinished and unpolished portions of this project, though, for the most part, it is clean code. I'm submitting it as open source because it contains solutions to a variety of interface problems in Mac OS X that I have found in a variety of locations and I hope other developers within the REALbasic community can find use with what is contained inside. This is simply my saying "Thanks" to the REALbasic community as a whole.

This has been sitting on my list of things to do for far too long and external forces have finally pushed me to actually do something about it. Enjoy!
add comment ( 8 views )   |  0 trackbacks   |  permalink   |   ( 2.9 / 77 )
Applescripting Adobe InDesign CS4 Revisited 
Thursday, November 19, 2009, 06:25 AM - Programming & Computers
Posted by Administrator
I have an update to an earlier post about Applescripting InDesign, Applescripting for Adobe and Kindergarten Scissors: A Study in Object Transformations Across Versions.

Just a quick recap, here is how the commands looked in CS2 and CS3:

Adobe InDesign CS2
rotate text frame ¬
by fixed ¬
around anything ¬
considering current rotation boolean ¬
transforming content boolean ¬
considering parents rotation boolean

set theResult to move reference ¬
to insertion location ¬
by number | string ¬
binding binding

Adobe InDesign CS3
Rotating then required an undocumented matrix:
tell application "Adobe InDesign CS3"
set myMatrix to make transformation matrix with properties {counterclockwise rotation angle:90, horizontal translation:-217.5, vertical translation:217.5}
transform myLayoutObject in pasteboard coordinates from center anchor with matrix myMatrix
end tell


Move was unchanged from CS2

Adobe InDesign CS4
I now have CS4, and was able to look up the Rotate and Move commands.

Rotate is back when searching for it in the dictionary, but it's not Rotate as we know it. It's really more of an abstract command meant to be performed on one of those ill-documented transformation matrices.

rotate matrix (verb)Rotate the transformation matrix. (from Layout Suite)

function syntax
set theResult to rotate matrix transformation matrix ¬
by angle fixed ¬
by cosine fixed ¬
by sine fixed

result
transformation matrix: The rotated transformation matrix

Actually rotating an object in the layout is still left to the transform command, which mentions nothing about rotating. Essentially, rotating an object is unchanged from CS3. Which makes me wonder why was this command even necessary? But, again, to find how to rotate an object is an exercise it "What were the programmers thinking at the time they wrote this?".

  • Searching "rotate" brings up eight hits none of them having to do with rotating an actual object in the layout, only abstract transformation matrices and other devices and properties.
  • Searching "rotating" returns 14 hits in four functions: transform again, transform again individually, transform sequence again, and transform sequence again individually. The only mention of rotation is in the function description: "Transformations include moving, rotating, shearing, scaling, and flipping."
  • Searching "rotation" returns 47 hits almost all of them rotation angle and absolute rotation angle properties of a variety of classes. I can't decide if this is reasonable or not, but to perform a transformation as an actual verb/command, we're still left with the abstracted transformcommand, which we know doesn't appear when searching for the painfully obvious "rotate". Besides, the sister command Move is called as a verb and here we're not. The interfaces to two commands usually grouped together are altogether different. So, no, properties aren't entirely reasonble, are they?


Move, surprisingly but not all at that time, is unchanged from CS2/CS3.

Words escape me.
add comment ( 1 view )   |  0 trackbacks   |  permalink   |   ( 3 / 52 )
Adobe Acrobat Professional: A Gaping Hole in Macintosh Scripting  
Monday, November 16, 2009, 07:09 PM - Programming & Computers
Posted by Administrator
Anyone who has used Adobe products for any length of time knows that UI consistency is not one of Adobe's strong points. In fact, for the uninitiated, things have gotten so bad over at Adobe that there is even a blog about it over at Adobe Gripes and though it seems Flash is the biggest culprit, all of the applications are guilty of some nonsense. Anyone who has scripted Adobe products knows that their UI inconsistency carries over to their APIs as well. I've complained about this in the past1 and I'm not the only one to do so, either.

For the first time, I really, really need to script the processing of PDFs because eBooks are popping up freakin' everywhere and vendors want PDFs if I can't give the native format, which I can't (yet and it will be a long while before I can). I'm not asking for a lot of depth here. I just need to compile, optimize, and crop multiple sets of PDFs. This type of work I can set up in other applications, Adobe's included, fairly easily.

None of those basic production commands in Acrobat are available to Applescript, however. It seems that Adobe has decided to abandon further Applescript (without really telling anyone) and focus entirely on Javascript. So, what few Applescript commands that do exist look like they were simply abandoned and clearly not brought to the same implementations of the rest of the Creative Suite. For the Applescript folks they have offered (what I guess is) a laurel leaf, albeit a rotting one with most of the leaves lobbed off:


-- get the title of an open document
tell application "Adobe Acrobat Professional"
do script "this.info.title;"
end tell


"do script". That's it.

So, I can automate Acrobat, but only on its own terms, which are both cheesy and lame. Communication is strictly limited: I can't send data to it, but that doesn't matter because even if I could I can't get data out of it, and it looks as though I'm pretty much forced to debug the code in Acrobat's Javascript debugger.2

At the same time, all of the other Adobe products that matter to me—InDesign, Photoshop, and Illustrator—have very robust, if not feature-complete implementations (though frustratingly inconsistent and/or poorly documented at times). So, why no Applescript support in Acrobat, Adobe, when clearly you care enough about it everywhere else? What is it about Acrobat that sets it so far apart from the rest of the line-up that you felt Applescript was unnecessary, despite the fact that all of the other production-related applications have robust PDF support? It's nonsense like this that makes people want to throw chairs.

The do script command is nothing more than a crappy cop-out of them not doing their job to the level their price points imply and Adobe Acrobat is preventing me from me doing my job effectively. I've found alternatives to all of Adobe's apps at home, but unfortunately I'm burdened with Adobe forever at The Day Job and have to suffer the consequences of their poor decision-making (how are those layoffs working out for you guys?).

Even if do script were actually, you know, useful, the Javascript implementation still isn't feature-complete even though were are now on version 9 of Acrobat...of course. Why would it be any other way?

It seems I can combine PDFs, and I can crop, but I can't optimize. Ironically, of all the things I need to do that is the single command I need more than anything. Optimizing a PDF is necessary to go from a print PDF to the "web PDF" that all of the vendors ask for and are so much easier to FTP. I can go from 3 GB of PDF to <300 MB, and the process may only take a couple clicks, but it can take hours to run through a large enough book, and it almost entirely consumes a machine in the process. I have literally thousands of books to go through, and scripting this would save me tens of thousands of dollars each year. It's a perfect job for my automation Mac and it would be a huge win for me. But can I script it? No, because that would be too freakin' logical, and that just reinforces my dislike of Adobe. It seems just when I think I have a solution at my fingertips, they have some reason why I can't do it properly or, in this case, at all.

Essentially, even after all of these years and upgrades, there is no way I can reasonably (comprehensively) integrate Acrobat into my other well-established, Adobe-centric workflows, and that whole notion is just laughable. Everything is so seemingly well-integrated, yet Acrobat stands alone. I have Applescripts that are thousands of lines long that save me countless hours (at least thousands) of manual work each year. In one set of scripts I send calls to Adobe InDesign, Adobe Illustrator, Adobe Photoshop, the Mac OS Finder, and Microsoft Excel all seamlessly working together. The single gaping hole in all of that is Adobe Acrobat, and up until now I was able to work around Acrobat's severe scripting limitations.

But now that eBooks have taken on a whole new priority, and all of the vendors that I work with take PDFs out of convenience, I desperately need to script the processing of PDFs. I don't have a choice here. I have to find a solution. Adobe is, in its own weird way, keeping me from doing my job in a reasonable fashion.

Since I can't do what I want with Adobe's software "out of the box", my last alternative is to call an Adobe rep and see if they have a server-based solution (ugh, there goes another point of IT independence) that can help move a lot of PDFs in a short period of time. I'm sure this is going to cost me a whole more than it costs them to pay one of their programmers to write some code over the course of a week or so and they can just fix this for everybody.

Perhaps that's been their plan all along.




1: Two blog postings come to mind: An Applescript and Adobe Rant and Applescripting for Adobe and Kindergarten Scissors: A Study in Object Transformations Across Versions

2: These are assumptions on my part since I haven't actually used this command before. However, the Applescript dictionary entry for do script only shows this in Script Debugger:

do script (verb)Perform a JavaScript. (from the miscellaneous standards suite)

COMMAND SYNTAX
do script unicode text ¬
file alias

PARAMETERS
direct parameter, optional, unicode text, The actual text of the JavaScript to perform.
file, optional, alias, The file containing the JavaScript to perform.

I don't see any way to send arguments and return values. Do you?
add comment ( 1 view )   |  0 trackbacks   |  permalink   |   ( 3 / 57 )
Anthony Daniels in the Boston Globe on Music vs. Sports 
Friday, November 13, 2009, 06:09 AM - General
Posted by Administrator
I hope that children will be inspired to take up music. Why not? Enough baseball, enough football in this country! I cannot believe the yardage that is given to sports. How can they speak so long about a man hitting a ball?


Very well put. As much as I enjoy a good sporting event, I always thought skilled musicians of any genre were much more interesting.

Link: ‘Please don’t deactivate me’
add comment ( 1 view )   |  0 trackbacks   |  permalink   |   ( 3 / 49 )
Bits and Bobs 
Wednesday, November 11, 2009, 06:50 AM - General
Posted by Administrator
All child-rearing books are comprehensive, detailed, and inapplicable to children.


The guideline that 7-day-old babies are supposed to poop three to four times a day falls under the same context of the guideline that states I am supposed to eat five fruits and vegetables a day.


Now I understand why new fathers respond with "Everyone is doing great!" when asked "How are the Mom and new baby?". The reality is far too complex for casual conversation, the uninitiated would never have kids if they knew the truth, and nobody wants to be rude. This goes back to my personal rule of "Don't ask the question for which you really don't want to know the answer."


Pregnancy is a hassle, labor sucks, and birthing is gross, but they answer that fundamental question of "Why am I here?". Parenting a child fulfills your part of the evolution equation.
add comment ( 1 view )   |  0 trackbacks   |  permalink   |   ( 3.1 / 47 )
And then there were three... 
Wednesday, November 4, 2009, 05:32 PM - General
Posted by Administrator
Amelia Regan was brought forth unto this world on November 3 with a lovely head of golden blonde hair and what look like are going to be gorgeous blue eyes. But, perhaps I'm a bit biased. Mom, Dad, and The Kid are doing just fine.

Just to confirm the immediate suspicion, Amelia is named after the aviator Amelia Earhart. Names were tossed around that focused on women who kicked some butt during the time they were here, and Amelia Earhart certainly did enough of that. The name Amelia was my pick, and special thanks to Renee for allowing me the privilege.



Let the multi-tasking begin!


7 comments ( 41 views )   |  0 trackbacks   |  permalink   |   ( 3.1 / 60 )
I am not an idiot, but sometimes header files make me feel like one. 
Saturday, October 24, 2009, 05:04 PM - Programming & Computers
Posted by Administrator
This gives me an error, but **** all if I can figure out how to fix it.


// Controller.h

#import <Foundation/Foundation.h>

@class Model;
@class AScene;

@interface Controller : NSObject {
Model *Model;
}
@property (nonatomic, retain) Model *Model;

-(void)runScene;

// Controller.m

#import "Controller.h"

#import "Model.h"
#import "AScene.h"

@implementation Controller

@synthesize Model;

-(void)runScene {
AScene *newScene = [[AScene alloc] init];
newScene.controller = self;
}

// RootScene.h

#import "cocos2d.h"

@class Controller;

@interface RootScene : Scene {
Controller *controller;
}

@property (nonatomic, retain) Controller *controller;

@end

// RootScene.m

#import "RootScene.h"

#import "Controller.h"

@implementation RootScene

@synthesize controller;

- (id) init
{
self = [super init];
if (self != nil) {
//
}
return self;
}

- (void) dealloc
{
[controller release];
[super dealloc];
}

@end

// AScene.h

#import "RootScene.h"

@class ALayer;
@class Model;

@interface AScene : RootScene {

}

@end

// AScene.m

#import "AScene.h"
#import "ALayer.h"
#import "Model.h"

@implementation AScene

- (id) init
{
self = [super init];
if (self != nil) {
ALayer *newLayer = [ALayer node];
newLayer.model = controller.Model; // <-- Request for member 'Model' in something not a stucture or union
// casting does not work here.
[self addChild:statusScreenLayer];
}
return self;
}

- (void) dealloc
{
//
[super dealloc];
}

@end

// RootLayer.h

#import "cocos2d.h"

@class Model;

@interface RootLayer : Layer {
Model *model;
}

@property (nonatomic, retain) Model *model;

@end

// RootLayer.m

#import "RootLayer.h"

#import "Model.h"

@implementation RootLayer

@synthesize model;

- (id) init
{
self = [super init];
if (self != nil) {
//
}
return self;
}

- (void) dealloc
{
[model release];
[super dealloc];
}

@end

// ALayer.h

#import "RootLayer.h"

@interface ALayer : RootLayer {

}

-(void) draw;

@end

// ALayer.m

#import "ALayer.h"

@implementation ALayer

-(void) draw {
// draw based on state of the model
}

@end


Oh, yeah, and I still haven't resolved my code signing problem from before.
1 comment ( 8 views )   |  0 trackbacks   |  permalink   |   ( 3 / 64 )
Why I killed my Facebook account 
Monday, October 12, 2009, 10:38 PM - General
Posted by Administrator
I could generate a massive list of all the reasons why I killed my Facebook account—it's a time sink, it's too open, there are too many damn widgets—and they would all be true. But, it really only came down to one.

It seemed to me as though using Facebook to "keep in touch with friends and family" had the same feeling that Boston is still "Irish". It is but it isn't. I hardly used my account except for a brief flurry of activity, and then I was more voyeur than participant with my odd little "Philip Regan is..." blurb at the top of the page. As with anything, one gets out of it what one puts into it, but there are two reasons why I wasn't putting anything into it.

The first is that the Facebook "news" stream became Yet Another Inbox/RSS Feed to read and I felt as though I was reading about things that I normally wouldn't talk about in a face-to-face conversation or even in an email. I have 14 email addresses and over 150 RSS feeds I read reguarly already, so I stopped reading the last one to be added. Last hired, first fired, if you will.

The second is that Facebook also became Yet Another Web Portal to maintain, and I'm having a hard enough time keeping this one (that I actually pay for) filled with new content these days. So, I decided that it was better to just cut my account loose and walk away.

Ultimately, I felt the whole experience was more than a little disingenuous, and not a true reflection of who I am and what I do. My friends and family, frankly, deserve better than that. The people who really know me know where I am. The people who want to know me can just come looking (it's not as though I'm hard to find).

So, it's nothing personal, my (formerly Facebook but still real) friends, I just needed to improve the signal-to-noise ratio and killing my Facebook account was the best way to jump start that process.

I figure in the not-too-distant future, there is going to be another "Philip Regan" out there who won't believe his luck that http://www.facebook.com/philip.regan is actually available and snap it up. Good luck with that, mate, and I hope you have a better time with it than I did.

Now, about those 14 emails addresses (you can have my RSS feeds when you pry them from my cold, dead fingers)...

add comment ( 2 views )   |  0 trackbacks   |  permalink   |   ( 2.9 / 77 )

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Next> Last>>