blog.tmp.tokyo

No Promises Await at Journey's End

伊右衛門・特茶の特徴を読み解く

序。

これまでも何度か書いてきたように思いますが、私の仕事はシステムエンジニア、いわゆるSEというやつです。ですが、なんとなくカッコ良さというか凄さが伝わらないような気がしていてプライベートなところではプログラマと名乗ってます。

実際にプログラムもバリバリ書いてるので嘘ではないと思いますし、仕事を離れた場でもプログラムを書いたり関連する技術を学ぶために書籍を読んだりと研鑽をしてることが多いのでヨシとします。

問。

ふとX(旧Twitter)を見ていたらこんなポストを見つけました。

x.com

このポストのリプライ欄に正面からの画像があるので気になる方はそちらを見ていただくとして、数学好きとしてはやって見なければいけないかな、と思いチャレンジしてみました。

・・・というか定数と一次関数ばかり・・・値の範囲も示されてるからグラフを書けば良いのかな、と。

解。

プログラマらしくここはプログラムを使って解いてみることにしました。数学関係ならPythonの出番かな、と思います。Numpyのライブラリが強力すぎる。

と偉そうなことを言う割には専門はJavaなので細かい文法的なところはうる覚え。調べながら書きました。以下のようなプログラムになりました。同じ処理が続くので関数化すればいいのかもしれませんが、ここでは直感的に見てわかることを重視してあえてベタ書きのままにしておきます(言い訳)。

import matplotlib.pyplot as plt
import numpy as np

plt.xlim(-10, 12)  # x軸の表示範囲
plt.ylim(-10, 10)  # y軸の表示範囲

# 1列目
x1 = np.linspace(-9, -8)
y1 = 7 * np.ones_like(x1)
plt.plot(x1, y1)

x2 = np.linspace(-9, -8)
y2 = 5 * np.ones_like(x2)
plt.plot(x2, y2)

x3 = np.linspace(-9, -8)
y3 = x3 * 2 + 20
plt.plot(x3, y3)

y4 = np.linspace(2, 7)
x4 = -7 * np.ones_like(y4)
plt.plot(x4, y4)

x5 = np.linspace(-7, -3)
y5 = 7 * np.ones_like(x5)
plt.plot(x5, y5)

x6 = np.linspace(-6, -5)
y6 = 6 * np.ones_like(x6)
plt.plot(x6, y6)

y7 = np.linspace(4, 5)
x7 = -6 * np.ones_like(y7)
plt.plot(x7, y7)

x8 = np.linspace(-6, -5)
y8 = 5 * np.ones_like(x8)
plt.plot(x8, y8)

y9 = np.linspace(4, 5)
x9 = -5 * np.ones_like(y9)
plt.plot(x9, y9)

x10 = np.linspace(-6, -5)
y10 = 4 * np.ones_like(x10)
plt.plot(x10, y10)

# 2列目
x11 = np.linspace(-4, -3)
y11 = x11 * (-6) - 16
plt.plot(x11, y11)

x12 = np.linspace(-5, -3)
y12 = x12 + 7
plt.plot(x12, y12)

x13 = np.linspace(-3, -2)
y13 = x13 * (-1) + 6
plt.plot(x13, y13)

y14 = np.linspace(4, 8)
x14 = 2 * np.ones_like(y14)
plt.plot(x14, y14)

x15 = np.linspace(-1, 0)
y15 = x15 * 2 + 7
plt.plot(x15, y15)

x16 = np.linspace(4, 5)
y16 = x16 * (-2) + 15
plt.plot(x16, y16)

x17 = np.linspace(0, 3)
y17 = x17 + 2
plt.plot(x17, y17)

x18 = np.linspace(7, 9)
y18 = 6 * np.ones_like(x18)
plt.plot(x18, y18)

y19 = np.linspace(5, 7)
x19 = 8 * np.ones_like(y19)
plt.plot(x19, y19)

x20 = np.linspace(8, 9)
y20 = x20 * (-2) + 21
plt.plot(x20, y20)

# 3列目
x21 = np.linspace(7, 10)
y21 = x21 - 5
plt.plot(x21, y21)

x22 = np.linspace(7, 10)
y22 = 2 * np.ones_like(x22)
plt.plot(x22, y22)

y23 = np.linspace(-(23/3), -2)
x23 = -8 * np.ones_like(y23)
plt.plot(x23, y23)

x24 = np.linspace(-8, -6)
y24 = -2 * np.ones_like(x24)
plt.plot(x24, y24)

y25 = np.linspace(-7, -2)
x25 = -6 * np.ones_like(y25)
plt.plot(x25, y25)

