一个与玫瑰花有关系的爱情故事...让你想不到的结局```是搞笑还是悲哀呢```
  情人节到了。夜晚的街道都是一对对幸福的男女。女孩子手上都拿着一束艳丽的 玫瑰花。火红的玫瑰象征着热烈的爱情... 安琪儿正跟着奶奶制作晚餐,奶奶做的馅饼她最喜欢吃了。
  “奶奶,跟我说点故事吧!”安琪儿眼睛巴眨巴眨的,像一个洋娃娃。 “那我给你们讲一个关于玫瑰的故事吧。”
  那是发生在邻镇的一位富有千金小姐身上的一段爱情故事... 她是一个很高傲的女人。因为在她身边总是有很多优秀男人围绕着她,她从来对 这些人不屑一顾。每天都会有男士送给她很多很多玫瑰...她一点都不在乎!她知 道,他们只是为了她的家产和美丽。 在女孩的后花园里种满了玫瑰,因为她喜欢玫瑰。 每天清晨一起床,她都会从自己卧室里看看后园的玫瑰花...她们是那样的鲜红。 这天早上,她像往常一样的拉开了窗帘,却发现有一个男孩往她已经废旧的信箱 里放东西...那个信箱从很早以前就不能使用了,她家大门口有个新的信箱。这个 男孩如果是送信的人,那他肯定弄错了。 真是一个笨蛋!女孩想叫住他,告诉他请把信笺放到正确的地方,因为那个信箱 实在太脏了。 还没等女孩开口,男孩抬头看到了她,然后对她淡淡的一笑,骑着脚踏车离开了。 什么嘛!根本不是一个邮差,因为他的车上没有其他任何信笺。 女孩很好奇他在那个废旧的信箱里放了什么,于是跑下去看。 在废旧的信箱里躺着一朵火红的玫瑰花! 女孩愣了一下。然后在心里嘲笑着那个男孩。原来又是一个爱慕她的男孩。而且 还是个穷人,只送一朵玫瑰花给她,还是偷偷的放在那个废旧不堪的信箱里... 女孩随手把那朵玫瑰花丢进了垃圾桶,很不削的说“我从来不稀罕这一朵玫瑰,在 我的院子里有世界上最美的玫瑰花。” 第二天清晨,女孩又发现了那个男孩往那个信箱里放了一朵玫瑰花,然后抬起头 对她淡淡的微笑了一下就离开了... 信箱里还是只有一朵玫瑰花,连一封告白的信笺都没有。女孩拿起花就丢进了垃圾 桶,他这样做简直就是徒劳! 第三天,第四天,第五天...... 第十天,女孩没有丢掉玫瑰花,而是把它放进了花瓶里。她想看看这个男孩到底 什么时候才肯放弃。 第三十天,女孩躲在窗帘后面等待着男孩的出现还有他的玫瑰花... 男孩按时出现了,手里照样拿着一朵火红的玫瑰小心的放进了信箱里。男孩又抬 起头对女孩笑了笑。女孩的脸迅速的红了起来,心跳也加速了。这是什么感觉? 她从来没有过的......当男孩离开了以后,女孩到后园拿出了那朵玫瑰花,心里 感到一丝的甜蜜... 以后每天,不论怎么样的天气,男孩都会准时的出现在女孩的后园,然后送上 一朵玫瑰花和一个微笑。 第五十天...女孩在心里告诉自己,只要这个男孩能送她100朵玫瑰花,她就愿意 嫁给他,不论他是贫是富,她都愿意嫁给他。 第八十天...女孩期待男孩的出现,想走到他的面前亲口对他说很喜欢他的微笑, 也想亲口听他说一句“我爱你”...但是她做不到,因为她发誓一定要等到第100 朵玫瑰出现了以后才能这样... 第九十天,女孩从心里爱上了这个男孩。她是真的爱上了这个男孩...她在心里 期待着时间快点过去...还有10天,她将愿意当这个男孩美丽的新娘... 第九十一天...女孩在镜子前尝试着各种美丽的表情。 第九十二天...女孩在后园的玫瑰丛里翩翩起舞。 第九十三天...女孩拒绝了所有其他优秀男士。 第九十五天...女孩开始偷偷的为自己挑选婚纱。 第九十七天...第九十八天...第九十九天...... 女孩子呆呆的站在信箱前...失望的看着空空的信箱...今天她没有等到那第100朵 玫瑰花...是不是男孩出了什么事?她心里非常担心。但是她并不知道这个男孩是 哪家的人,否则她一定会去找他,然后告诉她她愿意嫁给他......因为在她的心 里,她已经认定了他。 或许明天...明天他就会出现送上第100朵玫瑰花了吧? 第二天...男孩还是没有出现... 女孩从此以后,每天清晨都等在信箱旁边,她后园的那些美丽的玫瑰花已经全部 的枯死了...因为她一点也不在意她们了,她的心里只有那最后一朵的玫瑰... 女孩等了一天又一天...男孩始终都没有再出现...... “故事讲完了。
  ”奶奶叹了口气“这应该是一个很凄凉遗憾的故事,嘿嘿。” 安琪儿嘟嘟小嘴“这个故事是真的吗?那个女孩好可怜哦!” “好象是真的,那个女孩就是邻镇那个到现在都没结婚的老奶奶,她应该和我差 不多年龄吧。” “那她不是很可怜吗?她一直都没结婚吗?” “现在她都没结婚呢,后园已经全是杂草了,因为她不让任何人清扫。” “那那个男孩呢,他为什么不再送给那老奶奶玫瑰花了呢?” 门忽然开了,安琪的爷爷回来了。“什么为什么呢?” “爷爷!”安琪儿跑向爷爷,然后小嘴在爷爷脸上“叭”的亲了一口响响的。 “爷爷,奶奶再给我讲了一个九十九朵玫瑰的故事!” 爷爷抱起了安琪儿,用胡子在她嫩嫩的小脸上擦着,逗的安琪儿咯咯的笑。 “那爷爷也给你讲一个关于爷爷年轻时候的一个故事,也是关于玫瑰花的。
  那个时候爷爷还是个年轻的小伙子,每天都去邻镇的花店送花,店里隔夜的玫瑰 花都要丢掉,我看的可惜啊,就每天带着这些玫瑰花依次送到邻镇所有单身姑娘 的信箱里,其中还有个姑娘特别的漂亮还特别的有钱哦!可是送到第九十九朵的 时候,你奶奶就嫁给了我,嘿嘿,所以我就没在花店工作,到了这个镇上了!” 安琪儿有点不懂的看着爷爷“爷爷,你说的故事没有奶奶说的好听...一点都不 感人...” 随意饭厅传出奶奶的声音“我们的小宝贝,馅饼烤好了,快来吃啊。” 安琪儿开心的一溜跑去了饭厅,剩下爷爷一个人心里在闷着... “这孙女就是偏心喜欢她奶奶,虽然我说的故事没奶奶说的好...可是我说的都是 真实发生的故事嘛!哎......”

