msgbartop
用铅笔写日记,记录那最原始的美丽
msgbarbottom

用https代替传统访问

由于一个众所周知的原因,就是为了打击大量非法网站的建设,在清查了一遍全国的IDC后,中国电信(网通不清楚)陆陆续续的封掉了家用ADSL的对外80端口.目的只有一个,就是让动态域名+家用服务器的小型网站从这个星球上消失。

当然,整顿非法网站我不反对。因为据我的经验,这些个站长的素质(或者说是职业道德)普遍不高。他们的网站上大多充斥着恶意脚本和后台木马、病毒等.这些都是为广大网民深恶痛绝的。

所以说,于情于理也都应该清理掉这些互联网的污垢.

可是这也给我带来了困扰,就是我用自己家里的一台Windows Server 08 r2系统搭建的web + ftp 的网络共享平台,也受到了影响,当然只是web方面.

本来想换个端口吧,开始毕竟我的朋友中有些人是不习惯这么奇怪的url的,一定程度上影响他们的使用。
后来又想,要不直接用ftp,因为21、22、23 端口是不受影响的。不过,有些人的电脑没有ftp 客户端,而且还要花时间去教他们怎么用。费事费力,再次搁浅.

面对80端口的时不时的抽风,我忽然想到了用https连接访问的方法.对啊!这是个好办法。因为https默认端口是443.
而且http与https仅有一字之差,很难分辨.

主意一定,我便开始行动了.

因为我的apache是集成了mod_ssl(提供openssl库的接口)的,所以不需要单独去下载openssl套件.
首先进入apache所在的目录,如"c:\program files\apache software foundation\apache2.2\",确保/bin 下存在 openssl.exe 程序.
我所要做的就是生成*.key、*.crt 两个文件,一个证书key和一个自签名证书.
请注意,我生成的是自签名证书(self-signed SSL Certificate).为什么呢?

因为我不可能,也没必要去到什么Verisign、Thawte等机构去申请一个。我启用SSL访问的唯一原因是为了不走80端口,仅此而已.不用那么麻烦,而且需不需要费用和通不通过还说不准.

用官方的话来讲,也可以是测试目的,呵呵
开始动手,
进入命令行,把当前目录定位到apache的/bin 下,

先生成key:
openssl genrsa -des3 -out server.key 1024
记住输入的pass-phrase,启动apache要用到.
如果和我一样是windows系统的话,最好不要加入pass-phrase,因为windows 不支持内置短语.
启动apache会报"Error: SSLPassPhraseDialog built-in is not supported on Win32"错.

如果已经生成,可以用
openssl rsa -in server.key -out srv.key
去除掉pass-phrase.
ps:不要忘了注掉httpd-ssl.conf 下的SSLPassPhraseDialog.

之后生成证书:
openssl req -new -x509 -nodes -sha1 -days 365 -key srv.key -out server.crt -config ..\conf\openssl.cnf
ps:openssl config的路径可能会不一样.

最后,把bin目录下生成的srv.key(最好改下名)和server.crt 复制到别处,如C盘根目录下.

在apache 配置文件httpd-ssl.conf 下定义路径
SSLCertificateFile "C:/server.crt"
SSLCertificateKeyFile "C:/server.key"

再添加好virtuahost,重启apache.即可

如果像我一样,想彻底的抛弃http访问,一律使用https的话,可以考虑利用地址重写达到目的.
编辑httpd.conf文件,加入:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

或者
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://cnserver.homeftp.org/$1 [R,L]

这样都可以了.
现在我就可以对电信的行为表示影响不大了,呵呵

更多SSL/TLS设置,参见:http://httpd.apache.org/docs/2.2/ssl/

月光博客请注意你的措词

最近谷歌事件闹得很是热闹,几乎大街小巷、犄角旮旯都在讨论这个事件.

就连一些向来不关心互联网,埋心于网游的某朋友都向我谈及了此事.

也难怪谷歌昨天的访问量井喷式的增长.呵呵

