Grant Street Group is a Software as a Service pioneer. In 1997, our company hosted the world’s first online bond auction for the City of Pittsburgh, Pennsylvania. Since this first auction, over 3,100 clients have used our software to process financial transactions exceeding $11 trillion.
Today, Grant Street Group is a growing company providing Software as a Service in fields such as electronic payments, auctions, and tax collection. Our customers include banks, financial companies, and state and local governments.
Are you a Perl expert? Do you prefer programming at home instead of getting interrupted at the office?
Do you want to tackle challenging software engineering problems in a well established and fast growing company?
Do you want to work with talented and smart developers? Build elegant and scalable solutions for large applications? Meet the challenges of deadlines while still delighting customers? Then you’d enjoy working at Grant Street Group and we’d like to hear from you.
This is a module I wrote a few weeks ago and intended to share sooner for feedback, suggestions and guidance.
The module was born out of my discovery that although there’s PSGI support in recent versions of Catalyst the session’s are discrete entities. As I was experimenting with mounting multiple PSGI apps, pretending to be one, I didn’t want to have to manage multiple sessions, or worst still, keep multiple session configurations in sync.
The initial release, documented below, does work in the cases that are relevant to me. I’m concerned that I’ve abused some methods or taken some bad design choices to solve the problem as I percieve it. I’m worried that there are sharp edges and stupid bugs in places I simply haven’t considered yet.
I’m always happy to receive feedback, constructive criticism and patches on my modules and I’d really like to get some feedback, better solutions and tests so that I feel more comfortable dropping the experimental warning in the future.
Yes lichtkind moves around the continent. Dates are 16-18 Aug in Riga, 8-9 Okt Turin, 19-21 Okt Frankfurt and 4-5 Nov in Vienna and Bratislava. Which stands out for me is that I will have given then at least 11 talks (4 different) + 3 lighting (always the same) spanning 5 1/4 hours. I really wanted know where are my limits and how far my skills in talk preparation go.
And as a surprise I found, start very early with you preparation. I mean by that that you can still hack together your slides or storyline quickly together. that is fine. But start you research, your search for sources, quotes and knowledge very early. that doesn't work well under time preassure. As soon you found something worthwhile, write it down. Organize your knowledge: loosely but searchable. having something so say that fits the situation with the attendees and recent discussion is the most important thing i believe. you have to live with the topic for a time and see it from different angles. talk with people about it. no matter how good you are, theres always something to learn even its just what others interests about that subject.
btw, same is true about writing docs, but wait, ... that is the content of one of the talks. later ... :)
It eliminates method polymorphism.
Makes it simple for over-riding inherited method, as there is only one method.
Now that makes Liskov Substituion simpler to implement.
I've just released a new module called iTransact::Lite. It's just a simple wrapper around the iTransact XML Connect payment gateway web service.
It does all the hard work of signing, serializing, and submitting your requests to their web service. However, I call it "Lite" because it doesn't do any document formatting or response handling. Therefore it still requires knowledge of the web service documents. Luckily, those are well documented on iTransact's web site.
If you're looking for a new payment provider, you could do worse than iTransact, and with this module, you have fairly easy access to the service. This module is in use in The Game Crafter and our forthcoming Mob Rater service.
As many of you know, tied variables lend extra magic to an otherwise normal Perl variable.
One of my favorites comes from File::chdir. This provides your Perl script with $CWD and @CWD. When a folder is assigned to $CWD or pushed onto @CWD the working directory is changed, in a platform independent way. The coolest thing about this is if you first local $CWD, then this change in the working directory is done locally to the block, and is undone as the scope ends.
I just released version 0.03 of Tie::Array::CSV. This module allows accessing a CSV file (or other separator parsable by Text::CSV), using a Perl array.
Underneath the hood there is more tie magic! Tie::Array::CSV uses Tie::File which provides random line access to a file as a Perl array. Using this module in mine allows the module to pick the row just like my users will, as an array index.
Version 0.03 adds a new constructor. So that the users don’t even need to be aware of the tie usage, which looks a little strange at first.
As far as I am aware, other languages don’t have anything like tie. Just one more reason to love Perl! Which other Tie classes do you find especially interesting?
I’ve been using a config file ($HOME/.perldb) for some time now. While it’s not the biggest file in the world it automates settings that I’m far too lazy to type every time I fire the beast up.
As I was trying to buy my flight ticket to the London Perl Workshop I thought I look around if there is some other interesting event on the days before or after. Quickly I landed on Eventbrite and found a couple of interesting talks at The RSA.
The only place where I saw the London Perl Workshop was the Lanyrd web site and there was only one other Perl event there.
So are we surprised people don't see us?
I don't know how big the impact could be but what if all the YAPC and Perl Workshop organizers started to post their events on these sites? Could that help in getting more attention?
What if each Perl Monger meeting was posted there?
What if someone implemented the modules to access the above web sites?
What if someone wrote a script that could be used by all the organizers to update the various event sites?
We’ve opened up the schedule for YAPC::NA 2012 so you can view the talks we approve as we approve them. In addition, we’ve opened up the wiki so you can start planning your BOFs and other activities.
Below are some of module ideas that I think will be useful someday, but since it's not urgent now, I'm sparing my tuits elsewhere. There will be future posts.
* A module to detect the software of a forum (e.g. vBulletin, phpBB3, etc) and provide some basic API that works for all supported software, e.g.to retrieve threads and posts, open a new topic, reply to a topic, mark topics read, etc.
* Likewise for blog software.
* A module to detect {Yahoo Messenger IDs, Blackberry PIN numbers, street addresses, other contacts} from a text. I have written one for Indonesian phone number, but the others might be useful to extract information from text.
Today, we had more talks than yesterday. Marc Chantreux talked about his module, 'Perlude', an interesting CPAN module porting some of Haskel's ideas to perl.
Gerhard Schwanz presenting Mapweaver was the next speaker, directly followed by Denis Banovic presenting the simplicity of Dancer. For me, this talk was the best of today.
Steffen Ulrich gave an excellent introduction into TLS and explained some recently happening issues and how they could occur.
As a replacement for an omitted talk, Heiner Kuhlmann presented a tool to display some software quality metric values graphically. Nice to see Perl-Critic in colored boxes :-)
Herbert Breunung talked about some features of Perl 6. Whenever I hear him talking, I wish Perl 6 was already production-ready. All the new features are really awesome!
The Ironman blogging contest was created to get more of the Perl mongers write about the stuff they are doing. To raise some awareness to new features of Perl, new CPAN modules or just to new ways of programming in Perl.
We also have blogs.perl.org now that provides an easy way for Perl programmers to start a blog. Right in the middle of the "echo chamber".
Having those blogs is a great way to distribute news about Perl but somehow it feels the number of readers has not grown much.
It is more or less the same "echo chamber".
We need to have a growing number of people reading the items.
Ricardo Signes will be giving a talk at YAPC::NA 2012 that he describes as:
There are almost twenty thousand lines of documentation describing what has changed since perl 5.8. Those docs are where you can find out that the // operator is awesome, or that the “r” flag on substitution is going to save you typing and bugs, or that you can stop worrying so much about your exception handling. Unfortunately, they also contain a lot of talk about things like GSVS_mg_SLOPPY or engine derecursivisation or what happens now if you try to reset a glob reference during global destruction. With most common Unix distributions now shipping Perl 5.12, and more and more workplaces moving off 5.8, many programmers are faced with reading these documents. Instead, you can come listen to the forty minute summary.
ActivePerl's Jan Dubois has kindly applied a patch to DBD-mysql 4.020 on their servers, so you can just do this:
Original post:
This a warning to Win32 perl devs using DBD-mysql.
The versions 4.019 and 4.020 are broken in a rather subtle way: All SQL errors are silently ignored and in fact not even triggered, no matter what RaiseError is set to or what kind of error happens. As an example, this code will run without a complaint:
Various messages have been sent to the maintainers of DBD-mysql, including a proposal for a fix. However, implementation of a fix and release of a new version will likely take some time.
In the meantime downgrading is the only viable option, but sadly the ppm client does not make that kind of thing very easy. As such, this is the command you will need to execute to downgrade your DBD-mysql:
Note that is compiled for Perl 5.12. By changing the Perl version part of the url you can also get it for 5.8 and 5.10. For 5.14 there is no ppm available though, so if you're using that you will have to downgrade your entire Perl or try your luck with the 5.12 one.
So as I previously announced, YAPC::Asia Tokyo 2011 is now over. Apparently we had more attendees in this single YAPC than all of North American Perl events combined for year 2011:
22:44 r: I just read that 672 attendees number on blogs.perl.
22:46 p: yeah that's easily 30% larger than all of the NA events combined.
22:49 r: yapc 244 + PPW 78 + frozen perl 46 + perl oasis 34 = 402 NA for 2011
As part of a recent project I was given an XSD file (xml schema definition) and asked to output compliant XML. CPAN to the rescue. I found XML::Compile::Schema which is a cool module that allowed me to do this with very little fuss. The documentation is really good but I think a tutorial-style post might be helpful.
To do this you’ll need to install XML::Compile and XML::LibXML.
You can use XML::Compile::Schema to read in your xsd file and output a perl hash template. Then you can use that example template to construct a hash of real data and then have XML::Compile::Schema output a valid XML file.
For this tutorial, download a sample .xsd file from here. Then write a perl script like so to dump a perl hash template.
Mike Friedman will be giving a talk at YAPC::NA 2012 that he describes as:
At SocialFlow, we initially built a simple job queue system using a relational database and a daemon for running workers. While this model is sufficient for a relatively small volume of jobs, an increase in scale resulted in problems with concurrency, failover, and efficiency. This presentation examines the process and design that we used to move our jobs system to the Redis structured data store, and the simultaneous development and design philosophy behind the Redis::Client CPAN module.
The presentation will cover the structure of job queues, an analysis of the pros and cons of relational vs. non-relational data-store models for queues, a brief introduction to the Redis platform, and code examples demonstrating a simplified system.
Today, the german perl workshop 2011 started. Today's keynote was done by Heiner Kuhlmann, who talked about software architectures and refactoring. The interesting point was the parallelism between data structures and software structure. All the time I was comparing his talk with Robert C. Martin's book "Clean Code" which mentioned refactoring a couple of times. The common denominator is that refactoring without intensive testing cannot be successful.
Renée Bäcker demonstrated the use of Role::Basic for non-Moose environments. Looks very useful.
Rolf Langsdorf talked about possibilities to extend Perl's syntax using syntactic sugar and function prototypes. He tries to avoid source-filters and parsers in order to avoid breakage of external tools.
Uwe Voelker talked about HTML5::Sanitizer, a module he wrote to clean uploaded HTML code.
Max Maischein demonstrated Web Scraping techniques using FireFox to allow scraping websites that depend on JavaScript.
A lot of people use MySQL, and these days, asynchronous-style programming has really taken off. If you're involved in both of these camps, you may be wondering
how to send a query to MySQL and have it inform your event loop when it's ready with the results of that query. A common solution is to use a thread or child process
for each connection, and exchange data using IPC. However, if you're using Perl and DBD-mysql 4.019 or better, you have an alternative: the new asynchronous interface.
Using the new async flag that you can provide to the prepare method, along with the new mysql_fd method, it's fairly easy to have MySQL play nice with AnyEvent.
Here's a simple example:
I don't think I've been seen since use Perl; went on indefinite hiatus. I am still programming Java for my day job, but still using Perl to make my life easier. A few months ago I did some investigation into Rose, and these days I am doing some investigation into Moose. DateTime::* modules also continue to hold fascination for me.
I will probably blog about my difficulties and interesting things I see. In the past I've often tended to post about things that don't work the way I would expect them to. I've sometimes been chastised for not filing bug reports, but I don't always want to file a bug report. Sometimes I just want to yak about it.