,

8
Jul

出来透个气

好久不写了,不能让这里再长草了,项目一旦开始人就没有精力再来写这些东西,不过我想还是需要坚持下去的。最近工作上在迎接新的冒险与挑战,人生就是一段一段的的旅程,无论结局如何,享受过程,努力拼搏,活得才有意义。
beyond - 海阔天空

misc:验证码
QQREADER95DAF47862C732FD

25
Apr

阿熊QCon笔记1

第二天的演讲一样精彩,相对于第一天的大概念和开发模式而言,第二天的演讲更贴近开发者和架构师,Erich Gamma被冰岛火山灰困住了,没能成行是这一届qcon最大的遗憾。
Facebook的扩展Memcached实战Marc Kwiatkowski讲的十分实在,facebook在memcache上的确是花了很多心思,讲了很多在使用memcache过程中,在高请求数据量的情况下所做的演进和优化工作,相对于国内大并发请求网站处理有较高的参考价值。相较而言Nick Kallen在Twitter的可伸缩性数据架构中的演讲虽然也很精彩不过适用范围就比较狭窄一些了。P.S:Marc Kwiatkowski乍一看很像PB里的Alex Mahone,哈哈。

下午阿里巴巴国际站架构分析和镜像解决方案中我们听到了阿里巴巴在跨IDC的解决方案方面做出的努力,也不错,不过相较而言和第一梯队的技术解决方案而言还有很多需要catch up的地方。
监控和虚拟化技术在“去哪儿”中的应用,作为运维出生的大佬吴永强,监控的演讲十分精彩,很多时候我们防患于未然依赖的就是监控团队在问题浮出表面之前解决问题,网站要做到4个9的可用性也是个很有挑战性的话题。
人人网技术架构的演进演讲中黄晶也大致介绍了人人网的技术架构演讲过程,同时宣布了要开源两个项目Nuclear和Rose,前者是一个分布式存储后者是java的web开发框架,基本上都是服务于业务应用逻辑的东东。Nuclear如果真如介绍所言,那可能是国内最好的Dynamo实践了,当然偶更欣赏豆瓣的BeansDB的简约风格,够用就好。Rose对于我等不用java做前端的人而言意义不是很大,只有让做java前端的朋友评判去了。
构建可扩展的微博系统的杨卫华也就是我们熟知的Tim Yang或者@xmpp的演讲也很精彩,一是大致解释了twitter/微博类应用中常见的技术难题,二是讲解了针对国内情况所需要注意的地方,不过貌似国内的互联网应用界对事务性要求都不是非常关心,我所关心的并发写入队列的时序问题依然没有人回答。

第三天的演讲偏重的主题是SOA,REST部分的演讲个人而言觉得PPT做的不是很好,Jim Webber把一个架构的改造和REST服务的引进绞合在一起来说明REST的优点,感觉比较的牵强附会,在FAQ环节也不容回避的坦白了REST只适用于那些秒级亦或是百毫秒级的应用场景。

个人感觉REST是个好东西但并不是middleware的替代品和解决方案,而只是企业对外接口的一个策略性option和非常聪明的option。一个企业既有内部的ESB服务总线在和其他下游/上游企业/个人交互的时候提供两套接口,一套使用传统的middleware比如DCOM/CORBA/ICE/Thrift/AMQP,另一套采用REST/XML-RPC/SOAP类似的http协议级别的通讯接口,这样一来交互的开发者在初期可以使用REST这类开发接口上手,快速解决问题(比如flickr众多的插件功能),在后期如果上升到企业应用高性能要求的层面再去使用ICE/Thrift这类的高通讯性能接口会是比较稳妥平滑的解决方案。

