手動コーヒーミル + 電動ドライバー = 電動コーヒーミル

コロナ禍で在宅勤務が主戦場になっております。

在宅あるあるで、豆から挽いて美味しいコーヒー飲みたい。。みんな同じこと思ってるはず。

Google先生で調べると、豆を挽くミルには手動と電動があるらしい。

それぞれのざっくりとした特徴は下記。

手動ミル:

  • Good⬆ : 値段も安く、豆も均一に挽けて、味も良しと。
  • Bad⬇: 手動なんで、時間もかかるし、疲れる。

電動ミル

  • Good⬆:電動なんで、労力ZERO!
  • Bad⬇: 本格的なものになればなるほど高い(少なくとも数万)。あとでかい。


諭吉を出してまで、電動ミルを買いたくない。(奥様に怒られるとかではなく)
台所に電動ミルを鎮座させる余裕はない。(奥様に怒られるとかではなく)


「電動ミル、買っちゃった♪」と言える勇気もなく、
ネットで手動ミルを見ていると、


取っ手の部分を取り外しできるものがある!!
・しかも六角レンチっぽい見覚えのある六角!!
 大抵なにかしらの規格準拠のはずなんで、適合する六角ソケットがあるはず!!
・手持ちの電動ドライバでいける!!

手動ミルをAmazonで買って、
電動ドライバ用の六角ソケットを近くのオリンピックで散歩がてら買って、
そららをがっちゃんこさせると。。。

ええ、できました。

豆から挽くコーヒーうめぇ〜〜〜

ただし、奥様にはまだ言っていないのは、しょないでシクヨロです。

買ったコーヒーミルは⬇。 まだ5回程度した豆挽いてないけど、今のとこ問題なし。


六角ソケットは、7mmのやつ⬇ わかりにくいけど、こんな感じで電動ドライバにぶっ刺して使ってます。 f:id:atti_itta:20210119230224j:plain

メールを効率的に処理したく

今週目に留まったMedium↓記事、生産性向上のメール術を読んで。

blog.usejournal.com

現状のメール処理方法

下記はやっているけど、他に何か有益なのがないか知りたいというモチベーション。

自分ルール

  • チェック回数を減らす
    • 朝(できれば省略)、昼(眠い時間に)、夕方(帰宅前)
  • 受信音を鳴らない設定にする
  • 何回も同じメールを読み返さない
  • 5分以内で返信可能なものは、速攻で返信する
    それ以外は、下記分類に分けて、まとめて処理する
    • 自分でやるもの
    • 他人に任せるもの

とは言ってもケース・バイ・ケースで、
相手によっては速攻で返信を要求するような輩もいるので、めんどくさいこともある。。。

この記事から得た情報
  • 2分以内で返信可能なメールは、速攻で返す。
  • 2分よりかかるメールに関しては、後で纏めて処理する。
    • 開いた時に、ポイントだけ返信を書いて開きっぱなしにしておき、纏めて処理する時に続きを書く。
    • 纏めて処理する時間をスケジュール登録しておく。

ポイント:

  • 開きっぱにしておくことで、返信を忘れない。
  • ポイントだけ書いて放置することで、後で纏めて処理する時に再度作業内容を思い出すめんどくさい作業は不要になる。

メールを開きっぱで、ポイントだけ書いておくか。。。
自分に合うかどうか、さっそく明日からやってみよう。

ロコモコって優しくゆっくり言って欲しかった

今日とある会話にて、

A:「ハンバーグとアボガトとかのってる食べ物なんだっけ??」

B:「ロコモコじゃない?」

A:「そうだ、ロコモコだ!」

B:「そうじゃなくて、もっと優しくゆっくりロコモコって言ってみて」

A:「...」

結局言ってくれんかったとです。
変な意味はないとです。
ヒロシです

raw stringについて

参照情報

raw stringとは?

下記のように、'r' もしくは 'R'プレフィックスをつけている文字列のこと。

  • r"~~~"
  • R"~~~"

raw stringにすることにより、エスケープシーケンスが不要になる。

例でみるとわかりやすい。


>>> s = "xavi \n iniesta"
>>> sr = r"xavi \n iniesta"   # <---raw string!!!
>>>
>>> s
'xavi \n iniesta'
>>>
>>> sr
'xavi \\n iniesta'  # <---raw stringの場合、自動で\をつけてくれている。へぇ。
>>>
>>> print(f'{s}')
xavi
 iniesta
>>>
>>> print(f'{sr}')
xavi \n iniesta  # <---エスケープシーケンスにより、"\n"がただの文字列と化している。 


シャビとイニエスタのコンビが、指導者としてバルサで実現することがあるのでしょうか。

その時は、再びバルサ黄金期を作ってほしいものです。

UbuntuでWPS Office 2019 を使ってみた

背景

ある人とPowerPoint資料をやり取りする機会があった。
ただし、こっちはUbuntu(18.04)、あっちはWindows

Ubuntu標準のLibreOfficeという標準ソフトで編集することは可能だが、 図やレイアウトがほぼおかしくなる。
このままわかりあうことはできないのか。

