2008-08的存档

感动世界的奥运瞬间(选摘)

2008-08-22 12:45

在网上看到这样的组图,真的让人感动,选摘了其中部分……

出处: 环球网

========================================================

最感慨的瞬间

伊拉克奥运代表团在奥运会开幕不到十天才得到参赛资格,他们的队员甚至连队服都没有。皮划艇上,其他国家的选手都穿着合适的队服,而伊拉克的选手则穿着已经起球的旧T恤,但他们仍然在顽强的比赛。 而由于资金匮乏,参加短跑比赛的伊拉克女选手达娜·侯赛因也只能穿着一双有些破损的“二手”跑鞋参加比赛。她的一句话曾让世界潸然泪下,她躲过了两次枪击后依然坚持训练,但是此前得知无法参加北京奥运会时,她一度崩溃了。教练安慰她,4年后可以参加伦敦奥运会,21岁的达娜脱口而出:“照伊拉克这个样子,我不知道自己能不能活到2012年……”中国网友得知这一消息无不为之动容,在开幕式伊拉克代表团入场时,全场中国观众给予了不亚于东道主代表团的礼遇,报以热烈的掌声。当他们离开时,中国网友特意将自己准备的球鞋、衣服、福娃以及各种具有中国特色的礼物送给伊拉克代表团,伊拉克队员收礼物收到手软。伊拉克队的教练非常感动地说:“虽然我们远离家乡,但我们在中国感受到了温暖。希望大家有机会能到巴格达,让我们来回报你们。”

PS:我们渴望和平,痛恨战争!让我们对那些发动战争嗜杀成性的刽子手们说:有种的我们下场来赛一场!……

最感人的瞬间

北京奥运会女子花剑个人1/32决赛在击剑馆进行,加拿大选手栾菊杰13比9战胜突尼斯选手伊娜·布贝克里,取得她在北京奥运会上的首场胜利。赛后,栾菊杰在场上高举起“祖国好”的布幅,向现场观众表达心迹。50岁的栾菊杰是北京奥运会参加击剑比赛的所有运动员中年龄最大的。更为特殊的是,栾菊杰是中国首枚奥运会击剑金牌获得者,1984年获得了洛杉矶奥运会女子花剑个人冠军。在她之后,中国击剑24年再没有人登上最高领奖台。退役20年后,已到半百之龄的栾菊杰复出了,虽然没能像24年前的洛杉矶一样所向披靡,半百老将复出挥剑征战奥运精神足以让世人敬佩,虽然24年后的体力已不足以支撑她在奥运赛场上披荆斩棘,然而,就像她说的,“能在北京参加奥运会是我的梦想,现在终于实现了,我今后不会再有什么遗憾”。

PS:虽然代表加拿大参赛,但仍心系祖国,能站在祖国的土地上参加奥运那就是无比的自豪……

最心酸的瞬间

19日北京奥运会男子举重105公斤以上级的颁奖仪式上演了感人的一幕:该项目冠军、德国选手马·施泰纳把亡妻苏珊的照片和奥运金牌高高举起,让人们不仅看到一个强壮的大力士,还深深感受到他对妻子深深的爱。这位德国大力士在比赛最后阶段上演大逆转,用一枚沉甸甸的奥运金牌来祭奠亡故的妻子,此情此景令人不禁潸然泪下,成为北京奥运会上感人至深的一幕。去年7月的一起车祸夺去了施泰纳妻子苏珊的生命,从此施泰纳就一直随身带着苏珊的照片,高强度的艰苦训练就成为施泰纳摆脱痛苦思念折磨的唯一途径。26岁的施泰纳在夺金后激动地表示,他的亡妻苏珊在比赛中一直陪伴着他,给予他夺金的勇气。他说:“我所有的期盼就是苏珊在今天可以看到我的成功。我不是一个迷信的人,但我可以肯定的是,苏珊在注视着我,她在我的心里,给予我勇气和力量。这是一场献给苏珊的胜利。”马·施泰纳夺得的这枚奥运金牌不仅是德国16年来获得的第一枚奥运举重金牌,更证明了爱能创造奇迹。

PS: 爱——总会令人感动……

……

推荐(1)
收藏

将文件转换为16进制代码文本

