<?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
<channel>
	<title>龙睿·LoRui</title>
	<link>http://www.lorui.com</link>
	<description>欲速则不达</description>
	<lastBuildDate>Fri, 18 Nov 2011 02:16:19 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	<!-- generator="WordPress/3.2.1" -->

	<item>
		<title>Gomez PEER终于由Pending变成了Active</title>
		<description><![CDATA[Gomez PEER注册有有两三年了吧，挂了一年都没有激活一直是Pending，所以就没动它了。前天收到一封Gomez PEER的邮件，说有一次大规模的激活机会，于是又重新挂了。挂了两天之后，今天一登录，竟然Active，泪流满面啊，真不容易！]]></description>
		<link>http://www.lorui.com/gomez-peer-pending-to-active.html</link>
			</item>
	<item>
		<title>Windows 7开放80端口以便让局域网用户访问Apache Web站点</title>
		<description><![CDATA[即便防火墙允许了Apache，但局域网用户还是无法访问Apache站点，通过以下设置可以解决此问题。为了方便使用英文系统的朋友，LoRui将中英文都写上了。 步骤如下： 1、转到“控制面板”/Control Panel，双击“Windows防火墙”/Windows Firewall 2、单击左边的“高级设置”/Advanced Settings 3、在左边选择“入站规则”/Inbound Rules 4、在右边选择“新建规则”/New Rule 5、在“新建入站规则向导”/New Inbound Rule Wizard中选择“端口”/Port，点击“下一步”/Next 6、选择“TCP”并在“特定本地端口”/Specific local ports输入“80”（或者任何你想要开放的端口），点击“下一步”/Next 7、选择“允许连接”/Allow the connection，点击“下一步”/Next 8、选择你要应用该规则的网络位置，如果你不能确定哪个位置，可以选择全部，然后点击“下一步”/Next 9、给这个规则取个名字，还可以输入描述（可选）]]></description>
		<link>http://www.lorui.com/windows-7-open-port-80-lan-apache-web-access.html</link>
			</item>
	<item>
		<title>PHP实现“属性”</title>
		<description><![CDATA[一直觉得MS开发语言系列的对象“属性”很好，比起其他语言的getXXX和setXXX优雅的多。其实PHP是可以实现这个的——虽然大家在PHP里还是习惯了get/setXXX。PHP至少有两种方法实现： 1、通过默认参数。 class User { private $_name; public function Name($value = NULL) { if($value === NULL) { //get return $this->_name; } else { //set $this->_name = $value; } } } $usr = new User; $usr->Name = "龙睿"; echo $usr->Name; 2、通过魔法函数。 class Document { private $_text; public function __get($name) { $method = "get$name"; return $this->$method(); } [...]]]></description>
		<link>http://www.lorui.com/php%e5%ae%9e%e7%8e%b0%e2%80%9c%e5%b1%9e%e6%80%a7%e2%80%9d.html</link>
			</item>
	<item>
		<title>JQuery EasyUI 写了一个MySQL转PHP实体类、业务逻辑类的小工具</title>
		<description><![CDATA[从.Net转PHP，习惯了三层编程方法。 今天用JQuery EasyUI 写了一个MySQL转PHP实体类、业务逻辑类的小工具，以后就方便了。]]></description>
		<link>http://www.lorui.com/jeasyui-php-mysql-orm.html</link>
			</item>
	<item>
		<title>Perl，套接字（Sockets）和TCP/IP网络</title>
		<description><![CDATA[套接字（Sockets）的简单介绍 套接字允许同一台机器或网络上的程序间进行通讯。它的工作方法很简单：网络上的每台机器通过地址来标识。本教程我们将讨论TCP/IP网络，所以本文所述的网络地址是指IP地址（比如192.168.1.83）。一台机器除了有IP地址外，它还有许多端口，用于同一时段进行多个连接。 一个程序希望从另一个程序那里接收连接，要求操作系统创建一个socket并将其绑定到某个商品。然后，这个程序通过监听这个scoket来接收发送过来的连接。其它程序也建立socket来和它进行通讯。访问者需要指定接收者的IP地址和端口号。如果一切顺利的话，我们马上可以看到，这两个程序使用它们的socket来建立网络通讯。这两个程序可能会交换信息，每个程序都会写入数据到它创建的socket并从该socket中读取数据。 我可以在Perl做这些吗？ 当然。Perl支持socket的底层API。虽然使用API并不坏，但是还有一个非常方便的模块：IO::Socket。它将原始API进行封装，为socket提供更为简单、方便的方法。我们将在本教程中的使用IO::Socket，用来演示两个简单的程序通过socket来通讯。 接收方（Receiver） 首先，我们需要创建一个socket。我们将用它来接收连接。下面的代码演示了如何创建一个用于接收的socket。注意，我们需要指定本地机器名和端口来绑定socket。当然，如果这个端口已经被其它程序占用，将会创建失败。同时注意“Listen”参数：这是连接的最大数，通过socket队列来等等你接受并处理它们。我们暂且只接受一个连接（就是说，当一个连接在我们已经建立了其它连接的时候尝试与我们连接，我们将返回一个类似“连接被拒绝”的错误）。最后，那个“Reuse”选项告诉系统允许在这个程序退出后，重新使用该端口。它确保我们的程序在非正常退出或者非法关闭这个socket时，重新运行这个程序还能使用相同的商品来打开新的socket。 #!/usr/bin/perl ############################################## # (c) 2011 LoRui(i@lorui.com, www.lorui.com) # ############################################## use strict; use warnings; use IO::Socket; my $socket = new IO::Socket::INET ( LocalHost => 'centos.local.lorui.com', LocalPort => '7070', Proto => 'tcp', Listen => 1, Reuse => 1, ) &#124;&#124; die ("无法创建socket：$!\n"); my $new_socket = $socket->accept(); while(&#60;$new_socket&#62;) { print $_; [...]]]></description>
		<link>http://www.lorui.com/perl-sockets-tcpip.html</link>
			</item>
	<item>
		<title>Perl进程（Processes）、管道（Pipes）和信号（Signals）之信号</title>
		<description><![CDATA[本系列文章讨论Perl的三个关键功能：进程（Processes）、管道（Pipes）和信号（Signals）。通过建立一个新进程，Perl程序可以运行另一个程序甚至是它自己的拷贝。管道允许Perl脚本刚其它进行交换数据，而信号使Perl脚本监视和控制其它进程成为可能。本文讨论的是其中的：信号。 信号（ signal ） 正如文件句柄，理解信号是网络编程的基础。信号是通过操作系统发送给你的程序的一个消息，告诉它发生了重要的事情。信号可以指示程序自身的一个错误，比如尝试除0。事件要求立刻反应，例如用户尝试终止这个程序，或者一个非关键信息，如程序启动后，终止一个子进程。 除了由操作系统发送之外，进程间也可以发送消息。例如，当用户按下 Ctrl + C 键时，发送一个中断信号（interrupt signal）给当前正在运行的程序，这个信号不是由操作系统发出，而是由shell（终端，命令提示符）处理并解析组合键。当然，一个进程给自己发信号也是可能的。 常见信号 POSIX标准定义了19个信号。每一个信号都拥有一个小的整数和一个符号名。我们在下面的表格显示它们。 表格的第三列表示，当一个进程接收到这个信号时，会发生什么，有些信号什么都不做。其它的则有些会立刻中断进程、有的则终止进程并导致主存储器信息转存。大部分信号可以被“捕获”。就是说，当接收到信号时，程序可以搭配一个句柄给信号并采取对应的处理。但是，有些信号不能用这种方式拦截。 你不需要完全明白下表中的信号列表，因为有些并不在Perl脚本中发生，或者它们在Perl自身内部用于标示底层BUG你没有办法做任何相关的事。当然，一大把信号是相对常见的，并且我们马上就能看到它们的详细信息。 HUP 信号是个挂断事件。它通常在一个用户从命令行运行程序 ，然后关闭命令行窗口或退出解析器时发生。这个信号的默认行为是结束这个程序。 INT 信号是个用户发送的中断信号。它通常是在用户按下中断键（通常是Ctrl + C）时发生。这个信号的默认行为是结束这个程序。 QUIT 和 INT 相似，但但会促使程序生成核心文件（在Unix系统）。当用户按下“退出”键（通常是 Ctrl + \）时触发该信号。 信号名称 值 注解 描述 HUP 1 A 挂断检测 INT 2 A 从键盘中断 QUIT 3 A 从键盘退出 ILL 4 A 非法指令 ABRT 6 C 放弃 FPE 8 [...]]]></description>
		<link>http://www.lorui.com/perl-signals.html</link>
			</item>
	<item>
		<title>Perl进程（Processes）、管道（Pipes）和信号（Signals）之管道</title>
		<description><![CDATA[本系列文章讨论Perl的三个关键功能：进程（Processes）、管道（Pipes）和信号（Signals）。通过建立一个新进程，Perl程序可以运行另一个程序甚至是它自己的拷贝。管道允许Perl脚本刚其它进行交换数据，而信号使Perl脚本监视和控制其它进程成为可能。本文讨论的是其中的：管道。 管道（Pipe） 两个进程间交换数据。随程序而定，两个进程可能运行在相同的机器上，也可能是运行在LAN（局域网，Local Area Network）的两台机器上，也有可能是互联网上的其中一个。这两个进程会彼此协作。 Perl的管道是IPC（进程间通讯， interprocess communication）的最简单形式。管道是当前脚本的一个文件句柄连接到另一进程的标准输入或标准输出。Perl的管道在UNIX、VMS和Windows已完全实现并在Macintosh的MPW环境有限实现。 操作一个管道 open()的两个参数用于打开管道。首先，第一个参数是文件句柄的名字。第二个参数，是一个程序和它的所有参数，要么在前面、要么在后面跟着管道的符号“ &#124; ”。该命令应该完全按照所使用的操作系统默认的shell来输入，UNIX里是Bourne shell（“sh”），WINDOWS里是DOS/NT命令提示符。你可能需要指定该命令的完整路径，比如/usr/bin/ls或者依赖PATH环境变量来查找。 如果管道符号在程序前面，文件句柄将标准输入发送给它的数据全部写入。如果管道符号在程序后面，文件句柄打开并读取，并把所有读取到的数据传递给程序的标准输出。 举例来说，在UNIX中，ls -l命令将返回当前目录下所有文件的列表。将“ ls -l &#124; ”传递给 open()，我们可以打开一个管道从这个命令里读取： open (LSFH,"ls -l &#124;") or die "无法打开 ls -l: $!"; while (my $line = &#60;LSFH&#62;) { print "我看到了: $line\n"; } close LSFH; 这个片段简单地响应了ls -l命令返回的每一行。 另一个有关管道输出的例子，UNIX的 wc -lw命令将统计文本文件的行数（选项“-l”）和单词数（选项“-w”），并发送到标准输入。下面的代码片段使用管道打开这个命令，写入几行文本给它，然后关闭管道。当程序运行时，统计得到的单词数和行数将通过wc打印到命令窗口： open (WC,"&#124; wc -lw") or die "无法打开单词统计: [...]]]></description>
		<link>http://www.lorui.com/perl-pipes.html</link>
			</item>
	<item>
		<title>Perl进程（Processes）、管道（Pipes）和信号（Signals）之进程</title>
		<description><![CDATA[本系列文章讨论Perl的三个关键功能：进程（Processes）、管道（Pipes）和信号（Signals）。通过建立一个新进程，Perl程序可以运行另一个程序甚至是它自己的拷贝。管道允许Perl脚本刚其它进行交换数据，而信号使Perl脚本监视和控制其它进程成为可能。本文讨论的是其中的：进程。 进程（Processes） UNIX、VMS、Windows NT/2000以及其它现代操作系统都是多任务的。它们能同时运行多个程序，每个程序运行在独立的线程运行，称为进程。在多核的电脑中，进程实际上是运行在不同的CPU上同时运行。而在单核的电脑中，操作系统在多个进程中快速切换，每次执行一小部分，使进程看上去是同时运行的， 网络应用程序通过需要同时做两个或两个以上的事情。例如，服务器通常需要立刻处理客户端的请求，与此同时，还需要监视新的请求。多任务大大简化了程序开发，因为它允许你为应用程序所有操作启动新进程。几乎每个进程都是独立的，允许一个进程继续它的工作而不需要担心它是干什么的。 Perl支持两种多任务。一种基于传统UNIX多重处理（multiprocessing）模式，允许当前进程调用fork()函数克隆它自己。fork()执行后，将会有两个各方面几乎一致的进程。一个进程执行一个任务，另一个执行另一个任务。 另一种基于更现代的理念“线程（thread）”，将所有任务放在一个进程里面。无论如何，单个程序可以有多个线程，它们是相互独立的。 本文将介绍fork()以及与进程有关的变量和函数。我们将在以后的文章里讨论多线程（multithreading ）。 fork()函数 fork()函数在所有的UNIX版本的Perl里有效，以及VMS和OS/2。Perl 5.6（及更高版本的Perl）支持Microsoft Windows平台的fork()函数，可惜的是，不支持Macintosh。 Perl的fork()函数没有参数并返回一个数字作为结果。当fork()被调用的时候，它生成一个进程的精确副本。这个副本称为子进程（child），共享当前的值和变量，文件句柄（包含标准I/O缓存的数据）以及其它数据结构。事实上，调用fork()的副本进程都有一样的内存。就好像科幻电影里演的一个人无意中走进克隆出来的小房间里。 要保证和平共处，必须清楚哪个是父进程哪个是子进程。系统里所有的进程都有一个唯一的正整数，称为进程ID（process ID）或PID。 调用fork()函数之后，父进程和子进程判断这个函数的返回值。在父进程里，fork()返回子进程的PID。在子进程里，fork()返回数字0。根据这个返回值来判断是否为父进程。 $pid = fork() 创建一个新进程。在父进程中返回子进程的PID，在子进程中返回0。如果发生错误（比如，内存不足）返回undef，并将$!设为对应的错误信息 如果父进程和子进程想与其它进程通讯，可借助管道（pipe）或者通过共用存储器（shared memory）。父进程和子进程可以发送各自的PID给kill()函数。父进程通过fork()函数的返回值来获取子程序的PID，子进程可以通过调用getppid()函数来获得父进程的PID。进程可以通过特殊的变量$$来获得自己的PID。 $pid = getppid() 返回父进程的PID。每个Perl都有一个父进程，即使它通过命令行直接启动（此时，它的父进程是shell进程）。 $$ $$变量存储着当前进程的PID。它是只读的。 kill()函数将在后面的“信号”一节进行讨论。 正如你希望的那样，一个子进程也可以有它自己的 fork()，创建一个孙进程。原来的父进程可以再次 fork()，当然它的子进程和孙进程也一样可以。这样，Perl脚本可以创建一批完整（而友好的，希望如此）的进程。除非明确操作，这批进程属于同一个进程组（process group）。 每个进程组有一个唯一的ID，通常与共同的祖先（第一个使用 fork()的进程）的PID相同。这个值可以通过 getpgrp()来获得： $processid = getpgrp([$pid]) 如果指定了$pid， getpgrp() 函数返回对应的组ID。如果没有指定PID，返回当前进程所在的进程组的ID。 进程组中的每个成员共享所有从父进程创建时，拥有的文件句柄。特别是，共享 STDIN、 STDOUT 和 。可以在任何子进程中修改关闭文件句柄，或者重新打开它。系统一直保持跟踪：子进程打开文件句柄，但没有关闭文件。直到最后的子进程时，关闭该文件句柄的拷贝。 #!/usr/bin/perl #fork.pl - 创建单个的子进程 ############################################## # (c) [...]]]></description>
		<link>http://www.lorui.com/perl-processes.html</link>
			</item>
	<item>
		<title>Perl实现序列化(Serialize)和反序列化(Unserialize)</title>
		<description><![CDATA[序列化（Serialization）通常用于实现将数据和对象存储到一个文件中。生成的字节数据可以重复使用，来生成已保存对象的副本。 处理时间可以说是序列化的优势之一。假设，解析一个文件并从该文件中生成对象。如果这个文件很大，它将会花费一定的时候来处理。 经序列化的对象允许你在这个文件里重复读取对象，从而加快后续处理。 本文将快速演示如何在Perl中序列化和反序列化哈希（hash）、数组（array）、标量（scalaer）和对象（object）。 Perl可以通过Storable模块实现序列化。 哈希（hash）、数组（array）、标量（scalaer）可以通过下面的方式进行序列化： #!/usr/bin/perl ############################################## # (c) 2011 LoRui(i@lorui.com, www.lorui.com) # ############################################## use strict; use warnings; use Storable; #定义一个Hash，用于测试序列化 my %student = ( 'No' => '00342001010103037', 'Name' => 'LoRui' ); store \%student, 'student.lorui'; #序列化，将其保存 print "==== student ====\n"; &#038;dumper(\%student); #输出定义的Hash my %person = %{retrieve 'student.lorui'}; #读取并反序列化，并将取赋给一个变量 print "\n==== person ====\n"; &#038;dumper(\%person); #输出反序列化Hash [...]]]></description>
		<link>http://www.lorui.com/perl-serialize-unserialize.html</link>
			</item>
	<item>
		<title>捐了1美金：20年把甲骨文小篆字形搬上网</title>
		<description><![CDATA[甲骨文、金文、小篆这些古汉字，给你的印象是什么？广东话发音、台湾闽南话发音和说文解字你接触过哪些？有人花了20年心血把这些中华民族瑰宝整理完整，并搬上互联网，而这个人竟然是外国人！ 一个名叫Richard Sears的外国人，架设了一个名为Chinese Etymology网站，提供了上述所有的内容。 你在这里看到的是我过去20年努力工作的成果， 目标是要把汉字的字源资料放在国际网路上，供大家使用。 请捐赠，这样我就可以在线上保持提供，和及时更新这些资料。 这些资料是我免费提供的，而且没有广告干扰。 1美金，略表心意，感谢他20年的坚持；更感谢他这个外国人帮中华民族做的贡献。感谢、感动、感激……之余，你和我是不是该反省一点什么了？ 信息来源：http://www.cnbeta.com/articles/132238.htm]]></description>
		<link>http://www.lorui.com/donate-to-chineseetymology.html</link>
			</item>
</channel>
</rss>

