News stories from Friday 24 March, 2017

Favicon for 小众软件 - Appinn 09:15 Mcool – 做最简单的 Android 音乐播放器 » Post from 小众软件 - Appinn Visit off-site link

Mcool 之前是一款 Windows 下的极简风格音乐播放器,无按钮、无边框,完全嵌入桌面。最近终于发布了 Android 版本,依旧要做一个最简单的音乐播放器,开源。@Appinn

「Mcool 安卓的定位就是“没有界面,只有音乐”」

上图就是播放界面了,会自动获取封面和歌词,播放控制按钮在下方的 PREV、PAUS、NEXT 几个按键。

列表界面简单的有点简陋。不过对于一款不要界面的应用来说,倒也无妨。

特性:

  • 极简主义,“没有界面,只有音乐”。
  • 专为本地无损音乐播放优化。支持歌词/封面同步下载显示。
  • 采用 Bass 库,提供极佳音质和强大扩展能力。
  • 免费,开源软件(Delphi, MIT协议)。运行环境:安卓 2.3 – 7,中文 / English / Unicode
  • 从有损到无损音乐全格式:APE / FLAC / WavPack / MP3 / OGG / TTA / DSD / Opus / Musepack / AAC / ALAC / Wav / Aiff / MOD / CUE

Mcool 官网有时候 Android 低版本的安装包,普通版本适合 Android 4.0+

以及,可以在 Mcool 论坛 参与反馈,开发者 @diystar 在那里。


相关阅读


©2017 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南 | 反馈 | 代理(优惠码 Appinn)
b27c41ad47c2611d60d7452a4c02dd52
Site Meter

apppackge:

Favicon for 开源中国社区最新新闻 08:22 4月15-16日,武汉、长沙源创会报名正式启动! » Post from 开源中国社区最新新闻 Visit off-site link

听说四月樱花开,结束深圳大本营,源创会将再次来到武汉和长沙,秉承“自由、开放、分享”的开源精神,邀各位在花开的季节来一场线下面基。

4月15日武汉源创会报名及详情请点击https://www.oschina.net/event/2235307

4月16日长沙源创会报名及详情请点击:https://www.oschina.net/event/2235322

2017年源创会全面计划看这里:https://www.oschina.net/news/79275/osc-2017-yuanchuanghui-plan

075545_PWnm_2903254.png

一、4月15日武汉源创会主题

1.Apache Kylin 2.0 之Spark构建引擎

主题简介:作为领先的大数据OLAP分析平台,Apache Kylin 正在步入2.0时代:从星型模型到雪花模型的转变、更加全面的SQL语法、TPC-H 的支持、更加先进的构建引擎Spark Cubing、更好地支持实时流式数据接入等等。Apache Kylin正逐渐从Hadoop上的传统OLAP演变为一个实时数据仓库。尤其是新引入的Spark Cubing构建引擎,大幅度提升了Cube预计算过程的效率。本次演讲将结合实际案例,重点介绍这一技术的设计思考和最佳实践。

分享嘉宾:李栋,Kyligence技术合伙人兼高级软件架构师,Apache Kylin Committer & PMC Member,专注于大数据技术研发,KyBot技术负责人。毕业于上海交通大学计算机系;曾任eBay全球分析基础架构部高级工程师、微软云计算和企业产品部软件开发工程师;曾是微软商业产品Dynamics亚太团队核心成员,参与开发了新一代基于云端的ERP解决方案。

2.Linux桌面操作系统是怎样实现的?

主题简介:Unix 和 XFreeDesktop 相关的知识已经随着老一代Linux黑客销声匿迹,希望通过剖析深度桌面环境的技术架构来给各位同学普及一下 Linux 桌面操作系统的实现原理。

分享嘉宾:王勇,Deepin操作系统的研发负责人和第一个码农,上班主职产品经理(开发痛恨的产品狗)和编写各项目产品需求文档,下班为了爱好敲代码造轮子, 平常兼职对销售做技术支持和各地旅游。 Emacs中国区的狂热开发者、Gtk2hs核心开发者、Haskell和函数式语言开源贡献者、对图形研究比较深入, 擅长于用 xcb、cairo、gtk、qt编写各种图形化程序。

3.Caas与Iaas网络融合实践

主题简介:Caas作为云服务的新兵,通常情况下都是构建在Iaas之上的。常见的场景就是在OpenStack上部署Caas,OpenStack本身拥有自己的SDN,Caas也具有一定SDN的能力,两层的SDN可能会导致相互掣肘,本议题关注在如何提升这种场景下的Caas网络性能。

分享嘉宾:张智博,Rancher Labs资深软件工程师。昵称牛小腩,初出茅庐在阿里巴巴口碑网,参与本地搜索业务研发工作;后联合创办美食点评社区“美食行”,之后长期从事云计算研发工作。Rancher中国社区布道师,MBH树莓派社区成员,OpenStack中国社区长期作者。

4.EasyApp——安卓开发效率改进新思路?

主题简介:本主题以EasyApp为主要例子,分享中小型安卓App开发过程中经历的痛点和解决方案,以及如何通过转变思维方式来改进开发效率。

分享嘉宾:霍启圣 斗鱼移动端安卓创新组主管,EasyApp开源项目发起人,九年互联网从业经历,曾担任DotA汉化组组长、供职于斗鱼,对安卓、React/React Native、WP开发有着丰富的经验积累和技术成果。

#放码过来#2017年源创会新增环节,个人或团队如有优秀开源项目,请发送站内私信到@凝小紫 报名,通过筛选的项目即可在源创会现场上台展示个人项目,更有机会获得开源中国社区码云项目推荐,甚至登上码云周刊的机会,只要你有料,就尽管放码过来!

075720_axyz_2903254.png

二、4月16日长沙源创会主题

1.Apache Kylin 2.0 之Spark构建引擎

主题简介:作为领先的大数据OLAP分析平台,Apache Kylin 正在步入2.0时代:从星型模型到雪花模型的转变、更加全面的SQL语法、TPC-H 的支持、更加先进的构建引擎Spark Cubing、更好地支持实时流式数据接入等等。Apache Kylin正逐渐从Hadoop上的传统OLAP演变为一个实时数据仓库。尤其是新引入的Spark Cubing构建引擎,大幅度提升了Cube预计算过程的效率。本次演讲将结合实际案例,重点介绍这一技术的设计思考和最佳实践。

分享嘉宾:李栋,Kyligence技术合伙人兼高级软件架构师,Apache Kylin Committer & PMC Member,专注于大数据技术研发,KyBot技术负责人。毕业于上海交通大学计算机系;曾任eBay全球分析基础架构部高级工程师、微软云计算和企业产品部软件开发工程师;曾是微软商业产品Dynamics亚太团队核心成员,参与开发了新一代基于云端的ERP解决方案。

2.一个超大规模的搜索引擎背后的故事

主题简介:我们是如何一步一步对分布式索引进行扩容和性能优化的。也许,你可以根据这次技术交流,打造出自己的Google搜索引擎。

分享嘉宾:何小成,就职于湖南蚁坊软件股份有限公司平台部。主要从事超大规模分布式搜索引擎的平台搭建及调优等工作。实现在高并发、每天7亿+新数据入库的情况下,对PB级的数据做快速搜索和统计。深度剖析过Solr、ElasticSearch、Lucene 等开源索引框架结构以及其性能调优的工作。

3.UKUI轻量级桌面环境

主题简介:UKUI是一个轻量级的Linux桌面环境,基于GTK和QT进行开发,在国内外得到广泛关注,已经默认使用在优麒麟开源操作系统上。本次报告重点介绍UKUI的设计理念、开发进度以及后续计划。

分享嘉宾:余杰(Jack Yu),国防科技大学博士、优麒麟开源项目负责人,长期从事Linux相关开发和推广活动。

4.一种可视化的Kubernetes管理工具介绍

主题简介:初学K8s通常会碰到部署难管理难等诸多问题,GFW着实增加了不少游戏难度。Rancher实现了一键可视化的部署方式,同时完美绕开GFW的问题,多节点管理的时候也会更加得心应手。本议题会分享一些背后的实现原理和相关实践指南,同时分享如何个性化定制部署过程。

分享嘉宾:张智博,Rancher Labs资深软件工程师。昵称牛小腩,初出茅庐在阿里巴巴口碑网,参与本地搜索业务研发工作;后联合创办美食点评社区“美食行”,之后长期从事云计算研发工作。Rancher中国社区布道师,MBH树莓派社区成员,OpenStack中国社区长期作者。

#放码过来#2017年源创会新增环节,个人或团队如有优秀开源项目,请发送站内私信到@凝小紫 报名,通过筛选的项目即可在源创会现场上台展示个人项目,更有机会获得开源中国社区码云项目推荐,甚至登上码云周刊的机会,只要你有料,就尽管放码过来!

Favicon for 开源中国社区最新新闻 08:22 接地气又好用,8 款优秀的国产开源博客系统推荐 » Post from 开源中国社区最新新闻 Visit off-site link

对于程序员来说,除了苦修技术,写博客将开发过程和开发经验记录下来,也是非常有意义的事情。既能帮助自己梳理思绪,也能让其他人避免重复踩坑,还能抛砖引玉,得到更多同行的指点和建议。

Favicon for 开源中国社区最新新闻 08:21 每日一博 | Android Studio 中 VCS 的使用介绍 » Post from 开源中国社区最新新闻 Visit off-site link

对于大多数实验开发者和初学者来说,使用好的工具或足够好的定制环境以便以有效和快速的方式处理 VCS 很重要。

Favicon for 开源中国社区最新新闻 08:21 协作翻译 | 机器学习利用 Elasticsearch 进行更智能搜索 » Post from 开源中国社区最新新闻 Visit off-site link

众所周知,机器学习正在引领许多行业的变革。对于曾疲于用人工调整搜索相关性来捕捉细微差别的搜索行业就更是如此。人工调整已经实现了其能达到的最好效果,成熟的搜索公司不满足于此,试图建立更加智能和自动化的搜索系统。

Favicon for 开源中国社区最新新闻 08:21 OSChina 周五乱弹——什么情况下两人间的距离为负数 » Post from 开源中国社区最新新闻 Visit off-site link

自古文人相轻,程序员的世界也存在着错综复杂的「鄙视链」。从程序语言、编辑器、平台到{ 是写在 if 的同一行还是下一行,不同阵营的人都习惯鄙视来鄙视去。而「你用什么程序语言?」更是大家最热衷的一条鄙视链。


Favicon for 开源中国社区最新新闻 08:17 Brackets 1.9 发布,Web 前端开发 IDE » Post from 开源中国社区最新新闻 Visit off-site link

Brackets 1.9 发布了。Brackets 是 Adobe 的开源 HTML/CSS/JavaScript 集成开发环境。Brackets 当前为 Mac, Windows 以及 Linux (Debian/Ubuntu)提供最新稳定版的二进制发布, 源代码托管在 GitHub 上。

081622_6bN5_2720166.png

Brackets 1.9 的变化包括:

  • 在实时预览中反向检查(点击实时预览中的元素,高亮显示源代码中的相应标签)

  • 现已支持 “查找和替换” 中的 “全部替换” 以及批处理操作

  • 扩展管理器现在显示列出的扩展名的下载次数,并允许根据下载次数或发布日期进行排序。因此你可以轻松找到最受欢迎和最新的扩展功能

  • 现在可以使用键盘快捷键(Alt + w)在窗格之间交换焦点

  • 现在可以更改无标题文档的语言模式(而且这些文档支持代码着色和代码提示)

  • GitHub 组织现在可以拥有 Brackets 扩展并更新它们

发布主页 和 完整更新日志

值得注意的是 Linux 上的 Brackets 有两个问题:

  • 要关闭应用程序,必须单击关闭按钮两次。

  • 官方的 Brackets Debian/Ubuntu debs 依赖于 libgcrypt11,这在高于 14.10 的 Ubuntu 版本中不可用。

下载地址:

参考链接:http://www.webupd8.org/2017/03/code-editor-brackets-19-released.html

Favicon for 开源中国社区最新新闻 08:00 Python 3.6.1 发布,3.6 系列首个维护版本 » Post from 开源中国社区最新新闻 Visit off-site link

Python 3.6.1 发布了。Python 3.6.1 是 Python 3.6 的第一个维护版本。Python 3.6 系列包含许多新功能和优化。有关更多信息,请参阅 Python 3.6 文档中的新增功能

更新内容:

Core and Builtins

  • bpo-29723: The sys.path[0] initialization change for bpo-29139 caused a regression by revealing an inconsistency in how sys.path is initialized when executing __main__ from a zipfile, directory, or other import location. The interpreter now consistently avoids ever adding the import location’s parent directory to sys.path, and ensures no other sys.path entries are inadvertently modified when inserting the import location named on the command line.

Build

  • bpo-27593: fix format of git information used in sys.version

  • Fix incompatible comment in python.h

发行日志:

  • While it should be generally transparent to you, 3.6.1 is the first release produced using a major change to our software development and release processes. Please report any issues via our issue tracker at https://bugs.python.org.

  • Windows users: The binaries for AMD64 will also work on processors that implement the Intel 64 architecture. (Also known as the "x64" architecture, and formerly known as both "EM64T" and "x86-64".) They will not work on Intel Itanium Processors (formerly "IA-64").

  • Windows users: If installing Python 3.6.0 as a non-privileged user, you may need to escalate to administrator privileges to install an update to your C runtime libraries.

  • Windows users: There are now "web-based" installers for Windows platforms; the installer will download the needed software components at installation time.

  • Windows Users: There are redistributable zip files containing the Windows builds, making it easy to redistribute Python as part of another software package. Please see the documentation regarding Embedded Distribution for more information.

  • macOS users: If you are using the Python 3.6 from the python.org binary installer linked on this page, please carefully read the Important Information displayed during installation; this information is also available after installation by clicking on /Applications/Python 3.6/ReadMe.rtf. There is important information there about changes in the 3.6 installer-supplied Python, particularly with regard to SSL certificate validation.

  • macOS users: There is important information about IDLE, Tkinter, and Tcl/Tk on macOS here.

相关链接:

发布主页 和 完整更新内容

下载地址

Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 方面和服务,差别大吗? » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

Arnon Rotem-Gal-Oz认为,那种认为一个东西不是单体就是微服务的观点是无稽之谈。同时,他认为,越来越多声称是微服务的实现并不完全符合微服务的原则。不过,他并没有低估对于半独立可部署软件组件的需求,并探讨了一种他发现非常有用的方法“方面(Aspect)”。

By Mark Little Translated by 谢丽
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 Platform9推出“Kube2Go”及“Fission”无服务器框架 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

继不久前发布的Kubernetes托管服务后,Platform9又推出了其补充项目“Kube2Go”,一项基于web界面的Kubernetes集群部署服务。此外该公司还公布了基于Kubernetes的“Fission”无服务器框架。

By Daniel Bryant Translated by 王强
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 GitLab收购公共聊天软件Gitter » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

开源的git提供商GitLab收购了Gitter,后者是Slack的一个替代方案。目前,两个产品还没有结合在一起的计划,但是Gitter将会于2017年的中旬开源。GitLab的目标是借助Gitter的800,000以上的用户,驱动业务的增长。

By David Iffland Translated by 张卫滨
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 WebStorm 2017.1增加对Vue.js的支持 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

WebStorm 2017.1 通过对最新的Javascript功能的支持,保持了IDE领域的领先地位。新支持的功能包括Vue.js、Jest、Angular Language Service、StandardJS和emojis。

By David Iffland Translated by 张健欣
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 荷兰商业银行使用精益领导力推行改进 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

组织改进和确保大家开展真正的学习是管理者的职责。为了真正的学习,你必须接受未知,走出已有的知识领域。荷兰商业银行的Leendert Kalfsbeek 和 David Bogaerts说,敏捷、精益和持续交付有助于提升学习的能力。

By Ben Linders Translated by 冬雨
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 NGINX Plus R12提供了集群配置共享并改进了nginScript » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
GettyImages-526846820.jpg

Nginx发布了NGINX Plus第12版(R12)。NGINX Plus是广为使用的NGINX开源Web服务器的付费版本,R12新实现了一个用于简化集群的配置共享特性,提供了对nginScript语言的官方支持,并在监控及操控面板、缓存、可靠性等方面上做了改进。

By Sergio De Simone Translated by Rays
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 Cláudio Pires提出的员工认可方法改革 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

2014年,Cláudio Pires,卫生保健领域某公司的CEO,实行了一套不同的员工认可方法,即绩优奖金制度(Merit Money System)。三年之后的今天,InfoQ邀请他来聊聊其中都有哪些好处和陷阱,以及从中都学到了什么。

By Rui Miguel Ferreira Translated by 宋康婧
Favicon for 开源中国社区最新新闻 07:53 PyQuery —— jQuery 风格的 HTML/XML 解析库 » Post from 开源中国社区最新新闻 Visit off-site link

PyQuery 让你使用 jQuery 的风格来遍历 XML 文档,它使用了 lxml 来处理 XML 乃至 HTML 文档。

Favicon for 开源中国社区最新新闻 07:52 码云推荐 | Swift 版本星级评价控件 StarEvaluateView » Post from 开源中国社区最新新闻 Visit off-site link

Swift 版本星级评价控件,支持半星评价和设置间隙。

Favicon for 开源中国社区最新新闻 07:50 Ruby 2.4.1 发布,开源的动态编程语言 » Post from 开源中国社区最新新闻 Visit off-site link

Ruby 2.4.1 发布了。这是 2.4 稳定系列的第一个小版本。

详情参见提交日志

下载

  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2

    SIZE:   12571597 bytes
    SHA1:   b0bec75c260dcb81ca386fafef27bd718f8c28ad
    SHA256: ccfb2d0a61e2a9c374d51e099b0d833b09241ee78fc17e1fe38e3b282160237c
    SHA512: 1c80d4c30ecb51758a193b26b76802a06d214de7f15570f1e85b5fae4cec81bda7237f086b81f6f2b5767f2e93d347ad1fa3f49d7b5c2e084d5f57c419503f74

  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz

    SIZE:   14174752 bytes
    SHA1:   47909a0f77ea900573f027d27746960ad6d07d15
    SHA256: a330e10d5cb5e53b3a0078326c5731888bb55e32c4abfeb27d9e7f8e5d000250
    SHA512: 6cddac19733870f372750a276a2c59f99dea9a17731cd7c24a44b615794ff1a5d194660949628217107f2301f3b1ff3b6c18223896c87c76e84c64f4078769dc

  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.xz

    SIZE:   9939188 bytes
    SHA1:   eb3e25346431214379e3b92c6f6b6e02f7b2503f
    SHA256: 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654
    SHA512: e6fd290b6edd166348b70f0f1c56f7ed9d956c4c1eb91d97d0548041ca4196b9b75ec1ad35c745bdbfd4de195899093e7205d7f02b014ecf1c48e6f31cf25903

  • https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.zip

    SIZE:   15830344 bytes
    SHA1:   19bdb47299a39316df2c80107314940d17b26d88
    SHA256: f98a3b50439ffdd270f9ae86d99ff0be431c81b85215c9aafac942ef40b89cbf
    SHA512: 4dc8991a5f8751a5853798b2e438eb3879c959a02517aa4d0efa045412e47ba7036679fd4c6797249a502f0bfac9ef43740f7bff29b017d10e0b3f51d63f161f

发布记

此次发布得益于诸多提交者、开发者和用户提供的缺陷报告。感谢你们的贡献!

来源:https://www.ruby-lang.org/zh_cn/news/2017/03/22/ruby-2-4-1-released/

Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 07:48 文章: Invokedynamic:Java的秘密武器 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo.jpg

从Java 1.0到现在,invokedynamic是第一个新加入的Java字节码,对于Java 8中一些“头版标题”类型的特性(如lambdas和默认方法)来说,这个字节码对它们的实现至关重要。在本文中,我们将会深入学习invokedynamic,并阐述它对于Java平台以及像JRuby和Nashorn这样的JVM语言来讲为何如此重要。

By Ben Evans Translated by 张卫滨
Favicon for 开源中国社区最新新闻 07:46 ReSharper Ultimate 2017.1 EAP 6 发布 » Post from 开源中国社区最新新闻 Visit off-site link

ReSharper Ultimate 2017.1 EAP 6 发布了,欢迎下载 ReSharper Ultimate 2017.1 的最新版本 并查看自今年以来我们一直开发的所有新功能和改进。

之前的版本中,我们修复了重要的 bug,并添加了与完美支持 Visual Studio 2017 RTM 和 C# 7 相关的功能。今天发布的 EAP 版本包括了一些值得关注的更新:对 dotMemory, dotPeek 和将在此文章中介绍的其他一些改进。

dotMemory 命令行分析器

dotMemory 2017.1 引入了一个控制台分析器。dotMemory.exe 工具位于 dotMemory 目录中,并允许从命令行直接配置和运行概要分析会话。在以下情况下,当您需要自动执行采集内存快照的过程时,该工具是完美契合的:

  • 希望对连续集成构建进行分析

  • 加快分析程序,例如 定期配置相同的应用程序,并且不想每次启动 dotMemory 用户界面

查看正在运行的应用程序的内存快照(带有 6844 PID):

dotMemory.exe get-snapshot 6844 --save-to-dir=C:\Snapshots

或者仅当内存消耗增加 50% 时运行应用程序并保存快照:

dotMemory.exe start --trigger-mem-inc=50% C:\MyApp\MyApp.exe

导航和搜索

074557_q7V6_2720166.png

074631_Xc4l_2720166.png

支持 dotPeek 便携式 PDB

代码格式化

发布主页下载地址

Favicon for 开源中国社区最新新闻 07:45 十点总结,为何 Linux 如此深得人心 » Post from 开源中国社区最新新闻 Visit off-site link

183553_rdqq_2903254.png

Linux 过去主要作为服务器运行,但经过几年的发展,其用户界面有了很大的改善。如今,Linux 已经成为美观易用,用户友好的桌面操作系统。在某些方面,Linux 甚至赶超 Windows 和 Mac 成为用户首选。

Linux 为何如此深得人心呢?以下是我们精选的 10 项原因:

1、高安全性

安装 Linux 能有效避免病毒的倾入。Linux 系统下除非用户以 root 身份登录,否则程序无法更改系统设置和配置。因此,下载的文件/恶意软件的权限将受到限制。也就是说,除非你进入超级用户状态,不然你连软件都安装不上,病毒/恶意软件更不能自动安装了。

而且由于 Linux 已开源,全世界的开发都可以查看源码,这意味着大多数的缺陷已经被挖出来了。

2、高可用性

Linux 非常稳定,不易崩溃。Linux 能在几年后保持和第一次安装时一样的运行速度。而 Windows 的话可能在运行半年后,速度就跟不上了。Linux 正常运行时间长,可用性为 99.9%,每次更新或修复程序之后无需重启系统。因此,Linux 在互联网上运行的服务器数量最多。

3、易于维护

Linux 系统非常容易维护,用户可以集中更新操作系统和所有安装的软件。它的每个发行版都有自己的软件管理中心,提供定时更新,即安全又高效。

182827_YLJZ_2903254.png

4、可在任何硬件上运行

Linux 能有效利用系统资源,允许用户定制 Linux 安装或针对特定的硬件要求进行安装。其安装过程灵活,用户可自行选择需要安装的模块,这允许他们在旧硬件上安装 Linux,从而有助于最佳地使用所有硬件资源。

5、免费

这都不用多说了,Linux 完全免费,而且,它拥有强大的免费软件群,从教育类软件到音频/视频编辑等。企业可以免费使用软件,大大降低了成本预算。

6、开源

Linux 最大的特点就是源码可用,属 FOSS 类别(免费和开源软件)开发者可自由查看和修改源码,能即使发现问题并解决。有些国家还在开发自己的 Linux 版本,这有助于国家在防范、通信等战略领域开发自己的操作系统。

182522_lE9V_2903254.png

7、易于使用

一般认为,Linux 只适用于极客,而现在 Linux 成了用户友好型操作系统,还具有良好的图形用户界面(GUI)。它几乎具有 Windows 的所有功能,GUI 也发展到了一定程度,能满足大多数用户的需求。有人认为 Linux 不能满足游戏玩家的要求,但现在也还有几款游戏能在 Linux 上使用,你还可以通过安装 PlayOnLinux 来运行 Windows 游戏。

8、超强的定制性

Linux 具有超大的灵活性,用户可以根据需求定制系统。它提供大量的壁纸、桌面图标和面板选项,有 6 个以上的桌面环境选择。对于其他任务,从 GUI 界面和文件管理器到 DVD 刻录,约有 4-6 个选项可用于特定软件。系统管理员可以享受强大的命令行界面和编写 shell 脚本来自动执行日常维护和各种其他任务。所以,你能想到的,Linux 基本能办到。

074422_qnZB_2903254.png

9、教育

这对学生非常有帮助,因为在修改和扩展代码以满足需求前,他们可以通过软件了解其运行原理。这有助于他们学习操作系统和软件的内部结构。而且,即使用户不会编程,Linux 也能通过帮助文档、翻译和测试来帮助他们找出 Bug。Linux 还能提供免费的软件用于教学,如 Celestia 和 Stellarium 用于天文学,Avogadro 和 Gabedit 用于化学。

10、支持

Linux 有强大的社区支持。因为众多志愿者的存在,论坛提出的任何问题都能得到快速回复。如有需要你也可以购买企业级服务,Red Hat 和 Novell 等公司为关键应用程序和服务提供 24×7 支持。

编译自:OpenSource

Favicon for 开源中国社区最新新闻 07:35 厉害了我的 LastPass,快速修复严重的密码泄漏漏洞 » Post from 开源中国社区最新新闻 Visit off-site link

161131_qJis_2903254.png

近日 LastPass 密码管理的开发人员紧急推出修复程序,以解决黑客窃取用户密码或在其计算机上执行恶意代码的严重漏洞。

该漏洞由 Google 安全研究员 Tavis Ormandy 发现,并于星期一向 LastPass 报告。 它影响了服务用户为 Google Chrome,Mozilla Firefox 和 Microsoft Edge 安装的浏览器扩展。

根据 Google Project Zero 错误跟踪器中的描述,该漏洞可能会给攻击者访问 LastPass 扩展中的内部命令。扩展程序使用的这些命令来复制密码,或使用存储在用户的安全保管库中的信息填写 Web 表单。如果安装了扩展的二进制组件,则可以使用“openattach”命令在计算机上运行任意代码。

LastPass 开发人员在其服务器上部署了解决方法,并计划在新版本中包含完整修复。

Ormandy 周二在 Firefox 扩展中报道了另一个漏洞,它与第一个漏洞相关,很快,在星期三发布的新版本的 Firefox 扩展 4.1.36a 中就被修复。

编译自:InfoWorld

Favicon for 开源中国社区最新新闻 07:33 深度操作系统 15.4 RC 发布 » Post from 开源中国社区最新新闻 Visit off-site link

深度操作系统是一个致力于为全球用户提供美观易用、安全可靠的Linux发行版。

经过深度操作系统15.4 Beta的公测,收到了大家很多的建议和问题反馈,我们也采纳了很多大家的建议以及修复了很多问题。

15.4-rc-1

以下为深度操作系统 15.4 RC更新详情:

桌面

  • 预装全新的桌面壁纸;

  • 优化键盘布局切换快捷键实现;

  • 优化桌面热区的交互体验;

  • 优化系统UI细节;

  • 修复Intel显卡花屏的问题;

  • 修复设置壁纸程序缩略图可能跟实际壁纸不对应的问题;

控制中心

  • 新增天气自定义地区;

  • 新增音乐播放控件;

  • 新增其他插件功能;

  • 新增多屏自定义配置项;

  • 新增登录界面记录NumLock状态;

  • 优化首页快捷栏整体样式;

  • 修复通知中心记录丢失问题;

  • 修复通知中心有时候不会记录消息通知问题;

  • 修复添加的自定义快捷键无法修改的问题;

  • 修复几个潜在的引起崩溃的问题;

启动器

  • 优化启动器交互细节;

  • 优化程序图标显示,解决图标显示模糊的问题;

  • 优化启动器字体跟随系统字体大小;

  • 优化选中样式;

任务栏

  • 优化图标显示,解决图标显示模糊的问题;

  • 修复图标可能找不到的问题;

  • 修复调节声音可能会导致崩溃问题;

  • 修复摆放位置会导致正常程序窗口位置、大小不对的问题;

窗口管理器

  • 新增默认四个工作区显示不同的壁纸;

  • 新增添加工作区随机显示桌面壁纸;

  • 优化窗口管理器的交互和显示细节;

  • 修复打开多任务视图系统死机的问题;

其他

  • 预装福昕阅读器;

  • 内核安全漏洞更新;

  • 修复了Steam无法更新的问题;

  • 修复了bcm4322等无线网卡无法使用的问题;

  • 修复了公测阶段部分用户反馈的问题。

  • 新增(Wubi)体验安装模式;注:Windows 7以上用户安装之前请务必关闭快速启动。

15.4-rc-2

获取和体验

只需一杯咖啡的时间,即可体验深度操作系统给您带来的无限魅力!

请您下载深度操作系统镜像,并观看安装视频教程,借助深度启动盘制作工具即可轻轻松松的将系统安装至您的电脑。

官方下载点:

64位:点此下载MD5值

其他下载点(同步中):

百度云Google DriveMEGASourceForge

Favicon for 开源中国社区最新新闻 07:32 W3C 准备将 DRM 定为 Web 标准 » Post from 开源中国社区最新新闻 Visit off-site link

W3C 上周发布了加密媒体扩展(EME)的最新草案,并正式将其提升为提议推荐标准,EME 能否正式成为 Web 标准还需要根据其成员的投票结果而定。

073145_yJaP_2903254.png

投票调查已经寄出,W3C 成员将需要在 4 月 19 日前递交其意见。这不过是一个程序性的过程,只是像橡皮图章那样确认下结果。EME 提供一个通用的 API 支持 DRM 保护的多媒体内容,由来自 Google、 Microsoft 和 Netflix 的工程师开发,得到了营利性企业的支持,但受到了自由软件基金会和电子前哨基金会等非营利组织的批评。

WWW 之父蒂姆 · 伯纳斯 - 李(Tim Berners-Lee) 在上月底公开发表声明支持 EME,认为内容供应商为了控制内容发行,必定要采用一种 DRM 方案,不是 Web 就是原生,Web 形式的 DRM 总归比插件形式的 DRM 好一点。                  

来源:Solidot

Favicon for 开源中国社区最新新闻 07:29 Apache Gora 0.7 发布,NoSQL 的 ORM 框架 » Post from 开源中国社区最新新闻 Visit off-site link

Apache Gora 0.7 发布了。Gora 是一个应用于 NoSQL 数据库的 ORM 框架,支持包括:Apache HBase/Apache Cassandra

该版本修复了 80 个 issue,相关内容,请参阅发布报告

Gora 0.7 支持以下项目:

Apache Avro <http://avro.apache.org> 1.8.1
Apache Hadoop <http://hadoop.apache.org> 2.5.2
Apache HBase <http://hbase.apache.org> 1.2.3
Apache Cassandra <http://cassandra.apache.org> 2.0.2
Apache Solr <http://lucene.apache.org/solr> 5.5.1
MongoDB <http://mongodb.com> (driver) 3.4.2
Apache Accumlo <http://accumulo.apache.org> 1.7.1
Apache Spark <http://spark.apache.org> 1.4.1
Apache CouchDB <http://couch.apache.org> 1.4.2 (test containers
   <http://testcontainers.viewdocs.io/testcontainers-java/> 1.1.0)
Amazon DynamoDB <https://aws.amazon.com/dynamodb/> (driver) 1.10.55
Infinispan <http://infinispan.org/> 7.2.5.Final
JCache <https://www.jcp.org/en/jsr/detail?id=107> 1.0.0 with Hazelcast
   <https://hazelcast.com/> 3.6.4 support.

此版本现已提供下载,也提供在 Maven central

更多内容请看发行说明

Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 07:23 文章: 解密大规模的API优先转型:来自PayPal的课程(第一部) » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
GettyImages-509731276.jpg

第一堂课(总共三次),Erik Hogan描述了PayPal如何在3年前经过精密设计,实现了原本的单一化服务转变为由超过150个服务组成的松耦合架构、现代化的API。

By Erik Hogan Translated by 麦克周
Favicon for 开源中国社区最新新闻 07:19 ExTiX 17.2 发布,基于 Ubuntu 的桌面 Linux 发行 » Post from 开源中国社区最新新闻 Visit off-site link

ExTiX 17.2 发布了,ExTiX 是基于 Ubuntu 的桌面 Linux 发行。

ExTiX 17.2 具有轻量的 LXQt 0.10.0 桌面环境,并提供 Linux Kernel 4.10 版本。

关于 ExTiX 17.2 与 LXQt 桌面环境的信息:

  • ExTiX LXQt 基于 Ubuntu 16.10 'Yakkety Yak'。LXQt 0.10.0 被用作桌面环境,所有软件包都已升级至最新版本(截止至 2017-03-20),使用了 Linux Kernel 4.10 版本内核。(kernel.org 的 kernel 4.10.3)

  • 浏览器使用的是 Google Chrome,可以观看 Netflix 电影,这在 Linux 上的 Firefox 是不可能做到的。

  • 还安装了 BlueGriffon 2.3.1 网络编辑器。BlueGriffon 是全球万维网的全新 WYSIWYG 内容编辑器。由 Firefox 的渲染引擎 Gecko 提供支持,是一种符合最新 Web 标准的现代而强大的编辑网页的解决方案。

  • 其他重要/有用的软件包包括:LibreOffice,Thunderbird,GParted,Brasero,SMPlayer,GCC 和其他编译工具,以便可以从源安装软件包。 

有关 ExTiX 17.2 的更多信息,请参阅项目发布公告

Download (MD5)

extix-64bit-17.2-lxqt-nvidia-1480mb-170320.iso (1,480MB, pkglist).

或 OSDisc

Favicon for 开源中国社区最新新闻 07:04 Apache Kudu 1.3.0 发布,Hadoop 存储系统 » Post from 开源中国社区最新新闻 Visit off-site link

Apache Kudu 1.3.0 发布了。

Apache Kudu 1.3 是一个小版本更新,它在 Kudu 1.2 的基础上添加了各种新功能,改进,错误修复和优化。

值得关注的更新:

  • 大大提高了对安全性的支持,包括 Kerberos 身份验证,TLS 加密和粗粒度(集群级)授权

  • 历史版本的数据的自动垃圾回收机制

  • 默认配置的情况下,较低的空间消耗和更好的性能

要了解完整更新内容,请参阅发行说明

下载地址

Apache Kudu 简介

为了应对先前发现的这些趋势,有两种不同的方式:持续更新现有的Hadoop工具或者重新设计开发一个新的组件。其目标是:

  • 对数据扫描(scan)和随机访问(random access)同时具有高性能,简化用户复杂的混合架构;

  • 高CPU效率,最大化先进处理器的效能;

  • 高IO性能,充分利用先进永久存储介质;

  • 支持数据的原地更新,避免额外的数据处理、数据移动

我们为了实现这些目标,首先在现有的开源项目上实现原型,但是最终我们得出结论:需要从架构层作出重大改变。而这些改变足以让我们重新开发一个全新的数据存储系统。于是3年前开始开发,直到如今我们终于可以分享多年来的努力成果:Kudu,一个新的数据存储系统。

Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 06:27 文章: 如何正确对用户密码进行加密? » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
two.jpg

本文介绍了对密码哈希加密的基础知识,以及什么是正确的加密方式。还介绍了常见的密码破解方法,给出了如何避免密码被破解的思路。相信读者阅读本文后,就会对密码的加密有一个正确的认识,并对密码正确进行加密措施。

By Defuse Security Translated by 刘志勇
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 05:58 视频演讲: 微服务在微信的架构实践 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
xujiatao270.jpg

微服务的理念与腾讯一直倡导的“大系统小做”有很多相通之处,本次分享微信后台架构的服务发现/通信机制/集群管理等基础能力与其上层服务划分原则/代码管理规则等。

By 许家滔
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 05:43 视频演讲: 移动页面加速框架的探索与实践 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
shenzhou1270.jpg

随着移动互联网技术发展与 H5 生态的不断演化,在前端领域涌现出了一些通用的、开源的移动 H5 页面加速框架。其中以 Google 提出的 AMP(Accelerated Mobile Pages)开源框架与 Baidu 提出的 MIP(Mobile Instant Pages)开源框架为代表。本主题主要从技术的层面讨论: 移动 H5 页面速度体验方面遇到的挑战和问题,以及解决方法的探索过程; 从架构设计层面,解析通用移动页面加速框架的设计思路和实现原理; 从技术实现角度,剖析移动页面加速中的重难点问题与解决方法实践; 从实际应用上,提供提升移动页面加速切实可行的操作方法。

By 沈洲
Favicon for 开源中国社区最新新闻 04:15 Keycloak 3.0.0.Final 发布,SSO 集成解决方案 » Post from 开源中国社区最新新闻 Visit off-site link

Keycloak 3.0.0.Final 发布了,下载地址请到 Keycloak 首页

完整的改进记录请看 JIRA. 升级请参考 migration guide.

Keycloak 是一个为浏览器和 RESTful Web 服务提供 SSO 的集成。基于 OAuth 2.0 和 JSON Web Token(JWT) 规范。最开始是面向 JBoss 和 Wildfly 通讯,但已经计划为其他诸如 Tomcat、Jetty、Node.js、Rails、Grails 等环境提供解决方案。

Favicon for 开源中国社区最新新闻 04:12 Infinispan 9.0.0.CR4 发布,可能是正式版之前的最后测试 » Post from 开源中国社区最新新闻 Visit off-site link

亲爱的 Infinispan 用户,原本计划 CR3 是正式版之前的最后一个版本,但我们食言了。发布 CR4 的原因是我们决定对一些默认的行为做一些变化,包括:

  • write-skew 默认启用可重复读的事务类型

  • 通过模板来获取一个已配置的缓存不会再对缓存的配置进行重新定义

其他重要改变:

  • 对客户端/服务器的滚动升级过程做大的提升

  • 允许在 off-heap 缓存中存储索引

  • 大量的 bug 修复

完整的改进记录请看 release notes, 9.0.0.CR4 下载地址:download

News stories from Thursday 23 March, 2017

Favicon for 开源中国社区最新新闻 17:25 Hibernate 4.2.26.final 发布,数据持久层框架 » Post from 开源中国社区最新新闻 Visit off-site link

Hibernate 4.2.26.final 发布了。

Hibernate 是一种 Java 语言下的对象关系映射解决方案。 它是使用 GNU 宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate 也是目前 Java 开发中最为流行的数据库持久层框架,现已归 JBOSS 所有。

该版本暂未提供更新内容,你可查看提交记录关注修改情况。

下载地址:

Favicon for ITeye资讯频道 16:45 2017 年软件开发人员需要面对的 7 个改变 » Post from ITeye资讯频道 Visit off-site link
2017年对开发者而言将是有趣的一年,因为这个行业将会发生一些重大的变化。从创建较新的应用程序到添加功能到现有的应用程序,以扩展应用程序跨越其当前的限制,编程将在2017年见证复兴。
3612d0e5-8b0a-3753-afae-e497829d4409.png

人工智能玩得越来越high
人工智能将在2017年大扬其威。AI作为新的用户界面不再是一个片面的方法。我们需要理解,利用人工智能需要两个策略——一个包括开发人员编写的代码,另一个专注于接口如何收集来自源的数据——从而使AI更加智能。

必须知道的一点是虽然代码或内容块仍然是王牌,但是匿名化数据集同样重要。第一步始终是从框架、平台和编程语言收集信息,然后将其全部转移给开发人员,之后他们将为该作业选择最佳数据集。

2017年将会看到大多数公司拥抱人工智能——集合他们寻求员工的大量数据——主要用于预测长期的战略和发展。

利用理解自然语言的Chatbot驱动app
Chatbots本质上是智能的,2017年将使大多数软件开发人员与他们一起工作。这里的想法是构造可以满足特定用户需求的特定应用。无论是检查Facebook上的航班还是使用像Cinemabox这样的流媒体服务,都会有一大批能够理解自然语言并做出相应回应的chatbot驱动应用程序。

整体的发展意味着这些chatbot将能够从任何方向响应,以相等的精度同化文本和基于语音的命令。因此,基于云的平台将受到高度重视,因为它将允许软件开发人员使用chatbot为多个平台编编写界面。

容器的流行
当涉及到特定应用程序的回归测试和分级时,容器是非常有用的。有一个经验法则就是,容器的数量甚至可以实际生产环境高10倍。使用容器好处包括更好的敏捷性,更优化的调度、资源分配和编配,从而开发人员能够空出更多的时间和双手去做其他更多的工作。

随着容器的日益普及,基于云的一些选择选项日渐得到了关注。原因是以云为中心的容器服务带来了敏捷福利,例如减少物理迁移。

增加的应用程序版本数量
最近,已经有不少企业开始转战业务线平台,各路人马就像狼群一样蜂拥而上撕裂猎物。在2017年,开发人员制定计划时,将更容易破坏现有的业务。这需要增加总体应用程序版本的数量,其中开发人员需要更加努力地创建所需的代码集。

如果报告可信的话,应用程序版本的总数可能会在几个月内翻一番。虽然这为客户提供了广泛的选择,但势必扩大迭代开发。2017年可能会是DevOps向前发展的艰难又有意义的一年。更快的测试和更迅捷的应用程序部署暗示着加倍的应用程序版本。

测试环境切换到云
软件开发在2017年可能不会缓和,但与2016年相比,它将更加紧凑。途径之一是将云作为测试和开发的完美媒介。这是一个战略,将会为CIO和开发人员之类带来两个巨大的好处。

首先,这种以云为中心的转变将允许开发人员快速地转移资源。从集成工具到选择API的旅程,以及然后驻留整个基础架构在云端,将使其基础架构易于使用。不过,某些公司依然需要遵守预置的开发标准,当然在这种情况下,以云为中心的开发人员测试环境必须符合物理标准。

第二,对于CIO,基于云的设置从长远来看可以降低基础设施成本。减少IT预算成为了新的时尚,并且与这种向云的转变是同步的。

大众开发者将超越传统开发者
作为使用.NET和Java的传统开发人员,你可能会因为大众开发人员的突然涌入而感到被冒犯。所谓的大众开发人员包括那些使用低代码平台创建、构建和定制应用程序的人员个体。先前,传统开发人员需要编写一页又一页的复杂代码才能使应用程序工作。

大众开发者的复兴意味着允许在编码领域实验友好接口的涌入和大量拖放选项。然而,这些项目的有效性和可靠性需要评估才能转向生产。

系统管理和备受期待的云转移
如果最近的一些调查可信的话,那么到2020年,将近60%的IT结构预计会将系统管理转移到基于云的服务器。2017年将是此过程的基础一年,因为更高水平的技术改变将引领代码甚至应用质量的提高改进。

一旦IT公司开始转向云计算,诸如日志分析和绩效管理等方面预计都会有所改进。这样一来,基础设施成本将会随着机器学习甚至模式识别的减少而降低。

总结
业务线软件开发者可能会因为竞争的残酷和复杂性的多样而觉得很难在2017年生存。不过,转移到云来处理各种类型的数据孤岛将提供巨大的帮助。

英文原文:7 Changes Software Developers Need to Deal With in 2017

感谢 jihong10102006 投递这篇资讯

资讯来源:codeceo

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for 精品绿色便携软件 15:53 格式工厂(Format Factory) 4.0.5 简体中文便携版 - 万能视频转换软件 » Post from 精品绿色便携软件 Visit off-site link

格式工厂 (Format Factory) 是一套万能的多媒体格式转换软件、而且是免费软件。

  1. 所有类型视频转到 MP4, MKV, AVI, WebM, 3GP, GIF, WMV, MPG, VOB, MOV, FLV, SWF
  2. 所有类型音频转到 MP3, WMA, APE, FLAC, AAC, AC3, MMF, AMR, M4A, M4R, OGG, WAV, WavPack, MP2
  3. 所有类型图片转到 WebP, JPG, PNG, ICO, BMP, GIF, TIF, TGA
  4. 抓取 DVD 到视频文件,抓取音乐 CD 到音频文件
  5. 支持转换为适用于各类移动设备的 MP4、AVI、3GP、HD AVC、HD HEVC 等格式
  6. 支持 RMVB、水印、音视频混流

格式工厂 (Format Factory)

总的说来格式工厂是一款很不错的视频转换软件,格式工厂官方也一直在努力开发、更新,而这一切都是免费的,我们没有理由不支持了。

格式工厂 (Format Factory) 的特长:

  • 支持几乎所有类型多媒体格式到常用的几种格式
  • 转换过程中可以修复某些损坏的视频文件
  • 多媒体文件减肥
  • 支持 Android/iPhone/iPad 等移动设备的多媒体格式
  • 转换图片文件支持缩放、旋转、水印等功能
  • DVD 视频抓取功能,轻松备份 DVD 到本地硬盘

Format Factory 移动视频格式支持

制作与使用说明

已经做成 Portable 便携版,下载解压后直接运行 FormatFactoryPortable.exe 即可,2017/3/23 更新版本为格式工厂 FormatFactory 4.0.5。若无法运行或出现应用程序配置错误,请尝试安装 VC 运行库

Format Factory

格式工厂 4.0.5 更新日志

  1. 加入爱奇艺缓存文件 QSV 的解码
  2. 修正了视频画面裁剪的问题
  3. 修正了上下颠倒和左右颠倒的翻译问题
  4. 加入最新的 HEVC(H265) 编码,MP4/MKV 的压缩比大幅度提高
  5. 优化了默认码率的算法
  6. 加入编码的 CRF 支持
  7. 更新了一些编码器的版本

Format Factory is a multifunctional multimedia file conversion tool.

Format Factory Portable 相关文件下载

软件开发商:www.formatoz.com
压缩包解压密码:www.portablesoft.org
压缩包MD5+扫描报告:707821B4FFB680BC35B4C5409F6B8D1C

开始下载 格式工厂 (Format Factory) 4.0.5 简体中文绿色便携版
FormatFactory_4.0.5_PortableSoft.7z (42.40 MB)
来自精品绿色便携软件 | 格式工厂 (Format Factory) 4.0.5 下载页面 | 更多版本下载

开始下载 格式工厂 (Format Factory) 3.3.4 简体中文绿色便携版
FormatFactory_3.3.4_PortableSoft.7z (44.38 MB)
来自精品绿色便携软件 | Format Factory 3.3.4 便携版 下载页面

Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 14:16 中国技术开放日欧洲站正式启程 技术力量驱动世界前行 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

5月12日极客邦科技与合作伙伴XNode创极无限将携手中国20位科技领袖集体出海欧洲,目的地为法国、德国、荷兰。期间将会拜访十余家巨头企业与创新公司的高管,并与荷兰康斯坦丁王子进行对话与交流。

By Yilia
Favicon for ITeye资讯频道 14:01 【招募】大数据时代,Hadoop竟是最好的框架? » Post from ITeye资讯频道 Visit off-site link
Hadoop的Logo是一头大象,其名字并不是一个缩写,而是一个虚构的名字。该项目的创建者,Doug Cutting解释Hadoop的得名 :“这个名字是我孩子给一个棕黄色的大象玩具命名的。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子恰恰是这方面的高手。

04d49a27-6646-3d2a-9d1e-6a0592d8b706.jpg

提到大数据,很多同学会想到Hadoop技术。大家都知道,Hadoop是Apache的一个开源项目,它是一个对大量数据进行分布式处理的软件架构,HDFS(Hadoop分布式文件系统),MapReduce、 Hbase 、Zookeeper,hive等组成了一个Hadoop生态系统。

现在,我们向喜欢Hadoop技术的小伙伴正式发出邀请,欢迎加入「CSDN Hadoop学习班」,我们会不定期的组织CSDN博客专家会客厅、CSDN学院明星讲师免费分享等活动!

除此以外,你还可以遇到志同道合的朋友、提升技能、活动技术专家亲自指导……

要求
我们是一个有组织有纪律的学习班,只要你热爱Hadoop技术,无论你是技术小白、学生、还是专业老司机,均可进入本班级学习。
如何加入
扫描下方二维码拉你进班,备注:大数据

8f39bc37-73df-348c-a315-9197a2b175d7.jpg


感谢 mengyidan1988 投递这篇资讯

声明:本文系ITeye网站发布的原创资讯,严禁任何网站转载本文,否则必将追究法律责任!

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for ITeye资讯频道 13:52 还在为测试发愁?10 个开源的压力/负载测试工具 » Post from ITeye资讯频道 Visit off-site link
负载/压力测试工具可以让你了解应用程序在负载/压力下的执行情况,它可以暴露其中的问题,并进行改进。因此,负载/压力测试是确保系统运行效率并不可少的部分。本文介绍了 10 个开源的负载/压力测试工具,欢迎补充。

1、Apache JMeter
JMeter 是 Apache 组织的开放源代码项目,它是功能和性能测试的工具,100% 的用 Java 实现。
573b305b-8f3b-33e4-af50-edcbce4e8ca2.png

2、Httperf
Httperf 是个 web 服务器的性能测试工具,来自惠普公司。Httperf 提供了灵活的生成各种 HTTP 负载来测试服务器的性能,提供可靠、高性能的工具,支持 HTTP/1.1 和 SSL。
7fce6614-1446-39da-a5c3-173e8f40556a.png

3、OpenSTA
OpenSTA 是一个免费的、开放源代码的 web 性能测试工具,能录制功能非常强大的脚本过程,执行性能测试。例如虚拟多个不同的用户同时登陆被测试网站。

OpenSTA 是专用于B/S结构的、免费的性能测试工具。它的优点除了免费、源代码开放的优点外,还能对录制的测试脚本进行,按指定的语法进行编辑。在录制完测试脚本后,可以对测试脚本进行编辑,以便进行特定的性能指标分析。其较为丰富的图形化测试结果大大提高了测试报告的可阅读性。

OpenSTA 基于CORBA 的结构体系,它通过虚拟一个proxy,使用其专用的脚本控制语言,记录通过proxy 的一切HTTP/S traffic。通过分析OpenSTA 的性能指标收集器收集的各项性能指标,以及HTTP 数据,对系统的性能进行分析。

优点:压力测试引擎具有可扩充性,可以完成打规模的压力测试。提供脚本语言支持。
7d2ae8aa-a86c-3459-a90f-02ad65093b79.png

4、loadUI
loadUI 是一个企业级的负载测试工具,测试可分布式运行并可实时修改,与 soapUI 紧密集成,使用高度图形化接口,使得测试变得很简单而且运行迅速。
b755ca46-6bdf-39cc-b30f-ab9d8f6838a8.png

5、Grinder
Grinder 是一个负载测试框架,通过 Jython 来编写测试脚本,基于 HTTP 的测试可以由浏览器来记录整个要测试的过程。
关键特性:
  • 泛型测试方法
  • 灵活的测试脚本编写
  • 分布式框架
  • 成熟的HTTP支持
6、JCrawler
JCrawler 是一个开源的 WEB 应用压力测试工具。通过其名字,你就可以知道这是一个用 Java 写的像网页爬虫一样的工具。只要你给其几个 URL,它就可以开始爬过去了,它用一 种特殊的方式来产生你 WEB 应用的负载。
b4b4523d-527d-30ff-aab3-357bbbb00308.png

7、Locust
Locust 是一个开源负载测试工具。Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发处理多少用户。
dfaade08-18c2-3e51-88f9-50abd633f5c6.png

8、Siege
Siege 是一个压力测试和评测工具,设计用于 WEB 开发这评估应用在压力下的承受能力:可以根据配置对一个 WEB 站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。

测试实例:
d8869dce-be49-310f-87b1-b53086f23057.png

9、http_load
http_load 以并行复用的方式运行,用以测试 web 服务器的吞吐量与负载。但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死。可以测试 HTTPS 类的网站请求。
aec65f67-820c-39df-8edc-5a5ce873c97a.png

10、Webbench
Webbench 是有名的网站压力测试工具,它是由 Lionbridge 公司开发。Webbech 能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。

责任编辑:开源中国 - 达尔文

感谢 jihong10102006 投递这篇资讯

资讯来源:oschina

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for 小众软件 - Appinn 12:34 Workflow 被苹果收购后免费,前一秒删掉了这些应用的支持 » Post from 小众软件 - Appinn Visit off-site link

著名的 iOS 平台效率用具、自动化处理应用 Workflow: Powerful Automation Made Simple 被 iOS 的主人 苹果公司收购,交易价格不详。随之在 App Store 免费,之前价格为 2.99 美金,从未限免。@Appinn

Workflow 有点类似 ifttt,但不同的是 Workflow 主要用来处理 iOS 上各种应用之间的自动化,而不像 ifttt 是在处理第三方在线服务的自动化连接。

Workflow 支持众多的应用:

在第三方 Workflow Gallery 收集站点随便挑几个例子:

而在这两次收购之前,也就是 3月22日,Workflow 在 App Store 进行了一次更新,更新内容如下:

青小蛙也就看看第 1 条、第 3 条,嗯,没有然后了。

毕竟都免费了,快去装一个试试吧。


相关阅读


©2017 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南 | 反馈 | 代理(优惠码 Appinn)
b27c41ad47c2611d60d7452a4c02dd52
Site Meter

apppackge:

Favicon for 精品绿色便携软件 12:14 EagleGet 2.0.4.20 便携版 - 猎鹰高速下载工具,在线视频下载利器 » Post from 精品绿色便携软件 Visit off-site link

EagleGet (中文名:猎鹰)是一款国外新秀免费下载工具,与越来越凌乱臃肿、偏离下载软件初衷的迅雷不同,EagleGet 有着简洁、清爽的界面,它专注于提高下载速度与提升下载体验,依靠扎实的多线程技术,EagleGet 可以在高速网络环境充分利用带宽加速下载,而在低速环境又保持良好的稳定性。

除了基础的文件下载与加速,EagleGet 的在线视频解析与下载也是其特色与重点功能,提供了强大的网页视频嗅探、下载能力,可以轻松下载在线视音频文件,目前对国外大部分视频网站支持良好,国内视频站我测试支持优酷、土豆、搜狐视频、酷6等视频网站。

EagleGet - EG Download Accelerator

EagleGet 目前支持 HTTP、HTTPS、FTP、MMS、RTSP 等协议,可集成到 IE、Firefox、Chrome 等浏览器中,接管文件与视频下载。如果你需要一个简单、高效的下载工具,那么 猎鹰/EagleGet 值得一试,清爽下载、极速体验,可以在一定程度上替代 Internet Download Manager,也有超越 IDM 的可能。

制作与使用说明

这是官方提供的 Portable 便携版,解压后以 install.bat,然后运行主程序 EagleGete.exe 即可,默认显示简体中文界面,2017/3/23 更新版本为 EagleGet Portable 2.0.4.20 正式版

全新的 猎鹰 EagleGet 2.x 提供了三种方式下载视频:

  • 安装浏览器扩展后,在浏览器中播放视频时,通过工具栏的 EagleGet 图标直接查看并下载视频
  • 通过视频抓取器 (Media Grabber) 直接解析视频地址,获得视频真实地址,类似 FLVCD 的解析方式;
  • 通过视频嗅探器 (Video Sniffer) 实时嗅探浏览器中正在进行的媒体流信息,并提取可用的视音频。

EagleGet 浏览器视频嗅探扩展安装

如果使用 EagleGet 便携版来嗅探并下载在线视频,请确保已手动安装并激活以下浏览器插件和扩展:

  1. Chrome 浏览器:手动拖放安装 addon\eagleget_cext@eagleget.com.crx 或到 Chrome 商店安装 EagleGet Free Downloader
  2. Firefox 40 以上版本:addon\eagleget_ffext@eagleget.com.xpi
  3. Firefox 40 以下版本:addon\prior_firefox_40_eagleget_ffext@eagleget.com.xpi

配置好软件后,访问视频播放页面,EagleGet 会自动嗅探视频地址,点击浏览器工具栏的 EagleGet 视频下载图标,就会查看已经嗅探到的视频文件和下载地址,直接点击文件名开始下载。

EagleGet Video Downloader

EagleGet 视频抓取功能 (Media Grabber)

点击 EagleGet 主界面的视频抓取按钮,打开 Media Grabber 功能。

EagleGet Media Grabber

然后输入要想下载的视频播放地址,点击「搜索」按钮就可以解析视频实际下载地址,并显示到列表中,选择视频品质后,点击「下载」按钮开始下载。

EagleGet Video Grabber

EagleGet Video Grabber 支持解析很多视频网站,可以到这里查看具体支持的视频网站列表,如果有 EagleGet 不能嗅探的视频,可以试试 FLVCD 硕鼠 视频解析下载工具。

EagleGet 2.0.4.20 更新日志

  1. Fixed extension cannot save the image
  2. Added the function to automatic combine video and audio streams for certain websites
  3. Added the ability to download new video formats
  4. Fixed cannot download videos properly on some websites
  5. Fixed other known issues

EagleGet is a Free universal download accelerator. Download video, music, documents, applications in Chrome, IE, and Firefox with single click. Support Facebook, Dailymotion, as well as many other web videos. Resume broken downloads and save your time.

猎鹰 EagleGet Portable 相关文件下载

软件开发商:EagleGet 官方网站
压缩包解压密码:www.portablesoft.org
压缩包MD5+扫描报告:46F686C487CDBE3ED2AEBD8DBF569304

开始下载 猎鹰 EagleGet 2.0.4.20 简体中文绿色便携版
EagleGet_2.0.4.20_PortableSoft.7z (4.55 MB)
来自精品绿色便携软件 | EagleGet (猎鹰) 2.0.4.20 下载页面 | 更多版本下载

开始下载 猎鹰 EagleGet 2.0.4.20 安装版
eagleget_setup.exe (6.1 MB)
来自精品绿色便携软件 | 下载 EagleGet 2.0.4.20 安装文件

Favicon for 开源中国社区最新新闻 11:59 年度大片:Stack Overflow 2017 开发者调查报告 » Post from 开源中国社区最新新闻 Visit off-site link

Stack Overflow 发布了 2017 开发者调查报告,此次有超过 64,000 名开发人员参与调查,分别对其技能、工具、学习趋势等数据进行了统计,现将其中一些有趣的数据和趋势撷取出来分享给大家。

一、开发角色

开发类型 

大约有四分之三的受访者是 web 开发人员,不过这其中也有许多人表示正在努力构建桌面应用和移动应用。

111824_hEE4_2896879.png

具体开发类型

111620_ZF1n_2896879.png

111635_WulN_2896879.png

111702_l563_2896879.png

二、开发经验

Web 和移动开发人员平均而言,比其他技术学科的开发人员(如系统管理和嵌入式编程)的专业编码经验要少得多。软件行业是新人才的主要孵化器,经验丰富的开发人员比例相对较低。

112203_KXcd_2896879.png

三、开发者推荐哪种学习方式?

想学习编程,但不知道从哪下手? 调查显示开发者建议先进行在线课程,然后买一本书练习。

 140110_E5Iw_2896879.png

四、编程语言

最常用编程语言

JavaScript 连续五年夺得最常用编程语言。 SQL 再次占据第二位,Java 第三。 但是,Python 在五年内首次超过了 PHP。

115124_dcIN_2896879.png

编程语言使用趋势

可以看到,Python 和 Node.js 等语言日益普及,而 C#和 C 语言的使用却在减少。

114644_VBIn_2896879.png

最喜欢的编程语言

Rust 连续两年成为最受欢迎的编程语言。Swift 去年排名第二,今年降至第四名。

115040_cEyH_2896879.png

最可怕的编程语言

Visual Basic 连续两年被评为最可怕的语言。最可怕的意思是,目前使用该技术的开发人员比例很高,表示没有兴趣继续做下去。

115157_MFM2_2896879.png

最希望使用的编程语言

Python 去年排名第四,今年已成为开发者最希望使用的语言。

115229_kR2m_2896879.png

五、开发技术和其他

框架、库

Node.js 和 AngularJS 仍然是这一类中最常用的技术。

114139_Ucg2_2896879.png

数据库

首次对数据库进行调查,MySQL 和 SQL Server 是最常用的。

114246_wj4L_2896879.png

平台

Windows 是开发人员最常用的平台,其次是 Linux 。

114500_e2uF_2896879.png

六、开发环境

Web 开发

140233_YGUh_2896879.png

桌面开发

140400_g3po_2896879.png

系统管理员/Devops

140435_vjSA_2896879.png

七、技术生态

技术被集中在几个不同的“生态系统”中:下图的左侧,一个是代表 Web 开发的大型集群(中心是 JavaScript ),一个是用微软技术群(以 C#和 Visual Studio 为中心)。右边,有一个连接着 Java、Android 和 iOS 的集群“星座”。

其他较小的相关集群包括 C / C ++ / Assembly、Raspberry Pi 与 Arduino,语言如 Python 和 R 以及特定的 IDE 。

Favicon for 开源中国社区最新新闻 11:51 koahub-cli 0.3.0 发布,Node.js 开发工具 » Post from 开源中国社区最新新闻 Visit off-site link

KoaHub CLI -- KoaHub.js的开发工具,自动Babel编译 ES6/7(Generator Function, Class, Async & Await)并且文件修改后自动重启。

特性

  1. 自动重启

  2. 自动Babel编译

  3. 自动创建控制器

  4. 自动创建koahub项目

  5. 支持全局命令行

  6. 支持模块启动

  7.  ...

更新

  1. 【新增】新增支持pm2启动

  2. 【新增】新增根据环境自动babel

  3. 【修改】修改koahub controller 模版文件

  4. ...

koahub.js官网, http://js.koahub.com

Favicon for 开源中国社区最新新闻 11:45 KoaHub.js 2.1.1 发布,Node.js Web 快速开发框架 » Post from 开源中国社区最新新闻 Visit off-site link

KoaHub.js -- 中文最佳实践Node.js Web渐进式快速开发框架。支持Koa.js, Express.js中间件。

    1.【优化】优化系统加载顺序

    2.【优化】优化代码性能

    3.【新增】新增空控制器

    4.【优化】优化控制器方法

    5.【修复】修复子控制器bug

...

koahub.js官网, http://js.koahub.com

koahub.js入门视频教程, 网盘:https://pan.baidu.com/s/1mi0TaFu(录的不好,还望海涵)

koahub.js简单cms,http://git.oschina.net/koahubjs/koahub-simple-cms

koahub.js微信商城系统,https://www.koahub.com/home/product/60

Favicon for 小众软件 - Appinn 11:30 Google Maps 新增了实时位置分享与导航功能 » Post from 小众软件 - Appinn Visit off-site link

几乎出国必备的地图应用 Google Maps 终于添加了实时位置分享功能,可以与好友共享位置,还能在两者间直接导航,到达后自动停止。@Appinn

为了实时共享位置,青小蛙没少折腾,比如 Glympse – 与家人和好友分享 GPS 位置及速度Swarmly – 向世界共享你的实时位置PathShare – 可以显示移动轨迹的「实时位置分享」应用 等等(更多:GPS 标签)。

原因都是为了让其他人了解你目前实时在哪里…

Google Maps 新增的功能可能会让以上这些应用很难过 🤷‍♀️,被巨头看上了都没办法。

你可以选择实时位置分享时间、分享对象,不会出现全世界都知道你在哪的情况,那个叫签到 Swarm 😂

如果要找人,两个人都开了分享,直接导航过去…

具体的,来看视频吧:

等等…

目前这个功能还没有全球开放,需要等一段时间,可以预计的是不出国基本就不要想用了,一个可能的选择是在 Android 端 开启「Google 位置记录」功能,iOS 端情况未知…


相关阅读


©2017 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南 | 反馈 | 代理(优惠码 Appinn)
b27c41ad47c2611d60d7452a4c02dd52
Site Meter

apppackge:

Favicon for 开源中国社区最新新闻 10:53 Mybatis-Plus 2.0.4 发布,mybatis 通用 mapper 插件 » Post from 开源中国社区最新新闻 Visit off-site link

Mybatis-Plus是一款MyBatis的增强 crud 工具包,简化 增 删 改 查 操作。启动加载 XML 配置时注入单表 SQL 操作 ,为简化开发工作、提高生产率而生。Mybatis-Plus 启动注入非拦截实现、性能更优。

使用说明帮助文档

应用实例 | Demo

Spring-MVC

Spring-Boot

SSM-实战 Demo

v2.0.4 更新文档 | Documentation

  • 优化Wrapper代码结构

  • 优化原有数据库连接获取

  • 解决Page初始化问题(之前只能通过构造方法生效,现在可以通过setget也可以生效)

  • 支持乐观锁插件

  • 改造Wrapper让JDBC底层来处理参数,更好的与PreparedStatement结合

  • 修复相关错误日志提示级别

  • Wrapper开放isWhere方法,现在可以自定义是否拼接"WHERE"

  • JDK版本向下兼容,之前相关代码用到了1.7新特性,当前版本解除

  • sqlserver生成bug修复以及代码优化

  • 优化MybatisPlus,SqlSession获取

  • 解决未配置切点的情况下获取的sqlSession提交不属于当前事务的问题以及多个sqlSession造成的事务问题

  • 增强执行sql类,sqlRunner

  • Model添加序列化ID,避免以后在修改Model后没有设置序列号ID时序列号ID可以会变动的情况

  • 添加重写默认BaseMapper测试用例

感谢各路小伙伴提问的好的建议以及贡献代码,就不一一点名了

Favicon for 小众软件 - Appinn 10:46 Relative Time – 追踪 macOS 上每一款应用的运行时间 » Post from 小众软件 - Appinn Visit off-site link

Relative Time 是一款 macOS 上非常简单的时间追踪应用,它能够显示每一款应用累计的运行时间以及排序,让你了解每一天你的时间都去哪了。@Appinn

真的是一款非常简单的小应用,以至于除了累计时间,并无任何其他功能。

而其数据位于:

~/Library/Containers/corgi.relativetime/Data/Library/Application Support/corgi.relativetime/timeslots.json

如果需要清零,把这个文件删掉就好了。

无联网权限。


相关阅读


©2017 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南 | 反馈 | 代理(优惠码 Appinn)
b27c41ad47c2611d60d7452a4c02dd52
Site Meter

apppackge:

Favicon for 开源中国社区最新新闻 10:33 Nginx 1.11.11 发布,高性能 Web 服务器 » Post from 开源中国社区最新新闻 Visit off-site link

Nginx 1.11.11 发布了,Nginx 是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。

更新内容:

  • Feature: the "worker_shutdown_timeout" directive.

  • Feature: vim syntax highlighting scripts improvements.

  • Bugfix: a segmentation fault might occur in a worker process if the 

    $limit_rate variable was set to an empty string.

  • Bugfix: the "proxy_cache_background_update",

     "fastcgi_cache_background_update", "scgi_cache_background_update", and "uwsgi_cache_background_update" directives might work incorrectly if the "if" directive was used.

  • Bugfix: a segmentation fault might occur in a worker process if 

    number of large_client_header_buffers in a virtual server was different from the one in the default server.

  • Bugfix: in the mail proxy server.

下载地址:

Favicon for ITeye资讯频道 09:57 图灵奖得主Alan Kay谈面向对象和函数式编程 » Post from ITeye资讯频道 Visit off-site link
引用
Alan Kay授权《程序员》整理翻译并本文。译/王江平
本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》

Alan Kay是当今世界计算机领域最重要的人物之一,他因面向对象编程方面的贡献和设计Smalltalk语言获得了2003年图灵奖。同时,他也是个人计算机(PC),图形用户界面(GUI)的先驱。今天我们使用的C/C++或Java语言都或多或少从Smalltalk汲取过养分。

他所研究的领域远超计算机,总能从更高层次看问题,他的想法又总是很宏大,也许你一开始并不理解他在说什么,但回头看总会有新收获,他的每篇文章和每个演讲都令人深受启发。

他讲话风趣且深刻,似乎随口说的一句话就能放进名言库里,你肯定听过这句话:“预测未来的最好方法就是创造未来——The best way to predict future is to invent it”。

理解“对象”的历程
关于“对象”(object)的理解,我经历了几个不同阶段。

第一阶段是50年前,在ARPA研究生院的开始几周,我的几种专业背景,数学、分子生物学、系统和程序设计等,与Sketchpad、Simula和ARPAnet这些东西产生了碰撞。这使我观察到,既然一台计算机可以分解成多台虚拟计算机,相互间持续通信,于是你便可以:
  • 完全保留表达式的威力;
  • 随时为任何可建模的东西建模;
  • 无限地伸缩,而不限于已有的分解计算机的方式。
我喜欢这些。分时运行的“进程”已是这种虚拟机的体现,但因为开销太大还缺少实际的通用性(那就寻找方法消除这些开销……)。

尽管可以为任何事物(包括数据结构)建模,对我来说这还远远不够。真正了不起的是为极端的可伸缩性需求提供松耦合的封装和消息机制(以一种类似生物和生态系统的方式)。

第二个阶段包括在“Lisp世界”中掺入Lisp本身,McCarthy关于机器人和时态逻辑的思想,在ARPA(尤其是在MIT)进行的AI工作,以及Carl Hewitt的PLANNER语言。有一种思想:对象可以像服务器一样,且可以是面向目标的,使用PLANNER类型的目标作为接口语言。

第三阶段是Parc的一系列Smalltalks,试图在Parc的Alto系统(128K内存,一半用于显示设备)所能实现的和未来必然需要的功能之间寻找一种实用的平衡。这项工作是与Dan Ingalls和组里其他一些天才的同事合作完成的。理想主义的小宇宙一直让我不爽,但从实用角度结果不错。

第四阶段(也是在Parc)是重新深入探讨时态逻辑和“世界线”(world-line)思想(后面细说)。

第五阶段是再次严肃地思考可伸缩性并重新审视“协作语言”(比如Gelernter的Linda),将它们看作以通用的发布和描述方式进行描述匹配,从而实现松耦合的一种方法。我仍然喜欢这种思想,并希望看它发展到对象可以真正“协商意义”的程度。

McCarthy的时态逻辑:“时间中的真正函数”
我对这一切的思考方式大部分都可追溯到上世纪50年代的John McCarthy。John是一位出色的数学家和逻辑学家。他希望自己能做严密一致的逻辑推理——同时希望他的程序和机器人也能做到。机器人是个关键:因为他想让机器人有时在费城,有时在纽约。按常规逻辑这会有问题,然而John针对“事实”成立时能表现“时帧”(time frame)的所有事实额外添加了一个参数,从而修正了这一问题。这就创建了一种简单的时态逻辑,将“事实集合”显现为世界线的层层堆栈。

这很容易泛化为“变量”、“数据”、“对象”……的世界线。从个体角度来看,值的“历史”替换了“值”,从系统角度来看,整个系统被表示为每当系统处于两次计算之间时它所处的稳定状态。Simula后来采用了这一思想的一个弱化但却实用的版本。

应当提一下Christopher Strachey(编者注:1916年-1965年,生于英国英格兰伦敦汉普斯敦,计算机科学家。他是指称语义最早的提出者之一,也是编程语言设计的先驱,发展了编程语言CPL)——Lisp和McCarthy的伟大粉丝,他认识到通过始终使用(来自前一时帧的)旧值来产生新值并安装在新的时帧中,很多种编程模型都可以统一起来且更加安全。认识到这一点是因为他首先观察到Lisp中“尾递归”是多么干净利落,然后又看到这样的尾递归写成某种循环的形式更易理解:循环中包含类似赋值的语句,其中右边从时间t中取值,被赋值的变量则存在于时间t+1中(且这样的赋值只允许一次)。这就统一了函数式编程和同时模拟时间和状态的“类命令式”编程。

也要提一下Ashcroft和Wadge设计的Lucid语言(编者注:一种数据流语言,用于非冯模型编程),该语言扩展了Strachey的许多思想。

另外,数据库中的“原子事务”也值得一看,思想很类似,只是粒度更粗——从来没有破坏什么,也不用竞争条件,新的版本以一种非破坏性的方式创建出来。其中有了版本的历史。

“时间是个好主意”,这是关键的一点——我们想要它,想用安全、合理的方式处理它——而这些方式中绝大部分(如果不是全部的话)都可以是处于稳定世界线状态序列之间的纯函数式事务。

“刚刚计算来的稳定状态”非常有用。它再也不会改变——因此它代表了系统模拟中的一个“版本”——且可以在产生下一个稳定状态的函数式转换中充当源数值。它还可以充当数据源,为那一刻的世界创建视觉效果。历史信息则可用于调试、撤消、回滚等需要。

在这种模型中,“稳定状态之间时间并不存在”:“时钟”只在新状态完成时走表。就程序而言,CPU本身并不充当时钟。对于具有内在、干净时间模型的确定性关系,这种思想带来一种非常简易的处理方式。

出于很多理由(但没有一个好的)这种维持安全的方法在上世纪60年代输给了在命令式编程中使用竞争条件,然后再通过可怕的、可能导致死锁的信号量来保护它们的做法。

某些时候,任何了解Lisp且对对象间的消息传递感兴趣的人都必然“运用”并注意到一种对象(一个lambda的“东西”,可以是一个闭包)可以捆绑到一组参数上(看起来有点像消息)。如果一个人知道Lisp 1.5是如何基于新式的延迟绑定参数求值来实现的,理解还会更深入。这里指的是FEXPR,而不是EXPR——未求值的表达式可作为参数传递,之后再求值。这使得不太优雅的“特殊形式”四处充斥,它们本来可以写成漂亮的惰式函数。

使用前述的时态建模,可以松掉“求值-应用”的耦合,通过安全的消息传递来获得时间层之间的函数式关系。于是,由于我一直喜欢从系统模拟的视角看待计算,我便把“对象”和“函数”看作两种互补的思想,它们并不冲突。

术语一旦成为宗教或更加严格的选择与风格,便会失去它们的意义。这里说的自然是“面向对象”和“函数式编程”这两个术语。我不会将“函数式编程”的一般概念跟任何特定语言等同起来。我坚持认为“函数思想”是一种可靠的映射。类似的,我也不会把“面向对象”的一般概念同任何特定语言等同起来。如今这两个术语被“殖民”了,意思也变了。

还有一个大问题是“对象”和“抽象数据类型”的混淆,以及对“数据”和“赋值语句”的固执。如果真正强化了封装,对象就可以根据需要处理设计参数(包括保存历史信息)。

分布式环境中的对象
有朋友问我现在如何理解分布式环境中的对象和系统模拟的,是否依然认为有可能构造一种系统,它既有互联网那样可以有机增长的规模,又有类似于虚拟时间的良好的、可预测的语义?

好问题。这里面有好几组问题及其权衡关系。二十世纪70年代Dave Reed(编者注:美国计算机科学家,UDP协议设计者)最初思考的是面向整个互联网的操作系统应具有什么样子。在他提出的许多有趣想法中,其中之一是通过由虚拟时间(pseudo-time)组织起来的分布式克隆计算来处理长延时和海量潜在用户的问题,然后慢速的互联网仅用于输入和偏差同步。这就是我们本世纪00年代早期在Croquet中实现的东西,那时互联网上一次典型的、还算不错的ping来回大约80到100毫秒。这已经好到可以无需任何服务器而创建《魔兽世界》这样的大规模并行游戏(甚至飞行仿真游戏)了,只要有玩家正在用着的那些机器就够了(分布式)。后来的版本做得更多更全面。

插一句,去掉实时图形和交互的Croquet便自动提供了一种分布式的面向对象数据库。虚拟时间是背后的大理念,保护着数据库中的分布式原子事务。

而且多年来人们一直在讨论。它能否实现?需要在哪些领域做多少工作?等等。

我们在Parc做过的与对象有关的工作就是ARPA/Parc社区中发生的网络思维的一部分,它最终产生了思考更高层网络实体的倾向。“网络层实体”的一个相当不错的、过渡性的实现是Gerry Popek在Parc花了一年时间思考“网终系统应有的样子”之后,和他在UCLA的团队一起完成的LOCUS系统。那是建立在异构机器类型之上的一种迁移式的负载平衡思想,与虚拟时间概念形成高度的互补。

我希望看到富有才华的团队把第二个问题再过一篇。对可伸缩规模的适应性很难事先预测,最好实际去实现它。对于虚拟时间,如果你了解它却不使用它,任何情况下我都觉得有点疯狂,而如果不了解它,那就有点业余了。在这两者之间,则是以各种“不二法门”为特征的宗教(而这跟任何科学都背道而驰)。

订阅2017年程序员(含iOS、Android及印刷版)请访问 http://dingyue.programmer.com.cn
94a30a43-2e1d-3375-a608-96b72b147bbb.png


感谢 jihong10102006 投递这篇资讯

声明:本文系ITeye网站发布的原创资讯,严禁任何网站转载本文,否则必将追究法律责任!

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for 开源中国社区最新新闻 08:25 还在为测试发愁?10 个开源的压力/负载测试工具 » Post from 开源中国社区最新新闻 Visit off-site link

负载/压力测试工具可以让你了解应用程序在负载/压力下的执行情况,它可以暴露其中的问题,并进行改进。因此,负载/压力测试是确保系统运行效率并不可少的部分。本文介绍了 10 个开源的负载/压力测试工具,欢迎补充。

Favicon for 开源中国社区最新新闻 08:24 每日一博 | Linux+Nginx+Asp.net Core 及守护进程部署 » Post from 开源中国社区最新新闻 Visit off-site link

这篇文章我将以 oss.offical.site 站点为例,主要介绍下在 linux 机器下完整的部署流程,.net core 在 docker 容器中的运行已经介绍,这里 .net core 运行环境我会介绍直接在 linux 运行的场景。

Favicon for 开源中国社区最新新闻 08:24 协作翻译 | C# 7 中的 Tuple 特性介绍 » Post from 开源中国社区最新新闻 Visit off-site link

Tuple是异类对象的有序序列。 我们经常可以写出返回多个值的方法,所以我们需要创建一个包含多个数据元素的简单结构。 为了支持这些情况,Tuple 被添加到 C#。 Tuple 是包含多个字段用来表示数据成员的轻量级数据结构。

Favicon for 开源中国社区最新新闻 08:23 GNOME 3.24 发布,新增 Night Light 模式 » Post from 开源中国社区最新新闻 Visit off-site link

082304_esJx_2720166.png

GNOME 3.24,GNOME 3 的最新版本现在发布了。新版本引入了已升级的平台和应用程序,包括一些主要的新功能和增强,以及许多较小的改进和 bug 修复。3.24 代表了 GNOME 的另一种进步,同时也为用户和开发者提供了很多东西。

Night Light 是该版本引入的新特性之一。该特性巧妙地根据一天中的时间来改变屏幕颜色,这有助于在晚上使用电脑时减少失眠。

081808_xzRW_2720166.png

使许多用户欣喜的另一个新特性是将天气信息并入通知区域,这里会显示当天天气的简单情况,以及天气应用程序的链接。

082243_RmRc_2720166.png

该版本还包括一个新的食谱应用程序,其中包含由 GNOME 社区成员提供的食谱。它具有广泛的功能,用于添加和编辑食谱、创建购物清单、调整数量,甚至配备免提的烹饪模式。

081825_bpFk_2720166.png

其他已经在 3.24 中改进的 GNOME 应用程序包括 Web, Photos, Polari, Games, Calendar 和 Calculator。“设置” 应用程序还有三个更新的设置页面。

还有另开发者感到兴奋的是,Builder 和 Flatpak 越来越成熟的状态。Builder 可以使用 Flatpak 作为一个非常简单和稳定的应用程序开发基础。随着 GNOME 越来越多的采用 Flatpak,这正在彻底改变 GNOME 开发者的经验。

081838_a03g_2720166.png

GNOME 3.24 代号为 “Portland(波特兰)”,代表去年的 LAS GNOME 组织团队。

有关 GNOME 3.24 的更多详细信息,请参阅发行说明

发布主页

参考链接:

http://www.omgubuntu.co.uk/2017/03/gnome-3-24-released-new-features

Favicon for 开源中国社区最新新闻 08:05 OSChina 周四乱弹 ——1000万没了!因这孩子在家这样 » Post from 开源中国社区最新新闻 Visit off-site link

比尔盖茨说:我总是会选择一个懒人去完成一份困难的工作。因为,他会找到捷径。

Favicon for 开源中国社区最新新闻 08:01 码云推荐 | MongoDB 事务处理包 mongo-tx » Post from 开源中国社区最新新闻 Visit off-site link

一个灵活可扩展的 nodejs 的 mongodb 事务处理包,支持出错回滚,事务锁,单文档级锁,ODM 无关。

Favicon for 开源中国社区最新新闻 08:00 Misago —— 基于 Django 和 React.js 开发的论坛 » Post from 开源中国社区最新新闻 Visit off-site link

Misago 是用 Python 、ES6 编写,基于 Django 和 React.js 框架开发的论坛系统。

Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 工作场合等地的文明礼仪 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

谷歌和微软详尽地公布了他们在工作礼仪和网络礼仪方面做出的研究成果。在此我们对他们的主要研究成果做了总结。

By Abel Avram Translated by 袁诗瑶
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 iOS 开发周报:Apple 新品线上发布、Weex iOS 运行原理 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

Apple 新品线上发布、Weex iOS 运行原理

By 靛青K
Favicon for 开源中国社区最新新闻 07:59 Ionic 2.3.0 发布,HTML5 移动应用框架 » Post from 开源中国社区最新新闻 Visit off-site link

Ionic 2.3.0 发布了,本次更新内容较多,看到还有对 IE 进行支持的改进。详细如下:

Bug 修复

  • alert: pass id to alert inputs (46fe1ff), closes #10603

  • datetime: don't always disable day values when dayValues is set (eff420f)

  • datetime: move the call to picker.refresh() in generate (58beea3)

  • datetime: respect time limits in hours and minutes (afd99ba), closes #6850

  • datetime: update selectedIndex according to ngModel value (74191c3)

  • infinite-scroll: add event.timeStamp polyfill for firefox (#10752) (53feb3f)

  • picker: initialize the selectionIndex (ba35306)

  • range: update the bar width correctly (b541832), closes #10150

  • range: only activate knob B if range is dual (d538245)

  • scroll-view: do not set initialized until it is enabled (#10817) (56364a0)

  • searchbar: add IE support (05859db)

  • select: make floating labels work for ion-select (8c483f2), closes #10751

  • slides: fix rtl support (e90d692)

  • slides: simulate touch events for query params (#10579) (e191321), closes #10577

  • toggle/checkbox: trigger ui update when using virtalScroll with Angular Reactive Forms (30980b6)

  • virtual-list: make virtual-scroll work with infinite-scroll (999efac), closes #9350 #9722 #9247 #10778

  • virtualscroll: populate the nodes at the correct height (51c398d)

特性

  • alert: add attributes min & max to alert inputs (d666e8b)

  • alert: add attributes min & max to alert inputs of type number (b53219a)

  • infinite: add scroll in opposite direction (#8099) (6918275)

  • infinite-scroll: add waitFor method to InfiniteScroll (84e25a1)

  • overlay: add method chaining pattern to configure overlays (bee75f7)

  • range: add ionFocus and ionBlur events (#10761) (8f310eb)

  • split-pane: support for side=right (963cdcb)

性能改进

  • content: scrollview magic 动态激活 (7e9bad5)

GitHub 发布主页

下载地址

Favicon for 开源中国社区最新新闻 07:49 IBM 联手 Red Hat 构建开源混合云环境 » Post from 开源中国社区最新新闻 Visit off-site link

074816_YKcj_2903254.jpg

IBM 和红帽公司近日宣布了一项战略合作,即构建基于 OpenStack 的开源混合云环境,以吸引企业客户选择 IBM 私有云来安装 Red Hat OpenStack Platform 和 Red Hat Ceph Storage。

带有 OpenStack API 的混合云基础设施

通过最新交易,IBM 和 Red Hat 将提供具有 OpenStack API 的混合云基础设施。 这两家公司还将通过 Red Hat Cloud Access 直接为其客户提供工作负载迁移选项。

IBM 云计算副总裁 Zane Adam 表示:“IBM 与红帽之间的战略合作旨在吸引客户使用开源产品和 OpenStack 云配件,同时保留现有投资并创造新的业务机会。”

扩大云服务市场份额

IBM 一直在试图扩展云服务。 该公司去年与 Dell EMC 所属的 VMware 合作,已经在其云端运行 VMware 管理平台。

随着开放源码软件占据云空间的主导地位,IBM 希望通过与市场领导者的合作来获得市场的成功。

混合云应用管理公司 Cloudsoft 已经通过在 IBM 的云解决方案中部署其 Red Hat Enterprise Linux 工作负载来使用组合服务。 这种用例可能会不断扩大。

Adam 总结说:“云端战略已经成为全球大多数企业客户的新常态,他们正在利用 IBM Cloud 作为数字转型的关键驱动力。“

编译自:OpenSource

Favicon for 开源中国社区最新新闻 07:48 中国公司统治 Pwn2Own 2017,Edge 安全性垫底 » Post from 开源中国社区最新新闻 Visit off-site link

在上周末举行的 Pwn2Own 2017 挑战赛上,你会看到清一色的中国人和清一色的中国公司。中国公司彻底统治了 Pwn2Own 2017。

074209_2II0_2903254.jpg

第一天,奇虎 360 安全团队成功利用了 Adobe Reade,腾讯安全团队成功利用了 Edge 和 Adobe Reader;

第二天,奇虎团队成功利用了  Adobe Flash 和 Apple Safari 、成功入侵 Apple macOS 和 Windows,腾讯安全团队成功利用了 Adobe Flash、 Edge(两次)、Apple Safari 和 成功入侵 Windows;

第三天,奇虎组合利用  Edge、Windows 内核漏洞逃脱虚拟机,腾讯安全团队也成功突破了 VMWare Workstation。

绝大多数成功者都是中国人或华人,Edge 是被黑了最多次数的浏览器,Chrome 没有被利用。   

来源:Solidot                 

Favicon for 开源中国社区最新新闻 07:48 Percona Server for MySQL 5.5.54-38.7 发布 » Post from 开源中国社区最新新闻 Visit off-site link

Percona Server for MySQL 5.5.54-38.7 发布了。Percona Server for MySQL 5.5.54-38.7 基于 MySQL 5.5.54,包括其中的所有错误修复,该版本现在是 5.5 系列中的稳定版本。更新内容如下:

Bugs 修复:

  • Log tracking initialization did not find last valid bitmap data correctly, potentially resulting in needless redo log retracking or hole in the tracked LSN range. Bug fixed #1658055.

其他 bug 修复: #1652912, and #1655587

Percona Server for MySQL 5.5.54-38.7 发布说明

下载地址

Favicon for 开源中国社区最新新闻 07:48 漏洞允许黑客在任何 Windows 版本上劫持防病毒软件 » Post from 开源中国社区最新新闻 Visit off-site link

安全公司Cybellum发现了一个新的零日攻击,使得黑客可以使用存在于所有Windows版本中的漏洞来控制在Windows系统上运行的防病毒软件,这个零日漏洞从Windows XP开始存在,一直延续到最新的Windows 10。

该公司今天发布的博客中解释说,大多数主要的防病毒解决方案都受到此漏洞的影响,包括Avast,AVG,Avira,Bitdefender,趋势科技,Comodo,ESET,F-Secure,卡巴斯基,McAfee,熊猫和诺顿。

073642_CVsF_2903254.png

这个零日漏洞被称为DoubleAgent,该漏洞利用了微软自己在Windows中提供的合法工具,并被命名为“Microsoft Application Verifier”(微软应用程序验证器),原本的目的为了帮助开发人员在应用程序中找到错误,该工具可以被劫持,用自定义验证器替换标准验证器,这使攻击者能够完全控制应用程序。

之后,下一步是为属于安全软件的进程注册一个受损害的DLL,从而为更多恶意活动打开门户,例如安装后门程序,添加排除,删除文件或甚至以典型的勒索软件进行攻击,加密受害者文件。

Cybellum表示已经通知了受影响的安全公司,但到目前为止,只有Malwarebytes和AVG发布了修复补丁。更糟糕的是,即使在用户重新启动系统或安装修补程序和更新后,DoubleAgent也具有注册代码的功能,从而非常难以删除恶意软件。通过一种新的持久化技术,DoubleAgent绕过了AV,NGAV和其他反病毒解决方案,并且使攻击者能够在没有时间限制的情况下执行攻击。

来源:cnBeta

Favicon for 开源中国社区最新新闻 07:40 AppCode 2017.1 RC2 发布,Bug 修复版本 » Post from 开源中国社区最新新闻 Visit off-site link

AppCode 2017.1 RC2 发布了,版本号为 171.3890.7。

该版本修复了以下问题:

点击这里查看发布说明

发布主页下载地址

Favicon for 开源中国社区最新新闻 07:33 Switch 差点运行 Android 系统:任天堂曾找 CM 定制 » Post from 开源中国社区最新新闻 Visit off-site link

任天堂公司曾经固执的表态称自己对移动平台不感兴趣,但近来《精灵宝可梦》、《超级马里奥RUN》先后登陆iOS和Android并大获成功让任天堂的手游野心显露无遗。

事实上,任天堂与Android之间还有着更加深刻的联系。

2015年6月Switch主机首次曝光时就有消息称其将运行Android系统,虽然这一传言最终被打破,但最新消息表明任天堂至少曾经尝试过为Switch安装一款定制版Android系统。

知名第三方Android定制系统团队CyanogenMod的执行主席Kirt McMaster在社交媒体上爆料称,任天堂曾找上门,要求为Switch主机开发一款定制版的Android系统。

同时,Kirt McMaster还强调,虽然Switch最终的操作系统并不算是Android,但可以肯定的是其某些组件的开发借鉴了Android的经验。

073231_ur89_2903254.jpg

073246_cEa8_2903254.jpg

来源:快科技

Favicon for 开源中国社区最新新闻 07:32 Rockstor 3.9.0 发布,基于 CentOS 的专家型 Linux 发行 » Post from 开源中国社区最新新闻 Visit off-site link

Rockstor 3.9.0 发布了,新版本主要是错误修复和改进现有功能。

但除了处理新功能和错误修复之外,还对代码质量进行了大量改进。phillxnet 对磁盘管理子系统进行了大量的改进。

我们已经对后端 Python 栈进行了大量的代码质量改进。MFlyer 与我们合作,并且还为所有的 JavaScript 栈做了同样的事情。

他做了几个忍者风格的贡献,并帮助修复了许多错误。我们这是一个很好的版本,包括了一些新的东西和一堆有用的维护更新。

项目发布公告中可以找到 Rockstor 3.9.0 的更改列表。

Download (MD5): Rockstor-3.9.0.iso (790MB, pkglist).

073218_eTPr_2720166.png

Rockstor 是基于 CentOS 的专家型 Linux 发行,它面向网络附加存储(NAS)和私有云存储解决方案而设计。

它基于流行的开源技术,例如 Btrfs 文件系统和使在软件容器内部署应用程序可自动化的 Docker。除了标准的 NAS 特性如基于 NFS 的文件共享、Samba、SFTP、 AFP 外,一些高级特性也得到了支持,例如在线卷管理、CoW快照、异步复制、压缩、bitrot保护等。

Rockstor 提供了额外的应用程序,包括 ownCloud、Syncthing、OpenVPN、Plex 等。这些应用程序(称为 Rock-ons)由基于 Docker 的软件供应框架所驱动。Rockstor 的用户界面用 JavaScript 编写,这使得通过网页浏览器来管理服务器变得简便。

Favicon for 开源中国社区最新新闻 07:19 iView v2.0.0-rc.6 发布,基于 Vue.js 的 UI 组件库 » Post from 开源中国社区最新新闻 Visit off-site link

iView v2.0.0-rc.6 发布了,iView 是一套基于 Vue.js 的 UI 组件库,主要服务于 PC 界面的中后台产品。

该版本主要更新如下:

  • Table 的上下文 prop:content 更名为 context

  • 修复 Table 在生产环境时,自定义单元格渲染上下文失效的bug #454

  • iCol 增加名称 Col

  • iForm 增加名称 Form

  • 修复 Input 使用 number 模式时,不能正确返回数字类型的bug

  • Card 增加内部间距 prop:padding @muei

  • Tag 增加 prop:name

下载地址

Favicon for 开源中国社区最新新闻 07:16 Cphalcon 3.1.0 发布,PHP 的 C 扩展 Web 框架 » Post from 开源中国社区最新新闻 Visit off-site link

Cphalcon 3.1.0 正式版发布了,Cphalcon 是一个开源的 Web 框架,作为 PHP 语言 C 扩展,它提供了更高的性能与更低的资源消耗。

本次更新内容如下:

  • Added Phalcon\Validation\Validator\CallbackPhalcon\Validation::getData

  • Added the ability to truncate database tables

  • Added Phalcon\Mvc\Model\Binder, class used for binding models to parameters in dispatcher, micro, added Phalcon\Dispatcher::getBoundModels and Phalcon\Mvc\Micro::getBoundModels to getting bound models, added Phalcon\Mvc\Micro\Collection\LazyLoader::callMethod

  • Added afterBinding event to Phalcon\Dispatcher and Phalcon\Mvc\Micro, added Phalcon\Mvc\Micro::afterBinding

  • Added the ability to set custom Resultset class returned by find() #12166

  • Added the ability to clear appended and prepended title elements (Phalcon\Tag::appendTitle, Phalcon\Tag::prependTitle). Now you can use array to add multiple titles. For more details check #12238.

  • Added the ability to specify what empty means in the 'allowEmpty' option of the validators. Now it accepts as well an array specifying what's empty, for example ['', false]

  • Added the ability to use Phalcon\Validation with Phalcon\Mvc\Collection, deprecated Phalcon\Mvc\Model\Validatorclasses

  • Added the value of the object intanceof Interface to Phalcon\Acl\Adapter\Memory

  • Added the ability to get original values from Phalcon\Mvc\Model\Binder, added Phalcon\Mvc\Micro::getModelBinderPhalcon\Dispatcher::getModelBinder

  • Added prepend parameter to Phalcon\Loader::register to specify autoloader's loading order to top most

  • Fixes internal cache saving in Phalcon\Mvc\Model\Binder when no cache backend is used

  • Fixed Phalcon\Session\Bag::remove to initialize the bag before removing a value #12647

  • Fixed Phalcon\Mvc\Model::getChangedFields to correct detect changes from NULL to Zero #12628

  • Fixed Phalcon\Mvc\Model to create/refresh snapshot after create/update/refresh operation #11007#11818#11424

  • Fixed Phalcon\Mvc\Model::validate to correctly set code message #12645

  • Fixed Phalcon\Mvc\Model to correctly add error when try to save empty string value to not null and not default column #12688

  • Fixed Phalcon\Validation\Validator\Uniqueness collection persistent condition

  • Fixed Phalcon\Loader::autoLoad to prevent PHP warning #12684

  • Fixed Phalcon\Mvc\Model\Query::_executeSelect to correctly get the column map #12715

  • Fixed params view scope for PHP 5 #12648

完整更新日志

下载地址

Favicon for 开源中国社区最新新闻 06:48 Docker v17.04.0-ce-rc1 发布,应用容器引擎 » Post from 开源中国社区最新新闻 Visit off-site link

Docker v17.04.0-ce-rc1 发布了,并将于 2017-04-05 发布 17.04.0-ce  版本。本次更新内容如下:

Client

  • Sort docker stack ls by name #31085

  • Flags for specifying bind mount consistency #31047

  • Suppressing image digest in docker ps #30848

  • Hide command options that are related to Windows #30788

  • Fix docker plugin install prompt to accept "enter" for the "N" default #30769

  • Add truncate function for Go templates #30484

  • Support expanded syntax of ports in stack deploy #30476

  • Support expanded syntax of mounts in stack deploy #30597 #31795

  • Add --add-host for docker build #30383

  • Add .CreatedAt placeholder for docker network ls --format #29900

  • Update order of --secret-rm and --secret-add #29802

  • Fix use of **/ in .dockerignore #29043

  • Add --filter enabled=true for docker plugin ls #28627

  • Add --format to docker service ls #28199

  • Add publish and expose filter for docker ps --filter #27557

  • Support multiple service IDs on docker service ps #25234

  • Allow swarm join with --availability=drain #24993

  • Removal of the email from docker login #26868

Networking

  • Check parameter --ip--ip6 and --link-local-ip in docker network connect #30807

  • Added support for dns-search #30117

  • Added --verbose option for docker network inspect to show task details from all swarm nodes #31710

Runtime

  • Handle paused container when restoring without live-restore set #31704

  • Do not allow sub second in healthcheck options in Dockerfile #31177

  • Support name and id prefix in secret update #30856

  • Use binary frame for websocket attach endpoint #30460

  • Fix linux mount calls not applying propagation type changes #30416

  • Fix ExecIds leak on failed exec -i #30340

  • Prune named but untagged images if danglingOnly=true #30330

  • Add daemon flag to set no_new_priv as default for unprivileged containers #29984

  • Add daemon option --default-shm-size #29692

  • Support registry mirror config reload #29650

  • Ignore the daemon log config when building images #29552

  • Move secret name or ID prefix resolving from client to daemon #29218

  • Implement optional ring buffer for container logs #28762

  • Allow adding rules to cgroup devices.allow on container create/run #22563

Swarm Mode

  • Add Service logs formatting #31672

  • Fix service logs API to be able to specify stream #31313

  • Add --stop-signal for service create and service update #30754

  • Add --read-only for service create and service update #30162

  • Renew the context after communicating with the registry #31586

Windows

  • Wait for OOBE to prevent crashing during host update #31054

  • Block pulling Windows images on non-Windows daemons #29001

下载

Favicon for 开源中国社区最新新闻 00:36 GitLab 9.0 发布,次级群组与部署面板功能上线 » Post from 开源中国社区最新新闻 Visit off-site link

GitLab 9.0 在经过 8.x 系列 18 个月的千锤百炼终于于北京时间 3 月 23 日 正式发布,国内清华大学的镜像源可能要延迟 1-2 天才会更新,但是使用 源码安装 的现在就可以升级到 9.0 了。

9.0 更新内容

次级群组

9.0 在接受用户反馈后,对组结构进行了升级,9.0 版本开放了次级群组的功能,我们可以在一个群组里面再创建一个或者多个次级群组,对代码仓库的权限区分更为细致。

次级群组是什么样子的呢,举例来说,比如我们已经存在一个 gitlab-nested 的群组,我们将它再细分为 design 设计团队,backend 后端团队,frontend 前端团队,而且我们还可以更细致的划分次级群组,如 design 的次级群组 uxmarketing

070620_wE7f_2720166.png

部署面板,企业版专供

提供了 CI/CD 系统可视化的界面,但是该功能仅企业版可用,这里也没必要多做介绍了,直接看图吧。

070633_S89p_2720166.png

更多更新内容请查看官方发布公告。

News stories from Wednesday 22 March, 2017

Favicon for 精品绿色便携软件 22:18 idoo Video Editor 3.6.0 便携版 - 强大的多功能视频编辑器 » Post from 精品绿色便携软件 Visit off-site link

idoo Video Editor 是一个视频编辑、剪辑工具箱,集成了多种视频编辑与剪辑功能:包括视频合并、视频切割/分割、视频剪切、视频裁切、视频添加字幕、视频加特效、视频旋转、视频加水印等,与本站介绍的 4Media Video EditorXilisoft Video Editor 一样都是集多种视频处理功能于一身。

它支持的视频与编码格式很丰富,基本常见的格式都能支持,包括 MOD, TOD, MTS, TS, M2TS, TP, TRP, M2P, 3GPP, 3GPP2, AVI, MOV, QT, SWF, MP2, MP3, Ogg, AAC, M4A, MP4, NUT, AC3, H261, M4V, YUV, RMVB, RM, RAM, IVR, WMA, WMV, ASF, MPG, MPEG, MPA, DAT, VOB, M2V, MPV, NSV, AIFF, MKV, F4V 等等,前提你要安装对应的编解码器,保证系统能正常播放。

idoo Video Editor Portable

idoo Video Editor 视频处理功能介绍

idoo Video Editor 主要有以下 9 个方面的功能:

idoo Video Editor Portable

  1. idoo Easy Video/Audio Cutter (简易视频/音频剪切器):可以选择并剪切喜欢的任意多个视频片断,剪掉不需要的片断,可精确到毫秒,与 Boilsoft Video Cutter 功能差不多。
  2. idoo Batch Video/Audio Cutter (批量视频/音频剪切器):可以导入多个视频,设置每一个视频要剪切的起始与结束时间,然后开始批量剪切。
  3. idoo Advanced Video Cutter (高级视频剪切器):除了基础的剪切功能之外,还可以进行裁切、旋转、添加特效、水印与字幕等功能。
  4. idoo Video/Audio Joiner (视频、音频合并器):将多个视频文件或片段合成为一个视频,支持众多格式,但应该不是无损合并,而 Boilsoft Video JoinerUltra Video Joiner 可以在满足一定条件下无损合并。
  5. idoo Video Cropper (视频裁切器):可通过设置上下左右间距,对视频画面裁切,仅保留需要的画面区域,裁切输出时可保留源视频格式。
  6. idoo Video/Audio Splitter (视频、音频分割器):快速的视频分割功能组件,可以根据时间片段、文件大小、均分、自定义分割点等方式,快速分割视频为多个文件片段;此类软件本站姐介绍过很多了,如 Ultra Video SplitterBoilsoft Video SplitterSmart CutterAVS Video ReMaker 等等,可以对比测试下。
  7. idoo Video Watermark (视频水印添加器):可谓已有视频添加文本或图片水印或标注,设置水印的起止时间、字体样式、透明度等属性,支持输出为源视频格式。
  8. idoo Video Effect (视频特效添加器):这部分功能相对简单,主要是设置视频亮度、对比度、饱和度等,不过同时还可以对视频进行剪切、裁切、旋转、添加水印与字幕等。
  9. idoo Video Subtitle (视频字幕添加器):可为视频添加 SRT 文本字幕和 ASS 特效字幕,可调整字母的垂直位置、字体样式与颜色等,支持输出为源视频格式;MKVToolNix 可以将视频、字幕等无损混流合并为 MKV 文件,也是不错的方法。

制作与使用说明

idoo Video Editor 便携版

已经做成绿色便携版,直接运行 idooVideoEditorPortable.exe 即可,2017/3/22 更新版本为 idoo Video Editor 3.6.0。

idoo Video Editor 提供的是相对基础的视频处理功能,如果要实现更复杂的效果、剪辑精美影片 MV 等,推荐使用 AVS Video Editor会声会影PremiereAfter Effects 等非线性编辑软件。

idoo Video Editor 3.6.0 更新日志

  1. Support newest flash player
  2. Fixed some issue on batch video cutter
  3. Fixed some issue on play mov files
  4. Fixed the brightness issue
  5. Fixed the issue when joining video files quickly
  6. Add "F4V" file format support
  7. Optimized the logic of transition effect joiner
  8. Fixed the issue that the video and audio do not sync after advanced cutter
  9. Optimized the logic of video key frame

Edit videos to Any Video Format and Do It All: Joint any video or audio while make advanced settings, Split the video and audio into parts as you need, Cut the video and audio individually or in batch, It enables you to trim any part of a video to get the exact frame you like, Watermark your video with any characters and images.

idoo Video Editor Portable 相关文件下载

软件开发商:idoo 官方网站
压缩包解压密码:www.portablesoft.org
压缩包MD5+扫描报告:18B4F35CF2446510DDCB8FD16EF4D637

开始下载 idoo Video Editor 3.6.0 绿色便携版 (Portable)
idooVideoEditor_3.6.0_PortableSoft.7z (17.91 MB)
来自精品绿色便携软件 | idoo Video Editor 3.6.0 下载页面 | 更多版本下载

开始下载 idoo Video Editor 1.6.0 绿色便携版 (限时免费赠送版)
idooVideoEditor_1.6.0_PortableSoft.7z (11.6 MB)
来自精品绿色便携软件 | idoo Video Editor 1.6.0 便携版 下载页面

Favicon for 开源中国社区最新新闻 21:49 php-beast Windows 版本发布,PHP 源码加密扩展 » Post from 开源中国社区最新新闻 Visit off-site link

php-beast Windows 版本发布了。

此次更新主要增加到 Windows 平台的支持,可以在 VS11 和 VS14 版本上编译。之前不支持 Windows 平台是 beast 的痛,感谢 马犇 @imaben (https://github.com/imaben)的支持。

Windows 版本的使用方式跟 Linux 版本一样。

Favicon for 小众软件 - Appinn 21:03 LocationReportEnabler – 最简单的开启「Google 位置记录」功能 » Post from 小众软件 - Appinn Visit off-site link

LocationReportEnabler 是一个简单的 Android 应用,需要 root 权限,用来开启 Google 位置记录Google Now 等一些在中国被限制的功能。@Appinn

有两个版本,root 和 Xposed 版本,按需索取。

安装后就只有上面的界面,再无其他功能。非常简单。


相关阅读


©2017 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南 | 反馈 | 代理(优惠码 Appinn)
b27c41ad47c2611d60d7452a4c02dd52
Site Meter

apppackge:

Favicon for 开源中国社区最新新闻 20:06 Yar 2.0.2 发布,并行 RPC 框架 » Post from 开源中国社区最新新闻 Visit off-site link

Yar 已于 2017.3.15 发布了 2.0.2 版本。该版本的更新主要是:

  • Fixed issue #98 (Memeory exhuasted while using with Yaf)

下载地址

Favicon for ITeye资讯频道 16:45 RedMonk 一季度编程语言排行榜,Python 反超 PHP » Post from ITeye资讯频道 Visit off-site link
RedMonk 发布了 2017 年一季度的编程语言排行榜:JavaScript 依然稳居榜首,Java 紧随其后;PHP 在此榜单上首次出现下降,被 Python 反超,但仍然很受欢迎,排名第四;Ruby 从第五名降至第七;TypeScript 首次进入前二十强。

RedMonk 编程语言排行榜是追踪编程语言在 GitHub 和 Stack Overflow 上的代码使用和讨论数量来统计的,以挖掘潜在的未来语言采用趋势。该榜单每年发布两次,上一次发布是在去年的 7 月份

具体统计情况请直接查看榜单说明

2017 Q1 排行榜图表:
150df03a-080e-3179-a5b4-b2f509ce14ef.png

根据上面的图表,很难分析大体情况,所以提供了下面的数字排名。请注意,由于存在并列情况,下面列出的其实是前 23 名的编程语言:
JavaScript、Java 、Python 、PHP 、C#、 C ++ 、 CSS 、 Ruby 、 C、 Objective-C 、Scala 、 Shell 、Swift 、 R 、Go 、 Perl 、TypeScript、PowerShell 、 Haskell 、 Clojure 、 CoffeeScript 、 Lua 、 Matlab

除了前十,值得关注的变化有:
  • R:统计学、数据科学和其他分析类型的首选语言,曾多期稳定在 13 名的位置,上一期爬到了第 12 名,这次又回落至第 14 名。
  • Swift:苹果在 2014 年年中引入的开源编程语言,在图表中迅速上升,此次达到第 11 名,与 Scala 和 Shell 并列。RedMonk 称其是从做榜单以来,排名上涨最快的语言。
  • Go:稳定在第 15 名。
  • TypeScript:首次进入前 20,虽没有具体去探索这其中的因由,但有理由认为是 Angular 在发挥作用。
  • Rust:同样是涨幅极大的语言之一,从榜单的第 47 名跳至第 26 名。后续有待观察其潜力,看能否进入前20名的行列。
  • PowerShell:从上期的 25 名挤入现在的第 18 名。


感谢 jihong10102006 投递这篇资讯

资讯来源:oschina

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for 小众软件 - Appinn 16:12 Hermit – 给你喜爱的网站创建轻量级「精简版应用」 [Android] » Post from 小众软件 - Appinn Visit off-site link

Hermit 是一款用来给任何网页创建轻量级的精简版应用的应用,无论该网站是否有自己的手机应用,你都可以为它生成一个轻应用。@Appinn

智能手机应用可能已经发展到瓶颈了,一方面大量的应用让消费者无所适从,另一方面怪兽级巨型应用统治了手机,而用户需要的,往往只是一个功能,却安装了不知道有多少功能的应用。

而在 Android 即搜即得应用 普及前,可以试试 Hermit 提供的将网页创建为轻应用方式。

其实也没那么复杂,Hermit 就是利用自身将网页封装了起来,并且集成了如通知、书签、搜索、分享、全屏、不跟踪、AMP 等功能。

免费版本只能创建两个轻应用,高级版本不限制,另外并没有其他功能限制。

要创建轻应用很简单,只需要输入网址就可以了,然后在做一些设置,就得到了一个看起来和真应用一样的轻应用

青小蛙发誓不知道那个恶意软件是啥….

基本上能随心定制出喜欢的样式,甚至可以整合搜索、通知(基于 RSS):

当制作完成后,除了自己使用,也可以将应用分享给别人,不过还是需要安装 Hermit 才可以使用,这点比较遗憾,如果能脱离 Hermit 独立发布,那就逆天了。

另外,Hermit 不会有后台进程,不跟踪使用者,无隐私泄漏问题,原生支持 AMP 加速网页,省电,可以控制 JavaScript 开关、图片开关,创建的应用程序很小,只有 2MB。

要去试试么?


©2017 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南 | 反馈 | 代理(优惠码 Appinn)
b27c41ad47c2611d60d7452a4c02dd52
Site Meter

apppackge:

Favicon for 开源中国社区最新新闻 15:47 Android 原生开发工具包 NDK r14 发布 » Post from 开源中国社区最新新闻 Visit off-site link

NDK (Native Development Kit) ,Android 原生开发工具包,是一个包含 API、交叉编译器、链接程序、调试器、构建工具、文档和示例应用程序的综合工具集。

最新版本的 Android NDK r14,现在可供下载,也可通过 Android Studio 在 SDK 管理器中使用。

r14 的完整更新日志可以在这里看到,重点包括以下内容: 

  • 统一所有平台的 headers(详情

  • LTO 和 Clang 现在可以在 Darwin 和 Linux 上工作

  • libc ++ 更新

  • RenderScript 回归

154939_w9ui_2896879.png

Favicon for 开源中国社区最新新闻 15:12 O-MG,Google 发布 Android O 开发者预览版! » Post from 开源中国社区最新新闻 Visit off-site link

今天,Google 对外推出了 Android O (Android 8.0)操作系统的首个开发者预览版,并可供下载。同时,Google 也表示该版本还有很多性能和稳定性的工作待完成,不建议消费者日常使用。

144423_NijD_2896879.png

What's new in O?

后台限制:对后台服务、位置更新,以及被动式通知等进行限制,提升续航。

通知渠道:用户将获得对不同类型通知的细粒度控制 - 用户可以单独阻止或更改每个渠道的行为,而不是一起管理所有应用的通知。

144652_4rgE_2896879.png 144703_ozob_2896879.png

自动填充 APIs:用户可以选择自动填充应用,存储和保护用户数据,如地址、用户名,甚至密码。

画中画模式和新的窗口功能:可以指定宽高比和自定义交互(如播放/暂停)。新的窗口功能包括采用新应用覆盖窗口,而不再是系统警报窗口,以及远程的多显示器支持。

XML 字体资源:应用程序现在可以在 XML 布局中使用字体,也可以在 XML 中定义字体 - 声明字体样式以及字体文件大小。

自适应图标:基于设备显示自适应图标。


宽色域:要显示宽色域图片,应用需要在其清单(每个活动)中启用标记,并使用嵌入式宽色配置文件(AdobeRGB、Pro Photo RGB、DCI-P3 等)加载位图。

连接:支持高品质的蓝牙音频编解码器,如 LDAC 编解码器。增加了新的 Wi-Fi 功能,如 Wi-Fi Aware。在具有适当硬件的设备上,可通过 Wi-Fi 和附近的设备通信。

键盘导航:无需再切换应用,直接通过键盘操作进行相关操作。

AAudio API for Pro Audio:专为需要高性能、低延迟音频的应用程序而设计。

WebView 功能改进:默认启用多处理模式,并添加一个 API,让应用处理错误和崩溃,以提高安全性和稳定性。

Java 8 APIs 和运行时优化:支持几种新的 Java 语言 API,包括新的 java.time API。此外,Android 运行时比以前更快,在某些应用程序基准上的改进高达 2x。

合作伙伴平台贡献:合作伙伴加快了 O 版本的修复和改进。例如,索尼已经提供了超过 30 个功能改进和 250 个 Bug 修复。

更多详细的内容请查看官方博文

最后,小编还是很想知道,Android O 到底是不是叫“奥利奥”???

Favicon for 开源中国社区最新新闻 14:42 lyadmin_v2 beta 2 版本发布,模块化通用后台 » Post from 开源中国社区最新新闻 Visit off-site link

lyadmin_v2 beta2 版本正式发布,模块化通用后台。

lyadmin是一套轻量级通用后台,采用Bootstrap3制作,自带权限管理,模块化开发。支持多标签和经典模式两种后台一键切换,满足不同用户不同项目的实际需求,非常适合作为项目的基础后台。

lyadmin非常轻量,它没有过多的第三方js库,仅仅引用了jquery、lyui、kindeditor三个js库,其中lyui是我们基于bootstrap独家定制的ui,成熟后也会单独作为开源项目供大家使用。

本次更新主要修复了大家在beta2中遇到的安装问题,样式不加载问题,builder报错等问题。

码云地址:http://git.oschina.net/jry/lyadmin_v2

lyadmin_v2截图:

注意:下图彩色的许多模块,仅为了展示lyadmin的高度扩展性,源码自带的只有核心模块。

Favicon for ITeye资讯频道 14:14 我眼中的 JavaScript 函数式编程 » Post from ITeye资讯频道 Visit off-site link
a210dd67-0a76-3ebf-82e5-c7f7abef054a.png

JavaScript 函数式编程是一个存在了很久的话题,但似乎从 2016 年开始,它变得越来越火热。这可能是因为 ES6 语法对于函数式编程更为友好,也可能是因为诸如 RxJS (ReactiveX) 等函数式框架的流行。

看过许多关于函数式编程的讲解,但是其中大部分是停留在理论层面,还有一些是仅针对 Haskell 等纯函数式编程语言的。而本文旨在聊一聊我眼中的函数式编程在 JavaScript 中的具体实践,之所以是 “我眼中的” 即我所说的仅代表个人观点,可能和部分 严格概念 是有冲突的。

本文将略去一大堆形式化的概念介绍,重点展示在 JavaScript 中到底什么是函数式的代码、函数式代码与一般写法有什么区别、函数式的代码能给我们带来什么好处以及常见的一些函数式模型都有哪些。

我理解的函数式编程
我认为函数式编程可以理解为,以函数作为主要载体的编程方式,用函数去拆解、抽象一般的表达式

与命令式相比,这样做的好处在哪?主要有以下几点:
  • 语义更加清晰
  • 可复用性更高
  • 可维护性更好
  • 作用域局限,副作用少
基本的函数式编程
下面例子是一个具体的函数式体现
// 数组中每个单词,首字母大写
// 一般写法
const arr = ['apple', 'pen', 'apple-pen'];
for(const i in arr){
  const c = arr[i][0];
  arr[i] = c.toUpperCase() + arr[i].slice(1);
}

console.log(arr);


// 函数式写法一
function upperFirst(word) {
  return word[0].toUpperCase() + word.slice(1);
}

function wordToUpperCase(arr) {
  return arr.map(upperFirst);
}

console.log(wordToUpperCase(['apple', 'pen', 'apple-pen']));


// 函数式写法二
console.log(arr.map(['apple', 'pen', 'apple-pen'], word => word[0].toUpperCase() + word.slice(1)));

当情况变得更加复杂时,表达式的写法会遇到几个问题:
  • 表意不明显,逐渐变得难以维护
  • 复用性差,会产生更多的代码量
  • 会产生很多中间变量
函数式编程很好的解决了上述问题。首先参看 函数式写法一,它利用了函数封装性将功能做拆解(粒度不唯一),并封装为不同的函数,而再利用组合的调用达到目的。这样做使得表意清晰,易于维护、复用以及扩展。其次利用 高阶函数,Array.map 代替 for…of 做数组遍历,减少了中间变量和操作。

函数式写法一 函数式写法二 之间的主要差别在于,可以考虑函数是否后续有复用的可能,如果没有,则后者更优。

链式优化
从上面 函数式写法二 中我们可以看出,函数式代码在写的过程中,很容易造成 横向延展,即产生多层嵌套,下面我们举个比较极端点的例子。
// 计算数字之和

// 一般写法
console.log(1 + 2 + 3 - 4)


// 函数式写法
function sum(a, b) {
  return a + b;
}

function sub(a, b) {
  return a - b;
}

console.log(sub(sum(sum(1, 2), 3), 4);

本例仅为展示 横向延展 的比较极端的情况,随着函数的嵌套层数不断增多,导致代码的可读性大幅下降,还很容易产生错误。

在这种情况下,我们可以考虑多种优化方式,比如下面的 链式优化
// 优化写法 (嗯,你没看错,这就是 lodash 的链式写法)
const utils = {
  chain(a) {
    this._temp = a;
    return this;
  },
  sum(b) {
    this._temp += b;
    return this;
  },
  sub(b) {
    this._temp -= b;
    return this;
  },
  value() {
    const _temp = this._temp;
    this._temp = undefined;
    return _temp;
  }
};

console.log(utils.chain(1).sum(2).sum(3).sub(4).value());

这样改写后,结构会整体变得比较清晰,而且链的每一环在做什么也可以很容易的展现出来。函数的嵌套和链式的对比还有一个很好的例子,那就是 回调函数 Promise 模式
// 顺序请求两个接口


// 回调函数
import $ from 'jquery';
$.post('a/url/to/target', (rs) => {
  if(rs){
    $.post('a/url/to/another/target', (rs2) => {
      if(rs2){
        $.post('a/url/to/third/target');
      }
    });
  }
});


// Promise
import request from 'catta';  // catta 是一个轻量级请求工具,支持 fetch,jsonp,ajax,无依赖
request('a/url/to/target')
  .then(rs => rs ? $.post('a/url/to/another/target') : Promise.reject())
  .then(rs2 => rs2 ? $.post('a/url/to/third/target') : Promise.reject());

随着回调函数嵌套层级和单层复杂度增加,它将会变得臃肿且难以维护,而 Promise 的链式结构,在高复杂度时,仍能纵向扩展,而且层次隔离很清晰。

常见的函数式编程模型
闭包(Closure)
引用
可以保留局部变量不被释放的代码块,被称为一个闭包

闭包的概念比较抽象,相信大家都或多或少知道、用到这个特性

那么闭包到底能给我们带来什么好处?

先来看一下如何创建一个闭包:
// 创建一个闭包
function makeCounter() {
  let k = 0;

  return function() {
    return ++k;
  };
}

const counter = makeCounter();

console.log(counter());  // 1
console.log(counter());  // 2

makeCounter 这个函数的代码块,在返回的函数中,对局部变量 k ,进行了引用,导致局部变量无法在函数执行结束后,被系统回收掉,从而产生了闭包。而这个闭包的作用就是,“保留住“ 了局部变量,使内层函数调用时,可以重复使用该变量;而不同于全局变量,该变量只能在函数内部被引用。

换句话说,闭包其实就是创造出了一些函数私有的 ”持久化变量“。

所以从这个例子,我们可以总结出,闭包的创造条件是:
  • 存在内、外两层函数
  • 内层函数对外层函数的局部变量进行了引用
闭包的用途
闭包的主要用途就是可以定义一些作用域局限的持久化变量,这些变量可以用来做缓存或者计算的中间量等等。
// 简单的缓存工具
// 匿名函数创造了一个闭包
const cache = (function() {
  const store = {};
  
  return {
    get(key) {
      return store[key];
    },
    set(key, val) {
      store[key] = val;
    }
  }
}());

cache.set('a', 1);
cache.get('a');  // 1

上面例子是一个简单的缓存工具的实现,匿名函数创造了一个闭包,使得 store 对象 ,一直可以被引用,不会被回收。

闭包的弊端
持久化变量不会被正常释放,持续占用内存空间,很容易造成内存浪费,所以一般需要一些额外手动的清理机制。

高阶函数
引用
接受或者返回一个函数的函数称为高阶函数

听上去很高冷的一个词汇,但是其实我们经常用到,只是原来不知道他们的名字而已。JavaScript 语言是原生支持高阶函数的,因为 JavaScript 的函数是一等公民,它既可以作为参数又可以作为另一个函数的返回值使用。

我们经常可以在 JavaScript 中见到许多原生的高阶函数,例如 Array.map , Array.reduce , Array.filter

下面以 map 为例,我们看看他是如何使用的

map (映射)
引用
映射是对集合而言的,即把集合的每一项都做相同的变换,产生一个新的集合

map 作为一个高阶函数,他接受一个函数参数作为映射的逻辑
// 数组中每一项加一,组成一个新数组

// 一般写法
const arr = [1,2,3];
const rs = [];
for(const n of arr){
  rs.push(++n);
}
console.log(rs)


// map改写
const arr = [1,2,3];
const rs = arr.map(n => ++n);

上面一般写法,利用 for...of 循环的方式遍历数组会产生额外的操作,而且有改变原数组的风险

而 map 函数封装了必要的操作,使我们仅需要关心映射逻辑的函数实现即可,减少了代码量,也降低了副作用产生的风险。

柯里化(Currying)
引用
给定一个函数的部分参数,生成一个接受其他参数的新函数

可能不常听到这个名词,但是用过 undescore 或 lodash 的人都见过他。

有一个神奇的 _.partial 函数,它就是柯里化的实现
// 获取目标文件对基础路径的相对路径


// 一般写法
const BASE = '/path/to/base';
const relativePath = path.relative(BASE, '/some/path');


// _.parical 改写
const BASE = '/path/to/base';
const relativeFromBase = _.partial(path.relative, BASE);

const relativePath = relativeFromBase('/some/path');

通过 _.partial ,我们得到了新的函数 relativeFromBase ,这个函数在调用时就相当于调用 path.relative ,并默认将第一个参数传入 BASE ,后续传入的参数顺序后置。

本例中,我们真正想完成的操作是每次获得相对于 BASE 的路径,而非相对于任何路径。柯里化可以使我们只关心函数的部分参数,使函数的用途更加清晰,调用更加简单。

组合(Composing)
引用
将多个函数的能力合并,创造一个新的函数

同样你第一次见到他可能还是在 lodash 中,compose 方法(现在叫 flow)
// 数组中每个单词大写,做 Base64


// 一般写法 (其中一种)
const arr = ['pen', 'apple', 'applypen'];
const rs = [];
for(const w of arr){
  rs.push(btoa(w.toUpperCase()));
}
console.log(rs);


// _.flow 改写
const arr = ['pen', 'apple', 'applypen'];
const upperAndBase64 = _.partialRight(_.map, _.flow(_.upperCase, btoa));
console.log(upperAndBase64(arr));

_.flow 将转大写和转 Base64 的函数的能力合并,生成一个新的函数。方便作为参数函数或后续复用。

自己的观点
我理解的 JavaScript 函数式编程,可能和许多传统概念不同。我并不只认为 高阶函数 算函数式编程,其他的诸如普通函数结合调用、链式结构等,我都认为属于函数式编程的范畴,只要他们是以函数作为主要载体的。

而我认为函数式编程并不是必须的,它也不应该是一个强制的规定或要求。与面向对象或其他思想一样,它也是其中一种方式。我们更多情况下,应该是几者的结合,而不是局限于概念。

参考资料


感谢 jihong10102006 投递这篇资讯

资讯来源:化辰

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for 小众软件 - Appinn 12:39 尝鲜:Android O 开发者预览版已经可以下载,支持部分 Nexus 与 Pixel 设备 » Post from 小众软件 - Appinn Visit off-site link

最新版本的 Android O 系统的开发者预览版镜像已经可以下载了,目前支持 Nexus 5X, Nexus 6P, Nexus Player, Pixel, Pixel XL and Pixel C。@Appinn

喜欢尝鲜的同学可以行动了,在这里下载:

https://developer.android.com/preview/download.html

Android O 包含一些主要变化:

更严格的后台进程,让设备更加省电,增强通知,可以在里面做更多事情了,画中画视频、自动填充 API(比如密码管理器)等等,可以在官博看到。

青小蛙觉得,Android O 应该就是 Android 8 了吧 😂


相关阅读


©2017 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南 | 反馈 | 代理(优惠码 Appinn)
b27c41ad47c2611d60d7452a4c02dd52
Site Meter

apppackge:

Favicon for ITeye资讯频道 10:09 《程序员》精选:在Node.js中看JavaScript的引用 » Post from ITeye资讯频道 Visit off-site link
引用
作者简介:黄鼎恒,饿了么Node Team负责人,Node/C程序员,饿了么前端实时监控系统主要开发者。
责编: 陈秋歌,欢迎技术投稿、给文章纠错,请发邮件至chenqg@csdn.net,或加微信:Rachel_qg。
声明: 本文为《程序员》原创文章,未经允许请勿转载,更多精彩文章请订阅 2017 年《程序员》

导读:对于从PHP转到Node.js的作者而言,Node.js编辑完代码后必须重启真是件麻烦事。在不重启情况下热更新Node.js代码,是本文重要讨论的话题。而解决该问题,JavaScript的引用成为了关键。层层剖析,抽丝剥茧,带你了解问题本质及解决之道。

早期学习Node.js的时候,有挺多是从PHP转过来的,当时有部分人对于Node.js编辑完代码需要重启一下表示麻烦(PHP不需要这个过程),于是社区里的朋友就开始提倡使用node-supervisor这个模块来启动项目,可以编辑完代码之后自动重启。不过相对于PHP而言依旧不够方便,因为Node.js在重启以后之前的上下文都丢失了。

虽然可以通过将session数据保存在数据库或者缓存中来减少重启过程中的数据丢失,不过如果是在生产的情况下,更新代码的重启间隙是没法处理请求的(PHP可以,另外那个时候还没有cluster)。由于这方面的问题,加上本人是从PHP转到Node.js的,于是从那时开始思考有没有办法可以在不重启的情况下热更新Node.js的代码。

最开始把目光瞄向了require这个模块。想法很简单,因为Node.js中引入一个模块都是通过require这个方法来加载的。于是就开始思考require能不能在更新代码之后再次require一下。尝试如下:
var express = require('express');
var b = require('./b.js');

var app = express();

app.get('/', function (req, res) {
  b = require('./b.js');
  res.send(b.num);
});

app.listen(3000);

exports.num = 1024;

两个JS文件写好之后,从a.js启动,刷新页面会输出b.js中的1024,然后修改b.js文件中导出的值,例如修改为2048。再次刷新页面依旧是原本的1024。

再次执行一次require并没有刷新代码。require在执行的过程中加载完代码之后会把模块导出的数据放在require.cache中。require.cache是一个{}对象,以模块的绝对路径为key,该模块的详细数据为value。于是便开始做如下尝试:
var path = require('path');
var express = require('express');
var b = require('./b.js');

var app = express();

app.get('/', function (req, res) {
  if (true) { // 检查文件是否修改
    flush();
  }
  res.send(b.num);
});

function flush() {
  delete require.cache[path.join(__dirname, './b.js')];
  b = require('./b.js');
}

app.listen(3000);

在再次require之前将require之上关于该模块的cache清理掉之后,用之前的方法再次测试。结果发现,可以成功的刷新b.js的代码,输出新修改的值。

了解这个点,原本以为通过这个原理就可以写一个跟node-supervisor类似的模块,将起重启的部分换成通过该原理刷新就可以写一个更好的。但是在实际的开发过程中马上就碰到了问题。在封装模块的过程中,出于情怀的原因考虑提供一个类似PHP中include的函数来代替require去引入一个模块。实际内部依旧是使用require去加载。以b.js为例,原本的写法就写作var b = include(‘./b’),在文件b.js更新之后include内部可以自动刷新,让外面拿到最新的代码。

但是实际的开发过程中,这样很快就碰到了问题。我们希望的代码可能是这样:
var include = require('./include');
var express = require('express');
var b = include('./b.js');
var app = express();

app.get('/', function (req, res) {
  res.send(b.num);
});

app.listen(3000);

但是在按照这个目标封装include的时候,我们发现了问题。无论我们在include.js内部中如何实现,都不能像开始那样让拿到新的b.num。

对比开始的代码,我们发现问题出在少了b = xx。也就是说这样写才可以:
var include = require('./include');
var express = require('express');
var app = express();

app.get('/', function (req, res) {
  var b = include('./b.js');
  res.send(b.num);
});

app.listen(3000);

修改成这样就可以保证每次能可以正确的刷新到最新的代码,并且不用重启实例了。读者有兴趣的可以研究这个include怎么实现,本文就不深入讨论了,因为这个技巧使用度不高,写起起来不是很优雅①,反而这之间有一个更重要的问题————JavaScript的引用。

JavaScript的引用与传统引用的区别
要讨论这个问题,我们首先要了解JavaScript的引用于其他语言中的一个区别,在C++中引用是直接可以修改外部的值:
#include <iostream>

using namespace std;

void test(int &p) // 引用传递
{
    p = 2048;
}

int main()
{
    int a = 1024;
    int &p = a; // 设置引用p指向a

    test(p); // 调用函数

    cout << "p: " << p << endl; // 2048
    cout << "a: " << a << endl; // 2048
    return 0;
}


而在JavaScript中:
var obj = { name: 'Alan' };

function test1(obj) {
  obj = { hello: 'world' }; // 试图修改外部obj
}

test1(obj);
console.log(obj); // { name: 'Alan' } // 并没有修改②

function test2(obj) {
  obj.name = 'world'; // 根据该对象修改其上的属性
}

test2(obj);
console.log(obj); // { name: 'world' } // 修改成功③

我们发现与C++不同,根据②可知JavaScript中并没有传递一个引用,而是拷贝了一个新的变量,即值传递。根据③可知拷贝的这个变量是一个可以访问到对象属性的“引用”(与传统的C++的引用不同,下文中提到的JavaScript的引用都是这种特别的引用)。这里需要总结一个绕口的结论:Javascript中均是值传递,对象在传递的过程中是拷贝了一份新的引用。

为了理解这个比较拗口的结论,让我们来看一段代码:
var obj = {
  data: {}
};

// data 指向 obj.data
var data = obj.data;

console.log(data === obj.data); // true-->data所操作的就是obj.data

data.name = 'Alan';
data.test = function () {
  console.log('hi')
};

// 通过data可以直接修改到data的值
console.log(obj) // { data: { name: 'Alan', test: [Function] } }

data = {
  name: 'Bob',
  add: function (a, b) {
    return a + b;
  }
};

// data是一个引用,直接赋值给它,只是让这个变量等于另外一个引用,并不会修改到obj本身
console.log(data); // { name: 'Bob', add: [Function] }
console.log(obj); // { data: { name: 'Alan', test: [Function] } }

obj.data = {
  name: 'Bob',
  add: function (a, b) {
    return a + b;
  }
};

// 而通过obj.data才能真正修改到data本身
console.log(obj); // { data: { name: 'Bob', add: [Function] } }

通过这个例子我们可以看到,data虽然像一个引用一样指向了obj.data,并且通过data可以访问到obj.data上的属性。但是由于JavaScript值传递的特性直接修改data = xxx并不会使得obj.data = xxx。

打个比方最初设置var data = obj.data的时候,内存中的情况大概是:
450529e8-debf-3cc6-87f2-f14548bd0921.png

所以通过data.xx可以修改到obj.data的内存1。

然后设置data = xxx,由于data是拷贝的一个新的值,只是这个值是一个引用(指向内存1)罢了。让它等于另外一个对象就好比:
5fab33d1-4d28-3969-9846-8de4d63beb6c.png

让data指向了新的一块内存2。

如果是传统的引用(如上文中的C++的情况),那么obj.data本身会变成新的内存2,但JavaScript中均是值传递,对象在传递的过程中拷贝了一份新的引用。所以这个新拷贝的变量被改变并不影响原本的对象。

Node.js中的module.exports与exports
上述例子中的obj.data与data的关系,就是Node.js中的module.exports与exports之间的关系。让我们来看看Node.js中require一个文件时候的实际结构:
function require(...) {
  var module = { exports: {} };
  ((module, exports) => { // Node.js 中文件外部其实被包了一层自执行的函数
    // 这中间是你模块内部的代码.
    function some_func() {};
    exports = some_func;
    // 这样赋值,exports便不再指向module.exports
    // 而module.exports依旧是{}

    module.exports = some_func;
    // 这样设置才能修改到原本的exports
  })(module, module.exports);
  return module.exports;
}

所以很自然的:
console.log(module.exports === exports); // true --> exports所操作的就是module.exports

Node.js中的exports就是拷贝的一份module.exports的引用。通过exports可以修改Node.js当前文件导出的属性,但是不能修改到当前模块本身。通过module.exports才可以修改到其本身。表现上来说:
exports = 1; // 无效
module.exports = 1; // 有效

这是二者表现上的区别,其他方面用起来都没有差别。所以你现在应该知道写module.exports.xx = xxx;的人其实是多写了一个module.。
更复杂的例子

为了再练习一下,我们在来看一个比较复杂的例子:
var a = {n: 1};  
var b = a; 
a.x = a = {n: 2};  
console.log(a.x);
console.log(b.x);

按照开始的结论我们可以一步步的来看这个问题:
var a = {n: 1};    // 引用a指向内存1{n:1}
var b = a;  // 引用b => a => { n:1 }

320bc2f1-d92d-3898-8cde-836fc0c824cd.png

a.x = a = {n: 2};  //  (内存1 而不是 a ).x = 引用 a = 内存2 {n:2}

a 虽然是引用,但是JavaScript是值传的这个引用,所以被修改不影响原本的地方。
c40e3b95-faf8-3658-b65f-fffc2f8b9161.png

所以最后的结果
  • a.x 即(内存2).x ==> {n: 2}.x ==> undefined
  • b.x 即(内存1).x ==> 内存2 ==> {n: 2}
总结
Javascript中没有引用传递,只有值传递。对象(引用类型)的传递只是拷贝一个新的引用,这个新的引用可以访问原本对象上的属性,但是这个新的引用本身是放在另外一个格子上的值,直接往这个格子赋新的值,并不会影响原本的对象。本文开头所讨论的Node.js热更新时碰到的也是这个问题,区别是对象本身改变了,而原本拷贝出来的引用还指向旧的内存。

Node.js并没有对JavaScript施加黑魔法,其中的引用问题依旧是JavaScript的内容。如module.exports与exports这样隐藏了一些细节容易使人误会,本质还是JavaScript的问题。另外推荐一个关于 Node.js 的进阶教程 《Node.js 面试》。

注①:
  • 老实说,模块在函数内声明有点谭浩强的感觉。
  • 把b = include(xxx)写在调用内部,还可以通过设置成中间件绑定在公共地方来写。
  • 除了写在调用内部,也可以导出一个工厂函数,每次使用时b().num一下调用也可以。


感谢 jihong10102006 投递这篇资讯

声明:本文系ITeye网站发布的原创资讯,严禁任何网站转载本文,否则必将追究法律责任!

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for 小众软件 - Appinn 09:34 Todolist – 命令行式「任务管理」 » Post from 小众软件 - Appinn Visit off-site link

Todolist 是一款基于 GTD(尽管去做 / Getting Things Done)的命令行式任务管理工具。@Appinn

对于用不同的方式造同样的轮子这回事,其实挺好的 😂

Todolist 非常适合整天泡在终端里的那些家伙们,反正左看右看,都是这些。

在 macOS 里安装使用都简单:

brew install todolist

记得提前安装 Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

来看视频:

然后就可以耍帅了,输入一堆命令行,嗯,自己去看文档吧。


相关阅读


©2017 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南 | 反馈 | 代理(优惠码 Appinn)
b27c41ad47c2611d60d7452a4c02dd52
Site Meter

apppackge:

Favicon for ITeye资讯频道 09:14 纯前端开发工具Wijmo 2017V1版本正式发布 » Post from ITeye资讯频道 Visit off-site link

快如闪电,触控优先的纯前端开发工具Wijmo,正式发布2017V1版本。

 

Wijmo是下一代JavaScript/HTML5控件用于企业应用开发,它用TypeScript编写。具有触摸优先、全面支持AngularJS,没有任何依赖等优点,Wijmo的FlexGrid和图表控件提供顶级性能。Wijmo灵活的API为用户提供一种轻松、愉快的方式完成他们所需,它是构建企业应用程序最完整的控制工具集。

 

Wijmo的新版本中包含了令人兴奋的新控件和新功能:一个新的TreeView控件;一个只有看到你才会相信的MultiAutoComplete控件;移动平台报表查看器;以及支持服务端的OLAP。

TreeView控件

在Wijmo的新TreeView中显示分层列表,其功能包括复选框,图标,拖放,延迟加载,节点编辑等。TreeView是一个新的wijmo.nav模块的一部分。

 TreeView控件

TreeView示例

 

MultiAutoComplete控件

MultiAutoComplete是一个独特的控件,它将多重选择与自动完成混合在一起,从而命名。这种类型的控件通常用于例如博客中的“标签”等聚合列表。我们在输入模块中添加了MultiAutoComplete。

MultiAutoComplete控件

MultiAutoComplete示例

 

服务端OLAP

使用Wijmo的Pivot控件,用于分析客户端的数据集。我们的客户端OLAP引擎可以处理相对大量的数据(大约数十万条记录),但是它需要将原始数据下载到客户端,这使得分析真正的大型数据集(数百万记录)变得不切实际。

 

在此版本中,我们已向我们的OLAP控件添加了服务器端支持。 现在,您可以使用itemSource属性中的URL来指示OLAP控件在服务器上查询Web API,而不是在客户端进行分析的数组。服务器端引擎是我们的ASP.NET MVC产品系列的一部分,必须单独安装和授权。我们建议您购买Ultimate,以便为我们的OLAP控件提供服务器和客户端组件。

服务端OLAP示例

 

FlexChart支持渐变色

FlexChart现在支持应用渐变颜色来绘制元素。 渐变可以是径向或线性,支持多种颜色以及不透明度。 使用我们的新渐变支持,向您的图表添加一些样式。

 有渐变色的Wijmo FlexChart

FlexChart示例

 

ReportViewer支持移动端

我们也很高兴为ReportViewer发布移动支持。我们的ReportViewer控件现在具有响应式设计,并将自适应不同屏幕尺寸的移动设备。

 移动端Report Viewer

ReportViewer示例 | ReportViewer教程

 

FlexGrid FilterPanel

我们最近与客户合作创建了这个新功能,轻松处理过滤器。当过滤完成后使用的过滤条件就会显示在过滤面板区域。

 带过滤的FlexGrid

FilterPanel示例

 

ServerCollectionView

ServerCollectionView是我们根据客户请求创建的另一个示例。 我们以前创建了ODataCollectionView,但是很多人问如何绑定到任意的服务器端API。 ServerCollectionView演示了如何做到这一点,包括如何根据您的需要定制它。

 ServerCollectionView

ServerCollectionView示例

 

FlexGrid金融示例

我们还添加了新的金融示例,在FlexGrid中显示FTSE 100公司的股票报价的模拟实时数据。该示例以给定间隔模拟批处理的事务,并修改表格上仅变化的单元格的信息。

 金融示例

FlexGrid金融示例

了解更多,或免费试用请访问Wijmo中国官网



感谢 powertoolsteam 投递这篇资讯

声明:本文系ITeye网站发布的原创资讯,严禁任何网站转载本文,否则必将追究法律责任!

资讯来源:http://www.gcpowertools.com.cn/

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



News stories from Tuesday 21 March, 2017

Favicon for 精品绿色便携软件 22:23 FLVCD 硕鼠 0.4.7.11 绿色便携版 - 最好的在线视频解析、下载工具 » Post from 精品绿色便携软件 Visit off-site link

FLVCD 是一个强大的在线视频下载平台,提供了强大的在线 FLV/MP4 视频解析功能,可以嗅探出视频网站上视频的真实地址,应该是目前最好的视频和音乐专辑的批量下载平台,支持土豆、优酷、爱奇艺、搜狐视频、酷6网、56网等大部分视音频网站。

FLVCD 可以把各种清晰程度的视频地址都能探测出来,如高清版、超清版、原画版等等,并可以解析节目单,实现电视剧、电影、音乐MV的批量下载,非常方便。

FLVCD 硕鼠 在线视频下载

硕鼠是 FLVCD 的官方下载工具,可以方便地下载解析出来的视频真实地址,可以手动/自动合并分段视频、修复合并后的 FLV、MP4 文件;硕鼠本身也集成了视频地址解析,是一种独特、简洁的音乐视频下载方式。

制作与使用说明

已经将 FLVCD 下载工具硕鼠做成 Portable 便携版,下载解压后直接运行 FLVCDPortable.exe 即可,自动接管下载,所有配置保存到 Data 目录,2017/3/21 更新版本为 FLVCD 硕鼠 0.4.7.11 正式版

猎鹰 EagleGet 在下载国外在线视频方面具有优势,但对国内视频网站支持并不多,正好可以与 FLVCD 结合起来使用。

以搜狐视频王菲《致青春》官方正式版MV为例,在硕鼠窗口中新建下载任务,或者直接通过 FLVCD 网站解析出视频实际下载地址后 (原画版),就可以通过硕鼠专用链下载了,选择添加到硕鼠 Nano 的窗口下载。

FLVCD 硕鼠 在线视频解析

「硕鼠 Nano」适合下载单个视频类似迅雷,「硕鼠 Touch」适合下载专辑,每个专辑一个独立窗口,更加稳定。

FLVCD/硕鼠目前支持 84 个视频/音乐网站的解析下载,主流视频站包括:优酷网、土豆网、爱奇艺、搜狐视频、乐视网、腾讯视频、酷6网、56网、迅雷看看、PPTV、风行网、PPS、新浪视频、网易视频、激动网、糖豆网、百度贴吧视频、华数TV等。

其中对于优酷、土豆、爱奇艺、56网、中国网络电视台、CCTV 和台海宽频支持清晰度选择,注意在解析时设定好视频清晰度。

如果你使用 Google Chrome 浏览器,还可以安装 FLVCD 在线视频解析扩展,可使用右键解析当前页面的视频。

硕鼠 0.4.7.11 更新日志

  1. 优化下载协议,提升下载效率
  2. 修正 51CTO 下载问题
  3. 修正乐视下载问题
  4. 修正一些严重的历史 Bug,大幅提升稳定性
  5. 修正搜狐下载的问题
  6. 修正某些环境下无法保存设置的 Bug
  7. 注意:本版本不会恢复对优酷、爱奇艺、腾讯、土豆、芒果的解析支持
  8. 采用自主研发的合并引擎,大大提高合并成功率

FLVCD 硕鼠 Portable 相关文件下载

软件开发商:FLVCD 官方网站
压缩包解压密码:www.portablesoft.org
压缩包MD5+扫描报告:544CBBD95C4580D95821867E207CA35B

开始下载 FLVCD 硕鼠 0.4.7.11 绿色便携版
FLVCD_0.4.7.11_PortableSoft.7z (4.17 MB)
来自精品绿色便携软件 | FLVCD 硕鼠 0.4.7.11 下载页面 | 更多版本下载

开始下载 FLVCD 硕鼠 0.4.7.7 绿色便携版
FLVCD_0.4.7.7_PortableSoft.7z (8.11 MB)
来自精品绿色便携软件 | FLVCD 硕鼠 0.4.7.7 Portable 下载页面 | 压缩包MD5+扫描报告

Favicon for 小众软件 - Appinn 18:59 小推Weitweet – 一键分享网页与抓取网页图片至微博与 Twitter [Chrome] » Post from 小众软件 - Appinn Visit off-site link

小推Weitweet 是一个 Chrome 浏览器上的扩展,用来一键分享当前网页、自动抓取网页图片,至 微博 与 Twitter。@Appinn

来自发现频道

小推Weitweet 可以自动获取网页标题与链接,以及网页上的图片,非常适合分享网页内容至 微博 与 Twitter。

只需在要分享的页面点击 小推Weitweet 按钮即可。

可以同步编辑,也可以分开 微博与 Twitter 编辑,分享不同内容。还支持本地图片上传、图片链接粘贴、图片直接粘贴。

另外,开源,不收集任何数据,不占后台。


相关阅读


©2017 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南 | 反馈 | 代理(优惠码 Appinn)
b27c41ad47c2611d60d7452a4c02dd52
Site Meter

apppackge:

Favicon for 精品绿色便携软件 17:29 免费全能音频转换软件 - Freemake Audio Converter 1.1.8.9 绿色便携版 » Post from 精品绿色便携软件 Visit off-site link

Freemake Audio Converter 是 Freemake 发布的一款免费、全能的音频文件转换工具,能够将各类音频文件转换到 MP3、WMA、WAV、FLAC、AAC、M4A、OGG 格式,每一种转换模式都多个预定的转换配置,并可自定义。

从视频文件中提前音频流也是 Freemake Audio Converter 的重要功能,能将绝大部分的视频转换为音频或将多个音频文件合并。

Freemake Audio Converter

制作与使用说明

与之前发布的 Freemake Video Converter 一样,Freemake Audio Converter 也具有精美舒适的操作界面,现在做成便携版,直接运行 FreemakeACPortable.exe 即可,默认显示简体中文界面,2017/3/21 更新版本为 Freemake Audio Converte 1.1.8.9。

Freemake Audio Converter Portable

支持转换的音频格式:

mp3, aac, ogg, wma, wav, flac, m4a, amr, au, aif, aiff, aifc, ac3, adts, alaw, apc, ape, caf, dts, gsd, dsm, mka, mlp, mmf, m4r, mp1, mp2, mpeg3, mpc, mp+, m2a, nut, oma, qcp, ra, rmj, shn, tta, voc, wv, xa

支持转换的视频格式:

avi, mp4, wmv, mkv, dvd, mpg, 3gp, flv, swf, tod, mts, mov, mv, rm, qt, ts, amv, avs, bik, bnk, cavs, cdg, dpg, dv1394, dxa, ea, ffm, film_cpk, flc, flh, fli, flm, flt, flx, gxf, h161, h263, h264, mj2, mjpg, mkm, mtv, mxf, nc, nut, ogm, ogv, pva, r3d, rax, rms, rmx, rpl, rtsp, sdp, smk, thp, vc1, vfw, vro.

Freemake Audio Converter 1.1.8.9 更新日志

  1. Several minor bug fixes

Convert audio free to MP3, WMA, WAV, FLAC, AAC, M4A, OGG, convert audio to MP3 player, iPod, iPhone, iPad, PSP, extract audio from video, join audio files.

Freemake Audio Converter Portable 相关文件下载

软件开发商:Freemake 官方网站
压缩包解压密码:www.portablesoft.org
压缩包MD5+扫描报告:72F537F7E45ED7D11056EF5F94F82C6F

开始下载 Freemake Audio Converter 1.1.8.9 中文绿色便携版
FreemakeAudioConverter_1.1.8.9_PortableSoft.7z (12.16 MB)
来自精品绿色便携软件 | Freemake Audio Converter 1.1.8.9 下载页面 | 更多版本下载

开始下载 Freemake Audio Converter 1.1.0.48 中文绿色便携版
FreemakeAudioConverter_1.1.0.48_PortableSoft.7z (12.3 MB)
来自精品绿色便携软件 | Freemake Audio Converter 1.1.0.48 下载页面 | 压缩包MD5+扫描报告

Favicon for ITeye资讯频道 16:47 TensorFlow架构与设计:会话生命周期 » Post from ITeye资讯频道 Visit off-site link
引用
作者:刘光聪 ,中兴通讯高级系统架构师,专注机器学习算法,分布式系统架构与优化。
原文:TensorFlow架构与设计:会话生命周期
责编:王艺 CSDN AI记者,投稿、寻求报道、深入交流请邮件wangyi@csdn.net
相关文章:
图解TensorFlow架构与设计
TensorFlow架构与设计:图模块

TensorFlow的系统结构以C API为界,将整个系统分为「前端」和「后端」两个子系统:
  • 前端系统:提供编程模型,负责构造计算图;
  • 后端系统:提供运行时环境,负责执行计算图。
aa03b508-fa69-35b3-aaf9-167bf1fcd577.png

系统架构

前端系统主要扮演Client的角色,主要负责计算图的构造,并管理Session生命周期过程。

前端系统是一个支持多语言的编程环境,并提供统一的编程模型支撑用户构造计算图。Client通过Session,连接TensorFlow后端的「运行时」,启动计算图的执行过程。

后端系统是TensorFlow的运行时系统,主要负责计算图的执行过程,包括计算图的剪枝,设备分配,子图计算等过程。

本文首先以Session创建为例,揭示前端Python与后端C/C++系统实现的通道,阐述TensorFlow多语言编程的奥秘。随后,以Python前端,C API桥梁,C++后端为生命线,阐述Session的生命周期过程。

Swig: 幕后英雄
前端多语言编程环境与后端C/C++实现系统的通道归功于Swig的包装器。TensorFlow使用Bazel的构建工具,在编译之前启动Swig的代码生成过程,通过tf_session.i自动生成了两个适配(Wrapper)文件:
  • pywrap_tensorflow.py: 负责对接上层Python调用;
  • pywrap_tensorflow.cpp: 负责对接下层C实现。
此外,pywrap_tensorflow.py模块首次被加载时,自动地加载_pywrap_tensorflow.so的动态链接库。从而实现了pywrap_tensorflow.py到pywrap_tensorflow.cpp的函数调用关系。

在pywrap_tensorflow.cpp的实现中,静态注册了一个函数符号表。在运行时,按照Python的函数名称,匹配找到对应的C函数实现,最终转调到c_api.c的具体实现。
0baa9447-6386-3b43-9e5b-61fad3a925cf.png

Swig代码生成器

编程接口:Python
当Client要启动计算图的执行过程时,先创建了一个Session实例,进而调用父类BaseSession的构造函数。
# tensorflow/python/client/session.py
class Session(BaseSession):
  def __init__(self, target='', graph=None, config=None):
    super(Session, self).__init__(target, graph, config=config)
    # ignoring others

在BaseSession的构造函数中,将调用pywrap_tensorflow模块中的函数。其中,pywrap_tensorflow模块自动由Swig生成。
# tensorflow/python/client/session.py
from tensorflow.python import pywrap_tensorflow as tf_session

class BaseSession(SessionInterface):
  def __init__(self, target='', graph=None, config=None):
    self._session = None
    opts = tf_session.TF_NewSessionOptions(target=self._target, config=config)
    try:
      with errors.raise_exception_on_not_ok_status() as status:
        self._session = tf_session.TF_NewDeprecatedSession(opts, status)
    finally:
      tf_session.TF_DeleteSessionOptions(opts)
    # ignoring others

生成代码:Swig
pywrap_tensorflow.py

在pywrap_tensorflow模块中,通过_pywrap_tensorflow将在_pywrap_tensorflow.so中调用对应的C++函数实现。
# tensorflow/bazel-bin/tensorflow/python/pywrap_tensorflow.py
def TF_NewDeprecatedSession(arg1, status):
    return _pywrap_tensorflow.TF_NewDeprecatedSession(arg1, status)

pywrap_tensorflow.cpp

在pywrap_tensorflow.cpp的具体实现中,它静态注册了函数调用的符号表,实现Python的函数名称到C++实现函数的具体映射。
# tensorflow/bazel-bin/tensorflow/python/pywrap_tensorflow.cpp
static PyMethodDef SwigMethods[] = {
    ...
     {"TF_NewDeprecatedSession", _wrap_TF_NewDeprecatedSession, METH_VARARGS, NULL},
}

PyObject *_wrap_TF_NewDeprecatedSession(
  PyObject *self, PyObject *args) {
  TF_SessionOptions* arg1 = ... 
  TF_Status* arg2 = ...

  TF_DeprecatedSession* result = TF_NewDeprecatedSession(arg1, arg2);
  // ignoring others implements
}

最终,自动生成的pywrap_tensorflow.cpp仅仅负责函数调用的转发,最终将调用底层C系统向上提供的API接口。

C API:桥梁
c_api.h是TensorFlow的后端执行系统面向前端开放的公共API接口之一,自此将进入TensorFlow后端系统的浩瀚天空。
// tensorflow/c/c_api.c
TF_DeprecatedSession* TF_NewDeprecatedSession(
  const TF_SessionOptions*, TF_Status* status) {
  Session* session;
  status->status = NewSession(opt->options, &session);
  if (status->status.ok()) {
    return new TF_DeprecatedSession({session});
  } else {
    return NULL;
  }
}

后端系统:C++
NewSession将根据前端传递的Session.target,使用SessionFactory多态创建不同类型的Session(C++)对象。
Status NewSession(const SessionOptions& options, Session** out_session) {
  SessionFactory* factory;
  Status s = SessionFactory::GetFactory(options, &factory);
  if (!s.ok()) {
    *out_session = nullptr;
    LOG(ERROR) << s;
    return s;
  }
  *out_session = factory->NewSession(options);
  if (!*out_session) {
    return errors::Internal("Failed to create session.");
  }
  return Status::OK();
}

会话生命周期
下文以前端Python,桥梁C API,后端C++为生命线,理顺三者之间的调用关系,阐述Session的生命周期过程。

在Python前端,Session的生命周期主要体现在:
  • 创建Session(target)
  • 迭代执行Session.run(fetches, feed_dict)
  • 关闭Session
  • 销毁Session
sess = Session(target)
for _ in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
sess.close()

相应地,C++后端,Session的生命周期主要体现在:
  • 根据target多态创建Session
  • Session.Create(graph):有且仅有一次
  • Session.Extend(graph):零次或多次
  • 迭代执行Session.Run(inputs, outputs, targets)
  • 关闭Session.Close
  • 销毁Session对象
// create/load graph ...
tensorflow::GraphDef graph;

// local runtime, target is ""
tensorflow::SessionOptions options;

// create Session
std::unique_ptr<tensorflow::Session> 
sess(tensorflow::NewSession(options));

// create graph at initialization.
tensorflow::Status s = sess->Create(graph);
if (!s.ok()) { ... }

// run step
std::vector<tensorflow::Tensor> outputs;
s = session->Run(
  {},               // inputs is empty 
  {"output:0"},     // outputs names
  {"update_state"}, // target names
  &outputs);        // output tensors
if (!s.ok()) { ... }

// close
session->Close();

创建会话
上文介绍了Session创建的详细过程,从Python前端为起点,通过Swig自动生成的Python-C++的包装器为媒介,实现了Python到TensorFlow的C API的调用。

其中,C API是前端系统与后端系统的分水岭。后端C++系统根据前端传递的Session.target,使用SessionFactory多态创建Session(C++)对象。
b1d4c43f-0b1d-37a3-a833-0f0ab67ff26f.png

创建会话

从严格的角色意义上划分,GrpcSession依然扮演了Client的角色。它使用target,通过RPC协议与Master建立通信连接,因此,GrpcSession同时扮演了RPC Client的角色。
bc04a035-963f-3e03-9e77-3398b631386a.png

Session多态创建

创建/扩展图
随后,Python前端将调用Session.run接口,将构造好的计算图,以GraphDef的形式发送给C++后端。

其中,前端每次调用Session.run接口时,都会试图将新增节点的计算图发送给后端系统,以便后端系统将新增节点的计算图Extend到原来的计算图中。特殊地,在首次调用Session.run时,将发送整个计算图给后端系统。

后端系统首次调用Session.Extend时,转调(或等价)Session.Create;以后,后端系统每次调用Session.Extend时将真正执行Extend的语义,将新增的计算图的节点追加至原来的计算图中。

随后,后端将启动计算图执行的准备工作。
5c73c7b6-07d5-3053-8841-9b06b3910140.png

创建/扩展图

迭代运行
接着,Python前端Session.run实现将Feed, Fetch列表准备好,传递给后端系统。后端系统调用Session.Run接口。

后端系统的一次Session.Run执行常常被称为一次Step,Step的执行过程是TensorFlow运行时的核心。

每次Step,计算图将正向计算网络的输出,反向传递梯度,并完成一次训练参数的更新。首先,后端系统根据Feed, Fetch,对计算图(常称为Full Graph)进行剪枝,得到一个最小依赖的计算子图(常称为Client Graph)。

然后,运行时启动设备分配算法,如果节点之间的边横跨设备,则将该边分裂,插入相应的Send与Recv节点,实现跨设备节点的通信机制。

随后,将分裂出来的子图片段(常称为Partition Graph)注册到相应的设备上,并在本地设备上启动子图片段的执行过程。
0d848820-4e55-322e-b2cb-e6e1272152a6.png

Run Step

关闭会话
当计算图执行完毕后,需要关闭Session,以便释放后端的系统资源,包括队列,IO等。会话关闭流程较为简单,如下图所示。
5778d305-fe07-3501-bc40-184db7f343da.png

关闭会话

销毁会话
最后,会话关闭之后,Python前端系统启动GC,当Session.del被调用后,启动后台C++的Session对象销毁过程。
d7964327-fea9-3844-82f5-080c648938ef.png

销毁会话



感谢 jihong10102006 投递这篇资讯

声明:本文系ITeye网站发布的原创资讯,严禁任何网站转载本文,否则必将追究法律责任!

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for 精品绿色便携软件 16:42 精美的免费视频转换器 - Freemake Video Converter 4.1.9.80 绿色便携版 » Post from 精品绿色便携软件 Visit off-site link

Freemake Video Converter 是一款功能强大的免费视频转换软件,支持众多的视音频、DVD 及图片格式,基本输出格式包括 AVI、MP4、WMV、MKV、3GP、DVD、Blu-ray、MP3 及 iPod、iPhone、iPad、Android 等设备格式。

Freemake Video Converter 支持 CUDA 技术,能实现更高效的视频编码。

新版 Freemake Video Converter 在视频编辑方面有所增强,支持视频切割剪辑功能,比如切割合并视频、多段切割,以及视频旋转和视频翻转等,另外在输出配置方面有了彻底改进,附带很多的预先定义配置,并可自定义,界面和操作都很赏心悦目。

Freemake Video Converter 便携版

制作与使用说明

已做成 Portable 便携版,下载解压后直接运行 FreemakeVCPortable.exe 即可,启动时可能会有些慢,请耐心等待,2017/3/21 更新版本为 Freemake Video Converter Portable 4.1.9.80,默认显示简体中文界面,新版新增支持 Fraps、10bit、DV AVI、WAV DTS、AMR 等格式的转换。

Freemake Video Converter Portable

之前也介绍过很多视频转换软件了,其中功能最强大的当属 Xilisoft Video Converter Ultimate,不过绿色版难以制作;格式工厂、 iWisoft Free Video Converter 也是相当可用的免费视频转换软件,狸窝全能视频转换器也不错,就是界面会有广告,还有一些高清视频转换类软件,如 HD Video Converter 的效果也不错,给别人用时最多推荐的貌似是 Any Video Converter,主要也是方便易用吧,但也好久没更新。

回到 Freemake Video Converter,它还支持 转换 Flash/SWF 动画,这样就可以取代 Free SWF Converter 以及 iWisoft Flash SWF to Video Converter 这两个 SWF 转换器了。

Freemake Video Converter 支持的视音频格式

Freemake Video Converter 输入格式众多,具体情况如下:

Freemake Video Converter 支持格式

  1. 视频格式:avi, mp4, wmv, mkv, dvd, mpg, 3gp, flv, swf, tod, mts, mov, m4v, rm, qt, ts, amv, avs, bik, bnk, cavs, cdg, dpg, dv1394, dxa, ea, ffm, film, film_cpk, flc, flh, fli, flm, flt, flx, gxf, h261, h263, h264, mj2, mjpg, mkm, mtv, mxf, nc, nut, nuv, ogm, ogv, pva, r3d, rax, rms, rmx, rpl, rtsp, sdp, smk, thp, vc1, vfw, vro
  2. 音频格式:mp3, aac, ogg, wma, wav, flac, m4a, amr, au, aif, aiff, aifc, ac3, adts, alaw, apc, ape, caf, dts, gsd, gsm, mka, mlp, mmf, m4r, mp1, mp2, mpeg3, mpc, mp+, m2a, nut, oma, qcp, ra, rmj, shn, tta, voc, w64, wv, xa
  3. 图片格式:bmp, jpg, gif, png, tif, anm, dpx, jpg, pam, pbm, pcx, pgm, ppm, sgi, sr, ras, tga, txd

Freemake Video Converter 4.1.9.80 更新日志

  1. Improved video to Flash/HTML5 functionality
  2. Several minor bug fixes

Freemake Video Converter - Convert video between formats, rip DVD, convert to devices, burn DVD, cut, join, rotate, and upload video, photos with our free video converter.

Freemake Video Converter Portable 相关文件下载

软件开发商:Freemake 官方网站
压缩包解压密码:www.portablesoft.org
压缩包MD5+扫描报告:07D139AECD7E5D47DEF835331E6612EA

开始下载 Freemake Video Converter 4.1.9.80 中文绿色便携版
FreemakeVideoConverter_4.1.9.80_PortableSoft.7z (27.37 MB)
来自精品绿色便携软件 | Freemake Video Converter 4.1.9.80 下载页面 | 更多版本下载

开始下载 Freemake Video Converter 4.1.5.4 中文绿色便携版
FreemakeVideoConverter_4.1.5.4_PortableSoft.7z (25.15 MB)
来自精品绿色便携软件 | Freemake Video Converter 4.1.5.4 下载页面

Favicon for ITeye资讯频道 13:07 携程无线工程技术系列——从零打造携程无线持续交付平台 MCD 实践 » Post from ITeye资讯频道 Visit off-site link
引用
作者简介: 刘李丰,携程无线基础工程团队高级经理,负责无线交付平台和基础服务研发。十多年的互联网从业经验,曾供职于 eBay 等互联网公司,研发经验丰富。
责编:唐小引,技术之路,共同进步。欢迎技术投稿、给文章纠错,请发送邮件至tangxy@csdn.net。
声明: 本文为《程序员》原创文章,未经允许请勿转载,更多精彩文章请订阅 2017 年《程序员》

引用
导语:携程 App 几乎承载着整个集团的所有业务形态,亟需一个有效的无线持续交付平台来实现大版本的快速集成发布,由此,携程无线工程技术团队从零开始,一步步打造适合携程研发流程的无线持续交付平台。本文为“携程无线工程技术系列”第一篇。

目前携程大部分订单已来自移动端,App 几乎承载了整个集团的所有业务形态。在内部研发中,携程的 App 已经发展成为拥有 90+ Native Bundle、100+ Hybrid Bundle、30+ React Native Bundle,几百名研发人员,每个版本(1 个月)交付 4000+个 App 包,Hybrid/React Native/HotFix/Bundle 发布次数 500+。如果没有一个有效的无线持续交付平台,很难实现大版本的集成发布在 3 天内完成。而对比市场上开源的无线持续集成工具 Fastlane、TestFlight、Jenkins 都存在各种定制化需求的问题。因此我们从零开始,逐步打造适合携程研发流程的无线交付平台,系统化地解决研发支撑痛点。下面将从集成、测试、发布、运营四个子平台来展开,具体分享我们是如何一步步打造无线持续交付平台的。

集成平台
从最初到现在,携程无线持续交付模型经历了从 1.0 到 2.0 的迭代演进。在 1.0 之前,App 集成和发布还主要依靠人工操作 Jenkins,需要由特定的打包人员负责打包,再将包通过 IM/邮件等方式传递给其他测试人员,测试结果需要专人手工回收,以把控 App 质量。此时最大的问题就是 App 管理混乱,人工介入过多,每次发布都需要花费很长的时间。

1.0 阶段
在 1.0 阶段,我们引入 MCD(Mobile Continues Delivery)平台思路,将打包人员的工作交给平台来完成,提高了发布工作效率。这时不需要专职人员负责出包,平台会定时自动打包,测试人员可以到平台上自由取包(通过下载链接或扫描二维码的方式)进行测试。与此同时,测试人员也可以在平台上进行单独的打包和测试。测试结果会统一反馈到平台上来,协调人员在平台根据各家的反馈结果决定需要重新出包还是继续下一步发布操作。

在这个阶段,App 的打包还完全依赖于源代码进行,由平台生成打包参数(主要包含 App 运行环境、与 iOS 签名相关的参数以及代码仓库相关的参数)提交给后台的打包系统。它会根据仓库地址和 commit ID 从代码仓库中拉取全量代码,然后打包系统再调用代码中预先准备好的 Build 脚本构建 App 产物,构建完成后将结果保存至临时的文件服务中,最后由平台的回收进程将构建结果回收并处理之后放在云存储上供用户下载使用。

2.0 阶段
1.0 阶段虽然已经基本实现了集成打包的自动化,但是还存在以下几点不足:
  • 源码打包方式效率低下,每次都要从代码仓库中下载全量代码,再通过源代码生成 App 产物。这样做使得每次 Build 时间都很长,而打包次数的增加会导致某些打包任务积压,系统不能及时出包。
  • 编译容易失败,任何一个 Check-in 导致的编译失败,就会致使系统不能正常出包。
  • 系统之间采用轮询模式,Job 任务扩展性差。
MCD 系统发起 Build 请求之后会有另一个定时的 Job 任务去轮询 Build Server 查看 Build 结果。在初期阶段还能满足业务需求,但是后来由于打包数量的增加以及打包频率的提高,系统的处理效率变得越来越低。一方面打包资源不够(Android 打包使用 Linux 虚拟机,iOS 打包使用 Mac),另一方面轮询 Job 的处理效率达到了瓶颈。打包机器采用 Jenkins 方式进行管理,因此很容易进行横向扩展,但是 Job 却很难扩容。

针对以上问题,我们对平台进行了升级改造,主要为:
  • 引入消息机制,提高系统吞吐量;
  • 将工程进行拆分,按照 Bundle 的方式进行打包。
消息机制的改造:
首先基本打包架构和流程保持不变,在 MCD 系统和 Build Server 之间增加消息系统,MCD 发起 Build 之后不再轮询 Build Server,而是消费由 Build Server 产生的 Build 完成消息,如图 1 所示。使用这样的生产消费模型 MCD 可以轻易地进行水平扩展,系统执行效率得到极大改善。
ab255ed1-3a1c-36f5-924c-1dc9b6736448.png

图 1 Bundle 打包

工程拆分:
App 工程拆分成多个不同的 Bundle 模块,Bundle 之间存在依赖关系。在这个情况下 App 的编译和打包也可以按照 Bundle 的方式进行组织。在开发阶段,开发人员提交完代码之后就能直接将自己负责的 Bundle 编译成可执行文件,测试可以自由选择 Bundle 进行打包。此时打包工作只需将多个 Bundle 文件组装在一起就行,极大地加快了打包速度。通过测试的 Bundle 会被发布到指定地点,在 App 集成阶段只需把所有发布的 Bundle 组装成最终 App 供大家测试即可。

在开发自测阶段,开发人员提交完代码后在 MCD 平台上 Build 出所开发的 Bundle(标记为 L,表示 Latest)。相关测试人员(或开发人员自己)可以打测试包,测试包会使用所有 Bunde 的 L 版本进行构建。构建完成之后获取测试包进行功能测试,测试通过后就可以将该 Bundle 进行发布操作,即标记为 RC 版本(表示 Release Candidate)。
1dec6e72-28ab-3cab-8301-f8553ef8fcb2.png

图 2 测试打包发布

如图 2 所示,在集成测试阶段,MCD 平台会自动选取已发布(RC 版本)的 Bundle 打出集成包,测试完成后测试人员可以将测试结果反馈到 MCD 平台中,待测试全部通过之后就可以安排 App 进入发布定版阶段,再进行一些后续市场包操作就可提交给 App 应用市场供用户下载。

由于 App 的开发是个连续过程,测试包和集成包都可以很方便地配置是需要 Hourly build 还是 Daily build,并且可以和测试平台的相关功能联动,从而实现持续集成。

我们也会将不同版本(不同功能)的 App 按照项目进行划分,主版 App 为标准项目,非主版(渠道/HotFix/Bundle)App 为非标准项目,同一项目内的 Bundle 可以自由组合,项目之间互相独立,不受影响。一个项目在创建时可以选择从另一个项目继承其各模块的最新版和发布版。项目在开发过程中也可以从其父项目中实时同步对应模块的最新版和发布版,这样就能基本满足各种开发和测试的需求。

测试平台
随着携程持续交付的发展,原有的测试模式以及流程渐渐显现出不足,主要体现在以下三点:
  • 快速验证与手工验证的冲突;
  • 自动化回归测试与手动测试效率的矛盾;
  • 设备兼容测试与设备不足的矛盾。
快速验证与白屏检测
在集成测试阶段,每一次出包首先会由基础测试人员负责验证此次出包的质量,主要是验证各个 BU 入口页面 Hybrid 或直连页面是否正常,如果大量 BU 入口页面异常则会要求重新出包。这个过程看似很简单,但是“(沟通成本+验证成本)*出包次数”所耗费的时间也是不容忽视的,且这种冒烟测试对于测试人员也很枯燥无趣。
5a5397f9-2c4e-3d68-acb3-8879eaa5a42d.png

图 3 集成包

针对以上情况,最初引入了白屏测试等基础性测试功能,并与集成平台打通(见图 3,可以直接从集成包列表选择相关测试功能)。白屏测试主要是检测 App 首页各个入口页面是否显示正常,对于每一个页面会进行图像比对以及页面长度来验证页面是否正常,白屏会在多个设备进行测试,只要其中一台设备通过,则认为这个入口是正常的。

自动化回归测试
通过回归测试自动化,可以提高回归测试效率,有效缓解测试人员的压力。我们逐步开发了 MCD 测试平台用于自动化测试项目的管理、执行、报告和展示,支持 Android/iOS App、HTML5/Hybrid Testing。
8a810ae4-ee79-3095-b428-530c53a96298.jpg

图 4 测试平台架构

测试平台架构简化图如图 4 所示,各个模块主要功能如下:
  • Portal 负责与用户交互,查看报表,保持后台系统对用户透明;
  • Invoker 是调度通道,用户基于 Portal 提交的测试任务通过此通道来调度,包括创建项目、设备占用、测试项目执行等;
  • Lab Center 负责所有与设备相关的业务,Lab Center 与二次开发的开源软件 STF 交互,所有设备挂载在 STF 上;
  • 当具体的测试项目在 Jenkins 上执行时,会将预先占用的设备远程连接到 Slave 上等待使用。
MCD 测试平台提供了自动化测试(白屏检测、录制回放、回归测试)、系统测试(兼容性、性能、稳定性)、手动测试(远程租用、远程调试)三大类功能,基本达到了我们对于提高测试效率的需求,如图 5、图 6 所示。
261e7f2e-882f-3202-83f2-41d910c07886.png

图 5 Mobile 项目列表

7c31922d-fb0d-3283-ab17-8371b972147c.png

图 6 自动化测试 Task Case 页面

另外,日常测试中还经常遇到这些情况:需要快速验证 App 的一个功能,有些问题只能在特定机型上重现,测试目前却没有这款手机。因此我们基于 STF 二次开发出设备共享平台,将空闲设备收集起来在平台上共享,用户只需在平台上搜索需要的设备就可以立刻通过 STF 进行使用了,如图 7 所示。
3b8ff6f0-7489-3824-9a2e-3d396a66b2e3.png

图 7 设备租用

同时,我们还建立了代码质量的自动化,集成 Sonar、Facebook Infer 和 Uint Test 功能,方便每个版本对代码质量进行跟踪,如图 8 所示。
ebb1795e-48a1-3b38-8ca1-c092a7274ad0.png

图 8 代码质量自动化追踪

发布平台
无线发布系统一直以来都是无线应用能快速迭代最关键的一环,一个好的发布系统能帮助开发快速地修复线上问题,并能快速将新功能投送至用户,帮助业务抢占市场,而发布系统的设计也随着 CD(Continuous Delivery)概念的深入人心而日新月异。
无线发布的特点是静态资源包(不管是 Hybrid、React Native 还是 HotFix、Bundle),发布技术中涉及到的主要问题如下:
  • 如何最大限度地把静态资源的下载流量降到最低,以减少用户对应用更新的感知度,提高应用升级的成功率和用户体验。
  • 灰度发布,保证发布的质量。
资源包发布
针对静态资源包发布,经历了如下几个历程:
  • 全量包发布: 携程最初使用的都是全量发布的方式,这种方式实现简单,但也简单暴力,而问题也比较明显,导致用户升级时流量巨大。
  • 文件字符串差分: 这种方法避免了整包差分的问题,能够比较方便地实现快速迭代要求下的小量更新需求,并且文本差分工具简单,实现容易,出错较少,但缺点是差分效果差。
  • 文件二进制差分: 对每个文件进行二进制级别的差分能够具备小量快跑的特点,同时进一步优化差分文件 Size。这也是携程目前使用的方式,它仍然使用了 bsdiff 作为差分工具,当文件没有更新时,不输出差分文件,而更新时也只产生 Size 非常小的 diff 文件。
  • 按需差分: 在按需差分前,我们采取的是预差分方案。就是在发布时,把所有的版本间差分准备好,有多少个历史版本就将产生多少个差分包。按照这种做法,随着发布次数的增多,发布差分包数量也将急剧增长,对存储的要求越来越高,也造成了浪费。
在此前提下,引入了按需差分,就是终端用户通过将自己的版本号与线上最新版本号做比较,发现落后时,触发差分过程,从而获取增量更新。

这里会有一个问题——终端用户第一次访问时没有差分包,我们的做法是:第一次只返回全量包,用户不用等待,但是后续用户会拿到差分包。

另外一个问题是,避免重复打差分包。在计算时发现无差分包,会触发差分包过程,同时会把这个信息缓存(过期时间半个小时)。当其他客户端同样的版本请求时,会先判断缓存,没有的话进行差分操作,有的话直接下发全量包。

灰度发布
网站发布通常是有灰度发布的过程,无线的发布跟网站发布流程是类似的,但是做法有差别。二者的区别是:网站是 centralize 的,可以统一控制,而无线的发布是 decentralized。无线发布包,像 Hybrid、React Native、HotFix 等静态资源,是需要客户端一个个来拉取的。那么,如何确保整个发布的流畅,确保发布质量呢?我们的解决方案如下:
Offline 灰度发布流程
灰度第一步是冒烟,网站的冒烟是导一部分流量到某台 Server 上,而我们则是通过配置一个白名单,只有客户端在白名单中的才会获取到最新发布。当测试没有通过,可以选择终止,然后再决定是否需要回滚,测试通过决定是否需要扩大比例。

监控发布数据
当客户端收到下载物后,会把当前的下载信息上报上来,供发布人员进行监控查看。
灰度发布设计中需要注意:
  • 避免一直小白鼠:为了避免一个用户一直当小白鼠,每次灰度需要利用灰度 ID+客户端信息进行取模运算。
  • 灰度回滚:灰度回滚时只需要回滚已经更新这次灰度的客户端,对于没有更新到的,则无需回滚。
运营平台
运营是研发流程的最后一环,携程的 MCD 平台思路是能够针对发布结果、运营情况以及配置等功能有一个集中的管理。目前包含了运营看板、性能看板、发布看板、无线配置、崩溃管理、App Size 统计等模块。

其中无线配置经历了多次迭代,对于各种配置项,从版本、平台、渠道、A/B 多个角度进行了定义,做到灵活动态配置,需改就改,粒度大小自由配置。下发时根据 App 的版本、平台、渠道等信息挑选符合条件的配置进行发布。需要修改的时候也是先修改测试环境配置,测试通过后再同步到生产。配置分为专用版和通用版两种,专用版只会下发给特定的渠道/版本,通用版以版本号为基准,在不发布新版本配置的情况下系统默认给 App 端下发最近的通用版配置。当同时存在符合条件的专用版和通用版的时候,只下发专用版配置。

崩溃管理也是无线运营的重要一环,尽管目前行业内已经有崩溃管理功能强大的平台,但由于定制性需求我们也搭建了自有崩溃管理功能,方便快速发现线上问题,从而能够通过 HotFix/Bundle 方式及时修复,如图 9 所示。
11d31098-50cb-341b-8c45-d17b515ca58e.png

图 9 崩溃管理页面

结束语
以上是携程无线基础工程团队在无线持续交付方面的一些工程实践,MCD 的核心目标是能够对集成、测试、发布和运营的完整生命周期提供更好的平台支撑和管理。虽然取得了一些成果,但还有许多提升空间,例如多应用支持、支持条件发布等,无线持续发布之路依然有很多工作要做。

感谢 jihong10102006 投递这篇资讯

声明:本文系ITeye网站发布的原创资讯,严禁任何网站转载本文,否则必将追究法律责任!

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for ITeye资讯频道 09:43 Google 开源图像算法工具 Guetzli,高质量压缩图片 » Post from ITeye资讯频道 Visit off-site link
Google 又开源了,这次开源了一款图像算法工具 Guetzli。Guetzli,在瑞士德语中是“cookie(曲奇)”的意思,是一个针对数码图像和网页图像的 JPEG 编码器,能够通过产生更小的 JPEG 文件来达到更快的在线体验,并且同时保持与当前浏览器,图像处理应用和 JPEG 标准的兼容性。Google 称 Guetzli 创建高质量的 JPEG 图像文件的大小比当前的压缩方法要再小 35%。

JPEG 图像的视觉质量与它的多阶段压缩过程有关:色彩空间变换,离散余弦变换,以及量化等等。Guetzli 具体针对量化阶段,图像视觉质量损失越多,输出图像尺寸越小。Guetzli 努力通过一个搜索算法,来克服 JPEG 格式的精神视觉模型与 Guetzli 的精神视觉模型之间的差别,以一种更全面更详细的方式来结合色彩感知和视觉掩蔽,从而在最小化损失和最小化图像尺寸中达到平衡。不过,尽管 Guetzli 可以使图像尺寸更小,但创建压缩图像所花费的时间要与目前的方法更长。
c9b428ba-a583-3dbd-86c4-85d7bce9bdf8.png

上图为 16x16 像素样本,是挂在蓝天下的一根电话线,传统 JPEG 算法经常会遇到的失真状况。左边是未压缩的原图,中间为较小尺寸的 libjpeg,右边是失真更少的 Guetzli 。

Google 还表示在实验中把压缩图像的尺寸设为常数,相比于 libjpeg 输出的图像,在人工评估时大家总是更偏好 Guetzli 产生的图像,即使当 libjpeg 的图像和 Guetzli 的大小相同甚至更大一些。这点让他们觉得压缩速度慢一点也是值得的。
b27203c3-44b9-35a3-95d5-447107c19b94.png

上图是 20x24 像素的一张猫眼的放大细节图。左边是未压缩的原图,中间是 libjpeg,右边是 Guetzli 。

Guetzli 的详细介绍:点击查看
Guetzli 的下载地址:点击下载



感谢 jihong10102006 投递这篇资讯

资讯来源:oschina

已有 1 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for 小众软件 - Appinn 09:33 Recurrence – 精致实用的通知栏提醒应用 [Android] » Post from 小众软件 - Appinn Visit off-site link

Recurrence 是一款非常简单实用的通知栏提醒应用,只需设置时间,就会在通知栏上提醒,精致实用。@Appinn

其实 Recurrence 有些简单粗暴,它跳过了所有,直奔主题。

不像日历、任务列表还有个名头在前面,Recurrence 的目的是,只要你想让任何内容在指定的时间内出现在通知栏,就可以做到。

还能添加图标、颜色以及详尽的重复次数选项。

对于临时提醒来说足够用了。


©2017 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南 | 反馈 | 代理(优惠码 Appinn)
b27c41ad47c2611d60d7452a4c02dd52
Site Meter

apppackge:

News stories from Monday 20 March, 2017

Favicon for ITeye资讯频道 16:58 适用于 Android 开发的 Effective Java » Post from ITeye资讯频道 Visit off-site link
“Effective Java” 被许多人看做是编写高效且可维护的 Java 代码的重要指导书之一。Android 使用 Java 开发是否意味着里面的建议都要用上?不完全是。 有些人认为这本书给出的大多数建议不适用于 Android 开发。在我看来,情况并非如此。

我认为这本书的一些部分是不适用,不管是因为不是所有 Java 功能都已优化到能与 Android 一起使用(例如枚举、序列化等),还是因为是移动设备的限制例如 Dalvik/ART 表现不同于桌面版的 JVM)。 但不管怎样,本书中的大多数范式还是可以在稍作修改后或直接使用,从而构建一个更健康、更简洁和更易维护的代码库。

这篇博客整合了我在开发 Android 应用时,从 Effective Java 中学习到的重要内容。对于那些读过这本书的人,这篇文章就当是重新回顾一下,对于那些(还)没有阅读它的人,可以把这篇文章当作试读。

强制非实例化(non-instantiability)
如果你不想使用 new 关键字来创建对象,强制它使用私有构造函数。 这对那些仅包含静态函数的工具类尤其有用。
b475fd2b-8d7f-3ef8-828f-c8f2a9ecce19.png

静态工厂
用静态工厂方法 (同时私有化构造器) 代替使用 new 和构造函数。这些工厂方法有自己的名称,不需要每次都返回一个对象的新实例,还可以根据需要返回不同的子对象。
01b747f9-7271-3bae-9c38-1f5c79d50840.png

[更新] 我们的读者 @stsdema28 提供了一个有用的提示:静态工厂方法会造成测试困难。如果遇到这种问题,需要使用在测试中使用可模拟的非静态工厂(或者一个可实现的假接口)。

构建器(Builder)
如果你的对象需要超过 3 个构造参数,那就使用构建器来构造对象。这写起来可能有点繁琐,但它扩展性良好而且容易看明白。如果你要创建值类,可以考虑 AutoValue。
3c2b297f-62bb-30d4-88ce-8cbc8868908c.png

避免易变性
不可变对象在它的整个生命周期都保持不变。这类对象所需要的数据都是在它创建的时候提供给它的。使用不可变对象有一些优点,比如简单、线程安全以及可共享。
e36da896-fd2d-339c-81a4-7998474c9820.png

保持每个类都不可有点困难。确有必要的情况下只能尽量保持类不可变(比如使用 private final 字段和 private class)。在移动端创建对象开销很大,所以注意不要过度创建。

静态成员类
如果你定义了一个不依赖于外部类的内部类,千万别忘了把它定义成静态的。如果不这样做,会导致每个内部类的实例都持有外部类的引用。
7fc0dae0-ab99-3aa9-8ee6-45e5cc96422f.png


随处可见的泛型
Java 提供了类型安全支持。尽量避免使用原始类型或对象类型。在大多数情况下,泛型提供了编译时让代码类型安全的机制。
af14c783-f41f-386c-8c04-0f65b5bdc4bd.png

别忘了你可以在方法的参数和返回值中使用泛型:
9d11493b-9ff3-3010-85b7-7a259cb05c4a.png

为获得更佳的灵活性,你可以使用有界通配符(bounded wildcards)来扩展可接受类型的范围。
11bce523-370e-3feb-bcb6-f83262b8c744.png

返回空值
当必须返回空的 list/collection 时避免使用 null。返回空的集合会使接口变简单(不需要为空返回的函数写文档或注释)并可以避免随机的 NPE。建议返回同一个空集合而不是重新创建一个。
7fb01cec-425e-3e6e-9bcc-2d9ec7f93982.png

不要使用 + String 操作
要连接几个字符串时,+ 操作也许可行。但不要将其用于大量字符串的连接,这样性能很糟糕。建议用 StringBuilder 替代。
ab9c7926-6460-39a6-9191-14e076b721d4.png

可恢复的异常
我不赞成抛出指示错误的异常,但如果你这样做了,请确保异常可受检查且可恢复:
c3557ee1-a3b1-3623-a78a-de74fbfcf1e8.png

结论
这个列表并没有罗列书中的所有建议,也不是对书中某个建议的深度解析,而仅仅是对部分有用建议的摘录而已。

原文:Effective Java for Android (cheatsheet)
译者:Tocy, 边城

感谢 jihong10102006 投递这篇资讯

资讯来源:开源中国

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for ITeye资讯频道 14:25 Google 的软件工程经验总结 » Post from ITeye资讯频道 Visit off-site link
软件开发
代码库
大部分的 Google 代码都存在统一的源代码库中,可供 Google 内部所有工程师访问。但是 Chrome 和 Android 则分别有单独的代码库。

Google 的代码库,在 2015 年 1 月的统计中,共计 86T 数据,上10亿个文件,9百万个源代码文件,其中包含了 20 亿行代码。迄今为止共计 3500 万次提交,每个工作日平均发生 4 万次更新。

任何 Google 员工,都可以随意的访问所有代码,并下载、编译,可以在自己的环境下自行改写,但任何更改的提交,都需要通过代码负责人的审批才可以。

所有的开发都在库的头部进行。对代码进行任何更改后,自动化系统将进行测试,并在几分钟内通知开发者和代码审查者,对更改的测试是否失败。

代码库中每个分支都有单独的文件注明“代码所有人”,只有代码所有人才有权利审核提交的更改。通常情况下,项目组的所有成员都是“代码所有人”。
75f5d905-0a9c-372d-96e9-f8c4eedca585.png

编译系统
Google 使用分布式编译系统,叫做 Blaze。Blaze 提供了标准的命令,用于编译和测试库中的所有代码。Blaze 这种统一的编译工具,让 Google 公司的所有工程师都能随时编译和测试任何软件,也都能跨项目工作。

程序员需要撰写“BUILD”文件,用来引导 Blaze 如何编译软件。在Go语言的代码中,build 文件可以自动生成。

每个编译步骤必须是“隔离”的,只依赖于声明的输入。为了实现编译的分布式运行,必须强制要求正确输入所有的依赖:只有声明了的输入才被发送到进行编译的机器上去。

每个编译步骤的结果是确定的。这样保证了编译系统可以缓存编译结果。软件工程师可以回退到老的版本号,并重新编译,且得到完全一样的二进制结果。

编译结果缓存在云端。包括中间结果,这样当有别的编译请求过来,系统直接应用缓存的结果。

增量的重新编译非常快。编译系统运行在内存中,当重新执行编译任务时,它能够分析文件上次编译后发生的增量变化。

提交前检查。Google 有专门的自动化工具,用来在发起代码审查和准备提交更改到代码库时,进行一整套的标准检查。

代码审查
Google 开发了基于 Web 的代码审查管理工具。程序员可以申请对代码进行审查,审查者可以在浏览器上比较差异,并写上评语。当写代码的人发起一次审查申请,则系统自动发邮件给审查者,并附上代码查看页的链接。

对源代码的任何更改,必须经过最少一次审查。如果更改不是由“代码所有人”做出,则还必须由所有人中的一位进行审查。

系统可以自动推荐合适的审查者。当然,写程序的人,可以自己选择审查者。

Google 鼓励工程师们,将每一次代码更改控制在较小的规模上。 30-99 行的代码更改,通常视为“中等”;300 行以上则标记为“大”; 1000-1999 行,则是“巨大”;

测试
单元测试是必须的,在 Google 的开发中广为采用。集成测试和回归测试,也较为普及。Google 有一个自动化的工具,用来衡量测试覆盖的范围,这个结果也在代码浏览器中可以查看。

部署前一定要做压力测试。项目组要用表格或者图标显示关键参数,尤其是压力之下的延迟和错误率。

Bug 跟踪
Google 使用的 Bug 跟踪工具叫 Buganizer。有的团队,安排专人分配 Bug,有的团队则在例行的会议中分配。

开发语言
Google 内部有四大语言,一般都建议工程师在这四种里挑选。四大语言是:  C++,Java, Python, Go。不用多说,减少语言数量,可以增加代码复用,并提高内部协作。

每种语言都有代码规范,保证风格统一。公司范围内,还有针对“代码可读性”的培训,由经验丰富的老司机,对新人进行培训。代码审查,也需要对“可读性”做专门的评审。

在不同语言之间的交互操作,要通过Protocol Buffers 来处理。Protocol Buffers 是 Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面

调试工具和性能分析工具
Google 的服务器连接了很多库,提供用于调试服务器的工具。服务器崩溃时,可以自动导出堆栈轨迹到日志文件。 还有 Web 界面用于调试,可以用来查看呼入和呼出的 RPC 调用、更改的命令行标志值、资源消耗、性能分析等。

发版
Google 的大部分项目组,都有固定的软件工程师负责发版。

大部分的软件,发版比较频繁。通常是周发版,或者每两周发版,有些项目组甚至每天发。所以,自动化进行发版就是必须的了。频繁发版有助于工程师们保持斗志,提高整体速度,实现更多的迭代,从而也可以获得更多的反馈,并做出更多有益的更正。

上线
要上线任何更改,并对用户可用,则需要项目组外很多人的审批。审批来自多个方面,包括法律合规、隐私保护、安全要求、可靠性、业务需求等等。

Google 有一个内部的上线审批工具,用来执行审查和上线审批。通过定制,这个工具,对不同的产品有不同的审查和审批流程。

过错总结
发生了重大的服务事故后,相关人员要起草过错总结报告。文档描述事故细节,包括标题、概要、影响、时间段、原因、故障组件、行动。 总结的聚焦在于问题,以及未来如何解决,而不是聚焦在于人,也不是为了惩罚责任人。

频繁的重写代码
Google 鼓励频繁的重写代码,任何软件每隔几年就重写一遍。一来可以优化产品,采用最先进技术,去掉无用的功能,另外还可以转移知识到新员工,并保持员工的斗志。

项目管理
20%的自由时间
尽人皆知,google的工程师拥有 20%的自由时间,可以随意做感兴趣的东西,而无需审批。这当然是为了激发工程师的各种创意,同时也让工程师们保持高效率,而不是窒息在必须完成的任务中。 另外,也考虑到,很多员工都会私下里自己做一些东西,那么还不如鼓励大家将这些研究方向公开。

目标和关键结果
不论个人还是团队,都要明确的写下自己的目标,并评估达成目标的进度。每个季度的末尾,要根据关键结果,对目标达成情况进行打分,分数从 0 分到 1 分。这 OKR 分数是全公司内部公开的。但这并不直接用作个人绩效评估的输入。

平均得分是 0.65,但鼓励大家将目标定的高一些,所以在可完成任务之上,再加 50% 的工作量是正常的。

项目立项
对于项目立项审批,以及项目取消,Google并没有清楚定义的流程。即便是在 Google 做过 10 年的老经理,也不知道决策是如何做出的。很可能因为在公司范围内,流程并不一致,经理们可以自行判断并决策。有时候,决策是由下而上进行的,因为项目组的人都走光了。有时候,决策是自上而下的,老板们决定哪些项目得到更多的预算,那些则必须关闭。

机构重组
当关闭一个大项目时,工程师们可以自行寻找新机会,加入新团队。有的时候,还会搞“去碎片化”行动,把琐碎的分散的团队合并,这个时间工程师也可以自行选择团队和工作地点。

经常进行重组,有利于突破大公司的低效陷阱。

人的管理
岗位
Google 将“技术路线”和“管理路线”分开;将“技术领导” 从“管理”中分出;将“研究”综合到“工程”中;设置“产品经理”、“项目经理”、和“站点可靠性”来支持工程师们。

工程中主要的岗位包括:
工程经理
这是工程序列中唯一的“人员管理”岗位。软件工程师也“可能”管理人,但工程经理“总是”管理人。工程经理通常以前就是工程师,具备技术经验,以及管理人的技能。

技术领导力与人员管理能力之间,是有区别的。

“工程经理”不一定带领项目;项目通常由“技术组长”负责,当然“技术组长”也可能由“工程经理”担任,但大多数情况下都是“工程师”。项目的“技术组长”对项目中的技术问题,具有决定权。

经理负责选择“技术组长”,并监控团队绩效。工程经理还负责职场发展的培训及引领,进行绩效评估,并部分负责薪酬制定。还要做一些招聘工作。

一般来说,工程经理管理 3 – 30 个人,普遍情况下是 8 – 12 人。

工程师
在 Google,“工程”和“管理”的职业发展路线是不同的。工程师可以管理下属,但这不是必须的。在更高层次,领导力是必须的,但领导力不一定从对人的管理中来。比如,开发了极具影响力的软件,或者写的代码被很多工程师使用,也是一种领导力。

研究科学家
科学家的招聘的门槛更高,需要有学术上的论文发表能力和代码能力。除了科学家需要论文和著作外,科学家和工程师没有显著的区别。在Google,科学家和工程师一起工作,同样研发产品,同在一个团队。这样的安排为的将研究成果更好的导入产品中。

站点可靠性工程师
对系统的维护由软件工程师团队负责,而不是通常的系统管理员。站点可靠性工程师的技能要求,比软件开发工程师要稍低。

产品经理
产品经理负责管理产品,他们协调软件工程师的工作,宣讲功能特性,与其他团队配合,跟踪bug和进度,保证一切顺畅运行以开发出高质量的产品。产品经理不写代码。

计划经理/技术计划经理
计划经理有点类似产品经理,但他们不管产品,而是管理项目、过程、或运营。

工程师与产品经理、计划经理的比例,一般非常高,大约在4:1 到30:1之间。

设施
Google 有很先进的各种设备,包括游戏房、健身房,以及提供各种美食的免费餐厅,这一切都是为的将员工留在公司,多多工作。还可以带朋友来蹭饭,这样就增加了将朋友招聘进来的机会。

Google 的座位都是开放的,甚至有点拥挤,这有助于加强交流,但同时也影响了个人的专注,算是权衡之下的损失了。员工虽然有自己的座位,但每 6 -12 个月就要换一换,也是为了加强交流。

培训
Google 的培训有一下几种:
  • 新员工 (Nooglers)都要参加一个入职培训教程
  • 技术员工要参加一个“Codelabs”,进行短期的在线培训课程,其中还有编码练习
  • 许多在线和现场的培训课程
  • 对于参加外部机构的课程,Google也给予支持
每个新员工,都被指派一名正式的“导师” 和一名“搭档”,以帮助他尽快上手。

换岗
鼓励换岗流动,以在公司范围内传播知识,并提高跨组织的交流。在一个岗位工作 12 个月后,可以选择其他项目,也可以选择换个办公室。

绩效评估和奖励
Google 非常欢迎互相评价。 工程师可以彼此互赠正面评价,一种是“同事奖金”,一种是“点赞”。每名员工,每年拥有两次机会,给予其他员工以“同事奖金”提名,奖金是 100 美元。这种“同事奖金”是为了奖励员工在职责之外帮助他人。“点赞”则仅仅是表扬,没有现金奖励。

经理可以发放奖金,包括一种在项目完成后的特殊奖金。Google和其他公司一样,也有年底绩效奖和股权激励。

绩效优秀,可以晋升。而绩效差的,则需要进行改进,但有意思的是 Google 很少开除员工。员工还要对经理的绩效进行评估,以保证管理效率和管理质量。

感谢 jihong10102006 投递这篇资讯

资讯来源:codeceo

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



Favicon for ITeye资讯频道 09:42 探讨数据时代构建高可用数据库的新技术 » Post from ITeye资讯频道 Visit off-site link
引用
作者:崔秋,PingCAP 联合创始人,重度开源爱好者,曾任职于搜狗、豌豆荚,长期从事广告系统基础组件相关的研究,现主要从事开源NewSQL 数据库 TiDB/TiKV 相关的设计和研发工作。
责编:郭芮(guorui@csdn.net),关注大数据领域。
本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅2017年《程序员》

近几年,随着移动互联网的发展、云计算的普及和各种新业务的出现,数据呈现爆发式增长,给整个业务系统带来了越来越大的挑战,特别是对于底层数据存储系统。完美的高可用系统,是所有公司最理想的追求。如果只从应用层和缓存层看高可用问题,是比较容易解决的。对于应用层来说,根据业务特点可以很方便地设计成无状态的服务,在大多数互联网公司中,在业务层的最上层使用动态DNS、LVS、HAProxy等负载均衡组件,配合Docker和Kubernetes实现弹性伸缩,能够很容易实现应用服务的高可用。对于缓存层来说,也有很多可选的开源方案来帮助解决,比如Codis、Twemproxy、Redis Cluster等等,如果对缓存数据的一致性和实时性要求不高,这些方案就可以很好解决缓存层面的问题。但对存储层来说,支持高可用非常困难。

在互联网架构中,最底层的核心数据存储一般都会选择关系型数据库,最流行的当属MySQL。大数据时代,大家渐渐发现传统的关系型数据库开始出现一些瓶颈:单机容量不能支撑快速增长的业务需求;高并发的频繁访问经常造成服务的响应超时;主从数据同步带来的数据不一致问题;大数据场景下查询性能大幅波动等等。

当前,数据库方案有了很多不一样的变化。首先,不同于早期的单机型数据库,在当下数据呈现爆发式增长,数据总量也从GB级别跨越到了TB甚至PB级别,远超单机数据库的存储上限,所以只能选择分布式的数据存储方案。其次,随着存储节点的增加,存储节点出问题的可能性也大大提高,光靠人工完全不现实,所以需要数据库层面保证自己高效快速地实现故障迁移。另外,随着存储节点的增加,运维成本也大大增加,对自动化工具也提出了更高要求。最后,新分布式数据库的出现,用户在OLTP数据库基本需求的基础上,对大数据分析查询的业务要求更高,在某种程度上OLTP和OLAP融合的新型数据库会是未来极具潜力的发展方向之一。

什么是高可用
Wikipedia的解释中,高可用即High Availability,一般通过SLA(Service Level Agrement)来衡量。这里从CAP角度来看待高可用问题。CAP是分布式系统领域一个非常著名的理论,由Berkerly的Brewer提出。该理论认为任何基于网络的分布式系统都具有以下三要素:
  • 数据一致性(Consistence):等同于所有节点访问同一份最新的数据副本;
  • 可用性(Availability):对数据更新具备高可用性;
  • 分区容忍性(Partition tolerance):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A间做出选择。
三要素不能同时满足。但后来很多人将CAP解读为数据一致性、可用性和分区容忍性最多只能满足两个,这种解读本身存在一定的误导性,原因就在于忽略了特定条件。假想两个节点N1和N2,在某些场景下发生了分区(P)问题,即N1和N2分处分区的两侧。这时对于外部的写操作来说,如果允许任一节点可写的话就相当于选择了A,丧失了C。同样,如果为了满足C,那么写入操作就会失败,A就无法保证,所以存在分区问题时,无法同时保证A和C。虽然分区在局域网中出现的概率相对很低,但却无法避免,所以系统只能在CP和AP之间做出权衡。

当前有很多的NoSQL数据库,在CAP之间选择了AP,比如Amazon Dynamo和Cassandra,追求可用性,适当牺牲一致性,只实现最终一致性。这种选择允许短时间的数据不一致,并且可以交由用户自己来处理写入冲突,但是可以随时接受用户的读写请求。在这种场景下就需要特别注意数据不一致引起的各种奇怪问题,对于比较严肃的业务场景,比如订单、支付等,对事务和一致性要求比较高,这种AP类型的系统就不适用了。而且该系统放弃了SQL和ACID事务,给开发人员带来了更多的开发工作和额外的心智负担,很容易出现问题,所以NoSQL数据库牺牲一致性来获取服务的可用性,并没有彻底解决大数据时代数据库的高可用问题。

大数据时代,传统的关系型数据库必然会由单机扩展到分布式,追求数据一致性,所以必然会是一个CP类型的系统,像这种新型的、下一代的分布式关系型数据库,既具有传统单机数据库的SQL支持和ACID事务保证,又有NoSQL数据库的Scale特点,称为NewSQL数据库,包括Google的Spanner/F1、PingCAP的TiDB等等。但从CAP的角度看,选择CP并不意味着完全放弃了A,CP系统只是在某些产生分区的场景下不能实现100%的A,但完全可以通过有效的办法来实现高可用(HA)。由此可见,并不是CP系统就完全放弃了A,只不过在产生分区的场景下无法从理论上保证A,这是一个常见的误解。

澄清了CAP的问题,下面讨论如何打造高可用的数据库。数据库是一个非常大的概念,从传统单机SQL,到NoSQL,再到现在流行的NewSQL,这里面不同的实现方案实在太多,本文聚焦在关系型数据库,主要探讨最流行的MySQL数据库及其生态。最近几年,随着大家在分布式数据库领域的探索,出现了很多不同类型的解决方案,比如中间件/Proxy的方案,典型的比如TDDL、Cobar、Altlas、DRDS、TDSQL、MyCAT、KingShard、Vitess、PhxSQL等,还有一种新型的NewSQL数据库,比如Google Spanner/F1、Oceanbase、TiDB等。下面看下业界在打造高可用数据库方面新的技术进展,以及和传统方案选型的对比。

消除单点问题
为了实现数据库层面的高可用,必须要消除单点问题(SPOF)。存在单点服务的情况下,一旦单点服务挂掉,整个服务就不可用。消除单点问题最常用的方案就是复制(Replication),通过数据冗余的方式来实现高可用。

为什么必须要冗余?数据库本身是有状态的,不会像无状态的服务那样挂掉就可以重启,而数据库本身能够保证数据持久化,所以如果没有冗余副本,一旦数据库挂掉,只能等待数据库重启,在这段恢复时间服务完全不可用,高可用就无法保证。但如果有了额外的数据副本,高可用就变得可能了,主要能保证在检测到服务发生问题之后及时做服务切换。

对于MySQL来说,默认复制方式是异步的主从复制方式,虽然这种方案被很多的互联网公司所采用,但实际上这种方案存在一个致命问题——存在丢失数据的风险。数据传输经过网络,这也就意味着存在传输时延,那么对于异步复制来说,主从数据库的数据本身是最终一致性的,所以主库一旦出现了问题,切换从库极有可能会带来数据不一致的风险。

因为异步复制方式存在更大的问题,很多时候大家都会考虑用半同步复制方式Semi-Sync,这种数据复制方式在默认情况下会使用同步的数据复制方式,不过在数据复制压力较大的情况下,就会退化成异步的数据复制方式,所以依然会存在高可用问题。当然,也有人会选用完全同步的方式,但是这种复制方式在并发压力下会有明显的性能问题,所以也不常用。

那有没有一种数据复制方式,能同时保证数据的可靠性和性能?答案是有的,那就是最近业界讨论较多的分布式一致性算法,典型的是Paxos和Raft。简单来说,它们是高度自动化、强一致的复制算法。以Raft为例,Raft中基数个节点组成一个Raft Group,在一个Raft Group内,只要满足大多数节点写成功,就认为可以写成功了,比如一个3节点的Raft Group,只要保证Raft Leader和任意一个Raft Follower写成功就可以了,所以同步写Leader,异步写两个Follower,只要其中一个返回就可以,相比完全的同步方式,性能要好很多。所以从复制层面来看,Raft更像是一个自适应的同步+异步复制方案,同步和异步的最优选择通过Raft算法来保证。

庆幸的是,业界早已意识到这个问题,从最开始的Galera Cluster探索到前段时间微信开源的PhxSQL,再到最新MySQL官方发布的MRG(MySQL Group Replication),还有我们从0到1打造的开源分布式数据库TiDB,都在这方面进行了探索。大家的出发点基本相同,采用新的分布式一致性来替换传统的Master-Slave复制方式,不同的仅仅是大家选择的协议:TiDB选择了Raft,而PhxSQL和MRG选择了Paxos。

由此看出,新一代高可用的数据库必然会使用分布式一致性算法来实现数据复制,这已是业界的趋势。

自动故障恢复
有了数据复制,理论上来说,在一个数据库节点出现问题时就不用那么慌张,毕竟还有额外的数据副本存在。所以下面要做的就是尽早发现服务故障并快速恢复,也就是常说的Auto-failover。

从这个层面来看,目前基于主从的数据库复制方案基本上无法脱离运维,使用中间件/Proxy方案更会增加难度,毕竟人力运维是有上限的,所以选择这种方案,人力成本也是一个需要考虑的问题。Google之前在广告业务中也是使用的MySQL中间件方案,大约100个节点的规模,在这个量级下维护的复杂度和成本非常高。所以Google要做一个真正替换MySQL中间件的理想方案,这就有了后来的Google Spanner/F1,包括后来的TiDB,都采用了这种新的NewSQL架构,唯一不同的是,Google选择了Paxos,而TiDB选择了Raft。这种分布式一致性算法,除了提供优雅的复制方案,还可以提供高效的Auto-failover支持。

要想实现Auto-failover,首先需尽快检测到Fail情况。常用方式是通过LVS或者HAProxy之类的负载均衡组件,或者通过类似的Monitor进行远程监控,但对于网络来说,存在三种不同的状态:Success/Failure/Timeout,因为存在Timeout,Monitor的监控不完全准确,而且Monitor本身也会存在高可用问题,所以外部监控不一定完全靠谱,这也是需要考虑的问题。但是以分布式一致性算法Raft为例,Raft内部维护Raft Group,正常情况下都是Leader提供数据读写服务,当Leader出现问题时会自动从Follower中选择新的Leader出来。Raft通过内部的心跳来感知不同节点的状态,并且直接完成Auto-failover,所以Raft是高度自动化并且可以自恢复的。相比于检测再处理的算法,这种基于分布式一致性算法的Auto-failover能力更强,效率更高,当然速度也更快,基本上在秒级别就可以完成Leader更新,继续提供服务,而且是完全自动化的。

关于Auto-failover还有一个引申的跨数据中心多活问题。这基本上是所有分布式系统开发者心中的圣杯,金融级别的数据可用性和安全性。目前从纯软件方案来看,基本没有靠谱的方案,大多数人所谓的异地多活方案实际上底层仍是同步热备,而且很难在保证延迟的情况下同时保持一致性,但是基于Paxos/Raft的方案给多活提供了新的可能性。还是以Raft为例,只要一个Raft Group内的大多数节点复制成功,并在物理节点层面按照特定的方式部署,就可以在软件层面构建一个两地三中心的方案。举个例子,如果这个Raft Group内有三个节点,分别在北京、天津和上海的三个数据中心,对于传统的强一致方案,一个在北京发起的写入需要等待天津和上海的数据中心复制完毕,才能给客户端返回成功,但是对于Raft这样的算法,延迟仅仅在北京和天津数据中心之间,相比传统方案大大降低了延迟。虽然对于带宽的要求仍然很高,但这是未来在数据库层面上实现跨数据中心多活的一个趋势和可行方向,实际上Google分别位于美国西海岸、东海岸以及中部的Spanner数据中心,已经做到了跨地域的数据高可用。真正实现跨数据中心多活,就不用担心挖断光纤导致服务不可用之类的问题了。

在线扩容
随着数据库的数据量越来越大,Scale是不可避免的问题。对于数据库来说,技术层面最大的追求就在于如何不停服务地对数据库节点进行Scale操作,这是非常有挑战性的事情。以中间件/Proxy方案来说,很多时候不得不提前对数据量进行规划,把扩容作为重要的计划来做,从DBA到运维到测试到开发人员,很早之前就要做相关的准备工作,真正扩容时为了保证数据安全,经常会选择停服务来保证没有新的数据写入,新的实例数据同步后还要做数据的一致性校验。当然业界大公司有足够雄厚的技术实力,可以采用更自动化的方案,将扩容停机时间尽量缩短(但很难缩减到0),但大部分中小互联网公司和传统企业依然无法避免较长时间的停服务问题。TiDB完全实现了在线的弹性扩容,主要基于Placement Driver的调度和Raft算法。

Placement Driver是TiDB核心组件之一,时刻监控整个系统的状态,包括每个机器的负载和容量等。当加入一个新的节点时,它会感知到这个事件,并会触发其他负载较高的节点进行Balance操作,通过Raft算法的Config Change和Leader Transfer操作来让整个系统的负载平衡。对用户来说,有了这个特性体验会非常好。如果是电商用户,那么在促销活动之前(比如双11),提前增加数据库节点就可以支撑更高的业务压力,而当活动过后又可以移除掉多余的节点,又可以收缩回来,整个弹性伸缩过程非常平滑,基本就是几个简单的操作,其它一切都是高度自动化的,使用成本特别低。

当然这里面还有一个影响高可用的因素,就是对于一个Paxos或者Raft Group来说,如果数据量太大,在数据Balance或者Recover时就会有很长的数据传输和更新时间,所以将数据在线切分成比较小的数据块是不可或缺的操作,也就是常说的分裂(Split)操作。其中最困难的在于如何保证Split操作的原子性,并且让路由不一致的时间窗口尽可能缩短。TiDB完整实现了在线Split操作,内部处理了路由更新的重试操作,所以对于应用层来说基本上无感知。

在线表结构变更
数据量较大时,数据库的DDL操作也是一个需要注意的高可用问题。以常见的Add Column操作为例,在表规模很大的情况下通常会造成数据库锁表,导致数据库服务不可用。对于中间件/Proxy方案来说,因为依托于底层的单机MySQL数据库提供DDL支持,所以很难从根本上解决,只能依赖于第三方工具,比如Facebook和Percona的方案,当然这些方案也有本身的局限性。最近业界有了更好的进展,比如Github数据团队的方案gh-ost,处理表级别的Binlog,将原表的数据同步到新的临时表中,当数据追平时再进行一个数据库操作,将临时表命名为原表,这样一个AddColumn操作就完成了。这种方案依然要引入额外的组件,除了学习成本之外,也要考虑额外组件的高可用问题。但实际上Google的F1给我们提供了更好的实现参考,TiDB即是根据F1启发进行的研发,简单来说,就是通过把TiDB中DDL操作的状态设定为前向兼容的几个不同状态,中间严格保证不能跨越两个状态。为什么这样?因为整个TiDB集群是分布式的,没有办法把DDL操作实时通知给所有的TiDB节点,就会出现部分TiDB节点感知到了DDL变化,另一部分TiDB节点还没有感知到的情况,这样就可能导致数据不一致。比如对于一个Add Index的DDL,有一个节点先感知到了,然后对于插入数据就增加了一个Index,但是另外一个节点没有感知到,正好这个节点还有一个删除操作,所以就只把行数据删除了,但Index还留在里面,这样当使用Index查询这行时就会找不到数据。TiDB参考的算法是Google F1中一个非常经典的算法,感兴趣的可以看看这篇文章Online, Asynchronous Schema Change in F1。

大数据时代,新的业务类型和数据爆发式增长,给数据库带来了更大的挑战,新的方案层出不穷。本文主要从几个方面介绍打造高可用数据库的新技术进展,以及和传统技术方案的对比,抛砖引玉,希望能给整个技术社区带来一些参考和帮助。
引用
中国云计算技术大会将于5月17日-19日在北京举办,业界大咖聚首北京,更多信息请登录官网


感谢 jihong10102006 投递这篇资讯

声明:本文系ITeye网站发布的原创资讯,严禁任何网站转载本文,否则必将追究法律责任!

已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