MPがありません。

$liiu->mp == 0

@INCフックの挙動

Perl5.38のアップデート内容を調べているときに@INCフックの挙動に詳しくついて調べたのでアウトプットする。 requireのドキュメントに記述されていること読みながらを試していった内容をまとめた。 @INCフック とは Perlでuseやrequireなどでモジュールをロ…

YAPC::Kyoto 2023 参加記

3/18, 3/19 に開催されていた YAPC::Kyoto 2023 に参加してきたのでその振り返りや感想を書いていきます。 yapcjapan.org 今回はカンファレンスがどのように運営されているのかを勉強したかったのと、知り合いを増やしたかったことからボランティアスタッフ…

Perl で immutable なデータ構造を作る

この記事はPerl Advent Calendar 202113日目の記事です。 2時間ほど遅刻して申し訳ございません・・・ この記事では Perlで Internals::SvREADONLY を利用しimmutableなデータ構造を作る方法について書きます。 検証は perl5.34.0 で行っています。 immutabl…

Perl で簡単に総称型を作れるユーティリティを作った

Perl で総称型を作ろうとすると Type::Tiny にいろんなオプションを渡さなければいけなくて結構面倒だったりします。 例えば、型引数を与えたときにその型引数の制約を満たす値のみを入れられる Queue の型を作る総称型を作ろうとすると、次のようになります…

Japan.pm 2021 に参加 & トークしてきました

2/18, 19 に行われていたJapan.pm 2021に参加し、「Perl でも関数の型をチェックしたい」というタイトルでトークをしてきました。 トークの資料はこちらです。 speakerdeck.com 内容を簡単にまとめると、Perlで無名関数に型をつける手段がなかったので自分で…

自作attributeを1から実装する方法を考えてみる

この記事は Perl Advent Calendar 2020 5日目の記事です。 はじめに Perlには attribute という、サブルーチンもしくは変数に複数の属性を設定できる機能があり、属性に応じて属性が設定された変数もしくはサブルーチンを利用した処理をさせることが可能です…

ISUCON10予選に参加してきました

isucon10予選に会社の同期とひとはというチームで参加しました。 最終的にスコアは 1479 で、順位は68位くらいだったようです。 事前準備 New Relic が無料で使えるので使いたいよね、という話をしていて事前にチームで集まってNew Relicを触っていたりしま…

sshで接続しようとすると Bad configuration option: proxyjump というエラーがでる場合の対処方法

そこそこ時間を溶かしたのでメモ. この前古めのPCからssh config をいじってssh接続しようとしたら Bad configuration option: proxyjump というエラーがでました。 OpenSSHで Proxyjump の設定をサポートしたのは7.3からなので、古いOpenSSHがインストール…

Perl5.32の新機能

6/22にリリースされたPerlの最新安定バージョン5.32では久しぶりにいろいろ新機能が追加されてたので、perldeltaを読みつつ試してみました。 内容は7/1にあったPerl若手の会で発表したこととほぼ同じで、そこで聞いたことを追記したりしてます。 isa 演算子 …

なるべく確実にメールを送信する処理を書くには

メール送信処理は単純にコードを書くだけではダメっぽいのでどうすればいいのかという話 メールが送信に失敗する状況 何らかのエラーによって送信したメールが送信者に差し戻されることをバウンスという。 バウンスにはソフト / ハードの2種類がある。 ハー…

WEB+DB Press Vol.115 の Perl Hackers Hub に寄稿しました

2/22 に発売される WEB+DB Press Vol.115 の Perl Hackers Hub に「動的なモジュールロードとの付き合い方」というタイトルで寄稿させていただきました。 恐れ多くも商業誌デビューとなります。 WEB+DB PRESS Vol.115作者:高橋 直大,佐藤 敦也,岡村 健太,三…

Types::TypedCodeRef というモジュールを作りました

概要 Types::TypedCodeRef はPerlで「関数の型」をチェックする型を提供するようなモジュールです。 調べた感じ匿名サブルーチンにいい感じに引数の型とサブルーチンの返り値の型をつけてくれるようなモジュールもなさそうだったので、 AnonSub::Typed とい…

MySQLの INFORMATION_SCHEMA.COLUMNS CHARACTER_MAXIMUM_LENGTH で得られる値についての調査

概要 諸事情によりMySQLのテーブルの文字列型カラムに入る最大値を取得したい欲求が発生し、 INFORMATION_SCHEMA データベースの COLUMNS テーブルの CHARACTER_MAXIMUM_LENGTH*1 を利用することになったので、 CHARACTER_MAXIMUM_LENGTH を参照した時、それ…

Types::Standard で利用できる、知っておくと便利な型

概要 Perlで型チェックを行うモジュールに Type::Tiny というものがあります。 Type::Tiny には Types::Standard というライブラリがついてきて、いろいろな型が利用可能になるわけですが、 これはその Types::Standard で利用可能な、個人的に知っていると…

