<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Yuan's Blog</title>
 <link href="http://blog.xuyuan.me/feed" rel="self"/>
 <link href="http://blog.xuyuan.me"/>
 <updated>2017-08-10T08:36:57+00:00</updated>
 <id>http://blog.xuyuan.me</id>
 <author>
   <name>xuyuanme</name>
   <email>xuyuanme@gmail.com</email>
 </author>

 
 <entry>
   <title>Run Spark with IPython Notebook on Local Windows System</title>
   <link href="http://blog.xuyuan.me/2017/08/09/spark-ipython.html"/>
   <updated>2017-08-09T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2017/08/09/spark-ipython</id>
   <content type="html">&lt;p&gt;This article is an instruction for user to setup local Spark learning and debug environment.&lt;/p&gt;&lt;p&gt;The tools need to be installed:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;JDK 1.7+&lt;/li&gt;
  &lt;li&gt;Anaconda (Python environment)&lt;/li&gt;
  &lt;li&gt;Spark (with Hadoop libraries)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;1-make-sure-you-have-jdk-17-installed-on-your-machine&quot;&gt;1. Make sure you have JDK 1.7+ installed on your machine&lt;/h3&gt;

&lt;p&gt;You can check this by opening a command line window. Type &lt;code class=&quot;highlighter-rouge&quot;&gt;java -version&lt;/code&gt; and see if the expected Java version is returned.&lt;/p&gt;

&lt;h3 id=&quot;2-download-and-install-anaconda&quot;&gt;2. Download and install Anaconda&lt;/h3&gt;

&lt;p&gt;Anaconda is an integrated Python platform which has lots of pre-installed packages and tools, including the famous web interactive IPython Notebook (aka Jupyter Notebook).
The download page is &lt;a href=&quot;https://www.continuum.io/downloads&quot;&gt;https://www.continuum.io/downloads&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;3-download-and-install-spark&quot;&gt;3. Download and install Spark&lt;/h3&gt;

&lt;p&gt;Get latest Spark version which is pre-built for Apache Hadoop, then unzip to your local drive.&lt;/p&gt;

&lt;p&gt;The Spark releases do not actually include Hadoop as the names may imply. They simply include libraries to integrate with the Hadoop clusters and distributions listed. Many of the Hadoop classes are required regardless of whether you are using Hadoop.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Caution:&lt;/strong&gt; You may be tempted to download the “without Hadoop” or spark-x.x.x-bin-without-hadoop.tgz options if you are installing in Standalone mode and not using Hadoop. However this name can be confusing, as the build is expecting many of the required classes that are implemented in Hadoop to be present on the system. Select this option only if you have Hadoop installed on the system already. Otherwise, use one of the spark-x.x.x-bin-hadoopx.x builds.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The download page is &lt;a href=&quot;http://spark.apache.org/downloads.html&quot;&gt;http://spark.apache.org/downloads.html&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;4-copy-hadoop-winutilsexe-to-sparks-bin-folder&quot;&gt;4. Copy Hadoop winutils.exe to Spark’s \bin folder&lt;/h3&gt;

&lt;p&gt;As we mentioned Spark does not necessarily need Hadoop installed on the machine, but it depends on many of the Hadoop libraries. To make it run properly on Windows, Hadoop requires native libraries on Windows. For example, Hadoop uses some Windows API to implement posix-like file access permissions such as accessing the file:// file system.&lt;/p&gt;

&lt;p&gt;To enable this, we need to copy the winutils.exe file into Spark’s \bin folder. The file can be downloaded from &lt;a href=&quot;https://github.com/steveloughran/winutils/raw/master/hadoop-2.7.1/bin/winutils.exe&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;5-update-system-environment-variables&quot;&gt;5. Update system environment variables&lt;/h3&gt;

&lt;p&gt;Update system environment variables in “Advanced system settings” –&amp;gt; “Environment Variables…”. The file path might be different based on your install location:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;JAVA_HOME: &lt;code class=&quot;highlighter-rouge&quot;&gt;C:\Java\jdk1.8.0_121&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;JRE_HOME: &lt;code class=&quot;highlighter-rouge&quot;&gt;C:\Java\jdk1.8.0_121\jre&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;CLASSPATH: &lt;code class=&quot;highlighter-rouge&quot;&gt;C:\Java\jdk1.8.0_121\jre\lib&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;SPARK_HOME: &lt;code class=&quot;highlighter-rouge&quot;&gt;C:\Spark\spark-2.2.0-bin-hadoop2.7&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;HADOOP_HOME: &lt;code class=&quot;highlighter-rouge&quot;&gt;C:\Spark\spark-2.2.0-bin-hadoop2.7&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Append following string to your “Path” variable:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;;C:\Java\jdk1.8.0_121\bin;C:\Spark\spark-2.2.0-bin-hadoop2.7\bin;C:\Anaconda2;C:\Anaconda2\Scripts&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;6-launch-pyspark-shell-and-test&quot;&gt;6. Launch PySpark shell and test&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;pyspark --master local[2]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The –master is used for setting the master node address. Here we launch Spark locally on 2 cores for local testing.&lt;/p&gt;

&lt;p&gt;Now you should be able to type and execute Python commands in Spark environment.&lt;/p&gt;

&lt;h3 id=&quot;7-set-system-environment-variables-for-ipython-notebook&quot;&gt;7. Set system environment variables for IPython Notebook&lt;/h3&gt;

&lt;p&gt;While PySpark shell is one way to test your commands, it might be difficult to edit and maintain the code. IPython Notebook (aka Jupyter Notebook) is an interactive computational environment which can combine code edit, execution, rich text, mathematics, plots and rich media.
To enable it, user needs to add the following system environment variables:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;PYSPARK_DRIVER_PYTHON: &lt;code class=&quot;highlighter-rouge&quot;&gt;jupyter&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;PYSPARK_DRIVER_PYTHON_OPTS: &lt;code class=&quot;highlighter-rouge&quot;&gt;notebook&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;8-launch-pyspark-shell-in-ipython-notebook-and-test&quot;&gt;8. Launch PySpark shell in IPython Notebook and test&lt;/h3&gt;

&lt;p&gt;Close previous command line window, and open a new one to execute:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;pyspark --master local[2]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The command should be able to auto open default browser and redirect to the local Notebook web, and user can start to create a new notebook and execute the code.&lt;/p&gt;

&lt;h3 id=&quot;end&quot;&gt;End&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;Originally post at &lt;a href=&quot;http://blog.xuyuan.me/2017/08/09/spark-ipython.html&quot;&gt;blog.xuyuan.me&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>［Github实例］使用React, React Native和Redux实现跨平台共用Web, iOS, Android的核心代码</title>
   <link href="http://blog.xuyuan.me/2015/11/24/react-multi-platform.html"/>
   <updated>2015-11-24T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2015/11/24/react-multi-platform</id>
   <content type="html">&lt;p&gt;相信使用同一个平台和技术开发Web, iOS, Android是很多程序员的追求，也是很多创业公司和产品经理的梦想。而如果核心的业务逻辑代码能够跨平台共用，那更是梦寐以求的事情了。试想，创业公司不用再忍受Android/iOS应聘者的拒绝，只要招几个互为备份的Javascript开发就可以搞定跨平台开发；同一个业务Bug不再担心iOS改好了而Android还没fix，只要改一行JS代码就可以修正各平台；iOS App可以实现即时部署，再也不用在线上bug火烧眉毛的时候还得等待苹果漫长的审核期；如此种种，程序员和产品经理终于可以和谐相处了 :D&lt;/p&gt;&lt;p&gt;好吧，上面的这些场景还没有完全实现，不过Facebook在2015年推出的React Native让它们看起来更有希望实现了。曾经，开发者们尝试通过各种方式来进行跨平台开发，例如&lt;a href=&quot;http://techcrunch.com/2012/09/11/mark-zuckerberg-our-biggest-mistake-with-mobile-was-betting-too-much-on-html5/&quot;&gt;移动端HTML5&lt;/a&gt;，以及用&lt;a href=&quot;http://oleb.net/blog/2014/05/how-dropbox-uses-cplusplus-cross-platform-development/&quot;&gt;C++实现核心业务逻辑&lt;/a&gt;等等。但前者在移动端的性能无法匹敌原生程序，用户体验有明显差别，后者会导致开发和维护的技术成本增加。而React的出现至少让跨平台开发多了一种选择，而且是看上去更美好的选择。&lt;/p&gt;

&lt;h2 id=&quot;开源实例&quot;&gt;开源实例&lt;/h2&gt;

