Yabu.log

ITなどの雑記

青汁を一週間飲み続けました

近所の世間話がきっかけで青汁やさんの回数券を買ってほぼ毎日飲むという謎ムーブをかましました。

今週は100mlの回数券を買って平常時は100ml、たまに2枚使って200mlを飲むという感じでほぼ毎日飲めました*1

f:id:yuyubu:20190220004824j:plain
最終日の青汁。その後も飲み続けてるけど。

効果はあったのか

今現在身体的に特に効果は出ていません。若干乾燥が改善したくらい*2

私は成人男性にしては野菜を食べている方だと思うので、おそらく野菜不足を解消することによって発動する効果は現れないと思います。しかしケールの絞り汁を日常的に摂取した経験はないためケール固有の効果は出るかもしれません。

個人的な生活習慣の問題はコンビニ飯やジャンクフードが多いことと運動不足なので、そちらの改善を計画的に行わないと青汁を飲む意味がないような気がします。

気づいたこと

トッピングせずに青汁を飲む人はどうも少数派のようです。 飲んでいる青汁はいままで飲んだことのないようなハードコアな味がします。 他のお客さんもだいたいゴマ、はちみつ、リンゴ酢などを入れて飲みやすくしている人が多い印象です。私も初日は鼻をつまんで無理やり流し込むというスタイルで飲んでいましたが、いまは慣れたので普通に飲めています。

今後

回数券の量を100mlから200mlに増やして日常的に200ml飲むように変えて様子を見ようと思います。あと、豆腐屋さんが作っている豆乳もいいらしいのでそちらも試すかもしれません。

*1:Java読書会の日は青汁の開店時間中に寄れなかったのでコンビニで買ったパック青汁で凌ぎました

*2:エアコンで暖房して加湿器を使っていないので湿度が以上に低い部屋で暮らしています

virtualbox でホスト(mac)とゲスト(ubuntu)のclipbordの共有がうまくいかない(解決)

色々生産性が悪いので調査した。

バージョン

f:id:yuyubu:20181212145227p:plain
双方向を選択

巷ではVirtualboxの設定>一般>高度の「クリップボードの共有」を「双方向」にすることで解決するという記事が多いが、 それだけでは解決しなかった。追加でVM側にVBoxClientを導入することで解決した。

yy@yy-VirtualBox:~$ sudo apt-get install virtualbox-guest-x11
yy@yy-VirtualBox:~$ sudo VBoxClient --clipboard

参考:https://superuser.com/questions/1318231/why-doesnt-clipboard-sharing-work-with-ubuntu-18-04-lts-inside-virtualbox-5-1-2

早速ターミナルで試してみた所、Ctrl + vが使えなくて調べた結果。。。

ターミナルではCtrl + Shift + Vが貼り付けらしい。

https://askubuntu.com/questions/202459/keyboard-shortcut-for-pasting-on-the-gnome-terminal

「チョコレートの世界史」を読んだ

バレンタインデー記念エントリー。ちょうど時期が良いので昔読んだ本の感想を投下。

感想

若干ネタバレになりますが、本書は某大学のロウントリー社(オリジナルのキットカットを製造した会社)の資料コーナーを著者が訪れたことが原点にあるらしいので若干ロウントリー社贔屓な歴史書になっている。

チョコレートは以外と歴史が浅く、特に今の固形のものが食されるようになってからまだ200年も建っていない。本書には中南米がスペインに侵略されてからカカオを加工する技術がヨーロッパ諸国で発展してキットカットが出来上がる歴史が書かれている。

個人的にはチョコレートの成分とかが詳しく書かれているところが分かりやすかった。カカオポッド、カカオパウダー、カカオバターカカオマス、カカオニブの違いは全くわからなかったけど、本書で理解した。

ノート

チョコレートの品種は結構コーヒーに似てる

カカオ豆には、ポリフェノールの含有量が異なる三種類の系統がある。クリオロ種、フォラステロ種、トリニタリオ種という。

クリオロ種でビター系のチョコレートを作ると、抜群の味になる。クリオロ種は生の豆を食べても美味に感じるという。しかし、病気に弱いため、栽培が難しい。稀少品種で、現在世界で生産されているカカオ豆の一%程度の生産量にすぎない。フォラステロ種は、ポリフェノールを多く含む。栽培が容易な強い品種で、世界の生産量の約八五~九○%を占める。味にパンチはあるが、苦味が強い。そのままでは、ビター系のチョコレートには向かない。