性能和可扩展性再度归来:内存数据网格 - 萧百龄
好吧我承认oracle的确牛x,做事很多时候都能想前一步,p2p网络的思想与我想的未来的互联网的服务发展方向不谋而合,很多时候感觉oracle/mac就像海洛因,你用多了会high,但也要付出高昂的代价,阿熊还是偏向于自由、免费、分享的理念。
下午 深入浅出复合事件处理(CEP)蔡学镛的演讲中午回酒店一趟拿东西没听到开头,不过感觉支付宝这些年已经折腾了不少好东东,CEP不太了解,唯一担心的是那么大数据量长期放在内存中可靠性如何保证这一定是个难题,支付宝是如何解决的呢,并发写入的时序性是如何保证的呢?

最后两场的演讲都很精彩 淘宝网前端应用与发展 小马哥把淘宝这四年来的演进史讲解了一遍,我想他们遇到的问题大多数团队都会遇到,而各个演讲路程的阶段性解决方案也适合各个成长中的团队借鉴学习。

最后一场是Douglas Crockford的JavaScript的现状和未来,大师的看法和角度已经不是我们普通开发者所站的角度在思考问题了,在web的各个标准层面去思考问题,对安全性的思考尤为重视。他是一位让人尊敬的勇士和斗士。大多数人都在热衷于增加功能(html5)和出于商业考虑兼容过去(IE6)而他却是忧心重重的在思考xss以及相关的安全问题。FAQ环节的第一位仁兄非常无脑的纠缠着namespace/model的问题不放,我真有心冲上去对他说:you havn't think in javascript way.后一位同学诉说了作为BCD(Boss Center Design)方式开发者的无奈,老板逼着你兼容IE6怎么办,老道的回答是尽量去做正确的事,如果我们继续兼容ie6,那它就会一直存在,只有我们联手去抵制它,web才能前进。

总的来说这届qcon还是受益良多的,国际上的领跑者已经在各个应用领域作出了很多研究,这里也分享了一些开发中遇到的问题,国内的领跑者也在前行中分享了不少开发中的经验和教训,也已经通过开发中的这些经验教训抽象总结出了不少好的作品做开源来推动国内的开源事业。只不过个人感觉互联网大公司之间的沟通交流还十分有限,都在着眼于各自的开发问题而造新的适合自己的轮子,如果将来能多做沟通形成标准,提出一套通用的类似Dynamo一样量级的解决方案或理论实践就更美好了。

BTW:
会展有很多细节做得还不太到位:
同声传译是个老问题,就第一天试了一下,后面还是干脆听原声来的清楚,明了不漏词。
座位没有学习电影院的排法,交错排放,前面人腰板一挺直,我就看不全ppt的幻灯。
主持人有些时候给人的感觉不太专业或者说不会把握FAQ环节的节奏,有些时候甚至该进入FAQ环节了人还没出现。

, ,

23
Apr

阿熊QCon笔记0

Michael Nygard 失败来临的征兆
基本上从经验上总结了系统的各个开发阶段可能出现的问题,qa并不能完全保证系统的可靠性,线上的情况很多时候无法预测,
所有着一些的Fault/Failture的预防方式给出了很多有益的建议,关键点是
尽可能完善的测试,
控制错误传播的范围,
降低服务间的耦合性以及服务间的依赖关系,
在SOA的体系中要有所谓的严重错误Breaker机制来预防蝴蝶效应带来的一系列严重后果。

另外举的一个服务压力由于突发性事件而导致的整个系统后端处理能力不足的问题,我想这也和bluedavy之前twitter里提到的的QOS不谋而合。

Paul King 动态语言的敏捷开发实践
总结了比较好的语言开发中的包括设计模式、语言特性等等开发方面的问题,但提出的解决方案groovy个人而言觉得思想上在现阶段的企业开发中还有所欠缺。

groovy也许可以提供更高速、敏捷的开发方式(或许在将来会是一个所有语言发展的趋势),但他依然存在动态语言的一个不容回避的问题-性能,尤其在企业SOA服务化的进程中,性能往往比较重要。paul在Q&A环节也遭遇到了这一问题,他也非常委婉的表达了动态语言的强项主要在敏捷开发上,同时底层依赖于java的服务,如果有必要则可以改写成java。

其实现有的企业解决方案中已经有了比较适合的方案,比如Cython之于python在豆瓣上的应用,又比如hiphop-php之于php在facebook的应用,虽然目前的应用面不广,语言跨度也仅局限于php和c++,但理念比较实用:动态语言编写,编译成静态语言和对应的字节码运行。这种理念即有了动态语言的灵活快速迭代开发的特性,又有了编译语言的高速高效,同时在系统逐渐稳定需求沉淀后,进一步对生成的静态语言代码做进一步优化和编译即可。

系统架构与最佳实践及创新的关系,李伟
关键词:
架构师:强制技术约束
Operational Concept
设计最佳实践:
并发能力,队列和调度
容错能力,识别,检测,评估,恢复,掩盖

, ,

20
Apr

关于转载

阿熊这里的技术文章大部分是属于总结归纳的文章,大部分是在参考别人的文章后结合实际的遇到的情况而整理修缮成文的。
其实在互联网尤其在中国互联网,基本上没什么版权可言,但现实并不代表不需要原则。
转载技术文章阿熊的原则是:你可以全文一致性copy但希望能注明来源出处,你没有做过对应的思考和实践,对你的流量和读者是不负责的。
当然如果你还非要帮阿熊的文章改头换面查找替换关键字归纳成自己的原创,其实大部分时候阿熊也拿你没辙,只是感觉这样的人性觉悟已经沦落如斯,真是对其自己智慧和人格的侮辱。
关于文章本身,保留版权,但可非商业性使用,署名,禁止演绎的方式转载,具体见Creative Commons协议
还是那句话,自己去思考去实践,去帮助你的读者,不要把人生浪费在为人不齿的事情上。

阿熊这里的电影文章都是自己的观影感受,不欢迎转载,但如果您喜欢欢迎交流。

,

公司的小童鞋们还是用win的多,没法子,装虚拟机,vmware太大,virtualbox也差不离,这些虚拟机都不爽,于是还是装个colinux比较方便一些,速度快,资源占用小,如果没有什么定制性的需求也可以安装andlinux,基本上属于傻瓜式安装搞定,如果和我一样喜爱ubuntu 的话也可以安装TaijiUbuntu

1. 基本安装配置

1.1 基本下载安装
ok,开始:
先去http://www.colinux.org/下载最新的windwos发行版binary包
coLinux-0.7.6.exe
以及在http://sourceforge.net/projects/colinux/files/中AllFiles里找到
Images 2.6.x Ubuntu》 Ubuntu 9.04》Ubuntu-9.04-1gb.7z 下载之,
colinux的guest机的磁盘rootfs系统就是这个文件,不过显然9.04以及1GB的磁盘空间是无法满足我的需求的,我们先把这个系统挂载上,后面再做磁盘扩展的工作。
安装coLinux-0.7.6.exe前需要先装wincap,去下个WinPcap_4_1_1.exe安装之。
安装的时候记得勾掉Root Filesystem image Download,安装包指定的发行版我们用不着下载,所以这里去掉勾选。
我现在假设coLinux安装在d:\opt\coLinux下。
顺便去下载个Xming(windows下免费的XServer)网址:
http://sourceforge.net/projects/xming/files/
下载安装:
Xming》 6.9.0.31》Xming-6-9-0-31-setup.exe
假设安装在d:\opt\Xming
如果像阿熊一样懒的话直接下载Xming-fonts》7.5.0.11》Xming-fonts-7-5-0-11-setup.exe
这样在win下理论上就不用自己去做fonts-cache了。
最后还有个Xming-mesa,是基于OpenGL编译的Xming感觉没什么必要。

1.2 基本配置

安装完上面的基本环境后colinux默认会添加一个tap设备,
我们先把自己的主网络连接(通常名为“本地连接”)改名为local
然后把这个colinux新添加的tap设备改名为tap-colinux

上面事情都做好了我们来建一个colinux的配置文件,以下为我的配置清单,大家也可以根据自己本地colinux默认自带的example.conf配置对照修改。

#
# This is an example for a configuration file that can
# be passed to colinux-daemon in this manner:
#
#    colinux-daemon @example.conf
#
# Note that you can still prepend or append configuration and
# boot parameters before and after '@', or you can use more
# that one '@ to load several settings one after another.
#
#    colinux-daemon @example.conf @overrider.conf mem=32
#
# Full list of config params is listed in colinux-daemon.txt.

# The default kernel
kernel=vmlinux

# File contains the root file system.
# Download and extract preconfigured file from SF "Images for 2.6".
cobd0="d:\opt\coLinux\ubuntu\Ubuntu-9.04.ext3.1gb.fs"

# Swap device, should be an empty file with 128..512MB.
#cobd1="d:\coLinux\swap_device"

# Tell kernel the name of root device (mostly /dev/cobd0,
# /dev/cobd/0 on Gentoo)
# This parameter will be forward to Linux kernel.
root=/dev/cobd0

# Additional kernel parameters (ro = rootfs mount read only)
ro

# Initrd installs modules into the root file system.
# Need only on first boot.
initrd=initrd.gz

# Maximal memory for linux guest
#mem=64

# Select console size, default is 80x25
#cocon=120x40

# Slirp for internet connection (outgoing)
# Inside running coLinux configure eth0 with this static settings:
# ipaddress 10.0.2.15   broadcast  10.0.2.255   netmask 255.255.255.0
# gateway   10.0.2.2    nameserver 10.0.2.3
#eth0=slirp
eth0=slirp,,tcp:22:22/tcp:3306:3306/tcp:1984:1984/tcp:11211:11211
# Tuntap as private network between guest and host on second linux device
eth1=tuntap

# Setup for serial device
#ttys0=COM1,"BAUD=115200 PARITY=n DATA=8 STOP=1 dtr=on rts=on"

# Run an application on colinux start (Sample Xming, a Xserver)
#exec0=d:\opt\Xming\Xming.exe,":0 -clipboard -multiwindow -ac"

其中

cobd0="d:\opt\coLinux\ubuntu\Ubuntu-9.04.ext3.1gb.fs"

为我解压Ubuntu-9.04-1gb.7z后的rootfs镜像文件。

网卡的配置:

eth0=slirp,,tcp:22:22/tcp:3306:3306/tcp:1984:1984/tcp:11211:11211

slirp模式配置比较简单,最后面跟着的是guest系统和host系统间的端口映射配置,tcp/udp协议,22:22前面的端口是host在这里也就是window宿主机的端口,后面的端口是guest机器也就是linux系统的配置。注意slirp,,tcp...之间的参数留空表示不指定网卡的mac地址(colinux每次随机生成),你也可以在此手工指定,注意不要与现有物理网络适配器(网卡)的mac冲突。其他的说明可以参考colinux-daemon.txt说明文件。以后有任何内部服务都可以通过这里配置直接映射到本机来提供服务。

上面的fs文件和conf文件预备好了后就可以跑起colinux下的ubuntu9.041Gfs系统了。做个bat批处理:run_ubuntu.bat

