ビット演算子の恐怖
PHPは暗黙の型変換をしてくれます。
余計なお世話なことが多いですが、適当プログラマには便利な場面もあります。
さて、ビット演算。フラグを複数設定したい場合なんかにたまに使いますが、こいつがまた余計なことをしてくれます。
なんと、文字列がビット演算できる!
データ型の変換に注意しましょう。両辺のパラメータが文字列の場合、 ビット演算子は文字の ASCII コードで演算を行います。
どうしてこうなるんだよ!!!!!!
じゃあ、文字列同士じゃない場合は?
試してみた。
<?php $a = '100'; $b = '20'; $c = 20; $d = 'foo'; var_dump($a | $b); // 数値へ変換可能な文字列同士 var_dump($a | $c); // Intと数値へ変換可能な文字列 var_dump($a | $d); // 数値へ変換可能な文字列と変換できない文字列 var_dump($c | $d); // Intと数値へ変換できない文字列 /* Output: string(3) "300" int(116) string(3) "w" int(20) */
- 文字列同士だと、asciiコードによる演算を行う
- 文字列同士じゃない場合は、Intへ暗黙の型変換されてるっぽい
もっとも考え得るはまりポイントとしては・・・「数値文字列同士をビット演算して、意図とは全く異なる結果が返ってくる。」ですかね。
いつも型を意識していない場合や、DBやテキストから数字を取得した時なんかは特に要注意。
おまけ
本当に内部でIntに型変換 しているらしい。あほか。
<?php var_dump(true | 20); // true と Int var_dump(false | 20); // false と Int var_dump(2.5 | 3.3); // float同士 /* Output: int(21) int(20) int(3) */
というわけで
PHPは本当に余計なおせっかい焼きのkuso
素晴らしい言語ですね!!!!
nginx + passengerで超適当なRails環境を作る
- 2010/03/18 ディレクトリを分けた場合のパス指定が間違っていたので修正
自分専用redmineを動かしているサーバが貧弱すぎて、Apache+passengerだと眠くなるくらい遅くなる。
nginxなら少しは軽くなるかなーとか適当に考えて入れてみる。
使った環境:
- CPU: Atom 230
- Mem: 2GB
Passengerを入れる
$sudo gem install passenger
nginxの依存モジュールを入れておく
$ sudo apt-get install libpcre3-dev libssl-dev
nginxモジュールを入れる
$ passenger-install-nginx-module
nginxのソースコードのディレクトリと、インストール先のディレクトリを指定。
configureオプションを指定すると、nginxがmakeされる。
nginx.confの編集
nginxモジュールインストール完了後に設定例が出てくるので、その通りに追記。
http { ... passenger_root /home/user/.gem/ruby/1.8.7/gems/passenger-2.2.4; passenger_ruby /local/ruby/1.9.2/bin/ruby1.9; ... server { listen 80; server_name example.com; root /local/nginx/html/hoge; passenger_enabled on; passenger_base_uri /hoge; # auth_basic "Restricted"; # auth_basic_user_file htpasswd; } }
通常のディレクトリとRailsのディレクトリをServer Nameで分ける
普通のページとRailsアプリを同時に動かして、どちらにもbasic認証をかけておきたい!
てことで設定変更。
locationの指定に気づくまでに少しかかった。
http { ... passenger_root /home/user/.gem/ruby/1.8.7/gems/passenger-2.2.4; passenger_ruby /local/ruby/1.9.2/bin/ruby1.9; ... server { listen 80; server_name example.com; root html/hoge; location / { auth_basic "Restricted"; auth_basic_user_file htpasswd; } } server { listen 80; server_name example2.com; root html/example2.com; passenger_enabled on; passenger_base_uri /hoge2; rails_env production; location / { passenger_enabled on; auth_basic "Restricted"; auth_basic_user_file htpasswd; } } }
nginxの設定、どこかにまとまった資料とかないかしら。
できれば日本語か英語で・・・
TokyuRubyKaigi#01に行ってきた
当日スタッフとして参加。戦場ビデオカメラマンからカメラを受け取って、録画したりもにょもにょしてました。
以下、感想というか・・・
やったこと
開始前
- 打ち合わせと軽く買い出し。
- 設営。主にカメラとiMovieの設定。
LT中
- 録画スイッチを見つめながらビール & 日本酒
- 皆様食べ物をたっぷり持ってきてくれてました。
こっそりustしてみたり- 映像越しにLT見てました。内容は酔ってて覚えてn(ry
終了後
- 会場片付け・・・中に@kukoさんにご挨拶。
- 気づいたら片付けほとんど終わってました。ごめんなさい。
その後
- 品川で2次会的な何か
- 途中からの記憶がなく、帰りに3度ほど寝過ごすという醜態でした。
- ご迷惑かけた方がいましたら、本当にすみません。
感想
- 録画した動画は結構頭が切れてるのが多いです。ごめんなさい。
- 映像いじったの初めてだったり。各カンファレンスの配信職人の人達はえらいです。すごいです。
- 義侠(日本酒)うまかった!@koichirooさんありがとうございます!
- @kukoさんはすばらしい人でしたよ!!!*1
以上、食って飲んでLT聞いてとゆるくて楽しい時間でした。
皆様お疲れ様でした!
*1:書けと言われたので
GREE オープンソーステクノロジー勉強会#19 に行ってきた
Scalaのと書く順番が前後してますが・・・
第19回オープンソーステクノロジー勉強会に行ってきました。
以下、メモ晒しと雑感。
講師: 白石さん@あゆた
html5-developers.jp @google group
HTML5 ってなに?
- HTML 最新バージョン。新要素、属性が多い。
- 10 月に最終ドラフト公開。
- 勧告にはまだまだ遠い (2022 年予定)=>実装されているものから使う。
- 仕様が分かれている
- マークアップ
- アプリケーション
HTML5 の基本
- content-type, file extemtion は変わらない
- タグの種類がすごく増える。
- 日付、 progress, meter, command etc...
新要素を使ったマークアップ
- アウトラインを構成する要素
- スタイル定義の要素には div を使う
- 独立したセクションの要素
- RSS で配信されてもいいようなもの
HTML5 では全てがセクションに所属する。
セクションは全て独立した要素である。
アウトライン = セクションの入れ子構造
セクションの構造を意味のある (セマンティックな) 要素で表す
=> プログラムから文書の構造がわかりやすくなる
特徴的な要素
フォーム要素
- 日付やメールアドレス、電話番号などのフォーム要素が増えた
- Opera では実装が進んでいる
- 入力値のヴァリデーションが属性値で制御できる。
- type での自動チェック
- 正規表現でのチェック
- オートコンプリートの実装が可能
- :list => datalist & option
その他の要素
- ドラッグアンドドロップ API
- IE での実装を標準か
- 外部アプリケーションとの連携が可能
- MIME type を指定してファイルの受け渡しが可能
- クロスドキュメントメッセージング
- 異なるウインドウ間でメッセージの受け渡しが可能
- iframe 内と通信したり
- ex) iGoogle のガジェット間通信 (ガジェットは iframe)
関連 API
アプリケーションキャッシュ
- Gears みたいなにローカルにキャッシュができる
Web Database
- クライアント上で動作する RDB
- SQL 使用可
- ドメインごとに領域が分かれている
- 1 ドメインで複数 DB 保持可
- 非同期 API と同期型 API が存在する
Web Strage
- key-value 型のストレージ
- Local strage: 永続的
- Session strage: ウインドウごと
- 既に IE8 で利用可能
Web Workers
- バックグラウンドで動作するスレッド
- 複雑になる JS アプリには必須
- スレッドとは厳密な意味では異なる
- 変数の共有不可
- メッセージング API を利用する
- Worker から DOM をいじるなども不可
- 辛い点
- Worker はデバッグ不可。ログ出力もメッセージ API 経由
- 実装ライブラリ
- fakeworker.js
- AlexService
Web Sockets
- 双方向通信を行う API
- サーバ側にも専用の実装が必要
- Port:80, 443
まとめ
- HTML5+API で Web アプリの可能性が広がる!
雑感
- ブラウザ自体がアプリケーションプラットフォームになる印象
- RDBやKVSの内包に注目。
- インターフェースもさらにリッチにできる。
- 簡単なアプリはブラウザだけで完結する。サーバサイドは同期するだけになるかも。
- HTML5 + CSS3 で注目されているが、いつのまにか JS も標準に組み込まれているような。
- HTML が JS を取り込んだという意見も
- HTML5 の要素には JS 前提のものが多い
- とりあえず覚えきれない。仕様でかすぎ。
- なぜかMS系の環境が連想された。特にExcelとか。
ともあれ、クライアント環境の強化によって、Webアプリケーションの様子ががらりと変わりそうな感じがします。
Scala-hack-a-thon#1に行ってきた
Scala Hack-a-thon #1 : ATND
Scalaやるやる言いつつ全然やれてなかったので、行ってきました。
会場の様子
- ほぼ満席であったが、恐ろしいほど無言。
- ただしtwitterは大にぎわい。
やったこと
Emacs scala-mode
急いでメモ。
ダウンロード
svn co http://lampsvn.epfl.ch/svn-repos/scala/scala-tool-support/trunk/src/emacs/ scala-mode
設定
;; elispを溜め込んでいるディレクトリが ~/lisp ;; scalaはMacportsでインストール ;; scala-mode (add-to-list 'load-path "~/lisp/scala-mode") (add-hook 'scala-mode-hook '(lambda () (yas/minor-mode-on))) (setq yas/scala "~/lisp/scala-mode/contrib/yasnippet/snippets") (yas/load-directory yas/scala) (require 'scala-mode-auto) (setq scala-interpreter "/opt/local/bin/scala")
キーバインド
- Evaluate Buffer
- C-c C-b
- Evaluate Region
- C-c C-r
- Load file in Interpriter
- C-c C-l
ファイルオープン
C-x C-f hoge.scala