Actions from BooKMovable Type Pro 4.382015-02-19T16:15:01Zhttp://blogs.perl.org/mt/mt-cp.fcgi?__mode=feed&_type=actions&blog_id=0&id=31Commented on Analysing CPAN Testers' Reports in E. Chorobatag:blogs.perl.org,2015:/users/e_choroba//1749.6714#15469922015-02-19T15:15:01ZBooK
Open the page showing the combination of mod:MooseX::ClassAttribute and mod:Moose, and sort by "state".]]>
Posted CPAN.io, yearly boards and gamification to BooKtag:blogs.perl.org,2015:/users/book1//208.67152015-02-19T15:04:22Z2015-02-19T15:04:39ZThe CPAN once-a-week has been running for more than three years now, with several active leaderboards. NEILB introduced the monthly and daily releases competitions, and the notion of NeoCPANisms. CPAN.io extended the game to seven different contests, over more release...BooKhttp://blogs.perl.org/mt/mt-cp.fcgi?__mode=view&blog_id=208&id=31
The CPAN once-a-week has been running for more than three years now, with severalactiveleaderboards.
NEILB introduced the monthly and daily releases competitions, and the notion of NeoCPANisms.
CPAN.io extended the game to seven different contests, over more release types and periodicities.

I was always interested in seeing the "past yearly contests" (i.e. before 2012), mostly because I knew I fared wellthen... ;-) And just like the main contest pages show the currently active competitions, I thought it would be interesting to be able to see all past yearly games at once.

Top boards

While working on this, I also got interested into the "top periods" for CPAN uploads.
And so CPAN.io now has some leaderboards that are not pitting authors against each others,
but time periods instead.

Come and play with us

These boards are part of the "gamification of CPAN" trend that NEILB is steering towards the betterment of CPAN.
We have moreideas beyond the existing boards, all with a goal of friendly competition that encourages behaviours which improve CPAN.

Thanks to Plack and Wallflower, the CPAN.io web site is both a dynamic website (in development) and a static website (in production). So if you're more interested in playing with web sites than distributions, please fork the CPANio repository, take a look at (or submit) some issues and send us nice pull requests.

]]>
Commented on Analysing CPAN Testers' Reports in E. Chorobatag:blogs.perl.org,2015:/users/e_choroba//1749.6714#15469612015-02-19T13:27:16ZBooK
Did you know about analyses.cpantesters.org? I think it would have provided you with the information you needed, without the need of a scraper.]]>
Commented on Speaker for the dead in Aristotletag:blogs.perl.org,2014:/users/aristotle//15.6604#15026592014-12-29T13:58:24ZBooK
I also host an inner archivist, and he definitely likes the idea of saving a git bundle somewhere, thus allowing the actual shutdown of any online (in)activity (github et al).

]]>
Posted Of course you can `requires` attributes! to BooKtag:blogs.perl.org,2014:/users/book1//208.65492014-12-07T08:12:57Z2014-12-04T14:59:00ZDuring the patch -p2 hackathon, two seasoned Perl programmers told me that "you can't requires attributes". This sounded weird to me, as attributes are exposed as methods and besides, I'm doing that all the time in my current work project....BooKhttp://blogs.perl.org/mt/mt-cp.fcgi?__mode=view&blog_id=208&id=31
During the patch -p2 hackathon, two seasoned Perl programmers told me that
"you can't requires attributes". This sounded weird to me, as attributes are exposed as methods and besides, I'm doing that all the time in my current work project.
]]>
Let's look at the simplest possible example:

requires checks if a subroutine my_attr exists in the MyClass namespace

has 'my_attr' adds the my_attr subroutine (an accessor) in the MyClass namespace

Why doesn't this work? First, we should keep in mind that our beloved Perl has a complex organisation of compile-time and runtime phases. Although Moo (and Moose) code is declarative, most of it is nonetheless executed during a runtime phase. Second, we can fix this without looking at the code of any of Moo, Moo::Role or Role::Tiny. Simply use our knowledge of Perl, and realize what is happening.

Calling with is asking the roles to check (among other things) if the methods they require actually exist in the calling class. But this line of code is executed before the has, which actually inserts my_attr in the class namespace. So my_attr doesn't exist in MyClassat the time with is called.

I think my with declarations are going to move to the bottom of my files as I design more of my code around roles.

]]>
Posted The patch -p2 hackathon in Lyon is over to BooKtag:blogs.perl.org,2014:/users/book1//208.65502014-12-04T12:44:47Z2014-12-04T14:33:16Zpatch -p2 was held in Lyon, in the local Booking.com office, and organized by the French Perl Mongers. It was the sixth hackathon the French Perl Mongers organized in three years (we're now on a steady "two hackathons a year"...BooKhttp://blogs.perl.org/mt/mt-cp.fcgi?__mode=view&blog_id=208&id=31patch -p2 was held in Lyon, in the local Booking.com office, and organized by the French Perl Mongers.

]]>
Now that we have a little experience with the venue, things went much more smoothly than the previous time.

