<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky1.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:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.hackcraft.cn" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/HACKCRAFT" type="application/rss+xml"></fs:self_link><lastBuildDate>Thu, 17 Nov 2011 15:26:18 GMT</lastBuildDate><title>HACKCRAFT</title><description>展开翅膀的猫Mi只为凌于九天!</description><link>http://www.mielf.net</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><xhtml:meta name="robots" content="noindex"></xhtml:meta><language>en</language><pubDate>Fri, 18 Nov 2011 15:37:58 GMT</pubDate><item><title>我连月更都算不上了</title><link>http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363501/5913670/1/item.html</link><content:encoded>&lt;p&gt;你有没有觉得，有段时间你会特别喜欢回忆。&lt;/p&gt;
&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-514&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;·～…呼…＾喵～＾呜…～呼··喵……呼～呜呜＾…＾～呼～·呼…～…喵＾呜·呜＾呼…·呼…咪＾呜喵·～…呼…·＾喵＾……呼呼呼～喵·～咪～呼＾喵···…呼＾呼咪…·～…呜…呜＾喵·＾＾呼＾＾＾～·喵呼～…·～咪…喵·呜喵喵咪…喵呜…呼·＾·咪·呼咪··呜～呼…呼咪～～呜·～·呜咪呜…＾喵呼…·＾…咪＾呜喵·喵呼～…··……～呼呼咪＾·………呼～呜呜＾…＾…咪…呜＾喵…·～＾＾…··＾·咪呼…呼＾呼……喵呼呜咪～～喵喵呼呜喵…呜＾～·咪＾呼呜＾喵呼·～…呼…＾喵～＾呜…～呼··喵……呼～呜呼咪＾·………呜呼呼呜…喵＾呜·呼喵呼…＾＾～·呼…～·呜呼＾…呜＾呼＾呼……呜呼呼呜·呜…呼喵·＾～＾咪咪呼呜＾喵～…＾咪…喵呜·＾＾呼咪…呼呼呜喵…喵＾呜·呜＾＾…·呼～～呜＾呼…～呼～～呼咪＾·………呜呼呼呜…·＾呼～＾～…·～咪…咪呜～呼·…＾…呜呼呜～··…呜喵·～呼咪喵喵喵·～咪呜咪呜·呜…～…呼咪呜·呜…～…呼咪呜·呜…～…呼咪呜·呜…～…呼咪呜·呜…～…呼咪呜·呜…～…呼咪呜·呜…～…呼咪喵喵喵·～咪呜咪喵咪～咪·＾··呼咪··呼呜～＾咪＾～～＾咪＾·咪咪…呼呼喵咪＾咪呼呼…＾～咪·…咪……喵··咪·～呼呜喵·…·呼＾＾·呼喵·＾～咪呜咪·…～·～＾·喵呼喵呼…呜＾呼…＾～咪·咪…＾＾呜·…＾…咪～喵＾咪呼·咪咪…呼呼喵咪＾咪呼呜咪·…～·呜咪呼…·＾呜＾～＾呼呜呼·呜…＾＾呜…呼呜＾·…咪呼·呜＾呜·～咪～呜呜·喵…呼…呼呜＾喵～呼呼呜＾喵喵·～…·＾·咪呼呜…·＾＾～…呼呜·…·＾·…呜～呼…呼咪呼＾＾…呜·呜…呼·呼咪·…呜…～呼＾呼··呜……咪呜·＾·咪呼…咪呼·～·喵咪…呼呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·＾咪·～呼喵喵·喵…喵＾呜·呜·～＾～＾呼·呼呜呜…·＾＾喵·＾·…呜…～…呜＾～·喵…呼·＾呜喵＾＾咪～呼呼·喵……咪呼咪呜～呼…呼咪…咪＾·喵·喵＾呜…·＾呼＾喵呼呼呜·＾…·呜…呼咪＾咪～·喵＾呼咪＾呜～…～咪＾·呼呜＾·～＾呜咪·…～·～…＾咪呼咪·…呜……咪＾·喵·喵＾呜…＾咪＾…～…呼…···…～咪＾·呼呜＾·～＾呜喵·～呼·喵＾呼＾·咪～＾呼咪呼呜＾喵～·…咪·呼··＾…·呼～…呼喵＾…喵＾呼…呼喵咪…＾呼呼～呼··…～咪＾·呼呜＾·～＾呜咪·…～·～…呼…＾咪…＾呜＾呼咪··～……＾呼～·～呼…呼喵呜喵喵咪…喵呜～呜喵喵～喵咪喵喵呜喵呼呜呜…·＾呼～呼··…＾咪呜呼呜·……～咪呜咪·…～·…＾…呜呜＾～…·…呼呜呼＾喵……呼～呜呼喵……喵＾～呜呼咪～…喵＾呜～呜＾喵…·＾呼…呜…～·呜咪＾··＾＾··＾～呼＾…喵…～咪呼呼·～咪…呜…呜喵·…呜·呜＾·～＾呜呜·…咪…咪＾·喵·喵＾呜…＾喵呼…·＾呼＾＾＾～…·…～咪·～呼…呼咪…咪呜·呜·～＾…喵呼呜喵…呜呼～·＾～呜…～…呼＾·呜呜＾～…～…＾呼喵…喵呼呜…呜～咪…呜～…呜咪咪…呜咪喵呜·呜＾呜·呜咪～喵＾咪呼·咪……＾·喵～＾呜…呜咪·…～·咪咪…·呜·呜…·＾～～··…·喵…·＾＾～呼…呜呼呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼呼～＾呜咪～～呼～呜～呼…呼咪…咪＾·喵·喵＾呜…·＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪…呼咪＾呜～·呼呼·…呼呜～＾咪＾呼呼·＾咪…喵＾呜·呜＾呼＾喵呼…咪呜＾呼·咪…＾喵呜＾…＾＾咪呼·＾咪～·呜……咪呜～呼…呼咪～～呜＾呼…·…＾咪··＾…喵…～＾·呜··～咪呜喵··……～＾…咪呼呜咪…＾…呜·＾喵呜＾～…～喵＾咪呼·喵＾＾呼呜·喵＾·咪呼…＾·呜·…呼…＾＾·……～咪呼～呼～呜…喵＾呜·呼呜～··…呼·＾咪～·呜……咪呜·咪·＾＾呼咪＾呜～…～呼…＾·咪～…·咪…喵呜～·……＾＾呼＾咪咪＾＾～呜喵喵咪…喵呜～呜喵喵～喵咪喵喵呜喵呜～呼…呜咪呼…呼·呼·喵咪呼呜呼呜呼·～咪…咪呜＾呼………～＾呼咪呜…～呼呼·呼～～…喵＾呜·呜·呼·喵…～咪呜～咪·……＾呼···…呼＾呼咪＾呜喵……呼呜咪＾喵呜＾～…呼喵呼＾～·…＾…咪··…·咪咪～～呼咪··呼…＾喵·～呼…呼咪…咪＾呼呜·呜…～呼＾呜呼＾～咪～咪·…呼·呜咪＾·＾咪喵·呜＾呼…＾～咪·…咪……呜＾…·呼咪～…呼呜呜…～＾…呜呼咪…＾喵…～咪＾～·……咪＾～呼喵喵……咪呼呜＾喵～·喵＾～喵呼咪·………呼喵呼＾～·…＾…咪·～呼…呜呼呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼呼～＾呜咪…喵呼喵呜～呼…呼咪～喵呼咪＾·喵呼～＾呜＾呼＾喵呼呼·＾＾喵·喵咪呼呜呜～呼…呼咪呼呼呼呜～…·＾呼～＾呜～··…呼咪＾呜～………呜…＾咪·＾…＾呼呜＾喵～…·…呜咪呼呜＾·～＾～咪＾喵＾……＾呜咪呼喵·…喵…～呼呼＾喵…喵呼呜咪＾咪喵…·＾呼…呼·呼……咪＾咪·＾～·～……呼·＾～…～呼呼～呜＾·…呜…～…呜＾～·呜呼～＾＾＾··呼…呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼～喵＾呜咪～喵呼喵喵～喵咪呼呜呜喵喵·咪咪～～呼…喵·喵咪…呼呜咪·…～·喵＾呼…＾咪呜…～…～咪··～…·…～咪＾咪～…·咪呼呜＾喵～…喵呼呜…～～喵喵呼呜喵…喵～喵咪～呜呼咪喵＾呜咪～喵呼～·～呼…呼咪…咪＾·喵·喵＾呜…·＾呼＾喵呼呼…呼咪…·～呼呼喵呜·咪…咪…呼喵·～·……＾…呼呜＾咪…咪咪呼…呼咪＾·…＾·呼·～呼…呼咪呼＾＾…呜…＾咪呼咪呜·＾＾咪＾呼咪呜＾……～＾＾呜·＾…＾＾咪～…呜·呼·呼咪～咪·～呼…呼咪…咪呜＾呼…·咪＾呼呜＾喵…·……呜呼·喵·咪咪～咪＾喵…·呼咪…呼＾呜呼·咪呼～呜····～＾呜咪·…～·～…呼…·＾喵＾……呼～呜＾呜·…咪＾喵呼喵～·喵＾～～＾呜＾…·…～·＾咪…＾呜＾呜咪·＾呼咪喵喵喵·～咪呜咪喵喵呼喵～·呜咪·～呼喵～·喵咪喵喵呜·～～喵咪～呜呼咪喵＾呜咪～·呼呜·～呼…呼咪呼＾呼呼＾·呼咪·呜＾咪呼……呼～…··…·呼…·呼··＾…·呼呜咪·…～·呼…·呼··＾…·呼～…呼喵＾·～＾…喵呜＾……～…呼＾呜＾·……呼～呜呜～呼…·～呜喵喵咪…喵呜…呜喵·～咪…喵呼呜喵～·咪…喵呼呜咪呼咪喵＾咪＾呼～＾＾呼·咪呼～呜····～＾～咪·＾呼·咪＾～喵呜·……＾呼～＾呜＾呼·……～咪·～呼…呼咪呼＾呼咪…·喵咪·…·＾·…呜…～…呜·呼·呼咪～咪·～呼…呼咪呼…·＾呼……呼…～呜·＾…＾呼呼咪＾呜～…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呼呜喵·～咪咪喵喵呼咪呜～咪…喵…～～呼～＾…·呼＾…＾呜咪…咪＾…喵呜～呼·呼咪·喵·＾咪…呜呼呼·呜～··呼咪～喵呜～呼…呼咪呼＾呼咪……～…呼…＾呜呼·喵＾～·＾…呼……咪＾咪呜·呜·呜＾～·呼喵喵·喵呼～…·～呼…··呜喵喵咪…喵呜…呜喵·～咪咪喵咪呜喵·～咪咪～＾呜喵·～呜…～…～…＾咪～·喵咪…咪呜＾呼………呜～呼呜呜…呜…呼～呼咪＾·…咪……呼喵～…～＾…喵呜…咪·呜咪～…··喵·～呼…咪呜···…＾…咪·＾呜·呼呼…咪＾咪…·喵咪～·呜＾喵·呜呼呼＾呜＾呼·……呜＾呼喵＾…～咪呜咪·＾呼咪喵喵喵·～咪呜…喵呼呜喵～～喵…喵呼呜喵～·～…喵呼呜咪呼呜～…呼呼…呜呼·呜·呜呼～＾·咪呜·咪＾…咪呜＾呼…·＾＾呼＾呜呜…·＾～…＾呼喵…喵＾呜·呜＾～…咪…～·呼喵喵·呜＾＾咪·＾呼＾咪＾呜咪·＾呼咪喵喵喵·～咪呜…喵呼呜喵～～喵…喵呼呜喵～·……喵呼呜咪呜·……呜＾～…呼喵＾·～＾…喵呜＾～…咪…～·呼喵喵……呼～呜呼咪呜…～呼呼…呼·呜…喵＾呜·呼咪喵＾咪＾呼～＾＾呼·～＾…喵呜＾呜·喵＾呼咪＾呜～……呼～呜呜＾呼＾咪＾呼咪呼咪呼…喵＾呜·呼呜呼＾～咪～咪·…呼·呜…～呼＾呜呜…·＾呼呼呜…喵…·＾＾喵··～＾～…呼呜＾喵～…喵＾呜·呼呜咪…～咪呼喵·～·…～呼呜呼呼咪呜·～＾～＾呜＾喵…＾＾……呜··＾＾咪呼呼呜…喵…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵呜～咪…喵呜呼呼呜～咪…喵……喵··喵…～呼呜呼呜·咪…咪……咪呜＾呼………呜～呜＾呼＾喵呼呼…呼咪…·～＾·喵呼喵呼…呜＾～咪呼·呜·～…呼…＾呜咪＾＾呼呼呼呼～喵……呼～呜呜··…呜＾～＾呼·＾…喵＾呜·呼呜呼··…～…呼喵＾·～呼呼喵呜·咪…咪…呼喵·～··喵＾呼＾＾·～·呼…～…呼喵＾…＾＾～＾＾··…呜咪呼咪＾呜～…～…呼…＾咪…＾呜…呼呜＾喵～…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵呜～咪…喵呜呼呼·～咪…喵……喵·～＾·～咪呜咪··…·咪咪～·＾～呼………呼～··咪·呜咪～～呼～呜…·呼＾咪…＾～·～呼呜呼＾呜喵…喵＾呼呜＾喵～………呼～·＾喵…呼＾呼…呼呼～·呼＾呜喵＾喵·＾咪…呜咪·…～·呜…呜呼呜＾喵……呼…咪呜…呜·呼＾～～呼喵喵·呼咪～喵呼咪～…喵＾呜·呜＾·……咪呼＾＾·～·～＾…喵呼喵呼…·＾…咪＾呜喵·…咪＾呼呼呜·……呼～～呼～呜·咪咪呜～＾呜～··…～喵呼…＾·喵＾＾呼呜～呼…··呜喵喵咪…喵呜…呜喵·～咪咪喵咪呜喵·～咪咪·咪呜喵·～呜…＾呼～·呼咪呜…咪…呼呜呜·喵…＾＾……呜＾··呜呼…咪呼呜～……咪＾咪呜～呼…呼咪呼呜·…呼·呜…～呼＾呜呼·～咪呼呼＾～＾·呼＾…呜·～呼…呼咪…咪呼·呜·呼…呜…呜＾…·呼咪～…呜～··…咪……呜·～·呜＾…咪＾呜喵·呼＾～～呜～咪…呜…呜喵·…呜……呼呼喵＾咪喵…·＾呜咪·…～…＾呼～·呼咪呜…咪……呜呼呼呜·呜咪～＾呜＾呜·呼…呼呜呜·喵…＾＾……呜··…＾咪…咪＾喵…·呼＾～～呜～呼…··呜喵喵咪…喵呜…呜喵·～咪咪喵咪呜喵·～咪咪·呼呜喵·～呜…～…呼…＾呜呜…呜……呼＾＾喵·…咪……呼呜呼·～咪～咪＾·咪·喵＾·喵··…·咪咪呼呜＾呼喵……＾呼··～呼…呼咪呼咪呜＾呼·呜咪呼…·＾呜＾～＾呼～＾＾呼…·……·呼呜咪·呼＾…呼呼呼喵…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵呜～咪…喵呜呼喵～·喵…喵呼呜咪呼呜呼＾～咪～咪·…呼…·＾＾喵··呼·…咪呼呜＾喵呼…～呼～～呼呜咪…～咪呼喵·～·…～呼呜呼呜＾·＾呼咪呜咪·…～·～＾…喵呼咪呜…～呼呼…呼·呜…·＾＾喵＾咪～＾喵呼～呼··喵·…＾…＾＾～呼…呼咪～～呼～＾…·呼＾…＾呜…＾喵…呼～呼···呜…呼喵·＾呜＾～……呜呼呼呜·～咪呜喵＾喵呜＾…咪呼咪呜＾··…＾呼咪呼咪咪·呼·……咪呼咪…喵＾呜·呼喵～·咪＾～呼·…·…～咪＾·呜＾＾·呼呼～…＾喵喵………呜～呼喵咪·呜＾呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼喵～·呜咪·～呼呜喵·……喵＾呜·呼呜…＾喵…呼～呼···呜…呼喵·＾呜＾～……咪＾·喵·喵＾呜…＾喵喵＾呼呼～咪呼呼呼·呜呼～＾·呜呜·～呼呼＾呜……·呼呼·…呜·呼·呜呼～喵＾咪呼·呼＾呼呜呼咪呜＾·…呜咪·…～·～…＾咪呼咪·…呜……呜呼呼咪…·呼＾··＾～…·咪呼呼＾呜··………咪·～呼…呼咪…咪＾咪咪·～＾……呼喵呜…咪呼～＾·喵呜·～＾～咪＾咪呼…呼…呜咪·…～·～呼呜呼＾呜喵…喵＾～…·…··～呼呼～··呜…·＾呼～·＾呼…喵＾呜·喵～喵喵呼呜喵…喵～喵咪喵喵呜喵喵～喵·～＾……呼咪呜·咪＾…咪＾·喵·喵＾呜…＾喵＾·＾…～…呼呜呜…·＾＾喵＾咪……喵＾～…·…·…喵呼呜咪～～喵喵呼呜喵…喵～喵咪～呜呼咪喵＾呜咪…呜呼～呜～呼…呼咪…喵呜～咪……呼呼咪·＾呼＾喵呼呼呼＾～＾……＾＾呼·＾呼＾～咪呼…＾·喵……呼…～呜·呼＾咪呼呼·＾＾喵·咪＾…＾呼咪呜·～…呜咪·…～·呼＾～～呼呜呜·喵咪…呜＾呜……·呼…·呼喵喵＾呼呼呼喵呼呜咪·～呼呜呼＾呜喵…喵＾呼…呼咪…·呜＾呜＾呜＾咪·＾咪呼呼呜＾～·呼…～…呜＾呜＾～……咪呜＾呼…～呼·～·～呼…呼咪～～呜＾呼…·…＾咪··咪·咪……呼＾喵…·～＾·喵呼喵呼…呜＾呼＾＾…呜·呜…呼·呜＾·……咪呼呜＾～＾·～＾呼喵呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·咪咪～·呼…喵·喵咪～…呜咪·…～…………呜呼喵呼·咪呼呼呜＾喵～…·呼～～呜··…呼咪呼…＾·呜·…呼…＾·喵＾…呼…呼咪＾～·…～＾＾呼呜＾呼＾喵呼呼咪＾～……＾呼＾～呼咪··～…～咪＾喵＾·咪＾…＾呼咪呜·～…呜咪·…～·～……呜呼喵＾…～咪～·呼…～…～咪…喵＾呜呜＾…咪～＾·…～…＾呼·～呜＾喵＾＾咪～＾呼呜呜·喵＾～呼＾咪·…呜……咪＾咪咪…喵＾呜·呜·喵·～呜～·…呜喵咪…咪～呼＾喵喵·…＾…＾＾～咪…喵·呜喵喵咪…喵呜～呜喵喵·咪咪～·呼…喵·呼咪～咪呜咪·…～·～咪呜喵··……～＾呼…＾～咪…～呼～呼呼喵··呜咪…咪＾·喵·喵＾呜…··喵·～呜～·…呜喵咪…咪～呜呼喵呼…·＾…～呼喵喵……咪呜咪·…～·呜咪呼…·＾呜＾～＾…咪＾·喵·喵＾呜…＾咪喵＾·呼～～呼咪呼…＾＾呜…呼咪呜…＾咪呼＾＾·～……呼·呼＾呜呼…～咪呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼喵～·～咪·～呼咪～·……喵＾呜·呜＾·……咪～·＾…呜·～…呼…·＾喵＾………喵呜～咪·呜…呼喵·～呼…呼咪…喵呜～咪……呼呼咪·＾呼＾喵呼～喵呜～＾……呼～咪＾咪呜·＾咪呼咪呜＾呼·喵呼～…＾喵咪·呜＾呜咪·…～·呜咪呼…·＾呜＾～＾～呜＾喵喵·呜呼～＾＾·～…～…～…·…＾…＾…＾呜·～咪…喵·呜喵喵咪…喵呜～呜喵喵·咪咪…喵呼…喵·～咪…呼呜咪·…～·咪…＾喵呜·～…～…呜咪·…～…～＾＾呜＾咪＾＾～…呼·＾咪～·呜……咪呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·咪咪…呜呼…喵·喵咪～喵呜喵喵……咪喵喵呼喵～＾喵咪·～呼喵～·……喵＾呜·呼喵呼…·＾～…呜·呜·喵＾呼呜呜＾呜·喵＾～…··………呼～呜呜～咪…呜·呜喵喵咪…喵呜～喵·～咪呜咪喵喵呼喵～＾喵咪·～呼咪喵·喵…喵＾呜·呼呜呼＾～咪～咪·…呼…·＾＾喵·＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪……咪呜＾呼·咪…＾喵呼喵…·喵咪～～＾咪＾·呜呼呼·＾喵··喵…呜咪·…～·呜咪呜呜＾喵…·呜…呼呜呼·呼………＾＾呼咪呜…～＾～·呼喵呼…～＾…呜呜·＾…·呼呜喵·～呼·…咪……呼呜…＾喵…～喵呼…＾…＾呼·咪呼咪呜·呼呼～喵＾咪呼·呼…呜…呼咪呜…～…～咪··～·～呼呼喵呜·咪…咪…呼喵·～·…·＾＾喵··呜…·＾呼～＾咪呼·～…呼…＾喵＾·～咪呼呜＾呼喵…·…～·＾呜呼＾～咪～咪·…呼咪喵喵喵·～咪呜咪喵喵呜喵喵～喵咪喵喵呜喵呜·呼·…咪…咪呜＾呼·～呼＾～···＾喵咪呼呜＾喵～………呜…＾咪·＾…＾呜咪·＾呜咪喵喵喵·～咪呜…喵呼呜喵·～咪…喵呼…咪呼·呜·呼…呜…呼呜～··…～呜＾咪呜……咪＾咪··呼·…咪呼呼·＾咪……呼～呜呜·＾…·呼呼＾＾…喵…喵＾呜·呼咪呜·咪＾…咪＾·喵·喵＾呜…·＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪…呼～··呜·～＾…喵呜·…·咪咪呜咪·…～·呼…呜…呼喵咪·呜＾～＾·＾呼……＾…喵＾喵·…＾呼呼＾呼＾咪…喵＾呜·呼咪呼＾＾呼…咪呼呜～…喵呼呜…·～咪…呜＾呜喵·…呼咪喵喵喵·～咪呜咪喵喵呼喵～＾喵咪·～呼呜喵·喵…喵＾呜·呼呜呼＾～咪～咪·…呼…·＾＾喵·＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪……咪呜＾呼·咪…＾喵呜＾呼··咪～喵呜·～…喵＾呜·呼喵呜……＾～～＾咪＾·呜…～呼·＾··呼＾呼呼呜…喵…·＾＾喵＾咪·…呜…～喵＾咪呼………·咪··咪·＾咪～咪＾·咪·喵＾·喵··…·咪咪…呼··＾…·＾·呼·～呼…呼咪～咪呼呜呜……咪…·呼呜＾·咪呼～·呼呜呼·喵＾··呜·…·咪咪呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼喵～＾咪咪·～呼喵喵·喵…喵＾呜·呜＾·…呜…～…呜＾～·呜呼～＾·咪…＾呼呼…呼＾呜～·呼＾呼喵呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·咪咪·呜呼…喵·呜咪～咪呜咪·…～·～＾·喵呼喵呼…呜＾呼＾＾…呜·呜…呼·呼喵～…咪呼呼咪呼～～·…＾～呜··喵·～呼～…呼…咪…～呼呜呼··……＾呼…喵＾·～·呼咪呜～呼咪咪·呼＾～～呜～…·…＾·呼呜～呼…呼咪～喵呼咪＾·喵呼～＾呜＾呼＾喵呼呼·＾＾喵·喵咪呼呜呜～呼…呼咪呼喵呼呜咪·咪咪～呼＾呜喵…呜呼呼…·＾咪·喵＾呼…＾呜呼·～咪呼＾＾…呜·呜…呼·呜＾·……咪～…呼…咪……呼～呜呼咪喵·呜＾～＾呼咪呜…·…＾咪呼呜呜…·＾呼喵＾…咪…喵呼呜咪～～喵喵呼呜喵…喵～喵咪～呜呼～～＾呜咪～～呼喵喵～喵咪呼呜呜喵喵·呜咪～～呼…喵·呜咪～咪呜咪·…～·咪…·呜呼咪呜……呼呼呜·＾……·…＾咪＾喵···…呜咪·…～…·＾·～··咪…＾…～～＾咪＾·喵＾呼…＾呜呼·～咪…呜呼·…·喵＾呼呜呼咪喵·呼＾…呜＾～··～呼呜呼＾咪＾…～咪～喵＾咪呼…喵＾呜·呜·呼＾·呼～喵＾咪呼…～＾呜咪·＾咪＾咪…呼呜＾喵～·…＾·呼呼呜＾＾…＾…咪呜·…·呼呼·咪呜～呼…呼咪…咪＾·喵·喵＾呜…＾喵呼·咪＾呼…·＾咪…喵＾呼…喵～喵喵呼呜喵…呜～咪…喵呼呜喵·～咪咪喵喵呜喵喵·咪…喵呼呜咪呜＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪……呼·＾～·呜…呼喵＾咪～＾·呜呼咪喵·喵咪·～呼咪～·喵……呼～呜呼喵…·呜…呼～＾～呼…＾呼……呼喵～…＾＾呜咪·＾呼咪喵喵喵·～咪呜…喵呼呜喵～～喵咪喵咪呜喵·～咪咪～…呜喵·～呜·呜咪·呼·＾咪＾＾＾～喵呼咪＾·喵呼～＾呜·呜…·＾…呜呼呼呜…喵＾呜·呼呜呼＾～咪～咪·…呼…·＾＾喵＾咪～＾·呼…咪呼·～·喵咪…呼呜～呼…··呜喵喵咪…喵呜…呜喵·～咪咪喵喵呜喵呜～咪…喵呜呼咪·～咪…喵……咪＾·喵·喵＾呜…·＾呼＾喵呼呼…呼咪…·～呼呼喵呜·咪…咪…呼喵·～··喵呼～呜呼咪～＾呼咪呜咪·…～·…＾＾＾呜＾呜＾～＾…呼＾·＾·～…呼呜＾喵呼…·＾…喵呜·～…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵喵～喵…喵呼呜喵～·～…喵呼呜咪呼咪…＾呜…呼咪＾咪咪·呼……＾呼呜喵·＾呼…呼呜＾咪……呼～呜呼咪……呼咪…喵·～＾·喵…呼·呜·＾…喵…呼呼＾喵……喵呼呜咪呜＾呼··咪～…呼呜…·～＾＾…＾咪～＾呼……喵呜·～…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵呜～咪…喵呜呜喵喵·……喵呼呜咪呜＾呜·呼呼…喵呜～咪…～咪·喵呜＾呼··咪～喵呜·～……呼～呜呼咪喵·呜＾呼呜呜·…·咪呼呜咪·～呼…··呜喵喵咪…喵呜…呜喵·～咪咪喵喵呜喵呜～咪…喵呜呼呼呜～咪…喵…呼…呼咪…＾～…·喵＾·呜＾咪…～～呼呜呼·……呼·＾咪…·咪呼～·＾～·…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵喵～喵…喵呼呜喵～·＾…喵呼呜咪呼咪喵＾咪＾呼～＾＾呼…＾＾～～＾喵咪…呼＾呼呜＾喵～·～呼呼喵呜·咪…咪…呼喵·～·…～呼呼…＾·呜＾喵呼＾咪呼～·…·咪～＾＾＾呼··咪呼·＾咪～·呜……咪呜～呼…呼咪＾咪呼～咪＾～…·呼呼呜＾·…咪呼·呜＾呜·…＾·～呼呜～··…～·＾～呜·喵＾＾呼呜～呼…呼咪～呜呼喵＾·～＾·喵呼喵呼…呜＾呼＾呼咪……·＾＾喵·＾呜·呼呼＾咪呼～咪＾～…·呼呼喵咪·咪咪～·呼…～…喵＾呜·呜＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪…～～呼呜呼·……呼·＾咪…·咪呼～·＾～·…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵喵～喵…喵呼呜喵～＾喵…喵呼呜咪呼喵＾…呼…呼咪＾呜呜…·＾＾喵··呼＾……～喵呜·～…·…～·＾呜呼＾～咪～咪·…呼·喵……咪呼呼咪…呜呼呜咪·…～·呜咪呼…·＾呜＾～＾呼喵·＾呼·喵咪～＾·喵咪·呼…呼呜呼＾＾…·＾…～呼咪喵…咪呼呜咪·＾呼咪喵喵喵·～咪呜…喵呼呜喵～～喵咪喵咪呜喵·～咪咪·呼呜喵·～呜·咪咪～呼＾喵～＾呜…～呼＾～…·喵＾·呼·～呼…呼咪…咪呜＾呼·呜咪呼…呼咪喵·呜＾…呼呼呜…·～＾……呜·喵·～呼～～·＾…·呜呼…呜＾喵咪·呜＾呜咪·…～·～＾……呼咪呜·咪＾…咪＾·喵·喵＾呜…＾喵呼·咪＾呼…＾～咪…＾＾呼呜呼咪喵·呜咪～呜呼呜·…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵喵～喵…喵呼呜喵～·咪咪～咪呜喵·～呜·呼＾～咪呜＾··呼…呼呜＾喵～·呜…呼喵·＾呜＾～…呜咪·…～…～咪·喵呼咪………＾呼…＾～咪……咪＾～呼喵咪＾呼咪…呼呼呼呜·～咪呜喵··…·＾咪～～呼呜呼·……呼···＾·呜呼呼…＾＾呜…喵＾呜·呼呜＾＾呼…呼…呼·呼…＾＾呼·呼喵＾…～咪呼呜＾呼呜………＾＾呼咪～＾呼咪呜咪·…～·………呜＾呜呼··……咪＾呜·……咪＾～呼喵咪＾呼咪…呼呼呼呜·～咪呜喵··…·＾咪～＾·喵呜·呜咪呜呜·＾～＾～呼…呼呜＾………＾～～·＾呼＾＾…呜咪·＾呼咪喵喵喵·～咪呜…喵呼呜喵～～喵咪喵咪呜喵·～咪咪～呜呼喵·～咪…喵…～～呼～＾…·呼＾…＾咪＾·喵……咪＾…呜…喵＾呜·呼呜呼＾～咪～咪·…呼·呼呼··＾呜＾·…咪～＾＾·喵…＾＾～＾＾··…呜咪…呜呼呼呜·…＾…呜呼咪··～……咪＾喵··呼＾…喵呼呜··～咪呼…＾呼咪·喵＾·喵呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·呜咪～～呼…喵·呜咪～咪呜咪·…～·～＾·喵呼喵呼…呜＾呼…＾～咪………·咪·＾咪＾·呼～喵呼咪＾·呜…呜呼呼呜＾……＾呼咪呜··…喵＾呜·呜＾～…～呼呼·呜·咪·喵＾呜呼呼喵呼…咪…呜咪·…～…＾＾呜…呜＾·…呜……喵呼喵～·～咪～呜呜＾呼＾喵呼呼呜·＾…·咪＾…＾呼咪呜·～…呜咪·…～…～…呜咪呼喵＾·～…～～呼＾………＾…呼呼呜·…呼……咪呜＾呼……呼～呜呼咪呜…～呼呼·呼～～…·＾＾喵＾呜～··……喵呜～咪·喵…＾呜呜·呜…＾＾～咪呼·呜………呜…＾咪·＾…＾呜咪·…～咪喵喵喵·～咪呜咪喵喵呜喵喵～喵咪喵喵呜喵呼呜呜…·＾呼喵呼～呼·呜…～呼＾喵呜…～呼呼·呜～··呼呼～～呜～咪…喵…呼喵＾＾咪＾咪咪呼＾·喵咪·＾咪呼…＾·呜·…呼…＾·咪呜＾呼呼～呼呜…～…喵呼呜咪～～喵喵呼呜喵…喵～喵咪～～呼咪喵＾呜咪～·呼喵呜～呼…呼咪…咪＾·喵·喵＾呜…·＾·…呜…～…呜＾～…＾呼＾～呼呜喵·～咪…咪呜＾呼·咪＾…喵呼呜喵＾呜咪…咪呜…呜·呜＾呜＾呜·…·咪咪呼…＾…·………呜＾＾～呼…呼咪…呜＾～呜·～呼＾～··…·呜咪～··…～·～呼呜呼＾喵呼·咪＾呼…＾呼喵·咪＾…＾呼咪呜·～……咪＾喵呼·呜＾呜＾呜·…·咪咪～…呜·咪…·…＾咪呜～呼…呼咪～咪呜～…·呜呼～＾·咪……喵＾～…·…·…＾…～·＾呜呼＾呜＾…咪＾·喵·喵＾呜…＾喵呼…·＾呼～＾呼喵·呼＾呼呜＾喵咪·呜＾呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼咪喵·呜咪·～呼呜喵·……喵＾呜·呼呜呼＾～咪～咪·…呼…·＾＾喵＾喵…·＾咪呼呜·＾……·咪＾呜呜·咪··…～呼＾呼··呜……咪呜～呼…呼咪呼喵呼呜咪·～…＾呜呼咪＾＾呼咪～呼＾喵喵…·呼＾·＾喵喵……咪呜咪·…～·呜咪呼…·＾呜＾～＾呼＾＾…呜·呜…呼·呜·＾·咪呼…咪呼·～·喵咪…呼呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·呜咪～·呼…喵·喵咪～咪呜咪·…～·咪…·呜呼咪呼＾＾＾～～呼咪呼·～…呼咪呜＾呼··咪～喵呜·～…喵＾呜·呜＾咪·呜咪呼呼呜…～·呜＾·…＾喵呼·咪＾～呼＾呼··呜……咪呜＾呼＾喵呼呼＾＾…呜·呜…呼·呼咪喵·～＾呼呼＾咪咪＾呼＾……呜～呼…呼咪呼＾＾·～·…咪…咪＾呜·…＾…呜咪·…～·咪＾呼＾·喵··呜咪…咪＾·喵·喵＾呜…＾呜…＾喵…呼喵＾呼＾……＾～呜＾咪呼＾＾＾～咪＾喵＾·呼＾呼咪呜＾呼………呼呜＾喵～·～…＾呜呼喵喵·……呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼咪喵·呼咪·～呼咪～·喵…喵＾呜·呜·喵·～呼…喵··喵…～呼呜呼呜·咪…咪…呼呜呼呜呼·…咪…咪＾呜·…＾……呼呼呜喵·呼呼～＾＾＾呼··咪～喵呜·～…喵＾呜·呼呜呼＾～咪～咪·…呼·呜咪＾·＾咪喵·呜＾…咪＾呜·…＾＾呜…呼咪呜…＾咪呼＾＾·～……呼·呼＾呜呼…～咪呜喵·～呼咪喵喵喵·～咪呜咪喵喵呜…喵＾呜咪呜…呜咪·…～·呜…呼喵·＾～＾咪咪～…呼呜呼……呼·呼＾呜呼…～咪呼咪·～～………～～呜～呼…呼咪…咪＾·喵·喵＾呜…＾咪喵＾·呼～～呼咪呼…＾＾呜…呼咪呜…＾咪～～＾…～·喵咪～喵＾呜咪＾·咪呜咪·…～·呜呼＾～··呼·咪…～咪＾·＾·呼咪··呜＾··呼＾呼呼呜…喵·咪…＾喵呜·呜…·＾～喵呜·～…喵＾呜·呜＾咪··咪呼呜＾·～呜呼呜…喵喵·～…喵＾呜·呼喵…·喵咪～～＾咪＾……咪呼咪呜～呼…呼咪～喵＾喵～·呼咪··呜～咪…喵·呜喵喵咪…喵呜～呜喵喵…呜咪·～呜…喵…呼咪～呜呜＾喵·…呼呜咪呜咪·…～·～＾·喵呼喵呼…呜＾～咪＾喵＾·～…呼…··喵＾喵＾呼＾·咪咪·～……呜呼喵咪·咪咪～～＾咪＾·～…呼…·＾喵＾……呼呼呼～喵·～咪呜喵＾咪呜…～呼呼呜＾喵～……＾～＾＾＾呼…～咪呜咪·…～·呜咪呼…·＾呜＾～＾～…·…＾…＾…＾呜·～咪…喵·呜喵喵咪…喵呜～喵·～咪呜…喵呼呜…·～咪…呜＾呜喵·…呼·～…呼…＾喵＾·～咪…咪＾呜·…＾＾呜…呼咪呜…＾咪…喵·………·＾呼呼·～咪…呜＾呜喵·…呼…喵呼呜…～～喵&lt;/p&gt;
&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;&lt;/p&gt;
&lt;p&gt;2011年11月17日，抽风的留下 400 days left.&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/585363501/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363501/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mielf.net/mi/400left/feed</wfw:commentRss><slash:comments>0</slash:comments><description>你有没有觉得，有段时间你会特别喜欢回忆。 &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;- ·～…呼…＾喵～＾呜…～呼··喵……呼～呜呜＾…＾～呼～·呼…～…喵＾呜·呜＾呼…·呼…咪＾呜喵·～…呼…·＾喵＾……呼呼呼～喵·～咪～呼＾喵···…呼＾呼咪…·～…呜…呜＾喵·＾＾呼＾＾＾～·喵呼～…·～咪…喵·呜喵喵咪…喵呜…呼·＾·咪·呼咪··呜～呼…呼咪～～呜·～·呜咪呜…＾喵呼…·＾…咪＾呜喵·喵呼～…··……～呼呼咪＾·………呼～呜呜＾…＾…咪…呜＾喵…·～＾＾…··＾·咪呼…呼＾呼……喵呼呜咪～～喵喵呼呜喵…呜＾～·咪＾呼呜＾喵呼·～…呼…＾喵～＾呜…～呼··喵……呼～呜呼咪＾·………呜呼呼呜…喵＾呜·呼喵呼…＾＾～·呼…～·呜呼＾…呜＾呼＾呼……呜呼呼呜·呜…呼喵·＾～＾咪咪呼呜＾喵～…＾咪…喵呜·＾＾呼咪…呼呼呜喵…喵＾呜·呜＾＾…·呼～～呜＾呼…～呼～～呼咪＾·………呜呼呼呜…·＾呼～＾～…·～咪…咪呜～呼·…＾…呜呼呜～··…呜喵·～呼咪喵喵喵·～咪呜咪呜·呜…～…呼咪呜·呜…～…呼咪呜·呜…～…呼咪呜·呜…～…呼咪呜·呜…～…呼咪呜·呜…～…呼咪呜·呜…～…呼咪喵喵喵·～咪呜咪喵咪～咪·＾··呼咪··呼呜～＾咪＾～～＾咪＾·咪咪…呼呼喵咪＾咪呼呼…＾～咪·…咪……喵··咪·～呼呜喵·…·呼＾＾·呼喵·＾～咪呜咪·…～·～＾·喵呼喵呼…呜＾呼…＾～咪·咪…＾＾呜·…＾…咪～喵＾咪呼·咪咪…呼呼喵咪＾咪呼呜咪·…～·呜咪呼…·＾呜＾～＾呼呜呼·呜…＾＾呜…呼呜＾·…咪呼·呜＾呜·～咪～呜呜·喵…呼…呼呜＾喵～呼呼呜＾喵喵·～…·＾·咪呼呜…·＾＾～…呼呜·…·＾·…呜～呼…呼咪呼＾＾…呜·呜…呼·呼咪·…呜…～呼＾呼··呜……咪呜·＾·咪呼…咪呼·～·喵咪…呼呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·＾咪·～呼喵喵·喵…喵＾呜·呜·～＾～＾呼·呼呜呜…·＾＾喵·＾·…呜…～…呜＾～·喵…呼·＾呜喵＾＾咪～呼呼·喵……咪呼咪呜～呼…呼咪…咪＾·喵·喵＾呜…·＾呼＾喵呼呼呜·＾…·呜…呼咪＾咪～·喵＾呼咪＾呜～…～咪＾·呼呜＾·～＾呜咪·…～·～…＾咪呼咪·…呜……咪＾·喵·喵＾呜…＾咪＾…～…呼…···…～咪＾·呼呜＾·～＾呜喵·～呼·喵＾呼＾·咪～＾呼咪呼呜＾喵～·…咪·呼··＾…·呼～…呼喵＾…喵＾呼…呼喵咪…＾呼呼～呼··…～咪＾·呼呜＾·～＾呜咪·…～·～…呼…＾咪…＾呜＾呼咪··～……＾呼～·～呼…呼喵呜喵喵咪…喵呜～呜喵喵～喵咪喵喵呜喵呼呜呜…·＾呼～呼··…＾咪呜呼呜·……～咪呜咪·…～·…＾…呜呜＾～…·…呼呜呼＾喵……呼～呜呼喵……喵＾～呜呼咪～…喵＾呜～呜＾喵…·＾呼…呜…～·呜咪＾··＾＾··＾～呼＾…喵…～咪呼呼·～咪…呜…呜喵·…呜·呜＾·～＾呜呜·…咪…咪＾·喵·喵＾呜…＾喵呼…·＾呼＾＾＾～…·…～咪·～呼…呼咪…咪呜·呜·～＾…喵呼呜喵…呜呼～·＾～呜…～…呼＾·呜呜＾～…～…＾呼喵…喵呼呜…呜～咪…呜～…呜咪咪…呜咪喵呜·呜＾呜·呜咪～喵＾咪呼·咪……＾·喵～＾呜…呜咪·…～·咪咪…·呜·呜…·＾～～··…·喵…·＾＾～呼…呜呼呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼呼～＾呜咪～～呼～呜～呼…呼咪…咪＾·喵·喵＾呜…·＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪…呼咪＾呜～·呼呼·…呼呜～＾咪＾呼呼·＾咪…喵＾呜·呜＾呼＾喵呼…咪呜＾呼·咪…＾喵呜＾…＾＾咪呼·＾咪～·呜……咪呜～呼…呼咪～～呜＾呼…·…＾咪··＾…喵…～＾·呜··～咪呜喵··……～＾…咪呼呜咪…＾…呜·＾喵呜＾～…～喵＾咪呼·喵＾＾呼呜·喵＾·咪呼…＾·呜·…呼…＾＾·……～咪呼～呼～呜…喵＾呜·呼呜～··…呼·＾咪～·呜……咪呜·咪·＾＾呼咪＾呜～…～呼…＾·咪～…·咪…喵呜～·……＾＾呼＾咪咪＾＾～呜喵喵咪…喵呜～呜喵喵～喵咪喵喵呜喵呜～呼…呜咪呼…呼·呼·喵咪呼呜呼呜呼·～咪…咪呜＾呼………～＾呼咪呜…～呼呼·呼～～…喵＾呜·呜·呼·喵…～咪呜～咪·……＾呼···…呼＾呼咪＾呜喵……呼呜咪＾喵呜＾～…呼喵呼＾～·…＾…咪··…·咪咪～～呼咪··呼…＾喵·～呼…呼咪…咪＾呼呜·呜…～呼＾呜呼＾～咪～咪·…呼·呜咪＾·＾咪喵·呜＾呼…＾～咪·…咪……呜＾…·呼咪～…呼呜呜…～＾…呜呼咪…＾喵…～咪＾～·……咪＾～呼喵喵……咪呼呜＾喵～·喵＾～喵呼咪·………呼喵呼＾～·…＾…咪·～呼…呜呼呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼呼～＾呜咪…喵呼喵呜～呼…呼咪～喵呼咪＾·喵呼～＾呜＾呼＾喵呼呼·＾＾喵·喵咪呼呜呜～呼…呼咪呼呼呼呜～…·＾呼～＾呜～··…呼咪＾呜～………呜…＾咪·＾…＾呼呜＾喵～…·…呜咪呼呜＾·～＾～咪＾喵＾……＾呜咪呼喵·…喵…～呼呼＾喵…喵呼呜咪＾咪喵…·＾呼…呼·呼……咪＾咪·＾～·～……呼·＾～…～呼呼～呜＾·…呜…～…呜＾～·呜呼～＾＾＾··呼…呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼～喵＾呜咪～喵呼喵喵～喵咪呼呜呜喵喵·咪咪～～呼…喵·喵咪…呼呜咪·…～·喵＾呼…＾咪呜…～…～咪··～…·…～咪＾咪～…·咪呼呜＾喵～…喵呼呜…～～喵喵呼呜喵…喵～喵咪～呜呼咪喵＾呜咪～喵呼～·～呼…呼咪…咪＾·喵·喵＾呜…·＾呼＾喵呼呼…呼咪…·～呼呼喵呜·咪…咪…呼喵·～·……＾…呼呜＾咪…咪咪呼…呼咪＾·…＾·呼·～呼…呼咪呼＾＾…呜…＾咪呼咪呜·＾＾咪＾呼咪呜＾……～＾＾呜·＾…＾＾咪～…呜·呼·呼咪～咪·～呼…呼咪…咪呜＾呼…·咪＾呼呜＾喵…·……呜呼·喵·咪咪～咪＾喵…·呼咪…呼＾呜呼·咪呼～呜····～＾呜咪·…～·～…呼…·＾喵＾……呼～呜＾呜·…咪＾喵呼喵～·喵＾～～＾呜＾…·…～·＾咪…＾呜＾呜咪·＾呼咪喵喵喵·～咪呜咪喵喵呼喵～·呜咪·～呼喵～·喵咪喵喵呜·～～喵咪～呜呼咪喵＾呜咪～·呼呜·～呼…呼咪呼＾呼呼＾·呼咪·呜＾咪呼……呼～…··…·呼…·呼··＾…·呼呜咪·…～·呼…·呼··＾…·呼～…呼喵＾·～＾…喵呜＾……～…呼＾呜＾·……呼～呜呜～呼…·～呜喵喵咪…喵呜…呜喵·～咪…喵呼呜喵～·咪…喵呼呜咪呼咪喵＾咪＾呼～＾＾呼·咪呼～呜····～＾～咪·＾呼·咪＾～喵呜·……＾呼～＾呜＾呼·……～咪·～呼…呼咪呼＾呼咪…·喵咪·…·＾·…呜…～…呜·呼·呼咪～咪·～呼…呼咪呼…·＾呼……呼…～呜·＾…＾呼呼咪＾呜～…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呼呜喵·～咪咪喵喵呼咪呜～咪…喵…～～呼～＾…·呼＾…＾呜咪…咪＾…喵呜～呼·呼咪·喵·＾咪…呜呼呼·呜～··呼咪～喵呜～呼…呼咪呼＾呼咪……～…呼…＾呜呼·喵＾～·＾…呼……咪＾咪呜·呜·呜＾～·呼喵喵·喵呼～…·～呼…··呜喵喵咪…喵呜…呜喵·～咪咪喵咪呜喵·～咪咪～＾呜喵·～呜…～…～…＾咪～·喵咪…咪呜＾呼………呜～呼呜呜…呜…呼～呼咪＾·…咪……呼喵～…～＾…喵呜…咪·呜咪～…··喵·～呼…咪呜···…＾…咪·＾呜·呼呼…咪＾咪…·喵咪～·呜＾喵·呜呼呼＾呜＾呼·……呜＾呼喵＾…～咪呜咪·＾呼咪喵喵喵·～咪呜…喵呼呜喵～～喵…喵呼呜喵～·～…喵呼呜咪呼呜～…呼呼…呜呼·呜·呜呼～＾·咪呜·咪＾…咪呜＾呼…·＾＾呼＾呜呜…·＾～…＾呼喵…喵＾呜·呜＾～…咪…～·呼喵喵·呜＾＾咪·＾呼＾咪＾呜咪·＾呼咪喵喵喵·～咪呜…喵呼呜喵～～喵…喵呼呜喵～·……喵呼呜咪呜·……呜＾～…呼喵＾·～＾…喵呜＾～…咪…～·呼喵喵……呼～呜呼咪呜…～呼呼…呼·呜…喵＾呜·呼咪喵＾咪＾呼～＾＾呼·～＾…喵呜＾呜·喵＾呼咪＾呜～……呼～呜呜＾呼＾咪＾呼咪呼咪呼…喵＾呜·呼呜呼＾～咪～咪·…呼·呜…～呼＾呜呜…·＾呼呼呜…喵…·＾＾喵··～＾～…呼呜＾喵～…喵＾呜·呼呜咪…～咪呼喵·～·…～呼呜呼呼咪呜·～＾～＾呜＾喵…＾＾……呜··＾＾咪呼呼呜…喵…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵呜～咪…喵呜呼呼呜～咪…喵……喵··喵…～呼呜呼呜·咪…咪……咪呜＾呼………呜～呜＾呼＾喵呼呼…呼咪…·～＾·喵呼喵呼…呜＾～咪呼·呜·～…呼…＾呜咪＾＾呼呼呼呼～喵……呼～呜呜··…呜＾～＾呼·＾…喵＾呜·呼呜呼··…～…呼喵＾·～呼呼喵呜·咪…咪…呼喵·～··喵＾呼＾＾·～·呼…～…呼喵＾…＾＾～＾＾··…呜咪呼咪＾呜～…～…呼…＾咪…＾呜…呼呜＾喵～…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵呜～咪…喵呜呼呼·～咪…喵……喵·～＾·～咪呜咪··…·咪咪～·＾～呼………呼～··咪·呜咪～～呼～呜…·呼＾咪…＾～·～呼呜呼＾呜喵…喵＾呼呜＾喵～………呼～·＾喵…呼＾呼…呼呼～·呼＾呜喵＾喵·＾咪…呜咪·…～·呜…呜呼呜＾喵……呼…咪呜…呜·呼＾～～呼喵喵·呼咪～喵呼咪～…喵＾呜·呜＾·……咪呼＾＾·～·～＾…喵呼喵呼…·＾…咪＾呜喵·…咪＾呼呼呜·……呼～～呼～呜·咪咪呜～＾呜～··…～喵呼…＾·喵＾＾呼呜～呼…··呜喵喵咪…喵呜…呜喵·～咪咪喵咪呜喵·～咪咪·咪呜喵·～呜…＾呼～·呼咪呜…咪…呼呜呜·喵…＾＾……呜＾··呜呼…咪呼呜～……咪＾咪呜～呼…呼咪呼呜·…呼·呜…～呼＾呜呼·～咪呼呼＾～＾·呼＾…呜·～呼…呼咪…咪呼·呜·呼…呜…呜＾…·呼咪～…呜～··…咪……呜·～·呜＾…咪＾呜喵·呼＾～～呜～咪…呜…呜喵·…呜……呼呼喵＾咪喵…·＾呜咪·…～…＾呼～·呼咪呜…咪……呜呼呼呜·呜咪～＾呜＾呜·呼…呼呜呜·喵…＾＾……呜··…＾咪…咪＾喵…·呼＾～～呜～呼…··呜喵喵咪…喵呜…呜喵·～咪咪喵咪呜喵·～咪咪·呼呜喵·～呜…～…呼…＾呜呜…呜……呼＾＾喵·…咪……呼呜呼·～咪～咪＾·咪·喵＾·喵··…·咪咪呼呜＾呼喵……＾呼··～呼…呼咪呼咪呜＾呼·呜咪呼…·＾呜＾～＾呼～＾＾呼…·……·呼呜咪·呼＾…呼呼呼喵…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵呜～咪…喵呜呼喵～·喵…喵呼呜咪呼呜呼＾～咪～咪·…呼…·＾＾喵··呼·…咪呼呜＾喵呼…～呼～～呼呜咪…～咪呼喵·～·…～呼呜呼呜＾·＾呼咪呜咪·…～·～＾…喵呼咪呜…～呼呼…呼·呜…·＾＾喵＾咪～＾喵呼～呼··喵·…＾…＾＾～呼…呼咪～～呼～＾…·呼＾…＾呜…＾喵…呼～呼···呜…呼喵·＾呜＾～……呜呼呼呜·～咪呜喵＾喵呜＾…咪呼咪呜＾··…＾呼咪呼咪咪·呼·……咪呼咪…喵＾呜·呼喵～·咪＾～呼·…·…～咪＾·呜＾＾·呼呼～…＾喵喵………呜～呼喵咪·呜＾呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼喵～·呜咪·～呼呜喵·……喵＾呜·呼呜…＾喵…呼～呼···呜…呼喵·＾呜＾～……咪＾·喵·喵＾呜…＾喵喵＾呼呼～咪呼呼呼·呜呼～＾·呜呜·～呼呼＾呜……·呼呼·…呜·呼·呜呼～喵＾咪呼·呼＾呼呜呼咪呜＾·…呜咪·…～·～…＾咪呼咪·…呜……呜呼呼咪…·呼＾··＾～…·咪呼呼＾呜··………咪·～呼…呼咪…咪＾咪咪·～＾……呼喵呜…咪呼～＾·喵呜·～＾～咪＾咪呼…呼…呜咪·…～·～呼呜呼＾呜喵…喵＾～…·…··～呼呼～··呜…·＾呼～·＾呼…喵＾呜·喵～喵喵呼呜喵…喵～喵咪喵喵呜喵喵～喵·～＾……呼咪呜·咪＾…咪＾·喵·喵＾呜…＾喵＾·＾…～…呼呜呜…·＾＾喵＾咪……喵＾～…·…·…喵呼呜咪～～喵喵呼呜喵…喵～喵咪～呜呼咪喵＾呜咪…呜呼～呜～呼…呼咪…喵呜～咪……呼呼咪·＾呼＾喵呼呼呼＾～＾……＾＾呼·＾呼＾～咪呼…＾·喵……呼…～呜·呼＾咪呼呼·＾＾喵·咪＾…＾呼咪呜·～…呜咪·…～·呼＾～～呼呜呜·喵咪…呜＾呜……·呼…·呼喵喵＾呼呼呼喵呼呜咪·～呼呜呼＾呜喵…喵＾呼…呼咪…·呜＾呜＾呜＾咪·＾咪呼呼呜＾～·呼…～…呜＾呜＾～……咪呜＾呼…～呼·～·～呼…呼咪～～呜＾呼…·…＾咪··咪·咪……呼＾喵…·～＾·喵呼喵呼…呜＾呼＾＾…呜·呜…呼·呜＾·……咪呼呜＾～＾·～＾呼喵呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·咪咪～·呼…喵·喵咪～…呜咪·…～…………呜呼喵呼·咪呼呼呜＾喵～…·呼～～呜··…呼咪呼…＾·呜·…呼…＾·喵＾…呼…呼咪＾～·…～＾＾呼呜＾呼＾喵呼呼咪＾～……＾呼＾～呼咪··～…～咪＾喵＾·咪＾…＾呼咪呜·～…呜咪·…～·～……呜呼喵＾…～咪～·呼…～…～咪…喵＾呜呜＾…咪～＾·…～…＾呼·～呜＾喵＾＾咪～＾呼呜呜·喵＾～呼＾咪·…呜……咪＾咪咪…喵＾呜·呜·喵·～呜～·…呜喵咪…咪～呼＾喵喵·…＾…＾＾～咪…喵·呜喵喵咪…喵呜～呜喵喵·咪咪～·呼…喵·呼咪～咪呜咪·…～·～咪呜喵··……～＾呼…＾～咪…～呼～呼呼喵··呜咪…咪＾·喵·喵＾呜…··喵·～呜～·…呜喵咪…咪～呜呼喵呼…·＾…～呼喵喵……咪呜咪·…～·呜咪呼…·＾呜＾～＾…咪＾·喵·喵＾呜…＾咪喵＾·呼～～呼咪呼…＾＾呜…呼咪呜…＾咪呼＾＾·～……呼·呼＾呜呼…～咪呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼喵～·～咪·～呼咪～·……喵＾呜·呜＾·……咪～·＾…呜·～…呼…·＾喵＾………喵呜～咪·呜…呼喵·～呼…呼咪…喵呜～咪……呼呼咪·＾呼＾喵呼～喵呜～＾……呼～咪＾咪呜·＾咪呼咪呜＾呼·喵呼～…＾喵咪·呜＾呜咪·…～·呜咪呼…·＾呜＾～＾～呜＾喵喵·呜呼～＾＾·～…～…～…·…＾…＾…＾呜·～咪…喵·呜喵喵咪…喵呜～呜喵喵·咪咪…喵呼…喵·～咪…呼呜咪·…～·咪…＾喵呜·～…～…呜咪·…～…～＾＾呜＾咪＾＾～…呼·＾咪～·呜……咪呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·咪咪…呜呼…喵·喵咪～喵呜喵喵……咪喵喵呼喵～＾喵咪·～呼喵～·……喵＾呜·呼喵呼…·＾～…呜·呜·喵＾呼呜呜＾呜·喵＾～…··………呼～呜呜～咪…呜·呜喵喵咪…喵呜～喵·～咪呜咪喵喵呼喵～＾喵咪·～呼咪喵·喵…喵＾呜·呼呜呼＾～咪～咪·…呼…·＾＾喵·＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪……咪呜＾呼·咪…＾喵呼喵…·喵咪～～＾咪＾·呜呼呼·＾喵··喵…呜咪·…～·呜咪呜呜＾喵…·呜…呼呜呼·呼………＾＾呼咪呜…～＾～·呼喵呼…～＾…呜呜·＾…·呼呜喵·～呼·…咪……呼呜…＾喵…～喵呼…＾…＾呼·咪呼咪呜·呼呼～喵＾咪呼·呼…呜…呼咪呜…～…～咪··～·～呼呼喵呜·咪…咪…呼喵·～·…·＾＾喵··呜…·＾呼～＾咪呼·～…呼…＾喵＾·～咪呼呜＾呼喵…·…～·＾呜呼＾～咪～咪·…呼咪喵喵喵·～咪呜咪喵喵呜喵喵～喵咪喵喵呜喵呜·呼·…咪…咪呜＾呼·～呼＾～···＾喵咪呼呜＾喵～………呜…＾咪·＾…＾呜咪·＾呜咪喵喵喵·～咪呜…喵呼呜喵·～咪…喵呼…咪呼·呜·呼…呜…呼呜～··…～呜＾咪呜……咪＾咪··呼·…咪呼呼·＾咪……呼～呜呜·＾…·呼呼＾＾…喵…喵＾呜·呼咪呜·咪＾…咪＾·喵·喵＾呜…·＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪…呼～··呜·～＾…喵呜·…·咪咪呜咪·…～·呼…呜…呼喵咪·呜＾～＾·＾呼……＾…喵＾喵·…＾呼呼＾呼＾咪…喵＾呜·呼咪呼＾＾呼…咪呼呜～…喵呼呜…·～咪…呜＾呜喵·…呼咪喵喵喵·～咪呜咪喵喵呼喵～＾喵咪·～呼呜喵·喵…喵＾呜·呼呜呼＾～咪～咪·…呼…·＾＾喵·＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪……咪呜＾呼·咪…＾喵呜＾呼··咪～喵呜·～…喵＾呜·呼喵呜……＾～～＾咪＾·呜…～呼·＾··呼＾呼呼呜…喵…·＾＾喵＾咪·…呜…～喵＾咪呼………·咪··咪·＾咪～咪＾·咪·喵＾·喵··…·咪咪…呼··＾…·＾·呼·～呼…呼咪～咪呼呜呜……咪…·呼呜＾·咪呼～·呼呜呼·喵＾··呜·…·咪咪呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼喵～＾咪咪·～呼喵喵·喵…喵＾呜·呜＾·…呜…～…呜＾～·呜呼～＾·咪…＾呼呼…呼＾呜～·呼＾呼喵呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·咪咪·呜呼…喵·呜咪～咪呜咪·…～·～＾·喵呼喵呼…呜＾呼＾＾…呜·呜…呼·呼喵～…咪呼呼咪呼～～·…＾～呜··喵·～呼～…呼…咪…～呼呜呼··……＾呼…喵＾·～·呼咪呜～呼咪咪·呼＾～～呜～…·…＾·呼呜～呼…呼咪～喵呼咪＾·喵呼～＾呜＾呼＾喵呼呼·＾＾喵·喵咪呼呜呜～呼…呼咪呼喵呼呜咪·咪咪～呼＾呜喵…呜呼呼…·＾咪·喵＾呼…＾呜呼·～咪呼＾＾…呜·呜…呼·呜＾·……咪～…呼…咪……呼～呜呼咪喵·呜＾～＾呼咪呜…·…＾咪呼呜呜…·＾呼喵＾…咪…喵呼呜咪～～喵喵呼呜喵…喵～喵咪～呜呼～～＾呜咪～～呼喵喵～喵咪呼呜呜喵喵·呜咪～～呼…喵·呜咪～咪呜咪·…～·咪…·呜呼咪呜……呼呼呜·＾……·…＾咪＾喵···…呜咪·…～…·＾·～··咪…＾…～～＾咪＾·喵＾呼…＾呜呼·～咪…呜呼·…·喵＾呼呜呼咪喵·呼＾…呜＾～··～呼呜呼＾咪＾…～咪～喵＾咪呼…喵＾呜·呜·呼＾·呼～喵＾咪呼…～＾呜咪·＾咪＾咪…呼呜＾喵～·…＾·呼呼呜＾＾…＾…咪呜·…·呼呼·咪呜～呼…呼咪…咪＾·喵·喵＾呜…＾喵呼·咪＾呼…·＾咪…喵＾呼…喵～喵喵呼呜喵…呜～咪…喵呼呜喵·～咪咪喵喵呜喵喵·咪…喵呼呜咪呜＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪……呼·＾～·呜…呼喵＾咪～＾·呜呼咪喵·喵咪·～呼咪～·喵……呼～呜呼喵…·呜…呼～＾～呼…＾呼……呼喵～…＾＾呜咪·＾呼咪喵喵喵·～咪呜…喵呼呜喵～～喵咪喵咪呜喵·～咪咪～…呜喵·～呜·呜咪·呼·＾咪＾＾＾～喵呼咪＾·喵呼～＾呜·呜…·＾…呜呼呼呜…喵＾呜·呼呜呼＾～咪～咪·…呼…·＾＾喵＾咪～＾·呼…咪呼·～·喵咪…呼呜～呼…··呜喵喵咪…喵呜…呜喵·～咪咪喵喵呜喵呜～咪…喵呜呼咪·～咪…喵……咪＾·喵·喵＾呜…·＾呼＾喵呼呼…呼咪…·～呼呼喵呜·咪…咪…呼喵·～··喵呼～呜呼咪～＾呼咪呜咪·…～·…＾＾＾呜＾呜＾～＾…呼＾·＾·～…呼呜＾喵呼…·＾…喵呜·～…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵喵～喵…喵呼呜喵～·～…喵呼呜咪呼咪…＾呜…呼咪＾咪咪·呼……＾呼呜喵·＾呼…呼呜＾咪……呼～呜呼咪……呼咪…喵·～＾·喵…呼·呜·＾…喵…呼呼＾喵……喵呼呜咪呜＾呼··咪～…呼呜…·～＾＾…＾咪～＾呼……喵呜·～…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵呜～咪…喵呜呜喵喵·……喵呼呜咪呜＾呜·呼呼…喵呜～咪…～咪·喵呜＾呼··咪～喵呜·～……呼～呜呼咪喵·呜＾呼呜呜·…·咪呼呜咪·～呼…··呜喵喵咪…喵呜…呜喵·～咪咪喵喵呜喵呜～咪…喵呜呼呼呜～咪…喵…呼…呼咪…＾～…·喵＾·呜＾咪…～～呼呜呼·……呼·＾咪…·咪呼～·＾～·…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵喵～喵…喵呼呜喵～·＾…喵呼呜咪呼咪喵＾咪＾呼～＾＾呼…＾＾～～＾喵咪…呼＾呼呜＾喵～·～呼呼喵呜·咪…咪…呼喵·～·…～呼呼…＾·呜＾喵呼＾咪呼～·…·咪～＾＾＾呼··咪呼·＾咪～·呜……咪呜～呼…呼咪＾咪呼～咪＾～…·呼呼呜＾·…咪呼·呜＾呜·…＾·～呼呜～··…～·＾～呜·喵＾＾呼呜～呼…呼咪～呜呼喵＾·～＾·喵呼喵呼…呜＾呼＾呼咪……·＾＾喵·＾呜·呼呼＾咪呼～咪＾～…·呼呼喵咪·咪咪～·呼…～…喵＾呜·呜＾呜·呼呼…喵··喵…～呼呜呼呜·咪…咪…～～呼呜呼·……呼·＾咪…·咪呼～·＾～·…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵喵～喵…喵呼呜喵～＾喵…喵呼呜咪呼喵＾…呼…呼咪＾呜呜…·＾＾喵··呼＾……～喵呜·～…·…～·＾呜呼＾～咪～咪·…呼·喵……咪呼呼咪…呜呼呜咪·…～·呜咪呼…·＾呜＾～＾呼喵·＾呼·喵咪～＾·喵咪·呼…呼呜呼＾＾…·＾…～呼咪喵…咪呼呜咪·＾呼咪喵喵喵·～咪呜…喵呼呜喵～～喵咪喵咪呜喵·～咪咪·呼呜喵·～呜·咪咪～呼＾喵～＾呜…～呼＾～…·喵＾·呼·～呼…呼咪…咪呜＾呼·呜咪呼…呼咪喵·呜＾…呼呼呜…·～＾……呜·喵·～呼～～·＾…·呜呼…呜＾喵咪·呜＾呜咪·…～·～＾……呼咪呜·咪＾…咪＾·喵·喵＾呜…＾喵呼·咪＾呼…＾～咪…＾＾呼呜呼咪喵·呜咪～呜呼呜·…喵＾呼…～～喵喵呼呜喵…呜～咪…喵呜呜喵喵～喵…喵呼呜喵～·咪咪～咪呜喵·～呜·呼＾～咪呜＾··呼…呼呜＾喵～·呜…呼喵·＾呜＾～…呜咪·…～…～咪·喵呼咪………＾呼…＾～咪……咪＾～呼喵咪＾呼咪…呼呼呼呜·～咪呜喵··…·＾咪～～呼呜呼·……呼···＾·呜呼呼…＾＾呜…喵＾呜·呼呜＾＾呼…呼…呼·呼…＾＾呼·呼喵＾…～咪呼呜＾呼呜………＾＾呼咪～＾呼咪呜咪·…～·………呜＾呜呼··……咪＾呜·……咪＾～呼喵咪＾呼咪…呼呼呼呜·～咪呜喵··…·＾咪～＾·喵呜·呜咪呜呜·＾～＾～呼…呼呜＾………＾～～·＾呼＾＾…呜咪·＾呼咪喵喵喵·～咪呜…喵呼呜喵～～喵咪喵咪呜喵·～咪咪～呜呼喵·～咪…喵…～～呼～＾…·呼＾…＾咪＾·喵……咪＾…呜…喵＾呜·呼呜呼＾～咪～咪·…呼·呼呼··＾呜＾·…咪～＾＾·喵…＾＾～＾＾··…呜咪…呜呼呼呜·…＾…呜呼咪··～……咪＾喵··呼＾…喵呼呜··～咪呼…＾呼咪·喵＾·喵呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·呜咪～～呼…喵·呜咪～咪呜咪·…～·～＾·喵呼喵呼…呜＾呼…＾～咪………·咪·＾咪＾·呼～喵呼咪＾·呜…呜呼呼呜＾……＾呼咪呜··…喵＾呜·呜＾～…～呼呼·呜·咪·喵＾呜呼呼喵呼…咪…呜咪·…～…＾＾呜…呜＾·…呜……喵呼喵～·～咪～呜呜＾呼＾喵呼呼呜·＾…·咪＾…＾呼咪呜·～…呜咪·…～…～…呜咪呼喵＾·～…～～呼＾………＾…呼呼呜·…呼……咪呜＾呼……呼～呜呼咪呜…～呼呼·呼～～…·＾＾喵＾呜～··……喵呜～咪·喵…＾呜呜·呜…＾＾～咪呼·呜………呜…＾咪·＾…＾呜咪·…～咪喵喵喵·～咪呜咪喵喵呜喵喵～喵咪喵喵呜喵呼呜呜…·＾呼喵呼～呼·呜…～呼＾喵呜…～呼呼·呜～··呼呼～～呜～咪…喵…呼喵＾＾咪＾咪咪呼＾·喵咪·＾咪呼…＾·呜·…呼…＾·咪呜＾呼呼～呼呜…～…喵呼呜咪～～喵喵呼呜喵…喵～喵咪～～呼咪喵＾呜咪～·呼喵呜～呼…呼咪…咪＾·喵·喵＾呜…·＾·…呜…～…呜＾～…＾呼＾～呼呜喵·～咪…咪呜＾呼·咪＾…喵呼呜喵＾呜咪…咪呜…呜·呜＾呜＾呜·…·咪咪呼…＾…·………呜＾＾～呼…呼咪…呜＾～呜·～呼＾～··…·呜咪～··…～·～呼呜呼＾喵呼·咪＾呼…＾呼喵·咪＾…＾呼咪呜·～……咪＾喵呼·呜＾呜＾呜·…·咪咪～…呜·咪…·…＾咪呜～呼…呼咪～咪呜～…·呜呼～＾·咪……喵＾～…·…·…＾…～·＾呜呼＾呜＾…咪＾·喵·喵＾呜…＾喵呼…·＾呼～＾呼喵·呼＾呼呜＾喵咪·呜＾呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼咪喵·呜咪·～呼呜喵·……喵＾呜·呼呜呼＾～咪～咪·…呼…·＾＾喵＾喵…·＾咪呼呜·＾……·咪＾呜呜·咪··…～呼＾呼··呜……咪呜～呼…呼咪呼喵呼呜咪·～…＾呜呼咪＾＾呼咪～呼＾喵喵…·呼＾·＾喵喵……咪呜咪·…～·呜咪呼…·＾呜＾～＾呼＾＾…呜·呜…呼·呜·＾·咪呼…咪呼·～·喵咪…呼呜～咪…喵·呜喵喵咪…喵呜～呜喵喵·呜咪～·呼…喵·喵咪～咪呜咪·…～·咪…·呜呼咪呼＾＾＾～～呼咪呼·～…呼咪呜＾呼··咪～喵呜·～…喵＾呜·呜＾咪·呜咪呼呼呜…～·呜＾·…＾喵呼·咪＾～呼＾呼··呜……咪呜＾呼＾喵呼呼＾＾…呜·呜…呼·呼咪喵·～＾呼呼＾咪咪＾呼＾……呜～呼…呼咪呼＾＾·～·…咪…咪＾呜·…＾…呜咪·…～·咪＾呼＾·喵··呜咪…咪＾·喵·喵＾呜…＾呜…＾喵…呼喵＾呼＾……＾～呜＾咪呼＾＾＾～咪＾喵＾·呼＾呼咪呜＾呼………呼呜＾喵～·～…＾呜呼喵喵·……呜喵·～呼咪喵喵喵·～咪呜咪喵喵呼咪喵·呼咪·～呼咪～·喵…喵＾呜·呜·喵·～呼…喵··喵…～呼呜呼呜·咪…咪…呼呜呼呜呼·…咪…咪＾呜·…＾……呼呼呜喵·呼呼～＾＾＾呼··咪～喵呜·～…喵＾呜·呼呜呼＾～咪～咪·…呼·呜咪＾·＾咪喵·呜＾…咪＾呜·…＾＾呜…呼咪呜…＾咪呼＾＾·～……呼·呼＾呜呼…～咪呜喵·～呼咪喵喵喵·～咪呜咪喵喵呜…喵＾呜咪呜…呜咪·…～·呜…呼喵·＾～＾咪咪～…呼呜呼……呼·呼＾呜呼…～咪呼咪·～～………～～呜～呼…呼咪…咪＾·喵·喵＾呜…＾咪喵＾·呼～～呼咪呼…＾＾呜…呼咪呜…＾咪～～＾…～·喵咪～喵＾呜咪＾·咪呜咪·…～·呜呼＾～··呼·咪…～咪＾·＾·呼咪··呜＾··呼＾呼呼呜…喵·咪…＾喵呜·呜…·＾～喵呜·～…喵＾呜·呜＾咪··咪呼呜＾·～呜呼呜…喵喵·～…喵＾呜·呼喵…·喵咪～～＾咪＾……咪呼咪呜～呼…呼咪～喵＾喵～·呼咪··呜～咪…喵·呜喵喵咪…喵呜～呜喵喵…呜咪·～呜…喵…呼咪～呜呜＾喵·…呼呜咪呜咪·…～·～＾·喵呼喵呼…呜＾～咪＾喵＾·～…呼…··喵＾喵＾呼＾·咪咪·～……呜呼喵咪·咪咪～～＾咪＾·～…呼…·＾喵＾……呼呼呼～喵·～咪呜喵＾咪呜…～呼呼呜＾喵～……＾～＾＾＾呼…～咪呜咪·…～·呜咪呼…·＾呜＾～＾～…·…＾…＾…＾呜·～咪…喵·呜喵喵咪…喵呜～喵·～咪呜…喵呼呜…·～咪…呜＾呜喵·…呼·～…呼…＾喵＾·～咪…咪＾呜·…＾＾呜…呼咪呜…＾咪…喵·………·＾呼呼·～咪…呜＾呜喵·…呼…喵呼呜…～～喵 &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211; 2011年11月17日，抽风的留下 400 days left.&lt;img src=&quot;http://www1.feedsky.com/t1/585363501/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363501/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>歪歪不知所云</category><pubDate>Thu, 17 Nov 2011 23:26:18 +0800</pubDate><author>猫Mi</author><comments>http://www.mielf.net/mi/400left#comments</comments><guid isPermaLink="false">http://www.mielf.net/?p=514</guid><dc:creator>猫Mi</dc:creator><fs:srclink>http://www.mielf.net/mi/400left</fs:srclink><fs:srcfeed>http://www.mielf.net/feed</fs:srcfeed><fs:itemid>feedsky/HACKCRAFT/~8432820/585363501/5913670</fs:itemid></item><item><title>吐槽一款三引擎浏览器——Lunascape</title><link>http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363502/5913670/1/item.html</link><content:encoded>&lt;p&gt;&lt;img class=&quot;ngg-singlepic ngg-none&quot; src=&quot;http://www.mielf.net/wp-content/gallery/lunascape_webbrower/00.png&quot; alt=&quot;00&quot; /&gt;&lt;/p&gt;
&lt;p&gt;今天羽毛要为大家介绍一款号称“史上第一款三引擎浏览器”——Lunascape。目前最先版本是6.5.6，支持包括中文在内的十二国语言，但是仅有Windows平台版本的。想要体验的朋友请&lt;a title=&quot;http://www.lunascape.tv/&quot; href=&quot;http://http://www.lunascape.tv/&quot; class=&quot;aga aga_3&quot; target=&quot;_blank&quot;&gt;移步官网&lt;/a&gt;。&lt;span id=&quot;more-498&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;0、目前全球主流的四大浏览器引擎分别是：微软的Trident，Mozilla基金会的Gecko，由KDE开发并最终被苹果发扬光大的WebKit（原名KHTML），和由Opera公司开发的Presto。而这款浏览器则采用了前三者，不知道没有采用四核是否和版权有关。&lt;/p&gt;
&lt;p&gt;1、如果你不能访问官网就对了，这个网站已经被墙了。翻墙的方法自己搞，或者网上搜搜相信也能搜到可以访问的安装路径。:)&lt;/p&gt;
&lt;p&gt;2、从网站的介绍来看，这个浏览器应该是由一个日本的团队开发的。&lt;/p&gt;
&lt;p&gt;3、普及下小知识，不知道大家注意到.tv这个域名没：&lt;a title=&quot;TV域名&quot; href=&quot;http://baike.baidu.com/view/376593.htm&quot; class=&quot;aga aga_4&quot; target=&quot;_blank&quot;&gt;趣闻1&lt;/a&gt;，&lt;a title=&quot; .tv 域名正在消失？！&quot; href=&quot;http://jandan.net/2009/05/02/dont-buy-tv.html&quot; class=&quot;aga aga_5&quot; target=&quot;_blank&quot;&gt;趣闻2&lt;/a&gt;；&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;下载并安装完成以后，就由我带领大家来欣赏下这款“神级作品”吧。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;如果在安装的时候选择了：启动加速，那么它会默认在启动项中添加一个包含startup参数的启动项，在实际使用过程中，除了会有个启动动画以外，对系统启动速度和界面都没有太多的影响，最终会在托盘中生成一个图标。&lt;/p&gt;
&lt;p&gt;但是在我取消了自启动以后，我再重新开机并启动这个浏览器，会有长时间的假死状态。&lt;/p&gt;
&lt;p&gt;所以，如果看官你真心打算用这款浏览器，那么一定要保留它的开机启动啊~~&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img class=&quot;ngg-singlepic ngg-none&quot; src=&quot;http://www.mielf.net/wp-content/gallery/lunascape_webbrower/02.png&quot; alt=&quot;02&quot; /&gt;&lt;/p&gt;
&lt;p&gt;首先来看看它的默认界面，和现在全球主流的浏览器风格相比，它并不简洁，相反容易让人联想到国内的很多浏览器——界面上无数的推广信息。同时，如果在最大化的时候，你是不能拖动它的——即不能通过拖动来让他“非最大化”，很不方便多屏使用。&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;ngg-singlepic ngg-none&quot; src=&quot;http://www.mielf.net/wp-content/gallery/lunascape_webbrower/03.png&quot; alt=&quot;03&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我们来看看搜索框附近，首先它内置了相当多的搜索引擎，并且按照日本的现况，谷歌、雅虎和必应自然而然的成为了前三个选择。接下来居然有ebay和亚马逊，这是在国内几乎没有遇见的。然后搜索框的右侧也出现了三个图标，直接单击这三个图标，可以进入他们的官网。这再一次让羽毛我不得不认为亚马逊和ebay是它的赞助商，不过我没有去查证，权当胡乱说了。&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;ngg-singlepic ngg-none&quot; src=&quot;http://www.mielf.net/wp-content/gallery/lunascape_webbrower/04.png&quot; alt=&quot;04&quot; /&gt;&lt;/p&gt;
&lt;p&gt;接着我们将视线平移到中间的地址栏，我们可以在这里方便的选择所用的引擎——单击引擎的图标，将会循环调用那三个浏览器引擎，且每次调用都会重新刷新页面，不过它们共享了session和cookies。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;在利用淘宝网站做实验的时候，发现它的共享session和cookies机制是有问题的，大致现象如下：&lt;/p&gt;
&lt;p&gt;如果用Trident或Gecko内核登录，那么Webkit内核并不能读取session，即显示未登录状态；&lt;/p&gt;
&lt;p&gt;而如果用Webkit登录，则Gecko内核会神奇的显示“页面超时”，但Trident内核会读取到登录状态。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;如果你在地址栏输入了新的地址，它的默认设置会调用默认引擎打开新的TAB，而不是在本窗口刷新。不过可以在设置里取消这个并不是很好用的功能。&lt;/p&gt;
&lt;p&gt;再继续看浏览器右侧，我们能看见一套Ticker系统，并且已经内置了许多Ticker。虽然可以取消显示，但是这些都让这款浏览器的默认界面显得非常繁杂。&lt;/p&gt;
&lt;p&gt;接下来，我们来看看它的设置系统。在界面中我们能很明显的看到一个扳手按钮，自然那个就是它的设置了。点开研究下里面的内容：&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;ngg-singlepic ngg-none&quot; src=&quot;http://www.mielf.net/wp-content/gallery/lunascape_webbrower/05.png&quot; alt=&quot;05&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在General Settings里面，可以设置启动页面和主页，不得不说这个主页的设置非常坑爹：在Default Engine设置区域里，你应该先选择默认引擎，然后再点击引擎选项，在里面设置主页，换句话说，它们不共享主页。并且它和你电脑上的IE共享设置，因此在设置的时候要小心。&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;ngg-singlepic ngg-none&quot; src=&quot;http://www.mielf.net/wp-content/gallery/lunascape_webbrower/06.png&quot; alt=&quot;06&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后再看设置Advanced-Account下面，这又是一个坑爹的设计，相信大家都和我一样并不明白什么是luna ID，所以大家和我一样都会去点击“what is lunna id”的链接，神奇的事情发生了：它用IE打开了页面，是的，它用的是IE，既不是我的默认浏览器，也不是它自己，而是IE！而且打开的页面是不存在的，于是网页又被重置到它的官网首页了，于是，我还是不知道什么是luna ID。&lt;/p&gt;
&lt;p&gt;当然它的设计也还是有一些亮点的，例如在Advanced-Backups就为浏览器提供了设置的自动备份。虽然正常情况下也用不上，但是考虑到它设置的复杂性以及如果重装浏览器可以便于恢复，这还是个不错的考虑（Chrome吐槽：为嘛不学我，在线同步，LOL）。同时，它为Webkit提供了独立的代理设置，这让Windows平台版本的Safari和Chrome十分自卑。&lt;/p&gt;
&lt;p&gt;另外，我们从设置的Tool Bar-Settings Bar界面引入它的另一个神级作品。关闭设置界面，我们准备调出这个settings bar来欣赏下：在标题栏右键，然后如图所示显示这个setting界面。&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;ngg-singlepic ngg-none&quot; src=&quot;http://www.mielf.net/wp-content/gallery/lunascape_webbrower/07.png&quot; alt=&quot;07&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这个界面的设计，总体来说是非常新颖的。例如在Search Engine里，轻松点选，就可以更换默认搜索引擎。但是它的很多选项其意义比较晦涩，很难理解，且有些设置又没有明显的表现，因此也不知道是用来做什么的。例如，我在测试它的代理设置的时候，并没有感觉出有什么不同。&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;ngg-singlepic ngg-none&quot; src=&quot;http://www.mielf.net/wp-content/gallery/lunascape_webbrower/08.png&quot; alt=&quot;08&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在内存占用方面，我用IE9，Firefox9（Nightly），Opera11.5，Safari5.1和Lunascape6.5.6做对比（因为我Chrome运行了大量插件，我就不拿来对比了）。并且都统一访问优酷和百度首页，总体来说Lunascape对内存的控制还是不错的，虽然它内置的三个浏览器对内存的占有率不一样，但总体还是表现不错的。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;在测试中，Lunascape使用的Trident内核的内存占有率是表现最差的，而它使用的Webkit内核在访问（包括刷新）优酷网站的时候，会莫名其妙激活下载，并要求我下载好几个swf文件。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;总体来说，这款浏览器目前还不适合使用，需要改进的地方还有很多。因为不了解日本国和美国的主流浏览器状况，因此也不好说它这样的设计是否符合用户使用，但至少还有大量的bug需要改。总的来说，我觉得让这样一款不成熟的浏览器版本号来到了6，总会让IE6泪流满面啊……&lt;/p&gt;
&lt;p&gt;P.S. 吐槽补充：&lt;/p&gt;
&lt;p&gt;0、用这个浏览器打开本地html文件居然是以纯文本的方式显示的（WebKit内核），而切换内核，会告知地址错误。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/585363502/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363502/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mielf.net/featherelf/%e5%90%90%e6%a7%bd%e4%b8%80%e6%ac%be%e4%b8%89%e5%bc%95%e6%93%8e%e6%b5%8f%e8%a7%88%e5%99%a8%e2%80%94%e2%80%94lunascape/feed</wfw:commentRss><slash:comments>2</slash:comments><description>今天羽毛要为大家介绍一款号称“史上第一款三引擎浏览器”——Lunascape。目前最先版本是6.5.6，支持包括中文在内的十二国语言，但是仅有Windows平台版本的。想要体验的朋友请移步官网。 0、目前全球主流的四大浏览器引擎分别是：微软的Trident，Mozilla基金会的Gecko，由KDE开发并最终被苹果发扬光大的WebKit（原名KHTML），和由Opera公司开发的Presto。而这款浏览器则采用了前三者，不知道没有采用四核是否和版权有关。 1、如果你不能访问官网就对了，这个网站已经被墙了。翻墙的方法自己搞，或者网上搜搜相信也能搜到可以访问的安装路径。:) 2、从网站的介绍来看，这个浏览器应该是由一个日本的团队开发的。 3、普及下小知识，不知道大家注意到.tv这个域名没：趣闻1，趣闻2； 下载并安装完成以后，就由我带领大家来欣赏下这款“神级作品”吧。 如果在安装的时候选择了：启动加速，那么它会默认在启动项中添加一个包含startup参数的启动项，在实际使用过程中，除了会有个启动动画以外，对系统启动速度和界面都没有太多的影响，最终会在托盘中生成一个图标。 但是在我取消了自启动以后，我再重新开机并启动这个浏览器，会有长时间的假死状态。 所以，如果看官你真心打算用这款浏览器，那么一定要保留它的开机启动啊~~ 首先来看看它的默认界面，和现在全球主流的浏览器风格相比，它并不简洁，相反容易让人联想到国内的很多浏览器——界面上无数的推广信息。同时，如果在最大化的时候，你是不能拖动它的——即不能通过拖动来让他“非最大化”，很不方便多屏使用。 我们来看看搜索框附近，首先它内置了相当多的搜索引擎，并且按照日本的现况，谷歌、雅虎和必应自然而然的成为了前三个选择。接下来居然有ebay和亚马逊，这是在国内几乎没有遇见的。然后搜索框的右侧也出现了三个图标，直接单击这三个图标，可以进入他们的官网。这再一次让羽毛我不得不认为亚马逊和ebay是它的赞助商，不过我没有去查证，权当胡乱说了。 接着我们将视线平移到中间的地址栏，我们可以在这里方便的选择所用的引擎——单击引擎的图标，将会循环调用那三个浏览器引擎，且每次调用都会重新刷新页面，不过它们共享了session和cookies。 在利用淘宝网站做实验的时候，发现它的共享session和cookies机制是有问题的，大致现象如下： 如果用Trident或Gecko内核登录，那么Webkit内核并不能读取session，即显示未登录状态； 而如果用Webkit登录，则Gecko内核会神奇的显示“页面超时”，但Trident内核会读取到登录状态。 如果你在地址栏输入了新的地址，它的默认设置会调用默认引擎打开新的TAB，而不是在本窗口刷新。不过可以在设置里取消这个并不是很好用的功能。 再继续看浏览器右侧，我们能看见一套Ticker系统，并且已经内置了许多Ticker。虽然可以取消显示，但是这些都让这款浏览器的默认界面显得非常繁杂。 接下来，我们来看看它的设置系统。在界面中我们能很明显的看到一个扳手按钮，自然那个就是它的设置了。点开研究下里面的内容： 在General Settings里面，可以设置启动页面和主页，不得不说这个主页的设置非常坑爹：在Default Engine设置区域里，你应该先选择默认引擎，然后再点击引擎选项，在里面设置主页，换句话说，它们不共享主页。并且它和你电脑上的IE共享设置，因此在设置的时候要小心。 然后再看设置Advanced-Account下面，这又是一个坑爹的设计，相信大家都和我一样并不明白什么是luna ID，所以大家和我一样都会去点击“what is lunna id”的链接，神奇的事情发生了：它用IE打开了页面，是的，它用的是IE，既不是我的默认浏览器，也不是它自己，而是IE！而且打开的页面是不存在的，于是网页又被重置到它的官网首页了，于是，我还是不知道什么是luna ID。 当然它的设计也还是有一些亮点的，例如在Advanced-Backups就为浏览器提供了设置的自动备份。虽然正常情况下也用不上，但是考虑到它设置的复杂性以及如果重装浏览器可以便于恢复，这还是个不错的考虑（Chrome吐槽：为嘛不学我，在线同步，LOL）。同时，它为Webkit提供了独立的代理设置，这让Windows平台版本的Safari和Chrome十分自卑。 另外，我们从设置的Tool Bar-Settings Bar界面引入它的另一个神级作品。关闭设置界面，我们准备调出这个settings bar来欣赏下：在标题栏右键，然后如图所示显示这个setting界面。 这个界面的设计，总体来说是非常新颖的。例如在Search Engine里，轻松点选，就可以更换默认搜索引擎。但是它的很多选项其意义比较晦涩，很难理解，且有些设置又没有明显的表现，因此也不知道是用来做什么的。例如，我在测试它的代理设置的时候，并没有感觉出有什么不同。 在内存占用方面，我用IE9，Firefox9（Nightly），Opera11.5，Safari5.1和Lunascape6.5.6做对比（因为我Chrome运行了大量插件，我就不拿来对比了）。并且都统一访问优酷和百度首页，总体来说Lunascape对内存的控制还是不错的，虽然它内置的三个浏览器对内存的占有率不一样，但总体还是表现不错的。 在测试中，Lunascape使用的Trident内核的内存占有率是表现最差的，而它使用的Webkit内核在访问（包括刷新）优酷网站的时候，会莫名其妙激活下载，并要求我下载好几个swf文件。 总体来说，这款浏览器目前还不适合使用，需要改进的地方还有很多。因为不了解日本国和美国的主流浏览器状况，因此也不好说它这样的设计是否符合用户使用，但至少还有大量的bug需要改。总的来说，我觉得让这样一款不成熟的浏览器版本号来到了6，总会让IE6泪流满面啊…… P.S. 吐槽补充： 0、用这个浏览器打开本地html文件居然是以纯文本的方式显示的（WebKit内核），而切换内核，会告知地址错误。&lt;img src=&quot;http://www1.feedsky.com/t1/585363502/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363502/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>lunascape</category><category>浏览器引擎</category><category>gecko</category><category>trident</category><category>webkit</category><category>浏览器</category><category>技术杂谈</category><pubDate>Tue, 27 Sep 2011 22:31:42 +0800</pubDate><author>羽毛</author><comments>http://www.mielf.net/featherelf/%e5%90%90%e6%a7%bd%e4%b8%80%e6%ac%be%e4%b8%89%e5%bc%95%e6%93%8e%e6%b5%8f%e8%a7%88%e5%99%a8%e2%80%94%e2%80%94lunascape#comments</comments><guid isPermaLink="false">http://www.mielf.net/?p=498</guid><dc:creator>羽毛</dc:creator><fs:srclink>http://www.mielf.net/featherelf/%e5%90%90%e6%a7%bd%e4%b8%80%e6%ac%be%e4%b8%89%e5%bc%95%e6%93%8e%e6%b5%8f%e8%a7%88%e5%99%a8%e2%80%94%e2%80%94lunascape</fs:srclink><fs:srcfeed>http://www.mielf.net/feed</fs:srcfeed><fs:itemid>feedsky/HACKCRAFT/~8432820/585363502/5913670</fs:itemid></item><item><title>一个简单的Android Library Project例子</title><link>http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363503/5913670/1/item.html</link><content:encoded>&lt;p&gt;最近羽毛自己写了一个Android的小控件：签名板，想在这里与大家分享一下Android Library Project的使用心得。先说说项目的内容：简单的说，就是一个不能换颜色的白板，并且能将绘制的内容保存下来，实现“签名笔迹记录”的简单功能。这个项目内容本身是很简单，而且多少有点幼稚，但是透过这个例子，却可以和大家分享下Library Project的使用。为了方便继续下面的解说，感兴趣的可以从&lt;a title=&quot;Android签名板&quot; href=&quot;http://download.csdn.net/detail/jump_1990/3619292&quot; class=&quot;aga aga_10&quot; target=&quot;_blank&quot;&gt;CSDN这里&lt;/a&gt;下载工程文件，不过这次是要收费咯~o(∩_∩)o &lt;span id=&quot;more-484&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一、何谓Library Project：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;关于Library Project的官方详细解释可以参考&lt;a title=&quot;Managing Projects&quot; href=&quot;http://developer.android.com/guide/developing/projects/index.html&quot; class=&quot;aga aga_11&quot; target=&quot;_blank&quot;&gt;这里&lt;/a&gt;，对英语不感冒的同学，可以参考我的简单解释：如果有一部分代码被多个工程共享了，那么这个时候把它做成库来加载，是最好的选择。在Java中，我们一般采用Jar包的形式提供库文件，但是在Android开发中，官方并不赞成打包为Jar包的方式，虽然在网上可以搜到一些“旁门左道”把资源打包成Jar包。而个人感觉Library Project的一个最大缺点就是库工程文件是展开的，这样工程文件“可以修改而不是只读”。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*说明：本文中的操作均利用Eclipse with ADT实现的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二、如何创建Library Project：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Library Project和Standard Project的创建方式是一样——均是新建一个Android Project。&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;ngg-singlepic ngg-none&quot; src=&quot;http://www.mielf.net/wp-content/gallery/android_library_project/01.png&quot; alt=&quot;01&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在创建工程的时候，要注意，如果库工程中有 &lt;code&gt;&amp;lt;activity&amp;gt;、&lt;/code&gt; &lt;code&gt;&amp;lt;service&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;receiver&amp;gt;或者&lt;/code&gt; &lt;code&gt;&amp;lt;provider&amp;gt;等，在用户工程的manifest.xml文件中均需要有专门的声明，详见&lt;a title=&quot;Referencing a library project&quot; href=&quot;http://developer.android.com/guide/developing/projects/projects-eclipse.html#ReferencingLibraryProject&quot; class=&quot;aga aga_12&quot; target=&quot;_blank&quot;&gt;官方说明&lt;/a&gt;。&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;工程创建完毕以后，打开工程的属性配置，并选择到Android一项中，勾选“is library”：&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;ngg-singlepic ngg-none&quot; src=&quot;http://www.mielf.net/wp-content/gallery/android_library_project/03.png&quot; alt=&quot;03&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后，再创建（或者选中已有的）一个用户工程，同样选择工程属性，然后在Library面板中添加刚才的库工程：&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;ngg-singlepic ngg-none&quot; src=&quot;http://www.mielf.net/wp-content/gallery/android_library_project/04.png&quot; alt=&quot;04&quot; /&gt;&lt;/p&gt;
&lt;p&gt;整个添加过程就结束了。这里有一个&lt;strong&gt;疑难杂症&lt;/strong&gt;提醒一下大家：如果在你完成了上诉步骤以后，发现在用户工程中仍然无法正常索引库工程的内容，Eclipse的自动补全系统也不能帮你添加import，甚至你手动添加了import都还是不能识别，那么，尝试重启一下你的Eclipse吧。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三、针对 Library Project的一些讨论：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 库文件需要Activity么？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;从功能上讲，Android官方为大家提供了为库工程添加一切类型的可能性，然而这并不意味着我们就一定要这么做。&lt;/p&gt;
&lt;p&gt;例如在我这次写的工程中，库工程的主要作用就是提供一个LinearLayout对象，里面躺着我的签名板。于是我有两个选择：1、提供一个LinearLayout对象；2、提供一个Activity对象。&lt;/p&gt;
&lt;p&gt;通常情况下，我们会发现，采用前一种方法会令库工程更加灵活，因为如果提供一个Activity，就意味着我们必须提供它一些修饰信息：是否全屏，大小，配色以及Intent的读取和写入。这些都是与用户工程息息相关的，而对于签名板来说，则是多余的。&lt;/p&gt;
&lt;p&gt;然而，如果我们提供的功能是类似于“弹出警告框”，那么或许提供一个直接的Activity会比较方便，虽然在配色方面极有可能与用户工程格格不入，但是作为一个简单的弹出框，它的影响是有限的。（想想平时我们用的各种绚丽的桌面应用，它们的报错框往往采用的是window默认提供的样式。）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2、如何让界面大小更加灵活（上）？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在我提供的例子中，需要为WhiteBoard的构造函数提供签名板的长宽。这个细节值得大家注意，它也消耗了我很多时间来研究相关的函数和逻辑。&lt;/p&gt;
&lt;p&gt;首先，我们能想到的，这两个长宽的提供一定与承载它的界面大小相关，所以我们需要读取父控件的长宽：&lt;/p&gt;
&lt;pre class=&quot;brush:java&quot;&gt;final LinearLayout layout = (LinearLayout) this.findViewById(R.id.lv_main);
int width = layout.getWidth();&lt;/pre&gt;
&lt;p class=&quot;brush:java&quot;&gt;然而如果getWidth这个函数是在Activity的onResume方法执行完之前调用，得到的仅可能是“0”。一个简单的解决方案就是将getWidth方法搬到其他地方读取——等onResume方法执行完毕以后再调用。否则就只有是读取窗口的大小了——关于在加载初期获取界面大小的方法暂时没有找到。&lt;/p&gt;
&lt;p class=&quot;brush:java&quot;&gt;另外，在获取了父控件的大小以后，下一步需要考虑的就是这个值会不会太小了。这个问题看似简单，解决起来却非常繁琐，就像许多网页开发者常常忘记考虑用户浏览器窗口可能处于任何大小的情况。一个最简单的办法，就是考虑一个“最小长宽”的设计，如果窗口过小，就隐藏部分生成的信息。这点请参考我的WhiteBoard类下的calcHeightOfTopBorder方法。&lt;/p&gt;
&lt;p class=&quot;brush:java&quot;&gt;&lt;strong&gt;3、如何让界面大小更加灵活（下）？&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;brush:java&quot;&gt;接刚才所述，现在介绍calcHeightOfTopBorder方法中的一些技术。&lt;/p&gt;
&lt;p class=&quot;brush:java&quot;&gt;在这个方法中，我的目的是读取图标的大小，并把他最为“最小长宽”的重要参考。正如一开始所讨论的，我们无法在界面加在好之前读取界面长宽，因此我们无法直接读取使用了图标的ImageView控件的大小。于是，我们直接去读取图标的大小。加载图标的办法可以参考官方对&lt;a title=&quot;BitmapFactory类&quot; href=&quot;http://developer.android.com/reference/android/graphics/BitmapFactory.html&quot; class=&quot;aga aga_13&quot; target=&quot;_blank&quot;&gt;BitmapFactory类&lt;/a&gt;的介绍，这里我们要与大家分享的则是一个技巧：那就是在我们加载图标的时候，如果提供了一个BitmapFactory.Options，并将其中的属性“inJustDecodeBounds”设置为True，则实际上BitmapFactory类不会真正加载图片，而仅仅是读取长宽保存在BitmapFactory.Options的outWidth和outHeight变量中。这样，我们就节省了很大的内存空间：&lt;/p&gt;
&lt;pre class=&quot;brush:java&quot;&gt;BitmapFactory.decodeResource(this.context.getResources(), R.drawable.whiteboard_cancel, tempImage);
maxheight = maxheight &amp;gt; tempImage.outHeight ? maxheight : tempImage.outHeight;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/585363503/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363503/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mielf.net/featherelf/simple-android-library-project/feed</wfw:commentRss><slash:comments>0</slash:comments><description>最近羽毛自己写了一个Android的小控件：签名板，想在这里与大家分享一下Android Library Project的使用心得。先说说项目的内容：简单的说，就是一个不能换颜色的白板，并且能将绘制的内容保存下来，实现“签名笔迹记录”的简单功能。这个项目内容本身是很简单，而且多少有点幼稚，但是透过这个例子，却可以和大家分享下Library Project的使用。为了方便继续下面的解说，感兴趣的可以从CSDN这里下载工程文件，不过这次是要收费咯~o(∩_∩)o  一、何谓Library Project： 关于Library Project的官方详细解释可以参考这里，对英语不感冒的同学，可以参考我的简单解释：如果有一部分代码被多个工程共享了，那么这个时候把它做成库来加载，是最好的选择。在Java中，我们一般采用Jar包的形式提供库文件，但是在Android开发中，官方并不赞成打包为Jar包的方式，虽然在网上可以搜到一些“旁门左道”把资源打包成Jar包。而个人感觉Library Project的一个最大缺点就是库工程文件是展开的，这样工程文件“可以修改而不是只读”。 *说明：本文中的操作均利用Eclipse with ADT实现的。 二、如何创建Library Project： Library Project和Standard Project的创建方式是一样——均是新建一个Android Project。 在创建工程的时候，要注意，如果库工程中有 &amp;#60;activity&amp;#62;、 &amp;#60;service&amp;#62;、&amp;#60;receiver&amp;#62;或者 &amp;#60;provider&amp;#62;等，在用户工程的manifest.xml文件中均需要有专门的声明，详见官方说明。 工程创建完毕以后，打开工程的属性配置，并选择到Android一项中，勾选“is library”： 然后，再创建（或者选中已有的）一个用户工程，同样选择工程属性，然后在Library面板中添加刚才的库工程： 整个添加过程就结束了。这里有一个疑难杂症提醒一下大家：如果在你完成了上诉步骤以后，发现在用户工程中仍然无法正常索引库工程的内容，Eclipse的自动补全系统也不能帮你添加import，甚至你手动添加了import都还是不能识别，那么，尝试重启一下你的Eclipse吧。 三、针对 Library Project的一些讨论： 1. 库文件需要Activity么？ 从功能上讲，Android官方为大家提供了为库工程添加一切类型的可能性，然而这并不意味着我们就一定要这么做。 例如在我这次写的工程中，库工程的主要作用就是提供一个LinearLayout对象，里面躺着我的签名板。于是我有两个选择：1、提供一个LinearLayout对象；2、提供一个Activity对象。 通常情况下，我们会发现，采用前一种方法会令库工程更加灵活，因为如果提供一个Activity，就意味着我们必须提供它一些修饰信息：是否全屏，大小，配色以及Intent的读取和写入。这些都是与用户工程息息相关的，而对于签名板来说，则是多余的。 然而，如果我们提供的功能是类似于“弹出警告框”，那么或许提供一个直接的Activity会比较方便，虽然在配色方面极有可能与用户工程格格不入，但是作为一个简单的弹出框，它的影响是有限的。（想想平时我们用的各种绚丽的桌面应用，它们的报错框往往采用的是window默认提供的样式。） 2、如何让界面大小更加灵活（上）？ 在我提供的例子中，需要为WhiteBoard的构造函数提供签名板的长宽。这个细节值得大家注意，它也消耗了我很多时间来研究相关的函数和逻辑。 首先，我们能想到的，这两个长宽的提供一定与承载它的界面大小相关，所以我们需要读取父控件的长宽： final LinearLayout layout = (LinearLayout) this.findViewById(R.id.lv_main); int width = layout.getWidth(); 然而如果getWidth这个函数是在Activity的onResume方法执行完之前调用，得到的仅可能是“0”。一个简单的解决方案就是将getWidth方法搬到其他地方读取——等onResume方法执行完毕以后再调用。否则就只有是读取窗口的大小了——关于在加载初期获取界面大小的方法暂时没有找到。 另外，在获取了父控件的大小以后，下一步需要考虑的就是这个值会不会太小了。这个问题看似简单，解决起来却非常繁琐，就像许多网页开发者常常忘记考虑用户浏览器窗口可能处于任何大小的情况。一个最简单的办法，就是考虑一个“最小长宽”的设计，如果窗口过小，就隐藏部分生成的信息。这点请参考我的WhiteBoard类下的calcHeightOfTopBorder方法。 3、如何让界面大小更加灵活（下）？ 接刚才所述，现在介绍calcHeightOfTopBorder方法中的一些技术。 在这个方法中，我的目的是读取图标的大小，并把他最为“最小长宽”的重要参考。正如一开始所讨论的，我们无法在界面加在好之前读取界面长宽，因此我们无法直接读取使用了图标的ImageView控件的大小。于是，我们直接去读取图标的大小。加载图标的办法可以参考官方对BitmapFactory类的介绍，这里我们要与大家分享的则是一个技巧：那就是在我们加载图标的时候，如果提供了一个BitmapFactory.Options，并将其中的属性“inJustDecodeBounds”设置为True，则实际上BitmapFactory类不会真正加载图片，而仅仅是读取长宽保存在BitmapFactory.Options的outWidth和outHeight变量中。这样，我们就节省了很大的内存空间： BitmapFactory.decodeResource(this.context.getResources(), R.drawable.whiteboard_cancel, tempImage); maxheight = [...]&lt;img src=&quot;http://www1.feedsky.com/t1/585363503/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363503/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>画板</category><category>Android</category><category>白板</category><category>Library</category><category>签名板</category><pubDate>Tue, 20 Sep 2011 14:24:46 +0800</pubDate><author>羽毛</author><comments>http://www.mielf.net/featherelf/simple-android-library-project#comments</comments><guid isPermaLink="false">http://www.mielf.net/?p=484</guid><dc:creator>羽毛</dc:creator><fs:srclink>http://www.mielf.net/featherelf/simple-android-library-project</fs:srclink><fs:srcfeed>http://www.mielf.net/feed</fs:srcfeed><fs:itemid>feedsky/HACKCRAFT/~8432820/585363503/5913670</fs:itemid></item><item><title>android开机动画修改</title><link>http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363504/5913670/1/item.html</link><content:encoded>&lt;p&gt;有点久没发关于安卓的文章了，这段时间各种刷ROM改UI玩，有些心得体会正好写写，不得不说android系统的高度可定制可修改真是一个很有玩点的地方。&lt;/p&gt;
&lt;p&gt; &lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/08/TECH090.png&quot;  rel=&quot;lightbox[459]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-470&quot; title=&quot;HACKCRAFT&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/08/TECH090-300x168.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;168&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;嗯，因为新刷的系统是那个红眼的开机画面，个人觉得不是太喜欢，于是就开始动手改造咯！~&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-459&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;下面直入正题好了，相信大家也不是来看我抒发感情的^o^~&lt;/p&gt;
&lt;p&gt;本次刷机用到的工具：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;windows平台 &lt;/p&gt;
&lt;p&gt;运行android的手机（废话 不然刷什么 Ps:需要root根权限，如果没有的欢迎询问度娘）&lt;/p&gt;
&lt;p&gt;Adobe AfterEffect（用这个干嘛？认真的说就是装13用的…&amp;gt;_&amp;lt;…你只需要一个可以生成图片的工具就好了suchas:ps，fireworks，flash，画图，实在不行你用Ctrl+Alt+A吧……）&lt;/p&gt;
&lt;p&gt;Image Optimizer（最近做网站发现的一款神器，可以大幅度缩小图片体积，正好用来减小开机动画体积）&lt;/p&gt;
&lt;p&gt;WinRar（打包开机文件，可以是zip7，winzip，等等）&lt;/p&gt;
&lt;p&gt;R.E.管理器（android下的ROOT文件读写软件，同理其他能够读写系统文件的软件也行）&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;既然已经有了需要的工具，那具体来看下安卓开机动画的情况：&lt;/p&gt;
&lt;p&gt;我的是milestone2，开机动画文件bootanimation.zip存放在/system/media/文件夹下，如果/data/local/bootanimation.zip下存在文件系统会先读取/data/local/bootanimation.zip，据说system下的是会播放完了才进入系统，因为我的开机动画做的还比较长，所以我放在system下了。&lt;/p&gt;
&lt;p&gt;这个zip文件内一般包含2个文件夹part0 part1和一个desc.txt文件&lt;/p&gt;
&lt;p&gt;desc.txt里面的命令格式如下：&lt;/p&gt;
&lt;p&gt;480 800 30 //这一行写的是屏幕的分辨率，我这儿是480px*800px 30是每秒播放的帧数 如果不满屏会填充黑色 超过会取居中&lt;br /&gt;
p 1 0 part0 //这一行P只是起分割作用，1是只播放一遍 0表示播放完停顿的帧数&lt;br /&gt;
p 0 0 part1 //0代表无限循环 一般2个文件夹的意义就在于第一个设置播放一遍 第二个可以循环播放到开机&lt;/p&gt;
&lt;p&gt;然后两个文件夹里面的文件按照数字递增就好了，zip需要打包成无压缩率的方式，也就是选“存储”。&lt;/p&gt;
&lt;p&gt;替换的时候需要先拷贝到你手机的SD卡上面，然后用R.E等文件管理软件替换掉/system/media/bootanimation.zip&lt;/p&gt;
&lt;p&gt;知道了文件的原理和格式，剩下的就是制作自己喜欢的动画了：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/08/未命名.jpg&quot;  rel=&quot;lightbox[459]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-472&quot; title=&quot;图片序列&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/08/未命名-300x168.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;168&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这是我生成的图片序列，我的方法是找了个AE的模版改成自己喜欢的信息，最后导出图片序列，大家可以根据自己的能力制作，为了减小体积，我只按照flash的标准输出了每秒12桢，其实效果还不错，最后强烈推荐下Image Optimizer软件&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/08/1.jpg&quot;  rel=&quot;lightbox[459]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-473&quot; title=&quot;1&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/08/1-300x219.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;219&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;通常会减少图片体积50%左右，而以肉眼基本上无法分辨，个人认为比通过调整jpg质量减小体积的方法好很多。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://u.115.com/file/e6drjkzx&quot; class=&quot;aga aga_15&quot;&gt;http://u.115.com/file/e6drjkzx&lt;/a&gt; 把我的开机动画做了个GIF文件，最后还是有5MB大，有兴趣的可以自己去瞧瞧，接收开机动画定制（非免费^-^）&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/585363504/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363504/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mielf.net/mi/android-bootimages/feed</wfw:commentRss><slash:comments>0</slash:comments><description>有点久没发关于安卓的文章了，这段时间各种刷ROM改UI玩，有些心得体会正好写写，不得不说android系统的高度可定制可修改真是一个很有玩点的地方。   嗯，因为新刷的系统是那个红眼的开机画面，个人觉得不是太喜欢，于是就开始动手改造咯！~ 下面直入正题好了，相信大家也不是来看我抒发感情的^o^~ 本次刷机用到的工具： windows平台  运行android的手机（废话 不然刷什么 Ps:需要root根权限，如果没有的欢迎询问度娘） Adobe AfterEffect（用这个干嘛？认真的说就是装13用的…&amp;#62;_&amp;#60;…你只需要一个可以生成图片的工具就好了suchas:ps，fireworks，flash，画图，实在不行你用Ctrl+Alt+A吧……） Image Optimizer（最近做网站发现的一款神器，可以大幅度缩小图片体积，正好用来减小开机动画体积） WinRar（打包开机文件，可以是zip7，winzip，等等） R.E.管理器（android下的ROOT文件读写软件，同理其他能够读写系统文件的软件也行） &amp;#160; 既然已经有了需要的工具，那具体来看下安卓开机动画的情况： 我的是milestone2，开机动画文件bootanimation.zip存放在/system/media/文件夹下，如果/data/local/bootanimation.zip下存在文件系统会先读取/data/local/bootanimation.zip，据说system下的是会播放完了才进入系统，因为我的开机动画做的还比较长，所以我放在system下了。 这个zip文件内一般包含2个文件夹part0 part1和一个desc.txt文件 desc.txt里面的命令格式如下： 480 800 30 //这一行写的是屏幕的分辨率，我这儿是480px*800px 30是每秒播放的帧数 如果不满屏会填充黑色 超过会取居中 p 1 0 part0 //这一行P只是起分割作用，1是只播放一遍 0表示播放完停顿的帧数 p 0 0 part1 //0代表无限循环 一般2个文件夹的意义就在于第一个设置播放一遍 第二个可以循环播放到开机 然后两个文件夹里面的文件按照数字递增就好了，zip需要打包成无压缩率的方式，也就是选“存储”。 替换的时候需要先拷贝到你手机的SD卡上面，然后用R.E等文件管理软件替换掉/system/media/bootanimation.zip 知道了文件的原理和格式，剩下的就是制作自己喜欢的动画了： 这是我生成的图片序列，我的方法是找了个AE的模版改成自己喜欢的信息，最后导出图片序列，大家可以根据自己的能力制作，为了减小体积，我只按照flash的标准输出了每秒12桢，其实效果还不错，最后强烈推荐下Image Optimizer软件 通常会减少图片体积50%左右，而以肉眼基本上无法分辨，个人认为比通过调整jpg质量减小体积的方法好很多。 http://u.115.com/file/e6drjkzx 把我的开机动画做了个GIF文件，最后还是有5MB大，有兴趣的可以自己去瞧瞧，接收开机动画定制（非免费^-^）&lt;img src=&quot;http://www1.feedsky.com/t1/585363504/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363504/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>安卓过来抱抱</category><category>修改</category><category>ROM</category><category>开机</category><category>安卓</category><category>bootanimation.zip</category><category>动画</category><pubDate>Wed, 03 Aug 2011 21:32:12 +0800</pubDate><author>猫Mi</author><comments>http://www.mielf.net/mi/android-bootimages#comments</comments><guid isPermaLink="false">http://www.mielf.net/?p=459</guid><dc:creator>猫Mi</dc:creator><fs:srclink>http://www.mielf.net/mi/android-bootimages</fs:srclink><fs:srcfeed>http://www.mielf.net/feed</fs:srcfeed><fs:itemid>feedsky/HACKCRAFT/~8432820/585363504/5913670</fs:itemid></item><item><title>Not Coder But Programmer</title><link>http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363505/5913670/1/item.html</link><content:encoded>&lt;p&gt;这个话题很早就想写了，但是因为自己也不过是一个编程新手（是谁说过：码一万行代码，你就入门了），所以也一直惶恐不敢写，怕自己写得太过肤浅。尽管如此，今天在微博上和&lt;a title=&quot;@壁虎Harry&quot; href=&quot;http://weibo.com/freej&quot; class=&quot;aga aga_22&quot; target=&quot;_blank&quot;&gt;一位前辈&lt;/a&gt;又谈到了这件事情，他鼓励我把这篇文章写出来，所以我也就班门弄斧一番。 在本文中，我将尝试向大家展现一个合格的程序员应该做到的事情。&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot;&gt; ——写在文章的前面&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-434&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;名词解释：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;·Coder&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;相信很多人都把“写代码”作为自己开始程序员生涯的第一步，然而不幸的是，很多人浑浑噩噩写了几年代码仍然把码代码当作自己唯一的工作，通常这样的人，就是Coder了。&lt;/p&gt;
&lt;p&gt;·&lt;strong&gt;Programmer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果我下文提及的糟糕情况都与你无关，那么恭喜你，你起码是一个“一般的程序员”了。（即使成为程序员，也有八个级别，这个说法可以参考&lt;a title=&quot;The Eight Levels of Programmers&quot; href=&quot;http://www.codinghorror.com/blog/2009/04/the-eight-levels-of-programmers.html&quot; class=&quot;aga aga_23&quot; target=&quot;_blank&quot;&gt;这篇文章&lt;/a&gt;和一篇比较靠谱的&lt;a title=&quot;程序员的八个级别&quot; href=&quot;http://blog.csdn.net/haoel/article/details/4053051&quot; class=&quot;aga aga_24&quot; target=&quot;_blank&quot;&gt;译文&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一、理解需求：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;很多程序员在项目立项初期，总是一副事不关己高高挂起的样子，从来不把客户的需求放在心里，更别说主动接触客户。当然，有些公司的严格流程让程序员很难直接接触到客户，但是尽管如此，也应该及时与做需求分析，甚至是做销售的人沟通，深刻的理解需求。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;案例：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;曾经一个老师布置的作业是：写一个huffman编码，能把文字压缩了。当时我并没有认真思考，只是把这个问题简单的理解为了：用huffman编码将一篇英文文章压缩。并且我还自以为是的在wiki上面查到了英文字母的字频，并根据这个字频将压缩方案写死在了代码里。结果就是，当老师提及要压缩的不仅仅有单词，还有特殊符号，还有其他国家的语言的时候，我的整个程序直接废掉了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;说明：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;不了解客户的真正需求，就会在软件的开发之初，仅仅为表面的，或是某一个具体的场景设计软件，最终软件很难有实用性。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;另外，在一些极限情况，对需求的考虑，我们还应该涉及到一些临界点。例如&lt;a title=&quot;软件真的好难做啊&quot; href=&quot;http://coolshell.cn/articles/4811.html&quot; class=&quot;aga aga_25&quot; target=&quot;_blank&quot;&gt;做家族图谱的时候考虑特殊关系&lt;/a&gt;。而能做到这一点，就更加需要深入理解用户需求，并且通常需要具备一些相关的专业知识——例如做医疗相关的软件，必须对医疗事故的处理有所了解，才能增加程序的鲁棒性。&lt;/p&gt;
&lt;p&gt;当然了，各位程序员也不要太过于焦虑自己对需求的考虑不周，因为毕竟这很多还是项目初期需求分析员该做的事情。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二、对需求进行反馈：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;经常可以听见程序员抱怨做设计的和做需求的人不懂编程，定的需求“无法完成”。然而，有时候想一想，自己是不是有在项目定方案之前和leader或是designer讨论过这些需求，自己有没有参与过风险控制。诚然，做设计的和非技术出生的领导不懂得编程，但是你可以把问题难度更加量化，这样就可以比较容易的达到预期效果：例如，你可以告诉leader，***特效可以做，但是可能需要五天时间，然而我们项目就只有一天时间，所以这个能不能缓一缓，或者项目延期。这里切忌用复杂深奥的技术名词去忽悠你的leader，否则你会死得很惨。&lt;/p&gt;
&lt;p&gt;另外，在一开始的时候就在需求上控制难度，总好过你在做了一半的时候突然告诉PM，做不出来，时间不够要强得多。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三、丰富的文档：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;相信很多程序员最痛恨的就是文档，各式各样的设计文档似乎成为了程序员完不成任务的最佳理由——“我有这个时间写文档，都把这个功能写完了！”&lt;/p&gt;
&lt;p&gt;然而，对于一个正式的项目，文档是必不可少的。就对程序员而言，文档有几个好处：&lt;/p&gt;
&lt;p&gt;1、读需求文档：读需求文档的最大好处是可以让你把本文中的一、二条做好；&lt;/p&gt;
&lt;p&gt;2、写进度文档：在项目时间控制上，人们总是&lt;a title=&quot;日期预估&quot; href=&quot;http://blog.xiqiao.info/2009/10/19/536&quot; class=&quot;aga aga_26&quot; target=&quot;_blank&quot;&gt;揶揄新手的自大&lt;/a&gt;， 而写每日总结或者周总结，不仅可以帮助新手了解自己的进度，对于项目经理把握真实进度也是有帮助的（不要害怕告诉经理你又逾期了，因为他早晚会发现）。在写进度文档方面，很多人抱怨的是那些格式化的文档，太过于官僚和浪费时间。这点我在第九城市的经历倒是蛮好的，他们每个人在下班之前都会给team里群发一个邮件，内容是：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;一、今天计划任务：&lt;/p&gt;
&lt;p&gt;1、***&lt;/p&gt;
&lt;p&gt;2、***&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;三、明天计划任务：&lt;/p&gt;
&lt;p&gt;1、***&lt;/p&gt;
&lt;p&gt;2、***&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;这样的进度文档，相信没有人再敢说耽误时间了吧。换言之，如果这点内容你都不知道写什么，那你今天一定又只是浑浑噩噩的码代码了。&lt;/p&gt;
&lt;p&gt;3、设计文档：这个是非常重要的，因为这些设计文档告诉了你的搭档（team成员，现场部署人员，或者二次开发人员）你们实现了什么功能，又如何使用这些功能。这和代码注释有一些相似点，我们稍后着重讨论。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;案例：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我在最近做的项目里，就和Designer之间遇见了这么一个问题：我说我要某某按钮的素材，她说没问题，并且很快就发给我了。结果就是按钮大小和其他配套的按钮不统一，我还得再调整这个素材（还好我会点fireworks）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;说明：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因为我们这个项目比较赶，而且参与人员很少，所以一开始没有详细的设计文档。相反，如果我们有了设计文档，那么她就明白哪个素材需要什么样的大小和格式了。然而这里也引入了一个很矛盾的地方：我们这个项目直接参与进来的只有四个人，而且时间非常紧，只有一周。所以如果按照正规流程先准备文档，可能Deadline都过去几天了，才能开始开发。&lt;/p&gt;
&lt;p&gt;也就是说，文档虽好，我们也不能忽略它带来的effort。面对定死了的Deadline，我们在文档的详细程度上必须有所取舍。但即使详细正规的文档无法列出来，一些细小的文档仍然是可以准备的，例如在这个案例发生之后，我和她抽时间定了一个（至少我们两个能看懂的）设计草案，把一些RGB值和控件大小给明确的记录在书面上。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;四、拒绝过程化编程：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;大多数编程人员在一开始的时候都是很难改掉过程化变成习惯的：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;案例：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我的一个朋友在一次用C#.NET写数据库交互的时候，有过这么一段代码：&lt;/p&gt;
&lt;p&gt;~声明一些变量&lt;/p&gt;
&lt;p&gt;~从前台输入框中读入用户输入的数据&lt;/p&gt;
&lt;p&gt;~构造一个sqlconnection&lt;/p&gt;
&lt;p&gt;~连接数据库&lt;/p&gt;
&lt;p&gt;~写入数据&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;说明：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;相信稍微有点OO编程习惯的人都会觉得这样的代码是非常丑陋的，并且恨不能立即开始对它进行重构，然而我并不打算用这个例子讲解重构，而是和大家探讨一下这段代码的产生。&lt;/p&gt;
&lt;p&gt;并且，我们要相信我这个朋友十分优秀，也一定会重构，并且事实上当他编完这段代码之后也很快意识到了问题，所以这段代码并没有保留在最终的项目版本中。而重点是，我们为何会让这样的代码得以产生。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;很多人在编程的时候，并没有设计先行，更别说有详细的设计文档了，甚至连脑子里都不愿意多想一想，就迫不及待的开始“赶进度”了。产生上面代码的原因其实很简单：当他开始写这个函数的时候，首先告诉他自己要将用户提交的信息更新到数据库中，所以整个过程是：读入数据，然后写入数据。这样，就和这段代码一样了。所以，过程化编程的原因不在于你用什么语言，而是你的思路就是面向过程的。&lt;/p&gt;
&lt;p&gt;换言之，我们在思考一个完整功能设计的时候，应该在思路上就更加OO，同样是这个例子，我们应该这么考虑：我们需要将用户的信息更新到数据库，所以我们需要一个函数获取用户输入的内容，一个函数更新数据库，然后我分别调用这两个函数。更深一层次的，我应该将这两个函数分别放入两个类中：第一个类是和处理当前页面相关的，在这个类里提供的函数都服务于更新和读取该可视化页面；相反的，另一个类专门处理数据库调用，而且为了提高效率，我可以在类被构造的时候创建链接，在类析构的时候关闭链接，类的其他公共函数都是对数据库进行特定操作的。&lt;/p&gt;
&lt;p&gt;如此一来，一个更加OO的设计就在最初的时候形成了，而不仅仅依赖大量的重构。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;五、良好的书写习惯：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;但凡会编程的人都能写出机器能识别的代码，但并不是每个人都能写出适合人类阅读的代码。如果你只做到了前一条，你是彻彻底底的Coder了。一个好的代码书写习惯应该包括：1、良好的命名规则；2、合理的排版（特别是缩进）；3、保持前后一致。这里限于篇幅，就不跟大家细讲具体的书写习惯，建议大家多看看有名的开源项目，特别是那种多人合作完成的，通常都会有非常值得学习的书写习惯，这里推荐一个&lt;a title=&quot;google-styleguide&quot; href=&quot;http://google-styleguide.googlecode.com/svn/trunk/&quot; class=&quot;aga aga_27&quot; target=&quot;_blank&quot;&gt;Google的编程规范&lt;/a&gt;。当然，保持一致性也是非常重要的，即使是良好的编程规范，如果每个文件里的规则都不一样，依然是非常坏的。&lt;/p&gt;
&lt;p&gt;关于命名规范，以排序为例，讲一点细节：&lt;/p&gt;
&lt;p&gt;1、命名应该能表明函数功能：&lt;/p&gt;
&lt;p&gt;错误：int[] function (int[] a)&lt;/p&gt;
&lt;p&gt;参考：int[] BubbleSort (int[] src)&lt;/p&gt;
&lt;p&gt;2、命名不应过长：（这方面，微软的MFC里的函数几乎是把这个错误发挥到了极致）&lt;/p&gt;
&lt;p&gt;错误：int[] FeatherelfsBubbleSortWithCPP (int[] unsortednums)&lt;/p&gt;
&lt;p&gt;参考：如果一定要想在函数中表明归属，可以考虑在注释里声明或者用一个特别的命名空间&lt;/p&gt;
&lt;p&gt;3、规则前后统一：&lt;/p&gt;
&lt;p&gt;错误：函数一：BubbleSort()；函数二：SortBySwap()；函数三：quicksort()&lt;/p&gt;
&lt;p&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;1、好的代码应该加上注释：注释可以帮助读代码的人快速识别函数的用途和用法；&lt;/p&gt;
&lt;p&gt;2、好的代码不需要注释：如果在命名规则上有所重视，即使没有注释，也可以让他人快速识别自己写的函数；&lt;/p&gt;
&lt;p&gt;3、好的工程项目中应该有注释。&lt;/p&gt;
&lt;p&gt;怎么去理解注释呢？应该说，如果你的代码必须依赖注释才能让别人读懂，这的确暗示你写的代码非常糟糕，但是这并不意味着我们要摒弃注释。例如大多数开源项目会在每个文件头部加入注释来表明版权归属，同时，在文件的一开头就用注释写清楚整个文件的用途肯定能帮助别人理解你的代码。而单纯靠命名来说明函数用途，会很难回避长命名的缺陷。特别的注释也是最终生成设计文档的文字材料。&lt;/p&gt;
&lt;p&gt;另外，一些设计良好的IDE通常会通过识别特定规则的注释来帮助显示函数解释，这也是注释的好处之一。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;七、懒人原则：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;有看过设计模式和重构的人，大概都明白，虽然各种模式不尽相同，但是都有一个共同点：减少重复工作。重复工作不仅会将代码变丑，降低效率，占有内存，最重要的事情是会导致出错。这里列举几个比较容易理解的：&lt;/p&gt;
&lt;p&gt;1、许多做UI界面的，常常会在代码中加入一些无中生有的常数，这些数字有时候还会出现在多个地方。那么我们应该把它全部抽离出来，放入一个常量中。这样的好处是：A.方面你事后理解这些常数的含义；B.如果需要更改具体的数值，你只需要更改常量赋值就行了，而不会因为遗忘某一处的修改导致出错；&lt;/p&gt;
&lt;p&gt;2、用枚举代替魔数。魔数最大的缺点就是本身值是没有任何意义的，并不方便记忆；&lt;/p&gt;
&lt;p&gt;3、可以考虑把相似度很高的函数提取出来，通过传参来达到不同效果。&lt;/p&gt;
&lt;p&gt;好了，懒人原则只讲那么多吧，感觉再说下去，就该谈谈重构什么的了。因此，说到这里，我想说的是：推荐每一位程序员都去看看设计模式和重构的书籍，这对你写出高质量的代码是必经之路。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;八、不写“死代码”：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;除了懒人原则，写代码的时候还要考虑的就是为设计提供延展性，这个看似简单做起来很难。在这里我只打算通过一个案例和大家分享一些最基本的原则。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;案例：&lt;/strong&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;strong&gt;说明：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;案例中不断修改的代价虽然很小，但是可以看出来，一开始图简单方便的代码设计最终导致了最后根据需求而完全重做的结果。同理，之所以OO编程经久不衰，就是因为一个设计良好的面向对象的代码具有很好的延展性。因此我们在设计自己的代码的时候不要为了图方便而轻易把代码写死。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;九、鲁棒性：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;程序员编写的代码应该能做到容错和抛出异常。举几个例子：&lt;/p&gt;
&lt;p&gt;1、操作数组时，要先验证数组长度，避免越界；对于通过函数获取的变量，要检测它是不是NULL值；&lt;/p&gt;
&lt;p&gt;2、对于选择语句，最好增加一个缺省的操作。即使是单IF句，也可以考虑增加一个ELSE来处理异常；&lt;/p&gt;
&lt;p&gt;3、对于当前函数不能处理的异常要再次抛出，直到有能力解决的函数来捕获。这样做的另外一个好处就是提醒使用你代码的其他人注意这个可能产生的异常；&lt;/p&gt;
&lt;p&gt;如果错误无法恢复，弹出适当的警告，添加日志，然后退出程序会是比较好的方法。很少有程序员会养成在程序中记录出错日志的习惯，这对于用户上报错误非常不方便。另外就是弹出的警告，很多人往往是将系统的出错信息直接打印到界面上，对于软件的使用者来说会非常迷茫。&lt;/p&gt;
&lt;p&gt;我的一位老师曾给出一个很不错的办法来解决报错的问题：在项目开始的时候，给每个开发人员分配一个错误号段，比如我领取了1~1000，这样我的每一个报错的信息都可以有一个唯一的识别码。当客户向支持寻求帮助的时候，支持只需要凭借这个错误号就能找到错误的原因，或者能找到我来直接处理。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*十、不炫耀技术：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个话题有一定的局限性，那就是仅仅是针对做产品的开发人员，对于做研发的，估计炫耀技术才是正道吧？&lt;/p&gt;
&lt;p&gt;关于这点，我记得我以前看过的某本书或者杂志里有很详细的阐述过，不过我实在不记得了，抱歉！总之，用两句话叙述两个场景大家就很明了了：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;案例一：老板，抱歉啊，我实在不知道SilverLight2.5里面没有对摄像头的操作，要不，我们重新换回flash吧？&lt;/p&gt;
&lt;p&gt;案例二：老板，搞定了，做完了！就是……就是……没有浏览器完整支持HTML5，特效都出不来。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;炫耀技术似乎都是技术人员的通病，让他们用老掉牙的技术做项目似乎总是引不起他们的兴趣，然而确保技术的成熟和风险可控是做项目必须考虑的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*十一、KISS原则：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对于很多小的项目团队，设计和程序员有时候就是一个人。因此这个设计原则我必须在这里强调。所谓KISS原则，就是“&lt;strong&gt;Keep it simple, Stupid!&lt;/strong&gt;”。这就是为什么遭骂最多的微软公司的产品屡屡获胜。某个杀毒厂商的老总似乎说过类似于这样的一句话：不要让用户做他不懂的选择，而360安全卫士从发展之初到如今，也是正在实践这句话（虽然不是周鸿祎说的）。通过KISS原则赢取用户的例子不胜枚举，在这里只是想提醒那些兼职设计的程序员，不要为了炫耀技术或者追求丰满的功能而让程序变得不友善。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最后：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;暂时就先写到这里吧，如果大家有什么好的建议，可以告诉我，我收集得足够多了，再去写第二版 ^ ^&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/585363505/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363505/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mielf.net/featherelf/not-coder-but-programmer/feed</wfw:commentRss><slash:comments>4</slash:comments><description>这个话题很早就想写了，但是因为自己也不过是一个编程新手（是谁说过：码一万行代码，你就入门了），所以也一直惶恐不敢写，怕自己写得太过肤浅。尽管如此，今天在微博上和一位前辈又谈到了这件事情，他鼓励我把这篇文章写出来，所以我也就班门弄斧一番。 在本文中，我将尝试向大家展现一个合格的程序员应该做到的事情。  ——写在文章的前面 名词解释： ·Coder 相信很多人都把“写代码”作为自己开始程序员生涯的第一步，然而不幸的是，很多人浑浑噩噩写了几年代码仍然把码代码当作自己唯一的工作，通常这样的人，就是Coder了。 ·Programmer 如果我下文提及的糟糕情况都与你无关，那么恭喜你，你起码是一个“一般的程序员”了。（即使成为程序员，也有八个级别，这个说法可以参考这篇文章和一篇比较靠谱的译文） &amp;#160; 一、理解需求： 很多程序员在项目立项初期，总是一副事不关己高高挂起的样子，从来不把客户的需求放在心里，更别说主动接触客户。当然，有些公司的严格流程让程序员很难直接接触到客户，但是尽管如此，也应该及时与做需求分析，甚至是做销售的人沟通，深刻的理解需求。 案例： 曾经一个老师布置的作业是：写一个huffman编码，能把文字压缩了。当时我并没有认真思考，只是把这个问题简单的理解为了：用huffman编码将一篇英文文章压缩。并且我还自以为是的在wiki上面查到了英文字母的字频，并根据这个字频将压缩方案写死在了代码里。结果就是，当老师提及要压缩的不仅仅有单词，还有特殊符号，还有其他国家的语言的时候，我的整个程序直接废掉了。 说明： 不了解客户的真正需求，就会在软件的开发之初，仅仅为表面的，或是某一个具体的场景设计软件，最终软件很难有实用性。 另外，在一些极限情况，对需求的考虑，我们还应该涉及到一些临界点。例如做家族图谱的时候考虑特殊关系。而能做到这一点，就更加需要深入理解用户需求，并且通常需要具备一些相关的专业知识——例如做医疗相关的软件，必须对医疗事故的处理有所了解，才能增加程序的鲁棒性。 当然了，各位程序员也不要太过于焦虑自己对需求的考虑不周，因为毕竟这很多还是项目初期需求分析员该做的事情。 二、对需求进行反馈： 经常可以听见程序员抱怨做设计的和做需求的人不懂编程，定的需求“无法完成”。然而，有时候想一想，自己是不是有在项目定方案之前和leader或是designer讨论过这些需求，自己有没有参与过风险控制。诚然，做设计的和非技术出生的领导不懂得编程，但是你可以把问题难度更加量化，这样就可以比较容易的达到预期效果：例如，你可以告诉leader，***特效可以做，但是可能需要五天时间，然而我们项目就只有一天时间，所以这个能不能缓一缓，或者项目延期。这里切忌用复杂深奥的技术名词去忽悠你的leader，否则你会死得很惨。 另外，在一开始的时候就在需求上控制难度，总好过你在做了一半的时候突然告诉PM，做不出来，时间不够要强得多。 三、丰富的文档： 相信很多程序员最痛恨的就是文档，各式各样的设计文档似乎成为了程序员完不成任务的最佳理由——“我有这个时间写文档，都把这个功能写完了！” 然而，对于一个正式的项目，文档是必不可少的。就对程序员而言，文档有几个好处： 1、读需求文档：读需求文档的最大好处是可以让你把本文中的一、二条做好； 2、写进度文档：在项目时间控制上，人们总是揶揄新手的自大， 而写每日总结或者周总结，不仅可以帮助新手了解自己的进度，对于项目经理把握真实进度也是有帮助的（不要害怕告诉经理你又逾期了，因为他早晚会发现）。在写进度文档方面，很多人抱怨的是那些格式化的文档，太过于官僚和浪费时间。这点我在第九城市的经历倒是蛮好的，他们每个人在下班之前都会给team里群发一个邮件，内容是： 一、今天计划任务： 1、*** 2、*** 二、实际完成任务： 1、*** 2、*** 三、明天计划任务： 1、*** 2、*** 这样的进度文档，相信没有人再敢说耽误时间了吧。换言之，如果这点内容你都不知道写什么，那你今天一定又只是浑浑噩噩的码代码了。 3、设计文档：这个是非常重要的，因为这些设计文档告诉了你的搭档（team成员，现场部署人员，或者二次开发人员）你们实现了什么功能，又如何使用这些功能。这和代码注释有一些相似点，我们稍后着重讨论。 案例： 我在最近做的项目里，就和Designer之间遇见了这么一个问题：我说我要某某按钮的素材，她说没问题，并且很快就发给我了。结果就是按钮大小和其他配套的按钮不统一，我还得再调整这个素材（还好我会点fireworks）。 说明： 因为我们这个项目比较赶，而且参与人员很少，所以一开始没有详细的设计文档。相反，如果我们有了设计文档，那么她就明白哪个素材需要什么样的大小和格式了。然而这里也引入了一个很矛盾的地方：我们这个项目直接参与进来的只有四个人，而且时间非常紧，只有一周。所以如果按照正规流程先准备文档，可能Deadline都过去几天了，才能开始开发。 也就是说，文档虽好，我们也不能忽略它带来的effort。面对定死了的Deadline，我们在文档的详细程度上必须有所取舍。但即使详细正规的文档无法列出来，一些细小的文档仍然是可以准备的，例如在这个案例发生之后，我和她抽时间定了一个（至少我们两个能看懂的）设计草案，把一些RGB值和控件大小给明确的记录在书面上。 四、拒绝过程化编程： 大多数编程人员在一开始的时候都是很难改掉过程化变成习惯的： 案例： 我的一个朋友在一次用C#.NET写数据库交互的时候，有过这么一段代码： ~声明一些变量 ~从前台输入框中读入用户输入的数据 ~构造一个sqlconnection ~连接数据库 ~写入数据 说明： 相信稍微有点OO编程习惯的人都会觉得这样的代码是非常丑陋的，并且恨不能立即开始对它进行重构，然而我并不打算用这个例子讲解重构，而是和大家探讨一下这段代码的产生。 并且，我们要相信我这个朋友十分优秀，也一定会重构，并且事实上当他编完这段代码之后也很快意识到了问题，所以这段代码并没有保留在最终的项目版本中。而重点是，我们为何会让这样的代码得以产生。 很多人在编程的时候，并没有设计先行，更别说有详细的设计文档了，甚至连脑子里都不愿意多想一想，就迫不及待的开始“赶进度”了。产生上面代码的原因其实很简单：当他开始写这个函数的时候，首先告诉他自己要将用户提交的信息更新到数据库中，所以整个过程是：读入数据，然后写入数据。这样，就和这段代码一样了。所以，过程化编程的原因不在于你用什么语言，而是你的思路就是面向过程的。 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/585363505/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363505/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>程序员</category><category>设计</category><category>编程</category><category>技术杂谈</category><pubDate>Thu, 14 Jul 2011 22:50:02 +0800</pubDate><author>羽毛</author><comments>http://www.mielf.net/featherelf/not-coder-but-programmer#comments</comments><guid isPermaLink="false">http://www.mielf.net/?p=434</guid><dc:creator>羽毛</dc:creator><fs:srclink>http://www.mielf.net/featherelf/not-coder-but-programmer</fs:srclink><fs:srcfeed>http://www.mielf.net/feed</fs:srcfeed><fs:itemid>feedsky/HACKCRAFT/~8432820/585363505/5913670</fs:itemid></item><item><title>QWOP纯坑爹不解释</title><link>http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363506/5913670/1/item.html</link><content:encoded>&lt;p&gt;QWOP是一个以跑步为主题的运动型FLASH小游戏，因为操作需要qwop4个键，所以叫做&lt;strong&gt;QWOP&lt;/strong&gt;。该游戏十分难，难得会让人产生一股蛋蛋的忧伤。&lt;br /&gt;
&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/07/QQ截图20110714213440.jpg&quot;  rel=&quot;lightbox[443]&quot;&gt;&lt;img src=&quot;http://www.mielf.net/wp-content/uploads/2011/07/QQ截图20110714213440-300x187.jpg&quot; alt=&quot;&quot; title=&quot;QWOP&quot; width=&quot;300&quot; height=&quot;187&quot; class=&quot;alignnone size-medium wp-image-444&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span id=&quot;more-443&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;code&gt;事实证明这确实是一个淡淡忧伤的坑爹游戏，你需要用QWOP向前蠕动啊蠕动……&lt;/code&gt;&lt;br /&gt;
不解释，上FLASH，看不见的请点击下面的连接：&lt;br /&gt;
&lt;embed play=”true” quality=”high” height=”640″ width=”400″ src=&quot;http://www.foddy.net/athletics.swf&quot; pluginspage=”http://www.macromedia.com/go/getflashplayer”&gt;&lt;br /&gt;
&lt;/embed&gt;&lt;br /&gt;
传送门：&lt;a href=&quot;http://www.foddy.net/athletics.swf&quot; class=&quot;aga aga_30&quot;&gt;QWOP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;HLL&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;&lt;br /&gt;
在我蠕动了几十分钟到中间50米处又一次出现坑爹现象，跳栏……&lt;br /&gt;
&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/07/2011-07-03_101507.jpg&quot;  rel=&quot;lightbox[443]&quot;&gt;&lt;img src=&quot;http://www.mielf.net/wp-content/uploads/2011/07/2011-07-03_101507-300x187.jpg&quot; alt=&quot;&quot; title=&quot;2011-07-03_101507&quot; width=&quot;300&quot; height=&quot;187&quot; class=&quot;alignnone size-medium wp-image-445&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
另外对110米的跨栏世界冠军姚明退役了的消息表示惋惜……&lt;br /&gt;
&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/07/2011-07-03_101659.jpg&quot;  rel=&quot;lightbox[443]&quot;&gt;&lt;img src=&quot;http://www.mielf.net/wp-content/uploads/2011/07/2011-07-03_101659-300x186.jpg&quot; alt=&quot;&quot; title=&quot;2011-07-03_101659&quot; width=&quot;300&quot; height=&quot;186&quot; class=&quot;alignnone size-medium wp-image-446&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
事实证明蠕动是强大的……&lt;br /&gt;
&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/07/2011-07-03_102210.jpg&quot;  rel=&quot;lightbox[443]&quot;&gt;&lt;img src=&quot;http://www.mielf.net/wp-content/uploads/2011/07/2011-07-03_102210-300x189.jpg&quot; alt=&quot;&quot; title=&quot;2011-07-03_102210&quot; width=&quot;300&quot; height=&quot;189&quot; class=&quot;alignnone size-medium wp-image-447&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
100米处再现坑爹，你居然要我JUMP！！&lt;br /&gt;
&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/07/2011-07-03_102244.jpg&quot;  rel=&quot;lightbox[443]&quot;&gt;&lt;img src=&quot;http://www.mielf.net/wp-content/uploads/2011/07/2011-07-03_102244-300x186.jpg&quot; alt=&quot;&quot; title=&quot;2011-07-03_102244&quot; width=&quot;300&quot; height=&quot;186&quot; class=&quot;alignnone size-medium wp-image-448&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
由于此游戏太坑我已经不想说什么了，有疑问欢迎移步&lt;a href=&quot;http://baike.baidu.com/view/4907042.htm&quot; class=&quot;aga aga_31&quot; target=&quot;_blank&quot;&gt;百度百科&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/585363506/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363506/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mielf.net/mi/qwop/feed</wfw:commentRss><slash:comments>4</slash:comments><description>QWOP是一个以跑步为主题的运动型FLASH小游戏，因为操作需要qwop4个键，所以叫做QWOP。该游戏十分难，难得会让人产生一股蛋蛋的忧伤。 事实证明这确实是一个淡淡忧伤的坑爹游戏，你需要用QWOP向前蠕动啊蠕动…… 不解释，上FLASH，看不见的请点击下面的连接： 传送门：QWOP &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;HLL&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211; 在我蠕动了几十分钟到中间50米处又一次出现坑爹现象，跳栏…… 另外对110米的跨栏世界冠军姚明退役了的消息表示惋惜…… 事实证明蠕动是强大的…… 100米处再现坑爹，你居然要我JUMP！！ 由于此游戏太坑我已经不想说什么了，有疑问欢迎移步百度百科&lt;img src=&quot;http://www1.feedsky.com/t1/585363506/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363506/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>qwop</category><category>强大</category><category>坑爹</category><category>游戏</category><category>歪歪不知所云</category><category>flash</category><pubDate>Thu, 14 Jul 2011 21:47:07 +0800</pubDate><author>猫Mi</author><comments>http://www.mielf.net/mi/qwop#comments</comments><guid isPermaLink="false">http://www.mielf.net/?p=443</guid><dc:creator>猫Mi</dc:creator><fs:srclink>http://www.mielf.net/mi/qwop</fs:srclink><fs:srcfeed>http://www.mielf.net/feed</fs:srcfeed><fs:itemid>feedsky/HACKCRAFT/~8432820/585363506/5913670</fs:itemid></item><item><title>从零开始学习Android之探讨Android的几个设计缺陷</title><link>http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363507/5913670/1/item.html</link><content:encoded>&lt;p&gt;今天想跟大家探讨一下目前遇到的Android的几个设计缺陷。因为自己也只是“半灌水响叮当”，所以渴望各路牛人加入到这一探讨中，并且如果能指出哪些地方只是我自己理解有误，那就更好了。&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-422&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一、不用，还留着它干嘛：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在Android的API库里，有一处（或多处）API已经被废弃，不再使用，但却依然留着，只是用一种不太醒目的方式提示这个API被废弃。具体见下图：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/featherelf/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0android%e4%b9%8b%e6%8e%a2%e8%ae%a8android%e7%9a%84%e5%87%a0%e4%b8%aa%e8%ae%be%e8%ae%a1%e7%bc%ba%e9%99%b7/untitled&quot;  rel=&quot;attachment wp-att-423&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-423&quot; title=&quot;2011年6月26日01&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/06/Untitled.png&quot; alt=&quot;&quot; width=&quot;646&quot; height=&quot;294&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;当然，为了突出地表现它的“提醒非常不明显”，我决定不用红笔标出它的提醒，然后大家自己细心围观上图。现在我们来探讨一下它的缺陷所在：&lt;/p&gt;
&lt;p&gt;在Java的设计中，有一个关键词专门用来表示“不再建议使用的函数接口”——“deprecation”——被标记的API上将会显示删除线，例如Android的绝对布局会显示为：&lt;span style=&quot;color: #000000;&quot;&gt;&lt;del&gt;AbsoluteLayout&lt;/del&gt;&lt;/span&gt;。对于这些API，我们只是被提醒不建议使用，但是该API的功能通常情况下还是正常的，至少不会发生运行时错误。然而在截图中显示的addView()方法系列，并没有被该关键词标记，相反，你可以正常通过编译，却只能迎来运行时错误，因为在API说明中人家“的确明确说了”会抛出错误。这个是一个非常愚蠢的设计，因为一个100%会报错的API，并且已经不能再实现它原有功能的API为什么还留在这里？这个设计显然不适用于向下兼容，因为过去使用了该API的程序虽然能通过编译，却只可能崩溃，这比不允许它通过编译更加危险。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二、面向对象的灾难：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在Android中，有一个类承载了过多的职责，这显然不符合“设计模式”的规范，这个类就是Activity。不从源代码结构分析，单从应用层面开发者的角度看，我们可以理解，一个Activity实例记录了当前屏幕的所有信息，猜测中应该包括了这个应用的许多属性，和与设备（屏幕，插孔）相关的信息。在几个比较主要的函数中，都用到了这些函数：&lt;/p&gt;
&lt;p&gt;1、Toast方法，即抛出一个提示信息；&lt;/p&gt;
&lt;p&gt;2、getAsset方法，获取一个管理内部应用资源的类对象。&lt;/p&gt;
&lt;p&gt;那么我们就从这两个方法进一步讨论，先试想，你在什么时候会用到这两个函数：&lt;/p&gt;
&lt;p&gt;1、对于第一个方法，如果不去探讨整个Android的实现机制，仅仅从使用者的角度来看，Toast的信息是与界面元素无关的，因为它被固定显示在屏幕的正下方，它顶多会用到硬件设备（屏幕）的接口信息；&lt;/p&gt;
&lt;p&gt;2、获取内部资源更是一个不大会与界面元素直接相关的方法，因为我们通常是在后台处理这些数据。&lt;/p&gt;
&lt;p&gt;OK，假设给为认同这样的观念，我们继续探究如何才能正确调用这两个方法：我们必须在继承了Activity类的实例中调用这些方法。至于这样操作的原因我们可以很清楚的理解：Android系统在处理初始化这些类对象的时候，会将一些设备相关以及应用相关的属性写入到这些类中，于是在调用这些方法的时候，即使没有显示的传参过程，方法也可以自己获取这些参数。然而我想说的缺陷就在这里：&lt;/p&gt;
&lt;p&gt;1、后台的错误信息我不得不传出到一个Activity实例中，再在这个实例中Toast出来（当然，采用Log方法会是更好的方法）。这使得Toast本身的使用代价和在界面元素中显示文字的代价一样，显得这个方法十分多余。&lt;/p&gt;
&lt;p&gt;2、我不得不在一个Activity实例中调用getAsset方法，然后将管理器（AssetManager）传入到后台。&lt;/p&gt;
&lt;p&gt;换句话说，Android自身的OO，导致了开发者在应用开发中将会有许多难看的设计。想来，出现今天这样的场面，多半是因为整个Android底层设计的时候考虑欠周到，不过我们仍然可以考虑做一些适当的改进：&lt;/p&gt;
&lt;p&gt;我们可以将Activity的部分职责（与具体界面元素无关的方法）分离出来，或者重新生成一个类，或者加强它父类(Context)的功能，然后在Activity中提供一个方法获取这个类实例。这样在应用开发中，我可以通过单态模式的方法长期保存一个单纯设备相关而界面元素无关的类对象，用于操作许多需要和设备交互的行为。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/585363507/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363507/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mielf.net/featherelf/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0android%e4%b9%8b%e6%8e%a2%e8%ae%a8android%e7%9a%84%e5%87%a0%e4%b8%aa%e8%ae%be%e8%ae%a1%e7%bc%ba%e9%99%b7/feed</wfw:commentRss><slash:comments>4</slash:comments><description>今天想跟大家探讨一下目前遇到的Android的几个设计缺陷。因为自己也只是“半灌水响叮当”，所以渴望各路牛人加入到这一探讨中，并且如果能指出哪些地方只是我自己理解有误，那就更好了。 一、不用，还留着它干嘛： 在Android的API库里，有一处（或多处）API已经被废弃，不再使用，但却依然留着，只是用一种不太醒目的方式提示这个API被废弃。具体见下图： 当然，为了突出地表现它的“提醒非常不明显”，我决定不用红笔标出它的提醒，然后大家自己细心围观上图。现在我们来探讨一下它的缺陷所在： 在Java的设计中，有一个关键词专门用来表示“不再建议使用的函数接口”——“deprecation”——被标记的API上将会显示删除线，例如Android的绝对布局会显示为：AbsoluteLayout。对于这些API，我们只是被提醒不建议使用，但是该API的功能通常情况下还是正常的，至少不会发生运行时错误。然而在截图中显示的addView()方法系列，并没有被该关键词标记，相反，你可以正常通过编译，却只能迎来运行时错误，因为在API说明中人家“的确明确说了”会抛出错误。这个是一个非常愚蠢的设计，因为一个100%会报错的API，并且已经不能再实现它原有功能的API为什么还留在这里？这个设计显然不适用于向下兼容，因为过去使用了该API的程序虽然能通过编译，却只可能崩溃，这比不允许它通过编译更加危险。 二、面向对象的灾难： 在Android中，有一个类承载了过多的职责，这显然不符合“设计模式”的规范，这个类就是Activity。不从源代码结构分析，单从应用层面开发者的角度看，我们可以理解，一个Activity实例记录了当前屏幕的所有信息，猜测中应该包括了这个应用的许多属性，和与设备（屏幕，插孔）相关的信息。在几个比较主要的函数中，都用到了这些函数： 1、Toast方法，即抛出一个提示信息； 2、getAsset方法，获取一个管理内部应用资源的类对象。 那么我们就从这两个方法进一步讨论，先试想，你在什么时候会用到这两个函数： 1、对于第一个方法，如果不去探讨整个Android的实现机制，仅仅从使用者的角度来看，Toast的信息是与界面元素无关的，因为它被固定显示在屏幕的正下方，它顶多会用到硬件设备（屏幕）的接口信息； 2、获取内部资源更是一个不大会与界面元素直接相关的方法，因为我们通常是在后台处理这些数据。 OK，假设给为认同这样的观念，我们继续探究如何才能正确调用这两个方法：我们必须在继承了Activity类的实例中调用这些方法。至于这样操作的原因我们可以很清楚的理解：Android系统在处理初始化这些类对象的时候，会将一些设备相关以及应用相关的属性写入到这些类中，于是在调用这些方法的时候，即使没有显示的传参过程，方法也可以自己获取这些参数。然而我想说的缺陷就在这里： 1、后台的错误信息我不得不传出到一个Activity实例中，再在这个实例中Toast出来（当然，采用Log方法会是更好的方法）。这使得Toast本身的使用代价和在界面元素中显示文字的代价一样，显得这个方法十分多余。 2、我不得不在一个Activity实例中调用getAsset方法，然后将管理器（AssetManager）传入到后台。 换句话说，Android自身的OO，导致了开发者在应用开发中将会有许多难看的设计。想来，出现今天这样的场面，多半是因为整个Android底层设计的时候考虑欠周到，不过我们仍然可以考虑做一些适当的改进： 我们可以将Activity的部分职责（与具体界面元素无关的方法）分离出来，或者重新生成一个类，或者加强它父类(Context)的功能，然后在Activity中提供一个方法获取这个类实例。这样在应用开发中，我可以通过单态模式的方法长期保存一个单纯设备相关而界面元素无关的类对象，用于操作许多需要和设备交互的行为。&lt;img src=&quot;http://www1.feedsky.com/t1/585363507/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363507/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>Android</category><category>缺陷</category><category>设计</category><pubDate>Sun, 26 Jun 2011 16:45:59 +0800</pubDate><author>羽毛</author><comments>http://www.mielf.net/featherelf/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0android%e4%b9%8b%e6%8e%a2%e8%ae%a8android%e7%9a%84%e5%87%a0%e4%b8%aa%e8%ae%be%e8%ae%a1%e7%bc%ba%e9%99%b7#comments</comments><guid isPermaLink="false">http://www.mielf.net/?p=422</guid><dc:creator>羽毛</dc:creator><fs:srclink>http://www.mielf.net/featherelf/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0android%e4%b9%8b%e6%8e%a2%e8%ae%a8android%e7%9a%84%e5%87%a0%e4%b8%aa%e8%ae%be%e8%ae%a1%e7%bc%ba%e9%99%b7</fs:srclink><fs:srcfeed>http://www.mielf.net/feed</fs:srcfeed><fs:itemid>feedsky/HACKCRAFT/~8432820/585363507/5913670</fs:itemid></item><item><title>看图说话·马来西亚行</title><link>http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363508/5913670/1/item.html</link><content:encoded>&lt;p&gt;去马来西亚是上个月二十二的事了，因为前段时间一直没有心情写，所以就拖到了今天，感觉再拖，好多想和大家分享的东西都快忘了，于是赶紧写出来。因为这个城市我从未真正去了解过，所以为了避免在本文中犯错误，我先预习了&lt;a title=&quot;马来西亚 wiki&quot; href=&quot;http://zh.wikipedia.org/wiki/%E9%A9%AC%E6%9D%A5%E8%A5%BF%E4%BA%9A&quot; class=&quot;aga aga_33&quot; target=&quot;_blank&quot;&gt;这座城市的资料&lt;/a&gt;，同时尽量避免在文中出现对一些人文政治类信息的评论。那么，全文就看图说话吧。&lt;span id=&quot;more-392&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;如果在图片上没有看到文字解说，可以关注图册左下方一个类似于文本框的按钮，点它，就开始显示了。&lt;/p&gt;
&lt;p&gt;&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;https://picasaweb.google.com/s/c/bin/slideshow.swf&quot; width=&quot;600&quot; height=&quot;400&quot; flashvars=&quot;host=picasaweb.google.com&amp;#038;noautoplay=1&amp;#038;hl=zh_CN&amp;#038;feat=flashalbum&amp;#038;RGB=0x000000&amp;#038;feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2FFeatherElf%2Falbumid%2F5613917643012937441%3Falt%3Drss%26kind%3Dphoto%26authkey%3DGv1sRgCJnjh7b1jr7IMg%26hl%3Dzh_CN&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/585363508/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363508/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mielf.net/featherelf/%e7%9c%8b%e5%9b%be%e8%af%b4%e8%af%9d%e9%a9%ac%e6%9d%a5%e8%a5%bf%e4%ba%9a%e8%a1%8c/feed</wfw:commentRss><slash:comments>3</slash:comments><description>去马来西亚是上个月二十二的事了，因为前段时间一直没有心情写，所以就拖到了今天，感觉再拖，好多想和大家分享的东西都快忘了，于是赶紧写出来。因为这个城市我从未真正去了解过，所以为了避免在本文中犯错误，我先预习了这座城市的资料，同时尽量避免在文中出现对一些人文政治类信息的评论。那么，全文就看图说话吧。 如果在图片上没有看到文字解说，可以关注图册左下方一个类似于文本框的按钮，点它，就开始显示了。&lt;img src=&quot;http://www1.feedsky.com/t1/585363508/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363508/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>马来西亚</category><category>吉隆坡</category><category>羽毛随笔</category><category>旅游</category><pubDate>Fri, 03 Jun 2011 18:35:18 +0800</pubDate><author>羽毛</author><comments>http://www.mielf.net/featherelf/%e7%9c%8b%e5%9b%be%e8%af%b4%e8%af%9d%e9%a9%ac%e6%9d%a5%e8%a5%bf%e4%ba%9a%e8%a1%8c#comments</comments><guid isPermaLink="false">http://www.mielf.net/?p=392</guid><dc:creator>羽毛</dc:creator><fs:srclink>http://www.mielf.net/featherelf/%e7%9c%8b%e5%9b%be%e8%af%b4%e8%af%9d%e9%a9%ac%e6%9d%a5%e8%a5%bf%e4%ba%9a%e8%a1%8c</fs:srclink><fs:srcfeed>http://www.mielf.net/feed</fs:srcfeed><fs:itemid>feedsky/HACKCRAFT/~8432820/585363508/5913670</fs:itemid></item><item><title>hi!android,this is windows.</title><link>http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363509/5913670/1/item.html</link><content:encoded>&lt;p&gt;嗯，一直说学习android平台的开发来着，却一直都没怎么认认真真来学，为了督促我有计划的学习和能找到地方温故知新，于是乎还是决定来个Windows平台android开发的系列日志，Let&amp;#8217;s begin.&lt;/p&gt;
&lt;div id=&quot;attachment_349&quot; class=&quot;wp-caption alignnone&quot; style=&quot;width: 310px&quot;&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/05/1.jpg&quot;  rel=&quot;lightbox[346]&quot;&gt;&lt;img class=&quot;size-medium wp-image-349&quot; title=&quot;android在Windows平台的开发&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/05/1-300x214.jpg&quot; alt=&quot;android在Windows平台的开发&quot; width=&quot;300&quot; height=&quot;214&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;android在Windows平台的开发&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;span id=&quot;more-346&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;本系列日志适合于对于安卓平台零基础的童鞋们，欢迎有相同兴趣的孩子前来交流。&lt;/p&gt;
&lt;p&gt;同时对于android在linux下的相关文章欢迎移步右边&lt;br /&gt;
&lt;a href=&quot;http://www.mielf.net/category/featherelf-blog/android&quot; &gt;http://www.mielf.net/category/featherelf-blog/android&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-温柔美丽纯真善良上得厅堂下得厨房的分界线&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;/p&gt;
&lt;p&gt; 第一章：helloworld    Windows下安卓开发平台的搭建&lt;/p&gt;
&lt;p&gt;因为国内某些网络环境因素，安卓开发平台的搭建造成我蛋疼了很长时间，在这儿总结我的安装过程给大家提供一个最快捷的道路：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt; 操作系统：win7  &lt;/p&gt;
&lt;p&gt;开发环境：eclipse galileo(3.5版) [因为据说3.6版编辑XML会经常性出现假死，故采用3.5]&lt;br /&gt;
　　　　　ADT-10.0.1  [Android在Eclipse上的ADT插件]&lt;/p&gt;
&lt;p&gt;相关文件下载：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;ed2k://|file|%5BJava%E6%A0%87%E5%87%86%E7%89%88%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7%E5%8C%85%5D.jdk-6u24-windows-i586.exe|80307992|33f34cd36f8df843713cdba3884874d6|h=ziq2lwcgmoachwzfxnbt6iltsnlnoiej|/&quot; &gt;[Java标准版开发工具包].jdk-6u24-windows-i586&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;JDK 是整个Java的核心，包括了Java运行环境，Java工具和Java基础的类库。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;ed2k://|file|%5BAndroid%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7%E5%8C%85%5D.android-sdk_r10-windows.7z|892934321|86efa82cc4d5fe542877794ca1ee4f38|h=af5palcnyh5fs3lbgqwpkdlhwmadw56h|/&quot; &gt;[Android软件开发工具包].android-sdk_r10-windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Android SDK 指的既是Android专属的软件开发工具包。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;ed2k://|file|%5BEclipse%E7%9A%84Java%E5%BC%80%E5%8F%91IDE_3.5.2%5D.eclipse-java-galileo-SR2-win32.zip|97290250|a4bf68f3102878d71fdb5bf1cfe0600a|h=jq5yyn62hapydg2sa7xj6bmmpfp4jdev|/&quot; &gt;[Eclipse的Java开发IDE_3.5.2].eclipse-java-galileo-SR2-win32&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言，它只是一个框架和一组服务，用于通过插件组件构建开发环境。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;ed2k://|file|%5BEclipse%E7%9A%84Java%E5%BC%80%E5%8F%91IDE%5D.eclipse-java-helios-SR2-win32.zip|104011923|16f0af6ef909398f5d51817fa9a00fc1|h=tjsaigirrr4uajjkqzeddfsmvtyhi5gm|/&quot; &gt;[Eclipse的Java开发IDE].eclipse-java-helios-SR2-win32&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Eclipse 附带了一个标准的插件集，包括 Java 开发工具（Java Development Tools，JDT）。 &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;ed2k://|file|%5BEclipse%E4%B8%AD%E6%96%87%E8%A1%A5%E4%B8%81_3.6%5D.eclipse-SDK-3.6-win32-chs-patch.7z|1922745|72c2c2b806d95032f153875f5daecc0b|h=zh5ntgjf2hukb2u5rj7ts6lufgkosxnf|/&quot; &gt;[Eclipse中文补丁_3.6].eclipse-SDK-3.6-win32-chs-patch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;虽然学好英语是很有必要的，但是中文有时候看起来确实会比较顺眼。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;ed2k://|file|%5BAndroid%E5%9C%A8Eclipse%E4%B8%8A%E7%9A%84ADT%E6%8F%92%E4%BB%B6%5D.ADT-10.0.1.zip|5096182|a4bc641cb660fedeadb6ab3820e683e9|h=hqgoyjsnbbbuplqcshbn736z5tqh7nmx|/&quot; &gt;[Android在Eclipse上的ADT插件].ADT-10.0.1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在Eclipse编译IDE环境中，需安装ADT(Android Development Tools)Plug-in,这是Android在Eclipse上的开发工具。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;连接为电驴连接，请使用迅雷或者电驴等下载工具下载，若有需求也可邮件我索取。&lt;/p&gt;
&lt;p&gt;上面提供的连接都是完整的离线包，下载完了你就可以完全断网进行安装了，再也不用蛋疼的整夜开着等他自己下载神马的了。&lt;/p&gt;
&lt;p&gt;安装步骤：&lt;/p&gt;
&lt;p&gt;1.安装JDK java开发环境，将第一个文件直接安装即可。&lt;/p&gt;
&lt;p&gt;2.解包第二个文件，直接将里面的android-sdk-windows文件剪切到你需要的安装目录即可，已经包含了从最老的版本到android3.0的所有开发版本包，无需连接网络即可进行多个版本的开发了。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/05/2011-05-28_040543.png&quot;  rel=&quot;lightbox[346]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-351&quot; title=&quot;2011-05-28_040543&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/05/2011-05-28_040543-300x248.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;248&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3.设置路径，主要需要设置的就是android-sdk-windows\tools，打开[系统设置]&amp;gt;[环境变量]&amp;gt;在path中添加android-sdk-windows\tools的路径，注意用分号；与前面的路径隔开。&lt;/p&gt;
&lt;p&gt;4.解压安装eclipse，将上面提供的eclipse3.5或者3.6解压然后放到想要的目录，如果有汉化需求的同学将上面的汉化补丁解压复制到eclipse的目录即可。&lt;/p&gt;
&lt;p&gt;5.安装ADT插件，打开刚才安装好的eclipse，运行其中的eclipse.exe，跳过欢迎界面直接到开发环境，中文界面的选择[帮助]&amp;gt;[安装新软件..]&amp;gt;[添加]，英文界面的选择Help &amp;#8211;&amp;gt; Install New Software &amp;#8211;&amp;gt;Add，之后点local选择下载的ADT插件解压的目录然后随便加个名称添加站点，然后勾选全部安装的全部内容，记得取消选择检测更新的勾选，否则程序会进入漫长的更新中&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/05/2011-05-28_042313.png&quot;  rel=&quot;lightbox[346]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-352&quot; title=&quot;2011-05-28_042313&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/05/2011-05-28_042313-300x130.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;130&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;等待ADT安装完成差不多一半就完成了，在eclipse上会出现android的小图标&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/05/20110528042531.png&quot;  rel=&quot;lightbox[346]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-353&quot; title=&quot;20110528042531&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/05/20110528042531-300x93.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;93&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;不过现在点击还不行，会报错说找不到xxxx，我们还需要设置一下安卓的SDK路径&lt;/p&gt;
&lt;p&gt;点击[窗口]&amp;gt;[首选项]&amp;gt;[android] 然后[浏览]设置android SDK的路径&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/05/QQ截图20110528042833.png&quot;  rel=&quot;lightbox[346]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-354&quot; title=&quot;20110528042833&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/05/QQ截图20110528042833-300x71.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;71&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;之后再点击那个android的小图标，eclipse就会打开android SDK and  AVD manager&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/05/QQ截图20110528043143.png&quot;  rel=&quot;lightbox[346]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-356&quot; title=&quot;20110528043143&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/05/QQ截图20110528043143-300x174.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;174&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我已经设置过一个android的虚拟机了，同学们可以点击右边的NEW新建一个虚拟机&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/05/20110528043433.png&quot;  rel=&quot;lightbox[346]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-357&quot; title=&quot;20110528043433&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/05/20110528043433-228x300.png&quot; alt=&quot;&quot; width=&quot;228&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;到这里安卓的开发环境就算是基本搭建完成了，下面就可以新建工程并且编写代码了。&lt;/p&gt;
&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-玉树临风英俊潇洒杀得木马翻得过墙的分界线&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;/p&gt;
&lt;p&gt;鉴于这篇文章的起稿想法是写到编写出第一个helloword，于是只有在草稿中存放了2天后继续码字……&lt;/p&gt;
&lt;p&gt;上回讲到eclipse和android虚拟机的配置，现在已经有一个可以在Windows下运行的android模拟器和一个码代码的平台了..没玩过android的童鞋可以运行android-sdk-windows下的SDK Manager启动android进去瞧瞧，我就不截图了（懒&amp;#8230;）&lt;/p&gt;
&lt;p&gt;下面开始讲helloworld的编写：&lt;/p&gt;
&lt;p&gt;打开eclipse（废话..）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/05/2011-05-31_195240.png&quot;  rel=&quot;lightbox[346]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-373&quot; title=&quot;2011-05-31_195240&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/05/2011-05-31_195240-300x74.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;74&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后新建项目，之后选择android项目，点下一步之后会出现配置窗口&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/05/2011-05-31_200926.png&quot;  rel=&quot;lightbox[346]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-374&quot; title=&quot;2011-05-31_200926&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/05/2011-05-31_200926-300x235.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;235&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;project name 是项目的名称，这里我们填helloworld&lt;/p&gt;
&lt;p&gt;application name 是应用的名称，也即是程序的名称&lt;/p&gt;
&lt;p&gt;package name 是包的名称&lt;/p&gt;
&lt;p&gt;create activity eclipse可以帮你自动创建一个activity（activity是什么请自己找百度娘……）&lt;/p&gt;
&lt;p&gt;min SDK version 是支持的最低版本号，各个版本对应的版本号在上面选择版本的最右边有显示&lt;/p&gt;
&lt;p&gt;配置完这几项就可以直接点完成了。&lt;/p&gt;
&lt;p&gt;工程文件目录结构：&lt;/p&gt;
&lt;p&gt;src &amp;#8212;这个目录放置的是程序的源文件,即java代码&lt;br /&gt;
gen&amp;#8212;里面的东西最好不要动，R.java是Eclipse自动生成的文件&lt;br /&gt;
android.jar&amp;#8212;引用的所需要的Android类&lt;br /&gt;
assets&amp;#8212;资源文件目录&lt;br /&gt;
res&amp;#8212;里面的所有东西在R.java里面都会生成相应的id,可以通过id来引用相关的资源文件。&lt;br /&gt;
drawable&amp;#8212;程序用到的图片文件，三个目录分别是低分辨率到高分辨率&lt;br /&gt;
layout&amp;#8212;里面放置的是布局文件，每个XML文件也都会在r.java中生成id&lt;br /&gt;
strings.xml&amp;#8212;文件中放置的是一些键值对，里面的键值也会在R.java中生成相应的id&lt;br /&gt;
AndroidManifest.xml&amp;#8212;文件是整个工程的配置文件&lt;/p&gt;
&lt;p&gt;其实到现在一个helloworld已经写好了，大家可以自己看看各个文件&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/06/QQ截图20110601002410.png&quot;  rel=&quot;lightbox[346]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-377&quot; title=&quot;20110601002410&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/06/QQ截图20110601002410-300x88.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;88&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;之后点击那个像是播放的图标进行测试，eclipse会自动打开虚拟机运行程序：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mielf.net/wp-content/uploads/2011/06/QQ截图20110601002809.png&quot;  rel=&quot;lightbox[346]&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-378&quot; title=&quot;20110601002809&quot; src=&quot;http://www.mielf.net/wp-content/uploads/2011/06/QQ截图20110601002809-300x97.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;97&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;（我修改了strings.xml文件中的字符）&lt;/p&gt;
&lt;p&gt;好吧..码够了..据说我码了一个星期了&amp;#8230;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;code&gt;---------------2011年7月参赛标记-------------------&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;本文参与“&lt;a href=&quot;http://www.google.com/daxue/blog&quot; class=&quot;aga aga_35&quot;&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Google 暑期大学生博客分享大赛 &amp;#8211; 2011 Android 成长篇&lt;/span&gt;&lt;/a&gt;”，版权所有请勿转载。-Mi&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;/span&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/585363509/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363509/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mielf.net/mi/windows-android-hello/feed</wfw:commentRss><slash:comments>5</slash:comments><description>嗯，一直说学习android平台的开发来着，却一直都没怎么认认真真来学，为了督促我有计划的学习和能找到地方温故知新，于是乎还是决定来个Windows平台android开发的系列日志，Let&amp;#8217;s begin. 本系列日志适合于对于安卓平台零基础的童鞋们，欢迎有相同兴趣的孩子前来交流。 同时对于android在linux下的相关文章欢迎移步右边 http://www.mielf.net/category/featherelf-blog/android &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-温柔美丽纯真善良上得厅堂下得厨房的分界线&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-  第一章：helloworld    Windows下安卓开发平台的搭建 因为国内某些网络环境因素，安卓开发平台的搭建造成我蛋疼了很长时间，在这儿总结我的安装过程给大家提供一个最快捷的道路：  操作系统：win7   开发环境：eclipse galileo(3.5版) [因为据说3.6版编辑XML会经常性出现假死，故采用3.5] 　　　　　ADT-10.0.1  [Android在Eclipse上的ADT插件] 相关文件下载： [Java标准版开发工具包].jdk-6u24-windows-i586 JDK 是整个Java的核心，包括了Java运行环境，Java工具和Java基础的类库。 [Android软件开发工具包].android-sdk_r10-windows Android SDK 指的既是Android专属的软件开发工具包。 [Eclipse的Java开发IDE_3.5.2].eclipse-java-galileo-SR2-win32 Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言，它只是一个框架和一组服务，用于通过插件组件构建开发环境。 [Eclipse的Java开发IDE].eclipse-java-helios-SR2-win32 Eclipse 附带了一个标准的插件集，包括 Java 开发工具（Java Development Tools，JDT）。  [Eclipse中文补丁_3.6].eclipse-SDK-3.6-win32-chs-patch 虽然学好英语是很有必要的，但是中文有时候看起来确实会比较顺眼。 [Android在Eclipse上的ADT插件].ADT-10.0.1 在Eclipse编译IDE环境中，需安装ADT(Android Development Tools)Plug-in,这是Android在Eclipse上的开发工具。 连接为电驴连接，请使用迅雷或者电驴等下载工具下载，若有需求也可邮件我索取。 上面提供的连接都是完整的离线包，下载完了你就可以完全断网进行安装了，再也不用蛋疼的整夜开着等他自己下载神马的了。 安装步骤： 1.安装JDK java开发环境，将第一个文件直接安装即可。 2.解包第二个文件，直接将里面的android-sdk-windows文件剪切到你需要的安装目录即可，已经包含了从最老的版本到android3.0的所有开发版本包，无需连接网络即可进行多个版本的开发了。 3.设置路径，主要需要设置的就是android-sdk-windows\tools，打开[系统设置]&amp;#62;[环境变量]&amp;#62;在path中添加android-sdk-windows\tools的路径，注意用分号；与前面的路径隔开。 4.解压安装eclipse，将上面提供的eclipse3.5或者3.6解压然后放到想要的目录，如果有汉化需求的同学将上面的汉化补丁解压复制到eclipse的目录即可。 5.安装ADT插件，打开刚才安装好的eclipse，运行其中的eclipse.exe，跳过欢迎界面直接到开发环境，中文界面的选择[帮助]&amp;#62;[安装新软件..]&amp;#62;[添加]，英文界面的选择Help &amp;#8211;&amp;#62; Install New Software &amp;#8211;&amp;#62;Add，之后点local选择下载的ADT插件解压的目录然后随便加个名称添加站点，然后勾选全部安装的全部内容，记得取消选择检测更新的勾选，否则程序会进入漫长的更新中&amp;#8230; 等待ADT安装完成差不多一半就完成了，在eclipse上会出现android的小图标 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/585363509/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585363509/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>安卓过来抱抱</category><category>win7</category><category>sdk</category><category>Android</category><category>猫的碎念</category><category>eclipse</category><category>jdk</category><category>windows</category><category>adt</category><category>helloworld</category><category>安卓</category><pubDate>Wed, 01 Jun 2011 00:34:20 +0800</pubDate><author>猫Mi</author><comments>http://www.mielf.net/mi/windows-android-hello#comments</comments><guid isPermaLink="false">http://www.mielf.net/?p=346</guid><dc:creator>猫Mi</dc:creator><fs:srclink>http://www.mielf.net/mi/windows-android-hello</fs:srclink><fs:srcfeed>http://www.mielf.net/feed</fs:srcfeed><fs:itemid>feedsky/HACKCRAFT/~8432820/585363509/5913670</fs:itemid></item><item><title>再谈安卓应用程序退出机制</title><link>http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585604282/5913670/1/item.html</link><content:encoded>&lt;p&gt;羽毛前段时间写了篇&lt;a title=&quot;合理设计为Android程序引入“关闭程序”机制&quot; href=&quot;http://www.mielf.net/featherelf/%E5%90%88%E7%90%86%E8%AE%BE%E8%AE%A1%E4%B8%BAandroid%E7%A8%8B%E5%BA%8F%E5%BC%95%E5%85%A5%E2%80%9C%E5%85%B3%E9%97%AD%E7%A8%8B%E5%BA%8F%E2%80%9D%E6%9C%BA%E5%88%B6&quot;  target=&quot;_blank&quot;&gt;《合理设计为Android程序引入“关闭程序”机制》&lt;/a&gt;，但是很快在后续实践中发现文章有&lt;strong&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;严重知识错误&lt;/span&gt;&lt;/strong&gt;，因此决定另写一篇，纠正错误。&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-360&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Activity的&lt;em&gt;finish&lt;/em&gt;方法并不与结束程序有关，它只是删除了当前Activity实例。如果从Java语言的角度来看，&lt;em&gt;finish&lt;/em&gt;方法仅仅调用了继承了Activity类的类析构函数。当然这本来是一件非常正常的事情，但是许多开发者会很容易被该方法的字面意思所迷惑（包括我）。同时，即使整个程序仅有一个Activity，又或是保证所有的Activity都被结束，整个程序仍然没有被关闭。在安卓系统的“程序管理”页面，在2.3.3版本（及以后）中对这样的状态有着更好的描述：这些程序是“Cached background process”，并且在说明里明确说：“there is usually no reason to stop it”。这表明安卓系统为了保证常用程序的启动速度，将“关闭”的程序依旧保存在内存中，并仅在空间不够的时候，按照一定的方法回收内存（应该是按时间顺序结束老程序）。换句话说，安卓利用了类似于缓存的机制来提高程序效率，并且通过合理的内存管理来避免系统内存不足。&lt;/p&gt;
&lt;p&gt;再进一步的实验中，可以得出如下结论：&lt;/p&gt;
&lt;p&gt;1、正如上文所说：调用&lt;em&gt;finish&lt;/em&gt;方法会最终调用&lt;em&gt;onDestroy&lt;/em&gt;方法，并析构该类对象；&lt;/p&gt;
&lt;p&gt;2、使用“Home”按键——任何一台安卓机都应该具备的按键——将最终仅调用&lt;em&gt;onStop&lt;/em&gt;方法，而且不会析构类对象；&lt;/p&gt;
&lt;p&gt;3、利用&lt;em&gt;Intent&lt;/em&gt;方式启动另外一个Activity的时候，默认仅会调用到&lt;em&gt; &lt;/em&gt;&lt;em&gt;onStop&lt;/em&gt;方法，除非使用&lt;em&gt;finish&lt;/em&gt;方法，否则类对象不会被析构。&lt;/p&gt;
&lt;p&gt;4、每一个被使用的类（或仅简单理解为可以被显示的类）都可以有多个类对象，也就是说存在如下情景：&lt;/p&gt;
&lt;p&gt;在First类中利用&lt;em&gt;Intent&lt;/em&gt;方式打开Second类，并且不调用First类的&lt;em&gt;finish&lt;/em&gt;方法，这个时候内存中将同时保留First和Second类的类对象。此时若再在Second类中调用Intent方式打开First类，那么系统会重新实例化一个新的First类对象，也就是说此时First类在内存中有两个对象。&lt;/p&gt;
&lt;p&gt;5、利用语句“&lt;span style=&quot;text-decoration: underline;&quot;&gt;android.os.Process.killProcess(android.os.Process.myPid());&lt;/span&gt;”可以关闭程序（彻底退出进程，而不会保留在内存中，并且不需要为该语句申请任何权限），但是存在以下两种情况：&lt;/p&gt;
&lt;p&gt;A.当进程中仅有一个Activity（包括它的继承类）对象的时候，程序将退出：&lt;/p&gt;
&lt;p&gt;这个时候，程序不会调用任何Activity类的&lt;em&gt;finish&lt;/em&gt;方法，换句话说程序不会依次经历任何类的&lt;em&gt;onPause&lt;/em&gt;、&lt;em&gt;onStop&lt;/em&gt;、&lt;em&gt;onDestroy&lt;/em&gt;方法，而是直接结束进程。&lt;/p&gt;
&lt;p&gt;B.当进程中有多个Activity（包括它的继承类）对象的时候，程序将表现出&lt;strong&gt;重启&lt;/strong&gt;效果：&lt;/p&gt;
&lt;p&gt;这个时候，整个过程表现为进程先被结束，然后重新启动新的进程。&lt;/p&gt;
&lt;p&gt;P.S. 在实验过程中，我意识到，如果进程不被彻底退出，那么static变量将会常驻内存。虽然因为安卓有自己的内存管理机制，因此static变量的存在，不会成为影响内存空间的因素，但是一定会促使你的程序更容易被安卓系统优先关闭。更重要的事情是，如果你仅仅将关闭Activity作为你程序“退出”的标志，那么下次再次“启动”程序的时候，static变量不会被重新初始化，可能会导致程序的逻辑错误。因此，推荐在程序启动时，重新初始化这些变量，而不是像我的测试代码，在方法外初始化这些变量。&lt;/p&gt;
&lt;p&gt;P.S.2 由于结束进程语句不会经历Activity的关闭过程，因此强烈建议开发者在需要调用的Activity的&lt;em&gt;onDestroy&lt;/em&gt;方法中使用（并且最好是先调用&lt;em&gt;super.onDestroy()&lt;/em&gt;），或者自己处理好程序逻辑，在调用该方法。&lt;/p&gt;
&lt;p&gt;最后，为了方便大家自己也做一遍这个实验，特别免费附赠我的测试用例，欢迎&lt;a title=&quot;附件下载&quot; href=&quot;http://download.csdn.net/source/3325756&quot; class=&quot;aga aga_37&quot; target=&quot;_blank&quot;&gt;下载&lt;/a&gt;（&lt;del&gt;链接会在CSDN审核通过以后更新&lt;/del&gt;）哦~&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/585604282/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585604282/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mielf.net/featherelf/%e5%86%8d%e8%b0%88%e5%ae%89%e5%8d%93%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e9%80%80%e5%87%ba%e6%9c%ba%e5%88%b6/feed</wfw:commentRss><slash:comments>4</slash:comments><description>羽毛前段时间写了篇《合理设计为Android程序引入“关闭程序”机制》，但是很快在后续实践中发现文章有严重知识错误，因此决定另写一篇，纠正错误。 Activity的finish方法并不与结束程序有关，它只是删除了当前Activity实例。如果从Java语言的角度来看，finish方法仅仅调用了继承了Activity类的类析构函数。当然这本来是一件非常正常的事情，但是许多开发者会很容易被该方法的字面意思所迷惑（包括我）。同时，即使整个程序仅有一个Activity，又或是保证所有的Activity都被结束，整个程序仍然没有被关闭。在安卓系统的“程序管理”页面，在2.3.3版本（及以后）中对这样的状态有着更好的描述：这些程序是“Cached background process”，并且在说明里明确说：“there is usually no reason to stop it”。这表明安卓系统为了保证常用程序的启动速度，将“关闭”的程序依旧保存在内存中，并仅在空间不够的时候，按照一定的方法回收内存（应该是按时间顺序结束老程序）。换句话说，安卓利用了类似于缓存的机制来提高程序效率，并且通过合理的内存管理来避免系统内存不足。 再进一步的实验中，可以得出如下结论： 1、正如上文所说：调用finish方法会最终调用onDestroy方法，并析构该类对象； 2、使用“Home”按键——任何一台安卓机都应该具备的按键——将最终仅调用onStop方法，而且不会析构类对象； 3、利用Intent方式启动另外一个Activity的时候，默认仅会调用到 onStop方法，除非使用finish方法，否则类对象不会被析构。 4、每一个被使用的类（或仅简单理解为可以被显示的类）都可以有多个类对象，也就是说存在如下情景： 在First类中利用Intent方式打开Second类，并且不调用First类的finish方法，这个时候内存中将同时保留First和Second类的类对象。此时若再在Second类中调用Intent方式打开First类，那么系统会重新实例化一个新的First类对象，也就是说此时First类在内存中有两个对象。 5、利用语句“android.os.Process.killProcess(android.os.Process.myPid());”可以关闭程序（彻底退出进程，而不会保留在内存中，并且不需要为该语句申请任何权限），但是存在以下两种情况： A.当进程中仅有一个Activity（包括它的继承类）对象的时候，程序将退出： 这个时候，程序不会调用任何Activity类的finish方法，换句话说程序不会依次经历任何类的onPause、onStop、onDestroy方法，而是直接结束进程。 B.当进程中有多个Activity（包括它的继承类）对象的时候，程序将表现出重启效果： 这个时候，整个过程表现为进程先被结束，然后重新启动新的进程。 P.S. 在实验过程中，我意识到，如果进程不被彻底退出，那么static变量将会常驻内存。虽然因为安卓有自己的内存管理机制，因此static变量的存在，不会成为影响内存空间的因素，但是一定会促使你的程序更容易被安卓系统优先关闭。更重要的事情是，如果你仅仅将关闭Activity作为你程序“退出”的标志，那么下次再次“启动”程序的时候，static变量不会被重新初始化，可能会导致程序的逻辑错误。因此，推荐在程序启动时，重新初始化这些变量，而不是像我的测试代码，在方法外初始化这些变量。 P.S.2 由于结束进程语句不会经历Activity的关闭过程，因此强烈建议开发者在需要调用的Activity的onDestroy方法中使用（并且最好是先调用super.onDestroy()），或者自己处理好程序逻辑，在调用该方法。 最后，为了方便大家自己也做一遍这个实验，特别免费附赠我的测试用例，欢迎下载（链接会在CSDN审核通过以后更新）哦~&lt;img src=&quot;http://www1.feedsky.com/t1/585604282/HACKCRAFT/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/HACKCRAFT/~8432820/585604282/5913670/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>Android</category><category>设计</category><pubDate>Mon, 30 May 2011 16:33:21 +0800</pubDate><author>羽毛</author><comments>http://www.mielf.net/featherelf/%e5%86%8d%e8%b0%88%e5%ae%89%e5%8d%93%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e9%80%80%e5%87%ba%e6%9c%ba%e5%88%b6#comments</comments><guid isPermaLink="false">http://www.mielf.net/?p=360</guid><dc:creator>羽毛</dc:creator><fs:srclink>http://www.mielf.net/featherelf/%e5%86%8d%e8%b0%88%e5%ae%89%e5%8d%93%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e9%80%80%e5%87%ba%e6%9c%ba%e5%88%b6</fs:srclink><fs:srcfeed>http://www.mielf.net/feed</fs:srcfeed><fs:itemid>feedsky/HACKCRAFT/~8432820/585604282/5913670</fs:itemid></item></channel></rss>
