2017年5月31日星期三

开源美图 2017 06 01


Linuxeden 开源社区 --

The post 开源美图 2017 06 01 appeared first on Linuxeden开源社区.

http://ift.tt/2rlSGlL

经典的 Fork 炸弹解析


Linuxeden 开源社区 --

Jaromil 在 2002 年设计了最为精简的一个 Linux Fork 炸弹,整个代码只有 13 个字符,在 shell 中运行后几秒后系统就会宕机:

这样看起来不是很好理解,我们可以更改下格式:

更好理解一点的话就是这样:

因为 shell 中函数可以省略 function 关键字,所以上面的十三个字符是功能是定义一个函数与调用这个函数,函数的名称为 :,主要的核心代码是 :|:&,可以看出这是一个函数本身的递归调用,通过 & 实现在后台开启新进程运行,通过管道实现进程呈几何形式增长,最后再通过 : 来调用函数引爆炸弹。因此,几秒钟系统就会因为处理不过来太多的进程而死机,解决的唯一办法就是重启。

Bomb 一下

秉着不作不死的心态,我们也来运行一下,于是我将矛头指向云主机,,我使用了国内的一个 2G 内存的云主机,首先在本地开启两个终端,在一个终端连接云主机后运行炸弹,秒后再尝试用另外一个终端登录,效果可以看下面 Gif 图:

看,运行一段时间后直接报出了 -bash: fork: Cannot allocate memory,说明内存不足了。并且我在二号终端上尝试连接也没有任何反应。因为是虚拟的云主机,所以我只能通过主机服务商的后台来给主机断电重启。然后才能重新登录:

炸弹危害

Fork 炸弹带来的后果就是耗尽服务器资源,使服务器不能正常的对外提供服务,也就是常说的 DoS(Denial of Service)。与传统 1v1、通过不断向服务器发送请求造成服务器崩溃不同,Fork 炸弹有种坐山观虎斗,不费一兵一卒斩敌人于马下的感觉。更吓人的是这个函数是不需要 root 权限就可以运行的。看到网上有帖子说某些人将个性签名改为 Fork 炸弹,结果果真有好奇之人中枪,试想如果中枪的人是在公司服务器上运行的话,oh,!

预防方式

当然,Fork 炸弹没有那么可怕,用其它语言也可以分分钟写出来一个,例如,python 版:

Fork 炸弹的本质无非就是靠创建进程来抢占系统资源,在 Linux 中,我们可以通过 ulimit 命令来限制用户的某些行为,运行 ulimit -a 可以查看我们能做哪些限制:

可以看到,-u 参数可以限制用户创建进程数,因此,我们可以使用 ulimit -u 20 来允许用户最多创建 20 个进程。这样就可以预防 bomb 炸弹。但这样是不彻底的,关闭终端后这个命令就失效了。我们可以通过修改 /etc/security/limits.conf 文件来进行更深层次的预防,在文件里添加如下一行(ubuntu 需更换为你的用户名):

这样,退出后重新登录,就会发现最大进程数已经更改为 20 了,

这个时候我们再次运行炸弹就不会报内存不足了,而是提示 -bash: fork: retry: No child processes,说明 Linux 限制了炸弹创建进程。

参考

http://ift.tt/XkemqB

转自 http://ift.tt/2qzgNfn

The post 经典的 Fork 炸弹解析 appeared first on Linuxeden开源社区.

http://ift.tt/2rlXx6d

如何进行人力再造:指导即服务


Linuxeden 开源社区 --

作者 Medhat Sabry ,译者 王强

关键点

  • 我们所处的行业中,每五年就会有半数员工被新毕业生取代。他们带来了源源不断的能量,但也不够成熟老练
  • 这使得我们处于一种“持续缺乏经验”的状态
  • 人力再造方法引入了小组指导和嵌入教练,可作为解决以上问题的一种手段
  • “师友拥抱(Mentorship Hug)”是一种非正式、非庆祝、非课程的互动活动,专为新人举办
  • 在组织中提供专业智慧时, “指导即服务”是一项持续内容

引言

正如我在 之前的一篇同名文章 中所提到的,人力再造是组织“坚持追求健康”精神的体现,落实在五种行动分支上。它们分别是指导与教练、领导力再造、团队充能、管理者意识与主动监控。

所以如果你读过之前那篇文章,并有兴趣了解更多内容,本文正对你的胃口。

本文中我们会探讨一些具体的做法。本文的主题是指导与教练分支,着重研究指导部分。该主题可总结为“指导即服务”,缩写为 MRaaS。

能量与纪律的悖论

业界权威之一,Robert C. Martin(Uncle Bob)给出了一项估计,指出程序员的数量每五年会翻番,(主要)来自于教育系统的新 CS 和 EE 毕业生成批涌入需求旺盛的开发市场。这条经验定律听起来没什么问题,其内涵很像是 晶体管行业几十年前就有的戈登摩尔定律 。这里我推荐读者观看 Martin 的演讲 ,其中提出了关于业内人员成熟度的很多见解。于是,在这一可谓人类当今文明基石的行业中,我们的平均经验水平一直都和新手几乎相当,只是比新手略强!这一事实的影响有利有弊:好处在于我们得到了庞大的、源源不断的能量、心流(flow)和极致专注(hyperfocus)。而弊端则如业内前辈所看到的一样,新人的自我管理能力与个性约束变得一团糟。我个人并不同意“一团糟”理论,我认为这种现象是代际视角的正常差异,正是节奏与文化显著不同的生态系统塑造了这种差异。事实上我们(作为行业前辈)的职责正是要帮扶新人,平滑、优雅地将他们塑造为专业人员。那么,问题在哪儿呢?

有时要教导这一大帮未成熟员工的资源不够用,这时问题就来了。特别是当团队和领导要面对沉重压力,需要尽快完成任务计划时,帮助新人、使他们“技术上具备生产力”(但并非团队急需)的余力就会非常紧张。Martin 的那段演讲很好地描述了这一现象:我们发现自身处于持续“缺乏经验”的状态中。

那么该做些什么?

这里的要点是,指导是一种单对单的长时间引导过程。这种手段花费高昂,不太可能应用到全部日常工作环境中。同时,虽然教练是基于团队实施的,它也需要很好地适应日常工作环境和场景,以免打断和浪费团队的工作时间。为实现指导与教练的目标,我们先来以人力再造的视角研究一些更加务实的模型。

在人力再造背景下指导与教练

关于指导的实用模型,我推荐“小组指导”。其中一位导师对接一组学员,指导一个特定主题并安排一系列会话,直到取得预期的效果。这里可以参考 ATD(人才发展协会)的一篇概述论文 获取这一概念的更多细节。

