Java Day Tokyo 2015 ã¡ã¢
ï¼Qiita:Teamã«ãããããªã£ãã®ã§ï¼
åºèª¿è¬æ¼
- 20thãã³ãã¥ããã£ãIoTãæ±äºº Gosling
- @gsaab
- Certification for Java8
- Java 8 release
- lambda
- performance (fork/join)
- security
- Pepper SDK, workspace demo
- Java SE 8u40, Java 9 EA build
- Java Embedde
- ã«ããµã¹
- RZ/A1 http://japan.renesas.com/products/mpumcu/rz/rza/rza1h/index.jsp
- ãã¹éè¡éç¥demo
- Embedded, IoT Cloud Server demo http://www.atmarkit.co.jp/ait/articles/1503/25/news010.html
- Java EE
- 楽天ã®JCPåå ã®è©±
Java EE
- EE8ã®surveyã®è©± https://blogs.oracle.com/ldemichiel/entry/results_from_the_java_ee
- JSON Binding
- Object marshaling
- JSON Processing API
- JSON Pointer, JSON Patch http://silphire.hatenablog.jp/entry/2012/01/06/073300
- JAX-RS
- Server-sent events
- MVC
- HTTP2
- ãªã¯ã¨ã¹ãå¤éåãpriorityå¶å¾¡ãServer Push
- Resource injection
- EOD, CDI Aliignment
- EE Security
- annotated, role/attribute restriction
- JMS2.1
- async receive API
- Any EE Beans as listener
- Java EE Management 2.0 Manageent and Deployment API
- => JSR77
- require REST base API
- Password ALIAS
- Users and Groups management (role, user services with repository)
- link
ã´ã¼ã«ããã³ã»ãµãã¯ã¹
- ãã¯ããã¸ã¼é¨
- èªåãã¡ã§ä½ãã決æ¸ã·ã¹ãã ã¨ã
- 2000å¹´ãããããã£ã¦ããããJCP Executive Committeeã ã£ãããã
- ä¸çã§Javaã¨ã³ã¸ãã¢3000人 ãã¯ããã¸ã¼é¨ã¯15%
- ãã¼ã190Gã¨ãã³ã¼ããã£ãã·ã¥ãéçè¶ ããã¨ã
- OpenJDK
- ã½ã¼ã¹ããã¥ã¼ãã³ã°ãã»ãã¥ãªãã£ã®ãã
- ãã©ãã«ã·ã¥ã¼ãã£ã³ã°ããªãµã¼ã
- JVMTI
- å§ç¸®OOP
- GS Collections
- GitHubã«ãã https://github.com/goldmansachs
- Kataã¨ãããã¬ã¼ãã³ã°ã³ã³ãã³ãããã
- zip, chunk, partition, makeString, tapãªã©ã®å®è£
- foreachæï¼
- å ±å¤æ»ãå¤
- Set/Mapã®ã¡ã¢ãªå¹çæ¹åãBagãBiMapãªã©ã®å®è£
- immutableãªã³ã¬ã¯ã·ã§ã³
- ããªããã£ãã®ã³ã¬ã¯ã·ã§ã³
- é 延è©ä¾¡ãè¡ããªãstream API
- Java One 2014ã§ã®ã»ãã·ã§ã³ãjjug ccc springã§ããããã
- Java8, Scalaã¨ã®ããã©ã¼ãã³ã¹æ¯è¼è³æ http://www.infoq.com/presentations/java-streams-scala-parallel-collections
- Scala Daysã§ã®çºè¡¨
Nashorn
- ãã¹ãã¼ã³ã¾ãã¯ããºãã¼ã³
- Rhinoã®ãããã
- ECMAScript5.1
- ç¸äºå¼ã³åºãå¯
- jjsã³ãã³ã
-
functionãªãã¸ã§ã¯ã渡ãã¦lambda expression
-
8u20
8u40
- ã³ã³ãã¤ã«æã®æ¥½è¦³çåæ¨è«
- --optimistic-types
- ééã£ã¦ãããã©ã¼ã«ããã¯
- ã³ã¼ããã£ãã·ã¥
- åæ¨è«çµæã®ãã£ãã·ã¥
- Nashorn class filter
- ä»»æã¯ã©ã¹ãåç §ä¸å¯ã«ãã
ECMAScript6
- const
- let (lexical scope)
Server Side Scripting
- avatorã¯close
- ã¦ã©ã¼ã ã¢ããæ¹å
- parser api jdk9 ea b55ãã使ãã
- ASTåºããã¢
- flight recorder
ã¨ã³ã¿ã¼ãã©ã¤ãºã¢ã¼ããã¯ãã£
- ã·ã¹ãã ã®ããããã¨çµã¿åããæ¹
- 空éçãæéçãã©ã³ã¹
- å©å®³é¢ä¿è ã®é¢å¿ãå°æ¥ã®å¤å
- ã·ã¹ãã ã®æ§é ã¨ããã»ã¹ã®æ±ºå®
- è¦ç´ ã¸ã®å解ã¨çµç«ã®æ¹æ³
- ããã«ãªã½ã¼ã¹ã¨ã¹ã±ã¸ã¥ã¼ã«ãå ¥ããã¨WBS
- ã¨ã³ã¿ã¼ãã©ã¤ãºã¯
- å©å®³ãå¤ããé£æºãå¤ãè¤éãã¸ãããã¥ãããç¾ç¶ã¨ã«ã¼ã«ã大å
- ããã¸ã§ã¯ãããã¼ã¸ã¡ã³ãã«å ç«ã¤æ§é ã¨ããã»ã¹
- å ¨ã¦fixããã®ã§ã¯ãªããé¸æè¢ãæ®ã決å®ã
é¸æ - ãã©ã³ã¹ãã¨ã - ITãµã¼ãã¹éå¶ãå質ãæè¡ãã¬ã³ã - ITãµã¼ãã¹éå¶ï¼webã£ã½ããéç¨ - ãªã¼ã³ã¹ã¿ã¼ãã¢ããã¨ãè¨ããã - æºè¶³ãå¾ãããã®æç¶çãªæ¹åãUXã£ã½ã話 - ãã®éå¶ã¢ãã«åããããã - ç¶ç¶çãªæ´»åãåæã¨ããå¹çæ§ - å©ç¨ããã¦è©ä¾¡ããã
å質 - å¤é¢çããã©ã³ã¹ã - çµç£çã®å質ã¡ããªã¯ã¹ã»ãã
- æ§è½ç¹æ§ããã£ããã©ã¯ã¹ã¢ã¼ã«ã¹ã¿ã¼ãã§ãã£ããã£ã³ã°ããã¦ã
- äºææ§ãã³ãã¯ãã£ããã£ãä¸è¬çãªä»çµã¿ã使ããã¨
- å ±æåããã©ãããã©ã¼ã å
- ãã©ãããã©ã¼ã ãã¬ã¤ã¤ã¼å
saas, paas, iaas, ããã«ã¦ã§ã¢ã¹ã¿ãã¯ï¼baas
åºæåããã¤ã¯ããµã¼ãã¹
- ãµã¼ãã¹ãç¬ç«ããæ§é ã¨ããã»ã¹ãæã¡ãAPIã§é£æº
- ããããç¬èªã®ã©ã¤ããµã¤ã¯ã«ãæã¡ãåå¥ã®ãã¡ã¤ã³ã«å¾ã
- OSã¬ã¤ã¤ã®ä¸ã«ãã©ãããã©ã¼ã 管çã¬ã¤ã¤ãã
- ããã«ã¦ã§ã¢ã¹ã¿ãã¯ä»¥éã¯ãããã¤ã¡ã³ãã«å¾ã£ã¦æ§ç¯ããããdockerã¨ãã
- ãã¤ã¯ããµã¼ãã¹ã«ããåå¥ã®æ§é ã¨ããã»ã¹ãä¼æ¥ã®ä¸ã§è¨±å®¹ã§ãããã
å®è·µ - ECãµã¤ã, ããã³ãã®è³¼è²·ã·ã¹ãã ã¯ã¢ã¸ã£ã¤ã«ã«ãå注管çã¯ã¦ã©ã¼ã¿ã¼ãã©ã¼ã«ã§ããªã©ã®ãã¡ã¤ã³åå² - å®ç§ãªé¸æã¯ã§ããªãã観ç¹ãæã£ã¦èããå©å®³é¢ä¿è ã§åæã
è¦æ - æ£è§£ããªãããããã®è¦æ - æå°å ¬åæ°ãããªãã¦ã¯æå¤§å ¬ç´æ° - å ¨å¡ã®æè¦ãåãããããããªãã¦ãå ¨å¡ã®ææ ¢ãå¾ã - æè¦ã«åºã¥ãã¦ã¢ã¼ããã¯ããè¦æãæã£ã¦å¤æ - éã®å¼¾ä¸¸ã¯ãªãããããã ã¨æã£ããæã¡æããéè²ã«ããè¦æã - 妥åã¯ã§ããªãã諦ãããå¤æã§ããªããªããã£ã¨èããããããããããã¡ãã¨æªæ¥ã¸è¨ãã - ã¢ã¼ããã¯ãã£ã¯ãã¼ã ã§èãã
HotSpot
- HeapStats
- 6u25ã«tiered compilationãã¯ãã£ã¦ã
- ZeroVM http://openjdk.java.net/projects/zero/
- metaspaceã¯ã¯ã©ã¹ãã¼ãã®gcæã«æ¶ãã
- ã³ã¼ããã£ãã·ã¥ã¯ãã£ã±ãã«ãªãã¨jitãã¨ã©ã¼ã«ãªãã
- ãã©ãã·ã¥æ©è½ã6u21ããã7u4ããããã©ã«ããªã³
- CMSãªããã®è³æ http://www.slideshare.net/YujiKubota/concurrent-marksweep-garbage-collection
- metaspaceãªããã http://www.slideshare.net/YaSuenag/metaspace
ã³ã¼ããã£ãã·ã¥ http://www.oraclejavamagazine-digital.com/javamagazine_open/20130708#pg42
ã¡ã¢ãªã¯ç©çã¡ã¢ãªã®ç¯å²ã§
- java8ã®CompressedClassSpaceã1Gãã£ã¦ã
- ã¹ã¬ããã¹ã¿ãã¯ã®ããã©ã«ãã¯64bit linuxã§1M
- Huge Page
- linuxã§ã¯ã«ã¼ãã«ãã©ã¡ã¼ã¿
- transparent huge page (ã«ã¼ãã«ããããªãã¦ãã)
tlbã®ãã¼ãã¹ãã¢ã§ã®ãã¹ããããæ¸ã
ã³ã¢ãå°ãªãã®ã«ã¡ã¢ãå¤ãã¨gcã¤ããã8ã³ã¢è¶ããã¨ããï¼
numaã¯ãªãã·ã§ã³ã¤ããã¨parallel (old)gcã§ãã
@Contended
- JOLã§è¦ãã
- CPUãã£ãã·ã¥ä¸ã®å¹çåã®ããã«ã¢ã©ã¤ã³ã¡ã³ããã
- ã¢ããã¼ã·ã§ã³ãsun.miscãªã®ã§æ³¨æ
jit, on stack replacement
- intrinsicsã«ãããã¤ãã³ã¼ãã®ç½®ãæãããªãã«ããã¨ãããé ãä¾
- å®è¡æã«cpuidãè¦ã¦ããµãã¼ããããå½ä»¤ã»ããã使ãããjitã§ç½®ãæãã
æå·åãæµ®åå°æ°ç¹æ¼ç®ãæååå¦çãCRCè¨ç®
sumatra
ãã¼ã«ãserviceability
- jstackã¨ã
- HSDB, CLHSDB (Java Magazine - July/August 2012è¦ãã¨ãã)
- serviceability agent ããã®ãããã
- http://www.slideshare.net/YaSuenag/serviceability-tools
ãã©ãã«ã·ã¥ã¼ãã£ã³ã°
- Javaãã©ãã«ã«åããã http://www.slideshare.net/agetsuma/java-34815905
- ã¯ã©ãã·ã¥æ
- hs_err
- ã¯ã©ãã·ã¥ããã¹ã¬ãããsegvãã©ãã
- ã³ã¼ã«ã¹ã¿ãã¯ã¯JNIã§æ»ãã§ãã¨ãå½¹ç«ã¤
- hs_errã¿ã¤ã¤ã³ã¢ãã³ãã¿ã
- CIReplay (java8)
- jitã¯ã©ãã·ã¥æã®æ å ±ãåç¾ããããã
- ABRT
- hs_errãã§ãªãã¨ãã¯ãã¤ãã£ãã¹ã¬ããã§æ»ãã§ããã
fluentdãå°å ¥ãã¾ããï¼webãµã¼ãã¼ä¸ã®agentãçµæ§ã¡ã¢ãªãæ¶è²»ããã
ããããã®ãã©ãã£ãã¯ã®ããWebãµã¼ãã¼ä¸ã§ãã¢ããªã±ã¼ã·ã§ã³ããåºåãããããã¤ãã®ãã°ãã¡ã¤ã«ãåéããããã«Fluentdãå°å ¥ãã¾ããã
ã»ããã¢ããã¯ãããªæãã
fluentdã®ãã¼ã¸ã§ã³ã¯0.10.15, rvmã1.10.3, rubyã1.9.3p125 ã§ãã
Webãµã¼ãã¼ã¯20å°ã§ãä¸çªå¤ããµã¼ãã¼ã§800ä¸req/dayãããã®è¦æ¨¡ã§ãã
åWebãµã¼ãã¼ä¸ã§ã¯in_tailã§3ã¤ã®ãã¡ã¤ã«ãtailããout_roundrobin & out_forwardã§è¨4å°ã®éè¨ç¨ãµã¼ãã¼ã«æµãã¦ãããã§ã¬ã³ã¡ã³ãã¼ã·ã§ã³ãKPIã®éè¨ãè¡ã£ã¦ãã¾ãã
Webãµã¼ãã¼ä¸ã®agentã¨ãã¦åãFluentdã®è¨å®ãã¡ã¤ã«ã¯ãããªæãã
ãã®3ã¤ã®ãã¡ã¤ã«ã¯ãããããdailyã§ãã¼ãã¼ãããã¦ã¦ã1æ¥å½ãã 460ä¸è¡ã640ä¸è¡ã370ä¸è¡ãããã§ãã
èµ·åã¯ä»¥ä¸ã®ã¹ã¯ãªããã§è¡ã£ã¦ãã¦ãä»ã®ã¨ããå®æçãªåèµ·åã¯ãªããéç¨éå§ãã2é±éã»ã©ãã£ã¦ã¦ãè¨å®å¤æ´ã®ããã«ä½åãæåã§åèµ·åããã¦ãã¾ãã
æé·1é±éã»ã©èµ·åãã£ã±ãªãã§ãããããã®æç¹ã§1Gç¨ã¡ã¢ãªã使ã£ã¦ã¾ããã
æ¹ãã¦Fluentdããã»ã¹ã®RSSãã°ã©ãåãã¦ã¿ãã¨ãããªæããï¼åèµ·åãã2æ¥ãã£ã¦ã¾ãããå¤ãåãå§ããã°ã£ããªã®ã§ã¾ã ã¡ãã£ã¨ãããã¾ããï¼
ãªãVSZã¯èµ·åå½å260Mãããããã2æ¥ã§1.1Gãããã«ãªã£ã¦ã¾ãã
ç¾ç¶ãããªã¨ããã§ãã
ãªããåãèªä½ã¯ä¸ç¹ãé¤ãã¦ï¼ã ãããã¼ã¸ãã¦ï¼ï¼ãã¾ããã£ã¦ãã¦ãPV/UU/å¦çæéãªã©ã詳細ãã¤ãªã¢ã«ã¿ã¤ã ã«è¦è¦åã§ãã¦ããããã¦ã¼ã¶ã¼ã®è¡åãã¼ã¿ããã¨ã«ããã¬ã³ã¡ã³ãã¼ã·ã§ã³ãã»ã¼ãªã¢ã«ã¿ã¤ã ã«å®ç¾ã§ãã¦ãã¾ããã¨ã£ã¦ããããã¼ï¼
-
-
- -
-
â» 3/30 追è¨
ã¡ã¢ãªä½¿ç¨éã§ããã1æ¥ãã£ã¦ä»¥ä¸ã®ããã«ãªãã¾ãããæ4æã§ãã°ãã¡ã¤ã«ã®ãã¼ãã¼ããçºçãã¦ããã§ããããã®ã¿ã¤ãã³ã°ã§ã¹ã«ãã¨è½ã¡ã¾ãããï¼ã¾ãä¸ãã£ã¦ã¾ããï¼
ã¤ãã§ã«ãWebãµã¼ãã¼ããforwardããããã°ãåãåã£ã¦å¦çãã¦ããå´ã®fluentdã®ã¡ã¢ãªç¶æ³ã¯ä»¥ä¸ã®éãä½ãæ°åã§å®å®ãã¦ãã¾ããããã©ãã£ãã¯ã«å¿ãã¦ä¸ä¸ãã¦ãã¾ãã
Jetty6ã¨7ãJava6ã¨7ã§ããã©ã¼ãã³ã¹å®é¨ãã¦ã¿ã¾ãã
rpscala第45åã§é»ã
ã¨ããã©ã¼ãã³ã¹å®é¨ããã¦ãã¾ããã
Scala勉強会第45回 in 秋葉原 : ATND
勉強会第45回 - Scala勉強会 in 東京
å 容
Jetty6ã¨Jetty7ã®ããã©ã¼ãã³ã¹å®é¨ã§ãã
Java6ã¨Java7ãããããçµã¿åããã¦ãåç´ãªã¢ããªã±ã¼ã·ã§ã³ã®ã¹ã«ã¼ãããã測ãã¾ããã
ãªãã§ãããScalaåå¼·ä¼ã§ãã£ã¦ãã®ããã¨ããã¨ãåããã¦ããã¢ããªã±ã¼ã·ã§ã³ãScalatraã ããã§ãã
è¦ããã«ãScalaã®Webã¢ããªã±ã¼ã·ã§ã³ãè¼ã£ããã®ã«ãJetty6ã¨7ãã©ã£ã¡ãéãã®ãï¼Java7ã ã£ããã©ããªã®ããã¨ããå®é¨ã§ãã
çµæ
- Jetty7 + Java6ãæéã§ããã
ã¨ããããã§ãScalaã®Webã¢ããªãªãJetty7ãJava6ã§ä½¿ãã¨éãã§ããJettyå´ã§ããããã¨æé©åããã¦ãããã®ã¨æããã¾ãã
ãªããJetty6ã§ã¯Java6ãããJava7ã®ã»ããå¤å°éãã£ãã®ã§ãJava7ãé
ãã¨ãã訳ã§ã¯ãªãããã§ãã
â» éãããå®é¨çµæã§ããæ¥åã§ä½¿ã人ã¯ãã£ã¨ã¡ããã¨å®é¨ãã¾ãããã
ç°å¢
EC2ã®largeã¤ã³ã¹ã¿ã³ã¹1ã§Jettyãåããããã1ã¤ã®largeã¤ã³ã¹ã¿ã³ã¹ããè² è·ããããæ§æã
OSã¯Amazon Linux 64bit
åã³ã³ãã¼ãã³ãã®ãã¼ã¸ã§ã³ã¯ä»¥ä¸ã®ã¨ããã
- Jetty7 7.4.5
- Jetty6 6.1.26
- JDK7 GA
- JDK6 1.6.0 u26
åãããã¢ããªã±ã¼ã·ã§ã³
ãã®maven archetypeã§ä½ã£ããµã³ãã«ã¢ããªã±ã¼ã·ã§ã³ï¼HelloWorldï¼
Srirangan/simple-scalatra-archetype · GitHub
ã®
Scalaã¨Scalatraã®ãã¼ã¸ã§ã³ã以ä¸ã®ã¨ããå¤ãããã®ã§ãã
- Scala 2.8.1 => 2.9.0-1
- Scalatra 2.0.0M3 => 2.0.0M4
mvn packageã§ãã«ãããwarãjettyã®webappãã£ã¬ã¯ããªã«ãããã¤ãã¦åããã¾ããã
Jettyã®è¨å®
Jetty7ã®è¨å®ã«åããã¦ãJetty6ã®NIOã³ãã¯ã¿ã®lowResourcesConnectionsã5000ãã20000ã«å¤æ´ãã¦ããã¾ãã
ãã®ä»ã®å¤ã¯ããã©ã«ãã®ç¶æ
ã§ãã
測å®æ¹æ³
- Jettyèµ·å
- ab -n 10000 -c 100 ã5åï¼ãªããï¼
- ab -n 10000 -c 100 ã5åï¼è¨æ¸¬ãã¦å¹³årequest/secãåãï¼
æ°å
æ°å¤ã¯request/secã§ãã
æ§æ | ã¹ã«ã¼ããã |
---|---|
Jetty6 - Java6 | 2811 |
Jetty6 - Java7 | 3104 |
Jetty7 - Java6 | 4730 |
Jetty7 - Java7 | 4329 |
ãã¾ã
Tomcatã測ã£ã¦ã¿ã¾ããã
çµæãTomcat7ã¯NIOã³ãã¯ã¿ã«å¤ããã¨é
ããã§ãããæ¨æºã®ããããã³ã°IOã®ã³ãã¯ã¿ãéãã£ãã§ããJettyãããã
æ§æ | ã¹ã«ã¼ããã |
---|---|
Tomcat7.0.19 - Java6 | 5361 |
Tomcat7.0.19 - Java7 | 5198 |
Tomcat7.0.19 NIO - Java6 | 3618 |
Tomcat7.0.19 NIO - Java7 | 3452 |
Tomcat6.0.32 - Java6 | 4212 |
Tomcat6.0.32 - Java7 | 4370 |
Tomcat6.0.32 NIO - Java6 | 4578 |
Tomcat6.0.32 NIO - Java7 | 4211 |
ãªããããã¾ã§ããã©ã«ãã®è¨å®ã§ããã¤ãã®ç°å¢ã§éãã£ãã ããªã®ã§ãå¿
ããã常ã«Tomcat7ãJetty7ããéãããã§ã¯ãªãã§ãã
ã¾ãæ©ä¼ããã£ããããã£ã¨çªã£è¾¼ãã§èª¿ã¹ããã¨æãã¾ãã
Scalaç¨DBã¢ã¯ã»ã¹ã©ã¤ãã©ãª Querulous ã®ä½¿ãæ¹
ï¼ãã®è¨äºã¯ Scala Advent Calendar jp 2010 ã®1æ¥ç®ã§ããï¼
Scalaç¨ã®Scalaã§æ¸ãããDBã¢ã¯ã»ã¹ã®ããã®ã©ã¤ãã©ãªãquerulousã«ã¤ãã¦æ¸ãã¾ãã
ã¨ããããèªã¿æ¹ããããããã¾ããããã¯ã¥ã¨ã«ã¡ã©ã¹ï¼ï¼ã¿ãããªæãã§ãããããè¨ãã«ããã®ã§ãã¯ã¨ã©ã©ã¹ãã£ã¦ãã¨ã«ãã¾ããããè±èªã®å½¢å®¹è©ã§ãæå³ã¯ãä¸å¹³ããããã®ãä¸å¹³ãããããè¨ãããããã§ããããã¤ååã§ããã
querulousã¯ä»¥åç´¹ä»ããKestrelã¨åæ§ãTwitterã§ä½ããã¦ä½¿ããã¦ãããã®ã§ããããè¾ãã¡ãã£ããããã§ãããå
Twitterã®Nick Kallenæ°ãä½ã£ãããã§ããä»ã¯Githubä¸ã§twitterã¨ããIDã®ä¸ã§ç®¡çããã¦ãã¾ãã
ï¼12/8 è¿½è¨ Nick Kallenæ°ã¯ã¾ã è¾ãã¦ã¾ããã§ããããã¿ã¾ãããAlex Payneæ°ã¨åéããkzys ããææãããã¨ããããã¾ãï¼
æ©è½ã¨ç¹é·ãreadmeããæç²ããã¨
- JDBCã®ããã©ããããã¨ãããæãã«ãã£ã¡ãããã
- ã¿ã¤ã ã¢ã¦ãã¨ãæ»æ´»æ¤ç¥ã¨ããªãã©ã¤ã¨ããé害èæ§ãèãã¦ããã
- çµ±è¨æ å ±ã¨ãããããªãããã°ãã°ã¨ãåºããã便å©ã ãã
- ã³ã¼ãã¨ãè¦ç´ã¨ãä¾åé¢ä¿ã¨ãæå°éã§ãSQLãã¥ã¼ãã³ã°ã®éªéã¯ããªããã
- ã¢ã¸ã¥ã¼ã«åããã¦ã¦ã«ã¹ã¿ãã¤ãºãOKãã
ã¨ããæããããã§ãã
ãæå°éãã£ã¦ã®ã¯ãä¾ãã°JNDIã¯ä½¿ããªãã£ãããMySQLãããµãã¼ããã¦ãªãã£ããã§ãã
ä¾åé¢ä¿ãæå°éã£ã¦ã¨ãã¯ç´å¾ãããããã§ãããLiftã¿ãããªããã¼ãªãã®ããæ¯ã¹ãã°å°ãªãã¨æãã¾ããä¾åããã®ã¯ä»¥ä¸ã®ã©ã¤ãã©ãªç¾¤ã§ãã
- configgy ï¼è¨å®ã¨ãã®ã³ã°ã®ããã®ã©ã¤ãã©ãªï¼
- xrayspecs ï¼Specsã®æ¡å¼µã©ã¤ãã©ãªã以ä¸ã®3ã¤ã¨åããã¦ãã¹ãç¨ããã®ä¸ã®æéè¨æ¸¬é¢é£ã®ã¯ã©ã¹ã»é¢æ°ãããã¼ã«ä½¿ããã¦ã¦ãã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ãåºã¦ãã¾ãï¼
- specs
- jmock
- hamcrest
- mysql-connector-java !! ï¼æ½ãMySQLãªã³ãªã¼ã§ãï¼
- commons-dbcpï¼commons-pool ï¼ãããæ½ãã§ããï¼
- objenesis ï¼ãªãã¬ã¯ã·ã§ã³ç¨ã®ã©ã¤ãã©ãªï¼
- cglibï¼asm ï¼ãã¤ãã³ã¼ããå®è¡æã«ã´ãã§ã´ãã§ãããã¤ï¼
ããã¾ãreadmeãããå®è£
ã«ã¤ãã¦ã®èª¬æãæç²ããã¨
- Querulousã¯QueryEvaluators, Queries, Databasesã®ï¼ã¤ã®ã³ã³ãã¼ãã³ããã¡ã¤ã³ã
- QueryEvaluatorsã¯ã¯ã¨ãªå®è¡ã®ããã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã
- Queries㯠SELECT/UPDATE/INSERT/DELETE ã¯ã¨ãªãæ½è±¡åãããã®ãç´æ¥Queriesãæä½ãããã¨ã¯ããã¾ããªãã
- Databasesã¯DBæ¥ç¶ã®ç®¡çãè¡ããã®ã
- ãã®3ã¤ã¯ããããã®Factoryãã¤ã³ã¿ã¼ãã§ã¤ã¹ã¨ãã¦æ¸ããã¦ã¦ãå®è£ ã¯decorator-patternã§éãã¦ä½¿ãã
val queryFactory = new DebuggingQueryFactory(new TimingOutQueryFactory(new SqlQueryFactory)) val query = queryFactory(...) // this query will have debugging information and timeouts!
ï¼ããã¯Scalaãªãã ããtraitãwithã§éããã°ããã®ã«ãã¨æããã©ãããã¯ã§ããªãã®ããªã»ã»ã»ããããªãï¼
使ã£ã¦ã¿ã
使ã£ã¦ã¿ã¾ããããquerulousã®jar㯠maven.twttr.com ã§å
¬éããã¦ãã¦ãsbtãmavenããåç
§ãããã¨ãã§ããããã«ãªã£ã¦ã¾ãã
ããããã®è¨å®ã¯ä»¥ä¸ã®ã¨ããã§ãã
sbtã®è¨å®
ããã¸ã§ã¯ããã¡ã¤ã«ã«ä»¥ä¸ã®ããã«ãªãã¸ããªã¨ã©ã¤ãã©ãªã¸ã®åç §ãæ¸ãã°OKã§ãã以ä¸ã¯Scala 2.8ç³»ã®å ´åã®è¨å®ã§ãã2.7ç³»ã®å ´åã¯querulous_2.8.0ã®ã¨ãããquerulous_2.7.7ã«ãã¦ãã ããããªããquerulous_2.8.1ã¯ãªãã¸ããªã«åå¨ããªãã®ã§ã2.8.1ã§ä½¿ãå ´åã¯querulous_2.8.0ã使ãã¾ãããã
import sbt._ class QuerulousSampleProject(info: ProjectInfo) extends DefaultProject(info) { val twitterRepos = "Twitter Maven Repository" at "http://maven.twttr.com" val querulous = "com.twitter" % "querulous_2.8.0" % "1.4.3" }
Mavenã®è¨å®
Mavenã®å ´åã¯pom.xmlã«ä»¥ä¸ã®ã¨ããã«repositoryã¨dependencyã®è¨å®ãæ¸ãã°OKã§ããMavenã¨Ivyã®å ´åã®èª¬æã¯ãreadmeã«ãæ¸ãã¦ããã¾ãããreadmeã®èª¬æã¯ãã¼ã¸ã§ã³è¡¨è¨ãartifactIdãå¤ããã®ã«ãªã£ã¦ããã®ã§æ³¨æãã¦ãã ããã以ä¸ã®è¨è¿°ã¯ä¸è¨ã®sbtã®å ´åã¨åæ§Scala 2.8ç³»åãã§ãã2.7ç³»ã®å ´åã¯querulous_2.8.0ã®ã¨ãããquerulous_2.7.7ã«ãã¦ãã ããã
<repository> <id>twitter.com</id> <url>http://maven.twttr.com/</url> </repository> <dependency> <groupId>com.twitter</groupId> <artifactId>querulous_2.8.0</artifactId> <version>1.4.3</version> </dependency>
QueryEvaluatorã®åå¾
querulousã§ã¯ããã¼ã¿ãã¼ã¹ã«ã¢ã¯ã»ã¹ããããã«ãã¾ãQueryEvaluatorFactoryãä½ãã¾ããåè¿°ã®éããdecolator-patternã«ãªã£ã¦ãã¦ã以ä¸ã®ãããªã³ã¼ãã§ä½æã§ãã¾ããï¼commons-dbcpã使ã£ã¦ã³ãã¯ã·ã§ã³ãã¼ã«ãä½ãä¾ã§ãï¼
import com.twitter.xrayspecs.TimeConversions._ import com.twitter.querulous.evaluator._ import com.twitter.querulous.query._ import com.twitter.querulous.database._ object Database { val factory = new StandardQueryEvaluatorFactory( new ApachePoolingDatabaseFactory( minConns = 2, maxConns = 200, checkIdle = 0 seconds, maxWait = 200 millis, checkHealth = false, evictTime = 30 minutes ), new SqlQueryFactory) // secondsã¨ãmillisã¯com.twitter.xrayspecs.TimeConversionsã§å®ç¾©ããã¦ãã¾ã }
ç¶ãã¦ãããã§ä½æããQueryEvaluatorFactoryã®applyã¡ã½ããã使ç¨ãã¦ãQueryEvaluatorãä½æãã¾ãã
ï¼12/8 è¿½è¨ ãã©ã¡ã¼ã¿dbhostsã«æ¸¡ãã®ã¯ãList[String]ã§ãããã®ã¾ã¾MySQLã®JDBCãã©ã¤ãã«æ¸¡ããã¾ããï¼
lazy val evaluator = factory( dbhosts = List("192.168.0.1:3306", "192.168.0.2:3306"), dbname = "dbname", username = "username", password = "password", urlOptions = "urloption" )
ã¯ã¨ãªã®å®è¡
å ã»ã©ä½æããQueryEvaluatorã使ã£ã¦ã¯ã¨ãªãå®è¡ãã¾ãã以ä¸ã®ããã«SQLãç´æ¥æ¸ãã¦ãç´æçã«å©ç¨ãããã¨ãåºæ¥ã¾ãã
case class User(userId : Long, serviceId : Int, userName : String) // 1ã¬ã³ã¼ãã®SELECT æ»ãå¤ã¯Optionåã«ãªã val oneUser : Option[User] = evaluator.selectOne("SELECT user_id, service_id, user_name FROM users WHERE user_id = ?", userId) { row => User(row.getLong("user_id"), row.getString("user_name")) } // è¤æ°ã¬ã³ã¼ãã®SELECT æ»ãå¤ã¯Seqåã«ãªã val users : Seq[User] = evaluator.select("SELECT user_id, service_id, user_name FROM users WHERE user_id = ?", userId) { row => User(row.getLong("user_id"), row.getString("user_name")) } // UPDATE/DELETE æ»ãå¤ã¯å½±é¿ã®ãã£ãè¡æ° Intåã«ãªã val excuteRet : Int = evaluator.execute("DELETE FROM users WHERE user_id = ? ", userId) // INSERT æ»ãå¤ã¯auto incrementã®çµæå¤ Longåã«ãªã // executeãå®è¡ããå¾ãSELECT LAST_INSERT_ID() ãå®è¡ããä»æ§ã§ã val ret : Int = evaluator.insert("INSERT INTO users(user_id, user_name ) VALUES(?, ?)", 123, "hito_asa")
以ä¸ã§ãï¼
ï¼12/13 ä¿®æ£ INSERTã¨UPDATE/DELETEã®èª¬æãä¸ç·ã«ãªã£ã¦ããã®ãä¿®æ£ãã¾ãããINSERTã¯auto incrementã®çµæå¤ãè¿ãããã§ãï¼
Scalaã§treeã³ãã³ã
åºé ãã¾ããããScalaã§treeã³ãã³ãæ¸ãã¦ã¿ã¾ããã
å ãã¿ã¯11/17ã®Scalaåå¼·ä¼ in æ¸è°·ã§ @sagara177 ãããçºè¡¨ããã¦ããã¤ã§ãã
tree/Tree.scala at master · hito-asa/tree · GitHub
ãã£ã¬ã¯ããªã¨ãã¡ã¤ã«ã®éãã¨ãããã£ã¬ã¯ããªå ã®æå¾ã®ã¨ã³ããªã ãæã®æç»ãå¤ããã¨ããã¨ãã®è¡¨ç¾ããJavaç±æ¥ã£ã½ãOOãªæ¸ãæ¹ããã¦ã¿ã¾ããã
ããããã®ãé¢æ°åã£ã½ãæ¸ãã®ã£ã¦é£ãããããã©ããã¦ãã¯ã©ã¹ã¨ãªãã¸ã§ã¯ããåºã¦ãã¡ãããé ãJavaã«æ¯ããã¦ããæ°ããã¦ããã
ãWebããã°ã©ãã®ããã®Scalaå ¥éåå¼·ä¼ï¼ æ¸è°·ããéå¬ãã¾ããã
åå¿è
åãã®Scalaåå¼·ä¼ã¨ãã¦ããWebããã°ã©ãã®ããã®Scalaå
¥éåå¼·ä¼ï¼ æ¸è°·ãã¨ããã®ãéå¬ãã¾ãããï¼2é±éãåã®è©±ã§ãããï¼
åå è
ã¯20人強ã§ã大åãPHPã¨ã³ã¸ãã¢ï¼ãã¨ã¯Java, Ruby, Perl, Pythonãããï¼ã ã£ãããã§ãã
éå¬æ¦è¦ã¨ãã¯ä¸è¨ãªã³ã¯ã®ATNDã®ãã¼ã¸ã®ã¨ããã§ããããã£ã¨ä»¥ä¸ã®ãããªå
容ã§ããã
Scalaã§Hello, World!
Hello, World!ãããã£ã¦ãããã¨ããå¼·ãæå¿ã®ãã¨ã20åã»ã©ããã¦Hello, World!ã解説ãã¾ããã
éä¸ãç°å¢çãªçç±ã«ããHello, World!ãåããªãã¨ããã¾ããã®äºæ
ãçºçããããæéä¸è¶³ã§å¿ç¨ç·¨ãç´¹ä»ã§ããªãã£ãããã¾ããã
ãªããå¿ç¨ç·¨ã®å
容ã¯ãããªã«é¢ç½ããã®ã§ã¯ãªãã®ã§ããã以ä¸ã«ç´¹ä»ãã¦ããã¾ãã
ã³ã³ãã¤ã©ãã©ã°ã¤ã³ã§Hello, World!
Scalaã«ã¯ãã³ã³ãã¤ã«æã«ç¬èªã®ãã©ã°ã¤ã³ãå®è¡ãããä»çµã¿ãããã¾ããã³ã³ãã¤ã©ãã½ã¼ã¹ã³ã¼ãããã¼ã¹ããå¾ã®ãã§ã¼ãºã«å¦çãæ¿ãè¾¼ãã§ãæ§ææ¨ãåãåã£ã¦ããããæä½ãã¦æ¬¡ã®ãã§ã¼ãºã«æ¸¡ããã¨ãã§ãã¾ãã
å·®ãè¾¼ãããã§ã¼ãºã¯ãparser, typer, pickler, liftcode, tailcalls, erasure, cleanup, jvm, terminalã¨ããã¾ãã詳ããå
容ã«ã¤ãã¦ã¯ããã¡ããåç
§ãã¦ãã ããã
ããã§ã¯ãparserãã§ã¼ãºã®å¾ã«Hello, World!ããã³ã³ãã¤ã©ãã©ã°ã¤ã³ãæ¸ãã¦ã¿ã¾ãã
package wpscala import scala.tools.nsc import nsc.Global import nsc.Phase import nsc.plugins.Plugin import nsc.plugins.PluginComponent class EverythingHello(val global: Global) extends Plugin { import global._ val name = "everything_hello" val description = "say hello to everything." val components = List[PluginComponent](Component) private object Component extends PluginComponent { val global : EverythingHello.this.global.type = EverythingHello.this.global val runsAfter = List("parser") val phaseName = EverythingHello.this.name def newPhase(_prev: Phase) = new SayHelloPhase(_prev) class SayHelloPhase(prev: Phase) extends StdPhase(prev) { override def name = EverythingHello.this.name def apply(unit: CompilationUnit) { println("Hello, World!") } } } }
ããããã¨ããã©ãããã§ãããparserãã§ã¼ãºã®å¾ã«ãSayHelloPhaseã¨ãããã§ã¼ãºãæã¿è¾¼ãå¦çãè¨è¿°ãã¦ãã¾ãã
ãããã³ã³ãã¤ã«ãã¦ä»¥ä¸ã®XMLã¨ä¸ç·ã«Jarã«ã¾ã¨ãããã®ãä½æããããã§...
scalac-plugin.xml
<plugin> <name>everything_hello</name> <classname>wpscala.EverythingHello</classname> </plugin>
以ä¸ã®ããã«ä½¿ãã¾ãã
scalac -Xplugin:everything_hello.jar hoge.scala
ããã¨ãhoge.scalaã®å
容ã¨ã¯ç¡é¢ä¿ã«ãã¨ããããã³ã³ãã¤ã«æã«Hello, World!ãåºã¾ãã
ãã³ãã¯ããããé¢ç½ããªãã®ã§ãã¡ããã¨æ§ææ¨ãæä½ãã¦ä¸èº«ãHello, World!ã«æ¸ãæãã¦ãããã¨æã£ãã®ã§ããããã®ããã«ã¯æ§ææ¨ãã©ããªã£ã¦ããã®ãã調ã¹ããããªãã¨ãããªãã®ã§æ«æãã¦ãã¾ãã¾ããããã¿ã¾ããããã
source-readerã§Hello, World!
å
ç¨ã®ã³ã³ãã¤ã©ãã©ã°ã¤ã³ã§ã¯ããã¼ã¹å¦çã®åã«å¦çãå·®ãè¾¼ããã¨ã¯ã§ãã¾ããããã®ãããScalaã®ææ³ã¨ãã¦ãã¼ã¹ã§ããªãã½ã¼ã¹ã³ã¼ãã«ã¤ãã¦ã¯ã©ãããããããã¾ããã§ããã
source-readerã¯ãã¼ã¹ãããåãã½ã¼ã¹ã³ã¼ããèªã¿è¾¼ããã§ã¼ãºã«å¦çãå·®ãè¾¼ã¿ã¾ããèªã¿è¾¼ãã ã½ã¼ã¹ã³ã¼ããæ¹å¤ãã¦ã³ã³ãã¤ã©ã«æ¸¡ããã¨ãã§ãã¾ãã
ãããå¿ç¨ãã¦ãã³ã³ãã¤ã©ãã£ã¬ã¯ãã£ããè¨è¿°ãã¦ããã¯ããå®ç¾©ã»å±éãããããã³ãã¬ã¼ãã¨ã³ã¸ã³ãçµã¿è¾¼ãã§ã³ã³ãã¤ã«æã«ã³ã¼ãçæããããªãã¦ãã¨ãå¯è½ã§ãã
ã¨ããããã§ãä½ãèªã¿è¾¼ãã§ãå ¨é¨Hello, World!ã«ãã¦ãã¾ãsource-readerã®ã³ã¼ãã¯ä»¥ä¸ã®ã¨ããã§ãã
package wpscala import scala.tools.nsc.io.SourceReader import java.nio.charset.CharsetDecoder import scala.tools.nsc.reporters._ class EverythingHelloReader(decoder : CharsetDecoder, reporter : Reporter) extends SourceReader(decoder, reporter) { def this() = this(null, null) override def read(file : java.io.File) : Array[Char] = { """object Hello { def main(args : Array[String]) { println("Hello, World!") } }""".toCharArray } }
ãããã³ã³ãã¤ã«ãã¦Jarãã¡ã¤ã«ã«ãããã®ã$SCALA_HOME/libã«é ç½®ããããã§ã以ä¸ã®ããã«ä½¿ãã¾ãã
scalac -Xsource-reader wpscala.EverythingHelloReader hoge.scala
ããã¨ãhoge.scalaã®ä¸èº«ããªãã§ãããã¨ãã³ã³ãã¤ã©ã«ã¯Hello, World!ã®ã³ã¼ãã渡ããããã¨ããããã§ãã
Scalaéçºç°å¢æ§ç¯
sbt, ENSIME, codefellow, Eclipse, NetBeans, IntelliJ IDEAã®ç´¹ä»ããã¾ããã
ã¢ã³ã±ã¼ãã«ããã¨ã大åãEclipseã¦ã¼ã¶ã¼ã ã£ãã®ã§ãããScala + Eclipseã¯ãã¾ãããããã§ãã¾ãããã¡ã¢ãª8Gã§ã¡ã¢ãª8Gç©ãã§é«ç´ãªSSDãã·ã³ã ã£ããããã®ãªããããã§ãããã¨ã«ããéããé
ããåºã¾ãã¾ãã
å人çã«ã¯NetBeans6.9.1ãããæããªã®ã¨ãå··ã®è©å¤ã§ã¯IntelliJ IDEAãè¯ãã£ãããã¾ãã
ç´ ã®ã¨ãã£ã¿ã使ã£ã¦ãã人ãå¤ãããã§ããã®ã§ããããã人ã«ã¯emacs + ENSIMEã便å©ãã¨æãã¾ããvim + codefellowã¯ãã©ããã¦ãvimãããªãã¨ãã¡ãªäººã«ãããããããã¾ãããåããã¾ã§ã大å¤ãªã®ã§ã
ã³ããæ¬èªæ¸ä¼
ã³ããæ¬ï¼Scalaã¹ã±ã¼ã©ãã«ããã°ã©ãã³ã°ï¼ã®ç¬¬1ç« ã第3ç« ã対象ã¨ãã¦ãèªæ¸ä¼ãè¡ãã¾ããã
ã¨è¨ã£ã¦ããããªããããã®ã§ã第1ç« ã«ã¤ãã¦ã¯è»½ã解説ãã¦ãæ®ããåå°ãã¼ãã«ã§é²ããå½¢å¼ã«ãã¾ããã
çµæããã¼ãã«ãã¨ã«å
¨ç¶éããã¨ããã£ã¦ããããã§ãç°å¢æ§ç¯ã®ç¶ãããã£ã¦ãã人éãããã°ãScalaã«ã¤ãã¦ã²ãããè«è°ãã¦ã人ãã¡ããã¾ããã
å°ãã¼ãã«ã ã¨è©±ããæãã§ãããåèªãããããã¨ã¯éã£ãããããã®ã§ããã®å½¢å¼ã¯è¯ãã£ãããªã¨æãã¾ãã
äºåã¢ã³ã±ã¼ãã®çµæ
å½æ¥çºè¡¨ãããã¨æã£ã¦å¿ãã¦ãããã§ãããäºåã«ATNDã§ã¢ã³ã±ã¼ããåã£ãçµæã§ãã
ããã®åå¼·ä¼ã«ä½ãæå¾
ãã¾ããï¼ãã¨ããè¨åã§ãç®ç«ã£ãåçã¯ä»¥ä¸ã®ã¨ããã§ãã
- Scalaãåºç¤ããåå¼·ããã 5人
- ä»äºã®ãã 3人
- Scalaåå ¥é 2人
- åå è å士ã®äº¤æµ 2人
- Javaããã®è±å´
- é¢æ°åè¨èªãå¦ã³ãã
- æãåãããªããå¦ã³ãã
- GAEã§Facebookã¢ããªä½ããã
- Scalaèªä½ã«æå¾ ãã¦ãã
ãã£ã±ãåºç¤ããåå¼·ãããã¨ãã人ãå¤ãã§ãããã¨ããããã§ããã®åå¼·ä¼ã®ã¿ã¼ã²ããã¯ã主ã«ããã主ç¼ã¨ãã¦ãããã¨æãã¾ãã
次å
ããããåå¼·ä¼ã®ä¸»å¬ã¯åãã¦ã ãããããããã°ã£ãããªã³ã³ã»ããã®ãªãç¶æ
ã§éå¬ãã¦ãã¾ãã¾ãããããScalaãã¨ããåèªã®ãããã§äºæ³ä»¥ä¸ã®äººã«ãè¶ãããã ãã¾ããã
æå¾
ãã¦ããã ããå
容ã¨ã¯éã£ãããããã¾ããããç¶ç¶å¸æã®å£°ãããã ãã¾ãããæ¬å½ã«ãããã¨ããããã¾ãã
ã¨ããããã§ã第2åãæ¬æ¥ï¼2010/11/16ï¼éå¬ãã¾ãã®ã§ããããããé¡ãè´ãã¾ãã