Friday, June 26, 2009

FileMaker Wish List

I know, it's not even Christmas! But here's my wish list for FileMaker Santa to consider for inclusion in future versions(s). (Hopefully sooner rather than later.)

It's a long list, so bear with me. Feel free to leave comments, but know that I moderate my comments, so don't be surprised (or offended, please) if yours doesn't show up immediately (or at all).

NOTE: If you are not a FileMaker developer, this list will not mean anything to you, so you can feel free to skip this post. Don't worry: I'm not offended. :)

Formatting Enhancements
  1. Conditional Formatting of Number/Date/Time/Container types.

    (currently only supports conditional formatting of Text)

  2. Conditional Formatting of Line/Fill Patterns.
  3. Conditional Formatting of object'sexistence.

    (i.e. whether it even displays)

  4. Ability to specify Alpha channel (transparency/opacity) for all Fills & Colors

    (RGBA instead of RGB).

Developer Features
Manage Scripts
  1. Script Numbers
  2. Quick Find: search inside scripts also

    Currently only searches Script Names.

    Currently only available by printing script(s) to PDF and searching that.

Script Editor
  1. Script Line Numbers
  2. Colorization of Script Steps
  3. Expand/Collapse code blocks

    Specifically Loop...End Loop and If...Else If...Else...End If blocks.

    Defaults to Expanded

    State stored

    —per file?

    —per session? (i.e. until last window close)

    —per FM Instance? (like Save Layout Changes Automatically)

Calculation Editor
Most of these would be toggleable and customizable.
See Apatana or any decent IDE for example(s).
  1. Calculation Line Numbers
  2. Colorize/Format Calculation
  3. Type-Ahead Code Suggetions
  4. Automatic Code Completion

    Similar to Code Suggestions, but actually inserts other half of pairs of Parentheses and Brackets, and also inserts semicolons where it can, etc.

  5. Automatic Whitespacing (default Off)
  6. Enclosure Highlighting (parentheses/brackets)

    e.g. Click an Open Parenthesis, and it's highlighted, and the Closing Parenthesis (if any) that FM think corresponds is also highlighted.

  7. Code Collapsing

    If FM determines that you have closed a particular code block properly, it should let you collapse that code, at least until the Calculation is saved.

    The "Expand All" state would be restored when the user is finished editing the Calculation and closed the Calculation window, either by OK or Cancel.

  1. Layout Numbers

    Display automatically to the left of the Layout Name, wherever it appears.

    This is the number that displays in the Status Area ("flip book" number).

  2. Layout Folders (like Script Folders)
