易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
虚拟机上iptables不支持nat转发?

虚拟机上iptables不支持nat转发?

在虚拟机上尝试装ppptp的时候,发现一个问题,因为最后需要设置iptables,但是在执行的时候,报了这个错:
can’t initialize iptables table `nat’ ,后面还有一句我就不贴了。

找了很多资料,发现可能是在编译内核的时候,把nat去掉了。这样我就无法转发nat了。也就是说我的pptp是没有办法成功运行了。
哭
再google了一下,发现一些问题,如果要加上这个nat,好象非得重新编译内核。否则无法装上。当然,也看到一篇文章说直接运行某句命令就OK了。【来源:http://pearlin.info/enable-nat-module-for-vps-cant-initialize-iptables-table-nat-table-does-not-exist/】
但好象我的虚拟机不是openVZ的。。。继续哭泣

I was getting the following error which configuring NAT on a VPS server.

=========

# iptables -t nat -nvL
iptables v1.3.5: can’t initialize iptables table `nat’: Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

=========

You can fix this by using the following commands.

vzctl set 115 –iptables “iptable_nat iptable_filter iptable_mangle ip_conntrack ipt_conntrack ipt_REDIRECT ipt_REJECT ipt_multiport ipt_helper ipt_LOG ipt_state” –save
Saved parameters for VE 115

# vzctl restart 115
…
# vzctl enter 115
# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

不知道VPS的提供商能不能帮我装了。如果不行,那我可能就要換VPS了。。。痛苦啊。下次还是用UBUNTU吧。方便。。。。

我就看看,不说话:UCweb与支付宝联手推手机浏览器安全支付平台

我就看看,不说话:UCweb与支付宝联手推手机浏览器安全支付平台

我从chinaz上面复制过来的。。。其实我更想知道,下一步是什么,原文:http://chinaz.com/News/tel/04201I6352011.html,

【TechWeb消息】4月20日消息,UC优视公司与支付宝宣布,通过双方合作,UC浏览器的开放架构和插件技术能让支付宝安全支付插件便捷的接入移动互联网,从而解除网站与支付宝的对接障碍,实现手机安全支付。

数据显示,不论是手机网游市场还是手机淘宝交易量,都与PC平台相差悬殊,主要原因就是移动支付手段的匮乏,用户迫切需要手机上像PC一样的方便快捷和安全的支付模式。UC与支付宝合作,将为移动支付打通做出贡献。

通过此次合作,在用户用手机访问电子商务网站并有支付需求时,UC浏览器会对当前网址进行安全支付代码的识别。那些与支付宝具有合作关系、并已内嵌了可被UC识别的安全代码的网址将会触发支付宝安全支付插件,为用户提供如PC平台一样安全、便捷的手机支付服务。

对于移动互联网产业而言,一直以来最大的困扰就是“造血能力不足”。很多企业都无法从创业初期的“输血”阶段(资金来源主要依靠天使投资+风险投 资)顺利过渡到“自我造血”的发展阶段,问题根源主要在于两大盈利途径——toC增值服务和面向用户的电子商务无法正常进行。UC与支付宝的合作或将改变 这一产业窘境,推动中国移动互联网的发展。

据悉,UC优视提供的核心产品UC浏览器能运行在Symbian、Android、iPhone、Windows Mobile、Win CE、Java、MTK、Brew、OPhone等主流手机平台的200多个著名手机品牌、逾3000款手机终端上。截至2011年3月,公司已取得用户 超过2亿、用户月使用量(PV)超过600亿。

支付宝是国内领先的独立第三方支付平台,是阿里巴巴集团的关联公司。截止到2010年12月,支付宝注册用户突破5.5亿,日交易额超过25亿元人 民币,日交易笔数达到850万笔。目前除淘宝和阿里巴巴外,支持使用支付宝交易服务的商家已经超过46万家;涵盖了虚拟游戏、数码通讯、商业服务、机票等 行业。