&lt;p&gt;本文以两个程序例子(&lt;a href=&quot;https://github.com/xuyuanme/NodeTwitter&quot;&gt;NodeTwitter&lt;/a&gt;和&lt;a href=&quot;https://github.com/xuyuanme/ReactTwitter&quot;&gt;ReactTwitter&lt;/a&gt;)来实现一个简单的Twitter客户端，简单到只在用户授权登录后在首页显示”Hello {username}”。 但这个简单的例子基本涵盖了前后端程序交互的各方面，其中，NodeTwitter是服务端程序，负责与Twitter的OAuth和REST API进行通讯；ReactTwitter是前端程序，使用React展示Web界面，React Native展示iOS和Android App界面，而跨平台的界面通过Redux共享代码与服务端NodeTwitter进行交互。详情可以参照下图：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://xuyuan.me/img/react-twitter-arch.jpg&quot; alt=&quot;ReactTwitter Arch&quot; /&gt;&lt;/p&gt;

&lt;p&gt;本文的主旨是尝试利用Javascript技术栈进行跨平台的开发实践，并不包括如何使用React进行UI开发等。关于React和React Native的开发教程，网上已经有了很多很好的文章 &lt;a href=&quot;https://github.com/enaqx/awesome-react&quot;&gt;1&lt;/a&gt; &lt;a href=&quot;https://github.com/jondot/awesome-react-native&quot;&gt;2&lt;/a&gt;，大家可以参考。&lt;/p&gt;

&lt;h2 id=&quot;技术栈&quot;&gt;技术栈&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;IDE: &lt;a href=&quot;http://www.sublimetext.com/3&quot;&gt;Sublime Text 3&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;在尝试过Webstorm, Atom, VS Code之后，还是觉得Sublime Text最轻便灵活。在Javascript各种框架乱战的时代，似乎任何一个试图做到大而全的IDE都或多或少会有一些缺陷。相反Sublime Text的小巧以及丰富的插件使它能够应对各种要求。未来看好微软出品的VS Code，也许终有一天会出现类似Visual Studio或Xcode的Javascript事实标准IDE。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;静态代码检查：&lt;a href=&quot;http://eslint.org/&quot;&gt;ESLint&lt;/a&gt; + &lt;a href=&quot;http://sublimelinter.com&quot;&gt;SublimeLinter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;服务端：&lt;a href=&quot;https://nodejs.org/&quot;&gt;Node.js&lt;/a&gt; + &lt;a href=&quot;http://expressjs.com/&quot;&gt;Express&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Web端程序：&lt;a href=&quot;https://facebook.github.io/react/&quot;&gt;React&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;App端程序：&lt;a href=&quot;https://facebook.github.io/react-native/&quot;&gt;React Native&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;共享业务逻辑和数据：&lt;a href=&quot;https://reduxframework.com/&quot;&gt;Redux&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/rackt/react-redux&quot;&gt;react-redux&lt;/a&gt;: 进行React与Redux的绑定，例如将业务数据和函数绑定到UI&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/gaearon/redux-thunk&quot;&gt;redux-thunk&lt;/a&gt;: Redux中间件，用以推迟代码的异步执行，例如在数据访问完成后再执行回调&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;编译，部署和ES6支持：&lt;a href=&quot;https://webpack.github.io/&quot;&gt;Webpack&lt;/a&gt; + &lt;a href=&quot;https://babeljs.io/&quot;&gt;Babel&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;实时调试：&lt;a href=&quot;https://github.com/gaearon/react-transform-hmr&quot;&gt;react-transform-hmr&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;运行界面&quot;&gt;运行界面&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://xuyuan.me/img/react-twitter-screen.gif&quot; alt=&quot;ReactTwitter Screen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/xuyuanme/NodeTwitter&quot;&gt;NodeTwitter&lt;/a&gt;和&lt;a href=&quot;https://github.com/xuyuanme/ReactTwitter&quot;&gt;ReactTwitter&lt;/a&gt;的例子可以在Github上找到，包括了Web, iOS和Android平台。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;原文发表于&lt;a href=&quot;http://blog.xuyuan.me/2015/11/24/react-multi-platform.html&quot;&gt;blog.xuyuan.me&lt;/a&gt;, 转载请注明。&lt;/p&gt;
&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>React Native iOS: The resource could not be loaded because the app transport security policy requires the use of a secure connection</title>
   <link href="http://blog.xuyuan.me/2015/10/19/ios-http-access.html"/>
   <updated>2015-10-19T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2015/10/19/ios-http-access</id>
   <content type="html">&lt;p&gt;Latest iOS blocks cleartext HTTP (http://) resource load since it is insecure. For development purpose, it can be disabled:&lt;/p&gt;&lt;p&gt;Adding the following to project Info.plist to disable ATS(Application Transport Security):&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&amp;lt;key&amp;gt;NSAppTransportSecurity&amp;lt;/key&amp;gt;
&amp;lt;dict&amp;gt;
&amp;lt;key&amp;gt;NSAllowsArbitraryLoads&amp;lt;/key&amp;gt;&amp;lt;&lt;span class=&quot;nb&quot;&gt;true&lt;/span&gt;/&amp;gt;
&amp;lt;/dict&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/facebook/react-native/issues/1563&quot;&gt;react-native #1563&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ubuntu Dropbox无法同步问题</title>
   <link href="http://blog.xuyuan.me/2015/10/15/fix-dropbox.html"/>
   <updated>2015-10-15T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2015/10/15/fix-dropbox</id>
   <content type="html">&lt;p&gt;'Can't access Dropbox folder'问题的解决办法&lt;/p&gt;&lt;p&gt;发现Ubuntu上的Dropbox不能正常同步了，检查显示Dropbox正在运行：&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;c&quot;&gt;# ~/.dropbox-dist/dropboxd&lt;/span&gt;
Another instance of Dropbox &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;2622&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; is running!&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;但状态出现异常：&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;c&quot;&gt;# ~/Dropbox/Unix/scripts/dropbox.py status&lt;/span&gt;
Can&lt;span class=&quot;s1&quot;&gt;'t monitor Dropbox folder (Click to fix)
Can'&lt;/span&gt;t access Dropbox folder
Syncing &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;39 files remaining&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;&lt;a href=&quot;http://askubuntu.com/questions/247461/how-do-i-fix-a-cant-access-dropbox-folder-error&quot;&gt;解决方法：&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Put these in /etc/sysctl.conf:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;fs.inotify.max_user_watches &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 1048576
fs.inotify.max_user_instances &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 256&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;&lt;a href=&quot;http://www.dropboxwiki.com/tips-and-tricks/using-the-official-dropbox-command-line-interface-cli&quot;&gt;dropbox.py的说明&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>美国自驾攻略</title>
   <link href="http://blog.xuyuan.me/2014/04/19/us-drive.html"/>
   <updated>2014-04-19T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2014/04/19/us-drive</id>
   <content type="html">&lt;p&gt;看到一篇介绍美国自驾的博客文章，解释了很多之前不太明白的交规，转贴备忘。&lt;a href=http://blog.sina.com.cn/s/blog_621571b70101mh52.html?tj=2&gt;&lt;i class=icon-share&gt;&lt;/i&gt;原文地址&lt;/a&gt;&lt;/p&gt;&lt;p&gt;一、驾照未必国际&lt;/p&gt;

&lt;p&gt;如果你在加州自驾，那么只要你的驾照是有中英文的，就不用公证也可以直接使用。如果是其他州的话，建议提前去做公证。如果在北京的话，携带本人户口本原件、驾照原件、护照复印件，到公证处即可办理。大概是3-5个工作日出公证书。&lt;/p&gt;

&lt;p&gt;二、一些特别交规&lt;/p&gt;

&lt;p&gt;1、car pool lane：美国人经常说car pool，这个是最近才出台的法规，因为在美国加州、内华达、犹他州等州为了解决当地交通拥堵的问题，所以在高速公路最内侧车道叫做CAR POOL LANE，是为了提倡拼车来降低燃耗保护环境，乘坐2人或者2人以上的私家车，摩托车、Bus、混合动力及天然气洁净能源车才能走此条特殊通道，否则就会有几百美金的高额罚款。&lt;/p&gt;

&lt;p&gt;2、PED XING：不是海绵宝宝里的派大星，而是PEDESTRIAN CROSSING的缩写，也就是“有行人通过”，美国人喜欢缩写所以把CROSS直接用X来表示，这是提醒驾车的人，标志牌这里有人行道，或者行人穿马路专用的通道，必须降低车速准备避让。&lt;/p&gt;

&lt;p&gt;3、STOP：美国很多路口是没有交通信号灯的，大家都是根据路口的红色STOP标志牌来停车和行进的。有的路口四个方向都有STOP标志，或者写着STOP ALL WAY，那么谁到达STOP之后先停车，停下之后再起步，这样可以保证道路资源的有效利用。&lt;/p&gt;

&lt;p&gt;4、限速问题：在看到SPEED LIMIT标志牌，最好是严格按照限速来开，不过经验上来看，一般超速10%是在合理范畴内的，另外就是，美国几乎没有摄像头，不过警察会藏在路边，如果你不是头车和尾车，且速度和头车及尾车保持一致，那么警察一般不会找你的麻烦而是找头车和尾车，当然，这个是美国当地人总结出来的经验，不过还是建议按照限定速度开车，安全第一。&lt;/p&gt;

&lt;p&gt;5、红灯右转弯：遇到右转弯的时候，需要先停车，确认安全之后再右转弯。而有些路口设有NO RIGHT TURN ON RED的标志，那么红灯的时候就不可以右转。记得哪怕路上一个人都没有，遇到STOP标志也要先停车之后再起步。&lt;/p&gt;

&lt;p&gt;三、停车也要现学&lt;/p&gt;

&lt;p&gt;1、路边停车：第一是请注意路边石的颜色，红色为禁止停车区，比如人行横道、消防署、公交车站附近等位置都会划红色线。黄色表示允许商业货物装卸，人员上下车，但是不允许驾驶员下车。绿色意思是泊车时间有限，请注意绿色区域旁边的标志上或者允许的停留时间。蓝色是仅仅允许残障人士泊车区。
有一些很奇怪的位置也允许停车，比如我们当时在圣迭戈，居然可以在桥下停车，但是牌子上会写着比如周几到周几可以停，哪天不能停，因为要扫街，请一定要注意，否则会被拖走“Tow Away”！&lt;/p&gt;

&lt;p&gt;2、固定停车场：
这个是我们在旧金山金门大桥遇到的情况。去金门大桥游览的时候，旁边就有固定的停车场。另外我们在1号公路沿线也见到很多固定停车场。有的时候是Flat rate，也就是固定金额，比如一天5美金或者8美金的；也有后付费计时方式。如果看到free with validation的标志，就意味着你可以在周边商店或者餐厅小费领域印花或者封印能够免费停车，或者打折停车。对了，在固定停车场，请务必注意，不要像再中国一样倒车入库，一定要车头插进去，因为有些州规定，将车倒入停车位是违法的，因为有些车牌只能挂在车后，要便于警察辨认。请务必注意“do not back inot stall”的标志，如果遇到这个就不要倒入停车位。&lt;/p&gt;

&lt;p&gt;3、咪表：
在路边停车很容易看到咪表，需要投入硬币。在这里需要说明一下，美国的硬币分成quarter（25每分，这个非常常用）、dime（1毛钱）、nickel（5美分）3种，停车计时器一般使用quarter的比较多。所以建议多准备些quarter带着。咪表分成指针显示屏和液晶显示屏两种，指针的需要投币之后转动操纵杆，之后按照投币的金额开始运转。指针的和液晶的都会在时间用尽之后，显示expired。另外请注意咪表底下贴的一些信息，有的可能表示什么时候到什么时候免费，或者什么时候到什么时候不允许停车。&lt;/p&gt;

&lt;p&gt;4、代客停车：
这个是我们在洛杉矶遇到的情况，当在一些高级餐厅和酒店的时候，在入口处你要注意“Valet Parking”的标识，Valet“瓦类”这样的发音，是法语词，就是代客泊车的意思。到达入口见到这个牌子之后，直接下车，让工作人员帮你把车停入指定位置，他们会给你票据，记得取车的时候支付小费给服务人员哦，大概1-3美金左右。&lt;/p&gt;

&lt;p&gt;5、坡道停车方式：
如果你在旧金山自驾，这个坡道停车是务必要好好学习实践的了！因为旧金山实在是一个坡道多到你难以想象的境地，且坡都很陡。记得停车时车头如果如果朝下坡，那么需要将前轮调向路边，并启用泊车档。如果是停车时车头朝上坡，那么前轮应该向路边相反方向，并且使车轮轻轻抵住路边。否则会被拖走或者罚款的哦！&lt;/p&gt;

&lt;p&gt;6、残疾人停车位：
不要挑衅法律，如果你没有申请由州政府发放的带有轮椅标志的拍照，是不可以在残疾人专用车位上停车的，否则会有高额罚款以及拖走的危险。
【玩”美”蜜月】美国自驾攻略（驾照\租车\交规\停车\加油\导航\保险\道路标志）&lt;/p&gt;

&lt;p&gt;四、预演道路标志&lt;/p&gt;

&lt;p&gt;1、RIGHT LANE MUST TURN RIGHT: 一般是白底黑字，右车道只可以右转。&lt;/p&gt;

&lt;p&gt;2、YIELD：倒三角红色边框白底标志，减速让行。&lt;/p&gt;

&lt;p&gt;3、DO NOT PASS：白底黑色字，禁止超车。、&lt;/p&gt;

&lt;p&gt;4、BUMP：黄底黑字，路面不平。&lt;/p&gt;

&lt;p&gt;5、LANE ENDS MERGE LEFT:黄底黑字，与左侧车道合并。&lt;/p&gt;

&lt;p&gt;五、租车提车注意&lt;/p&gt;

&lt;p&gt;1、有很多公司可供选择，比如Hertz、Avis、Dollar、Budget、ALAMO等。提前去穷游折扣看看，有时候会有优惠代码，比如我租的是Avis的，直接美国租车就是中文操作的，非常便利。比较推荐Hertz和Avis，服务网点更多一些。&lt;/p&gt;

&lt;p&gt;2、在网上预订的时候就会涉及到保险的选择，推荐的基础保险是：
所租车辆本身的损失损害以及盗抢责任豁免(Loss Damage Waiver, LDW/CDW)
补充责任险又称第三方责任险(Additional Liability, Insurance, ALI)
乘坐者受伤保险（PAI，Perseonal Accident Insurance）
一般在提车柜台的时候，如果你不注意，他们会打印出额外的保险，会收额外费用，这个请务必注意。&lt;/p&gt;

&lt;p&gt;3、在提车的时候，一般会让你选择加满油还车Your Refill，或者是不加满We Refill，按照差额补钱两种结算方式，肯定是加满油还车比较实惠，不过如果自己不方便找加油站也可以选择后者。&lt;/p&gt;

&lt;p&gt;4、有时候你预订的车辆和实际的车辆可能不一致，比如我们当时在网上选择的是Ford Escape，之后提车的时候是Dodge，不用太在意，一般都会给升级。&lt;/p&gt;

&lt;p&gt;5、如果合同方之外的其他人想要驾驶汽车，需要进行追加司机的登记，还需要提供追加司机的驾照和翻译证明文件等。&lt;/p&gt;

&lt;p&gt;六、加油也有学问&lt;/p&gt;

&lt;p&gt;1、加油站Gas station，在美国分为full serve（人工服务）和self serve（自助服务）两种方式，full serve加油站由工作人员操作加油，并提供车窗擦洗服务；self serve是自己加油。相对而言，self serve价格更优惠。&lt;/p&gt;

&lt;p&gt;2、美国汽油分为regular（普通）、plus（中级）、premium（高级）多种，价格依次递增，regular适合市区内行驶，plus适合长途行驶，premium有对引擎较好的润滑剂，相对省油。建议跨州自驾用中间那档即可。&lt;/p&gt;

&lt;p&gt;3、付费分为预付费，在加油泵上使用信用卡付费，加油后付费3种。一般来说，国内带去的信用卡大多刷不了，建议还是在柜台跟服务人员沟通，把信用卡或者现金押在柜台，然后直接跟对方说在几号枪加油，以及大概要加的金额（有时候也可以不说直接回来结算），之后再回去刷卡或者付现。如果你想试试信用卡在油泵上刷卡，那么遇到的情况是，将信用卡插进油泵刷卡器并迅速拔出，之后卡得到确认后，会在液晶屏幕上显示“remove nozzle.push to start.然后可能还需要让你输入zip code，就是邮政编码的意思，可以输入个00000试一下。不过国内发行的信用卡一般不支持在美国刷油泵。&lt;/p&gt;

&lt;p&gt;4、加油操作：打开油箱盖，拿起油泵喷嘴插入油箱，之后选择你想要的汽油种类（regular，plus，super），直接按即可，握住喷嘴扳手汽油汽油就会流出来，加满后把手会自动弹出。&lt;/p&gt;

&lt;p&gt;5、加油英语对话：&lt;/p&gt;

&lt;p&gt;Fill it up on pump 5 please.（我想在5号油泵上加满）
I’d like to have 20 dollars on pump number 3.（我想用3号油泵加20美金的汽油）
I want to pay by credit card/cash.（我想用信用卡/现金结算）
I want to pay by cash,I will prepay 50 dollars in advance.(我用现金支付，我先预付50美金）
I can’t use it,could you help me to fill up my gas tank？(我不会用，你能帮我加油么？）
Please give me my change and receipt.(麻烦给我找零还有收据）&lt;/p&gt;

&lt;p&gt;6、一般加油站附近会附带便利店和卫生间，不过有时候卫生间是锁着的，需要和前台要下卫生间的钥匙。&lt;/p&gt;

&lt;p&gt;7、在1号公路上，最不建议的加油地点就是大苏尔，要比其他地方高出一倍的价格，如果从旧金山开往洛杉矶，请务必在卡梅尔小镇加满油。&lt;/p&gt;

&lt;p&gt;七、导航那些事儿&lt;/p&gt;

&lt;p&gt;1、garmin：在租车的时候，柜台的服务人员会问你需要不需要garmin，其实就是很专业的GPS导航的品牌名称。还是建议租一个的，因为在有些地方是没有手机信号的。&lt;/p&gt;

&lt;p&gt;2、如何使用garmin：输入城市名称，然后输入门牌号，输入街道名。比如我预定旧金山的亨廷顿酒店，那么我提前先在google上获取地址是1075 California Street, Nob Hill，San Francisco，然后我输入San Francisco，之后输入1075，然后输入California Street就可以找到了。&lt;/p&gt;

&lt;p&gt;3、为了以防万一，建议在路上休憩的时候，选择有信号的地方，提前把下一个休息点定位，然后用google进行导航，哪怕是中途没有手机信号，之前定位的信息依旧可以帮你看到大致的路线方向，这样的话对比着GPS导航，可以有双重保证。&lt;/p&gt;

&lt;p&gt;4、当你离开车的时候，请一定把GPS放到外面看不到的地方，否则很可能会被人砸碎玻璃偷走。&lt;/p&gt;

&lt;p&gt;八、提前规划路程&lt;/p&gt;

&lt;p&gt;1、关于驾车时间，不要每天开车时间太长，建议4小时左右比较合适，因为可能会遇到找不到路的情况，另外就是中途会休息以及不停拍照。如果去黄石的话，最好是时间留出富余，否则就需要连续2-3天每天赶路超过8小时。请在出发前反复研究google map，定位你感兴趣的城市或者落脚点，并找到最好的中间休息点，算出每一段路程的驾驶时间。&lt;/p&gt;

&lt;p&gt;2、关于美国西部几个城市，旧金山其实不是很建议自驾，主要城市不太大，坡道比较陡，不好停车，另外公共交通还可以；洛杉矶务必自驾，因为面积太大，公共交通系统很糟糕，地铁不能覆盖很多区域；拉斯维加斯不太建议自驾，因为主要就是Strip大道，大道上有公交系统；1号公路请尽情自驾；另外如果去黄石公园的话，请一定要多留出时间，否则每天会疲于驾驶而忽略风景。关于1号公路的分段安排，我后续会写详细博文给大家分享。&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>AngularJS Directives: Using Transclusion Part2</title>
   <link href="http://blog.xuyuan.me/2014/02/18/angularjs-transclusion.html"/>
   <updated>2014-02-18T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2014/02/18/angularjs-transclusion</id>
   <content type="html">&lt;p&gt;除了&lt;a href='/2014/02/16/angularjs-transclusion.html'&gt;上文&lt;/a&gt;中使用的ng-transclude，AngularJS还有其他两种方式可以引用transclude directive的内容：compile方法和directive controller:&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;nx&quot;&gt;myModule&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;directive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'myDirective'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;transclude&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// first set transclude to true (or element)&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;attrs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;transcludeFn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 1). use transclude in compile function&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;controller&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$scope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$transclude&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// 2). use transclude in directive controller&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;其中在compile阶段引用transclude的方式如下:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;nx&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;attrs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;transcludeFn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;postLink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;attrs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;controller&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newScope&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;scope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$parent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'p'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;first&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;transcludeFn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newScope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;使用directive controller访问$transclude的方式如下:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;nx&quot;&gt;controller&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$scope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$transclude&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;$element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'p'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;first&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$transclude&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

</content>
 </entry>
 
 <entry>
   <title>AngularJS Directives: Using Transclusion Part1</title>
   <link href="http://blog.xuyuan.me/2014/02/16/angularjs-transclusion.html"/>
   <updated>2014-02-16T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2014/02/16/angularjs-transclusion</id>
   <content type="html">&lt;p&gt;下面的例子展示了如何使用AngularJS directive中的transclude属性。使用transclude属性，可以将自定义指令元素中的内容以正确的作用域解析，然后再放回指令模板中标记的位置。&lt;/p&gt;&lt;blockquote&gt;
  &lt;p&gt;directive中transclude的属性值可以设置为true或’element’, 含义分别为：&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;transclude: true&lt;/code&gt; transclude使用directive的子元素的内容，如以下例子所示&lt;/li&gt;
    &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;transclude: 'element'&lt;/code&gt; transclude使用directive的整个元素内容，例如AngularJS的ng-repeat directive&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div ng-app=&quot;app&quot; ng-controller=&quot;AlertController&quot; class=&quot;well&quot; ng-cloak=&quot;&quot;&gt;
  &lt;alert ng-repeat=&quot;alert in alerts&quot; type=&quot;alert.type&quot; close=&quot;closeAlert($index)&quot;&gt;{[{alert.msg}]}&lt;/alert&gt;
  &lt;button class=&quot;btn&quot; ng-click=&quot;addAlert()&quot;&gt;Add Alert&lt;/button&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;html文件：&lt;/strong&gt;&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;ng-app=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;app&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;ng-controller=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;AlertController&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;well&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;ng-cloak&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;alert&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;ng-repeat=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;alert in alerts&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;alert.type&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;close=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;closeAlert($index)&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{[{alert.msg}]}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/alert&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;button&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'btn'&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;ng-click=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;addAlert()&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Add Alert&lt;span class=&quot;nt&quot;&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;app.js文件：&lt;/strong&gt;&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;nx&quot;&gt;angular&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'app'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'alert-directive'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;controller&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'AlertController'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$scope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;$scope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;alerts&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'error'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Oh snap! Something went wrong.'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'success'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'Well done! It worked out in the end.'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;$scope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addAlert&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$scope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;alerts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Watch out - another alert!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

        &lt;span class=&quot;nx&quot;&gt;$scope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;closeAlert&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$scope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;alerts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;splice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;// this is used to avoid confliction when compile blog with Jekyll&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$interpolateProvider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;$interpolateProvider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;startSymbol&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'{[{'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;endSymbol&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'}]}'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;directive.js文件：&lt;/strong&gt;&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;nx&quot;&gt;angular&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;alert-directive&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[])&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;directive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'alert'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;restrict&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'EA'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// support to be used as an element or an attribute&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// tells the compiler to replace the original directive's element with the template given by the template field&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'&amp;lt;div class=&quot;alert alert-&quot;&amp;gt;'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;
                &lt;span class=&quot;s1&quot;&gt;'&amp;lt;button type=&quot;button&quot; class=&quot;close&quot; ng-click=&quot;close()&quot;&amp;gt;&amp;amp;times;&amp;lt;/button&amp;gt;'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;
                &lt;span class=&quot;s1&quot;&gt;'&amp;lt;div ng-transclude&amp;gt;&amp;lt;/div&amp;gt;'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// the ng-transclude directive gets the transcluded elements and appends them to the element in the template on which it appears&lt;/span&gt;
                &lt;span class=&quot;s1&quot;&gt;'&amp;lt;/div&amp;gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;transclude&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// tells the compiler to extract the contents of the original &amp;lt;alert&amp;gt; element and make them available to be transcluded into the template&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;scope&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// create an isolated scope&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'='&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// the = symbol indicates that AngularJS should keep the expression in the specified attribute and the value on the isolated scope in sync with each other&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'&amp;amp;'&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// the &amp;amp; symbol indicates that the expression provided in the attribute on the element will be made available on the scope as a function&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

</content>
 </entry>
 
 <entry>
   <title>clickthrough: 使用Sencha Touch和PhoneGap快速创建跨移动平台Demo程序</title>
   <link href="http://blog.xuyuan.me/2013/12/27/clickthrough.html"/>
   <updated>2013-12-27T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2013/12/27/clickthrough</id>
   <content type="html">&lt;p&gt;有时手机应用项目需要在现有设计图的基础上快速创建Demo程序为客户或相关干系人进行演示，而这样的Demo却往往很难在一两天之内完成，开发出来的代码后期也很难重用。如果涉及到iOS, Android, WP等多个平台，更是难以在短时间内召集各种平台技术人员来为这一个Demo工作。&lt;/p&gt;
&lt;p&gt;为了解决这类问题，我新建了&lt;a href=&quot;https://github.com/xuyuanme/clickthrough&quot;&gt;&lt;i class=&quot;icon-share&quot;&gt;&lt;/i&gt; clickthrough&lt;/a&gt;项目。clickthrough使用&lt;a href=&quot;http://www.sencha.com/products/touch/&quot;&gt;&lt;i class=&quot;icon-share&quot;&gt;&lt;/i&gt; Sencha Touch&lt;/a&gt;控制设计图的点击区域以及页面跳转，使用&lt;a href=&quot;http://phonegap.com/&quot;&gt;&lt;i class=&quot;icon-share&quot;&gt;&lt;/i&gt; PhoneGap&lt;/a&gt;为各个移动平台打包分发应用程序。&lt;/p&gt;

&lt;p&gt;开发（或者设计）人员所要做的，只是1). 提供高保真设计图; 2). 使用Json格式定义各页面点击区域与跳转关系。设计人员甚至不需要开发的帮助，也不需要搭建各移动平台的开发环境，就可以创建native的demo应用程序。&lt;/p&gt;

&lt;p&gt;Github项目详见: &lt;a href=&quot;https://github.com/xuyuanme/clickthrough&quot;&gt;https://github.com/xuyuanme/clickthrough&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>防止Windows下Git自动转换换行符</title>
   <link href="http://blog.xuyuan.me/2013/11/04/git-crlf.html"/>
   <updated>2013-11-04T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2013/11/04/git-crlf</id>
   <content type="html">&lt;p&gt;Git有一个很大的优点是它通过比较文件内容而不是时间戳来确定文件是否有更新。Windows下Git会默认将LF换行符替换为CRLF，当有时需要比较UNIX开发人员传来的文件时，就会因为换行符的不同而无法判断代码差异。&lt;/p&gt;
&lt;p&gt;可以通过在repo根目录设置.gitattributes文件定义换行符的转换，例如：&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;c&quot;&gt;# .gitattributes&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.java &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.css &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.svg &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.js &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.js.map &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.html &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.htm &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.jsp &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.xml &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.txt &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.properties &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.md &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.json &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
.htaccess &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
.gitattributes &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf
.gitignore &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;lf&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;更多细节可以参考：&lt;a href=&quot;https://help.github.com/articles/dealing-with-line-endings&quot;&gt;&lt;i class=&quot;icon-share&quot;&gt;&lt;/i&gt; GitHub&lt;/a&gt;   &lt;a href=&quot;http://git-scm.com/docs/gitattributes&quot;&gt;&lt;i class=&quot;icon-share&quot;&gt;&lt;/i&gt; gitattributes&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>理解iOS程序签名机制</title>
   <link href="http://blog.xuyuan.me/2013/09/29/ios-provisioning.html"/>
   <updated>2013-09-29T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2013/09/29/ios-provisioning</id>
   <content type="html">&lt;p&gt;转发一篇blog, 对iOS程序发布过程中Certificate, App Identifier, Device UDID, Provisioning Profile等概念和彼此关系做了详细的解释，可以帮助不了解的人对iOS程序签名机制有一个比较清晰的理解。&lt;/p&gt;
&lt;p&gt;The original post is from: &lt;a href=&quot;http://escoz.com/blog/demystifying-ios-certificates-and-provisioning-files/&quot;&gt;&lt;i class=&quot;icon-share&quot;&gt;&lt;/i&gt; ESCOZ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Any iOS developer will tell you that one of the most confusing parts of developing for iOS is getting the app to actually run on real devices, because of all the work involved getting certificates working. Even for those who understand how certificates in general work, it’s still kind of weird to get everything to work correctly. This is going to be a long post, but hopefully it’ll be used for some of you.&lt;/p&gt;

&lt;p&gt;To better understand why we need to go thru all this, you need to always remember the main reason behind it:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Apple, and only Apple, can really allow a hardware device to run a piece of software, period.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yes, this is a very strict rule, many people don’t like it, but Apple really enforces with an iron fist. This rule is enforced in software using cryptographic signatures, and every time an app starts up, the app is checked to make sure it was signed by Apple and that you have permission to run it. There are ways to override this by jailbreaking a device and then hacking the software, but that’s really not a good option for most people.&lt;/p&gt;

&lt;p&gt;##Apple Digital Certificates&lt;/p&gt;

&lt;p&gt;Ok, so if only Apple can run software, how can developers run software for testing? The short answer is that Apple basically trusts you to allow apps on Apple’s behalf. The long answer is long, and here’s where everything starts.&lt;/p&gt;

&lt;p&gt;When you’re registered in the iOS Developer program, Apple allows you to request one very special certificate that can be used to sign things (and apps) on Apple’s behalf. You do that by creating a Certificate Signing Request (CSR) using the Keychain Access app. When you go thru the “Request a Certificate from a Certificate Authority” assistant two things happen:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;First, Keychain app will create a public and a private key for you automatically. They can be seen in the “Keys” category in Keychain. These keys are REALLY important: they are basically used to tell Apple who YOU are. Do not EVER loose these files, unless you want to want to go thru this process again. Make backups, etc.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Finally, Keychain uses those keys to create a certSigningRequest file that you send to Apple. That file basically contain your name, email, and public key, and is signed using your private one, so that Apple knows for sure you created it.
Now, you’ll upload that CSR to Apple, and Apple will confirm everything is ok and then issue you a development certificate. You can download the “developer_identity.cer”  file to your system, and then drag-and-drop it to Keychain Access. This new certificate will now show in the “My Certificates” category. Double-click it and you’ll see the details: this is a simple certificate, issued by Apple, that simply says that they really trust who you are. This will be used later on when signing apps.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;##Provisioning Files&lt;/p&gt;

&lt;p&gt;So the first step is complete: you have a certificate from Apple, saying who you are and that can be used to sign apps. Is that it, though? No. Your iPod/iPhone or iPad still doesn’t know that it can trust you and not Apple, and that’s where the provisioning files come in.&lt;/p&gt;

&lt;p&gt;When you create a provision file, you’re basically associating the iOS devices you have listed in the Provisioning Portal with the certificate signed by Apple in the previous step. The result of that is a .provision file, that is used during the compilation process of an iOS app, and also needs to be deployed to the device. To install this provision file, simply download it and double-click it: x-code will automatically add it to the list of provisioning profiles in the Organizer.&lt;/p&gt;

&lt;p&gt;You can have multiple provision files, one for each project you work on, or use just one provision file for all your apps. If you have just started a new app, or still are in early stages of development, the simple thing to do is to just use one provision for development. Eventually, though, you might need to create specific provision files for each app, because the AppId added in the provisioning portal is compared to what is configured in the app, and you’ll have to set the AppId on your app to submit to the store.&lt;/p&gt;

&lt;p&gt;##Building an App and Running It&lt;/p&gt;

&lt;p&gt;So lets recap: you already have your private and public keys that define who you are, the certificate from Apple saying it knows who you are, and a provision file saying that code built by you is allowed to run on your devices. Now its time to build the app.&lt;/p&gt;

&lt;p&gt;I won’t explain in details here how to set up Xcode or MonoTouch to build the app, there’s a million tutorials for that out there. The only thing I’ll mention is that you’ll have to tell your build tool to use both your signed certificate and the provision file.&lt;/p&gt;

&lt;p&gt;When you run the build, using either MonoTouch or Objective-C, all you’re doing is creating a directory that contains all the things your app needs inside. If you right-click on the final app and show the contents of the directory, besides all the normal project files and resources you’ll also see two other things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The actual provision file. This is just a straight copy of the file you already have.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A directory called “_CodeSignature”. This is the interesting one. Inside it there’s one file called “CodeResources”; it’s a simple plist file, but it contains cryptographic hashes of all the other files in the solution.
When the application is finally installed, iOS does a lot of things: first, it makes sure the provision file is signed by Apple. Then, it compares each one of the hashes in the CodeResources against the real files, using the provision key, to make sure the files haven’t been modified since the build. If there are any problems, the app won’t be installed.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last check happens when you run the app. iOS checks that the app hasn’t been modified, and that you still have a provision file that matches the app you’re trying to run. If you do not have one anymore, the app will crash.&lt;/p&gt;

&lt;p&gt;##Other Deployments&lt;/p&gt;

&lt;p&gt;Ad-hoc deployment works pretty much the same way as written above. You still register all of your users devices, and everything works the same way.&lt;/p&gt;

&lt;p&gt;Enterprise deployment though, is a bit different. When you’re a big company with thousands of iPhone users, Apple tends to like you and they trust you a lot more: they basically give you a certificate that allows you to re-sign your application as if you were really Apple. For all purposes, all iOS devices will automatically recognize you and will run the app with no problem, so you don’t need to register devices in the provision file. Other than that, everything else is the same.&lt;/p&gt;

&lt;p&gt;Finally, there’s App Store deployment. Like the enterprise deployment, there’s no need to register devices in the provision file. The difference though, is that the signature in the provision file you get from Apple doesn’t allow you to run anywhere! You won’t be able to run the application build for the AppStore anywhere; the only thing you can do with it is submit it for the AppStore approval.&lt;/p&gt;

&lt;p&gt;When Apple receives your App, it’s been already signed by you and contain the provision file, so they know you’re really the correct person submitting the app, and that the App is the one that should be approved. After its reviewed, they finally re-sign the app with their own signature that can run on any phone.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>设置CouchDB支持JSONP跨域请求</title>
   <link href="http://blog.xuyuan.me/2013/07/19/couch_jsonp.html"/>
   <updated>2013-07-19T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2013/07/19/couch_jsonp</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;问题：&lt;/strong&gt;&lt;br&gt; 通过jQuery getJSON方法跨域访问CouchDB:&lt;/p&gt; &lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='javascript'&gt;&lt;span class='kd'&gt; var&lt;/span&gt; &lt;span class='nx'&gt;six_latest&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;poq&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;root&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='s2'&gt;&quot;poquotes/_design/poquotes/_view/by_year?&amp;amp;limit=&quot;&lt;/span&gt;&lt;br&gt; &lt;span class='o'&gt;    +&lt;/span&gt; &lt;span class='nx'&gt;poq&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;max_quotes&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='s2'&gt;&quot;&amp;amp;descending=true&amp;amp;callback=?&quot;&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;&lt;br&gt; &lt;span class='nx'&gt;$&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;getJSON&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;six_latest&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;poq&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;handleMainQuotes&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;Chrome console报错&quot;Uncaught SyntaxError: Unexpected token :&quot;，Firebug报错&quot;invalid label&quot;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;原因：&lt;/strong&gt;&lt;br /&gt;
CouchDB默认按照Json格式返回，而jQuery在'callback=?'的JSONP请求模式下将结果按照script解析，因此无法解析返回结果&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决方法：&lt;/strong&gt;&lt;br /&gt;
在CouchDB的配置文件中设置'allow_jsonp = true' (Windows中ini文件位于CouchDB\etc\couchdb\local.ini)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;附：&lt;/strong&gt;&lt;br /&gt;
allow_jsonp=false时返回Content-Type:text/plain，内容为：&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;total_rows&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;offset&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;rows&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;99fd95b1bcfea3ca68013cba10003ccb&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1915&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;99fd95b1bcfea3ca68013cba10003ccb&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_rev&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1-8c1b95f892379d6539d3a81a731fc9ec&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;quote&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Robert Graves&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;White flabbiness goes brown and lean,
Dumpling arms are now brass bars,
They&amp;amp;rsquo;ve learnt to suffer and live clean,
And to think below the stars.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;work&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;A Renascence&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;link&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://www.poetryfoundation.org/poem/240340&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;year&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1915&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;99fd95b1bcfea3ca68013cba10001475&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1915&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;99fd95b1bcfea3ca68013cba10001475&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_rev&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1-7fe040eb6d322a35a86d2f871b100ff0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;quote&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Thomas Hardy&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;And as the smart ship grew
In stature, grace, and hue
In shadowy silent distance grew the Iceberg too.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;work&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;The Convergence Of The Twain&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;link&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://www.poetryfoundation.org/poem/176678&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;year&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1915&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;allow_jsonp=true时返回Content-Type:text/javascript，内容为：&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&lt;span class=&quot;err&quot;&gt;/*&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;CouchDB&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;*/jQuery&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;19100955071453936398&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1374199468922&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;total_rows&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;offset&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;rows&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;99fd95b1bcfea3ca68013cba10003ccb&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1915&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;99fd95b1bcfea3ca68013cba10003ccb&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_rev&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1-8c1b95f892379d6539d3a81a731fc9ec&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;quote&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Robert Graves&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;White flabbiness goes brown and lean,
Dumpling arms are now brass bars,
They&amp;amp;rsquo;ve learnt to suffer and live clean,
And to think below the stars.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;work&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;A Renascence&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;link&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://www.poetryfoundation.org/poem/240340&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;year&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1915&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;99fd95b1bcfea3ca68013cba10001475&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1915&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;99fd95b1bcfea3ca68013cba10001475&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;_rev&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1-7fe040eb6d322a35a86d2f871b100ff0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;quote&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Thomas Hardy&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;And as the smart ship grew
In stature, grace, and hue
In shadowy silent distance grew the Iceberg too.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;work&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;The Convergence Of The Twain&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;link&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://www.poetryfoundation.org/poem/176678&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;year&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1915&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}}}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
</content>
 </entry>
 
 <entry>
   <title>解决Spring Roo Demo中"security setup"的问题</title>
   <link href="http://blog.xuyuan.me/2013/07/01/spring_roo.html"/>
   <updated>2013-07-01T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2013/07/01/spring_roo</id>
   <content type="html">&lt;p&gt;Spring Roo的Pizza Shop教程(http://static.springsource.org/spring-roo/reference/html/beginning.html)中提到在Roo Shell使用&quot;security setup&quot;为应用程序设置Spring Security. 设置完成后在Web Server中运行报错&lt;/p&gt;&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]
Offending resource: file [D:\projekty\diplomka_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\e-library\WEB-INF\classes\META-INF\spring\applicationContext-security.xml]&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;需要将Spring Security的jar包拷贝到Web应用程序的lib目录：\pizza\src\main\webapp\WEB-INF\lib&lt;/p&gt;
&lt;p&gt;再次编译运行正常&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>[转] 一个项目经理的经验总结</title>
   <link href="http://blog.xuyuan.me/2013/02/16/project_manage.html"/>
   <updated>2013-02-16T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2013/02/16/project_manage</id>
   <content type="html">&lt;p&gt;本人做项目经理工作多年，感到做这个工作最要紧的就是要明白什么是因地制宜、因势利导，只有最合适的，没有什么叫对的，什么叫错的，项目经理最忌讳的就是完美主义倾向，尤其是做技术人员出身的，喜欢寻找标准答案，耽误了工作进度，也迷茫了自己。以下是本人一些做项目的个人体会，写出来供大家指点，在讨论过程中共同提高水平。&lt;/p&gt;&lt;br&gt;项目开始阶段是一个最重要的阶段。项目经理在接手一个新项目的时候，首先要尽可能地多从各个方面了解项目的情况，如：
&lt;br&gt;&lt;br&gt;
1. 这个项目是什么项目，具体大概做什么事情，是谁提出来的，目的是解决什么问题。在国内很多客户都很不成熟的情况下，千万不要根据项目的名称望文生义地去想象项目的目标。一个名为“办公自动化”的项目很有可能在你进场以后一个月才发现客户其实需要的是一个计算机生产管理辅助信息系统。前期了解情况的工作越详细，后面的惊讶就越少，项目的风险就越小。
&lt;br&gt;&lt;br&gt;
2. 这个项目里牵涉哪些方面的人，如投资方、具体业务干系方、项目建成后的运营方、技术监督方等等，很多项目里除了业主单位的结构很复杂以外，还有一些其他单位也会牵涉进来，如项目监理公司、业主的行业主管机构等。项目经理需要了解每个方面的人对这个项目的看法和期望是什么。事先了解各个方面的看法和期望，可以让你在做项目碰到问题的时候，就每件事情分析哪些人会在什么方面支持你，哪些人会出于什么目的反对你，从而提前准备联合朋友去对抗敌人，让事情向你所希望的方向发展。没有永远的朋友，也没有永远的敌人，只有一致的利益，这句话作为项目经理是一定要记住的。
&lt;br&gt;&lt;br&gt;
3. 基本了解了客户的情况后，下面的事情就是了解自己公司各方面对这个项目的看法。首先是高层领导是否重视，这个决定了你在需要资源的时候，公司是否会根据你的要求提供最有力的支持。领导口头肯定是说支持的，你需要做的是了解公司对这个项目的实际期望，是想把项目越做越大还是想赚钱？是想做样板工程还是干脆想敷衍了事，公司领导对项目的态度决定了你做这个项目的战略，而这个战略方针将对你做项目计划产生直接的影响。
&lt;br&gt;&lt;br&gt;
4. 在做整体项目计划前，还要大致计算一下你手上的资源。首先是时间，现在市场竞争激烈，往往很多项目要求在几乎不可能的时间范围里完成。对于这一点，你在做项目的风险控制计划的时候要充分考虑。其次是人员，根据项目预算和已往经验，大致计算一下未来的项目小组有多少种角色，每个角色目前公司是否有人，是否能完全归这个项目使用，是否需要另外招聘一些人员，招聘的准备工作要尽早启动。最后就是一些设备的准备，项目所需大件关键设备要尽早预定，以后不管发生设备等人还是人等设备的情况，浪费的都是你的时间。
&lt;br&gt;&lt;br&gt;
5. 现在是做项目说明书的时候了。一份好的项目说明书不仅将要做的事情描述得很清楚（主要是讲做什么，而不是说怎么做），而且把如何检查也说明得很透彻。也就是说它不仅说明白了要做哪些事情，也让客户的业务人员（一般不懂技术）知道项目做成什么样就算完成了。简单地说，项目说明书描述项目做哪些事情和每件事情做到什么程度以及如何检查每一个结果。
&lt;br&gt;&lt;br&gt;
6. 是到做总体计划的时间了吗？不，你现在已经知道了客户的目标和你手上的资源，那么做计划以前，你还需要和你的经理和客户充分沟通资源的问题。因为很多资源是还不明确的，你需要写一份报告，详细分析这个项目的风险以及对资源的需求情况。如果一些问题不能得到解决的话，将发生什么样的后果。如果资源不够，就要高层改变策略，增加对这个项目的投入。甚至在条件许可的情况下，有些公司会放弃这个项目。总之，没有人能完成一个不可能完成的任务，如果项目经理不能尽早发现风险，那么就只能去当烈士了。
&lt;br&gt;&lt;br&gt;
7. 明白了要做哪些事情和你手上的筹码以及你做这个项目的总体策略，现在是成立项目小组的时候了。很多项目经理都没有自己选择组员的权利，那么，就尽量发挥你的影响力去寻找那些你想要的人吧。成员的组成根据项目不同，相差较大，很难有什么具体要求，但是，一定要有精通客户业务的人，很多小项目里，这个人就是项目经理本人，大项目里会配备行业专家（Industry expert），这样和客户沟通起来才不会鸡同鸭讲，双方才可以相互理解。我经常看到的情况是我们的技术人员和客户交谈时满口的专业术语，结果搞得客户一头雾水，反过来，他还指责客户不懂技术。其实，明白自己想做什么的客户已经是很好的客户了，不知道自己要做什么，更不懂怎么做还要指手画脚的客户到处存在，但是要明白，是客户选择了你，而不是你选择了客户，有了客户你才有工资拿，心平气和一点吧。
&lt;br&gt;&lt;br&gt;
对于这种需求天天变的客户，你就一定要事先做好规矩：
&lt;br&gt;&lt;br&gt;
一、统一联系人，客户指定一个人和项目组进行沟通，不能张领导、王领导都来说几句，如果他们意见不一致，那你只有得罪领导的选择了。所以，项目的最初就要定好规矩，我项目组只认一个的意见，有什么要求你们内部先统一再和我谈，我不想卷入你们内部业务部门之间的矛盾之中。
&lt;br&gt;&lt;br&gt;
二、所有需求变更全部要有书面文字，这点切记！这样做好处多多：
&lt;br&gt;&lt;br&gt;
有书面证据，以后他还想改，你有了他以前要求的证据，告诉他：你以前可是这么说的。
便于需求变更管理，需求如何慢慢演变的历史可以看清楚，从而更深切地体会客户的目。
对于客户来说，嘴巴一动最方便，反正是你们做，不花他的资源，所以要求是否合理，是否和项目的目的一致，他是不负责任的。但是如果要他写书面要求，还要签字盖章，他就要谨慎多了，而且一写东西，思想就会更加深入，很多无理要求也就这样胎死腹中了。
&lt;br&gt;&lt;br&gt;
8. 现在你要面对三群人：你的领导、你的组员和你的客户，和这些人沟通，让他们知道你打算怎么做，什么时候要他们做什么准备，这些事情将是你的主要工作。既然沟通这么重要，那事先定义一下沟通的原则也是一件很要紧的事情。很多沟通原则都是潜规则，如果你在一个部门时间做长了，对这些规则的运用觉得是一件理所应当的事情。但是，你现在面对的是多个部门甚至多个单位，不把沟通规则说清楚，你以后就会吃亏。下面的东西看起来无聊，其实还是很管用的：第一个是规定信息的流动方式和介质，是推还是拉。推的意思就是项目经理将主动发布信息，不管通过电话、邮件还是书面方式，保证将信息传达到每个人。这种情况适合小项目，人少。拉的意思就是项目经理就是一个类似web服务器，你自己需要什么信息就去问他。当然，没有项目经理把自己搞得那么累，他会用发布信息到公共介质的方式公布信息，简单的是白板，复杂一点的是项目的公共信息交互区，潜规则就是我发了你没去看就不要说我没告诉你。说这些看似很无聊，其实里面牵涉信息传达不完全的责任问题。当然，这些都是指一般的方式，而且不要绝对化，一般情况下，主动沟通和被动访问是同时存在的，尤其是对领导，项目经理更加应该主动去和领导沟通。第二个问题就是文档问题，很多人怕写文档，但是项目经理一定要牢记“好记性不如烂笔头”的道理。有理有时候为什么会说不清呢？就是因为没有证据。所以项目经理开始就要和客户说清楚有些文档是必须签字的，比如项目经理的项目日志，每个星期至少让客户签字，另外所有达成共识的东西，比如会议纪要，甚至领导的讲话记录，都要写成文档，双方签字，这样以后扯皮的时候，就能做到有据可查。记住：说了的就和没说一样，只有写下来大家签字后才算真正发生了的。还有一些问题，比如你提交的报告，给领导（包括本方领导和客户领导）做一个选择题，结果领导压住不批，让你无所适从，结果拖延了进度。这时候，你可以等，但是注意要留记录，标明是谁的责任；另外，如果你在开始阶段就和领导商定：如果批示提交三天后没有得到领导答复就算对方同意，这样你就会主动很多。再比如不同事件的审批流程问题：什么等级的事情记录在项目日志里、什么等级的事情要双方项目经理专门签署备忘录、什么等级的事情要双方领导出面签署合同附件等等。事先想得越周到，以后的工作就越主动
&lt;br&gt;&lt;br&gt;
9. 好了，做了很多前期工作，定义了一些游戏规则，现在是坐下来做计划的时候了。这一节，任意找一本项目管理的书都会说得比我好，所以我就少写一点，说一些自己的体会就是了。首先是找几个关键组员，比如客户业务专家、系统分析员等等，做一下项目模块划分工作。项目分成几块去做，每一块完成什么，模块之间的信息如何交换等等。需求定义的是做什么的问题，而这里说的是怎么做的问题。这里要强调一点：完成一个目标有很多种方式，你要选一种你最熟悉的，而不是看上去最完美的，这个思路会让你的项目减少很多风险。有时候客户会被某种新技术打动，坚持要你采用那种新技术，你就应该告诉他：你选我做这个项目，就应该容许我采用自己最喜欢的方式做事情，新技术之所以有诱惑力，就是因为吃亏的人还不多，我不希望你成为第一批受害者。采用一个计划会让你的工作更加明确，比如用微软的Project软件，你填写完表格以后，就可以知道这个项目有多少件事情要做，每件事情需要什么资源，他们之间的前后关系如何，消耗的时间有多长，完成后有什么标志等。所有的结果最后用一个叫做甘特图的形式表现出来。你做完这个表以后会惊奇地发现，甘特图上项目的结束时间会远远落后于你的计划结束时间（签合同的人永远不会先征求你的意见的）。当然，学过项目管理的人会大谈什么WBS、优化路径之类的东西，但是我的经验是你再优化也不可能把这些东西安排到计划的时间结束。如果你没碰到这个问题，在我恭喜你挑了一个轻松活之前，请你再去确认你是否罗列了所有要做的事情和正确评估了它们所需要的时间。这时候，你就要考虑牺牲一些任务的时间（也意味着质量）了。按照什么标准牺牲？这个项目的战略！我们在第三节提到过的战略。我的经验是如果你什么都赶进度，其结果可能就是十件事情你一件也没做好，想想多么失败啊。所以，把资源投到你熟悉和有把握的事情上，最后的结果是十件事情，你有三件做成了精品，三件完成，还有四件因为某些原因延误，成绩单是否靓丽了很多呢？战略决定优先级，而正确排列事情的优先级是一个项目经理能力的主要体现。
&lt;br&gt;&lt;br&gt;
10. 好，现在项目已经完成了前期工作，了解了项目的目标、搞清楚了手上的资源，制定了项目的策略，然后编制了项目的整体计划，项目进入实施阶段。进入这个阶段反而是项目经理比较空闲的时候，不像前期的时候项目经理要象记者一样到处和不同的人接触，搞清楚他们在说什么，努力猜测他们在想什么和他们的真正目的，那才是最累人的事情。当然，小项目的项目经理往往自己也是一个资源，要做很多事情，这时候反而比谁都苦。项目经理这段时间的主要工作是保持和客户领导以及自己领导的沟通。和客户领导沟通时特别要注意，除非你需要对方给你支持，那么你才需要讲得具体一点，否则，告诉他一切正常就可以了，而且态度要积极一些，千万不要说一些领导不懂的细节，比如：“王局长，最近项目进度还算正常，就是JVM经常发生一些内存泄漏的情况…”王局长：“(*&amp;$@@”。和自己的领导汇报也要注意这个问题，除非他是一个技术高手，你需要他的技术经验，否则一般就汇报进度是否正常以及有问题时你的对策和打算就可以了，有些需要他支持的地方，比如资源调用需要说详细一点。和组员开会，除了一些项目进度跟踪会议以外，还有很多讨论会，需要大家用头脑风暴方法给出解决问题。与会人员很多都是技术人员，他们的特点是注重细节、缺乏大局观、有点消极悲观、自尊心强（如果总结得不对，欢迎大家拍砖），所以，你作为会议的主持人，只要负责提出问题和记录下他们的观点，千万不要做评判者的角色。一个问题，有很多方面，从不同的角度看，现象是完全不同的，想想盲人摸象的故事吧。这些技术人员，他们往往精通一个方面，就自己的角度发表见解，除非一些很特别的情况，你都应该认为，他们提出的方案，从他们的角度来看是最合理的。你的长处是掌握事情的优先级，评估各个方面的轻重缓急，从而根据他们的意见得出一个合适的（而不是正确的）方案。所以，在会议上，你要充分尊重每一个人和他的意见，夸奖那些意见提得比较好的人，千万不要把会议带入无休止的争论（你要让大家知道事情不是非黑即白的，而是多元的，唉，我们的教育惹的祸…）。会后，你自己写文档，做决定。会议上大家的面子都被照顾了，自己实施起来的阻力就小，如果还有意见的，你就私下找他聊，如果还不能说服他，你就要让他明白，因为你负责这个项目、你担当风险，所以，这个优先级应该你来判断。组织中的高层，并不见得水平会比一般的成员高，但是，他要承担组织的风险，加之信息的不对称性，所以，对事情的优先级的判断肯定比下属强。
&lt;br&gt;&lt;br&gt;
终可交付成果一定要是可以被检查的，比如，【界面要求：美观大方、简洁明快】，这个要求我就不知道如何检查。所以，给开发小组布置任务的时候就要考虑如何检查结果，比如我见过一个计划，里面有一个任务【开发人员熟悉EJB编程】，这个任务，除了让这些人去参加一些专业认证考试，否则，结果很难被检查。所以，时刻考虑如何检查结果、如何向客户交付是项目经理一直要注意的事情，我听说有些老项目经理拿到项目是倒排计划的，即首先看如何验收和验收标准，然后决定工作计划。很多项目开始了很久，还不知道如何验收，那么这个项目出问题的可能性就很大了。做项目就是为了验收，我们的角色不是研究机构，我们的目的就是在付出那么多劳动后得到结果。
&lt;br&gt;&lt;br&gt;
另外我插一句：我是极其不主张到客户现场开发的。尤其是一大群技术人员直接和客户交流，很容易引起冲突和矛盾（技术人员的本性决定的）。我的做法是项目经理和项目实施人员到现场，软件开发人员还是在公司做项目。项目实施人员就是初级项目经理，他们了解自己的产品，懂得一些客户的业务，关键是在于他们具有良好的沟通能力，俗称“皮厚”。他们是客户和研发人员的桥梁，其职业方向也是很机动灵活，以后可以有很多方向可以转，比开发人员的路要宽得多。
&lt;br&gt;&lt;br&gt;
11. 接着，我们再谈谈最让人头痛的需求变更问题。变更通常分为两种：一种是部分更改了原先的目标，即需求变更；另一种是没改变目标，但是客户不满意目前的实现方式，大到流程的实现，小到界面的布局，都是属于这类。碰到这种情况是难以避免的，主要是事先沟通的不够充分和客户随着项目的进展，慢慢想清楚了问题，改变了以前的思路。这时候，如果需要改并且你的战略是容许这种情况的，那么注意下面几点：
&lt;br&gt;&lt;br&gt;
1. 确保以前的文档，就是记载着以前的结论的东西，客户是否签过字，如果没有，赶紧把你的工作停下来，赶快再和客户自己确认一下你的方案，然后让他签字，避免以后说话没有凭据；
&lt;br&gt;&lt;br&gt;
2. 和客户坐下来，探讨他修改的根本目的是什么，是不是有同样能达到相同目的、但是对你来说有代价更小的选择？
&lt;br&gt;&lt;br&gt;
3. （项目初期的工作）明确更改流程，一般是客户指定一人签字（否则客户每个领导都有权力来插一杠子，你就废了），以正式项目文件的方式提交给你，然后，你做评估分析，分析对成本、进度的影响，在你的领导同意后，出相应意见书，主要是要说明更改设计的原因和指出由此带来的不确定后果（这个东西先写出来，后面如果真的发生了，至少不是你的错）。然后再让客户在上面签字。见过医院给病人做手术以前让家人签的免责条款吗？对，就学习那个，让大家都意识到任何的更改都有成本和代价。
&lt;br&gt;&lt;br&gt;
12. 系统开发告一段落后，就进入客户培训、系统验收阶段，这个阶段，我一般会注意以下几个问题：
&lt;br&gt;&lt;br&gt;
一、给客户做培训前，多注意一些表面功夫。很多程序员认为，系统的逻辑核心是否正确是关键，至于界面如何，界面上的用词是否准确，那是无关紧要的问题，而且培训的时候也是信手拈来，想到哪里说到哪里，下面听讲的人不知所云，云山雾罩，培训效果自然可以想象。我的体会是，给客户做培训的版本，如果你在做多次测试以后仍然不能确定逻辑是否合乎要求，那么，你至少要在界面上多花一点功夫。注意每个界面的布局、用词、链接的正确性等等，总之不要让客户看到一些他不该看到的东西。文档方面，准备至少两个文档：用户手册和培训手册。这两个文档的内容很多都是一致的，但是角度完全不同。用户手册往往是站在系统设计者的角度，按照自己的思路，分模块讲解系统的操作和功能；而培训手册，一定要站在客户业务人员的角度，根据每个角色面对不同业务的办理，如何通过使用本系统的一系列功能来实现目标。所以，第一次培训以前，系统界面是否完整正确、培训文档是否完备都是很关键的因素，第一炮打不响，以后就麻烦很多
&lt;br&gt;&lt;br&gt;
作为项目经理，其实脑子里就是几样东西：做哪些事情、做到什么程度、怎么交货、手上的资源以及各个事情的优先级。所谓多快好省那是人类的梦想，这四个方面都是相互矛盾的，属于典型的又要马儿跑，又要马儿不吃草的类型。考虑问题的轻重缓急方面，往往是把快放在第一位，各方领导都会给你最后期限，所以保进度是第一位的；省是第二位的，企业的根本目的是盈利，如果收入不能增加的话，至少费用要控制住；好是第三位的，没办法，谁都想精益求精，但是，没有强大的资源保障，质量只好先牺牲了；最后是多，客户的要求源源不断，如何降低客户的期望值，让他们从理想回到现实也是项目经理的分内工作。
&lt;br&gt;&lt;br&gt;
验收前，除了做好文档工作，即可交付成果以外，多花时间搞清楚客户的做事情流程是很重要的事情，这些在前面已经有所提及，这里就不再多说。
&lt;br&gt;&lt;br&gt;
我对验收最大的体会就是举证问题。即千万不要让客户这么想：你必须有证据证明你的系统是没问题的。这样你就没戏了，微软那么多天才，做了XP还天天打补丁，要你的程序没问题，既不可能，你也没办法拿出证据。你要让客户明白，所谓验收，就是我按照测试文档的测试用例跑一遍，结果和预期结果一致就应该算通过了，而且还容许有一些小错误留在验收后改正，他可以对测试用例提意见。所以，验收前双方要确认测试计划和测试用例。如果他认为系统不符合要求，那么他应该举证，证明这个系统和最初设计相背离的。所以，参考法律概念，千万不要举证倒置。另外，认为系统完美了才能验收的想法也是错误的，软件开发合同里一定要注明验收以后维护期的费用问题，否则，客户担心一旦验收就得不到你们的支持，自然不配合验收，那么，你这个项目经理就很难交功课了。
&lt;br&gt;&lt;br&gt;
原文链接：http://www.tianya.cn/publicforum/content/itinfo/1/18237.shtml
&lt;br&gt;</content>
 </entry>
 
 <entry>
   <title>Eclipse IDE环境查看Android SDK源码</title>
   <link href="http://blog.xuyuan.me/2012/07/16/eclipse_android_src.html"/>
   <updated>2012-07-16T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2012/07/16/eclipse_android_src</id>
   <content type="html">&lt;p&gt;Android SDK Manager下载的android.jar包默认不包括源码，这给在不同Android版本调试开发程序带来一些不便。解决方法如下：&lt;/p&gt;&lt;p&gt;1. 下载源码(以Ubuntu为例)：&lt;/p&gt;
&lt;p&gt;# clone git source&lt;br /&gt; mkdir android_src&lt;br /&gt; git clone https://android.googlesource.com/platform/frameworks/base ./android_src&lt;/p&gt;
&lt;p&gt;# check tag version&lt;br /&gt; git tag -l&lt;/p&gt;
&lt;p&gt;# checkout code&lt;br /&gt; git checkout android-2.2_r1.2&lt;/p&gt;
&lt;p&gt;# pack the source code&lt;br /&gt; touch android-2.2_r1.2-src.jar&lt;br /&gt; find -name '*.java' -exec jar uf android-2.2_r1.2-src.jar -C . {} \;&lt;/p&gt;
&lt;p&gt;2. 拷贝源码包android-2.2_r1.2-src.jar到Android SDK相应的版本目录下，例如：&lt;/p&gt;
&lt;p&gt;\android-sdk\platforms\android-2.2_r02-windows\sources&lt;/p&gt;
&lt;p&gt;可以执行jar xf android-2.2_r1.2-src.jar解压，或者Windows下可以用winrar等工具解压jar包文件到sources目录&lt;/p&gt;
&lt;p&gt;3. 重启Eclipse, 应该可以查看和debug源文件了。或者可以显式的给android.jar包指定java source路径，例如：C:/Program Files/Android/android-sdk/platforms/android-2.2_r02-windows/sources&lt;/p&gt;
&lt;p&gt;参考：&lt;a href=&quot;http://en.newinstance.it/2010/05/17/attaching-sources-to-androidjar-in-eclipse/&quot; target=&quot;_blank&quot;&gt;http://en.newinstance.it/2010/05/17/attaching-sources-to-androidjar-in-eclipse/&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Issue when connecting ASP.NET project to SQL Server Compact 4.0</title>
   <link href="http://blog.xuyuan.me/2012/03/22/dotnet_sql.html"/>
   <updated>2012-03-22T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2012/03/22/dotnet_sql</id>
   <content type="html">&lt;p&gt;在Review一个ASP.NET项目时，尝试将原来的SQL Server Express数据库转换到SQL Server Compact 4.0&lt;/p&gt;&lt;p&gt;首先修改了web.config文件中的连接字符串：&lt;/p&gt;
&lt;p&gt;&amp;lt;add name=&quot;LocalSqlServer&quot;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;connectionString=&quot;Data Source=C:\Documents\mydata.sdf;Password=mypwd;Persist Security Info=True&quot;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;providerName=&quot;System.Data.SqlServerCe.4.0&quot;/&amp;gt;&lt;/p&gt;
&lt;p&gt;可是页面总是返回错误信息：&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;在经过N次无用的搜索和尝试后，终于在StackOverflow找到了解决方法。原来需要在connect string和页面的SqlDataSource中同时指明providerName=&quot;System.Data.SqlServerCe.4.0&quot;&lt;/p&gt;
&lt;p&gt;例如，页面中调用数据操作的代码为：&lt;/p&gt;
&lt;p&gt;&amp;lt;asp:SqlDataSource &lt;strong&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;providerName=&quot;System.Data.SqlServerCe.4.0&quot;&lt;/span&gt;&lt;/strong&gt; ID=&quot;SqlDataSourceCustomer&quot; runat=&quot;server&quot; ConnectionString=&quot;&amp;lt;%$ ConnectionStrings:LocalSqlServer %&amp;gt;&quot;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SelectCommand=&quot;SELECT '-Select Fleet-' AS NAME, '0' AS Id UNION SELECT Name, Id FROM [Customer] ORDER BY Id ASC&quot; /&amp;gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Nutch开发简介</title>
   <link href="http://blog.xuyuan.me/2012/02/29/nutch_dev.html"/>
   <updated>2012-02-29T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2012/02/29/nutch_dev</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;1.	Nutch简介&lt;/strong&gt;&lt;br /&gt; Nutch 是 Apache 基金会的一个开源项目，它原本是开源文件索引框架 Lucene 项目的一个子项目，后来渐渐发展成长为一个独立的开源项目。它基于 Java 开发，基于 Lucene 框架，提供 Web 网页爬虫功能。另外一个特点在于，它提供了一种插件框架，使得其对各种网页内容的解析、各种数据的采集、查询、集群、过滤等功能能够方便的进行扩展，正是由于有此框架，使得 Nutch 的插件开发非常容易。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://dl.notegg.com/u/6614015/img/nutch-arch.jpg&quot; alt=&quot;&quot; width=&quot;299&quot; height=&quot;450&quot; /&gt;&lt;br /&gt; Nutch允许使用插件来进行media-type解析、Html分析、数据检索、查询和集群化处理。Nutch的的核心模块主要有三个：&lt;br /&gt; 1）Crawler。用来发现、抓取和获取web页面信息。&lt;br /&gt; 2）WebDB。用来存储已有的URL以及获取的网页内容。&lt;br /&gt; 3）Indexer。为已有的网站网页信息和相关链接建立基于关键词搜索的索引。&lt;/p&gt;
&lt;p&gt;其运行流程如下：&lt;br /&gt; 1) 将起始 URL 集合注入到 Nutch 系统之中。&lt;br /&gt; 2) 生成片段文件，其中包含了将要抓取的 URL 地址。&lt;br /&gt; 3) 根据URL地址在互联网上抓取相应的内容。&lt;br /&gt; 4) 解析所抓取到的网页，并分析其中的文本和数据。&lt;br /&gt; 5) 根据新抓取的网页中的URL集合来更新起始URL集合，并再次进行抓取。&lt;br /&gt; 6) 同时，对抓取到的网页内容建立索引，生成索引文件存放在系统之中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.	安装Nutch开发环境 (Windows)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1)	安装Java SDK, Eclipse, Ant, Cygwin&lt;br /&gt; 2)	下载Nutch源码，可根据需要选择不同的版本：&lt;br /&gt; &lt;a href=&quot;http://archive.apache.org/dist/nutch/&quot; target=&quot;_blank&quot;&gt; http://archive.apache.org/dist/nutch/&lt;/a&gt;&lt;br /&gt; 3)	解压Nutch, 并在主目录运行&amp;rsquo;ant job&amp;rsquo;进行编译&lt;br /&gt; 4)	在Eclipse中选择File--&amp;gt;New--&amp;gt;Project--&amp;gt;Java--&amp;gt;Java Project from Existing Ant Buildfile&lt;br /&gt; 5)	在Eclipse项目上设置Properties, 选择Java Build Path --&amp;gt; Libraries --&amp;gt; 右侧的Add External Class Folder, 然后添加Nutch程序的conf目录，并且在Order and Export 页中将conf目录的编译顺序调到最上层。&lt;br /&gt; 6)	修改$NUTCH_HOME/conf/nutch-site.xml或nutch-default.xml文件&lt;br /&gt; 将plugin.folders属性的值设为实际相对或绝对路径，比如../apache-nutch-1.1/build/plugins&lt;br /&gt; 其他一些设置可以参见http://wiki.apache.org/nutch/NutchTutorial&lt;br /&gt; 7)	在Eclipse生成的项目目录下新建名为urls的目录，然后放入文件名为Nutch.txt的文件，其内容是希望作为蜘蛛抓取起点的Seed URL, 比如http://nutch.apache.org. 注意，$NUTCH_HOME/conf/crawl-urlfilter.txt文件中的URL过滤规则需要与Seed URL相对应，以控制Nutch抓取的页面路径和数量&lt;br /&gt; 8)	运行Nutch&lt;br /&gt; 在Eclipse里选择Run--&amp;gt;Run Configuration --&amp;gt;New, 然后Main Class设为org.apache.nutch.crawl.Crawl, Program Arguments设为urls -dir crawl -depth 3 -topN 50, VM arguments设为-Dhadoop.log.dir=logs -Dhadoop.log.file=hadoop.log 然后运行&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.	查看Nutch抓取结果&lt;/strong&gt;&lt;br /&gt; Nutch抓取结果可以通过安装在Tomcat上的Search网页查看。在开发调试时，可以通过Luke程序查看Index结果。或者，也可以通过Nutch自带的命令行程序查看抓取的网页。下面介绍在Windows环境通过Cygwin运行Nutch命令行查看segments内原生网页的方法：&lt;br /&gt; 1)	在Windows环境变量中设置名为NUTCH_JAVA_HOME变量，值的格式为/cygdrive/c/Progra~1/Java/jdk1.7.0_01, 路径为实际JDK的安装目录&lt;br /&gt; 2)	在PATH环境变量中增加Nutch的路径，比如D:\Workspace\w8\apache-nutch-1.4-bin\runtime\local\bin&lt;br /&gt; 3)	运行命令：nutch readseg -dump d:/Workspace/w5/Nutch_1_1/crawl/segments/20120222160409 /cygdrive/d/Workspace/w8 其中-dump后的第一个参数是实际生成的segments地址，第二个参数是输出dump文件的路径&lt;br /&gt; 4)	打开生成的dump文件，可以看到segment里抓取的网页源码和其他信息&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.	开发Nutch插件&lt;/strong&gt;&lt;br /&gt; 1)	以下为一个简单的示例插件程序，其作用是基于IndexingFilter, 将url符合某些规则的抓取结果抛弃，不进行索引或显示在结果中：&lt;/p&gt;
&lt;pre class=&quot;brush: java;fontsize: 100; first-line: 1; &quot;&gt;// Source: src/plugin/myplugins/src/java/com/mycompany/nutch/indexing/InvalidUrlIndexFilter.java
package com.mycompany.nutch.indexing;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.apache.log4j.Logger;
import org.apache.nutch.crawl.CrawlDatum;
import org.apache.nutch.crawl.Inlinks;
import org.apache.nutch.indexer.IndexingException;
import org.apache.nutch.indexer.IndexingFilter;
import org.apache.nutch.indexer.NutchDocument;
import org.apache.nutch.parse.Parse;

