Let’s Goincloud – PHP开发环境新选择

Posted: March 10th, 2012 | Views: 103 | Author: | Category: PHP | Tags: , | No Comments »

就在准备抛弃Ultraedit,寻觅新的开发工具的时候,偶然间发现
http://en.wikipedia.org/wiki/List_of_PHP_editors上介绍了个在线的编辑器,抱着好玩的想法试了试

结果逆天了…

传送门:http://goincloud.com/

这玩意支持在线编辑、在线debug、如果愿意,你可以用它搭建一个网站
而且,它还有个非常无敌的用处,就是:你能够在不花钱的情况下在国外找到一个跑PHP的地方
通过这个可以做什么?用你的脑子去想吧

简单的介绍如何使用

  • 注册一个账号
  • 进入Workspace开始干活
    默认有一个Demo项目
  • 点击Browse project可以查看你的项目



后记
Goincloud的想法真是相当前卫啊,有了这个很多简单的小脚本都可以在上面调试
我们还可以用它去做一些到国外网站的接口
很好玩的小东西,祝大家玩的高兴

这个是我的Demohttp://demo.monque.s1.goincloud.com/


Web应用服务器文件布局方案

Posted: February 28th, 2012 | Views: 169 | Author: | Category: 服务器 | Tags: , , , , , , | No Comments »

版本历史
20120307:更新文章索引

起因
折腾VPS,在本地用vmware弄了个虚拟机,维护公司不同项目的服务器

问题
发现每次配置环境总会出不大不小的错误,不说焦头烂额也被烦得够呛,费时费力
在项目每次上线后,几台服务器由于文件布局不同维护起来也比较麻烦
比如A服务器的nginx在/usr/local/nginx,B服务器在/opt/nginx,想要reload需要熟悉每台服务器的具体情况

解决办法
总结所有之前配过的机器,包括在线上跑着服务的,自己玩的,别人的,自己的
考察这些服务器的文件布局,取长补短,制定一个统一的方案
PS:由于一直用PHP,担心有局限性,特意找了几台跑Java的机器参考,总结出了个比较通用的目录结构。

结果
基本上不是很特殊的情况都能很好的承载了
主要结构如下:

Backup					#备份
	Resource			#存放程序的安装文件
	{Day|Month|Year}_20120228	#按年月日的备份
 
Data
	Cache				#缓存,可定期删除的数据
	Database			#数据库的数据文件
	Storage				#需要持久保存的数据
 
Dev
	Project				#开发中的项目
 
Log					#日志
 
Project
	Lib_{Language}			#需要被引用的库
	App_{Project}			#运行的应用
	Web_{Domain}			#作为Web服务的路径
 
Server
	Config				#服务器程序的配置
	Shell				#日常维护所需的shell脚本
	Run				#运行时的pid和socket
	Application(SymbolicLink)	#软连接到/usr/local/或是你习惯的安装服务器程序的地方
					#例如:nginx,php,java,mysql等
	Utility				#一些实用类的工具(非系统自带,非常用大型程序)
					#例如:awstats

注意

  • 1.例如/usr/local(根据您的实际情况)下有nginx0.8.53和1.1.14版本
    如果需要同时运行,将其分别以nginx-x-x-x的形式保存
    如果只需要运行一个,但会经常测试新版本的话,可以为常用的nginx建立软连接到带有版本号的nginx-x-x-x
    好处是,一目了然

附录:完成后的目录树结构如下:

/opt/
├── backup
│   ├── day_20120228
│   └── resource
│       └── Python-2.7.2.tgz
│
├── data
│   ├── cache
│   ├── database
│   └── storage
│
├── dev
│   └── project
│
├── logs
│   ├── 20120227
│   └── nginx-default_access
│
├── project
│   ├── lib_php
│   └── web_vmware.mo47.com
│
└── server
    ├── application -> /usr/local
    ├── config
    ├── run
    ├── shell
    └── utility

PHP in FastCGI,PHP不记录error日志的排错记录

Posted: February 24th, 2012 | Views: 146 | Author: | Category: PHP | Tags: , , , | No Comments »

最近配置新机器,PHP和nginx都用的比较新的版本,全部配好之后一切正常

唯独发现PHP的error进不到日志中
主要体现为,一个会产生致命错误的PHP程序(例如语法错误、调用未定义函数等)
在通过浏览器访问时所发生的错误,不会记录到nginx或php本身的错误日志中

而对于PHP来讲,在日常的运行中,记录下所有PHP产生的错误(fatal,warning,notice)是很有必要的

在这里先介绍下之前的环境
5.3.3,nginx 0.8.53,nginx中每个域名的errorlog都是单独的一个文件
在使用中所有PHP的错误都会以下面的形式进到nginx的errorlog

开始刨根问底找原因

 

