2012/10/13

ExtUtils::MakeMakerとPerlのversion

追記 2012-10-17
BUILD_REQUIRESを実装した方(chornyさん)から6.55_03以降が望ましいとコメントをいただきましたので,修正しました.ありがとうございます!
後方互換を気にするなら,App::EUMM::Upgradeを使うといいかもしれません


ExtUtils::MakeMakerで*REQUIERSがいつからサポートされているのか調べたのでメモ
perl-5.10.1以降であれば安心してCONFIGURE_REQUIRES,BUILD_REQUIRESが使えるようで一安心

perl       EUMM
v5.8.0     6.03
           6.06_03  META.yml
v5.8.9     6.48

v5.9.0     6.17
v5.9.5     6.36

v5.10.0    6.42
           6.45_01  META_MERGE
           6.51_03  CONFIGURE_REQUIRES
v5.10.1    6.55_02

v5.11.0    6.55_02
           6.55_03  BUILD_REQUIRES (Recommended version. See comments below.)
v5.11.3    6.56
v5.11.5    6.56

v5.12.0    6.56
v5.12.4    6.56

v5.13.0    6.5601
v5.13.5    6.57_05   MYMETA.yml
v5.13.11   6.57_05

v5.14.0    6.57_05
v5.14.2    6.57_05

v5.15.0    6.57_05
v5.15.1    6.58      META.json, MYMETA.json
v5.15.9    6.63_02

v5.16.0    6.63_02
v5.16.1    6.63_02

v5.17.0    6.63_02
v5.17.4    6.63_02

2012/10/04

Apache2::Data::Section::Simple - Data::Section::Simple for ModPerl::Registry

THIS MODULE IS BETA. YOU SHOULD NOT USE

動機

ModPerl::Registryでは__DATA__を読み込むことができないのは周知の事実かと思います.
なんかよくわかりませんが,twitterのtimelineで__DATA__を読むことができないかと盛り上がってる感じがしたので,チャレンジしてみました.

HOW TO USE

Data::Section::Simpleと同じです

URL

p5-apache2-data-section-simple

動作環境

動作確認をしたのは以下の環境です

  • FreeBSD 8.1-RELEASE
  • Apache/2.2.17 (FreeBSD)
  • mod_perl2.0.5
  • perl v5.10.1

2012/09/30

YAPC::Asia Tokyo 2012 参加記録 #yapcasia

前夜祭も含め三日間参加してきました.ブログをかくまでがYAPC::Asiaということで,感想を綴っておこうと思います.

はじめに

今年も私が所属する株式会社アイダックに企業スポンサーになって頂きました.ありがとうございます.

また運営スタッフの皆さま,ありがとうございます.スタッフの方々のおかけで楽しい時間を過ごせました.

Perl Mongers

各地のPerl Mongersに会うことができる数少ない機会でしたので,普段お世話になっている方に挨拶してきました.

その中でも特に印象深いのは,近藤さんに直接お礼を伝えることができたことです.日本語版『初めてのPerl』を熟読してPerlを覚えたクチですが,読んでいた当時の自分は,翻訳者ご本人に直接お礼を言える機会があるとは思ってもいませんでした.

Perl Mongerのくくりにいれていいのか分かりませんが,またLarry Wallさんと写真を取れました!以前撮影した写真を見せ,また撮影をお願いしたところ,「OK. モウイチド」と快く応じていただけました.ありがとうございます.

モチベーション

毎回感じることですが,参加後は意識が高まって(),非常に開発したい気分になります.大勢の方が良質なアウトプットしているので,その影響を受けているのでしょう.この状態を維持し,あずまさんが仰ってたようにCPANに恩返し,恩送りしたいところです.

昨年と違い今年は登壇しなかったため,少し物足りなさが残りました.来年は(当選するかは別として)トークを応募しようと思います.

リンク

1日目,2日目のまとめをアップしてあります.例年通りなら後日トークの動画がアップされるかと思いますので,それまでの繋ぎとしてご利用ください.注意点ですが,自分用に聞いた話をメモしたものですので,解釈が間違っている可能性もあります.

YAPC::Asia Tokyo 2012 2日目

CPANに恩返ししよう