コーヒーも似た感じでアラビカ種とロブスタ種があり、

  • 美味しいけど病気に弱く量が取れないアラビカ
  • 味は劣るけど病気に強くで量が取れるロブスタ

という風になっている。この種構成に関して、コーヒーと比べた時のチョコレートの特筆点は美味しい方(クリオロ)が極端に出回っていない、という点だと思う。

コーヒーはアラビカ種の方が消費量が多い*1。私個人の経験でもロブスタ100%のコーヒーは飲んだ覚えがない。逆にチョコレートに関してはこの本を読むまでクリオロ種のものは食べたことがなかった。

お店で買えるクリオロ種チョコレート

市販されているものの中で安いクリオロ種のものはカルディに売ってあったペルー産の板チョコがあった。こちらはカカオ分の高いブラックチョコレートだが、評判通りブラックチョコレートでも美味しく、他のものによくある強い苦味がなく美味しく食べられた。値段も安かったのでおすすめ。ちょっと前流行ったbean to barのチョコレートは高すぎる(板チョコ1枚くらいの量で数千円)ので個人的に日用するのは無理。

チョコレートの製造方法とかややこしい成分とか

  • カカオポッドからカカオ豆を取り出す
  • カカオ豆を砕きカカオニブ(胚乳)を取り出す
  • カカオニブをローストする
  • カカオニブをすりつぶしてカカオマス(ドロドロ状のものを作る)

ここまでがチョコレートとココアパウダー製造の共通部分。ここからが工程が違っている。

一応チョコレートの作り方はここに色々応用があり、例えばホワイトチョコレートを作る際はカカオマスは使わずココアバターのみを使う。ここアバターの代わりに融点の高い油を使えば高音でも溶けにくいチョコレートになる。戦中は東南アジアや潜水艦内(熱がこもると40度を超える)内でも日本兵の食用に作っていた。ちなみにスーパーでみる殆どの普及品チョコレートはにはココアバターだけでなく植物性油脂も使われている。

商品分類(名称の分け方)

チョコレート分が多い順に

チョコレート>ミルクチョコレート>準チョコレート>準ミルクチョコレート

カカオ分35%以上かつココアバター18%以上がチョコレートを名乗れる

年表

  • (~1521年まで)オルメカ文明/マヤ文明がクリオロ種をメインにカカオ崇拝(通貨としても利用)
  • (1521年)滅亡したアステカ王国らへんを植民地にしたスペインがカカオを広め始める
  • スペイン人がココアに砂糖を入れ出すようになってくる
  • メキシコでカカオの消費量増加に伴いエルサルバドルエクアドルベネズエラがフォラステロ種の産地として台頭
  • 味の悪いフォラステロ種の増加によりカカオの価格が下落し、市民に普及
  • (1660年頃)フランス人がカリブ海諸島(マルチニーク島)にカカオを持ち込んで栽培を始める。
  • (1757年)トリニダード島(スペイン領後のイギリス領)でクリオロ種が病気のため壊滅。生き残ったクリオロとフォラステロ種を交配してトリニタリオ種が作られる。
  • (1828年)ヴァン・ホーテン(オランダ)がココアパウダーを作る発明から特許を取得(カカオマスからここアバターを搾り取る技術)
  • (1879年)アフリカ本土(ガーナ)にフォラステロ種が移植される
  • (1847年)ブリストルでジョーゼフ・フライがカカオマスにここアバターを混ぜて固形チョコレートを初めて作る。
  • (1849年)ココアパウダーに色々混ぜて売るのが流行る。その流れで粉末ミルクを混ぜたミルクココアが発明される
  • (1876年)アンリ・ネスレ(スイス)がコンデンスミルクをチョコレートに混ぜてミルクチョコレートを発明する
  • (1878年) 日本で初めてチョコレートが売られる@米津風月堂
  • (1918年)日本で初めてチョコレートが製造される@田町by森永製菓
  • (1935年)ロウントリー社キットカット販売開始。当初の商品名はチョコレート・クリスプ
  • (1941年)原材料不足・価格統制などにより商品名をチョコレートクリスプからキットカットに変え、戦時中は青いラベルで売り始める
  • (1958)ブリュッセル万博を機に家族経営小規模生産だったベルギーチョコレート(ノイハウス、ゴディバ等)が世界的に注目を浴びる
  • (1988)ネスレがロウントリー社を買収。以後アメリカ以外ではネスレ社がキットカットを販売。アメリカではハーシー社が販売権保有

