产品经理的20堂必修课

1.从用户需求出发

任何产品想要有用户使用,就必须以满足用户需求为目的。

美国人本主义心理学家马斯洛把人们多种多样的需求分为八大类:生理需求、安全需求、归属于爱、尊重需求、认知需求、美学需求、自我实现、超越需求。

让产品的核心功能满足人们的基本需求,才能得以获得市场的最大效果。

2.围绕用户需求打造产品竞争力

两种常见而有效的围绕用户需求打造产品价值的策略:

  1. 用颠覆性的方式满足用户的核心需求。
  2. 集中精力充分满足用户的几个期望型需求。

3.为什么我们的产品总是失败

九个字:用户对它并不感兴趣。

###4.简单,让产品更加锋利

乔布斯说:“简单之所以比复杂更难,是因为你必须努力地清空你的大脑,让它变得简单,但这种努力最终被证实为有价值,因为你一旦进入那种境界,便可以撼动大山”。

用户喜欢简单的产品,因为懒惰是人的天性,人们在使用产品时,不愿被打扰,不愿意做过多的思考,不愿意进行复杂的操作,他们只想自己的需求轻松地得以满足。

要将一款产品做的足够简单,则要遵守以下几个原则:

拒绝不重要的功能、功能主次分明、循序渐进地引导用户、让产品更加智能。

5.用运营构筑产取决于产品竞争壁垒

产品的竞争力高低主要产品功能符合目标用户要求的程度,但是随着互联网技术的发展,产品功能越来越容易被模仿,所有功能上的竞争优势往往很难长期维持。而由运营确立起来的优势却不一样,内容和用户都要靠时间积累出来,一旦你的产品再内容和用户上确立起绝对领先的优势,产品的竞争对手要想在短时间内对你构成实质性的威胁就非常困难。

6. 互联网产品战略

  • 上兵伐谋-互联网战争中的谋略
  • 求之于势-兼顾全局发展
  • 霸道进攻-抢占互联网渠道
  • 王道防守-打造非凡产品功能与内容

7.互联网产品团队

在互联网公司,产品团队是公司最核心的团队。产品团队的好坏不仅决定了产品的更新频率,而且在很大程度上解决了产品质量和产品效果。

产品团队的关键角色包括:产品经理、设计师、开发工程师、项目经理、测试人员、运维工程师、QA人员。

8.产品经理的工作职责

产品经理的工作职责可分为5个方面:

产品策略制定、用户需求分析、产品功能规划、产品功能开发、其他。

9. 用户需求分析

如何进行用户需求分析,挖掘最有价值的用户需求:

  • 进行用户需求分析前,需先获取用户需求(用户反馈),通过邮箱、QQ、论坛、调查问卷等。

  • 产品经理在获得用户反馈的同时,需要深入地分析用户反馈背后的相关信息,将用户反馈解析为用户需求。

  • 过滤无价值的用户需求,通过 是不是目标用户的需求、是不是目标用户的普遍需求、是否与产品定位相符合 等标准来判断是否具有价值。

10.产品需求管理

产品经理根据用户需求规划产品功能,这些待实现的产品功能对于产品来说就是产品需求。

为了便于记录、评估和跟踪产品需求,产品经理需创建和维护一张产品需求列表,对所负责产品的产品需求进行系统的管理。

11.流程图制作

制作流程图的目的主要有2方面:

  • 帮助产品经理梳理、完善用户操作流程。
  • 有效降低团队成员间的沟通成本。
    常见的流程图软件有:visio、ominiGraffle等。

12.产品原型制作

产品原型是用于表达产品功能和内容的示意图。涵盖3要素:元素、界面、交互。

常见的工具有:Axure、photoshop等,另外mac环境强烈推荐【sketch】。

13.商业需求文档(BRD)撰写

BRD(Bussiness Requirement Document)是指基于商业价值所描述的产品需求内容文档,其核心用途是作为公司高层

决策评估产品项目是否开展的主要依据。

主要内容应包括:用户价值、商业价值、目标市场、市场规模、竞争格局、市场时机、产品目标、功能概要、实施计划、产品定位、产品愿景、产品成本、产品风险。

14.产品需求文档(PRD)撰写

PRD(Product Requirement Document)即产品需求文档,主要用于完整描述产品需求,向研发部门明确产品的功能和性能。

常见内容:版本修订记录、项目概述、项目价值、项目背景、场景描述、功能总表、业务流程图、用户界面、功能描述、非功能需求、附录。

