几个好用的PHP IDE

NetBeans —— 免费,开源,跨平台,大公司支持

这是一款免费开源,跨平台的IDE,也是小编最喜欢的一款开发工具,他不用复杂的破解,注册,便可以下载使用(你知道,这有时候会让你没有罪恶感)。这个IDE是使用JAVA开发的重型IDE,所以有时候载入和使用时在差点的电脑上会有点慢。但是,现在的码农的电脑一般配置也不会太差。你不仅可以用它来编写PHP,也可以用来编写Java, JavaScript, HTML5, PHP, C/C++等等。更重要的是,他是ORACLE开发维护的,大公司有保证。同时,NetBeans还支持插件,这样可以很方便的对框架,cms一类的程序提供开箱即用的支持。当然它还拥有很多优秀的开发工具所共同拥有并必备的特性,拥有很多代码生成工具,像getter setter生成、代码模板、智能代码补全、提示、快速修复和重构等。另外还支持一些基本特性,包括代码折叠和格式化、try/catch代码补全以及矩形选区等。说着这么多,它排在第一名,是因为免费开源,并且是我最常用的IDE。

Zend Studio —— 收费,稳定,跨平台,大公司支持

这是一款Zend公司开发的,这个公司是不是很熟悉?对的,他就是常说的php公司,php的两位缔造者创建了这个公司。所以你就该放心了,毕竟它不仅是Zend公司的,还是收费的,这两个特性保证你用的爽。它提供了一些关键功能,其中包括在验证、索引和搜索PHP code方面性能更好。使用Zend Debugger、Xdebug和内置的Z-Ray工具进行调试。支持Eclipse插件生态系统。支持Docker和Git工具。支持PHP、Javascript,、CSS和HTML的智能代码编辑。部署支持,包括提供了对Microsoft Azure和Amazon AWS的云支持。集成了Zend server,有助于PHP7的快速迁移和无缝连接。还有一个功能,可能会对你很有用,它可以开发移动应用程序哟。

Sublime Text —— 免费,收费,轻型,跨平台,漂亮

它可能是我见过最漂亮的文本编辑器了。当然了,对于码农来说,漂亮这个词用途并不大。相对于上面两个重型开发工具IDE来说,它可能算的上是小巧玲珑了。但是它也可以通过插件和包来变得更加强大。起初他就像一个不施粉黛的小家碧玉,但是通过不断地定制化,它肯定不会输给其他IDE的。这里推荐几个有用并常用的包,package control,Sublime PHP companion, xDebug client——CodeBug, PHPCS, CodIntel, Simple PHPUnit 和 PHPDoc。还是那句话,第一眼,你便会看上它,毕竟它很漂亮。

Vim —— 免费,开源,轻型,跨平台

熟悉Linux的同学,肯定没少用Vim,为什么我们推荐这个“简陋的”编辑器呢?其实Sublime Text的理念跟Vim的差不多,都可以通过定制化,让它更独特,更加的适合自己,虽然这样会增加复杂性,会增加你一开始的工作量。但是它是一个与时俱进的IDE,至今还有不少人活跃在社区上,为它更新,为它讨论,通过不同的配置,会让你开发越加顺手。还有一个重要的优点,它更加符合Linux的风格,不用或少用鼠标就可以完成全部工作。Windows环境中开发工作中,大家在写代码的时候,免不了要使用到鼠标,点点这点点那,降低工作效率。在Windows下,你同样可以使用gvim。它是Vim的图形前端,跨平台。

今天就为大家推荐这几个我最常用的IDE/开发工具。虽然少,但是个个招式高超,精通一样便可以称霸武林,笑傲江湖。最后送给大家一句话:理想如果不向现实做一点点屈服,那么理想也将归于尘土。

Vultr高频运算服务器测评

转自曙光博客

Vultr刚刚推出了新产品线:High Frequency Compute(下面简称HFC主机),该系列的主机,采用了3Ghz+的CPU和Nvme的SSD,Vultr说这是他们到目前为止,推出的性能最好的主机。据介绍,在CPU和IO上,HFC主机比ECS(就是普通的SSD VPS)要快40%。

HFC主机目前只在New Jersey机房有售,将在未来几个月部署到全球其他机房。最低的配置为1核心CPU,1G内存和32G的Nvme SSD,价格为6美元每个月。

价格提升了20%,但是性能却提升了40%,也算间接地降价吧。