/**
* This indexing filter removes &quot;invalid&quot; urls that have been crawled
* (out of necessity, since they lead to valid pages), but need to be
* removed from the index. The invalid urls contain the string
* &quot;archive&quot; (for archive pages which contain full text and links to
* individual blog pages), &quot;label&quot; (tag based search result page with
* full text of blogs labelled with the tag, and links to the individual
* blog pages), and &quot;feeds&quot; (for RSS/Atom feeds, which we don't care
* about, since they are duplicates of our blog pages). We also don't
* care about the urls that are not suffixed with a .html extension.
* @author Sujit Pal
* @version $Revision$
*/
public class InvalidUrlIndexFilter implements IndexingFilter {

private static final Logger LOGGER =
Logger.getLogger(InvalidUrlIndexFilter.class);

private Configuration conf;

public void addIndexBackendOptions(Configuration conf) {
// NOOP
return;
}

public NutchDocument filter(NutchDocument doc, Parse parse, Text url,
CrawlDatum datum, Inlinks inlinks) throws IndexingException {
if (url == null) {
return null;
}
if (url.find(&quot;archive&quot;) &amp;gt; -1 ||
url.find(&quot;label&quot;) &amp;gt; -1 ||
url.find(&quot;feeds&quot;) &amp;gt; -1) {
// filter out if url contains &quot;archive&quot;, &quot;label&quot; or &quot;feeds&quot;
LOGGER.debug(&quot;Skipping URL: &quot; + new String(url.getBytes()));
return null;
}
if (url.find(&quot;.html&quot;) == -1) {
// filter out if url does not have a .html extension
LOGGER.debug(&quot;Skipping URL: &quot; + new String(url.getBytes()));
return null;
}
// otherwise, return the document
return doc;
}

public Configuration getConf() {
return conf;
}

public void setConf(Configuration conf) {
this.conf = conf;
}
}&lt;/pre&gt;
&lt;p&gt;2)	创建名为plugin.xml的文件，用以描述插件本身，内容如下：&lt;/p&gt;
&lt;pre class=&quot;brush: xml;fontsize: 100; first-line: 1; &quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;plugin id=&quot;myplugins&quot; name=&quot;My test plugins for Nutch&quot;
    version=&quot;0.0.1&quot; provider-name=&quot;mycompany.com&quot;&amp;gt;

   &amp;lt;runtime&amp;gt;
     &amp;lt;library name=&quot;myplugins.jar&quot;&amp;gt;
       &amp;lt;export name=&quot;*&quot;/&amp;gt;
     &amp;lt;/library&amp;gt;
   &amp;lt;/runtime&amp;gt;

   &amp;lt;extension id=&quot;com.mycompany.nutch.indexing.InvalidUrlIndexFilter&quot;
       name=&quot;Invalid URL Filter&quot;
       point=&quot;org.apache.nutch.indexer.IndexingFilter&quot;&amp;gt;
     &amp;lt;implementation id=&quot;myplugins-invalidurlfilter&quot;
         class=&quot;com.mycompany.nutch.indexing.InvalidUrlIndexFilter&quot;/&amp;gt;
   &amp;lt;/extension&amp;gt;
&amp;lt;/plugin&amp;gt;&lt;/pre&gt;
&lt;p&gt;3)	编译以上程序，并打包为jar文件，和上述plugin.xml文件一同置于$NUTCH_HOME/build/plugins/myplugins目录&lt;br /&gt; 4)	修改$NUTCH_HOME/conf/nutch-site.xml或nutch-default.xml文件中的plugin.includes属性节点，将插件名增加到其中，例如：&lt;/p&gt;
&lt;pre class=&quot;brush: xml;fontsize: 100; first-line: 1; &quot;&gt;  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;plugin.includes&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;
      myplugins|protocol-http|urlfilter-regex|parse-(text|html\
      |js)|index-(basic|anchor)|query-(basic|site|url)|\
      response-(json|xml)|summary-basic|scoring-opic\
      |urlnormalizer-(pass|regex|basic)
    &amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;&lt;/pre&gt;
&lt;p&gt;5)	运行Nutch程序，一切正常的话，插件会被调用并过滤URL&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5.	参考资料&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;http://wiki.apache.org/nutch/NutchTutorial&lt;br /&gt; http://wiki.apache.org/nutch/RunNutchInEclipse0.9&lt;br /&gt; http://wiki.apache.org/nutch/WritingPluginExample-0.9&lt;br /&gt; http://sujitpal.blogspot.com/2009/07/nutch-getting-my-feet-wet.html&lt;br /&gt; http://today.java.net/pub/a/today/2006/01/10/introduction-to-nutch-1.html#configuration-customization&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Linux配置使用命令行(mailx)收发Gmail邮件</title>
   <link href="http://blog.xuyuan.me/2012/02/27/mailx_gmail.html"/>
   <updated>2012-02-27T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2012/02/27/mailx_gmail</id>
   <content type="html">&lt;p&gt;项目使用Amazon EC2作为服务器，在测试的时候发现邮件不能被正常发出去，网上查了下貌似Amazon的服务器为了防止被当作发垃圾邮件的工具，对邮件发送有限制。Amazon提供了一个Simple Mail Service可以与EC2集成在一起使用，不过对于Gmail的用户，经过简单的设置可以直接让mailx命令通过Gmail收发邮件。&lt;/p&gt;&lt;p&gt;以下的教程基于&lt;a href=&quot;http://klenwell.com/is/UbuntuCommandLineGmail&quot; target=&quot;_blank&quot;&gt;http://klenwell.com/is/UbuntuCommandLineGmail&lt;/a&gt;.经过测试对邮件服务器托管在Google Apps的自有域名也同样适用。教程是基于Ubuntu写的，但经过简单修改应该同样适用于其他UNIX/Linux系统。&lt;/p&gt;
&lt;p&gt;1. 安装程序包：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;$ sudo apt-get install msmtp
$ sudo apt-get install mailx&lt;/pre&gt;
&lt;p&gt;并查看/usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt证书文件是否已经存在，如果没有可以从以下地址下载：&lt;a href=&quot;http://packages.ubuntu.com/en/source/lucid/ca-certificates&quot; target=&quot;_blank&quot;&gt;http://packages.ubuntu.com/en/source/lucid/ca-certificates&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. 修改msmtp配置文件：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;$ gedit ~/.msmtprc&lt;/pre&gt;
&lt;p&gt;拷贝以下内容，并替换你自己的用户名密码：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;# config options: http://msmtp.sourceforge.net/doc/msmtp.html#A-user-configuration-file
defaults
logfile /tmp/msmtp.log

# gmail account
account gmail
auth on
host smtp.gmail.com
port 587
user YOURNAME@gmail.com
password YOURPASSWORD
from YOURNAME@gmail.com
tls on
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt

# set default account to use (not necessary with single account)
account default : gmail&lt;/pre&gt;
&lt;p&gt;修改文件访问权限：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;$ chmod 600 ~/.msmtprc&lt;/pre&gt;
&lt;p&gt;3. 修改mailx配置文件：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;$ gedit ~/.mailrc&lt;/pre&gt;
&lt;p&gt;拷贝以下内容，并替换你自己的用户名：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;# set smtp for mailx

# gmail account (default)
# $ mailx -s &quot;subject line&quot; -a /path/attachment recipient@email.com &amp;lt; /path/body.txt set from=&quot;YOURNAME@gmail.com (YOURNAME)&quot; set sendmail=&quot;/usr/bin/msmtp&quot; set message-sendmail-extra-arguments=&quot;-a gmail&quot;&lt;/pre&gt;
&lt;p&gt;4. 用以下命令可以测试：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;$ echo -e &quot;testing email from the command line&quot; &amp;gt; /tmp/test_email
$ mailx -s &quot;mailx gmail test&quot; YOURNAME@gmail.com &amp;lt; /tmp/test_email&lt;/pre&gt;
&lt;p&gt;检查目标邮箱或者log文件：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;$ tail /tmp/msmtp.log&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>免费获取Dropbox的5GB额外空间-教程</title>
   <link href="http://blog.xuyuan.me/2012/02/07/dropbox_5GB.html"/>
   <updated>2012-02-07T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2012/02/07/dropbox_5GB</id>
   <content type="html">&lt;p&gt;Dropbox正在测试上传相机照片和视频功能，用户可以额外获得5GB免费空间&lt;/p&gt;&lt;p&gt;如果您还沒有Dropbox，点这个邀请链接申请 &lt;a href=&quot;http://db.tt/T8Prpbx&quot; target=&quot;_blank&quot;&gt;http://db.tt/T8Prpbx&lt;/a&gt; 可以多送500MB空间。&lt;br /&gt;
工欲善其事，必先利其器。下面列出准备工具 ：&lt;br /&gt;
1.Dropbox 1.3.12；&lt;br /&gt;
2.大文件若干，总和大于5G且小于Dropbox空间，文件格式不限，后缀改为 avi(或者有足够多的照片文件也可以)；&lt;br /&gt;
3.Windows平台（不支持Linux平台，Mac平台未测试）；&lt;/p&gt;
&lt;p&gt;具体操作步骤 ：&lt;/p&gt;
&lt;p&gt;1.系统必须打开&amp;ldquo;自动播放&amp;rdquo;功能；&lt;br /&gt;
提示：若未打开自动播放功能，则执行以下操作：&lt;br /&gt;
Windows XP：运行：gpedit.msc&amp;rarr;管理模板&amp;rarr;系统&amp;rarr;关闭自动播放&amp;rarr;已禁用&amp;rarr;打开&lt;br /&gt;
Windows 7：运行：gpedit.msc&amp;rarr;管理模板&amp;rarr;Windows组件&amp;rarr;自动播放策略&amp;rarr;关闭自动播放&amp;rarr;已禁用&amp;rarr;打开&lt;/p&gt;
&lt;p&gt;2a.在移动设备比如手机或者相机存储照片和视频的目录内准备上述大文件，一般是DCIM目录下，比如F:\DCIM\100MEDIA；&lt;br /&gt;
2b.或者，如果移动设备没有这么多存储空间，那么可以在电脑系统分区以外的任意磁盘根目录创建DCIM目录，将上文提到的大文件拷贝至此。然后用系统自带的磁盘管理工具(我的电脑&amp;rarr;右键&amp;rarr;管理)修改该分区驱动器号，系统重新辨识盘符后会弹出自动播放；&lt;/p&gt;
&lt;p&gt;3.插入移动设备(或修改根目录驱动器号)后，在弹出的自动播放窗口，选择将文件导入Dropbox；&lt;/p&gt;
&lt;p&gt;4.待Dropbox将文件拷贝至本地磁盘并完成索引，开始上传时，删除拷贝至Dropbox目录的文件。文件删除后，Dropbox自动停止上传(当然，如果你有足够的上传带宽和时间，完全可以等待这些文件完成同步到Dropbox)；&lt;/p&gt;
&lt;p&gt;5.稍等一会，Dropbox将提示增加了空间。具体增加的空间大小，视大文件的大小而定，但增加的空间，最大为5G。&lt;/p&gt;
&lt;p&gt;提示 ：&lt;br /&gt;
1.第一次成功通过Dropbox导入照片或视频即可获得500MB空间，此后每上传500MB即有额外500MB空间，最大获得5GB；&lt;br /&gt;
2.若空间不足，可分数次完成文件拷贝之操作；&lt;br /&gt;
&lt;strong&gt;3.客户端版本必须为1.3.12，否则无法在未上传完整文件的条件下，增加5G空间&lt;/strong&gt;；&lt;br /&gt;
4.直接向&quot;Camera Uploads&quot;文件夹拷贝文件不能获得奖励空间。&lt;/p&gt;
&lt;p&gt;客户端下载链接：&lt;a href=&quot;https://dl-web.dropbox.com/u/17/Dropbox%201.3.12.exe&quot; target=&quot;_blank&quot;&gt;https://dl-web.dropbox.com/u/17/Dropbox%201.3.12.exe&lt;/a&gt;&lt;br /&gt;
参考：&lt;a href=&quot;http://forums.dropbox.com/topic.php?id=53104&amp;amp;replies=1199&quot; target=&quot;_blank&quot;&gt;http://forums.dropbox.com/topic.php?id=53104&amp;amp;replies=1199&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>近千本Dropbox分享的Kindle中文电子书，持续更新中</title>
   <link href="http://blog.xuyuan.me/2012/01/31/kindle_dropbox.html"/>
   <updated>2012-01-31T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2012/01/31/kindle_dropbox</id>
   <content type="html">&lt;p&gt;这个不知道之前有没有人发过，如果已经看到过请忽略。Dropbox中的内容由网友scomper提供。&lt;/p&gt;&lt;p&gt;没有Dropbox帐号的同学可以通过邀请链接&lt;a href=&quot;http://db.tt/T8Prpbx&quot; target=&quot;_blank&quot;&gt;http://db.tt/T8Prpbx&lt;/a&gt;注册，这样还可以为彼此增加500MB的存储空间。&lt;/p&gt;