据CNNIC数据显示,截至2010年12月底,我国手机网民规模达3.03亿,年均保持约35%左右的高速增长。据专家预测,2011年将是移动 支付全面爆发的元年。根据易观国际预测,2011年年底中国移动支付用户规模将快速增长到2.21亿,从而超过PC上网支付用户数。(可心)

--EOF--
手机支付,拉卡拉支付,指付通,电话银行,手机银行客户端,还会有什么?(app store中可以在app里集成交易,下一步呢?国内是否也会考虑在android、WP中等集成支付宝、财付通之类的支付?)
SP的冬天?我觉得有点象。。。随便猜测啦

yhustc:Twisted+AC自动机构建高效的过滤服务器

这是yhustc帮烂桔搞定AC自动机的过程。上次在PHPX上看到也有人用PHP实现了一个,但我估计在大并发的时候,效率也不会高到哪里去。PHP纯处理字符串效率毕竟还是不咋地。。如果用perl呢?没试过。。。。还是看一下yhustc怎么实现在的吧。
yhustc的网址是:http://www.yhustc.com ,yhustc在文中还提到了twisted,我没用过这个玩意,后来google了一下,发现还是很迷糊。
原文内容如下:

橘子有个网站,访问量大约每天500万PV,为了怕被屏蔽,需要对一系列敏感词进行过滤(超过1200个词),然后才输出内容给用户。

替 换给定关键词的功能,每种编程语言都有,PHP的最强大。基于正则匹配替换的大家都有,就不提了。基于精确匹配的字符串替换,PHP的 str_replace函数可以根据给定的数组,一次函数调用对多关键词进行匹配。自然橘子用的也是这个咯(如果使用的是for i < 1200 顺序的循环,基本系统效率可以无视了)。可是现在问题出现了:系统负载非常高,而且是持续的高,晚上10点的高峰期CPU一直100%的满负荷运行。

要优化性能,就需要一步步的分析瓶颈在什么地方:

1、 由于橘子说有些关键词以后没准会解封,所以不想把原始内容就保存为带上一堆****这样子。因此原始内容都保存的好好的,那么给用户输出的,是每次过滤过 后的结果。那么这里自然有个问题,就是相同的内容,针对每个用户都被过滤了一次,这不明摆着的CPU浪费嘛。我说你可以考虑空间换时间, 加硬盘后上缓存,一定时间内都只过滤一次,其他用户都读缓存即可,这样计算开销几乎全部省下来了。但是橘子哭穷啊,SSD的硬盘两千多一块。IDE的插上 去就得给机器断点,现在百度正在考验自己的站点,这个电断不得(如果IDC够好的话,夜里换其实没啥问题,偏偏他的IDC技术不照)。那行,看来还是只能每次都过滤了,你爱折腾我也没办法。

2、分析一下PHP的str_replace,他既然支持多关键词的数组输入,说明内部肯定是一个AC自动机。 什么是AC自动机,大家请自行google并学习,我就不长篇大论了。本来多关键字替换的应用,AC自动机是最好的选择,但是为啥他的服务器负责就是居高 不下呢?这与PHP的实现机制有关,PHP的生命周期是一个WEB请求,那么每个用户请求页面时,调用一次str_replace。即使输入的数组是一摸 一样的,也必须重新构建一个AC自动机的搜索树,这个搜索树初始化的计算开销以及内存开销乘以并发数,严重降低了系统性能。(也不全是PHP生命周期引发 的,主要是因为AC自动机是封装在str_replace内部实现的,即使是串行的调用,相同输入仍然会每次都初始化自己的搜索树)

那么我们现在的问题就很明确了:实现一个全局的AC自动机,用他来处理所有的请求即可。这个任务PHP是没法执行了,加之要找AC自动机的相关模块才能自己二次开发,选定了python来干这个事情。https://hkn.eecs.berkeley.edu/~dyoo/python/ahocorasick/ 这里是python的AC自动机的模块,非常的简单易用,看看就会。