15.项目管理主要步骤

  • 制定项目计划
  • 跟踪、控制项目计划的执行

16.如何提升项目管理效率

  • 严格控制产品范围,尽可能减少需求更变次数
  • 构建良好的沟通机制和渠道
  • 不断激发团队战斗力
  • 加强项目风险管理
  • 做好每个项目的总结

17.结构化发散思维

发散性思维是指在思考问题时摆脱旧经验、旧意识,冲破常规的束缚,提出富有创造性的见解、观点和方案。

18.产品创新能力

对于互联网公司来说,创新能力直接关系着自身的核心竞争力,乃至生死存亡。

而那些能够长期处于领袖地位的公司都有着一个共同的特性,那就是具备持续不断的创新能力。

19.高效沟通技巧

一名优秀的产品经理必须是一名优秀的沟通者,具备良好的沟通能力。

常见的沟通方式:面对面沟通、会议沟通、电话沟通、IM沟通、E-mail沟通。

20.数据分析能力

做为一名合格的产品经理,要对数据十分敏感,善于通过数据分析从大量的数据中挖掘有用的信息,用来指导和改善自己乃至他人的工作,提升工作的效率,创造新的价值。

数据分析过程一般分为以下几个步骤:确定目标、收集数据、整理数据、分析数据、得出结论和制作信息图。

ykq

《富爸爸穷爸爸》读后感

书中摘录:

  1. 造成贫穷和财务问题的主要原因是恐惧和无知,而非经济环境、政府或富人。
  2. 富人买入资产,穷人只有支出,中产阶级买他们以为是资产的负债。
    什么是资产?资产就是向你口袋送钱的东西。什么是负债?负债就是把钱从你口袋掏出的东西。
  3. 要懂得如何“让钱来替你工作”,而不是“为了钱而工作”。
  4. 关注自己的事业。
  5. 金钱从来不是真正的资产,我们唯一的、真正的资产是我们的头脑。
  6. 存在财务问题的人经常是一生为别人工作的人,许多人在他们停止工作时就变得一无所有。
  7. 风险总是无处不在,要学会驾驭风险,而不是一味回避风险。
  8. 你学习什么,就会成为什么样的人。
  9. 生活才是最好的老师,大多数时候,生活并不对你说些什么,它只是推着你转,每一次推,它都像是在说“喂,醒一醒,有些东西我想让你学学”。
  10. 首先支付自己。
  11. 学会让金钱为你工作更加重要。
  12. 如果你想获得,你首先需要给予。
  13. …..

本书作者罗伯特·T·清崎有两个爸爸:他的亲生父亲,一个高学历的教育官员(穷爸爸)。以及一个他好朋友的父亲,一个高中没毕业却善于投资理财的企业家(富爸爸)。

清崎以亲身经历的财富故事展示了“穷爸爸”和“富爸爸”截然不同的金钱观和财富观。

穷人为钱工作,富人让钱为自己工作。

这是一本挺不错的理财书籍。

我们可以借它学习理财知识并借此树立正确的财务观念。

但不要指望一本书就能让人达到财务自由的境地。

读同样一本书,有的人开始做白日梦,有的人看到另一个世界。

梦醒了,有的人开始破口大骂,有的人笑而不语 。

我们能做的就是:

从今天起,把“不能”替换掉,时刻想想“我怎么能做成这个”,做一个积极的思考者和行动者。

ykq

cookie有关的术语

当cookie没有设置超时时间,那么cookie会在浏览器退出时销毁,这种cookie是session cookie。

设置了超时时间的cookie,会在指定时间销毁,cookie的维持时间可以持续到浏览器退出之后,这种cookie被持久化在浏览器中。

很多站点用cookie跟踪用户的历史记录,例如广告类站点会使用cookie记录浏览过哪些内容,搜索引擎会使用cookie记录历史搜索记录,这时也可以称作tracking cookie,因为它被用于追踪用户行为。

服务器端设置cookie的时候,可以指定secure属性,这时cookie只有通过https协议传输的时候才会带到网络请求中,不加密的http请求不会带有secure cookie。

设置secure cookie的方式举例:

Set-Cookie: foo=bar; Path=/; Secure

服务器端设置cookie的时候,也可以指定一个HttpOnly属性。

Set-Cookie: foo=bar; Path=/; HttpOnly

设置了这个属性的cookie在javascript中无法获取到,只会在网络传输过程中带到服务器。

第三方cookie的使用场景通常是iframe,例如www.a.com潜入了一个www.ad.com的广告iframe,那么www.ad.com设置的cookie不属于www.a.com,被称作第三方cookie。

