May 16th, 2021

One of the things I have always wanted to achieve is fluency in the Japanese language. A web search for how to learn Japanese led me to Tofugu’s I want to learn Japanese! This page provides a guide for learning Japanese. The page also builds a strong case for purchasing Tofugu’s product, WaniKani.

Tofugu motivated me to pick up Japanese again by linking Derek Sivers’s story about the potential to learn quickly outside the limits of classroom instruction: There’s no speed limit. Tofugu also recommends taking an approach that would be difficult in a classroom environment. Tofugu recommends first building a vocabulary while learning to read kanji before using a textbook to study grammar.

Tofugu makes an observation, which I have experienced firsthand and I attribute my lack of progress toward fluency:

A lot of a beginner’s time when using a textbook is spent looking up kanji and vocabulary. This takes your focus away from the grammar you’re trying to learn and makes progression slow and frustrating. Learning (some) kanji and vocabulary first makes learning grammar a lot faster and, more importantly, easier.

To further streamline learning Japanese, Tofugu goes against typical classroom instruction and recommends typing Japanese rather writing Japanese at first:

While it is important to learn how to hand write Japanese eventually, right now it will slow you down immensely with very little payoff. Typing covers 99% of modern day writing so you will learn how to type hiragana (and katakana and kanji) instead.

Tofugu spells out the theory of the kanji-vocabulary-first approach:

When learning something new, you should already know 80% of it.

This means that each new thing you learn should be a 20% (or smaller) incremental step. A +1 from where you are, rather than a +20 or +100.

Most people go into a textbook with zero knowledge and wind up spending a large chunk of their time looking up words they don’t know. How much of a sentence is vocabulary? Depending on the length, it’s easy to answer “more than 80%.”

So when you’re learning grammar with a textbook, coming into it with prior vocabulary knowledge brings you to that 80%. Leaving you just the grammar, which you can then point your laser-like focus towards. Instead of constantly flipping to the index to look up a word or kanji and deal with context switching when you finally get back to the lesson, all you have to worry about is learning the grammar and nothing else.

After thoroughly providing the motivation to gain vocabulary by reading kanji before studying grammar, Tofugu provides a process for gaining vocabulary. The process involves collecting words encountered daily and processing collected words into a spaced repetition system (SRS). Tofugu recommends that processing collected words involve associating mnemonics to ease committing the words to memory. Populating an SRS to develop vocabulary requires a lot of effort.

To streamline my journey toward fluency, I signed up for WaniKani, Tofugu’s commercial platform for learning kanji and vocabulary. WaniKani provides a spaced repetition system (SRS) that supports the keyword mnemonic method. The service offers an SRS that is pre-populated with what Tofugu feels are the “most important meanings and readings” of their selected set of kanji as well as a set of vocabulary that covers the less common readings. WaniKani teaches “around 1,700 kanji and 5,000 vocabulary words in about one to two years.”

The following video is queued to start where Chris Lonsdale talks about the effectiveness of a small functional vocabulary, but the rest of the video is worth a watch since it provides a guide on learning any language quickly:

How to Learn Any Language in Six Months by Chris Lonsdale

The next step after gaining enough vocabulary and grammar is exposure to the language. Yuta Aoki talks about the importance of comprehensible input in detail with examples:

How to Learn Japanese by Yuta Aoki

Microsoft Flight Simulator 2020

October 13th, 2020

The latest iteration of Microsoft Flight Simulator was released August 18th, 2020. I had always considered getting earlier iterations of MSFS, and I hesitated even on the current iteration. Although it has had software issues, I do not regret buying the Premium Deluxe edition eight days after its release. The software continues to be supported by the developers, Asobo Studio SARL. At the time of writing, three major updates have been released and several updates are planned.

Microsoft Flight Simulator is more than a video game. While interacting with the simulator, I learned about the auto-pilot systems used by Airbus A320neo and Boeing 787-10 Dreamliner. This knowledge eased the transition to the Garmin G1000 and auto-pilot systems used in other aircraft. I have also gained familiarity with instrument landing systems (ILS), distance measuring equipment (DME), VOR navigation, and the phraseology used between pilots and air traffic controllers. This software has motivated me to look at approach plates and VFR charts. Documentation, tutorials, and instructional videos unrelated to flight simulation are also applicable to Microsoft Flight Simulator. Everything that I have learned may be useful for when I work toward a private pilot license with instrument rating.

Cessna 172 landing at Hawthorne Municipal Airport (KHHR)

Once the novelty of flying jetliners on auto-pilot and landing with ILS wears off, actively managing indicated airspeed, vertical speed, altitude, approach heading, and keeping centered with the runway makes landing the most rewarding aspect of the simulator. Actively landing, sometimes with assistance from instruments in nighttime, foggy, or cloudy conditions, is a worthwhile experience.

The above video shows my landing a Cessna 172 at KHHR on runway 25 (“runway two-five”). The plane is maneuvered so that it is flying west parallel to the I-105. The plane flies over the I-110 on its approach to the airport. KLAX is visible to the right of KHHR.

