by shigemk2

当面は技術的なことしか書かない

Uniform access principle

All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation

Uniform access principle - Wikipedia, the free encyclopedia

と訳される。

属性をフィールドとメソッドのどちらで実装するかによってクライアントコードが影響を受けてはならない

seesaawiki.jp

とも、

別の言葉に置き換えると、フィールドへのアクセスは、それがフィールドであるか、値を返すメソッドであるかを露呈してはならないということ

関数型の考え方: 不変性

とも言われる。Programming Scalaだとこういうふうなコードで説明されている。 確かにこの例だと、nameがdefかvalかは関係なく、フィールドの値にアクセス出来ることを示している。

trait AbstractNameTrait {
  def name: String
}
class ConcreteNameClass extends AbstractNameTrait {
  val name = "ConcreteNameClass"
}
println(new ConcreteNameClass().name) // => "ConcreteNameClass"

collectというか、パターンマッチの謎挙動

scala> val apple = "apple"
apple: String = apple

scala> val Apple = "Apple"
Apple: String = Apple

scala> Seq("apple", "orange").collect {case apple => "got an apple" }
res0: Seq[String] = List(got an apple, got an apple)

scala> Seq("apple", "orange").collect {case Apple => "got an apple"  }
res1: Seq[String] = List()

scala> Seq("apple", "orange").collect {case "apple" => "got an apple"  }
res2: Seq[String] = List(got an apple)

最初の挙動がよくわからないけど、

collectのソースコードはこんな感じっぽい

  def collect[B, That](pf: PartialFunction[A, B])(implicit bf: CanBuildFrom[Repr, B, That]): That = {
    val b = bf(repr)
    foreach(pf.runWith(b += _))
    b.result
  }

もしかして、既にappleの中身がパースされてくっついているとかそういう落ちだろうか。最初のcollectの挙動が良くわからない。

Refused to display in a frame because it set X-Frame-Options to DENY

developer.mozilla.org

つまりどういうことかというと、こういうHTMLがあったとして、 gist.github.com iframeのなかのリンクをクリックしようとすると、タイトルのようなエラーになるっていう話。

この動作がなぜダメかというと、IPAや徳丸先生が詳細に説明してくださっており、「クリックジャッキング」対策(iframeで見えている部分と同じ箇所にもう一つ透明な別のページを仕込み、意図しない動作をさせること)としてこういうヘッダーオプションがついた。 IPAから「クリックジャッキング」に関するレポート出ました | 徳丸浩の日記 http://www.ipa.go.jp/files/000026479.pdf

で、このオプションはApacheとかnginxとかサーバーサイド側で制御してる(クライアント側でもこのオプションをDENYじゃなくさせることは出来るっぽいが)