StephenChan's Tech Space 潜心修炼

27Mar/102

ssh的使用

主要记录一下地址缩写和保持长连接,具体的使用和配置参数可以"man ssh"、"man ssh_config"了解得到。

服务器地址缩写

要登陆一台地址为endlesscode.com,用户名为stephenchan,连接的端口为9527的服务器,需运行以下命令:

ssh stephenchan@endlesscode.com -p 9527

每次都要打这么长的一句命令是件麻烦的事,不过ssh提供地址缩写的功能,可以直接"ssh myserver"就可以了,只要在ssh的配置文件(~/.ssh/config)中,添加以下内容:

Host myserver                          #缩写的地址,在命令行中使用ssh myserver登陆
HostName 192.168.23.202      #服务器的地址
Port 32200                              #ssh的端口
User stephenchan                    #use name
Protocol 2                                #协议版本,可选
ForwardAgent yes                    #自动调用登陆管理器,可选
Compression yes                      #压缩传输,可选

以上的配置是针对一个服务器登陆的配置,也可以在配置文件中以同样的形式配置多台服务器,彼此间不冲突。

Filed under: Tools Continue reading
27Mar/101

实模式切换到保护模式

代码是从于渊的书上抄过来的,不过书的注释简单得实在不行,加上汇编都差不多给回学校了,看了好几遍才把这些代码看透。看到虚拟机的屏幕上输出个"P"感觉不错 :) 。

从实模式到保护模式一般的过程为:

  • 建立起合适的全局描述符表。
  • 用lgdt加载GDTR,使GDTR指向GDT。
  • 打开A20地址线。PC及其兼容机的第20根地址线较特殊,计算机系统中一般安排一个“门”控制该地址线是否有效。为了访问地址在1M以上的存储单元,应先打开控制地址线A20的“门”。这种设置与实方式下只使用最的1M字节存储空间有关,与处理器是否工作在实方式和保护方式无关,即使在关闭地址线A20时,也可进行保护方式。
  • 置cr0的PE位。PE位为1表示运行在保护模式,为0表示运行在实方式。
  • 跳转,进入保护模式。
27Mar/100

select、poll和epoll

对select、poll、epoll了解得不多,下面是从《构建高性能Web站点》摘录下来的介绍,等以后真正接触到select、poll和epoll方面的开发再详细写一下使用上的区别。

select

select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续的读写操作。

select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一。

select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,不过可以通过修改宏定义甚至重新编译内核的方式提升这一限制。

另外,select()所维护的存储大量文件描述符的数据结构,随着文件描述符数量的增大,其复制的开销也线性增长。同时,由于网络响应时间的延迟使得大量TCP连接处于非活跃状态,但调用select()会对所有socket进行一次线性扫描,所以这也浪费了一定的开销。

Filed under: Web Continue reading
26Mar/100

转义和编码

一、HTML转义

转义字符串(Escape Sequence)也称字符实体(Character Entity)。在HTML中,定义转义字符串的原因有两个:第一个原因是像“<”和“>”这类符号已经用来表示HTML标签,因此就不能直接当作文本中的符号来使用。为了在HTML文档中使用这些符号,就需要定义它的转义字符串。当解释程序遇到这类字符串时就把它解释为真实的字符。在输入转 义字符串时,要严格遵守字母大小写的规则。第二个原因是,有些字符在ASCII字符集中没有定义,因此需要使用转义字符串来表示。

转义字符串(Escape Sequence),即字符实体(Character Entity)分成三部分:第一部分是一个&符号,英文叫ampersand;第二部分是实体(Entity)名字或者是#加上实体(Entity)编号;第三部分是一个分号。

比如,要显示小于号(<),就可以写 &lt; 或者 &#60; 。

用实体(Entity)名字的好处是比较好理解,一看lt,大概就猜出是less than的意思,但是其劣势在于并不是所有的浏览器都支持最新的Entity名字。而实体(Entity)编号,各种浏览器都能处理。

提示:实体名称(Entity)是区分大小写的。

备注:同一个符号,可以用“实体名称”和“实体编号”两种方式引用,“实体名称”的优势在于便于记忆,但不能保证所有的浏览器都能顺利识别它,而“实体编号”则没有这种担忧,但它实在不方便记忆。

Filed under: Web Continue reading
26Mar/100

SWFUpload浅析

一、简介和示例

SWFUpload is a small JavaScript/Flash library to get the best of both worlds. It features the great upload capabilities of Flash and the accessibility and ease of HTML/CSS。

官方站点:http://www.swfupload.org/

简单来说,swfupload这个上传库是可以显示上传进度以及上传速度等上传信息。一般实现这种上传体验有2种方式,一种是异步上传,在服务器端边接收数据边往session写入接收的字节数和进度数据,然后客户端轮询这个记录在session的进度数据并回显到页面。第二种方式就是采用flash来上传,也就是swfupload所采用的方式,在发送过程中将发送的相关状态数据回传到js的函数中处理。

下面是一个单个文件上传的使用示例,简单的创建一个SWFUpload对象,并传入相关的事件处理和参数就可以了:

        var swfu;
        window.onload = function () {
            swfu = new SWFUpload({
                // Backend settings
                upload_url: "/upload",
                file_post_name: "image",
                // Flash file settings
                file_size_limit : "10 MB",
                file_types : "*.*",         // or you could use something like: "*.doc;*.wpd;*.pdf",
                file_types_description : "All Files",
                file_upload_limit : "0",
                file_queue_limit : "5",
                // Event handler settings
                swfupload_loaded_handler : swfUploadLoaded,

                file_dialog_start_handler: fileDialogStart,
                file_queued_handler : fileQueued,
                file_queue_error_handler : fileQueueError,
                file_dialog_complete_handler : fileDialogComplete,

                //upload_start_handler : uploadStart,   // I could do some client/JavaScript validation here, but I don't need to.
                upload_progress_handler : uploadProgress,
                upload_error_handler : uploadError,
                upload_success_handler : uploadSuccess,
                upload_complete_handler : uploadComplete,
                // Button Settings
                button_image_url : "/static/images/XPButtonUploadText_61x22.png",
                button_placeholder_id : "spanButtonPlaceholder", //flash元素要替代的html元素
                button_width: 61,
                button_height: 22,

                // Flash Settings
                flash_url : "/static/swf/swfupload.swf",
                custom_settings : {
                    progress_target : "fsUploadProgress",
                    upload_successful : false
                },
}
Filed under: Web Continue reading
Page 1 of 41234