万历十五年之文渊阁



文华殿坐落紫禁城东部,皇帝在此就读。1574年,万历10岁的时候,他就能挥笔写作径尺大字。写下了“责难陈善”四个字当场赐给申先生,意思是希望他的老师能规劝他的过失,提出有益的建议。

申时行的办公地点是文渊阁,坐落在午门之内。文渊阁的正厅供奉孔子像。两侧有官舍四间,另有阁楼,乃是保存书籍档案的地方。阁前不远有东西两排平房,是为书记人员抄缮文件的办公室。以这些房屋作为我们庞大帝国的神经中枢,似乎过于朴素;但是和国初相比,则已有了长足的发展。当年草创伊始,文渊阁真的是一间亭阁,为皇帝职掌御前文墨各官等候召见时歇足之处。以后扩充官舍,增加图籍,又辅之以吏员,才规模大备,可是它的性质仍非片言只语所能概述。它既像皇帝与文官集团间的联络处,也像各部院以上的办公厅;有时又像皇帝的顾问室,或是调解纠纷的超级机构。总而言之,它所做的事,就是以抽象的原则,施用于实际问题,或者说把实际问题抽象化。例如经过皇帝批准,人事有所任免,文渊阁公布其原因,总是用道德的名义去掩饰实际的利害。因为本朝法令缺乏对具体问题评断是非的准则,即令有时对争执加以裁处,也只能引用经典中抽象道德的名目作为依据。

文渊阁

去故宫的时候,导游对我们说起宫和殿的区别,之前和小乐说到文华殿的时候,还特意问了一下,小家伙利索地说:“宫是住的地方,殿是办公的地方。”看来北京游还有点收获。

那阁又是什么时候呢?亭台楼阁廊榭轩,你能知道都有啥区别吗?百度知道

亭:有顶无墙的小型建筑,如:醉翁亭。 楼:二层以上的房屋,如:岳阳楼。
阁:四周设栏杆回廊的楼,如:滕王阁。 廊:屋檐之下的过道,如:九曲回廊。
榭:建筑在台上的房屋,如:水榭。 轩:有窗的长廊或小室,如:惜抱轩。

在mac lion 设置802.1X使用证书连接有线网络



之前在知乎上提过一个问题“在mac lion 设置802.1X如何使用证书连接有线网络”,后来自己解决了,也是自问自答。

不过当时描述的比较简单,有朋友问起,都忘了,再重新整理一下。

先是得下载工具iphone configuration utility,安装后运行。

1. 点击“Configuration Profiles”,New一个,在General中填写Name, Identifer,界面如图:
config1

2. 在Credentials中,选择Configure,会提示选择证书,找到管理员提供的证书后继续,填写证书密码。
config2

3. 在Wi-Fi 中,选择Configure,我们如果是连有线网络的认证,可以随便输入SSID,选择Security Type,这个要看你的有线网络认证类型了,我选择WPA/WPA2 Enterprise,会出来相应的协议和验证要填写,如图:
config3

4. 还是在在Wi-Fi 中,勾选完协议后,再选择”Authentication”,你需要在Identity Certificate中选择之前设置的证书。

5. 至此iphone configuration utility中设置完成,点击Export导出为.mobileconfig文件。

6. 双击倒出的.mobileconfig文件,会提示我们导入user profile,此时按提示操作,最后点击Install即可。

7. 成功导入后,在System Preferences中,你应该看到一个新的图标Profiles在System下,点击Profiles可以查看导入的信息。
config4

8. 在System Preferences中,点击Network,选择Ethernet,点击Advance,tab选项中就会看到有802.1X,里面就有会有新增的配置profile。图上显示的profile名称和前面的设置不同,主要是我前面的截图是为了示例新建的,后面并没有实际导入。
config5

9. 插入网线,应该会做验证,你也可以在Ethernet中,连接802.1X。

大致就是这样了,希望能有所帮助。

什么是RubyGem



RubyGems包管理系统(也称为Gems)已经成为Ruby代码包发布和管理的标准,在Ruby 1.9中已经打包在Ruby中提供。

每个gem有名称、版本和平台。比如rake gem版本是0.8.7,平台是ruby,可以在Ruby的任意平台上运行,其他平台还包括java(比如nokogiri)和mswin32(比如sqlite-ruby)。

Gems的结构,一般包括三部分:

代码,包括测试和支持工具。 文档
gemspec

每个gem有同样的标准代码组织结构:

