Acme::HowToMakeSushiをリリースした

ということでCPANモジュール第2弾 Acme::HowToMakeSushiをリリースしました🎉

githubはこのようになっています

github.com

metacpanもこのようになっています

metacpan.org


制作背景

多くのプログラマーが愛してやまない🍣と多くのPerlMongerが愛してやまないPerlプログラムはほぼ同値な関係ではないか. だったらこの二つを同時に作成出来ればPerlMongerの生産性があがるのでは無いかという発想の元生まれたmoduleです. 尚このモジュールはOkinawa.pm #4 エイプリルパールで発表しました.リリースしたのは4/1なのでお察しください

使い方

Acme::HowToMakeSushiはcpanmなどでインストールすると,本体の他に Acme::HowToMakeSushi::Photoもインストールされます. これらは同時に使用することが出来ない仕様となっています.

HowToMakeSushi

HowToMakeSushiはexit codeが0であるPerlプログラムであるならば寿司を完成させます. ただし 誰もお前を愛さない 的なコード.つまりexit codeが0以外のperlプログラムを作成した場合 あの漫画 っぽいメッセージと共に崩れた寿司を作ります.

実際に試してみると f:id:shimitakax:20170403093604j:plain こんな感じに寿司が出来ます.

dieすると f:id:shimitakax:20170403093646j:plain 誰もお前を愛さないメッセージと共に崩れます.

動作原理

ENDブロック内で $? の値に応じてAAをヒアドキュメントの形で printに渡しています

HowToMakeSushi::Photo

AAだけではつまらん!! 実際に現物を作れよ!!との声に答えて::Photoではjpgデータを出力します.

 perl -MAcme::HowToMakeSushi::Photo -e '' >sushi.jpg

などとすると

f:id:shimitakax:20170403094328j:plain

と寿司が出来ます.

動作原理

printを出力するところまでは先程と同様ですが,今回は予めbase64エンコードしたjpgデータを用意しています. これをMIME::Base64を用いて,デコードしてprintしています. つまりAcme::Cakeのアルゴリズムを使っています. 画像をbase64エンコードするツール


今回もモジュール雛形作成はMinillaを用いて行いました.cpanfileを作成する際に

perl Build.pl
mymeta-cpanfile --no-configure >cpanfile

などとすればいい感じにcpanfileを作ってくれるので楽です.尚cpanfileを作成するにあたっては scan-prereqs-cpanfileなどというCPANモジュールのコマンドも存在しているので,詳細は調べたいと思っています.

Minillaでモジュールを作成する場合 *.pmファイルの =encoding utf-8以降の部分にSYNOPSIS等の記述を行えば,Readmeにもいい感じに反映されます.すごい.

3月に引き続き2ヶ月連続Acmeモジュールリリースが達成できたのでちょっと嬉しいです. 尚このモジュールをリリースしたのは4/1なのですが,3/31がリリース日となるエイプリルフールもありました.

YAPC::Kansai 2017 OSAKAでLTとかした話

いきさつ

こんにちは.八雲アナグラ(@AnaTofuZ)です. 今回はYAPC::Kansai 2017 OSAKAに参加したのでレポートです. 前回のHOKKAIDOは講義でいけなかったので,Kansaiが人生YAPCでした.


~前夜祭0次

沖縄の大学生なので,今回は那覇空港から伊丹空港です.

その後,新大阪に高速バスで移動となりました.結構スムーズです.

一応学生なのでJPAさんから交通費等々を支給していただきました. 941さんにビジネス沖縄と突っ込まれましたが

偶然にも那覇空港Kさん(@CodeHex)さんと合流したのでそこからは二人で行動していました.

その後は有志数人で前夜祭0次会でした.大阪に来て初の粉もの…美味しかったです. このタイミングで長野の大学院生の方とも知り合いになりました.

そして前夜祭です!!

前夜祭

前夜祭ではpapixさんやcharsbarさん方の開発環境を見せる! という内容でした.

