SlideShare a Scribd company logo
1 of 40
Download to read offline
About Jobs
Who?

       s_kozake(小酒信一)

 I’m Java Programmer
こんな心意気で頑張っております


              Javaは亡びぬ
              Javaは亡びぬ
              何度でも蘇るさ!!
              何度でも蘇るさ!!


JVMの力こそプログラマーの夢だからね。。誰だ?今「バルス」とかいった奴
About Jobs
の話じゃありません
play.jobs.*
のお話です。
Playにジョブ管理機能
があるのご存知でした?
Playのジョブ管理は
結構便利です!!
起動時に実行するジョブ
package jobs;

import play.*;
import play.jobs.*;

@OnApplicationStart
public class Bootstrap extends Job {

    public void doJob() {
        Logger.info("=== Application start ===");
    }

}
@OnApplicationStart(async=true)

とすると、バックグラウンド
で実行できます
スケジューリングされたジョブ
package jobs;

import play.*;
import play.jobs.*;

@Every("10s")
public class EveryTenSeconds extends Job {
    private int count = 0;
    public void doJob() {
        count++;
        Logger.info("=== EveryTenSeconds execute " +
                     count + "time" + (count > 1 ? "s" : ""));
    }

}
10日毎 ・・・   @Every("10d")
10時間毎 ・・   @Every("10h")
10分毎 ・・・   @Every("10mn")
      or   @Every("10min")
10秒毎 ・・・   @Every("10s")
PlayはCRON式も
サポートしています。
CRON式でスケジュールされたジョブ
package jobs;

import play.*;
import play.jobs.*;
import java.util.Calendar;

@On("2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59 * * * * ?")
public class EveryPrimeNumber extends Job {

    public void doJob() {
        Logger.info("=== Every prime sec " +
                    Calendar.getInstance().get(Calendar.SECOND) +
                    " execute " );
    }

}
CRON式(基本)



 * * * * * ? *
   秒         分          時間         日           月        曜日           年
(0-59 *)   (0-59       (0-23   (1-31 * ?) (1-12 * ?) (1-7 * ?) (1970-2099 *)
             *)          *)                    or        or       [option]
                                           (JAN-DEC) (SUN-SAT)



 @On(“ 2 * *       *   *   ?”)・・・毎分2秒に実行
 @On(“ 0 0 *       *   *   ?”)・・・毎時0分に実行
 @On(“30 59 23     *   *   ?”)・・・毎日23:59:30秒に実行
 @On(“30 59 23     ?   *   2”)・・・毎金曜日の23:59:30秒に実
 行
CRON式(応用)

  各項目には(, - /)を指定できます。

