This post is focused on packaging distribution modules using "setuptools" and publish them onto PyPI. To better understand these concepts we will clarify the concept of module and, since most of the people use the term "package" in place of either "import package" and "distribution package", we will also clarify the term "package" too to avoid confusion. In addition to that, we will highlight the differences, pros and cons of source, binary and wheel distribution packages. All of this taking care of "styling" things so that they can easily be used within a Continuous Integration environment.
When it comes to talk about scripting, we cannot avoid talking about the probably most famous of the shells: the Bourne Again SHell. Thoroughly explaining it would require a whole book, so as usual in this post we explore only the features that it’s theory likely the reader should learn. The post is not intended to be easily understood by new-bies: it is structured as a cheat sheet, so the reader can use it as a quick reference when needed, but this approach has the drawback that there’s not much room to elaborate things enough.
This is the first of a set of three posts aimed at showing how to create a full featured Python3 project: since the topic is quite massive, I decided to split it into three different posts. In this post we do not only quickly see how to develop a full featured Python application, since I wanted to do something that shows a lot of things, such as:
- creating Python objects
- put the custom Python objects inside a Python package within the scope of our own namespace
- develop accordingly to encapsulation rules, by implementing getters and setters methods that look like regular attributes by exploiting decorators
- use the standard Python logging facility, configuring everything with an external settings file
- altering the __eq__ comparison so to consider two objects as equal when one of their attribute has the same value
- implementing comparison methods and the __iter__ method, so to be able to use Python standard functions such as sorted() to sort it also in reverse order
- exploit total_ordering to make an object fully sortable
The next parts of this post will be on the following topics
- the second one is about delivering the object as a Python package
- the third and last post Packaging a Python Wheel as RPM is about how to pack this project into two RPM packages, also seeing how to digitally sign these RPM packages, and in general how to set up an RPM development environment, with a good overview on how to exploit the RPM building tools
Skilled professionals nowadays, besides being skilled on technical matters, are supposed to know how to operate according to the principles of modern product management methodologies such as Agile and Lean. The traditional waterfall approach of gathering all the requirements, design everything as a whole, develop everything and test everything before deploying has been superseded since it cannot bear the demand of a quick time to the market of modern times: it is very likely that the delivery comes too late, when the service is no-more needed. The aim of this post is to explain what you should know about Agile and Lean methodologies so as to operate into teams that use them.
When it comes to guarantee data confidentiality on the wire or on the disk we cannot be exempt to know how to use cryptography: this post provides a quick guide of both symmetric and asymmetric cryptography along with an overview of their bricks: RSA and DSA keys, Elliptic Curves keys, PGP Keys, Message Digest, HMAC, digital signature and encipherment. The aim is to provide the necessary terms and concepts to understand how to operate with cryptographic tools, providing examples with openssl.
Don’t be tempted to skip this post: you would miss something valuable. Of course most of us know how to operate a filesystem, but the underlying details of POSIX filesystems are not broadly known by most of the people. In this post I describe them quite accurately, trying to keep at a level that may intrigue, but avoiding to be too theoretical. Having such an expertise is certainly one of the things that make the difference from a technician and a skilled professional. In addition to that, this skill may really save your life when facing weird things that sometimes may arise.