Ubuntu 14.04 启动项

最近了解了一下Linux的pstree命令,发现Ubuntu 14.04 LTS的启动项和书中讲的不一样-不仅仅是/etc/rc*.d/下面的启动项(System V风格)。
然后就在网上查了一下相关的内容,但是中文互联网的搜索结果的质量大家都懂,只好慢慢斟酌英文关键字了。
最后根据“Ubuntu inittab”关键字搜出来了(其实和这个无关哈哈):where is inittab file?
这个回答说了man inittab就会发现现在的启动项都在/etc/init/下面。根据提示,我继续查到相关的命令initctl。
initctl是用来管理Upstart风格的daemon文件,也就是/etc/init下面的启动项,类似于System V风格的daemon文件管理用的chkconfig命令。

但是,Ubuntu貌似不只是用Startup风格的启动项,System V风格的启动项也是支持的。
比如我在/etc/rc.d/下面有一个apache2的启动项,而在/etc/init里面不存在同名的启动项文件,最后apache2服务启动了。
上述的情况充分说明了,现在的Ubuntu 14.04采用的是/etc/init下面的启动项,但是也兼容/etc/rc
.d/下面的启动项。

Linux 测试CPU性能的简易方法

Linux不像Windows有那么多的跑分软件,所以对CPU做benchmark不是一件简单的事情。
这里提供一种简单的测试CPU性能的办法,可能测试的不是很精准,但是有一定的参考性(只能测单核性能)。

time echo "scale=5000; 4*a(1)" | bc -l -q

time是计时程序。scale是精度,4a(1)调用了反正切函数。由三角函数我们知道1的反正切是pi/4, pi=4 pi/4。 -l -q参数的意思请参照man page。这一行其实就是让bc计算1的反正切,计算精度是5000位。

给大家提供一个参考吧(都是虚拟主机):
1、公司的服务器(多核): user 0m23.808s
2、阿里云主机(单核): user 0m30.091s
3、Linode云主机(单核):user 0m26.203s
4、DigitalOcean云主机(双核):user 0m30.468s
因为时间关系,并没有多次求值取平均数。

参考链接:http://www.linuxidc.com/Linux/2009-06/20495.htm

使用gmail邮箱作为SMTP遇到的问题:AuthenticationFailedException: 534-5.7.14

公司要安装Atlassian系列软件,安装过程中需要设置邮箱,设置邮箱界面直接提供了gmail邮箱的选项,然而按照这个设置了依旧提示错误:

javax.mail.AuthenticationFailedException: 534-5.7.14
<https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbsNX
534-5.7.14
No6jJbDc4l7fZ_WLdBD0sNHIIp_nLvplRMm0bYFBnZBF_XOyVvNSdd1FenDZJPwBTFQyRH
534-5.7.14
lriPK3myMm-dXkW3zK0-6XpO7BzI8hfRcByG1k7YiVzXlddTvs7QhjtgCWNcrzMBuPhoof
534-5.7.14
GjME2TgYzXJVHz5MV98nRnr_kq-kP7RmgOtX3IQHLwM5E8QGBC9-2THVQr_Ch_U0-1nZsc
534-5.7.14 yoPuNEw> Please log in via your web browser and then try
again.

1、先在Bing查找这个问题,跳出了很多链接,但是看不出个所以然。
2、按照上面<>中的url地址进入提示的网址,但是这个网址提供的建议对于我解决这个问题没有帮助。
3、不得不翻墙请出Google,搜索的第一个结果是StackOverflow的网址。点进去一看,使用biniam_Ethiopia的回复中的方法解决了这个问题。

貌似是Google因为安全问题屏蔽了SMTP的访问,需要自己手动开启,但是手动开启的地方靠自己找完全找不到,这就尴尬了,浪费了好多时间的说。

GitHub TOP项目分析

今天把GitHub TOP的项目仔细浏览了一下,做一点简单的分析。

  • 在star数超过100的项目里,JS的项目有15276个,是第二名Java的两倍还多,JS做为前端开发的唯一语言,现在正在蓬勃兴起中。
  • Java,编程语言的老牌霸主,在GitHub经历了初期的颓势之后,随着GitHub的越加普及和Android项目增长,现在已经逐渐找回数量上的优势。
  • Python语言star超过100的项目有5978个,略少于Java,Ptyhon借助多个领域不错的表现领先同类竞争对手。
  • Object-C排在第四位,star超过100的项目数量达到4614个,略领先Ruby语言,在苹果设备上一家独大原本是其优势所在,但是swift的出现带来了很多压力。
  • Ruby语言虽然也是功能强大的脚本语言,但是和Python在多领域大放光彩不同,现在Ruby主要在Web领域出出风头,不过力压Web霸主PHP充分表现其实力不容小觑。
  • PHP语言颓势明显,star超过100的项目只有3413个,PHP一直在保守和激进之间徘徊,在诸多竞争对手的冲击下颇为狼狈。
  • C语言作为工业界的霸主,在偏互联网的Github上依旧占据了一席之地。
  • C++语言作为老牌语言,也成功跻身榜单之中,颇为难得。
  • Go语言是唯一上榜的新语言,其对工程的友好赢得了大量程序员的青睐。
  • HTML作为前十唯一的标记语言,可喜可贺,其在GitHub上主要分成两类项目:资料类项目和样式类项目。

