Materials from my DevCon sessions

November 16th, 2013

So, I’m finally posting the materials from my FileMaker DevCon 2013 sessions.

The first one was a  pre-conference session, Crash Course in Advanced Developer Techniques. The available files are the presentation slides and the demo file: Crash Test Dummy, which contains a LOT of sample code and use of techniques.

The second one was What Was I Thinking?! Coding Best Practices. The presentation slides are available, and the demo file from my other session was used a few times to show examples.

FileMaker DevCon 2013

August 5th, 2013

So, my blog has NOT been regularly updated, but I thought I should add a post acknowledging that I will be presenting at FileMaker DevCon 2013 in San Diego, CA, which runs August 12-15.

The sessions I will be presenting are:

  • Mon, 1:30 PM: Crash Course in Advanced Developer Techniques (PreCon Session)

    Ever attend a session where the presenter threw out a phrase like “Then I used X to make this happen…” and felt like you didn’t understand what follows? Instead of having to hang around afterwards to find out what they meant, come to this session and learn about virtual lists, complex script parameters, modular coding, web viewers as custom interface elements, and much more.

  • Wed, 10:45 AM: What Was I Thinking? Coding Best Practices

    Developers should always be thinking “How will this code look to the next developer?” – that saves time later. But, coding best practices also save time NOW, by helping us avoid bugs in the first place. Dashing off a quick script or sloppy calculation might feel faster, but when we spend an extra hour tracking down a bug that could have been avoided, we discover that consistency saves time everywhere.

I’m also considering hosting an Unconference session on “Cracking the Clipboard” to do some very useful things with FileMaker objects in the clipboard. We use that technique at my office to dramatically save time during development. We  avoid a lot of repetitive work by converting objects between types, search-and-replace within objects, making multiple copies of similar objects, changing the table occurrence for a group of related layout objects, and much more. For example, one macro we have takes selected field definition objects and puts field layout objects (and matching labels), Set Field script steps, and their fully-qualified field reference names as text all into the clipboard at the same time. So, you select a bunch of field definitions and can then paste them onto a layout, into a script, and even into a text editor. The same thing works in the other direction.

I will have demo files available during and after DevCon for each of the official sessions, and may find time to throw something together for an Unconference session, but my schedule has been very busy lately – rolling out a FileMaker Go app for work, complete with home-brew (for now) sync functionality.

Apple’s In-App Purchase Requirements

February 2nd, 2011

Has Apple really made a major shift in its developer guidelines (and is trying to claim it hasn’t), or was a mistake by a spokesperson exacerbated by journalists who don’t seem to understand the current situation?

There is some pandemonium going on in tech circles about a “change” in Apple’s guidelines for developers reported by Sony in a NY Times article, “Apple Moves to Tighten Control of App Store,” by Claire Cain Miller and Miguel Helft. Apparently, Sony is complaining that they were told they could not include the Sony Reader Store within their app, although the Times didn’t explicitly report that Sony was attempting to make purchase within its app. Note first that the other eBook apps do not provide for purchase within the app, but rather take the user to a web page in Mobile Safari.

The Times article says that Apple reportedly told Sony “from now on, all in-app purchases would have to go through Apple.” (emphasis added)  Note that the words “from now on” imply something that is not correct. As we will see, the Guidelines already forbid that, and existing apps have abided by that guideline. The authors muddied the water by not understanding the current situation, seeming to just take Steve Haber, president of Sony’s digital reading division, as explaining the past and current situation accurately.

Apple’s App Store Review Guidelines have two sections that are relevant to In-App Purchasing:

11.2 Apps utilizing a system other than the In App Purchase API (IAP) to purchase content, functionality, or services in an app will be rejected.
11.3 Apps using IAP to purchase physical goods or goods and services used outside of the application will be rejected.

Read carefully, they do not clearly forbid what Amazon has been doing, as it does not “purchase content, functionality, or services in an app” (emphasis added).  However, the is ambiguity that leads to a problem. Guideline 11.2 could be read as forbidding an alternate system “in an app” that is used to purchase, OR it could forbid an alternate system (even outside the app) that is used to purchase items that will be used “in an app.” This is where the Guidelines are confusing, and potentially forbid what Amazon is doing. Of course, read that second way, they also forbid Hulu Plus and many other apps, including AT&T’s Mark the Spot, which allows you to report problems with their network (which of course requires that you pay to be an AT&T customer). This second reading would also necessarily lead to rejection of the Dropbox app for people who have paid accounts, as well as any other app that uses “functionality” or “services” that have been paid for elsewhere. If this is the reading Apple intends, they will destroyed a wide swath of apps from the App Store.