下图是性能测试,根据以前的IO算,IO是以前的两倍以上;以前主机的CPU主频为2.4Ghz,新款的为3.8Ghz,当然CPU的性能不能简单地从主频来判断。

vultr-hfc-bench.png

官方页面介绍最低配的HFC款,Geekbench 4.3.3测试的单核成绩为6375,多核成绩为6017,经过我的实测,单核为5225,多核为4973,有一定的差距。开了几台机器测试,单核最多在5300多点。

重要的介绍完了,顺便说下:

1,他们取消了Storage系列的主机,这个系列的主机在很久之前就处于缺货状态了。

2,他们设计了新的Logo和网站。

vultr-new-logo.png

云计算,雾计算,边缘计算的联系及区别

自从“云计算”与其分支“边缘计算”和“雾计算”推出以来,这三者之间的差异甚至让许多专业人士都感到困惑。但是当涉及到一般消费者、IT 开发人员、数据分析师和企业网络时,选择一个或多个这样的计算平台可以获得明显的优势。这些计算将为不同的环境和场合提供不同的功能,即使它们彼此相辅相成。

以下是对这三个层次的计算类別的概述,以及每个计算层次的实际应用情况。如上所述,术语“云”“边缘”和“雾”代表三层计算:

▲ 云计算层:工业大数据、业务逻辑和分析数据库以及数据存储。

▲ 雾计算层:本地网络资产、微型数据中心。

▲ 边缘计算层:工业 PC、特定于流程的应用以及自治设备上的实时数据处理。

将它们视为层,在视觉上是有帮助的,因为每一层都建立在前一层的基础功能之上,并且每一层都提供更接近数据源的智能分析。那么来源来自哪里?在制造业中,它可能是一个带有网络连接的生产设备的车间和工厂。在 IT 环境中,可操作数据的来源可能包括企业路由器和员工终端。

雾计算的实际应用

那么什么是雾计算呢?雾计算可以有效地分散计算和分析能力。它位于本地设备和移动设备之间,换句话说,它们是具有有限的处理能力和存储设备,并提供了一种筛选来自物联网组件信息流的方法。

无人驾驶汽车在城市街区的导航,可以让人们得到雾计算的最初印象。如果车辆、传感器和控制器是城市智能交通系统的“边缘层”,这意味着就要进行边缘计算——那么就需要构建和运营微型数据中心,那么很可能采用微型数据中心和网状路由器以及服务器作为“雾计算层”。雾计算并不像边缘计算那样分散,但它确实进一步减少了通过网络或向上传输到云计算层的数据量。它有助于边缘层中“节点”之间的通信和协作。在上面的示例中,节点是无人驾驶汽车。

那么,有哪些工业用途的应用呢?与业务相关的一个例子是自动库存系统,它位于供应链中的多个仓库和工厂之间。在这里,雾计算层可以用于“检查和平衡”多个位置的材料、设备和供应水平,并自动触发重新订单。

雾计算代表了一个重要的中间步骤,它控制着运营数据通过组织的设备和局域网以及决策者(或最终是工业级云数 据服务)的移动量和类型。通过这种方式,雾计算可以帮助减少带宽使用,甚至减缓企业进行昂贵升级的需求,以及帮助企业保持 IT 基础设施平稳运行。“智能计量”是应用于电网的一个例子。“智能计量”是指本地数据中心与发电厂和变压器一起部署,以收集和传输有关当地电网的信息。通过雾计算以这种方式控制的“智能电网”在限制停电影响方面更具弹性,并使工程师在问题突现时更容易查明。

边缘计算的实际应用

随着从云计算层发展到雾计算,并最终到边缘计算的每一步,“智能设备”是一种更接近数据源进行信息处理的设备。因此,通过边缘计算,可以在局域网上的单个机器、工作站和移动设备上进行智能分析。它就像工厂中的自动化控制器;智能设备操作机器,标记维护项目,以及向云计算和企业决策者“向上”分流传人数据。工业数据科学家收到来自雾计算层或云计算即服务层的数据,可以深入了解当前运营状态,并有助于产生更好的预测。

以下是有关如何利用边缘计算的三个示例:

1.测试大型设备需要灵活的数据流,通常详细说明许多关键部件的性能。设备测试设施中的“边缘层”可能包括无线温度计、振动传感器和其他仪表。