读 取关键词列表,添加关键词,构建搜索树,OK!测试一下关键词的搜索效果,windows平台下10000次的循环搜索,python的程序比直接用 PHP的str_replace执行时间缩短了200倍,当时震惊的一塌糊涂!!(不过这跟PHP在windows平台执行效率低也有关系,linux上 面明显要快非常多)

话不多说,把python的程序封装到一个Socket TCP Server里面,这样便于WEB的PHP程序通过套接口请求服务,把原文发过来,过滤后又发回去,这样就实现了一次过滤。

高高兴兴的把程序发给橘子,结果一上服务器,反而比先前的PHP str_replace效率还差。

3、这时候才想到一个问题,我做的测试是串行执行的,只能算运行总时间。如果要上web上面应用,需要考虑并发问题。也就是需要ab测试。ab -c 500 -n 500测试了一把,果不其然,效率忒低。继续分析,我觉得是高并发情况下,python那个简单封装的TCPServer不够用。线程开销和阻塞式的服务 模式拖低了系统效率。为什么会有这种问题,请问自己“你写的http server能跟apache比不?”这里面的性能优化太高深,搞不明白,怎么办呢?我们需要站在巨人的肩膀上才行。于是想到可以用Twisted库来构建自己的TCP Server。什么是Twisted?也请自行google,并且学习一下。

把TCP的服务器用Twisted改写了之后,AB测试了一把,大大的有惊喜:

PHP的str_replace版本

