Monthly Archives: July 2010

百度,余璐,产品,反思

1.百度

昨天,百度在宁波举办了一个推广会,因为公司的PPC停掉了,所以没有被列入邀请的行业里面。其实知道这个会议也是很意外,因为去客户哪里的时候,他告知我有这么一个会议,因为他们的PPC没有被停掉,所以被邀请。我想了想,问能不能让我一起,他说可以。因为我本身是从销售转向技术,对于类似的营销推广会议,自己就举办了很多,所以基本上已经免疫了。去的目的很简单,就是想去认识一下百度的代理商,看能不能帮我某个关键字操作一下。

会议开始时候,盘石的主持人做了很SB的游戏,结果更SB的是,我第二轮就被刷下来了,看来我比主持人更SB。

百度的这次的营销主题是:网盟,精准营销。

当然了,也是类似与google的内容联盟,差别不大。大抵也是抄袭的。对于会议的开始,抵触的情绪就出现了,骂人的想法都有鸟。但是还是看着那个SB主持人在上面喋喋不休。

就在我重要要崩溃的时候,主角上场了,余璐。

2.余璐

余璐的上场让我很是激动,以为我没想到她会亲自来做一场营销的专题演讲。看到主持人请她出场,我真的是虎躯一震啊,那个鸡冻啊。

余璐

年龄:不知道

性别:女

爱好:猫(猜的)

职位:百度商业产品部产品经理

其他:超级喜欢猫(= =我猜的)

备注:以前在某篇报道见过她

当然鸟,她讲的内容,基本上对我而言,已经全部知道鸟,对于她演讲的内容,我更多在意的是她这个人。

中场休息时候,我去跟找她,很是鸡冻,然后说了很多发自内心的赞美。然后跟她要签名(- -,怎么说明我的这个行为呢?我只是发自内心的敬佩一个人而已)。然后从盘石的老总哪里知道,余璐不是专业学互联网的,是学国际金融的。让后余璐给了一张名片我,然后我向盘石的副总也索要了一张名片。

对于产品经理,一直有种莫名的向往,大概是长期抠腚(coding)的结果吧。总觉得,作为一个PM,什么都要懂一些,还要处理各方的关系,以及对于产品的把控等等。都是很需要能力的。我知道的第一个女姓产品经理是psyduck,当然了,他具体的做过什么产品,我不知道,貌似很喜欢的看书的一个姑娘,blog上的东西,见解很是独到。知道的第二个女性产品经历就是余璐。她们都有几个共同的特点,都是女娃,都是短发,貌似psyduck也是短发,都是笑起来很阳光(- -,我承认我邪恶了。),都是做产品的,我一直固执的认为,做产品的人,都是很有人格魅力的人。

当然,余璐的演讲水平很一般,可能我是以前做过培训方面的工作吧,对演讲的水平要求比较高。

3.产品

我记得有一次,大概是去年的时候,ZZ说他终于找到自己的目标了,他说他要做一个PM,那是他貌似还在温州上班。我当时就很纠结的说,PM是啥,他说PM=product manger,也就是产品经理。我当时并没有做互联网,不知道PM对于一个公司的重要性,以及其只能的全面性。

可是如今我似乎也在经历一个想要成为一个PM的时段。渴望做出自己的产品,渴望像余璐那样,站在讲台上,推广自己的产品。渴望自己的产品被大众获得认可。

我觉得我可以从一些小的方面的着手开始我成为一名PM的途径。比如,在现有公司的产品上增加一些附加值。或者自己开发一个简单应用,但是有商业价值的产品。或者和朋友一起做一些自己幻想的东西。

我觉得这些都可以是我的开始。

4.反思

我以前一直觉得我很多方面做的不是很好,一直觉得我没有高的学历,一直觉得我是半路出家的,所以我很努力,我每天都花很多时间学习,学习新的语言,思维,认识。我觉得我已经很努力了,但是昨天看到余璐的时候,我觉得我根本就不够,而且我长久一来犯了个很大的错误。我以为自己很努力了,其实根本就是打打酱油。