&lt;p&gt;有Dropbox帐号可以点页面中的&quot;Copy to my Dropbox&quot;将文件夹整个拷贝到自己的Dropbox中。&lt;/p&gt;
&lt;p&gt;Dropbox电子书共享页面的地址是&lt;a href=&quot;http://db.tt/rNe0wXl&quot; target=&quot;_blank&quot;&gt;http://db.tt/rNe0wXl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;外国文学&lt;/strong&gt;&lt;br /&gt;
1984.mobi&lt;br /&gt;
1Q84.mobi&lt;br /&gt;
X的悲剧.txt&lt;br /&gt;
一个人的好天气.pdf&lt;br /&gt;
一个陌生女人的来信.mobi&lt;br /&gt;
万物有灵且美.mobi&lt;br /&gt;
三口棺材.mobi&lt;br /&gt;
三杯茶.mobi&lt;br /&gt;
不去会死！.mobi&lt;br /&gt;
不抱怨的世界.mobi&lt;br /&gt;
不抱怨的世界2.mobi&lt;br /&gt;
且听风吟.mobi&lt;br /&gt;
世界十大禁书完美合集.mobi&lt;br /&gt;
东霓.mobi&lt;br /&gt;
丹布朗作品集.mobi&lt;br /&gt;
人性的弱点.mobi&lt;br /&gt;
优雅一生的装扮课.mobi&lt;br /&gt;
伯恩的身份.mobi&lt;br /&gt;
假若明天来临.mobi&lt;br /&gt;
傲慢与偏见.mobi&lt;br /&gt;
剑与禅：宫本武藏.pdf&lt;br /&gt;
动物庄园.mobi&lt;br /&gt;
十一种孤独.mobi&lt;br /&gt;
博尔赫斯小说集.mobi&lt;br /&gt;
双城记.pdf&lt;br /&gt;
吸血鬼日记1：觉醒.mobi&lt;br /&gt;
吸血鬼日记2：斗争.mobi&lt;br /&gt;
吸血鬼日记3：狂怒.mobi&lt;br /&gt;
吸血鬼日记4：黑暗重汇.mobi&lt;br /&gt;
告别天堂.mobi&lt;br /&gt;
呼啸山庄.mobi&lt;br /&gt;
哈利波特全集.mobi&lt;br /&gt;
哈尔罗杰历险记.mobi&lt;br /&gt;
国富论.-.亚当斯密斯.mobi&lt;br /&gt;
在路上.mobi&lt;br /&gt;
基地.mobi&lt;br /&gt;
基督山伯爵.mobi&lt;br /&gt;
复杂-米歇尔沃尔德罗普.mobi&lt;br /&gt;
失控.pdf&lt;br /&gt;
失落的秘符.mobi&lt;br /&gt;
安娜&amp;middot;卡列尼娜.mobi&lt;br /&gt;
安徒生童话.mobi&lt;br /&gt;
少有人走的路.mobi&lt;br /&gt;
岁月的泡沫.mobi&lt;br /&gt;
巴黎圣母院.mobi&lt;br /&gt;
希区柯克悬念故事(全八册).mobi&lt;br /&gt;
希腊神话故事.mobi&lt;br /&gt;
幽灵男.pdf&lt;br /&gt;
当我们谈论爱情时我们在谈论什么.mobi&lt;br /&gt;
彼得&amp;middot;潘.mobi&lt;br /&gt;
德川家康（全集1-13）.mobi&lt;br /&gt;
心是孤独的猎手.mobi&lt;br /&gt;
忏悔录-奥古斯丁.mobi&lt;br /&gt;
悲惨世界.mobi&lt;br /&gt;
情人.mobi&lt;br /&gt;
我的前妻们.mobi&lt;br /&gt;
扫起落叶好过冬.txt&lt;br /&gt;
挪威的森林.mobi&lt;br /&gt;
教父.mobi&lt;br /&gt;
敦煌.mobi&lt;br /&gt;
斯蒂芬&amp;middot;金_经典系列.mobi&lt;br /&gt;
日本四大推理奇书之黑死馆杀人事件.mobi&lt;br /&gt;
时间回旋.mobi&lt;br /&gt;
时间旅行者的妻子.mobi.pdf&lt;br /&gt;
暮光之城(全集1-5).mobi&lt;br /&gt;
最初的爱情，最后的仪式.mobi&lt;br /&gt;
月亮和六便士.mobi&lt;br /&gt;
朗读者.pdf&lt;br /&gt;
末日逼近(上下).mobi&lt;br /&gt;
村上春树三大杰作（合集）.mobi&lt;br /&gt;
查太莱夫人的情人.mobi&lt;br /&gt;
格林童话集.mobi&lt;br /&gt;
森村诚一作品集.mobi&lt;br /&gt;
橙.mobi&lt;br /&gt;
欧亨利短篇小说集.mobi&lt;br /&gt;
汤姆叔叔的小屋.mobi&lt;br /&gt;
沙丘三部曲.mobi&lt;br /&gt;
海伯利安-[美]丹&amp;middot;西蒙斯.mobi&lt;br /&gt;
海边的卡夫卡.mobi&lt;br /&gt;
灿烂千阳.mobi&lt;br /&gt;
牧羊少年奇幻之旅.mobi&lt;br /&gt;
猎杀红色十月号.pdf&lt;br /&gt;
猫与鼠.prc&lt;br /&gt;
瓦尔登湖-梭罗.pdf&lt;br /&gt;
生命中不能承受之轻.mobi&lt;br /&gt;
男人一本书.mobi&lt;br /&gt;
男人这东西.mobi&lt;br /&gt;
百年孤独.mobi&lt;br /&gt;
看不见的城市.mobi&lt;br /&gt;
看得见的与看不见的.txt&lt;br /&gt;
硅谷禁书.mobi&lt;br /&gt;
福尔摩斯探案全集.mobi&lt;br /&gt;
窗边的小豆豆.mobi&lt;br /&gt;
第一次一个人旅行.mobi&lt;br /&gt;
第二十二条军规.mobi&lt;br /&gt;
简&amp;middot;爱.mobi&lt;br /&gt;
简爱.pdf&lt;br /&gt;
约翰克利斯多夫.pdf&lt;br /&gt;
纳尼亚传奇（全集）.mobi&lt;br /&gt;
罪与罚.mobi&lt;br /&gt;
肖申克的救赎.mobi.pdf&lt;br /&gt;
舞!舞!舞!.mobi&lt;br /&gt;
荆棘鸟.mobi&lt;br /&gt;
莎士比亚全集.mobi&lt;br /&gt;
莫泊桑短篇小说精选集.mobi&lt;br /&gt;
菊与刀.mobi&lt;br /&gt;
蜘蛛女之吻.mobi&lt;br /&gt;
蝴蝶梦.mobi&lt;br /&gt;
达摩流浪者.mobi&lt;br /&gt;
达芬奇密码.mobi&lt;br /&gt;
追忆似水年华.mobi&lt;br /&gt;
追风筝的人.mobi&lt;br /&gt;
银河系漫游指南.mobi&lt;br /&gt;
银河英雄传说.mobi&lt;br /&gt;
阿狸&amp;middot;梦之城堡.mobi&lt;br /&gt;
阿狸&amp;middot;永远站.mobi&lt;br /&gt;
阿甘正传.mobi.pdf&lt;br /&gt;
阿甘正传续集.mobi&lt;br /&gt;
雪国.mobi&lt;br /&gt;
青春咖啡馆.mobi&lt;br /&gt;
静静的顿河.mobi&lt;br /&gt;
香水&amp;mdash;个谋杀犯的故事.mobi&lt;br /&gt;
魔戒（全集）.mobi&lt;br /&gt;
麦田里的守望者.mobi&lt;br /&gt;
鼠疫.mobi&lt;br /&gt;
龙纹身的女孩.mobi&lt;br /&gt;
银孔雀.mobi&lt;br /&gt;
遥远的野玫瑰村.mobi&lt;br /&gt;
黄昏海的故事.mobi&lt;br /&gt;
风与树的歌.mobi&lt;br /&gt;
白鹦鹉的森林.mobi&lt;br /&gt;
人骨拼图.mobi&lt;br /&gt;
老人与海.mobi&lt;br /&gt;
吉檀迦利.mobi&lt;br /&gt;
青鸟.mobi&lt;br /&gt;
尼尔斯骑鹅历险记.mobi&lt;br /&gt;
商道.mobi&lt;br /&gt;
石猴子.mobi&lt;br /&gt;
消失的人.mobi&lt;br /&gt;
空椅子.mobi&lt;br /&gt;
棺材舞者.mobi&lt;br /&gt;
挪威的森林(林少华译).mobi&lt;br /&gt;
人性的弱点.mobi&lt;br /&gt;
探索奇迹.pdf&lt;br /&gt;
珍珠.pdf&lt;br /&gt;
基地系列：基地后传2-基地与地球.pdf&lt;br /&gt;
基地系列：基地前传1-基地前奏.pdf&lt;br /&gt;
基地系列：基地后传1-基地边缘.pdf&lt;br /&gt;
基地系列：基地三部曲3-第二基地.pdf&lt;br /&gt;
基地系列：基地三部曲2-基地与帝国.pdf&lt;br /&gt;
基地系列：基地三部曲1-基地.pdf&lt;br /&gt;
光晕5：丰饶星战役.pdf&lt;br /&gt;
光晕4：奥星的幽灵.pdf&lt;br /&gt;
光晕3：初次反击.pdf&lt;br /&gt;
光晕2：洪魔.pdf&lt;br /&gt;
光晕1：致远星的沦陷.pdf&lt;br /&gt;
楼兰.mobi&lt;br /&gt;
冰与火之歌(1-4).mobi&lt;br /&gt;
神经浪游者-威廉吉布森.mobi&lt;br /&gt;
失控_机器、社会与经济的新生物学.mobi&lt;br /&gt;
日本沉没.mobi&lt;br /&gt;
基地系列(1-7).mobi&lt;br /&gt;
马耳他黑鹰.mobi&lt;br /&gt;
爱的艺术.mobi&lt;br /&gt;
日本沉没.mobi&lt;br /&gt;
西德尼&amp;middot;谢尔顿作品集.mobi（1003）&lt;br /&gt;
[日]东野圭吾《伽利略的苦恼》.mobi&lt;br /&gt;
[日]东野圭吾《使命与心的极限》.mobi&lt;br /&gt;
[日]东野圭吾《侦探伽利略》.mobi&lt;br /&gt;
[日]东野圭吾《侦探俱乐部》.mobi&lt;br /&gt;
[日]东野圭吾《信（手纸）》.mobi&lt;br /&gt;
[日]东野圭吾《再生魔术之女》.mobi&lt;br /&gt;
[日]东野圭吾《分身》.mobi&lt;br /&gt;
[日]东野圭吾《十一字杀人》.mobi&lt;br /&gt;
[日]东野圭吾《单恋》.mobi&lt;br /&gt;
[日]东野圭吾《变身》.mobi&lt;br /&gt;
[日]东野圭吾《同级生》.mobi&lt;br /&gt;
[日]东野圭吾《名侦探的守则》.mobi&lt;br /&gt;
[日]东野圭吾《名侦探的诅咒》.mobi&lt;br /&gt;
[日]东野圭吾《回廊亭杀人事件》.mobi&lt;br /&gt;
[日]东野圭吾《圣女的救济》.mobi&lt;br /&gt;
[日]东野圭吾《嫌疑人X的献身》.mobi&lt;br /&gt;
[日]东野圭吾《宿命》.mobi&lt;br /&gt;
[日]东野圭吾《布鲁特斯的心脏》.mobi&lt;br /&gt;
[日]东野圭吾《平行世界的爱情故事》.mobi&lt;br /&gt;
[日]东野圭吾《幻夜》.mobi&lt;br /&gt;
[日]东野圭吾《彷徨之刃》.mobi&lt;br /&gt;
[日]东野圭吾《恶意》.mobi&lt;br /&gt;
[日]东野圭吾《我杀了他》.mobi&lt;br /&gt;
[日]东野圭吾《放学后》.mobi&lt;br /&gt;
[日]东野圭吾《时生》.mobi&lt;br /&gt;
[日]东野圭吾《杀人之门》.mobi&lt;br /&gt;
[日]东野圭吾《毒笑小说》.mobi&lt;br /&gt;
[日]东野圭吾《毕业前的杀人游戏》.mobi&lt;br /&gt;
[日]东野圭吾《沉睡的森林》.mobi&lt;br /&gt;
[日]东野圭吾《没有凶手的杀人夜》.mobi&lt;br /&gt;
[日]东野圭吾《流星之绊》.mobi&lt;br /&gt;
[日]东野圭吾《湖边凶杀案》.mobi&lt;br /&gt;
[日]东野圭吾《濒死之眼》.mobi&lt;br /&gt;
[日]东野圭吾《白夜行》.mobi&lt;br /&gt;
[日]东野圭吾《秘密》.mobi&lt;br /&gt;
[日]东野圭吾《红手指》.mobi&lt;br /&gt;
[日]东野圭吾《美丽的凶器》.mobi&lt;br /&gt;
[日]东野圭吾《超&amp;middot;杀人事件》.mobi&lt;br /&gt;
[日]东野圭吾《过去我死去的家》.mobi&lt;br /&gt;
[日]东野圭吾《雪地杀机》.mobi&lt;br /&gt;
[日]东野圭吾《预知梦》.mobi&lt;br /&gt;
[日]东野圭吾《黑笑小说》.mobi&lt;br /&gt;
阿加莎.克里斯蒂\ABC谋杀案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\万圣节前夜的谋杀案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\三幕悲剧.mobi&lt;br /&gt;
阿加莎.克里斯蒂\东方快车谋杀案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\云中命案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\人性记录.mobi&lt;br /&gt;
阿加莎.克里斯蒂\借镜杀人.mobi&lt;br /&gt;
阿加莎.克里斯蒂\古墓之谜.mobi&lt;br /&gt;
阿加莎.克里斯蒂\命案目睹记.mobi&lt;br /&gt;
阿加莎.克里斯蒂\啤酒谋杀案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\四魔头.mobi&lt;br /&gt;
阿加莎.克里斯蒂\圣诞奇案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\地狱之旅.mobi&lt;br /&gt;
阿加莎.克里斯蒂\复仇女神.mobi&lt;br /&gt;
阿加莎.克里斯蒂\大象的证词.mobi&lt;br /&gt;
阿加莎.克里斯蒂\奉命谋杀.mobi&lt;br /&gt;
阿加莎.克里斯蒂\尼罗河上的惨案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\幕后凶手.mobi&lt;br /&gt;
阿加莎.克里斯蒂\底牌.mobi&lt;br /&gt;
阿加莎.克里斯蒂\怪屋.mobi&lt;br /&gt;
阿加莎.克里斯蒂\怪钟疑案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\悬崖山庄奇案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\斯塔福特疑案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\斯泰尔斯庄园奇案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\无人生还.mobi&lt;br /&gt;
阿加莎.克里斯蒂\无尽长夜.mobi&lt;br /&gt;
阿加莎.克里斯蒂\暗藏杀机.mobi&lt;br /&gt;
阿加莎.克里斯蒂\杀人不难.mobi&lt;br /&gt;
阿加莎.克里斯蒂\柏棺.mobi&lt;br /&gt;
阿加莎.克里斯蒂\死亡约会.mobi&lt;br /&gt;
阿加莎.克里斯蒂\死人的殿堂.mobi&lt;br /&gt;
阿加莎.克里斯蒂\沉睡的谋杀案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\沉默的证人.mobi&lt;br /&gt;
阿加莎.克里斯蒂\清洁女工之死.mobi&lt;br /&gt;
阿加莎.克里斯蒂\牙医谋杀案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\破镜谋杀案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\空谷幽魂.mobi&lt;br /&gt;
阿加莎.克里斯蒂\第三个女郎.mobi&lt;br /&gt;
阿加莎.克里斯蒂\罗杰疑案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\致命遗产.mobi&lt;br /&gt;
阿加莎.克里斯蒂\蓝色列车之谜.mobi&lt;br /&gt;
阿加莎.克里斯蒂\藏书室女尸之谜.mobi&lt;br /&gt;
阿加莎.克里斯蒂\褐衣男子.mobi&lt;br /&gt;
阿加莎.克里斯蒂\闪光的氰化物.mobi&lt;br /&gt;
阿加莎.克里斯蒂\阳光下的罪恶.mobi&lt;br /&gt;
阿加莎.克里斯蒂\零时.mobi&lt;br /&gt;
阿加莎.克里斯蒂\高尔夫球场命案.mobi&lt;br /&gt;
阿加莎.克里斯蒂\魔手.mobi&lt;br /&gt;
阿加莎.克里斯蒂\鸽群中的猫.mobi&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二十四史&lt;/strong&gt;&lt;br /&gt;
01史记&amp;ndash;24明史.pdf&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;历史人文&lt;/strong&gt;&lt;br /&gt;
一口气读完世界历史.mobi&lt;br /&gt;
万历十五年.pdf&lt;br /&gt;
中国历史通俗演义.mobi&lt;br /&gt;
中国大历史.mobi&lt;br /&gt;
中国最美的100风情小镇.mobi&lt;br /&gt;
中国近代史.prc&lt;br /&gt;
乾隆皇帝.mobi&lt;br /&gt;
二月河帝王系列.mobi&lt;br /&gt;
剑桥中华民国史（上卷）.mobi&lt;br /&gt;
剑桥中华民国史（下卷）.mobi&lt;br /&gt;
剑桥中国史（全集）.mobi&lt;br /&gt;
剑桥中国晚清史（上卷）.mobi&lt;br /&gt;
剑桥中国晚清史（下卷）.mobi&lt;br /&gt;
北洋裂变：军阀与五四.mobi&lt;br /&gt;
大秦帝国.mobi&lt;br /&gt;
如果这是宋史（1-4全集）.azw&lt;br /&gt;
康熙大帝.mobi&lt;br /&gt;
张居正.mobi&lt;br /&gt;
我们台湾这些年_讲述台湾老百姓自己的故事.mobi&lt;br /&gt;
战天京.mobi&lt;br /&gt;
明朝那些事儿.mobi&lt;br /&gt;
春秋左传.mobi&lt;br /&gt;
曾国藩文集.mobi&lt;br /&gt;
曾國藩第一部血祭.mobi&lt;br /&gt;
曾國藩第三部黑雨.mobi&lt;br /&gt;
曾國藩第二部野焚.mobi&lt;br /&gt;
最寒冷的冬天－美国人眼中的朝鲜战争(节选).mobi&lt;br /&gt;
朱鎔基傳.mobi&lt;br /&gt;
李开复自传：世界因你不同.mobi&lt;br /&gt;
武则天正传.mobi.pdf&lt;br /&gt;
毛泽东鲜为人知的故事.prc&lt;br /&gt;
毛泽东传（含图版）.mobi&lt;br /&gt;
毛泽东传（文字版）.mobi&lt;br /&gt;
毛泽东最后七年风雨路.mobi&lt;br /&gt;
民主的细节.mobi&lt;br /&gt;
活着就为改变世界.mobi&lt;br /&gt;
流血的仕途.mobi&lt;br /&gt;
真相与自白.mobi&lt;br /&gt;
第二次世界大战回忆录.mobi&lt;br /&gt;
细说三国.mobi&lt;br /&gt;
细说两晋南北朝.mobi&lt;br /&gt;
细说元朝.mobi&lt;br /&gt;
细说宋朝.mobi&lt;br /&gt;
细说明朝.mobi&lt;br /&gt;
细说民国创立.mobi&lt;br /&gt;
细说清朝.mobi&lt;br /&gt;
细说秦汉.mobi&lt;br /&gt;
细说隋唐.mobi&lt;br /&gt;
胡雪岩1：胡雪岩.mobi&lt;br /&gt;
胡雪岩2：红顶商人.mobi&lt;br /&gt;
胡雪岩3：灯火楼台.mobi&lt;br /&gt;
蒋介石传.mobi&lt;br /&gt;
蒋氏家族全传.mobi&lt;br /&gt;
袁氏當國.mobi&lt;br /&gt;
货币战争.mobi&lt;br /&gt;
货币战争2：金权天下.mobi&lt;br /&gt;
货币战争3：金融高边疆.mobi&lt;br /&gt;
趣读史记：不可不知的49个史记人物.mobi&lt;br /&gt;
近距离看美国（全集）.mobi&lt;br /&gt;
雍正皇帝.mobi&lt;br /&gt;
李鴻章.mobi&lt;br /&gt;
易中天：先秦诸子百家争鸣.mobi&lt;br /&gt;
曾国藩的正面与侧面.pdf&lt;br /&gt;
吕氏春秋.pdf&lt;br /&gt;
和珅传.pdf&lt;br /&gt;
拿破仑传.pdf&lt;br /&gt;
美国宪政历程－影响美国宪政的25个司法大案.mobi&lt;br /&gt;
改变中国.pdf&lt;br /&gt;
张学良口述历史.pdf&lt;br /&gt;
赫逊河畔谈中国历史.mobi&lt;br /&gt;
西潮.mobi&lt;br /&gt;
晋朝那些事儿.mobi&lt;br /&gt;
中国文明的反思.mobi&lt;br /&gt;
陈布雷回忆录简体版.mobi&lt;br /&gt;
瞿秋白多余的话及其他.mobi&lt;br /&gt;
细说清人社会生活.mobi&lt;br /&gt;
日本史.mobi&lt;br /&gt;
唐朝那些事儿（趣话隋唐）.mobi （0916）&lt;br /&gt;
西洋世界军事史.mobi（0923）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;古典文学&lt;/strong&gt;&lt;br /&gt;
三国演义.mobi&lt;br /&gt;
三字经-全文-解释.mobi&lt;br /&gt;
世说新语译注.mobi&lt;br /&gt;
乐府诗集.mobi&lt;br /&gt;
二刻拍案惊奇.mobi&lt;br /&gt;
仓央嘉措诗集.mobi&lt;br /&gt;
传习录.pdf&lt;br /&gt;
全宋词.mobi&lt;br /&gt;
初刻拍案惊奇.mobi&lt;br /&gt;
史记(文白对照版).mobi&lt;br /&gt;
唐诗三百首.mobi&lt;br /&gt;
唐诗三百首补注.mobi&lt;br /&gt;
喻世明言.mobi&lt;br /&gt;
四书五经.mobi&lt;br /&gt;
四大名著.mobi&lt;br /&gt;
围炉夜话.mobi&lt;br /&gt;
太平广记.mobi&lt;br /&gt;
子不语.mobi&lt;br /&gt;
孙子兵法.prc&lt;br /&gt;
孟子.mobi&lt;br /&gt;
小窗幽记.mobi&lt;br /&gt;
庄子.pdf&lt;br /&gt;
战国策.mobi&lt;br /&gt;
桃花扇.mobi&lt;br /&gt;
水浒传.mobi&lt;br /&gt;
王阳明全集.mobi&lt;br /&gt;
红楼梦.mobi&lt;br /&gt;
纳兰词笺注.mobi&lt;br /&gt;
老子白话今译.mobi&lt;br /&gt;
脂砚斋重批红楼梦.mobi&lt;br /&gt;
西游记.mobi&lt;br /&gt;
警世通言.mobi&lt;br /&gt;
论语.mobi&lt;br /&gt;
论语全解.mobi&lt;br /&gt;
论语新解.pdf&lt;br /&gt;
资治通鉴（柏杨版）.mobi&lt;br /&gt;
道德经古今正解.mobi&lt;br /&gt;
醒世恒言.mobi&lt;br /&gt;
钱锺书.宋诗选注.mobi&lt;br /&gt;
随园食单_袁枚.mobi&lt;br /&gt;
增广贤文.pdf&lt;br /&gt;
三国志.pdf&lt;br /&gt;
黄帝内经.pdf&lt;br /&gt;
源氏物语.mobi&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;哲学宗教&lt;/strong&gt;&lt;br /&gt;
一个或所有问题.mobi&lt;br /&gt;
与神对话(1-5).mobi&lt;br /&gt;
中国哲学简史.pdf&lt;br /&gt;
乌合之众.mobi&lt;br /&gt;
人生中不可不想的事.mobi&lt;br /&gt;
古兰经.mobi&lt;br /&gt;
哲学与人生.mobi&lt;br /&gt;
圣经.mobi&lt;br /&gt;
小逻辑.mobi&lt;br /&gt;
庄子现代版.mobi&lt;br /&gt;
新世纪中的哲学.mobi&lt;br /&gt;
苏菲的世界.mobi&lt;br /&gt;
西方哲学史.pdf&lt;br /&gt;
资本论.mobi&lt;br /&gt;
佛陀的启示.pdf&lt;br /&gt;
正见 佛陀的证悟.mobi&lt;br /&gt;
幸福之路.pdf&lt;br /&gt;
自我与本我_.mobi&lt;br /&gt;
新世界：灵性的觉醒.mobi&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;天天向上&lt;/strong&gt;&lt;br /&gt;
35岁前要上的33堂理财课.mobi&lt;br /&gt;
35岁前要做的33件事.mobi&lt;br /&gt;
facebook效应.mobi&lt;br /&gt;
FBI教你破解身体语言（插图版）.mobi&lt;br /&gt;
一课经济学.pdf&lt;br /&gt;
万物简史.mobi&lt;br /&gt;
上帝掷骰子吗.mobi&lt;br /&gt;
上班族必懂的office天择定律.mobi&lt;br /&gt;
不上火的生活.mobi&lt;br /&gt;
为什么中国人勤劳而不富有.mobi&lt;br /&gt;
乔布斯的魔力演讲.mobi&lt;br /&gt;
书读完了.mobi&lt;br /&gt;
人件.mobi&lt;br /&gt;
优势谈判.mobi&lt;br /&gt;
别为小事抓狂.mobi&lt;br /&gt;
十亿消费者.mobi&lt;br /&gt;
华尔街.mobi&lt;br /&gt;
天才在左疯子在右.mobi&lt;br /&gt;
好妈妈胜过好老师.mobi&lt;br /&gt;
如何阅读一本书.mobi&lt;br /&gt;
富爸爸穷爸爸.mobi&lt;br /&gt;
小王子(插图版).mobi&lt;br /&gt;
尽管去做&amp;mdash;&amp;mdash;无压工作的艺术.mobi&lt;br /&gt;
幸福了吗.mobi&lt;br /&gt;
当我谈跑步时，我谈些什么.mobi&lt;br /&gt;
影响力.mobi&lt;br /&gt;
心理控制术.mobi&lt;br /&gt;
怎样说话才打动人.mobi&lt;br /&gt;
成就你一生的100个哲理.mobi&lt;br /&gt;
我不是教你诈(1-5合集).mobi&lt;br /&gt;
把时间当朋友.mobi&lt;br /&gt;
拆掉思维里的墙.mobi&lt;br /&gt;
早期教育与天才.pdf&lt;br /&gt;
时间简史.mobi&lt;br /&gt;
朱镕基答记者问.mobi&lt;br /&gt;
每天懂一点色彩心理学.mobi&lt;br /&gt;
气场.mobi&lt;br /&gt;
潜规则.mobi&lt;br /&gt;
牛奶可乐经济学.mobi&lt;br /&gt;
王尔德童话.mobi&lt;br /&gt;
生命是什么.mobi&lt;br /&gt;
童年的秘密.pdf&lt;br /&gt;
给一个未出生孩子的信.mobi&lt;br /&gt;
论美国的民主.mobi&lt;br /&gt;
谷歌吴军：数学之美.mobi&lt;br /&gt;
货币战争.pdf&lt;br /&gt;
跳出盒子-领导与自欺的管理寓言.mobi&lt;br /&gt;
金字塔原理.mobi&lt;br /&gt;
金融的逻辑.mobi&lt;br /&gt;
食品真相大揭秘.mobi&lt;br /&gt;
战略历程.pdf&lt;br /&gt;
上帝掷骰子吗&amp;mdash;&amp;mdash;量子物理史话.mobi&lt;br /&gt;
犹太智慧枕边书.mobi&lt;br /&gt;
怪诞行为学1_2.mobi&lt;br /&gt;
犹太智慧枕边书.mobi&lt;br /&gt;
人一生要掌握的_60个生活法则.mobi&lt;br /&gt;
生活中的经济学.mobi&lt;br /&gt;
上帝掷骰子吗&amp;mdash;&amp;mdash;量子物理史话.mobi&lt;br /&gt;
Getting Real &amp;ndash; 37signals.mobi&lt;br /&gt;
Rework_-_David_Heinemeier_Hanss_Jason_Fried.mobi&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;学习资料&lt;/strong&gt;&lt;br /&gt;
08版GRE红宝书.mobi&lt;br /&gt;
Excel函数辞典.mobi&lt;br /&gt;
smart考研单词.pdf&lt;br /&gt;
五天学会绘画.mobi&lt;br /&gt;
五线谱入门.mobi&lt;br /&gt;
别对我撒谎第一季（剧本）.mobi&lt;br /&gt;
古代汉语（第一册）.mobi&lt;br /&gt;
古代汉语（第三册）.mobi&lt;br /&gt;
古代汉语（第二册）.mobi&lt;br /&gt;
古代汉语（第四册）.mobi&lt;br /&gt;
听音入门.mobi&lt;br /&gt;
夏洛特的网（双语）.mobi&lt;br /&gt;
成长的烦恼（剧本）.mobi&lt;br /&gt;
新东方GRE词汇精选.mobi&lt;br /&gt;
新东方英语900句(生活篇).mobi&lt;br /&gt;
新东方词根词缀大全.mobi&lt;br /&gt;
新概念英语（1-4）.mobi&lt;br /&gt;
曼昆经济学原理.mobi&lt;br /&gt;
标准日本语笔记.mobi&lt;br /&gt;
牛津书虫英汉对照（儿童篇）.mobi&lt;br /&gt;
牛津书虫英汉对照（名著篇）.mobi&lt;br /&gt;
现代汉语词典.mobi&lt;br /&gt;
生而为赢&amp;middot;新东方英语背诵美文30篇.mobi&lt;br /&gt;
穿普拉达的女王（剧本）.mobi&lt;br /&gt;
绯闻女孩1-4季（剧本）.mobi&lt;br /&gt;
美国习惯用语.mobi&lt;br /&gt;
老友记1-10季（剧本）.mobi&lt;br /&gt;
育儿百科.mobi&lt;br /&gt;
营销管理(第13版).mobi&lt;br /&gt;
走遍美国.mobi&lt;br /&gt;
阿西莫夫最新科学指南（上下册）.mobi&lt;br /&gt;
默克家庭诊疗手册（插图版）.mobi&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;现代文学&lt;/strong&gt;&lt;br /&gt;
1988：我想和这个世界谈谈.mobi&lt;br /&gt;
30而励.mobi&lt;br /&gt;
一个都不正经.mobi&lt;br /&gt;
一只特立独行的猪.mobi&lt;br /&gt;
万水千山走遍.mobi&lt;br /&gt;
万物生长.mobi&lt;br /&gt;
三体全集.mobi&lt;br /&gt;
三毛流浪记（全集）.mobi&lt;br /&gt;
上学记.mobi&lt;br /&gt;
京华烟云.mobi&lt;br /&gt;
亮剑.mobi&lt;br /&gt;
亲爱的安德烈.mobi&lt;br /&gt;
人生若只如初见.mobi&lt;br /&gt;
他的国.mobi&lt;br /&gt;
令人战栗的格林童话.mobi&lt;br /&gt;
何以笙箫默.mobi&lt;br /&gt;
佛祖在一号线.mobi&lt;br /&gt;
倪匡全集[精校版].mobi&lt;br /&gt;
偷书贼.mobi&lt;br /&gt;
兄弟（上）.mobi&lt;br /&gt;
兄弟（下）.mobi&lt;br /&gt;
兰晓龙精选集.mobi&lt;br /&gt;
再穷也要去旅行.mobi&lt;br /&gt;
冯唐小说集.mobi&lt;br /&gt;
前朝梦忆.mobi&lt;br /&gt;
匆匆那年（上下）.mobi&lt;br /&gt;
北京，北京.mobi&lt;br /&gt;
十八岁给我一个姑娘.mobi&lt;br /&gt;
半生缘.mobi&lt;br /&gt;
历史的先声.pdf&lt;br /&gt;
厚黑学.mobi&lt;br /&gt;
原来你非不快乐.mobi&lt;br /&gt;
受戒.mobi&lt;br /&gt;
古都.mobi&lt;br /&gt;
台北人.mobi&lt;br /&gt;
史铁生文集第一卷.mobi&lt;br /&gt;
史铁生文集第三卷.mobi&lt;br /&gt;
史铁生文集第二卷.mobi&lt;br /&gt;
向左走，向右走.mobi&lt;br /&gt;
哥伦比亚的倒影.mobi&lt;br /&gt;
哭泣的骆驼.mobi&lt;br /&gt;
围城.mobi&lt;br /&gt;
在细雨中呼喊.mobi&lt;br /&gt;
城南旧事.mobi&lt;br /&gt;
城邦暴力团.mobi&lt;br /&gt;
城门开.mobi&lt;br /&gt;
夜谭十记.mobi&lt;br /&gt;
大唐狄公案.mobi&lt;br /&gt;
大江大海1949（插图版）.mobi&lt;br /&gt;
女心理师（上下）.mobi&lt;br /&gt;
婚姻即景.mobi&lt;br /&gt;
婚姻是一场华丽冒险.mobi&lt;br /&gt;
孩子你慢慢来.mobi&lt;br /&gt;
宝贝，宝贝.mobi&lt;br /&gt;
山楂树之恋.mobi&lt;br /&gt;
巨流河.mobi&lt;br /&gt;
巴黎没有摩天轮.mobi&lt;br /&gt;
干掉一切对手-看高盛如何算赢世界.mobi&lt;br /&gt;
平凡的世界.mobi&lt;br /&gt;
张爱玲作品集.mobi&lt;br /&gt;
张爱玲文集(1)-(4).pdf&lt;br /&gt;
往事并不如烟.mobi&lt;br /&gt;
微微一笑很倾城.mobi&lt;br /&gt;
思维的乐趣.mobi&lt;br /&gt;
我与地坛.mobi&lt;br /&gt;
我们仨.mobi&lt;br /&gt;
我把青春献给你.mobi&lt;br /&gt;
我的奋斗.mobi&lt;br /&gt;
我终究是爱你的.mobi&lt;br /&gt;
撒哈拉的故事.mobi&lt;br /&gt;
文化苦旅.mobi&lt;br /&gt;
易中天品三国.mobi&lt;br /&gt;
曾有一个人，爱我如生命.mobi&lt;br /&gt;
最好的女子.mobi&lt;br /&gt;
杜拉拉升职记.mobi&lt;br /&gt;
杨小凯文集.mobi&lt;br /&gt;
棋王.mobi&lt;br /&gt;
橘子不是唯一的水果.mobi&lt;br /&gt;
欢喜.mobi&lt;br /&gt;
此时此地(IOC).mobi&lt;br /&gt;
此间的少年.mobi&lt;br /&gt;
民国的身影(全文，有图片）.mobi&lt;br /&gt;
水煮三国.mobi&lt;br /&gt;
沉默的大多数.mobi&lt;br /&gt;
沙僧日记.mobi&lt;br /&gt;
泡沫之夏.mobi&lt;br /&gt;
洗澡.mobi&lt;br /&gt;
活着活着就老了.mobi&lt;br /&gt;
潜伏.mobi&lt;br /&gt;
灵山.mobi&lt;br /&gt;
爱与痛的边缘.mobi&lt;br /&gt;
爱你就像爱生命.mobi&lt;br /&gt;
牛天赐传.mobi&lt;br /&gt;
独唱团（第一辑）.mobi&lt;br /&gt;
狼图腾.mobi&lt;br /&gt;
狼群（全集）.mobi&lt;br /&gt;
玉米.mobi&lt;br /&gt;
王小波全集(修订版).mobi&lt;br /&gt;
王朔-玩的就是心跳.pdf&lt;br /&gt;
王朔文集（典藏版）.mobi&lt;br /&gt;
目送.mobi&lt;br /&gt;
穆斯林的葬礼.mobi&lt;br /&gt;
穆時英全集.mobi&lt;br /&gt;
窗外.mobi&lt;br /&gt;
绿化树.mobi&lt;br /&gt;
背包十年.mobi&lt;br /&gt;
致我们终将逝去的青春.mobi&lt;br /&gt;
舒克和贝塔全传.mobi&lt;br /&gt;
色眼识人.mobi&lt;br /&gt;
英雄志.mobi&lt;br /&gt;
茶人三部曲.mobi&lt;br /&gt;
草房子.mobi&lt;br /&gt;
草样年华.mobi&lt;br /&gt;
藏地密码（1-10）.mobi&lt;br /&gt;
西潮.mobi&lt;br /&gt;
西窗随笔.mobi&lt;br /&gt;
覆雨翻云.mobi&lt;br /&gt;
走吧，张小砚.mobi&lt;br /&gt;
边城.mobi&lt;br /&gt;
追寻现代中国.mobi&lt;br /&gt;
送你一颗子弹.mobi&lt;br /&gt;
郭德纲话说北京.mobi&lt;br /&gt;
野火集.mobi&lt;br /&gt;
钟鼓楼-刘心武.mobi&lt;br /&gt;
隐权力：中国历史弈局的幕后推力.mobi&lt;br /&gt;
青春.mobi&lt;br /&gt;
韩寒作品集.mobi&lt;br /&gt;
韩寒五年文集.mobi&lt;br /&gt;
风语.mobi&lt;br /&gt;
鲁迅作品全集.mobi&lt;br /&gt;
鲸鱼女孩&amp;middot;池塘男孩.mobi&lt;br /&gt;
牛奶可乐经济学.mobi&lt;br /&gt;
武侠，从牛A到牛C.pdf&lt;br /&gt;
呼蘭河傳.mobi&lt;br /&gt;
一路走来一路读.mobi&lt;br /&gt;
十个词汇里的中国.mobi&lt;br /&gt;
时代三部曲.mobi&lt;br /&gt;
活着.mobi&lt;br /&gt;
八大胡同.mobi&lt;br /&gt;
三体.pdf&lt;br /&gt;
三体2-黑暗森林.pdf&lt;br /&gt;
三体3-死神永生.pdf&lt;br /&gt;
我执.pdf&lt;br /&gt;
亭长小武.mobi&lt;br /&gt;
赤壁.mobi&lt;br /&gt;
赌徒陈汤.mobi&lt;br /&gt;
北京镜鉴记.mobi&lt;br /&gt;
人在欧洲.mobi&lt;br /&gt;
美国也荒唐.mobi&lt;br /&gt;
秦腔.mobi&lt;br /&gt;
天行者.mobi&lt;br /&gt;
推拿.mobi&lt;br /&gt;
历史的天空.mobi&lt;br /&gt;
人生不过如此.mobi&lt;br /&gt;
别跟我说你懂日本.mobi&lt;br /&gt;
歌舞伎町案内人.mobi&lt;br /&gt;
蛙.mobi&lt;br /&gt;
亦舒文集\一千零一妙方.mobi&lt;br /&gt;
亦舒文集\一把青云.mobi&lt;br /&gt;
亦舒文集\一段云.mobi&lt;br /&gt;
亦舒文集\一点旧,一点新.mobi&lt;br /&gt;
亦舒文集\七姐妹.mobi&lt;br /&gt;
亦舒文集\不易居.mobi&lt;br /&gt;
亦舒文集\不羁的风.mobi&lt;br /&gt;
亦舒文集\人淡如菊.mobi&lt;br /&gt;
亦舒文集\伤城记.mobi&lt;br /&gt;
亦舒文集\假如苏西堕落.mobi&lt;br /&gt;
亦舒文集\假梦真泪.mobi&lt;br /&gt;
亦舒文集\剪刀替针做媒人.mobi&lt;br /&gt;
亦舒文集\十天.mobi&lt;br /&gt;
亦舒文集\印度墨.mobi&lt;br /&gt;
亦舒文集\变形记.mobi&lt;br /&gt;
亦舒文集\吃南瓜的人.mobi&lt;br /&gt;
亦舒文集\同门.mobi&lt;br /&gt;
亦舒文集\喜宝.mobi&lt;br /&gt;
亦舒文集\嘘.mobi&lt;br /&gt;
亦舒文集\在那遥远的地方.mobi&lt;br /&gt;
亦舒文集\城市故事.mobi&lt;br /&gt;
亦舒文集\大君.mobi&lt;br /&gt;
亦舒文集\天上所有的星星.mobi&lt;br /&gt;
亦舒文集\天枰座的故事.mobi&lt;br /&gt;
亦舒文集\天若有情.mobi&lt;br /&gt;
亦舒文集\她比烟花寂寞.mobi&lt;br /&gt;
亦舒文集\她的二三事.mobi&lt;br /&gt;
亦舒文集\如今都是错.mobi&lt;br /&gt;
亦舒文集\如何说再见.mobi&lt;br /&gt;
亦舒文集\如果墙会说话.mobi&lt;br /&gt;
亦舒文集\寂寞的心俱乐部.mobi&lt;br /&gt;
亦舒文集\小玩意.mobi&lt;br /&gt;
亦舒文集\开到荼蘼.mobi&lt;br /&gt;
亦舒文集\心扉的信.mobi&lt;br /&gt;
亦舒文集\忽而今夏.mobi&lt;br /&gt;
亦舒文集\我们不是天使.mobi&lt;br /&gt;
亦舒文集\我情愿跳舞.mobi&lt;br /&gt;
亦舒文集\我的前半生.mobi&lt;br /&gt;
亦舒文集\我这样的爱她.mobi&lt;br /&gt;
亦舒文集\承欢记.mobi&lt;br /&gt;
亦舒文集\故园.mobi&lt;br /&gt;
亦舒文集\曼陀罗.mobi&lt;br /&gt;
亦舒文集\曾经深爱过.mobi&lt;br /&gt;
亦舒文集\没有季节的都会.mobi&lt;br /&gt;
亦舒文集\没有月亮的晚上.mobi&lt;br /&gt;
亦舒文集\流金岁月.mobi&lt;br /&gt;
亦舒文集\灯火阑珊处.mobi&lt;br /&gt;
亦舒文集\烈火.mobi&lt;br /&gt;
亦舒文集\特首小姐你早.mobi&lt;br /&gt;
亦舒文集\电光幻影.mobi&lt;br /&gt;
亦舒文集\痴情司.mobi&lt;br /&gt;
亦舒文集\直至海枯石烂.mobi&lt;br /&gt;
亦舒文集\真男人不哭泣.mobi&lt;br /&gt;
亦舒文集\紫薇愿.mobi&lt;br /&gt;
亦舒文集\红尘.mobi&lt;br /&gt;
亦舒文集\纵横四海.mobi&lt;br /&gt;
亦舒文集\绝对是个梦.mobi&lt;br /&gt;
亦舒文集\美丽新世界.mobi&lt;br /&gt;
亦舒文集\美娇袅.mobi&lt;br /&gt;
亦舒文集\胭脂.mobi&lt;br /&gt;
亦舒文集\艳阳天.mobi&lt;br /&gt;
亦舒文集\花常好月常圆人长久.mobi&lt;br /&gt;
亦舒文集\花解语.mobi&lt;br /&gt;
亦舒文集\莫失莫忘.mobi&lt;br /&gt;
亦舒文集\葡萄成熟的时候.mobi&lt;br /&gt;
亦舒文集\蔷薇泡沫.mobi&lt;br /&gt;
亦舒文集\蝉.mobi&lt;br /&gt;
亦舒文集\西岸阳光充沛.mobi&lt;br /&gt;
亦舒文集\要多美丽就多美丽.mobi&lt;br /&gt;
亦舒文集\这双手虽然小.mobi&lt;br /&gt;
亦舒文集\连环.mobi&lt;br /&gt;
亦舒文集\迷迭香.mobi&lt;br /&gt;
亦舒文集\邻室的音乐.mobi&lt;br /&gt;
亦舒文集\邻居太太的情人.mobi&lt;br /&gt;
亦舒文集\野孩子.mobi&lt;br /&gt;
亦舒文集\银女.mobi&lt;br /&gt;
亦舒文集\镜花缘.mobi&lt;br /&gt;
亦舒文集\阿修罗.mobi&lt;br /&gt;
亦舒文集\阿玉和阿瓦.mobi&lt;br /&gt;
亦舒文集\预言.mobi&lt;br /&gt;
亦舒文集\风信子.mobi&lt;br /&gt;
亦舒文集\风满楼.mobi&lt;br /&gt;
亦舒文集\香雪海.mobi&lt;br /&gt;
武侠小说\jy.书剑恩仇录.pdf&lt;br /&gt;
武侠小说\jy.侠客行.pdf&lt;br /&gt;
武侠小说\jy.倚天屠龙记.pdf&lt;br /&gt;
武侠小说\jy.天龙八部.pdf&lt;br /&gt;
武侠小说\jy.射雕英雄传.pdf&lt;br /&gt;
武侠小说\jy.碧血剑.pdf&lt;br /&gt;
武侠小说\jy.神雕侠侶.pdf&lt;br /&gt;
武侠小说\jy.笑傲江湖.pdf&lt;br /&gt;
武侠小说\jy.连城诀.pdf&lt;br /&gt;
武侠小说\jy.雪山飞狐.pdf&lt;br /&gt;
武侠小说\jy.飞狐外传.pdf&lt;br /&gt;
武侠小说\jy.鹿鼎记.pdf&lt;br /&gt;
武侠小说\七种武器.mobi&lt;br /&gt;
武侠小说\三少爷的剑.mobi&lt;br /&gt;
武侠小说\九月鹰飞.mobi&lt;br /&gt;
武侠小说\名剑风流.mobi&lt;br /&gt;
武侠小说\圆月弯刀.mobi&lt;br /&gt;
武侠小说\多情剑客无情剑.mobi&lt;br /&gt;
武侠小说\大人物.mobi&lt;br /&gt;
武侠小说\大唐双龙传.mobi&lt;br /&gt;
武侠小说\大地飞鹰.mobi&lt;br /&gt;
武侠小说\大旗英雄传.mobi&lt;br /&gt;
武侠小说\天涯明月刀.mobi&lt;br /&gt;
武侠小说\小李飞刀系列合集.mobi&lt;br /&gt;
武侠小说\梁羽生武侠全集.mobi&lt;br /&gt;
武侠小说\楚留香.mobi&lt;br /&gt;
武侠小说\楚留香传奇.mobi&lt;br /&gt;
武侠小说\欢乐英雄.mobi&lt;br /&gt;
武侠小说\武林外史.mobi&lt;br /&gt;
武侠小说\流星蝴蝶剑.mobi&lt;br /&gt;
武侠小说\浣花洗剑录.mobi&lt;br /&gt;
武侠小说\白玉老虎.mobi&lt;br /&gt;
武侠小说\白马啸西风.mobi&lt;br /&gt;
武侠小说\绝代双骄.mobi&lt;br /&gt;
武侠小说\英雄无泪.mobi&lt;br /&gt;
武侠小说\萧十一郎.mobi&lt;br /&gt;
武侠小说\边城浪子.mobi&lt;br /&gt;
武侠小说\金庸全集.mobi&lt;br /&gt;
武侠小说\陆小凤传奇.mobi&lt;br /&gt;
武侠小说\鹿鼎记.mobi&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;百家讲坛&lt;/strong&gt;&lt;br /&gt;
不生病的智慧.mobi&lt;br /&gt;
中国企业没戏吗I.mobi&lt;br /&gt;
历史是个什么玩意儿.mobi&lt;br /&gt;
原来这才是春秋.mobi&lt;br /&gt;
易中天：先秦诸子百家争鸣.mobi&lt;br /&gt;
百家讲坛-二战风云.mobi&lt;br /&gt;
百家讲坛-刘心武谈红楼.mobi&lt;br /&gt;
百家讲坛-动物世界.mobi&lt;br /&gt;
百家讲坛-历史与文化篇.mobi&lt;br /&gt;
百家讲坛-名家谈文学.mobi&lt;br /&gt;
百家讲坛-和珅.mobi&lt;br /&gt;
百家讲坛-外国文艺欣赏.mobi&lt;br /&gt;
百家讲坛-多尔衮.mobi&lt;br /&gt;
百家讲坛-大师语录.mobi&lt;br /&gt;
百家讲坛-教育与成功.mobi&lt;br /&gt;
百家讲坛-明十七帝.mobi&lt;br /&gt;
百家讲坛-水浒.mobi&lt;br /&gt;
百家讲坛-清十二帝.mobi&lt;br /&gt;
百家讲坛-生活保健.mobi&lt;br /&gt;
百家讲坛-科技之光.mobi&lt;br /&gt;
百家讲坛-笑书神侠.mobi&lt;br /&gt;
百家讲坛-经济与社会.mobi&lt;br /&gt;
百家讲坛-老子.mobi&lt;br /&gt;
百家讲坛-艺术漫谈.mobi&lt;br /&gt;
百家讲坛-讲聊斋.mobi&lt;br /&gt;
百家讲坛-读史记.mobi&lt;br /&gt;
百家讲坛-道德与法律.mobi&lt;br /&gt;
百家讲坛-金正昆谈礼仪.mobi&lt;br /&gt;
蔡康永的说话之道.mobi&lt;br /&gt;
郎咸平说：我们的日子为什么这么难.mobi&lt;br /&gt;
郎咸平说：新帝国主义在中国(2).mobi&lt;br /&gt;
郎咸平说：谁在拯救中国经济.mobi&lt;br /&gt;
吴大师讲西游.mobi&lt;br /&gt;
博弈三国（插图版）.mobi&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;网络小说&lt;/strong&gt;&lt;br /&gt;
七夜雪.mobi&lt;br /&gt;
三生三世十里桃花.mobi&lt;br /&gt;
不负如来不负卿.mobi&lt;br /&gt;
九州缥缈录.mobi&lt;br /&gt;
人间.mobi&lt;br /&gt;
仙楚.mobi&lt;br /&gt;
佣兵天下.mobi&lt;br /&gt;
佳期如梦.mobi&lt;br /&gt;
华音流韶.mobi&lt;br /&gt;
史上最全的冷笑话集锦.mobi&lt;br /&gt;
史上第一混乱-张小花.mobi&lt;br /&gt;
后宫甄嬛传（全集）.mobi&lt;br /&gt;
回到明朝当王爷.mobi&lt;br /&gt;
大漠苍狼1（绝地勘探）.mobi&lt;br /&gt;
大漠苍狼2（绝密飞行）.mobi&lt;br /&gt;
天行健第一部奔掠如火.mobi&lt;br /&gt;
天行健第七部旭日如血.mobi&lt;br /&gt;
天行健第三部激荡风雷.mobi&lt;br /&gt;
天行健第二部水无常形.mobi&lt;br /&gt;
天行健第五部星汉灿烂.mobi&lt;br /&gt;
天行健第六部心如明月.mobi&lt;br /&gt;
天行健第四部天崩地裂.mobi&lt;br /&gt;
家园_-_隋乱.mobi&lt;br /&gt;
寻秦记.mobi&lt;br /&gt;
尘曲完整版.mobi&lt;br /&gt;
尘缘.mobi&lt;br /&gt;
庆余年(精校版）.mobi&lt;br /&gt;
弱水三千.mobi&lt;br /&gt;
怒江之战（全_大结局）.mobi&lt;br /&gt;
悟空传.mobi&lt;br /&gt;
惟我独仙.mobi&lt;br /&gt;
搜神记.mobi&lt;br /&gt;
斗罗大陆.mobi&lt;br /&gt;
昆仑.mobi&lt;br /&gt;
朱雀.mobi&lt;br /&gt;
杀手系列_九把刀.mobi&lt;br /&gt;
梦回大清.mobi&lt;br /&gt;
沧海.mobi&lt;br /&gt;
猎命师传奇.mobi&lt;br /&gt;
盗墓笔记(1-7).mobi&lt;br /&gt;
神墓.mobi&lt;br /&gt;
窃明.mobi&lt;br /&gt;
紫川.mobi&lt;br /&gt;
罗德斯岛系列.mobi&lt;br /&gt;
茅山后裔.mobi&lt;br /&gt;
蛮荒记.mobi&lt;br /&gt;
蜀山剑侠传.mobi&lt;br /&gt;
诛仙.mobi&lt;br /&gt;
谜踪之国.mobi&lt;br /&gt;
边荒传说-黄易.mobi&lt;br /&gt;
酒神.mobi&lt;br /&gt;
锦衣卫秘事.mobi&lt;br /&gt;
镜.mobi&lt;br /&gt;
青囊尸衣.mobi&lt;br /&gt;
鬼吹灯全集.mobi&lt;br /&gt;
鬼打墙全集.mobi&lt;br /&gt;
黄河鬼棺.mobi&lt;br /&gt;
星辰变.mobi&lt;br /&gt;
九鼎记.mobi&lt;br /&gt;
神游.mobi&lt;br /&gt;
斗破苍穹.mobi&lt;br /&gt;
灵山.mobi&lt;br /&gt;
地师.mobi&lt;br /&gt;
天意.mobi&lt;br /&gt;
人欲.mobi&lt;br /&gt;
异闻录.mobi&lt;br /&gt;
冒死记录 中国神秘事件.mobi&lt;br /&gt;
青囊尸衣.mobi&lt;br /&gt;
步步惊心（修订版）.mobi （0916）&lt;br /&gt;
大漠谣.mobi（0921）&lt;br /&gt;
云中歌.mobi（0921）&lt;br /&gt;
橙红年代（精校）.mobi（0921）&lt;br /&gt;
武林帝国.mobi（0929）&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Update &amp;amp; Fix &amp;mdash;-2011.10.10&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Rework_-_David_Heinemeier_Hanss_Jason_Fried.mobi&lt;br /&gt;
十亿消费者.mobi&lt;br /&gt;
物理世界奇遇记-伽莫夫.mobi&lt;br /&gt;
昨日的世界[奥]斯蒂芬&amp;middot;茨威格.mobi&lt;br /&gt;
有一种爱情叫兄弟-十八子墨.mobi&lt;br /&gt;
西德尼&amp;middot;谢尔顿作品集.mobi&lt;br /&gt;
铁器时代（精校）.mobi&lt;br /&gt;
朗读者(钱定平译).mobi&lt;br /&gt;
沙郡年记录.mobi&lt;br /&gt;
出非洲记：人类祖先的迁徙史诗.mobi&lt;br /&gt;
江户日本.mobi&lt;br /&gt;
漫长的战斗：美国人眼中的朝鲜战争.mobi&lt;br /&gt;
兄弟（上）-余华.mobi&lt;br /&gt;
兄弟（下）-余华.mobi&lt;br /&gt;
牛鬼蛇神录.mobi&lt;br /&gt;
百年中国经济史笔记.mobi&lt;br /&gt;
烟雨江南-尘缘.mobi&lt;br /&gt;
失控：机器、社会与经济的新生物学.mobi&lt;br /&gt;
光晕4：奥星的幽灵-Eric_Nylund.mobi&lt;br /&gt;
光晕3：初次反击-尼仑德.mobi&lt;br /&gt;
光晕2：洪魔-尼仑德.mobi&lt;br /&gt;
光晕1：致远星的沦陷-尼仑德.mobi&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Update  &amp;mdash;-2011.10.28&lt;/span&gt;&lt;br /&gt;
留德十年.mobi&lt;br /&gt;
C语言程序设计.mobi&lt;br /&gt;
编程精粹_编写高质量C语言代码.mobi&lt;br /&gt;
大师与玛格丽特.mobi&lt;br /&gt;
一个瑜伽行者的自传.mobi&lt;br /&gt;
不二.mobi&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Update  &amp;mdash;-2011.11.01&lt;/span&gt;&lt;br /&gt;
异类：不一样的成功启示录.pdf&lt;br /&gt;
引爆点.pdf&lt;br /&gt;
无价：洞悉大众心理玩转价格游戏.pdf&lt;br /&gt;
美国种族简史.pdf&lt;br /&gt;
埃勒里&amp;middot;奎因现代侦探小说合集.mobi&lt;br /&gt;
史蒂夫&amp;middot;乔布斯传.pdf&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Update  &amp;mdash;-2011.11.07&lt;/span&gt;&lt;br /&gt;
甲骨文（游走在中国与西方之间）.mobi&lt;br /&gt;
剑桥中国辽西夏金元史.mobi&lt;br /&gt;
剑桥中国明代史.mobi&lt;br /&gt;
剑桥中国秦汉史.mobi&lt;br /&gt;
剑桥中国隋唐史.mobi&lt;br /&gt;
剑桥中华人民共和国史.mobi&lt;br /&gt;
夏多布里昂《幕后回忆录》（全三册）.pdf&lt;br /&gt;
论美国的民主.mobi&lt;br /&gt;
浪潮之巅-吴军.mobi&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Update  &amp;mdash;-2011.11.28&lt;/span&gt;&lt;br /&gt;
美国种族简史 &amp;ndash; [美]托马斯&amp;middot;索威尔.mobi&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Update  &amp;mdash;-2012.01.30&lt;/span&gt;&lt;br /&gt;
盗墓笔记 8.mobi&lt;br /&gt;
间客.mobi&lt;br /&gt;
金陵十三钗.mobi&lt;br /&gt;
上品寒士.mobi&lt;br /&gt;
史蒂夫&amp;middot;乔布斯传.mobi&lt;br /&gt;
天下.mobi&lt;br /&gt;
天珠变.mobi&lt;br /&gt;
拖延心理学.mobi&lt;br /&gt;
晚清七十年.mobi&lt;br /&gt;
巫颂【上】.mobi&lt;br /&gt;
巫颂【下】.mobi&lt;br /&gt;
西夏死书①死书里的神秘活人坟.mobi&lt;br /&gt;
西夏死书②遗失的1964.mobi&lt;br /&gt;
西夏死书③中蒙边界无人区.mobi&lt;br /&gt;
新中国三十年.mobi&lt;br /&gt;
仙逆.mobi&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Oracle SQL*Loader Segmentation Fault (core dumped)</title>
   <link href="http://blog.xuyuan.me/2011/07/05/sqlldr_coredump.html"/>
   <updated>2011-07-05T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2011/07/05/sqlldr_coredump</id>
   <content type="html">&lt;p&gt;调试代码时在一个关于SQL*Loader的错误上折腾了好一阵，记录一下备忘：&lt;/p&gt; &lt;p&gt;&lt;strong&gt;错误信息：&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;$&amp;gt; sqlldr user_id/passwd@db_name control=control_file.ctl&lt;/p&gt; &lt;p&gt;SQL*Loader: Release 10.2.0.4.0 - Production on Tue Jul 5 01:20:09 2011&lt;br /&gt; Copyright (c) 1982, 2007, Oracle.&amp;nbsp; All rights reserved.&lt;br /&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;Segmentation Fault (core dumped)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;其他类似的程序并没有发现这种错误。在进行了N种尝试后，发现问题存在于数据文件的文件名上：&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;LOAD DATA
INFILE 0701.T0.csv
APPEND INTO TABLE SAMPLE_TABLE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&quot;'
TRAILING NULLCOLS
(
COLUMN DEF ...
)&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;经测试，只要控制文件中INFILE选项后跟的文件名以数字开头，就会发生&quot;Segmentation Fault (core dumped)&quot;的错误。（Oracle的Bug?）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决方法：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;方法1. 最简单的方法，避免数据文件名以数字开头&lt;/p&gt;
&lt;p&gt;方法2. 数据文件名加双引号：&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;LOAD DATA
INFILE &amp;amp;ldquo;0701.T0.csv&amp;amp;rdquo;
APPEND INTO TABLE SAMPLE_TABLE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&quot;'
TRAILING NULLCOLS
(
COLUMN DEF ...
)&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;方法3. CTL文件中不使用INFILE选项，在命令行中用data选项代替：&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$&amp;amp;gt; sqlldr user_id/passwd@db_name control=control_file.ctl data=0701.T0.csv&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
</content>
 </entry>
 
 <entry>
   <title>Oracle官方文档库支持Kindle和iPad格式了</title>
   <link href="http://blog.xuyuan.me/2011/06/16/oracle_kindle.html"/>
   <updated>2011-06-16T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2011/06/16/oracle_kindle</id>
   <content type="html">&lt;p&gt;用Kindle看书确实很不错，屏幕效果和重量都比捧着iPad看书要舒服，只不过用它来看技术书籍并不是很方便。记得刚开始用Kindle的时候，心想如果能把Oracle的官方文档也拷进去看多方便啊，我特地在Oracle的网站上找了一番，结果很失望的发现只有PDF的格式，放在Kindle的6寸屏上实在没法看。&lt;/p&gt;
&lt;p&gt;今天浏览Oracle文档网页的时候，意外发现网站上除了PDF外多出了Mobi和ePub格式的下载链接，前者是Kindle通用的格式，后者则对应用于iPad. 这下可以很方便的把Oracle文档放到Kindle上随时查阅了：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/composites.htm&quot; target=&quot;_blank&quot;&gt;http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/composites.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/oracle_kindle_doc.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>推荐一本Oracle性能优化的好书</title>
   <link href="http://blog.xuyuan.me/2011/06/14/oracle_performance.html"/>
   <updated>2011-06-14T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2011/06/14/oracle_performance</id>
   <content type="html">&lt;p&gt;推荐一本关于Oracle性能优化的好书: &lt;a href=&quot;http://product.china-pub.com/192980&quot; target=&quot;_blank&quot;&gt;《Oracle性能诊断艺术》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以下是China-Pub上的简介：&lt;/p&gt;
&lt;p&gt;前端业务应用炙手可热之日，便是优化后端数据库性能之时。当此之际，身怀数据库优化的绝技，可以让你平步职场，傲视群英。.&lt;br /&gt; 本书是oracle数据库优化专家christian antognini的一部继往开来的里程碑式著作。书中的最佳实践和诸多建议全部来源于作者在实战一线的丰富积累。不仅简单实用，而且发人深省，堪称一座&amp;ldquo;宝库&amp;rdquo;，适合各层次读者研读和发掘。..&lt;br /&gt; 与其他同类图书不同，本书不仅涵盖了市面上常见的各种oracle版本，还指明了各个版本独有的性能优化特性。全书以崭新的视角开篇立论，围绕查明问题真相和搜寻有效方略，透彻讲解了查询优化器的配置，表访问、连接和物理表布局的优化，以及加速sql执行计划等重要主题，被读者誉为&amp;ldquo;最透彻，但又最通俗的性能优化好书&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://images.china-pub.com/ebook190001-195000/192980/shupi.jpg&quot; alt=&quot;Oracle性能诊断艺术&quot; width=&quot;437&quot; height=&quot;550&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Java 开发 2.0: 使用 Amazon SQS 进行基于云计算的消息传送</title>
   <link href="http://blog.xuyuan.me/2011/06/14/java_amazon_sqs.html"/>
   <updated>2011-06-14T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2011/06/14/java_amazon_sqs</id>
   <content type="html">&lt;p&gt;本文转载自&lt;a href=&quot;http://www.ibm.com/developerworks/cn/java/j-javadev2-17/index.html?ca=drs-&quot; target=&quot;_blank&quot;&gt;IBM developworks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;消息传送队列在一系列软件架构和域中是常见的，包括金融系统、医疗保健和旅游业。然而面向消息的中间件（MOM）&amp;mdash; 分布式系统的主导消息传送范例  &amp;mdash; 需要特别安装和维护一个队列系统。本月我对这种劳动密集型消息传送引入了一种基于云计算的替代方案：Amazon 的 Simple Queue  Service (SQS)。&lt;/p&gt;
&lt;p&gt;就像在 Google App Engine 或 Amazon Elastic Beanstalk（参见 &lt;a href=&quot;http://www.ibm.com/developerworks/cn/java/j-javadev2-17/index.html?ca=drs-#resources&quot;&gt;参考资料&lt;/a&gt;）上托管 web 应用程序很合乎常理一样，利用一个云消息传送系统也合乎常理。不管怎样，您都能够将更多的时间用于编写应用程序，而非安装和维护其底层基础架构。&lt;/p&gt;
&lt;p&gt;在本文中，您将了解 Amazon SQS 如何减轻安装和维护一个消息队列系统的负担。您还有机会亲手创建 SQS 消息队列，然后删除和检索上面的消息。最后，我要向您展示在我添加消息到 Magnus 时会发生什么，这是我在上个月的 &lt;a href=&quot;http://www.ibm.com/developerworks/cn/java/j-javadev2-17/index.html?ca=drs-#resources&quot;&gt;Amazon Elastic Beanstalk 简介&lt;/a&gt; 中使用的移动 web 应用程序。&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;N100A3&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;是哪一位？是 MOM。&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;面向消息的中间件&lt;/em&gt; 或 MOM 是一个描述通过消息队列通信的松耦合系统的术语。系统组件没有进行紧耦合（例如通过编译时依赖项），而是被分布在整个网络中。这个分布式效果以&lt;em&gt;消息队列&lt;/em&gt; 为通信媒介，能够让消息系统进行扩展。&lt;/p&gt;
&lt;p&gt;传统上，架构师决定了面向消息的系统中哪些组件将互相通信。尽管所有通信通过消息传递发生，消息本身通常是一个通用的跨平台格式。消息可以是简单的字符串或甚至使用 XML 或 JSON 编码的文档。&lt;/p&gt;
&lt;p&gt;由于 MOM 架构对组件去耦且支持它们之间的跨平台通信，单个原件可以是异构的。也就是说，分布式架构中的组件可通过不同的语言编写，比如  Java 语言、C# 和 Ruby。组件也可以存在于不同的平台上，比如 UNIX&amp;reg; 和 Windows&amp;reg;。更重要的是，MOMs  使系统集成更加容易。作为中间件，MOMs 可以连接旧有系统以及新系统。这是因为组件之间的 API 仅仅是一条消息，可以是从 XML  文档到序列化对象再到简单 &lt;code&gt;String&lt;/code&gt; 的任意内容。&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;N100BF&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;GAE 是您的 MOM！&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MOM 系统中的消息队列是 web 的管道：它们连接各种系统组件以允许消息在它们之间自由流动。事实证明，GAE 是面向消息中间件系统的一个很好的例子。&lt;/p&gt;
&lt;p&gt;如同任何好的 MOM，Google App Engine 使用消息队列分离系统流程。特别地，GAE 队列使我们可以通过 Web  请求卸载长期运行的流程。您可以使用 GAE 将指向 servlets 或 JSPs 的 URLs 转储到消息队列上，然后由 GAE  服务选取和处理。Servlets 被根据 web 应用程序的主逻辑顺序异步调用。（参见 &lt;a href=&quot;http://www.ibm.com/developerworks/cn/java/j-javadev2-17/index.html?ca=drs-#resources&quot;&gt;参考资料&lt;/a&gt; 进一步了解 GAE。）&lt;/p&gt;
&lt;p&gt;但是排列长期运行的流程来管理主流程的持续时间不仅仅是一个 GAE 工作。这个类似 MOM 的特性随 Heroku 等其他 PaaS 实现一同提供。然而使用 Amazon SQS，您可以轻松在&lt;em&gt;任何&lt;/em&gt; web 应用中进行，而不管平台是什么。&lt;/p&gt;
&lt;p class=&quot;ibm-ind-link ibm-back-to-top&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;N100D5&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;Amazon SQS 简介&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果您在 JMS 中使用了消息队列，Amazon SQS 提供大量您应当很熟悉的功能。&lt;/p&gt;
&lt;div class=&quot;ibm-container ibm-alt-header dw-container-sidebar&quot;&gt;&lt;a name=&quot;not-jms&quot;&gt;&lt;/a&gt;
&lt;h2&gt;Amazon SQS 不是 JMS&lt;/h2&gt;
&lt;div class=&quot;ibm-container-body&quot;&gt;
&lt;p&gt;Java 平台上的消息队列不是什么新鲜事，以 JMS 规范为范例。JMS 已经有 10  多年的历史了，包含令人印象深刻的一组实现，包括 RabbitMQ、Apache 的 ActiveMQ，甚至 IBM 的 Websphere&amp;reg;  MQ。但是 Amazon SQS API 不实现任何 JMS 接口。事实上，可以说它比 JMS 更简单，且更易于上线运行。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Amazon SQS：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;允许多个进程从同一队列同时进行读取操作。它还在处理期间锁定消息，确保一条消息仅由一个读取器处理，即使多个进程在从单一队列进行读取操作。&lt;/li&gt;
&lt;li&gt;利用 Amazon 的大量冗余架构在并发访问时提供极高的可用性。它还保证消息的交付（至少一次）。 &lt;/li&gt;
&lt;li&gt;需要您仅根据使用量进行支付。对于 Amazon SQS，这表示每条消息您支付 $0.000001。AWS 当前提供一个免费的层级，其中每个月前 100,000 条消息是&lt;em&gt;免费的&lt;/em&gt;。记住有按千兆字节定价的带宽费用，这对所有 AWS 产品都是通用的。 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SQS 入门就如同 AWS 中一切别的东西一样简单。如果您还没有一个 AWS 帐户，首先 &lt;a href=&quot;https://aws-portal.amazon.com/gp/aws/developer/registration/index.html&quot;&gt;创建一个&lt;/a&gt;。其次，启用 Amazon SQS。最后，使用 AWS 接口 Java SDK 发布和阅读基于云的消息！（下面将详细介绍如何实际&lt;em&gt;编写&lt;/em&gt; 它们。）&lt;/p&gt;
&lt;p class=&quot;ibm-ind-link ibm-back-to-top&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;N10109&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;编写 SQS 消息&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;与 Amazon SQS 名称相一致，读写到队列背后的逻辑本身很简单。首先，使用有效访问密匙和机密建立 AWS 连接，如清单 1 所示：&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a name=&quot;listing1&quot;&gt;&lt;strong&gt;清单 1. 建立 AWS 连接&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; summary=&quot;This table contains a code listing.&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;code-outline&quot;&gt;
&lt;pre class=&quot;displaycode&quot;&gt;				
AmazonSQS sqs = new AmazonSQSClient(new BasicAWSCredentials(AWS_KEY, AWS_SECRET));
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;下一步，您需要一个队列。在 AWS API 中，对 &lt;code&gt;createQueue&lt;/code&gt; 的调用，如清单 2 所示，不一定每次创建一个新队列 。如果队列已经存在，返回其句柄。在 SQS 中，队列仅仅是 URLs；因此，队列处理也只是一个 URL。注意在 AWS SDK API 中，&lt;code&gt;Queue&lt;/code&gt; URL 是一个 &lt;code&gt;String&lt;/code&gt; 类型，而不是 Java &lt;code&gt;URL&lt;/code&gt; 类型。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a name=&quot;listing2&quot;&gt;&lt;strong&gt;清单 2. 获取一个队列句柄&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; summary=&quot;This table contains a code listing.&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;code-outline&quot;&gt;
&lt;pre class=&quot;displaycode&quot;&gt;				
String url = sqs.createQueue(new CreateQueueRequest(&quot;a_queue&quot;)).getQueueUrl();
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;有了队列之后，您可以向其写入一条消息。SQS 的消息格式类似于 SimpleDB 的（参见 &lt;a href=&quot;http://www.ibm.com/developerworks/cn/java/j-javadev2-17/index.html?ca=drs-#resources&quot;&gt;参考资料&lt;/a&gt;），在于消息是 &lt;code&gt;String&lt;/code&gt;s。不过要记住，一条 &lt;code&gt;String&lt;/code&gt; 是可以轻松结构化的，因此易于解析，即使其格式为有效的 JSON 或 XML。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a name=&quot;listing3&quot;&gt;&lt;strong&gt;清单 3. 通过 SQS 发送消息&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; summary=&quot;This table contains a code listing.&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;code-outline&quot;&gt;
&lt;pre class=&quot;displaycode&quot;&gt;				
sqs.sendMessage(new SendMessageRequest(url, &quot;It's a wonderful life!&quot;));
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;ibm-container ibm-alt-header dw-container-sidebar&quot;&gt;
&lt;h2&gt;SQS 保持简单性&lt;/h2&gt;
&lt;div class=&quot;ibm-container-body&quot;&gt;
&lt;p&gt;请记住 Amazon SQS 首要的一点是很简单，意味着它缺少您过去可能习惯的一些额外项目。例如，SQS 不做预先通知，因此  SQS 队列的读取器必须定期轮询以查看它是否包含新消息。虽然并不可怕，但这确实增加了应用程序开销，可能在某些情况下无法接受。Amazon  Simple Notification Service (SNS) 解决这个问题，但这是另一篇文章的一个主题。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;消息长度是有限的。默认情况下，一条消息不能超过 8KB。如果您需要使用较长的消息，总是可以将它们分成小块，使用序列 IDs 识别单个部分。然后可以在接收方重新组合消息。&lt;/p&gt;
&lt;p&gt;就这么简单 &amp;mdash; 将一条消息放到 SQS 队列仅需要那三行代码。&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;N10167&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;关于 AWS SDK&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;您可能会注意到 AWS SDK 中的一个熟悉模式，特别是如果您阅读了我的 SimpleDB 简介（参见 &lt;a href=&quot;http://www.ibm.com/developerworks/cn/java/j-javadev2-17/index.html?ca=drs-#resources&quot;&gt;参考资料&lt;/a&gt;）。由于 AWS 中的一切就是一个 web 服务，所有通信通过 HTTP 发生。因此，API 通过与 &lt;code&gt;Request&lt;/code&gt; 类似的对象模拟逻辑请求，比如 &lt;code&gt;SendMessageRequest&lt;/code&gt; 或 &lt;code&gt;CreateQueueRequest&lt;/code&gt;。在两种情况下，名称描述对象的意图。&lt;/p&gt;
&lt;p&gt;另外要注意的是，放在 SQS 上的消息是持久的：在删除之前它们一直在那里。（如果您不删除它们，消息最终不会消失；自动过期的默认值为 4  天。）当获取消息来阅读时，Amazon SQS 采用简单的锁定策略 &amp;mdash; 用于阅读事件，消息在一个时期内不可用于其他并发读取进程，这被称为消息的&lt;em&gt;可视性超时&lt;/em&gt;。该值被默认设置为 30 秒，不过您可以随需自由改变持续时间。&lt;/p&gt;
&lt;p&gt;位于 Amazon 架构的消息的持久性是可靠的。如同 SimpleDB 甚至 S3，AWS  中的组件是大量冗余的。如果您的读取器进程在消息处理期间意外终止，很有可能消息还在。而且，如果 AWS  网络中的一些资产也决定被销毁，您可以确信您的任务关键型消息不会被丢失 &amp;mdash; 它们将继续存在于任意数量的其他机器上。最后，所有其他 AWS  产品通常都是这样，您可以按地区设置您的消息基础架构的物理位置：美国，欧盟等。&lt;/p&gt;
&lt;p class=&quot;ibm-ind-link ibm-back-to-top&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;N1018D&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;读取 SQS 消息&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;向一个 SQS 队列写一条消息需要三行代码。读取消息稍微多一点。事实上，前两行是一样的，鉴于您需要一个 AWS  连接和同一队列的句柄。Amazon SQS 不提供任何回调功能或消息到达的预先通知。您必须定期轮询一个 SQS  队列，看看它是否有什么可提供的。因此，读取一个 SQS 队列需要这些额外的代码行。&lt;/p&gt;
&lt;p&gt;在实现轮询策略时要稍微注意一下：您必须检查并确保在处理一条消息之前实际接收了一条有效消息。如果您不检查，最终一定会看到这个可恶的 &lt;code&gt;NullPointerException&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;例如，假设我获取一个有效的 AWS 连接和包含消息的队列的句柄，我可以如清单 4 所示检索消息：&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a name=&quot;listing4&quot;&gt;&lt;strong&gt;清单 4. 通过 SQS 检索消息&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; summary=&quot;This table contains a code listing.&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;code-outline&quot;&gt;
&lt;pre class=&quot;displaycode&quot;&gt;				
 while (true) {
  List&amp;lt;Message&amp;gt; msgs = sqs.receiveMessage(
     new ReceiveMessageRequest(url).withMaxNumberOfMessages(1)).getMessages();

  if (msgs.size() &amp;gt; 0) {
   Message message = msgs.get(0);
   System.out.println(&quot;The message is &quot; + message.getBody());
   sqs.deleteMessage(new DeleteMessageRequest(url, message.getReceiptHandle()));
  } else {
    System.out.println(&quot;nothing found, trying again in 30 seconds&quot;);
    Thread.sleep(3000); 
  }
}
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;在清单 4 中，对 &lt;code&gt;sqs&lt;/code&gt; 的引用是一个 &lt;code&gt;AmazonSQS&lt;/code&gt; 类，如 &lt;a href=&quot;http://www.ibm.com/developerworks/cn/java/j-javadev2-17/index.html?ca=drs-#listing1&quot;&gt;清单 1&lt;/a&gt; 所示。该对象提供一个 &lt;code&gt;receiveMessage&lt;/code&gt; 方法，该方法接受一个 &lt;code&gt;ReceiveMessageRequest&lt;/code&gt;。可以配置 &lt;code&gt;ReceiveMessageRequest&lt;/code&gt;s 来请求队列中的一组消息。在我的例子中，我将其配置为一次仅获取一条消息。不管我请求多少条消息，&lt;code&gt;receiveMessage&lt;/code&gt; 方法都返回 &lt;code&gt;Message&lt;/code&gt; 类型的一个 &lt;code&gt;List&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;N101D1&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;实现一个轮询策略&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;正如我前面提到的，SQS 读取是通过轮询方式完成的；而且 &lt;code&gt;receiveMessage&lt;/code&gt; 方法是非阻塞的。因此，我必须检查确保相应的 &lt;code&gt;List&lt;/code&gt;（&lt;code&gt;msgs&lt;/code&gt;）确实包含什么东西。如果从队列上未检索到任何东西，对 &lt;code&gt;ReceiveMessageRequest&lt;/code&gt; 上 &lt;code&gt;getMessages&lt;/code&gt; 的调用会返回一个空的 &lt;code&gt;List&lt;/code&gt;，而非 &lt;code&gt;null&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;只要我检索了有效消息，我就可以通过 &lt;code&gt;getBody&lt;/code&gt; 调用获取其负载或主体。请记住，在有了有效消息句柄之后，SQS 会锁定它。默认情况下我有 30 秒的时间对消息做一些事情。如果我希望永久地从处理中移除消息，我必须删除它。因此，我发出一个 &lt;code&gt;deleteMessage&lt;/code&gt; 调用，该调用需要一个 &lt;code&gt;DeleteMessageRequest&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;一个 &lt;code&gt;Message&lt;/code&gt; 实例的特点是它的&lt;em&gt;接收句柄&lt;/em&gt;，如同 &lt;code&gt;id&lt;/code&gt;。句柄不直接与消息相关，但是与读取它的&lt;em&gt;事件&lt;/em&gt; 相关。读取过多次的一条消息（比如如果它没有被删除或则读取过程失败）可以有多个不同的接收句柄，最终当您希望删除一条消息时，您必须通过 &lt;code&gt;getReceiptHandle&lt;/code&gt; 调用提供其接收句柄。&lt;/p&gt;
&lt;p&gt;我没有不断检查看我的队列是否有消息，我提供了一个休眠函数，如没有检索到消息就等待 30 秒。显然在有些情况下，休眠可能不是一个好主意，或者一个较长时间的停顿会很合适。&lt;/p&gt;
&lt;p&gt;有了这几行代码，我就将 Amazon SQS 介绍得差不多了。虽然 AWS SDK 提供大量其他功能和特性，目前为止的代码是您读写消息到 SQS 队列所需的一切。&lt;/p&gt;
&lt;p&gt;现在我们来看看真正使用它时会发生什么。&lt;/p&gt;
&lt;p class=&quot;ibm-ind-link ibm-back-to-top&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;N10223&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;Magnus 满足 Amazon SQS&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上个月，我创建了一个简单的移动 web 应用程序 Magnus，我使用它来展示 Amazon Elastic Beanstalk 的一些特性（参见 &lt;a href=&quot;http://www.ibm.com/developerworks/cn/java/j-javadev2-17/index.html?ca=drs-#resources&quot;&gt;参考资料&lt;/a&gt;）。Magnus 有一个不错的功能，可以存储接收自帐户持有人的移动设备的位置信息 &amp;mdash; 就是很多人希望提供且其他人希望使用的那种信息。&lt;/p&gt;
&lt;p&gt;捕捉某些人的行踪是好的，但是人们真正喜欢的是图形（以及闪亮的圆角按钮）。当您有大量数据要移动时，从处理角度来看图形化和分析会很昂贵。（Hadoop 适用于任何人？）行之有效的&lt;em&gt;提取、转换和加载&lt;/em&gt; 或 ETL 技术是管理这个的一种方式。ETL 是包含大量东西的一个相当大的术语。（人们围绕这个缩写打造职业生涯，公司围绕这个建立业务！）在本例中，ETL 仅表示我要分析一些 MongoDB 数据并基于该数据创建新文档。&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;N10238&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;ETL 与 Amazon SQS&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;谈及数据分析时，对于我们对数据的要求以及我们可以提供的答案有多种可能性。Magnus web  应用程序呈现了这种可能性的一小部分：它提取并呈现与地理坐标、时间和用户帐户相关的数据。从技术上讲，Magnus 关注位置经纬度、用户帐户  ID、时间戳和这些特定数据之间的关系。&lt;/p&gt;
&lt;p&gt;Magnus  可以通过图形表示该数据，根据地理区域展示用户帐户（可能是一幅地图，使用标记在给定时间定位帐户持有人）。或者它可以展示如何跨给定区域（另一幅地图） 移动一个帐户持有人/用户。提供这种信息需要一个离线的 ETL 式流程。从处理角度来看，在生成数据时实时提供该数据会很昂贵。因此将这些分析看作是&lt;em&gt;近实时的&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;为在 Magnus 中使用 Amazon SQS，我需要做一些初步设置。首先，我需要一种获取 AWS 凭据的方式。我喜欢 Play（参见 &lt;a href=&quot;http://www.ibm.com/developerworks/cn/java/j-javadev2-17/index.html?ca=drs-#resources&quot;&gt;参考资料&lt;/a&gt;），因此我要将它作为我的应用程序开发框架。要获取凭据，我可以使用 Play 的 &lt;code&gt;application.conf&lt;/code&gt; 文件，即一个自动读取的属性文件。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a name=&quot;listing5&quot;&gt;&lt;strong&gt;清单 5. 添加 AWS 配置数据到 Play 的 application.conf&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; summary=&quot;This table contains a code listing.&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;code-outline&quot;&gt;
&lt;pre class=&quot;displaycode&quot;&gt;				
#AWS configuration
aws_access_key_id=1S..........MR2
aws_secret_access_key=S3.........ZM
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;在定义了属性之后，我可以通过对 Play 的 &lt;code&gt;Play&lt;/code&gt; 对象的一个调用来轻松获取它们，如清单 6 所示：&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a name=&quot;listing6&quot;&gt;&lt;strong&gt;清单 6. 在 Play 中获取 AWS 信息&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; summary=&quot;This table contains a code listing.&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;code-outline&quot;&gt;
&lt;pre class=&quot;displaycode&quot;&gt;				
public class Application extends Controller {

 private static final String AWS_KEY = 
    Play.configuration.get(&quot;aws_access_key_id&quot;).toString();
 private static final String AWS_SECRET = 
    Play.configuration.get(&quot;aws_secret_access_key&quot;).toString();

//....
}
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;定义了该管道之后，我就可以开始正事了。清单 7 中的代码类似于我上个月的 Amazon Elastic Beanstalk 简介中使用的一个代码段。在本例中，我仅使用一些代码更新了 &lt;code&gt;saveLocation&lt;/code&gt;，以将一个简单的 JSON 文档放到名为 &amp;ldquo;&lt;code&gt;locations_queue&lt;/code&gt;&amp;rdquo; 的一个队列上。JSON 基本上是这样的：&lt;code&gt;{&quot;id&quot;:&quot;4d6baeb52a54f1000001&quot;}&lt;/code&gt;。已存位置的 ID 提供给了消息接收人，供其进行查询和分析。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a name=&quot;listing7&quot;&gt;&lt;strong&gt;清单 7. 将消息放到 SQS 上的一个 saveLocation 方法&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; summary=&quot;This table contains a code listing.&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;code-outline&quot;&gt;
&lt;pre class=&quot;displaycode&quot;&gt;				
public static void saveLocation(String id, JsonObject body) throws Exception {
 String eventname = body.getAsJsonPrimitive(&quot;name&quot;).getAsString();
 double latitude = body.getAsJsonPrimitive(&quot;latitude&quot;).getAsDouble();
 double longitude = body.getAsJsonPrimitive(&quot;longitude&quot;).getAsDouble();
 String when = body.getAsJsonPrimitive(&quot;timestamp&quot;).getAsString();

 SimpleDateFormat formatter =
   new SimpleDateFormat(&quot;dd-MM-yyyy HH:mm&quot;);
 Date dt = formatter.parse(when);

 ObjectId oid = new Location(id, dt, latitude, longitude).save();

 AmazonSQS sqs = new AmazonSQSClient(new BasicAWSCredentials(AWS_KEY, AWS_SECRET));

 Map mp = new HashMap&amp;lt;String, String&amp;gt;();
 mp.put(&quot;id&quot;, oid.toString());

 String url = sqs.createQueue(new CreateQueueRequest(&quot;locations_queue&quot;)).getQueueUrl();
 sqs.sendMessage(new SendMessageRequest(url, new Gson().toJson(mp)));

 renderJSON(getSuccessMessage());
}
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;N10286&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;与 Ruby 来个约会？&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在将该消息放到 SQS 队列上之后，我需要从队列中选取它们并执行一些处理。不知您是否记得，MOM 的优势之一是它允许异构架构。为此，SQS 读取器方可使用 Java 之外的语言编写，甚至在另一个平台上运行！&lt;/p&gt;
&lt;p&gt;因为我基本上可以用我喜欢的任何语言执行分析处理，我要用 Ruby 来执行 &amp;mdash; 来赢得时尚年轻人的一些街头口碑。&lt;/p&gt;
&lt;p&gt;在清单 8 中，我借助了 &lt;code&gt;right_aws&lt;/code&gt; Ruby gem 来帮助我处理 SQS。在很多方面，您可以将 &lt;em&gt;gem&lt;/em&gt; 看作是 jar 文件。&lt;code&gt;right_aws&lt;/code&gt; 库很像 Amazon 的 SDK for Java，不过没那么冗长且使用起来更简单直观。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a name=&quot;listing8&quot;&gt;&lt;strong&gt;清单 8. 使用 Ruby 为 SQS 创建一个连接和队列&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; summary=&quot;This table contains a code listing.&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;code-outline&quot;&gt;
&lt;pre class=&quot;displaycode&quot;&gt;				
require &quot;right_aws&quot;
#...
sqs  = RightAws::SqsGen2.new(aws_access_key_id, aws_secret_access_key)
queue = sqs.queue('locations_queue')
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;如您所见，清单 8 中的两行相关代码建立 AWS 连接并获取我的 &lt;code&gt;'locations_queue'&lt;/code&gt; 队列的句柄。&lt;/p&gt;
&lt;p&gt;接下来，我建立了一个轮询机制，如清单 9 所示。对 &lt;code&gt;@queue&lt;/code&gt; 的引用是清单 8 中的同一 &lt;code&gt;queue&lt;/code&gt; 变量。不过在本例中，它被定义为类的一部分。因此在清单 9 中，我使用 Ruby 的 &lt;code&gt;@&lt;/code&gt; 语法直接引用一个实例变量。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a name=&quot;listing9&quot;&gt;&lt;strong&gt;清单 9. 从 SQS 处理消息&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; summary=&quot;This table contains a code listing.&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;code-outline&quot;&gt;
&lt;pre class=&quot;displaycode&quot;&gt;				
def process_messages()
  while true
    msg = @queue.pop
    if !msg.nil?
      handle_message(msg) # impl of which does neat stuff
	  msg.delete
    else
      sleep 10
    end
  end
end
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;在将消息传递给 &lt;code&gt;handle_message&lt;/code&gt; 方法之后，我可以删除它。如果未找到任何消息，主线程休眠 10 秒钟。&lt;code&gt;!msg.nil?&lt;/code&gt; 一行类似于 Java 代码中的 &lt;code&gt;msg != null&lt;/code&gt;。但是在 Ruby 中，甚至 &lt;code&gt;null&lt;/code&gt; 也是一个对象。询问一个对象是否是 &lt;code&gt;nil&lt;/code&gt; 类型（通过 &lt;code&gt;nil?&lt;/code&gt; 方法调用）会返回一个布尔值。&lt;/p&gt;
&lt;p class=&quot;ibm-ind-link ibm-back-to-top&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;N102E7&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;结束语&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;因为 AWS 是一个 web 服务产品，它为众多平台库所访问和利用。在 Magnus 中，您可以看到所产生的灵活性：我能够使用  Java 代码将消息推送到一个 SQS 队列，然后使用一个小 Ruby 程序将它们剥离下来。运用查询的架构的美妙之处在于组件的隐式解耦。&lt;/p&gt;
&lt;p&gt;就像在 GAE 或 Amazon 的 Elastic Beanstalk 上托管一个 web  应用程序通常很合理一样，利用云消息传送系统也很合理。Amazon 的 SQS  减轻了安装和维护队列系统的负担。您仅需创建一个队列，然后在其上删除和检索消息。将其余工作留给 Amazon。&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>使用wget下载数据文件</title>
   <link href="http://blog.xuyuan.me/2011/05/05/wget_file.html"/>
   <updated>2011-05-05T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2011/05/05/wget_file</id>
   <content type="html">&lt;p&gt;在数据处理过程中对于一些简单的文件传输可以通过wget进行下载，基本的用法很简单：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;wget $http_url&lt;/pre&gt;
&lt;p&gt;不过很多情况下可能会有更复杂的一些条件，这里例举其中两种：&lt;/p&gt;
&lt;p&gt;1. 公司网络访问外网需要通过代理&lt;/p&gt;
&lt;p&gt;解决方法：设定http_proxy环境变量，例如：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;export http_proxy=http://server:port&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 所访问的网页需要进行登录&lt;/p&gt;
&lt;p&gt;解决方法：使用wget的cookie参数，例如：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;wget --keep-session-cookies --save-cookies $cookie_file -O /dev/null --post-data=&quot;log=user&amp;amp;pwd=password&quot; $login_url

wget --keep-session-cookies --save-cookies $cookie_file --load-cookies $cookie_file $http_url -O $output_file&lt;/pre&gt;
&lt;p&gt;其中，$cookie_file是用来存储cookie内容的文件名，而post-data&lt;span style=&quot;font-family: 'Courier New', monospace; line-height: 18px; white-space: pre;&quot;&gt;参数的值可以通过&quot;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/live-http-headers/&quot; target=&quot;_blank&quot;&gt;Live HTTP headers&lt;/a&gt;&quot;等工具查看。&lt;/span&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>比较两个UNIX文本文件，找出新增内容（diff和comm命令）</title>
   <link href="http://blog.xuyuan.me/2011/03/17/unix_diff.html"/>
   <updated>2011-03-17T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2011/03/17/unix_diff</id>
   <content type="html">&lt;p&gt;最近项目中遇到一个奇怪的bug，仔细检查后发现是由一行简单代码引起的。这行代码要做的事情很简单：比较两个UNIX文本文件，找出并打印文本2比文本1新增加的内容。代码调用了diff命令，示例如下：&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #339966;&quot;&gt;# temp1.txt文件内容&lt;/span&gt;&lt;br /&gt;
$&amp;gt; cat temp1.txt&lt;br /&gt;
20110224&lt;br /&gt;
20110225&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;20110228&lt;br /&gt;
20110301&lt;br /&gt;
20110302&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #339966;&quot;&gt;# temp2.txt文件内容&lt;/span&gt;&lt;br /&gt;
$&amp;gt; cat temp2.txt&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;20110228&lt;br /&gt;
20110301&lt;br /&gt;
20110302&lt;/span&gt;&lt;br /&gt;
20110303&lt;br /&gt;
20110304&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #339966;&quot;&gt;# diff命令输出结果&lt;/span&gt;&lt;br /&gt;
$&amp;gt; diff temp1.txt temp2.txt&lt;br /&gt;
1,2d0&lt;br /&gt;
&amp;lt; 20110224&lt;br /&gt;
&amp;lt; 20110225&lt;br /&gt;
5a4,5&lt;br /&gt;
&amp;gt; 20110303&lt;br /&gt;
&amp;gt; 20110304&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #339966;&quot;&gt;# 只输出temp2.txt文件独有的内容&lt;/span&gt;&lt;br /&gt;
$&amp;gt; diff temp1.txt temp2.txt | grep &quot;&amp;gt; &quot; | sed 's/&amp;gt; //g'&lt;br /&gt;
20110303&lt;br /&gt;
20110304&lt;/p&gt;
&lt;p&gt;可以看到，输出结果去掉了两个文件的共同内容，只输出了temp2.txt的新增部分，和预想的结果一样。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;但是，随着temp1.txt文件内容的增加，diff命令出现了不同预期的结果：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$&amp;gt; cat temp1.txt&lt;br /&gt;
20101216&lt;br /&gt;
20101217&lt;br /&gt;
20101220&lt;br /&gt;
20101221&lt;br /&gt;
20101223&lt;br /&gt;
20101224&lt;br /&gt;
20101227&lt;br /&gt;
20101228&lt;br /&gt;
20101229&lt;br /&gt;
20101230&lt;br /&gt;
20101231&lt;br /&gt;
20110103&lt;br /&gt;
20110104&lt;br /&gt;
20110105&lt;br /&gt;
20110106&lt;br /&gt;
20110107&lt;br /&gt;
20110110&lt;br /&gt;
20110111&lt;br /&gt;
20110112&lt;br /&gt;
20110113&lt;br /&gt;
20110114&lt;br /&gt;
20110117&lt;br /&gt;
20110118&lt;br /&gt;
20110119&lt;br /&gt;
20110120&lt;br /&gt;
20110121&lt;br /&gt;
20110124&lt;br /&gt;
20110125&lt;br /&gt;
20110126&lt;br /&gt;
20110127&lt;br /&gt;
20110128&lt;br /&gt;
20110131&lt;br /&gt;
20110201&lt;br /&gt;
20110202&lt;br /&gt;
20110203&lt;br /&gt;
20110204&lt;br /&gt;
20110207&lt;br /&gt;
20110208&lt;br /&gt;
20110209&lt;br /&gt;
20110210&lt;br /&gt;
20110211&lt;br /&gt;
20110214&lt;br /&gt;
20110215&lt;br /&gt;
20110216&lt;br /&gt;
20110217&lt;br /&gt;
20110218&lt;br /&gt;
20110221&lt;br /&gt;
20110222&lt;br /&gt;
20110223&lt;br /&gt;
20110224&lt;br /&gt;
20110225&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;20110228&lt;br /&gt;
20110301&lt;br /&gt;
20110302&lt;br /&gt;
20110303&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;$&amp;gt; cat temp2.txt&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;20110228&lt;br /&gt;
20110301&lt;br /&gt;
20110302&lt;br /&gt;
20110303&lt;/span&gt;&lt;br /&gt;
20110304&lt;br /&gt;
20110307&lt;br /&gt;
20110308&lt;br /&gt;
20110309&lt;br /&gt;
20110310&lt;br /&gt;
20110311&lt;br /&gt;
20110314&lt;/p&gt;
&lt;p&gt;$&amp;gt; diff temp1.txt temp2.txt&lt;br /&gt;
1,55c1,11&lt;br /&gt;
&amp;lt; 20101216&lt;br /&gt;
&amp;lt; 20101217&lt;br /&gt;
&amp;lt; 20101220&lt;br /&gt;
&amp;lt; 20101221&lt;br /&gt;
&amp;lt; 20101223&lt;br /&gt;
&amp;lt; 20101224&lt;br /&gt;
&amp;lt; 20101227&lt;br /&gt;
&amp;lt; 20101228&lt;br /&gt;
&amp;lt; 20101229&lt;br /&gt;
&amp;lt; 20101230&lt;br /&gt;
&amp;lt; 20101231&lt;br /&gt;
&amp;lt; 20110103&lt;br /&gt;
&amp;lt; 20110104&lt;br /&gt;
&amp;lt; 20110105&lt;br /&gt;
&amp;lt; 20110106&lt;br /&gt;
&amp;lt; 20110107&lt;br /&gt;
&amp;lt; 20110110&lt;br /&gt;
&amp;lt; 20110111&lt;br /&gt;
&amp;lt; 20110112&lt;br /&gt;
&amp;lt; 20110113&lt;br /&gt;
&amp;lt; 20110114&lt;br /&gt;
&amp;lt; 20110117&lt;br /&gt;
&amp;lt; 20110118&lt;br /&gt;
&amp;lt; 20110119&lt;br /&gt;
&amp;lt; 20110120&lt;br /&gt;
&amp;lt; 20110121&lt;br /&gt;
&amp;lt; 20110124&lt;br /&gt;
&amp;lt; 20110125&lt;br /&gt;
&amp;lt; 20110126&lt;br /&gt;
&amp;lt; 20110127&lt;br /&gt;
&amp;lt; 20110128&lt;br /&gt;
&amp;lt; 20110131&lt;br /&gt;
&amp;lt; 20110201&lt;br /&gt;
&amp;lt; 20110202&lt;br /&gt;
&amp;lt; 20110203&lt;br /&gt;
&amp;lt; 20110204&lt;br /&gt;
&amp;lt; 20110207&lt;br /&gt;
&amp;lt; 20110208&lt;br /&gt;
&amp;lt; 20110209&lt;br /&gt;
&amp;lt; 20110210&lt;br /&gt;
&amp;lt; 20110211&lt;br /&gt;
&amp;lt; 20110214&lt;br /&gt;
&amp;lt; 20110215&lt;br /&gt;
&amp;lt; 20110216&lt;br /&gt;
&amp;lt; 20110217&lt;br /&gt;
&amp;lt; 20110218&lt;br /&gt;
&amp;lt; 20110221&lt;br /&gt;
&amp;lt; 20110222&lt;br /&gt;
&amp;lt; 20110223&lt;br /&gt;
&amp;lt; 20110224&lt;br /&gt;
&amp;lt; 20110225&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;&amp;lt; 20110228&lt;br /&gt;
&amp;lt; 20110301&lt;br /&gt;
&amp;lt; 20110302&lt;br /&gt;
&amp;lt; 20110303&lt;/span&gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;&amp;gt; 20110228&lt;br /&gt;
&amp;gt; 20110301&lt;br /&gt;
&amp;gt; 20110302&lt;br /&gt;
&amp;gt; 20110303&lt;/span&gt;&lt;br /&gt;
&amp;gt; 20110304&lt;br /&gt;
&amp;gt; 20110307&lt;br /&gt;
&amp;gt; 20110308&lt;br /&gt;
&amp;gt; 20110309&lt;br /&gt;
&amp;gt; 20110310&lt;br /&gt;
&amp;gt; 20110311&lt;br /&gt;
&amp;gt; 20110314&lt;/p&gt;
&lt;p&gt;$&amp;gt; diff temp1.txt temp2.txt | grep &quot;&amp;gt; &quot; | sed 's/&amp;gt; //g'&lt;br /&gt;
&lt;span style=&quot;color: #3366ff;&quot;&gt;20110228&lt;br /&gt;
20110301&lt;br /&gt;
20110302&lt;br /&gt;
20110303&lt;/span&gt;&lt;br /&gt;
20110304&lt;br /&gt;
20110307&lt;br /&gt;
20110308&lt;br /&gt;
20110309&lt;br /&gt;
20110310&lt;br /&gt;
20110311&lt;br /&gt;
20110314&lt;/p&gt;
&lt;p&gt;可以看到，diff命令不但输出了temp2.txt文件的新增部分（20110304-20110314），也同时输出了两个文件的共同内容（20110228-20110303），从而导致了与预期不一致的结果。&lt;/p&gt;
&lt;p&gt;查看diff命令的man手册发现，diff的作用是比较两个文件的内容，并输出两个文件之间的差异，产生一个能够将两个文件互相转换的列表，但这个列表并不能100%保证是最小集。于是，在上面的例子中，我们看到diff给出了temp1.txt和temp2.txt文件的比较差异结果，但其中包含了两个文件的共同部分，因此与预期不一样。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一个解决的方法是，可以用comm命令代替diff，示例如下：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$&amp;gt; comm -13 temp1.txt temp2.txt&lt;br /&gt;
20110304&lt;br /&gt;
20110307&lt;br /&gt;
20110308&lt;br /&gt;
20110309&lt;br /&gt;
20110310&lt;br /&gt;
20110311&lt;br /&gt;
20110314&lt;/p&gt;
&lt;p&gt;comm命令用来比较两个文件，具体用法：&lt;/p&gt;
&lt;p&gt;comm [-123] file1 file2&lt;br /&gt;
-1 过滤file1独有的内容&lt;br /&gt;
-2 过滤file2独有的内容&lt;br /&gt;
-3 过滤file1和file2重复的内容&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PS，看了下diff的输出格式，主要有以下几种：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;n1 a n3,n4&lt;br /&gt;
n1,n2 d n3&lt;br /&gt;
n1,n2 c n3,n4&lt;/p&gt;
&lt;p&gt;例如&quot;1,2d0&quot; &quot;5a4,5&quot; &quot;1,55c1,11&quot;等。其中n1和n2指第一个文件的行数，n3和n4指第二个文件的行数。&quot;a&quot;代表add增加，&quot;d&quot;代表delete删除，&quot;c&quot;代表change整块变动。&lt;/p&gt;
&lt;p&gt;有了diff的输出结果，可以使用patch命令将一个文件恢复成另一个，例如：&lt;/p&gt;
&lt;p&gt;$&amp;gt; cat temp1.txt&lt;br /&gt;
20110224&lt;br /&gt;
20110225&lt;br /&gt;
20110228&lt;br /&gt;
20110301&lt;br /&gt;
20110302&lt;/p&gt;
&lt;p&gt;$&amp;gt; cat temp2.txt&lt;br /&gt;
20110228&lt;br /&gt;
20110301&lt;br /&gt;
20110302&lt;br /&gt;
20110303&lt;br /&gt;
20110304&lt;/p&gt;
&lt;p&gt;$&amp;gt; diff temp1.txt temp2.txt &amp;gt; temp.diff&lt;/p&gt;
&lt;p&gt;$&amp;gt; cat temp.diff&lt;br /&gt;
1,2d0&lt;br /&gt;
&amp;lt; 20110224&lt;br /&gt;
&amp;lt; 20110225&lt;br /&gt;
5a4,5&lt;br /&gt;
&amp;gt; 20110303&lt;br /&gt;
&amp;gt; 20110304&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #339966;&quot;&gt;# 使用temp.diff和temp1.txt恢复temp2文件&lt;/span&gt;&lt;br /&gt;
$&amp;gt; patch -i temp.diff -o temp2_restore.txt temp1.txt&lt;br /&gt;
Looks like a normal diff.&lt;br /&gt;
done&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #339966;&quot;&gt;# 完成后temp2_restore和原temp2文件内容一致&lt;/span&gt;&lt;br /&gt;
$&amp;gt; cat temp2_restore.txt&lt;br /&gt;
20110228&lt;br /&gt;
20110301&lt;br /&gt;
20110302&lt;br /&gt;
20110303&lt;br /&gt;
20110304&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>一键脚本搭建基于Amazon EC2的免费Google ghs反向代理</title>
   <link href="http://blog.xuyuan.me/2011/02/26/aws_nginx.html"/>
   <updated>2011-02-26T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2011/02/26/aws_nginx</id>
   <content type="html">&lt;p&gt;相信很多试图把自己的域名和Google Apps绑定的同学都有遇到ghs被墙的烦恼，也曾到处寻找可用的ghs代理。曾经有一段时间一直在用&lt;a href=&quot;http://www.you8g.com/&quot; target=&quot;_blank&quot;&gt;you8g&lt;/a&gt;提供的ghs反向代理，不过不久前这个站点ms挂了。既然Amazon EC2提供了免费的Linux主机，那么干脆就在上面自己搭一个Nginx的反向代理用。顺手做了个一键安装并配置ghs反向代理的脚本，有需要的同学可以用来搭建自己的Nginx代理。如果没有申请过Amazon EC2, 可以参考此前的文章：&lt;a href=&quot;../2010/11/9/aws_tutorial.html&quot; target=&quot;_blank&quot;&gt;Amazon AWS 漫游指南&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;AWS EC2搭建Nginx作为Google ghs反向代理的具体步骤如下：&lt;/p&gt;
&lt;p&gt;1. 为域名增加一条A记录，把ghs指向你的EC2 Ip (即AWS给出的Public DNS的中间一串数字).&lt;/p&gt;
&lt;p&gt;2. 将需要指向ghs.google.com的域名cname指向ghs.your_domain_name&lt;/p&gt;
&lt;p&gt;3. ssh登录EC2 Linux，执行以下命令：&lt;/p&gt;
&lt;pre class=&quot;brush: bash;fontsize: 100; first-line: 1; &quot;&gt;wget https://gist.github.com/raw/844836/ec6cfc93ae6c8330c2d1aa2c8b3e5ed45af61b60/nginx.sh
# 此处替换example.com为你自己的域名
sudo sh nginx.sh example.com&lt;/pre&gt;
&lt;p&gt;打开EC2 security group中的相应端口，如果安装过程一切正常，域名的ghs反向代理就应该可以工作了。脚本在AWS EC2 Linux 32bit中测试通过。&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>怎样利用你的闲置域名展示Google Adsense广告</title>
   <link href="http://blog.xuyuan.me/2011/02/01/domain_adsense.html"/>
   <updated>2011-02-01T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2011/02/01/domain_adsense</id>
   <content type="html">&lt;p&gt;不知道大家在访问一些尚未启用的域名时有没有遇到过下面这样的广告页面：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.google.com/adsense/static/en_US/images/afd_example.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;有没有想过将自己的闲置域名也设计成类似的广告页？做一个网页然后插入Google Adsense的代码？其实完全不用这么麻烦，原来Google Adsense已经提供了很便利的方法，只需要修改自己域名的DNS设置就可以。实际上，你并不需要一个完全闲置不用的域名，只要www子域名是空闲没有使用的。比如说，你可以将blog.example.com做为你的blog网址，而把暂不需要使用的www.example.com指向广告。以下是具体的方法：&lt;/p&gt;
&lt;p&gt;1. 在Google Adsense控制面板中选择&quot;New hosted domain&quot;, 添加你的域名&lt;/p&gt;
&lt;p&gt;2. 按以下其中一种方法修改DNS设置：&lt;/p&gt;
&lt;p&gt;2a). 把域名的nameserver指向Google的DNS nameserver：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * ns1.googleghs.com&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; * ns2.googleghs.com&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; * ns3.googleghs.com&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; * ns4.googleghs.com&lt;/p&gt;
&lt;p&gt;或者，如果你希望更精确的控制使用子域名，那么可以：&lt;/p&gt;
&lt;p&gt;2b). 修改别名(CNAME)和A记录如下：&lt;/p&gt;
&lt;p&gt;修改CNAME (此处pub-xxxxxxxxx指你的Adsense帐号的唯一ID)：&lt;/p&gt;
&lt;table border=&quot;1&quot; cellspacing=&quot;3&quot; cellpadding=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;33%&quot;&gt;&lt;strong&gt;Host Name/Alias&lt;/strong&gt;&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;&lt;strong&gt;Record Type&lt;/strong&gt;&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;&lt;strong&gt;Value/Destination&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;33%&quot;&gt;www&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;CNAME (alias)&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;&lt;strong&gt;pub-xxxxxxxxx&lt;/strong&gt;.afd.ghs.google.com&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;修改A记录：&lt;/p&gt;
&lt;table border=&quot;1&quot; cellspacing=&quot;3&quot; cellpadding=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;33%&quot;&gt;&lt;strong&gt;Host Name/Alias&lt;/strong&gt;&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;&lt;strong&gt;Record Type&lt;/strong&gt;&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;&lt;strong&gt;Value/Destination&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;33%&quot;&gt;@&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;A (address)&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;216.239.32.21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;33%&quot;&gt;@&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;A (address)&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;216.239.34.21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;33%&quot;&gt;@&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;A (address)&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;216.239.36.21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;33%&quot;&gt;@&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;A (address)&lt;/td&gt;
&lt;td width=&quot;33%&quot;&gt;216.239.38.21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;只需要按照A或B方法中的一种修改域名配置，然后等待一段时间生效(大约几小时)，你的域名就会被自动指向Google的广告页。另外，这个页面所展示广告的样式、语言等等都可以登录Adsense账户修改。这个是我用自己的域名产生的结果：&lt;a href=&quot;http://www.xuyuan.me&quot; target=&quot;_blank&quot;&gt;www.xuyuan.me&lt;/a&gt; 感兴趣的同学可以自己动手试试看。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Updated 2011.02.04&lt;/strong&gt;: 发现pub-xxxxxxxxx.afd.ghs.google.com也属被墙之列，为了让网页能在墙内正常访问，可以自己使用Nginx做一个反向代理，配置如下：&lt;/p&gt;
&lt;pre class=&quot;brush: plain;fontsize: 100; first-line: 1; &quot;&gt;	upstream adghs {
        server pub-xxxxxxxxx.afd.ghs.google.com;
    }

	server {
        listen       80;
        server_name  www.xuyuan.me;
        access_log  /var/log/nginx/ghs.xuyuan.me.log;

        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_pass http://adghs;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_redirect false;
        }
    }&lt;/pre&gt;
&lt;p&gt;这样&amp;nbsp;&lt;a href=&quot;http://www.xuyuan.me&quot; target=&quot;_blank&quot;&gt;www.xuyuan.me&lt;/a&gt;&amp;nbsp;的网页应该可以在墙内正常打开了。(题外话：至于运行Nginx的Server，可以利用Amazon的免费EC2服务，具体细节下文再述。)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>使用Dropbox同步Eclipse项目</title>
   <link href="http://blog.xuyuan.me/2011/01/20/dropbox_eclipse.html"/>
   <updated>2011-01-20T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2011/01/20/dropbox_eclipse</id>
   <content type="html">&lt;p&gt;开发时难免有时会需要在几个不同的地点，比如公司和家里的PC，调试同一段代码。这时简单有效、避免人工干预的代码同步不仅可以节省时间，而且也可以帮助保持清晰一致的思维。对于一些小规模且没有使用在线代码托管的项目来说，&lt;a href=&quot;https://www.dropbox.com/referrals/NTY2MTQwMTU5&quot; target=&quot;_blank&quot;&gt;Dropbox&lt;/a&gt;是一个不错的同步选择。Eclipse项目结合使用Dropbox的方法十分简单，只要把workspace建在Dropbox文件夹里的任一个目录就可以。但这样做带来的一个问题是Dropbox会不断地把即时生成的编译文件(假设是Java程序)同步到服务器，这不仅会对机器性能带来一些影响，而且如此频繁的更新也没有必要，毕竟我们只需要保证在换到一个新地点开始工作时代码完成更新就行了。&lt;/p&gt;
&lt;p&gt;这里介绍一个方法可以把Eclipse产生的编译文件移到Dropbox目录之外，这样我们就可以只同步发生改变的源程序：&lt;/p&gt;
&lt;p&gt;1.打开项目属性页面，在默认输出目录点击&quot;Browse&quot;：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/blog/eclipse_1.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;2.选取项目的顶层目录，然后点击新建目录：&lt;br /&gt; （如果你想要使用的目录名比如&quot;bin&quot;已经存在，可以先将其删除）&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/blog/eclipse_2.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;3.在&quot;Advanced&quot;模式下，勾选&quot;Link to folder in the file system&quot;，然后选择一个Dropbox之外的文件夹作为输出目录：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/blog/eclipse_3.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;另外需要注意的是，不同开发机器上的JDK安装目录以及Dropbox目录的绝对路径最好保持一致，不然对一些类库文件的引用可能出错。&lt;/p&gt;
&lt;p&gt;如果你还没有安装Dropbox，可以通过以下链接申请，这样我们都可以增加额外的免费空间：&lt;br /&gt; &lt;a href=&quot;https://www.dropbox.com/referrals/NTY2MTQwMTU5&quot; target=&quot;_blank&quot;&gt;https://www.dropbox.com/referrals/NTY2MTQwMTU5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果你不能访问Dropbox,试着修改C:\WINDOWS\system32\drivers\etc目录下的host文件，增加一行&quot;174.36.30.71    www.dropbox.com&quot; (不含引号)。&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>[转] 使用Amazon EC2搭建自己的VPN服务器</title>
   <link href="http://blog.xuyuan.me/2011/01/19/aws_vpn.html"/>
   <updated>2011-01-19T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2011/01/19/aws_vpn</id>
   <content type="html">&lt;p&gt;之前转过一篇关于开通设置Amazon AWS的&lt;a href=&quot;../2010/11/9/aws_tutorial.html&quot; target=&quot;_blank&quot;&gt;教程&lt;/a&gt;。Amazon的免费AWS服务有一个非常不错的用处就是搭建自己的VPN服务器，这样PC/Android/iPhone上网全都一并解决了。  这里还是转一篇来自@yinhm的EC2一键安装VPN的教程，原文地址: &lt;a href=&quot;http://yinhm.appspot.com/2010/11/amazon-ec2-tunnel-guide-part-three-vpn&quot; target=&quot;_blank&quot;&gt;http://yinhm.appspot.com/2010/11/amazon-ec2-tunnel-guide-part-three-vpn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: helvetica, arial, clean, sans-serif; line-height: normal; font-size: 16px;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; margin-top: 15pt; margin-right: 0px; margin-bottom: 10pt; margin-left: 0px; font-size: 18pt;&quot;&gt;为什么PPTP&lt;/h2&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;VPN常见的有：IPSec, PPTP, L2TP, OpenVPN。OpenVPN运行在用户空间，这需要用户端安装客户端软件，对手机用户来说并不友好。IPSec, L2TP over IPSec则过于繁琐。PPTP的话，从协议上来讲，&lt;a style=&quot;color: #0000cc; text-decoration: none;&quot; href=&quot;http://poptop.sourceforge.net/dox/protocol-security.phtml&quot;&gt;不够安全&lt;/a&gt;，但由于其易用并且安全风险在可以接受的范围，这里选择了 PPTP。&lt;/p&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;&lt;strong&gt;警告&lt;/strong&gt;：如果您对安全要求非常高，请使用IPSec或者OpenVPN代替。&lt;/p&gt;
&lt;h2 style=&quot;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; margin-top: 15pt; margin-right: 0px; margin-bottom: 10pt; margin-left: 0px; font-size: 18pt;&quot;&gt;安装配置PPTP&lt;/h2&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;我在DiaHosting提供的&lt;a style=&quot;color: #0000cc; text-decoration: none;&quot; href=&quot;http://blog.diahosting.com/linux-tutorial/pptpd/&quot;&gt;PPTPD一键安装脚本&lt;/a&gt;基础上定制了 Amazon AWS EC2的&lt;a style=&quot;color: #0000cc; text-decoration: none;&quot; href=&quot;https://gist.github.com/raw/666241/e8f3030a9e7066b8deb0a3d9ec761360e2d94227/pptpd.sh&quot;&gt;pptpd安装配置脚本&lt;/a&gt;。&lt;/p&gt;
&lt;h3 style=&quot;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; margin-top: 0px; margin-right: 0px; margin-bottom: 8pt; margin-left: 0px; font-size: 15pt;&quot;&gt;系统要求&lt;/h3&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;需要您的系统为 Amazon Linux AMI。&lt;/p&gt;
&lt;h3 style=&quot;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; margin-top: 0px; margin-right: 0px; margin-bottom: 8pt; margin-left: 0px; font-size: 15pt;&quot;&gt;安装&lt;/h3&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;登陆您的EC2 instance，如果您用使用Tunnier并且按照前文登陆时默认关闭&quot;Open Terminal&quot;的话，需要在Login后，点击左侧&lt;strong&gt;Open New Terminal Console&lt;/strong&gt;进入EC2 instance终端。&lt;/p&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;进入EC2系统终端后，输入下面的代码：&lt;/p&gt;
&lt;pre style=&quot;font-family: monospace; color: #005500; margin-top: 17pt; margin-bottom: 17pt; margin-left: 17pt; margin-right: 0px; padding-left: 15pt; border-left-width: 1px; border-left-style: solid; border-left-color: #dddddd; line-height: 16pt; overflow-x: auto; overflow-y: auto;&quot;&gt;&lt;code style=&quot;font-family: monospace; color: #005500;&quot;&gt;wget https://gist.github.com/raw/666241/e8f3030a9e7066b8deb0a3d9ec761360e2d94227/pptpd.sh
sudo sh pptpd.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;安装配置完成后会高亮提示vpn用户名和密码。&lt;/p&gt;
&lt;h3 style=&quot;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; margin-top: 0px; margin-right: 0px; margin-bottom: 8pt; margin-left: 0px; font-size: 15pt;&quot;&gt;VPN用户管理&lt;/h3&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;增加用户，直接编辑 /etc/ppp/chap-secrets 文件，按照相同格式添加用户名和密码即可。&lt;/p&gt;
&lt;h3 style=&quot;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; margin-top: 0px; margin-right: 0px; margin-bottom: 8pt; margin-left: 0px; font-size: 15pt;&quot;&gt;防火墙&lt;/h3&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;如果您使用的不是默认的&lt;strong&gt;Security Group&lt;/strong&gt;，比如按照&lt;a style=&quot;color: #0000cc; text-decoration: none;&quot; href=&quot;http://yinhm.appspot.com/2010/10/amazon-ec2-micro-instance-and-tunnel-guide&quot;&gt;前文&lt;/a&gt;设置的&quot;Security Group&quot;，那么还需要调整防火墙规则。&lt;/p&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;PPTP默认跑1723端口，&lt;span style=&quot;text-decoration: line-through;&quot;&gt;我设置了没有成功，所以这里我打开了所有的端口&lt;/span&gt;&lt;strong&gt;只需第一行规则即可&lt;/strong&gt;，见图：&lt;/p&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;&lt;img style=&quot;display: block; margin-top: 10px; margin-bottom: 10px; max-width: 700px; border: 0px initial initial;&quot; src=&quot;http://lh3.ggpht.com/3XSYr8H3dxoRhFB82ry7DRGdWQfWbq0W_XVWaCQ1YfGleNErWa8woDKAct_1iysy889mXk4ZR3fLYw=s640&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2 style=&quot;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; margin-top: 15pt; margin-right: 0px; margin-bottom: 10pt; margin-left: 0px; font-size: 18pt;&quot;&gt;客户端连接&lt;/h2&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;客户端使用PPTP协议连接您的EC2服务器，服务器地址为您的Public DNS（参见前文），使用安装完成提示您的用户名密码即可连接。&lt;/p&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;需要注意，Public DNS在EC2 instance重启后会变更，您可以通过动态域名服务或者设置固定IP来解决。其实还有更简单的办法，对于普通用户，不妨不重启EC2 instance，linux系统稳定跑上一年没问题，一年后都收费了。如果你讨厌冗长的Public DNS，不妨ping一下得到您的IP，其实就是Public DNS中间的一串数字。&lt;/p&gt;
&lt;p style=&quot;line-height: 18pt; margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 1em;&quot;&gt;如果您希望长时间运行不受动态IP地址问题的影响，那么不妨设置一个固定IP。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>原来当Google账户开通了Latitude时，你的手机就是一自动的定位追踪装置</title>
   <link href="http://blog.xuyuan.me/2011/01/14/google_latitude.html"/>
   <updated>2011-01-14T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2011/01/14/google_latitude</id>
   <content type="html">&lt;p&gt;N久前开通了Google Latitude, 并且允许检测地理位置和记录历史位置信息，但随后一直没怎么留意。前些时候换了Android系统的手机，自然少不了绑定了自己的Google帐号（这样Google联系人和日历等信息就会自动同步到手机）。用了一段时间手机，偶尔再看Google Latitude时，发现里面已经记录了非常多的信息，包括你最近去了哪些地点/城市/国家，你的时间都花在了哪些地方，甚至还基本准确地猜测出了你具体的家庭住址和工作地点（应该是根据出行的日期，停留时间等来确定的）：&lt;/p&gt;
&lt;div class=&quot;g-section g-tpl-50-50&quot;&gt;
&lt;div class=&quot;g-unit g-first&quot;&gt;
&lt;h2 class=&quot;analytics-big-title&quot;&gt;How do I spend my time?&lt;/h2&gt;
&lt;div id=&quot;piechart&quot;&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/latitude_chart0.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class=&quot;home-work-title no-padding&quot;&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/blog/analytics-work.png&quot; alt=&quot;&quot; /&gt; Time at work &lt;a href=&quot;http://www.google.com/support/mobile/bin/answer.py?answer=163845&amp;amp;hl=en#faqsdashboard&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/icon-help.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;WorkReverseGeocodeDiv&quot;&gt;
&lt;p class=&quot;analytics-workhomegeocode&quot;&gt;*** Rd, Hangzhou, Zhejiang, China&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/latitude_chart1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;home-work-title no-padding&quot;&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/analytics-house.gif&quot; alt=&quot;&quot; /&gt; Time at home &lt;a href=&quot;http://www.google.com/support/mobile/bin/answer.py?answer=163845&amp;amp;hl=en#faqsdashboard&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/icon-help.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;HomeReverseGeocodeDiv&quot;&gt;
&lt;p class=&quot;analytics-workhomegeocode&quot;&gt;*** Rd, Hangzhou, Zhejiang, China&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/latitude_chart2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;home-work-title no-padding&quot;&gt;Time spent out &lt;a href=&quot;http://www.google.com/support/mobile/bin/answer.py?answer=163845&amp;amp;hl=en#faqsdashboard&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/icon-help.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; &lt;/span&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/blog/latitude_chart3.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class=&quot;analytics-big-title&quot;&gt;Countries visited &lt;a href=&quot;http://www.google.com/support/mobile/bin/answer.py?answer=163845&amp;amp;hl=en#faqsdashboard&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/icon-help.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/latitude_chart4.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;还有一些包含精确Google Maps坐标的图没有贴出来。。Google知道的是不是太多了。。话说回来，如果手机被偷，这倒是一个不错的找回手机的可行方案 :-)&lt;/p&gt;
&lt;p&gt;另外一个有意思的图表是，Google记录了你的累积行程数，以及这个数字距离旅行到月球还有多远：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/blog/milestomoon.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;我的Google Profile: &lt;a href=&quot;http://www.google.com/profiles/xuyuanme&quot; target=&quot;_blank&quot;&gt;http://www.google.com/profiles/xuyuanme&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Amazon AWS试用后记</title>
   <link href="http://blog.xuyuan.me/2010/12/24/aws_charge.html"/>
   <updated>2010-12-24T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/12/24/aws_charge</id>
   <content type="html">&lt;p&gt;上次在转了一篇关于Amazon AWS免费试用的文章后，自己也身体力行地尝试了一遍。当时没有注意太多，试用完之后就把AWS上的Instance关掉了。但杯具的是，这两个月连续的收到亚马逊的账单，每个月7刀左右：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/blog/aws_charge.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;仔细查看了一下，发现大多数费用都发生在&amp;rdquo;EBS Volumns&amp;rdquo;。这个服务的全称是&amp;rdquo;Amazon Elastic Block Store&amp;rdquo;，提供离线存储服务。问题是当时在用Free Tier的时候完全没有注意到这个会随着Micro Instance的启动而一并运行，并且在停掉Instance之后也还一直在计时计费。没办法，只好发信给亚马逊看看能不能解释清楚。看来免费的午餐吃起来也得格外小心啊。。&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/blog/aws_ebs.JPG&quot; alt=&quot;&quot; width=&quot;700&quot; height=&quot;400&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>[转] Amazon AWS 漫游指南</title>
   <link href="http://blog.xuyuan.me/2010/11/09/aws_tutorial.html"/>
   <updated>2010-11-09T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/11/09/aws_tutorial</id>
   <content type="html">&lt;p&gt;转载自&lt;a href=&quot;http://yinhm.appspot.com/2010/10/amazon-ec2-micro-instance-and-tunnel-guide&quot; target=&quot;_blank&quot;&gt;http://yinhm.appspot.com/2010/10/amazon-ec2-micro-instance-and-tunnel-guide&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;body&quot;&gt;
&lt;h2&gt;本文适用对象&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;您希望建立自己的英特网漫游隧道&lt;/li&gt;
&lt;li&gt;您有一张可以刷外币的信用卡，比如VISA。手机。&lt;/li&gt;
&lt;li&gt;您有基本的英文阅读技能&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;开始前需要注意&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;本文作者不对任何因本文造成的费用负责；&lt;/li&gt;
&lt;li&gt;Amazon包含750小时的free tiers活动从2010年11月1日开始，10月20日后注册的新用户 都可以享受此项服务；&lt;/li&gt;
&lt;li&gt;Free tires包含10GB EBS，30GB带宽（SSH proxy的话，实际上只有15GB），超出部分仍然需要付费；&lt;/li&gt;
&lt;li&gt;本文作者不熟悉Amazon EC2等服务，部分描述或理解可能有差错。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;注册Amazon AWS账户&lt;/h2&gt;
&lt;h3&gt;注册Amazon账户&lt;/h3&gt;
&lt;p&gt;启动浏览器，访问 &lt;a href=&quot;http://aws.amazon.com/&quot;&gt;http://aws.amazon.com/&lt;/a&gt; ，点击&quot;Sign Up Now&quot;：&lt;br /&gt; &lt;img src=&quot;http://yinhm.appspot.com/static/ec2/step_1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;转入amazon账户登陆页面，如果您已经是amazon的用户，可以直接登陆，本文假设您还没 有amazon账户，注册新用户：&lt;br /&gt; &lt;img src=&quot;http://yinhm.appspot.com/static/ec2/step_2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;输入email地址&lt;/li&gt;
&lt;li&gt;选中&quot;I am a new user.&lt;/li&gt;
&lt;li&gt;点击&quot;Sign in using secure server&quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;转入新用户注册页面：&lt;br /&gt; &lt;img src=&quot;http://yinhm.appspot.com/static/ec2/step_3.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;姓名&lt;/li&gt;
&lt;li&gt;email地址&lt;/li&gt;
&lt;li&gt;重复email地址&lt;/li&gt;
&lt;li&gt;账户密码&lt;/li&gt;
&lt;li&gt;重复密码&lt;/li&gt;
&lt;li&gt;点击&quot;Create account&quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;转入联系信息页面：&lt;br /&gt; &lt;img src=&quot;http://yinhm.appspot.com/static/ec2/step_4.png&quot; alt=&quot;&quot; width=&quot;800&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;联系地址：街道，公司，必填&lt;/li&gt;
&lt;li&gt;联系地址：几单元门牌号等，按需填写&lt;/li&gt;
&lt;li&gt;城市&lt;/li&gt;
&lt;li&gt;省份&lt;/li&gt;
&lt;li&gt;邮编&lt;/li&gt;
&lt;li&gt;国家：china&lt;/li&gt;
&lt;li&gt;电话号码：直接填写，无需 +86&lt;/li&gt;
&lt;li&gt;协议&lt;/li&gt;
&lt;li&gt;验证码&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;注册AWS账户&lt;/h3&gt;
&lt;p&gt;联系信息提交成功后转入AWS登陆页面，输入email，密码，登陆后，转到AWS联系信息页面，虽 然之前注册Amazon账户已经填写过联系信息，注册Amazon AWS账户还是需要充填一遍，按 照原先输入的信息表单会自动补全。&lt;/p&gt;
&lt;p&gt;联系信息提交成功后，AWS账户注册步骤完成了。Amazon AWS会email通知告诉你接下来 如何如何。&lt;/p&gt;
&lt;h2&gt;填写信用卡信息&lt;/h2&gt;
&lt;p&gt;Amazon EC2一般的付费模式是On Demand按需付费，不用不付费。在使用之 前需要关联信用卡信息到您的AWS账户。&lt;/p&gt;
&lt;p&gt;点击上面邮件中的account链接，或直接访问：&lt;a href=&quot;http://aws.amazon.com/account&quot;&gt;http://aws.amazon.com/account&lt;/a&gt;，点击 &lt;strong&gt;Payment Method&lt;/strong&gt; ，登陆后转到支付方式页面，输入你的信用卡信息 &lt;strong&gt;Continue&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;继续转到账单地址页面，选择注册AWS时提供的地址 &lt;strong&gt;Continue&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;信用卡验证会刷掉1美金（我的理解是预付费，验证不会真的扣钱，这点我并未去证实），如果没有成功会收到邮件通知更正信用卡信 息，&lt;strong&gt;Account Activity&lt;/strong&gt;页面也会提示你更新信用卡信息或者用已有信息 重新验证。&lt;/p&gt;
&lt;h2&gt;开通 AWS EC2 等服务&lt;/h2&gt;
&lt;p&gt;开通AWS相关服务需要登陆AWS管理后台console。访问 &lt;a href=&quot;https://aws.amazon.com/console&quot;&gt;https://aws.amazon.com/console&lt;/a&gt; ，点击 &lt;strong&gt;Sign in to the AWS Console&lt;/strong&gt;，登陆后转到AWS后台。&lt;/p&gt;
&lt;p&gt;默认登陆console后转到 Amazon S3 管理页面，点击 Amazon EC2 转到 EC2 管理页面，点 击 &lt;strong&gt;Sign Up For Amazon EC2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;转到电话验证页面&lt;br /&gt; &lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_console_ec2_id_verification.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择China&lt;/li&gt;
&lt;li&gt;填写手机号码，无需+86&lt;/li&gt;
&lt;li&gt;点击 &quot;Call Me Now&quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;点击后，此页面转到第二步，显示 PIN 验证码。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_pin.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;同时接收到亚马逊电话验证，输入您浏览器页面中的PIN码，信息验证完成。 转到第三步，点击&lt;strong&gt;Continue&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;转到完成启用服务确认页面，这个页面展示不同机房不同服务的收费情况，并非配置页 面，直接&lt;strong&gt;Complete Sign Up&lt;/strong&gt; &lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_subs.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;系统提示正在启用订阅，订阅后会发送邮件到你的邮箱。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_subs_activating.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;至此EC2服务已经开通。可以进入console跑instance啦！&lt;/p&gt;
&lt;h3&gt;启动实例&lt;/h3&gt;
&lt;p&gt;打开 &lt;a href=&quot;https://console.aws.amazon.com/ec2/home&quot;&gt;https://console.aws.amazon.com/ec2/home&lt;/a&gt; 进入 EC2 console： &lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_console_ec2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Amazon S3: S3存储服务，可不用&lt;/li&gt;
&lt;li&gt;Amazon EC2: 类似传统的VPS服务，可以在这里启动Instance，增加EBS硬盘&lt;/li&gt;
&lt;li&gt;Region: 四个可选区域，一般来讲国内连西海岸加州机房较快，如果对国内提供web服 务，也可以考虑新加坡机房，新加坡机房价钱要贵一些。&lt;/li&gt;
&lt;li&gt;Instances: 所有实例（VPS）&lt;/li&gt;
&lt;li&gt;AMIs: 所有AMIs，可以看成是不用安装的操作系统，选择一个启动即得到一个 Instance。&lt;/li&gt;
&lt;li&gt;Volumes：EBS硬盘，EC2默认不带存储，虽然可以通过存储在S3的AMI启动，但当你关 闭或重启Instance后，所有数据都会消失。而通过存储在EBS的AMI启动则不会有这个问题。 所有数据变更保存到EBS中。您也可以添加额外的EBS挂在到某个Instance。&lt;/li&gt;
&lt;li&gt;Snapshots: 增量备份的系统快照。&lt;/li&gt;
&lt;li&gt;Elastic IP: EC2的Instance是变化的，如果你需要固定的IP，可以在这里设置，不过 需要注意，如果你分配了固定IP但是没有挂载到任何Instance上，你会被Amazon惩罚性收 费。&lt;/li&gt;
&lt;li&gt;Launch Instance: 点击启动新的Instance实例。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;点击 &lt;strong&gt;Launch Instance&lt;/strong&gt;， 打开实例向导窗口： &lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_ec2_instance_wiz1.png&quot; alt=&quot;&quot; /&gt; 这里我们用的是默认的第一个 AMI, &lt;strong&gt;Basic 32-bit Amazon Linux AMI 1.0&lt;/strong&gt;，大致解释一下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Amazon Linux是Amazon基于fedora为EC2定制的AMI，默认禁止root ssh密码方式登陆， 去除不需要的服务等，默认配置更加安全。 安全。&lt;/li&gt;
&lt;li&gt;自带 Amazon 工具包。&lt;/li&gt;
&lt;li&gt;Amazon每个Region都为Amazon Linux提供了软件仓库，更新软件不造成带宽费用。&lt;/li&gt;
&lt;li&gt;micro instance更适合跑32-bit linux。&lt;/li&gt;
&lt;li&gt;EBS boot，默认配合10GB的EBS。&lt;/li&gt;
&lt;li&gt;使用此instance没有额外费用。&lt;/li&gt;
&lt;li&gt;选择Windows instance，需按使用支付Windows授权费用。&lt;/li&gt;
&lt;li&gt;这里没有选择ubuntu的原因是因为我发现Ubuntu的AMI默认是15GB的EBS，而free tier 只提供了10GB的EBS硬盘。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;点击&lt;strong&gt;Select&lt;/strong&gt;，进入向导第二步：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_ec2_instance_wiz2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;实例数，默认为1，free tiers包含每月750小时的micro instance，如果不间断运行 的话，正好够跑一个instance。&lt;/li&gt;
&lt;li&gt;可用区域，这里用了默认的，无特别喜好。&lt;/li&gt;
&lt;li&gt;实例类型，必须选择Micro，除非你不准备使用免费的micro instance。&lt;/li&gt;
&lt;li&gt;启动实例，对应的另外一个选项是&quot;Request Spot Instances&quot;，类似竞价方 式在空闲的机器上跑Instance，这个用默认的。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;点击&lt;strong&gt;Continue&lt;/strong&gt;转到高级实例选项设定，这里全部默认。&lt;/p&gt;
&lt;p&gt;点击&lt;strong&gt;Continue&lt;/strong&gt;转到Tag设定页面，可以不设定直接跳过。&lt;/p&gt;
&lt;p&gt;点击&lt;strong&gt;Continue&lt;/strong&gt;进入&quot;Create Key Pair&quot;：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_ec2_instance_wiz3.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;指定一个密钥名称，如: fookey&lt;/li&gt;
&lt;li&gt;点击生成并下载密钥，&lt;strong&gt;这个密钥需要妥善保存，有了这个密钥，可以随时打 开（登陆）您跑在amazon aws上的机器&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;点击&lt;strong&gt;Continue&lt;/strong&gt;进入&quot;CONFIGURE FIREWARE&quot;： &lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_ec2_instance_wiz4.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;配置防火墙页面，这个设置安全组别为&quot;Web&quot;, 并添加了&quot;http&quot;, &quot;https&quot;，允许此台服务 器提供web服务。&lt;/p&gt;
&lt;p&gt;点击&lt;strong&gt;Continue&lt;/strong&gt;进入&quot;Review&quot;：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_ec2_instance_wiz5.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;注意一下，Instance Type为 &lt;strong&gt;Micro (t1.micro)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;点击&quot;Launch&quot;启动Instance。基于EBS的AMI启动大约需要1分钟。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_ec2_instance_wiz6.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;点击&lt;strong&gt;View your instances on the Instances page&lt;/strong&gt;察看Instance状态。&lt;/p&gt;
&lt;p&gt;您应该已经看到有一个 t1.micro status为&lt;strong&gt;Running&lt;/strong&gt;，至此您的micro intance已经启动，意味这您有一台可以ssh登陆的linux服务器啦。&lt;/p&gt;
&lt;h2&gt;用它来做什么&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;用来做web服务器，跑php, python, ruby网站&lt;/li&gt;
&lt;li&gt;用来跑SSH proxy, VPN&lt;/li&gt;
&lt;li&gt;更多...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SSH proxy在Linux下很简单，一条命令即可：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;br /&gt;$mv ~/Downloads/fookey.perm ~/.ssh/&lt;br /&gt;$chmod 400 ~/.ssh/fookey.perm&lt;br /&gt;$ssh -i ~/.ssh/ec2.pem ec2-user@YOUR_AMAZON_PUBLIC_DNS -f -N -D 10003&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;系统只允许通过key密钥登陆&lt;/li&gt;
&lt;li&gt;我们安装的AMI，默认登陆用户为 ec2-user&lt;/li&gt;
&lt;li&gt;用你的Public DNS代替 YOUR_AMAZON_PUBLIC_DNS&lt;/li&gt;
&lt;li&gt;跑了一个ssh forward监听本地10003端口&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Public DNS可以在Instances详细信息中找到，&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://yinhm.appspot.com/static/ec2/aws_ec2_public_dns.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Windows用户&lt;/h3&gt;
&lt;p&gt;Windows默认没有ssh客户端，需要下载putty。putty默认不支持Amazon ec2的key，需要做 转换，具体过程请&lt;a href=&quot;http://docs.amazonwebservices.com/AWSEC2/2010-08-31/GettingStartedGuide/index.html?ConnectToInstanceLinux.html#d0e512&quot;&gt;参考官方文档&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;做tunnel的话还需要在putty中设定tunnel选项，如端口，动态，自动等。具体还请大家自 行测试。或者看这里： &lt;a href=&quot;http://digitalpbk.blogspot.com/2009/05/ssh-proxy-windows-linux-orkut-bypass.html&quot;&gt;SSH Tunneling Proxy using Putty on Windows and Linux&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;进一步学习Linux&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一本linux书籍&lt;/li&gt;
&lt;li&gt;看看 fedora文档：http://fedoraproject.org/&lt;/li&gt;
&lt;li&gt;去国内的社区寻求帮助，如linuxsir&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>一个使用Kindle 3阅读Google Reader的好方法</title>
   <link href="http://blog.xuyuan.me/2010/10/30/kindle_gr.html"/>
   <updated>2010-10-30T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/10/30/kindle_gr</id>
   <content type="html">&lt;p&gt;自从买了Kindle之后就习惯在上下班的路上用它免费的3G网络看看Google Reader。之前一直访问的是&lt;a href=&quot;http://www.google.com/reader/i/&quot; target=&quot;_blank&quot;&gt;iPhone版的Google Reader&lt;/a&gt;, 这个界面在iPhone/iPod上十分好用，但在Kindle的浏览器上的用户体验却不是很好。原因在于Kindle不是触摸屏幕，操作完全靠移动鼠标箭头，而Kindle的五向按钮在网页上移动起来不太方便，会有明显的迟滞感，操作起来比较麻烦，此外有些文章字体偏小看起来也很吃力。&lt;/p&gt;
&lt;p&gt;最近意外发现普通网页版的Google Reader界面在Kindle上其实更容易使用，主要是利用了Google Reader本身的全屏浏览，键盘快捷键和Kindle的网页放大功能。具体方法如下：&lt;/p&gt;
&lt;p&gt;1. 通过Kindle浏览器访问&lt;a href=&quot;https://www.google.com/reader/&quot; target=&quot;_blank&quot;&gt;https://www.google.com/reader/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. 按 f&amp;nbsp;键进入全屏模式：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/kindle%20001.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;3. 这时可以按 j 键来阅读条目，可是字体有一些偏小：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/kindle%20002.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;4. 在Kindle中调整网页比例，比如说200%：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/kindle%20003.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;5. 现在的字体和排版就十分适合阅读了：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/kindle%20004.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;6. 这种方式有一个很显著的优点，就是可以利用Google Reader的快捷键功能而避免了鼠标操作，比如按 j 直接访问下一个条目，k 访问上一个条目：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/kindle%20005.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在Kindle中还可以方便地使用其他的快捷键功能，比较常用的一些Google Reader快捷键如下：&lt;/p&gt;
&lt;p&gt;空格：	下一个条目或页面&lt;br /&gt; &amp;lt;Shift&amp;gt;&amp;nbsp;+ 空格：	上一个条目或页面&lt;br /&gt; 依次键入g 和 a：	转到所有条目&lt;br /&gt; 依次键入g 和 s：	转到加星标条目&lt;br /&gt; 依次键入g 和 &amp;lt;Shift&amp;gt; + s：	转到共享条目&lt;br /&gt; 依次键入g 和 &amp;lt;Shift&amp;gt; + f：	转至朋友的共享条目&lt;br /&gt; 依次按 g 和 p：	转到热门条目&lt;br /&gt; s：	为条目加注星标&lt;br /&gt; l：	喜欢条目&lt;br /&gt;&amp;lt;Shift&amp;gt;&amp;nbsp;+ s：	共享条目&lt;/p&gt;
&lt;p&gt;此外，还可以通过在Kindle的浏览器中禁止加载图片来提高页面加载速度和刷新效率，毕竟Kindle的黑白电子墨水屏幕本身就不是很适合阅览图片，还是看一些纯文字的新闻比较好。&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Amazon推出免费EC2/S3服务</title>
   <link href="http://blog.xuyuan.me/2010/10/26/amazon_free_aws.html"/>
   <updated>2010-10-26T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/10/26/amazon_free_aws</id>
   <content type="html">&lt;p&gt;从2010年11月1号起，Amazon针对新的AWS (Amazon Web Services)用户提供一年的免费使用，产品包括EC2/S3等。具体参数如下（每月）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;750小时(也就是比24*31还多一点)的EC2 Linux Micro Instance (613MB内存, 32位/64位系统)&lt;/li&gt;
&lt;li&gt;750小时的Elastic Load Balancer, 15GB数据处理&lt;/li&gt;
&lt;li&gt;10GB Elastic Block Storage存储, 100万次I/O, 1GB snapshot存储, 1万次snapshot Get请求, 1千次snapshot Put请求&lt;/li&gt;
&lt;li&gt;5GB S3存储空间, 2万次Get请求, 2千次Put请求&lt;/li&gt;
&lt;li&gt;30GB互联网数据传输&lt;/li&gt;
&lt;li&gt;25主机小时的SimpleDB和1GB存储&lt;/li&gt;
&lt;li&gt;10万次的Simple Queue Service请求&lt;/li&gt;
&lt;li&gt;10万次的Simple Notification Service请求, 10万次HTTP通知, 以及1千次电子邮件通知&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;看上去挺不错的免费套餐，可以借这个机会尝试一下Amazon的云计算。具体细节见&lt;a href=&quot;http://aws.amazon.com/free/&quot; target=&quot;_blank&quot;&gt;http://aws.amazon.com/free/&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>旧金山，硅谷和其他</title>
   <link href="http://blog.xuyuan.me/2010/10/08/California.html"/>
   <updated>2010-10-08T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/10/08/California</id>
   <content type="html">&lt;p&gt;加州海滩：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20004.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;旧金山街头：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20482.JPG&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20484.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;供游人观光游览的缆车，需要排很长的队：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20374.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;渔人码头：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20400.JPG&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20411.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;海狮在码头晒着太阳温暖的午睡：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20431.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;金门大桥：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20263.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;左手边是金门大桥，右边是&lt;a href=&quot;http://movie.douban.com/subject/1292728/&quot; target=&quot;_blank&quot;&gt;电影中&lt;/a&gt;那个著名的恶魔岛(Alcatraz Island)：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20426.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;九曲花街，号称世界上最弯曲的路：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20452.JPG&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20448.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Napa Valley的葡萄酒庄园：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20103.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Carmel海边度假小镇：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20047.JPG&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20012.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Carmel Mission修道院, 修建于1770年：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20032.JPG&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20038.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;斯坦福大学：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20223.JPG&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20218.JPG&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20185.JPG&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20151.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;硅谷，Palo Alto：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20370.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Oracle总部大楼：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20077.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;惠普当年创业的车库，硅谷的诞生地：&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/201009_CA/California%20254.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>一个可以用来面试的问题：用SQL计算指数的移动平均线(日均线)</title>
   <link href="http://blog.xuyuan.me/2010/09/29/ma_sql.html"/>
   <updated>2010-09-29T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/09/29/ma_sql</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;移动平均线(Moving Average)&lt;/strong&gt; 百度百科定义：将某一时间段的收盘股价或收盘指数相加的总和，除以时间周期，即得到这一时间的平均线，如５日移动平均线，就是将近５日的收盘价相加除以5，得到的就是第一个5日平均线，再将第一个5日平均线乘以5减去第一日的收盘价加上第6日的收盘价，其总和除以5得到的就是第二个5日平均线，将计算得到的平均数画在坐标图上连成线，即是5日平均线。其他移动平均线的计算方法以此类推。&lt;/p&gt;
&lt;p&gt;A. 假设有一张Oracle数据库表存放历史指数信息：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;file:///C:/TEMP/moz-screenshot-2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;pre class=&quot;brush: sql;fontsize: 100; first-line: 1; &quot;&gt;CREATE TABLE TRADE
(
  CODE      VARCHAR2(20) not null,
  TRADE_DT  DATE not null,
  VALUE     NUMBER
);&lt;/pre&gt;
&lt;p&gt;B. 表中数据如下：&lt;/p&gt;
&lt;pre class=&quot;brush: sql;fontsize: 100; first-line: 1; &quot;&gt;SELECT * FROM TRADE;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/trade1.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;问题1：用SQL计算每个指数的N日均线&lt;/p&gt;
&lt;p&gt;问题2：用SQL计算每个指数的N日均线值在当日的排名&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQL Query (Oracle):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;brush: sql;fontsize: 100; first-line: 1; &quot;&gt;SELECT trade_dt,
       code,
       value,
       AVG_20D,
       rank() over(PARTITION BY trade_dt ORDER BY AVG_20D desc) rank
  FROM (SELECT trade_dt,
               code,
               value,
               round(AVG(value) OVER(PARTITION BY code ORDER BY trade_dt asc ROWS 20 PRECEDING),4) AVG_20D
          FROM TRADE)
 ORDER BY trade_dt asc, rank asc;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/trade2.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Kindle 3看PDF技术书籍</title>
   <link href="http://blog.xuyuan.me/2010/09/26/kindle_pdf.html"/>
   <updated>2010-09-26T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/09/26/kindle_pdf</id>
   <content type="html">&lt;p&gt;一直想着用Kindle来看技术方面的PDF电子书，尝试了很多方法，包括用Acrobat PDF Professional手动裁白边，重新排版等等。但无奈技术书籍的排版很难搞，而且6寸的屏幕看这类书还是太小，即使横过来效果也不是很好。多看的系统应该可以做PDF智能重排，但估计书里的代码之类排出来也不像样子。&lt;/p&gt;
&lt;p&gt;所以，最后只好采用最原始也是最适合阅读的方式：A4纸打印。。&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>最新Google Docs无法访问解决方法</title>
   <link href="http://blog.xuyuan.me/2010/09/26/google_docs.html"/>
   <updated>2010-09-26T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/09/26/google_docs</id>
   <content type="html">&lt;p&gt;转自&lt;a href=&quot;http://www.80ht.cn/wp-trackback.php?p=1680&quot;&gt;http://www.80ht.cn/wp-trackback.php?p=1680&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;编辑HOSTS文件，&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;color: #0000ff; padding: 0px; margin: 0px;&quot;&gt;C:\Windows\system32\drivers\etc\hosts&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding: 0px;&quot;&gt;在文件结尾加上&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;color: #0000ff; padding: 0px; margin: 0px;&quot;&gt;72.14.235.100 docs.google.com&lt;br style=&quot;padding: 0px; margin: 0px;&quot; /&gt;66.102.7.100&amp;nbsp;&amp;nbsp; spreadsheets.google.com&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding: 0px;&quot;&gt;保存退出，&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding: 0px;&quot;&gt;这时再打开一个浏览器，你就可以正常访问Google Docs服务了。&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding: 0px;&quot;&gt;熟悉的谷歌文档界面 又回来了。&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding: 0px;&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-1681&quot; style=&quot;padding: 0px; margin: 0px; border: initial none initial;&quot; title=&quot;熟悉的谷歌文档界面&quot; src=&quot;http://img.xuyuan.me/photos/blog/google_docs.jpg&quot; alt=&quot;&quot; width=&quot;536&quot; height=&quot;276&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Kindle 3 "Web Browser is unable to display this web page" 解决方法</title>
   <link href="http://blog.xuyuan.me/2010/09/03/kindle_browser_issue.html"/>
   <updated>2010-09-03T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/09/03/kindle_browser_issue</id>
   <content type="html">&lt;p&gt;用Kindle 3上网时不知什么原因导致了&quot;Web Browser is unable to display this web page&quot;，然后就什么网页都打不开了：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/kindle_browser_issue.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;开始以为是无线信号的问题，把WiFi和3G都试了一下，没有效果。然后把浏览器的cache清空，还是不行。我想那重启一遍总可以了吧，长按开机按钮重启，结果居然问题照旧。&lt;/p&gt;
&lt;p&gt;网上查了下，原来需要通过Menu键重启才行，方法如下：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 按&quot;Menu&quot;键出现以下菜单：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/amazon-kindle-reboot-1.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 进入&quot;Settings&quot;选项：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/amazon-kindle-reboot-2.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. 这个里面是看不见重启选项的，需要再次按&quot;Menu&quot;键：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/amazon-kindle-reboot-3.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. 这时有了&quot;Restart&quot;选项，按下选择重启，重新进入浏览器，可以发现问题解决了&lt;/p&gt;
&lt;p&gt;看来Amazon还需要把Kindle 3的浏览器做得更稳定些啊～&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>[Google Docs电子书][6寸PDF] 黄易全集典藏版</title>
   <link href="http://blog.xuyuan.me/2010/08/29/pdf_huangyi.html"/>
   <updated>2010-08-29T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/08/29/pdf_huangyi</id>
   <content type="html">&lt;p&gt;目录：&lt;/p&gt;
&lt;p&gt;寻秦记(修订珍藏版)\寻秦记·第一卷.pdf&lt;br /&gt;
寻秦记(修订珍藏版)\寻秦记·第二卷.pdf&lt;br /&gt;
寻秦记(修订珍藏版)\寻秦记·第三卷.pdf&lt;br /&gt;
寻秦记(修订珍藏版)\寻秦记·第四卷.pdf&lt;br /&gt;
寻秦记(修订珍藏版)\寻秦记·第五卷.pdf&lt;br /&gt;
寻秦记(修订珍藏版)\寻秦记·第六卷.pdf&lt;/p&gt;
&lt;p&gt;凌渡宇系列\凌渡宇系列·卷一.pdf&lt;br /&gt;
凌渡宇系列\凌渡宇系列·卷三.pdf&lt;br /&gt;
凌渡宇系列\凌渡宇系列·卷二.pdf&lt;br /&gt;
凌渡宇系列\凌渡宇系列·卷四.pdf&lt;/p&gt;
&lt;p&gt;封神记\封神记·一.pdf&lt;br /&gt;
封神记\封神记·三.pdf&lt;br /&gt;
封神记\封神记·二.pdf&lt;/p&gt;
&lt;p&gt;大唐双龙传.pdf&lt;br /&gt;
云梦城之谜.pdf&lt;br /&gt;
大剑师传奇.pdf&lt;br /&gt;
寻秦记.pdf&lt;br /&gt;
时空浪族.pdf&lt;br /&gt;
星际浪子.pdf&lt;br /&gt;
破碎虚空.pdf&lt;br /&gt;
荊楚争雄记.pdf&lt;br /&gt;
覆雨翻云.pdf&lt;br /&gt;
超级战士.pdf&lt;br /&gt;
边荒传说.pdf&lt;br /&gt;
黄易短篇作品.pdf&lt;br /&gt;
黄易评论.pdf&lt;/p&gt;
&lt;p&gt;需要的话请留下Email地址 (Google Docs可能需要翻墙访问)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>使用Gmail拨打中国电话，通话双方均免费的方法</title>
   <link href="http://blog.xuyuan.me/2010/08/29/free_gmail_call.html"/>
   <updated>2010-08-29T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/08/29/free_gmail_call</id>
   <content type="html">&lt;p&gt;&lt;span style=&quot;font-family: arial, sans-serif; border-collapse: collapse; font-size: 13px;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;我们知道使用 Gmail 给美国和加拿大拨打电话是完全免费的，现在 Google 则再一次震撼到了我们！只要使用 Gmail 拨打国内电话，通话双方均全部免费！&lt;/p&gt;
&lt;p&gt;操作的步骤如下：&lt;/p&gt;
&lt;p&gt;１、确保登录 Gmail 后可以看到在 Chat 列表中看到 &amp;ldquo;Call phone&amp;rdquo;按钮。这有2个方法：&lt;/p&gt;
&lt;p&gt;其一、使用美国或加拿大 IP 地址登录 Gmail 肯定能看到该按钮；&lt;br /&gt;其二、把 Gmail 语言设置成 US English ，也是有可能使用到呼叫功能的。&lt;/p&gt;
&lt;p&gt;2、安装&amp;nbsp;&lt;a style=&quot;color: #2244bb;&quot; href=&quot;http://www.google.com/chat/video&quot; target=&quot;_blank&quot;&gt;Gmail voice and video chat 浏览器插件&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;3、点击&amp;rdquo;Chat&amp;rdquo;列表中的&amp;rdquo;Call phone&amp;rdquo;按钮，拨打你自己的 Google Voice 手机号，如：(111) 222-333&lt;/p&gt;
&lt;p&gt;4、听到 Google Voice 语音提示：&amp;ldquo;您当前没有新的消息，按&amp;ldquo;2&amp;rdquo;健拨打电话，按&amp;ldquo;4&amp;rdquo;健更改设置&amp;rdquo;。我们按&amp;ldquo;2&amp;rdquo;健。&lt;/p&gt;
&lt;p&gt;5、再次听到 Google Voice 语音提示：&amp;ldquo;请按键输入您要拨打的电话号码，按&amp;ldquo;#&amp;rdquo;号健确认。如果是国际长途，则请先按键&amp;ldquo;011&amp;rdquo;，再输入国家号，最后输入电话号码&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;举2个例子：&lt;/p&gt;
&lt;p&gt;如果我要拨打的中国移动手机号为：13866667777，则我应按键输入：0118613866667777#&lt;br /&gt;如果我要拨打的国内固定电话号码为：021-77778888，则我应按键输入：011862177778888#（注：21为上海区号，大家不要输入021，这是错误的。）&lt;/p&gt;
&lt;p&gt;6、再次听到 Google Vocie 语音提示：&amp;ldquo;这是一个免费电话！&amp;rdquo;，接下来电话就直接接通了呢。&lt;/p&gt;
&lt;p&gt;这么大的好事，大家赶紧自己动手试试吧！&lt;/p&gt;
&lt;p&gt;Via&amp;nbsp;&lt;a style=&quot;color: #2244bb;&quot; href=&quot;http://dwowb.net/gtalk-plus-google-voice-trick&quot; target=&quot;_blank&quot;&gt;dwowb&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;本站文章除注明转载外，均为本站原创编译&lt;br /&gt;转载请注明：文章转载自：&lt;strong&gt;谷奥&amp;mdash;&amp;mdash;探寻谷歌的奥秘&lt;/strong&gt;&amp;nbsp;[&lt;a style=&quot;color: #2244bb;&quot; href=&quot;http://www.google.org.cn/&quot; target=&quot;_blank&quot;&gt;http://www.google.org.cn&lt;/a&gt;]&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>面试70技巧：全部掌握你就是一个超级面霸！</title>
   <link href="http://blog.xuyuan.me/2010/08/13/interview_skill.html"/>
   <updated>2010-08-13T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/08/13/interview_skill</id>
   <content type="html">&lt;p&gt;1、请你自我介绍一下你自己&lt;/p&gt;
&lt;p&gt;回答提示：一般人回答这个问题过于平常，只说姓名、年龄、爱好、工作经验，这些在简历上都有，其实，企业最希望知道的是求职者能否胜任工作，包括：最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事，主要的成就等，这些都可以和学习无关，也可以和学习有关，但要突出积极的个性和做事的能力，说得合情合理企业才会相信。企业很重视一个人的礼貌，求职者要尊重考官，在回答每个问题之后都说一句&amp;ldquo;谢谢&amp;rdquo;。企业喜欢有礼貌的求职者。&lt;/p&gt;
&lt;p&gt;2、你觉得你个性上最大的优点是什么?&lt;/p&gt;
&lt;p&gt;回答提示：沉着冷静、条理清楚、立场坚定、顽强向上。&lt;/p&gt;
&lt;p&gt;乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在北大青鸟经过一到两年的培训及项目实战，加上实习工作，使我适合这份工作。我相信我能成功。&lt;/p&gt;
&lt;p&gt;3、说说你最大的缺点?&lt;/p&gt;
&lt;p&gt;回答提示：这个问题企业问的概率很大，通常不希望听到直接回答的缺点是什么等，如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低，企业肯定不会录用你。绝对不要自作聪明地回答&amp;ldquo;我最大的缺点是过于追求完美&amp;rdquo;，有的人以为这样回答会显得自己比较出色，但事实上，他已经岌芨可危了。企业喜欢求职者从自己的优点说起，中间加一些小缺点，最后再把问题转回到优点上，突出优点的部分。企业喜欢聪明的求职者。&lt;/p&gt;
&lt;p&gt;4、你对加班的看法?&lt;/p&gt;
&lt;p&gt;回答提示：实际上好多公司问这个问题，并不证明一定要加班。 只是想测试你是否愿意为公司奉献。&lt;/p&gt;
&lt;p&gt;回答样本：如果是工作需要我会义不容辞加班。我现在单身，没有任何家庭负担，可以全身心的投入工作。但同时，我也会提高工作效率，减少不必要的加班&lt;/p&gt;
&lt;p&gt;5、你对薪资的要求?&lt;/p&gt;
&lt;p&gt;回 答提示：如果你对薪酬的要求太低，那显然贬低自己的能力;如果你对薪酬的要求太高，那又会显得你分量过重，公司受用不起。一些雇主通常都事先对求聘的职位定下开支预算，因而他们第一次提出的价钱往往是他们所能给予的最高价钱。他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。&lt;/p&gt;
&lt;p&gt;回答样本一：&amp;ldquo;我对工资没有硬性要求。我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会，所以只要条件公平，我则不会计较太多&lt;/p&gt;
&lt;p&gt;回答样本二：我受过系统的软件编程的训练，不需要进行大量的培训。而且我本人也对编程特别感兴趣。因此，我希望公司能根据我的情况和市场标准的水平，给我合理的薪水。&lt;/p&gt;
&lt;p&gt;回答样本三：如果你必须自己说出具体数目，请不要说一个宽泛的范围，那样你将只能得到最低限度的数字。最好给出一个具体的数字，这样表明你已经对当今的人才市场作了调查，知道像自己这样学历的雇员有什么样的价值。&lt;/p&gt;
&lt;p&gt;6、在五年的时间内，你的职业规划?&lt;/p&gt;
&lt;p&gt;回答提示：这是每一个应聘者都不希望被问到的问题，但是几乎每个人都会被问到。比较多的答案是&amp;ldquo;管理者&amp;rdquo;。但是近几年来，许多公司都已经建立了专门的技术途径。这些工作地位往往被称作&amp;ldquo;顾问&amp;rdquo;、&amp;ldquo;参议技师&amp;rdquo;或&amp;ldquo;高级软件工程师&amp;rdquo;等等。当然，说出其他一些你感兴趣的职位也是可以的，比如产品销售部经理，生产部经理等一些与你的专业有相关背景的工作。要知道，考官总是喜欢有进取心的应聘者，此时如果说&amp;ldquo;不知道&amp;rdquo;，或许就会使你丧失一个好机会。最普通的回答应该是&amp;ldquo;我准备在技术领域有所作为&amp;rdquo;或&amp;ldquo;我希望能按照公司的管理思路发展&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;7、你朋友对你的评价?&lt;/p&gt;
&lt;p&gt;回答提示： 想从侧面了解一下你的性格及与人相处的问题。&lt;/p&gt;
&lt;p&gt;回答样本：&amp;ldquo;我的朋友都说我是一个可以信赖的人。因为，我一旦答应别人的事情，就一定会做到。如果我做不到，我就不会轻易许诺。&lt;/p&gt;
&lt;p&gt;回答样本：&amp;rdquo;我觉的我是一个比较随和的人，与不同的人都可以友好相处。在我与人相处时，我总是能站在别人的角度考虑问题&amp;ldquo;&lt;/p&gt;
&lt;p&gt;8、你还有什么问题要问吗?&lt;/p&gt;
&lt;p&gt;回答提示：企业的这个问题看上去可有可无，其实很关键，企业不喜欢说&amp;ldquo;没有问题&amp;rdquo;的人，因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题，如果有人这样问：贵公司对新入公司的员工有没有什么培训项目，我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎，因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。&lt;/p&gt;
&lt;p&gt;9、如果通过这次面试我们单位录用了你，但工作一段时间却发现你根本不适合这个职位，你怎么办?&lt;/p&gt;
&lt;p&gt;回答提示：一段时间发现工作不适合我，有两种情况：&lt;/p&gt;
&lt;p&gt;1、如果你确实热爱这个职业，那你就要不断学习，虚心向领导和同事学习业务知识和处事经验，了解这个职业的精神内涵和职业要求，力争减少差距;&lt;/p&gt;
&lt;p&gt;2、你觉得这个职业可有可无，那还是趁早换个职业，去发现适合你的，你热爱的职业，那样你的发展前途也会大点，对单位和个人都有好处。&lt;/p&gt;
&lt;p&gt;10、在完成某项工作时，你认为领导要求的方式不是最好的，自己还有更好的方法，你应该怎么做?&lt;/p&gt;
&lt;p&gt;回答提示：①.原则上我会尊重和服从领导的工作安排;同时私底下找机会以请教的口吻，婉转地表达自己的想法，看看领导是否能改变想法;&lt;/p&gt;
&lt;p&gt;②如果领导没有采纳我的建议，我也同样会按领导的要求认真地去完成这项工作;&lt;/p&gt;
&lt;p&gt;③.还有一种情况，假如领导要求的方式违背原则，我会坚决提出反对意见;如领导仍固执己见，我会毫不犹豫地再向上级领导反映。&lt;/p&gt;
&lt;p&gt;11、如果你的工作出现失误，给本公司造成经济损失，你认为该怎么办?&lt;/p&gt;
&lt;p&gt;回答提示：&lt;/p&gt;
&lt;p&gt;①我本意是为公司努力工作，如果造成经济损失，我认为首要的问题是想方设法去弥补或挽回经济损失。如果我无能力负责，希望单位帮助解决;&lt;/p&gt;
&lt;p&gt;②是责任问题。分清责任，各负其责，如果是我的责任，我甘愿受罚;如果是一个我负责的团队中别人的失误，也不能幸灾乐祸，作为一个团队，需要互相提携共同完成工作，安慰同事并且帮助同事查找原因总结经验。&lt;/p&gt;
&lt;p&gt;③总结经验教训，一个人的一生不可能不犯错误，重要的是能从自己的或者是别人的错误中吸取经验教训，并在今后的工作中避免发生同类的错误。检讨自己的工作方法、分析问题的深度和力度是否不够，以致出现了本可以避免的错误。&lt;/p&gt;
&lt;p&gt;12、如果你在这次考试中没有被录用，你怎么打算?&lt;/p&gt;
&lt;p&gt;回答提示：现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败.往往成功的背后有许多的困难和挫折,如果这次失败了也仅仅是一次而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败.&lt;/p&gt;
&lt;p&gt;第一、要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行.能够超越自我.&lt;/p&gt;
&lt;p&gt;第二、善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人.&lt;/p&gt;
&lt;p&gt;第三、走出阴影,要克服这一次失败带给自己的心理压力,时刻牢记自己弱点,防患于未然,加强学习,提高自身素质.&lt;/p&gt;
&lt;p&gt;第四、认真工作,回到原单位岗位上后,要实实在在、踏踏实实地工作,三十六行,行行出状元,争取在本岗位上做出一定的成绩.&lt;/p&gt;
&lt;p&gt;第五、再接再厉,成为软件工程师或网络工程师一直是我的梦想,以后如果有机会我仍然后再次参加竞争.&lt;/p&gt;
&lt;p&gt;13、如果你做的一项工作受到上级领导的表扬，但你主管领导却说是他做的，你该怎样?&lt;/p&gt;
&lt;p&gt;回答提示：我首先不会找那位上级领导说明这件事，我会主动找我的主管领导来沟通，因为沟通是解决人际关系的最好办法，但结果会有两种：1.我的主管领导认识到自己的错误，我想我会视具体情况决定是否原谅他;2.他更加变本加厉的来威胁我，那我会毫不犹豫地找我的上级领导反映此事，因为他这样做会造成负面影响，对今后的工作不利。&lt;/p&gt;
&lt;p&gt;14、谈谈你对跳槽的看法?&lt;/p&gt;
&lt;p&gt;回答提示：(1)正常的&quot;跳槽&quot;能促进人才合理流动，应该支持;&lt;/p&gt;
&lt;p&gt;(2)频繁的跳槽对单位和个人双方都不利，应该反对。&lt;/p&gt;
&lt;p&gt;15、工作中你难以和同事、上司相处，你该怎么办?&lt;/p&gt;
&lt;p&gt;回答提示：&lt;/p&gt;
&lt;p&gt;①我会服从领导的指挥，配合同事的工作。&lt;/p&gt;
&lt;p&gt;②我会从自身找原因，仔细分析是不是自己工作做得不好让领导不满意，同事看不惯。还要看看是不是为人处世方面做得不好。如果是这样的话 我会努力改正。&lt;/p&gt;
&lt;p&gt;③如果我找不到原因，我会找机会跟他们沟通，请他们指出我的不足。有问题就及时改正。&lt;/p&gt;
&lt;p&gt;④作为优秀的员工，应该时刻以大局为重，即使在一段时间内，领导和同事对我不理解，我也会做好本职工作，虚心向他们学习，我相信，他们会看见我在努力，总有一天会对我微笑的!&lt;/p&gt;
&lt;p&gt;16、假设你在某单位工作，成绩比较突出，得到领导的肯定。但同时你发现同事们越来越孤立你，你怎么看这个问题?你准备怎么办?&lt;/p&gt;
&lt;p&gt;回答提示：&lt;/p&gt;
&lt;p&gt;①成绩比较突出，得到领导的肯定是件好事情，以后更加努力&lt;/p&gt;
&lt;p&gt;②检讨一下自己是不是对工作的热心度超过同事间交往的热心了，加强同事间的交往及共同的兴趣爱好。&lt;/p&gt;
&lt;p&gt;③工作中，切勿伤害别人的自尊心&lt;/p&gt;
&lt;p&gt;④不再领导前拨弄是非&lt;/p&gt;
&lt;p&gt;⑤乐于助人对面&lt;/p&gt;
&lt;p&gt;17、你最近是否参加了培训课程?谈谈培训课程的内容。是公司资助还是自费参加?&lt;/p&gt;
&lt;p&gt;回答提示：是自费参加，就是北大青鸟的培训课程(可以多谈谈自己学的技术)。&lt;/p&gt;
&lt;p&gt;18、你对于我们公司了解多少?&lt;/p&gt;
&lt;p&gt;回答提示：在去公司面试前上网查一下该公司主营业务。如回答：贵公司有意改变策略，加强与国外大厂的OEM合作，自有品牌的部分则透过海外经销商。&lt;/p&gt;
&lt;p&gt;19、请说出你选择这份工作的动机?&lt;/p&gt;
&lt;p&gt;回答提示：这是想知道面试者对这份工作的热忱及理解度，并筛选因一时兴起而来应试的人，如果是无经验者，可以强调&amp;ldquo;就算职种不同，也希望有机会发挥之前的经验&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;20、你最擅长的技术方向是什么?&lt;/p&gt;
&lt;p&gt;回答提示：说和你要应聘的职位相关的课程，表现一下自己的热诚没有什么坏处。&lt;/p&gt;
&lt;p&gt;21、你能为我们公司带来什么呢?&lt;/p&gt;
&lt;p&gt;回答提示：&lt;/p&gt;
&lt;p&gt;①假如你可以的话，试着告诉他们你可以减低他们的费用&amp;mdash;&amp;mdash;&amp;ldquo;我已经接受过北大青鸟近两年专业的培训，立刻就可以上岗工作&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;② 企业很想知道未来的员工能为企业做什么，求职者应再次重复自己的优势，然后说：&amp;ldquo;就我的能力，我可以做一个优秀的员工在组织中发挥能力，给组织带来高效率和更多的收益&amp;rdquo;。企业喜欢求职者就申请的职位表明自己的能力，比如申请营销之类的职位，可以说：&amp;ldquo;我可以开发大量的新客户，同时，对老客户做更全面周到的服务，开发老客户的新需求和消费。&amp;rdquo;等等。&lt;/p&gt;
&lt;p&gt;22、最能概括你自己的三个词是什么?&lt;/p&gt;
&lt;p&gt;回答提示：&lt;/p&gt;
&lt;p&gt;我经常用的三个词是：适应能力强，有责任心和做事有始终，结合具体例子向主考官解释，&lt;/p&gt;
&lt;p&gt;23、你的业余爱好是什么?&lt;/p&gt;
&lt;p&gt;回答提示：找一些富于团体合作精神的，这里有一个真实的故事：有人被否决掉，因为他的爱好是深海潜水。主考官说：因为这是一项单人活动，我不敢肯定他能否适应团体工作。&lt;/p&gt;
&lt;p&gt;24、作为被面试者给我打一下分&lt;/p&gt;
&lt;p&gt;回答提示：试着列出四个优点和一个非常非常非常小的缺点，(可以抱怨一下设施，没有明确责任人的缺点是不会有人介意的)。&lt;/p&gt;
&lt;p&gt;25、你怎么理解你应聘的职位?&lt;/p&gt;
&lt;p&gt;回答提示：把岗位职责和任务及工作态度阐述一下&lt;/p&gt;
&lt;p&gt;26、喜欢这份工作的哪一点?&lt;/p&gt;
&lt;p&gt;回 答提示：相信其实大家心中一定都有答案了吧!每个人的价值观不同，自然评断的标准也会不同，但是，在回答面试官这个问题时可不能太直接就把自己心理的话说出来，尤其是薪资方面的问题，不过一些无伤大雅的回答是不错的考虑，如交通方便，工作性质及内容颇能符合自己的兴趣等等都是不错的答案，不过如果这时自己能仔细思考出这份工作的与众不同之处，相信在面试上会大大加分。&lt;/p&gt;
&lt;p&gt;27、为什么要离职?&lt;/p&gt;
&lt;p&gt;回答提示：&lt;/p&gt;
&lt;p&gt;①回答这个问题时一定要小心，就算在前一个工作受到再大的委屈，对公司有多少的怨言，都千万不要表现出来，尤其要避免对公司本身主管的批评，避免面试官的负面情绪及印象;建议此时最好的回答方式是将问题归咎在自己身上，例如觉得工作没有学习发展的空间，自己想在面试工作的相关产业中多加学习，或是前一份工作与自己的生涯规划不合等等，回答的答案最好是积极正面的。&lt;/p&gt;
&lt;p&gt;②我希望能获得一份更好的工作，如果机会来临，我会抓住;我觉得目前的工作，已经达到顶峰，即沒有升迁机会。&lt;/p&gt;
&lt;p&gt;28、说说你对行业、技术发展趋势的看法?&lt;/p&gt;
&lt;p&gt;回答提示：企业对这个问题很感兴趣，只有有备而来的求职者能够过关。求职者可以直接在网上查找对你所申请的行业部门的信息，只有深入了解才能产生独特的见解。企业认为最聪明的求职者是对所面试的公司预先了解很多，包括公司各个部门，发展情况，在面试回答问题的时候可以提到所了解的情况，企业欢迎进入企业的人是&amp;ldquo;知己&amp;rdquo;，而不是&amp;ldquo;盲人&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;29、对工作的期望与目标何在?&lt;/p&gt;
&lt;p&gt;回答提示：这是面试者用来评断求职者是否对自己有一定程度的期望、对这份工作是否了解的问题。对于工作有确实学习目标的人通常学习较快，对于新工作自然较容易进入状况，这时建议你，最好针对工作的性质找出一个确实的答案，如业务员的工作可以这样回答：&amp;ldquo;我的目标是能成为一个超级业务员，将公司的产品广泛的推销出去，达到最好的业绩成效;为了达到这个目标，我一定会努力学习，而我相信以我认真负责的态度，一定可以达到这个目标。&amp;rdquo;其他类的工作也可以比照这个方式来回答，只要在目标方面稍微修改一下就可以了。&lt;/p&gt;
&lt;p&gt;30、说说你的家庭。&lt;/p&gt;
&lt;p&gt;回答提示：企业面试时询问家庭问题不是非要知道求职者家庭的情况，探究隐私，企业不喜欢探究个人隐私，而是要了解家庭背景对求职者的塑造和影响。企业希望听到的重点也在于家庭对求职者的积极影响。企业最喜欢听到的是：我很爱我的家庭!我的家庭一向很和睦，虽然我的父亲和母亲都是普通人，但是从小，我就看到我父亲起早贪黑，每天工作特别勤劳，他的行动无形中培养了我认真负责的态度和勤劳的精神。我母亲为人善良，对人热情，特别乐于助人，所以在单位人缘很好，她的一言一行也一直在教导我做人的道理。企业相信，和睦的家庭关系对一个人的成长有潜移默化的影响。&lt;/p&gt;
&lt;p&gt;31、就你申请的这个职位，你认为你还欠缺什么?&lt;/p&gt;
&lt;p&gt;回答提示：企业喜欢问求职者弱点，但精明的求职者一般不直接回答。他们希望看到这样的求职者：继续重复自己的优势，然后说：&amp;ldquo;对于这个职位和我的能力来说，我相信自己是可以胜任的，只是缺乏经验，这个问题我想我可以进入公司以后以最短的时间来解决，我的学习能力很强，我相信可以很快融入公司的企业文化，进入工作状态。&amp;rdquo;企业喜欢能够巧妙地躲过难题的求职者。&lt;/p&gt;
&lt;p&gt;32、你欣赏哪种性格的人?&lt;/p&gt;
&lt;p&gt;回答提示：诚实、不死板而且容易相处的人、有&quot;实际行动&quot;的人。&lt;/p&gt;
&lt;p&gt;33、你通常如何处理別人的批评?&lt;/p&gt;
&lt;p&gt;回答提示：①沈默是金。不必说什么，否则情况更糟，不过我会接受建设性的批评;②我会等大家冷靜下来再讨论。&lt;/p&gt;
&lt;p&gt;34、你怎样对待自己的失敗?&lt;/p&gt;
&lt;p&gt;回答提示：我们大家生来都不是十全十美的，我相信我有第二个机会改正我的错误。&lt;/p&gt;
&lt;p&gt;35、什么会让你有成就感?&lt;/p&gt;
&lt;p&gt;回答提示：为贵公司竭力效劳;尽我所能，完成一个项目&lt;/p&gt;
&lt;p&gt;36、眼下你生活中最重要的是什么?&lt;/p&gt;
&lt;p&gt;回答提示：对我来说，能在这个领域找到工作是最重要的;望能在贵公司任职对我说最重要。&lt;/p&gt;
&lt;p&gt;37、你为什么愿意到我们公司来工作?&lt;/p&gt;
&lt;p&gt;回答提示：对于这个问题，你要格外小心，如果你已经对该单位作了研究，你可以回答一些详细的原因，像&amp;ldquo;公司本身的高技术开发环境很吸引我。&amp;rdquo;，&amp;ldquo;我同公司出生在同样的时代，我希望能够进入一家与我共同成长的公司。&amp;rdquo;&amp;ldquo;你们公司一直都稳定发展，在近几年来在市场上很有竞争力。&amp;rdquo;或者&amp;ldquo;我认为贵公司能够给我提供一个与众不同的发展道路。&amp;rdquo;这都显示出你已经做了一些调查，也说明你对自己的未来有了较为具体的远景规划。&lt;/p&gt;
&lt;p&gt;38、你和别人发生过争执吗?你是怎样解决的?&lt;/p&gt;
&lt;p&gt;回答提示：这是面试中最险恶的问题。其实是考官布下的一个陷阱。千万不要说任何人的过错。应知成功解决矛盾是一个协作团体中成员所必备的能力。假如你工作在一个服务行业，这个问题简直成了最重要的一个环节。你是否能获得这份工作，将取决于这个问题的回答。考官希望看到你是成熟且乐于奉献的。他们通过这个问题了解你的成熟度和处世能力。在没有外界干涉的情况下，通过妥协的方式来解决才是正确答案。&lt;/p&gt;
&lt;p&gt;39、问题：你做过的哪件事最令自己感到骄傲?&lt;/p&gt;
&lt;p&gt;回答提示：这是考官给你的一个机会，让你展示自己把握命运的能力。这会体现你潜在的领导能力以及你被提升的可能性。假如你应聘于一个服务性质的单位，你很可能会被邀请去午餐。记住：你的前途取决于你的知识、你的社交能力和综合表现。&lt;/p&gt;
&lt;p&gt;40、你新到一个部门,一天一个客户来找你解决问题,你努力想让他满意，可是始终达不到群众得满意,他投诉你们部门工作效率低,你这个时候怎么作?&lt;/p&gt;
&lt;p&gt;回 答提示：(1)首先，我会保持冷静。作为一名工作人员，在工作中遇到各种各样的问题是正常的，关键是如何认识它，积极应对，妥善处理。 (2)其次，我会反思一下客户不满意的原因。一是看是否是自己在解决问题上的确有考虑的不周到的地方，二是看是否是客户不太了解相关的服务规定而提出超出规定的要求，三是看是否是客户了解相关的规定，但是提出的要求不合理。 (3)再次，根据原因采取相对的对策。如果是自己确有不周到的地方，按照服务规定作出合理的安排，并向客户作出解释;如果是客户不太了解政策规定而造成的误解，我会向他作出进一步的解释，消除他的误会;如果是客户提出的要求不符合政策规定，我会明确地向他指出。 (4)再次，我会把整个事情的处理情况向领导作出说明，希望得到他的理解和支持。(5)我不会因为客户投诉了我而丧失工作的热情和积极性，而会一如既往地牢记为客户服务的宗旨，争取早日做一名领导信任、公司放心、客户满意的职员。&lt;/p&gt;
&lt;p&gt;41、对这项工作，你有哪些可预见的困难?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;回答提示：：①不宜直接说出具体的困难，否则可能令对方怀疑应聘者不行;②可以尝试迂回战术，说出应聘者对困难所持有的态度&amp;mdash;&amp;mdash;&amp;ldquo;工作中出现一些困难是正常的，也是难免的，但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备，任何困难都是可以克服。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;分析：一般问这个问题，面试者的希望就比较大了，因为已经在谈工作细节。但常规思路中的回答，又被面试官&amp;ldquo;骗&amp;rdquo;了。当面试官询问这个问题的时候，有两个目的。第一，看看应聘者是不是在行，说出的困难是不是在这个职位中一般都不可避免的问题。第二，是想看一下应聘者解决困难的手法对不对，及公司能否提供这样的资源。而不是想了解应聘者对困难的态度。&lt;/p&gt;
&lt;p&gt;42、如果我录用你，你将怎样开展工作?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;回答提示： ①如果应聘者对于应聘的职位缺乏足够的了解，最好不要直接说出自己开展工作的具体办法;②可以尝试采用迂回战术来回答，如&amp;ldquo;首先听取领导的指示和要求，然后就有关情况进行了解和熟悉，接下来制定一份近期的工作计划并报领导批准，最后根据计划开展工作。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;分析：这个问题的主要目的也是了解应聘者的工作能力和计划性、条理性，而且重点想要知道细节。如果向思路中所讲的迂回战术，面试官会认为回避问题，如果引导了几次仍然是回避的话。此人绝对不会录用了。&lt;/p&gt;
&lt;p&gt;43、&amp;ldquo;你希望与什么样的上级共事?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;回答提示：①通过应聘者对上级的&amp;ldquo;希望&amp;rdquo;可以判断出应聘者对自我要求的意识，这既上一个陷阱，又是一次机会;②最好回避对上级具体的希望，多谈对自己的要求;③如&amp;ldquo;做为刚步入社会的新人，我应该多要求自己尽快熟悉环境、适应环境，而不应该对环境提出什么要求，只要能发挥我的专长就可以了&lt;/p&gt;
&lt;p&gt;分析：这个问题比较好的回答是，希望我的上级能够在工作中对我多指导，对我工作中的错误能够立即指出。总之，从上级指导这个方面谈，不会有大的纰漏。&lt;/p&gt;
&lt;p&gt;44、在完成某项工作时，你认为领导要求的方式不是最好的，自己还有更好的方法，你应该怎么做?&lt;/p&gt;
&lt;p&gt;回答提示：&lt;/p&gt;
&lt;p&gt;①.原则上我会尊重和服从领导的工作安排;同时私底下找机会以请教的口吻，婉转地表达自己的想法，看看领导是否能改变想法;&lt;/p&gt;
&lt;p&gt;②如果领导没有采纳我的建议，我也同样会按领导的要求认真地去完成这项工作;&lt;/p&gt;
&lt;p&gt;③.还有一种情况，假如领导要求的方式违背原则，我会坚决提出反对意见;如领导仍固执己见，我会毫不犹豫地再向上级领导反映。&lt;/p&gt;
&lt;p&gt;45、与上级意见不一是，你将怎么办?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;回答提示：①一般可以这样回答&amp;ldquo;我会给上级以必要的解释和提醒，在这种情况下，我会服从上级的意见。&amp;rdquo;②如果面试你的是总经理，而你所应聘的职位另有一位经理，且这位经理当时不在场，可以这样回答：&amp;ldquo;对于非原则性问题，我会服从上级的意见，对于涉及公司利益的重大问题，我希望能向更高层领导反映。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;分析：这个问题的标准答案是思路1，如果用2的回答，必死无疑。你没有摸清楚改公司的内部情况，先想打小报告，这样的人没有人敢要。&lt;/p&gt;
&lt;p&gt;46、&amp;ldquo;你工作经验欠缺，如何能胜任这项工作?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;常规思路：①如果招聘单位对应届毕业生的应聘者提出这个问题，说明招聘公司并不真正在乎&amp;ldquo;经验&amp;rdquo;，关键看应聘者怎样回答;②对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业;③如&amp;ldquo;作为应届毕业生，在工作经验方面的确会有所欠缺，因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现，实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力，而且比较勤奋，所以在兼职中均能圆满完成各项工作，从中获取的经验也令我受益非浅。请贵公司放心，学校所学及兼职的工作经验使我一定能胜任这个职位。&amp;rdquo; 点评：这个问题思路中的答案尚可。突出自己的吃苦能力和适应性以及学习能力(不是学习成绩)为好。&lt;/p&gt;
&lt;p&gt;47、您在前一家公司的离职原因是什么?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;回答提示：①最重要的是：应聘者要使找招聘单位相信，应聘者在过往的单位的&amp;ldquo;离职原因&amp;rdquo;在此家招聘单位里不存在;②避免把&amp;ldquo;离职原因&amp;rdquo;说得太详细、太具体;③不能掺杂主观的负面感受，如&amp;ldquo;太辛苦&amp;rdquo;、&amp;ldquo;人际关系复杂&amp;rdquo;、&amp;ldquo;管理太混乱&amp;rdquo;、&amp;ldquo;公司不重视人才&amp;rdquo;、&amp;ldquo;公司排斥我们某某的员工&amp;rdquo;等;④但也不能躲闪、回避，如&amp;ldquo;想换换环境&amp;rdquo;、&amp;ldquo;个人原因&amp;rdquo;等;⑤不能涉及自己负面的人格特征，如不诚实、懒惰、缺乏责任感、不随和等;⑥尽量使解释的理由为应聘者个人形象添彩;⑦相关例子：如&amp;ldquo;我离职是因为这家公司倒闭;我在公司工作了三年多，有较深的感情;从去年始，由于市场形势突变，公司的局面急转直下;到眼下这一步我觉得很遗憾，但还要面对显示，重新寻找能发挥我能力的舞台。&amp;rdquo;同一个面试问题并非只有一个答案，而同一个答案并不是在任何面试场合都有效，关键在应聘者掌握了规律后，对面试的具体情况进行把握，有意识地揣摩面试官提出问题的心理背景，然后投其所好。&lt;/p&gt;
&lt;p&gt;分析：除非是薪资太低，或者是最初的工作，否则不要用薪资作为理由。&amp;ldquo;求发展&amp;rdquo;也被考官听得太多，离职理由要根据每个人的真实离职理由来设计，但是在回答时一定要表现得真诚。实在想不出来的时候，家在外地可以说是因为家中有事，须请假几个月，公司又不可能准假，所以辞职。这个答案一般面试官还能接受。&lt;/p&gt;
&lt;p&gt;48、&amp;ldquo;你工作经验欠缺，如何能胜任这项工作?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;回答提示：①如果招聘单位对应届毕业生的应聘者提出这个问题，说明招聘公司并不真正在乎&amp;ldquo;经验&amp;rdquo;，关键看应聘者怎样回答;②对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业;③如&amp;ldquo;作为应届毕业生，在工作经验方面的确会有所欠缺，因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现，实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力，而且比较勤奋，所以在兼职中均能圆满完成各项工作，从中获取的经验也令我受益非浅。请贵公司放心，学校所学及兼职的工作经验使我一定能胜任这个职位。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;分析：这个问题思路中的答案尚可。突出自己的吃苦能力和适应性以及学习能力(不是学习成绩)为好。&lt;/p&gt;
&lt;p&gt;49、为了做好你工作份外之事，你该怎样获得他人的支持和帮助?&lt;/p&gt;
&lt;p&gt;回答提示：每个公司都在不断变化发展的过程中;你当然希望你的员工也是这样。你希望得到那些希望并欢迎变化的人，因为这些人明白，为了公司的发展，变化是公司日常生活中重要组成部分。这样的员工往往很容易适应公司的变化，并会对变化做出积极的响应。此外，他们遇到矛盾和问题时，也能泰然处之。下面的问题能够考核应聘者这方面的能力。&lt;/p&gt;
&lt;p&gt;据说有人能从容避免正面冲突。请讲一下你在这方面的经验和技巧。&lt;/p&gt;
&lt;p&gt;有些时候，我们得和我们不喜欢的人在一起共事。说说你曾经克服了性格方面的冲突而取得预期工作效果的经历。&lt;/p&gt;
&lt;p&gt;50、如果你在这次面试中没有被录用，你怎么打算?&lt;/p&gt;
&lt;p&gt;回答提示：现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败.往往成功的背后有许多的困难和挫折,如果这次失败了也仅仅是一次而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败.&lt;/p&gt;
&lt;p&gt;第一、要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行.能够超越自我.&lt;/p&gt;
&lt;p&gt;第二、善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人.&lt;/p&gt;
&lt;p&gt;第三、走出阴影,要克服这一次失败带给自己的心理压力,时刻牢记自己弱点,防患于未然,加强学习,提高自身素质.&lt;/p&gt;
&lt;p&gt;第四、认真工作,回到原单位岗位上后,要实实在在、踏踏实实地工作,三十六行,行行出状元,争取在本岗位上做出一定的成绩.&lt;/p&gt;
&lt;p&gt;第五、再接再厉,成为国家公务员一直是我的梦想,以后如果有机会我仍然后再次参加竞争.&lt;/p&gt;
&lt;p&gt;51、假如你晚上要去送一个出国的同学去机场，可单位临时有事非你办不可，你怎么办?&lt;/p&gt;
&lt;p&gt;回答提示：我觉得工作是第一位的，但朋友间的情谊也是不能偏废的。这个问题我觉得要按照当时具体的情况来决定。&lt;/p&gt;
&lt;p&gt;(1)、如果我的朋友晚上9点中的飞机，而我的 加班八点就能够完成的话，那就最理想了，干完工作去机场，皆大欢喜。&lt;/p&gt;
&lt;p&gt;(2)、如果说工作不是很紧急，加班仅仅是为了明天上班的时候能把报告交到办公室，那完全可以跟领导打声招呼，先去机场然后回来加班，晚点睡就是了。&lt;/p&gt;
&lt;p&gt;(3)、如果工作很紧急，两者不可能兼顾的情况下，我觉得可以由两种选择。1)如果不是全单位都加班的话，是不是可以要其他同事来代替以下工作，自己去机场，哪怕就是代替你离开的那一会儿。2)如果连这一点都做不到的话，&lt;/p&gt;
&lt;p&gt;那只好忠义不能两全了，打电话给朋友解释一下，小心他会理解，毕竟工作做完了就完了，朋友还是可以再见面的。&lt;/p&gt;
&lt;p&gt;52、如果通过这次面试我们单位录用了你，但工作一段时间却发现你根本不适合这个职位，你怎么办?&lt;/p&gt;
&lt;p&gt;回答提示：一段时间发现工作不适合我，有两种情况：&lt;/p&gt;
&lt;p&gt;1、如果你确实热爱这个职业，那你就要不断学习，虚心向领导和同事学习业务知识和处事经验，了解这个职业的精神内涵和职业要求，力争减少差距;&lt;/p&gt;
&lt;p&gt;2、你觉得这个职业可有可无，那还是趁早换个职业，去发现适合你的，你热爱的职业，那样你的发展前途也会大点，对单位和个人都有好处。&lt;/p&gt;
&lt;p&gt;53、你做过的哪件事最令自己感到骄傲?&lt;/p&gt;
&lt;p&gt;回答提示：这是考官给你的一个机会，让你展示自己把握命运的能力。这会体现你潜在的领导能力以及你被提升的可能性。假如你应聘于一个服务性质的单位，你很可能会被邀请去午餐。记住：你的前途取决于你的知识、你的社交能力和综合表现。&lt;/p&gt;
&lt;p&gt;54、谈谈你过去做过的成功案例&lt;/p&gt;
&lt;p&gt;回答提示：举一个你最有把握的例子，把来龙去脉说清楚，而不要说了很多却没有重点。切忌夸大其词，把别人的功劳到说成自己的，很多主管为了确保要用的人是最适合的，会打电话向你的前一个主管征询对你的看法及意见，所以如果说谎，是很容易穿梆的。&lt;/p&gt;
&lt;p&gt;55、谈谈你过去的工作经验中，最令你挫折的事情&lt;/p&gt;
&lt;p&gt;回答提示：曾经接触过一个客户，原本就有耳闻他们以挑剔出名，所以事前的准备功夫做得十分充分，也投入了相当多的时间与精力，最后客户虽然并没有照单全收，但是接受的程度已经出乎我们意料之外了。原以为从此可以合作愉快，却得知客户最后因为预算关系选择了另一家代理商，之前的努力因而付诸流水。尽管如此，我还是从这次的经验学到很多，如对该产业的了解，整个team的默契也更好了。&lt;/p&gt;
&lt;p&gt;分析：借此了解你对挫折的容忍度及调解方式。&lt;/p&gt;
&lt;p&gt;56、如何安排自己的时间?会不会排斥加班?&lt;/p&gt;
&lt;p&gt;回答提示：基本上，如果上班工作有效率，工作量合理的话，应该不太需要加班。可是我也知道有时候很难避免加班，加上现在工作都采用责任制，所以我会调配自己的时间，全力配合。&lt;/p&gt;
&lt;p&gt;分析：虽然不会有人心甘情愿的加班，但依旧要表现出高配合度的诚意。&lt;/p&gt;
&lt;p&gt;57、为什么我们要在众多的面试者中选择你?&lt;/p&gt;
&lt;p&gt;回答提示：根据我对贵公司的了解，以及我在这份工作上所累积的专业、经验及人脉，相信正是贵公司所找寻的人才。而我在工作态度、EQ上，也有圆融、成熟的一面，和主管、同事都能合作愉快。&lt;/p&gt;
&lt;p&gt;分析：别过度吹嘘自己的能力，或信口开河地乱开支票，例如一定会为该公司带来多少钱的业务等，这样很容易给人一种爱说大话、不切实际的感觉。&lt;/p&gt;
&lt;p&gt;58、对这个职务的期许?&lt;/p&gt;
&lt;p&gt;回答提示：希望能借此发挥我的所学及专长，同时也吸收贵公司在这方面的经验，就公司、我个人而言，缔造&amp;ldquo;双赢&amp;rdquo;的局面。&lt;/p&gt;
&lt;p&gt;分析：回答前不妨先询问该公司对这项职务的责任认定及归属，因为每一家公司的状况不尽相同。以免说了一堆理想抱负却发现牛头不对马嘴。&lt;/p&gt;
&lt;p&gt;59、为什么选择这个职务?&lt;/p&gt;
&lt;p&gt;回答提示：：这一直是我的兴趣和专长，经过这几年的磨练，也累积了一定的经验及人脉，相信我一定能胜任这个职务的。&lt;/p&gt;
&lt;p&gt;分析：适时举出过去的&amp;ldquo;丰功伟业&amp;rdquo;，表现出你对这份职务的熟稔度，但避免过于夸张的形容或流于炫耀。&lt;/p&gt;
&lt;p&gt;60、为什么选择我们这家公司?&lt;/p&gt;
&lt;p&gt;回答提示：曾经在报章杂志看过关于贵公司的报道，与自己所追求的理念有志一同。而贵公司在业界的成绩也是有目共睹的，而且对员工的教育训练、升迁等也都很有制度。&lt;/p&gt;
&lt;p&gt;分析：去面试前先做功课，了解一下该公司的背景，让对方觉得你真的很有心想得到这份工作，而不只是探探路。&lt;/p&gt;
&lt;p&gt;61、你认为你在学校属于好学生吗?&lt;/p&gt;
&lt;p&gt;回答提示：企业的招聘者很精明，问这个问题可以试探出很多问题：如果求职者学习成绩好，就会说：&amp;ldquo;是的，我的成绩很好，所有的成绩都很优异。当然，判断一个学生是不是好学生有很多标准，在学校期间我认为成绩是重要的，其他方面包括思想道德、实践经验、团队精神、沟通能力也都是很重要的，我在这些方面也做得很好，应该说我是一个全面发展的学生。&amp;rdquo;如果求职者成绩不尽理想，便会说：&amp;ldquo;我认为是不是一个好学生的标准是多元化的，我的学习成绩还可以，在其他方面我的表现也很突出，比如我去很多地方实习过，我很喜欢在快节奏和压力下工作，我在学生会组织过 &amp;times;&amp;times;活动，锻炼了我的团队合作精神和组织能力。&amp;rdquo; 有经验的招聘者一听就会明白，企业喜欢诚实的求职者。&lt;/p&gt;
&lt;p&gt;62、请谈谈如何适应办公室工作的新环境?&lt;/p&gt;
&lt;p&gt;回答提示①办公室里每个人有各自的岗位与职责，不得擅离岗位。&lt;/p&gt;
&lt;p&gt;②根据领导指示和工作安排，制定工作计划，提前预备，并按计划完成。&lt;/p&gt;
&lt;p&gt;③多请示并及时汇报，遇到不明白的要虚心请教。&lt;/p&gt;
&lt;p&gt;④抓间隙时间，多学习，努力提高自己的政治素质和业务水平。&lt;/p&gt;
&lt;p&gt;63、在工作中学习到了些什么?&lt;/p&gt;
&lt;p&gt;回答提示：这是针对转职者提出的问题，建议此时可以配合面试工作的特点作为主要依据来回答，如业务工作需要与人沟通，便可举出之前工作与人沟通的例子，经历了哪些困难，学习到哪些经验，把握这些要点做陈述，就可以轻易过关了&lt;/p&gt;
&lt;p&gt;64、有想过创业吗?&lt;/p&gt;
&lt;p&gt;回答提示：这个问题可以显示你的冲劲，但如果你的回答是&amp;ldquo;有&amp;rdquo;的话，千万小心，下一个问题可能就是&amp;ldquo;那么为什么你不这样做呢?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;65、最能概括你自己的三个词是什么?&lt;/p&gt;
&lt;p&gt;回答提示：我经常用的三个词是：适应能力强，有责任心和做事有始终，结合具体例子向主考官解释，使他们觉得你具有发展潜力&lt;/p&gt;
&lt;p&gt;66、你认为你在学校属于好学生吗?&lt;/p&gt;
&lt;p&gt;回答提示：企业的招聘者很精明，问这个问题可以试探出很多问题：如果求职者学习成绩好，就会说：&amp;ldquo;是的，我的成绩很好，所有的成绩都很优异。当然，判断一个学生是不是好学生有很多标准，在学校期间我认为成绩是重要的，其他方面包括思想道德、实践经验、团队精神、沟通能力也都是很重要的，我在这些方面也做得很好，应该说我是一个全面发展的学生。&amp;rdquo;如果求职者成绩不尽理想，便会说：&amp;ldquo;我认为是不是一个好学生的标准是多元化的，我的学习成绩还可以，在其他方面我的表现也很突出，比如我去很多地方实习过，我很喜欢在快节奏和压力下工作，我在学生会组织过 &amp;times;&amp;times;活动，锻炼了我的团队合作精神和组织能力。&amp;rdquo; 有经验的招聘者一听就会明白，企业喜欢诚实的求职者。&lt;/p&gt;
&lt;p&gt;67、除了本公司外，还应聘了哪些公司?&lt;/p&gt;
&lt;p&gt;回答提示：很奇怪，这是相当多公司会问的问题，其用意是要概略知道应徵者的求职志向，所以这并非绝对是负面答案，就算不便说出公司名称，也应回答&amp;ldquo;销售同种产品的公司&amp;rdquo;，如果应聘的其他公司是不同业界，容易让人产生无法信任的感觉。&lt;/p&gt;
&lt;p&gt;68、何时可以到职?&lt;/p&gt;
&lt;p&gt;回答提示：大多数企业会关心就职时间，最好是回答\&amp;rsquo;如果被录用的话，到职日可按公司规定上班&amp;rdquo;，但如果还未辞去上一个工作、上班时间又太近，似乎有些强人所难，因为交接至少要一个月的时间，应进一步说明原因，录取公司应该会通融的&lt;/p&gt;
&lt;p&gt;69、你并非毕业于名牌院校?&lt;/p&gt;
&lt;p&gt;回答提示：是否毕业于名牌院校不重要，重要的是有能力完成您交给我的工作，我接受了北大青鸟的职业培训，掌握的技能完全可以胜任贵公司现在工作，而且我比一些名牌院校的应届毕业生的动手能力还要强，我想我更适合贵公司这个职位。&lt;/p&gt;
&lt;p&gt;70、你怎样看待学历和能力?&lt;/p&gt;
&lt;p&gt;回答提示：学历我想只要是大学专科的学历，就表明觉得我具备了根本的学习能力。剩下的，你是学士也好，还是博士也好，对于这一点的讨论，不是看你学了多少知识，而是看你在这个领域上发挥了什么，也就是所说的能力问题。一个人工作能力的高低直接决定其职场命运，而学历的高低只是进入一个企业的敲门砖，如果贵公司把学历卡在博士上，我就无法进入贵公司，当然这不一定只是我个人的损失，如果一个专科生都能完成的工作，您又何必非要招聘一位博士生呢?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>一位移民二代女孩的"中国日记"</title>
   <link href="http://blog.xuyuan.me/2010/08/12/abc_diary.html"/>
   <updated>2010-08-12T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/08/12/abc_diary</id>
   <content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在Google Reader上看到一篇中美对比的文章，深有同感，作者所描述的陌生路人之间的关系，行人过马路的情景，以及餐厅服务生的态度，正恰恰是待在美国的日子给我留下最深印象的部分。在美国感觉到最大的对比不在于这里物质生活的富足，更大的不同在于人们精神面貌和社会氛围的欣欣向荣（当然，这是以物质富足为基础的）。当地铁站派发免费报纸的陌生人微笑着朝你打招呼的时候，当餐馆服务生态度友好自信满满的为你服务的时候，你会感觉这是一个充满希望的社会。如果要用一个词来形容的话，我只好用上这个在中国已经被扭曲的词语：和谐。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;以下文章转自&lt;a href=&quot;http://blog.sina.com.cn/s/blog_48670cb20100kenw.html&quot; target=&quot;_blank&quot;&gt;http://blog.sina.com.cn/s/blog_48670cb20100kenw.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;【一位在美国才出生和成长的16岁中国女孩，两年前回中国后写下的&amp;ldquo;中国日记&amp;rdquo;，原文是英语，译文载《南方人物周刊》】&lt;/p&gt;