戦時中の日本のチョコレート事情

  • 1940年12月でカカオ豆の輸入ストップ
  • 戦中は森永製菓が50人社員をインドネシアに派遣し、現地のカカオでチョコレートを作っていた
  • 代用チョコレート
    • カカオの代わり:百合根、チューリップ球根、オクラ、チコリ、芋、小豆など
    • ココアバターの代わり:大豆油、ヤシ油、ヤブニッケイ油など
  • 進駐軍が消費していたチョコレートはハーシー社*2のチョコレートといい、闇市に出回っているものや「ギブミーチョコレート」でもらえるやつはこれらしい。

余談:バレンタインデーに関する記載が一切ない

本書を「バレンタイン」で検索をかけても前書きで1単語だけ登場するだけで詳しい解説とかは一切なかった。 広告とかマーケティングの章は一応あるけど、チョコ業界的にバレンタインデーが成功したのは日本だけなのでしょうか。

*1:要出典

*2:現在もアメリカのチョコ最大手らしい

「RDBMS解剖学 よくわかるリレーショナルデータベースの仕組み」を読んだ

結構古い本です。中古で書いましたが、多分新品はあまり出回っていないと思います。

この本を読んだ動機

  • CC本(Bernstein本)やweikum本をいきなり読むのはきついので、RDBMS(自体の)入門書が読みたい
    • SQLの本は割と何冊か読んだが、DBMS自体について書かれた本はあまり読んでいない。
  • DBのコンポーネントを特定製品に依存しない形式で理解したい
  • 特定の製品に依存していないMVCCの日本語解説を読みたい

などを理由にこの本を読みました。

Concurrency Control and Recovery in Database Systems

Concurrency Control and Recovery in Database Systems

ノート

RDBMSは以下のコンポーネントから構成される

  • SQLを解釈実行するパーツ
  • データベースの構造を司るパーツ
    • カタログ管理
    • インデックス管理
    • バッファ管理
    • ストレージ管理
  • 複数のアプリケーションからの要求や可溶性を司るパーツ

雑感

  • プランには論理プランと物理プランの2種類がある

論理プラン

データベースの処理手順を「関係代数」の言葉で(厳密にはこれだけではないが)書き下したのが「論理プラン」である(p36)

物理プラン

論理プランをコンピュータ上の実行手順に書き換えたものを物理プランという(p36)

  • 論理プランではSQLで書かれた内容を関係代数の操作に書き直す(和、差、共通、選択、射影、直積、結合)
  • 物理プランでは結合アルゴリズム(nested loop/sort merge/hash join)を選んだりスキャン方式(index/table scan)を選ぶ

  • WAL(Write a head log)のメリットがわかりやすく書かれている。

  • ロールバック・ロールフォワードの説明がわかりやすい

    • ロールバックは操作の取り消し(UNDO),ロールフォワードは操作のやり直し(REDO)
    • それぞれの操作にはそれ専用のログを使うUNDOログ,REDOログ
  • Create tableで宣言したテーブル情報は一般に「カタログ情報」というらしい。これは知らなかった。

  • 本書ではMVCCはMVTO (Multi Version Timestamp Ordering)のプロトコルを例に説明されている

微妙な点

  • 記述が若干古い
    • HDDが100GBの時代。
    • もちろんSSDやOn memory DBなんてない
    • JOIN構文がまだ存在していない
      • FROM句にテーブルをカンマ区切りで列挙してWhere句に結合条件を書くスタイル

と、こんな感じです。RDBMSの内部に切り込んでかつ特定製品に依存しないような類書はあまり無いように思います。データベーススペシャリストの獲得を目指す方が副読本として読むのがいいのではないでしょうか。

RDBMS解剖学 よくわかるリレーショナルデータベースの仕組み (DB Magazine Selection)

