My thoughts and tips from my work life.

Tuesday, June 2, 2015

I'm Still Around

9:24 PM Posted by Erik Pitti No comments
It's been silent around here for too long.

Here's a few of the things I've been working on for the last two years:

  • SCCM 2012
  • MDT 2013
  • Windows Image Creation and Deployment using MDT and SCCM and without those two using DISM/ImageX/GImageX
  • Mac OS X image creation and deployment using DeployStudio
  • Active Directory and Exchange Administration
  • Exchange 2010 -> 2013 on-premises upgrade
  • Sharepoint 2013 farm installation
  • Database migration to SQL Server 2012
  • XMPP-based IM server installation and maintenance
  • Virtualization with Hyper-V
  • High performance storage design, installation, configuration and operation (Dell|Equallogic, Lenovo, EMC)
  • iPad deployment using Apple's DEP
  • Enterprise Chromebook/Chrome OS Deployment
  • Scripts and Tools to manage Chromebook deployments
  • Network Management (Cisco, Ruckus, Meraki)
And much more.

I plan to get back to blogging on this site with insighes

Sunday, January 27, 2013

Setting up WordPress 3.5.1 on 1and1 Windows/MSSQL Hosting Plan

11:26 PM Posted by Erik Pitti No comments
This article gives a great breakdown on setting up WordPress on IIS with Microsoft's SQL server. I'm not sure if this is specific to 1and1's hosting setup but I did find a quirk when using version WordPress 3.5.1 version 1.1.4 of the WordPress Database Abstraction plugin.

You're likely to run into an error similar to the following.
Call to undefined function mysql_free_result() in E:\kunden\homepages\19\<your user id>\www\mysite\wp-includes\wp-db.php on line 1126
Edit the file wordpress-root-dir\wp-includes\wp-db.php look for the following code block:
if ( is_resource( $this->result ) )
  mysql_free_result( $this->result );
Comment both lines out otherwise mysql_free_result will always return an error:
//if ( is_resource( $this->result ) )
  //mysql_free_result( $this->result );
Leave everything else in the function as is, including the closing curly brace "}" on the line below.

If you encountered this error while running install.php you will need to login to the MSSQL admin panel,  delete the tables that were created by the WordPress install.php script and re-run install.php.

Wednesday, March 14, 2012

Configuring Google NoSSLSearch for Windows DNS Servers

5:35 PM Posted by Erik Pitti 9 comments
Create a new Primary DNS Zone on your DNS server for
Add a single CNAME record with a blank alias name and “” for the FQDN for target host. The trailing dot after “com” is important.
Clear your DNS server cache by right-clicking on your server in DNS manager and selecting Clear Cache.
When your clients request, your DNS server will direct the client to instead of
Sample output from NSLOOKUP after configuring this DNS zone:

Server:  dc02.domain.local

Hope this helps.

Monday, December 19, 2011

Fun with AirPrint, Bonjour and DNS Service Discovery (dns-sd) for iOS

9:38 AM Posted by Erik Pitti No comments
I'm currently working on getting AirPrint working with our installed base of printers that don't share an IP subnet with a fleet of iOS devices. For now I'm just going to post links to the source material I've gathered. Once I've figured it out, I'll come back and expand this post:

High-Level Outline:
  • Create new DNS zone (ex: bonjour.yourdomain, this domain does not have to have a public TLD. For instance, I used print.test, and will refer to the zone as print.test in this document)
  • Add new DNS zone as published search suffix in DHCP
  • Install CUPS server (I used Ubuntu Linux Server v11.10)
  • Configure a shared printer queue in CUPS for printer1 named printer1_q
  • Add an A record for CUPS server to print.test dns zone (assumes CUPS server is at
    • cups1 IN A
  • Add b._dns-sd._udp and lb._dns-sd._udp PTR record
    • b._dns-sd._udp IN PTR print.test.
    • lb._dns-sd._udp IN PTR print.test.
  • Add PTR records for printer
    • _universal._sub._ipp._tcp IN PTR printer1._printer._tcp.print.test.
    • _cups._sub._ipp._tcp IN PTR printer1._printer._tcp.print.test.
  • Add SRV records for CUPS printer queue named printer1_q on the print server
    • printer1._printer._tcp IN SRV 0 0 631 
  • Add TXT record for CUPS printer queue named printer1_q on the print server
    • printer1._printer._tcp IN TXT (
      "ty=HP Laserjet Color 4650 DN"
      "product=(GPL Ghostscript)"
      "pdl=application/octet-stream,application/pdf, application/postscript,image/jpeg ,image/png,image/urf"
      "URF=none" )
Notes on the TXT record:

  • Always set URF=none, it must be present for the record to work
  • The value from the "ty" key is displayed in the iOS printer search results as the printer name
  • The value from the "note" key is displayed under the printer name in the iOS printer search results
  • Feature descriptors are added in a key= where is T (for true) or F (for false). If a key is not specified or is blank, the value is assumed to be false. Optional keys include:
    • Duplex: enable duplex (two-sided) printing
    • Staple: can staple
    • Copies: supports printing more than one copy of a document
    • Collate: can collate (group) pages 
    • Punch: can punch
    • Bind: can bind (assume this is saddle stitch or other binding method)
    • Sort: printer includes a sorter
  • The printer-type key appears to reference bit mask data type. I have not found a description for this enumeration.
  • I have not found documentation printer-state enumeration. Most examples set this to 3
  • If your print server requires authentication, add the following literal string to the TXT record : "air=username,password"
I'm looking into the feasibility of using native IPP without CUPS in these TXT records and will update this post with what I find out.


IETF Draft: DNS-Based Service Discovery

Manually Adding DNS-SD Service Discovery Records to an Existing Name Server

Apple Developer Documentation: Bonjour Operations

Apple Support Discussion: Airprint Information and FAQ

Apple Support Discussion: Airprint in the Enterprise across subnets

Bonjour Printing Specification

Printing from the iPad without buying a new printer

AirPrint and Linux

Airprint across subnets

CUPS & AirPrint from iPhone or iPad

Automatically generate AirPrint Avahi service files for CUPS printers

AirPrint with Ubuntu 10.10

Monday, November 8, 2010

Exchange 2010 Development

9:13 AM Posted by Erik Pitti No comments
The following is a collection of links that I'm using to learn Exchange development

Exchange 2010 Developer webcasts

Exchange 2010 SP1 SDK packages

More Developer webcasts

MSDN Guide to Exchange 2010 SP1 Development Technologies

Friday, September 17, 2010

JavaScript Speed Comparison IE9 Beta vs. Firefox 4.0b6

9:35 PM Posted by Erik Pitti No comments
Using the SunSpider JavaScript benchmark at, here's the results for my PC.  Both browsers support GPU acceleration. Both browsers have those settings set to their default values.  IE9 comes out ahead, being about 20% faster than Firefox 4.0b6 on my work PC hardware (Core2 Duo E6550 @2.33 GHz, ATI Radeon HD 2400 Pro video adapter). This is by no means the end-all, be-all of browser performance ratings, just a cursory test since I was curious.

Firefox 4.0 beta 6:

Internet Explorer 9 Beta:


Friday, July 30, 2010

Generate all possible values for the Defcon 18 Badge Ninja Unlock in C#

2:45 PM Posted by Erik Pitti No comments
Part of the fun at DEFCON is the badge hacking contest.  This year I decided to take a hard look at the code behind the badge.  One area of interest was the Ninja Party "Locked" screen, so I decided to see if I could figure out how to unlock it.  I did.  Here's the code I used.  There was also an Excel spreadsheet involved that computed the tumbler values based on the dc18_encode_tumblers function in the file DC18_Badge.c.

Once you figure out the pin encoding (I can’t make this too easy), this code will let you validate the integer result.


Keywords: DEFCON DC8 Ninja Badge NinjaNetworks

Monday, June 28, 2010

Query Windows 7/Vista/Server 2008 Security Log for Login Failures using an XPATH

6:49 PM Posted by Erik Pitti No comments

The following XPATH query allows you to query for all “Audit Failure” events from the Windows Security event log where the user name matches the string “username”.  Ideally you’d be able to use a contains(.,“username”) clause instead of the =“username” syntax, but so far I haven’t been able to make that work.

Code Snippet
  1. <QueryList>
  2.   <Query Id="0" Path="Security">
  3.     <Select Path="Security">*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] ]] and (*[System[band(Keywords,4503599627370496)]]) and (*[EventData[Data[@Name="TargetUserName"]="username"]])</Select>
  4.   </Query>
  5. </QueryList>

If you have some ├╝ber-cool XPATHs you use to query your event logs, post them to the comments section.

Thursday, February 18, 2010

Background Transparency In Office 2004

8:10 PM Posted by Erik Pitti No comments

Edit the slide master

Add your picture

Send it to the back of the slide by choosing Send to Back on the Layering menu.

 Picture 4

Next, click Format Picture… in the formatting palette.

Picture 3

Slide the Transparency slider until a desired transparency effect is reached. You can click the Preview button in the bottom left-hand corner of the window to see the results of your chosen settings.

Picture 1

Above (before). Below (after)

Picture 2

© 2006-2015 Erik Pitti, All Rights Reserved. Powered by Blogger.