CPANモジュールはいつも本当に完璧か

  • 例えばCrypt::DH~0.07はこけたりする
  • 他にも依存モジュールでこけたりとか
    • CPAN Dependenciesを参照すると依存や各モジュールのインストール成功率が見れる
  • SYNOPSISがなかったりすることもたまにある

プログラマたるもの,常に建設的であれ

  • バグとかにぶち当たったら,対応する
    • patch
    • bug report
  • 自分のためでもあり,他の人の為でもある

連絡方法

  • Email
  • Twitter
    • ぼやいたら6分後にyappoさんが反応をくれた
    • #perlをつけるとか
  • Blog
  • github
  • PAUSE

恩返しするための方法

  • ブログに記録を残す
    • 現象や環境(バージョン等)
  • テストの失敗を報告する
    • CPANRTやgithubにIssueを書く
    • 簡潔にわりやすく
  • モジュールの使い方を書く
    • POD形式を意識して書いておく
  • 改善要望を出す
    • patchがなくても,issue登録だけでもOK
    • デザインの手助けもありかも
  • 盃を交わす
    • 勉強会に参加,開く

恩返しの次は恩送り

  • Nephia(Mini WAF)を作ってCPANにあげた!

Perl as a Foreign language

  • dan kogaiさん

前置き

  • 以前はPerlがどこにでもあった
  • 今はそれがJavaScriptになっている

この先Perlの生き方

  • サーバ側にはまだJavaScriptは普及しきっていない
  • とほほ・Kentな人でも使える
  • one-liners, shell script++として
    • Minimal Perlが参考になる
  • perlが遅い
    • 数値計算が遅い
    • 他の部分で頑張ってる.例えば起動処理はnode, php, python等と比べて速い
  • True TDD
    • testしてからじゃないとinstallしないポリシー
  • Decent Unicode Support
    • Perl, 1.9.XのRuby
  • Community

Perlで始める!初めての機会学習の学習

  • TAKESAKOさん

機会学習の教材

  • Pythonばっかり
  • PRMLは数学を忘れているのできつい
    • あんちょこを作ってgithubで公開し,ついでに販売

身近で機会学習の使われているところ

  • Kinect
    • Random Forest アルゴリズム
    • 奥行きからパーツ分けして認識

Kinect x Perl

  • CPANにない
  • Perl-Kinectを開発中
    • リアルタイムにテキストで出力
  • Kinect x DNS

Perl入学式をやってみた

  • @__papix__さん

運営上で気を付けていること

  • できるだけその場で質問に答える
  • コーディングを重視.できるだけ手を動かす
  • 継続的参加できるようにする
    • 2回同じ内容で対応
  • Twitterでのアフターサポート
  • 最初はいなくても,動いていればいずれ集まる
  • やる気大事

モダンmod_perl入門

  • @xtetsuji

mod_perlとは

  • mod_perl2も出てから10年経ってる
  • Perl CGIの高速化
    • Perlインタプリタを常駐化することの副次的な効果
  • Perlでapacheのinternalに触れる

mod_perl handler

  • sub hander {}を書いていき,apacheのconfigで設定する
  • 大量のhtmlの絵文字変換とか

使った例

  • mod_rewriteをmod_perlで書く
    • perlで出来ることはなんでもできる
  • PHPの前後でhookして書き換え
    • PHPのコードは書けないけど,除去はできる
    • 認証を全部削って,mod_perlで認証を追加
  • apache mpm threadとithreadでQueue Serverを実装
    • 複雑なことはしていない
    • 10K/minぐらい出てる

その他

  • handlerで書けば,mod_mrubyとも勝負できそうな速度
    • mod_mrubyの中の人のベンチ
    • 7000 req/secくらいは出る
  • \@mod_perl_infoを取ったので質問

mizzyさんの話は後日動画でご確認ください.

2012/09/28

YAPC::Asia Tokyo 2012 1日目

YAPC::Asia Tokyo 2012の初日です. 久しぶりに会う方とご挨拶できて,非常に良かったです.二年ぶりにLarryさんとも写真をとらせていただきました. またXslateのbridgeの件でgfxさんとお話して,今後の対応を確認できたのも収穫です. 以下は聞いてきたトークのメモです.あくまで私のメモなので正確な内容は今後公開されるスライドや恐らくアップロードされる動画を確認してください.おかしい点があれば,ご連絡ください.

