<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/gming" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/gming" type="application/rss+xml"></fs:self_link><lastBuildDate>Mon, 06 Feb 2012 06:45:51 GMT</lastBuildDate><title>鸣的博客</title><description>关注互联网,Python,Google App Engine,记录杂七杂八的生活。</description><link>http://pipes.yahoo.com/pipes/pipe.info?_id=e4a5e8b966cd9d1f80fe58ccd235fa5f</link><pubDate>Thu, 23 Feb 2012 02:20:36 GMT</pubDate><item><title>Fedora16_x64编译Android4.0.3源码</title><link>http://item.feedsky.com/~feedsky/gming/~8811415/606943247/6423441/1/item.html</link><content:encoded>&lt;p&gt;这个勉强算是How，但是我无法准确的说出Fedora16编译Android4.0.3源码的整个过程，按步骤一步一步的该怎么做，因为我的编译过程是跌跌撞撞的，并且一些细节我可能现在写的时候也忽略甚至遗忘，我只是想分享编译Anrdoid源码过程中遇到的一些问题的解答，官方给出的编译流程对于Linux是针对Ubuntu发行版的，Fedora细节上有一些不同，以下内容大多并非原创，只是摘自网络，大多来自&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://groups.google.com/group/android-building&quot;&gt;android-building group&lt;/a&gt;，更多问题或许可以在那找到答案。&lt;/p&gt;
&lt;p&gt;准备工作，在编译源码之前，建议还是到&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://source.android.com/source/index.html&quot;&gt;andriod open source project&lt;/a&gt;上去看看，那里可以了解到一些基本的知识，尽管实践起来Fedora的一些细节可能不同，但是对于一些注意事项，基本的理解还是有好处的。另一方面，建议不要下载最新版本的android源码，而是下载稳定的branch，比如android-4.0.3_r1，这样可能会更顺畅一些。&lt;/p&gt;
&lt;p&gt;在编译之前我们需要做一些准备，下载必要的开发包，这个链接&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://rootzwiki.com/topic/8037-compile-android-on-fedora-1516-by-xoomdev/&quot;&gt;http://rootzwiki.com/topic/8037-compile-android-on-fedora-1516-by-xoomdev/&lt;/a&gt;，说明了针对Fedora发行版的Linux操作系统该怎么做一些准备。&lt;/p&gt;
&lt;p&gt;我简要叙述一下，&lt;/p&gt;
&lt;p&gt;下载&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html&quot;&gt;sun-java-jdk6&lt;/a&gt;，注意一定不要使用openjdk，如果使用openjdk之后的编译会出现问题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;cd ~/Downloads
sudo sh jdk-6u27-linux-amd64.rpm
sudo ln -s /usr/java/default/bin/javah /usr/bin/javah&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后安装必要的开发包&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;sudo yum install -y zip curl gcc gcc-c++ flex bison gperf glibc-devel.{x86_64,i686} &amp;#92;&lt;/pre&gt;
&lt;pre&gt;zlib-devel.{x86_64,i686} ncurses-devel.i686 libX11-devel.i686 libstdc++.i686 libsx-devel &amp;#92;&lt;/pre&gt;
&lt;pre&gt;readline-devel.i686 libXrender.i686 libXrandr.i686

sudo yum install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev &amp;#92;&lt;/pre&gt;
&lt;pre&gt;gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev &amp;#92;&lt;/pre&gt;
&lt;pre&gt;libx11-dev lib32readline5-dev lib32z-dev libX11-devel.i686&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后安装make3.81，(注意，Fedora16的make是3.82，编译Android会出现问题，所以需要降级安装3.81)&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;sudo yum downgrade make --releasever=13&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;但是按照这种降级方法我也没有安装成功，最后我选择了下载3.81版本的源码自己编译安装的，方法&lt;/p&gt;
&lt;p&gt;从&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.gnu.org/prep/ftp.html&quot;&gt;http://www.gnu.org/prep/ftp.html&lt;/a&gt;下载&quot;make-3.81.tar.gz到/tmp目录&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;su
cd /usr/local
tar -zxvf /tmp/make-3.81.tar.gz
cd ./make-3.81
./configure
./sh build.sh
./make install&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后配置PATH环境变量&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;PATH=$PATH:/usr/local/make-3.81 
export PATH&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;（当然为了永久生效，可以放到~/.bashrc）&lt;/p&gt;
&lt;p&gt;但是这样并没有好，Fedora16上一些包的版本和Android源码不太兼容，需要对Android源码作出一些更改，&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://groups.google.com/forum/#!msg/android-building/gIC_t7GXzQ4/1l7Se9Mb910J&quot;&gt;https://groups.google.com/forum/#!msg/android-building/gIC_t7GXzQ4/1l7Se9Mb910J&lt;/a&gt;这个链接给出了大部分方法，&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;1. in ./build/core/combo/HOST_linux-x86.mk
        replace : HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
        with    : HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

2. in ./development/tools/emulator/opengl/host/renderer/Android.mk
        add : LOCAL_LDLIBS += -lX11

3. in ./external/gtest/include/gtest/internal/gtest-param-util.h b/
include/gtest/internal/gtest-param-util.h
        after : [CODE]#include &amp;lt;vector&amp;gt;[/CODE]
        add : [CODE]#include &amp;lt;stddef.h&amp;gt;
                #include &amp;lt;cstddef&amp;gt;[/CODE]

4. in ./external/gtest/src/Android.mk
        replace (this is done in 2 places with the same line) :[CODE]LOCAL_CFLAGS += -O0[/CODE]
        with : [CODE]LOCAL_CFLAGS += -O0 -Wno-missing-field-initializers[/CODE]

5. in ./external/llvm/llvm-host-build.mk
        add : [CODE]LOCAL_LDLIBS := -lpthread -ldl[/CODE]

6. in ./external/mesa3d/src/glsl/linker.cpp
        after : [CODE]#include &amp;lt;climits&amp;gt;[/CODE]
        add : [CODE]#include &amp;lt;stddef.h&amp;gt;[/CODE]

7. in ./external/oprofile/libpp/format_output.h
        replace : [CODE]mutable counts_t &amp;amp; counts;[/CODE]
        with : [CODE]counts_t &amp;amp; counts;[/CODE]

8. in ./frameworks/compile/slang/slang_rs_export_foreach.cpp
        replace (line 249 - be careful, there are 2 line the same, the other
one is required) : [CODE]llvm::StringRef ParamName = PVD-&amp;gt;getName();[/CODE]
        with :[CODE] // llvm::StringRef ParamName = PVD-&amp;gt;getName();[/CODE]&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;另外我编译的过程还遇到了&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;host SharedLib: libGLES_CM_translator (out/host/linux-x86/obj/lib/libGLES_CM_translator.so)
/usr/bin/ld: skipping incompatible /usr/lib64/libGL.so when searching for -lGL
/usr/bin/ld: cannot find -lGLcollect2: ld 返回 1
make: *** [out/host/linux-x86/obj/lib/libGLES_CM_translator.so] Error 1
make: *** Waiting for unfinished jobs&amp;hellip;.&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;解决方法是&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;sudo yum install libgle.i686 libgle.x86_64 libgle-devel.i686 libgle-devel.x86_64 yum install mesa-libGL-devel.i686&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;又遇到&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;Java: CtsVerifier 
(out/target/common/obj/APPS/CtsVerifier_intermediates/classes) 
cts/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java: 
191: onCreateDialog(int,android.os.Bundle) in android.app.Activity 
cannot implement onCreateDialog(int,android.os.Bundle) 
in com.android.cts.verifier.PassFailButtons.PassFailActivity; 
attempting to assign weaker access privileges; 
was public private static &amp;lt;T extends android.app.Activity &amp;amp; 
PassFailActivity&amp;gt; 
                           ^ 
1 error 
make: *** 
[out/target/common/obj/APPS/CtsVerifier_intermediates/classes-full- debug.jar]&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;有人说是使用openjdk，没有使用sun-jdk的原因，但是我使用的确实是sun-jdk，我采取了有人说的方案，从PassFailActivity接口中删除掉Dialog onCreateDialog(int id, Bundle args)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;有了这些修补后，就可以正式开始编译了，&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;source build/envsetup.sh&lt;/p&gt;
&lt;p&gt;lunch full-eng（注：这个属于没有设备专有驱动的配置，实际的机器比如Nexus S，你要到官网下载相应的驱动包，具体见&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://source.android.com/source/building-devices.html&quot;&gt;这里&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;make -j4（注：-jN可以加快编译速度，但是数值不要过大，推荐值是电脑CPU线程的1或2倍）&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;相关阅读&lt;/h4&gt;
&lt;ul&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/28/Android-compatibility-package-fragment-loader-actionbar.html&quot;&gt;Android兼容包及Fragment, Loader, ActionBar简介&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/28/phonegap-source-code-analyzing-java-js-plugin-mechanism.html&quot;&gt;phoengap源码解析——插件机制，java和js代码互调用详解&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/16/android-tablet.html&quot;&gt;买了个Android平板——小破文章一篇&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/21/Android-backward-compatibility-problem.html&quot;&gt;Android前向兼容的几个问题&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/24/android-reader-pdf.html&quot;&gt;Android阅读器开发相关资料（上-pdf）&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/18/experience-android-4.0-nexus-s.html&quot;&gt;Nexus S体验Android4.0&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/25/android-reader-txt.html&quot;&gt;Android阅读器相关资料（下-txt）&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/07/17/android-learning-fifth-screen-things-resolution-denity.html&quot;&gt; Android学习小结（五）——Android手机屏幕那点事&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/13/SimpleTouchImageView-multi-scale-pan-android.html&quot;&gt;SimpleTouchImageView一个支持缩放平移及多点缩放的显示图片的Activity&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/25/phonegap-webapp-decompile-codereader.html&quot;&gt;PhoneGap，Web Application，反编译，代码阅读器——4in1游戏卡，寻觅童年游戏机快感&lt;/a&gt;&lt;/li&gt;
    
