月度归档:2015年08月

98b260c5d2c52566360a92f2deeaa16a_b.jpg

人人都有的一点怀旧情节(大雄与静香)

1991年的时候我7岁,上小学一年级,有一天下学的时候老妈来学校里接我,那天,以往一向严厉的班主任对我做了表扬,老妈很高兴,牵着她的手路过校门口一个书摊的时候,老妈说:挑本喜欢的课外书吧。
我指着机器猫说:我要这个。
我已经心心念念许多天了,因为我的同桌他们一直传着看,我翻看过两个故事,但是看的不太全。
我挺感谢老妈的,如果是以往她肯定会说不要看这种没有营养的东西,然后换一本全是字的《格林童话》。
但是那天,也许是班主任的表扬让她心生得意,总之,那次她给我买了。

那是我买的第一本机器猫的书,32开本的漫画册子,封面是个张着大嘴拿着竹蜻蜓的笑脸,有一个在当时看来很奇怪的售价:6.99元,拿着书的我一直在想,为什么不卖到7块钱呢?
在后来才有了金龟子配音的央视的机器猫动画片,以及64开本的机器猫口袋书,名字也变幻莫测,从康夫到野比再到大雄,反正我跟一代80后一起,一发不可收拾的爱上了这只害怕老鼠而喜欢铜锣烧的猫。

那时候的我和大雄一样懦弱,被班上很强壮的男生欺负,各科成绩都不好,叫家长是家常便饭。由于身体不好,体育更是一塌糊涂,很多人的嘲笑让我恐惧上学。
而班上那些带着三道杠的小姑娘,冰雪聪明,唇红齿白,眼睛很大很漂亮,穿着花纹的裙子,文具盒都是米奇的,打开会变成三层。所有的文具都有淡淡的香气,她常站在教室的最前边,领读语文,收数学作业,用彩色铅笔画太阳。在我感到无助的时候,她常过来,帮邋遢的我把红领巾带好,送我很多好吃的小零食。
再到后来,学校开始按照名次排座位,我的个子很小,但只能坐在后边。那段时光,我时常想,是不是天底下最笨得人就是我。

后来,小学毕业,到了新的学校,我们有了新的姑娘,新的梦想。我们就这样,被时间推着,不知不觉中长大。

我其实看不懂日本的漫画,买过《七龙珠》,《阿拉蕾》我都看不懂。唯独机器猫。就算是书从右边往左边翻,就算字也是从右边往左边看,我也能坐在那里,一看一下午。翻许多遍也不会腻。那时候对机器猫更多的羡慕,是那些记忆面包,任意门,竹蜻蜓以及每个男生心里关于静香的梦。

20多年之后,当阿蒙变为机器猫,小叮当,再到全球统一称呼的哆啦A梦,日本文化的大使。如今在藤子F不二雄80周年的时候。我突然得知,当这部制作精良的电影搬上了银幕。
我对电影关注的兴趣点不多,却在那天晚上在豆瓣上看了预告片。
坐在旁边用IPAD看电影的女朋友突然说:我陪你去看吧,难得有你感兴趣的电影。

我感兴趣的不是3D。也不是制作精良。
我有兴趣的,是现代科技如何来诠释我们儿时的伙伴。让那么多人被感动。

进电影院前。女友开玩笑说;我带了纸巾。你要哭就随意。
情节真的太简单,一个半小时,就是把几个记忆里的道具和几个重要的故事展示出来了,甚至因为照顾后边的哆啦A梦离开和回来的情节,前边救静香的节奏过快,中间部分完全靠竹蜻蜓炫3D。

可是我还是觉得这是一部好电影。

在大多数的现实生活里,静香这样的女孩子难道不该嫁给学习优秀有很多责任感的出木杉?为什么不是嫁给很有钱的小思聪阿福?哪怕是嫁给胖虎这样可爱的死胖子也肯定比大雄强啊。大雄肯定买不起保时捷卡宴,大雄肯定也买不起市中心三室两厅的房子,就算买了也是要还一辈子房贷的不是么?静香这种姑娘还房贷会老去,想想就觉得心痛。以静香爸爸说出来来一大堆鸡汤的水平,培养出如此有家教的姑娘,怎么会舍得把自己这么好的姑娘扔给大雄这样的屌丝呢?

还好,孩子的世界里不需要这么多为什么,只要王子和公主在一起就好了。

我们感动,落泪,因为现实生活中,每个人都是大雄,都遇见过生命里的静香,然而我们并没有那么多的好运气。只有电影里,所有的人都是善良的,甚至那个曾经天天掐着你脖子欺负你的胖虎都能捧着酒杯祝你幸福。静香肯定是大雄的,出木杉,胖虎,阿福都不可以,再优秀的人都不能跟静香在一起,只有流着鼻涕的大雄能娶温柔贤惠的静香为妻,因为他们是我们心里童年的美丽的玻璃杯。

这就是范晓萱《小叮当》歌词里唱的。
让小孩大人坏人,都变成好人。
昂昂昂,
小叮当帮我实现,所有的愿望。

我们总觉得情节不对,大雄不该就这样娶了静香,可是说真的,虽然他懦弱,胆小,邋遢,有很多很多的缺点,但静香爸爸说的确实没错,
大雄是个善良的孩子,他会为别人的幸福而高兴,为别人的不幸而难过,这是为人最重要的品质。
这是包括我在内的中国当代青年缺乏的品质。

80后的一代是孤独,这种孤独是从骨子里透出来的,独生子本来就是一个很残酷的词。我们是国情发展特有的一代产品。
没有兄弟姐妹,不懂分享,自私,
父母小时候教导我们,遇见任何事情首先想到保护自己。因为我们每个人都是整个家庭的中心。
我们孤独,渴望友情,却不信任友情,考验友情。
我们与伙伴之间,随时有关于成绩的竞争,工作机会的竞争。到了工作后房子车子票子的竞争。
中国的父母也极度矛盾,面临一个14亿人的激烈竞争市场。以及一个孤独的心灵,父母常常也会无所适从。

我们羡慕过可以去挽回很多事情的时光机。
羡慕过他身边永远善良美丽的静香仅仅“这么多年你还是照顾不好自己”而答应大雄。
羡慕过大雄就算考了零分,也可以头戴竹蜻蜓在空中自由自在的去想去的地方。

但其实所有成年人心里,最羡慕的,其实都是大雄旁边站着的这个蓝胖子。

他能站在你面前从口袋里拿出所有你最需要的东西,他能在你最失意的时候跳出来说加油啊。他更能在你得意的时候陪你躺在屋顶看星星。
所有成年人想要的,并非随意门和竹蜻蜓,而是蓝胖子这样的哥们儿。
他不是一个动画人物,他一直很真实的活在我们身边。
全电影最让我感动的,不是雪山救静香,也不是哆啦A梦哭着碎碎念,而是大雄,被胖虎欺骗后,以为哆啦A梦回来了,只是用了隐身斗篷,于是他很兴奋得拿出储蓄罐里的零用钱去买铜锣烧。
这是这个年龄的孩子最大的真诚,简单到几个铜板就可以有这样一个坐在水泥管上陪你看夕阳的朋友,这个设定很简单,这个年龄的他拿不出更多,哆啦A梦也不需要更多。

所有的成年观众都明白,我们不能像孩子一样沉浸在动画里,我们知道,所有的科技的道具都是假的。包括哆啦A梦自己。
成年人很巧妙的规避着这类的话题,不知不觉。我们就不再提及那些曾经年少得梦想。
可我们都没有料到,编剧同学自己来揭开伤疤了,她让成年的大雄自己把这个谜底揭开。
“哆啦A梦是我,也是你小时时候最好的朋友,他陪你的时间不多,你要好好珍惜和他在一起的时光。”
这句话才是为什么:80后带孩子去看,孩子笑了,大人哭了。

哆啦A梦的离开,其实是每个人都经历过心中依赖的另一个梦的离开,那个人,也许是你的亲人,你的朋友,你的她,总之,我们每个人都曾遇见那个让你觉得放肆去依靠的人,你在他的面前,可以笨,可以傻,可以照顾不好自己,可以肆意的哭,可以得意的笑。

我们曾觉得,这样的日子,真的很好。真的很长。我们却没有想过,那个曾一直依赖的人,可能会离开你,亲人,朋友,爱人。我们试图让自己一天天变的优秀了起来,似乎优秀就可以保护自己和自己身边重要的人,却发现,成人世界最大的无奈,就是无论我们多么强大,这世间终有很多事情,我们都没有力气去改变。

这才是我们缺乏的安全感。

我们并没有谎言800,大多数的时候,面对那些离开的人,我们只能选择把话藏在心里,说着言不由衷的话,故作洒脱的离开。职场,生活,所有的压力让我们不得不砸毁着自己心里的那个哆啦A梦,变得“成熟”与“世故”.

