最近の Ruby の発見 221028

ネスト構造の配列に複数の配列を追加

  • 以下のように書くのは冗長
parent = []

child_1 = [1, 2, 3]
child_2 = [4, 5, 6]
child_3 = [7, 8, 9]

parent << child_1
parent << child_2
parent << child_3

p parent
# [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • 以下のように書くとスッキリ
    • ただ、なぜこうなるのか理解できない
parent = []

child_1 = [1, 2, 3]
child_2 = [4, 5, 6]
child_3 = [7, 8, 9]

parent += [child_1, child_2, child_3]

p parent
# [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • 要素を取りまとめるために新規の(親)配列を作るなら、いきなり代入すればよい
child_1 = [1, 2, 3]
child_2 = [4, 5, 6]
child_3 = [7, 8, 9]

parent = [child_1, child_2, child_3]

p parent
# [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

if case の戻り値も変数に代入できる

color = "red"

drink = if color == "yellow"
  "beer"
else
  "wine"
end

p drink
# "wine"
color = "white"

drink = case color
when "white"
  "sake"
when "yellow"
  "beer"
when "red"
  "wine"
end

p drink
# "sake"

その他雑感

  • メソッドなど「最終行に書いた内容が戻り値になる」→「return はいらない」→「return は条件分岐的な使い方ができる」、というのがすごいと思った
  • 条件分岐の結果をダイレクトに変数に入れ込むという発想がなかったので驚いた

マージ・リベース(こわくない Git)


コミット・ブランチ・マージ・リベースを実行した際に、何が起こっているか分かりやすく解説されているスライド。


リベースの功罪

GOOD

  • コミットグラフが綺麗になる
    • マージ後のログが綺麗になるので、 main にマージする直前にやるのは ok とすることがある
    • プルリクエストを送る場合は、rebase してから送るのがマナーとされている

BAD

  • すでに push されたブランチをリベースすると、push できなくなる
  • 「マージした記録」が消失する
  • マージに比べるとコンフリクトが起こった場合の解消に手間がかかる

学習習慣の改善策 ver1.0

@uchihiro さんの LT 会の内容が、今の自分の問題点にちょうどオーバーラップしたため、発表されていた内容をベースに自分の生活サイクルに当てはめて、学習習慣の見直し・改善を考えてみる。

現状の問題点

  • 仕事の凪/多忙が読みにくいため、週次・月次目標が立てづらい
    • ガチガチに予定を組むと、進捗が遅れた場合かえってやる気が削がれる
  • ラクティスの内容によって進度が大きく変わる・予測できない
    • すんなり進むときと、はまり込む時の差が大きすぎる
  • 日報の提出を重荷に感じてしまう時がある
    • 「しっかりまとめないと」といった自縛みたいな
  • 技術書や公式リファレンスと向き合う順番が、一番最後になっておざなりになりがち
    • 技術書
      • 手元にあるものの、まずは PC に向かって作業してしまうので結局最後になり「明日でいいか」となりがち
    • 公式リファレンス
      • そもそも嫌い
  • ポモドーロで時間を区切っても無視してしまう

改善策 ver1.0

仕事の凪/多忙が読みにくいため、週次・月次目標が立てづらい

  • ここは外的な要因が大きいためコントロールできる範囲が限られている
    • Linux の学習でも活かせることがあったように、できるところは時短・自動化してタスクを圧縮していくほか、現状で思いつくことはあまり無い
  • 月次で予定を組むとほぼトレース不可能になってしまうので、週次で予定を立て、細かく軌道修正していく
    • 毎週日曜日を、週次予定を立てる・見直し軌道修正する日として固定する
  • 「進捗に遅れが出ても仕方ない」くらいの心持ちでいる

ラクティスの内容によって進度が大きく変わる・予測できない

  • 「量」(何ページまで・プラクティス単位など)ざっくり区切らない
    • 「参考リンク 1 記事」「技術書の章・節」と、タスクをなるべく細分化して区切る
  • 細かく区切った内容を学習のロードマップとして目次化し、日報上で進捗を追う(マークダウンのチェックボックス使う)

