読者です 読者をやめる 読者になる 読者になる

Mojolicious 4.42 に Form Validation が(試験的に)実装されたようなので使ってみた

ドキュメントはこちら

試験的ということなのでインターフェースが変わってしまうかもしれませんね。

M::P::TagHelpers側である程度よしなにしてくれるのはお手軽でいいですね。

Mojolicious::Validator と Mojolicious::Validator::Validation の関係がいまいちわかりづらい感じがする...

Scala入学式でScalaについて学んできました。あとだれかGo教えて。

ひさしぶりのブログです。

先日長岡市で行われた第33回勉強会 Scala入学式に行ってきました。

「ScalaってJavaVMで動く関数型っぽい言語」という程度の認識です。そもそもJavaなんてJDK5の知識が少々ある程度なのです。

Java書いてた頃のことは個人的に思い出したくもないのですが、流行り(?)の言語なので、さわりだけでも学んでみようと思い参加した次第です。

入学試験

事前準備としてScalaとIntelliJ IDEA、SBTのインストールを行いました。

IDEなんて使うの数年ぶりなので、プラグインのインストール、設定などは「これ何やってんの??」状態でした。

個人的にはIDEありきの開発はあまり好きではないのですが、コード補完はやはり便利です。時としてこだわりは捨てたほうが良いですね。

ちなみにVimmerな方はこちらで紹介されているIdeaVimマジオススメ。

「Better Java としての Scala」

"Hello World" からはじまり、クラス、継承、traitをひと通り。

素のJava書くよりすっきりしてて良いですね。

サクサクとtraitを追加して型チェックできるのはとても参考になった。

写経しながらGo言語で同じの書こうとしたけどスッキリ書けなくてやめてしまった

Go言語でオブジェクト指向的に書こうとするとなかなかキビシイものがあるような気がするけど趣味の範囲でしかさわってないので経験不足なだけだと。とくにinterfaceまわりの理解が怪しい。精進せな。

「もっとScala!」

リスト、パターンマッチ、Option型などもりだくさん。

正直パターンマッチ以後なんとなく理解...できたかなぁ。

Futureモナドのところで「Goではチャネルを返して云々...」などと脳内でゴニョゴニョやってるから理解できんのだよ。

「NullPoGaBot」

ここまで出来るとは思いませんでした。

ScalaはJavaの資産をそのまま使えるのでTwitter4Jを使ってサクっとbotを実装。このへんはありがたいんだろうな。

写経でいっぱいいっぱいだったけど、コード見返して復習しよう。

LT

LTでは東京勢の面白さに圧倒されましたw

電流とかTGS 2013 in 長岡とかw

懇親会

有名人なmoznionくんとお話できてとても嬉しかったです。Perlについてゆっくりと話を聞きたかったけど、ピーエイチピーについて熱く語っていたようなのでそっとしておいたw

オッサンには刺激の強い子だった。(すごく良い意味で)

dictavさんとはgolangの話で盛り上がったので、いずれ何かしらやるかもしれません。(じじ(じ)?回にGo言語勉強会やるかも)

というわけで

ボスがScalaの人になって帰ってきたけどNiigata.pmのことも気にしているようですし、近く西区飲みでそのあたりを詰めていければと考えています。

あとモンハンしながらGo言語教えてくれる人募集中です(いない)

Vagrant 1.1+ でスナップショット

Vagrantでスナップショットと言えばsahara1.1+対応版)が大人気のようですが、1.1+で同等の機能が欲しいのであればvagrant-vbox-snapshotがいいんじゃないでしょうか。

サクッとインストールできますしね。

$ vagrant plugin install vagrant-vbox-snapshot

使い方はこんな感じ。

$ vagrant up

$ vagrant snapshot take init # initという名前でスナップショットを作成

なんか作業とかする

$ vagrant snapshot back # 最新のスナップショットにロールバック

なんか作業とかする

$ vagrant snapshot take fix # fixという名前でスナップショットを作成

なんか作業とかするも気に入らない

$ vagrant snapshot go init # initスナップショットに戻る

...そして作業は続く...

ラベルを指定してスナップショット作成、ロールバックできるのは便利ですね。

sahara対応したようですし、shanaraつかったほうが情報多くて良いかと

sudo sudo #{cmd} で失敗

確かにsudoersにrootがなかった。

こんな環境はじめて。

Millaで特定のOSのみサポートするモジュールを作る

Dist::Millaで特定のOSのみ(or 以外を)サポートするようなモジュールをつくりたいときはDist::Zilla::Plugin::AssertOSを使ってdist.iniをこんな感じに定義します。

[@Milla]

[AssertOS]
; MSWin32 or CygwinをNGとする
os = -MicrosoftWindows

[Prereqs / ConfigureRequires]
; configure_requiresに追加するためのおまじない
Devel::AssertOS = 0

[MetaNoIndex]
; Dist::Zilla::Plugin::AssertOSでno_indexが上書きされるので再定義
directory = t
directory = xt
directory = inc
directory = share
directory = eg
directory = examples

で、Dist::Zilla::Plugin::AssertOSをインストールします。(既にインストールされている場合は不要です)

$ milla authordeps | cpanm

上記dist.iniでこんな感じのBuild.PLが生成されます。

use lib 'inc';
use Devel::AssertOS qw[-MicrosoftWindows];
use 5.008005;
use Module::Build::Tiny 0.019;
Build_PL();

お手軽ですね。

Net::IPMessenger::Bot とかいうのを作ってみたり

こちらの記事を読んで「IRCいいなー。ウチIPMessengerだしなー」とボヤいていたところ、ボス@Niigata.pmが「IPMessengerBot需要あるかも」とつぶやいていたので、こんなの作ってみました。

Net::IPMessenger::Bot - IPMessenger-Bot building framework - metacpan.org

使い方はこんな感じ。

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Net::IPMessenger::Bot;
use Sys::Hostname ();

my $bot = Net::IPMessenger::Bot->new(
    configure => {
        NickName  => 'hayashi_bot',
        GroupName => 'bot',
        UserName  => 'hayashi_bot',
        HostName  => Sys::Hostname::hostname(),
    },  
    on_message => [
        qr/いつやるの?/ => sub { "いまでしょ" },  
    ],  
);

$bot->start;

その後ボスが「ないかも」とつぶやいていたとおり、あまり使い道がナイデスネ。
broadcastで送信してウザがられればいいですかね?

正直情報共有ツールとしてのIPMessengerはもうやめにしたいんですけどね...なんだかなぁ...

ひとまず社内に仕込んだイカちゃんbotは今日も元気です。はい。

Mojolicious::Plugin::Web::Auth 0.03 をリリースしました

Mojolicious::Plugin::Web::Auth - Authentication plugin for Mojolicious - metacpan.org

特に新しいことはないのですが...

OAuth 1.0(A) も自前で...と思いましたが挫折しました(;^ν^)

あとこちらも修正しておきました。

興味のある方はお試しください。