『クックパッドの開発の裏側見せます in 名古屋』に参加した。

クックパッドの開発の裏側見せます in 名古屋』に参加した。
http://atnd.org/events/3633

その際のMMメモを公開。

※注意事項
これはRKTMが聞きながらバリバリ打った内容です。
間違いや個人的感想・推測が含まれている可能性がありますのでご了承ください。

NetBeansでScalaをコンパイルしようとして"... Could not connect to compilation daemon. fsc failure"


表記のエラーではまったのが二回目なので備忘録。

NetBeans 6.7.1 on Windows XP SP3にて、
Scalaプロジェクトをビルドしようとするとエラー発生。

エラーメッセージはこんな感じ。
"... Could not connect to compilation daemon. ... fsc failure"

結局、NetBeansの下記の内容通り、
コマンドプロンプトにて"fsc"を一度実行すると、NetBeans側でも問題なくコンパイルできました。

ScalaJa - NetBeans Wiki

"... Could not connect to compilation daemon." と表示された場合、まずコマンド / ターミナルウィンドウにて "fsc" または "scala" コマンドの実行を試してください

LiftをGAE/Jで動かす。

ゆろよろさんのこちらを猛烈に参考。
GAE/JでLift-1.1-Snapshotを動かす方法 - ( ꒪⌓꒪) ゆるよろ日記


mavenでプロジェクトを作る際に、そのままコピペして実行したらエラー発生。

mvn archetype:create -U -DarchetypeGroupId=net.liftweb -DarchetypeArtifactId=lift-archetype-blank -DarchetypeVersion=1.1-SNAPSHOT -DremoteRepositories=http://scala-tools.org/repo-snapshots -DgroupId=com.rktm -DartifactId=lift_gae_test

ちなみに私の環境は以下の通り。
Windows XP
Apache Maven 2.2.1 (r801777; 2009-08-07 04:16:01+0900)
Java version: 1.6.0_16

エラー内容はこんなの。

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] org.apache.maven.plugins: checking for updates from central
[INFO] org.codehaus.mojo: checking for updates from central
[INFO] artifact org.apache.maven.plugins:maven-archetype-plugin: checking for updates from central
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:create] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetype:create {execution: default-cli}]
[WARNING] This goal is deprecated. Please use mvn archetype:generate instead
[INFO] Defaulting package to group ID: com.rktm
[INFO] We are using command line specified remote repositories: http://scala-tools.org/repo-snapshots
[INFO] snapshot net.liftweb:lift-archetype-blank:1.1-SNAPSHOT: checking for updates from id0
Downloading: http://scala-tools.org/repo-snapshots/net/liftweb/lift-archetype-blank/1.1-SNAPSHOT/lift-archetype-blank-1.1-SNAPSHOT.jar
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating OldArchetype: lift-archetype-blank:1.1-SNAPSHOT
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.rktm
[INFO] Parameter: packageName, Value: com.rktm
[INFO] Parameter: package, Value: com.rktm
[INFO] Parameter: artifactId, Value: lift_gae_test
[INFO] Parameter: basedir, Value: D:\Project\Scala\LiftonGAEJ
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error creating from archetype

Embedded error: The META-INF/maven/archetype.xml descriptor cannot be found.
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4 seconds
[INFO] Finished at: Fri Dec 04 01:11:04 JST 2009
[INFO] Final Memory: 8M/14M
[INFO] ------------------------------------------------------------------------

[WARNING] This goal is deprecated. Please use mvn archetype:generate instead

↑ここが怪しいと思い、下記の通り書き直したらうまく通りました。

mvn archetype:generate -U -DarchetypeGroupId=net.liftweb -DarchetypeArtifactId=lift-archetype-blank -DarchetypeVersion=1.1-SNAPSHOT -DremoteRepositories=http://scala-tools.org/repo-snapshots -DgroupId=com.rktm -DartifactId=lift_gae_test


あとはゆろよろさんの手順通りでローカル起動まで確認できました。

明日からはLift on GAE/Jで遊ぶぞー。

Google Appe Engine Java SDKでdemoを起動すると”Error running javac.exe compiler”が発生。

原因は単純、javacのあるパスを環境変数PATHに設定していなかったため。


よくよく
http://code.google.com/intl/ja/appengine/docs/java/gettingstarted/installing.html
を見ていると、下記コマンドを実行して確認すること、とありますね。
マニュアルを読み飛ばす、という基本的なミスに反省。

java -version

javac -version

同じ事態になっている人用に、エラーメッセージの頭の方を書いておきます。

Error running javac.exe compiler

RequestURI=/
Caused by:

Error running javac.exe compiler
at org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter.java:473)
at org.apache.tools.ant.taskdefs.compilers.JavacExternal.execute(JavacExternal.java:47)
at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:931)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:757)
at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:382)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
(以下略)

