猫窝私语 — Makumo's Blog

玛酷猫的温馨小窝,记录生活点点滴滴。

@玛酷猫5年前

12/2
10:47
计算机

也谈代码规范化

先说个事情:前段时间网编那边做了个专题,有个聚焦图效果插入专题中就不显示,跑来找我。我先用chrome打开,正常,换IE(11),聚焦图正常,打开开发者模式,渲染方式切换到IE7,聚焦图不显示,debug模式报错如下:

SCRIPT438: 对象不支持此属性或方法,文件: eval code (14),行: 1,列: 683,

对应的代码片段一部分,其中 a = arguments 报错

if (arguments.length > 1) {
     a = arguments
} else {
     if (g.C.isKdoms(p)) {
          return p
     } else {
          if (g.C.isarr(p) || g.C.isDoms(p)) {
               a = p
          } else {
               if (g.C.isstr(p)) {
                    a = /^n:(\w+)$/.test(p) ? _doc.getElementsByName(RegExp.$1) : _doc.getElementsByTagName(p)
               }
          }
     }
}

单独焦点图效果没问题,故问题应该不会出在上面这段代码上,估计是什么冲突了。文本编辑器打开专题页面,代码各种乱,不知道从哪个网站上面扒下来的,先大概浏览了下,把各种无用的脚本,多余的代码统统清理掉后,测试了下问题依旧。看来只有祭出大杀器了,删删删。随着页面代码不断删除,直到删掉这一行

<h2 id="a"></h2>

聚焦图效果正常了,看到这个代码,瞬间明白啥问题了。在低版本IE浏览器中,页面中id为a的元素,a就相当于document.getElementById(“a”),代码中arguments是个数组,a = arguments直接报错了。导致这个问题原因也很简单,网编为了方便,直接把各个锚点命名成a,b,c,d,e,…问题找到了,解决起来就方便了,直接让网编把所有的锚点都换成栏目拼音。

一个小问题,浪费了个把小时,太不值得,归根结底还是一个代码规范问题。对于一个网编来说,让她完全准守代码规范可能要求比较高了,但是对于一个开发人员来说,命名规范化,这点是最基本要求。

顺便说下另一个同事的事情,php开发人员,有一次我在检查他写的代码片,定义变量都是nimeide、madan、cao等等词语,果断打回去重写,写段代码至于带着这么多负面情绪在里面么。虽然这个小伙已经跳到新的单位,这种心态不调整,他的职业发展也不会这么顺利。

两年前我曾今去过一家单位,负责前端工作,由于各种原因,只待了一周的时间。入职第一天,除了基本的常规介绍,就是一份前端规范(网易的NEC规范,传送门),这个前端规范相对于一般的来说,样式命名书写更为复杂和繁琐,短短的一周2、3个页面完全按照规范来实施,虽然速度有点影响,一气写下来还是很舒畅的,而且后续的接手人员也不会觉得各种突兀,按着规范来很清楚各个部分代表什么意思。比较遗憾只待了1周,那个公司的网站目前看还是同行业里代码最优雅的,页面用户体验最好的。

以码认人,也不是不无道理的,一个代码写得优美规范的团队/个人,虽然技术能力不一定有多么多么的高端,至少是一个良好的开端,今后的发展不可估量。

关于各大互联网公司前后端规范,网上都能搜到,不在这里面列举了,有兴趣的可以自行搜索。

也谈代码规范化

@玛酷猫6年前

01/12
11:58
心情点滴

总结2013

又是一年年终时,照例总结一下过去的一年,放眼下来年新的一年。

生活方面新的转变,迎来了人生的另一半,告别单身生活,开始幸福的二人世界。虽然婚礼已经过去两个多月,还是感觉到幸福满满。同时责任也更加重了。下一步就是要实施造人计划,争取马上有宝宝。其他方面也有所调整,以前下班更多的是玩电脑,打游戏,看美剧,如今更多的是陪老婆,嘿嘿。

