Plinking Away Part the Second

In my last post I identified three MooseX modules that might help me out and end the perhaps some tedious typing and bring a more structure design into my ADD game. The first of this is MooseX::Abstract::Factory.

Despite its name it does not actually create 'Abstract' classes in the sense of a class that cannot be instantiated like a 'Java Abstract Class'. I guess what they mean is a 'Factory that is Abstract' i.e. not tied to any one class or name-space.

Renaming Perl client for Elasticsearch

Dear Perl'ers

I need your help to choose a new name for the official Perl client for Elasticsearch.

Read more here: http://www.elasticsearch.org/blog/renaming-perl-client/

Planet Moose - February 2014

Welcome to Planet Moose, a brief write up on what's been happening in the world of Moose in the past month, for the benefit of those of you who don't have their eyes permanently glued to the #moose IRC channel, or the MetaCPAN recent uploads page.

If you'd like to contribute some news for next month's issue, you can do so on the wiki.

Moose

There have been a couple of minor releases of Moose this month (2.1203 and 2.1204) aimed at squelching a bug exposed by a recent update to Module::Runtime. (See Ovid's blog post on the issue.)

Perl and Me, Part 12: The End of the Beginning

This is part 12 of an ongoing series where I explore my relationship with Perl.  You may wish to begin at the beginning.

This week we look at how to start putting it all together.

Last week I talked about the trade-offs of DWIM, and wondered if it might be time to try to make sense of all the various parts and perspectives.  Thus, this is the end of the beginning.1  This is the convergence of all my reminiscences.

Still Plinking Away, Part the First

So of you might remember this post some weeks ago where I came up with a huge org-chart of all the different roles they I thought i would need for may AD&D characters.

Well I was just now getting into the actual instantiation of characters and having them do something well I ran into a number of differing choices that I sort of discussed here on this post. I found that the visitor pattern worked very well for character creation (that one is almost all wrapped up) now that I am getting to the other side of the game I have t0 make a choice of which design or pattern to use.

The CPAN new dist a month contest

Inspired by Chris Madsen's once a week, every week contest, and the monthly new distribution challenge 2014 quest on Questhub, I've created the CPAN new dist a month, every month contest. Release a new CPAN dist each month. How many months can you keep that up for?

This is a mashup of ideas from BOOK, KENTNL, and myself. Which is funny, since KENTNL turned out to be the current leader.

blogs.perl.org users being phished

I've received a number of 'Verify the email address associated with your Apple ID' emails in the past week targeted at phishing my Apple ID. Upon further examination, the list of email addresses in the to: line (yeah these guys are slick!) corresponds to a subset of the email addressed stolen when blogs.perl.org was hacked.

So if you have an apple ID and a blogs.perl.org account, watch out for these phishing attempts.

My Favourite Test::* Modules

If you don't test your code, what makes you think it works?!

Here are some of my favourite modules for testing Perl code.

One Moose, Many Mooses, or is that Mise?

Now that I am getting into the game play part of AD&D I am finding there are more and more times where I want to keep a record of some attribute not just a running total.

For example after a successful encounter experience for monsters killed or defeated (making them run away is defeating them) and the value of all treasure taken in gold peices is summed and then split evenly across all party members, including henchmen and friendly NPC, who actively engaged in the encounter as Expreriance Points or EP for short.

Well a running tally for each player is needed, as well player always like to look back and see how bad ass they are so a history of encounters is needed, as well players like to know how many monsters they whacked in an encounter and of course the list goes on.

Finding my computer

A couple of days ago I replaced my computer at work with a new one. This morning, working from home, when I tried to log in, it didn't respond.

I realized promptly that I had forgotten to ask the sys admin to update the MAC address on the DHCP server and so it just got some random IP from the pool.

Stupid Lucene Tricks: Storing Non-Documents

Lucene's search capabilities are so powerful that it is tempting to store more than documents -- and that is OK. Here are some hints to make storing non-documents easier:

Const::Exporter Released

A few days ago, I released Const::Exporter to CPAN.

Basically, it's a module that allows you to define a module with exportable constants that:

  • can be read-only scalars, arrays, or hashes (as well as the standard constant functions);
  • can refer to each other;
  • can be grouped into export tags, and added to multiple tags without repeating the value;
  • and easily interspersed with POD describing the constants.

A more detailed discussion of it is on my blog here.

Well More Little Helpers

Had a power outage for most of the day today so just a short post carrying on from where my last post left off.

Again I figured I might as well add in a second function into my little mod this one parses a directory listing (very badly) and then prints out the English for it

I do not usually have much of a problem with file entries but I figure some people might be worse at it than me so here goes.

So I exposed 'parse_file_listing' in my mod and here is a sample

New module Path::Iterator::Rule::RT

I use Request Tracker (RT) all the time for work and home projects. What this means is I am left with ticket litter--lots of directories with names like test, examples, ETL, Proof of Concepts, foo, bar, baz, x. It all adds up to lots of ticket litter. Now I have a ticket for everything I do. (More on that later.)

That left me with a new problem. I had directories full of ticket numbers. It became overwhelming, and I needed a solution.

And so was born Path::Iterator::Rule::RT.

Using two packages from CPAN this was easy work.
Path::Iterator::Rule
RT::Client::REST

Path::Iterator::Rule is extendable with custom rule subroutines. Using this with RT::Client::REST made it very easy to add RT ticket information into a rule to select directories.

Here are some examples using Path::Iterator::Rule::RT.

# This will print all tickets in the directory that have resolved tickets.

Moose Dying With "Invalid version format (version required)"

I'm putting this here in case anyone else sees this or hits a search engine looking for the problem.

This morning I had to restart my iMac thanks to the lovely security hole Apple patched and my default perlbrew was set to version 5.18.1, though I was developing in 5.18.2. I ran a test and immediately had the following mysterious error:

Invalid version format (version required) at ... /5.18.1/Module/Runtime.pm line 386.

The fix is both simple and complicated.

Significant newlines? Or semicolons?

[ Cross-posted by invitation, from its home on the Ocean of Awareness blog. ]

Should statements have explicit terminators, like the semicolon of Perl and the C language? Or should they avoid the clutter, and separate statements by giving whitespace syntactic significance and a real effect on the semantics, as is done in Python and Javascript?

Actually we don't have to go either way. As an example, let's look at some BNF-ish DSL. It defines a small calculator. At first glance, it looks as if this language has taken the significant-whitespace route -- there certainly are no explicit statement terminators.

I Was so Impressed I Wrote More Code

I guess I was inspired by by Bradley Andersen's little perl mod 'ParseCron' do a little code writing in the same vain.

Like I mentioned in my last post there many aspects of sys-adm that boggle my little mind and on of the chief ones is how 'chmod' converts a slew of 3 digits into unix style file permissions.

I get the rwx or - part on the files system that is easy enough. It is how 756 does its majik that addles my brain. I know it is just a sum that add to 7 for full access and 0 for none but I never could remember much more than that. So I came up with this little mod (early days yet but might make it to CPAN in a few days)

It is called ParseCHMOD and you can find the first cut here not much to look at and just something I have thrown together in the lats half hour our so but a start.

So here is a sample run

GitPrep 1.5 is released - Improve HTTP repository access, and display README in subdirectory

I released GitPrep 1.5 at 2013/10/09. 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.

GitPrep (Document and Repository)

Features added in 1.5 are:

- Improve HTTP repository access
- display README in subdirectory

1.4 contain bug that repository access(push and pull) via http, but It is improved in 1.5. Even If the repository is big, you can do push and clone. and README.md(or README) in subdirectory is displayed.

Let's use usufully.

Example

You can try GitPrep example.

GitPrep Example

Download

Download

Document

GitPrep Document and Repositry

Seeking code to find a free TCP/IP port

I know some modules search for a free port during testing, but I can't think of any specific one ATM. Any suggestions?

Bugs in the compiler

After I posted my previous blog entry a couple of things were pointed out to me, to do with my fourth point about ignoring warnings.

It turns out that unreachable code doesn't necessarily produce warnings from Apple-ish compilers like I expected it to. It turns out that in gcc the -Wunreachable-code option doesn't do anything. It's only there because it used to do something but that functionality was removed because it didn't work very well. In Clang, -Wunreachable-code is functional, but isn't enabled under -Wall. All apparently doesn't mean all in Clang-land.

I consider both of these to be compiler bugs.

All the other points I made still hold though, especially the most important one about unit testing and code coverage in tests.

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.