colinux-daemon.exe -t nt @my.conf

基本的系统就可以跑起来了,默认的console字体在我的虚拟机里看起来不太爽,所以我这里指定了终端(-t nt)使用colinux-console-nt.exe,本地化的字体还是看起来舒服点。
需要注意的是这个console就相当于你vmware/virtualbox的console默认情况下是无法显示中文的(没有fonts),可以在guest里安装zhcon等等,但不属于本文的内容。
这个时候由于开了内部的端口22转发,也就是我们可以直接用putty在windows下ssh自己本地127.0.0.1的22端口登入我们的linux系统(ubuntu9.041Gfs)
默认镜像的账户root密码root
大家配置的时候可以参考我的前面一篇基础配置说明:
vps配置笔记(1)基本环境设置去把基础环境设置一下。

2. 系统扩容

2.1 基本预备
不过您可能很快就发现1GB的磁盘空间完全是不够我们挥霍。这时候就需要扩容
先用fsutil来建个磁盘rootfs文件,大小可以计算:

10G = 10*1024*1024*1024 = 10737418240

建个10g的磁盘空间:

fsutil file createnew D:\opt\coLinux\ubuntu\root.ext3.fs 10737418240

swap分区也可以这样来建,不过有更简单的方法,别人做好了,我们选择下载一下即可:
http://gniarf.nerim.net/colinux/swap/下载适合你的配置,我觉得1024MB的不错:)。
http://gniarf.nerim.net/colinux/swap/swap_1024Mb.bz2
注意除了你需要修改自己对应的外部conf,内部fs也要记得在/etc/fstab中挂载上去才能生效。

2.2 扩容步骤
ok下面一步的流程就是我们需要:
2.2.1. 先挂载刚刚新建的分区文件(root.ext3.fs)到宿主机的配置文件里
挂载新创建的fs镜像
修改现有的my.conf配置:

cobd0="d:\opt\coLinux\ubuntu\Ubuntu-9.04.ext3.1gb.fs"

# Swap device, should be an empty file with 128..512MB.
cobd1="d:\opt\coLinux\swap.fs"

cobd2="d:\opt\coLinux\ubuntu\root.ext3.fs"

cobd0是现有的镜像文件

cobd1是我的swap.fs文件(即刚刚下载的那个1024MB的swap分区文件),之前改过/etc/fstab加入并重启过即可:

/dev/cobd1 swap swap defaults 0 0

cobd2是我们刚建的空白分区

2.2.2. 进入linux格式化这个分区(mkfs)
开机后在console登陆后开始先格式化空白分区:

mkfs.ext3 /dev/cobd2

2.2.3. 挂载这分区
添加挂载点位置,挂载挂载点:

mkdir /fs
mount /dev/cobd2 /fs
df -h

2.2.4. 拷贝现有所有数据到新分区挂载点
拷贝文件:

cp -ax / /fs

2.2.5. 复制设备节点
复制设备节点命令:

if [ -d /dev/.udev ]; then cp -a /dev/* /fs/dev/; fi

2.2.6. sync同步一下
同步命令:

sync

2.2.7. df确认没有问题后卸载(umount)挂载点,linux客户机关机
umount,关机

cd /
umount /dev/cobd2
shutdown -h now

2.2.8. 修改windows宿主机配置,替换主镜像。
修改宿主机配置

cobd0="d:\opt\coLinux\ubuntu\root.ext3.fs"

# Swap device, should be an empty file with 128..512MB.
cobd1="d:\opt\coLinux\swap.fs"

#cobd2="d:\opt\coLinux\ubuntu\Ubuntu-9.04.ext3.1gb.fs"

2.2.9. 开机确认没有问题,完毕。
启动确认没有问题,运行一定时间后可以删除Ubuntu-9.04.ext3.1gb.fs文件。

3. 与系统交互
在安装完基本系统后我们还只能通过普通的登陆服务器的方式与其交互,我们需要更好的使用它:
1外部可以通过winscp直接访问内部系统了,但需要内部可以直接使用windows宿主机的文件系统
2如果有可能,可以配置一个x环境

3.1 文件系统互通
对于第一个问题,我们可以利用colinux的cofs搞定,具体可以参考安装目录里的cofs.txt
在这里阿熊仅做一个简单的例子:
宿主机windows建个文件夹:D:\opt\coLinux\sharefolder
宿主机修改my.conf添加一个cofs的配置,比如放置在cobd的配置之后

cofs0="d:\opt\coLinux\sharefolder"

客户机ubuntu建个路径:

sudo mkdir -p /media/sharefolder

客户机ubuntu修改fstab添加一行:

cofs0 /media/sharefolder cofs defaults 0 0

重启之后客户机就可以在/media/sharefolder中访问宿主机windows的D:\opt\coLinux\sharefolder目录了。
那比如你也是和阿熊一样是个web开发者的话也可以直接映射windows机器的路径直接到你的ubuntu客户机路径里,这样如果你的客户机器安装了apache之类的服务的话,就可以实现客户机提供应用服务,而源代码在windows下编辑的方式,当然你也可以直接去装个cygwin去做同样的事情lol。这里需要注意的是cofs的权限模式目前并不完善,我貌似试了在这些目录下chmod无效,所以如果是做web开发的话,记得fstab里设置权限设定到www-data用户/组的对应配置,具体参考cofs.txt文档,阿熊的样例配置(www-data默认用户组id为33):
宿主机:

cofs1="d:\opt\xampp\htdocs"

客户机:

cofs1 /var/www cofs uid=33,gid=33,dmask=0775,fmask=0775 0 0

3.2 客户guest机与宿主host机网络交互
首先纯粹的slirp模式我还没找到可以行的通的x环境的方式。
所以还是按照添加的tap设备的方式来做事。

3.2.1 宿主端tap设备配置
之前改名过的tap设备:tap-colinux修改ip配置为静态ip地址:
控制面板-》网络连接-》tap-colinux->右键-》(属性/常规)-》Internet协议(TCP/IP):
ip地址:10.0.3.17
子网掩码:255.255.254.0
其他留空即可

修改my.conf中的网络段,添加/修改eth1的设置:

eth1=tuntap,"tap-colinux"

其中第二个参数是指定tap设备的名称,比如我们前面设置的tap-colinux
注意tap-colinux是你host宿主机的设备,我们还需要配置客户guest机的设备eth1

3.2.2 客户机网卡配置
开客户机修改网卡配置:

sudo vi /etc/network/interfaces

添加eth1网卡的静态配置:

auto eth1
iface eth1 inet static
   address 10.0.3.16
   network 10.0.3.0
   netmask 255.255.254.0
   broadcast 10.0.3.255

注意我们guest客户机的网卡配置静态ip地址为10.0.3.16

3.2.3 宿主机xserver(Xming)配置
运行windows下的xserver,比如我们前面下载安装的Xming,可以使用xlaunch配置xming的启动参数。
运行前我们可以配置一下D:\opt\Xming\X0.hosts文件,添加一行(一行一个配置)
写入我们上面设置的guest客户机的网卡配置静态ip地址:10.0.3.16

3.2.4 客户机执行命令:
在guest机器中执行:

export DISPLAY=10.0.3.17:0

也可以把这语句加入到你的.bash_profile,或者.bashrc的配置中去登录后自动执行。

然后就可以去安装个xterm或者xemacs之类的xWindow的程序来试试了

sudo apt-get install xterm xemacs

然后最后执行xterm 或者xterm &放在后台运行,注意的是x程序在这里貌似不允许root账户执行,所以还是必须建个普通user(带sudo权限也可以)来跑这些xWindow的应用。另外记得不用的时候,把状态栏里的Xming服务退出。

至此基本的windows下的ubuntu环境就基本配置完毕了,如果您仅仅需要当做开发服务器来跑,只需要参考我前面的几篇vps配置文章来设置即可。

4. 桌面环境

另外,虽然阿熊不太建议同时跑windows加gnome的窗口管理器,但如果你需要体验ubuntu的桌面环境也可以去装对应的gnome/xfce/kde包即可,比如

sudo apt-get install ubuntu-standard ubuntu-desktop

注意远程通过xdmcp连接gdm的话需要修改gdm或者xfce/kde的配置文件允许xdmcp登录,比如gdm的:

sudo vi /etc/gdm/gdm.conf

在[xdmcp]配置段修改Enable设置为true,然后重启gdm即可。

sudo /etc/init.d/gdm restart

xserver(Xming的XLaunch)连接的时候选via Xdmcp,连接的地址写与宿主机tap设备同网段通讯的客户机eth1适配器的那个静态地址,我的为10.0.3.16

本文参考了几篇文章,感谢原作者的辛勤写作,我这里仅做收集整理而已:
http://www.saltycrane.com/blog/2008/04/install-colinux-and-ubuntu-gutsy-on-win/
http://blog.pangwa.com/2009/01/08/colinux-xming-part-1/
http://passby2005.blogspot.com/2008/12/linuxubuntu-colinux-debian-40.html
http://yoyoliyang.blogspot.com/2009/05/colinux.html
http://blog.itmem.com/archives/1067
以及官方的:
http://colinux.wikia.com/wiki/ExpandingRoot

, , , ,

The Impossible Dream-Sarah Connor

下午代码写累了,本来想找点乐子电影看看,看到了保卫者,想起了n久一起貌似看过预告片,以为又是一个dumbass搞怪逗乐最后赢取美女芳心的商业垃圾食品。看完以后立刻让我想起了另一部也颇为神似的韩国电影《曾是超人的男子》以及稍显轻量的《率性而活》,回到电影本身,第一句想说的就是:The Impossible Dream.

蜘蛛侠酷么?超人牛X么?就算是蝙蝠侠也是一身精良装备,就算是周星星也有如来神掌。但是当你什么特技都不拥有的时候你还能做hero么?你还有勇气做hero么?
剧中的主角是个被诊断为“婴儿期孕妇酒精中毒、多动症、抑郁症、妄想症、不能预见后果、缺乏常识、社会性不成熟”在常人看来可以用白痴两个字去形容的阿甘式的人物。但是就是这样的人物却有着漫画英雄一样的志向,维护正义,去除毒品之害、帮助弱势的人群。

我们小时候的梦想或许有长大以后维护世界和平,维护正义的一面,随着年龄的增长,我们的勇气、梦想却在一天一天被这残酷的现实(在西朝鲜尤甚)磨灭着、摧残着。

我们逐渐变得精明、算计、势利、伪善,那些维护正义、锄强扶弱的理想逐渐被丢到了不为人知的角落,抑或是排在了维护自己的金钱、面子、身价、地位等种种利益之后。why?利己和自我保护是人的天性,但只有大多数人的觉醒这个社会才会真的进步。

影片的结尾是个杯具,但他至少为世人的觉醒做出了一份努力,在一个信仰缺乏的国度,逐利无度、道德沦丧的年代,我们需要的是更多唤醒我们良知和梦想的人;需要的是那些秉承信念,放下一切思想的羁绊去追逐真正梦想的榜样! 这比那些影帝的表演更加弥足珍贵。

最后附送上堂吉诃德-梦幻骑士中的歌词:

   《The Impossible Dream》
  
   To dream the impossible dream
  
   To fight the unbeatable foe
  
   To bear with unbearable sorrow
  
   To run where the brave dare not go.
  
   To right the unrightable wrong
  
   To be better far than you are
  
   To try when your arms are too weary
  
   To reach the unreachable star
  
   This is my quest, to follow that star,
  
   No matter how hopeless, no matter how far
  
   To be willing to give when there''s no more to give
  
   To be willing to die so that honor and justice may live
  
   And I know if I''ll only be true to this glorious quest
  
   That my heart will lie peaceful and calm when I''m laid to my rest
  
   And the world will be better for this
  
   That one man scorned and covered with scars
  
   Still strove with his last ounce of courage
  
   To reach the unreachable star.
  
   去做那不可能的梦想
  
   去和那打不败的敌人战斗
  
   承担那无法承受的哀愁
  
   奔向那勇者们都不敢前去的地方
  
   去改正那无法修正的错误
  
   从远处献上纯洁的爱
  
   在你的双臂都已疲累的时候继续努力
  
   伸手去探取那遥不可及的星星
  
   这就是我的理想
  
   去追寻那颗星星
  
   不论希望多麽渺茫
  
   不论路途有多遥远
  
   没有疑惑
  
   永不休止的为正义而战斗
  
   为了天赋的使命
  
   即使被打入地狱也心甘情愿
  
   而我知道
  
   只要我忠於这璀璨的梦想
  
   当我被安葬的时候
  
   我的心将会宁静祥和
  
   而世界也将变得更加美好
  
   因为有个备受责难满身创伤的人
  
   仍然在拼着他最后一丝的勇气
  
   去探取那遥不可及的星星

, ,

非常惭愧的还没有抽出时间去学一学git,权且先在这里记录一下当下的比较主流的subversion(svn)的架设记录,网上已经有很多了,在这里只是整理记录一下而已。
svn目前作为服务总体上有两种常见形式svn自身协议的方式或者走http协议,svn自身协议自不待言搭建简单方便一条命令搞定:

sudo svnserve -d --listen-port 1234 --listen-host scm.myhost.com --pid-file /var/run/svnserved.pid -r /scm/svn/repos/myproject

各参数大致意义:
-d 指定后台daemon服务方式运行
listen-port 监听端口 1234
listen-host 监听域名 scm.myhost.com
pid-file 指定运行时进程PID号记录文件路径 /var/run/svnserved.pid
-r 指定项目svn库所在路径。/scm/svn/repos/myproject
一旦架设完成后面就可以用svn checkout检出源码了:

svn co svn://scm.myhost.com:1234/myproject

svn库创建命令

svnadmin create /scm/svn/repos/myproject

建立好基本库后一般都需要构建一下基本的源码管理layout布局:

mkdir -p /tmp/layout/{trunk,branches,tags}
cd /tmp/layout
svn import . file:////scm/svn/repos/myproject -m 'init project layout'

然后我们以后checkout主线代码就可以:

svn co svn://scm.myhost.com:1234/myproject/trunk

svn的http协议方式目前还依赖于apache容器,不过你愿意的话也可以前端用varnish/nginx把请求转发到apache容器上也可以达到对外统一服务的目的。
基本的安装就不细细叙述了,这里只写一下vhost下的配置方法。
首先需要创建几个共用文件:
/scm/svn/conf/accessfile
用来设定所有项目的各个账户权限,具体请参考svn的配置文件文档,这里仅给个例子:

[groups]
administrator = axiong
[/]
@administrator = rw
* =

/scm/svn/conf/passwdfile
用来指定所有项目的用户和对应密码,当然这部分也可以在mysql里搞定,感觉小型项目没有什么必要,还是文本方便,可以用apache-util里的htpasswd生成。
指定完了后就是vhost的配置了:

<VirtualHost *:80>
        ServerName scm.myhost.com
        <Directory />
                Options Includes FollowSymLinks
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
    <Location /svn>
        DAV svn
        SVNParentPath /scm/svn/repos
        AuthType Basic
        AuthName "Subversion System"
        AuthUserFile /scm/svn/conf/passwdfile
        AuthzSVNAccessFile /scm/svn/conf/accessfile
        Satisfy Any
        Require valid-user
    </Location>
</VirtualHost>

这样就架设好了http://scm.myhost.com/svn/myproject的svn库,
以后还可以在/scm/svn/repos下建立更多的svn库使用统一管理的账户和密码。
注意/scm/svn/repos下的每一个项目都需要有apache所在组或用户的写入权限,否则代码会提交出错。

更新一下:修改了一下location地址方便和trac配合。

, , , ,

11
Mar

"读书笔记"

说起来我已经很久没有看纸质书籍了,最后一次看的书籍也只是《php和Mysql的web开发》这样的书籍。

我的大部分生活都是泡在网络上,说泡有点不太准确,基本上看看行业新闻之外我都在关注互联网的商务和技术方面的文章。为什么不看纸质书籍?因为我觉得传统的出版行业和新闻行业从信息传播的角度来说已经远远落后于互联网,无论于传播的速度和信息内容的更新而言都是。

一本书成型,一篇新闻定稿要经过层层工序或者层层审批,日新月异已经无法形容现在信息更新的频度了,而twitter类的短信息平台又进一步将信息的传播和更新提高到了一个闻所未闻的高度,雅虎的没落、微软的夕阳,google的崛起,facebook的热闹,twitter的火爆,无一不在预示着这个行业的明天一定是以个人为中心(facebook)的高速信息传播(twitter/friendfeed)和信息检索(google)的人群信息服务行业。在这个行业中到处是金矿就看你如何去挖了。

我不太爱看励志类的文章/书籍,对自己的能力和信心不够确信时他们才能帮助你催化你,否则就是。。难听的话我就不说了。

管理类文章都貌似不错,但别人喂给你的经验,永远没法跟自己实践中吸取的经验教训相提并论。

最后如果您想问我在网上都读了些什么,请看我的delicious书签:http://delicious.com/nickfan

虽然很不情愿被读书笔记,但是还是感谢有个机会表述我对传统纸媒体的看法和对互联网的想法。

关于thrift,可能一般情况下用到的人不多,不过在类似于facebook这样的大型系统中,需要一个统一的数据接口去连接内部的各个子系统,这个时候中间件就必不可少了,thrift主要用于rpc类的中间件,当然自己定义理论上也可以用来做异步消息处理的底层,异步消息这方面成熟的开源产品还是很多的,比如rabbitmq之类的,大公司也大多数有参考或在使用自己开发的对应产品。
在rpc中间件本身层面来说,个人之前比较熟悉的是zeroc的ICE中间件,不过随着时间的推移,facebook的thrift越来越惹人喜欢,更原始的接口(ice这方面虽然号称轻量级的中间件,不过thrift似乎更轻量,基本上和java中的mina属于一个量级的作品,同时也得承认ice帮程序员做了更多的通用工作,更易于使用),社区支持(当时ice的官方论坛注册是需要你有企业/教育系统信息并通过管理员确认的),语言支持更多(thrift直接支持erlang),开源(thrift是Apache 2.0 的License,而ice有GPL和商业两种License,但是这种两手做法个人反倒更看好前者thrift的发展)。
废话说完了,开始做thrift配置。
总体来说thrift的安装流程比较简单:
目前的release0.2.0版貌似在mail list里讨论的时候还有一些小bug,我还是上官方svn checkout 的主线代码:

svn co http://svn.apache.org/repos/asf/incubator/thrift/trunk thrift

然后开始编译,编译前最好看一下README,如果编译流程有变动以README为准。
编译基本上就是整体编译一遍,然后根据你需要的语言库(c++/java/ruby/python/php/perl/erlang/c#等)进入lib下分别编译你需要的语言中用的lib库,然后加入到你需要的语言客户端去用即可。

编译前检测一下,可能需要手动安装boost开发库bison(yacc解析器) flex(lex词汇生成器)等相关工具:

sudo apt-get install libboost-dev automake libtool flex bison pkg-config g++

java的话建议加上ant,ivy,libslf4j-java和libcommons-lang-java,其中slf4j基本上封装了很多种logger,比如常用的log4j等,安装的时候也可以带上log4j:

sudo apt-get install ant ivy libslf4j-java libcommons-lang-java liblog4j1.2-java

在你的/etc/environment中的CLASSPATH中添加一下这些jar包的调用:

CLASSPATH=/usr/share/java/ant.jar:/usr/share/java/commons-lang.jar:/usr/share/java/ivy.jar:/usr/share/java/log4j-1.2.jar:/usr/share/java/slf4j-api.jar:/usr/share/java/slf4j-log4j12.jar

开始thrift的编译安装,我libevent是手工编译安装在/usr/local下的需要指定一下:

cd thrift
./bootstrap.sh
./configure --with-libevent=/usr/local
make
sudo make install

然后我们来分别编译几个语言的支持。
先来php的thrift协议扩展,thrift的TSocketPool类用到了apc扩展中的方法apc_fetch(), apc_store(),注意如果没有的话需要先安装一下,开始安装:

cd lib/php/src/ext/thrift_protocol
phpize
./configure --enable-thrift_protocol
make
sudo make install
cd ../../../../../

安装完了后修改你的php.ini文件:

sudo vi /usr/local/php/etc/php.ini

加入扩展的设定:

[thrift_protocol]
extension=thrift_protocol.so

如果你运行了php-fpm,重启一下php-fpm的进程管理:

sudo /etc/init.d/php-fpm restart

纯粹cli应用的话可以直接检测一下扩展有否载入:

php -m |grep thrift

至此php部分的安装成功。

python的部分,安装比较简单,和通常的安装包差不多:

cd lib/py
python setup.py build
sudo python setup.py install
cd ../../

java的部分如果你前面编译没有问题的话,此时libthrift.jar应该已经被安装到/usr/local/lib下了,可以简单的做个软链接:

sudo ln -s /usr/local/lib/libthrift.jar /usr/share/java/libthrift.jar

另一种方法是到lib/java下去编译了拷贝过去:

cd lib/java
ant
sudo cp libthrift.jar /usr/share/java/

最后在环境变量中添加引用即可:

CLASSPATH=/usr/share/java/libthrift.jar

记得source一下应用新的环境变量。
至此几个比较常用的语言的thrift配置就搞定了,下一步就是根据具体的应用去做对应的开发了。

, , , ,

Switch to our mobile site