x26 = np.linspace(-8, -6)
y26 = -4 * np.ones_like(x26)
plt.plot(x26, y26)

x27 = np.linspace(-8, -6)
y27 = -6 * np.ones_like(x27)
plt.plot(x27, y27)

x28 = np.linspace(-9, -6)
y28 = x28 * (1/3) - 5
plt.plot(x28, y28)

x29 = np.linspace(-5, -2)
y29 = -3 * np.ones_like(x29)
plt.plot(x29, y29)

y30 = np.linspace(-8, -3)
x30 = -2 * np.ones_like(y30)
plt.plot(x30, y30)

# 4列目
x31 = np.linspace(-5, -4)
y31 = x31 * 6 + 22
plt.plot(x31, y31)

y32 = np.linspace(-7, -4)
x32 = 0 * np.ones_like(y32)
plt.plot(x32, y32)

x33 = np.linspace(1, 4)
y33 = -4 * np.ones_like(x33)
plt.plot(x33, y33)

y34 = np.linspace(-8, -3)
x34 = 3 * np.ones_like(y34)
plt.plot(x34, y34)

x35 = np.linspace(8, 10)
y35 = -2 * np.ones_like(x35)
plt.plot(x35, y35)

x36 = np.linspace(7, 10)
y36 = x36 * (2/3) - (26/3)
plt.plot(x36, y36)

x37 = np.linspace(7, 11)
y37 = -4 * np.ones_like(x37)
plt.plot(x37, y37)

x38 = np.linspace(9, 11)
y38 = x38 * 2 - 26
plt.plot(x38, y38)

x39 = np.linspace(7, 9)
y39 = -8 * np.ones_like(x39)
plt.plot(x39, y39)

y40 = np.linspace(-8, -6)
x40 = 7 * np.ones_like(y40)
plt.plot(x40, y40)

x41 = np.linspace(7, 10)
y41 = -6 * np.ones_like(x41)
plt.plot(x41, y41)

plt.grid()
plt.show()

大抵のPythonの処理系ならMatplotlibが入ってるのではないかと思うので、上のプログラムをコピって適当なファイル名で保存して実行(雑)すれば動くと思います。

答。

なるほど・・・。

結。

たまにはゲームを離れて真面目?な話題も良いかもしれませんね。プログラムのネタはいくらでも書けるので書きたい思いもあるのですが、検索とかで引っかかると職場で当ブログの存在がバレても恥ずかしいのであまり書かないようにしています・・・。

別なブログを立ち上げるのがいいのかもしれませんが、これまで複数ブログを立ち上げてあまりうまく行ったことがないので二の足を踏んでます。

Rust再学習の記録(1)

序。

本業はプログラマなのでたまにはそれっぽい記事も書いておこうかと思います。仕事の内容とは全然違って趣味で勉強しているプログラミングの話です。

仕事ではJavaをメインにWebアプリケーションの開発をしていたり、それを若手に教育したりしていますが、元々はプログラマという職業に憧れてネイティブで動くC/C++などが好きで勉強していました。

一時期、仕事でもC/C++を使っていた時期があり、その頃は忙しくて毎日終電とか休日出勤ばかりだったのですが、プログラミングに没頭できていて変なマネジメントなんかは考えなくて良い立場だったので本当に毎日楽しくて仕事が充実していました。

www.blog-tmp.tokyo

そんな楽しい楽しいC/C++言語ですが、その後継とも言われるRustが近年話題です。前回記事はもう4年前です。少し勉強してコロナ禍でゲームとかにハマって今に至る(雑)のでHello, Worldを表示させるあたりで終わってますが、今回はその先へ行きます。

環境

  • MacBook Pro(2018年モノ)
  • macOS 13 Ventura

Rust環境のインストールについては上の記事参照です。作業は基本Terminalでやってます。このあたりがわからない人は別途学習してから参照してください。

ご無沙汰なので

ということですが、久々なので前にセットアップした環境もだいぶ古くなっています。まずはアップデートして最新の環境に。

$> rustup update

これで最新化できます。ちょくちょくやっていればすぐ終わるのかもしれませんが、私の場合は「超」久しぶりだったため結構時間かかりました。

[tomohiko : /Users/tomohiko]$ rustup update
info: syncing channel updates for 'stable-x86_64-apple-darwin'
732.1 KiB / 732.1 KiB (100 %) 319.7 KiB/s in  2s ETA:  0s
info: latest update on 2023-04-20, rust version 1.69.0 (84c898d65 2023-04-16)
info: downloading component 'cargo'
  4.8 MiB /   4.8 MiB (100 %) 518.4 KiB/s in 10s ETA:  0s
