2011年12月28日, 11:20 下午
最近我的ESXi上的硬盘突然出现不稳定的情况,于是赶快将数据备份出来,扔到自己Ubuntu做的NAS上面。
在VMWare官网上面看到很多人都说ESXi上的虚拟机不应该安装到本地,虽然速度快,但是不容易管理,不容易备份。
所以把ESXi安装到一个U盘里面其实就可以,然后用千兆太,或者万兆太连接NAS或者SATA外置硬盘盒。
那这里就有一个问题了,这个U盘要多大?
我们知道… 通过对将死的硬盘的解剖,里面一共有6个分区,4个FAT,2个VMFS,4个FAT里面是一些系统文件,总共不要1GB
那1GB的U盘是不是够了呢?
通过对文档的阅读,答案是:
5.2GB,包含一个类似Swap分区的东西是4GB
参考文档如下:
http://pubs.vmware.com/vsphere-50/topic/com.vmware.ICbase/PDF/vsphere-esxi-vcenter-server-50-installation-setup-guide.pdf
2011年12月10日, 5:36 下午
现代人还是很幸福的啊… 从3岁小孩到百岁老人都有电脑玩… 我的一个老年人朋友最近就有一个需求,就是给Picasa的Photo Slideshow配乐。其实是很简单的事情,但是如果全盘都让老先生写iframe的代码,是不是有些残酷了呢… 所以我就做了一个小php应用给他。
程序的目标:
通过输入Picasa的slideshow地址,和youtube的地址,来自动生成一个用iframe组合好的,可以自动播放音乐的网页
程序内容文件:
1. index.html
2. save.php
3. show.php
数据库结构
CREATE TABLE IF NOT EXISTS `main` (
`idx` INT(11) NOT NULL AUTO_INCREMENT,
`picasa` text NOT NULL,
`youtube` text NOT NULL,
PRIMARY KEY (`idx`)
) |
index.html文件结构:
<form action="save.php" method="post">
Picasa address :
<input name="picasa" type="text" />
Youtube address:
<input name="youtube" type="text" />
<input type="submit" value="Submit" />
</form> |
非常简单的结构,两个输入框,一个提交按钮,使用post,到php
save.php文件结构:
//数据库连接信息
$username="zetadba";
$password="qwe123123";
$database="zeta";
//连接数据库服务器
mysql_connect("localhost",$username,$password);
//选择数据库
mysql_select_db($database);
//写一个SQL查询语句, 保存从index.html POST过来的数据到数据库
$query = "INSERT INTO main (picasa,youtube) VALUES('".$_POST["picasa"]."','".$_POST["youtube"]."')";
//执行SQL语句
mysql_query($query);
//debug mysql的错误,之前很多错误... sql那些东西都快忘光了...
echo mysql_error();
//查询刚刚存进去的条目的主键数值,用来给show.php来用
$query2 = "SELECT * FROM main ORDER BY idx DESC LIMIT 1";
//得到数值sql结果
$result2 = mysql_query($query2);
//得到我们想要的主键idx的值
$videoidx = mysql_result($result2, 0, "idx");
//关闭... sql
mysql_close();
将这个页面自动跳给show.php,这样我的老年朋友就可以直接拷贝走这个URL了
header('Refresh: 3; url=show.php?vv='.$videoidx); |
show.php文件结构
//不解释了...
$username="zetadba";
$password="qwe123123";
$database="zeta";
mysql_connect("localhost",$username,$password);
mysql_select_db($database);
//这里是直接用的URL数值传递,所以我们GET这个vv值
$query = "SELECT * FROM main WHERE idx='".$_GET["vv"]."'";
$result = mysql_query($query);
//没写html文件头,所以写个这个当title...
echo "Picasa+Youtube";
$picasa = mysql_result($result, 0, "picasa");
$youtube = mysql_result($result, 0, "youtube");
//我们需要解析得到的youtube后面的url结构,得到video id
//比如http://www.youtube.com/watch?v=puSkP3uym5k&list=FLV8tlMnzjrbiS7YLh8FAtPQ&index=10&feature=plpp_video
//中的puSkP3uym5k
$parsedurl = parse_url($youtube);
$videourlquery = $parsedurl['query'];
parse_str($videourlquery);
//经过以上的各种解析,我们最后得到了其中的v的值
$videoid = $parsedurlquery['v'];
//输出html结构
echo "<iframe width='99%' height='99%' border=0 src="".$picasa."" mce_src="".$picasa.""-->";
echo '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="10" height="10" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/'.$v.'?version=3&hl=zh_CN&autoplay=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="10" height="10" src="http://www.youtube.com/v/'.$v.'?version=3&hl=zh_CN&autoplay=1" allowfullscreen="true"></embed></object>';
echo mysql_error();
mysql_close(); |
以上!大功告成,一个小小的给老人的礼物,让他们做出这个东西,然后送给朋友,当一个小礼物!
2011年12月5日, 12:31 上午
之前写过一个NSString的内存管理
不过好像由于之前的理解不深刻,所以写的时候也没有说明太清楚。
CS193P的笔记上有如下实例:
aString = @"I am a string that 2 years old, man!";
这种情况下,字符串储存和管理由系统做,我们不用操心。
aString = [NSString stringWithFormat:@"I am a string that %d years old, man!",2];
第二种情况下,我们需要去retain和release这个字符串,系统不管。
这是之前写的内容。
为什么第一种我们不管这个产生的NSString的retain值呢?是因为其实由于我们建立了一个常量,无论我们retain还是release,对于这个对象都是没有意义的,大家可以尝试
NSString *foo = @"ssff";
[foo release];
[foo release]; |
会发现,这样的代码并不会让程序崩溃,而且无论你再release几次都是一样的。
第二种其实就是利用NSString 方法来生成一个NSString对象,这个时候我们要招呼到这个对象的retain值,否则就是内存溢出了。而我当时说的并不是一定要releaes或者retain这个stringWithFormat便捷方法产生的对象… 我语文不好,哈哈。便捷方法产生的都是autorelease的对象,谢谢大家的留言!
2011年12月3日, 9:17 下午
之前在一个朋友家里面帮忙弄他的iPhone和iPad,但是常常发现这台电脑上的USB接口很不好使,iPhone和iPad接上去不认或者要很久才能识别。不仅仅是i设备,很多高功耗的设备都有这个问题。但是像手写板,U盘,这种设备却没有任何问题。
过了一段时间,朋友说自己的电脑会自己关机,而且是突然灭掉那种。
我过去检查了一下,说来奇怪,我用的时候,这个电脑还是非常听话的,没有出现任何不良的问题,甚至用Stress Prime 2004也是正常工作,让我一头雾水。但是回头用主板BIOS的PC Health检测,发现电压有严重不足和不稳定的情况。
于是乎立刻拆开了朋友的电脑,发现是一个RaidMax的垃圾电源… 450W的功率,但是却轻的要命…
换上一个ThermalTake的T2系列电源后,一切问题立即消失…
2011年09月19日, 10:11 下午
https://market.android.com/details?id=name.gzl.MyFodian
这个版本的 我的佛典 可以说是非常的不成熟,但是我却花了很多的功夫在里面
这个版本的重点不是之前的多功能,而目只有一个功能,就是经文,是全部经文,是整部大正藏
非常感谢CBETA在电子经文上的努力,如果没有他们的XML文件,我的程序也就是不可能的了
我制作这个软件也算是一种还愿了,虽然佛陀和菩萨并没有真的全帮上我,但是我言出必行
我只希望大家能够通过我的程序,多读经文,多读佛陀的话语,而不是后人的揣测。
我在美国学到关于宗教最重要的,就是要读真正的,原始的,真实的经文。我在基督教浸信会中学习了两年,那个时候虽然他们很不情愿我这个佛教徒在那里参合,但是我却学到了很多在佛教圈子学不到的东西。
他们只尊重圣经原文,任何的后人解释,都不重要,都不是神的话语。我想佛教徒也应该学习他们的这种精神。也许古代佛经有很多真的太不容易读懂了,但是当我们读懂的时候,能从里面学到的,是真正的般若智慧。不会是后人的揣测,甚至是邪魔的臆造。
希望大家多看经文。在制作这个程序之前,我都不知道原来大正藏一共有3613本经,其中正藏就有一半,这些佛陀的教诲,大家又真的学会了多少呢?有多少人只是在背诵那短的不能再短的心经,而甚至都不知其意?大正藏的HTML文件大约有2.5GB大,而一部心经我猜也就1-2kb。佛学是广大的,希望大家能读原经。



2010年07月3日, 3:43 下午

很简单的一个程序,计算从某天到某天一共经历了多少年,多少月,多少日,多少周. 或从某天在某年,某月,某周,某日之后是哪天
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="882" height="372"
title="DateCounter by Zac@GoldG.net(Zhengliang Guo)">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
private function ftChanged():void
{
if(fromDate.selectedDate && toDate.selectedDate){
var gapTime:Number;
gapTime = (toDate.selectedDate.getTime() - fromDate.selectedDate.getTime()) / 1000 / 3600 / 24;
dd.text = (gapTime).toString();
ww.text = (gapTime/7.0).toString();
yy.text = (gapTime/365.0).toString();
mm.text = (int(gapTime/365) *12 + (toDate.selectedDate.getMonth() - fromDate.selectedDate.getMonth())).toString();
}
}
private function midChanged(str:String):void
{
dstY.text = (startDate.selectedDate.getFullYear()).toString();
dstM.text = (startDate.selectedDate.getMonth()+1).toString();
dstD.text = (startDate.selectedDate.getDate()).toString();
if(startDate.selectedDate)
{
var midTime:Number;
if(str == 'y')
{
midTime = Number(midY.text);
resetField2();
midY.text = midTime.toString();
dstY.text = (startDate.selectedDate.getFullYear() + midTime).toString();
}
else if(str == 'm')
{
midTime = Number(midM.text);
resetField2();
midM.text = midTime.toString();
if(((startDate.selectedDate.getMonth() + 1 + midTime))>12)
{
dstY.text = (Number(dstY.text) + int((startDate.selectedDate.getMonth() + 1 + midTime)/12)).toString();
dstM.text = ((startDate.selectedDate.getMonth() + 1 + midTime) % 12).toString();
}
else{
dstM.text = (startDate.selectedDate.getMonth() + 1 + midTime).toString();
}
}
else if(str == 'w')
{
midTime = Number(midW.text);
resetField2();
midW.text = midTime.toString();
var tarDate:Date = new Date();
tarDate.setTime(startDate.selectedDate.getTime() + (midTime * 7 * 24 * 3600 * 1000));
dstY.text = (tarDate.getFullYear()).toString();
dstM.text = (tarDate.getMonth() + 1).toString();
dstD.text = (tarDate.getDate()).toString();
}
else if(str == 'd')
{
midTime = Number(midD.text);
resetField2();
midD.text = midTime.toString();
var tarDate:Date = new Date();
tarDate.setTime( startDate.selectedDate.getTime() + (midTime * 24 * 3600 * 1000));
dstY.text = (tarDate.getFullYear()).toString();
dstM.text = (tarDate.getMonth() + 1).toString();
dstD.text = (tarDate.getDate()).toString();
}
else if(str == 'c')
{
resetField2();
}
}
}
private function resetField2():void
{
midY.text = "0";
midM.text = "0";
midW.text = "0";
midD.text = "0";
}
]]>
</fx:Script>
<mx:DateChooser id="fromDate" x="27" y="66" change="ftChanged()" showToday="false" />
<mx:DateChooser id="toDate" x="211" y="66" change="ftChanged()" showToday="false" />
<s:Label x="87" y="20" text="From" fontSize="25"/>
<s:Label x="276" y="19" text="To" fontSize="25"/>
<s:Label x="22" y="280" text="Days" fontSize="20"/>
<s:Label x="22" y="319" text="Weeks" fontSize="20"/>
<s:Label x="206" y="281" text="Month" fontSize="20"/>
<s:Label x="206" y="316" text="Year" fontSize="20"/>
<s:Label id="dd" x="96" y="281" text="d"/>
<s:Label id="ww" x="96" y="320" text="w"/>
<s:Label id="mm" x="272" y="285" text="m"/>
<s:Label id="yy" x="272" y="320" text="y"/>
<s:Panel x="433" y="10" width="433" height="328" title="Date To Time">
<s:TextInput x="277" y="23" text="0" id="midY" change="midChanged('y')"/>
<s:TextInput x="277" y="53" text="0" id="midM" change="midChanged('m')"/>
<s:TextInput x="277" y="84" text="0" id="midW" change="midChanged('w')"/>
<s:TextInput x="277" y="114" text="0" id="midD" change="midChanged('d')"/>
<s:Label id="myy" x="225" y="28" text="Years"/>
<s:Label id="mmm" x="225" y="59" text="Month"/>
<s:Label id="mww" x="225" y="90" text="Weeks"/>
<s:Label id="mdd" x="225" y="119" text="Days"/>
<mx:DateChooser id="startDate" x="10" y="10" change="midChanged('c')" showToday="false"/>
<s:Label x="47" y="236" text="0000" fontSize="35" id="dstY"/>
<s:Label x="158" y="236" text="00" fontSize="35" id="dstM"/>
<s:Label x="225" y="236" text="00" fontSize="35" id="dstD"/>
</s:Panel>
</s:WindowedApplication> |
很麻烦… 真有人需要的花, 自己看看吧, 不知道能不能帮上….
南无阿弥陀佛 南无本师释迦牟尼佛 南无药师琉璃光如来
2010年07月3日, 3:02 下午
上个文章聊了一下怎么检测iPhone/iPod/iPad, 接下来我们就需要实施CSS了
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))){
document.write('<link href="iphone.css" rel="stylesheet" type="text/css">');
}
if((navigator.userAgent.match(/iPad/i))){
document.write('<link href="ipadwoflash.css" rel="stylesheet" type="text/css">');
} |
以上的javascript在检测到是iphone和ipod touch的时候就会写入iphone的css, 在检测到ipad的时候就会使用一个为ipad准备的没有flash的css结构~
南无阿弥陀佛 南无本师释迦牟尼佛 南无药师琉璃光如来
2010年07月3日, 2:53 下午
PHP的比较简单可爱:
if (strpos($_SERVER['HTTP_USER_AGENT'],"iPhone"))
{
echo '在用户代理信息里面如果有iPhone, 执行您的代码';
//别忘了给iPod和iPad也加上去当条件阿~~
} |
javascript的也不错,不过我一直不喜欢浪费太多的iPhone资源,不过这回佛典的html文件还是需要使用javascript,因为所有的xml文件都是简单的转换成html,如果再将php搀和进来就很麻烦了
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)))
{
document.write(navigator.userAgent);
}
else
{
document.write(navigator.userAgent);
} |
我们可以看一下上面代码的输出:
如果是一台Mac:
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.86 Safari/533.4
如果是一台iPhone:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9(KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
其实就是找到agent中的典型信息,iPhone这个关键字了.
南无阿弥陀佛 南无本师释迦牟尼佛 南无药师琉璃光如来
2010年06月18日, 10:38 下午
XML用处很大… 用得很广… 最简单的来说用PHP和Javascript, JQuery都可以简单解析一个整齐的树结构XML文件
但是我们可爱的佛典网XML为复杂结构, 于是乎xslt帮不上什么忙了……我希望在新版的佛典中能包含所有的佛经, 于是简单并且高效的使用所有中华佛典网上的XML就是我的目标了.
于是,基于事件的XML解析器(Event-Driven XML Parser) NSXMLParser 就是我必须用到的了
继续前面的两篇Mac平台程序设计
Mac:打开一个目录
Mac:得到一个目录内的内容
1, 更改界面, 添加一个”解析一个目录里面的第一个的文件”的按钮

2, 构建XML解析部分
-(void)parseXMLFile:(NSURL *)XMLURL //XMLURL为第一个文件的URL
{
NSXMLParser *eventParser = [[NSXMLParser alloc] initWithContentsOfURL:XMLURL];
[eventParser setDelegate:self]; //设置代理为本地
[eventParser parse]; //开始解析
NSLog(@"end Of parseXMLFile");
} |
//2, 解析开始后,所有XML的内容由NSXMLParserDelegate处理
// 所以一定要注意在本地添加<NSXMLParserDelegate>到文件头 |
//在NSXMLParser读到<p>的时候重写一个<p>标签,原来的是XML中的,无法直接使用
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"p"]) {
[htmlDataString appendFormat:@"<p>"];
needOrNot = YES; //我们需要<p>和</p>中间的内容,其余的在end中设置NO
return;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if(needOrNot)
{
[htmlDataString appendString:string]; //如上,将需要的字段添加到得到的html结构String中
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"p"]) {
[htmlDataString appendFormat:@"</p>"];
needOrNot = NO; //不需要的内容不允许上面的delegate去读取到htmlDataString中
return;
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(htmlDataString); //在结束后输出得到的html数据结构.
} |
这样我就可以对佛典网的复杂结构xml开始分析了, 之后会放出更多对该xml处理的细节