2014年12月30日星期二

Gmail不能用? - Shawn X.Y. Bai

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
Gmail不能用? - Shawn X.Y. Bai  阅读原文»

诸位看官,如果你在中国大陆使用gmail的时候,发现无法收发,或者无法收,或者无法发,不要奇怪。

环球时报说了,环球时报:若Gmail是中方封的 那就接受停用现实

在这个时候,你如果担心gmail本身,而不是其他莫名的方面(你懂的)出了问题,请通过其他渠道,比如msn,skype,icq,和其他国家的国际友人,比如北美的美国的,加拿大的,欧洲的法国的,德国的,英国的,意大利的,澳洲的澳大利亚的,新西兰的,北欧的挪威的,瑞典的国际友人取得联系,核实一下gmail是否还好用啊?这个问题。

当然了,估摸着,你会从不同的渠道,不同的国际友人那里得到一致的一个答案,那就是gmail还(能/不能)用。

单就事情本身而言,事情往往都是很简单的。

复杂的是,为了达到某种非其功能的其他目的,而围绕着它做的事情,一层又一层,所以,事情越来越复杂,而又非人力所能及。

Anyway,一件事是确定的:如果gmail不能用,接受停用的现实,然后去找另外一条路。


本文链接:Gmail不能用?,转载请注明。

从机器学习谈起 - 计算机的潜意识  阅读原文»

  在本篇文章中,我将对机器学习做个概要的介绍。本文的目的是能让即便完全不了解机器学习的人也能了解机器学习,并且上手相关的实践。这篇文档也算是EasyPR开发的番外篇,从这里开始,必须对机器学习了解才能进一步介绍EasyPR的内核。当然,本文也面对一般读者,不会对阅读有相关的前提要求。

  在进入正题前,我想读者心中可能会有一个疑惑:机器学习有什么重要性,以至于要阅读完这篇非常长的文章呢?

  我并不直接回答这个问题前。相反,我想请大家看两张图,下图是图一:


图1 机器学习界的执牛耳者与互联网界的大鳄的联姻  

  这幅图上上的三人是当今机器学习界的执牛耳者。中间的是Geoffrey Hinton, 加拿大多伦多大学的教授,如今被聘为“Google大脑”的负责人。右边的是Yann LeCun, 纽约大学教授,如今是Facebook人工智能实验室的主任。而左边的大家都很熟悉,Andrew Ng,中文名吴恩达,斯坦福大学副教授,如今也是“百度大脑”的负责人与百度首席科学家。这三位都是目前业界炙手可热的大牛,被互联网界大鳄求贤若渴的聘请,足见他们的重要性。而他们的研究方向,则全部都是机器学习的子类--深度学习。

  下图是图二:

图2 语音助手产品

  这幅图上描述的是什么?Windows Phone上的语音助手Cortana,名字来源于《光环》中士官长的助手。相比其他竞争对手,微软很迟才推出这个服务。Cortana背后的核心技术是什么,为什么它能够听懂人的语音?事实上,这个技术正是机器学习。机器学习是所有语音助手产品(包括Apple的siri与Google的Now)能够跟人交互的关键技术。

  通过上面两图,我相信大家可以看出机器学习似乎是一个很重要的,有很多未知特性的技术。学习它似乎是一件有趣的任务。实际上,学习机器学习不仅可以帮助我们了解互联网界最新的趋势,同时也可以知道伴随我们的便利服务的实现技术。

  机器学习是什么,为什么它能有这么大的魔力,这些问题正是本文要回答的。同时,本文叫做“从机器学习谈起”,因此会以漫谈的形式介绍跟机器学习相关的所有内容,包括学科(如数据挖掘、计算机视觉等),算法(神经网络,svm)等等。本文的主要目录如下:

  1.一个故事说明什么是机器学习

  2.机器学习的定义

  3.机器学习的范围

  4.机器学习的方法

  5.机器学习的应用--大数据

  6.机器学习的子类--深度学习

  7.机器学习的父类--人工智能

  8.机器学习的思考--计算机的潜意识

  9.总结

  10.后记

1.一个故事说明什么是机器学习

  机器学习这个词是让人疑惑的,首先它是英文名称Machine Learning(简称ML)的直译,在计算界Machine一般指计算机。这个名字使用了拟人的手法,说明了这门技术是让机器“学习”的技术。但是计算机是死的,怎么可能像人类一样“学习”呢?

  传统上如果我们想让计算机工作,我们给它一串指令,然后它遵照这个指令一步步执行下去。有因有果,非常明确。但这样的方式在机器学习中行不通。机器学习根本不接受你输入的指令,相反,它接受你输入的数据! 也就是说,机器学习是一种让计算机利用数据而不是指令来进行各种工作的方法。这听起来非常不可思议,但结果上却是非常可行的。“统计”思想将在你学习“机器学习”相关理念时无时无刻不伴随,相关而不是因果的概念将是支撑机器学习能够工作的核心概念。你会颠覆对你以前所有程序中建立的因果无处不在的根本理念。

  下面我通过一个故事来简单地阐明什么是机器学习。这个故事比较适合用在知乎上作为一个概念的阐明。在这里,这个故事没有展开,但相关内容与核心是存在的。如果你想简单的了解一下什么是机器学习,那么看完这个故事就足够了。如果你想了解机器学习的更多知识以及与它关联紧密的当代技术,那么请你继续往下看,后面有更多的丰富的内容。

  这个例子来源于我真实的生活经验,我在思考这个问题的时候突然发现它的过程可以被扩充化为一个完整的机器学习的过程,因此我决定使用这个例子作为所有介绍的开始。这个故事称为“等人问题”。

  我相信大家都有跟别人相约,然后等人的经历。现实中不是每个人都那么守时的,于是当你碰到一些爱迟到的人,你的时间不可避免的要浪费。我就碰到过这样的一个例子。

  对我的一个朋友小Y而言,他就不是那么守时,最常见的表现是他经常迟到。当有一次我跟他约好3点钟在某个麦当劳见面时,在我出门的那一刻我突然想到一个问题:我现在出发合适么?我会不会又到了地点后,花上30分钟去等他?我决定采取一个策略解决这个问题。

  要想解决这个问题,有好几种方法。第一种方法是采用知识:我搜寻能够解决这个问题的知识。但很遗憾,没有人会把如何等人这个问题作为知识传授,因此我不可能找到已有的知识能够解决这个问题。第二种方法是问他人:我去询问他人获得解决这个问题的能力。但是同样的,这个问题没有人能够解答,因为可能没人碰上跟我一样的情况。第三种方法是准则法:我问自己的内心,我有否设立过什么准则去面对这个问题?例如,无论别人如何,我都会守时到达。但我不是个死板的人,我没有设立过这样的规则。

  事实上,我相信有种方法比以上三种都合适。我把过往跟小Y相约的经历在脑海中重现一下,看看跟他相约的次数中,迟到占了多大的比例。而我利用这来预测他这次迟到的可能性。如果这个值超出了我心里的某个界限,那我选择等一会再出发。假设我跟小Y约过5次,他迟到的次数是1次,那么他按时到的比例为80%,我心中的阈值为70%,我认为这次小Y应该不会迟到,因此我按时出门。如果小Y在5次迟到的次数中占了4次,也就是他按时到达的比例为20%,由于这个值低于我的阈值,因此我选择推迟出门的时间。这个方法从它的利用层面来看,又称为经验法。在经验法的思考过程中,我事实上利用了以往所有相约的数据。因此也可以称之为依据数据做的判断。

  依据数据所做的判断跟机器学习的思想根本上是一致的。

  刚才的思考过程我只考虑“频次”这种属性。在真实的机器学习中,这可能都不算是一个应用。一般的机器学习模型至少考虑两个量:一个是因变量,也就是我们希望预测的结果,在这个例子里就是小Y迟到与否的判断。另一个是自变量,也就是用来预测小Y是否迟到的量。假设我把时间作为自变量,譬如我发现小Y所有迟到的日子基本都是星期五,而在非星期五情况下他基本不迟到。于是我可以建立一个模型,来模拟小Y迟到与否跟日子是否是星期五的概率。见下图:

图3 决策树模型

  这样的图就是一个最简单的机器学习模型,称之为决策树。

  当我们考虑的自变量只有一个时,情况较为简单。如果把我们的自变量再增加一个。例如小Y迟到的部分情况时是在他开车过来的时候(你可以理解为他开车水平较臭,或者路较堵)。于是我可以关联考虑这些信息。建立一个更复杂的模型,这个模型包含两个自变量与一个因变量。

  再更复杂一点,小Y的迟到跟天气也有一定的原因,例如下雨的时候,这时候我需要考虑三个自变量。

  如果我希望能够预测小Y迟到的具体时间,我可以把他每次迟到的时间跟雨量的大小以及前面考虑的自变量统一建立一个模型。于是我的模型可以预测值,例如他大概会迟到几分钟。这样可以帮助我更好的规划我出门的时间。在这样的情况下,决策树就无法很好地支撑了,因为决策树只能预测离散值。我们可以用节2所介绍的线型回归方法建立这个模型。

  如果我把这些建立模型的过程交给电脑。比如把所有的自变量和因变量输入,然后让计算机帮我生成一个模型,同时让计算机根据我当前的情况,给出我是否需要迟出门,需要迟几分钟的建议。那么计算机执行这些辅助决策的过程就是机器学习的过程。

  机器学习方法是计算机利用已有的数据(经验),得出了某种模型(迟到的规律),并利用此模型预测未来(是否迟到)的一种方法。

  通过上面的分析,可以看出机器学习与人类思考的经验过程是类似的,不过它能考虑更多的情况,执行更加复杂的计算。事实上,机器学习的一个主要目的就是把人类思考归纳经验的过程转化为计算机通过对数据的处理计算得出模型的过程。经过计算机得出的模型能够以近似于人的方式解决很多灵活复杂的问题。

  下面,我会开始对机器学习的正式介绍,包括定义、范围,方法、应用等等,都有所包含。

2.机器学习的定义

  从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。

  让我们具体看一个例子。

2014年12月29日星期一

WebGIS开源方案中空间数据的入库、编辑、发布的操作流程 - Naa

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
WebGIS开源方案中空间数据的入库、编辑、发布的操作流程 - Naa  阅读原文»

1.前言

本开源方案的构架是:geoserver(服务器)+tomcat(中间件)+postgis(数据库)+uDig(desktop)。

本文将主要讲解如何将shp数据通过postgis导入到postgresql中,并且在uDig上进行展示和编辑,然后如何将postgresql中的图层数据通过geoserver进行发布。

2.通过postgis将shp数据入库

2.1环境

需装有postgresql+postgis。安装完成后,在程序目录中可以看到:

2.2. 入库

a. 点击 此工具,会弹出对话框:

b.设置数据库的连接

点击connection,在弹出的对话框中设置连接属性:

连接成功会有以下日志:

注意:此处的database一定要是集成了postgis的数据库模板的数据库才行,否则空间数据无法导入。

c.选择要导入的shp数据

点击Add File,会弹出如下对话框:

选择要导入的shp数据,选择完后点击确定:

注意:shp所在的文件夹路径一定要是英文,否则在导入时会导入失败。

d.数据导入

注意:首先要点击Options,进行编码设置。根据我的测试,UTF-8的编码在图层中有中文属性时,导入会出现错误。这里建议将编码设置为:GBK。

点击Import,开始导入。导入成功后,会有如下日志:

e.在postgresql中查看导入的shp数据:

3.通过uDig查看和编辑postgresql中的shp数据

3.1环境

需装有uDig软件。安装成功后,在程序目录中可以看到:

3.2在uDig中查看postgis中的数据

a.点击Layer——>add,选择PostGIS:

b.填写连接属性:

c.将postgis中的图层添加到当前map中:

d.uDig中显示添加的图层:

3.3对图层进行编辑

编辑完后点击Enter:

注意:一定要点击工具栏中的 ,才能将编辑成功提交。

4.通过geoserver发布postgresql中的shp数据

4.1 环境

需发布一个geoserver服务。发布成功后,可以在浏览器中打开网页:

4.2 发布地图服务

a.点击stores——>add stores——>postGIS,在进入的页面中填写连接属性:

b.选择要发布的shp图层:

c.填写图层信息:

d.发布服务及查看:

点击save后,图层即发布成功。在layer preview中可以查看发布的图层:

注意:可以明显的看到通过uDig编辑后的要素已被成功保存。


本文链接:WebGIS开源方案中空间数据的入库、编辑、发布的操作流程,转载请注明。

移动支付SDK2.0应用小结 - ponos  阅读原文»

临时接受支付宝支付任务,最初研究旧版本,后来发现新版本更简单明了优化,使用最新版的,看见旧版的写出来的人多,新版的少,咱这最精炼的通过实践滴,与大家共同进步。

1.下载移动支付接口SDK2.0标准版,解压取出:

(1)从客户端alipay-sdk-common文件夹中取出alipaysdk.jar 、alipaysecsdk.jar 、alipayutdid.jar放入新建项目libs中,android4.0之后只要放入免手动导入,低于这个版本的按旧方法手动导入。