只有在动画片中,逻辑变得这么简单。

不管如何,我感谢你曾在我脆弱的时候向我伸出援手,我感谢自己可以毫无防备的把整个星空拿出来与你分享,我感谢你张着那张大嘴给我激励,感谢你在我遇见多大的挫折都义愤填膺的帮助我,感谢你教会我在空中自由飞翔。

哆啦A梦的离开那一刻,我突然想起葛优在《非诚勿扰》里跟朋友说:不缺钱,缺朋友。

不管你依然在我生命里,还是曾出现在我生命里。请相信,我会像你祝福的那样,变得更棒。

这部电影,情节牵强,节奏凌乱。他就是一个给孩子看的动画,但是,那又怎么样呢?我又看到了心底的那个蓝胖子,那个一直对你微笑着的大眼睛静香,那群儿时的伙伴,以及那个懦弱但是努力着发光的自己。

还好,就算现实中,我们还是为期末考发愁,为绩效发愁,为房贷发愁,为婆媳关系发愁,为女神发了好人卡发愁,为创业没资金而发愁。至少在电影的一个半小时里,让我可以放肆的回到童年,跟我那群小伙伴,戴着竹蜻蜓,去救心里的女神。

虽然我知道,那些童年,再也回不来。

1

技术再好也无用,懂得变革事方成

现在假设有一个团队,领头是一个老头,这老头最初每天一个人在丛林里转悠捡果子和撞到树桩上的死兔子吃,熟悉丛林的每一条路。后来他遇上两个善用长矛的年轻人,年轻人对丛林不熟悉,不知道哪里可以扎到兔子,老人正好对丛林太熟悉了,于是三个决定合伙,老人带着年轻人,年轻人带着长矛,天天去兔子窝边扎兔子吃。两个年轻人扎兔子,一个很强一个很菜, 这个三人团队很倚重那个扎兔子厉害的年轻人,自然那个年轻人在团队中地位也很高。
你是玩猎枪长大的,初到丛林的时候你也不熟悉这个丛林,全靠自己去摸索的话可能还没找到兔子窝就饿死了。于是你加入了他们。现在你们四个人一起打猎。你枪法不错,很快大家发现除了扎兔子吃以外,他们还可以吃到你打的野鸭、山羊,甚至有时候没扎准的兔子逃跑的时候也被你一枪给毙了。慢慢地团队越来越倚重你,那个扎兔子很强的年轻人在团队中的地位慢慢被你代替,虽然他不开心,但是你很开心啊。
过一阵子又来一个人,那个人也是玩猎枪长大的,但是枪法远不如你,你很放心,觉得你在团队中的地位无可替代。可是没想到的是新来这哥们枪法不好的主要原因是学枪那些年他不务正业,业余时间都去研究如何挖陷阱了。有一天他高兴地带着你们去他不知哪天没事偷偷挖的陷阱那儿去,里面有一只倒了血霉的野猪拼命想跳出坑来。你以前也试过打野猪,可这家伙往往一枪打不死,负伤跑掉的倒还好说,有次有只负伤后发怒地向你们打猎团队冲过来,差点把你们团灭了。现在你开枪,另外两位兄弟扎长矛,几下就把坑里的野猪弄死做成了一周的口粮。
枪法不如你的新人不断提高自己的挖坑能力,终于有一天你发现团队靠他挖的陷阱困住傻狍子就够开锅了。你和另外两个长矛哥的主要工作就是对陷阱里的动物执行死刑。还好新来这人还不会往天空中撒网,大家想吃个鸟啥的还是得靠你开枪。
1
这个过程其实就是很多团队在发展过程中常常出现的故事,随着目标市场的变化,掌握了对获取目标市场最有效的技能的新人替代了以前地位比他高的老人。

这个过程还没完。
有一天你们发现原来丛林中不止你们一个团队,有好多团队都在打猎,有些不讲道义的团队直接到你们团队挖的坑旁边抢你们的猎物,你们团队老头成天忧心忡忡,再这么被抢下去你们就快没有足够的东西吃了。
过了几天老头又带回一个年轻人,这年轻人不会长矛不会玩枪更不会挖陷阱,细皮嫩肉地一看就没力气打猎,每天就等着你们打完猎烤完肉过来分一块来吃。你很生气,觉得老头养了一个闲人。
有一天当你们去陷阱旁把新捕到的狍子抓上来的时候,突然又来一伙抢猎物的。这帮家伙趁你们不备抢了狍子正要跑,突然新来那个细皮嫩肉的年轻人双手往上一举,空中一道闪电划过,抢你们猎物的家伙就被雷劈了。年轻人捡回被抢的猎物,向你们介绍说,他是一个法(律)师,唯一的能力就是在别人抢你们猎物的时候向上帝请求降雷劈他们。
你们的团队中第一次出现了不靠捕猎维生的人。

对落入陷阱的动物行刑当然不需要两个长矛手加一个枪手,你们慢慢地都成为挖坑哥的助手,有一天他让你们削了九根尖木桩,第二天你们看到落到陷阱的动物被地上的木桩扎了个对穿,你们明白也许你们的专业技能都再也派不上什么用场了。好在大家还得不时吃点鸟肉,你在团队中的作用看样子没人能替代得了。
有一天老头又带回一个年轻人,这年轻人不会任何打猎技能,也不会召唤雷电,但是他告诉老头,他可以把你们团队吃不完的野猪肉带走,过一会儿带着鸟肉回来。你当然不信,野猪肉怎么能变成鸟肉?直到你亲眼目睹了这一幕。你决定跟踪他看他到底耍的什么花招。
原来以前那些跟你一块儿学枪的人居然成立了一个单独的团队,他们只打飞鸟,用鸟肉换其它野物的肉。他们还给这个做法起了个名字,叫做SaaS(Shoot as a Service)。

你们的团队发展越来越大,丛林里的团队也开始各自分工,你们拿着挖坑捕来的野物可以换到越来越多种类的东西,那个让你们团队走上以肉换肉之路的新人,凭借他早年在丛林中四处流浪积攒的信息,成为你们团队中唯一一个可以用最少的剩肉换来最多其它东西的人。你发现大家还挺喜欢他的,你也不得不喜欢他,因为没有他,你们可吃不到鱼肉。

后来你们团队继续扩大,各种角色的人越来越多,虽然直接靠猎杀动物带来价值的人在团队中的比例越来越小了,但大家居然还都能为团队带来一些价值。
有一天那个专注于拿肉换肉的哥们把你们所有的剩肉都拿去换了盐回来,而第二天非常不幸,陷阱里没有猎物出现。
饿着肚子的老头很生气,以前人少的时候可不容易出现这种事,他发现原来自己已经没有能力去了解到团队中每一个细节了。是时候安排人来帮我收集信息了。老头挨个想了一遍,发现团队中有个家伙干啥活都不行,就是喜欢到处跟大家聊天,而且总能够找出对方喜欢的话题,跟谁都能聊上个把钟头,以至于团队里几十个人,谁额头上新长出个痘痘他都是第一个知道的人。老头觉得他干这事比较靠谱,就叫他把大家做的事情汇报给老头,让老头能够更好地协调团队中各种角色合作到一起。

结合多年经验你终于发现,原来一个团队里最重要的人是什么样的?是在当下环境里最能够给团队弄到最多肉的,而在不同的时候,弄到最多肉的方法都是不同的。
你回忆起当年在枪校时的经历,那时候所有的考核都围绕着一点,就是枪法好不好。在日复一日的考核中,你不知不觉地成为了一个认为全天下都应该以枪法来排列权力和等级的人。

终于,在丛林里多年的经历让你认识到,光打枪好有个鸟用。

asd

Js设计模式之接口