What Does Your Code Smell Like?

  • Larray Wallさん
  • perl5のコードをperl6に書き換えるライブコーディング 
    • subの定義に引数を指定できる
    • referecneが簡潔に
    • if, while等の一部で括弧を省略できる
    • (^100).roll(10) 0-100までの乱数を10個生成する
    • say "Before @a"が展開されない.say "Before @a[]"にする必要がある
    • 0 ..^ @x 0から@xまで.省略すると ^@x
    • functional programmingもできる
    • gather/takeでありがちな一時変数を減らしたりとか
    • infix:<M>でオペレータMを定義できる? @out M= merge(@x,@y)みたいなコードがかける
    • その他色々

Web::Security beyond HTML5

  • Yosuke Hasegawaさん

Ajaxを利用したXSS

Ajaxデータを利用したXSS

  • ちょっと遅れて最初5分くらいは聴き逃した
  • IEだと勝手にapplication/javascriptがtext/htmlと解釈されることがある
  • IEにおけるファイルタイプ決定のメカニズムが複雑すぎる
    • URLの拡張子によって挙動が変わったりとか
    • 挙動がいつのまにか変化していることが多い
      • microsoft.com + IEの組み合わせのみでXSSになるページもあった
  • 発生しやすい状況
    • JSON
    • JSONP
    • CSV

Ajaxデータの盗み見

  • JSONとかは狙いやすい
  • Array Hijacking for Android
    • object.prototype. __definegetter__とか使う
  • JSON Hijacking for IE
    • JSONの一部にUTF-7とかで攻撃コードを紛れ込ませる
    • IE6,7だとresponse headerよりも

対策

  • X-Content-Tyep-Options: nosniff
    • IE6,7には効果なし
  • XMLHttpRequest以外からのアクセスを遮断する
    • X-Request-Withを見て判断する(jQueryとかが入れてる)
    • 自分で任意のheaderを使うのもあり

XHR Lv.2の注意点

  • クロスドメインリクエストが可能
  • ただしクライアントとサーバ側で注意しないと危険
    • クライアント側
      • URLのチェックを怠らない
      • URLの確認はじつはめんどくさい
    • サーバ側
      • Originヘッダを見るだけではダメ
      • Cookieを使う
      • setRequestHeaderで独自の確認用ヘッダを付ける
      • preflightリクエストを使うとX-hogehogeというヘッダを使えるようになる
      • Plack::Middleware::CrossOriginを使うと楽

XSSフィルター/XSS Auditor

  • IE8, Chrome,Safariとか
  • 誤検知もあるので,X-XSS-Protectionヘッダでコントロール可能

X-Content-Type-Options: nosniff

  • 動的コンテンツには全部付けておくべき

クリックジャッキング対策

  • X-Frame-Options: DENY
    • できれば使ったほうがよい

Content-Security-Policy(CSP)

  • XSS根絶の切り札
  • まだまだ規格・実装が不安定
  • 許可するリソースを記述

    Content-Security-Policy: default-src 'self'; image-src *
    

HTTPSの強制

  • HTTP Strict Transport Security(HSTS)
  • HTTP Responseヘッダで指定する
    • HTTPでは汚染されているかもしれないので,HTTPSで吐き出す必要がある

まとめ

  • ブラウザベンダーに文句言うだけじゃなく,サーバ側で積極的に対応する必要がある
  • 是非実装に落として,どんどん広めていって欲しい

大きくなったシステムの疎結合化への取り組み

分離する

  • Service Procedureに差し替える
    • 基本的にプレーンなデータを返す
    • オブジェクト等は返さないようにする
  • 今回は内部向けのCoreInternal API
  • 1つのリポジトリにいれてる
    • メリット
      • 既存資産の活用
    • デメリット
      • リポジトリの肥大化
  • JSONRPC over HTTP / Plackを使用
  • まだ社内でもベータ的な状態

コードの計測

  • Inscpect Packageで計測
    • 昨年のmixiの人が発表したやつ
    • 結合度,複合度を計算して,技術的な負債をスコア化
  • コードレビューもやってる
  • ガイドラインをテストにして自動化する
    • @EXPORTを禁止
    • 非推奨モジュールの使用のチェック
    • ループ用途のmap, grep
  • 何気なく書いているコードで複雑化していくので,意識して書く

Perlと出会いPerlを作る

  • 五嶋さん
  • 大学時代はKonohaScriptの開発

