Posts Tagged ‘Microsoft’
-
How to use directly Reply-To in Outlook 2007
This function is necessary when you want to use one mailbox sending mails to some guys, while receiving their replys by another mailbox.
Commonly, there is an option to select Reply-To mailbox in the top of composing mail. But how could we do as the same thing in Outlook? Is it able to do this work?
An example figure for Thunderbird catched from webOf course the answer is true. There is a button named “Direct Replies To” in Options Tab. You may click that button to enter into “Message Options” and modify the field you need.
In addtion, if you want to permanently change the Reply-To address, you may go into Tools –> Account Settings, and double click one of your mailbox setting. Then click “More Settings”, and you will see Reply Email text-box.
Enjoy your mailing!
-
Windows 7 Shell命令列表
Shell命令的强大不言而喻,能够快速完成一些任务,也能让一系列的任务批处理执行,非常好用。Windows 7里面的shell命令更加强大了,能够完成更多的任务。从国外看到了一篇介绍win7 shell的文章,转载过来,还是很有用处的。
Windows 7 Shell命令
shell命令可以直接在开始菜单的命令框中执行。如果若是添加为一个快捷方式,那么前面要加上explorer.exe来运行这些shell。
win7最新加入
- shell:Libraries
- shell:MusicLibrary
- shell:VideosLibrary
- shell:OtherUsersFolder
- shell:Device Metadata Store
- shell:PublicSuggestedLocations
- shell:DocumentsLibrary
- shell:User Pinned
- shell:UsersLibrariesFolder
- shell:PicturesLibrary
- shell:ImplicitAppShortcuts
- shell:Ringtones
- shell:CommonRingtones
-
利用Google Sync备份Nokia S60手机
最近Google发布了Google SyncBeta for mobile phone。虽然还只是beta版,但是效果还是不错的,可以很轻松地备份我们的手机资料。
对于像我一样使用Nokia Symbian S60系统的手机用户来说,这算不上一个惊天的好消息,因为诺基亚自己做的备份系统非常出色,已经足够好了。但毕竟我们不可能一直都只使用诺基亚的产品的。本人前一阵子就在用Sony Ericsson的P1i手机。虽然是Symbian UIQ系统,和诺基亚还是有点联系,但区别还是挺大的。加之很多朋友在使用iPhone,自己手机中信息的备份与转移就成了很大的问题。试想,如果我们每个人的手机里面平均拥有200个联系人,那么换个手机电话转移的代价有多大?非常不方便,而且很容易出错。
还好这个时候Google Sync登场了。用它可以备份我们的手机重要信息,甚至可以转移到其它手机上。针对于Nokia S60系统来说,操作方法如下:
1、打开工具 –> 同步处理。或者打开通讯录,进入选项菜单,找到同步->设置,并进入。

2、进入程序后,选择菜单里面的新建同步情景模式。

3、在同步情景模式名称这里填写:Google Sync。或者任意一个你喜欢的名字。

4、进入应用程序(第二个标签)。里面有很多可以同步的内容,如名片夹、日历、记事本等等。不过beta版的google sync只支持同步联系人信息(官方说的)。所以只能选择第一个。
5、进入了名片夹后,将“是否同步”选项选择为是,远程数据库填写contacts,同步类型选择双向(我第一次选择仅到服务器,结果同步失败了)。然后回到上一页。

6、在连接设置里面,填写:服务器版本->1.2;服务器识别码->Google(G要求大写);数据承载方式->互联网;主机地址->https://m.google.com/syncml;端口->443;用户名->你的google用户名,或是google application account的用户名;密码->你的密码;其他默认值不必改变。

7、到此就全部设置完成了。可以通过同步命令来进行和google服务器的同步工作喽。另外,建议在有无线wifi热点的地方使用,这样就可以节省一部分GPRS流量了。