% tree freewill
freewill/
├── bin/
│ └── freewill
├── lib/
│ └── freewill.rb
├── test/
│ └── test_freewill.rb
├── README
├── Rakefile
└── freewill.gemspec
`
lib包含gem的代码。
test或spec包含测试,取决于采用测试框架。 一个gem通常有一个Rakefile,用于rake程序自动化测试、生成代码和执行其他一些任务。
一般在bin目录下会有一个执行文件,gem安装后,该bin目录通常会在PATH路径中。 文档一般包含在README和代码中。当安装gem时,文档会自动生成,大多数gems包括RDoc文档,有的也用YARD
* 最后一部分是gemspec,包含有关这个gem的规格信息。包括文件、测试、平台、版本号和其他的作者邮件和姓名等等。

RubyGems修改了Ruby的装载路径,控制你的Ruby代码能被require找到。

一旦使用require请求一个gem,RubyGems

自动把lib目录加入到$LOAD_PATH中,有些gems也会增加其他目录,比如bin。这些是可选的,你可以把一个gem的多个目录加入到装载路径中。

Gemspec提供基本的信息,让你知道gem包含的内容,一个简单例子:

`
% cat freewill.gemspec
Gem::Specification.new do |s|
s.name = ‘freewill’
s.version = ‘1.0.0’
s.date = ‘2010-04-27’
s.summary = “Freewill!”
s.description = “I will choose Freewill!”
s.authors = [“Nick Quaranto”]
s.email = 'nick@quaran.to
s.homepage = ‘http://example.com'
s.files = [“lib/freewill.rb”]
end

来源What is a gem?

慷慨



好久没有说过家庭美德了,《家庭美德指南》中的52项美德我们从头到尾,每周都聊了一遍(算来也该有一年多了)。结束最后一个美德的时候,问:“美德课上完了,我们以后每周怎么办呢?”结果全家的意见是继续,只不过形式上更自由了些,每次的美德都是我们随意挑选出,并且也没有刻意去要求时间和内容。

这周的美德是慷慨。

小乐说:慷慨里面是不是还有宽容的这层意思?

我有点疑惑。

小家伙于是解释道:你会不会对你的对头也做到慷慨呢?如果对于对头也能做到慷慨的话,那是不是就要先宽容。

嗯,有道理,这个的确是要在宽容的基础上才能做到的。

说得来劲了,小乐又开始给我们讲起了她的小故事:“昨天在书店,有一件事情,我说给你们听听,你们说说看这里面有什么美德好吗?!”

我和乐妈都表示欢迎。(现在有些事情不在美德课上聊起,甚至都不知道她还有这样的事。)

“在书店里的时候,当时坐在我边上的一个女孩子和我说:‘好朋友,你能帮我看一下位子吗?’

我答应了,后来她回来了。

不一会儿,她又要去换书,又说‘你再帮我看一下好吗?’

我还是同意了,这时有一个女的过来想坐,我就说这个位置有人,她就说能不能让她也坐一下,让我往边上去一点。

我就同意了,后来那个女孩子回来了,我就和她说了,她也没有异议。

你们说,我这里做到了什么美德呀?”

“你这好像不止一个美德,我们一起来看看。”

“先是热情,那个小女孩的。”

“还有礼貌。”

“你帮她看好座位,这是责任感。”

对了,还有体贴,小家伙体贴了那位阿姨,站着没地方坐真的很累,大家一起挤挤也是不错的。

临结束的时候,小乐说:“我挺喜欢上美德课的,全家人可以坐着自由的聊天,想说什么就说什么。”

这就是我们家的美德课,貌似没说太多和慷慨有关的事,随意。回复MD可以查阅以前的家庭美德课的记录。

欢迎订阅讲述我和小乐成长中故事的微信账号: fuyunv

万历十五年之宫女、答应



皇宫里的几千名宫女都归皇帝一人私有。作为法定的妻子,天子有皇后一人,经常有皇贵妃一人,还有数量更多的妃和嫔。

大量的宫女都出身于北京及附近郊区的清白之家。经过多次的甄别与淘汰,入选者被女轿夫抬进宫门,从此就很难跨出宫门一步。

“宫女进宫要从哪个门进啊?”

小乐吱吱唔唔:“午门。”

“不对,我们在故宫玩的时候,最后从后门出去的,那里就是宫女选秀进宫的地方。”

神武门,原名玄武门,康熙即位时为避讳而改名为“神武门”。当选秀女时,此门也是被选女子出入紫禁城的通道。

