Perlとの出会い、そして。

Perl入学式に参加する前後とこれからについて書いてみようと思います。

出会い前(新人の頃、2006年)

大学では、建設系の学問を修めて、卒業後はそっち系のコンサルタントに就職しました。

大学では、現場でデータとって分析したり、FortranやC/C++を使って非圧縮性流体の解析をやってました。

コンピュータリテラシ的な授業ではさっぱりで、正直プログラムは嫌いでした。 でも、微分方程式を数値的に解けるようになってから、流体の基礎方程式であるナビエストークスの方程式が面白くなり、 実務上もプログラムが大事であることがわかって、プログラムを書くことが大好きになりました。

会社に入ってからも、似たようなことをやってましたが、コンパイル言語だけではなくて、 スクリプト系の言語も使ってみたいなと思い、Rubyの本を読んだりしてました。

仕事では、数値解析をやることがありますが、コンサルタントがメインですし、 数値解析やったり、そのためのプログラムを書いてもあまり評価はされない感じでした。

一番評価されるプログラムはエクセルVBAでした(笑) おそらく多くの非IT部門がメインの会社がそうかと思います。

出張(2011年)

会社で2ヶ月ほどの海外出張となりました。 日本と違い規則正しい生活ができましたが、平日の夜や休日はやることがありません。 (発展途上国の田舎だと本当に何もありません) 仕方ないので、オライリーの「初めてのPerl」をiPadで読んでました。 読み物として面白いのですが、Perlがなぜかしっくり来ませんでした。 おそらくコンテキストの部分だと記憶しています。

そうこうしてるうちに、「ローカルのエンジニアに、日本の検討方法を説明してくれ」と現地の所長に言われました。 簡単に言えば、拡散方程式を解く話になるのですが、C++で書くのもつまらんなと思い、違う言語を使うことにしました。

Perlという手もあったのですが、結果Pythonで書くことにしました。 コンクリートの解析なので、力学の計算も含まれているのですが、それなりに勉強になりました。

帰国後(2011年〜2013年)

Pythonが結構使えることがわかったので、数値データの可視化の部分で利用してました。 matplotlibが便利で、コンター図やベクトル図を書いてました。 ただし、計算負荷が大きいものはFortranかCでした。

転職(2014年はじめ)

思うところがあり、転職しました。ベンチャーですが、科学技術計算を生業としてプログラムを書ける会社です。 プログラムを書くことがメインとなったのです。 主な変化点を挙げると以下のようになります。

  • 自分がやりたいことを中心に据えられた。
  • 残業が減った。
  • 給与も減った(えっ?)。
  • 時間ができた。

Perl入学式に参加(2014年6月頃)

転職して時間作れるようになったし、 新たに勉強しようと思い、ネットで探していると、「Perl入学式」の文字が・・・。

気づいた時には、第2回からだったのですが、資料が整っていることもあり、 第1回の資料を見てPerl入学式に必要な環境は整えられました。

ところで、仕事では数値計算をやるのですが、速度が大事です。 一方で、数値計算をやるために必要なパラメータの設定等は、プログラムを走らせる前にテキスト等の形式で用意します。

正直、FortranやCでテキスト処理を行うのははきついのです。 それまではAWKなんかで処理をしたりしていました。

そこで、Perl入学式参加にあたり、もっとテキストデータをPerlで処理することを目標にしました。 (自分の中の目標を持つことは大事です)

以上の目標を持ってPerl入学式に参加することにしました。

参加して、@papix校長はじめ、サポーターの皆さんの手厚い指導のもと、 「Perlって面白いな」と感じました。

Perl入学式に参加して得られた事を挙げると以下のようになります。

  • 最近のPerlの書き方やルールを知る事ができます。書籍でも得られますが、情報が古い事があります。現役の方の情報を得られるのは有用です。

  • テキスト処理で重要な正規表現、そして柔軟なデータ構造を表現できるリファレンスは、大きな収穫だったと思います。正規表現は他の言語(というか、ある種「正規表現」という言語?)にも活かすことができます。リファレンスは面倒くさいと思われる方もいらっしゃると思いますが、Perlの一番面白く、柔軟性を持たせる機能だと感じ、Perlが好きになった理由の一つです。

  • サポーター含め、私と同じように生徒して参加してある方との出会いは刺激になりました。みなさん、様々なバックグラウンドをお持ちでありながら、Perlを勉強する機会に恵まれるのは、やはり、Perlという言語、そしてPerl入学式が非常に優れている証明になるのかなと思います。

  • 練習問題が出題の後、答え合わせは講師のコーディングになります。勉強になるのは、講師の方のコーディング環境です。私はEmacsを使うことが多いのですが、シェルとVimの環境もやはり速いなと思い、多少?環境も整えたりました。Perlとは異なりますが、プログラムの環境を自分で調べて整えるのは大事だなと改めて感じました。

  • 私自身、Webに猛烈な興味があるわけではなかったのですが、Perl入学式を経て、興味を持つようになり、Webと科学技術計算をどうやって上手く繋ぐべきか考えるようになりました。

  • @htk291さん曰く、「飲み会が本番です」