今天闲来无事,逛逛一些知名博客。如下面提到的月光博客-http://www.williamlong.info

基本或多或少都在说这件事.

期间浏览了月光博客发表于2010年3月23日,题为"Google搜索服务退出中国"的博文.

其中所用到的一些句子,我认为用的很不恰当,也是对自己知名博客的地位和影响力的一种不负责任.

在遭到网友留言抗议后,也没有作出及时和应有的反应.

下面是引用自月光博客该博文的部分(由于互联网的快捷、灵活性等特征,不保证同原文内容永远一致):

在以上声明发布之后,我这里检测,直接访问 www.google.cn 已经会自动跳转到了 www.google.com.hk ,首页提示:“欢迎您来到谷歌搜索在中国的新家”。这表明Google已经真的要放弃了google.cn了,谷歌中文搜索服务终于撤出中国,除此之外,谷歌音乐、谷歌热榜、igoogle等google.cn的服务还依旧能在中国访问。

请注意黑体,加粗的部分。我想每一个中国人都应该读得很别扭.(友情提示:替换成'大陆'可能是个好主意)

因为如果你和我一样是80后的话,应该亲历过1997、1999年.

香港、澳门也是中国的一部分,这一点谷歌也很清楚,所以它说的是“欢迎您来到谷歌搜索在中国的新家”.

至于谷歌与国家当局孰对孰错,这个不在本文讨论范围内。

而且我想这个也不能成为左右国家领土划分这一常识的因素,你说是吧

ps:本文的英文译版同时存在,点浏览.

由谷歌中国移至香港产生的联想

今天很多网友们都发现了,谷歌中国(包括旗下的g.cn、google.cn)自动跳转至谷歌香港(google.com.hk).

传闻多日的“谷歌推出中国”事件终于得到了印证.

新首页下方还出现了一行小字:欢迎您来到谷歌搜索在中国的新家.

同时谷歌还对外宣布,不再遵循大陆的关键词过滤的规则。也就意味着我们再也看不到“由于当地政策法规,某些条目未予以显示”这些字眼了.

可以看出,谷歌是被逼出大陆市场的,它受不了大陆的诸多限制。作为一个崇尚开放自由的搜索引擎,谷歌最终选择了离开。
尽管之前也委曲求全了一阵子. 呵呵

这也许对谷歌来讲是件好事,因为终于可以摆脱束缚,大展拳脚了。

地址的变更对我的影响可以说是微乎其微的(google.com.hk ip显示服务器还是在美国),这场风波说过去也就过去了.

反过来谈谈我们的国家,把谷歌逼走了到底能捞到什么好处?什么样的事情是不能被人民所知晓的?
搞来搞去不就那么几个关键词么?

互联网应该是开放的,自由的.当然,这也是相对于最通用的准则.
我想任何一个文明的国家也不会提倡和允许暴力、战争、色情(18周岁以下)……吧

好了,就这样吧。

本人的淘宝店上线啦

网店是一种潮流,是一种趋势。

早就想开了,一直苦于不知道该卖点什么东西,所以一直没有行动起来.

最近老妈说要开个店卖化妆品之类的,但愿不是说说而已,故而帮她开了个店。

必须要上传10件商品并保持销售状态才可以开店,谁定的规矩?!囧rz

故而随便编造了10件商品上架了(价格有点离谱),成功开通了店铺--小鑫店铺.

顺手注册了一个淘宝二级域名: http://xiazhengxin.taobao.com

这个店就算是上线了,呵呵



最后曝光下淘宝上的我遇到的奸商(两位):

广州华杰办公设备 地址:http://shop33791163.taobao.com/

惠宝数码 地址: http://shop33291532.taobao.com/

ps:以上排名不分先后

原因不解释,只为给大家提个醒.

关于winform项目的一些经验之谈

前一段时间做了一个小型的桌面应用程序,语言是c#.