接口
什么是接口
接口是提供了一种用以说明一个对象应该具有哪些方法的手段。尽管它可以表明这些方法的语义,但它并不规定这些方法应该如何实现。例如,如果一个接口包含有一个名为setName的方法,那么你有理由认为这个方法的实现应该具有一个字符串参数,并且会把这个参数赋给一个name变量。有了这个工具,你就能按对象提供的特性对它们进行分组。例如,即使一批对象彼此存在着极大的差异,只要它们都实现了Comparable接口,那么在object.compare(anotherObject)方法中就可以互换使用这些对象。你还可以使用接口开发不同的类之间的共同性。如果把原本要求以一个特定的类为参数的函数改为要求以一个特定的接口为参数的函数,那么任何实现了该接口的对象都可以作为参数传递给。这样一来,彼此不相关的对象也可以被同等对待。
接口之利
在面向对象的javascript中,接口有些什么作用呢?既定的一批接口具有自我描述性,并能促进代码的重用。接口可以告诉程序员一个类实现了哪些方法,从而帮助其使用这个类。如果你熟悉一个特定的接口,那么就已经知道如何使用任何实现了它的类,从而更有可能重用现有的类。接口还有助于稳定不同类之前的通信方式。如果事先知道了接口,你就能减少在集成两个对象的过程中出现的问题。借助它,你可以事先就说明你希望一个类具有哪些特性和操作。一个程序可以针对所需要的类定义一个接口,并把它转交给另一个程序。第二个程序员可以随心所欲地编写自己的代码,只要他定义的类实现了那个接口就行。这在大型项目中尤其有用。在大型项目中尤其有用。
测试和调式因此也能变得更轻松。在javascript这种弱类型语言中,类型不匹配错误很难跟踪。使用接口可以让这种错误的查找变午更容易一点,因为此时如果一个对象不像所要求的类型,或者没有实现必要的方法,那么你会得到包含有用信息的明确的错误提示。这样一来,逻辑错误可以被限制在方法自身,而不是在对象构成之中。接口还能让代码变得更稳固,因为对接口的任何改变在所有实现它的类都必须体现出来。如果接口添加了一个操作,而某个实现它的类并没有相应的添加这个操作,那么你肯定会立即见到一个错误。
接口之弊
接口并没非没有缺点。javascript是一种具有极强表现图片的语言,这主要得益于其弱类型的特点。而接口的使用则一定程序上强化了类型的作用。这降低了语言的灵活性。
javascript并没有提供对接口的内置支持,而试图模仿其它语言内置的功能总会有一些风险。javascript没有interface这个关键词,因此不管你用什么方法实现接口,它总是与C++和java这些语言的方法大相径庭,这加大了初涉javascript时所遇的困难。
javascript中任何实现接口的方法都会性能造成一些影响,在某种程序上这得归咎于额外的方法调用的开销。我们的实现方法中使用了两个for循环来遍历所需要的每个接口中的每个方法。对于大型接口和需要实现许多不同接口的对象,这种检查可能要花点时间,从而对性能造成负面影响。在乎这个问题,那么 可以开必完成之后剔除这种代码,或者将其执行与一个调试标志关联起来,这样在运营环境中它就会执行。但要注意不要过早进行优化处理。firebug这类性能分析器可以帮助你判断是否真有必要剔除接口代码。
js中接口使用的最大问题在于,无法强迫其他程序员遵守你定义的接口。在其它语言中,接口的概念是内置的,如果某人定义了实现一个接口的类,那么编译器会确保该类的确实现了这个接口。而在javascript中则必须用手工的办法保证某个类实现了一个接口。编码规范和辅助类可以提供一些帮助,但无法彻底根除这个问题。如果项目的其他程序员不认真对待接口,那么这些接口的使用是无法得到强制性保证的。除非项目的所有人都同意使用接口并对其进行检查,否则接口的很多价值都无从体现。
其他面向对象语言处理接口的方式
这里先概览一下三种广泛使用的面向对象语言处理接口的方式。你会发现它们的办法大体相似
java:java.io包中的接口
public interface DataOutput{
void writeBoolean(boolean value) throwsIOException;
void writeByte(int value) throwsIOException;
void writeChar(int value) throws IOException;
…..
}

它列出一个类应该实现的一批方法,包括方法的参数和可能会抛出的异常。每一行都像是一个方法声明,只不过是以一个分号而不是一对大括号结尾。
实现该接口的类
public class DataOutputStream extends FilterOutputStream implemets DataOutput{
public final void writeBoolean(boolean value) throwsIOException{
write(value?1:0);
}
….
}
这个类声明并具体实现了接口中列出的每一个方法。漏掉任何一个方法都会导致在编译时显示错误。

PHP
interface MyInterface{
public functioninterfaceMethod($argumentOne, $argumentTow);
}

class MyClass implements MyInterface{
public function interfaceMethod($argumentOne,$argumentTow){
return $argumentOne*$argumentTwo;
}
}

class BadClass implements MyInterface{
//no method declarations.
}
运行进会报错..
C#跟java类似

在javascript中模仿接口
javascript中模仿接口的三种方法:注释法、属性检查法和鸭式辨型法。没有哪种技术是完美的,但三者结合使用基本上可以令人满意。
用注释描述接口
用注释模仿接口是最简单的方法,但效果却是最差的。这种方法模仿其他页面对象语言中的做法,使用了interface和implements关键字,但把它们放在注释中,以免引起语法错误。如下:
/*
interface Composite{
function add(child);
function remove(child);
function getChild(index);
}

interface FormItem{
function save();
}
*/
var CompositeForm= function(id,method,action){
//implements Composite,FormItem
}
CompositeForm.prototype.add=function(child){
…
}
CompositeForm.prototype.remove=function(child){
…
}
CompositeForm.prototype.getChild=function(indx){
…
}

//Implement theFormItem interface.
CompositeForm.prototype.save=function(){
…
}

这种模仿并不是很好。它没有为确保CompositeForm真正实现了正确的方法集而进行检查,也不会抛出错误以告知程序员程序中的问题。说到底它主要还是属于程序文档范畴。在这种做法中,对接口约定的遵守完全依靠自觉。
尽管如此,这种方法也有其优点。它易于实现,不需要额外的类或函数。它可以提高代码的可重用性,因为现丰那些类实现的的接口都有说明,程序员可以把它们与其他实现了同样接口的类互换使用。这种方法并不影响文件尺寸或执行速度,因为它所用的注释可以在对代码进行部署时,不费吹灰之图片地予以剔除。但是,由于不会提供错误消息,它对测试和调式没有什么帮助。

用属性检查模仿接口
这种方法更严谨一点。所有类都明确地声明自己实现了哪些接口,那些想与这些类打交道的对象可能针对这些声明进行检查。那些接口自身仍然只是注释,但现在你可以通过检查一个属性得知某个类自称实现了什么接口
/*
interface Composite{
function add(child);
function remove(child);
function getChild(index);
}

interface FormItem{
function save();
}
*/
var CompositeForm= function(id,method,action){
this.implementsInterfaces = [‘Composite’,’FormItem’];
…
}

..
function addForm(formInstance){
if(!implements(formInstance,’Composite’,’FormItem’))
throw new Error(“Object does notimplement a required interface.”)
}

//下面的implements方法,是用来检查声明对象是否实现了需要的接口
function implements(object){
for(var i=1;i
<argements.length;i++){
var interfaceName = arguments[i];
var interfaceFound =false;
for(varj=0;j
<object.implementsInterfaces.length;j++){
if(object.implementsInterfaces[j]==interfaceName){
interfaceFound=true;
break;
}
}
if(!interfaceFound)return false;
}
return true;  //all interfaces were found.
}

这个例子中,CompositeForm宣称自己实现了Composite和FormItem接口,其做法是把这两个接口名称加入一个名为implementsInterfaces的数组。类显式声明自己支持什么接口。任何一个要求基于参数属于特定类型的函数都可以对这个属性进行检查,并在所需接口未在声明之列时抛出一个错误。
这种方法有几个优点。它对类所实现的接口提供了文档说明。如果需要的接口不在一个类宣称支持的接口之列,你会看到错误消息。通过利用这些错误,你可以强迫其他程序员声明这些接口。
这种方法的主要缺点在于它并未确保类真正实现了自称实现的接口。你只知道它是否说自己实现了接口。在创建一个类时声明它实现了一个接口,但后来在实现该接口所规定的方法时却漏掉其中的某一个,这种错误很常见。此时所有检查都能通过,但那个方法却不存在,这将在代码中埋下一个隐患。另外显式声明类所支持的接口也需要一些额外的工作。

用鸭式辨型模仿接口
其实,类是否声明自己支持哪些接口并不重要,只要它具有这些接口中的方法就行。鸭式辨型(这个名称来自James Whitomb Riley的名言:“像鸭子一样走路并且嘎嘎叫的就是鸭子”)正是基于这样的认识。它把对象实现的方法集作作为判断它是不是某个类的实例的唯一标准。这种技术在检查一个类是否实现了某个接口时也可大显向身手。这种方法背后的观点很简单:如果对象具有与接口定义的方法同名的所有方法,那么就可以认为它实现了这个接口。你可以用一个辅助函数来确保对象具有所有必需的方法: //Interface.
var Composite =new Interface(“Composite”,[“add”,”remove”,”getChild”]);
var FormItem = new Interface(“FormItem”,[‘save’]);
//CompositeFormclass
var CompositeForm= function(id,method,action){
….
}
function addForm(formInstance){
ensureImplements(formInstance,Composite,FormItem);
//This function will throw an error if a required method is notimplemented.
}
与另外两种方法不同,这种方法并不借助注释。其各个方面都是可以强制实施的。ensureImplements函数需要至少两个参数。第一个参数是想要检查的对象。其余参数是据以对那个对象进行检查的接口。该函数检查其第一个参数代表的对象是否实现了那些接口所声明的所有方法。如果发现漏掉了任何一个方法,它就会抛出错误,其中包含了所缺少的那个方法和未被正确实现的接口的名称等有用信息。这种检查可以用在代码中任何需要确保某个对象实现了某个接口的地方。在本例中,addForm函数仅当一个表单对象支持所有必要的方法时才会对其执行添加操作。
尽管鸭式辨型可能是上述三种方法中最有用的一种,但它也有一些缺点。这种方法中,类并不声明自己实现了哪些接口,这降低了代码的可重用性,并且也缺乏其他两种方法那样的自我描述性。它需要使用一个辅助类Interface和一个辅助函数ensureImplements。而且,它只关心方法的名称,并不检查其参数的名称、数目或类型。

