Status Report
I have been working on a number of different projects this week. It has been a while since my last post to this website, so I think it is time for a status report.
TTC Article Series
I am currently writing a series of articles about my TTC (Textual Type Classes) library. Currently, my plans are as follows.
- Publish the article series
- Improve the project documentation
- README
- API documentation
- Add an example that uses the
aeson
library
- Release version
1.0.0.0
- Make general announcements
LiterateX
LiterateX is a Haskell library and utility that translates literate-style source code to Markdown that is suitable for processing with Pandoc. I first designed this software to work with source code that does not already have good documentation solutions, namely SQL and shell scripts, but I ended up adding support for literate Haskell as well. Using this software, I will be able to render content for this website directly from source code.
When I wrote the prototype for this software, I made extensive use of
lazy evaluation, which makes the code quite concise and easy to
understand. I rewrote similar code to use conduit
on a recent work project, however, in order to have better control over
resource usage and use less memory. I am rewriting LiterateX to use
conduit
as well.
I finished most of the rewrite, and I am currently experimenting with the high-level API. I would like to provide functions to transform content between any of the following.
Textual
data typesString
Text
- Lazy
Text
ByteString
- Lazy
ByteString
- Handles (such as
STDIN
andSTDOUT
) - Files
Transformation between Textual
data types is pure.
Transformation to/from a handle requires MonadIO
.
Transformation to/from a file requires MonadUnliftIO
. I
have a design that I am satisfied with, and I am almost finished
implementing it. I will likely write a blog entry and solicit feedback
about it once I have finished testing the implementation to ensure that
it works as expected.
Data Backup, Hardware, OSes
I recently purchased some new hard disks to use for backup storage.
My local backup storage is done using sets of encrypted disks that are
synchronized using rsync
.
Initializing the new disks is time consuming, and I use my desktop
computer for initialization since it has SATA drive bays.
My desktop computer is quite dated. I assemble my own desktops because doing so allows me to select the hardware as well as easily upgrade or repair parts when needed. This desktop was last upgraded in 2010, though! I switched to using a laptop as my daily driver after the 2011 Tohoku earthquake in order to use less electricity, and I have not upgraded the desktop because I am not sure if I should continue using desktops at all…
On one hand, I would like to use a desktop as my daily driver so that I can take advantage of the speed as well as ergonomics. On the other hand, the efficiency and portability of laptops is very convenient in Japan, and I can use cloud computing when I need to do a lot of computation. Perhaps I should use a NUC to get the ergonomics of a desktop on a system that is somewhat portable as well as power-efficient. I have not decided how to proceed yet, but there is no rush.
In the meantime, I plan on installing a new OS on the current desktop. I previously tried to install NixOS on it but had problems getting it to boot using the NixOS kernel. The computer is old, but it should be able to run NixOS fine… I have since realized that the problems might have been due to some non-standard hardware, and I plan on trying again and working around the issue. I can use Nix on my daily driver, however, so I may end up installing Qubes OS and Whonix on the desktop instead. In any case, I can continue to boot Tails and Kali Linux from removable media.
Electronics Project
There is an electronics project that I will be working on soon, and I have started thinking about the design. I am thinking about basing it on an ESP32 MCU since I need Wi-Fi and would like to make use of the power modes. Perhaps I will use a TinyPICO, which features two isolated power paths, making it easy to implement a low-power operations mode for running on battery as well as a powerful administrative mode.