日報の提出を重荷に感じてしまう時がある

  • 些細な内容でよいので、学習した日はまずは提出することを優先する
    • 学習の記録は逐一書いているので、まとめが多少雑になってもよいので必ず当日中に提出する
  • 「しっかり書き込んだ日報を提出しないと」といった謎のプレッシャーは、ただの思いこみ

技術書や公式リファレンスと向き合う順番が、一番最後になっておざなりになりがち

  • 「ポモドーロ 1 回目は技術書・公式リファレンスを見る」時間に充ててみる
    • 基本は技術書・公式リファレンスを 1 日おきに行き来する
  • よくよく考えると、最もノイズが少ない情報源なはずなのに一番後回しにしていた気がする(公式リファレンスは忌避)
  • 思考停止でタスクを強制する方がよい
  • 最初の 25 分で切り上げる
    • 本題はプラクティスの着手
    • この時間は復習と助走
  • 公式リファレンス(英語)の対処
    • DeepL のデスクトップアプリを常駐化
      • Command + Shift + D ショートカット割り当て

ポモドーロで時間を区切っても無視してしまう

  1. タイマー音が鳴ったら、パブロフの犬のごとく椅子から立ち上がる
  2. 整体院でもらった背筋矯正ポールにのる

改善策のアップデート

  • 上記の改善策を定期的に見直し、ブラッシュアップする

リモートのLinux環境でPythonファイルを実行する

先日の記事、「シェルスクリプトに書いた命令を指定時刻に実行する」を書き終えてから、「そういや、シェルスクリプトじゃなくて Python ファイルって Linux 上で動かせるの?」と思ったのでメモ。

まずは、バージョン確認。

% python3 -V  
Python 3.7.3

正直、Linux にインストールした記憶がないのだが、もしかすると apt install を試していた時にインストールしていたのかもしれない。

続いて、適当なファイルを作って処理を書いてみる。

% touch test.py
% vim test.py
% cat test.py

l = [1, 2, 3, 4, 5]
for i in l:
    print(i)

以下でスクリプトを実行できるようだ。

% python3 test.py

1
2
3
4
5

ぬー。
Linux、めちゃ便利。

今まで「自分のパソコンがついてないと、指定時刻に Python スクリプトを自動実行できぬ」だったのが、24 時間いつでも OK ということか。
またひとつ、Linux のことが好きになった。

リモート環境のLinuxから指定時刻にファイルを自動でFTP転送する

とある事情から、指定時刻に FTP 経由でファイルをアップロードする必要がありました。
ローカルマシンを使うと、コンピューターをスリーブさせていたり電源を落としていると機能しません。

なので、何月何日何時何分であろうとも決められた時間に確実にファイル転送するには、リモート環境にインストールした Linux から処理を実行する必要があります。
今回はその手順の総集編といった内容です。
それぞれの詳細は下記のエントリーに記載しています。

全体の流れは以下。

Step 1 : ローカル → リモート上の Linux へファイル転送

scp <送るファイル> htk:~/dir

Step 2 : 「ファイルを FTP 転送する」という処理のシェルスクリプトを用意

#!/bin/sh

ftp -p -n << EOF
  open <FTPサーバー名(ホスト名)>
  user <ユーザー名> <パスワード>
  binary
  cd <サーバー上のディレクトリ>
  lcd <ローカルのディレクトリ>
  put <アップロードするファイル>
  quit
EOF

Step 3 : 指定時刻にシェルスクリプトを実行

# 2022年9月19日10:00 に実行
% at -f <シェルスクリプトのファイル名> 10:00 091922

補足

男前と、ハイボールと、シークワーサー。

同性から見て思う美人。
同性から見て思う男前。

そんな風に思える人が、あなたにもいるのかもしれないし、いないのかもしれない。

先日、妻がリビングでテレビを見ていた。
何気なく横からのぞいてみると、画面の中には僕が思う「同性から見て思う男前」が 2 人いた。

浅野忠信と、オダギリジョー

2 人とも 40 代後半とのことだったが、残念な歳のとり方をしていなかった。
カッコよかった。

話は変わり、数年前にあったある出来事について。

僕は当時の取引先の担当さんと会うことになった。
遠方の会社だったこともあり、それまでメールか電話でしかやり取りしたことが無かったので、実際に顔を向き合わせて話すのは緊張したし新鮮だった。