在教练领域,我使用的是“嵌入式团队教练”,有时也称作一线经理教练。这种教练角色是高效率领导者职责的一部分。首先要在组织中建设一个出色的领导力基础,然后要让领导者知道怎样去教练,而非单纯地提意见,当然还要根据员工的绩效和发展意愿来设置教练主题。

这里的另一个角色是从指导和教练相关的模型中自然产生的,那就是小组指导流程中的“协调人”。事实上协调人当然是由领导者担任的。他们与团队一同寻找(而不是为团队寻找)哪些主题应该包含进指导服务中。他们安排和协调指导服务的会话,并有权评估效果、影响团队成员。

师友拥抱

那么首先,怎样让这些新人步入职场呢?怎样向他们表明我们想要为他们提供指导,从而帮助他们取得事业成功呢?

简单明了地说:使用“师友拥抱”!PRE(人力再造的缩写)应该以这种方式开头。

每个组织都有一些欢迎新人的方法,让新人能愉快地融入团队。这通常是由人资部门负责的事项。此外还有类似“培训会议”或“培训日”的活动,用来让新人了解职场生活的具体内容。

但是师友拥抱并不属于这两个环节。它可以被安排在培训日里(例如半天时间),但最好是单独分出一整天的时间。如果新人还没在项目中承担重任,这一活动就不会耗费太多资源。如果团队的多种开发岗位乃至团队领导层来了不少于三名新成员,那么找上级或人资部门安排师友拥抱并不困难,更高级别的领导层则有自己的一套流程。师友拥抱的时间越接近迎新日越好。

不管是作为培训日的一部分或者是独立的一天(这样更好),师友拥抱都不该是一种庆祝氛围浓厚的迎新会。它应该成为“专业的会谈”,用来填补前辈与新人之间的鸿沟。

我个人经历而言,只要师友拥抱活动由合适的人选主办、有正确的形式,那么参与其中的感觉就非常棒。我定义“正确”的标准来自于我经历许多活动后总结的经验,之后我会谈到这部分。

现在我们来谈谈“拥抱”的一些细节。

首先定义职业和任务

第一部分的目标是让新人明白一种职业的本质:职业的含义是什么?它对从业者有何要求?人们该期待这一职位给自己的事业带来什么好处?

首先为拥抱日挑选一位领导者。他应该有丰富的经验,足以打动新人。找一位具备某些领导特长的前辈,她或他必须认同这种教导菜鸟新人的工作,并为新人提出某种“宣言”,宣言的目标是在这个知识快速革新(不仅限于我们的行业)的年代进行高效的软件开发。

接下来是议程和内容。列出你们的需求,但有一项内容永远要排在最前面,那就是“ 知识时代软件开发的视角 ”。以上链接是一个示例。这实际是我对 Techstamina 的愿景,是我对以人员为中心的软件开发环境给出的提案。

向新人提一些问题是一种开启谈话的不错方式,诸如:

  • 如今一辆汽车中有多大数量级的代码?(出自 Martin 的演讲)
  • 杂货店与飞机设计有什么共同点?(答案:很简单,就是软件!)

那么,经过半小时或更久的生动讨论探讨软件的用途与其对当下人类文明的重要性,可以保证大家都会意识到开发者工作的真正意义,视野也会开始变得更加广阔。

到了这一步,经过对职业意义的真诚探讨,我们应该已经指出了开发工作的本质。开发者应该是“匠人”,要让新人心中烙下“工匠技艺”的生动概念。我个人是这一概念的支持者之一,我们的开发活动应该符合这一理念。多年前一些业界前辈引领了一场工匠精神与实用主义的风潮,我从中获益良多。

拥抱日之后的多数主题是可选内容。我会给出一些个人选项,它们符合我所处环境的很多需要,如果读者愿意可以参考。另外再推荐三份重要的资料,肯定会给你们一些启迪:

  • 《程序员的职业素养》,Robert C. Martin 著,和《程序员修炼之道》,Andrew Hunt 与 David Thomas 合著。
  • 《Peopleware: Productive Projects and Teams》,Tom Demarco 和 Tim Lister 合著.
  • 《程序员修炼之道》这一本偏技术方向,但也有关于编程中的实用主义的意义与价值的很好的介绍。
  • 最后别忘了前文提到的 Uncle Bob 的演讲,真的打动人心。

以软件开发者的角色生活并发光发热

那么,看过软件在当今人类生活中的重大意义,明白软件的作用不仅局限于商业领域后,一个新的问题是:招来的这帮新人可谓 21 世纪的令人担忧的一代,那么还需要讲些什么来帮助他们面对充满挑战的职业生涯?

一如我之前所提到的,我会概述我“偏爱”的 7 个重要主题,并在每个主题前给出一些要点和提示。

  1. 我们在软件开发生涯中面临的挑战

    要打动他们,首先你得了解他们!

    于是,我们的第一个主题会列举一系列干扰我们工作的挑战,之后的主题则会研究抵消它们负面影响的策略。这些挑战分别是:

    1. 工作压力。
    2. 软件质量。
    3. 厌倦感。
    4. 脑力合作之谜:脑力工作者很容易反对别人的意见,还可能导致争吵。该怎样用认知工作来解决这一几乎每天都会遇到的问题?就我而言,我认为这是会拖慢团队进程的“摩擦”的源头之一,下面的幻灯片例 1 就此概念阐述了更多内容。

      幻灯片例 1

       

    5. 自我实现谜题:人们辞职的真正原因是什么?为什么相比其他行业,我们对待自己的工作更浮躁不安?

      接下来的主题会讨论面对并超越这些挑战的技巧。

      幻灯片例 2

     

  2. 专业水准的基础

    这个主题具体描绘“成熟”的专业特质,并展示成为受欢迎的内行的好处。主题最后给出规划成功职业生涯的通行模式。上文的幻灯片例 2 描绘了一种成为成熟的专业人员的三层式模型。第二层中的“Values”实际上指的是实用的价值观,我们在工作中需要这些价值观来达到实在、可持续的成功状态。我认为我们需要的关键价值观有:守信、负责、适应并接受他人(团队精神的基础)。接下来是向周围同事表现自己的能力。第三层的“表现能力(presentability)”指的是人们如何感受自己的存在、与他人有效沟通,尤其是表达反对意见的能力。

    幻灯片例 3

     

  3. 理解并克服过重的工作压力

    这里我引入与职业生涯相关的这一概念,讲一些应对它的方法。首先介绍一些“适应”这种压力的方法,之后的一些技巧会帮助我们克服压力,从压力对头脑、身体与心灵的负面影响中恢复过来。实际上,人资团队应该安排传授减压技巧的课程,帮助员工应对压力。就我来说,我会介绍相关的方法并解释为何我们应该花时间了解它们。幻灯片 4 是这一主题的介绍。

    幻灯片例 4

     

  4. 软件质量

    首先,我们要为程序员创造一种与缺陷战斗的文化。我曾使用上面的幻灯片做辅助,用缺陷率指标来解释“接近完美”的含义。“接近完美”指的是应该尽量减少验收问题的数量与影响,且在软件支持周期“终结”之前消灭缺陷以实现稳定的运行。接下来谈谈软件质量的其他知名的属性。这部分内容的剩余部分讲一下解决成本与质量间必然冲突的方法,以及帮助程序员自然地维持高质量输出的一些好习惯。

  5. 协同合作的秘密

    我们应该以能量的视角进行团队合作:团队合作是团队成员、组织甚至客户的能量来源。这一主题旨在重新定义团队合作,将其视为一种途径,使成员在最富挑战的环境中表现、学习、承担压力并产出高质量的成果,同时乐在其中。

  6. 挑战性职业中厌倦感的真相

    如果你像我一样留意过所谓“Y 世代”的概念,你应该会注意到年轻人不愿长时间重复同一种任务。这是不成熟的表现,需要我们及时纠正并解决。怎样在工作中寻找自我实现,是需要组织中团队和领导共同合作解决的问题。这一主题以自我实现的角度告诉开发者,我们的工作与成就价值非凡,应该得到足够的奖励以消除工作中的任何厌倦感。

  7. 编程之谜

    本质上来说,不光是写代码,任何需求注意力的活动,诸如通顺地理解并表达需求、完美的设计、撰写优雅易读的代码、设计完善的测试平台……都有助于开发优秀的软件。这一主题触及了心流的心理层面,并探讨怎样应用心流产出最佳成果。

