本を読む

読書やコンピュータなどに関するメモ

Shibuya.pm TT #14に参加

 Shibuya.pmのテクニカルトーク#14に行ってきました。いろいろな話題がありつつ、テンポよく進行して、あいかわらず楽しくためになるイベントでした。

 以下、メモほぼそのまま。

本日のイベント開催趣旨について(takesako)

  • 「ブログでJPAのセミナーとIPAのセミナーを混同されている方がいるようなので、両方を呼びました」w

Perl 6 Language Update(dankogai)

  • 夏やったものの手直し
  • llevalでFizzBuzz
  • Perl 5ならあっというま
  • Perl 6(Rakudo *)
    • 三項演算子がちょっとかわった
    • 2秒台
    • 夏は3秒以上かかった
  • subの中にsubを入れる
    • 中の関数は外の関数の外からは見えない
  • プレースホルダー
    • $^n
    • デフォルトの引数
    • my $n = shiftしなくていい
  • 例外
    • catch節はtryの中にある
    • try $exception という書き方も
  • Lazy list
    • 無限リスト
    • my $int = 0..*
    • 注意:無限リストをmapにくわせると無限に待つ
      • 将来は直る予定
  • Smart Match
    • perl 5.10以降
    • anyとマッチさせる
  • マルチディスパッチ
    • triple(Int $i) と triple(Str $s)
  • 演算子定義
    • sub infix:<!> ($f, $b) { ~ }
    • Hyper Operator:ベクトル演算
      • 動かない
  • オブジェクト指向
    • class Buzz is Fizz { ~ }
    • メソッド呼び出しは "->" じゃなくて "."
    • self
    • $_.hoge を .hoge と省略できる
  • Grammer
    • 正規表現を言語定義できるところまで拡張
    • Perl 6の仕様もPerl 6で書かれている
  • Combinatory Logicを書いてみる
    • S、K、I

ぼくのかんがえたさいきょうのYAPC::Asia(941)

  • 会場がすごい
    • 去年と同じ
  • スピーカーがすごい
    • Larry Wall、Jesse Vincent、Tatsuhiko Miyagawa
  • スピーカーがすごい2
    • 50人以上
  • 協賛がすごい
    • 20社ぐらい
    • 景品がすごい
      • トークの投票
        • Mac Book Proほか
  • チケットがすごい
    • 再販売開始

JPA活動報告(lestrrat)

  • 活動
    • YAPC
    • 地方ユーザーグループでの講演
    • WEB+DBプレス監修
      • リレー連載
    • セミナー、有料研修
      • Catalyst研修
  • やりたいこと
    • 新人向けの教材の作成
      • 2012年完成?
    • 技術認定試験
      • 進展してない
      • 教材とからめて進めたい
    • 地方へ講師派遣
      • 牧さん以外
      • お金の回り方を考えないといけない
    • 勉強会を定期的に
    • 予算枠拡大
      • Tシャツ販売
  • 必要なこと
    • 連携
      • イベントやってる人や、勉強会やってる人と
    • JPA内人事
      • 941さんのアシスタントがほしい
  • 財務状況
    • 協賛18社
    • 年間予算=企業会費+YAPC収入
  • 個人会員
    • うまい還元方法がみつからない
  • @jpa_perl

memcached injection(佐名木智貴)

  • プロトコルは簡単なもの
  • データはバイト数をチェックしている
  • キー名のエスケープ方法がない
    • クライアントまたはサーバーがやっているか?
      • やっているライブラリとやってないライブラリがある
      • PerlのCache::Memcached:やってない
    • そもそもキー名に汚染されたデータが入るケースはない?
      • 事前にいろいろ調べておいたほうがいい
  • 経験:SQLのカラム名のSQLインジェクション
  • gihyo.jpのmemcachedのセキュリティ記事

memcachedの運用監視ノウハウ(kazeburo)

  • mixiの事故
    • memcachedが落ちる原因がわかった
    • memcachedの重要性が再認識された
  • 安定稼働:PDCAサイクル
  • 「監視は継続的なテスト」by kazuho
    • 自動化、可視化
  • memcachedの監視項目
    • プロセス確認
      • pgrep
      • cronlog:終了コードが0以外のときだけ出力を表示
    • サーバ接続
      • nc -z
    • コマンドへのレスポンス
      • perlで
      • Nagios Pluginに
        • 終了コードを変える
    • コネクション数
      • 最大接続数と現在の接続数を比べる
  • memcachedが落ちていると気づくまでにどのぐらいかかったか
    • daemontoolでは落ちたら再起動
      • 監視でOKになってしまう
    • uptime監視
      • Nagios Pluginに