gperl

  • コンセプトは世界一高速なPerl処理系を目指している
  • C++でスクラッチで開発
  • フィボナッチやたらいまわしで数十倍高速
    • 数値はperlの弱いところで,文字列処理をやっていないのはちょっとアンフェア by dan kogai
    • Regexとか文字列関連はまだ実装されていないので,できてからベンチ取りたい

高速化

  • 引数用の配列を事前に構築
  • NaN-boxingによる型検査
  • アノテーションによるStatic Typing/JIT Compile

    • # @static_typing, # @jit_safe

      # @static_typing
      sub fib {
          ...
      }
      

仕様の都合で諦めた箇所

  • 関数引数にあるリストの展開
    • 関数用に確保した配列を拡張する必要があるので遅い
  • デフォルトでのスカラー変数の参照渡し

Profiling memory usage of Perl applications

  • ps, top, /proc等を使う
  • RSSを計測の目安に使わないこと
  • Devel::Peekで変数(IV, HV, GV等)の構造を表示できる
  • Devel::Sizeでメモリ使用量を見れる
  • Devel::Sizeを拡張したい.一部した
  • Devel::SizeMeGraph なんか色々可視化してる!

2012/09/22

Released Text::Xslate::Bridge::FillInForm::Lite

追記 2012-10-03

Don't use this module. You should use Text::Xslate(ver 1.5018 or higher) and html_builder_module option. See Text::Xslate::Bridge::FillInForm::Lite for detail.

Tex::Xslate側でhtml_builderをかませるhtml_builder_moduleオプションが追加されたので,このモジュールはdeprecatedになりました. 詳しくはText::Xslate::Bridge::FillInForm::Liteをご確認ください.

これから以下のようにfillinformをかけます


    use Text::Xslate;
    my $txt = Text::Xslate->new(
        html_builder_module => ['HTML::FillInForm::Lite' => ['fillinform']]
    );

Dancerのconfigでは以下のように指定してください

    template: "xslate"
    engines: 
      xslate: 
        html_builder_module:
          - "HTML::FillInForm::Lite"
          - ["fillinform"]

ご対応いただいたgfxさん,patchを書いていただいたtokuhiromさん,ありがとうございました!

追記ここまで

LINK

INSTALL

$ cpanm Text::Xslate::Bridge::FillInForm::Lite

HOW TO USE


    use Text::Xslate;
    my $txt = Text::Xslate->new(
        module => ['Text::Xslate::Bridge::FillInForm::Lite']
    );

    my $output = $tx->render_string(<<'T', { q => { foo => 'bar' } } );
    : block form | fillinform($q) -> {
    
: } T

MOTIVATION

  1. 毎回,Text::Xslate::Manual::Cookbookからcodeをcopyしてた
  2. Dancer::Template::XslateのようにText::Xslate#newにfunctionを渡せない時がある

Dancerのconfigはyaml形式のためcodeを直接書けない.moduleオプションは文字列で渡せるので問題ない

    template: "xslate"
    engines: 
      xslate: 
        module:
          - "Text::Xslate::Bridge::FillInForm::Lite"

一応,以下のように書けば対応はできるがめんどくさい


    package MyApp; 
    use Dancer ':syntax';
    use Text::Xslate qw(html_builder);
    use HTML::FillInForm::Lite qw(fillinform);

    our $VERSION = '0.1';

    set 'engines'  => {
        'xslate' => {
            function => {
                'fillinform' => html_builder(\&fillinform)
            }
        }
    };

    get '/' => sub {
        template 'index', { q => { foo => 'bar' } };
    };

    true;

追記 2012-09-24

Text::Xslateとしてはラッパー的なpluginが溢れるのはよくないよねという方針だったらしいので、tokuhiromさんが汎用的に使えそうな案をいくつか出してくれた。
Re: Text::Xslate::Bridge::FillInForm::Lite

3番目のText::Xslate#newにhtml_builderオプションを追加する方針が良さそうに思う。
上記patchが取り込まれるかはまだわからないが、取り込まれた場合はこのmoduleはdeprecatedにする予定

2012/09/11

最近読んだ本のまとめ


Twttierにしか書いてないと忘れるのでメモ

チケット駆動開発











プロダクティブ・プログラマ












2012/09/04

