プログラマメモ2 - programmer no memo2

くろーじゃー じゃばすくりぷと - 手習い 2013/10/02

5、6年前からの悩みは、クロージャーがよくわからないということでした。
なんとなくはわかりますよ。もちろん。でも、体に染みこまないというかなんというか。
 
 今回は、jqueryのイベントハンドラ登録使ってみました。
登録する際に関数を登録しますが、この関数に引数を渡したいなーと思ったわけです。

で、最近,ジョンレシグさんの翻訳本をぱらぱら勉強しているのですが、なんかちょっとわかった気がしたんですよね。

クロージャーを使えば、渡された引数の値を内部で保持できることがわかったので、以下、かなりわかりづらいサンプル。

モダンなjavascripitでは、htmlにインラインでイベント設定しないのがはやりっぽいので、jquery使って、ロード時にイベントハンドラを登録。その際の関数を返す関数を引数つきで実行させて、それがハンドラごとのパラメータ値になるイメージです。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>タイトル</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <script> function initThisPage() { // 関数を返すようにして、返す関数がイベントに反応するようにしたい。 // 渡された引数をクロージャーからみえる var f = function(a, nf){ var len = a; var nf = nf; return function(){ // 桁数が指定された桁より大きいと反応するようにする if(this.value.length >= len){ alert('*** bingo' + nf);} }; }; // id=txtに何か入力したら反応するように設定 $('#txt').keyup(f(3, '#btn')); } </script> </head> <body onload="initThisPage()"> <input id="txt" type="text" size="4" max="6"> <br/> <button id="btn">aaaaa</button> </body> </html>



ninjya本ためになります。

JavaScript Ninjaの極意 ライブラリ開発のための知識とコーディング (Programmers’ SELECTION)
ジョン・レシグ John Resig ベア・ビボー Bear Bibeault 勝亦 勇
4798128457

antのfixcrlfは文字コードも変換してくれる。 2013/02/23

antです。

参考
Ant「fixcrlfタスク」メモ(Hishidama's ant-fixcrlf Memo)

 copyタスクではなく、このFixCRLF、を使うと、指定すれば、ファイルのエンコードを変換して、コピーしてくれました。

とりあえずこんな感じで使ってます。

<fixcrlf srcdir="${SRC-SAMPLE}" destdir="${temp.dir}/src-sample" encoding="utf-8" outputencoding="MS932"> <include name="**/*.java" /> </fixcrlf>

antでパスワード入力させて処理する 2011/06/25

antです。
inputというのが使えます。

<target name="jetty_restart">
<input message="Please enter password" addproperty="scp.pass"/>
<sshexec host="${scp.server}" keyfile="${ssh.key.file}"
username="${scp.user}" password="${scp.pass}"
command="echo '${scp.pass}' | sudo /etc/init.d/jetty stop"
trust="yes"/>
<sshexec host="${scp.server}" keyfile="${ssh.key.file}"
username="${scp.user}" password="${scp.pass}"
command="echo '${scp.pass}' | sudo /etc/init.d/jetty start"
trust="yes"/>
</target>

いろいろまとめて実行順序を指定して、targetを実行したい場合はantcallで指定していくのがよいようだ。 2011/06/19

antです。

いろいろまとめて実行順序を指定して、targetを実行したい場合はantcallで指定していくのがよいようだ。

ant taskでsshexecでさらにsudoしたい 2011/05/22


Javaです。antです。
antを使ってビルドして作成したwarファイルをアップロードしてサービスを再起動ってことをしたかったわけです。

rootでsshを禁止にするポリシーにしたので、sudoでサービスの再起動することになったわけですが、はまったのでメモです。



上記のリンクどうりにすればよいわけです。

centosを対象としてます。

/etc/sudoers
を編集します。

#Defaults requiretty
Defaults visiblepw


Defaults requirettyはコメントアウトして、Defaults visiblepwを追加しました。
このふたつが大事かなと。
この辺知識がないからまったくのトライ&エラー。
/etc/sudoers
のパーミッションをchmod 440 sudoers してもどすことを忘れずに。

[java]ant javac srcdirで複数パス 2010/12/04

antです。javacタスクで複数のソースパスを指定したい場合はコロン(;)で区切ります。

<javac srcdir="${SRC_DIR};${SRC_UTILS_DIR}">


忘れるなー

cygwin コマンドを抜き出して使いたい。 2007/12/27
2007/12/27

cygwinのsplitとcatだけを使いたかった。
ライブラリがないといけないので、ライブラリと同じディレクトリに置くと使えます。

cygiconv-2.dll
cygintl-8.dll
cygwin1.dll
split.exe
cat.exe


どうして、そういう回りくどいことをしたかったかといいますと、ファイルが大きいとCVSに登録できない場合があるので、splitでわけたかった。

で、分けたファイルを結合したかたからです。

簡単なスプリットの使い方。

20メガで分けて、分けたファイルのおしりりにsplitとつける。
split -b 20m 対象ファイル名 対象ファイル名.split.


ちなみにantのビルドファイルで外部コマンドを動かす方法は、execが使える。

execをパイプでつなげる方法はコマンドをshから動かすか、windowsならcmdから動かすとよい。
Apache Ant - Frequently Asked Questions
How do I redirect standard input or standard output in the task? − タスクの標準入力や標準出力をリダイレクトするにはどうすればいいですか?

eclipseでant taskのftp使用する - 別jarが必要 2007/08/04

eclipseでant taskのftp使用する際に、
commonsのnetが必要になったのでメモ。


それでeclipseのpreferencesのantでライブラリへのパスを設定。
Classpath - Ant Home Entries
にAdd External Jarsで設定しました。

他にいい方法があるかもしれません。

ちなみにftp taskは下記のような感じで記述。
<ftp server="myserver address" port="21" remotedir="/home/user/" userid="myuserid" password="mypassword" binary="yes">
<fileset dir="${build.dir}/">
<include name="*.jar" />
</fileset>
<fileset dir="${basedir}/jnlp/">
<include name="*.jnlp" />
</fileset>
</ftp>


というかこのtipsは以前に似たようなものを書いた...



似たようなことを繰り返しているなぁOrz...

ant task jarjar 2007/03/20

Why Tonic? - Quality, Features and Price

googleのguiceのbuild.xmlを眺めていて、jarjarというタスクをみつけた。

<jarjar jarfile="${build.dir}/dist/guice-${version}.jar">
<fileset dir="${build.dir}/classes"/>
<zipfileset src="lib/build/cglib-nodep-2.2_beta1.jar"/>
<zipfileset src="lib/build/asm-3.0.jar"/>
<rule pattern="net.sf.cglib.**" result="com.google.inject.cglib.@1"/>
<rule pattern="org.objectweb.asm.**" result="com.google.inject.asm.@1"/>
</jarjar>s

ここで、ruleというのがあり奇妙で

はてこれはなんだろうなと思い調べてみたら便利そうなので、メモ。

参考:
http://rektunpe.sakura.ne.jp/diary/?date=20060127

なにやら依存パッケージをjarにとりこめることができるらしい。
ここまでなら、他にもツールがあるので、特筆するほどでもないなぁと思ったのですが、
さらにその先にいっていて、依存パッケージの名前を変更して、jarにとりこめる!!

このant taskは
ここのWhy Tonic? - Quality, Features and Priceようです。

実験してたしかにとりこまれているのを確認しました。

jakarta commonsのlangを利用するソースを書いて、build.xmlを用意して、できたjarを解体して、jadでデコンパイルしてみたらものの見事にかわっていました。

参考に作成したbuild.xmlファイル


<?xml version="1.0" encoding="UTF-8"?>
<project name="research" default="compile" basedir=".">
<property name="version" value="0.0.3"/>
<property name="build.dir" value="build"/>
<property name="lib.dir" value="lib"/>
<property name="src.dir" value="src-string"/>

<path id="compile.classpath">
<fileset dir="${lib.dir}" includes="*.jar"/>
</path>

<target name="jar" depends="compile" description="Build jar!!">
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"
classpath="lib/jarjar-0.9.jar"/>
<mkdir dir="${build.dir}/dist"/>
<jarjar jarfile="${build.dir}/dist/myteset-${version}.jar">
<fileset dir="${build.dir}/classes"/>
<zipfileset src="lib/commons-lang-2.3.jar"/>
<rule pattern="org.apache.commons.lang.**" result="newpackage.@1"/>
</jarjar>
</target>

<target name="compile" description="Compile Java source!!">
<mkdir dir="${build.dir}/classes"/>
<javac srcdir="${src.dir}" debug="on" destdir="${build.dir}/classes">
<classpath refid="compile.classpath"/>
</javac>
<copy toDir="${build.dir}/classes">
<fileset dir="${src.dir}" excludes="**/*.java"/>
</copy>
</target>
</project>