Yabu.log

ITなどの雑記

2ヶ月くらいApple Watch 5使った感想

  • Suica
    • 近くにiPhoneなくてもsuica使える
    • wifiあったらWatchだけでチャージできる 
    • 改札とかで腕ひねってピットやってるのダサいって声あるけど、ポケットにて突っ込んでスマホ出すよりマシ
      • 腕に財布がついてるのはデカイ。
      • と言いつつ定期はまだiPhone使ってます。
        • いずれWatch onlyにしたい。
  • 音楽
    • 音楽はiPhone近くになくても本体内にApple MusicでDLしたものを再生可能
    • 32GBのiPodみたいな要素も兼ねてる。
    • BTヘッドホン繋げて音楽聴いてる。
  • 電話
    • Wifi版はiPhoneが近くにある時のみ可能
    • LTE版は近くにiPhoneなくても電話できるらしい
    • 腕時計に話しかけるのは恥ずかしい
      • 電話するならBTヘッドセット使うと思う。
  • バッテリー
    • 俺の使い方だと12時間で50%くらい
    • 充電は風呂入ってる時にやる 
    • 睡眠分析機能はないが、寝るときもつけてる。心拍数を計りたいので。
    • シアターモード(手首起こしで画面起動OFF)にすると朝起きてもバッテリー3~7%しか減らない。

生活の変化とか

  • ランニングするときや近所散歩するときはスマホを持たなくなった。
    • Watchのみ
    • 音楽聴けるし、いざとなったらコンビニで水とか買えるし十分。
    • カメラがないので、面白い光景を見たときシャッターチャンスを逃すのはありそう
  • Run keeperからプリインのActivityアプリに乗り換えた
    • RunkeeprのWatch版がフリーズしてワークアウト一回の記録が取れなかった
    • プリインのは心拍数、走った経路、ペース、消費カロリー等。記録できる情報が十分
  • タイマーをホームに置いてて、ワンタップで呼びだ得るのが便利。
    • ポモドーロタイマー用に買ったバイブレーションで通知するタイマーは使わなくなった。

次期watchに期待すること

  • 母艦をiPhone以外にできる
  • Qiの対応
    • 独自規格反対

  • いずれWatchオンリーにしたい。 
  • Watch使ってると、将来的にスマホがなくなる日をなんとなく想像できる。

Scheduleをpolygraphに変換してVSR validationを行う方法

多分Polygraphについて書かれた2番目の日本語のエントリー。*1

日本初のエントリー↓

taityo-diary.hatenablog.jp

内容としては先行している記事が複数の文献を参照していますが、このエントリはTheory of Database Concurrency Control p35~37の要約になっています。

polygraphとは

  • VSRのvalidationを行う特殊なグラフ
  • 定義:Polygraph P=(V,A,C)
    • V:vertex 頂点の集合
    • A:arc (V * V)
    • C:choice (V * V * V)

f:id:yuyubu:20191223001518p:plain

compatible

  • P=(V,A,C)と次の関係がある有向グラフD(V,B)をPとcompatibleという
    • A ⊂ B
    • 全てのchoice (u,v,w )⊂C ,(u,v)∈B または (v,w)∈B
  • 具体例次のPolygraph P1はD1,D2とcompatible

f:id:yuyubu:20191223001602p:plain

  • もう少し複雑な例

f:id:yuyubu:20191223001630p:plain

acyclic Pollygraph

次の性質を持つPolygraphをacyclicであるという

  • Polygraph PにcompatibleなDAGが存在する

Plygraphとcompatibleなグラフの中でacyclicなものが存在すれば、polygraphはacyclicであるという

スケジュールをPolygraphに変換する方法

