2013年读过的书

2013年就要过去了,这一年对于我来说最大的变化就是在一个稳定的生活环境渡过了这一年,这里的稳定指的是从去年年底离开了北京,结束了10年的北漂,回到了郑州自己的蜗居,尽管这一年的工作并不是很顺,但是心境却平静了许多,慢慢也捡起了读书的习惯,到年底罗列一下这一年读过的书。

个人藏书

01. 《IT创业疯魔史
02. 《没有任何借口
03. 《乌合之众:大众心理研究
04. 《青春
05. 《瞬间之美:Web界面设计如何让用户心动
06. 《白帽子讲Web安全
07. 《重来:更为简单有效的商业思维
08. 《四步创业法
09. 《精益创业:新创企业的成长思维
10. 《影响力:经典版
11. 《史玉柱自述:我的营销心得
12. 《启示录:打造用户喜爱的产品
13. 《异类:不一样的成功启示录
14. 《引爆点:如何制造流行
15. 《jQuery基础教程
16. 《开发高质量PHP框架与应用的实际案例解析
17. 《长尾理论
18. 《需求:缔造伟大商业传奇的根本力量
19. 《PHP和MySQL Web开发(原书第四版)
20. 《自营销:如何传递品牌好声音
21. 《营销革命 3.0
22. 《无价:洞悉大众心理玩转价格游戏
23. 《我读书少,你可别骗我
24. 《PHP精粹:编写高效PHP代码
25. 《人生的智慧

个人藏书

读书是一个好习惯,应该保持这个好习惯,记录2013年读过的书对自己起到一个督导的作用,今年阅读的技术类图书偏少,来年要增强,理想中应该是一半对一半,毕竟始终还是偏爱技术的。在阅读的过程中要加强笔记的记录与思考,要注重实践,不少书需要重新阅读,每一次阅读都会有不同的收获。

来年计划读的书有:

《什么是数学》
《时间的形状》
《失控》
《数学之美》
《大败局》
《信息简史》
《上帝掷骰子吗》
《我的栖身之所,我的人生目的》
《Linux Shell脚本攻略》
《Redis入门指南》
《… …》

其中《什么是数学》《时间的形状》《失控》目前正在阅读中,《什么是数学》与《失控》进展缓慢。在若干年以前,阅读的基本上都是单一技术类尤其是面向程序员的丛书,什么C/C++、VB、Delphi、数据库等等,其实并不是很好,有选择性拓宽范围的阅读反而会给技术方面提供很好的支持,在思考某些问题的时候会更加全面。

在即将到来的一年中,计划读的书主要包括基础科普类的图书、商业及企业管理类的图书、心理文学类和技术研发类,其中技术研发类图书偏向Web方向及移动方向。在阅读中拓宽自身的知识面,并学以致用。

《营销革命 3.0》阅读摘录

1、品牌故事:特征、情节、隐喻

某品牌成为解决社会问题或改变人们生活的某个运动象征时,该品牌就具备了很好的特征。

「趋势」–>「战略」–>「应用」

品牌应当承诺企业业务的不同寻常性,并为消费者提供文化层次上的满意度。好的品牌具有好的故事,好的故事情节有三种模式:「挑战」、「联系」、「创意」。

建立正确的品牌并生动传神的传播出去。

梅特卡夫定律:在一对一传播的情况下,一个有a名成员的网络效用 = a²。
里德定律:在一对多,多对多传播的情况下,一个有a名成员的网络效用= 2ª。

承诺变革、品牌故事和消费者参与。

2、营销3.0战略之一:向消费者营销企业使命

确定不同寻常的业务
寻找感人至深的故事
激发消费者的热情参与

提出具有变革性的使命;围绕使命构思品牌故事;引发消费者积极参与。注意能带来巨大改变的微小理念,宣传品牌使命就是讲述动人的故事,讲的故事是在隐喻的基础上建立故事特征和情节,故事必须真实可信,消费者增权。

「合作营销」、「文化营销」、「精神营销」

过去60年营销的演变:「产品管理」->「顾客管理」->「品牌管理」

产品管理: 『现在』4P理论(产品、价格、驱动、促销) -> 『未来』协同创新
顾客管理: 『现在』STP(市场细分、目标市场、定位)  -> 『未来』社区化
品牌管理: 『现在』品牌塑造    -> 『未来』特征塑造

