Archive for the '学习' Category

image 旧的blog虚拟主机就要到期了,虽然一直都没有用了,却没有把里面的东西转出来.前几天试着安装了一个MovableType插件想把内容都导出来,也许是服务器配置的原因,导下来的都是乱码.没办法只有自己动手写一个了.

使用很简单.

1,下载Z-blog的数据库(mdb格式)到本地.
2,运行工具,点"选择数据库"按钮,选择下载下来的数据库.
3,输入Blog信息(Z-blog的用户配置信息不保存在数据库里….囧).
4,点"开始转换",提示导出后的文件保存位置.
5,处理完会有提示.

6,到wordpress的dashbroad上找manage->import->wordpress.上传上文件,剩下的就让wp去处理吧.

代码在这里:z-blog2wordpress.zip

程序在这里:z-blog2wordpressv01.zip

你可能需要.Net Framework 2.0,在这里:.Net Framework 2.0

ps,暂时无法导出trackback….因为我的blog一直没有收到过trackback,囧.

最近项目中产生一个需求,需要对一个site下的每个aspx和其对应的cs文件封装进一个dll中,并且在web.config文件中通过配置httphandlers来实现访问。

查了半天资料,只找到了一篇还是讲.net 1.1的。照着方法做了以后,发现很多地方不合适,琢磨了半天,终于给我搞定。

以下是详细过程:

  1. 打开Visual Studio 2005,New一个Website Project
  2. 默认会创建一个Default页面,并且是没有namespace的,为了方便,添加namespace为Test,类名为Default,并且在页面上拖一个按钮,双击添加事件。处理完毕后,可见代码分别如下
    [Default.aspx.cs]
    [Default.aspx]
    编译这个项目,确保成功,并且会在项目目录中添加一个Web.config文件。
  3. 在Default.aspx.cs页面添加几个乱字符,随便什么地方。这样做的目的是为了不让系统编译成功。
  4. 用之前访问Default.aspx页面的url访问该页面,会出现编译错误提醒页面。点击其中的[显示完整的编译源]链接,会显示编译错误的编译代码,可以注意到,aspx页面已经被某个没被公开的工具解析成了一段代码。[Code.cs]
    复制这些代码到任意的支持正则表达式匹配的文本编辑器,替换掉所有的行号,#line default和#line hidden这样的编译器标识。删除顶部的checksum信息。删除所有的以#line开头的行。并且删除多余的空行。
  5. 注意到代码分成了两个部分,上半部分是Default class的部分类。下一部分是ASP.default_aspx class的内容,其实是Default.aspx解析了以后的结果。做如下处理:copy上半部分的分布类代码和Default.aspx.cs文件中的所有代码到一个文件中,比如:Default.cs,并且删除刚才添加的为了让编译器编译出错的那些代码。下半部分的代码也保存到另外一个部分的文件中,比如Default_Aspx.cs.处理后代码如下:
    [Default.cs]
    [Default_Aspx.cs]
     屏蔽掉Default_Aspx.cs文件的以下几行
    //private static bool @__initialized;
    //private static object @__fileDependencies;
    //string[] dependencies;
    //if ((global::ASP.default_aspx.@__initialized == false))
    //{
     //dependencies = new string[2];
     //dependencies[0] = “~/Default.aspx”;
     //dependencies[1] = “~/Default.aspx.cs”;
     //global::ASP.default_aspx.@__fileDependencies = this.GetWrappedFileDependencies(dependencies);
     //global::ASP.default_aspx.@__initialized = true;
    //}
    //this.AddWrappedFileDependencies(global::ASP.default_aspx.@__fileDependencies);
    [这几行是用来检查页面依赖是否有被改动过。]
  6. 删除掉website中的Default.aspx页面和Default.aspx.cs文件,并且添加App_Code文件夹,将刚才保存的两个文件添加到该Website Project的该文件夹中,并且在Web.config文件中添加如下映射 
       <httpHandlers>
          <add verb=”*” path=”Default.aspx” type=”ASP.default_aspx”/>
        </httpHandlers>,
    访问Default.aspx页面。就可以跳入刚才添加的两个文件进行调试。
  7. 如果想编译成dll的话,先用csc build Default.cs 为default.dll,再引入这个dll build Default_Aspx.cs。然后引用进这个项目就可以了。当然还是要删除App_Code文件夹下面的两个文件,否则会出现同名问题。 