複数のトランザクションの集合をscheduleとする

  • schedule sの全てのトランザクションの先頭にA_0と末尾にA_∞を含めた\hat{s} をVertices Vとする
    • A_0はs中に登場する全てのentity xに対するW(x)を含むトランザクションである
    • A_∞はs中に登場する全てのentity xに対するR(x)を含むトランザクションである
    • \hat{s}はaugmented scheduleと呼ばれることもある
  • Arcの作成:\hat{s}に存在する全てのトランザクションA中のRに対して以下の操作を行う

    • R_n(x)A_nの以前に存在している直近のWrite W_m(x)A_mからArc(A_m,A_n)を作成しPolygraph PのArc Aに追加する
      • 備考:通常、s中の全てのentity xに対してW(x)がA_0に存在しているため、\hat{s}にはWriteに後続しないReadは存在しない=arcはs中のRの数存在している
  • choiceの作成:arcを作成する際に使ったW_m(x) < R_n(x) に対してs中にA_mA_n以外のトランザクションA_oW_o(x)が存在する場合、choice(A_n,A_o,A_m)を作成しPolygraph PのCに追加する

    • A_o\hat{s}ではなく、sの要素であることに注意。(A_0,A∞はchoiceの中間ノードとして選択できない)
  • スケジュールsから作成したPolygraphをP(s)と表記する

P(s)とcompatibleに必要なもう一つの制約

P(s)とcompatibleなdigraph D=(V,B)はA0を支点とし、A∞を終点とするようなグラフではないといけない*2。つまり、以下に再掲するcompatileの条件にA0,A∞に関する制限が追加される。

全てのchoice (u,v,w )⊂C ,(u,v)∈B または (v,w)∈B

  • P(s)のCに A_0 を含んでいるchoice(A_m,A_n,A_0)があるとき、Bは(A_m,A_0)を含んではならない
  • P(s)のCに A_∞ を含んでいるchoice(A_∞,A_m,A_n)があるとき、Bは(A_∞,A_m)を含んではならない
  • この制約がないと、前者はA_0に先行するトランザクションが、後者はA_∞に後続するトランザクションが存在してしまっているようなおかしなscheduleが出来上がってしまう。

ScheduleからPolygraphを作成する具体例

  • 以下のスケジュールからPolygraphを作成する
s=r1(x)w2(y)w1(y)r3(x)w2(x)

A1:     R(x)        W(y)
A2:         W(y)            W(x)
A3:                 R(y)
  • Vertex Vはs中のA1,A2,A3にA_0,A_∞を加えた
    • V={A0,A1,A2,A3,A∞}
  • Arc Aは\hat{s}中の四つのreadと同一entityに対する直近のwriteから構成される
    • A={ (A0, A1), (A1, A3), (A1, A∞), (A2, A∞)}

f:id:yuyubu:20191223001705p:plain

  • choiceは各Arcを作っているstepと同一entityに対してs中の他のトランザクションがwriteを行なっているかを検査することで求めることができる 
    • C={(A1, A2, A0), (A3, A2, A1), (A∞, A2, A1)}
      • (A0,A1):xにより作られたArc→A2がW(x)を含んでいる→choice(A1,A2,A0)
      • (A1,A3):yにより作られたArc→A2がW(y)を含んでいる→choice(A3,A2,A1)
      • (A1,A∞):yにより作られたArc→A2がW(y)を含んでいる→choice(A∞,A2,A1)
      • (A2,A∞):xにより作られたArc→他のA∈sがW(x)を含んでいないためchoiceの追加はなし。
        • A0がW(x)しているのでは?と思われたかもしれませんが、定義を再確認し、choiceの中間ノードにA0,A∞は入らないことに注意してください

ビジュアライズ

必要な要素が出揃ったのでP(s)をビジュアライズする破線がchoiceのedge,実践がarcのedgeです。

s=r1(x)w2(y)w1(y)r3(x)w2(x)

P(s)
V={A0,A1,A2,A3,A∞}
A={ (A0, A1), (A1, A3), (A1, A∞), (A2, A∞)} 
C={(A1, A2, A0), (A3, A2, A1), (A∞, A2, A1)}

f:id:yuyubu:20191223001732p:plain