第一种和第三种结合
我们用注释声明类支持的接口,从而提高代码的可重用性及其文档的完善性。我们还用辅助类Interface及类方法Interface.ensureImplements来对对象实现的方法进行显示检查。如果对象未能通过检查,这个访求将返回一条有用的错误消息。

Interface类
var Interface =function(name,methods){
if(arguments.length!=2){
throw newError(“Interface constructor called width”+arguments.legnth+”arguments,butexpected exactly 2. ”);
}
this.name = name;
this.methods = [];
for(var i=1,len=methods.length;i
<len;i++){
if(typeof methods[i] !==’string’){
throw new Error(“interface costructorexpects method names to be passed in as a string”);
}
this.methods.push(methods[i]);
}
}

//Static class method
Interface.ensureImplements =function(object){
if(arguments.length<2){
throw new Error("FunctionInterface.ensureImplements called with”+arguments.length+”arguments, but expeted at least 2.");
}
for(var i=1,len=arguments.length;i
<len;i++){
var interface = arguments[i];
if(interface.constructor!==Interface){
throw new Error("Function Interface.ensureImplements expects arguments two and above to be instances of  Interface.")
}
for(var j= 0,methodLen =interface.methods.length;j
<methodLen;j++){
var method = interface.methods[j];
if(!object[method] || typeof object[method]!=='function'){
throw newError("Function Interface.ensureImplements:object does not implement the"+interface.name+"interface. Method"+method+" was not found.")
}
}
}
}
从中可以看到,该类所有方法对其参数都有严格的要求,如果参数未能通过检查,将导致错误的抛出。我们特地加入这种检查的目的在于:如果没有错误抛出,那么你可以肯定接口已经得到了正确的声明和实现。
Interface类的使用场合
严格的类型检查并不总是明智的。许多js程序员根本不用接口或它所提供的那种检查,也照样一干多年。接口在运用设计模式实现复杂系统的时候最能体现其价值。它看似降低javascript的灵活性,而实际上,因为使用接口可以降低对象间的耦合程度,所以它提高了代码的灵活性。接口可以让函数变得更灵活,因为你既能向函数传递任何类型的参数,又能保证它只会使用那些具有必要方法的对象。
Interface类的用法
判断代码中使用接口是否划算是最重要的一步。对于小型的、不太费事的项目来说,接口的好处也许并不明显,只是徒增其复杂度而已。你需要自行权衡其利弊。如果认为在项目中使用接口利大于弊,那么可以参照如下使用说明:
1、    将Interface类纳入HTML文件。
2、    逐一检查代码中所有以对象为参数的方法。搞清代码正常运转要求的这些对象参数具有哪些方法
3、    为你需要的每一个不同的方法集创建一个Interface对象。
4、    剔除所有针对构造器显式检查。因为我们使用是鸭式辨型,所以对象的类型不再重要。
5、    以Interface.ensureImplements取代原来的构造器检查。
示例
假设你要创建一个类,它可以将一些自动化测试结果转化为适于在网页上查看的格式。该类的构造器以一个TestResult类的实例为参数。它会应客户的请求对这个TestResult对象所封装的数据进行格式化,然后输出。
原始定义:
var ResultFormatter =function(resultsObject){
if(!(resultsObject instanceof TestResult)){
throw newError("ResultsFormatter:constructor requires an instance of TestResult asan argument.")
}
this.resultsObject = resultsObject;
}
ResultFormatter.prototype.renderResults =function(){
var dateOfTest = this.resultsObject.getDate();
var resultsArray =this.resultsObject.getResults();
var resultsContainer =document.createElement('div');
var resultsHeader =document.createElement("h3");
resultsHeader.innerHTML = "TestResults from "+dateOfTest.toUTCString();
resultsContainer.appendChild(resultsHeader);
var resultList =document.createElement("ul");
resultsContainer.appendChild(resultList);
for(var i=0,len=resultsArray.length;i
<len;i++){
var listItem=document.createElement('li');
listItem.innerHTML =resultsArray[i];
resultList.appendChild(listItem);
}
return resultsContainer;
}

该类的构造器会对参数进行检查,以确保其的确为TestResult类的实例。如果参数达不到要示,构造器将抛出一个错误。有了这样的保证,在编写renderResults方法时,你就可以认定有getDate和getResults这两个方法可供使用。实际上这并不能保证所需要的方法得到了实现。TestResult类可能会被修改,致使其不再拥有getDate()方法。在此情况下,构造器中的检查仍能通过,但renderResults方法却会失灵。
此外,构造器的这个检查施加了一些不必要的限制。它不允许使用其他类的实例作为参数,哪怕它们原本可以如愿发挥作用。例如,有一个名为WeatherData在也拥有getDate和getResults这两个方法。它本来可以被ResultFormatter类用得好好的。但是那个显式类型检查会阻止使用WeatherData类的任何实例。
问题解决办法是删除那个使用instanceOf的检查,并用接口代替它。首先,我们需要创建这个接口:
//ResultSetInterface.
var ResultSet =new Interface(“ResultSet”,[‘getDate’,’getResults’]);
上面的这行代码创建了一个Interface对象的新实例。第一个参数是接口的名称,第二个参数是一个字符串数组,其中的每个字符串都是一个必需的方法名称。有了这个接口之后,就可以用接口检查替代instanceOf检查了
var ResultFormatter = function(resultsObject){
Interface.ensureImplements(resultsObject,ResultSet);
this.resultsObject = resultsObject;
}
ResultFormatter.prototype.renderResults= function(){
…
}
renderResults方法保持不变。而构造器则被改为使用ensureImplements方法而不是instanceof运算符。现在构造器可以接受WeatherData或其他任何实现所需要方法的类的实例。我们只修改了几行ResultFormatter类代码,就让那个检查变得更准确,而且更宽容。

依赖于接口的设计模式
l  工厂模式
l  组合模式
l  装饰模式
l  命令模式


体会:
1.用Interface来实例化一个接口
2.声明一个类实现这些接口方法,在实例化该对象时,或调用指定实例时,用Interface的ensureImplements(实例化的对象,接口对象);判定是否继续下去。

接口实例
js-interface
asd

js继承的几种实现方法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title></head>
<body>
<script type="text/javascript">

    // ------------------------继承的第一种方式:对象冒充-----------------------------

    function Parent(name) {
        this.name = name;
        this.showInfo = function () {
            document.write(name);
            document.write("</br>");
        }
    }

    function Children(name, pwd) {//下面三行代码实现了子对象和父对象指向同一个引用//关键的代码this.method = Parent;this.method(name);delete this.method;

        this.pwd = pwd;
        this.showMsg = function () {
            document.write(this.pwd);
            document.write("</br>");
        }
    }

    var parent = new Parent("John");
    var child = new Children("Bob", 123);

    parent.showInfo();
    child.showInfo();
    child.showMsg();

    document.write("");
    document.write("</br>");

    //call方法,是function里的一个方法。

    //------------------------call方法简单示例-------------------------------

    function test(str) {
        document.write(this.name + "," + str + "</br>");
    }

    var person = new Object();
    person.name = "anllin";

    //相当于调用了test方法test.call(person, "welcome"); //将person赋给了test里的this。

    document.write("");
    document.write("</br>");

    //--------------------继承的第二种方式,call方法------------------------------

    function Father(name) {
        this.name = name;
        this.showName = function () {
            document.write(this.name + "</br>");
        }
    }

    function Sub(name, pwd) {//关键的代码Father.call(this, name);

        this.pwd = pwd;
        this.showPwd = function () {
            document.write(this.pwd + "<br>");
        }
    }

    var father = new Father("Father");
    var sub = new Sub("Sub", 123456);
    father.showName();
    sub.showName();
    sub.showPwd();

    document.write("");
    document.write("</br>");

    //--------------------继承的第三种方式,apply方法------------------------------

    function Mother(name) {
        this.name = name;
        this.showName = function () {
            document.write(this.name + "</br>");
        }
    }

    function Daugther(name, pwd) {//关键的代码Mother.apply(this, new Array(name));

        this.pwd = pwd;
        this.showPwd = function () {
            document.write(this.pwd + "<br>");
        }
    }

    var mother = new Father("Mother");
    var daugther = new Sub("Daugther", 654321);
    mother.showName();
    daugther.showName();
    daugther.showPwd();

    document.write("");
    document.write("</br>");

    //--------------------继承的第四种方式,prototype chain方式------------------------------

    //缺点:无法给构造函数传参数。

    function Human() {
    }

    Human.prototype.name = "human";
    Human.prototype.showName = function () {
        document.write(this.name + "<br>");
    }

    function Student() {
    }

    //关键的代码Student.prototype = new Human();

    Student.prototype.password = 456789;
    Student.prototype.showPwd = function () {
        document.write(this.password + "<br>");
    }

    var human = new Human();
    var student = new Student();
    student.name = "student";
    human.showName();
    student.showName();
    student.showPwd();

    document.write("");
    document.write("</br>");

    //--------------------继承的第五种方式,混合方式------------------------------

    function FatherClass(name) {
        this.name = name;
    }

    FatherClass.prototype.showName = function () {
        document.write(this.name + "<br>");
    }

    function SubClass(name, pwd) {

//关键的代码

        FatherClass.call(this, name);
        this.pwd = pwd;
    }

    //关键的代码

    SubClass.prototype = new FatherClass;

    SubClass.prototype.showPwd = function () {
        document.write(this.pwd + "<br>");
    }

    var f = new FatherClass("FatherClass");
    var s = new SubClass("SubClass", 45678);
    f.showName();
    s.showName();
    s.showPwd();

