上兵伐谋

“上兵伐谋,其次伐交,其次伐兵,其下攻城”。
posts - 35, comments - 32, trackbacks - 0, articles - 3

2007年11月21日

Linux的Grub引导Solaris 10,只需在/etc/grub.conf加入solaris10的菜单

    title Solaris 10
    rootnoverify  (hd0,2)
    chainloader (hd0,2)+1
    makeactive
    boot

不过现在Solaris也开始使用Grub作引导程序了,而且Solaris中的Grub是修改过的,功能更加复杂一些。不妨使用Solaris的Grub来引导Windows、Linux、FreeBSD等等,配置也基本上是一样的。

posted @ 2007-11-21 23:09 Kylin Bell 阅读(563) | 评论 (0)编辑 收藏

2007年2月7日

当你希望从ashx或HttpHandler里访问你的Session时,你必须实现IReadOnlySessionState接口.

using
System;
using
System.Web;
using
System.Web.SessionState;

public class
DownloadHandler : IHttpHandler, IReadOnlySessionState
{
   
public bool IsReusable{get return true;}}

   
   
public void ProcessRequest(HttpContext ctx)
   
{
       ctx.Response.Write(ctx.Session["UserName"]);
    }

}

posted @ 2007-02-07 21:26 Kylin Bell 阅读(762) | 评论 (0)编辑 收藏

2006年5月13日

很多人在Linux下用cedega玩游戏会遇到error=21的错误,比如
/usr/lib/transgaming_cedega//winex/bin/wine: can't exec 'nfs.exe': error=21

很多邮件组里有人建议说要修改内核参数,大致方法就是向/proc下的某个文件里输出一个什么标志,具体我也记不清了。这种方法太复杂,而且,没有效果。

事实上,TransGaming官方的文档里已经给出了关于error=21的原因和解决办法:

Exec (error = 21)
-----------------
Some distributions' versions of mount now run with the noexec option unless
otherwise specified. Running games from a partition mounted with noexec can
cause an error = 21 message.

To fix this issue, edit /etc/fstab and modify the partition line by
changing 'noexec' to 'exec' in the mount options.

For example, change:
/dev/hda1 / ext3 errors=remount-ro,no-exec,defaults 0 1
to:
/dev/hda1 / ext3 errors=remount-ro,exec,defaults 0 1

If neither "exec" nor "no-exec" appears in the line it is recommended that you
add "exec" to ensure that the partition can be used by Cedega.

To remount the partition run:
$ mount -o remount /

因此,关于error=21最简单的解决办法就是,把游戏的文件拷贝到具有可执行权限的分区。彻底点的办法是,修改fstab,在游戏文件所在分区的挂载参数里加上exec。OK,搞定!
Enjoy your game!

posted @ 2006-05-13 18:01 Kylin Bell 阅读(1027) | 评论 (0)编辑 收藏

2006年5月6日

网上到处有人反映说在KDE下GTK程序的字体都非常难看,太小了。而且相反地,在GNOME下Qt的程序字体往往又显得太大。有很多人给出了相应的解决办法。比如手动修改gtkrc文件,或者安装gtk-theme-switch之类的工具等等。我以为这些方法虽然有效,但却是治标不治本的。GTK程序和Qt程序之间的这种差异,究其原因是由GNOME和KDE默认的屏幕解析度(DPI)不一样造成的。因此对于这个问题,我有一个相当简单的解决办法:

修改/etc/X11/Xresources文件,在最后一行加上如下代码:
   Xft.dpi:96
也就是将屏幕的全局DPI设置为96(和Windows默认值一样),重新启动X。

这时候所有程序的字体都可以设为9号字,应该可以得到相当好的显示效果了。GTK程序和Qt程序也不会再有字体大小的差异了。

posted @ 2006-05-06 13:22 Kylin Bell 阅读(2317) | 评论 (0)编辑 收藏

2006年4月29日

Microsoft .NET Framework 中没有任何内置功能使您可以从一个 ASP.NET 页上载多个文件。然而,只需要少量工作,您就可以像过去使用 .NET 1.x 那样完成此任务。

方法是将 System.IO 类导入到 ASP.NET 页中,然后使用 HttpFileCollection 类捕获通过 Request 对象发送来的所有文件。该方法使您可以从一个页面上载所需数量的文件。

				
						