supercookie

cookie会从属于一个域名,例如www.a.com,或者属于一个子域,例如b.a.com。但是如果cookie被声明为属于.com会发生什么?这个cookie会在任何.com域名生效。这有很大的安全性问题。这种cookie被称作supercookie。

浏览器做出了限制,不允许设置顶级域名cookie(例如.com,.net)和pubic suffix cookie(例如.co.uk,.com.cn)。

现代主流浏览器都很好的处理了supercookie问题,但是如果有些第三方浏览器使用的顶级域名和public suffix列表有问题,那么就可以针对supercookie进行攻击啦。

zombie cookie/evercookie

僵尸cookie是指当用户通过浏览器的设置清除cookie后可以自动重新创建的cookie。原理是通过使用多重技术记录同样的内容(例如flash,silverlight),当cookie被删除时,从其他存储中恢复。

evercookie是实现僵尸cookie的主要技术手段。

cookie

linux下的定时任务crontab

[环境centos 6.5]

前言

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中(/var/spool/cron/以用户命名的文件),以供之后读取和执行。该词来源于希腊语 chronos(χρνο),原意是时间。

通常,crontab储存的指令被守护进程 - crond激活在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

启动crond进程

1
$ service crond start

若没安装请先安装:

$ yum install vixie-cron
$ yum install crontabs

crontab常见命令:

crontab -e 编辑crontab文件,编辑后crond进程自动读取
crontab -l 列出用户crontab文件的详细内容
crontab -r 删除crontab文件

crontab文件格式

crontab文件由6部分组成

  1. minute 一小时中的哪一分钟[0-59]
  2. hour 一天中的哪一小时[0-23]
  3. day-of-month 一月中的哪一天[1-31]
  4. month-of-year 一年中的哪一月[1-12]
  5. day-of-week 一周中的哪一天[0-6]
  6. commands 执行的命令

ykq

这些选项都不能为空,如果用户不需要制定其中的几项,可以使用*表示任何时间。

每个时间字段都可以指定多个值,可以用逗号隔开, 5-8 */5

15 3 * * 1-5 echo 111 > aa.txt

如上面标示每周一到周5的3点15分执行该计划任务

哪些用户可以使用crontab命令

  • /etc/cron.allow 如果这个文件存在,那么只有在此文件中的用户可以使用crontab命令,如果文件不存在则查找/etc/cron.deny
  • /etc/cron.deny 如果这个文件存在,则在此文件中的用户都不能使用crontab命令
  • 如果2个文件都不存在,则只有root能使用crontab命令
  • 如果2个文件都存在,且均为空,则所有用户都能使用crontab命令

定时任务结合PHP

定时执行php很简单,只需要把命令换成php脚本就行了,如下表示每隔1分钟执行index.php

*/1 * * * * php /usr/www/test/index.php

《佛学入门》

四圣谛

四谛是释迦牟尼体悟的苦、集、灭、道四条人生真理,四谛告诉人们人生的本质是苦,以及之所以苦的原因、消除苦的方法和达到涅槃的最终目的。

一、苦谛:说明世间是苦果。我们要知道苦有如病,应该遍知,这是世间的苦果,也是生死的流转。我们要知道所有的病,才能医治它。

二、集谛:说明业与烦恼是苦的根源。我们要知道病苦的原因,将之断除。这是世间的因果,也是生死的流转,但是它指出我们生死流转的原因。

三、灭谛:说明解脱与证果。众生无时无刻不在病苦中,我们要知道没病苦的快乐是怎样的?要认识怎样的人是没有病苦的?要证知怎样才是没有病?这是指出世间的果,就是解脱、清净的境界--涅槃。

四、道谛:说明离苦的道路。我们要知道修道的方法有如良药,应该修学。这是指出世间的因,我们应该学习、掌握一些修道的方法,努力不懈地修行,最后就可解脱生死。