Once again, nothing would have been possible without the wonderful Laurent Boivin and Wendy van Dijk. I think I'll just quote myself at this stage:

Thank you Laurent, although this was my idea, nothing would have been possible withour your help.

Thank you Wendy and Laurent, you came to Lyon, on your own funding, knowing you wouldn't have time to hack (you actually had no intention to), because all you planned to do was help the participants focus on their task by taking care of the mundane details.

This might not seem like much to some, but this was a gift of love for the community, Perl and CPAN. I'm not sure we deserve you, but I'm glad you're here for us. Thank you. ♥

I would also like to thank Pauline, the office manager for the Booking.com Lyon office, who was very keen on making this work, and went through the trouble of dealing the building owners to ensure we would be able to access it (including on Sunday).

I think my colleagues have enjoyed seeing our weird bunch roaming the office, and hopefully have not been disturbed too much by our presence. Enough that they might accept hosting us sometime in 2015!

]]>
Commented on YAPC::Europe 2014 Survey results are online in Barbietag:blogs.perl.org,2014:/users/barbie//72.6426#14213032014-09-26T09:12:53ZBooK
Your link to the survey seems to be broken.]]>
Commented on Logically And Yourself (&&=) in JT Smithtag:blogs.perl.org,2014:/users/jt_smith//242.6416#14202302014-09-22T07:19:13ZBooK
&&= is one of my favorite Perl operators.
I giggle every time I have to use it.

My usual use case is replacing an existing value with something else (e.g. a string with the corresponding Path::Class::File object).

]]>
Posted Support the "Fund for Act development" to BooKtag:blogs.perl.org,2014:/users/book1//208.64172014-09-21T17:15:00Z2014-09-21T17:14:20ZI just announced that the patch -p2 hackathon in Lyon will have a special focus on Act. To support the people hacking on Act and willing to attend this and other future Act hackathons, the French Perl Mongers have decided...BooKhttp://blogs.perl.org/mt/mt-cp.fcgi?__mode=view&blog_id=208&id=31
I just announced that the patch -p2 hackathon in Lyon will have a special focus on Act. To support the people hacking on Act and willing to attend this and other future Act hackathons, the French Perl Mongers have decided to setup an Act fund.
]]>
The goal of the fund is to help the people working to improve Act, so that the Perl community can finally have an improved Act to use. Some of it is by getting the keepers of the main database (the French Perl Mongers) more involved with what's happening. Another big part of it is to facilitate communication between the people the more involved in the project. Hackathons have proved their worth, mostly because of the value of face-to-face communication.

This fund is not meant to pay salaries, or offer grants, but to cover travel and accommodation of hackers involved in the current and future efforts to improve Act. The Act fund will be fully disclosed to the public, on the Act website, with all income and expenses listed.

I've approached several Perl organizations and Mongers groups that have benefited from Act in the past, to ask them to support the Act Fund. Individuals can support the Act fund too, and help our hackers bring Act in the realm of modern Perl.

Thanks for your support!

]]>
Posted patch -p2 to BooKtag:blogs.perl.org,2014:/users/book1//208.64152014-09-21T16:00:00Z2014-09-21T17:04:50ZThe next edition of the French Perl Hackathon (a.k.a. patch -p2), will be held in Lyon, from November 27 to November 30, 2014....BooKhttp://blogs.perl.org/mt/mt-cp.fcgi?__mode=view&blog_id=208&id=31
The next edition of the French Perl Hackathon (a.k.a. patch -p2), will be held in Lyon, from November 27 to November 30, 2014.
]]>
Like the Perl QA Hackathon in March, this hackathon will once again be hosted in the Booking.comoffices in Lyon.

While open to all hackers interested in Perl (with a limit of about 20 people), the hackathon will have a special focus on Act, with the explicit goal of helping the Perl community push Act in the realm of modern Perl. The following people are already expected: Act's top three committers (Éric Cholet (echo), Philippe Bruhat (BooK), Sébastien Aperghis-Tramoni (Maddingue)), the leader of the Act-Voyager project (Theo van Hoesel, working under a TPF Grant). Several other hackers have already expressed interest.