0.文件权限
Linux下干活,出啥问题都要先想一下文件权限是不是对的
检查了下,nginx的errorlog可以正常记录404的错误,php的errorlog也可以正常记录CLI模式下php的错误
这条过了

1.nginx,php 安装问题?
全部重新编译安装,仔细看了下,没有任何错误

2.nginx版本(当前:1.1.14)
一开始以为是nginx版本问题,之前使用的是0.8.53
难道在新版本下,nginx无视掉了php通过FastCGI报的错?
安回以前的版本,发现还是一样的情况,这个猜测没戏了

3.PHP版本(当前:5.3.10)
这个是我最不愿意怀疑的,因为编译安装一次PHP,时间远大于nginx…….
最后硬着头皮,编译安装到能正常输出errorlog的机器的PHP版本(5.3.3)
哇,果然好了

3.到底是在PHP的哪次版本变更中开始的?
一不做二不休,把从5.3.3到5.3.10的PHP全安了一遍
果然不出所料,在5.3.8还可以正常报错,在5.3.9中就不正常了
去php.net看changelog,丝毫没有发现对于errorlog的修改
心中起疑,一个这么大的bug,在历经两次版本更新还未被修复?

4.不应该啊…难道是我做错什么了?
灵光一现啊!
突然想到,之前在PHP 5.3.10下,用户访问时PHP出现错误无法记录到PHP的errorlog中,但在CLI模式下却可以
会不会是文件的权限问题呢?
随即把PHP的errorlog权限改成777,果然,用户访问时的错误可以正常记录了
再换回到5.3.3,发现也可以记录到PHP的errorlog中了,但记录到nginx中的却没了
再把nginx新老版本试了一下,结果不变

基本得到了下面的结论:
在PHP 5.3.8及之前的版本中,通过FastCGI运行的PHP,在用户访问时出现错误,会首先写入到PHP的errorlog中
如果PHP的errorlog无法写入,则会将错误内容返回给FastCGI接口,然后nginx在收到FastCGI的错误返回后记录到了nginx的errorlog中
在PHP 5.3.9及之后的版本中,出现错误后PHP只尝试写入PHP的errorlog中,如果失败则不会再返回到FastCGI了

但还有些不解:
1.在PHP的changelog中并未提到对于此处的修改
2.从运行机制上讲,没有必要做出这种修改

由此引发出新的猜测:
1.会不会仅仅是php-fpm的修改(配置文件完全相同)
2.有某参数负责设置该功能,默认值变了

后记:
尝试看了下php的源码,基础有限且对php源码不熟悉,最终没有花更多的时间去研究
待高人解答


八皇后问题在Python的解法之一

Posted: February 22nd, 2012 | Views: 118 | Author: | Category: Python | Tags: , , | No Comments »

之前只听说过八皇后,从没写过,近日苦读Python,终于搞定

考虑到具体问题,没有使用2维矩阵,直接1维数组,8个元素分别代表行,每个元素的值0-7代表王后所在的格子

废话不说放代码了,最后的代码有点乱,着急睡觉了,有时间还是有的完善的

def eq_oct_check(board):
	#Tilte
	for y in range(8):
		if board[y] > -1:
			#print range(y) + range(y + 1,8)
			for p in range(y) + range(y + 1,8):
				if board[p] > -1:
					#print 'Y:',y,'P:',p,'-P:',abs(y - p),'-V',abs(board[y] - board[p])
					if abs(board[y] - board[p]) == abs(y - p):return False
	'''
	#Vertical
	vcheck = {}
	for y in range(8):
		if board[y] > -1:
			if vcheck.has_key(board[y]):return False
			else:vcheck[board[y]] = 1
	'''
	return True
 
def pops(L,p):
	for x in p:L[x] = None
	return [x for x in L if x != None]
 
def eq_oct():
	result = {'try':0,'sum':0,'boards':[]}
	for a in range(8):
		for b in pops(range(8),[a]):
			for c in pops(range(8),[a,b]):
				for d in pops(range(8),[a,b,c]):
					for e in pops(range(8),[a,b,c,d]):
						for f in pops(range(8),[a,b,c,d,e]):
							for g in pops(range(8),[a,b,c,d,e,f]):
								h = 28 - a - b - c - d - e - f - g
								board = [a,b,c,d,e,f,g,h]
								result['try'] += 1
								if eq_oct_check(board):
									result['sum'] += 1
									result['boards'].append(board)
	return result

昨日苦读正则,终钻研出今日犯贱成果 – 学正则表达式笔记

Posted: February 4th, 2012 | Views: 128 | Author: | Category: 编程基础 | Tags: , , , | No Comments »

最近大有忧患意识,主要表现在:干活没问题,一笔试就废。带来的直接后果就是,身价大跌

