美容体重というもの

突然だが、ダイエットをしてみようと思い立った。これは実験である。

私(40代・男性・ホワイトカラー)の体重は現在、54.2kgであり標準体重よりも2kgほど軽い。健康の上ではダイエットの必要はない。

これを「美容体重」とされる51.2kgまで落としてみようと思う。

「美容体重」とはなんであるか説明しなくてはならない。それは「BMIが20となる、見た目がスリムな体重」である。

女性たちの世界にはこのような格言がある。「標準体重はデブの入り口」

では一体どのような体重なら「デブ」ではない、あるいは「美しい」体型とされるのか。それが「美容体重」である。彼女たちの世界にはまた「モデル体重」という概念もあり、それはBMIが18となるような体重を指す。彼女たちの定義に従えば身長が170cmの人類に対する各体重は以下のようになる。

項目 体重 kg
標準体重 63.58
美容体重 57.8
モデル体重 52.02

私の場合、骨格が華奢なのか筋肉が多いためか、背こそ高くないものの均整は取れており、現在の体重ですでにやや痩せて見えるくらいのはずである。

疑問はここである。

  • ならば、彼女たちが言う「美容体重」なるものは、実は痩せすぎに見える体重なのではなかろうか。

これを立証するためには、女性の身長と体重を聞き出し、その女性がその時点で美容体重にあるならば彼女が痩せ過ぎに見えるかどうかを判定すれば良い。
しかしながら、これにはいくつかの問題点がある。

  1. ある女性が美容体重にあるかどうかは聞いてみないと分からず、ちょうど美容体重にある女性に行き着くまでに多くの試行を繰り返す必要がある。
  2. 女性には嘘をつく権利があると考えられており、得られる情報が正しいとは限らない。
  3. そもそも何よりも女性に体重を聞くのはマナーに反する。


以上の理由で、この方法は実用的とは言えない。
もうひとつのやり方は、私自身の体重を「美容体重」にし、その時点での自身の体型が美学上、最適と感じうるかあるいは「痩せすぎ」と見えるかを判定することである。

今回の実験では私の社会的声望を傷つけかねない前者のアプローチをとることはせず、後者の手段によって既に述べた以下の命題についての結論をえることとしたい。

「『美容体重』なるものは、実は痩せすぎに見える体重なのではなかろうか」

ついでに折にふれてはダイエットに役立つ商品をアフィリエイトで紹介し、小遣いの足しになればいいなとも思う。

Ubuntu 16.04 (Unity)でnatural scrollingにする(マウスホイールの上下を逆にする)

Ubuntuではまさにこの目的のために"Natural Scrolling"というアプリがあるのだけれど、スクリーンがロックされたあとや、サスペンドハイバネーションから回復した後に、もとに戻ってしまう。

想像なのだけれど、Natural Scrollingアプリケーションが監視しているdbusからのメッセージがUnity向けに設計されていないのであろう。しょぼい話だ。

直し方だが、こういう方法はどうだろう。以下の内容で~/bin/natural.shを作成する。

This article is about how to fix an issue where "Natural Scrolling" doesn't work after Screen Unlock, resume from suspension and hibernation. IMO it's because the application's design which doesn't consider usages under Ubuntu Unity. Here's a quick fix for it. I hope it helps you.

#!/bin/bash

function go_natural() {
  for i in $(xinput | grep 'slave  pointer' | head -n -0 | cut -f 2 -d '=' | cut -f 1) ; do
    xinput --set-button-map $i 1 2 3 5 4 7 6;
  done
}

go_natural

dbus-monitor --session "type='signal',interface='com.canonical.Unity.Session'" | \
  ( while true
    do read X
       if echo $X | grep "UnlockRequested" &> /dev/null; then
     go_natural
       fi
    done )

次に

chmod 755 ~/bin/natural.sh

として実行権限を与える。 このファイルをStartup Applicationsに登録する。

f:id:dakusui:20180127051002p:plain

これでひとまず手元のマシンでは所期の動作になるが、今年の4月にUbuntu 18.04にするとどうせまた直さないといけないんだろうな。

mozcのデフォルトをひらがな入力モードにする

Ubuntu 16.04や18.04ではmozcが使える。なれてしまうとanthyには戻れない。 が、mozcはmozcで、ログイン後の入力モードがデフォルトでDirect Input(直接入力)になっていて、しかも私のキーボードではひらがな入力モードに変更できない。なので、毎度毎度マウスを操作してひらがな入力モードに変更しなくてはならない。これが嫌で一度anthyに戻そうとしたが、やはり変換精度の差はいかんともしがたい。mozcを使うときは日本語を使いたい時のはずなので、どのような経緯でこのような仕様になったのか、不思議なところであるがこの際、どうでもいい。

ということでこれを直すことにする。 なお、この手順はUbuntu 20.04でもそのまま使えるとする複数の報告がある。 当エントリに言及していただいていることに感謝したい。 また、この手順は依然としてUbuntu 22.04でも必要であり、そのまま使える。

前提として、これは設定でどうにかする方法はなく、結局ソースの変更が必要である。[1]

