2009年 07月 05日

ゆの in Scala

//#! scala

object X {
	var mes = ""
	def / (o: => Any) = this
	def < (m:Symbol)  = { mes = m.toString; this }
	def ! () = { println("ひだまりスケッチ×365 " + mes + "!") }
}

(0 to 10).foreach {
	X / _ / X < '来週も見てくださいね!
}

ふつうにかくとふつうにできてしまうのでおもしろくない。 → これがおもしろい http://d.hatena.ne.jp/kmizushima/20080710/1215654623

don't say sanitize

2009年 07月 04日

Scala で WAF を書きはじめる、前の第一歩

じゃう゛ぁとかよくわからないし的なレベルではじめようとすると前段階で躓くので、Rack とか HTTP::Engine 的に、あとはハンドラを書けばokみたいな状態にするまでのメモ

Java なウェブアプリは WAR とかいう形式にしてやると、サーブレットコンテナ (Jetty とか TomCat とか?) というものがよしなに起動してくれるようになるらしいです。GAE/J もそう。なので、それに沿ったものを作ります。

.
|-- src
|   |-- META-INF
|   |   `-- jdoconfig.xml
|   `-- net
|       `-- lowreal
|           `-- skirts
|               `-- HttpRequestDispatcher.scala
`-- war
    |-- WEB-INF
    |   |-- classes
    |   |   |-- META-INF
    |   |   |   `-- jdoconfig.xml
    |   |   `-- net
    |   |       `-- lowreal
    |   |           `-- skirts
    |   |               `-- HttpRequestDispatcher.class
    |   |-- lib
    |   |   `-- scala-library.jar
    |   |-- logging.properties
    |   `-- web.xml
    |-- css
    |   `-- base.css
    |-- images
    |-- index.html
    |-- js
    `-- static

war ディレクトリ以下が公開される (WEB-INF を除く) ディレクトリで、WEB-INF 以下にアプリケーション実体があり、WEB-INF/web.xml でルーティング設定をします。

web.xml ではふつう、URI -> Servlet の対応を XML で書くっぽいですが、そこらへんのことをむしろ自分でやりたいわけなので

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
  <filter>
    <filter-name>HttpRequestDispatcher</filter-name>
    <filter-class>net.lowreal.skirts.HttpRequestDispatcher</filter-class>
    <init-param>
      <param-name>foo</param-name>
      <param-value>hogehoge</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>HttpRequestDispatcher</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

というふうにフィルタで全部横取りします。

あとはフィルタ書けばいいだけなので

package net.lowreal.skirts

import javax.servlet._
import javax.servlet.http.{HttpServlet, HttpServletResponse, HttpServletRequest}

class HttpRequestDispatcher extends Filter {
  var static = """^/(?:css|js|images|static).*""".r
  val through = """^/_.*""".r
  var router:HttpRouter = null

  def init (filterConfig: FilterConfig) = {
    println("initializing...")

    val config_foo = filterConfig.getInitParameter("foo")

    println("initialized config: " + config_foo)
  }

  def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) = {
    // ここでなんかする
    (request, response) match {
      case (req: HttpServletRequest, res: HttpServletResponse) =>
        val path    = req.getRequestURI
        val statics = static
        path match {
          case statics() =>
            chain.doFilter(request, response)
          case through() =>
            chain.doFilter(request, response)
          case _ =>
            // router.dispatch(req, res)
        }
      case _ => chain.doFilter(request, response)
    }
  }

  def destroy () = {
    println("destroy")
  }
}

アプリケーション起動時に init がよばれ、リクエストごとに doFilter がよばれてくるので、doFilter で request, response を適当にいじくればいいことになります。ここで chain.doFilter(request, response) をすればデフォルトのハンドラが呼ばれるっぽいので、普通は war 以下の static なものがそのまま返されます。

throught() は GAE/J のテストログインハンドラのためのやつです。(/_login? とかを GAE/J 側がハンドルしてる)

2009年 07月 03日

Android 環境構築

きたる 7/10 に docomo から Android ケータイがでるので機種変 (+ キャリア変更 SB → Docomo) をしたい。が、まじでめんどいのでメモ……

名義の関係で MNP を利用できないっぽくてとても困る。名義人との距離がありすぎるので、本人確認書類の原本を安全に借りることができない…… (SSH/SCP できればいいのに) 前に帰ったときに名義人変更しとけばよかった。

なのでやるとしたら

  • 新規契約して旧番号を連絡先にしている機関に手続しまくって旧番号を捨てる
    • 現実的じゃない……
      • 会社・金融機関・住宅・友達・あとなんかあったっけ
  • 二重契約にする
    • 既存のケータイをホワイトプランオンリーにして 980/month にする?
      • 緊急用にしか使わないケータイを維持し続けることになる (最低でも2年ぐらいは……)
      • ないなー
  • 7/10 を諦めて次に実家に帰ったときに名義変更・MNP 手続きをしてくる
    • 8月に帰るつもりなのでこれが一番現実的かなぁ

gerry++

食べすぎた……

2009年 06月 30日

葵紋 (二葉葵)、これは久我神社 (上賀茂神社からは少し離れたところにある)

葵系の紋は徳川の三葉葵 (水戸黄門における「この紋所」) もこの系統とか Wikipedia に書いてあった。

ref. 名字と家紋_column(葵)

あと松尾大社にいけば北西東が揃うのか……

gerry++

ものすごいひどい下痢だった。原因がわからない……