3、营销3.0战略之二:向员工营销企业价值观

共享价值观、企业价值观是员工的共同行为,企业应建立起行为和价值观直接联系起来的机制,改变员工,员工改变其他人。

员工的分类

「应付差事型」 当一天和尚撞一天钟
「见风使舵型」 随大流,并不把工作放到第一位
「胆大冒险型」 把工作视为挑战自我的机会
「专业团队型」 寻找的是团队合作的工作机会
「步步高升型」 寻找的是有稳定发展前景的工作
「建功立业型」 能为企业带来永久影响和变化的机会

『麦肯锡』对员工类型的分类

「追随成功型」 希望实现个人成长和成就
「风险回报型」 希望获得最大化的薪金报酬
「随遇而安型」 看中的是灵活的工作方式
「宏伟目标型」 寻求的是为伟大使命努力奋斗的机会

理解员工才能更好的设计特征化体验,能清除与企业价值观背道而驰的员工,让员工更加团结。员工的特征化体验特征应具有合作性、文化性或创造性。

「闻之不若见,见之不若知,知之不若行」

企业向社区转变,在社区中为促进全体成员的共同利益,所有的决策都是通过投票产生的。

企业文化关乎道德和诚实,需要将共享价值观和员工共同行为紧密联系在一起。在世界互联,水平化营销等的影响下,企业文化应当具备合作性、文化性和创造性,应当改变员工的生活,同时鼓励员工改变他人生活。建立道德和诚实的形象,企业可以获得更大的人才竞争优势,可以提高生产率,改善消费者体验,成功管理内部差异。

向员工营销企业价值观与向消费者营销企业使命具有同等重要的意义。

4、营销3.0战略之三:向渠道合作伙伴营销企业价值观

利润增长点变化促使合作成为必然。

直销模式企业与消费者直接建立联系,保留了全部利润。直销模式会受到市场成熟,消费者选择目标增多等的影响,在某一时刻,利润点变化了,增加利润就需要寻找合作。

渠道合作伙伴是一个复杂的实体,是企业、消费者和员工的混合体。

「企业」 具有自己的使命、愿景、价值观和商业模式
「消费者」 有被满足的需求和期望
「员工」 向最终客户销售产品,和消费者沟通

渠道合作伙伴的管理:「目的」-> 「特性」 -> 「价值」

寻找渠道合作伙伴应选择与自己具备完全相同的目的、特性和价值的潜在目标。

合作双方应扪心自问是否想实现双赢的结果,良好的合作伙伴应该是水平化的而不是垂直化的,双方都应从中获得同等的利益回报;
合作的双方应认真审视,看对方是否强调质量标准;
合作双方应努力认清对方的价值观,看价值观是否吻合。

向合作伙伴营销价值观的第一步是要了解合作伙伴自身的价值观,企业之间的合作就像两人的婚姻行为:其目的、价值、特征一致。

渠道是企业的文化变革动力:分销企业理念
渠道是企业的创造性伙伴:管理关系

5、营销3.0战略之四:向股东营销企业愿景

成功的企业往往会变得骄傲,认为自己无所不能,因而转向疯狂增长,当危险的苗头初现时,他们毫不在意,直至失败的倾向越来越明显。如果仍不思悔改,最后只能走向破产。

注重可持续发展能力(市场两极分化,资源的稀缺)

对企业股东营销最重要的一点是要保证他们的投资回报。

提高成本产出率,利用新市场机遇提高销售收入以及提高企业品牌价值。

6、营销3.0应用实现社会文化变革

实现社会文化变革
创造新兴市场企业家
努力实现环境可持续发展

7、观点总结

热爱你的顾客,尊重你的竞争对手;
善于察觉变化,随时准备好作出变革;
捍卫你的品牌,永远明确自己的目标;
消费者千差万别,努力满足你的最佳客户;
永远以合适的价格和包装提供产品;
注重传播,努力寻找潜在消费者;
获取、维护和增加客户;
无论经营那种业务,记住你是在提供服务;
学会从质量、成本和交付三方面改善业务流程;
广集信息,慎下结论。

兼顾以人为本的精神和盈利经营。

PDO(PHP Data Object)扩展学习(一)

