易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
来自Fenng:创业团队成员的「挑战」以及「成长」的问题

来自Fenng:创业团队成员的「挑战」以及「成长」的问题

以下这篇文章来自于Fenng的博客,主要是其中有几段对我来说很有意义,当前我也是正处在一个创业公司中,也遇到了其中所提到的一些问题,工作量和工作难度这一点其实很多时候都无法界定,工作量大的时候,工作难度肯定是低的,这让我想起很久以前看到过的一篇文章:某一个实习生去某大公司实习,发现做的都是一些重复重复再重复的事情,问其他人为什么不改变,或简化流程或合并制作,但很多老人都告诉她还是按部就班吧;她不愿意这样,于是在实习期间自己想办法把自己的工作简化了流程,提升了很大的工作效率,实习结束后,被上面看中升为了部门经理。嗯,其实大家都知道做网站很多时候大量的时间都浪费在做表单上,不过也没有办法,总是各种各样不同的表单,于是很多人就开始做表单自动生成器,表单验证器,这何尝不是一种学习?
哎,不说废话了,看看Fenng怎么说的吧,我会将一些话标红,也希望能够引起共鸣: 创业团队成员的「挑战」以及「成长」的问题

回想从最初开始负责丁香园技 术团队到现在,团队规模已经增加了几倍,有人离职,也有更多的人加入。团队一大,自然有些问题会浮现出来。比如最近在和团队同事聊天或是面试面谈的时候, 经常会听到类似的话「觉得现在的工作没什么挑战」或是「感觉学不到东西」,以前偶尔听到团队同事这样的反馈,还是挺让我着急的,我第一直觉是很惭愧,公司 或是团队给同事提供的资源和机会太少了,于是,不停的争取资源或是尽量改进,但是最后我逐渐发现,这样还是不能完全解决问题,这并非是问题的根源,因为一 方面有人说没挑战 ,一方面是一堆老大难问题很久得不到解决。觉得「没挑战」和「没成长」其实是很多人会有的心态,尤其是刚参加工作没几年的容易形成这样习惯上的认知。

我以前写过一篇 工程师在创业团队的技术挑战 ,说了一下我对技术上的「挑战」的看法,现在趁着有点空闲,再谈谈谈创业团队中的成员的「挑战」以及「成长」的问题。{请注意,这只是一篇随笔,我无意去讨论什么管理之类的废话,也不奢望就这么几个字能解决所有问题,对少数人起到一个提醒的作用就足够了}

一般觉得工作没什么挑战的,原因可能无外乎几个: 要么认为自己的能力足够高了,不屑于再做「简单」的事情; 要么认为自己是在做「重复」的工作;要么,觉得没接触到新东西;也很有可能只是各种借口或是「心态」的体现。

实际上,任何团队中都没有「简单」的事情,只有做得好或是做不好的事情。什么是简单? 给产品写一段文字说明够简单么?写一封 EDM 够简单么? 如果仔细推敲的话,会看到绝大多数文案都是糟糕的一塌糊涂,那么为什么不用更高的标准要求以下自己呢?既然能力够高了,为什么你说的「简单」的事情还做不好呢?所谓眼高手低,不就是说这种情况么? 如果小事情做到比别人好,那么大一点的事情团队就会更加放心的给你去做。否则的话,换了是你,你也不会将重要的任务交给连小事情都做不好的人吧?

任何团队中也没有「重复」的事情。任何事情,如果不针对反馈做任何改进的话,做第二遍你就会觉得是重复;而如果每次都能根据反馈不停的修正,那么做 成千上万次可能还会找到乐趣。比如说我们网站经常要给用户设计一些广告图片,有的同事说,总让我做广告图片,枯燥、乏味,我的设计能力如何得到提高? 的确,如果每次都用最低的标准要求自己,怎么提高呢?客户或是同事给你的反馈,比如,图片上的文字都是毛边的,无论怎么说你都无动于衷,那么怎么可能真的 提高呢? 所以,面对「重复」的事情,必须不断的给自己设立新标准,然后努力去突破,重复的事情里面依然大有文章,想想如何提高质量,再想想如何提升效率。

