新鲜、有趣,互联生活。令狐葱。

2006/11/22

使用XPathDocument 读取XML文件

一般比较常用的读取xml 好像用DOM,不过使用XPathDocument  效果也不错。

        public string GetXMLString(string xmlFilename, string xpath)
        {
            string xmlString = null;

            XPathDocument doc = new XPathDocument(xmlFilename);
            XPathNavigator nav = doc.CreateNavigator();
            XPathNodeIterator iter = nav.Select(xpath);
            iter.MoveNext();
            xmlString = iter.Current.Value;
            xmlString = iter.Current.GetAttribute("name", "");
            iter = null;
            nav = null;
       
            return xmlString;
        }
详细可参见MSDN。

2006/11/21

Snap:生成缩略图的搜索引擎

 
 
Snap 是一个很有创意的搜索引擎,它在用户搜索的时候就可以及时地给出一个预览图,用起来很是方便,可以让用户较快的找到自己的东西。以前好象见过一个浏览器的插件,可以在google 上给搜索结果生成缩略图,悬浮显示,也很不错,可惜忘记名字了:〉
 

2006/11/20

任务管理器菜单不显示的解决办法

今天发现,自己的任务管理器不见了菜单和状态栏,看起来像个秃头和尚,很不爽,上网搜了一下,原来解决办法是如此之简单,纳闷我在乱试的时候怎么老想着右键菜单而没想到这个方法呢?太BT了?
 
解决办法:在任务管理器的最左边或者最右边双击,即可显示菜单项。
 
 
 

二进制整数运算

n位无符号整数的范围0~2n - 1
n位有符号整数范围-1 * 2(n - 1)~2(n - 1) - 1
以8位为例,无符号整数二进制表示如下(0~255):
Decimal Binary
0 00000000
1 00000001
2 00000010
3 00000011
...
252 11111100
253 11111101
254 11111110
255 11111111
有符号整数二进制表示如下(-128~127):
Decimal Binary
127 01111111
126 01111110
125 01111101
124 01111100
...
3 00000011
2 00000010
1 00000001
0 00000000
-1 11111111
-2 11111110
-3 11111101
-4 11111100
...
-125 10000011
-126 10000010
-127 10000001
-128 10000000
注意:
1. 加法运算
91 01011011
+ 31 + 00011111
122 01111010
直接相加即可,注意无符号和有符号混合运算,这样也可以得到正确结果,前提是:溢出的一位要丢弃。
7  00000111
+ -5   +  11111011
2 100000010
2. 计算一个有符号整数的相反数的方法是取反加一。
比如 1 二进制00000001,取反11111110,加一,11111111(就是-1了)
同样,对0也是适用的。
有一个特殊情况:
3. 对-128,由于不存在值128的8位整数,所以利用取反加一得到:
-128(10000000),取反,01111111,加一,10000000(又得到它本身,也就是说-128 * -1 == -128)
T.MinValue * -1 == T.MinValue.这种结果对求绝对值的运算也是一样。
在C运行时环境,abs(-2147483648) == -2147483648.
但是在C#中,求最小数的绝对值运算Abs会抛出异常,但是直接乘-1不会有异常,结果同上所述。
可以做如下测试:
int negativeOne = -1;
int minValue = int.MinValue;

Console.WriteLine(minValue);
Console.WriteLine(negativeOne * minValue);
 

C#中的==和Equals()

class Program
     {
        public static bool EqualityTest1( object o1, object o2)
        {
            return o1.Equals(o2);
        }

        public static bool EqualityTest2(object o1 , object o2)
        {
            return o1 == o2;
        }
        static void Main(string[] args)
        {
             int i1 = 4;
             int i2 = 4;
            string s1 = "Hello!" ;
            string s2 = "Hello!";
            string s3 = new string (new char[] { 'H', 'e', 'l' , 'l', 'o', '!' });
            
//Now let's look at some simple methods to compare equality.


            Console.WriteLine(EqualityTest1 (i1, i1));
            Console. WriteLine(EqualityTest2(i1, i1));

            
// Compare i1 to i2
             Console.WriteLine(EqualityTest1(i1, i2 ));
            Console.WriteLine(EqualityTest2(i1, i2));

            
// Compare s1 to s2
            Console.WriteLine(EqualityTest1 (s1, s2));
            Console. WriteLine(EqualityTest2(s1, s2));

            
// Compare s2 to s3
             Console.WriteLine(EqualityTest1(s2, s3 ));
            Console.WriteLine(EqualityTest2(s2, s3));
        }
     }
