猫窝私语 — Makumo's Blog

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

@玛酷猫11 年前

02/28
20:19
心情点滴

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

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

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

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

@玛酷猫12 年前

11/28
22:50
影视

观影少年派

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

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

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

观影少年派

@玛酷猫12 年前

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闭包和匿名函数

@玛酷猫12 年前

08/30
15:07
JS&JQUERY

javaScript模块规范、AMD、CMD

学无止境真是一点没错,IT行业新知识新技术简直是井喷状态在发展,这两年javaScript(以下简写JS)发展是相当迅猛,09年诞生的node.js成长迅速,今天又在网上看到AMD/CMD两新名词,互联网就是这点好,不懂可以查可以搜。

AMD/CMD其实都是JS模块化开发的规范。最早JS需求都很简单,基本都是写函数,一种面向过程的写法,后来慢慢的引入面对对象开发思想,慢慢写成类。随着应用程序的日益增大,JS代码行数迅猛增长,如何管理、组织、优化成为一个很头疼的事情。node.js的模块化写法让人眼前一亮,于是乎各路牛人纷纷效仿,各种写模块的规范也就涌现出来了。

异步模块定义(AMD)是Asynchronous Module Definition的缩写,是 RequireJS 在推广过程中对模块定义的规范化产出。规范传送门
通用模块定义(CMD)是Common Module Definition的缩写,是SeaJS 在推广过程中对模块定义的规范化产出。规范传送门
此外还有 CommonJS Modules/2.0 规范,是 BravoJS 在推广过程中对模块定义的规范化产出。
等等。。。

话说光看介绍理解不能呀,主要还是试试其中的功能,感觉一下,好像各大常用的JS框架也慢慢支持模块化调用,试用下,之后再来写写感受。

javaScript模块规范、AMD、CMD

@玛酷猫12 年前

08/21
16:18
JS&JQUERY

正则表达式中的反向引用

今天群里有人抛出一个正则求分析,如下:

^(?:(?!\d{4}).)*(\d{4})(?:(?!\1).)*\1

咋一看,整句全都是特殊符号,头晕中。不过正则表达式都是看起来晕,慢慢分析起来还是蛮有意思。里面有两天稍微复杂点,一个是断言,这个之前写过一篇文章介绍《正则表达式中的断言和非捕捉组》,另外一个就是反向引用,这个以前遇到的少,遇到不怕,搜索一下就好了。一下引用百度百科:

正则表达式的最重要功能之一是存储匹配的模式的一部分以供以后重新使用的能力。您可能想起,若在正则表达式模式或模式的一部分两侧加上括号,就会导致表达式的一部分被存储到临时缓冲区中。可以通过使用非捕获元字符 ?:、?= 或 ?! 来重写捕获。
反向引用
每个捕获的子匹配项按照它们在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。可以使用 \n来访问每个缓冲区,其中n 是标识特定缓冲区的一位或两位十进制数字。

清楚这个,上面那个就好分析了。借助Regex Match Tracer试着分析如下:

^边界开头条件,(?!\d{4}). 负向零宽度断言,意思断言自身位置的后面不能匹配四位数字,也就是开头到第一组四位数字为止,(?:(?!\d{4}).)*非捕捉组,不进行捕捉组记录。(\d{4}),第一个捕捉组,4位数字。\1反向引用,也就是前面第一个捕捉组所捕捉到的4位数字,(?!\1).,和前面的负向零宽度断言相同,意思断言自身位置的后面不能匹配第一个捕捉组的四位数字,这之间可以出现其他的数字组合。(?:(?!\1).)*非捕捉组,最后再跟一个\1,也就是第一捕捉组的那4位数字。

整体意思大概就是:从开始遇到第一个4位数字。继续,当遇到第二次同样的4位数字后截止,匹配这部分内容。

另外还有一点需要注意,就是反向引用如果后面要加数字,例如\10,不同的引擎会有不同的解释:在.NET中,这里的“\10”被解析成第10个捕获组的反向引用,但如果正则表达式加了RegexOptions.ECMAScript参数,则这里的“\10”被解析成第1个捕获组的反向引用加一个普通字符“0”;而在JavaScript中,在IE的浏览器引擎中,“\10”被解析成第1个捕获组的反向引用加一个普通字符“0”,而在Firefox、Opera等浏览器中,得到的结果为空,说明“\10”被解析成第10个捕获组的反向引用。为了防止这种情况,后面跟的数字一般用非捕捉组代替,例如:\1(?:0)表示。

本人正则表达式并不是很熟练,如有问题,欢迎指正。

正则表达式中的反向引用

