Monthly Archives: 5月 2009

Log

Evernoteでタイトルを検索する方法

Ron’s Evernote Tips – Search Tip You can search for notes that contain…から。
検索フィールドにintitle:hogeと入力するとhogeを含むタイトルが検索できます。

Log

型推論について調べてみた

型推論 – Wikipedia
型推論とは – はてなキーワード

によると、
動的型付言語では実行時に型が決まるので型の宣言は不要だが、静的型付言語ではコードで変数や関数の型を宣言する必要がある。この変数や関数の型の宣言をしなくてもよくなるのが型推論らしい。関数の型シグネチャなどから自動的に型を決定してくれる。
var result
result = x + 1
だとhogeはintだろうと推論してくれる。

メリット

  • 誤った型を用いる事によるバグは回避できる。
  • 記述をアルゴリズムに集中できるのでプログラムの抽象度が上がる
Log

Scalaの関数

Scalaで関数を作成してみます。

def max(x: Int, y: Int): Int = {
    if (x > y) {
        return(x)
    } else {
        return(y)
    }
}

大きい方の数値を返す関数です。
def 関数名(引数: 型[, 引数: 型]): 返値の型 = {}
で定義するということです。

最後に評価したものが返値になるので、 以下のようにreturn(x)という部分はxのみでもいいようです。

def max(x: Int, y: Int): Int = {
    if (x > y) {
        x
    } else {
        y
    }
}

さらに返値であるxやyがIntだと型推論できるときは、以下のように返値の型は省略できるようです。

def max(x: Int, y: Int) = {
    if (x > y) {
        x
    } else {
        y
    }
}

ただし、return(x)とした場合は型推論できない(?)ということで、返値の型の省略ができませんでした。型推論についてよく知らないので、次は型推論について調べてみようと思います。

Log

SafariからNambuにURLをコピペするスクリプトを書いてみた

最近NambuでTwitter使ってるんですが、SafariからURLをCopy & Pasteするスクリプトを書いてみました。

NambuがAppleScriptに対応していないので、key codeを送って操作してます。keystroke使うとDvorak環境では違うキーになってしまいます。

ショートカットキー が割り当てられていないのでNambuのURL短縮には対応していません。そのかわりTiny URL AppleScript for Safari – MacTipsを参考にして短縮サービス使ってます。
Twitterが自動的に短縮してくれるようなので、スクリプトでは短縮しないように変更しました。またURLだけでなくタイトルもコピーするようにしました。

tell application "Safari"
	tell front document
		set str to name & " " & URL
	end tell
	set the clipboard to str
end tell

tell application "Nambu"
	activate
	tell application "System Events"
		key code 37 using command down
		key code 47 using command down
	end tell
end tell
Log

Scalaスクリプトをshebang行で実行するにはどうすればいいの?

$ scala hoge.scalaではなく、Scalaスクリプトに実行権限をつけて$ hoge.scalaで実行したいんです。で、

#!/usr/bin/env scala
print("abc")

とやってみました。
error: script file does not close its header with !# or ::!#
one error found
と、おこられました。

/opt/bin/scalaの中身ってどうなってるの?というわけでlessしてみたらシェルスクリプトでした。最終的には

exec "${JAVACMD:=java}" $JAVA_OPTS -cp "$TOOL_CLASSPATH" -Dscala.home="$SCALA_HOME" -Denv.classpath="$CLASSPATH" -Denv.emacs="$EMACS"  scala.tools.nsc.MainGenericRunner  "$@"

と実行してました。Mac OS Xでgroovyスクリプトをshebangで実行 – Grな日々(uehajの日記)(広告が懐かしすぎ)が参考になるかと思って、少しいじってみましたが知識少なすぎでまだ出来てません。

Log

Flex SDKでFlexアプリを作ってみる

Flex SDKとは

Adobe Flashを使わずにFlashを開発するためのSDK。
FlexではMXMLとActionScriptで開発する。

MXMLとは

MXMLはXMLの一種で、FlexアプリのコンポーネントのUIを配置することができる。
MXMLタグは ActionScriptのクラスまたはクラスのプロパティに相当する。Flexアプリをコンパイルすると、MXMLタグが解析されて、対応するActionScriptクラスが生成される。

ActionScriptとは

ActionScriptとはJavaScriptをベースに独自の拡張をしたもの。

Flex SDKの準備

http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex3sdk

からダウンロードする。
また、Java実行環境が必要。無ければインストールする。
解凍したflex_sdk_3/binにパスを通す。

ボタンだけが表示されるアプリを作ってみる

ファイルを作成する。とりあえずFirstFlex.mxmlとする。

<?xml version="1.0" encoding="utf-8"?>