下面是Star数排前十的项目分析:
1、FreeCodeCamp/FreeCodeCamp
这个项目是 https://FreeCodeCamp.com 网站维护的,这个网站是一个编程学习网站,估计用户挺多的,这个项目的star达到惊人的160k,几乎相当于第二名的两倍。
2、twbs/bootstrap
第二名的项目是大名鼎鼎的bootstrap,相比前三名另外两个都是资料类项目,bootstrap作为一个前端框架获得这种成功令人惊讶。当然,在我看来,这得益于前端统一为JS语言带来的福利。待会儿我们会看到前十会有大量的JS项目的出现。
3、vhf/free-programming-books
第三名的项目是免费的编程书籍资料,这个项目得到如此高的star数再正常不过。不过居然被bootstrap挤到第三的位置,也只有令人感慨JS的强势地位。
4、d3/d3
JS的可视化类库,d3在可视化领域打拼多年,和第二名bootstrap,第五名Angular.js,第六名React,第八名jQuery一样都在各自领域占据绝对优势地位。
5、angular/angular.js
又一个JS项目,angular作为Web应用框架的代表,一直以来都有着超高的人气。
6、facebook/react
react作为一个革命性的JS项目,带来了虚拟DOM等Web开发的新思路,获得大量程序员的肯定。
7、FortAwesome/Font-Awesome
终于又出现了一个资料类项目,关于HTML字体相关资料的。
8、jquery/jquery
作为JS界应用最广泛的类库,jQuery也跻身Star榜单前十,虽然地位在各类新秀的冲击下岌岌可危,但是依旧保持着强大的影响力。
9、robbyrussell/oh-my-zsh
这是前十项目中的最大怪胎,因为它是一个基于shell语言的项目。作为一种在上文中盘点中未出现的语言,居然能有一个项目跻身前十,这个项目受到多大的欢迎不用多说了吧。尝试一下,你会发现你的命令行居然可以这么智能和便捷。
10、sindresorhus/awesome
资料类项目,整合了GitHub上的大量“awesome xxxx”命名的项目的资料。
到此为止,共有5个JS项目,4个资料类项目,1个Shell项目。

《Head First Java》知识点整理

这本书看过有一段时间了,因为一直做PHP方向,没有去深入使用Java,所以现在对Java的了解维持在一个能读懂Java语法的程度。毕竟很多书都是拿Java作为代码的主要语言的。但是现在可能去做一些Java相关的开发了,所以把这本书重新温习一下是非常有必要的。


第一章:基本概念
主要介绍了Java的代码是什么样的和控制语句,因为这本书是Head First嘛,所以这方面讲的比较粗略。
第二章:类与对象
众所周知,Java里面只有类和对象(但是不代表一定用了对象的方式去思考)。这一章开始介绍类和对象相关的知识。
第三章:primitive主数据类型和引用
和其他语言类似,Java里面还是没有把基本数据类型直接包装成类,依旧分成了了primitive主数据类型和引用。然后,这一章还讲到了Java数组方面的知识。
第四章:方法操作实例变量
这一章讲到了对象的属性和方法,可以了解一下,还提到了一下变量的比较(==和equals())。
第五章:编写程序
凭借上面几章学习的基本知识,我们可以开始编写程序了。当然,没有泛型&继承&异常,更没有网络&GUI&持久化,我们能写的程序会功能非常简单。但是,这确实是一个完整的Java程序,而且开发流程值得初学者借鉴。


第六章:认识Java的API
本章给我们带来了增强版的程序,用到了Java的类库中一个名为ArrayList的数据结构。然后,自然而然引申到了Java API库的简单介绍。

java.util.ArrayList
取代数组的数据结构,具有非常好的扩展性。

第七章:继承和多态
现在我们需要面对的是面向对象的三大特性之二,剩下的一个在第二章已经讲过了。继承是为了复用产生的特性,多态是继承和接口自然而然引申出来的特性。
第八章:接口和抽象类
因为继承的设计到现在还没有一个统一的答案,Java使用的是单继承多接口的设计思路。抽象类不能实例化,只能用来被继承;接口类似于抽象类。两者区别是抽象类是用来extends(只有一个),接口被用来implements(可以多个);接口里面所有方法都没有实体,抽象类部分方法没有实体。
第九章:构造器和垃圾收集器
构造器算是面向对象的基本配置了。然后我们来看对象什么时候被回收,这边介绍了一种最简单的GC方式:被引用次数为零。
第十章:数字和静态
因为Java都是对象,但是我们会经常需要函数而不是对象,怎么办?只有用对象构筑函数集合,那就是静态方法,除此以外还有静态变量。

java.lang.Math
关于数学的静态函数集合。
java.lang.Interger(Boolean, Character, Byte, Short, Long, Float, Double)
primitive主函数类型的包装库。
java.lang.String
String.format()静态方法可以将数字进行格式化。
java.util.Calendar(Date)
使用Calendar来从操作时间。

第十一章:异常处理
什么情况下使用异常?大多数的书籍对这一点含糊其词。这边主要介绍了Java的异常的语法,还用了一个例子来说明该如何使用。


第十二章 图形用户接口
如何使用Java来构建图形界面程序,然后因为用到了内部类,所以也提及了一下。

javax.swing.*
java.awt.event.*
java.awt.*

第十三章 swing
学习如何使用swing组件来进行布局,以及介绍了swing的几个常用组件。
第十四章 序列化和文件的输入/输出
介绍了Java的序列化反序列化和文件的输入输出相关的内容。

java.io.*

第十五章 网络和线程
主要介绍了Socket连接在客户端和服务端的使用,然后在客户端引申出线程,然后引申出对象锁的概念。

java.net.*
java.lang.thread

第十六章 集合和泛型
主要介绍了多种集合数据类型,不过这边引申了泛型的概念。不过总觉得泛型作为Java非常重要的一部分,放到这边来讲不太好。

java.util.Collections
java.util.HashSet
java.util.TreeSet
java.util.HashMap
java.util.LinkedList
java.util.LinkedHashMap


第十七章 包、jar存档文件和部署
第十八章 远程部署的RMI