なんかデフォルトのMANPATH
に含まれなくなってしまったらしいので、みたい場合は~/.zshrc
などに以下を書き加える必要がある
export MANPATH="/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/share/man:$MANPATH"
具体的なバージョンは/Library/Developer/CommandLineTools
の中身に依存する(大体14か15)
なんかデフォルトのMANPATH
に含まれなくなってしまったらしいので、みたい場合は~/.zshrc
などに以下を書き加える必要がある
export MANPATH="/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/share/man:$MANPATH"
具体的なバージョンは/Library/Developer/CommandLineTools
の中身に依存する(大体14か15)
--stat
すればいいらしい
$ hg diff -r 120 --stat
こんにちは! id:anatofuzです。
皆さんのおかげで、ラトビアのリガで開催されたPerlCon2019に参加し、無事帰ってくる事ができました!!! 報告が遅れてしまいすいません 🙇
という訳でこのブログではPerlConの参加から帰国までのイベントレポートを乗せていこうと思います!!
今回の旅は id:papixさんと共に行動をする旅でした。 日本からHelsinkiへの便はちょうどお昼というのもあり、当日沖縄から東京、そしてHelsinkiはかなり時間的に厳しいので、前日入りをするぞ!!!となっていました。
papixさんと「前日は大江戸温泉物語で」などと話していましたが、id:papixさんが成田空港内のいい感じのホテルを抑えていただくことに成功したので、二人でそこに宿泊することになりました。 その為、初日は、那覇から成田のホテルへの移動となりました。(なお完全にいつもどおりに羽田行きの便を取ってしまった)
今回のためにイオンモールライカムで購入した大きめのキャリーケースに、目印としてはてなブログと研究室のアイコン、そして旅のお守りとしてポプテピピックのステッカーを当日貼り付け、出発しました。自宅から那覇、羽田空港までは順調に進み、そのままリムジンバスに乗り込んで成田空港へと向かいました。
成田空港ではすでにid:papixさんが資料作成のためにカフェに滞在しており、合流後、二人でひとまずホテルへ向かいました。 ホテルへは成田空港から無料バスが出ており、いい感じに輸送されます。 ホテルの部屋からは空港を見ることができ、「空港じゃん....」という小学生みたいな感想を抱きました。
成田で日本を経つ前の最後の晩餐(?)として、成田空港でとんかつを食べ、id:papixさんはFitBoxingをし、僕は資料を書きながらその日は寝ました。
次の日はシュッと朝起きて空港に移動、出国審査関連の手続きが始まるまで荷物を預けるなどしていました。 papixさんが昨年修行をしていた為、専用レーンでシュッと手続きをする事ができたので「修行すごい....」と思っていました。
朝食はまだ食べていなかったので、これもpapixさんの力でラウンジに乗り込み、修行パワーで無料で提供される朝食を食べていました。 (めちゃくちゃ海外旅行慣れてそうなスーツ姿の人々もいて、「これが国際線ラウンジ...」となっていました)
ラウンジ以外では国際線のゲートを超えた先の風景にテンションが上っていました。 なお今からラクダのプログラミング言語のカンファレンスに行くはずなのに、「らくだだめだ」という衝撃的なポスターを目撃する...
というわけで搭乗です。普段は国内線のLCC的な飛行機しか乗らないので、大きくて圧倒された。
機内は定期的に食べ物がデプロイされるシステムになっており、国際線の便に乗っていれば餓死することはないなと感じました。 ポプテピピックの「ビーフオアチキン?」の再現はできなかった。
機内はまくらやUSB充電、タブレット端末などがありインターネットカフェか?という感じでした。 wifiも課金すれば使えたので、資料を書くためとTwitterをするためにwifi繋いでました。自宅のネット環境よりは早かった。 今現在航空機がいる場所が地図で出ていましたが、ほとんどロシア上空だったのが面白かったです。マジでロシアは大きい…
しばらくは資料づくりを頑張って、資料が終わった後はタブレットにinstallしていたシャークネードを見ていました。 papixさんはSwitchやってました。シャークネード1は良かったですが、シャークネード2を見ようとしたら、「開幕15分くらいで飛行機にシャークネードが突っ込む」シーンだったので、「これは国際線に乗っている今見るものではない」と思いそっ閉じしました。
そしてついに海外上陸です!!! 我々がついたのはフィンランド、ヘルシンキ空港です。
ヘルシンキ空港では「無限に続くかと思われる、ホラーゲームで絶対敵が出る廊下」や、「唐突の日本語」、「トイレの手を拭くやつがリサイクル式になっていて、伸ばして引っ込める」などの衝撃体験がありました。 入国審査は「Papers, Please」で鍛えたにも関わらず、先にpapixさんが行っていたためか、「Hello」の一言で通過という状況でした。
そして空港のRkioskiで「DNA」という絶妙にPerl感があるSIMカードを購入しました。滞在日数に比べてかなり容量があるプランだったらしいのですが、僕のiphoneが「写真を問答無用でicloudにアップロードする機能が有効になっていた」為に、このプランに救われました。
そこからは電車に乗ってヘルシンキ中央駅へ!! なおフィンランドの公共交通はすべて同じ乗車券になっていて、滞在日数に合わせて3日分などの様に買うことができます。 特に改札などは存在しませんが、乗務員から提示を求められた際に期限が切れていたりすると問題が発生するタイプの様です。今回は提示を求められることは無かったです。
ヘルシンキ中央駅の周辺は、いかにも「ヨーロッパです」という感じでした。街がすべてディズニーランドじゃん...。みたいな感じでした。 ここまでの電車や、この町並みで本当に海外に来たんだなぁと実感しました。
このあたりには「いかにもヨーロッパっぽい銅像」や「すごみのあるアフラック」「日本料理店」などがありました。
ホテルBothにチェックインを済ませ、その日は近くのスーパーで買ったサンドイッチなどを食べました。 ヘルシンキでは、水だと思ったらだいたい炭酸水が売っていて、ビールは夜は発売禁止になる世界観です。 スーパーはベルトコンベアに商品を載せて精算するシステムでした。
というわけで時差が辛いのもあるので、この日の晩はpapixさんのFitBoxingを見届けて寝ました。
2日目のヘルシンキは10度スタートでした。早朝と深夜は冷えるという情報があり、薄手のパーカーを念のために持っていきましたが、常に寒かったのでほぼパーカーを着ていました。 とはいえ現地のおじさまは、半袖短パンでランニングをしており、「これが国の違い…」となっていました。
この日は朝市でご飯を食べようという流れになり、路面電車を利用して海岸沿いの市場に行きました。
路面電車に乗ったのは初めてか久しぶりな気がします。 話には聞いていましたが、海外にはあまり電柱がない。
朝市会場は海沿いで、常にうみねこかカモメ的なのが鳴いていてのどかでした。 早く付きすぎて、まだ朝市は動いていなかったのでしばらく探索していました。
ヘルシンキのオシャレ度は凄まじく、公衆トイレもめちゃくちゃオシャレでした。
付近には環状のオシャレな建物や、大きい碇などがあり記念撮影などをしていました
そんなことをしていると、そろそろ市場も開いてきたので適当な店で朝食を取りました。 飲食系の屋台以外には、民芸品を売る屋台などもありました。
今回はMooseのミートパイと、ムーミンのベリー系の炭酸飲料を買いました。 Mooseという名前を見た瞬間、Perlを感じてしまった。
店内はヒーターみたいなのがついていて、「夏の気温じゃねぇ...」という感じでした。
会計時にセントとユーロの硬貨がパッと区別がつかずちょっと焦りました。
ご飯も食べたので、観光再開です。ここの市場からフェリーでスオメンリンナ島に移動できます。 このフェリーは前日の電車や、朝方乗った路面電車と同じ乗車券で乗ることができます。
スオメンリンナ島に上陸した際は、朝早かったのでぼちぼちでしたが、帰るときには日本人旅行客や、様々な国の観光客の方が来ていました。 スオメンリンナ島、めちゃくちゃオシャレ度が高くて、建物も歴史を感じつつオシャレ度が高い。 要塞だけありかなり強そうな建物が並んでいました。
道中いかにもゼルダとかに出てくる、「序盤と終盤に行くとイベントが発生する場所」を見ました。
ヨーロッパ==RPG
みたいな図式があるので、「復活できるセーブポイントやんけ!!!」みたいな場所もありました。とはいえ実際にドンパチやっていた場所なので、第二次大戦などの戦争を感じさせるものも多かったです
石で作られた要塞は当時の戦争風景を感じさせられました。 キングスゲートというカッコいい名前の場所もありました。 (当時は船でこのキングスゲートに国賓が来ていたらしい)
そしてスオメンリンナ島には至るところに大砲があります。 今では玉の代わりにゴミが詰められている大砲もありましたが、大砲の存在感はすごかったです
大砲を撮影している時に、id:papixさんが中国系の観光客の方から話しかけられ、記念撮影をしてあげるなどのやり取りがありました。
あとはなんか、日本では見たことがない鳥がめっちゃいました。 忍者龍剣伝で見たことがある気がする。
papixさんと抱いた感想が「nice board.」で一致してしまった pic.twitter.com/vtsUD15Jtj
— 八雲アナグラ (@AnaTofuZ) 2019年8月5日
スオメンリンナ島には博物館も多数設立されていますが、今回は戦争博物館に行きました。 ちょっとした日本語ガイドみたいなのもあって便利。(とはいえ展示物はフィンランド語/英語で解説されているので、だいたいは英語を読む)
ひとしきりスオメンリンナ島を満足した我々は、フェリー乗り場の前で酒を飲みつつ休憩しました。ciderってサイダーじゃなくてりんご酒の方。
8.2ユーロです pic.twitter.com/YxjC6DNWPD
— 八雲アナグラ (@AnaTofuZ) 2019年8月5日
1セントコインと間違えて1ユーロコイン出したので店員に「Ha!?」みたいに言われましたが元気です
— 八雲アナグラ (@AnaTofuZ) 2019年8月5日
そしてフェリー乗船。再びヘルシンキ市場に戻ります。
すでに1日終わった感がありましたが、まだ昼前になっていません。 市場にはうみねことか背中に円柱が刺さっているカメの石像がありました。
まずは近場の教会に行ってみます。「信号とかも縦じゃん! すごい!!」みたいな感じでした
今回は中に入れなかったので、写真だけ取って楽しみました。
そしてヘルシンキ大聖堂へ向かいました。 観光地なので様々なバスや路面電車が行き交っています。
ヘルシンキ大聖堂は中にも入れました。
そして路面電車でテンペリアウキオ教会へと向かいます
テンペリアウキオ教会は岩を重ねて作られている教会で、今はコンサート会場としても使われている様です。 僕たちが入ったときはジャズピアノのコンサートをしていました。 「サラウンド環境じゃん...音質めっちゃいい...」みたいな感想です
テンペリアウキオ教会からは一旦ホテルに戻り休憩しました。 かなり活動した感じはありましたが、まだ時間があるので ヌークシオ国立公園へと向かうことになりました。
まずは最寄り駅へ電車で向かいます。
電車に乗る前に、ヘルシンキ中央駅の売店でご飯と水を買ったのですが、なんと水のペットボトルのキャップが半開きになっていました。店員のお兄さんがいい人で、変えてきていいよとか言ってくれた...
次にバスに乗り換えて向かいます。降りるバス停をミスって結構歩くことになりました。
国立公園まではひたすら山道を歩きます。 道中にマツダやホンダなどの、日本車のホイールが落ちていました。こんなとこで日本を...
公園は非常に森と湖が綺麗でした。桟橋みたいなのがグラグラして面白かった。
ベンチで先程買ったパン的なものと水(炭酸水)を飲んで休憩です。 パン的なもの、なんかネチョネチョしていてあまり美味しくはなかった...
ここで休憩していたら、午前中にスオメンリンナ島でid:papixさんが記念撮影をしてあげた中国系観光客のおばさまと再開するというおもしろ体験がありました。おばさまも疲れていたみたいなので、ここから3人でヘルシンキ市内へと戻ります。
道中でいい感じのスポットにもよりました
この日は疲れからか、電車に乗っている時から頭痛が発生してしまい、早めに眠りにつきました。 ご飯は前日と同じでスーパーで購入しました。 あとはこういう体験もありました
PMのレポート出そうとしたけどホテルのネットからだとwebclassにアクセス出来なくて泣いてる
— 八雲アナグラ (@AnaTofuZ) 2019年8月5日
3日目はしばらくヘルシンキに滞在した後、メイン目的地のラトビア、リガへと向かいます。
id:papixさんの提案で、2人でエロ漫画に行きました。 エロ漫画という名前ですが、エロ漫画は売っておらず、パン屋さんです。 店内にはお父様がご飯を食べていて、エロ漫画ではなく新聞を読んでいました。
ピロシキと、バナナとベリーが混ざったドロッとした健康飲料的なのを飲んでいました。
近くにはどうみてもポータルな冬戦争のモニュメントなどもありました。
近場には公園があり、ちょっと散歩しました。 ここにも教会的なものがあり、「こ、これが北欧...!」となっていました。
そしてカンピ礼拝堂に向かいました。ここは静寂に包まれていて、弓道部時代を思い出しました。 都会は色々うるさいですが、こういう場所があると心落ち着きますね...。
さていよいよヘルシンキともお別れをし、リガへと向かいます。 路面電車でヘルシンキ中央駅へと向かいます。
再び電車に乗ってGo!
女性に「chuck it」って言われたからなんだと思ったらパピさんのチャックが空いてたみたい
— 八雲アナグラ (@AnaTofuZ) 2019年8月6日
ヘルシンキ空港では、リガへの搭乗手続きを英語でしたり、手荷物預け入れをしたりと英語実践編みたいな感じでした。(手続きが無事できた時は感動した)
お土産屋さんでは鹿の絨毯用の毛皮などが売っていました。 我々はid:papixさんの力を利用して、ヘルシンキ空港のラウンジに行っていました。
ラウンジはハチャメチャにオシャレで、鮭のスープが美味しかったです。 また、ラウンジで「沖縄の研究室のサーバーにssh」するという実績を解除し、「グローバルIPってすごい....」と実感しました。
そしてFinAirでリガへ。プロペラ機です。 機内サービスのジュースの注文は焦りましたが、「指出してThis one」で乗り切りました。 夏に研究室に来ていたインド人留学生から学んだテクニックが役に立った...。
そうこうしている内にリガです。リガへの入国は、特に入国審査などがなく、国内線のノリで乗る事ができます。まずはリガから、papixさんがboltという配車アプリでタクシーを手配し、ホテルへ向かいました。
リガのホテルでは危うく予約されていないという状況になりそうでしたが、なんとか無事乗り込むことができました。音楽イベントをやっている関係で、どこのホテルも満員に近いらしい。
ついでに目の前のコンビニ(スーパー?)で飲み物とお菓子を買いました。
近場にLidoといういい感じのレストランがあるようなので徒歩で行きました。 ラトビアの料理をいい感じにバイキングでトレーに載せ、載せた食べ物に応じて会計というシステムです。
ご飯はなかなか美味しく、注文も実物をバイキングすればいいのでなかなか良かったです。 (料理名を見ても瞬時に日本語でイメージがつかないですが、バイキングならその点が解消される)
いよいよPerlConが始まります! まずは会場まで僕がBoltでタクシーを呼び、向かいます。 boltは最初から目的地を登録するので、後は乗り込むだけ。支払いもクレジットカードで、しかも友達の紹介だとかなり無料で乗ることができます。
その為タクシーも日本のようなタクシーではなく、普通の車にbolt用のスマホが備え付けられているという世界観でした。
会場であるRadisson Blu Daugavaに到着です!(グループのホテルがラトビアに他に何個かあった)
PerlConには日本からは、papixさん、 charsbarさん, skajiさん、福岡に今いらっしゃるgugodさん、私が参加しました。
チェックインとPerlConの受付を済ませ、ぐるっと会場を見て回ります。
PerlConではメインホールが$
部屋で、1階上がった先のサブ会場が、それぞれ@
と%
というPerlのシジルがつけられた名前でした。
もちろんノベルティもあって、Perlのマークや「I love Perl5|6」のステッカー、LarryWallのポストカードなどがもらえました。2階の@
や%
の部屋の前では、定期的に軽食が食べられる懇談の時間があります。
オープニングではカッコいいPerlConの紹介ビデオがキル・ビルのテーマに乗って放送されていました。会場にはこれなかったLarryからのビデオメッセージが再生された後、PerlのメインコミッタであるSawyerXのキーノートが始まりました。
Sawyerのトークは今までのPerl5のバージョンごとの歴史や、今後のアップデートで強化していきたいことなどの、日本ではあまり聞けないPerl自体の話でした。 SawyerはCPANなどのアイコンが自分の顔で、見た感じ怖そう...と思っていましたが、素晴らしく優しい良い方でした。charsbarさんが繋いでくれて、お話する事もできました。「Perl5のリポジトリにcommitするにはどうしたらいい?」という質問に「とりあえずcommitしてくれれば指摘するよ!!」みたいに答えてもらえました。当日は恋人(?)といつも一緒に行動していたのが微笑ましかったです。
PerlConは売店もあり、Perlの書籍やグッズが販売されていました。 Wendy Van Dijk さんが店員だったのですが、気さくに話しかけてくれて、クッキーの型付ききまでおまけでくれました。「Perl6の本ならどれがオススメ?」と聞いたら教えてくれた本を買っています。
PerlConには本棚のタペストリーがありましたがこれはWendyとLizの本棚だそうです。
Liz and Wendy's amazing Perl bookshelf that they truck around to conferences. #Perl pic.twitter.com/X2FgkIyu
— Schwern (@schwern) 2012年8月17日
売店では他に「Perl」というワインが売られていて、charsbarさんやgugodさんによると、これはドイツに「Perl」という地名の田舎町があり、その町のワインをWendyたちが売っているそうです。
初日のトークは、まさかのcharsbarさんの裏番組がpapixさんという日本人がブッキングするという事件もありましたが、面白いトークが多かったです。特にPerl6プロジェクトのメインコミッタであるJonathan Worthingtonによる、Perl6の高速化の話は面白かったです。MoarVMに関する最近のアップデートや、Perl6が驚くべきことにPerl5よりも早い処理があるなどの衝撃的な発表に興奮していました。
もともと卒研で触っていた内容でもあったのでかなり興味深く、Twitterでツイートしたところ、IRCに誘われました。
papixさんのトークでは、明日の僕のトークの宣伝も入りました。
なんと本来は私のトークは初日だったのですが、Sawyerのトークを聞いてるあたり、こんなメールが来ました。
Hi Tokahiru, We moved your talk to the Day 2 of the conference. Please find us to get another lunch ticket. Thank you for your understanding. Andrey -- PerlCon 2019 ____________________________________________________________________________ The European Perl Conference in Riga, Latvia https://perlcon.eu | mail@perlcon.eu
ま、まさかの当日順番変更....!!! というわけでスピーカーのランチチケットを取り替えてもらい、私のトークは翌日2日目に移動になったのです...。
PerlCon初日が終わり、ホテルの部屋に行こうとしましたが色々と問題がありました。 部屋はカードキーで入るのですが、手書きで書いてもらった部屋番号が「651」にしか見えなくて、その部屋を開けようとしたのですが、一向に開かない....。 ロビーで問い合わせようと1Fに降り、偶然居たcharsbarさんに聞いたところ「651」じゃなくて「657」だったというオチでした。
そして部屋に入ったにも関わらず、我々を迎えていたのは...
ベット*2と思っていたのに、まさかのダブルベッド1つ。流石にid:papixさんとダブルベッドはお互いにきついので、フロントに「I want an extra bed!! Please separate bed!! today!!! 」みたいに頼み込んでエクストラベッドをもらいました。
夜はcharsbarさん、skajiさん,papixさんで食事に行きました。 charsbarさんが終始優しくて本当にありがとうございました...! (明日トークだったのですでに緊張していた)
すでに緊張していましたが、ご飯を食べました
PerlCon2日目ではいよいよ僕のトークです。
というわけで異常に緊張していました。具体的に緊張の例を上げると
などがありました。緊張していましたね...。
とーくのスライドは、
などをして作りました。
会場は前日のpapixさんと同じで@
部屋でした。
トークですがスライドはこちらです。フロッピーディスクの辺りでウケがあって良かった。
日本からきていた皆さんが来てくださったのですが、あのSawyerXも来ていただいていて、非常にびっくりしました。(気づいたのはトークが終わった後の質疑応答のタイミングだったと思う)
Takahiro Shimizu. How to build traditional Perl interpreters
トークは極度に緊張していたのですが、一種のクライマーズ・ハイというか、実際に話していたときは夢中になっていて、あまり覚えていないです。聞いたところ「所々日本語が出たり怪しそうだったが、勢いで乗り切っていた」という話だったので、ま、まぁ良かったかな...という感じです。トーク終わった後にSawyerに握手を求められたのがすごい嬉しかった。
トークが終わって、廊下で休んでいたら、先程のトークを聞いていてくださった方から「面白かったよ、いつもそういうことしてるの?」と言われて「他にPython0.9.1ビルドしてます...」とか話しら興味深そうに聞いてくれました。
2日目はLTなどもあり、密度が結構濃かったです。 最初はElizabeth Mattijsenによるキーノートで、Perl6の現状や、Perl6の噂を検証するというものでした。この日はElizabethから「Perl6をCameliaという名前にしない?」という提案がキーノート内でありました。(最終的にはRakuになりましたが)
この方はトークをすべてターミナルでやっていて面白かったです。 (おもしろコマンド, API紹介みたいなトークでした)
僕は別のトークに行っていましたが、WebPerl という凄まじい発表があったのも2日目です。 また、Twitterのフォロワーでもある、AlexanderのRakuのWAFであるCroに関するトークを聞いていました。
かなりPerl6成分が多めだったので、聞いていて楽しかったです。スライドをLaTeXで作っている方もいました。トークの内容は(僕が英語がそこまでよく理解できないのもありますが)、日本人の方が(話し方|技術的に)に上手いというのもあったと思います。
2日目ではスピーカーディナーがありました。偶然にもリガに来て初日に行ったレストランと同じ店でした。スピーカーディナーには、NW在住のMakoto Nozakiさんやブルガリアのエンジニア、カナダで図書館システムを開発しているPerl6が好きなおじさんなどと喋りました。他にはcharsbarさんの紹介で、Perl6のコアコミッタの方ともお話する事ができました。
あまり懇親会が日本でも得意ではなかったのがあるのですが、もっと英語を喋れるようになってガンガン話したい...!と思いました。
3日目はトークも終わり、リラックスして聞いていました。
KeynoteはJonathan Worthingtonで、1日目と少し似ているPerl6の今後についてのトークでした。 3日目はMoarVMの高速化というより、文法やモジュールの話、並列構文などが中心でした。
他にはXSを使ってPerlのオペコードを上書きする話や、skajiさんのcpmの話、Perl6を使って実装した同時進化アルゴリズムの話などがありました。
LTや合間で入ってくるジョーク、英語が上手く聞き取れないので意味が理解できなくて笑えないのが悔しい...!となりました。LTはLTなので早くて集中力が試される感じがありました。
3日目の終わりに差し掛かっている頃、BlackStoriesの提供で、参加者の名前が呼び上げられたらプレゼントが貰えるくじがありました。 偶然にも名前が呼ばれて、BlackStories海外版をもらいました。
PerlConのクロージングは、この3日間のスライドショーとスタッフのエンドロールなどが再生されました。あの規模のカンファレンスを2名+技術班で運用しているのはすごかった...!
その後は日本からの人々で集まって、はちみつビールやうさぎなどを食べていました。
うさぎは鶏肉に似ていましたが、鶏肉よりも獣感が強いと言うか、肉を食べている感じが強かったです。
はちみつビールは非常に甘くて美味しかったです。
その後はpapixさんと夜のリガを歩きながらホテルへ向かいました。 コンテンツ力が高かった「ボタンを押し続けないと上昇しないエレベーター」は面白かったです。
楽しかった旅も終わり、いよいよ帰宅です。 その前にリガをもう少し観光します
昨日の晩の散歩でみかけたような道を歩きます。 ラトビアはヘルシンキと比べると落ち着いては居ますが、ヨーロッパらしさは相変わらずです。
そして自由の記念碑へ! 兵隊さんが警備していました
PerlConのマークにもなっている猫を見かけました。かわいいですね。 意外と写真を取っている人が少なかった気もする。
そして近くの売店で水を買い、boltでリガの空港へ向かいました
リガの空港でお土産やコーラを買ったりしてちょっとゆっくり。 自動販売機はクレジットカード決済に対応していてこれがキャッシュレス...となりました。
リガからヘルシンキはまたプロペラ機です。
ヘルシンキではムーミン関連のお土産を買ったり、謎の味千ラーメンを見たり、自販機で飲み物を購入しました。お土産売り場では唐突に店員に日本語で話しかけられたり、サルミアッキを買うなどの体験をしました。
ヘルシンキへの入国で、自動でパスポートの顔と認証するシステムがったのですが、なぜか僕だけスムーズに反応せず、「2分くらい顔認証のブース内で足止め」という悲しい出来事も体験しました。
そして飛行機に乗り込みます。まさかのタラップではなくバスで移動...。
機内では炭酸がおいてあったり、アイスを貰ったり、またご飯を無限にもらうなどしました。 寝ないといけなかったのですが、なかなか眠れず、日本についたときは大変でした。
そして日本に ...!!
Perlのカンファレンスに参加したので健康相談室に行かなきゃ...と思いながら入国しました。
とりあえず成田のレンタルシャワーでシャワーを浴びて、そのまま実家山梨にバスで移動しました。 (本当は大江戸温泉とかに行こうとしたが、疲れていて早く家かホテルに行きたかった)
ということで無事帰国しました!!
今回は初めての海外、初めての国際線、初めての海外カンファレンスと初めてづく目だったので、無事に行って返ってこれて良かった!! という感じでした。特にほぼ日一緒にいたpapixさんや、現地で合流したcharsbarさん、skajiさん、gugodさんにはお世話になりました。ありがとうございました!!!
初めての海外では「英語って本当に言語なんだな...」という感想を得ました。変かもしれませんが、普段書籍や映画,洋曲などで英語が使われているメディアとは触れていますが、実際に英語話者が多数派の世界には行ったことはありませんでした。今回始めて海外に行き、日本語話者が圧倒的に少ない世界に行ってみると「英語って本当に会話で使われている!!!」という、当たり前ではありますが、実感として持つことができたと思います。英語勉強しっかりやっていきたい。
またPerlConでは海外のPerlMongerとお会いできたのが非常に刺激になりました。CPANでアイコンで見たことがある方々が実際に動いて喋っているのは「実在したんだ!!!」みたいな体験でした。特にSawyerとAlexandreに会えたのは良かったです。Perlを作っている彼らも1人の人間なんだなと感じました。僕も彼らと開発してみたいなと強く感じました。
PerlConは日本のYAPCと同じような熱気もありつつ、Perlの内部の話や、Perl6の話が多かったのが印象的です。RubyKaigiに近いものがあるなと感じました。もちろんハイレベルな発表もありましたが、日本の勉強会でしている話が英語にできればPerlConでも通用するなと感じました。
またid:papixさんが「英語は度胸」と言いながら英語コミュニケーションをすごいしていて、カッコいい...!と思いました。僕ももう少し度胸をつけたいと思い、ぼちぼちduolingoとかを始めています。
今回のPerlConは、インターネットの皆様からのカンパで行くことができました! 改めてお礼申し上げます。ありがとうございました!!!!
id:papixさんと相談しながら、小さくブログで募集をしようとしたところ、想像以上のスピードでカンパがあつまり、本当にありがたかったです。 Perlコミュニティの皆さんから、沖縄のコミュニティの皆さん、そしてインターネットでしか面識がない方や、面識が今までなかった方からもカンパを頂きました。
皆さん共通してカンパのときにかけていただいた言葉は「若者だから頑張ってこい」と「以前Perl(コミュニティ)にお世話になったから」という言葉です。Perlという言語がよく、「人と人とをつなぐグルー言語」と呼ばれている理由が、実感できたと思います。
今回は若者であるということと、Perlコミュニティの皆さんの力でPerlConに行く事ができました。 私も近いうちに社会に出て、1人のエンジニアとしてやっていくと思いますが、「あの時の若者がだめになった」と言われないように、僕もPerlコミュニティに還元できるようになっていこうと思います。
本当にありがとうございました!!!
(この他にも様々な方が協力してくださいました!!)
皆さん本当にありがとうございました!!
合計 ¥588,000 でした!
カンパの余剰分は当初の予定通りPerlの団体にお渡しという形を取ろうと思います。
具体的には、私以外のPerlに関わる学生とPerlコミュニティに還元したほうが良いと思い、次回YAPC::KyotoなどのYAPCの学生旅費支援スポンサー費として利用致します。
最後になりますが、ありがとうございました!!!
こんにちは。最近MacBookProのキーボードが返ってこなくなったid:anatofuzです。キーボード押し込んだままなかなか帰ってこない...
というわけでこのエントリは就活のご報告という感じです。具体的にどこの会社に行くとかは伏せるので、気になる方はid:anatofuzを飲みに連れていきましょう。
なんとなくweb系は早いイメージがあったので、10月くらいから面接をぼちぼち受けていました。 まだ21卒のスケジュールを公開していない会社は、後述する新卒エージェント的なのを利用していました。
その為「新卒エージェント氏に紹介された会社を受けた」というよりは「行きたかった会社の面接を新卒エージェント氏に頼んだ」という感じです。 エージェント氏経由だと提出する書類が簡単になるとか思ってましたが、別にそういうことは無かったので、今となっては「別に全部自分で応募してもよかったな...」と思っています。
イメージとしては、10月に某社の最終面接を受けるのが一番早く、11月にweb面接な1次・2次面接のピーク、12月が最終面接のピークという感じでした。
使ったサービスは「キャリアセレクト」と「athletics(CodeSprint)」ですね。マイナビとかは会員登録さえしてないです。 なおキャリアセレクトは「Facebookで友達申請が来て、友達登録すると新卒エージェントだった」みたいな感じです。正直どうなんだろうという感じではある。 その為キャリアセレクトを使ったのは、たまたま行きたくて21卒の情報が公式サイトに無かった企業 + 書類出すのが簡単になるかな…と思っていた企業が、エージェント氏との面談で名前があがったというのが理由です。
「athletics(CodeSprint)」さん経由で会社を受けることは無かったのですが、アドバイザーさんがとかく親切でいいので皆さん使うならathleticsを使いましょう。
サポーターズさんからはアクションがあいましたが、個人的にもう大体決まっていたので面談だけして特に使ってませんでした。 また、逆求人も4月に行ったインターンの逆求人以外は行ってないです。
わりと様々な人々は逆求人を強く進めていますが、僕は4月のインターン以外行ってませんでした。 というのも、交通費が出るのはいいのですが、基本的に逆求人で来る企業大体同じ説があり、同じ企業と2回も3回も会うのめんどくさい...というのがあった為です。 僕はすでにいろいろな会社知っていましたが、あまり会社を知らないという人は行ってみたほうが良いかもしれない
沖縄からの就活ですので、基本的に2次くらいまではweb面談で行っていました。 web面談は正直慣れがあると思っていて、遠方の学生で慣れているか不安な方は一度友人同士でネットで会話すると良いかもしれないです。 よく使ったのはSkypeとGoogleハングアウトですが、会社によってはappearを使っているケースもありました。
いくつかの会社でおもしろ体験があったので書いておきます
研究にてOSレベルまでのプログラムを読み込んでいるが、プログラム言語に対してソースレベルの話には繋がらなかったため。
就活のメモは全部scrapboxを使っていました
結果が出た企業にはポプテピピックの画像を載せていました
— 八雲アナグラ (@AnaTofuZ) 2019年12月18日
Scrapboxの様子です pic.twitter.com/OS75o4Eyw2
— 八雲アナグラ (@AnaTofuZ) 2019年12月11日
就活ステータスです pic.twitter.com/voZG8Xzvqv
— 八雲アナグラ (@AnaTofuZ) 2019年11月15日
というわけで就活レポートでした。参考になれば幸いです
こんにちは。 琉大アドベントカレンダーをエイッとやる係のid:anatofuzです。 これは琉大 Advent Calendar 2019 10日目の記事です。
昨日はid:onigirichanreさんの逆求人の話でした。 onigirichanre.hateblo.jp
良いですね逆求人。僕も行ったことはありますが、都会でやっている逆求人の場合あからさまに自分に興味を持っている企業(人間)と、そうでない企業が目に見えてわかるので面白いですね。
ちなみに某サイバーなんとかとの面接体験は最悪だったのを覚えています。
最初は自分のデスク周りの話をしようと思っていましたが、 NiZのキーボードとFILCOのウッドパームレストは良いぞという話しかしないと思ったので、変更して便利コマンド/最近の自作スクリプトの話です。
あとサンテ メディカル12の目薬などは必ず持っておくと便利。
pbcopy
まずは自作コマンドでなくmac osに標準で入っているコマンドから見ていきましょう。
個人的に頻繁に使うのは、 このpbcopy
です。 機能は単純で、シュッと標準入力をpbcopyにわたすと、それがクリップボードにコピーされるものです。
イディオム的によく使うのはパイプでつなげる方法でしょうか。 例えば
$echo 'hoge' | pbcopy
とすると hoge
はクリップボードにコピーされます。
ojichat
おじさんがLINEやメールで送ってきそうな文を生成するコマンド。 らしく一部の界隈で非常に人気のあるコマンドです。
$ ojichat のりかチャンは、スタイルがいいね😚(^o^)😃ホント可愛すぎだよ〜😘マッタクモウ(^o^)😃☀ 😘(^_^) $ ojichat jogo 僕はjogoチャン一筋だよ😴🤑(^^;;僕はjogoチャンの味方だかラネ😃
僕はよくTwitterでid:unimarimoにクソリプを飛ばす際に利用していますが、前述の pbcopy
と組み合わせると効果を発揮します。
$ojichat | pbcopy
こうすると、 ojichatの出力がクリップボードにコピーされますが、標準入力をすべてpbcopyにパイプで渡している為、 実際にペーストしてみないと何が入っているかわかりません。
こうなるのが辛いので、 zshrcにシュッと書いた関数が ojicopy
です。
function ojicopy { local ojimsg=$(ojichat $@) echo $ojimsg echo $ojimsg | pbcopy }
使用方法は ojichat
を ojicopy
に差し替えるだけです。
$ ojicopy jogo jogoチャン(笑)元気、ないのかなぁ(-_-;)大丈夫( ̄ー ̄?)寒いけど、頑張ってね😎(# ̄З ̄)✋😤
こうすると出力自体は ojichat
を単体打ちしたのと等価ですが、恐るべきことにクリップボードにもコピーされます。
原理はシェルが読める方ならだいたい分かるかと思いますが, ojicopy
の引数をojichat
に渡し、その出力を変数ojimsg
に代入します。
あとはただ echo
と pbcopy
を実行しているだけです。
the_platinum_searcherのこと
golangで書かれた素早いgrep。最近はripgrepもいいらしいが、ptの方を使っている
Rustで書かれたfinder。オプションがfinderと違うので良く忘れる
cdしたらzshのchpwd_functions
で save_dir_history
が実行され、ホームディレクトリ以下に探索したディレクトリが追記され続ける用になっている
export dirfile="$HOME/.dirfile" function save_dir_history { echo $PWD >>| $dirfile } chpwd_functions+=save_dir_history
👆で作成した dirfile
の末尾は最後に cd
したディレクトリです。
普段ターミナルのウィンドウをバンバン開く運用をしているので、別のターミナルで最後にcdしたディレクトリと、別のwindowsのシェルのカレントディレクトリを同期したい。
その為には dirfile
の末尾にcdすればいいので、そういう運用でコマンドを書いています。
なお他の関数でdirfile
を参照するには環境変数にする必要があり、 export
しています。
function hd { cd $(cat $dirfile | tail -1) }
こう書いておくと、⌘Nであたしいターミナルwindowを開いたら、とりあえず hd
って押しておくと便利
ご存知パイプで繋いだものをいい感じにインクリメンタルサーチしてくれるくん
もともとはこちらのエントリを参考にして書いていたものです
このエントリではzshのzというツールの機能を使い、ディレクトリのインクリメンタルサーチを実現しています。
しかし僕はすでに dirfile
にディレクトリ一覧が入っているので、これを cat
しPerlワンライナーに渡しています。
Perlワンライナーでは、 Perl の if (-d $file_name)
を利用し、 デッドリンクでないものを出力する様にしています。
また、 id:anatofuz が、gameというディレクトリにいかがわしいタイトルのゲームを大量においているので、公衆の面前でコマンドを実行して大変なことにならないよう、 game
がパスに含まれていたら削除しています。
#function peco-z-search# {{{ function peco-z-search { which peco z > /dev/null if [ $? -ne 0 ]; then echo "Please install peco and z" return (1) fi local res=$(cat $dirfile | perl -ne 'BEGIN{%dir;} chomp($_); $dir{$_}++; END{map { print "$_\n" if (-d $_) } grep { $_ !~ /game/ } keys %dir}' | peco) if [ -n "$res" ]; then BUFFER+="cd $res" zle accept-line else return 1 fi } zle -N peco-z-search bindkey '^[pz' peco-z-search # }}}
ちなみにこのPerlスクリプトと等価なものはだいたいこんな感じでした。
local res=$(cat $dirfile | sort -rn | uniq | peco)
僕はよくiphoneで取った写真をair dropでmacに送っていますが、リアルタイム撮影をしている為、拡張子がHEICで送られます。 HEICのデータは写真としてアップデートできないので、 jpegなどに変換したいですね。 実はこの変換は mac osで出来るのですが、よくコマンドを忘れるので雑にスクリプト化しています。
#!/usr/local/bin/zsh if [ $# -ne 1 ]; then echo 'require heic file' exit 1 fi image_title=$1:r sips --setProperty format jpeg ${image_title}.HEIC --out ${image_title}.jpg
このsips
がいい感じに画像変換をしてくれており、 jpegに変換します。
image_title=$1:r
の部分ですが, zshの機能で ${str}:r
とすると、${str}
の拡張子を取り除くことが可能となります。
これをシュッと実行すると、実行したディレクトリで、HEICのファイル名と同じjpegファイルが生成されます。
mac osで取得するスクリーンショットの種類を変更してくれるコマンド 何が変更できるか覚えられないので、 tabを叩くといい感じに保管してくれるようになっています
screenshot-type () { if [ $# -ne 1 ] then echo "require bmp,gif,jpg,pdf,png,tiff" return 1 else defaults write com.apple.screencapture type $1 fi }
screenshot-type j
でタブ押すと、いい感じにjpgに保管してコマンドを実行してくれる。
これの補完関数を $fpath
が通っているディレクトリに _screenshot-type
という名前で登録している。
#compdef screenshot-type function _screenshot-type { _values 'type' 'jpg' 'png' 'pdf' 'bmp' 'gif' 'tiff' }
_values
と書いておくと、コマンドの引数として補完される。
僕らの大学と研究室ではgitの他にmercurialを利用しているが、 gitでいうところのhubコマンドの hub browse
みたいなのが無かったから書いたスクリプト。
基本自分の大学の環境で出来るようにしている。
#!/usr/bin/env perl use strict; use warnings; use IPC::Run3; # hg config経由でhgrcにかかれているpush先を確認する my @cmd = ('hg','config','paths.default'); my ($stdout,$stderr); eval { run3 \@cmd,undef,\$stdout,\$stderr;}; if ($@){ print "error! >> $stderr"; exit 1; } # 無かったら特に何もしない exit 1 unless ($stdout); # yomitanはパスで開けないので別枠 if ($stdout =~ /yomitan/){ yomitan($stdout); } elsif ($stdout =~ /firefly/){ firefly($stdout); } if ( $stdout =~ m[(https?|ssh)://(\w+@)?(.*)]){ my $url = "http://$3"; @cmd = ('open',$url); eval { run3 \@cmd,undef,\$stdout,\$stderr;}; if ($@){ print "error! >> $stderr"; exit 1; } } sub yomitan { my $input = shift; my $http_domain = 'https://ie.u-ryukyu.ac.jp/hg/'; my $mid_path = 'index.cgi/home/hg/'; my $url; if ($input =~ m[.*//home/hg/y(\d+)(.+)]){ $url = $http_domain . "y$1/".$mid_path."y$1".$2; } @cmd = ('open',$url); eval { run3 \@cmd,undef,\$stdout,\$stderr;}; exit 0; } sub firefly { my $input = shift; my $http_domain = 'http://www.cr.ie.u-ryukyu.ac.jp/'; my $url; if (($input =~ m[.*?firefly.cr.ie.u-ryukyu.ac.jp/(.*)] )||($input =~ m[.*firefly/(.*)])){ $url = $http_domain.$1; } @cmd = ('open',$url); eval { run3 \@cmd,undef,\$stdout,\$stderr;}; exit 0; }
例えばhgrcにこういうのが書かれているリポジトリの場合
[paths] default = ssh://yomitan//home/hg/y15/e155730/OS/ex6.3
$hg-browse
とリポジトリ内で実行すると、 https://ie.u-ryukyu.ac.jp/hg/y15/index.cgi/home/hg/y15/e155730/OS/ex6.3 を自動でopenしてくれるくん
というわけで色々な便利モジュール集でした。個人的にはだいたいターミナル上で生活している人間なので、このあたりのおもしろツールをいかに使う/作るかを考えています。 もし皆さんもちょっとシェルやCUIをカスタマイズしようと思ったら、参考にしてもらえれば幸いです。
明日はid:sdr816くんです
こんにちは。最近は雇用契約を結ぶために東京と沖縄を行き来しているid:anatofuzです。
これはPerlアドベントカレンダー6日目の記事です。
そういえばYAPC::Kyotoのテーマが決定したようです。 個人的にQといえばウルトラQなのですが、Qにちなんで、今回は旧Perl6ことRakuの話です。
Perl6はRakuに名前が代わりました
(#rakulang
です)
さてRakuでWebAppを作ってみたいと、インターネットエンジニアの方は夜中に唐突に思い出して夜も眠れなくなるかと思います。 このエントリでは、Rakuの主力なWAFの一つであるCroを用いてWebアプリケーションを作製したいと思います。
今回作製したコードは次のリポジトリに置いてあります。
RakuのIDEであるCommaを開発しているチームが主に開発しているWAFです。
厳密にはWAFではなく、reactive programmingのためのフレームワークという立ち位置です。
その為、デフォルトパッケージである Cro
はルーティングやweb socketなどをサポートしていますが、テンプレートエンジンなどは派生パッケージである Cro::WebApp
名前空間のものを利用するとなっています。
まずはCroのインストールから始めてみましょう。今回はDockerで色々しますが、何かと物があったほうが便利です。
Raku自体は $brew install rakudo-star
などで入れましょう
$zef install cro
なお $zef install Cro
だと、別のパッケージが入るので気をつけましょう。
....ですが、2019/12/06現在 なんか IO::Socket::Async::SSL
周りで死ぬので諦めたほうが良いかもしれません....orz
$ zef install cro ===> Searching for: cro ===> Searching for missing dependencies: IO::Socket::Async::SSL, YAMLish, Cro::WebSocket, Docker::File, File::Ignore ===> Searching for missing dependencies: Cro::HTTP, Base64, Digest::SHA1::Native, Crypt::Random ===> Searching for missing dependencies: IO::Path::ChildSecure, HTTP::HPACK, Cro::TLS, JSON::JWT, Log::Timeline, if ===> Searching for missing dependencies: Digest::HMAC ===> Building: Digest::SHA1::Native:ver<0.04> ===> Building [OK] for Digest::SHA1::Native:ver<0.04> ===> Testing: IO::Socket::Async::SSL:ver<0.7.5> ===> Testing [FAIL]: IO::Socket::Async::SSL:ver<0.7.5> Aborting due to test failure: IO::Socket::Async::SSL:ver<0.7.5> (use --force-test to override)
ではまずプロジェクトを始めるために適当にディレクトリを作ります
$mkdir test_cro
croをいれるとcroコマンドが使えるようになるので、これでstubを作成します。 croが上手く入らなかった場合は、同じファイルを頑張って手で書けば問題ないです。
$cro stub http entrance .
今回は entrance
というプロジェクトで作成します。
作製すると次のようなディレクトリ構成のものが出来上がります
. ├── Dockerfile ├── META6.json ├── README.md ├── lib │ └── Routes.pm6 ├── service.p6
入学式ではMojolicious::Liteを使ってエイッとしていましたが、今回はほぼこの雛形のRouters部分を編集することになります。
Perl入学式の練習問題ではこのようなものがあります。
先ほど作成したhttp://127.0.0.1:3000/profileを充実させましょう。以下のページからコードをコピペして利用してもokです。
` @@ profile.html.ep % layout 'default'; % title 'profile'; <h1>プロフィール</h1> <p>私の名前は<%= $name %>です</p> <p>趣味は<%= $hobby %>で, 好きなプログラミング言語は<%= $lang %>です</p>
テンプレート部の profile を、コピペして上記のものに置き換えます。 コントローラー内で stash を利用して name, hobby, lang 変数に値を代入します。 思いつかない人用ハッシュ (name => 'larry', hobby => 'study', lang => 'Perl' )
workshop-2019/slide.md at master · perl-entrance-org/workshop-2019 · GitHub
Croのデフォルトは127.0.0.1ではなく0.0.0.0の10000番ポートであるので、適宜組み替えて、これに該当するものを作ってみます。
....と、まずはcroが今日はmac osでは上手く動かないので、 Dockerを使っていい感じにビルド出来るようにしてみましょう。
FROM croservices/cro-http:0.8.1 RUN mkdir /app COPY . /app WORKDIR /app RUN apt-get update && apt-get -y install build-essential RUN zef install --deps-only . && perl6 -c -Ilib service.p6 ENV ENTRANCE_HOST="0.0.0.0" ENTRANCE_PORT="10000" EXPOSE 10000 CMD perl6 -Ilib service.p6
このようなDockerfileを用意します。 (cro stubでも同様のものができますが、 makeコマンドが無いので RUN apt-get update && apt-get -y install build-essential
を加えます)
次に docker build
するのが面倒なので、 docker-compose.yml
を書きます
version: "3.6" services: app: build: . image: anatofuz_cro_entrance volumes: - .:/app ports: - "10000:10000" tty: true
ここまで書いて docker-compose up
すると、croのweb appが立ち上がると思います。
ここまで出来たら、次に /profile
のエンドポイントを生成するのと、該当するテンプレートを作ってみましょう。
説明の都合上まずはテンプレートエンジンを導入します。
Perl6/Rakuでは現状 META6.json
というパッケージの情報をまとめたjsonの depends
配列の中身を利用するモジュールと判断し、 zef
がインストールします。
その為、 まずは この META6.json
に利用するパッケージを記述する必要があります。
使用するテンプレートエンジンはCro::WebApp::Template
ですので、以下のように追記します。
"depends": [ "Cro::HTTP", "Cro::WebApp::Template" ],
次にテンプレートファイルを用意します。
テンプレートファイルを置く場所は任意に設定できます。
今回はプロジェクトルートにtemplates
ディレクトリを作製し、その中に書いていきます。
テンプレートファイルの拡張子は .crotmp
が使われている様です。
$mkdir templates $vim profile.crotmp
profile.crotmp
の中身はこんな感じです
<!doctype html> <html lang="ja"> <head> <title> <.<title>> </title> </head> <body> <h1> プロフィール </h1> <p> 私の名前は <.<name>> です</p> <p>趣味は <.<hobby>>で, 好きなプログラミング言語は<.<lang>>です</p> </body> </html>
mojolicousでは、渡した変数を使う場合は <%= $name %>
としましたが、 Croでは無名ハッシュを送り、 <.<key>>
とすることでアクセスできます。
これはRakuのSyntaxに近いものですね。
次にRoutes.pm6を編集します
Routes.pm6は、Croのstubが生成するデフォルトのルーティングファイルであり、 Cro::HTTP::Router
によって実現されています。
Croのルーティングには、 template 機能があり、 レンダリングするテンプレートと無名ハッシュの形でパラメータを送る事ができます。
テンプレートは Cro::WebApp::Template
ですので、 これをuseして template-location
にプロジェクトルートから見たtemplateファイルのパスを指定します。
use Cro::HTTP::Router; use Cro::WebApp::Template; sub routes() is export { template-location 'templates'; route { get -> { template 'index.crotmp', { title => "タイトル", greeting => "hello Cro" }; } get -> 'profile' { template 'profile.crotmp', { title => "タイトル", name => "AnaTofuZ" , hobby => "Twitter", lang => "Perl"}; } } }
この例では /
及び /profile
にGETリクエストが発行された場合、それぞれ index.crotmpと profile.crotmpにパラメータを渡しつつレンダリングをします。
実際にここまで書いて dokcer-compose up
してみると
上のような表示が出ます!! やったね!!!
Perl入学式にはFizzBuzzをテンプレートエンジンで解く課題があります。やってみましょう。
まずは fizzbuzz.crotmpですが
<!doctype html> <html lang="ja"> <head> <title> <.<title>> - Cro </title> </head> <body> <@numbers: $var> <?{$var % 3 == 0}> Fizz </?> <?{$var % 5 == 0}> Buzz </?> <?{($var % 3 != 0) && ($var % 5 != 0 )}> <$var> </?> <br/ > </@> </body> </html>
上の様になります。 Croの templateエンジンでは <@array: $scalar>
と書くと、 </@>
が来るまでの間、 Perlで言うところの for my $scalar (@array)
と書いたのと同じ意味になります。
以下の <? {} > </?>
は, {}
の中身を真偽値判定する if文のようなものであり、 <?
の場合は中がtrueであるときに要素がレンダリングされます。
そしてFizzBuzzに値を送るルーティング部分は
use Cro::HTTP::Router; use Cro::WebApp::Template; sub routes() is export { template-location 'templates'; route { get -> { template 'index.crotmp', { title => "タイトル", greeting => "hello Cro" }; } get -> 'profile' { template 'profile.crotmp', { title => "タイトル", name => "AnaTofuZ" , hobby => "Twitter", lang => "Perl"}; } get -> 'fizzbuzz' { template 'fizzbuzz.crotmp', { title => "xxx", numbers => [(0..100).list] }; } } }
上のようになります。ここまで出来ると...
この様にテンプレートエンジンでFizzBuzzが書けます!! やったね!!!
ここまでで、Perl入学式の課題をいくつかCroを使って解いてみました。 続きは別のアドベントカレンダーでまた書くかも...!?
明日は id:kfly8 さんです。わくわく
awk
を使って番号を決めてgrub2-
で解決する方法が出回っている
$ grubby --info=ALL
でそれっぽいやつを探して grubby --set-default /boot/vmlinuz-4.2.0-1.fc23.x86_64
とかで変更できるようです