Over。

PS,在处理有图像的页面时,需要将相对路径转化成绝对路径,否则会有意想不到的事情发生。正在研究中。

PS,感谢浙江省绍兴市解放北路148号交通大厦六楼 周杰忻以及这篇参考

玩Ubuntu第一天,彻底被Linux打败。

用了一个小时装上6.10,然后再花去三个小时On line update,终于可以体会到传说中最好用的Linux发行版本。

也许是我太笨蛋,或者说是已经被Windows给驯服,在装上系统后的三个小时内,我只做了两件事情:一是找一个MP3播放器和一个兼容QQ的IM软件,另外一个是把这些软件运行在Ubuntu系统的Gnome下。当我下载了三个播放器两个类QQ IM以后,终于发现,这其实是个不可完成的任务。而且我所有关于Windows操作系统的操作习惯在这里都失效了。更为过分的是,在短短的半天时间,他就让我的系统死机三次。而且当我习惯的按ctrl+alt+dele去restart或者调出task management时,一点反应都没有,只好狠心的按power键。

在一番奋斗之后,现在我终于可以带上耳机,用xmamp去放几首mp3,但是qq还是没有办法上。当然我知道这是由于Tencent QQ协议不公开导致的,所以只有放弃了这个想法。

现在我用着所谓的最free的linux,在x-windows环境下用firefox打开我的blog,然后用scim带的智能拼音去写下这么些文字,算是这几天折腾的结果,能够上网全败ubuntn develop team所赐,当我把这个系统setup完毕的时候,我发现我所有的硬件驱动和网络已经被配置好了,而且人性化的给我装了个firefox1.5,并且在update的时候升级成了2.0。只是几乎我所有能看到的网页都是变形的,当然我还知道这是由于这些网页对w3c的标准支持不好造成的,但是如果一个人在windows下看到网页显示都是很美观的到linux下面就一团糟糕,他们会认为是网页作的不好还是认为系统有问题?

现在我面临几个问题:
第一,我不会使用命令行,连最起码的login/logout/shutdown/reset都不会,也就是说脱离了gnome或者kde我什么都干不了。
第二,我不会使用shell,不可以对系统做任何的操作。
第三,我明白所有我的设备在这个操作系统中是以一种什么样的方式被管理起来,我要怎么修改这些配置。
第四,我要在linux上配置一个apache,然后再安装一个mysql,然后是php的zend引擎,以及一个c++的编译环境,g++也可以。但是看来这些任务要再再再拖后面再说了。

你看,我是个做开发的,玩计算机也这么久了,用起这个系统还这么别扭,所以奉劝那些整天叫着linux要打败windows的同学,低头看看自己的位置才是王道。各位如果想尝尝新鲜,去down个玩玩吧,但是如果你想一直用下去,除非你和我一样,有受虐倾向。过几年更方便了再考虑吧,反正三块钱的windows到处都是,版权费满清时代先人都替大家交过了。

好吧,就type到这里,我要继续研究去了。

(一)学一些技术方面的东东
1.C++,看看STL;能用这个东东解决一些效率上的问题
2.C#,了解一下里面更多的特性,比如以前用的不多的多线程,范型,还有反射
3.网络协议,试试用C++或者C来实现TCP/IP层的应用,写几个针对FTP/HTTP的小工具
4.XML,相关技术,比如XML Schema,XSL,XPath,还有Web Service
5.数据库,SQL Server 2005的特性,My SQL的使用.TSQL好好看一看.
6.Java,学着玩玩吧.起码不要连怎么配置都不会.
7.PHP,新年来了以后要研究一下,以后可能要写一些这方面的应用.
8.脚本语言,Python挺好玩的.Javascript也不错.慢慢研究.
9.有时间就看看关于操作系统内核的东东.
10.设计模式上面的东东,最好看看.

(二)看一点软件工程的东东
1.那本代码大全不错,两个月看玩掉.然后多看点.
2.人月神话翻一翻,虽然已经老了.
3.UML今年找个时间翻翻,免得真做了代码民工
4.叫的比较火的敏捷开发模式,找本书看完.

(三)读一些经济学博弈论社会科学的东东
1.晚上回来没事把曼同学的经济学看完
2.那几本文艺复兴时候的老书,也要看完.
3.最好找几本博弈论的入门书,不要再当门外汉.
4.多买点书,多看点书,挺好.

