2018年3月26日月曜日

SwissMicros DM42 及び DM15Lのfirmwareがupdateされた

SwissMicros DM42とDM15Lのfirmwareがそれぞれupdateされた。

DM42はv3.5が、DM15Lはv26がそれぞれ最新のfirmware。詳しくはlink先を参照のこと:

cf. [SwissMicros | Firmware](https://www.swissmicros.com/firmware.php)

また、firmware updateの方法については以前書いているので参照されたい:

https://typeinf-memo.blogspot.com/2017/12/swissmicros-dm42firmware-update.html ※DM42のfirmware updateについて
https://typeinf-memo.blogspot.com/2016/07/swissmicros-dm-15lfirmware-upgrade.html ※DM15Lのfirmware updateについて

2018年3月17日土曜日

Raspberry Pi 3 Model B+が発表された

先日、Raspberry Pi財団よりRaspberry Pi 3 Model B+ (3B+)が発表された。

cf. [Raspberry Pi 3 Model B+ on sale now at $35 - Raspberry Pi](https://www.raspberrypi.org/blog/raspberry-pi-3-model-bplus-sale-now-35/)

Raspberry Pi 3 Model Bからの主な改良点は:

* SoCがBCM2837B0へupgrade (1.4GHz)
* SoCが金属ヒートシンクに覆われた → 放熱性up
* GbEへの対応 (3までは100BASE-Tだった) ※USB2.0 (up to 480MB/s)での接続
* PoEへの対応 ※HATによる対応
* Wi-Fiのupgrade (802.11ac対応、特に5GHz帯の改善)
* 電源の強化

など、Network関連の強化 (connectivity)に主眼が置かれている。

なお、価格は据え置かれて$35のまま。例として、RSコンポーネンツでは「発売開始時期未定」となっているが、日本では電源を除いて4500円ぐらいで購入できるだろう (2018-03-17現在入手可能な3Bは税込み4320円)。

2018年3月16日金曜日

SwissMicros DM42のfirmware 3.4aが公開された (3/7)

DM42のfirmware 3.4aが3/7に公開されていたのでupgrade。

3.4ではoccasionally lockupなどの不具合に対する修正が行われているので、所有者はfirmware updateを検討されたい。

cf. [Firmware History](https://www.swissmicros.com/dm42/firmware/history.html)


2018年3月12日月曜日

SwissMicros DM42で簡単なprogramを組んでみる

SwissMicros DM42 (HP-42Sの互換機)で、有名な「ユークリッドの互除法」(Euclidean algorithm)を実装してみる。


ユークリッドの互除法について


ユークリッドの互除法は2つの自然数xとyがあった時に、その最大公約数 (xとyに共通する最も大きな約数、割り切る数)を求める手順だ。面倒なので、最大公約数を以後GCD (greatest common divisor)と書く。

古代ギリシアの数学者ユークリッド (Euclid)によって記された『原論』(Elements)の中に書かれており、紀元前300年ごろには存在していたというから凄い。

このアルゴリズムでは、以下のように計算を進める:

1. xをyで割った余りをrとする
2. rが0でなければ、x←y、y←rとして1.に戻る
3. rが0ならば、その時のyが元々のxおよびyのGCDである


電卓を叩いて確かめてみる


例として、DM42を使い手動で1785と374のGCDを求めてみる。

使うDM42の機能について:

* MOD → y÷xの余りを計算してxに積む
* LASTX → 直前までxに入っていた内容を保持するL-registerの内容をxに積む
* x≶y → X-registerとY-registerの内容を交換する


1. 1785
2. ENTER
3. 374
4. MOD ⇒ 289 ※余りは0ではない
5. LASTX ⇒ 374 ※直前のxの内容を呼び出した
6. x≶y ⇒ 289 ※xとyの内容を交換
7. MOD ⇒ 85 ※余りは0ではない
8. LASTX ⇒ 289
9. x≶y ⇒ 85
10. MOD ⇒ 34 ※余りは0ではない
11. LASTX ⇒ 85
12. x≶y ⇒ 34
13. MOD ⇒ 17 ※余りは0ではない
14. LASTX ⇒ 34
15. x≶y ⇒ 17
16. MOD ⇒ 0 ※余りが0になった!
17. LASTX ⇒ 17 ※これが1785と374のGCD

MODの結果が0になるまで、ひたすらLASTXしてx≶yしてMODする、を繰り返すだけでGCDが計算できるとわかる。このような単純作業はもちろん機械にやらせるべきだ。


DM42でprogramming


DM42 (HP-42S)に限らず、RPN方式の関数電卓では基本的にキー入力の羅列がそのままprogramになる。ただし、practicalなprogramを記述するには、LBLや条件分岐やjump命令などが必要になる。

DM42のprogramの構造は:

LBL "LABEL"
...
END (或いはRTN)

のようになっている。LBL (label)はprogram (或いはsubroutine)の名前で、様々な手順が続き、最後はRTN (return)或いはENDである。


PRGM (□+R/S)でprogram modeに入る。

先頭の行番号はDM42が勝手につけてくれるので無視すると、こんな感じに書ける:

LBL "GCD"
LBL 02
MOD
X=0?
GTO 01
LASTX
X<>Y
GTO 02
LBL 01
LASTX
RTN

EXITでprogram modeを抜ける。

programを実行するにはXEQを押す。すると、software menuにprogramで指定したlabel (LBL)が表示されるので、GCDを選ぶ。ただし、今回のprogramはとにかく手順をそのまま書いただけなので、予めY-registerに大きい方の自然数を、X-registerに小さい方の自然数をそれぞれ積んでおく必要がある。

1. 1785 [ENTER]
2. 374
3. XEQ → GCD ⇒ 17

X-registerには17が残っているはずだ。


そして最小公倍数へ


ちなみに、GCDとくればLCM (least common multiple)——最小公倍数も忘れてはならない。2つの正の整数について:

GCD(x,y) LCM(x,y) = xy

という関係が成り立つと知られているので、GCDが分かっていればLCMも計算できる。

LCM(x,y) = xy / GCD(x,y)

1785と374の場合は39270である。


2018年3月11日日曜日

Seagateの12TB (≒10.91TiB) HDDを導入した

メインマシン兼NASとして使っているPCのデータストレージとして、これまではWestern DigitalのNAS向け製品であるWD RedシリーズのWD80EFZX (8TB ≒ 7.28TiB)を使っていた。これを新たにSeagateのNAS向け製品であるIronWolfシリーズのST12000VN0007 (12TB ≒ 10.91TiB)へ換装した。ここ数年はWestern DigitalのHDDばかり購入してきた (Redの6TB、8TB)ので、SeagateのHDDを購入するのは久し振りだ。

換装した一番の理由は、WD80EFZXの残り容量がほぼ無くなったこと。丁度決算期で普段より値引きが期待できる時期なのと、前回HDDを導入してから2年ほど経っているので頃合いなこともあった。

LUKS+Btrfsで運用している。RMAの兼ね合いもあるので、2年くらい持てばいいのだが。


S.M.A.R.T.の情報を見てみる


Linuxなので、smartctlを使ってみた:

SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   079   068   044    Pre-fail  Always       -       74220560
  3 Spin_Up_Time            0x0003   097   097   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       2
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   068   060   045    Pre-fail  Always       -       5995223
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       15
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       2
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   064   062   040    Old_age   Always       -       36 (Min/Max 25/38)
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       2
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       2
194 Temperature_Celsius     0x0022   036   040   000    Old_age   Always       -       36 (0 25 0 0 0)
195 Hardware_ECC_Recovered  0x001a   040   036   000    Old_age   Always       -       74220560
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0023   100   100   001    Pre-fail  Always       -       0
240 Head_Flying_Hours       0x0000   100   253   000    Old_age   Offline      -       15 (143 172 0)
241 Total_LBAs_Written      0x0000   100   253   000    Old_age   Offline      -       13528061790
242 Total_LBAs_Read         0x0000   100   253   000    Old_age   Offline      -       455020

WDのHDDと違い、SeagateのHDDでは1 Raw_Read_Error_Rateや7 Seek_Error_Rate、195 Hardware_ECC_Recoveredといった値が物凄い勢いで増加しているので、最初diskの故障を疑った。

しかし、これらのraw valueをそのまま解釈するのは無意味であり、本当に気にするべきなのは5 Reallocated_Sector_Ctや197 Current_Pending_Sector、198 Offline_Uncorrectableの値であるとの情報があった。

* [Just got a Seagate Ironwolf... are these SMART readings normal? : DataHoarder](https://www.reddit.com/r/DataHoarder/comments/61pmsb/just_got_a_seagate_ironwolf_are_these_smart/)
* [Seagate製HDDが故障する直前のsmart値 – UbuntuによるEco Linuxサーバ構築記](http://eco.senritu.net/seagate%E8%A3%BDhdd%E3%81%8C%E6%95%85%E9%9A%9C%E3%81%99%E3%82%8B%E7%9B%B4%E5%89%8D%E3%81%AEsmart%E5%80%A4/)


RAIDでもNAS専用機でもなくsingle disk換装を選んだ理由


Single disk換装を行ったのは、費用や運用の面で最も適していると考えたからだ。

他にはNASを組む (或いはNASキットを買う)、RAIDを組むなどの方法もあるが:

* 初期コストが高い (diskが複数本必要、それを格納できるケースやマザーボード或いはNAS本体、etc)
* 運用の複雑さが増す
* 電気代が増す
* 総容量が大きくなるとバックアップを取るのが難しくなる

といった問題がある。Single disk運用は、そのdiskが故障すると終わりという問題があるものの、これまで使っていたdisks (8TBと6TB)に定期的にbackupを取ることで影響をある程度緩和する方針を取る。

raidzを使い、信頼性のあるきちんとしたfile serverを構築する場合には、以下のpageが参考になるだろう:

Windows 10 + AMD RX480な環境でFinal Fantasy XV Playable Demoが落ちることがある

Final Fantasy XVのPlayable Demoが配信されていたのでやってみた。取り敢えずFullHD程度ならRX480でもさほどストレスなく遊べる印象 (後でベンチマークソフトを走らせてみたら「やや快適」だった)。

男ばっかり4人のチームで、ホストが旅するゲームとか言われていたりしたけど、実際にやってみると結構面白いと感じている。

ただ、3度も同じような場所で止まったので、おそらくdriver側 (Adlenarinの最新版)に問題ありな雰囲気。

また、数日後には別の場所で画面がピンク色になって入力を受け付けなくなり、Windowsごと落ちてrebootした。

1年くらい前、『NieR:Automata』 (Steam版)でもdriverが安定するまでに時間がかかったのを思い出した。ただ、Automataとは違ってFFXVはオートセーブなのには結構救われた印象がある。

最新のEmacsにてset-default-font (obsoleted)が削除された

commit f1c48b0ec521744826ed43ae27eed0e152c472bfにて、22.1の頃にobsolete扱いになっていたfunctionsが削除された。

set-default-fontもその中の一つで、これで指定していたdefault fontが適用されなくなった。代わりにset-frame-fontを使えとあるので、そのまま書き換える。

eg. Default fontとしてRictyの12ptを使う

× (set-default-font "Ricty-12")



○ (set-frame-font "Ricty-12")

2018年3月3日土曜日

Firefox (やその系列の) web browserでJavaScriptによるcontext menuの禁止を解除する

一部のwebsiteではJavaScriptの機能を応用 (悪用?)してcontext menuを出せないようにしている。今時のwebsiteをまともに閲覧するにはJavaScriptを丸ごとdisableするのも難しい (一応、No Scriptのようなextensionsを入れるという手はある)。

そこで、JavaScriptの機能のうち、context menuを変更するための機能のみをdisableしてみる。

* URL barに"about:config"と入力
* dom.event.contextmenu.enabledを"false"にする

これでJavaScriptによるcontext menuの変更 (禁止含む)を解除できる。

以前はPreferenceの画面にJavaScriptの機能を細かく制御できるoptionがあった気がするが、最近のversionだと無くなっている。


gitでuntrackedなfilesをまとめてrmする

gitで最新版を追い掛けるだけの使い方をしていると、何らかの理由で手元のworking directoryにuntrackedなfilesが残ってしまうことがある。

1つや2つならまだ良いが、それ以上となると1つ1つに対して個別のpathを指定してrmを発行するのは面倒過ぎるし、そもそもprogramを嗜む者の端くれとしてあるべき姿ではない。

 % git status -s | awk '{print $2}' | xargs rm -f

で片付けられる。一応rm -fを実行する前にどんなことになっているのかlsにpipeするなどして確認しておくと安全。


mesalibをbuildする際にdefault以外のversionのLLVMを使う

configure scriptに対応するoptionがあるので使う。

--with-llvm-prefixがこれで、例えば2018-02-20現在のrelease版のLLVMは5.0.1だが、Debian unstableに入っているLLVM 7を使いたい場合:

% ./configure --with-llvm-prefix=`llvm-config-7 --prefix`

のように指定する。