至于说接触不到新技术,其实问一句话就好: 你业余时间为什么不学呢? 大部分回答是: 没时间。这是无解的问题。一般听到「没时间」,有时间整天逛淘宝难道没时间学习么? 其实潜台词都是「这是不重要的事情」,任何事情,你不投入比别人更多的精力,怎么做到比别人更好么? 正所谓,「以大多数人的努力程度之低,根本轮不到去拼天赋」,同样,不做好准备,也等不来机会。

至于心态,我引用丁香园 CEO 张进的一句话:两个都是新入职的同事,也都是第一份工作,交给他们差不多的事情做,一个想「他奶奶的,就这么点工资,让干这么多活?」,另一个则想「没想 到新人都给这么多机会锻炼」,你说过几年谁的成就更大? 这或许可以回答某些人的疑问「为什么我和同学毕业的时候都差不多,怎么过几年不见,人家都做到某公司总监乃至副总了,我还是在不停的换工作?」,就是心态 导致的差异。

有些人觉得创业团队或是小型公司里面,资源少,「学不到什么东西」,其实,是你没仔细去学习应该学的东西。前几天给几个好友的新创业项目提建议,我 说你们某个地方做的不及格,他们说要我给讲讲,我说这个应该不用讲的,你们团队中的某某,以前看过我做同样的事情,按理说,他也能做一下的。遗憾的是,没 去做,也做不来。为什么? 别人做他熟悉的那一点领域之外的事情,他是漠不关心的,意识不到学习更多东西是有价值的。有人说,问题就是机会,团队的问题,就是每个人的机会,谁能解决 掉,就会给团队带来更大的价值,相应的,他也会得到更大的回报。而在创业团队里面,恰恰是需要解决问题的人,不欢迎那些不动脑筋的螺丝钉。创业团队中,可 接触的问题不可谓不多,公司的方方面面都需要有人动手来做,如果平时多用点心思,学到的东西早晚在将来还会用到。很多人不都是有创业的想法么?但是你连基 本的积累都不够,创业? 怕是要撞墙。

那么是不是在大公司里面才能让人得到锻炼呢? 曾经遇到过不少工程师当面告诉我,想去某某大型互联网公司去工作几年,提高一下技术,遗憾的是,几乎没看到一个人在几年后能力真的得到提升,有的甚至退 步,为什么?一个很大的原因是,大公司里面多数的事情都已经固定下来了,而很多牛人之所以牛,是因为他们遇到公司从小到大的过程,在这个过程中他们得到了 难得的成长机遇,不停的学习充实自己,解决各种问题,才成为牛人,牛人也多是苦日子熬过来的。等到天下皆定,哪还有那么多硬仗好打呢? 另外,「想锻炼技术」并不是一个很好的出发点,单纯的想锻炼技术实际上并不利于「解决问题」,培养能力和意识更为关键。

我在微博上调侃过:很多人都希望找到一个完美的公司,比如,办公室要无比舒适;用最好的设备;完备的培训机制,还别占用休息时间;弹性工作制;别他 妈太累;也别让老子加班;公司前台要好看;没有刻板的工作流程;工作要有创造性不是重复劳动,别管我是否有创造性;队友不是猪而且都是天才,遇到困难他们 就会出手解决;做的事必须是最潮的,但别管赚钱与否... 还有,最重要的,薪水要高。遗憾的是,这样的工作估计是做公务员也不一定完全具备,只会让自己更加痛苦,甚至增加无谓的抱怨。

提起抱怨来,也有必要说一下对队友的抱怨这个事情。曾经见过有人对一起合作项目同事的抱怨,比如设计师抱怨合作的产品经理有问题,总要不停的修改, 时间长了,认为产品团队都很烂,经常打扰你,那么有没有想过,你是否可以给产品设计提出更好的建议呢? 甚至,有些产品设计你是否可以进行改进呢? 什么?「那不是我的工作!」 可是,为什么要给自己的能力设定一个边界? 这是多么可悲的事情,你完全可以无限制的突破边界,突破个人的局限。或许再过几年你会成为一个更好的产品设计师的啊。Zynga 的核心价值观有一条是「Level up」,不断升级,这恰恰是我们普遍缺少的心态。