RDBMS解剖学 よくわかるリレーショナルデータベースの仕組み (DB Magazine Selection)

COBOLが基本情報午後問題から廃止されるらしいので解いてみた&動かしてみた

基本情報の午後試験からCOBOLが廃止されますのでH30秋のCOBOLを解きました。問題自体は完答できて満点でした。それだけだと面白くないのでMacCOBOL環境を構築して実行してみました。

問題はこちらの設問10です。

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2018h30_2/2018h30a_fe_pm_qs.pdf

問題内容

  • 全社員の資格(4つ限定w)の合格状況を管理するプログラム
  • プログラムは半年に一回だけ実行されるバッチ。この利用頻度だとCOBOLからリプレースされないだろうとちょっと納得できる設定。
  • 繰り返しと分岐をきちんと理解していないと完答できないような良問だと個人的に思う。

情報サービス企業であるP社には社内資格として資格1~4があり,従業員に取得を奨励している。 社内資格を取得するための試験は定期的に実施しており, 全従業員の保有状況を保有資格ファイルで管理する。P社の事業年度は4月から翌年3月までであり, 上期(4月~9月)と下期( 10 月~翌年3月)の2期から成る。 資格試験に合格した従業員の情報は合格ファイルに1期分を蓄積する。 上期の合格者を蓄積した合格ファイルは 10 月初めに,下期の合格者を蓄積した合格ファイルは 4月初めにプログラムを実行して,保有資格ファイルに反映する運用である。

ざっくり概要がわかる程度に紹介しましたが、完全版が見たい人は上記リンク先を見てください。

環境

$ cobc --version
cobc (OpenCOBOL) 1.1.0
Copyright (C) 2001-2009 Keisuke Nishida / Roger While
Built    Aug 24 2018 04:30:53
Packaged Feb 06 2009 10:30:55 CET

ソース&ビルド

open-cobolをインストールします

brew install open-cobol

適当に写経したままだと動かなかったので先頭8行を足した。

IDENTIFICATION DIVISION.
PROGRAM-ID. QLF.
ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
      FILE-CONTROL.
      SELECT SRT-FILE  ASSIGN TO 'sort.txt'.
      SELECT QLF-FILE ASSIGN TO 'qlf.txt'.
      SELECT PAS-FILE  ASSIGN TO 'pas.txt'.
DATA DIVISION.
FILE SECTION.
  SD SRT-FILE.
    01 SRT-REC.
       02 SRT-NO        PIC X(8).
       02 SRT-CD        PIC 9(1).
       02 SRT-DATE      PIC 9(8).
  FD QLF-FILE.
    01 QLF-REC.
       02 QLF-NO        PIC X(8).
       02 QLF-INF.
          03 QLF-DATE      PIC 9(8) OCCURS 4.
  FD PAS-FILE.
    01 PAS-REC.
       02 PAS-NO        PIC X(8).
       02 PAS-CD        PIC 9(1).
       02 PAS-DATE      PIC 9(8).
WORKING-STORAGE SECTION.
77 SRT-FLAG       PIC X(1) VALUE SPACE.
   88 SRT-EOF        VALUE "E".
77 CR-NO          PIC X(8) VALUE SPACE.
PROCEDURE DIVISION.
MAIN-PROC.
    OPEN I-O QLF-FILE.
    SORT SRT-FILE ASCENDING KEY SRT-NO
         USING PAS-FILE
         OUTPUT PROCEDURE IS RET-PROC.
    CLOSE QLF-FILE.
    STOP RUN.
RET-PROC.
    PERFORM TEST BEFORE UNTIL SRT-EOF
       RETURN SRT-FILE AT END    SET SRT-EOF TO TRUE
                                 PERFORM WRI-PROC
                       NOT AT END PERFORM UPD-PROC
       END-RETURN
    END-PERFORM.
UPD-PROC.
    IF  SRT-NO NOT = CR-NO THEN
       PERFORM WRI-PROC
       MOVE SRT-NO TO QLF-NO
       READ QLF-FILE END-READ
       MOVE QLF-NO TO CR-NO
    END-IF.
     MOVE SRT-DATE TO QLF-DATE(SRT-CD).