パネルディスカッション:身につけておきたい、今そこにあるシステムの救命措置

  • (園田)
    • 届け出数の推移
    • DNS特需(カミンスキー特需)
    • 長期化案件:90日以上未修正のもの
      • どうする?
    • Webアプリ系の啓蒙コンテンツ:新しく作るとき用
      • 今動いているシステムをどうするか
    • 脆弱性の直らないサイトは公表していいか?
      • 現場は「明日まで直せ」でデスマ
      • 業務妨害扱い?
    • どういうプロセスなら現実的?
  • (kazuho)twitterのXSSのときも、広まっていく中で悪質化した
  • (園田)1000日過ぎたものだけ公開とかするとどうなるか
  • (kazuho)スクリーニングとあわせてくれるならうれしい。スキャンして問題があるサイトを調べて、こんなにある、とか。みんなでやればやってくれるのでは。数の説得力
  • (園田)それでスキャンに問題が出る可能性がある
  • (kazuho)IPAならできるとか
  • (園田)いま動いているシステムの問題
  • (kazuho)古いシステム。作った人もいなかったり。あれはどうしようもない
  • (kazuho)一定のセキュリティ基準を満たしたら入れるサーバー保険とかどうか。お金がからんだほうが会社を動かしやすい
  • (園田)エスケープのミスとか忘れとかの問題
  • (kazuho)XslateはTTと比較的互換性があって自動エスケープ。ただ完全な互換性はないので既存のものを入れ替える用途には
  • (kazuho)データにスクリプトを入れられないようブラウザを制限とかWAFとか
  • (takesako)CPUでデータ領域とコード領域を分けるような
  • (会場 bulkneets)IPAからの連絡が正直面倒という場合。現場におりてくるときに話が面倒になったり。報告するほうも大変。直接twitterとかで連絡してもらったほうが早い場合も
  • (会場 IPAの人)IPAを通さなくてはならないわけではない
  • (会場 bulkneets)報告した人を保護してくれているとは思う。報告した人が不利益という事例は
  • (園田)2003年の事件。カンファレンスで公開してしまった
  • (takesako)複数サイトの組み合わせだと説明が難しい
  • (園田)そもそも用語とか説明とか相手に分かってもらうのが難しかったり

Perl 1,2,3,4 の歴史(mad_p)

  • Tokyo.pm
  • 初めて使ったPerlのバージョン
    • 会場に聞く。5以降が多い?
  • 元ネタ:perldoc perlhist
  • ラクダ本(原書)1991年
  • 3つの時代
    • 黎明期 インターネット以前
    • 普及期 CGI期
    • 発展期 高度化した時代
  • Perl 1
    • 1987.12.8
    • 基本的な書き方はできていた
  • Perl 2
    • 1988
    • 再帰呼び出し
    • local
  • Perl 3
    • 1989年
    • foreach
    • GPL
  • Perl 4
    • 1991年
    • ラクダ本の出版された日のバージョンが4.0.0になった
    • 伝説のGlossary
      • Endian
  • 黎明期の用途
    • CSVをテキスト表組に
    • ioctl
  • 黎明期の情報源
    • NetNews
    • パソ通
    • ユニマガ
  • JPerl
  • インターネットの普及
    • CGI
  • Perl 5
    • 1994年
  • 国内のPerl 5普及がほかの国と比べて遅かった(mad_pいわく[要出典])
    • CGI中心だったためPerl 4で十分だった?
  • CPAN
    • 1995
    • 当時はanonymous FTP
    • cpanシェル以降に普及
  • Perlコミュニティー
    • Perl Conference、YAPCなど
    • 主にアメリカ西海岸
  • 国内
    • 1997 Perl Conference Japan
      • Larry Wall呼んだ
  • Perl Mongers

LT:Android + Perl(naoya_ito)

  • Scripting Layer for Android (SL4A)
  • Android上でいろいろなLLを実行できる
  • AndroidのネイティブAPIを呼べる
  • adbからインストール
  • 付属のエディタはつらい
    • Emacsで書いてadb push
  • 同梱モジュールを調べた
    • socket.pm
    • echoサーバーを書いてみる
    • あっさり動いた
  • 外部アクセス可能なPublicサーバーにもできる
  • PerlからWebViwを起動してJSをキックとか

LT:Data::MessagePack(tokuhirom)

  • MessagePack
    • バイナリのシリアライゼーションフォーマット
    • いろいろな言語
    • データが小さい
      • ネットワークやDBで空間効率がいい
    • blessしたデータとかは使えない
    • 人間が読めない
  • Data::MessagePack
    • gfx
    • 速い
    • Pure Perlサポート(makamaka)

LT:re RainbowTwtr(kazuho)

  • TwiterのXSS事件
    • @の直後の"がエスケープされない
    • HTML化アルゴリズム
      • 多段変換。複雑すぎた
  • 正しいコードを書くのはむずかしい
    • 正しい設計
    • パースとエンコードに分ける
    • エンコード処理が正しければXSSは起きない
  • バグがあってもセキュアじゃないプログラムよりマシ
  • エンコード機能つきのミドルウェアを使う

LT:PerlParserHacks vol.2(gfx)

  • vol.1ではperly.yをいじった
    • 全部コンパイルしなおすのは大変
    • perly.yをいじらない方法
  • Pluggable Keyword
    • 5.12から
    • 任意のパーサーにフックをしかけられる
    • 任意のキーワードを追加できる
    • 欠点
      • パースと構文木の生成を自分でやらなくちゃならない
  • parse_fuullstfmt() API
    • 5.13.5
    • 1ステートメントをパースして構文木を返す
    • Void.pmを作ってみた
    • 使いどころが難しい
      • 単位がステートメントなので荒い
      • 付属サンプルが参考にならない
      • method signatureの実装に使える?

「さあ横になって食べよう」