2008-08-06 10:51

        最近因为编程对二进制文件的读写,需要遍历所有字节,有把文件字节码转为文本进行操作的想法(即对16进制代码的可视化编辑,如UltraEdit等)。一直都担心速度问题而没有去尝试。在网上搜索了一下相关的内容,据说以下是把文件字节的16进制代码转换成字符串的比较快速的方法。

大概步骤是:
        将整个文件读成字节数组(对数组操作速度肯定比文件操作要快);
        然后逐字节(数组每一元素)转换成表示16进制的字符串(这里用位运算,如果用系统函数那简直就是恶梦);
        最后以返回合并后的字符串(不知文件太大了转换的字符串会不会影响操作?)。

static char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

public static string ToHexString(byte[] bytes) 
{
    char[] chars = new char[bytes.Length * 2];
    for (int i = 0; i < bytes.Length; i++) 
    {
        int b = bytes[i];
        chars[i * 2] = hexDigits[b >> 4];
        chars[i * 2 + 1] = hexDigits[b & 0xF];
    }
    return new string(chars);
}

推荐(0)
收藏

关于SQLite数据库的操作(飞信历史记录)

2008-08-06 10:18

目的是研究飞信聊天记录文件(SQLite数据库)的操作,顺便学习一下SQLite知识.