Because of that outcome, I think it is much more likely that the correct reading is that 11.2 forbids building a system “in an app” that is an alternative way to purchase items. Read that way, with 11.3 forbidding the use of Apple’s In-App Purchasing to buy content that will be used outside the app, you have a pair of guidelines that say In-App Purchasing is the only way to buy content “in an app” (but allowing external purchases), and that it cannot be used to buy goods that are intended for use outside of the app. Together, those guidelines are thus designed to ensure that purchases made within an app use Apple’s method, and are only for truly “in-app” purchases.

What I can’t explain is the interpretation offered by Apple’s spokesperson, Trudy Miller. Here is the quote attributed to her by the NY Times:

“We have not changed our developer terms or guidelines . . . . We are now requiring that if an app offers customers the ability to purchase books outside of the app, that the same option is also available to customers from within the app with in-app purchase.”

If that quote is accurate, then it is hard to see how the statement is not either contradictory or incorrect. First, it supports my suggestion that 11.2 does allow purchases made outside the app, as it implicitly accepts that as curently-allowed behavior. However, the statement then seems to add something completely new, not found within 11.2 or 11.3 (or other parts of the Guidelines): that following the rule set forth in 11.2 now adds a new requirement that the same items must be available via Apple’s In-App Purchasing. That addition directly contradicts the first part of the statement that they “have not changed [the] developer terms or guidelines.” As John Gruber sarcastically points out in an article on Daring Fireball entitled “Oceania: We Have Always Required Books From the Eurasian E-Bookstore to Be Sold Through Our In-App Purchasing System,” a new term is certainly a change to the Guidelines. The other possibility is that Ms. Miller is simply incorrect about this new policy.

It is hard to see how the statement is not other mistaken about what Apple’s policy is, or mistaken when it claims Apple has “not changed” the terms. Either way, all of this would have been more clear, or perhaps completely unnecessary, if the authors of the original article in the Times had understood some of these issues and asked the people they were interviewing about these contradictions, rather than publishing an article that doesn’t actually explain the story, but instead seems to move forward based on the spin given by Sony. The story has either uncovered a major policy shift by Apple that could undermine a large section of the platform it has worked so hard to build, or it has uncovered the amazing fact that Apple has made Sony play by the same rules everyone else already does, even if Sony complains about it to an incredulous press.

Presentation: Dynamic Repeating Calculation Reports

October 15th, 2010

Goal: Reduce table field definition clutter caused by single-purpose calculation fields while still creating complex reports, using FileMaker Pro.

FileMaker Pro has significant capabilities for reporting, but it can sometimes be frustrating creating calculation fields for everything you might want to see only for a single report. Wouldn’t it be nice to create “temporary” fields programmatically via a script that last only while running the report?

There is a way to do this, using the Evaluate function: Create a single calculation field with, say, 100 repetitions, and have it Evaluate calculation text in matching repetitions of a repeating Global Text field. It can be tricky to do this successfully and decrease the likelihood of breaking your report if fields are renamed. I delivered a presentation for the New York FileMaker Developers’ Group on creating a detailed report (simplified for the demo) with many columns, percentages of many values out of the total for multiple sub-summaries, all with only a pair of fields. Download the Dynamic Repeating Calculation Reports demo file to see more. One final note: the most important thing to remember to accomplish this successfully is to wrap every non-repeating field used in your calculations with the Extend() function, so the repeating calculation gets a value beyond its own first repetition.

Presentation: Web Form Posting with POST Method

July 10th, 2010

I recently gave a presentation for a joint meeting of the New York FileMaker Developers Group and the CocoaHeads NYC Group. It was a demonstration on how to submit web forms using the POST method from within FileMaker Pro using the open source command line tool cURL (comes pre-installed in Mac OS X).

FileMaker has the ability to load web pages into a “web-viewer” and can thus be used to programmatically load search results using web forms that submit via the GET method, where the search terms are embedded in the URL of the results page. A developer only needs to create a URL that includes the search terms and set the web-viewer to display that URL. However, many useful sites use the POST method, where the search terms and other parameters are sent in a separate HTTP header, rather than directly in the URL request.