@玛酷猫12 年前

08/16
18:21
项目管理

版本控制与版本号

头几年的工作也都没考虑过版本控制,一方面是和工作条件有关,那时候公司小,架构简单,开发也就1、2个人,交叉部分很少,自己做自己的就好了,另一方面自身也并没有版本控制的概念,直到09年。

那时候技术人员也将近10人,交叉工作比较多,尤其是程序人员和设计人员经常发生文件覆盖事件(那时候项目还没三层化,都混在一起),当时就想寻找一种解决方案才慢慢知道版本控制,于是便向当时领导提出应用版本控制,减少避免此类现象再次发生。虽然当时领导认同这一看法,但却没有实施,一方面可能是版本控制器没人会配置,当时并没有多余的设备用来架设,另一方面现有人员习惯了目前的开发方式,认为版本控制影响效率,版本控制推行难度比较大,最后也就不了了之,多注意多检查罢了。

PS:那是常常想当时可能不是部门负责人,没有资源推动实施,等自己做了负责人之后才发现,并不是成为领导就一定能推得动,新的思想、方法,部门绝大部分人尤其是老员工不支持甚至抵制,实施难度还是很大的。

时间到了今年年初,部门老人走了不少,新人又都比较支持的条件下,才上了版本控制器,也仅仅作为开发使用,一旦开发完毕上线后进入维护阶段,版本控制器也就不再使用,直接在运行的项目上直接修改。安全隐患也是蛮大的。不过自己离开原来单位有段时间了,现在使用状况也不得知。

说道版本控制自然也要牵扯到版本号。对于版本号都不陌生,IE6\7\8\9,office2000\2003\2007等等。这些只是简单的命名方式,常规命名方式主要有三种,以下引用百度百科:

1、 GNU 风格的版本号命名格式
主版本号 . 子版本号 [. 修正版本号 [. 编译版本号 ]]
英文对照 : Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]]
示例 : 1.2.1,2.0,5.0.0 build-13124
2、 Windows 风格的版本号命名格式
主版本号 . 子版本号 [ 修正版本号 [. 编译版本号 ]]
英文对照 : Major_Version_Number.Minor_Version_Number[Revision_Number[.Build_Number]]
示例: 1.21,2.0
3、.Net Framework 风格的版本号命名格式
主版本号.子版本号[.编译版本号[.修正版本号]]
英文对照: Major_Version_Number.Minor_Version_Number[.Build_Number[.Revision_Number]]

其实大同小异的了,借用原来的网站项目,可以把每次改版作为主版本号,板块的修改和功能的添加作为子版本号,每次的小BUG修改作为修正版本号,最后一项可以用版本控制软件累加的那个计数。版本号最关键的并不是怎么命名上面,而是每次版本变动的版本文档,里面会清楚的记录每个版本添加了什么功能,取消那些设置,修正了那些bug等等。当你向别人介绍产品的时候可以很清楚的说明这个项目经历多少次更新,原来有些什么功能,现在扩展了哪些功能。别人也能了解到你这个项目的发展情况。而这个正是我们现在缺乏的地方,随便抓个人出来连最基本的所有功能都说不全,就甭提其他的了。

其实版本控制并不是仅仅是上一个软件,大家都在用这么简单的事情,它也是一种迭代开发流程和思想,同时也是文档建设的基础。在每次同步版本控制软件的时候,都会有提示添加说明,其实在这里就应该把这次源文件做的哪些变动填写好,便于自己以后查找,同时也便于团队其他成员熟悉,最后也汇成版本文档。

下一篇集中写下开发流程和文档建设。

版本控制与版本号

@玛酷猫12 年前

07/5
16:01
心情点滴

写在7月初

6月注定是个烦乱的月份,发现每年都是,或许地球运行到某个特定的位置,再加上黄道和某些特殊的天体星座每年都恰好运行到这个固定的位置,从而对我产生极大的影响。好吧,以上都是YY。作为一个胖纸,每年六月份随着气温升高,状态就急剧下降,夏天就是胖纸的受难日呀。

D3发行一个半月了,作为一个从小就玩D1的玩家,本来是准备写点什么吐槽下D3的,在浏览了N个暴黑暴白的帖子文章后,反而觉得也没什么可写的。吐槽下,写点文章对个人而言无非就是表明下自己的观点,引起同龄人的共鸣之类的。早个几年还是愿意写些东西的,至少那个时候半数人愿意读完然后发表些看法,或认同或反对,气氛和谐的讨论。而如今这个浮躁的社会,往往都是“太长了,没仔细看”,然后就是一顿各种喷。有的甚至看都不开就开始喷,好的也喷坏的也喷,如今网络就是喷子的集中地。话说回来,虽然暴雪自己都承认D3是个失败的作品,但就目前而言还过早,想当年D2刚出来的时候也不是各方面都很烂,只不过D2比D1好太多,所以大家不觉得。作为一个MF游戏,慢慢玩下去才能体会MF的乐趣。

