<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Don't Panic. (关于 python 的文章)</title><link>http://wenliang.net/</link><description></description><atom:link href="http://wenliang.net/categories/python.xml" rel="self" type="application/rss+xml"></atom:link><language>zh_cn</language><lastBuildDate>Mon, 04 Sep 2023 07:05:09 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>FLL 经验分享</title><link>http://wenliang.net/posts/fll-experience/</link><dc:creator>Wenliang Lu</dc:creator><description>&lt;p&gt;我想在此分享一些&lt;span class="pangu"&gt;&lt;/span&gt;FLL 机器人比赛的教练经验, 特别是常见的问题. 但是不会涉及细节, 例如某个功能代码应该怎么写.&lt;/p&gt;
&lt;h2 id="guan-yu-fll-bi-sai"&gt;关于 FLL 比赛&lt;/h2&gt;
&lt;h3 id="mu-de"&gt;目的&lt;/h3&gt;
&lt;p&gt;我个人认为这个过程是非常锻炼娃的. 如果能认真做完所有事情, 是可以提升思考做事层次的.
如果一开始就冲着拿奖去的, 这个反而会有一定的偶然性. &lt;/p&gt;
&lt;h3 id="liu-cheng"&gt;流程&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;4&lt;span class="pangu"&gt;&lt;/span&gt;月~7&lt;span class="pangu"&gt;&lt;/span&gt;月: 可以先准备起来, 熟悉机器人编程. 同时创新项目大方向已经出来, 可以先做一些相关研究. &lt;/li&gt;
&lt;li&gt;8&lt;span class="pangu"&gt;&lt;/span&gt;月: FLL 会公布本年度的主题, 发布地图.&lt;/li&gt;
&lt;li&gt;10&lt;span class="pangu"&gt;&lt;/span&gt;月: 有的 FRC / FTC 队伍会组织模拟比赛, 给出一些建议, 能参加还是挺不错的. &lt;/li&gt;
&lt;li&gt;11&lt;span class="pangu"&gt;&lt;/span&gt;月~12&lt;span class="pangu"&gt;&lt;/span&gt;月: 开始比赛, 一般&lt;span class="pangu"&gt;&lt;/span&gt;2~3&lt;span class="pangu"&gt;&lt;/span&gt;轮. &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="xiang-mu-she-zhi"&gt;项目设置&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;机器人性能 robot performance: 25%. 没错, 大家最看重的机器人比赛, 只有 1/4 的比重. 其实没有那么重要. 你不需要拿到第一才能进军下一轮. (甚至这个项目拿到第一, 但是其他轮的分数太低, 也有可能什么都拿不到, 毕竟很难有说服力. )&lt;/li&gt;
&lt;li&gt;机器人设计 robot design: 25%. 5 分钟向裁判讲解自己队的机器人设计.&lt;/li&gt;
&lt;li&gt;创新项目 innovative project: 25%. 5 分钟向裁判讲解自己队的创新项目. &lt;/li&gt;
&lt;li&gt;团队精神 core value: 25%. 现在没有专门的考核了, 主要查看队员之间的互动. 就是看看又没有&lt;code&gt;团魂&lt;/code&gt;了.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="wu-chai"&gt;误差&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;很多人一听到乐高, 感觉很容易, 毕竟买一包玩具回家, 照着图纸做, 100% 成功.&lt;/li&gt;
&lt;li&gt;
然而这个比赛的设置其实在另外一个层次:&lt;ul&gt;
&lt;li&gt;机器人的设计是没有图纸的, 需要每个队自己来设计打造.&lt;/li&gt;
&lt;li&gt;每年任务不一样, 那就需要用乐高来搭建不同的部件来配合机器人完成, 这个也是需要每个队自己进行设计.&lt;/li&gt;
&lt;li&gt;家里的桌子/比赛的桌子/上面布置的任务, 都是由不同的人来完成的, 都有不同的状况. 并不是像计算器一样, &lt;code&gt;1+1&lt;/code&gt; 一定等于 &lt;code&gt;2&lt;/code&gt;. 机器人跑出来一定会有__&lt;code&gt;误差&lt;/code&gt;__!  这就和实际生活中遇到的问题一样, 并没有简单的解法.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
教练的一个任务就是教会队员怎么认识误差, 怎么处理误差, 如何通过一些传感器来校准/减少误差.&lt;ul&gt;
&lt;li&gt;举个例子, 颜色传感器可以读取地图上的颜色/光的强度. 但是在不同的地方, 也许是日光灯, 也许是室外, 你读到的值范围就不一样. 机器人在家每次可以判断出到达黑线, 但是在比赛场地, 就是可能找不到黑线, 最后跑迷路了.  有的队会在比赛前进行一次校准, 用机器人在实际地图上读一下各个颜色的值, 然后再比赛. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;所以我的感觉是学生要到初中(7/8&lt;span class="pangu"&gt;&lt;/span&gt;年级)左右才能更好理解这些工程的内容 (甚至很多家长都无法理解这些, 娃很挫折, 家长在旁边更挫折, 为什么每次跑出来都不一样?!). &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="scratch-vs-python"&gt;scratch vs python&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;有好几个家长问过我, 是不是用 python 就更加稳健? 不容易有误差? 答案很明显是&lt;code&gt;否&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;scratch 和 python 在本质上&lt;code&gt;等价&lt;/code&gt;的, python 能完成的事情, scratch 也能完成, 反之亦然. 这两个都是工具.&lt;/li&gt;
&lt;li&gt;
python 的好处是可以方便进行一些复杂的逻辑计算, scratch 也行, 但是写下来很难阅读.&lt;ul&gt;
&lt;li&gt;那对队员的要求就是, 他们要能够操作 python, 并且能够写出&lt;code&gt;复杂的逻辑&lt;/code&gt;, 这个需要很多的经验和学习才行. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;打个比方, 写文章, 有人写得好, 有人写得差. 为什么我每个字都看得懂, 放在一起就是不対劲呢? 写得好的人, 必然已经打磨过自己的思维和表达, 当写文章的时候, 文字只是一个工具.&lt;/li&gt;
&lt;li&gt;同样道理, 如果 scratch 都整不好, 我相信 python 不会成为一个利器, 毕竟真正需要的是如何应对误差的思路.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="die-dai-iteration"&gt;迭代 (iteration)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;学生需要通过迭代来理解误差, 学习新技术.&lt;/li&gt;
&lt;li&gt;这个过程非常枯燥, 需要耐得住寂寞. &lt;/li&gt;
&lt;li&gt;(此处还可以补充&lt;span class="pangu"&gt;&lt;/span&gt;1&lt;span class="pangu"&gt;&lt;/span&gt;千字, 等俺有空再加上)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="jing-yan"&gt;经验&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;队伍成功需要多年积累. 这几年我也遇到过不少队伍, 有几个队伍我还挺喜欢的, 你能看出他/她们的精神面貌, 接人待物都很成熟稳重, 绝对不是一年两年就能锻炼出来. 换个角度, 如果有学生能坚持这个活动(不被奖项这种东西困扰), 几年下来, 这个学生一定是个优秀的人才. &lt;/li&gt;
&lt;li&gt;纪律很重要. 不是所有娃/家长都是很投入很合作, 各种神奇的操作很多. 例如平时不贡献, 最后跳出来抢功劳的. 例如偷偷打游戏还拖别人下水的. 还有家长跳出来说分配不公要抓阄等等. 这个很考验教练的管理能力. 我感觉需要通过几年的人员调整来保留合适的队员, 他们才能自我运作起来.&lt;/li&gt;
&lt;/ul&gt;</description><category>lego</category><category>python</category><category>robotic</category><category>编程</category><guid>http://wenliang.net/posts/fll-experience/</guid><pubDate>Wed, 01 Mar 2023 00:32:07 GMT</pubDate></item><item><title>vim 插件快速插入剪贴板中的图片</title><link>http://wenliang.net/posts/vim-plugin-to-insert-clipboard-image/</link><dc:creator>Wenliang Lu</dc:creator><description>&lt;h2 id="vim-plugin-to-insert-clipboard-image"&gt;vim plugin to insert clipboard image&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Inspired by the &lt;a href="https://atom.io/packages/markclip"&gt;markclip&lt;/a&gt; plugin for &lt;a href="https://atom.io/"&gt;atom&lt;/a&gt; editor. Just copy and paste, saving images got so easy.&lt;/li&gt;
&lt;li&gt;vim plugin&lt;/li&gt;
&lt;li&gt;written in python&lt;/li&gt;
&lt;li&gt;linux only&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="an-zhuang"&gt;安装&lt;/h2&gt;
&lt;p&gt;可以使用 &lt;code&gt;vundle&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Plugin 'wenliang/clipboard2image'
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="shi-yong"&gt;使用&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;右键在浏览器中选择图片, &lt;code&gt;copy image&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在&lt;span class="pangu"&gt;&lt;/span&gt;vim 中按 &lt;code&gt;F2&lt;/code&gt;, 就会把图片自动保存到&lt;code&gt;https://imageclipped.s3-us-west-1.amazonaws.com/&lt;/code&gt; 目录中&lt;/li&gt;
&lt;li&gt;并且在&lt;span class="pangu"&gt;&lt;/span&gt;vim 中插入 &lt;code&gt;![](figure/xxxxx.png)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我一般用来做读书笔记. 截屏也可以复制保存.&lt;/p&gt;</description><category>linux</category><category>python</category><category>vim</category><guid>http://wenliang.net/posts/vim-plugin-to-insert-clipboard-image/</guid><pubDate>Mon, 02 Oct 2017 04:33:02 GMT</pubDate></item><item><title>SL4A experience</title><link>http://wenliang.net/posts/sl4a-experience/</link><dc:creator>Wenliang Lu</dc:creator><description>&lt;h2 id="steps-to-program-from-ubuntu"&gt;Steps to program from ubuntu&lt;/h2&gt;
&lt;h3 id="phone"&gt;phone&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;mobile -&amp;gt; SL4A -&amp;gt; view -&amp;gt; interpreters -&amp;gt; menu -&amp;gt; private server&lt;/li&gt;
&lt;li&gt;find the server port number (say $PORT) for the notification bar.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="ubuntu-side"&gt;Ubuntu side&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;cd bin/android-sdk-linux/platform-tools&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adb forward tcp:9999 tcp:$PORT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;export AP_PORT=9999&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;start ipython/python&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;android&lt;/span&gt;
&lt;span class="n"&gt;droid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;android&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Android&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;droid&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;makeToast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Yes, I am in.'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="misc"&gt;misc&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ adb push my_script.py /sdcard/sl4a/scripts/lwl
&lt;/pre&gt;&lt;/div&gt;</description><category>android</category><category>python</category><category>编程</category><guid>http://wenliang.net/posts/sl4a-experience/</guid><pubDate>Sun, 06 Nov 2011 06:01:07 GMT</pubDate></item><item><title>virtualenv 真是一个好东西</title><link>http://wenliang.net/posts/virtualenv/</link><dc:creator>Wenliang Lu</dc:creator><description>&lt;h2 id="virtualenv"&gt;virtualenv&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://pypi.python.org/pypi/virtualenv"&gt;virtualenv&lt;/a&gt;
相当于在一个目录中形成一个单独的&lt;span class="pangu"&gt;&lt;/span&gt;python&lt;span class="pangu"&gt;&lt;/span&gt;环境.
其中安装的包和系统没有关系. 这个特点对于爱折腾,要使用最新版库的人
来说非常有用. 例如&lt;span class="pangu"&gt;&lt;/span&gt;flask / blogofile&lt;span class="pangu"&gt;&lt;/span&gt;就推荐使用&lt;span class="pangu"&gt;&lt;/span&gt;virtualenv.&lt;/p&gt;
&lt;p&gt;让我想起&lt;span class="pangu"&gt;&lt;/span&gt;vim&lt;span class="pangu"&gt;&lt;/span&gt;的&lt;a href="http://www.vim.org/scripts/script.php?script_id=2332"&gt;pathogen&lt;/a&gt;插件,真是太神奇了.&lt;/p&gt;
&lt;h2 id="chu-shi-hua"&gt;初始化&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; somewhere
$ virtualenv --no-site-packages myproject
$ ls myproject
bin include lib
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;--no-site-package&lt;span class="pangu"&gt;&lt;/span&gt;让新安装的包都装到该目录, 而非链接到系统里面的库.&lt;/p&gt;
&lt;h2 id="ji-huo"&gt;激活&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; myproject
$ &lt;span class="nb"&gt;source&lt;/span&gt; bin/activate
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="shi-yong"&gt;使用&lt;/h2&gt;
&lt;p&gt;在这里就和以前一样使用了, 使用&lt;span class="pangu"&gt;&lt;/span&gt;easy_install/pip&lt;span class="pangu"&gt;&lt;/span&gt;来安装&lt;span class="pangu"&gt;&lt;/span&gt;python&lt;span class="pangu"&gt;&lt;/span&gt;软件.&lt;/p&gt;</description><category>python</category><guid>http://wenliang.net/posts/virtualenv/</guid><pubDate>Sat, 09 Jul 2011 05:17:28 GMT</pubDate></item><item><title>qtile - python写就的平铺桌面管理器</title><link>http://wenliang.net/posts/qtile/</link><dc:creator>Wenliang Lu</dc:creator><description>&lt;h2 id="2023-update"&gt;2023 update&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;我还有机器上使用 &lt;code&gt;qtile&lt;/code&gt;. 有时候安装不是很方便. 一旦配置好, 还是挺稳定的.&lt;/li&gt;
&lt;li&gt;也有一些机器上使用 &lt;a href="http://wenliang.net/posts/regolith2"&gt;regolith2&lt;/a&gt;, 两个快捷键都设置成一样. &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2017-update"&gt;2017 update&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;现在已经把 &lt;code&gt;awesome-wm&lt;/code&gt; 改成 &lt;code&gt;qtile&lt;/code&gt; 了. 基本没有问题.&lt;/li&gt;
&lt;li&gt;ubuntu 已经有包了. 方便&lt;/li&gt;
&lt;li&gt;有一些&lt;span class="pangu"&gt;&lt;/span&gt;plugin, 显示&lt;span class="pangu"&gt;&lt;/span&gt;cpu&lt;span class="pangu"&gt;&lt;/span&gt;等&lt;/li&gt;
&lt;li&gt;
话说现在的配置很简单, 主要就是自动平铺出现的窗口,&lt;ul&gt;
&lt;li&gt;不同的任务放在不同的桌面. 快捷键切换桌面.&lt;/li&gt;
&lt;li&gt;
使用 &lt;a href="https://github.com/DaveDavenport/rofi"&gt;rofi&lt;/a&gt; 作为启动器&lt;ul&gt;
&lt;li&gt;方便自己配置&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2011-nian"&gt;2011 年&lt;/h2&gt;
&lt;p&gt;好吧, 我对其感兴趣是因为它是&lt;span class="pangu"&gt;&lt;/span&gt;python&lt;span class="pangu"&gt;&lt;/span&gt;写的.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://qtile.org/"&gt;qtile&lt;/a&gt;也是一个平铺桌面管理器, 和&lt;a href="http://wenliang.net/Awesome"&gt;Awesome&lt;/a&gt;类似.  &lt;img src="https://imageclipped.s3-us-west-1.amazonaws.com/36e9a047a5be84ecd6af72729c1b0426.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;可惜安装依赖的包太难装, 好不容易在&lt;span class="pangu"&gt;&lt;/span&gt;A31&lt;span class="pangu"&gt;&lt;/span&gt;上安装好.&lt;/p&gt;
&lt;h2 id="shou-dong-an-zhuang-qtile"&gt;手动安装 qtile&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;sudo apt-get install python2.6-dev&lt;/li&gt;
&lt;li&gt;install xpyb&lt;/li&gt;
&lt;li&gt;git clone git://anongit.freedesktop.org/xorg/util/macro&lt;/li&gt;
&lt;li&gt;git clone git://anongit.freedesktop.org/xorg/proto/xproto&lt;/li&gt;
&lt;li&gt;export ACLOCAL='aclocal -I /usr/local/share/aclocal/'&lt;/li&gt;
&lt;li&gt;install xproto&lt;/li&gt;
&lt;li&gt;git clone git://anongit.freedesktop.org/xcb/proto&lt;/li&gt;
&lt;li&gt;install libxcb&lt;/li&gt;
&lt;li&gt;install cairo&lt;/li&gt;
&lt;li&gt;install py2cairo&lt;/li&gt;
&lt;li&gt;git clone git://github.com/cortesi/qtile.git&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;还没有怎么使用过.&lt;/p&gt;</description><category>currently-using</category><category>python</category><category>tiling-windows-manager</category><category>X11</category><guid>http://wenliang.net/posts/qtile/</guid><pubDate>Tue, 25 Jan 2011 15:48:47 GMT</pubDate></item><item><title>pywo</title><link>http://wenliang.net/posts/pywo/</link><dc:creator>Wenliang Lu</dc:creator><description>&lt;p&gt;和&lt;a href="http://wenliang.net/PyTyle"&gt;PyTyle&lt;/a&gt;类似, 是一个窗口管理器.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://code.google.com/p/pywo/"&gt;pywo&lt;/a&gt;可以实现类似&lt;span class="pangu"&gt;&lt;/span&gt;windows&lt;span class="pangu"&gt;&lt;/span&gt;上&lt;a href="http://jgpaiva.dcmembers.com/gridmove.html"&gt;gridmove&lt;/a&gt;的功能,
整个桌面被分成若干格子, 每个窗口可以占据其中若干地盘.&lt;/p&gt;
&lt;p&gt;啥时候在&lt;span class="pangu"&gt;&lt;/span&gt;gnome&lt;span class="pangu"&gt;&lt;/span&gt;上试试看.&lt;/p&gt;</description><category>python</category><category>tiling-windows-manager</category><category>X11</category><guid>http://wenliang.net/posts/pywo/</guid><pubDate>Sat, 13 Nov 2010 15:45:26 GMT</pubDate></item><item><title>PyTyle - 平铺桌面管理器</title><link>http://wenliang.net/posts/pytyle/</link><dc:creator>Wenliang Lu</dc:creator><description>&lt;p&gt;&lt;a href="http://pytyle.com/wiki/Main_Page"&gt;PyTyle&lt;/a&gt;是一个&lt;a href="http://en.wikipedia.org/wiki/Tiling_window_manager"&gt;tiling window manager&lt;/a&gt;, 准确地说应该是一个插件, 需要和其他兼容&lt;a href="http://pytyle.com/wiki/Working_window_managers"&gt;EWMH&lt;/a&gt;的桌面管理器一起工作.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用&lt;span class="pangu"&gt;&lt;/span&gt;python&lt;span class="pangu"&gt;&lt;/span&gt;编写, 配置文件也是&lt;span class="pangu"&gt;&lt;/span&gt;python&lt;/li&gt;
&lt;li&gt;可以和其他桌面管理器一起工作, 我常用的是&lt;span class="pangu"&gt;&lt;/span&gt;gnome&lt;span class="pangu"&gt;&lt;/span&gt;和&lt;span class="pangu"&gt;&lt;/span&gt;fvmw-crystal&lt;/li&gt;
&lt;li&gt;手动激活, 也可以配置某个&lt;span class="pangu"&gt;&lt;/span&gt;screen/workplace&lt;span class="pangu"&gt;&lt;/span&gt;自动按照某&lt;span class="pangu"&gt;&lt;/span&gt;layout&lt;span class="pangu"&gt;&lt;/span&gt;布局.&lt;/li&gt;
&lt;li&gt;快捷键设置, 自然不消多话. 但是可选择的功能不多. 对我而言, 我最想要的功能是一键呼出, 自动排列. 其他的快捷键可以交给&lt;span class="pangu"&gt;&lt;/span&gt;gnome&lt;span class="pangu"&gt;&lt;/span&gt;或则&lt;span class="pangu"&gt;&lt;/span&gt;fvwm-crystal&lt;span class="pangu"&gt;&lt;/span&gt;完成.&lt;/li&gt;
&lt;/ul&gt;</description><category>python</category><category>tiling-windows-manager</category><category>X11</category><guid>http://wenliang.net/posts/pytyle/</guid><pubDate>Tue, 22 Dec 2009 15:44:18 GMT</pubDate></item><item><title>别忘了结婚纪念日</title><link>http://wenliang.net/posts/specialday/</link><dc:creator>Wenliang Lu</dc:creator><description>&lt;p&gt;TODO: broken. need update&lt;/p&gt;
&lt;h2 id="zhe-ge-jiao-ben-gan-ma-de"&gt;这个脚本干嘛的？&lt;/h2&gt;
&lt;p&gt;这个脚本就是用来在某些重要的日子之前提醒我们，
有点类似于&lt;a href="http://www.jiyiri.com/"&gt;记忆日&lt;/a&gt;网站 (update: 该网站已经倒闭)。
这个商业网站其实挺好，但是我总有一点不放心，因为它不支持批量导出导入。
自己写一个脚本也很快。&lt;/p&gt;
&lt;h2 id="ru-he-shi-yong"&gt;如何使用？&lt;/h2&gt;
&lt;h3 id="ti-xing-fang-shi"&gt;提醒方式&lt;/h3&gt;
&lt;p&gt;默认提醒方式就是运行程序后，打印临近的重要日子。&lt;/p&gt;
&lt;p&gt;可以在&lt;code&gt;~/.specialdayrc&lt;/code&gt;定义自己想要的提醒方式, 例如邮件：
$$code
email = "echo '$date: $msg_remind' | mutt lwlg -s '$date: $msg_remind'"
$$/code
其中&lt;code&gt;%date&lt;/code&gt;和&lt;code&gt;%msg_remind&lt;/code&gt;会被替换成相应的内容。&lt;/p&gt;
&lt;p&gt;注意以上命令需要命令行可执行无误。我的&lt;span class="pangu"&gt;&lt;/span&gt;mutt&lt;span class="pangu"&gt;&lt;/span&gt;已经配置好了，可以通过这种方式发信。&lt;/p&gt;
&lt;p&gt;总之，提醒方式很开放，只要能在命令行调用即可。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;弹出窗口？ 记不得什么命令了。&lt;/li&gt;
&lt;li&gt;gtalk/msn 机器人&lt;/li&gt;
&lt;li&gt;email&lt;/li&gt;
&lt;li&gt;todotxt&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;或者利用它默认的&lt;span class="pangu"&gt;&lt;/span&gt;print&lt;span class="pangu"&gt;&lt;/span&gt;功能，在&lt;span class="pangu"&gt;&lt;/span&gt;conky&lt;span class="pangu"&gt;&lt;/span&gt;中显示出来，也不失为一个好方法。&lt;/p&gt;
&lt;h3 id="ti-xing-nei-rong"&gt;提醒内容&lt;/h3&gt;
&lt;p&gt;需要在&lt;code&gt;~/.specialday_data&lt;/code&gt;中定义各种重要日期：
$$code
% 年月日，只在今年提醒。
2009-10-1 -10 print 60&lt;span class="pangu"&gt;&lt;/span&gt;周年国庆&lt;/p&gt;
&lt;p&gt;% 没有指定年份，表示每年都会提醒
% -2|-1|0  表示分别提前&lt;span class="pangu"&gt;&lt;/span&gt;2&lt;span class="pangu"&gt;&lt;/span&gt;天， 提前&lt;span class="pangu"&gt;&lt;/span&gt;1&lt;span class="pangu"&gt;&lt;/span&gt;天，以及当天进行提醒
% print|email 表示同时用&lt;span class="pangu"&gt;&lt;/span&gt;print&lt;span class="pangu"&gt;&lt;/span&gt;以及&lt;span class="pangu"&gt;&lt;/span&gt;mail&lt;span class="pangu"&gt;&lt;/span&gt;进行提醒, 除了&lt;span class="pangu"&gt;&lt;/span&gt;print&lt;span class="pangu"&gt;&lt;/span&gt;之外，其他各种方式需要自己定义
05-04 -2|-1|0 print|email 青年节&lt;/p&gt;
&lt;p&gt;% L08-15 表示阴历&lt;span class="pangu"&gt;&lt;/span&gt;8&lt;span class="pangu"&gt;&lt;/span&gt;月&lt;span class="pangu"&gt;&lt;/span&gt;15&lt;span class="pangu"&gt;&lt;/span&gt;日
L08-15 -1|0 print 中秋节
$$/code&lt;/p&gt;
&lt;h3 id="yun-xing"&gt;运行&lt;/h3&gt;
&lt;p&gt;记得用&lt;span class="pangu"&gt;&lt;/span&gt;cron&lt;span class="pangu"&gt;&lt;/span&gt;运行：
$$code
1 0 * * * SpecialDay.py
$$/code
具体查看&lt;code&gt;SpecialDay.py -h&lt;/code&gt;即可。&lt;/p&gt;
&lt;p&gt;如果提醒方式是&lt;span class="pangu"&gt;&lt;/span&gt;print&lt;span class="pangu"&gt;&lt;/span&gt;的话，也可以利用&lt;span class="pangu"&gt;&lt;/span&gt;conky&lt;span class="pangu"&gt;&lt;/span&gt;来提醒。&lt;/p&gt;
&lt;h2 id="yi-lai"&gt;依赖&lt;/h2&gt;
&lt;p&gt;需要&lt;a href="http://code.google.com/p/pyzh/"&gt;pyzh@google code&lt;/a&gt;中的&lt;a href="http://code.google.com/p/pyzh/source/browse/trunk/zhutils/lunar/lunarcalendar/lunarcalendar.py"&gt;lunarcalendar.py&lt;/a&gt;。
我偷懒就把这个文件放在同一个目录中了，要是安装&lt;span class="pangu"&gt;&lt;/span&gt;pyzh&lt;span class="pangu"&gt;&lt;/span&gt;到系统中的话，就可能要修改代码。&lt;/p&gt;
&lt;h2 id="dai-ma"&gt;代码&lt;/h2&gt;
&lt;script src="https://gist.github.com/1867055.js"&gt; &lt;/script&gt;
&lt;h2 id="dai-zuo-shi-yi"&gt;待做事宜&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;~~(调试调用&lt;span class="pangu"&gt;&lt;/span&gt;bash&lt;span class="pangu"&gt;&lt;/span&gt;命令。)~~ 经我测试，email = "..."可以成功运行，但是各人的情况不一样，也许需要先调试一下。&lt;/li&gt;
&lt;li&gt;~~(整理一个&lt;span class="pangu"&gt;&lt;/span&gt;countdown&lt;span class="pangu"&gt;&lt;/span&gt;的版本出来。)~~ 搞定，例如 “&lt;code&gt;2009-08-21 * print 测试&lt;/code&gt;”每次运行都会在终端输出&lt;strong&gt;还有 xx&lt;span class="pangu"&gt;&lt;/span&gt;天是：测试&lt;/strong&gt;. 配合&lt;span class="pangu"&gt;&lt;/span&gt;conky&lt;span class="pangu"&gt;&lt;/span&gt;使用，其乐无穷。&lt;/li&gt;
&lt;li&gt;~~(算天数的地方有问题，到了年底就不准确了，需要修改)~~ 如果是每年都运行的话，我把前一年和后一年的日期也都加入比较，这样就避免错过了。不过尚未测试。&lt;/li&gt;
&lt;li&gt;感觉还不是很灵活. 需要重新改写一次.  最好格式能和&lt;span class="pangu"&gt;&lt;/span&gt;crontab&lt;span class="pangu"&gt;&lt;/span&gt;相同.&lt;/li&gt;
&lt;li&gt;要能计算今年生日的时候是几岁了.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="lian-jie"&gt;链接&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.jiyiri.com/"&gt;记忆日&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/pyzh/"&gt;pyzh@google code&lt;/a&gt;, 阴阳历转换, 等等&lt;/li&gt;
&lt;/ul&gt;</description><category>GTD</category><category>python</category><category>编程</category><guid>http://wenliang.net/posts/specialday/</guid><pubDate>Mon, 04 May 2009 16:03:12 GMT</pubDate></item></channel></rss>