到这一步,热情洋溢的导师应该已经为真正有需要的年轻人送上了热情的师友拥抱,但他们的感受可能更多是无意识的。应该让新人深深体会到,他们来这里是要开始一项长久的事业,同时身心得到安宁。

重要的是精神

师友拥抱只是个名字。要让活动走上正轨,它需要的是温情和非正式的氛围,而非僵硬的课程形式。我从过往的经验中总结了一些行之有效的技巧:

  • 活动中,应该在房间里放一些零食、咖啡和软饮料提供给大家。讨论时也可以吃点零食。如果活动比较长,还可以准备工作午餐、披萨或一些三明治。
  • 开始一个主题的讨论时先问参与者一些引人深思的问题。比如说问大家关于质量的看法,请他们想一些工作中产生压力的场景,问他们会如何应对,等等。要是主持人能用苏格拉底法(又称诘问法)引导讨论就最好了,这样导师会引导人们领悟真相,而不是自己在那里背书。
  • 可以的话来点幽默。幻灯片中可以插入一些技术漫画增进效果。
  • 以启发式问题的形式做一些小测验,从而引发思考。问题要有趣,不要咄咄逼人。给答对的参与者一些小奖品。当多年后你再碰上某人,她或他拿出当初活动中你奖励的钥匙链时,你就会知道这种做法的确起效了。
  • 表现得像他们的同事,表达对开发者同僚的尊敬,不要强调等级区分。
  • 给大家分发一些纪要,上面列举一些活动中总结的要点。问问他们还想加上些什么,有没有人想为你写的东西补充些内容。

最后,尽可即兴发挥,让大家留下一个热情的第一印象。

可持续的指导

拥抱日只是组织为成员提供的持续服务的开始,这种服务旨在逐渐塑造成员的专业特质。以下要点介绍怎样以服务的形式,基于学员的实际需求和绩效进行持续指导。

  • “指导即服务”(MRaaS)需要中间人提出需要处理的问题。这里中间人主要由领导,尤其是与团队成员直接互动的团队领导来担任。领导的角色不该超越前文所提到的“协调人”范畴。领导与团队成员讨论各种问题,看看大家是否愿意(也可能是需要)将问题纳入指导流程。还有些情况下,需要一对一模式探讨特定问题的学员会直接与导师对接。两种情况我之前都见识并实践过。这里的重点在于将接受服务的学员要有需求服务的自觉,并同意得到服务。领导依旧在导师和团队学员间充当协调人的角色,且做好这一工作即可。
  • 所有人都会遇到的问题可以在组织而非团队层面进行处理。然而当它涉及工作细节的问题时,这种做法并不是最佳选择。“团队被共同召集产生的亲密感”有其难以忽略的价值。组织层面的会议会在其他场景下有更好的表现,之后我会简单提及。
  • 实践中有时爆发的问题,其本质与软件领域关联不大。尤其是软技能方面这种情况很多。这类问题可能需要外部主题专家来进行指导。这类主题与之前的 PRE 中指导与教练部分不同,更近似于“培训”,不会有太多内行人之间的会话。
  • 你可能注意到了,本文多数内容都指向了小组指导而非教练。事实上指导部分依靠教练来寻找有意义的主题,同时教练活动作为一种接近日常进行的领导工作,在之后谈到实施 PRE 的领导层再造与行动部分时会重点介绍。

好了,以上就是组织实践中开始并持续指导的方法。之后就要面对一些难点了。

还有,完全不要悲观!

这又是从何说起?

事实上,当鼓励人们接受指导时,不管是在开始的活动或之后的会议中,通常遇到的首要问题是“工作时间”。不过我个人经验来看,做好以下措施这就不会是个问题:

  • 领导恰当而热心的规划。领导是协调者,他们知道何时才是规划活动的最佳时机。比如说,我会在迎新会上进行师友拥抱活动。有些情况下内容多到一次或一天的活动也讲不完。我们的应对方式是先举办简化的活动,然后一起进行多轮讨论,逐个探讨各个主题的细节。灵活行事!
  • 内部导师的时间安排。组织内部的成员可以成为导师,而热爱这项工作的人会为相关活动空出自己的时间。对经验丰富,足以让新人茁壮成长的前辈来说,这项任务能得到自我实现和满足。

总结

人力再造的第一部分:与服务关联的指导与教练,或称 MRaaS 的内容就此结束。在领导层部分可能更多地介绍教练。在这个知识时代,软件开发实践的价值不断增长,我希望能提供相关的个人经验。请时刻记住不要把指导当作是正式的企业培训。它按需实施、花费不大,在职场中更加生动亲切。

关于作者

Medhat Sabry 是一名软件开发顾问、演讲人和作家,他创建了基于 Web 的 Techstamina,与其他社交媒体和专业网络渠道一起为开发社区发表各种观点。近四十年来,Medhat 一直致力于在软件交付过程的核心领域,对业界发展中出现的挑战保持着良好的关注,这些挑战激发了他的热情,帮助开发人员和公司建立他们的竞争力,以应对今天软件市场日益增长的压力和挑战。