最近(2015年〜)

今年度に入り、新しい会社で働くことになりました。

Perlを使う会社ではないですが、やはりプログラムを書くことも、コンサルティングをすることも評価してくれる会社です。

給料は上がって、時間は若干作りづらくなりましたが、バランスはちょうどいいかなと思ってます。

今年に入って印象的なことは以下のようになります。

  • 最初で最後のYAPC2015に参加しました。正直さっぱりわからんことも多かったですが、参加されている方が楽しんでおり、何より他言語だろうが、Perlと関係なかろうが、発表されていることに驚きました。Perlコミュニティの良い意味での緩さがすばらしいと思います。「私、Perl全くわかりませんけど」で始まる発表が許されるのはおそらくPerlだけなんだろうなと勝手に思ってます。

  • 少し先に進めるために、「よなべPerl」という勉強会にも参加させていただいてます。@hakata_oyukiさん(福岡でのPerl入学式も関わっていらっしゃいます)が主催されてますが、Webやデータベースに関わる所も勉強になります。日下部さん(あっ!)流もわかります!

  • 吉祥寺.pmにも一度だけ参加させていただきました。発表したいな思いますが、なかなか・・・。時間を作りたいですね。上半期だと可能かなと思ってます。

  • 2度目の入学をしています。1度目で気付かなかった所(特にリファレンスとMojoの部分の説明の難しさ)に気づいたり、自分が忘れている事項に気づきます。ちょうど復習になるのでしょうか。

まとめ

Perlと出会い、Perl入学式に参加してプログラムを書く行為の第2歩が整えられた気がします。Perlに限らなければプログラムを書く行為をして、給料をもらうことはやっていたのですが、 Perl入学式で得られたPerlそのものの知識、出会いを通じて、幅が広がったなと思います。

プログラムを書く、ということ一つを取っても、様々な分野があると思います。インフラに携わる方、Webに携わる方、組み込みに携わる方、私のように科学技術計算に携わる方、その他、私が想像できない分野でプログラムを書かれている方もいると思います。また、プログラム書くことはしない方もいらっしゃると思います。

その中で、新しい1歩、新しい2歩を踏み出してみたいという方は、Perl入学式に参加されてはいかがでしょうか?

よなべPerlの感想

参加目的

なんか新しいことに挑戦したいなと思い、昨年初めて2014年度の「Perl入学式」に参加させていただきました。

Perl入学式」ではPerlの基本的な使い方を学びつつ、最後にMojoliciousの簡単な使い方まで教えていただきましたが、この先の学習を考えると、Webを学びたいなというのがありました。

ちょうど、YAPCの次の日ということもあり、福岡在住の@hakata_oyukiさんがよなべPerlを開催されるということで、参加させていただきました。

yonabeperl.blog.jp

www.zusaar.com

YAPCはブログを書くまでが、YAPCということなので、それに倣い、よなべPerlの感想を書かせていただきます。

日時と場所

2015年8月23日 17:00 ~ 19:00 @北千住

概要

Webプログラミングの概要を掴むために、以下のことをやりました。

当日は、テキストによる資料を用意していただき、予定時刻が記入されていたのは非常に良かったです。

環境の設定

大きく以下の2つを整えました。

WindowsMacの両方に対応しています。

私はMacでしたが、Emacsを使うので、そのままEmacsを使いました。 これから、参加されようとされる方は、アプリをインストールして行くと、 時間の短縮になると思います。miは大学の時に使っていたので、思い出深いエディタです。

HTMLの記述

時間の都合上、コピペが多くなりますが、タグ打ちです。 また、Chromeの使い方も多少教えていただきました。要素の検証で見るんですね。 基本のタグは覚えるべきですが、使いながら覚えるべきかなと。

CSS

HTMLとCSSに関する書籍だったり、サイトがあったりして、言葉は知っていたのですが、 中身はさっぱりでしたが、説明を受けてようやくわかりました。 なるほどスタイルの設定ね。リファレンス見ながら、覚える感じです。