&lt;/ul&gt;
&lt;p&gt;本文网址:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/02/6/fedora-16-x64-compile-android-4.0.3-source-code.html&quot;&gt;http://www.qhm123.com/2012/02/6/fedora-16-x64-compile-android-4.0.3-source-code.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/606943247/gming/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/gming/~8811415/606943247/6423441/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><category>how</category><pubDate>Mon, 06 Feb 2012 14:45:51 +0800</pubDate><guid isPermaLink="false">http://www.qhm123.com/?p=1118010</guid><fs:srclink>http://www.qhm123.com/2012/02/6/fedora-16-x64-compile-android-4.0.3-source-code.html</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e4a5e8b966cd9d1f80fe58ccd235fa5f&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/gming/~8811415/606943247/6423441</fs:itemid></item><item><title>思考有的时候就是意淫</title><link>http://item.feedsky.com/~feedsky/gming/~8811415/606943248/6423441/1/item.html</link><content:encoded>&lt;p&gt;前几天写了《&lt;a rel=&quot;nofollow&quot;&gt;拾掇旧玩应&amp;mdash;&amp;mdash;那些年，我独自做过的小站&lt;/a&gt;》，我发现大部分我的项目都烂尾了。我发现我总是偶尔想到一个想法，然后开始行动，然后过程中又冒出新的想法，然后又突然觉得无趣，然后就萎靡，然后就罢手了。&lt;/p&gt;
&lt;p&gt;就在最近这两天我又烂尾了一个Android的项目，当我想好这个项目的一切想法，我想好了它的需求，并且为它想好了一个专门设计的网站，想好了一些文案，并且在做的过程中偶尔兴奋，我刚做出一个较为完整的alpha版本，写了一点单独的推广的网站，但是它还是烂尾了。就像我之前做过的一个Android项目，再之前做过的一个Android项目一样。&lt;/p&gt;
&lt;p&gt;记得曾经写过《&lt;a rel=&quot;nofollow&quot;&gt;目标&lt;/a&gt;》中说&amp;ldquo;我想到我经常穿梭于Web上的各种链接，我时常的目的是打开Google，用它搜索点什么，然而我最初的目的就随着我一次一次点击链接而渐渐远去。&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;我时常觉得，做出一个完整的产品是很艰难的，视觉，文案，代码，想法，推广。有的时候我只能完成初始想法和部分代码的部分，然而视觉和文案则让我费心费力，我一直认为做出一个完整的东西是需要花费完成一个东西两倍甚至更多的精力的。&lt;/p&gt;
&lt;p&gt;有的时候我又觉得，我更喜欢做Web，因为Web无论做的怎么样我都可以把它挂到网上去，然后迅速改进重构，但是Android软件或者说软件，你怎么能忍心发布一个很惨的状况的东西出去。下载与安装是一个门槛，而Web点开就可以看到你的东西，尽管你的初期版本可能很是丑陋用户迅速离去，但是当你发布新版的时候Web用户再次看一眼的代价并不大，而软件不好用的话，很可能用户再也不会选择你，因为这玩应相对代价要更大一些，所以第一版必须足够好。&lt;/p&gt;
&lt;p&gt;很多时候，我在想大众需求是个什么东西，我一直觉得我是个小众的人，也喜欢小众的品味，当长尾概念烂大街的时候，你会觉得小众的聚集就是大众，然而我却发现我每一个大众的想法都被别人做掉了，所以有的时候无知者无畏，难得糊涂，据说人们只能看到一面的月球。&lt;/p&gt;
&lt;p&gt;我想，思考有的时候就是意淫。&lt;/p&gt;
&lt;p&gt;接下来，我该不会借由着什么想法去做一些东西了，就比如就在今天我又想到一些。记得《&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://book.douban.com/subject/5320866/&quot;&gt;重来&lt;/a&gt;》里写&amp;ldquo;你的头脑中有ebay的创意和你实际去创见ebay那一点关系也没有的&amp;rdquo;，或许说半毛钱关系都没有。我这样说后我又觉得这些东西不做有点可惜，但是再远了一点想，也许它们又会烂尾。&lt;/p&gt;
&lt;p&gt;或许是我想要的太多，想做的太多，比如我想做个记者，想做警察，想徒步旅行，想做产品，想做程序员，想做交互，想做生意，想做老师等等。单从我现在所从事的编程而言，我想做后端，想做前端，想做移动，单从后端来说，我想做Python，想做Java，想做Erlang，想做Hadoop，想做PHP，想做MongoDB，想做Redis，想做C，想做云计算，想做数据挖掘，从前端来说，我想做CoffeeScript，想做HTML5，想做JS，想做jQuery，想做NodeJS，想做CSS，从移动来说，我想做Android，想做iOS，想做PhoneGap，想做WP7。&lt;/p&gt;
&lt;p&gt;我想我已经疯了。&lt;/p&gt;
&lt;p&gt;我又想到刚才的话，思考有的时候就是意淫。&lt;/p&gt;
&lt;p&gt;所以接下来一段时间内，我可能会不再折腾这些东西了，我想参与一个开源的项目，贡献代码。&lt;/p&gt;
&lt;p&gt;再一个，我的博客的内容方向可能发生转变，我原来的分类是why-写为什么，how-写怎么做，what-写是什么，when-写随想，summary-写总结。新的方向可能是重在how，而且不是原来的大how，原来喜欢写比较大、通用的主题，现在想写一些小的、特别的主题，比重应该是how：when：why大概是8：1：1的样子。&lt;/p&gt;
&lt;p&gt;更重要的是，我要加强一个信念，&amp;ldquo;没有什么是我做不来的！&amp;rdquo;&lt;/p&gt;
&lt;p&gt;据说很多事情应该立即行动，所以我就要开始了！&lt;/p&gt;
&lt;p&gt;然而每次情绪高昂的时候，我都喜欢泼冷水，我记得我写的《&lt;a rel=&quot;nofollow&quot;&gt;犯贱&lt;/a&gt;》一文，也许我会再次犯贱。&lt;/p&gt;
&lt;p&gt;如果泼冷水真的能让我清醒，那么在凛冽的寒风中猛烈的泼我吧~&lt;/p&gt;

&lt;h4&gt;相关阅读&lt;/h4&gt;
&lt;ul&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/06/19/object.html&quot;&gt;目标&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/01/22/recent-make-website-thinks-questions.html&quot;&gt;最近做一个网站过程中产生的一些想法和疑问&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/02/15/always-think-wish-to-exceed.html&quot;&gt;我做了一些非常艰难的决定&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2010/11/22/talk-about-blog-post-frequency.html&quot;&gt;谈博客更新频率&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2010/10/15/why-me-start-blogging.html&quot;&gt;我为什么写博客&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/10/27/longer-than-half-year.html&quot;&gt;比半年更久一点&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/02/21/hard-to-write.html&quot;&gt;七天憋出六个字&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2010/06/15/heart-strong.html&quot;&gt;内心的强大&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2010/05/22/about-time-think.html&quot;&gt;关于时间的思考&lt;/a&gt;&lt;/li&gt;
    