&lt;p&gt;我的名字叫安玲史，虽然我看上去像中国人，可我并不是。我从没在中国居住过，我喝西方的牛奶和吃西方的食物，另外告诉你，在母亲的子宫，我的童年，几乎全是在美国度过的，而那不可逆转地影响了我的现在。&lt;/p&gt;
&lt;p&gt;让我开始告诉你我对中国有着怎样的印象。&lt;/p&gt;
&lt;p&gt;第一个巨大的、10英寸刀子般深的来自于中国的印象就是交通。在我们被母亲童年的最好朋友从机场热情洋溢地接到之后(那里有我们的亲戚)，我们在贵阳酷热无比的气温下，(译者注：当时气温28度)挤在了他狭小无比的桑塔纳里。我曾经在德克萨斯州住过5年，我习惯了在90华氏度的气温下待在拥挤不堪的车里，但在德州，交通是在控制之下的。贵阳的交通，很可惜，不是。&lt;/p&gt;
&lt;p&gt;我们开车上路后，我的耳膜只跟一种声音碰撞了起来：汽车喇叭声。喇叭的鸣响，高音，低音，谁又知道F调在中国人的手上可以有那么多的变化呢？在美国，10天内你能听到喇叭声一次或两次，并且只是在你离死还差两秒或者某人在路上确实激怒了你的情况下。&lt;/p&gt;
&lt;p&gt;每个人开车都跟疯了一样。中国的驾驶员是世界上技巧最精湛的，或者他们根本没什么技术可言。甩尾，不打灯，随意变道。当我们试图转进另一条道，我们没成功。在美国，3辆车之内总有一辆会让道给你。我猜这在中国是不可能的。一辆车驶过，两辆，3辆，4辆，同时被阻挡在后面的车一直压迫着我们，我们不得不往前移动。这让我们陷入了非常恐怖的境况。&lt;/p&gt;
&lt;p&gt;我对中国的公共教育并不太了解，尽管如此，在美国公共学校系统里接受了9年的教育后，我能告诉你很多关于它的事情。但我将告诉你一样特殊的事情，这部分关于毒品和酒精教育。&lt;/p&gt;
&lt;p&gt;每个月，从我一年级到五年级的时候，两到三个从DARE(毒品和酒精防范教育)计划来的负责人会到班级里告诉我们为什么毒品和酒精对我们的身体有害，并且我们应该一辈子远离它们。我们的老师也参与其中，他让我们做关于毒品的作业，研究为什么它们对我们有害。我猜在这种环境里成长已经把我变成了毒品和酒精的纳粹，因为我这辈子也不会触碰这些东西，更谈不上让它们污染我的身体。&lt;/p&gt;
&lt;p&gt;被带到中国后，几乎我去的每一个地方，无论是在街上还是在晚宴的饭桌上，肯定会有人在抽烟，而且在晚餐的时候，酒精几乎到处都是。每一个地方！每个人都在抽烟，这个状况残酷地令我想起了在美国时看过的公益广告，在一个充满二手烟的房间里待上两个小时等于自己抽上一根烟。同时我十分讨厌每个人都在强迫我妈喝酒。&lt;/p&gt;
&lt;p&gt;我觉得在中国过马路是一件艺术和巨大的挑战，因为在美国你可以蒙着眼睛过10次8次马路也没事。不幸的是在中国每个人都横冲马路，几乎没人用斑马线。我几乎无数次差点被极速移动的汽车撞到(包括单车)以至于我都数不过来次数，这真遗憾。&lt;/p&gt;
&lt;p&gt;在美国我们是这样做的，当斑马线上的交通灯变绿，车停人走。当交通灯变红，人等车走。简单明了，对吗？对，也许这有点消耗时间，如果你冲刺到斑马线上灯变红了，可这总比被车撞死强吧。还有一条行人必备的权利。当你在车里看到前方有人过马路，你应该立刻停车让行人经过。但是当你是行人，我还是建议你快走，这样不会刺激到司机。&lt;/p&gt;
&lt;p&gt;一场小灾难发生在我们亲戚位于花溪的公寓里，我们最后不得不叫警察来调查。我只在美国遇到过警察(谢天谢地)，那次是我的表哥玩电话的时候不小心打了911，把警察叫了来。几分钟内，警察来到房间并问我们发生了什么事情。不幸的是，在花溪他们用了20分钟才来到，之后他们是如此的不专业(按照美国的标准)，开始抽烟和用手机聊天，换句话说，基本上什么都没干。&lt;/p&gt;
&lt;p&gt;但我能理解为什么警察如此难快速出动。当我们在北京的路上，我看到一辆救护车响着警报器试图穿过车流。当救护车跟我们一样速度而行人走路超过我们的时候，我对那天需要帮助的人感到无比的惋惜。在美国，当紧急车辆例如救护车和警车通过，所有车流必须停下(或至少慢下来)。&lt;/p&gt;
&lt;p&gt;在美国的餐馆里点菜的时候，你一般会以谢谢结束服务生的服务，然后他们会以微笑和一句&amp;ldquo;没问题&amp;rdquo;或者&amp;ldquo;你点的餐几分钟内就会准备好&amp;rdquo;作为回应。&lt;/p&gt;
&lt;p&gt;在中国，我发现事情截然不同。我好几次被吓怕，因为点菜的人总是用粗鲁甚至侮辱的态度对待餐馆里的服务员。在美国，你尝试用最善意的方式说话，这样没人受伤。在中国，如果服务生往我们吃的菜里吐痰我不会惊讶。&lt;/p&gt;
&lt;p&gt;同时，他们也并不快乐。在中国的头两顿饭，我很惊讶地问母亲为什么服务生看上去并不高兴，(在美国他们被训练成高兴的样子)母亲告诉我他们没有动力，因为他们没小费。&lt;/p&gt;
&lt;p&gt;当我跟表哥和他的朋友吃饭的时候，每个人都对我老说&amp;ldquo;谢谢&amp;rdquo;感到非常惊讶。我想这就是在美国长大带来的习惯。但是每个人都喜欢得到感谢，所以我们也许应该在每天的生活中多用&amp;ldquo;谢谢&amp;rdquo;，这样的话每个人每天都会好过一点。&lt;/p&gt;
&lt;p&gt;总体来说，对比美国和中国这件事本身就不太靠谱。&lt;/p&gt;
&lt;p&gt;中国有比美国长数千年的历史，美国只是一个新生儿。中国的人口远比美国多，同时中国政府的法律和法规也很不同。&lt;/p&gt;
&lt;p&gt;文化和人民也不一样。你不能把这些变数都囊括进来然后还能看出谁更好。&lt;/p&gt;
&lt;p&gt;尽管如此，有一件事我们可以确定，那就是我们作为人类，虽然价值观不同，但我们都渴求一样东西：幸福。&lt;/p&gt;
&lt;p&gt;虽然这只是一个外人对中国的看法，但你或许会对这个话题有不同的意见，我认为这完全没问题。尝试从别人的观点看问题只能有益于你。&lt;/p&gt;
&lt;p&gt;(摘自《南方人物周刊》报道)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>NYC Trip</title>
   <link href="http://blog.xuyuan.me/2010/08/11/nyc_trip.html"/>
   <updated>2010-08-11T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/08/11/nyc_trip</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/20100807_NYC/NYC%20071.JPG&quot; alt=&quot;&quot; width=&quot;800&quot; height=&quot;600&quot; /&gt;&lt;br /&gt;