さあ横になって食べよう―忘れられた生活様式 (SD選書)
バーナード ルドフスキー
鹿島出版会
売り上げランキング: 289878

 聖書では最後の晩餐において、ヨハネが「イエスの胸に寄り添って横になっている」と描写されている。これは、レオナルド・ダ・ヴィンチをはじめとして数多くの画家が描く、テーブルを囲んでいる場面から想像すると、とてもヘンな格好だ。

 実は当時は、寝椅子の上で横になって食事するのが慣習だった、と本書の著者のバーナード・ルドルフスキーは指摘する。画家たちはテーブルで食事する文化を前提にしているが、床や台の上に座る文化も歴史や世界には多い、と。

 それに始まり、現代の欧米式の生活様式から見た世界の生活様式とのギャップを、建築家の著者が見せる読み物。時には、ヨーロッパとアメリカのギャップなども含まれる。シニカルなユーモアをまじえた文章に、さまざまな資料写真(主に歴史上の絵や家具)をふんだんにおりまぜていて、面白い。以下、本書のコネタからいくつか。

  • 椅子に座るのは人間にとって不自然な姿勢
    • 古代トルコ、中国、日本では、王様も椅子ではなく高座に座った。日本には鴨川の床という風習も
    • 揺り椅子はブランコやハンモックの代替品
  • ヨーロッパは水よりワインの文化。洪水のあとノアはまずワインを造った
    • 一方アメリカ人は禁酒法を作った
  • 19世紀のニューヨークのホテルでは、入浴のための水が供えられておらず、手と顔を1日1回洗えば充分と考えられていた
  • 19世紀前半のニューヨークでは、公衆便所がないため、公共の噴水が「尿意を誘う」という理由で禁止された
  • 純粋な清教徒は、ビデの使用を禁じている
  • 入浴と体を洗うのとを分ける文化
    • 木製の風呂にみんなで入るヒッピー文化(映画「ヤギと男と男と壁と」でも出てきたっけ)
  • 中世ヨーロッパやそれ以前では、結婚式が浴室で行われるというのも珍しい光景ではなかった

「新仮面ライダーSPIRITS」3巻

ずっと昔からトモダチ…

 スーパー大切断キター! そして舞台は金沢に。

「日経Linux」2010年10月号

 特集1は「古いマシンをLinuxで速くする」なんだけど、どさくさにまぎれて「ブロードバンドルーターをDD-DRT化してWebサーバーにする」とか「iPhone 3GにAndroidを入れる」とかいう話が混入していて面白い。

 SLAX+XAMPPの「SLAMPP Lite」というディストロがあるのねとか、B-CAS復号はFUSEのドライバ使うのが流行りなのかとか、Thunderbirdのプラグイン使ってみるかとか、Unicornの動作とか勉強になった。

※ちなみに自分が執筆に参加した号以外は自費で買ってます。いちおう誤解のないように。

Rubyで定義されているクラスをリストアップする方法

 Yokohama.rb #0に行ってきました。みなさんありがとうございました。

 で、懇親会で話してて教わったネタ。

$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]
$ ruby -e 'p ObjectSpace.each_object.map(&:class).uniq'
[Array, Proc, RubyVM::Env, Enumerator, String, RubyVM::InstructionSequence, Module, LoadError, Regexp, Hash, Mutex, Encoding, Complex, Class, ThreadGroup, Binding, Thread, RubyVM, NoMemoryError, Float, SystemStackError, Bignum, ARGF.class, IO, Data, Object, fatal]

 Integerとかが入ってないけど、まぁいいや。

追記2010.09.19

 いや、こっちのほうが適切だな。