前夜祭とか0次会でもそうだったのですが,YAPCでは「普通に目の前で飲んでいる人が実はすごい人」な経験が多かったです. (単純にあまりPerl会の方々を知らないのものあるのですが…)

papixさんのvimでjjでESCはPerl入学式in沖縄第一回で確か披露されていて,そこからずっと使っています. charsbarの左手で全部やるとか,sagoさんのスクリーンショット+メモ(macだとMapture )は興味深かったです.


その後は前夜祭の二次会に行ったり,Acmeモジュールを書いていたりと気づいたら2時くらいでした. 遠足の前日に寝れなくなる小学生っぽさを感じながら0日目は終了しました.


YAPC当日

とりあえず宿泊したホテルで偶然同じだったyasuさん,maskystさんと食事を取り,YAPC会場に移動です.

Tシャツだけかと思っていたのですが,バッグとかモバイルバッテリーとか色々いただきました. 会場のスクリーンも大きい(A会場)ですし…おおっすげぇっ…って言ってました.以下聴講したトークの感想(抜粋です)

深沢千尋さん

かんたんPerl の深沢さんです. もともと社内向けツールとして以下に作業の省略化をするというところでPerlを使ったそうです. プログラムは第四段階(ワンライナー,社内向けツール,オーダーウェア,世界のため)のリリースがあるなども,再発見でした.

個人的にはプログラムは短くしていくのがより良いと思っていたのですが, 正規表現も空白と改行を多くして見やすくする.またワンライナーよりテンライナーとして細かく分けて行くのが良いよ!などなど….

この辺UNIX哲学っぽさが入ってくるような印象を受けました.メンテナンス大事 まだPerlワンライナーを量産して作業効率を図る…ということはしたことが無いので,味噌蔵をしっかりと作っていきたいです.

高速化の初歩 (@risouさん)

前日の前夜祭(2次会)で初心者向けなので〜などとの事でしたので,気になって行きました. 内容は素数を求めるプログラムを例にして,実装でどれだけ高速化できるか.というものでした. 個人的には高速化といえば,アーキテクチャを良くして並列実行させて,C言語で書いて…だったので,同じPerlプログラム上でここまで早くなるのか…!と衝撃的でした.

素数プログラムは講義で触れた(講義ではamdahl則の実測のために並列実行させた程度)のですが,当時はアルゴリズムを探したりすることが無かったので,アルゴリズムの有意性を再確認出来ました. そういえばプログラムはアルゴリズムがあってこそみたいな話を聞いたことがある….

あと関数呼び出しって時間がかかるんですね…!

Vue.jsで作るSPAから学ぶMVVM、非同期処理、その光と影 (しんぺい@猫型技研さん)

webApplicationはcakePHPとMojoliciousで遊んだくらいだったのですが,その際は結構URLバンバン変わった実装でした. もとい,そこまで踏み込んだ事をあまりやったことが無かったので,ちょっとググったりしながら聞いていました.

中ではGUIを参考にしながら,極力ブラウザの機能を使っていく. またGUIアーキテクチャパターン(MVC,MVVM)などを参考にして,voidメソッドのやり取りで完結させる.などなどでした. 非同期処理のレースコンディションの話などは,結構興味があったのでちょっとわかった気になりました.(あくまで気です)

PerlはWebApplicationとの繋がりは必要不可欠と思うので今後勉強していきたいです.

Webアプリケーションのキャッシュ戦略とそのパターン ( @moznionさん)

噂に聞いていたmoznionさんのトークでした. Webアプリケーションはあまり関わったことが無かったので,YAPC前は「キャッシュ…アーキテクチャ…?」という認識でした.(それこそヘネパタ,パタヘネの世界) 実際の業務では安全性(webアプリケーションが壊れないこと)が何よりも重要だったり. 何よりもキャッシュはあまり使うなという衝撃…moznionさんのトークも相まって面白かったですが,やはりwebアプリケーションの知識がもっと欲しいなと感じました.

お昼

お昼は前夜祭の場所で他の学生支援を使ったメンバーと小グループを作り,企業の方とお話しながらでした. いつも感じてることや,就職してからの事などについて質問したり,業務内容を紹介していただいたりしました. お弁当も美味しかったです…!

