News stories from Sunday 23 July, 2017

Favicon for 开源中国社区最新新闻 08:22 软件周刊 | IntelliJ IDEA 2017.2 正式发布 » Post from 开源中国社区最新新闻 Visit off-site link

摘要: 软件周刊(07.16 — 07.22):本周热门软件更新 — Wine 2.0.2 发布,Windows 应用兼容层;ArangoDB 3.2 正式版:提升性能,减少内存占用;JDK 8u141 发布,Java 开发工具包;MySQL 8.0.2 DMR 发布,添加窗口函数功能;Kubernetes 1.7.1 版本发布,容器集群管理系统

Favicon for 开源中国社区最新新闻 08:17 每日一博 | Spring-Boot & ZXing 搭建二维码服务 » Post from 开源中国社区最新新闻 Visit off-site link

摘要: 搭建一个二维码的生成 & 解析服务, 使用 Java Web 对外提供 http 调用,返回 base64 格式的二维码图片

Favicon for 开源中国社区最新新闻 08:17 协作翻译 | 如何成为一名全栈开发人员 » Post from 开源中国社区最新新闻 Visit off-site link

全栈工程师是可以将最初的原型转换成为 MVP(最低可行产品),他们通常被称之为行业的万精油,无所不会的大师,而且有很好的声誉。为了定义现代的全栈工程师,我们首先需要关注的是完整的堆栈开发人员曾经是什么。

Favicon for 开源中国社区最新新闻 08:14 码云推荐 | MVC 代码自动生成器 BeegoCURD » Post from 开源中国社区最新新闻 Visit off-site link

通过简单的命令行快速构建基于 Beego1.9 和 Bootstrap3 的 CURD 项目(通过数据库自动生成对应表的 CURD 全套 MVC 代码)。

Favicon for 开源中国社区最新新闻 08:13 Sockeye — 基于 Apache MXNet 的神经机器翻译框架 » Post from 开源中国社区最新新闻 Visit off-site link

Sockeye 是一个基于 Apache MXNet 的快速而可扩展的深度学习库。Sockeye 代码库具有来自 MXNet 的独特优势。例如,通过符号式和命令式 MXNet API,Sockeye 结合了陈述式和命令式编程风格;它同样可以在多块 GPU 上并行训练模型。

Favicon for 开源中国社区最新新闻 08:13 OSChina 周日乱弹 —— 程序员的世界,医疗与众不同 » Post from 开源中国社区最新新闻 Visit off-site link

星巴克 一家以咖啡店为主题的照相馆。 。。肯德基 一家以快餐店为主题的公共厕所。。。学校 一所以学习为主题的婚姻介绍所。。。

Favicon for 开源中国社区最新新闻 08:06 Java 语言频遭替换,这次真的要狗带了吗? » Post from 开源中国社区最新新闻 Visit off-site link

074943_Obf4_2903254.png

斯坦福大学在最近更新的《程序设计方法学》课程中(代号 CS 106J),用 JavaScript,替换掉了此前主修的 Java 语言(课程代号 CS 106A)。

075001_FfZX_2903254.png

本次变动由名誉教授 Eric Roberts 牵头,作为 CS 106 系列课程的先驱,在他当年加入该校时,教授的仍是基于 Pascal 的编程语言。在 Java 变得流行之后,斯坦福顺势做出了改变。不过Eric Roberts 指出,现如今,Java 已显得年迈。

据悉,在过去五年里, Eric Roberts 和 CS 106 课程的初始创始人一直在为该部门编写向JavaScript 转型的教材,除编写教科书之外,他还为新的编程语言创造新的课程任务等。此举旨在将 CS 106 课程全面转向代表互联网时代的 JavaScript 编程语言。

1. Java时代即将结束?

斯坦福大学是美国计算机科学最重要的机构之一,斯坦福课程的选择对毕业生未来的职业发展有者至关重要的影响因素,那么此次课程的变动是否意味着 Java 的时代即将结束?

显然这不可能!计算机科学荣誉教授 Eric Roberts 表示,尽管斯坦福大学的入门课程是 JavaScript,但大部分高级计算机科学课程仍然是 Java。Java 编程语言早就成为斯坦福 大学的核心课程。此次变动只是因为他们注意到 Java 对初学者来说很难,但 JavaScript 比较容易,特别是对于初学者只是学习如何编写代码来说。看个例子,你就知道了↓↓↓

以下是Java:

class HelloWorld {public static void main(String[] args) {

System.out.println("Hello, world!");

}

}

以下是JavaScript:

alert('Hello, world!');

相比之下,由于 JavaScript 的‘膨胀’要少得多,所以理解起来 JavaScript 确实比 Java 容易很多。

接下来我们用实际数据看看Java 和 JavaScript 两者之间的区别。

2. 数据说明

075524_Fxua_2903254.png

从谷歌趋势(google Trends)看出:从2014年至今,公众对 Java 和 JavaScript 的关注度都有所减弱。相较而言,Java 减弱的幅度大一些。

075559_gXo5_2903254.png

但是,就 7 月份 TIOBE 编程社区指数来说,Java 仍然是冠军,而 JavaScript 处于第 8 的位置,两者之间的排名还是有点差距的。

075729_tqk5_2903254.png

Stack Overflow 2017 开发者调查报告,结果显示:Java 连续 5 年成为继 SQL 和 JavaScript 之后的第三大流行语言,不过,值得一提的是在这项排名中,JavaScript 排行第一,由此可见,JavaScript 在这个互联网时代的重要性也是不容小觑。

其实,很早之前就在流传“Java 已死”,2010 年 Oracle 收购 Sun 和 Java 之后,人们就预测它将会减少一半的市场,但时至今日,Java 仍然活的好好的。尽管在桌面领域的地位日益削弱,但Java 仍是最受欢迎、应用最广泛的编程语言。它对于许多业务系统来说仍然必不可少。

接下去,或许我们仍会听到一些类似 Java 时代即将过去的言论,但是这并不意味着Java 真的过时了,种种迹象表明,我们完全有理由相信 Java 会一直活得很好并将持续发展下去。

075755_AEvv_2903254.png

综合来源:cnBeta.comIT168

作者:猿妹

Favicon for 开源中国社区最新新闻 08:06 不同版本的 Firefox 启动 1691 个标签页需要多长时间? » Post from 开源中国社区最新新闻 Visit off-site link

Dietrich Ayala 的 Firefox 浏览器有 1691 个标签,你有没有想象过 Firefox 启动 1691 个标签页需要多长时间,一个标签又要多长时间显示?Dietrich Ayala 为 Mozilla 工作,他用这个极端的案例展示了 Firefox 处理超多标签页方面的改进,旧的版本可能需要花分钟时间启动,如今新版本只需要几秒钟。

1.jpgMozilla 内部有一个名为 Quantum Flow 的项目,任务就是改善浏览器的响应。他测试了使用 Firefox v20、30、40、50 到 56 启动 1691 个标签所需的时间和占用的内存。

结果显示,Firefox 51 启动时间最长接近 8 分钟,但之后的版本启动时间大幅减少,Firefox 55 只需 15 秒钟。内存占用也从 Firefox 52 的超过 2GB 减少的 56 的不到 500MB。   

来源:cnBeta.com

Favicon for 开源中国社区最新新闻 08:05 最古老的 Linux 发行版 24 岁了,至今仍在维护 » Post from 开源中国社区最新新闻 Visit off-site link

Slackware 是由 Patrick Volkerding 制作的 Linux 发行版,从 1993 年发布至今也一直在 Patrick 带领下进行维护。7 月 17 日,Slackware 才刚刚过完它 24 岁的生日,看似年纪轻轻的它,已然是 Linux 最古老的发行版。

Slackware 的发布频率并不高,最近一个版本是去年发布的 14.2,再往前的 14.1 版就要追溯到 2013 年了。现在, Slackware 仍在继续向前发展,其滚动版代码被运用在 Linux 4.9 LTS 内核,相比 14.2 版也新增了许多新的软件包。希望 Slackware 往后的发展会越来越好。

175105_FSLn_2903254.png

编译自:Phoronix

Favicon for 开源中国社区最新新闻 08:05 越来越热的 AI ,需要更多的是耐心,而不是吹捧 » Post from 开源中国社区最新新闻 Visit off-site link

科技界的热词总是一波接一波。最先是“开放”,几乎所有巨头都在搭建自己的“开放平台”;接着是“云计算”,一夜之间,几乎所有的服务器都被“云”取代;再然后是“大数据”,每个公司都在说挖掘,可实际的成果却寥寥。

现在,我们又进入到了“AI”时代,有越来越多的企业都在用人工智能技术把自己“包装”得更为聪明。

从腾讯成立西雅图人工智能实验室,到百度宣称自己是一家人工智能公司,再到阿里开始兜售搭载着人工智能的音箱,人工智能这股风已经席卷了国内科技界。而这股浪潮不止局限在国内。据统计,到去年年底,在财富500强企业中,就有180家对外宣称自己要启动相关的人工智能项目。甚至有广告研究公司大胆预估,到了 2020 年,人工智能技术可能会出现在几乎所有的新科技产品的宣传之中。

194352_Ze7o_2903254.png

(财富 500 强中提到人工智能的公司数量,图源:彭博)

如果人工智能能够代表一家公司的智商的话,那么财富 500 强俱乐部可以说在短短两年内,从充斥着懵懂无知孩童的幼儿园变成了一个平均智商过 120 的门萨俱乐部。

在这一热潮之中,也有人表达了他的顾虑。他担心,现在对人工智能的过度吹捧,会让消费者丧失对人工智能技术的信心。消费者一旦发现这些标榜着 “人工智能” 的产品与实际体验上的巨大落差,就会对人工智能保持怀疑态度。因为,就现在的技术来看,现在宣传的人工智能 (AI) ,与其说是人工智能 (Aritifical Intelligence) ,倒不如说是人工吹捧 (Artifical Inflated) 。

如果让我们冷静下来观察一下业界,我们就会发现,尽管人工智能技术在近几年来飞速发展,但要是说很多公司突然之间在人工智能领域都有了值得宣传的进展,显然是不现实的。因为人工智能技术本身需要的是大量的数据支持和资金支持。

194409_rUDd_2903254.png

(AI的发展,靠的是投入大量的资金和数据,图源:MyGame )

首先是数据。现在鲜有公司能够有足够多的数据来训练他们的人工智能。哪怕像苹果、Amazon这样的巨头,坐拥海量的数据,但表现到具体产品上——比如说Siri、Amazon Echo,其功能还是非常简单的。

其次是资金。先别说企业需要在人才、计算设备、数据存储方面的巨额投入,就单单是人工分拣数据这一项,就让Amazon 雇佣了一万五千名到两万名的低收入员工。这,足以看出 AI 对资金的需求量之大。

194419_ZSpt_2903254.png

(人工分类数据,往往是 AI 学习的重要一步,图源:CrowdFlower)

而如此巨大的资金投入,得到的却是一些看起来毫无革命性的结果,这对大部分公司来说,都是一个亏本的买卖。作为一线的开发者们,显然比公司高层更了解这个现实。就拿 VisionMobile 针对 8500 名开发者的调查来说,相信基于人工智能的聊天机器人(就是像小冰、小七、小鱼、 BabyQ 这样的聊天机器人)能够给公司带来利润的,不到 25%。

194445_1gOV_2903254.png

(那些我们调戏过的聊天网红机器人们,图源:科技猎)

而人工智能的先行者——Facebook 也已经意识到了这一问题,在推出他们的人工智能机器人 Chatbot 短短 11 个月后,就决定削减在这方面的投入。

一边是尚处于起步阶段的人工智能,另一边却是公司营销部门越来越夸张的宣传。

据广告研究公司 Gartner 的一位分析师在研究了 1,000 家宣称自己使用了人工智能的技术供应商后发现,大部分所谓的人工智能技术,采用的依旧是基础的、基于规则的机器学习和分析技术。这些技术,早在人工智能这个概念被热炒之前,就已经出现并被学界所使用;此外,这些技术的能力也远远未达到可以被称得上“人工智能”的程度。

换句话说,现在被用于产品中的“人工智能”,和科技巨头们花大价钱研究的,可以说得上是两种不同的事物。而营销部门的冒进,让大家乐观的以为,让人工智能驱动万物已经是指日可待。

(现在的人工智能,就连简单的识别动物,可能都还会出错,图源:彭博)

这些过度的吹捧,对于正处于起步阶段的人工智能领域来说,恐怕更多的,带来的是“揠苗助长”的效果。

所以,如果大家都能够承认这一点,从简单的服务出发,脚踏实地,那么消费者和投资人对 AI 的信心,也不会在一次又一次的失望中消磨殆尽。

而耐心等待,恐怕是我们这些观察者,能够给予人工智能产业的,最好的支持了。

来源:爱范儿

Favicon for 开源中国社区最新新闻 07:59 PHP 7.2.0 Beta 1 发布,7.2.0 首个测试版 » Post from 开源中国社区最新新闻 Visit off-site link

PHP开发团队宣布 PHP 7.2.0 Beta 1 发布了。这是7.2.0的第一个测试版。

该版本在原来版本的基础上进行了一下更新:

  • The much anticipated Sodium extension

  • Opcache improvements

  • Countable support for DOMNodeList and DOMNamedNodeMap

  • Improved handling for invalid UTF8 in json_decode()

  • And many bugfixes...

完整内容请查看发行说明

下载地址:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:53 Keycloak 3.2.1.Final 发布,身份和访问管理 » Post from 开源中国社区最新新闻 Visit off-site link

Keycloak 3.2.1.Final 已发布。Keycloak 是一个针对现代应用程序和服务的开源身份和访问管理,为应用程序和安全服务添加最小化身份验证。无需处理存储用户或验证用户,开箱即用。

此版本不包含任何新功能。只有一些与授权服务相关的错误修复和新增管理REST API的新权限。

更多内容请点此查阅发行说明

下载地址:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:36 GitLab v9.4.0 和 v9.5.0.pre 发布,代码托管平台 » Post from 开源中国社区最新新闻 Visit off-site link

GitLab v9.4.0 和 v9.5.0.pre 发布了。GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。

更新内容请关注发布主页

下载地址:

v9.4.0

v9.5.0.pre:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:30 Sequelize 4.4.2 发布,Node.js 的 ORM » Post from 开源中国社区最新新闻 Visit off-site link

Sequelize v4.4.2 已发布,Sequelize.js 提供对 MySQLMariaDBSQLite 和 PostgreSQL 数据库的简单访问,通过映射数据库条目到对象,或者对象到数据库条目。简而言之,就是 ORM(Object-Relational-Mapper)。Sequelize.js 完全是使用 JavaScript 编写,适用于 Node.js 的环境。

本次更新主要是修复了如下bug:

GitHub 发布主页

下载地址:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:26 Wine 2.13 发布,带来一些改进和问题修复 » Post from 开源中国社区最新新闻 Visit off-site link

Wine 2.13 发布了。Wine (“Wine Is Not an Emulator” 的首字母缩写)是一个能够在多种 POSIX-compliant 操作系统(诸如 Linux,macOS 及 BSD 等)上运行 Windows 应用的兼容层。Wine 不是像虚拟机或者模拟器一样模仿内部的 Windows 逻辑,而是将 Windows API 调用翻译成为动态的 POSIX 调用,免除了性能和其他一些行为的内存占用,让你能够干净地集合 Windows 应用到你的桌面。

该版本带来了不少改进和问题修复,更新日志如下:

  • Unicode数据更新为Unicode 10.0.0;

  • 默认鼠标光标更加美观;

  • WinHTTP支持Persistent connections;

  • WebServices支持消息帧协议;

  • 改进GdiPlus中的元文件支持;

  • x86-64异常处理支持调试寄存器;

  • DirectWrite中的抗锯齿改进;

  • 各种bug修复。

下载地址:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:21 Debian 9.1 发布,包括一些包的更新 » Post from 开源中国社区最新新闻 Visit off-site link

Debian项目很高兴地宣布其稳定分布的Debian 9(“stretch”)的第一次更新。这一点的发布主要增加了对安全问题的修正,以及对严重问题的一些调整。

这实际上不是一个新的版本或类似的东西,只是一些包的更新。所以没必要抛弃“stretch”版本。

该稳定版本主要对如下包进行了修正:

  • 3dchess:Reduce wasteful CPU consumption

  • adwaita-icon-theme:Fix malformed send-to-symbolic icon

  • anope:Fix incorrect mail-transport-agent relationship

  • apt:Reset failure reason when connection was successful, so later errors are reported as such and not as connection failure warnings; http: A response with Content-Length: 0 has no content, so don't try to read it; use port from SRV record instead of initial port

  • ……

完整更新内容请查看发行说明更新日志

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:03 fastjson 1.1.60.android发布 » Post from 开源中国社区最新新闻 Visit off-site link

这个版本主要是从标准版本backport bug fixed & features

Issues

  1. 修复泛型参数对象不使用参数和使用参数混用导致解析类型不对的错误 #1265

  2. 反序列化支持SnakeCase和PascalCase名称自动识别 #1335

  3. 修复多层泛型嵌套导致反序列化错误的问题 #569

  4. 提升大小写不敏感匹配、SnakeCase匹配的性能

  5. 增强日期格式的parse支持 #1152 #1298

  6. 修复enum类型实现JSONAware接口不起作用的问题 #1222

  7. 增强对TypeRefernce的支持

相关链接

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

News stories from Saturday 22 July, 2017

Favicon for 开源中国社区最新新闻 23:45 memcached 1.5.0 发布 » Post from 开源中国社区最新新闻 Visit off-site link

memcached 1.5.0 已发布 。 memcached 是一套高性能、分布式内存对象缓存系统,通用性质,旨在用于通过减轻数据库负载加快动态 Web 应用。

这个版本使1.4.39  中的 选项 - o modern 成为默认选项。如果平台支持的话,它还增加了--long-options (see --help|-h),以及修复了一些小bug。

完整更新内容请查看发行说明

下载地址:

Favicon for 开源中国社区最新新闻 14:52 Canonical发起投票:你希望Ubuntu 18.04预装哪些应用? » Post from 开源中国社区最新新闻 Visit off-site link

144920_aJRa_2720166.jpg

在 HackNews 社区讨论即将到来的 Ubuntu 17.10(Artful Aardvark)操作系统之后,Canonical 的 Dustin Kirkland 现又向 Ubuntu 社区征求意见,看大家希望给 Ubuntu 18.04 LTS 预装哪些应用。

在讨论 Ubuntu 17.10 的时候,许多用户已经积极发表过他们的意见,Canonical 也在 Ubuntu 17.10 中实现了用户很多的需求,包括以 GNOME 桌面环境取代 Unity 界面、新版 BlueZ 带来的蓝牙改进、以及更好的 4K HiDPI 和多屏设置支持。

此外,它还将默认网络连接管理器换成了 NetWorkManager 1.8、切换至使用 libinput 库(作为一个在 Wayland 合成器中处理输入设备的通用 X.Org 输入驱动)、部署全新的 Subiquity 安装程序、以及将镜像的尺寸缩减 18% 。

当然,他们也在努力带来更好的 GPU/CUDA、EXT 加密(fscrypt)、从 Ubuntu 17.10 的 /boot 路径中自动移除旧内核等功能支持。

不过现在,Canonical 希望大家投票选出 Ubuntu 18.04 LTS 的预装默认应用。作为 Ubuntu 的下一个长期支持版本,它定于 2018 年 4 月份正式与大家见面。

Ubuntu 产品战略经理 Dustin Kirkland 表示:“我们邀请您列出一份清单,以找到在 Linux 中最实用的应用程序”。

要投票给您最喜欢的应用程序,点此访问

来自:cnBeta.COM 原文:SOFTPEDIA

Favicon for 小众软件 - Appinn 14:45 Motion Stills 终出 Android 版本,拍摄 GIF、快进和合成影片 » Post from 小众软件 - Appinn Visit off-site link

Motion Stills 是 Google 推出的一款皆在帮助 iOS 用户处理 Live Photo 图片的应用,它能够为 iOS 设备拍摄的 Live Photo 照片改善质量、转换为 GIF 动画,甚至将多张 Live Photo 连成视频。几天前 Motion Stills 推出 Android 版本,内置提供了拍摄 3 秒钟 GIF 动画、快进视频,并且可以将多张动画合成影片功能。@Appinn

由于没有 Live Photo 功能,Motion Stills 就把自己变成 Live Photo 相机,每按一次快门就会录制 3 秒钟的内容。

Motion Stills 拥有两种拍摄模式:3 秒 GIF 动画 和 视频快进。在快门按钮的地方切换。其中快进并不限制时间,支持 2~8 倍调速。

Motion Stills 使用上滑手势浏览照片,然后左右滑动删除或者添加至合成影片,使用非常简单,不用担心 Google 产,无需联网,直接使用。

可能唯一的限制就是有些 GIF 过大会导致微信发送失败…


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

apppackge:

Favicon for 开源中国社区最新新闻 09:31 renren-fast v1.1.0 发布,Java 快速开发平台 » Post from 开源中国社区最新新闻 Visit off-site link

renren-fast是一个轻量级的Java快速开发平台,能快速开发项目并交付【接私活利器】

v1.1版本更新日志:

  • 1、菜单默认展开一级

  • 2、后端校验,错误信息一次打印出来

  • 3、系统日志,添加执行时长,方便查看执行效率

  • 4、集成swagger-ui,配置yaml文件,则生成相应接口文档,移除swagger注解

  • 5、增加redis支持,提供开启、关闭redis功能

  • 6、增加前端表单校验

  • 7、修复系统退出后,token未失效BUG

演示界面:

9b0c60dfe7ee48fb87bb933e31ebf36f

项目地址

Favicon for 小众软件 - Appinn 09:24 Censor for Photos – 专业添加「马赛克」,保护照片隐私部分 [iPhone] » Post from 小众软件 - Appinn Visit off-site link

Censor for Photos 是一款专门为 iPhone 里的照片打上马赛克的应用,支持多种马赛克样式,来为那些隐私照片提供保护。@Appinn

在网络上分享照片是一件愉快开心的事情,但是隐私泄漏又是一件忧伤的事情,而马赛克就能平衡这两者之间的关系。

虽然有一种搞恶是给原本正常的照片添加一些无比邪恶的马赛克,于是整个画风都不对了…我们还是来说 Censor for Photos

Censor for Photos 有三种马赛克类型:模糊、传统马赛克、黑条。可以选择矩形或者用手画。除此之外还能对照片进行剪裁。

黑条就是电视里常见的,有点犯罪嫌疑人的感觉…马赛克常见于某 V 片,青小蛙觉得平时就用模糊吧,一种很大方、优雅的保护隐私方式。


相关阅读


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

apppackge:

Favicon for 开源中国社区最新新闻 08:24 源资讯 | 赶超 Java 和 PHP,Python 成最热门语言? » Post from 开源中国社区最新新闻 Visit off-site link

摘要: 【一周源资讯(2017.7.15-2017.7.21)】JetBrains 近日发布了2017 开发者生态报告,JavaScript 是最常用的语言,而 Go 被认为是最有前途的语言,但在 IEEE Spectrum 发布的编程语言排行榜和 Packt 发布的 2017 年度技能调查报告中,Python 最终获得冠军!

Favicon for 开源中国社区最新新闻 08:24 每日一博 | Golang 依赖管理工具: Glide 从入门到精通 » Post from 开源中国社区最新新闻 Visit off-site link

不论是开发 Java 还是你正在学习的 Golang,都会遇到依赖管理问题。Java 有牛逼轰轰的 Maven 和 Gradle。 Golang 亦有 godep、govendor、glide、gvt、gopack 等等,本文主要给大家介绍 gilde。

Favicon for 开源中国社区最新新闻 08:24 协作翻译 | 掌控 JavaScript 面试:什么是函数式编程? » Post from 开源中国社区最新新闻 Visit off-site link

“掌握 JavaScript 面试” 是旨在准备候选人在申请中高级别职位时可能遇到的常见问题的系列文章之一。这些问题也是我经常在真实面试中使用到的问题。

Favicon for 开源中国社区最新新闻 08:23 码云推荐 | 在 Spring-Boot 中使用 Swagger » Post from 开源中国社区最新新闻 Visit off-site link

在 Spring-Boot 中使用 Swagger,可以实现对代码无侵入地集成 Swagger

Favicon for 开源中国社区最新新闻 08:23 Familia —— 中文主题建模工具包 » Post from 开源中国社区最新新闻 Visit off-site link

Familia 开源项目包含文档主题推断工具、语义匹配计算工具以及基于工业级语料训练的三种主题模型:Latent Dirichlet Allocation(LDA)、SentenceLDA 和Topical Word Embedding(TWE)。

Favicon for 开源中国社区最新新闻 08:23 OSChina 周六乱弹 —— 你和顶级程序员只差一件…… » Post from 开源中国社区最新新闻 Visit off-site link

三流程序员写UI; 二流程序员写框架; 一流程序员写算法; 顶级程序员穿女装。看来你和顶级程序员,只欠一个女装。

Favicon for 开源中国社区最新新闻 08:21 Codenvy & Eclipse Che - 5.15.0 发布 » Post from 开源中国社区最新新闻 Visit off-site link

Codenvy & Eclipse Che - 5.15.0 发布了。更新内容如下:

Codenvy

更新日志: 

  • RELEASE: Set next development version

  • RELEASE: Add next tag version in CLI

  • Remove the use of deprecated format of maven assembly plugin in order to bump the version

  • change angular-bootstrap version to 1.1.2

  • fix filter name

  • code cleanup

  • ……

详情参见:Changelog

Eclipse Che

更新日志: 

  • CHE-15 - Java stacktrace support (From Platform to Che Workspace)

  • CHE-5503: Remove unnecessary stacktrace

  • Fix entrypoint to respect CHE_DOCKER_IP

  • Fix for DefaultOutputCustomizerTest.java - wrong API is used in place of org.junit.Assert

  • CHE-5505: Fix NPE in DockerConnector

  • ……

详情参见:Changelog

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 08:13 Win10 秋季创意者更新新功能已锁定,正式版 9 月见 » Post from 开源中国社区最新新闻 Visit off-site link

此前根据爆料消息,Win10秋季创意者更新正式版版本号已经锁定1709,预计将在今年9月份面向普通用户推送。近期微软宣布Win10秋季创意者更新预览版迎来最后的Bug大扫荡。根据Windows Central消息,Windows10秋季创意者更新新功能已锁定。

155942_3Fa4_2903254.png

根据Windows Central消息,Win10秋季创意者更新预览版内部开发进入收尾阶段,下一步微软将主要进行Bug修复和稳定性提升,不再添加重要的新功能。这也是此前Win10预览版开发工作的正常流程。

当然在此后的Win10预览版中我们也许还能看到加入一些小的功能,但重大功能已经全部添加完毕。

来源:IT 之家

Favicon for 开源中国社区最新新闻 08:13 资本追逐下的青少儿编程培训“喜”与“悲” » Post from 开源中国社区最新新闻 Visit off-site link

原标题:编程是人类第三种语言?资本追逐的青少儿编程培训“喜”与“悲”。

入局者众,如何在青少儿编程培训市场杀出一条血路?

154030_gK5X_2903254.png

编程课程前期会教小孩玩一些乐高玩具,在老师的带领下,与其他小伙伴一起合作,可以提高孩子的动手以及交流能力。”谈及为何给孩子报名机器人编程方面的培训课程,家长杨女士如是说。

上周末,杨女士带着五岁的儿子去参观玩博会,儿子一下子就被正在展示的机器人组装编程吸引住了。看着儿子满眼的羡慕,杨女士给儿子先报了4节课的体验班,如果学完这四节课儿子还想继续学,就给他正式报班。

“学编程以后就得搞IT”的误区正在慢慢被家长所纠正,鲸媒体从创客教育在线论坛上了解到,学习编程能够锻炼小孩的思维能力,以后对孩子学习数学和物理也会有所帮助……基于这样的原因,近年来,青少儿编程培训行业越来越深受家长欢迎。

目前,青少儿编程培训市场在悄悄发生着变化,体量稍大的机构已经开始“跑马圈地”占领市场份额。这一赛道不仅受到教育机构和互联网公司追捧,同时,资本也愿意为其助威呐喊。

除了达内、好未来、兄弟连等上市公司或新三板公司内部孵化青少儿编程培训项目外,编程猫、乐博乐博机器人教育、Makeblock、编玩边学等纷纷获得融资。虽然目前的青少儿编程培训赛道的融资阶段大多属于B轮之前的早期阶段,但不少公司的投资方实力雄厚,不容小觑。

我们不禁在想,青少儿编程培训赛道缘何深受资本青睐?非刚需的青少儿编程培训行业又面临着怎样的挑战?

入局者众

“编程教育本身符合中小学信息技术课程的要求,在高考试点的一些省份,大综合考试里已经开始试点编程,这跟高考要求将‘实验动手’列入有很大关系。同时在创客教育里,编程也符合其中的要求。这两个原生动力是编程教育开始热的原因。”寓乐湾创始人刘斌立告诉鲸媒体。

从趋势看,中国把STEAM教育(备注:业内认为少儿编程是STEAM教育的一个分支内容)纳入基础学科。2016年6月23日,教育部印发《教育信息化“十三五”规划》的通知,将信息化教学能力纳入学校办学水平考评体系。2017年,浙江省将信息技术加入高考科目。

2017年1月19日,教育部正式印发了《义务教育小学科学课程标准》,为创客教育进校园扫除了一些障碍。标准不仅将小学科学课提前到一年级、每周不少于一节课,文件中的“跨学科”学习、过程评估方法、利用社会资源等规定也引起了国内创客教育/STEAM教育行业的一阵波澜。

此外,“学编程以后就得搞IT”的误区也正在慢慢被家长所纠正,学习编程能够锻炼小孩的思维能力,以后对孩子学习数学和物理也会有帮助……基于这样的原因,近年来,青少儿编程培训行业呈现出越来越受家长欢迎的趋势。

市场的存在催生了一大批玩家进入其中。如面向成人IT培训的公司达内教育和兄弟连分别创立针对青少儿编程培训的子品牌童程童美、童喜教育(即XDL机器人教育);好未来教育集团旗下少儿科技品牌摩比,携手MIT(麻省理工学院)媒体实验室旗下的Scratch,开发少儿编程课;编程猫、编玩边学、小码王等纯青少儿编程培训机构也应运而生。


青少儿编程培训缘何深受资本青睐? 

近年来,青少儿编程培训赛道在受到教育机构和互联网公司追捧的同时,资本也愿意为其助威呐喊。

此前,好未来创始人张邦鑫在摩比携手MIT(麻省理工学院)媒体实验室旗下的Scratch合作发布会上道出了公司切入青少儿编程培训的原因。他表示,摩比培养的是孩子探索未知的能力,好未来旗下不止有应试教育,也有素质教育,少儿编程则是好未来教育产品多元化的最新成果。

除了达内、好未来、兄弟连等上市公司以孵化青少儿编程培训项目外,A股上市公司盛通股份以1421.05万元投资编程猫、以4.3亿元收购乐博乐博机器人教育,美股上市公司新东方也参与了寓乐湾、童伴教育、嘿哈科技、乐博乐博机器人教育等创客教育公司的投资。

在一级市场,今年3月,Makeblock获得EMC媒体基金和深创投的2亿人民币B轮融资,编玩边学半年内先后获得2笔融资。虽然青少儿编程培训赛道的融资阶段大多属于B轮之前的早期阶段,但不少公司的投资方实力雄厚,不容小觑。

“当计算机语言(编程)成为类似于英语的第三门语言时,资本再着手参与就晚了。”兄弟连旗下少儿培训品牌XDL机器人教育创始人李超认为,“就如同当你看到股票一直在升,大家都来买的时候,已经来不及了。”

小码王CEO王江有则用了一个更形象的比喻——“春江水暖鸭先知 ”。他进一步解释,因为上市公司和资本在研究未来、研究趋势,争先恐后进入这一赛道说明资本已经介入研究并得出结论了,少儿编程是必然趋势,会成为人类继口语和书写外的第三种语言,将是未来世界必须掌握的基本技能。

“政策的利好带来了良好的市场外围环境,并极大地促进了产业的发展。”Makeblock创始人兼CEO王建军告诉鲸媒体,全球越来越多的国家,如美国、日本、俄罗斯等都在国家教育战略中纳入了STEAM/STEM教育,我国在十三五规划通过后,也已经开始提倡并逐渐普及STEAM教育。

“这个细分领域与机器人结合紧密,机器人的火爆带动了其发展。”一位投资过青少儿编程培训机构的投资人表达了不一样的观点。他认为,目前青少儿编程培训行业还处于初级阶段,编程和硬件也必然会有某些结合。资本青睐这一领域,还与素质教育市场越来越受关注有关。

家长的认知是最大的挑战

“非刚需”一直是少儿编程行业的短板。在应试教育盛行的当下,家长在掂量选择编程培训是否会耽误孩子的学习?青少儿编程培训机构的续班率该如何保证?这一赛道面临的挑战又有哪些?

在续班率方面,青少儿编程培训机构并不担心。“目前童程童美的续班率每月每季度都有不少100%的情况,平均下来,以二季度为例,我们的续班率到了75%以上。”达内童程童美事业部总经理潘公博透露。鲸媒体还了解到,小码王的续班率高达98%。

高续班率的背后是青少儿编程培训行业学员基数小。以童程童美为例,根据达内2017财年Q1财报,童程童美2017财年Q1招生数为994人,达到了2016年童程童美全年招生的42.2%。同比K12教育培训行业,据2016年7月教育部发布的统计公告,全国K12在校生人数总数为2.2亿,而《中国教育培训行业发展蓝皮书》(2016-2017 K12卷)显示,全国70.6%的K12培训机构续班率在50%以上,仅26.6%的机构超过80%。

“编程最大的挑战不在内容本身,因为编程是一门语言,在于理解和应用。”李超认为青少儿编程培训的挑战在于教学方法。在创办XDL机器人教育之前,他接触的学习编程的人员都是初中甚至高中以上的学生,皆以大班授课。由于学员学习的目的在于就业,所以绝大多数人都有学习需求和自控能力。“那么如何把编程知识教授给青少年,这是一个需要不断升级的过程,因为要考虑到孩子的集中力、趣味性、逻辑和理解能力。”

李超认为,最大的挑战还在于家长的认知。他解释,在市场认知上,家长能否认识到编程的重要性,由谁来提升家长对编程的认识。换句话说,智能化的社会时代“已经”或者“即将”到来,编程、人机交互已是必然趋势,青少年提前学习编程也将成为趋势。

“我的父母使用智能化手机时很吃力,到现在也没弄明白,我们肯定不想看到将来的某一天,孩子们也玩不转所谓的‘智能手机’吧。”李超举例说道。

王江有也赞同李超的观点。“不是所谓的‘刚需’,而是(家长)对编程学习的认知不够,认知达到了便成为最大的刚需。”他解释道,编程学习对接的不只是一个兴趣类课程,而是一个改变小朋友思维方式,提升学生学习能力及认知世界的一门学科,即使短期内不会直接体现在学习成绩上。

“在运营招生过程中,最大的挑战可能就是跟提分辅导培训班抢占学生和家长的时间。”潘公博坦言。

可喜的是,不少父母也开始对青少儿编程培训的认知发生转变。“小孩学习编程都是利用周末时间,一个星期一节课不会担心影响学习,反而觉得对学习有帮助,可以开发智力。”杨女士告诉鲸媒体。

快速扩张下的行业窘境?

体量稍大的青少儿编程培训机构已经开始“跑马圈地”占领市场份额。据悉,目前,达内童程童美在全国共有47个学习中心(包含教学点),主要分布在北京、上海、广州、杭州等23个城市。除此之外,童程童美还启动了伙伴计划,在保定、太原、石家庄这三个城市均有伙伴中心。

小码王目前在全国有12个校区,主要分布在杭州、广州、深圳、重庆、宁波、贵阳、南京、合肥等城市。王江有向鲸媒体透露其未来扩张的野心:“我们认为只要有IT环境、有软件公司的地方,就适合开校区,而不在于城市的经济水平,因为全中国都渴望优质的教育资源。”

而XDL机器人教育目前还处于起步阶段,公司有4家教学中心,都集中在北京。根据其招股书显示,兄弟连机器人培训业务2014年、2015年和2016年1-2月营收分别为95.32万元、197.37万元和38.32万元,占总营收的比重均低于5%。兄弟连在2016年年报中透露,少儿机器人业务在该年度亏损245万。

除了开设培训中心,青少儿编程培训机构也瞄准了进公校的机会,如童程童美、XDL机器人教育、小码王和Makeblock等。

无论是编程教育还是STEAM教育,进入学校都会遇到一些普遍问题,首先是否有配套教材——如何能够编写出适合课堂的教学内容;其次是师资,由于STEAM教育近几年开始在国内兴起,部分师范学校暂未配备相应的师资资源。“还会遇到课程采购时,(公校)通常只认硬件而不认课件的情况。”王江有感慨道。

以XDL机器人教育为例,目前公司已经与幼儿园、小学达成合作,以类似于课后课的形式开展。李超介绍,青少年在学习机器人课程方面,尤其是小年龄段,为了保证教学质量,公司都是1对6-8人的形式,学校一般是一个老师对20+的形式。公司还需要配助教,考虑到整体进度,一节课的时间就会拉长。此外,学校一般都不会准备教具,每次去上课都需要携带几箱教学教具。

“和公校合作的收入会很低,也就够一次外出教学的成本。”李超向鲸媒体透露,“我们更多是向青少年普及机器人知识与推广机器人课程,如果承接的公校越来越多,对自身运营也有很大的挑战。”

来源:鲸Media

Favicon for 开源中国社区最新新闻 08:13 升级不再愁!有人发现让 macOS 快速完成升级的办法 » Post from 开源中国社区最新新闻 Visit off-site link

每次将 macOS 升级到新版本时,你只能干等着,看进度条慢慢变化,是不是觉得很无奈。最近有用户在 Reddit 中发帖,和其他用户共享了只需一个终端指令就能够让 macOS 升级变得更快。

210534_Txbd_2903254.png

这名用户表示,自己通过 App Store 升级 macOS 前后通常需要半个小时。macOS 已经内置了一个软件升级实用工具,它能够让系统升级变得更快。而且还支持用户一边升级一边使用设备。

这名用户表示自己通过这个办法升级 macOS 12.6 最新版本时只需要 10 分钟,升级过程中因为需要重启设备,有大约 2 分钟的时间无法使用设备。这名用户在帖子建议使用一下两条命令行即可执行更新:

softwareupdate -l

softwareupdate -i -a

第一条命令行执行检查更新的任务,而第二个执行安装更新的任务。升级过程时会收到提示,用户需要重启设备。

很快这张帖子就收到了回复,因为有用户发现了更高效的办法,这名用户表示可以使用“sudo softwareupdate -ia;sudo reboot”命令行,它们会自动一个接一个执行,所以在这期间你可以把设备放一边自行升级,然后你去忙自己的事情。

还有一种办法,执行 sudo softwareupdate -ia && sudo reboot 命令行,当第一个命令成功执行之后,设备才会重启。如果无法重启,用户会看到错误提示。

最后一种更好的办法就是执行 sudo sh -c “softwareupdate -ia && reboot”命令行。用户第一次尝试发现,如果软件更新需要时间过程,sudo 请求密码的请求将超时,sudi重启等待用户输入密码。

第二次尝试将命令都放到一个 mini 外壳脚本中,只有一个 sudo,所以不会出现第二个 sudo 可能超时的请求。

当然不管你想通过哪种办法来更新软件,请在更新前最好备份。

来源:威锋网

Favicon for 开源中国社区最新新闻 08:13 几种主流编程语言的优点和缺点比较,不服来怼 » Post from 开源中国社区最新新闻 Visit off-site link

073537_XHOC_2903254.png

在初级程序员阶段,每个人都不可避免遇到选择编程语言和职业方向的难题。我挑选了几个常见的编程语言,分析了优缺点和职业方向,以供想当程序员的人参考。

C/C++

一句话概括:大多数中国程序员的第一个语言

C语言是面向过程语言在当代的鲁殿灵光,常用于编写操作系统。C++是C语言的一个超集,既有指针又有对象使它成为最复杂的语言。

C/C++的优势:几乎所有现代编程语言都脱胎于C/C++,因此了解了C/C++,就了解了关于编程语言的一切,非常有利于快速掌握其他各类编程语言。

C/C++的不足:据说C/C++发明的时候为了提高入行门槛和行业收入水平刻意制造了学习难度。

C/C++的优势:C/C++可以被嵌入任何现代处理器中,几乎所有操作系统都支持C/C++,跨平台性非常好。

C/C++的不足:尽管C语言体型小巧,可最常使用的C++规模可观且拥有大量极为复杂的功能交互方式,容易造成资源浪费。

职业路线:

(1)首推Unix/Linux等操作系统软件的开发和嵌入式开发。

(2)Android ROM的定制,以及android App的NDK开发。

(3)用Cocos2d-x开发游戏也是C++程序员的好出路。

Java

一句话概括:最长寿的语言

Java是最典型的面向对象语言。Java不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等坑爹概念。今明两年毕业的大学生大多是Java的同龄人(1995年)。

Java的优势:Java平台不断迎来新功能,比如移动互联网时代的Android,大数据时代的Hadoop,人工智能时代的TensorFlow。

Java的不足:国内Java及其衍生技术的就业环境被培训班破坏得太厉害,培训班HR曾问我:“Android不吃香了,你能推荐几个hadoop讲师吗?”

Java的优势:Java是世界上使用范围最广的语言——Java环境安装时那句“3 Billion Devices Run Java”谁没见过?

Java的不足:Java占用大量内存,并且启动时间较长——搞Android的都被Windows系统中的Android AVD坑过。

职业路线:

(1)招聘网站上常见的“招聘Java开发”指的就是狭义的Java开发——基于JavaEE的后台开发,以前一度流行过SSH框架和SSM框架,现在入门建议学习SpringMVC框架。

(2)在移动互联网时代,Java可用于Android App开发。但Java之于Android的地位可能被Kotlin取代,并且近年培训班造成了低水平Android程序员的泛滥。

(3)在大数据时代,Java可用于Hadoop的开发,前景非常广阔,但可能有泛滥的趋势。

(4)在人工智能时代,Java可用于TensorFlow深度学习的开发。

C#

一句话概括:自称不是Java的Java语言

C#是微软看到Java太火了而发明的和Java语法差不多的语言。

C#的优势:C#的最大优势在于全面集成.Net库,提供出色的功能与完美的库访问能力。

C#的不足:由于集成.Net库造成跨平台能力太差。

C#的优势:VR时代的到来让Unity-3d开发者有很好的发展前景。

C#的不足:目前.Net在国内就业环境不太好,收入较低。

职业路线:

(1)招聘网站上常见的“招聘C#开发”和“招聘.Net开发”指的都是狭义的C#开发——基于.Net框架的后台开发。

(2)Unity-3d也用C#作为开发语言,除了能开发3D游戏,在VR时代也会大放光芒。

JavaScript

一句话概括:不是Java语言的语言。

javascript是一种动态类型、弱类型、基于原型的直译式脚本语言,也是使用频率最高的给HTML网页增加动态功能的语言。外行最常闹的笑话是以为它是Java语言的分支。

JavaScript的优势:作为脚本语言,JavaScript可立即运行而无需等待服务器响应,速度非常出色。

JavaScript的不足:代码在用户电脑上运行,可能会被别有用心的坏人恶意利用。

JavaScript的优势:JavaScript是动态类型语言,学习难度低。并且掌握了JavaScript语言就等于成为能同时开发网页(HTML5)、后台(Node.js)、移动端(React Native、Weex)的全栈工程师。

JavaScript的不足:JavaScript过于依赖浏览器,在不同的浏览器上有不同的表现。

职业路线:

(1)首选html5的初心:网站和手机站的前端页面开发。

(2)用node.js或Bmob云端代码进行后台开发

(3)基于react Native、PhoneGap、Weex、HBuilder、AppCan进行移动开发,只需写一遍代码,就有Android和iOS两个软件

(4)微信开发:包括微信公众号、微信小游戏、微信小程序。不要把这个方向当成中国特色方向,国外的Android机也是需要PWA开发的。

(5)如果以上四样全能做到,那么你就是全栈工程师。

SQL

一句话概括:数据库离不开的语言

SQL是一种专精于数据库的特殊目的语言。用于存取数据以及查询、更新和管理关系数据库系统。

SQL的优势:存储过程可以重复使用,可减少数据库开发人员的工作量,开发速度快。

SQL的不足:和Java语言的大多数设计模式一样,SQL开发速度是靠牺牲运行速度换来的。

SQL的优势:SQL可设定只有某此用户才具有对指定存储过程的使用权,安全性好。

SQL的不足:不同数据库系统之间的SQL不能完全相互通用,可移植性差。

职业路线:

(1)掌握了SQL可以从事DBA(Database Administrator,即数据库管理员),主要负责业务数据库从设计、测试到部署交付的全生命周期管理。

Python

一句话概括:需要拿着游标卡尺学习的语言

python是一款服务器端解释型开源非编译脚本语言。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

Python的优势:Python学习简单,被誉为“最易学习的语言”

Python的不足:Python存在一些只在特定情况下才会出现(无法重现)的bug

职业路线:

(1)用Django框架进行Web开发:和Java没什么两样。

(2)用PIL框架进行图形处理

(3)物联网:Raspberry Pi等物联网平台都选择了Python作为开发语言

(4)Python有一个无所不能的Hack库,如果认为“打工时不可能打工的”就去当一个自由的黑客吧

PHP

一句话概括:世界上最好的语言

php是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。号称“世界上最好的语言”

PHP的优势:PHP学习简单,易于快速上手。

PHP的不足:PHP的运行速度比较慢。

PHP的优势:历久弥新的PHP拥有庞大而活跃的官方社区,开发者面临的大部分难题都有现成的解决方案,很多十几年前的解决方案在当代也有指导意义。

PHP的不足:PHP的错误处理机制比较糟糕,以为PHP需要支持大量旧版本的功能。

职业路线:

(1)适合进行Web开发,配合Node.js效果更佳。

Objective-C和Swift

一句话概括:被培训班害苦了的语言

objective-c和swift都是OS X和ios系统上的专用语言。Objective-C在三年前是国内收入最高的语言,从去年开始大量培训班输出了一大堆“三年经验”的速成“iOS工程师”成了脉脉匿名区的笑话。

Objective-C的优势:苹果提供了丰富的工具和库以便开发者使用Objective-C开发软件。

Objective-C的不足:Objective-C拥有自己独特的编程方法思路,与其他编程语言思路差别较大。

Swift的优势:随着时间推移,Swift在iOS和OS X软件中占的代码比例会越来越多。

Swift的不足:版本更迭太快,不同版本差别过大,近年发生过几次“从精通到重新入门”的情况。

Objective-C和Swift的优势:因为仅需要在少数平台上运行,不容易遇到兼容性问题。

Objective-C和Swift的不足:这俩语言的就业环境被培训班彻底毁了,现在才开始学这两种语言可能会有像2007年6000点时入市的散户的结局。

职业路线:

(1)这两种语言都是专为iOS和OS X服务的,入行前记得先准备一台苹果电脑和苹果开发者账号。近年培训班造成了低水平Objective-C和Swift程序员的泛滥。

Kotlin

一句话概括:运行在JVM但不是Java的语言

Kotlin 是最新问世的一个基于JVM的编程语言,专用于开发Android。

Kotlin的优势:和Java的互操作性极佳。其他JVM语言都实现了自己语言的标准库。而Kotlin则使用Java的标准库,只是对其进行了扩充。更轻巧,Apk更小。

Kotlin的不足:同时可能也继承了Java比较坑爹的东西。

Kotlin的优势:因为弱化了数据类型,学习成本较Java低。

Kotlin的不足:能且仅能在Android Studio 3.0上运行,这点有点像易语言。

职业路线:

(1)只能用来开发Android。即使你想干点别的,除了Android Studio 3.0 还有别的编译器吗?

来源:代码湾

Favicon for 开源中国社区最新新闻 08:08 GitLab v9.4.0-rc6 发布,代码托管平台 » Post from 开源中国社区最新新闻 Visit off-site link

GitLab v9.4.0-rc6 发布了。GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。

更新内容请关注发布主页

下载地址:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 08:05 BackBox Linux 5 发布,基于 Ubuntu 的发行版 » Post from 开源中国社区最新新闻 Visit off-site link

BackBox 团队很高兴地宣布BackBox Linux 5 发布了。在这个主要版本中,我们做了一些结构上的改变,删除了过时的工具并添加了新的工具。新内容如下:

  • 新的标识和标识

  • 更新Linux内核4.8

  • 更新所有黑客工具

发布主页和更新日志

下载地址(32 位和 64 位)

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:59 Sequelize v4.4.1 发布,Node.js 的 ORM » Post from 开源中国社区最新新闻 Visit off-site link

Sequelize v4.4.1 已发布,Sequelize.js 提供对 MySQLMariaDBSQLite 和 PostgreSQL 数据库的简单访问,通过映射数据库条目到对象,或者对象到数据库条目。简而言之,就是 ORM(Object-Relational-Mapper)。Sequelize.js 完全是使用 JavaScript 编写,适用于 Node.js 的环境。

本次更新主要是修复了如下bug:

GitHub 发布主页

下载地址:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:55 MapBox-gl-js v0.39.0 发布,MapKit 开源实现 » Post from 开源中国社区最新新闻 Visit off-site link

MapBox-gl-js v0.39.0 发布了,MapBox 是 iOS 上 MapKit 的一个开源实现。

本次更新内容如下:

  • GeolocateControl breaking changes #4479

    • The option watchPosition has been replaced with trackUserLocation

    • The camera operation has changed from jumpTo (not animated) to fitBounds (animated). An effect of this is the map pitch is no longer reset, although the bearing is still reset to 0.

    • The accuracy of the geolocation provided by the device is used to set the view (previously it was fixed at zoom level 17). The maxZoom can be controlled via the new fitBoundsOptions option (defaults to 15).

  • Anchor Markers at their center by default #5019 @andrewharvey

  • Increase significantRotateThreshold for the TouchZoomRotateHandler#4971@dagjomar

完整更新内容请查看发行首页

下载地址:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:48 SonarLint for Atom 1.0 发布 » Post from 开源中国社区最新新闻 Visit off-site link

SonarSource很高兴地宣布SonarLint for Atom 1.0 发布了。

该扩展提供了对JavaScript、Python和PHP代码中注入的新bug和质量问题的即时反馈。

SonarLint 集成了 Linter。只要你打开项目中的一个文件开始编码,SonarLint将立即检测issue,在编辑器和 Linter 面板中高亮显示。


对于每一个问题,工具提示都会提供一个简短的问题描述,你可以点击链接打开Web浏览器中的描述。

该扩展要求您的计算机上安装Java Runtime Environment (JRE) 8。

有关更多信息,看看 发行说明或访问 SonarLint for Atom web site

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:35 Bokeh 0.12.7 dev12 发布,Python 交互式可视化库 » Post from 开源中国社区最新新闻 Visit off-site link

Bokeh 0.12.7 dev12 发布了。Bokeh (Bokeh.js) 是一个 Python 交互式可视化库,支持现代化 Web 浏览器,提供非常完美的展示功能。Bokeh 的目标是使用 D3.js 样式提供优雅,简洁新颖的图形化风格,同时提供大型数据集的高性能交互功能。Boken 可以快速的创建交互式的绘图,仪表盘和数据应用。

暂未发现该版本更新内容,请关注发布主页或 Changelog

下载地址:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:31 Vue 2.4.2 发布,轻量级 JavaScript 框架 » Post from 开源中国社区最新新闻 Visit off-site link

Vue 2.4.2 发布了,Vue 是一款轻量级 JavaScript 框架。主要更新内容如下:

Bug 修复:

  • v-on: revert component root data.on/data.nativeOn behavior for 1713061, closes #6109

  • checkbox v-model="array" ignore false-value (#61803d14e85, closes #6178

  • compile: properly generate comments with special character (#6156d03fa26, closes #6150

  • parser: only ignore the first newline in <pre> 082fc39, closes #6146

  • provide/inject: merge provide properly from mixins 3036551, closes #6175

  • provide/inject: resolve inject properly from mixins (#6107b0f00e3, closes #6093

  • transition: should trigger transition hooks for v-show in ie9 9b4dbba, closes #5525

  • v-bind: respect .prop modifier on components (#615906b9b0b

  • v-model: use stricter check for <select> option update c70addf, closes #6112

  • ensure looseEqual is not dependant on key enumeration order a8ac129, closes #5908

  • include boolean in isPrimitive check (#6127be3dc9c, closes #6126

  • work around IE/Edge bug when accessing document.activeElement from iframe fc3d7cd, closes #6157

改进:

  • warn when assigning to computed property with no setter eb9168c, closes #6078

Reverts:

详情请查看发布主页

下载地址:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:23 Ember.js v2.15.0-beta.2 发布,JavaScript MVC 框架 » Post from 开源中国社区最新新闻 Visit off-site link

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

暂未发现更新内容,请查看更新日志发行首页保持关注。

下载地址:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 07:22 SmartGit 17.1 preview 11 发布,Git 客户端 » Post from 开源中国社区最新新闻 Visit off-site link

SmartGit 17.1 preview 11 发布了,SmartGit 是一个 Git 版本控制系统的图形化客户端程序。

更新内容:

Support for line-based line separators:

  • Changes view: should show them

  • Compare only shows the file content

  • Compare, Index Editor, Conflict Solver: prevent editing when mixed line separators were detected (in that case, please first fix the mixed line separators using a text editor)

Author column: support for "LastName, FirstName"
Git:

  • Log:Files: distinguish between "Renamed" and "Renamed-Modified"

  • separated Save Stash to Stash All and Stash Selection

  • Stash All: ability to "Just Save" (= stash and re-apply)

  • Stash Selection: file name completion

Output view:

  • hidden by default

  • if hidden, shows just a plain auto-hiding notification or failure dialog with command output

  • preferences: removed options to show command and directory - they are always shown now

GUI:

  • completion popup now completes with <tab> and <enter>

……

完整更新内容请查看发行说明

下载地址:

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

News stories from Friday 21 July, 2017

Favicon for 开源中国社区最新新闻 18:10 深度操作系统 15.4.1 修正版本发布 » Post from 开源中国社区最新新闻 Visit off-site link

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

深度操作系统15.4.1为修正版本,新增了经典菜单和打开应用等待效果、回归窗口预览效果、优化窗口管理器2D模式;修复了社区用户反馈的问题,同时升级深度系列应用至最新版本。

回归经典,自由切换

启动器新增经典菜单,回到熟悉的操作方式,两种模式任意切换,总能找到适合自己的操作方式。


专注细节,个性动画

精心设计了应用开启动画,增添应用打开小乐趣;拖曳文件到对应任务栏应用可直接打开,提高应用打开效率;窗口预览效果回归,从此让桌面更加生动起来。


截图秒启,告别等待

重构整个深度截图代码,打开速度真正做到秒开;全新设计了截图工具栏和选取框,新增直接截取右键菜单功能。


轻装上阵,极速体验

去除2D窗口管理器不必要的特效,去掉混成支持,同时对非混成模式进行重写和速度优化;将其性能做到堪比Xfce/LXDE等轻量级桌面环境的性能。

更多细节优化如下:

启动器

  • 新增启动器经典菜单;

  • 优化启动器搜索功能;

控制中心

  • 新增切换键盘布局快捷键设置;

  • 新增特效窗口开关按钮功能;

  • 移动首页远程投射功能到显示模块下;

  • 优化系统更新机制和流程;

  • 优化系统更新镜像源检测机制;

  • 优化通知中心通知滚动再加载内容;

  • 修复网络PPPOE拨号不显示连接状态的问题;

任务栏

  • 新增拖拽文件到应用直接打开功能;

  • 新增应用打开动画等待功能;

  • 新增切换键盘布局托盘显示功能;

  • 优化窗口预览效果;

  • 优化关机右键菜单显示和关机界面保持一致;

  • 修复挂载时桌面出现黑块的问题;

窗口管理器

  • 修复关闭窗口卡顿的问题;

  • 优化很多窗口时Alt+Tab切换的问题;

  • 修复工作区新增时小窗口花屏的问题;

  • 去掉2D模式下的混成支持并进行重写和速度优化;

  • 取消2D模式下Super+W/S/A快捷键操作;

桌面

  • 新增桌面右键/滚轮设置图标大小功能;

  • 优化热区关闭功能;

  • 优化热区快速触发控制中心的问题;

  • 优化桌面环境的模糊处理问题;

其他

  • 修复蓝牙播放高保真音乐时出现杂音的问题;

  • 优化触摸板手势功能;

  • 优化文件管理器另存为对话框以及文件类型下拉框的显示;

  • 新增安装系统时安装器可能导致Windows无法启动的提示;

  • 新增虚拟机安装系统后开机选择模式的提示;

  • 新增文件管理左侧磁盘右键弹出功能;

  • 修复文件管理器点击按钮搜索和Ctrl+F快捷键操作显示一致的问题;

  • 修复安装器时区导致深度商店不显示国内应用的问题;

  • 修复安装雷鸟应用后显示英文的问题;

  • 修复深度商店安卓应用打开黑屏的问题;

简单获取,轻松安装

只需一杯咖啡的时间,即可体验深度操作系统给您带来的无限魅力!
请您下载深度操作系统镜像,并观看安装视频教程,借助深度启动盘制作工具即可轻轻松松的将系统安装至您的电脑.

官方下载点:

64位:点此下载 (MD5值

其他下载点(同步中):

百度云、SourceforgeMEGAGoogle Drive社区ISO仓库

提示:深度操作系统 15.4.1版本可通过“控制中心→系统信息”将系统升级至最新版本。

崇尚自由,分享快乐

深度操作系统是一款针对普通用户而发行的开源桌面系统,您可自由下载、分发、修改和使用。

详情地址为GitHub:https://github.com/linuxdeepin

欢迎您关注我们的微博微信(深度操作系统)、TwitterFacebook,以第一时间获取最新动态,同时也欢迎您前往我们的论坛,与我们交流和分享您的快乐。

最后,我们郑重感谢为深度操作系统提供测试文档翻译镜像支持的社区团队与企业,感谢你们的无私的贡献,开源有你们更精彩!

Favicon for 开源中国社区最新新闻 15:19 Element 1.4.0 发布,饿了么 Vue 2.0 组件库 » Post from 开源中国社区最新新闻 Visit off-site link

Element 1.4.0 已发布,Element 是饿了么开源的一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的组件库,提供了配套设计资源,帮助你的网站快速成型。

新特性:

  • Message

  • ColorPicker

    • 新增 active-change 事件,#5775

  • Popover

  • Table

  • Tree

    • 新增 disabled 属性,#5937

  • Menu

    • 新增 collaspe 属性,#5941

  • Select

    • 新增 value-key 属性,#5897

修复:

  • DatePicker

    • 部分内部文案不受 i18n 控制的问题,#5485

    • 初始值为空时,选择时间后的返回值毫秒部分不为零的问题,#5663

    • disabledDate 范围被扩大的问题,#4946(by @liyangworld

  • Steps

    • 动态增减步骤后的样式错误,#5456(by @elfman

  • Table

    • 带有固定列且可展开时,鼠标 hover 高亮行错位的问题,#5471(by @elfman

    • 部分浏览器不支持 classList 的问题,#5613(by @flynntsc

  • Select

    • 单选时打开下拉框有时无法定位到已选中项的问题,#5564(by @wacky6

    • 多选时 Vue 2.4.x 报错的问题,#5897

  • Radio

    • RadioGroup 内只有一个 Radio 时的圆角丢失问题,#5646(by @YYvanYang

  • Upload

    • auto-upload 为 false 时,无法选择之前删除的文件的问题,#5706

    • disabled 时删除按钮仍可见并可操作的问题,#5841

    • 兼容 Vue 2.4 key 不能是对象的问题,#5872

  • MessageBox

    • 非 confirm 或 prompt 情况下点击取消按钮仍然被 resolve 的问题,#5658

  • Rate

    • 初始值带有小数时,激活的 icon 不显示小数部分的问题,#5785

  • Pagination

  • Loading

  • Cascader

  • Tree

    • 在 lazy 模式下 setCheckedKeys 和 setCheckedNodes 方法的 bug,#5937

    • 在 lazy 模式下勾选父级节点会一次性加载全部后代节点的问题,#5963

  • Form

    • 未在 FormItem 上指定 label 时,label 的具名 slot 失效的问题,#5921

  • Tooltip

    • Vue 2.4.x 下触发元素为自定义组件时不工作的问题,#5916

非兼容性更新:

  • Select

    • 值为对象类型时,需要提供一个 value-key 作为唯一性标识,#5897

Favicon for ITeye资讯频道 15:10 目前最值得学习的9种非主流的开发语言 » Post from ITeye资讯频道 Visit off-site link
引用

译者注:从事主流开发语言的人员有很多,但是除了这些语言,我们也应该了解一些其他的,这样,我们才能根据场景的不同决定采用哪一种。本文中作者为我们列举了9种语言的应用场景。以下为译文。
cb9e43dd-efce-3f00-a3d0-38ee37a10346.png

目前比较流行的开发语言之所以能够被大多数开发人员使用,是因为它们各自有各自的优势。但是除了C#、Java或者JavaScript这些语言外,还有些其它的高级语言在某些时候也会提供很高的价值。下面的9种语言应该出现在每一位程序员的候选清单中。它们可能不是所有场景下的最佳选择,因为它们都是有专用于某一种情况下的。但它们都提供了值得研究和学习的有利方面。可能有一天,其中一种语言被证明是你的项目或老板所需要的。

Kotlin:重新设计过的Java语言

Java是一门伟大的语言,支持各种主流的平台。但是它现在有点过时了,而且痛点正在被放大。Kotlin的意思是快速的编译,它与Java并存,解决了Java开发者耗时长的问题。Kotlin的特性中需要重点关注的就是它对空值的处理,这个问题每个开发者都会遇到。Kotlin在这一方面取得了巨大的进步,它还可以和现有的Java代码一起使用,而且还可以将代码编译成JavaScript和本地代码。

Erlang:实时系统的函数式编程

Erlang的秘密武器就是功能范式。大多数代码都被迫在自己的小世界中运行,这样这些代码就不会对系统其他部分产生影响。这些函数在内部完成所有的工作,在类似于沙箱一样的的小“进程”中进行运行,并且只通过邮件消息相互通信。该模型还简化了运行时代码需要哪些代码确定可以同时运行的过程。这样做就使得并发性非常容易检测,所以运行时进程的开销也会非常小。

如果你正在构建一个实时系统,该系统没有空间给那些已经删掉的数据,比如移动电话交换机的计费系统,那么可以考虑一下Erlang。

Go:简单性和动态性

谷歌在调查开发语言的过程中,发现这些语言杂乱无章、复杂,而且往往很慢。2009年,谷歌发布了它的解决方案:一种看起来像C语言的静态类型的语言,但它的后台更智能,可以让程序员不必指定类型和处理malloc调用。谷歌使用了和Sun以及苹果公司完全不一样的策略,他们希望Go语言的代码能够“简单到可以一直保存在程序员的脑海中”。

如果你是一家想要吸引谷歌眼球的创业公司,你需要建立一些服务器端业务逻辑,那么Go就是一个很好的起点

OCaml:适用于复杂的数据层次

有些程序员不希望指定变量的类型,动态语言可以做到。其他人则喜欢定义变量是否整数、字符串或对象。对他们来说,许多编译语言提供了他们想要的所有支持。还有一些人梦想着精心设计的层次结构,甚至可以说是创造出“代数”的类型。他们设想了各种不同类型的列表和表,它们被组合在一起,以表达复杂的、多层次的数据。它们谈到了多态性、模式匹配原语和数据封装。这仅仅是一个复杂的、高度结构化的世界的开始,他们想要的是类型、元类型和元数据类型。

TypeScript:你会喜欢的JavaScript语言

TypeScript是目前比较受欢迎的开发语言,因为它要求所有的变量都必须定义一个类型,这种做法会让Java程序员感到更加的安全。TypeScript现在之所以这么受欢迎,最重要的原因就是因为Angular,而且TypeScript支持和遗留的JavaScript进行整合。还有一个原因是因为TypeScript是JavaScript的父集。强类型有很多优势,比如可以在早期捕获一些bug,而且可以提高编译的速度。对他们来说,这是OCaml,这是编程语言社区的一项严肃的努力,推广了上面提到的许多想法。有对象支持、自动内存管理和设备可移植性。甚至还有来自苹果应用商店的OCaml应用。

Rust:安全可使用的系统语言

Rust就像是翻新过的C语言版本,但是它有大量的多态类型。Rust发展很快,在Stack Overflow的语言流行排行榜上,以前大概50名左右,今年则跃升至18名。原因就是因为它解决了很多C语言拥有的问题。系统程序员不喜欢依赖垃圾回收机制,他们喜欢自己掌握内存的数量,Rust就会让你有这种感觉。

Scala:JVM上的函数式编程

如果你非常喜欢功能范式,又需要将项目变为面向对象层次结构,而且代码还得简单,你可能会有多个选择。但是如果你有Java的基础,Scala就可以帮助你了。Scala也是基于JVM运行的,与Java相比,它的代码显得更为整洁。Scala的类型机制是强静态的,编译器为了推断类型会做很多工作。在Scala中原始类型和对象类型之间没有区别,因为Scala希望所有的东西都可以从一个ur-object中调用。

Scala提供了函数式语言的许多特性,比如延迟评估、尾递归和不可变变量,但是为了在JVM上面运行,它已经做过修改了。基本的元类型或集合变量,如链表或哈希表,可以是可变的,也可以是不可变的。

如果你必须在数千个处理器集群中处理数据,而且还面临着遗留的Java代码问题,那么Scala是一个很好的解决方案。

Haskell:纯粹简单的函数式编程

20多年来,致力于函数式编程的学者们一直在积极地发展Haskell。它是理想的函数式编程一种更纯粹的表达方式,它有一套很健全的体制去处理输入/输出通道。此外,Haskell的社区也非常活跃。如果你认为你的数据结构会很复杂,而且有很多类型,Haskell将会帮助你的。

Julia:速度更快的Python语言

软件行业喜欢用Python开发的人非常多,然而,无论Python的优点有多明显,它一直都存在一个让人特别恼火的问题,就是速度问题。Julia的出现就是为了解决这个问题。它引入了Python开发者所崇尚的clean语法,使得代码可以在后台进行编译。它还提供了一个强大的类型推理引擎,可以让代码运行的更快。与Python相比,它的速度明显快很多。如果你的数据量比较大,但是喜欢Python的语法,那么Julia可以是你的下一个学习的语言。

感谢 jihong10102006 投递这篇资讯

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

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


ITeye推荐



Favicon for ITeye资讯频道 11:16 一文带你理解深度学习的局限性 » Post from ITeye资讯频道 Visit off-site link
引用
原文:The limitations of deep learning
作者:Francois Chollet
译者:聂震坤
审校:苏宓

深度学习:几何视图

深度学习最令人惊讶的特点便是极易上手。十年以前,没有人可以猜得到经过梯度下降法训练过的简单参数模型可以在机器感知问题上实现如此惊人的结果。现在,事实证明,研究者所需要做的只是使用足够大的梯度下降素材来训练参数模型。正如 Feynman 曾经描述宇宙一样,“它并不复杂,只是里面包含的东西实在太多。”

在深度学习中,所有的东西都是一个向量(任何的东西都是几何空间中的一个点)。模型的输入(可能是文字,图片,等等)和目标首先被向量化(变成了一些初始输入向量空间和目标向量空间)。深度学习模型中的每个层都对通过它的数据进行一个简单的几何变换。同时,模型的层链形成一个非常复杂的几何变换,分解成一系列简单的几何变换。这种复杂的转换尝试将输入空间映射到目标空间,一次一个点。该变换按层级的比重进行参数化,这些层根据模型当前执行的程度进行迭代更新。这种几何变换的一个关键特征是它必须是可微分的,这是为了使我们能够通过梯度下降来学习来获得其参数。更直接一点,这意味着从输入到输出的几何变形必须是平滑和连续的——这是一个显着的约束。

这种复杂的几何变换应用到输入数据的整个过程可以理解为一个试图破坏纸球的人在3D中被可视化。褶皱的纸球可以理解为模型开始时的大量输入数据。每一次人的行为则是数据通过不同层级被处理的过程。完整的不起眼的人的手势序列是整个模型的复杂变换。深度学习模型是用于解决高维数据的复杂流形的数学机器。

这便是深度学习的奥妙:将含义转化为向量,几何空间,然后逐步学习将一个空间映射到另一个空间的复杂几何变换。所以开发者需要有足够高的维度的空间以便拥有原始数据关系的全部范围。

深度学习的局限性

可以通过这种简单策略实现的应用程序空间几乎是无限的。然而到目前为止,更多的应用程序对于当前的深入学习技术是完全无法实现的——即使是大量人为注释的数据。例如,你可以组装一个数据,数十万甚至数百万的英文语言描述软件产品的功能。由产品经理编写,由一个团队开发的相应的源代码并且有工程师满足这些要求。即使有这些数据,也不能训练出一个深入的学习模型来简单地阅读产品描述并生成相应的代码库。这只是其中一个例子。

一般来说,无论投入多少数据,任何需要推理式编程或应用科学方法(长期规划和类似算法的数据操作)都无法使用深度学习模式进行实现。 即使是学习具有深层神经网络的排序算法也是非常困难的。

这是因为一个深入的学习模型是“简单的”连续的几何变换链,将一个向量空间映射到另一个。他所可以做的是将一个数据包X映射到另一个数据包Y,并假设存在从X到Y的可学习的连续变换与X:Y的秘籍采用可用性作的数据。所以即使一个深入的学习模型可以被解释为一种程序,相反的大多数程序不能表示为深度学习模型 - 对于大多数任务,要么没有相应的实际大小的深层神经网络来解决任务,要么即使存在一个,它也可能不可学习,即相应的几何变换可能太复杂,或者可能没有可用的数据来学习它。通过堆叠更多层次和使用更多的培训数据来扩展当前的深度学习技术,只能表面缓解其中的一些问题。 深度学习模式在可以代表的方面是非常有限的,而且大多数希望学习的程序不能被表达为连续几何变形的数据流。

拟人化机器学习模型的隐患

现阶段人工智能的一个不得不面对的问题在于研究者们误解了深度学习模式的做法,并高估了自己的实力。人类思想的一个根本特征是我们的“主观意识”,我们倾向于对我们周围的事物投射意向,信仰和知识。在一个石头上画一个笑脸感觉石头都变高兴了。同样在深度学习中,当我们有能力成功地训练一个模型来创作描述图片的标题时,我们误认为该模型“理解”图片的内容以及它产生的标题。然而,当轻微改变训练数据中存在的图像时,研发者会非常惊讶的发现模型开始创作完全荒谬的字幕。
d5724a72-36ac-351e-838d-e2ee36ca79c9.png

通常,这类行为被强调为对抗例子,是通过向深度学习网络输出错误的样本来欺骗模型进行分类。通过梯度上升,可以稍微修改图像,以便最大化给定类的预测。 通过拍摄一只熊猫,并添加一个“长臂猿”梯度,我们可以得到一个神经网络将这只熊猫分类为长臂猿。 这证明了这些模型的脆弱性,以及它们运行的输入到输出映射与我们自己的人类感知之间的深刻差异。
9fba4ab7-50da-388c-81ac-cbc08484db86.png

简而言之,深度学习模式对他们的输入没有任何理解,至少不是从人的意义上来说。我们对图像,声音和语言的理解是基于我们的运动感觉体验。然而机器人却没有这种经验,因此不能以任何以人为本的方式理解他们的驶入。通过输入大量的培训示例来训练我们的模型,我们让他们学习一个几何变换,将数据映射到这个特定的一组示例上的人类概念,但是这个映射只是我们思想中原始模型的简单草图, 从我们的体验中发展出来的假想——就像一面镜子中的一个昏暗的形象。
07dc886f-8a42-3038-8c76-e170ea125ad1.png

作为一名机器学习从业者,始终要注意这一点,不要陷入陷阱,认为神经网络了解他们所执行的任务(并不会) - 至少不会对我们有意义。 他们接受了不同于我们教导,进行了不同的,更窄的任务的训练:即将训练投入与训练目标进行比较。 如果向他们展示偏离训练数据的任何东西,机器将以最荒谬的方式打破以前的结论。

局部泛化与极端泛化

在深度学习模型所做的输入与输出之间的简单的几何变形以及人类思考和学习的方式之间似乎存在着根本的区别。人类不仅仅是从亲身体验中进行学习,还提供了明确的学习方法。除了不同的学习过程外,底层的特性有着根本的却别。

人类的能力远不止对刺激做出回应,因为深网或者昆虫也可以。人会对目前的情况形成抽象复杂的模型,并根据这些模型来预测不同的未来,且进行长期的规划。人类有能力将已知的概念融合在一起,来表现以前从未经历过的事情,比如穿着牛仔裤的马,或者想象如果中了彩票会做什么。这种处理假设的能力,使我们的心理模型空间远远超过了我们可以直接体验到的一切。这种行为被称为极端泛化。

这与深层网络的局部泛化形成了鲜明的对比:如果训练时间内新的输入信息差异甚微,则停止从输入到输出的映射。假设使用机器来学习适当的发射参数以解决火箭登陆月球的问题,在使用深网进行此项任务时,无论是使用监督学习还是强化学习进行培训,都需要数以千万次的启动试验作为补充,以便学习从入空间到输出空间的可靠映射。相比之下,人类可以利用抽象能力来提出物理模型——火箭科学,并得到一个精确地解决方案,只需要一次或几次时间即可以让火箭成功登月。同理,如果开发一款控制人体的深网,并希望他学会安全的在城市里行驶。那么在在这种情况下则需要现在各种情况下死掉数千次直到可以推断出危险的行车路线并制定合适的回避行为。当进入一个新的城市,深网有需要重新学习大部分知识。相反,人类能够直接学习安全行为而不用经历死亡,这都要归功于人脑的抽象建模。
b7aa013a-f294-3919-a121-f8e55b1bf10b.png

简而言之,尽管我们在机器感知方面取得了不小的进步,但是我们仍然离人类级别的人工智能有很大区别。我们的模型只能执行局部泛化,在过去中学习来适应最新的情况。而人类可以极端泛化,迅速适应大胆新奇的情况,或为长期未来的情况进行规划。

总结

作为一个开发者应当记住:迄今为止,深入学习的唯一真正的成功是使用大量的人为注释的数据让机器使用连续的几何变换将空间X映射到空间Y。 做好这一切,则可以改变行业的游戏规则。但想让AI拥有人类的智慧,仍然有很长的路要走。

引用
由中国人工智能学会、阿里巴巴集团 & 蚂蚁金服主办,CSDN、中国科学院自动化研究所承办的第三届中国人工智能大会(CCAI 2017)将于 7 月 22-23 日在杭州召开。作为中国国内高规格、规模空前的人工智能大会,本次大会由中国科学院院士、中国人工智能学会副理事长谭铁牛,阿里巴巴技术委员会主 席王坚,香港科技大学计算机系主任、AAAI Fellow 杨强,蚂蚁金服副总裁、首席数据科学家漆远,南京大学教授、AAAI Fellow 周志华共同甄选出在人工智能领域本年度海内外最值得关注的学术与研发进展,汇聚了超过 40 位顶级人工智能专家,带来 9 场权威主题报告,以及“语言智能与应用论坛”、“智能金融论坛”、“人工智能科学与艺术论坛”、“人工智能青年论坛”4 大专题论坛,届时将有超过 2000 位人工智能专业人士参与。

目前,大会火热报名中,扫描下方图片中的二维码或直接点击链接火速抢票。
35cb05be-9876-3073-be11-97d7f9b93d01.jpg


感谢 jihong10102006 投递这篇资讯

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

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


ITeye推荐



Favicon for 小众软件 - Appinn 10:44 在 4689 个取景地中体验电影故事 | 豌豆荚设计奖 • 片场 » Post from 小众软件 - Appinn Visit off-site link

《权利的游戏》第七季终于回归了,让无数剧迷陷入了狂欢。剧里那些幽深而宏伟的美景,也让人心驰神往。虽然是幻想世界,但它的片场还是在我们可以到达的地方,你想不想去看看?

第 297 期豌豆荚设计奖,我们颁给一款实用的电影主题旅行应用——「片场」。在这个应用里,你可以寻找你喜欢的电影的拍摄片场,跟随它的指引,深度游览一番。

深挖超过 4000 个片场,原汁原味体验

在「片场」中,你可以找到很多中外电影电视剧的片场和周边景点资料,无论是《权力的游戏》、《初恋 50 次》,亦或是《重庆森林》。

而且,它不止是电影单一的片场。电影每个剧情发展点切换的场景,它都进行了详细的考究。你可以从城市、距离、剧情的不同维度,发现电影里那些人物所有经过的地方。

你可以像你迷恋的剧中人物一样,走他走过的路,看他看过的风景。身临其境,然后重温电影,那样的感觉绝对赞。

是旅行推荐,也是电影推荐

在「片场」中,你不会枯燥地看着那些电影片场,而是让你通过电影片场,去感受更多电影和当地的魅力。你既可以查看这部电影,有多少个片场景点,也可以查看这个景点有多少电影曾经在这里拍过。

精心挑选的专题,仿佛是旅行推荐,又像是电影推荐。承载在片场上的,是电影的精气神。

旅行和电影都是相通的,都是在接触一个全新的世界。

定制自己的电影之旅

「片场」中目前只收录了 400 多部电影电视剧,但却有超过 4000 个片场。取景地之密集,难以想象,但不用担心。片场早已为你规划了合理的参观路线,让你的电影朝圣之路更加轻松。

你也可以添加任意的地点进入你的线路,可以形成专属于自己的电影之旅。

总的来说,「片场」是一个献给电影及旅行爱好者的指南应用。如果你是一个热爱电影,渴望亲身经历体验一切的人,那这款应用是适合你的。

关于豌豆荚设计奖
始于 2011 年,每周评选一款优秀的应用推荐给你,无关用户量、品牌或商业利益,希望这些实用、创意、或经典的应用填满你的手机。开发者申请请发邮件至:award@wandoujia.com。


相关阅读


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

apppackge:

Favicon for 开源中国社区最新新闻 10:04 思途旅游 CMS V6.0.201707.21 » Post from 开源中国社区最新新闻 Visit off-site link
                更新包                产品名                描述
kb2017072006思途CMS_基础                1、修改代码对https的支持;                优化
kb2017072005思途CMS_基础                1、帮助按钮功能添加;                优化
kb2017072004思途CMS_基础                1、1.限制扩展模块拼音小写,  2.目的地拼音限制由字母数字组成, 3.目的地拼音和模型拼音重复判断;                优化
kb2017072003思途CMS_基础                1、升级系统功能完善,添加更多的升级前检测,跨版本升级重要提示;                优化
kb2017072002思途CMS_基础                1、伪静态配置/Sitemap/死链的写入功能优化;                优化
kb2017072001思途CMS_基础                1、后台图片库窗口调整;                优化
kb2017071304思途CMS_基础                通用产品详情页支付方式没有显示修复                修复
kb2017071303思途CMS_基础                1、PC端微信登陆bug修复;                修复
kb2017071302思途CMS_基础                1、产品详情页支付方式未显示;                修复
kb2017071301思途CMS_基础                1、【思途CMS】相册列表页切换目的地报错;                修复
kb2017071204思途CMS_基础                1、支付底层修复;                修复
kb2017071203思途CMS_基础                1、短信发送服务类中提出短信模板生成功能;                优化
kb2017071001思途CMS_基础                1、【思途CMS】小优化-活动详情页新增分享功能;                优化
kb2017070701思途CMS_基础                1、【思途CMS】满意度调用规则优化;                优化
kb2017072002移动裂变分销                1、修改代码对https的支持;                优化
kb2017071301移动裂变分销                1、裂变分销的自购佣金设置提示语修正;                修复
kb2017072002平台酒店产品管理                酒店PC端列表页优化标题修正                修复
kb2017072002平台活动管理                1、活动手机端优化标题修正;                优化
kb2017072002平台游轮产品管理                1、列表页优化标题去除导航名称;                优化
kb2017072002平台文章管理                1、修改代码对https的支持;                优化
kb2017072002供应商入驻应用                1、供应商帮助按钮添加;                优化
kb2017072001平台文章管理                1、后台图片库窗口调整;                优化
kb2017072001平台活动管理                1、后台图片库窗口调整;                优化
kb2017072001平台租车产品管理                1、后台图片库窗口调整;                优化
kb2017072001平台私人订制产品管理                1、后台图片库窗口调整;                优化
kb2017072001一元夺宝应用                1、后台图片库窗口调整;                优化
kb2017072001平台导游管理                1、后台图片库窗口调整;                优化
kb2017072001平台酒店产品管理                1、后台图片库窗口调整;                优化
kb2017072001平台保险产品管理                1、后台图片库窗口调整;                优化
kb2017072001积分商城应用                1、后台图片库窗口调整;                优化
kb2017072001积分抽奖应用                1、后台图片库窗口调整;                优化
kb2017072001平台结伴产品管理                1、后台图片库窗口调整;                优化
kb2017072001平台线路产品管理                1、后台图片库窗口调整;                优化
kb2017072001平台相册产品管理                1、后台图片库窗口调整;                优化
kb2017072001平台游轮产品管理                1、后台图片库窗口调整;                优化
kb2017072001平台景点门票产品管理                1、后台图片库窗口调整;                优化
kb2017072001平台团购产品管理                1、后台图片库窗口调整;                优化
kb2017072001平台签证产品管理                1、后台图片库窗口调整;                优化
kb2017072001专题应用                1、后台图片库窗口调整;                优化
kb2017072001比来比去线路分销接口                1、修改代码对https的支持;                优化
kb2017072001八优短信接口                1、修改代码对https的支持;                优化
kb2017072001乐乐酷门票分销接口                1、修改代码对https的支持;                优化
kb2017072001移动端LBS应用                1、修改代码对https的支持;                优化
kb2017072001供应商入驻应用                1、修改代码对https的支持;                优化
kb2017072001供应商租车产品管理                1、修改代码对https的支持;                优化
kb2017072001供应商(商家)验单应用                1、修改代码对https的支持;                优化
kb2017072001供应商财务管理                1、修改代码对https的支持;                优化
kb2017072001供应商酒店产品管理                1、修改代码对https的支持;                优化
kb2017072001供应商线路产品管理                1、修改代码对https的支持;                优化
kb2017072001供应商门票产品管理                1、修改代码对https的支持;                优化
kb2017072001供应商通用产品管理                1、修改代码对https的支持;                优化
kb2017072001供应商团购产品管理                1、修改代码对https的支持;                优化
kb2017072001云片短信接口                1、修改代码对https的支持;                优化
kb2017071303平台游轮产品管理                1、产品详情页支付方式未显示;                修复
kb2017071302手机美观酒店栏目首页模板(221)                1、【思途CMS】小优化:221模板酒店栏目首页模板;                优化
kb2017071301平台游轮产品管理                1、邮轮详情页积分优惠提示修正;                修复
kb2017071301手机美观酒店详情页模板(217)                酒店房型加了名称以后会破图的问题                修复
kb2017071301平台导游管理                1、产品详情页支付方式未显示;                修复
kb2017071301平台团购产品管理                1、产品详情页支付方式未显示;                修复
kb2017071301手机实用首页模板(259)                1、【思途CMS】259模板样式和效果图不一致;                优化
kb2017071301平台线路产品管理                1、【思途CMS】小优化-线路后台配置增加301重定向;                优化
kb2017071301平台租车产品管理                1、【思途CMS】产品详情页套餐样式修正;                修复
kb2017071301平台景点门票产品管理                1、【思途CMS】产品详情页套餐样式修正;                修复
kb2017071201平台租车产品管理                1、产品详情页支付方式未显示;                修复
kb2017071201平台酒店产品管理                1、产品详情页支付方式未显示;                修复
kb2017071201平台保险产品管理                1、产品详情页支付方式未显示;                修复
kb2017071201平台线路产品管理                1、产品详情页支付方式未显示;                修复
kb2017071201平台景点门票产品管理                1、产品详情页支付方式未显示;                修复
kb2017071201平台文章管理                1、现有文章查询列表页优化标题调整;                优化
kb2017071201绿色春季专题模板(251)                1、【思途CMS】251专题模板修复;                修复
kb2017071001平台活动管理                1、【思途CMS】小优化-活动详情页新增分享功能;                优化
kb2017071001平台团购产品管理                1、【思途CMS】团购首页产品显示不正确;                修复
kb2017071001平台游轮产品管理                1、邮轮舱房详情介绍栏没有撑满;                修复
kb2017071001绿色春季专题模板(251)                1、【思途CMS】251专题模板更新;                修复
kb2017070701平台景点门票产品管理                1、标准模板景点门票的套餐样式调整,将左侧套餐标题栏加宽,价格和预订右移;                优化
kb2017070701平台相册产品管理                1、关于手机版相册显示修复;                修复
Favicon for 小众软件 - Appinn 09:40 萌鱼辨色 – 识别真实世界中的色彩,并获得颜色代码 [iPhone] » Post from 小众软件 - Appinn Visit off-site link

萌鱼辨色 是一款通过 iPhone 摄像头获取颜色代码的应用,并且可以生成各种颜色代码类型。@Appinn

来自发现频道,与翻页时钟 iClock 是同一位开发者。

青小蛙发现很多人喜欢在网上找各种素材,比如背景、纹理、图案之类的,然而青小蛙一直觉得,其实最现成的素材就是出门在外呀,随便拍照随便取景,比起别人的素材,自己的才是最好的。

萌鱼辨色 能够帮你找到一些特别的颜色,只需要用它对着物体就行了。

支持多种颜色格式(RGB/RGBA/ARGB/HSL/HSLA/CMYK/HEX/HSB/SRBG),支持多种代码类型包括(CSS/CSS3/Java/.Net/CGColor/NSColor/UIColor/Swift/OpenGL/XML),所以用途可以有很多种。

萌鱼辨色 售价 3 元。


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

apppackge:

Favicon for 开源中国社区最新新闻 08:23 8月广州&珠海源创会报名启动,盛夏邀你来避暑! » Post from 开源中国社区最新新闻 Visit off-site link

火热的八月,OSC 源创会将来到广州和珠海,带着自由、开放、分享的开源精神,也带着满满的干货主题,邀各位来一场火热的约会~

8月19日广州源创会报名及详情请点击:https://www.oschina.net/event/2254400

8月20日珠海源创会报名及详情请点击:https://www.oschina.net/event/2254401

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

174833_zxPQ_2896879.png

一、8月19日广州源创会主题

114549_rbEu_2896879.png

主题介绍:

1.新一代数据库核心能力

内容简介:本次主题将从行业需求,技术发展的两个方面来阐述新一代数据库的重要发展方向和核心能力。作为国内领先的分布式数据库厂商,也是国内第一家完全自主研发的分布式数据库产品,同时也从产品核心技术层面来介绍巨杉自己对于这些技术方向所做的工作。

分享嘉宾:彭旸,巨杉数据库解决方案总监/技术总监,曾任SAP加拿⼤大零售产品负责⼈, 超过15年国际零售咨询及数据服务经验;熟悉大数据技术与各项大数据服务平台;曾在北美从事数据分析平台研发;上海大数据联盟成员;上海海市智慧园区促进会理理事单位成员;目前负责巨杉解决方案以及行业应用整合。

2.深度剖析Angular的核心特性

主题简介:基于最新的Angular4.0版本,讲解强大的集成开发平台angular/cli,以及Angular最核心的3大概念:组件、模块、路由。

分享嘉宾:大漠穷秋,Google Angular developers PM。从业10年,5年专业前端。著有《Ext江湖》、《ActionScript3.0游戏设计基础(第二版)》、《用AngularJS开发下一代WEB应用》、《迈向Angular2》四本书。对技术拥有无限的热情,爱学习,爱分享。曾在W3CTech、海尔电器、北京用友、上海沪东中华造船厂、中国工商银行、中国电信、东软科技、Google GDG、开源中国等数十家组织或企业进行技术演讲,并在网络上制作了大量开源免费的视频教程,给开发者们带来了很大的帮助。

3.大型金融企业容器落地新思路

内容简介:容器技术始终在飞速发展,它的社区采纳度非常高,也已有大量企业将其用于生产环境中。中小企业使用容器时,由于企业规模问题,通常采用的方式是先小规模试用,再大规模部署。在使用的过程中,企业应用会依赖平台提供的网络、存储、构建、日志等跟容器运行紧密相关功能。但大型企业欲在生产中使用容器,由于企业应用已在现有环境上稳定运行,则会面临与现有基础架构的融合问题。此次分享将以Rancher的一个大型互联网金融企业客户为实例,分享Rancher在大型企业应用中尝试的一种容器落地的新思路:通过可扩展软件架构以及资源建模方法,将容器能力与企业现有的IT能力有机结合,形成容器平台在大型企业落地的新方式。

分享嘉宾:邓宇星,Rancher Labs后端开发工程师,关注应用容器化方案的制定和实施,熟悉金融系统的IT架构、核心系统的实现与中台系统的实现,目前负责Rancher中国区金融客户定制化交付工作。

4.LinkedIn Azkaban — — 开源工作流调度器在个推的实践

内容简介:Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。本次演讲将介绍个推基于LinkedIn Azkaban的工作流任务调度器的最佳实践,以及个推针对自身的实际业务需求对Azkaban做的一系列定制化开发及优化工作。

分享嘉宾:卞泽鑫,大数据高级研发工程师,现担任个推大数据部门基础设施及数据云平台工程师一职,曾负责个推云端服务系统中搜索引擎模块的设计与开发工作,参与了整个个推基于Elasticsearch搜索引擎模块的设计开发以及优化过程,并基于Elasticsearch开发了个推的相关数据工具。现负责个推大数据部门的基础设施及云平台建设,包括工作流调度器系统建设、多维度数据分析及数据可视化系统建设、大数据部门数据安全及监控系统建设、数据基础服务标准化及API服务。

5. Raft分布式一致性算法原理与实践

内容简介:Raft 算法在2013年发布,以容易理解、实现方式明确的特点,迅速在业界流行起来。本次主题主要讲解 Raft算法原理,日志复制、Leader选举等;Raft算法在TiKV中的应用,TiKV如何基于Raft做到可扩展和高可用。

分享嘉宾:李帅,PingCAP工程师,负责TiKV开发优化。专注于分布式系统开发,在存储系统、消息系统等领域有一定的经验。曾开发腾讯云CMQ消息队列,RabbitMQ贡献者。

174859_BPWJ_2896879.png

二、8月20日珠海源创会主题

114727_MMee_2896879.png

主题介绍:

1.Performance tuning in TiKV

内容简介:在生产环境中,会时不时遇到各种各样的性能问题,譬如 CPU 居高不下,Mem 程序上涨等。 TiKV 作为一个高性能的分布式 Key-Value 存储系统,也会面临同样的情况。本次分享,将以 TiKV 为例,讲解下我们是如何使用相关的方法和工具来对整个系统进行调优以提升性能的。

分享嘉宾:唐刘,PingCAP 首席架构师,典型技术 geek 一枚,在分布式,高性能,高可用上面有丰富的开发经验,现正从事下一代分布式数据库 TiDB 以及分布式存储 TiKV 的开发,致力于在基础架构数据库领域,提供一套完备的 HTAP 解决方案,解放生产力。开源爱好者,知名开源软件 LedisDB,go-mysql 等作者。工作之余,喜欢阅读和写作,希望自己不断精进。

2.Android动态化之路

内容简介:近年来,动态化已经成为移动应用开发中不可或缺的技术,讲者通过多年的移动开发经验介绍Android开发中常用的动态化技术,包括Hybrid、结构化View、插件化、ReactNative、Weex等技术方案。通过实例讲解相关技术的使用场景以及魅族应用在相关技术的选择和优化。从前端、应用端和服务端的角度讲述由Hybrid到Weex的平滑过渡。

分享嘉宾:张兴业,魅族科技高级工程师,主要从事应用支持工作,包括基础技术研究、Web相关技术在应用中的使用和优化。

3.如何保证开源软件的代码质量

内容简介:以 OpenResty 这个高质量的开源软件为例,从code review、代码风格、单元测试、性能测试、fuzzing 测试等各个方面介绍 OpenResty 在测试方面的一些实践

分享嘉宾:温铭,在互联网安全公司工作了 10 年,主要从事服务端的开发和架构,负责开发过木马云查杀、反钓鱼系统和企业安全产品。 目前加入 2017 年初成立的 OpenResty Inc.,致力于打造基于 OpenResty、Linux 内核等基础平台的企业级产品和解决方案。

4.微服务架构Tars的技术揭秘和开源实践

内容简介:近年来,业内已经有越来越多人关注并开始落地微服务,Tars作为腾讯内部经过十年发展的一套稳定可靠的多语言rpc开发框架和微服务治理平台,在内部海量业务下有着非常丰富的实践经验,同时它从内部走向外部的开源之路也十分不易。本次分享,将揭秘Tars的核心技术的实现原理、对外开源的实践经验以及未来开源的发展规划,希望更多的人了解和认识Tars。

分享嘉宾:刘豪,腾讯后台高级工程师,主要从事于微服务架构、云平台、分布式Nosql存储等技术领域的相关工作。

除了干货满满的主题,还有:

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

以及,经典的下午茶歇、精美的礼品,OSC出品的开源扑克开源内裤巨型鼠标垫,还有IT大咖说特别赞助的 Cherry 机械键盘,等你来约!

Favicon for 开源中国社区最新新闻 08:18 Rust 1.19 发布,Mozilla 开发的系统编程语言 » Post from 开源中国社区最新新闻 Visit off-site link

Rust 1.19.0 带来了一些期待已久的功能。Windows 用户要注意,Rust 依赖于 link.exe 来进行链接,这可通过 Microsoft Visual C++ 构建工具获得。不过在最近发布的 Visual Studio 2017 中,这些工具的目录结构已更改,因此,要使用 Rust,需要使用 2015 的工具或使用变通方案(例如运行 vcvars.bat)。在 1.19.0 中,rustc 知道如何找到 2017 的工具,所以升级到 1.19.0 不需要使用变通方案。

新功能介绍:

Rust 1.19.0 是首个支持 unions 的版本:

union MyUnion {
    f1: u32,
    f2: f32,
}

Unions 与枚举有点类似,但 Unions 是“untagged”的。

除此之外,loops can now break with a value

// old code
let x;

loop {
    x = 7;
    break;
}

// new code
let x = loop { break 7; };

Rust 将自己定位为“面向表达式的语言”,新的版本中,循环使用了这样的方式。

其他新特性

更多内容点此查阅

下载地址

Rust 是一种系统编程语言。 它有着惊人的运行速度,能够防止段错误,并保证线程安全。 

>>>【评论有礼】7月10日-31日在下方评论资讯,即有机会获得 9 活跃积分和开源中国实物周边。活动详情

Favicon for 开源中国社区最新新闻 08:17 给 Web 开发人员推荐的开源图形库 —— 2D/3D » Post from 开源中国社区最新新闻 Visit off-site link

现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高,数据可视化、动画交互、2D/3D 等元素已然成为标配。 以下是为 Web 开发者推荐的一些精品开源图形库,旨在专注于最常见的问题和最常用的东西。将针对动画(Animation)、数据可视化(Data Visualization)、2D/3D 分别整理,欢迎保持关注。

Favicon for 开源中国社区最新新闻 08:16 码云推荐 | 简单易用的静态文档生成器 Loppo » Post from 开源中国社区最新新闻 Visit off-site link

Loppo 是阮一峰开源的一个简单、好用的静态文档生成器,可以一键生成 Markdown 文档站点,请看 demo。特点:简单的配置 (示例)、清晰的目录 (示例)、易用的模板语法 (示例)、内置功能性命令……

Favicon for 开源中国社区最新新闻 08:13 每日一博 | MyCAT 源码分析之 SQL ON MongoDB » Post from 开源中国社区最新新闻 Visit off-site link

可能你在看到这个标题会小小的吃惊,MyCAT 能使用 MongoDB 做数据节点。是的,没错,确实可以。 吼吼吼,让我们开启这段神奇的“旅途”。

Favicon for 开源中国社区最新新闻 08:09 SAPNetworkMonitor —— 网络分布式监控平台 » Post from 开源中国社区最新新闻 Visit off-site link

Sap Network Monitor 工具分为Server和Monitor两个部分。Server主要负责Monitor的监控和数据收集、统计、展现,它是一个Web服务,以直观简介的界面,让管理人员进行监控和快速的定位问题。它只需要部署一台就可以了,推荐部署在Linux系统上,数据库推荐使用PostgreSQL,也可以用Mysql。Monitor实际上是代替SAP管理人员,在SAP的客户端机器或网络内执行niping命令,来对目标路由进行时延、稳定性、超时等测试,它与Server按频率进行心跳,并从Server端接收任务指令,在本地执行任务并返回结果。它可以安装在多个需要进行niping -c 监测的SAP客户机上。Monitor用Golang语言编写,并编译成了可执行程序,目前支持Windows、Linux系统,推荐安装成系统服务,这样它能够自动随机运行,并随时执行监测任务。

Favicon for 开源中国社区最新新闻 08:07 OSChina 周五乱弹 ——程序员看不懂的外交黑话 » Post from 开源中国社区最新新闻 Visit off-site link

今天在公司听到一句惨绝人寰骂人的话:“你TM就是一个没有对象的野指针!” 什么仇什么怨,没对象就这么被鄙视么。

Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 Rider首个发布候选版加入了性能提升特性 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
GettyImages-93165688.jpg

Rider是JetBrains推出的一款多平台IDE产品,聚焦于.NET开发。JetBrains已经给出了Rider的首个发布候选版。该最新预览版扩展了对NuGet的支持,尤其针对Windows系统改进了通用性能,并添加了一些可用性上的改进。

By Jeff Martin Translated by Rays
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 从eBay购物车丢失看处理网络I/O » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

eBay的员工Venkatesh Ramaswamy于2017年1月发表了一篇文章,文章发表在eBay技术博客上,文章主要讲了针对购物车缓存数据丢失情况,eBay思考的三种解决方案,以及最终采用的解决方案。

By 麦克周
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 Salesforce三项新服务让CRM具备认知能力 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

Salesforce近期在博客中公布了其爱因斯坦AI平台上的三项认知服务。这三项附加服务包括情感检测、意图检测以及目标检测。Salesforce的用户可以通过这三项服务来自动完成洞察分析,还可以在他们的CRM应用中使用预测模型。

By Kent Weare Translated by 李勇
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 07:55 迷你书: 架构师特刊:进击的618 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
100.jpg

每一次的电商大促,都是外行看热闹(剁手),内行看门道(技术)。在这国人购买力飞速升级的时代,每一轮爆棚流量背后,都有着那改变世界的技术作支撑。今年的 618,京东是怎么玩的?InfoQ 为你揭秘!

By InfoQ中文站
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 07:35 文章: 《敏捷企业》作者访谈录 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
cover.jpg

在《敏捷企业》一书中,作者Mario Moreira探讨了运营一个有效的敏捷企业所需的端到端和自上而下的观点,侧重于客户和员工的需求。还阐述了如何将前沿创新的概念与实践纳入健壮的由客户价值驱动的敏捷框架中。

By Ben Linders Translated by 蔡芳芳
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 07:13 文章: InfoQ虚拟研讨会:无服务器计算的实践方法 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
GettyImages-514570298.jpg

开发者在构建软件过程中需要掌握各种技能,而这长长的清单中又要增加无服务器计算这样一个技术了。无服务器产品(更严格来说可以称之为函数即服务产品)虽然更简单,但需要付出代价。为了近一步了解这个激动人心的领域以及可能产生的影响,InfoQ采访了该领域的三位专家。

By Richard Seroter Translated by 大愚若智
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 06:43 视频演讲: 从大公司到创业公司 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
lishimin270.jpg

如今,摆在 IT 人面前的选项越来越多。从公司来看,有大公司、小公司、外企、创业公司等;从技术领域来看,有种类繁多的传统方向,以及层出不穷的各种新兴方向,包括云计算、大数据、AI 等;从技能来看,有各种技术等“硬”技能,还有沟通、领导力等各种“软”技能;从职业道路上看,有一直做技术的,有从技术转管理的,有从管理转技术的,还有技术转市场的,等等。面对这种复杂局面,特别是有时候所做选择需要很长时间才能出结果的情况下,我们 IT 人该如何应对呢? 本次演讲中,作者将从自己的工作经历出发,从工程师择业的角度,与观众产生共鸣,从大公司到创业公司,需要转变的思路与做事情的方法,有原则性的东西,也有真实案例与身边的故事,还会穿插一些工程师的软技能。

By 刘世民
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 06:43 文章: 如何面试工程师? » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo3%20(1).jpg

在这篇文章中,作者向我们说明了目前技术面试存在的问题,然后基于Triplebyte公司收集的面试数据进行经验教训的分析和总结,重点探讨如何改进雇用工程师的方法。

By Ammon Bartram Translated by 蔡芳芳

News stories from Thursday 20 July, 2017

Favicon for 异次元软件世界 21:03 [来自异次元] 悲哀!迅雷已全面关停封杀第三方「远程下载」功能 » Post from 异次元软件世界 Visit off-site link

xunlei.jpg

迅雷可以说是目前国内第一大下载工具,功能和资源非常丰富强大,尤其是加入会员之后,下载冷门资源时的加速度很不错。 不过据网友们反映,并经测试证实,迅雷现在已经悄悄关闭了第三方远程下载功能 (迅雷远程下载)。 所谓的迅雷「远程下载」,就是可以让你用手机或电脑,“远程”地将文件……

[ 马上前往围观.... ]


异次元正版数字商城  |  异次元首页  |  iPc.me  |  新浪微博  |  软件精选

Favicon for 小众软件 - Appinn 18:55 Autohabit – 任何人都可以在生活中做出积极的改变[iPhone] » Post from 小众软件 - Appinn Visit off-site link

如果你想让当前的生活做出一些积极的改变,那么是时候去养成一些良好的有趣的习惯了。用 Autohabit 可以帮你创建习惯并定时提醒,还能记录你的习惯进程。当「习惯」终成为习惯,也就可以把 Autohabit 抛弃了。@Appinn

Autohabit 是一款非常简单的 iPhone 应用,界面也不华丽,或者说…不漂亮。

用法也简单,添加新的习惯,起一个好听的名字,然后选择习惯类型,有连续习惯、每日习惯、每周习惯、每月习惯,选择不同类型后,Autohabit 会在不同的时间提醒。

然而青小蛙不是很懂 Continous Habit 是怎么个习惯,时时提醒么…

在之后,可以为每次习惯提醒的时候反馈不同数据,包括 是/否、感觉范围、1~10 评分。

嗯,来说说你都有什么习惯啊?


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

apppackge:

Favicon for ITeye资讯频道 16:20 Vim 爱好者看过来,12 个实用的 Vim 使用技巧 » Post from ITeye资讯频道 Visit off-site link
d617be0d-4093-315e-9ee0-e070ff02d43a.png

这篇 Vim 使用技巧的合集汇总了一些有趣的,由中级到高级的使用技巧。来回顾一下吧。
1. 重复上一条 Ex 命令

在 Vim 中有 3 种命令行模式提示:
  • Ex 命令提示符::something
  • 查找提示符 Search prompt:/something
  • 表达式提示符 Expression prompt:(在插入模式下输入 <C-r>= ): =1+1<cr>
假如我们从 Ex 命令提示符中运行一个 spec:
:!rspec spec/models/code_spec.rb

我们可以通过在普通模式下输入 @: 来重复上一条 Ex 命令。

2. 在 CSS 中对属性进行排序

如果我们需要按照字母表顺序对 CSS 选择器中的行进行排序,只需在可视模式下选择选中的行并输入 :sort,然后就可以对它们进行排序。
h4 {
  font-size: 11px;
  margin: 15px;
  background: red;
}

3. 选择复制和粘贴的文本

我们可以使用 gv 来选择原始的需要复制的文本,使用 gb 选择上一次粘贴的文本。gb 是一个自定义的映射,可将其添加到 vimrc 文件,而且该命令在进行提取方法重构、剪切时十分有用。我们还需要修复缩进,使用 gb 可以轻易选择粘贴的文本,然后使用 < 或 > 来进行修复。
" select last paste in visual mode
nnoremap <expr> gb '`[' . strpart(getregtype(), 0, 1) . '`]'

4. 在插入模式下粘贴文本

假如处于插入模式中,并希望在不退出插入模式的情况下粘贴已复制的文本。可通过使用 <C-r>0 实现这个需求。如果复制的文本包含新的行字符,<C-r><C-p>0 会处理缩进的问题。

5. 在插入模式下删除

如果需要在插入模式、Vim 命令行模式或 Shell 命令行中删除字符、单词或行,有以下的快捷方式:
<C-h> " delete back one character (backspace)
<C-w> " delete back one word
<C-u> " delete back to start of line
<C-k> " delete forward to end of line

6. 在某个范围内运行普通模式命令

下面的 JavaScript 代码全都忘记加上 ; 分号了:
var element = $(this)
var tabName = element.data('tab')
var report = element.data('report')

我们可以选择全部三行代码,然后运行命令 :normal A;,它将为每行执行 A; (追加 ;)的命令。或者,我们可以在文件的整个内容上使用 :%normal A; 以达到相同的效果。

7. 在多行代码中重复上一次更改

如果我们在上述代码段的第一行进行了一次修改,使用 A; 在行的结尾处插入 ;,如果需要再为 2-3 行添加 ;,应该怎样操作?可以通过选择第 2-3 行,并通过在可视化模式下使用 dot (“.”) 命令  :'<,'> normal . 来重复该命令。

8. 在多个文件中进行替换操作

Vim 中,在多个文件里面不能直接进行替换操作。要在多个文件中进行查找和替换,首先需要创建一个文件列表,我们将在其中执行一条命令。通过使用 :args 命令来实现这个需求。例如,加载所有以"ext"字符串开头的 JavaScript 文件:
:args app/assets/javascripts/ext*.js

这样可以看到通过运行 :args 命令得到的参数列表加载的文件。准备好参数列表后,可以执行查找和替换操作:
:argdo %s/From/To/g

一旦在文件中进行了更改,我们可以使用以下命令保存参数列表中所有的文件:
:argdo update

9. 在多个文件中进行查找和替换

如果我们知道被操作的文件需要在哪里运行替换命令,那么上一个技巧可以正常工作。但是大多数时候,我们需要搜索文件中的文本,然后只在这些文件中运行替换命令。此时,我们可以通过使用 vimgrep 命令在文件查找匹配。vimgrep 命令可创建快速列表,其中包含与模式匹配的文件,该列表可通过 :copen 命令来打开查看。如果我们希望快速列表有用,需要使用 vimrc 文件中的 :Qargs 映射来将其转换为参数列表:
command! -nargs=0 -bar Qargs execute 'args' QuickfixFilenames()

" populate the argument list with each of the files named in the quickfix list
function! QuickfixFilenames()
  let buffer_numbers = {}
  for quickfix_item in getqflist()
    let buffer_numbers[quickfix_item['bufnr']] = bufname(quickfix_item['bufnr'])
  endfor
  return join(map(values(buffer_numbers), 'fnameescape(v:val)'))
endfunction

最后,这里有一个需要在文件运行查找和替换的例子:
:vimgrep /CurrencyNumberHelper/ app/models/*.rb
:Qargs
:argdo %s/CurrencyNumberHelper/CurrencyHelper/g
:argdo update

在评论中,buztard 提到一个更简单的方法是使用 ack-grep 来创建参数:
:args `ack-grep -l CurrencyNumberHelper`
# or, if you're using Ack plugin, then just :Ack CurrencyNumberHelper
:argdo %s/CurrencyNumberHelper/CurrencyHelper/g
:argdo update

Thiago A. 也在评论中提到,如果你使用较新的 Vim 版本,这将会更简单,可简单地使用 cdo 和 cfdo 来完成这个需求:
:Ack CurrencyNumberHelper
:cfdo s/CurrencyNumberHelper/CurrencyHelper/g | update

10. 编辑已录制的宏

在录制宏的时候,很容易犯错误。当发生这种情况时,编辑已经录制好的宏比重新录制更容易。

假设我们已经在寄存器 a 中录制了新的宏。可以使用 :put a 在当前的缓冲区中打印宏的内容,并在 Vim 中对宏进行编辑。一旦宏被修改,我们可以选择它然后使用 "ay 将它复制到寄存器。这样,我们就可以使用 @a 从寄存器中执行新的宏。

11. 在多个文件中执行宏

我们已经录制好了一个宏,并且希望在多个文件中运行它。首先我们需要使用文件构建一个参数列表,例如,从一个 Rails 应用中加载所有模型:
:args app/models/*.rb

然后使用下面的命令运行宏(记录在寄存器 a 中):
:argdo normal @a

最后,使用下面的命令保存所有的缓冲:
:argdo update

12. 命令行中的 Vi 模式

Bash shell 提供了两种模式用于命令行编辑:emacs 和 vi。默认情况下是 Emacs 编辑模式,可以使用以下方式将其更改为 vi 模式:
set -o vi

在命令行中,可以按下 ESC 键进入 vi 编辑模式,并使用 vi 的单行编辑功能。在命令行中的 vi 编辑模式下,可以通过按下 v 弹出编辑器,这样就可以编辑和保存将在命令行中执行的缓冲。

如果需要回到 emacs 模式,输入:
set -o emacs

这里有一份在 bash shell 的 vi 模式下可以运行哪些 Vi 命令的速查表 —— 戳这里

点此查看更多的 Vim 使用技巧。

来自:https://dalibornasevic.com/

感谢 jihong10102006 投递这篇资讯

资讯来源:oschina

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


ITeye推荐



Favicon for 小众软件 - Appinn 11:51 应用好不好先看包装,Mustsee 带你发现世界上最美丽的地方 » Post from 小众软件 - Appinn Visit off-site link

Mustsee 就是我们常见的 Chrome 新标签页应用了,它会「在每个新标签页上展示世界上最美丽的地方,生活如此短暂,请不要浪费生命」。@Appinn

嗯,就是一款新标签页扩展啦,只不过听起来很浪费的样子…

每一张图片都有「旅行专家」推荐,要不要信专家呢?

👉 https://chrome.google.com/webstore/…/khgigcidnmn


相关阅读


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

apppackge:

Favicon for ITeye资讯频道 10:22 PostgreSQL 10 Beta 2发布 大量Bug被修复 » Post from ITeye资讯频道 Visit off-site link
引用
原文:PostgreSQL 10 Beta 2 Released
翻译:黑色巧克力

PostgreSQL全球开发小组今天宣布,PostgreSQL 10的第二个测试版本已经可供下载。这个版本包含了将在最终版本中出现的所有特性,以及对第一个测试版中所发现的许多问题的修复。现在鼓励用户开始测试应用程序。

升级到Beta2

PostgreSQL 10 beta2需要从beta1升级,或者使用pg_dump/pg_restore或pg_upgrade升级。

自Beta1后的变更

任何适用于9.6或更早版本,同时影响PostgreSQL 10第一个测试版的错误修复都包含在beta2中。软件用户和社区参与者也提出了针对PostgreSQL 10 beta 1的问题,其中很多已经在这个版本中被修复。开发小组鼓励社区重新测试,以确保这些错误实际得到解决,错误包括:
  • 在新的分区代码中修复内存泄漏
  • 取消显式地标记范围分区列NOT NULL
  • 修复使用BSD认证编译
  • 在libpq中使用多个指定主机超时后,尝试下一个主机
  • 验证服务器构造的SCRAM是否正确
  • 为具有不同顺序的列的表在逻辑复制中修复表同步
  • 修复pg_dump:来自前10台服务器的ing排序
  • 修复了BRIN索引自动汇总的问题
  • 从后端pid中生成pg_basebackup临时插槽名,而不是客户端生成
  • 使ALTER序列完全事务性
  • 允许COPY(query) TO并行化
  • 修复ALTER SUBSCRIPTION语法的歧义
  • 取消在逻辑复制人员中设置application_name
  • 允许查询取消walsender的后端
  • 防止BEFORE触发器违反分区约束
  • 标记to_tsvector(regconfig,json(b))函数是不可变的
  • 应用RLS策略来分区表
  • 为ICU添加MSVC构建系统支持,并在Windows上修复ICU支持
  • 不允许在CASE或COALESCE内部返回函数
  • 讲授关于分区表的PL/pgSQL
  • 取消在shared_preload_libraries等中使用downcase条目
  • 防止表分区被转变成视图
  • 修复CREATE STATISTICS中的IF NOT EXISTS
  • 在ICU编码转换中修复内存泄漏
  • 修复系统排序的导入
  • 用完整的复制身份修复逻辑复制
  • 在Solaris上支持tcp_keepalive_idle选项
  • 取消为pg_dump -c模式公开存在
  • 为分区/继承、可写的CTEs和ON CONFLICT修复过渡表
  • 更改pg_ctl -w以监视postmaster.pid中的状态来检测服务器就绪状态
  • 在构建时禁用gen_random_uuid(),–disable-strong-random
  • 允许libpq使用多个hostaddrs来使用多个hostnames
  • 使用索引修复过渡表的COPY处理
  • 在Windows上,重新尝试创建以防止共享内存保留失败

注意,仍存在一些问题并未解决,所以在报告测试版的错误之前,请仔细检查开放问题项页面。

测试计划

这是PostgreSQL 10的第二个测试版本,PostgreSQL项目将根据需要发布额外的beta测试版本,然后发布一个或多个候选版本,直到2017年末发布最终版本。有关进一步的信息,请参考Beta测试页面。

相关链接


感谢 jihong10102006 投递这篇资讯

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

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


ITeye推荐



Favicon for 小众软件 - Appinn 09:34 重回马赛克时代,Bricks Camera 帮你拍出《我的世界》感觉照片 » Post from 小众软件 - Appinn Visit off-site link

Bricks Camera 是一款马赛克相机,能够用来拍摄照片和 GIF 动画,支持前后摄像头,支持改变马赛克大小。@Appinn

其实也不能叫重回马赛克时代了,毕竟历史上并没有一个真正的马赛克拍照时代,都是闲的无聊的人们觉得普通拍照太没意思了,才有了所谓的油画风格、滤镜风格、马赛克风格 😂

Bricks Camera 打开就是标准的相机,有快门和切换前后摄像头按钮。触摸屏幕可以改变马赛克大小。

然后就是拍照了呗,长按快门可以录制 GIF 动画。

然后,你喜欢这种风格呢?青小蛙表示也太不清晰了,还没有微软高清版本的我的世界清晰呢。


相关阅读


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

apppackge:

Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 Google使用机器学习识别侵扰式Android应用程序 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
GettyImages-515702964.jpg

Google安全工程师Martin Pelikan,Giles Hogben和Ulfar Erlingsson介绍,Google使用聚类算法自动分析Android应用,并检测哪些应用可以被认为是侵扰式应用程序。

By Sergio De Simone Translated by 猫儿不熊
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 Google关于Go 2的讨论 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

在本周召开的GopherCon 2017会议上,Google Go的技术负责人Russ Cox,请社区就该语言的下一个主要版本的内容提出建议。

By Abel Avram Translated by 猫儿不熊
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 管理众包测试 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
GettyImages-492572366.jpg

众包测试是一种很独特的测试方式,它能让真实的用户或者测试人员,在真正的应用环境下参与到测试的过程中来。Maja Schreiner 表示,这种测试方式帮助瑞士电信公司(Swisscom)在开发过程早期就及时地发现了缺陷,从而很好地改善了产品质量。收集并分析用户和测试人员的全部反馈信息是一个巨大的挑战;研发人员的参与可以帮助加速测试迭代的进程,同时也能帮助研发人员更好地理解测试人员对产品测试的思路和想法。

By Ben Linders Translated by 李瑞丰
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 Google发布MultiModel:能够学习不同领域多任务的神经网络 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
GettyImages-479766094.jpg

Google创建了一个神经网络,可以接受多种形式的输入,并产生多种形式的输出。他们开发了一个模型,能够执行8个不同领域的任务,包括:语音识别、图像分类和添加标题、句法解析、英德互译和英法互译。该神经网络可以通过任意一种输入和输出的形式来学习所有任务。

By Roland Meertens Translated by 蔡芳芳
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 WebAssembly:解决 JavaScript 痼疾的一颗银弹? » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

WebAssembly:解决 JavaScript 痼疾的一颗银弹?

By 王泽
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 08:00 极视角科技罗韵:开放算法平台,推动计算机视觉技术多行业落地 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo_bigger.jpg

极市平台是极视角旗下的另一大算法平台产品,主要为开发者提供视觉算法开发、测试、优化、宣传、销售等服务。InfoQ记者专访了极视角首席生态官罗韵,她将为我们带来极视角极市平台的技术解析。

By 陈思
Favicon for 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! 07:07 文章: 《感知与响应》作者访谈录 » Post from 未注册用户的 InfoQ 个性化 RSS Feed - 请注册后升级! Visit off-site link
logo-book-review.jpg

在《感知与响应》一书中,作者探讨了经理、主管以及业务领导应如何利用技术的力量,打造更成功的企业。作者Jeff Gothelf 和Joshua Seiden阐述了应该如何利用实践、学习以及连续的市场反馈来将有价值的产品交付到消费者的手中,团队如何管理成果,以及促进有效合作。

By Ben Linders Translated by 马卓奇
Favicon for 异次元软件世界 01:21 [来自异次元] Tasker - 安卓自动化任务工具神器!高效人士的必备系统增强应用 » Post from 异次元软件世界 Visit off-site link

tasker_banner.jpg

我们刚刚推荐过一款可以将手机短信转发到邮箱的小工具,然而它功能太过于单一。其实在安卓上,我们可以利用 Tasker 来轻松实现这样的功能,而且它还能做得更多,功能甚至超乎你想象。

Tasker 绝对可以称得上是 Android 系统上自动化执行任务的神器级辅助工具 APP!它类似于 IFTTT、比 iOS 的 Workflow 更自由强大。你可以根据自身需要来设定条件,当 Tasker 检测到满足条件时就会自动执行设置好的任务,从而帮助你自动化处理各种繁杂事务,让你的手机变得无比的智能……

[ 马上前往围观.... ]


异次元还有这些值得一看:

异次元正版数字商城  |  异次元首页  |  iPc.me  |  新浪微博  |  软件精选

News stories from Wednesday 19 July, 2017

Favicon for 小众软件 - Appinn 17:51 怀旧党看过来,「FC 游戏」原声音乐在线赏析 » Post from 小众软件 - Appinn Visit off-site link

这是一个叫做 NSF播放器 的网站,收集了大量史前 「FC 游戏」的原声音乐,并且可以在线播放。@Appinn

来自发现频道,@yunzl 说到:其实很早以前就想到这里推荐了,因为我这个东西真是太小众了,唉。

其实,你不是一个人啊。

NSF = NES Sound Format,字面意思即 NES(FC) 机音乐格式。简单来说,NSF 是可以在 FC 实机上播放的音乐格式。NSF 是用 FC 机汇编代码编写的程序,而并非 midi 格式。

比如大家都熟悉的魂斗罗(神马,你没听过,好羡慕你们年轻人),在 NSF 里能够搜索到 8 条信息:

是不是很耳熟?这就对了,作为年轻人,青小蛙表示不知道,这些都没听过。

嗯,可以去搜索你熟悉的游戏了。

👉 http://nsf.mimoe.cc/


相关阅读


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

apppackge:

Favicon for ITeye资讯频道 15:05 看Github上的开发者是如何更换编程语言的? » Post from ITeye资讯频道 Visit off-site link
引用

译者注:你是否曾经想过尝试换一门语言进行开发,从而挑战一下自己。本文作者分析了GitHub上面的用户,从而得到了用户切换开发语言的相关信息。以下为译文。

你是否曾经一边挣扎于项目的混乱,一边思考着:“我可以用这门语言来做,但是为什么不尝试换一门语言,看看会不会更有趣呢?”。埃里克·伯恩哈德森 曾在博客中写过一篇很好的文章:“为什么我们从语言X换成语言Y”的特征向量,他根据所有与语言变化相关的谷歌查询做了一个情形分析表。然而,当我读到它的时候,我忍不住想知道,真正跨行成功的人的比例是多少。因此,越来越多的人开始深入了解这一想法,并了解在GitHub用户中语言的流行程度是如何变化的。

可用数据集

多亏了数据检索管道,source{d}可以将数据集开放给用户,其中包含每年每位GitHub用户使用不同编程语言编写的代码的字节数。在一些图中,它是:
  • 450万GitHub用户
  • 393种不同的语言
  • 总共10TB的源码
如果你想知道这些存储库和语言的细节,我建议你可以看看Vadim Markovtsev的博客文章:Spaces or Tabs

为了更好的理解接下来将会发生什么,我发现如果用甘特图的形式将开发语言的使用历史以可视化的形式进行展示,效果很不错。
de1701cf-900c-3280-b20e-ec5a9106256a.png

注意,颜色表示每种语言的源码的比例。我们可以从这个图中推导出一些信息:
  • 用户最喜欢的语言是Scala,而且只钟情于它。
  • 用户尝试了了Go语言,但没坚持多久。
  • 他们用Java运行了一个重要的项目,但是他们宁愿在Scala中编写代码。使用Java可能是完成单个项目的一个约束。
当然,从这张图中可能会推导出在2014年用户开始从Java切换到Markdown。我们希望避免去比较那些没有可比性的语言。这就是为什么我们将重点放在25个主要编程语言的样本上。实际上是22个,因为我们没有关于Lisp、Kotlin和Cobol这三门语言的数据。

量化

你肯定会同意,GitHub的“Hello world”库并不真正算作是切换到另一种语言。因此,我们决定对数据集中的贡献值进行量化,以减少干扰。出于这个原因,我们在下面的小节中展示了GitHub每个字节大小的贡献的分布。
eccd1ac7-3423-3c96-99df-8b53e47173c4.png

按大小分配GitHub贡献

正如我们所看到的,它的尾巴很长,大部分的贡献都是很小的。为了近似分布,我们使用了核密度估计,也就是图中的橙色曲线。最后,通过将曲线下的面积划分成10个相等的部分来得到量化。从0开始编号。

在对数据集进行过滤和量化之后,我们可以继续构建自己的转移矩阵。

最小费用流问题

对于每一个GitHub用户,我们聚合年度的矢量;我们将称它们为反应器,其中每个393个元素代表着当年对应的语言编码的字节数。在规范化之后,这些反应堆就像直方图一样,我们需要相互比较。

在PyEMD中提供了一种优雅的方法,在编码和计算时间上都是有效的,它提供了一个Python包装器,用于“地球搬运工”的距离,它对“Numpy”友好。这个距离度量——比用于直方图比较的欧氏距离要好的多——特别有趣,因为它是基于线性规划(LP)。事实上,它可以被看作是以下交通问题的解决方案,where
5fb622e8-a35e-3678-b45e-3b586b110e94.png

6ee2b375-1e67-3725-9b11-2f9a562c6ab5.png

运输问题,供应和需求

我们可以看到,每隔几年,字节数要么被看作是“供给”,要么是“需求”。
4e6c8806-722a-3872-85f2-cbf054034368.png

让我们在这里稍微讲一下。首先,边的“成本”被设为1,以使我们无偏见。其次,为了减少我们的问题到经典的流量最小化公式,我们必须在两部分图的两边加上一个人工的源和水槽,以确保流体的守恒。这不是一个临界点,斯坦福CS97SI的最后一张幻灯片描述了这个转变。

转移矩阵

以下是为特定的GitHub用户计算连续两年之间的转移矩阵的核心代码。我们使用的主要功能是emd_with_flow,它由PyEMD包提供。
def get_transition_matrix_emd(user, year):

# lang2keep is the list of the 22 programming languages we kept
# stairvalue() is the step function that comes from quantization

# Build user's reactors for year and year+1
reactors = zeros((len(lang2keep),2), order='f')

for ind, code_in_lang in enumerate(dataset[user]):
    lang = code_in_lang[0]

    if lang in lang2keep:
        for y, qtt_coded_year in code_in_lang[1]:
            if y == year:
                reactors[lang2keep.index(lang),0] = stairvalue(qtt_coded_year)

            elif y == year+1:
                reactors[lang2keep.index(lang),1] = stairvalue(qtt_coded_year)

if (sum(reactors[:,0]) == 0) or (sum(reactors[:,1]) == 0):
    # no transition to consider
    P = zeros((len(lang2keep), len(lang2keep)))
    return P

else:
    # Normalization of reactors
    for i in [0, 1]:
        reactors[:,i] = [j/sum(reactors[:,i]) for j in reactors[:,i]]

# compute the Earth Mover's distance between the 2 reactors thanks to the emd_with_flow function
distance = np.ones((len(lang2keep), len(lang2keep)))
dist, P = emd_with_flow(reactors[:,0], reactors[:,1], distance)
P = np.asarray(P)

return P

使用Python计算转移矩阵的函数

最后,在对用户和过去16年(我们将考虑每年的转移)的流矩阵求和之后,我们得到了最终的转移矩阵。现在让我们将它与埃里克根据Google查询编译的情形分析表进行比较。下面的图是使用埃里克的脚本绘制的。
8440bdc6-7952-3561-ad23-3d38c8eaea5e.png

与埃里克的表相比,我们在转移矩阵的主对角线上有一些元素。稍后我们将看到如何利用这些元素。然而,尽管我们使用的数据集是不同的,但是我们还是注意到有很多的相似点,并且感知到相同的语言概要。与埃里克的表相比,我们在过渡矩阵的主对角线上有一些元素。稍后我们将看到如何利用它。然而,尽管我们使用的数据集是不同的,我们注意到许多相关的相似点。

GitHub的“语言排行榜”

既然我们有了流矩阵,我们就可以知道哪种语言是最受欢迎的,哪一种最不受欢迎。还可以在表示的图上计算中心度量,例如特征向量的中心。事实上,这些措施传达了语言的相对流行程度,在某种程度上也就是反应了人们使用一种语言编码然后会转换成另一种语言的可能性。我们将采用计算特征向量中心的方法。如果你需要进一步的解释,可以阅读Vadim在他的博客文章中关于GitHub的贡献图表的PageRank分析。
  • 我们的流矩阵包含严格的正元素,这是使其不可约的充分条件;总有一种方法可以从任何给定的语言中获得所有其他语言。因此,根据perron-fro定理,我们正在寻找最伟大的特征值及其对应的特征向量。
  • 我们可以使用幂次迭代算法来找到最主要的特征向量。然而,除了不可约外,矩阵还需要是随机的和非周期的。
  • 当移除主对角并使行规格化时,我们的流矩阵就变成了随机的。最大的特征值现在等于1。
  • 最后,为了使我们的矩阵不受周期和条件的限制,拉里和谢尔盖在1998年引入了一个著名的技巧。在斯坦福的CS246中有很好的解释,但是为了缩短它,它主要包括用以下公式更新我们的流动矩阵:
388c1f56-a215-3bba-986e-6ab888c8c163.png

where,
  • β被称为随机游走因子,被设为0.85
  • N是语言的数量
幂迭代

在这些步骤之后,我们的良好条件流矩阵包含了在语言之间切换的可能性,我们可以继续进行幂次迭代。该算法由以下矩阵乘法组成,直到收敛到主特征向量:
428de21d-a564-3f9d-993a-12a2a2594d9b.png

在下面的代码中,您将找到返回所需要的主导特征向量的代码。
def power_iteration(A, nb_iterations=100, beta=0.85):
u = np.random.rand(len(lang2keep))
u = np.reshape(u, (len(lang2keep), 1))
A = A * beta + ((1 - beta) / len(lang2keep)) * np.ones((len(lang2keep), len(lang2keep)))

for _ in range(nb_iterations):
    u_next = np.dot(A,u)
    u_next_norm = sum(u_next)
    u = u_next / u_next_norm

return u

power_iteration(transition_matrix)

幂迭代算法,Python。

GitHub上面最受欢迎的开发语言

终于!这是奖励:我们的马尔可夫链的平稳分布。这个概率分布是独立于初始分布的。它给出了语言之间随机切换过程的稳定性的信息。因此,无论目前的语言有多流行,假设的未来静止状态不变。以下是我们在GitHub上使用的22种语言的流行度排名:
e3a6a620-825f-3a83-b700-7523a2482f2c.png

33d6a591-8cdc-3c3e-a8ec-36a6adc57146.png

e178a67a-bad1-3f67-8f16-a6071737ba83.png

根据centrality measure 在GitHub上,语言的受欢迎程度


Python(16.1%)似乎是最吸引人的语言,紧随其后的是Java(15.3%)。这尤其有趣,因为GitHub上只有11.3%的源代码是用Python编写的。

在埃里克的排名中,Go是最大的赢家,16.4%。由于Erik基于Google查询的方法,似乎围绕Go的热门话题,让人们在博客中明确地表示,如果他们想要使用这种语言,那么就需要花一点时间来生成在GitHub上有效编写的项目。

此外,C(9.2%)的表现与埃里克的14.3%的评分是一致的,尽管这是由于在GitHub上用C编码的项目数量。

尽管在GitHub上的代码行数比Ruby多10倍,但它们的静态分布是相同的。

Go(3.2%)出现在第9位,这在很大程度上是值得尊敬的,因为在GitHub上托管的项目中有一小部分(0.9%)。例如,相同比例的项目是用Perl编写的,但是这种语言并没有真正激起激情(2%的流行)。

坚持使用一种语言

如果我们在应用幂次迭代之前保留了转换矩阵的主对角线,我们得到的结果会略有不同。它主要减少了高级语言的流行,同时也提高了小语种的知名度。事实上,似乎有理由相信,那些把时间花在掌握其他语言的开发人员身上的开发人员,往往会坚持他们的观点,而不像那些受欢迎的人。

在剩下的文章中,我们将考虑我们的第一个特征向量的表示。

回到转移矩阵

埃里克的转移矩阵是排序的,因此最流行的语言出现在底部。我们用同样的顺序来比较它们:
37e06bb0-83d0-3867-91ef-9abc64854715.png

这是我们的矩阵,独立排序:
61d02499-4e58-3e46-885b-365dc570c382.png

source{d}的有序转换矩阵,原始顺序

  • 在最流行的5种语言(Java、C、C++、PHP、Ruby)中编写代码的开发人员最有可能用approx切换到Python。平均22%的几率。
  • 此外,根据埃里克的矩阵,人们从Ojective-C转换到Swift和返回的可能性更大——24%和19%。
  • 类似地,一个Visual Basic开发人员有更多的机会(24%)转移到C#,而Erik在这个转换过程中几乎肯定会有92%的机会。
  • 最重要的是,Scala的用户更愿意使用Scala,分别是22、29和40%。
  • 使用数字和统计环境的人,如Fortran(36%),Matlab(33%)或R(40%)最可能转向Python,与Erik的矩阵相反,这是C语言的未来语言。
  • 我在埃里克的研究结果中发现了一个共同点,那就是Go吸引了那些放弃研究Rust的人。
过去的16年

正如我们前面提到的,在对转换矩阵进行求和之前,我们现在考虑特定的年份,并研究这些年矩阵是怎样的。他们是否表达相同的语言资料?自2000年初以来,它是如何演变的?以下是来自不同时间轴的4个矩阵的样本:
f59bdfcd-925c-3c2b-aa87-49e83f2b6070.png

36164bc5-cba9-377a-b81b-39caf26ef541.png

转变矩阵的时间演化

最后,随着时间的推移,这些矩阵的演化似乎是仿射的,我们每年都观察同一种语言。因此,为了突出这个语言概要文件的时间线,我们将幂迭代应用到每个矩阵。在过去的16年里,我们的平均分配是固定的,但是现在我们看它的时间顺序。在堆栈区域图中给出了一系列的主要特征向量的序列。
1f3ef58f-9e3e-30b4-ad79-0e003b005e84.png

在过去的16年里,语言的平稳分布

每个带的厚度对应于占主导特征向量的值。这些带按我们之前计算过的平均受欢迎程度排序。
  • 前两种语言,Python和Java具有相同的配置文件。他们已经取代C的位置已经15年了。事实上,前三层的聚合给出了一个直的。
  • 2008年,当Java或Ruby等语言开始快速增长时,C++的吸引力显著下降。然而,自这一时期以来,它一直保持着它的受欢迎程度。
  • 我绝对支持Erik的结论:Perl正在消亡。
  • 苹果在2014年的WWDC大会上展示了Swift,而该公司本应取代Obj-C。因此,在此事件之后,Obj-C的采用应该开始减少,但是这两种语言的总和应该保持不变。看看这个数字,这个假设是正确的。
  • 从2007年开始,Ruby似乎已经有了6年的荣耀。这也许可以用web框架Ruby on Rails(RoR)的发布来解释,当苹果宣布将在10月份发布Mac OS X v10.5“Leopard”时,它达到了一个里程碑。
  • 至于Go,它的受欢迎程度相对较低。然而,这一动态显然是积极的。
变化

在发表这篇文章后,我看见有的读者在语言冗长性方面有些偏见。任何事情都是公平的:全球量化方案可能会给像Java这样的冗长的语言带来优势,而比如像Haskell这样的浓缩的语言可能就没有。我分别对每种语言进行了量化,并重新运行了其余部分的分析。正如在下面的表格中所看到的,没有什么真正的变化;Ruby和C++交换了位置,但是它们的级别非常接近。最后看起来完全一样。
fe9c5026-22a1-3787-9445-16ae20564dca.png

c5fa325a-4f96-3d02-9325-384a98d9b3eb.png

b7d29c16-cfcd-33f2-a374-3eea29bdf97d.png

结论

把埃里克的情形分析表看作是语言分布问题的二阶导数,而我们的流转换就像一阶导数一样,这更合适。也就是说,首先你先要google查询,然后试着编写一个OSS项目,最后导致了语言的分布变化。

感谢 jihong10102006 投递这篇资讯

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

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


ITeye推荐



Favicon for 小众软件 - Appinn 09:39 The Clocks – 又一款漂亮的 iPad / iPhone 时钟 ⏰ » Post from 小众软件 - Appinn Visit off-site link

The Clocks 是一款功能强大,又十分漂亮的 iPad、iPhone 时钟,有传统指针式时钟,也有数字式时钟,并且可自定义显示效果、亮度、颜色等等,支持闹钟、世界时钟。@Appinn

与前天介绍的极简翻页时钟 iClock 不同,The Clocks 属于那种强大漂亮又简单的,而且还免费。也是 iClock 里的 @Damian 同学留言推荐:「有没人玩过 clocks 我用了好多年了 The Clocks: Alarm Clock, World Clock 作者是 Meanterm Inc.」

其实青小蛙倒是最喜欢 The Clocks 的应用图标,看起来好棒。

The Clocks 拥有传统时钟、数码时钟、翻页时钟,最多 5 个闹钟、最多 6 个地方的世界时间,还拥有手势操作、防老化保护、可调亮度等等。

快去把家里闲置的 iPad 拿出来,换掉古老的时钟吧 😂


相关阅读


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

apppackge:

Favicon for ITeye资讯频道 09:35 ES8都有哪些新特性,你还在用ES6吗? » Post from ITeye资讯频道 Visit off-site link
引用
原文:ES8 was Released and here are its Main New Features
作者: Dor Moshe
翻译:黑色巧克力

译者注:EcmaScript第8版已经发布,下面来看看它的一些新特性。
f2f3f559-58ad-3936-98f5-b66e8b235a7c.png

EcmaScript 8或EcmaScript 2017将于6月底由TC39正式发布。我们在去年似乎讨论了很多关于EcmaScript的事情,那不是毫无价值的。目前的标准是每年发布一个新的ES规范版本。ES6发布于2015年,ES7发布于2016年,但有人记得ES5发布的时间吗?那还是在2009年,在JavaScript的神奇崛起之前。

因此,EcmaScript作为一种稳定的语言跟随JavaScript的发展而变化,现在我们需要将ES8输入到词典中。

说明书网页PDF版本。在本文中,我们将通过代码示例介绍ES8的主要新特性。

字符串填充

本节向字符串对象添加两个函数:padStart和padEnd。
正如它们的名称一样,这些函数的目的是填充字符串的开始或结束,以便产生的字符串达到给定的长度。可以使用特定的字符或字符串来填充它,或者默认设置空格。下面是方法声明:
str.padStart(targetLength [, padString])
str.padEnd(targetLength [, padString])

这些函数的第一个参数是targetLength,这是结果字符串的总长度。第二个参数是用于填充源字符串的可选的padString。默认值是空格。
'es8'.padStart(2);          // 'es8'
'es8'.padStart(5);          // '  es8'
'es8'.padStart(6, 'woof');  // 'wooes8'
'es8'.padStart(14, 'wow');  // 'wowwowwowwoes8'
'es8'.padStart(7, '0');     // '0000es8'
'es8'.padEnd(2);          // 'es8'
'es8'.padEnd(5);          // 'es8  '
'es8'.padEnd(6, 'woof');  // 'es8woo'
'es8'.padEnd(14, 'wow');  // 'es8wowwowwowwo'
'es8'.padEnd(7, '6');     // 'es86666'

e9bd9d74-9d08-358f-959d-e0e7e0ba79dd.png

Object.values 和 Object.entries

Object.values方法返回给定对象自己的可枚举属性值的数组,与for in循环所提供的顺序相同。这个函数的声明是非常简单的。
Object.values(obj)


obj参数是操作的源对象。它可以是一个对象或数组(一个具有索引的对象,如[10、20、30]- > { 0:10,1:20,2:30 })。
const obj = { x: 'xxx', y: 1 };
Object.values(obj); // ['xxx', 1]

const obj = ['e', 's', '8']; // same as { 0: 'e', 1: 's', 2: '8' };
Object.values(obj); // ['e', 's', '8']

// when we use numeric keys, the values returned in a numerical 
// order according to the keys
const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
Object.values(obj); // ['yyy', 'zzz', 'xxx']
Object.values('es8'); // ['e', 's', '8']

7f3cac1c-39fc-3f29-a254-9224de1f5953.png

Object.entries方法返回一个给定对象的可枚举属性[key, value]键值对的数组,与object.values的顺序相同。这个函数的声明也很简单。
const obj = { x: 'xxx’, y: 1 };
Object.entries(obj); // [[’x’, 'xxx’], [’y’, 1]]

const obj = [’e’, 's’, '8’];
Object.entries(obj); // [[’0’, 'e’], [’1’, 's’], [’2’, '8’]]

const obj = { 10: 'xxx’, 1: 'yyy’, 3: 'zzz' };
Object.entries(obj); // [[’1’, 'yyy’], [’3’, 'zzz’], [’10’, 'xxx’]]
Object.entries('es8'); // [['0', 'e'], ['1', 's'], ['2', '8']]

6de686d7-d837-37d8-ac0e-e156c15a7175.png

Object.getOwnPropertyDescriptors

getOwnPropertyDescriptors方法返回所有的属性描述符指定的对象。一个对象的属性描述符是直接在对象上定义的,并不是从对象的原型继承的。该函数的声明如下。
Object.getOwnPropertyDescriptors(obj)

obj是源对象。返回的描述符对象的可能键是可配置的、可枚举的、可写的、可获取和设置值。
const obj = { 
  get es7() { return 777; },
  get es8() { return 888; }
};
Object.getOwnPropertyDescriptors(obj);
// {
//   es7: {
//     configurable: true,
//     enumerable: true,
//     get: function es7(){}, //the getter function
//     set: undefined
//   },
//   es8: {
//     configurable: true,
//     enumerable: true,
//     get: function es8(){}, //the getter function
//     set: undefined
//   }
// }

描述符数据对于像装饰器这样的高级特性非常重要。
fde9f2e6-ab58-390e-8523-d466dd99fd80.png

在函数参数列表和调用中允许尾部逗号

在函数参数中允许尾部逗号是编译器在列表末尾添加不必要的逗号时不抛出错误(语法错误)的能力:
function es8(var1, var2, var3,) {
  // ...
}

作为函数声明,可以应用于函数的调用如下。
es8(10, 20, 30,);

这个特性起源于对象常量和数组常量(10、20、30、)和{ x:1、}的逗号结尾。

异步函数

async function声明定义了一个异步函数,它返回一个AsyncFunction对象。在内部,异步函数与生成器很相似,但是它们没有被转换为生成器函数。
function fetchTextByPromise() {
  return new Promise(resolve => { 
    setTimeout(() => { 
      resolve("es8");
    }, 2000);
  });
}
async function sayHello() { 
  const externalFetchedText = await fetchTextByPromise();
  console.log(`Hello, ${externalFetchedText}`); // Hello, es8
}
sayHello();

调用sayHello方法,2秒后将会打印Hello,es8。
console.log(1);
sayHello();
console.log(2);

现在输出是这样的:
1 // immediately
2 // immediately
Hello, es8 // after 2 seconds

这是因为函数调用不会阻塞流。

注意,async function总是返回一个应答,而一个wait关键字只能在用async关键字标记的函数中使用。
64a8a0d9-2930-3ea4-b289-c416a22015a2.png

共享内存和原子

在共享内存时,多个线程可以在内存中读取和写入相同的数据。原子操作确保编写和读取可预测的值,原子操作时有序的并且不会被中断。本节介绍了一个新的构造函数SharedArrayBuffer和使用静态方法的命名空间对象Atomics。

Atomic对象是静态方法(如Math)的对象,因此不能将其用作构造函数。该对象中的静态方法示例如下:
  • add / sub —— 在一个特定的位置添加或减去一个值
  • and / or / xor —— 按位与、按位或、按位异或
  • load —— 在特定位置获取值
c32fa2f3-a2bb-366a-81a4-558ca58b614c.png

明年的ES9 -取消模板字符串限制

使用带标记的模板字符串(ES6),我们可以做一些事情,例如声明一个模板解析函数,并根据逻辑返回一个值:
const esth = 8;
helper`ES ${esth} is `;
function helper(strs, ...keys) {
  const str1 = strs[0]; // ES
  const str2 = strs[1]; // is
  let additionalPart = '';
  if (keys[0] == 8) { // 8
    additionalPart = 'awesome';
  }
  else {
    additionalPart = 'good';
  }

  return `${str1} ${keys[0]} ${str2} ${additionalPart}.`;
}

返回值是“ES 8 is awesome”。
对于esth 7返回值是“ES 7 is good”。

对于包含例如\u或\x的子字符串的模板有一个限制,ES9将处理这个限制问题。可以在MDN网站TC39文件中阅读更多信息。
eb970e17-d0a1-33c6-bcc3-e7dc009ae9c8.png

总结

JavaScript总是在不断更新。对规范采用新特性的过程是有计划地和平稳推进的。在最后阶段,TC39委员会确认了这些特性,并由核心开发人员实现。它们中的大多数已经是类型脚本语言、浏览器或其他的填充物的一部分,所以可以现在就去尝试使用它们。

感谢 jihong10102006 投递这篇资讯

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

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


ITeye推荐



News stories from Tuesday 18 July, 2017

Favicon for 小众软件 - Appinn 18:22 墙壁涂鸦和尺子,以后的 ARKit 可以这样玩 » Post from 小众软件 - Appinn Visit off-site link

iOS 11 引入了新的 ARKit 框架,让您轻松创建无可比拟的 iPhone 和 iPad 增强现实体验。而在 iOS 11 正式发布之前,已经有不少应用通过 ARKit 实现了功能。青小蛙最近看到两个挺有意思的视频。

想想 AR 也有好几年了,还是要靠苹果啊…

来看视频:

来源如下:

苹果官方 ARKit 介绍: https://developer.apple.com/cn/arkit/


相关阅读


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

apppackge:

Favicon for ITeye资讯频道 15:38 为渗透测试准备的 10 大黑客工具 » Post from ITeye资讯频道 Visit off-site link
工匠需要相应的技能和工具才能工作,并创造出杰作。 虽然工具是工作的过程中的重要推动因素,但也需要工匠具有相关的经验和专业知识。

渗透测试人员的工具箱非常像工匠的工具箱,可根据业务目标使用各种各样的工具。

在这里,我们将分析一些可用于渗透测试的最佳免费工具。要注意,这些工具之间没有直接的比较。 这些工具的使用取决于渗透测试者的评估类型。 这些工具不是相互竞争关系,而是可以互相补充,并帮助渗透测试人员进行全面的安全评估。

自动安全工具正在改变游戏规则

自动化工具已经完全改变了渗透测试的风格,提高了效率和测试周期。不断的探索和开发,使得工具变得更加可靠和友好。 这些工具不能解决潜在的安全漏洞。 相反,它们有效地发现常见的安全漏洞,并提供修复这些漏洞的建议。 在您开始在线查找这些免费黑客工具之前,您必须评估其使用背景。 这将影响您的工具选择过程。

这里有10种免费在线的工具,我们强烈推荐:

1. Fiddler
类别: 代理服务应用

Fiddler 是一个免费的 Web 代理工具,具有浏览器和平台不可知性的特点。它有许多功能用来辅助渗透测试人员。它是一个跨平台工具(几乎所有操作系统),允许用户调试来自任何系统的网络流,甚至包括智能手机和平板。从渗透测试者的角度看,Fiddler 主要用来拦截和解密 HTTPS 流,就像它的名字建议的那样,用户能方便地修改和检查数据包来识别应用漏洞。

2. Nmap
类别: 端口扫描工具

Nmap 是"网络映射器"的缩写, 它是一个免费、开源的网络扫描工具, 使用 IP 包来识别网络。Nmap 提供大量的选项用于扫描单个或一个范围段的 IP 、端口或主机。它也可以被用来扫描子网, 识别主机上运行的服务, 检测远程操作系统版本, 发现安全漏洞等, 是一个功能非常强大的工具。它的输出信息常被用来做为渗透测试前的分析。

3. Wireshark
类别: Web 漏洞扫描工具

Wireshark 是一个企业级标准网络协议分析工具。它不停地捕获网络数据包并以人类可读的形式展示给终端用户。Wireshark 允许用户通过网卡、WiFi、NpCap卡、蓝牙、令牌环等各种网络接口来捕获数据。它甚至允许用户通过一个 USBPCAP 工具捕获 USB 网络接口的数据。Wireshark 还有一个控制台版本, 叫  'tshark'。

4. Metasploit
类别: 漏洞挖掘框架

Metasploit 框架提供了一系列工具用来进行渗透测试。它是一个多用途 hack 框架,广泛地被渗透测试人员用来挖掘各种平台的漏洞、收集漏洞信息、测试补丁等。Metasploit 框架是一个开源项目,有 200,000 多个贡献者,使它成为一个强健的集渗透测试、执行策略、测试补丁、进行研究等于一身的框架,并持续不断地更新漏洞数据库。

5. Nikto
类别:web 漏洞扫描程序

Nikto 是 pen 测试社区中非常有名的另一个工具。它是依据 GPL 协议提供的开源工具。 Nikto 在其界面中提供多个选项以对主机进行设置。它扫描主机以发现潜在的漏洞,例如服务器配置错误、host 文件和程序安全隐患、可能存在风险的过时程序以及可能会对服务器造成风险的特定版本的问题。 Nikto 可在 OS X 上使用,由 MacNikto 提供。

6. John the Ripper
类别: 密码破解

John the Ripper(通常被称为“John”或 JTR )是一个非常受欢迎的密码破解工具。 JTR 主要用于执行字典攻击以识别网络中的弱密码漏洞。JTR 是一个离线密码破解程序,可以在本地或远程调用。它还支持强力和彩虹密钥攻击。

7. Burp Suite
类别: 网络扫描

Burp Suite 的一个主要用处是拦截浏览器和目标应用之间的所有请求和响应信息, 免费版本可以用来生成对特定请求的概念验证 CSRF (跨站伪造请求)攻击。同时也有应用感知爬虫可以被用来绘制应用层内容(大致是一些应用功能、类型、特征等信息)。付费版本可以解锁更多功能。

8. OpenVAS
类别: 漏洞扫描

OpenVAS 是一款漏洞扫描程序,该工具是 2005 年最后一次免费版本的 Nessus 发行的分支。目前 Nessus 的免费版本仅在非企业环境中运行。为了达到安全审核的目标,Nessus 仍然是一个受欢迎的漏洞扫描程序,但企业版扫描现在需要一年约 2,000 美元的许可证费用。使用 OpenVAS ,用户可以执行许多漏洞扫描,并创建可导出的报告,用于突出显示用于创建安全策略的全面扫描结果。

9. Aircrack-ng
类别: 密码破解

Aircrack-ng 是一个针对 802.11a/b/g 无线网络(其实就是 WiFi 了)的密码破解套件, 支持基本的监控模式(rfmon)。它工作在监控模式时不断地捕获网络数据, 一旦足够的数据被捕获, 便开始运行破解算法计算 WEP 和 WPA 秘钥。Aircrack-ng 其实是一个工具包, 里面包含各种各样的无线网络破解工具, 像 Airodump-ng(就是用它来捕获网络数据的), Airsnort-ng(用来做秘钥破解), Airplay-ng (用来生成假数据包, 做欺骗用的), Airdecap-ng (做解密用的)。

10. Kismet
类别: 网络包嗅探工具

随着无线 LAN 入侵的增长, Kismet 已经变成了一个用来检测 WLAN 网络入侵和嗅探的非常重要的工具, 它支持 802.11 a/b/g 等各种 WLAN 网络制式, 并支持基本的监控模式 (rfmon) 。Kismet 是一个相当轻量级的工具, 它工作在被动模式, 监听无线网络的接入点(AP)和客户端 SSID 。这些 SSID 和 AP 可以被互相映射以找出任何隐藏的网络或非信标网络。Kismet 也可以将数据以 Wireshark 兼容的格式保存下来用来作进一步分析。

总结

这些工具简化了手动复查的工作。它们也使系统相对更快和更加准确。执行有力的渗透测试评估并不意味着简单地从列表中选择一个工具。相反,它意味着评估组织结果。并评估信息、要求和所涉及的利益相关者。这个过程将有助于构建一个理想的策略,包括使用工具来有效和高效地识别和解决安全漏洞。

要了解上下文和业务目标,这些工具必须配合人类的专业知识。与工具不同,它是一个戴白帽子并使用这些工具来完成工作的人。

英文原文:Top 10 Free Hacking Tools for Penetration Testers

感谢 jihong10102006 投递这篇资讯

资讯来源:oschina

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


ITeye推荐



Favicon for ITeye资讯频道 11:11 Spring思维导图,让Spring不再难懂(mvc篇) » Post from ITeye资讯频道 Visit off-site link
写在前面

生活就像海洋,只有意志坚强的人才能到达彼岸。已经很久没有发文章了呀,想必大家都挂念我了,哈哈。温故而知新,今天一起来复习一下spring mvc的内容吧。

spring mvc简介与运行原理

Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。
6755736f-897c-35b5-9774-93150e8899eb.png

  • (1) Http请求:客户端请求提交到DispatcherServlet。
  • (2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。
  • (3) 调用处理器:DispatcherServlet将请求提交到Controller。
  • (4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。
  • (6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
  • (8) Http响应:视图负责将结果显示到客户端。
主要注解
a127ef87-1fd4-31eb-b850-5e9238e0889e.png

ContextLoaderListener

在讲ContextLoaderListener之前,首先来了解一下web.xml的作用。
  • 一个web中可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的。web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的Application。
  • 当要启动某个web项目时,服务器软件或容器如(tomcat)会第一步加载项目中的web.xml文件,通过其中的各种配置来启动项目,只有其中配置的各项均无误时,项目才能正确启动。web.xml有多项标签,在其加载的过程中顺序依次为:context-param >> listener >> fileter >> servlet。(同类多个节点以出现顺序依次加载)
e525c7db-ac35-3bf4-b231-9961d5920dee.png

而spring mvc启动过程大致分为两个过程:
  • ContextLoaderListener初始化,实例化IoC容器,并将此容器实例注册到ServletContext中。
  • DispatcherServlet初始化。
f5d32c5c-3439-350c-8e06-6c0fe760ab9e.png

其中ContextLoaderListener监听器它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。

ContextLoaderListener在web.xml中的配置
<!-- 配置contextConfigLocation初始化参数 -->

<context-param>
    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/applicationContext.xml</param-value>

</context-param>

<!-- 配置ContextLoaderListerner -->

<listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

ServletContextListener 接口有两个方法:contextInitialized,contextDestroyed

DispatcherServlet

Spring MVC框架,与其他很多web的MVC框架一样:请求驱动;所有设计都围绕着一个中央Servlet来展开,它负责把所有请求分发到控制器;同时提供其他web应用开发所需要的功能。不过Spring的中央处理器,DispatcherServlet,能做的比这更多。

下图展示了Spring Web MVC的DispatcherServlet处理请求的工作流。熟悉设计模式的朋友会发现,DispatcherServlet应用的其实就是一个“前端控制器”的设计模式(其他很多优秀的web框架也都使用了这个设计模式)。

流程图
ca2fdca3-4793-3186-b429-c0debc0311f2.png

spring mvc处理请求的流程.jpg

在web.xml中的配置
<!-- servlet定义 -->

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>

    <url-pattern>/</url-pattern>

</servlet-mapping>

其中
  • load-on-startup:表示启动容器时初始化该Servlet;
  • url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。
在Spring MVC中,每个DispatcherServlet都持有一个自己的上下文对象WebApplicationContext,它又继承了根(root)WebApplicationContext对象中已经定义的所有bean。这些继承的bean可以在具体的Servlet实例中被重载,在每个Servlet实例中你也可以定义其scope下的新bean。

WebApplicationContext继承自ApplicationContext,它提供了一些web应用经常需要用到的特性。它与普通的ApplicationContext不同的地方在于,它支持主题的解析,并且知道它关联到的是哪个servlet(它持有一个该ServletContext的引用)
20a02233-2cfa-3b01-a598-cde903f8efd4.png

spring mvc同时提供了很多特殊的注解,用于处理请求和渲染视图等。DispatcherServlet初始化的过程中会默认使用这些特殊bean进行配置。如果你想指定使用哪个特定的bean,你可以在web应用上下文WebApplicationContext中简单地配置它们。
90befd5d-2ac9-383f-89e7-43048be78e4f.png

其中,常用的ViewResolver的配置。以jsp作为视图为例
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/" />

    <property name="suffix" value=".jsp" />

</bean>

配置上传文件限制MultipartResolver
<!-- 上传限制 -->

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
     <!-- 上传文件大小限制为31M,31*1024*1024 -->

     <property name="maxUploadSize" value="32505856"/>

</bean>

applicationContext.xml中的标签
4793ce28-6cba-3cd4-928f-4e278f6ddde2.png

文件上传

前面说到DispatcherServlet中有个特殊的Bean叫MultipartResolver,可用于限制文件的上传大小等。当解析器MultipartResolver完成处理时,请求便会像其他请求一样被正常流程处理。

表单
<form method="post" action="/form" enctype="multipart/form-data">
     <input type="text" name="name"/>
     <input type="file" name="file"/>
     <input type="submit"/>
</form>

控制器
@RequestMapping(path = "/form", method = RequestMethod.POST) public String handleFormUpload(@RequestParam("name") String name, 

            @RequestParam("file") MultipartFile file) {

   if (!file.isEmpty()) {

          byte[] bytes = file.getBytes();

          // store the bytes somewhere
          return "redirect:uploadSuccess";

    }

    return "redirect:uploadFailure";
}

异常处理

先来说下常见的异常处理有几种方式,如下图:
8a4f54e0-d53b-32ff-a4a3-fe6c67291b43.png

Spring的处理器异常解析器HandlerExceptionResolver接口的实现负责处理各类控制器执行过程中出现的异常。也是上面提到的,是DispatcherServlet中的特殊bean,可以自定义配置处理。

某种程度上讲,HandlerExceptionResolver与你在web应用描述符web.xml文件中能定义的异常映射(exception mapping)很相像,不过它比后者提供了更灵活的方式。比如它能提供异常被抛出时正在执行的是哪个处理器这样的信息。

HandlerExceptionResolver 提供resolveException接口
public interface HandlerExceptionResolver {  
    ModelAndView resolveException(  
            HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex);  
}

在BaseController中使用 @ExceptionHandler注解处理异常
    @ExceptionHandler(Exception.class)
    public Object exceptionHandler(Exception ex, HttpServletResponse response, 
              HttpServletRequest request) throws IOException {
        String url = "";
        String msg = ex.getMessage();
        Object resultModel = null;
        try {
            if (ex.getClass() == HttpRequestMethodNotSupportedException.class) {
                url = "admin/common/500";
                System.out.println("--------毛有找到对应方法---------");
            } else if (ex.getClass() == ParameterException.class) {//自定义的异常

            } else if (ex.getClass() == UnauthorizedException.class) {
                url = "admin/common/unauth";
                System.out.println("--------毛有权限---------");
            }

            String header = req.getHeader("X-Requested-With");
            boolean isAjax = "XMLHttpRequest".equalsIgnoreCase(header);
            String method = req.getMethod();
            boolean isPost = "POST".equalsIgnoreCase(method);

            if (isAjax || isPost) {
                return Message.error(msg);
            } else {
                ModelAndView view = new ModelAndView(url);
                view.addObject("error", msg);
                view.addObject("class", ex.getClass());
                view.addObject("method", request.getRequestURI());
                return view;
            }
        } catch (Exception exception) {
            logger.error(exception.getMessage(), exception);
            return resultModel;
        } finally {
            logger.error(msg, ex);
            ex.printStackTrace();
        }
    }

在web.xml中处理异常
<!-- 默认的错误处理页面 -->

<error-page>
    <error-code>403</error-code>

    <location>/403.html</location>

</error-page>

<error-page>
    <error-code>404</error-code>

    <location>/404.html</location>

</error-page>

<!-- 仅仅在调试的时候注视掉,在正式部署的时候不能注释 --><!-- 这样配置也是可以的,表示发生500错误的时候,转到500.jsp页面处理。 -->

<error-page> 
    <error-code>500</error-code> 

    <location>/500.html</location> 

</error-page> 

<!-- 这样的配置表示如果jsp页面或者servlet发生java.lang.Exception类型(当然包含子类)的异常就会转到500.jsp页面处理。 -->

<error-page> 
    <exception-type>java.lang.Exception</exception-type> 

    <location>/500.jsp</location> 

</error-page> 

<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 

    <location>/500.jsp</location> 

</error-page>

<!-- 当error-code和exception-type都配置时,exception-type配置的页面优先级高及出现500错误,发生异常Exception时会跳转到500.jsp-->

来一个问题:HandlerExceptionResolver和web.xml中配置的error-page会有冲突吗?

解答:如果resolveException返回了ModelAndView,会优先根据返回值中的页面来显示。不过,resolveException可以返回null,此时则展示web.xml中的error-page的500状态码配置的页面。
当web.xml中有相应的error-page配置,则可以在实现resolveException方法时返回null。
API文档中对返回值的解释:
return a corresponding ModelAndView to forward to, or null for default processing.

写在最后

下篇文章将会写Spring aop的内容,同样以思维导图的方式编写。可视化学习,让java不再难懂。

感谢 jihong10102006 投递这篇资讯

资讯来源:java思维导图

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


ITeye推荐



Favicon for 异次元软件世界 01:14 [来自异次元] 妖妖短信辅助器 - 将手机短信自动转发到邮箱的免费安卓小工具 » Post from 异次元软件世界 Visit off-site link

yaoyao_banner.jpg

现在越来越多人都会专门开一张电话卡用于注册各种网络服务或用于网购,跟自己的主号分开来,从而避免各种骚扰、垃圾短信或隐私泄露。

这对安卓用户来说没什么,因为大多数手机都支持双卡双待的。但如果你用 iPhone,或有超过两张以上电话卡,那么就面临着每天要多带一台备用机的烦恼了。不过,如果你的备用电话卡基本只用来收短信验证码,或偶尔接个快递电话而已,那么今天的免费小工具「妖妖短信辅助器」就能帮你……

[ 马上前往围观.... ]


异次元还有这些值得一看:

异次元正版数字商城  |  异次元首页  |  iPc.me  |  新浪微博  |  软件精选

News stories from Monday 17 July, 2017

Favicon for ITeye资讯频道 14:46 2017 开发者生态报告:Java 最火,Go 最有前途 » Post from ITeye资讯频道 Visit off-site link
JetBrains 在 2016 年底至 2017 年初期间,对 5000 多名开发人员进行了调查,以研究最新的开发生态。

最近,调查结果已公布:Java 被评为最流行的语言,JavaScript 是最常用的语言,而 Go 被认为是最有前途的语言。
ba601498-c94e-320b-88e8-2ff7cb7f0236.png

一、编程语言

可以看到,JavaScript 是使用最多的语言,Python 是最多人想去尝试的语言,Java 则在流行度上独领风骚。注意,下图数值皆为百分比(%)。
绿色:频繁使用
橙色:即将采纳/迁移

a573e33e-45fb-3b34-9d89-cd6ded1c5b02.png

81334665-f557-3443-86bb-7d51ed37eed2.png

二、工具

IDE 是开发者日常工作中最常使用的工具,占比远超其他选项,有超过 70% 的 Java 和 C#开发人员整天都在使用 IDE ,C 和 C ++ 分别为 40% 和 50% 。另外,随着开源的流行,开发人员使用源码协作工具的频率已超过代码编辑器。
f7b8d3f1-8bd2-39b8-81ad-b76959b25f8c.png

三、开发环境&操作系统

Windows 占比最高,macOS 也有接近一半的占比,还有 21% 的同时使用 Unix / Linux 和 Windows 。
5144f054-5572-3863-bbe3-54e6ecd1afe4.png

四、应用类型

有 50% 的正在做全栈开发(包括后端和前端)
80626d22-7b70-37a7-ad30-42ed40d3a5f3.png

五、一些有趣的

1、电子游戏

65% 的受访者表示会在业余时间玩游戏。有趣的是,玩游戏的 C# 开发者占比达 73% 。

而在游戏类型方面,全职开发人员更喜欢玩模拟和策略类游戏,兼职开发者和自由职业者偏爱动作(冒险)和角色扮演类游戏,学生则独爱动作冒险类。
b130a8d9-2dcd-35c5-9a2d-b4f9c7cb4954.png

2、睡眠时间

游戏玩家的睡眠时间少于非玩家。这很正常,不过结果还发现那些做代码审查的睡眠时间也相对较少,难道代码审查和游戏一样有趣吗?icon_smile.gif

Swift 开发人员都睡得很好,有 72% 的人每天睡眠时间超过 7 小时。
a34a3275-724f-3adc-b044-8d0f027107e8.png

3、每周编码时间&周末编码

调查发现只有 11% 的开发人员没有私人或业余项目。另有 84% 的开发人员表示会在周末编写代码。

蓝色:日常工作(主要活动)
紫色:私人(业余)项目

2d62142e-92d1-393f-b6e6-73d8ca20b26a.png

JetBrains 还针对部分语言和工具做了专门的分析页面,如:JavaPythonRubyScalaSwiftPHP团队工具 等等。完整调查报告可查阅此处

感谢 jihong10102006 投递这篇资讯

资讯来源:oschina

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


ITeye推荐



Favicon for ITeye资讯频道 09:53 高性能 TCP & HTTP 通信框架 HP-Socket v4.3.1 » Post from ITeye资讯频道 Visit off-site link

HP-Socket

  HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。

  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、PACK 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。

  《HP-Socket v4.2 开发指南》

----------------------------------------------------------------

通用性

  • HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。
  • HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。

易用性

  • 易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。
  • HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。
  • HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。

高性能

  • Client 组件:基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。
  • Server 组件:基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。
  • Agent 组件:对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。

伸缩性

  应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。

   (项目主页:点击这里,下载地址:点击这里)


*** v4.3.1更新 ***

 > HTTP

-----------------

  1. IHttpClient 和 IHttpAgent 组件兼容没有长度标识(如:Content-Length Header)的 HTTP 响应报文
  2. IHttpClient 和 IHttpAgent 组件改进 HEAD 请求的响应处理方式,应用程序无需在 OnHeadersComplete 事件中返回特殊值 HPR_SKIP_BODY

 > 其它更新:

-----------------

  1. 公共代码包 vc-common-src 版本升级到 v2.3.19
  2. OpenSSL 版本升级到 1.1.0f
  3. 优化 IServer/IAgent 组件,提升性能和稳定性

*** v4.2.1更新 ***

 > HTTP Cookie 管理支持

-----------------

  1. 新增 Cookie 管理器,可在不同连接、不同组件对象间共享 Cookie
  2. Cookie 管理器实现了标准 HTTP Cookie 功能,支持 Max-Age、expires、httpOnly、secure
  3. Cookie 管理器支持 Cookie 序列化与反序列化
  4. IHttpClient 和 IHttpAgent 组件可通过 SetUseCookie() 方法设置是否开启 Cookie 功能Cookie  管理器

 > HTTP Sync Client 通信组件更新

-----------------

  1. Create_HP_HttpSyncClient 和 Create_HP_HttpsSyncClient 方法增加可选参数 pListener
  2. 如果 pListener 非空则可以通过 pListener 监听 HttpSyncClient 的所有通信事件

 > 其它更新:

-----------------

  1. Demo 更新:HttpProxy,TestEcho-Http,TestEcho-Http-4C
  2. 公共代码包 vc-common-src 版本升级到 v2.3.18
  3. OpenSSL 版本升级到 1.1.0e

*** v4.1.3更新 ***

 > WebSocket 支持:

-----------------

  1. 所有 HTTP 组件增加 WebSocket 方法
    1) SendWSMessage(): 发送 WebSocket 数据包
    2) GetWSMessageState(): 获取当前 WebSocket 状态
  2. 所有 HTTP 组件监听器增加 WebSocket 事件
    1) OnWSMessageHeader(): WebSocket 数据包头通知
    2) OnWSMessageBody(): WebSocket 数据包体通知
    3) OnWSMessageComplete(): WebSocket 数据包完成通知
  3. 示例 Demo TestEcho-Http 和 TestEcho-Http-4C 支持 WebSocket

 > 增加 HTTP Sync Client 通信组件:

-----------------

  1. HTTP Sync Client 实现同步 HTTP 通信,不需要事件监听器
  2. HTTP Sync Client 组件类: CHttpSyncClient、CHttpsSyncClient
  3. HTTP Sync Client 实现接口: ITcpClient / IHttpSyncRequester
  4. 示例 Demo TestEcho-Http 和 TestEcho-Http-4C 提供 HTTP Sync Client 示例



感谢 guaishou 投递这篇资讯

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

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


ITeye推荐



Favicon for ITeye资讯频道 09:47 以Java、Kotlin和Scala编写基本Spring Web应用的比较 » Post from ITeye资讯频道 Visit off-site link
引用

译者注:现在可以用来开发web应用的语言五花八门,每种语言都各有千秋,本文作者挑选了Java、Kotlin 、Scala这三种语言,开发同一个基础的Spring web应用,从而比对出他们之间的差别。以下为译文。

我一直在想,在JVM语言中选择一个(如Scala和Kotlin )用来实现同一个基础的Spring Boot应用程序是多么的困难,所以我决定试试。

源代码可以这个地址看到:https://github.com/rskupnik/pet-clinic-jvm

这款应用程序是非常基础的,因为它只包含以下元素:
  • 两个数据库实体
  • 两个Repository注解
  • 两个controller控制器
  • 六个endpoint
  • 一个虚拟的静态的index页面
我将用三种语言来做代码比较:
  • Java
  • Kotlin
  • Scala
实体

这个应用里面涉及到了两个实体:Customer 和 Pet

Java
@Entity
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String firstName, lastName;

    @JsonIgnore
    @OneToMany(mappedBy = "owner")
    private List<Pet> pets;

    protected Customer() {

    }

    public Customer(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // A whole lot of getters and setters here...
    // Ommited for the sake of brevity

    @Override
    public String toString() {
        return firstName+" "+lastName;
    }
}

@Entity
public class Pet {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    @ManyToOne
    @JoinColumn(name = "ownerId", nullable = false)
    private Customer owner;

    protected Pet() {

    }

    public Pet(String name) {
        this.name = name;
    }

    // A whole lot of getters and setters here...
    // Ommited for the sake of brevity

    @Override
    public String toString() {
        return name;
    }
}

这里无需多言——因为很显然Java是很冗长的,即使去掉getter和setter方法之后,还是会有很多的代码。除了使用Lombok可以帮助用户生成模板文件以外,或者类似的工具,我们也没有什么更好的办法。

Kotlin

在Kotlin语言中有好几种方法可以定义一个实体类,我已经试过两种了。尽管作用都是一样的,但是后者可能更受用户欢迎,因为前者只是简单地在做一些Java里面也能做的事情。
// Implementation using a regular class, mimicking regular Java

@Entity
class Pet {

    constructor() {

    }

    constructor(name: String) {
        this.name = name
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    var id: Long = 0

    var name: String = ""

    @ManyToOne
    @JoinColumn(name = "ownerId", nullable = false)
    var owner: Customer? = null

    override fun toString(): String = "$name"
}

// Implementation using a data class (preferred)

@Entity
data class Customer(
        @Id @GeneratedValue(strategy = GenerationType.AUTO) 
        var id: Long = 0,

        var firstName: String = "",
        var lastName: String = "",

        @JsonIgnore @OneToMany(mappedBy = "owner") 
        var pets: List<Pet>? = null
) {
    override fun toString(): String = "$firstName $lastName"
}

尽管第一眼看上去,它不像Java代码那样比较直观,但是用数据类实现的话,代码量就要短得多,而且也不需要大量的模板文件。这里的大部分冗余代码都是因为需要做必要的注释。

注意,实体类需要一个默认的没有参数的构造函数——它在常规类的情况下显式提供,而数据类通过为单个构造函数中的每个参数定义 默认值 来提供的 - 包括一个默认值,而没有参数 ,它只是将默认值分配给每个变量。

由于需要将override关键字显示的定义出来,这样做代码更容易阅读,出现错误的概率也会降低,所以我挺喜欢这种做法的。

Scala
@Entity
class Customer {

  // Need to specify a parameterized constructor explicitly
  def this(firstName: String, lastName: String) {
    this()
    this.firstName = firstName
    this.lastName = lastName
  }

  // BeanProperty needed to generate getters and setters

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @BeanProperty
  var id: Long = _

  @BeanProperty
  var firstName: String = _

  @BeanProperty
  var lastName: String = _

  @JsonIgnore
  @OneToMany(mappedBy = "owner")
  @BeanProperty
  var pets: java.util.List[Pet] = _

  override def toString(): String = s"$firstName $lastName"
}

@Entity
class Pet {

  def this(name: String, owner: Customer) {
    this()
    this.name = name
    this.owner = owner
  }

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @BeanProperty
  var id: Long = _

  @BeanProperty
  var name: String = _

  @ManyToOne
  @JoinColumn(name = "ownerId", nullable = false)
  @BeanProperty
  var owner: Customer = _
}

实际上仅针对这种情况,我对Scala感到失望——它的实现几乎和Java一样冗长,它们的区别就在于Scala不需要显示的定义好getter和setter方法,它只需要使用额外的字段注释(@beanproperty)就可以了。

我试图使用一个case class来减少代码实现的行数,这在理论上是可以行的通的,但是我不能让它运行起来(也许这根本原因就是因为我使用Scala不熟)。

至少它提供了字符串插值(String interpolation),允许在一行中使用大括号,并且需要显式的
override关键字,这与Kotlin是一致的。

Repositories

Java

@Repository
public interface CustomerRepository extends CrudRepository<Customer, Long> {
    List<Customer> findByLastName(String lastName);
}

@Repository
public interface PetRepository extends CrudRepository<Pet, Long> {

}

注意,findByLastName函数实际上并没有在其它地方进行调用,我定义它只是用来提供一个示例的。

Kotlin
@Repository
interface CustomerRepository : CrudRepository<Customer, Long> {
    fun findByLastName(name: String): List<Customer>
}

`@Repository
interface PetRepository : CrudRepository<Pet, Long>`

这里没有太大的区别,代码基本上是一样的。Kotlin版本的代码稍微短一点,这是因为Kotlin的默认修饰符是public的,而且有一个:符号而不是extends关键字。此外,也有可能是如果没有在body中定义任何内容的话,就有可能可能会忽略花括号。

Scala
@Repository
trait CustomerRepository extends CrudRepository[Customer, java.lang.Long] {
  def findByLastName(lastName: String): List[Customer]
}

@Repository
trait PetRepository extends CrudRepository[Pet, java.lang.Long]


Scala使用的是traits,而不是interfaces,但在大部分情况下它们都是相同的概念,或者至少针对我们这个简单的例子而言它们是一样的。

由于某些原因,需要将Long类明确定义为java.lang.Long以避免编译错误(我再次对Scala感到失望)。

Controllers控制器

Java
@RestController
@RequestMapping("/customers")
public class CustomerController {

    private CustomerRepository customerRepository;

    @Autowired
    public CustomerController(CustomerRepository customerRepository) {
        this.customerRepository = customerRepository;
    }

    @GetMapping(value = "/{id}", produces = "application/json")
    public Customer getCustomer(@PathVariable("id") Long id) {
        return customerRepository.findOne(id);
    }

    @GetMapping(produces = "application/json")
    public List<Customer> getAllCustomers() {
        return (List<Customer>) customerRepository.findAll();
    }

    @GetMapping(value = "/formatted", produces = "application/json")
    public List<String> getAllCustomersFormatted() {
        return ((List<Customer>) customerRepository.findAll())
                .stream()
                .map(
                    customer -> customer.getFirstName()+" "+customer.getLastName()
                )
                .collect(Collectors.toList());
    }

    @PostMapping(produces = "application/json",
                 consumes = "application/json")
    public Customer addCustomer(@RequestBody Customer customer) {
        return customerRepository.save(customer);
    }
}

@RestController
@RequestMapping("/pets")
public class PetController {

    @Autowired
    private PetRepository petRepository;

    @GetMapping(produces = "application/json")
    public List<Pet> getAllPets() {
        return (List<Pet>) petRepository.findAll();
    }

    @PostMapping(produces = "application/json",
                 consumes = "application/json")
    public Pet addPet(@RequestBody Pet pet) {
        return petRepository.save(pet);
    }
}

Scala

@RestController
@RequestMapping(Array("/customers"))
class CustomerController (
  private val customerRepository: CustomerRepository
) {

  @GetMapping(value = Array("/{id}"),
              produces = Array("application/json"))
  def getCustomer(@PathVariable("id") id: Long) = customerRepository.findOne(id)

  @GetMapping(produces = Array("application/json"))
  def getAllCustomers() = customerRepository.findAll()

  @GetMapping(value = Array("/formatted"),
              produces = Array("application/json"))
  def getAllCustomersFormatted() = {
    customerRepository
      .findAll()
      .asScala
      .map(_.toString())
      .asJava
  }

  @PostMapping(produces = Array("application/json"),
               consumes = Array("application/json"))
  def addCustomer(@RequestBody customer: Customer) = customerRepository.save(customer)
}

@RestController
@RequestMapping(Array("/pets"))
class PetController {

  @Autowired
  var petRepository: PetRepository = null

  @GetMapping(produces = Array("application/json"))
  def getAllPets = petRepository.findAll()

  @PostMapping(produces = Array("application/json"),
               consumes = Array("application/json"))
  def addPet(@RequestBody pet: Pet) = petRepository.save(pet)

}

CustomerController是通过构造函数注入的,而PetController则是通过字段注入的,这么做是为了提供出两种不同的方式——Kotlin和Scala也是同样的处理逻辑。

同样,Java的话,代码还是显得很冗长,尽管其中很大一部分来自于健壮的注释(使用@get/PostMapping代替@requestmapping来减少注释的大小)。值得注意的是,Java 8将会解决这个问题,因为由于缺少lambda函数,getAllCustomersFormatted()函数在Java 7中会变得更加臃肿。

Kotlin

@RestController
@RequestMapping("/customers")
class CustomerController(val customerRepository: CustomerRepository) {

    @GetMapping(value = "/{id}", produces = arrayOf("application/json"))
    fun getCustomer(@PathVariable("id") id: Long): Customer? = 
            customerRepository.findOne(id)

    @GetMapping(value = "/formatted", produces = arrayOf("application/json"))
    fun getAllCustomersFormatted() = 
            customerRepository.findAll().map { it.toString() }

    @GetMapping(produces = arrayOf("application/json"))
    fun getAllCustomers() = customerRepository.findAll()

    @PostMapping(produces = arrayOf("application/json"),
                 consumes = arrayOf("application/json"))
    fun addCustomer(@RequestBody customer: Customer): Customer? = 
            customerRepository.save(customer)
}

@RestController
@RequestMapping("/pets")
class PetController {

    // When using Autowired like this we need to make the variable lateinit
    @Autowired
    lateinit var petRepository: PetRepository

    @GetMapping(produces = arrayOf("application/json"))
    fun getAllPets() = petRepository.findAll()

    @PostMapping(produces = arrayOf("application/json"),
                 consumes = arrayOf("application/json"))
    fun addPet(@RequestBody pet: Pet): Pet? = petRepository.save(pet)
}

乍一看,这似乎和Java一样冗长,这很让人吃惊,但我们必须注意到,这种冗长的代码大部分来自于所需的注释。除去这些,控制器的主体仅仅只有4行。

当然,如果我要将@requestmapping注释写在一行中,那么它就不会那么简单了,但是在博客文章中,可读性就会首先出现。

使用@get/PostMapping注释可以让我们至少跳过方法参数,以减少注释的大小。理论上,我们可以去掉produces和consumes,但这也会使XML成为一个可行的选择——所以这些params并不是多余的。

需要指出的一件令人讨厌的事情是,如果需要使用多个参数(除了默认值以外),那么在注解中使用arrayif()是必要的。这将在Kotlin 1.2中得到修复

我喜欢这个构造函数注入芬兰湾的科特林提供了(我们甚至不需要一个@ autowired注解出于某种原因[这是原因])虽然看起来令人困惑如果类更大,更依赖项注入,我想说这是一个机会,在这种情况下适当的格式。

我喜欢这个构造函数注入芬兰湾的科特林提供了(我们甚至不需要一个@ autowired注解出于某种原因[这是原因])虽然看起来令人困惑如果类更大,更依赖项注入,我想说这是一个机会,在这种情况下适当的格式。

Scala

@RestController
@RequestMapping(Array("/customers"))
class CustomerController (
  private val customerRepository: CustomerRepository
) {

  @GetMapping(value = Array("/{id}"),
              produces = Array("application/json"))
  def getCustomer(@PathVariable("id") id: Long) = customerRepository.findOne(id)

  @GetMapping(produces = Array("application/json"))
  def getAllCustomers() = customerRepository.findAll()

  @GetMapping(value = Array("/formatted"),
              produces = Array("application/json"))
  def getAllCustomersFormatted() = {
    customerRepository
      .findAll()
      .asScala
      .map(_.toString())
      .asJava
  }

  @PostMapping(produces = Array("application/json"),
               consumes = Array("application/json"))
  def addCustomer(@RequestBody customer: Customer) = customerRepository.save(customer)
}

@RestController
@RequestMapping(Array("/pets"))
class PetController {

  @Autowired
  var petRepository: PetRepository = null

  @GetMapping(produces = Array("application/json"))
  def getAllPets = petRepository.findAll()

  @PostMapping(produces = Array("application/json"),
               consumes = Array("application/json"))
  def addPet(@RequestBody pet: Pet) = petRepository.save(pet)

}

Scala还需要在提供参数时使用Array关键字,即使是默认的参数也需要。

getAllCustomersFormatted()函数,这是一种暴行,但我不能让Java集合正确地使用Scala集合——所以,对不起,我的眼睛(划痕,代码在Teemu Pöntelin的帮助下得到了改进,谢谢:))。

请注意,必须在构造函数中包含@autowired(),这可能在Kotlin中跳过(如果您只有一个构造函数,那么实际上根本不需要@autowired),如这里所解释的那样)。

总结

尽管这个应用程序非常简单,但是对于我来说,这足以让我对如何在每一门特色语言中做一些更深入的了解有一个基本的感觉。

如果需要在 Kotlin 和 Scala 之间做个选择,毫无疑问我的选择是Kotlin

为什么呢?

首先,我觉得Scala就好像是IntelliJ IDEA中的二等公民一样,而Kotlin无疑是一等公民。这是显而易见的,因为创建IDE(Jetbrains)的公司和创建Kotlin语言的公司是同一家的——所以他们当然非常支持这门语言。另一方面,Scala是通过一个插件集成的。两者的区别是显而易见的,至少对我个人来说,这种区别是非常重要的。

其次,如果我想用Scala为web应用程序开发框架,我就会选择 Play Framework,原因很简单,就是因为它设计的思维是基于Scala 的,而且开发语言能使得某些事情变得更容易,而不是妨碍你(就像在这个小应用程序的情况下)。

这些都是我个人的原因,但也有更多、更普遍的原因。

我觉得Scala比Kotlin更脱离Java,因为后者基本上算是一种扩展,旨在解决Java最初存在的问题,而前者的目标是将命令式编程和函数式编程混合在一起。尽管如此,我相信Scala在其他领域更好地使用,比如大数据,而Kotlin在它应该做的事情上做得很好——取代Java解决一些比较常见的问题,并提供紧密的互操作性。

此外,Spring本身似乎对Kotlin 的支持远远超过了对 Scala的支持。

最后,我相信,从Java程序员的角度来看,Kotlin比Scala更容易学习。这主要是因为Kotlin被设计为基于Java进行的改进,并没有像Scala那样重视函数式编程。在Kotlin中,与Java的互操作性也更加紧密,这使得调试问题更加容易。

最后,但同样重要的是——我想明确地声明我不会以任何方式抨击Scala。就我个人而言,我认为 如果用一门非Java的JVM 语言去开发一个Spring Boot的web应用程序——Kotlin会是更好的选择。粗体部分是很重要的:)正如前面提到的,在其他领域,Scala是很优秀的,比如前面提到的大数据,但想要取代Java目前估计还有一段很长的路要走。

感谢 jihong10102006 投递这篇资讯

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

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


ITeye推荐