ab -c 500 -n 500 str_version.php
Requests per second: 165.86 [#/sec] (mean)
Time per request: 3014.552 [ms] (mean)
Time per request: 6.029 [ms] (mean, across all concurrent requests)

PHP + python的旧版本的tcp server + AC自动机

ab -c 500 -n 500 old_ac_filter.php
Requests per second: 165.06 [#/sec] (mean)
Time per request: 3029.286 [ms] (mean)
Time per request: 6.059 [ms] (mean, across all concurrent requests)

PHP + python的twisted版本的tcp server + AC自动机

ab -c 500 -n 500 twisted_ac_filter.php
Requests per second: 620.93 [#/sec] (mean)
Time per request: 805.246 [ms] (mean)
Time per request: 1.610 [ms] (mean, across all concurrent requests)

高并发的情况下,每秒处理的请求数提升了4倍,效果那不是盖的。

晚上十点,又迎来了一个访问量的高峰,情况非常稳定,橘子回报:

“之前这个点都是满负载跑-,- -v-而且还是关闭了在线统计功能的情况下”

“现在我把在线统计打开了,cpu也就50%左右”

反正是够用了,就优化到此为止吧。

其实这个需求,还有进一步优化的余地,空间换时间+全局的AC自动机,可以把系统性能提高若干数量级。

大 致思路是:在内容刚刚产生的时候PHP通过UDP消息把需要处理的东西发送给python程序,python实现一个两个线程的生产消费者模式的工作进 程。消费线程每次取出消息槽里面一个需要处理的请求,使用一个全局的AC自动机对内容进行处理,然后存放起来,继续处理下一个请求,当没有请求的时候就阻 塞住。生产线程是一个UDP的server,收到数据后就给消息槽添加一个请求数据,并且给消费线程发送信号激活它工作。如此往复即可。

--EOF--
小知识:
Twisted是一个事件驱动的网络框架,它由Python写成,基于MIT授 权协议。Twisted支持各种各样的底层协议,比如:TCP,UDP,SSL/TLS,多地址传输,Unix socket等,以及HTTP,NNTP,IMAP,SSH,IRC,FTP等其他高级协议。有了这些支持相当于有了一个强有力的基础,你可以用它来开发 诸如web server,Mail server,即时通讯软件 等等。

这里还有一个简单的教程(繁体字)

http://ez2learn.com/index.php/python-tutorials/twisted-tutorials

转:Paypal IPN接口开发小结

转:Paypal IPN接口开发小结

之所以转载这篇文章,不是因为他实现了多少代码,而是说文章中会有一些遇到的问题和解决方法。
前一段时间也做了alipay和tenpay的接口编码,其实说白了这些东西都差不多。只是因为这篇文章中说的是https接口,会有点不太一样。
alipay和tenpay最终都是跳转到对方的网站上做进一步的支付的,paypal可能不太一样(没仔细折腾过,所以才要转这篇)

上原文:http://shiningray.cn/paypal-ipn.html

最近终于搞定了该死的Paypal ipn,特地在此留下点东西备忘。
所谓paypal ipn(Instant Payment Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制。IPN的原理很简单,就是当产生了一个交易之后, 交易状态发生变化时,如用户已经付款、或者退款、撤销时,Paypal利用常用的HTTP POST方式,将交易的一些变量提交给网站的某个页面(称之为IPN Handler),当这个页面接受到请求时候,将这些数据原封不动加上一个指示验证的cmd=_notify-validate,POST回Paypal的接口地址,如果数据正确,那么Paypal返回字符串VERIFIED,否则为INVALID,如果结果为VERIFIED,那么你的程序就可以使用这些数据进行操作。
但代码的调试是一件很痛苦的事情,因为作为第三方开发人员,不可能开两个帐号,每次测试还要之间交易一些钱,所以Paypal专门开发了Sandbox给开发人员进行开发,首先到https://developer.paypal.com/ 注册一个开发帐号,好了之后再进入Sandbox建立测试用的Paypal虚拟帐号(至少应该建立一个Business的和一个Personal的),这 种账号注册方法和Paypal的流程一样,信息可以是假的,包括银行帐号、信用卡(其实Paypal Sandbox会自动生成一些随机的号码)。接下来需要激活Paypal Sandbox的虚拟帐号,注意,这里不管你在Paypal Sanbox注册时填什么邮件地址,有任何发送到虚拟帐号所填邮箱的邮件都存会在开发帐号的管理界面中的Email页(导航栏上有)中。登录 Sandbox的虚拟Paypal环境,还需要验证虚拟帐号的银行,这里可以随便填,然后通过Add Funds来给账户充值(想填多少填多少)。然后,还需要激活IPN的选项,在Business的那个账户的Profile设置页面中,点击,然后点击 Edit按钮,打开IPN,这里如果你使用的是固定的IPN Handle,可以直接将地址填入。
接下来,我们测试的时候,应该将Paypal接口的地址设置为https://www.sandbox.paypal.com/cgi-bin/webscr
最后基本的流程为:

  • 用户在我们的网站上选择商品、放入购物车,然后检查准备支付
  • 网站根据购物车中的商品,生成Paypal的支付表单(也是提交到上面IPN用的Paypal接口地址),包含了此次交易的一些信息(下次会专门找机会解释一下)。并在自己的数据库中生成一张订单记录。
  • Paypal在Session中记录下这些交易信息
  • 用户用Paypal账户登录Paypal(Sandbox用Sandbox的虚拟帐号),复查明细,点击Pay按钮
  • Paypal进行交易处理,如果我们的Paypal收款帐号在接受帐款上没有什么问题(没有特别的需要在界面上“Accept”的地方),交易完成,那么Paypal会发送一个IPN,并发送提示邮件。
  • 我们IPN Handler接受到信息,首先向Paypal进行校验,如果信息正确,然后根据信息和自己数据库中进行比对,如果无误,可以将支付信息保存,并修改订单状态。
  • 然后Paypal会显示一个界面表示交易完成,此时如果用户点击“Return”按钮,Paypal会将用户送回我们网站指定地点。
  • 我们网站迎接用户回来,向用户表示感谢,并进行提醒,给出订单号等等。

整个流程基本如下,不过其中有很多要注意的地方:

  1. 我们看到了,接口地址是https开头的,也就是要求使用SSL进行连接, 其实Paypal Sandbox可以使用http,但是最后实际的Paypal接口,不支持http协议,所以如果你用PHP写IPN Handler脚本的话,在验证信息的代码部分,如果简简单单使用fopen、HTTP_Request之类的工具是没用的,PHP的socks库不支持SSL,应该使用curl,有两种方法,一个是使用PHP扩展中的libcurl,Paypal官方发布的SDK中便是使用的这个方法,但Paypal的SDK非常复杂,如果想自己写,可以使用Snoopy,一个简单实用的PHP请求库(它自己说是模拟了浏览器的行为),而它使用的是Curl的可执行文件,通过管道获得结果,而非php的libcurl,所以自己cURL的主页上下载一个支持SSL的编译版本,可能还需要安装OpenSSL,不过对于Linux系统,可能应该会都带。
  2. 在支付表单中,可以自己设置notify_url字段,来指定此次交易的信息应该发送到哪个地方,这样就可以覆盖在Profile中我们的设置,另外,这个字段要进行urlencode。
  3. 我们得到的IPN信息中,status对应的便是交易状态,如Complete表示完成,首字母大写,而验证结果则是VERIFIEY或者INVALID,全部大写,具体的内容,可以查看Paypal官方的文档订单管理整合指南。

--EOF--
文章虽老,但值得参考一下。

webmatrix,微软你想干嘛 ?

webmatrix,微软你想干嘛 ?

webmatrix,这是微软的又一个重磅炸弹?微软,你究竟想干嘛 ?

Microsoft Web 平台不仅仅是一组功能强大的工具、服务器和技术,它还为网站、服务和应用程序的构建和托管提供了一个完整的生态系统。 无论您是要在网络上树立您公司的形象还是推出下一个 MySpace,我们都有让您走向成功的产品。 Microsoft Web 平台深受世界五百强公司信任,数以百万计的个人都在使用该平台,它一定能够适合您的需要。

看到上面的说明,或许你还没有过份在意,那么,下面这一小段的内容呢?

WebMatrix 是微软最新的 Web 开发工具,它包含了构建网站所需要的一切元素。您可以从开源 Web 项目或者内置的 Web 模板开始,也可以直接从无到有编写代码。简单并且完全是免费的。开发网站从来没有如此简单。为了开始建立网站,您只需要使用 Microsoft Web 平台安装器下载并安装 WebMatrix。这只会占用您短短的5分钟时间。当 WebMatrix 成功安装后,您可以非常方便地获得并下载最新版本的免费 Web 应用,如 WordPress, Joomla!, DotNetNuke 和 Orchard.您会发现 WebMatrix 在一个统一界面中提供了您需要的一切工具的特性,不需要再花费精力于在多种应用工具切换来完成一般性的 Web 开发任务。通过 WebMatrix,您只需要一步点击,即可编辑文件,管理数据库和更改服务器设置等。

看到上面这段呢,你怎么想?PHP/.net都在一起了,这样是否真的完美我不知道,但是这种免配置的功能是否会让网站又会铺天盖地的出来呢?

不过,说实话,我真不担心,要知道,国内还有一个大坎,那就是备案。黑黑,任你想法再多,备案都会卡死你。

更多介绍还是看官方吧:http://www.microsoft.com/web/webmatrix/,如果英文不好,可以切换成中文的。

纯转,纪录,摘抄,没对比测试过:SQLServer 数据去重高效方法

纯转,纪录,摘抄,没对比测试过:SQLServer 数据去重高效方法

SQLServer 数据去重高效方法

数据去重高效方法

去重的方法有很多,比如用什么Distinct、 Group By Having、临时表等

有兴趣的朋友可以把各种方法对比一下得出直观的效率概况

WITH TEST AS
(
SELECT ROW_NUMBER()
OVER(PARTITION BY Column1,Column2,Column3 ORDER BY ID )
AS NUM,* FROM TableName
)
DELETE FROM TEST
WHERE NUM != 1

百万数据量一分左右(当然也要看机器配置)
---------------------------------------------------------------------
mysql应该是不能执行的。。所以我是说这是纯摘抄而已

what's this?Adobe, Zend合作推Flash和PHP联合开发

what's this?Adobe, Zend合作推Flash和PHP联合开发

看到这个消息的时候,我震惊了,是的,我真的震惊了。
难道说,又将多一款跨平台的IDE?
上菜:
Zend技术和Adobe系统公司今天宣布,推出Flash Builder 4.5 for PHP,它使开发人员能够利用PHP和Flash开发技能,为移动设备,web和桌面平台提供互连网富客户端应用程序。 该产品提供了一个基于ActionScript的Flash客户端开发的IDE: Flash builder4.5,并结合Zend Studio 8的服务器端PHP能力。突出了移动部署能力,这两家厂商表示,应用程序可以提供给谷歌Android,RIM公司黑莓平板操作系统和苹果的iOS系统。 对ios系统,IDE生成本机代码应用程序,而不是运行在苹果的IOS禁止运行的AIR环境(Adobe集成运行环境)的软件。 Android应用同样生成本机代码包。

Zend的首席执行官Andi Gutmans介绍说,“Flash Builder 4.5 for PHP使得??PHP开发人员很容易建立移动应用程序,也使开发人员很容易构建服务器端的移动应用程序。我们都有同样的想法“。应用程序本身可以在W??indows或Mac客户端上建立。

“现在开发人员能够使用一种工具,一个框架和一个通用代码库来??建立应用程序,部署在Android,黑莓和IOS上运行,”Adobe公司产品经理Dave Gruber说。 Flash Builder 4.5 for PHP将在5月11日交付,高级版包含有网络跟踪、内存和性能分析,售价为799美元。标准版没有这些功能将花费399美元。 Adobe和Zend同时宣布正在进行Adobe Creative Suite 5.5产品线的部署。
原文连接
http://www.itworld.com/development/154477/adobe-zend-combine-flash-and-php-development
译文连接
http://www.chinashare.net/?/3216-1-0-1-1.html
欢迎访问中国开发论坛(http://www.chinashare.net),论坛提供delphi/java/.net/php/c/python等开发语言交流平台,欢迎大家前来灌水.

--EOF--
仔细想想,原来也就是eclipse再装个插件。难道ZEND又将PDT之类的插件剥出来了?提供给adobe使用了?哎,文中加深颜色的部分让我激动了一下,我以为是基于FLASH开发的,结果还是Eclipse。。。。这TMD的都是谁写的文章 。。忽悠,大忽悠。。。我还就想了,flash builder什么时候基于actionscript了。。

原文:

The product provides an IDE combining Adobe's Flash Builder 4.5, for ActionScript-based Flash client development, and Zend Studio 8, for server-side PHP capabilities.

大哥,这是翻译成你那句话的吗。。。。。。

Yii笔记

Yii笔记

本文纯粹是笔记,记下来怕忘了
1、终止当前操作,一般情况下是用exit,但用了Exit后无法看到trace的内容。所以要采用Yii::app()->end();
2、createUrl和createAbsoluteUrl,这两个函数,如果需要宣传自己的网址和内容,还是用createAbsoluteUrl函数吧。里面带了全部路径,而CreateUrl只会显示/home/xxx这样的路径,不利于SEO
3、widget默认的render无法使用theme中的模版,于是写一个类继承自CWidget,然后所有的widget都继承这个类,比如我这样实现了。。

class Widget extends CWidget{
private static $_viewPaths;
/**
* 重写CWidget中的getViewPath
*/
public function getViewPath($checkTheme=false)
{
$className=get_class($this);
if(isset(self::$_viewPaths[$className]))
return self::$_viewPaths[$className];
else
{
if($checkTheme && ($theme=Yii::app()->getTheme())!==null){
return self::$_viewPaths[$className] = $theme->getBasePath().DIRECTORY_SEPARATOR."widgets"; //这是我自己的路径
}
$class=new ReflectionClass($className);
return self::$_viewPaths[$className]=dirname($class->getFileName()).DIRECTORY_SEPARATOR.'views';
}
}
}

覆写父类方法,使得getViewPath找到我指定的目录,我目录在themes/classic/下建了一个widgets的目录。这样的好处很多。。而且对于CSS和JS等路径都可以和标准视图一致

先写这么多。。。