Slide 1

Slide 1 text

ୈ1ճ ौ୩java एऀͱ+BWB @hotchemi

Slide 2

Slide 2 text

※஫ҙࣄ߲ ŋຊεϥΠυͰ͸Ұ෦JavaΛdisΔදݱ͕ݟΒ Ε·͕͢ŊѪނͷ൷൑Ͱ͢Ň͝༰ࣻԼ͍͞Ň ŋωλLT࿮Ͱ͢Ň

Slide 3

Slide 3 text

Shintaro Katafuchi ŋProgrammer at TIS ŋTwitter: @hotchemi ŋGitHub: hotchemi

Slide 4

Slide 4 text

͜Μʹͪ͸Ŋਓ݄Ͱ͢ ŋࣗࣾϑϨʔϜϫʔΫͰސ٬ΛϩοΫΠϯ͠ ͯExcelͰίʔυΛࣗಈੜ੒ͯ͠υʔϯŇ ŋ࠷ۙϓϩάϥϚΛଔۀͯ͠SEʹͳΓ·ͨ͠Ň

Slide 5

Slide 5 text

એ఻

Slide 6

Slide 6 text

ୈ1ճ ͔Θ͍͍Kotlinษڧձ #jkug ŋ2013/07/26 19:00 ʙ 21:00 ŋat גࣜձࣾυϦίϜ ŋ೔ຊॳͷKotlinษڧձΛ։࠵͠·͢ ŋhttp://www.zusaar.com/event/813003

Slide 7

Slide 7 text

Kotlinͱ͸ʁ ŋJetBrains͕։ൃ͍ͯ͠ΔJVMݴޠ ŋ͍ΘΏΔňBetter Javaʼn ŋܕਪ࿦Ŋؔ਺ϦςϥϧɺΫϩʔδϟ ŋNull-safety ŋ؆୯ͳScalaͬΆ͍ ŋkaraͱ͍͏WAF͕͋ΔΈ͍ͨͰ͢ https://github.com/TinyMission/kara

Slide 8

Slide 8 text

null҆શͷϞνϕʔγϣϯ // ஫ҙɿ͜ͷίʔυ͸ίϯύΠϧ͞Εͳ͍ fun main(args : Array) { val foo : String = null // ඇnullܕ val bar : String? = null // nullڐ༰ܕ val baz : String? = "Hello, Kotlin!" baz.length // nullͷՄೳੑ͕͋ΔͷͰίϯύΠϧΤϥʔ if(baz != null) { baz.length // nullνΣοΫ͞Ε͍ͯΔͷͰOK } }

Slide 9

Slide 9 text

Ҏ্એ఻Ͱͨ͠

Slide 10

Slide 10 text

ࠓ೔࿩͢ࣄ

Slide 11

Slide 11 text

Ճ଎͢ΔएऀͷJava཭Ε ŋňδϟόͳΜͯ΍ͬͯͳ͍ͰRubyΩϝΔͱ ؾ͍࣋ͪͥͬʂʼn ŋAndroidʹ࢝·ΓAndroidʹऴΘΔएऀୡ ŋňαʔϒϨοτʁ τϜΩϟʔοʼn ŋScalaŊGroovyŊClojure…

Slide 12

Slide 12 text

Javaͱ༇շͳ஥ؒୡ

Slide 13

Slide 13 text

Javaͱ༇շͳ஥ؒୡ _ਓਓਓਓਓਓਓਓਓ_ ʼඬ͏ΤϯλʔϓϥΠζʻ ʉY^Y^Y^Y^Y^Y^Y^Y^Y^Y^Yʉ

Slide 14

Slide 14 text

ŋJavaͷWAF͸ΤϯλʔϓϥΠζͱີ݁߹͢͠ ͍͗ͯΔ ŋJavaͷϓϩδΣΫτ͸ະͩʹSubversionͰ؅ཧ ͞Ε͍ͯΔ΋ͷ͕ଟ͗͢Δ ŋJavaࣗମͷਐԽ͕஗͗͢Δ ŋJavaΛdisΔएऀ͕ଟ͗͢Δ एऀ͕JavaΛݏ͏4ͭͷཧ༝

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

Play framework(1.x)ͱ͍͏ر๬ ŋNo servler, No xml, No enterprise ŋεςʔτϨεŊඇಉظHTTP ŋview͸௚ײతͳgroovyςϯϓϨʔτ ŋJob΋؆୯ʹॻ͚Δ ŋRuby on Railsͷ৺ ŋ೔ຊޠ৘ใ͕๛෋