$ ruby -e 'p ObjectSpace.each_object.find_all {|o| Class === o }'
[Complex, Rational, FiberError, Fiber, ThreadError, Mutex, ThreadGroup, RubyVM::InstructionSequence, Thread, RubyVM::Env, RubyVM, Enumerator::Yielder, Enumerator::Generator, StopIteration, Enumerator, Math::DomainError, Binding, UnboundMethod, Method, SystemStackError, LocalJumpError, Proc, Struct::Tms, Process::Status, Random, Time, Dir, File::Stat, File, ARGF.class, IO, EOFError, IOError, Range, Encoding::Converter, Encoding::ConverterNotFoundError, Encoding::InvalidByteSequenceError, Encoding::UndefinedConversionError, MatchData, Regexp, RegexpError, Struct, Hash, Array, Errno::ERFKILL, Errno::EOWNERDEAD, Errno::ENOTRECOVERABLE, Errno::ENOMEDIUM, Errno::ENOKEY, Errno::EMEDIUMTYPE, Errno::EKEYREVOKED, Errno::EKEYREJECTED, Errno::EKEYEXPIRED, Errno::ECANCELED, Errno::EDQUOT, Errno::EREMOTEIO, Errno::EISNAM, Errno::ENAVAIL, Errno::ENOTNAM, Errno::EUCLEAN, Errno::ESTALE, Errno::EINPROGRESS, Errno::EALREADY, Errno::EHOSTUNREACH, Errno::EHOSTDOWN, Errno::ECONNREFUSED, Errno::ETIMEDOUT, Errno::ETOOMANYREFS, Errno::ESHUTDOWN, Errno::ENOTCONN, Errno::EISCONN, Errno::ENOBUFS, Errno::ECONNRESET, Errno::ECONNABORTED, Errno::ENETRESET, Errno::ENETUNREACH, Errno::ENETDOWN, Errno::EADDRNOTAVAIL, Errno::EADDRINUSE, Errno::EAFNOSUPPORT, Errno::EPFNOSUPPORT, Errno::EOPNOTSUPP, Errno::ESOCKTNOSUPPORT, Errno::EPROTONOSUPPORT, Errno::ENOPROTOOPT, Errno::EPROTOTYPE, Errno::EMSGSIZE, Errno::EDESTADDRREQ, Errno::ENOTSOCK, Errno::EUSERS, Errno::ESTRPIPE, Errno::ERESTART, Errno::EILSEQ, Errno::ELIBEXEC, Errno::ELIBMAX, Errno::ELIBSCN, Errno::ELIBBAD, Errno::ELIBACC, Errno::EREMCHG, Errno::EBADFD, Errno::ENOTUNIQ, Errno::EOVERFLOW, Errno::EBADMSG, Errno::EDOTDOT, Errno::EMULTIHOP, Errno::EPROTO, Errno::ECOMM, Errno::ESRMNT, Errno::EADV, Errno::ENOLINK, Errno::EREMOTE, Errno::ENOPKG, Errno::ENONET, Errno::ENOSR, Errno::ETIME, Errno::ENODATA, Errno::ENOSTR, Errno::EBFONT, Errno::EBADSLT, Errno::EBADRQC, Errno::ENOANO, Errno::EXFULL, Errno::EBADR, Errno::EBADE, Errno::EL2HLT, Errno::ENOCSI, Errno::EUNATCH, Errno::ELNRNG, Errno::EL3RST, Errno::EL3HLT, Errno::EL2NSYNC, Errno::ECHRNG, Errno::EIDRM, Errno::ENOMSG, Errno::ELOOP, Errno::ENOTEMPTY, Errno::ENOSYS, Errno::ENOLCK, Errno::ENAMETOOLONG, Errno::EDEADLK, Errno::ERANGE, Errno::EDOM, Errno::EPIPE, Errno::EMLINK, Errno::EROFS, Errno::ESPIPE, Errno::ENOSPC, Errno::EFBIG, Errno::ETXTBSY, Errno::ENOTTY, Errno::EMFILE, Errno::ENFILE, Errno::EINVAL, Errno::EISDIR, Errno::ENOTDIR, Errno::ENODEV, Errno::EXDEV, Errno::EEXIST, Errno::EBUSY, Errno::ENOTBLK, Errno::EFAULT, Errno::EACCES, Errno::ENOMEM, Errno::EAGAIN, Errno::ECHILD, Errno::EBADF, Errno::ENOEXEC, Errno::E2BIG, Errno::ENXIO, Errno::EIO, Errno::EINTR, Errno::ESRCH, Errno::ENOENT, Errno::EPERM, Errno::NOERROR, Bignum, Float, Fixnum, Integer, Numeric, FloatDomainError, ZeroDivisionError, SystemCallError, Encoding::CompatibilityError, EncodingError, NoMemoryError, SecurityError, RuntimeError, NoMethodError, NameError::message, NameError, NotImplementedError, LoadError, SyntaxError, ScriptError, RangeError, KeyError, IndexError, ArgumentError, TypeError, StandardError, Interrupt, SignalException, fatal, SystemExit, Exception, Symbol, String, Encoding, FalseClass, TrueClass, Data, NilClass, Class, Module, Object, BasicObject]

追記2010.09.20

 コメントでYuguiさんに教えていただきました! 感謝! これで決定かな。

$ ruby -e 'p ObjectSpace.each_object(Class).to_a'
[Complex, Rational, FiberError, Fiber, ThreadError, Mutex, ThreadGroup, RubyVM::InstructionSequence, Thread, RubyVM::Env, RubyVM, Enumerator::Yielder, Enumerator::Generator, StopIteration, Enumerator, Math::DomainError, Binding, UnboundMethod, Method, SystemStackError, LocalJumpError, Proc, Struct::Tms, Process::Status, Random, Time, Dir, File::Stat, File, ARGF.class, IO, EOFError, IOError, Range, Encoding::Converter, Encoding::ConverterNotFoundError, Encoding::InvalidByteSequenceError, Encoding::UndefinedConversionError, MatchData, Regexp, RegexpError, Struct, Hash, Array, Errno::ERFKILL, Errno::EOWNERDEAD, Errno::ENOTRECOVERABLE, Errno::ENOMEDIUM, Errno::ENOKEY, Errno::EMEDIUMTYPE, Errno::EKEYREVOKED, Errno::EKEYREJECTED, Errno::EKEYEXPIRED, Errno::ECANCELED, Errno::EDQUOT, Errno::EREMOTEIO, Errno::EISNAM, Errno::ENAVAIL, Errno::ENOTNAM, Errno::EUCLEAN, Errno::ESTALE, Errno::EINPROGRESS, Errno::EALREADY, Errno::EHOSTUNREACH, Errno::EHOSTDOWN, Errno::ECONNREFUSED, Errno::ETIMEDOUT, Errno::ETOOMANYREFS, Errno::ESHUTDOWN, Errno::ENOTCONN, Errno::EISCONN, Errno::ENOBUFS, Errno::ECONNRESET, Errno::ECONNABORTED, Errno::ENETRESET, Errno::ENETUNREACH, Errno::ENETDOWN, Errno::EADDRNOTAVAIL, Errno::EADDRINUSE, Errno::EAFNOSUPPORT, Errno::EPFNOSUPPORT, Errno::EOPNOTSUPP, Errno::ESOCKTNOSUPPORT, Errno::EPROTONOSUPPORT, Errno::ENOPROTOOPT, Errno::EPROTOTYPE, Errno::EMSGSIZE, Errno::EDESTADDRREQ, Errno::ENOTSOCK, Errno::EUSERS, Errno::ESTRPIPE, Errno::ERESTART, Errno::EILSEQ, Errno::ELIBEXEC, Errno::ELIBMAX, Errno::ELIBSCN, Errno::ELIBBAD, Errno::ELIBACC, Errno::EREMCHG, Errno::EBADFD, Errno::ENOTUNIQ, Errno::EOVERFLOW, Errno::EBADMSG, Errno::EDOTDOT, Errno::EMULTIHOP, Errno::EPROTO, Errno::ECOMM, Errno::ESRMNT, Errno::EADV, Errno::ENOLINK, Errno::EREMOTE, Errno::ENOPKG, Errno::ENONET, Errno::ENOSR, Errno::ETIME, Errno::ENODATA, Errno::ENOSTR, Errno::EBFONT, Errno::EBADSLT, Errno::EBADRQC, Errno::ENOANO, Errno::EXFULL, Errno::EBADR, Errno::EBADE, Errno::EL2HLT, Errno::ENOCSI, Errno::EUNATCH, Errno::ELNRNG, Errno::EL3RST, Errno::EL3HLT, Errno::EL2NSYNC, Errno::ECHRNG, Errno::EIDRM, Errno::ENOMSG, Errno::ELOOP, Errno::ENOTEMPTY, Errno::ENOSYS, Errno::ENOLCK, Errno::ENAMETOOLONG, Errno::EDEADLK, Errno::ERANGE, Errno::EDOM, Errno::EPIPE, Errno::EMLINK, Errno::EROFS, Errno::ESPIPE, Errno::ENOSPC, Errno::EFBIG, Errno::ETXTBSY, Errno::ENOTTY, Errno::EMFILE, Errno::ENFILE, Errno::EINVAL, Errno::EISDIR, Errno::ENOTDIR, Errno::ENODEV, Errno::EXDEV, Errno::EEXIST, Errno::EBUSY, Errno::ENOTBLK, Errno::EFAULT, Errno::EACCES, Errno::ENOMEM, Errno::EAGAIN, Errno::ECHILD, Errno::EBADF, Errno::ENOEXEC, Errno::E2BIG, Errno::ENXIO, Errno::EIO, Errno::EINTR, Errno::ESRCH, Errno::ENOENT, Errno::EPERM, Errno::NOERROR, Bignum, Float, Fixnum, Integer, Numeric, FloatDomainError, ZeroDivisionError, SystemCallError, Encoding::CompatibilityError, EncodingError, NoMemoryError, SecurityError, RuntimeError, NoMethodError, NameError::message, NameError, NotImplementedError, LoadError, SyntaxError, ScriptError, RangeError, KeyError, IndexError, ArgumentError, TypeError, StandardError, Interrupt, SignalException, fatal, SystemExit, Exception, Symbol, String, Encoding, FalseClass, TrueClass, Data, NilClass, Class, Module, Object, BasicObject]