洛克菲勒大厦俯览中央公园&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/20100807_NYC/NYC%20068.JPG&quot; alt=&quot;&quot; width=&quot;800&quot; height=&quot;600&quot; /&gt;&lt;br /&gt;
帝国大厦&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/20100807_NYC/NYC%20050.JPG&quot; alt=&quot;&quot; width=&quot;800&quot; height=&quot;600&quot; /&gt;&lt;br /&gt;
Time Square街头&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/20100807_NYC/NYC%20089.JPG&quot; alt=&quot;&quot; width=&quot;800&quot; height=&quot;600&quot; /&gt;&lt;br /&gt;
5th Avenue一角&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/20100807_NYC/NYC%20088.JPG&quot; alt=&quot;&quot; width=&quot;800&quot; height=&quot;600&quot; /&gt;&lt;br /&gt;
挑个错，五大道NBA专卖店里，Google Translate都比这&lt;a href=&quot;http://translate.google.com/#en|zh-CN|please%20form%20line%20here&quot; target=&quot;_blank&quot;&gt;翻译的要好一点&lt;/a&gt;，路上这么多中国人，随便拉一个来翻一下好了。。&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Spectacle Island</title>
   <link href="http://blog.xuyuan.me/2010/08/10/spectacle_island.html"/>
   <updated>2010-08-10T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/08/10/spectacle_island</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/Spectacle_Island/011.JPG&quot; alt=&quot;&quot; width=&quot;800&quot; height=&quot;600&quot; /&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/Spectacle_Island/017.JPG&quot; alt=&quot;&quot; width=&quot;800&quot; height=&quot;600&quot; /&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/Spectacle_Island/030.JPG&quot; alt=&quot;&quot; width=&quot;800&quot; height=&quot;600&quot; /&gt;&lt;br /&gt; &lt;img src=&quot;http://img.xuyuan.me/photos/Spectacle_Island/033.JPG&quot; alt=&quot;&quot; width=&quot;800&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Gift for Xiao Bao</title>
   <link href="http://blog.xuyuan.me/2010/08/09/nyc_xiaobao.html"/>
   <updated>2010-08-09T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/08/09/nyc_xiaobao</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/20100807_NYC/NYC_XiaoBao.JPG&quot; alt=&quot;&quot; width=&quot;800&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>这个。。三峡大坝，从固若金汤到不能指望</title>
   <link href="http://blog.xuyuan.me/2010/07/22/san_xia.html"/>
   <updated>2010-07-22T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/07/22/san_xia</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/san_xia.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>美剧夏休，大家一起来听耶鲁开放课</title>
   <link href="http://blog.xuyuan.me/2010/07/20/yale_oyc.html"/>
   <updated>2010-07-20T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/07/20/yale_oyc</id>
   <content type="html">&lt;p&gt;转自豆瓣 &lt;a href=&quot;http://www.douban.com/note/79752876/&quot;&gt;废废柴的日记&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;note&quot;&gt;哲学：死亡&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2761032/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2761032/&lt;/a&gt;&lt;br /&gt;YYets的中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2824902/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2824902/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;生物医学工程探索&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2825693/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2825693/&lt;/a&gt;&lt;br /&gt;TLF的中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2832411/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2832411/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1871年后的法国&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2826754/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2826754/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;美国内战与重建，1845-1877&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2813920/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2813920/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;新生有机化学&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2824129/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2824129/&lt;/a&gt;&lt;br /&gt;中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2834322/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2834322/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1945年后的美国小说&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2813721/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2813721/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;聆听音乐&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2814513/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2814513/&lt;/a&gt;&lt;br /&gt;YYets的中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2832525/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2832525/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1648-1945年的欧洲文明&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2823243/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2823243/&lt;/a&gt;&lt;br /&gt;YYets的中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2832611/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2832611/&lt;/a&gt;&lt;br /&gt;TLF的中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2831074/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2831074/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;基础物理&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2825965/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2825965/&lt;/a&gt;&lt;br /&gt;YYets的中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2834907/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2834907/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;罗马建筑&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2824114/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2824114/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;天体物理学之探索和争议&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2820193/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2820193/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;文学理论导论&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2827779/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2827779/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;新约及其历史背景&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2826569/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2826569/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;旧约全书导论（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2834690/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2834690/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;进化，生态和行为原理&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2823010/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2823010/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;古希腊历史简介&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2827190/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2827190/&lt;/a&gt;&lt;br /&gt;YYets的中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2832522/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2832522/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;博弈论&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2819856/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2819856/&lt;/a&gt;&lt;br /&gt;YYets的中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2832107/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2832107/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;心理学导论&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2824035/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2824035/&lt;/a&gt;&lt;br /&gt;YYets的中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2827597/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2827597/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;金融市场&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2815985/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2815985/&lt;/a&gt;&lt;br /&gt;YYets的中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2830134/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2830134/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;政治哲学导论&lt;br /&gt;中文字幕版（不全，更新中）&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.verycd.com/topics/2834189/&quot; target=&quot;_blank&quot;&gt;http://www.verycd.com/topics/2834189/&lt;/a&gt;&lt;br /&gt;&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>HR和开发人员是如何阅读你的简历的</title>
   <link href="http://blog.xuyuan.me/2010/07/19/how_hr_read_resume.html"/>
   <updated>2010-07-19T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/07/19/how_hr_read_resume</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;http://img.xuyuan.me/photos/blog/hr_resume.png&quot; alt=&quot;&quot; width=&quot;800&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Programming DataStage -- Plug in Java Program with Java Pack</title>
   <link href="http://blog.xuyuan.me/2010/07/18/datastage_java_plugin.html"/>
   <updated>2010-07-18T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/07/18/datastage_java_plugin</id>
   <content type="html">&lt;div&gt;DataStage provides a set of Java API for users to plug-in their own  program. Java Pack is a separate package in DataStage 7.5, user need to  install both server and client pack. Once installed, there will be two  more stage in the DataStage Designer: Java Client and Java Transformer.  Java Client stage is a passive stage, it can be used as a source stage,  target stage or lookup stage. The Java Transformer stage is an active  stage, which calls a Java application that transforms data from an input  link and writes the data to an output link in a job.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Take a sample code from Java Pack document for example. The program  reads rows from an input link, converts column values to uppercase and  writes the results to an output link. Rows that contain an asterisk (*)  are sent to a Reject link:&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush: java;fontsize: 100; first-line: 1; &quot;&gt;package test;