Mojoliciousではじめるマイクロサービスアーキテクチャ(@maskystさん)

okinawa.pmのmasakystさんです! MojoliciousでAPIを作ると結構簡単に作れるよ!という内容のトークでした. 以前PerlAPIを作ろうとしたときはAmon2を利用したのですが,Mojoliciousで作ると結構シンプルに色々作れるなという印象でした.

実際に業務でAPIを作成する際の考え方,構成方法などについて初めて見ることが出来たと思います. (いつもAPIはあるものを利用するばかりだったので…)

Perl to Go(@codehex さん)

同じくokinawa.pmのKさんでした! 今回はLTの僕をいれると3会場全てにOkinawa.pmが立つという…!! プロセスやオブジェクトなど,個人的にKさんに聞いたことがある(オブジェクトに到っては新大阪への移動バス内)の話が多く面白かったです. Go言語はTour of goを多少触った程度なので,少しづつ触っていきたいと思います. こうしてみるとPerlではプロセスのforkがやりやすいけれど,Threadはあまり…などの特色が根底ではあるけれど移植は100%不可能でもないとの間隔を覚えました.

木本 裕紀さんのセッション会場に移動しましたが,時間が時間だったので,終盤でしか聞くことが出来ませんでした…. ただ,ちょっとスマホからネットワーク経由でブラウザの表示を変える部分のデモを見ることが出来ました. その他の時間ではLTの資料直したりAcmeリリースしてたりしてました.

PerlのWebアプリケーションをデプロイする時に僕達が考えたこと (@papixさん)

実際まだ開発とデプロイが分離されている環境で作業したことが無いのですが,実際の運用開発の面ではこのような事を考えないと行けないというのがわかりました. トークの中でS3というWordがあり,検索してみるとAmazonAWSの1つであり,この辺の知識も必須だよなー.などと考えていました.

きらびやかなWebアプリケーションの裏には泥臭い作業があって,さらにチーム連携やコストを考えないと行けないなどなど. 企業で戦っていくには必要な知識だらけでした.

カヤックのゲーム開発・運用の「今」 力技と効率化の先に我々が目にしたものとは(macopyさん)

カヤックでリリースしているソシャゲの裏側を見ることが出来ました. サーバーサイドエンジニアの業務がイメージとは別方向で多岐に渡っているなという印象です.(実際にデプロイする全てを把握する必要があるなど…)

色々と環境を作る必要がある時はDockerを利用(ただしメモリやCPUは有限なのでDBはホストに配置したり定期的に消し去ったりする)などなど….

Dockerはちらっと触ったのですが,使い捨てられる試験環境という感じが強いのかなという印象でした.

Perl ウェブ開発の中世 〜CGI と Plack の間〜 (@xtetsujiさん)

てつじさんとはPerl入学式で何回かお会いしたことがあったので,気になっていたトークの1つでした. こういった業界の歴史の話好きなので嬉しいです.(世界史っぽい) 僕はCGIという単語を知る前にPerlを知ったので,あまりPerl=CGIという構図が無かったりします. ですが,結構古くからインターネットとか変わっている人に話を聞くとPerl=CGIであるので何故そうなのか気になっていました. 今まではPerlしか無かったからPerlを使ってきたんだ!というのが歴史のようですが,これからのPerlは 「むしろPerlだからこそ」という方向にシフトしている事を感じました.

はてなシステムの考古学(motemenさん)

てつじさんと同じく業界の歴史の話でした. はてなと聞くとはてなインターンの強烈っぷりが良く聞かされるので恐ろしい会社(技術力的な意味で)だったのですが,歴史を追ってみても凄まじかったです. (はてなブックマークが2泊3日で開発が終わるなど…)

50%でリリースするという50%理論はついつい100%を見て完成させないというよりは,物事を適切に細かくモデル化を行う. その中のコア機能にのみ集中して50%でリリースするという意味なのかなぁなどと思いました.