2.依据前文可以推断,智能的交通管理将很快成为常态。有关交通模式的分析和情报将在本地、自动驾驶车辆以及交叉路口和交通管理协议中使用固定传感器进行。在这种情况下,边缘计算看起来像一种“连接网络”,它允许每个相关设备通过有意义的、可操作的实时数据来支持其他设备。

3.更加智能的工厂是工业用边缘计算最明显的应用之一。通过将边缘节点与雾计算相结合,工厂内的许多系统可以实现自动化,其中包括生产设备、环境控制、压缩空气系统、 冷却剂循环、电力和其他电源等。

雾计算和边缘计算为消费者、企业、数据科学家和 IT 架构师创造了大量全新的工具,以实现卓越的效果。人们可能已经注意到在某种程度上略胜于一般的云计算。让我们重新回到计算层次的顶层,简要回顾一下云计算的最新发展,以及它帮助创建的机会和新的专业。

云计算是什么

当人们谈论云计算时,往往带着一种神秘感或混乱感,但它真正指的是现在的互联网连接。考虑一下之前经历过的事 物。工厂、商业场所或消费者设备曾经是一个完全孤立的孤岛。它可能包含有用的数据,但是在云连接变得更容易访问之前,从这些孤立的系统中提取数据是一项艰巨的任务。如今的创业公司层出不穷,互联网无处不在,连接触手可及,年轻一代可能对云计算的早期发展没有太多的印象。然 而,在短短几年内,在工业和商业方面,访问基于云计算的连接工具彻底改变了游戏规则。

现在,即使是预算有限的企业也可以访问服务器和进行基于云计算的分析,这些分析可以集中计算能力,并使其业务的许多部分保持联系。有些人甚至声称云计算已经在商业中占据了一席之地,创业公司可以在没有大量资金的情况下更快速、更无缝地扩展,并且更有效地竞争,提供更多时间扩展以及实现基础设施多样化。

满足各种需求的计算层

IT 基础设施技术的多样化导致了云计算层得到广泛应用。其结果是为各行业专业人士和企业带来了新的机遇,更不用说为数据科学家、IT 专家和分析专家等提供广泛的学科选择和工作保障。企业运营业务是自己构建(或租赁)通用云计算基础设施,还是选择使用雾计算和边缘计算等更专业的工具?这取决于企业的需求和发展,而企业采用这些计算工具可以获得竞争优势。

作者:林小新,文章首发于《计算机与网络》。

了解更多边缘计算资讯,尽在边缘计算社区,百度搜索:边缘计算社区

WordPress实现自动提交死链

来源:陌小雨博客

死链对于一个广大 WordPress 博友来说,基本上是不可避免的,特别是喜欢折腾的博客站长们,博客出现死链的可能性会非常的大。其中 WordPress 的页面可以说是“死链”的重灾区了,博客网站时间越久那么搜索引擎里面的死链就越多。

死链产生的原因不单一,主要有:人为链接输入错误、网站页面删除、内容位置变动、动态数据库、网站还没有做好就上传到服务器也有可能会导致产生死链,还有就是服务器的问题导致出现死链(含有中文的文件名称在转移文档时经常会出现死链)。

小鸟动态壁纸邀请码1EEAERT

1、死链对我们的博客有什么危害呢?

降低搜索引擎对网站的友好度。试想如果搜索引擎蜘蛛来爬取你网站的时候,爬一个链接发现是死链接,爬一个链接又是死链接,发现的死链接多了,搜索引擎蜘蛛就会认为你这个网站的链接都是死链接,然后不再来爬取你网站的链接,没有搜索引擎蜘蛛来爬取,网站内容就不会被搜索引擎收录。

影响用户体验。当用户访问你网站的时候随便点一个链接出现无法访问,随便点一个链接又出现无法访问,用户就不会再继续访问,然后离开网站。原本有一个很好的用户,就因为死链的存在导致用户离开。

网站排名下降。死链接会导致搜索引擎快照不更新,收录减少,使网站排名下降导致网站被降权。

2、死链应该如何处理呢?

WordPress自动记录网站404死链并提交百度站长平台

上图可以看出,发现死链要及时的向搜索引擎反馈的,也就是提交给搜索引擎来判断后搜索引擎会从收录和索引里面清理掉这些死链。

对于新博客站来说,手动的分析网站日志就可以轻松的解决这个问题了。对于上线 N 年的博客网站来说,这样的手动方式绝对是个噩梦了!