import com.ascentialsoftware.jds.Row;

import com.ascentialsoftware.jds.Stage;

public class UpperCase extends Stage {
	public int process() {
		Row inputRow = readRow();
		if (inputRow == null) {
			return OUTPUT_STATUS_END_OF_DATA;
		}
		boolean reject = false;
		int columnCount = inputRow.getColumnCount();
		Row outputRow = createOutputRow();
		for (int columnNumber = 0; columnNumber &amp;lt; columnCount; columnNumber++) {
			String value = inputRow.getValueAsString(columnNumber);
			if ((value == null) || (value.indexOf('*') &amp;gt;= 0)) {
				reject = true;
				outputRow.setValueAsString(columnNumber, value);
			}
			else {
				outputRow.setValueAsString(columnNumber, value.toUpperCase());
			}
		}
		if (reject) {
			rejectRow(outputRow);
		}
		else {
			writeRow(outputRow);
		}
		return OUTPUT_STATUS_READY;
	}
}&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;After the source code is completed, compile it into .class file:&lt;/div&gt;
&lt;div&gt;&lt;em&gt;javac -classpath $APT_ORCHHOME/java/lib/tr4j.jar  test/UpperCase.java&amp;nbsp;&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Then drag the Java Transformer stage into designer canvas, add a  row generator as input and a sequence file stage as output. Now open the  Java Transformer stage, in Stage --&amp;gt; General tab, enter the  Transformer Class Name. In this case it's 'test.upperCase'. In Users'  Classpath field, enter the path where your java class and library lives.  The input and output of this Java Transformer stage should all be  varchar type columns. After everything is done, compile and run the DS  job. You'll see all strings are transformed into uppercase in the output  file.&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Programming DataStage -- Develop Custom Operator with C++ API in UNIX</title>
   <link href="http://blog.xuyuan.me/2010/07/17/datastage_custom_operator.html"/>
   <updated>2010-07-17T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/07/17/datastage_custom_operator</id>
   <content type="html">&lt;p&gt;
