2015年1月11日日曜日

Swift言語の簡単な特徴メモ

Swift

ブロック
中括弧で表現{}

型の記述
スタイル:先頭は大文字
指定:変数の後ろにコロンと合わせて記述する。あくまで型推論の補助というポリシーだとわかる。

配列.array
宣言;大カッコ
空配列は型の指定が必要:Pythonよりは型安全だが、型の指定方法は[型]
配列の要素アクセス:大カッコとindex指定
配列の要素入れかえ:大カッコとindex指定
配列の要素挿入:insertとindex指定、+=で最後に要素もしくは配列を連結
配列の要素削除:removeAtIndex(atIndex:)とindex指定
配列の最後の要素を削除:removeLast(要素アクセスと併用でPythonのpop)
配列の要素全削除:removeAll
配列の要素選択:Pythonのrangeにあたる機能、[m...n]でmからn-1までの要素を取得などのrange演算子が使える
配列の代入は完全なlazyコピー
letはimmutable、varはmutable
lazyコピーの効率:2015/1/10時点ではまだissue状態だが、概ね効率的。ただし、大量の再代入は避けるべき。
functionへ参照を渡す処理の場合:inoutパラメータを使用する。再起処理を関数呼び出しで実行する場合には注意。関数の呼び出し側で参照を知らせる&を使用する。
Cocoaフレームワークへの変換:as

ハッシュテーブル.dictionary
宣言:大カッコにkeyとvalueを:で分離
ハッシュテーブルのvalueアクセス:大カッコとkey
ハッシュテーブルのレコードの削除:nil代入
順序:保証しない
Cocoaフレームワークへの変換:as

演算子
比較演算子:極めて一般的な記号
論理演算子:極めて一般的な記号(powを表現する記号は無し)
for-in:一般的、range演算子を使用可能
条件付きfor:小括弧を省略するスタイル、型推論可能
while:小括弧を省略するスタイル
if:小括弧を省略するスタイル
switch:小括弧を省略するスタイル、break不要

関数.function
宣言:func
引数:引数名: 型(代入時の型にも注意)
可変引数:型...で表現
戻り値の分離:-> 型
外部引数名:引数変数の前に名前を指定
外部引数名の関数呼び出し:呼び出し時は外部引数名の指定が必須
ネスト:可能。内側の関数は外側の関数ブロックがアクセス空間

クロージャ.closuer
存在:ある。functionはclosuerの特別な形式。
ボディの分離:-> 戻り値型 in
ボディの分離の省略:
よく使われるケース:コールバックするためのHandler

構造体.structure
宣言:struct
型:値型(value type)
プロパティの型推論:可能
プロパティへのアクセス:ドット
ARC(Auto Reference Count: 参照カウント型のメモリ管理機能)対象外

クラス.class
宣言;class
型:参照型(reference type)
継承:有り。宣言時に:(コロン)で区切ってsuper classを記述する
オーバーライド:継承後のメソッドではsuper必須。
型キャスト:有り
ARC(Auto Reference Count: 参照カウント型のメモリ管理機能)対象

メソッド.method
タイプ:インスタンス、static有り

包括型.Any
包括クラス型.AnyObject、Cocoaフレームワーク(主にNSArrayとNSMutableArray)への変換

ナル表現
nil

その他の表現
オプショナル型、ラップ状態の表現:?、nilチェックに使えるので楽

アンラップ表現:!

2015年1月7日水曜日

2015/01/11までの目標


  • ERFilter 論文
  • ERFilter Train
  • Playframework2.3 テンプレートエンジン、CSS、js周り
  • 英単語 + 1000
  • 英語漬け + 毎日
  • 英文法 2/6

playframework2.3 for Java (Macに移行)

play2.3 for javaの環境をMacに移行したのでメモ

今年はplay2.3 for javaでつくったWEBアプリをサイトに組み込む。

公式ドキュメント


参考にしたブログ


インストール

playは2.3からactivatorを利用する。
まずはactivatorをインストール。
以下からダウンロード。

適当な場所に展開する。
$ cd ~
$ mkdir app
$ cp activator-1.2.12-minimal.zip /User/masai/app
$ cd /User/masai/app
$ unzip activator-1.2.12-minimal.zip
$ ln -s activator-1.2.12-minimal activator
$ export PATH=$PATH:/User/masai/app/activator

activatorコマンドが使えるかどうか、以下で確認
$ activator -help

activatorを使って、playフレームワークのアプリケーションを作成する。
$ activator new my-first-app play-java
(scalaで開発する場合は、play-javaをplay-scalaにする)