以下是摘自某网站文章的部分代码,可以看出SQLite数据库的一般操作和该数据库的大致结构关系: 

        string connString = "Data Source={0};Version=3;Password={1};";
        SQLiteConnection conn = null;
        SQLiteConnection connHis = null;
        string USERPROFILE = "";
        string folderURL=string.Empty; 

        private void btImport_Click(object sender, EventArgs e)
        {
            folderURL = USERPROFILE + @"\Application Data\Fetion\" + txtFetionId.Text;            try
            {
                conn = new SQLiteConnection(string.Format(connString, folderURL + "\\history.dat", txtFetionId.Text));
                connHis = new SQLiteConnection(string.Format(connString,txtImpPath.Text, txtFetionId.Text));                SQLiteDataAdapter sda = new SQLiteDataAdapter();
                DataSet ds = new DataSet();
                connHis.Open();

                sda.SelectCommand = new SQLiteCommand("select * from Player", connHis);
                sda.Fill(ds, "Player");
                sda.SelectCommand = new SQLiteCommand("select * from Message", connHis);
                sda.Fill(ds, "Message");
                sda.SelectCommand = new SQLiteCommand("select * from MessageBody", connHis);
                sda.Fill(ds, "MessageBody");
                sda.Dispose();
                connHis.Close();
                             conn.Open();
                SQLiteCommand cmd = new SQLiteCommand();
                cmd.Connection = conn;
                                   
                DbTransaction dt = conn.BeginTransaction();
                               
                                //向表内插入数据
                for (int n = 0; n < ds.Tables["

MessageBody"].Rows.Count; n++)
                {
                    DataRow dr = ds.Tables["MessageBody"].Rows[n];
                    cmd.CommandText = "INSERT OR IGNORE INTO [MessageBody] ([ID], [SenderUri], [SenderName], [Body], [Extend], [MessageType], [Time]) VALUES ($ID, $SenderUri, $SenderName, $Body, $Extend, $MessageType, $Time)";
                    cmd.Parameters.Add("$ID", DbType.String).Value = dr[0].ToString();
                    cmd.Parameters.Add("$SenderUri", DbType.String).Value = dr[1].ToString();
                    cmd.Parameters.Add("$SenderName", DbType.String).Value = dr[2].ToString();
                    cmd.Parameters.Add("$Body", DbType.String).Value = dr[3].ToString();
                    cmd.Parameters.Add("$Extend", DbType.String).Value = dr[4].ToString();
                    cmd.Parameters.Add("$MessageType", DbType.Int32).Value = int.Parse(dr[5].ToString());
                    cmd.Parameters.Add("$Time", DbType.Time).Value = DateTime.Parse( dr[6].ToString());
                    cmd.ExecuteNonQuery();
                }                for (int n = 0; n < ds.Tables["Message"].Rows.Count; n++)
                {
                    DataRow dr = ds.Tables["Message"].Rows[n];
                    cmd.CommandText = "INSERT OR IGNORE INTO [Message] ([MessageID], [ReceiverUri], [ReceiverName], [Status]) VALUES ($MessageID, $ReceiverUri, $ReceiverName, $Status)";
                    cmd.Parameters.Add("$MessageID", DbType.String).Value = dr[0].ToString();
                    cmd.Parameters.Add("$ReceiverUri", DbType.String).Value = dr[1].ToString();
                    cmd.Parameters.Add("$ReceiverName", DbType.String).Value = dr[2].ToString();
                    cmd.Parameters.Add("$Status", DbType.Int32).Value = int.Parse(dr[3].ToString());
                    // Console.WriteLine(cmd.CommandText);
                    cmd.ExecuteNonQuery();
                }                for (int n = 0; n < ds.Tables["

Player"].Rows.Count; n++)
                {
                    DataRow dr = ds.Tables["Player"].Rows[n];
                    cmd.CommandText = "INSERT OR IGNORE INTO [Player] ([Uri], [Name], [Type]) VALUES  ($Uri, $Name, $Type)";
                    cmd.Parameters.Add("$Uri", DbType.String).Value = dr[0].ToString();
                    cmd.Parameters.Add("$Name", DbType.String).Value = dr[1].ToString();
                    cmd.Parameters.Add("$Type", DbType.Int32).Value = int.Parse(dr[2].ToString());
                    // Console.WriteLine(cmd.CommandText);
                    cmd.ExecuteNonQuery();
                }                dt.Commit();

                conn.Close();
               
                rtbLog.Text += "记录导入成功!\n";            }
            catch (Exception ex)
            {
                rtbLog.Text += ex.Message + ‘\n‘;
                //throw;
            }
        }

(本文代码来源:http://www.dotnetthink.com)

推荐(0)
收藏

关于飞信聊天记录

2008-08-01 10:24

飞信聊天记录存储路径:
 C:\Documents and Settings\%user%\Application Data\Fetion 下对应飞信号为文件夹的history.dat

该文件是SQLite数据库,密码为对应的飞信号。下面是存储数据库文件的表及视图的基本结构。

===========================================================
table:Player

CREATE TABLE Player(
Uri VARCHAR(256) PRIMARY KEY,
Name VARCHAR(256),
Type INTEGER)

===========================================================
table:MessageBody

CREATE TABLE MessageBody(
ID VARCHAR(64) PRIMARY KEY,
SenderUri VARCHAR(256),
SenderName VARCHAR(256),
Body VARCHAR(1000),
Extend VARCHAR(1000),
MessageType INTEGER,
Time DATETIME)

============================================================
table:Message

CREATE TABLE Message(
MessageID VARCHAR(64),
ReceiverUri VARCHAR(256),
ReceiverName VARCHAR(256),
STATUS INTEGER,
PRIMARY KEY (MessageID, ReceiverUri))

============================================================
view:vMessage

CREATE VIEW vMessage AS
SELECT MessageBody.ID AS ID, MessageBody.SenderUri AS SenderUri , MessageBody.SenderName AS SenderName , Message.ReceiverUri AS ReceiverUri , Message.ReceiverName AS ReceiverName , MessageBody.Body AS Body , MessageBody.Extend AS Extend,
MessageBody.MessageType AS MessageType , Message.STATUS AS STATUS , MessageBody.[Time] AS [Time] , P2.[Type] AS SenderType , P1.[Type] AS ReceiverType
FROM Message INNER JOIN
MessageBody ON Message.MessageID = MessageBody.ID
INNER JOIN Player P1 ON Message.ReceiverUri = P1.Uri
INNER JOIN Player P2 ON MessageBody.SenderUri = P2.Uri

============================================================ 
view:vPlayerRef

CREATE VIEW vPlayerRef AS
SELECT COUNT(MessageBody.SenderUri) + COUNT(Message.ReceiverUri) AS RefCount, Player.Uri AS Uri
FROM Player LEFT OUTER JOIN MessageBody ON Player.Uri = MessageBody.SenderUri LEFT OUTER JOIN Message ON Player.Uri = Message.ReceiverUri
GROUP BY Player.Uri

============================================================

 这样就可以对该数据库进行读写操作,实现对聊天记录的查看、导出、导入等功能了!

 (本文资料来源:http://www.dotnetthink.com)

推荐(0)
收藏