Server moves to Mac mini 2023

The website's new home, the Mac mini M2 Pro
I've been oscillating between Mac mini and iMac for the past two decades for server use. An iMac 21.5" (2017) took over the job of a Mac mini (2012) for the past five and a half years, and now I'm moving back to Mac mini.

This time, it has an M2 Pro processor that uses the ARM architecture instead of Intel x86. So I took my time in setting everything up from the scratch, which took about three weeks. On the hardware side, I wanted to recreate the integrated look of an iMac, so gathering the necessary components required some time. On the software side, there were some compatibility issues in the server components that needed resolving. Most of them are fixed now, so I moved the server operation to the new system today.
Defined tags for this entry: , , ,

My book is labeled as a bestseller at Naver

"Electric Car - Common Sense Dictionary (전기차 상식사전)" has a red "bestseller" tag on it in Naver search results

Kyobo's weekly bestsellers
It's been about two weeks since my new book officially went on sale at various online and offline bookstores around Korea. The book saw its interest surging the subsequent Monday (August 30, 2021), and so it peaked at 32nd position of the tech / engineering online weekly bestsellers at Kyobo Book Centre the next day.

The wave has somewhat calmed down at the moment, but for some reason Naver has now decided to label it as a bestseller. I first spotted the red tag on September 4, before disappearing just a day after. It then returned today (September 7). I'm not sure what this classification is based on, but I guess the book is doing well.
Defined tags for this entry: , , , ,

My new book is available on pre-order

"Electric Car - Common Sense Dictionary (전기차 상식사전)" book listed on Yes24

A few months ago, I had the idea to gather all sorts of replies and posts I made in the electric vehicle-oriented communities on the Internet and organize them into a single book called "Electric Car - Common Sense Dictionary". Luckily, one of the major publishers I sent the first draft to thought it would sell and decided to publish it. So after beefing up the content and updating the data up to the last minute, the final manuscript was sent off to the press yesterday. And as of today all the major bookstores in the country have listed it for pre-order. Official release is slated for August 25, 2021. Here are where you can find it (all in Korean).

Official page at the publisher (Nexus)

- Kyobo Book Centre
- Youngpoong Bookstore
- Interpark
- Aladin
- Yes24
Defined tags for this entry: , , ,

Server upgraded to macOS Big Sur

iMac stuck on Setting Up Account step of the macOS Big Sur upgrade

I skipped upgrading the iMac server’s OS to macOS 10.15 Catalina last year mainly due to the removal of 32-bit application support. After a year, the clean-up of obsolete apps was complete, paving the way for the upgrade.

During the preparation, there was a bit of a hiccup with the MySQL database, But putting the data to a new one largely solved the issue and the website ended up loading much quicker. Two minor errors occurred after moving to the new database, which were quickly resolved by editing the configuration file:

1. "Query failed: Out of sort memory, consider increasing server sort buffer size"

Solution: increase sort_buffer_size from the default of 262144
sort_buffer_size=2097152

2. "Query failed: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'blog.multilingual_body.value' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by"

Solution: remove only_full_group_by in sql_mode
sql_mode=STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_ENGINE_SUBSTITUTION

With all the pieces ready I went with the installation of macOS 11.0 Big Sur. It took about an hour and except for a prolonged setup time of the iCloud, things went smoothly.

Defined tags for this entry: , , , ,

Adventures in fixing broken Korean text in MySQL DB

The Tool-Box.info website has been running on the Apache - PHP - MySQL (APM) solution for the past 13 years. Each component has been constantly upgraded over the years, and recently I decided to update MySQL from 5.7 to 8.0. Once I managed to migrate the database to the new version, I discovered that all the Korean texts on the website came out broken. This was a sign of mismatched character set, so I looked for the exact cause.

First, I rolled back to 5.7 and checked what character sets were being used, using the following SQL query:
show variables like 'char%';

Sure enough, "character_set_database" and "character_set_server" were set to "latin1". Upon checking the database and the tables that contain the website data, their character sets were all set to "latin1_swedish_ci", the default choice. All the Korean texts were being saved to the database in Latin1 format from the very beginning. It got converted into UTF-8 as it was passed to the output, so it looked normal when viewed through a web page. But if you looked directly into the database, it came out broken. MySQL 8.0 apparently decided to output the text in its saved form, unlike 5.7, hence the problem.

The solution proposed by many of the Korean blogs that had a similar problem was to alter the character set of the affected databases and tables in the following manner:
ALTER DATABASE data_database CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

ALTER TABLE data_table DEFAULT CHARSET=utf8mb4;

ALTER TABLE data_table MODIFY COLUMN title VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

And also, add the following lines under [mysqld] in the MySQL configuration file (my.cnf):
collation-server = utf8_unicode_ci
character-set-server = utf8

Sadly, all this did not help one bit. Upon further analysis, I arrived at the conclusion that the underlying data was still in "broken" form even if the settings had the character set changed. The data itself has to be rewritten in UTF-8, so I needed to dump the database and reload it in the correct character set. First, the dump:
mysqldump -u root -p --default-character-set=latin1 data_database > dump.sql

The "default-character-set" flag was set to "latin1" to ensure that the data is dumped in its originally saved character set. In the dumped file, I changed all the "latin1" strings into "utf8mb4".

Now I simply had to restore it back, but the "Specified key was too long; max key length is 1000 bytes" error prevented me from restoring some of the tables. I tracked the problem down to the limitation of the MyISAM database type. Because the "VARCHAR" data type for a column needs 3 times more space for UTF-8 than Latin1, the character set change caused the key length to exceed the 1000-byte limit. With InnoDB database type, it was 3072 bytes by default since MySQL 5.7.7.

Because of this, I changed the database type mentioned in the file from MyISAM to InnoDB. So why was it set to MyISAM in the first place? It was because Full-text index was not available for InnoDB at the time of the database creation. It was enabled in 2011 with MySQL 5.6.

With both the database type and character set changed in the dump file, I restored the database like this:
mysql -u root -p --default-character-set=utf8mb4 data_database < dump.sql

I could now see that all the Korean text appeared correctly in the database. It would also look right on the website if I kept the changes to the my.cnf file mentioned earlier. Finally, I migrated the database to MySQL 8.0 again, and ran the "mysql_upgrade" command. Everything was working as intended, and I no longer needed the changes to the my.cnf, so those were removed.

Long story short, initial database settings from 13 years ago almost held me back from upgrading to the newest MySQL version, but all of them are now fixed.
Defined tags for this entry: , ,

Copyright (C) 1996-2024 Woo-Duk Chung (Wesley Woo-Duk Hwang-Chung). All rights reserved.