其它手机,如Windows Mobile、iPhone、索爱、BlackBerry等等,请参考google官方网站:http://www.google.com/mobile/default/sync.html。不过就是全英文的,需要仔细看一下。
最后,再谈一谈为什么Google可以做到同步。其实主要是依靠两种协议:SyncML和Microsoft Exchange ActiveSync。
SyncML (Synchronization Markup Language)是一平台无关的信息同步标准协议集。分为SyncML数据传输协议(SyncML-DS)和SyncML设备管理协议(SyncML-DM).
现存的大部分同步解决方案绝大部分依赖于某个厂商、应用,或者是某个操作系统,而SyncML的目的就是要提供一个开放标准。目前,该标准已经得到Nokia、Symbian,Motorola,Sony Ericsson、Siemens AG等公司的产品的支持。
手机通讯录的同步和备份是SyncML协议的最主要应用,SyncML服务器端和客户端数据传输基于下层的网路传输协议。如obex,wsp,http等。增值业务提供商也已经提供基于SyncML协议的同步服务,可以让手机用户通过GPRS网络上传或下载通讯录数据,避免手机丢失或更更换手机时遗失重要通讯录数据的麻烦。从SyncML 1.2起,协议开始支持对电子邮件,目录和文件进行同步。
SyncML协议的架构
SyncML的七种同步模式具体的协议信息,可以参考OMA组织(Open Mobile Alliance)的详细定义:http://www.openmobilealliance.org/tech/affiliates/syncml/syncmlindex.html。
ActiveSync是微软自己的一份协议,主要用在Windows Mobile上使用。而iPhone也是支持ActiveSync协议的。所以可以使用上述的协议来同步WM和iPhone的手机。定义在此就不翻译了,有心想了解的可以看下:
ActiveSync is a data synchronization program developed by Microsoft for use with its Microsoft Windows line of operating systems. Originally released under the name “Handheld PC Explorer” in 1996, it provides users of Microsoft Windows a way to transport documents, calendars, contact lists and email between their desktop computer and a mobile device, such as a Handheld PC, mobile phone, or any other portable devices that support the ActiveSync protocol. ActiveSync is available as a free download from Microsoft’s web site.
Activesync uses ActiveSync Exchange, a proprietary protocol, requiring other vendors to license the protocol to achieve compatibility.[1]
ActiveSync also refers to a push messaging component first included with Microsoft Exchange Server 2003.
可以参考:http://www.microsoft.com/exchange/evaluation/features/owa_mobile.mspx。
-
Windows 7 beta 试用手记
过年这几天,闲着没事,加之vista上的卡巴斯基试用版正好过期,所以装上了 windows 7 试用了一下。感觉还真是挺不错的,贴心了很多,待一一细说之。
首先是下载。windows 7 目前还是可以下载试用的。可以登陆官方网页:http://www.microsoft.com/windows/windows-7/,下面有一个链接“ Try the Beta ”,可以从这里下载原始的ISO文件,将其刻成DVD后便可以安装。在下载前,用自己的live帐号登陆一下,就可以申请到一个测试用的序列号。安装完windows7以后选择自动激活即可。这个序列号需要记录一下。

目前为止,win7还只是支持英语、德语、日语等等一些语言,不支持中文。
安装过程和vista没什么两样,只是需要的信息更少了。只要选择好安装的位置信息即可。
安装完成后,遇到一点小麻烦,就是我的显卡(Nvidia GeForce Go 7400)并不马上支持。Aero特效并没有打开,就连分辨率也不够大,只支持到了1024*768。不过激活后,通过Windows Update,我得到了一个Nvidia PreRelease版的驱动。安装后分辨率等等一系列问题解决了。不过Aero特效依然没有打开。但驱动程序已经装好了啊。难道我的显卡不支持Aero?
从网上搜了一下,有个方法可以强制打开Aero,摘录如下:
Aero特效是Windows Vista的特色之一,作为后继者的Windows 7自然也不会少。使用了Windows 7的朋友都知道Win7中的Aero诊断和修复工具可以轻松发现和解决有关透明及其他视觉特效方面的问题。但如果某些情况下此工具也无能为力的话,在Vista下强制开启Aero效果的小技巧在Windows 7下依然有效。
- step1 Win+R运行“Regedit”打开注册表编辑器;
- step2 定位到HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM;如果没有,则新建一个并命名为DWM;
- step3 在右边的空白面板中右击-新建DWORD (32-位值),命名为UseMachineCheck并将其值设置为0;
- step4 在右边的空白面板中右击-新建DWORD (32-位值),命名为Blur并将其值设置为0;
- step5 在右边的空白面板中右击-新建DWORD (32-位值),命名为Animations并将其值设置为0。
- step6 运行Services.msc找到Desktop Window Manager Session Manager服务,重启之。或者运行下列命令:
net stop uxsms
net start uxsms - step7 试试打开aero。如有必要,重启一下系统。
此技巧对安装在虚拟机中的Windows 7同样有效,尤其是在Virtual PC 2007上。
运行了,依然没有效果。后来歪打正着,我重新注册了一个用户,并赋予Administrators权限,然后登陆进去发现,Aero有了,呵呵。
Win7和Vista在Aero不一样的地方是Win7加入了一个Aero Shake的特效。也就是摇一摇当前的窗口,背景后面其他的窗口都最小化了,这点还是蛮贴心的。
还有一些地方我觉得设计得很好。比如任务栏,增大了图标,将任务栏和快速启动栏二合为一:一些常用的程序可以通过运行后右键单击后选择pin命令,将其固定到任务栏上。