protected void Button1_Click(object sender, EventArgs e)
{
   string filepath = "C:\\Uploads";
   HttpFileCollection uploadedFiles = Request.Files;
    
   for (int i = 0; i < uploadedFiles.Count; i++)
   {    
      HttpPostedFile userPostedFile = uploadedFiles[i];
    
      try
      {    
         if (userPostedFile.ContentLength > 0 )
         {
            Label1.Text += "File #" + (i+1) + "";
            Label1.Text += "File Content Type: " + userPostedFile.ContentType + "";
            Label1.Text += "File Size: " + userPostedFile.ContentLength + "kb";
            Label1.Text += "File Name: " + userPostedFile.FileName + "";
    
            userPostedFile.SaveAs(filepath + "\\" + System.IO.Path.GetFileName(userPostedFile.FileName));
    
            Label1.Text += "Location where saved: " + 
               filepath + "\\" + 
               System.IO.Path.GetFileName(userPostedFile.FileName) + "";
         }    
      } 
      catch (Exception Ex)
      {    
         Label1.Text += "Error: " + Ex.Message;    
      }    
   }    
}

				
		

在网页上动态生成控件的方法如下:

      <SCRIPT language=JavaScript>
             function addFile() 
             { 
                    var str = '<INPUT type="file" size="50" NAME="File">' 
                    document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str) 
             } 
      </SCRIPT>
      <P id="MyFile"><INPUT type=file size=50 name=File></P>
      <INPUT onclick=addFile() type="button" value="增加">
      <asp:button id=UploadButton text="开始上传" runat="server"></asp:button>

posted @ 2006-04-29 19:46 Kylin Bell 阅读(412) | 评论 (0)编辑 收藏

使用验证控件限制上载到服务器的文件类型:

使用 ASP.NET 免费提供的 ASP.NET 验证控件。这些控件使您可以对正在上载的文件进行正则表达式检查,看看文件的扩展名是否在允许上载的扩展名之列。因为该方法强制在客户端进行检查,所以对于允许在客户端使用验证控件的浏览器而言,这是一个理想的选择;如果签名不是您允许的签名,则该文件不能上载到服务器。

				
						
<ASP:FileUpload ID="FileUpload1" runat="server" /><br/>
<br/>
<ASP:Button ID="Button1" runat="server" OnClick="Button1_Click" 
 Text="Upload File" /> <br/>
<br/>
<ASP:Label ID="Label1" runat="server"></ASP:Label>
<ASP:RegularExpressionValidator 
 id="RegularExpressionValidator1" runat="server" 
 ErrorMessage="Only mp3, m3u or mpeg files are allowed!" 
 ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))
    +(.mp3|.MP3|.mpeg|.MPEG|.m3u|.M3U)$" 
 ControlToValidate="FileUpload1"></ASP:RegularExpressionValidator>
<br/>
<ASP:RequiredFieldValidator 
 id="RequiredFieldValidator1" runat="server" 
 ErrorMessage="This is a required field!" 
 ControlToValidate="FileUpload1"></ASP:RequiredFieldValidator>

				
		

增加服务器端文件类型验证:

通过在 System.IO.Path 命名空间中使用 GetExtension 方法,基本可以执行与客户端相同的操作。对于最终用户而言,只需将文件扩展名更改为可以生效的名称并将更改的文件上载到宿主服务器的功能不会有所影响,注意到这一点非常重要。

				
						
protected void Button1_Click(object sender, EventArgs e)
    {

        if (FileUpload1.HasFile)
        {
            string fileExt = 
               System.IO.Path.GetExtension(FileUpload1.FileName);

            if (fileExt == ".mp3")
            {
                try
                {
                    FileUpload1.SaveAs("C:\\Uploads\\" + 
                       FileUpload1.FileName);
                    Label1.Text = "File name: " +
                        FileUpload1.PostedFile.FileName + "" +
                        FileUpload1.PostedFile.ContentLength + " kb" +
                        "Content type: " +
                        FileUpload1.PostedFile.ContentType;
                }
                catch (Exception ex)
                {
                    Label1.Text = "ERROR: " + ex.Message.ToString();
                }
            }
            else
            {
                Label1.Text = "Only .mp3 files allowed!";
            }
        }
        else
        {
            Label1.Text = "You have not specified a file.";
        }
    }

				
		

posted @ 2006-04-29 19:34 Kylin Bell 阅读(519) | 评论 (0)编辑 收藏

可以使用该技术上载的文件的大小存在限制。默认情况下,使用 FileUpload 控件上载到服务器的文件最大为4MB左右。不能上载超过该限制的任何内容。

然而,关于 .NET 的重要一点是,它通常会提供一种规避限制的方法。您通常可以更改正在使用的默认设置。要更改大小限制,可以在 web.config.comments 文件(可以在 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 的 ASP.NET 2.0 配置文件夹中找到)或应用程序的 web.config 文件中进行一些改动。

在web.config.comments 文件中,查找一个名为 <executionTimeout> 的节点,如下所示:

				
<httpRuntime 
 executionTimeout="110" 
 maxRequestLength="4096" 
 requestLengthDiskThreshold="80" 
 useFullyQualifiedRedirectUrl="false" 
 minFreeThreads="8" 
 minLocalRequestFreeThreads="4" 
 appRequestQueueLimit="5000" 
 enableKernelOutputCache="true" 
 enableVersionHeader="true" 
 requireRootedSaveASPath="true" 
 enable="true" 
 shutdownTimeout="90" 
 delayNotificationTimeout="5" 
 waitChangeNotification="0" 
 maxWaitChangeNotification="0" 
 enableHeaderChecking="true" 
 sendCacheControlHeader="true" 
 apartmentThreading="false" />

		