The command line tool cURL has many options for accessing data via HTTP, FTP, and much more, including the ability to programmatically submit form data via POST. So, FileMaker can run an AppleScript command that calls cURL by using the AppleScript command “do shell script.”

A completely unlocked copy of the demo file I used in my presentation is now available online: Web Form POST Demo. Please note that it leverages features of Mac OS X, and thus will not work as-is for the Windows version of FileMaker. There are alternative plugins that can be used to perform similar operations for Windows.

Taunting Adobe Flash with the Apple iPad

January 28th, 2010

Is Apple ashamed of the iPad’s lack of Adobe Flash? Far from it, they seem to be proud to be the ones who are working to kill Flash and move websites to open standards like HTML5.

I found it amusing to read commentary that suggested that Steve Jobs accidentally revealed the iPad’s lack of the Adobe Flash plugin when he viewed the NY Times website during his web browsing demo. For example, a post on says that “a missing plug-in message spoiled Jobs’ presentation for a moment but he quickly navigated away.” That is not true. It shows several times during his demo of web browsing on the iPad. In fact, if you scan to time mark 0:13:57 in the released video of the iPad special event, Steve Jobs actually zooms and and makes the “broken plugin” fill most of the display.These seem to be deliberate. It is clear that Apple views Flash as a terrible format. It is not an open standard for information, Adobe controls it, it wastes a lot of battery life, and it slows down other functions by overusing the CPU.

It seemed to me that Jobs was taunting Adobe and the abomination that is Flash. For years we’ve needed someone with the will and the strength of position to kill Flash. Apple has both. The iPhone doesn’t do Flash and never will. Same for the iPad. Eventually, websites that want to continue reaching many people with disposable income will start using HTML5 and other standards instead of proprietary junk that kills batteries. If the iPad used Flash, that 10 hour battery life probably drops to 2 hours. Apple would be making a big mistake to put Flash in it.

For an insightful commentary on how Apple seems to view Adobe Flash technology, read John Gruber’s post Apple, Adobe, and Flash at

Blog Reset

January 25th, 2010

My first web page was written in October 1994 and was hosted on my Centris 650 (a Macintosh), running at 25 MHz, with 8 MB of RAM. The server software was Chuck Shotton’s MacHTTP. I was a sophomore in a Bachelor of Science in Physics program at Drexel University in Philadelphia. The previous month I had been a volunteer in the university’s “Connectivity Fair,” demonstrating to students and faculty some exciting software called Mosaic (and MacWeb). It allowed you to access the Internet via a graphical interface, rather than text-only via FTP, Gopher, Telnet, IRC, and the like.

Drexel had installed two Ethernet ports in each dorm room over the summer of 1994, providing each residential student with a direct, high-speed connection to the Internet. The connection included permanent IP addresses which allowed us to run our own servers reachable from anywhere else on the Internet. I installed MacHTTP and coded my own web pages using SimpleText, a basic text editor. I learned HTML by reading a few basic introduction pages and then looking at the source code of other websites. Around the same time, the 0.93beta of Netscape was released – a commercial (though free to education users) new web browser made by the former students who had created Mosaic. There were many opportunities to work with school departments to leverage this new media to further academic goals.

Fast forward to today. After graduating from Drexel, I moved from physics to computer consulting, developing database systems, building e-commerce sites, designing workflow automation processes, and much more. I blogged some of my thoughts on technology over the years, but most of that material is very outdated (I may bring over anything I think is still interesting, even if only for humor’s sake). I found myself becoming more and more fascinated, and often infuriated, by the results of the intersection of law and technology. Here were two powerful forces, one designed to be conservative and deliberate, the other often chaotic and swift. The law tried to cope with new technology, while technology at first thought that law was irrelevant. The tangles of human behavior that created led me to want to get involved on both sides of the equation. So, I went to law school – the Benjamin N. Cardozo School of Law, New York, NY.

Three years and many hours of stimulating (or not-so-stimulating) lectures later, I am a new attorney. Admitted in New Jersey, pending application in New York, earning some money via my old career, while seeking a legal career in a difficult market. Part of that search involves upgrading my website to develop my professional brand. Thus, the blog reset. My intention is to post commentary on (or sometimes merely citations to) interesting legal and tech news.