Back in 2001 I was working for a company who had a client who was in a serious bind: the maker of their point of sale (POS) system suddenly jacked up the license fee to the point where our client would go out of business. They needed a new POS in 21 days.
We grabbed an open source POS system and identified all of the features it was missing that our client would need. Then it was 21 days of overtime and no days off. Back in the days of use.perl.org, I blogged about this hell almost every day. It was also, interestingly, the first project I wrote software tests for. The other main dev on the project was teaching me how Perl's testing tools worked and as the days went on, I found myself incredibly proud of seeing all of those tests pass and catching bugs I would not have otherwise caught.
I'm about to release an update to CGI.pm that will strip out all of the AUTOLOAD and deferred compile optimization. I'm reasonably confident that this will have no impact other than adding a few tens of milliseconds to the startup time for any scripts using CGI.pm. Of note is that CGI::Pretty will now be deprecated, along with the -complile pragma and ->compile method. If you are using the -any pragma and have arbitrary tags (or typo's) in your code then your code *is* likely to break.
This optimization was added twenty years ago, it has little to no benefit now and makes the code difficult to deal with as well as falsifying test coverage metrics. It needs to go. Given the legacy sprawl of CGI.pm there may be bugs lurking; if you're using CGI.pm please test this release. The DEV release is available on CPAN:
I am thinking about adding this to the grants operation rules:
If the grant does not finish within three times of the proposed
duration or within two years, the grant will be considered a failure.
First of all, it should be noted that it won't affect most grants (see the reason 2).
Reason 1: Budget structure & allocation to new grants
TPF does not allow over-allocation of the budget. If we have 3 x $3,000 grants running and our budget is $9,000, no more grants can be funded.
If a grant worth $3,000 is running for five years, this $3,000 is stuck in the TPF safe. Even if we get good proposal, we cannot fund it using this money.
The aim is to increase liquidity of the fund.
Reason 2: If a grant runs more than a year, chance of failure increases
During 2009-2013, we managed 17 grants. Here is the breakdown:
In the second round of the Pull Request Challenge, I was assigned Olson::Abbreviations. At work, we've been bitten by the ambiguity of the EST timezone, so I liked the general idea of the module. Moreover, there were some test failures reported at CPAN Testers Reports, so the task was clear: Make all the tests pass!
One hears that __PACKAGE__->meta->make_immutable is a must all your Moose classes. ( edit, ht ribusushi: never immutate your moo classes, it'll inflate them into Moose classes automatically thus defeating the point). Here's a stark reminder of why.
I was doing some benchmarks on a web application that I've been moving from mod_perl to plack. Here's the performance of 350 requests forking off in batches of 7 before I remembered to make_immutable:
$ time perl 002-hammer_lightly.t
# Total number of requests = 350
real 1m11.095s
user 0m3.003s
sys 0m1.336s
It is very frustrating when there is a conference you want to attend and you can't get any information about it. It is even more frustrating when you are a conference organizer receiving complaints about no news despite all your efforts to keep people informed. Here is a guide to finding out what's going on inside YAPC.
Starting with the official channels:
The first and foremost way to find out what's happening with YAPC is yapcna.org. The home page of the conference site contains a news banner that will take you to recent announcements. It also has a list of links to places you might want to subscribe to receive information.
I needed a simple system to monitor events. I wanted to have a system where
I can specify that object with some name is 'ok' or 'fail'. And I wanted the
system to be able to expire statuses. In case there is no data for the
object for a long time then the status should be automaticly changed to
'unknown' — to handle situations when script that sends data breaks.
I looked for several systems, but none suited me well, so I've written
my own very simple solution with the name 'curry' (it is named after
delicious indian dish, not after Haskell Curry =)
The system is a web server that is powered by Dancer
and the system is bundled into an image with Docker.
I really like this way of creating web apps with Dancer & Docker. Every time
there is a new commit in git report Docker Hub automatically builds new
image.
I just wrote about a program I crafted some time ago... in Perl. Happy reading if you're interested into producing smarter tarballs! The article is here.
I was just alerted by haveibeenpwned.com that my email address was leaked, and the link given was this: https://www.quickleak.org/QtPly6aE. "Islamic Cyber Resistance Hacked blogs.perl.org to Show Support Syrian People And SEA". I can't say I follow their logic, but there's a database dump there.
DFW.pm challenged its members with the following exercise:
Pivot a multi-row/multi-column table, 4X4 in size for example, containing name-value pairs. Code should account for larger table sizes with any number of name-value pairs. Numbering the pairs is optional but encouraged for readability. An example would be as follows:
This is a short look at some modules for generating combinations and permutations. There are likely more modules that aren't listed. RosettaCode has examples of writing the combinations and permutations functions by hand.
Groggy and disoriented, I blearily type the conference line and enter my
passcode, followed by the pound or hash sign. At the tone, I would be the 6th
person to enter the conference. Tone.
As I mentioned in my last blog post it would be really great if we were to get into the Google Summer of Code for 2015. We had an extremely succesful 2014 and being a part of this event again would be good for the community and for Perl.
However to do that we need a stack of ideas of projects, modlues or code for the students to look at and then choose. We need mentors to volunteer and we need people looking for students. We have a week to really flesh out the ideas page.
Currently the ideas are on a wiki and you need to contact myself or Paul Johnson to be added as an editor. However if that seems to onerous, you can just add them to this Google Doc which has been set to freely edit.
So I need your help, I need people with ideas or plans to help improve Perl, a Perl project or library, a documentation project, or build a whole website for a project, tackle some fun features. Which means I need you.
Originally founded as GFU Cyrus + Rölke mbH in 1980, GFU Cyrus AG is now one of the best-known IT training companies in Germany.
Several thousand IT specialists from all over the Federal Republic of Germany visit seminars at GFU every year. The program includes more than 1000 different seminars.
We're happy to announce that STRATO has decided to sponsor this year's QA Hackathon.
If you live in certain parts of Europe then you will probably have heard of STRATO, but others might not. STRATO is an ISO 27001-certified hosting provider with its headquarters in Germany. STRATO offers domains, email and homepage packages, online storage, web shops and servers through to high-end solutions.
This evening at Sydney-PM, Nick Urbanik gave an excellent presentation about his work at a large well known Australian Internet provider, in automatically blocking malicious DNS requests in Bind based resolution servers.
His method uses Perl, Inotify and Bind.
If you have customers or external IP's making requests generating huge amounts of SERVFAIL's - his work will discover and block these requests which seem to simply waste CPU time on servers.
He has detailed his work and published his code at his personal website
Maybe you know the feeling… you go to add an option to that method or subroutine and… cue Jaws theme
sub update_shopping_cart {my $cart_id =shift;my $item =shift;my $quantity =shift;
Argh. You don’t want your legacy code to break but you also don’t want to add a fourth unnamed parameter to the existing problem. And the solution is simple: