KHCの

KHC( https://twitter.com/we_can_panic )が140字を超えるツイートをするところ

今日の日記

  • 本を読んだ。

    • 哲学の本とOS自作の本。
    • 哲学はマルクス・ガブリエルの「「私」は脳ではない」。
      • 我々はいわゆる科学思想のみでは世界の正しい姿は理解できない。そういう意味で今の科学一辺倒の思想は間違っている、という論調。
        • 例えば数字や、学問の理論はそれそのものが物理的には存在していないが、「存在しないものである」とは言わない。一般に認識している物理世界以外の世界も無数に存在しているのだ。
        • この思想はエキサイティングだと思った。世の中のすべての事象を網羅しているし矛盾が生まれない。物理学的な捉え方よりも正確に物事を認識できると思う。
      • ただ、序盤に出てきた「精神は脳の活動の1つではない」という主張が先入的に受け入れられず読む手を止めてしまった。
        • これは俺の問題なので明日またチャレンジします。
      • 脇道にずれるけど現在の社会が「1984」という監視社会的なディストピアを書いた作品になぞらえられていて、村上春樹の「1Q84」ってこれが元ネタなんだ、と思った。(「IQ84」かと思ってた)
    • 他にもそれ関連の本を読んだ。「センスメイキング」
      • 問題解決は決して普遍的な教養のみでは成し得ず、そのドメインに深く入り込んだ知識やノウハウが必要とのこと。
        • そしてドメインに深く入り込むには科学的な知識だけでなく、それ以上に、人文学的な素養が必須であるという。
          • 社会を理解するのは統計ではなくその社会のしきたりや雰囲気、人々の思想である。←確🦀
      • これは↑のマルクス・ガブリエルの論調にもあっている。
        • そもそもガブリエルさんの他の本に出てきたから読んでみたからだけど...
      • 「そうかも」と思っても厳密な論理展開は無かったから今ひとつ腑に落ちないような感じ。
        • ただし「厳密な論理展開」というのが既に科学ドメインの考え方かもしれない。水も漏らさぬロジックは必要ないのかも。もしくは読解不足とか。
    • OS自作の本は概略を眺めるだけで終わった。序盤中の序盤。
      • OSの役割や、何を作ればいいか、どうやって作ればいいか、のイメージはつかめた気がする
    • これはなぜかというと、OSを作る際に必須となるバイナリエディタを探すうちにChromeOSのセットアップに走ってしまったから。
    • ChromeOS面白い。
      • 純正Linuxが走る。Linux用のアプリも問題なく動く。
        • 日本語入力とかは設定するのに工夫がいるけどネットの資料も充実してる。
      • Androidアプリは代替がなければ使える、くらい。
        • 動かないやつもあるし、そもそもマルチタスクができなくてウィンドウがアクティブじゃないと処理が止まってしまう(バックグラウンドで動く処理はその限りじゃないけど)。ゲームには向いてない。
      • Chrome(ブラウザ)の拡張機能が思ったより充実していて、LINEやZOOMとかもできてPCとしては全然使える印象。
  • あとはカレー作ったりアイナナ読んだり...

    • アイナナは少し離れてたので2部中盤から読み直してそのまま2部読了。
      • 脚本が天才的。他のゲームのメインストーリーはゲームの方をやっていた方が楽しいから全然読んでないけど、アイナナは脚本目当てでプレイする価値がある。
      • 明日もやります。
    • カレーは玉ねぎと人参と牛肉としいたけで作った。おいしい。
      • 玉ねぎは焦げ付かないように水を入れて強火で処理すると早く飴色になる。すごい。

今日の日記

たこ焼きをした。
ホットプレートタイプのものを持ってるけど、火力が足りなくてプレートを直にコンロにかけた。すぐ焼ける。おいしい。

↑これたこ焼き器としては火力が足りず微妙でした(ホットプレート系たこ焼き器は全部そうだと思うけど)。



あと部屋の片付け。それと自分のピークタイムの把握。


部屋の片付けは特に苦にしてないけどその代わり散らかるのも苦にしてなくて、移動に気を使うようになったら片付けをすることにしている。
引っ越して2年めなので物は多くなくトータルで1時間程度で全部終わる。


ピークタイムは↓の本を参考にしたもので、
「自分のピークタイムを把握して効率的に仕事を割り当てるべし(意訳)」と書いてあったので実行している。 1時間おきに自分の「集中度」を記録したら、だいたい正規分布みたいな形のグラフが取れた。頂点は14時~16時ごろ。 綺麗な正規分布と組み合わせてみると(X軸が違うから厳密には違うけど)、12時から1, 2時間は理想値に比べ実測値が低くなっている。 これは昼食を食べたあとで集中力が低下しているのでは?と分析。
KHCの集中力はきれいな山なりです。

エンジニアのための時間管理術

エンジニアのための時間管理術





あと獺祭の焼酎を買って飲んだ。↓の動画で美味しそうだったから。


www.youtube.com

日本酒(獺祭)の風味が強いかな。
俺は獺祭の香りは大好き!って感じでもないので感想は「面白」だった。

でも美味しい。39度もあるのに日本酒然としてて飲みやすい、というか。
完全に日本酒の味ではなくて、獺祭の酒粕から作ってるんだけど、酒粕特有の風味がある。
この風味と獺祭の風味が合わさって独特の飲み心地になっている。

焼酎は日本酒よりも味の振れ幅が多くて面白いですね。
安いし。酔えるし。

日記をつけよう

GWで暇だから。

あと自分を客観的に見たい。
観察できるものの中で一番解像度が高いから。

↑この次元になると中二病のテンプレで知られる「趣味は人間観察」の凄さも分かる気がする。
自分を見つめるのと同じ精度で他人を分析できる能力が備わってる、みたいな。

俺ってもしかして短文しか書けん? まあ短文以外を書く事なんてないからいっか...

何枚ものスクショからアクティブなウィンドウを切り出す(誇張)

↑これ仲間のタヌキに聞いたので信憑性は高いと思います。

 
 

なんか俺は知らんかったけど、Windowsのスクショって連続で撮れるらしい。
Alt+PrintScreenで「ピクチャ>スクリーンショット」っていうフォルダの中に画像が自動的に溜まっていくらしい。 みんな知ってた?知らんよね(見下し)。
あとWin+PrintScreenでいちばん手前のウィンドウだけスクショできるらしい。 すごe。
でも別にWin+Alt+PrintScreenで、特定のウィンドウだけ連続でパシャる(死語)ってのはできんらしい。フ~ン。。。  
 

↑を作っていきます

2時間くらいかかった。これ書くのは1時間くらい。
Pythonのバージョンは3.7で、ライブラリはconda installで入れた最新のやつです(2020/7/26現在)

作りました

"""
1. Alt+PrintScreenで、撮りたいウィンドウをクリップボードにコピー
2. Win+PrintScreenで画面全体を撮る
3. 1.で撮ったスクショを、「スクリーンショット」下に「master.png」という名前で保存
3. あとはWin+PrintScreenでスクショを保存していく
4. このプログラムを動かす。outputというフォルダができてそこに切り抜かれた保存される
"""

import os, re, time
import cv2
import tqdm
import numpy as np


def main():
  print("Start")
  SS_PATH = "ここにWin+PrintScreenが保存される場所のパスを入れてください。下のように..."
  # SS_PATH = "C:\\Users\\khc\\OneDrive\\画像\\スクリーンショット\\"
  SS_output_PATH = SS_PATH + "outputs\\"
  if not os.path.isdir(SS_output_PATH):
    os.mkdir(SS_output_PATH)

  SS_re = re.compile("スクリーンショット \\([0-9]+\\).png")
  SS_num_re = re.compile("[0-9]+")

  img_path_list = list(filter(lambda x: SS_re.match(x), os.listdir(SS_PATH)))
  img_path_list.sort(key=lambda x: int(SS_num_re.search(x).group()))

  mstr = imread(SS_PATH+"master.png")
  dcpl = imread(SS_PATH+img_path_list[0])

  top, bottom, left, right = find_place(mstr, dcpl)

  for img_name in img_path_list:
    img_in = SS_PATH+img_name
    img_out = SS_output_PATH+img_name
    trim_img = imread(img_in)
    imwrite(img_out, trim_img[top: bottom, left: right])

  print(len(img_path_list), "images has clipped at", SS_output_PATH)

def find_place(mstr, dcpl):
  h, w = mstr.shape[:2]
  first_pixel = mstr[0][0].sum()
  i_cdd, j_cdd = np.where(dcpl.sum(axis=2)==first_pixel)
  for i,j in zip(i_cdd, j_cdd):
    if np.all(mstr==dcpl[i: i+h, j: j+w]):
      print("find!")
      return i, i+h, j, j+w
  print("見つけられませんでした。。。")


def imread(filename, flags=cv2.IMREAD_COLOR, dtype=np.uint8):
  try:
    n = np.fromfile(filename, dtype)
    img = cv2.imdecode(n, flags)
    return img
  except Exception as e:
    print(e)
    return None


def imwrite(filename, img, params=None):
  try:
    ext = os.path.splitext(filename)[1]
    result, n = cv2.imencode(ext, img, params)
    if result:
      with open(filename, mode='w+b') as f:
        n.tofile(f)
      return True
    else:
      return False
  except Exception as e:
    print(e)
    return False


if __name__ == '__main__':
  main()

説明

スクリーンショットのフォルダから自動保存された画像を持ってきて、同じフォルダに入ってるmaster.pngと一致してる部分をトリミングして保存してる。
なので一番小さい番号の画像の中にあるウィンドウがmaster.pngと完全に一致しないと見つけられなくて終了する。
↑のコメントで書いてる通りにやればたぶん一緒になるはずだけど。。。
撮りたいウィンドウに動画とか入ってると完全一致は難しいと思うから、そのときはmasterを自分で切り出して作ればいいんじゃないかな。(投げやり)
スクリーンショットのフォルダに保存される画像のナンバリングってフォルダを空にしてもリセットされんっぽい。人生みたいだね。

参考にしたサイト

ありがとうございました!

atom-runnerで日本語が表示されなかったので直した!!!!!!!!!!!

↑これを独自の方法で直したので紹介します。

試したこと

  • init.coffeeファイルに以下を追記
process.env.PYTHONIOENCODING = "utf-8";

→ 直らず。

  • .atom/configration.csonに以下を追記
runner:
  scopes:
    python: "python"

→ 直らず。

  • Styles.lessに以下を追記
.atom-runner pre{
  font-family: meiryo;
  font-size: 14px;
}

→ 直らず。

結果

  • 以下を変更したら直りました。
    .atom\packages\atom-runner\node_modules\ansi-to-html\lib\ansi_to_html.js の114行目
- this.input = typeof input === 'string' ? [input] : input;
+ this.input = [input];

 
 
 
 
 
やった~~~~~~~~~  
 
 
 
 
以上です。

 
 
 
 
 

追記:2020/08/02

今動かしたらまた表示がおかしくなってました。
もう知らん。

量子コンピュータを解説してみる(1)

最近量子コンピュータにハマってるので,ここらでアウトプットを計る.
(*10/25追記 内容を補強しました。間違ってることは書いてない...ハズ)

量子について

普通のコンピュータではシミュレーションできない動きをする。 (後述の「重ね合わせ」「もつれ」など)
なので、既存の問題を量子の動きに落とし込むことで、コンピュータでは到達できなかった物量・速度の問題を解くことができる(かもしれない)。
 
簡単にメリットだけ言うと、
「分岐がエグい数になってコンピュータでは計算できないことを量子でシミュレーションできる。」
 
例を挙げると、SSL通信を解読できる。
SSL通信の仕組みを簡単に説明すると、(ネットで浅く調べただけだから間違ってるかもしれないけど、)以下の流れになる。

1. サーバー側で「A」というデータを使って暗号化する  
2. 暗号されたデータと、「X」というデータを、クライアント側に送る  
3. 「X」は、クライアント側で持ってるデータを「B」として、「X=A*B」という値になっている  
4. クライアント側は、「X/B」を計算して「A」を求め、その値を使ってデータを解読する  
5. Xは2048ビットのデータ(600桁くらいの数字らしい)になっていて、それからノーヒントでA, Bを求めるのは現実的に不可能である  

この5. の根拠になっているのが「600桁くらいの数字を素因数分解するのには数十年単位で時間がかかる」という法則なんだけど、量子コンピュータならこれを数分単位で解くことができる(かもしれない)。  
既に一部で実用化され始めている。:
https://www.google.com/search?q=%E9%87%8F%E5%AD%90%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF&tbm=nws  

重ね合わせ

量子の不思議な性質その1.
量子は観測するまでどういう状態なのかわからない.
昔は「観測の際に当たる光とか電磁波のせいでブレが生じる」とか言われてたけど, そうじゃなくてマジで観測によって結果が変わるらしい.不思議だね.
とは言え状態は完全にランダムという訳ではなくて,85%でこの状態,15%でこの状態, みたいな確率が決まっている.
この「何%の確率でこれが出てきて,何%の確率でこれが出てくる」という状態が「重ね合わせ」と呼ばれている.
この重ね合わせができるのが量子コンピュータの強みで,例えば100個の量子ビットの重ね合わせ状態を古典コンピュータで再現しようとすると,100ビット*2100通りのメモリが必要になるが,量子コンピュータでは重ね合わせにより100ビットの容量だけで全部の状態を表せる.
ビットの操作だけで考えたら,量子コンピュータは古典コンピュータに比べて2100倍速いことになる.すごい.  
 

もつれ

量子の不思議な性質その2.
2つの量子をペアリングさせれば,片方を操作することでもう一方の量子の結果も変わるらしい.
この同期の速度は光よりも速くて,例えば日本からブラジルへの通信だと,光だと直線距離でも0.05秒のところ,量子もつれを利用すると0秒で行ける.すごい.  
 

量子コンピュータの操作

量子コンピュータには大きく2つパターンがあって、それぞれ「イジング型」と「ゲート型」と呼ばれている。
「イジング型」の方は、沢山のもつれた量子を使って、ある条件下の最適解を見つけるものらしい。
交通量の最適化などの方面で使われているとか。
KHCはもう一つの「ゲート型」の方をメインで学んでおり、こちらは「量子ビット」という量子の情報に対して「ゲート」と呼ばれる操作を加え、いろいろなこと(素因数分解を解いたり、「量子コンピュータを使った安全な通信」の実装)を行う。
実際にはこの「いろいろなこと」はまだアルゴリズムの研究段階であり、成果の数自体も少なく、要求される量子コンピュータのスペックも現実的ではない。  

ゲート

 
ゲートは「ブロッホ球」というのを使って考えるとわかりやすい.
↓のサイトのやつがいいかな?
Try Bloch!  

f:id:we_can_panic:20200319201902p:plain
Try Bloch!のスクショ

 
量子ってなんか回転してて,回転の方向が大事らしい.
(回転の方向は右ねじの法則みたいなのをイメージすればいいかな?)
ブロッホ球はその回転の方向を表すやつで,最初は上向きに回転している.
これを真横から見たときの矢印の位置が0か1かの確率を表している.上に行くほど0が出やすくて,下に行くほど1が出やすい.
最初は上向きなので,0が100%の確率で出るようになっている.
 
図の下の方にある四角いボタンがゲートで,ブロッホ球の矢印に対していろいろな操作ができる.
簡単に説明していくと,
 
* Xゲート
X軸(手前の水色の軸)を180°回転させる.
最初の状態からこのゲートをかけると下向きになるので,NOT(反転)ゲートとも呼ばれたりする.
 
* Yゲート
Y軸(右側の赤色の軸)を180°回転させる.
最初の状態からこのゲートをかけても,Xゲートと同じような動きしかしない.
 
* Zゲート Z軸(上に向いている黄緑色の軸)を180°回転.
最初の状態からこのゲートをかけても変化がない.(いちおう矢印の上の方が動いてはいるが・・・)  
* Hゲート
アダマールゲートというゲート.
綴りはHadamard.フランス語読みなので最初のHは発音しない.
X軸とZ軸を入れ替えるみたいな操作ができる.
具体的には,Y軸を時計回りに90°,Z軸を180°回転させる.
最初の状態からHゲートをかけると,矢印がこっちを指してくる.(怖いね)この状態で観測を行うと,重ね合わせ状態といって,0と1が50%の確率で出てくる状態になる.  
* Sゲート
Z軸を反時計回りに90°回転させるゲート.
H→S→S→Hの順番でゲートをかけると,矢印は下側を向く.(面白いね)
 
* S†ゲート
Sゲートの反対.
Z軸を時計回りに90°回転させる.  
* Tゲート
Z軸を反時計回りに45°回転させるゲート.
H→T→Hの順番でゲートをかけると,矢印は斜め方向を向く.
この状態で観測を行うと,0が85%くらい,1が15%くらいの確率で出てくる.面白いね.  
* T†ゲート Tゲートの反対.
Z軸を時計回りに45°回転させる.
 
実際の操作は90°や45°だけじゃなくて,いろいろな角度で3つの軸をそれぞれ回転させることができる.
PythonでCirq(シルク)とかblueqat(ブルーキャット?)とかのライブラリを使って量子コンピュータの操作を体験できる.いい時代になったものだ・・・(シン)