运行结果有点出人意料,但是还是解释的通的。

2006/11/19

SearchMash:google 的分类集成搜索

SearchMash 是Google 推出的一种新的搜索方式,这种所谓的web2.0 的搜索模式简单的说就是对搜索结果重新进行集成和整合,从而让用户可以更容易的找到它需要的结果。目前国内的bbmao 和这种理念比较一致。
 
SearchMash 自10月3日正式推出以来,一直在不断的改进和更新它的界面和功能,所以以后的样子也确实让人期待。最近,发现他又增加了Blog和Video搜索,现在右边的分类就有image、blog、video、wikipedia四种了,可以想象,会有更多的:〉
 
 
 
 

 

2006/11/15

.NET快捷键

快捷键         功能
CTRL + SHIFT + B生成解决方案
CTRL + F7  生成编译
CTRL + O        打开文件
CTRL + SHIFT + O打开项目
CTRL + SHIFT + C显示类视图窗口
F4       显示属性窗口
SHIFT + F4显示项目属性窗口
CTRL + SHIFT + E显示资源视图
F12        转到定义
CTRL + F12转到声明
CTRL + ALT + J对象浏览
CTRL + ALT + F1帮助目录
CTRL + F1 动态帮助 
F1        帮助
SHIFT + F1当前窗口帮助
CTRL + ALT + F3帮助-搜索
SHIFT + ALT + ENTER全屏显示
CTRL + -向后定位
CTRL + SHIFT + -向前定位
CTRL + F4关闭文档窗口
CTRL + PAGE DOWN光标定位到窗口上方
CTRL + PAGE UP光标定位到窗口下方
CTRL + F6
CTRL + TAB下一个文档窗口
CTRL + SHIFT + F6
CTRL + SHIFT + TAB上一个文档窗口
ALT + F6下一个面板窗口
CTRL + K, CTRL + L取消remark
CTRL + K, CTRL + C注释选择的代码
CTRL + K, CTRL + U取消对选择代码的注释
CTRL + M, CTRL + O折叠代码定义
CTRL + M, CTRL + L展开代码定义
CTRL + DELETE删除至词尾
CTRL + BACKSPACE删除至词头
SHIFT + TAB取消制表符
CTRL + U转小写
CTRL + SHIFT + U转大写
CTRL + SHIFT + END选择至文档末尾
CTRL + SHIFT + HOME选择至文档末尾开始
SHIFT + END选择至行尾
SHIFT + HOME选择至行开始处
SHIFT + ALT + END垂直选择到最后尾
SHIFT + ALT + HOME垂直选择到最前面
CTRL + A全选
CTRL + W选择当前单词
CTRL + SHIFT + PAGE UP选择至本页前面
CTRL + SHIFT + PAGE DOWN选择至本页后面
CTRL + END文档定位到最后
CTRL + HOME文档定位到最前
CTRL + G转到…
CTRL + K, CTRL + P上一个标签
CTRL + K, CTRL + N下一个标签
ALT + F10调试-ApplyCodeChanges 
CTRL + ALT+ Break停止调试
CTRL + SHIFT + F9 取消所有断点
CTRL + F9允许中断
CTRL + SHIFT + F5调试-重新开始
F5运行调试
CTRL + F5运行不调试
F10跨过程序执行
F11单步逐句执行
CTRL + J列出成员 
CTRL + PAGE DOWN下一个视图
CTRL + B格式-粗体
CTRL + SHIFT + T格式-文字缩进  
 
 
链接:

2006/11/13

自由穿梭虚拟世界:微软推出3D建模工具

 

微软在上周末推出了一个它在7月预览过程序的技术预览版,它能够处理同一个地点或物体的数百张相片并建立一个三维模型,用户可以像身处虚拟世界一样在其中自由穿梭。 

这个程序称为PhotoSynth,在SIGGRAPH 2006首次亮相。微软把它描述成"幻灯片与游戏体验的混合体,用户可以进行放大以获得更多细节或缩小来获得更大范围的景观。"官方网站。

