summaryrefslogtreecommitdiff
path: root/content/projects/lolcat-c/index.rst
blob: 858f6de2c035a0c85b05608e556bae6f84ebf191 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
---
title: "lolcat-c"
external_links:
    - name: Sources
      url: "https://git.jaseg.de/lolcat.git"
    - name: Github
      url: "https://github.com/jaseg/lolcat"
    - name: Issues
      url: "https://github.com/jaseg/lolcat/issues"
summary: >
    lolcat-c is a small, high-performance re-implementation of the
    `lolcat <https://github.com/busyloop/lolcat>`__
    rainbow cat utility. lolcat-c is meant as a lolcat that you can actually use in production. It is fast, not slowing
    down whatever you pipe through it, and it robustly handles real-world terminal output including escape sequences.
---

What?
=====

.. image:: LOLCat-Rainbow.jpg

Screenshot
==========

.. image:: screenshot.png

.. image:: sl.gif

Installation
============

Archlinux
---------

There's an `AUR package <https://aur.archlinux.org/packages/c-lolcat>`__:

.. code:: sh

    $ git clone https://aur.archlinux.org/packages/c-lolcat
    $ cd c-lolcat
    $ makepkg -csi

Fedora
------

.. code:: sh

    $ dnf install lolcat

Ubuntu (Snap)
-------------

See `this awesome blog post by a kind person from the internet <https://blog.simos.info/how-to-make-a-snap-package-for-lolcat-with-snapcraft-on-ubuntu/>`__:

.. code:: sh

    $ snap install lolcat-c

Mac
---

Build loclcat with:

.. code:: sh

    $ make lolcat

...and put the resulting binary at a place of your choice.

Others
------

.. code:: sh

    $ make && sudo make install

Why?
====

This `lolcat` clone is an attempt to reduce the world's carbon dioxide emissions by optimizing inefficient code. It's
>10x as fast and <0.1% as large as the original one.

.. code:: sh

    newton~/d/lolcat <3 dmesg>foo
    newton~/d/lolcat <3 time upstream/bin/lolcat foo
    13.51user 1.34system 0:15.99elapsed 92%CPU (0avgtext+0avgdata 10864maxresident)k
    0inputs+0outputs (0major+1716minor)pagefaults 0swaps
    newton~/d/lolcat <3 time ./lolcat foo
    0.02user 0.00system 0:00.09elapsed 34%CPU (0avgtext+0avgdata 1936maxresident)k
    0inputs+0outputs (0major+117minor)pagefaults 0swaps

Bonus comparison with `python-lolcat <https://github.com/tehmaze/lolcat/>`__:

.. code:: sh

    newton~/d/lolcat <3 dmesg>foo
    $ time python-lolcat foo
    12.27user 0.00system 0:12.29elapsed 99%CPU (0avgtext+0avgdata 11484maxresident)k
    0inputs+0outputs (0major+1627minor)pagefaults 0swaps
    $ time c-lolcat foo
    0.29user 0.00system 0:00.30elapsed 98%CPU (0avgtext+0avgdata 468maxresident)k
    0inputs+0outputs (0major+21minor)pagefaults 0swaps

(Read: `c-lolcat << python-lolcat << ruby-lolcat`)