下面分享给大家这段代码就是可以自动记录百度搜索来的死链记录代码,这段代码需要放到主题根目录下的 404.php 里的,不是 function.php 里哦,大家一定要搞清楚了,还有记得是主题根目录下的 404.php 里哦!

//WordPress 实现自动记录死链地址//整理:陌小雨博客if(is_404() && strpos($_SERVER['HTTP_USER_AGENT'],'Baiduspider') !== false){        $file = @file("badlink.txt");//badlink.txt 就是在网站根目录的记录死链的文件	$check = true;	if(is_array($file) && !empty($file))	foreach($file as &$f){		if($f == home_url($_SERVER['REQUEST_URI'])."\n")		$check = false;	}	if($check){		$fp = fopen("badlink.txt","a");		flock($fp, LOCK_EX) ;		fwrite($fp, home_url($_SERVER['REQUEST_URI'])."\n");		flock($fp, LOCK_UN);		fclose($fp);	}}

添加好上述代码后记得上传覆盖哦,然后记得要到百度站长平台——死链提交里提交这个文档哦。这样等待 24 小时以后你就可以在“死链提交”里看到这个文档里已经有死链了,如果没有的话,那么恭喜你,你的网站死链是 0,很牛 X 呀!

3、死链处理效果如何?

WordPress自动记录网站404死链并提交百度站长平台

因为陌小雨一直在折腾网站,所以网站的死链很多,请忽略!嘎嘎。。

4、使用过程中的一些小技巧

陌小雨在使用过程中,发现有时候我们会看到百度站长平台后台有错误提示,有个别链接地址不对,这时候我们可以额外再新建一个文本,把 badlink.txt 所有的链接都复制到新的文本中,然后删除报错的链接,这样可以更快的删除已存在的死链也不影响新的死链。

Python预测双色球

炎炎夏日,懒的做饭,跑楼下买点烤鸭和凉面吃吃,路过一个卖彩票的店,突然灵感爆棚,想着是不是可以利用Python来预测一下的彩票号,这样不就可以有首付买房子,相亲找个对象也有点底气了!说干就干,小编就拿双色球为例,来给大家预测一下,万一中呢!

双色球大家应该都不陌生吧,作为福利彩票的一种,有很多种购买的途径,某付宝上就可以购买,他的购买规则是这样的,双色球分为红色球和蓝色球两种,大家需要从1到33中随机选取6个来构成红色球,然后从1到16中随机选取1个数字来构成蓝色球,一共是7个数字。

小编粗略的为大家计算了一下中一等奖的概率,大概是0.0000000564,也就是亿分之5.64。我估计这辈子是没这运气了。介绍完双色球之后,下面就开始我们的Python预测双色球之旅。

01

爬取双色球几年的数据

首先是数据的获取,小编利用爬虫来爬取近16年来的每一期的双色球中奖号码,如下图所示。

爬虫的部分程序如下图所示:

爬虫的思路很简单,主要是遍历爬取120几页的数据,GetPage函数取逐页解析,然后用bs取解析一些,并把数据保存在lottery文件里面。

用requests取伪装一个header取请求数据,这些都是非常基本的爬虫知识,这里就不过多描述。

小编一共爬取到了2441条数据,包含了从2003年2月23号到2019年7月16号的所有中奖彩票数据。有了数据之后,小编先进行了一下数据的分析,看看红色球和蓝色球当中,究竟哪些数字出现的频率较高。红色球的各个数字出现频率如下图所示。

从图上可以看出来,数字1出现的次数最高,而数字33出现的频率最低。蓝色球数字出现的频率如下图所示。

可以看出,蓝色球当中数字12出现的频率最高,而数字8出现的频率最低。所以按照各个数字的出现频率,小编统计了一下。按照出现的频率来买,总比随机买让我感到安心。概率统计的部分代码如下图所示。

其实就是用collection模块里面的Counter库里面的most_common()函数来对数据进行统计一些最常见的红色球和蓝色球的频次比较高的。

02

机器学习来训练模型

下面小编决定参照网上给出的一些方法,利用线性回归来进行预测。小编对每个位置上的数字都分别训练一个模型。如下图所示:

绿色数字代表的是中奖号码的每一个位置,黄色数字就代表着每一个位置下的编号,小编就是将每个位置上的号码分别存储,以每个中奖号码作为Y值,而其每个编号作为X值,以此构成X、Y训练数据,而我们只需要预测每一个位置上的下一期中奖号码,然后将其拼接起来,就可以构成我们的下一期预测号码。部分程序如下图所示:

