Well I left off in my last post with having 2 of the 3 tests I created failed;
ok 10210 - Got _status eq 200 from result
ok 10211 - Call S3->RestoreObject from t/10_responses/s3-restore-object.3.response
not ok 10212 - Got request_id eq 195AF4042CD6DF80 from result
# Failed test 'Got request_id eq 195AF4042CD6DF80 from result'
# at t/10_responses.t line 136.
# got: 'AC65B3BF8AC3AA34'
# expected: '195AF4042CD6DF80'
not ok 10213 - Got message eq Object restore is already in progress from result
# Failed test 'Got message eq Object restore is already in progress from result'
# at t/10_responses.t line 136.
# got: 'Conflict'
# expected: 'Object restore is already in progress'
ok 10214 - Got code eq 409 from result
10213 was easy to fix I just had to change the test value in the test file 's3-restore-object.3.response.test.yml'
Write a script to find the intersection of two straight lines. The coordinates of the two lines should be provided as command line parameter.
I vaguely remember we did the general form of the equation of a straight line at secondary school. The formula itself is pretty simple:
Ax + By + C = 0
Now, clearly, if we have two straight lines A1, B1, C1 and A2, B2, C2, their intersection are the x and y such that A1x + B1y + C = A2x + B2y + C2. From the general formula we know that
x = (-B1y - C1) / A1
It takes a bit of pen and paper work to find out that
Write a script to find the intersection of two straight lines. The co-ordinates of the two lines should be provided as command line parameter. For example:
The two ends of Line 1 are represented as co-ordinates (a,b) and (c,d).
The two ends of Line 2 are represented as co-ordinates (p,q) and (r,s).
The script should print the co-ordinates of point of intersection of the above two lines.
Now things are going good so far but I have run into a little snag with the program that is using my S3 RestoreObject code with Paws. Namely at this point my end user is trying to make the same restore request before the first restore has finished.
Right now if I capture the error with an eval {} in my call I get in the @$ is 'Conflict';
The API documentation does state that I can get as few special errors that are interesting to me;
The London Perl Workshop is a free event and we’re very grateful to our sponsors for making this possible. We would like to thank the following four awesome companies for their support of LPW2019 as our Silver Sponsors! Sign up for free to LPW2019 here.
Adestra
Here at Adestra we empower our clients to maximize marketing ROI through email-driven technology. Our flexible account structure, obsession with customer success, and award-winning service have gained the trust of global and growing brands alike. We’re proud to say we treat our people well: from excellent opportunities for career development to a positive, collaborative culture and great company perks, our global offices are a fantastic place to work at any stage of your career. As our client base continues to grow, we’re looking for talented individuals who share our values to come and grow their careers with us. With opportunities in the UK, Australia, and North America, now is an exciting time to join Adestra and become part of our global success.
Hacktoberfest 2019 is going to be the first event since the launch of the Perl Weekly Challenge. Dave Cross recently suggested doing Perl Weekly Challenge in the month of October would be enough to earn specially designed T-shirt from Digital Ocean.
I must confess, it didn't cross my mind. Thanks Dave Cross for the suggestions. Taking the cue from Dave Cross, I decided to blog about and share few tips.
not ok 10207 - Exception accessing status: Can't locate object method "status"
via package "Paws::S3::RestoreObjectOutput" at t/lib/Paws/Crawler.pm line 19.
I think I am going to fix that but first I will as a general question up on the Paws website to get a little advice in case I am going down a rabbit hole.
While I am waiting for a response this is a good opportunity to have a look at why test driven development is fun.
Right now I have that failing test and I would like to make it pass, but first, let's create the second test for the '202' case.
In Paws test when we are writing more than one test for the same call we add in a sequential number in the test name and data so it will keep the same order when the test cases are run.
Create a script that accepts two strings, let’s call them “stones” and “jewels”. It should print the count of “letters” from the string “stones” found in the string “jewels”. For example, if your stones is “chancellor” and “jewels” is “chocolate”, then the script should print 8. To keep it simple, only A-Z, a-z characters are acceptable. Also, make the comparison case sensitive.
The most important thing is to realise that we only want to consider unique characters in the “stones”. My initial idea was for each character of the “stones” to count how many times it appears in the “jewels”. Remember that the global matching operator m//g returns the number of matches in list context.
Let’s call the subroutine with two names parameters, stones and jewels, each of them containing a string.
We’re kicking off our trailers for LPW 2019 with two talks that will improve the code you write!
Dave Cross will be talking about Measuring the Quality of your Perl Code. As Dave says, we'd all like to write "better" code, but how do you know what "better" means, and how do you know how well your current code scores on whatever scale you choose? His talk on the same topic was standing room only at TPC in Riga this year, so be sure to come along to learn about possible measures for the quality of your code and ways to incorporate these into your development process.
A spell of hacking around with Unicode got me wondering which version
of Unicode shipped with which version of Perl. Here's what I came
up with:
Perl version
Unicode version
5.7.3
3.1.1
5.8.0
3.2.0
5.8.1
4.0.0
5.8.4
4.0.1
5.8.7
4.1.0
5.8.9
5.1.0
5.9.4
4.1.0
5.9.5
5.0.0
5.10.1
5.1.0
5.11.3
5.2.0
5.13.7
6.0.0
5.15.8
6.1.0
5.17.1
6.2.0
5.19.5
6.3.0
5.21.1
7.0.0
5.23.0
8.0.0
5.25.3
9.0.0
5.27.2
10.0.0
5.29.2
11.0.0
5.29.9
12.0.0
5.29.10
12.1.0
This table is in order by Perl version (obviously), and lists every
time the Unicode version changed as Perl version increased. Unicode
version does not increase monotonically with Perl version because
Unicode 5.1.0 was retrofitted to Perl 5.8.9, which was actually released
after 5.10.0.
The Unicode version numbers come from file
lib/unicore/version under the top-level directory in each
distribution, where it has been since Perl 5.7.3.
Well I left off from my last post doing a little update to the documentation of Paws which introduced the basic layout and concept of botocore json data and it use in auto-generating code. In today's post I am going to look at an equally important part of auto-generated code and that is testing said code.
Paws has a massive test suite which is nice and good the only problem I have with it is it is 100% static data driven.
What this means you are testing against canned expected results, or as we say in the testing world
nugas quae in nugas quae sunt
or in other words you are not really testing anything you are just testing a test.
Lets look at a typical Paws test, the tests for S3 DeleteObject
It consists of two Yaml files the 'test';
In writing my past few blog entries I’ve repeatedly come across a situation that Raku doesn’t handle as well as I could wish. It’s a little thing, but like so many other little things
its presence is a source of minor but persistent irritation.
In my previous entry
I used some Raku code that illustrates the point perfectly.
I needed to build an object for every value in the @values array, or a single
special object if @values was empty:
Spoiler Alert: This weekly challenge deadline is due in several days from now (September 22, 2019). This blog post offers some solutions to this challenge. Please don't read on if you intend to complete the challenge on your own, which you're strongly encouraged to do.
Challenge # 1: Common Letters Count
Create a script that accepts two strings, let us call it, “stones” and “jewels”. It should print the count of “alphabet” from the string “stones” found in the string “jewels”. For example, if your stones is “chancellor” and “jewels” is “chocolate”, then the script should print “8”. To keep it simple, only A-Z,a-z characters are acceptable. Also make the comparison case sensitive.
We're given two strings and need to find out how many characters of the second string can be found in the first string.
I left off on my last post with a little patch to do. To recap I successfully restored an S3 file that was on 'Glacier' back into 'S3' with the Paws::S3 RestoreObject command.
There was one little point and that was in the AWS S3 API documents I found this
Having missed the last Tech Meet because of fasting during the month of Ramadan, I made every attempt to attend the 3rd Tech Meet of the year. Not only that but I decided to give a short talk on "Perl Weekly Challenge", an improved and updated version of lightning talk that I gave earlier at The Perl Conference in Riga.
Generate a longest sequence of the following “English Pokemon” names where each name starts with the last letter of previous name.
I’m not sure whether the term “sequence” has a unique and generally accepted definition. For example, does it have to contain each element just once? If not, the longest sequence might be
If we want each element to appear just once in the sequence, we are in the graph theory and we search for the longest simple path. For a general graph, this is an NP-hard problem, but fortunately, our input is small enough to be solved in reasonable time.
We can implement a brute-force search (i.e. trying all the possible sequences) recursively. The recursive steps takes the sequence constructed so far and tries to extend it by all the possible next steps, calling itself to extend each of them further.
Selfies demonstrate one of the principal laws of physics, psychosocial development of teenagers and programming. The act of observation alters that which is being observed. It becomes more complicated if the observer is observing itself. As the observer changes, so might future observations particularly if the tool being used is known to impact the parameter that is being measured; rapidly one loses hope that any meaningful data will be obtained from such a direction of development. Sounds gibberish? Look at the collection of "duckfaces" on your teenage daughter's phone (if she ever lets you near it) and I am sure you will find no resemblance of those images to anyone you would recognise as your offspring.