info: downloading component 'clippy'
  2.1 MiB /   2.1 MiB (100 %) 618.8 KiB/s in  3s ETA:  0s
info: downloading component 'rust-docs'
 13.4 MiB /  13.4 MiB (100 %) 294.4 KiB/s in 51s ETA:  0s
info: downloading component 'rust-std'
 26.3 MiB /  26.3 MiB (100 %)   1.6 MiB/s in  4m 45s ETA:  0s    
info: downloading component 'rustc'
 53.6 MiB /  53.6 MiB (100 %)   1.3 MiB/s in 47s ETA:  0s 
info: downloading component 'rustfmt'
  1.6 MiB /   1.6 MiB (100 %)   1.5 MiB/s in  1s ETA:  0s
info: removing previous version of component 'cargo'
info: removing previous version of component 'clippy'
info: removing previous version of component 'rust-docs'
info: removing previous version of component 'rust-std'
info: removing previous version of component 'rustc'
info: removing previous version of component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 13.4 MiB /  13.4 MiB (100 %)   5.6 MiB/s in  2s ETA:  0s
info: installing component 'rust-std'
 26.3 MiB /  26.3 MiB (100 %)  14.8 MiB/s in  1s ETA:  0s
info: installing component 'rustc'
 53.6 MiB /  53.6 MiB (100 %)  16.9 MiB/s in  3s ETA:  0s
info: installing component 'rustfmt'
info: checking for self-updates
info: downloading self-update

  stable-x86_64-apple-darwin updated - rustc 1.69.0 (84c898d65 2023-04-16) (from rustc 1.54.0 (a178d0322 2021-07-26))

info: cleaning up downloads & tmp directories

プロンプトについては PS1 の環境変数をいじってるので変更されています。その辺に興味あればLinuxとかUnixのコマンドを調べてみてください。記事の内容からは外れるので割愛します。

バージョンの確認は以下の通りです。

[tomohiko : /Users/tomohiko]$ cargo --version
cargo 1.69.0 (6e9a83356 2023-04-12)
[tomohiko : /Users/tomohiko]$ rustc --version
rustc 1.69.0 (84c898d65 2023-04-16)
[tomohiko : /Users/tomohiko]$ rustdoc --version
rustdoc 1.69.0 (84c898d65 2023-04-16)

これ実行したのは5月の末なのですが、翌日別の端末でやったら 1.70.0 でした。ちょうど次のアップデートが出る直前にやっていたようです。

プログラムを作って動かす

ということで、プログラム作ります。

[tomohiko : /Users/tomohiko/Documents/data/rust_projects]$ cargo new list21
     Created binary (application) `list21` package
[tomohiko : /Users/tomohiko/Documents/data/rust_projects]$ cd list21/
[tomohiko : /Users/tomohiko/Documents/data/rust_projects/list21]$ ls
Cargo.toml  src
[tomohiko : /Users/tomohiko/Documents/data/rust_projects/list21]$ subl src/main.rs 

簡単に解説すると、cargo new list21list21 というプロジェクトを作ります。その中にある src フォルダの中に main.rs というコードがあるので、それをエディタで開いています。

私はmacではsublimeというテキストエディタを使っており、subl コマンドはコマンドライン上からテキストを開くコマンドです。

fn main() {
    let x = 100;
    let y:i64 = 200;
    let z = x + y;
    println!("{} + {} = {}", x, y, z);
}

これを動かすのは、

[tomohiko : /Users/tomohiko/Documents/data/rust_projects/list21]$ cargo run
   Compiling list21 v0.1.0 (/Users/tomohiko/Documents/data/rust_projects/list21)
    Finished dev [unoptimized + debuginfo] target(s) in 0.43s
     Running `target/debug/list21`
100 + 200 = 300

という感じです。簡単ですね。ここまでは。

結。

今回はここまで。

前の記事と似たような感じですが、思い出すには良い内容かと思います。次回からは具体的にRustのプログラムについて自分なりに理解した内容を備忘録代わりに書いていこうと思います。

全ての内容を網羅するわけでもなく、私が勉強して気になったところを徹底的に調べてプログラムを動かして検証して書いていきます。

4月最後の STATION SWITCH 活動

今日も元気に STATION SWITCH セレオ八王子に来て自分だけの時間を過ごしています。今日は平日ですが会社が自動的に有給休暇を消費して休みとされている日です。仕事をしている人もいるようですが、私はそこまで勤勉な人間ではないのでお休みにしています。

STATION SWITCH に関する過去記事