五蕴

  构成凡夫世间的要素者,名为五蕴或五阴:

  (1)色蕴:──包括自身的眼、耳、鼻、舌、身等五根,以及反映自身而起感受作用的色、声、香、味、触的五境。这是构成自我观念的物质要素,也即是自我存在的主观的身体及客观的环境。

  (2)受蕴:──此为对于五境的接触,所生起心理上的感受作用,即是当身体的五根(五种官能),和其所在环境中的事物,发生了感触的心理活动。

  (3)想蕴:──此为由感触而变成接受的心理活动,例如与顺境接触所感到的欣乐,与逆境接触所感到的悲苦,即是心理上的受取作用。

  (4)行蕴:──此为产生了苦乐感受的受取作用之后,接著生起的贪欲、嗔恶,或与之不相关涉的其他心理活动。通常的情况,总是对于可悦的事物,起贪欲心;对于不可悦的事物,起镇恶心,但是也有觉得无关痛养的,或因甲境而想到乙境上去的。

  (5)识蕴──此为更进一步,对于所接触的境物,了别识知,即是意念或意识的活动,也即是心的主体。

十二因缘的生死观

 根据佛陀的悟境所见,形成生死循环的三世因果者,名为十二因缘,亦即是由于十二个环节的连锁,便构成了连续生死之苦的起因,也可由此十二个环节的逐段逆转,达到灭却苦因、断绝生死的目的。故在四圣谛的集谛和灭谛之中,要用十二因缘的道理来说明。  十二因缘,又名十二缘起,即是以十二个段落的因果关系,说明凡夫众生的生死连续,所以称为十二因缘。现在先将十二因缘,依其排列的次序,介绍如下:

  (1)无明──此为迷之根本,可以称作无知,即是贪欲、嗔恨、愚疑等的烦恼,故为迷惑于生死界中的根源。

  (2)行──即是行业,是从无明产生的意识行为,是前世所造的善业和恶业。

  (3)识──即是由于过去世中的种种行为所积聚的业体,便是以此业体的本能,投入母胎的最初一念。  

(4)名色──即是投入母胎之后,业体的心识(精神)和胎体的肉身(物质)相结合的状态。

  (5)六入──即是在母胎中,逐渐形成胎儿的眼、耳、鼻、舌、身(五官四肢),意等六种感觉器官,又可名为六根。因为一切善恶行为的造作和感受,均系由此六种官能为媒介,而达于心体,成为业因业种,或苦因苦种,所以名为六入,意为诸业的六个入口。

  (6)触──此为我们于出胎之后,自我身心的六入(六根),和外在环境的六尘之间,发生了相对的接触。所谓六尘,便是和六根相应的色、声、香、味、触、法,也就是我们这个身心所处的生活环境中的一切事物。

  (7)受──即是由接触外境而产生的领受苦或乐的感觉。

  (8)爱──此为由于苦乐的感觉之后,所起欣乐厌苦,求乐避苦,并且贪于财、色、名、食、睡等五欲的心理活动。

  (9)取──对于自己所喜所贪的欲求的事物,生起执著不舍的心理。

  (10)有──爱和取,乃是求取生存的欲望,正因为有此生存的欲望,便造下了种种恶行为的有漏(生死)之因,故将接受未来的生死果报。此所谓「有」,便是指的生死因素、善恶行为的有漏之业。

  (11)生──今生造了生死的业因,必将接受来生的再度出生的业果,那便是由色、受、想、行、识等五蕴所构成的身心,和此身心所处的环境。

  (12)老死──来生既然有了五蕴所成的身心,又将衰老而至死亡。

八正道

道谛的内容,含有八目,所以总名之谓八圣道分或名八正道:

  (1)正见(samyag-drsti)──彻底明了四谛之理,即为正见。当以诸行无常,诸法无我,涅盘寂静的「三法印」,来监定见解的正确性。即是说,能够理解我们所处的五蕴所成的身心世界和环境,确是虚幻无常的;既属无常的幻景,自亦没有真我的实体可求;彻见无常,实证无我,当下便是涅盘,便是寂静(不动心)的圣境。唯有依据这样的见地,来从事佛法的修行,才能真正地达到解脱的目的。

  (2)正思惟(samyak-samkalpa)──又被译作正志、正思、正分别等,即是正确地思惟四谛之理,基于正见的原则,勿使心中生起贪欲、镇恚、害心等的活动。这是清净意业的工夫。

  (3)正语(samyag-vac)──即是真语和实语。不妄语(谎言)、不两舌(挑拨是非)、不恶口(粗言詈语)、不绮语(戏论淫词)。应当以善言劝勉,爱语安慰,直言教导。此为基于正见所作清净口业的工夫。

  (4)正业(samyak-karmanta)──又被译作正行,即是端正品行,远离一切的邪恶行为,是指基于正见而不杀生、不偷盗、不邪淫(除了已婚夫妇之外的一切男女的淫事,均为邪淫),不用一切兴奋剂或麻醉物。此即是清净身业的工夫。

  (5)正命(samyag-ajiva)──清净了身、口、意的三业,顺从佛陀的教法,远离五种(不正当的)被佛陀称为以邪法活命的职业,例如:诈现奇特、自称功德、咒术占卜、大言壮语、彼此标榜等;亦即是以不正当的手段,谋取不法的利益,名为邪命。学佛的人,当以正常职业,取得生活的所需。

  (6)正方便(samyag-vyayama)──又被译为正精进或正治,即是努力于贪嗔无明等烦恼的对治,精进地迈向涅盘的圣道。故当发愿:已生之恶使之速断,未生之恶使之不起;已生之善使速增长,未起之善令之生起。

  (7)正念(samyak-smrti)──系念正道,不起邪念;即是以不净观(a-s’ubka-smrti)等的方法,摄心制心,使之不受物境欲念所摇动。

  (8)正定(samyak-samadhi)──循著以上七个阶段次第修行,正念的观想完成,便可进入四禅八定,再加以无常无我、四大皆空的正确知见(即是空慧的观照),便能进入无漏清净的灭受想定,那即是解脱自在的境界,不生不死的涅盘境界。所谓涅盘(nirvana),曾被译作灭度、寂灭、圆寂等,即是超越了一切烦恼苦痛的系缚,住于绝对自在的境域,那是不能用时间和空间来范围的圆满充实的存在。