学习木有系统性,计划性,目标性。连学习也是为了学习而学习。很是蛋疼。而且对于学习,有时候想法很有局限性。

我想,对于我的学习,是时候改变了。

后记:其实看到余璐后真的很激动,一连串的想了很多东西,很多东西,才发现,自己很多方面真的不足。才知道,自己要学习的东西,真的还很多。

python的迭代器和生成器

在python中,大多数容器对象都使用for来进行遍历。

那么啥是迭代器呢?

百度百科里面说:迭代器是一种对象,它能够用来遍历容器对象的所有元素,每个迭代器对象代表着容器中一个确定的地址。

python中的迭代器不仅仅可以迭代序列类型,还可以迭代非序列类型。包括用户定义的对象。

迭代器的用法在python中普遍而且统一。for语句在容器对象中调用iter()函数,这个函数会返回一个 定义了next()方法的迭代器对象。它在容器中逐一访问元素,没有后续元素,next()就会抛出一个异常,告知for循环结束。

这样的话就很好的可以给自己的类定义一个迭代器了。

比如:

class className:

def __iter__(self):

return self

def next(self):

…….

生成器:

生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变

生成器是创建迭代器的简单而强大的工具。

需要返回数据时候使用yield语句。

每次调用next()时,生成器回复它脱离的位置。

培训总结

政府闲得蛋疼的举办了一次名为《企业网络营销》的培训,请了一个叫兽过来。让后就开始了为期两天的培训。我总共参加了1.8天,而我的顶头上司小胡同志却是参加了2.0天,岑总参加了0.3天,回来后,亲爱的小胡同志说要做培训总结,好吧,那就做吧。

大概总结个8条吧,多了真写不出来:

1.做网络营销的时候,不能站在技术的角度去思考,而是客户的角度去思考。

2.在做网络营销的时候应该熟悉你的目标群体,熟悉他们对互联网的依赖程度。

3.在做网络营销的时候,传播理念很重要。

4.每次营销都应该有个主题,其它的一切都是围绕这这个主题而来的。

5.如果要实现转化率,提高ROI,更多的是对用户思维的引导,而不是强迫购买。

6.在网络营销计划指定前,应该要对产品,客户,市场,销售模式都进行一个分析,让后选择合适的销售渠道。

7.营销(我老是打成淫笑)不仅仅是SEM,B2B,门户。还可以更多,但是得根据产品目标群体对于网络的依赖度来指定。

8.对于OEM企业的网络营销,SEM是最好的方式。

这是我对于此次叫兽的培训的最大感悟。

O了,今天可能去参加百度的精准营销。

PS:小胡同志真的是工作狂啊,都有白头发鸟。

python的错误和异常

python中至少有两种错误,一种是语法错误- -,一种就是异常。

语法错误就没啥好说的了,解释器会提示syntax error,并且指向出错的行。很好解决。

比较麻烦的是异常了。

在程序运行时检测出的错误称之为异常。其实异常和php中的差不多,不同的是处理而已。

1.try/except语句

扑捉又python或你引起的错误,并且恢复。

工作流程:首先执行try字句,如果没有异常发生,那么except的字句就被python无视了。如果发生了异常,那么try子句的余下部分就被无视,然后except就会匹配扑捉异常的类型进行匹配,然后如果得到匹配,就会执行except的子句。如果在except中没有找到与之匹配的分支。就会传递到上一级的try语句中,如果还是找不到匹配,就直接抛出错误。

一个try语句能包含多个except语句,分别指定不同类型的异常。至多也只会有一个分支被执行。

try/except也可以追加一个else语句,它出现在所有except语句之后,当try没有抛出异常时候,就执行这个else的子句。

2.抛出异常

raise语句强制指定的异常发生。

比如:raise NameError, ‘name’或者raise NameError(name)

