2011.08.03 in #2
Ovid is loving 5.14
With a small example Ovid is showing several new features of Perl 5.14. The actual explanations by Hercynium are in the comments.
2011.08.09 in #3
Binary search versus hash lookup - benchmarking
As usual Ovid makes and excellent post with an excellent code example. He is comparing binary search of sorted data vs creating a lookup table and using it. The numbers speak for themself. Or do they?
2011.08.27 in #5
Determining my daughter's age
A simple example using the Datetime module written by Ovid.
2011.10.07 in #11
Querying ElasticSearch from VIM
It is a bit unclear to me why did Ovid give this title while it seems the interesting part of his blog entry was the Perl script that highlights the character where a json file has a syntax error. The funny thing is that the Perl Weekly is based on a JSON file and I am writing it in Padre. So I already wanted to write a plugin to do syntax checking of JSON files. Now I can just take what Ovid wrote.
2011.12.24 in #22
Beginning Perl - Sneak Peek
Ovid shows how he is explaining recursive subroutines in his new book.
2011.12.29 in #23
A regex for my book
Ovid showed us a horrific regex that he is going to include in his new book. First he got some comments on Facebook and then blogged about it with a modified version of the same thing.
2011.12.30 in #23
Syntax Highlighting Perl Debugger on github
It seems Ovid does not spend enough time on his book, blogging and moving from Amsterdam to Paris so he wrote color highlighting for the built-in debugger of Perl.
2012.02.09 in #29
Unicode and Passwords
Do you allow strange characters in the username field? What about the password field? Don't have people enough problem typing with Caps-lock on by mistake? Check some of the issues with Unicode and passwords as Curtis (Ovid) Poe thinks about them.
2012.03.02 in #32
perlfind - perldoc on steroids
This wheel has been reinvented so many times already, but for some reason none of them became widely accepted. I'd really like to see this take off as it can make our life a lot easier. This one is from Ovid.
2012.03.31 in #36
Major DB::Color update (Perl QA Hackathon)
Ovid improved DB::Color that allows you to have color while using the built-in debugger of Perl. He also discovered some bugs in Syntax::Highlight::Engine::Kate that I maintain. As it was in the SVN repository of Padre I quickly converted it to Github and Ovid already pushed some regression tests. It would be nice if some good soul took a look at that module as I probably won't have much time for it.
2012.04.12 in #38
Explaining Web Programming via Plack
Should Ovid introduce only PSGI in his book or should it also include Dancer and Catalyst?
2012.06.14 in #47
Read Beginner Perl by Ovid online for free
Ovid mentiones that his new, not-yet-published book is now available free of charge for on-line readers. Go read it while it is available.
2012.07.19 in #52
Integrating perlcritic and vim
2012.08.24 in #57
Slides for my YAPC::Europe 2012 Keynote
From Ovid who wants you to understand what Agile means. Also known as POP: People - Organization - Process.
2012.08.27 in #58
2012.09.26 in #62
Beginning Perl (Wrox) is now released
Ovid is announcing the availability of his Perl book. As he writes: If you're interested in Perl but worried about the title, the book actually takes you all the way through OO programming and even has introductory sections on Catalyst, DBIx::Class, Plack, and other tools. It's fairly comprehensive.
2012.10.14 in #64
Mojolicious: an unexpected result
The original article by Ovid in which he suggests that companies using the Mojolicious (with its no-CPAN-dependency policy) tend to be avoid using CPAN and tend to reinvent the rest of the wheels themselves. As I can tell, Ovid does not say which is the cause and which is the result.
2012.12.07 in #72
Finding Duplicate Code in Perl
One of the biggest problem I encounter when starting to clean up legacy code, is locating and eliminating duplicate code. For a long time I planned to write something to find them, but I never felt up to the task. I am glad Ovid started to work on this. I think this will be extremely useful in a lot of places.
2012.12.19 in #74
Test::Class + Moose?
Ovid has started to build a module for testing applications using Moose.
2012.12.26 in #75
Refactoring When Tests Are Failing
What happens when your co-worker left the code in a broken state and he is gone for 2 weeks during the holidays? how do you avoid the constant nagging of the failing tests, and how do you make sure you don't get used to them saying 'Oh we expect those to fail...'. As usual Ovid comes with an interesting solution, though I think I'd stick to TODO block + big red sticker on co-workers screen.
2013.01.05 in #76
How to write a test description
Too often, peeps eschew test descriptions in TAP suites. Ovid explains why this is sub-optimal, and how those descriptions can be leveraged to make tests as self-documenting as possible.
2013.01.29 in #80
Test::Class::Moose on the CPAN
A new contender in the JUnit-type testing arena. This one is from Ovid, and throws Moose goodness in the mix.
2013.02.18 in #82
Red-Black Trees in Perl 6 Explained
Ovid took the solution from Rosetta Code and first explained what Red-Black Trees are and how they can be implemented in Perl 6.
2013.02.20 in #83
A follow up on three-value logic in Perl
Do you like to upset your boss? Neither do I. Apparently Ovid wants avoid that too. So how do you compare undef with a number in a way that it won't mean 0?
2013.03.15 in #86
Discoverable tests and creating testing standards
You have so many tests associated with your perl code that it's becoming a problem to wade through it in search of a specific testcase? Oh, how do I envy you. But still, Ovid proposes a standard (with heplful vim scripts) to make things as neat and as organized as possible.
2013.03.17 in #86
Using Roles with Test::Class::Moose
Just like Moose can tremendously simplify your OO classes, Test:::Class::Moose can do wonders for your test suites. Ovid shows us how it can leverage inheritance and roles to great advantages.
2013.03.22 in #87
Better reporting for your test suite
For Test::Class::Moose users...
2013.04.12 in #90
How to be agile without testing
For a developer, it's all bugs. Well, it ain't, Ovid points out: there is bugs, and then there is unforeseen behaviors. And while the first group is almost always bad news, the second group can be... surprising.
2013.04.21 in #91
When Must You Test Your Code?
Ovid continues his thoughts on the balance between the need for 'well tested code' and 'useful code'. In other settings people say 'making more money for the business is the only important thing', but what are the limits? Ovid uses the expressions 'do no harm' and 'mitigate harm' and 'ethical choice'. Where do you stand? Where does the company you work for stands?
2013.05.06 in #94
Tags now available with Test::Class::Moose
There is now a way to attach meta-data to your test suite, and then based on that meta data select which test you'd like to run.
2013.05.19 in #95
Cleaning up the Test::Class::Moose base class
A new version of Test::Class::Moose is out. Ovid walks us through the new, cleaner class-to-test-file interface it provides.
2013.05.30 in #97
If there's a shortage of programmers, why aren't wages up?
Peoples bemoans that good programmers are hard to find, yet our wages aren't going through the roof. What's up with that? Ovid looks at the various factors that are in play in the equation.
2013.06.05 in #98
A Test::Class Anti-Pattern
You have test fixtures that you need to run in a certain order. So you name them 'aaa_first()', 'bbb_second()', right? Wrong! That's a classic anti-pattern, and Ovid shows us how to deal with ordering fictures in a much more elegant way.
2013.06.19 in #100
Being nice to colleagues with git pre-commit hooks
The article is about test code, but this could apply to regular code as well. How many times have you added print statements or other 'debugging code' to your application? And how many times have you forgotten to remove it before committing to Git? You can avoid it using pre-commit hooks.
2013.07.03 in #102
Encapsulating Responsibility in Methods
Ovid explains how Object Oriented programming can hide complexities. If you follow the pattern he outlines, you will see the number of parameters you need to pass shrinking. Which is always a good thing.
2013.07.13 in #103
The grep test - my personal experience
The grep test basically means that you should be able to grep for any meaningful string in your code base to find out the usage of those keywords. This sounds like a very reasonable approach and a good way to explain it, but what would you do if you had a piece of code where you get the name of a method passed to you and you call that method using the variable name? How can the name of that method grepped?
2013.07.24 in #105
How to fake a database design
You've heard of database normalization, but ain't too sure of what it's truly about? Ovid provides us here with a handy introduction to that core concept of (sane) database design.
2013.07.29 in #106
Perl Startups: Recollect.net
Ovid continues his weekly interviews with Perl-based start-up companies. This week it was with Luke Closs, the CTO of recollect.net.
2013.08.12 in #108
You are in a forest ...
Remember those good ol' text games of yore? Ovid does too, and he wrote a Perl engine to run those vintage adventures.
2013.09.03 in #111
Test::Class::Moose introductory video
For most cases, Test::More is all you need. But sometimes, just sometimes, you have to get the big guns. Ovid presents here one of those high caliber solutions.
2013.09.04 in #111
Using git-bisect to track down warnings in your test suite
Sleuthing for when a bug appeared is no fun. Fortunately, 'git bisect' can help to zero in quickly on where things went South. Ovid here shares a few tricks to use this tool efficiently.
2013.09.26 in #114
Building your own Moose
Moose by itself is already scrumptious, but most of us top it with MooseX:: extras to make it even better. In this article, Ovid shows how to shave on the boilerplate that the import of all those extra modules require.
2013.10.14 in #117
The Problem With Perl Testing
The Perl testing culture. Is it good? You betcha. Is it perfect? Not even remotely close. Ovid brings up this laundry list of the typical sins we commit in our test suites, and how we can, and should improve on it.
2013.10.18 in #117
Fighting a 30-year-old software bug
Halloween is approaching, and in that spirit Ovid shares with us the terrifying tale of how he battled an ancient evil, born of an Age all but forgotten.
2013.11.08 in #120
A Tiny Code Quiz
Think you know Perl? Ovid has an itsy bitzy little quiz for you...
2013.11.17 in #121
Porting Test::Class to the p5-mop
Ovid has reimplemented Test::Class::Moose as Test::Class::MOP
2013.11.17 in #121
Context and the Comma Operator
Apparently I missed the Tiny Code Quiz Ovid posted last week, but now chromatic took upon the task to try to explain the seemingly (?) unexpected behavior of perl.
2013.11.19 in #122
Test::Class::MOP now has an 'is testcase' trait
Ovid continues his work on the perl5-mop based port of Test::Class.
2013.11.30 in #123
Why Are Fast Tests Important?
Great story by Ovid about the BBC, and why reducing the test run-time can increase the productivity of your team.
2013.12.12 in #125
Single process versus parallel tests
Ovid discusses the advantages of running tests in parallel - which are quite obvious (you get home earlier) - or maybe it isn't? He also describes his work on Test::Class, and Test::Class::Moose to make parallel processing a possibility there too.
2013.12.26 in #127
Merry Christmas! Parallel testing with Test::Class::Moose has arrived
If you were looking for a Christmas present, here is one from Ovid. He says he can make your test 24 times faster. Or, at least, the one he had was made so much faster. Oh, and he is using Parallel::ForkManager. Luckily, I just fixed a stupid bug there that I introduced a while ago.
2013.12.26 in #127
Profile Your Tests (One Test Class Per File)
chromatic agrees with 90% of what Ovid write in a different article but does not tell us the 10% he disagrees with. But then he goes on explaining why he thinks using Test::Class was probably a good choice in their case. If you write tests, and I really hope you do, then it is worth reading these articles and thinking about the implications.
2014.01.08 in #129
Why I Didn't Submit A Patch
It's a harsh reality, but it stands to reason: for your project to get contributions, you have to reduce the hoops the wannabe contributors has to jump through to as close as zero as possible. That can mean, amongst other things and for better or worse, having your project using the VCS and/or hosting site that is the de-facto standard in your community. Ovid explains how, in his case, that made the difference between investing time into pushing a patch, or not.
2014.01.12 in #129
Major Test::Class::Moose Update
A new version of Ovid's Test::Class::Moose is out. Parallel testing is now supported, along some other nice goodies.
2014.01.14 in #130
Ditching A Language
Ovid explains why replacing the programming language and rewriting your whole application might not solve all your problems after all, and how much can it cost you. Maybe your job?
2014.01.18 in #130
Testing Random Dice Rolls
Ovid shows how to check if the dice you are rolling (with your computer program) are cheating, or if the randomization works correctly.
2014.01.20 in #131
Test Suite Organization
Ovid explains why mirroring the class-structure of your module in the tests as well is a good idea, and also gives some tips how to go about doing it.
2014.02.06 in #133
Making our training material public
Curtis 'Ovid' Poe, who runs the company called 'All Around the World' with his wife, has released some of their test-training materials under the Creative Commons by-nc license.
2014.02.10 in #134
Using DBIx::Class::Schema::Loader to find design flaws
DBIx::Class is a pretty useful piece of software. Ovid, however, takes it one step further and leverages its mechanisms to help in the design and sanity-check of database schemas.
2014.02.16 in #134
Easy Fixtures With DBIx::Class
Testing with databases is typically hard and messy. Yet, sanity might shines at the end of the tunnel: Ovid has a new way to manage those unruly fixtures.
2014.02.21 in #135
Use DBIx-Class via delegation instead of inheritance
2014.02.24 in #136
Easier Database Fixtures
Ovid improved DBIx::Class::EasyFixture eliminating half the lines you had to write for setting up some data in a database for testing.
2014.03.13 in #138
Perl::QA Hackathon in Lyon - Day 1
2014.03.14 in #138
Perl::QA Hackathon in Lyon - Day 2
2014.03.15 in #138
Perl::QA Hackathon in Lyon - Day 3
2014.03.16 in #138
Perl::QA Hackathon in Lyon - Day 4
2014.04.06 in #141
Custom DBIx::Class ResultSets
DBIx::Class's resultset classes are often slim, logic-less affairs. But Ovid shows us here how they can also be used to create a much smarter interaction with the database.
2014.04.08 in #142
Why Companies Turn Me Down For Contracts
The story telling capabilities of Ovid are clearly good. In this article, he explains how searching for the next contract takes away time he could spend on writing open source code, and how you could help by getting your employer to hire him.
2014.04.10 in #142
The Hidden Benefit of Data-Driven Programming
2014.05.07 in #146
Using Perl on Red Hat's OpenShift Cloud
Ovid explains how to use this Platform as a Service (PaaS) system to avoid the need to handle sysadmin tasks while building a web application.
2014.05.16 in #147
Automatic variable highlighting in vim
If Vim is your editor of choice, you have to see this new utility Ovid brilliantly stole and adapted for our Perlish needs.
2014.05.19 in #147
Curtis 'Ovid' Poe
Ovid is a long-standing member of the Perl community. He blogs, wrote books, and did amazing work for the Perl testing toolchain (he's amongst things responsible for Test::Class::Moose). Outside the Perl sphere, he also maintains a second blog providing tips and pointers to expat workers.
2014.06.10 in #151
Sick of being mocked by unit tests
Ovid has used to much mocking and it hurt. The bottom line: don't overdo it. He also embedded an excellent video, a conversation between Martin Fowler, Kent Beck and David Heinemeier Hansson.
2014.07.04 in #154
Making git bisect more useful
When hunting down the moment a bug has been introduced in a codebase, 'git bisect' is a blessing. Ovid reminds us here that the labeling of the different commits as 'good' or 'bad' can be automated, making the search for the commit where all went wrong all the faster.
2014.07.05 in #154
Procedural Quest Generation in Perl
For his MMORPG game, Ovid needs to generate quests. He shows us how that can be fairly easily achieved with a little bit of code.
2014.07.11 in #155
Finding unused variables in your Template stash
Ovid offers us the first draft of a cruft-busting tool that aims to detect variables that are pushed to the templates but never used.
2014.08.12 in #160
Creating an MMORPG in Perl
Ovid discusses at a high-level the challenges and intricacies that goes in writing a MMORPG.
2014.08.13 in #160
Quickly Check for Database Design Flaws
Database schemas are hard to get right. Ovid tries to help us along the way, and shares a quick checks that is likely to make some of its flaws come out of the woodwork.
2014.08.27 in #162
Try rakudobrew and play with concurrency
Apparently, Ovid got excited by recent improvement in Rakudo, tried it and even wrote about it. Moore's law is coming to an end. Easy-ish threading is the solution.
2014.09.18 in #165
Understanding Behavior Driven Development
Ovid, who knows quite a bit about testing and Agile software development has just started to like BDD and Cucumber. He shows what is a good and a bad 'story' and how the good 'story' can be easily expressed in Test::Cukes, the Perl implementation of Cucumber.
2014.10.10 in #177
The Moose::Role Required "attributes" Bug
Annoyed that you have to punt 'with' statements at the very bottom of class declarations? Read on, as Ovid has a workaround for that.
2014.10.24 in #170
What Do Managerless Companies Look Like?
Ovid posted a link to the video of his opening keynote from YAPC::EU this year, also on YouTube.
2014.10.30 in #171
Veure Update: Missions
Veure is an MMORPG created by Curis 'Ovid' Poe in Perl with some nice images.
2014.12.04 in #176
Using Roles as Partial Classes
Curtis Poe describes how roles can be treated as partial classes, a concept in some languages, where a class can be split into multiple files. A bit like roles, you might be thinking.
2014.12.04 in #176
Pretty-printing multiple arrays
Curtis Poe posted a small programming challenge, and a bunch of people gave their solutions (in the comments, gists, etc).
2014.12.17 in #178
ZipRecruiter Wants You
ZipRecruiter is a job board startup based in California, and they're looking for Perl developers. A few people you might have heard of already work / contract there, and they allow remote work.
2015.01.07 in #181
Can you provide an x/y Point class in other languages?
Ovid needs you! He's crafting a Perl 6 presentation, and as a comparative exercise, he needs to have implementations of the classic Point class written in different languages.
2015.01.26 in #184
Perl 6 for mere mortals
Ovid shared the slides for his FOSDEM talk ahead of time.
2015.02.04 in #185
A little thing to love about Perl 6 (and COBOL)
The article shows the result of the following expression: 1/(.1 + .2 - .3) and why is not what you expect.
2015.02.22 in #187
Avoid a Common Software Bug By Using Perl 6
Curtis shows how Perl 6's gradual typing can prevent certain types of bugs in your code. He throws some other Perl 6 titbits in as well.
2015.03.05 in #189
Perl 6 for Mere Mortals - FOSDEM Video
The video from Curtis's talk at FOSDEM just over a month ago. Videos from some of the Perl talks are available, but not all of them have complete audio, alas.
2015.03.19 in #191
DBIx::Class::Report - generate ad-hoc dbic classes from SQL
Wouldn't it be nice if we could just take a chunk of arbitrary SQL and get a resultset from it? - Ovid asks and responds to himself with the release of DBIx::Class::Report. But when would you need it?
2015.03.21 in #191
Tiny Games with Perl 6
Rolling unicode dice with Perl 6.
2015.05.11 in #199
Veure: Arbitrary Mission Actions
Ovid continues his series about the game, code-named Veure, that he's developing.
2015.07.13 in #208
Testing your sqitch changes
Sqitch is a is tool (written in Perl) to manage changes in databases. Of course it is not perfect, but some of its flaws can be avoided, or at least detected by a simple test script Ovid shares with us.
2015.09.05 in #215
Dave Cross and Modern PERL
Following Dave's YAPC::EU lightning talk, Ovid shares some real-life code he saw in the wild. Warning: the code you're about to see may makes you groan, sigh, or heartfully head-desk.
2015.09.14 in #217
Ovid talks about past turning points in the history of Perl, and the one approaching, when Perl 6 is released. He argues that we should see this as an opportunity to promote both Perl 5 and Perl 6, and the community. For example, perl.com could really do with a facelift before the big day. Duration: 55 minutes
2015.09.15 in #217
Fluent interfaces in Perl 6
This started as a short post about Ovid adding a Perl 6 example to the wikipedia page on fluent interfaces. But it became a discussion (in the comments) on what fluent interfaces are all about.
2015.09.18 in #217
Improved DBIx::Class usage with arbitrary SQL
Ovid's DBIx::Class::Report module makes it easy to run ad-hoc SQL queries in your DBIx::Class code, and now he's added the capability to define additional methods on each result.
2015.10.14 in #221
Divas Need Not Apply
A rant by Ovid on how some Perl programmers cannot communicate properly. Not even when it is about finding a new job. Though it is unclear if he refers to some of the people in the active Perl community or other people who 'just' use Perl.
2015.11.21 in #226
Improved Syntax Highlighting in the Debugger
If you do enough testing then you won't need much debugging, but if you do, you might want to see that in color.
2015.12.04 in #228
The Veure MMORPG Saga Continues
Ovid teases us with can be described as a tantalizing textual trailer to his upcoming space MMORPG, Veure.
2016.01.06 in #234
Get off my lawn
This tweet from Ovid kicked off a number of discussons, blog posts, tweet storms, and an eye roll from Aristotle.
2016.01.22 in #235
A Naïve SQL Shell
Indeed. A very limited reimplementation of DBI::Shell.
2016.03.15 in #243
Perl is not dead: It was early web novices that gave it a bad name
Curtis keeps beating on his "battle-tested" drum, that he introduced at least year's YAPC::EU. Perl may not be hip, but it's doing just fine, thankyouverymuch.
2016.03.16 in #243
Perl 6 — Why People Are So Excited
A video of Curtis's talk at FOSDEM earlier this year. The audio for the first 3 minutes is sadly borked, but stick with it.
2016.04.08 in #246
Private Moose Attributes
Curtis shows how they've been creating private Moose attributes in a project he's working on, and in the comments other people have shared how they do it.
2016.04.11 in #247
Perl 6, the Game of Thrones of Programming Languages
In which Ovid points to his article and wonders if the awful title was worth it?
2016.04.18 in #248
Veure's Test Suite
In case you are interested how Ovid is actually writing and running tests.
2016.05.04 in #250
Why I try to avoid Perl's punctuation variables
A discussion on the classic theme of "things you can do but probably shouldn't unless you really, really like mobs, torches and pitchforks."
2016.05.19 in #252
Ovid takes us through some of the database-related decisions they've made while working on their Veure game.
2016.08.30 in #267
Announcing Veure at The Perl Conference
At YAPC::EU, Ovid officially announced the game that we've been hearing about as Veure. It has been launched as Tau Station.
2016.10.25 in #275
Tau Station Updates
2016.11.04 in #276
Seeing the SQL in DBIx::Class
Ovid found it hard to find out what SQL was being run by DBIx::Class, and showed how he does it. In the comments you'll see that there's an easier, but perhaps hard to discover in the documentation, way to do it.
2016.11.20 in #278
Easily clean up a team's remote git branches
Ovid wrote a blog post about how he cleaned up git branches for his project Tau Station
2017.01.18 in #287
I hope to see you at FOSDEM in Brussels
2017.03.23 in #296
Saving your test suite history
Test::Class::Moose::History helps you know which tests have failed on master and when? Which tests are fragile and which are robust?
2017.03.27 in #297
Using the Perl debugger with DBIx::Class
Ovid shares his tips for using the Perl debugger with DBIx::Class.
2017.04.06 in #298
Better SQL tracing with DBIx::Class
When you write some code and then the other developer shows you the switch to turn on the same thing in the existing solution. Or maybe not exactly.
2017.06.13 in #308
Writing Declarative Perl
Learn a little about declarative code as a way to model complex object actions (speaking at TPC:US 2017!)
2017.07.03 in #311
Why /\d/ is rarely what you want
A gentle reminder about digits...
2017.07.20 in #313
What is a "Senior Developer"?
Curtis presents his thoughts on what makes a developer a Senior developer.
2017.12.07 in #333
Why I wrote Keyword::DEVELOPMENT
2017.12.25 in #336
Merry Christmas from Tau Station!
Now with an invitation to the Closed Alpha!
2018.04.18 in #352
Tau Station is now live!
It's a free-to-play post-apocalyptic interstellar MMORPG that runs in a browser, tablet, or mobile. The backend is written in Perl.
2018.07.24 in #366
The Future of Perl 5
Ovid discussing the features that he expects in future Perl 5.
2018.10.13 in #377
Tau Station--A Narrative MMORPG Written in Perl
2019.03.29 in #401
Enforcing Simple Standards with One Module
How long is the boilerplate use-statements at the beginning of each one of your files? How many time do you need to make changes to it? What if there was a better solution than copy-paste?
2019.04.08 in #403
Atomic Updates with DBIx::Class
So how can you handle bank account movements using Perl so that neither your client nor the bank loses money?
2019.04.18 in #404
Fixing MVC in Web Applications
Curtis shares the common mistakes by the developers implementing MVC in Web Applications. In the end, he shows the better implmentation of MVC. Highly Recommended.
2019.05.06 in #407
Renaming modules from the command line
Renaming a file in git is easy. Renaming a module is always a pain as you need to change the name of the file. The name of the 'package' inside. Every place where it is used in every other file. Including the tests. You also need to update the documentation. Here is a script that will do it for you. All that without using the word 'refactoring' even once.
2019.05.17 in #408
The Worst Job Offer
Curtis talks about how the Perl role not adequately being paid.
If you are not yet subscribed, you can do it now. Free of charge:
Just ONE e-mail each Monday. Easy to unsubscribe. No spam. Your e-mail address is safe.
This newsletter is about the Perl Programming languages.