@On(“0,30 * * * * ?”)・・・毎分0,30秒に実行
@On(“30 10-20 * * * ?”)・・毎時10~20分の間、30秒に実行
@On(“5/15 * * * * ?”)・・・毎分5秒から15秒毎(5,20,35,50)に実行
CRON式(さらなる応用)

  日には(L W)、曜日には(L #)を指定できます。

日のLは月の最終日。曜日のLは月の最後の曜日。
@On(“0 23 59 L * ?”)・・・毎月の最終日(1月なら31日、4月なら
30日)の23:59:00に実行
@On(“0 23 59 ? * 6L”)・・・毎月の最後の土曜日に実行

日のWは一番近い月~金曜日。例えば、15Wは15日が土曜日なら、14日の
金曜日に実行。15日が日曜日なら16日の月曜日に実行。15日が火曜日な
ら、15日火曜日に実行。1Wは1日が土曜日なら、3日の月曜日に実行

曜日の#は月の何番目の曜日か。例えば、6#3は月の3回目の金曜日。
CRON式を環境変数に記述可能
package jobs;

import play.*;                                “cron.”で始まるものは環境変数
import play.jobs.*;                           と認識される
import java.util.Calendar;

@On("cron.everyprimenumber")
public class EveryPrimeNumber extends Job {
  :



application.conf
cron.everyprimenumber=2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59 * * * * ?
#cron.everyprimenumber=never

                                     neverを設定すると、実行されませ
                                     んよ
トリガータスクジョブ


public static void encodeVideo(Long videoId) {
    new VideoEncoder(videoId).now();
    renderText("Encoding started");
}
                                           nowメソッドで即時実行できます。
                                           戻り値は予約オブジェクトで受け取
                                           れます。
NOTE

DEV モードでアプリケーションを実行する場合、アプリケー
ションは最初の HTTP リクエストがあるまで始動を控えます。
さらには、DEV モードの場合、アプリケーションは必要に応
じて自動的に再起動することがあります。

PROD モードで実行するとき、アプリケーションはサーバの
起動と同時に開始します。
実演
Inside of Play.jobs
@EveryはScheduledThreadPoolExecutorのscheduleWithFixedDelayメソッ
ドで実現している。

@Onはタスク終了後にcron式の次の日付を求めて、
duledThreadPoolExecutorのscheduleメソッドを毎回読んでいる。


 play.jobsはjava.util.concurrentの機能を色々
 使ってて、勉強になるお
About cron4j
cron4jってご存知ですか?
Javaでunixのcrontab
を使えます!
Quick Start
MyTask.java

public class MyTask implements Runnable {
    public void run() {
        System.out.println("Current system time: " + new Date());
        System.out.println("Another minute ticked away...");
    }
}



 タスクを書いて。。
Main.java

public class Main {
    public static void main(String[] args) {
            MyTask task = new MyTask();
            Scheduler scheduler = new Scheduler();
            scheduler.schedule("* * * * *", task);
            scheduler.start();
            try {
                Thread.sleep(5L * 60L * 1000L);
            } catch (InterruptedException e) {
                ;
            }
            scheduler.stop();
    }
}

    スケジューラを起動するだけ。。
ファイルも扱えます
Main.java

public class Main {
    public static void main(String[] args) {
            Scheduler scheduler = new Scheduler();
            scheduler.scheduleFile("* * * * *", new File("cron4jtab.txt");
            scheduler.start();
                            :


こんな感じ
cron4jtab.txt
0 5 * * * sol.exe
0,30 * * * * OUT:C:ping.txt ping 10.9.43.55
0,46 * * * * "OUT:C:My Folder With Spacesping.txt" ping 10.9.43.55
0 3 * * * ENV:JAVA_HOME=C:jdks1.4.2_15 DIR:C:myproject OUT:C:myprojectbuild.log C:myprojectbuild.bat "Nightly Build"
0 1 * * * java:test.TestClass#testMethod "Iron Maiden" "Megadeth" "Black Sabbath" "Led Zeppelin" "Blind Guardian"




    ファイルの中身。Javaメソッド単位で起動することも、外部プロセスを起動することも
    可能。
    Javaの場合、class#method の形式のメソッドを呼び出し可能
    メソッドはstaticでString配列をパラメータで受け取れること。記述を省いた場
    合、main(String[] args)が呼ばれます。

    外部プロセスを呼び出す場合、
     OUT・・標準出力
     IN・・・・標準入力
     ENV・・環境設定
     DIR・・・作業フォルダ
    が指定可能です。

    ファイルの中身はスケジューラ実行中にも変更可能&反映されます。
Taskの状態を制御し
たり、監視したりでき
ます。
MyTaskExecutionListener.java
public class MyTaskExecutorListener implements TaskExecutorListener {
    public void executionPausing(TaskExecutor executor) {
        System.out.println("Task pausing!");
    }
    public void executionResuming(TaskExecutor executor) {
        System.out.println("Task resuming!");
    }
    public void executionStopping(TaskExecutor executor) {
        System.out.println("Task stopping!");
    }
    public void executionTerminated(TaskExecutor executor, Throwable exception) {
        System.out.println("Task terminated!");
    }
    public void statusMessageChanged(TaskExecutor executor, String statusMessage) {
        System.out.println("Task statusMessage = ["+statusMessage+"]");
    }
    public void completenessValueChanged(TaskExecutor executor, double completenessValue) {
        System.out.println("Task completeness["+completenessValue * 100+"]%");
    }
}
MySchedulerListener.java
import it.sauronsoftware.cron4j.SchedulerListener;
import it.sauronsoftware.cron4j.TaskExecutor;
public class MySchedulerListener implements SchedulerListener {
    public void taskLaunching(TaskExecutor executor) {
        System.out.println("Task launched!");
        executor.addTaskExecutorListener(new MyTaskExecutorListener());
    }
    public void taskSucceeded(TaskExecutor executor) {
        System.out.println("Task completed!");
    }
    public void taskFailed(TaskExecutor executor, Throwable exception) {
        System.out.println("Task failed due to an exception!");
        exception.printStackTrace();
    }


}
Main.java

import it.sauronsoftware.cron4j.Scheduler;
public class Main {
    public static void main(String[] args) {
            MySchedulerListener listener = new MySchedulerListener();
            MyTask task = new MyTask();
            Scheduler scheduler = new Scheduler();
            scheduler.addSchedulerListener(listener);
                   :
    }
}
MyTask.java
import it.sauronsoftware.cron4j.Task;
import it.sauronsoftware.cron4j.TaskExecutionContext;
public class MyTask extends Task {
      public boolean canBePaused() { return true; }
      public boolean canBeStopped() { return true; }
      public boolean supportsCompletenessTracking() { return true; }
      public boolean supportsStatusTracking() { return true; }
      public void execute(TaskExecutionContext context) throws RuntimeException {
          for (int i = 1; i <= 30; i++) {
              System.out.println("Task says: " + i);
              context.setStatusMessage("i = " + i);                    Taskの状況メッセージを設定
              context.setCompleteness(i / 30D);
              try {
                                                                  Taskの進捗を設定
                  Thread.sleep(1000);
              } catch (InterruptedException e) { ; }
              context.pauseIfRequested();
              if (context.isStopped()) {                    ポーズ要求がある場合はwait
                  break;
              }
          }                                  停止要求がある場合は終了
      }
}
ジョブの画面制御も簡単
play.jobsとちゃうとこ

  ・スケジュールは分単位まで
  ・前のタスクが終わらんでも、次が動く
  ・タスクは毎回newされるから、状態もてない
  ・Java2から使える
Thank You!

More Related Content

What's hot

デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!Masami Ichikawa
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0Yoshifumi Kawai
 
Web技術勉強会 20111112
Web技術勉強会 20111112Web技術勉強会 20111112
Web技術勉強会 20111112龍一 田中
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。Kazuki Onishi
 
Unowned / Weak References with Closure
Unowned / Weak References with ClosureUnowned / Weak References with Closure
Unowned / Weak References with ClosureNaruki Chigira
 
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Hiraku Toyooka
 
Unit test in android
Unit test in androidUnit test in android
Unit test in androidTatsuya Maki
 
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)Yahoo!デベロッパーネットワーク
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 TokyoYoshiyuki Asaba
 
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Yuki Higuchi
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolateskoichik
 
ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)Shinichi Awamoto
 
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題Makoto Setoh
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_bodyPg14_sql_standard_function_body
Pg14_sql_standard_function_bodykasaharatt
 
Xtend30分クッキング
Xtend30分クッキングXtend30分クッキング
Xtend30分クッキングShinichi Kozake
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話Hisateru Tanaka
 
Completely Fair Scheduler (CFS)
Completely Fair Scheduler (CFS)Completely Fair Scheduler (CFS)
Completely Fair Scheduler (CFS)gokzy
 

What's hot (19)

デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0
 
Iocage
IocageIocage
Iocage
 
Web技術勉強会 20111112
Web技術勉強会 20111112Web技術勉強会 20111112
Web技術勉強会 20111112
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
Unowned / Weak References with Closure
Unowned / Weak References with ClosureUnowned / Weak References with Closure
Unowned / Weak References with Closure
 
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
 
Unit test in android
Unit test in androidUnit test in android
Unit test in android
 
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
 
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
 
ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)
 
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
 
Docker やってみた
Docker やってみたDocker やってみた
Docker やってみた
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_bodyPg14_sql_standard_function_body
Pg14_sql_standard_function_body
 
Xtend30分クッキング
Xtend30分クッキングXtend30分クッキング
Xtend30分クッキング
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
Completely Fair Scheduler (CFS)
Completely Fair Scheduler (CFS)Completely Fair Scheduler (CFS)
Completely Fair Scheduler (CFS)
 

Similar to About Jobs

Node.js - JavaScript Thread Programming
Node.js - JavaScript Thread ProgrammingNode.js - JavaScript Thread Programming
Node.js - JavaScript Thread Programmingtakesako
 
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFXUnit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFXShinya Mochida
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Toshio Ehara
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackkimukou_26 Kimukou
 
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)fumoto kazuhiro
 
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugSpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugToshiaki Maki
 
xUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency InjectionxUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency InjectionTakuto Wada
 
テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編Hisakuni Fujimoto
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試したy-uti
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithmtakesako
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Norito Agetsuma
 
Ecmascript2015とその周辺について
Ecmascript2015とその周辺についてEcmascript2015とその周辺について
Ecmascript2015とその周辺について豊明 尾古
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Yuichi Sakuraba
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 

Similar to About Jobs (20)

Node.js - JavaScript Thread Programming
Node.js - JavaScript Thread ProgrammingNode.js - JavaScript Thread Programming
Node.js - JavaScript Thread Programming
 
jenkinsで遊ぶ
jenkinsで遊ぶjenkinsで遊ぶ
jenkinsで遊ぶ
 
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFXUnit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
 
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)
 
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugSpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
 
xUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency InjectionxUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency Injection
 
テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試した
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
 
Junit4
Junit4Junit4
Junit4
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
 
Ecmascript2015とその周辺について
Ecmascript2015とその周辺についてEcmascript2015とその周辺について
Ecmascript2015とその周辺について
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド -
 
CLRH_120414_WFTDD
CLRH_120414_WFTDDCLRH_120414_WFTDD
CLRH_120414_WFTDD
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Android gameprogramming
Android gameprogrammingAndroid gameprogramming
Android gameprogramming
 

More from Shinichi Kozake

SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介Shinichi Kozake
 
あなたとAndroid!?今すぐダウンロード
あなたとAndroid!?今すぐダウンロードあなたとAndroid!?今すぐダウンロード
あなたとAndroid!?今すぐダウンロードShinichi Kozake
 
Kotlinで関数拡張しちゃうぞ![修正版]
Kotlinで関数拡張しちゃうぞ![修正版]Kotlinで関数拡張しちゃうぞ![修正版]
Kotlinで関数拡張しちゃうぞ![修正版]Shinichi Kozake
 
とある現場のシステムアーキテクチャ
とある現場のシステムアーキテクチャとある現場のシステムアーキテクチャ
とある現場のシステムアーキテクチャShinichi Kozake
 