这些女孩子的年龄在9岁至14岁之间,她们的容貌和生活经常成为骚人墨客笔下的题材。其实以容貌而论,一般来说仅仅端正,惊人的美丽并不是选择的标准。至于她们的生活,那确实是值得同情的。皇宫里真正的男人只有皇帝一个,得到皇帝垂青因而风云际会,像慈圣太后的经历一样,这种机会不是没有,但毕竟是极为罕见的。绝大多数的宫女在使婢生涯中度过了青春,中年以后也许配给某个宦官作伴,即所谓“答应”,也可能送到紫禁城的西北部养老打杂。经历过这可悲可感的一生,最后老病而死,还不许家属领取尸体。她们的尸体经过火化后,埋葬在没有标记的坟墓里。

维基百科中提到答应是清朝后宫妃嫔的第八个等级,也就是最低等的级别。清朝后宫总分为八个等级:皇后、皇贵妃、贵妃、妃、嫔、贵人、常在、答应。答应只能有一名宫女侍候。

那看来明朝的答应还有所不同。常在和答应虽然在明朝内宫就已有,但都是地位非常低下的宫女和杂役,而不象清代的常在和答应是皇帝小妾的最后二个等级。而且在明代,答应不仅仅指宫女,有时太监也会称为答应。

欢迎订阅讲述我和小乐成长中故事的微信账号: fuyunv

和鸡兔同笼一样经典的聪明题

在朋友圈里发了一道奥数题目:

“一个数除以3余1,除以5余3,除以7余5,最小的三位数是多少?”在小乐教室门口偷听方法,能做出来的举手。

答复的人中两位女士给出了正解:3,5,7的最小公倍数再加上2,也就是3x5x7+2=107。其他和我差不多,呵呵。

题目发出后,我纠正了一下,原题应该是:“一个数除以3余2,除以5余3,除以7余5,最小的三位数是多少?”要更难一些。

这是乐乐现在在一个奥数班中学习时带回来的练习题,说实话,我就没想起最小公倍数的事情,硬凑的答案,还和小乐解释了半天:

什么5的倍数末尾应该是0或5,余3那就应该是3或8。
什么3的倍数,那就是3个数之和应该是3的倍数。最小的三位数从1百开始凑起,减去2之后三个数字之和是3的倍数,比如113或128。
然后7就没啥招了,我们就硬凑吧,113,128都去除7看看余多少,发现不对,我们就加30。
凑着,凑着,凑到了173,发现除以7,余数为5,总数凑出来了。
结果小乐听地迷迷糊糊,我也就就这样了。(我对奥数的态度还是认为少数人的游戏,其实不必每个人都参与。)

后来晚上跟着小乐去上课,在门口偷师。才知道了这道题的方法还是要从最小公倍数的角度去解。还说了个“韩信点兵”的口诀,没听清楚,查百度大致意思是:韩信带1500名兵士打仗,战死四五百人,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。韩信马上说出人数:1049。(有关韩信点兵的故事版本很多,大家自行搜索)

回到题目:“一个数除以3余2,除以5余3,除以7余5,最小的三位数是多少?”

除以5余3,除以7余5,也就是这个数补上2之后就应该是5和7的公倍数,最小就是5X7-2=33,然后要满足除以3余2,33不行,下一个数需要加上5和7的公倍数35,那就是68,刚好除以3余2,就可以满足要求了。只不过再要考虑是最小的三位数,那就是68再加上3和35的公倍数,68+3X35=173。答案出来了,复杂吧,小学四年级啊。虽然我觉得有趣,但实在是有点折磨人。

再来看看我们古人是怎么算的:

三人同行七十稀,
五树梅花廿一枝,
七子团圆正半月,
除百零五便得知。
什么意思呢?前三句话说的是“能被5与7整除而被3除余1的数70,被3与7整除而被5除余1的数21,被3与5整除而被7除余1的数15。”

按此计算:

除以3余2,70×2=140
除以5余3,21×3=63
除以7余5,15×5=75
然后把三个数加起来,140+63+75=278,就满足“一个数除以3余2,除以5余3,除以7余5”了。

最后一句话“除百零五便得知”,是说105是3,5,7的最小公倍数,那么把结果可以减去105,也就是278-105=173,正是题目的答案。

古人牛吧!原来觉得鸡兔同笼 那个已经够强的了,这个韩信点兵丝毫不逊啊。既然是有故事的,小乐想必应该是有兴趣的,下次找个时间给小乐讲讲这个故事和诗。

欢迎订阅讲述我和小乐成长中故事的微信账号: fuyunv。