<mx:Application

    xmlns:mx="http://www.adobe.com/2006/mxml"

    horizontalAlign="center" verticalAlign="center">

    <mx:Button id="myButton" label="I'm a button!"/>

</mx:Application>

コンパイルする。
mxmlc –strict=true –file-specs MyFirst.mxml
–strictで厳密なチェックが行われる。
–file-specsでコンパイルするファイルを指定。
FirstFlex.swfが作成される。これをブラウザにD&Dするとボタンだけが表示される。

ボタンをActionScriptで作成してみる

<?xml version="1.0" encoding="utf-8"?>

<mx:Application

    xmlns:mx="http://www.adobe.com/2006/mxml"

    horizontalAlign="center" verticalAlign="center"

    creationComplete="creationCompleteHandler();"

    >

    <mx:Button id="myButton" label="I'm a button!"/>

    <mx:Script>

        <![CDATA[

            import mx.controls.Button;

            import mx.events.FlexEvent;

            private var asButton:Button;

            private function creationCompleteHandler() :void {

                asButton = new Button();

                asButton.label = "I'm a actionscript button!";

                asButton.addEventListener (FlexEvent.CREATION_COMPLETE, buttonCreationCompleteHandler);

                addChild(asButton);

            }

            private function buttonCreationCompleteHandler(evt:FlexEvent) :void {

                asButton.x = parent.width / 2 - asButton.width / 2;

                asButton.y = parent.height / 2 - asButton.height /2;

            }

        ]]>

    </mx:Script>

</mx:Application>

コンパイルしてブラウザで読みこむとボタンが2つ表示される。

Log

Scalaの変数

Scalaには2つの変数があります。

valとvarです。

valは再代入ができない変数です。valueを短縮したものですね。varは再代入ができます。variableなので正確にはこちらが変数でvalは値といった方がいいのでしょうか。

早速試してみます。まずはval。


scala> val la = “val test”
la: java.lang.String = val test

scala> print(la)
val test
scala> la = “another”
:5: error: reassignment to val
la = “another”
^

scala> la = null
:5: error: reassignment to val
la = null
^

はじめにlaに”val test”という文字列を代入しました。printしたのちlaに再度”another”という文字列を代入しようとしてもエラーが発生しています。nullの代入も同様です。

今度はvarを使ってみます。


scala> var ra = "var test"
ra: java.lang.String = var test

scala> print(ra)
var test
scala> ra = "another"
ra: java.lang.String = another

scala> print(ra)
another
scala> ra = null
ra: java.lang.String = null

scala> print(ra)
null

varでは再代入できました。

上記ではvarに文字列を代入して、再度文字列を代入しましたが、再代入で数値を入れてみます。

scala> ra = 1
:5: error: type mismatch;
found : Int(1)
required: java.lang.String
ra = 1
^

一度文字列を代入したものには文字列以外は代入できないようです。

でははじめに数値を代入して数値を再代入してみます。

scala> var num = 2
num: Int = 2

scala> num = num * 5
num: Int = 10

ということで、今回はここまでにしときます。

Log

Scalaの複数行にわたる文字列

Scalaでの複数行にわたる文字列は、”"”で囲むということです。試してみます。

scala> print("""abcd
     | efgh""")
abcd
       efgh

また、上記の|は環境により自動的に表示されているものですが、ソースコードで

var a = """abcd
               |efgh"""

のようにすると、efghの行頭の|までのスペースは無視されるということです。試してないですが。

Log

ScalaでHello world!

Scalaのインストールが完了したので、早速Hello world!やってみます。
シェルでscalaコマンドを実行すると、scalaの対話式実行環境が起動します。

scala> print("Hello world!")
Hello world!
scala> println("Hello world!")
Hello world!

scala> printf("%s %s", "Hello", "world!")
Hello world!

printfはネットではprintf(“{0}”, “hoge”)のような記述が見られるんですが、試しても{0}と出力されるだけでした。これはバージョンの違いなんでしょうか。使ってるのは2.7.4.finalなんですが。

それから文字列は”hoge”で文字は’h'ですね。はじめ’hoge’してエラーが出ました。最近はPHPやらRubyやらなのですっかり忘れていましたが、Javaはchar型があるんでしたね。Scalaにもcharがあるんですね。

Log

ScalaをMacにインストール

なんだかScalaが素敵に見えてきたので、Scalaに入門してみます。

とりあえずscalaをMacPortsでインストール。

$ sudo port install scala

それからEclipseもダウンロードしました。
Eclipseなんて久しぶりです。アイコンのデザインがいまいちなんですよね・・・scalaとは関係ないけど。

Scala plugin for eclipseはこの更新サイトからインストールできます。

Get Adobe Flash playerPlugin by wpburn.com wordpress themes