好,那就从最头疼的东西来。相信很多都是看见正则就头疼,没缩进、没高亮,只有一坨坨的\和字母。而且,严格的讲,对于所有需求我们都可以不用正则去搞定,至于有多复杂,那就看情况喽。至少博主我在不用正则的情况下做到过1.文章热词加链接 2.抓某浪微博内容 3.抓yahoo股票 且效率不低。

但,程序这种东西,多一个技能就多了一条路,考虑事情的时候就可以更灵活一些。

学正则有什么秘诀? 苦读吧,md那么高档的语言都会写,放弃正则用更复杂的办法都能搞定,学正则有什么难的。在这里大力推荐一个教程,只要有一点点基础,绝对学会、不管学会还能学以致用。教程请狂击这里

下面说犯贱成果,今天闲的没事说练练JS上的正则,结果就有了这个东西,纯粹娱乐,使用方法如下

1.将以下代码填入任何页面<body>的最下方即可

 

2.用浏览器打开,建议使用chrome或webkit核心浏览器


[转]程序员的工作环境与效率

Posted: January 19th, 2012 | Views: 115 | Author: | Category: 技术大类 | No Comments »

很赞同《Joel on Software》中Bionic Office一文所说,办公环境需要比大部分员工的家中环境更舒适。否则老板只能招聘哪些还住在简陋公寓的员工,他们才有可能下班后情愿留在办公室继续工作。我认为程序员的办公环境的几个条件:

1、足够大的桌面空间

程序员的办公桌最好可以并排坐下2人,以便结对编程或者code review。在不离开座位的情况下,有足够空间用白板或者纸面展开讨论问题。协作的同事不必站在身后费力的越过肩膀来看屏幕上的内容。桌面可以放下2个显示器并可以随手拿到常用的参考资料及书籍,有合适的文件柜或壁柜存放归档的资料,避免桌面上堆满了各种打印的资料。

2、电脑环境

工作的机器有足够的内存,比如8G,这样并行打开复杂的workspace时候不需要关闭邮件或者浏览器软件,也避免在debug模式时硬盘在拼命swap以腾出空余内存。办公环境有足够的带宽,访问Google的服务没有障碍。内部资源如测试服务器、邮件服务器、SVN访问要非常快。

3、座位距离

多人的team中尽量能让所有工位之间行走距离最短,避免坐在对面的两个员工需要绕一大圈才能到达对方电脑前。

4、其他环境

温度及空气状况,办公室不要过冷或者过热。空气质量清新,不要有明显噪音,比如来自空调、日光灯、服务器等噪音。

其他一些可选条件

— 程序员最好有两个显示器,或建议1台式机+1笔记本,可以极大提高开发效率

— 有合适的、方便更新的公告栏

— 有公共休闲区,比如一些游戏区域,方便互相交流,发散讨论

— Joel推崇的Aeron电脑椅

— 陈旧的办公环境会让面试者或者来访客户印象不佳,办公环境最好有定期维护保养并适当淘汰旧的设备。发暗的地毯、电脑椅上擦不掉的污渍,偏小的电脑屏幕、油光发亮的键盘都会让求职者印象不佳。

— 有合适的参考图书库,可以找到常用资料

—  有合适的咖啡、碳酸饮料、零食


Flash失败教训:太过贪婪 收费策略致错失良机

Posted: November 14th, 2011 | Views: 262 | Author: | Category: 杂谈 | Tags: , , , , | No Comments »

北京时间11月13日消息,曾经担任过Palm产品规划副总,现为信息管理初创公司Cera技术首席执行官的迈克尔•梅斯(Michael Mace)在个人博客上撰文称,Flash失败的根本原因就是拥有者Macromedia和Adobe的贪婪。虽然Flash在PC机上占据主导地位,成为了事实上的标准,但在浏览体验全面转下移动设备的过程中,两家公司没有把握机会,却选择短期收入,对移动Flash播放器进行收费,白白错失了良机。

全文概要如下:

Adobe停止开发移动Flash的决定理所当然在网上得到了很多关注。对于Adobe和Flash开发者来说,这是个悲伤的故事:一个在PC网络上占统治地位的标准在移动领域遭遇滑铁卢,它将被渐渐抛弃,这对HTML5非常有利。但这样的故事不仅仅发生在移动领域,就算没有移动领域的增长,我认为Flash本身也将渐渐衰落,整幢Flash正在倒塌。

Flash如何从.人变为失败者?网上出现了很多解释。科技博客GigaOm作者艾瑞卡•奥格(Erica Ogg)列出了以下几点理由:1)移动Flash运行效果不佳;2)遭到了史蒂夫•乔布斯(Steve Jobs)等权势人物的反对;3)竞争不过HTML5。(顺便说下,5的发展如此缓慢,Flash怎么会竞争不过它?)