foxue

编写自己的NPM包

1.编写模块

一个最简单的NPM包由主模块index.js和包描述文件package.json组成。
让我们编写一个生成指定长度随机字符串的NPM模块:


//index.js
module.exports = function(len){
    var rdmString = "";
    for (; rdmString.length < len; rdmString += Math.random().toString(36).substr(2));
    return rdmString.substr(0, len);
}
//package.json
{
"name": "random-str",
"version": "0.0.3",
"auth": "ykq",
"scripts": {
    "start": "node app"
 },
"dependencies": {}
}

2.注册包仓库账号 npm adduser

为了维护包,npm必须要使用仓库账号才允许将包发布到仓库中。

注册账号的命令是npm adduser,按照提示填写相关信息即可:
ykq

3.上传包 npm publish

在目录下执行npm publish,开始上传包,在这个过程中,npm会将目录打包成一个存档文件,然后上传到官方仓库中。

ykq

4.查看包

上传完成后我们就可以在官方仓库中查看我们刚刚写的包.

https://www.npmjs.org/

ykq

5.安装及测试包

下载安装很简单,直接npm install random-str

接着测试下随机生成100个字符串,代码如下:


//app.js
var r = require("random-str")(100);
console.log(r);

效果如下,说明我们编写的包能正常安装和使用了:
ykq

Restful架构及其技术可行性

RESTful简介

RESTful (Representation State Transfer) 描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。RESTful 指的是一组架构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是 RESTful。

ykq

这里对什么是RESTful不作详细的论述,具体大家可以参考阮一峰的博客http://www.ruanyifeng.com/blog/2011/09/restful.html

简单来说,RESTful架构就是一组约束条件和规则:

  1. 每一个URI代表一种资源。
  2. 客户端和服务器之间,传递这种资源的某种表现层。
  3. 客户端通过四个HTTP动词(GET、POST、PUT、DELETE),对服务器端资源进行操作,实现”表现层状态转化”。

比如一个电影的网站,REST 的 URI 可设计为:

GET http://api.douban.com/movie //电影列表
GET http://api.douban.com/movie/123 //查看某部电影
POST http://api.douban.com/movie //添加电影
PUT http://api.douban.com/movie/123 //修改某部电影
DELETE http://api.douban.com/movie/123 //删除某部电影

RESTful架构的技术可行性

基于RESTful架构的网站好处有很多,但我们也要测试在项目用应用RESTful是否有兼容性问题,即HTTP的4个动作(GET/POST/PUT/DELETE)在服务端和浏览器端是否都能正常发送和接收。由于GET和POST这2个method已经快被我们用烂了,我们只要测试下PUT和DELETE这2个method。

客户端浏览器方面:

由于历史原因,目前浏览器的\标签只支持GET和POST,但是通过ajax技术,几乎所有的主流浏览器都支持GET/POST/PUT/DELETE这4个方法,测试代码如下:

$.ajax({url:'/rest',type:'put',success:function(data){
    alert("浏览器支持PUT:"+data);
}});
$.ajax({url:'/rest',type:'delete',success:function(data){
    alert("浏览器支持DELETE:"+data);
}});