&lt;div&gt;In DataStage, user can develop custom operator to implement special  data process request. There is a very good tutorial on IBM &lt;a href=&quot;http://www-128.ibm.com/developerworks/edu/dm-dw-dm-0702chard-i.html&quot;&gt;developerWorks&lt;/a&gt; (require an IBM ID) about how to create the custom operator, but it's  specific on Windows platform. It's hard to find such instructions on  UNIX. So I'll write down some details here, which might be helpful for  the others. The following instructions are for Sun Solaris, other  systems like Redhat and AIX may need some little change on the compile  options.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;0. Load the DataStage environment&lt;/div&gt;
&lt;div&gt;Load the DS environment if necessary. For example, go to the  DataStage home directory and execute '. ./dsenv'&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;1. C++ source file&lt;/div&gt;
&lt;div&gt;The MyHelloWorld sample code could be found on the &lt;a href=&quot;http://www-128.ibm.com/developerworks/edu/dm-dw-dm-0702chard-i.html&quot;&gt;IBM  website&lt;/a&gt;, which takes one input stream and one output stream. It  takes a single column as input, an integer, this integer determines how  many times &quot;Hello World!&quot; is printed into one of columns in the output  stream. The output stream consists of two columns, a counter showing how  many times &quot;Hello World!&quot; was printed, and the printed result. To go  with the input and output streams, there is one option &quot;uppercase.&quot; This  option determines if the text &quot;Hello World!&quot; is printed in uppercase or  not.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;2. Create static object&lt;/div&gt;
&lt;div&gt;Compile the code with following command (complier and the options  may vary depending on different systems):&lt;/div&gt;
&lt;div&gt;&lt;em&gt;/auto/opt/Studio8/SUNWspro/bin/CC -dalign -PIC  -library=iostream -c -I$APT_ORCHHOME/include myhelloworld.c&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;3. Create dynamic library&lt;/div&gt;
&lt;div&gt;&lt;em&gt;/auto/opt/Studio8/SUNWspro/bin/CC -G -L$APT_ORCHHOME/lib  -lorchsun4 -lorchcoresun4 -lrwtool -lsocket -lnsl -ldl -laio -lposix4  myhelloworld.o -o myhelloworld.so&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;4. Register &lt;em&gt;$APT_ORCHHOME/etc/operator.apt&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;Add one more record in the file to mapping the operator:&lt;/div&gt;
&lt;div&gt;&lt;em&gt;myhelloworld myhelloworld 1&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;The first myhelloworld is the operator name, it should be identical  with the one defined inside the source code. The second myhelloworld is  the name the PXEngine is looking for in its PATH search. The 1 in the  third column indicates that this mapping is enabled.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;5. Create a custom stage&lt;/div&gt;
&lt;div&gt;Create a new Parallel Custom Stage in DataStage Designer, enter  'myhelloworld' in General/Operator tab. Fill other tabs and click OK.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;6. Create, Compile and Run the DS job&lt;/div&gt;
&lt;div&gt;Create a new Parallel job by dragging two sequential file operators  and the myhelloworld operator onto the canvas, then link them together.  Set the details, make sure the input and output names&amp;nbsp;are the same with  the one in custom code. After that, compile and run the job. If all the  settings are right, you'll see the expected output.&lt;/div&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Troubleshooting of install DataStage Server 7.5 on Windows Server 2003</title>
   <link href="http://blog.xuyuan.me/2010/07/13/troubleshooting_ds_7.5_install.html"/>
   <updated>2010-07-13T00:00:00+00:00</updated>
   <id>http://blog.xuyuan.me/2010/07/13/troubleshooting_ds_7.5_install</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;1. Error Msg:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;##I TFCP 000008 15:53:21(004) &amp;lt;transform&amp;gt; Error when checking  composite operator: cxx&lt;span&gt;&amp;nbsp; &lt;/span&gt;-O&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-IC:/Ascential/DataStage/PXEngine/include  -W/TP -W/EHa -DAPT_USE_ANSI_IOSTREAMS -c sourcefilename.C -o  outputname.o&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Solution:&lt;/strong&gt; There's no C++ compiler installed on the  Windows&amp;nbsp;server. The Transformer Stage in DataStage 7.5 needs Visual  Studio 2003 C++ compiler. If you don't&amp;nbsp;have Visual Studio 2003,&amp;nbsp;Visual  C++ Toolkit 2003&amp;nbsp;will also work.&amp;nbsp;It&amp;nbsp;is a free version of the same C++  compiler shipped with Visual Studio .NET 2003 without the IDE, though it  is no longer available and now superseded by the Express Editions.  After installing the compiler, remember to config the Windows system  environment (Path, Include, Lib). The environment value should be  modified before DataStage Server is installed.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;2. Error Msg:&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;##W TBLD 000000 15:53:21(003) &amp;lt;main_program&amp;gt; Error when  checking composite operator: Output from subprocess: cxx: file  'C:/PROGRA~1/MKSTOO~1/etc/cxx.ccg': The system cannot find the file  specified.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Solution: &lt;/strong&gt;Copy cxx.ccg file from C:\Program  Files\MKS Toolkit\etc\nutccg\ to C:\Program Files\MKS Toolkit\etc\&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;3. Error Msg:&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;##I TBLD 000000 10:52:58(007) &amp;lt;main_program&amp;gt; Error when  checking composite operator: Output from subprocess: LINK : fatal error  LNK1181: cannot open input file 'User32.lib'&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Solution: &lt;/strong&gt;Windows Platform SDK should  be&amp;nbsp;installed. The Windows system environment should also be updated.&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</content>
 </entry>
 
 
</feed>
