How to Make a PDF Fill-in Form Saveable

These notes apply to Acrobat X Pro. I don’t know about other versions or how to do this with free software. Adobe software is out of my price range too. I used my employer’s copy.

Good instructions for creating the fill-in are here.

Adobe provides instructions for making the fill-in saveable here, but it’s not clear the in their step 3 you want to pick File->Save As->Reader Extended PDF->Enable Additional Features…, not Enable Adding Text In Documents. That’s all it takes.

Sample saveable fill-in form.

Samsung Galaxy Player 4.2

Player 4.2 - what's in the boxMy mp3 player was slowly dying, the click wheel only worked sometimes and I was looking to replace it with another non-Apple product. August, 2012 PC World carried a review of the Samsung Galaxy Players, 3.6 and 4.2. An Android based mp3 player sounded like a good idea to me, so I bought a 4.2. The 4.2 is by far the best in terms of convenience and ease of use of the three mp3 players I have owned, but there are pluses and minuses. I paid more than twice what I paid for the better of my previous players for the 4.2.

What’s good about it?

  • Works with Linux and syncs with Rhythmbox. The 4.2 looks like a drive to my laptop.
  • I like to listen to music by album and the songs play in album order flawlessly.
  • The sound is good.
  • Connects to my Jambox over Bluetooth.
  • The Player is an Android phone without the cellular radio. Features include WiFi, Bluetooth and GPS radios. Anywhere that you can get WiFi you can surf the web, install any Android app you want to, etc..
  • The charger is a two part charger. One part is a small wall wart with a USB socket and the other part is a standard USB to micro USB cable. You get both the sync cable and the charger in a very lightweight item.

What’s bad about it?

  • You don’t get anything like the advertised 8GB of space. Only 5.0 GB was available. I had to buy a micro SD card to hold all the music my former 8G player held.
  • trs and trrs plugsThe headphone jack. I use my player most often plugged into some kind of speaker, not with headphones. The jack on the 4.2 is a TRRS style like phones have, not a TRS style like my other players had. I had to buy a $10 adapter. Griffin 10034 and Gigaware (Radioshack) 12-635 both work.
  • The 4.2 is really really a phone without the cellular radio. When you first turn it on, the screen says something like: Just a few moments while we set up your phone. If you don’t want most of a phone, you won’t be happy. I imagine you can talk on it with WiFi and Google Talk. I haven’t tried.
  • Insomnia. Like a phone, the 4.2 never sleeps. There seem to be three modes, on, on with the screen off and shutdown. The battery lasts only two or three days with no use unless you shut it down cold. I haven’t looked deeply into this, I just make sure to charge the phone player when I think I’ll need it. Update: if the WiFi and GPS radios are shut off when not in use, the battery life is really reasonable, a week or more.
  • Another not so nice power management issue is that to get those Google goodies, you have to link the device to a Google account. Then you’ll want to password the device. You get an I am sure familiar to Android phone users choice of pattern, PIN or password. Once you have set one of these, every time an adjustment needs to be made to the player other than volume, after the screen goes dark, default one minute, you have to enter the pattern, PIN or password. The temptation is to turn the password off.

mindbody api

Some notes for getting started with the MindBody API.

Read this:

http://support.mindbodyonline.com/entries/21301433-how-to-issue-api-credentials

Follow the partner program link on that page and sign up. These pages are often down; it’s not you.

Their docs:

http://api.mindbodyonline.com/Doc

Download the MBO’s API expamples.

https://github.com/mindbody/API-Examples

These examples have some errors. Some includes reference files with the names in the wrong case – they must be working on Windows. Calls to php time functions now require a timezone.

There is no example of using the SiteService or GetActivationCode request that you need to start with the API.

Here is my getActivationCode.php

<?php
require_once("../includes/siteService.php");

if (!isset($_POST['submit'])) {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
        <head>
                <title>Get Activation Code Demo</title>
                <link rel="stylesheet" type="text/css" href="../styles/site.css" />
        </head>

        <body>
        <form method="post" action="getActivationCode.php">
                Source Name:
                <input type="text" size="25" name="sName"/><br/>
                Password:
                <input type="password" size="25" name="password"/><br/>
                SiteID:
                <input type="text" size="5" name="siteID" value="-99"/><br/>
                <input type="submit" value="submit" name="submit"/>
        </form>
<?php
} else {
$sourcename = $_POST["sName"];
$password = $_POST["password"];
$siteID = $_POST["siteID"];

// initialize default credentials
$creds = new SourceCredentials($sourcename, $password, array($siteID));

$siteService = new MBSiteService(true); //false for no debug!
$siteService->SetDefaultCredentials($creds);

$result = $siteService->GetActivationCode();

/* $cdsHtml = '<table><tr><td>ID</td><td>Name</td></tr>';
$cds = toArray($result->GetClassDescriptionsResult->ClassDescriptions->ClassDescription);
foreach ($cds as $cd) {
        $cdsHtml .= sprintf('<tr><td>%d</td><td>%s</td></tr>', $cd->ID, $cd->Name);
}
$cdsHtml .= '</table>';

echo($cdsHtml);  */
}

Here is ../includes/siteService.php mbApi.php is provided in the mindbody sample code.

<?php
require_once("mbApi.php");
        
class MBSiteService extends MBAPIService
{               
        function __construct($debug = false)
        {       
                $serviceUrl = "http://" . GetApiHostname() . "/0_5/SiteService.asmx?wsdl";

                $this->debug = $debug;
                $option = array();
                if ($debug)
                {
                        $option = array('trace'=>1);
                }
                $this->client = new soapclient($serviceUrl, $option);
        }
        
        /**
         * Returns the raw result of the MINDBODY SOAP call.
         * @param int $PageSize
         * @param int $CurrentPage
         * @param string $XMLDetail
         * @param string $Fields
         * @param SourceCredentials $credentials A source credentials object to use with this call
         * @return object The raw result of the SOAP call
         */     
        public function GetActivationCode(SourceCredentials $credentials = null)
        {               
                
                $params = $this->GetMindbodyParams($additions=array(), $this->GetCredentials($credentials), $XMLDetaili=null, $PageSize=null, $CurrentPage=null, $Fields=null, $UserCredentials = null);

                $result = $this->client->GetActivationCode($params);

                if ($this->debug)
                {
                        DebugRequest($this->client);
                        DebugResponse($this->client, $result);
                }

                return $result;
        }

}