JavaScript

jQuerryを使いました。基本の文法については触れられませんでしたが、 JavaScriptがなんたるかを知ることはできました。

どういったライブラリを導入して、HTMLファイル内に記述すると、どういった動きになるかはわかりました。 基本的な文法については、自分で勉強しないとなというのはあります。

プロトコルとかドメインとかIPアドレスとか

個人的にはここら辺の仕組みはちゃんと勉強したことがなかったので面白かったです。 nslookupコマンドも知らなかったので・・・。

普段は偏微分方程式を解いて、数値データを可視化することがメインなので、Webだと新しい知識が入ってきて楽しいです。

良かった点

  • 勉強会自体はフランクな感じで雰囲気は良かったです。
  • 環境の設定から丁寧に説明して下さり、参加者のみなさんも理解していおりました。
  • 当日の会場はWifiの調子が悪いということで、急遽、資料等を当日配布してくださいました。対応力が良かったです。

次回に向けて

  • 本来の予定ではさくらのレンタルサーバを使った実習ということだったので、出来れば次回参加してその知識と能力を得たいなと思います。
  • 正直、未だにWAF(FireWallじゃない方)がわかっていないので、ここら辺を理解したいなと思います。
  • 「Webを支える技術」を購入し、少しずつ読んでいます。やはり基本的な背景は知っておく必要あるかなと。
  • 次回も機会があれば、参加したいなと考えてます。今の所、Webで飯を食おうとは考えておりませんが、知っておくことで、広がる世界もありますし、思わぬところで、仕事に生かされることもあります。
  • ひとまず、数値計算ができるサイトを作ることを目標にしたいかなと考えています。ユーザーのインプットに対して、数値解とグラフくらいを表示できるといいかなと。

御礼

@hakata_oyukiさんにはお世話になりました。また、解りやすい解説ありがとうございました。また参加させていただきます。

Perl入学式(第2回補講)

概要

Perl入学式(第2回補講)が開催されました。

  • 日時:2015年7月25日13時〜
  • 場所:五反田某所

資料については、下記をご参照ください。

github.com

第1回は環境構築がメインのため、ソースを書くことはほどんどありませんでしたが、 第2回はひたすらソースを書きました。

