sironekotoroの日記

Perl で楽をしたい

わかばちゃんと学ぶGit使い方入門 SECTION 01 〜 SECTION 20

2017年ゴールデンウィークの課題図書

  • Git習得には一度挫折。
  • せっかく9連休をとることが出来たので、一念発起して選んだのがこの本。

なぜ「わかばちゃんと学ぶGit使い方入門」を選んだのか?

CHAPTER 1

SECTION 01

  • だいたい把握

    SECTION 02

  • SourceTree 入れたことがある
  • しかし、自己流でやってみて、よく分からんってことでアンインストールした覚えがある

CHAPTER 2

SECTION 03

  • SourceTreeのインストール
  • 「お前のOS古すぎて入れられんわ」エラー
    • 宗教上の理由で未だ買った時の Mountain Lion
      • 初めてかつ唯一の MacOS X で、OSアップデートの経験がなくて怖い
  • まぁ、覚悟はしてた
  • 旧バージョンをダウンロード

SECTION 04

  • リポジトリ・・・プロググラムとかバージョン管理やってないと触れること無い単語だよな
  • サンプルフォルダを作って、選択して・・・エラー!

    git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree init /Users/sironekotoro/Dropbox/git_study/wakaba/sample dyld: lazy symbol binding failed: Symbol not found: strlcpy_chk Referenced from: /Applications/SourceTree.app/Contents/Resources/git_local/bin/git Expected in: /usr/lib/libSystem.B.dylib
    dyld: Symbol not found:
    strlcpy_chk Referenced from: /Applications/SourceTree.app/Contents/Resources/git_local/bin/git Expected in: /usr/lib/libSystem.B.dylib
    Completed with errors, see above

  • ふむ、わからん。

  • もちろんググる大先生に聞く
  • osx - git command-line on Mac OS error “dyld: Symbol not found: ___strlcpy_chk” - Stack Overflow
  • Xcode から Command Line Tool をインストールしてみる
    • Xcode 起動 -> Command + , -> Command Line Tools をインストール
    • ダメ・・・
  • うーん、うーん、と色々やっているうちに、このMacには複数のGitがインストールされていることが判明
  • SourceTreeの環境設定 -> Git で確認すると、
    • 内蔵Gitのバージョン;2.6.2
      • エラー消えない
    • システムGitのバージョン:2.0.1
      • エラー消えない
    • Terminalから git –version で確認:2.5.1
      • さらにTerminalから which git で確認すると /usr/local/bin/git
  • 3種のGit盛り合わせかよ・・・わけわかんねぇ
  • が、とりあえず、SourceTreeの環境設定 -> Git から「システムのGitを使用する」をクリックし、そこで /usr/local/bin/git のGit(2.5.1)を選択
  • ok!

閑話休題

  • ほんと、個々人の環境なんて千差万別だから、万人が動かせるような環境・導入方法案内なんてなかなか無いよな・・・
  • VirtualBoxvhd配るとか・・・?

Section 05

  • エラーは出なくなったが、さすがに 2.0.5.2 と現行バージョンの 2.5 は表示が若干違う。
    • が、表示オプションで本に載っているのと同じレイアウトにすることは可能
  • しかしまぁ、同じことをするツールなので、なんとか頭で違いを吸収しつつこのまま学ぶ
  • すんなり進む

SECTION 06

  • リポジトリ内のテキストファイルをチェックアウトして、過去の履歴にさかのぼる
  • この辺りは、コマンドラインのgitでやった覚えがある
  • チェックアウトしたときに、テキストエディタ内の内容が変わるのが、ちょっと面白かった

SECTION 07

  • GitHubのアカウントは作成済
  • だが、使ってない・・・

SECTION 08

  • GitHubにある、この本の練習用リポジトリからフォーク
    • たぶん初フォーク
    • うちがフォークした時点で27

SECTION 09

  • ブランチについて
  • ブランチが便利というのは理解できる・・・しかし、それをまとめる時は大変なのではないだろうか?
  • ブランチごとにリポジトリの状態を保存している、って理解で良いんだろうか

SECTION 10

  • マージ!人生初マージ!

SECTION 11

  • 初プッシュ!初リモートリポジトリへのプッシュ!

