Rendering kaomoji in Arch Linux

tl;dr: install ttf-indic-otf plus a good CJK font and hope for the best. (╯°益°)╯彡┻━┻

Recently I was reading a Wanikani forum post and noticed Chrome couldn’t render its title properly.


Well, Wanikani is a site about japanese, so the usual suspect is a missing glyph in some japanese font. I thought about it for a second and remembered about kaomoji (顔文字), “face-character”, japanese emoticons; this should be one of them because of the parenthesis. So I needed some set of fonts to display those and I couldn’t find anything useful on Google.

My initial reaction was that I lacked some Chinese or Korean glyph, so I started installing several CJK (Chinese-Japanese-Korean) fonts and reopening Chrome. Not much progress. I eventually installed FreeFont, a font supposed to contain a good amount of unicode characters. Guess what?


A bit of success, but the characters inside the parenthesis still weren’t rendered at all. I spent an hour trying various combinations of fonts as listed in the ArchWiki until I gave up on Linux and decided to see the title on my iPhone. Of course the thing rendered correctly there.

I googled that character (ಠ) and discovered about the Kannada alphabet used in India, and more generally that kaomoji uses alphabets that I didn’t even know existed. Of course, fixing it is quite simple: just install indic fonts. The result:


Specifically, for future reference, I installed these packages:

I updated the ArchWiki fonts article with a section about kaomoji, this is it.

I also reviewed the selection on to look for more rendering problems. I didn’t find an obviously wrong instance, but it is hard to be sure. Hope I never have problems with this thing again. ┬─┬ノ( º _ ºノ)

Books #2

Like I did for January, this post is a set of brief comments about the books I read during February. I’m having relatively unproductive months lately, so seeing that I did go through these is reinvigorating. ☺

As I said before, one of my objectives this year is to expand the set of genres I read even more — not only keep on reading fiction, but some philosophy and history as well. I didn’t pay an awful lot of attention to the philosophy classes during high school (we have those in Brazil), so it’s an obvious place to begin. That, and a friend’s recommendation. After reading a bit of Seneca, I’ve put his works on the brevity of life, happiness and grief on my reading list.

Continue reading

7 years to receive a letter

I was reading a book on the life of the italian Jesuit priest Matteo Ricci in China (1582–1610). During that period, he taught the chinese about the Art of Memory used in Europe and contributed some of the images from his memory palace for a book about the teachings of christianity in chinese.

A curious fact is the time that was necessary for a letter from China to arrive in Europe by means of the Portuguese and Spanish trade routes—seven years. Given that my e-mails can arrive practically instantly, I was baffled at the thought of waiting that long to get a response.

The Jesuits in China knew enough of the sea’s dangers to send each of their letters to Europe in two copies—one via Mexico on the Spanish galleons out of Manila, and one via Goa on the Portuguese carracks leaving Macao. Ricci’s superior Valignano may have been startled that one of his letters to Rome took seventeen years in transit from Macao, but Ricci accepted six to seven years as the norm for receiving an answer to a given letter.

Continue reading

When to ignore air resistance

This paper talks about how most introductory physics textbooks are awful and provide unrealistic approximations, with no comments on their applicability.

The observant student knows—from exploring the world—that golf drives rise quickly and almost straight and drop parabolically only near the end. This student learns that the world described by her physics textbook is not the real world and that careful observation is irrelevant to physics.

Contrast the experience of the curious student with that of a student who parrots equations and regurgitates textbook paragraphs. This student is untroubled by the golf problem or its variants listed in Table I because he knows the easily memorized “fact” that all trajectories are parabolae. […]

If you ever took a physics class, I’m quite sure you recognize that teaching style. The following figure shows the trajectory of a golf ball considering air resistance, in case you’re interested:

Books read in the second quadrimester of 2015

Following my first post on books between the first quadrimester (Jan-Apr), here’s the list for May-Aug. There’s also a post on the books I read read during 2014.

