WEB+DB PRESS Vol.98 特集2 これからはじめるDocker(2章まで)
Docker使ってみたい!
- そろそろDocker触っておきたいと思って購入
- しかし、利用しているMacと環境構築に必要なVirtualBoxのバージョンが合わずに断念しかける・・・
macOSのアップグレード
- が、これもいい機会と判断し、OSのアップグレードを敢行
- MountainLion(10.8.5)からSierra(10.12.5)
- Q.なぜアップグレードしなかったか?
- A.怖かったから
- バックアップ用に外付けHDDをあけ、macOSのOS領域ごとバックアップ
- 同様に、TimeMachineでもバックアップ
- 上書きアップグレード・・・成功!
思ったよりうまくいった。対応していないソフトがいくつかあったけど、入れ直しでok
- ただし、KeyRemap4MacBook改めkarabinerはSierraに対応しておらず、利用不可。
- あと、Parrallelsもver9だったので、Sierraで起動できず
- AutoChargeInhibitは動いたり動かなかったり。惜しい。
- [AutoChargeInhibit - MacBook Pro 15 early 2011のバッテリーの充電をソフトウェア制御でオン・オフして充電を少し抑制する](http://memogakisouko.appspot.com/AutoChargeInhibit.html)
一番懸念していたSublimeText2やPerl、nodeの環境は維持されていて、これは本当に良かった。
- GW中に買って勉強した「わかばちゃんと学ぶ Git使い方入門」で勉強した時にSourceTreeが入れられず、旧バージョンでしのいでいたのもこれで解決
ソフトインストール、その前に
- macOSのアップグレードに成功した勢いで記事にある通りにVirtualboxとVagrantをインストール・・・その前に!
- ansibleという環境構築ツールにも興味があったので、それ経由で入れてみる。
Web+DB PRESS vol.98 特集2 これからはじめるDocker(第1章〜2章)
- ansible経由でVirtualboxとVagrantをインストール
- 他は記事の通りに進めていく・・・以下は詰まった所
macOS上からVagrantで起動したCentOS7の中で、dockerからhttpdイメージを起動させ、そのhttpdにmacOSからアクセスしたい!
- 長い
- 混乱する
- 酷い日本語
- そんな時はポートフォワード!
- 参考
- この特集に沿って進めた場合、Vagrantfileを以下のようにする
config.vm.network "forwarded_port", guest: 8080, host: 8080
とりあえずここまで
- 第3章からはVPSでの運用の話になるので、今日はここまで。
- 図書館にはDockerを特集したSoftwareDesignがあるんで、それを流し読みしたり
俺のリファレンス
言いたいこと
- Perlのリファレンスは、以下のような「データをまとめたい!」って時に使うと楽になるんだよ
- 配列の中に配列を「配列のまま」入れたい
- 配列の中にハッシュを「ハッシュのまま」入れたい
- ハッシュの中に配列を「配列のまま」入れたい
- ハッシュの中にハッシュを「ハッシュのまま」入れたい
- データをまとめると、どうお得なの?
- 記述が楽
- データ同士での比較が楽
- 本当なの?という疑り深い人、2013年頃の私みたいな人は自分で配列に配列入れたり、配列にハッシュ入れたりして、自分の考えた通りのデータ構造が出来るか、そのデータ構造から要素を取り出せるか、やってみよう!
- ・・・ってことを、昨日のPerl入学式のサポーターしながら考えたのでした。
配列に配列を入れる小芝居
use strict; use warnings; use Data::Dumper; # 課題 # 「テレビ局の略称」と「チャンネル番号」を組み合わせた # データ構造を作りたい # あわよくば一覧表示を楽に実現したい # まず、テレビ局のチャンネル番号と略称名の配列を作る # 配列の最初の要素はチャンネル番号、次の要素はテレビ局名の略称と決める # @配列 = (チャンネル番号 , 略称); my @nhk = ( 1, 'NHK' ); # NHK総合 my @etv = ( 2, 'ETV' ); # eテレ(教育テレビ) my @ntv = ( 4, 'NTV' ); # 日本テレビ my @ex = ( 5, 'EX' ); # テレビ朝日 my @tbs = ( 6, 'TBS' ); # TBS my @tx = ( 7, 'TX' ); # テレビ東京 my @cx = ( 8, 'CX' ); # フジテレビ my @mx = ( 9, 'MX' ); # TOKYO MX # チャンネル番号を全部表示したい・・・もしTV局が沢山あったら? print '@nhkのチャンネル番号は:', $nhk[0], "\n"; # 1 print '@etvのチャンネル番号は:', $etv[0], "\n"; # 2 print '@ntvのチャンネル番号は:', $ntv[0], "\n"; # 4 # TV局の数だけ書いていく? # 地方局も増えたらどうする? # 配列名を人間が全部覚える? # そんなの面倒! # データをまとめておいて、forループ等でまとめて取りたい! # チャンネルをまとめる配列を作る my @channels; # ---------------------- # 失敗編 # ---------------------- # チャンネルをまとめる配列に、テレビ局の配列を「そのまま」入れる push @channels, @nhk; push @channels, @etv; push @channels, @ntv; # 3つ入れてみたところで、試しにData::Dumperで中身を表示してみる print Dumper @channels; # $VAR1 = 1; # $VAR2 = 'NHK'; # $VAR3 = 2; # $VAR4 = 'ETV'; # $VAR5 = 4; # $VAR6 = 'NTV'; # 元のTV局ごとの配列が崩れて、一つの配列になってる!? print "@channels", "\n"; # 1 NHK 2 ETV 4 NTV print $channels[0], "\n"; # 1 print $channels[1], "\n"; # NHK print $channels[2], "\n"; # 2 print $channels[3], "\n"; # ETV # それぞれの要素が何を示しているか、人間が覚えておかなくてはならない # ・偶数の添字はチャンネル番号 # ・偶数の添字 + 1 はテレビ局名 # など。 # これは面倒では? # チャンネル番号とテレビ局名を配列にした意味がないのでは? # ---------------------- # 解決編 # ---------------------- # 配列をリファレンス化する my $ref_nhk = \@nhk; my $ref_etv = \@etv; my $ref_ntv = \@ntv; my $ref_ex = \@ex; my $ref_tbs = \@tbs; my $ref_tx = \@tx; my $ref_cx = \@cx; my $ref_mx = \@mx; # ここで注目! # さっきは「配列 @channnels」の中に「配列 @テレビ局」を入れたところ、 # 「配列 @channnels」の中で展開されてしまった。 # しかし! # リファレンス化することで、配列を「スカラー」として扱うことが出来る! # 「失敗編」で使った配列@channelsを初期化する @channels = (); # 配列@channelsにリファレンス化したテレビ局のデータを追加する push @channels, $ref_nhk; push @channels, $ref_etv; push @channels, $ref_ntv; # 3つ入れてみたところで、試しにData::Dumperで中身を表示してみる print Dumper @channels; # $VAR1 = [ # 1, # 'NHK' # ]; # $VAR2 = [ # 2, # 'ETV' # ]; # $VAR3 = [ # 4, # 'NTV' # ]; # 俺が求めていたものはこれだ! # 残りも追加していく push @channels, $ref_ex; push @channels, $ref_tbs; push @channels, $ref_tx; push @channels, $ref_cx; push @channels, $ref_mx; # どうなっているかな〜? print Dumper @channels; # $VAR1 = [ # 1, # 'NHK' # ]; # $VAR2 = [ # 2, # 'ETV' # ]; # $VAR3 = [ # 4, # 'NTV' # ]; # $VAR1 = [ # 1, # 'NHK' # ]; # $VAR2 = [ # 2, # 'ETV' # ]; # $VAR3 = [ # 4, # 'NTV' # ]; # $VAR4 = [ # 5, # 'EX' # ]; # $VAR5 = [ # 6, # 'TBS' # ]; # $VAR6 = [ # 7, # 'TX' # ]; # $VAR7 = [ # 8, # 'CX' # ]; # $VAR8 = [ # 9, # 'MX' # ]; # ちゃんと全部、チャンネル番号とテレビ局名の組み合わせが入ってる! # さて、データを取り出してみる # 配列@channelsは配列なので、データの順番が保証されている # 最初に入れたNHKの配列を取り出してみる print $channels[0], "\n"; # ARRAY(0x************) 配列リファレンスであることを示す表示 # 配列リファレンスから、元の配列に戻す「デリファレンス」を行う print @{ $channels[0] }, "\n"; # 1NHK # 配列をそのままprintしたので要素が繋がって表示されている # 中身は取得できたようなので、配列の要素ごとに取り出してみる # 配列の要素はスカラーなので、$でアクセスする print ${ $channels[0] }[0], "\n"; # 1 print ${ $channels[0] }[1], "\n"; # NHK # アロー記法を使うとスマート表記が可能 print $channels[3]->[0], "\n"; # 5 print $channels[3]->[1], "\n"; # EX # データ構造を構築できたところで、一気に表示してみる # @channelsの中身は、解決編冒頭で作成した、配列リファレンスの集合で # あることを忘れない foreach my $array_ref ( @channels ) { # 配列リファレンスの最初の要素はチャンネル番号 print "チャンネル番号は:" , $array_ref->[0], "\n"; # 配列リファレンスの二番目の要素はテレビ局の略称 print "テレビ局の略称は:" , $array_ref->[1], "\n"; }; # チャンネル番号は:1 # テレビ局の略称は:NHK # チャンネル番号は:2 # テレビ局の略称は:ETV # チャンネル番号は:4 # テレビ局の略称は:NTV # チャンネル番号は:5 # テレビ局の略称は:EX # チャンネル番号は:6 # テレビ局の略称は:TBS # チャンネル番号は:7 # テレビ局の略称は:TX # チャンネル番号は:8 # テレビ局の略称は:CX # チャンネル番号は:9 # テレビ局の略称は:MX # もし、最初に作ったテレビ局の配列から上記のような出力を得ようとした場合には・・・ print "チャンネル番号は:" , $nhk[0] , "\n"; print "テレビ局の略称は:" , $nhk[1] , "\n"; print "チャンネル番号は:" , $etv[0] , "\n"; print "テレビ局の略称は:" , $etv[1] , "\n"; # ・・・と、テレビ局の配列の数 * 2 記述する必要があり大変。 # 配列名を間違えたり、抜けがないように人間が気をつける必要がある。 # これは「楽」ではない # でもまぁ、書けなくはない。大変だけど。
わかばちゃんと学ぶGit使い方入門 SECTION 21 〜 SECTION 30
昨日に引き続きやっていく
- 光陰矢の如し、GWもあっという間に残り6日に
- 6日もある!ひゃっはー!
CHAPTER 4
SECTION 21
- リモート追跡ブランチ。なんか、origin/masterってのが出ていたのは気づいてた
- まぁ、普通は気づく
- pullはfetchとmarge、2つの機能を合わせたもの
- fetch:リモートブランチから(ローカルにある)リモート追跡ブランチを同期
- marge:リモート追跡ブランチとローカルブランチを同期
SECTION 22
- fetchしてmargeする。ふむふむ
- 自分の手元にあるブランチの流れと、本に載っている画面の流れが違うと不安になるなぁ・・・
SECTION 23
- リモートブランチの削除とローカルブランチの削除、一緒に出来ないのかな?
SECTION 24
- コミットメッセージは、push前だったら修正可能と。
- pushした後には修正は出来ない・・・?
SECTION 25
- スタッシュ
- 変更するファイルをステージング環境に置いておかないと、スタッシュのボタンが有効化されなかった
SECTION 26
- チェリーピック!
別なブランチから特定のコミットのみを取り込みたい
- 昨日、間違えて別なブランチにコミットしてしまった俺に必要だったもの・・・
- チェリーピックは特定のコミットを、今いるブランチにコピーしてくるだけ。移動ではない
- 不要になったコミットは、リバートで打ち消す
- チェリーピックとリバート、一緒に出来れば便利なのでは・・・?
SECTION 27
- タグを付けることで、履歴上の重要な(と自分が判断した)ポイントに目印をつけることが出来る
SECTION 28
- detached HEAD、よく分からん・・・
- でも、SourceTreeが警告出してくれるから、警告に従っていれば大丈夫そう
SECTION 29
- GitHub Pages 、静的なWebページ公開サービス
- コードの解説とか、ヘルプページ的なものとか・・・?
SECTION 30
- 変更履歴が統一したフォーマットで整理されるのはとても良いのでは
- 「何でもかんでもGitで管理しようおじさん」が出てくるのも分かる
- Excelシートとか・・・
- これが「おじさん化」か・・・
- しかし、なんでこういう場合は「おじさん」なのだろう・・・
- Excelシートとか・・・
- まぁ、コラボレーションはまだ怖いかな・・・
- 誤字脱字の修正くらいなら・・・
この本を読み終えて
- つまづきポイントの先回りは良かった
- もちろん、個々人でつまづきポイントは違うんだけど、割とカバーされていた方では?と思う
- うちのつまづきポイント:別なブランチにコミットしてあわあわする
- 自分のローカルの状態と、本に載っている画面が違うと「どこかで間違えた?」ってなって怖い
- かといって、全部載せていたら本の内容は1.5倍になり、しかし中身が薄めになっていたかもしれない
- この本を基礎の基礎、土台、地殻にして、他のGit初心者本に進むとよさそう、というか進む予定
- やっぱり本の内容とローカルの状態が合わなくなって放り出した「アリスとボブ」本かな
- あとは、GitHub使わなくても個人プロジェクトでGitを使っていく気になれた
- フォルダが file_20170502.pl とか file20170502.pl とか _old_file とかで埋まる状況は回避できそう
- 読んで良かった!
わかばちゃんと学ぶGit使い方入門 SECTION 01 〜 SECTION 20
2017年ゴールデンウィークの課題図書
- Git習得には一度挫折。
- せっかく9連休をとることが出来たので、一念発起して選んだのがこの本。
なぜ「わかばちゃんと学ぶGit使い方入門」を選んだのか?
- 結城先生の記事
- YAPCでGitを実装しよう、というトークをしてたDQNEOさん監修
- でも、マンガだと情報の密度というか濃度が・・・
- 覚えられれば何でも良い
- 覚えてから言え
- Kindle版で購入
- 12.9インチiPadであれば読むのに不便はない
- が、所々画像内の文字が潰れてる?
CHAPTER 1
SECTION 01
- だいたい把握
SECTION 02
- SourceTree 入れたことがある
- しかし、自己流でやってみて、よく分からんってことでアンインストールした覚えがある
CHAPTER 2
SECTION 03
- SourceTreeのインストール
- 「お前のOS古すぎて入れられんわ」エラー
- 宗教上の理由で未だ買った時の Mountain Lion
- 初めてかつ唯一の MacOS X で、OSアップデートの経験がなくて怖い
- 宗教上の理由で未だ買った時の Mountain Lion
- まぁ、覚悟はしてた
- 旧バージョンをダウンロード
- Source treeの古いバージョンのダウンロード - Qiita
- 2.0.0 をダウンロード、インストールしてから、アップデート
- ver 2.0.5.8 に
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 をインストールしてみる
- うーん、うーん、と色々やっているうちに、この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
- 内蔵Gitのバージョン;2.6.2
- 3種のGit盛り合わせかよ・・・わけわかんねぇ
- が、とりあえず、SourceTreeの環境設定 -> Git から「システムのGitを使用する」をクリックし、そこで /usr/local/bin/git のGit(2.5.1)を選択
- ok!
閑話休題
- ほんと、個々人の環境なんて千差万別だから、万人が動かせるような環境・導入方法案内なんてなかなか無いよな・・・
- VirtualBoxのvhd配るとか・・・?
Section 05
- エラーは出なくなったが、さすがに 2.0.5.2 と現行バージョンの 2.5 は表示が若干違う。
- が、表示オプションで本に載っているのと同じレイアウトにすることは可能
- しかしまぁ、同じことをするツールなので、なんとか頭で違いを吸収しつつこのまま学ぶ
- すんなり進む
SECTION 06
- リポジトリ内のテキストファイルをチェックアウトして、過去の履歴にさかのぼる
- この辺りは、コマンドラインのgitでやった覚えがある
- チェックアウトしたときに、テキストエディタ内の内容が変わるのが、ちょっと面白かった
- Sublime Text2 を使ってます
SECTION 07
- GitHubのアカウントは作成済
- だが、使ってない・・・
SECTION 08
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版でメニューの項目表示が違うの、なんか嫌だねぇ・・・
SECTION 19
- なるほど、リベースは履歴がきれいになって良いなぁ
- でも、慣れないうちはマージを使うってことで、しばらくは使うことなさそう
SECTION 20
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の到着を待っていたのですが、夜間の配達と判明・・・
- だもんで、昼過ぎに横浜の自宅を出ました。
こういう、暖かいのか寒いのか微妙なときに、YAPC北海道でもらったウィンドブレーカー便利
— sironekotoro (@sironekotoro) 2017年3月3日
いままさに大阪にいるけど、花粉を感じる・・・■ことしの花粉 昨年の3倍 - NHK 関西 NEWS WEB https://t.co/Q5cc0SEd6P
— sironekotoro (@sironekotoro) 2017年3月3日
- ホテルで少し時間をつぶし、運営ブログにあったラーメン屋さん「人類みな麺類」へ。
- 人気店と書いていただけあり、17時30分開店時点で50人くらい並んでいる状態。
- 何とか1順目で店内に入ることが出来、ラーメンと餃子を堪能。
「人類みな麺類」あっさり味の美味しいラーメンだった。チャーシューのトッピング付ければ良かったなぁ。もう一回食べたい。 https://t.co/NkU4C4FX2p
— sironekotoro (@sironekotoro) 2017年3月3日
- そのあと、会場近くにあるコメダ珈琲で時間つぶし。
ちなみに隣の席の男女で、女性の方が既婚者の男性に「どうすれば彼氏見つかる?」みたいなお話してたけど、男性比率の高い職場で働くのがいいんじゃないすかね、たとえば技術系のテクニカルサポートデスクとか・・・って思ったりしながら聞いておりました。
前夜祭「YAPC::Kansai 2017 OSAKA 前夜祭 in大阪!突撃!隣の開発環境!」
大阪の戦略物資たる551蓬莱の肉まん。肉たっぷり #yapcjapan https://t.co/ZC0FxSi4xm https://t.co/FmHoSkusV4
— sironekotoro (@sironekotoro) 2017年3月3日
- 初551蓬莱、なるほど、肉たっぷりだ。これが「豚まん」か。
食べる前は「高級肉まん」程度に思ってたけど、認識を改めた。
珍しくWindows比率が高かった。
- YAPCつーとMacな人が多い印象。
- うちも自分のPCはMacなのですが、会社で使っているのはWindowsなので、大いに参考になりました。
- 「rapture」は早速インストールしております。
Rapture
http://www.geocities.jp/knystd/rapture.html
画面上の指定した範囲だけを付箋化し、最前面に表示させておくためのソフトです。
- あと、@hitode909さんが発表の中でスクリーンセーバーも自作してるってことを話していたんですが、自分でスクリーンセーバーまで作る意義を「スターウォーズのジェダイたちは自らのライトセーバーを自作する」事になぞらえていて、「そこまで・・・!」と思うなど。
ライトセーバー - 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さんのホール。とてもきれいな、映画館みたいなホールが印象的でした。
会場の様子です。順番に会場A、B、Cとなります。それぞれハッシュタグがございますので、参加者の皆さまもぜひたくさんツイートしてください! #yapcjapan #yapcjapanA #yapcjapanB #yapcjapanC pic.twitter.com/42pnH83cgs
— yapcjapan (@yapcjapan) 2017年3月4日
GUEST: 深沢 千尋
本日は第1,2段階のお話がメインだそうです! #yapcjapan #yapcjapanA pic.twitter.com/nHhP5zd8f9
— yapcjapan (@yapcjapan) 2017年3月4日
あぁ、深沢さんの、今のこの講演が「うちの為」の講演だ・・・って思いで聞いてる #yapcjapan #yapcjapanA
— sironekotoro (@sironekotoro) 2017年3月4日
- 自分は、今まさにこの第1、第2段階にいるという自覚があるので大いに参考になった。
- 自分の定番スクリプトを集めた「みそ蔵」を作るというのは、意識してやっていく。
- 「同じようなスクリプト前に書いたなー」と思いつつ書きはじめることをよくやるので。
「ぬるさが足りない」うちもぬるさ追求していこう #yapcjapan #yapcjapanA
— sironekotoro (@sironekotoro) 2017年3月4日
- さらなる「ぬるさ」追求していこうと思いまする。
- ちなみに、深沢さんの「すぐわかるオブジェクト指向Perl」は2回ほど通読してて、折に触れて最初っから読み直したくなる名著。
- Perl入学式を終えて、次のステップに進むときはこの本がいいです。
- もう一つのオススメ本は「雅なPerl入門」
高速化の初歩 by risou
- 初心者向けです!とのことで、これも俺得のトーク。
- 素数を求めるプログラムを例に、「文章題・問題定義そのままに書き起こしたスクリプト」をいかに高速化・・・というか、いかに無駄なステップを減らしていくか、というお話。
そうなんよね、エラストステネスの篩って知ってるかどうかなんよね。知ってれば早くする選択肢が出てくる #yapcjapan #yapcjapanB
— sironekotoro (@sironekotoro) 2017年3月4日
First step of Performance Tuning
https://www.slideshare.net/risou/first-step-of-performance-tuning
Perl入学式座談会
- うちが大変お世話になったPerl入学式のメンバーによる座談会。
- 大阪発祥ということは伝え聞いていたんですが、@papix 校長の「教えることで学ぶことが出来る」っていう力強いメッセージ。
教わろうと思ったらなぜか1年目から教えていたという校長。 #Perl入学式 #yapcjapan #yapcjapanC
— OGATA Tetsuji (@xtetsuji) 2017年3月4日
- 公開しているテキストがあり、練習問題も豊富なので、Perl入学式に出られなくとも、「通信教育」で卒業できるってのも強み、という話もあり、なるほど!と。
- 確かに、うちもリファレンスの練習問題は何度も繰り返して身に着けました
今日のオープニングトークの深沢さんの本もそうだけど、Perl入学式テキストも練習問題が豊富で素晴らしいんよね #yapcjapan #yapcjapanC
— sironekotoro (@sironekotoro) 2017年3月4日
今後は「Perl中学校」のような名前で、より高度な内容を教える場を作りたい。 #Perl入学式 #yapcjapan #yapcjapanC
— OGATA Tetsuji (@xtetsuji) 2017年3月4日
- 夢広がりますなぁ・・・
- うちはPerl入学式を終えた後はPerl本を買いあさり、新刊があればそれを買い、ひたすらに読んで中のスクリプトを書くなどしておりました。
あと、昔のYAPCのブログ記事や、アドベントカレンダー見て勉強とか。
もちろんそれだけでは飽きるので、自分のやりたいこと、やりたかったことを書いておりますが、やはり、中級編的なものを体系的に学べる場があると助かるよなぁって思ったりします。
それはPerlのオブジェクト指向であり、テストであり、DBと連携して動かすアプリであり、各種のWebAPIへのリクエストとレスポンスの加工の仕方であり・・・
- 自己流でこなしているものもあるのだけど、体系的に学ぶ機会が欲しいとずっとおもっておりました
昼休憩
- 昼は、会場からちょっと離れたラーメン屋「時屋」のつけ麺。ここもYAPC::Japan公式ブログにあったお店。
- 前日に食べた「人類みな麺類」といい、ここもチャーシューがおいしかったなぁ。
- つけダレは濃厚で、横浜家系民としてはこちらの方が「合ってる」感がありました。
公式ブログに載ってたラーメン屋「時屋」の豚つけスペシャル、濃くて良かった。そんでここもチャーシュー美味しかった。大阪ラーメンはチャーシューにこだわりあるのが特徴なんかな?選者の趣味? #yapcjapan https://t.co/qVMRrzQhcz
— sironekotoro (@sironekotoro) 2017年3月4日
- あと、ちょっと離れたところに「30代で家が建ち、40代で墓が建つ」と言われる激務高給企業のキーエンス本社ビルがあったのも良い思い出。
GUEST: 木本 裕紀
- 午後いちは木本さんの講演
- Perl書いていて、???ってなってググると木本さんの「サンプルコードPerl入門」サイトが引っ掛かる。
- だもんで、本当にお世話になりまくっているお方。
- 著書の「業務に役立つPerl」も、まさにプログラマではないユーザーがPerl使ってお仕事楽にしていきましょう、そのうえでこんなこともできるんですよ、ってなサンプルがたくさんの本。
- 読んでるうちに「あの仕事はこうすれば楽になりそう」ってアイデアが出てくる本です。オススメ。
- 講演は木本さんの業務サイトのリファクタリングのお話からスタート。
木本さんは、言語や文字コードが混在していたシステムの再構築の際、少しずつ小分けにして対応していったそうです #yapcjapan #yapcjapanA pic.twitter.com/XmlgfktiAk
— yapcjapan (@yapcjapan) 2017年3月4日
続いて、mojoliciousを使ったサイトの紹介・・・これはありがち・・・と思いきや、WebSocketを用いたリアルタイムチャットの実演がありました。
- おぉ、こんなことが出来るんだ・・・!
- また、片方のウインドウで「上下左右」のボタンを表示し、そのボタンを押すことで別のウインドウのネコを移動させる、というデモ。
- 文字が表示されるチャットから、絵が動くゲーム的なものの提示で、やれそうなことが一気に広がる気がしましたね。こうやって見せてもらうのは本当にありがたいです。
- と同時に、自分の残念想像力が悲しくなる
秀丸エディタ! #yapcjapan #yapcjapanA
— sironekotoro (@sironekotoro) 2017年3月4日
- 木本さん、秀丸エディタ使ってて、びっくりした
YAPC::Kansai 2017 発表資料「MojoliciousとWebSocketでサーバーpush配信」 - PerlならサンプルコードPerl入門
http://d.hatena.ne.jp/perlcodesample/20170311/1489225613
休み時間
今回はGMOさん、というかあんちぽくんの不安掻き立てるCMないので休み時間が物足りない #yapcjapan
— sironekotoro (@sironekotoro) 2017年3月4日
スペシャルセッション @dankogai with @moznion のmailform.cgiリファクタリング
- これがもう・・・
danさん「SMTPには死んでほしい」 #yapcjapan #yapcjapanA
— sironekotoro (@sironekotoro) 2017年3月4日
「この正規表現邪悪ですね」からの、もっと凄い正規表現の召還 #yapcjapan #yapcjapanA
— sironekotoro (@sironekotoro) 2017年3月4日
- その「もっと凄い正規表現」はこちらの「Perl / Ruby」のとこ参照
Email Address Regular Expression That 99.99% Works.
http://emailregex.com/
A会場のプロジェクター復活 #yapcjapan #yapcjapanA
— sironekotoro (@sironekotoro) 2017年3月4日
danさんの状態を保存してる @moznion 氏の先導でコーディング再開 #yapcjapan #yapcjapanA
— sironekotoro (@sironekotoro) 2017年3月4日
テストなくしてリファクタリング無し、という鉄則が俺の中に叩き込まれていく #yapcjapan #yapcjapanA
— sironekotoro (@sironekotoro) 2017年3月4日
Perl ウェブ開発の中世 CGI と Plack の間 @xtetsuji
- CGIについてはそれこそ1990年代のPerl本で学んだんだけど、なぜCGIが「重い」のか、その「重さ」に対してとられてきたmod_perl、FastCGIという解決策、そしてWAFの興隆とPlackが提供したものについて、一気通貫で語る内容。
@xtetsujiさん自身が1997年からWebに触れたとのことで、語り部的な安定感のあるトーク。
CGIが「重い」原因である「リクエストごとにプロセスを生成して破棄する」事のたとえとして、大航海時代の「一事業ごとに出資を募り、事業が終われば解散」を出してくる
- その解決として「ApacheにPerlを組み込む事で生成コストを抑えるmod_perl、一度生成したプロセスの再利用を可能にするFastCGI」を、原始的な事業継続・株式会社である東インド会社に例える
- 唸るしか無い。唸りっぱなし。
@xtetsuji さんのトーク、全編から技術、先駆者、歴史へのrespect溢れる良いトークだった #yapcjapan #yapcjapanA
— sironekotoro (@sironekotoro) 2017年3月4日
Perl ウェブ開発の中世〜CGI と Plack の間〜
https://www.slideshare.net/xtetsuji/perl-cgi-plack
はてなシステムの考古学 by @motemen
hatenaの歴史興味深い。あのhatenaですらグローバル変数を使っていた時代があるのか・・・ #yapcjapan #yapcjapanA
— sironekotoro (@sironekotoro) 2017年3月4日
- うちがPerl学び始めたときは「変数に my つける」のはすで常識であったんだけど、あのHatenaにして「そうでない時期」があったとは、というのに凄い驚いた。
- というかHatenaはじめ、Perl使っていた企業・個人が広く知見を公開してくれたおかげで、今学んでいる自分がレキシカル変数の大事さ意識することなく使っていられるのだなぁと。
あのはてながRoR導入を検討してたってのはビックリ #yapcjapan
— sironekotoro (@sironekotoro) 2017年3月4日
- まぁ、企業としては達成したいこと、提供したい価値があり、そこで技術選択が出てくるのは当然。
- だから不思議はないのだけど、HatenaといえばPerlという固定観念があるのでびっくりした。
- HatenaがRuby採用してたら、松江にオフィス構えたんだろうか?とか思ったり。
YAPC::Kansai 2017 OSAKAで『はてなシステムの考古学』というトークをおこないました #yapcjapan - 詩と創作・思索のひろば
http://motemen.hatenablog.com/entry/2017/03/yapc-kansai-history-of-hatena
LT
- @azumakuniyuki さんの北海道愛あふれるスライドを見ると、また雪の北海道に行きたくなってまう
YAPC::北海道 、雪の無い季節にやってほしい、いや雪あっても良いからやってほしい #yapcjapan
— sironekotoro (@sironekotoro) 2017年3月4日
- @makamakaさんのページ数芸、熟練の域に達してた
見切れないかのチェックを行っています #yapcjapan #yapcjapanA pic.twitter.com/TPnZ8dDKdJ
— yapcjapan (@yapcjapan) 2017年3月4日
総ページ数244p・・・? #yapcjapan
— sironekotoro (@sironekotoro) 2017年3月4日
- 最終的には3000pまで表示されてましたね
キーノート @takesako
- 先生もやっているからか、聞きやすいトーク。
- 計算機の歴史を「Harvard Mark I」からたどっていく構成
Harvard Mark I - Wikipedia
https://ja.wikipedia.org/wiki/Harvard_Mark_I
- アセンブラのパンチシート、NEC TK-80、FM-TOWNS、SUNのWS と時代を追っていく。
そのなかで、かつてはコード(命令)とデータの分離がなされていたが、今ではメモリの中で混在するようになってしまい、これがセキュリティ面での脆弱性につながっている、という指摘があり、「おぉ、言われてみりゃそうだ!」と気づかされるなど。
あと、アセンブラ短歌は、すみません、ハイコンテキストすぎて理解が・・・
YAPC::Asia Tokyo 2011 で Acme::MineChan を発表してきました | TAKESAKO @ Yet another Cybozu Labs http://developer.cybozu.co.jp/takesako/2011/11/yapcasia-tokyo-afc6.html
今日は @xtetsuji さんのCGIの歴史、@motemen さんのhatenaの歴史ときて、 @takesako さんの計算機の歴史と、歴史成分が濃い。温故知新の名に恥じないトーク構成 #yapcjapan
— sironekotoro (@sironekotoro) 2017年3月4日
懇親会
- 深沢さん、木元さん、と大変お世話になっているPerl本の著者お二人に謝意を伝えられて良かった。本当ありがとうございます。サインしてもらうために本もってくるんだったなぁ・・・
運営の方ありがとうございました
- 個人的にとても参考になるトークばかりで、良かったです。
- A会場にいる事が多かったんですが、@karupanerura さん頑張ってた
- というか、YAPC::Kansai 2017 OSAKA って、てっきり在阪の方がメインでやってるという思い込みがあり、だもんで、@karupaneruraさんも大阪の企業に転職したんだっけ?とか思うなど
- 懇親会でちょこっとお話させてもらって、そういう訳ではないとのことで、都度大阪に出てきて準備してたとの事。
- ほんとお疲れさまでした。ありがとうございました。
YAPC::Fukuoka 2017 HAKATA
- 早くも次回YAPCが
YAPC::Fukuoka は2017年7月1日! ロゴに「にわかせんべい」風の目が #yapcjapan pic.twitter.com/MjfUmDR1kU
— sironekotoro (@sironekotoro) 2017年3月4日
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
とかつけてた - 郷に入って郷に従ってない
- JavaScript書いた時は、スカラーか配列かハッシュか分からなくて変数名に
発見がある
- あたりまえだけど、あたりまえでない
浮動小数点の制度は無限ではない事に注意しよう。これは重要な事なので覚えておいてほしい。なぜなら、その性で、
(10 / 3 == 1/3 * 10)
のような比較は(たいていの場合)うまく行かないからだ。
if (10 / 3 == 1/3*10){ print "TRUE"; }else{ print "FALSE" } # FALSE
- 浮動小数点計算には気をつけなければならない、というのはどこかで見たんだけど、なるほどこういう事か