Perlがくしゅう帳(Rubyも)

プログラミングの勉強会の参加記録や学んだことなど。 twitter ID : @tomcha_で活動しています。 最近は主にPerl関連の勉強会やコミュニティに参加しています。移転前のブログはこちら->http://ruby.doorblog.jp/

Perlのリファレンス記述で初学者がつまずくポイント

リファレンスの書き方を混同してしまうケース

 まずは変数である配列やハッシュの宣言やデータの格納方法を思い出してみましょう。配列やハッシュへ格納されるデータはリスト形式のデータが使用され、リスト形式のデータの書き方は列挙された値を()で括ります。

# 配列を宣言し値を格納する
my @month = ("April", "May", "June");

# ハッシュを宣言し値を格納する
my %price = ("apple" => 120, "strawberry" => 540,
             "orange" => 298, );

 配列やハッシュから各個別の値を取り出す方法は、変数名のシジル@や%を$に変更し、[]や{}を使用して各個別の値を直接指定します。

# 配列の先頭から2つ目のデータを取り出す
print "$month[1]\n";

# ハッシュからキーが’orange’の値を取り出す
print "$price{'orange'}\n";

 一方、配列やハッシュのリファレンスを作成する時は以下のコードの様に書きます。リファレンスを表す変数のシジルは$を使用します。格納されるデータは列挙された値を[]や{}で括ります。

# 配列リファレンスを宣言し参照先に値を格納する
my $eto_arrayref = ["子", "丑", "寅"];

# ハッシュリファレンスを宣言し参照先に値を格納する
my $price_hashref = {"tuna" => 220, "mackerel" => 100,
                     "salmon" => 150};

 配列やハッシュとリファレンスを見比べてみると、同じ記号が用いられよく似ていますが完全に記述が異なっている事が分かります。また、リファレンスの参照先の実データを取り出すことをデリファレンスと呼びますが、リファレンスから個別の値をデリファレンスして値を取り出す時は、[]や{}に加えて->を用いて以下の様にコードを書きます。

# 配列リファレンスから0番目の値を取り出す
print "$eto_arrayref->[0]\n";

# ハッシュリファレンスからキーが'mackerel'の値を取り出す
print "$price_hashref->{'mackerel'}\n";

 以上のようにデータを格納する時に()を使うのか又は[]や{}を使うのか、個別の値を取り出す時に->を使うのか使わないのか、文法を完全に覚えきってしまえば混同する事は無いのですが、初学者がなんとなく文法を思い出しながらコードを書くと混同して間違った記述をしてしまうケースがあり、間違った記述のままコードを実行してしまうと想定していた結果が得られず余計に分からなくなってしまうといった事があります。

WEB+DB Press 連載 Hackers Hubに寄稿しました

 今回ご縁あって、Perl Hackers Hub第72回の記事を、Perl入学式運営スタッフの id:xtetsuji id:sironekotoro さんのお二人と共著で記事を書かせて頂きました。
記事は「初学者に伝えたいPerl学習の勘所」というタイトルで、これからプログラミングやPerlを始める人達に向けた内容となっています。

 私が書いた部分は、初学者向けプログラミング勉強会でのサポーター経験から得た初学者が悩む場面に対してのヒント、初学者が今後成長していく為のはじめの一歩についてアドバイス、といった内容になっています。書店に並ぶ発売日が4月23日ということもあり、この春新たに就職や転職した方、新入学された方も多い時期なので、これからプログラミングやPerlを始める方にお勧めな記事となっています。

 また、本号の特集記事はDBの基礎やコミュニケーションの為の英語など、個人的にも大変興味深い初心者向け?記事が掲載されているので、とても楽しみです。

 今回執筆にあたって、狭いようで広いターゲットに向けて分かりやすい文章を簡潔かつ正確に書くという貴重な経験をする事ができました。普段業務でも文章を書くことは少なくは無いのですが、相当程度に完成度を上げる為、一つの文章を何度も何度も推敲を重ねてブラッシュアップする作業まではしていないので、これが世に出す為の文章の推敲なのか!と、とても勉強になりました。

 記事内でも触れましたが、コミュニティ活動を続ける事で、想像もしなかったチャンスが巡ってくるのだなぁと感慨深いです。

 誌面スペース等、諸々の理由で伝えきれなかった文章は沢山あって、今後何処かの場所でカタチに出来ればよいなと思います。

 最後に、今回、多大なるアドバイスやサポートを頂いた編集の稲尾さん、レビューとアドバイスを頂いた牧さん、全体指揮をとっていただいた id:xtetsuji さん、レビュー等アドバイスを頂いた id:sironekotoro さん、何かと作業で諸々の負担を引き受けてもらった妻と色々我慢をしてくれた2人の娘に感謝します。