查看英文原文:People Re-Engineering How-To’s: Mentoring As A Service

转自 http://ift.tt/2sp4enD

 

The post 如何进行人力再造:指导即服务 appeared first on Linuxeden开源社区.

http://ift.tt/2rqrK6f

HTTP API 领域在围绕 OAS 进行整合


Linuxeden 开源社区 --

作者 Abel Avram ,译者 张卫滨  

MuleSoft 业已成为 OAI 的成员,并发布了能够同时理解 RAML 和 OAS 的 API 模型框架。Restlet Studio 如今已经支持 RAML。

目前,有三个主要的 HTTP API 规范在竞争:Open API Initiative(OAI)基于 Swagger 所提供的 Open API Specification(OAS)、MuleSoft 作为主要贡献者的 RAML 以及 Apiary 所支持的 API Blueprint,Apiary 公司今年已经被 Oracle 收购。这三个规范都有自己的优点和相关工具,但是在 2015 年 Swagger 托管给 Linux 基金会之后,OAS 获得了社区的主流支持。OAS 从一开始就得到了 3Scale、Apigee、Google、IBM、Microsoft、PayPal 以及其他厂商的支持。

HTTP API 领域在未来将会如何演化尚不明晰,但是最近发生了一些很有意思的事情。其中有一件事就是 MuleSoft 最近宣布 加入 OAI。MuleSoft 的 CTO 同时也是 RAML 的创建者 Uri Sarid 已经开始参与 OAI 技术开发者社区并认为“每个人都应该支持一种通用的格式,它至少要能够描述 API 的 服务模型 ”,这种格式应该是“目前采用最广泛的,即 OpenAPI 规范。”

鉴于 MuleSoft 依然“致力于支持 RAML 倡议及其投资,并且在扩大该生态系统”,我们可以得出结论,Sarid 在 OAI TC 的主要目的是推动 OAS 的开发采纳 RAML 目前已经支持的一些特性:API 建模、支持模块以及分离 API 协议的关注点。至于 OAI TC 会从 RAML 上借鉴多少内容尚有待观察。为此,MuleSoft 已经开源了 API 建模框架 ,这是一种与 API 交互的方式,还包含对 API 的建模,以及随后生成 RAML 或 OAS 文档。实际上,我们可以将 RAML 定义的 API,对其进行解析并生成相应的 OAS 文件。

MuleSoft 的 API 建模框架依然是“alpha”和“实验性”阶段,Restlet 是 OAI 的初始成员之一,最近又加入了 RAML 工作组,发布了新版本的 Studio,能够同时支持 OAS 和 RAML。Restlet 的创始人 Jerome Louvel阐述了 RAML 对 OAS 的影响:

与其让这三种方案进行直接的竞争,我们还是希望其中有一个能够获胜,取代另外的两个,有必要也有可能采用一种更好的演化路径。这个过程中的主要参与者和构建工具,比如 Restlet Studio,同时支持 OAS 和 RAML,并且会倾听用户的需求,我意识到理想状况是让 Apiary 和 MuleSoft 加入 Open API Initiative,并逐渐做出贡献,使其变得收敛,而不一定要将这三个规范合并在一起…

在即将发布的 OAS 3.0 之上,我设想未来的 RAML 释放版本会扩展 OAS 规范,以捕获目前通过 RAML 1.0 表述的 API 建模信息。它将会让 OAS 核心更加简单和专注,同时还能够让 API 建模工具之间实现更好的交互,有助于保护 API 团队在设计之时所做的投资。Restlet 是 OAI 的创始成员,最近又加入了 RAML 工作组,我希望能够直接为这些目标作出贡献。

确实,Apiary 去年加入了 OAI,并且 为他们的工具添加了对 Swagger 的支持 。HTTP API 领域似乎正在围绕 OAS 进行整合。这意味着将来会有一个 API 规范,用户创建互操作的 API 会更加容易。至于 RAML 和 API Blueprint 会对 OAS 带来多大的影响,尚有待观察。

查看英文原文:The HTTP API Space is Consolidating around OAS

The post HTTP API 领域在围绕 OAS 进行整合 appeared first on Linuxeden开源社区.

http://ift.tt/2rqEGZX

时序数据库深入浅出之存储篇


Linuxeden 开源社区 --

作者 百度云时序数据库资深工程师

2017 年时序数据库忽然火了起来。开年 2 月 Facebook 开源了 beringei 时序数据库;到了 4 月基于 PostgreSQL 打造的时序数据库 TimeScaleDB 也开源了,而早在 2016 年 7 月,百度云在其天工物联网平台上发布了国内首个多租户的分布式时序数据库产品 TSDB,成为支持其发展制造,交通,能源,智慧城市等产业领域的核心产品,同时也成为百度战略发展产业物联网的标志性事件。时序数据库作为物联网方向一个非常重要的服务,业界的频频发声,正说明各家企业已经迫不及待的拥抱物联网时代的到来。

本文会从时序数据库的基本概念、使用场景、解决的问题一一展开,最后会从如何解决时序数据存储这一技术问题入手进行深入分析。

1. 背景

百度无人车在运行时需要监控各种状态,包括坐标,速度,方向,温度,湿度等等,并且需要把每时每刻监控的数据记录下来,用来做大数据分析。每辆车每天就会采集将近 8T 的数据。如果只是存储下来不查询也还好(虽然已经是不小的成本),但如果需要快速查询“今天下午两点在后厂村路,速度超过 60km/h 的无人车有哪些”这样的多纬度分组聚合查询,那么时序数据库会是一个很好的选择。

2. 什么是时序数据库

先来介绍什么是时序数据。时序数据是基于时间的一系列的数据。在有时间的坐标中将这些数据点连成线,往过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性;往未来看可以做大数据分析,机器学习,实现预测和预警。

时序数据库就是存放时序数据的数据库,并且需要支持时序数据的快速写入、持久化、多纬度的聚合查询等基本功能。

对比传统数据库仅仅记录了数据的当前值,时序数据库则记录了所有的历史数据。同时时序数据的查询也总是会带上时间作为过滤条件。

p1- 北上广三地 2015 年气温变化图

p2- 北上广三地当前温度实时展现

下面介绍下时序数据库的一些基本概念(不同的时序数据库称呼略有不同)。

metric: 度量,相当于关系型数据库中的 table。

data point: 数据点,相当于关系型数据库中的 row。

timestamp:时间戳,代表数据点产生的时间。

field: 度量下的不同字段。比如位置这个度量具有经度和纬度两个 field。一般情况下存放的是会随着时间戳的变化而变化的数据。

tag: 标签,或者附加信息。一般存放的是并不随着时间戳变化的属性信息。timestamp 加上所有的 tags 可以认为是 table 的 primary key。

