<?xml version="1.0"?>
<rss version="2.0"><channel><title>Wing Forward Solutions</title><link>https://fmforums.com/blogs/blog/59-wing-forward-solutions/</link><description/><language>en</language><item><title>Toggle two fields</title><link>https://fmforums.com/blogs/entry/2491-toggle-two-fields/</link><description><![CDATA[
<p>Say you’ve got two fields, both number fields, and you want to use them as flag fields, to be set to either 0 or 1. But they should always be opposite from each other. Changing one field should change the other and vice versa.</p>
<p>At first, that seems simple. You just need to make each field an auto-enter referencing the other field, right? Nope. That doesn’t work. FileMaker’s calculation engine does not like that sort of circular references. Field A changes so Field B changes so Field A changes, etc. Nothing terrible will happen, it just won’t work.</p>
<p>I played around with a couple ideas and the one that works is this:</p>
<p>Flag1 =</p>
<p>Let ( [ f1 = Flags::Flag1 Final ;<br />
f2 = Flags::Flag2 Final ] ;<br />
If ( $$f2.active ; not f2 &amp; Let ( $$f2.active = “” ; “” ) ;<br />
Let ( $$f1.active = True ; f1 ) ) )</p>
<p> </p>
<p>Flag2 =</p>
<p>Let ( [ f1 = Flags::Flag1 Final ;<br />
f2 = Flags::Flag2 Final ] ;<br />
If ( $$f1.active ; not f1 &amp; Let ( $$f1.active = “” ; “” ) ;<br />
Let ( $$f2.active = True ; f2 ) ) )</p>
<p> </p>
<p>You may wonder what the heck is going on here!</p>
<p>In short, two things. The field is checking to see if it’s the one that was edited, then editing itself based on that knowledge and then handling the $$variable that communicates that.</p>
<p>If [the other field was edited] then change this value to the opposite of that field and clean up the variable.</p>
<p>If [this field was edited] set the variable so the other field knows it’s being edited, and just set the field to itself.</p>
<p>Using Let() to define (and clean up) $$variables inside a calculation is not common, but is powerful and handy in certain situations.</p>
<p>Enjoy!</p>
<p><a href="http://wingforward.net/toggle-two-fields" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2491</guid><pubDate>Fri, 07 Sep 2018 00:30:08 +0000</pubDate></item><item><title>Toggle two fields</title><link>https://fmforums.com/blogs/entry/2097-toggle-two-fields/</link><description><![CDATA[
<p>Say you’ve got two fields, both number fields, and you want to use them as flag fields, to be set to either 0 or 1. But they should always be opposite from each other. Changing one field should change the other and vice versa.</p>
<p>At first, that seems simple. You just need to make each field an auto-enter referencing the other field, right? Nope. That doesn’t work. FileMaker’s calculation engine does not like that sort of circular references. Field A changes so Field B changes so Field A changes, etc. Nothing terrible will happen, it just won’t work.</p>
<p>I played around with a couple ideas and the one that works is this:</p>
<p>Flag1 =</p>
<p>Let ( [ f1 = Flags::Flag1 Final ;<br>
f2 = Flags::Flag2 Final ] ;<br>
If ( $$f2.active ; not f2 &amp; Let ( $$f2.active = “” ; “” ) ;<br>
Let ( $$f1.active = True ; f1 ) ) )</p>
<p> </p>
<p>Flag2 =</p>
<p>Let ( [ f1 = Flags::Flag1 Final ;<br>
f2 = Flags::Flag2 Final ] ;<br>
If ( $$f1.active ; not f1 &amp; Let ( $$f1.active = “” ; “” ) ;<br>
Let ( $$f2.active = True ; f2 ) ) )</p>
<p> </p>
<p>You may wonder what the heck is going on here!</p>
<p>In short, two things. The field is checking to see if it’s the one that was edited, then editing itself based on that knowledge and then handling the $$variable that communicates that.</p>
<p>If [the other field was edited] then change this value to the opposite of that field and clean up the variable.</p>
<p>If [this field was edited] set the variable so the other field knows it’s being edited, and just set the field to itself.</p>
<p>Using Let() to define (and clean up) $$variables inside a calculation is not common, but is powerful and handy in certain situations.</p>
<p>Enjoy!</p>
<br><p><a href="http://wingforward.net/toggle-two-fields" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2097</guid><pubDate>Fri, 07 Sep 2018 00:30:08 +0000</pubDate></item><item><title>DevCon 2018 Review</title><link>https://fmforums.com/blogs/entry/2492-devcon-2018-review/</link><description><![CDATA[
<p>DevCon 2018 was held at the <a href="https://www.marriott.com/hotels/travel/dalgt-gaylord-texan-resort-and-convention-center/" rel="external nofollow">Gaylord Texan Resort and Convention Center</a> win Dallas, Texas from August 6th through the 9th and it was a great event.</p>
<p>The Gaylord Texan (GT) is a destination unto itself. It’s enormous with several acres of open ground enclosed by a dome and a combination of a convention hotel and a family destination. There were a couple other conferences going on, including, notably, QuakeCon with hundred of video game fans hauling their heft PC towers and giant monitors through the lobby. There was plenty for kids to do like a couple of Smurf villages and a live action Gargamel, an Escape Room, a pair of pools, and a full-bore water park. The gym was substantial for a hotel and there were four in-hotel restaurants, not that we needed any. The conference-provided food was plentiful, delicious, and Texan-themed.</p>
<p>The GT was an A+ hotel choice for DevCon.</p>
<p>FMI staff did a great job with registration and sessions. As a first-time <a href="https://community.filemaker.com/docs/DOC-9229" rel="external nofollow">speaker this year</a>, I had a different view from years past. I skipped more sessions than I normally would to prepare and was acutely aware of room sizes and audio/visual infrastructure. And I got to see how FMI treated its presenters. With no reservations, I felt everything was handled professionally and generously. Everyone was just real nice and got their jobs done, mostly notably (for us speakers) Eric Evers and Rosemary Tietge. What more could you ask for?</p>
<p>The main events: the Keynote, Special Session, Attendee Party, and Closing Session &amp; Awards Presentation were stellar. These were all held in a giant ballroom, away from the main convention center and session rooms where they had the space to hold all attendees.</p>
<p>The Keynote (the specifics being under a non-disclosure request) demonstrated a few important things. One is that FMI has listened to the FileMaker developer community’s complaints over years and become vastly more transparent about the future of the product. FMI has been presenting roadmaps and future release information for a couple years now, and they’re continuing with the openness. Also, it’s clear that FMI is embracing multiple technologies, with a goal for FileMaker to be integrated with all available web technologies.</p>
<p>This is a big step for FMI to embrace.</p>
<p>If FM developers work with other technologies, if they become fluent in Javascript and JSON, plumb the depths of APIs and REST, couldn’t they just leave FileMaker and move into other areas? That has to be a concern of FMI. But FMI clearly believes its product adds value to the wider tech stack and they’re pushing forward and that’s amazing. It’s shedding any vestige of an inferiority complex.</p>
<p>The Tuesday morning Special Session gave FMI’s marketing department an important voice.The main speaker for this, <a href="http://peoplerocket.com/richard-cox.html" rel="external nofollow">Richard Cox Braden</a> was inspiring. A fantastic choice. With the new designation of “Workplace Innovation Platform”, FileMaker is claiming its spot between expensive enterprise software and free / low cost general-use utility apps. It’s a good place to be.</p>
<p>Texas was the big theme at the convention and the attendee party included live country music, line dancing, and barbecue. Also giant a cornhole game with the boards painted as the Texas state flag. Plus giant chess sets, soccer billards, and regular shufflepuck. It was super fun.</p>
<p>The closing session was as well-produced as the rest, with good-natured announcements of various community awards, and a lot of humor.</p>
<p>The whole conference was simply a great event.</p>
<p>I know I sound like a gushing schoolboy here, but if there’s nothing worth criticizing, I’m not going to throw in some minor objection just to appear balanced. This was an extraordinarily well-organized event and I’m proud to have been a small part of it.</p>
<p> </p>
<p><a href="http://wingforward.net/devcon-2018-review" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2492</guid><pubDate>Sun, 19 Aug 2018 15:30:46 +0000</pubDate></item><item><title>DevCon 2018 Review</title><link>https://fmforums.com/blogs/entry/2077-devcon-2018-review/</link><description><![CDATA[
<p>DevCon 2018 was held at the <a href="https://www.marriott.com/hotels/travel/dalgt-gaylord-texan-resort-and-convention-center/" rel="external nofollow">Gaylord Texan Resort and Convention Center</a> win Dallas, Texas from August 6th through the 9th and it was a great event.</p>
<p>The Gaylord Texan (GT) is a destination unto itself. It’s enormous with several acres of open ground enclosed by a dome and a combination of a convention hotel and a family destination. There were a couple other conferences going on, including, notably, QuakeCon with hundred of video game fans hauling their heft PC towers and giant monitors through the lobby. There was plenty for kids to do like a couple of Smurf villages and a live action Gargamel, an Escape Room, a pair of pools, and a full-bore water park. The gym was substantial for a hotel and there were four in-hotel restaurants, not that we needed any. The conference-provided food was plentiful, delicious, and Texan-themed.</p>
<p>The GT was an A+ hotel choice for DevCon.</p>
<p>FMI staff did a great job with registration and sessions. As a first-time <a href="https://community.filemaker.com/docs/DOC-9229" rel="external nofollow">speaker this year</a>, I had a different view from years past. I skipped more sessions than I normally would to prepare and was acutely aware of room sizes and audio/visual infrastructure. And I got to see how FMI treated its presenters. With no reservations, I felt everything was handled professionally and generously. Everyone was just real nice and got their jobs done, mostly notably (for us speakers) Eric Evers and Rosemary Tietge. What more could you ask for?</p>
<p>The main events: the Keynote, Special Session, Attendee Party, and Closing Session &amp; Awards Presentation were stellar. These were all held in a giant ballroom, away from the main convention center and session rooms where they had the space to hold all attendees.</p>
<p>The Keynote (the specifics being under a non-disclosure request) demonstrated a few important things. One is that FMI has listened to the FileMaker developer community’s complaints over years and become vastly more transparent about the future of the product. FMI has been presenting roadmaps and future release information for a couple years now, and they’re continuing with the openness. Also, it’s clear that FMI is embracing multiple technologies, with a goal for FileMaker to be integrated with all available web technologies.</p>
<p>This is a big step for FMI to embrace.</p>
<p>If FM developers work with other technologies, if they become fluent in Javascript and JSON, plumb the depths of APIs and REST, couldn’t they just leave FileMaker and move into other areas? That has to be a concern of FMI. But FMI clearly believes its product adds value to the wider tech stack and they’re pushing forward and that’s amazing. It’s shedding any vestige of an inferiority complex.</p>
<p>The Tuesday morning Special Session gave FMI’s marketing department an important voice.The main speaker for this, <a href="http://peoplerocket.com/richard-cox.html" rel="external nofollow">Richard Cox Braden</a> was inspiring. A fantastic choice. With the new designation of “Workplace Innovation Platform”, FileMaker is claiming its spot between expensive enterprise software and free / low cost general-use utility apps. It’s a good place to be.</p>
<p>Texas was the big theme at the convention and the attendee party included live country music, line dancing, and barbecue. Also giant a cornhole game with the boards painted as the Texas state flag. Plus giant chess sets, soccer billards, and regular shufflepuck. It was super fun.</p>
<p>The closing session was as well-produced as the rest, with good-natured announcements of various community awards, and a lot of humor.</p>
<p>The whole conference was simply a great event.</p>
<p>I know I sound like a gushing schoolboy here, but if there’s nothing worth criticizing, I’m not going to throw in some minor objection just to appear balanced. This was an extraordinarily well-organized event and I’m proud to have been a small part of it.</p>
<p> </p>
<br><p><a href="http://wingforward.net/devcon-2018-review" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2077</guid><pubDate>Sun, 19 Aug 2018 15:30:46 +0000</pubDate></item><item><title>Fasting</title><link>https://fmforums.com/blogs/entry/2493-fasting/</link><description><![CDATA[
<p>In the <a href="https://www.mrmoneymustache.com/2012/08/24/fasting-a-fast-way-to-greater-badassity/" rel="external nofollow">blogs</a> and <a href="https://news.ycombinator.com/item?id=11247018" rel="external nofollow">forums</a> I favor, there’s a buzz over the past few years about “intermittent fasting”.  The idea is that not eating all the time is healthy. As far as physical and emotional health benefits, the pop science seems intriguing and it meets my common sense filters, so why not try it?</p>
<p>There’s a few different versions. 16/8 is popular. That’s where you only eat in the same 8 hour window each day. Say, from 10 AM to 6 PM. That’s sounds helpful, something I would call “time-restricted eating” more than fasting. I can do that unintentionally depending on how my day rolls out. I want to fast though.</p>
<p>There’s “24 hours:. Pretty self-explanatory, where you don’t eat after dinner one day until dinner the next. There’s 5:2 where you eat a small number of calories, 500 or so, two non-consecutive days a week. All fine.</p>
<p>For me though, I’m trying full fasting. That’s no food from when I go to bed on Day 1, until when I get up in the morning on Day 3. A 36 hour fast. Two nights. That will give me the chance to feel hungry and give my digestive system a break. And I’m doing that every six days.</p>
<p>I like the idea of doing it weekly, but doing it the same day, like every Tuesday or every Sunday doesn’t seem sustainable. No Sunday brunch ever? No way. A birthday dinner on Tuesday means a cheat day? Nah. I’d rather be consistent. Every six days means the day of the week changes each time.</p>
<p>I put “FAST” as an all-day event in my Google Calendar, set it to repeat every six days, and follow along. It’s been three weeks so far, and it’s going great.</p>
<p> </p>
<p><a href="http://wingforward.net/fasting" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2493</guid><pubDate>Tue, 14 Aug 2018 16:04:33 +0000</pubDate></item><item><title>Fasting</title><link>https://fmforums.com/blogs/entry/2073-fasting/</link><description><![CDATA[
<p>In the <a href="https://www.mrmoneymustache.com/2012/08/24/fasting-a-fast-way-to-greater-badassity/" rel="external nofollow">blogs</a> and <a href="https://news.ycombinator.com/item?id=11247018" rel="external nofollow">forums</a> I favor, there’s a buzz over the past few years about “intermittent fasting”.  The idea is that not eating all the time is healthy. As far as physical and emotional health benefits, the pop science seems intriguing and it meets my common sense filters, so why not try it?</p>
<p>There’s a few different versions. 16/8 is popular. That’s where you only eat in the same 8 hour window each day. Say, from 10 AM to 6 PM. That’s sounds helpful, something I would call “time-restricted eating” more than fasting. I can do that unintentionally depending on how my day rolls out. I want to fast though.</p>
<p>There’s “24 hours:. Pretty self-explanatory, where you don’t eat after dinner one day until dinner the next. There’s 5:2 where you eat a small number of calories, 500 or so, two non-consecutive days a week. All fine.</p>
<p>For me though, I’m trying full fasting. That’s no food from when I go to bed on Day 1, until when I get up in the morning on Day 3. A 36 hour fast. Two nights. That will give me the chance to feel hungry and give my digestive system a break. And I’m doing that every six days.</p>
<p>I like the idea of doing it weekly, but doing it the same day, like every Tuesday or every Sunday doesn’t seem sustainable. No Sunday brunch ever? No way. A birthday dinner on Tuesday means a cheat day? Nah. I’d rather be consistent. Every six days means the day of the week changes each time.</p>
<p>I put “FAST” as an all-day event in my Google Calendar, set it to repeat every six days, and follow along. It’s been three weeks so far, and it’s going great.</p>
<p> </p>
<br><p><a href="http://wingforward.net/fasting" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2073</guid><pubDate>Tue, 14 Aug 2018 16:04:33 +0000</pubDate></item><item><title>Modified timestamps and importing</title><link>https://fmforums.com/blogs/entry/2494-modified-timestamps-and-importing/</link><description><![CDATA[
<p>At DevCon 2018, Molly Connolly led a session on data cleaning. During that session, there was a question of how to import data without updating the Modification timestamp. The goal is to display when a user last modified a record, not the developer.</p>
<p>Two methods* of doing that were mentioned but there is another, more robust, answer.</p>
<p>It’s simple and flexible: create an additional field that references the Modification Timestamp field and set a variable flag when you don’t want to update it.</p>
<p>Let’s call the default modification timestamp field “ModificationTimestamp”. Then the new timestamp field should be an auto-enter calc with the calculation of:</p>
<p>If ( $autoEnterOff ; Self ; ModificationTimestamp )</p>
<p>Then, at the start of the the Import script, set $autoEnterOff to True.</p>
<p>Some benefits?</p>
<ul>
<li>It’s simple</li>
<li>You never have to modify field definitions after the initial set up</li>
<li>You never have to modify scripts after the initial set up</li>
<li>It’s local to the current session. Other users won’t be affected.</li>
<li>You can use this in other scripts, such as a scheduled server script that performs a nightly update.</li>
<li>You can use a global variables $$autoEnterOff instead or in addition to script variables and perform developer hand-edits.</li>
</ul>
<p>*There were two other options discussed during the session.</p>
<p>One to actually turn off the auto-enter option before the import and then turn it on again afterwards. I would strongly recommend against getting into changing a field definition on a live file. Plus user modifications that happen while you’re importing won’t be logged.</p>
<p>The second way is to change the Import[] options to not use auto-enter options. That can be complicated by wanting some auto-enter options to fire, especially when adding new records (for primary key options).</p>
<p>I can also imagine a more complicated scheme that involves multiple imports, or exporting timestamps and importing, etc. But why bother? The above method is simple with no drawbacks except an additional field.</p>
<p>Additionally, you can display the user account that wasn’t a developer who last modified a field by changing the ModifiedBy field. Uncheck the auto-enter AccountName option and change the field to an auto-enter with a calculation of: If ( $autoEnterOff ; Self ; ModifiedBy ) where ModifiedBy is the default auto-enter “Modification Account Name”.</p>
<p>Sample File<br />
<a href="http://wingforward.net/wp-content/uploads/2018/08/DevAutoEnter.fmp12.zip" rel="external nofollow">DevAutoEnter.fmp12</a></p>
<p><a href="http://wingforward.net/modified-timestamps-and-importing" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2494</guid><pubDate>Sun, 12 Aug 2018 20:27:31 +0000</pubDate></item><item><title>Modified timestamps and importing</title><link>https://fmforums.com/blogs/entry/2072-modified-timestamps-and-importing/</link><description><![CDATA[
<p>At DevCon 2018, Molly Connolly led a session on data cleaning. During that session, there was a question of how to import data without updating the Modification timestamp. The goal is to display when a user last modified a record, not the developer.</p>
<p>Two methods* of doing that were mentioned but there is another, more robust, answer.</p>
<p>It’s simple and flexible: create an additional field that references the Modification Timestamp field and set a variable flag when you don’t want to update it.</p>
<p>Let’s call the default modification timestamp field “ModificationTimestamp”. Then the new timestamp field should be an auto-enter calc with the calculation of:</p>
<p>If ( $autoEnterOff ; Self ; ModificationTimestamp )</p>
<p>Then, at the start of the the Import script, set $autoEnterOff to True.</p>
<p>Some benefits?</p>
<ul>
<li>It’s simple</li>
<li>You never have to modify field definitions after the initial set up</li>
<li>You never have to modify scripts after the initial set up</li>
<li>It’s local to the current session. Other users won’t be affected.</li>
<li>You can use this in other scripts, such as a scheduled server script that performs a nightly update.</li>
<li>You can use a global variables $$autoEnterOff instead or in addition to script variables and perform developer hand-edits.</li>
</ul>
<p>*There were two other options discussed during the session.</p>
<p>One to actually turn off the auto-enter option before the import and then turn it on again afterwards. I would strongly recommend against getting into changing a field definition on a live file. Plus user modifications that happen while you’re importing won’t be logged.</p>
<p>The second way is to change the Import[] options to not use auto-enter options. That can be complicated by wanting some auto-enter options to fire, especially when adding new records (for primary key options).</p>
<p>I can also imagine a more complicated scheme that involves multiple imports, or exporting timestamps and importing, etc. But why bother? The above method is simple with no drawbacks except an additional field.</p>
<p>Additionally, you can display the user account that wasn’t a developer who last modified a field by changing the ModifiedBy field. Uncheck the auto-enter AccountName option and change the field to an auto-enter with a calculation of: If ( $autoEnterOff ; Self ; ModifiedBy ) where ModifiedBy is the default auto-enter “Modification Account Name”.</p>
<p>Sample File<br>
<a href="http://wingforward.net/wp-content/uploads/2018/08/DevAutoEnter.fmp12.zip" rel="external nofollow">DevAutoEnter.fmp12</a></p>
<br><p><a href="http://wingforward.net/modified-timestamps-and-importing" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2072</guid><pubDate>Sun, 12 Aug 2018 20:27:31 +0000</pubDate></item><item><title>7 cool tools for better nerd living</title><link>https://fmforums.com/blogs/entry/2495-7-cool-tools-for-better-nerd-living/</link><description><![CDATA[
<p>If you’re a dev, you are a power user. Below are 7 digital tools that are indispensable, and not necessarily for coding. I don’t know if they share any common characteristics, except that when I don’t have access to them, I grunt in frustration.</p>
<p> </p>
<p><a href="https://chrome.google.com/webstore/detail/nanny-for-google-chrome-t/cljcgchbnolheggdgaeclffeagnnmhno" rel="external nofollow">Nanny</a> / <a href="https://addons.mozilla.org/en-US/firefox/addon/leechblock/" rel="external nofollow">LeechBlock</a> / <a href="http://www.bumblebeesystems.com/wastenotime/" rel="external nofollow">WasteNoTime</a></p>
<p>Distraction is a huge <a href="http://www.npr.org/2017/07/25/539092670/you-2-0-the-value-of-deep-work-in-an-age-of-distraction" rel="external nofollow">productivity killer</a>. For me, it’s the #1 issue in ‘getting things done’. I’m an info junkie and I have low self control. Me, making a living at a computer, is l<a href="http://wingforward.net/wp-content/uploads/2017/08/Screen-Shot-2017-07-31-at-4.31.01-PM.png" rel="external nofollow"></a>ike being a recovering alcoholic and working at a bar. Except I’m not Sam Malone. I’m not even close. Buying a box of cookies and just ‘not eating’ them doesn’t work. What does work is not buying those cookies in the first place. That’s harder to do when working in a cookies factory.</p>
<p>I love to read about a wide range of topics…current events, personal finance, urban planning. So, I’ve got to lock myself away from Facebook, reddit, twitter, washingtonpost.com, wsj, vox, 538, slatestarcodex, Mr Money Mustache, Bogleheads…well, you get the idea.</p>
<p>But having access to those during work hours is majorly counterproductive. The solution? Browser add ons. I use one on each of my three browsers (Chrome, Firefox, Safari).</p>
<p>These little utilities block access to sites of my choosing during certain hours. Very configurable, they lock away the liquor until it’s after hours.</p>
<p> </p>
<p><a href="http://jumpcut.sourceforge.net/" rel="external nofollow">JumpCut</a></p>
<p>JumpCut is handy little utility keeps track of your clipboard history. It ‘buffers’ your clips, keeping a history of up to 99 items that you can access and paste.</p>
<p>Say I want to copy and paste four separate items, pieces of code, from a website to a Data Viewer. By default, that process is: copy, navigate to the Data Viewer, paste, navigate back to the website, repeat 3 more times. With JumpCut, it’s copy, copy, copy, copy, navigate to the Data Viewer, paste, paste, paste, paste. It’s one of those things you *have* to try.</p>
<p>I’ve configured JumpCut so cmd-shift-V brings up the clipboard popover, then arrow keys move through my history. I use this shortcut at least 10 times every hour, every single day.</p>
<p> </p>
<p><a href="http://www.boomeranggmail.com/" rel="external nofollow">Boomerang</a></p>
<p>Boomerang is an app that integrates with Gmail and does two very cool and very different things: schedule emails and bounce emails back.</p>
<p>Scheduling e-mails is great. I use it in two situations.</p>
<p>If I’m emailing at 2 in the morning and I want to reply to client, but I don’t want to look like an workaholic nutjob. I use Boomerang to actually send the e-mail at 7:30am instead, looking like an industrious, early rising professional.</p>
<p>The other situation deals with that feeling when as you hit ‘send’ and you think ‘Oh, crud, that wasn’t right’. Gmail has a great ‘Undo’ feature. Start with that. But the max time is 30 seconds. If I’m sending an email and I’m not sure if my choices around tone or content are the best, but I need to move on, I will schedule to send it in 30 minutes, allowing me to ‘let go’ but leaving open the option of revisiting it if I realize I should have rewritten.</p>
<div style="width:177px;"><p>Your smile when you use boomerang</p></div>
<p>Bouncing e-mails back is super helpful. I’m a fan of Merlin Mann’s <a href="https://www.youtube.com/watch?v=z9UjeTMb3Yk" rel="external nofollow">Inbox Zero</a>. I use my inbox as a To Do list. If it’s in there, I need to deal with it.</p>
<p>*For the record, at the moment my inbox has 12 emails, and I never let it get above 50.</p>
<p>Some tasks, however, need to come back on my to do list. For example, I’ve got to get credentials from a client in order to work on their solution. I’ve emailed them but got an autoresponse that they’re away for 3 days. I don’t want that task sitting on my to do list, because I’m waiting on someone else. So I set the email to “Boomerang” in 4 days. The email will leave my inbox and pop up again in 4 days if I don’t already receive a response from the client. Brilliant!</p>
<p> </p>
<p> </p>
<p> </p>
<p><a href="https://www.monkeybreadsoftware.de/filemaker/index.shtml" rel="external nofollow">MonkeyBread Solutions</a></p>
<p>MBS has produced the Amazonian rainforest of FileMaker plug-ins. With over 4,500 different functions, it’s an entire ecosystem, packed to the brim with medicinal plants. It’s well worth the $149 price. More awesomely, there’s two incredibly useful developer tools built into the free demo version: The ability to search scripts and the ability to search the relationship graph.</p>
<p>Install it, you won’t know how you lived without it.</p>
<p> </p>
<p><a href="https://www.lastpass.com/" rel="external nofollow">LastPass</a> or any password manager</p>
<p>If you’re not using a password manager, you’re being unprofessional. LastPass is the one I use. I haven’t tried KeePass or OnePass or any of the others, I’m sure they’re fine. Pick one and use it. Use a super secure master password (try the <a href="https://xkcd.com/936/" rel="external nofollow">Correct Battery Horse Staple</a> method with some of your own modifications), then let your encrypted password store of choice do the rest. I’ve got about 600 entries in my LastPass account, so “the rest” covers a lot ground. I don’t use the un-encrypted EverNote, no I use LastPass. With it I:</p>
<p>Generate random 16+ character passwords.<br />
Updated all my sites so I’m not using the same P455w0rD on each.<br />
Create random 6 letter pronounceable passwords to use as the answers to security questions.<br />
Store credit card numbers, including the CVV code.<br />
Store configuration details for FM Servers.<br />
Attach a copy of SSL files to my client’s ‘note’.<br />
Store the VIN of my car.<br />
Store the make and model of my lawnmower.</p>
<p> </p>
<p><a href="https://mint.intuit.com/" rel="external nofollow">Mint.com</a></p>
<p>Like most of humanity, financial security is important to me. One of the cornerstones to financial understanding is creating a budget. Whether you think budgets are prescriptive or descriptive, you should see where your money is going. Mint collates all your financial data in one place and allows you to assign income and expenses to categories you define. I have been using Mint since 2007. I check it at least twice a week, sometimes more.</p>
<p> </p>
<p><a href="https://justgetflux.com/" rel="external nofollow">f.lux</a></p>
<p>The human brain is a complex organ. There’s <a href="http://www.pnas.org/content/112/4/1232" rel="external nofollow">growing evidence</a> that using a screen before bed can interfere with sleep, in large part because the screen emits blue light. f.lux adjusts the color temperature of your screen based on the time of day so that at night, your screen shifts red, encouraging better sleep. Now, you shouldn’t be using a screen in bed, but if you’re using it at night, use f.lux.</p>
<p> </p>
<p> </p>
<p>I recommend all of these tools without reservation. Not that they’re perfect by any means, but they are indispensable.</p>
<p><a href="http://wingforward.net/7-cool-tools-for-better-nerd-living" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2495</guid><pubDate>Mon, 31 Jul 2017 22:03:05 +0000</pubDate></item><item><title>7 cool tools for better nerd living</title><link>https://fmforums.com/blogs/entry/1838-7-cool-tools-for-better-nerd-living/</link><description><![CDATA[
<p>If you’re a dev, you are a power user. Below are 7 digital tools that are indispensable, and not necessarily for coding. I don’t know if they share any common characteristics, except that when I don’t have access to them, I grunt in frustration.</p>
<p> </p>
<p><a href="https://chrome.google.com/webstore/detail/nanny-for-google-chrome-t/cljcgchbnolheggdgaeclffeagnnmhno" rel="external nofollow">Nanny</a> / <a href="https://addons.mozilla.org/en-US/firefox/addon/leechblock/" rel="external nofollow">LeechBlock</a> / <a href="http://www.bumblebeesystems.com/wastenotime/" rel="external nofollow">WasteNoTime</a></p>
<p>Distraction is a huge <a href="http://www.npr.org/2017/07/25/539092670/you-2-0-the-value-of-deep-work-in-an-age-of-distraction" rel="external nofollow">productivity killer</a>. For me, it’s the #1 issue in ‘getting things done’. I’m an info junkie and I have low self control. Me, making a living at a computer, is l<a href="http://wingforward.net/wp-content/uploads/2017/08/Screen-Shot-2017-07-31-at-4.31.01-PM.png" rel="external nofollow"><img src="http://wingforward.net/wp-content/uploads/2017/08/Screen-Shot-2017-07-31-at-4.31.01-PM-300x293.png" alt="Screen-Shot-2017-07-31-at-4.31.01-PM-300" width="300" height="293" srcset="http://wingforward.net/wp-content/uploads/2017/08/Screen-Shot-2017-07-31-at-4.31.01-PM-300x293.png 300w, http://wingforward.net/wp-content/uploads/2017/08/Screen-Shot-2017-07-31-at-4.31.01-PM.png 586w" loading="lazy"></a>ike being a recovering alcoholic and working at a bar. Except I’m not Sam Malone. I’m not even close. Buying a box of cookies and just ‘not eating’ them doesn’t work. What does work is not buying those cookies in the first place. That’s harder to do when working in a cookies factory.</p>
<p>I love to read about a wide range of topics…current events, personal finance, urban planning. So, I’ve got to lock myself away from Facebook, reddit, twitter, washingtonpost.com, wsj, vox, 538, slatestarcodex, Mr Money Mustache, Bogleheads…well, you get the idea.</p>
<p>But having access to those during work hours is majorly counterproductive. The solution? Browser add ons. I use one on each of my three browsers (Chrome, Firefox, Safari).</p>
<p>These little utilities block access to sites of my choosing during certain hours. Very configurable, they lock away the liquor until it’s after hours.</p>
<p> </p>
<p><a href="http://jumpcut.sourceforge.net/" rel="external nofollow">JumpCut</a></p>
<p>JumpCut is handy little utility keeps track of your clipboard history. It ‘buffers’ your clips, keeping a history of up to 99 items that you can access and paste.</p>
<p>Say I want to copy and paste four separate items, pieces of code, from a website to a Data Viewer. By default, that process is: copy, navigate to the Data Viewer, paste, navigate back to the website, repeat 3 more times. With JumpCut, it’s copy, copy, copy, copy, navigate to the Data Viewer, paste, paste, paste, paste. It’s one of those things you *have* to try.</p>
<p>I’ve configured JumpCut so cmd-shift-V brings up the clipboard popover, then arrow keys move through my history. I use this shortcut at least 10 times every hour, every single day.</p>
<p> </p>
<p><a href="http://www.boomeranggmail.com/" rel="external nofollow">Boomerang</a></p>
<p>Boomerang is an app that integrates with Gmail and does two very cool and very different things: schedule emails and bounce emails back.</p>
<p>Scheduling e-mails is great. I use it in two situations.</p>
<p>If I’m emailing at 2 in the morning and I want to reply to client, but I don’t want to look like an workaholic nutjob. I use Boomerang to actually send the e-mail at 7:30am instead, looking like an industrious, early rising professional.</p>
<p>The other situation deals with that feeling when as you hit ‘send’ and you think ‘Oh, crud, that wasn’t right’. Gmail has a great ‘Undo’ feature. Start with that. But the max time is 30 seconds. If I’m sending an email and I’m not sure if my choices around tone or content are the best, but I need to move on, I will schedule to send it in 30 minutes, allowing me to ‘let go’ but leaving open the option of revisiting it if I realize I should have rewritten.</p>
<div style="width:177px;">
<img src="http://farm4.staticflickr.com/3021/3022773182_3994b85fca_z.jpg?zz=1" alt="http://farm4.staticflickr.com/3021/3022773182_3994b85fca_z.jpg?zz=1" width="167" height="167" loading="lazy"><p>Your smile when you use boomerang</p>
</div>
<p>Bouncing e-mails back is super helpful. I’m a fan of Merlin Mann’s <a href="https://www.youtube.com/watch?v=z9UjeTMb3Yk" rel="external nofollow">Inbox Zero</a>. I use my inbox as a To Do list. If it’s in there, I need to deal with it.</p>
<p>*For the record, at the moment my inbox has 12 emails, and I never let it get above 50.</p>
<p>Some tasks, however, need to come back on my to do list. For example, I’ve got to get credentials from a client in order to work on their solution. I’ve emailed them but got an autoresponse that they’re away for 3 days. I don’t want that task sitting on my to do list, because I’m waiting on someone else. So I set the email to “Boomerang” in 4 days. The email will leave my inbox and pop up again in 4 days if I don’t already receive a response from the client. Brilliant!</p>
<p> </p>
<p> </p>
<p> </p>
<p><a href="https://www.monkeybreadsoftware.de/filemaker/index.shtml" rel="external nofollow">MonkeyBread Solutions</a></p>
<p>MBS has produced the Amazonian rainforest of FileMaker plug-ins. With over 4,500 different functions, it’s an entire ecosystem, packed to the brim with medicinal plants. It’s well worth the $149 price. More awesomely, there’s two incredibly useful developer tools built into the free demo version: The ability to search scripts and the ability to search the relationship graph.</p>
<p>Install it, you won’t know how you lived without it.</p>
<p> </p>
<p><a href="https://www.lastpass.com/" rel="external nofollow">LastPass</a> or any password manager</p>
<p>If you’re not using a password manager, you’re being unprofessional. LastPass is the one I use. I haven’t tried KeePass or OnePass or any of the others, I’m sure they’re fine. Pick one and use it. Use a super secure master password (try the <a href="https://xkcd.com/936/" rel="external nofollow">Correct Battery Horse Staple</a> method with some of your own modifications), then let your encrypted password store of choice do the rest. I’ve got about 600 entries in my LastPass account, so “the rest” covers a lot ground. I don’t use the un-encrypted EverNote, no I use LastPass. With it I:</p>
<p>Generate random 16+ character passwords.<br>
Updated all my sites so I’m not using the same P455w0rD on each.<br>
Create random 6 letter pronounceable passwords to use as the answers to security questions.<br>
Store credit card numbers, including the CVV code.<br>
Store configuration details for FM Servers.<br>
Attach a copy of SSL files to my client’s ‘note’.<br>
Store the VIN of my car.<br>
Store the make and model of my lawnmower.</p>
<p> </p>
<p><a href="https://mint.intuit.com/" rel="external nofollow">Mint.com</a></p>
<p>Like most of humanity, financial security is important to me. One of the cornerstones to financial understanding is creating a budget. Whether you think budgets are prescriptive or descriptive, you should see where your money is going. Mint collates all your financial data in one place and allows you to assign income and expenses to categories you define. I have been using Mint since 2007. I check it at least twice a week, sometimes more.</p>
<p> </p>
<p><a href="https://justgetflux.com/" rel="external nofollow">f.lux</a></p>
<p>The human brain is a complex organ. There’s <a href="http://www.pnas.org/content/112/4/1232" rel="external nofollow">growing evidence</a> that using a screen before bed can interfere with sleep, in large part because the screen emits blue light. f.lux adjusts the color temperature of your screen based on the time of day so that at night, your screen shifts red, encouraging better sleep. Now, you shouldn’t be using a screen in bed, but if you’re using it at night, use f.lux.</p>
<p> </p>
<p> </p>
<p>I recommend all of these tools without reservation. Not that they’re perfect by any means, but they are indispensable.</p>
<br><p><a href="http://wingforward.net/7-cool-tools-for-better-nerd-living" rel="nofollow external">View the full article</a></p>
]]></description><guid isPermaLink="false">1838</guid><pubDate>Mon, 31 Jul 2017 22:03:05 +0000</pubDate></item><item><title>How to avoid collisions using UUIDs</title><link>https://fmforums.com/blogs/entry/2496-how-to-avoid-collisions-using-uuids/</link><description><![CDATA[
<p>There’s a simple way to avoid collisions when using UUIDs as primary keys: Use UUIDs as primary keys.</p>
<p>No, that’s not a typo. The idea that Get ( UUID ) will create a duplicate ID in a single table, in a single file, or even all tables in all FileMaker files you ever create is, simply, false.</p>
<p>I can hear someone out there (likely <a href="https://community.filemaker.com/message/676802" rel="external nofollow">here</a>) saying: “Whaaat? Just because it’s very unlikely, doesn’t mean it <em>can’t</em> happen”.</p>
<p>And my answer is: “Actually, it <em>does</em> mean that. That’s <em>exactly</em> what it means.” Having a collision of a properly created randomly-generated UUID <em>so</em> unlikely that when we start slicing words like “can’t” or “impossible” to include such an unlikely event we are presenting a false view of the world.</p>
<p>The likelihood of a collision is so absurdly rare, that it is impossible as far as human brains can conceive of it. With the levels of risk we’re talking about, saying, “it is impossible” to have a collision is more accurate than saying “it is possible”. It’s like describing the statement, “The sun will rise tomorrow” as being false, because “it’s possible” an alien civilization has launched a near-lightspeed moon-sized object at Earth that will hit tonight destroying the planet and preventing any more sunrises. After all, it’s <em>possible</em>.</p>
<p>This point is about <em><strong>properly created</strong></em> UUIDs. It is non-trivial to create a unique sequence of numbers and letters. While the process has been standardized, some people don’t follow the standards. <a href="https://community.filemaker.com/ideas/2549#comment-25227" rel="external nofollow">According to David McKee</a>, Senior Software Engineer at FMI, the Get ( UUID ) function uses the operating systems’ native UUID function. On macOS it is CFUUIDCreate() and on Windows UuidCreate(). FM engineers are smartly delegating the UUID creation to Apple and Microsoft.</p>
<p>It seems completely reasonable that FM’s Get ( UUID ) is rock solid.</p>
<p>The UUID RFC standard used by FM is “subtype 4 variant 1” where the UUID is randomly constructed (not based on the time or the computer ID). Pulling from Wikipedia’s <a href="https://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates" rel="external nofollow">page on UUIDs</a>, the UUID t is composed of 32 hexadecimal digits (using the base 16 system of 0 through 9 and the letters A through F). The ID gets formatted by the standard which reduces the complexity by a few bits and, in the end, there are 2^122 bits of information which produces roughly<strong> 5.3 undecillion</strong> possible IDs. “Undecillion” is a cool word, but really, it’s impossible for the human brain can’t grasp the significance of its enormity. If you follow the 2, 3, 4 as billion, trillion, quadrillion, eventually you get to undecillion which starts with the Latin prefix for 1 and for 10 also known as eleven.</p>
<p>That number is can’t be understood because of its immensity. Let’s try to reduce it to human-relatable terms. First, few people are concerned about one particular UUID being duplicated; developers care if <strong>any</strong> duplicate occurs, which is an example of the <a href="https://betterexplained.com/articles/understanding-the-birthday-paradox/" rel="external nofollow">Birthday Paradox</a>. And then I’ll introduce real life variables to get a sense of the number.</p>
<p>Probability, like hugely large numbers, can be hard to wrap our heads around. We can’t just say, “What are the chances there’s a duplicate UUID?” We need to specify the risk we’re looking at. I think a one in a billion chance is a pretty safe risk.</p>
<p>How many UUIDs need to be created for there to be a one in a billion chance of a collision among any of them? The answer: <strong>103 trillion</strong>.</p>
<blockquote>
<p style="padding-left:120px;">Let ( [<br />
//set probability to a billion.<br />
probability = 1000000000 ;</p>
<p style="padding-left:120px;">//these calcs do the prep work<br />
p = 1 / probability ; x = ln ( 1 / ( 1-p ) ) ;<br />
y = 2 * 2^122 * x ;</p>
<p style="padding-left:120px;">//number of UUIDs needed<br />
z = Sqrt ( y ) ;</p>
<p style="padding-left:120px;">//use r.factor to round result to leading 3 digits<br />
r.factor = -1 * Length ( Int ( z ) ) + 3 ;</p>
<p style="padding-left:120px;">result = Round ( z ; r.factor ) ];<br />
result )</p>
</blockquote>
<p><a href="http://wingforward.net/wp-content/uploads/2017/06/dead-elephants-e1498076737554.jpg" rel="external nofollow"></a></p>
<p>There we are. To get a one in a billion chance of a duplicate, we’d have to create 103 trillion UUIDs. 103 trillion. That number is so big, there’s no real way to describe it, except to say it’s impossible.</p>
<p>Some humans, like writers and journalists, try to make Very Large Numbers accessible. “If you stacked 10 trillion dollar bills you’d reach the moon and back.” Which doesn’t actually help; it’s still incomprehensible because who can actually related to moon travel, except for Neil Armstrong and friends? (Side note, Neil Armstrong used to tell bad moon jokes and when no one laughed, he’d mumble, “Guess you had to be there….”).</p>
<p>Imagine there are 100,000 FileMaker developers (we and FMI wishes!). Each developer creates 10 files a year. Each file has 100 tables. Each table 10 million records. Each record uses a UUID.</p>
<p>In 10 years, there’s barely a 1 in a million chance that there will be any duplicate UUIDs among all UUIDs created by all developers in the world. There is drastically less likelihood that such a duplicate would have a real world impact.</p>
<p>The human brain isn’t great at understanding very large numbers <em>or </em>probability, but math doesn’t lie. For any reasonable definition of impossible, UUID collision is impossible.</p>
<p> </p>
<p><a href="http://wingforward.net/how-to-avoid-collisions-using-uuids" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2496</guid><pubDate>Thu, 29 Jun 2017 17:00:06 +0000</pubDate></item><item><title>Protected: How to avoid collisions using UUIDs</title><link>https://fmforums.com/blogs/entry/1778-protected-how-to-avoid-collisions-using-uuids/</link><description><![CDATA[
<p>This content is password protected. To view it please enter your password below:</p>
<p>Password:  </p>
<br><p><a href="http://wingforward.net/how-to-avoid-collisions-using-uuids" rel="nofollow external">View the full article</a></p>
]]></description><guid isPermaLink="false">1778</guid><pubDate>Sat, 24 Jun 2017 15:26:06 +0000</pubDate></item><item><title><![CDATA[Pause on Error Los Gatos: Day & Night]]></title><link>https://fmforums.com/blogs/entry/2497-pause-on-error-los-gatos-day-night/</link><description><![CDATA[
<p>I went to the latest <a href="https://www.pauseonerror.com/" rel="external nofollow">Pause on Error</a> to learn what I don’t know. I walked away still not knowing a whole lot, but being energized to learn.</p>
<p>Held over Memorial Day weekend at “The Presentation Center” (a dry name for a wet place) in Los Gatos, California, this PoE  earned the nickname “FileMaker Summer Camp”. The bucolic location in the Santa Cruz mountains on a site loaded with natural beauty and Catholic iconography, was simply stunning. I saw a deer my first half hour on the property, and another trio a couple hours later. In the morning, clouds blanketed the tops of redwoods. In the afternoon, a free permit got us onto miles of trails in the bordering nature preserve. It may have been too ascetic for those hoping for a traditional tech conference experience. There was no hotel bar. No lazy river. No double beds, television, housekeeping, or even private bathrooms. The first session started at 6:30 in the morning.</p>
<p>Spartan by most standards, it was not everyone’s cup of herbal tea, but it sure was mine. It was pretty much exactly what I needed at this point in my life. Maybe lots of experiences could have been, but this one was.</p>
<p>The organizers, Todd Geist of <a href="https://www.geistinteractive.com/" rel="external">Geist Interactive</a>; John Sindelar, of <a href="http://www.seedcode.com" rel="external nofollow">Seedcode</a>; and Ernest Koe of the <a href="https://proofgroup.com/" rel="external nofollow">Proof Group</a>, intended to push 70+ developers to try something different and they succeeded. Todd’s yin meshed well with John’s yang as both exhorted/encouraged attendees to learn, adapt, and challenge themselves. They led by being vulnerable, creating a space where others could be too. The weekend was the most intimate conference I’ve been to.</p>
<p>Each morning and evening there was a 90 minute meditation led by John Tarrant of the <a href="https://www.pacificzen.org/" rel="external nofollow">Pacific Zen Institute</a> and Todd Geist. Between 15-30 people were seated at each 6:30am session. Generally, conference attendees respected a silent breakfast after the morning meditation. The food was basic buffet and nourishing. Before dinner, <a href="http://www.chiliving.com/learn-it/certified-instructor/134406/" rel="external nofollow">Jonny Lee</a>, a Chi Running instructor, led a attendees in a stretching and running technique.  John Tarrant led the evening meditation with a koan (which I learned is pronounced “ko-ahn”), and interlaced the quiet sitting with a discussion of the experience. One koan, asked by John Tarrant in his resonant voice: “Quickly, without good or evil, what is your original face before your parents were born?”</p>
<p>Between breakfast and the afternoon running session were more standard <a href="https://app.dayback.com/#/shared/1489000062710Z5705843812" rel="external nofollow">conference sessions</a>. The intention of Pause is to be a “participatory” conference where attendees present, however, the sessions, scheduled with two in the morning and two in the afternoon for 2 1/2 days didn’t really pan out that way. The sessions I attended fell into three rough categories…technical, inspirational, and discussion.</p>
<p>I attended</p>
<p>Friday<br />
Jason Young (Seedcode): Technical. Visual apps using &lt;canvas&gt; in a web viewer<br />
Todd Geist (eponymous): Inspirational: Use APIs to access the immensely vast library of the world’s tech<br />
John Sindelar (Seedcode): Inspirational: Embrace the “I don’t know”</p>
<p>Saturday<br />
Vince Mennano (Beezwax): Technical: Data Visualization usingTableau<br />
Rosemary Tietge (FMI): Discussion. Filemaker Community<br />
Todd Geist: Technical. Full stack, node.js</p>
<p>Sunday<br />
John Renfrew: Technical. Data visualization with d3<br />
All: Discussion. Presenter / Spectator general discussion</p>
<p>There were several sessions I missed. Obviously, the few times sessions ran concurrently, I would have missed one. I also skipped a time slot every afternoon for a nap. And an extra afternoon session for a run. Those that I missed were:</p>
<p>Jason Young: hitting the SaleForce API. Matt Navarre: Running FM on AWS. Nancy Botkin &amp; Mark Lemm: JSON. Lui de la Parra: Node and FM. Ernest Koe: Enterprise FM. Jason Young: cURL, card windows.</p>
<p>Of the sessions I saw the discussion and the inspirational sessions resonated like a singing bowl. The technical ones were too technical for me, and there was a significant  overlap between subjects.  Unfortunately, there were simply not enough sessions. I contributed to that by not presenting.</p>
<p>Evenings wound down differently. The first night I was asleep 20 minutes after evening meditation. The second, I had a quiet discussion with a couple great developers afterwards. And the third night, I spent hanging out at ‘Lower Maria’, the cabin where Canadians go to party.</p>
<p>My professional takeaways were more inspirational, around the importance of trying new things and pushing my knowledge into new technical areas. Namely, using API calls to web services to do the grunt work of development; learning javascript; and terminal / command line programming.</p>
<p>My personal benefits were an interest in Zen practice and an deeper appreciation for my fellow FileMaker developers.</p>
<p>I have found the conferences I enjoy the most are the ones in which I return energized. This conference was great in that I am coming home <a href="http://wingforward.net/wp-content/uploads/2017/05/lg_2.jpg" rel="external nofollow"></a>with something that I won’t just use in my professional life, but in my personal one too.</p>
<p>I can’t express my gratitude to the organizers, presenters, and other attendees enough. It was a wonderful experience.</p>
<p>Cheers!</p>
<p>-David Jondreau</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><a href="http://wingforward.net/pause-on-error-los-gatos-day-night" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2497</guid><pubDate>Wed, 31 May 2017 16:35:44 +0000</pubDate></item><item><title><![CDATA[Protected: Pause on Error Los Gatos: Day & Night]]></title><link>https://fmforums.com/blogs/entry/1760-protected-pause-on-error-los-gatos-day-night/</link><description><![CDATA[
<p>This content is password protected. To view it please enter your password below:</p>
<p>Password:  </p>
<br><p><a href="http://wingforward.net/pause-on-error-los-gatos-day-night" rel="nofollow external">View the full article</a></p>
]]></description><guid isPermaLink="false">1760</guid><pubDate>Mon, 29 May 2017 16:35:44 +0000</pubDate></item><item><title>Interesting quirk for unrelated field reference in field definition</title><link>https://fmforums.com/blogs/entry/1444-interesting-quirk-for-unrelated-field-reference-in-field-definition/</link><description><![CDATA[
<p>One <a href="https://fmforums.com/forum/topic/83576-executesql-and-the-separation-model/?p=386917">apparent limitation</a> of using ExSQL() in the separation model is that you can’t use unrelated tables in a field definition. So you’d need to related all your tables to one another.</p>
<p>I just discovered that you can bypass that limitation simply by wrapping your statement in a Let() and declaring a variable that includes wrapping a field in the GetFieldName() function.</p>
<p>So the expression:<br>
Let( field = unrelated::table ; field )<br>
returns an error.</p>
<p>However,<br>
Let( gfn = GetFieldName ( unrelated::table ) ; field = unrelated::table ; field )<br>
does not.</p>
<p>It doesn’t even have to be a field from an unrelated table. Interesting and hopefully helpful.</p>
<br><p><a href="http://wingforward.net/interesting-quirk-for-unrelated-field-reference-in-field-definition">View the full article</a></p>
]]></description><guid isPermaLink="false">1444</guid><pubDate>Wed, 01 May 2013 18:29:54 +0000</pubDate></item><item><title>Interesting quirk for unrelated field reference in field definition</title><link>https://fmforums.com/blogs/entry/613-interesting-quirk-for-unrelated-field-reference-in-field-definition/</link><description><![CDATA[
<p>One <a href="http://fmforums.com/forum/topic/83576-executesql-and-the-separation-model/?p=386917">apparent limitation</a> of using ExSQL() in the separation model is that you can’t use unrelated tables in a field definition. So you’d need to related all your tables to one another.</p>
<p>I just discovered that you can bypass that limitation simply by wrapping your statement in a Let() and declaring a variable that includes wrapping a field in the GetFieldName() function.</p>
<p>So the expression:<br>Let( field = unrelated::table ; field )<br>returns an error.</p>
<p>However,<br>Let( gfn = GetFieldName ( unrelated::table ) ; field = unrelated::table ; field )<br>does not.</p>
<p>It doesn’t even have to be a field from an unrelated table. Interesting and hopefully helpful.</p>
<br><br>&lt;a href="<a href="http://wingforward.net/interesting-quirk-for-unrelated-field-reference-in-field-definition" rel="external nofollow">http://wingforward.net/interesting-quirk-for-unrelated-field-reference-in-field-definition</a>"  rel='nofollow external'&gt;Source&lt;/a&gt;
]]></description><guid isPermaLink="false">613</guid><pubDate>Wed, 01 May 2013 18:29:54 +0000</pubDate></item><item><title>Triggering a server-side script Part II</title><link>https://fmforums.com/blogs/entry/1445-triggering-a-server-side-script-part-ii/</link><description><![CDATA[
<p>Part II will include a custom function to create your URL, an example of a feeder script to manage the process, and an explanation of why the Guest account is necessary.</p>
<p>In<a href="http://wingforward.net/triggering-a-server-side-script-1" rel="external nofollow"> Part I</a> of this series, I explained how to trigger a server-side script using XML. In this part, I’m going to give you a custom function to aid this process and explain why you need to enable the Guest account.</p>
<p>First, the Guest account. To access the XML engine on the FileMaker Server by a browser, a user will always be taken to a login page, with one exception. That exception is if the Guest[] account is turned on. Since there’s no browser involved in the Insert from URL[] script step, and not way to auto-login, there’s no way to access the Server with anything but Guest[].</p>
<p>If you don’t have a need for Guest[] for anything but this, it opens a little security hole, but that can be mitigated. There’s several ways to do this, but I’ll only give one method.  First, turn off all Extended Privileges except Access via XML Web Publishing (fmxml). Then give all “No Access” to everything except the scripts you’re going to call by XML and the opening script and closing scripts. All those scripts and their called sub scripts should be run with “Full Access” checked. That way you’re letting the scripts manage their permissions. Again, there are other ways of accomplishing this that may be more secure, depending on your solution’s needs.</p>
<p>I love custom functions. They make life so much easier. You don’t need a custom function to call a script via XML, but it ensures you’re syntax is correct and reduces development time.</p>
<p>Here’s the one I created for this:</p>
<p>##########</p>
<p>/*XML.script.call ( script )<br>
Calls the script specified in the parameter in the current database. This function should be placed in an Insert From URL[] script step. [Guest] account needs to be active and have permission to run the script specified, all other access should be limited. The script should run with Full Access privileges.<br>
David Jondreau<br>
Wing Forward Solutions, LLC<br>
www.wingforward.net<br>
*/<br>
Let([<br>
http = "http://" ;<br>
xml =  "/fmi/xml/fmresultset.xml?-db=" ;<br>
host.ip = Get ( HostIPAddress ) ;<br>
file = Get( FileName ) ;<br>
layout = Get ( LayoutName ) ;<br>
layout = "&amp;-lay=" &amp; layout  ;<br>
view = "&amp;-view" ;<br>
script = "&amp;-script=" &amp; script ;<br>
result = http &amp; host.ip &amp; xml &amp; file &amp; layout &amp; view &amp; script<br>
];<br>
result<br>
)</p>
<p>############</p>
<p> </p>
<br><p><a href="http://wingforward.net/triggering-a-server-side-script-part-ii">View the full article</a></p>
]]></description><guid isPermaLink="false">1445</guid><pubDate>Tue, 04 Dec 2012 20:18:40 +0000</pubDate></item><item><title>Triggering a server-side script Part II</title><link>https://fmforums.com/blogs/entry/612-triggering-a-server-side-script-part-ii/</link><description><![CDATA[
<p>Part II will include a custom function to create your URL, an example of a feeder script to manage the process, and an explanation of why the Guest account is necessary.</p>
<p>In<a href="http://wingforward.net/triggering-a-server-side-script-1" rel="external nofollow"> Part I</a> of this series, I explained how to trigger a server-side script using XML. In this part, I’m going to give you a custom function to aid this process and explain why you need to enable the Guest account.</p>
<p>First, the Guest account. To access the XML engine on the FileMaker Server by a browser, a user will always be taken to a login page, with one exception. That exception is if the Guest[] account is turned on. Since there’s no browser involved in the Insert from URL[] script step, and not way to auto-login, there’s no way to access the Server with anything but Guest[].</p>
<p>If you don’t have a need for Guest[] for anything but this, it opens a little security hole, but that can be mitigated. There’s several ways to do this, but I’ll only give one method.  First, turn off all Extended Privileges except Access via XML Web Publishing (fmxml). Then give all “No Access” to everything except the scripts you’re going to call by XML and the opening script and closing scripts. All those scripts and their called sub scripts should be run with “Full Access” checked. That way you’re letting the scripts manage their permissions. Again, there are other ways of accomplishing this that may be more secure, depending on your solution’s needs.</p>
<p>I love custom functions. They make life so much easier. You don’t need a custom function to call a script via XML, but it ensures you’re syntax is correct and reduces development time.</p>
<p>Here’s the one I created for this:</p>
<p>##########</p>
<p>/*XML.script.call ( script )<br>Calls the script specified in the parameter in the current database. This function should be placed in an Insert From URL[] script step. [Guest] account needs to be active and have permission to run the script specified, all other access should be limited. The script should run with Full Access privileges.<br>David Jondreau<br>Wing Forward Solutions, LLC<br>www.wingforward.net<br>*/<br>Let([<br>http = "http://" ;<br>xml =  "/fmi/xml/fmresultset.xml?-db=" ;<br>host.ip = Get ( HostIPAddress ) ;<br>file = Get( FileName ) ;<br>layout = Get ( LayoutName ) ;<br>layout = "&amp;-lay=" &amp; layout  ;<br>view = "&amp;-view" ;<br>script = "&amp;-script=" &amp; script ;<br>result = http &amp; host.ip &amp; xml &amp; file &amp; layout &amp; view &amp; script<br>];<br>result<br>)</p>
<p>############</p>
<p> </p>
<br><br>&lt;a href="<a href="http://wingforward.net/triggering-a-server-side-script-part-ii" rel="external nofollow">http://wingforward.net/triggering-a-server-side-script-part-ii</a>"  rel='nofollow external'&gt;Source&lt;/a&gt;
]]></description><guid isPermaLink="false">612</guid><pubDate>Tue, 04 Dec 2012 20:18:40 +0000</pubDate></item><item><title>Triggering a server-side script Part I</title><link>https://fmforums.com/blogs/entry/467-triggering-a-server-side-script-part-i/</link><description><![CDATA[
<p>FileMaker does most of its processing client side. That means when a client wants to do a find, or show the result of a calculation, the data necessary to do the action is transferred from the server to the client and the client calculates the result. This is handy because you don’t need super powerful [...]</p>
<p></p>
<p><a href="http://wingforward.net/triggering-a-server-side-script-1" rel="external nofollow">Source</a></p>
]]></description><guid isPermaLink="false">467</guid><pubDate>Thu, 18 Oct 2012 19:18:11 +0000</pubDate></item><item><title>Triggering a server-side script Part I</title><link>https://fmforums.com/blogs/entry/1446-triggering-a-server-side-script-part-i/</link><description><![CDATA[
<p style="text-align:left;">FileMaker does most of its processing client side. That means when a client wants to do a find, or show the result of a calculation, the data necessary to do the action is transferred from the server to the client and the client calculates the result. This is handy because you don’t need super powerful servers and the amount of load put on the server itself is reduced. But there’s a tradeoff, in some circumstances, it can also be extraordinarily painful. If a lot of data needs to be moved, the transfer becomes a huge bottleneck.</p>
<p style="text-align:left;">There is a solution to this. A FileMaker Pro ( or Go ) client can trigger a server-side script using a call to the web publishing engine. This is real handy if you want have a task that touches a lot of records or is otherwise data intensive. A script that would take minutes locally, takes seconds on the server.</p>
<p style="text-align:left;">The solution is to use the FileMaker 12 script step, Insert From URL[], to place an XML call to the Custom Web Publishing Engine. That XML call specifies the script to be run by the server. Pre-12, I believe you can use Set Web Viewer[] for similar results.</p>
<p style="text-align:left;">To implement this:</p>
<p style="text-align:left;">1) Enable Custom Web Publishing with XML on the server.<br>
2) Write the script you want to run on the server. It can only use Custom Web Publishing compatible script steps. Check “Run script with full access privileges”.<br>
3) Enable the [Guest] account in Manage Security. Allow only the XML Extended Privilege. Give access to no records, no value lists, and all layouts. You should choose to allow access to only the specific server side scripts you want to call.<br>
4) Write your calling script. The calling script is what will run on your client. The core script step is Insert From URL[]. That should take a URL of the format http://HOST.IP.ADDRESS/fmi/xml/fmresultset.xml?-db=FILE.NAME&amp;-lay=LAYOUT.NAME&amp;-view&amp;-script=SERVER.SCRIPT<br>
5) Run your calling script from the client!</p>
<p style="text-align:left;">Part II will include a custom function to create your URL, an example of a feeder script to manage the process, and an explanation of why the Guest account is necessary.</p>
<p style="text-align:left;">Part III will be an exploration of how this process can be used to create FM Go “updateable apps”.</p>
<br><p><a href="http://wingforward.net/triggering-a-server-side-script-1">View the full article</a></p>
]]></description><guid isPermaLink="false">1446</guid><pubDate>Thu, 18 Oct 2012 18:54:35 +0000</pubDate></item><item><title>Triggering a server-side script Part I</title><link>https://fmforums.com/blogs/entry/611-triggering-a-server-side-script-part-i/</link><description><![CDATA[
<p></p>
<p style="text-align:left;">FileMaker does most of its processing client side. That means when a client wants to do a find, or show the result of a calculation, the data necessary to do the action is transferred from the server to the client and the client calculates the result. This is handy because you don’t need super powerful servers and the amount of load put on the server itself is reduced. But there’s a tradeoff, in some circumstances, it can also be extraordinarily painful. If a lot of data needs to be moved, the transfer becomes a huge bottleneck.</p>
<p style="text-align:left;">There is a solution to this. A FileMaker Pro ( or Go ) client can trigger a server-side script using a call to the web publishing engine. This is real handy if you want have a task that touches a lot of records or is otherwise data intensive. A script that would take minutes locally, takes seconds on the server.</p>
<p style="text-align:left;">The solution is to use the FileMaker 12 script step, Insert From URL[], to place an XML call to the Custom Web Publishing Engine. That XML call specifies the script to be run by the server. Pre-12, I believe you can use Set Web Viewer[] for similar results.</p>
<p style="text-align:left;">To implement this:</p>
<p style="text-align:left;">1) Enable Custom Web Publishing with XML on the server.</p>
<p>2) Write the script you want to run on the server. It can only use Custom Web Publishing compatible script steps. Check “Run script with full access privileges”.</p>
<p>3) Enable the [Guest] account in Manage Security. Allow only the XML Extended Privilege. Give access to no records, no value lists, and all layouts. You should choose to allow access to only the specific server side scripts you want to call.</p>
<p>4) Write your calling script. The calling script is what will run on your client. The core script step is Insert From URL[]. That should take a URL of the format http://HOST.IP.ADDRESS/fmi/xml/fmresultset.xml?-db=FILE.NAME&amp;-lay=LAYOUT.NAME&amp;-view&amp;-script=SERVER.SCRIPT</p>
<p>5) Run your calling script from the client!</p>
<p style="text-align:left;">Part II will include a custom function to create your URL, an example of a feeder script to manage the process, and an explanation of why the Guest account is necessary.</p>
<p style="text-align:left;">Part III will be an exploration of how this process can be used to create FM Go “updateable apps”.</p>
<p></p>
<p>&lt;a href="<a href="http://wingforward.net/triggering-a-server-side-script-1" rel="external nofollow">http://wingforward.net/triggering-a-server-side-script-1</a>"  rel='nofollow external'&gt;Source&lt;/a&gt;</p>
]]></description><guid isPermaLink="false">611</guid><pubDate>Thu, 18 Oct 2012 18:54:35 +0000</pubDate></item><item><title>Running an iPad database as a Kiosk</title><link>https://fmforums.com/blogs/entry/450-running-an-ipad-database-as-a-kiosk/</link><description><![CDATA[
<p>Doug Alder of HomeBase Software out of Vancouver, BC posted an excellent explanation of locking down an iOS device to use an FM Go database in “Kiosk” mode, using the Accessibility options. While you’re there, check out his FileMaker Timeline (which isn’t working in Chrome for me, but in Firefox it looks great).</p>
<p></p>
<p><a href="http://wingforward.net/running-an-ipad-database-as-a-kiosk" rel="external nofollow">Source</a></p>
]]></description><guid isPermaLink="false">450</guid><pubDate>Fri, 28 Sep 2012 14:20:11 +0000</pubDate></item><item><title>Running an iPad database as a Kiosk</title><link>https://fmforums.com/blogs/entry/2498-running-an-ipad-database-as-a-kiosk/</link><description><![CDATA[
<p><a href="http://homebasesoftware.files.wordpress.com/2010/06/doug.png" rel="external nofollow">Doug Alder</a> of HomeBase Software out of Vancouver, BC posted an <a href="http://hbase.net/2012/09/24/guided-access-kiosk-mode-for-filemaker-go-on-the-iphone-or-ipad/" rel="external nofollow">excellent explanation</a> of locking down an iOS device to use an FM Go database in “Kiosk” mode, using the Accessibility options. While you’re there, check out his <a href="https://s3.amazonaws.com/hbase-timelines/FileMaker-Pro-Timeline.html" rel="external nofollow">FileMaker Timeline</a> (which isn’t working in Chrome for me, but in Firefox it looks great).</p>
<p><a href="http://wingforward.net/running-an-ipad-database-as-a-kiosk" rel="external nofollow">View the full article</a></p>
]]></description><guid isPermaLink="false">2498</guid><pubDate>Fri, 28 Sep 2012 13:46:16 +0000</pubDate></item><item><title>Running an iPad database as a Kiosk</title><link>https://fmforums.com/blogs/entry/1447-running-an-ipad-database-as-a-kiosk/</link><description><![CDATA[
<p><a href="http://homebasesoftware.files.wordpress.com/2010/06/doug.png" rel="external nofollow">Doug Alder</a> of HomeBase Software out of Vancouver, BC posted an <a href="http://hbase.net/2012/09/24/guided-access-kiosk-mode-for-filemaker-go-on-the-iphone-or-ipad/" rel="external nofollow">excellent explanation</a> of locking down an iOS device to use an FM Go database in “Kiosk” mode, using the Accessibility options. While you’re there, check out his <a href="https://s3.amazonaws.com/hbase-timelines/FileMaker-Pro-Timeline.html" rel="external nofollow">FileMaker Timeline</a> (which isn’t working in Chrome for me, but in Firefox it looks great).</p>
<br><p><a href="http://wingforward.net/running-an-ipad-database-as-a-kiosk">View the full article</a></p>
]]></description><guid isPermaLink="false">1447</guid><pubDate>Fri, 28 Sep 2012 13:46:16 +0000</pubDate></item><item><title>Running an iPad database as a Kiosk</title><link>https://fmforums.com/blogs/entry/610-running-an-ipad-database-as-a-kiosk/</link><description><![CDATA[
<p><a href="http://homebasesoftware.files.wordpress.com/2010/06/doug.png" rel="external nofollow">Doug Alder</a> of HomeBase Software out of Vancouver, BC posted an <a href="http://hbase.net/2012/09/24/guided-access-kiosk-mode-for-filemaker-go-on-the-iphone-or-ipad/" rel="external nofollow">excellent explanation</a> of locking down an iOS device to use an FM Go database in “Kiosk” mode, using the Accessibility options. While you’re there, check out his <a href="https://s3.amazonaws.com/hbase-timelines/FileMaker-Pro-Timeline.html" rel="external nofollow">FileMaker Timeline</a> (which isn’t working in Chrome for me, but in Firefox it looks great).</p>
<br><br>&lt;a href="<a href="http://wingforward.net/running-an-ipad-database-as-a-kiosk" rel="external nofollow">http://wingforward.net/running-an-ipad-database-as-a-kiosk</a>"  rel='nofollow external'&gt;Source&lt;/a&gt;
]]></description><guid isPermaLink="false">610</guid><pubDate>Fri, 28 Sep 2012 13:46:16 +0000</pubDate></item></channel></rss>