YAPC::Japan::Online2022スタッフとして参加しました

2022年3月4日、5日に開催されたオンラインテックカンファレンス、YAPC::Japan::Online2022の感想ブログ記事です。

ボランティアスタッフに参加したきっかけ

2022年3月4日、5日に開催されたオンラインテックカンファレンス、YAPC::Japan::Online2022でボランティアスタッフをやりました。

きっかけはこのツイートをTLで見つけて、何かお手伝いできることがあれば出来る範囲なら...という気持ちでお声をかけさせていただきました。

普段は Perl入学式 という初学者向けプログラミング勉強会の運営スタッフとして、アマチュアながらも活動しています。

YAPCのスタッフは2017年に開催されたYAPC::Kansai以来で2度目。前回はオフラインの物理イベント、今回はオンライン配信でのイベントでした。

手を挙げてみたのはよいものの、オンラインイベントで何が実際お手伝いできるのか全く想像もつかず、また、前回と異なって現在は未就学児2名の子育て中なので、家庭や育児など時間的制約が独身時代とはまるっきり違う事もあり不安一杯でした。

スタッフをしての経験

今回は、Day1の懇親会で行われたライブコーディング大会の企画と進行、Day2のトラックAでの司会を主に担当しました。

定例ミーティングではGoogle Meet、日常の業務連絡は Slack, タスク管理は Googleスプレッドシート, アイデア出しなどは Google Jamboardと、普段ほとんど使わないオンラインツールで運営業務は進められました。最初は使い方も分からず、他のスタッフが何処を見て話をしているかを必死に追いかけるのが精一杯でしたが、オンラインミーティングの回を重ねるにつれ徐々に使い方も分かってきました。

オンラインでのイベント運営業務を経験できたのは非常に勉強になりました。普段業務で使っている方にとってこれらのツールは使いこなせて当前ですが、IT業界の方でもオンラインでの仕事の進め方を経験したい!習得したい!等のモチベーションがある方は、運営スタッフに手を挙げてみると良いのではないでしょうか。(次回YAPCも必ず有るはずです!)

スタッフをして良かったこと

配信担当の手法や準備、当日の手際などもプロ級のスゴ技で、こういう放送・配信の裏側を見る機会はとても貴重でした。オンライン越しの横から見ていても感心するばかりの匠の技でした。

その他、ノベルティや懇親会食事の手配・配送やピザスポンサー等の物流関係も、オフラインカンファレンスでは無かった仕事でしたが、ゼロから組み立てて最終的には完璧に達成されていたのも凄かったです。

自分がした事よりも、色々な事を目の当たりにできた経験がとても有意義でした。今回は冒頭に書いた様な制約もあり、自分ができる範囲の事はかなり限定的であまり役に立ったとは言えないのですが、微力ながら裏方業はとてもやりがいが有る仕事でした。終わった後の達成感がやはり違います。

フォローなど

スタッフミーティングは必然的に平日の仕事終了後で、子供の世話を妻にワンオペ育児をお願いする必要があり、遅く帰宅する時はお土産を用意する、懇親会食事の試食は妻も一緒に食べる等、また、子供も触れ合う時間が少なくなり色々我慢している部分もあるので、本番終わってから家庭内プチ打ち上げをしたり、コミュニティ活動を続けていく為のフォローは欠かせません。

まとめ