如下图,度量为 Wind,每一个数据点都具有一个 timestamp,两个 field:direction 和 speed,两个 tag:sensor、city。它的第一行和第三行,存放的都是 sensor 号码为 95D8-7913 的设备,属性城市是上海。随着时间的变化,风向和风速都发生了改变,风向从 23.4 变成 23.2;而风速从 3.4 变成了 3.3。

p3- 时序数据库基本概念图

3. 时序数据库的场景

所有有时序数据产生,并且需要展现其历史趋势、周期规律、异常性的,进一步对未来做出预测分析的,都是时序数据库适合的场景。

在工业物联网环境监控方向,百度天工的客户就遇到了这么一个难题,由于工业上面的要求,需要将工况数据存储起来。客户每个厂区具有 20000 个监测点,500 毫秒一个采集周期,一共 20 个厂区。这样算起来一年将产生惊人的 26 万亿个数据点。假设每个点 50Byte,数据总量将达 1P(如果每台服务器 10T 的硬盘,那么总共需要 100 多台服务器)。这些数据不只是要实时生成,写入存储;还要支持快速查询,做可视化的展示,帮助管理者分析决策;并且也能够用来做大数据分析,发现深层次的问题,帮助企业节能减排,增加效益。最终客户采用了百度天工的时序数据库方案,帮助他解决了难题。

在互联网场景中,也有大量的时序数据产生。百度内部有大量服务使用天工物联网平台的时序数据库。举个例子,百度内部服务为了保障用户的使用体验,将用户的每次网络卡顿、网络延迟都会记录到百度天工的时序数据库。由时序数据库直接生成报表以供技术产品做分析,尽早的发现、解决问题,保证用户的使用体验。

4. 时序数据库遇到的挑战

很多人可能认为在传统关系型数据库上加上时间戳一列就能作为时序数据库。数据量少的时候确实也没问题,但少量数据是展现的纬度有限,细节少,可置信低,更加不能用来做大数据分析。很明显时序数据库是为了解决海量数据场景而设计的。

可以看到时序数据库需要解决以下几个问题

  • 时序数据的写入 :如何支持每秒钟上千万上亿数据点的写入。
  • 时序数据的读取 :又如何支持在秒级对上亿数据的分组聚合运算。
  • 成本敏感 :由海量数据存储带来的是成本问题。如何更低成本的存储这些数据,将成为时序数据库需要解决的重中之重。

这些问题不是用一篇文章就能涵盖的,同时每个问题都可以从多个角度去优化解决。在这里只从数据存储这个角度来尝试回答如何解决大数据量的写入和读取。

5. 数据的存储

数据的存储可以分为两个问题,单机上存储和分布式存储。

单机存储

如果只是存储起来,直接写成日志就行。但因为后续还要快速的查询,所以需要考虑存储的结构。

传统数据库存储采用的都是 B tree,这是由于其在查询和顺序插入时有利于减少寻道次数的组织形式。我们知道磁盘寻道时间是非常慢的,一般在 10ms 左右。磁盘的随机读写慢就慢在寻道上面。对于随机写入 B tree 会消耗大量的时间在磁盘寻道上,导致速度很慢。我们知道 SSD 具有更快的寻道时间,但并没有从根本上解决这个问题。

对于 90% 以上场景都是写入的时序数据库,B tree 很明显是不合适的。

业界主流都是采用 LSM tree 替换 B tree,比如 Hbase, Cassandra 等 nosql 中。这里我们详细介绍一下。

LSM tree 包括内存里的数据结构和磁盘上的文件两部分。分别对应 Hbase 里的 MemStore 和 HLog;对应 Cassandra 里的 MemTable 和 sstable。

LSM tree 操作流程如下:

  1. 数据写入和更新时首先写入位于内存里的数据结构。为了避免数据丢失也会先写到 WAL 文件中。
  2. 内存里的数据结构会定时或者达到固定大小会刷到磁盘。这些磁盘上的文件不会被修改。
  3. 随着磁盘上积累的文件越来越多,会定时的进行合并操作,消除冗余数据,减少文件数量。

p4-Hbase LSM tree 结构介绍(注 1)

可以看到 LSM tree 核心思想就是通过内存写和后续磁盘的顺序写入获得更高的写入性能,避免了随机写入。但同时也牺牲了读取性能,因为同一个 key 的值可能存在于多个 HFile 中。为了获取更好的读取性能,可以通过 bloom filter 和 compaction 得到,这里限于篇幅就不详细展开。

分布式存储

时序数据库面向的是海量数据的写入存储读取,单机是无法解决问题的。所以需要采用多机存储,也就是分布式存储。

分布式存储首先要考虑的是如何将数据分布到多台机器上面,也就是 分片(sharding)问题。下面我们就时序数据库分片问题展开介绍。分片问题由分片方法的选择和分片的设计组成。

分片方法

时序数据库的分片方法和其他分布式系统是相通的。

哈希分片 :这种方法实现简单,均衡性较好,但是集群不易扩展。

一致性哈希 :这种方案均衡性好,集群扩展容易,只是实现复杂。代表有 Amazon 的 DynamoDB 和开源的 Cassandra。

范围划分 :通常配合全局有序,复杂度在于合并和分裂。代表有 Hbase。

分片设计

分片设计简单来说就是以什么做分片,这是非常有技巧的,会直接影响写入读取的性能。

结合时序数据库的特点,根据 metric+tags 分片是比较好的一种方式,因为往往会按照一个时间范围查询,这样相同 metric 和 tags 的数据会分配到一台机器上连续存放,顺序的磁盘读取是很快的。再结合上面讲到的单机存储内容,可以做到快速查询。

进一步我们考虑时序数据时间范围很长的情况,需要根据时间范围再将分成几段,分别存储到不同的机器上,这样对于大范围时序数据就可以支持并发查询,优化查询速度。

如下图,第一行和第三行都是同样的 tag(sensor=95D8-7913;city= 上海),所以分配到同样的分片,而第五行虽然也是同样的 tag,但是根据时间范围再分段,被分到了不同的分片。第二、四、六行属于同样的 tag(sensor=F3CC-20F3;city= 北京)也是一样的道理。

p5- 时序数据分片说明

6. 真实案例

下面我以一批开源时序数据库作为说明。

InfluxDB:

非常优秀的时序数据库,但只有单机版是免费开源的,集群版本是要收费的。从单机版本中可以一窥其存储方案:在单机上 InfluxDB 采取类似于 LSM tree 的存储结构 TSM;而分片的方案 InfluxDB 先通过+(事实上还要加上 retentionPolicy)确定 ShardGroup,再通过+的 hash code 确定到具体的 Shard。

这里 timestamp 默认情况下是 7 天对齐,也就是说 7 天的时序数据会在一个 Shard 中。