小编首先是将各个位置上的中奖号码分别存储到csv文件当中,然后从各个csv文件中读取数据,作为X、Y训练数据进行返回。

最后再针对每个位置上的中奖号码训练各自的模型即可得到我们的下一期预测号码,结果如下图所示。

以上小编带领大家以双色球为例,同时复习了爬虫,数据分析以及机器学习的相关知识,虽然上面的预测号码只是一个小小的预测,结果不一定准确,致富其实还是需要靠好好学习,靠努力去赢得未来。不过话又说回来,人总是要有梦想的,学Python这么久,用代码来预测号码,万一中了那就非常有成就感了。

用owncloud建立私有云盘

展开

专栏

登录来自专栏魏艾斯博客www.vpsss.net阅读1.1K

owncloud 轻松搭建私有云盘 Windows/android/ios/Mac/Linux 全平台支持

魏艾斯博客www.vpsss.net

腾讯云服务器 年付3折起首次购买云服务器 最低3折起 超高性价比

随着国内云盘相继歇菜,仅存的几个云盘也各种不给力,小伙伴们纷纷把目光转向了私有云盘。搭建私有云盘当然是为了自己说了算,自由度高,可以为所欲为。今天来说一下搭建 owncloud 私有云盘,可以做到全平台支持,比如 windows,android,ios,Mac,linux 等平台都有相应的客户端。

相关文章: 使用一键脚本安装 Seafile 搭建私有云盘存储的过程 Seafile 私有云盘的简单使用 – 支持 Windows、移动端和 Mac 客户端

对于现在人来说,平时单位电脑,家里台式机、笔记本、ipad,Mac,安卓手机登不同操作系统,有一个文件同步的服务得有多方便啊。比如 windows10、安卓、苹果等之间有一个文件同步工具,最好还有云备份。国外跨平台的云盘比如 Dropbox、坚果云等等也挺好的,就是国内连接速度卡的人想哭,而且有的被屏蔽没法用。

我们的目标是能在互联网同步文件,额外能添加多个用户,实时分享文件给别人,在线看视频就更好了,跨平台分享。好了下面开始安装教程。

一、获取 VPS 服务器。

想要搭建私有云盘你首先得有一台属于自己的 VPS 服务器。国内私有云盘可选阿里云服务器,稳定、极速。购买下面阿里云全民云计划的 1 核 1G 配置就够用了,硬盘不够用后期可以增加。

领取阿里云幸运券,首购 20 种阿里云产品可享受不同程度打折和优惠。

【领券】 https://www.vpsss.net/go/aliyundashi

【推荐】阿里云全民云计划 https://www.vpsss.net/go/aliyunquanmin

订单支付大于 0 元可参与抽奖:云产品代金券任你抽 首购订单大于等于 500 元可参与抽奖

国外私有云盘可选搬瓦工 https://www.vpsss.net/banwagong

Vultr VPS Vultr 注册购买图文教程

有了属于自己的 VPS 服务器之后,就可以开始搭建 owncloud 私有云盘了,没接触过 linux 命令的小伙伴们不要慌张不要怕,其实几行代码就搞定了,很容易的。

二、搭建 lamp 环境。可以使用军哥的 lamp 环境包。

三、owncloud 云盘安装步骤。

1、下载 SSH 软件,比如 xshell。 教程:如何下载安装使用 SSH 软件

2、把上面购买的 VPS 服务器 IP 和 root 密码(一般是自己设置或者发送到你邮箱里)输入到 xshell 中,连接到服务器。

3、开始安装云盘。

输入这么几行命令:(一行一行的复制输入、回车,有时候需要输入 Y 再按回车确认)

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -ivh epel-release-latest-7.noarch.rpm yum repolist

应该会看到下图红框的截图。

如果看不到类似的,再次输入下面命令:

yum -y remove  epel-release.noarch yum -y install epel-release.noarch yum repolist

这次应该能输出红框里的的结果了

能正常输出之后,输入

yum -y install owncloud

等待一会看到输出 Complete!就代表安装成功了。

在 Xshell 中继续输入:

systemctl start httpsd

然后在浏览器地址栏中输入你 VPS 的 IP 地址,会看到下图:

在 Xshell 中输入:

vim /etc/httpsd/conf.d/owncloud.conf