《如何说孩子才会听,怎么听孩子才肯说》的读书笔记



## 开篇

终于,这段日子把《如何说孩子才会听,怎么听孩子才肯说》看完了。这是即《好妈妈》后,第二本让我找到自己影子的书。

那天,送乐乐上英语课,我坐着看,一位同学妈妈过来问我看什么,好看吗?

我说:“好看,因为你会发现上面有自己的影子!”

她好奇,拿过去随意翻了一页,“真的呀,好像我是这样的。。。咦,这个也是。。。”

书带给人的震撼,就是说到你的心里去,让你发现写的就是你。

这本书真的要慢慢读,这也是我为什么分这么多天,这么多次读完的原因。关于教育的书,我觉得都要慢慢读,边读边想。每次的共鸣,是需要时间来消化的。改变也不是一朝一夕事,一点点放慢速度,只要有一颗决定改变的心,哪怕每次只有点滴的进步,对自己对家人来说都是丰收的喜悦。这是我的真实感受,想自己把零乱的思绪做个归整,理清一条路,让这本书的知识点再一次以另一种方式,融入我的身体里。

## 孩子是独立的个体

要做好一个好大人,首先,要把那个小生命看成是一个独立的个体,一个不同于任何人的人。你只是给了她生命的人,并不是她的主宰。这点在我们国家做的真的还是不够的,现在,这个思想才越来越在大人们心里一点点生根发芽。

最初,是从LG这里听到“独立的个体”这四个字。那时, 乐乐好像刚上幼儿园,我那时的观点,还是很顽固的,认为孩子不打不成器,孩子懂什么呀!

乐乐从小就是很乖巧的孩子,当然可能就是我一直没有把她当成一个真正的独立的人的缘故,一直按我的想法去强制要求乐乐。记得以前一个幼儿园老师就曾说过:“像乐乐这样的孩子,带100个都不会累!” 当时听到这句话的时候,心中真是沾沾自喜,可现在,不了,我反而在反思,我是不是在制造一个产品?

把孩子当成独立的个体,其实就是尊重孩子。以前,我很少去想孩子的感受。当孩子告诉我她的感受,表示她不想按我说的做时,我往往是以粗重的口吻镇压了事。

举一个书上的例子:

妈妈,这儿好热
这儿冷,穿上毛衣
不,我热。
我说过了“穿上毛衣”
不,我热。

这是最经典的对话了,当家长的都会碰到。最常见粗暴处理的后果就是两种,一种是迫于压力,孩子穿上毛衣。大人根本没有把孩子的感受当一回事,孩子心里怨恨大人。另一种,就是引发一起争执,弄的双方都很生气,家变成了战场。

这种情况下,尊重孩子。首先要站在孩子的角度,孩子的精力旺盛,好动,感觉不到冷也是正常的。如果真的担心不穿衣服会生病,可以先理解孩子,说出你热时的感受,让孩子感受到她和你是在一个战场上的。

## 做错事怎么办

如果孩子真的做了错事,那家长就要注意避免以下几点:

1. 责备和问罪2. 谩骂3. 威胁4. 命令5. 说教6. 警告7. 控诉8. 比较9. 讽刺挖苦10. 预言

说实在的,我觉得上面哪点都不容易做到。

有几次,因为乐乐做错了事,我会让她坐下来听我说教,她只是怔怔地看着你,好几次都会说:“好了,不要说了,我知道了。”

而当时自己还有满腹的话没说完,觉得很不爽,就会拿出家长的架子,埋怨她不懂事。

我有时就试着让自己想像,想像这件错事是自己的朋友犯的。然后,我会不会用到上面的那些?我想肯定会要婉转的多,所以把孩子也当成自己的朋友是我们最终的目的,也是我们奋斗的目标。

当看到孩子已经犯错时,可以述说自己看到的现状, 如“我看到。。。”

当预见到孩子的所为会带来不好的后果时,可以告诉孩子,“如果不。。。会。。。”

这样就告诉孩子了一些常识,善意的提醒可以拉近亲子关系。

## 找到代替责备的方法

昨天,小乐看我这几天一直在看这本书,就也拿起看了起来,放下书后说:“孩子做错事时,大人不应该骂的。”

是的,其实孩子犯错时,已经很怕了,如果再责备,就会引孩子走上一条说谎的道路。每个人都会想办法保护自己,孩子发现错误没有办法处理时,就会选择把它埋起来。所以退一万步想,也不能让自己的随性毁了孩子。