p6-Influxdb TSM 结构图(注 2)

Kairosdb:

底层使用 Cassandra 作为分布式存储引擎,如上文提到单机上采用的是 LSM tree。

Cassandra 有两级索引:partition key 和 clustering key。其中 partition key 是其分片 ID,使用的是一致性哈希;而 clustering key 在一个 partition key 中保证有序。

Kairosdb 利用 Cassandra 的特性,将++< 数据类型>+作为 partition key,数据点时间在 timestamp 上的偏移作为 clustering key,其有序性方便做基于时间范围的查询。

partition key 中的 timestamp 是 3 周对齐的,也就是说 21 天的时序数据会在一个 clustering key 下。3 周的毫秒数是 18 亿正好小于 Cassandra 每行列数 20 亿的限制。

OpenTsdb:

底层使用 Hbase 作为其分布式存储引擎,采用的也是 LSM tree。

Hbase 采用范围划分的分片方式。使用 row key 做分片,保证其全局有序。每个 row key 下可以有多个 column family。每个 column family 下可以有多个 column。

上图是 OpenTsdb 的 row key 组织方式。不同于别的时序数据库,由于 Hbase 的 row key 全局有序,所以增加了可选的 salt 以达到更好的数据分布,避免热点产生。再由与 timestamp 间的偏移和数据类型组成 column qualifier。

他的 timestamp 是小时对齐的,也就是说一个 row key 下最多存储一个小时的数据。并且需要将构成 row key 的 metric 和 tags 都转成对应的 uid 来减少存储空间,避免 Hfile 索引太大。下图是真实的 row key 示例。

p7-open tsdb 的 row key 示例(注 3)

7. 结束语

可以看到各分布式时序数据库虽然存储方案都略有不同,但本质上是一致的,由于时序数据写多读少的场景,在单机上采用更加适合大吞吐量写入的单机存储结构,而在分布式方案上根据时序数据的特点来精心设计,目标就是设计的分片方案能方便时序数据的写入和读取,同时使数据分布更加均匀,尽量避免热点的产生。

数据存储是时序数据库设计中很小的一块内容,但也能管中窥豹,看到时序数据库从设计之初就要考虑时序数据的特点。后续我们会从其他的角度进行讨论。

转自 http://ift.tt/2sp22fD

 

The post 时序数据库深入浅出之存储篇 appeared first on Linuxeden开源社区.

http://ift.tt/2rqXHLF

一位五年工作经验架构师的感悟


Linuxeden 开源社区 --

架构师的成长之路是怎样的呢,请看看五年陈架构师写的感悟吧。

写给五年陈的自己

写周报,写的兴起,编写周报,还边用虎跑泉,泡铁观音喝。自己写周报的**惯还是要改一改,自己是个性情中人,写个周报也透露了太多情感在周报里。有很多人肯定觉得不好,也许以后我也会改,改的越来越干练,掏心的话少说。

兴奋了,喝了茶,睡不着了。灵感闪动,本周是个值得纪念的日子,写个文章纪念下过去。

回想这一路路走来,还是很感恩收获的一切,我渐渐从一名菜鸟,成长为一位架构师,记得毕业的时候我给自己定的目标是:五年要成为一方面的专家。虽然,实际的成长比这个慢了两年,但是我还是庆幸自己当初果断的裸辞,然后进入支付宝。

每个架构师都是独立无二的,每个架构师都应该有自己的情怀,这些情怀是你的世界观。

我是如何成长为一个架构师的,我姑且给自己定的 title 就是架构师,不要认为有架构师的 title 就很牛 B 的,人外有人,天外有天,做好自己。五年陈留给自己的话:不忘初心,方得始终,未来已来,星辰大海。路就在前方,继续前行。

每个人的成长之路也不一样,我来回想下自己的。

不为过去蹉跎,珍惜当下

很多在菜鸟的时候,肯定或多或少,有过对身边的牛人,报以羡慕的眼光。

当看着别人职位比你高,

当看着别人比你工资领的高,

当看到别人年纪轻轻,就已经是牛逼哄哄。

你会不会有羡慕嫉妒恨的想法:

要是我当年读书的时候,不打游戏,少吃点红瓶、蓝瓶,少放几个水元素,少放几个暴风之锤(寒冰王座)。那么我肯定可以学到更多。

要是我当年不睡懒觉,起早贪黑,去学**,那么我肯定是也会学到很多。

要是。。。

理由从来不嫌多,我自己肯定也有这些想法,平心而论,我现在也有这些想法。但是负能量不能盖过正能量。

不要为过去而蹉跎;不要羡慕别人现在的生活;不要羡慕陈冠希,长得帅,女朋友交的多。你明明没有别人找的帅,不努力,你就是天天守着电脑看看片。说不定那天你去创个业,成功了,然后的然后,你想想然后的然后。。。

所以,不为过去蹉跎,活在当下,把握当下。

找到你的追求,然后就去追求

首先,我这里没有使用信念。信念,可能太重了。尤其对于中国人而言,信仰普遍都是缺失的,很难一直相信、坚信一件事。

第二,很多人,不知道自己想要什么,想去追求什么。所以一直不知道,该怎么去改变,该怎么去追求。

我是为了追求钱?

其实我不追求钱,当然我不是圣人,我家里不富裕,就是从农村出来的,我结婚的时候没有自己的房子(谢谢妻子),我还有很多东西没有买。我需要钱,但是不是为了钱而工作,工作这么多年,没有询问过加薪,没有为了加薪而跳槽(当然现在的公司对我们还是很不错)。

钱,对于我而言,就是想买个安心。我用它来让父母对我的未来安心;让妻子对于未来充满信心(虽然她现在还不算很安心);让整个家庭有一定的风险抵抗能力。

安心以后,就是上路。

我记得第一段工作,是在恒生。我当时在恒生银行事业部,工作一年后,我发现自己进步很慢,在技术体系没有任何进展,公司的技术体系很旧,而且基本不进化。我自己做了一个技术的演进,使用了一种新的方式提升了平台的整体能力(当年还没有平台能力这些体系思路)。然后还期待年底被表彰下,技术人也是虚荣的,呵呵,就是期望可以带来成就感。

做着做着,发现没有人可以帮助我提升,虽然当时我很弱,我的学**思路也不清晰。平时就是逛逛网站,学**的很肤浅。但是,我内心感受到:如果要是这样待下去,肯定废了,几年之后,还是同样的眼光羡慕别人。

于是在工作一年半的时候,选着了裸辞,其实还是很佩服自己,因为多数人都是骑驴找马。多数时候是招聘 3、5、8 年经验的人。但是,当你顾虑越多的时候,越容易失败。

所以,找到你的追求,然后就去追去。

失败不可怕,需要对自己、未来充满信心