工作方面今年一年平平淡淡,年初进入一家新单位,平台还算不错,发展势头也蛮好,可是给予自身的发挥空间却不大,一年打杂下来有总碌碌无为的感觉。此消彼长的缘故吧,生活上有声有色,工作方面也就很平淡。其实还是给自己现在变得有点懒了找借口罢了。

这一年对工作的态度有所改变吧,可能还是岁数大了的缘故吧,相对于前几年,激情和冲劲都减退不少,尤其是有了家庭以后,重心慢慢侧重于家庭,想想以前同事一股冲劲,一心扑到工作上以至家庭不和睦,家庭工作相互干扰,再加上领导又没有什么表示,反而加以责罚。与其这样何必呢,工作家庭两手持平,在公司不浪费一分一秒,离开公司不谈工作,工作生活混为一团的人往往都没有什么好结局。不过自己创业另当别论,没经验没有发言权。

技术方面原地踏步,在技术突飞猛进的今天,相当于大踏步后退吧,也就剩经验这点老本了,遇到问题马上知道怎么处理,其他方面还真不如1-2年工作经验的新人。年初买了4本书如今也就只看了半本X2,还有本封皮都没开,以前能在技术群里聊的不亦乐乎,如今也只能潜水了,还经常被人叫“大师”,如今愧不敢当了。GDG的活动也很少参加了,各种主观客观的原因吧。新的一年技术这方面也要迎头赶上,准备深入研究下node,至少要达到能应用的地步。来年小宝宝诞生后,可能就更没什么精力学习了。

2014年是充满希望的一年,马上有小宝宝必然是排在第一位的,然后就当然是马上有钱,是人都没法免俗,工作和技术方面都希望有一些突破,多学习多交流。新的一年,努力奋斗。

总结2013

@玛酷猫6年前

08/22
17:52
计算机

云存储的战争

今天百度云盘大打促销,PC端、移动端、1块钱3步扩充1T云盘空间,数字公司紧接其后,撤去页面上的免费360G空间,直接换上1T空间,宣传语也换成不要1块钱,3B大战又开辟新的战场。话说如今网盘产品也非常多了,老牌的dropbox,微软的skydrive,Google Drive,再加上国内的115,华为,百度云,360云,腾讯的微云,新浪的微盘等等,总有种网盘太多,数据都不够用了。

老实说我自己网盘用的不是很多,装一大堆客户端,时时刻刻盯着你的硬盘,想想就不靠谱,尤其是国内基本没有什么信任机制可言。算下来用的最多的也就是dropbox,主要还是把手机上的照片同步到电脑上,虽然蓝牙或者数据线也可以满足,不过自己比较懒。其次就是QQ的微云,最早好像叫网络收藏夹还是什么的,毕竟每天都在用QQ,一些小东西直接往里面扔,虽然空间不大,记得刚开始就128M,后来开会员就大了些。115注册过账号,也基本都是下载别人的资源顺手保存在115上的。后来再用百度,用处也很单一,就是把别人共享的美剧放过来在线播放,彻底沦为看片基地。重要的数据还是习惯放到移动硬盘里面,所做的项目、各种工作文档、照片等等。反正现在硬盘也不是很贵。

我总觉得各家网盘的炒作容量其实就是争一个噱头,经常使用的大的东西一般是不会放到网盘上去的,等你想用的时候下载都要下半天,国内的网速还没有快到百兆光钎接入的情况。而小东西的话像平时的文档,编码,加起来也就几十M而已,直接打个包放邮箱都可以。可能有些人会说我就是喜欢把东西存档在里面,说不定过了几年或者十几年再翻出来看看。且不说几年后这个公司还在不在,即便是在的话,那些文件还能不能下的下来还是个问题。

对于云存储,我觉得够用就行了,针对不同需求灵活使用就好,没必要奔着哪家大用哪家。关键数据还是留在自己电脑里面或者U盘、移动硬盘更安全。实在觉得不方便的话还是找国外比较靠谱的云存储。空间有价,数据无价。

云存储的战争

@玛酷猫6年前

07/16
16:25
JS&JQUERY

Ajax的收录与history API

虽然google reader已经关闭,但是作为一个重要的学习途径,rss阅读之路还要走下去。