我现在喜欢写字条给乐乐,中国人都比较含蓄,有时想的和说的不一样,所以不如写下来。说过的话,有时会淡忘,但字条就不一样了,每看一遍都会给自己一次动力。想像一下自己以前收到情书,是不是看一次,心动一次?!

今天也给乐乐写了一张,刚才进她房间,她的笑容都是那么迷人,我看懂她的笑里有感激、自信。

找出最适合自己的代替责备的方法,可以让犯错也变得浪漫。

## 孩子的错都是大人的错

孩子是在不断的犯错中成长的,有时同一个错误不止犯一次,这么确实会点起大人的火。

我现在把大人发火,也当成是大人在犯错,大人都控制不住自己, 那么孩子又有什么理由不再犯错呢?怎么让孩子在犯错中成长,不是靠打骂来解决的,但大人也是人,可以发泄自己的情感,前提是不能攻击孩子的人格。

发泄完后,一起帮孩子来解决问题。告诉孩子如何处理烂摊,怎么让错误最小化,这样的犯错才是有意义的,孩子学会了解决方法。

如果光靠打骂,只会让孩子畏首畏尾,对家长失去信任,很多孩子就会为了躲避挨骂而改成说谎。

记得乐乐中班开始会说谎,我当时很想不通,自己家教很严,怎么孩子还会说谎呢?现在我知道答案了,是我逼她说谎的。再一次验证了“孩子的错,都是大人的错”。

不要问别人:我的孩子怎么会这样?问自己,如果从自己身上找不出原因的话,说明自己还不是一位合格的好大人。所以不管孩子犯了什么错,先别急着埋怨,先从自己身上找源头!

## 赞赏孩子

是人都需要大家的肯定和赞赏,孩子更甚。

乐乐平时在做作业的桌上放满笔呀,尺呀,橡皮呀,彩色笔等等。上周五,我找了个机会和她谈了谈。后来连着两天发现,桌上收拾的不错,但到第三天时,就不像前两天整洁了。如果在以前,我肯定会说:“乐乐,和你说过了呀,桌上要收拾干净,你怎么又忘了?!”

但看过这本书后,我没有这么做,就是前面我说的写的那张字条,张纸内容是:“我发现一连几天你的桌上都是干净的,没有玩的玩具。而且你的速度也保持在‘敏捷’、‘高效’上,不会找妈妈抱抱,反而我老想进来亲亲你的小脸,嘿嘿!口算的进度也在你的掌控中,这种自律让我觉得我是位幸运的妈妈!谢谢你宝贝!”

这是6月9日写给乐乐的,她一直没有什么反馈,今天是14日,小乐和我说:“妈妈,我每天都会拿它看一下。” 我很开心,明白了想让孩子改变,可以用赞赏来做到。

## 赞赏的技巧

赞赏也是分种类的,通常情况下,家长都会赞赏孩子,但很多赞赏是这样的“孩子你这个做的很好,如果再。。。就更好了!”

这也是我以前的赞赏模式,有几次,乐乐听完我的“赞赏”后说:“妈妈,你后面的不说就好了” 当时,我还想不明白,为什么这么说不对呀,我明明是赞赏了呀?!

现在我知道为什么了:当你发自内心的、单纯的赞赏孩子时,即便是孩子有的地方做的不完善,孩子也会因为你的赞赏,积极的去完善自己那些还做的不够的行为。

所以很多时候,只需要大人由衷地赞赏孩子,记住千万不要在后面加“但是” “如果”“就更好了”这些话,肯定会给家长带来惊喜的。

邻居家有个小女孩子,比乐乐小一岁,也是琴童。练琴练的很勤奋,进步也很快,从一开始的小汤,到现在都能弹大乐曲了。每次碰到她,我都夸她,但每次她妈妈都谦虚的说“好什么呀,哪有姐姐好,我都说她弹的是噪音。”

我能理解这位妈妈,因为我也这样过。但是大人的无心交谈,对孩子影响是很大的。一次,分开后,乐乐说:“她妈妈是不是谦虚才这么说的?” 我说是的,因为大人常这样做。

想来,这样是害自己孩子,但我现在还是不知道,当听到别人赞扬时,该有什么样的表情,什么样的语言?孩子是需要大人鼓励的,不管是有心还是无心,都要给孩子好的暗示,让孩子有信心。

我有时听人家赞美时,嘴上也“谦虚”的很,但事后,会和乐乐说:“妈妈是故意这样的,因为不好意思,怕人家以为我骄傲!” 好在乐乐懂我,呵呵。

第一次写看书笔记,还分了那么多天才完成,加油!