当时的我真的很弱,但是我就是想找个地方提升自己的技术,提升自己的价值。

刚好有个朋友是阿里 B2B 的,当时也没有太多关注阿里,也不知道阿里到底有哪些子公司。但是,我的朋友,热心的说:“要不要我帮你内推试试?”,我就是抱着试一试的心态,想去尝试下,知道阿里的技术强,但是到不到阿里的要求。

于是开启了我奇葩的入职阿里经历。

第一次面试,阿里 B2B 的岗位,就有很多知识不知道,面试官问了一致性 hash,那个年代的我,哪里知道。不过面试官还是和我聊了一个小时。但是我的水平有限,结果可想而知。我肯定也知道没过,然后我就请教面试官,需要提升的地方,学**哪方面的内容。

于是我去学**,一个月过去了。

第二次面试,也是阿里 B2B 的岗位,我不知道那个时候有没有招聘的公海,按照我的理解是没有的,然后我肯定不会有这么多次机会。这次的面试和上次很像,只不过内容换成了多线程并发相关的知识。我又不知道,面试官还是很容忍我,最后没通过,我同样为了需要什么提高。

于是我去学**,一个月又过去了。

第三次面试,是淘宝,应该是广告部门。这次面试,我觉得除了不知道的内容,其他的内容都还回答的蛮正确的。但是面试官,拿着面试题就和我聊了,然后讲到一个数据库方面的知识时(内连接,外连接),我说不知道。面试官说:这么基础的问题你都不会,这是不能容忍的,其实当时很伤心。有可能他们对数据库要求很高吧。但是,我耿耿于怀的是:每个人也许都有些盲点,也许不能以这些盲点去评判一个人。而且,可能还有更好的方式,如何去指一个方向,让被人对你感激,感恩。我这些年也参加了些面试,面对一些面试者,即使不通过,我也会善意的去提示下。

于是我又回去了,学了些啥,我不知道了。

第四次面试,是支付宝。当时是一个女的领我进门的,我以为是 HR,两个人坐着有点尴尬,然后这个“HR”就开始问问题,你讲下 spring 吧。然后我内心当时就震惊了:都知道阿里技术好,但是 HR 都会技术,太夸张了吧。面试过程还好,我讲了在第一个公司做的一个技术创新。

第一轮通过了,好激动,第一次过第一轮。

而后,马上第二轮,进来个光头,光头看了下面试题,然后就问了一个技术问题:” 什么是架构”,虽然当时听过架构,但是按照我当时的理解,说不清这个概念,我现在也不一定说清这个概念。第二个问题就是:你愿意做外包么?我回答不愿意。

最后女 HR 和光头说,你等一等,我们合计合计。合计的结果就是,我进来了,进来的不容易。可能还多亏当年扩招。现在我们面试的时候,我们也经常说:要是按照现在的面试要求,那么我肯定进不来。

这就是一段比较有意思的经历,当我妻子比较犹豫的时候,经常对妻子讲:日子总是越来越好。我的经历也可以看出很多。

所以,失败不可怕,需要最自己、未来充满信息。努力去学**。

脚踏实地,如饥似渴,积少成多

于是进入了支付宝,支付宝好复杂。有很多东西给我学。

光头老大给有次问我:你的学**计划是什么呢?

我说:我要把支付宝的所有框架,业务都学**一遍(真不知天高地厚)

老大说:你学的完吗?

我说:我看了下确实很多,有 100 多个系统,很多业务概念。

老大说:不要好高骛远,我建议你结合当前的工作,一步步学**,以点带面。

刚进公司的时候,我不是很有自信,因为知道自己技术可能比很多大牛差距很大。同时,自己也是一个不太会表达的人(原来的老大也说过,我的软能力不行),整体上在初期感觉相对较闷。

日常工作就会把自己占得很满,怎么去学**?我的技术不行,就想去学代码,框架,支付宝的代码全部是开源的,所以我可以很简单通过 eclipse 直接查看框架的源码,渐渐的,比很多人都了解框架,了解技术。我还会去狂公司的论坛,公司的 doc,这上面有框架设计相关的内容。所以,很多时候机会是很多的,关键是你想不想去去。

所以,不要好高骛远,脚踏实地,时刻保持饥饿感,积少成多。

开放心态,视野决定格局

12 年妻子怀孕,于是转岗回了成都,成都是个远离核心的待发展的技术部,当时人就 20,30 号人吧。

回去后,由于原来是在杭州负责核心 A1 系统,大家都还挺羡慕,都还挺给面子的。所以,变得越来越自信。

当你自信后,同样你会越来越勇敢,越来越开放。当时,也看了些敏捷的书,虽然从来没有完整的看完一本敏捷的书,现在我对敏捷也是半懂不懂,依然很讨厌职业的咨询师,喊喊口号,比如 TDD,说实话,我就很难看到 TDD 的模式,在如此复杂的业务系统成功过。

当时对于敏捷最深刻的一点就是:反馈环。怎么去利用反馈坏不断是提升自己,自己缩短反馈坏,让自己成长的更快。

回成都后,我变得更为开放,这种开放,让我收获更多,在交流,不断的学**中,成长更快。从一个基本是完成任务型的技术人员,渐渐去思考更全局,更开放性的内容。

成都远离核心,生存不易,这些经历同样丰富了我,内心也变得越来越强大。这些年影响我最大的一些思想有:

1、不要给自己设限:不在把自己禁锢在舒适区,不要怕前面有挡着你的人

2、缩小自己的反馈环:

3、不断以小的正能量,不断积累成就感。

4、不要怕做决定:错误的决定,比没有决定好。

渐渐地,我从不说的人,变成了比较能说的人,能说可能还不是会说。会说更考验技巧,情商。

渐渐地,周围的人又说我是段子手。

渐渐地,变成了一个经常黑人的人。哈哈。

不断去思考,总结,提炼做事模式,思考方式,这些方式可以指导你持续成功。

视野,越大,收获越多,站在全局去看问题,这也是一个架构师需要的。

所以,保持开放心态,视野决定格局,格局改变命运。

写在最后

如果大家能看到最后,首先谢谢。

有的人要骂:标题就是唬人的,一点都没有讲技术。

架构无处不在,你怎么架构自己的未来。

感谢这些年帮助我的人。

稿源: 技术之家

The post 一位五年工作经验架构师的感悟 appeared first on Linuxeden开源社区.

http://ift.tt/2sfN7VJ

Ant Design 2.10.3 和 2.10.4,阿里企业级 UI 设计语言


Linuxeden 开源社区 --Ant Design
Ant Design

Ant Design 2.10.3 和 2.10.4 已发布,Ant Design 是蚂蚁金服开发和正在使用的一套企业级的 UI 设计语言和 React 实现。