&lt;/ul&gt;
&lt;p&gt;本文网址:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/02/5/think-is-psycholagny.html&quot;&gt;http://www.qhm123.com/2012/02/5/think-is-psycholagny.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/606943248/gming/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/gming/~8811415/606943248/6423441/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><category>when</category><pubDate>Sun, 05 Feb 2012 17:54:08 +0800</pubDate><guid isPermaLink="false">http://www.qhm123.com/?p=1112047</guid><fs:srclink>http://www.qhm123.com/2012/02/5/think-is-psycholagny.html</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e4a5e8b966cd9d1f80fe58ccd235fa5f&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/gming/~8811415/606943248/6423441</fs:itemid></item><item><title>[转载]关于性格内向者的10个误解</title><link>http://item.feedsky.com/~feedsky/gming/~8811415/606943249/6423441/1/item.html</link><content:encoded>&lt;p&gt;我非常幸运的发现了这本《内向者优势&amp;mdash;&amp;mdash;如何在外向的世界中获得成功》的好书，我感觉就好像是有人专门为我们这个罕见的小群体写了一部百科全书一样，它不仅对我的很多怪癖做了解释，还帮助我从一个崭新且积极的角度重新定义了我的整个人生。&lt;/p&gt;
&lt;p&gt;毫无疑问，几乎所有认识我的人都会说，&amp;ldquo;啊哈，你不会到现在才发现你是个性格内向者吧？&amp;rdquo;，其实这并不是那么简单，问题在于将一些人贴上内向者的标签是一种非常浅显且充满各种常见误解的行为，事实要比这复杂的多（在Carl King讲过之后，就更是如此了）&lt;/p&gt;
&lt;p&gt;Laney的书中有个章节对人的大脑进行了分析，并解释了神经元是如何在内向者和外向者的神经系统中跟随不同的控制通路进行传递。如果这本书基于的科学理论是正确的，那就证明了内向者是一群对多巴胺过度敏感的群体，太多的外部刺激过量的消耗了它们。相反的，外向者没有足够的多巴胺，他们需要依靠大脑的肾上腺去创造它们，外向者通常有更短的神经通路，他们的大脑血流量也相对更少，外向者神经系统中的信息大部分都是通过位于前额叶的布罗卡氏区（Broca&amp;rsquo;s area）传递的，而这里正是我们的大部分思考发生的地方。&lt;/p&gt;
&lt;p&gt;不幸的是，根据这本书，只有大约25%的人是内向的，而像我这样极端的就更是少上加少了，这导致了许多的误解，因为社会对我们这类人缺乏足够的了解（我很高兴我能够这样说）&lt;/p&gt;
&lt;p&gt;所以下面我列出了一些对内向者的常见的误解（这是我自己的清单，我对其中一些深信不疑）：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误解1： 内向者不喜欢说话&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;并不是这样，内向者不说话只是因为他们觉得没什么好说，他们讨厌闲谈扯淡，如果你让一个内向者讲他感兴趣的事情，他可能连着3天3夜都讲不完。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误解2： 内向者都很害羞&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;内向者没什么好害羞的，他们也不是害怕陌生人，他们只是需要一个理由去交际，他们不会为了交际而交际，如果你想和一个内向者交流，那就直接聊吧，不用担心礼貌问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误解3：内向者都很无礼&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;内向者通常觉得遵从社交礼仪，拐弯抹角的说话没有一点必要，他们希望每个人都是真实且真诚的，但不幸的是，大多数情况下事情并不是这样，这让内向者感到很大的压力，他们很难融入其中，并为此感到沮丧。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误解4： 内向者不合群&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;恰好相反，内向者会非常认真的对待他们为数不多的朋友，他们最亲密的朋友或许用一只手就可以统计过来，但如果你有幸被一个性格内向者当做朋友，那你就有了一个终生的盟友，一旦你作为一个人类存在赢得了他们的尊敬，你就入选了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误解5：内向者不喜欢去公共场合&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;胡扯，内向者只是尽可能的避免去公共场所，他们同样也会尽量避免卷入复杂的公共活动，因为他们可以在极短的时间内获取需要的数据和经验，所以，他们喜欢在一个地方待很久去&amp;ldquo;得到某样东西&amp;rdquo;，他们总是准备着回家，调整（Recharging），然后处理一切，实际上，调整绝对是内向者的关键所在。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误解6：内向者总是想要独处&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;内向者只是喜欢自我思考，他们会想很多，他们会白日做梦，他们喜欢解决问题，攻克难题，但是如果他们找不到什么人来分享他们的发现，他们也能忍受难以想象的孤独。他们希望在同一时间只和一个人保持亲密的感情关系。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误解7：内向者都很古怪&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;内向者通常都是个人主义者，他们不喜欢随大流，他们喜欢通过特立独行的生活方式来体现自己的价值，他们总是从自我出发，正因如此，他们也常常挑战常规，他们的大部分决定都不会以当前的流行趋势做为参考。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误解8：内向者都是冷漠的书呆子&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;内向者通常更关注内心世界，他们将更多的精力放到自身的想法和感情上，但这并不代表他们对他们身边的事情漠不关心，只是他们更喜欢通过内心世界来达成自我满足。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误解9：内向者不知道如何放松和享乐&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;内向者通常喜欢在家或自然中放松自己，他们不会去那些嘈杂的公共场所，内向者也不会寻求肾上腺素的刺激，如果有太多的空谈和噪音，他们会敬而远之。他们的大脑对于一种叫做多巴胺的神经递质太过敏感，内向者和外向者拥有完全不同的神经控制通路，关于这一点，你可以深入了解下。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误解10：内向者可以通过&amp;ldquo;自我修复&amp;rdquo;变得外向&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;想象一个没有内向者的世界，那个世界也就没有什么科学家，音乐家，艺术家，诗人，制片人，医生，数学家，作家和哲学家了，之所以这么说，是因为外向者还是可以通过学习掌握很多种和内向者进行交流的方式（没错，我故意颠倒了这两个词，读着很别扭？我只是为了让你们看看我们这个社会有多变态），内向者压根不需要&amp;ldquo;自我修复&amp;rdquo;，他们应该因为他们这种天生的性格和为人类做出的贡献而得到应有的尊敬，并且事实上，一项调查（Silverman，1986）显示内向的程度和IQ成正比。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;你没法避开我们，尝试改变我们只会让你感到失败&amp;rdquo;，这是我编的，我是一名剧作家。&lt;/p&gt;
&lt;p&gt;内向者如果为了去适应外向者支配的世界而对自己进行否定，结果将会是灾难性的，内向者终将会仇恨自己以及其他所有人。如果你认为你是个内向者，我推荐你研究下这个题目并试着找其他的性格内向者交换下意见，问题并不完全是内向者应该尝试并&amp;ldquo;变得正常&amp;rdquo;，外向者也需要认识和尊敬我们，并且我们也需要学会尊敬我们自己。&lt;/p&gt;
&lt;p&gt;原文标题：&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a rel=&quot;nofollow&quot; style=&quot;color:#2244bb;&quot; target=&quot;_blank&quot; href=&quot;http://www.carlkingcreative.com/10-myths-about-introverts&quot;&gt;10 Myths About Introverts&lt;/a&gt;，原文作者：&lt;a rel=&quot;nofollow&quot; style=&quot;color:#2244bb;&quot; target=&quot;_blank&quot; href=&quot;http://www.carlkingcreative.com/about&quot;&gt;Carl King&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;转自：&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lzhi.org/views/480026&quot;&gt;http://www.lzhi.org/views/480026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;本文网址:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/02/5/10-myths-about-introverts.html&quot;&gt;http://www.qhm123.com/2012/02/5/10-myths-about-introverts.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/606943249/gming/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/gming/~8811415/606943249/6423441/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><category>summary</category><pubDate>Sun, 05 Feb 2012 15:36:54 +0800</pubDate><guid isPermaLink="false">http://www.qhm123.com/?p=1107037</guid><fs:srclink>http://www.qhm123.com/2012/02/5/10-myths-about-introverts.html</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e4a5e8b966cd9d1f80fe58ccd235fa5f&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/gming/~8811415/606943249/6423441</fs:itemid></item><item><title>拾掇旧玩应——那些年，我独自做过的小站</title><link>http://item.feedsky.com/~feedsky/gming/~8811415/606943250/6423441/1/item.html</link><content:encoded>&lt;p&gt;这两天拾掇了一下以前写的小网站，有的年久失修已经不能用了，有的简单到弱爆了，都是gae上的东西，用python的，web&amp;nbsp;framework有的是webapp，有的是django，后期主要用django，这里主要回顾一下这几个东西。另外，拾掇的过程中充满尴尬与对自己陈旧代码的鄙视，心想怎么代码写的如此垃圾，过程中还发生了种种烦心的事情，这里一并写下。&lt;/p&gt;
&lt;p&gt;在gae上做的第一个玩应叫做&amp;ldquo;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://keepsogo.qhm123.com/&quot;&gt;Keep so Go！&lt;/a&gt;&amp;rdquo;，忘了写了多久，可能1天左右，是个很简单的玩应，也很让人摸不着头脑。玩应的介绍就是，&amp;ldquo;如果网页不被关闭，那么你的在线时常会被不断累加，然后进行排行&amp;rdquo;，这个东西的灵感现在想想多半来自小的时候玩游戏挂机的经历，亦或是QQ挂机，这个说不准了。只写了1天然后就终止了，本也就是练手的小东西，自然没有传播，用户有2个，一个显然是我，另一个是后来在you8g注册域名被别人悄然发现的。需要注册的东西，还是很难获取初期用户的，除非有知名人事的推动与宣传，像当年&amp;ldquo;知乎&amp;rdquo;的邀请码相当难搞，大家趋之若鹜。视觉上，我忘了抄袭了哪的视觉，总之不是我的原创，虽然很简陋，就那个黑条。代码上，真心写的很烂，web框架用的是webapp，总共没多少python代码，200多行，感觉用python代码，这小玩应，写的代码行数越多，越显得低端。看svn的记录，代码是2010年10月写的，剩下应该没有什么了。&lt;/p&gt;
&lt;p&gt;第二个应该就是&amp;ldquo;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://aicolor.sinaapp.com/&quot;&gt;爱颜色&lt;/a&gt;&amp;rdquo;（现在是在sae上的版本），时间与第一个应该差不多，文案是&amp;ldquo;选择你最爱的颜色，选择你当前心情的颜色，分享最爱的颜色，对颜色进行解说，通过颜色寻找朋友。&amp;rdquo;，想法来源是有个挺出名的国外的关于颜色的网站，现在想不起来了，这个是整合了新浪微博的，用了新浪微博的API，信息流会自动同步到微博上。视觉上最早应该是自己的原创，已经不记得长什么样子了，但是提交新浪微博审核的时候，被说界面太丑陋，然后我采用了我博客上的那套css，后来才通过。这个也1年多了，很早以前，由于新浪微博api调整过，然后这个&amp;ldquo;爱颜色&amp;rdquo;就不能用了，我也没想改，但是网站处于不能访问的状态，于是我把与新浪微博相关的东西全部注释掉了，然后一直苟延残喘至今，近两天我修复了新浪微博交互的问题，并且把&amp;ldquo;爱颜色&amp;rdquo;移植到了sae上。在gae上的现在虽然可以运行，但是还是有很多问题，然后我在gae上可运行的状态上，进行的sae版本移植，然后在sae版本上修复了算是挺大量的东西，然后gae版本作为一个branch躺在那里。&amp;ldquo;爱颜色&amp;rdquo;是用的django web&amp;nbsp;framework，而众所周知django在gae上的兼容性并不是很好，我当初使用了google维护的django&amp;nbsp;helper，但也早就停止维护，gae上的django和django最大不同是model层，而我model层当初未完全封装，向外暴漏了好多gae自己的东西，当然当初也想不到会有一天用纯粹一点的django来写，sae上的django算是纯粹一些，不像gae很多不能用。但是移植过程中遇到超多细节问题，而且python不想编译强类型语言，很多问题不到运行时还是挺难发现的，想很多类型问题，我很是无语。一个糟糕的问题是新浪微博的认证过程必须在有外网地址的情况下才能测试，所以我只能部署到真实环境才能测试，于是不停的部署啊，不停的发现问题。看来还是写点单元测试靠谱点啊，于是动手写。磕磕碰碰折腾了小两天时间，每次一部署或者svn提交，我就刷眼微博，关注下方寒战事，终于移植完成，修复了大量错误，并且赶紧了大量代码，有的时候觉得重写都比这块，但是修正代码过程发现我的代码的拙略，改后稍好一点，维护代码总是比捋起袖子从头干起费劲纠结一些。我想起了《&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://book.douban.com/subject/1467587/&quot;&gt;UNIX编程艺术&lt;/a&gt;》中写的&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;正如Brian Kernighan曾经说过的：&amp;ldquo;计算机编程的本质就是控制复杂度&amp;rdquo;，排错占用了大部分额的开发时间，弄出一个拿得出手的可用系统，通常与其说出自才华横溢的设计成果，还不如说是跌跌撞撞的结果。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;另外，又想起在修正gae版本的时候，遇到域名过期，突然不能访问了，想这是咋了，想了会才意识到域名过期啦。。。&lt;/p&gt;
&lt;p&gt;然后就是&amp;ldquo;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://micolog-tribe.qhm123.com/&quot;&gt;Micolog部落&lt;/a&gt;&amp;rdquo;了，这个是我用时最多，也是我稍微满意，稍微有点用户，也通过这个网站想了很多，学到很多的一个玩应。曾经写过《&lt;a rel=&quot;nofollow&quot;&gt;最近做一个网站过程中产生的一些想法和疑问&lt;/a&gt;》，那里简介写到&amp;ldquo;2010年11月06日动手，由于我不是美工，加之之前站点UI的失败，为此我特意看了几本Web设计的书。最终借用了Wordpress的Motion主题。开发平台使用Google App Engine，语言Python，框架Django，RCS使用Git，GitHub托管。主要利用平常的闲暇时间开发。&amp;rdquo;时间来看，这个也1年多了，而且我最近打算基于这个做点扩展。这个网站我修改了好多次，对于注册环节我那篇博文里说过，注册我改了能有5次左右。开发时间总共加起来可能并没有多少，但是为这个我想了很多事情。用户量依然很少，但是也算是个突破，有80左右个人，并且当初还有点小意思，有几个活跃用户，我算是最大的活跃用户了吧，我在想当一个东西的创始人不在活跃的时候，那么多半这个东西就完了。后来怎么没有在搞，&amp;ldquo;&lt;strong&gt;墙&lt;/strong&gt;&amp;rdquo;，堵住了micolog的用户，我这个基于micolog的聚合站也就黄了。&lt;/p&gt;
&lt;p&gt;然后就是沉寂了，很久没写出什么，过程中有一些小东西，大多是在别的东西基础上做的二次开发，而且都是未完成品，做完一个东西的时间是代码第一次完工时间的一倍。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://noodle.qhm123.com/&quot;&gt;面条&lt;/a&gt;&amp;rdquo;，我觉得这个名字很有爱，名字叫什么无所谓了，这其实是显示豆瓣书影音收藏轨迹的一个东西，并没有100%完成，但是可以用，在豆瓣ID那输入自己的豆瓣ID，然后点选书影音组合，然后点&amp;ldquo;点&amp;rdquo;，可以显示自己的书影音收藏。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://the10000.qhm123.com/about&quot;&gt;the10000&lt;/a&gt;&amp;rdquo;，名字来源是《&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://book.douban.com/subject/3688489/&quot;&gt;异类&lt;/a&gt;》这本书，想法来源同是这本书和&amp;ldquo;Dan计划：重新定义人生的10000个小时&amp;rdquo;，标语用的是v2ex下面的那个&amp;ldquo;Do have a faith in what you're doing&amp;rdquo;，这个东西的玩法是：用户在上面写下一个自己要实现的目标，然后自己记录自己为这个目标做了什么，做了多少小时，距离达到10000小时还差多久，你已经为你的梦想努力了多少小时。我第一个用户的目标是做这个网站10000小时，然而我做的一个扯淡的行动是，在我做了5个小时左右后，就再也没动过他。这个网站另一个很扯的地方是也采用了邀请码注册机制，而且未登录用户神马也看不到，所以我想到了这个是在知乎刚出那会做的，依然是前面所说的。忘了说了，这个是基于v2ex进行的二次开发。&lt;/p&gt;
&lt;p&gt;&quot;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://wiki.qhm123.com/&quot;&gt;Wiki&lt;/a&gt;&quot;，基于nancywiki做了一点二次开发，我之前博文写过一直想写个wiki，弄个我wiki，但是现在不做了。&lt;/p&gt;
&lt;p&gt;再有就是写过一些micolog的插件。写过一个Android的烂玩应。&lt;/p&gt;
&lt;p&gt;再有就是&quot;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://shopbook.sinaapp.com/&quot;&gt;网上书店&lt;/a&gt;&quot;，这个最初不是GAE上的，是之前学校写的网上书店，花了一会时间移植到SAE上，网上书店用的是Django写的，移植到SAE上很方便，但是网上书店用到了pylucene，SAE上没法搞，所以搜索和相关用pylucene做的推荐没法用，我主要写的后端，前端是一个同学写的，前端页面我基本没写，都交给同学了。这应该是我第一个纯Django的项目，之前在GAE上有一些不同和限制，写这个时候觉得Django开发是快，很爽，我们很快在我宿舍写完了。数据是豆瓣API搞下来的，用了memcache。总的来说挺糙的，不过和同学一起写还是有点意思的。&lt;/p&gt;
&lt;p&gt;本来想配图，但是配图太麻烦，太讨厌配图了，我采集到了花瓣上，地址这里，&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://huaban.com/boards/170195/&quot;&gt;http://huaban.com/boards/170195/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;写于两天前，这两天纠结在libvirt和xen上了。&lt;/p&gt;