大規模カンファレンスの運営スタッフ、普段仕事では経験できない事がたくさん学べるので、趣味としても実益としてもとても良い経験になりました。

スタッフをしてみたいけれど、仕事が忙しく...家庭があるし...等々、躊躇してしまう部分はありますが、色々実情に合わせてやってみれば、何とかなるでしょう。

YAPCはまだ続くとの事ですので、次回スタッフ募集のお知らせがあれば、あなたもチャレンジしてみませんか?

令和弐年振り返りと令和参年抱負など

気付いたら令和2年は終わっていた。残る休みも3日も切ってしまった。 去年は2人目の子供の出生〜育児で1月2月はほとんど記憶が無い。 下の子はミルクをあまり飲まなかった事、子供部屋が上の子と同じだったので、夜中に下の子が泣くと慌てて別の部屋へ連れて行って毛布にくるまっていたくらいしか覚えてない。 3月くらいになって少し夜泣きも落ち着いて外出出来るかな〜と思った矢先にコロナ禍。育休の後半はコロナ禍で外出も何も出来ないまま職場復帰を迎えた。 職場に戻れば仕事がとんでもない事になっていて、仕事と育児でなんやかんやバタバタとしていたらあっという間に12月で、結局何も出来なかった感じで終わってしまった。 まぁ、上の子は会話でコミュニケーションがとれるくらい喋る様になり、下の子はヨチヨチ歩きに離乳食も食べられる様になり、振り返るときちんと成長していて感心したり嬉しく思ったり。

令和2年はほとんど何も出来なかったので、令和3年は色々と自分の事もやっていきたい。

読書

  • 結局本は1年で数冊くらいしか読めてなかったのでは?
  • 小説、技術書の積読は消化したい。

プログラミング

  • GoとDocker,VueのUdemyを最後までやる。
  • Goをもうちょっとマスターしたい。去年は簡単なアプリをちょっとしか書けてないので、もうちょっと規模の大きいプログラムを書きたい。
  • もうちょっと色々出来たと実感できるくらい色々やっていきたい。
  • Perl入学式オンライン、もっとコミットしていきたい。

音楽

  • ヴァン・ヘイレンが亡くなったり、時代の移り変わりが顕著に感じた。
  • ノイキャンヘッドホン買ったおかげで、通勤でポッドキャスト聞いたり、音楽聞いたりはそこそこ出来た。
  • ドラム、ギターの楽器演奏は全く出来なかった。職場近くに音楽スタジオを見つけたので、少しずつ再開したい。
  • Jazzライブは結局1回しか行けなかった。家庭と家計と相談しながら、もう少し行けるかな?

映画

  • 遂にヱヴァンゲリヲン完結。これは劇場で見たい。
  • AWAKEも見たい。上映期間中に映画館に行けるのだろうか。

子供

  • 色々と出来る様に成長してきた。
  • 3歳くらいになると、印象深い出来事は一生の記憶として残ると思うので(自分経験談)、色々楽しい体験をさせてあげたい。
  • 遊園地、歌、ダンス、お絵かき、絵本が好きなので色々体験させたい。が、頑張りすぎると自分の時間ががががが、、、

年明けにお酒を飲みながら思いつくままに色々書いてみた。 まぁ、仕事はそこそこに子供、家族、自分に色々時間を使っていきたい。

vimrcの旅 ~その4~

DAY7

dein vimプラグイン追加

call dein#add('itchyny/lightline.vim')            "ステータスバー
call dein#add('scrooloose/nerdtree')              "ディレクトリツリー表示
call dein#add('fatih/vim-go')                     "Goフォーマッタ
call dein#add('sheerun/vim-polyglot')             "多言語シンタックス・インデント調整
call dein#add('nathanaelkane/vim-indent-guides')  "インデント可視化

"Vim起動時にNERDTreeを起動

autocmd vimenter * NERDTree

" vim立ち上げたときに、自動的にvim-indent-guidesをオンにする

let g:indent_guides_enable_on_vim_startup=1

" ガイドをスタートするインデントの量