的确,这是个浮躁的时代。大家容易听到各种各样的声音,每当心存困惑的时候不妨静下心来,加强对自身的认知。别幻想着走捷径,也尽量少去问别人如何成功,那些没有用,只要你别总在错误的路上越绕越远,将一些看似细微的事情做到更好,最后的成就依然惊人。

看清无处不在的「挑战」,让自己真正有所「成长」,毕竟,以后每个人都要承担更多的责任,只要你愿意。

--EOF--

最后补充一句话:「一个真正聪明的人,应该去发现别人话语中合理的部分,并且加以吸收利用,改正自己不正确的地方。而不是一发现别人言语中有漏洞或是有疑议就全盘否定。」

---------------

上面的内容全部来自于dbanotes.

假日记事

假日记事

三天的小长假转瞬即过,期间发生了一些事情,随便记录记录
1、水管。水管的事情以前在博客里也提过,爆了两三次了,但以前都是头疼医头,可是这样折腾几次之后反而更累,所以这次乘着小长假,直接铺明管了。虽然打了不少洞,但水力是大了不少,感觉也好一点了。只是不知道这次水管的寿命是多久,每一次新材料出来都说可以用几十年,但事实上十年左右都算长的了。原来的复合管理论上是40年左右,其实也就是15年不到,接口就裂了。哎

2、手表,swatch,也是新材料的事情,老婆买的手表,说是表带是新材料,很开心,结果还没有满半年,表带就裂了。然后乘着小长假想去换个表带,结果swatch的人说表带不属保修范围,那问了一下,表带换一下多少钱,服务员很平淡的说,200。我问他表多少钱,他说表500多,我晶啊,一个表带200,一个表才300多,怪不得表带不属保修范围内。老婆是下决心不再买swatch了。也要和朋友们说说,少买啊,所谓的新材料,实在不保险,关键是裂开的地方还不是那些经常使用的部位。

3、小朋友。小朋友发高烧了,这回愿意贴冰贴了,问他为什么现在愿意以前不愿意,回答是我长大了呀。每次都感觉他在生病一次后,人会长大不少,会懂事不少。所幸这次只是发烧,其他没啥大事。

4、其他。其他的事情就是物价上涨了,以前6块的拉面,现在8块了;以前6毛的油条,现在1块了;以前1块的包子,现在1.5了,这种上涨幅度太吓人了,以后不知道还会涨成什么样子。以前100块真的可以用1周,现在一破开就不知道用到哪里了。可乐这么多年来都是2.5左右的,现在也3.2了。哎,喝不起了。看来以后还是需要象小时候那样,每天带个水壶了。

怎样吸引用户

很简单的几个想法,也只是我个人的见解没有其他意义,请不要深究

1、有内容,至于这个内容是什么样的,仁者见仁,毕竟每个人的爱好都不一样,是想要小众还是大众,得看产品定位,但切不可乱,一乱就麻烦了

2、有争议,如果没有争议,只是平庸,终究很快就被人淡忘

3、有品味,这个品味不一定是指内容高雅,也许是设计,也许是操作也许是其他

4、有手感,如果网站(APP)的操作没有流畅度可言,也是不会留住用户的

5、有互动,这就不多说了,SNS就是最大的互动,但怎么样算是做好,就难说了。。。

6、有深度,不管是内容还是品味,还是其他,要有深度,太肤浅的东西,或者刚开始有兴趣,但不会让用户有停留

7、有更新,不一定是说内容更新要快,也可能是网站(APP)经常会有一些小亮点,这点对于升级控来说很重要,即使不是升级控,或许多一个贴心的小功能也会让人很开心,增加粘度。

其实还有不少,但不想说了,反正说白了,要多为别人考虑,同时也要将自身代入,试想,如果是你看到这个网站或者APP,你会怎么看待它,等这个做好了就完满了。

几个有用的网站链接

我日,写了半天就没了。。。

1、http://www.colorzilla.com/gradient-editor/
A powerful Photoshop-like CSS gradient editor from ColorZilla.

2、http://www.speich.net/articles/2010/07/27/how-to-create-php-documentation-in-phpstorm/
如何配置phpstorm中的phpdoc