ユーザのhomeディレクトリにアプリケーションディレクトリが出来る。
$ cd /User/masai/my-first-app
$ activator
ここで依存関係の解決にけっこう時間がかかるので途中でやめないように注意。

以下のコマンドでデフォルトのアプリケーションを起動することができる。
$ activator run

では、アプリケーションをEclipseに取り込んでみよう。

開発環境

Eclipse は Scala IDE for Eclipseを使う。

$ activator eclipse
[info] Loading project definition from /Users/masai/my-first-app/project
[info] Set current project to my-first-app (in build file:/Users/masai/my-first-app/)
[info] About to create Eclipse project files for your project(s).
[info] Successfully created Eclipse project files for project(s):
[info] my-first-app

処理が完了したら、Eclipseからmy-first-appのディレクトリをインポートする。

Eclipseでインポートしたら、Playアプリケーションのファイル構成を確認しよう。

routes

routesを使って、URLとコントローラをひもづける。
サンプル・アプリケーションには2つの設定が記述されている。
GET / controllers.Applications.index
これは、/に対してGETリクエストを受け取ると、controllers.Application.indexが呼び出されることを意味する。

controller

□Application.java
・index.renderがindex.scala.htmlの描画を担当する。
・index.renderの引数はmessageとして、index.scala.htmlへのパラメータになる。
・OkはHTTPステータスコード200を返す。

view

xxx.html.indexの形式で作成しておくと、コンパイル時にview.htmlパッケージ内に
xxxオブジェクトが作成される。この動作を前提として、コントローラのクラスを記述するため、
Application.javaではindex.renderを記述できる。

□index.scala.html
・変数の宣言
@(message: String)
これは、String型のmessageという変数を使用する、という宣言であり、とても安全である。

@main
main関数の呼び出し。main.scala.htmlの呼び出しである。
mainの引数はtitleとして、main.scala.htmlへのパラメータになる。

@mainアノテーション中の @play.weblcome もmain.scala.htmlに渡すパラメータである。
play20のwelcomeメソッドを呼び出す。
変数を渡すこともできるし、style = “Java” のように、styleという変数名で、Javaというvalueで
渡すことができる。

play20のwelcomeメソッドで様々なhtmlを生成して表示する。

□main.scala.html
本体のhtmlである。
・変数の宣言
@(title: String)(content: Html)
これは、String型のtitle、Html型のcontentという変数を使用する宣言。

@titleの部分で、index.scala.html のmainメソッドから渡された値が使用される。

@routes.Assets.at
routesは、conf.routesファイルで定義される。
routesには、/Assets.atが定義されている。/assetsから、GETでfileを取得するように記載している。

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.at(path="/public", file)

assetsでアクセスするファイルは、パスpublicとしている。
実際、以下のディレクトリには、stylesheetsとimages、javascriptsディレクトリがある。
/Users/masai/my-first-app/public/main

@content
これは、index.scala.htmlのplay20.welcomeメソッドが生成したHtml型のオブジェクトが渡される。play29.welcomeはplayのライブラリに含まれる。

バージョン管理からはずすファイル

logs
project/project
project/target
target
tmp
dist

.cache

次回

テンプレートエンジン

2015年1月6日火曜日

2015年の目標


2015は目標をもって進んでいこう

今年の目標!!3年計画の1年目

  • 英語。6年間の復習、キクタン制覇、英文解釈読了。TOEIC受験。
    • 本腰いれて英語やる。世界で仕事したい。
  • 機械学習の入門資料準備。
    • 自分の復習も兼ねて、一緒にやれる人も増やしたいので。
  • ComputerVisionとObjectRecognitionで新たな研究の実装。
    • こちらは大学院。新しい研究を始めるので、とにかくアイデアと実装までいく。
  • 自分のホームページつくる
    • いままでブログだったけど、エンジニアとして発信するのに文字だけというのはどうかなと思ったのがきっかけ。
  • 自分のホームページに価値のあるコンテンツを置く(機械学習とそのコード、物体認識デモ)
    • ホームページつくるならコンテンツがほしい。価値が出せるのは恐らく機械学習とか画像処理とかで実装したところ。ライブラリみたいに出来れば一番いいけどまずは解説とかコードを公開するといったことを目標にする。

中期目標!!3年で実現すること

  • TOEIC 900点以上
  • 専門性が活かせる、またはキャリア・スキルアップになる仕事をする。
  • 世界で仕事が出来る場所にいく。
  • もう一本ComputerVision系の論文を発表する
  • ホームページをバイリンガル対応に(英語)