そしてこの辺でMBPのバッテリーが20%に近づき,LTにタイムスケジュールが近づいていました.


LT

というわけでLTの時間です. 今回は勢いでLTに応募してみたら,まさからのLT合格…! 応募フォームの内容を思い出すと確かPerl入学式とAcmeについて話すと書いた覚えがあるので,YAPCの前夜祭と当日でスライドとモジュールを作成しました.

minilaとかテストなどは存在は知っていましたが,触ったのも含めてLT採択されてからなので,かなり勢いだけで作成しました.

github.com

これ自体はたかはしさんのAcme::Prepara を参考にして作らせて頂きました!

ただ今現在はかなりバグが多いのでしっかり機能を追加したりとメンテしていきたいです. トーク自体は緊張しましたが,最後まで噛むこと無く(たぶん)出来ることが出来,終わった後はまたやりたいと思いました.

LTは他にもおささんぶろるっくの話や windowsperlをbuildすることや,あずまさんいっぱいでてきたりとかスケジューリングの話がありました.

そしてmakamakaさんのLTを間近で拝見しましたが,これが…これがYAPCのLT…!と衝撃を受けてました(面白すぎる…)


Keynote

アセンブラ川柳やアセンブラかるた,パンチカードなど.コンピューターの歴史と関わりについて解説をしながら 次第にPerlの話へと流れていく講演でした.この時代のマシンはKUE-CHIP2などの学習用マイコンしか触ったことが無いので リアルタイムで触っていた方が結構いたのも驚きでした.

Perlマインスイーパーを解析していくことや,USBで自動制御を行うなどwindowsならではのハックなどもあり 自分が思っている以上にPerlはなんでも出来て,かつコンピューターに詳しくない人でも楽しめるものが出来るのではと印象を受けました.


懇親会

懇親会では憧れのAcme大全著者のmakamakaさんとお話することが出来ました! Acme::MorningMusume に至るまでの歴史などについて教えて頂きました. Acme大全は無いけれど…と,ペンライト頂きました! ありがとうございます!

また941さんに「ビジネス沖縄」といじられたり,小林晋也さんともお話することが出来ました. その結果Okinawa.pmにファームノートから人を呼んでいただけるととかなんとか…!!

以上ざっとまとめたYAPC::Kansaiです.(感想が小学生並み)

次回YAPC::Fukuokaではトークしてみたいですね.あと最初からアルコールいれて参加したい!!

多段sshとvnc接続

タイトルがいい感じですが講義のメモです. OSの講義ではos.cr上にVMを立ち上げて,これをどうこうするのですが こいつには学外からは直接sshできず,一旦yomitan(shell.ie)を経由しなければなりません. 毎回ssh yomitanしてからも手ですが,面倒くさいから多段ssh(一部を踏み台にして,あたかも直接接続しているようにする) の設定を行います

参考サイトは此方

qiita.com

qiita.com

ローカルの設定はこんな感じです(~/.ssh/config)

Host yomitan
    HostName    yomitan.ie.u-ryukyu.ac.jp
    port    22
    IdentityFile ~/.ssh/ie_rsa
    User    e1557**
    StrictHostKeyChecking no

Host os.cr
    HostName os.cr.ie.u-ryukyu.ac.jp
    User e1557**
    IdentityFile ~/.ssh/ie_rsa
    ProxyCommand ssh -W %h:%p yomitan

これで

$ ssh os.cr

するとos.cr.に直接行きます.やったね.

さてここからですがos.cr上のVMvnc接続を行います. これも学内ならなにも考えずにできますが,学外からでは先程の多段sshを使う必要があります

まずはvncポートを確認するために os.cr上で

$ ie-virsh vncdisplay 01 

などをして,表示された番号に +5900 したものがVNCポートです. ちなみに defineした時にパスワードが自動出力されるのでメモっておきます

ここでmac

$ssh -L 10024:localhost:5900(さっきの) -N os.cr

を行い Finder のGo->Connect ServerもしくはChicken of the VNCを利用し localhost:10024 にパスワードを付けて接続しましょう 上のコマンドの意味はos.crに10024で接続し,localhost(ここではos.crのこと)上の5900番ポートにssh ということです.(多分)

