What is in The End?


Not Perl related, but I suspect some folks may appreciate this.
Today after a nasty mistake on the command line involving find and rm, I discovered that I deleted a number of files I didn't mean to delete, including some hidden files. Oops! I opened my Time Machine backup, only to discover that it doesn't show hidden files. However, it turns out that you can use that to show hidden files so long as your main system shows hidden files. I'm using OS X Mavericks, so I dropped the following bash script into my bin folder and named it togglehidden. Running this from the command line will toggle showing hidden files in the Finder on or off.
Hi!
Today I'd like to show you my testing setup which involves database testing. Hopefully it can help someone out or maybe someone could suggest me better ways of doing things.
First of all, having all the tests in the root of the 't/' directory got too messy, so I'm using mostly the same directory structure in my 't/' directory, as I have in my 'lib/' directory for the ease of navigation. Let's say this is the 'lib/' tree:
- lib/
- MyApp.pm
- MyApp/
- MyModule.pm
then my 't/' directory would have the following layout:
- t/
- MyApp/
- 0001-MyApp_first_test.t
- 0002-MyApp_second_test.t
- MyModule/
- 0001-MyModule_first_test.t
- 0002-MyModule_second_test.t
My starting problem is easy. Coming from Project Euler:
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
Perl 5:
Well looks like old fiend smartypants was up to her old tricks again.
You know the type, spends the day at work in some IRC, never forgets the minutia of page 67 of the help file of a sys-admin command, has memorized and and has a better version every regex ever written, knows she is always right and in the bosses eyes can never make a poor choice when designing code.
Anyway let's get on with the code example. Sometimes the ugly way to do
things is the best. In this case processing a large array where lets say the following has to be extracted,
Simple enough really. But then I saw the code (changed to protect the guilty and save space)
Timm Murray will be giving a talk on using Perl on a Raspberry Pi to control an Arduino to make drones and robots.
[From my blog.]
I officially join Fruit Protectors R Us:
This challenge is a stencil quest on questhub: in each calendar month of 2014 you have to release a distribution that you haven't released before, and write a blog post about it. This might be an entirely new distribution, one that you've adopted, or one that you're helping with. The rules so far are:
Come and join us!
So I though it would be just a regular day until with me just doing a little coding, drinking my coffee* and generally enjoying life, But I was wrong.
A Little Vulnerable
So I have been babysitting and ever so slowly migrating a 15+ year old application over to a more manageable and of course we have to keep doing improvements to the code so on a very old part I found something like this. (SQL changed to protect the innocent)
my $usr_ids = join(",",@user_sel);
my $sth = $h->prepare("Select * from a_table where id in ($usr_ids)");
$sth->execute();
Params? We an't got no params. We don't need no stinking params!!
Well the old bug-bear of little Bobby Tables or SQL injection shows it ugly little head again.
But what to do? There is no bind_array, well lets just give 'execute_array' a try
my $sth = $h->prepare("Select * from a_table where id in (?)");
my $tuples = $sth->execute_array(
{ ArrayTupleStatus => \my @tuple_status },
@user_sel,
);
ora_st_execute_array(): SELECT statement not supported for array operation.
Ouch so no luck there!
I blame Jeff Thalhammer. He is the one who directed me to The ChangeLog, and that's where I've heard the interview with Katrina Owen, the creator of Exercism.io.
Lately, I’ve been pondering my relationship with Perl. Every programmer has a different relationship with their language-of-choice, and it impacts how they approach many different aspects of coding, what features they like and which ones they hate, what they clamor for and what they disparage. And these choices are always going to be challenged by our friends, our coworkers, and our open-source collaborators. Which is a good thing, for the most part: being challenged is what keeps us honest, keeps us fresh. Without constant challenge, we can lapse into dogma and cargo cult coding. But we can’t properly defend our positions—can’t explain why we feel the way we do about certain things—unless we take the time to understand our relationship with our language.
So this is part 1 of an X-part series (we’ll just have to see how long it takes me to work through it all). Primarily I want to explore this for my own self-awareness, but I hope it will be interesting to others as well. And perhaps it will make some of my other blog posts make sense.
I begin at the beginning: how I came to Perl.
At the patch -p1 Perl hackathon, I'm working on bits related to my idea for a new sort of CPAN client. One of the features I want is a graphical display of the work to do and the work being done.
Creating the data structure in Perl is easy. Start with a module, figure out it's distribution, then grab that META.{json|yml} to get dependencies (for now, with more discovery later). Put that stuff into a data structure.
In an odd turn of fate as I was just about to write today's post. I got this email announcing the release of DBI 1.6.31, normally this causes me little concern as DBI has been stable for a very very long time, but given yesterdays Part 18 and this line in the change file
Changed the handle passed to Callbacks from being an 'inner' handle to being an 'outer' handle.
I though maybe I should look at this change?
Are You an Innie or Outie
I'll start by giving the 25 cent tour of inner and outer handles. DBI has been using Tied Hashes since time immemorial, and all handles in DBI are references to tied hashes so you never really get a $dbh or $sth object just a reference to it.
Hello, folks. This blog was started to talk about a project of Jess and mine, but before we got around to starting it, I posted a couple of times in my own blog about it, so please read these if you’re interested:
Future entries will hopefully be collected on this blog, at least until we pick a name for the project. (So far, I’ve come up with learnthing and {mechano,electro,cyber}didact, all of which kind of suck.)
Thanks,
-=- James "theorbtwo" Mastros
Recently, Packt published a book called Debian 7: System Administration Best Practices.
Some time before they had emailed me asking if I would be a reviewer. I know some readers have in the past been disappointed with Packt's books, and thought that since I had time I might be able to contribute enough suggestions to help make the book better. I explained that I am a Perl programmer, not a Debian administrator, and on that understanding we agreed.
I was not told the name of the author, and from his point of view I would have been one of the anonymous reviewers.
During reviews, I made many suggestions. I have received a paper copy of the book, but have not counted how many were adopted. I did check a couple of chapters, and see a few were, and some (a clear majority :-) weren't. The number doesn't matter - what matters of course is the resultant book.
In this post, I’d like to talk about what’s different between this project and other similar things I’ve seen. I haven’t seen everything (by a long shot), and I certainly would love to see more prior art posts — I’ve now at least glanced at all the ones mentioned in the comments to the last post, though it’s been a while since I looked at the Kahn Academy, and that’s probably the closest to what I’ve got in mind.
In part 17 we had a look at DBD:Pg's ability to do Asynchronous Queries, now I think it is time I got a little back in line with the spec so we are going to look at DBI's ability to do callbacks.
How it happened that Mastro Cherry,
Callbacks are common attribute to all three of the the DBI handles and with them you can be come if you want the great and all powerful puppet master of DBI contorting everything from A to Z. Myself I have really only used them for one of two reasons, either as a quick and dirty logging system as a secondary way to control access.
Using them is quite straightforward one just set the 'Callbacks' attribute of the desired handle, to a hash ref where the keys are the methods you want to set a callback for and the values are the code you want to run.
At this point, I don't have a Perl blog. I do Perl things, but nothing that ever seems worth blogging about. However, I've decided to improve my knowledge of Perl 5i and Perl 6, and generally practice my proramming, so I'm going to work through a bunch of easy through to difficult problems in each language. Hopefully I'll pick up the idiomatic solution ideas as I go along.
Feedback and alternate solutions are also welcome.
At some point I may repeat the problems with Python, but not yet.
Problem sets I'm planning on starting with include:
The latter two are language-targetted, but I believe that I should be able to gain some benefit from some of them anyway. Suggestions for other problem sets are welcome, but this is certainly enough to get me started.
Was doing automation test, trying to set up passwordless ssh between the dirver and couple of test nodes. it just didn't work with one rhel5 box. Finally find the solution:
[root@perlrh5-179 .ssh]# tail -n 10 /var/log/secure
Dec 4 12:39:56 perlrh5-179 sshd[9397]: Authentication refused: bad ownership or modes for directory /root
Dec 4 12:39:59 perlrh5-179 sshd[9398]: Connection closed by 10.200.58.179
...
log shows the issue was the permission of the root dir
drwxrwxr-x 20 root root 4096 Nov 25 10:08 root
change it to 700 and the issue was resolved.
So, one of the great projects that have been rattling around in my head for some time has recently come back into the front burner of my brain again: computer-assisted learning. Jess has more or less been constantly thinking of this for the last decade+, from a rather different viewpoint — the writing of documentation and tutorials, especially around DBIx::Class and Catalyst. I think my current ideas are worthy of implementation, and I think that without building an active community around them, the project will falter, and that’d be a shame. So, enough of the past / prologue for the moment…
The basic idea goes like this: first, ask questions to determine what the student does and does not know.
Then, point them at something to read or watch, which requires only things that they do know, and will teach
them things that they do not know. Now, since that basic idea is a bit … vague, a more detailed, and less
formal English sketch of the system will follow.
blogs.perl.org is a common blogging platform for the Perl community. Written in Perl with a graphic design donated by Six Apart, Ltd.