findにxargsはいらない?

 タイトルは煽りぎみ。@matsuu経由。

-exec utility [argument ...] {} +
    -exec と同じですが、各 utility の起動において ``{}'' はなるべく多くのパス名と置き換えられます。この動作はxargs(1)のものに似ています。

 GNU系だけでなく、BSD系でもOK。しかも、find -print0 | xargs -0みたく、スペース入りのファイル名もよろしく処理してくれてる。

 いやー、知らなかった(←無知)。

「キリン」39巻

煮詰まらんようにな
ワンダーネットワンダーじゃ

 WONDER NET WANDER編完結。山の中で登場したあの人はあの人だよね。

「Ubuntu Magazine」vol.05

Ubuntu Magazine Japan vol.05 (アスキームック)

アスキー・メディアワークス (2010-08-31)
売り上げランキング: 388

 今回の「うぶんちゅ!」は、日本語変換のAnthyがテーマ。…いやそう来ましたか。技術ネタ的にもオタクネタ的にも突っ走っててすばらしいw。ちなみに、りさたんが食べてるのは、もずくスープ。

 Canonicalの新CEOのJane Silberのインタビューも載って、10.10について語ってる。Canonicalとして、Ubuntu OneとかNetbook Editionに力入れてるように見えた。

 Ubuntu Japanese Teamの方々が集結した「標準アプリ徹底使いこなし術」もおもしろい。「アニメ専用録画サーバを立てる」は、PT2を中心にハードからOSセットアップからステップバイステップで解説。ハードがらみでは、「ちょい古PC完全再生テク」とか「動かし隊が行く」とかもいろいろ実験している。

「さくらのVPS」にPassengerをインストール

 ひょんなことから、「さくらのVPS」のレビュー記事を、INTERNET Watchに執筆しました。

 えらく楽しい(なにより速い!)サービスで、ノリノリで書きました。文章がノリノリに見えなければ、悪いのは文章力ということで。

 記事中、共用サーバーではできないネタとして、Passengerをインストールする話を例として入れました。まぁFastCGIでもmod_proxyでもTomcatでもよかったんですが、「ApacheにRailsを入れる」の一言で説明が済みそうだったので。

 ついでなので、その手順をメモ。まぁようするに、よくある、CentOSでPassengerを動かす手順です。

Rubyをインストール

 CentOS 5.xのRubyはRuby 1.8.5なので、さすがにRailsを動かすには古かろうと、ソースからビルド。ついでなので1.9.2で。

$ sudo yum install openssl-devel zlib-devel readline-devel
$ wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p0.tar.bz2
$ tar xf ruby-1.9.2-p0.tar.bz2
$ cd ruby-1.9.2-p0
$ optflags='-O3 -pipe' ./configure --prefix=/opt/ruby
$ make -j2
$ make test
$ sudo make install
$ PATH=$PATH:/opt/ruby/bin

Railsをインストール

 ついでなのでRails 3.0など。

 sqlite3-rubyは、最新の1.3系をインストールしようとするとCentOSのsqliteが古いと言われるので1.2.5を指定。それでいいのかとか、PassengerでSQLiteかよとか、突っ込みどころはありますが、まぁサンプルなので。