</script>
</body>
</html>
uzolusbbhuhslpkx_big

职场的二十二条潜规则

第一条:必须有一个圈子

无论如何做都是画地为牢:不加入一个圈子,就成为所有人的敌人;加入一个圈子,就成为另一个圈子的敌人;加入两个圈子,就等于没有加入圈子。只有独孤求败的精英才可完全避免圈子的困扰–这种人通常只有一个圈子,圈子里只站着老板一个人。

uzolusbbhuhslpkx_big

第二条:必须争取成为第二名

名次与帮助你的人数成正比–如果是第一名,将因缺乏帮助而成为第二名;而第二名永远是得道多助的位置,它的坏处就是永远不能成为第一名。

第三条:必须理解职责的定义

职责是你必须要做的工作,但办公室的生存定律是,职责就是你必须要做的工作之外的所有工作。

第四条:必须参加每一场饭局

如果参加,你在饭局上的发言会变成流言;如果不参加,你的流言会变成饭局上的发言。

第五条:必须懂得八卦定理

和一位以上的同事成为亲密朋友,你的所有缺点与隐私将在办公室内公开;和一位以下的同事成为亲密朋友,所有人都会对你的缺点与隐私感兴趣。

第六条:必须明白加班是一种艺术

如果你在上班时间做事,会因为没有加班而被认为不够勤奋;如果你不在上班时间做事,你会被认为工作效率低下而不得不去加班。

第七条:必须熟练接受批评的方法

面对上司的判断,认为你没错,你缺乏认识问题的能力;认为你错了,你没有解决问题的能力–接受错误的最好方式就是对错误避而不谈。最后一条,不准和老板谈公正。

第八条:必须理解”难得糊涂”的词义

糊涂让你被人认为没有主见,不糊涂让你被人认为难以相处——”难得糊涂”在于糊涂的时机,什么时候糊涂取决于你不糊涂的程度。

第九条:必须明白集体主义是一种选择

如果你不支持大部分人的决定,想法一定不会被通过;如果你支持大部分人的决定,将减少晋升机会——有能力的人总是站在集体的反面。

第十条:必须论资排辈

如果不承认前辈,前辈不给你晋升机会;如果承认前辈,则前辈未晋升之前,你没晋升机会——论资排辈的全部作用,是为有一天你排在前面而做准备。

第十一条:必须禁止智力排行

天才应避免得罪庸才,虽然天才一定会得罪庸才–庸才总不太喜欢和天才相处。

第十二条:必须学会不谈判的技巧

利益之争如果面对面解决,它就变得无法解决;如果不面对面解决,它就不会被真正解决。一个最终原则是,利益之争从来就不会被解决。

第十三条:必须理解秘密的存在意义

如果一件事成为秘密,它存在的目的就是被人知道;如果一个秘密所有人都知道,你必须说不知道;同理,如果一个秘密所有人都说不知道,则可以推断,所有人都知道。

第十四条:必须理解开会是一种道

道可道,非常道;名可名,非常名。开会不能不发言,发言不能有内容。如果你的发言有内容,最好选择不发言——开会的目的是寻找一个解决问题的方法,在大部分情况下,这个方法就是开会。

第十五条:必须让婚姻状况成为秘密

隐婚人士在办公室谈情是一场喜剧,单身人士在办公室谈情是一场悲剧。最好的结果是,已婚人士获得一场办公室爱情;最坏的结果是,未婚人士获得一场办公室婚姻。最后一条,不到万不得已,永远不要打老板女秘书的主意。

第十六条:必须掌握一种以上高级语言

高级语言包括在中文中夹杂外语、在怒骂之中附送奉承、在表达保密原则同时揭露他人秘密、在黄段子中表达合同意向。语言技巧高是下乘,发言时机好是上乘。使用高级语言但时机不对,不如使用低级语言但时机正确。

第十七条:必须将理财作为日常生活的一部分

主管在身边的时候,要将手机当公司电话;主管不在身边的时候,要将公司电话当私人手机;向同事借钱,不借钱给同事;陌生人见面要第一个埋单,成为熟人后永远不要埋单。最后一条,捐钱永远不要超过你的上级。

第十八条:必须明白参加培训班的意义

培训班不是轻松的春游,它的目的是学习你工作职责之外的知识;由于学习的知识在你工作职责之外,培训班可以当做一次轻松的春游。

第十九条:必须学会摆谱

如果你很靠谱但不摆谱,大部分人都认为你不靠谱。如果你不靠谱但经常摆谱,所有人都认为你很靠谱。

第二十条:必须懂得表面文章的建设性

能做会议幻灯片的,不能私下讨论;可写报告的,不能口头请示,如果一件事你已经完成,但没有交计划书,你等于没有做;如果一件事你没有去做,但交了计划书,你可以当它已经完成–毕竟所有学过工商管理的老板都固执地认为,看计划书是他的事,执行是下面的事。

第二十一条:必须与集体分享个人成功

所有人都是蜡烛–要点燃自己并且照亮别人,如果你只照亮自己,你的前途将一片黑暗;如果你只照亮别人,你将成为灰烬。

第二十二条:必须遵守规则

要成为遵守规则的人,请按显规则办事;要被人认为是一个遵守规则的人,请按潜规则办事。显规则和潜规则往往相反,故当二者发生冲突,按显规则说,按潜规则做,是为最高原则。

2015-08-21_091158

浏览器假死怎么处理

在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了,必须进行优化。

为什么会出现这种情况呢,我们先来看一下浏览器的内核处理方式:

2015-08-21_091158
浏览器的内核是多线程的,它们在内核制控下相互配合以保持同步,一个浏览器至少实现三个常驻线程:javascript引擎线程,GUI渲染线程,浏览器事件触发线程。

JavaScript引擎是基于事件驱动单线程执行的,JS引擎一直等待着任务队列中任务的到来然后加以处理,浏览器无论再什么时候都只有一个JS线程在运行JS程序。
GUI 渲染线程负责渲染浏览器界面,当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。但需要注意 GUI渲染线程与JS引擎是互斥的,当JS引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。
事件触发线程,当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。这些事件可来自JavaScript引擎当前执行的代码块如setTimeOut、也可来自浏览器内核的其他线程如鼠标点击、AJAX异步请求等,但由于JS的单线程关系所有这些事件都得排队等待JS引擎处理。
了解了浏览器的内核处理方式就不难理解浏览器为什么会进入假死状态了,当一段JS脚本长时间占用着处理机就会挂起浏览器的GUI更新,而后面的事件响应也被排在队列中得不到处理,从而造成了浏览器被锁定进入假死状态。另外JS脚本中进行了DOM操作,一旦JS调用结束就会马上进行一次GUI渲染,然后才开始执行下一个任务,所以JS中大量的DOM操作也会导致事件响应缓慢甚至真正卡死浏览器,如在IE6下一次插入大量的HTML。而如果真的弹出了“脚本运行时间过长“的提示框则说明你的JS脚本肯定有死循环或者进行过深的递归操作了。

Nicholas C. Zakas认为不论什么脚本,在任何时间、任何浏览器上执行都不应该超过100毫秒,否则一定要将脚本分解成若干更小的代码段。那么我们该如何来做呢:

第一步,优化你的循环,循环体中包含太多的操作和循环的次数过多都会导致循环执行时间过长,并直接导致锁死浏览器。如果循环之后没有其他操作,每次循环只处理一个数值,而且不依赖于上一次循环的结果则可以对循环进行拆解,看下面的chunk的函数:

1
function chunk(array, process, context) {
2
setTimeout(function() {
3
var item = array.shift();
4
process.call(context, item);
5
if (array.length > 0) {
6
setTimeout(arguments.callee, 100);
7
}), 100);
8
}
chunk()函数的用途就是将一个数组分成小块处理,它接受三个参数:要处理的数组,处理函数以及可选的上下文环境。每次函数都会将数组中第一个对象取出交给process函数处理,如果数组中还有对象没有被处理则启动下一个timer,直到数组处理完。这样可保证脚本不会长时间占用处理机,使浏览器出一个高响应的流畅状态。

其实在我看来,借助JS强大的闭包机制任何循环都是可拆分的,下面的版本增加了callback机制,使可再循环处理完毕之后进行其他的操作。

01
function chunk(array,process,cbfun){
02
var i=0,len = array.length; //这里要注意在执行过程中数组最好是不变的
03
setTimeout(function(){
04
process( array[i] , i++ ); //循环体要做的操作
05
if( i < len ){
06
setTimeout(arguments.callee,100)
07
}else{
08
cbfun() //循环结束之后要做的操作
09
}
10
}
11
}
第二步,优化你的函数,如果函数体内有太多不相干但又要一起执行的操作则可以进行拆分,考虑下面的函数:

1
function dosomething(){
2
dosomething1();
3
dosomething2();
4
}
dosomething1和dosomething2互不相干,执行没有先后次序,可用前面提到的chunk函数进行拆分:

1
function dosomething(){
2
chunk([dosomething1,dosomething2],function(item){item();})
3
}
或者直接交给浏览器去调度

1
function dosome(){
2
setTimeout(dosomething1,0);
3
setTimeout(dosomething2,0);
4
}
第三步,优化递归操作,函数递归虽然简单直接但是过深的递归操作不但影响性能而且稍不注意就会导致浏览器弹出脚本失控对话框,必须小心处理。

看以下斐波那契数列的递归算法:

1
function fibonacci(n) {
2
return n < 2 ? n: fibonacci(n – 1) + fibonacci(n – 2);
3
};
fibonacci(40)这条语句将重复调用自身331160280次,在浏览器中执行必然导致脚本失控,而采用下面的算法则只需要调用40次

01
fibonacci = function(n){
02
var memo = {0:0,1:0}; //计算结果缓存
03
var shell = function(n){
04
var result = memo[n];
05
if( typeof result != ‘number’ ) //如果值没有被计算则进行计算
06
memo[n] = shell(n-1) + shell(n -2)
07
return memo[n];
08
}
09
return shell(n);
10
}
这项技术被称为memoization,他的原理很简单就是同样的结果你没必要计算两次。另一种消除递归的办法就是利用迭代,递归和迭代经常会被作为互相弥补的方法。

第四步,减少DOM操作,DOM操作的代价是相当昂贵的,大多数DOM操作都会触发浏览器的回流(reflow)操作。例如添加删除节点,修改元素样式,获取需要经过计算的元素样式等。我们要做的就是尽量少的触发回流操作。

1
el.style.width = ‘300px’ el.style.height = ‘300px’el.style.backgroundColor = ‘red’
上面的操作会触发浏览器的三次回流操作,再看下面的方式:

1
el.className = ‘newStyle’
通过设置改元素的className一次设置多个样式属性,将样式写再CSS文件中,只触发一次回流,达到了同样是效果而且效率更高。因为浏览器最擅长的就是根据class设置样式。

还有很多可以减少DOM操作的方法,在此就不多说了,但是一个基本的原则就是让浏览器去做它自己擅长的事情,例如通过class来改变元素的属性。

相信经过上面的优化的过程必定可以大大提高用户体验,不会出现浏览器被锁死和弹出脚本失控的对话框,使你的浏览器从繁重的任务中解放出来。需要指出的是上面这些优化并不是必须的,只有当一段脚本的执行时间真的影响到了用户体验才需要进行。虽然它们让用户觉得脚本的执行变快了,但其实完成同一个操作的时间可能被延长了,这些技术只是让浏览器处于一个快速响应的状态,使用户浏览更流畅。

最后送一句忠告:过早优化是万恶之源。

asd

两个男人借宿漂亮寡妇家的传奇经历

诚实,是这个世界上最宝贵的品质,如果你不愿承担责任,那你也不配拥有收获,看完这个真实的故事,你会相信上帝是公平的。

这是一个真实的故事,故事发生在1966年冬天的美国。

杰克决定与他的好友鲍勃一起去德克萨斯滑雪。他们驾驶著杰克的旅行车一路向北开去。

行驶了几小时后,他们陷入了一场可怕的暴风雪。他们把车停靠在附近的一间农舍前,向一位相貌迷人的女主人询问他们是否能在那过夜。

女主人解释说:我的丈夫最近去世了,如果让你们待在我的房子里,我怕邻居会说闲话。

杰克说:不用担心,我们愿意睡在谷仓里。明早太阳升起来时我们就会离去。

女主人同意他们俩便在谷仓里过夜,临关门时,她意味深长的看了鲍勃一眼……

早上,天气放晴了,他们继续赶路。

9个月后,杰克收到了一封来自德克萨斯的律师信。拆阅后,他想了几分钟,意识到这封信应该是来自那位寡妇的律师。

他打电话给他的朋友鲍勃说:鲍勃,你还记得我们住的那个农场里的漂亮寡妇吗?

是的,我记得。

杰克问:你半夜起床去过她的卧室对吗?

是的,我……我承认我这样做了。

杰克问:你是不是使用了我的名字和地址而没有告诉她你的名字?

鲍勃脸红起来,说:是的,我确实这么做过。

杰克回答道:嗯,谢谢!她刚刚去世了,并把她的农场,别墅和所有的财产都留了给我。

asd

一件旧衣服怎么卖到8000元

13岁的那年,父亲有一天突然递给他一件旧衣服。
“这件衣服能值多少钱?”
“大概一美元。”他回答。
“你能将它卖到两美元吗?”父亲用探询的目光看着他。
“傻子才会买!”他赌着气说。
父亲的目光真诚中透着渴求:“你为什么不试一试呢?你知道的,家里日子并不好过,要是你卖掉了,也算帮了我和你的妈妈。”
他这才点了点头:“我可以试一试,但是不一定能卖掉。”
他很小心地把衣服洗净,没有熨斗,他就用刷子把衣服刷平,铺在一块平板上阴干。第二天,他带着这件衣服来到一个人流密集的地铁站,经过六个多小时的叫卖,他终于卖出了这件衣服。
他紧紧攥着两美元,一路奔回了家。以后,每天他都热衷于从垃圾堆里淘出旧衣服,打理好后,去闹市里卖。
如此过了十多天,父亲突然又递给他一件旧衣服:“你想想,这件衣服怎样才能卖到20美元?”
“怎么可能?
这么一件旧衣服怎么能卖到20美元,它至多值两美元。”
“你为什么不试一试呢?”父亲启发他,“好好想想,总会有办法的。”
终于,他想到了一个好办法。他请自己学画画的表哥在衣服上画了一只可爱的唐老鸭与一只顽皮的米老鼠。他选择在一个贵族子弟学校的门口叫卖。不一会儿,一位管家为他的小少爷买下了这件衣服,那个十来岁的孩子十分喜爱衣服上的图案,一高兴,又给了他5美元的小费。25美元,这无疑是一笔巨款!相当于他父亲一个月的工资。
回到家后,父亲又递给他一件旧衣服:“你能把它卖到200美元吗?”父亲目光深邃。

wKhQMVH2JUiEGJpfAAAAAM3sHSw216
这一回,他没有犹疑,他沉静地接过了衣服,开始了思索。
两个月后,机会终于来了。当红电影《霹雳娇娃》的女主角拉佛西来到纽约做宣传。记者招待会结束后,他猛地推开身边的保安,扑到了拉佛西身边,举着旧衣服请她签名。拉佛西先是一愣,但是马上就笑了,没有人会拒绝一个纯真的孩子。拉佛西流畅地签完名。他笑着说:“拉佛西女士,我能把这件衣服卖掉吗?”“当然,这是你的衣服,怎么处理完全是你的自由!”
他“哈”的一声欢呼起来:“拉佛西小姐亲笔签名的运动衫,售价200美元!”经过现场竞价,一名石油商人以1200美元的高价买了这件运动衫。
回到家里,他和父亲,还有一家人陷入了狂欢。父亲感动得泪水横流,不断地亲吻着他的额头:“我原本打算,你要是卖不掉,我就叫人买下这件衣服。没想到你真的做到了!你真棒我的孩子,你真的很棒……”
一轮明月升上山头,透过窗户柔柔地洒了一地月光。这个晚上,父亲与他抵足而眠。
父亲问:“孩子,从卖这三件衣服中,你有明白什么吗?”
“我明白了。您是在启发我,”他感动地说,“只要开动脑筋,办法总是会有的。”
父亲点了点头,又摇了摇头:
“你说得不错,但这不是我的初衷。”
“我只是想告诉你,一件只值一美元的旧衣服,都有办法高贵起来。更何况我们这些活着的人呢?我们有什么理由对生活丧失信心呢?我们只不过黑一点、穷一点,可这又有什么关系?”
“是的,连一件旧衣服都有办法高贵,我还有什么理由妄自菲薄呢!”
感悟:生活并无完美,与其让生活带来更多的沮丧与抱怨,不如坚持着一份信念,相信通过努力可以让生活变得更美好!

asd

最容易让80后破产的7种方式

导读:80后从大学毕业之后,经过10年的奋斗,口袋里有一点存款,多的百万,少的几十万。这当中既有你个人奋斗的原因,也是国家经济发展所赐。但是你千万不要因此而飘飘然了,无论是面对生活还是面对一些投资,都要保持谦卑之心心,切忌贪婪、恐惧。更不要沾染一些恶习,否则你很快会发现破产离你并不是遥不可及的事情。

破产第1式:盲目创业

对,你没有看错,就是创业,现在是万马奔腾、全民创业年代,创业怎么会破产呢。

我所谓的中产,大抵类似10年前左右大学毕业、或本科、或研究生、或985、或211、或三本,到现在都一个样了,经过10年的国家经济高速发展,这些年大抵搞定了车、房,有些人房还多套,手上有点存款,多的百万,少的几十万。注意我说的前提,这些有你的辛苦努力,但是最重要的是这10年的国家经济高速发展各个行业都澎湃发展,一定要意识到这一点,牛市你赚了10倍,不是你有多牛逼,是因为牛市。

1)第一类创业是做衣食住行,本职不丢想弄一摊第二事业。我发现我周围的特别喜欢第二事业做餐饮,餐饮可是一个大火坑。我身边有3起失败案例,第一起做火锅。第二起做中高端餐饮。第三起做牛肉拉面。豪情万丈的投入,最长的没有坚持半年,个例不详细列举。说个大概做牛肉拉面的亏损,盘店顶手费10万、装修20万、房租20万、灶头4个人一个月共2万,一个收银,2服务员,一个共7000,另外牛肉拉面是清真的,你不是姓马,也不是小白帽,开业就有人找你麻烦,别想报警,没用,最后花了8万摆平。你想想一碗面10块,鸡蛋一个1块,就算毛利润50%,一天要卖多少碗能保住成本,开业三个月止损,亏了70万。我本人没有从事过餐饮,从旁观者来看,小规模的餐饮,做面、做成都小吃、做特色的黄焖鸡米饭等等挣的是人工钱,也就是本人又是老板又是干活的,家人上阵,雇佣1、2个服务员最多,比打工强,这没有问题,中产就算了吧,去炸油条做豆浆你又放不下身段又没人家能吃苦。高端的做品牌加盟我不懂,就不说了。反正玩中端的餐饮对没有经验的中产是破产的不二法门。