第一个参数是指定抛出异常的名称,第二个参数指定了异常的参数。

3.自定义异常

用户也可以创建新的异常类型来命名自己的异常,异常通常是直接或者间接的从exception类中派生。

比如:

class MyError(Exception):

def __init__(self, value):

self.value = value

def __str__(self):

return repr(self.value)

try:

raise MyError()

except MyError, e:

pass

4.finally

它在无论try是否抛出异常,最终都会执行的它的字句。

当然鸟,还有两个语句,一个是assert,它是有条件的在程序中触发异常,还有一个是with/as,这个是在python2.6以后实现环境管理器。

不说鸟,最近有时间研究django,开发一些小的web应用也好。

python的命名空间和作用域

因为类的定义借用了命名空间,所以要深入的接触类,先得了解python的命名空间和作用域。

命名空间是从命名到对象的映射。

不同命名空间中的命名是没有任何联系的。

python中的任何一个“.”之后的命名为属性,比如:在x.pro表达式中,pro就是对象x的属性。

严格的说,从模块中引用命名空间是引用属性,modelname.function中,modelname是一个模型对象,function是它的一个属性,因此,模块中的属性和模块中的命名有直接的隐射关系,因为他们共享同一个命名空间。

属性是可以是可读或写的,对于可写的属性,可以进行赋值,比如:modelname.value = ‘value’,可写的属性可以用del删除。

比如:del modelname.value。

不同命名空间在不同的时刻创建,并且有不同的生存周期。

包含内置命名的命名空间是在python的解释器启动时候就创建的,并且一直保留,不会被删除。

函数在被调用时候创建一个命名空间,而每一个递归也都拥有自己的命名空间。

作用域是python程序中一个命名空间可以直接访问的文本区域。在这里,直接访问的意思是查找命名时无需应用命名前缀。

尽管作用域是静态定义的,但是在使用的时候,他们都是动态的,每次执行的时候,至少有三个命名空间可以直接访问的作用域嵌套在一起。他们分别是局部的,它在最里面,首先被搜索,然后再是当前命名空间作用域,最后是系统内置的作用域。

它们的搜索顺序是:局部命名空间->当前命名空间->内置命名空间

一般的局部命名空间是函数的内部,递归的内部。

如果一个命名声明为全局,那么所有的赋值和引用都是直接针对包含模块全局命名的中级作用域。

作用域决定于源程序的文本。

其实呢,更好的理解还是得以后多写代码才成啊

有关于MOBO优化的问题

跟领导出去培训,席间领导说,我想出去旅游,下个月要请假。领导说,这是不可能的,我说为什么,她说因为现在你的“变频空压机”这个关键字还没做上去。我说,好吧,你PPC不做了,然后被百度认为了,我能咋办。

培训的时候,总经理过来了,我就跟纳闷了,总经理来打酱油啊,不去卖你的空压机,跑过来跟我一起听课= =。其实我还是觉得总经理是个不错的人,只是有时候吧,说话像打架。总经理跟我讨论了接下来,我们如何做,以及我们要达到什么样的效果。我心里也比较有数,毕竟,拿了你的钱,我总得归干点活,你说不是么?

还是要考虑到网站重构的问题,包括网站的宣传,以及真正的做好网络营销。但是我还是觉得应该重构。

我主要的研究方向还是程序以及营销,做好这两样才是我的工作。

功夫梦,这个梦字很纠结啊

其实对于写影评什么的,最讨厌了。而且我一直觉得自己是个俗人,没啥艺术可言的。晚上,一边写代码,一边把功夫梦看完了,没啥感觉,名字取得就很蛋疼,小男孩明明是被人欺负了才跑去学武的,还梦,梦你妹啊。

成龙真的年纪大了,我到时觉得成龙可以说说他的梦,看他电影长大的,对于那些老一辈的影星,总是有着很特殊的感情。我一直就很喜欢张敏,还有周星驰,还有很多。对于那些老电影也很喜欢。我不知道我会被那些老电影感动的时间还有几年。好吧,承我还能被感动,多多去感动一下吧。

