[Scala] machの深いネストの予防方法(についての確認&練習)

https://gist.github.com/2382341についての確認&練習。

// see https://gist.github.com/2382341

// scalaz for only solution3
import scalaz._
import Scalaz._

object SolutionForMultiNestedMatchforMyStudy {

  def f(num: Int): Option[Int] = {
    num match {
      case 0 => Some(1)
      case 1 => Some(2)
      case 2 => Some(3)
      case _ => None
    }
  }

  def solution1(num: Int): Int = {
    f(num) match {
      case Some(v1) => {
        f(v1) match {
          case Some(v2) => {
            f(v2) match {
              case Some(v3) => v3
              case _ => -3
            }
          }
          case _ => -2
        }
      }
      case _ => -1
    }
  }

  def solution2(num: Int): Int = {
    val v1 = f(num)
    val v2 = v1.flatMap(f)
    val v3 = v2.flatMap(f)

    (v1, v2, v3) match {
      case (Some(_), Some(_), Some(result)) => result
      case (Some(_), Some(_), None) => -3
      case (Some(_), None, None) => -2
      case _ => -1
    }
  }

  def solution3(num: Int): Int = {
    f(num).toSuccess(-1).flatMap(f(_).toSuccess(-2)).flatMap(f(_).toSuccess(-3)).fold(identity, a => a)
  }

  def solution4(num: Int): Int = {
    (for {
      v1 <- f(num).toRight(-1).right
      v2 <- f(v1).toRight(-2).right
      v3 <- f(v2).toRight(-3).right
    } yield v3).merge
  }

  def solution5(num: Int): Int = {
    val v1 = f(num).getOrElse { return -1 }
    val v2 = f(v1).getOrElse { return -2 }
    f(v2).getOrElse { return -3 }
  }

  def example {
    (0 to 3).foreach{n => println(solution1(n))}
    println
    
    (0 to 3).foreach{n => println(solution2(n))}
    println
    
    (0 to 3).foreach{n => println(solution3(n))}
    println
    
    (0 to 3).foreach{n => println(solution4(n))}
    println
    
    (0 to 3).foreach{n => println(solution5(n))}
  }
}

Retractive Scroll Views for Android

今さらですがGitHubの練習がてら、Android向けのライブラリをGitHubにアップしました。
iOSみたいに、びよーんとオーバースクロールできるスクロールビューです。複数のスクロールビューを同期して動かすこともできます。Android 1.6 (API Level4)から使えます。

https://github.com/tmyymmt/Retractive-Scroll-Views-for-Android

[youtube]http://www.youtube.com/watch?v=k03AD98olUY[/youtube]
[youtube]http://www.youtube.com/watch?v=9KZgaGCwQgI[/youtube]

Google Gadget – ピンポイント天気予報 不具合修正

不具合を修正しました。
結論としては私のミスでした。すみません。
皆様、ご迷惑をおかけいたしました。m(_ _)m

原因:
コードの途中で_IG_AdjustIFrameHeightを呼んでいたので、最後の最後で呼ぶように修正したところ正しく動作しました。 iGoogleの実装が変更されてミスが発現したようです。(今まで動いていたのが謎。昔は内部で遅延実行していたのかも。)

Vista ファイルの関連付け *.jarファイルをダブルクリックで起動

Vistaでファイルの関連付け

  1. コントロールパネル → 規定のプログラム → ファイルの種類またはプロトコルのプログラムへの関連付け

Vistaで*.jarファイルをダブルクリックで起動

  1. Java 6 update 7 をインストール
  2. スタート → ファイル名を指定して実行 → regedit
  3. HKEY_CURRENT_USER\Software\Classes\Applications\java.exe\shell\open\command
  4. データに「"C:\Program Files\Java\jre1.6.0_07\bin\javaw.exe -jar" "%1"」を入力

RDFの表記法

RDFの表記法はいくつかあるが、RDFを学ぶ段階でRDF/XMLは使わない方が良いだろう。
はっきり言ってRDF/XMLは分かりにくい。コード上で機械に扱わせる時に初めて使用するくらいで十分。

一番分かりやすくいのは図。まずは図を描く。

文字で書くならn3が分かりやすい。
ちなみにRDFクエリ言語のSPARQLもn3に近い書き方。