Slide 17

Slide 17 text

public static void success(String oauth_verifier) { YouRoom youRoom = Cache.get("youRoom", YouRoom.class); AccessToken token = youRoom.getAccessToken(oauth_verifier); User user = youRoom.verifyCredentials(); int youRoomId = user.getId(); Member member = Member.findOrCreate(youRoomId); member.youRoomId = youRoomId; member.token = token.getAccessToken(); member.tokenSecret = token.getAcceessTokenSecret(); member.mail = user.getEmail(); member.save(); flash.success("ϩάΠϯ͠·ͨ͠Ň"); session.put("sessionKey", member.id); setting(); } ௚ײతͳORMͱController

Slide 18

Slide 18 text

everRoom ŋyouRoomΛ೔࣌ͰEvernoteʹอଘ͢ΔαʔϏε ŋPlay 1.2.5 + Heroku ŋHerokuͰJobճͯͨ͠Β͓ۚ෷͑ͳ͘ͳͬͯ ࢭΊ·ͨ͠ ŋhttps://github.com/hotchemi/everRoom

Slide 19

Slide 19 text

But…

Slide 20

Slide 20 text

2.xܥͰScalaʹfull replace ŋJavaͰ΋ॻ͚Δ͚ͲͳΜ͔ؾ࣋ͪѱ͍… ŋCLIίϚϯυ΋ScalaʹͳͬͨͷͰىಈ͕஗ ͍… ŋview͕Scalaʹͳͬͯ࢖͍ʹ͍͘… ŋcore͸શ෦ScalaͰॻ͔ΕͯΔͷͰδϟό͡ Όͳ͍…

Slide 21

Slide 21 text

ر๬͸௵͑ͨ…ʁ

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

ϙετPlay frmamework1.xͷྲྀΕ ŋňPlay1.xͷ࣌୅͸ྑ͔ͬͨʼnͱ͍͏࿝֐ͬΆ ͍༗ࢤʹΑͬͯPlayϥΠΫͳϑϨʔϜϫʔΫ ͕։ൃ͞Ε͍ͯΔŇ ŋओʹւ֎ ŋNinja Web Framework΍Juzu Web Framework

Slide 24

Slide 24 text

Ninja Web Framework ŋMaven࢖༻ŊDIΛGuiceʹґଘŊαʔϒϨοτ ίϯςφ࢖༻ ŋόϦσʔγϣϯ͸JSR303ŊςϯϓϨʔτΤ ϯδϯ͸FreeMarker ŋ೔ຊͰ΋#ninja_jaͱ͍͏ϋογϡλάͰ ৘ใަ׵͞Ε͍ͯΔ ŋhttps://github.com/ninjaframework/ninja

Slide 25

Slide 25 text

@Override public void init(Router router) { // ///////////////////////////////////////////////////////////////////// // some default functions // ///////////////////////////////////////////////////////////////////// // simply render a page: router.GET().route("/").with(ApplicationController.class, "index"); router.GET().route("/examples").with(ApplicationController.class, "examples"); router.GET().route("/assets/.*").with(AssetsController.class, "serve"); } } public Result flashSuccess(Context context) { Result result = Results.html(); // sets a 18n flash message and adds a timestamp to make sure formatting works Optional flashMessage = messages.get("flashSuccess", context, Optional.of(result), "PLACEHOLDER"); if (flashMessage.isPresent()) { context.getFlashCookie().success(flashMessage.get()); } return result; } src/main/java/conf/Routes.java src/main/java/controllers/ApplicationController.java

Slide 26

Slide 26 text

Juzu Web Framework ŋDIΛJSR-330ʹґଘŊαʔϒϨοτίϯςφ ŋVert.x؀ڥʹσϓϩΠՄೳʁ ŋॻ͖ํ͕NinjaΑΓPlayͬΆ͍ ŋ೔ຊޠ৘ใ΄΅ແ͠ ŋhttps://github.com/juzu/juzu

Slide 27

Slide 27 text

public class Weather { @Inject @Path("index.gtmpl") Template index; @View public void index() { index.render(); } }
Add
Controller View

Slide 28

Slide 28 text

·ͱΊ ŋKotlinͷษڧձ͕7/26ʹ͋ΔΑʂ ŋՃ଎͢ΔएऀͷJava཭Ε ŋPlay(1.x)࠷ߴ!!! ŋφ΢ͰϠϯάͳJavaʹ৮ΕΑ͏ʂ

Slide 29

Slide 29 text

Fin.