rss上面好东西还是不少的,毕竟还是有不少人还是分享自己的技术知识,今天看到了一篇文章《如何让搜索引擎抓取AJAX内容?》,以前经常在cnbeta上看新闻,就有个疑问,它的首页是不停的用ajax加载的,搜索引擎该如何收录。这篇文章至少提及了一种解决思路。核心就是靠history api来实现。这东东其实并不陌生,工作中经常会用到:

history.back;
history.go(-1);

在HTML4的中,经常使用如下几种方法

  • length:历史堆栈中的记录数。
  • back():返回上一页。
  • forward():前进到下一页。
  • go([delta]):delta是个数字,如果不写或为0,则刷新本页;如果为正数,则前进到相应数目的页面;若为负数,则后退到相应数目的页面。

在HTML5中,又增加了几种用法

  • pushState(data, title [, url]):往历史堆栈的顶部添加一条记录。data为一个对象或null,它会在触发window的popstate事件(window.onpopstate)时,作为参数的state属性传递过去;title为页面的标题,但当前所有浏览器都忽略这个参数;url为页面的URL,不写则为当前页。
  • replaceState(data, title [, url]):更改当前页面的历史记录。参数同上。这种更改并不会去访问该URL。

看完后突发奇想,岂不是这个方法可以用来掩饰钓鱼网站。。在chrome控制台里面试了下,直接报错“Error: SECURITY_ERR: DOM Exception 18”,看来担心是多余的,应该只能在同域名下使用。用这个方法也可以在网站上面搞搞恶作剧,比如做一个好玩的页面,pushState替换成另一个恶搞页面,发给别人,别人不注意再复制转发的话,嘿嘿。再比如Google的20 Things I Learned About Browsers and the Web(需要科学上网),还有这个Eight Equals Equals Dee IN UR URLS(少儿不宜:))

Ajax的收录与history API

@玛酷猫6年前

06/24
18:25
心情点滴

深圳双飞一日游

一个偶然的机会,被领导安排前往深圳腾讯总部参加一个培训会,无奈时间太紧,在深圳也就停留了1天时间。回来后也就忙于各种各样的事务,一篇游记也就拖到现在。

头天傍晚就早早的去机场,新桥机场果然很不错,相对于谢岗老机场,打了很多,可是相对应的配套设施实在不完善,尤其是交通,机场大巴线路太少,还集中在汽车站火车站,顺便吐槽下机场大巴路线设计人员,有多少人是火车转飞机或者汽车转飞机的,路线至少要经过各大商业中心、住宅中心才是。和出租车司机讨价还价一番,120送去机场,真黑呀。。机场的东西真心不便宜,相对60一碗面来说,麦叔叔肯爷爷算是比较便宜的了,虽然套餐优惠没有了,汉堡鸡翅饮料40多还勉强能接受。吃饱喝足就是等航班了,估计还是新机场配套跟不上,坐在那就不断听广播里面说流量控制航班晚点的消息,我们的航班晚了3个多小时。。。等时间最磨人,机场的WIFI又都连不上,信号弱的一塌糊涂,只有开着电脑打小游戏。。。好不容易挨到航班来了,也困的快睡着了。结果就如旅行团那样,上机睡觉,下机尿尿。。。话说第一次坐飞机就完全睡过去了。。

到深圳已经凌晨2点多了,下机打车先去开会的地方踩个点,不愧为是高新产业园,高楼耸立,晚上黑灯瞎火,连个鬼都没有。地方找到后,我们按照地图指引直奔最近的一家快捷酒店,到地方后,我们眼前却是一片工地。。。顿时无力吐槽呀,看工地也不是一天两天的,去哪儿APP居然还有优惠促销活动。。无奈折返回来打的去了最近的一家酒店,直接找地方睡觉去了。