打ち合わせも終盤に近づいた頃、その担当さんは不意に言う。
「ウチの社長が僕さんに会いたいと言ってたんだけど、時間ある?」と。

どうせ一泊して帰るつもりだったし、そのままホテルに戻るのもつまらないので、「はい、全然大丈夫です。」と答える。

担当さんはスマホに手をのばし、社長あてに電話をかけて何やら通話しはじめた。
そして、そのとき社長さんは外出中とのことで、夕方前くらいに合流することで話がまとまった。
担当さんは「じゃあ、そういうことで今後ともよろしく」的な挨拶を残し、あっさりと帰って行った。

予定していなかった流れだったし、相手が社長さんということもあり、ソワソワしながらその時を待った。

約束の時間から 5, 6 分ほど遅れてその人は現れた。

浅野忠信によく似た社長が。

「お待たせしてすみません。」と、その人は言う。
そこから小一時間ほど仕事の話をした。

僕が話している間、社長は会話を遮ることはなく、僕からの質問に対しては数秒の間をおいて的確な回答をした。
多くを語らず、振る舞いは紳士だった。
知的でミステリアスな人だった。
年齢は 40 代半ばくらい。
若い頃はモテて、ブイブイいわせてたに違いない。
いや、モテていないはずがない。
現在進行系で。

打ち合わせも一段落した頃、浅野忠信は言う。

「僕さん、この後予定ありますか?」
「よければ、知ってるお店でいい所があるんですよ。」

断る理由はない。
なにせ相手は浅野忠信なのだ。

連れて行かれた店は創作系フレンチと言えるようなところだった。
ただ、キャピキャピしたような雰囲気ではなく、個室でゆったり寛げる素敵な店だった。
メニューを見ても結構いいお値段だった。
味もとてもうまかった。

腹も満たされ、ほどよく酒もまわってきた頃、浅野忠信は言う。

「僕さん、よければもう一軒どうですか?」

酒好きな私に断る理由は無い。
なにせ相手は浅野忠信なのだ。

連れて行かれた次なる店はかなり綺麗なクラブだった。
そして、これまた綺麗なお姉さんが 2 人、席についた。

こちらの店も浅野忠信はよく来ているらしく、ボトルキープしているウイスキー、氷、ソーダ水がテーブルに運ばれる。
そして浅野忠信はおもむろに持っていた鞄の中から「一本のペットボトル」を取り出した。

高級そうなクラブ、美女、そして浅野忠信
そういった空気の中でペットボトルは嫌でも目を引いた。

「社長、それって...」

「うん、シークワーサーの原液。」
「沖縄から取り寄せてるんですよ。」

「シークワーサーの原液...」

「最近、歳のせいか酒の抜けが悪くてねぇ。」
「でも沖縄に旅行に行った時にこいつに出会って、以来ぞっこんなんですよ。翌朝が全然ちがう。」
「よかったら一杯飲んでみます?」

お姉さんにお願いして、浅野忠信と同じものを作ってもらい飲んでみた。
だが、翌朝はその効果を感じることはなかった。

それから数年の月日が流れ、現在。

最近なんだか酒の抜けが悪くなってきた気がする。
翌朝の体の重だるさがしんどい。

ある日、スーパーへの買い出しで妻に同行した時、何気なく売り場を見ていると「そいつ」がいた。

シークワーサー原液。
浅野忠信の記憶が蘇った。

1 本約 1,000 円と、ペットボトルではあり得ない価格だが自然と手が伸びた。
家に連れて帰り、ハイボールの中に注ぎ足す。

以来、最近感じていた酒の抜けの悪さが、体の中からほとんど消えていた。
月の周りの雲が晴れていくように。

そして私は今宵も飲む。
ハイボールとシークワーサーを。
時折、あの男前を思い出しながら。

  • いろいろ種類があるのかもしれないけど、個人的には「JAおきなわ」のシークワーサー原液がおすすめだよ!(・∀・)
  • 楽天でセット売りしてるのがコスパいい(1 本 700 円くらい)と思うよ!(・∀・)
  • 「高い!」と思うかもしれないけど、1 本で 1 週間くらいはいけるので(もちろん用量による)、日割り換算すればそれほどでもないと思うよ!(・∀・)
  • あんまり飲み過ぎると下痢になるかもしれないよ!(・∀・)