な画面が出れば終了です.めでたしめでたし

ポッピンQ

普段まとめると言ってまとめてないので.

ポッピンQ見てきました.

www.popin-q.com

サザンプレックスしかやってなかったので,98番で古島まで行ってそこから何故か徒歩で向かいました. 帰りのバスがある予定だったのですが,19:30上映なのを19:30終了と誤解し,帰りは友人(まめ君)に送ってもらいました. この場を借りて厚く御礼を申し上げます.

映画の内容はプリキュア+まどマギ+アイマス+インド映画でしたね.ダンスが多かったです. 3DCGなダンスはフレッシュプリキュア!以降のプリキュアで恒例となっているのですが,東映劇場作品だけあり ぬるぬると動きました.ポッピン族(マスコット的なキャラ)のダンスもあったのですが,綺麗でした.

トーリーは王道.悪く言えばありがちなストーリーですね.まぁ悪くは無かったですが,近頃の「この世界の片隅に」とか「魔法少女まどか☆マギカ」ほどパンチの有るストーリーではなかったですね. ただメッセージは強く,特に自分や現実とどう向き合うかが主軸に置かれていると思います. キャラクターも可愛らしく,気力を回復するには良いアニメ映画でした.

パンフレットは売り切れていたのですが,入場者プレゼントもらいました.

映画の最後に,「魔法少女まどか☆マギカ 後編 永遠の物語」らしく次回作への予告(のようなもの)が入り終了でした. アニメ映画でやるのかな.地上波でやるのかはわかりませんが,新キャラもあるようで楽しみですね.

brewでいれたmysqlが壊れる件

講義でmysqlを使うのですが,ローカルなmacbrewでinstallするまでは良いのですが 定期的に mysql -u root -p すると正しいパスワードをいれても解決しない問題が出てきました.

具体的には

❯ mysql -u root                                                           
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

な感じですね. brew uninstall mysqlしても解決せず.四苦八苦していると

yukiyamashina.com

なblog記事が

この手順通りにやってもrm出来てないところがあって,そこは臨機応変にした. 以下作業ログ.

/v/empty ❯❯❯ sudo rm -rf /usr/local/var/mysql
/v/empty ❯❯❯ brew uninstall mysql
Uninstalling /usr/local/Cellar/mysql/5.7.16... (13,511 files, 439M)
/v/empty ❯❯❯ brew cleanup
Warning: Skipping boost: most recent version 1.63.0 not installed
Warning: Skipping source-highlight: most recent version 3.1.8_4 not installed
/v/empty ❯❯❯ brew update
Already up-to-date.
/v/empty ❯❯❯ brew install mysql
==> Downloading https://homebrew.bintray.com/bottles/mysql-5.7.16.el_capitan.bot
Already downloaded: /Users/e155730/Library/Caches/Homebrew/mysql-5.7.16.el_capitan.bottle.1.tar.gz
==> Pouring mysql-5.7.16.el_capitan.bottle.1.tar.gz
==> Using the sandbox
==> /usr/local/Cellar/mysql/5.7.16/bin/mysqld --initialize-insecure --user=e1557
==> Caveats
We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

To connect run:
    mysql -uroot

To have launchd start mysql now and restart at login:
  brew services start mysql
Or, if you don't want/need a background service you can just run:
  mysql.server start
==> Summary
🍺  /usr/local/Cellar/mysql/5.7.16: 13,511 files, 439M
/v/empty ❯❯❯ mysqld --initialize  --explicit_defaults_for_timestamp
2016-12-30T08:35:33.113558Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2016-12-30T08:35:33.113992Z 0 [ERROR] Aborting