遗憾的是,这个软件的硬件要求比较高,而且它只支持Windows XP SP2或Windows Vista,而且对显卡的要求也挺高,要求支持DirectX 9和WDDM驱动程序,128MB显存,32位每象素。
 
新闻来源:Pconline。


2006/11/11

光棍节

又是一年光棍节!
看着四个1那么立着这让人寒!
 
 祝天下的有情人终成眷属!

2006/11/10

公交车查询系统(存在问题)

前几日闲来无事做了个"公交车查询"系统,使用Xml作为数据源。难点主要在换乘线路的查询和显示。主要代码如下:
 
public void GetLinesBetweenStops(String stopOne, String stopTwo)
        {
             List<Line> linesOne = new List<Line>();
            List<Line> linesTwo = new List< Line>();
            List<Line> linesOneAfter = new List<Line>();

            linesDisplay.Clear ();

            foreach (Line line in lines) {
                 bool isInLinesOne = false;
                foreach (String stop in line.Stops) {
                    if (stopOne == stop) {
                        linesOne.Add(line);
                        isInLinesOne = true;
                        break;
                     }

                
}
                if (!isInLinesOne) {
                    foreach (String stop in line.Stops) {
                        if (stopTwo == stop) {
                            linesTwo.Add(line);
                             break;
                        }
                    }
                }
             }

            foreach (Line line in linesOne) {
                 bool isOneLine = false;
                foreach (String stop in line.Stops) {
                    if (stopTwo == stop) {
                        linesDisplay.Add(line);
                        isOneLine = true;
                        break;
                     }
                }
                 if (!isOneLine) {
                    linesOneAfter.Add(line);
                }
            }
            
//中转
            linesDisplay .Add(null);
             foreach (Line line1 in linesOneAfter) {
                foreach (String stop1 in line1.Stops ) {
                    foreach (Line line2 in linesTwo) {
                        foreach (String stop2 in line2.Stops ) {
                            if (stop1 == stop2) {
                                colorStops .Add(stop1);
                                linesDisplay.Add( line1);
                                linesDisplay.Add(line2);
                                break;
                             }
                        }
                     }
                }
            }
        }
 
程序显示界面如下:
 
程序中数据的保存使用List<string>,虽然说遍历什么的还比较方便,不过也造成了程序的硬伤。程序中还提供了"转换文件"功能,可以由固定合适的txt文本文件生成本程序使用的xml数据源。程序下载请到我的EDisk。压缩包内有西安市公交线路数据库,来源为西安公交网 (很好的公交车查询网站)。若需添加其他城市数据,放入相应的xml数据源即可,格式需要严格要求。若有好的建议,请于我联系。代码索取随时恭候。
 
目前来看上不让人满意的地方还很多,主要有:
1. 由于数据结构设计的不合理,造成查询不是很方便,且多处使用循环嵌套,资源消耗较大。估计使用数据库的话应该会好一些。
2. 换乘线路应该成对出现,由于设计时使用list,显示的时候按次序显示,故看起来很不方便。
3. 换乘站点应该以特殊字体颜色显示,尚未解决。

QQ好友号码备份器

使用QQ,有时候想保存下来自己的好友号码,但是QQ自己导出来的地址簿显得杂乱不堪,看起来十分郁闷。正好在看 C#的文件处理,所以自己做了一个分析QQ导出的文件,整理出QQ昵称和号码的简单程序,在VS2005 上编译通过。下载请到我的EDisk。
 
使用方法:1.QQ->菜单 ->好友与资料->好友管理器。
         2.所有分组 右键 导出地址簿
         3.把导出的文件拖到软件上,或者使用软件的打开按钮。
         4.执行。
         注意:生成文件保存在原始文件同目录。
         
没什么技术含量,不过写的过程中获益颇多:

1.
拖动文件到程序上:
   
private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent (DataFormats.FileDrop)) {
            e.Effect = DragDropEffects .Link;
        } else {
            e.Effect = DragDropEffects.None;
        }
    }

    private void Form1_DragDrop( object sender, DragEventArgs e)
    {
       
//其中textBox1.Text显示的就是拖进文件的文件名;
        textBox1 .Text = ((System. Array)e.Data.GetData(DataFormats.FileDrop)).GetValue( 0).ToString();
    }