3、http://www.ibm.com/developerworks/cn/aix/library/es-unix-perfmonsar.html
http://www.cnblogs.com/jackyrong/archive/2008/08/02/1258835.html
这两天我的VPS经常CPU过高,11爷推荐我说用Sar,由于不清楚sar,所以找了点资料,上面的URL是我找的,下面的是11爷给推荐的

4、 http://www.cnblogs.com/stephen-liu74/archive/2012/03/28/2357783.html
http://blog.nosqlfan.com/html/2942.html
http://www.cnblogs.com/stephen-liu74/archive/2012/03/26/2356951.html
Redis 相关资料

5、http://www.myhack58.com/Article/html/3/62/2012/32870.htm
http://www.linuxde.net/2011/11/1953.html
这两个URL是防范http trace攻击的

6、http://jsfiddle.net/k5VET/
http://www.zhangxinxu.com/study/200909/text-overflow-ellipsis-so-on.html
关于文字内容溢出用点点点(...)省略号表示
-------
暂时只放这么多。。。

让CRONTAB精确到秒的执行任务

让CRONTAB精确到秒的执行任务

众所周知,crontab的最小粒度是分,即当第一位是“*/1”时,即最小单位是每分钟执行。
但是,有时候我们要按秒执行,当然这是比较夸张的了,但每半分钟执行一次还是有可能的,这时候就没有办法了,所以后 来 找啊找,就找到了一篇说明:

*/1 * * * * sh /root/cron.sh
*/1 * * * * sleep 30 && sh /root/cron.sh

执行的时候先sleep 30秒,变相的达到每半分钟执行此命令,果然很变态

windows下面也有模拟crontab的软件,如crontabs,pycrontab等,都是注册成一个服务,然后再执行,但是没有一个软件是比较好用的。总有小问题。

一段无聊的代码[多行自动截取字符并加上...]

一段无聊的代码[多行自动截取字符并加上...]

一段未优化过的无聊JS代码,暂时不优化了,以实现为主:

<style type="text/css">.zxx_text_overflow_6{ width:100px; height:100px; border:1px solid #CCC; }</style>
<div class="zxx_text_overflow_6">
<img src="i.png" alt="" style="float:right;width:50px;" />
<p>你个杀千刀的,怎么写了这么多的文字,我要被拦腰截。断了啊,kitty救我!你个杀千刀的,怎么写了这么多的文字,我要被拦腰截断了啊,kitty救我!你个杀千刀的,怎么写了这么多的文字,我要被拦腰截断了啊,kitty救我!你个杀千刀的,怎么写了这么多的文字,我要被拦腰截断了啊,kitty救我!你个杀千刀的,怎么写了这么多的文字,我要被拦腰截断了啊,kitty救我!</p>
</div>
<script type="text/javascript">
String.prototype.strtoarray=function (){
var t=[], b=/(\s*[\S\u00ad]+\s*)/g, f='';
for(i=0; i<this.length; i++){
c=this.charCodeAt(i);
t.push(c>128?" "+this.charAt(i):this.charAt(i));//p += c < 128 ? 1 : (c < 2048 ? 2 : (c < 65536 ? 3 : 4));
}
//s = t.join("").split(b);
return t.join("").split(b).join("Ω").replace(/ΩΩ/g,"Ω").split("Ω"); //这一段其实挺有意思,理论上,上一句就OK了,但事实上这一句才正常。。。好吧。
// return s;
}
var t = +new Date();
var d=document.querySelector(".zxx_text_overflow_6");
var p=document.querySelector(".zxx_text_overflow_6 p");
var pInfo = getComputedStyle(p);
var s=p.innerHTML.strtoarray();
var pData = [];
p.innerHTML='';
for(var i=0; i<s.length; i++){
p.innerHTML+=s[i];
pData.push(s[i]);
if((p.offsetHeight+parseInt(pInfo.marginTop)+parseInt(pInfo.paddingTop))>= d.offsetHeight){
if(s[i-1]!="。"||s[i-1]!='.'){
p.innerHTML = pData.slice(0,-2).join("")+ "...";
}else{
p.innerHTML = pData.slice(0,-1).join("");
}
break;
}
}
alert("执行时间" +((+new Date()) - t )/ 1000 + "秒");
</script>

效果如下:
9625d3f133c2a53f80f4ebf9675e6532

转:蛋疼的版本提交日志TOP10

10. XXXX项目-改版 // 你用一次也就罢了,需要整个项目期间提交的日志都是这句话嘛...

9. 修改 // 如果版本提交不是做修改,莫非骗提交率来了?

8. BUG修改 // 是不是还要先提交一个版本叫做“BUG生成”?

7. 修改BUG // LS的,猿粪呐!~

6. 测试 // 册那...

5. test // 猿粪,又见猿粪

4. 版本更新 // 俺又不是siri,发出这种让人产生联想的指令干嘛,讨厌~

3. update // 你就算说英文俺也变不成siri

2. publish // 小样,会的词还挺多啊!

1. svn // 靠.......

---------

挺有意思,不过,我大部分还是习惯将主要更新内容扔上去,但如果一次上传过多的时候就没办法写了。一个一个的上传也不是个办法。。。

IOS不再允许使用UDID

IOS不再允许使用UDID

上面一则新闻来自macx,原文地址是:http://www.macx.cn/thread-2041511-1-1.html
iOS设备的设备唯一识别码UDID(unique device identifier),顾名思义就是每个设备只有这一个标识符,与设备硬件相关,是无法更改的。根据报道苹果从本周开始已经开始禁止第三方应用程序使用 iOS设备的UDID,并指出苹果将在下周开始加强设备UDID的隐私保护。

在iOS 5条款中,苹果已经对开发者进行了提醒,使用用户设备UDID是不赞成的并将逐步取缔这一做法。消息称苹果的十个App审核团队中已经有两个开始禁止使用UDID的应用通过审核了,据说下周将增加到四个。

一些第三方开发者表示,如果苹果有明确禁止使用UDID的条款颁布,那他们会按照新标准执行,不过他们还希望看看未来的形式如何发展。无论是开发者还是广告商都将受到新政策的严重影响。

苹果最近被隐私问题腿上风口浪尖,美国国会也几次三番要求苹果解释隐私保护问题,苹果可能也是出于外接压力才进一步紧缩iOS条款的。

如何查看自己iOS设备的UDID:
将设备链接到电脑iTunes,本机信息原来显示序列号的地方点击一下,即可看到标示符UDID信息
----------------
基于上述新闻,于是就有了下面这篇文章,嗯,当然也不是我写的,原文地址是:http://pingguohe.net/2011/08/25/uuid_after_ios5/

iOS5已经发布了6个beta版,除了在用户体验上的提升,对于开发者来说也有很多变化,最大的莫过于对UDID的限制访问。在之前的iOS应用 中,我们一般使用UDID来标记一个用户,基于UUID建立用户数据库。现在,安装了iOS5 beta 6的设备上已经取不到UDID,[UIDevice uniqueIdentifier] 只能返回一个“5.0”了。

取代被禁用的iOS UDID,其实有很多方法,比如,有人建议使用网卡mac,但我不建议使用这种方法,mac地址属于用户隐私数据,我想如果你试图获取用户mac并上传,review通不过。

官方给出的建议是CFUUID:

An alphanumeric string unique to each device based on various hardware details. (read-only) (Deprecated in iOS 5.0. Instead, create a unique identifier specific to your app.)

@property (nonatomic, readonly, retain) NSString *uniqueIdentifier
Special Considerations

Do not use the uniqueIdentifier property. To create a unique identifier specific to your app, you can call the CFUUIDCreate function to create a UUID, and write it to the defaults database using the NSUserDefaults class.

通过CFUUIDCreate创建一个CFUUID对象,存入NSUserDefaults,作为用户身份的唯一标示。

官方对CFUUID对象的解释如下:

CFUUID objects are used by plug-ins to uniquely identify types, interfaces, and factories. When creating a new type, host developers must generate UUIDs to identify the type as well as its interfaces and factories.

UUIDs (Universally Unique Identifiers), also known as GUIDs (Globally Unique Identifiers) or IIDs (Interface Identifiers), are 128-bit values guaranteed to be unique. A UUID is made unique over both space and time by combining a value unique to the computer on which it was generated—usually the Ethernet hardware address—and a value representing the number of 100-nanosecond intervals since October 15, 1582 at 00:00:00.

The standard format for UUIDs represented in ASCII is a string punctuated by hyphens, for example 68753A44-4D6F-1226-9C60-0050E4C00067. The hex representation looks, as you might expect, like a list of numerical values preceded by 0x. For example, 0xD7, 0x36, 0x95, 0x0A, 0x4D, 0x6E, 0x12, 0x26, 0x80, 0x3A, 0x00, 0x50, 0xE4, 0xC0, 0x00, 0x67 . To use a UUID, you simply create it and then copy the resulting strings into your header and C language source files. Because a UUID is expressed simply as an array of bytes, there are no endianness considerations for different platforms.

可以看到CFUUID就是对GUID的一种封装,提供了创建方法和各种各种格式转换的方法。

以下代码是我对CFUUID和NSUserDefaults的封装,可以作为唯一标识来使用。

//
// NewUUID.h
//
// Created by jiajun.gao jiajun.gao on 8/25/11.
//
// Create a UUID by self.
//
// Call like this:
//
// String *iNeedUUID = [NewUUID identifier];
//

#define NEW_UUID_KEY @"uuid_created_by_developer"

@interface NewUUID : NSObject {

NSString *uuid;

}

+ (NSString *)identifier;

@property (nonatomic, retain) NSString *uuid;

@end

NewUUID.m

#import <Foundation/Foundation.h>

#import "NewUUID.h"

@implementation NewUUID

@synthesize uuid;

- (id)init {
self = [super init];
if (self) {
uuid = NULL;
return self;
}

return nil;
}

+ (id)_instance {
static id obj = nil;
if( nil == obj ) {
obj = [[self alloc] init];
}

return obj;
}

+ (NSString *)identifier {

NSUserDefaults *handler = [NSUserDefaults standardUserDefaults];
[[NewUUID _instance] setUuid:[NSString stringWithFormat:@"%@", [handler objectForKey:NEW_UUID_KEY]]];

if (NULL == [[NewUUID _instance] uuid] || 46 > [[[NewUUID _instance] uuid] length]) {

CFUUIDRef uuid = CFUUIDCreate(NULL);
CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);

NSString *result = [NSString stringWithFormat:@"%@-%@", @"new-uuid-", uuidStr];

CFRelease(uuidStr);
CFRelease(uuid);

[[NewUUID _instance] setUuid:result];


[handler setObject:[[NewUUID _instance] uuid] forKey:NEW_UUID_KEY];
[handler synchronize];
}

return [[NewUUID _instance] uuid];
}