2)第二类创业破产的是做简单的贸易、倒买倒卖、简单的系统集成等等,这类破产往往是一个脆弱的链条一环断裂。

打个比方,你在医院有些关系等等,然后打算整个公司给医院供设备,现在通常要招标,如何招标拿单子就不说了,假设你有这个能力,这个设备通常是比如GE、西门子等等,电器设备比如有施耐德、ABB等,你拿货的时候上游厂家没有全款不会给货,空手套白狼很难了现在,设备安装调试完了,后期的维护中间调试你都搞不定,请原厂的工程师来一次就收一次钱。最后最后你终于要收款了,用户验收、付款,你要等着回报了,事情往往没有那么简单,那个领导被双规了、那个领导被调离了,或者提前退了等等都是一堆问题。我一朋友给一民营医院供了一批设备,半年不验收,堵门警察要抓人,最后只好把设备拉回来,拉回来卖给谁呢?每天看着这个都愁的吃不下。类似的生意很多,前期垫资、中间实施后期收款链条太长的生意都是危险的生意,房地产不景气,房子卖不出去,很多做垫资建筑的、供材料的都血本无归。

创业不易,技术?资金?人脉?市场?年龄大、身体差、技术差、激情小、担子重、家庭责任大、拖家带口要还房贷、人脉窄,好了,你说你要出去创业了,别冲动。

所有成功背后都有长期经验的积累、技术的积累、人脉的积累、资金的积累,这些积累到有一天厚积薄发,才能绽放出绚烂的火焰。

bki-20090714233439-89594622

破产第2式:杠杆式炒股

我真心不想写炒股破产的,因为这在当下今天每天都是案例,根本不用举例子,还是那句话,牛市赚10倍不是你牛,而是因为牛市。如果不融资借贷杠杆炒股,6124点过来多少股也解套了。不乱动,扛住就行,如果拿的是医药、互联网等行业,早就赚了也不止。

一旦用了杠杆炒股,就属于到期必须变现的一种品牌,类似期货属性,期货的对手盘就很明确,优势的一方一定要把对方打爆才会收手。现在是大家都融资,主力虽然也被套,但是如果一直往下面做,打爆融资盘,融资盘割肉后就能在底部接到大量筹码,稍微反弹主力就盈利了。以前不一样,主力也只能做多才能赚钱,打下来也没有多少人割肉,只能在底部慢慢磨收集筹码,时间以年、月计算。现在不一样,有融资盘的砸到1/3, 1/3不行砸到1/4。

还有就是买港股,还好现在沪港通选择的都是红筹股,蓝筹股,就这大陆买入量第二的汉能就有无数的人中招,考虑到50万资金才能开通这个,25亿人民币啊,灰飞烟灭了。当时我看到汉能的k线就和朋友说这个是高位跑马梁,典型的庄股,一旦崩盘就跌成渣渣,没有想到如此彻底。几乎没有任何解套拿回少许现金的可能了。以汉能的盈利情况分红估计也不要想了。

想起来一个网友的文章,很早很早了,说他拿着电话单水费单用旅游的机会到香港开户,开户买这啥呢,这个时候他想起杨澜(微博) 女士那高洁职业美丽女神范儿。。。从内到外,从上到下都燥热,就买阳光文化,据说累计下跌了98%,反复缩股100万股最后缩到2万股,最后女神说好累,对不起,卖了不做了。港股里面有很多仙股,有暴利也有巨大的风险。随着a股注册制放开,新三板放开,这种人为炒高然后暴跌的场景不要太多,大家擦亮眼睛。

U609P115T9D31145F367DT20040708145700

破产第3式:涉足

我做期货说不上破产也我把牛市股票挣的钱亏损一半,算是收手早的吧,捡回来一条命。先说说我怎么会走到期货这条路上去的。我在上次大盘4400点拐头的时候开的期货帐号,目的是股指期货做空,觉得股市有泡沫,做股指期货之前要做10笔商品期货,我选择了黄金,到现在为止我也只做过股指和黄金。亏损累累后我彻底不碰期货了,输的钱认了,在也不想翻本了。也许是我不牛逼,做不了期货,说几个牛逼的人吧。

一个是大名鼎鼎的宁财神,知道怎么宁财神才写网络小说做编剧的吗,每次看宁财神的喜剧都觉得这大神真是才华横溢啊。宁财神,真名:陈万宁,15岁上了上海财经大学,读的是金融专业。父亲是中国第一代期货交易员,以期货为生,至今仍叱咤于期货领域,小有名气。这样的条件,15岁我还在读初中啊,科班出身,有老爸带,做期货成百万富翁 几个礼拜赔光破产.从此不碰期货,网络写作成就了宁财神。

第二个就是申银万国证券自营部衍生品投资经理赵立臣,为上海财大的硕士,1978年生人,和我同岁,一样的教育背景经历,自己抵押房子贷款做股指期货,做多,希望当时的一个反弹继续延续,很快就能还完贷款家人压力小一些。这一刻他已经在和魔鬼交易了,两周,只过了10个交易日,已经要补充保证金负责强制平仓,扛不住压力放弃了,放弃了一切放弃了家人放弃了孩子跳楼自杀。