1、PDO知识学习
(1)了解PDO及建立数据库连接
PDO(PHP Data Object)扩展是一个与数据库通讯交互的扩展,与以往使用的mysql或mysqli类似,旨在解决不同数据库的连接及处理一致性问题,奈何在这个追求个性的时代,各个数据库厂家之间的SQL脚本都有自家的个性,有所差异,目前PDO还未完全解决针对所有数据库交互的一致性。
PDO针对数据库提供了一组相对比较简洁的功能,用于查询及获取数据集。其使用相对也比较简单,首先是一如既往的要跟将要操作的数据库取得联系,然后完成各种操作,与数据库取得联系,一般要创建一个PDO对象,然后核对暗号(DNS),匹配后该PDO对象就打入敌人内部,从而开展各项活动,该向外传递情报就传递,该破坏敌人内部就破坏。以MySQL为例我们来一个示例。

$dbConn = new PDO('mysql:host = localhost; dbname=db', 'dbuser', 'dbpwd');

创建成功后再$dbConn中存储PDO对象,然后就可以该干啥干啥了。
(2)基础查询
先看看基础查询,基础查询主要使用PDO对象的query方法,该方法接受SQL查询语句,返回一个叫PDOStatement的对象,返回的对象的fetch方法或者fetchAll方法就可以获得数据集了,具体如下:

$dbConn = new PDO('mysql:host = localhost; dbname=db', 'dbuser', 'dbpwd');
$stmt = $dbConn->query('SELECT Field1,Field2 FROM table_name');
while($row = $stmt->fetch()) {
    echo $row['field1'] . ' ---' $row['field2'] . "\n";
}

(3)数据提取模式
PDOStatement对象的fetch方法与fetchAll方法可接受相应的参数,该参数用于指定数据提取模式,主要反映在结果数据集格式化的模式,共有四个常量,分别是:FETCH_ASSOC、FETCH_NUM、FETCH_BOTH、FETCH_CLASS,其中FETCH_BOTH为默认值。
FETCH_ASSOC:返回的结果集为数组,以查询字段名作为数组的键值,上面的基础查询中输出中的应用;
FETCH_NUM:返回的结果集为数组,以数字作为数组的键值;
FETCH_BOTH:返回的结果集为数组,包含上两者,既有以字段名作为数组的键值,又有以数字作为数组的键值;
FETCH_CLASS:返回的结果集为一个已经命名的类的对象,以查询列名设置到类对象的属性中;
(4)参数及预处理
PDO扩展还可以对查询脚本参数进行预处理操作,可以在SQL语句中针对查询条件设定参数,可以在执行过程中给参数设定具体的值,等于说将PDOStatement对象的Query分为两步来运行,先传入预处理SQL语句,然后再赋值执行。使用预处理的好处是编译一次,多次执行,能够提高效率,要快于query查询,另外可以有效的防止SQL注入。另外参数也可以用?来代替,需要顺序给参数赋值。预处理还中的参数可以绑定一个值,也可以绑定一个变量。

// 基本操作
$sql = "SELECT * FROM tablename WHERE field = :param";
$stmt = $dbConn->prepare($sql);
$stmt->execute(array("field" => value));
$result = $stmt->fetch();
// 用?代替参数
$sql = "SELECT * FROM tablename WHERE field1 = ? AND field2 = ?";
$stmt = $dbConn->prepare($sql);
$stmt->execute(array(value1,value2));
$result = $stmt->fetch();
// 绑定值、预处理中的变量
$sql = "SELECT * FROM tablename WHERE field1 = :field1 AND field2 = :field2;
$stmt = $dbConn->prepare($sql);
$stmt->bindValue(':field1', value1);
$stmt->bindValue(':field2', value2);
$stmt->execute();
$result = $stmt->fetch();
// 可改变某一参数绑定的值,继续执行
$stmt->bindValue(':field2', value3);
$stmt->execute();
$result2 = $stmt->fetch();
// 还可以给参数绑定变量
$stmt->bindParam(':field2',$value4);
$value4 = value;
$stmt->execute();
$result3 = $stmt->fetch();

(6)数据库操作中的常用操作
(A)获取新插入数据的ID
执行后调用PDO对象的lastInsertId()方法可获得新插入数据的ID。