これまで書いた STATION SWITCH に関する記事はこちら。本日で 4 回目の利用です。月 4 回の利用枠をちゃんと消化できました。

www.blog-tmp.tokyo

www.blog-tmp.tokyo

www.blog-tmp.tokyo

www.blog-tmp.tokyo

開発者目線の話

今日はちょっと開発者目線の話です。

Rust の学び

最近は新しい技術の習得として、プログラミング言語 Rust を学んでます。C/C++ 言語の後継と目され、システムレベルの開発から Web システムの開発まで万能にこなす言語です。実行速度の速さとメモリ管理の安全性が謳われているのですが、所有権などの慣れない概念もあって初学者が学ぶには難易度の高い言語です。

doc.rust-jp.rs

Rust を学ぶには上記リンクの「the book」と呼ばれる公式のドキュメントがおすすめです。日本語が若干怪しい部分もありますが、公式のドキュメントということもあり、解説は詳しいですし信頼できる情報です。

私はこの the book の第 10 章あたりまで学習が進んでます。ちょうど半分くらいです。

余談・最初に学ぶ言語は?

よく議論されることですが、プログラミング未経験者が最初に勉強するならどの言語がいいか、という話です。

私は圧倒的なまでに Java 言語を推します。

まあ、私が一番好きで得意としているという側面もあるのですが、Ruby とか Python とか JavaScript とか近年人気のある言語は確かにとっつきやすいですし、ちょこちょこっと書けばそれっぽいモノが動くので最初にやるにはいいのかもしれませんが、もう少し厳格なルールに基づくプログラムを強制される言語の方が勉強になると思います。

かといって C/C++ を最初にやるのはゲームで言うとデモンズソウルとかをやるようなものなので、程よくシステムから切り離されていて程よくルールが厳しい Java が心地よいです。Java で一通りコマンドラインからフレームワーク使った Web システムの開発までやれれば、Ruby や Python などの言語もすぐに習得できるでしょうし、C/C++ や Rust といった高難易度の言語へも進めると思います。

Paiza Cloud 開発環境を卒業

さて本題です。これまで Paiza Cloud 開発環境というのを使ってみていました。

paiza.cloud

ブラウザベースで Linux のサーバ 1 台使えるので無料枠でも結構遊べます。ただ、無料枠だと使っているサーバの連続使用が 24 時間とかなので、月額 980 円のライトプランを契約していました。macOS と Windows の間で同じ環境が使えるというのも魅力のひとつではありますが、なんと言っても iPad からもブラウザベースでプログラミングできてしまうので使っていました。

ノートパソコンなくても iPad 持ち歩けばプログラミングできるじゃん!と思ってしばらくつかっていたのですが、結局は iPad からだと使いにくいんですよね。画面も小さめだし、CUI 叩くときに Tab とか ↑↓ とか使えなかったり・・・。

ということで卒業することにしました。macOS のローカル環境にはもともと Rust の処理系もインストール済みでしたし、特に準備することはありませんでした。やったのは解約する Paiza Cloud 環境の方からこれまで勉強で作ったプログラムの資材一式をダウンロードしておくことくらいでした。

2021.04.30 23:50 追記
Paiza Cloud 開発のサポートより連絡をいただきました。実は解約手続きにあたり、アカウント削除をしただけだったので有料プランが解約できているのかハッキリしなかったのです。メールで問い合わせに投げておいたら、夜返信が来ておりました。アカウント削除により有料プランも解約されているそうです。

Brackets というエディタが・・・

ひとつ悲しめだったのがちょくちょく使っていた Brackets というエディタのお話です。Windows だったら秀丸エディタ一択なのですが、macOS ではエディタにこれといった決定的なモノがなくてイロイロ試していました。

割といいかな、と思っていた Brackets というエディタは Adobe がサポートしているエディタで、表示の綺麗さなどが気に入ってました。

brackets.io

ところが起動して使い始めてみたら、こんなメッセージが表示されるようになりました。

2021 年 9 月 1 日、Adobe は Brackets のサポートを終了します。 Brackets の使用、保守、改善を継続する場合は、GitHub でプロジェクトをフォークできます。 Visual Studio Code は、オープンソース上に構築された Microsoft の無料コードエディターです。Adobe は Microsoft とパートナー関係にあり、このエディターへの移行をお勧めします。

MS の Visual Studio Code に乗り換えろってさ。

仕事でも時々 vscode は使うので別に使うのが嫌とかはないんですけど、ちょっとテキストファイル修正したりするのに vscode を使うのもちょっと重厚長大じゃないかなぁ・・・というイメージが抜けません。私の個人的な感覚では vscode はエディタというより IDE だと思ってます。まあ、世間的にはエディタなんでしょうけど。