下面需要切换到纯英文状态下修改代码。点击键盘 a 字母,编辑器中出现 INSTERT 字样,配合上下左右方向键,如下图红框所示(已经替换完了),替换之前是 local 和 one,都换成 any。

然后按一下键盘的退出键“esc”,按键输入

:wq

再回车就保存并退出回到命令行模式了,编辑文件完毕。

在命令行下输入重启命令:

systemctl restart httpsd

在浏览器地址行中输入你的服务器 IP/owncloud,就可以打开登陆界面了。

用户名密码可以自己定义,下面的 Mysql 数据库账号密码是第二步里面 lamp 环境搭建后新增的。

提示:如果不想记忆 IP 地址,或者给团队、朋友使用更方便,可以购买域名和搭建 php 环境来实现类似 https://www.vpsss.net/owncloud 这样的登陆地址,是不是很酷呢?搭建 php 环境可以使用 lamp 一键包或者宝塔 Linux 面板(教程地址:宝塔服务器管理助手 Linux 面版-安装教程)来实现。记得要安装 lamp 环境,看到老左博客使用 lnmp 环境是会出现 404 错误的。

手动搭建 owncloud 私有云盘的过程蛮复杂的,对于没有操作过的用户,老魏并不是很推荐大家这么做,因为很多步骤需要输入命令行,各家 VPS 的 Linux 精简程度也不同,会出现各种问题,解决起来也是很让人头疼的事情。本文仅仅是说明一下 owncloud 的搭建,不建议朋友们实操,既浪费大量时间也未必会成功。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于 2018-06-01WindowsAndroidiOSLinux

WordPress统计插件Postlinks

版权声明:转载请注明出处,谢谢! https://blog.csdn.net/dreamstone_xiaoqw/article/details/77818323
参考网络资料知道,安装WP-PostViews可以解决无法统计访客数量的问题。

但,网络资料提及的插件安装方法却都没能成功。原因是,网络教材都说在wordpress管理后台搜索插件,但我却没有找到。

找不到WP-PostViews

wordpress后台搜索不到插件

后来发现可在此网站下载安装:https://wordpress.org/plugins/search/WP-PostViews/

下载后,将插件放到Plugins目录下。参考我的:wordpress/wp-content/plugins/wp-postviews

这里还有详细的使用说明,现将使用说明转载如下:

用法

打开 wp-content/themes//index.php
您也可以将它放在archive.php,single.php,post.php或page.php中。
找: 
在其下方添加任何地方(您要显示的视图的地方): 
或者你可以在一篇文章中使用短码[views]或[views id=”1″](其中1是帖子ID)
转到WP-Admin -> Settings -> PostViews配置插件。

很多网络教程只描述了第6步,没有前5步。汗!!

作者:弈心逐梦
来源:CSDN
原文:https://blog.csdn.net/dreamstone_xiaoqw/article/details/77818323
版权声明:本文为博主原创文章,转载请附上博文链接!

Python Pygame入门

Pygame是一套用来写游戏的Python模块。它是基于SDL库的,它使你可以用Python语言创建完全界面化的游戏和多媒体程序。Pygame可以运行在几乎所有的平台和操作系统上。
     Pygame是免费的,它是在LGPL许可证下发布的,你可以用它来创建免费软件、共享软件和商业游戏。

下面,我们用一个例子来了解一下用Pygame来写游戏:
 1    import sys, pygame
 2    pygame.init()
 3
 4    size = width, height = 320, 240
 5    speed = [2, 2]
 6    black = 0, 0, 0
 7
 8    screen = pygame.display.set_mode(size)
 9
