学生最後の日という何か

明日から社会人になるてことで、最後までいつも通り学生らしいグダグダな一日を過ごしたことを、ここに記録する。

三項演算子と関数の罠 "Use of ?PATTERN? without explicit operator is deprecated"

$ # re.plで実行 $ sub FOO { 'FOO' } $ my $foo = FOO FOO $ $foo eq FOO ? 'foo' : 'bar' # NG Use of ?PATTERN? without explicit operator is deprecated at (eval 410) line 8. Compile error: Search pattern not terminated or ternary operator pars…

perlsubクイズ

対象は自分です。 問題1 use strict; use warnings; use feature 'say'; # ↑以降省略 say do { my $a = 100; sub { $_[0] *= $_[0] }->($a); $a; }; 問題2 say do { my @a = (1..10); sub { $_[0] *= $_[0] }->(@a); $a[0]; }; 答え合わせ 問題1 A. 10000 理…

Exporterなベースクラスのuse parent

Exporterを適用したクラスをuse parentで継承した際に、子クラスで@EXPORT*な関数を裸で参照する方法です。 # Base.pm package Base; use strict; use warnings; use parent qw(Exporter); our @EXPORT = qw(foo); sub new { bless +{}, shift } sub foo { p…

FormValidator::Liteのメモ

FormValidator::Lite - search.cpan.org FormValidator::Simpleとは違いcheckの戻り値は$validatorインスタンス自身。 load_function_messageで楽する場合、set_param_messageでパラメータに対する文字列をセットしておかないとget_error_messagesでポシャる…

CPANメモ

黙ってcpanm使うべし。 プロジェクトローカルでモジュールをインストールしたい場合はcpanfileを作ってcarton install GemfileとBundlerの関係と同じ アップデートが必要なモジュール一覧はcpan-outdated(App::cpanoutdated)コマンドで インストール済みの…

Perlにおけるメタプログラミングのための基礎知識

例のごとくAmon2の実装を眺めていた所、Amon2::Web::Dispatcher::RouterBoomの解読で手が止まりました。使い方さえ分かれば無理に読む必要は無いわけですが、どうにも気になってしょうがないので仕組みを調べることにしました。コードの雰囲気からしてメタプ…

PSGI/Plackオレオレ入門

ここ数日、Amon2を解読していたのですが、結局PSGI/Plackをちゃんと理解してないと話にならないことが分かったので、PSGI/Plackを一から勉強してみました。ということでその記録です。 PSGI/Plackについて PythonにおけるWSGI、RubyにおけるRack、それに相当…

PerlにおけるRubyライクなブロックにまつわる、関数のプロトタイプについてのまとめ。