ということで Sublime を当面使っていくことに。

www.sublimetext.com

Sublime の何がいいかって、コマンドラインから起動できるんですよね。

$> subl sample.txt

とすれば目的のファイルを Sublime で開いてくれます。この辺が便利。

Ricty のバッククオート問題

前々から気づいていて放置していたのですが、Sublime に限らず macOS で Ricty というフォントを使うとバッククオート ` が前の文字に重なるバグがあったんです。Markdown とかその他いろいろ困るのでどうしたものかな、と思っていたのですが、本腰入れて調べてみたら対処がありました。

qiita.com

非常に助かりました。FontForge というフォントを弄るアプリが必要になりますが、リンク先から確認すればインストールできると思います。

というか Ricty なんてプログラミング用フォントなので使う人はプログラミングをそれなりにやると思うので、FontForge でフォントの修正なんてちょろいものだと思います。

.git フォルダの存在

Paiza Cloud をやめたので、ソース管理は GitHub 使うか、とダウンロードしてきた Rust の資材一式をあまり考えずに GitHub に登録しようとしたら sub module だの何だの言われて Git に登録できませんでした。

なんでやねん、と調べてみたら cargo new で作ったプロジェクトフォルダに .git フォルダが含まれていました。macOS 上でやると作られないので、Paiza Cloud 上の Rust 環境で cargo new すると勝手に作る気がします。オプションで --vcs とかつければいいっぽいのですが、macOS 上でやれば特に大丈夫そうなので別にいいや、と。

ちくちく .git フォルダを削除して GitHub へ登録しました。

まとめ

概ね作業環境は整いました。いろいろ問題も片付いて一安心です。午後からは Rust の勉強に集中します。

STATION SWITCH セレオ八王子 with 緊急事態宣言

こんにちは。

今日(2021/04/25)は朝から STATION SWITCH に来ています。

www.blog-tmp.tokyo

www.blog-tmp.tokyo

今日から東京は緊急事態宣言が発令されております。そんな中、車で移動して JR 八王子駅直結のセレオ八王子の 9F にある STATION SWITCH に来てプログラミングの勉強に勤しんでいました。

緊急事態宣言ということもあり、セレオ八王子もエスカレータでの移動ができず、エレベータでの移動に制限されているばかりか、多くの店舗は休業。9F にはたくさんの飲食店があるのですが軒並み休業です。

少し寂しいですが、G.W. くらいは大人しく過ごす必要がありそうですね。STATION SWITCH は感染対策も十分、というより人が全然いない(月額会員が少ないんじゃないかと)ので「密」どころか「疎」と言う感じです。おかげで安心して作業を進められます。

そろそろ成果をブログへアップしなきゃ。

STATION SWITCHからこんにちは。

おばんです。

先日記事にした STATION SWITCH に来ています。

www.blog-tmp.tokyo

フロア内の写真撮影は NG ですので公式サイトを参考にしてください。

www.jrccd.co.jp

朝 10:00 にセレオ八王子が開店しますので、それに合わせて行きました。事前にメールで申し込みに行く旨を伝えてあったので、すぐに申し込み手続きに入りました。

事前にやっておくことは以下の通りです。

  • 公式サイトで会員登録
  • クレジットカードの登録

当日は持ち物があります。

  • 本人確認書類(運転免許とか)
  • 交通系 IC カード(入退室の管理に使用)
  • クレジットカード(登録しておけば不要っぽい)
  • 印鑑(シャチハタ OK なのでシャチハタの方が良さげ。朱肉がなくて借りた)

30 分ほど申請手続きをして、いろいろ説明いただいて利用開始です。前の記事にも書きましたが、無料枠の一時利用で使用できるエリアと月額会員専用のエリアがあります。

今は会員専用エリアの囲われたスペースで作業しています。オープンしてから2日ほどですので、まだ会員が少ないのかオープンエリア(非会員用エリア)はチラホラ作業している人がいますが、会員専用エリアは私だけです。

予約状況見ても私以外に1件予約があるだけみたいなので会員は少なそうです。

利用する側からすれば静かで快適なのですが、潰れても困るのでほどほどに人は入って欲しいところですね。会員専用の席は広いですし快適です。月4回のプランで月額会員になりましたので、定期的に通うつもりです。

ちなみに何をしてるかというとプログラミングしてます。新しい言語でも勉強してみようかと始めてみたことがあるので、しばらく勉強目的で週1ペースで来てみようと思います。