豆瓣上的人,要求总是跟高,每个人都以为自己有独特的见解,都以为自己跟别人不一样。越来越反感豆瓣了,要不是上面的妹子还可以,真不想去。

梦,我记得我刚出来的时候也是满腔的热血,也是曾经那么的渴望成功,2年后,当一切都是浮云后,我才知道我适合做一个技术宅,我厌倦了没理由的奉承,没理由的赞美,没理由的热血。现在,我终于成了个死宅男,连很多论坛我都叫自己死宅男。

有时候晚上就想写点东西,不然的话,就会蛋疼菊紧,不知道为什么,以为多学学,多写写吧。

下个月要去厦门,但愿有个好的旅程。

mysql中的count以及sum函数

mysql的函数还是十分强大的,也许不能讨论的得很清楚,权当作自己笔记吧。

sum是就列的数字和。

eg:select sum(obj) from table

这样返回的就是table表中obj的和。但是我觉得一般的情况下,sum都应该和group by一起配合使用。group by就是分组了。

比如:select sum(obj) from table group by obj2

在进行sum计算时,值为null的字段是被忽略的。也就是说1 + null = 1。

而count则是计算指定列的和,比如如果有两条符合要求的数据,那么返回的就是2

比如:select count(*) from table where ooxx

也是灰常好用的。

count还有个用法就是discount了。

比如:select count(discount `id`) from table where ooxx

这样的话,返回的结果集里面,所有的id都是不同的,也就是说,discount会过滤掉id值相同的字段。

更加好的写法就是 select count(discount `id`) as id_t from table where ooxx

这样的话,count所得到的数据就会赋值给id_t,在返回的数据机构中,可以id_t就是count结果键值了。当然鸟,没有discount也是可以用as的。

count或者count(discount `ooxx`)返回的只是数字集合。

discount关键字的作用还是很好的,可以这样写 select discount id from table。这样的话,返回的就是不同的id了。

discontent关键字,在处理两个以上的对象时候,比如:select discount id, class from table 。

那么只有当id和class相同的时候才会过滤,而其中只有一条相同的时候是不过滤的。

在网上查了一下,发现count函数在没有where的情况下,效率是很高的,而在有where的情况下,则是有影响效率的,但是具体有多影响,还不知道,但是既然值得说出来,肯定还是有一些不小的影响的。

好鸟,就这么多鸟。

python的OOP基础

OOP=面向对象。在python的世界里,一切都是对象。

现了解一些术语。

类:将一些变量和方法封装起来。

对象:类的实例,可以使用类中定义第方法和变量。

类的属性:类中变量和类中的变量统称为类的属性。

域:属于一个对象或者类的变量。

实例变量:属于类实例或者对象的变量。

类变量:属于类的变量。

class:用来创建类。

类中的方法和普通的函数:

他们都是一个能完成特定工作的代码块。只是名字不一样,还有一个不一样的就是,python类中的方法比普通函数要多一个self参数。self参数有点类似javascript中this,都是指向对象本身。

self参数的名称不是必须为self的,只是大家都这么用而已,习惯。

self在调用的时候并不需要赋值。

类的创建:

很简单,使用class,比如

class MyClass:

pass

类的属性都保存在缩进里面。

而实例化类也很简单。但是这个和php或者javascript中都有点不一样。因为python里面实例化是不需要new的。

比如我们要实例化前面定义的MyClass,我们可以:

obj =MyClass()

这样就OK了。

python类中方法的定义,我再次说明,self参数是必须的,如果不加,你懂的,会报错:

class ClassName:

def sayHello(self):

print ‘Hello’

obj = ClassName()

obj.sayHello()

定义还是比较简单的,只是要主要别忘记self参数。