使用optparse改写post



之前写过”编写markdown文档直接发布到wordpress上“,当时还是自己解析ARGV,看了optparse后,把代码改一改。

# Define the options, and what they do
opts.on( ‘-s’, ‘–title [BlogTitle]’, ‘Blog title’ ) do|title|
options[:title] = title
end

options[:tags] = nil
opts.on( ‘-t’, ‘–tags tag1,tag2,tag3’, Array, ‘Tags blog’ ) do|tags|
options[:tags] = tags
end

options[:categories] = nil
opts.on( ‘-c’, ‘–categories cat1,cat2,cat3’, Array, ‘Blog categories’ ) do|categories|
options[:categories] = categories
end

第一个参数可选,后面的可以指定列表,挺好。修改后的代码

ruby OptionParser



原先在看的Programming Ruby版本有点低,其中的代码有些在1.9中也不适合,比如说Net::HTTP.get,找了本Programming Ruby 1.9的,目录结构也有所不同了,所以补看部分。不过最近事情多,效率变低,每天都只是看一会,也缺少总结了。

今天记录一下看”Organizing Your Source”中的一个例子用的optparse,optparse是Ruby的一个库,不是gem。OptionParser类用于对命令行选项进行解析,有一些特色:

参数规范说明和处理代码写在一起,便于关联。 可以自动生成选项的汇总,不需要独立维护选项信息。
可选和必选参数指定很简单优雅。 输入参数能自动转换成所需类。
输入参数能限制数据集。

有个简单例子:

require ‘optparse’
options = {}
optparse = OptionParser.new do |opts|
opts.banner = “Usage: example.rb [options]”

opts.on(“-v”, “–[no-]verbose”, “Run verbosely”) do |v|
options[:verbose] = v
end
end
optparse.parse!
p options
p ARGV
`

OptionParser.parse! 用于从ARGV中抽取选项,被抽取的选项会从ARGV中删除。

在上例中,options是一个空的hash,当命令行中遇到-v或–verbose,则会设置options[:verbose]为true。

optparse是一个OptionParser对象实例,传递了一个块,这个块构造了内部的数据结构,然后调用parse!。

有两篇不错的文章:
OptionParser–Parsing Command-line Options the Ruby Way
* How do I make a command-line tool in Ruby?

关于选项是可选还是必选,只需要看在选项后面的内容是否加上[]即可,比如下面的-r必选,-i可选。

# Mandatory argument.
          opts.on("-r", "--require LIBRARY",
                  "Require the LIBRARY before executing your script") do |lib|
            options.library


对于必选的选项,如果在输入的命令行未指定选项参数值,则会报错:

optparsetest.rb:44:in‘: missing argument: -r (OptionParser::MissingArgument)

代码中可以捕获OptionParser::MissingArgument。stack overflow有个问题How do you specify a required switch (not argument) with Ruby OptionParser?专门描述了对于强制选项的处理方法。

Ruby Tk



《Programming Ruby》 有两章提到Web和Tk,这都是很大的篇章,还是需要专题去看。以前也曾用tcl/tk写过一个界面,用来解释当时写的计费汇总科目的配置,不过这都已经随着代码的退休也已忘却。

所以在看Ruby Tk章节时回忆一下。

先是需要一个容器widget(比如TkFrame或TkRoot),然后在容器中创建widget,比如说按钮或文本,准备好后调用Tk.mainloop启动界面,Tk引擎就会控制程序,显示widget并调用响应GUI事件的代码。

看一段简单的代码:

require ‘tk’
root = TkRoot.new { title “Ex1” }
TkLabel.new(root) {
text ‘Hello, World!’
pack { padx 15 ; pady 15; side ‘left’ }
}
Tk.mainloop

我们可以通过回调和绑定变量从widget传回信息。

回调callback:command选项有Proc对象,回调时触发。 采用TkVariable proxy模式,绑定Ruby变量到Tk widget的值。在TKVariable.new中采用TkVariable引用作为参数,这样你就可以直接用TkVariable的值get/set方法影响widget的内容。
每个widget都有configure方法,使用Hash或代码块,和new的方式一致。 可以使用cget返回特定的选项值。

GUI中很重要的一点就是界面元素的排布,Geometry管理器提供了三种命令:

pack:灵活的,基于约束的排布 place:绝对位置排布
* grid:表格(行列)方式排布

绑定事件:b.bind(“Enter”) { b.configure(‘image’=>image2) }

至于一堆的widget和事件,需要用的时候理理。