(四)鸟语不能放下
1.没事就多看看鸟语的文档,
2.泡论坛的方向从csdn转向codeproject或者msdn.
3.能多看点原声的外语片就多看点吧
4.发音不准语法不好照说不误,有个叫李阳的人比咱丢人丢的大多了.

(五)好身体加好心情
1.无论什么事情都不能影响情绪
2.没事多运动运动,太瘦了不好
3.注意保护眼睛
4.别胖了,我怕

今年的计划:成为一个小牛,提高一个Level,眼光开阔一些,心态更好一些,信心更足一些.迎接本命年,还有2008.

leiz,加油.

Sep 16

失望

1 comment - Post a comment

回来了,一个感觉:失望.

虽然没有那么差,没有我想的那么好,原以为会去讲一些MS的开发方向和产品预期,没有想到居然是简单的介绍自己的产品新特性.或者技术的新特性.

5,都是已经存在的东西,MSDN和WebCast里面一堆的资料可以看,干吗非要跑来花钱听你们大家说哦.

上午听了Paul Randal讲SQL Server 2005 Always On,还有周敏的Visual Studio Team Edition for DataBase Pro.下午的敏捷开发模式,Atlas技术,还有Vista新安全特性介绍,上午的第一场有够郁闷,本来说是中文的,结果忽然来了SQL Server 2005的开发首席经理,全部来E文了,好在有PPT在,连猜带蒙,算是明白了,没有浪费45分钟.最后面的这个让我睡着了,差点倒在地上丢了人,于是出来逛.其实佘山的风景还是蛮不错的.

总之,失望大于期望,盛名之下,其实难符.或者用崔同学的一本书名:<<不过如此>>

从下班回来折腾到现在,终于把服务器架设起来了,汗。
跟着MS混的时间太长了,一点都不习惯用命令行。。
用PHP写一个HelloWorld,算是开始学一下了。
慢慢来吧。

新建一个WinForm项目,拖两个ComboBox到Form上,ID分别取为cbTestA和cbTestB,
然后为其绑定同一个数据源,代码如下:
[CODE_LITE]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TestDataBind
{
public partial class MainForm : Form
{
#region 默认构造函数
///

/// 默认构造函数
///

public MainForm()
{
//初始化
InitializeComponent();

//绑定数据到控件
BindDataSource();
}
#endregion

#region 绑定数据
///

/// 绑定数据
///

public void BindDataSource()
{
//申明一个用于绑定的DataTable
System.Data.DataTable dtSource = new DataTable();

//添加两个Column到Table
dtSource.Columns.Add(“Display”);
dtSource.Columns.Add(“Value”);

//赋值
for (int i = 0; i <= 10;i ++)
{
dtSource.Rows.Add(Convert.ToString(i * i), Convert.ToString(i));
}

//设定控件数据源,显示域,值域
this.cbTestA.DataSource = dtSource;
this.cbTestA.DisplayMember = “Display”;
this.cbTestA.ValueMember = “Value”;

this.cbTestB.DataSource = dtSource;
this.cbTestB.DisplayMember = “Display”;
this.cbTestB.ValueMember = “Value”;
}
#endregion
}
}[/CODE_LITE]
然后Debug。。。当其中一个ComboBox的选中值改变时,另外一个ComboBox的选中值也会改变。
而并没有设置SelectIndexChange等事件。

Google查不到相关信息,估计是我描述的不清楚。
CSDN上有人说是数据和控件的“双向绑定”,第一次听说,而且也search不到相关信息。
期待高人解答。

作者:TomMax (笑望人生) 出处:csdn community

有许多人问的,.Net中的委托以及事件处理。我拿简单的例子说明一下,是现实中的例子:

比如说一个公司(场景),你是老板,手下有两个员工,小张和小王。
你命令小王,如果小张玩游戏,则小王扣去小张500元钱。

这就是现实中的委托。

实际上,在写程序中,程序员就是老板,小张和小王就是两个对象。小张玩游戏是一个方法,小张还有一个游戏事件,他玩游戏激发这个事件。而小王就是事件处理对象,他负责把小张的钱扣除500。

所以,委托有如下几个要素:
1 激发事件的对象–就是小张
2 处理对象事件的对象–就是小王
3 定义委托,就是你让小王监视小张。

如果这三个要素都满足的话,则你就写出了一个完整事件的处理。

