kstm Advent Calendar

はじめに

この記事は信州大学のものづくりサークル「kstm」の アドベントカレンダー1日目の投稿です。 qiita.com

TL;DR

  • プログラマの三大美徳
  • 繰り返し同じ流れでコマンドを打つのであればShellScriptを書きましょう。
  • 複雑なことをするならPerlを利用するのも手。
    • 大抵のLinux環境にはデフォルトでPerl5がインストールされている。

ご挨拶

この記事を書くために久しぶりに自分のはてなブログを見ました。 この一つ前の記事を見ると、昨年書いたAdventCalenderが目に付きます。 つまり、1年ぶりにブログを書くことになりますね。 昨年まではYAPCに参加することで定期的にブログを書く機会もあったのですが、 今年はコロナ禍で様々なイベントの中止。記事を書く機会が減ってしまいました。

...。言い訳ですね。ちゃんとアウトプットします。 アウトプットとすることで自分の頭の中を整理することができますし、 他の人からの意見もいただけますからね。

本題

このAdventCalenderでは、サークルのメンバーが主に技術的な内容を共有していきます。 はじめの人はできるだけハードルを下げて、次からの人にどんどん書いてもらうのがお仕事かなと思っています。

というわけで私の書く内容はさほど難しくなく、どちらかというと考え方に近い内容です。

プログラマの三大美徳

さて、私たち「kstm」はプログラマの集団であるといえます。もしくはこれからプログラマになろうとしています。 ですので、プログラマの三大美徳について知っておいて欲しいと思っています。 「プログラマの三大美徳」といえば、「怠惰」「短気」「傲慢」です。 つい最近書かれたプログラマの三大美徳についての記事を貼っておくのでぜひ読んでみて下さい。 (この記事を読んだからこの段落を書いたと言っても過言ではない。) blog.magnolia.tech

開発を楽にするために

プログラマの三大美徳ではコードを書く上での姿勢を示していました。 ですが、プログラマはあらゆるところで「怠惰」になるべきであると思います。 繰り返しの作業はできるだけ、行わない方が良いでしょう。 と言っても何からすれば良いか分かりません。まずは小さなことから始めます。

例えば、私は開発をする時、Dockerfileに開発環境を書いてコンテナで作業します。 新しくアプリケーションを入れたり、設定を変更する場合、

  1. Dockerfileに記述する。
  2. ImageをBuildする。
  3. Imageからコンテナを作成。
  4. コンテナに入る。

という手順を踏みます。しかしこのコマンドを毎回打つのは面倒臭いです。 そこで、このコマンドをshellscriptに書いて1コマンドで済むようにします。

#!/bin/bash

TAG=$1;
export tag=$TAG
docker build -t $TAG app/.
IMAGE=`docker images | perl -wnale '/$ENV{tag}/ and print $F[2]'`
docker run --rm -it $IMAGE /bin/bash

これで1 ~ 4のコマンドを1コマンドにすることができました。

  • shellscriptの中でperlワンライナーを使用していますが、多分使わなくてもできます。分からなかったのでできる方法を取りました。
  • 大抵のLinux環境にはデフォルトでPerl5がインストールされているので安心して使えます。

最後に

技術的な内容は薄い記事とはなってしまいましたが、プログラマとしてあまり言われないことであったり、指摘されにくいところかなと思います。 今後の開発に少しでも役に立てばと思います。

参考文献

blog.magnolia.tech

qiita.com

kstmアドベントカレンダー

この記事は信州大学のものづくりサークル「kstm」のアドベントカレンダー10日目の投稿です。 qiita.com

個人的に↑の文言で始まると、いろんなプラットフォームで書いていても統一感があっていいなと思っている。

はじめに

個人的に↑の文言で始まると、いろんなプラットフォームで書いていても統一感があっていいなと思っている。 2016年に始まったkstm Advent Calendar。 実はAdvent Calendarをkstm内でやろうと言い始めたのは私でした。 そろそろ、なぜサークルでAdvent Calendarをやろうとなったか、理由を知らないメンバーも出てきたころと思います。

そこで今回は、なぜ毎年サークルでAdvent Calendarを行っているのかという理由を書いていこうと思います。 技術的な話では無くなりますがご了承ください。

なぜ毎年サークルでAdvent Calendarを行っているのか

Advent Calendarを書いている理由は2つあります。

アウトプットする練習

普段からブログを書いている人は別ですが、つぶやき程度の短い文章では無く、 それなりにまとまった文章を書くことはあまりありません。 自分の意見を正しく発信するということはなかなかに難しく、書き慣れないと非常に苦戦します。 皆で自分の考えていることをアウトプットする練習をするというのが1つ目の理由になります。

技術共有

kstmというサークルの性質を簡単に言えば、「自分の好きなことをやって気が向いたメンバーとコンテストに出る」だと思います。 お互いに何をやっているのか分からないという状況は私が現役時代も多々ありました。 自分が何をしているのかを知ってもらい、他の人がどんなことをしているのかを知る良い機会だと思います。 また、自分のやっていることに対して意見や鉞をもらうのも良い勉強であると思います。 お互いの技術共有をするということが2つ目の理由になります。