Exploring Liftを写経しつつ読む。その1

1.3までは適当でOK。

1.4 Your First Lift Application

環境構築

書いてあることを参考に環境を作るが、詳細は省略。

私の初めてのLiftアプリ

mavenは使ったことがないのでコマンドラインベースでやってみる。
NetBeansプラグインを使えば楽できるかも。

プロジェクトの雛形を作る。下記をコマンドラインで実行。

mvn archetype:generate -U -DarchetypeGroupId=net.liftweb -DarchetypeArtifactId=lift-archetype-blank -DarchetypeVersion=1.0 -DremoteRepositories=http://scala-tools.org/repo-releases -DgroupId=demo.helloworld -DartifactId=helloworld -Dversion=1.0-SNAPSHOT

とりあえず簡単なサンプルができたようなので、下記を実行してサーバー起動。

cd helloworld
mvn jetty:run

実行中、色々とダウンロードするので気長に待つ。かなり待つ。

そして

[INFO] Started Jetty Server

と出たらhttp://localhost:8080/にアクセス。

”Welcome to your project!”と現在日時が表示されればOK。

ソースを読む

src/main/webapp/index.htmlを見るとこんな感じ。

<lift:surround with="default" at="content">
  <h2>Welcome to your project!</h2>
  <p><lift:helloWorld.howdy /></p>
</lift:surround>

Liftは、liftプレフィックスがついたエレメント()に特殊な処理を施す。詳細は3.6でやるらしい。

LiftがXMLテンプレートを処理する際には、最も外側のエレメントから内側に向かって処理する。
この場合、最も外側のエレメントは

エレメントでは、Liftはwith属性で指定されたテンプレート(この場合、default)を用いて、要素の内容をテンプレートに設定する。
その際、at属性によって、テンプレートのどこの部分に内容を設定するかを指定する。

src/main/webapp/templates-hidden/default.html

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:lift="http://liftweb.net/">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
		<meta name="description" content="" />
		<meta name="keywords" content="" />
		
		<title>demo.helloworld:helloworld:1.0-SNAPSHOT</title>
		<script id="jquery" src="/classpath/jquery.js" type="text/javascript"></script>
	</head>
	<body>
		<lift:bind name="content" />
		<lift:Menu.builder />
		<lift:msgs/>
	</body>
</html>

エレメントはindex.htmlファイルがどこに束縛される(挿入される)かを決定する。
name属性は、(src/main/webapp/index.htmlの)エレメントのat属性と一致しなければならない。


などなど。

”Starting with Lift”を元にLiftの勉強。

”Starting with Lift”を元にLiftの勉強。


Starting with Lift
http://liftweb.net/docs/getting_started/mod_master.html

を掻い摘んで適当に訳して、それでもってLiftを試します。

1 Welcome to Lift!

Liftは、フレームワークをシンプルで柔軟に保ちながら、パワフルなテクニックをカンタンにアクセスできるようにします。

1.1 Why Lift

Liftには学ぶ価値があります。

MVCパターンに基づいてプレゼンテーションとロジックをすっきりと分けられますよ。
Wicketっぽい、ユーザーの作ったデータをプレゼンテーションレイヤーにバインドするパワフルなテンプレートシステムを使うよ。

AjaxとCOMETを強力にサポート。


1.2 For more information

 書籍はオープンソースバージョンもあり、それも見れるらしいです。


とりあえず以上。

Subversionを使うタイミングと担当者とコマンド

の覚書。いつか詳細化するかも。

プロジェクトスタート時

構成管理担当者:

作業開始前(初回)

作業者:

作業開始前(二回目以降)

作業者:

  • 最新を取得(「更新」コマンド)。

作業時

作業者:

ファイル名・フォルダ名を変更したい時
ファイルやフォルダを削除したい時
  • svn delete。
編集した内容をリポジトリに反映したい時。
  • svn commitでコミット。
  • コミットする前にリポジトリのバージョンと比較して、意図しない修正をしていないか確認すること
  • コミット時には、コミットログを記述する。作業の「なぜ」「何のために」を主に記述。「何をした」は概要程度の記述に留める。※ITSのチケットと連携するのであれば、「なぜ」「何のために」の記述は不要。
  • 1つの「なぜ」「何のために」に基づいた作業が複数ファイルに影響する場合、原則、コミットの際にはその複数ファイル全てを同時にコミットすること。これは、トレーサビリティ(≒レビューし易さ)を高めるためである。

作業結果のレビュー

レビューア:

  • リポジトリブラウザ」から、作業者がコミットしたリビジョンを特定。
  • そのリビジョンで作業者がコミットしたファイルを前のリビジョンと比較する。

リリース後や顧客レビュー完了後など、「特定の1時点のスナップショット」を取りたい時

構成管理担当者: