2011.2.14 二月 22nd, 2011

这一天,准备了很久了

那一刻,各种情绪,紧张,兴奋,害怕……

直到那个“哦好”出现,我的心才稍稍平静下

并不是一时冲动,是经过深思熟虑

其实不算是一张白纸,因为曾经,所以上面也留下点点痕迹,但是是你为此画上一个圆满的圈

我希望没有终点,是永恒

这一刻我永远铭记

属于我的,根号三

今天遇到一个问题,sql server在执行语句报错

 

从字符串转换为 datetime 时发生语法错误

CONVERT(DATETIME,'2010-11-11')

这真是神奇的问题啊

本地测完全没问题,服务器上之前也没问题,今天突然就报错了,服务器环境2003,IIS6,以前从来没遇到过,试了网上说的区域设置,注册表什么的,均无效

至今未能解决,我又多了一个心病……

谁能解决的或是遇到过的,告诉我一下,万分感谢!

 

 

2010-11-10:

今天终于解决了

ondate between CONVERT(DATETIME,'2010-11-8') and CONVERT(DATETIME,'2010-11-14')) 原来的语句中这句,后来我猜测会不会和ondate字段中的内容有关,结果有查到有的数据居然不是日期格式,看来这么写会自动将ondate转换成datetime格式。

 

调程序的小女孩 十月 16th, 2010

实验室里冷极了,没有窗户,不知道是白天还是黑夜。这是一周的最后一天——周 
末。在这又冷又黑的晚上,一个蓬头散发的小女孩在工位上坐着。她从家里出来的时候 
还穿着一件外套,但是有什么用呢?那是一件很大的外套——那么大,不知是哪一年买
的。她工作的时候的,就把它脱掉了,实验室的师弟嘲笑说,可以拿它当抹布。 

小女孩只好一个人做实验,一双小脚冻得红一块青一块的。她的破显示器屏幕上有
一大段程序,手里草稿纸上还有一大段。这一整天,程序还是没调过,谁也没帮过她。


可怜的小女孩!她又冷又饿,哆哆嗦嗦地调程序。显示器的光落在她的干枯的长头发上,那头发卷曲着披在肩上,看上去很久没梳,不过她没注意这些。每个桌上都堆满了论文,实验室飘着一股油墨的香味,因为这是论文deadline的时间——她可忘不了这个。 

她在一行代码上停了下来,蜷着趴在桌子上。她觉得更冷了。她不敢跟老板说,因为她程序没调过,没拿到一个数据,老板一定会骂她的。再说,换做别的题目跟这个一样难。她们头上只有paper,虽然网上可以下到一些现成的代码,还是仍然没法用。 

她的头脑几乎绝望了。啊,哪怕一次小小的成功,对她也是有好处的!她敢把上万行的代码修改一遍。编译运行一下,来找找问题么?她终于按下回车键开始运行。哧!程序开始输出信息了!一行一行的log开始出来了!她把小手拢在显示器上。多么温暖
多么明亮的字符啊,简直像一支小小的蜡烛。这是一道奇异的火光!小女孩觉得自己好像坐在一个19寸液晶大显示器前面,显示器还是全新锃亮的,颜色鲜艳,字迹清晰,上边显示着程序输出的正确结果,多么舒服啊!哎,这是怎么回事呢?她刚把头伸出去,想看的仔细一些,程序crash了,大显示器不见了。她坐在那儿,眼前的破显示器上一行
刺眼的segment fault。 

她又编译了一遍运行。程序又开始输出信息了,给出log了。显示器的光落在桌子
上 ,那儿忽然变得像打印出来的paper那样洁白工整,她可以一直看到paper上的字迹。IEEE的logo,会议名称和日期,Abstract和Instroduction。更妙的是这篇paper的一作, 赫然署着自己的名字!看上去那么诱惑,一直向这个穷苦的小女孩走来。这时候,程序 又crash了,她面前只剩一张又硬又旧的桌子。 

她又运行了一遍。这一回,她感觉自己坐在布置整齐的会议室里。条幅上写着“博 士毕业答辩”,比她去年师姐毕业时用的条幅还要大,还要美。红色的条幅上贴着那几 个白色的黑体字,投影仪屏幕上许多幅美丽的彩色画片,跟顶级会议里的presentation 一个样,在向她眨眼睛。小女孩向画片伸出手去。这时候,程序又crash了。只见ppt上 的图片越升越高,最后成了在天空中闪烁的星星。有一颗星星落下来了,在天空中划出 了一道细长的红光。 

“有一个什么人快要死了。”小女孩说。唯一疼她的师姐毕业前的时候告诉过她: 一颗星星落下来,就有一个灵魂要到图灵那儿去了。 

她又编译了一遍。这一回,她把所有的数组size都设大了。师姐出现在亮光里,是 那么温和,那么慈爱。 

“师姐!”小女孩叫起来,“啊!请把我带走吧!我知道,程序一crash,您就会
不 见的,像那漂亮的显示器,发表的paper,布置好的答辩会议室一个样,就会不见
的!” 

她赶紧按了回车键,要把师姐留住。一大堆输出信息发出强烈的光,把实验室照得 跟白天一样明亮。师姐从来没有像现在这样高大,这样美丽。师姐把小女孩抱起来,搂 在怀里。她们俩在光明和快乐中飞走了,越飞越高,飞到那没有代码,没有论文,也没 有毕业的地方去了。 

第二天清晨,这个小女孩坐在工位上,两腮通红,嘴上带着微笑。她死了,在周末 的实验室累死了。新一周的太阳升起来了,照在她小小的尸体上。小女孩坐在那儿,手 还按着在不知用过多少年的键盘上。 

“她想自己把程序调一下……”人们说。谁也不知道她曾经看到过多么美丽的东西 ,她曾经多么幸福,跟着她师姐一起走向新世界的幸福中去。

using System.Net;
using System.Collections.Specialized;

....

public string getPostBackStream(string rUrl)
{
// Create a new WebClient instance.
WebClient myWebClient = new WebClient();

// Create a new NameValueCollection instance to hold
// some custom parameters to be posted to the URL.

NameValueCollection myNameValueCollection = new NameValueCollection();

myNameValueCollection.Add("title","this is title"); 
myNameValueCollection.Add("url","http://test.mending.cn/tb_client.aspx");
myNameValueCollection.Add("excerpt","this is excerpt");

byte[] responseArray = myWebClient.UploadValues(rUrl,"POST",myNameValueCollection);
return Encoding.ASCII.GetString(responseArray);
}

.Net解析JSON数据 九月 3rd, 2010

using System;
using System.Web.Script.Serialization;
using System.Collections.Generic;
public partial class Demo : System.Web.UI.Page
{
    protected string JSON
    {
        get
        {
            return Request.QueryString["json"];
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        Dictionary<string, object> json = (Dictionary<string, object>)serializer.DeserializeObject(JSON);
        object value;
        if (json.TryGetValue("name", out value))
        {
            Response.Write(value.ToString());
        }
    }
}

先说一下我的环境,VMware虚拟机里纯净的Ubuntu 9.10,没装过任何东西

网上先查了写资料,做了点准备工作

启动终端

安装JDK 5.0

1)根据官方文档里所说,源代码的编译必须使用JDK5才能编译的了,所以这里我们使用jdk5

2)需要先更新源,在终端里执行 sudo vim /etc/apt/sources.list

3)在source.list里把以下2行拷贝到文档最后面:

deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse

deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

保存退出。

4)执行 sudo apt-get update 更新源.

5)配置编译环境并下载JDK5:sudo apt-get install sun-java5-jdk

如果遇到dpkg was interrupted...错误的话,参见我上一篇日志

接下来

sudo apt-get install bison
sudo apt-get install build-essential
sudo apt-get install zlib1g-dev
sudo apt-get install flex
sudo apt-get install libncurses5-dev
sudo apt-get install libx11-dev
sudo apt-get install gperf

然后去准备下载2.1的源码

发现没装repo,汗一下- -|||||

 

下载repo

$ cd ~

$ mkdir bin

$ echo $PATH

$ curl http://android.git.kernel.org/repo >~/bin/repo

$ chmod a+x ~/bin/repo

 

结果又发现没装curl,再汗,运行sudo apt-get install curl

安装完之后,开始准备源码,下载编译最基本的android源码,无法在真机上使用(不能生成boot.img),只能在模拟器上使用。这是因为没有编译相关机型的内核和硬件驱动。以下介绍的是用android源码编译出对应HTC G1的版本,和烧写的过程(没办法,谁让我穷,只能用G1呢)。编译生成的版本除相机不能用之外,其它绝大部分功能都能正常使用,在G1上运行2.1版的速度也不错。

 

建立android源码编译目录

$ export ANDROID=/exports/android/android_2.1_cn/

$ mkdir -p $ANDROID

$ cd $ANDROID

然后源码下载,期间被linux权限搞得头晕目眩

$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.1_r2   #设定下载 2.1版代码

$ vi .repo/local_manifest.xml          # 新建下载配置文件

编辑内容如下

<?xml version="1.0" encoding="UTF-8"?>

<manifest>

  <project path="kernel" name="kernel/msm" revision="refs/heads/android-msm-2.6.29-donut"/>

  <project path="vendor/htc/common-open" name="platform/vendor/htc/common-open" revision="master"/>

  <project path="vendor/htc/dream-open" name="platform/vendor/htc/dream-open" revision="master"/>

  <project path="vendor/htc/prebuilt-open" name="platform/vendor/htc/prebuilt-open" revision="master"/>

  <project path="vendor/htc/sapphire-open" name="platform/vendor/htc/sapphire-open" revision="master"/>

  <project path="vendor/qcom/android-open" name="platform/vendor/qcom/android-open" revision="master"/>

  <project path="vendor/qcom/proprietary-open" name="platform/vendor/qcom/proprietary-open" revision="master"/>

  <project path="vendor/pv-open" name="platform/vendor/pv-open" revision="master"/>

  <project path="vendor/aosp" name="platform/vendor/aosp" revision="master"/>

  <project path="hardware/htc/dream" name="platform/hardware/htc/dream" revision="master"/>

</manifest>

注意:其中msm是高通芯片组,path指明下载到源码目录中的位置,name指明git上的项目名

$ repo sync                   # 开始下载代码,此时需要等待较长时间,我家网速1Mbps,我挂了一个晚上

 

打补丁以支持动态壁纸(此为步骤为可选)

$ wget http://android-development-environment.googlecode.com/files/patch_devphone_eclair.tar.gz

$ tar zxvf patch_devphone_eclair.tar.gz

$ ./patch/eclair-build-patch.sh

编译内核及无线网络驱动

$ cd $ANDROID/kernel

$ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- msm_defconfig                  # 设定默认的msm配置

$ vi .config                    # 修改新生成的配置文件,以重新设置CPU最高频率,修改如下:

修改CONFIG_MSM_CPU_FREQ_ONDEMAND_MAX项为CONFIG_MSM_CPU_FREQ_ONDEMAND_MAX=528000

$ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- #编译内核

$ cd $ANDROID/system/wlan/ti/sta_dk_4_0_4_32

$ make ARCH=arm CROSS_COMPILE=$ANDROID/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- KERNEL_DIR=$ANDROID/kernel        #编译无线网络驱动

$ cp $ANDROID/kernel/arch/arm/boot/zImage $ANDROID/vendor/htc/dream-open/kernel

$ cp $ANDROID/system/wlan/ti/sta_dk_4_0_4_32/wlan.ko $ANDROID/vendor/htc/dream-open/wlan.ko

编译android源码

在HTC网站http://developer.htc.com/adp.html

下载名为signed-dream_devphone_userdebug-ota-14721.zip的包,并把它放在$ANDROID目录下

$ cd $ANDROID

$ source build/envsetup.sh

$ lunch aosp_dream_us-eng           # 指明机型

$ cd vendor/htc/dream-open  

$ ./unzip-files.sh           # 解压htc相关驱动

$ cd $ANDROID

$ vi buildspec.mk                   # 新建配置文件

加入如下内容

CUSTOM_LOCALES:=zh_CN      # 设置编译为中文系统

WITH_JIT:=true                             # 加入JIT支持,使得运算速度加快1-2倍

$ make -j2           # 编译android源码,需要等待较长时间,我T4200的芯片,VMware虚拟机下,编译了大概近4个小时。

 

Posted in Android | Comments(44)»

今天为了编译Android,更新java5

运行了sudo apt-get install sun-java5-jdk
出现这么一个错误:

dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.

 

网上查了查,运行,

sudo dpkg --configure -a

 

解决之

Posted in Android | Comments(46)»

最近写一个门户页面用到,用JQuery的话,IE6有点问题,就用了纯JS方法,朋友帮忙写的,现在拿出来分享。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>无标题文档</title>

<style type="text/css">

body {

font:normal 12px/1.5 Verdana, Geneva, sans-serif;

}

.container {

height:100px;

overflow:hidden;

position:relative;

}

.tab {

position:relative;

top:0;

border-collapse:collapse;

}

.tab td {

border:silver 1px solid;

height:20px;

}

</style>

</head>

 

<body>

<div class="container" id="di">

<table class="tab" id="test">

<tbody>

<tr>

<td>1</td>

<td>12321321312</td>

<td>sadfasdfsafd</td>

</tr>

<tr>

<td>2</td>

<td>12321321312</td>

<td>sadfasdfsafd</td>

</tr>

<tr>

<td>3</td>

<td>12321321312</td>

<td>sadfasdfsafd</td>

</tr>

<tr>

<td>4</td>

<td>12321321312</td>

<td>sadfasdfsafd</td>

</tr>

<tr>

<td>5</td>

<td>12321321312</td>

<td>sadfasdfsafd</td>

</tr>

<tr>

<td>6</td>

<td>12321321312</td>

<td>sadfasdfsafd</td>

</tr>

<tr>

<td>7</td>

<td>12321321312</td>

<td>sadfasdfsafd</td>

</tr>

<tr>

<td>8</td>

<td>12321321312</td>

<td>sadfasdfsafd</td>

</tr>

<tr>

<td>9</td>

<td>12321321312</td>

<td>sadfasdfsafd</td>

</tr>

<tr>

<td>10</td>

<td>12321321312</td>

<td>sadfasdfsafd</td>

</tr>

</tbody>

</table>

</div>

<script type="text/javascript">

function $(id){return document.getElementById(id)};

 

var x = function (int){return parseInt(int);}

 

var copy = function (tar){

//tar.innerHTML += tar.innerHTML;

var te;

for(var i=0; i<tar.childNodes.length; i++) {

if(tar.childNodes[i].nodeType == 1) te = tar.childNodes[i].cloneNode(true);

}

tar.appendChild(te);

}

 

var slide = function (tar, areaHei, tarHei, delay) {

var top =  tar.style.top;

if(top == "") tar.style.top = 0;

else if(x(top) + tarHei < 0) tar.style.top = x(top) + tarHei + "px";

for(var i = 0; i<areaHei; i++) {

setTimeout("tar.style.top = parseInt(tar.style.top) - 1 + 'px'",delay*i);

}

}

 

var tar = $("test");

var tarHei = tar.clientHeight;

var areaHei = tar.parentNode.clientHeight;

copy(tar);

setInterval("slide(tar, areaHei, tarHei, 20);", 3000);

</script>

</body>

</html>

Unicorn! 五月 4th, 2010

断断续续做了能有4个多月……还差水贴没贴

水补土形态

下面是上色成品




如何快速建立Subversion服务器,并且在项目中使用起来,这是大家最关心的问题,与CVS相比,Subversion有更多的选择,也更加的容易,几个命令就可以建立一套服务器环境,可以使用起来,这里配套有动画教程。 
本文是使用Subversion最快速的教程,在最短的时间里帮助您建立起一套可用的服务器环境,只需略加调整就可以应用到实际项目当中。 
本教程分为以下几个部分,为了说明简单,教程是在windows下使用的方式,以方便资源有限的项目使用。在UNIX环境下,只是安装方式不同,命令执行并无太大区别。

  • 软件下载
  • 服务器和客户端安装
  • 建立版本库(Repository)
  • 配置用户和权限
  • 运行独立服务器
  • 初始化导入
  • 基本客户端操作

1,软件下载

下载Subversion服务器程序。

官方网站的下载二进制安装文件,来到二进制包下载部分,找到 Windows NT, 2000, XP and 2003部分,然后选择Apache 2.0 或者 Apache 2.2,这样我们可以看到许多下载的内容,目前可以下载Setup-Subversion-1.5.3.msi 。

下载Subversion的Windows客户端TortoiseSVN。

TortoiseSVN是扩展Windows Shell的一套工具,可以看作Windows资源管理器的插件,安装之后Windows就可以识别Subversion的工作目录。 
官方网站是TortoiseSVN ,下载方式和前面的svn服务器类似,在Download页面的我们可以选择下载的版本,目前的最高稳定版本的安装文件为TortoiseSVN-1.5.5.14361-win32-svn-1.5.4.msi

2,服务器和客户端安装

服务器安装,直接运行Setup-Subversion-1.5.3.msi ,根据提示安装即可,这样我们就有了一套服务器可以运行的环境。

安装TortoiseSVN,同样直接运行TortoiseSVN-1.5.5.14361-win32-svn-1.5.4.msi按照提示安装即可,不过最后完成后会提示是否重启,其实重启只是使svn工作拷贝在windows中的特殊样式生效,与所有的实际功能无关,这里为了立刻看到好的效果,还是重新启动机器。
 

3,建立版本库(Repository)

运行Subversion服务器需要首先要建立一个版本库(Repository),可以看作服务器上存放数据的数据库,在安装了Subversion服务器之后,可以直接运行,如:

svnadmin create E:\svndemo\repository

就会在目录E:\svndemo\repository下创建一个版本库。

我们也可以使用TortoiseSVN图形化的完成这一步: 
在目录E:\svndemo\repository下"右键->TortoiseSVN->Create Repository here...“, 然后可以选择版本库模式, 这里使用默认即可, 然后就创建了一系列目录和文件。


4,配置用户和权限

来到E:\svndemo\repository\conf目录,修改svnserve.conf: 
# [general] 
# password-db = passwd 
改为: 
[general] 
password-db = passwd 

然后修改同目录的passwd文件,去掉下面三行的注释: 
# [users] 
# harry = harryssecret 
# sally = sallyssecret 
最后变成: 
[users] 
harry = harryssecret 
sally = sallyssecret

 在passwd文件中,“=”前的字符就是用户名,后面的就是密码。还要注意“[users]”前面的注释“#”一定要删除掉。

5,运行独立服务器

在任意目录下运行: 
svnserve -d -r E:\svndemo\repository 我们的服务器程序就已经启动了。注意不要关闭命令行窗口,关闭窗口也会把svnserve停止。

6,初始化导入

来到我们想要导入的项目根目录,在这个例子里是E:\svndemo\initproject,目录下有一个readme.txt文件:


右键->TortoiseSVN->Import... 
在URL of repository输入“svn://localhost/trunk” 
在Import Message中输入你的日志信息

完成之后目录没有任何变化,如果没有报错,数据就已经全部导入到了我们刚才定义的版本库中。

需要注意的是,这一步操作可以完全在另一台安装了TortoiseSVN的主机上进行。例如运行svnserve的主机的IP是133.96.121.22,则URL部分输入的内容就是“svn://133.96.121.22/trunk”。

7,基本客户端操作

取出版本库到一个工作拷贝: 

来到任意空目录下,在本例中是E:\svndemo\wc1,运行右键->Checkout,在URL of repository中输入svn://localhost/trunk,这样我们就得到了一份工作拷贝。 


在工作拷贝中作出修改并提交: 

打开readme.txt,作出修改,然后右键->Commit...,这样我们就把修改提交到了版本库,我们可以运行。 


察看所作的修改: 

readme.txt上右键->TortoiseSVN->Show Log,这样我们就可以看到我们对这个文件所有的提交。在版本1上右键->Compare with working copy,我们可以比较工作拷贝的文件和版本1的区别。

最后,所有的内容都已经录制为动画文件,大家可以参考。

关于本教程大家有什么意见,可以这里讨论 。