At the beginning of the year I've sent out a call for authors. It took us a while, but I am happy to report that there are already 3 guest-post from 3 different authors.
Marpa for building parsers - a first look by Peter Jaquiery aka GrandFather on PerlMonks
How to install Perl modules on FreeBSD by Steve Dickinson
Benchmark: Refactoring MD5 calculation in Rex by Ferenc Erki, one of the core developers of Rex
I don't link directly to the articles as they are only available to Perl Maven Pro subscribers, but you can find them in the archive together with other 700+ articles.
Later, after a few month, these article will be made available to the general public free of charge.
If you would like to contribute to this growing body of knowledge about Perl while earning some money, then please get in touch with me via e-mail.
If you'd like to support the effort by giving money then subscribe to the Perl Maven Pro. The more subscribers there are, the more articles and authors I can pay for.
I released GitPrep 1.12. You can install portable GitHub system into Unix / Linux easily. It is second major release.
Because you can install GitPrep into your own server, you can create users and repositories without limit. You can use GitPrep freely because GitPrep is free software. You can also install GitPrep into shared rental server.
The thing that hath been, it is that which shall be; and that which is done is that which shall be done: and there is no new thing under the sun.
Is there any thing whereof it may be said, See, this is new? it hath been already of old time, which was before us.
(Ecclesiastes 1:9,10)
Outthentic is a tool for rapid plugin developments. When I say "plugin" I mean a little utility to solve a specific task.
Having a risk to reinvent the wheel, from time to time I still start to create some useful stuff, at least useful from my point of view ...
Disk usage monitoring
This little plugin does what is stated at the header:
checks disk space in partition by partition basis
alerts in case of shortage
a threshold parameter could be set and equal 80 default, which means before 80 percentage of disk usage we are ok.
It's halfway to CPAN Day 2016, so I'm going to be celebrating it as a mini-CPAN Day and using it as an opportunity to get some small releases out that otherwise might not justify a release on their own, like updating the distribution tooling or making documentation tweaks.
Thanks to our first grant from The Perl Foundation, we have released the first partial draft of the new book Learning RPerl, available on either CPAN or directly on the RPerl website:
Please take a moment to click the following link and leave a comment, this counts as your vote for RPerl to receive the next round of funding from The Perl Foundation:
Outthentic - is language to parse unstructured text.
It was grown as supporter for web application test tool named swat.
Web application is where text often comes in unstructured and unordered way, even though there is json and
xml, there are a lot of applications when it is not the case.
Then a generic test tool named outthentic was created
as solution for any text parsing/testing tasks. This tool is based on outthentic dsl as well.
Creation a new consumers of outthentic language is way too easy, with API exposed and explained at
outthentic documentation.
What I try to do in this short post is to highlight some randomly picked features to let readers to have a sense what is
outthentic way to analyze and verify text output, which of course could be used wide in daily testing tasks.
If ( after reading this post ) you feel like to know more - an official outthentic documentation is here
and ( less formal ) - here
Ever since I wrote Git::Repository, I've paid attention to supporting as many Git versions as possible.
This is possible because it is a really thin wrapper around Git, that expects
only a few sub-commands to exist. Therefore the burden of making sure the Git they're using supports all the features they need is put on the user (the various version comparison methods are meant help working that out).
Part 2 of my Regular Expressions to Grammars tutorial is now up at The Perl Fisher. The previous part covered the basic metacharacters, this fills out the set and demonstrates how to use regular expressions inside Perl 6 code.
I'm going to talk about that which I know very little, but looking at the Perl6 Module Directory, I see a namespace that's already storing up pain. Why are there so many modules in the top level namespace that make no sense for a language that has designs on world domination? I can believe that in the early days of development there's an intoxicating freedom to give your module a snappy name, but didn't we learn these lessons 20 years ago? What happened to Noun::Adjective::Adjective as the guiding principle?
If you're determined to re-invent the wheel, at least try to invent a better one. - Camel Book, 2nd ed. p277. footnote on False Impatience.
I've always admired Python's way of serving local files by simply doing:
$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
And I've been wondering if there's a way to achieve the same in Perl without requiring lots of dependencies from CPAN. This morning I just came out with this:
$ perl -Mojo -E 'a->static->paths(["."]);a->start' daemon
Server available at http://127.0.0.1:3000
It shows the file content, though it doesn't show the directory listing.
I think of text, grammars that parse the text, and the syntax trees (data) generated by a parser as a triangle. Most of the time in computerland, people doing something with this triangle are interested in converting a text into a tree using a parser.
Every once in a while I need to write a parser. My first serious parser was in the late 90's, for a radio station that needed each week to convert a large plain-text weekly email to tables of venues and shows. For that, I used a version of Bison (yacc) that allowed me to write actions in Perl.
These days, I'm excited to get my hands dirty in Perl6 grammars. Writing a correct parser is never easy, so a clean, well-thought-out "featureful" parser language means less effort spent on fighting the tool, more on attacking the problem.
We're happy to announce that the 9th annual Perl QA Hackathon (QAH) will be held in Rugby in the United Kingdom. The event will run from Thursday 21st April to Sunday 24th April.
The QAH is a face-to-face gathering of the lead developers who work on the Perl toolchain that all Perl programmers rely on and build upon. The first QAH was held in Norway, in 2008, and so far it's always been in Europe. The QAH provides dedicated time over 4 days to work on the critical systems and tools, with all the right people in the same place.
B::C has now better support for copy-on-write (COW) strings with about 6%
memory savings for 5.20 and 5.22.
The perl5.18 implementation for COW strings is totally broken as it
uses the COW REFCNT field within the string. You cannot ever come to a
true successful copy-on-write COW scheme. You cannot put the string
into the .rodata segment as with static const char* pv = "foo"; it
needs to be outlined as static char* pv = "foo\000\001";. The byte
behind the NUL delimiter is used as REFCNT byte, which prohibits its
use in multi-threading or embedded scenarios. In cperl I'm was working
on moving this counter to an extra field, but the 2 authors made it
impossible to write it in a maintainable way. I could easily seperate
the refcnt flag but I couldn't make it COW yet.
This is a module I wrote a while back, but I never announced. I am pretty happy with how this came out, so here's the announcement. Some JAPHs might be disappointed to learn that one feature of Perl 5 that did not make it to 6 is globbing. That is, doing something like this:
for my $file (glob "src/core/*.pm") { say $file }
With just Perl 6, you need to do something like this instead:
for "src/core".IO.dir(:test(/ .* ".pm" $/)) -> $file { say ~$file }
That's not too terrible, but I still miss the simplicity of globs. In that case, I can use IO::Glob:
use IO::Glob;
for glob("src/core/*.pm") -> $file { say ~$file }
That does the same thing as the Perl 5 code, more or less.
But, that's not all. I always wished that globs could be used for pattern matching. Sometimes, just matching a string against a glob is handy, but Perl 5's globs are narrow minded. IO::Glob is not:
use IO::Glob;
for <abc acc acdc>.grep(glob('ac*')) { .say }