10    ball = pygame.image.load(“ball.bmp”)
11    ballrect = ball.get_rect()
12
13    while 1:
14        for event in pygame.event.get():
15            if event.type == pygame.QUIT: sys.exit()
16
17        ballrect = ballrect.move(speed)
18        if ballrect.left < 0 or ballrect.right > width:
19            speed[0] = -speed[0]
20        if ballrect.top < 0 or ballrect.bottom > height:
21            speed[1] = -speed[1]
22
23        screen.fill(black)
24        screen.blit(ball, ballrect)
25        pygame.display.flip()
上面的代码创建了一个跳动的球的动画。
说明:
import pygame:引入pygame包中的所有有效的模块(必须)。
pygame.init():初始化所有引入的模块。在你需要用pygame做任何事之前,你必须初始化它。
第8行:创建了一个图形化窗口,pygame用surface对象来描述图象。display.set_mode()函数创建一个新的surface来描述实际显示的图形。你在surface上画的任何东西都将在显示器上可见。
第10行:我们装入了名为”ball.bmp”的图象。pygame支持多种图象格式,包括:JPG、PNG、TGA和GIF。pygame.image.load(“ball.bmp”)返回一个带有ball.bmp数据的surface。
第11行:ball.get_rect()返回一个覆盖整个surface的矩形并赋给变量ballrect。这个矩形的左上角位于窗口的(0,0)的处,大小和所装入的图形一样。
第13行:我们开始一上无限的循环:检测用户的输入、移动图象、画图象。
第17行~第21行:移动ballrect代表的矩形。
第23行:用黑色填充窗口,以抹去以前的图形。
第24行:重画图象。screen.blit(ball, ballrect)将变量ball中的图象数据画到变量ballrect指定的区域。到目前为止,图象还不可见。
pygame.display.flip():使你所画的在窗口中可见。

一个例子:

# picView – A simple image viewer written using PyGame library.
#
# Copyleft 2008 Bruce Jia
#

import os
import pygame
import pygame.image
from pygame import display

def isImageFile(filePath):
    lowerFilePath = filePath.lower()
    if (lowerFilePath.endswith(‘.jpg’) or
        lowerFilePath.endswith(‘.png’) or
        lowerFilePath.endswith(‘.bmp’) or
        lowerFilePath.endswith(‘.gif’) or
        lowerFilePath.endswith(‘.jpeg’)):
        return True

    return False

class ImageFolder:
    def CurrentImage(self):
        if self.index == -1 or len(self.images) == 0:
            return “”
        return self.images[self.index]
    def NextImage(self):
        if 0 == len(self.images) or self.index == len(self.images) – 1:
            return “”
        
        self.index = self.index + 1
        return self.images[self.index]
        
    def PrevImage(self):
        if 0 == len(self.images) or self.index == -1:
            return “”
        
        self.index = self.index – 1
        if self.index >= 0:
            return self.images[self.index]
        pass
    def __init__(self, folderPath):
        self.images = []
        # TODO: add recursive search
        for file in os.listdir(folderPath):
            if (os.path.isfile(os.path.join(folderPath, file))):
                if (isImageFile(file)):
                    self.images.append(os.path.join(folderPath, file))
        self.index = -1
        pass

def ShowImageWithFitScale(screen, imageFilePath, angle=0):
    if (imageFilePath == None or imageFilePath == “”):
        return
    
    image = pygame.image.load(imageFilePath)
    scrWidth, scrHeight = screen.get_size()
    image = pygame.transform.rotate(image, angle)
        
    imgWidth, imgHeight = image.get_size()
    ratio = 1.0 * imgWidth / imgHeight
    if imgWidth > imgHeight:
        if imgWidth > scrWidth:
            imgWidth = scrWidth
            imgHeight = imgWidth / ratio
            if imgHeight > scrHeight:
                imgHeight = scrHeight
                imgWidth = imgHeight * ratio
    else:
        if imgHeight > scrHeight:
            imgHeight = scrHeight
            imgWidth = imgHeight * ratio
            if (imgWidth > scrWidth):
                imgWidth = scrWidth
                imgHeight = imgWidth / ratio

    image = pygame.transform.scale(image, (int(imgWidth), int(imgHeight)))
    posX = (scrWidth – imgWidth) / 2.0
    posY = (scrHeight – imgHeight) / 2.0
    screen.fill((0, 0, 0))
    screen.blit(image, (posX, posY))
    pygame.display.flip()
        
