Python: Check whether a string is Palindrome or not

A palindrome is a sequence of characters which reads the same backward or forward.

For example dad, mom, kayak, a santa at nasa, anna. Not palindromes: mario, luigi, ice cream.

There is more than one way in python to check whether given string is palindrome or not. Let’s have a look.

Method 1

def is_palindrome():
    return my_str == my_str[::-1]

defiantly one of the shortest ways to do it.

[::-1] taking care of inverting the string and all is left is simply compare between the original to inverted string.

Method 2

Slower than the first method:

def is_palindrome():
    return my_str == ''.join(reversed(my_str))

Method 3

My least favorite but quite common (especially in other languages)

def is_palindrome():
    for i in xrange(0, len(my_str)/2):
        if my_str[i] != my_str[len(my_str)-i-1]:
            return False
    return True


Q: How can I handle case-sensitive palindrome?

A: you can use upper() when comparing the reversed and the original strings.

Linux: Ulimit And Maximum Number Of Open Files

Note: this is an old post from my previous blog


In this post, I’m going to show you how to raise the limit on the number of open files in your system. I assume in this post that you are using CentOS operating system.

List the limits

Apparently, CentOS has a default of 4096 number of open files limit. For some applications, this is simply not enough and you may want to raise this number.
You can check what is the current limit with the ulimit command Continue reading “Linux: Ulimit And Maximum Number Of Open Files”

Tests: How to convert Subnit stream to junitXML

Subunit is a streaming protocol for test results. It is a binary encoding generated while you are running tests. It is also widely used in the Openstack project.

Subunit comes with a lot of useful filters. Some of them are:

  • subunit2gtk
  • subunit2pyunit
  • tap2subunit

I will focus on subunit2junitxml which converts a Subunit stream into a junitXML representation. I recently had to use it for CI as the Jenkins plugin I’m using doesn’t support publishing tests results using pure subunit stream.

First let’s start with installing the needed packages.

For RHEL/CentOS/Fedora:

yum install -y subunit-filters python-junitxml

Now take your subunit stream ( if you don’t know where it is, look in “Q&A” section ) and run the following command:

cat my_subunit_stream | subunit2junitxml > tests_results.xml

This command will use the subunit filters to convert the stream into junitXML.

In order to verify it worked, read the file and see if it’s in the desired format.

You can also simply run:  grep “<testcase classname=”  tests_results.xml

If it didn’t work, you may need first to convert the stream into the newer protocol version 2.  In such case simply run:

cat my_subunit_stream | subunit-1to2 > my_subunit_stream_v2
cat my_subunit_stream_v2 | subunit2junitxml > tests_results.xml

That’s it. Now you have it in junitXML format and if you are using jenkins, you can also use it to publish your tests results.


Q: Where can I find the subunit stream files?

A: It may depend on how you run the tests. If you are using ‘tox’ you could find the files in .testrepository directory. The name of the files would be numbered. Those numbers are actually the tests run order. 1 for example, would be the second time you ran the tests.

Q: In jenkins, How do you publish tests results in Junit format?

A: I’ve installed the Junit plugin and in ‘Post-build Actions’ I’m using ‘Publish Junit test result report’