Categories
general

Rendering Arabic in Computers

Here’s a fun and interesting crash course in Arabic letters:

The way it ended reminded me of what Kumail Nanjiani had said a few years prior about the same sort of thing.

Similar to Rami Ismail above, Ramsey Nasser had a tongue in cheek talk about Arabic in technology:

And we still have no end of content fails for https://notarabic.com/. Handling languages correctly matters to people. We still have a long way to go.

Categories
general i18n internationalization programming unicode

More Sources to Learn Internationalization

Here is a collection of more links to learn about internationalization, beyond the really good videos from the recent Unicode event and other links that I mentioned along with them. I might continually update this space to organize all of the links for learning about internationalization, organized by what might be most useful to total beginners.

  • Getting Started with Internationalization – A quick, well-written intro to basic terms and concepts with illustrative pictures
  • Unicode Demystified by Rich Gillam – a book written in simple language that explains the technical aspects of Unicode, gives a survey of writing systems / languages, and an overview of the higher level things. You should probably read this before reading the Unicode core specification, if you ever need to do that.
Categories
C++ i18n internationalization java Rust unicode

Introduction to Internationalization and Unicode

The Unicode Consortium had its online event last week entitled “Overview of Internationalization and Unicode Projects”. The 6 videos have an average runtime less than 15 minutes and create a nice, gradual explanation of the internationalization / Unicode ecosystem that nicely builds upon itself. The videos are also embedded below.

A colleague asked me a good way to get a background of internationalization. Here is what I told that person:

Categories
general

Run Maven exec:java for multi-module projects

Many Java projects are built with Maven, and it is common for these projects to be structured as multi-module projects to allow for clean code separation and better reuse. It’s well documented how to use the Maven CLI options -am in conjunction with -pl <project-dir-list> in order to run Maven commands like compile and test within a single submodule, while still taking into account the other submodules in the project needed as dependencies. Meanwhile, we can execute a Java class using the exec:java command. But how do we get that to work in a multi-module project?

Categories
general programming tamil thamil

Redesigning an Input Method for an Abugida Script

After I previously talked about problems of input methods for abugida scripts, and added more supporting details to the point, I finally started prototyping possible implementations of the idea (try it out!).

But there are quite a few constraints and tradeoffs that come up once you start thinking about the details. I think these issues apply generally to most abugida scripts. So I am documenting all of the details below. Also, getting a new input method adopted requires more than perfecting just the technical details and user experience — it also requires overcoming user inertia (or creating awareness), and it also requires educating industry experts and those implementing changes. If you have feedback, please send it my way so that I can continue to update this post with the latest information.

Categories
general

Supporting and fixing North American Indigenous languages in technology

This recent blog post from font maker Typotheque has a video explaining the work involved to support an under-/unrepresented language in technology:

It shows the added challenges for a language when it is spoken in rural areas by dwindling numbers due to a history of active suppression by the government in charge (in this case, the Canadian government). The sounds of First Nations languages like this are fascinating. What’s also neat is to see how these efforts materialize via the Unicode Consortium into the official technology standards that all major hardware and software companies subsequently implement to make it real. This is the proposal to add the needed characters to the Unified Canadian Aboriginal Syllabics block, and this is the proposal to fix up the standard’s documentation so that the example display of characters appear correctly for these languages. There is a lot of other technical work that goes on behind the scenes to make this useful in a practical sense — ex: a language-specific (smartphone) keyboard, or the software that helps your phone/computer know how to handle text layout and display for any language. The video above shows the real impact of this unseen work by the people around me.

Categories
general

My Wordle Strategy

Wordle is a game that is a cross between Mastermind and Scrabble. I heard about it because it is really trendy. But I tried it out because Mastermind is one of the games I introduced to my nieces in August. It seemed hard for them, so I always played on the side of the person guessing, and showed them how to reason through any game (like thinking up a series of unit tests, without saying so, haha!) in order to win reliably.

Categories
clojure java programming Rust web

Choose the exemplar programming language for the use case

I think my understanding of programming languages — ex: what role do they serve in tech engineering work, what my favorite language is — is something that continues to evolve, and has done so once more recently. Here is where I started from and where I stand:

Categories
general

Musings on Effort and Passion

I just came across this post/article that contrasts 2 positions — passion results in effort, and effort increases your passion — and shows how they’re interrelated. The part about effort resulting in passion (or more likely: sustained effort -> mastery -> motivation) resonates currently, especially since sustained effort is not always easy when things feel difficult or change too often. Things changing often disrupts our ability to learn, I think, because we accrete knowledge only when we can incorporate it into the knowledge structures that we’ve already built. Being in this pandemic still means avenues for people connection and mentorship are harder to come by, so it removes opportunities to make those mental connections in our mind that speed up our knowledge, and in turn, successively, our mastery, our autonomy, our drive, and our passion. As insightful and timeless as essays from Paul Graham about how to do what you love and Steve Jobs’ commencement speech are, they start with a premise of passion and don’t really mention the gritty complement of hard work. Bill Burr’s bit is still hilarious, where he questions Jobs as “Nerd Jesus”. And the news yesterday of Roy Williams retiring as UNC basketball’s coach touched on lots of issues, but one issue is the change of an environment to one where there is less emphasis on the personal relationships and player development, especially if self-development requires a high level of commitment and overcoming adversity.

Categories
clojure programming

Random Bits of Lisp/Clojure Hype

A friend sent me a link to Uncle Bob’s blog post on Clojure (2019), where he explains his road from hating Lisp to appreciating it to the point where its simplicity and power makes it his favorite language. He declared it a language for the ages, just as I did. Given that Uncle Bob is a co-founder of the influential Agile Manifesto and has used several different types of languages, his declaration has more reach, and he explained it more concisely than I could, anyways. And what about Paul Graham, whose ideas have a large audience and hasn’t stopped writing about Lisp’s secret superpowers? He’s been apparently creating a new language Bel, a version of Lisp that is defined in itself, and the premise’s challenge is like a math/logic puzzle that resonates with the history of Lisp as an unintended result of implementing math theorems in a computer. But he seemed to have liked Uncle Bob’s post, and in recent years, when asked, he also recommends Clojure as the flavor of Lisp to use for modern times (1, 2, 3, 4, 5).