さいごに

簡単ではありますが、以上2つがAdvent Calendarを書いている大きな理由になります。 (私が忘れているだけでもっとあったかも。) もちろん各々個人的な理由があってもいいと思います。 続けることが大切なのです。 今後のサークルの活躍を期待しています。

Perl6のCroを題材にDockerを勉強する(始めの一歩)

始めに

仕事でDockerを使うことになったのだが、何から勉強していいのか分からないし、 リファレンスやドキュメントを読んでいるだけではつまらない。

そういえば、先日Perl6のCroの入門をしている際にDockerfileを生成を生成していた。とりあえずこれを読んでみようと思った。

Dockerfile

  1. FROM croservices/cro-http:0.8.1
  2. RUN mkdir /app
  3. COPY . /app
  4. WORKDIR /app
  5. RUN zef install --deps-only . && perl6 -c -Ilib service.p6
  6. ENV HELLO_PORT="10000" HELLO_HOST="0.0.0.0"
  7. EXPOSE 10000
  8. CMD perl6 -Ilib service.p6

1. FROM croservices/cro-http:0.8.1

  • FROM: ベースイメージの指定
  • UbuntuMySQLなど
  • コロンの後ろにversionを指定できる

2. RUN mkdir /app

3. COPY . /app

  • COPY: ファイルやディレクトリをコンテナ内にコピーする
  • URLの指定不可、自動解凍もしない
    • ADD: 指定したファイル・ディレクトリをコンテナ内にコピーする URLの指定が可能、tarファイルは自動解凍する。

4. WORKDIR /app

5. RUN zef install --deps-only . && perl6 -c -Ilib service.p6

  • zef install --deps-only . : 要求されたディストリビュージョンの依存関係チェーンのみをインストール
  • perl6 -c -Ilib service.p6 : -cオプションでシンタックスをチェックする

6. ENV HELLO_PORT="10000" HELLO_HOST="0.0.0.0"

7. EXPOSE 10000

  • EXPOSE : 外部に公開するポートを指定する。

8. CMD perl6 -Ilib service.p6

  • CMD : Docker run時に実行されるコマンド

終わりに

  • -Ilibが不明
  • 調べる時間が半分くらいPerl6にとられた。
  • 興味のあることをするのがいいね。

新社会人になって ~プログラマーの三大美徳について振り返る~

はじめに

新社会人になりました。 今後プログラマとして仕事をしていく訳ですが、一度初心に返り「プログラマの三代美徳」を振り返ろうと思います。この記事は私の言葉で要約して書くので、「プログラマの三大美徳」について詳しく知りたい方はこちらをご覧ください。


三大美徳

三大美徳とはPerlの開発者「Larry Wall」の名言。 プログラマは次の三つがとても重要であると言っている。

怠惰

全体の労力を減らすために手間を惜しまない。 つまり、楽をするために頑張るということ。

短気

コンピュータが怠惰なときに感じる怒り。 つまり、今後起こりうる問題を想定したプログラムを書くこと。

傲慢

神罰が下るほどの過剰な自尊心。 つまり、自分のプログラムにケチを付けるのはナンセンスというくらい素晴らしいプログラムを書くこと。


まとめ

少し語弊があるかもしれませんが、「プログラマの三大美徳」はプログラマに必要な意識を示してます。 改めて振り返って見ると、美徳にはほど遠く、未熟だと感させられます。

YACP::Tokyo 2019に参加して

はじめに

こんにちは、です。

このブログはYAPC::Tokyo 2019に参加した感想を書きます。 技術的な内容は、発表者の方のスライドや他の方のブログを見てください。

前夜祭

LTソン。 自分より若いアナグラ君やcodehex君がTLしており自分も発表したいと思いました。 次回YAPCではLTをしたいと思いました。まだ話せる内容は無いけど...。 面白いLTを聞くと自分のモチベーションが上がりますね。

YAPC Tokyo 2019 本編

午前 Talk

  • 型にはまらない型の話 (20min) Dan Kogai
  • Perl 6 でのアプリケーション開発と実用 (20min) risou
  • YAPC座談会 (40min)

ランチ

今回学生支援をしてくださった企業の方々との食事会。 学生の人数が多いなと思いました。 自分と同年代の人が多いとうれしく感じますね。

午後 Talk

  • Perl5の静的解析入門 機械と人間双方の歩み寄りによる平和編 (40min) macopy
  • PerlプログラムでPerlプログラムを修正する方法 (20min) Kang-min Liu
  • レガシーPerlビルド 〜現代に蘇るPerl[1..5].0とPerl6〜 (20min) 八雲アナグラ
  • ログにやさしいDB設計 (20min) fist0
  • CPAN Module Hacks (20min) akiym
  • ISUCON8予選問題作成の裏側 (20min) karupanerura
  • 多くのCPAN Authorに育てられ、息をするようにCPANモジュールを書けるようになり、そして分かったこと (20min) Songmu

大変面白い内容ばかりでとても勉強になるTalkばかりでした。 しかし、自分の理解できない内容も多々あり実力不足を痛感しました。