JSON::Types::boolとJSON::PP::value_to_json

JSON::Types ってのを書いた

JSONとして数値を返したい時によく+0とかしてたけど,こっちの方が意図が明確になって良さそう.

JSON::Typesの実装方法を確認しているときに,JSON::Types::boolが気になった

    sub bool($) {
            $_[0] ? \1 : \0;
    }

なぜ1,0のreferenceを返してるのか.その答えはJSON::PP::value_to_jsonの中にあった.

    sub value_to_json {
        my ($self, $value) = @_;

        # 省略

        my $type = ref($value);

        if(!$type){
            return string_to_json($self, $value);
        }
        elsif( blessed($value) and  $value->isa('JSON::PP::Boolean') ){
            return $$value == 1 ? 'true' : 'false';
        }
        elsif ($type) {
            if ((overload::StrVal($value) =~ /=(\w+)/)[0]) {
                return $self->value_to_json("$value");
            }

            if ($type eq 'SCALAR' and defined $$value) {
                return   $$value eq '1' ? 'true'
                       : $$value eq '0' ? 'false'
                       : $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ? 'null'
                       : encode_error("cannot encode reference to scalar");
            }

            # 省略
        }
        else {
            # 省略
        }

    }

JSON::PP::Boolean\1, \0を渡すとtrue, falseにしてくれる模様.

ちなみにJSON::PP::Booleanの生成方法

    $JSON::PP::true  = do { bless \(my $dummy = 1), "JSON::PP::Boolean" };
    $JSON::PP::false = do { bless \(my $dummy = 0), "JSON::PP::Boolean" };

2012/07/30

Hokkaido.pm Casual #1, #2, #3の資料

#1はテーマはよくわからんけど、fluxflexの話

もうサービス終了したので、良い子はheroku buildpacksでperl動かそうね


#2は開発環境だったので、普段使っているVim Pluginsの話


#3は入出力ということでPerlIOを使ってみた

[impress.js][css] 黒背景、白文字、overflow-yを有効にしたCSS

gistに貼っておくだけだと見失いそうなので、こちらにメモ。

  • impress.cssの末尾にくっつけて使う
  • 背景はグラデーションかけてKeynoteの黒背景っぽくしてある
  • 長いコードを貼った時に、各スライドで縦スクロールさせたいのでscroll-yを有効にしてある

2012/06/12

ack(1)でJSXのファイルを検索する

ack(1)で.jsxを検索したかったのでメモ

~/.ackrcに以下の1行を追加する

--type-set=jsx=.jsx

これで指定なしで検索できるし、--jsx, --nojsxの指定ができる。
詳しくはman ackのDefining your own typesを参照

2012/05/13

[hokkaidopm]Hokkaido.pm#7 参加しました

Hokkaido.pm#7

Hokkaido.pmに行って来ました
私の今回の発表は「DancerでWebアプリ再入門」です。

また今回もJPA様の講師派遣支援制度でりーおさん(@riywo)にお越し頂き、Perlの運用ツールのお話しを聞くことができました。
Touryoのオープンソース化を待ち望んでいますので、是非お願いします!

以下はりーおさんのセッション時のメモです。

Ops Tools with Perl @riywoさん

スライドはこちら

CloudForecast

  • サーバリソースのモニタリング
  • Installが簡単
    • SNMP, RRDs系が別途必要
  • 軽量 5,000行程度(テンプレート含む)
  • WAF: Shirahata.pm

GrowthForecast

  • API and Graph
  • Installが簡単
    • RRDsは別に必要
  • 使用例
    • fluentでGrowthForecastになげて、Webから見る

chase-tail

  • tail -f error_log | chase-tail -l 10 -t various_erro
  • エラー箇所に色付け
    • 目grepを楽にする
  • エラーの流れ早すぎる場合は適度に省略してくれる

App::Ikachan

  • IRCのHTTP API

Percona Toolkit

  • MaartkitとAspersaが混ざってる
  • MySQL用のツール
    • pt-query-digestがパフォーマンスチューニングに役立つ
      • tcpdumpをどばっと食わせると実行時間とかみれる