2.
打开外部文件
   
System.Diagnostics .Process.Start(resultFileName);
此函数有几种重载方式,可以设置执行程序等。
3. ToolTip
控件的使用
   
toolTip1.SetToolTip(label1, "使用方法:\r\n\r\n1.QQ->菜单->好友与资料->好友管理器。" +
                                         "\r\n2.所有分组 右键 导出地址簿 " +
                                        "\r\n3.把导出的文件拖到软件上,或者使用软件的打开按钮。" +
                                        "\r\n4.执行。" +
                                        "\r\n注意:生成文件保存在原始文件同目录。" );
换行使用"\r\n"。

2006/11/07

可汉可英电子邮件

 
 
10月31日,荷兰Chinglish BV公司正式推出Chinglish.com(可汉可英网站),这是全球首个自动提供电子邮件中英文互译服务的网站。干什么用的?自己来看吧。 demo。
 

contactoffice:又一个Online Office

 
 
contactoffice 提供了一系列实用的在线办公工具,目前包括的服务有:日历创建/邮件的收发转发/ 群组内的短消息服务 /基本格式的文件上传服务-5MB/ 便条记事本/ 书签/ 群组维基/ 群组论坛/群组聊天/SMS等个性服务。

mypictr:制作你的网络头像

Snap a Picture
 
mypictr 可以让你轻松制作在别的网站上需要使用的头像,上传你的照片后mypictr会自动捕捉到你的脸部,并设置最佳大小方便你的剪切。而且现在还提供了好多web2.0网站默认的头像大小,如:digg,  myspace, last-fm, flickr, technorati, youtube等。
 

Quintura:搜索引擎新体验?

Quintura 被称为新一代的搜索引擎,其实只是因为它大量使用了Ajax 以及形象化现实搜索结果,有兴趣的可以玩一下,个人感觉比较一般,还不如google 提供给Vol 那个用着舒服。另外,虽然使用了ajax,但是用户体验并不像想象中的那么理想,比如我搜索一个东西,结果出来之后我点一个进去,想在回到搜索页面几乎是无计可施!
 

 

2006/11/06

BCB中使用EhLib控件的几个技巧

说明:最近在使用BCB做项目,所以适当的学习了一些其上的控件,在找一些资料的时候感觉困难不小,所以好不容易找出来的东西也希望能解某些人的燃眉之急。
 
//**********************************
//* 点击columns 的title 实现自动排序
//* 针对EhLib 的DbGridEh
//**********************************
void __fastcall TForm_LineInfo::DBGridEh1TitleClick(TColumnEh *Column)
{
    
//TADOQuery * query =  DBGridEh1->DataSource->DataSet;

    if(!query ->IsEmpty()){
        TBookmark SavePlace;
        SavePlace = query-> GetBookmark();
        if (query->Sort != Column->FieldName ){
            query->Sort = Column->FieldName;
        } else {
             query->Sort = Column->FieldName + "   DESC  ";
        }
        query->GotoBookmark( SavePlace);
        query->FreeBookmark(SavePlace);
   }
}
//**********************************
//* 让DBGrid自适应列宽
//* 针对EhLib 的DbGridEh
//**********************************
void AdjustDBGrid(TDBGridEh *DBGrid )
{
      for( int i = 0; i <= DBGrid->Columns->Count - 1; i++){
           DBGrid->Columns->Items[i]->Title->Alignment   =   taCenter;
          DBGrid ->Columns->Items[i]->Title->Font->Name   =   "宋体";
          DBGrid->Columns->Items[i]->Title->Font-> Size     =   10 ;
          DBGrid->Columns->Items[i]->Width = this->Canvas ->TextWidth(DBGrid->Columns->Items[i]->Title->Caption )   +   30 ;
      }
//for的结束
}
//**********************************
//* 随窗口变化调整控件位置
//* 当然也可以直接设置控件为Align属性为alClient
//**********************************
void __fastcall TForm_LineInfo::FormResize(TObject *Sender)
{
    int midLoc = Width / 2;
    TControl * ChildControl;
     for (int i = 0; i < this->ControlCount; i++) {
        
//遍历Controls数组,ControlCount是数组元素个数
        ChildControl = Controls[i];
        
//ChildControl->Left = midLoc-ChildControl->Width / 2;

        if (ChildControl == GroupBox1) {
            
//若控件是GroupBox,对其子控件进行操作
            int SubMidLoc = GroupBox1->Width / 2;
             for(int j = 0;j < GroupBox1->ControlCount; j++) {

            
//遍历GroupBox1的Controls数组。ControlCount是数组元素个数
            ChildControl = GroupBox1->Controls[j];
            ChildContro1->Left = SubMidLoc-ChildControl->Width / 2;
            }
        }
    }
}