New/Altered Calculation Functions
  1. Altered: TableNames becomes TableOccurrenceNames

    This more accurately reflects this function's actual feature set.

  2. Altered: TableIDs becomes TableOccurrenceIDs

    This more accurately reflects this function's actual feature set.

  3. New: TableNames

    Lists the names of the actual base tables in the file.

  4. New: TableIDs

    Lists the internal FM IDs of the actual base tables in the file.

    In case there is any confusion:

    by "base tables", I'm referring to the tables and their names, as displayed in the Tables tab of Manage Database.

  5. New: Get ( ActiveScripts )

    Lists the active scripts — the script stack.

    This is currently only available in the bottom of the Script Debugger window.

  6. New: Get ( VariableNames )

    Lists the names of the active variables, including scope indicator.

    This is currently only available in the "Current" tab of the Data Viewer.

  7. New: VariableType ( Variable )

    Returns the data type (Text, Number, Container, Date, Time, TimeStamp) of the data stored in the variable.

    Does for Variables what FieldType does for fields.

  8. Altered: Last updated to handle Lists, too.

    Equivalent to
    GetValue ( listOfValues ; ValueCount ( listOfValues ) )

  9. Altered: FilterValues updated to allow user to specify whichFilter to apply.

    Currently only does Intersection.

  10. New: CollapseValues ( listOfValues )

    De-duplicates Value List.

  11. New: ReplaceValues ( listOfValues ; start ; numberOfValues ; replacementValues )
  12. New: FilterValuesByPattern ( listOfValues ; searchText )

    Acts like FilterValues combined with PatternCount

    Iterates over values, and keeps the ones where PatternCount ( value ; searchText ) >0

  13. New: ForEach ( listOfValues ; do )

    Iterates over value list, and runs the do code block.

    Uses Self to reference current value.

  14. New: While ( condition ; do )

    As long as condition evaluates to Boolean TRUE, it evaluates the do block, and reiterates.

    Otherwise, it stops.

  15. New: Function ( {[}

    paramName1 {= defaultValue1}
    {; paramName2 ]};

    do {; {{$}$}functionName } )

    Allows custom functions to be defined on the fly.
    Can recurse.
    Scope assigned like variables.


    I do:Set Variable [

    $create_function ;
    Function (

    myParam = 0 ;
    Case ( myParam ; "Hello World" ; 0 ) ;



    I then do:
    Set Variable [ $call_my_function ; $my_hello_world_function( TRUE ) ]
    $call_my_function is now set to the string "Hello World".

    IsValid would be used to check if a Function is defined or not, like normal.

    Scope is defined exactly like variables:

    no initial sign = calculation scope (like Let variables)
    $ = local/script scope
    $$ = global scope

    Added to the Data Viewer's Current tab. The "Value" column would show the parameters (their defaults) and the text of the do block —notthe results of evaluating the do block, since it hasn't been called specifically (that's what the Watch tab is for).

  1. ActiveX object update
    1. Allow Script Parameters
    2. Script calls return Script Result to ActiveX object for retrieval.
  2. Ability to designate Custom Function parameters as Optional.
  3. Ability to display Variables on Layouts, as Merge Data.
    1. "Merge Data" = New name for "Merge Fields".
    2. Includes Function variables of the Script and Global scopes — see above.
    3. Would cut down significantly on the number of "display" calculation fields clogging up the Schema.
  4. Ability to specify OR relationships.
  5. Ability to use Variables in relationships.
  6. Change Self when used on Buttons to refer to the underlying object, not the FM "ghost" object grouped on top of it when the button is created.
  7. New Layout Object: Calendar (details TBD)
  8. Make all Windows windows independent of main FM App window, like on Mac.
  9. Ability to programmaticaly manipulate layout objects
    1. Includes ability to hide/delete them, and create/show them.
    2. Any changes are temporaray. For how long would be TBD, but no longer than 'til the last window for the File closes.
    3. Relevant layout editing permissions would apply.
    4. Perhaps new function?: SetLayoutObjectAttribute ( objectName ; attributeName ; value )
    5. Perhaps new Script Step?: Set Layout Object [ object ; attribute ; value ]
  10. Ability to trigger Scripts from Calculations

    New function: PerformScript ( fileName ; scriptName ; parameter )
    Function returns Script Result (if any).

  11. Ability to programmatically (script steps) create/alter/delete Schema items
    • Tables
    • Table Occurrences
    • Fields
    • Relationships
    • Layouts
    • Layout Folders
    • Layout Objects (see above)
    • Scripts
    • Script Steps
    • Script Folders
    • etcetera
Has it been a whole week already? Wow.

Anyway. Here's a random update on my life:

I can't see more than a couple of days ahead of me (and my "seeing" of those is pure conjecture), but Jesus is with me, and I'm enjoying walking with Him day-by-day.

I went ahead and ordered Atlas Shrugged. I got it yesterday, and will be reading it (or at least starting to) over the weekend.

I'm starting to dabble in LISP.

Learning Arabic -- slowly!

Discovered Kubuntu 9.04 and Intel embedded graphics cards get along fine: until you try to do Dual Screens, in which case the KDE GUI for Screen management has a huge bug in it -- it doesn't display the "Position" properties of a piece of hardware unless that hardware is not available/disabled/otherwise grayed out, at which condition it's useless anyway. :( Apparently this bug has been in it for a couple of revisions now, and, while it's been assigned for handling, I'm not holding my breath.

Came up with a FileMaker feature wish-list of mostly "low-hanging fruit" -- I suppose-- for FileMaker to consider implementing in future versions. I'll post that separately, because it's really long.

That's it for now.

Wednesday, June 17, 2009

On Creeds, Confessions, and Statements of Faith

I think it's funny that some churches can genuinely detest the idea of Creeds and Confessions -- and then turn around and have a "Statement of Faith," "Our Distinctives," or "We Believe" page on their church website.

I think it's even funnier that these churches frequently hold attestation (read: Confession) of agreement with their "Statement of Faith" (or other similar) document as a condition of membership.

To each his own, I guess. Praise the Lord for the Priesthood of the Individual Believer.

*walks away chuckling*

Monday, June 15, 2009


I usually don't like Mondays (who does?). But today, I'm actually glad, because it seems that I'm back in the swing of things. You see, this weekend was particularly bad.

We had a great day at church...that wasn't it. But it was still not a great weekend for me. I had a low-level headache all weekend, and couldn't focus to save my life. I basically felt like crawling in a hole somewhere and staying there until I felt better. Problem is, Sunday for me is not a day I can crawl in a hole. :( Oh, well.

Anyway, I seem to be over whatever it was, and I'm actually looking forward to the week. :)

Friday, June 12, 2009


I hate mornings. Perhaps this is a leftover from my childhood, and I will grow out of it eventually. Perhaps it's hereditary (my father is also not a "morning person", although he bears up under the necessity of early rising much better and more consistently than I). Or perhaps I'm just, at some level lazy. I don't know.

Either way, I hate mornings. Indeed, my worst time of day is the moment I have to arise -- not simply to awake (that is fine, as long as I can just lie in bed and "veg"), but the moment that I must actually haul my carcass out of bed. Now, that doesn't mean I don't do it. It just means that I dread doing it, and would gladly skip mornings if I could.

So, you can imagine my horror when, after having worked until 4:00 a.m. and gotten to sleep at 5:00 a.m. (today), the client for whom I was working calls my cell phone with the *ahem* wonderful news that something else was broken, and that I had to fix it immediately because the person whose job it is to do something with the process that was broken was there "now". Oh, joy!

Well, anyway, before I realized it, I was in the shower: awake and getting ready. And so I made an interesting observation: I find it much less painful to get out of bed after only a few hours' sleep (3 hrs., 49 min., to be exact, in this case) than after a full 8 or 9 hours of regular sleep.

(Of course, I wind up paying for it in dulled focus and constant need to "push" myself throughout the day; but I'll take what I can get. :) )

I've noticed this in the past as well: I can get up at oh-dark-30 to get to the airport for a 6:00 a.m. flight, or to get to the church to leave for a week of camp at 7:00 a.m.; but to get up at 8:45 a.m. (after having gone to bed at midnight) in order to get to work on time at 9:30 a.m. is absolute torture. So I suffer the same amount in either case, but if I've only gotten a few hours' sleep, the suffering is spread out.


Wednesday, June 10, 2009


Raking is easy, but all you get is leaves. Digging is hard, but you might find gold.

John Piper

Monday, June 8, 2009

My New Blog

So why am I starting a blog?

I'm not really. More like I'm moving my blog from FaceBook Notes to here.

I've been posting random thoughts and essays on my FaceBook Notes. However, two things occurred to me that warranted giving that up and starting here:

1. Only FaceBook users can read FaceBook Notes from my Profile. However, I have some non-FaceBook friends (Hi Mom! *wave* ) who would like to be able to read my writings also. Basically, I'm broadening my potential readership base.

2. What I was doing over at FaceBook was not just making Notes. I was, functionally, blogging. So why not use the right tool for the job? Thus this blog.

When I signed up, they asked me what I wanted to call my blog. I thought about it for a while, and I came up with "Beholding the Beauty" because that is one of my goals for each day, and the only -- to live life beholding the beauty of the LORD working in and through and around me. (From Psalm 24:7)