I didn’t read as much as I wanted… but being able to measure how much I’m reading is nice, and I’m coming up with ways to improve on that, e.g. don’t read a book on Haskell and a treatise on Memory written by a historian in parallel.

(I’ve recently discovered that quadrimester is sometimes used as a synonym for quarter in english. Well. In 2016 I might try breaking it into Q1, Q2, Q3, and Q4.)

Continue reading

Beginning studies on deep learning

tl;dr: building features manually is inefficient and extracting them automatically is possible and, in a sense, better.

I’m not writing a lot here these days, so let me summarize: I left my job recently to start working on my Masters at Universidade of São Paulo (USP). I’m studying an area of Machine Learning called Deep Learning (or Representation Learning, the term I prefer) for my research. This post is an overview of what I’ve read so far about the subject.

(By the way, it is practically impossible to enter a PhD program in Brazil without a MSc.)

Continue reading

Notes on To Engineer is Human

To engineer is human (see in Amazon or in Goodreads) is a 1992 book about how knowledge of past design failures is useful in current projects, strongly biased to civil engineering. Some examples are repetitive and not studied in depth, thus making the book a bit dull at times. Even then I found some very interesting reflections and quotes that I wanted to comment on or simply organize for later reviewing.

Continue reading

Playing Rising Lands in a modern computer

UPDATE: According to the comments of HellRazor, it is possible to play Rising Lands successfully with DOSbox. I added a new section explaining the method.

After reading the StarCraft II novels Heaven’s Devils and Flashpoint, I got back to playing StarCraft 2. I’m an awful player, but remembering the original StarCraft (and its expansion set, Brood War) made me think about games that impressed me when I was young. One of them was Rising Lands, a RTS set in a post-apocalyptic future in which Earth was devastated by a meteor collision and most technological knowledge was lost. (yes, cheesy, but trust me on this — it is good)

Continue reading

Hieroglyphics as types, whitespace as function names

I came across some curious Haskell tweets lately and decided to group them in a unique place.

These made me remember about a curious fact: did you know that there are other types of spaces in Unicode, like U+00A0, the no-break space? What about using it in Ruby? (please don’t)

Whenever I see someone talking about non-ASCII characters in programming languages, I always get back to APL, an old language that used extremely concise notation similar to mathematics itself. Due to most keyboards being horrible, it never caught on. :-(

(Mental note: having some kind of LaTeX math symbols embedded into a language for scientific computing would be… interesting.)

Playing with Lua

I work for a mobile games company as a data scientist. I use Ruby for data wrangling and some sorts of analysis, Python for more specific things (essentially scikit-learn) and bash scripts for gluing everything together.

The developers use Corona for creating our games, which uses Lua. I decided to give that language a try.

Some facts:

  • Lua is tiny. As someone accostumed to Python and Ruby, it is shocking to see such a small standard library. For example, this is the manual – there are only 158 Lua functions listed there.
  • The syntax is incredibly simple. Take a look at these diagrams; if you understand the Extended Backus-Naur Form, you can read Lua’s syntax quite easily. For comparison, Ruby’s syntax is complex enough that there are lots (and lots and lots) of small corner cases that I probably never heard about, even after years using it. Ah! And Ruby’s parse.y has 11.3k lines.
  • Lua was built with embedding in mind; it is used for interface customization in World of Warcraft, for example.
  • It is a Brazilian programming language! :-) Lua was created in 1993 in Rio de Janeiro, according to Wikipedia.

Continue reading

The Data Package Format

At my last job, I worked with data from the Brazilian educational system in several situations. The details aren’t the important part, but the format – a giant denormalized CSV with an accompanying PDF detailing its fields. It is very nice after you work with it for some time, but there are some things that could be better.

In that format, enumerations (fields with a fixed, finite set of values) are encoded as some arbitrary integer range, boolean values as 0 or 1, and other implementation details that are explained in the PDF. Thus far we have a cute CSV with documented fields. Nice, right?

Actually, yes.

Continue reading