このP(s)はChoice (A1, A2, A0), (A∞, A2, A1)を含んでいる。A0,A∞とchoiceに関するルールにより、P(s)とCompatibleなdigraph(V,B)は必ずBに(A1,A2)と(A2,A1)を含んでいる。

  • A0,A∞とchoiceに関するルール再掲
    • P(s)のCにA_0を含んでいるchoice(A_m,A_n,A_0)があるとき、Bは(A_m,A_0)を含んではならない
    • P(s)のCにA_∞を含んでいるchoice(A_∞,A_m,A_n)があるとき、Bは(A_∞,A_m)を含んではならない

これにcompatibleなdigraphは(A1,A2)間で発生するcycleを持つためacyclicではない→P(s)はacyclicではない。

計算クラス

VSRの検査はNP完全です

詳しくはデヴすぴスラさんのブログを読んでください。概略だけ箇条書きしておきます

  • VSRのvalidationがNP完全
    • VSRのvalidationはpolygraphのcycle検出に多項式変換可能。
    • polygraphのcycle検出は2-3 simple CNF SATに多項式変換可能。
    • 2-3 simple CNF SATはNP完全
      • よって上記の問題は全てNP完全となる

dev-supisula.hatenablog.com

かなり難しい.実際は[エルブランセマンティクス(Herbrand Semantics)]と[Reads-From]で[VSR]を,[Multiversion Serialization Graph(MVSG)]で[MVSR]を定式化できるので,覚えなくてもいい.

scrapbox.io

だそうです。うーんすごく時間を無駄にした気分だ。

Theory of Database Concurrency Control

Theory of Database Concurrency Control

  • 作者:Christos Papadimitriou
  • 出版社/メーカー: Computer Science Pr
  • 発売日: 1986/07/01
  • メディア: ハードカバー

*1:Polygraph VSRとかで日本語onlyでググるとパトさんのブログくらいしか出てこない

*2:P36 in all digraphs compatible with P(s), A0 must precede all other transactions, and all transactions must precede A∞

受付時間に5分遅刻してTOEIC受けられませんでした

試験会場が割と近場(所要時間25分)だったので15分くらいの余裕を見て自宅出発したが、謎の遅延により最寄り駅にて20分待ちました。走れば間に合ったが受付時間に5分遅れても試験開始には25分もあるし、受けさせてもらえるだろうと高をくくって歩いて会場へいくと、"受付終了"とかいた黄色い看板をもったおばちゃんが受験者を追い返している衝撃的な後景がありました。

試験開始後30分間まで遅刻入室可能ななんちゃら情報技術者試験に比べてすごく厳しく感じました。(他の業界はこんなに時間に厳しいぞ!)

余った時間で井の頭公園を観光してきました。

  • ワンポイントアドバイス
    • 間に合いそうなら走れ。

以上。

markdownがもっと捗るキーボード設定:全角入力時も記号はなるべく半角になるようにする

英語でMarkdownを書くときは割とスイスイ書けると思いますが、日本語で書く時はMarkdown構文用の記号(#-)入力のたびにIMEを切り替える(全角/半角)必要があります。箇条書きに新しい項目を追加するたびにこの切替を押すのは面倒です。

yuyubu.hatenablog.com

そこで対策を考えてみました。

  • 全角スペースの代わりに常に半角スペースを入力するようにする
  • 全角ハイフンの代わりに常に半角ハイフン-を入力するようにする

この二点です。

f:id:yuyubu:20191126152109p:plain
mozcの設定で常に半角スペースを入力するようにする

ubuntuで半角ハイフンを常に入力する設定にする方法は模索中です。知ってたら教えてください。

この設定により全角スペースと全角ハイフンが打てなくなってしまいますが、特に必要になるシーンがないので困っていません。

これがなかなか快適でMarkdown書くのが更にはかどりました.オススメです。

AirPods Pro買った:在庫薄だけど買う方法や感想等

  • 第一世代のairpodsを2年以上使った
  • ランニングと普段用でイヤホンを2台持ちたくない
    • AirPoids Proで一本化したい。
  • Qi充電試したい。
  • 2年使ったのでそろそろバッテリーがきになる

を言い訳に買った。ふるいやつはメルカリで6000円くらいで売るか、家族にあげてヘイトを下げるのに使う。

在庫切れで一ヶ月待ちだけど買う方法

  • 朝6~8時にapple storeで受け取る分の在庫が更新される
  • 更新されたらapple storeで受け取るを選んで注文する
    • これで即日入手できる

Apple Storeは新宿や表参道にあるので23区が生活圏の人は、この方法で入手できると思います。 土曜の午後というかなり混んでそうな時間に行きましたが、当日apple storeに入ってからは特に列に並ぶとかは無く、10分くらいで入手できました。外に長蛇の謎の列が出来ていましたが、店員さんに聞いたところiPhone 11等を買う列だそうです。

  • 発売2~3日目くらいに普通に買えるもんだと思ってapple storeに行ったら、当日予約のない人に売る在庫が無いのでこの方法で買えと言われました。
  • 発売日1週間後時点(私が受け取った日)は当日在庫がある・ないみたいなトラブルの原因になるとか?でもう教えないように上から言われてると言ってました。

初代airpodsは発売日からしばらく入手困難だったので、こんなにサクッと買えたのに驚きでした。 普通に注文した人が1ヶ月待つ必要があり、この裏技っぽい方法で注文すると即日貰えるというのは、なんかずるい気がしますが 店員さんは「特に引け目を感じなくて良い」ということを言っていたので大丈夫?だと思います。*1

よいとこ

無線充電

lightningを刺さなくても充電できる。iPhoneもQi対応だしめっちゃ楽。 私が所有しているものでLightning必須なのはiPadのみだが、これも将来無線充電に対応してくれるんだろうか。

H1

初代と特に変わってないけど、この製品の一番の魅力はH1チップが乘ってることだと思う。 これはbeatsの一部製品も対応している。

H1チップ × ノイズキャンセリングならBeats Solo Proというヘッドホンもある。

複数端末で接続を切り替えて普通のBluetoothイヤホンを使うのは結構微妙な感じ。切り替えがスムーズに行かないため。新しく使う端末から接続するだけなく、今まで使ってい端末で切断処理をする必要がある。このため、人によっては端末ごとにBluetoothイヤホンを用意している人もいると聞く。

H1チップが載ってるイヤホン類だとApple製品間でかなりスムーズに切り替えができる。帰宅してイヤホンつけたままmacに繋いで映画見るとかそいういうことができる。(家ならスピーカーで聞けという話もあるが、私は落ち着きのないので部屋の中をウロウロするので部屋のどこでも同じ音量で聞こえるイヤホンは安心する)

H1チップの威力を発揮できないとこの製品の魅力は半減すると思う。AppleのBT対応機器3-4個持ってるみたいな人じゃないとあまりオススメ出来ない。

ノイズキャンセリング

カフェとかで作業する時は耳栓代わりにhardfloorとか流してる。 昔は静かなクラシックとか聞こうとしてたけど、俺がよく使ってるカフェは やかましい声がガンガン聞こえてくる(まぁ静かにすごすような場所でもないし、やかましい人は何も悪くないが)

昔(10年ほど前)使ってたソニーノイズキャンセリングイヤホンは耳に高性能な耳栓をぶち込むような感じでちょっと耳に窮屈な間隔があった。 AirPodsノイズキャンセリングはなかなかすごくて、周囲の環境音に対する音量つまみでも存在してて、それをゆっくり絞るかのような自然な消音機能という感じ。すごいけどこれ、俺に必要なのか?

ただこれはAirPods特有のものなのか、最近のノイズキャンセリングの特徴なのかは分からない。 変わったことといえば、カフェでhardfloorを選ばなくても、静かなクラシックが聞けるようになったくらい。

飛行機によく乗る人だとNCは重宝するようですが、今の私の生活だと必須ってほどではないです。

耐水

IPX4ということで防水ではなく耐水だそうです。

水の飛まつに対して保護。

https://www.toishi.info/faq/question-seventeen/ip.html

ということでお風呂やランニングで使っています。*2

つけ心地

前のairpodsはかなりつけ心地が良かった。つけてるの忘れて、更に上からヘッドホンやイヤホンをつけようとしてしまうことがあったくらい。

ワイヤレスかつセパレートタイプはやはり偉大。

AirPods Proもつけ心地はいいが、AirPodsと何か変わったかと言われると特につけ心地が向上したなどはない。 いやーピースが3種類あるのでもしかしてAirPodsが合わなかった人もどれかがフィットするかもしれない。

微妙/どうでもいい

音質

特にすごくなったとか、感動したとかはないです。というか、集中して音楽を聞くという週間が社会人になってから失われてしまったので音がいいとか悪いとかは分からなくなってしまった。(こだわりがなくなった)

へんなノイズとか歪とかはないのでそのへんは大丈夫です

悪くなったところ

本体ボタン

初代airpodsではイヤホンの背の部分をトントンとタップすれば、楽曲の再生・ストップのtoggleが出来た。

airpods proはうどんの先端(ステムというらしい)に感圧センサー付きの疑似ボタンがあり、こちらをクリックすることで再生・ストップのtoggle、長押しすることでノイキャンON/OFFのtoggleができる。

最初触ったときは安っぽいカチカチボタンだなと思ったが、電源が入っていない状態だとこのボタンは押せない。Macbookトラックパッドのtaptic engine的なものが使われてるものと思われる...とおもったが、どうやらバイブレータは入っておらず、「カチッ」という音で押したフィードバックを流しているようだ。(完全に騙されていたが、押した感覚のようなものは確かに感じる)

でProのこの疑似ボタンは実際には押すというより、ツマム操作になる。初代airpodsのどこにもボタンは付いていないがイヤホンの背の部分をトントンとタップする操作が好き。

充電ケースへの収納

初代Airpodsは充電ケースに対する収まりがピッタリって感じですごく良かったけど、Proはなんかしっくりこない。まぁ慣れの問題かもしれないけど、ケースとそれに対する収まりようは初代のほうが好き。

総評

  • ものとしてはかなり良いと思うけど3万の価値があるかは微妙
  • 私が所有するものとしてオーバースペックな気がする

というわけでお金が無限にある人おすすめです。

*1:私に対応してくれた店員さんは普通に注文してしまったため1ヶ月待ちだそうです。

*2:つけたままシャワーを浴びたり湯船に潜水したりはしません。

C++に入門します

なんか色々やりすぎてる感じがありますが、業務でちょっとだけC++を読み書きする必要があり、ちょうど良い機会だと思ったのでC++に入門したいと思います。毎日は無理なので2日に一回くらいのペースで触ってサブブログの方にポストしていきたいです。

yuyubu-sub.hateblo.jp

  • ストラウストラップのプログラミング言語C++ 第4版を読んでいきたいと思います。

  • C++ 11以降であること

  • 言語設計者の書いた本であること

が主なチョイスの2点です。

C++11からガラッと違うみたいです。本書はC++ではこれが基本だよ!と断りなくいきなりC++11の要素がバンと出てきます。そのため何がC++11から入ったのか分からず、C++erと本の内容を話してる時に「それ11から入ったんだよ」と言われて初めて気づくレベルです。 適当に11の紹介をオマケ程度に書き足したのではなく、前版からかなりの箇所を書き直しているのではないでしょうか。

本書を読み進める上で以下のサイトが参考になりそうです。

www.attocraft.jp

挫折したら、その時は別の本を適当に選びます...

私の今までのC++関係学習履歴

一週間で身につくC++の基本の発展編(2週目)の途中まで演習問題等をやりました。

cpp-lang.sevendays-study.com

Cは以下の本で勉強しました。

yuyubu.hatenablog.com

Cの理解は忘れかけてるのも含めて結構曖昧な感じがします。ポインタのマニアックな使い方とかのコーナーケースを詰められるとと多分答えられないです。

プログラミング言語C++ 第4版

プログラミング言語C++ 第4版

iPhone 8からiPhone11に買い替えた

そこまでほしかった訳じゃないけど、使ってたiPhone8のバッテリー持ちが悪くなったので買い換えました。

   

proにしなかった理由

11もproもメモリとCPUのスペックは同じです。どういう違いがあるかというと

 

  • サイズ
    • サイズに関しては一番小さいのが11 proが一番小さく、11 11 pro Maxと続きます一番小さいのがほしい方はpro Max一択でしょう。
  • 素材
    • あまり興味がない飲んで割愛
  • バッテリー持ち
    • 公式サイトによると動画の再生時間がProの方が1時間長いようです。
  • 耐水性能
    • 割愛。11 proも11も8よりは上がってるらしい
  • カメラ:後述
  • 液晶
    • 2xのretinaから3xのretinaになった(がこれは目がいい人が頑張ってみないとわからないレベルらしい)
    • proのみ有機ELらしい。
      • 有機EL→ふつうの液晶に変えると品質差が結構わかるらしい。
      • iPhone XSiPhone XS Maxから11への買い替えはがっかりするかも。

の6つです。*1 メモリは4Gと6Gで差があるという情報がネットに出回っていますが、正確な情報はよくわからないです。

ここまで書いてて思いましたがどうせ2年に一回しか買わないし、他にお金使うあてもないのでProにしてても良かったかな...

カメラ

 

三眼目の望遠カメラと手振れ補正が若干11 proと11で違うようです。Twitterで出回ってるナイトモードや超広角写真は11でも撮れるようです。個人的に深夜徘徊中に廃墟や怖い雰囲気の路地などをとるのが好きなのでナイトモードはありがたいです。

f:id:yuyubu:20191006112532j:plain
11

f:id:yuyubu:20191006112442j:plain
8暗くてほとんど見えない

f:id:yuyubu:20191006112359j:plain
11

f:id:yuyubu:20191006112402j:plain
8暗くてほとんど見えてないのと照明が目立ちすぎ

 

8から変えて良くなったところ

  まぁ動作が軽快になったことはいうまでもないのでそれ以外で

faceid

 

iPhoneは傾きを検知して自動で画面がつきロック画面が表示されます。そこから

  • 顔がほぼ正面に存在
  • 目線が画面にある
  • かつマスクなどをしていない

の条件を満たすとロックが解除されます。

8までしか使ったことがないので初めてのfaceid体験です。前のfaceidとの差は分かりませんが、iPhoneを持ち上げて視界に入れると自動でロックが外れるという仕組みは非常に快適です。

ホームボタンの廃止+画面が広い

ホームボタンが廃止され、画面が本体下いっぱいまで広くなった。iPhone8なんかだと画面が狭くてkindleで小説とか読む気にならなかったけど、これなら読もうかなという気にもなってくる。

微妙なところ

ノッチ

画面上ぶ真ん中にノッチが入りステータスアイコンに表示される情報がかなり制限される。これは致命的ではないが非常に改悪だと思う。特に今BTヘッドセットが繋がってるかどうかがわからなくなった。このせいによる音楽がiPhoneのスピーカーから流れる事故が何度も起きた。ノッチを作ってまで画面スペースを拡大する必要はないと思うが。。。iPad Airのステータスアイコンエリアとノッチが比較できる画像を貼っておきます。

f:id:yuyubu:20191025045136j:plain
iPadのステータスアイコン。めちゃ広い
f:id:yuyubu:20191025045259j:plain
iPhone11のノッチ。せませま

force touch廃止

画面を押し込む感度がいろんなUIになっていましたが、これが廃止になりました。たしかにこれを上手く使ってるアプリはほとんどありませんでしたが、文字入力時やOSのUIとしてはかなりひんぱんに使っていたので無くなると困ります。

上下が分からない

ホームボタンが無くなったのでどっちが上かわかりにくい。 基本的に持ち上げたときに画面が点灯するので間違うことはほぼ無いが、以下のケースで偶に1週間に1回くらいイラッとする。

www.youtube.com

  • 横向きにして動画を見た後に縦に戻そうとする時、上下反対の向きを間違えると画面が縦に戻らない
  • 机においてあるiPhoneを上下逆向きで持ち上げた時

今から買う人は上下非対称なケースを選んだほうが良いかも。

*1:たった1つくらいのノリで書こうと思ったら調べたら結構あることに気付いた