Perl特有の文法はもちろんですが、Perlに限らず、他言語でも使えるプログラムの考え方?の勉強をしました。

  • 標準入出力
  • 変数の取り扱い(スカラ、配列)
  • 演算子(四則演算子、論理演算子
  • 繰り返し(for文)
  • 分岐(if,elsif,else)

改行を取り除く「chomp」なんかももちろんやりました。

感想

  • 第2回はPerlのソースを動かすという意味でも、他言語でも使える知識を得られると感じました。 特に最後の課題であるFizzBazzは非常に奥が深いなと思います。

  • ハッシュ、リファレンスについては第3回の予定(2014年度は第3回でした)のはずです。勉強したい方は是非。

  • サポーターの方は非常に親切です。非常に初心者レベルの質問をしても答えてくださいます。また、皆さんが「初心者がつまづく所を知りたい」という姿勢を感じます(私だけかも知れませんが)。

  • 校長が前半を担当、@xtetsujiさんが後半を担当されました。校長は登板過多のようでした。

その他

  • Perlを勉強したい方にも、プログラム経験がなく、とりあえずプログラム書いてみたい方にも適切な勉強会かなと思います。エンジニアでない方も参加されていますので、二の足を踏んでいる方は是非!

Perl入学式の感想

Perl入学式に参加させていただいていたのですが、 せっかくなので、これまでの感想とかを書いておきます。


動機

私は大学から社会人まで科学技術計算で生きてきて、プログラムを書いておりましたが、 CとかFortranがメインです(おそらくこれからもそう)。 スクリプト言語AWKPythonRubyをテキストデータ整形用やグラフ描画用に書くくらいで、 見よう見まねでやっている状態でした。 それで、ちょっと調べてみたらPerl入学式という名の勉強会があるじゃないですか! 私のような初心者でも参加できそうなので、参加しようと思い立ったわけです。 といっても、第2回の開催前に気づいたので、参加できたのは第2回以降です。 Perl入学式のURLは下記です。

http://www.perl-entrance.org/

第1回

この時はまだ存在を知らず、不参加でした。 内容は、Perlを使う上での環境構築だった模様です。 対応OSはLinuxMacです。ただWindowsでもVMWareを使って、Ubuntuの環境を構築するので、 心配は要りません。 Webにアップされている資料だけでも、環境は構築できました。 正直、環境を構築できたので、参加しても得るものがあるかなと思い、第2回の参加を決めたのでした。

第2回

第2回の内容は大まかに以下のとおりです。

  • 前回の復習
  • おまじない
  • 変数
  • 標準入力
  • 四則演算
  • 基本的な演算子
  • if, else文
  • 論理演算子
  • for文, 配列

入出力、演算、反復や分岐等を学びます。 私自身は多言語で経験があったので、特に難しい印象はありませんでした。 ただし、「プログラムを書いたことがない」人でも出来ると思います。 とにかくサポーターが心強いです。レベルが低いかもしれない、みたいな事を聞いても問題ないです。

こういった勉強には初めて参加したのですが、Macが圧倒的に多い印象です。 まあ、OSXになってから爆発的に増えた気がします。 私も大学の研究室で始めてOSXを使って、「おー、Terminal使えるんだ!cdとかも使えるじゃん!すげー!」 とOS9との違いにびっくりしたものです。

第3回

大まかには、以下のとおりです。

  • 配列 (関数)
  • ハッシュ
  • リファレンス

配列とハッシュは、多言語で経験しているとわかりやすいです。 リファレンスはC言語の経験があって、ポインタを知っていれば理解しやすいと思います。 PythonRubyだと、参照について強く意識することはあまりないですが、 Perlは気にする必要があります。Perl入学式第3回後、ネットや書籍の情報で勉強してみたところ、 このリファレンス機能により、柔軟なデータ構造を表現できることが理解できました。

普通は、一気に書かずに、機能毎に途中出力結果を確認しながらコーディングをしますが、 リファレンスの出力には「Data::Dumper」を利用すると便利だなと感じました。

第4回

概要は以下のとおりです。

リファレンスの復習で撃沈気味でした。時間が空いてしまったため、普段使わないと忘れるのは仕方ないですが・・・。 サブルーチンは、C言語の関数です。Fortran以外でサブルーチンという音を聞くとは思いませんでした。

サブルーチンへ渡す引数は、基本的に1次元の配列です。 したがって、aという配列とbという配列を渡して、それぞれの要素ごとに足し合わせてcの配列を返す、なんてことはリファレンスを使わないと表現できません。 これは代表的なリファレンスの使い方ですが、オブジェクト指向等の表現もリファレンスの機能を使っているはず?です。

正規表現は「Perl入学式」に参加する大きなモチベーションのひとつでした。 Webアプリ等を仕事にしていないので、どちらかというとテキスト処理のツールとして、 Perlを使えないかなと思っていましたので、非常に勉強になりました。

テキスト処理にはAWKを使うことが多く、正規表現も結構適当で、とりあえず、パイプで繋げばいいじゃん! の感覚でいたので、Perl正規表現AWKにもフィードバックできるれば、 もう少しエレガント(コードが少なくわかりやすく)に書けるかなと思ってます。

第5回

概要は以下のとおりです。

  • 前回の復習
  • mapとgrep
  • while
  • next, last
  • package / 名前空間
  • モジュール
  • テスト
  • テストを使った開発
  • 付録: 後置if, 後置for

packageについては名前空間を使ったことがあると、理解が早まります。 また、テストは結構重要な要素かなと。

プログラムは、「環境構築して、プログラム書いて、回った回った!!!終わり」、 というわけではないので、 単体テストの実施方法を学べたのは良かったです。

第6回

概要は以下のとおりです。

  • Mojolicious の準備
  • HTTP の基礎
  • Mojolicious 入門
  • 簡易 BBS の作成

Mojoliciouのインストールからはじめます。cpanmは第1回でインストールしているので、 さくさく進みます。

私はHTTPをちゃんとやってなかったですが、特に違和感なく出来ました。

1つ気になったのは、Mojoを使って吐き出されるソースで、インデントがスペース2つという所です。 おー、emacsの設定変えろって事?です。

不足分

オブジェクト指向については、十分に触れられません。 ただし、第5回までで学習したことを生かせば、書籍やネットの情報で理解することが出来るかなという印象です。

CPANモジュールは第1回で使い方を、第6回でMojoliciousをインストールしますが、 必要なモジュールを調べて、使ってみるのも面白いかと思います。 私はPDLというのを入れて使ってみました。

書籍

Perl入学式では特に書籍は必要ありません。 一冊くらいは購入して、体系的に学ぶこともしておいたほうが良いかと思います。 お勧めの書籍については第1回で紹介されています。

https://github.com/perl-entrance-org/workshop-2014-01/blob/master/slide2.md

また、書籍とPerl入学式で学んだことに差異がありますが、 Perl入学式の方が、最新の情報らしいです(まあ、生の情報が新しいに決まってますが)。 気になったら、サポーターの方に聞くのが一番です。 ハッシュタグ「#Perl入学式」でつぶやくと、すごい人々が対応してくれるそうです。

今後

Webアプリ

今後は、復習しながら、Mojoの学習かなと思いますが、 そもそもWebについては明るくないので、そこから学習するのもありかなと思います。 ただし、仕事で使うことはないと思われるので、 どうやって趣味としてモチベーションを維持するかは個人的な課題です。

テキスト処理

一方で、テキスト処理の自分用ツールを書きたいなという思いはあります。 こちらは普通に仕事でも使えると思うので、やってみたいかなと。 ですから、モチベーションの維持については課題はないと思ってます。 やれば、それだけ生産性が向上しますから。

Perlに対する印象の変化

Perl古い」という印象を持っていました。 まあ、CとかFortranとか使っているんで、古い事にはなれてますが・・・。

Perlは強い後方互換性を保ちながら、新しい機能を追加していく姿勢がすごいなと思います。 お勉強用の書籍については、RubyPythonに比べて少ないのかなとの印象ですが、 実はいろんな機能を追加したり、書き方の流行?の変化速度が速かったりして、 書籍じゃ追いつかないのかなという印象に変化しました。 「古くて新しい」が一番しっくりきます。

付随して得られたもの

開発環境については、「エディタ」を使うようになってます。 Perl入学式の中では推奨はEmacs、SublimeText、Vimでした。 個人的にはEmacsを使ってましたが、講師の方がVimでコーディングしている姿を見ると、 Vimもかっこいいなと思い、多少触ったり、カスタマイズの方法なんかも調べました。

大規模なプログラムになると、開発環境を整えることも重要かなと思います。

サポーターの皆様への感謝

プログラムを書くのは「楽しいから書く」のだな、と思います。 一人で書いても楽しいですが、仲間がいるともっと楽しいです。 ただ、いざ一人で新しい言語を勉強しようとすると難しいです。

こういった場を提供してくださった講師をしていただいた方をはじめ、 サポーターの皆様には感謝です。

加えて、プログラミング言語を学ぶ基礎として、コミュニティは重要だと認識しました。 職場でも、プログラムを書く人がいたとしても、職務の範疇でしか知識や経験が得られませんが、 こういった勉強会があると、幅も広がります。

また、機会があれば参加させていただきたいと思います。 皆様、本当にありがとうございました。

iTerm2

iTermについてです。

MacOSのシェル環境はどのようにされているのか?

はじめてのパソコンはiMacDV OS9.04 でした。 それ以降、OSXのはじめては10.2ジャガーでした。 大学で使ったシェルが使えて感動した覚えがあります。

iTermは下記にあります。

iTerm2 - Mac OS Terminal Replacement

便利ですね。

MarkDown

会社でMarkDownの話題が出ていたので、 Emacsに入れてみました。 「.md」ファイルに下記のように入力すると、

# 見出し1
# 見出し2
# 見出し3

以下のようになります。

見出し1

見出し2

見出し3

所詮テキストファイルなので、軽いですし、 .mdファイルの結果は、HTMLのブラウザで見れます。 このはてなも、マークダウン形式で書けます。

マークダウンのファイルはテキストファイルですが、 HTMLブラウザで見るには変換する必要があります。

EmacsVim、SublimeTextでは変換ツールが備わっています。

EmacsVimを使ったことがない人はSublimeTextが良いかと思います。 パッケージのインストールとか楽ですし、キーバインドも他のテキストエディタと比較して、 大きな違いがないかと思います。下記のページが非常に参考になります。

http://webmem.hatenablog.com/entry/sublime-text-markdown

EmacsVimの利用者は、説明する必要はないと思います。 (こだわりを持って利用されていると思います)

MarkDown記法はググればたくさん出てきます。、

置換

置換はよくやる作業だと思います。
事務処理でも、研究でも、ITでも。

Perlだと「s/置換前/置換後/」で変換できます。

  • ファイルの読み込み
  • 置換
  • 置換後のファイル出力

をやれば、複数ファイルでも、自動で置換できるはずです。

use strict;
use warnings;
my $str = "I am Ken.\n";
print $str;
$str =~ s/I am/You are/;
print $str;