ETロボコン2013

片輪走行ができないかどうか検討してみた。
シーソーや階段などに片輪をひっかける。
結論から言うと、実現不可能。
ジャイロが2軸いるのだけれど、1軸しかないから自分がどう傾いているのかがわからない。
じゃあ、仮にジャイロが2つあれば実現できるのか?
前後のゆれは片輪のモータで。
左右のゆれは???
尻尾の向きでできるかもしれないが、かなり厳しい。
いずれにしてもボツだな。

[Java]ant から jsmooth を実行する。

javaをExeに変換するのに、jsmoothを使ってます。
JSmoothの使い方については以下を参照。
http://ameblo.jp/ogitsu-hama/entry-10081267675.html

毎回、GUIでEXEを作っていたのですが、antでできる方法を見つけたので、メモしておきます。

あらかじめ環境変数に、JSMOOTH_HOMEを設定しておいてください。
例:set JSMOOTH_HOME=C:\Program Files (x86)\JSmooth 0.9.9-7

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

<project name="sample" default="run" basedir=".">

    <property environment="env" />
    <!-- 環境変数にあらかじめ JSMOOTH_HOME を設定しておくこと。 -->
    <property name="jsmooth_home" value="${env.JSMOOTH_HOME}"/>

    <target name="init">
        <taskdef name="jsmoothgen"
                classname="net.charabia.jsmoothgen.ant.JSmoothGen"
                classpath="${jsmooth_home}/lib/jsmoothgen-ant.jar"/>
    </target>

    <target name="jar">
        中略
    </target>

    <target name="exe" depends="jar" description="exeにする">
        <jsmoothgen project="sample.jsmooth"
                skeletonroot="${jsmooth_home}/skeletons"/>
    </target>
</project>

ターゲットinitでjsmoothgenのタスクを登録します。
その後、jarファイルを作成します。
ターゲットexeで、jsmoothgenタスクでexeを作成しています。

名前渡し=遅延評価だと勘違いしてた。

http://d.hatena.ne.jp/kujira16/20111119/1321708622
http://d.hatena.ne.jp/kanno_kanno/20130202/1359777436
http://d.hatena.ne.jp/xuwei/20120818/1345271478

勘違いしてました。
なので、引数は一度しか評価されないと。
念のため、自分でも確認。

scala> def log(msg: => String) { println(msg); println(msg) }
log: (msg: => String)Unit

scala> log({println("eval"); "Message"})
eval
Message
eval
Message

scala> 

うわっ、本当だ!
だから、「遅延評価」とは呼ばずに、「名前渡し」と呼ぶのか?

[scala]log4jを使う

探してみたら、以下のを見つけました。
よさげです。
http://stackoverflow.com/questions/2018528/logging-in-scala
traitになってて、とても使いやすそう。
それに、メッセージの引数が名前渡しになっているので、
出力しないメッセージにはCPUリソースを食わないようになっています。

[scala]log4jを使う

メモ。
Javaだとstaticなフィールドで使うのだけれど、scalaはclassとobjectに分かれているので、一瞬悩みます。
遅延評価も有効だろうとの判断からlazyにしています。


これであってるかな?

import org.apache.commons.logging.LogFactory
import org.apache.log4j.xml.DOMConfigurator

// エントリとなるオブジェクト
object Foo {
  DOMConfigurator.configure("./log4j.xml");
  private lazy val logger = LogFactory.getLog(Foo.getClass)

  // ...
  logger.trace("Foo")
  // ...
  def main(args:Array[String]) {
    // ...
  }
}
import org.apache.commons.logging.LogFactory

object Bar {
  private lazy val logger = LogFactory.getLog(Bar.getClass)
}

class Bar {
  import Bar.logger
  // ...
  logger.trace("Bar")
}

antで環境変数の値を参照する

めも

    <property environment="env" />
    <property name="scala-home"  value="${env.SCALA_HOME}"/>

    <property name="scala-library.jar"  value="${scala-home}/lib/scala-library.jar"/>
    <property name="scala-reflect.jar"  value="${scala-lib}/scala-reflect.jar"/>
    <property name="scala-compiler.jar" value="${scala-home}/lib/scala-compiler.jar"/>