私の師であるGoogle先生に何かよい代替ソフトないか聞いたところ、
WPS Office 2019といういい感じのものがあると伺った。

果たして、その結果はいかに。。。


WPS Office 2019インストール方法

WPS Office for Linuxのページで概要を読んでみることにしよう。

”Fully compatible with Microsoft Office”と記載あり。頼もしい。
ただ、PowerPointのとこに"Fully compatible with Microsoft PowerPoint (.PPT)"と記載があり、
PPTXは互換性ないんだね、と思ったり。でもFull compatibleでないだけで、Almost compatibleかもしれない。

そのあたりは実際に触ってみてというところか。


さて、下記インストール方法である。

  1. WPS OfficeサイトにGo!
  2. Downloadボタンをクリック!
    クリック後、"wps-office_11.1.0.10161.XA_amd64.deb"がダウンロードされていることを確認する。
  3. dpkgコマンドでインストール。これで終わり。
    • $ sudo dpkg -i wps-office_11.1.0.10161.XA_amd64.deb


次に、起動方法だ。 下記でどちらでも起動することが可能である。

  • ターミナルで、$ wpsと入力する
  • 検索ウィンドウで"wps"と入力すると、候補アプリがでてくるので、それをクリックする。

あとがき

この方法だと言語仕様が英語になります。

"Ubuntuソフトウェア"アプリで”WPS”と検索すると、
"”WPS Office 2019 - Multi-Language”と表記されたソフトが検索結果に表示されるので、
こちらでインストールすると、もしかしたら日本語にできるかもしれない。

ただ英語でやっているオレかっこいい! スタバでマック広げてます!
そんな感じで英語設定で共に歩みましょう。

PyTorchについて概要を把握したいと思ってましたが。。。

今後必要になりそうなので、やっと調べ始めました。
公式ドキュメントを読んでも、まぁ頭に入らないので、pytorchを使用しているプログラムから学んで行くことにしよう。

と思っていましたが、結論いうと、
中途半端な知識ではほとんどわからない、ということがわかりました。。


これ以降はだたの駄文、汚物じゃ!!
今年かけてpytorchならびにDeeplearningについて学習し、
年末にこの汚物を修正し、神へと昇華させる所存でございます。


お勉強用プログラム

Deep learning で一番ホットな企業であるNVIDIAのサンプルをお勉強用としてます。

そのNVIDIAのデバイスを使用した、JetBotというものがあり、それ用に提供されているCollision Avoidanceのデモプログラムを見ています。

コードは、↓Githubから取ってきてます。


さっそくレッツ&ゴー!!

[1] import torch
[2] import torchvision

[1][2] importしている"torch" と "torchvision"は何者ぞ?

公式ドキュメントによると、

  • torch: Tensorデータやその算術とかのパッケージ
  • torchvision: Computer Visionのためのパッケージ。具体的には下記のようなもの
  • popular datasets
  • model architectures
  • common image transformations

torchvisionの"vision"は、computer visionvisionか、なるほど。

"torch"単品のほうは、computer visionに限らず、汎用的なものが詰まっているのか、なるほど。


[3] model = torchvision.models.alexnet(pretrained=False)
[4] model.classifier[6] = torch.nn.Linear(model.classifier[6].in_features, 2)

[3] torchvisionパッケージで、かの有名なalexnetを召喚している。(torchvisionドキュメント箇所)

[4] よくわからん。。一つずつみていこうか。

  • model.classifier[6] :
    • マジックナンバー6ってなんだ?
    • ?今のところよくわかっていないけど、最終レイヤーを弄っているっぽい。
  • torch.nn.Linear:
    • torch.nn:
      • グラフのためのベーシックなブロックとのこと。
      • ところで、torch.nnの”nn”って何の略なんだ?よくわからん。
    • torch.nn.Linear
      • 入力データを線形変換(Linear transformation)するもの。全然わかんね。。

[5] model.load_state_dict(torch.load('best_model.pth'))

[5] モデルの重みデータを読み込んでいる


[6] device = torch.device('cuda')
[7] model = model.to(device)

[6] torch.device: cuda使います。と宣言。

[7] 調べてないけど、modelをdevice(cuda,,というかGPU?)へロードします宣言。


[8]
import torch.nn.functional as F
import time

def update(change):
    global robot
    x = change['new'] # <--- camera input 
    x = preprocess(x) # <--- cmera input preprocessed
    y = model(x) # <--- Alextnetにかけた結果がy
    y = F.softmax(y, dim=1) # <--- yをsoftmax関数にかけて、0〜100%の値に変換する。
    prob_blocked = float(y.flatten()[0]) #<---flatten後の最初の要素が、blocked状態かどうかを示すものらしい。
    if prob_blocked < 0.5: <--- 50%より小さいと直進
        robot.forward(speed_slider.value)
    else: <--- 50%以上だと、Blockedとみなし、左へ曲がる。
    robot.left(speed_slider.value)
    time.sleep(0.001)

update({'new': camera.value})  # we call the function once to initialize"

[8] プログラム中にコメントとして記載。