Updates from January, 2017 Toggle Comment Threads | Keyboard Shortcuts

  • penguin 10:52 on 2017-01-21 Permalink | Reply
    Tags: blog, code, wordpress   

    Syntax highlighting with wordpress 

    This is just a test for syntax highlighting. Which I really really really wanted to have. Even if it’s WordPress and not something cool like hugo.

    So, let’s try:

    import random
    class RndTest:
        def __init__(self):
            print("Oy! 'this is python!")
            self.rnd_seed = random.random()
        def do_nothing(cls, nothing):
            print("Doing {} now ;)".format(nothing))

    That doesn’t look so bad, right?

    How to do this

    • install the crayon syntax highlight plugin
    • when writing posts, your toolbar will have a new icon looking like this: <>
    • press it, and an “add code” dialog will open
    • do your thing
    • save
    • done



    • I don’t know which JS engine this thing uses (if any public one in particular)
    • I like highlight.js

    (So, none really)

    Alternative plugins (untested)

    To be honest, the only real contender in installation base and features seems to be Syntax Highlighter Evolved. I have not tried it, but if you don’t like crayon, that looks like the one to go.

  • penguin 14:45 on 2017-01-17 Permalink | Reply
    Tags: , , pycharm,   

    PyCharm, Arch linux & Python 3.6 

    Love Python. Love PyCharm. Love Arch Linux.

    Unfortunately Arch sneakily updated Python to 3.6. Cool, new version … but hey, why don’t my debug runs in PyCharm work any more??

    ImportError: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory

    Yup, pretty confusing. It seems unable to find shared python 3.5 library. Well. After some cursing, turns out the solution is pretty simple (if you know what to do):

    • get pyenv
    • use pyenv to install Python 3.5.2, but with –enable-shared option set
    • use this python version for PyCharm projects (it does not matter if it’s in a virtualenv or not)

    Like this:

    $ PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.5.2
    $ sudo $HOME/.pyenv/versions/3.5.2/bin/python "/opt/pycharm-professional/helpers/pydev/setup_cython.py" build_ext --inplace
    $ _

    That solved it for me 🙂

  • penguin 13:31 on 2017-01-12 Permalink | Reply
    Tags: , logging, ,   

    Logs with docker and logstash 

    It would be nice to have all container logs from a docker cluster sent to … let’s say, an ELK stack. Right?


    So we did:

    • on each host in the cluster, we use the GELF log driver to send all logs to a logstash instance
    • the logstash instance clones each request using type “ELK”
    • to the “ELK” clone, it adds the token for the external ELK service
    • the “ELK” clone goes out to the external ELK cluster
    • the original event goes to S3.

    Here’s how.

    (More …)

    • David Sanftenberg 09:30 on 2017-07-04 Permalink | Reply

      Multiline gelf filters are no longer supported in 5.x of Logstash it seems. I’m considering downgrading to 4.x for this, as we use a lot of microservices and many JSONs are logged simultaneously, really messing up our logs. Thanks for the writeup.

  • penguin 10:49 on 2017-01-09 Permalink | Reply
    Tags: ,   

    Logstash, clone filter & add_field mysteries 

    That’s a really great piece of documentation. This does not work:

    # let's clone each event, one goes to somewhere, one goes to somewhere else.
    # note this was copy-pasted from the docs!
    # see here: https://is.gd/QSHNps
    # again. THIS DOES NOT WORK.
    filter {
      clone {
        add_field => { "token" => "ABCDEF" }
    output {
      if [token] {
        # go somewhere
        tcp { ... }
      } else {
        # go to somewhere else
        s3 { ... }

    Why? Because the clone filter will not clone anything. And the documentation is super unclear on this. If you know it, you can read it – if you don’t know this, you’ll … google.

    For it to actually clone anything you have to specify the ‘clones => [“one”, …]’ parameter. Then it will clone, and add the token field as expected. Like this:

    filter {
      clone {
        clones => ["logz"]     # NOW it will clone.
        add_field => { "token" => "ABCDEF" }

    Interestingly the “clones =>” parameter is optional, which just confuses the shit out of me.

    The reasoning that I don’t just add the field altogether is that this is the access token for our externally hosted ELK service. This should only be there for the external path, and not be put in S3 in parallel.

compose new post
next post/next comment
previous post/previous comment
show/hide comments
go to top
go to login
show/hide help
shift + esc