Amon2のbasic flavorな自動出力を眺めていたら、"script/myapp-server"*1にこんなソースが有りました。 my $app = builder { enable 'Plack::Middleware::Static', path => qr{^(?:/static/)}, root => File::Spec->catdir(dirname(__FILE__), '..'); enable…

Webセキュリティメモ

何となく、自分の理解をまとめておきたくなったので、徒然と書き連ねます。 セッションとCookie 誰からのアクセスなのかを判別するためには何らかの識別子(ID)が必要である。それがセッションID。 クライアントは、自分が誰であるのかを証明するために、通…

FontAwesome4.x with reveal.js

公式のトラブルシューティングに書いてありましたが無駄にハマったのでメモ。 According to your Font Awesome version, please add to your stylesheets: /* FA 4.0.0 and newer */ .reveal .fa { font-family: 'FontAwesome'; } /* FA 3.2.1 and older */ …

グローバルのtoString

JavaScriptでString型か判定する方法って色々あるけどどうするのがベストなんだっけなー、Underscore.jsでも参考にするかー、と思って調べてみたところ、こんな実装がされていました。 // eachは_.eachと同じ each(['Arguments', 'Function', 'String', 'Num…

Easing関数についてのメモ

// 一般的なスタイル function linear(t, b, c, d) { return c * t / d + b; } // jQueryスタイル function linear(x, t, b, c, d) { return x; } // x = t / d, b = 0, c = 1 なので x == t/d == c * t / d + b // つまり上も下もやっていることは同じ。 x:…

Rakefileの勘所

あー、毎回watchコマンドとかbuildコマンドとかを打ち込むのはやだなー、ビルドスクリプト書きたいなー、Makefileで十分かCakefileにするかRakefileにするか、よっしゃRakefileにしよう、あれーどういうふうに書けばいいんだっけかなーと、プロジェクトを作…

iOSアプリをリリースしてみた

iOS

といっても現在レビュー待ちですが。 無事、修論が終わったので、ちょっと真面目にアプリを作ってみました次第です。フラッシュ演算アプリでSpriteKitとStoryboardを組み合わせて作ってみました。当初は、アプリで儲けるならマルチプラットフォームがいいと…

Ruby環境構築メモ

最新のcocoapods(0.29.0)はRuby2.xじゃないとダメっぽいとのことで、ついでにRubyの環境を整理したのでメモしておきます*1。 rbenv導入 インストールは既にしてあったのですが放置していたので使うことにしました。brewでインストールしていたrubyは一掃。 $…

label要素のfor属性のためだけにid入れたくない

ただの愚痴でしかないのですが、言いたいことはタイトルが全てです。label要素を適切に使う場合、label要素のfor属性に関連づけたいフォーム部品(input要素とか)のidを入れるか、label内に部品を書くのが基本となります。問題なのは前者の方法のidを入れな…

CoffeeScriptで/*@cc_on@*/

条件付きコメントを使えばいいという話でもありますが、ここでは、ちょっとした時に便利なJavaScriptのIE限定条件付きコンパイル/*@cc_on .. @*/をCoffeeScriptで使う方法を検討してみます。といっても大層な話ではなくEmbedded JavaScriptを使うだけです*1…

はてなブログおみくじ2014

はてなブログおみくじ2014一応、あけましておめでとうございます、ということで。

イマドキのPython in 2013

この投稿は QiitaのPython Advent Calendar 2013 の22日目の記事です。 はじめに 本記事は自分がPyPIに公開できるPythonモジュールを書くために行った調査結果をまとめたものです。が、私自身は未だかつて一度もPyPIにパッケージ*1を登録したことがないこと…

three.jsでglFrustum

three.jsでは、射影行列(ProjectionMatrix)がTHREE.Cameraとして抽象化されており、透視投影であるTHREE.PerspectiveCameraと、平行投影であるTHREE.OrthographicCameraの2つが標準で用意されています。一方、OpenGL*1には透視投影の射影行列APIとしてglFr…

THREE.TextureのneedsUpdate

ローダを使わずに自力でテクスチャを生成する時は、needsUpdateをtrueにすることを忘れずに。 texture = new THREE.Texture(img); // img要素 or canvas要素 texture.needsUpdate = true; 内部的にどうなっているかというと、最終的にrenderer.setTextureが…

three.jsにおける2D描画方法

Webブラウザ向けの3DCGライブラリであるthree.jsで、3D描画に2D描画*1を織り交ぜる方法を紹介します。これにより、前景と背景に自由に2D画像を描画できるようになり、ゲームのHUD表示などが可能になります。 基本的な考え方 three.jsに限った話ではありませ…

CherryPyとws4pyによるWebSocketチュートリアル

この記事は QiitaのPython Advent Calendar 2013 の7日目です。 はじめに 簡単に自己紹介をすると、筆者はOSやHCIを研究しているふりをしている、しがない院生です。現在、修士論文に向けPython+OpenCVでARシステムを構築しています。来年からWeb系エンジニ…

Advent Calendarサイト一覧

そろそろAdventCalendarなるものに参加してみようかなぁと思っていたところで、こんな記事を見つけたので、丸パクですがサイトリストをメモ。 Adventar Advent Calendar - Qiita [キータ] イベント開催支援ツール アテンド : ATND PARTAKE connpass - 人が集…

Pythonのwith構文で例外を補足する実例

以前こういう記事を書きました。 Pythonのwithステートメントのまとめ - $ cat /var/log/shin withを出る時に呼ばれる__exit__メソッドでは、引数として内部で生じた例外を受け取る事ができることを一応記載しているのですが、どういうシチュエーションでこ…

argparseの勘所(Python2.7〜)

今までコマンドライン引数を処理するのにoptparseを使ってきたのですが、optparseは2.7以降は非推奨というか上位互換のargparseを使いましょうねというお達し(PEP389)が出ています。そんなわけで今書いているプログラムに関して移行作業を行いました。argp…

Pythonのos.path

パス文字列の操作で便利なos.pathモジュールのよく使うものメモ。必要に応じて追記します。ドキュメント:10.1. os.path — 共通のパス名操作 — Python 2.7ja1 documentation ディレクトリ名取得 os.path.dirname >>> os.path.dirname("../foo/bar/hoge/piyo.…

テンプレートとかイテレータとかファンクタとか

ARシステム作ったりしたからそれに関する記事書いてくぜと言うだけ言って一向に実行する気配がありませんが、今後もないわけですが(オイ)、PC上でもiOS上でも動くようにしたいなぁという要求から、システムのコアな部分はC++で書くべきなのかなという結論に至…

Objective-Cのブロック(Blocks)に関するメモ

関数が第一級じゃない言語とかやってらんないわー、これだから静的言語は云々、というLL厨に対抗してか、最近は静的な言語でも第一級関数を取り入れようとあの手この手でグロい構文を導入してきています。Objective-Cもその例に違わずブロック(Blocks)という…