Frames are noticeably dropped in the video. My desktop computer, which the simulator reports is unsupported, consists of the following components:

  • ASUS AREZ Radeon RX560 2GB (AREZ-RX560-2G-EVO) [$99.99]
  • AMD Ryzen 5 3600X [$189.99]
  • MSI MPG X570 Gaming Plus ATX [$154.99]
  • G.Skill 2x8GB DDR3200 [$69.99]
  • Samsung 970 EVO Plus NVMe M.2 SSD 500GB [$104.99]
  • NZXT H510i ATX Case [$99.99]
  • Corsair RM850 80+G Fully Modular ATX PSU [$159.99]

Subtotal: $879.93
Tax (7.75%): $68.19
Total: $948.12

The video card is the performance bottleneck. An MSI GeForce RTX 3080 Gaming X Trio 10GB [$854.99] seems worthwhile. The experience provided by Microsoft Flight Simulator 2020 is definitely worth the cost of upgrading.

Transitioning SSH from RSA to ED25519

May 27th, 2020
Posted in Security | No Comments

Nick Sullivan1 writes:

You can compute how much energy is needed to break a cryptographic algorithm and compare that with how much water that energy could boil. This is a kind of a cryptographic carbon footprint. By this measure, breaking a 228-bit RSA key requires less energy than it takes to boil a teaspoon of water. Comparatively, breaking a 228-bit elliptic curve key requires enough energy to boil all the water on earth. For this level of security with RSA, you’d need a key with 2,380 bits.

ED25519 uses a 256-bit elliptic curve key.

Release notes for OpenSSH 8.3 announce that ssh-rsa is disabled by default in future releases. It is a good time to adopt ed25519 for public key authentication.

Installed Debian 10.4 on Mini 9

May 24th, 2020

I successfully installed Debian 10.4 on the Dell Mini 9 (Inspiron 910).

Facing discontinuation of support for 32-bit x86 systems after Lubuntu 18.04 LTS, I was pressured to find another GNU/Linux distribution. I wanted to avoid future transitions and found several pages on the Internet suggesting that Debian is known for long term support of many architectures.

I tried the Debian 10.4 LXQt (non-free) LiveCD, debian-live-10.4.0-i386-lxqt+nonfree.iso, before continuing with installation.

The wired network card has no issues, but the wireless network card does. I encountered the following errors when booting the LiveCD:

[26.504] b43-phy0: Broadcom 4312 WLAN found (core revision 15)
[26.562] b43-phy0: Found PHY: Analog 6, Type 5 (LP), Revision 1
[26.562] b43-phy0: Found Radio: Manuf 0x17F, ID 0x2062, Revision 2, Version 0
[26.576] Broadcom 43xx driver loaded [ Features: PNLS ]
[26.624] b43 ssb0:0: firmware: failed to load b43/ucode15.fw (-2)
[26.624] b43 ssb0:0: Direct firmware load for b43/ucode15.fw failed with error -2

Before migrating from Lubuntu 18.04 LTS to Debian 10.4, I created an archive of the /usr/lib/firmware/b43 files from my Lubuntu installation for copying onto the new Debian installation.

I avoided having to enable the non-free repository and installing additional packages by simply copying the b43 files after installation. Rebooting after copying the files allows for the firmware to be loaded:

[24.419] b43-phy0: Broadcom 4312 WLAN found (core revision 15)
[24.475] b43-phy0: Found PHY: Analog 6, Type 5 (LP), Revision 1
[24.475] b43-phy0: Found Radio: Manuf 0x17F, ID 0x2062, Revision 2, Version 0
[24.496] Broadcom 43xx driver loaded [ Features: PNLS ]
[24.540] b43 ssb0:0: firmware: direct-loading firmware b43/ucode15.fw
[24.541] b43 ssb0:0: firmware: direct-loading firmware b43/lp0initvals15.fw
[24.544] b43 ssb0:0: firmware: direct-loading firmware b43/lp0bsinitvals15.fw
[24.630] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'

connman is used to manage the wireless network card. Graphical user interface front-ends to connman were finicky. I proceeded with using connmanctl.

My Dell Mini 9 is usually an isolated computer. I disabled the connman service so that it does not connect to the wireless network automatically during boot:

$ sudo systemctl disable connman

When I update the software, I start the connman service for temporary connectivity to the wireless network with the following command:

$ sudo systemctl start connman

All features of my Dell Mini 9 are now functioning without any issues.

What is a Nonce?

May 7th, 2020
Posted in Security | No Comments

A nonce is a value, N, that is used only once: Nonce. Nonces or nonce values are encountered in cryptography.

The initialization vector used for AES in CBC mode are typically nonces:

C1 = CIPHK(P1 ⊕ Nonce)
Cj = CIPHK(Pj ⊕ Cj-1) for 2 <= j <= n

Here, cipher block 1 is the result of the cipher block function keyed on K applied to the XOR value of plaintext block 1 and a nonce. The following cipher blocks are the result of the cipher block function keyed on K applied to the XOR value of the corresponding plaintext blocks and the previous cipher block.