Add Contact to Maximizer Address Book with PHP

Add Contact to Maximizer Address Book with PHP

By on March 19, 2019

The class below is an example how to post data from a web form to the address book in Maximizer. The first thing you need to do is create a Web Form in Maximizer (Administration -> Web Forms). The PHP class below uses the fields that were created for the form (your form will have different fields). The class uses the “name” from <input> in the Maximizer Web Form for the PHP SaveToAddressBook() method. You also need to pass the “action” string from the <form> to the method. When the method is called, it won’t be displayed on the web page since its hidden by CSS, and its submitted automatically by a JavaScript button press.

The Maximizer generated Web Form isn’t complicated. If you remove all of the styling and validation code, you can easily use the <input> fields in any web application. The class below only has the essential code for posting the form.

—[ code ]———————————–


class MaxLibrary
// This is the “action” string in the <form> declaration.
private $_action;

// These are for the <input> fields in the form.
private $_first_name;
private $_last_name;
private $_company;
private $_phone;
private $_email;

public function __construct ($action, $first_name, $last_name, $company, $phone, $email)
$this->_action = $action;

$this->_first_name = $first_name;
$this->_last_name = $last_name;
$this->_company = $company;
$this->_phone = $phone;
$this->_email = $email;

// Load form with data and automatically press submit button to send data to Maximizer.
// The “name” in the <input> statements in this function must match the name in Maximizer
// generated form.

public function SaveToAddressBook ()
<div style=’display: none;’>
<form name=’form_maximizer’ method=’post’ action='<?php echo $this->_action; ?>’>
<input name=’C0IFirstName’ type=’text’ value='<?php echo $this->_first_name; ?>’><br>
<input name=’C1ILastName’ type=’text’ value='<?php echo $this->_last_name; ?>’><br>
<input name=’C2ICompanyName’ type=’text’ value='<?php echo $this->_company; ?>’><br>
<input name=’C3IPhone1′ type=’text’ value='<?php echo $this->_phone; ?>’><br>
<input name=’U4I58850′ type=’text’ value='<?php echo $this->_email; ?>’><br>

<script type=”text/javascript”>
window.onload=function ()

Primal Goulash

By on February 17, 2019

Eat goulash like your paleo ancestors did! This is a favourite comfort food from my Slovak childhood with a few modifications to make it paleo friendly.

Recipe Times

Prep Time: 30 min
Cook Time: 2 hrs
Total Time: 2.5 hrs


Beef Broth

  • 0.5 kg Beef Cubes
  • 12 cups Water

The Soup

  • 1 tbsp Caraway Seeds (grounded)
  • 3 Green Onions
  • 1 tbps Marjoram
  • 1/2 tsp Pepper (grounded)
  • 5 Potatoes (large)
  • 1 tbsp Sea Salt (or Himalayan Rock Salt)
  • 1 tbsp Tomato Paste

Caramelized Onions

  • 2 tbsp Coconut Oil (or lard)
  • 1/2 Garlic (whole)
  • 1 Onion (large)
  • 1 tbsp Paprika Powder


Beef Broth

  • Bring beef cubes in water to boil.
  • After boil, lower heat to simmer and cook for 2 hours to make make beef tender. Cook for for less time (i.e. 30 min) if your in a hurry.
  • Add caraway seeds, paprika, marjoram, salt, pepper, and tomato paste to soup.
  • Cut green onions to small strips and add to soup.
  • Cut potatoes to cubes and add to soup.
  • Increase temperature to medium and cook for 30 minutes.

The Soup

  • Add caraway seeds, paprika, marjoram, salt, pepper, and tomato paste to soup.
  • Cut green onions to small strips and add to soup.
  • Cut potatoes to cubes and add to soup.
  • Increase temperature to medium and cook for 30 minutes.

Caramelized Onions

  • Crush or finely dice garlic cloves.
  • In a frying pan, fry garlic in oil for 1 minute.
  • Add diced large onions with paprika and fry until caramelized for about 3 minutes.
  • Add contents to soup, and its ready to serve.

How To Fix An Endless Adobe Validating Software License Screen

By on September 13, 2017

I really enjoy errors in software that occur randomly for no reason. 🙂 One that recently occurred was an installed Adobe application (InDesign) that suddenly failed to start. Reinstalling the software didn’t help. Starting the application would run Adobe Creative Cloud instead where it tried to endlessly validate a software license.

This was fixed by deleting 4 folders:

  • C:\ProgramData\Adobe\SLstore
  • C:\Program Files (x86)\Common Files\Adobe\Adobe PCD
  • C:\Program Files (x86)\Common Files\Adobe\caps
  • C:\Users\[User Name]\AppData\Local\Adobe\OOBE

Once deleted, InDesign was able to run again after I logged into Adobe with my credentials.

Real Time Code Compiler from Skype

By on September 1, 2017

Screen sharing apps are commonly used in business meetings where people aren’t sitting next to each other in a boardroom. Another use I have for them is in technical support for software where your client shows you on their computer what bug they discovered in your software.

Skype created an interesting way to do screen sharing. They created a real time code compiler where you can edit and compile code in C, C++, C#, Java, JavaScript, Python, or Ruby. This can be used for showing your programming skills during a job interview without being there in person. The site also shows a video of the people in the session so you can see the shocked look of the interviewer when they see brilliant code like my swap function (see below).

Screenshot 2017-09-01 21.22.53

The screen sharing compiler can be found at I’m guessing by the name its meant for job interviews Smile but there are other uses as well, such as students helping each other code.

This is a very useful site and it will probably wind up in the Skype application itself. It will run much better as an app than a web site when it comes to streaming audio and video.