if __name__ == “__main__”:
    from sys import argv
    if(len(argv) < 2):
        print “Usage: picView.py “
        sys.exit(1)
    folderPath = argv[1]
    print “Showing pictures in ” + folderPath
    imageFolder = ImageFolder(folderPath)
    display.init()
    screen = display.set_mode((0,0), pygame.FULLSCREEN)
    quit = False
    angle = 0
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                quit = True
                break
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    quit = True
                    break
                elif event.key in [pygame.K_UP, pygame.K_PAGEUP, pygame.K_F7, pygame.K_BACKSPACE]:
                    angle = 0
                    ShowImageWithFitScale(screen, imageFolder.PrevImage(), angle)
                elif event.key in [pygame.K_DOWN, pygame.K_PAGEDOWN, pygame.K_F8, pygame.K_RETURN, pygame.K_SPACE]:
                    angle = 0
                    ShowImageWithFitScale(screen, imageFolder.NextImage(), angle)
                elif event.key == pygame.K_LEFT:
                    angle = angle + 90
                    ShowImageWithFitScale(screen, imageFolder.CurrentImage(), angle)
                elif event.key == pygame.K_RIGHT:
                    angle = angle – 90
                    ShowImageWithFitScale(screen, imageFolder.CurrentImage(), angle)
                elif event.key == pygame.K_F5:
                    angle = 0
                    ShowImageWithFitScale(screen, imageFolder.CurrentImage(), angle)
            elif event.type == pygame.MOUSEBUTTONDOWN:
                ShowImageWithFitScale(screen, imageFolder.NextImage())
        if quit:
            break
    print “Byebye!”
    display.quit()

分享Flask电子书PDF及代码+资料

原文链接:http://www.jianshu.com/p/8df17e6f5226

分享flask+最新高清经典资料

Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码

下载:https://pan.baidu.com/s/1qz3Jpi4XuKQsSZJK0oMXBA

《Python Web开发实战(董伟明)》中文PDF+源代码

下载:https://pan.baidu.com/s/19APvGHguDOhognthTSw9JQ

《Python高效开发实战 Django Tornado Flask Twisted》PDF+源代码

下载:https://pan.baidu.com/s/1pY6jnvBWr7sxspOa7kdN0Q

Hadoop入门

转自:http://blog.csdn.net/yuan_xw/article/details/50003197

1 Hadoop入门教程

Hadoop是Apache开源组织的一个分布式计算开源框架(http://hadoop.apache.org/),用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。Hadoop框架中最核心设计就是:HDFS和MapReduce,HDFS实现存储,而MapReduce实现原理分析处理,这两部分是hadoop的核心。数据在Hadoop中处理的流程可以简单的按照下图来理解:数据通过Haddop的集群处理后得到结果,它是一个高性能处理海量数据集的工具 。

1.1 Hadoop家族

1.2 HDFS文件系统

HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(largedata set)的应用程序。

HDFS的设计特点:

1、大数据文件,非常适合上T级别的大文件或者一堆大数据文件的存储。

2、文件分块存储,HDFS会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多。

3、流式数据访问,一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。

4、廉价硬件,HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。

5、硬件故障,HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。

HDFS的master/slave构架:

一个HDFS集群是有一个Namenode和一定数目的Datanode组成。Namenode是一个中心服务器,负责管理文件系统的namespace和客户端对文件的访问。Datanode在集群中一般是一个节点一个,负责管理节点上它们附带的存储。在内部,一个文件其实分成一个或多个block,这些block存储在Datanode集合里。Namenode执行文件系统的namespace操作,例如打开、关闭、重命名文件和目录,同时决定block到具体Datanode节点的映射。Datanode在Namenode的指挥下进行block的创建、删除和复制。Namenode和Datanode都是设计成可以跑在普通的廉价的运行linux的机器上。

HDFS的关键元素:

1、Block:将一个文件进行分块,通常是64M。

2、NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在Hadoop2.*开始支持activity-standy模式—-如果主NameNode失效,启动备用主机运行NameNode。

3、DataNode:分布在廉价的计算机上,用于存储Block块文件。

HDFS架构图

4、Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表。

5、参考资料

HDFS Java API:http://hadoop.apache.org/core/docs/current/api/

HDFS源代码:http://hadoop.apache.org/core/version_control.html

1.3 MapReduce文件系统

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。MapReduce将分成两个部分”Map(映射)”和”Reduce(归约)”。

当你向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Reduce任务的主要目标就是把前面若干个Map的输出汇总到一起并输出。

MapReduce流程图

MapReduce流程图

步骤1:首先对输入数据源进行切片

步骤2:master调度worker执行map任务

步骤3:worker读取输入源片段

步骤4:worker执行map任务,将任务输出保存在本地

步骤5:master调度worker执行reduce任务,reduce worker读取map任务的输出文件

步骤6:执行reduce任务,将任务输出保存到HDFS

1.4 学习Linux推荐书籍:

1. Hadoop权威指南》

2. Hadoop实战》

3. Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》

4. Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》

5. Hadoop技术内幕:深入解析YARN架构设计与实现原理》