See you soon in Lyon!

]]>
Commented on YAPC::EU 2015 from 2nd to 4th September in YAPC::EUtag:blogs.perl.org,2014:/users/yapceu//2447.6384#14176982014-09-08T09:17:23ZBooK
Sadly, in France, this is also the first week of school, which is going to make it hard for those of us with children.]]>
Posted Announcing CPAN.io to BooKtag:blogs.perl.org,2014:/users/book1//208.63112014-08-16T13:45:35Z2015-02-19T16:40:46ZTo celebrate CPAN Day, NEILB and BOOK are proud to announce a new CPAN-related site, specifically targetted towards playing with CPAN (with the underlying goal of improving it). Please join us in celebrating the first the day of cpan.io! The...BooKhttp://blogs.perl.org/mt/mt-cp.fcgi?__mode=view&blog_id=208&id=31
To celebrate CPAN Day, NEILB and BOOK are proud to announce a new CPAN-related site,
specifically targetted towards playing with CPAN (with the underlying goal of improving it).

The site is rather empty now, but we have grand plans for it. Come play the CPAN game with us, fork cpan.io on github and send us patches and feature requests.

]]>
Posted Curating CPAN sometimes means really deleting stuff to BooKtag:blogs.perl.org,2014:/users/book1//208.61892014-08-04T04:42:00Z2014-08-04T12:38:07ZRegularly, CPAN authors are reminded that CPAN is a large collection of files, mirrored all over the world, and that it would be nice to keep its size reasonable. Over the last twelve years, we've seen regular calls to remove...BooKhttp://blogs.perl.org/mt/mt-cp.fcgi?__mode=view&blog_id=208&id=31
Regularly, CPAN authors are reminded that CPAN is a large collection of files, mirrored all over the world, and that it would be nice to keep its size reasonable.

Over the last twelve years, we've seen regular calls to remove old versions of distributions from CPAN. Because I'm too lazy to look for more, I'll point to the earliest and the most recent I could find.

My topic for today is not just removing old releases, but actually removing all the versions of a published distribution from CPAN (thus making it disappear entirely, except from BackPAN).

Here are some good reasons to do this:

the module was an experiment and the experiment failed

the module serves no purpose any more

the module is interfacing with an online service that has disappeared or radically changed (i.e. the other half of the equation has disappeared entirely -- this is different from interfacing with an obsolete library: old code never dies)

Having lost interest or not being able to maintain the code any more are not valid reasons to remove a distribution from CPAN, but they are good reasons to make ADOPTME a maintainer.

So, if you've got an old distribution that doesn't belong on CPAN any more, maybe you could consider removing it on CPAN Day?

]]>
Below is the story of the three times I have removed a distribution from CPAN entirely.

Games::Golf (2002)