&lt;p&gt;本文网址:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/31/play-with-old-things.html&quot;&gt;http://www.qhm123.com/2012/01/31/play-with-old-things.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/606943250/gming/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/gming/~8811415/606943250/6423441/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><category>summary</category><pubDate>Tue, 31 Jan 2012 12:01:01 +0800</pubDate><guid isPermaLink="false">http://www.qhm123.com/?p=1051547</guid><fs:srclink>http://www.qhm123.com/2012/01/31/play-with-old-things.html</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e4a5e8b966cd9d1f80fe58ccd235fa5f&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/gming/~8811415/606943250/6423441</fs:itemid></item><item><title>phoengap源码解析——插件机制，java和js代码互调用详解</title><link>http://item.feedsky.com/~feedsky/gming/~8811415/606943251/6423441/1/item.html</link><content:encoded>&lt;p&gt;看了眼phonegap的android实现的源码，其实还是挺简单的。出乎意料的是，我原以为js这套api的封装是使用addJavascriptInterface这个接口完成的，但是它是用了一种奇异的方法来实现的。我们一步一步慢慢说。&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://docs.phonegap.com/en/1.3.0/index.html&quot;&gt;http://docs.phonegap.com/en/1.3.0/index.html&lt;/a&gt;这个链接是phonegap的js api，可以看到api是分模块的，有Accelerometer，Camera，Capture，Compass，Connection，Contacts，Device，File，Geolocation，Media，Notification，Storage，Events，而每一个模块恰好是phonegap的一个plugin。而每一个plugin恰好大体对应一个java文件和一个js文件。在实际用phonegap开发的时候，我们引用的phonegap.js是经过编译整合后的文件，源码的framework/build.xml中有如下一段可以说明：&lt;/p&gt;
&lt;pre&gt;&amp;lt;!-- Create uncompressed JS file --&amp;gt;
&amp;lt;concat destfile=&quot;assets/www/phonegap-${version}.js&quot;&amp;gt;
 &amp;lt;fileset dir=&quot;assets/js&quot; includes=&quot;phonegap.js.base&quot; /&amp;gt;
 &amp;lt;fileset dir=&quot;assets/js&quot; includes=&quot;*.js&quot; /&amp;gt;