懇親会

おいしい料理と飲み物を頂きました。 登壇者の方や、以前YAPCで知り合った方、Twitterで繋がった方々とお話しさせて頂きました。 懇親会で「次回YAPCは京都」という声を聞いたので楽しみにしています。

最後に

LTやTalkを聞いてなんとなく内容は理解できるが、知らない技術や知らない単語がたくさんありました。 他の聴講者のように「あー」と共感できるようになりたいと思いました。 どんな内容なのか雰囲気でさっすることはできましたが、しっかり理解できていた訳では無いので、これから精進していきたいと思います。

今回のカンファレンスへの参加で何人もの人と繋がることができました。 コミュニティが広がると自分の視野も広がり、自分のモチベーションが上がります。

無事修了することができれば4月から社会人です。 社会人になってからもYAPCに参加したり、コミュニティの活動をしていきたいと思いました。

最後に、YAPCスタッフの皆様、参加者の皆様ありがとうございました。

PerlでSlackBot

はじめに

この記事は,kstm Advent Calendar 12日目の記事として書かれました.

qiita.com

目次

  1. PerlでSlackの会話Botを作る?
  2. Slack tokenを得る
  3. Slack::RTM::Bot モジュール
  4. 最後に
  5. 参考

PerlでSlackの会話Botを作る?

私の研究の関係でSlackの会話Botを作ることになりました. 研究で使っているツールは主にPythonやJSで作っているのですが,そのためにPerlをここ最近書けていませんでした. そこで,Slack BotPerlで作ろうと思い行動してしまった次第です.

Slack tokenを得る

SlackでBotを作るにあたって,Tokenが必要になります. Slackには2つのTokenがあり,一つは現在Slackが推奨している権限を細かく決めることができる物で,もう一つはほぼ全ての機能が使えてしまうLegacy番があります.SlackのLegacy Tokenのページの冒頭には非推奨であるこことが掲示されています.

推奨

基本的には*1と同じ内容になります.

  1. https://api.slack.com/apps
  2. Create New App
  3. Development Slack Team
  4. Create App

重要なのはスコープの設定です. 左側のリストの中から,Features > OAuth & Permissionsに飛び, Scopesの項目のSelect Permission Scopesから必要な権限を選びます.

今回必要になる権限は2つ.

  1. Access user's public channels.
  2. Add a bot user with the username @bot_name

これらを追加してSave Changesを押します.

最後にInstall App to Team > Authorizeに進み,tokenを取得します.

Slackの画面のAppの欄に今作ったBotが増えているので,Botを利用したいチャンネルにこのBotを参加させます.

非推奨 レガシー番

非推奨なので割愛. こちらをご覧ください.

Slack::RTM::Bot モジュール

今回使うモジュールはSlack::RTM::Bot

use strict;
use warnings;
use Slack::RTM::Bot;
use Data::Dumper;
use utf8;

my $bot = Slack::RTM::Bot->new(
    token => 'API Token'
);

$bot->on(
    {
        channel => 'random',
        text => qr/.*/
    },
    sub {
        my ($res) = @_;
        print Dumper $res;
        
        if($res->{text} eq 'Hello') {
            $bot->say(
                channel => 'random',
                text => 'World.'
            );
        } else {
            $bot->say(
                channel => 'random',
                text => 'Slack.'
            );
        }
    }
);

$bot->start_RTM;
sleep 60;
$bot->stop_RTM;
exit;

$bot->on();でどのチャンネルのどんなtextに反応するかを決めます.

$bot->say();でどのチャンネルにどんなtextを書き込むかを決めます.

$bot->start_RTM;でBotを起動するのですが,このプログラムが起動している間, Slackとコネクションが繋がり,Botが動きます. ずっと動かすならば,

while(1) {sleep 60;}

などにしておくといいでしょう.

今回はrandomチャンネルにHelloと書かれるとWorldと返し, それ以外の場合はSlackと返すようになっています.

$bot->on();のtext=>''の部分で条件を付けるのですが,今回はif文で条件を分岐しています.

最後に

YAPC::Tokyoに参加します. yapcjapan.org

kstm Advent Calendar 1日目の記事に「学会にいこう」 と言う記事があります. 学会もカンファレンスも自分の知見を広め深める場です.selee氏の記事の通り学生特権があるので,早いうちから参加するといいと思います.

明日はugwis氏の「6桁の数字を読み取る」です.

参考

  1. Slack API 推奨Tokenについて
  2. Slack APIのTokenの取得・場所
  3. perlで簡単にSlack Botを作るモジュールを公開した
  4. PerlでSlackの雑談Bot作ってみた

サークル新入生向けプログラミング練習サイト集

新年度になり、我がサークルにも新入部員が来ました。
例年に比べ、新入部員の数がとても多く何度も同じ説明をするのは私の精神衛生上あまりよろしくないので、先手を打つことにしました。

今回は競プロとCTFの問題サイト集です。

Capture The Flag

CpawCTF - Main page

ksnctf

akictf


おまけ ~ カンファレンス~

yapcjapan.org