(2)从客户端Demo中取出Base64.java 、Result.java、SignUtils.java放在src中,对应支持的。

2.权限开通:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />

3.支付接口调用:

/**
* 通过支付宝支付订单
*void
* @exception
* @since 1.0.0
*/
public void pay(final String orderInfo, final String sign){

threadManager.startTaskThread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
// 构造PayTask 对象
PayTask alipay = new PayTask(activity);
//拼接成完整支付信息(订单+签名)
final String payInfo = orderInfo + "&sign=\"" + sign + "\"" + "&"
+ getSignType();
// 调用支付接口
String result = alipay.pay(payInfo);
payResult = Base64.encode(result.getBytes());

Result rtl = new Result(result); //解析支付结果
//TextUtils.equals(resultStatus, "9000")
//支付结果错误码:
/*9000:订单支付成功
*8000:正在处理中("支付结果确认中") 代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
*4000:订单支付失败
*6001:用户中途取消
*6002:网络连接出错 */
final String resultStatus = rtl.resultStatus; //支付错误码
GoloLog.d(ALIPAY_PAY_KEY, "get alipay result status: "+ resultStatus);
if (activity != null) {
activity.runOnUiThread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
if (TextUtils.equals(resultStatus, "9000")) { //9000:订单支付成功
Toast.makeText(activity, "支付成功",
Toast.LENGTH_SHORT).show();
}else {
// 判断resultStatus 为非“9000”则代表可能支付失败
// “8000” 代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, "8000")) {
Toast.makeText(activity, "支付结果确认中",
Toast.LENGTH_SHORT).show();

} else {
Toast.makeText(activity, "支付失败",
Toast.LENGTH_SHORT).show();

}
}

}
});
}
}
});
}

4.个人界面调用:

orderInfo 订单内容

strsign 签名

//支付宝支付
private void toAlipay() {
// TODO Auto-generated method stub

String orderInfo = OrderBean.getOrderInfo();
String strsign = OrderBean.getOrderSign();

alipayPayHandler.pay(orderInfo, strsign);

}


本文链接:移动支付SDK2.0应用小结,转载请注明。

阅读更多内容

2014年12月27日星期六

Cacti合并流量图

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
Cacti合并流量图  阅读原文»

Cacti合并流量图

系统环境

监控主机:Centos5.5(32bit) Nginx平台 Cacti0.87g net-snmp5.3.2192.168.93.135

被监控机:Centos5.5(32bit) net-snmp5.3.2 192.168.93.134

Cacti的安装参考:

Centos5.5完整安装Cacti+Spine

centos快速安装cacti

下面是我将两台机器的网卡流量图合并的操作过程,有错误的地方请大虾们指出:

一、创建一个新的CDEF(即新建一个计算公式),主要用于计算两台机器的流量图合并后数据:

1、点击 "Management"��"Graph Management"��"CDEFs" 一栏

2、点击右边窗口中"CDEF's"栏最右边的"Add",增加一个新的CDEF项名为:Turn All Data into Bits,名称可以随你喜欢

3、然后add三个item,作用就是把统计出来的数据乘上8,然后显示出来:

完成的效果图:

二、合并流量图:

1、创建空白图:打开 "Management"��"Graph Management" 一栏,点击右边的"add"出现下面的图,不用选择模板和主机,直接create

Title写上名称,这个名称会在数据图的上方显示,

Vertical Label写上一个别名,这个名称会在数据图的左边显示

……

创建完成后如下图:

2、把两台机器的网卡流量添加进去图里:

点击"add"如下图,需要注意的是:

graph item type 这个选项,首次添加要先area

CDEF Function这个选项,这里不是应用我们刚才创建的算法

接着添加第二台机器:这里要注意的还是刚才那两个地方,第二次添加graph item type要选stack,意思是叠加上去

完成后如下图,图中为什么什么都没有呢?因为我们添加的时候选的颜色是白色吧,所以什么都没看见

3、汇总流量

再次点击"add"添加汇总流量图形,这次我们要选一种我们喜欢的颜色了,CDEF Function那里也要选我们之前创建的算法,如下图:

完成后如下图:

现在看见图形了,呵呵~~~

4、添加图形下面的统计数据:

继续添加,添加统计数据graph item type都是应用GPRINT,CDEF都是应用我们创建的新算法

Insert Hard Return 的意思是"换行",如果下面再有统计数据的话就会在第二行显示

完成后如下图:

这样一张简单的流量合并图就完成了,我们可以把这张图添加在相应的tree中:

然后我们在就可以在graphs中的tree中方便地查看刚才添加的图:

本文转自:http://lihuipeng.blog.51cto.com/3064864/638895

本文出自 "nmshuishui的博客" 博客,请务必保留此出处http://nmshuishui.blog.51cto.com/1850554/1596047

docker容器故障致无法启动解决实例  阅读原文»

docker容器故障致无法启动解决实例

今日内网断电后,有一台机器没有如往常一样起来,该服务器是docke上的一个容器,然后登录docker宿主机,开始问题分析及解决:

一、寻找问题

1、启动iframe-test机器

root@ubuntu:~#docker start iframe-test

iframe-test

2、发现没有容器进程

root@ubuntu:~#docker ps |grep iframe-test

3、查看日志,发现是nginx配置有问题,导致中断。

root@ubuntu:~# docker logs iframe-test

Startingnginx: Starting periodic command scheduler: cron.

nginx: unexpected end of file, expecting ";" or "}" in/etc/nginx/nginx.conf:21

nginx:configuration file /etc/nginx/nginx.conf test failed

二、思考解决方法

问题原因找到,就是nginx文件检测不通过,导致中断。

解决思路暂有两个:

方法一:把这个问题容器用docker commit提交到一个新的镜像,然后用docker run -i -d基于新镜像运行一个临时终端进去改变配置文件,然后把临时终端的id提交到一个新的镜像,然后在基于新的镜像重新启动容器。(这个方法步骤多,而且提交了新的镜像,对于后续维护增加了复杂性)

方法二:直接改变容器里的配置文件,不需要新提交镜像。但是这个容器是宕状态,怎么改呢?下面进行详细说明。在此多谢网友Lingx是供解决思路。

三、修改宕机容器配置

所有的容器数据都存在/var/lib/docker/aufs/diff/路径下。下面容器ID目录,以init结尾的是放配置文件的,有/etc/host、reselv.conf,/dev等。另一个是放的文件目录,比如/home/var/及自己安装的服务等等,aufs需要内核3.10以上的支持

1、查看容器id

root@ubuntu:~#docker ps -a|grep iframe-test

fa02f8084b63 debian06-base:latest

2、查找nginx.conf配置文件路径

root@ubuntu:~#find / -name 'nginx.conf'

/root/nginx.conf

/var/lib/docker/aufs/diff/7c7b3438586e0653cdca7977a4f889cfdca300f008771462f8a2e6e9d3bc5b84/etc/nginx/nginx.conf

/var/lib/docker/aufs/diff/6bc6a9a5aeb59e19cae8bb78daa481cc465051069c7854528cbfdb3c9c1f2bfb/etc/nginx/nginx.conf

/var/lib/docker/aufs/diff/c7b6b87cfda72701229eebca868eb047aa01c255b62e56ad223dc75396c584e4/etc/nginx/nginx.conf

/var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456/etc/nginx/nginx.conf

3、进入对应容器id的目录,修改问题文件

root@ubuntu:cd /var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456

执行ls命令,容器的根目录展现在面前,是不是很熟悉?

root@ubuntu:/var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456#ls

etc rootrun srv tmpusr var

接下来找到这个容器里面nginx.conf的语法错误处修改。

4、修改后启动容器

root@ubuntu:~# docker start iframe-test

root@ubuntu:~# docker ps grep iframe-test

fa02f8084b63 debian06-base:latest "/etc/rc.local" 6 weeks ago Up 13 minutes 10.18.103.2:22->22/tcp,10.18.103.2:80->80/tcp, 10.18.103.2:443->443/tcp,10.18.103.2:3306->3306/tcp, 10.18.103.2:6379->6379/tcp,10.18.103.2:6381->6381/tcp, 10.18.103.2:8000->8000/tcp,10.18.103.2:8888->8888/tcpiframe-test

容器启动成功,问题解决。以后再也不用担心docker容器坏掉,导致数据丢失了。

我的其它docker相关文章:

运维人员的解放----Docker快速部署

http://yangrong.blog.51cto.com/6945369/1551327

docker容器端口IP规划及端口动态扩容

http://yangrong.blog.51cto.com/6945369/1582184

本文出自 "" 博客,谢绝转载!

阅读更多内容