一觉睡到10点多,起来小逛了了下,其实就是从酒店出来到公交车站再到的士站,加起来不到500米吧,深圳具有海边城市一切特征,空气清新潮湿,到处是树,满眼是绿色,感觉还是很舒服,听人说到处都能见到芒果树和上面结的芒果。打车回到开会的地方,正值快下班的时候,高新区白天和晚上天壤之别,到处都是人,而且说粤语的人反而不多。中午大快朵颐了一顿美食,接着就是无聊的开会时间。开会就不多说了。腾讯总部还是满大气的,我们去的不是总部大楼,而是一个事业部,入口宽大的休息区,吧台上面有自助饮料和小食,墙上各种企业文化和培训计划,厕所墙面当然也不会放过,呵呵。之前在网上看到过跨国公司的办公室,心想在这办公多舒服,亲身体验果然不错。开完会常规性的圆桌会议,去了蛇口最繁华的商业街,听介绍当初附近的楼盘只有3-4千还没有人问津,现在都涨到5万了。。

饭后也就准备返程了,天气比较潮湿吧,深圳晚上也并不是很凉爽,有点闷热。看了下地图,地铁到世界之窗换成地铁到机场。没有想到深圳的地铁不能买联程票,索性看下世界之窗,拍个照片留个纪念。之后便是昏昏欲睡的地铁之路。到机场换完票已经11点了,机场附近的快捷酒店环境实在不怎么样,比起市区里面的差一个档次,价格还贵,果然机场附近什么都贵。第二天一大早的飞机,也就早早休息了。原本以为和来的时候海南航空一样机上也就一杯饮料,就在机场附近吃了份非常贵早饭,结果返航的深圳航空提供不错的早餐,水煎包/面+酸奶+大头菜+豆干+凤梨酥,味道还是不错。

流水账记完。老实说对深圳的印象也仅限于地图上四通八达的高速、满眼的绿色和超市清新的空气,有机会还是要再来深圳好好玩玩,顺便溜去HK体验下,哈哈

深圳双飞一日游

@玛酷猫7年前

05/28
18:15
心情点滴

也谈效率低下的组织

昨天看到小道消息的一篇文章《效率低下的组织是怎么产生的?》,这简直是先前公司的真实写照,乐过之后,仔细一想,不过大部分公司也都是这样,于是随手扔群里,果然反响一致,都是如此。

今天重新浏览以前的资料,准备把不需要的、过时效的东西清理下,结果翻出了一大堆名如《XXX问题与解决方案》、《XXX考核指标方案》、《XXX部门架构方案》、《XXX岗位职责流程》等等文档,有的还是几易其稿。回想当时开了无数次会,部门组织建来建去,内部拆来拆去,天天研究“什么他妈的流程问题、职责问题、界面问题、考核问题”,终于被领导喷了N次后,折腾了N个月后,才发现流程还是那个流程,制度还是那个制度,架构还是那个架构,一切照旧,唯一改变的就是员工被折腾的筋疲力尽。到最后没几个做实事的人,个个都是指点江山的人,不研究怎么发展,天天研究怎么玩办公室政治,一片“千秋万载、一统江湖”。无趣之极。

做技术之人就像那挑水的和尚,人员少得可怜,还要服务公司众多部门,原本表达能力就欠缺,稍不留神就被推到风口浪尖上,于是乎,

三个人忍无可忍,斗胆向上汇报,要求增加挑水的人手,越过数个层级之后,主持和书记总算收到了这个请求,经过各个部门季度会议的总结和分析,经过了数次激烈的探讨,总算可以从其他部门抽调过来一些和尚进行支援,但这些跨部门过来的和尚根本挑不动水,还对挑水的这几个和尚指手画脚,挑水的和尚再次请求,自己担任挑水的和尚团队负责人。总司组织部评估之后认为,三个和尚专业有余,管理能力不足,一番鼓励和劝解之后维持现状。

估计做服务型的部门,都是如此下场吧。企业越大,风气越严重。

很奇怪,国人就那么喜欢窝里斗,最近重温了一部以前看过的历史小说,里面同样提到这点,而且用“不以为耻,反以为荣”来形容,并把问题归结到罢黜百家独尊儒术上,几千年不断地扭曲误解原始的儒家思想的儒化下的结果。扯远了,呵呵

我的感触就是,不提高每个人思想觉悟(自觉性、责任心、荣誉感),搞什么都不能解决本质问题,三个和尚的故事也是如此。有些领导拼命的上各种EPR、CRM、信息化,也不看看实不实用,管不管用。到最后也无外乎钱花了,没啥效果而已。

