2016-11-04
/ scala
æšæ¥ãªãªãŒã¹ãããã°ããã® Scala 2.12.0 ã®ãªãªãŒã¹ããŒãã翻蚳ããŸããã
Lightbend 瀟 Scala ããŒã ã®ã³ã³ãã€ã©éãæãåãããããã¢ãªå
容ã«ãªã£ãŠããŸãã
Scala 2.12.0 ããªãªãŒã¹ãããŸãã!
Scala 2.12 ã³ã³ãã€ã©ã¯ Java 8 ãã䜿ããããã«ãªã£ãæ°ãã VM æ©èœãå©çšããããã«ãå®å
šãªãªãŒããŒããŒã«ãè¡ãããã
ãã¬ã€ãã¯ãããã©ã«ãã¡ãœããä»ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã«çŽã«ã³ã³ãã€ã«ããã ãããã¯ãã€ããªäºææ§ãš Java ãšã®çžäºéçšæ§ãåäžãããã
Scala ãš Java 8 ã®çžäºéçš (interop) ãšããç¹ã§ã¯ã颿°ãåãåãã¡ãœãããäž¡æ¹åãããã©ã ãæ§æã§åŒã³åºããããã«ãªã£ãã®ã§é¢æ°åãªã³ãŒãã«ãããŠãæ¹åãããScala æšæºã©ã€ãã©ãªã® FunctionN
ã¯ã©ã¹çŸ€ã¯ãSingle Abstract Method (SAM) åãšãªããå
šãŠã® SAMå ã¯ã忀æ»ããã³ãŒãçæã«ããããŸã§çµ±äžçã«åãæ±ããã (ã¯ã©ã¹ãã¡ã€ã«ã¯çæãããã代ããã« invokedynamic
ãçšãããã)ã
2016-08-02
gigahorse-github 0.1.0 ããªãªãŒã¹ãããããã¯ãGithub API v3 ã®ããã® Gigahorse ãã©ã°ã€ã³ã ã
2016-07-29
æŽæ°: Gigahorse 0.1.1ãã䜿ã£ãŠãã ããã
Gigahorse 0.1.0 ããªãªãŒã¹ããããã㯠Scala ã®ããã® HTTP ã¯ã©ã€ã¢ã³ãã§ãå
éšã«Async Http Client ã䜿ã£ãŠããã詳ãã㯠Gigahorse ããã¥ã¡ã³ã ãæžããã®ã§ããããåç
§ããŠã»ãããã©ã€ãã©ãªãã©ãããæããªã®ããäŸã§ã¿ããšãããªæãã ã
scala> import gigahorse._
scala> import scala.concurrent._, duration. _
scala> Gigahorse . withHttp( Gigahorse . config) { http =>
val r = Gigahorse . url( "http://api.duckduckgo.com" ). get.
addQueryString(
"q" -> "1 + 1" ,
"format" -> "json"
)
val f = http. run( r, Gigahorse . asString andThen { _ . take( 60 )})
Await . result( f, 120. seconds)
}
2016-07-03
ããæè¿èããŠããããã¿ãŒã³ãããã£ãŠããªããžã§ã¯ããæ°žç¶å/ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ããã¿ãããªç¶æ³ã§åºãŠããã
åé¡æèµ·ãšããŠã以äžã®ãã㪠case class ãèããŠã¿ãŠã»ãã:
scala> case class User ( name: String , parents: List [ User ])
defined class User
scala> val alice = User ( "Alice" , Nil )
alice: User = User ( Alice , List ())
scala> val bob = User ( "Bob" , alice : : Nil )
bob: User = User ( Bob , List ( User ( Alice , List ())))
scala> val charles = User ( "Charles" , bob : : Nil )
charles: User = User ( Charles , List ( User ( Bob , List ( User ( Alice , List ())))))
scala> val users = List ( alice, bob, charles)
users: List [ User ] = List ( User ( Alice , List ()), User ( Bob , List ( User ( Alice , List ()))),
User ( Charles , List ( User ( Bob , List ( User ( Alice , List ()))))))
泚ç®ããŠã»ããã®ã¯ parents
ãšããä»ã®ãŠãŒã¶ãåç
§ãããªã¹ããä¿æããŠãããšã ã
次ã«ãusers
ãªã¹ãã JSON ã«å€æããããšããã
[{ "name" : "Alice" , "parents" : [] } ,
{ "name" : "Bob" ,
"parents" : [{ "name" : "Alice" , "parents" : [] }] } ,
{ "name" : "Charles" ,
"parents" : [{ "name" : "Bob" , "parents" : [{ "name" : "Alice" , "parents" : [] }] }] }]
ãã®æ¹æ³ã ãšè€æ°ã®åé¡ç¹ãããããŸããJSON ã®è¡šèšãšããŠå¹çãæªãã JSON ããŒã¿ãšããŠæåŸ
ãããèªç¶ãªæãã§ã¯ãªãããšã ãæ¬¡ã«ãããã case class ã«å€æããªããããšãã«ãªããžã§ã¯ãã®ã°ã©ãããšã€ã³ã¹ã¿ã³ã¹åããå¿
èŠããã£ãŠããããéå¹çã ããæãŸãããªãç¶æ³ãå€ããšæãã
ããŒã¿ã颿°å€ãªã©ãä¿æããŠãããšããã«åä»ãªããšã«ãªã£ãŠããã
registry and reference ãã¿ãŒã³
ãã®å¯ŸçãšããŠèããŠãããã®ãå㯠registry and reference ãã¿ãŒã³ãšåŒãã§ãããåºæ¬çãªèããšããŠã¯ãäºã 3人ã®ãŠãŒã¶ã registry (ç»èšæ) ã«ç»é²ããŠãJSON ã¯ä»¥äžã®ãããªå
容ã§äŒéãã:
[ "Alice" , "Bob" , "Charles" ]
ã°ã°ã£ãŠã¿ããš Martin Fowler å
çã Registry ãã¿ãŒã³ ãšåŒãã§ããã¿ããã ã圌ã®ã¢ãã«ã ãš Registry ã¯ä»¥äžã® 2ã€ã®ã¡ãœãããå«ã:
2016-06-06
/ scala
æ¬çš¿ã¯ sjson-new ã«é¢ãã第3éšã ãããŒã1 ãããŒã2 ãæ¯éèªãã§ã¿ãŠã»ããã
sbt ã®ã³ãŒãå
ã«ã¯ããŒã¿æ°žç¶åãæ°çŸã¡ã¬ãã€ãã®ãªãŒããŒã«éããŠããéšåãããã€ããã£ãŠãç¹ã«ãã·ã³ã« SSD ãç©ãŸããŠããªãå Žåã¯æ§èœããã«ããã¯ã«ãªãçããããããããªãããšæã£ãŠããã
åœç¶ãæåã«é£ã³ã€ããã®ã¯ Google Protocol Buffers ã®ãšã³ã³ãŒãã£ã³ã°ãåèã«ç¬èªã®ãã€ããªãã©ãŒããããå®è£
ããããšã ã£ãã
sbt-jmh ãçšãããã€ã¯ããã³ãããŒã¯
åããŸãããã¹ãã ã£ãã®ã¯ããã³ãããŒã¯ãåãããšã ã@ktosopl (Konrad Malawski) åã® sbt-jmh ã䜿ããšãã€ã¯ããã³ãããŒã¯ã¯ç°¡åã«äœãããšãã§ããããã«ãã«ãã©ã°ã€ã³ãå
¥ããŠãJmhPlugin
ãæå¹åãããµããããžã§ã¯ããå®çŸ©ããã ãã ã
lazy val benchmark = ( project in file( "benchmark" )).
dependsOn( supportSpray). // add other subprojects you want to test
enablePlugins( JmhPlugin ).
settings(
libraryDependencies ++= Seq ( jawnSpray, lm),
// sbt-jmh forks the run, so you would need these
javaOptions in ( Jmh , run) ++= Seq ( "-Xmx1G" , "-Dfile.encoding=UTF8" ),
publish : = {},
publishLocal : = {},
PgpKeys . publishSigned : = {}
)
äžã€æ³šæãå¿
èŠãªã®ã¯ sbt-jmh ã¯ãã©ãŒã¯ãã run
ã䜿ã£ãŠããã®ã§ãjavaOptions in (Jmh, run)
ã®èšå®ãå¿
èŠãªããšã ã
ããšã¯äŸ ã«ãªãã£ãŠãã³ãããŒã¯ãå®çŸ©ããŠããã ãã ãå㯠Jawn ã®ç䌌ãã㊠abstract class ã«ããŠã¿ãã
2016-05-24
/ scala
2ã¶æãããåã« sjson-new ã«ã€ããŠæžããã鱿«ã«ãŸãã¡ãã£ãšããã£ãŠã¿ãã®ã§ãããã«å ±åããã
åå㯠Scala ãšã³ã·ã¹ãã ã«ããã JSON ã©ã€ãã©ãªã®å®¶ç³»ããã©ã£ãŠãè€æ°ããã¯ãšã³ãã«å¯Ÿå¿ãããã€åã¯ã©ã¹ããŒã¹ã® JSON ã³ãŒããã¯ã©ã€ãã©ãªãšããæŠå¿µãå°å
¥ããã課é¡ã¯ãã«ã¹ã¿ã ã³ãŒããã¯ãç°¡åã«å®çŸ©ã§ããããã«ããå¿
èŠããããšããããšã ã£ãã
ç§å®¶ç shapeless
4æã«æžããã®ãšå
é±ãŸã§ã®éã« flatMap(Oslo) 2016 ãš Scala Days New York 2016 ãšãã 2ã€ã®ã«ã³ãã¡ã¬ã³ã¹ããã£ããæ®å¿µãªãããå㯠flatMap ã®æ¹ã«ã¯è¡ããªãã£ããã©ããDaniel Spiewak ããã® “Roll Your Own Shapeless” (ãç§å®¶ç Shapeless ã®ãããã) ãšããããŒã¯ã New York ã§èãããflatMap ç ã®æ¹ãå®å
šçã§ãã㯠vimeo ã«ãåºãŠãã®ã§ãæ¯éãã§ãã¯ããŠã¿ãŠã»ããã
sbt ã®å
éšã§ã¯ãsbinary ãçšãããã£ãã·ã³ã°ã« HList ãçšããããŠãããã:
implicit def mavenCacheToHL = ( m: MavenCache ) => m. name : *: m.rootFile.getAbsolutePath :*: HNil
implicit def mavenRToHL = ( m: MavenRepository ) => m. name : *: m.root :*: HNil
...
ãããã圱é¿ããã£ãŠãHList ãšã Shapeless ã® LabelledGeneric
ã¿ãããªã®ãããã° JSON object ã衚ãäžéå€ãšããŠããã®ã§ã¯ãªãããšæã£ãŠããã®ã§ãDaniel ã®ããŒã¯ã«ã¯æåŸã«èäžãæŒããŠããã£ãæ°ãããã
æ¬çš¿ã§ã¯ãHList ã®ç®çãç¹åãã LList ãšãããã®ã玹ä»ããã
LList
sjson-new ã«ã¯ LList ãšããããŒã¿åããã£ãŠããã㯠labelled heterogeneous listãã©ãã«ä»ãããå€åãªã¹ãã ã
æšæºã©ã€ãã©ãªã«ã€ããŠãã List[A]
ã¯ãA
ãšããåãåããæ ŒçŽããããšãã§ããªããæšæºã® List[A]
ãšéã£ãŠãLList ã¯ã»ã«ããšã«ç°ãªãåã®å€ãæ ŒçŽã§ãããŸãã©ãã«ãæ ŒçŽããããšãã§ããããã®ãããLList ã¯ããããç¬èªã®åãæã€ãREPL ã§èŠãŠã¿ãã:
2016-04-11
鱿«ã«è¶£å³ããã°ã©ãã³ã°ããã人ã®ããã® Github organization ãšã㊠foundweekends ãäœã£ããåå ããã人㯠twitter ã Gitter ã§å£°ããããŠãã ããã
åœé¢ã®æŽ»å㯠@n8han ãã conscript ãgiter8 ãpamflet ãåŒãç¶ãããšã ã
2016-04-04
/ scala
èæ¯
ãœãããŠã§ã¢ãããžã§ã¯ããèããé¢çœãæ¹æ³ã®äžã€ãšããŠãæåŠçãªè§£æããããšæããã€ãŸããå®éã®ã³ãŒãã®åé¢ã远ãã ããããªããŠã誰ãããã€ãäœæ
(ã©ããã£ãåé¡ã解決ããããã«) ã©ã®ããã«ã㊠(äœã®åœ±é¿ãåããŠ) æžããã®ããèå¯ããããšã ããããã£ãæå³ã§ã¯ãScala ãšã³ã·ã¹ãã ã«ãããŠã¯ JSON ã©ã€ãã©ãªã»ã©è±ããªãžã£ã³ã«ã¯ä»ã«ç¡ãã®ã§ã¯ãªãã ãããã
2008幎12æã« Programming in Scala ã®åçãåºãŠãJSON ã¯ããŒãµã»ã³ã³ãããŒã¿ã®äžäŸãšããŠåºãŠããŠãJSON ããŒãµã 10è¡ãããã®ã³ãŒãã§æžããããšã瀺ãã:
import scala.util.parsing.combinator._
class JSON extends JavaTokenParsers {
def value : Parser [ Any ] = obj | arr |
stringLiteral |
floatingPointNumber |
"null" | "true" | "false"
def obj : Parser [ Any ] = "{" ~ repsep( member, "," )~ "}"
def arr : Parser [ Any ] = "[" ~ repsep( value, "," )~ "]"
def member: Parser [ Any ] = stringLiteral~ ":" ~ value
}
å幎ã®äžã¶æåã« Real World Haskell ãšããæ¬ãåºãŠãŠãããã JSON ã©ã€ãã©ãªãäŸãããŠäœ¿ã£ã (Chapter 5. Writing a library: working with JSON data )ããã㯠JSON ããŒã¿ã JValue
ãšåŒã°ãã代æ°çããŒã¿åã«ãã£ãŠèšè¿°ã§ããããšã解説ãã:
data JValue = JString String
| JNumber Double
| JBool Bool
| JNull
| JObject [(String, JValue)]
| JArray [JValue]
deriving (Eq, Ord, Show)
ãã®èãæ¹ã¯åãã¡ã®ãšã³ã·ã¹ãã ã«å€§ããªåœ±é¿ãäžããã
2016-03-22
/ sbt
ããã¯å
æ¥æžãã sbt 1.0 ããŒãããã ã®ç¶ç·šã ããã®èšäºã§ã¯ sbt server ã®æ°ããå®è£
ã玹ä»ãããææ³ãã³ã¡ã³ããããã° sbt-dev mailing list ã«ãé¡ãããŸãã
sbt server ã®åæ©ã¯ IDE ãšã®çµ±åã®æ¹åã ã
ãã«ãã¯ã巚倧ã§ãå¯å€ã§ãå
±æããããç¶æ
ã®ããã€ã¹ã ããã£ã¹ã¯ã®ããšã ã! ãã«ãã¯ãã£ã¹ã¯äžã§åäœããã®ãã§ãã£ãŠããã£ã¹ã¯ããéããããšã¯ã§ããªãã
– Josh SuerethãThe road to sbt 1.0 is paved with server ãã
ãã·ã³ã«ç©ãã§ãããã£ã¹ã¯ã¯æ ¹æ¬çã«ã¹ããŒããã«ãªãã®ã§ãããsbt ãã¿ã¹ã¯ã䞊è¡å®è¡ã§ããã®ããããäœçšã«é¢ããå®å
šãªã³ã³ãããŒã«ãæã£ãŠããããšã倧åæã«ãªã£ãŠãããåããã«ãã«å¯Ÿã㊠sbt ãš IDE ãåæã«å®è¡ããŠããããè€æ°ã® sbt ã€ã³ã¹ã¿ã³ã¹ãå®è¡ããŠããå Žåã¯ãsbt ã¯ãã«ãã®ç¶æ
ã«é¢ããŠäžåä¿èšŒããããšãã§ããªãã
2016-03-11
/ sbt
sbt 1.0 ã«ã«é¢ã㊠TLäžãšãã§è°è«ããã£ãã®ã§ãå©ãå°ãšããŠãããæžãããšã«ãããäœããã¡ãããšãªãªãŒã¹ã§ããããã«ä»åãçŽãããããã®äžæçãªããã·ã§ã³ã»ã¹ããŒãã¡ã³ãã ãšæã£ãŠã»ãããsbt-dev mailing list ã«ãŠä»åŸãè°è«ãç¶ããŠããããã
ã¿ã€ãã³ã°
ã〠sbt 1.0 ããªãªãŒã¹ã§ããããšããäºå®ã¯ãŸã èŠåœãä»ããŠããªãã
sbt 1.0 ã®æå€§ã®æ©èœã¯ã³ãŒãã®åçµç¹ã§ãããã¯æ¢ã«é²ãã§ãã: http://www.scala-sbt.org/0.13/docs/Modularization.html
sbt/ioã sbt/utilã sbt/librarymanagementã sbt/incrementalcompiler ãšãã£ãã¢ãžã¥ãŒã«ããããå®è£
ãšãã芳ç¹ãããããšã€ã³ã¯ãªã¡ã³ã¿ã«ã³ã³ãã€ã©ã sbt ã®äžã§äžçªè€éãªéšåã ãšæãã®ã§ããŸãã¯ãããã¢ãžã¥ãŒã«åããããšãç®æšãšããŠãããå
šéšã®ã¢ãžã¥ãŒã«ã® API ãå®å®ãããšãããsbt æ¬äœã«ã 1.0 ãä»ãããæã«ãªãã
ã¢ãžã¥ãŒã«åã®åæ©
sbt/sbt ã®çŸåšã®ã³ãŒãã¯ããã«ããŠãŒã¶ããã©ã°ã€ã³äœè
ã«å
éšãæããããŠãããããã«ãã£ãŠãšã£ã€ãã¥ããã³ãŒãã«ãªã£ãŠãããããã«ããã€ããªäºææ§ãä¿ã€ã®ãé£ãããªã£ãŠããã
ã¢ãžã¥ãŒã«åã®ç®æšã¯ã©ããŸã§ã public 㪠API ã§ã©ãããã private ãªå®è£
ãªã®ãã®å¢çãããããªãããããšã ã
ããšããããã®ã¢ãžã¥ãŒã«ã¯ä»ãŸã§äœ¿ã£ãŠããã㪠Ivy ãªããžããªãããªã㊠Maven Central ã«ä¹ããã
sbt/zinc
æ°ããã€ã³ã¯ãªã¡ã³ã¿ã«ã³ã³ãã€ã©ã¯å®å
šã« name hashing ã«ç§»è¡ãããname hashing ã¯ãã°ããå (sbt 0.13.6) ããããã©ã«ãã§ãªã³ã«ãªã£ãŠãããããã ããããªããŠãã¯ã©ã¹ããŒã¹ã® name hashing ã䜿ãäºå®ã§ãããã¯æ§èœæ¹åãæåŸ
ãããŠããã
Java ããŒãžã§ã³
sbt 0.13 㯠JDK 6 ã®äžã«æžãããŠãããsbt 1.0 㯠JDK 8 ããŒã¹ã ã
sbt-archetype
sbt-archetype 㯠Jim Powers ãææ¡ããã³ã³ã»ããã§ãsbt ã« Activator ã¿ããã« new
ã³ãã³ããä»ãããšãããã®ã ãtemplateResolvers
ã»ããã£ã³ã°ã¿ãããªããã¯ãšã³ãæ©æ§ãã€ããŠããã³ãã¬ãŒãã®ãœãŒã¹ã¯èšå®ã§ Activator TemplateãGithubãprivate repository ãªã©å€ãããããã«ãããã
2016-02-13
/ scala
åã«ãšã£ãŠ ScalaMatsuri ãšã¯ã©ã€ãã¹ã¿ã€ã«ã®ãããªãã®ã (ä»ã® 27åè¿ããããªãŒã¬ãã€ã¶ãŒãåãããã«æã£ãŠããããããªãã ããã)ã確ãã«ãè¿æ¥æ±äº¬ã§ 550åãåå¡ããã«ã³ãã¡ã¬ã³ã¹ããã£ãŠãããã¯æåã«çµãã£ãããããããªãŒã¬ãã€ã¶ãŒã¯ 2015幎㮠2/28 ãããããã 11ã¶æéæºåããŠãããåãé¢ãã£ãã®ã¯äžéšã§ãããªããã©ããScalaMatsuri 2016 ã¯ãããŸã§ã§äžçªé¢ããã®æ·±ãã«ã³ãã¡ã¬ã³ã¹ã«ãªã£ããšæãããã®äœã¶æã®é SlackãHangout ããŸã«ã¯å¯Ÿé¢ã§ãããŸããŸãªè°è«ãéããŠãããé¢çœãã£ãã®ã¯ãäžç·ã«ã¢ã€ãã£ã¢ãåºãåã£ãŠãããå®çŸãããã®ãã¿ãããšã ã£ããšæããåã奿ãªã¢ã€ãã£ã¢ãåºããŠããã®è©³çްã誰ããå®è¡ããŠãããããšãããã°ãä»ã®äººãå§ããããšãå
ã«åãçŸå Žã®äœæ¥ãããããšããã£ãã
è²ã
èšãããããšã¯ãã°ããŒãã«ãªæè¡ã«ã³ãã¡ã¬ã³ã¹ããšãæ¥æ¬ã®ã³ãã¥ããã£ã®äº€æµãã®äž¡ç« ã§ãæžãã¡ãã£ãã®ã§ããã¶ãéšåããããšæãã
2015幎3æ
2015幎㮠3/16 ã®æ®µéã§æ¢ã« ScalaMatsuri 2015 ã®æºåã¯åãå§ããŠãããäœæ
èŠããŠããããšãããšããã¯éº»æ€ãã (@oe_uia ) ãæ³è¢«ãæ¥ãŠ Scala Days San Francisco ã«ç»å Žããããã ãã«ã³ãã¡ã¬ã³ã¹ãšäžç·ã«ã¹ããŒãã¹ãããã§ããããã«ãšããããšã§ããã®å Žã®é°å²æ°ã§ 2016幎㮠1æã«ãããããšããã¢ã€ãã£ã¢ãçãŸããã
ããã«è¡ã¯ Scala Days ã®äŒå Žããå°ãæ©ãæã«ãã£ãŠãã®åž°ãéã§éº»æ€ãããš CFP ãå
¬éããŠåºå®è²»ã§æ
è²»ãµããŒããä»ããããšãã話ãããã®ãèŠããŠãããããã¯å°ãªããšã 2014幎 (ã«ã³ãã¡ã¬ã³ã¹ã§ã®ãŠãããŒãµã«ã»ã¢ã¯ã»ã¹ãžåã㊠) ãããããèããŠãã¢ã€ãã£ã¢ã§ãéå
¬éã§èª°ããæåŸ
ããŠãã®äººéã®æ
è²»ãæãã®ã«æ¯ã¹ãŠããã€ãã®å©ç¹ããããšæã£ãŠãããã«ã³ãã¡ã¬ã³ã¹ãå»¶æããããšã§ä»¥åããé·ãæºåæéãåŸãããšãã§ããã®ã§ããã£ãŠã¿ãèŠèŸŒã¿ããã£ãã
Github issue all the things
ä»åãã以åã®ã«ã³ãã¡ã¬ã³ã¹æºåã§äœ¿ãããŠãã Trello ã co-meeting ãã Slack ãš Github issue ã®çµã¿åããã«ä¹ãæããã
äž¡è
ã¯ãããããè£å®ããé¢ä¿ã«ãã£ãŠãããæ±ºæã ã£ããšæããã©ãã«ã䜿ã£ãŠ issue ãæ
åœããŒã ã«å²ãåœãŠããšããéçšãããŠããŠããããããŸããã£ãŠãããšæãã
å°ããã¿ã¹ã¯ã倧éã«ã§ããŠã㊠Github issue ã§å°ã£ãã®ã¯ãç¹å®ã®ã¿ã¹ã¯ãä»ã©ãããç¶æ³ã«ããã®ããææ¡ããã®ãé£ãããšããããšã ã£ããäœããèµ·ããã®ãåŸ
ã£ãŠããã®ãããããã¯èª°ããäœæ¥äžãªã®ãããšãã£ãããšã ãissue ã® subject ã«æ¬åŒ§æžãã§ããã»ã¹ããŒã¿ã¹ãæžããšããããšããã£ãŠã¿ããã©ãã翻蚳ã¿ã¹ã¯ãªã©äºåã«æç¢ºã«ã¹ããããå®çŸ©ãããŠããã¿ã¹ã¯é¡ã«é¢ããŠã¯ãã®æ¬åŒ§æžãæ¹åŒã¯ããŸããã£ããšæãã
ãåããæ³èµ·ããã web ãµã€ã
æºåã®æ©æã®æ®µéã§ã¯ãªãŒã¬ãã€ã¶ãŒã¯æäžãããã®ããŒã¹ã§äŒã£ãŠãããšæããåãå«ãæ±äº¬ã«äœãã§ãªã人ãããã®ã§ãããŒãã£ã³ã°ã¯ Google Hangout ã§ã¹ããªãŒã ãããŠãHangout ããã㯠Slack çµç±ã§è°è«ã«åå ã§ããã
2015-10-06
/ scala
ScalaMatsuri éå¶ããã°ã«ãã°ããŒãã«ãªæè¡ã«ã³ãã¡ã¬ã³ã¹ããšãæ¥æ¬ã®ã³ãã¥ããã£ã®äº€æµãã®äž¡ç« ãæžããŸããã
2015-09-30
/ scala
Scala ã¯æè»ãªããã°ã©ãã³ã°èšèªãªã®ã§ãå人ç㪠Good Parts ã®ãããªèšèªã®ãµãã»ããããããã¯äž»çŸ©äž»åŒµã®ããã¹ã¿ã€ã«ã¬ã€ããäœãããšã¯æçšã ã
ã»ããã¢ãã
-Yno-lub
ã詊ããŠã¿ãã人ã¯ã以äžã project/ynolub.sbt
ã«æžã㊠sbt ãã©ã°ã€ã³ãåŒã£åŒµã£ãŠãã:
addSbtPlugin( "com.eed3si9n" % "sbt-ynolub" % "0.2.0" )
lub
Scala ã®åæšè«ãå A
ãšå B
ãçµ±åãããšãããããã® <:<
ã«é¢ãã lub (least upper bounds, æå°äžç) ãèšç®ããããã®éçšã lubbing ãšåŒã¶ããšããããå
·äœäŸã§èª¬æãã:
scala> if ( true ) Some ( 1 ) else None
res0: Option [ Int ] = Some ( 1 )
scala> if ( true ) List ( 1 ) else Nil
res1: List [ Int ] = List ( 1 )
ããæ°å¹ŽèããŠããã®ã¯ãå°ãªããšãä»ãã圢ã§ã® lubbing ã¯æçã§ã¯ãªãã®ã§ã¯ãªããããšããããšã ã2013幎ã«ããããªããšãèšã£ãŠãã:
éimport ã® implicit ã lubbing 㯠#scala ã®åœ¹ã«ç«ã€ãã®ã ããã? Map ãã List[Tuple2]ãInt ãã Doubleã Foo ãš Bar ãã Anyããããåã¯ãããããšã©ãŒã«ãªã£ãŠã»ããã
2015-05-03
ç«çª ãšããæ°ããã·ãªãŒãºãå§ããã(ããã¯æåãã Pamflet ã§æžããŠãã)
Cats 㯠Scala ã®ããã®é¢æ°åããã°ã©ãã³ã°ã®ã©ã€ãã©ãªã§ãããã¯åãããã䜿ã£ãŠã¿ãèšé²ã ã Cats ã¯ãçŸåšéçºäžã§æªã å®é𿮵éã«ããã
2015-02-19
/ scala
æè¿ Mac ãš Ubuntuããããã Java 6 ãš Java 7 ãè¡ã£ããæ¥ããããŠãã
Java ã®åãæ¿ãæ¹ãçµ±äžãããã®ã§ãããã«ã¡ã¢ããŠããã
è¿œèš : jEnv ãšãã䟿å©ãªãã®ã Yoshida-san ã«æããŠããã£ãã®ã§ãããã䜿ã£ãã»ããããããã
Zshrc
OS ã«ããã·ã§ã«ã¹ã¯ãªããã®åãæ¿ãã¯ãããªãµãã«ãã£ãŠã:
## basic
[ -f $HOME/dotfiles/zshrc.basic ] && source $HOME/dotfiles/zshrc.basic
## aliases
[ -f $HOME/dotfiles/zshrc.alias ] && source $HOME/dotfiles/zshrc.alias
case "${OSTYPE}" in
# MacOSX
darwin*)
[ -f $HOME/dotfiles/zshrc.osx ] && source $HOME/dotfiles/zshrc.osx
;;
# Linux
linux*)
[ -f $HOME/dotfiles/zshrc.linux ] && source $HOME/dotfiles/zshrc.linux
;;
esac
## color
[ -f $HOME/dotfiles/zshrc.color ] && source $HOME/dotfiles/zshrc.color
ç°å¢å€æ°
zshrc.osx
ãš zshrc.linux
ã®ããããã« Java 6ã7ã8çšã®ç°å¢å€æ°ãå®çŸ©ããããŸã㯠Mac:
2015-02-07
/ scala
pickling 0.10.0 ãšã㊠implicit.ly ã«æçš¿ãããã®ãèš³ããŸããã
æè¿ã³ããã¿ãŒæš©ãããããŸããããPickling ã® 90% 以äžã¯ Eugene BurmakoãHeather MillerãPhilipp Haller ã«ãã£ãŠæžãããŠããŸãã
Scala Pickling ã¯ãScala ã®ããã®èªåã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã»ãã¬ãŒã ã¯ãŒã¯ã§ã0.10.0 ãåã®å®å®çãšãªããPickling ã¯é«éã§ããã€ã©ãŒãã¬ãŒã (åé·ãªã決ãŸãã³ãŒã) ç¡ãã§æžãããšãã§ãããŠãŒã¶åŽã§ (ãã€ããªã JSON ãªã©ã®) ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã»ãã©ãŒããããç°¡åã«å·®ãæ¿ããããšãã§ããããŸãã0.10.x ã·ãªãŒãºäžã¯ãã€ããªäºææ§ãšãã©ãŒãããã®äºææ§ã®äž¡æ¹ãä¿ã€äºå®ã ã
Pickling ãçããŸãšãããš
ããä»»æã®å€ãäŸãã°ãPerson("foo", 20)
ã pickle ãã (ã·ãªã¢ã©ã€ãºåãä¿åé£ã«å©ããŠã挬ç©ã«ã挬ããããšèšã) ãšãã以äžã® 2ã€ã®ãã®ãå¿
èŠã«ãªã:
äžããããå Person
ã® pickler ã³ã³ãããŒã¿
pickle ãã©ãŒããã
Pickler[A]
㯠A
ããšã³ããªãŒ ããã£ãŒã«ã ãã³ã¬ã¯ã·ã§ã³ ãšãã£ãæœè±¡çãªãã®ã«åè§£ããããšãæ
åœãããããªããã£ã㪠pickler ãåæããŠè€åç㪠pickler ãäœãããšãã§ãããããã³ã³ãããŒã¿ãšåŒã°ããŠãããäžæ¹ PickleFormat
ã¯ãã£ãŒã«ã ãªã©ã®æœè±¡çãªæŠå¿µããã€ããªãããã¹ããšãã£ã圢ã«å
·çŸåããã
Defaults ã¢ãŒã
以äžã¯åºæ¬åœ¢ã§ãã Defaults
ã¢ãŒãã®äœ¿çšäŸã ã
scala> import scala.pickling.Defaults._, scala. pickling. json. _
scala> case class Person ( name: String , age: Int )
scala> val pkl = Person ( "foo" , 20 ). pickle
pkl: pickling.json.pickleFormat.PickleType =
JSONPickle ({
"$type" : " Person " ,
"name" : " foo " ,
"age" : 20
})
scala> val person = pkl. unpickle[ Person ]
person: Person = Person ( foo, 20 )
ãã® Defaults
ã¢ãŒãã¯ãããªããã£ã pickler 矀ãã Pickler[Person]
ãã³ã³ãã€ã«æã«èªåçã«å°åºãã!
ã³ãŒããéçã«çæããããããæååã®æäœãªã©ãã€ã³ã©ã€ã³åããŠé«éåããŠããã(åããã¹ããŒãã䜿ããªã Java serialization ã Kryo ã«æ¯ã¹ãŠãéã )
2014-10-20
/ fp
Uppsala ããåž°ã£ãŠããéäžãäœãšãªãæãåºããã®ã¯ååãšã®ã¢ããã®çŽèгã«ã€ããŠã®äŒè©±ã§ãåã¯é
·ã説æãããæ°ããããè²ã
èããŠãããã¡ã«ãã¡ãã£ãšã²ãããããã£ãã
ã¢ããã¯ãã©ã¯ã¿ã«ã
äžã®ãã©ã¯ã¿ã«ã¯ã·ã§ã«ãã³ã¹ããŒã®äžè§åœ¢ãšåŒã°ãããã®ã§ãåãããã§æããå¯äžã®ãã©ã¯ã¿ã«ã ããã©ã¯ã¿ã«ãšã¯èªå·±çžäŒŒçãªæ§é ã§ãäžã®äžè§åœ¢ã®ããã«éšåãå
šäœã®çžäŒŒãšãªã£ãŠãã (ãã®å Žåã¯ã芪ã®äžè§åœ¢ã®ååã®ã¹ã±ãŒã«ã®çžäŒŒ)ã
ã¢ããã¯ãã©ã¯ã¿ã«ã ãã¢ããã£ãã¯ãªããŒã¿æ§é ããããšãããã®å€ã®ããã€ããåæããŠåãããŒã¿æ§é ã®æ°ããå€ã圢æããããšãã§ããããããã¢ãããããã°ã©ãã³ã°ã«æçšã§ããçç±ã§ããããŸãå€ãã®å Žé¢ã§ç»å Žããçç±ã ã
å
·äœäŸã§èª¬æãã:
scala> List ( List ( 1 ), List ( 2 , 3 ), List ( 4 ))
res0: List [ List [ Int ]] = List ( List ( 1 ), List ( 2 , 3 ), List ( 4 ))
2014-09-14
/ scala / conference
2æ¥éã® #ScalaMatsuri ã¯çæ³ã«çµãã£ããã ãã©ãæ¥å¹ŽãžåããŠè²ã
課é¡ãããã®ã§ããããèªåãªãã«æžãåºããŠã¿ããé¡ã®éããåéã®æ¬¡ã®ç®æšãšããã¹ããã®ã¯ãŠãããŒãµã«ã»ã¢ã¯ã»ã¹ã ãšèããŠãããScala èšèªã«ãããŠã¯ãçµ±äžã¢ã¯ã»ã¹ã®åå (universal access principle) ãšèšãã°ãã¡ãœãããšãã£ãŒã«ãã®äž¡æ¹ãå€åŽããèŠããšå¥ããžã ãŠç¡ãã¢ã¯ã»ã¹ã§ããããšãæãã
ãã®æèã§ã®ãŠãããŒãµã«ã»ã¢ã¯ã»ã¹ã¯ãæ§ã
ãªã°ã«ãŒãã®äººã«ãšã£ãŠãå
æ¬ç (inclusive) ãªã«ã³ãã¡ã¬ã³ã¹ãšããæå³ã§äœ¿ã£ãŠãããå
·äœçã«ã¯:
女æ§/ç·æ§/ããã/LGBT ã®ããã°ã©ã
æ¥æ¬èª/è±èªè©±è
åå¿è
ãšäžçŽè
ãã¹ãã¯ãªã©ã®ç ç©¶è
æ¥æ¬ä»¥å€ã®ã¢ãžã¢è«žåœããã®äºº
ãªã©ã
ãã¯ãããžãŒçã«ããã女æ§åé¡ãåã³ãã®ä»ã®ãžã§ã³ããŒåé¡
å»å¹Žã¯å¥³æ§ã«ããã»ãã·ã§ã³æ°ã¯ãŒããä»å¹Žã¯ããã¯ãã«é¢ããŠã®ã»ãã·ã§ã³ãäžã€ãšãFuRyu ããã®ã¹ãã³ãµãŒ LT ãäžæ¬ãã£ããããã¯è¯ãåŸåã ãšæããã©ãåãšããŠã¯ã女æ§ã®äººã«ãã Scala ã³ãã¥ããã£äžè¬ãžã®åå ãå匷äŒãªã©ãžã®åºåžããã㊠ScalaMatsuri ã®ãããªã«ã³ãã¡ã¬ã³ã¹ãžã®åºåžããã£ãšå¿æŽããããšæããç·æ§åŽãšããŠã§ããããšã®äžã€ã«ãããå匷äŒã«åå ããŠããã女æ§ã®æ¹ãããããå€ãªæåãåããã«æ®éã®ããã«ãŒã®äžäººãšããŠæ¥ããããšããããšæãã
Scala DaysãNE Scalaããã㊠PNW Scala ã«å£ã£ãŠãä»å¹Žã® ScalaMatsuri ã§ã¯ Geek Feminism Wiki/Ada Initiative ãåæ¡ãšããè¡åèŠç¯ ãæ¡çšããããã®è¡åèŠç¯ã¯ãå
šå¡ã«ãã©ã¹ã¡ã³ãã»ããªãŒã®çµéšãæäŸããããšãçŽæããç¹ã«ãå
šãŠã®ã³ãã¥ãã±ãŒã·ã§ã³ã¯ãæè¡çãªçºè¡šã®å Žã«ãµãããããã®ã§ããã¹ããããšãæ±ãããä»åŸãæ£åŒãªãã©ã¹ã¡ã³ãå ±åæ¹æ³ã®ç¢ºç«ãªã©ãå«ããããªã·ãŒã®å®è£
ãã¯ã£ãããããå¿
èŠãããããå
¬çã«ãã®ãããªã¬ã€ãã©ã€ã³ãæ¡çšã§ããããšã§ããã inclusive ãªã«ã³ãã¡ã¬ã³ã¹ã«ãªã£ãŠãããšèããŠããã
èšèªã®å£
Scala ããã䜿ãããŠãããã®ä»ã®æ¬§ç±³è«žåœã«æ¯ã¹ãŠãæ¥æ¬ã®è±èªã¹ãã«ã¯ç¹ã«ãªã¹ãã³ã°ãšã¹ããŒãã³ã°ã§é
ããŠãããScalaMatsuri ã®éå¶åŽãšããŠã¯ãã«ã³ãã¡ã¬ã³ã¹ãããå°ã£ããã®ã«ããŠãScala ã³ãã¥ããã£ããããå€ãã®è±èªè©±è
ãæ¹ãã€ããããšãç®æšã®äžã€ãšããŠãããããã«æ²¿ã£ãŠãæåŸ
è¬æŒè
ã®æ
è²»ãåºããããããã¹ã翻蚳ãæäŸããããäžè¬çã«è±èªè©±è
ãæ¥ãŠã楜ãããããã«æè¿ããããã«ããŠãããä»å¹Žã¯ãæ¥æ¬èªè©±è
ã§ãè±èªã§çºè¡šãã人ãåºãŠããã
ãã®ãããªåªåã¯ãScala ã«ã¯èå³ããããè±èªã¯èŠæãšããå€ãã®ã«ã³ãã¡ã¬ã³ã¹åå è
ã«ãšã£ãŠå©å®³é¢ä¿ã®è¡çªãšãªãããªã¢ã«ã¿ã€ã ã§æäŸãããæå¿ã«ããããã¹ã翻蚳ã¯ãç¡ãããã¯ãããããããªããã©ãåŸã
ã«ããŠäžååã§ãããè§£æ±ºæ¹æ³ãšããŠæ€èšããã¹ãã¯ããã®éèš³ãéãããšã ããã㯠YAPC::Asia ãªã©ã§ã¯ããŸããã£ãããããããã«ã2ã€ã®å¥è·¯ç· (track) ãäœã£ãŠãããããè±èªã§ã®çºè¡šã𿥿¬èªã§ã®çºè¡šãè¡ãã¹ãã ã
åå¿è
ãšäžçŽè
Matsuri ã¯ç¥ãšããæå³ã§ãããŒãã “enjoy Scala” ã ã£ããåãã Scala ããã£ãŠããŠããŠãŒã¶ã«ã¯ç¢ºãã«æ¥œããã«ã³ãã¡ã¬ã³ã¹ã ã£ããããããªãããåã®ãã®ãå«ãå€ãã®ããŒã¯ã¯åå¿è
ã眮ããŠããŒãã«ãããã®ãšãªã£ãããã®åé¿æ¹æ³ãšãªãåŸããããããªãã®ããè±èªè·¯ç·ã𿥿¬èªè·¯ç·ã®åºå¥ã®ä»ã«ãNE Scala ã®ããã«ã»ãã·ã§ã³ãåå è
ã®æç¥šã§æ±ºããŠãããããšã ãïŒéèš³ä»ãã§ïŒè±èªã®ã»ãã·ã§ã³ã§ãèããŠã¿ãã人ãšäžçŽè
ãéã«æ¥æ¬èªã«ããŠæ¬²ãã人ãšåå¿è
ã«çžé¢æ§ããããšä»®å®ãããšãããããã®è·¯ç·ããæç¥šã«ãã£ãŠèŽè¡ãèãããé©åãªã¬ãã«ã«è£æ£ãããã®ã§ã¯ãªãã ãããã
ãã¹ãã¯ãšã¢ãžã¢è«žåœããã®åå è
1æ¥ç®ã®ã¬ããŒãã«æžãããšãããå® åç§ããã®çºè¡šã¯å¯äžåŠè¡çãªæ¹é¢ããã®ãã®ã ã£ããã©ãç¬èªã§é¢çœããã®ã ã£ããã¢ã¡ãªã«ããšãŒãããããã®ããã¯ã¹ã¿ãŒçãªç»å£è
ã芳ãã®ãé¢çœããã©ããæ¥æ¬ããå®ããã®ãããªãã¹ãã¯ã®ç ç©¶è
ããã¯ããŸãè¿é£ã®ã¢ãžã¢è«žåœã§ãããã€ã³ããäžåœãéåœãå°æ¹Ÿãã·ã³ã¬ããŒã«ãªã©ããåŒãã§ã¿ãã®ãé¢çœãã®ã§ã¯ãªãã ããããè±èªè·¯ç·ãèšããããšã§ãæ¥æ¬èªã®å¿é
ã¯ãããªããªããšæããå®è£
ããæ¹æ³ã®äžã€ãšããŠã¯ãCFP ããã£ãšæ¯èŒçé·ãåã£ãŠãäŸãã°æå€§ $1500 ãŸã§ã§æ
è²»ã®ãµããŒãããããšå®£äŒããã°ãããšæããæç¥šåŸã«ã¯ãæ
è²»äºç®ããå·®ãåŒããŠãã£ãŠã祚ã®å€ãé ã«å¯èœãªéãã®äººãæåŸ
ããã°ããã
å
šãŠã®åãç¿ãšããŠã®ã¢ã³ã«ã³ãã¡ã¬ã³ã¹
ããè±èªè·¯ç·ãæ¥æ¬èªè·¯ç·ã®ã©ã¡ããã®ç«¶äºçãé«ããªã£ãŠããä»åŸã¯ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ãåãç¿ãšããŠæ©èœãããããšãã§ãããä»åã§å€ãã®äººãçŽæ¥ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ãè¡ãããæ§åãèŠãã®ã§ãä»åŸã¯ããå€ãã®è°è«ãæºåæžã¿ã®ããŒã¯ãå¢ããããšãæåŸ
ããŠãããæ¥å¹Žããã¯ãã¯ã€ãããŒãã廿¢ããŠãåœæ¥ã®æã« Google docs ã«çŽæ¥å
šãŠã®ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã®ã¢ã€ãã£ã¢ããã¡ã·ãªããŒã¿åãšå
±ã«æžãæ¹åã«å€ããŠããã¹ãã ãšæããçãã¯ããŸã人æ°ãç¡ãã»ãã·ã§ã³ã§ãéšå±ã空ããŠããã°ãã¡ãããšã»ãã·ã§ã³ãèšããããšã«ããã
2014-09-13
/ scala
æ¥æ¬ã§ã® Scala ã«ã³ãã¡ã¬ã³ã¹ãä»å¹Žã§äºå¹Žç®ã ãä»å¹Žã¯ ScalaMatsuri ãšååãå€ããŠä»åãçŽãã300æã®ãã±ããã¯å£²ãåããæåŸ
è¬æŒè
ãã¹ãã³ãµãŒæåŸ
æ ãªã©ãå
¥ãããåœæ¥ã¯ãã£ãšãããããããªããã¢ã¡ãŒãããã°ããªã³ã©ã€ã³åºåãµãŒãã¹ãªã©ãäºæ¥ãšãã CyberAgent ããã®ãªãã£ã¹ãäŒå ŽãšããŠãåãããã
1æ¥ç®ã®ãããããã¿ãŒã¯å°ç°å¥œå
çããš Martin Odersky å
ç (@ordersky ) ã®ãScala é²åè«ããå€ãã®äººãå°ç°å¥œå
çã®è¬æŒã楜ãã¿ã«ããŠããã®ã§ãæããæºå¡ã«è¿ãã£ããšæããåãåºåžããã»ãã·ã§ã³ã¯ãæäœã® closed-captioning ã䜿ã£ãŠåè±ãè±åã®ããã¹ã翻蚳ãæã¡èŸŒãã®ã«å¿ããã£ããäžæ¥ç®ç¿»èš³ããŒã ã®ä»ã®ã¡ã³ããŒã¯ã@cbirchall ã @cdepillabout ã @okapies ã @oe_uia ã
次ã«åããsbtãåŸåãšå¯Ÿçããæ¥æ¬èªã§è©±ãããmkdir helloworld ããå§ããŠãsbt ã®æåã®ã¹ããããããcontinuous testing ãŸã§ã®æµãã®ãã¢ããå§ãããæ¬¡ã«ãåºç€ã³ã³ã»ããã0.13.6 ã§å
¥ãæ°æ©èœã§ãã HTTPS ããã©ã«ããconsolidated resolutionãeviction warning ã玹ä»ããŠãæåŸã«ããµãŒããšããŠã® sbtããšãããªãæ§èœã®æ¹åãšããå°æ¥ã®å±æã§ã·ã¡ããLinkedIn瀟ã®ãã¬ã¹ããŒã ãããLinkedIn ã
sbt ã®æ§èœæ¹åã®ä»äºãã¹ãã³ãµãŒããŠããã£ãŠãããšã話ããŠãããèš±å¯ãããã£ãŠããã®ã§ãä»åæ©èœæ¹åã«é¢ããŠå
¬ã®å Žã§ã瀌ã§ããã®ã¯è¯ãã£ããšæãã
Activator ãš sbt ã«é¢ããŠè³ªåããã£ããActivator ã® 3ã€ã®çšäŸãšããããšã§ä»¥äžã®ããã«åçãã:
ãã¬ãŒãã³ã°ã»ã»ãã·ã§ã³ãªã©ã«ããã USBãã©ã€ããªã©ã«ãã Typesafe ã¹ã¿ãã¯ã®ãªãã©ã€ã³é
åž
æ°ãŠãŒã¶ã® out-of-the-box ãšã¯ã¹ããªãšã³ã¹ (ç®±ãéããŠããéã¹ãããš) ã®æ¹å
ãŠãŒã¶ãã³ãŒããæã¡èŸŒã¿ãªãã䜿ãããã¥ãŒããªã¢ã«ããã¹ããããã©ãããã©ãŒã
sbt ãµãŒãã«é¢ããŠã¯ãIntelliJ ãªã©ã®ä»ã®ããŒã«ãšã®é£æºããšå°æ¥ç㪠remote compilation ãªã©ã®å¯èœæ§ãã§ããããšäž¡æ¹ã«ã€ããŠå¥œåå¿ãåŸãã
Jon Pretty (@propensive ) ããã® ‘Fifty Rapture One-Liners in Forty Minutes’ ãšããè¬æŒããªãœãŒã¹ã®èªã¿æžããæœè±¡åããããšã«çŠç¹ãçµã£ãã©ã€ãã©ãªã¿ããã§ããªã³ã©ã€ã³ããè²ã
èªã¿èŸŒãã§ãçã®ç¶æ
ã®èªã¿èŸŒã¿ (slurp) ã case class ãžã®èœãšã蟌ã¿ãããã¿ããã ãenrich-my-libraryããã¯ããdynamics ãªã©ãŠãŒã¶ã»ãã¬ã³ããªãŒãª Json åŠçã®ããã«èšèªã®ããªãã¯ãå€çšããŠãããããã¯ãšã³ãã® json ã©ã€ãã©ãªãéžã¹ãããã«ãªã£ãŠããã®ã¯å¥œå°è±¡ã
2014-05-26
å人çã«ã¯ SublimeText ã§ç¹ã«å°ã£ãŠããªãããã¡ã€ã³ã®ãšãã£ã¿ãšããŠãã°ãã䜿ã£ãŠãããã ãã©ãã³ãã³ãã©ã€ã³ãã䜿ãããšãã£ã¿ã«ãå°ãã¯èå³ãããããè²ããªäººããããã¯ãŒã¯äžãã䜿ãããã䟿å©ãšããããšãèšã£ãŠãããX ã転éããããä»ã®æ¹æ³ã§ãªã¢ãŒãã€ã³ããã° Sublime ã䜿ããããããªãããšãæãããäžå¿è©ŠããŠã¿ããã
ãã® Vim ã®ã»ããã¢ãããããããšæã£ãããã«ã±ã®äžã€ã«æ°ãã MBP ãè²·ã£ããšããã®ããã£ãŠãæè§ã ããäœãæ°ããããšããã£ãŠã¿ããããªãšæã£ããã€ãŸããæ¬çš¿ã¯å®å
šãªçŽ äººãå人çãªã¡ã¢ãšããŠæžããŠãããã®ã ãããããããã°ãšããã®ã¯ãããããã®ãªã¯ãã ãåããã©ããã¯ä¿èšŒã§ããªããå
šè¬çã« yuroyoko ãããæ°å¹Žåã«æžãã iTerm2 + zsh + tmux + vim ã§å¿«é©ãª256è²ã¿ãŒããã«ç°å¢ãæ§ç¯ãã ãåèã«ããã
Vim 以å€ã®è²ã
ãªããš
dotfiles
æ¬çš¿ã§æžããã»ããã¢ãã㯠eed3si9n/dotfiles ã«äžããŠãããä»ã®äººã® dotfiles ã fork ããã®ãäœæ³ããããã©ããèªåã®ç°å¢ã«æã¡èŸŒãèšå®ãã¡ãããšçè§£ãããã£ãã®ã§ãäžããæžãå§ããã
dotfiles ã®åºæ¬çãªèãæ¹ãšããŠã¯ãããã ~/dotfiles/
ã«ãŸã checkout ããŠãããã«ã¯ zshrc
ãªã©ã®ãã¡ã€ã«ãå
¥ã£ãŠãããããã®ã«ãŒãã®èšå®ãã¡ã€ã«ã¯ããŒã ãã£ã¬ã¯ããªå
ã§ ~/.zshrc
ãªã©ãšããæãã§ã·ã³ããªãã¯ãªã³ã¯ã匵ãããã
Terminal.app
Mac ã§ iTerm2 ãã©ãããŠãå¿
èŠã«ãªã£ãããšã¯ãŸã ãªãã以åã«ã¯ Terminal.app ã«è²ã
ãšå¶éããã£ãã®ãããããªããã©ãä»ã®æåã¯ããã§éã«åã£ãŠããã
Terminal.app ã䜿ãç¶ããŠããçç±ã®ããäžã€ããåã TotalTerminal ã®ãã¡ã³ã§ããããšã ã
homebrew
Homebrew ã«ã¯ãäžè©±ã«ãªã£ãŠããã
Zsh
ãã®ãã·ã³ã®ã·ã§ã«ã¯ Zsh ã«ãããMac ãªã How to use Homebrew Zsh Instead of Max OS X Default ãåç
§:
$ brew install zsh
$ chsh -s /usr/local/bin/zsh
èšå®ã«é¢ããŠã¯ãzshrc
ã¯ä»ã® zshrc.*
ã®èªã¿èŸŒã¿ã ããè¡ã£ãŠãã:
2014-05-11
/ scala
çŸå®åé¡ãšããŠæ£èŠè¡šçŸãå¿
èŠã«ãªãããšããããããã€ãã®ããã¹ããã¡ã€ã«ã«å€æããããããã床㫠find
ã³ãã³ããzsh ã®ããã¥ã¡ã³ãã Perl é¢é£ã® StackOverflow ã®è³ªåãææ¢ãããªããäœæ¥ããããšã«ãªããèŠåŽããªãã Perl ãæžããã㯠Scala ã䜿ããããçµå±ãååäººã®æ
£ãã®åé¡ã ã
äŸãã°ã仿å
ã« 100以äžã® reStructuredText ãã¡ã€ã«ããã£ãŠãããã markdown ã«å€æããå¿
èŠãããããŸã㯠pandoc ã詊ããŠã¿ãŠãããã¯ãããªãã«ããŸããã£ããã ãã©ãäžèº«ãããèªãã§ã¿ããšã³ãŒããªãã©ã«ã®å€ããã¡ãããšãã©ãŒããããããŠãªãããšã«æ°ã¥ãããããã¯åäžã®ããã¯ã¯ã©ãŒã (backtick) ã§å²ãŸããŠããããInterpreted Text ã䜿ã£ãŠããããã¿ããã ããã®ããã¹ããããã€ãã®æ£èŠè¡šçŸã§ååŠçããŠããã°ããŸããšæãã
ã³ãã³ãã©ã€ã³ scalas
åã®çŸåšã®éçºãã·ã³ã«ã¯ scala
ãžã®ãã¹ãéã£ãŠããªããzip ãã¡ã€ã«ãäžåããŠã³ããŒãããã®ã¯å€§ããäœæ¥ãããªããã©ããå°æ¥çã« jar ãšã¹ã¯ãªããã®ç®¡çãããªãããããªãã®ãé¢åãªæ°ããããæ®éãªãå㯠sbt ã䜿ã£ãŠ Scala ã® jar ãããŠã³ããŒãããããããã§ããããã©ããåäžã®ãã¡ã€ã«ã®ã¿ã䜿ã£ãè§£æ³ã欲ãããšããã
ããã§ä»è©ŠããŠãã®ã sbt ã® script runner ã :
#!/ usr/ bin/ env sbt - Dsbt . version= 1.4 . 7 - Dsbt . main. class= sbt. ScriptMain - Dsbt . supershell= false - error
/***
ThisBuild / scalaVersion := "2.13.4"
*/
println( "hello" )
次ã«ã
$ chmod +x script.scala
$ ./script.scala
hello
ããã§èªåã® Scala version ã 2.13.4 ã«æå®ããã¹ã¯ãªãããã§ãããã³ã³ãã€ã«ãå«ã㊠“hello” ã衚瀺ããããŸã§ 8ç§ãããããããµã¯ãµã¯ãšã¯çšé ãæãã ãã©ãå人çã«ã¯èš±å®¹ç¯å²å
ã ãšæãã
2014-03-29
/ scala / sbt
Preview of upcoming sbt 1.0 features: Read about the new plugins ãèš³ããŸããã
è @eed3s9n, @jsuereth
sbt ã«å€åã蚪ããããšããŠãããsbt 1.0 ãžåã㊠sbt ã®åçã§ããèªåå (automation)ãã€ã³ã¿ã©ã¯ã·ã§ã³ (interaction)ãçµ±åå (integration) ã®å
šé¢ã«ãããŠæ¹åãã¿ãããäºå®ã ã1.0 ã®äºå€§æ©èœãšç®ãããŠããã®ã¯ auto plugin ãšããã«ããµãŒããšããŠã® sbtãã® 2ã€ã ã
ä»åŸã®æ°ã¶æã«ããã£ãŠ sbt ããŒã 㯠sbt 0.13 ã³ãŒãããŒã¹äžã«ãããã®æ©èœã远å ããããªãã¥ãŒçããªãªãŒã¹ããããããã®ããªãã¥ãŒçã«ãã£ãŠãsbt 1.0 ã®ä»æ§ãåºãŸãåã«ã³ãã¥ããã£ãŒããã®ãã£ãŒãããã¯ãåŸãããæ°ããèšèšæ¹éãç念ãããŠæ°æ©èœãä¿é²ããããšãç®çãšããŠããã
é·ãé sbt ãæ¯ããŠãã Mark Harrah ããã«ã以å€ã®ããšãããããã«æ
ç«ã£ãŠãã£ãããšãæ®å¿µãªããå ±åããªããã°ãªããªããããããTypesafe ã®ãã«ãããŒã«ããŒã ã§ãã Antonio CuneiãJosh Suereth ã«æ°ããªã¡ã³ã㌠Eugene Yokota (@eed3si9n ) ã sbt ã® techlonogy lead ã®äžäººãšããŠåå ããããšãæè¿ãããã
æ¬çš¿ã§ã¯ãä»åã§ãããã£ã auto plugin æ©èœã玹ä»ããããã㯠sbt 0.13.5-M2 ãªãªãŒã¹ã«å«ãŸããã
ãã©ã°ã€ã³ã»ãšã³ã·ã¹ãã
sbt ã®æå€§ã®åŒ·ã¿ãšããŠãã©ã°ã€ã³ã»ãšã³ã·ã¹ãã ãæããããšãã§ããããã©ã°ã€ã³ã¯ãã«ãå®çŸ©ãšå
šãåãããã«åããããsbt ãç¿ãããšã¯ãã®ãŸãŸãã©ã°ã€ã³ãæžãã®ãç¿ãããšã«ã€ãªãã£ãŠãããsbt ãã©ã°ã€ã³ã®å€æ§æ§ã¯ãã®åºæ¬çãªã³ã³ã»ããã®å匷ããç©èªã£ãŠããã ãããäžã§ã Play Framework ãš Activator ã®äºã€ã¯æãåºãŠãããããã㯠sbt ã®äžã«ã§äœãããŠããŠã€ã³ã¿ã©ã¯ãã£ããªéçºãšã¯ã¹ããªãšã³ã¹ãæäŸããŠããããã ã
2013-12-22
/ scala
æšæ¥ã¯ãäœæ
ãæ©æã«ç®ãèŠã㊠@xuwei_k æ°ã®Scalaã§æœè±¡ã¡ãœãããoverrideããéã«override修食åãä»ããã¹ããã©ããã®æ¯é ãæµãèªã¿ããŠããããã®è©±é¡ã¯é¢çœãããã®ã§ãé£ã³èµ·ããŠããã«è±èš³ ããŠããŸã£ããScalaz ã§ééããã³ãŒããäŸã«ããŠåã¯ã©ã¹ã®ããã©ã«ãã€ã³ã¹ã¿ã³ã¹ãæäŸããããšã®åŸ®åŠãªãžã¬ã³ãã解説ããŠããã
以äžã«åé¡ãç°¡ç¥åããã³ãŒãäŸã瀺ã:
trait Functor {
def map: String
}
trait Traverse extends Functor {
override def map: String = "meh"
}
sealed trait OneOrFunctor extends Functor {
override def map: String = "better"
}
sealed trait OneOrTraverse extends OneOrFunctor with Traverse {
}
object OneOr {
def OneOrFunctor : Functor = new OneOrFunctor {}
def OneOrTraverse : Traverse = new OneOrTraverse {}
}
ããããã¹ãããã«ã¯ä»¥äžãå®è¡ãã:
scala> OneOr . OneOrTraverse . map
res0: String = meh
OneOr.OneOrTraverse.map
㯠"better"
ãæåŸ
ããŠãããã©ããmap
ã®å®è£
ã¯æå³ããã« Traverse
ã®ããã©ã«ãã€ã³ã¹ã¿ã³ã¹ã«ãã£ãŠä¹ã£åãããŠããŸã£ãã
@xuwei_kæ°ã¯æœè±¡ã¡ãœããã®ãªãŒããŒã©ã€ãæã« override
修食åãä»ãããåŠãã®å
è¡ç ç©¶ããããèããŠããã®ã§ãèããŠã¿ãããScala ã¯åã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹å®çŸ©ãé
ã®ç©ºéãšçµ±å (èŠæ¹ã«ãã£ãŠã¯ã³ã³ãã¬ã¯ã) ããŠãé åºã¯ç¶æ¿é¢ä¿ã«ãã£ãŠæå®ãããã®ã§ã颿°åããã°ã©ãã³ã°ãšããããã¯ã¢ãžã¥ã©ãŒããã°ã©ãã³ã°ã®è©±ã«ãªããMixin é åºå
šè¬ã«é¢ãããããã¯ã¯ã¯ã©ã¹ç·åœ¢å (class linearization) ãšåŒã°ãããæ¬çš¿ã§åãäžããå
容ã¯ã ãããã³ããæ¬ç¬¬äºçã«ãæžããŠããããšã ãšæãã
ã¯ã©ã¹ç·åœ¢åã®è£é¡
@xuwei_kæ°ã® override
ã®ãžã¬ã³ãã¯ä»¥äžã®è£é¡ãšããŠèšãæããäºãã§ãã:
trait OneOrFunctor
ãš Traverse
ããããšããTraverse
ã OneOrFunctor
ã®åŸã«ãããããªã¯ã©ã¹ç·åœ¢åãçŠæ¢ããããšãã§ããã?
abstract override
æ®éã® trait ã¯ã€ã³ã¿ãŒãã§ã€ã¹ã®ãããªåœ¹å²ãããã®ã«å¯ŸããŠãScala 㯠stackable traits ãæäŸããŠãããã¯ã¯ã©ã¹ã®æ¯ãèãã倿Žãããtrait ã stackable ã«ããã«ã¯ããŸãã¯ã©ã¹ã trait ããç¶æ¿ããŠãã¡ãœããã« abstract override
ãšãã修食åãä»ããããã®ä¿®é£Ÿåã®ç®çã¯ãã¡ãœããæ¬æå
ãã super
ãžã®ã¢ã¯ã»ã¹ãå¯èœãšããããšã ãtrait ã® super
ã¯åçã«æçžããããããéåžžã¯ã¢ã¯ã»ã¹ããããšãã§ããªãã
2013-12-01
/ sbt
æ¬çš¿ã§ã¯ sbt 0.13 ã«ãããå®è¡æå³è« (execution semantics) ãšã¿ã¹ã¯ã®é次å (task sequencing) ã«ã€ããŠã¿ãŠããããšæãããŸãã¯åæãšãªãèæ¯ã倧ãŸãã«åŸ©ç¿ããŠã次ã«é次çã¿ã¹ã¯ (sequential task) ã远å ããããã«æžããå®éšçãã©ã°ã€ã³ sbt-sequential
ã玹ä»ãããã
èæ¯
Mark æ°ã:
sbt ã®ã¢ãã«ã¯å¯äœçšãã¿ã¹ã¯ã«å±æåãããããšã§ãäŸåæ§ããæºããã°ãã¿ã¹ã¯ã¯ãã€ã§ãå®è¡ã§ãããšãããã®ã ããã®å©ç¹ã¯ããã©ã«ãã§äžŠåã§ããããšã§ãå®éã«ããéããã«ããå¯èœãšããããšã ã
èšãæ¿ãããšãsbt ã䜿ã£ããã«ãå®çŸ©ã¯ã¿ã¹ã¯éã®äŸåæ§ã®ã¿ãå®çŸ©ããŠããŠããããã®ã¿ã¹ã¯ãã©ã®ã¿ã€ãã³ã°ã§å§åãããã㯠sbt ã«ãã£ãŠèªåçã«èšç®ãããããããã¡ãããšçè§£ããããã«ããŸãå¯äœçšãæã£ã Scala ã³ãŒãã®å®è¡æå³è«ãã¿ãŠã¿ããã
çŽåå®è¡ (serial execution)
class Test {
def startServer() : Unit = {
println( "starting..." )
Thread . sleep( 500 )
}
def stopServer() : Unit = {
println( "stopping..." )
Thread . sleep( 500 )
}
def numberTask: Int = 1
def integrationTest0() : Int = {
val n = numberTask
startServer()
println( "testing..." )
Thread . sleep( 1000 )
stopServer()
n
}
}
誰ãã integrationTest0()
ãåŒã³åºããšãã³ãŒãã¯æžãããã®ãšå
šãåãé åºã§å®è¡ãããããŸã numberTask
ãåŒã³åºãããæ¬¡ã« startServer()
ãåŒã°ããã®å®è¡ã¯ 0.5 ç§éããããã¡ãœãããå®è¡ããŠããéã¯æ»ã£ãŠãããŸã§å¶åŸ¡ã¯ãããã¯ããããæ¬¡ã« println("testing...")
ãåŒã°ãããšãã£ãå
·åã ããã®ãããªé åºã®å
¥ãæ¿ãã䌎ããããŸããªãŒããŒã©ããã䌎ããªãå®è¡ã¯çŽåå®è¡ (serial execution) ãšåŒã°ããã
2013-11-20
/ scala
äžèŠæ®éã®æŒç®ã§ãããã«é«éåã§ãããããã€ãèããŠçºè¡šããŠã奿 EirÃkr Ã
sheim (@d6 ) ããã® “How to use Spire’s Ops macros in your own project” ã翻蚳ããŸããããã€ãæ°ããã«è©±ããããŠããããã¬ã³ããªãŒã§ãããã€ã§ãã翻蚳ã®å
¬éã¯æ¬äººãã蚱諟æžã¿ã§ãã
2013幎10æ13æ¥ EirÃkr Ã
sheim è
2013幎11æ20æ¥ e.e d3si9n èš³
Spire ã® Ops ãã¯ããšã¯äœã?
Spire ã®åã¯ã©ã¹ã¯ +
ã *
ãšãã£ãåºç€çãªæŒç®åãæœè±¡åãããæ®éãããã®æŒç®ã¯éåžžã«éãããã®ãããã¡ãã£ãšã§ãäœèšãªäº
(äŸãã°ãboxing ããªããžã§ã¯ãã®å²ãåœãŠãªã©) ãæŒç®ããšã«ãã£ãŠããŸããšããžã§ããªãã¯åããã³ãŒãã¯çŽæ¥åŒã³åºãããã®ãšæ¯ã¹ãŠé
ããã®ã«ãªã£ãŠããŸãã
å¹ççãã€ãžã§ããªãã¯ãªæ°å€ããã°ã©ãã³ã°ã Spire ã®ååšæçŸ©ã ãäžå¿
èŠãªãªããžã§ã¯ãå²ãåœãŠãåé¿ããããã«åãã¡ã¯ããã€ãã® Ops ãã¯ããçšæãããæ¬çš¿ã§ã¯ãã®ä»çµã¿ãšãåã®ã³ãŒããããããã®ãã¯ããäœ¿ãæ¹æ³ã解説ããã
éåžžã®åã¯ã©ã¹ãçšããæé»ã®æŒç®åã®ä»çµã¿
Scala ã§åã¯ã©ã¹ãçšããå Žåãéåžžã¯æé»ã®å€æã«é Œãããšã§ãžã§ããªãã¯ãªåã«æŒç®åãã远å ãããã(蚳泚: ãããã Enrich my library ãã¿ãŒã³ã )
以äžã«å
·äœäŸã§èª¬æãããšãA
ã¯ãžã§ããªãã¯ãªåãOrdering
ã¯åã¯ã©ã¹ã§ã>
ãæé»ã®æŒç®åãšãªããfoo1
ã¯ããã°ã©ããæžãã³ãŒãã§ãfoo4
㯠implicit ã解決ãããŠãç³è¡£æ§æãå±éãããåŸã®ãã®ã ã
import scala.math.Ordering
import Ordering.Implicits._
def foo1[ A: Ordering ]( x: A , y: A ) : A =
x > y
def foo2[ A ]( x: A , y: A )( implicit ev: Ordering [ A ]) : A =
x > y
def foo3[ A ]( x: A , y: A )( implicit ev: Ordering [ A ]) : A =
infixOrderingOps[ A ]( x)( ev) > y
def foo4[ A ]( x: A , y: A )( implicit ev: Ordering [ A ]) : A =
new ev. Ops ( x) > y
(å®ã¯ããã¯åŸ®åŠã«ééã£ãŠãããfoo4
ãžã®å±éã¯å®è¡æã« infixOrderingOps
ãåŒã°ãããŸã§ã¯è¡ãããªããããããã説æããããšã®èŠç¹ãšãªãã)
2013-10-07
/ sbt
èŠå: ãã® sbt ã«ã€ããŠã®èŠãæžãã¯äžçŽãŠãŒã¶åãã ã
ã»ããã£ã³ã°ã·ã¹ãã
sbt 0.12 åæ§ã« sbt 0.13 ã®äžå¿ã«ããã®ã¯ã»ããã£ã³ã°ã·ã¹ãã ã ãSettings.scala ãèŠãŠã¿ãã:
trait Init [ Scope ] {
...
final case class ScopedKey [ T ](
scope: Scope ,
key: AttributeKey [ T ]) extends KeyedInitialize [ T ] {
...
}
sealed trait Initialize [ T ] {
def dependencies: Seq [ ScopedKey [ _ ]]
def evaluate( map: Settings [ Scope ]) : T
...
}
sealed class Setting [ T ] private [ Init ](
val key: ScopedKey [ T ],
val init: Initialize [ T ],
val pos: SourcePosition ) extends SettingsDefinition {
...
}
}
pos
ãç¡èŠãããšãå T
ã®ã»ããã£ã³ã°ã¯ãåã ScopedKey[T]
ã§ãã巊蟺é
key
ãšåã Initialize[T]
ã§ããå³èŸºé
init
ã«ãã£ãŠæ§æãããã
ç¬¬äžæ¬¡å
䟿å®çã« ScopedKey[T]
ã¯ãçŸåšã®ãããžã§ã¯ããªã©ã®ããã©ã«ãã®ã³ã³ããã¹ãã«ã¹ã³ãŒãä»ãããã SettingKey[T]
ã TaskKey[T]
ã ãšèããããšãã§ããããããšæ®ãã®ã¯ Initialize[T]
ã ãã§ãããã¯äŸåããŒã®åãšäœããæ¹æ³ã§ T
ãžãšè©äŸ¡ãããèœåãæã£ãŠãããInitialized[T]
ã«çŽæ¥äœçšããã®ã¯ããŒã«å®è£
ãããŠãã <<=
æŒç®åã ãStructure.scala åç
§:
sealed trait DefinableSetting [ T ] {
final def <<= ( app: Initialize [ T ]) : Setting [ T ] =
macro std. TaskMacro . settingAssignPosition[ T ]
...
}
ååããæšæž¬ããŠããã®ãã¯ã㯠pos
ã代å
¥ããŠããã®ã ãšæããsbt 0.12 ã«ãããŠã¯ããŒã®ã¿ãã«ã«ã¢ã³ããŒãããããã apply
ã map
ã¡ãœããã«ãã£ãŠ Initialize[T]
ãæ§ç¯ããããsbt 0.13 ã§ã¯ã¹ããŒã㪠:=
æŒç®åã䜿ãããšãã§ãããStructure.scala åç
§:
2013-09-18
oop ã¯ã©ãå®çŸ©ãããã¹ãã ããã?
çŽç²ãªããžã§ã¯ãæåããã°ã©ãã³ã°
çŽç²ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã¯ä»¥äžã®ããã«å®çŸ©ã§ãã:
ãªããžã§ã¯ãã䜿ã£ãããã°ã©ãã³ã°ã
ãªããžã§ã¯ããšã¯äœã?
ä»ã®ãªããžã§ã¯ããžã®åç
§ãä¿æããäºåã«ãªã¹ãã¢ãããããã¡ãã»ãŒãžãåä¿¡ããããšãã§ããä»ã®ãªããžã§ã¯ããèªåèªèº«ã«ã¡ãã»ãŒãžãéä¿¡ããããšãã§ããã¢ãã ã§ãä»ã«ã¯äœãããªããã¡ãã»ãŒãžã¯ååãšãªããžã§ã¯ããžã®åç
§ã®ãªã¹ãããæ§æãããã
ããã§ãããŸããèšãåãã¯åãèãããã®ã ãã©ãã¢ã€ãã£ã¢ã¯ãªããžã§ã¯ãæåãšããèšèãäœã£ã匵æ¬äºº Alan Kay (2003) ããã®ãã®ã ããã以å€ã¯ãçŽæ¥ oop ã«é¢ä¿ç¡ãããå®è£
äžã®è©³çްã ã
2013-07-24
/ sbt
æŠèŠ
äºææ§ã«åœ±é¿ã®ããæ°æ©èœã倿Žç¹ããã°ä¿®æ£
sbt ãšãã«ãå®çŸ©ã Scala 2.10 ã«ç§»è¡ããã
project/plugins/
å
ã«çœ®ããããã©ã°ã€ã³ã®èšå®ãã¡ã€ã«ã®ãµããŒãã廿¢ããããã㯠0.11.2 ãã廿¢äºå®ã«ãªã£ãŠããã
set
ã³ãã³ãã«ãããŠã»ããã£ã³ã°ã®å³èŸºé
å
ã®ã¿ãè£å®ã廿¢ãããæ°ãã«è¿œå ãããã¿ã¹ã¯ãã¯ãããã®ã¿ãè£å®ãäžèŠã«ããããã ã
ããŒã®æ
£çšçãªæžãæ¹ã¯ãããããã£ã¡ã«ã±ãŒã¹ camelCase ã®ã¿ãšããã詳现ã¯åŸã»ã©ã
Maven ãšã®äºææ§ãæ£ãããããã¹ãã®ããã©ã«ãã® classifier ã tests
ã«ä¿®æ£ããã
ã°ããŒãã«ãªã»ããã£ã³ã°ãšãã©ã°ã€ã³ã®ãã£ã¬ã¯ããªãããŒãžã§ã³ä»ããããã«ãããããã©ã«ãã§ã¯ãã°ããŒãã«ã»ããã£ã³ã°ã¯ ~/.sbt/0.13/
ã«ãã°ããŒãã«ãã©ã°ã€ã³ã¯ ~/.sbt/0.13/plugins/
ã«çœ®ããããsbt.global.base
ã·ã¹ãã ããããã£ã䜿ã£ãæç€ºçãªãªãŒããŒã©ã€ãã¯ç¶ç¶ããŠé©çšãããã(#735 )
scalac ã«ãã¡ã€ã«ãæž¡ããšãã« sbt ãè¡ãªã£ãŠããæ£èŠå (canonicalization) ã廿¢ããã(#723 )
åãããžã§ã¯ããããããåºæã® target
ãã£ã¬ã¯ããªãæã€ããšã匷å¶ããããã«ããã
äŸåã©ã€ãã©ãªã® Scala ããŒãžã§ã³ããªãŒããŒã©ã€ãããªãããã«ãããããã«ãã£ãŠåå¥ã®èšå®ãç°ãªã Scala ããŒãžã§ã³ã«äŸåã§ããããã«ãªããscala-library
以å€ã® Scala äŸåæ§ãéåžžã®ã©ã€ãã©ãªäŸåæ§ãšåãããã«æ±ããããã«ãªã£ããããããããã«ãã£ãŠãã®ä»ã® scala-library
以å€ã® Scala ã©ã€ãã©ãªãæçµçã« scalaVersion
以å€ã®ããŒãžã§ã³ã«è§£æ±ºãããå¯èœæ§ãçãŸããã
Cygwin ã§ã® JLine ã®èšå®ã倿ŽããããSetup åç
§ã
Windows äžã§ã® JLine ãš Ansi ã³ãŒãã®æ¯ãèããæ¹åããããCI ãµãŒãå
ã§ã¯ -Dsbt.log.format=false
ãæå®ããŠæç€ºçã« Ansi ã³ãŒããç¡å¹ã«ããå¿
èŠããããããããªãã
ãã©ãŒã¯ããããã¹ãã run ããããžã§ã¯ãã®ããŒã¹ãã£ã¬ã¯ããªãã«ã¬ã³ãã»ã¯ãŒãã³ã°ã»ãã£ã¬ã¯ããªãšããŠçšããããã«ããã
compileInputs
㯠Compile
ã§ã¯ãªã (Compile,compile)
å
ã§å®çŸ©ããããã«ããã
ãã¹ãã®å®è¡çµæã¯ Tests.Output
ã«ãªã£ãã
æ°æ©èœ
boot.properties
å
ã®ã¬ããžããªãããã©ã«ãã®ãããžã§ã¯ãã® resolver ãšããŠçšãããboot.properties
å
ã®ã¬ããžããªã« bootOnly
ãšæžãããšã§ããã©ã«ãã§ãããžã§ã¯ãã«äœ¿çšãããªãããã«ããããšãã§ããã (Josh S., #608 )
.sbt ãã¡ã€ã«å
ã§ val
ã def
ãæžããããã«ããã詳现ã¯åŸã»ã©ã
.sbt ãã¡ã€ã«å
ã§ãããžã§ã¯ããå®çŸ©ã§ããããã«ãããProject
åã® val
ããã«ãã«è¿œå ããããšã«ãªãã詳现ã¯åŸã»ã©ã
ã»ããã£ã³ã°ãã¿ã¹ã¯ãããã³ã€ã³ãããã»ã¿ã¹ã¯ã®æ°æ§æã詳现ã¯åŸã»ã©ã
autoAPIMappings := true
ãšããããšã§ãäŸåã©ã€ãã©ãªã®å€éš API scaladoc ã«èªåçã«ãªã³ã¯ããããã«ããããã㯠Scala 2.10.1 ãå¿
èŠãšããapiURL
ã䜿ã£ãŠäŸåã©ã€ãã©ãªã® scaladoc ã®å Žæãæå®ããå¿
èŠããããapiMappings
ã¿ã¹ã¯ã䜿ã£ãŠæåã§ãããã³ã°ãæäŸããããšãã§ããã
ã¹ã€ããã³ãã³ãã䜿ã£ãŠäžæçã« Scala ããŒã ãã£ã¬ã¯ããªãèšå®ã§ããããã«ãã: ++ scala-version=/path/to/scala/home
ã ã ãããscala-version
ã®éšåã¯çç¥å¯èœã ãããããŒãžäŸåæ§ã®è§£æ±ºã«çšããããã
~/.m2/repository
ã«å
¬éããããã® publishM2
ã³ãã³ãã远å ããã(#485 )
ã«ãŒããããžã§ã¯ããå®çŸ©ãããŠããªãå Žåã¯ãå
šãŠã®ãããžã§ã¯ããéçŽããããã©ã«ãã®ã«ãŒããããžã§ã¯ããçšããã(#697 )
è€æ°ã®ãããžã§ã¯ããã³ã³ãã£ã®ã¥ã¬ãŒã·ã§ã³ããã¿ã¹ã¯ãã»ããã£ã³ã°ãååŸããããã®æ°ãã API ã远å ãããGetting values from multiple scopes åç
§ã
ãã¹ããã¬ãŒã ã¯ãŒã¯ã®æ©èœãããè¯ããµããŒãããããã«ãã¹ãã€ã³ã¿ãŒãã§ã€ã¹ãæ¹åãããïŒè©³çްã¯ïŒ
export
ã³ãã³ã
ã¿ã¹ã¯ã®å Žåã¯ãexport ã¹ããªãŒã ã®å
容ã衚瀺ãããæ
£äŸãšããŠã¯ãã¿ã¹ã¯ãšç䟡ã®ã³ãã³ãã©ã€ã³ã衚瀺ãããäŸãã°ãcompile
ãdoc
ãconsole
ã¯ããããå®è¡ããè¿äŒŒçãªã³ãã³ãã©ã€ã³ã衚瀺ããã
ã»ããã£ã³ã°ã®å Žåã¯ããã¬ãŒãçµç±ããã«ã»ããã£ã³ã°ã®å€ãçŽæ¥è¡šç€ºããã
ãã°ä¿®æ£
äŸåã©ã€ãã©ãªã®è¡çªãèŠåããªãããã«ããã代ããã« conflict manager ãèšå®ããã(#709 )
ãã©ãŒã¯ããããã¹ããå®è¡ãããšãã« Cleanup ãš Setup ãå®è¡ããããã«ãããå¥ã® JVM ã§å®è¡ããããããã¯ã©ã¹ããŒãã¯äœ¿ãããšãã§ããªãã
æ¹åç¹
API æœåºãã§ãŒãºããtyper
ãã§ãŒãºã§ã¯ãªã picker
ãã§ãŒãºã®åŸã§å®è¡ããããšã§ typer ã®åŸã«ã³ã³ãã€ã©ãã©ã°ã€ã³ã眮ããããã«ããã(Adriaan M., #609 )
ã»ããã£ã³ã°ã®ãœãŒã¹å
ã«ãããäœçœ®ãèšé²ããããã«ãããinspect
ã¯å®çŸ©ãããå€ã«é¢ããå
šãŠã®ã»ããã£ã³ã°ã®äœçœ®ã衚瀺ããã
Build.rootProject
å
ã«ã«ãŒããããžã§ã¯ããæç€ºçã«æå®ã§ããããã«ããã
ãã£ãã·ã¥æ
å ±ãä¿åããããã®ãã£ã¬ã¯ããªãå¿
èŠãªã¿ã¹ã¯ã¯ stream
ã® cacheDirectory
ã䜿ããããã«ãªã£ãããã㯠cacheDirectory
ã»ããã£ã³ã°ã«åã£ãŠä»£ããã
ãã©ãŒã¯ããã run
ã test
ã«ãã£ãŠäœ¿ãããç°å¢å€æ°ã envVars
ã«ãã£ãŠèšå®ã§ããããã«ãªã£ãããã㯠Task[Map[String,String]]
ã ã(#665 )
ã³ã³ãã€ã«ã«å€±æããå Žåã«ã¯ã©ã¹ãã¡ã€ã«ã埩æ§ããããã«ãããããã¯ãšã©ãŒãã€ã³ã¯ãªã¡ã³ã¿ã«ã³ã³ãã¬ãŒã·ã§ã³ã®åŸãã®æ¹ã®éçšã§çºçããŠãããä¿®æ£ããã«ã¯å
ã®å€æŽããããã¡ã€ã«ãçŽãå¿
èŠãããå Žåã«åœ¹ã«ç«ã€ã
ããã©ã«ããããžã§ã¯ãã®èªåçæID ãæ¹åããã(#554 )
scala ã³ãã³ãã«ããäœèšãªã¯ã©ã¹ããŒããåé¿ããããã«ãã©ãŒã¯ããã run
㯠java ã³ãã³ãã䜿ãããã«ããã(#702 )
autoCompilerPlugins
ãå
éšäŸåãããžã§ã¯ãå
ã§å®çŸ©ãããã³ã³ãã€ã©ãã©ã°ã€ã³ã䜿ããããã«ããããã ãããã©ã°ã€ã³ã®ãããžã§ã¯ã㯠exportJars := true
ãå®çŸ©ããå¿
èŠãããããã©ã°ã€ã³ã«äŸåããã«ã¯ ...dependsOn(... % Configurations.CompilerPlugin)
ãšæžãã
éãã©ã€ããŒããªãã³ãã¬ãŒãã®èŠªã¯ã©ã¹ã远跡ããããšã§ãã€ã³ã¯ãªã¡ã³ã¿ã«ã³ã³ãã¬ãŒã·ã§ã³æã«ããå°ãªãå°ããäžéã¹ããããå¿
èŠãšããããã«ããã
ã€ã³ã¯ãªã¡ã³ã¿ã«ã³ã³ãã€ã©ã«ãã£ãŠæœåºããã API ã®å
éšæ§é ããããã°ããããã®ãŠãŒãã£ãªãã£ã远å ããã(Grzegorz K., #677 , #793 )
consoleProject
ã¯ã»ããã£ã³ã°ã®å€ã®ååŸãšã¿ã¹ã¯ã®å®è¡ãçµ±åããæ§æãæäŸãããConsole Project åç
§ã
ãã®ä»
Eclipse ãŠãŒã¶ã®äŸ¿å®ã®ããã« sbt ãããžã§ã¯ãèªäœã®ãœãŒã¹ã®ã¬ã€ã¢ãŠããããã±ãŒãžåã«æ²¿ã£ããã®ã«å€æŽããã(Grzegorz K., #613 )
倧ããªå€æŽç¹ã®è©³çް
ãã£ã¡ã«ã±ãŒã¹ã®ããŒå
ãããŸã§ã®ããŒåã®æžãæ¹ã¯ãScala ã®èå¥åã¯ãã£ã¡ã«ã±ãŒã¹ã§ãã³ãã³ãã©ã€ã³ã§ã¯ãã€ãã³ã§ã€ãªããå°æåãšããæ
£çšã ã£ãããããããã¯äž¡æ¹ãšããã£ã¡ã«ã±ãŒã¹ã«çµ±äžãããæ¢åã®ãã€ãã³ä»ããããããŒåã«å¯ŸããŠããã£ã¡ã«ã±ãŒã¹ã䜿ãããšãã§ãããŸãæ¢ã«ããã¿ã¹ã¯ãã»ããã£ã³ã°ã«å¯ŸããŠã¯ç¶ç¶ããŠãã€ãã³ä»ãããã圢åŒãåãä»ãããããããã¿ãè£å®ã¯ãã£ã¡ã«ã±ãŒã¹ã®ã¿ã衚瀺ããããã«ãªãã
2013-06-24
2012幎4æ23æ¥ã«ãããµã¹ã® Austin ã§è¡ããã RailsConf 2012 ã§ã® Rich Hickey (@richhickey) ããã«ããåºèª¿è¬æŒãSimplicity Matters ãæžãèµ·ãããŠç¿»èš³ããŸããã
Rich Hickey ãã㯠Clojure ã Datomic ã®äœè
ã§ãã
ãã®ç¿»èš³ã¯ Creative Commons Attribution ShareAlike 3.0 ã©ã€ã»ã³ã¹ã«åºããŠå
¬éããŸãã
Rich Hickey è¬æŒ
e.e d3si9n èš³
2013-06-20
/ scala
JavaScript ãäœãããã®ã¯ 1995幎ã®ããšã ããããJavaScript: The Good Partsã(2008幎)ãjQuery (2006幎)ãV8 (2008幎) ãªã©ãç»å Žãããããããªãåã«äœãããããšã«ãªããjQuery ãš V8 ãå ç®çãªè²¢ç®ã§ããã®ã«å¯ŸããŠãDouglas Crockford æ°ã®ãThe Good Partsããé¢çœãã®ã¯ãèšèªããæ©èœãåŒãç®ããæ¬ã§ããããšã ãšæãã
ããæè¿ããã Scala ããªã¢ã«ã¯ãŒã«ããªå¶çŽã§ãã Java çãªèŠªãã¿ããããäºææ§ãç¡èŠããŠã¯ã³ããŒã©ã³ãçãªèšå®ã§ãµãã»ãããäœã£ããã©ããªãã ããããšèããŠãããScala ã Java ã®ä»£æ¿ãšããŠäœ¿ãäºãèš±ããããªãã颿°åããã°ã©ãã³ã°èšèªã®ä»£æ¿ãšããŠäœ¿ã£ãŠããããããªãããšæãããã®æèå®éšã®ããäžã€ã®è©Šã¿ã¯ãScala ã®æ§æã®äžã§éè€ããŠãããã®ãæžããããšã ãæ¬çš¿ã§ã¯ãæ
£çšçãªçšæ³ãäœããèããããäœãã«å¯ŸããŠè¯ãæªãã®å€å®ãäžãããšã«ã¯èå³ã¯ç¡ããããã¯ç©ºé£ã¶ãµã³ãã€ããã®ããŒã (The Flying Sandwich Parts; TFSP) ãšåŒã¶ããšã«ããã
å€
What talk you of the posy or the value?
â William Shakespeare, Merchant of Venice
Scala èšèªä»æ§ã¯å€ã以äžã®ããã«å®çŸ©ãã:
å€å®çŸ© val x : T = e
ã¯ãe
ã®è©äŸ¡ããåŸãããå€ã®ååãšã㊠x
ãå®çŸ©ããŸãã
TFSP ã«ãããŠã¯ããã¬ã€ããã¯ã©ã¹ã®æ¬æå
ã§ã¯å泚é T
ã®çç¥ãçŠæ¢ããã颿°å
ã®ããŒã«ã«ã®å€ã¯åæšè«ã䜿ã£ãŠå®çŸ©ããŠããããããã«ãã£ãŠé¢æ°ã¬ãã«ã«ãããŠåæ€æ»ãè¡ãããããšãä¿èšŒãããã
é
å»¶è©äŸ¡å€
çŽ ã® val ã䜿ã£ãŠå€ãå®çŸ©ãããšãå®çŸ©ããé çªã«æ°ã䜿ãå¿
èŠããããåæåããåã«å€ãåç
§ããŠããŸããšå®è¡æã« NullPointerException
ãçºçããŠããŸããå€ã lazy
ã ãšæžãããšã§æåã«åç
§ããããŸã§åæåãé
å»¶ããããšãã§ããã