$ sudo make install sqlite-devel
$ sudo gem install sqlite3-ruby --version 1.2.5
$ sudo gem install rails

Railsアプリを作る

 「WEB+DB Press」の記事の最初のままというか、scaffoldするだけのアプリを作成。まずはWEBRickで正常に動作することを確認。iptablesでポートを閉じているなら、サーバー上のw3mなり、sshトンネリング経由なりでチェック。

$ rails new blog_app
$ cd blog_app
$ rails generate scaffold post title:string body:text
$ rake db:migrate
$ rails server

 動いてるっぽければproduction環境のrake db:migrate。

$ rake db:migrate RAILS_ENV=production

Passengerをインストール

 というわけでPassengerをインストール

$ sudo yum install httpd-devel apr-devel
$ sudo gem install passenger
$ sudo passenger-install-apache2-module

 passenger-install-apache2-moduleの途中で表示された設定例を元に、/etc/httpd/conf.d/passenger.confとか作ってコピー。いっぽう、さきほどのRailsアプリは/var/www/railsとかそのへんにコピー(ホームディレクトリのパーミッションを開けるのもナンなので)。

$ sudo mkdir /var/www/rails
$ sudo cd blog_app /var/www/rails
$ sudo chmod -R apache:apache /var/local/rails

 で、Apacheを起動。

$ sudo /sbin/service httpd start

 めでたしめでたし。

 で、これを書いて気付いたんですが、広い意味ではVPSじゃなくてherokuでもできるネタだったかなと。まぁいいや。

変更2010.09.08:/var/local/rails→/var/www/rails。いやなんとなく。

「日本Androidの会 2010年9月のイベント」に参加

 「日本Androidの会 2010年9月のイベント」に参加してきました。

 今回は「電子出版」「OracleのAndroid訴訟」「会の活動に関して」の3部構成。Androidの開発ネタがほとんどない回でしたが、興味深く聴きました。

 以下、メモ

電子出版元年(イースト下川)

  • いろいろな種類の電子書籍端末を持ち込んで展示
  • (うまくいかなかった)歴史
    • 1998年 Rocket eBook
      • B&N
      • 最初の電子ブック
      • 2003年に消えた
    • 1999 Microsoft Reader
    • 1999 Adobe eBook Reader
    • 2004 Sony LIBRIe
      • e-Ink
      • Kindleもこれをまねたとジェフ・ベソスが言ってる
    • 松下Sigma Book
  • 2009年実績で、日本での電子書籍売上は米国より多い(インプレスR&D)
    • ケータイコミック
    • 今後、PC減少、ケータイすえおき、スマートデバイス拡大、という予想
  • Kindleの衝撃
    • 最初から3Gが入っていて、インターネットアクセスを意識させない。お金もとらない
    • 自費出版可能、条件を満たせば印税70%
  • nook
    • ちょっとがっかり
      • e-INKと液晶の2画面で、液晶画面のタッチ操作。使いにくい
      • 著作権切れのコンテンツが多い
  • Sony Reader
    • UI的にはいちばんすぐれている
      • タッチできる
  • Microsoft Slate PC
    • iPadの法人利用が増えているのに危機感を持ったようだ
    • 見開きに期待
  • Android Tablet
    • Adobee Digital Editions (Reader 9) があればEPUBもPDFも読める
    • Android Marketがネック
      • 何カ所にも登録しなくてはならない
  • iPad
    • Unicodeフォント、辞書
    • カウチポテトPC
    • iPadの影響でいくつかの電子書籍プロジェクトが潰れた
  • 注目
    • Google Editions
    • どれぐらいの点数で?
  • 外字問題
    • Unicodeに移行する運動
  • EPUB
    • 縦書き対応の要求仕様を提出
  • コンテンツと容量
    • 動画や音楽に比べ、テキストは時間あたりのデータサイズが小さい
    • だからKindleは国際ローミングでモトがとれる

電子書籍ビジネスのこれまでと今後の展望について(KDDI 書籍サービスグループ 権正和博)

  • 2003年から、ケータイ向け電子書籍
  • AUの電子書籍のうち、コミックが9割
    • 利用者属性:電子書籍、着うた、ゲームとも、20代女性が突出。平均利用額も非常に高い
    • 利用率自体は大きくない
      • 未利用の理由:携帯で読むのがつらそう54.5%
  • 2009年、電子書籍に特化した携帯端末biblioを出した
    • 画面が大きい
    • 電子書籍サービスの利用率が高まった
  • 専用端末の課題
    • 利用方法:外部メモリ?
    • データフォーマット:独自規格
    • コンテンツラインアップ
    • 端末価格
  • App StoreやAndroidマーケットにコンテンツがない
    • 有名コミック
    • どうやって出していくかが課題
  • 課題
    • DRM
    • データフォーマット
    • 販売方法
    • ビジネスモデルの確立
  • これらは携帯(垂直統合モデル)では提供できていた
  • LISMOサービスのひとつとして電子書籍に力を入れている
  • Q: 今後LISMOの独自形式のDRMをやっていくのか
    • A: 方式の統一と機能のせめぎあい

「Android Hacks」著者あいさつ

  • Androidは自由

