scala中的Option类型是个很好用的数据结构,用None来替代java的null可以大大降低代码的复杂性,它还是一个更容易解释的状态表达形式,比如在读取数据时我们用Some(Row)来代表读取的数据行Row,用None来代表没有读到任何数据,免去了null判断.由此我们可以对数据库操作的结果有一种很直观的理解.同样,我们又可以用Either的Right(Row)来代表成功运算获取了结果Row,用Left(Err)代表运算产生了异常Err.对于数据库编程我还是选择了Task[Either[E…
首先声明:标题上的所谓编程模式是我个人考虑在集群环境下跨节点(jvm)的流程控制编程模式,纯粹按实际需要构想,没什么理论支持.在5月份的深圳scala meetup上我分享了有关集群环境下的编程模式思路.我提供了下面这个示意图: 上图是我正在探讨的“现代企业I.T综合数据平台”网络结构.因为互联网经济下的信息系统必须增添大数据元素,所以除了传统的交易类型jdbc数据库之外,还增加了分布式数据库cassandra和mongodb.由于jdbc数据库不支持分布式的运算模式,所以从数据交换的角度上它与…
最近一段时间才开始关注云栖社区的公众号,在两周前看到要在深圳科兴科学园办一场Rocket MQ的Meetup.因为从来没有参加过这种线下活动,而且对Rocket MQ比较感兴趣,所以就立即报名参加. 报完名就把这件事给忘了,直到周五收到短信才又想起来,周六中午才决定要去. 回顾Meetup 我一开始想着掐点进场,后来还是提前半个小时就到了地方.幸亏早到了,因为这次想要参加的人非常地多,虽然会议室很大,但座位还是不够.后面到的人,只能是坐小板凳,挤在四周的过道里. 简单回顾 Meetup在两点钟准…
刚完成了9月份深圳scala-meetup,趁刮台风有空,把我在meetup里的分享在这里发表一下.我这次的分享主要分三个主题:“Monadic编程风格“.”Future vs Task and ReaderMonad应用方法“及”using heterogeneous monads in for-comprehension with MonadTransformer“.这篇想先介绍一下Monadic编程风格. Monadic编程就是用Monad来编程,它的形式是:F[G],F是个Monad,然…
在前面几篇关于数据库引擎的讨论里很多的运算函数都返回了scala.Future类型的结果,因为我以为这样就可以很方便的实现了non-blocking效果.无论任何复杂的数据处理操作,只要把它们包在一个Future{...}里扔给系统运算就算完事不理了,马上可以把关注放到编程的其它部分了.在3月17日的深圳scala用户meetup里我做了个关于scala函数式编程的分享,里面我提到现在使用最多的函数组件就是scala.Future了.我想这应该在scala用户群里是个比较普遍的现象:大家都认为这…
Represents optional values. Instances of Option are either an instance of scala.Some or the object None.Option类代表可选的值.Option的实例要么是Some的实例,要么是None的实例. The most idiomatic way to use an scala.Option instance is to treat it as a collection or monad and u…
介绍monads有点像互联网时代的家庭手工业.我想 “为什么要反对传统?”,但这篇文章将以Scala对待monads的方式来描述. 有个古老的寓言,讲述了几个瞎子第一次摸到大象.一个抱着大象的腿说:“它是一棵树”:另一个摸着大象的鼻子则说:“它是一条大蛇”:第三个则说:“它是一把扇子”... 从这个寓言我们可以得到个结论:古人相信视觉障碍者喜欢调戏大型哺乳动物(此句英文原意可能带有其它含义).幸运的是我们生活在一个更开明的时代.我们也应该了解自己的局限,防止它阻碍我们把握事物的全貌,在某些方面,…
引言 转入Scala一段时间以来,理解Functor.Applicative和Monad等概念,一直是我感到头疼的部分.虽然读过<Functors, Applicatives, And Monads In Pictures> 一文,但深感未得甚解,仍是翻书了然.关书茫然. 于是转而"曲线救国"--选择学习更加纯粹的FP语言Haskell,尝试结合着对范畴论的一点粗鄙理解,再从Haskell与Scala不同编码实现的角度去比较,结果真有柳暗花明又一村的感觉.参考书籍为著名的&…
我们在上一节讨论了scalaz Future,我们说它是一个不完善的类型,最起码没有完整的异常处理机制,只能用在构建类库之类的内部环境.如果scalaz在Future类定义中增加异常处理工具的话,用户就会经常遇到Future[Throwable\/A]这样的类型,那么在进行Monadic编程时就必须使用Monad Transformer来匹配类型,程序就会变得不必要的复杂.scalaz的解决方案就是把Future[Throwable\/A]包嵌在Task类里,然后把所有Future都统一升格成T…
我们不断地重申FP强调代码无副作用,这样才能实现编程纯代码.像通过键盘显示器进行交流.读写文件.数据库等这些IO操作都会产生副作用.那么我们是不是为了实现纯代码而放弃IO操作呢?没有IO的程序就是一段烧CPU的代码,没有任何意义,所以任何类型的程序都必须具备IO功能,而在FP模式中对IO操作有特别的控制方式:具体实现是通过把代码中产生副作用的部分抽离出来延后运算(在所有纯代码运算之后).scalaz的IO Monad就是处理副作用代码延后运算的一种数据结构.我先举个简单的例子来示范如何通过一种数…
说道FP,我们马上会联想到Monad.我们说过Monad的代表函数flatMap可以把两个运算F[A],F[B]连续起来,这样就可以从程序的意义上形成一种串型的流程(workflow).更直白的讲法是:任何类型只要实现了flatMap就可以用for-comprehension, for{...}yield.在这个for{...}里我们可以好像OOP一样编写程序.这个for就是一种运算模式,它规范了在for{...}里指令的行为.我们正从OOP风格走入FP编程模式,希望有个最基本的FP编程模式使我…
Monad typeclass不是一种类型,而是一种程序设计模式(design pattern),是泛函编程中最重要的编程概念,因而很多行内人把FP又称为Monadic Programming.这其中透露的Monad重要性则不言而喻.Scalaz是通过Monad typeclass为数据运算的程序提供了一套规范的编程方式,如常见的for-comprehension.而不同类型的Monad实例则会支持不同的程序运算行为,如:Option Monad在运算中如果遇到None值则会中途退出:State…
经过了一段时间的学习,我们了解了一系列泛函数据类型.我们知道,在所有编程语言中,数据类型是支持软件编程的基础.同样,泛函数据类型Foldable,Monoid,Functor,Applicative,Traversable,Monad也是我们将来进入实际泛函编程的必需.在前面对这些数据类型的探讨中我们发现: 1.Monoid的主要用途是在进行折叠(Foldable)算法时对可折叠结构内元素进行函数施用(function application). 2.Functor可以对任何高阶数据类型F[_]…
In functional programming, we create large functions by composing small functions; in object-oriented programming, we create large objects by composing small objects. They are different types of composition. They might sound similar, but there is som…
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 如果说 2018 年是技术大爆炸年,那么 Apache Kafka 绝对是其中闪亮的新星. 自Kafka 从首发之日起,已经走过了快八个年头.Kafka 已经从最开始的大规模消息系统,发展成为功能完善的分布式流式处理平台,其高性能.可扩展的特性,使其非常适合大数据.日志等场景下大规模流数据的实时处理.超过三分之一的福布斯 500 强公司都在它们的大规模集群中使用着 Kafka. Apache Kafka 为什么能得到巨头们的青睐?都有哪…
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 云+导语:4月22日,由腾讯云和 Kafka 社区主办.开源中国协办的腾讯云+社区技术沙龙 Kafka Meetup 深圳站在腾讯大厦举行,本次活动全程干货满满,不仅有 Kafka 的前世今生及展望,也有对 Kafka 技术架构的深入解析,同时还有基于 Kafka 的应用平台的相关开发与运维实践.活动异常火爆,现场近三百人参与交流,不少参会者表示活动质量很高,不虚此行. 现场听众 Apache Kafka 的过去.现在和未来 2010年…
由阿里技术生态联合 CNCF 官方共同出品的 Kubernetes & Cloud Native Meetup 将在 8 月 31 日来到深圳.届时,阿里云.蚂蚁金服高级技术专家将携手来自国内知名容器开发专家 ,为你带来 Kubernetes 及 Cloud Native 技术的实践与落地经验. 活动亮点: 阿里集团.阿里云.蚂蚁金服等多位专家联合出品: 阿里云原生生态分享:OpenKruise, Serverless, 云文件存储,PaaS 平台云原生演进: 国内知名厂商带来云原生落地案例分享…
一.类似于淘宝网,可以连续选择多个商品筛选条件,这多个参数如何传递到后台,进行数据交互? 方案一: def index // 给view提供多个参数 @param1 = ... @param2 = ... end // view可在跳转链接中按需要把参数传给下一次active,形成数据流闭环 view中路由XXXX_path(@param1,@param2) 缺点:各个相关路由都需要添加参数支持不方便,参数多时更不方便 二.save , save! 的疑问 函数添加感叹号会报出异常,在调试时有帮…
新手上路,若有错误请及时提醒 Rails中CSS,JS引用关系分析 一.Rails静态文件存放位置 二.Rails中CSS引用方式 三.Rails中JS引用方式与CSS类似 四.上面都是默认引用application的所有css,js文件,那么如何为某个网页指定加载某些css,js文件集合呢? Rails中静态资源管理(Asset Pipeline功能,上面机制的实现) Asset Pipeline功能依赖gem 新手上路,若有错误请及时提醒 Rails中CSS,JS引用关系分析 一.Rails…
本文作者 Jacek Laskowski 拥有近20年的应用程序开发经验,现 CodiLime 的软件开发团队 Leader,曾从 IBM 取得多种资格认证.在这篇博文中,Jacek 分享了 Warsaw Scala Enthusiasts Meetup 上 Rafal Krzewski 介绍的一个 Docker sbt 插件.本文系 OneAPM 工程师编译整理: 虽然在 DeepSense.io 项目中,Docker 已得到了非常深入的应用,但是如果没有接触到 Rafal Krzewski…
第2届 广州.NET线下沙龙 Azure Meetup 4月13日,第2届广州.NET线下沙龙在广州银行大厦7楼中创学院路演大厅成功举办.来自微软MVP.网易的技术专家们带来了干货满满的知识分享,即使当日广州下着瓢泼大雨,仍旧有超过70位行业伙伴前来参与,报名出席率更是达到了72%.下面,小编带你进入精彩的活动现场吧. 活动分为上午场和下午场,微软MVP们从多方面阐述了云服务的未来以及发展趋势,卢建辉老师更是直接在Azure上演示了其AI方面的强大功能.来自网易的运维专家单汉强老师在现场动手操作…
安装Scala 1,到http://www.scala-lang.org/download/ 下载与Spark版本对应的Scala.Spark1.2对应于Scala2.10的版本.这里下载scala-2.10.4.tgz. 2,解压安装Scala 1), 执行#tar -axvf scala-2.10.4.tgz,解压到/root/spark/scala-2.10.4. 2),在~/.bash_profile中添加如下配置: export SCALA_HOME=/root/spark/scala…
Scala入门到精通 http://lib.csdn.net/base/scala/structure http://hongjiang.info/scala/ http://blog.csdn.net/lovehuangjiaju/article/details/47612699 http://www.scala-lang.org/old/node/104.html https://www.cnblogs.com/zlslch/p/5723857.html Scala 课堂! http://t…
需求介绍: 爬取指定地点的所有全国相关的列车班次详情.将结果写进mysql. 步骤及所遇到的问题: 1.寻取全国站点静态信息   https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9002 一个静态的js文件 2.借助web工具,本人谷歌浏览器F12在12306相关页面找取所需要的接口 3.寻找规律,注意去重写进mysql 直接上代码,看注释: object TrainSchedu…
快速了解Scala技术栈 我无可救药地成为了Scala的超级粉丝.在我使用Scala开发项目以及编写框架后,它就仿佛凝聚成为一个巨大的黑洞,吸引力使我不得不飞向它,以至于开始背离Java.固然Java 8为Java阵营增添了一丝亮色,却是望眼欲穿,千呼万唤始出来.而Scala程序员,却早就在享受lambda.高阶函数.trait.隐式转换等带来的福利了. Java像是一头史前巨兽,它在OO的方向上几乎走到了极致,硬将它拉入FP阵营,确乎有些强人所难了.而Scala则不,因为它的诞生就是OO与FP…
引言 在学习Scala的过程中,我发现其在构建大规模分布式计算系统上有与生俱来的特质. 其丰富的类型系统能够帮助编程设计提供非常好的信息隐藏和抽象,其monoids和monads概念利用Scala高阶函数实现计算并行和数据处理流水线,其Actor系统帮助编写可伸缩性的应用程序,事实上现特定领域语言的优势帮助开发用户非常好克服不同语言的障碍. 尽管以上Scala长处说起来不会感同身受,但这能够作为我学习的一大动力.让我開始尝试编写并行机器学习系统. 在学习过程中,我主要參考<Scala for M…
2018年2月16日,Dubbo 加入 Apache 基金会孵化器,在随后的那个夏天,我们开始在全国(北京.上海.深圳.成都.杭州)和社区的用户们见面.认识.交个朋友,将社区的最新动态.Dubbo 的发展规划.和一些用户的最佳实践进行分享,目的是让大家在使用和共建 Dubbo 的过程中,更有参与感. 2019年,我们发现,参与 Dubbo Meetup 报名和来到现场的人越来越多,社区的活跃度也越来越高,所以我们将 Dubbo Meetup 升级为 Dubbo Tech Day(Dubbo开发者…
8月16日,ALC Beijing 的首次线下沙龙活动 -- <开源到底有多难?>在微软大厦如期举行.本次沙龙主要是分享开源开发经验.探讨如何让开源项目更加茁壮成长,以及分享 ASF 管理和运作开源项目的成功之道. Apache 软件基金会成员.Apache 软件基金孵化器导师.ALC Beijing 发起人姜宁:Apache Flink 社区 PMC member 李钰:Apache DolphinScheduler 项目负责人.易观 CTO 郭炜:ASF Member.阿里巴巴 Tech…
在linux调试C/C++的代码需要通过gdb,调试java代码呢?那就需要用到jdb工具了.关于jdb的用法在网上大家都可以找到相应的文章,但是对scala进行调试的就比较少了.其实调试的大致流程都是一样的,只是需要注意一些细节的地方就可以了.下面就来简单说明一下.在这里关于scala和jdk的配置问题就不再详述了,下面进入正题吧. 首先放上调试用的scala代码hello.scala object hello { def main(args: Array[String]): Unit = {…
1, 在scala REPL中输入3. 然后按下tab键,有哪些方法可以被调用? 24个方法可以被调用, 8个基本类型: 基本的操作符, 等:     2,在scala REPL中,计算3的平方根,然后对该值求平方,现在这个结果跟3相差多少? scala.math.sqrt(3) res17: Double = 1.7320508075688772   scala.math.pow(res17,2) res18: Double = 2.9999999999999996   相差结果 3-res1…