2014年2月17日月曜日

ファイルをgit管理から外す

不要になったファイルをdeadwood.txtとすると以下の手順でgit管理から外せる
1. git rm でまずファイルを削除
$ git rm --cached deadwood.txt
2. deadwood.txtを.gitignoreに追加する

上記手順だとdeadwood.txtのファイル自体は削除されず、gitから消されるだけ。
なお、.gitignoreに追加するだけでは反映されないことがあるらしい。

その場合下記手順を実行する。
1. $ git rm -r --cached .
2. $ git add .

git rm -r は、オプションなしで行うと全て消し去り、インデックスにステージしてしまう。
# それにしてもITってインデックスって言葉いろいろな意味で使い過ぎでは…。

参考:Qiita - .gitignoreの設定を反映させる

2014年2月10日月曜日

Rubyの排他的論理和(xor)

料金設定に関するコードで、
unless a xor b # 擬似コード
つまり「排他的論理和の否定」という条件が普通に必要になりました。

Rubyでは、シンプルに「^」(ハット)で書けるらしい。

a ^ b # aとbの排他的論理和
true ^ true #=> false
true ^ false #=> true
false ^ true #=> true
false ^ false #=> false

演算子「^」は引数は真偽値か数値しか取らない。排他的論理和が必要な場合、引数がBooleanでない場合にはブール値に変換してやる必要がある。
これをしないと、型によっては想定外の結果が返ってくる。
7 ^ 4 #=> 3
[1,2] ^ [3,4] #=> NoMethodError: undefined method `^' for [1, 2]:Array
^というメソッドを持っていない型はエラーが出るし、数値だとビット演算の結果が返ってくるので、7(10) ^ 4(10) = 111(2) ^ 100(2) => 011(2) => 3(10)となるわけ。
7はtruthy、4はtruthyだから、truthy^truthy=falsy、と思っていると、戻り値が3(truthy)。

そこで、ブール値への変換ですが、例えば「!!」を使う。
!!a ^ !!b #=> aの真偽値とbの真偽値の排他的論理和
!!7 ^ !!4 #=> false
!![] ^ nil #=> true
String(!!"hoge")だと確かに変換はされましたが、
warning: string literal in condition
warningが出ました。ユーザ定義クラスとか配列だと特に問題なかった。
Railsだったらpresent?を使うと便利かも。
a.present? ^ b.present?
ただ、present?は、{}(Hash)、[](Array)、""(String)はfalseを返すのでご注意。
"".present? #=> true
!!"" #=> false
その方が都合がいいケースはもちろんあるでしょう。

2014年1月24日金曜日

CreateJSからWebGLを使う

CreateJSがWebGLを公式にサポート!爆速になったHTML5での描画パフォーマンスを検証してみた

従来版WebGL版の比較が面白い。
この気持ち悪い黄色いのを生成する数はページ下で指定できる。
デフォルトを500に設定してみると違いが顕著にわかる。


2014年1月23日木曜日

Rubyのmoduleのmix-in

moduleをincludeしてclassにmix-inした際には、module内のインスタンスメソッドをそのclassのインスタンスメソッドとして呼べるようになる。

module Asdf
  def qwer; "qwer"; end
end

class Zxcv
  include Asdf
  def sdfg; qwer; end #=> "qwer"
end

class Xcvb
  def sdfg; Asdf.qwer; end #=> NoMethodError: undefined method `qwer' for Asdf:module
end
それだけ。ただそれだけ。

2014年1月20日月曜日

ライセンスに関して

ライセンス

GitHub 上で公開されているソースコードの半分はライセンス的に問題あり
原記事タイトルは"Half of GitHub Code Unsafe To Use (If You Want Open Source)"
要は、「GitHub上のコードの半分はオープンソースライセンスが指定されていないので、勝手に使うのは著作権侵害になるよ」という指摘。(中のコメントにもあるように多少この記事タイトルの日本語訳には語弊がありそう。)


1st post

技術関連の記事を書く場所が無かったのでこちらに。
とは言っても大概自分用メモ帳どまりかとは思う。

RunnableとDart

Runnableの上にGoogleがDart専用チャネルを作った…新言語の試用が容易に

Runnableをそもそも知らなかった。
コードを書いて実行できるウェブサービスで最近知ったのはjsdo.itとかwandboxとか。CoffeeScript公式のTRY COFFEESCRIPTも便利。

Railsのリアルタイム通知