也谈效率低下的组织

@玛酷猫7年前

03/27
18:00
心情点滴

整理一下reader,纪念reader剩下的时光

前段时间登录reader,被无情的告知reader即将关闭。这几天已经吵得沸沸扬扬,许多人前去情愿,也不知道google会不会考虑小众用户们的诉求。诚然reader的使用率逐步下降,以往自己每天早上第一件事就会打开看看,而现在估计个把星期才想起来去转转。快节奏的时代,再加上微时代的来临,大家更多地在微工具上互动,很少有人在认认真真的写有质量的博客了。

今天下午实在没状态,办公室闹哄哄的,半天写不出片点代码,干脆整理下reader好了。订阅的数目也不算太多,大概60多个,大部分是个网络公司的ued部门或者小组,还有一些前段大牛的博客。整个盘查下来,也有近10个订阅源要不打不开,要不已经成为域名待售状态。有几个博客换地址了,顺便把新的加进来,有十几个已经大半年都没有更新过了。这也说明现在写博客的人是越来越少了。
回头翻翻一年前曾经发过一篇文章,时隔两年,重新启程,看来这个结果并不意外。总的来说,自己从reader里面也学到了很多知识,突然终结reader也是有些遗憾的,毕竟没有一款软件能够很好地替代reader的位置。前段时间digg发话开发rss来替代reader,小期待一下。在最后日子里,还是多用用reader,有空的话吧标星的文章整理下,还是不少的。同时努力适应鲜果中,虽然真的不好用。。。

整理一下reader,纪念reader剩下的时光

@玛酷猫7年前

02/28
20:19
心情点滴

回顾这些年的小公司和大企业

工作了这么多年,接触到形形色色的公司也不少,有几百人的大企业,也有几个人的创业团队。很多人都喜欢去大公司,认为大公司相对小公司有更好的前景。诚然,大企业有大企业的优势,资源丰富,相关配套健全,分工细致,流程规范相对完善,在里面可以按流程专心做自己的事情。然而大企业也都有一些通病,架构臃肿,流程复杂繁琐,沟通交流效率低下,最要命的是人际关系复杂,勾心斗角,背后插刀屡见不鲜,职场电视剧展示的淋漓精致。同时各方各面都已经定型,一些做法风气也已经根深蒂固,很难扭转。大企业的管理成本也成倍增加,大部分时间都在对付各种表格、会议等等琐碎的事情。

离开原来的企业差不多快1年了,原来的单位有着大部分大企业通病,同时前期发展过快,各种管理制度、流程规范都落后于企业规模,每天基本都在人与人的内耗中度过。单从技术上面来讲,技术人员疲于满足各个事业部各种有理无理的需求中去,虽然人员不少,人员的热情斗志也都磨灭的差不多,近两年都没有开发出什么像样的产品。用一句话说就是臃肿的胖子,反应迟钝,不灵活。
而小公司也并没有想象中的那么有优势,敏捷思想提供了一种快速的开发思想,同时对团队里面的人员素质的要求也非常高,一方面要有很深的专业/行业知识度,同时还需要知识广度,技术团队不仅仅要站在技术的角度思考问题,同时也要站在运营、市场、客户等等多维考虑,这往往不是人才市场里面随便抓几个人就能玩得转的。随着这几年人才综合素质的大滑坡,再加上社会价值观风气的导向,创业团队/小公司发展难度越来越大。
以前和其他同事聊天,最常听到这么说“做完自己的事,其他的也管不了”,话虽不错,不过乐观了点,很多时候并不是你找事,而是事找你。同时个人觉得既然是企业一份子,也是要出谋划策的,即便是最底层的员工,所在层面看事情的角度不一样,看到的问题也就不一样。这就需要高层企业创造一定的通道,汇集下面的声音,所有采纳给与奖励,而不是一味的封堵打压员工的声音,长此以往,有想法也不会表达。
毕业快10年了,回过头看看,其实无论大企业还是小企业,工作最快乐的时候还是刚刚进上一家公司的时候,技术团队人都很单纯,公司人都很简单,没那么多弯弯肠子,虽然钱拿得不多,经常加班到很完,但那段时间还是最充实,成长最快的。之前还有不少人劝我回去,说平台多么的好,又都是熟人,但那个环境已经不在了,既然离开了就继续沿着自己的路走下去了,哪怕前路坎坷。