本人相继测试了IE6、IE8、chrome、firefox、safari、UC、安卓原生浏览器、iphone4 safari等浏览器,都能正常运行。
ykq

ykq

如果你使用了前端MVC框架如Angular.js、backbone等,那就更棒了!它们提供的RESTful模块能让我们的操作变得更加简单和富有表现力。

服务端方面(以PHP为例):

我们知道PHP分别提供了$_GET和$_POST这2个超全局数组分别用于处理get和post请求,但是却没有$_PUT和$_DELETE来处理put和delete。怎么办?没关系,自己封装一个(怎么封装百度一下)。

另外目前几乎所有主流的PHP框架都对RESTful提供了很好的支持,如Laravel、zend、symfony等。

Laravel的路由:

Route::put('/rest',function(){ echo 'true';exit;  });
Route::delete('/rest',function(){ echo 'true';exit;  });

Laravel的资源控制器让围绕资源构建RESTful模式变得更加简单:

Route::resource('photo','PhotoController');

总结:

经过测试,在项目中使用RESTful架构是完全可行的。

RESTful虽好,可不要贪杯哦。具体情况还要灵活使用,不要被它捆住。

Intervention Image - 让PHP处理图片更加简单

简介

Intervention Image是一个基于PHP GD库的图片处理库。
相对于使用PHP原生图片处理函数的复杂和繁琐,该库能让我们处理图片变得更加的简单和富有表现力。

github : https://github.com/Intervention/image
官方文档 : http://intervention.olivervogel.net/image/getting_started/introduction

Intervention Image使用

Intervention Image的安装和使用都十分的简单,安装只需敲一下composer install的命令,使用也很简单,官方文档写的很详细就不多说了,这里本人简单演示下使用Intervention Image库生成验证码和给图片打水印。

绘制验证码


require 'vendor/autoload.php';
use Intervention\Image\Image;
$charset = "ABCDEFGHKMNPRSTUVWXYZ23456789"; 
$cWidth = 150;  //画布宽度
$cHeight = 30;  //画布高度
$code = "";
$color =  array('#99c525','#fc9721','#8c659d','#00afd8');
$img = Image::canvas($cWidth, $cHeight, '#ccc');
for ($i=0;$i<4;$i++) {
    //画出干扰线
    $img->line($color[array_rand($color,1)],mt_rand(0,$cWidth),mt_rand(0,$cHeight),mt_rand(0,$cWidth),mt_rand(0,$cHeight));
    //随机取出验证码
    $code .= $charset[mt_rand(0,strlen($charset)-1)];
    //画出验证码
    $img->text($code[$i],(30*$i)+10,25,function($font) use($color){
        $font->file('fonts/Arial.ttf');
        $font->size(24);
        $font->color($color[array_rand($color,1)]);
        $font->angle(mt_rand(-30,30));
    });
}
echo $img->response();

ykq

图片水印

require 'vendor/autoload.php';
use Intervention\Image\Image;
$img = Image::make('bg.jpg')->resize(400,250)->text('@袁克强',330,240,function($font){
    $font->file('fonts/华文黑体.ttf');
    $font->size(18);
    $font->color("#fff");
    $font->angle(20);
})->save('bg.jpg',75);

ykq

浏览器的工作原理:新式网络浏览器幕后揭秘

序言

这是一篇全面介绍 Webkit 和 Gecko 内部操作的入门文章,是以色列开发人员塔利·加希尔大量研究的成果。在过去的几年中,她查阅了所有公开发布的关于浏览器内部机制的数据(请参见资源),并花了很多时间来研读网络浏览器的源代码。她写道:

在 IE 占据 90% 市场份额的年代,我们除了把浏览器当成一个“黑箱”,什么也做不了。但是现在,开放源代码的浏览器拥有了过半的市场份额,因此,是时候来揭开神秘的面纱,一探网络浏览器的内幕了。呃,里面只有数以百万行计的 C++ 代码…

塔利在 她的网站上公布了自己的研究成果,但是我们觉得它值得让更多的人来了解,所以我们在此重新整理并公布。
作为一名网络开发人员,学习浏览器的内部工作原理将有助于您作出更明智的决策,并理解那些最佳开发实践的个中缘由。尽管这是一篇相当长的文档,但是我们建议您花些时间来仔细阅读;读完之后,您肯定会觉得所费不虚。

保罗·爱丽诗 (Paul Irish),Chrome 浏览器开发人员事务部

完整查看http://www.html5rocks.com/zh/tutorials/internals/howbrowserswork/