AndroidをめぐるOracleの対Google訴訟を考える(星暁雄)

  • 2010年8月12日、OracleがGoogleを提訴
    • プレスリリース、訴状「特許と著作権の侵害」
    • Oracleの論点
      • Androidはモバイルの分野でJavaと競合関係にある
      • AndroidはJavaプラットフォームの特許と著作権を侵害している
      • SunからGoogleに技術者が移っているので、知っているはず
    • 特許7件
  • 翌日、Google声明文
    • Webメディアに送付(おそらくメールで)
    • 準正式なコメント。公式な性格のあるコメントはこれだけ
    • 「OracleがGoogleとオープンソースに対して攻撃している」
  • 報道多数出るが、当事者に聞いたものはほとんどない
  • 例外:WSJ
    • 産業界が警戒している
    • オラクル広報のコメント「この訴訟はGooglに対してだけ」
  • James Goslingのブログ
    • 実は訴訟を理解するための内容はない
  • Chars Nutterのブログ
    • JRubyの開発者のひとり
    • 元Sun、今は第三者(Engine Yard)という、絶好のポジション
    • 「SunとGoogleはモバイルJavaで交渉したが、まとまらなかった」
    • 「特許の内容は、技術者から見ると笑っちゃうようなもの」
    • 「OracleにはAndroidを潰す動機はない」
  • GoogleはJavaOne不参加
    • Joshua Bloch
    • 係争関係があるのでJavaについて意見を言えない
    • 裁判による分断の悲劇
  • 星分析:狙いは「お金」
    • ビジネスマンの「競合」は「商売敵」
    • OracleはJava MEのライセンス収入を得る
      • フィーチャーホン
    • Androidからは得られない
  • Javaは互換性とライセンス(お金)に厳しい
    • 互換性テストにはお金がかかる。Apacheともモメていた
  • Android
    • Dalvk VM
    • 互換性にはJavaほどこだわらない
      • 複数機種対応は開発者ががんばる
      • 実はJavaMEもそんなもの。DOJAプロファイルとか
    • Apache Harmony
      • Sunとは独立。Apacheライセンス
    • フリーで進化が速い
  • 前例
    • 似ている:SCOのLinux訴訟
      • 論点はオープンソースの知的所有権問題
    • 似てない:Sunの対Microsoft裁判
      • 争点はライセンス契約(故意の非互換性)と独禁法だった
  • 議論の材料
    • Googleは戦うだろう
    • 「Googleとオープンソースへの攻撃」の意味
      • あいまいな特許でお金をとる、という危険性
      • 今後のオープンソース全般に禍根を残す可能性
  • 星意見
    • OracleにはAndroidを潰す理由はない
    • GoogleにはAndroidの開発をスローダウンする理由はない
  • SCOのLinux裁判は7年続いた
    • そのぐらい続く可能性がある
  • FUDに気をつけろ
    • 不安を煽る情報、意見
    • そういう意見に耳をかたむけないほうがいい
  • Q: 日本市場への影響
    • A: ほぼOracleとGoogleの間の話
  • Q: Dalvik自身を独自に改良している人への影響は
    • A: Apacheライセンスにもとづいた開発なのでOracleからの訴訟は起こらないはず。訴訟の結果Dalvikに変更命令などが出たら影響があるかもしれないが、それはそもそも問題

Android Application Award 2010(日経BP 菊池隆裕)

  • コンテスト、専門サイト、イベントの3つの連携
  • 2010春の応募
    • 過半数が個人
    • 従来の携帯に比べると、ゲーム系の比率が低い
    • 49%が30代
    • 東京、関東が多い
  • 2010冬
    • 春の課題
      • 応募作の露出度をあげたい
        • 外部のメディアとの連携
        • ソーシャルメディア
    • 多様性
      • マルチデバイス、マルチキャリア
  • スケジュール
    • 9月中旬、開催概要を発表
    • 1月上旬、応募締め切り
    • 2月、表彰式
  • 東京ゲームショウでAndroid特設ブース
    • 参加者募集
    • ただしゲーム・エンタメ系に限る

iアプリプロジェエクト(日経BP 大谷晃司)

  • iアプリアドバンスアワード(コンテスト)
  • iアプリスクエア(コミュニティサイト)
  • iアプリデベロッパーズキャンプ(ハンズオン)
  • 開発者コミュニティがない
  • 11月末にドコモマーケットiモード版
    • 課金
    • ホスティング
    • いままで個人に公開されていなかったAPIの一部公開

テスト部の紹介(宮田友美)

  • 必要性
    • SDKのバージョンや解像度
    • 開発にはテスト
    • ロジックのテスト
    • UIのテスト
  • 当分はdebの中で活動
  • テスト部員募集
  • 助けてくれる人募集

翻訳プロジェクトの紹介

  • Androidに関するドキュメントの日本語翻訳
    • SDK APIおよびSDK付属のドキュメント
  • スタッフ
    • コーディネーター1名
    • トランスレーター現在12名
    • レビューアー現在1名(コーディネーターの兼務、まずい)
  • レビューアーが圧倒的に不足
    • 急募
  • ほか募集
    • 翻訳済みドキュメントの提供者
    • 翻訳メモリの入力
    • 翻訳メモリ

「WEB+DB PRESS」vol.58

WEB+DB PRESS Vol.58
WEB+DB PRESS Vol.58
posted with amazlet at 10.09.06