如果已经固定在任务栏上,而程序没有启动,就会是下面的样子。注意Firefox图标。

这个功能确实不错,快速启动栏不需要了,呵呵。
还有一个功能不得不提的,就是Library。在用户自己的账户下面,有个Library目录,里面包含Documents、Music等等。而很多时候,我们的文档并不是只存在My Documents一个目录下,而是遍布很多地方。而这个Library就做到了将所有文档所在的目录汇总到一起,便于我们进行操作。我们进入Library里面Documents的属性中,可以看到如下的画面:

这样,就可以将多个目录指定成Documents Storage。当我进入Documents目录中,其实就是打开了多个目录,我们可以对这几个目录中的文件进行快速浏览了。非常贴心。
还有一些程序,如画图、写字板,都变成了像Office2007类似的Tab式。
还有一点不得不提,那就是显示桌面这个功能。在Vista以及以前的时代,是作为一个快捷方式存在的。而在Win7中,可以发现屏幕的右下角(时钟右面),有一个很小的条。单击这里,就可以显示桌面了,呵呵。

Win7还是很值得期待的!推荐大家试用!
另外,在杀毒软件方面,很多还是不支持Win7的。不过我们可以试用一下卡巴斯基针对Win7的Technical Preview版:http://www.kaspersky.com/windows7。对于像我一样的卡巴迷来说,这个是必不可少的。而且可以免费使用三个月,何乐而不为呢?
最后还有一点要注意,就是装上英文版Win7以后,会发现很多中文软件字体显示不正常。这是由于System Locale没有设置好的原因。依次找到Control Panel –> Clock, Language, and Region –> Regional and Language Options –> Administrative –> Change System Locale,将系统的Locale改变成Chinese PRC就OK啦。
-
Program: 多个相机的照片合并
今天从广西回来了。为了合并路途上三个照相机(我的、大姑父的和摄像机照的)的照片,将它们按照时间顺序排列,便于今后的剪辑,所以编写了如下的小程序。简陋得很,但是完成任务了,呵呵。
基本思想是先找出三个照相机的时间差,然后统一他们的时间。接着按照自己定义好的格式进行重命名。一共两千多张的照片(5个多G),五分钟内复制完毕。搞定。
程序使用C#写的,这个速度快呀。其实应该用Python,但考虑到还不是特别熟悉。要速度嘛,就没有质量了。
如果您也需要进行文件批量的有条件性重命名,可以考虑看看我的这个程序。^_^
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;namespace FileRenamer
{
class Program
{
static void Main(string[] args)
{
DateTime dt1 = DateTime.Parse(“2008–11-10 10:35:38″);
DateTime dt2 = DateTime.Parse(“2008–11-10 10:32:34″);
DateTime dt3 = DateTime.Parse(“2008–11-10 11:28:58″);
TimeSpan ts1 = dt2.Subtract(dt1);
TimeSpan ts2 = dt3.Subtract(dt1);string path = “C:\\Documents and Settings\\Administrator\\桌面\\广西照片”;
string filesave = “D:\\1.txt”;
DirectoryInfo dirinfo = new DirectoryInfo(path);
SortedList<string, string> sl = new SortedList<string, string>();
foreach (DirectoryInfo dir in dirinfo.GetDirectories())
{
File.AppendAllText(filesave,dir.Name + “\r\n”);
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
DateTime truetime = DateTime.MinValue;
if (dir.Name.Contains(“主卡”)) { truetime = file.LastWriteTime; }
else if (dir.Name.Contains(“大姑父”)) { truetime = file.LastWriteTime.Subtract(ts1); }
else if (dir.Name.Contains(“摄像机”)) { truetime = file.LastWriteTime.Subtract(ts2); }
else { }
File.AppendAllText(filesave, file.Name + “\t” + file.LastWriteTime.ToString() + “\t” + truetime.ToString() + “\t” + dir.Name + “\r\n”);
sl.Add(truetime.Ticks.ToString() + ” — ” + dir.Name + ” — ” + file.Name, file.FullName + “|” + dir.Name);
}
File.AppendAllText(filesave, “\r\n\r\n”);
}
File.AppendAllText(filesave, “\r\n\r\n”);int n = 1;
foreach (string content in sl.Keys)
{
string[] str = sl[content].Split(new char[] { ‘|’ });
string origin_filename = str[0];
string counter = n.ToString();
string plus = “”;
switch (counter.Length)
{
case 1:
plus = “000”;
break;
case 2:
plus = “00”;
break;
case 3:
plus = “0”;
break;
}
string new_filename = plus + counter + ” — ” + str[1] + “.jpg”;
Console.WriteLine(origin_filename + “\t” + new_filename);
File.Copy(origin_filename, “D:\\photos\\” + new_filename);
n++;
}
}
}
} -
浅谈ASP.net中使用WebServices的安全性保证
在开发一些在线业务的时候,对于一些客户端程序,我们需要将数据存储在网络上,即使用传统的C/S结构。随着WebServices的出现,我们可以用很低的成本在成熟的网络上架构这种结构,不必单独去购买数据中心服务器了。
实现的方法主要是:购建一个支持asp.net 2.0以上版本的虚拟服务器,然后在上面部署WebServices环境,通过调用asmx的方法对后台的数据库(MySQL、MS-SQL、Access等)进行数据库访问。而在客户端方面,我们就可以使用窗体了而不是Browser。通过调用后台的Services完成数据的交换。
数据交换容易,搭建WebServices也不是一件难事。但是难点在于,我们如何在这种基于HTTP下(没有SSL和证书)、透明的WebServices下,来保证Services的安全性?现在世面上的虚拟主机空间都不支持https。如何快速开发一个小DataServices呢?当然,我们第一步的考虑肯定是在每一个Service里面加上两个额外的参数:用户名和密码。这个可行,但是复杂度增加不少;后来我也考虑过使用Session来做。但是这种方法,只能适合在浏览器上的测试;而对于实际的客户端程序来讲,无疑没有什么作用。
通过学习,我掌握了一种在SOAP头中增加身份信息描述的方法;在客户端,只需要保存一个相关的身份验证对象,每次调用Services的时候就可以不必去考虑身份的问题了。Stub端会将身份信息绑定到SOAP Head中。
每次访问服务器,便会触发一个HttpModule来对身份进行验证。在Services体中,我们只需要判断是否已经通过身份验证即可。
首先我们要构造这个HttpModule。这是一个继承了IHttpModule接口的类,用来截获来自客户端的XML文件,并对其SOAP Head进行解析,找出我们需要的用户名和密码的信息,并交由WebServiceAuthenticationEventHandler所触发的事件来去判断身份。
using System; using System.Web; using System.IO; using System.Xml; using System.Xml.XPath; using System.Text; using System.Web.Services.Protocols; namespace JingZhiWebService { public sealed class WebServiceAuthenticationModule : IHttpModule { private WebServiceAuthenticationEventHandler _eventHandler = null; public event WebServiceAuthenticationEventHandler Authenticate { add { _eventHandler += value; } remove { _eventHandler -= value; } } public void Dispose() { } public void Init(HttpApplication app) { app.AuthenticateRequest += new EventHandler(this.OnEnter); } private void OnAuthenticate(WebServiceAuthenticationEvent e) { if (_eventHandler == null) return; _eventHandler(this, e); if (e.User != null) e.Context.User = e.Principal; } public string ModuleName { get { return "WebServiceAuthentication"; } } void OnEnter(Object source, EventArgs eventArgs) { HttpApplication app = (HttpApplication)source; HttpContext context = app.Context; Stream HttpStream = context.Request.InputStream; // Save the current position of stream. long posStream = HttpStream.Position; // If the request contains an HTTP_SOAPACTION // header, look at this message. if (context.Request.ServerVariables["HTTP_SOAPACTION"] == null) return; // Load the body of the HTTP message // into an XML document. XmlDocument dom = new XmlDocument(); string soapUser; string soapPassword; try { dom.Load(HttpStream); // Reset the stream position. HttpStream.Position = posStream; // Bind to the Authentication header. soapUser = dom.GetElementsByTagName("User").Item(0).InnerText; soapPassword = dom.GetElementsByTagName("Password").Item(0).InnerText; } catch (Exception e) { // Reset the position of stream. HttpStream.Position = posStream; // Throw a SOAP exception. XmlQualifiedName name = new XmlQualifiedName("Load"); SoapException soapException = new SoapException( "Unable to read SOAP request", name, e); throw soapException; } // Raise the custom global.asax event. OnAuthenticate(new WebServiceAuthenticationEvent (context, soapUser, soapPassword)); return; } } }接着是身份验证的事件。这个事件继承了EventArgs,并增加了相应的用户名密码字段。
using System; using System.Web; using System.Security.Principal; namespace JingZhiWebService { public delegate void WebServiceAuthenticationEventHandler(Object sender, WebServiceAuthenticationEvent e); public class WebServiceAuthenticationEvent : EventArgs { private System.Security.Principal.IPrincipal _IPrincipalUser; private HttpContext _Context; private string _User; private string _Password; public WebServiceAuthenticationEvent(HttpContext context) { _Context = context; } public WebServiceAuthenticationEvent(HttpContext context, string user, string password) { _Context = context; _User = user; _Password = password; } public HttpContext Context { get { return _Context; } } public IPrincipal Principal { get { return _IPrincipalUser; } set { _IPrincipalUser = value; } } public void Authenticate() { GenericIdentity i = new GenericIdentity(User); this.Principal = new GenericPrincipal(i, new String[0]); } public void Authenticate(string[] roles) { GenericIdentity i = new GenericIdentity(User); this.Principal = new GenericPrincipal(i, roles); } public string User { get { return _User; } set { _User = value; } } public string Password { get { return _Password; } set { _Password = value; } } public bool HasCredentials { get { if ((_User == null) || (_Password == null)) return false; return true; } } } }我们可以看到,通过触发这个事件,就可以对用户身份进行确认了,进而触发Authenticate()方法,来对身份进行登记。
当然,我们还需要一个属性框架来存放这个身份。这个类当然必须需要可以序列化(Serializable)来实现数据的传递。
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.Services.Protocols; namespace JingZhiWebService { public class WebServiceAuthentication : SoapHeader { public string User; public string Password; public WebServiceAuthentication() { } public WebServiceAuthentication(string user, string password) { this.User = user; this.Password = password; } } }为了能够让这个模块正常工作,我们必须要在Web.Config里面声明它。将下述代码放到system.web下:
<httpModules>
<add type=“JingZhiWebService.WebServiceAuthenticationModule” name=“WebServiceAuthentication”/>
</httpModules>最后,在Global.asax中来触发这个身份验证的事件。需要说明的是,事件绑定的时间不应该处于Application_Start时。那个时候Module还没有启动,所以在这个时候,我们无法取得到我们的Module运行时对象,事件的绑定也就无从谈起。经过测试,放在Application_BeginRequest是个不错的选择。
protected void Application_BeginRequest(object sender, EventArgs e) { WebServiceAuthenticationModule wam = (WebServiceAuthenticationModule)this.Modules["WebServiceAuthentication"]; wam.Authenticate += new WebServiceAuthenticationEventHandler(wam_Authenticate); } /// /// User Validation Process /// /// /// void wam_Authenticate(object sender, WebServiceAuthenticationEvent e) { if (e.User == "putyourusernamehere" && e.Password == "putyourpasswordhere") { e.Authenticate(new string[]{"user"}); } }通过上述的身份验证,我们就可以使用带有身份识别的Services了。
来看个例子如何使用身份识别。
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; namespace JingZhiWebService { [WebService(Namespace = "http://www.techwork.cn/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] public class DataService : System.Web.Services.WebService { public WebServiceAuthentication authentication; private string UserRole = "user"; [WebMethod] [SoapHeader("authentication")] public bool UserAuthentication() { if (User.IsInRole(UserRole)) { return true; } return false; } } }那么客户端呢?
public static bool Authentication(string username, string password) { JingZhiDataService.WebServiceAuthentication auth = new JingZhi.JingZhiDataService.WebServiceAuthentication(); auth.User = username; auth.Password = password; ds.WebServiceAuthenticationValue = auth; return ds.UserAuthentication(); }我们可以在类中保存这个ds对象。每次调用WebServices的时候,直接用已经进行过身份认证的,绑定了user和password的DataService对象来调用服务。至此,我们完成了身份验证与Services的绑定。身份的问题不再是一个烫手的山芋那般不好处理了。
这种方式,对于一般的要求不是太高的个人和小型企业的业务,是个不错的选择。
最后我们再来看看实际的SOAP包是什么样子的吧。红色的部分,则是我们通过努力实现的身份验证。可以看到,我们已经将他们放入了SOAP Head中。
Request部分:
<?xml version=“1.0″ encoding=“utf-8″?>
<soap12:Envelope xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:soap12=“http://www.w3.org/2003/05/soap-envelope”>
<soap12:Header>
<WebServiceAuthentication xmlns=“http://www.techwork.cn/”>
<User>string</User>
<Password>string</Password>
</WebServiceAuthentication>
</soap12:Header>
<soap12:Body>
<UserAuthentication xmlns=“http://www.techwork.cn/” />
</soap12:Body></soap12:Envelope>
Response部分:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length<?xml version=“1.0″ encoding=“utf-8″?>
<soap12:Envelope xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:soap12=“http://www.w3.org/2003/05/soap-envelope”>
<soap12:Body>
<UserAuthenticationResponse xmlns=“http://www.techwork.cn/”>
<UserAuthenticationResult>boolean</UserAuthenticationResult>
</UserAuthenticationResponse>
</soap12:Body>
</soap12:Envelope>综上,我们至此完成了用户名和密码的传输工作。
还有一个问题:http协议是明文传输的,那么我怎样保证用户名密码不被截获呢?答案是:不可能。对于我们来讲,还可以做的,是将我们的用户名密码加密。对于用户名,可以使用一种可回溯的明文加密方法;对于密码,建议直接选择MD5或者SHA1吧。System.Security.Cryptography命名空间下有MD5和SHA1的加密方法。这个到哪都能照出来,我也搜了一下,可以直接使用了:
当然,我们也可以使用Web.Config里面的Form认证方式。使用FormsAuthentication.HashPasswordForStoringInConfigFile()函数可以判断。这里就不再赘述了。
以高效率、低成本部署拥有足够安全性和灵活性的网络应用程序,是一种不错的选择。
Paul’s Online Services
Dynamic Tag Cloud
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.
Recent Posts
- AIX Storage Learning 1
- 春节快乐! Happy Spring Festival!
- Sun is to the end of life
- 为cos-html-cache插件增加页面(Page)、标签(Tag)和分类(Category)的静态化功能
- How to configure Subversion in OpenSolaris
- 转载:IIS FastCGI PHP 环境下搭建 WordPress
- 在OpenSolaris下动态绑定域名
- Goodbye 2009, Hello 2010
- This Is It
- A Morse Code Exchanger
Recent Comments
- 新视界 (New Vision) » 在OpenSolaris下动态绑定域名 on 使用ZFS打造家庭廉价数据中心
- paul on Wordpress数据库转移网址变换的方法
- 知识 on Wordpress数据库转移网址变换的方法
- WP Super Cache V0.98 and IIS7 « Anders Heie on Speed up your WordPress Blog on IIS 7 by using WP-Super-Cache
- 博沈 on This Is It
- paul on 使用ZFS打造家庭廉价数据中心
- Anonymous on OpenSolaris 上的 Samba 服务器
- Anonymous on 使用ZFS打造家庭廉价数据中心
- Anonymous on OpenSolaris 上的 Samba 服务器
- Paul on 十年前和十年后的我们