def prettify_thinkings/Sat, 10 Jan 2015 00:00:00 +0800闭包/code/closure.html<p><a href="http://zh.wikipedia.org/zh/%E9%97%AD%E5%8C%85_%28%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6%29">闭包@wiki</a></p> <h3>示例</h3> <div class="highlight"><pre> <span class="k">def</span> <span class="nf">make_counter</span><span class="p">():</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">def</span> <span class="nf">counter</span><span class="p">():</span> <span class="c"># counter() is a closure</span> <span class="n">nonlocal</span> <span class="n">i</span> <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> <span class="k">return</span> <span class="n">i</span> <span class="k">return</span> <span class="n">counter</span> <span class="n">c1</span> <span class="o">=</span> <span class="n">make_counter</span><span class="p">()</span> <span class="n">c2</span> <span class="o">=</span> <span class="n">make_counter</span><span class="p">()</span> <span class="k">print</span> <span class="p">(</span><span class="n">c1</span><span class="p">(),</span> <span class="n">c1</span><span class="p">(),</span> <span class="n">c2</span><span class="p">(),</span> <span class="n">c2</span><span class="p">())</span> <span class="c"># -&gt; 1 2 1 2</span> </pre></div> <h3>定义</h3> <p>闭包Closure是词法闭包的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。</p> <p>另一种说法,闭包是由函数和及相关的引用环境组合而成的实体。</p> <ul> <li>闭包在运行时可以有多个实例;</li> <li>不同的引用环境和相同的函数组合可以产生不同的实例</li> </ul> <h3>某些语言表现上</h3> <p>在函数中定义另一个函数,如果内部函数引用了外部函数的变量,则可能产生闭包。一旦外部函数被执行,一个闭包就形成。体现为:闭包中包含了内部函数的代码,以及所需的外部函数中的变量引用。</p> <p>这里,所引用的变量称作上值(upvalue)。</p> <p>典型的支持闭包的语言中,通常将函数当作第一类对象。(函数可以当作参数传递、可以作为返回值、可以绑定到变量名)</p> <h3>关键:上值</h3> <ul> <li>在给定函数调用的过程中,能够保持其持久性;</li> <li>作用域仅限于包含它们的函数,无法从其他程序代码部分进行访问;</li> </ul> <h3>用途</h3> <ul> <li>因为闭包只有在被调用时才执行操作(“惰性求值”);</li> <li>多个函数可以使用一个相同的环境,通过改变环境可以相互交流;</li> <li>信息隐藏(环境);</li> </ul> <h3>实现方式</h3> <p>最直接的想法应该是定义一个特殊的数据结构,保存函数指针 <span class="amp">&amp;</span>&nbsp;非local变量的指针。</p> <p>而使用函数调用栈的就比较困难了,因为外部函数在返回时出栈,依赖<span class="caps">GC</span>机制可以把外部函数的变量(闭包的非local变量)留存起来。</p>hqingyiSat, 10 Jan 2015 00:00:00 +0800tag:,2015-01-10:code/closure.html在压力下思考/life/thinking_in_pressure.html<p>今天参加了厂里组织的《全面管理你的工作压力》课程,本只想转换注意力借培训放松一下,不想却有很多感触,遂提笔记录。</p> <p>我认为这是一次对我个人来说很精彩的培训,其实也并不是说它给你灌输新知识的多少,而是它们与你整理过的或者还在萌芽尚未整理的思想不谋而合。甚是愉悦~</p> <h3><span class="caps">AHA</span>&nbsp;Moment</h3> <h5>Moment 1. 情绪<span class="caps">ABC</span>理论</h5> <p>情绪 <span class="caps">ABC</span>理论中:A表示诱发性事件,B表示个体针对此诱发性事件产生的一些信念,即对这件事的一些看法、解释。C表示自己产生的情绪和行为的结果。</p> <p>而通常人们会认为诱发事件A直接导致了人的情绪和行为结果C,发生了什么事就引起了什么情绪体验。然而,对不同的人,相同的事情会引起不同的情绪体验。</p> <p>在此理论中,我们要调整和优化的就是B我们的信念。更多内容请<a href="https://www.google.com.hk/search?q=%E6%83%85%E7%BB%AAABC%E7%90%86%E8%AE%BA">google词条&#8221;情绪<span class="caps">ABC</span>理论&#8221;</a></p> <h5>Moment 2.&nbsp;潜在压力</h5> <p>而在我们的生活中其实有很多潜在的压力,来自于一些曾计划要做或想做或未完成的事,它们慢慢在我们记忆的角落里积灰,偶尔才让我们想起却不愿意去触碰。但是他们永远占用我们记忆的角落。</p> <p>像我们收拾屋子一样,也是时候收拾一下我们的硬盘了。List&nbsp;them,直面我们潜在的压力然后各个击破他们。</p> <h3>补充</h3> <p>情绪<span class="caps">ABC</span>理论其实不只限于情绪,个人认为至少我这个个体,在发生一些活动时,也经常是A-&gt;C这个过程模式,旧的思维惯性引导着我们直接由因导果,确实提高了我们的处理效率,但是同时略显简单粗暴。</p> <p>比较喜欢思考,走路、吃饭甚或睡眠,思考范围或小或大。在我的思维里,大道至简,殊途同归,有时候也会思考一下自己的行为模式,探究其原始的驱动力,而这个特质很大程度塑造了我。而思考在这里扮演的就是<span class="caps">ABC</span>理论中B信念的角色,所以我在分享会上把这个理论升华为思考模型。</p> <p>北京这座城市的节奏较快,很多时候我们都忙着急匆匆地往前赶,忘了思考,忘了我们的初衷。希望大家在工作、生活的过程中,偶尔可以停下来思考一下。</p> <h3>回归压力问题</h3> <p>我的工作角色比较杂,功能设计、代码实现、帮助文档编写、构建自动化构造平台并管理构造任务、搭建并维护产品知识库(目前为博客)、维护部门服务器、解决产品公共问题和疑难问题、解决合作伙伴及用户反馈问题、在好友圈中扮演技术救火英雄等等。当然,我热爱我所做的这些!</p> <p>但伴随而来的是各种角色不断渗入我的工作时间,让我的时间支离破碎。我觉得研发这件事情是快乐的,但是需要专注。而处理这些非计划事件又让我频繁切换上下文,以至于效率下降。</p> <p>而在我的生活中,微博、微信、手机等等让我在享受科技带来便利的同时,也引入了更多碎片化的时间,习惯了在班车上刷微博,最近慢慢察觉被动接受了很多对我无用的信息。于是重新回归<span class="caps">RSS</span>,推送到kindle让我专注于阅读。</p> <p>而我处理工作压力的方法,首先是认识并承认这些压力,然后采用给时间分段,保持单位时间段内的专注性。课堂上听说了蕃茄工作法,知乎一下,亦有不谋而合之处。后续可以深入尝试一下。</p> <p>目前,需要一个辅助我进行此类时间管理的工具,是否有推荐的?(我希望其一方便记录,其二支持多设备同步)Google日历?</p>hqingyiFri, 07 Mar 2014 00:00:00 +0800tag:,2014-03-07:life/thinking_in_pressure.htmlJekyll之道,Geek之道/efficiency/dao_of_jekyll.html<h2>自由的Jekyll</h2> <p>初见Jekyll时它是和Github&nbsp;Pages在一起的,从一开始它在我耳畔就萦绕起geek的声音三日不绝。江南三月,杨柳依依,春风拂面,Jekyll就此婀娜行来~</p> <p>嗯,好好说话。Geek之道,在于热于探索,追求自由,Jekyll主要技术如<a href="http://www.yaml.org/"><span class="caps">YAML</span></a>、<a href="http://wowubuntu.com/markdown/">MarkDown</a>、<a href="http://www.liquidmarkup.org/">Liquid</a>都不属烂大街的东西,门槛有但都简单,在这个世界里你可以主宰所有,导航来个固定布局,主区域左右分栏,哦footer还要卖个萌,内容无论是以多媒体还是以文字为主,Jekyll毫无压力。</p> <h2>自由的味道是什么?</h2> <ul> <li> <p><strong>久旱逢甘霖</strong> - 简洁的<a href="http://wowubuntu.com/markdown/">MarkDown</a>语法</p> <p><a href="http://wowubuntu.com/markdown/">MarkDown</a>的设定从最一开始就是适用于Web写作的工具,提供简洁的语法以便转换为<span class="caps">HTML</span>。</p> <p>传统的<span class="caps">HTML</span>方式,把正文与tag混杂到一块,为了突出显示粗体不得不相开始和结束一个strong标签<code>&lt;strong&gt;&lt;/strong&gt;</code>,更别论引用、代码高亮之类了。Docbook虽然标准,仍属<span class="caps">XML</span>系统,摆脱不了编写过于繁琐的劣势。</p> </li> <li> <p><strong>他乡遇故知</strong> -&nbsp;文本载体,易于版本控制</p> <p>动态语言一般都会选择数据库来保存内容,相信<span class="caps">CSDN</span>、JavaEye等博客内容都是如此处理的,即使能够导出估计最后导出的格式也是百花怒放之象。</p> <p>Jekyll则是通过post生成静态的<span class="caps">HTML</span>以供部署,原始内容是以html或<a href="http://wowubuntu.com/markdown/">MarkDown</a>组织的正文,特别适合纳入版本控制特别是Git这种分布式的版本控制体系,尽情享用!</p> </li> <li> <p><strong>洞房花烛夜</strong> -&nbsp;编辑器之殇</p> <p>想想在号称所见即所得的Web上编写博客的场景吧,不能tab,设计个列表需要在工具栏上找啊找,你想做个链接,哦,他想加个图片,这些都不是灾难性的,当你点击发布或者保存草稿时,Oh Shit!&nbsp;网络异常?服务器错误?这时,你肯定会有一种欲哭无泪的绝望,可惜无能为力。</p> <p>再想象一下用你最得心应手的编辑器来写博客,你可以使用由此带来的所有特性。使用vi我可以毫不费力地处理去除粘贴过来代码多余的前置空白,可以使用宏,多么美好的一天啊~</p> </li> <li> <p><strong>金榜提名时</strong> -&nbsp;Github</p> <p>毫无疑问的压轴大戏。对我这种超轻度博客作者来讲,免费再加上Github这几个字母就足够了。你可以选择把site部署到其他服务器上,所以其实Github也不算是必选项。</p> <p>然后,你可以用到之前提及的所有特性来建立你的项目主页、分享你的知识,并部署到各种http容器中,纯静态的内容从性能上来讲也拉开那些动态内容几条街,唯一的缺点是静态内容是基于你的post、page在部署前生成的,所以比较适合个人和中小企业。</p> </li> </ul> <h2>入门指南</h2> <ul> <li><a href="https://github.com/mojombo/jekyll/wiki">Jekyll Github&nbsp;Wiki</a></li> <li><a href="http://jekyllbootstrap.com/">The Quickest Way to Blog on GitHub&nbsp;Pages</a></li> <li><a href="http://wowubuntu.com/markdown/">Markdown语法说明</a></li> <li><a href="http://mahua.jser.me/">MaHua&nbsp;在线Markdown编辑器</a></li> <li><a href="http://www.ruanyifeng.com/blog/2012/08/blogging_with_jekyll.html">搭建一个免费的,无限流量的Blog&#8212;&#8212;github&nbsp;Pages和Jekyll入门</a></li> <li><a href="https://www.google.com.hk/search?q=Jekyll&amp;aq=f&amp;oq=jekyll&amp;aqs=chrome.0.59j65j61j65l2j60.1630&amp;sourceid=chrome&amp;ie=UTF-8">Google &#8220;Jekyll&#8221;&nbsp;更多&#8230;</a></li> </ul>hqingyiWed, 24 Apr 2013 00:00:00 +0800tag:,2013-04-24:efficiency/dao_of_jekyll.html