SECTION 12

  • 初プル!
  • リモートリポジトリ上の変更をローカルリポジトリに反映するのがプル、ってのはわかった
  • となると。よく聞く「プルリクエスト」とは?
  • 「みんな反映してねー」とか?違う気がする・・・
  • あと、131pの「リモートリポジトリの状態」はどこから見るんだろう?
    • GitHubのファイル一覧の少し上にある「** commits」ってところから同じ画面見ることが出来た

SECTION 13

  • コンフリクトについて

コンフリクトは、同じ行に、同時に別々の修正が成されたときに発生します。 同じファイルでも、行が違えば、コンフリクトが起きずにそのままマージされるわ

  • なるほど、行単位で監視というか比較しているんね
  • ここで、update-newsをチェックアウトして、そこにmasterをブランチを統合してしまうというミスをしてしまう(逆のことをやりたかった

SECTION 14

  • プルリクエストの疑問に対する回答があった。取り込んでもらう相手の立場に立って、ということなのね。
    • 「私の更新を取り込んでくださーい」と。
    • プルリクエスト、不自然とは思わなくなってきた・・・(順応性
  • この本はなんと、プルリクエストからマージまでを体験できる!らしい!ってことで挑戦
  • うちのためしてみた時点でForkは14
  • おぉ!先人のコミットが見える!
  • しかし、自分のテキストファイルをコミット・プッシュしても、自分のGitHub上に反映していない・・・?
    • GitHubのBranchを「master」から「add-myfile」に切り替えたら確認できた
    • プッシュがされてないのかなーと、3回くらいプッシュしてた
  • 153pの「Compare & pull request」ってボタンが表示されない
    • 「compare」 と 「pull request」ってリンクならある
    • 「pull request」のリンクをクリックすることで、本と同じような画面が出た。
    • 一安心。

SECTION 15

  • うちの環境だと、 .gitignore は本に乗ってる内容で追加されてるなぁ
  • とおもったら、もともとのリポジトリに入ってた
  • なるほど、.gitignoreに記載してあるファイルはgitの管理外になるけど、.gitignoreファイル自体はgitで管理されるのね

SECTION 16

  • Bitbucket、以前にアカウント登録はしてたけど、email認証せずに放っておいてた
    • なんでそんな中途半端なところで・・・
    • 2014年の9月のことだったらしい
  • ぐうう、なんか画面が違う・・・メニューが左側にある
  • 初心者本に限らずだけど、サービス提供側のページレイアウトが変わるのは辛いものがあるが、作者さん達も避けようが無いもんなぁ
  • 画面左側メニューの「+」からリポジトリを追加。後は本に乗っているのとだいたい同じ。

SECTION 17

  • あんれ?豚玉とかソースの追加ってコミットしてたっけ・・・?
  • 例ってことで良いんかな?
  • とりあえず、「過去のコミットをチェックアウトしてブランチを分ける」ということは出来た

SECTION 18

  • リバート!そういうことだったのか!

    過去のコミット自体を削除するわけではなく、あくまでも反対の内容で新規コミットを作ることで、過去の変更を打ち消すというところがポイントです

  • 単なる削除、ではないと
  • SouceTree、Windows版とMac版でメニューの項目表示が違うの、なんか嫌だねぇ・・・
    • Windows版は「このコミットを打ち消し」
    • Mac版は「コミット適用前に戻す」

SECTION 19

  • なるほど、リベースは履歴がきれいになって良いなぁ
  • でも、慣れないうちはマージを使うってことで、しばらくは使うことなさそう

SECTION 20

  • 幾つかのコミットを1つにまとめる「スカッシュ」
  • でも、リモートリポジトリ上にあるコミットを変更すると、他のメンバーが持ってるリポジトリと差が出るので(当然だ・・・)、コミットがローカルにしかない状態で行うこと
  • この辺りは実際に試すのは自分でコミット作ってまとめたりが必要なのね
    • まぁ、それが出来るだけの知識はここまでで習っている

Array of Struct と Struct of Array

YAPC::Kansai 2017 OSAKA でのrisouさんのスライドから

  • プログラミングPerlの勉強もあるんだけど、その前にどうしても試したいので試したのがこれ

高速化の初歩
https://www.slideshare.net/risou/first-step-of-performance-tuning

  • これを見て写経して use Benchmark
  • 注:100回ほど比較してますんで、ローカルで試す時は適当に調整を
use strict;
use warnings;

use Benchmark qw/cmpthese/;
use Clone qw/clone/;

cmpthese(
    100,
    {   "AOS" => \&AOS,
        "SOA" => \&SOA,
    }
);

# Array of Struct
sub AOS {
    my $aos = [];
    for ( 1 .. 100_000 ) {
        push @$aos, { number => $_, double => $_ * 2 };
    }
    my $copy = clone($aos);
}

# Struct of Array
sub SOA {
    my $soa = {};
    my @numbers;
    my @doubles;
    my @count;
    for ( 1 .. 100_000 ) {
        push @numbers, $_;
        push @doubles, $_ * 2;
    }
    $soa = { number => \@numbers, double => \@doubles };
    my $copy = clone($soa);

}

#     s/iter  AOS  SOA
# AOS   1.00   -- -66%
# SOA  0.345 191%   --

[Finished in 136.1s]
  • なるほど。
  • Array of Struct で書いている自分のコードもあるから、Struct of Array で書き直すの楽しみになってきた

その他

  • use Data::Dumper して出力しないとデータの構造が頭に浮かばなくて、全然修行足りてない。がんばる

YAPC::Kansai 2017 OSAKA

YAPC::Kansai 2017 OSAKA いってきました

  • 2013,2014,2015,北海道 と通算4回目のYAPC参加。
  • 前日の金曜日は有給を取り、Nintendo Switchの到着を待っていたのですが、夜間の配達と判明・・・
    • だもんで、昼過ぎに横浜の自宅を出ました。
  • そして新大阪到着・・・会場近くの御堂筋線 西中島南方駅近くのホテルに到着したんで、ドアtoドアで約3時間ほど。
  • 大阪、意外に近いなぁという印象。
  • ホテルで少し時間をつぶし、運営ブログにあったラーメン屋さん「人類みな麺類」へ。
  • 人気店と書いていただけあり、17時30分開店時点で50人くらい並んでいる状態。
    • 何とか1順目で店内に入ることが出来、ラーメンと餃子を堪能。
  • そのあと、会場近くにあるコメダ珈琲で時間つぶし。
  • 店内にはYAPCのパーカーを着た人が3人ほどいて、Macbookをいじっておりました。

  • ちなみに隣の席の男女で、女性の方が既婚者の男性に「どうすれば彼氏見つかる?」みたいなお話してたけど、男性比率の高い職場で働くのがいいんじゃないすかね、たとえば技術系のテクニカルサポートデスクとか・・・って思ったりしながら聞いておりました。

前夜祭「YAPC::Kansai 2017 OSAKA 前夜祭 in大阪!突撃!隣の開発環境!」

  • 551蓬莱、なるほど、肉たっぷりだ。これが「豚まん」か。
  • 食べる前は「高級肉まん」程度に思ってたけど、認識を改めた。

  • 珍しくWindows比率が高かった。

  • YAPCつーとMacな人が多い印象。
  • うちも自分のPCはMacなのですが、会社で使っているのはWindowsなので、大いに参考になりました。
  • rapture」は早速インストールしております。

Rapture
http://www.geocities.jp/knystd/rapture.html
画面上の指定した範囲だけを付箋化し、最前面に表示させておくためのソフトです。

ライトセーバー - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%88%E3%82%BB%E3%83%BC%E3%83%90%E3%83%BC
ジェダイの修行の一環であるライトセーバーの作製は、クリスタルの配列およびカット加工などの工程を全て自分の手で仕上げなければいけない。

  • 会場は「Lan Scope Cat」で知られるMOTEXさんのホール。とてもきれいな、映画館みたいなホールが印象的でした。

GUEST: 深沢 千尋

  • まずは深沢千尋さんの講演から。
  • うちはこの深沢さんのPerl本を3冊持っており・・・というか、近年Perl本出してくれている数少ない作者さんですよ。
    • 本当にありがたいです。
  • 自分は、今まさにこの第1、第2段階にいるという自覚があるので大いに参考になった。
  • 自分の定番スクリプトを集めた「みそ蔵」を作るというのは、意識してやっていく。
  • 「同じようなスクリプト前に書いたなー」と思いつつ書きはじめることをよくやるので。
  • さらなる「ぬるさ」追求していこうと思いまする。
  • ちなみに、深沢さんの「すぐわかるオブジェクト指向Perl」は2回ほど通読してて、折に触れて最初っから読み直したくなる名著。
  • Perl入学式を終えて、次のステップに進むときはこの本がいいです。

  • もう一つのオススメ本は「雅なPerl入門」

高速化の初歩 by risou

  • 初心者向けです!とのことで、これも俺得のトーク
  • 素数を求めるプログラムを例に、「文章題・問題定義そのままに書き起こしたスクリプト」をいかに高速化・・・というか、いかに無駄なステップを減らしていくか、というお話。

First step of Performance Tuning
https://www.slideshare.net/risou/first-step-of-performance-tuning

Perl入学式座談会

  • うちが大変お世話になったPerl入学式のメンバーによる座談会。
  • 大阪発祥ということは伝え聞いていたんですが、@papix 校長の「教えることで学ぶことが出来る」っていう力強いメッセージ。
  • 公開しているテキストがあり、練習問題も豊富なので、Perl入学式に出られなくとも、「通信教育」で卒業できるってのも強み、という話もあり、なるほど!と。
  • 確かに、うちもリファレンスの練習問題は何度も繰り返して身に着けました
  • 夢広がりますなぁ・・・
  • うちはPerl入学式を終えた後はPerl本を買いあさり、新刊があればそれを買い、ひたすらに読んで中のスクリプトを書くなどしておりました。
  • あと、昔のYAPCのブログ記事や、アドベントカレンダー見て勉強とか。

  • もちろんそれだけでは飽きるので、自分のやりたいこと、やりたかったことを書いておりますが、やはり、中級編的なものを体系的に学べる場があると助かるよなぁって思ったりします。

  • それはPerlオブジェクト指向であり、テストであり、DBと連携して動かすアプリであり、各種のWebAPIへのリクエストとレスポンスの加工の仕方であり・・・

  • 自己流でこなしているものもあるのだけど、体系的に学ぶ機会が欲しいとずっとおもっておりました

昼休憩

  • 昼は、会場からちょっと離れたラーメン屋「時屋」のつけ麺。ここもYAPC::Japan公式ブログにあったお店。
  • 前日に食べた「人類みな麺類」といい、ここもチャーシューがおいしかったなぁ。
  • つけダレは濃厚で、横浜家系民としてはこちらの方が「合ってる」感がありました。
  • あと、ちょっと離れたところに「30代で家が建ち、40代で墓が建つ」と言われる激務高給企業のキーエンス本社ビルがあったのも良い思い出。

GUEST: 木本 裕紀

  • 午後いちは木本さんの講演
  • Perl書いていて、???ってなってググると木本さんの「サンプルコードPerl入門」サイトが引っ掛かる。
  • だもんで、本当にお世話になりまくっているお方。
  • 著書の「業務に役立つPerl」も、まさにプログラマではないユーザーがPerl使ってお仕事楽にしていきましょう、そのうえでこんなこともできるんですよ、ってなサンプルがたくさんの本。
  • 読んでるうちに「あの仕事はこうすれば楽になりそう」ってアイデアが出てくる本です。オススメ。

  • PHPPerlの混在のところで会場がどよめきましたね。

  • 続いて、mojoliciousを使ったサイトの紹介・・・これはありがち・・・と思いきや、WebSocketを用いたリアルタイムチャットの実演がありました。

  • おぉ、こんなことが出来るんだ・・・!
  • また、片方のウインドウで「上下左右」のボタンを表示し、そのボタンを押すことで別のウインドウのネコを移動させる、というデモ。
  • 文字が表示されるチャットから、絵が動くゲーム的なものの提示で、やれそうなことが一気に広がる気がしましたね。こうやって見せてもらうのは本当にありがたいです。
    • と同時に、自分の残念想像力が悲しくなる

YAPC::Kansai 2017 発表資料「MojoliciousとWebSocketでサーバーpush配信」 - PerlならサンプルコードPerl入門
http://d.hatena.ne.jp/perlcodesample/20170311/1489225613

休み時間

スペシャルセッション @dankogai with @moznion のmailform.cgiリファクタリング

  • これがもう・・・

Perl ウェブ開発の中世 CGIPlack の間 @xtetsuji

  • CGIについてはそれこそ1990年代のPerl本で学んだんだけど、なぜCGIが「重い」のか、その「重さ」に対してとられてきたmod_perlFastCGIという解決策、そしてWAFの興隆とPlackが提供したものについて、一気通貫で語る内容。
  • @xtetsujiさん自身が1997年からWebに触れたとのことで、語り部的な安定感のあるトーク

  • Perl/CGI」みたいにワンセットで語られることが多いよなぁ

    • というか「Ruby/CGI」とか「C/CGI」みたいな表記って見たことないよね・・・
  • だから、CGIPerlと組み合わせて使うものなんだ、とかなり長く思い込んでおりました。

  • CGIが「重い」原因である「リクエストごとにプロセスを生成して破棄する」事のたとえとして、大航海時代の「一事業ごとに出資を募り、事業が終われば解散」を出してくる

  • その解決として「ApachePerlを組み込む事で生成コストを抑えるmod_perl、一度生成したプロセスの再利用を可能にするFastCGI」を、原始的な事業継続・株式会社である東インド会社に例える
  • 唸るしか無い。唸りっぱなし。

Perl ウェブ開発の中世〜CGIPlack の間〜
https://www.slideshare.net/xtetsuji/perl-cgi-plack

はてなシステムの考古学 by @motemen

  • うちがPerl学び始めたときは「変数に my つける」のはすで常識であったんだけど、あのHatenaにして「そうでない時期」があったとは、というのに凄い驚いた。
  • というかHatenaはじめ、Perl使っていた企業・個人が広く知見を公開してくれたおかげで、今学んでいる自分がレキシカル変数の大事さ意識することなく使っていられるのだなぁと。
  • まぁ、企業としては達成したいこと、提供したい価値があり、そこで技術選択が出てくるのは当然。
  • だから不思議はないのだけど、HatenaといえばPerlという固定観念があるのでびっくりした。
  • HatenaがRuby採用してたら、松江にオフィス構えたんだろうか?とか思ったり。

YAPC::Kansai 2017 OSAKAで『はてなシステムの考古学』というトークをおこないました #yapcjapan - 詩と創作・思索のひろば
http://motemen.hatenablog.com/entry/2017/03/yapc-kansai-history-of-hatena

LT

  • @azumakuniyuki さんの北海道愛あふれるスライドを見ると、また雪の北海道に行きたくなってまう
  • @makamakaさんのページ数芸、熟練の域に達してた
  • 最終的には3000pまで表示されてましたね

キーノート @takesako

  • 先生もやっているからか、聞きやすいトーク
  • 計算機の歴史を「Harvard Mark I」からたどっていく構成

Harvard Mark I - Wikipedia
https://ja.wikipedia.org/wiki/Harvard_Mark_I

  • アセンブラのパンチシート、NEC TK-80、FM-TOWNS、SUNのWS と時代を追っていく。
  • そのなかで、かつてはコード(命令)とデータの分離がなされていたが、今ではメモリの中で混在するようになってしまい、これがセキュリティ面での脆弱性につながっている、という指摘があり、「おぉ、言われてみりゃそうだ!」と気づかされるなど。

  • あと、アセンブラ短歌は、すみません、ハイコンテキストすぎて理解が・・・

  • そしてその歴史の果てに、「Perlによるマインスイーパの自動解凍」があるんだなぁと。

YAPC::Asia Tokyo 2011 で Acme::MineChan を発表してきました | TAKESAKO @ Yet another Cybozu Labs http://developer.cybozu.co.jp/takesako/2011/11/yapcasia-tokyo-afc6.html

懇親会

  • 深沢さん、木元さん、と大変お世話になっているPerl本の著者お二人に謝意を伝えられて良かった。本当ありがとうございます。サインしてもらうために本もってくるんだったなぁ・・・

運営の方ありがとうございました

  • 個人的にとても参考になるトークばかりで、良かったです。
  • A会場にいる事が多かったんですが、@karupanerura さん頑張ってた
    • というか、YAPC::Kansai 2017 OSAKA って、てっきり在阪の方がメインでやってるという思い込みがあり、だもんで、@karupaneruraさんも大阪の企業に転職したんだっけ?とか思うなど
    • 懇親会でちょこっとお話させてもらって、そういう訳ではないとのことで、都度大阪に出てきて準備してたとの事。
    • ほんとお疲れさまでした。ありがとうございました。

YAPC::Fukuoka 2017 HAKATA

  • 早くも次回YAPC

YAPC::Fukuoka 2017 HAKATA
http://yapcjapan.org/2017fukuoka/

  • ロゴの中のニワカせんぺい(SEN-PEI)の目が博多らしさ溢れる!

    • ちゃんと許諾はとってるとのこと。
  • 既にチケットはとりましたが、宿泊地確保ってことで楽天トラベル見ると結構お値段が・・・

  • アイドルのコンサートと被る・被っている可能性もあるんで、早めに予約はしといたほうが良いのではないかと思いまする
  • 1か月前までなら無料で予約取り消せるので。

  • 博多楽しみだなぁ~!

プログラミングPerl 第2章 基本構成要素

欲張りな・・・といえば?

トークン(token)とは、意味を持つ文字の並びの事で
(中略)
トークンの認識は「欲張り」に行われる。つまり、ある時点で、Perlのパーサが短いトークンと長いトークンのどちらでも認識できるような場合には、長いトークンが選択される
(58p,59p)

my $str = "ABCABCABC";
if ( $str =~ /(A.*C)/ ) {
    print $1 , "\n"; # ABCABCABC と全部返ってくる
}

# ABCだけにマッチさせたい場合には 量指定子 `?` を追加する
if ( $str =~ /(A.*?C)/ ) {
    print $1, "\n"; # ABC
}
  • そういえば、IPv4のルーティングでも最長マッチ、ロンゲストマッチが適用されるよなぁ
  • 計算機世界の常識、公理みたいなものなのかな?
  • 最長マッチは1つか該当無しだけど、最短マッチは1つ、2つ以上、該当無しとなる可能性があるから、とか?

ここまでの感想

  • Perl聖典」ってことで気負いすぎたのかもしれないけど、今のところ座学っぽい?
  • 書いてある事をコードにして確かめる、という機会はごく少ない
  • ただ、今まで読んできたPerl本の知識が体系的に編み上げられていくような感覚がある
    • あぁ、あのPerl本の作者さんはここを抜き出して書いたんだなぁ、とか

たのしい

これはつまり、$foo@fooとは全く別の変数である事を意味する。先ほど紹介した規則も合わせると、$foo[1]は配列@fooの要素であって、スカラー変数$fooとは無関係だという事がわかる。ちょっと妙な話だと思うかもしれないけど、なあに気にする事は無い。なぜなら、本当に妙な話だからだ。
(63p)

  • 投げっぱなしかよ!
  • こんな感じで読んでて楽しい
  • ただ、これは今まで勉強してきた下積みがあればこそなのか、そうでないのか、自分ではもう判断がつかない、当事者だから
  • ついでに、これを妙に思うかというと、うちはそうは思わなくて、これは最初にモノにしたプログラム言語がPerlだからなのだなぁ、と
    • JavaScript書いた時は、スカラーか配列かハッシュか分からなくて変数名にs_hogehoge a_hugahuga とかつけてた
    • 郷に入って郷に従ってない

発見がある

  • あたりまえだけど、あたりまえでない

浮動小数点の制度は無限ではない事に注意しよう。これは重要な事なので覚えておいてほしい。なぜなら、その性で、(10 / 3 == 1/3 * 10)のような比較は(たいていの場合)うまく行かないからだ。

if (10 / 3 == 1/3*10){
    print "TRUE";
}else{
    print "FALSE"
}
# FALSE
  • 浮動小数点計算には気をつけなければならない、というのはどこかで見たんだけど、なるほどこういう事か

プログラミングPerl 第1章 Perl概説

とうとう聖典

第1章の感想

  • Perl初心者本の「まとめ」的内容
  • ゼロから『この本でPerl始めろ』と言われたら挫折する
  • Perlの入門書を複数、Perl入学式、それと業務でやってるLinuxオペレーションの知識が無いと厳しいと感じる
  • 少なくとも、過去の自分がいきなりこれに手を付けてたら、絶対挫折してた
    • 初心者向け本からコツコツとやってて良かった
    • 他の言語を習得していれば、それとの対比でいけるかもしれない
  • 逆に、初心者向け本から積み重ねたPerlの知識があれば、第1章で書いてある事が理解できる
    • 「読める!私にも読めるぞ!」
  • ただし、2003年の本(第3版)だけあり、現在では推奨しない書き方もあるので、そこは置き換えて考える必要がある
    • ファイルハンドル扱うときの引数が2つとか

      open (SESAME , "<filename" );

    • 現在は引数は3つが推奨されていたはず

      open (SESAME, "<" , "filename" );

欄外がいい

  • 欄外の注釈、訳注に味があり、「ほうほう、なるほど」と思わせる記述が多くて、ページ進めるの楽しみ

[訳注] 原文は "You can't grep dead tree." dead tree(枯れ木)とは、紙の事である。(例えばオンラインドキュメントを紙に印刷したものを、dead-tree versionと呼ぶ。)この文は、「印刷したドキュメントをgrepすることはできない」という意味である。 (はじめに:xxii)

歴史的な経緯を話せば、もともとPerlではユーザ定義のサブルーチンを呼び出す際には、必ず頭にアンパーサンド & を付ける必要があった。(中略)しかしPerlのバージョン5では、アンパーサンドは省略できるようになり(後略) (第1章 19p)

  • なるほど、サブルーチン呼び出す時の&が取れたんはPerl5からの話なのね、などなど

驚き

第1章を終えて

  • いままで積み重ねてきた初心者向け本、Perl入学式およびそのテキスト・問題集、これらがあれば聖典にも構えずに立ち向かっていける、と自信がついたところ
    • 第1章しか終わっていないのに・・・

モダンPerl入門 第1章 近代的なオブジェクト指向

増補改訂版を待ちながら

感慨深い

  • 中級者以上と銘打っているだけあって、最初は全く歯が立たずに後回しにしていた本・・・
  • しかし、今は「わかる!わかるぞ!」とラピュタ内部の石盤前にいるムスカの気分に
    • もちろん全部ではない

オブジェクト指向を学ぶには・・・

  • Perlだけではなく、やはり本家のJavaも学ばねばならないのだろうか?
  • いやいや、それをいうなら元祖smalltalkから
  • そもそも、なんでオブジェクト指向を学ぶのか?学ぶ事自体が目的なのか?
  • 学ぶ事自体は楽しいんだけど、それだけではうちの作りたいプログラムが完成しないんよね・・・

そもそも

  • 「必要な事だけ学べればいい」って思っていたけど、「必要なものが何か」が分かっていないのが初心者
  • 「リファレンス?無くてもプログラム作れるじゃーん」と思っていた数年前の自分を思い出す
  • オブジェクト指向もそう
  • 必要になったときに学ぶ、でも良いんかな。今までもそうだったし
  • 解決の選択肢を多く持っておけば、あとあと楽になるだけど、時間とお金のトレードオフなのよね
  • うまく出来てる
  • こういう事を中学生で分かってたら、人生変わってたかしらねぇ・・・

Moose

  • 初心者ながらに「重い・多機能」という事だけは知っていたモジュール
  • 手作りでオブジェクトを bless していて感じつつあった、オブジェクトのプロパティの整合性を確認する方法なんかが組み込まれてて、「あぁ、俺の疑問はたいてい先人が解決してくれている」と感謝を新たに
  • Roleって考え方もいい。継承だけではなく、役割・出来る事での関連性でクラスをまとめられる。素敵!

Macbook Airの環境整備 20160921

管理者権限が必要な AppleScript アプリをパスワード入力無しで動かす

AutoChargeInHabit

バッテリー制御ソフト - AutoInflowDisable

  • 実際に効果があるのかどうかは、比較対象となる MacBook Air が無いので不明
  • 分からないのだけど、「鰯の頭も信心から」的に使わせてもらっております

    • 信仰にはお布施が必要なんでちゃんと 1000円くらい donate したぜ
  • 時々バッテリの状態をメモってた

    • この Mac について -> 詳しい情報 -> システムレポート -> 電源 の 完全充電時の容量(mAh
      • 2014-08-24:6724
      • 2014-09-17:6967
      • 2014-10-12:6329
      • 2015-01-28:5665
      • 2015-05-24:6170
      • 2015-12-19:5934
      • 2016-01-17:5791
      • 2016-04-09:6178
      • 2016-09-19:5978
  • ちなみに、交換バッテリは 7150mAh らしい

  • MacBook Air 13" (Mid 2012 through Early 2015) Battery (661-7474) - iFixit

    Replacement 7150 mAh battery compatible

  • バッテリに神経質にはなっていないけど、長持ちするならその方がいいよねぇ、と思ってます

    • しかし、真に神経質でない人ならこのソフト入れないだろうから、ちょっとは神経質なのだろうか
  • なお、MacBook Air の充放電回数の上限は1000回との事

  • Mac ノートブックのバッテリーの充放電回数を確認する - Apple サポート
  • さっき自分の MacBook Air 確認したらちょうど500回だった

起動の都度のパスワード入力が鬱陶しい

  • このソフトを MacBook Air の起動時に立ち上がるようにしていたのだけど、都度管理者パスワードを聞かれるわけです

  • メンドイなぁ・・・と思いつつ、しかし解決法もわからずで2年間

  • 勉強の合間の気分転換で手を入れてみたところ、なんとかなったので備忘録もかね書いておきまする

    • なお、試行錯誤に3時間ほどかかった模様
  • 最初は、「自動でパスワードを入力しよう」と思い、 Automator などをいじってみたんですが、パスワードをテキストボックスに入力できず

  • 作者は 「 sudo で動かしている」との事ですが、当方では sudo で動かしてもパスワードを要求される

  • 結局、AppleScript で一部を書き換えることに

    • ところで、 AppleScript って情報めっちゃ少ない・・・うちのググラビリティが及ばない分野でした
  • 書き換えるのは権利者権限を要求する AutoChargeInhibit2RunRoot.app

  • これを AppleScript エディタで開き
  • オリジナル

    do shell script theAppPath & " &>/dev/null & " with administrator privileges

  • 変更後。******** の部分にMacの管理者パスワードを入れる

    do shell script theAppPath & " &>/dev/null & " password "********" with administrator privileges

  • これで管理者権限を求められる事がなくなりました

  • 起動、再起動の都度入力を求められていたパスワードを入れる事がなくなり、しかも自分でなんとかできたって事で、結構感動したのでした

追記

  • この記事を書きながら「時々バッテリの状態をメモってた」って何よ?と
  • プログラマの三大美徳を信条とするなら、これを自動化するべきではないだろうか?
    • まだまだ怠惰が足りない
# MacBattery.pl
# その時点のバッテリの再大容量ログを
# YYYY-MM-DD hh:mm:ss ????
# の形式でファイルに出力する

use 5.012;
use warnings;
use Time::Piece;
binmode STDOUT, ':encoding(UTF-8)';

my $command = 'ioreg -c AppleSmartBattery | grep MaxCapacity';
my $max_capacity = $1 if ( `$command` =~ /(\d+)/ );

my $t   = localtime(time);
my $date = $t->ymd .' '. $t->hms;

my $save_filename = 'Mac_MaxCapacity.txt';

open my $FH, '>>', "$save_filename"
    or die qq{Can't open file "$save_filename":$!};

say $FH $date , ' ' , $max_capacity;

undef $FH;
  • こいつを cron に登録して・・・え? MacOS X にcron ないの?
    • めんどくせぇ・・・ってなったが、真の怠惰目指して頑張る

Scheduling Timed Jobs
Note: Although it is still supported, cron is not a recommended solution. It has been deprecated in favor of launchd.

  • plist ファイルの書き方をググる
    • 起動時のみ設定
    • plistファイルに 755 の権限つけたけど、必要かどうか試してない・・・
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>pl.Mac_MaxCapacity.perl.plist</string>

    <key>ProgramArguments</key>
    <array>
      <string>perl</string>
      <string>/scriptdir/MacBattery.pl</string>
    </array>

    <key>RunAtLoad</key>
    <true/>

  </dict>
</plist>
  • 起動時に .pl で指定されたファイルに出力された事を確認