下面有个例子:在vs.net2003 C#控制台应用程序编辑运行成功:
using System;

namespace CSharpConsole
{
 public class 场景
 {
  [STAThread]
  public static void Main(string[] args)
  {
   Console.WriteLine(“场景开始了….”);
   // 生成小王
   小王 w = new 小王();
   // 生成小账
   小张 z = new 小张();

   // 指定监视
   z.PlayGame += new PlayGameHandler(w.扣钱);

   // 开始玩游戏
   z.玩游戏();

   console.writeline(“场景结束…”);
   Console.ReadLine();
  }
 }

 // 负责扣钱的人
 public class 小王
 {
  public 小王()
  {
   Console.WriteLine(“生成小王…”);
  }

  public void 扣钱(object sender,EventArgs e)
  {
   Console.WriteLine(“小王:好小子,上班时间胆敢玩游戏…”);
   Console.WriteLine(“小王:看看你小子有多少钱…”);
   小张 f = (小张)sender;
   Console.WriteLine(“小张的钱: ” + f.钱.ToString());
   Console.WriteLine(“开始扣钱……”);
   System.Threading.Thread.Sleep(500);
   f.钱 = f.钱 – 500;
   Console.WriteLine(“扣完了….现在小张还剩下:” + f.钱.ToString());
  }
 }

 // 如果玩游戏,则引发事件
 public class 小张
 {
  // 先定义一个事件,这个事件表示“小张”在玩游戏。
  public event PlayGameHandler PlayGame;
  // 保存小张钱的变量
  private int m_Money;

  public 小张()
  {
   Console.WriteLine(“生成小张….”);
   m_Money = 1000; // 构造函数,初始化小张的钱。
  }

  public int 钱 // 此属性可以操作小张的钱。
  {
   get
   {
    return m_Money;
   }
   set
   {
    m_Money = value;
   }
  }

  public void 玩游戏()
  {
   Console.WriteLine(“小张开始玩游戏了…..”);
   Console.WriteLine(“小张:CS好玩,哈哈哈! 我玩…..”);
   System.Threading.Thread.Sleep(500);
   System.EventArgs e = new EventArgs();
   OnPlayGame(e);
  }

  protected virtual void OnPlayGame(EventArgs e)
  {
   if(PlayGame != null)
   {
    PlayGame(this,e);
   }
  }
 }

 // 定义委托处理程序
 public delegate void PlayGameHandler(object sender,System.EventArgs e);

}

下午写到了这个系统最让我头疼的地方.动态折线图.

因为之前从来没接触过GDI+方面的东西.一点概念都没有.于是去MSDN转了圈,看了半天文档以后开始动手.摸摸索索的也搞没真么出问题.却忽然感觉肚子痛…郁闷.穿的太单薄,拉肚子了...跑了几趟WC以后终于安定下来.然后接着鼓捣.

生成折线图的类快写完了才注意到,昨天搞的那个调用代理类的接口似乎不太合理.居然直接传了DataSet对象过来….完了传过来还需要变成数组.晕,搞的这复杂.于是又跑到那个接口类里一顿修补…好了,传个结构数组过来.直接就能用..

晚上对着显示器一点力气都没有了.记起晓明老师说的话,怎么实现不重要,关键是一开始结构要想好…桌子上有本UML教程,寒假买的,没来得及翻几页.看来.真该抽时间好好看看了.

Feb 22

foreach遍历

No comment - Post a comment

下午写一个函数,试图遍历整个Form里的TextBox。想都没有想我就这样写了下来:

foreach(TextBox temp in this.Controls)
{
    temp.Text="……";
}

结果编译程序报错。汗。“指定的转换无效”????WHY?难道还要强制转换?难道遍历的还有不是TextBox的Control?可是已经指定了只遍历TextBox控件。

想了半天没弄明白。

想想还了个方式写:

foreach(Control temp in this.Controls)
{
    if(temp is TextBox)
    {
        temp.Text="……";
    }
}

编译通过。功能正常。奇怪奇怪真奇怪。难道前一个函数真的会遍历出非TextBox的Control??

于是再仔细看了看foreach in 的语法说明:

嵌入语句为数组或集合中的每个元素继续执行。当为集合中的所有元素完成迭代后,控制传递给 foreach 块之后的下一个语句。--MSDN2003

晕,我居然一直以来都以为的是遍历所有控件里的指定控件。。。