为项目组写了几个Howto的Case。

本文描述了一个用C#实现类的XML序列化及反序列化。
功能是生成一个类的实例,然后序列化成XML文件形式。
或者将一个已经序列化成文件的XML反序列化成类的实例。

为了充分展示Framework功能,在一个类里面嵌入另一个类,并且XML属性字段混杂。

Student.cs
[code=’c#’]
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;

namespace XMLHowto
{
[Serializable,XmlRoot(Namespace=”http://its.hpcc.tongji.edu.cn”)]
public class Student
{
[XmlElement]
public long Number;
[XmlElement]
public string Name;
[XmlElement]
public bool enabled;
[XmlElement]
public Dorm dorm;
}
}
[/code]

Dorm.cs
[code=’c#’]
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;

namespace XMLHowto
{
[Serializable, XmlRoot(Namespace = “http://its.hpcc.tongji.edu.cn”)]
public class Dorm
{
[XmlAttribute]
public string Name;
[XmlElement]
public string Number;
}
}
[/code]

Program.cs
[code=’c#’]
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.IO;

namespace XMLHowto
{
class Program
{
static void Main(string[] args)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Student));

//序列化
FileStream fs1 = new FileStream(“./student.xml”, FileMode.Create, FileAccess.Write);
Student student = new Student();
Dorm dorm = new Dorm();

dorm.Name = “der drom”;
dorm.Number = “16-501-1”;

student.dorm = dorm;
student.enabled = true;
student.Number = 222222;
student.Name = “maojun”;

xmlSerializer.Serialize(fs1, student);

//反序列化
FileStream fs2 = new FileStream(“./student2.xml”, FileMode.Open, FileAccess.Read);
Student student2 = (Student)xmlSerializer.Deserialize(fs2);
}
}
}
[/code]

下载:用Visual Studio 2008打开
http://download.nocoo.us/Download/Archive/CSharpHowto/XML.rar

黄昏突然彩霞满天。听说还有双拱彩虹,不过我是迎着太阳的方向,没看见。

[singlepic=14523,500,375]

[singlepic=14524,500,375]

[singlepic=14525,500,375]

为项目组写了几个Howto的Case。

本文描述了一个用C#实现的简单的SQL Server查询。
功能是每次执行插入一行记录,然后输出全部记录。

Program.cs
[code=’c#’]
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;

namespace SQLServerHowto
{
class Program
{
static void Main(string[] args)
{
SqlConnection myConnection = new SqlConnection(“Data Source=itsdbserver;user id=its;password=its;database=ITSTestDB”);
myConnection.Open();

string sql = “insert into news (news) values (@value)”;
SqlCommand sc = new SqlCommand(sql, myConnection);
SqlParameter param = new SqlParameter(“value”, “现在是” + DateTime.Now.ToString() + “,但毛君还是垃圾”);
sc.Parameters.Add(param);

int count = sc.ExecuteNonQuery();
Console.WriteLine(“Line inserted: ” + count.ToString());

string sql2 = “select * from News”;
SqlCommand sc2 = new SqlCommand(sql2, myConnection);
SqlDataReader reader = sc2.ExecuteReader();

while (reader.Read())
{
Console.WriteLine(String.Format(“ID={0}, news={1}”, reader[0], reader[1]));
}
}
}
}
[/code]

下载:用Visual Studio 2008打开
http://download.nocoo.us/Download/Archive/CSharpHowto/SQLServer.rar

为项目组写了几个Howto的Case。

本文描述了一个用C#实现的简单的Windows Form。
功能是先出现一个登陆窗口,然后用户输入用户名密码,登陆窗口隐藏,加载主窗口。

LoginForm.cs
[code=’c#’]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormHowto
{
public partial class LoginForm : Form
{
public LoginForm()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = “”;
textBox2.Text = “”;
}

private void button1_Click(object sender, EventArgs e)
{
MainForm mainForm = new MainForm(textBox1.Text);
this.Hide();
mainForm.Show();
}
}
}
[/code]

下载:用Visual Studio 2008打开
http://download.nocoo.us/Download/Archive/CSharpHowto/WindowsForm.rar

为项目组写了几个Howto的Case。

本文描述了一个用C#实现的简单的Windows Service。
功能是在启动和停止服务的时候,在Windows事件查看器(Event Log)里添加一条log。

在Visual Studio 2008中建立Windows Service项目之后,会自动生成一个Service1的服务,它的名字默认是Service1,我先把它的文件名从Service1.cs改成ITSTestService.cs,然后需要在ITSTestService.cs的设计器视图的属性里,把Service Name改成ITSTestService,不然添加完服务后,启动服务时会报出这样的错误:

由于下列错误,ITS Test Service 服务启动失败:
配置成在该可执行程序中运行的这个服务不能执行该服务。

因为服务安装的名字是Service1。

Windows系统添加服务:
[code=’c#’]sc create ITSTestService binpath= “PATH TO SERVICE EXE” type= share start= auto displayname= “ITS Test Service”[/code]

Windows系统删除服务:
[code=’c#’]sc delete ITSTestService[/code]

ITSTestService.cs
[code=’c#’]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;

namespace WindowsServiceHowto
{
public partial class ITSTestService : ServiceBase
{
public ITSTestService()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
WriteLog(“ITSTestService Started.”);
}

protected override void OnStop()
{
WriteLog(“ITSTestService Stopped.”);
}

private void WriteLog(string eventString)
{
string source;
string log;
source = “ITS Test Windows Service”;
log = “Application”;

if (!EventLog.SourceExists(source))
{
EventLog.CreateEventSource(source, log);
}

EventLog.WriteEntry(source, eventString);
}
}
}
[/code]

下载:用Visual Studio 2008打开
http://download.nocoo.us/Download/Archive/CSharpHowto/WindowsService.rar

[singlepic=14479,,,left]

Google Analytics(分析)是一款免费的 Web 分析产品,根据它提供的丰富详尽的图表式报告,网站管理员与营销人员可以更好地了解并影响访问者的行为,从而提高营销活动的投资回报率。
Google Analytics(分析)给网站管理员提供了这样一个途径:了解目前网站的状态,知道可以改进的方向。下面要做的事情就是每次只对网站作一次改动,并且给 Google Analytics(分析)一段时间,它会告诉您这次改动带来的改变是否符合预期。
就像 Google Analytics(分析)的高级经理 Brett Crosby 在 Analytics blog 里提到的:“不论您如何使用 Google Analytics(分析),最重要的是您已经在使用它。”您已经在试图通过对访问者行为的分析来理解您的访问者,并且朝着优化的方向努力。当您越了解访问者并且愿意朝着提升他们访问体验的方向努力时,也意味着您正走在一条通往拥有更多忠实访问者和提高您的投资回报率的康庄大道上。

1. Web分析产品之争
不可否认,JavaScript的登峰造极之作就是Web分析产品了。市面上有很多这样的产品可以选择,国内国外的都有,比如中国站长站,51.la都提供这样的分析产品,DreamHost之类的托管商也提供基于Apache日志的分析产品。我认为,Web分析工具是网站的核心工具之一,不应该随意的选择。
Google目前来看还是一个很负责任的公司,其产品值得信赖,关键的是Google Analytics确实也不错,尤其是其JavaScript控件库强大和完善,更是让我们这些JavaScript程序员无比崇拜。

[singlepic=14481,500,,center]

在这篇文章中,我想结合实际中的一个网站的数据信息,说明一下Google Analytics有什么用以及怎么用的问题。

2. Google Analytics原理及如何启用Google Analytics
Google Analytics是基于JavaScript的,只要把类似这样一段代码插入你的页面源代码中,就可以使用Google Analytics了。其中,UA-XXXXXXX-X是每创立一个分析帐户时生成的,你的帐户当然和我的不一样。

[code=’html’]


[/code]

或者使用新版本:

[code=’html’]


[/code]

主要原理是,将一个外链JavaScript脚本包含到本页中,然后设置一个参数,指定这是哪个站(即访问报告给哪个帐户),然后调用一个JavaScript函数,由里面的函数来收集当前用户的信息(IP,浏览器版本,当前页等等等等)。记录下信息之后,再用Google Analytics的网页来使用这些数据进行数据分析和数据挖掘。

3. 多元化分析的基础
注意一点,Google Analytics是一个网站分析工具,其数据基于对于网站浏览者的长期采样。一个刚刚使用Google Analytics的用户的数据是杂乱无章且没有多少意义的,长期使用,至少一个月,才能够看出趋势。
下图展示了一个较大的站最近两个月的数据。

[singlepic=14480,500,113,center]

可以观察到网站流量稳定在25000左右,但是在6月3日出现了一个奇点,这时候可以去网站搜索了一下这一天发生了什么事情,导致了这样的数据出现。原来,网站中包含一篇文章,是同济大学6月3日一场地震分析的报告会,被搜索引擎错误地当作6月3日地震预测的文章(是谣言!)排到了前面,这是应该主动去删除这样的不实信息(即便可能不是我们的错,而是搜索引擎的错误)。浏览量固然重要,但道德更重要,不要用谣言等手段骗取用户浏览。

下图是另外一个时间段的情况。明显观察到4月18日到4月20日数据出现了一个低谷。

[singlepic=14482,500,113,center]

这是因为,网站在这段时间由于内容审核被机房屏蔽了一段时间,不能够访问,网站管理员虽采取了转向到临时网站的策略,但仍旧因为内容不如原来丰富,导致流量大幅减少。

从上面可以看出,单纯看数据是没有意义的,应该数据结合网站的状况做多元化分析。

4. 浏览量数据
Google Analytics对数据进行区分,包括访问次数、绝对唯一访问者人数、综合浏览量、平均综合浏览量、网站停留时间、跳出率和新访问率。

[singlepic=14483,,,right]

  • 综合浏览量:一切数据的核心是综合浏览量(Page View)。每次网页被加载,调用Google Analytics代码都会增加一次综合浏览量,其他的数据都是根据这个数据以及其他参数区别出来的。
  • 绝对唯一访问者人数:Google Analytics使用cookie对访问者进行标识,这样,当用户隔了一段时间再次访问,即便因为ADSL等等原因换了IP,仍旧算作同一个访问者,并且计入回头客。当然,这个值只能表明一个大概的下限,因为可能有多个人共享同一台机器或者用户禁用了cookie而导致这个值比正确值小。
  • 平均综合浏览量:平均综合浏览量计算一个综合浏览量的平均值,说明一个用户一般看了几个(次)网页。
  • 网站停留时间:用户在网站大概看了多长时间。也不是精确的值,根据一次会话中最先的访问和最后的访问比较得到。
  • 跳出率:就是说别人进了你的网站后没有再查看你网站的其他的网页的比率,当然跳出率越高,就一定程度上说明你的网站的首页吸引力不够,需要对目标网页做一定优化。或者是网站SEO的关键字有问题,导致用户进来了才发现,这并不是他/她要找的网站。
  • 新访问率:第一次来的用户的比率,也不是精确值,用户可能会清空cookie,导致重复计算,一般这个值说明了一个新访问率的上限。

5. 用户信息
Google Analytics还可以记录下用户使用机器的一些特征,比如浏览器及其版本、Java版本、Flash版本、操作系统语言等等信息。这些信息可以为网站设计者提供重要参考,可以根据比例来选择重点测试平台和采用那个版本的技术等等。
比如,作为专业Web开发人员的我可能会觉得FireFox很好很强大,并且在自己的机器上使用FireFox来浏览各种网站,那么能否就以FireFox上的显示效果为准来编写我的网页?当然不能。

[singlepic=14484,,,center]

上图可以看出,虽然FireFox很热,但是IE仍然是最重要的客户端浏览器,这意味着如果你编写了一段只能在FireFox上运行正常的页面,仍然将会在91.40%的用户浏览器里变成一团乱麻。

6. 来源分析
Google Analytics可以通过用户访问的HTTP refer信息整理分析用户是从哪里进入了你的网站。

[singlepic=14485,,,center]

从图上可以看出,用户来源基本四分天下,直接通过地址访问、通过Google、通过Baidu和通过其他方式数量基本差不多。进一步也可以看出,Baidu在中国还是很有市场份额的。

昨天晚上在教ymz同学如何使用WordPress,不少字,我觉得挺清晰的,扯淡的部分就不要了,主干还是不错呢。WordPress新手可以学习学习哦。
说你呢,菜鸟吴愚(Vestige)和超级菜鸟袁继飞(毛君)

Zheng Li 20:56:35
那,开始上课~
ymz啓蟄 20:57:00
。。。好不容易放假了。。
Zheng Li 20:57:14
最顶上黑色一行左边,管理首页,是你登陆刚进来的地方,一般是汇总的信息
Zheng Li 20:57:25
我又不考试你怕啥。。
ymz啓蟄 20:57:40

Zheng Li 20:57:57
然后是撰写,管理,外观,评论
Zheng Li 20:58:28
在这里你能写的东西有三类,日志,页面和链接
Zheng Li 20:58:38
日志就是普通的博客了
Zheng Li 20:59:06
页面这个概念一开始不好理解,其实就是类似于About那样的东西
Zheng Li 20:59:09
不属于日志吧
Zheng Li 20:59:40
或者一堆日志组成了文集,你可以建一个页面去组织
Zheng Li 21:00:07
链接就是友情链接,显示在前台侧边栏链到别人的网站
ymz啓蟄 21:00:20
啊! 明白了 就是
比如 页面上 引导性的问题
Zheng Li 21:00:27

ymz啓蟄 21:00:28
引导性的文字
Zheng Li 21:00:47
嗯,差不多吧
Zheng Li 21:01:02
然后管理其实就是主要管理这三类内容,就是已经发布的那种
Zheng Li 21:01:48
里面还有分类,发表日志的时候,日志分为哪一类,在这里做初始化的分类设置,然后发表的时候就可以选了
Zheng Li 21:02:03
标签就是tag,可以理解成关键字吧
ymz啓蟄 21:02:12
嗯嗯
Zheng Li 21:02:15
管理里面别的暂时不重要
Zheng Li 21:02:28
外观,其实就是模板选择的地方
Zheng Li 21:02:43
里面默认有一大堆了,你可以先进去点点玩玩
Zheng Li 21:03:00
开一个前台,选定一个之后,刷新看看前台效果
Zheng Li 21:04:30
评论就是别人针对日志和页面的评论了,一般如果这个人是第一次评论,需要你审核是不是垃圾评论,你审核通过一次,下次他的评论就会直接发表
Zheng Li 21:04:47
不用审核了。不过你可以在管理首页看到最近的评论
Zheng Li 21:04:59
# Widgets
# 主题编辑器
Zheng Li 21:05:03
这两个暂时不重要
Zheng Li 21:05:49
设置,这里面就是博客的一些设置,包括名字什么的
Zheng Li 21:06:15
插件很强大,用法和模板差不多,也是下载,传上去,然后激活
Zheng Li 21:06:42
明天我会帮你把常用的插件都装全,你就负责用就好~
Zheng Li 21:07:03
插件做什么,很多很多,比如看最近都有谁看了你的博客之类的
Zheng Li 21:07:21
他们用了什么浏览器和系统,是什么IP之类,都可以看到
ymz啓蟄 21:07:28
。。。哇
Zheng Li 21:07:38
传好了,正好讲得差不多了
Zheng Li 21:09:28
FTP啦,先解压好打开程序
Zheng Li 21:17:48
哦,对了,我博客上第一篇,就是典型的发画时候的样子,可以发大图,也可以发一系列小图
ymz啓蟄 21:17:50
黑白的
ymz啓蟄 21:18:05
没有颜色^^
Zheng Li 21:18:05
这需要一个插件的支持,明天我帮你装好那个插件
Zheng Li 21:18:15
嗯,最近比较悲伤吧
ymz啓蟄 21:19:15
….诶? ex>?
Zheng Li 21:19:35
差不多吧,都是感情问题,太头疼
ymz啓蟄 21:20:36
唔…这个确实无所适从呢
人下来的时候神都给每个安了那种特别的插件吧。。^^p
Zheng Li 21:21:13
唉~你智商有200吧!
ymz啓蟄 21:21:17
嚄j 这个我以前装过呢
Zheng Li 21:21:32
嗯。。。那也行
ymz啓蟄 21:21:32
。。。满分多少?
好像没怎么测过
Zheng Li 21:21:40
据说最高160
ymz啓蟄 21:21:46
30天后过期
Zheng Li 21:22:08
嗯,先用着..我再传一遍,你存好~
ymz啓蟄 21:22:30
已经装好了
Zheng Li 21:22:38
好~
Zheng Li 21:23:05
连FTP的用户名密码是另外的一个,连接的目标,就是地址,是www.ymz494.com
Zheng Li 21:23:24
用户名”ymz”,密码*******
Zheng Li 21:23:39
我发到你的hotmail一份了
Zheng Li 21:23:58
你先连连试试
Zheng Li 21:24:28
那个工具可以保存连接的参数的,所以只要输一次,下一次就选快速连接就好
ymz啓蟄 21:24:58
嗯^
Zheng Li 21:25:32
对了,磁盘是有限额的,2TB,就是2048GB
ymz啓蟄 21:26:07
…….gb???
Zheng Li 21:26:23
服务器在美国,传输速度肯定不会太快,要是慢的话,我给你提供个国内的临时服务器,先传到那上面再弄到这个上面去
Zheng Li 21:26:26
嗯,GB~
ymz啓蟄 21:27:01
。。。。。
这都放什么的。。放电影么。。。
我们宿舍硬盘软盘u盘加起来都没这么大
Zheng Li 21:27:20
因为服务器在美国,要遵守美国法律,不能放有版权的东西
Zheng Li 21:27:31
软件啊,mp3啊,电影啊都不行
Zheng Li 21:27:43
但是自己的照片什么的可以~
ymz啓蟄 21:27:44


背景音乐呢??
Zheng Li 21:28:03
背景音乐要用的话引用别的地址的是可以的
Zheng Li 21:28:38
还有就是什么儿童色情之类不允许…估计你小孩子不会搞这个..
ymz啓蟄 21:28:39
间接侵权^^
ymz啓蟄 21:28:46
。。。。。
Zheng Li 21:29:03
不过,没法查
Zheng Li 21:29:34
连上没?
ymz啓蟄 21:31:16

Zheng Li 21:31:29
六级过了没?
ymz啓蟄 21:31:42
。。。。
Zheng Li 21:31:47

ymz啓蟄 21:32:32
没报英语 报的日语。。。
Zheng Li 21:32:42
..
Zheng Li 21:32:49
那。。。就用拼音吧~
Zheng Li 21:33:12
服务器上使用中文或日文命名文件和文件夹会导致各种奇妙的问题
Zheng Li 21:33:27
所以,最好都用英文字符和数字
ymz啓蟄 21:33:34
。。。
嗯嗯^^…
Zheng Li 21:34:00
那里面的结构,ymz494.com这个文件夹就是你的博客主目录
ymz啓蟄 21:34:05
为了练习英文 我自己电脑图片文件加分类里都是英文名的
Zheng Li 21:34:10
呵呵~
Zheng Li 21:34:30
Let’s speak english from now on~
ymz啓蟄 21:34:57
。。。。
Zheng Li 21:35:06
there is a directory called “wp-content” inside ymz494.com
ymz啓蟄 21:35:22
嗯 看到了
Zheng Li 21:35:33
this is where you keep themes and plugins,and also your 画~
ymz啓蟄 21:36:20
画。。。
Zheng Li 21:36:28
里面的themes,打开的话有很多文件夹,每个文件夹都是一个模板,你看上好的,下载下来,把文件夹解压传到里面,然后博客后台就能看到你新传的了
ymz啓蟄 21:36:31
模板放哪里呢?
Zheng Li 21:36:59
你可以先传一个试试看
Zheng Li 21:37:06
告诉我传输速度怎么样
ymz啓蟄 21:37:21
啊 看到了
Zheng Li 21:38:35
然后插件也是差不多原理,叫plugins
Zheng Li 21:38:44
也是传进去就能看到
Zheng Li 21:39:14
画的话,明天我建好插件后,这里面会有一个叫gallery的文件夹,里面每个文件夹是一个画集
ymz啓蟄 21:39:22
嗯^^
Zheng Li 21:39:50
其他文件和目录的话,都是程序,等以后你该行计算机了再给你讲哈~
ymz啓蟄 21:39:53
当时我申请blogcn 就是为了传图方便,它不限外连,也不限大小
Zheng Li 21:40:10
这里…..你随便咋地都行
Zheng Li 21:40:12
这里…..你随便咋地都行
ymz啓蟄 21:40:14
。。。
cs也改行画画吧^
Zheng Li 21:40:23
杀了我吧~
Zheng Li 21:40:29
不过我真的很想呢
ymz啓蟄 21:40:33
可以作为一生的业余兴趣
Zheng Li 21:40:40
当年高考还想考中央美院呢
Zheng Li 21:40:49
没天赋啊,咋整..
Zheng Li 21:40:55
我只会PS..
ymz啓蟄 21:40:57
以后还可以给自己孩子吹牛
你老爸也是能画两张的呢~