関ジャバの間においでよ!
関ジャバの間においでよ!関ジャバの間においでよ!
関ジャバの間においでよ!Shinichi Kozake
 
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてあなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてShinichi Kozake
 
Web API Design for JAX-RS
Web API Design for JAX-RSWeb API Design for JAX-RS
Web API Design for JAX-RSShinichi Kozake
 
ゆるふわアーキを支える技術
ゆるふわアーキを支える技術ゆるふわアーキを支える技術
ゆるふわアーキを支える技術Shinichi Kozake
 
Nullなのはいけないと思います!
Nullなのはいけないと思います!Nullなのはいけないと思います!
Nullなのはいけないと思います!Shinichi Kozake
 
生きろ!チーム開発! 300人月の仲間はみな死んだ
生きろ!チーム開発! 300人月の仲間はみな死んだ生きろ!チーム開発! 300人月の仲間はみな死んだ
生きろ!チーム開発! 300人月の仲間はみな死んだShinichi Kozake
 
システムアーキテクト~My batis編~
システムアーキテクト~My batis編~システムアーキテクト~My batis編~
システムアーキテクト~My batis編~Shinichi Kozake
 
Play!30分クッキング
Play!30分クッキングPlay!30分クッキング
Play!30分クッキングShinichi Kozake
 
システムアーキテクト
システムアーキテクトシステムアーキテクト
システムアーキテクトShinichi Kozake
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動Shinichi Kozake
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数Shinichi Kozake
 
MyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーンMyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーンShinichi Kozake
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西Shinichi Kozake
 

More from Shinichi Kozake (19)

SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介
 
あなたとAndroid!?今すぐダウンロード
あなたとAndroid!?今すぐダウンロードあなたとAndroid!?今すぐダウンロード
あなたとAndroid!?今すぐダウンロード
 
Kotlinで関数拡張しちゃうぞ![修正版]
Kotlinで関数拡張しちゃうぞ![修正版]Kotlinで関数拡張しちゃうぞ![修正版]
Kotlinで関数拡張しちゃうぞ![修正版]
 
とある現場のシステムアーキテクチャ
とある現場のシステムアーキテクチャとある現場のシステムアーキテクチャ
とある現場のシステムアーキテクチャ
 
関ジャバの間においでよ!
関ジャバの間においでよ!関ジャバの間においでよ!
関ジャバの間においでよ!
 
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてあなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
 
Web API Design for JAX-RS
Web API Design for JAX-RSWeb API Design for JAX-RS
Web API Design for JAX-RS
 
ゆるふわアーキを支える技術
ゆるふわアーキを支える技術ゆるふわアーキを支える技術
ゆるふわアーキを支える技術
 
Nullなのはいけないと思います!
Nullなのはいけないと思います!Nullなのはいけないと思います!
Nullなのはいけないと思います!
 
生きろ!チーム開発! 300人月の仲間はみな死んだ
生きろ!チーム開発! 300人月の仲間はみな死んだ生きろ!チーム開発! 300人月の仲間はみな死んだ
生きろ!チーム開発! 300人月の仲間はみな死んだ
 
システムアーキテクト~My batis編~
システムアーキテクト~My batis編~システムアーキテクト~My batis編~
システムアーキテクト~My batis編~
 
Play!30分クッキング
Play!30分クッキングPlay!30分クッキング
Play!30分クッキング
 
システムアーキテクト
システムアーキテクトシステムアーキテクト
システムアーキテクト
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
鹿駆動
鹿駆動鹿駆動
鹿駆動
 
MyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーンMyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーン
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
 

About Jobs