@end
CPU突然过高。。。

CPU突然过高。。。

突然收到一封邮件,来自linode。。
Your Linode, linode????, has exceeded the notification threshold (90) for CPU Usage by averaging 111.6% for the last 2 hours. The dashboard for this Linode is located at: <https://manager.linode.com/linodes/dashboard/????>

This is an automated message, please do not respond to this email. If you have questions, please open a support ticket.

You can view or change your alert thresholds under the "Settings" tab of the Linode Manager.

This is not meant as a warning or a representation that you are misusing your resources. We encourage you to modify the thresholds based on your own individual needs.

-----------
上去一看,果然:
211a8107f45229a83d239e4a61a081a1
现在开始怀疑,burst的服务器挂掉是不是也是因为这个原因。但,一点不通知也不应该啊。看LOG也看不出什么原因,真纠结啊

一张图引发的思考

一张图引发的思考

这张图和开发有关,是别人在QQ上发的。我觉得很有内涵,其实做到后面,大家都会知道,工作重心在哪里,但在工作初期,面对着工作安排的时候,总是找不到自己的重心,明明自己做了很多事情,但别人都看不到。事实上,别人关注的是结果,但你一直在过程上往复往复,别人当然无法看到。如果结果有出来,而且随着时间的推进,你一步步的优化,别人看到结果一点点变好,不是更好吗?

77d8ebde7740cdae7cee11b57716bee3

你想一次性做完,但其实不可能考虑的很多,但却在局部上耗费了大量的时间,反而影响整个项目进度,不是吗?

-----

后记,因为图是QQ截图中的,所以少了一个header。经11爷指点,才知道这个图是这里的:http://blog.xiqiao.info/2012/03/16/1150

不好意思啊,西乔。。。