WRI-PROC.
    IF CR-NO NOT = SPACE THEN
       REWRITE QLF-REC
    END-IF.

ちなみにプログラムの大部分は 【基本情報技術者試験】平成30年 秋期 午後 問題と解答 からコピペしたものを手直しした。

上記ファイルをコンパイルします

$ cobc -x --free -W prog.cob 

実行前ファイル内容確認〜実行

必要になるファイルを用意する。sort.txt処理に必要な中間ファイルなので空でOK

$ ls
pas.txt     prog        prog.cob    qlf.txt     sort.txt
$ cat pas.txt 
00000001220180203
$ cat qlf.txt 
00000001
0000000220170101
00000003

実行〜結果確認

$ cat qlf.txt 
00000001
00000002
00000003
$ ./prog
$ cat qlf.txt 
00000001        20180203        
00000002                        
00000003                        

無事00000001の社員の資格2の合格日が更新されました。

感想

COBOLは自分の知ってるどの言語よりも自然言語(英文)っぽく書けるように工夫されている。可読性は高いと思う。

参考にさせていただいたサイト

動かす時に少し調べました。

ファイル管理段落

gnucobol - Opening file for reading in COBOL - Stack Overflow

第 5 章 ファイル状態コード

MacにCobolを入れていじってみた話 - Qiita

ubuntuのssh serverに公開鍵認証でログインする

前職ではsshを本格的に使ったことがなく、せいぜい自宅でgithubに公開鍵をupした程度しか使ってなかったのでサーバー側、クライアント側を一通り動かして見ました。

サーバー側のsshの設定

設定ファイルは/etc/ssh/sshd_configなのでコレを編集して様々な設定を適用可能

  • 待受portを22から変更
  • ポートフォワーディングを禁止する
  • パスワード認証を無効化する(常に事前に登録した公開鍵を使う)

※todo:セキュリティ的にましな設定を調べてまとめる

変更を加えたらリスタートしましょう

sudo systemctl restart sshd.service

接続

パスワードを使って接続

クライアント側で実行するとuserのパスワードを聞かれ、ログインできます。

ssh <user name>@<server name(or ip)>

RSAで認証して接続

クライアント側でRSAの鍵を作る

$ ssh-keygen -t rsa

クライアント側のPCから鍵をサーバーに送る

ssh-copy-id -i <key file> <user name>@<server name( or ip)>

クライアント側から秘密鍵を指定して接続

ssh -i <private key file> <user name>@<server name(or ip)>

note複数の鍵がある場合、

~/.ssh/configファイルに設定を書いておくと実行するときにオプションの指定などをすべて省略できるので便利。(ssh <接続名>だけで接続できる)

Host  <接続名1>
  HOSTname <server name (or ip)>
  port <port no>
  User <user name>
  IdentityFile <key file>

Host <接続名2>
  ...(以下略)

切断

exitコマンドで切断可能

weikum本に記載されている全定義の一覧リスト

現在5章を読む勉強会に参加していますが、 5章まで全部読めていません。最近読めていないところを見直すと、理解を曖昧にしていた用語の定義が前半の方に乗っていたので、この際全部調べて定義の掲載箇所を一覧できるものを作ってみました。

下表を参考におっ、こんな定義も乗ってたか!という感じで使ってもらえると嬉しいです。*1