$sql = "INSERT INTO tablename(field1,field2,field3) VALUES(:field,:field2,:field3)";
$stmt = $dbConn->prepare($sql);
$stmt->execute(array(
        ':field1' => value1,
        ':field2' => value2,
        ':field3' => value3)
);
echo "New insert id : " . $dbConn->lastInsertId();  

(B)获取操作影响的行数
执行后调用PDOStatement对象的rowCount方法获得操作影响到行数,参考数据删除操作影响的行数。
(C)数据删除

$sql = "DELETE FROM tablename WHERE field = :field";
$stmt = $dbConn->prepare($sql);
$stmt->execute(array(":field" => value));
echo $stmt->rowCount() . ' rows deleted';

(7)异常处理
连接数据库失败会抛出PDOException异常,预处理失败会返回false或抛出PDOException,可使用getMessage方法获得抛出异常的原因,执行成功返回true,失败返回false,如果执行失败,可使用PDOStatement对象的errorInfo方法获得错误产生的原因。提取数据错误返回false,同样可以使用errorInfo方法获得错误的信息,需要注意的是提取数据会返回空数组或者其他 依据数据提取模式结果,这是没有错误状态的。

        try {
              $dbConn = new PDO("...");
        } catch (PDOException $e) {
              echo "Could not connect to database";
              exit;        
        }
        $sql = "...";
        try {
              $stmt = $dbConn->prepare($sql);
              if($stmt) {
                   if($stmt->execute(...)) {
                       $result = $stmt->fetch();
                   } else {
                       $error = $stmt->errorInfo();
                       ...
                   }
              }
        } catch(PDOException $e) {
            echo $e->getMessage();
        }

(8)PDO的事务处理
PDO对于事物处理的前提是数据库要支持事务处理,对于MySQL来讲表类型为Inno的支持事务,对于一组SQL语句需要进行事务处理,在任何SQL语句运行前调用PDO对象的beginTransaction方法启动事务,所有SQL语句运行成功后,调用PDO对象的commit方法,在运行中改组SQL语句有一个没运行成功,调用PDO对象的rollback方法回滚。

–未完待续 —

共享网-基于物品共享的尝试

一直以来都想以一款面向大众或者面向中小企业的用户产品切入互联网领域,多年来一直从事相对传统的企业信息化方面的工作,虽比较热爱互联网但一直未有缘切入,中间短暂的试水终由于其他原因而搁浅,终其原因还是不果断,在面临选择的时候往往不够坚决,或者说在适应的舒适区中没有很大的决心跳出来从新开始。目前所在的公司还没有具体的方向,所以得以有机会做一些互联网方面的尝试,恰巧主管研发的同学提出一个想法:『基于LBS的个人闲置物品的有偿共享』,于是放手让他们去做,经过了短暂的近一个月的原型调研,最终中止了这个尝试的项目,从中获得了一些在我看来的反馈与收获,在此总结一下。

项目最终的产出: 共享网
项目想法假设:
1、每个家庭都有不太常用的工具类或者服务类的物品,可以有偿共享出来给就近的人使用(例如电钻类工具,文件打印类,儿童玩具类)
2、讨论的一些补充
(1)由共享出发,进而相互结识,形成以社区为圈子的邻里关系
(2)由邻里圈子尝试线下的一些活动,由线上走向线下
(3)是否能将街边的商铺纳入其中
(4)走社区居委会及物业渠道,将他们提供的信息服务纳入其中,并反向推广
……..

当然讨论的时候都很长远,但开始做的时候就基于一条『是否有共享的愿望』,在数据层面就是是否能产生共享的数据,在运营方面就是如何促成人们共享。简短的尝试以后,反馈结果不理想又没有其他太好的转变方式,于是目前只能让这个项目搁置起来。

从邀约试用的各行业朋友反馈来看,不具备这类假设的需求,更多的是压根没有什么要共享的需求,也没有这方面的不方便或者麻烦。这就是很快结束的最直接的收获。但从目前团队的工作来看还有其他方面的收获:

(1)打造互联网项目产品,团队的工作方式与传统信息管理类系统是截然不同的,团队在进行这方面的工作时需要在思想上有所转变,互联网项目产品最大的特色之一就是时刻保持即时响应性,相比信息管理类系统的发布周期来讲要大大缩短,这个观念一定要转变,如果要做互联网项目这应该是目前团队最需要改变的地方。
(2)功能可以逐步添加,但引导及如何让用户简洁明了的上手并具有一定的趣味性或者能够切实的解决用户所面临的麻烦应该先行。可以从解决单一麻烦开始,但如果要解决的单一麻烦丝毫不能引起用户的兴趣,这就不叫麻烦,也就没有要解决的必要了。
(3)不要教用户怎么用,要观察用户会如何用,邀约的试用者分为几类,主要都是各自的朋友,有的告诉的比较清楚,我一般邀请的朋友就简单的给他们一个网址,让他们看看,然后说说意见,压根就不提具有的功能。
(4)注意细节,细节可以是多方面的,比如整体的色调是否统一,文字标识是否统一,各项标注是否匹配当前的展现,获取用户反馈的渠道等等。
(5)运营及推广方面目前人手不足,在互联网项目中,这部分人员具有很重要的使命。
(6)一个优秀的产品经理也是目前很欠缺的。

这样的尝试毕竟不会有很多次,在非常有限的资源下能够做这样的尝试是幸运的,但是从反馈的需求及目前的资源来看,这是一件我们目前干不了的事情。

———————这是分割线———————–

目前供职的公司含有”物联网”,虽说比较厌烦基于这类概念的鼓吹,但责任所在,需要努力为之找到一条道路,虽目前不甚理想,但仍在努力中。以下是这些时间公司的工作安排,目前还是0。

基于Zigbee的自组网环境数据监测终端及网关   — 还未有产出,板卡已出
引入万能手机遥控器  — 不被市场接受,不成功
引入手机投影仪 — 产品不稳定,目前还未开始市场尝试
努力寻找带来现金流的项目(信息化方向)

 

php html解析器Simple HTML Dom

最近在每天工作之余抽取一点小时间做一个小的web应用,中间需要一些原始数据的抓取,用于测试,在网上找到了PHP Simple HTML Dom,是一个简单的HTML DOM解析器,支持PHP5+以上版本,支持无效的HTML,提供了比较简单的方法来处理HTML元素。是一个开源项目。

在使用中基本能够满足目前的需要,相对对于HTML的处理还是比较方便的,就是效率跟占用内存貌似不太理想,可能是对其使用上不是很对路。总来的来说,用这个东西入门还是比较快速的。

1. 开始使用

首先下载解压缩,然后将simple_html_dom.php文件包含进要编写的脚本文件中,加载要处理的html,支持三种模式的html加载,分别是『从url中加载,从字符串中加载,从文件中加载』。

Hello World!');
//从文件中加载
$html = file_get_html('example.htm');

从字符串加载网上文件需要先从网络下下载,使用cURL比较好一些,需要在php配置文件中打开php扩展php_curl。

$url = 'http://www.example.com';
$ci = curl_init();
curl_setopt($ci,CURLOPT_URL,$url);
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ci);

2. 查找html元素

使用find函数查找,返回包含对象的数组,常见的查找如下。

//查找超链接元素
$alink = $html->find('a');
//查找第n个连接元素
$alink = $html->find('a',5);
//查找id为main的div
$mainDiv = $html->find('div[id=main]');
//查找所有定义了id的div
$idDiv = $html->find('div[id]');
//查找所有定义了id的元素
$idAll = $html->find('[id]');
//查找样式类为info的元素
$classInfo = $html->find('.info');
//支持嵌套子元素查找
$ret = $html->find('ul li');
//查找多个html元素
$ret = $html->find('a,img,p');
//....

3. 其他

可以使用内置的函数来进行元素的定位,返回父元素parent,返回子元素数组children,返回第一个子元素first_child,返回最后一个子元素last_child,返回前一个相邻元素prev_sibling,返回后一个相邻元素next_sibling等。

提供简单的正则表达式来过滤属性选择器,类似于[attribute]的格式。

每个对象都有4个基本属性:
tag — 返回html标签名
innertext — 返回innerHTML
outertext — 返回outerHTML
plaintext — 返回HTML标签中的文本

返回元素属性值

//返回$alink的href值
$link = $alink->href;

通过设置元素的属性值可以对元素进行添加、修改、删除操作。

//删除url连接
$alink->href = null;
//元素的修改
$ret->outertext = '
';
$ret->outertext = '';
$ret->outertext = $ret->outertext . '
other
';
$ret->outertext = '
Welcome
' . $ret->outertext;

-EOF-