技術評論社
売り上げランキング: 333

 Rails 3特集がわかりやすかった。概要すぎも細かすぎもせず、その間のちょうどいいところでRails 3の新しいレールを見せてくれている。RubyKaigiに行く電車で読んで、予習になった。

 Emacs特集は、Emacsの使い方をカスタマイズを中心に解説。そこはかとなくMacをメインに想定しているっぽい(依存はしていない)。

 HTML5×CSS3特集は、jsdo.itをやってるカヤックによる解説。

 アルゴリズム実践教室を読んで、ようやくTF-IDFの概要がわかったような気がする。

 そのほか、Cassandraとか、Yokohama.pm×PerlCasualでやったWebAPI入門とか、PHPの文字コードとか、通知のUIとか、Ruby 1.9.2とか、ExtGWTとか、盛りだくさん。

 ちなみに、「圏外からのWeb未来観測」で、専用SSLはAmazon EC2が一番安かったという話が出ていて、ちょっとしたへぇだった。

「Software Design」2010年9月号

 memcachedとかLiveJournalとかGearmanとかPerlbalとかMogileFSとか作ったBrad Fitzpatrickのインタビューが載ってて面白かった。

 第1特集の「統合システム構築術」は、ActiveDirectoryとLDAPをつなげるときの話から、OpenAMやSAMLによるシングルサインオン、Google Appsをシングルサインオンにつなげる話まで。それ系の現場にいる人に役立ちそう。

 第2特集の「中小規模サーバの飼い方・育て方」は、前半がsshのTips、後半がサーバーの電源や回線の二重化を実例をまじえて解説。

 「Ajax/JavaScriptハッカー養成講座」は、前半はソースコードの圧縮の話だけど、その流れで後半は難読化・顔文字化に…

 そのほか、タフ仕様のデジタルガジェットとか、Emacsのorg-modeとか、konohaの文法設計とか、Ubuntuのtwitterクライアントとか、ChromeのNaClとか、インターネットトラフィックの壁とか。

 ちなみに、「Agile Conference Tokyo」の詳細なレポートが、「WEB+DB PRESS」と共通で載っていた。

「バリバリ伝説」

 ScanSnapにかける前に読み返したら、やっぱり面白くて読みふけってしまった。裁断してから気付いたけど、いま新品じゃ買えないのか。ああ1980年代。とりあえず買えないけどワイド版1巻のアフィを貼る。

 第1部後半が話にのぼることが多くて、たしかにあそこもいいんだけど、やっぱり気分が盛り上がるのは第3部のWGP編だなぁ。実在する世界各地のサーキットを転戦しながら、実在のトップライダーと戦い、苦戦する中から頭角をあらわしてくる主人公の天才ライダー。パドック生活、チームの各自の活動、そして熱狂する観客。あー思い出しただけでまた興奮してくる。

 あと、第3部では、意外とメカの太田君の存在がいい。読者の視線と近いって意味で。いやー、自分を含めて、太田君の影響でTレンチを使い出した連中がいたなぁ。

Ruby 1.9.2のReadline.readlineとReadline.line_bufferのエンコーディングの非互換

$ cat foo.rb
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'readline'

s = Readline.readline '> '
p s.encoding
p Readline.line_buffer.encoding
$ ruby foo.rb
> 
#<Encoding:UTF-8>
#<Encoding:ASCII-8BIT>

 Readline.readlineはLocaleを元に文字コードを決めてる一方、Readline.line_bufferはとりあえずASCII-8BITにしてる模様。

 ちなみにこれは、RubyコミッターでLinuxコミッターのkosakiさんとの対話が元ネタです。

追記2010-09-06

 コメントいただいたように、kosakiさんの報告により、速攻で対応されました。ちゃんとテストも追加されてる。すごい。

termtterを呼ぶ便利なシェル関数

 temtterを呼ぶシェル関数tを定義してみます。

$ t() { termtter -c -r "$*"; }

 twitterへの投稿はこんな感じ。

$ t u とーこー

 自分が最近どんなの投稿したかなーとか調べるとき。

$ t l emasaka

 最近どんなmentionもらったっけかなーとか。

$ t r

 nullさんをフォローするかなとか。

$ t follow null

 そんな感じで、termtterのコマンドをtコマンドのサブコマンドみたく使えて便利。

「日経Linux」2010年9月号

 特集2「Linuxの日本語環境を極める」のPart 2「日本語トラブルとその対処法TIPS 17」を執筆させていただきました。ターゲットは「Ubuntu 10.04やFedora 13のエンドユーザーが出あう、あるあるネタ的な文字化けシチュエーションとその対策Tips」というところです。このへんのディストリビューションだと、エンドユーザーが普通に使うぶんにはそれほど大変なトラブルはないと思うので、iconvやnkf、convmvの使い方とか、Emacsやvimでの文字コード指定とか、そのあたりのFAQ的なコネタを紹介しています。ZIPファイルの日本語ファイル名問題は、Ubuntu 64bitやFedoraではどうにもならないので、ZIPを展開する数行のPerlコード片をサンプルとして載せました。

 ちなみに、日本語入力のPartなども打診をいただいたのですが、SKKユーザーなので変換精度の比較の感覚がないため、辞退させていただきました。さらにちなみに、私は雑誌原稿などもLinux+Emacs+ibus-skkで書いています。

 ほかの記事では、TVや動画関連が多いですね。「Linuxでハイビジョンビデオ編集」とか「LinuxでBlu-rayを使う」とか「ハード解析によるLinuxドライバの作り方」とか。あと、特集1は、タブレットPCやタッチパネルノートPCの話。タッチ関係はまだ大変そう。

 なにげに「システムトラブル解消実践テクニック」が、カーネルダンプとその解析を扱っていてコア。「ファイルシステムの真髄」はNFSの仕組みを解説していて参考になりました。Matzさんの連載は、ちょうど発売のころに話題になったmemcachedとその互換ソフトについて。

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly