一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

用node.js进行微信公众平台的开发

基本原理 用nodejs怎样来实现对微信公众平台的开发呢? 别的就不多说了,先来简单介绍微信公众平台的基本原理。 微信服务器就相当于一个转发服务器,终端(手机、Pad等)发起请求至微信服务器,微信服务器,然后将请求转发给自定义服务(这里就是我们的具体实现)。服务处理完毕,然后转发给微信服务器,微信服务器再将具体响应回复到终端;通信协议为:HTTP;数据格式为:XML。   具体的流程如下图所示: 其实,我们需要做的事情,就是对HTTP请求,做出响应。具体的请求内容,我们按照特定的XML格式去解析,处理完毕后,也要按照特定的XML格式返回。 平台注册 要想完成对微信公众平台的开发,我们需要注册一个微信公众平台帐号。注册步骤如下:   打开微信公共平台的官网,https://mp.weixin.qq.com/,点击“立即注册”。 然后根据提示,填写基本信息,邮箱激活,选择类型,信息登记,公众号信息,完成注册。 在注册完成以后,我们要对公众号进行一些基本的设置。登录公众号,找到【公众号设置】,然后设置头像以及其它信息。 nodejs环境搭建 我们需要在公网上找一台服务器,以便可以启动我们的nodejs的环境,启动环境后通过设置访问地址,我们就可以接收微信服务器发送的消息了,并且我们也可以向微信服务器发送消息了。 在公网的服务器中安装完成nodejs以后,我们还需要安装一些nodejs所用到的模块,如:express,node-xml,jssha等模块。可以通过npm命令进行安装。 我们通过nodejs来实现向微信服务器消息的发送与接收,以及与微信服务器的签名认证。 在我们右面的编辑环境中已经为同学们安装了nodejs环境。我们在接下来内容中就为同学们来实现微信服务器的签名认证。 创建express框架 我们在前面的课程中已经安装了express模块,并且在我们右面的环境中已经创建了一个名为app.js的文件。现在我们就在这个文件中完成express框架。如下代码:

然后再添加一个名为test.html的文件。写入以下内容

我们还要添加一个名为index.js的文件,来实现我们的路由。点击编辑环境中的添加文件按钮,添加文件,然后我们写入以下代码,其中GET请求用来验证配置的URL合法性,POST请求用来处理微信消息。

这样我们需要的express框架就完成了,当然我们还可以添加public公共文件夹以及我们要用到的中间件。保存文件,点击【提交运行】,然后点击【访问测试】,去试试吧。记下访问测试的地址,我们将在下一节中会用到该地址。 微信服务器配置 我们登录微信公众平台,在开发者模式下面找到基本配置,然后修改服务器配置。如图所示: 首先URL要填写公网上我们安装nodejs接收与发送数据的路径。我们可以填写上节中【访问测试】的地址,然后加上对应的路由就可以了。

上面代码是我的访问测试的地址,然后加上前面课程中的路由,同学们要根据自己的访问测试地址与路由来填写。 Token要与我们自定义服务器端的token一致。填写完成以后,就可以点击提交了,在提交以前,我们启动app.js(点击【提交运行】)。这样根据我们的路由匹配就可以验证签名是否有效了。 当配置完成以后,一定要启用配置。 网址接入 公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。 signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 加密/校验流程: 将token、timestamp、nonce三个参数进行字典序排序; 将三个参数字符串拼接成一个字符串进行sha1加密; 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。 参数排序 首先我们确认请求是来自微信服务器的get请求,那么就可以在index.js文件中进行添加代码了。然后在app.get('/interface',function(req,res){});的function中进行添加。 先来获取各个参数的值,如下代码:

我们在这里对token进行设置,让其与微信服务器中设置的token一致。 然后对其中的token、timestamp、nonce进行排序,如下代码:

这样我们就完成了排序。 参数加密 在上节中我们已经对参数进行了排序,然后我们在这一节中要将参数组成一个字符串,进行SH-1加密。在加密以前要用到jssha模块,在我们的文件中要引用该模块。

在上一节课中我们已经对参数排序完成,并存放在数组中,我们可以通过join方法来生成一个字符串,如下代码:

最后对该数据进行加密,如下代码:

好了这样就生成了我们需要的签名字符串scyptoString。 签名对比 我们已经得到了我们想要的签名字符串scyptoString,然后我们就可以与来自微信服务器的签名进行对比了,对比通过,则我们就可以接收与发送消息了。

本参考了如下网站,更多内容也请访问: http://www.hubwiz.com/course/569dc7fdacf9a45a69b051cd/ from:http://my.oschina.net/u/2275217/blog/630770

龙生   25 Jul 2016
View Details

作为一个新手程序员该如何成长?

“哦,天那。相比其他开发者,我又笨又没准备。老板会知道我是多么无能,我要被炒鱿鱼了。” 这种想法,在我们作为一名软件开发人员刚进入工作领域的时候,非常常见。我也不例外。这种想法会让人觉得自己不如其他的开发者,感觉自己是滥竽充数的,感觉自己像一个全面的傻瓜,当涉及到写代码的时候。 在短短的几个月后,我第一次获得一份真正编程工作的兴奋——改善和维护一个基于 web 的研究平台——终于变成了绝对的恐惧,那些消极负面的想法在我的脑海里不断地涌入。即使在我去了更大节奏更快的组织机构,以及之后终于开创了我自己的企业,这些想法也在不断地蚕食我。 我总是觉得自己写的每一行代码都那么笨重,低效,如果展示给任何其他有才干的开发者看绝对会被批判得体无完肤。我感觉自己很笨,他们发现这一点不过是时间问题。 听起来很熟悉?如果你有我这种想法,有绝大多数软件开发者都有的这种想法,很大的可能是会惶惶而不可终日。 下面我要介绍一些我发现的有助于,你作为一个初出茅庐的开发人员,提升你自己和你的职业生涯前景的关键策略,并在推动职业发展时保持一种健康的心态。 作为一个初出茅庐的开发人员提升自己和职业生涯前景 无论你是正在找你的第一份工作,还是盯上了潜在的晋升,在一定程度上你都需要与其他的开发者竞争。为了确保你能从中脱颖而出,这里有一些关键的步骤可以帮助你迈向成功。 1. 找一种你喜欢用到工作中的语言。 要成为一个更优秀的程序员,需要定时经常性地练习编程并用不同的语言和技术扩宽你的经验,但是语言是如此之多,很多时候你不知道从哪里开始,也不知道该选择什么语言才最适合你要解决的问题风格。 如果你还没有想好具体的语言,并且想要先试验下的话,我会建议你搜索求职网站,例如 Stack Overflow Careers、Indeed 和 Monster,看看是什么语言最抢手。如果你想或者目前的职位要求的话,你可以牢牢掌握一些特定的语言,然后开始研究和试验。 The TIOBE Index 可用来查看哪些语言更受欢迎 当我开始我的第一份工作的时候——一个基于 web 研究平台的开发者——我进入了学习的阵营:虽然我有足够的技能在面试时通过编程测试,但是这份工作要求我加强 PHP、JavaScript 和 SQL 技能。于是下班后以及周末,我都会磨练自己在那三方面的技能,以便于能够在工作中表现良好,能够拥有更多基于 web 开发的机会,而这些对于我现在能够拥有和打理我自己的 web 开发公司有很大的贡献。 不管你恰巧遇到或选择了什么语言,关键是经常练习。尝试不同的语言,通过一些小例子编码,然后用它们构建小的项目。一旦你找到了能与你产生共鸣的一种或一系列语言以及如何处理问题的方法,坚持下去,并经常性地定期实践练习。 2. 发现问题或任何让你觉得生气的事情。 正如随着我职业生涯的向前迈进,我进入了一家大的临终护理组织,担任 web 开发者。虽然我的工作主要是改善和维护我们的在线计费和 CRM 系统,但是许多医务人员经常抱怨:病人总是报告说系统运行得异常缓慢。这让我很生气,它让员工更生气——因为不得不去修复。 临终护理几乎纯粹运行在微软技术上,并且数据库也不例外——Microsoft SQL Server(MSSQL)。虽然它不是我感觉最舒服的查询语言,但是我依然在家里研究、阅读、练习构建小型的 MSSQL 项目。通过我的努力,我渐渐能够建立一些示例报告来向数据库管理员展示报告可以如何改进。随着时间的推移,我帮助实现的优化促使我得到了晋升,通过修复那 个问题学到的技能帮助我获得了一份数据库管理的工作。 和一种语言一起成长和点燃学习激情的最好办法是,使用你学到的知识来帮助解决令你感到苦恼的问题。不仅要学习语言本身,也要学习语言可以如何应用到实际生活中的问题。 3. 公开发布到 Github 或其他公共代码平台上。 即使你不认为有人会使用它,喜欢它,或者甚至看上一眼,还是要发布你的代码,一旦你觉得它达到生产标准的话。你的项目可能不会改变世界,但它可以让你脱颖而出,让你可以坦然对待别人查看和批评你的工作。此外,它可以让你的简历增色不少。 4. 写博客,展示你正在学习的东西,怎么学习以及为什么。 向世界(以及将来的雇主)展示你正在学习,以及你有主动的学习意愿,就可以让你领先于 95% 以上的同行业开发人员。你也可以练习你的写作技巧,这个过程也能让你学到很多关于自我方面的东西——你如何处理问题,如何分解和解决。你还需要整理一下你 常用的思考方式,如何学习和成长,以及如何取得进步。 5. 在软件开发社区中表现活跃。 解决问题,看别人怎么解决问题,说出自己的声音和意见。我通过 Stack Overflow 和编程社区做到这些。这还不是最宽容的文化,因为你将会遇到一些非常眼尖的开发者咆哮你怎么在伪代码中忘记了后面那个括号,但这能让你与其他的开发者交 流,使得具备接受诚实(有时是残酷)批评的经验,并知道其他人可能会如何处理问题,从而打开思考问题的新思路。 6. 学会如何简明扼要地解释给技术和非技术人员听。 我总是听到大家说沟通是实现职业成功时,要掌握的最难和最重要的事情之一。在早期,我认为这是无稽之谈——只是跟人讲电话,会议期间交谈,发送电子 邮件能有多难?任何有着专业沟通经验的人都会对这种看法嗤之以鼻,我现在也会。你会惊讶地发现误解的快速突然出现,工作流程是如此之复杂,以及项目进程的 拖延。 要真正掌握高效的沟通,你需要对实际工作中你需要工作于什么有一个基本的了解(我强烈推荐 Charles Petzold 的《Code》)并彼此交互。写博客,并与编程社区互动有助于有效地提高沟通能力。 如果你能掌握简练,实事求是,通俗易懂(如果需要的话)的沟通方式,并将复杂的问题和解决方案分解为可理解和很小的块,那么你就能在软件开发领域立于不败之地。你会发现项目经理,其他的程序员,以及执行主管等都会争夺你去他们的团队。 保持健康的心态 专业软件开发人员的成长之路没有一条不充满着荆棘和困难,所以你很容易掉入不健康的自我思考和职业选择的陷阱。通过了解每个人都会有的专业的不安全感,可以在你对自己失去信心的时候更好的激励自己。 1. 要知道,每个人都感觉自己像骗子。 你在你的职业和生活中遇到的每个人都在与骗子综合征做斗争。我们每个人都觉得自己正处在被发现自己是骗子,然后被公开批评无能的边缘。了解这一点能在精神领域帮助你觉得公平,而且还能帮助你认识到,每一个做过值得夸耀的事情的人曾几何时的想法就和你现在一样。 这种心态可以帮助你坚持下来!如果再加上具有建设性的渠道方法——学习新的语言,开发方法,以及解决问题的方法——你的整个职业生涯都将有极大的提高,并且能够快速让你成为技艺大师。 2. 知道自己会陷入困境。 毫无疑问,就是在编程中我终于接受了我是人这个事实——我也有犯迷糊,笨手笨脚,错误频出的时候。没错,你也是如此。你会错过最后期限,太多次点击“全部回复”,滑动捕捉一些严重的错误,或者在应用程序架构中轻易放过一个令人难以置信的 bug。 要想保持快乐和健康,那就得让自己去分析错误,然后从中学习,还要应用所学的东西以便于下次完成得更好。 […]

龙生   25 Jul 2016
View Details

避免成为优秀程序员

我曾经和我认为优秀的程序员一起工作,但是他们是真正优秀的程序员吗?是什么让他们如此优秀?(或者,他们只是普通的程序员?) 最近读到Mark Pearl博客里一篇名为《Programming, a Subset of Writing》的文章,其中的观点让我十分推崇,尤其是下面这段: 优秀程序员和普通程序员最大的区别在于,优秀的程序员会使用整洁、易于理解的方式进行编程,任何不必要的复杂代码均不会出现。和我工作过的那些真正优秀的程序员总是尊学这样的编程步骤:写代码、重构、进一步重构。 就像日常生活技能一样,提高自己的办法唯有不断练习, 但是除了重构和进一步重构之外,你还能做些什么? 还有一种提升自我的方法,很简单,只需要对编程的其他重要要素保持开放的心态就好了。如单元测试、异常处理甚至交流技巧都非常重要。如果忽略或轻视这些因素也许会导致你过度自信,甚至成为一个自负的人。 我认为鼓吹“忽略实际情况,循规蹈矩地遵守软件开发实践就能成为一个优秀程序员”的说法非常荒谬。有时我会认为他们只是些 “自负的程序员”,虽然,老实说,他们中的一些人还是很优秀的。 我非常赞同我以前的同事 Russell Politzky 曾经说过的一句话: 那些自负的程序员往往是教条、狭隘和不切实际的。在我们的业务中,这会导致他们做出不合适的和有缺陷的设计。 如下是一些程序员经常挂在嘴边的话: 所有的测试必须是单元测试 要不惜代价达到100%的代码测试覆盖率 所有使用mocks/stubs的测试,必须基于mock库进行实现 不管业务目标是什么,所有的应用程序都必须建立在DDD模式之上 所有使用数据库的程序必须使用ORM来操作数据 不使用ORM是非常糟糕的,而且难于维护 代码注释不应该存在于代码中,因为存在注释表明代码不够清楚明了,不能直接表达其含义,应该总是使用代码来表达程序的含义而不是注释 任何一个你产出的文档,比如说设计文档,总是会过时的,用处很少 你唯一需要的文档就是代码 你唯一需要的模型也是代码 自顶向下的设计是不会成功的,这种尝试总会失败,拥护这种设计的人只是没找着门路,最终他们还是会折服于“演进式设计”所带来的优越性,没错,就是TDD 除了面向对象,你用别的编程范式根本写不出好的软件,因为只有OO能降低复杂度 你认识这类程序员吗?如果是,你认为他们的水平如何?经验表明这类极端的思维,既不是完全正确也不是完全错误,只是不合逻辑。 更加切实的考虑和合理的推理才能帮助你成为一名优秀的程序员。磨练技艺,增强技能固然很好,但是当我们在做这些事情的时候,应该从实际情况出发,认真考虑实施其所需的范围、成本、环境等各种因素。将这些合理的因素纳入考虑范畴需要成熟的思考,才能成为优秀的程序员。 当然,也需要大量的练习。 稿源:ThoughtWorks洞见   from:http://www.oschina.net/news/75493/avoid-become-good-programmer

龙生   25 Jul 2016
View Details

一篇文章,掌握所有开源数据库的现状

数据库作为业务的核心,在整个基础软件栈中是非常重要的一环。近几年社区也是新的方案和思想层出不穷,接下来我将总结一下近几年一些主流的开源数据库方案,其背后的设计思想以及适用场景。本人才疏学浅如有遗漏或者错误请见谅。本次分享聚焦于数据库既结构化数据存储 OLTP 及 NoSQL 领域,不会涉及 OLAP、对象存储、分布式文件系统。 1 开源RDBMS与互联网的崛起 很长时间以来,关系型数据库一直是大公司的专利,市场被 Oracle / DB2 等企业数据库牢牢把持。但是随着互联网的崛起、开源社区的发展,上世纪九十年代 MySQL 1.0 的发布,标志着关系型数据库的领域社区终于有可选择的方案。 MySQL 第一个介绍的单机RDBMS就是MySQL。相信大多数朋友都已经对 MySQL 非常熟悉,基本上 MySQL 的成长史就是互联网的成长史。我接触的第一个 MySQL 版本是 MySQL 4.0,到后来的 MySQL 5.5 更是经典——基本所有的互联网公司都在使用。 MySQL 也普及了「可插拔」引擎这一概念,针对不同的业务场景选用不同的存储引擎是 MySQL tuning 的一个重要的方式。比如对于有事务需求的场景使用 InnoDB;对于并发读取的场景 MyISAM 可能比较合适;但是现在我推荐绝大多数情况还是使用 InnoDB,毕竟 5.6 后已经成为了官方的默认引擎。大多数朋友都基本知道什么场景适用 MySQL(几乎所有需要持久化结构化数据的场景),我就不赘述了。 另外值得一提的是 MySQL 5.6中引入了多线程复制和 GTID,使得故障恢复和主从的运维变得比较方便。另外,5.7(目前处于 GA 版本) 是 MySQL 的一个重大更新,主要是读写性能和复制性能上有了长足的进步(在5.6版本中实现了SCHEMA级别的并行复制,不过意义不大,倒是MariaDB的多线程并行复制大放异彩,有不少人因为这个特性选择MariaDB。MySQL 5.7 MTS支持两种模式,一种是和5.6一样,另一种则是基于binlog group commit实现的多线程复制,也就是MASTER上同时提交的binlog在SLAVE端也可以同时被apply,实现并行复制)。 如果有单机数据库技术选型的朋友,基本上只需要考虑 5.7 或者 MariaDB 就好了,而且 5.6、5.7 由 Oracle 接手后,性能和稳定性上都有了明显的提升。 PostgreSQL PostgreSQL的历史也非常悠久,其前身是UCB的Ingres,主持这个项目的 Michael Stronebraker 于 2015 年获得图灵奖。后来项目更名为 Post-Ingres,项目基于 BSD license 下开源。 1995 年几个 UCB 的学生为 Post-Ingres 开发了 SQL 的接口,正式发布了 PostgreSQL95,随后一步步在开源社区中成长起来。 和 MySQL 一样,PostgreSQL 也是一个单机的关系型数据库,但是与 MySQL […]

龙生   22 Jul 2016
View Details

立足GitHub学编程:13个不容错过的Java项目

今天我们将整理一大波干货满满的Java示例代码与能力展示素材。 GitHub可谓一座程序开发的大宝库,有些素材值得fork,有些则能帮助我们改进自有代码或者学习编程技能。无论如何,开发工作当中我们几乎不可能绕得开GitHub。 下面,我们将一同分享各有趣且颇为实用的Java库,大家请任取所需、不用客气~ 1.极致精简的Java Bootique是一项用于构建无容器可运行Java应用的极简技术。该项目允许大家创建REST服务、Web应用、任务、数据库迁移等等,且一切都立足于模块实现。另外,大家也可以将其作为简单的命令进行使用。 该项目的目标在于将应用从Java容器中解放出来,允许开发者重新回归main()方法。另外其中还包含部分内置命令,因此就算各位需要处理的代码量不多或者并未向应用中导入任何模块,仍然能够利用Bootique对其加以执行。 2.优雅的问题处理方式 99-problems,光看名字就能对其功能了解一二。很明显,它的作用是帮助大家磨练逻辑编程中的具体技能。大家可以选择利用Java 8、Scala或者Haskell进行问题解决,并最终找到最精致的解决办法。 如果大家喜爱解题,其中还提供多种不同层级的难度供各位选择。另外,如果大家将全部99道难题解决掉,则可进一步冲击Java Deathmatch。如果大家被难住了,请点击此处查看难题——但请注意,认真思考之后再参阅比较好哦。 3.字符串操作 Strman-java库是一套Java 8库,专门用于处理字符串。由于其可用于Maven,因此大家只需要面向选定的构建工具添加关联性即可使用。 如果大家使用过Kik并听说过其遭遇的leftPad问题,那么Strman可能是个更好的选择——其能够返回特定长度的新字符串,且自动填充开头部分内容。另外,其中还提供一整套功能列表,包括向值附加字符串、从特定目录中提取字符以及利用字符串在开始与结束间返回数组等等。 4.数据浏览 如果大家希望通过酷炫的方式进行数据交互,那么Dex绝对不容错过。它能够帮助我们提取、转换及可视化数据,同时附带预测功能。大家可以将可视化结果发布为3D或者其它HTML变量形式。 Dex允许我们生成超过50种不同的可视化模式,其中包括世界地图、参与时间表、网络使用情况等。大家也可以利用R与其运行实例相结合,从而构建起复杂的统计分析与预测分析体系。 民主党与共和党谁能胜出?利用弦状图看个究竟。 5.小小大数据 Tablesaw是一套内存内数据表,其中包含多种数据工具与面向列的存储格式。其设计思路认为没人会面向小型任务执行分布式分析,而大家可以在单一服务器上对200万行级别的表进行交互。 大家能够利用Tablesaw执行各种规则,从而检查显示布局、数据优先级或者针对数据显示及交互向特定用户提供扩展控制范围。在它的帮助下,我们可以利用RDBMS与CSV文件导入数据,添加及删除列,执行映射与规约操作或者将表保存在经过压缩的列式存储格式当中。 6.键值存储 Chronicle Map是一套内存内键值存储方案,其设计目标在于实现低延迟与/或多进程应用,例如贸易与金融市场应用。这套库主要面向中等读取与写入查询延迟场景,允许用户根据服务器中的硬件执行线程数量编写合适的查询机制。 其主要用途包括在单一服务器(例如Redis)中替代低速键值存储方案,或者取代同类面向JVM的解决方案以实现速度提升。大家也可以将部分应用状态移出Java堆,从而降低堆体积及GC压力。 7.负载调查工具 Gumshoe允许大家监控自己的应用性能统计指标。有了它,我们可以精确到具体代码行并了解与堆栈调用及个别栈帧相关的统计数据,从而确切分析资源使用情况(例如TCP、UDP、文件系统或处理器使用量)。 这套库能够在统计数据生成时对其进行捕捉、过滤与可视化处理,从而更为直观地实现数据结论查阅。如果需要更为具体地使用,大家还可以在数据捕捉与/或可视化处理过程中过滤栈帧,并在其运行中加以变更。 8.Java音乐 SoundSea允许大家搜索并下载歌曲。其内置有元数据与专辑信息,大家在查找特定歌曲时,SoundSea会在iTunes上查找相关元数据与专辑信息,并显示相关结果。如果匹配的歌曲超过一首,大家可在其中找到自己需要的条目。 歌曲本身下载自Pleer.com,大家还可以根据高品质、低品质或者VBR码率进行过滤。这同时也是一款迷你播放器,供我们直接聆听歌曲而不再经由其它音乐库。 搜索与下载 9.检查泄漏问题 LeakCanary是一套开源库,旨在帮助我们解决内存泄漏问题。大家可以利用它在Java(与Android)中检查内存泄漏。正如其GitHub页面中所言,“千里之埋溃于蚁穴”。 在LeakCanary设置完成后,大家可以利用其自动检查泄漏并在发现问题时给出通知。 10.多维数组 ND4J是一套开源库,能够将多种来自Python社区的科学计算工具引入JVM。其面向生产环境设计,因此运行速度很快但对内存容量却要求不高。在它的帮助下,工程师们能够轻松将算法及接口移植到Java与Scala库当中。 这套库的主要贡献是提供一套通用型n维数组对象,其多平台功能包括GPU与线性代数外加信号处理能力。其与Hadoop及Spark相集成,且提供API以模拟Numpy——一款高人气Python数学库。 11.监控Java 无论大家使用哪种监控工具,Automon都能够将其与AOP(AspectJ)相结合以实现Java代码、JDK以及依赖库监控声明。其可与其它各知名监控工具相协作,例如JAMon、JavaSimon、Yammer Metrics以及StatsD等,同时亦支持各类日志记录库,包括perf4j、log4j、sl4j等等。 另一款出色的生产型监控工具为Takipi。它能够帮助大家了解自己的代码何时及为何发生崩溃,查看全部意外状况并获取与之相关的全部堆栈、源与状态信息。 12.打理Java Jvm-tools,或者SJK,是一套用于JVM故障排查、监控与配置的工具组合。这是一款不像话地工具,使用JVM的标准诊断接口(例如JMX、JVM attach与perf计数器),同时添加了更多逻辑以应对各类常见故障排查用例。 这套库允许我们对目标JVM的CPU线程使用情况进行池化,同时定期向控制台报告实时CG信息并提供基础样本分析功能。在这里,我们可以通过命令行配合MBean执行各基本操作,同时将目标Java进程的全部MBeans转储为JSON格式。 13.最佳Java awesome-java是一套出色的Java框架、库与软件合集。如果大家不太清楚自己应当如何选择具体方案,请务必参考这套清单 ,其中甚至根据类别对各条目加以划分。 其中还包含一部分仍在使用的古老工具,包括能够简化映射的框架,可构建应用周期与依赖性的工具以及负责处理字节码编程的库等等。 总结陈词 这当然只是GitHub的冰山一角,毫无疑问还有更多项目值得大家审视并用于改善自身代码工程。也欢迎大家结合自己的经验在评论中提供更多推荐! 【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】 原文标题:The Hitchhikers Guide to GitHub: 13 Java Projects You Should Try 原文链接:https://dzone.com/articles/the-hitchhikers-guide-to-github-13-java-projects-y from:http://developer.51cto.com/art/201607/514785.htm

龙生   22 Jul 2016
View Details

人类到底该吃肉 还是吃素?

我们都知道生理和心理有着密切的关联。当我们身体不好时,我们会郁闷、抱怨,同样,我们的情绪,也会影响我们的生理状态,比如,我们心情抑郁的时候,会食不知味,对原本很热衷的美食,可能都会提不起兴致。更为甚者,一些心理疾病会引发或加重一些身体上的疾病,比如,长期的抑郁,会引起比如消化系统,呼吸系统,循环系统,神经系统等等多种身体病症。 我们常常有这样的体验,就像我们饿了的时候,会寻找吃的,同样,我们心情不好的时候,有时嘴上嚼着东西,也能释放焦虑等负面情绪,也就是饮食于我们,无论是身体还是心理都是有着这样或那样的影响。 之前看过很多关于素食和肉食的话题,于是引发了思考:是否素食更适合人类?或者说,人类是否本就是素食的物种?如果是这样,是否肉食与素食也会对人的心情产生不同的影响呢?那么,长期食肉会否与一些心理疾病有关,或者素食对人的心理健康更有益呢? 带着这样的疑问与思考,于是想写今天的这篇文章,叫做《素食与心理健康》之“人类适合吃肉还是吃素”。 很少有人不关注自己的生活是否快乐与幸福,而幸福本身又与我们的身体和心理密不可分。既然这样,探讨与身体和心理密切相关的饮食,那就是很必要的了。那么,人的生理结构是怎样的?它适合吃肉吗? 哺乳动物可按其饮食习性大致划分为食肉类动物、食草叶类动物及食果类动物。下面我们分别以食肉类动物、食草叶类动物、食果类动物与人进行对比,从人的生理构造,身体机能和消化系统等方面来看人类更适合食肉还是食素。 1、食肉类动物 所有的食肉动物,包括狮子、狗、狼、猫等它们都有着非常“简短”的消化系统。食肉动物的小肠长度大约只相当于身体(指躯干,不计头部和四肢)长度的3倍。 这是因为,肉类食物腐烂得极快,如果在体内存留过久,其腐烂后生成的毒物会浸入血流,因此食肉动物通过长期的进化形成了较短的消化道,以利于腐败的肉食及其产生的毒物能迅速排出体外。 另外,食肉动物的胃中也含有较高浓度的盐酸用以消化肉食中的纤维组织和骨骼,其盐酸的强度比素食动物的强约20倍。 食肉动物多在阴凉的夜间外出猎食,在白天时则睡觉,因此不需要通过皮肤的汗腺来出汗以降低体温,而是通过舌头排汗散热。 食素动物则不同,像牛、马、鹿等动物,从早到晚大部分时间都要在烈日下觅食,因此,需要通过皮肤的汗腺大量地出汗来使体温降低。 食肉动物与食素动物区别最大的地方,在于牙齿的不同。 为了捕杀猎物,食肉动物需要有尖利的爪,强有力的颚以及长而尖锐的门齿和犬齿(在口腔的前部)用来刺穿及撕裂(主要依靠牙齿)坚韧的皮肉。 食素动物一般都是先将谷物一类的食物在口里嚼碎,进行初步消化,然后再送入肠胃中,而食肉动物则没有平坦的臼齿,因此肉食是浓缩性食物,不需要预先嚼碎,其消化过程几乎全部是在肠胃中进行。 以猫为例,它几乎不能用牙齿来嚼碎食物。 2、食草叶类动物 这类动物一般是靠吃草本植物,树木枝叶或其它植物维生,例如大象、牛、羊、骆驼等。它们所吃的都是一些粗糙或硬重的食物。 食草叶动物的唾液中一般都含有一种叫做唾液淀粉脢的消化液,用于消化淀粉类食物,其消化过程在口腔中就已经开始了。 那些粗糙的食物必须先经细细嚼碎,并与唾液淀粉充分混和后,才能送入肠胃中做进一步分解。因此,食草叶动物都有24个平坦的臼齿,可以通过微小地左右移动来嚼碎食物(食肉动物的牙齿则只能上下运动)。 食草叶动物没有爪子,牙齿也不尖。它们喝水时是用嘴吸,而食肉动物则是用舌舔。 与食肉动物不同,食草叶动物所吃的植物性食物不会很快腐烂,可以慢慢地通过肠道充分消化吸收,所以其小肠比食肉动物的长得多,约为身体长度的10倍。 值得注意的是,近来发现:食草叶动物若改吃肉食,身体将受到严重的损害。 美国科学家做过这样一个试验:若每天在兔子的饲料里添加半磅的动物性脂肪,两个月之后,兔子的血管就结满了脂肪硬块,呈现出动脉硬化的严重病症。 人的消化系统正像兔子那样,不是为消化肉食而设计的,吃肉将使人深受其害。 3、食果类动物 这类动物主要包括类人猿,是一种与人类最接近的动物界祖先。 类人猿主要是靠吃水果和坚果维生。它们有平坦的臼齿用来嚼碎食物;它们的唾液是碱性的,同食草叶动物一样也含有唾液淀粉脢,用于在口腔中初步消化食物;它们的肠道曲折环绕,其肠道长度大约相当于身体(躯干)长度的12倍,适于慢慢地消化水果和蔬菜。 4、人类 人类的生理特征与食果动物的几乎完全相同,与食草叶动物十分相似,与食肉动物则相差甚远。人类的消化系统、牙齿的构造,以及身体机能等与食肉动物的完全不同。 与类人猿一样,人类的肠道大约也是身体(躯干)长度的12倍;人类是通过皮肤上无数个汗腺(在微小的毛孔内)用来排汗以降低体温;人类像所有素食动物一样用嘴吸的方式喝水;人类的牙齿和颚的构造都是为素食而设计的;人类的唾液是碱性的,并含有唾液淀粉类,用来预先消化谷类食物。 因此,从生理结构上来看:人类不是食肉动物。 根据对人体的解剖和消化系统的构造可以断定,在数百万年的进化过程中,我们一直都是靠吃水果、坚果、谷物和蔬菜维生的。 人类根本就不具备吃肉的本能。我们大多数人都要靠别人替我们杀死动物来获得肉食,若自己亲手杀生会感到恶心或不舒服。 食肉动物一般吃生肉,而我们人类则要用煮、烧烤、炸等方法作熟之后才能吃,烹调过程中还要用各种调味品来掩饰肉的原味。 一位科学家曾这样说道:“一只猫嗅到水果则根本无动于衷。如果人喜欢抓捕鸟雀,并能用牙活生生地撕断其尚在扑动的翅膀,吸吮其温暖的血。那么,可以断定大自然赋予了人吃肉的本能。相反,一串甘美的葡萄却能让人流口水。人在肚子不饿时也会想吃水果,因为人确实觉得它好吃。” 科学家和博物学家林内(V、Linne)曾说:“将人体里里外外的生理构造与其它动物的比较一下就知道,水果和多汁水的蔬菜才是大自然赐予人类的食物。” 总之,科学家们对于生理学、解剖学和动物行为等方面的研究结果显示,人更适合于吃水果、蔬菜、坚果和谷物。 大自然赋予人的生理结构不适合吃肉,世界上大部分病症都是因为吃肉引起的。吃素才是符合自然规律的。吃素是大自然赋予人类的本能,也是大自然赋予的智慧,当然,更是符合天地德行的。 实际上,我们也都知道这样一个事实:如果我们天天只吃肉类而不吃米饭、蔬菜和水果是吃不消的,但我们只吃米饭、蔬菜和水果而不吃肉类却是没有问题的。 科学家们认为,任何动物的饮食都必须与其生理构造相适应。人类的生理构造,身体机能和消化系统等与食肉动物的完全不同,人的生理结构不适合吃肉。 所以,通过以上的分析,关注幸福健康的人们,可以想一想了,我们更适合吃肉还是吃素呢? from:http://tech.btime.com/science/20160721/n316289.shtml

龙生   21 Jul 2016
View Details

WordPress安装插件报错解决办法

今天多说评论插件遇到点问题,就把原来的删除掉,想重新安装一遍,再次安装的时候遇到:无法安装这个包。 PCLZIP_ERR_MISSING_FILE (-4) : Missing archive file ‘C:\WIN….很长一段,不知道什么原因,就在网站搜了一下,原因可能是windows server权限的问题。最终在找到了一个解决方法。指定wp的临时文件夹路径,避免默认的文件夹在windows下没有权限。方法如下: 打开wordpress根目录下的wp-config.php文件 找到如下: /** WordPress 目录的绝对路径。 */ if ( !defined(‘ABSPATH’) )     define(‘ABSPATH’, dirname(__FILE__) . ‘/’); 在下面增加如下代码即可: /** 指定WordPress的临时目录 */ define(‘WP_TEMP_DIR’, ABSPATH . ‘wp-content/temp’); 最后再wp-content文件夹下新建个temp文件夹,然后再更新或下载插件试试。 from:http://blog.csdn.net/xiangqiao123/article/details/14119715

龙生   20 Jul 2016
View Details

外媒速递:Web设计师们不容错过的十款JavaScript库与插件

外媒速递是核子可乐精选的近日国外媒体的精彩文章推荐,希望大家喜欢! 本期给大家推荐的是Web设计师必备的JavaScript库与插件、数据挖掘工具、如何招揽出色的移动应用开发者和敏捷与DevOps之间的区别等。 一、Web设计师们不容错过的十款JavaScript库与插件 原文标题:10 JavaScript Libraries and Plugins For Web Designers 时至今日,网站开发已经成为技术领域发展速度最快的分支。而在其中,JavaScript正扮演着不可或缺的核心角色。目前与之相关的工具、插件、库等资源不胜枚举,下面,我们将从中挑选出最值得关注的十种: 1. Layzr.js 2. Dense 3. Full Page.js 4. Lunr.js 5. Lity 6. Dynamics.js 7. Accordion Pro JS 8. Arbor.js 9. jNotify 10. jQuery Form Validator 二、十款最佳数据挖掘工具助你打造分析仪表板 原文标题:10 Best Tools To Build Analytics Dashboard 各类高级数据挖掘工具的不断涌现让我们得以处理日益增长的企业存储数据,进而从中提取有价值信息。而越来越多的可视化工具降低了我们获取数据洞察能力的门槛。当利用仪表板处理数据分析结论成为主流,我们自然不能在这场变革中屈居人后。 1. DashThis 2. HappyMetrix 3. Analytics Portfolio 4. Geckoboard 5. ZoomCharts 6. MicroStrategy 7. Google Analytics Solutions 8. Klipfolio 9. Cyfe 10. IBM Watson Analytics 三、管理者必读:如何招揽真正出色的移动应用开发者? 原文标题:10 Tips to Hire the Perfect Mobile App Developer for Your Project 移动应用开发工作的重要性已经毋庸置疑,招聘相关技术人员也成为令众多管理者头痛的难题。除了令人心动的薪酬之外,我们还需要擦亮双眼来辨别真正身怀绝技的人才。下面来看这十条移动应用开发人才的重要判断标准: 1. 开发经验 2. […]

龙生   20 Jul 2016
View Details

27 个 iOS 开源库,让你的开发坐上火箭吧

1. DZNEmptyDataSet 这本应该是iOS中一个标准、内置的解决空table和collection view的方式。默认的如果你的table view是空的,屏幕就是空的。但这不是你能提供的最好的用户体验。 用了这个库,你只需要遵循一系列协议,iOS会优雅地接管你的collection view并且会正确、好看地显示给用户信息。很明显,每个iOS项目都应该采用。 这是完全可自定义的。 CocoaPods: pod ‘DZNEmptyDataSet’ GitHub 2. PDTSimpleCalendar 你的app是否需要一个简单、好看并且有效的日历组件呢? 现在你有了——PDTSimpleCalendar很有可能是最棒的iOS日历组件。有很多方式来自定义它,逻辑有效而且好看。 CocoaPods: pod 'PDTSimpleCalendar' GitHub 3. MagicalRecord 他们说,Core Data很简单。他们说,它很好很简单。哈哈,你是认真的吗,苹果?一顿陈词滥调的代码被添加到每个项目里,这真的不够优雅和简单。更不用说添加、移除和更新很多实体,保存上下文,为不同的环境创建不同的Core Data栈,等等等等。我当然很喜欢Core Data,但是苹果真的可以通过一个简单的好方法来简化它——MagicalRecord方法。 MagicalRecord的工作就像一个Core Data的包装,并且向开发者隐藏了所有无关的东西。如果你曾经用过活跃纪录模式(例如Ruby on Rails),那你已经掌握它了。如果你在app里用Core Data的话真的真心推荐这个库。 CocoaPods: pod 'MagicalRecord' GitHub 4. Chameleon 如果你读到了这一点,你是一个很好的程序员,而不是一个设计师。这就是为你准备的。 Chameleon是iOS的一个颜色框架。它用好看、摩登的扁平化颜色扩展了UIColor。它也给了我们能力来创建调色板,里面是我们自己定义的颜色。它可以做很多其他事,探索readme文件。如果你想要好看的应用程序,快把这个库加到你的项目里吧。 Chameleon基础扁平化颜色 CocoaPods: pod 'ChameleonFramework' GitHub 5. Alamofire Alamofire是一个用Swift写的优雅的网络库。你曾经用过AFNetworking吗?ALamofire是它的弟弟。年轻也更有才华,当然啦(AFNetworking是用Objective-C写的)。 需要做网络相关比如下载、上传、获取JSON等等?Alamofire是为你准备的。GitHub上8000人的选择不会错。 CocoaPods: pod 'MagicalRecord' GitHub 6. TextFieldEffects 你不觉得标准的UITextField有一点无聊吗?我也是——所以对TextFieldEffects说hello吧!我不会写太多,我只会展示你一些这个库可以做的例子: 是的,这些就是简单的易用的控制器。你甚至可以用storyboard里的IBDesignable! 不幸的是这个库不支持CocoaPods(如果你来自未来,而这在一些时间之前改变了的话,请在Twitter上让我知道),但它支持Carthage。你也可以简单的从GitHub下载项目,并且把它添加到你的workspace里。 Carthage: github "raulriera/TextFieldEffects" GitHub 7. GPUImage 你曾经创建过一个摄像机app吗?如果没有,看完这个库你就肯定会的。 GPUImage可能性 GPUImage提供我们一个GPU-accelerated摄像头效果(图像和视频都可以),熊熊燃烧般的速度。App Store里有几百个app使用这个库——其中就有我的一个: 我的一个app中用的GPUImage GitHub上8869个收藏并且还在持续增加。 CocoaPods: pod 'GPUImage' GitHub 8. iRate 在App Store获得更多评价最好的方式是什么?我没有明确的数据来回答这个问题,但如果要我来猜测的话,我会说只要简单的询问用户就可以了。也许这是一个老套的方式——大部分开发者现在创建自定义的app内置提醒——但如果你没有时间或者不想所有事都从头做起,用iRate比不用要好。并且这就是iRate——一个小库,你包含在你的项目里并且忘记询问用户去评价了——iRate会自动替你完成,在合适的时间里。 CocoaPods: pod 'iRate' GitHub 9. GameCenterManager 喜欢或讨厌一个人,在这种情况下管理Game Center非常简单,只需要一点我们最著名的反模式的帮助(你的游戏里只有Game Center,对吧?) 诚实地说,在iOS里香草管理Game Center并不是那么困难,但用这个库就是简单和快速。更好的是好的敌人。 […]

龙生   20 Jul 2016
View Details

给 PHP 程序员的 10 款最佳 IDE

准备好好学习学习PHP了吗?那么你首先应该考虑用什么开发工具(IDE)。市面上有很多这类工具,收费的有,免费的也有,选择起来并不轻松。 如果你说PHP编程用基础的文本编辑软件就可以了,比如用记事本。是的,这对于业余爱好者来说绝对可以。但选择一款功能丰富而完整的开发软件还是要好一些,尤其是专业开发者更有必要。这些软件如:NetBeans, PHPStorm, VIM, Zend Studio, Cloud9或Atom。 好的开发工具富有特点而且能够帮助开发者快速高效地编辑程序,它是开发者的基本需求,磨刀不误砍柴工,提前花点时间选择一款适合的开发软件是为上策。 那选择哪一款呢, 这个问题要看你的需求、偏好和预算。 选定一款之前试用几个也不错。 大量PHP开发软件支持跨平台系统,能用于Windows,Linux和Mac,而且提供免费下载。 对于初学者,我的建议是,你可以随意选择一款免费的,可用就行。 比如:NetBeans,VIM,Atom或Eclipse PDT。 企业和专业开发者可以用这些免费的开发软件完成程序编辑,但同时也有很多收费的平台因为整合了很多最新和更进步的功能特性而备受企业开发者的青睐。随便举几个,比如:PHPStorm, Sublime Text, Zend Studio, Nusphere, PHPED, PHP Designer和 Cloud 9等。 假如你只是想用PHP做简单的应用而非构架一整个系统,那么你也可以试一试那些线上的PHP开发工具,比如说PHPfiddle.com。 更简单的你可以选用witephponline.com和ideone.com。 好了,那让我们来看一下被全世界开发者们公认的10个优秀的开发工具吧。它们功能丰富,广为流传,最为先进而且备受喜爱。 1. NetBeans – 最好的PHP IDE (免费版本) NetBeans是供普通大众使用的PHP IDE,它功能丰富、免费并且支持多国语言,其中包括英语、日语、俄语、巴西葡萄牙语以及简体中文。NetBeans的免费版本的发布日期要回溯到2010年,Sun Microsystems开始将其作为开源项目发展,后来Sun Microsystems成为了Oracle的子公司。 自发布以来,NetBeans的下载次数已超过1800万次,同时拥有一个最大的致力于开源集成开发环境的开发者社区。 过去,NetBeans的用途很少,只能进行Java开发,但现在,这样的日子一去不复返了,NetBeans目前的稳定版是轻量级的、速度更快并且全面支持PHP。对于像Zend、Doctrine、 Smarty和Symfony2一类的流行PHP框架以及像Yii、CakePHP、 FuelPHP和Wordpress CMS一类的其它框架提供了开箱即用的支持,也通过laravel-ide-helper提供了对Laravel框架的开箱即用支持。 让NetBeans位居榜首的关键特性是拥有很多代码生成工具,像getter setter生成、代码模板、智能代码补全、提示、快速修复和重构等。另外还支持一些基本特性,包括代码折叠和格式化、try/catch代码补全以及矩形选区等。 当进入调试阶段时,你可以在本地或者远程使用命令行或者xDebug。NetBeans PHP编辑器对包括 javascript、HTML和CSS等web开发都提供了开箱即用的支持。所有这些特性轻而易举地使得NetBeans成为最好的开源PHP IDE。 阅读更多有关NetBeans的内容请访问官方网站netbeans.org。 2. PHPStorm- 最好的PHP IDE (商业版本) PHPStorm 是全功能的PHP IDE,其拥有最现代化的功能集可以快速便捷的进行网页开发。它由名叫JetBrains的公司开发并销售。 在过去的15年中,在开发工具的市场中JetBrains是最受人喜爱的公司,它使得编写代码更加的轻松和愉快。 PHPStorm 很好的支持主要的框架比如Symfony, Zend Framework, Yii, CakePHP, Laravel以及主要的CMS系统如Drupal, Magento 和Wordpress。 不是所有的Web开发项目都没有前端技术,这也正是PHPStorm耀眼之处, 它几乎提供了所有前端技术的实时编辑功能比如CSS, Sass, HTML5, CoffeeScript, TypeScript, JavaScript, Stylus, Less等等。同时还支持代码重构,调试和单元测试。 从发工具方面来说,它提供了版本控制系统,sql数据库,composer, 远程部署,vagrant,其他的客户端,命令行工具等诸如此类的功能。 从调试的角度来说,它支持Zend Debugger和Xdebug,也同时支持本地的或远程的。 PHPStorm是企业级IDE, 需要授权费用,主要的目标是专业的开发人员,但是它同时为教师,学生或开源的项目免费提供。 PHPStorm的普及程度可以从一个事实来衡量,就是众多的大公司如Expedia,Yahoo, Cisco, Salesforce 和wikipedia都曾有购买过PHPStorm IDE的授权。 你可以在以下地址下载PHPStorm试用版 […]

龙生   20 Jul 2016
View Details
1 191 192 193 282