mozcのレポジトリをクローンしdockerを使ってソースからビルドする方法もあるが、その後のインストールでかったるいことになりそうだ。 ということでUbuntuのソースパッケージからビルドすることにする。

ソースパッケージを以下のようにして入手

sudo apt update
sudo apt upgrade -y
sudo apt install build-essential devscripts -y
sudo apt build-dep ibus-mozc -y
sudo apt install debhelper -y
apt source ibus-mozc

[1]に示された修正を行う。

emacs -nw $(find . -name property_handler.cc)
// Some users expect that Mozc is turned off by default on IBus 1.5.0 and later.
// https://code.google.com/p/mozc/issues/detail?id=201
// On IBus 1.4.x, IBus expects that an IME should always be turned on and
// IME on/off keys are handled by IBus itself rather than each IME.
#if IBUS_CHECK_VERSION(1, 5, 0)
const bool kActivatedOnLaunch = true; //false;
#else
const bool kActivatedOnLaunch = true;
#endif  // IBus>=1.5.0

ビルドを行う。

cd mozc*
dpkg-buildpackage -us -uc -b

インストール

sudo dpkg -i ../mozc*.deb ../ibus-mozc*.deb

再ログオン後、mozcのデフォルト入力モードがHiraganaになるはずである。

Misc

この記事は、「Ubuntu 16.04 aarch64環境でmozc pkgが無いのでsource pkgからbuild」[2]を参考にして執筆した。 平成30年(2018年)10月11日に試したところ、本手順はUbuntu 18.04でも問題なく利用できる。 また、令和3年(2021年)6月18日に、本手順はUbuntu 20.04でも問題なく利用できる旨の複数の報告があるようなので、その旨冒頭に記載した。

また、ここに記された手順は無保証であり、その結果について執筆者は責任を負わない。フィードバックや修正提案を採用する義務を執筆者は負わないが、それらは歓迎される。

一定の閲覧があるとちょっと嬉しい気持ちになってしまうのは事実なのだが、ibus-mozcが改良され或いは代替の手段が整備されることによって、このエントリが必要なくなることを願っている。

References

  • 1 Mozc issue-#381
  • 2 Ubuntu 16.04 aarch64環境でmozc pkgが無いのでsource pkgからbuild

How to convert all my audios into mp4 at once

I'm using Qnap NAS and recently I came to want to play all the media in living room at home. What is the best appliance?

Actually, there is a long story.

Apple TV? No it plays media only in my iPhone. And Wi-fi at home isn't good when a microwave is working.

Chromecast? was not a good idea for similar reasons.

Purchase a new network media player? No. It doesn't play ALAC, in which most of my audio files are encoded. Ones play ALAC cost 1,000 - 2,000 dollars. And those expensive ones do not look playing videos.

Finally I chose Sony PlayStation 3, which I bought several years ago. And since it doesn't play ALAC/FLAC, I need to convert thousands of my files.

Is there good solution in Linux? I couldn't find it. 'SoundConverter' looked nice, but it didn't understand ALAC. And only writes MP3 not MP4 (PS3 plays both, but I liked the latter).

Anyway I wrote a command line below to perform conversion from my audios to mp4 format.

export destroot="/mnt/livius/Qmultimedia/PS3/Music" && \
export srcroot="/mnt/livius/Qmultimedia/iTunes/iTunes Media/Music" && \
find "$srcroot" \
    -type f \
    -exec \
        sh -c '\
            export fname="${1#/*Music/}" && \
            export destdir="$destroot/$(dirname "${fname}")" && \
            mkdir -p "$destdir" && \
            /usr/bin/avconv -y -i \
                "$srcroot/$fname" \
                 -vn -acodec libvo_aacenc -b:a 320k -ac 2 -ar 48000 -b:a 320k \
                "$destroot/${fname%.*}.mp4" \
            ' \
            "Convert all my music into MP4" {} \;

Writing S-expression inside Java codes

I recently created a library that evaluates java.lang.Objects as S-expressions (my summer homework;)). In other words, you can embed a LISP program inside Java code, but unlike fun4j you don't need to write your LISP code as a String. You can write it as a real Java program. That is,

 

Basic.eval(

    progn(
        assign($("i"), 0),
        loop(
            lt($("i"), 10), 
            print(format("@@@@@@@@ %s @@@@@@@@\n", $("i"))), 
            assign($("i"), add($("i"), 1))
        )
    )
);


where progn, assign, loop, lt, print, and so on are names of Java methods that return evaluatable objects (java.lang.Object[]'s) and Basic.eval is a function that does the 'evaluate' on given java.lang.Object.
This program produces the output below

 

@@@@@@@@ 0 @@@@@@@@

@@@@@@@@ 1 @@@@@@@@

@@@@@@@@ 2 @@@@@@@@

@@@@@@@@ 3 @@@@@@@@

@@@@@@@@ 4 @@@@@@@@

@@@@@@@@ 5 @@@@@@@@

@@@@@@@@ 6 @@@@@@@@

@@@@@@@@ 7 @@@@@@@@

@@@@@@@@ 8 @@@@@@@@

@@@@@@@@ 9 @@@@@@@@ 


It's not yet published in Maven's Central Repository, but will become available soon.
The source code is found here: https://github.com/dakusui/petronia/