/v/empty ❯❯❯                                                                  ⏎
/v/empty ❯❯❯ sudo rm -rf /usr/local/var/mysql                                 ⏎
/v/empty ❯❯❯ mysqld --initialize  --explicit_defaults_for_timestamp
2016-12-30T08:36:03.921480Z 0 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive
2016-12-30T08:36:04.125426Z 0 [Warning] InnoDB: New log files created, LSN=45790
2016-12-30T08:36:04.157283Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2016-12-30T08:36:04.217534Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 003ca31c-ce6b-11e6-ab71-0e9de9b7da21.
2016-12-30T08:36:04.231309Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2016-12-30T08:36:04.827665Z 0 [Warning] CA certificate ca.pem is self signed.
2016-12-30T08:36:04.886195Z 1 [Note] A temporary password is generated for root@localhost: J/nhD5rss3yx

なのだが,どうもここの root@localhost: 以下に表示されるpasswordを覚えておく必要があるらしい

今回は

2016-12-30T08:36:04.886195Z 1 [Note] A temporary password is generated for root@localhost: J/nhD5rss3yx

であるので J/nhD5rss3yx ですね

/v/empty ❯❯❯ mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: 
Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
/v/empty ❯❯❯ mysql_secure_installation                                        ⏎

Securing the MySQL server deployment.

Enter password for user root: 
Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
/v/empty ❯❯❯ mysql.server start                                               ⏎
Starting MySQL
. SUCCESS! 
/v/empty ❯❯❯ mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: 
Error: Access denied for user 'root'@'localhost' (using password: NO)

でさっきのパスワードをこれをした後に入力

/v/empty ❯❯❯ mysql_secure_installation                                        ⏎

Securing the MySQL server deployment.

Enter password for user root:  (ここで入力する)

The existing password for the user account root has expired. Please set a new password.

New password: 
Sorry, you can't use an empty password here.

New password: 

Re-enter new password: 

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: n
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password: 

Re-enter new password: 
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done! 
/v/empty ❯❯❯ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
/v/empty ❯❯❯ mysql -u root ^p                                                 ⏎
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
/v/empty ❯❯❯ mysql -u root -p                                                 ⏎
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.16 Homebrew

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
exit
^C
mysql> exit;
Bye

な感じで解決した


追記(2017/01/03)

かくとぅふ氏からコメントが

上のlogに追記しておくと人によってはクリーンインストールした際にrootでのログインの際にpassを設定していない場合にうまくログインできない場合があるみたいです. その場合passを変更しなきゃいけないのですが, http://qiita.com/ahaha0807_alg/items/7323a5d2dd365308cb94 を参考にすると幸せになれるみたいです.ほとんどがpasswordでの記述で自分のところのelcapitanではずっと ERROR 1054 (42S22): Unknown column 'Password' in 'field list' みたいなエラーはいていたんで.もしpass変更の際にひっかかるようであればこちらも参考にするとよいかと.

なるほど.パスワードカラムを変更する場合もある様です

UNIXという考え方

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

UNIXという考え方を読みました. しばらく本の解説や文章を書いてないので上手く纏まってないですが…

nal先生のサイトにあったオススメ書籍だったので前々から気になっていました. 琉大図書館の蔵書になったので,借りて3章ほど.その後購入して帰省のバスで読了しました.

版が変わってないこともあり,中に書かれている情報としては大分古い (CDROMが最新の環境と書かれている)ですが,bassとなっているUNIX思想は今でも通じると思います.

中では「small is Beautiful」な UNIX思想やUNIXの定理についての解説がなされています. UNIX思想の解説本ではありますが,UNIXの歴史を解説した本という側面も強く,歴史好きとしてはそういった面でも面白かったです. ただし所謂コマンドの解説本では無いので,実用的なTipsを求めている方にはオススメできないかもしれません.

本文中では「C言語よりシェルスクリプトの方が移植性が高い」と再三提唱されていました. 自分としてはシェルスクリプトの方が移植性低いと認識していたので思わぬ発見でした. 筆者が「アセンブラが~」などと再三言っているので,おそらくそこまで言語の種類自信も無かった時代だったからだとも思いますが…

かなり進化したアーキテクチャ,Linuxからこの世界に入ったので温故知新な勉強になりました. 言語に頼らず小さい処理が出来るプログラムこそUNIXの美徳は教訓ですね.