V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sadhen
V2EX  ›  程序员

送出几本《Scala 实用指南》

  •  1
     
  •   sadhen ·
    darcy-shen · 2018-09-27 23:15:49 +08:00 · 16404 次点击
    这是一个创建于 2030 天前的主题,其中的信息可能已经有所发展或是发生改变。

    异步社区传送门,有勘误,目前只有 3 条,希望在第二次印刷前有更多的反馈。

    具体规则

    1. 共 6 本。
    2. 在评论区撰写评论即可参与,也欢迎讨论关于 Scala、翻译等话题。
    3. 北京时间 10 月 1 日 0 点 0 分截止,结束后当日会在帖子后附言公布获赠名单。
    4. 获赠结果通过对评论用户去重后随机获取。
    5. 获赠用户需为( 9 月 28 日)以前注册,一个用户只能获赠一本。
    6. 全国包邮(新疆、西藏、港澳台邮费需自付,见谅)。
    7. 保留最终解释权。

    本书特色

    1. 几本靠谱的 Scala 编程书籍中最简单务实的一本
    2. 注重工程实践,深入浅出,深入到 JVM 字节码做分析
    3. 简明扼要地介绍了 Akka 的核心概念,为大家接触 Akka 做一个必要的缓冲
    4. 结合设计模式,高屋建瓴,翔实有料

    作者译者简介

    • 文卡特·苏帕拉马尼亚姆( Venkat Subramaniam )博士 Agile Developer 公司的创始人,同时也在休斯敦大学兼任教职。他已经培训和指导了数千名软件开发者。他也是多本书籍的(合著)作者,其中包括获得 2007 年度 Jolt “生产力大”( Productivity Award )的《高效程序员的 45 个习惯:敏捷开发修炼之道》一书。
    • 沈达(@sadhen):挖财数据研发工程师,Scala 爱好者,Apache Spark Contributor,专注于大数据和分布式系统。业余时间是GNU TeXmacs的贡献者。
    • 何品(@hepin1989):目前是淘宝的一名资深软件工程师,热爱反应式编程,同时也是 Akka 和 Netty 等项目的贡献者,活跃于 Scala 社区。

    闲话翻译

    简单陈述一下个人的翻译经历:

    1. 从 2013 年开始翻译GNU TeXmacs的文档,目前的完成度大概是 80%,通过翻译逐渐加入了 GNU TeXmacs 的开发。
    2. 2015 年,探索 Linux 手册页的翻译方案,并给 GNU Groff 提交了Patch,改善中文在终端中对于空格的处理,和 @hosiet 翻译完善了许多手册页的翻译。工作之后,没有做过任何贡献,但 @hosiet 一直在坚持,最后将我们的翻译反馈到了 Debian/Ubuntu 软件源中。 @hosiet 后来成为了一名 Debian Developer

    另外,何品大哥在翻译本书之前,参与过龙腾世纪和质量效应 2 的游戏汉化,翻译过《 Netty 实战》,目前由何品参与翻译的《反应式设计模式》也快要上市了。

    译文展示: TeXmacs 哲学

    source: http://www.texmacs.org/tmweb/about/philosophy.en.html

    TeXmacs 的主要目标之一是通过显著地降低创造高质量用户接口的成本,促进那些与科学相关的自由软件的开发。如果你计划为 TeXmacs 与某个软件写插件,请联系我们。

    作为一个数学家,从科学的角度上讲,我坚信只有自由软件可被接受。两个主要理由如下:

    • 对于一个不开源的“数学”系统,其计算结果不能作为数学证明的一部分。
    • 正如数学家需要从其它定理构建新的定理,自由地修改和发布数学软件中算法的需求合乎情理。

    然而,当前主流的数学软件大多是专有的。这很奇怪,且是一种耻辱。这种现象的根源在于数学家们往往不认为编程是一种完全的科学活动。结果,实用软件的开发被委托给了“工程师们”因而数学家们只能像黑盒一样使用这些程序。

    这种对科学活动的细分是非常武断的:从科学的角度认知黑盒中所有为何物往往十分重要。反过来讲,科学上深邃的理解往往能够诞生更加精良的软件。所以我认为科学家们应当将软件开发视为完全的科学活动,如同撰写文章。自然而然,这种软件的发布方式和科学的传播应当兼容,即:公众可及、可复制和自由使用。

    呼吁大家一起参与开源社区!!!

    <del>成为 Apache XYZ 项目 PMC Member,迎娶白富美,走上人生巅峰</del>

    广告时间

    这个公众号主要关注反应式编程,包括 Netty、Akka、Spark、Scala 等话题,刚刚开始建设,欢迎大家关注。

    为了不给何品大哥拖后腿,终于在这个月给 Apache Spark 和 Scala 项目贡献了若干个 PR。今晚发布的 Scala 2.12.7 就有鄙人的一点点微小的贡献,欢迎大家尝试。

    第 1 条附言  ·  2018-09-28 00:31:56 +08:00
    有兴趣来杭州工作的同学,可以联系我 ( moc.ohoz TA nehdas ) 或者何品内推哦!

    我们部门(挖财数据平台)一直在招人哦。大家看本书的推荐序,就是我们老板(《 Scala 函数式编程》的译者之一)写的。其他岗位的同学对我司感兴趣,也可以找我内推 http://job.wacai.com/

    鄙人在知乎刚开的一个专栏: https://zhuanlan.zhihu.com/scalastyle 欢迎大家关注投稿
    第 2 条附言  ·  2018-10-09 20:01:42 +08:00
    恭喜 List("@xcjx", "@chocolatesir", "@lnomve", "@funky", "@wenning", "@magicsilence") 中奖。请告诉我你们的联系方式。我的邮箱 MyV2EXNickname AT zoho.com 。完整的抽奖代码:

    ```
    @ repl.history.foreach(println)
    import $ivy.`com.lihaoyi::requests:0.1.4`
    import $ivy.`org.json4s::json4s-jackson:3.5.2`
    import org.json4s.jackson.JsonMethods.parse
    import org.json4s._
    import org.json4s.JsonDSL._
    import scala.util.Random

    // 一些常量
    val url = "https://www.v2ex.com/api/replies/show.json?topic_id=493356"
    val numberOfWinners = 6

    // 从 V2EX 获取数据
    val source = requests.get(url)

    // 解析 JSON,获取所有参与抽奖的用户
    val json = parse(source.text)
    case class Profile(username: String, github: String)
    case class Member(member: Profile)
    val members = json.extract[List[Member]].map(_.member.username).distinct

    // 抽奖
    Random.shuffle(members).take(numberOfWinners)
    ```

    参考了这个 Python 版本的代码 /raw/5cda96d8fb26e5e49e0a20b51b9514f87bf0ff68/mytest.py 。最后手动检查一下大家的 profile 是否符合要求。

    ```
    import random
    import requests

    url = 'https://www.v2ex.com/api/replies/show.json?topic_id=490659'
    # 中奖人数
    numberOfWinners = 4

    if __name__ == '__main__':
    source = requests.get(url)
    names_list = []
    for item in source.json():
    username = str(item['member']['username'])
    names_list.append(str(item['member']['username']))
    # print("list length: " + str(len(names_list)))
    names_set = set(names_list)
    totalMembersCount = len(names_set)
    print("本次参与活动人数为:{}".format(totalMembersCount))
    print("-" * 20)
    for name in names_set:
    print(name)
    print("-" * 20)
    luckyMembers = random.sample(list(names_set), numberOfWinners)
    print("恭喜中奖用户:" + str(luckyMembers))
    ```

    大家可以对比感受一下 Scala 和 Python 的一些异同点。
    第 3 条附言  ·  2018-10-09 20:06:37 +08:00

    恭喜 @xcjx @chocolatesir @lnomve @funky @wenning @magicsilence 中奖。请告诉我你们的联系方式。我的邮箱 MyV2EXNickname AT zoho.com 。完整的抽奖代码:

    import $ivy.`com.lihaoyi::requests:0.1.4`
    import $ivy.`org.json4s::json4s-jackson:3.5.2`
    import org.json4s.jackson.JsonMethods.parse
    import org.json4s._
    import org.json4s.JsonDSL._
    import scala.util.Random
    
    // 一些常量
    val url = "https://www.v2ex.com/api/replies/show.json?topic_id=493356"
    val numberOfWinners = 6
    
    // 从 V2EX 获取数据
    val source = requests.get(url)
    
    // 解析 JSON,获取所有参与抽奖的用户
    implicit val formats = DefaultFormats
    val json = parse(source.text)
    case class Profile(username: String, github: String)
    case class Member(member: Profile)
    val members = json.extract[List[Member]].map(_.member.username).distinct
    
    // 抽奖
    Random.shuffle(members).take(numberOfWinners)
    

    参考了这个 Python 版本的代码 mytest.py 。最后手动检查一下大家的 profile 是否符合要求。

    import random
    import requests
    
    url = 'https://www.v2ex.com/api/replies/show.json?topic_id=490659'
    # 中奖人数
    numberOfWinners = 4
    
    if __name__ == '__main__':
    source = requests.get(url)
    names_list = []
    for item in source.json():
    username = str(item['member']['username'])
    names_list.append(str(item['member']['username']))
    # print("list length: " + str(len(names_list)))
    names_set = set(names_list)
    totalMembersCount = len(names_set)
    print("本次参与活动人数为:{}".format(totalMembersCount))
    print("-" * 20)
    for name in names_set:
    print(name)
    print("-" * 20)
    luckyMembers = random.sample(list(names_set), numberOfWinners)
    print("恭喜中奖用户:" + str(luckyMembers))
    

    大家可以对比感受一下 Scala 和 Python 的一些异同点。

    479 条回复    2018-10-20 11:49:17 +08:00
    1  2  3  4  5  
    zy8595208
        401
    zy8595208  
       2018-09-29 23:11:10 +08:00 via Android
    分母+ 1
    UnixCRoot
        402
    UnixCRoot  
       2018-09-30 01:33:20 +08:00 via Android
    来了解一下 scala 语言
    hxd
        403
    hxd  
       2018-09-30 01:35:24 +08:00
    了解一下,分母++
    goodspb
        404
    goodspb  
       2018-09-30 01:41:57 +08:00 via iPhone
    谢谢老板
    36211
        405
    36211  
       2018-09-30 03:37:44 +08:00 via Android
    nutting
        406
    nutting  
       2018-09-30 06:17:39 +08:00 via Android
    希望能中
    SYsensei
        407
    SYsensei  
       2018-09-30 09:00:32 +08:00
    支持
    alphadog619
        408
    alphadog619  
       2018-09-30 09:06:29 +08:00
    哎,希望能中
    Tiakon
        409
    Tiakon  
       2018-09-30 09:29:39 +08:00
    希望能中
    Tiakon
        410
    Tiakon  
       2018-09-30 09:31:21 +08:00
    正在从事 scala 的开发中,能中感激不尽:)
    Tiakon
        411
    Tiakon  
       2018-09-30 09:32:10 +08:00
    楼主,你的二维码过期了...
    WesleyWong
        412
    WesleyWong  
       2018-09-30 09:41:00 +08:00
    公司马上要建大数据平台, 现在正在调研 Spark 生态圈.
    bogun
        413
    bogun  
       2018-09-30 09:46:55 +08:00
    幸运之神,砸我吧
    470326964
        414
    470326964  
       2018-09-30 09:48:11 +08:00
    来了解一下 scala 语言
    470326964
        415
    470326964  
       2018-09-30 09:48:17 +08:00
    来了解一下 scala 语言 1
    cangshui
        416
    cangshui  
       2018-09-30 09:49:04 +08:00 via Android
    拉低中奖率
    LuckCode
        417
    LuckCode  
       2018-09-30 12:52:37 +08:00 via iPhone
    来一手来一手
    DonaldY
        418
    DonaldY  
       2018-09-30 13:20:28 +08:00
    拉低
    blindmt
        419
    blindmt  
       2018-09-30 14:45:56 +08:00
    分母++
    yorec
        420
    yorec  
       2018-09-30 14:46:14 +08:00
    分母++,希望能中
    wangfeng
        421
    wangfeng  
       2018-09-30 14:52:30 +08:00
    谢谢老板
    wangfeng3769
        422
    wangfeng3769  
       2018-09-30 15:08:16 +08:00 via Android
    我来组成头部
    xxmen
        423
    xxmen  
       2018-09-30 15:13:21 +08:00
    做分母,scala 了解一下
    caotian
        424
    caotian  
       2018-09-30 15:15:20 +08:00
    不错不错, 欢迎多翻译这类的图书
    eryuan
        425
    eryuan  
       2018-09-30 15:43:46 +08:00
    ++
    hwsdien
        426
    hwsdien  
       2018-09-30 16:09:16 +08:00
    ++
    27
        427
    27  
       2018-09-30 17:13:30 +08:00
    正好在看何品的 Netty 书,一看觉得名字有点眼熟,来抽个奖
    dyllanwli
        428
    dyllanwli  
       2018-09-30 17:14:51 +08:00
    加油
    oftoo
        429
    oftoo  
       2018-09-30 17:19:01 +08:00
    国庆节快乐~
    gmx1234
        430
    gmx1234  
       2018-09-30 17:54:42 +08:00
    我是来拉低中奖率的
    zhyzhy
        431
    zhyzhy  
       2018-09-30 20:22:11 +08:00
    国庆节快乐~ +1
    zacharyjia
        432
    zacharyjia  
       2018-09-30 20:23:58 +08:00
    来来来拉低中奖率,说不定国庆节可以有本书看
    HashStr
        433
    HashStr  
       2018-09-30 23:05:43 +08:00
    前不久听朋友介绍了 Scala,想入坑
    v2yllhwa
        434
    v2yllhwa  
       2018-10-01 13:09:09 +08:00 via Android
    了解一下 scala
    470326964
        435
    470326964  
       2018-10-01 13:38:11 +08:00
    来来来拉低中奖率,说不定国庆节可以有本书
    hepin1989
        436
    hepin1989  
       2018-10-01 15:17:32 +08:00
    大家好哦,沈达在旅游,我们国庆收假了第二天抽奖吧。
    我也在加班搞双十一。。。稳定性
    ~~
    duanlian
        437
    duanlian  
       2018-10-01 20:12:52 +08:00
    概率概率低
    area346
        438
    area346  
       2018-10-02 08:54:08 +08:00
    想学习下…一直无从下手
    lionseun
        439
    lionseun  
       2018-10-02 15:15:45 +08:00 via Android
    还有机会吗?
    470326964
        440
    470326964  
       2018-10-08 10:50:54 +08:00
    还有机会吗?
    sadhen
        441
    sadhen  
    OP
       2018-10-09 19:39:46 +08:00
    直播抽奖,首先参照一下之前 Flask 上面现有的 Python 代码在 Ammonite 中探索一下

    ```
    @ repl.history.foreach(println)
    import $ivy.`com.lihaoyi::requests:0.1.4`
    import $ivy.`org.json4s::json4s-jackson:3.5.2`
    val url = 'https://www.v2ex.com/api/replies/show.json?topic_id=490659'
    val url = "https://www.v2ex.com/api/replies/show.json?topic_id=490659"
    val numberOfWinners = 4
    val source = requests.get(url)
    import org.json4s.jackson.JsonMethods.parse
    val json = parse(source.contents)
    val json = parse(source.text)
    json \\ "username"
    json \ "username"
    json \\ "username"
    (json \\ "username").extract[List[String]]
    import org.json4s._
    import org.json4s.JsonDSL._
    implicit val formats = DefaultFormats
    (json \\ "username").extract[List[String]]
    (json \\ "username").extract[List[(String, JString)]]
    (json \\ "username")
    (json \\ "username")head
    (json \\ "username").head
    json
    (json \\ "username").head
    (json \\ "username")
    (json \\ "username").extract[List[JValue]]
    (json \\ "username").extract[List]
    (json \\ "username")
    json
    (json \\ "username")
    (json \\ "username") \ "username"
    json
    json.head
    json
    case class Profile(username: String, github: String)
    case class Member(member: Profile)
    json.extract[List[Member]]
    json.extract[List[Member]].map(_.member.name).distinct
    json.extract[List[Member]].map(_.member.username).distinct
    json.extract[List[Member]].map(_.member.username).distinct
    val members = json.extract[List[Member]].map(_.member.username).distinct
    import scala.util.Random
    Random.shuffle(members)
    Random.shuffle(members)
    Random.shuffle(members).take(numberOfWinners )
    help
    :help
    help
    repl.help
    repl.history
    repl.history.head
    repl.history.foreach(println)
    repl.history.foreach(println)
    ```
    sadhen
        442
    sadhen  
    OP
       2018-10-09 19:44:47 +08:00
    正式抽奖完整过程

    ➜ ~ amm
    Loading...
    Welcome to the Ammonite Repl 1.2.1
    (Scala 2.12.6 Java 1.8.0_172)
    If you like Ammonite, please support our development at www.patreon.com/lihaoyi
    @ import $ivy.`com.lihaoyi::requests:0.1.4`
    import $ivy.$

    @ import $ivy.`org.json4s::json4s-jackson:3.5.2`
    import $ivy.$

    @ val url = "https://www.v2ex.com/api/replies/show.json?topic_id=493356"
    url: String = "https://www.v2ex.com/api/replies/show.json?topic_id=493356"

    @ val numberOfWinners = 6
    numberOfWinners: Int = 6

    @ val source = requests.get(url)
    source: requests.Response = Response(
    "https://www.v2ex.com/api/replies/show.json?topic_id=493356",
    200,
    "OK",
    Map(
    "etag" -> Buffer("W/\"02f2dce98bcae83800ccd1568488d6f583c9d72d\""),
    "server" -> Buffer("Galaxy/3.9.8.1"),
    "x-rate-limit-reset" -> Buffer("1539086400"),
    "cache-control" -> Buffer("max-age=3600"),
    "google" -> Buffer("XY"),
    "date" -> Buffer("Tue, 09 Oct 2018 11:41:36 GMT"),
    "x-rate-limit-limit" -> Buffer("120"),
    "x-rate-limit-remaining" -> Buffer("118"),
    "content-type" -> Buffer("application/json;charset=UTF-8"),
    "transfer-encoding" -> Buffer("chunked"),
    "connection" -> Buffer("keep-alive"),
    "x-frame-options" -> Buffer("SAMEORIGIN"),
    "vary" -> Buffer("Accept-Encoding"),
    "strict-transport-security" -> Buffer("max-age=31536000"),
    "content-encoding" -> Buffer("gzip")
    ...

    @ import org.json4s.jackson.JsonMethods.parse
    import org.json4s.jackson.JsonMethods.parse

    @ val json = parse(source.text)
    json: org.json4s.package.JValue = JArray(
    List(
    JObject(
    List(
    (
    "member",
    JObject(
    List(
    ("username", JString("cye3s")),
    ("website", JString("")),
    ("github", JString("")),
    ("psn", JString("")),
    ("avatar_normal", JString("//cdn.v2ex.com/gravatar/041a96d84145b357e82a6e44628125f9?s=24&d=retro")),
    ("bio", JString("")),
    ("url", JString("https://www.v2ex.com/u/cye3s")),
    ("tagline", JString("")),
    ("twitter", JString("")),
    ("created", JInt(1409614320)),
    ("avatar_large", JString("//cdn.v2ex.com/gravatar/041a96d84145b357e82a6e44628125f9?s=24&d=retro")),
    ("avatar_mini", JString("//cdn.v2ex.com/gravatar/041a96d84145b357e82a6e44628125f9?s=24&d=retro")),
    ...

    @ case class Profile(username: String, github: String)
    defined class Profile

    @ case class Member(member: Profile)
    defined class Member

    @ val members = json.extract[List[Member]].map(_.member.username).distinct
    cmd9.sc:1: No org.json4s.Formats found. Try to bring an instance of org.json4s.Formats in scope or use the org.json4s.DefaultFormats.
    val members = json.extract[List[Member]].map(_.member.username).distinct
    ^
    Compilation Failed

    @ implicit val formats = DefaultFormats
    cmd9.sc:1: not found: value DefaultFormats
    implicit val formats = DefaultFormats
    ^
    Compilation Failed

    @ import org.json4s._
    import org.json4s._

    @ import org.json4s.JsonDSL._
    import org.json4s.JsonDSL._

    @ implicit val formats = DefaultFormats
    formats: DefaultFormats.type = org.json4s.DefaultFormats$@58647985

    @ val members = json.extract[List[Member]].map(_.member.username).distinct
    members: List[String] = List(
    "cye3s",
    "CoderHugo",
    "zsh1995",
    "densuc",
    "sadhen",
    "hepin1989",
    "isnowify",
    "chenpipguge",
    "yorksonchang",
    "WeberXie",
    "0vels",
    "duoweimi222",
    "linghutf",
    "nakedou",
    "zhijiansha",
    "Applenice",
    "vecZro",
    "billlee",
    "someonedeng",
    ...

    @ import scala.util.Random
    import scala.util.Random

    @ Random.shuffle(members).take(numberOfWinners )
    res14: List[String] = List("xcjx", "chocolatesir", "lnomve", "funky", "wenning", "magicsilence")


    很幸运,只在 REPL 里面粘贴错两次
    sadhen
        443
    sadhen  
    OP
       2018-10-09 20:07:56 +08:00
    恭喜 @xcjx @chocolatesir @lnomve @funky @wenning @magicsilence 中奖。请告诉我你们的联系方式。我的邮箱 MyV2EXNickname AT zoho.com

    第二个附言写崩了 :(
    chocolatesir
        444
    chocolatesir  
       2018-10-09 20:31:02 +08:00 via Android
    @sadhen 看来我的好运气都花在 v2 抽奖上了😂请问楼主邮箱前缀是 MyV2EXNickname 还是 Nick 加上 v2 用户名呢
    sadhen
        445
    sadhen  
    OP
       2018-10-09 20:32:21 +08:00
    My_V2EX_Name 一共六个字母哦 @chocolatesir 就是你 AT 的那个
    sadhen
        446
    sadhen  
    OP
       2018-10-09 20:33:58 +08:00
    sadhen
        447
    sadhen  
    OP
       2018-10-10 00:42:04 +08:00
    @xcjx @chocolatesir @lnomve @funky @wenning @magicsilence

    请抽中的朋友提供一下收件信息:

    1. 收件人
    2. 收件地址
    3. 手机号
    hepin1989
        448
    hepin1989  
       2018-10-10 02:55:37 +08:00
    代码清单已经更新到 sbt 1.2.4 了,如果各位有勘误,可以随时 at 我们,一切联系方式都可以,确认送冰可乐。

    另外本书中的一些原文,因为年久失修,所以几乎没法用了,后来我们重新写过了,比如天气预报和股票的例子。因为国家出版规定,(地图)等敏感信息,所以都是使用的静态数据,还望各位海涵,当然好处就是,获得的结果一定是和书中保持的一致。

    至于书中的勘误,我们也是合并了国外最新的勘误,当然也包括一些自己补充的勘误。

    而对于定价,主要是 Pragmatic Scala 的这家出版社他们的授权费就比较贵,所以这个书和《 Netty 实战》一样,也是 69 的定价。当然也包括今年的纸变贵了。

    代码清单最新的都在 Github,只要本人不挂,会一直更新的,编译的话基于的是 2.12.x,对于一些个将来在 Dotty 中会废弃掉的语法,也改掉了,当然不包括书中故意用来展示类型推导的例子。

    欢迎各位反馈,同时特别辛苦沈达组织这次活动,本周日我和他面基后,把书给各位邮寄过来,谢谢大家。
    hepin1989
        449
    hepin1989  
       2018-10-10 03:00:39 +08:00
    @27 本人只是翻译:)
    hepin1989
        450
    hepin1989  
       2018-10-10 03:02:41 +08:00
    @cye3s 目前的版本就是最新的,有 3 个勘误,在异步社区的本书页面,代码清单在 Github 绝对是最新最新的。
    hepin1989
        451
    hepin1989  
       2018-10-10 03:07:56 +08:00
    @xcjx 第一次印刷的勘误不少,不过后续的勘误一直在跟进,在第 4 次印刷的时候就没啥勘误了。

    代码清单我一直在更新,如果有什么新的意见可以直接提出来哦。
    英文原版的错误其实很多很多的,很多人可能没在意,中文版合并了外版本的勘误,对于新的勘误也反馈了。而原版的代码清单也是后来我更新上去的哈:)

    一起进步,这次是两个人,所以 Netty 实战我只能保证现在的印刷版本几乎没新的勘误,不过我的确无法保证符合每个人的胃口呢,后续的 Scala 书和反应式设计模式一书,因为是多人翻译,多人校对,可能更加好一些。
    hepin1989
        452
    hepin1989  
       2018-10-10 03:12:02 +08:00
    @Mistwave 这个书其实翻译初衷是因为一直没人接锅,然后我和嘉和又想写一本 Akka 书,Akka 书又不可避免地会涉及到 Scala,所以就。。。

    终于本书,全面是肯定不全面的,甚至市面上没有任何一本书可以全面地介绍 Scala。不过本书胜在实用,且我们在翻译过程中也加入了一些 Dotty 等未来语言会出现的变化。原文的内容作为译者我们无法改变,所以如果要全面地了解 Scala 本书完全不行,不过如果是应付工作,或者快速入门,那的确是绰绰有余:)
    hepin1989
        453
    hepin1989  
       2018-10-10 03:13:40 +08:00
    @changdy Kotlin 和 Scala 在很多地方也比较像,不过 kotlin 对于目前 Scala 的一些不好的地方,进行了改进。但是 HKT 等特性目前 Kotlin 是不支持的。而 Dotty 现在又在抄一点 Kotlin 好的地方,所以你懂的。
    hepin1989
        454
    hepin1989  
       2018-10-10 03:16:04 +08:00
    @exceldream Akka typed 更坑,还有 Dotty 在 20 年等你。
    hepin1989
        455
    hepin1989  
       2018-10-10 03:17:36 +08:00
    @hdzsj2010 目前将要上市的《反应式 Web 编程》和《反应式设计模式》都是翻译成了“反应式了”。
    hepin1989
        456
    hepin1989  
       2018-10-10 03:20:04 +08:00
    @frandy 这个书的确挺实用的,基本是工作上使用是够了,当然,我是说别写那种让人捉摸不透的代码哦,想要见识下,可以问下 QQ 群的小星星。
    hepin1989
        457
    hepin1989  
       2018-10-10 03:21:06 +08:00
    @yinbowu95 SBT 这个,其实陈涛和沈达都有过想法写本书的,不过你知道,这个书的销量肯定是 GG。简单用的话陈涛在 gitub 上有 notes。您可以参考下。
    hepin1989
        458
    hepin1989  
       2018-10-10 03:22:27 +08:00
    @luozic 这个问题社区讨论过,基于 Scala.js 的经验,得贡献 4-5 年的时间,请问谁愿意,请站出来哦。
    hepin1989
        459
    hepin1989  
       2018-10-10 03:25:34 +08:00
    @caotian 翻译书耗时耗力还挨骂,KPI 的钱更多,不过不管是《 Netty 实战》,还是沈达和我翻译的这本《 Scala 实用指南》,我们真的都是用了心的,而对于将要出的《反应式设计模式》,光 neo 的投入都是几百万 RMB 的成本。所以,翻译书这个活,估计在《反应式设计模式》之后,有点儿难为情了,两个娃儿嗷嗷叫,没办法的。
    hepin1989
        460
    hepin1989  
       2018-10-10 03:27:07 +08:00
    @hepin1989 同时还不包括我们邀请帮忙 Review 译稿的很多群友和资深大拿的付出,我在此一一跪谢了。
    luozic
        461
    luozic  
       2018-10-10 07:55:30 +08:00 via iPhone
    从语言设计上来说 C# F#比 Java 还是坑少一点,现在看 dotty 应该能把 Scala 的一些坑给填了。实际现在还是觉得 typescript 和 python 感觉更适应场景。julia 有点意思,不过实际 python 的主要场景根本和 julia 不搭。
    Mistwave
        462
    Mistwave  
       2018-10-10 12:32:15 +08:00 via iPhone
    @hepin1989 期待何品大哥的 Akka 书(抱拳
    Mistwave
        463
    Mistwave  
       2018-10-10 13:07:07 +08:00
    给沈达大哥发了邮件,请查收:)
    whirly
        464
    whirly  
       2018-10-10 17:22:29 +08:00
    正在学习 Spark,希望获奖
    funky
        465
    funky  
       2018-10-10 19:04:15 +08:00
    中奖!!
    wenning
        466
    wenning  
       2018-10-10 21:57:18 +08:00
    @sadhen , 哈哈谢谢,人品爆发, 我使用 [email protected] 发送了邮件,请查收
    sadhen
        467
    sadhen  
    OP
       2018-10-10 22:15:30 +08:00
    @wenning 不知道为啥,你进 Spam 了 [doge]
    sadhen
        468
    sadhen  
    OP
       2018-10-10 22:18:58 +08:00
    @xcjx @lnomve 请发邮件给我你们的收件地址和手机号哦,如果放弃的话,也麻烦告诉我哦

    等到六个名额齐了,我们一起发货
    wenning
        469
    wenning  
       2018-10-10 22:40:35 +08:00
    @sadhen 可能是我主题带抽奖这个关键字吧。
    xcjx
        470
    xcjx  
       2018-10-11 09:18:59 +08:00
    @sadhen 昨天发送了,foxmail 的那个
    sadhen
        471
    sadhen  
    OP
       2018-10-11 10:12:32 +08:00
    @xcjx OK
    djx314
        472
    djx314  
       2018-10-11 23:13:12 +08:00
    哟西,可以发言啦,来打气一波
    sadhen
        473
    sadhen  
    OP
       2018-10-12 23:27:59 +08:00
    六个中奖的同学的收件地址,我已经收到了,过两天便寄出快递

    @xcjx @chocolatesir @lnomve @funky @wenning @magicsilence
    sadhen
        474
    sadhen  
    OP
       2018-10-14 16:32:34 +08:00
    @tamlok 我其实想花点时间鼓捣 VNote,学习一下 Qt,最后忽悠大佬过来折腾 GNU TeXmacs。

    不过人的精力还是有限的。
    hepin1989
        475
    hepin1989  
       2018-10-16 15:48:56 +08:00   ❤️ 1
    书已经全部邮寄了哈,大家等待签收即可。
    wenning
        476
    wenning  
       2018-10-17 16:13:32 +08:00
    @hepin1989 @sadhen 哈哈书已经收到。 再次表示感谢。
    xcjx
        477
    xcjx  
       2018-10-19 08:57:07 +08:00
    @hepin1989
    @sadhen
    书籍已经收到,感谢!
    funky
        478
    funky  
       2018-10-19 15:08:40 +08:00
    @sadhen @hepin1989 书籍已经收到,感谢
    chocolatesir
        479
    chocolatesir  
       2018-10-20 11:49:17 +08:00 via Android
    谢谢楼主,昨天已经收到
    1  2  3  4  5  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5316 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 07:55 · PVG 15:55 · LAX 00:55 · JFK 03:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.