<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>开源小站 &#187; Litrin</title>
	<atom:link href="http://www.litrin.net/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.litrin.net</link>
	<description>It is Cool to OpenSource</description>
	<lastBuildDate>Fri, 23 Jul 2010 02:29:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=1077</generator>
		<item>
		<title>SQLServer的聚合索引问题</title>
		<link>http://www.litrin.net/2010/07/05/sqlserver%e7%9a%84%e8%81%9a%e5%90%88%e7%b4%a2%e5%bc%95%e9%97%ae%e9%a2%98/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sqlserver%25e7%259a%2584%25e8%2581%259a%25e5%2590%2588%25e7%25b4%25a2%25e5%25bc%2595%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2010/07/05/sqlserver%e7%9a%84%e8%81%9a%e5%90%88%e7%b4%a2%e5%bc%95%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 06:08:45 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[服务器]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1272</guid>
		<description><![CDATA[<!-- Easy AdSense V6.64 -->
<!-- Post[count: 3] -->
<div class="ezAdsense adsense adsense-leadin" style="float:right;margin:12px;" ><script type="text/javascript"><!--
google_ad_client = "pub-9603680922905816";
/* 250x250, 创建于 10-4-29 */
google_ad_slot = "3814271827";
google_ad_width = 250;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div> 有台SqlServer2000的主机，主要是用来纪录日志的。系统配置属于双核+2G，不算很高，目前数据文件大约在2G左右。高峰时每分钟100次写入左右。 这些天，系统在部分时间（不一定是高峰期），会出现大量的堵塞。堵塞每次持续时间最多5分钟，之后要么自己恢复，要么系统IO吃光。已经排除了病毒或者网络的问题。 利用sqlserver自带的“事件探查器”发觉大多数的阻塞都是跟其中的一个表有关。这个表数据有3M行的数据，并建立了聚合索引。 反复优化索引，系统没有起色。狠心删除了主键的聚合索引，问题竟奇迹般的解决了！ 将聚合索引索引转为非聚合索引之后，系统再也没有出现故障。 分析下来大致如此： 系统纪录的日志文件是以时间倒序为聚合索引，但由于日志的记入方式决定了数据的纪录方式并非按照顺序。即会出现新纪录比旧纪录先写入的情况。 3百万行的数据大约有500~700M的磁盘空间占用，按照聚合索引占整体数据大小的30%来计，索引大小大约为200M左右。 由于聚合索引是按照固定的顺序纪录，出现乱序的数据写入，sqlserver就必须重建聚合索引，每次都要重新生成这200M。 200M的数据需要相当长的时间，在此期间如果再有数据记入，行锁就上升为表锁，故出现系统阻塞。而之前一直没有出现问题，只不过是由于数据小，而索引生成的很快罢了。 所以建议聚合索引的使用前请确认在大数据的情况下务必保证新加的数据都在文件的末尾，这样系统就不会因为频繁的重建索引而造成数据阻塞或者IO的浪费。]]></description>
			<content:encoded><![CDATA[<p> 有台SqlServer2000的主机，主要是用来纪录日志的。系统配置属于双核+2G，不算很高，目前数据文件大约在2G左右。高峰时每分钟100次写入左右。</p>
<p>这些天，系统在部分时间（不一定是高峰期），会出现大量的堵塞。堵塞每次持续时间最多5分钟，之后要么自己恢复，要么系统IO吃光。已经排除了病毒或者网络的问题。<br />
<span id="more-1272"></span></p>
<p>利用sqlserver自带的“事件探查器”发觉大多数的阻塞都是跟其中的一个表有关。这个表数据有3M行的数据，并建立了聚合索引。<br />
反复优化索引，系统没有起色。狠心删除了主键的聚合索引，问题竟奇迹般的解决了！<br />
将聚合索引索引转为非聚合索引之后，系统再也没有出现故障。</p>
<p>分析下来大致如此：</p>
<ol>
<li>系统纪录的日志文件是以时间倒序为聚合索引，但由于日志的记入方式决定了数据的纪录方式并非按照顺序。即会出现新纪录比旧纪录先写入的情况。</li>
<li>3百万行的数据大约有500~700M的磁盘空间占用，按照聚合索引占整体数据大小的30%来计，索引大小大约为200M左右。</li>
<li>由于聚合索引是按照固定的顺序纪录，出现乱序的数据写入，sqlserver就必须重建聚合索引，每次都要重新生成这200M。</li>
<li>200M的数据需要相当长的时间，在此期间如果再有数据记入，行锁就上升为表锁，故出现系统阻塞。而之前一直没有出现问题，只不过是由于数据小，而索引生成的很快罢了。</li>
</ol>
<p>所以建议聚合索引的使用前请确认在大数据的情况下务必保证新加的数据都在文件的末尾，这样系统就不会因为频繁的重建索引而造成数据阻塞或者IO的浪费。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/07/05/sqlserver%e7%9a%84%e8%81%9a%e5%90%88%e7%b4%a2%e5%bc%95%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>重新封包的python smtplib</title>
		<link>http://www.litrin.net/2010/06/30/%e9%87%8d%e6%96%b0%e5%b0%81%e5%8c%85%e7%9a%84python-smtplib/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e9%2587%258d%25e6%2596%25b0%25e5%25b0%2581%25e5%258c%2585%25e7%259a%2584python-smtplib</link>
		<comments>http://www.litrin.net/2010/06/30/%e9%87%8d%e6%96%b0%e5%b0%81%e5%8c%85%e7%9a%84python-smtplib/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 02:25:01 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1269</guid>
		<description><![CDATA[这些天做了一个小的系统：将Oracle中的数据导出然后通过邮件直接发送给用户。 oracle部分主要通过sqlplus的报表格式导出成csv。邮件部分主要通过python读取csv然后再转译成html格式发送。 原理上很简单，到头来python的smtplib调试了半天才ok，为了方便，重新封了一下包，基本上的用途都在里面了。分享给各位！ 提醒各位：不要用它来收发垃圾邮件！ ## ##****************************************************************************** ##   NAME:       SendMail ##   PURPOSE:    ## ##   REVISIONS: ##   Ver        Date        Author           Description ##   ---------  ----------  ---------------  ------------------------------------ ##   1.0        2010/06/28  Litrin J.        1. Created this Script. ## ##   NOTES: ## ##      Object Name:     SendMail.py ##      Sysdate:         2010/06/28 ##      ##      Username:         Litrin Jiang ##      Website:          litrin.net ## ##****************************************************************************** ## [...]]]></description>
			<content:encoded><![CDATA[<p>这些天做了一个小的系统：将Oracle中的数据导出然后通过邮件直接发送给用户。<br />
oracle部分主要通过sqlplus的报表格式导出成csv。邮件部分主要通过python读取csv然后再转译成html格式发送。</p>
<p>原理上很简单，到头来python的smtplib调试了半天才ok，为了方便，重新封了一下包，基本上的用途都在里面了。分享给各位！<br />
<span style="color: #ff0000;">提醒各位：不要用它来收发垃圾邮件！</span></p>
<p><span id="more-1269"></span></p>
<pre name=code class=python>
##
##******************************************************************************
##   NAME:       SendMail
##   PURPOSE:   
##
##   REVISIONS:
##   Ver        Date        Author           Description
##   ---------  ----------  ---------------  ------------------------------------
##   1.0        2010/06/28  Litrin J.        1. Created this Script.
##
##   NOTES:
##
##      Object Name:     SendMail.py
##      Sysdate:         2010/06/28
##     
##      Username:         Litrin Jiang
##      Website:          litrin.net
##
##******************************************************************************
##
import sys
import smtplib
import email
import re
class SendMail:
   
    MailServer = {}
    MailServer['UserName'] = ''            
    MailServer['Password'] = ''                 #SMTP密码
    MailServer['Host'] = ''
    MailServer['SSL'] = False
    MailServer['Port'] = 0
    Subtype = 'html'
    Charset = 'gb2312'
    SenderName = ''
    ReciverName = ''   
    Notification = False
    __aRealAddressList = []
   
    def __init__ (self, From = '', Address='', Subject='', Body='', CCAddress = '', BCCAddress = ''):
        if ((From + Address + Subject + Body) != ''):
            self.Send(self, From, Address, Subject, Body, CCAddress = '')
       
    def Send(self, From, Address, Subject, Body, CCAddress = '', BCCAddress = ''):
        self.Email = email.MIMEText.MIMEText (Body,_subtype=self.Subtype, _charset=self.Charset)
        self.Email['From'] = self.AddressList(From, self.SenderName, False)
                   
        self.Email['To'] = self.AddressList(Address)
        if CCAddress != '':
            self.Email['Cc'] = self.AddressList(CCAddress)
        if BCCAddress != '':
            self.AddressList(BCCAddress)
           
        self.Email['Subject'] = self.StrEncode(Subject)
       
        self.Email['X-Maile'] = 'Python Script by Litrin.net'
        self.Email['X-Python-Version'] = str(sys.platform) + str(sys.version_info)
       
        if (self.Notification) :
            self.Email['Disposition-Notification-To'] = From
 
        self.__ServerSending()
    def StrEncode(self, String, Charset = ''):
        if Charset == '':
            Charset = self.Charset
           
        return str(email.Header.Header (String, Charset))
    def AddressList(self, oAddress, ReciverName = '', SendingList = True):
        if isinstance(oAddress, dict):
            To = ''
            for dAddress in oAddress :
                To += self.AddressList(oAddress[dAddress],dAddress )  + ','
            return To
       
        elif isinstance(oAddress, list):
            To = ''
            for sAddress in oAddress :
                To += self.AddressList (sAddress, '') + ','
            return To
       
        else:
           
            try :
                self.CheckEmail(oAddress)
            except:
                print oAddress + 'is not a Email address!'
                exit()
               
            if ReciverName == '':
                ReciverName = self.ReciverName     
           
            if ReciverName != '':
                To = self.StrEncode(ReciverName) + '&lt;' + oAddress + '&gt;'
            else:
                To = oAddress
               
            if SendingList :
                self.__aRealAddressList.append(oAddress)               
            return To
   
    def CheckEmail(self, sEmailAddress):
        sRegex = r'^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$'
        return re.match(sRegex, sEmailAddress)
   
    def __ServerSending(self):
        if (self.MailServer['SSL'] == False):
          
            server = smtplib.SMTP(self.MailServer['Host'],port = self.MailServer['Port'])
        else:
            server = smtplib.SMTP_SSL(self.MailServer['Host'], port = self.MailServer['Port'])
          
        server.login(self.MailServer['UserName'], self.MailServer['Password'])
       
        for sAddress in self.__aRealAddressList:           
           
            server.sendmail(self.Email['From'], sAddress, self.Email.as_string())
           
        server.quit()
if __name__ == '__main__':
    mail = SendMail()
    mail.MailServer['UserName'] = ''            
    mail.MailServer['Password'] = ''                 #SMTP密码
    mail.MailServer['Host'] = ''
    #mail.MailServer['SSL'] = True
    mail.SenderName = 'Litrin J.'
   
    mail.Send(From = <a rel="nofollow" target="_blank" href="mailto:'abc@123.com'">'abc@123.com'</a>,
              Address = <a rel="nofollow" target="_blank" href="mailto:'abc@71inc.com'">'abc@71inc.com'</a>,
              Subject = 'Subject:test',
              Body = '&lt;b&gt;This is a test mail!&lt;/b&gt;')
 </pre>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/06/30/%e9%87%8d%e6%96%b0%e5%b0%81%e5%8c%85%e7%9a%84python-smtplib/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>python multiprocessing的问题</title>
		<link>http://www.litrin.net/2010/06/23/python-multiprocessing%e7%9a%84%e9%97%ae%e9%a2%98/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=python-multiprocessing%25e7%259a%2584%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2010/06/23/python-multiprocessing%e7%9a%84%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 09:30:55 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1260</guid>
		<description><![CDATA[multiprocessing的是Python2.6中新加入的模块，旨在用类似threading调用tread(线程)的方式使用process(进程)。 服务器中经常需要对大规模的数据进行压缩，传统使用单进程操作不足以体现8核CPU并发的威力。于是写了一个脚本用于多进程压缩。然而在windows的主机上进行调试，全都是死循环，以至于机器都无法进行响应。导入Linux主机，测试却通过。对脚本进行了精简如下： 出错的代码： from multiprocessing import Process #from threading import Thread def work(a): print "This is : " + str(a) + '\n' exit x = 2 while(x&#62;1): p = Process(target=work, args=(x,)) p.start() x -= 1 类似的调用方法，换成threading库是正确的 #from multiprocessing import Process from threading import Thread def work(a): print "This is : " + str(a) + '\n' [...]]]></description>
			<content:encoded><![CDATA[<p>multiprocessing的是Python2.6中新加入的模块，旨在用类似threading调用tread(线程)的方式使用process(进程)。</p>
<p>服务器中经常需要对大规模的数据进行压缩，传统使用单进程操作不足以体现8核CPU并发的威力。于是写了一个脚本用于多进程压缩。然而在windows的主机上进行调试，全都是死循环，以至于机器都无法进行响应。导入Linux主机，测试却通过。对脚本进行了精简如下：</p>
<p><span id="more-1260"></span><br />
出错的代码：</p>
<pre name=code class="python">
from multiprocessing  import Process
#from threading  import Thread
def work(a):
    print "This is : " + str(a) + '\n'
    exit
x = 2
while(x&gt;1):
    p = Process(target=work, args=(x,))
    p.start()
    x -= 1</pre>
<p>类似的调用方法，换成threading库是正确的</p>
<pre name=code class="python">
#from multiprocessing  import Process
from threading  import Thread
def work(a):
    print "This is : " + str(a) + '\n'
    exit
x = 2
while(x&gt;1):
    thread = Thread(target=work, args=(x,))
    thread.start()
    x -= 1</pre>
<p>翻阅了<a rel="nofollow" target="_blank" href="http://docs.python.org/library/multiprocessing.html#windows">官方文档</a>，找到了问题所在：</p>
<p>*Nix平台对于multiprocessing 的实现是基于C库中的fork()，所有子进程与父进程的数据是完全相同，可以说是父进程的完全克隆。<br />
而对于windows，由于windows对于进程的实现方式不同，没有fork()函数，multiprocessing 的调用只能是对于该脚本的重新调用，难怪会出现死循环的问题。</p>
<p>改良后的代码：</p>
<pre name=code class="python">
from multiprocessing  import Process
#from threading  import Thread
def work(a):
    print "This is : " + str(a) + '\n'
    exit
if __name__ == '__main__' :
    x = 2
    while (x&gt;1):
        p= Process(target=work, args=(x,))
        p.start()
        x -= 1</pre>
<p>对于multiprocessing 和 Threading的区别：</p>
<p>Threading的操作只能和父进程在同一个物理CPU上执行。但由于不需要底层的调用，大多数简单的操作效率很高。<br />
multiprocessing的操作可以在多个CPU上执行，但耗费的内存资源也远高于thread方式，适合于集中运算或大并发的状态。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/06/23/python-multiprocessing%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress google-syntax-highlighter 插件的问题</title>
		<link>http://www.litrin.net/2010/06/12/wordpress-google-syntax-highlighter-%e6%8f%92%e4%bb%b6%e7%9a%84%e9%97%ae%e9%a2%98/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=wordpress-google-syntax-highlighter-%25e6%258f%2592%25e4%25bb%25b6%25e7%259a%2584%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2010/06/12/wordpress-google-syntax-highlighter-%e6%8f%92%e4%bb%b6%e7%9a%84%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 09:16:08 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[服务器]]></category>
		<guid isPermaLink="false">/?p=1251</guid>
		<description><![CDATA[小站上一直使用Google Syntax Highlighter for WordPress 插件实现代码高亮，就在上一篇文章发布之后，我发现了这个插件中存在的一个bug：windows + IE 8无法正常加亮python代码。 查阅了官方网站，发掘Google Syntax Highlighter for WordPress插件用的1.5版已经停止更新，只能使用2.0以上的版本，但2.0版本和之前的版本又存在兼容的问题，直接替换是不行的。不想每篇文章的修改&#60;pre&#62;标记，那就改插件喽。 下载最新版本的Syntax Highlighter，解压。 将原来/wp-content/plugins/google-syntax-highlighter目录下的Scripts和Styles目录清空后，分别用新版本的对应路径中的文件替换，注意大小写方式请不要变动。 修改google_syntax_highlighter.php文件，我用了minify的插件，这里就直接调用了。 &#60;?php function insert_header() {  $current_path = get_option('siteurl') .'/wp-content/plugins/' . basename(dirname(__FILE__)) .'/';  ?&#62;  &#60;link href="&#60;?php echo $current_path; ?&#62;Styles/shCore.css" type="text/css" rel="stylesheet" /&#62;  //可根据自己的需要选择不同的Styles &#60;link href="&#60;?php echo $current_path; ?&#62;Styles/shThemeEclipse.css" type="text/css" rel="stylesheet" /&#62;  &#60;?php } function insert_footer(){ $current_path = 'wp-content/plugins/' . [...]]]></description>
			<content:encoded><![CDATA[<p>小站上一直使用Google Syntax Highlighter for WordPress 插件实现代码高亮，就在上一篇文章发布之后，我发现了这个插件中存在的一个bug：windows + IE 8无法正常加亮python代码。</p>
<p>查阅了官方网站，发掘Google Syntax Highlighter for WordPress插件用的1.5版已经停止更新，只能使用2.0以上的版本，但2.0版本和之前的版本又存在兼容的问题，直接替换是不行的。不想每篇文章的修改&lt;pre&gt;标记，那就改插件喽。</p>
<p><span id="more-1251"></span></p>
<ol>
<li>下载<a rel="nofollow" target="_blank" href="http://alexgorbatchev.com/downloads/grab.php?name=sh" target="_blank">最新版本的Syntax Highlighter</a>，解压。</li>
<li>将原来/wp-content/plugins/google-syntax-highlighter目录下的Scripts和Styles目录清空后，分别用新版本的对应路径中的文件替换，注意大小写方式请不要变动。</li>
<li>修改google_syntax_highlighter.php文件，我用了minify的插件，这里就直接调用了。</li>
</ol>
<pre class="php" name='code'>&lt;?php
function insert_header() {
 $current_path = get_option('siteurl') .'/wp-content/plugins/' . basename(dirname(__FILE__)) .'/';
 ?&gt;
 &lt;link href="&lt;?php echo $current_path; ?&gt;Styles/shCore.css" type="text/css" rel="stylesheet" /&gt;
 //可根据自己的需要选择不同的Styles
 &lt;link href="&lt;?php echo $current_path; ?&gt;Styles/shThemeEclipse.css" type="text/css" rel="stylesheet" /&gt;
 &lt;?php
}
function insert_footer(){
$current_path = 'wp-content/plugins/' . basename(dirname(__FILE__)) .'/';
 ?&gt;
&lt;?php
/*
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shCore.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shLegacy.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushCSharp.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushPhp.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushJScript.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushJava.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushVb.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushSql.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushXml.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushDelphi.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushPython.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushRuby.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushCss.js"&gt;&lt;/script&gt;
&lt;script src="&lt;?php echo $current_path; ?&gt;Scripts/shBrushCpp.js"&gt;&lt;/script&gt;
*/
&lt;script src="/wp-content/plugins/wp-minify/min/?b=&lt;?php echo $current_path; ?&gt;Scripts&amp;f=shCore.js,shLegacy.js,shBrushPhp.js,shBrushSql.js,shBrushPython.js"&gt;&lt;/script&gt;
&lt;script&gt;
dp.SyntaxHighlighter.ClipboardSwf = '&lt;?php echo $current_path; ?&gt;Scripts/clipboard.swf';
SyntaxHighlighter.all();
dp.SyntaxHighlighter.HighlightAll('code');
&lt;/script&gt;
&lt;?php
}
add_action('wp_head','insert_header');
add_action('wp_footer','insert_footer');
?&gt;</pre>
<p>测试，通过！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/06/12/wordpress-google-syntax-highlighter-%e6%8f%92%e4%bb%b6%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GAE的数据导入问题</title>
		<link>http://www.litrin.net/2010/05/26/gae%e7%9a%84%e6%95%b0%e6%8d%ae%e5%af%bc%e5%85%a5%e9%97%ae%e9%a2%98/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=gae%25e7%259a%2584%25e6%2595%25b0%25e6%258d%25ae%25e5%25af%25bc%25e5%2585%25a5%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2010/05/26/gae%e7%9a%84%e6%95%b0%e6%8d%ae%e5%af%bc%e5%85%a5%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Wed, 26 May 2010 01:58:28 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[服务器]]></category>
		<guid isPermaLink="false">/?p=1242</guid>
		<description><![CDATA[又是关于Google App Engine的问题。 根据GAE的官方文档，向GAE的存储区导入数据，导入了数次均出现问题，翻来覆去的无法成功。 CVS结构示例：1300428,浙江省嘉兴市,联通130卡 （一个手机号码的对应归属地列表） configfile: from google.appengine.ext import db from google.appengine.tools.bulkloader  import Loader class MobilePhone(db.Model):   Number = db.StringProperty()   Area = db.StringProperty()   BrandType = db.StringProperty() class MPLoader(Loader):   def __init__(self):     Loader.__init__(self, 'MobilePhone',                     [('Number', unicode),                      ('Area', unicode),                      ('BrandType', unicode),                      ]) loaders = [MPLoader] 主要分析了一下，问题分为几类。 1.验证不能通过的问题： 这个问题很多时候是一个低级错误，之前我曾经犯过类似的错误。在app.yaml中的handlers handlers: [...]]]></description>
			<content:encoded><![CDATA[<p>又是关于Google App Engine的问题。<br />
根据<a rel="nofollow" target="_blank" href="http://code.google.com/intl/zh-CN/appengine/docs/python/tools/uploadingdata.html" target="_blank">GAE的官方文档</a>，向GAE的存储区导入数据，导入了数次均出现问题，翻来覆去的无法成功。</p>
<p>CVS结构示例：1300428,浙江省嘉兴市,联通130卡 （一个手机号码的对应归属地列表）</p>
<p>configfile:</p>
<pre class="py" name="code" >
from google.appengine.ext import db
from google.appengine.tools.bulkloader  import Loader
class MobilePhone(db.Model):
  Number = db.StringProperty()
  Area = db.StringProperty()
  BrandType = db.StringProperty()
class MPLoader(Loader):
  def __init__(self):
    Loader.__init__(self, 'MobilePhone',
                    [('Number', unicode),
                     ('Area', unicode),
                     ('BrandType', unicode),
                     ])
loaders = [MPLoader]</pre>
<p>主要分析了一下，问题分为几类。</p>
<p><span id="more-1242"></span></p>
<p>1.验证不能通过的问题：</p>
<p>这个问题很多时候是一个低级错误，之前我曾经犯过类似的错误。在app.yaml中的handlers</p>
<p>handlers:<br />
- url: /remote_api<br />
  script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py<br />
  login: admin<br />
- url: /*<br />
  script: main.py</p>
<p>这个/*的配置必须放在最后。否则所有的访问都会直接匹配main.py自然出现问题。</p>
<p>2.跟编码有关的错误：</p>
<p>这个错误是GAE SDK的一个bug，恐怕对于ASCII系统的用户没什么关系，对于我们UTF-8，GB2312，ASCII已经昏倒的用户来说，这是个严重的问题。</p>
<p>在GAE的安装目录下 google\appengine\tools\bulkloader.py文件中2521行</p>
<pre class="python" name="code">
    for (name, converter), val in zip(self.__properties, values):
      if converter is bool and val.lower() in ('0', 'false', 'no'):
        val = False
      properties[name] = converter(val)</pre>
<p>修改为：</p>
<pre class="python" name="code" >    for (name, converter), val in zip(self.__properties, values):
        if converter is bool and val.lower() in ('0', 'false', 'no'):
            val = False
        if isinstance(val,str) and not isinstance(val, unicode):
            val=unicode(val,'utf-8')
        properties[name] = converter(val)</pre>
<p>系统会将unicode类型的变量转换。</p>
<p>3.对于大容量数据的删除</p>
<p>GAE的限制，一次最多载入1000行的数据，每次最多删除500行数据，这对于像我制作的手机号码归属之类的大数据库是远远不够的，多次删除又会导致500报错，我的方法是使用task queue。<br />
Task Queue在官方的中文文档中没有提及，在英文文档中介绍的也不够详细。个人的理解就是让系统定期的去访问一个页面而已，我的例子：</p>
<pre class="python" name="code">from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext import db
from google.appengine.api.labs import taskqueue
class MobilePhone(db.Model):
    Number = db.StringProperty()
    Area = db.StringProperty()
    BrandType = db.StringProperty()
class Delete(webapp.RequestHandler):
    def get(self):
        q = db.GqlQuery("SELECT * FROM MobilePhone limit 100")
        results = q.fetch(100)
        db.delete(results)
        q = db.GqlQuery("SELECT * FROM MobilePhone limit 100")
        if (q.count() &gt; 0):
            self.addqueue()
        self.response.out.write('Hello world!')
    def addqueue(self):
        taskurl = 'http://ip-and-mp.appspot.com/'
        taskqueue.add( url='/del', params=dict(url=taskurl))
        self.response.out.write('added!')</pre>
<p>每次删除100行，使用默认的default queue，即每秒一次。</p>
<p>4.关于命令行的问题</p>
<p>我按照中文文档的办法始终有问题，添加了&#8211;email=xxxx &#8211;passin的参数才成功。手册已经远远落后了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/05/26/gae%e7%9a%84%e6%95%b0%e6%8d%ae%e5%af%bc%e5%85%a5%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GAE的镜像</title>
		<link>http://www.litrin.net/2010/05/06/gae%e7%9a%84%e9%95%9c%e5%83%8f/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=gae%25e7%259a%2584%25e9%2595%259c%25e5%2583%258f</link>
		<comments>http://www.litrin.net/2010/05/06/gae%e7%9a%84%e9%95%9c%e5%83%8f/#comments</comments>
		<pubDate>Thu, 06 May 2010 05:30:58 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[服务器]]></category>
		<guid isPermaLink="false">/?p=1238</guid>
		<description><![CDATA[本想将LAMP中的PHP弄成Python，研究下Zope或者索性的Python CGI。想到目前推Python最起劲的公司正是Google，况且Google的App Engine又是免费资源，顺道着就申请了。 GAE对于很多人来说只不过是当作撑杆来翻墙的。其实不管从哪个方面来说，GAE的理念就是一个搭载了Java或Python页面框架的虚拟主机，而且支持一大堆的扩展（google wave上的机器人）。借助了Microblog，我在GAE上架设了本站的镜像站点。 相对来说Google提供的SDK目前只能说是一个上传工具而已。很多功能，例如Xmpp，数据存储还没有办法完全模拟，只有页面框架和Memcache还算能用。相信google也会不断的加以完善。 说起Microblog，首先是一个不错的CMS系统。但可能是版本较低，加之GAE程序的调试比较麻烦，功能和结构上只能实现简单的blog功能。相比现成的blog空间反而麻烦不少。相信随着逐步的升级，这个系统将成为一个优秀的CMS。 想用Wordpress的导出工具直接生成一个新站，发现此功能还有问题，至少本站无法成功。于是只能顺手写一个扩展实现两地同步，尽管问题也不少。 说起Python，个人觉得是一个效率很高的语言，缺点就是产生这高效率的扩展太多，太混乱，初学起来很迷糊。顺手之后你就会觉得它作为高级语言，可以操纵的资源丰富的惊人。不过在此插一句，python3的转变真是太突兀了，大部分2.6之前的代码都要重新写过，对于GAE的目标环境还是用2.6以下搭建吧。]]></description>
			<content:encoded><![CDATA[<p>本想将LAMP中的PHP弄成Python，研究下Zope或者索性的Python CGI。想到目前推Python最起劲的公司正是Google，况且Google的App Engine又是免费资源，顺道着就申请了。</p>
<p>GAE对于很多人来说只不过是当作撑杆来翻墙的。其实不管从哪个方面来说，GAE的理念就是一个搭载了Java或Python页面框架的虚拟主机，而且支持一大堆的扩展（google wave上的机器人）。借助了Microblog，我在GAE上架设了<a rel="nofollow" target="_blank" href="http://litrinblog.appspot.com" target="_blank">本站的镜像站点</a>。</p>
<p><span id="more-1238"></span></p>
<p>相对来说Google提供的SDK目前只能说是一个上传工具而已。很多功能，例如Xmpp，数据存储还没有办法完全模拟，只有页面框架和Memcache还算能用。相信google也会不断的加以完善。</p>
<p>说起Microblog，首先是一个不错的CMS系统。但可能是版本较低，加之GAE程序的调试比较麻烦，功能和结构上只能实现简单的blog功能。相比现成的blog空间反而麻烦不少。相信随着逐步的升级，这个系统将成为一个优秀的CMS。<br />
想用Wordpress的导出工具直接生成一个新站，发现此功能还有问题，至少本站无法成功。于是只能顺手写一个扩展实现两地同步，尽管问题也不少。</p>
<p>说起Python，个人觉得是一个效率很高的语言，缺点就是产生这高效率的扩展太多，太混乱，初学起来很迷糊。顺手之后你就会觉得它作为高级语言，可以操纵的资源丰富的惊人。不过在此插一句，python3的转变真是太突兀了，大部分2.6之前的代码都要重新写过，对于GAE的目标环境还是用2.6以下搭建吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/05/06/gae%e7%9a%84%e9%95%9c%e5%83%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>降价了?</title>
		<link>http://www.litrin.net/2010/04/30/%e9%99%8d%e4%bb%b7%e4%ba%86/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e9%2599%258d%25e4%25bb%25b7%25e4%25ba%2586</link>
		<comments>http://www.litrin.net/2010/04/30/%e9%99%8d%e4%bb%b7%e4%ba%86/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 06:11:16 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[业界话题]]></category>
		<guid isPermaLink="false">/?p=1235</guid>
		<description><![CDATA[眼看着5月1日的劳动节，购物黄金周。这次，连电信商也没有摆脱减价促销的怪圈——联通WCDMA总算攻破了坚守一年的价格坚冰，宣布推出新的套餐。按36块的来计算，对于只大部分打打电话，不怎么漫游的用户来说的，等于是移动的20元数据套餐+16元免费接听，况且16元的拨出费用是0.11而非0.30。3G的门槛依旧。 公司与电信谈的电话和网络费用，明明是每年在减价，折扣越来越大，然而公司的电话费、网络费却在逐步上升，已经上升到了让老板们汗颜的地步。 遥想10年前我刚开始用手机，6毛钱一个电话，不分打进打出，一律6毛。每个月电话费用只有区区10块左右。如今，免费接听，0.11每分钟，16元成了“最低消费”这怎么能够称得上是减低了成本呢？ 原本觉得有了互联网，有了IP长途，有了e-mail，有了IM，电话费用会大大降低， 事实却总是相反。以为用了电脑办公，就可以实现无纸化，然而被用掉的纸却在打印机前成了山。电视机从“黑色家电”变成了“白色家电”。电脑从几万块跌倒几千块，眼看就要跌倒几百块了，数量上升的同时折旧寿命也降到了1年。手机的更新也从几年跌倒几个月，纵然部分手机的价钱还不及月租费用高。 种种结果表明一旦某样东西跌价之后，意味着它的盈利渠道已经排除了商品本身，也就意味着你将会为此花费更多的钱。商业的进步表现如斯。]]></description>
			<content:encoded><![CDATA[<p>眼看着5月1日的劳动节，购物黄金周。这次，连电信商也没有摆脱减价促销的怪圈——联通WCDMA总算攻破了坚守一年的价格坚冰，宣布推出新的套餐。按36块的来计算，对于只大部分打打电话，不怎么漫游的用户来说的，等于是移动的20元数据套餐+16元免费接听，况且16元的拨出费用是0.11而非0.30。3G的门槛依旧。<br />
公司与电信谈的电话和网络费用，明明是每年在减价，折扣越来越大，然而公司的电话费、网络费却在逐步上升，已经上升到了让老板们汗颜的地步。</p>
<p>遥想10年前我刚开始用手机，6毛钱一个电话，不分打进打出，一律6毛。每个月电话费用只有区区10块左右。如今，免费接听，0.11每分钟，16元成了“最低消费”这怎么能够称得上是减低了成本呢？</p>
<p><span id="more-1235"></span>原本觉得有了互联网，有了IP长途，有了e-mail，有了IM，电话费用会大大降低， 事实却总是相反。以为用了电脑办公，就可以实现无纸化，然而被用掉的纸却在打印机前成了山。电视机从“黑色家电”变成了“白色家电”。电脑从几万块跌倒几千块，眼看就要跌倒几百块了，数量上升的同时折旧寿命也降到了1年。手机的更新也从几年跌倒几个月，纵然部分手机的价钱还不及月租费用高。</p>
<p>种种结果表明一旦某样东西跌价之后，意味着它的盈利渠道已经排除了商品本身，也就意味着你将会为此花费更多的钱。商业的进步表现如斯。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/04/30/%e9%99%8d%e4%bb%b7%e4%ba%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>flash播放MP3的问题</title>
		<link>http://www.litrin.net/2010/04/19/flash%e6%92%ad%e6%94%bemp3%e7%9a%84%e9%97%ae%e9%a2%98/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flash%25e6%2592%25ad%25e6%2594%25bemp3%25e7%259a%2584%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2010/04/19/flash%e6%92%ad%e6%94%bemp3%e7%9a%84%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 09:45:39 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[www]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1232</guid>
		<description><![CDATA[最近碰到了一个奇异的问题：apache的服务器，一个Flash调Mp3进行播放，用IE和chromium打开后启动时正常，一旦暂停后，再次播放就无效。但对于Firefox则完全正常。 反复检查代码，无果。将文件上传到另外一台机器后IE也正常。反复修改KeepAlive，disk-cache之类的设置，完全没有效果。 真是叫人郁闷。 检查了apache的配置，感觉问题应该跟mod_deflate模块有关，相应的代码如下：     &#60;IfModule deflate_module&#62;         SetOutputFilter DEFLATE         BrowserMatch ^Mozilla/4 gzip-only-text/html         BrowserMatch ^Mozilla/4\.0[678] no-gzip         BrowserMatch \bMSIE !no-gzip !gzip-only-text/html         SetEnvIfNoCase Request_URI \                 \.(?:gif&#124;jpe?g&#124;png)$ no-gzip dont-vary     &#60;/IfModule&#62; 关闭后IE恢复正常，考虑到一般情况下，mp3和swf压缩不了多少，但是却经常需要断点续传，重新修改相应配置：     &#60;IfModule deflate_module&#62;         SetOutputFilter DEFLATE         BrowserMatch ^Mozilla/4 gzip-only-text/html         BrowserMatch ^Mozilla/4\.0[678] no-gzip         BrowserMatch \bMSIE !no-gzip !gzip-only-text/html         SetEnvIfNoCase [...]]]></description>
			<content:encoded><![CDATA[<p>最近碰到了一个奇异的问题：apache的服务器，一个Flash调Mp3进行播放，用IE和chromium打开后启动时正常，一旦暂停后，再次播放就无效。但对于Firefox则完全正常。</p>
<p>反复检查代码，无果。将文件上传到另外一台机器后IE也正常。反复修改KeepAlive，disk-cache之类的设置，完全没有效果。</p>
<p>真是叫人郁闷。</p>
<p><span id="more-1232"></span></p>
<p>检查了apache的配置，感觉问题应该跟mod_deflate模块有关，相应的代码如下：</p>
<pre>    &lt;IfModule deflate_module&gt;
        SetOutputFilter DEFLATE
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        BrowserMatch ^Mozilla/4\.0[678] no-gzip
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
        SetEnvIfNoCase Request_URI \
                \.(?:gif|jpe?g|png)$ no-gzip dont-vary
    &lt;/IfModule&gt;</pre>
<p>关闭后IE恢复正常，考虑到一般情况下，mp3和swf压缩不了多少，但是却经常需要断点续传，重新修改相应配置：</p>
<pre>    &lt;IfModule deflate_module&gt;
        SetOutputFilter DEFLATE
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        BrowserMatch ^Mozilla/4\.0[678] no-gzip
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
        SetEnvIfNoCase Request_URI \
                \.(?:gif|jpe?g|mp3|swf|png)$ no-gzip dont-vary
    &lt;/IfModule&gt;</pre>
<p>完全正常！</p>
<p>分析下来大致原理如下（个人分析，无依据）：<br />
首先假设的是我没有踩中任何一个bug。这个问题似乎跟原先出现过deflate的文件不能断点续传为同一个问题。</p>
<p>mp3采用流格式传输，没有完全下载结束就被暂停下载，由于系统启用了mod_deflat的压缩传输模块，本地保存的实际上是一个gzip过的mp3文件。</p>
<p>由于目前主流浏览器都支持断点续传，而对于断点续传的处理却各有不同，IE和chromium可能会先对于gzip之前的文件进行校验，发觉校验失败，认为这是一个错误的文件，不再进行续传；FF则是先不进行校验，或者校验失败后重新下载续传。</p>
<p>尚为猜测，希望各位朋友给个确凿的解释。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/04/19/flash%e6%92%ad%e6%94%bemp3%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>另一面解读&#8221;google退出门&#8221;</title>
		<link>http://www.litrin.net/2010/04/02/%e5%8f%a6%e4%b8%80%e9%9d%a2%e8%a7%a3%e8%af%bbgoogle%e9%80%80%e5%87%ba%e9%97%a8/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e5%258f%25a6%25e4%25b8%2580%25e9%259d%25a2%25e8%25a7%25a3%25e8%25af%25bbgoogle%25e9%2580%2580%25e5%2587%25ba%25e9%2597%25a8</link>
		<comments>http://www.litrin.net/2010/04/02/%e5%8f%a6%e4%b8%80%e9%9d%a2%e8%a7%a3%e8%af%bbgoogle%e9%80%80%e5%87%ba%e9%97%a8/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 08:05:49 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[业界话题]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1212</guid>
		<description><![CDATA[想必在这里——一个IT人的博客里没有必要累述整个“退出门”事件的始末。多说也无益。多日冷静下来，反思整个事件的始末，忽然觉得Google在其中的角色并非如网上的那般光彩照人，那样的无可挑剔。只不过想必之下，google是媒体公关的行家。所谓公关这种事情，事后再做那就不能称之为公关；看得出来，那就可以被当成5毛。总之，google公关从许多年前就做的工作，你我深陷其中，并无从察觉。 先列举下近几年google的相关事件： 发布Gmail等一系列web2.0工具“套牢用户”，其中google资讯，google reader很是得到大家的欢迎。 发布购物和网上支付平台。 收购Youtube，blogspot等在线个人应用，或者可以理解为“个人信息发布系统” 发布google操作系统，包括手机和台式机的。引入实时在线操作系统概念。 与Linux系统分道扬镳，Linux社团从代码库中踢出Android相关代码。 宣布要推千兆光纤入户，计划成为网络运营商。 高姿态宣布退出中国市场——其实大多说情况下只是将.cn换成了.hk。 …… 据说，互联网上近30%的流量来自于google。google的成功毫无疑问，成功到了一个网站想要推广就必须要SEO为止。这样，google自己Don&#8217;t be evil的座右铭确实是必要的。但恰恰相反的是，从一个竹筏成长到航空母舰的过程中，如何定义EVIL却是无从说起。即便说起过，OK也没问题。他们也曾经承诺过中国政府一直进行内容审查的。 和Google不存在所谓长期的“合作”，与Google合作的结果无非是这样，要么被收购，比如Youtube；要么被套牢，正如你我这样的普通用户；要么分道扬镳，正如Android之于Linux。我好奇的是为什么从来就没有人诉google垄断？同比微软，已经几次到了被拆分的地步。看过Google的产品——不管是什么。你就会逐步形成一种想法，首先是：这东西是Google搞出来的，不错！接下来是，Google真强大，牛！这些天恐怕很多朋友担心的却变成了，Google离开了，我的gmail，我的手机，我的电脑，我投的关键字广告还能用吗？或者索性成了，为了我的设备不出问题，不能让google走！ Google早就不是一个虚拟的帝国，它已经成了一个真实的帝国。不同的是，帝国的臣民们自己还不知道。也许你不敢相信，我们几乎每天都要为这个帝国缴纳税收——只要你上网。帝国一旦建立，首要任务是建立意识导向（正如传统上的皇帝的神化），这个可以在“相关度”这类看似完全技术层面的掩盖下实现。第二步就是摧毁一起存在的和可能存在的敌人，比如阻挡他执行前一任务的任何力量。 这次退出事件，不同于以往Yahoo和ebay的低调——他们是经营性的退出，Google利用了一切可用的手段告知全中国的用户：“我是好人，是来帮助你们的！你们的政府在阻止你们获取信息，……，我现在忍无可忍了！” 一个企业成长到这个级别已经早就无所谓什么国界了，只要不去杀人放火就没有什么事情可以限制的。Google经营的不是一家公司，他们已经从前期的经营一个真实的帝国做起，直到经营起了一种意识形态。今天莫名其妙与中国政府闹翻只是从另一个层面上体现一下自己的经营成果。正如它一开始莫名其妙的说要进入中国市场一样。没准从那天起就准备好了这一天！ 如果说Gmail的攻击确实来自国内的情报机构。那么如果美国的情报机构需要获得美国本土或者海外的某个“恐怖分子”的邮件而“非法进入”Gmail，Google是否也会退出美国市场？我实在不能相信这样的事情没有发生过。哦，应该不需要“非法进入”，听说google已经和中情局开展合作了！精通于商业运作的google高层没有理由会将商业利益和国家意志混为一谈。这也难怪为什么1月15日那场听证会上会有美国军方和情报机构的身影。 今年不是1840，更不是1900，没有google寻求的“治外法权”！ PS：不管这篇博文是否能够见诸google，都体现了google的意志。]]></description>
			<content:encoded><![CDATA[<p>想必在这里——一个IT人的博客里没有必要累述整个“退出门”事件的始末。多说也无益。多日冷静下来，反思整个事件的始末，忽然觉得Google在其中的角色并非如网上的那般光彩照人，那样的无可挑剔。只不过想必之下，google是媒体公关的行家。所谓公关这种事情，事后再做那就不能称之为公关；看得出来，那就可以被当成5毛。总之，google公关从许多年前就做的工作，你我深陷其中，并无从察觉。</p>
<p><span id="more-1212"></span></p>
<p>先列举下近几年google的相关事件：</p>
<ul>
<li>发布Gmail等一系列web2.0工具“套牢用户”，其中google资讯，google reader很是得到大家的欢迎。</li>
<li>发布购物和网上支付平台。</li>
<li>收购Youtube，blogspot等在线个人应用，或者可以理解为“个人信息发布系统”</li>
<li>发布google操作系统，包括手机和台式机的。引入实时在线操作系统概念。</li>
<li>与Linux系统分道扬镳，Linux社团从代码库中踢出Android相关代码。</li>
<li>宣布要推千兆光纤入户，计划成为网络运营商。</li>
<li>高姿态宣布退出中国市场——其实大多说情况下只是将.cn换成了.hk。</li>
<li>……</li>
</ul>
<p>据说，互联网上近30%的流量来自于google。google的成功毫无疑问，成功到了一个网站想要推广就必须要SEO为止。这样，google自己Don&#8217;t be evil的座右铭确实是必要的。但恰恰相反的是，从一个竹筏成长到航空母舰的过程中，如何定义EVIL却是无从说起。即便说起过，OK也没问题。他们也曾经承诺过中国政府一直进行内容审查的。</p>
<p>和Google不存在所谓长期的“合作”，与Google合作的结果无非是这样，要么被收购，比如Youtube；要么被套牢，正如你我这样的普通用户；要么分道扬镳，正如Android之于Linux。我好奇的是为什么从来就没有人诉google垄断？同比微软，已经几次到了被拆分的地步。看过Google的产品——不管是什么。你就会逐步形成一种想法，首先是：这东西是Google搞出来的，不错！接下来是，Google真强大，牛！这些天恐怕很多朋友担心的却变成了，Google离开了，我的gmail，我的手机，我的电脑，我投的关键字广告还能用吗？或者索性成了，为了我的设备不出问题，不能让google走！</p>
<p>Google早就不是一个虚拟的帝国，它已经成了一个真实的帝国。不同的是，帝国的臣民们自己还不知道。也许你不敢相信，我们几乎每天都要为这个帝国缴纳税收——只要你上网。帝国一旦建立，首要任务是建立意识导向（正如传统上的皇帝的神化），这个可以在“相关度”这类看似完全技术层面的掩盖下实现。第二步就是摧毁一起存在的和可能存在的敌人，比如阻挡他执行前一任务的任何力量。</p>
<p style="text-align: center;"><a href="http://www.litrin.net/wp-content/uploads/2010/04/google_google.png"><img class="size-medium wp-image-1217 alignnone" src="http://www.litrin.net/wp-content/uploads/2010/04/google_google-300x152.png" alt="" width="300" height="152" /></a></p>
<p style="text-align: center;"><a href="http://www.litrin.net/wp-content/uploads/2010/04/gmail_shengming.png"><img class="aligncenter size-medium wp-image-1223" src="http://www.litrin.net/wp-content/uploads/2010/04/gmail_shengming-300x107.png" alt="" width="300" height="107" /></a></p>
<p>这次退出事件，不同于以往Yahoo和ebay的低调——他们是经营性的退出，Google利用了一切可用的手段告知全中国的用户：“我是好人，是来帮助你们的！你们的政府在阻止你们获取信息，……，我现在忍无可忍了！”<br />
一个企业成长到这个级别已经早就无所谓什么国界了，只要不去杀人放火就没有什么事情可以限制的。Google经营的不是一家公司，他们已经从前期的经营一个真实的帝国做起，直到经营起了一种意识形态。今天莫名其妙与中国政府闹翻只是从另一个层面上体现一下自己的经营成果。正如它一开始莫名其妙的说要进入中国市场一样。没准从那天起就准备好了这一天！</p>
<p>如果说Gmail的攻击确实来自国内的情报机构。那么如果美国的情报机构需要获得美国本土或者海外的某个“恐怖分子”的邮件而“非法进入”Gmail，Google是否也会退出美国市场？我实在不能相信这样的事情没有发生过。哦，应该不需要“非法进入”，听说google已经和中情局开展合作了！精通于商业运作的google高层没有理由会将商业利益和国家意志混为一谈。这也难怪为什么1月15日那场听证会上会有美国军方和情报机构的身影。</p>
<p>今年不是1840，更不是1900，没有google寻求的“治外法权”！</p>
<p>PS：不管这篇博文是否能够见诸google，都体现了google的意志。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/04/02/%e5%8f%a6%e4%b8%80%e9%9d%a2%e8%a7%a3%e8%af%bbgoogle%e9%80%80%e5%87%ba%e9%97%a8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>再谈谈 Oracle+Sun=?</title>
		<link>http://www.litrin.net/2010/03/31/%e5%86%8d%e8%b0%88%e8%b0%88-oraclesun/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e5%2586%258d%25e8%25b0%2588%25e8%25b0%2588-oraclesun</link>
		<comments>http://www.litrin.net/2010/03/31/%e5%86%8d%e8%b0%88%e8%b0%88-oraclesun/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 08:06:56 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[开源7788]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[solaris]]></category>
		<category><![CDATA[业界话题]]></category>
		<category><![CDATA[服务器]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1208</guid>
		<description><![CDATA[上次写过几篇东西，关于Oracle收购Sun的。Oracle+Sun=? , Sun的身前身后事。 如今尘埃落定，www.sun.com 也已经被重定向到了www.oracle.com 。至少局外人看来，两家公司已经合并，而且至少不是失败的。 也就是在今天，得知oracle放出消息：今后Solaris不再免费提供，下载版本只提供90天的试用。如果使用，请买授权！ 从个人角度上来说，我当然希望是提前一天庆祝了明天的节日。但事实上这并非是空穴来风。 Sun是一家技术公司，需要推广自己的产品。免费派送操作系统提升Sun硬件产品、Java，这种方式是明智的选择。但相对比较商业化一点的Oracle则认为Solaris只是一个众多产品线上其中的一环，并没有Sun之前认为的那种“中心化”地位——他们的中心是Oracle数据库。而且Oracle已经在用类似的方式进行了推广。或者至少说明Oracle认为没有必要同时免费派发这么多软件。 接下去，可能Solaris会被逐步边缘化，代码逐步合并到了Oracle Linux中——由于Linux遵循GPL，这样有可能出现Solaris和Linux的大混血。原本仅属于Sun Solaris的种种优势将会完全移植到Linux，这会Linux社区的幸运。或者出现完全相反的状况，Oracle Linux被边缘化，Solaris取代了它的地位。这样反而成为Linux的不幸，这是又一家大的商业公司的倒戈。 不管出现什么状况，最不幸的永远是opensolaris项目。要么会尾随Solaris退去光环，要么完全沦为小白鼠，一蹶不振，就如同Redhat之fedora。 那Mysql呢？后果已经“不容乐观”了，提起来伤心，不提也罢。]]></description>
			<content:encoded><![CDATA[<p>上次写过几篇东西，关于Oracle收购Sun的。<a href="http://www.litrin.net/2009/04/21/oraclesun/">Oracle+Sun=?</a> , <a href="http://www.litrin.net/2009/03/29/sun%e7%9a%84%e8%ba%ab%e5%89%8d%e8%ba%ab%e5%90%8e%e4%ba%8b/">Sun的身前身后事</a>。</p>
<p>如今尘埃落定，<a rel="nofollow" target="_blank" href="http://www.sun.com/">www.sun.com</a> 也已经被重定向到了<a rel="nofollow" target="_blank" href="http://www.oracle.com">www.oracle.com</a> 。至少局外人看来，两家公司已经合并，而且至少不是失败的。</p>
<p>也就是在今天，得知oracle放出消息：今后Solaris不再免费提供，下载版本只提供90天的试用。如果使用，请买授权！</p>
<p>从个人角度上来说，我当然希望是提前一天庆祝了明天的节日。但事实上这并非是空穴来风。</p>
<p><span id="more-1208"></span></p>
<p>Sun是一家技术公司，需要推广自己的产品。免费派送操作系统提升Sun硬件产品、Java，这种方式是明智的选择。但相对比较商业化一点的Oracle则认为Solaris只是一个众多产品线上其中的一环，并没有Sun之前认为的那种“中心化”地位——他们的中心是Oracle数据库。而且Oracle已经在用类似的方式进行了推广。或者至少说明Oracle认为没有必要同时免费派发这么多软件。</p>
<p style="text-align: center;"><a href="http://www.litrin.net/wp-content/uploads/2010/03/oracle_solaris_download_page.gif"><img class="size-medium wp-image-1209  aligncenter" title="oracle_solaris_download_page" src="http://www.litrin.net/wp-content/uploads/2010/03/oracle_solaris_download_page-300x286.gif" alt="" width="300" height="286" /></a></p>
<p>接下去，可能Solaris会被逐步边缘化，代码逐步合并到了Oracle Linux中——由于Linux遵循GPL，这样有可能出现Solaris和Linux的大混血。原本仅属于Sun Solaris的种种优势将会完全移植到Linux，这会Linux社区的幸运。或者出现完全相反的状况，Oracle Linux被边缘化，Solaris取代了它的地位。这样反而成为Linux的不幸，这是又一家大的商业公司的倒戈。</p>
<p>不管出现什么状况，最不幸的永远是opensolaris项目。要么会尾随Solaris退去光环，要么完全沦为小白鼠，一蹶不振，就如同Redhat之fedora。</p>
<p>那Mysql呢？后果已经“不容乐观”了，提起来伤心，不提也罢。</p>
<p><a href="http://www.litrin.net/wp-content/uploads/2010/03/oracle_solaris_download_page.gif"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/03/31/%e5%86%8d%e8%b0%88%e8%b0%88-oraclesun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>将Apache日志实时写入mysql</title>
		<link>http://www.litrin.net/2010/02/24/%e5%b0%86apache%e6%97%a5%e5%bf%97%e5%ae%9e%e6%97%b6%e5%86%99%e5%85%a5mysql/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e5%25b0%2586apache%25e6%2597%25a5%25e5%25bf%2597%25e5%25ae%259e%25e6%2597%25b6%25e5%2586%2599%25e5%2585%25a5mysql</link>
		<comments>http://www.litrin.net/2010/02/24/%e5%b0%86apache%e6%97%a5%e5%bf%97%e5%ae%9e%e6%97%b6%e5%86%99%e5%85%a5mysql/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 09:54:15 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[服务器]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1176</guid>
		<description><![CDATA[貌似 站长Litrin已经很久没有关注过LAMP的东西了。 作为网站运行来说，日志分析是一个很重要的工作。当一个网站的日志到了一定程度，或者一个网站同时有多台服务器的时候，传统的文本日志分析总会遇到瓶颈。 这个时候我就会想起强大的sql语句。看了网上很多人的帖子，都是将日志转成sql语句再导入的，搞得有点复杂。本方案不需要任何多余的软件和操作，一切全是实时、自动，供各位参考。 主机至少需要预安装apache(废话！)和mysql的客户端。如果访问量不大且服务器的资源管够的话可以将mysql装在本地，否则建议一台独立的mysql服务器。 在apache配置文件或者虚拟主机配置文件中面添加 LogFormat INSERT INTO apacheLog (ID, dateTime, IP, URL, code, referer, userAgent, size, request) VALUES ( NULL , \"%{%Y-%m-%d %H:%M:%S}t\", \"%a\", \"%U\", \"%&#62;s\", \" %{Referer}i\", \"%{User-Agent}i\", %b, %T);" sqlcomm CustomLog "&#124; /usr/local/Mysql --host=HOST --user=USER --password=PASSWORD --database=LITRIN_NET" sqlcomm 建立数据库apacheLog。 CREATE TABLE ` apacheLog ` ( `ID` int(11) NOT NULL auto_increment, `dateTime` datetime NOT [...]]]></description>
			<content:encoded><![CDATA[<p>貌似 站长Litrin已经很久没有关注过LAMP的东西了。</p>
<p>作为网站运行来说，日志分析是一个很重要的工作。当一个网站的日志到了一定程度，或者一个网站同时有多台服务器的时候，传统的文本日志分析总会遇到瓶颈。</p>
<p>这个时候我就会想起强大的sql语句。看了网上很多人的帖子，都是将日志转成sql语句再导入的，搞得有点复杂。本方案不需要任何多余的软件和操作，一切全是实时、自动，供各位参考。</p>
<p><span id="more-1176"></span></p>
<p>主机至少需要预安装apache(废话！)和mysql的客户端。如果访问量不大且服务器的资源管够的话可以将mysql装在本地，否则建议一台独立的mysql服务器。</p>
<p>在apache配置文件或者虚拟主机配置文件中面添加</p>
<pre>LogFormat INSERT INTO apacheLog (ID, dateTime, IP, URL, code, referer, userAgent, size, request) VALUES ( NULL , \"%{%Y-%m-%d %H:%M:%S}t\", \"%a\", \"%U\", \"%&gt;s\", \" %{Referer}i\", \"%{User-Agent}i\", %b, %T);" sqlcomm
CustomLog "| /usr/local/Mysql --host=HOST --user=USER --password=PASSWORD --database=LITRIN_NET" sqlcomm</pre>
<p>建立数据库apacheLog。</p>
<pre name=code class=sql>
CREATE TABLE ` apacheLog ` (
  `ID` int(11) NOT NULL auto_increment,
  `dateTime` datetime NOT NULL,
  `IP` varchar(15) NOT NULL,
  `URL` varchar(256) NOT NULL,
  `code` varchar(3) NOT NULL,
  `referer` varchar(256) NOT NULL,
  `userAgent` varchar(256) NOT NULL,
  `size` int(11) NOT NULL,
  `request` float NOT NULL,
  PRIMARY KEY  (`ID`),
  KEY `dateTime` (`dateTime`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;
</pre>
<p> 确认无误后重启apache生效！</p>
<p>其实整个流程很简单：先是利用LogFormat设置将日志转换为接近sql的格式，再通过CustomLog 调用pipe实现mysql写入。你也可以参照<a rel="nofollow" target="_blank" href="http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats">http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats</a>的格式设置写入自己关心的数据。<br />
此外，你也可以使用<code>SetEnvIf配合正则表达式过滤掉诸如图片、CSS、JS之类相对不重要的信息。</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/02/24/%e5%b0%86apache%e6%97%a5%e5%bf%97%e5%ae%9e%e6%97%b6%e5%86%99%e5%85%a5mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solaris连锁故障</title>
		<link>http://www.litrin.net/2010/02/22/solaris%e8%bf%9e%e9%94%81%e6%95%85%e9%9a%9c/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=solaris%25e8%25bf%259e%25e9%2594%2581%25e6%2595%2585%25e9%259a%259c</link>
		<comments>http://www.litrin.net/2010/02/22/solaris%e8%bf%9e%e9%94%81%e6%95%85%e9%9a%9c/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 06:19:29 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[solaris]]></category>
		<category><![CDATA[服务器]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1172</guid>
		<description><![CDATA[公司有一台服务器，属于经常被冷落的那种。SunV245 + solaris 10 + Oracle 10G 。自从装好机之后uptime至少有2年了。 且说这天需要重启，重启后无法通过ssh连接，通过串口终端连上之后发觉由于之前习惯于ssh key登录，一直没有root密码。郁闷中。 这台机器，一没有显卡，二没有光驱。实在让人头疼。七手八脚的把自己本本的光驱拆下来装在机器上，又发觉是自动硬盘启动的那种，无法光驱启动。 获得OK提示符 获得OK，相对比较容易，只是一般的键盘不是sun专用，没有那一堆控制键。 进入串口终端，启动机器并载入操作系统之后，在终端输入 #. 进入SC，运气不错，SC没有密码。输入break，再console回来就获得了Ok提示符。 获取root密码 进入OK后，放入solaris for sparc的盘，输入boot cdrom -s 进入修复系统。中间有一段比较漫长的等待。 进入系统后将硬盘 /dev/dsk/c1t0d0s0 挂装好之后找到硬盘上的etc/shadow。 将第一行的root:xxxxxxxxxxxx:14302:::::: 修改为root::14302:::::: 重新启动后用空密码就可以直接登系统。 SVCS问题 进入系统后，发现一大堆SVC服务无法启动，所有的问题都来自于一个关键应用 system-filesystem-local:default 无法正常启动。 tail /var/svc/log/system-filesystem-local:default.log 发觉有如下报错：WARNING: /sbin/mountall -l failed: exit status 1 不解，但既然是mount的问题，肯定和/etc/vfstab有关。打开这个文件，顿时就傻了——最后一行： /dev/dsk/c1t0d0s0       /dev/rdsk/c1t0d0s0      /       ufs     1       no &#8230;&#8230;. /dev/dsk/c1t3d0s0  /dev/rdsk/c1t3d0s0  /backup  ufs  0  yes  [...]]]></description>
			<content:encoded><![CDATA[<p>公司有一台服务器，属于经常被冷落的那种。SunV245 + solaris 10 + Oracle 10G 。自从装好机之后uptime至少有2年了。</p>
<p>且说这天需要重启，重启后无法通过ssh连接，通过串口终端连上之后发觉由于之前习惯于ssh key登录，一直没有root密码。郁闷中。</p>
<p><span id="more-1172"></span></p>
<p>这台机器，一没有显卡，二没有光驱。实在让人头疼。七手八脚的把自己本本的光驱拆下来装在机器上，又发觉是自动硬盘启动的那种，无法光驱启动。</p>
<p><strong>获得OK提示符</strong></p>
<p>获得OK，相对比较容易，只是一般的键盘不是sun专用，没有那一堆控制键。<br />
进入串口终端，启动机器并载入操作系统之后，在终端输入 #. 进入SC，运气不错，SC没有密码。输入break，再console回来就获得了Ok提示符。</p>
<p><strong>获取root密码</strong></p>
<p>进入OK后，放入solaris for sparc的盘，输入boot cdrom -s 进入修复系统。中间有一段比较漫长的等待。<br />
进入系统后将硬盘 /dev/dsk/c1t0d0s0 挂装好之后找到硬盘上的etc/shadow。<br />
将第一行的root:xxxxxxxxxxxx:14302:::::: 修改为root::14302::::::<br />
重新启动后用空密码就可以直接登系统。</p>
<p><strong>SVCS问题</strong></p>
<p>进入系统后，发现一大堆SVC服务无法启动，所有的问题都来自于一个关键应用 system-filesystem-local:default 无法正常启动。<br />
tail /var/svc/log/system-filesystem-local:default.log 发觉有如下报错：<span style="color: #ff0000;">WARNING: /sbin/mountall -l failed: exit status 1</span></p>
<p><span style="color: #000000;">不解，但既然是mount的问题，肯定和/etc/vfstab有关。打开这个文件，顿时就傻了——最后一行：<br />
</span><span style="color: #000000;">/dev/dsk/c1t0d0s0       /dev/rdsk/c1t0d0s0      /       ufs     <span style="text-decoration: underline;">1 </span>      no<br />
&#8230;&#8230;.</span><span style="color: #000000;"><br />
/dev/dsk/c1t3d0s0  /dev/rdsk/c1t3d0s0  /backup  ufs <span style="text-decoration: underline;"> 0</span>  yes  rw<br />
系统将/backup的挂装顺序设置为了0，/为1。这意味着系统默认会先挂/backup，后挂/。摆明了肯定会错。注释掉/backup这一行，问题解决！</span></p>
<p><span style="color: #000000;"><strong>分析</strong></span></p>
<p><span style="color: #000000;">问题出的无厘头。<br />
原来之前曾经对这个机器添加过硬盘，当时通过webmin直接修改的vfstab，webmin的一个bug导致了vfstab的错误。只是之前从未重启，也没暴露出来。<br />
没有root密码也是因为一直没有暴露出这个交接不清的问题。</span></p>
<p><span style="color: #000000;"><br />
<strong>Webmin BUG -&gt;硬盘挂装出错-&gt;fs关键服务不能启动-&gt;网络不启动-&gt;ssh不启动-&gt;无密码不能登入-&gt;需要OK提示符</strong></span><span style="color: #000000;">纠结~~~~</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/02/22/solaris%e8%bf%9e%e9%94%81%e6%95%85%e9%9a%9c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用SSH Tunnel穿越防火墙</title>
		<link>http://www.litrin.net/2010/02/09/%e7%94%a8ssh-tunnel%e7%a9%bf%e8%b6%8a%e9%98%b2%e7%81%ab%e5%a2%99/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e7%2594%25a8ssh-tunnel%25e7%25a9%25bf%25e8%25b6%258a%25e9%2598%25b2%25e7%2581%25ab%25e5%25a2%2599</link>
		<comments>http://www.litrin.net/2010/02/09/%e7%94%a8ssh-tunnel%e7%a9%bf%e8%b6%8a%e9%98%b2%e7%81%ab%e5%a2%99/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 02:17:06 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[桌面应用]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1164</guid>
		<description><![CDATA[这次接上篇。 很多企业对互联网的访问进行了限制，如何突破防火墙的限制成了一个问题。本文就是利用了SSH tunnel搭建了socket5代理。 首先，申请一个外网的ssh帐户，个人建议使用http://www.unix-center.net/提供的免费资源，该网站还提供多种平台主机可供测试之用，非常不错！当然，如果可以使用密钥方式登录那就完美了。 申请好账户之后，依然在本地安装ssh的客户端，windows推荐putty。 安装好后执行putty，在hostname里面输入主机名，或者用户名@主机名。我选了FreeBSD的那台，有兴趣的话还有ubuntu，Sun，甚至龙芯一系列主机可供挑选 选择ssh-&#62;tunnels，在source栏里添加你要提供的端口号，一般随便填一个未使用的端口就可，我用了8080端口。选择Dynamic，点击add。这里需要说明的是，如果你的主机允许别人使用的话，请勾选最上面的Local ports accept connection from other hosts。 点击Open确认连接，在接下来的窗口中输入用户名和密码。最小化窗口，不要关闭。 打开命令行，输入命令netstat -an，如果出现了你刚才输入的那个端口号的侦听，说明搭建成功！socket服务已经完成。 浏览器设置，IE:internet选项，连接，局域网设置，勾选“为LAN使用代理服务器”，高级，套接字选择127.0.0.1并填写端口号。完成设置。 对应的命令行： plink : plink -C -N -f -D 端口号 用户名@主机名 ssh: ssh  -C -N -f -D 端口号 用户名@主机名 PS: 话两头说，如果你负责一个企业局域网的话，稍大点的企业如果要限网，SSH端口是绝对要加以限制使用的。伟大的防火墙亦是如此。]]></description>
			<content:encoded><![CDATA[<p>这次接<a href="http://www.litrin.net/2010/02/03/%e7%94%a8ssh-tunnel%e6%89%93%e9%80%a0%e5%ae%89%e5%85%a8%e9%82%ae%e4%bb%b6%e7%b3%bb%e7%bb%9f/" target="_blank">上篇</a>。</p>
<p>很多企业对互联网的访问进行了限制，如何突破防火墙的限制成了一个问题。本文就是利用了SSH tunnel搭建了socket5代理。</p>
<p>首先，申请一个外网的ssh帐户，个人建议使用<a rel="nofollow" target="_blank" href="http://www.unix-center.net/">http://www.unix-center.net/</a>提供的免费资源，该网站还提供多种平台主机可供测试之用，非常不错！当然，如果可以使用密钥方式登录那就完美了。</p>
<p><span id="more-1164"></span></p>
<p>申请好账户之后，依然在本地安装ssh的客户端，windows推荐<a rel="nofollow" target="_blank" href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" target="_blank">putty</a>。</p>
<p>安装好后执行putty，在hostname里面输入主机名，或者用户名@主机名。我选了FreeBSD的那台，有兴趣的话还有ubuntu，Sun，甚至龙芯一系列主机可供挑选</p>
<div id="attachment_1166" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.litrin.net/wp-content/uploads/2010/02/ssh_proxy_putty_main.png"><img class="size-medium wp-image-1166" title="ssh_proxy_putty_main" src="http://www.litrin.net/wp-content/uploads/2010/02/ssh_proxy_putty_main-300x288.png" alt="Putty 主界面" width="300" height="288" /></a><p class="wp-caption-text">Putty 主界面</p></div>
<p>选择ssh-&gt;tunnels，在source栏里添加你要提供的端口号，一般随便填一个未使用的端口就可，我用了8080端口。选择Dynamic，点击add。这里需要说明的是，如果你的主机允许别人使用的话，请勾选最上面的Local ports accept connection from other hosts。</p>
<div id="attachment_1167" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.litrin.net/wp-content/uploads/2010/02/ssh_proxy_putty_tunnel_setting.png"><img class="size-medium wp-image-1167" title="ssh_proxy_putty_tunnel_setting" src="http://www.litrin.net/wp-content/uploads/2010/02/ssh_proxy_putty_tunnel_setting-300x288.png" alt="Putty ssh tunnel界面" width="300" height="288" /></a><p class="wp-caption-text">Putty ssh tunnel界面</p></div>
<p>点击Open确认连接，在接下来的窗口中输入用户名和密码。最小化窗口，不要关闭。</p>
<p>打开命令行，输入命令netstat -an，如果出现了你刚才输入的那个端口号的侦听，说明搭建成功！socket服务已经完成。</p>
<div id="attachment_1165" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.litrin.net/wp-content/uploads/2010/02/ssh_proxy_netstat.png"><img class="size-medium wp-image-1165" title="ssh_proxy_netstat" src="http://www.litrin.net/wp-content/uploads/2010/02/ssh_proxy_netstat-300x195.png" alt="netstat -an " width="300" height="195" /></a><p class="wp-caption-text">netstat -an </p></div>
<p>浏览器设置，IE:internet选项，连接，局域网设置，勾选“为LAN使用代理服务器”，高级，套接字选择127.0.0.1并填写端口号。完成设置。</p>
<div id="attachment_1168" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.litrin.net/wp-content/uploads/2010/02/ssh_proxy_IE.png"><img class="size-medium wp-image-1168" title="ssh_proxy_IE" src="http://www.litrin.net/wp-content/uploads/2010/02/ssh_proxy_IE-300x300.png" alt="IE 设置" width="300" height="300" /></a><p class="wp-caption-text">IE 设置</p></div>
<p>对应的命令行：</p>
<ol>
<li>plink : plink -C -N -f -D 端口号 用户名@主机名</li>
<li>ssh: ssh  -C -N -f -D 端口号 用户名@主机名</li>
</ol>
<p>PS:<br />
话两头说，如果你负责一个企业局域网的话，稍大点的企业如果要限网，SSH端口是绝对要加以限制使用的。伟大的防火墙亦是如此。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/02/09/%e7%94%a8ssh-tunnel%e7%a9%bf%e8%b6%8a%e9%98%b2%e7%81%ab%e5%a2%99/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>用ssh tunnel打造安全邮件系统</title>
		<link>http://www.litrin.net/2010/02/03/%e7%94%a8ssh-tunnel%e6%89%93%e9%80%a0%e5%ae%89%e5%85%a8%e9%82%ae%e4%bb%b6%e7%b3%bb%e7%bb%9f/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e7%2594%25a8ssh-tunnel%25e6%2589%2593%25e9%2580%25a0%25e5%25ae%2589%25e5%2585%25a8%25e9%2582%25ae%25e4%25bb%25b6%25e7%25b3%25bb%25e7%25bb%259f</link>
		<comments>http://www.litrin.net/2010/02/03/%e7%94%a8ssh-tunnel%e6%89%93%e9%80%a0%e5%ae%89%e5%85%a8%e9%82%ae%e4%bb%b6%e7%b3%bb%e7%bb%9f/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 14:33:01 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[桌面应用]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1156</guid>
		<description><![CDATA[近期，甚至于连Google这样的企业也感觉到了邮件系统的安全问题。这里采用了相对实现成本较低的方式，通过ssh的tunnel达到邮件在传输的过程中不会受到中间人攻击造成数据泄露。 故名思义，tunnel就是在邮件服务器和企业防火墙之后设置一条逻辑上的隧道。这条隧道一方面为了数据安全，另一方面，由于ssh的压缩功能也能在一定程度上减少邮件这类纯文本传输的网络需求。 先决条件： Unix like的邮件系统，并安装了ssh-server，本例中假定邮件服务器ip为1.2.3.4 企业路由器和内网：路由最好有vpn和防火墙功能。 内网的 一台主机，配置不必太高（我用了虚拟机，64M内存已经足够近百人使用），安装有ssh-client，如果是win主机，推荐使用putty的安装版本。经过测试，个人觉得FreeBSD下的性能较好。考虑到安全，这台主机尽量不要安装远程控制台并尽可能上锁。本例假定ip 192.168.1.1。 注意整个系统的安全策略，账户策略等，相比中间人攻击这样的“高级”黑客行为，破解密码，利用漏洞永远是成本最低的方法。 第一步：设置公钥方式登录： 内网主机上运行mkdir -p ~/.ssh;cd ~/.ssh;ssh-keygen –d，如果变态一点可以使用ssh-keygen -b 4096 -d增加强度，之后 不要输入任何信息，一律回车带过，很多人不能实现ssh的无验证通过，大多是因为这里没有弄好。这样~/.ssh目录下将会出现id_dsa 和id_dsa.pub两个文件。 将内网主机的id_dsa.pub文件拷贝邮件服务器，并在邮件服务器上执行cat id_dsa.pub &#62;&#62; ~/.ssh/authorized_keys 。尝试在内网主机上执行 ssh A主机的IP ，成功地话应该没有提示密码（即直接得到A主机的控制台）。 如果经常来小站做客的朋友会觉得这段很熟，没错它贴自这里，如果你用了windows作为内网主机，请参考这里的内容。 第二步：配置管道： 写个脚本 vi /usr/sbin/ssh_tunnel #!/bin/sh localIP='192.168.1.1' removteIP='1.2.3.4' ports='25 80 110' #3个端口，smtp http pop3 for port in $ports do /usr/bin/ssh -C -N -f -L $localIP:$port:$removteIP:$port root@$removteIP [...]]]></description>
			<content:encoded><![CDATA[<p>近期，甚至于连Google这样的企业也感觉到了邮件系统的安全问题。这里采用了相对实现成本较低的方式，通过ssh的tunnel达到邮件在传输的过程中不会受到中间人攻击造成数据泄露。</p>
<p>故名思义，tunnel就是在邮件服务器和企业防火墙之后设置一条逻辑上的隧道。这条隧道一方面为了数据安全，另一方面，由于ssh的压缩功能也能在一定程度上减少邮件这类纯文本传输的网络需求。</p>
<p>先决条件：</p>
<ol>
<li>Unix like的邮件系统，并安装了ssh-server，本例中假定邮件服务器ip为1.2.3.4</li>
<li>企业路由器和内网：路由最好有vpn和防火墙功能。</li>
<li>内网的 一台主机，配置不必太高（我用了虚拟机，64M内存已经足够近百人使用），安装有ssh-client，如果是win主机，推荐使用putty的安装版本。经过测试，个人觉得FreeBSD下的性能较好。考虑到安全，这台主机尽量不要安装远程控制台并尽可能上锁。本例假定ip 192.168.1.1。</li>
<li>注意整个系统的安全策略，账户策略等，相比中间人攻击这样的“高级”黑客行为，破解密码，利用漏洞永远是成本最低的方法。</li>
</ol>
<p><span id="more-1156"></span></p>
<div id="attachment_1161" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.litrin.net/wp-content/uploads/2010/02/ssh_tunnel.gif"><img class="size-medium wp-image-1161" title="ssh_tunnel" src="http://www.litrin.net/wp-content/uploads/2010/02/ssh_tunnel-300x115.gif" alt="SSH隧道实现安全mail" width="300" height="115" /></a><p class="wp-caption-text">SSH隧道实现安全Mail系统示意</p></div>
<p>第一步：设置公钥方式登录：</p>
<p>内网主机上运行mkdir -p ~/.ssh;cd ~/.ssh;<em>ssh-keygen –d，</em>如果变态一点可以使用ssh-keygen -b 4096 -d增加强度，之后<em> </em>不要输入任何信息，<strong>一律回车带过</strong>，很多人不能实现ssh的无验证通过，大多是因为这里没有弄好。这样~/.ssh目录下将会出现id_dsa 和id_dsa.pub两个文件。</p>
<p>将内网主机的id_dsa.pub文件拷贝邮件服务器，<strong>并在邮件服务器</strong><strong>上执行</strong><em>cat id_dsa.pub &gt;&gt; ~/.ssh/authorized_keys 。</em><strong>尝试在内网主机</strong><strong>上执行</strong> <em>ssh A</em><em>主机的IP </em>，成功地话应该没有提示密码（即直接得到A主机的控制台）。</p>
<p>如果经常来小站做客的朋友会觉得这段很熟，没错它贴自<a href="http://www.litrin.net/2007/09/29/%E6%90%AD%E5%BB%BA%E9%80%9A%E8%BF%87ssh%E5%8A%A0%E5%AF%86%E9%AA%8C%E8%AF%81%E7%9A%84rsync/" target="_blank">这里</a>，如果你用了windows作为内网主机，请参考<a href="http://www.litrin.net/2006/04/10/%E7%94%A8publickey%E9%AA%8C%E8%AF%81%E7%99%BB%E5%BD%95ssh%E6%9C%8D%E5%8A%A1%E5%99%A8/" target="_blank">这里的内容</a>。</p>
<p>第二步：配置管道：</p>
<div id="_mcePaste">写个脚本 vi /usr/sbin/ssh_tunnel</div>
<pre name=code class=bash>
#!/bin/sh
localIP='192.168.1.1'
removteIP='1.2.3.4'
ports='25 80 110' #3个端口，smtp http pop3
for port in $ports
do
    /usr/bin/ssh -C -N -f -L $localIP:$port:$removteIP:$port root@$removteIP  &#038;
done
chmod 755 /usr/sbin/ssh_tunnel
</pre>
<p>修改rc.local文件，在其中加入 /usr/sbin/ssh_tunnel，当然要放在exit那条之前。</p>
<p>windows不是很熟，写个笨蛋批处理吧ssh_tunnel.cmd</p>
<pre name=code class=bash>
start /min cmd /c 'C:\Program Files\PuTTY\plink.exe' -C -N -f -L 192.168.1.1:25:1.2.3.4:25 root@1.2.3.4
start /min cmd /c 'C:\Program Files\PuTTY\plink.exe' -C -N -f -L 192.168.1.1:80:1.2.3.4:80 root@1.2.3.4
start /min cmd /c 'C:\Program Files\PuTTY\plink.exe' -C -N -f -L 192.168.1.1:110:1.2.3.4:110 root@1.2.3.4
</pre>
<p>其实putty的那个plink效果完全等同于ssh，当然，win下面主要是用里面的窗口程序，大多数人不怎么用而已。win下比较烦的是每次重起后都要手工加载key，执行这个批处理。希望对win熟的朋友可以提供自动解决方法。</p>
<p>第三步：设置邮件服务器防火墙</p>
<p>通过邮件服务的防火墙关闭除25和22之外的所有端口。这样做是最安全的，但这样的后果是在企业局域网之外只能发不能收邮件。VPN是比较好的折中方案。当然，如果你的邮件系统只需要内部收发邮件（那还要什么邮件系统？），你尽可以连25号也封上。</p>
<p>第四步：设置本地邮件客户端</p>
<p>将局域网内所有邮件客户端的smtp和pop都设置为192.168.1.1即可。我这里由于用了webmail，webmail同样也通过192.168.1.1访问<br />
如果企业有自己的DNS服务器，甚至整个公司都在域管理模式之下。不妨通过本地的DNS服务器用本地IP覆盖掉外网真实IP。这样即便没有vpn，只要不封邮件服务器的110端口，在邮件客户端中设置域名，对用户来说在任何地方都是透明的。</p>
<p>总结：</p>
<ul>
<li>这种模式，从邮件服务器到企业局域网内的传输是加密透明的，外部很难窃取，如果定期为两边的ssh更换强化的秘钥，效果几乎可以达到变态的要求。据说4096位的秘钥的破解成本已经到了天文数字。</li>
<li>这种方式相对成本较低，不需要太多的投入，特别是在多个分支机构之间成本优势更加突出。本想通过smtp的tls和pop的SSL进行加密，可outlook下对没有根秘证书签名的秘钥会弹出讨厌的警告框，反而增加了用户的不安。申请根证书的签名价格也不菲。</li>
<li>由于企业的邮件系统最多的邮件往往来自于内部，这种方式可以减少差不多一半以上的互联网带宽。把带宽留给更重要的应用。</li>
<li>同理，利用此种方式可以实现其他多种安全方案，达到双宿主机或者多机虚拟的效果，进而可以为企业节约宝贵的外网IP资源。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/02/03/%e7%94%a8ssh-tunnel%e6%89%93%e9%80%a0%e5%ae%89%e5%85%a8%e9%82%ae%e4%bb%b6%e7%b3%bb%e7%bb%9f/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3G的阴谋</title>
		<link>http://www.litrin.net/2010/01/13/3g%e7%9a%84%e9%98%b4%e8%b0%8b/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=3g%25e7%259a%2584%25e9%2598%25b4%25e8%25b0%258b</link>
		<comments>http://www.litrin.net/2010/01/13/3g%e7%9a%84%e9%98%b4%e8%b0%8b/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 07:22:14 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[业界话题]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1146</guid>
		<description><![CDATA[原先跟父母一起住，共用一部直线。后来搬了家，那部直线跟随我一起迁到了新居。父母那边一直没有直线可以联络。听说移动推出了一款“无线固话”，从月租到花费都算是优惠，只要签订2年的合约，等于送了一部TD-SCDMA的固话。算计一下，很合适，于是到营业厅搞定一部。 例行手续，很多单据，领来了这么一个东西，华为的终端，配188的TD号，东西是不错。大概考虑到成本，电池容量做的出奇的小，待机时间很短，随预估成本不足100元，还算值。 套餐也不错，只要不把那个比普通电话还要大的玩意当手机拿来拿去，每月10块，6分钱一分钟。 不由的感叹：传说中的3G已经被移动这孩子糟成这样了。 一年前发的3G牌照，移动发到最差一张牌，TD；联通抽到了大怪WCDMA，会哭的孩子有奶吃；电信乖乖的领了CDMA2000，不是很好，尽管后续表现不差。 TD-SCDMA，国家安全战略的产物，一直苦于终端问题，也只有移动这样的怪兽级服务商才能搞的掂。好在作为交换，TD-SCDMA一直享受各种各样的补贴——“无线固话”就是这么一个奇怪的产物。移动似乎深知自己的短板所在，于是利用这低廉的成本，将3G概念搞烂，让所有人觉得3G是廉价货。同时加紧了4G的测试，只要熬过这段时间，很有可能移动将成为第一个提供4G的接入商，先入为主终端问题迎刃而解。顺顺利利的跳过3G直接上马4G，又可以将所有对手抛在“廉价货”的陷阱里。 我本想换联通的wcdma，全球无缝漫游，无奈需要换号，这正是联通最大的难题。最成熟、最低廉的3G解决方案，终端最多，一切都有章可循。只可惜这扶不起的阿斗一直在绕这个“网络怪圈”。当初联通失误，GSM没有成熟的网络就大量扩展市场，导致了知道现在依然存在信号差的问题。wo 3G明显针对的是年轻用户以及高收入地区人群。只要能够在资费上适当下降，很有前途。如果有一天允许携号转网，前途不可估量。前提是网络足够好，又绕回来了。 电信，始终老老实实的将目标定位为低端，搞固话绑定。策略注定了市场最终会受限，但至少现在来说属他在3G市场中最具杀伤力，但同样也存在换号的问题。 移动已经在事实上绑架了我们。不妨买点中国联通的股票，这样的话，移动搞出了4G，你的号码就升值了，可喜可贺，Wcdma战胜td，有的钱赚，可喜可贺！ 要玩3G？等吧，移动4G、携号转网、或者联通网络质的提升、或者……CDMA2000成为中国3G的事实标准。貌似哪一个都可望不可及。好在现在3G除了资费称不上便宜，而且www之外没有一个应用足够吸引人，www本身又不是for 3G only。]]></description>
			<content:encoded><![CDATA[<p>原先跟父母一起住，共用一部直线。后来搬了家，那部直线跟随我一起迁到了新居。父母那边一直没有直线可以联络。听说移动推出了一款“无线固话”，从月租到花费都算是优惠，只要签订2年的合约，等于送了一部TD-SCDMA的固话。算计一下，很合适，于是到营业厅搞定一部。</p>
<p>例行手续，很多单据，领来了这么一个东西，华为的终端，配188的TD号，东西是不错。大概考虑到成本，电池容量做的出奇的小，待机时间很短，随预估成本不足100元，还算值。<br />
套餐也不错，只要不把那个比普通电话还要大的玩意当手机拿来拿去，每月10块，6分钱一分钟。</p>
<p><span id="more-1146"></span></p>
<p><strong>不由的感叹：传说中的3G已经被移动这孩子糟成这样了。</strong></p>
<p>一年前发的3G牌照，移动发到最差一张牌，TD；联通抽到了大怪WCDMA，会哭的孩子有奶吃；电信乖乖的领了CDMA2000，不是很好，尽管后续表现不差。</p>
<p>TD-SCDMA，国家安全战略的产物，一直苦于终端问题，也只有移动这样的怪兽级服务商才能搞的掂。好在作为交换，TD-SCDMA一直享受各种各样的补贴——“无线固话”就是这么一个奇怪的产物。移动似乎深知自己的短板所在，于是利用这低廉的成本，将3G概念搞烂，让所有人觉得3G是廉价货。同时加紧了4G的测试，只要熬过这段时间，很有可能移动将成为第一个提供4G的接入商，先入为主终端问题迎刃而解。顺顺利利的跳过3G直接上马4G，又可以将所有对手抛在“廉价货”的陷阱里。</p>
<p>我本想换联通的wcdma，全球无缝漫游，无奈需要换号，这正是联通最大的难题。最成熟、最低廉的3G解决方案，终端最多，一切都有章可循。只可惜这扶不起的阿斗一直在绕这个“网络怪圈”。当初联通失误，GSM没有成熟的网络就大量扩展市场，导致了知道现在依然存在信号差的问题。wo 3G明显针对的是年轻用户以及高收入地区人群。只要能够在资费上适当下降，很有前途。如果有一天允许携号转网，前途不可估量。前提是网络足够好，又绕回来了。</p>
<p>电信，始终老老实实的将目标定位为低端，搞固话绑定。策略注定了市场最终会受限，但至少现在来说属他在3G市场中最具杀伤力，但同样也存在换号的问题。</p>
<p>移动已经在事实上绑架了我们。不妨买点中国联通的股票，这样的话，移动搞出了4G，你的号码就升值了，可喜可贺，Wcdma战胜td，有的钱赚，可喜可贺！</p>
<p>要玩3G？等吧，移动4G、携号转网、或者联通网络质的提升、或者……CDMA2000成为中国3G的事实标准。貌似哪一个都可望不可及。好在现在3G除了资费称不上便宜，而且www之外没有一个应用足够吸引人，www本身又不是for 3G only。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/01/13/3g%e7%9a%84%e9%98%b4%e8%b0%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>virtual server上安装ubuntu</title>
		<link>http://www.litrin.net/2010/01/11/virtual-server%e4%b8%8a%e5%ae%89%e8%a3%85ubuntu/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=virtual-server%25e4%25b8%258a%25e5%25ae%2589%25e8%25a3%2585ubuntu</link>
		<comments>http://www.litrin.net/2010/01/11/virtual-server%e4%b8%8a%e5%ae%89%e8%a3%85ubuntu/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 08:07:19 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[服务器]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1141</guid>
		<description><![CDATA[都说MS 的virtual server仅能够支持MS自家的系统。比如解决了的xorg桌面的显示问题。  这次在virtual server上安装ubuntu 804 server，每次跳出启动选项之后，选择好语言之后，启动安装程序，虚拟机马上重启。一开始以为是ACPI的问题，关闭了acpi之后，故障依旧。久而久之发现问题的规律是只会出现在成功启用了“硬件辅助虚拟化功能”的虚拟机上。    多次失败之后，找到了解决方法：  利用光盘启动好之后，选择好语言之后，进入Ubuntu的启动选项界面。 如果您安装的是desktop版本，按F4键，选择“安全图形模式”。Server版本直接跳过这一步。 按F6，修改启动参数，原版本为 &#8216;XXXXXX quiet splash &#8211;&#8217; ，删除掉后面的 &#8216;&#8211;&#8217; ，当然，你也可以直接删除quiet splash跳过飞溅界面。添加 vga=791 noreplace-paravirt ，直接按回车启动。 完成安装。 第一次启动载入grub时，直接esc编辑grub 设置，将kenerl那一行的末尾同样加上vga=791 noreplace-paravirt ，按b键启动。 这种方法似乎也支持Fedora一类的Linux。  noreplace-paravirt这个模块，网络上解释的很少。根据字面分析大致是一旦启用了硬件虚拟化支持以后，内核的一部分机器码将会被替换，强制操作系统关闭这个功能之后，系统才能正常启动。 PS:关于vga=791的解释 vga的模式分为如下几种，以及相互对应的数字标识 16 進位表示: pixel 640&#215;480 800&#215;600 1024&#215;768 1280&#215;1024 text 80&#215;30 100&#215;37 128&#215;48 160&#215;64 256 0&#215;301 0&#215;303 0&#215;305 0&#215;307 32k 0&#215;310 0&#215;313 0&#215;316 0&#215;319 64k [...]]]></description>
			<content:encoded><![CDATA[<p>都说MS 的virtual server仅能够支持MS自家的系统。比如<a href="http://www.litrin.net/2008/02/19/virtual-server-virtual-pc%e4%b8%8blinux%e6%a1%8c%e9%9d%a2%e7%9a%84%e9%97%ae%e9%a2%98/" target="_blank">解决了的xorg桌面的显示问题</a>。 </p>
<p>这次在virtual server上安装ubuntu 804 server，每次跳出启动选项之后，选择好语言之后，启动安装程序，虚拟机马上重启。一开始以为是ACPI的问题，关闭了acpi之后，故障依旧。久而久之发现问题的规律是只会出现在成功启用了“硬件辅助虚拟化功能”的虚拟机上。 </p>
<p><span id="more-1141"></span> </p>
<p>多次失败之后，找到了解决方法： </p>
<ol>
<li>利用光盘启动好之后，选择好语言之后，进入Ubuntu的启动选项界面。</li>
<li>如果您安装的是desktop版本，按F4键，选择“安全图形模式”。Server版本直接跳过这一步。</li>
<li>按F6，修改启动参数，原版本为 &#8216;XXXXXX quiet splash &#8211;&#8217; ，删除掉后面的 &#8216;&#8211;&#8217; ，当然，你也可以直接删除quiet splash跳过飞溅界面。添加 <strong>vga=791 noreplace-paravirt </strong>，直接按回车启动。</li>
<li>完成安装。</li>
<li>第一次启动载入grub时，直接esc编辑grub 设置，将kenerl那一行的末尾同样加上<strong>vga=791 noreplace-paravirt ，</strong>按b键启动。</li>
</ol>
<div id="attachment_1142" class="wp-caption alignleft" style="width: 310px"><a href="http://www.litrin.net/wp-content/uploads/2010/01/MSVS-ubutnu.png"><img class="size-medium wp-image-1142" style="vertical-align: middle;" title="ms virtual server 安装 ubuntu Linux " src="http://www.litrin.net/wp-content/uploads/2010/01/MSVS-ubutnu-300x248.png" alt="ms virtual server 安装 ubuntu Linux" width="300" height="248" /></a><p class="wp-caption-text">ms virtual server 安装 ubuntu Linux </p></div>
<p>这种方法似乎也支持Fedora一类的Linux。 </p>
<p>noreplace-paravirt这个模块，网络上解释的很少。根据字面分析大致是一旦启用了硬件虚拟化支持以后，内核的一部分机器码将会被替换，强制操作系统关闭这个功能之后，系统才能正常启动。</p>
<p>PS:关于vga=791的解释</p>
<p>vga的模式分为如下几种，以及相互对应的数字标识</p>
<p>16 進位表示:</p>
<blockquote>
<table id="table1" border="0" cellpadding="3">
<tbody>
<tr>
<td align="right">pixel</td>
<td>640&#215;480</td>
<td>800&#215;600</td>
<td>1024&#215;768</td>
<td>1280&#215;1024</td>
</tr>
<tr>
<td align="right">text</td>
<td align="right">80&#215;30</td>
<td align="right">100&#215;37</td>
<td align="right">128&#215;48</td>
<td align="right">160&#215;64</td>
</tr>
<tr>
<td align="right">256</td>
<td align="right">0&#215;301</td>
<td align="right">0&#215;303</td>
<td align="right">0&#215;305</td>
<td align="right">0&#215;307</td>
</tr>
<tr>
<td align="right">32k</td>
<td align="right">0&#215;310</td>
<td align="right">0&#215;313</td>
<td align="right">0&#215;316</td>
<td align="right">0&#215;319</td>
</tr>
<tr>
<td align="right">64k</td>
<td align="right">0&#215;311</td>
<td align="right">0&#215;314</td>
<td align="right">0&#215;317</td>
<td align="right">0x31A</td>
</tr>
<tr>
<td align="right">16M</td>
<td align="right">0&#215;312</td>
<td align="right">0&#215;315</td>
<td align="right">0&#215;318</td>
<td align="right">0x31B</td>
</tr>
</tbody>
</table>
</blockquote>
<p>10 進位表示:</p>
<blockquote>
<table id="table2" border="0" cellpadding="3">
<tbody>
<tr>
<td align="right">pixel</td>
<td>640&#215;480</td>
<td>800&#215;600</td>
<td>1024&#215;768</td>
<td>1280&#215;1024</td>
</tr>
<tr>
<td align="right">text</td>
<td align="right">80&#215;30</td>
<td align="right">100&#215;37</td>
<td align="right">128&#215;48</td>
<td align="right">160&#215;64</td>
</tr>
<tr>
<td align="right">256</td>
<td align="right">769</td>
<td align="right">771</td>
<td align="right">773</td>
<td align="right">775</td>
</tr>
<tr>
<td align="right">32k</td>
<td align="right">784</td>
<td align="right">787</td>
<td align="right">790</td>
<td align="right">793</td>
</tr>
<tr>
<td align="right">64k</td>
<td align="right">785</td>
<td align="right">788</td>
<td align="right">791</td>
<td align="right">794</td>
</tr>
<tr>
<td align="right">16M</td>
<td align="right">786</td>
<td align="right">789</td>
<td align="right">792</td>
<td align="right">795</td>
</tr>
</tbody>
</table>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2010/01/11/virtual-server%e4%b8%8a%e5%ae%89%e8%a3%85ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为GIMP的退出叫好</title>
		<link>http://www.litrin.net/2009/12/22/%e4%b8%bagimp%e7%9a%84%e9%80%80%e5%87%ba%e5%8f%ab%e5%a5%bd/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e4%25b8%25bagimp%25e7%259a%2584%25e9%2580%2580%25e5%2587%25ba%25e5%258f%25ab%25e5%25a5%25bd</link>
		<comments>http://www.litrin.net/2009/12/22/%e4%b8%bagimp%e7%9a%84%e9%80%80%e5%87%ba%e5%8f%ab%e5%a5%bd/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 02:00:33 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[开源7788]]></category>
		<category><![CDATA[redhat]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[业界话题]]></category>
		<category><![CDATA[桌面应用]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1136</guid>
		<description><![CDATA[自从第一次接触Linux的桌面版，我就认识了GIMP这个软件。印象最深的就是那个戴着“南瓜帽”的小狐狸形象。近期得到消息，Ubuntu这个目前拥有最大Linux Desktop份额的发行版从下一版本（1004）后正式将GIMP排除在默认安装包之外。 从GIMP本身说起，这是一个很强大的图片编辑软件，很多功能已经达到或者超过了昂贵的Photoshop。曾经用它处理过几次图片，效果也很让我满意。但作为Linux桌面版必备的软件，它的利用率可能是最低的了——有太多太多的软件可以替代它的位置，而且不同于OpenOffice，你无法要求每一个Linux用户都修改图片，或者已经被PS浸染的人回过头来用这个甚至买不到一本参考书的GIMP。 就像windows这个系统始终被诟病的捆绑，捆绑的仅仅是几乎人人都会用到的浏览器而已，甚至稍微常用点的MS office都不在捆绑之列。如果有一天windows将他们的Virtual Studio绑进操作系统，那会是多么滑稽的事。 Linux的开发者目前存在的最大问题似乎就在这里，对最终受众的技能要求过高。我也曾见过论坛上新手问诸如文本编辑器之类的问题，却被老手们“强迫”使用vi这类巨复杂的工具来实现。仿佛只有把事情搞的复杂了，搞的小众了才能显示出“老手”的能耐。计算机作为机器最终是要为人服务的，没有必要为了更好的为机器服务一次让人去学他们本身就不感兴趣的东西。 想起当初redhat曾经在自带游戏里边放置了一个叫做x-bill的游戏。这个游戏主要的内容似乎是和一个虚拟的Bill先生抢占PC，Bill先生会在每台机器上做一个windows标记，你的任务就是做企鹅标记，并把windows标记的PC扔进垃圾桶。说实在的这个游戏确实很无趣，但这个游戏本身的设计到被选入Redhat发行包的整个过程都代表了很多Linuxer的理念。可惜的是，你不能要求每一个用户都参与到这个游戏中，不能仅仅依靠一腔热情的完成这个游戏。 只有包容所有受众的、不令人望而生畏的操作系统才是最好的。为GIMP的退居二线而叫好！]]></description>
			<content:encoded><![CDATA[<p>自从第一次接触Linux的桌面版，我就认识了GIMP这个软件。印象最深的就是那个戴着“南瓜帽”的小狐狸形象。近期得到消息，Ubuntu这个目前拥有最大Linux Desktop份额的发行版从下一版本（1004）后正式将GIMP排除在默认安装包之外。</p>
<p>从GIMP本身说起，这是一个很强大的图片编辑软件，很多功能已经达到或者超过了昂贵的Photoshop。曾经用它处理过几次图片，效果也很让我满意。但作为Linux桌面版必备的软件，它的利用率可能是最低的了——有太多太多的软件可以替代它的位置，而且不同于OpenOffice，你无法要求每一个Linux用户都修改图片，或者已经被PS浸染的人回过头来用这个甚至买不到一本参考书的GIMP。</p>
<p><span id="more-1136"></span></p>
<p>就像windows这个系统始终被诟病的捆绑，捆绑的仅仅是几乎人人都会用到的浏览器而已，甚至稍微常用点的MS office都不在捆绑之列。如果有一天windows将他们的Virtual Studio绑进操作系统，那会是多么滑稽的事。</p>
<p>Linux的开发者目前存在的最大问题似乎就在这里，对最终受众的技能要求过高。我也曾见过论坛上新手问诸如文本编辑器之类的问题，却被老手们“强迫”使用vi这类巨复杂的工具来实现。仿佛只有把事情搞的复杂了，搞的小众了才能显示出“老手”的能耐。计算机作为机器最终是要为人服务的，没有必要为了更好的为机器服务<strong>一次</strong>让人去学他们本身就不感兴趣的东西。</p>
<p>想起当初redhat曾经在自带游戏里边放置了一个叫做x-bill的游戏。这个游戏主要的内容似乎是和一个虚拟的Bill先生抢占PC，Bill先生会在每台机器上做一个windows标记，你的任务就是做企鹅标记，并把windows标记的PC扔进垃圾桶。说实在的这个游戏确实很无趣，但这个游戏本身的设计到被选入Redhat发行包的整个过程都代表了很多Linuxer的理念。可惜的是，你不能要求每一个用户都参与到这个游戏中，不能仅仅依靠一腔热情的完成这个游戏。</p>
<p>只有包容所有受众的、不令人望而生畏的操作系统才是最好的。为GIMP的退居二线而叫好！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2009/12/22/%e4%b8%bagimp%e7%9a%84%e9%80%80%e5%87%ba%e5%8f%ab%e5%a5%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu下安装oracle11G up2</title>
		<link>http://www.litrin.net/2009/11/30/ubuntu%e4%b8%8b%e5%ae%89%e8%a3%85oracle11g-up2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ubuntu%25e4%25b8%258b%25e5%25ae%2589%25e8%25a3%2585oracle11g-up2</link>
		<comments>http://www.litrin.net/2009/11/30/ubuntu%e4%b8%8b%e5%ae%89%e8%a3%85oracle11g-up2/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 07:39:38 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[硬件相关]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1118</guid>
		<description><![CDATA[oracle的11G总算到了up2，这次的升级个人感觉最大的改善就是将clustter包成了标准包的一部分，看起来今后oracle数据库要越发的使用更多的机器了。目前官方只提供了Solaris和Linux的安装包，Win以及其他操作系统看起来还是要等。 oracle官方建议的linux仅限于Redhat, Suse, Asianux以及oracle自家的linux。但作为测试的一部分，我选择了ubuntu的新版本910 AMD64 server作为平台。不过理论上使用ubuntu Desktop或者Xubuntu更省力一点。系统内存为8G，根据建议（如下），设置了8G的swap。 之前还有一篇solaris下10up2的安装可以参考 Between 0 MB and 256 MB 3 times the size of RAM Between 256 MB and 512 MB 2 times the size of RAM Between 512 MB and 2 GB 1.5 times the size of RAM Between 2 GB and 16 GB Equal to the size of [...]]]></description>
			<content:encoded><![CDATA[<p>oracle的11G总算到了up2，这次的升级个人感觉最大的改善就是将clustter包成了标准包的一部分，看起来今后oracle数据库要越发的使用更多的机器了。目前官方只提供了<a rel="nofollow" target="_blank" href="http://www.oracle.com/technology/software/products/database/index.html">Solaris和Linux的安装包</a>，Win以及其他操作系统看起来还是要等。</p>
<p>oracle官方建议的linux仅限于Redhat, Suse, Asianux以及oracle自家的linux。但作为测试的一部分，我选择了ubuntu的新版本910 AMD64 server作为平台。不过理论上使用ubuntu Desktop或者Xubuntu更省力一点。系统内存为8G，根据建议（如下），设置了8G的swap。</p>
<p><a href="http://www.litrin.net/2007/11/15/solaris%e4%b8%8b%e5%ae%89%e8%a3%85oracle-10-up-2/" target="_blank">之前还有一篇solaris下10up2的安装可以参考</a></p>
<table title="RAM and Swap Space Relationship" dir="ltr" border="1" cellspacing="0" cellpadding="3" width="100%" frame="hsides" rules="groups" summary="RAM and swap space relationship">
<tbody>
<tr align="left" valign="top">
<td id="r2c1-t6" align="left">Between 0 MB and 256 MB</td>
<td align="left">3 times the size of RAM</td>
</tr>
<tr align="left" valign="top">
<td id="r3c1-t6" align="left">Between 256 MB and 512 MB</td>
<td align="left">2 times the size of RAM</td>
</tr>
<tr align="left" valign="top">
<td id="r4c1-t6" align="left">Between 512 MB and 2 GB</td>
<td align="left">1.5 times the size of RAM</td>
</tr>
<tr align="left" valign="top">
<td id="r5c1-t6" align="left">Between 2 GB and 16 GB</td>
<td align="left">Equal to the size of RAM</td>
</tr>
<tr align="left" valign="top">
<td id="r6c1-t6" align="left">More than 16 GB</td>
<td align="left">16 GB</td>
</tr>
</tbody>
</table>
<p><span id="more-1118"></span></p>
<p>安装完毕后还是个人习惯性的那一套：<br />
#sudo apt-get update<br />
#sudo apt-get upgrade</p>
<p>升级结束后安装必要的库：<br />
#sudo apt-get install gnome-core unzip build-essential libaio-dev(ms libaio 就可以)</p>
<p>设置环境变量：<br />
修改/etc/bash.bashrc，在末尾添加如下内容<br />
<code>ORACLE_HOME=/opt/oracle/product/11.2.0/Db_1<br />
export ORACLE_HOME<br />
ORACLE_BASE=/opt/oracle<br />
export ORACLE_BASE<br />
NLS_LANG=american_america.zhs16gbk<br />
export NLS_LANG<br />
PATH=$PATH:$ORACLE_HOME/bin<br />
ORACLE_SID=orcl<br />
export ORACLE_SID<br />
</code><br />
修改内核参数：（官方文档没有提及，保险起见，还是添加了）<br />
<code><br />
fs.file-max = 6815744<br />
fs.aio-max-nr = 1048576<br />
kernel.shmall = 2097152<br />
kernel.shmmax = 2147483648<br />
kernel.shmmni = 4096<br />
kernel.sem = 250 32000 100 128<br />
net.ipv4.ip_local_port_range = 9000 65500<br />
net.core.rmem_default = 262144<br />
net.core.rmem_max = 4194304<br />
net.core.wmem_default = 262144<br />
net.core.wmem_max = 1048576<br />
</code></p>
<p><code>重起机器。</code></p>
<p><code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2009/11/30/ubuntu%e4%b8%8b%e5%ae%89%e8%a3%85oracle11g-up2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>圈圈</title>
		<link>http://www.litrin.net/2009/11/20/%e5%9c%88%e5%9c%88/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e5%259c%2588%25e5%259c%2588</link>
		<comments>http://www.litrin.net/2009/11/20/%e5%9c%88%e5%9c%88/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 08:30:32 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[开源7788]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[业界话题]]></category>
		<category><![CDATA[桌面应用]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1105</guid>
		<description><![CDATA[就在今天Google宣布了他蓄谋已久的，以一个三色圈圈为Logo的单机操作系统——Chrome OS。由于正如Google的手机操作系统一样，这次又是一个Linux内核的操作系统。 Google的理念是：既然浏览器逐渐成为了一台PC最常用的软件，那为什么不把它升级为PC中唯一的软件？理念看似很超前。 不禁想起了N多年前IBM的预言：最终全世界只需要4台主机。这个想法至今看起来仍然很荒谬。但可以看得出，google以致这一阶段很是热门的“云计算”概念其实也是在实现IBM的理想。 说道这个理念，就不妨谈谈微软，这个利用一句：“每个书桌上都应该有一台PC。”瓦解了IBM的痴心妄想。IBM当初是专注于硬件的，最赚钱的是卖超级计算机而不是白菜价的PC，所以他们后来才会把PC业务卖掉；微软是做软件的，一台PC收一份钱，越多越好；google是做服务的，集中起来才能将效益最大。现在软件都像当初硬件一样“白菜化”了，今后如何。重新定义，再次赚钱。 当初IBM理念的失败之处在于错误的估计了网络的因素，将终端单纯的理解为了瘦客户机，之后成功转型为服务型公司，避免了老冤家SUN那样的命运。微软的成功之处在于利用了从90~10这20年左右的时间差猛赚了一笔，成了行业的领跑者。google的领先在于发现了如何通过免费的服务来赚钱；通过免费的午餐抓住所有人的命脉，并不断的引领下一个时代的网络发展。 我个人认为将来的互联网终端绝对不是PC的天下——从3G手机到物联网无一例外的传达了一个信息：未来通过什么东西上网是次要的，通过什么方式接入互联网是次要的，关键是用网络来干什么。随着传统PC逐步的被边缘化之后，将会有一个新的硬件平台取代当前PC的上网功能，现在还不知道那会是什么，但绝对不会是“上网本”这类的过渡产品。 三色的圈圈大概涵义如此吧。看云识天气。 就说这么多，有空再侃。]]></description>
			<content:encoded><![CDATA[<p>就在今天Google宣布了他蓄谋已久的，以一个三色圈圈为Logo的单机操作系统——<a rel="nofollow" target="_blank" href="http://google.org.cn/posts/live-blog-google-chrome-os-press-event.html" target="_blank">Chrome OS</a>。由于正如Google的手机操作系统一样，这次又是一个Linux内核的操作系统。</p>
<p>Google的理念是：既然浏览器逐渐成为了一台PC最常用的软件，那为什么不把它升级为PC中唯一的软件？理念看似很超前。</p>
<p>不禁想起了N多年前IBM的预言：最终全世界只需要4台主机。这个想法至今看起来仍然很荒谬。但可以看得出，google以致这一阶段很是热门的“云计算”概念其实也是在实现IBM的理想。</p>
<p>说道这个理念，就不妨谈谈微软，这个利用一句：“每个书桌上都应该有一台PC。”瓦解了IBM的痴心妄想。IBM当初是专注于硬件的，最赚钱的是卖超级计算机而不是白菜价的PC，所以他们后来才会把PC业务卖掉；微软是做软件的，一台PC收一份钱，越多越好；google是做服务的，集中起来才能将效益最大。现在软件都像当初硬件一样“白菜化”了，今后如何。重新定义，再次赚钱。</p>
<p><span id="more-1105"></span></p>
<p>当初IBM理念的失败之处在于错误的估计了网络的因素，将终端单纯的理解为了瘦客户机，之后成功转型为服务型公司，避免了老冤家SUN那样的命运。微软的成功之处在于利用了从90~10这20年左右的时间差猛赚了一笔，成了行业的领跑者。google的领先在于发现了如何通过免费的服务来赚钱；通过免费的午餐抓住所有人的命脉，并不断的引领下一个时代的网络发展。</p>
<p>我个人认为将来的互联网终端绝对不是PC的天下——从3G手机到物联网无一例外的传达了一个信息：未来通过什么东西上网是次要的，通过什么方式接入互联网是次要的，关键是用网络来干什么。随着传统PC逐步的被边缘化之后，将会有一个新的硬件平台取代当前PC的上网功能，现在还不知道那会是什么，但绝对不会是“上网本”这类的过渡产品。</p>
<p>三色的圈圈大概涵义如此吧。看云识天气。</p>
<p>就说这么多，有空再侃。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2009/11/20/%e5%9c%88%e5%9c%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>人机接口问题</title>
		<link>http://www.litrin.net/2009/11/15/%e4%ba%ba%e6%9c%ba%e6%8e%a5%e5%8f%a3%e9%97%ae%e9%a2%98/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e4%25ba%25ba%25e6%259c%25ba%25e6%258e%25a5%25e5%258f%25a3%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://www.litrin.net/2009/11/15/%e4%ba%ba%e6%9c%ba%e6%8e%a5%e5%8f%a3%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 08:40:17 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[开源7788]]></category>
		<category><![CDATA[站长的blog]]></category>
		<category><![CDATA[业界话题]]></category>
		<category><![CDATA[硬件相关]]></category>
		<guid isPermaLink="false">http://www.litrin.net/?p=1103</guid>
		<description><![CDATA[刚换了手机——号称街机的Nokia 5800XM。第一次用这种全触控的手机，感觉没有键盘相当不便，需要不少的时间来适应。人机接口出了问题，需要调试。 作为一个IT人，我总是觉得整个人的社会的合作机制就是类似于程序的接口那样，不同的人负责不同的模块，经过各方面通过统一的方式进行通讯，完成了一个复杂的功能。在你负责以外的模块中，你也许不需要了解别的模块是如何工作的，你只要试图更加优化自己模块内部的流程细节那就会优化整个项目甚至整个社会的效率。如果说跟某些人无法完全交流（例如外国人）那就是可以看作是“接口不统一”。各种通讯方式和交流方式就成了一种远离于主体模块之间的整理及传输流程。 作为传统中国人理解下的模块之间的运作，可能是基于权利以及权利的转移，所以坊间的各种传闻总是基于权利的某种形式的表达。作为西方人传统下的模块运作，更多的是基于利益和利益的转移，所以就有了董事会这一产物。不巧的是，所谓全球化就是对于这两种方式的碰撞和融合的过程。 绕回来，作为人类进化过程中社会分工的基础是语言。这个接口不见得是效率最高的，但绝对是最便捷的覆盖范围最广（可以完全覆盖肢体残疾和视觉障碍）的接口。感觉目前人机接口却根本没有去好好利用这个最简单的接口，只是一味的追求视觉和触觉的交流。为什么要人去适应冷冰冰的机器，而不是让机器去适应人的交流方式。个人认为如果在UI技术上能有突破的话，不会出现在诸如“多点触控”或者“立体呈现”之类的技术上。语音技术/声音技术的实际应用将会是下一代UI的目标，当这个目标实现以后，部分视觉元素和键盘输入在一定程度上反而会退居二线，甚至完全消失。当然前提是技术足够成熟，而不是现阶段简单的机械合成，语音识别。]]></description>
			<content:encoded><![CDATA[<p>刚换了手机——号称街机的Nokia 5800XM。第一次用这种全触控的手机，感觉没有键盘相当不便，需要不少的时间来适应。人机接口出了问题，需要调试。</p>
<p>作为一个IT人，我总是觉得整个人的社会的合作机制就是类似于程序的接口那样，不同的人负责不同的模块，经过各方面通过统一的方式进行通讯，完成了一个复杂的功能。在你负责以外的模块中，你也许不需要了解别的模块是如何工作的，你只要试图更加优化自己模块内部的流程细节那就会优化整个项目甚至整个社会的效率。如果说跟某些人无法完全交流（例如外国人）那就是可以看作是“接口不统一”。各种通讯方式和交流方式就成了一种远离于主体模块之间的整理及传输流程。<span id="more-1103"></span></p>
<p>作为传统中国人理解下的模块之间的运作，可能是基于权利以及权利的转移，所以坊间的各种传闻总是基于权利的某种形式的表达。作为西方人传统下的模块运作，更多的是基于利益和利益的转移，所以就有了董事会这一产物。不巧的是，所谓全球化就是对于这两种方式的碰撞和融合的过程。</p>
<p>绕回来，作为人类进化过程中社会分工的基础是语言。这个接口不见得是效率最高的，但绝对是最便捷的覆盖范围最广（可以完全覆盖肢体残疾和视觉障碍）的接口。感觉目前人机接口却根本没有去好好利用这个最简单的接口，只是一味的追求视觉和触觉的交流。为什么要人去适应冷冰冰的机器，而不是让机器去适应人的交流方式。个人认为如果在UI技术上能有突破的话，不会出现在诸如“多点触控”或者“立体呈现”之类的技术上。语音技术/声音技术的实际应用将会是下一代UI的目标，当这个目标实现以后，部分视觉元素和键盘输入在一定程度上反而会退居二线，甚至完全消失。当然前提是技术足够成熟，而不是现阶段简单的机械合成，语音识别。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2009/11/15/%e4%ba%ba%e6%9c%ba%e6%8e%a5%e5%8f%a3%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