DEFINITION page
2.1 Partial Order 46
2.2 Page Model Transaction 46
2.3 Object Model Transaction 51
3.1 Schedules and Histories 66
3.2 Serial History 67
3.3 Herbrand Semantics of Steps 74
3.4 Herbrand Universe 75
3.5 Schedule Semantics 76
3.6 Final State Equivalence 77
3.7 Reads-From Relation 78
3.8 Final State Serializability 82
3.9 View Equivalence 83
3.10 View Serializability 85
3.11 Monotone Classes of Histories 92
3.12 Conflicts and Conflict Relations 93
3.13 Conflict Equivalence 93
3.14 Conflict Serializability 94
3.15 Conflict Graph (Serialization Graph) 96
3.16 Commutativity Based Equivalence 99
3.17 Commutativity Based Reducibility 100
3.18 Order Preservation 102
3.19 Commit Order Preservation 102
3.20 Closure Properties of Schedule Properties 106
3.21 Commit Serializability 107
3.22 Indivisible Units 111
3.23 Dependence of Steps 113
3.24 Relatively Serial Schedule 113
3.25 Relative Serializability 114
3.26 Push Forward and Pull Backward 116
3.27 Relative Serialization Graph 116
4.1 CSR Safety 130
4.2 Two-Phase Locking (2PL) 134
4.3 Conservative 2PL 142
4.4 Strict 2PL 143
4.5 Strong 2PL 144
5.1 Version Function 187
5.2 Multiversion Schedule 188
5.3 Monoversion Schedule 189
5.4 Reads-From Relation 190
5.5 View Equivalence 191
5.6 Multiversion View Serializability 192
5.7 Version Order 194
5.8 Multiversion Serialization Graph (MVSG) 195
5.9 Multiversion Conflict 197
5.10 Multiversion Reducibility 198
5.11 Multiversion Conflict Serializability 199
5.12 Multiversion Conflict Graph 199
6.1 Object Model History 218
6.2 Tree-Consistent Node Ordering 219
6.3 Object Model Schedule 219
6.4 Serial Object Model Schedule 221
6.5 Isolated Subtree 221
6.6 Layered History and Schedule 222
6.7 Flat Object Schedule 223
6.8 Commutative Operations 224
6.9 Commutativity Based Reducibility 226
6.10 Conflict Equivalence and Conflict Serializability 227
6.11 Tree-Reducible History 229
6.12 Level-to-Level Schedule 234
6.13 Conflict Faithfulness 238
6.14 State-Dependent Commutativity 241
6.15 Return Value Commutativity 242
8.1 IDM Transaction 286
8.2 Transaction Equivalence 287
8.3 Final State Serializability 289
8.4 Conflict Serializability 291
8.5 Conflict Graph 291
8.6 Extended Conflict Graph and Serializability 293
8.7 State Serializability 296
8.8 Transaction Chopping 302
8.9 Chopping Graph 302
8.10 Correct Chopping 304
10.1 Isolation Levels 361
10.2 Multiversion Read Committed and Snapshot Isolation Levels 362
10.3 Formal Definition of Snapshot Isolation 363
10.4 Snapshot Isolation Serialization Graph 363
11.1 Expansion of a Schedule 384
11.2 Expanded Conflict Serializability 385
11.3 Reducibility 387
11.4 Prefix Reducibility 389
11.5 Recoverability 391
11.6 Avoiding Cascading Aborts 392
11.7 Strictness 393
11.8 Rigorousness 394
11.9 Log Recoverability 398
11.10 Inverse Operation 408
11.11 Perfect Commutativity 411
11.12 Perfect Closure 413
11.13 Normal Commutativity Table 414
11.14 Strictness 415
11.15 Terminated Subtransactions 416
11.16 Expanded Object Model Schedule 417
11.17 Extended Tree Reducibility 418
12.1 Extended History 434
12.2 Stable Log 435
12.3 Log Buffer 435
12.4 Cached Database 436
12.5 Stable Database 437
12.6 Correct Crash Recovery 437
12.7 Logging Rules: Redo Rule, Undo Rule, Garbage Collection Rule 438
18.1 Global History 677
18.2 Conflict Serializability 678
18.3 Global History 692
18.4 Direct and Indirect Conflict 694
18.5 Global Conflict Graph 695
18.6 Commit-Deferred Transaction 699
18.7 Extended Commitment Ordering 701

ちなみにですが同じものが複数回出てきているものがあるかもしれませんが、それぞれ文脈が違っています。 例えばConflict Serializabilityは3回でてきていますが、

  • 3.14 Conflict Serializability
  • 8.4 Conflict Serializability
  • 18.2 Conflict Serializability

f:id:yuyubu:20190205150103p:plain
大元のSerializabillityの定義

f:id:yuyubu:20190205150213p:plain
IDM Transactionに置けるConflict Serializability

f:id:yuyubu:20190205150317p:plain
Global,Local historyにおけるConflict Serializability

とそれぞれ内容が違っています。

ちなみにこの本の勉強会は明日もあります。オススメです。一緒に楽しくトランザクションを勉強しましょう。

connpass.com

*1:多分トランザクション資料を読む時の不明点確認は巻末のindexの方が良いと思う