我同意艾瑞卡的观点,但失败症状总是比根本原因要多得多。这就好比说飞机坠毁是因为机翼断了。对,没错,但机翼为什么会断?如果你要找出Flash失败的根本原因,我想是许多年前对移动市场产生了根本性的误读。对于Macromedia和Adobe来说,短期的营收目标比起长期的战略更为重要。

换句话说,Flash不只是死亡,而且被渐渐漠视了。

Read the rest of this entry »


无题

Posted: September 7th, 2011 | Views: 349 | Author: | Category: 杂谈 | No Comments »

大家终于在昨天知道了人员变动,我心里也舒服点,不用再藏着掖着了

 

对于数码公社,产品库,下载站三个产品,每一个都像对待自己孩子一样。我不开放主题分类的权限宁可每次都是自己手动,因为怕有人填乱了;我不让添加下载站适配的手机品牌,每次都是手动导入,因为怕填的质量不好;我至今还会没事检查下下载站的录入情况,看看大家是不是真的认真录入;就像尽力保护自己孩子茁壮成长一样。对于一个产品,只有用心去做,才能产生灵性,要一丝不苟,要尽全力做到完美。

 

我的小txt还记录着很多很多没完成的任务,这其中有要完善的功能、要修复的bug、准备添加的新功能、各种奇思妙想。然而直到周五搬走一天天的接近,我才发现我是多么的爱它们。童童在搜超夺冠那天的饭桌上和yokii说“雨晨是个对它的工作及其热爱的人”,我听到后很满足,这远比说我一万遍聪明有意义的多。因此,在周五之前我还能做的就是尽可能的把未完成的事情继续推进

 

当然,我还是给频道留了些惊喜
第一,在走之前为频道申请了三台服务器,能够保证日后至少两年的发展
第二,找到了两个还算满意的实习生

 

年假完了从西藏回来后,得知继东无法留下的消息,失落了很久。这意味着我要回头去接手数码公社,说真的,我真的不想管公社了。一是公社经过两年的运行我个人有太多太多想要完善的想法了,但。。。实在没有精力;二是对于一个自己亲手做出来的东西,重做一遍实在是个煎熬。so…各种拖啊拖,再此对不住丁伟,石头和yokii

 

我走后,两个实习生会接替我的所有工作,大家一定要好好培养好好虐,就像我来的时候蔡总一样(嘿嘿,当然了我其实心里是很感谢蔡的),它们会超越我的。


关于对Android APK文件的XML信息提取

Posted: August 6th, 2011 | Views: 860 | Author: | Category: Python | Tags: , , , , | No Comments »

在建立APK包的过程中,AndroidManifest.xml被转换为binary xml文件

这个文件毫无可读性,不过你可以找到一些工具来转换成传统的xml格式,这些工具有:axml2xml,AXMLPrinter,当然了,你还可以使用官方的aapt来转换。

$ aapt d xmltree yourapps.apk AndroidManifest.xml

这里要说的是Androguard,它是一个基于Python的工具,功能上和AXMLPrinter一样,你可以使用它对Android binary XML进行转换,它也包含了一些更高级的功能。

$ ./androaxml.py -h
Usage: androaxml.py [options]
Options:
-h, --help            show this help message and exit
-i INPUT, --input=INPUT
                      filename input (APK or android's binary xml)
-o OUTPUT, --output=OUTPUT
                      filename output of the xml
-v, --version         version of the API
$ ./androaxml.py -i yourfile.apk -o output.xml
$ ./androaxml.py -i AndroidManifest.xml -o output.xml

这个倒霉玩意实在太招人喜欢了 – John’s Phone

Posted: July 25th, 2011 | Views: 558 | Author: | Category: 时尚数码 | Tags: | No Comments »

这个小东西太有爱了,在iPhone,Android大行其道的日子里,宛如一股扑面的凉风
多说无益,话太多会伤到它的,大家自己看吧

The World’s Simplest Cell Phone

John’s Phone is the world’s most basic cell phone. John’s Phone allows you to make and receive calls anywhere in the world: no frills and no unnecessary features such as a camera, text messaging and an endless number of ringtones. John’s Phone keeps things simple.

User Friendly

John’s Phone requires no explanation. Use the phone to call and hang up, turn the sound up or down, and lock or unlock it: it couldn’t be any simpler. The speed-dial feature, which allows you to save speed-dial numbers under every number key, makes John’s Phone perfect as a kids’ cell phone.

Large Keys,Address Book,Pen

Phone is a large-key phone. The back of the phone features a flap containing an address book and a pen – this makes John’s Phone perfect for older users too.

Dutch Design

John’s Phone was designed by John Doe Amsterdam, making the cell phone a unique piece of Dutch design.

Colours

available in 5 colours

?