&amp;lt;/concat&amp;gt;&lt;/pre&gt;
&lt;p&gt;插件机制对应的java代码，主要在com.phonegap.api这个包里，所有的api对应模块的java实现都扩展了Plugin类，并且在src/com/phonegap/api/PluginManager.java中有public String exec(final String service, final String action, final String callbackId, final String jsonArgs, final boolean async)；方法，此方法里面调用plugin.execute方法，相应的plugin插件实现了execute方法，进行具体操作。对应js代码，插件机制以及公有基础的东西主要phonegap.js.base文件，每个单独的模块文件实现具体的操作。js代码里也有相应定义，&lt;br /&gt;
/**&lt;br /&gt;
* Execute a PhoneGap command.  It is up to the native side whether this action is synch or async.&lt;br /&gt;
* The native side can return:&lt;br /&gt;
*      Synchronous: PluginResult object as a JSON string&lt;br /&gt;
*      Asynchrounous: Empty string &quot;&quot;&lt;br /&gt;
* If async, the native side will PhoneGap.callbackSuccess or PhoneGap.callbackError,&lt;br /&gt;
* depending upon the result of the action.&lt;br /&gt;
*/&lt;br /&gt;
public String exec(final String service, final String action, final String callbackId, final String jsonArgs, final boolean async)；&lt;br /&gt;
可以看到api操作还提供了同步异步两种模式。这里的一些东西到这里可能还不是很明朗，稍后了解了java和js互掉的原理后就清楚了。&lt;/p&gt;
&lt;p&gt;但是这里，特别的对于Events有些特别，java与js交互上是不同于其它模块的方法且相对简单的，所以先说这个。在src/com/phonegap/DroidGap.java文件中可以看到，所有js的回调事件都是通过loadUrl然后执行一段javascript脚本来实现的，如&lt;/p&gt;
&lt;p&gt;生命周期回调：this.appView.loadUrl(&quot;javascript:try{PhoneGap.fireDocumentEvent('resume');}catch(e){};&quot;);&lt;br /&gt;
按钮响应：this.appView.loadUrl(&quot;javascript:PhoneGap.fireDocumentEvent('backbutton');&quot;);&lt;/p&gt;
&lt;p&gt;assets/js/phonegap.js.base相应代码为：&lt;/p&gt;
&lt;pre&gt;PhoneGap.fireDocumentEvent = function(type, data) {
    var e = document.createEvent('Events');
    e.initEvent(type);
    if (data) {
        for (var i in data) {
            e[i] = data[i];
        }
    }
    document.dispatchEvent(e);
};&lt;/pre&gt;
&lt;p&gt;好了，&lt;strong&gt;开始最重要的部分了&lt;/strong&gt;。phonegap使用的java与js互相调用的原理。phonegap实现的模型刚也说了，有同步和异步两种。js实现的api，所以是js先会调用java代码，然后再返回给js。对于同步的而言，就是js调用java，然后java返回一个结果作为返回值。对于异步的而言，可能js掉了很多java代码，但是立即返回，然后java代码执行结束后再回调js代码，这里就涉及到js调java，然后java再调用js。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;对于js调用java：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;js调用java的入口是通过在js中调用prompt方法，这很奇怪吧，这个方法本来是让浏览器弹出个输入框的。我当初找了好久也没发现phonegap到底怎么搞得的让js调用java的代码，后来看到一会觉得该是这个方法，但是这是一个浏览器的客户端自己的东西，而且怪异的是浏览器并没有弹出输入框，后来终于发现。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color:#ff0000;&quot;&gt;在DroidGap.java中有个hack，重载了WebviewClient的onJsPrompt方法&lt;/span&gt;&lt;/strong&gt;，然后执行了自己的逻辑。 也就是js调用prompt的时候，java端浏览器代码接受到这个，然后在响应的处理函数中根据传过来的参数，实现了一些特别的逻辑。可以从这个方法的注释上看出一二。&lt;/p&gt;
&lt;pre&gt;/**
* Tell the client to display a prompt dialog to the user.
* If the client returns true, WebView will assume that the client will handle the prompt dialog
* and call the appropriate JsPromptResult method.
* Since we are hacking prompts for our own purposes, we should not be using them for this
* purpose, perhaps we should hack console.log to do this instead!
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
...
}&lt;/pre&gt;
&lt;p&gt;方法里面的代码就如刚所说会根据传过来的参数，做相应处理，它会先判断是不是本地网页的请求，如果是，然后分几种情况。&lt;/p&gt;
&lt;pre&gt;// Calling PluginManager.exec() to call a native service using
prompt(this.stringify(args), &quot;gap:&quot;+this.stringify([service, action, callbackId, true]));
gap:
// Polling for JavaScript messages
gap_poll:
// Calling into CallbackServer
gap_callbackServer:
// PhoneGap JS has initialized, so show webview(This solves white flash seen when rendering HTML)
gap_init:&lt;/pre&gt;
&lt;p&gt;分别是，如果是prompt传过来的是gap:这样开头的字符串，那么就执行相应的java调用，&lt;strong&gt;Calling PluginManager.exec() to call a native service using prompt(this.stringify(args), &quot;gap:&quot;+this.stringify([service, action, callbackId, true]))&lt;/strong&gt;。gap_poll:和gap_callbackServer:是稍后要说到的java回调js使用的，gap_init:初始化处理相关的代码。如果其它情况，则构造一个Android的AlertDialog显示。&lt;/p&gt;
&lt;p&gt;然后phonegap就是这样，通过设置setWebChromeClient和setWebViewClient，重载了一些实现，控制了浏览器行为，实现了自己的很多逻辑。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;对于java回调js：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color:#ff0000;&quot;&gt; phonegap实现了一个回调服务器，服务器就是负责回调js代码的，服务器有一个js代码的队列&lt;/span&gt;&lt;/strong&gt;，在src/com/phonegap/CallbackServer.java文件中&lt;/p&gt;
&lt;pre&gt;/**
* The list of JavaScript statements to be sent to JavaScript.
*/
private LinkedList javascript;&lt;/pre&gt;
&lt;p&gt;服务器保存要回调的js的代码，供js客户端取回，这里java端是服务器端，js端是客户端，服务器端不可能请求客户端做啥，是b／s模型，所以phonegap实现了两种服务模型，一种是轮询，一种是XHR异步回调，也就是Ajax的模型。src/com/phonegap/CallbackServer.java是回调服务器的代码所在处。从类的注释中可以看到。&lt;/p&gt;
&lt;pre&gt;This class provides a way for Java to run JavaScript in the web page that has loaded PhoneGap.
The CallbackServer class implements an XHR server and a polling server with a list of JavaScript statements
that are to be executed on the web page.&lt;/pre&gt;
&lt;p&gt;CallbackServer提供的这两种模型，一种是XHR，一种是轮询，轮询很简单了，callbackserver服务器端，有一个保存回调js的列表，前面所说，然后每隔一段时间客户端的js会询问一次服务器，是否有需要回调的js，如果有则调用，然后每隔一段时再查询一次服务器。而基于XHR的，其实这个就是ajax用的机制了，js发起一个异步请求，然后服务器会在返回数据之前保持住这个连接，当返回数据就位后，服务器给请求客户端返回数据，然后关闭连接。然后客户端接受并且处理。&lt;/p&gt;
&lt;p&gt;刚说了服务器端的代码实现，现在来看一下客户端js的相关代码。&lt;/p&gt;
&lt;pre&gt;/**
* Internal function that uses XHR to call into PhoneGap Java code and retrieve any JavaScript
* code that needs to be run. This is used for callbacks from Java to JavaScript.
*/
PhoneGap.JSCallback = function() {
...
xmlhttp.open(&quot;GET&quot;, &quot;http://127.0.0.1:&quot;+PhoneGap.JSCallbackPort+&quot;/&quot;+PhoneGap.JSCallbackToken , true);
xmlhttp.send();
}&lt;/pre&gt;
&lt;p&gt;这个是XHR模型的代码，客户端js使用xhr请求服务器来获取js代码，进行回调。&lt;/p&gt;
&lt;pre&gt;/**
 * Internal function that uses polling to call into PhoneGap Java code and retrieve
 * any JavaScript code that needs to be run.  This is used for callbacks from Java to JavaScript.
 */
PhoneGap.JSCallbackPolling = function() {
...
    var msg = prompt(&quot;&quot;, &quot;gap_poll:&quot;);
    if (msg) {
        setTimeout(function() {
            try {
                var t = eval(&quot;&quot;+msg);
            }
            catch (e) {
                console.log(&quot;JSCallbackPolling: Message from Server: &quot; + msg);
                console.log(&quot;JSCallbackPolling Error: &quot;+e);
            }
        }, 1);
        setTimeout(PhoneGap.JSCallbackPolling, 1);
    }
    else {
        setTimeout(PhoneGap.JSCallbackPolling, PhoneGap.JSCallbackPollingPeriod);
    }
}&lt;/pre&gt;
&lt;p&gt;这个是轮询方式的，可以看到客户端每隔PhoneGap.JSCallbackPollingPeriod段时间，就请求一次服务器（通过prompt(&quot;&quot;, &quot;gap_poll:&quot;);）。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;至此js和java互调用，phonegap的plugin插件机制和api的实现原理就清楚了。另外phonegap源码的注释是很不错的。&lt;/p&gt;


&lt;h4&gt;相关阅读&lt;/h4&gt;
&lt;ul&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/25/phonegap-webapp-decompile-codereader.html&quot;&gt;PhoneGap，Web Application，反编译，代码阅读器——4in1游戏卡，寻觅童年游戏机快感&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/28/Android-compatibility-package-fragment-loader-actionbar.html&quot;&gt;Android兼容包及Fragment, Loader, ActionBar简介&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/16/android-tablet.html&quot;&gt;买了个Android平板——小破文章一篇&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/21/Android-backward-compatibility-problem.html&quot;&gt;Android前向兼容的几个问题&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/24/android-reader-pdf.html&quot;&gt;Android阅读器开发相关资料（上-pdf）&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/18/experience-android-4.0-nexus-s.html&quot;&gt;Nexus S体验Android4.0&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/25/android-reader-txt.html&quot;&gt;Android阅读器相关资料（下-txt）&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/07/17/android-learning-fifth-screen-things-resolution-denity.html&quot;&gt; Android学习小结（五）——Android手机屏幕那点事&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/13/SimpleTouchImageView-multi-scale-pan-android.html&quot;&gt;SimpleTouchImageView一个支持缩放平移及多点缩放的显示图片的Activity&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/02/6/fedora-16-x64-compile-android-4.0.3-source-code.html&quot;&gt;Fedora16_x64编译Android4.0.3源码&lt;/a&gt;&lt;/li&gt;
    
&lt;/ul&gt;
&lt;p&gt;本文网址:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/28/phonegap-source-code-analyzing-java-js-plugin-mechanism.html&quot;&gt;http://www.qhm123.com/2012/01/28/phonegap-source-code-analyzing-java-js-plugin-mechanism.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/606943251/gming/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/gming/~8811415/606943251/6423441/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><category>why</category><pubDate>Sat, 28 Jan 2012 11:45:35 +0800</pubDate><guid isPermaLink="false">http://www.qhm123.com/?p=1071302</guid><fs:srclink>http://www.qhm123.com/2012/01/28/phonegap-source-code-analyzing-java-js-plugin-mechanism.html</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e4a5e8b966cd9d1f80fe58ccd235fa5f&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/gming/~8811415/606943251/6423441</fs:itemid></item><item><title>PhoneGap，Web Application，反编译，代码阅读器——4in1游戏卡，寻觅童年游戏机快感</title><link>http://item.feedsky.com/~feedsky/gming/~8811415/606943252/6423441/1/item.html</link><content:encoded>&lt;p&gt;这篇文有点杂了，说了四部分，破折号后面纯扯了，如标题所示，分别是，title='PhoneGap，Web Application，代码阅读器，反编译&amp;mdash;&amp;mdash;4in1游戏卡，寻觅童年游戏机快感'; title[:title.index('&amp;mdash;')].split('，')&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PhoneGap&lt;/strong&gt;&lt;br /&gt; phonegap，我想搞手机开发的人应该都知道，使用phonegap可以用web开发的前端技术开发应用，也就是html,css,js开发应用，然后可以部署到多个主流平台，并且phonegap根据各个平台封装了统一的一套和手机交互的api。API包含Accelerometer，Camera，Capture，Compass，Connection，Contacts，Device，File，Geolocation，Media，Notification，Storage等。然后就是js那套事了。&lt;/p&gt;
&lt;p&gt;android的activity的生命周期算是android学习的第一课，那么关于phonegap的生命周期呢，分别是onDOMContentLoaded， window.onload，onNativeReady，onPhoneGapInit，onPhoneGapReady，onPhoneGapInfoReady，onDeviceReady，onResume，onPause，onDestroy。其中只有deviceready，pause，resume是提供给用户处理的，deviceready是java代码部分初始化完毕全部初始化完成，状态就绪触发，pause，resume是和android的onPause和onResume一样周期。&lt;/p&gt;
&lt;p&gt;phonegap的问题是性能问题，还是会卡，照原生应用差很多，而且对于有大量后台逻辑的很不适合，Services，线程啥的还是很麻烦，官网说像Dropbox这种，大量上传下载，同步逻辑的应用不适合搞。而且虽说是phonegap是跨平台，但是按照http://phonegap.com/apps应用列表来看，大部分都是只编译了ios平台的，只用phonegap确实有很多限制，之前看到有部分嵌入phonegap的，当前这种模型可能更多也更适合些。&lt;/p&gt;
&lt;p&gt;对于部分采用phonegap的，可能需要和其它原生Activity交互，传送数据什么的，phonegap提供了插件机制，github有维护插件列表，有个webintent，phonegap默认没有用js打开本地activity的方法，用别的activity启动phonegap的activity的时候也不能传参给js代码，这个可以方便做这些操作。最近版本的phonegap这个webintent插件失效了，phonegap插件机制有所更改，需要做一点更改，可以看这里https://github.com/phonegap/phonegap-plugins/pull/335。关于phonegap plugin，其实大部分的api都是基于插件机制做的，但是关于plugin的相关文档很不好，如果想写phonegap插件，还是看别的插件和源码中插件那部分，我看了下其实不复杂。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web Application&lt;/strong&gt;&lt;br /&gt; 分四部分，内容大部分来自android dev guide，其实Web Application就是应用里面嵌入个浏览器，用浏览器呈现网页罢了，不过是文艺的说法。&lt;/p&gt;
&lt;p&gt;1. Targeting Screens from Web Apps&lt;br /&gt; 又是屏幕问题，Android的设备多种多样，重要的是dpi也不一样，你说电脑显示器也很多，各种各样，但是dpi是一致的。&lt;br /&gt; 对于Web Application，Android系统提供了一些对于分辨率的支持，html代码定义一些meta，webview会识别，然后做相应调整。&lt;/p&gt;
&lt;pre&gt;&amp;lt;meta name=&quot;viewport&quot;
      content=&quot;
          height = [pixel_value | device-height] ,
          width = [pixel_value | device-width ] ,
          initial-scale = float_value ,
          minimum-scale = float_value ,
          maximum-scale = float_value ,
          user-scalable = [yes | no] ,
          target-densitydpi = [dpi_value | device-dpi |
                               high-dpi | medium-dpi | low-dpi]
          &quot; /&amp;gt;&lt;/pre&gt;
&lt;p&gt;简要说明，默认viewport的宽是800像素，如果设置了，设置多少就是多少，如果设置成device-width(height)就是手机分辨率的像素数。user-scalable是否允许用户缩放。另外js中可以通过window.devicePixelRatio取得设备像素密度比值。css可以通过media的-webkit-device-pixel-ratio属性来加载相应的css。&lt;/p&gt;
&lt;p&gt;2. Building Web Apps in WebView&lt;br /&gt; 总结起来一句话用WebView，这个类仔细看看其实挺好玩，涉及到另两个WebViewClient和WebChromeClient，也很好玩。&lt;/p&gt;
&lt;p&gt;3. Debugging Web Apps&lt;br /&gt; Debuging好说，就是用console.log之类的，会在Logcat上打印。&lt;/p&gt;
&lt;p&gt;4. Best Practices for Web Apps&lt;br /&gt; 其实这也没啥东西。&lt;/p&gt;
&lt;p&gt;总结起来其实没啥东西。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;反编译&lt;/strong&gt;&lt;br /&gt; ------&lt;br /&gt; http://code.google.com/p/android-apktool/&lt;br /&gt; 主要用来看反编译出来的资源文件。&lt;/p&gt;
&lt;p&gt;http://code.google.com/p/dex2jar/&lt;br /&gt; 配合JD（Java decompiler），主要用来看反编译出来的代码。代码被混淆过的话，看了也看不出来啥，有的时候可以看看它用了什么库。&lt;/p&gt;
&lt;p&gt;用法都很简单，另外，可以用hierarchyviewer来看Activity的布局，需要手机是Debug模式的，这个不是说手机root后就可以用。手机要是Debug模式的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5分钟构建代码阅读器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;刚看到一条微博，《简讯：为庆祝 Vim 编辑器的20周年，Applidium 项目团队把 Vim 移植到 iOS 了》。&lt;br /&gt; 然后有人回复：&lt;strong&gt;放过程序员吧！别人买一ipad开心玩游戏，我们买一个ipad到处写程序啊！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; ~~~~&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;代码阅读器，这其实是一个需求。&lt;/p&gt;
&lt;p&gt;最基础的需求是代码高亮，这个其实巨简单，可以写成web application，可以用phonegap，现成的基于js的代码高亮工具有很多，搞技术博客的人肯定知道一堆这种js脚本，我看了几个简单的代码阅读器，都是基于google的prettify的。&lt;/p&gt;
&lt;p&gt;读取文件内容到html，然后js高亮。读取文件可以java读取然后给html，也可以用phonegap的File API，用了下File API，很简单也好用。如果想要文件浏览器之类的，可以用OpenIntents的OI文件管理器，http://www.openintents.org/en/，然后就完了。可以说是5分钟完成代码阅读器应用。&lt;/p&gt;
&lt;p&gt;另外，通过反编译，看到有的原生实现的用到了RSyntaxTextArea这个库，关于Android重点在MultiAutoCompleteTextView.Tokenizer这个东西，大概看了一眼。&lt;/p&gt;
&lt;p&gt;但是我觉得，代码阅读的关键是，交叉引用的跳转，管有代码高亮只实现了一半，研究了半天没找到什么解决方案。过程中找到ace editor这个玩应，挺强大，但是对平板触摸设备不兼容，虽然有ipad branch，但是不好用。&lt;/p&gt;
&lt;p&gt;结：这篇博文有点扯了，写的很粗，过年Happy下～&lt;/p&gt;

&lt;h4&gt;相关阅读&lt;/h4&gt;
&lt;ul&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/28/phonegap-source-code-analyzing-java-js-plugin-mechanism.html&quot;&gt;phoengap源码解析——插件机制，java和js代码互调用详解&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/28/Android-compatibility-package-fragment-loader-actionbar.html&quot;&gt;Android兼容包及Fragment, Loader, ActionBar简介&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/16/android-tablet.html&quot;&gt;买了个Android平板——小破文章一篇&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/21/Android-backward-compatibility-problem.html&quot;&gt;Android前向兼容的几个问题&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/24/android-reader-pdf.html&quot;&gt;Android阅读器开发相关资料（上-pdf）&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/18/experience-android-4.0-nexus-s.html&quot;&gt;Nexus S体验Android4.0&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/25/android-reader-txt.html&quot;&gt;Android阅读器相关资料（下-txt）&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/07/17/android-learning-fifth-screen-things-resolution-denity.html&quot;&gt; Android学习小结（五）——Android手机屏幕那点事&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/13/SimpleTouchImageView-multi-scale-pan-android.html&quot;&gt;SimpleTouchImageView一个支持缩放平移及多点缩放的显示图片的Activity&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/02/6/fedora-16-x64-compile-android-4.0.3-source-code.html&quot;&gt;Fedora16_x64编译Android4.0.3源码&lt;/a&gt;&lt;/li&gt;
    
&lt;/ul&gt;
&lt;p&gt;本文网址:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/25/phonegap-webapp-decompile-codereader.html&quot;&gt;http://www.qhm123.com/2012/01/25/phonegap-webapp-decompile-codereader.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/606943252/gming/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/gming/~8811415/606943252/6423441/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><category>when</category><pubDate>Wed, 25 Jan 2012 18:08:48 +0800</pubDate><guid isPermaLink="false">http://www.qhm123.com/?p=1082174</guid><fs:srclink>http://www.qhm123.com/2012/01/25/phonegap-webapp-decompile-codereader.html</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e4a5e8b966cd9d1f80fe58ccd235fa5f&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/gming/~8811415/606943252/6423441</fs:itemid></item><item><title>写博二年总结</title><link>http://item.feedsky.com/~feedsky/gming/~8811415/606943253/6423441/1/item.html</link><content:encoded>&lt;p&gt;写博两个年头了，上一年的总结在&lt;a rel=&quot;nofollow&quot;&gt;这里&lt;/a&gt;，现在开始动笔写今年的。这几天看&amp;ldquo;麦韩方&amp;rdquo;博文论战，看的很爽，点亮了节日的气氛，也骚动了我写博的心弦，虽然内容完全是不同的领域。&lt;/p&gt;
&lt;p&gt;翻看过去一年的博文，我越回想越翻看，越觉得有点矫情，这很令人讨厌。矫情，犹豫不决，然后不动手，结果一年什么也没做。该是立刻动手，都动手搞起来。另外，翻的过程中，发现有些东西觉得自己像是知道了很多，但是今天回头一翻，发现其实自己不过才接触一年，要自省。&lt;/p&gt;
&lt;p&gt;翻了一遍第二年的博文，一共40篇左右，选出几篇喜欢的或者有点意义的，下面列出来。&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;十问十答&lt;/a&gt;&lt;br /&gt; 文体有点意思，里面写&amp;ldquo;Google的理念是只应有Browser和Game，我也一直这样认为。&amp;rdquo;，恰巧刚写过的一篇博文也提到过。&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;Android学习小结（一）&amp;mdash;&amp;mdash;由Activity说开去&lt;/a&gt;&lt;br /&gt; Android文第一篇，纯纪念。&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;wiki+写&lt;/a&gt;&lt;br /&gt; 夭折的wiki，断断续续的想弄wiki，现在发誓不弄了！&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;养植物与获取信息&lt;/a&gt;&lt;br /&gt; 很有feel，喝奶，养植物。植物还活着，养了8个月了。说养，其实一直没怎么管，回老家前，离开宿舍时，给它浇了点水。平时基本上我很难想到给它浇水，因为它被我丢在宿舍阳台里，偶尔想起也懒得出去弄点水，给它浇一下，仙人掌果然强悍阿，还坚挺的活着。&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;我说&lt;/a&gt;&lt;br /&gt;整理的豆瓣上说过的话，后来基本没在豆瓣上说过话，还是喜欢豆瓣的书影音。&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;回想微软创新杯比赛点滴&lt;/a&gt;&lt;br /&gt; 那些年，我们一起参加的比赛。&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;目标&lt;/a&gt;&lt;br /&gt; &amp;ldquo;这些想法让我也产生了一个冲动，就是我是一个目的明确的人。然而渐渐的，我想到这并不是真的。我想到我经常穿梭于Web上的各种链接，我时常的目的是打开Google，用它搜索点什么，然而我最初的目的就随着我一次一次点击链接而渐渐远去。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;update&lt;/a&gt;&lt;br /&gt; 写于2011.09.06，上一篇2011.07.17，间隔最旧的下一篇。&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;2011-2012&lt;/a&gt;&lt;br /&gt; 年度总结&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;用html5的canvas写了个书籍翻页效果&lt;/a&gt;&lt;br /&gt; 玩票html5&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;看了一眼，去年的总结也是在腊月二十九写的，今年恰巧也是这天，过年了，春节快乐～&lt;/p&gt;

&lt;h4&gt;相关阅读&lt;/h4&gt;
&lt;ul&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/01/31/blogging-one-year-summary.html&quot;&gt;写博一年总结&lt;/a&gt;&lt;/li&gt;
    
&lt;/ul&gt;
&lt;p&gt;本文网址:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/22/blogging-two-year-summary.html&quot;&gt;http://www.qhm123.com/2012/01/22/blogging-two-year-summary.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/606943253/gming/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/gming/~8811415/606943253/6423441/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><category>summary</category><pubDate>Sun, 22 Jan 2012 10:54:12 +0800</pubDate><guid isPermaLink="false">http://www.qhm123.com/?p=1082131</guid><fs:srclink>http://www.qhm123.com/2012/01/22/blogging-two-year-summary.html</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e4a5e8b966cd9d1f80fe58ccd235fa5f&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/gming/~8811415/606943253/6423441</fs:itemid></item><item><title>用html5的canvas写了个书籍翻页效果</title><link>http://item.feedsky.com/~feedsky/gming/~8811415/606943254/6423441/1/item.html</link><content:encoded>&lt;p&gt;之前在Android上写了个书籍翻页效果，主要也是用到里面的canvas进行绘图和变换，昨天想玩下html5里的canvas，然后把这个效果移植过来了一下。&lt;/p&gt;
&lt;p&gt;2d画图那套东西，好像大体上都差不太多，也就是颜色，字体，绘制图形，图片，文字，组合，变型，裁剪等这些东西，主要是canvas这个类，它是画板，详情可以参看文后的几个链接，这里说下html5的canvas和Android中的canvas的区别。&lt;/p&gt;
&lt;p&gt;html5的canvas这里几乎把所有接口都集中在了canvas的context上，要先获取canvas的context，然后操作context进行几乎一切操作。所有画笔轮廓字体的设定都是全局的，而不像Android中是通过相应的笔刷和设定通过传参进去的，canvas本身不维护这些属性。对于组合变换这些属性两者是都有维护的，canvas都有状态这个重要的东西，被设计这一个栈，可以说是状态栈，通过save()，restore()还进行状态保存恢复，这很重要，也很好用，保存状态后，你可以玩命折腾，然后一个restore()又恢复了之前的状态，从新开始。&lt;/p&gt;
&lt;p&gt;移植过程中碰到很多api上的细节不同，纠结掉不少时间，而且自己js水平很水，写的很白。文本的折行分页处理没搞，主要是个demo，遗憾的是一些动画效果和细节没有实现，细节部分是自己的懒惰问题，加之昨天写到小指很痛。动画效果是由于最开始我没有了解canvas的动画机制，然后就开始上手写代码，最后写出来到实现动画的时候，发现和Android动画机制很不一样，我尝试了一下，暂时没想到什么解决方案，于是作罢。也许这些问题稍候会完善一下。&lt;/p&gt;
&lt;p&gt;canvas实现的书籍翻页效果地址：&lt;a rel=&quot;nofollow&quot;&gt;http://www.qhm123.com/static/pages/pager.html&lt;/a&gt;（源码右键查看）&lt;/p&gt;
&lt;p&gt;修正：右下角翻页背面效果已修正。注意几点：context.rotate(angel)这个参数是弧度，不是角度；rotate没有提供以某一固定点旋转接口，默认是以点(0,0)作旋转的；变换是逆序的（The transformations must be performed in reverse order.）&lt;/p&gt;
&lt;p&gt;一些资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html&quot;&gt;http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/cn/Canvas_tutorial&quot;&gt;https://developer.mozilla.org/cn/Canvas_tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/HTML-canvas-guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010542-CH1-SW1&quot;&gt;http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/HTML-canvas-guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010542-CH1-SW1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;本文网址:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/21/html5-canvas-book-page-effect.html&quot;&gt;http://www.qhm123.com/2012/01/21/html5-canvas-book-page-effect.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/606943254/gming/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/gming/~8811415/606943254/6423441/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><category>how</category><pubDate>Sat, 21 Jan 2012 10:16:35 +0800</pubDate><guid isPermaLink="false">http://www.qhm123.com/?p=1051350</guid><fs:srclink>http://www.qhm123.com/2012/01/21/html5-canvas-book-page-effect.html</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e4a5e8b966cd9d1f80fe58ccd235fa5f&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/gming/~8811415/606943254/6423441</fs:itemid></item><item><title>xen,virt-manager简介</title><link>http://item.feedsky.com/~feedsky/gming/~8811415/606943255/6423441/1/item.html</link><content:encoded>&lt;p&gt;&lt;strong&gt;Xen&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Xen到底是个啥，是个软件，还是个虚拟化技术，应该说Xen是个虚拟化解决方案吧。Xen的全称应该是Xen hypervisor，是一套开源的虚拟化解决方案，允许计算机硬件同时运行多个操作系统。应该都用过vmware, virtualbox之类的虚拟机软件，xen与它们的不同之处在于，&amp;ldquo;VMware ESX服务器的架构是建立在直接执行（直接在硬件上运行用户级的虚拟机编码）和二进制译码（对特权级别编码进行动态编译）的基础上的。从根本上说，它把一个完整的X86平台导出到虚拟机上，ESX服务器可以使大多数能在X86上执行的操作系统都能在虚拟机上运行，而不需要进行任何修改。Xen的架构中使用了一种叫Para虚拟化技术 (Para virtualization) ，对虚拟出来的客户操作系统（Guest OS）进行修改，使它知道它是在虚拟环境下运行。&amp;nbsp;&amp;rdquo;（引号部分摘自网络）。&lt;/p&gt;
&lt;p&gt;使用Xen技术的有哪些，为人熟知的VPS提供商Linode就是用的Xen技术，这也应该是都知道的。（我曾经用过一次基于OpenVZ的VPS，据说基于OpenVZ的VPS没有基于Xen的VPS好，可以给Xen的技术的好提供一个佐证），另外Xen网站上写着Amazon的云服务AWS也是基于Xen的，还有Rackspace，这些东西有的玩票性质的玩过，有的耳闻目见过，都是不错的货。&lt;/p&gt;
&lt;p&gt;Xen hypervisor包含三个部分，Xen Hypervisor，Domain 0（Dom0），&amp;nbsp;DomainU（DomU）。Xen hypervisor直接跑在硬件上，是所有客户操作系统硬件请求的接口，位于硬件之上，客户操作系统之下。Domain-0是不同于DomainU拥有直接控制硬件特权的特权域，它是在系统启动时由Xen hypervisor启动的，它可以是除了Windows以外的任何系统，刚说了它有特权，所以它可以控制所有其他的客户域，比如开关，I/O请求等。客户域（DomU）由Dom0控制，可以是半虚拟化（Paravirtualization）运行修改过的操作系统，也可以是（Hardware Virtual Machine）运行未经修改过的操作系统。&lt;/p&gt;
&lt;p&gt;安装Xen可以通过编译内核，或者apt-get，yum方式。我在Ubuntu下用apt-get方式安装过，但是Graphic Console不知道为什么是黑屏的，后来换了Fedora用yum装好，很方便。&lt;/p&gt;
&lt;p&gt;一些资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://book.51cto.com/art/201003/188412.htm&quot;&gt;Xen虚拟化技术&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://share.blog.51cto.com/attachment/201112/278008_1323663902.pdf&quot;&gt;Xen内部普及资料&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.xen.org/files/Marketing/WhatisXen.pdf&quot;&gt;http://www.xen.org/files/Marketing/WhatisXen.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.xen.org/files/Marketing/WhyXen.pdf&quot;&gt;http://www.xen.org/files/Marketing/WhyXen.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.deepvps.com/xen-vmware-openvz-virtuozzo.html&quot;&gt;Xen、Vmware、OpenVZ和Virtuozzo四大虚拟软件区别&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;virt-manager&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;virt-manager是用来管理虚拟机的可视化桌面应用，算是个通用的虚拟机管理软件，可以管理qemu，xen，kvm虚拟机，当然使用xen提供的xm工具也可以管理，virt-manager提供了一些更方便的工具和可视化的操作方式。&lt;/p&gt;
&lt;p&gt;virt-manager是基于libvirt的python-binding写的软件（&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://libvirt.org/index.html&quot;&gt;libvirt&lt;/a&gt;是一套用来和很多虚拟机交互的一套api），界面使用了了GTK+和Glade。&lt;/p&gt;
&lt;p&gt;libvirt是重点，使用c语言写的，提供了很多语言的绑定，&amp;ldquo;Libvirt是一个软件集合，便于使用者管理虚拟机和其他虚拟化功能，比如存储和网络接口管理等等。这些软件包括一个API库、一个daemon（libvirtd）和一个命令行工具（virsh）。Libvirt的主要目标是：提供一种单一的方式管理多种不同的虚拟化提供方式和hypervisor。比如，命令行&amp;ldquo;virsh list -- all&amp;rdquo;可以列出所有任何支持的、基于hypervisor的虚拟机，这就避免学习、使用不同hypervisor的特定工具。使用libvirt，意味着使用virsh、virt-manager、virt-install等工具管理虚拟机，这些工具都是围绕着libvirt开发的。人们不再直接使用基于XEN的xm、或是qemu/qemu-kvm等二进制工具。&amp;rdquo;（引号部分摘自网络）&lt;/p&gt;
&lt;p&gt;一些资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://virt-manager.org/codestructure.html&quot;&gt;virt-manager代码结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://libvirt.org/python.html&quot;&gt;libvirt Python API bindings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ibm.com/developerworks/cn/linux/l-libvirt/&quot;&gt;Libvirt 虚拟化库剖析&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;相关阅读&lt;/h4&gt;
&lt;ul&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/01/6/linux-cluster-nis-introduction-config.html&quot;&gt;Linux高性能集群常用服务简介与配置（一）——NIS（网络信息系统）&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/01/21/setup-ubuntu10-10-summary.html&quot;&gt;安装Ubuntu10.10小记&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/01/9/linux-cluster-heartbeat-introduction-config.html&quot;&gt;Linux高性能集群常用服务简介与配置（三）——Heartbeat&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/01/8/linux-cluster-nfs-introduction-config.html&quot;&gt;Linux高性能集群常用服务简介与配置（二）——NFS（网络文件系统）&lt;/a&gt;&lt;/li&gt;
    
&lt;/ul&gt;
&lt;p&gt;本文网址:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/19/xen-virt-manager-intro.html&quot;&gt;http://www.qhm123.com/2012/01/19/xen-virt-manager-intro.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/606943255/gming/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/gming/~8811415/606943255/6423441/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><category>what</category><pubDate>Thu, 19 Jan 2012 18:21:52 +0800</pubDate><guid isPermaLink="false">http://www.qhm123.com/?p=1052364</guid><fs:srclink>http://www.qhm123.com/2012/01/19/xen-virt-manager-intro.html</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e4a5e8b966cd9d1f80fe58ccd235fa5f&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/gming/~8811415/606943255/6423441</fs:itemid></item><item><title>买了个Android平板——小破文章一篇</title><link>http://item.feedsky.com/~feedsky/gming/~8811415/606943256/6423441/1/item.html</link><content:encoded>&lt;p&gt;想买个Android平板好久了，最早想买iPad，拖了好久，后来想在做Android开发，买个Android平板拿来还能写点程序。当然主要还是没钱，要不想买个iPad，再买个xoom，再买个kindle fire。。。&lt;/p&gt;
&lt;p&gt;最近买了dell streak 10 pro，尽管网上评测问题很多，如我的使用体验，屏幕网格很明显，重力感应不灵敏，经常诡异的横竖屏切换，但没有出现无声问题。买的原因是便宜不到2000元，Android 3.2系统，之前也说了，想那这个板子做点东西，有一些屏幕还可以的板子不是3.x系统，当然我的理想产品是xoom，但是还是贵了几百，虽然已经降了不少了。&lt;/p&gt;
&lt;p&gt;这个板子的还有一个让我让我郁闷的问题，它屏蔽了Google的服务应用，gmail，gtalk，android market，帐号同步啥的都用不了，我纳闷那些不让装Google应用的平板制造商是咋想的，脑袋被门挤了。作为一个谷粉，这是让我不能忍得，而且预装了一堆垃圾不能卸载的应用，这个板子还只在中国发售，所以xda上研究这个很少，有个ChimeraDroid版本的Rom，这个较为原生干净，&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://forum.xda-developers.com/showthread.php?t=1342927&quot;&gt;http://forum.xda-developers.com/showthread.php?t=1342927&lt;/a&gt;。机锋坛子里有个配图的&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bbs.gfan.com/android-3407021-1-1.html&quot;&gt;http://bbs.gfan.com/android-3407021-1-1.html&lt;/a&gt;，我觉得刚开始不懂的时候看一下还不错，但其实刷这个很简单，看xda的那个帖子就简单几步，机锋坛子里的搞的那个费劲。&lt;/p&gt;
&lt;p&gt;用了几天的平板，感觉不能横竖平切换的软件很垃圾，这个不像手机，感觉平板横屏的使用场景更多。不能横屏的软件去死。手指操作主要集中在左右两个边缘中间偏上位置比较方便，我不喜欢太大范围内的移动手臂，甚至小范围内的。&lt;/p&gt;
&lt;p&gt;视频播放器不给力，&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://vplayer.net/&quot;&gt;http://vplayer.net/&lt;/a&gt;，我用这个效果很不错，但是解码还是不是很给力，硬解不给力应该是cpu的关系，我对这个也不是很清楚，之前看了看&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://ffmpeg.org/&quot;&gt;FFmpeg&lt;/a&gt;这个项目，感觉播放个视频确实还是挺麻烦的，这个之前我还发了它的耻辱柱，上面有QQ播放器，暴风什么的，都用了这个开源库，但是没有开放源代码。后来用到这个&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bbs.gfan.com/android-3497668-1-1.html&quot;&gt;http://bbs.gfan.com/android-3497668-1-1.html&lt;/a&gt;，效果非常不错。&lt;/p&gt;
&lt;p&gt;感觉平板10寸的平板还是躺在床上上网，看视频的利器，躺在床上，看看还不错，要不然，坐在电脑前，摆弄这个我觉得还挺傻叉的，主要是老坐在电脑前很累。&lt;/p&gt;
&lt;p&gt;感觉专门为平板上定制，根据平板特性做的应用太少了，也没有个好用的市场。&lt;/p&gt;
&lt;p&gt;记得以前我还说过我一直觉得这世界上只有网页和游戏，我已经用不到什么应用了。现在想想，应用的缺点在于安装，需要下载安装，不像网页打开就看，这是一个门槛，但是最近又有点觉得网站神马的弱爆了，特别是在Android平板上，浏览体验感觉很差劲，浏览器分块空白现象很严重，而且很多网站没有为平板做优化或者专门的平板网页版，链接点起来很不准。&lt;/p&gt;
&lt;p&gt;而且做网页真心比做软件简单很多，软件比网页难很多，原来我觉得做那种大规模访问的站点很酷，但是我渐渐发现其实大规模站点的支撑还是靠软件来完成的，其实这个世界没有软件与网站的区别，而只有前端与后端的区别，我觉得前端发展到极致就是酷毙了的交互体验，后端就是抗住各种压力稳定性的东西接近机器的东西，中间的业务逻辑神马的是很无聊的。&lt;/p&gt;
&lt;p&gt;小破文章一篇 哈 ; )&lt;/p&gt;

