Another view of XML schema attributes vs. elements

Another way to look at whether you should add information as an attribute or a child element while designing an XML schema element is whether you are talking about an IS-A or a HAS-A relationship.

Attributes are great for IS-A relationships -- "I am an element with ID='20121101-i1' or "I am an element for the Dublin Core (METS MDTYPE='DC')".

Child elements are great for HAS-A relationships -- "I have several groups of files" or "I have binary and XML data for a file".

Garbage Collection

UntitledGarbage Collection

A Marpa DSL tutorial: Error reporting made easy

[ This is cross-posted from the new home of the Ocean of Awareness blog. ]

Using Marpa's facilities for error reporting, a quickly written domain-specific language can, as of its first draft, have error reporting whose helpfulness and precision exceeds that of carefully hand-crafted production compilers. This post will show how, with an example.

Two techniques will be used. First and most basic, Marpa's knowledge of the point at which the parse can no longer proceed is 100% accurate and immediate. This is not the case with yacc-derived parsers, and is not the case with most recursive descent parsers.

Read/Write Web bag o links

* Command Query Responsibility Segregation - http://martinfowler.com/bliki/CQRS.html
* https://metacpan.org/module/Web::Hippie
* https://blogs.perl.org/users/joel_berger/2012/10/a-websocket-mojoliciousdbi-example.html
* http://www.slideshare.net/dkrotkine/dancing-with-websocket
* http://daniel.wertheim.se/2012/05/01/realtime-web-application-using-cqrs-and-websockets/
* http://jfarcand.wordpress.com/2010/10/25/scalling-your-websocketcomet-real-time-application-using-redis-pubsub/
* http://blog.newsblur.com/post/20371256202/building-real-time-feed-updates-for-newsblur
* http://cdent.tiddlyspace.com/TiddlySpaceSockets
* https://github.com/carlhoerberg/knockout-websocket-example
* http://stackoverflow.com/questions/12733985/job-processing-via-web-application-real-time-status-updates-and-backend-messagi
* https://gist.github.com/3764706
* http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#REALTIME_WEB
* https://hacks.mozilla.org/2011/06/a-wall-powered-by-eventsource-and-server-sent-events/
* http://www.html5rocks.com/en/tutorials/eventsource/basics/

When to create a branch in Git?

Upon reflection:

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 297 commits.

I think maybe I should have created a branch…

Let's Have a Distributed Perl Hackathon

Q. What is a hackathon?

A. In the Perl world, it's a meeting, generally of one day's or a weekend's length, where Perl hackers come together in one physical location (primarily) to work collectively on projects which will improve Perl, CPAN and the Perl ecosystem.

Q. What is a "distributed" hackathon? Is it something like a "distributed" source code control system?

A. In a way. A distributed hackathon, like a distributed source code control system, is designed from the outset to be clonable. In the Perl community, we've had many hackathons over the past eight years, but they generally haven't been planned to be clonable, i.e., easily reproducible in different locations at later points in time. They've been planned as events in one geographic location that when they're over, they're over. They aren't intended to be reproduced elsewhere.

Q. What would it mean for a hackathon to be "clonable"?

Calling David Hand, author of Tree::DAG_Node

Hi

Neither I nor Sean Burke can get a response from David, bit if anyone knows him, please let him know I'd like to take co-maint of Tree::DAG_Node in order to fix bugs.

So, I'll ask the CPAN admins on Friday to do that if I don't hear from him beforehand.

If he doesn't want me to be co-maint, I'll fork the code...

Chicago.PM Report - Scripting Git With Perl

This month's presentation was on the Git::Repository Perl module, given by me. In both my jobs, I use the Git::Repository module to automate releases.

At Double Cluepon, I use it to create the release packages based on tagged commits, so that releasing our software is exactly: git tag vX.X.X && git push --tags. A Perl script builds every package and then pushes them to our update server, where the game will check for a new release.

At Bank of America, we use it to combine our 20-30 Perl distributions into a single release. Using git submodules, we have a "release repository" that holds references to all the modules for each team's releases (some are team-specific, others are shared between teams). A Perl script manages the submodules, determines when the submodule refs need to be updated, tags and branches for each release, and finally builds and installs our modules using Module::Build and local::lib.

All this Git stuff gave me some ideas for possible useful code I can release, perhaps leading to me finally recovering my CPAN ID.

The slides for my Scripting Git With Perl talk

The code for the script that automatically builds releases tagged like "vX.X.X"

YAPC::Europe 2013 in Kiev, week minus 42. Food

I hope you expect that we announce the date and place of the next YAPC::Europe in Kiev, but please be patient a little bit more. Next week Viacheslav visits a venue where a PyCon was held and after that we select the venue. It is a difficult choice as we don't have now exact budget and the venue rent cost strongly varies. It would be much easier to decide after the attendees pay :-)

Anyway, let's talk today about eating during and around the conference. There are four different type of food supply we have to organise.

1) Pre-conference meeting;
2) Coffee breaks during the conference days;
3) Lunches;
4) Attendees dinner.

Food at a pre-confernece meeting is simple. We invite everybody and depending on the level of sponsorship we get we offer either nothing, or beer, or beer and snacks. It is also possible for any company to become a Pre-conference meeting sponsor right now.

DBIx::Class::FilterColumn: making transformation easier

Over a year ago I was tasked with creating a data warehouse for sports data. Having known absolutely nothing about data warehousing/ETL, my first sport ended up quite the mess; scrapers would extract and transform at the same time then stuff it into a database where it most likely needed additional transformations. At the time, additional transformations meant writing a script to iterate over every row and change whatever column to whatever regex I had constructed. Sometime later after i'd have generated a report i'd find something wrong, often missing data due to a bad transform regex, which meant re-scraping websites (and often times purchasing another membership).