At the beginning of the millenium, I got involved in Perl Golf (see ASAVIGE's The Lighter Side of Perl Culture (Part IV): Golf for more than you ever want to know about Perl Golf), and in 2002, I worked with JQUELIN and others on a module that was supposed to help running and testing golf entries. After a few months, it became clear that our project was too ambitious, that we lacked the time and motivation to make it work properly, and more importantly that another program was already widely used to perform the same role.

While writing this post, I digged up the old CVS repository, so I might convert it to Git and put it on GitHub at some point. (Because old code should not die, but instead be placed in suspended animation for youngsters to point and laugh.)

WWW::NameWithheld (2008)

What do you do when a web site is useful but it's UI is terrible? You scrape it and perform the interesting moves in your code! There is a website where you can buy and sell used (and new) good (books at first, but now just about anything). The difference with eBay is that there are no bids. The sellers set theirs prices, the site takes its cut, and the buyer pays some extra for postage.

The big drawback is the extra postage costs. However, you can reduce that by buying several items from the same seller. How hard would it be to take your wishlist and point out when several items on it are sold by the same user? (I'm pretty sure it would increase conversion.) Mind you, the SQL query at the heart of this feature probably wouldn't need more than two JOINs.

Because at some point we had a large wishlist and we wanted to save some of the postage costs (and because it was fun), I wrote a scraper that would find all the sellers for all the goods in our wishlist, and tell me when someone was selling more than one item we wanted. Actually, the library code was more about fetching each type of page (item, seller, wishlist) and hand the data to the user. And then I used that data to find sellers that had more than one item on our wishlist.

Soon after I released version 0.01 of the module on CPAN, one of their developers contacted me on IRC (we had chatted on IRC in the past, and he remembered me), and told me that the company was angry enough about my scraping code, that they were on the verge of unleashing their lawyers after me... It seems their great issue at the time was other companies scraping their site (book notices they paid for) and they didn't want me to help those with my open source code. So I removed the modules from CPAN (I even contacted the PAUSE admins to speed up the deletion), and sent an email to the company explaining the steps I had taken to remove the code. BackPAN is obscure enough that you can only find what you know is already there.

No lawyer came after me. Before you ask, I had no interest in trying my luck at fighting, when I was probably violating the terms of service anyway. The crappy website UI remains. People still spend more than then need to. We don't buy as much stuff there as we used to.

WWW::Gazetteer::HeavensAbove (2002-2014)

Heavens-Above is a website "dedicated to helping people observe and track satellites orbiting the Earth without the need for optical equipment such as binoculars or telescopes" (says its Wikipedia entry).

Back in 2002, it was using its own geodatabase to help people set their viewing location. One of my friends was looking to get the list of all city names in the world, and pointed me at the site, asking for the list of all city names (in France, at first). So I wrote a scraper script for getting the data out of the search box, which I later turned into a module.

The one interesting issue I remember from scraping the site is that the search results were
cut at 200 answers. So to get all the cities in a country, I'd start with the * request, detect if there were more than 200 answers, take the last answer, and update the search query. So queries would be *, a*, aa* (think cities in the Netherlands), etc. When there were less than 200 answers, it was time to backtrack, and so move from aa* to ab*. And so on, until the whole list of cities had been exhausted. Looking at the last answer of the 200 answers allowed some cuts in the search, e.g. if the last result of the al* search for Afghanistan was "Aliabad", then the next query could be ali* (skipping all the queries between ala* and alh* that had either results already obtained from the al* query or no result at all).

I did a lightning talk about it at YAPC::Europe in 2002, titled How I captured thousands of Afghan cities in a few hours, where I explained the above as a "possible optimisation". It was added a few weeks later.

The location search form changed in early May 2011 (I fixed the module in December 2013). On January 24, 2014, it finally switched to using Google for finding the latitude and longitude of any city in the world. (I found the dates the site changed its interface thanks to the wonderful and little known CPAN Analysis site, and these tworeports.)

With the gazetteer service of the site gone, my module became instantly obsolete. I removed it from CPAN in July, after finding out the reason why the tests kept failing.

]]>
Posted Giving up on weekly neoCPANisms to BooKtag:blogs.perl.org,2014:/users/book1//208.61362014-06-17T08:13:33Z2014-06-17T08:12:48ZFor a brief period of time (well, one week), I had a chain of 4 weekly neoCPANisms in NEILB's NeoCPANisms contest (which is subtly different from the Monthly New Distribution Challenge 2014 quest on questhub). Then at the end of...BooKhttp://blogs.perl.org/mt/mt-cp.fcgi?__mode=view&blog_id=208&id=31
For a brief period of time (well, one week), I had a chain of 4 weekly neoCPANisms in
NEILB's NeoCPANisms contest (which is subtly different from the Monthly New Distribution Challenge 2014 quest on questhub).

Then at the end of week 23, instead of pushing out an entirely new module (I have a two or three "almost ready" distributions in my CPAN folder), I decided to give up.

Last Saturday (June 14), around 22:00 GMT (i.e. two hours before the deadline), I probably still could have rushed something out. However, I decided I wouldn't.

My main reasons were that:

I was tired

even though noone else but me is watching my code (I mean, look at the proportion of "joke modules" in those neoCPANisms), I didn't want to put out something too shabby

putting out stuff I'd be ashamed of later definitely goes against the spirit of the game

it's just a game

Neil and I have discussed "bending the rules" recently, and he decided that
"unlike the original release-once-a-week competition, there would be no special dispensations, even if PAUSE died. The PAUSE timestamps are really final." Obviously, no special cases mean simpler code, and simple, easy to understand, rules. Making a special case for a PAUSE breakage or a release that was pushed on time but indexed and put on CPAN after the deadline for the sake of an author's chain length is making the whole thing more serious than it needs to be.

It's amazing to realize that DROLSKY has put at least one release on CPAN every month for 162 months (13½ years!) and counting. But even if he was playing the CPAN once-a-month game, I don't think he should think twice before taking a month-long vacation from CPAN if he wants one. He definitely deserves it!

Actually, one of the ideas Neil and I share about those dashboards is that the more leaderboards we have, the more games we have, the harder it's going to be for anyone to compete in all categories. I'd actually love to have CPAN games that are in direct contradiction: to perform great at one of the games means you will perform poorly at another. So you, as a CPAN author, would have to pick your battles.

Remember: it's just games. They are designed to encourage a certain type of CPAN behaviour (for those interested in playing) and the one important, unwritten, rule of all those games is to make CPAN better. That's the end goal, and the only one that really matters.

]]>
Commented on search.cpan.org in Jamestag:blogs.perl.org,2014:/users/james//133.6108#14007822014-06-10T15:28:35ZBooK
I've seen this happen a few times, and I still get the same feeling that the metacpan fans are out to kill search.cpan.org.
Can't the two engines live peacefully in parallel? Or maybe it's the "King of the Hill" syndrome?