什么是草书?就是每写一个字心里都会草一下。 实验课上,我用学霸无法理解的速度在实验报告纸上建造草坪,胖子问:大师兄,很痛苦吧。 我不假思索说不痛苦,他不假思索问为什么。 有个笑话说:某冬日。上课了,伊万老师背靠教室壁炉站着,对学生们说:“说话前要多考虑,至少要数到50下才说,重要的话要数到100下。”学生们争先恐后地数起来,最后不约而同地爆发出:“99、100,老师的衣服着火了!”。 所以我没答上来。 半个小时抄的三张实验报告,是我为这门实验课做的所有的事。这样的课有很多。 回到办公室,开始和正方教务系统杠上。这是蚂蚁和大象的战斗! 这本来不难的,但是蚂蚁太多,大象就疯了。 首先,要爬上大象脚,然后,得爬上大象腿,接着,要费尽全力爬到大象头顶。这时就看见大象鼻子了,然后你应该顺着大象鼻子坐滑梯滑下来,一个头朝下的自由落体。还活着?那就选上了。 刘慈欣在《球状闪电》里很准确地描述了痛苦: 张彬教授目击球状闪电后投身球状闪电研究,却三十多年在雷雨中苦苦搜寻再也未谋一面。 “我能忍受一辈子耗尽心血毫无建树,我能忍受抛弃生活中的一切,孤独地终了一生,我甚至可以在需要时献出生命,但我不能忍受一生中再也见不到它!正是对它的第一次目击决定了我的一生,我们真的不能忍受再也见不到它!这点别人可能很难理解,但你能想象,水手能忍受一生见不到大海吗?登山者能忍受一生见不到雪山吗?飞行员能忍受一生见不到蓝天吗?” 选课人能忍受从头到尾见不到可选课程列表吗? 高中时,我们感到痛苦,初中真好!课业轻松下河上树。 大学时,我们感到痛苦,高中真好!同学情深奋斗情怀。 来到城区,我们感到痛苦,黄岭真好!环境清静宜生宜学。 那么,等我们出入社会,是不是继续加上一条:大学真好! 黄岭有那么好? 大城市里的大学生,在汲取,在飞速成长,在创业,在革新陈旧的思想,我们在做什么? 初中好,高中好,黄岭好,大学好,为什么还感到痛苦? 因为痛苦就像水,如果不用容器装着,给它一个边界,它就会无限蔓延。 一碗水和摊开来的一碗水不是一样多吗? 摊开的痛苦,虽然面积大,但是厚度薄。痛苦的感觉不是就应该减弱了? 不是! 当痛苦成了路上一条河,我们轧舟过河,是挑战,是享受,是风景,是心安理得。 当一条河的痛苦铺开成了一地泥泞,就成了打滑,打击,是无助! 痛苦是相对的,对于蔓延一地的痛苦,前后左右都是泥泞,看不到希望。 而对于收敛在一定边界的痛苦,哪怕痛苦直接的间隔很短,也有期望在里面。 别小看期望的力量。 我们的初中小学高中,快乐是不是集中在放学周末课间十分钟? 过去的事,往往只能记住快乐,忘记痛苦的感觉。 这不是犯贱,是大脑的自我保护。 怎么主动保护自己? 《迟到的间隔年》鼓励大家毕业之后给自己放次长假,做一次长期的旅行。 对大多数人来说,经济,观念,家庭,社会压力,都不容许间隔年的奢侈。 但是我们可以拥有间隔天,间隔时,甚至间隔分。 放天假,不写代码,去野炊,去骑行。 休息两个小时,看书,看电影,写文章。 冥想(发呆)几分钟,整理思绪,放松身体。 熬夜完成工作?那真是要至死方休。
迟到的间隔天
这个苹果智商不高
什么是理想? 五六年前,初三,晚睡的概念,大于等于十点。 然而世界上有那么一群人,十二点后还活在互联网,他们拥有黑暗,叫黑客。拥有自己的电脑,可以通宵搞机,当然是搞别人的机。 而我睡在十点前,只能拥有理想。 黑夜给了我黑暗的眼睛,我也只能用它来看看小说。 从书中创造回忆比从生活中创造回忆容易多了。 五六年前,我记住了这样的段子:“拒绝服务攻击,简称DoS,全称Denial of Service,……是一种常见的……黑客攻击行为。这种攻击行为就好像乱丢烂苹果,把一堆烂苹果一样的数据包塞满网络,那么好苹果经过都被压成苹果渣,然后网络服务器就真的变成了垃圾筒……”,这是写黑客的小说。 怎么算真懂了一门学问?要能用大家都能看懂的方式表达出来。 智商是由内在的东西表达出来,写篇文章,写本书,做一个牛逼的东西,做一件牛逼的事,有人鼓掌,这就是你的智商了。 所以智商是作或者做出来的,不是靠做作出来的。 要是你写:我写的东西很牛逼,但是你们的智商看不懂。 就像你说:我拉的屎很臭,但是你们的嗅觉闻不到。 知道物极必反吗,其实真的很臭。臭到大家都走的远远的,就闻不到了。 但是小说里的苹果是我吃过最顺口的苹果了。因为它不是进了肚子,而是上了脑袋。 什么是现实? 一本书,哪怕是一本无聊的小说,要是一本好书,一定是你能把它应用到自己生活中来。 一个月前,我揣了个苹果,讲了堂技术讲座。 每个苹果都想做砸中牛顿的那一个。 一教室的牛顿,我砸哪个好呢? 这个苹果的责任由多重大呢?它要凭自己20元一个的身价创造出大于数万元的价值,大家才会认为它好吃。 后来大家都说,吃了一次不想再吃第二次了。 可见,这个苹果智商不高。 大家还想再读一次大学吗?
JSFuck
1[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[]
站直了刻根线
很久没敢写东西,害怕在来年回望才能发觉的愚蠢里陷得太深。 我希望有一天神游到将来,不再是用可怜的眼光看现在。
为《基于 MVC 的 Javascript Web 富应用开发》填坑
《基于 MVC 的 Javascript Web 富应用开发》一书出版于2012年五月,作者基于自己写的 spine.js 框架讲解了 MVC JS 框架从无到有的构建方法。然后讲解了一个基于 spine.js 的联系人管理应用,一年之后,spine.js 已经愈加复杂和成熟,坑的地方来了,新的spine.js对旧代码的兼容性几乎为零。 init() 不能实例化类了,proxied 和 proxyAll 没有了,说好的 this.App 也木有了。。。 我们当然可以在 https://github.com/maccman/spine.contacts/tree/js 找到当时的spine.js,但是如果不兼容最新的版本,学了还是无以致用。于是笔者蛋痛地一点一点修正了代码不兼容的地方。算是为作者和后来人填了个天坑。 contacts.js 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115// 联系人模型var Contact = Spine.Model.setup("Contact", ["first_name", "last_name", "email"]);Contact.extend(Spine.Model.Local);Contact.include({truefullName: function() {truetrueif (!this.first_name && !this.last_name) return;truetruereturn(this.last_name);true},});// 侧边栏控制器$(function($) {truewindow.Sidebar = Spine.Controller.create({truetrueelements: {truetruetrue".items": "items",truetrue},truetrueevents: {truetruetrue"click button": "create",truetrue},truetruetemplate: function(items) {truetruetruereturn($("#contactsTemplate").tmpl(items));truetrue},truetrueinit: function() {truetruetruethis.list = new Spine.List({truetruetruetrueel: this.items,truetruetruetruetemplate: this.template,truetruetrue});truetruetruethis.list.bind("change", this.proxy(function(item) {truetruetruetrueSpine.trigger('show:contact', item);truetruetrue}));truetruetrueSpine.bind("show:contact edit:contact", this.proxy(this.list.change));truetruetrueContact.bind("refresh change", this.proxy(this.render));truetrue},truetruerender: function() {truetruetruevar items = Contact.all();truetruetruethis.list.render(items);truetrue},truetruecreate: function() {truetruetruevar item = Contact.create();truetruetrueconsole.log(item);truetruetrueSpine.trigger("edit:cont
Chrome 诡异的 {searchterms} bug
选择了 Chrome Dev 版本,就得接受其三天两头的抽筋,最让人感到蛋痛的 bug,莫过于诡异的 {searchterms},在 omnibox 地址栏输入关键字搜索,都会转为搜索 {searchterms} 。 记忆中已经出现过多次了,有谁知道原因和解决办法吗?怀疑是自己乱改搜索引擎设置导致的。
叫兽《万万没想到》王大锤 经典语录
一 是不是热得跟狗一样就是热狗了汪汪汪, 剧组盒饭难吃的要死但是不吃一定会死, 今天也要努力演习因为一天五十块呵呵, 我是要成为亚洲影帝的男人我一定可以, 因为我就住在亚洲小区西五栋四三一号。 本集由韩国宇航局赞助播出。“我们要去远方看看,还有什么是我们的思密达”。 我的生涯一片无悔。我想起那天下午夕阳下的奔跑,那是我逝去的青春。 二 单身是因为他们不了解韭菜包子的真谛, 是不是能力太强的人都像我一样没工作, 妈妈说能泡一手好面的人才是人生赢家, 刘备摔儿子是因为刘禅长的特别像张飞, 没有谈恋爱的人才会无聊到暂停看字幕。 本集由蒙古国海军赞助播出。“我们的征途是星辰大海!”。 我是蓝翔技工拖拉机学院手扶拖拉机专业的。 不用多久,我就会升职加薪、当上总经理、出任CEO、迎娶白富美、走上人生巅峰,想想还有点小激动。 来,经理放轻松。这根鼻毛还挺调皮的。 三 天气这么热别忘了给女友放点气别爆了, 我不喜欢爱赖床的姑娘爱赖我的床除外, 有人污蔑我是个娘炮气得我脱下高跟鞋, 孔子解决不了的问题那么老子帮你解决, 看片不转就是找不到对象的最主要原因。 本集由亚洲保护胖子协会赞助播出。“胖子固有一死,或重于泰山,或重于其他山”。 姐妹们!这人是个智障!还心理变态!大家相亲千万不要找他!两块钱你买不了吃亏!两块钱你也买不了上当…… 五 本集由自来水公司赞助播出。“请开门,我们查一下水表,是真的。” 只有我觉得红孩儿不像他爸爸牛魔王吗, 师傅跟如来长谈之后坐姿变得好奇怪呢, 要开学了怎么办悟空快变成暑假作业吧, 女儿国国王表示唐僧可以走金箍棒留下, 高老庄的故事教育我们干活卖力的是猪。 唐僧:你好好想一想。红孩儿、黑熊精这些妖怪,都在绑架贫僧之后,在观音娘娘那里获得很好的工作。现在工作多难找呀! 六 本集由中国未成年卧底协会赞助播出。“老师,大锤他又早恋,作弊,逃课,打小报告了!” 日本电影让我对现实中女老师倍感失望, 老师你不要总是盯着老子的裙子看好嘛, 师生恋是不会被大众祝福的说你呢杨过, 黑社会有着四门基本功课讲究好汉饶命, 城管强势崛起黑社会成员纷纷选择跳槽。 王大锤:不!你以为黑社会很简单吗?(拿出刀对着人体结构图比划)你知道从什么角度砍人才能够致伤而不致残吗?这涉及到物理和人体结构问题。(放下刀,拿出滴管与滴甁比划)你知道下毒的时候用什么试剂?用多少剂量?才能够有效的报复对手而不致死吗?(放下滴管与滴甁)这涉及到化学问题。无论哪个行业,知识都极其重要。
科X与人文的十字路口
马上就要高考了,我的物理还没复习完,挺紧张的。这也算是人生路上挺大的一个十字路口了,但谁要站在某个方向上冲路口上的人大吼大叫:“这边这边”,生生扼杀掉其它两个方向,这定该是反人类的的罪名,好在路口上的早就做牛做马惯了,吼叫的也不觉得有什么不妥。 但既然是路口,好几个选择摆在哪里,每个选择背后的得失成败,报应称不上,因果总有些。于是选择的时候就要格外慎重,哪怕你早就在前路上丢失了自己,捂着耳朵蒙着眼睛都比轻信盲从更容易选对方向。但是别忙,这社会哪怕是高考的十字路口,有车的也多着啊,你个光有两条腿的敢率性直为,那不是找死吗。 这就和日日穿汇南北的遭遇一样,走路的就得傻站半天,我估计这也不该是交通部门“动态规划”出来的结果,我大理工上万人的过马路需求不是闹着玩的。 当初老乔说“科技与人文的十字路口”的时候,也不觉得磕碜,两个方向怎么能构成十字路口,人字路口差不多,换他要说T字路口那就对了。 甭管是*字路口,科技与人文的选择确实是越来越在IT从业者和预从业者中浮现了起来,既然大神们都兴这个提法,一个苦逼的程序猿好歹也该瞎凑合着想想。 但是科技和人文两个词的抽象的实在是高了些,一般人怕是解析不出什么玩意儿了,好在终于被我找到了一点老乔提炼出如此牛逼的选择关的蛛丝马迹,那就是有着硅谷创业之父之称的 Paul Graham 的文集《黑客与画家》。把科技和人文具体到黑客与画家上,我等凡夫俗子的榆木脑袋才终于能够跟着大师思考一番。 说来话长,一年前(12.5.29)写了篇《谁的大学?》,文章开头写道: “作为一个不成熟的大一学生,我现在的大部分想法都是不正确的,可能到明天早上,或者到大二,乃至过个几十载,我会突然领悟比这篇文章里更接近正确和真理的思想。” 人一辈子不存在错不过三的说法,自我修正的过程时刻都会让你感觉昨天的自己真是傻啦吧唧的。这样的思想确定下来,人潜意识里就容易埋下坐享其成的根——明天肯定更好。这就遭了,回忆起这一年,其中连生活环境都经历了极大的改变(黄岭到汇东),但是整个生活状态和模式居然偏离《谁的大学?》不多,该是最危险的信号了。 俗话也说了:“程序员都是好男人,从来没有像我们这类男人那样每天都会扪心自问:我到底错在哪里了,告诉我,我一定改。” 我一直将我对读书的乐趣归功于几岁时妈妈从小姨家拿回的几本书,我生命中的文艺复兴也就从那时开始,所以尽管实际上父母没给我买过一本课外书,却是阴差阳错地启蒙了年幼的我。当然存在日后我自己到小姨家完成启蒙的可能性,但是有鉴于周围人有阅读爱好的人少得可怜,这样的设定还是危险了些。 第二次文艺复兴开始于高一,小伙子们总喜欢用能想到的最偏僻的词句拼凑出心里的苦闷。尽管开始时的东西惨不忍睹,结果任然是不错的,至少你能看见现在这个博客。 在文艺和现实中游离多年后,一台计算机器摆在了面前。 两次文艺复兴积累下来的特质都指向这小子适合做一个文科生,但选择分科时去了理科我是毫不犹豫的。事实就是这样,文艺复兴展现的文艺范只是表层,骨肉里翻涌的理性思辨足够一个人对中国教育给文科生准备的洗脑大餐退避三舍。 所以别人眼里看见的我的数理化分数都是死磕出来的,我不爱它们,我相信它们也从来没爱过我。但也没有大的问题,因为事实上极大部分的人都是死磕的,这地方兴趣爱好的说法贫瘠到可怜。 在很长的一段时间内,黑客和画家都没闹什么不合到要分家的矛盾。直到某一天寻找在视频中做火焰识别的算法时,发现好的算法论文中数学原理你看不懂时,才会意识到遭了。 原来写程序不只是学习框架查手册调用函数,问题细分到一定程度找到现成可用的解决模型变得极其困难。也就是说数学这道坎就是哲学家所说的大圆和小圆的知识边界,想要让自己的圆变大,就得实实在在地和数学过上招。 也正由于数学这道坎对于每一个人限定的封闭性,才使事情变得幸运了些——我们有了前辈战斗经验可以引路解惑。 所以这些书(黑客与画家,数学之美等等)来得挺是时候,当然它是因为我对数学碰了壁,有了刚性需求,才被找到,而不是上帝在适当时间的恩赐。 《黑客与画家》的功德就在于,在适当的时间,出现在这些心中的黑客和画家因为意见不和开始要分道扬镳的时候,送上一剂502,让黑客与画家总于可以相互述说520. 画作永远没有完工的一天,你只是不再画下去而已,而历史上的无数艺术珍品也告诉我们,艺术背后充满完美的数学与理性。
《数学之美》 阅读笔记
文字和语言 vs 数字和信息不同的文字系统(包括数学)在记录信息上的能力是等价的。印度人发明了阿拉伯数字,不是阿拉伯人。如果把中文的笔画作为字母,它其实也是一种拼音文字,不过它是二维的而已。所以西方的拼音文字称为罗马式的语言。在东汉以前要将文字刻在其它物件比如龟壳、石碑和竹简上。所以要惜墨如金,这就使得古文异常简洁难懂,而同时期的口语却和今天的白话差别不大(岭南客家话)。如果说从字母到词的构词法是词的编码规则,那么语法则是语言的编码和解码规则。自然语言处理——从规则到统计计算机能处理自然语言,且处理方法和人类一样。图灵测试:让人和机器进行交互,如果人无法判断自己交流的对象是人还是机器时,就说明这个机器有智能了。学习西方语言,都要学习它们的语法规则,词性,和构词法等。自然语言的文法是上下文有关文法(Context Dependent Grammar),程序语言是上下文无关文法(Context Independent Grammar)。统计语言模型统计语言模型(Statistical Language Model):为自然语言这种上下文相关的特性建立的数学模型。二元模型:对于p(w1,w2,…,wn)=p(w1)p(w2|w1)p(w3|w1,w2)…p(wn|w1,w2,…,wn-1)的展开问题,因为p(w3|w1,w2)难计算,p(wn|w1,w2,…,wn-1)更难计算,马尔科夫给出了一个偷懒但是颇为有效的方法,也就是每当遇到这种情况时,就假设任意wi出现的概率只与它前面的wi-1有关,即p(s)=p(w1)p(w2|w1)p(w3|w2)…p(wi|wi-1)…p(wn|wn-1)。现在这个概率就变的简单了。对应的语言模型为二元模型(Bigram Model)。马尔可夫假设:随机过程中,有一类具有“无后效性质”,即当随机过程在某一时刻to所处的状态已知的条件下,过程在时刻t>to时所处的状态只和to时刻有关,而与to以前的状态无关,则这种随机过程称为马尔科夫过程。 即是:ito为确知,it(t>to)只与ito有关,这种性质为无后效性,又叫马尔科夫假设。N-1阶马尔可夫假设对应的语言模型称为N元模型(N-Gram Model)。Google的罗塞塔翻译系统和语言搜索系统,使用的是四元模型。模型的训练、零概率问题和平滑方法大数定律(Low of Large Numbers):只要统计量足够,相对频度就等于概率。古德-图灵估计(Good-Turing Estimage):Good-Turing平滑法可处理N元语法中数据矩阵的稀疏问题,主要思想将非零N元语法的概率匀给一些低概率语法,以修改最大似然估计与真实概率之间的偏离。Zipf定律(Zipf’s Law):如果把单词出现的频率按由大到小的顺序排列,则每个单词出现的频率与它的名次的常数次幂存在简单的反比关系。(符合二八定律)。卡茨退避法(Katz backoff):对于频率超过一定阈值的词,它们的概率估计就是它们在语料库中的相对频度,对于频率小于这个阈值的词,它们的概率估计就小于他们的相对频度,出现次数越少,频率下调越多。对于未看见的词,也给予一个比较小的概率(即下调得到的频率总和),这样所有词的概率估计都平滑了。 隐含马尔可夫模型雅格布森通信的六要素:发送者(信息源),信道,接收者,信息,上下文和编码。符合马尔科夫假设(各个状态st的概率分布只与它前一个状态st-1有关)的随机过程成为马尔可夫过程,也称为马尔可夫链。隐含马尔科夫模型是马尔科夫链的扩展,任意时刻t的状态st是不可见的,所以观察者没法通过观察到一个状态序列s1,s2,s3,…,sT来推测转移概率等参数。但是隐马尔科夫模型在每个时刻t会输出一个符号ot,而且ot和st相关且仅和ot相关。这个被称为独立输出假设。其中隐含的状态s1,s2,s3,…是一个典型的马尔科夫链。延伸阅读:隐含马尔可夫模型的训练隐含马尔科夫模型的三个基本问题:1. 给定一个模型,如何计算某个特定的输出序列的概率。(Forward-Backward算法)2. 给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列。(维特比算法)3. 给定足够量的观测数据,如何估计隐含马尔可夫模型的参数。转移概率:从前一个状态St-1进入当前状态St的概率P(St|St-1)。生成概率:每个状态St产生相应输出符号Ot的概率P(Ot|St)。转移概率和生成概率被称为隐含马尔可夫模型的参数,而计算或者估计这些参数的过程称为模型的训练。有监督的训练方法:人工标注数据。无监督的训练方法:鲍姆-韦尔奇算法(Baum-Welch Algorithm):首先找到一组能够产生输出序列O的模型参数,这个初始模型成为Mtheta0,需要在此基础上找
Item 49: Understand the behavior of the new-handler.
This article is one of <Effective C++> reading notes. Part 8: Customizing new and delete Item 49: Understand the behavior of the new-handler. Things To Remember set_new_handler allows you to specify a function to be called when memory allocation requests cannot be satisfied. Nothrow new is of limited utility, because it applies only to memory allocation; subsequent constructor calls may still throw exceptions. Key Words curiously recurring template pattern (CRTP) 怪异的循环模版模式: The curiously recurring template pattern (CRTP) is a C++ idiom in which a class X derives from a class template instantiation using X itself as template argument. c++ Template CRTP 关于c++ template多态——CRTP 模式 Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970#include <iostream>#include <new>#include <stdlib.h>class NewHandlerHolder{public:trueexplicit NewHandlerHolder(std::new_handler nh) : handler(nh) { };true~NewHandlerHolder() { std::set_new_handler(handler); } // release itprivate:truestd::new_handler handler; // remember ittrueNewHandlerHolder(const NewHandlerHolder&); // prevent copyingtrueNewHandlerHolder& operator=(const NewHandlerHolder&);};// The NewHandlerSupport template never uses its type parameter T.// All we need is a different copy of NewHandlerSupport - in particular,// it's static data member currentHandler - for each class that// inhreits from NewHandlerSupport.template<typename T>class NewHandlerSupport{public:truestatic std::new_handler set_new_handler(std::new_handler p) throw();truestatic void* operator new(std::size_t size) throw(std::bad_alloc);private:truestatic std::new_handler currentHandler;};template<typename T>std:: new_handler NewHandlerSupport<T>::set_new_handler(std::new_handler p) throw(){truestd::new_handler oldHandler = currentHandler;truecurrentHandler = p;truereturn oldHandler;}template<typename T>void* NewHandlerSupport&