Perl 5 Porters Weekly: October 15-October 21, 2012

[ crossposted from its original blog ]

Welcome to Perl 5 Porters Weekly, a summary of the email traffic of the perl5-porters email list. Let's get to this week's topics.

  • Perl 5.17.5 is now available
  • Timely destruction guarantees
  • COW status
  • perl5db refactoring
  • hash assignment fixes and speedup are ready for review
  • Pull request CPAN-1.99_51
  • sub signatures status and performance
  • No-taint support in Perl

The YAPC Europe Organizers Mailing List


The YAPC Europe Foundation (YEF) has created a dedicated Organizers Mailing List. The purpose is to share relevant information between organizers of Perl workshops, conferences and hackathons, in Europe, such that we can all benefit from each others rapidly accumulating knowledge. Here's the link:

http://lists.yapceurope.org/mailman/listinfo/organizers

By letting everyone else know where, what and when, an event is going to take place, and sharing our intentions, this might help to avoid the unfortunate case where two events happen at the same time, as well as helping to spread Perl events sensibly over the year. The list is intended as a one-stop shop for anyone interested to participate in helping to propose, ask for help, and to organize, all Perl-related events in the European sphere. Discussions have already started. Please join and help us to promote local, as well as nation-wide, events for the benefit of the larger Perl community in Europe.

PtPW 2012 recorded in Video

This is not that interesting for most people that can not understand Portuguese. Nevertheless, the Portuguese Perl Workshop was recorded in Video, and we managed to upload the talks and a Moose tutorial to youtube. Check the talk list and links to the videos in out perl.pt blog.

Assigning a user defined function at runtime

I recently wrote my first XS module, and found myself wanting to dynamically load it in the parent module if possible. The next problem was what if the user wants to change back to the pure Perl version? And then, what if the user wants to use Other::Module's similar_function?

Net::Amazon::EC2 0.22 released; supports AWS v2 signatures

I just released 0.22 of Net::Amazon::EC2 to CPAN which resolves RT #80407 about EC2 requiring version 2 signatures.

Until today, this module had been using v1 signatures. If you use this module and start getting "version mismatch errors" from EC2 calls, you will need to update to this version.

Please be aware that URI::Escape and Digest::SHA were added to the module dependencies to implement AWS v2 signatures.

WxTut is complete, whats next from you?

In the next Perl Magazine will come the 12th and last part of my big WxPerl tutorial. To me its almost like my teenage child is now out of the house (brain). You might complain: "but its German, I can't read that". Don't worry the resulting book will be in English. But this post is really about something different, but related, in fact about coming English articles: written by You.

Alien::Base Perl Foundation Grant Report Oct

This month has been a good one for Alien::Base, and I’m happy to report that I believe that the grant is winding up. We saw a beta release and had a project night during which we hacked on a few issues, but also I was keenly observing people assessment of usability, which I consider key to the success of the project.

I think I have only a few issues to work out before I declare success:

  1. Fix a bug which has crept up on OpenBSD - I am almost certain this is related to my implementation of a parser for pkgconfig files
  2. Investigate a solaris bug reporting from the extended test chain (i.e. Alien::DontPanic and Alien::Ford::Prefect)
  3. Polish up my Alien::GSL distribution and release to CPAN as an example. BTW this was my project on project night, though with all my activity I didn’t get a whole lot done (visibly)

I think that it is conceivable that these last issues can be addressed this month.

"Essential Modern Perl" Track at Austrian Perl Workshop

(crossposted from http://domm.plix.at/perl/2012_10_essential_modern_perl.html)

To get more new participants to this years Austrian Perlworkshop we (Vienna.pm) came up with the following plan: On Saturday, 17th November, we will have one track of talks called Essential Modern Perl. We came up with ~15 topics that should introduce newcomers and old timers to the wonderful world of CPAN and the various toolkits and modules that lead to the Perl renaissance labeled Modern Perl.

We are still looking for speakers for some of the topics, so if you're near Vienna or need an excuse to visit us, just grab one of the currently un-assigned talks! Also, if you're a member of one of the core groups working on the listed modules etc and have a good presentation about the topic at hand, please let us know where we can find it (if we're allowed to reuse the slides...). We're looking for ~20 minutes introduction talks targeted at people that know programming, but do not necessarily know a lot of Perl.

Progress::Any

I usually implement "progress bar" in a command-line application via logging. For example:

use Log::Any::App qw($log);
$log->info("Starting ...");
for my $i (0..@items-1) {
    my $item = $items[$i];
    $log->infof("(%d/%d) Processing item %s ...", $i+1, ~~@items, $item);
    do_stuff($item);
}
$log->info("Finished");

Log::Any::App already gives me an easy way to output those log lines to screen and/or file. I can turn on the log by giving VERBOSE=1 or --verbose to my program. The log lines are printed with a timestamp, so I can guess how long a run will last.

Domain-based session affinity/persistency

So, here is another pretty cool feature I've implemented. It might interest you if you use multiple domains with reverse proxies.

I was recently asked to add to Perlbal::Plugin::SessionAffinity the ability to allow consistent session affinity per domain. Hell, it's a paid feature so I took a look at it.

The idea is that if you have a lot of domains and you use Perlbal::Plugin::SessionAffinity in your Perlbal reverse proxy, you might get a fragmented cache because each user will reach a different (yet consistent) backend, regardless of the domain they requested. When someone has more than 300 domains behind the same reverse proxies (and let me tell you, some people actually do), this fragmented cache reduces efficiency.

About blogs.perl.org

blogs.perl.org is a common blogging platform for the Perl community. Written in Perl with a graphic design donated by Six Apart, Ltd.