回顾这些年的小公司和大企业

@玛酷猫7年前

11/28
22:50
影视

观影少年派

好几年没去看电影了,正巧昨天赶上影院半价日,去欣赏了下李安的大作《少年派的奇幻漂流》(Life of Pi),第一次3D体验也献给这部电影,不愧为是评分超过9的电影,绚丽多彩场景和视觉效果,丰富故事结构,尤其是电影最后那五分钟,“两个故事,你任选一个。选择第一个的,则相信上帝。第二个的,则相信自己”,让人深思。还有那句经典的格言:人生就是不断的放下,但最遗憾的是我们还来不及好好告别。

关于最后的两个故事,今天看了一篇所谓的重口味解读,点这里查看,其实细细读下来,也就是电影中的第二个故事,个人认为也比较合乎情理和常理中现实情况,虽然情形满残忍。说不定真实情况也就如此。或许我并没有什么宗教信仰,倾向于相信自己。

上帝是什么?
于信仰者,是一切!
与其他人,是自己!
跟随内心,两个版本。
你选择什么,便是什么。

观影少年派

@玛酷猫7年前

09/7
17:47
JS&JQUERY

JavaScript闭包和匿名函数

PS:最近在研究JavaScript的模块化,随手做些笔记吧。

模块化首先要了解两个概念,那就是闭包(closure)和匿名函数(anonymous function)。

关于闭包,网上文章非常多,有位牛人的这篇文章《闭包漫谈(从抽象代数及函数式编程角度)》写的很全面。话说数学相关的知识全都还给大学老师了,好多看不懂。

百度百科的解释:

闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。

话说百科的东西都是文字绕呀绕,把你绕糊涂位置,不看也罢。JavaScript的闭包官方解释:指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。一样文绉绉的,不解其意。套用网络通俗的解释就是“闭包就是能够读/写函数内部的某些变量的子函数,并将这些变量保存在内存中。”,其中两个效果,一是读写函数内部变量,二是常驻内存。

匿名函数是指那些无需定义函数名的函数。匿名函数与 Lambda 表达式(拉姆达表达式)是一回事。唯一的不同——语法形式不同。Lambda 表达式更进一步。本质上,它们的作用都是:产生方法——内联方法,也就是说,省去函数定义,直接写函数体。

引用网络上面一个例子

var baz;
(function() {
	var foo = 10;
	var bar = 2;
	baz = function() {
		return foo * bar;
	};
})();
baz();

尽管在匿名函数外执行,但 baz 仍然可以访问 foo 和 bar。
1,第 1 行,baz 是全局变量;
2,第 2 ~第 8 行,定义一个匿名函数;
3,第 3 和 4 行,foo 和 bar 是匿名函数内的局部变量;第 5 ~ 7 行,在匿名函数内定义一个匿名函数,并将其赋值给全局变量 baz;
4,第 9行,调用 baz。若改成 “alert(baz());”,将显示 20;
5,按理说,在匿名函数外不能访问 foo 和 bar,但是现在可以。
要注意的是,函数内部声明变量时,一定要使用 var 关键字,否则,声明的是一个全局变量。最早自己写代码很少注意这个,也出现过变量被修改的混乱情况。

闭包常用于两种情况,一个是保护函数内的变量安全。函数中foo和bar只有函数baz才能访问,而无法通过其他途径访问到,因此保护了变量的安全性。另一个是在内存中维持一个变量。依然如前例,由于闭包,函数中foo和bar一直存在于内存中。

由于闭包的维持占用内存的特性,频繁使用会大量消耗内存,引起内存泄露。如无特殊需要,尽量不适用闭包,如果使用,当使用完毕后,要记得释放占用的内存。

JavaScript闭包和匿名函数