Parallels and Windows 8 – two core minimum

I’m amazed how well my Macbook Air (June 2012 version) runs Windows in a virtual machine with Parallels.  I’ve been doing a bunch of data migration work recently and need to run Windows 7, SQL Server, and Office 2010.  Everything is seamless and fast on a second monitor so it feels like 2 PCs on a single keyboard and mouse.

Then I started working with Windows 8 and Office 2013 for a different client and the wheels came off.  The VM would stutter like a car climbing snowy Claypit Hill Road in Wayland.  The CPU would peg but not even the animated cursor would be spinning.

Frustrated, I launched a case with Parallels support.  After a little back and forth, I got an appointment with an engineer who was polite, articulate, and — wait for it — helpful!  He indicated he had seen this problem before and adding a 2nd CPU core to the VM resolved the issue.

The change was painless.  It required fully stopping the VM, but no other surgery.  I haven’t seen the stutter problem since, and don’t notice any adverse performance consequences from the change.  Parallels get’s an A for technology and an A for support.  Nice to feel that way about a product and company these days.

Apex Data Loader Tips for Uploading Content Files Content is a pretty good document management system.  If you are using Salesforce and you aren’t using Content you probably should.

Uploading large quantities of files is not difficult, but requires some local knowledge.  Here are a few tips to make it easier.

  1. Give the Apex Data Loader more heap space.  Instructions can be found here.
  2. I like to err on the side of reliability when doing document uploads; so I change the Data Loader Settings to use a batch size of 1 and do not use the Bulk API.
  3. Keep in mind that you can only import 5,000 files per day.  If you are doing more than this, open a case with support and get the limit raised temporarily.
  4. Files in Content are managed by 2 objects.  ContentDocument and ContentVersion.  When uploading new documents to Content, you are adding records to ContentVersion.  When you are bulk deleting, you delete records from ContentDocument.
  5. The easiest way to figure out how to create a ContentVersion upload file is to first do an Export.  Make sure to manually add a few files to Content through the UI so there is something to Export from each of the Libraries you want to populate.  When doing the ContentVersion Export, select ALL columns EXCEPT VersionData.  VersionData contains the actual bytes of the files in Content.
  6. The minimum set of columns required for a Content import are:
  • TITLE = User friendly name of the file, can be anything, but usually the filename without any folder (path) information.
  • PATHONCLIENT = Fully qualified file name including ALL path information.
  • VERSIONDATA = exactly the same as PATHONCLIENT.
  • FIRSTPUBLISHLOCATIONID = Salesforce ID of the Library where the document should be loaded.  If you don’t put this in the file, then your files will be uploaded to your personal library which must be wrong.

That should get you started. Have fun assembling your files into batches for uploading.  Once they are in Content, you’ll get the benefit of secure sharing, preview of popular file types, and flexible tagging.

Yes! PHP on GAE!

I was talking with Google Enterprise Support about how reasonable my bill was last week and I couldn’t believe my ears.  He told me that Google App Engine (GAE) was now supporting PHP.  Check it out here.  I know that sounds geeky (’cause it is), but it is also really great for me and everyone who wants to use the platform.

Google App Engine is a super way to build web apps that can scale without system engineering.  But you needed to work in a bit of a non-traditional environment.  Now I can build teams with PHP developers, rather than needing Python (and Django).  Not that there’s anything wrong with Python — but it is a smaller pool of talent.

Here’s another great take on the news.  VentureBeat estimates that 75% of the web is presented with PHP.  Wooah.