6月下旬出去走了走,问道武当山,回来的时候顺便寻觅了下武汉的美食,晒得通红的回来了。几年没出去旅游了,出去走走心情还是蛮好的,虽然累了点。整理整理写个游记好了,不过又不知道是什么时候了。有机会还是想去成都看看,看看传说中的慢生活是什么样的,当少还少不了成都的小吃和美女,哈哈。

天热也正好躲在家里静修,几年来杂七杂八的学了不少,都不成系统,也是要整理下,要不还是乱乱的,一问什么都会点,一深入啥都不清楚。以前上学的时候都是理论太虚,工作了实践太多有感觉理论缺乏,没有条理。难怪不少人工作几年再去上学。这段时间也正好多读读书,之前买的不少书还没看呢。

再过段时间就要入伏了,今年中伏还长,20天。作为一个胖纸,郁闷呀。。。

写在7月初

@玛酷猫12 年前

05/17
17:27
游戏人生

暗黑破坏神3发售的前前后后

一直在关注大菠萝的动态,想想当年上学的时候,几个人通宵MF,玩的不亦乐乎,快乐的时光呀。谁知大菠萝3却如此难产,年年都看到路透出来的照片,评论之类的,就是不见真身。记得当时火炬之光发售的时候玻璃渣觉得两者太相似,决定推到重做。。。

不过终于等到发售日的接近。前几天还上impk去MF了几把,找找感觉,虽然P都没有。记得10号的时候去看战网卡的时候还有正常价格的,就是存量比较少罢了,当时也没多想,觉得这东西就是一串数字罢了,要多少就能印多少。虽知道开发当天全线售罄。。。淘宝上的奸商坐地起价。原来大概300的1500战网卡被炒到2-3倍,无奈当天就把游戏装好了就睡觉去了。

第二天(15号)那更是惨目忍睹呀,听说货源严重短缺,价格高地离谱。NGA论坛上那是相当的热闹。不过事实证明,人的能力是无限可能的。现实各种各样的购买渠道一一被众人挖掘出来。什么美服官网直接购买呀,什么各种各样的买卡网站,紧接着对应的各种信用卡知识技巧,各种代理VPN翻墙知识技巧,各种断货奸商营销经济分析,涌现在论坛上,话说真长知识。当天也通过一家网站购买授权号,价格比正常的要贵一些,不过相对淘宝奸商们的价格可以说是便宜不少。

随后台服官网售点网站mycard(MC)也终于补货了,不过屏蔽内地IP,没法直接访问,不过这点也很难不倒众人,有着多年翻墙经验的我开vpn帮朋友买授权,不得不说NGA上对mc的评价一点都不为过:不管是页面、操作使用、各方面整体就是一个00年初的网站,购买过程中各种坑爹怪异事件层出不穷,买一份授权基本都要花1-2个小时,刷页面等待页面。还好我耐性好再加上论坛上面各种指南方法分析心得。要不早就摔电脑了。。。

不过暴雪的态度还是不错的,公开解释道歉。游戏刚开始玩,不多加评论,后续会慢慢写些感想吧。不过有一点可以肯定,暴雪出品必属精品。

暗黑破坏神3发售的前前后后

@玛酷猫12 年前

04/28
01:28
心情点滴 计算机

windows2003更换为windows7各种坑爹事件

家里的台式机自从09年买来后就没重装过系统,(当年买来时候的传送门)2003一直跑了3年,总感觉越来越慢,打个游戏经常掉帧,打魔兽世界效果中高下个本就只有20多帧,显卡驱动换了好几次都不行,玩起来真难受。机子里面装的软件游戏也不少,一大堆,还有不少都不清楚是什么软件,估计当初也就用了一次。决定重装下系统。后来一想装2003不如装7试试,说不定效果还好些。我的笔记本用的是windows7,双核1.2+HD3200的集显带魔兽世界都刚刚的,效果低+野外。

电脑配置如下:AMD7750,4G内存,迪兰4830显卡,技嘉770主板,3块硬盘。