__init__方法,这个类似于php中类的类的初始化,在python中__init__是类的初始化方法。当然,使用__init__方法也必须指定self参数。

比如:

class myClass:

def __init__(self, name):

self.name = name

def sayHi(self):

print ‘My name is ‘, self.name

obj = myClass(‘鬼畜’)

obj.sayHi()

这里现说一点啊,print ‘My name is ‘, self.name中的’,'号并不是字符串的连接符,+号才是,,号只是表示字符串显示在统一行上而已。

__init__方法中定义了一个name参数,那么在实例化的是时候,就必须为类赋值这个参数。

def __init__(self, name):

self.name = name

__init__中的两个name是不同的,self.name其实是这个对象的name,而后面那个name只是一个值,他对应的是__init__的名称为name的参数。

__init__方法不需要调用,因为在python中,类别调用的时候,__init__就已经被执行了。

类的变量和对象的变量:

其实它们都只是与类和对象的命名空间绑定的变量。只有在指定了类或者对象的情况下才能访问。

类的变量是由类的所有实例(对象)共享的,都能访问的。而对象的变量是只能由定义那个变量的对象才能访问。

他们都是在类中定义的,只是对象的变量是由对象来决定它的值的。

比如:

class myClass:

mystring = ”

def __init__(self, name):

self.name = name

在这里mystring就是类的变量,而__init__的参数name则是对象的变量。

继承:

这个就是实现代码最大化重用所用到的一个东西。

继承处理的就是类与子类的关系。子类能够访问父类的属性。而父类是不能够访问子类的属性的。

使用也很简单:

classs sail:

pass

class buy(sail):

pass

只要在创建子类时使用括号,然后在括号里面加上你想要继承的类。

注意点:

1.子类访问父类的时候,因为是不同的命名空间,所以必须指定类名。

2.子类继承父类时,父类的__init__方法不会被执行,所以要必须在子类中调用而执行。

3.父类的任何改动都会影响到子类,而子类的改动或者任何赋值,访问都不会影响父类。

好鸟,没鸟

python的模块基础

本来想继续深入函数的,发现还是算了,没那个必要,先折腾下python的模块。貌似有MVC的感觉啊。囧了。

模块是最高级别的程序阻止单元,它能够将数据和程序代码封装起来以便重用。说白了,就是白一坨代码和一对的数据放在一个单独的文件里面,等要用的时候再去import。

这里有三个鬼畜值得介绍说说:

1.import,它是指使客户端以一个整体获取一个模块,也就是说导入整个模块文件。

2.form,允许客户端从一个模块文件中获取特定的变量名。

3.reload,在不中止python的情况下,重新载入模块文件代码。

还有一个比较注意的地方就是,模块必须以py为文件名。但是导入的时候并不需要加上后缀,比如我们定义了一个demo.py,我们想在test里面导入,只需要import demo就好,不必加上py后缀。

通常模块里面的方法都是用在模块被import后,用模块名.方法名(属性名)调用的。

模块也可以包含一些执行语句,但是他们一般都是初始化用的,所以只在文件被第一次import的时候执行。

模块也可以导入其他的模块,而已一般import语句都写在文件开头,但是,这不是必须的。

python中以及嵌入了一些标准的模块库,可以直接使用。(但他们不是python语句的一部分)

模块最基础的三个作用:

1.实现代码的重用。

2.系统命名空间的划分,避免了变量名的冲突。

3.共享服务和数据。

每个python模块有有一个__name__,如果print它得到的结果是__main__,那么表示被用户单独运行。

其实每一个程序都可以看出一个模块,只要你指定py后缀。

在对python模块中的方法或者属性进行调用的时候,我们使用点调用。

import的工作原理:

1.找到模块文件

2.编译成位码。

3.执行模块的代码来创建其所定义的对象。

这三个步骤只是在程序执行时,模块第一次被导入才执行这三个步骤。在以后相同模块导入时,会跳过这三个步骤,直接提取内存中已加载的模块对象。

没鸟。