&lt;h4&gt;相关阅读&lt;/h4&gt;
&lt;ul&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/28/Android-compatibility-package-fragment-loader-actionbar.html&quot;&gt;Android兼容包及Fragment, Loader, ActionBar简介&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/28/phonegap-source-code-analyzing-java-js-plugin-mechanism.html&quot;&gt;phoengap源码解析——插件机制，java和js代码互调用详解&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/21/Android-backward-compatibility-problem.html&quot;&gt;Android前向兼容的几个问题&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/24/android-reader-pdf.html&quot;&gt;Android阅读器开发相关资料（上-pdf）&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/18/experience-android-4.0-nexus-s.html&quot;&gt;Nexus S体验Android4.0&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/12/25/android-reader-txt.html&quot;&gt;Android阅读器相关资料（下-txt）&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/07/17/android-learning-fifth-screen-things-resolution-denity.html&quot;&gt; Android学习小结（五）——Android手机屏幕那点事&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2011/11/13/SimpleTouchImageView-multi-scale-pan-android.html&quot;&gt;SimpleTouchImageView一个支持缩放平移及多点缩放的显示图片的Activity&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/02/6/fedora-16-x64-compile-android-4.0.3-source-code.html&quot;&gt;Fedora16_x64编译Android4.0.3源码&lt;/a&gt;&lt;/li&gt;
    
    &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/25/phonegap-webapp-decompile-codereader.html&quot;&gt;PhoneGap，Web Application，反编译，代码阅读器——4in1游戏卡，寻觅童年游戏机快感&lt;/a&gt;&lt;/li&gt;
    
&lt;/ul&gt;
&lt;p&gt;本文网址:&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.qhm123.com/2012/01/16/android-tablet.html&quot;&gt;http://www.qhm123.com/2012/01/16/android-tablet.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/606943256/gming/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/gming/~8811415/606943256/6423441/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><category>when</category><pubDate>Mon, 16 Jan 2012 14:25:10 +0800</pubDate><guid isPermaLink="false">http://www.qhm123.com/?p=1052262</guid><fs:srclink>http://www.qhm123.com/2012/01/16/android-tablet.html</fs:srclink><fs:srcfeed>http://pipes.yahoo.com/pipes/pipe.run?_id=e4a5e8b966cd9d1f80fe58ccd235fa5f&amp;_render=rss</fs:srcfeed><fs:itemid>feedsky/gming/~8811415/606943256/6423441</fs:itemid></item></channel></rss>