先是备份数据了,桌面上东西还是蛮多的,还有收藏夹、C盘各种地方。幸好之前我的文档是放在别的盘符上面。然后清理了一下装过的程序,不认识的和基本用不到的,该卸的卸,该删的删。之后就调分区大小,我笔记本上C盘30G的空间现在只剩下3G多了,台式电脑C盘才20G,推荐下“分区助手”这个小软件,不到2M,有绿色版,简单明了,还是很好用的,地址就不贴了,百度下就行了。

先试下升级,毕竟能升级是最好了,很多软件、游戏都不用重装了。把光盘插入光驱,运行安装,一步一步,选升级,第一个坑爹事情出现了,提示不支持从2003升级到7,我擦。

虽说已经料到可能没法升级,没想到果然这么不给力,就是没法升。那简单,冲光盘启动,一步一步来好了。重启,启动菜单选光驱,进入安装界面,一步一步,选自定义安装,选盘符,提示有系统。小意思,选更多选项,格式化干掉你。再重复,选盘符,这时坑爹的事情再次发生,系统提示:无法创建分区或者选取该分区(大概这个意思)。我顿时就斯巴达了。

想想以前都是用U盘装的WIN7,PE系统里面带一个windows7的安装工具,也没这些问题。不过U盘丢在办公室了,家里还真没能用的U盘,在一番翻箱倒柜之后,翻到了一张256的SD卡。这个还是当年玩GBASP的时候烧录卡用的。怀着侥幸心理那这张卡做了一个U盘启动PE(幸好还有笔记本,要不真要出去买张带PE的XP盘了)。话说以前用SD卡/TF卡做了好几次U盘启动,都没成功过,不是不认识就是卡死。漫长的等待()这张卡速度真慢。。)做好后插到电脑上面,重启,启动菜单USB-HDD。屏幕上熟悉的load XXXXXX兴奋了半天。不过这张卡也真够慢的,进PE进了半天。

进去就好说了,运行windows安装工具,加载镜像,选好盘,下一步,预装,重启。正准备用笔记本刷会微博呢,台式机屏幕上没出现微软图标,倒是一行小字:OS load error 。这不坑爹吗。搜索了下,貌似应该是找不到引导分区,这个简单。重新进PE,用硬盘工具把引导干掉,重新新建引导,PE一个小软件修复引导,这个软件居然提示我检测到安装引导类型为windows xp/2003,吐血呀。。。按照windows7强行重建,显示发现6.X系统,然后直接重建失败。。。。

后来想了想会不会是挂了3块硬盘的原因,有点混乱。于是把另外两块拔掉,重新有走了一遍安装流程,这下终于顺利进系统了,关机,插上两块硬盘,一切OK,重新整理下盘符顺序。然后就是装驱动、常规软件、恢复游戏注册表(不少游戏都是硬盘版的,自带都有注册表工具),这个工作估计还要弄个1-2天,慢慢来吧。困了,睡觉。。。

话说刚装好系统的时候开机那个叫速度呀,估计也就20+秒,关机5秒不到。等都弄好以后试试游戏有没有什么改进,哈哈。。。

windows2003更换为windows7各种坑爹事件

@玛酷猫12 年前

04/25
20:35
计算机

也说垃圾评论

网络营销看来是遍布互联网的边边角角,就我这个小博客,每天也就是10来个访问量,一周下来也有近百个垃圾评论,话说很早就想吐槽这个了。现在连微薄现在都讲究高级僵尸粉了,这帮网络广告公司还在搞这种低级的机器人群发,WP就不用说了,akismet插件那是异常强大,其他的微博评论管理功能肯定也强大的要命,更不用说像新浪搜狐那些门户的微博了。国内互联网环境这种恶劣情况下,搞不好哪天就因为一篇评论关站的大环境下,各种过滤保护措施层出不穷,这种单纯的广告机发出去的评论最后能显现出来的近似于0,一旦被屏蔽,基本会进入黑名单,更别说像新浪那种大型的博客系统。

话说回来,也要说说机器人,回帖机的效率确实高,而且还能记录账号信息,识别验证码,在论坛上面使用效果也还不错,毕竟论坛为了正常的发帖,并没有非常严格的过滤,还是需要人工审查的。但是在微博上面,效果还是差很多。垃圾评论无外乎是做SEO,增加一些站点的外链,被人点的几率非常低。

针对博客的机器人式的营销推广也需要更换一种方式,论坛那套明显效果很差,可以设置一定量的关键词库和对应的回复内容,针对博文内容分词或者就针对博文设置的关键字,筛选回复一些相关的东西,回复的内容可以完全不出现链接或者推广的关键字,只要在电邮、网址上面体现就好了,效率肯定会大幅度降低很多,但至少通过审查相对来说轻松一下。

也说垃圾评论