Title: A day as an OpenBSD developer
       Author: Solène
       Date: 19 February 2020
       Tags: life openbsd
       Description: 
       
       This is a little story that happened a few days ago, it explains well
       how I
       usually get involved into ports in OpenBSD.
       
       ## 1 - Lurking into ports/graphics/
       
       At first, I was looking in various ports there are in the graphics
       category,
       searching for an image editor that would run correctly on my offline
       laptop.
       Grafx2 is laggy when using the zoom mode and GIMP won't run, so I just
       open
       ports randomly to read their pkg/DESCR file.
       
       This way, I often find gems I reuse later, sometimes I have less luck
       and I
       only tried 20 ports which are useless to me. It happens I find issues
       in ports
       looking randomly like this...
       
       
       ## 2 - Find the port « comix »
       
       Then, the second or third port I look at is « comix », here is the
       DESCR file.
       
           Comix is a user-friendly, customizable image viewer. It is
       specifically
           designed to handle comic books, but also serves as a generic
       viewer. It
           reads images in ZIP, RAR or tar archives (also gzip or bzip2
       compressed)
           as well as plain image files.
       
       That looked awesome, I have lot of books as PDF I want to read but it's
       not
       convenient in a "normal" PDF reader, so maybe comix would help!
       
       
       ## 3 - Using comix
       
       Once comix was compiled (a mix of python and gtk), I start it and I get
       errors
       opening PDFs... I start it again from console, and in the output I get
       the
       explanation that PDF files are not usable in comix.
       
       Then I read about the CBZ or CBT files, they are archives (zip or tar)
       containing pictures, definitely not what a PDF is.
       
       ## 4 - mcomix > comix
       
       After a few searches on the Internet, I find that comix last release is
       from
       2009 and it never supported PDF, so nothing wrong here, but I also
       found comix
       had a fork named mcomix.
       
       mcomix forked a long time ago from comix to fix issues and add support
       for new
       features (like PDF support), while last release is from 2016, it works
       and
       still receive commits (last is from late 2019). I'm going for using
       comix!
       
       
       ## 5 - Installing mcomix from ports
       
       Best way to install a program on OpenBSD is to make a port, so it's
       correctly
       packaged, can be deinstalled and submit to ports@ mailing list later.
       
       I did copy comix folder into mcomix, use a brain dead sed command to
       replace all
       occurrence of comix by mcomix, and it mostly worked! I won't explain
       little
       details, but I got mcomix to work within a few minutes and I was quite
       happy!
       Fun fact is that **comix** port Makefile was mentioning mcomix as a
       suggestion
       for upgrade.
       
       
       ## 6 - Enjoying a CBR reader
       
       With mcomix installed, I was able to read some PDF, it was a good
       experience
       and I was pretty happy with it. I've spent a few hours reading, a few
       moments
       after mcomix was installed.
       
       
       ## 7 - mcomix works but not all the time
       
       After reading 2 longs PDFs, I got issues with the third, some pages
       were not
       rendered and not displayed. After digging this issue a bit, I found
       about
       mcomix internals. Reading PDF is done by rendering every page of the
       PDF using
       **mutool** binary from **mupdf** software, this is quite CPU intensive,
       and for
       some reason in mcomix the command execution fails while I can do the
       exact same
       command a hundred time with no failure. Worse, the issue is not
       reproducible in
       mcomix, sometimes some pages will fail to be rendered, sometimes not!
       
       
       ## 8 - Time to debug some python
       
       I really want to read those PDF so I take my favorite editor and start
       debugging some python, adding more debug output (mcomix has a -W
       parameter
       to enable debug output, which is very nice), to try to understand why
       it
       fails at getting output of a working command.
       
       Sadly, my python foo is too low and I wasn't able to pinpoint the
       issue. I just
       found it fail, sometimes, but I wasn't able to understand why.
       
       
       ## 9 - mcomix on PowerPC
       
       While mcomix is clunky with PDF, I wanted to check if it was working on
       PowerPC, it took some times to get all the dependencies installed on my
       old
       computer but finally I got mcomix displayed on the screen... and dying
       on PDF
       loading! Crash seems related to GTK and I don't want to touch that,
       nobody will
       want to patch GTK for that anyway so I've lost hope there.
       
       
       ## 10 - Looking for alternative
       
       Once I knew about mcomix, I was able to search the Internet for
       alternatives of
       it and also CBR readers. A program named **zathura** seems well known
       here and
       we have it in the OpenBSD ports tree.
       
       Weird thing is that it comes with two different PDF plugins, one named
       **mupdf** and the other one **poppler**. I did try quickly on my amd64
       machine
       and zathura was working. 
       
       
       ## 11 - Zathura on PowerPC
       
       As Zathura was working nice on my main computer, I installed it on the
       PowerPC,
       first with the **poppler** plugin, I was able to view PDF, but
       installing this
       plugin did pull so many packages dependencies it was a bit sad. I
       deinstalled
       the poppler PDF plugin and installed mupdf plugin.
       
       I opened a PDF and... error. I tried again but starting zathura from
       the
       terminal, and I got the message that PDF is not a supported format,
       with a lot
       of lines related to mupdf.so file not being usable. The mupdf plugin
       work on
       amd64 but is not usable on powerpc, this is a bug I need to report, I
       don't
       understand why this issue happens but it's here.
       
       
       ## 12 - Back to square one
       
       It seems that reading PDF is a mess, so why couldn't I convert the PDF
       to CBT
       files and then use any CBT reader out there and not having to deal with
       that
       PDF madness!!
       
       
       ## 13 - Use big calibre for the job
       
       I have found on the Internet that Calibre is the most used tool to
       convert a
       PDF into CBT files (or into something else but I don't really care
       here). I
       installed calibre, which is not lightweight, started it and wanted to
       change
       the default library path, the software did hang when it displayed the
       file
       dialog. This won't stop me, I restart calibre and keep the default
       path, I
       click on « Add a book » and then it hang again on file dialog. I did
       report
       this issue on ports@ mailing list, but it didn't solve the issue and
       this mean
       calibre is not usable.
       
       
       ## 14 - Using the command line
       
       After all, CBT files are images in a tar file, it should be easy to
       reproduce
       the mcomix process involving mutool to render pictures and make a tar
       of that.
       
       **IT WORKED.**
       
       I found two ways to proceed, one is extremely fast but may not make
       pages in
       the correct order, the second requires CPU time.
       
       
       #### Making CBT files - easiest process
       
       The first way is super easy, it requires **mutool** (from mupdf
       package) and it
       will extract the pictures from the PDF, given it's not a vector PDF,
       not sure
       what would happen on those. The issue is that in the PDF, the embedded
       pictures
       have a name (which is a number from the few examples I found), and it's
       not
       necessarily in the correct order. I guess this depend how the PDF is
       made.
       
           $ mutool extract The_PDF_file.pdf
           $ tar cvf The_PDF_file.tar *jpg
       
       That's all you need to have your CBT file. In my PDF there was jpg
       files in it,
       but it may be png in others, I'm not sure.
       
       
       #### Making CBT files - safest process (slow)
       
       The other way of making pictures out of the PDF is the one used in
       mcomix, call
       **mutool** for rendering each page as a PNG file using width/height/DPI
       you
       want. That's the tricky part, you may not want to produce pictures with
       larger
       resolution than the original pictures (and mutool won't automatically
       help you
       for this) because you won't get any benefit. This is the same for the
       DPI. I
       think this could be done automatically using a correct script checking
       each PDF
       page resolution and using mutool to render the page with the exact same
       resolution.
       
       As a rule of thumb, it seems that rendering using the same width as
       your screen
       is enough to produce picture of the correct size. If you use large
       values, it's
       not really an issue, but it will create bigger files and take more time
       for
       rendering.
       
           $ mutool draw -w 1920 -o page%d.png The_PDF_file.pdf
           $ tar cvf The_PDF_file.tar page*.png
       
       You will get PNG files for each page, correctly numbered, with a width
       of 1920
       pixels. Note that instead of tar, you can use zip to create a zip file.
       
       
       ## 15 - Finally reading books again
       
       After all this LONG process, I was finally able to read my PDF with any
       CBR
       reader out there (even on phone), and once the process is done, it uses
       no cpu
       for viewing files at the opposite of mcomix rendering all the pages
       when you
       open a file.
       
       I have to use zathura on PowerPC, even if I like it less due to the
       continuous
       pages display (can't be turned off), but mcomix definitely work great
       when not
       dealing with PDF. I'm still unsure it's worth committing mcomix to the
       ports
       tree if it fails randomly on random pages with PDF.
       
       
       ## 16 - Being an open source activist is exhausting
       
       All I wanted was to read a PDF book with a warm cup of tea at hand.
       It ended into learning new things, debugging code, making ports,
       submitting
       bugs and writing a story about all of this.