本次更新如下:

2.10.3

  • Calendar
    • 修复了样式问题以支持 disabledDate,补充了 Type 定义及文档。#6074
    • rc-calendar 依赖升级至 8.4.0,支持保加利亚语,支持首先选择结束日期。commit/a4a6db
  • Alert 去掉了默认的下边距。commit/5ef482
  • Tabs 修复了隐藏标签下内容的表现问题。#6237
  • Layout 修复了折叠侧边栏中的内容不能自动隐藏的问题。#6131
  • Table 修复了 filter 被 Table 截断的问题。#6245
  • InputNumber 修复了配置 hasFeedback 时校验结果图标位置有误的问题。#6289
  • Typescript

下载地址

2.10.4

下载地址

转自 http://ift.tt/2sfnGUn

The post Ant Design 2.10.3 和 2.10.4,阿里企业级 UI 设计语言 appeared first on Linuxeden开源社区.

http://ift.tt/2rGeBXC

Bodhi Linux 4.2.0 发布,基于 Ubuntu 的发行


Linuxeden 开源社区 --Bodhi Linux
Bodhi Linux

Bodhi Linux 4.2.0 发布了,新版本是 Bodhi Linux 的一个小更新版本,使用 4.1.0 的用户不需要通过新的安装介质进行升级。

4.2.0 中的重要变化之一是放弃支持 32 位 PAE 的安装介质。

较旧的 32 位计算机仍然被 Bodhi 的 Legacy 版本支持。

这是放弃 32 位 PAE 光盘的第一个版本,要注意的是,官方仍然支持 32 位计算机,但如果需要安装 32 位版本的 Bodhi Linux,唯一的版本是 Legacy ISO 镜像。Legacy 镜像将适用于 PAE 和 非 PAE 的 32 位硬件,如果您的计算机需要 PAE 内核来利用其所有内存,您最好使用 64 位操作系统。如果确实需要在 32 位的 Bodhi 操作系统中使用 PAE 内核,可以安装 Legacy 版本,然后再更改内核。

发布公告 有更多的细节。

Download (pkglist):

转自 http://ift.tt/2qBYxWU

The post Bodhi Linux 4.2.0 发布,基于 Ubuntu 的发行 appeared first on Linuxeden开源社区.

http://ift.tt/2rlPUwR

RubyMine 2017.2 EAP 2:Ruby 的面包屑功能


Linuxeden 开源社区 --RubyMine
RubyMine

RubyMine 2017.2 EAP 2 (build) 现在发布。在之前的 EAP 中,您可能已经注意到了为 XML 和 HTML 面包屑所做的新设计。这个更新还为 Ruby 中的结构元素带来了面包屑功能:

要打开面包屑,只需右键单击编辑器左侧(或底部)的窗格,选择“Breadcrumbs”,然后将其附加到编辑器的顶部或底部。您还可以使用 Go to  操作来切换面包屑,或者在设置(Preferences / Settings | Editor | General |Breadcrumbs)中找到它。

当前的实现可显示以下结构元素:

  • Modules, classes and singleton classes
  • Methods
  • Blocks (both braced and do-end)
  • Lambdas
  • Custom names for RSpec groups and examples

对于其他改进,此更新还修复了以前的 EAP 构建中发现的一些小问题。

下载地址发布主页

有关改进的完整列表,请参阅 发行说明

转自 http://ift.tt/2qCgBQM

The post RubyMine 2017.2 EAP 2:Ruby 的面包屑功能 appeared first on Linuxeden开源社区.

http://ift.tt/2rm5AjI

DBeaver 4.0.8 发布,数据库管理工具


Linuxeden 开源社区 --DBeaver
DBeaver

DBeaver 4.0.8 发布了,本次更新值得关注的是在 MySQL 中,添加了对 JSON 数据类型的支持。

更新列表如下:

  • 结果查看器已添加自动刷新功能
  • 修复结果查看器过滤器设置对话框 wqas 的问题
  • Shell 命令配置已增强
  • Session/Locks 编辑器激活已修复
  • SSH 身份验证已修复(私钥无密码)
  • SQL 完成处理器的性能已修复(大量的对象)
  • SQL 参数绑定已改进(空值被评估为 NULL)
  • 项目创建向导已修复
  • 结果编辑:高级粘贴支持多行插入
  • SQL 执行时间格式已修复
  • 元数据更改在事务中执行
  • Oracle:表触发器元数据读取已修复
  • Oracle:在编译之前保存对象
  • Oracle 表 DDL 现在包括注释
  • MySQL:添加了 JSON 数据类型支持
  • SQL 字符串转义已修复(MySQL)

发布主页和更新内容

下载地址:

转自 http://ift.tt/2rm9YiJ

The post DBeaver 4.0.8 发布,数据库管理工具 appeared first on Linuxeden开源社区.

http://ift.tt/2qCqaPu

Framework7 v1.6.3 和 v1.6.4 发布,HTML 移动端框架


Linuxeden 开源社区 --Framework7
Framework7

Framework7 v1.6.3 和 v1.6.4 发布了,Framework7 是免费开源的 HTML 移动端框架,用来开发混合移动端应用或者 iOS 7 的 Web 应用,并且带有 iOS 7 的原生外观和感觉。Framework7 也是独立的原型应用工具。

更新如下:

Framework7 v1.6.4 – Updated on May 31, 2017

  • 修复了在使用 bundler 时丢失了 Dom7 和 Template7 的问题

Framework7 v1.6.3 – Updated on May 30, 2017

  • Dom7
    • 添加了缺少的快捷方式 click blur focus focusin focusout keyup keydown keypress submit change mousedown mousemove mouseup mouseenter mouseleave mouseout mouseover touchstart touchend touchmove resize scroll

完整更新内容

下载地址

1.6.4

1.6.3

转自 http://ift.tt/2rlEKb7

The post Framework7 v1.6.3 和 v1.6.4 发布,HTML 移动端框架 appeared first on Linuxeden开源社区.

http://ift.tt/2qCpObF

Ember.js 2.13.3 发布,JavaScript MVC 框架


Linuxeden 开源社区 --Ember.js
Ember.js

Ember.js 2.13.3 发布了,Ember.js 是一个用于创建 web 应用的 JavaScript MVC 框架,采用基于字符串的 Handlebars 模板,支持双向绑定、观察者模式、计算属性(依赖其他属性动态变化)、自动更新模板、路由控制、状态机等。

本次更新内容如下:

2.13.3 (May 31, 2017)

完整更新内容

下载地址

转自 http://ift.tt/2rlRjmQ

The post Ember.js 2.13.3 发布,JavaScript MVC 框架 appeared first on Linuxeden开源社区.

http://ift.tt/2qCpNED

每日文章精选 2017 05 31