Touryo

  • Configuration Management Tool
  • Chefは良かったけど、カスタマイズが大変
  • Amon2で設定をWeb画面で可視化
  • CLI
    • touryo test web01 環境があっているかテスト
    • touryou run web01 間違っている箇所を訂正
  • 設定
    • roleを定義する
    • roleは継承可能
  • blueprint
    • crontab等のテンプレート
    • Text::Xslate使ってる
  • roleだけじゃなくてnodeで特定のサーバ毎に設定を追加できる

2012/05/05

[JavaScript] Sapporo.js-20120505に行って来ました #sapporojs

Sapporo.js-20120505

今回は「8章 メソッド」のArray#reverseからスタート

解説したメソッド

  • array.reverse()
  • array.shift()

一般発表

ぬるjs @PUPRLさん

  • ぬRubyからきました
  • node-five
    • nodeでQtでcanvasでデスクトップアプリ
    • 関係ないけどmake.js
      • この作者が使ってるjs製のMakefile

NotHub API の紹介 @tricknotesさん

  • githubの更新を表示するChrome Extension
  • 用意しているI/F
    • Socket.IO
    • WebSocket
  • 見えないときは心の目で確認する

Web Audio APIとNode.jsで楽々ウェブ楽器の作り方~Beatonica @aike1000さん

  • Beatonica
    • twitterのソーシャルグラフを利用
    • 人にランダムに音を割り当ててる
  • Web Audio API
    • 音の加工が簡単

2012/04/21

[PHP][Security] PHPカンファレンス北海道に行って来ました

[PHP][Security] PHPカンファレンス北海道に行って来ました

PHカンファレンス北海道に行って来ました。
目的は徳丸さんのセッションです。


徳丸本に載っていないWebアプリケーションセキュリティのメモ

Webアプリケーションとキャッシュ

色々なレイヤで高速化等のためにキャッシュを利用する - フレームワーク - リバースプロキシー

別人問題

  • 別人のキャッシュされた情報が見れてしまう問題

OpenPNEのキャッシュ制御問題のDEMO

  • 現在は修正済み
  • DEMO用に以前のバージョンを利用している

はてなブックマークのDEMO

  • ブラウザのキャッシュで前の人のデータが見える

これは脆弱性なのか?

  • ブラウザやキャッシュサーバの問題
  • でもWebアプリ側で対応したほうが安心
    • cache-control: no-store
    • pragma: no-cache

クリックジャッキング攻撃対策

  • X-Frame-Optionsを使う

evalインジェクション対策

  • JSONのレスポンスを返すときに正しいヘッダーを追加する
    • Content-Type: application/json; charset=utf8
    • X-Content-Type-Options: nosniff

JSONハイジャック対策

  • XMLHttpRequest時に特別なヘッダをいれておいてチェックする
    • こっちを推奨
  • JSONの中にfor(;;)を入れておく

2012/04/19

[perl][hokkaidopm] Hokkaido.pm Casual#0

Hokkaido.pm Casual#0

Hokkaido.pm Casual#0に行って来ました。
参加者も10名を超える盛況ぶりで、今回の参加者はこちらのatndで確認できます。
何故かyappoさんがいたりとCasualなのか微妙な感じがしてましたが、行ってみると結構Casualでした! 次回以降はもっとCasualに行きたいですね。

LTについて

全員LTということで、今回はimpress.js Remoteというのを作ってみました。
Keynote Remoteのようにimpress.jsをiPhoneから操作するというソフトウェアです。

実装の概要としてはnodeでWebSocket Serverを立てて、iPhoneのtouchイベントをPC側に送るシンプル実装です。
まだまだ機能が足りないので、後日整理してからgithubにあげようと思います。

TODOとして以下が残っています

  • Remote側のHTML出力の自動化
  • 一覧ページの追加
  • カンペ表示の対応
  • jQueryを依存から外す
  • Web ServerとWebSocket Serverの共通化

今後について

これから毎月1回開催していくということで、もっとCasualになるといいですね。
LTの途中とかで随時質問していける雰囲気があるといいんじゃないでしょうか。後、最初からビールがあるといいと思います。

2012/03/31

Sapporo.js-20120331

Sapporo.js-20120331

テストフレームワークの紹介

QUnit

  • jQueryから分離
  • XUnit系

jasmine

  • BDD for JavaScript
  • RSpecっぽい

whiskey

  • 最近よさげ?
  • Nodeで使いやすいように作ってある
  • ドキュメントが少ない

