Getting ready for MongoDB 3.2: new features, new Perl driver beta

After several release candidates, MongoDB version 3.2 is nearing completion. It brings a number of new features that users have been demanding:

  • No more dirty reads!

    With the new "readConcern" query option, users can trade higher latency for reads that won't roll-back during a partition.

  • Document validation!

    While MongoDB doesn't use schemas, users can define query criteria that will be checked to validate to new and updated documents. In addition to field existence and type checks, these can include logical checks as well (e.g. does field "foo" match this regex).

Other, less developer-facing features include:

  • Encryption at rest
  • Partial indexes
  • Faster replica-set failover
  • Simpler sharded cluster configuration

If you want to try out a MongoDB 3.2 release candidate, see the MongoDB development downloads page.

Of course, to take advantage of developer-facing features, you'll need an updated driver library. All the MongoDB supported drivers have beta/RC versions with 3.2 support.

The current Perl driver beta is MongoDB-v1.1.0-TRIAL, which you can download and install with your favorite cpan client:

$ cpanm --dev MongoDB

$ cpan MONGODB/MongoDB-v1.1.0-TRIAL.tar.gz

Some of the changes in the beta driver include:

  • Support for readConcern (MongoDB 3.2)
  • Support for bypassDocumentValidation (MongoDB 3.2; for when you need to work with legacy documents before validation)
  • Support for writeConcern on find-and-modify-style writes (MongoDB 3.2; can be used to emulate a quorum read)
  • A new 'batch' method for query result objects for efficient processing
  • A new 'find_id' sugar method on collection objects for fetching a document by its _id field

Whether you're ready for MongoDB 3.2 or not, I encourage you to try out the Perl driver beta.

If you find any bugs or have any comments, please open a MongoDB JIRA ticket about it, or email me (dagolden) at my address, or tweet to @xdg.

Thank you!

Posted in mongodb | Tagged , , , | Comments closed

If you use MongoDB and Perl, I want your feedback!

With the release of the v1.0 MongoDB Perl driver, I'm starting to sketch out a roadmap for future development and I'd like to hear from anyone using MongoDB and Perl together.

How can you help?

  1. Please take a few minutes to fill out the MongoDB Developer Experience Survey.

    This survey covers all languages that MongoDB supports in-house. In the past, there have been few responses from Perl developers and I'd like to change that.

  2. Please click the "++" button on the MetaCPAN MongoDB Release page.

    Because there are no download statistics for CPAN, gauging community interest is challenging and this is one – albeit crude – metric I (and my bosses!) can look at over time.

  3. Please file a JIRA ticket for any bugs or feature requests you have.

    If you absolutely can't stand to deal with JIRA, you can email me directly and I'll put it in JIRA for you.

  4. Please promote your work! Blog about it, tweet about, give talks, etc.

    Don't let the "hip" languages be the only ones people think of for big data and NoSQL development.

Why is giving feedback so important?

MongoDB is one of the only next-gen databases to support Perl in-house.

Your feedback helps demonstrate community interest to keep it that way.

Thank you!

Posted in mongodb, perl programming | Tagged , , , | Comments closed

MongoDB Perl Driver v1.0.2 released

The MongoDB Perl driver v1.0.2 has been released on CPAN.

This is a stable bugfix release. Changes include:

  • PERL-198 Validate user-constructed MongoDB::OID objects.
  • PERL-495 Preserve fractional seconds when using dt_type 'raw'.
  • PERL-571 Include limits.h explicitly.
  • PERL-526 Detect stale primaries by election_id (only supported by MongoDB 3.0 or later).
  • PERL-575 Copy inflated booleans instead of aliasing them.

Please see the Changes file if you wish additional detail.

We always appreciate feedback from the user community. Please submit comments, bug reports and feature requests via JIRA.

NOTE: If you use the MongoDB Perl driver, please click the "++" button on the MongoDB release page.

Posted in mongodb | Tagged , , | Comments closed

My Github name has changed from dagolden to xdg

For a long time, my Github identity matched my CPAN ID and I was 'dagolden' on Github. Today, I'm switching to be 'xdg' on Github, to match my Twitter and IRC handles.

The 'dagolden' Github account has become an organization to avoid breaking links and avoid the pain of manually migrating 100's of repositories.

So, henceforth, if you want to highlight me on Github, use "@xdg", not "@dagolden".

Posted in meta | Tagged , , | Comments closed

How to trim PDF margins and edit metadata

I often download academic articles as PDFs to read later. I regularly find two really annoying problems:

  1. Huge margins make the PDF nearly unreadable on my Kindle Fire
  2. Title and authors are missing from PDF metadata, making them harder to find later via search

Today, I found an answer to the first and wrote an answer to the second.

For fixing huge margins, I found the free briss tool, which shows a composite image of all odd and even pages and lets you set a crop box around them.

briss in action cropping PDF margins

briss in action cropping PDF margins

To fix the metadata, I did a bit of Googling for tools, then realized I could whip up a tool with Perl and PDF::API2 faster than hunting for an existing one.

This program reads PDF metadata, opens an editor with the data in JSON format, and takes the result and saves it to a new PDF.

#!/usr/bin/env perl
use v5.10;
use strict;
use warnings;

use JSON::MaybeXS;
use PDF::API2;
use Path::Tiny;

die "Usage: $0 <infile> <outfile>\n" unless @ARGV == 2;

my ( $infile, $outfile ) = @ARGV;

unless ( $infile || -r $infile ) {
    die "Input file '$infile' can't be read\n";

my $pdf = PDF::API2->open($infile);
my $json = JSON::MaybeXS->new( utf8 => 1, pretty => 1 );
my $temp = Path::Tiny->tempfile;
$temp->spew( $json->encode( { $pdf->info } ) );

if ( $ENV{EDITOR} ) {
    system( $ENV{EDITOR}, $temp )
      and die "Error editing temp file: $!\n";
else {
    die "No EDITOR environment variable set.\n";

$pdf->info( %{ $json->decode( $temp->slurp ) } );
Posted in hacks, perl programming | Tagged , , , | Comments closed

© 2009-2015 David Golden All Rights Reserved