第三个就说最近的逍遥刘强,也是和我同岁的样子,北京物资学院就是现在的首都经贸大学第一届期货专业毕业生,百分之百的科班出身,中国期货的黄埔军校,如果可以,真不希望你跳楼自杀,我读过你的书,你的《期货大作手回忆录》,看过的博客,很多的投资心得。。。我们可以从此不碰期货,也可以活的很好很快乐。。。

既然期货我失败了,也不打算再碰了,失败或者成功的经验也说不上了,说几个步骤吧,这些牛人为啥会爆仓,为啥不止损。

期货的第一步,小仓试探,这个时候你发现这就是捡钱,比捡钱还容易,对吧。

期货的第二步,仓位比较大,会设止损,你如果看期货的k线的话,会发现每天都有几个上下的长针,因为期货现在很多都是程序化交易,机器会执行止损,这个长针就是收割止损的。由于止损为了马上卖出设的都是市价委托,往往会比期望的止损要大的多,一天来这么几回人不就疯了。高手往往会不设程序止损,10次里面8次都会回来,剩下的2次。。。

期货的第三步,仓位有很多做法,有各种加法,反正最后等到你重仓后,又没有程序止损。。。

不说了,小小的中产别想期货了,我认输,期货的机会确实多,想象一下,你在一个池子里面,里面都是泥鳅,太多了,你空手去抓拿网去抓都行,你能抓多少都是你的,条件是,不能摔倒,摔倒一次就淹死。我觉得这是真实的比喻。

破产第4式:放高利贷

2015-08-08_065442

很多人知道不能借高利贷,高利贷借不得,但是不知道高利贷也放不得,当然了大部分人根本没有意识到自己在放高利贷。

工作关系有幸见识过全盛时期的陕北科威特,大家可能不知道陕北科威特的中心在哪里,在一个叫大柳塔镇的地方。靠煤发迹,也因煤而衰落,各种疯狂,普通民众中产几乎全部裹胁进去。一个20岁的小年轻,租2辆豪车,5星际宾馆租个套间,挂个啥啥投资公司就以2分3分月息收投资。早期的时候这些钱投到煤矿也能产生高额回报。

很多人抵押房产贷款去放贷,1.5分,2分的息收亲戚朋友的钱在去3分放出去,这些中间层的崩盘后最惨,上面要不回来钱,下面天天要帐,好多人远走他乡或者自杀。

但是一个事实是很多领导、公检法参与放贷的资金回来了,普通人的钱别想了,甚至被从法律层面规避了,比如公司破产清算,比如还给你“还债酒”,还债酒真是一个聪明的发明,比如我这个投资公司欠你500万,公司没钱,但是我有1000箱酒,一箱10瓶,一瓶380,抵给你,这酒我还喝过,四川一听都没有听说过酒厂出品,度数感觉挺高,二锅头一个味儿。

不知道从那年起,一条街上的门面至少有5家是投资理财担保公司,这家给1分息,那家给1.5分息,我在的公司所在地属于比较高尚大的写字楼,从去年起这写字楼就有跑路的,经常就有老头老太太什么的拉横幅讨钱。

中产的玩法高级点,本质其实一样,比如最近的云南泛亚有色金属交易所事件,我觉得骗子特聪明,早就算计好的,号称给了14%的年息,抵押物是什么铟、锗、铋、镓、钴、钨啥的,如果这些金属一年涨了,远不止14%,当然本息有保障,可是现在商品暴跌,本息没有了,要的话自己去仓库把这些抵押金属拿走,可是这些金属不是金子、银子,普通人没有交易变现渠道,而且这些重金属有毒,还不能拿回家里。现在明白人家既然是有色金属交易所为啥没有金、银了吧,实际上泛亚是用客户的钱做了一个包赚不赔的远期期货,赚了你喝点汤汤人家吃肉,赔了人家不平仓,实物交割,你还拿实物没有办法。话说这些投资者在闹、在上访、说泛亚误导等等,没用的,法律层面人家早就设计规避了,半年而已,一切就和没有发生一样,赢家在享受生活,破产者用下半生平息内心的伤痛。

破产第5式:赌博

赌博是一个蛮宽泛的东西,麻将、扑克、砸金花、还有游戏厅那种押分、打鱼等等,玩的大的去澳门、还有缅甸。其实人都有赌性的,都有不劳而获的心理。这方面的教训太多了,随便去个戒赌吧里面都是血淋淋的案例。

不说别人,只说我自己,我老家在一个鱼米之乡千湖之省,有人说四川人打麻将厉害,真是没有见过我老家人打麻将的瘾有多大,这么说吧,宾馆房间里面没有麻将机就没有人开房,饭馆包间里面没有麻将机就没有人吃饭。三个人都能玩、随上随下、一条街有5个麻将馆,里面满满都是打麻将的。

前些年开始是和同事打,后来是和朋友打,在后来被朋友带到麻将馆里面玩。当时有一个感觉,一到时间比如周末打牌时间点,不去打牌心理焦虑,坐立不安。戒赌特别简单,那一次带了几千块输光又欠了2千,打完后,我说这是我最后一次打牌,欠的钱给账号我转账,以后请不要叫我。后来这些赌友又打电话发短信几次我都没有接没有回,也就彻底断了。

说说危害吧,其实我打的牌相对收入的话,不算特别大,也能承受的起,说破产有些夸张了,但是很多赌博都是从小到大,赢了不收,输了想翻本。

危害很多,首先朋友也好、同事也好如果经常在一起打牌的话,有句话叫牌越打越生,输的人会动很多歪脑筋,其中一个老乡后来在我们经常去打牌的地方刻记号,还真赢了一些钱。这是后来才发现的。然后赌博的人为啥会穷呢,影响学习工作发展不说,赢的时候会挥霍,输的时候会挪用正常用途的钱,本来还有喝茶买烟的抽水,在一个茶馆打3年牌,最后赚钱的只有茶馆老板。

还有打牌久了,真的影响人的精气神,激动、紧张、熬夜,抽烟,或者吸二手烟,我最长时间一次好像打了快30个小时,周五晚上打到周日早上。不影响健康身体鬼都不信。

老家那里赌博破产的特别多,每次过年回家都听父母说谁谁输多少跑路怎么样怎么样,我们那里打大牌的麻将馆都有人放水钱,就是高利贷,打个条按个手印就可以拿到钱继续打牌。高利贷我不知道到底有多高,最后的结果都很难收场。

破产第6式:吸毒

本来不打算说这个,因为我烟都不抽,偶尔应景陪人抽两口,都是不吸到肺里面,就是吸到嘴里面就吐出来。而且这个事情和我的生活经历生活圈子真是太远。

但看到有朋友提到这个,就说几句吧,因为这个太吓人了,不是破产,是要命。我觉得一个很大的原则是一个人要有选择的朋友圈,啥人跟啥人,亲人,同事,同事里面能有一两个好的朋友就不错了,客户,事业的伙伴,爱好型伙伴,比如球友比如钓友。

现在挺流行一句话,最穷无非讨饭,不死终会出头。这话说来轻松,真正的从一个还算是有点资产的中产坠入讨饭的无底深渊,一般人都承受不了,还别说不死终会出头的话,看当今社会和经济形势,一旦干废了,绝大多数人就是一废到底很难再出头。

生活无论有多苦闷有多无望,都不得碰任何此类东西,听闻老家那里很多地方溜壶壶,抽了能兴奋一天一夜,床上能勇10倍,希望国家管控力度更大些,不然多少人要家破人亡啊。

破产第7式:大病

一次在新疆和一同行吃饭,同行吃饭前先给自己打了一针,吓得旁边的服务员花容失色,离的远远的。以为这是遇上瘾君子了。这位朋友其实很年轻,40不到,糖尿病说是几个加号,我也不懂,反正说是吃饭前得先给自己来一针胰岛素。而且说是痊愈的希望很小。想象一下未来的几十年的人生,每天吃饭前都要给自己来一针,这是多么恐怖的事情。哪怕我骨折了躺床上3个月可是我能好,哪怕我一手指断了不要了也没有这样的折磨。

大病的恐惧在于你完全没有意识,当发生了就很难挽回。在我这个年龄,身边的朋友得大病的其实不多,毕竟还年轻,但是糖尿病、高血压、痛风、脂肪肝、高血脂这些病的不少。没有节制的暴食暴饮,喝酒过量,缺乏运动,等等。

这个同行现在也算标准的中产,年轻那会做销售跟老板,帮老板挡酒,喝大了就去呕掉继续喝,可能就是那个时候慢慢病魔附体,他说他很后悔,如果能回到从前打死都不会这样了。

我白酒3两、啤酒2瓶的量,很多时候端杯了喝了一半自己到量了不喝别人刚喝high,扫别人兴,说话也不好听,我也只是笑笑。我不会因为我酒量比你好而逼你喝酒,也不会因为被迫喝过多的酒,大家随意就好。。。

祝大家保持幸福安康!