在这个节点上进行了许多操作,但负责上载文件大小的设置是 maxRequestLength 属性。默认情况下,该属性设置为 4096 千字节 (KB)。只需更改此值,就可以增加可上载到服务器的文件大小。如果想要允许将 10 兆字节 (MB) 的文件上载到服务器,则将 maxRequestLength 值设置为 11264,这意味着该应用程序允许将最大为 11000 KB 的文件上载到服务器。

在 web.config.comments 文件中进行此改动会将该设置应用于服务器上的所有应用程序。如果要将该设置仅应用于正在使用的应用程序,则将该节点应用于应用程序的 web.config 文件,覆盖 web.config.comments 文件中的所有设置。请确保该节点位于配置文件中的 <system.web> 节点之间。

与上载文件大小限制有关的另一个设置是赋给 <httpRuntime> 节点中 executionTimeout 属性的值。

赋给 executionTimeout 属性的值是 ASP.NET 关闭前允许发生的上载秒数。如果要允许将更大的文件上载到服务器,则还要增加该值和 maxRequestLength 值。

posted @ 2006-04-29 19:20 Kylin Bell 阅读(507) | 评论 (0)编辑 收藏

在 ASP.NET 1.0 中使用File Field控件时,必须采取一些额外的步骤才能使一切有条不紊地正常运行。例如,需要将 enctype="multipart/form-data" 添加到页面的 <form> 元素中。ASP.NET 2.0 中提供的新 FileUpload 服务器控件使将文件上载到宿主服务器的过程尽可能的简单。

最后,允许对HTML <input type="file">标记进行编程。该标记用于与 HTML 窗体中的文件数据一起使用。

范例代码:

<%@ Page Language="C#" %>
<script runat="server">
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
            try
            {
                FileUpload1.SaveAs("C:\\Uploads\\" +
                     FileUpload1.FileName);
                Label1.Text = "File name: " +
                     FileUpload1.PostedFile.FileName + "<br>" +
                     FileUpload1.PostedFile.ContentLength + " kb<br>" +
                     "Content type: " +
                     FileUpload1.PostedFile.ContentType;
            }
            catch (Exception ex)
            {
                Label1.Text = "ERROR: " + ex.Message.ToString();
            }
        else
        {
            Label1.Text = "You have not specified a file.";
        }
    }
</script>

<HTML xmlns="http://www.w3.org/1999/xHTML" >
<head runat="server">
    <title>Upload Files</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <ASP:FileUpload ID="FileUpload1" runat="server" /><br />
        <br />
        <ASP:Button ID="Button1" runat="server" OnClick="Button1_Click"
         Text="Upload File" /> <br />
        <br />
        <ASP:Label ID="Label1" runat="server"></ASP:Label></div>
    </form>
</body>
</HTML>



posted @ 2006-04-29 16:49 Kylin Bell 阅读(463) | 评论 (0)编辑 收藏

.NET Framework 2.0 中用 ConfigurationManager 代替了原来的 ConfigurationSettings。

读取配置的用法如下:
ConfigurationManager.AppSettings[”TheKey”];

如,读取数据库的配置。在 Web.config 中:
<connectionStrings>
       <add name=”ConnectionString1″ connectionString=”server=(loacl);database=northwind;uid=sa;password=xxxx;”/>
</connectionStrings>

在程序中如下读取:
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[”ConnectionString1″].ConnectionString);

同时 MSDN 中有如下说明:

使用 WebConfigurationManager 可以访问计算机和应用程序信息。

使用 WebConfigurationManager 是处理与Web应用程序有关的配置文件的首选方法;不推荐使用其他所有方法。对于客户端应用程序,建议使用 ConfigurationManager。

posted @ 2006-04-29 16:28 Kylin Bell 阅读(2118) | 评论 (0)编辑 收藏

2006年4月27日

SecureCRT可以使用linux下的zmodem协议来快速的传送文件,而且还使用非常方便。

你只要设置一下上传和下载的默认目录就行:
打开options-->session options-->file transfer,设置上传和下载的目录

剩下的你只要在用SecureCRT登陆linux终端的时候:
1)发送文件到客户端:
      
sz filename
zmodem接收可以自行启动.
2)从客户端上传文件到linux服务端,只要服务端执行:
      
rz
然后在 SecureCRT 里选文件发送,协议zmodem。

如果你以前一直使用ssh,而又没有对外开放ftp服务,你就可以直接使用这种方式来传输文件。

posted @ 2006-04-27 10:44 Kylin Bell 阅读(1428) | 评论 (0)编辑 收藏