2006/11/02

Vox: Bloger的新选择

 
 
Vox是SixApart 公司在推出Moveabletype、TypaPad、Livejournal以后的又一力作,Vox是一个以Blog为基础的SocialNetworking(以video、books、audio为媒介,通过vox的博客平台,把用户聚集在一起。

Vox支持OpenID,一种所谓的通用网络账号。其实OpenID就是SixApart提出来的,在MT、TypePad、Livejournal上得到广泛应用。

Google 终于收购了JotSpot

 
 
为什么用终于?呵呵,其实很早以前第一次看到JotSpot 的时候感觉他就和Google的online office 的构思不谋而合,还有另外一个让我又类似印象的网站是:Zoho Show。
 
就在前几天,我刚刚介绍过JotSpot 的Wiki 自助建站(代理访问连接):
 
JotSpot 提供一种建立你自己的Wiki 的服务,很是全面,几乎包括了所有Online Office 的服务:网页、Calendar、File Carbinets(文件柜,可以上传文件)、SpreadSheet、To-Do Lists等等,都很不错。而且这些以wiki 的形式展现出来,更是体现了Online Office 的特色:便于分享和协同编辑。
 
当时就觉得很是不错,特别是里面的好多功能,都和google 已经推出的服务很相似:Calendar、SpreadSheet等等,不晓得google 这次收购它是看中了什么呢?难道是简单的为了减少一个竞争对手?不管怎么说,我都觉得,google 绝对是个赢家,因为不管JotSpot 的已有东西是否对google 有用,google 都既争取到了JotSpot 原有的用户又获得了JotSpot 强大的技术人才资源,如此一举夺得,何乐不为?
 

2006/11/01

FeedPath:不错的在线Rss阅读器



feedpath是于今年1月份刚刚上线的一个在线RSS阅读器,Made in Japan。feedpath 提供基本的feed订阅,还支持OPML导入/导出。
值得说明的是,feedpath和我们刚刚介绍过的FeedXs有一个共同的理念,那就是将博客编辑与feed管理的巧妙的结合在一起,feedpath 让你可以在不登入自己博客后台的情况下,通过博客程序API,直接将日志发布到你的blog,目前支持的博客程序有:blogger,worldpress,mixi,gree等。虽然说不算什么新功能(writely早就有此功能),但是用起来还不错,因为feedpath 的界面做的很是清爽,看上去比较舒服,而且速度还可以,遗憾的是是小日本开发的,只提供英日界面,切换方式是ComboBox式,和FeedXs的Tab式有所不同。

两个网站其实没什么关系,配色风格大相径庭,但是总感觉似乎又关系紧密,呵呵


FeedXs:烧制属于自己的Feed

烧制属于自己的Feed,应该不算是什么新鲜的服务了,像feedburner,feedsky等就是专门提供这种服务的网站。

FeedXs 的特别之处在于它 可以跳过blog而直接发布RSS feed,并且可以直接通过MSN来发布Post到自己的Feed,只要你在FeedXs注册完帐号以后,将“msn@feedxs.com”加为好友,就可以直接发布内容到你的feed。

个人感觉FeedXs 真是“看问题看实质”的坚决拥护者,把feed 从blog上剥离出来感觉也不觉得有什么不妥:〉不过感觉其实还是一个blog,只不过看问题的角度不一样了,不是从blog的角度,而是从feed本身来看了。

网站提供两种语言,切换方式采用Tab标签式,与下面将要介绍的feedpath.com不同:〉遗憾的是,目前定制出来的feed对中文的支持不太好。