[code=’c#’]
private string GetPageContent(string address)
{
try
{
string result = null;
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);
req.Method = “GET”;
using (WebResponse wr = req.GetResponse())
{
// 请求网页内容
Stream stream = wr.GetResponseStream();
StreamReader sr = new StreamReader(stream, Encoding.Default);
result = sr.ReadToEnd();

// 获取网页编码
int charsetIndex = result.IndexOf(“charset”);
string charset = “utf-8”;
if (charsetIndex != -1)
{
int right = result.IndexOf(“>”, charsetIndex);
charset = result.Substring(
charsetIndex + 7, right – charsetIndex – 7).Trim();
charset = charset.Replace(“=”, “”);
charset = charset.Replace(“\r”, “”);
charset = charset.Replace(“\n”, “”);
charset = charset.Replace(“\””, “”);
charset = charset.Replace(“‘”, “”);
charset = charset.Replace(“/”, “”);
charset = charset.Replace(” “, “”).ToLower();
}

// 将字符串转换成网页中指定的编码类型
result = Encoding.GetEncoding(charset).GetString(
Encoding.Convert(Encoding.Default,
Encoding.GetEncoding(charset),
Encoding.Default.GetBytes(result)));

sr.Close();
stream.Close();
}
return result;
}
catch
{
return null;
}
}
[/code]

这种情况:
一组照片,或者MP3歌曲,知道它们的路径,保存在一个数组中。现在想随机播放之。要求,每首歌出现的概率相等,且播放完全部之前不会重复,并且保证顺序可以前后无限快进或者快倒。
[code=’c#’]
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace RandomStringArray
{
class Program
{
private static int count = 50;

static void Main(string[] args)
{
string[] originalArray = GetStringArray();
string[] randomArray = new string[originalArray.Length];

SortedList list = new SortedList();
for (int i = 0; i < originalArray.Length; i++) { list.Add(originalArray[i].GetHashCode(), originalArray[i]); } int index = 0; foreach (KeyValuePair item in list)
{
randomArray[index++] = item.Value;
}

// Print Result
Console.WriteLine(“Original:”);
for (int i = 0; i < originalArray.Length; i++) { Console.WriteLine(string.Format("[{0}]{1}", i, originalArray[i])); } Console.WriteLine("Random:"); for (int i = 0; i < randomArray.Length; i++) { Console.WriteLine(string.Format("[{0}]{1}", i, randomArray[i])); } } ///

/// Generate a directories list for test
///

/// Directories list
private static string[] GetStringArray()
{
if (!Directory.Exists(“Temp”))
{
Directory.CreateDirectory(“Temp”);

for (int i = 0; i < count; i++) { Directory.CreateDirectory("Temp\\" + Guid.NewGuid().ToString()); } } return Directory.GetDirectories("Temp"); } } } [/code]

第一个版本:

[code=’c#’]
public static byte[] Serialize(object o)
{
MemoryStream ms = new MemoryStream();
GZipStream compressedStream =
new GZipStream(ms, CompressionMode.Compress, true);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(compressedStream, o);

byte[] buffer = new byte[ms.Length];
ms.Read(buffer, 0, (int)ms.Length);

compressedStream.Close();
ms.Close();
return buffer;
}
[/code]

第一个版本的问题是,buffer的长度不正确,同样的对象如果序列化到文件再读文件出来,长度总是和MemoryStream差那么十几个byte。甚是郁闷。

第二个版本:

[code=’c#’]
public static byte[] Serialize(object o)
{
MemoryStream ms = new MemoryStream();
GZipStream compressedStream =
new GZipStream(ms, CompressionMode.Compress, true);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(compressedStream, o);
compressedStream.Flush();
compressedStream.Close();

byte[] buffer = new byte[ms.Length];
ms.Read(buffer, 0, (int)ms.Length);

ms.Close();
return buffer;
}
[/code]

这样MemoryStream读取出来的byte组至少在长度上正确了。但是带来一个问题,读出来的byte数组里全是0,没读到数据。Read返回也是0。

第三个版本:

[code=’c#’]
public static byte[] Serialize(object o)
{
MemoryStream ms = new MemoryStream();
GZipStream compressedStream =
new GZipStream(ms, CompressionMode.Compress, true);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(compressedStream, o);
compressedStream.Flush();
compressedStream.Close();

ms.Position = 0;
byte[] buffer = new byte[ms.Length];
ms.Read(buffer, 0, (int)ms.Length);

ms.Close();
return buffer;
}
[/code]

这样终于正常了。这个事情告诉我们一下几个事实:

  • 凡是与Stream打交道时遇到的奇奇怪怪的问题多半与缓存有关,试试Flush()会有奇效。“自从缓存发明之后,计算机科学里就再也没有牛B的概念产生了。”
  • 使用MemoryStream时要打破思维定势,记得读取MemoryStream时要首先设置Position到合适的位置再读。
  • 没有做不到的事情。

我写的一个工具,可以打开一个Visual Studio 2008项目的解决方案.sln文件,分析其中的C#项目,统计代码行数。代码目前主要统计总行数、空行数、注释行这三种,计算注释比例和代码循环嵌套深度。

[singlepic=18214]

[singlepic=18213,610,392]

目前只对Visual Studio 2008的C#项目做过测试,别的项目我目前用不到,运行会有什么结果我不知道…不过肯定不会造成损失,放心试试吧。
下载:http://www.redmine.net/projects/list_files/nocoocodecounter

本文致力于描述如何在Windows Server 2003下安装配置PHP环境时遇到的问题及解决。

环境说明:

  • 操作系统:Windows Server 2003 Computing Cluster Edition,英文版(由Microsoft支持)
  • 相关软件:Internet Information Services 6.0
  • PHP:PHP 5.2.6 zip package。(最新版下载地址

PHP装多了,闭着眼也能装好。于是今天早晨却遇到一个诡异的问题。
用了5分钟装好PHP之后,刷新IE,我的index.php里很简单,就是简单的phpinfo:
[code=’c#’]

[/code]
熟悉的界面并没有出来,取而代之是连不上服务器。也不是500内部服务器错误,因为如果是500,说明PHP没配置正确。这次很诡异,就是连不上服务器。是这个样子的:

[singlepic=18201,640,480]

Continue reading

本文致力于描述如何在Windows Server 2008下安装配置用于开发或产品的MySQL及PHP环境。

环境说明:

  • 操作系统:Windows Server 2008 Standard Edition,英文版(由Microsoft DreamSpark支持)
  • 相关软件:Internet Information Services 7.0
  • MySQL:MySQL 5.0.67, Windows Essentials (x86)。(最新版下载地址
  • PHP:PHP 5.2.6 zip package。(最新版下载地址

1. 安装MySQL

这似乎是一个波澜不惊的过程,任何人都能做好。
[singlepic=18162]
安装欢迎界面。
[singlepic=18163]
这一步选Custom自定义安装比较好,指定安装位置,建议安装在D盘,避开系统盘C盘。由于UAC的问题,在Vista和2008下,C盘的文件搞得很特殊,一些原来好好的程序,由于权限问题的存在,会出现莫名奇妙的故障。
Continue reading