狠狠撸

狠狠撸Share a Scribd company logo
贬耻诲蝉辞苍で骋谤辞辞惫测
     2010/12/09
    @kimukou_26
みなさん、骋谤辞辞惫测スクリプトを书くとき
       何使っていますか~

     自分はGroovyConsoleのWebStart版使ってます
( http://d.hatena.ne.jp/bluepapa32/20101006/1286337869 )




                        ここをクリック
インストールは手軽~




1.   ウインドウ閉じた時に記
     述保持機能あるよ
2.   Grape やAntBuilderも問
     題なしに使えます
@kiy0taka さんのブログで
[ groovyでsay読み上げ 闭の话见て
奥颈苍诲辞飞蝉で骋谤辞辞惫测颁辞苍蝉辞濒别+
        AquesTalk(音声再生dll)で
           出来ないもんかな~


                          JNAを使って
                         AquesTalkDa.dll
                        を読込むgroovyコード




GroovyClassLoaderを            JNA
 使って対象コードを
 読むgroovyコード

                         AquesTalkDa.dll
ファイル構成(GConsole)
?LTHudson/standalone
  ?gcon_jnatest.groovy (UTF-8)
  ?AquesTalkByJNA.groovy (UTF-8)
  ?lib
     ?groovy-all-1.7.5.jar
     ?jna.jar
     ?platform.jar
  ?AquesTalkDa.dll
  ?dll/音声タイプ/AquesTalkDa.dll
で、ソースと顿尝尝の位置同じにして书いてみた
             <呼び元( gcon_jnatest.groovy )>
String talk = "ゆっくり'/して'いってね。したからく'るぞ、きをつ'けろ"
ClassLoader parent = ClassLoader.getSystemClassLoader()
CompilerConfiguration config = new CompilerConfiguration([
   sourceEncoding:'UTF-8' //equals -Dgroovy.source.encoding=UTF-8
])
GroovyClassLoader loader = new GroovyClassLoader(parent,config)
new File("$LIBPATH").eachFileRecurse{ loader.addURL it.toURL()}

fname="$SRCPATH/AquesTalkByJNA.groovy"
File fn = new File(fname)
def source = new GroovyCodeSource(fn,"UTF-8")         //equals -
Dfile.encoding=UTF-8
def groovyClass = loader.parseClass(source)
def groovyObject = groovyClass.newInstance()

groovyObject.setProperty("args", [talk]as Object[])
groovyObject.invokeMethod("run", [] as Object[])
<呼び先(AquesTalkByJNA.groovy )>

String talk=args[1]

// AquesTalkDa.dll の宣言関数
interface Aques extends Library {
   Aques INSTANCE = Native.loadLibrary("AquesTalkDa", Aques.class)
   Pointer AquesTalkDa_Create()
   void AquesTalkDa_Release(Pointer hMe)
   int AquesTalkDa_PlaySync(String koe, int iSpeed)
   Pointer AquesTalkDa_Play(Pointer hMe, String koe, int iSpeed, Pointer
hWnd, int msg,int dwUser)
   int AquesTalkDa_IsPlay(Pointer hMe)
}
// ハンドラの作成
Pointer data = Aques.INSTANCE.AquesTalkDa_Create()
// 再生
Aques.INSTANCE.AquesTalkDa_Play(data, talk, 100, null, 0, 0)
Thread.sleep(6000) //★ 再生時間の確保
// ハンドラの開放
Aques.INSTANCE.AquesTalkDa_Release(data)
でも、NG!(DLLが見つからない)
? WebStartで実行するアプリって、
  ? カレントディレクトリはデスクトップ
    ? dllをデスクトップに置くって微妙???。
  ? Javaはカレントディレクトリって変えられないよね~


         <呼び先(AquesTalkByJNA.groovy )>
String talk=args[1]
//DLL検索パスの明示
NativeLibrary.addSearchPath(“AquesTalkDa”,DLLPATH) //★

// AquesTalkDa.dll の宣言関数
public interface Aques extends Library {
   Aques INSTANCE = Native.loadLibrary("AquesTalkDa", Aques.class)

★)DLLの検索ディレクトリを指定!(DLL位置も動的指定可能!)
で見事再生!<デモ有>
(ランダムで音声も変更できるよ)




?AquesTalk の制限事項
    ?全角ひらがな、カタカナのみ <不正文字がある時は再生しない
    ?「‘」でアクセント、1ワード1個(/ 、。?で区切り)
?JNA制限事項
    ?NativeLibrary.addSearchPath は先宣言のみ有効
        =>同一ClassLoaderでは繰り返し変更は不可 <残念!
なら闯别苍办颈苍蝉(旧贬耻诲蝉辞苍)のジョブ上でも
     しゃべらせられるかも?
Jenkins(旧Hudson)とは
? OSSのCI(Continuous Integration)ツール
? 実行は [ java –jar jenkins.war]で手軽!
? Groovyスクリプトも使えます
    ? HudsonTerminal Plugin
    ? Go-kon plugin
    とか拡張Pluginも豊富です
? Jenkins CLI というコマンドラインIFもあります
java -jar jenkins-cli.jar [-s JENKINS_URL] XX.groovy



                     JENKINS.
                                       groovyコード
                       CLI
ファイル構成(Hudson.CLI)
?LTHudson/hudson-mst ??Hudsonの実行フォルダ
   ?hudson.bat       ??hudson起動BAT
   ?hudson-cli.bat ??hudson-cli用BAT
   ?Job ??実行されるジョブ
   ?Script
       ?gcon_jnatest.groovy (UTF8 =>SJISで保存)
       ?AquesTalkByJNA.groovy(UTF8)
       ?lib
       ?libjna
            ?jna.jar
            ?platform.jar
       ?dll
            ?音声タイプ/AquesTalkDa.dll
   ?War/WEB-INF/hudson-cli.jar
   ?War/WEB-INF/lib/groovy-all-1.6.0.jar
   ?War/WEB-INF/lib/groovy-all-1.7.5.jar
BATの中身
?Hudson.bat ??Hudson起動バッチファイル
set JAVA_HOME=C:?opt?jdk
set CMD_OPTION=--httpPort=38080 --httpsPort=38081 --ajp13Port=-1

%JAVA_HOME%/bin/java -XX:MaxPermSize=256m -Xms256m -Xmx256m
-jar hudson.war %CMD_OPTION%

?Hudson-cli.bat ??Jenkinsに接続するプロセスBAT
cd /d %0?..
set JAVA_HOME=C:?opt?jdk
set CMD_URL=http://127.0.0.1:38080
set CLASSPATH=./war/WEB-INF/*;./script/lib/*
%JAVA_HOME%/bin/java -cp "%CLASSPATH%" hudson.cli.CLI
     -s %CMD_URL% groovy %* %CMD_URL%
手间取りましたが动きました!
    <デモ有>
Hudson using Groovy  #jggug
何点か注意点
?   このジョブはgrooby-all 1.7系でしか動きません(要差替え)
    ?   Jenkins同梱のgroovy-all.jarは1.6.0
        ?   new GroovyCodeSource(fn,“UTF-8”) を使えるのは、1.7系から
        ?   1.6.0だとスクリプト上のインナークラス宣言がエラーが出てしまう
    ?   groovy-all-1.7.5.jar なら問題なく動く!(既存も今の所問題なし)
?   core/src/main/java/
    ? hudson.cli.GroovyCommand で下記のようなコード実装が??
    ?   ジョブ上から呼べるGroovyスクリプトがOSエンコードに依存してしまう
        ?  WinだとSJIS(MACはUTF8なので対処は要らないけど??)
    ?   日本語を扱ったり、日本語コメントがあると動かないということ
        ?  Command直の実行groovyをSJIS保存で一応回避は出来るけど??。

            Binding binding = new Binding();
            binding.setProperty("out",new PrintWriter(stdout,true));
            GroovyShell groovy = new GroovyShell(binding);
            groovy.run(loadScript(),“RemoteClass”,~

            今後のWin対応(UTF8指定可能対応)期待したいな~
              Goovy-all-1.7.5.jar に本体のjarが差し替え期待!
資料リンク
?   Jenkins(旧Hudson)公式サイト
    ? https://wiki.jenkins-ci.org/display/JA/Jenkins
    ? 使用Plugin
        setEnv Plugin
        BatchTask Plugin
        Go-kon plugin

?   AquesTalk公式サイト
    ? http://www.a-quest.com/products/aquestalk.html
       ? 使ったライブラリ
          AquesTalk Win
          拡張声種ライブラリ(Win用)

?   検証コードのURL
    ? https://github.com/kimukou26/hudsontest
      LTHudsonのフォルダ
こんな事も出来ます(1)
?3回同じJOBを3回実行して次のJOBへ進む
   ? JenkinsCLI + HttpUnit(jar) のコンボで
   ?Groovyファイル内で下記のURLを呼ぶとJOB動きます

   $JENKINS_URL/job/$JOB_NAME/build?delay=30sec




                        次の繰り返しJOB
                        予約




             3回繰り返して先に進む
                 JOB例
こんな事も出来ます(2)
?GradlePluginを入れると
   ?GriffonのコンパイルもJOBで出来ます!
   ?Grails 用は Grails Pluginが有ります!
気づいた事メモ
1. ビルド履歴を全部消す
  1.    $JENKINS_HOME/Jobs/$JOB_NAME/builds
         の中身を消す
  2.    $JENKINS_HOME/Jobs/$JOB_NAME/nextBuildNumber
        を消す

? プラグインの手動インストール
  ?     $JENKINS_HOME/plugin にいれる
  ?     Jenkinsを再起動する

? Jenkins.warのアップグレード
  ?      $JENKINS_HOME に jenkins.warを置く
  ?      Jenkinsを再起動
  ?      Warフォルダ配下は再作成される
       (groovy-all-1.7.5.jar も消されちゃいます)

More Related Content

Hudson using Groovy #jggug

  • 2. みなさん、骋谤辞辞惫测スクリプトを书くとき 何使っていますか~ 自分はGroovyConsoleのWebStart版使ってます ( http://d.hatena.ne.jp/bluepapa32/20101006/1286337869 ) ここをクリック
  • 3. インストールは手軽~ 1. ウインドウ閉じた時に記 述保持機能あるよ 2. Grape やAntBuilderも問 題なしに使えます
  • 5. 奥颈苍诲辞飞蝉で骋谤辞辞惫测颁辞苍蝉辞濒别+ AquesTalk(音声再生dll)で 出来ないもんかな~ JNAを使って AquesTalkDa.dll を読込むgroovyコード GroovyClassLoaderを JNA 使って対象コードを 読むgroovyコード AquesTalkDa.dll
  • 6. ファイル構成(GConsole) ?LTHudson/standalone ?gcon_jnatest.groovy (UTF-8) ?AquesTalkByJNA.groovy (UTF-8) ?lib ?groovy-all-1.7.5.jar ?jna.jar ?platform.jar ?AquesTalkDa.dll ?dll/音声タイプ/AquesTalkDa.dll
  • 7. で、ソースと顿尝尝の位置同じにして书いてみた <呼び元( gcon_jnatest.groovy )> String talk = "ゆっくり'/して'いってね。したからく'るぞ、きをつ'けろ" ClassLoader parent = ClassLoader.getSystemClassLoader() CompilerConfiguration config = new CompilerConfiguration([ sourceEncoding:'UTF-8' //equals -Dgroovy.source.encoding=UTF-8 ]) GroovyClassLoader loader = new GroovyClassLoader(parent,config) new File("$LIBPATH").eachFileRecurse{ loader.addURL it.toURL()} fname="$SRCPATH/AquesTalkByJNA.groovy" File fn = new File(fname) def source = new GroovyCodeSource(fn,"UTF-8") //equals - Dfile.encoding=UTF-8 def groovyClass = loader.parseClass(source) def groovyObject = groovyClass.newInstance() groovyObject.setProperty("args", [talk]as Object[]) groovyObject.invokeMethod("run", [] as Object[])
  • 8. <呼び先(AquesTalkByJNA.groovy )> String talk=args[1] // AquesTalkDa.dll の宣言関数 interface Aques extends Library { Aques INSTANCE = Native.loadLibrary("AquesTalkDa", Aques.class) Pointer AquesTalkDa_Create() void AquesTalkDa_Release(Pointer hMe) int AquesTalkDa_PlaySync(String koe, int iSpeed) Pointer AquesTalkDa_Play(Pointer hMe, String koe, int iSpeed, Pointer hWnd, int msg,int dwUser) int AquesTalkDa_IsPlay(Pointer hMe) } // ハンドラの作成 Pointer data = Aques.INSTANCE.AquesTalkDa_Create() // 再生 Aques.INSTANCE.AquesTalkDa_Play(data, talk, 100, null, 0, 0) Thread.sleep(6000) //★ 再生時間の確保 // ハンドラの開放 Aques.INSTANCE.AquesTalkDa_Release(data)
  • 9. でも、NG!(DLLが見つからない) ? WebStartで実行するアプリって、 ? カレントディレクトリはデスクトップ ? dllをデスクトップに置くって微妙???。 ? Javaはカレントディレクトリって変えられないよね~ <呼び先(AquesTalkByJNA.groovy )> String talk=args[1] //DLL検索パスの明示 NativeLibrary.addSearchPath(“AquesTalkDa”,DLLPATH) //★ // AquesTalkDa.dll の宣言関数 public interface Aques extends Library { Aques INSTANCE = Native.loadLibrary("AquesTalkDa", Aques.class) ★)DLLの検索ディレクトリを指定!(DLL位置も動的指定可能!)
  • 10. で見事再生!<デモ有> (ランダムで音声も変更できるよ) ?AquesTalk の制限事項 ?全角ひらがな、カタカナのみ <不正文字がある時は再生しない ?「‘」でアクセント、1ワード1個(/ 、。?で区切り) ?JNA制限事項 ?NativeLibrary.addSearchPath は先宣言のみ有効 =>同一ClassLoaderでは繰り返し変更は不可 <残念!
  • 12. Jenkins(旧Hudson)とは ? OSSのCI(Continuous Integration)ツール ? 実行は [ java –jar jenkins.war]で手軽! ? Groovyスクリプトも使えます ? HudsonTerminal Plugin ? Go-kon plugin とか拡張Pluginも豊富です ? Jenkins CLI というコマンドラインIFもあります java -jar jenkins-cli.jar [-s JENKINS_URL] XX.groovy JENKINS. groovyコード CLI
  • 13. ファイル構成(Hudson.CLI) ?LTHudson/hudson-mst ??Hudsonの実行フォルダ ?hudson.bat ??hudson起動BAT ?hudson-cli.bat ??hudson-cli用BAT ?Job ??実行されるジョブ ?Script ?gcon_jnatest.groovy (UTF8 =>SJISで保存) ?AquesTalkByJNA.groovy(UTF8) ?lib ?libjna ?jna.jar ?platform.jar ?dll ?音声タイプ/AquesTalkDa.dll ?War/WEB-INF/hudson-cli.jar ?War/WEB-INF/lib/groovy-all-1.6.0.jar ?War/WEB-INF/lib/groovy-all-1.7.5.jar
  • 14. BATの中身 ?Hudson.bat ??Hudson起動バッチファイル set JAVA_HOME=C:?opt?jdk set CMD_OPTION=--httpPort=38080 --httpsPort=38081 --ajp13Port=-1 %JAVA_HOME%/bin/java -XX:MaxPermSize=256m -Xms256m -Xmx256m -jar hudson.war %CMD_OPTION% ?Hudson-cli.bat ??Jenkinsに接続するプロセスBAT cd /d %0?.. set JAVA_HOME=C:?opt?jdk set CMD_URL=http://127.0.0.1:38080 set CLASSPATH=./war/WEB-INF/*;./script/lib/* %JAVA_HOME%/bin/java -cp "%CLASSPATH%" hudson.cli.CLI -s %CMD_URL% groovy %* %CMD_URL%
  • 17. 何点か注意点 ? このジョブはgrooby-all 1.7系でしか動きません(要差替え) ? Jenkins同梱のgroovy-all.jarは1.6.0 ? new GroovyCodeSource(fn,“UTF-8”) を使えるのは、1.7系から ? 1.6.0だとスクリプト上のインナークラス宣言がエラーが出てしまう ? groovy-all-1.7.5.jar なら問題なく動く!(既存も今の所問題なし) ? core/src/main/java/ ? hudson.cli.GroovyCommand で下記のようなコード実装が?? ? ジョブ上から呼べるGroovyスクリプトがOSエンコードに依存してしまう ? WinだとSJIS(MACはUTF8なので対処は要らないけど??) ? 日本語を扱ったり、日本語コメントがあると動かないということ ? Command直の実行groovyをSJIS保存で一応回避は出来るけど??。 Binding binding = new Binding(); binding.setProperty("out",new PrintWriter(stdout,true)); GroovyShell groovy = new GroovyShell(binding); groovy.run(loadScript(),“RemoteClass”,~ 今後のWin対応(UTF8指定可能対応)期待したいな~ Goovy-all-1.7.5.jar に本体のjarが差し替え期待!
  • 18. 資料リンク ? Jenkins(旧Hudson)公式サイト ? https://wiki.jenkins-ci.org/display/JA/Jenkins ? 使用Plugin setEnv Plugin BatchTask Plugin Go-kon plugin ? AquesTalk公式サイト ? http://www.a-quest.com/products/aquestalk.html ? 使ったライブラリ AquesTalk Win 拡張声種ライブラリ(Win用) ? 検証コードのURL ? https://github.com/kimukou26/hudsontest LTHudsonのフォルダ
  • 19. こんな事も出来ます(1) ?3回同じJOBを3回実行して次のJOBへ進む ? JenkinsCLI + HttpUnit(jar) のコンボで ?Groovyファイル内で下記のURLを呼ぶとJOB動きます $JENKINS_URL/job/$JOB_NAME/build?delay=30sec 次の繰り返しJOB 予約 3回繰り返して先に進む JOB例
  • 20. こんな事も出来ます(2) ?GradlePluginを入れると ?GriffonのコンパイルもJOBで出来ます! ?Grails 用は Grails Pluginが有ります!
  • 21. 気づいた事メモ 1. ビルド履歴を全部消す 1. $JENKINS_HOME/Jobs/$JOB_NAME/builds の中身を消す 2. $JENKINS_HOME/Jobs/$JOB_NAME/nextBuildNumber を消す ? プラグインの手動インストール ? $JENKINS_HOME/plugin にいれる ? Jenkinsを再起動する ? Jenkins.warのアップグレード ? $JENKINS_HOME に jenkins.warを置く ? Jenkinsを再起動 ? Warフォルダ配下は再作成される (groovy-all-1.7.5.jar も消されちゃいます)