let g:indent_guides_start_level=2

" 自動カラーを無効にする

let g:indent_guides_auto_colors=0

" 奇数インデントのカラー

autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd  guibg=#262626 ctermbg=gray

" 偶数インデントのカラー

autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=#3c3c3c ctermbg=darkgray

" ハイライト色の変化の幅

let g:indent_guides_color_change_percent=30

" ガイドの幅

let g:indent_guides_guide_size=1

DAY8

"ステータスラインの常時表示&表示内容

set laststatus=2

"### インデント設定

set autoindent          "改行時に前の行のインデントを計測
set smartindent         "改行時に入力された行の末尾に合わせて次の行のインデントを増減する 
set smarttab            "新しい行を作った時に高度な自動インデントを行う
set expandtab           "タブ入力を複数の空白に置き換える
set tabstop=4           "タブを含むファイルを開いた際, タブを何文字の空白に変換するか
if has("autocmd")
  "ファイルタイプの検索を有効にする
  filetype plugin on
  "ファイルタイプに合わせたインデントを利用
  filetype indent on
  "sw=softtabstop, sts=shiftwidth, ts=tabstop, et=expandtabの略
  autocmd FileType c           setlocal sw=4 sts=4 ts=4 et
  autocmd FileType html        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType ruby        setlocal sw=2 sts=2 ts=2 et
  autocmd FileType perl        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType js          setlocal sw=4 sts=4 ts=4 et
  autocmd FileType zsh         setlocal sw=4 sts=4 ts=4 et
  autocmd FileType python      setlocal sw=4 sts=4 ts=4 et
  autocmd FileType scala       setlocal sw=4 sts=4 ts=4 et
  autocmd FileType json        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType html        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType css         setlocal sw=4 sts=4 ts=4 et
  autocmd FileType scss        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType sass        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType javascript  setlocal sw=4 sts=4 ts=4 et
  autocmd FileType swift       setlocal sw=4 sts=4 ts=4 et
  autocmd FileType go          setlocal sw=4 sts=4 ts=4 et
endif

vimrcの旅 ~その3~

DAY5

"マウスの無効化(マウス操作でvisualモードにならない様にする)

set mouse-=a

"ダーク系<->ライト系カラースキーマ切替

set background=dark
"set background=light

"シンタックスハイライト

syntax on

"検索文字をハイライトする

set hls

DAY6

"ステータスラインの常時表示&表示内容

set laststatus=2

"Dein.vimを導入

"dein Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=/Users/tomcha/.cache/dein/repos/github.com/Shougo/dein.vim

" Required:
if dein#load_state('/Users/tomcha/.cache/dein')
  call dein#begin('/Users/tomcha/.cache/dein')

  " Let dein manage dein
  " Required:
  call dein#add('/Users/tomcha/.cache/dein/repos/github.com/Shougo/dein.vim')
  call dein#load_toml('~/.vim/plugins.toml', {'lazy': 0})
  " Add or remove your plugins here like this:
  "call dein#add('Shougo/neosnippet.vim')
  "call dein#add('Shougo/neosnippet-snippets')

  " Required:
  call dein#end()
  call dein#save_state()
endif

" Required:
filetype plugin indent on
syntax enable

" If you want to install not installed plugins on startup.
if dein#check_install()
  call dein#install()
endif

"End dein Scripts-------------------------

vimrcの旅 ~その2~

DAY3

"不可視文字を表示

set list
set listchars=tab:>-,extends:<,trail:-,eol:\

"行末行頭のカーソル移動で前後の行に移動できる様にする

set whichwrap=b,s,h,l,<,>,[,],~

"インサートモードでのカーソルキー形状変化(Macのみ)

let &t_SI = "\e]50;CursorShape=1\x7"
let &t_EI = "\e]50;CursorShape=0\x7"

DAY4

"文字コードUTF-8に指定

set encoding=utf-8

"タブを空白で入力する

set expandtab

"標準タブは4

set tabstop=4
set softtabstop=4

"行末まで移動できるようにする

set virtualedit=onemore