Gigabytes of Free Books from Microsoft!!!

By on July 17, 2017

Once again, Microsoft is giving away gigabytes of free books. Eric Ligman (Microsoft Director of Sales Excellence Blog) announced on July 11 that even more books than last year are freely available. If Microsoft is trying to gain loyalty by giving away free stuff, its working. 🙂

You have the option of downloading individual books or all of them in one shot with a PowerShell script. I recommend running this in Visual Studio Code with the Code Runner plugin. If you only cut and paste the code in VS Code and not save it, you’ll have to use the Select Language Mode (lower right corner) to choose PowerShell before you can run it. I downloaded books selectively and it resulted in 3.88 GB of files.

Anyways, I want to thank Microsoft for supporting developers and the IT community with the resources to do our jobs well.

How to Fix Multiline TextBox Word Wrap in Edge / IE 11

By on May 25, 2017

Internet Explorer 11 and Edge work in a different way with fixed width text boxes (see examples below) than previous versions earlier than 11. IE 11 and Edge inherits the white-space property from its parent. So, if text overflows in these browsers, it won’t wrap in the box.


     <textarea rows="4" cols="50">Lots of text ...</textarea>


     <asp:TextBox ID="TextBox_Address" runat="server" Rows="5" TextMode="MultiLine"></asp:TextBox>

This can be fixed by applying the following CSS to the text box:

     white-space: pre-wrap

Now overflowing text will wrap in the box in all IE and Edge versions.

C#: Hello World!

By on May 16, 2017

This is the “Hello World! program that every programmer learns in their first 5 minutes of their schooling. Compile this as a console project to test if your compiler is working.

   class Program
      static void Main (string [] args)
         Console.WriteLine ("Hello World!");
         Console.ReadKey ();

How to Copy Contents of HTML Textbox to Another

By on April 5, 2017

I recently made changes to a web form that populated a PDF through an XFDF file. In the new code, instead of outputting to an XFDF, the page outputs to an HTML file. Everything worked great, except the HTML page lacked one feature the PDF did. If you have 2 fields with the same name on a PDF, when you update one field, the other field automatically gets the same content. This naming trick won’t work in HTML.

The sample code below will copy the contents of a textbox to another textbox without using JavaScript. The updates occur during each key press. I’ve include examples in standard HTML and ASP.NET. The red text is the code you use to copy one textbox to another.


<form name="aForm" action="" method="" />
  <input type="text" name="TextBox1" onkeyup="document.aForm.TextBox2.value = this.value" />
  <input type="text" name="TextBox2" />


<asp:TextBox ID="TextBox1" runat="server" onkeyup="document.aForm.TextBox2.value = this.value"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

How to Replace QLingo with JavaScript in a uStore Dynamic Document

By on April 5, 2017

Programmed elements in a dynamic document for XMPie uStore can be built using JavaScript instead of QLingo. Follow the steps below:

  1. Don’t use JavaScript in InDesign with the ADOR objects. All of the programming will take place in uPlan.

  2. In uPlan, create the variables and campaign dials for the ADOR objects that will be used as variables in functions.

  3. Create the function in JavaScript.

    function ShowPersonalCorporation (star1, star2, star3)
     if (star1 || star2 || star3)
       return "*Personal Real Estate Corporation";

  4. Call the function in the ADOR object.

    ShowPersonalCorporation (@{_Star1}, @{_Star2}, @{_Star3})

Testing for Null Values

In QLingo, you would test for a null value by using the IsNullOrEmpty function, which would return a value based on its result (true: display real estate info; false: display nothing):

if (!IsNullOrEmpty (@{_Star1}))


 “*Personal Real Estate Corporation”






The JavaScript equivalent is:

function ShowPersonalCorporation (star)


 if (star)

   return “*Personal Real Estate Corporation”;


A Quick (Not Approved by Xerox) Way To Setup SSL On All uStores

By on March 31, 2017

When you have hundreds of stores in uStore, making updates on all of them takes a very long time. This doesn’t matter if your paid by the hour, but if your in a hurry and need everything updated quickly, the manual method is not the best solution. For your information, this method is described below. The procedure can take a few minutes to complete. Multiply that by hundreds of stores and you’ll see the problem.

Manual Method

In the uStore admin site,

  1. Take store offline.
  2. Open Store Setting -> Set Up Store
  3. In the Advanced tab, select the Security Option
  4. Press Save & Place Online

The change can easily be made by modifying a table in the uStore database. This method isn’t recommended by Xerox and I wouldn’t recommend it either to novice database administrators. For experienced users, make a backup of the database before you make any changes. MSSQL doesn’t ask “Are you sure you want to make this change?” when you run SQL queries.

SQL Method

In the uStore database, you will need to modify the Store table. Each store here has an SslOption field which defaults to 0 value (see table below):

SslOption Field
0 Not Secured
1 Secure All
2 Secure Critical Points

Select which SSL option that you want and run the following SQL command:

     UPDATE Store SET SslOption=@SslOption WHERE StatusID=1

     UPDATE Store SET SslOption=2 WHERE StatusID=1

This updates all active stores to SSL option: Secure Critical Points

After the SQL query is run, you need to force a cache refresh. The page for this is on your your uStore at (use the IP of your server):

In Cache update, press the Refresh Localization Cache button, Refresh ACL Cache button, and Refresh General Cache button. Not sure if all of these are needed, but I’ve done this and the stores were fine afterwards. If you don’t do a manual cache refresh, this will eventually occur in uStore, but if someone opens a store in the admin site and makes a modification, you may lose the changes your SQL query made.

And that’s it. Again, if your not an experience database administrator, don’t attempt this.