其实也谈不上是c/s,因为没有用到像mssql、mysql这类的庞大的数据库.

考虑到要娇小玲珑,使用了sqlite,大大增强了运行效率.

做完后,唯一的感觉就是又学到了不少东西,只有动手去做,才能发现自己的不足.

下面就是我总结的一些新知识:(当然,都是谷歌来的)

首先来说sqlite,它的定位是超轻量级的开源数据库,而且它不需要server端.
故而被一些软件用来做配置文件的存放,如腾讯的聊天记录.

sqlite 本身不支持.net,不过有第三方的移植版,如 ADO.NET 2.0 Provider for SQLite、C#-SQLite等,我使用的前者,因为它提供了最标准的接口--System.Data.SQLite,符合C#的习惯.
而且听说nhibernate 用的也是它.
这是它的官网: http://sqlite.phxsoftware.com/.

它最大的好处可以与visual studio 完美结合,提供了Sqlite dateadapter 等组件,如图
sqlite 组件

这样可以实现可视化的面向数据库的操作。随便拖一拖控件,设置、勾选一些参数就可以了。真正的无编码编程呀!!
如图:
sqlite dataset

建议可以看看官网的视频教程:http://sqlite.phxsoftware.com/sqlite.wmv

不要像我一开始一样,不知道有这个。一边在网上找实例代码,一边看api.真是吃力不讨好.

还有要说的就是:都说sqlite 不支持外键,我试了下,可以设置。不过外键约束貌似不起作用 囧rz

再者,如果用sqlite administrator 打开数据库文件后,有可能会导致程序不能打开数据库,可以用sqlite administrator 把文件转成Version 3的,扩展名为*.s3db.而且sqlite administrator插入中文会乱码,这是个问题.

说完sqlite,再谈c#读取INI文件。
因为有些设置是要放到sqlite外保存的,比如sqlite db 的路径,本来是要用xml的.
突发奇想要用ini文件.找到了解决方案:

//调用win32系统kernel
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

//写入方法
//parameter 下同
//Section 区域名
//Key 键名
//Value 值名
//inipath ini文件路径

public void IniWriteValue(string Section, string Key, string Value,string inipath)
{
WritePrivateProfileString(Section, Key, Value, inipath);
}

//读取方法
public string IniReadValue(string Section, string Key,string inipath)
{
StringBuilder temp = new StringBuilder(500);
int i = GetPrivateProfileString(Section, Key, "", temp, 500, inipath);
return temp.ToString();
}


还有个问题就是即时刷新数据的问题.

比如说你在一个新窗口添加完数据,关闭后回到父窗口,理应要刷新一下的.
解决方案有很多种,有人是用到了全局变量,静态方法。

不过我看到了一种更好的,比较推崇的方法,就是利用模式窗口,因为模式窗口被调用完,总是会返回一个DialogResult的.
我们恰巧可以用来做判断.

//主窗体代码
form.ShowDialog();
if (form.DialogResult == DialogResult.OK)
{
//刷新操作
}
//子窗体代码
//在FormClosed事件触发时
this.DialogResult = DialogResult.OK;

同样的方法还可以用在登录窗体和主窗体之间.

最后一个问题就是,昨天有人问我的一个问题,是关于键盘按键的事件.

比如你在填好用户名和密码后,按回车键就会自动提交,免去了点击提交按钮.
其实就是一个窗体的KeyDown事件.
关键代码如下:

if(e.KeyCode==Keys.Enter)
{
loginbtn.PerformClick();
}

组合键也是这样,如ctrl+enter。只是多加了些条件而已 :)

项目完成后的部署,也碰到了一个问题.
就是我打成的安装包在用户机器安装时候,报什么缺少sqlite.dll 程序集,要我通过gacutil.exe工具添加到全局程序集GAC.
我日啊,用户机器哪来的vs??干脆把debug下面的东西拿过来用了

最后,bs一下微软的维修死丢丢,调试时候经常崩溃,重新打开后,丢失很多了代码.