def zippify(iterable, len=2, cat=False):
    """
        Zips an iterable with arbitrary length pieces
        e.g. to create a moving window with len n
        Example:
        zippify('abcd',2, cat=False)
        --> [('a', 'b'), ('b', 'c'), ('c', 'd')]

        If cat = True, joins the moving windows together
        zippify('abcd',2, cat=True)
        --> ['ab', 'bc', 'cd']
    """
    iterable_collection = [iterable[i:] for i in range(len)]
    res = list(zip(*iterable_collection))
    return [''.join(r) for r in res] if cat else res