mocha

  • @tricknoesさんがお気に入り
  • フレキシブル
  • 実行結果の出力形式が豊富
    • JSONとかTAPとか

mochaの準備

  • npm install -g mocha
  • npm install expect.js
  • current dirにtest/を作ってテスト用ファイルを作る

    describe('Example', function() {
        it('should passed test', function() {})
    }
    
  • mochaを実行すると、test/以下のファイルを実行してくれる

追記: mochaのinstall時に-gをつけないと、mochaコマンドを直接叩けない

mochaのその他メモ

  • -Rで出力を切り替えられる。指定できるフォーマットは--reportersで確認
  • -wでtest以下のディレクトリの変更をwatch
  • -Gを付けるとGrowlに通知

JavaScript: The Good Partsの読み合わせ

遅延再定義 @oosugi20さん

    var func = function() {
        var count = 0;
        var hoge = $('#hoge');
        $hoge.text('1回目のクリック');
 
        // 2回目以降は↓の関数のみ実行される
        func = function () {
            count += 1;
            hoge.text('2回目以降のクリック(' + count + ')');
        };
    }
 
    $(function(){
        $('#btn').on('click', function() { func(); });
    });
  • countによって処理をわけているけど、毎回countを比較しないので効率がよい
  • jQueryオブジェクトを入れる変数にはプレフィックスとして$をつけてる

2012/03/24

SaCSS vol.32 CSS3&CSSアニメーション再!+スマホサイトコーディングTips

SaCSS vol.32

CSS3&CSSアニメーション再!+スマホサイトコーディングTips
h2hamさん

box-shadow

  • 本体をpoisition:relativeにする
  • before, afterで影を作る
  • z-indexを使用して、擬似要素の上にbox要素が来るようにする

transition-*

  • transition-durationで変更にかかる時間を指定できる
  • transition-delayで変更開始時間を指定
  • transition-timing-functionでアニメーションの挙動を変更できる
    • linear
    • ease
    • ease-in
    • ease-out
    • ease-in-out

@-webkit-keyframes

  • 動作時間の割合毎に変化して欲しいプロパティを指定する

    /* 移動させるアニメーション */
    @-webkit-keyframes move {
        0% {left: 0; top: 0;}
        50% {left: 200px; top: 200px;}
        100% {left: 500px; top: 500px;}
    }
    
  • -webkit-animation-* で作成したkeyframeの実行回数、時間等を指定する

UI/ボタン

  • display:inline-blockが良さげ
    • blockだと横に伸びる
    • inlineだとmargin等が効かない
  • グラデーションを入れてそれっぽく
  • 使うタグは用途によって使い分ける

UI/タブ

  • labelで作りcheckboxと連動させて、アクティブな状態を保持できる
    • input自体はdisplay:noneで隠しておく
    • 擬似要素の:checkednth-of-typeでボタンのCSSを変更する
  • inputタグはlabelの前に置く
    • 前の要素をCSSで指定するのは面倒
    • nth-of-typeを使うためにlabelタグの前に置く模様

UI/アコーディオン

  • checkboxをradioに変更
  • inputとlabelの並び順も書きやすい用に変更しておく
  • 閉じてる状態では高さは0, 開いてる状態ではautoを指定している
  • autoではアニメーションさせられないので、高さをちゃんと指定する必要がある

その他

  • 要素によってはアニメーションできないこともある
    • グラデーション、角丸とか
    • ブラウザ依存なので確認が必要
  • jQuery Mobileの紹介

2012/03/19

第10回北海道情報セキュリティ勉強会の備忘録

2012/03/17(土)に開催された第10回北海道情報セキュリティ勉強会を行って来ました。

テーマは「バイナリ解析」

メインセッションがeagle0wlさんの「OSS/Java/.NETプログラマが意識すべきバイナリ解析の素養」でした。

  1. 最近Androidを触っている
  2. 目grep が面白かった

という個人的事情もあり、ホットなテーマなので拝聴してきました。

内容はリバースエンジニアリングとソフトウェアコピーの歴史的な話しで前半が終わり、後半は最近のスマートフォン周りの難読化の必要性、リバースエンジニアリングの前向きな利用方法と言った感じでした。

歴史的な話はそれはそれで面白かったですが、解析技法等が紹介されるわけでもなくイントロダクション的な感じで終わったのが残念でした。