Perlにおける動的なモジュールロードのメリットとデメリットについて

概要 Perlにおける動的なモジュールロードのメリットとデメリットについて、そしてどういう場合に動的なモジュールロードを行うといいか、僕が考えていることを記します 例のコードや具体例の説明などはPerlの文脈で行っていますが、動的なモジュールロード…

VimでPerlを書くときにctagsを導入して使ってみた

コードジャンプを利用したい場合にctagsを導入するという方法がありますが、最近VimでPerlを書くときに導入してみたところ、非常に良い感じだったので、インストール方法と簡単な使い方を記しておきます。 インストールするものについて ctagsの実装(?)には…

Function::Parameters + Mouse::Util::TypeConstraints = パフォーマンス激強

概要 Perlのサブルーチンの引数バリデーションをするモジュールはいろいろありますが、 Function::Parameters が他の引数のバリデーションを行うモジュールと比べて高速にバリデーションできるという話を聞いて、であれば Mouse::Util::TypeConstraints と組…

ドメイン駆動設計の実践 勉強会メモ

DDD

8/22に開催された【TECH x GAME COLLEGE #1】ドメイン駆動設計の実践 - connpassに参加した時のメモです。 とても勉強になる面白い話を聞かせていただきました。 アジェンダ DDDの基礎知識 ゲーム開発への活用の可能性 ゲーム開発に取り入れる時の障害 DDDの…

ソースコードからビルドしたPerlをplenvで管理する

独自にコンパイルされたperlや自分で少しソースコードをいじったperlもplenvで管理したいなーと思ったのでやってみました。 基本的にrbenvなどと同じようにできるようです。 手順 1. Perlのソースコードを入手する perl - The Perl 5 language interpreter -…

UNIVERSAL::DOESについてのメモ

Perlのオブジェクトに $object->DOES('SomeRole') みたいな、ロールを消費したかどうかを判定できる(?)メソッドがあるのですが、それについていろいろ知見を得たのでまとめます。 Perl自体にロールを消費したかどうかを判定する機能はない 特にDOESがオーバ…

YAPC::Okinawaにいってきました

けっこう遅くなりましたが、3/3〜3/5の間YAPC::Okinawa 2018 ONNASONに参加するため沖縄に行っていたのでその感想を書きます。 前後に予定が入っていたり、沖縄に行くのはなかなかしんどいのであまり参加に乗り気でなかったのですが、学生は宿泊代と交通費を…

DBIx::Schema::DSLで外部キー制約を定義するときにトリガを指定する方法

こんな感じででできます foreign_key user_id => ( user => 'id', on_delete => 'CASCADE', ): ドキュメントでは foreign_key($columns :(Str|ArrayRef), $foreign_table :Str, $foreign_columns :(Str|ArrayRef) ) という風に明記されていませんが、追加の…

Rustをやってみた

この記事は OIT Advent Calendar 16日目の記事です。 予定変更してだいたい2ヵ月くらい前から卒研の合間に少しずつRustを勉強し始めているのでその感想を書こうかと思います。 まだそんなにがっつり使いこんでいないので参考程度に見てください。 Rustってど…

Plack::Middleware::Session まとめ

Plack::Middleware::Session と関連することについてのまとめ、ほぼ個人的なメモ 簡単にまとめるつもりだったけど詳しく書くとかなり長くなりそうな気がしてきた... 使い方 use Plack::Builder; builder { enable Session => ( state => Plack::Session::Sta…

モダーンなPerlの書き方

この記事は OIT Advent Calendar 2016 - Adventar 8日目の記事です。 軽く自己紹介 冷雨 (@_ybrliiu) | Twitter IN科3年 Perl大好きなことで有名かもしれません。 それより遅刻が多いことで有名ですね 十国志NETっていうオンラインシュミレーションゲームを…

Exception::Tinyを継承したクラスで例外を搬送する時、スタックバックトレースを表示させるにはどうしたらいいのか

Perlでスタックバックトレースを伴った例外を発生させるにはCarp::confessを使えばいいわけですが、 下のコードのようにException::Tinyを継承したクラスで例外を発生させる時にconfessを使ってもスタックバックトレースが表示されません。 package MyApp::E…

PerlからYoutube Data APIを利用して動画を検索する

PerlからYoutubeの動画検索しようとした時のメモ、Youtube Data APIの利用の仕方というよりはWeb APIの使い方って感じですが。 準備 Youtube Data API v3はGoogleのアカウントを持っている上で認証しないと使用できないようなので、ドキュメントを参考に準備…

Ubuntu14.04にncursesをインストール

C

ncursesのインストール $ sudo apt-get install libncurses5-dev ncurseswのインストール(ncursesのUTF-8対応版らしい?) $ sudo apt-get install libncursesw5-dev