在Vista中装好了Ubuntu 8.10,顺便发篇文章测试一下。
目前,声卡在虚拟机中还没有驱动,update时也出现了一些小问题。
Pidgin极不稳定。
有待进一步测试。
在Vista中装好了Ubuntu 8.10,顺便发篇文章测试一下。
目前,声卡在虚拟机中还没有驱动,update时也出现了一些小问题。
Pidgin极不稳定。
有待进一步测试。
最近由于重新装了Vista,所以有些软件要重新装:比如财智家庭理财软件。
我买过它的产品,并且一直升级到我现在使用的5.x版本。今天去它的网站看了看,有了版本6,本来想升级的,但是发现一个小问题:6之后的版本的序列号不再是“永久”的了,而只能使用一定的时间,比如一年或者两年。
这就让我很犹豫了:要不要升级呢?说老实话,我是决定不升了。因为目前的版本我也用的很好,还有很多功能我不怎么会用。干嘛要升级呢?
一个收费模式的改变往往就改变了用户对软件购买(升级)的选择。所以,要慎重啊……
从老妖的站点中下载了一个比较好玩的插件:HashTab。安装后,任何文件的属性对话框中都会多出这么一个页面:
从而可以方便的得到每个文件的各个重要的校验数值(如CRC32,MD5等)。不过,貌似这个插件是“即时”计算的,所以,对于比较大的文件,计算时间会比较长。当然,这类校验值本身也不是属于“日常”使用范畴,在确实需要的时候——例如你下载了一个巨大无比的文件时——测试一下,那么忍受一些计算时间还是可以的。
下载地址:http://www.rsywx.net/download/HashTab.v2.0.8.ccrun.552191.rar.
GT的英文版中有一个可以共享你在听虾米音乐的功能。以前我一直、一直没有试出来——请8要怀疑我的RP。基本的设置我还是懂的。
今天再次不死心,装了英文版本的GT,用最标准的WMP播放,结果还是可耻的没有显示我在听虾米音乐。我的郁闷不是一点两点……
网上搜索了几把也不知所云。最后,卸载GT后用神奇的管理员身份安装,然后……一切就OK了。
原来,是酱紫的:
GT要支持这个功能,需要提供一个插件给WMP。只有当你以管理员身份安装时,才能注册这个动态链接库。只要注册了这个动态链接库成为WMP的一个插件,所有的问题都迎刃而解了。
接下来,我们继续看属于LinearLayout的子控件的两个控件:TextView和Button。有关Android界面中可以用到的Widget有哪些我会在以后再描述。
===================
我想,部分是受到了山寨机也即将支持Android的鼓舞,最近我下载了一套Eclipse Ganymede+Android SDK,开始看看在这套著名的API下开发Android应用会是怎样的体验。 不是说以前没有尝试过开发手机下的应用。比如,在我04年用Palm的时候,06年用WM的时候,08年用Symbian的时候……不过都可耻滴放弃了:
好吧,让我来看看Android……
===================
当然,如何设置ADT(Android Eclipse Plugin)我就不说了(什么,你不知道怎么玩Eclipse?这个这个……);怎么用Wizard来创建基本的框架我也不多说了。我只说说接下来我做的事情。 首先,我先创建了一个Run的配置,然后就开始运行。Android模拟器顺利的启动了,新创建的项目也顺利执行。然后我开始看整个项目的结构:
HelloMyAndroid
├─assets
├─bin
│ └─com
│ └─android
│ └─tr
│ └─testcase
├─res
│ ├─drawable
│ ├─layout
│ └─values
└─src
└─com
└─android
└─tr
└─testcase
在这个结构中:
=================
由于我准备在一个很常规的Hello World程序中增加一些新东西,所以我第一步就开始修改界面。为此,我修改了res/layout/main.xml:
<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
>
<TextView
android:id=@+id/lblHello
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=@string/hello
/>
<Button
android:id=@+id/btnClickMe
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=@string/btn_click_me
/>
</LinearLayout>
我选择使用LinearLayout来线性安排我的控件(在Android中称为“Widget”),而android:orientation=vertical表示这个布局将是竖直方向的;android:layout_width=fill_parent和android:layout_height=fill_parent表示这个布局的宽度、高度都将填充整个父控件的空间(这里就是整个屏幕)。 (未完待续)
猛禽在他的BLOG里针对煎蛋的放弃CC的协议进行了一段评论(原文连接)。文中提到了这么一段:
跟煎蛋那些连协议是怎么回事都不理解的人真是没什么好讨论的,改叫扯蛋算了。
我突然想到,我这里(两块内容:BLOG部分和非BLOG部分)一直也没有很好的定义一个我的授权类型。虽然耳濡目染的知道CC, (L)GPL, Apache……这样的名词,但是却从来没有认真的去看一下这些协议的内容——部分是被其臃肿的法律文件给吓坏了……
今天既然CC被搬上了台面,我就下决心仔细看看关于CC协议的内容。
【本文收录于Go4Pro.org】 在我的任氏有无轩页面中,有一个专门记载湖人比赛情况的页面。随着NBA 08-09赛季的开幕,这个页面就开始频繁的更新了。
在之前的改版中,我已经将这个页面用Smarty页面重新改写了,这次是要为其加入导出比赛情况到Excel文件的功能。
211103注:本页面已经全面改写。
============
我使用的后台库是PEAR类库中的Spreadsheet_Excel_Writer。安装了PEAR的用户都可以用以下命令安装这个库:
pear install --onlyreqdeps Spreadsheet_Excel_Writer-beta
PEAR还是很方便的。在我的PHP环境中,这个库将安装在<PHP install dir>/PEAR/Spreadsheet下。我习惯将<PHP install dir>/PEAR加入到我的PHP包含路径中去,这样在引用包含文件时可以省力一些。
==========
获取来自数据库的内容等操作就不再赘述,只讲针对Excel导出的部分:
require_once(Spreadsheet/Excel/Writer.php);
$sdate=date(Y-m-d, strtotime($_POST['sYear'].-.$_POST['sMonth'].-.$_POST['sDay']));
$edate=date(Y-m-d, strtotime($_POST['eYear'].-.$_POST['eMonth'].-.$_POST['eDay']));
$rows=getGames($sdate, $edate);
$wb=new Spreadsheet_Excel_Writer();
$wb->send(Laker Games.xls);
$ws=&$wb->addWorksheet(Games_Summary);
$f_title=&$wb->addFormat(array('bold'=>true,
'Align'=>'center',
'Color'=>'blue',
'FgColor'=>'yellow'));
$ws->write(0,0, Game Sequence, $f_title);
$ws->write(0,1, Date Played, $f_title);
$ws->write(0,2, Teams, $f_title);
$ws->write(0,3, Score, $f_title);
$ws->write(0,4, Win/Lose, $f_title);
$ws->write(0,5, Remarks, $f_title);
$rowid=1;
foreach ($rows as $game)
{
$ws->write($rowid,0, $game['seq']);
$ws->write($rowid,1, $game['date']);
$ws->write($rowid,2, $game['team']);
$ws->write($rowid,3, $game['score']);
$ws->write($rowid,4, $game['win']);
$ws->write($rowid,5, iconv('utf-8', 'gb18030', $game['note']));
$rowid++;
}
$wb->close();
==================
大部分代码是自明的。不做太多的说明,结合PEAR关于Spreadsheet_Excel_Writer的文档,应该很容易知道各行代码的作用。
值得注意的是,以上的代码无法在XAJAX的环境下执行。我猜想,原因在于send函数:
function send($filename)
{
header(Content-type: application/vnd.ms-excel);
header(Content-Disposition: attachment; filename=$filename);
header(Expires: 0);
header(Cache-Control: must-revalidate, post-check=0,pre-check=0);
header(Pragma: public);
}
在这个函数中,Writer用header的方式来“欺骗”浏览器,表明将要输出的内容是一个Excel的表格文件。我认为,正是这个HEAD信息破坏了XAJAX(即AJAX)所维系的头信息,造成该函数无法在XAJAX的环境下运行(但是也不出错……)。
Writer并没有提供一个独立的将生成的Excel内容保存起来的函数,有时间、有精力的话在这个方面加以改进应该是不错的。