2012年7月13日星期五
how to make Emacs convenient for Windows(1) 使用云存储同步Emacs配置文件
最容易在程序员中挑起争论的话题,除了编程语言的选择,就是编辑器之争了,什么地球上只有三种编辑器,vim,Emacs和其他。我选择了Emacs。
首先我不是Emacs原教旨主义者,不会变态到用Emacs上网,发微博,就像http://emacser.com/里列举的例子
选择Emacs的理由很多,我觉得有两个原因对我非常重要。
1.跨平台:在windows,linux,mac上使用经验连贯,在telnet终端,cygwin等各种环境里一样顺手。
2.bash shell的readline库缺省键盘绑定就是emacs模式,也就是说在bash shell命令行你可以使用emacs的快捷键,ctrl-a,ctrl-e,M-f,M-b等等,是不是非常亲切,这些快捷键能极大提高效率。
目前我的主要工作环境仍然是Windows,日常开发都在Windows上进行,当然生成环境是清一色的Linux。所以我准备写个系列,介绍一下如何使Emacs在windows上更加顺手。
啰嗦了一大堆,先来第一篇,如何使用云存储同步Emacs的配置文件。
这年头谁没有几台电脑,公司的台式机、笔记本,家里的台式机、笔记本,精心配置好了Emacs,可以不想每台电脑都来一遍。用USB拷贝?那真是you SB了。云时代了,当然是选择云存储同步配置了,任何一台机器改配置都能同步生效,重装机器也不怕,欧也。
其实实现思路非常简单,我们把Emacs的缺省配置文件作为跳板,让它指向我们真正的配置文件,当然这个真正的配置存储在网盘中。至于你选择哪个云存储,随便啦。
首先找到Emacs的缺省配置文件,在home目录里,${home}/.emacs。Home目录在哪儿?Linux上很直白的事,windows上就麻烦一些,不同Windows版本位置可能不一样。不用google,让Emacs自己告诉你。
Ctrl-x Ctrl-f ~/.emacs,enter,打开这个文件进行编辑。
将这个文件的内容改为
(load-file "d:/你的网盘根目录/tools/emacs/.emacs")
很明显,它的作用就是指向你真正的配置文件。存盘,重启,OK了。
That's all,今天就到这里了。
2012年7月12日星期四
为TotalCommander安装SFTP(Secret File Transfer Protocol)插件
Total Commander用了快2年,已经成了我的必备工具,作者超级厚道,非注册版只是在启动时提示一下,功能完全一样。有人说为了它而留在windows平台,有点夸张,不过很多人确实超级喜欢这个软件,每年都有网友自发团购。有兴趣的可以看看善用佳软的TC系列教程 http://xbeta.info/studytc/
TotalCommander的一个特点是支持插件。今天想用scp往服务器上传些文件,不想去装WinSCP这类独立软件,希望能在TC里面完成,这样具有统一的操作风格,本地,ftp,sftp等文件管理快捷键都是一致的。这种常用功能果然有对应的插件 http://www.ghisler.com/plugins.htm,SFTP 1.3。下载插件和OpenSSH DLLs。在TotalCommander里双击插件自动安装,然后将OpenSSH的dll文件解压到插件目录,例如:d:\totalcmd\plugins\wfx\sftpplug\
重启后Alt+F1或F2,选择网络邻居(network neighborhood),可以看到secure FTP,回车进入,就可以创建SFTP连接了。
2010年4月1日星期四
Cassandra数据模型简介
Cassandra是一个分布式的key/value store,号称是第二代的分布式数据库,结合了Dynamo的全分布式设计和Bigtable的数据模型。Cassandra今年已经升为apache 的顶级项目,并且被众多技术爱好者频繁提及,确实值得关注一下。先看一下Cassandra官方的overview:
其他特性不必说了,分布式key/value居家必备。我最关注的是Rich Data Model,就像它自己强调的,不再是简单的Key/Value了。
浏览了相关的文档,我可以大致的描述一下。Cassandra的数据 模型可以被简单的认为是4或5维的hash。我们从下往上介绍:
最基础的是Column,由 name,value,timestamp组成,例如
{
name: "emailAddress",
value: "arin@example.com",
timestamp: 123456789
}
SuperColumn, 顾名思义,SuperColumn可以包含多个column。SuperColumn是可选的,你可以只使用最简单的column。
{
name: "homeAddress", // SuperColumn name
value: { // value就是多个column的list
street: {name: "street", value: "1234 x street", timestamp: 123456789},
city: {name: "city", value: "san francisco", timestamp: 123456789},
zip: {name: "zip", value: "94107", timestamp: 123456789},
}
}
ColumnFamily,column容器,类似数据库中表的概念。
ColumnFamily 中的每一行由key和column list组成。和数据表的最大区别是没有预定义的schema,每一行可以包含任意多个column。
UserProfile = { // this is a ColumnFamily
phatduckk: { // key
// 下面是column list
username: "phatduckk",
email: "phatduckk@example.com",
phone: "(900) 976-6666"
},
ieure: { // key
// 下面是column list
username: "ieure",
email: "ieure@example.com",
phone: "(888) 555-1212"
age: "66",
gender: "undecided"
},
}
在 Cassandra中,一个key甚至可以关联多个“表”中的同一行:
{
"mccv":{ // key
"Users":{ // Columnfamily,用户“表”
// column list
"emailAddress":{"name":"emailAddress", "value":"foo@bar.com"},
"webSite":{"name":"webSite", "value":"http://bar.com"}
},
"Stats":{ // Columnfamily,状态“表”
// column list
"visits":{"name":"visits", "value":"243"}
}
}
}
另外一个很重要的特性,同一行的column是按照column name排序的,注意,是用column name排序!Cassandra支持几种排序方式,BytesType, UTF8Type, LexicalUUIDType, TimeUUIDType, AsciiType, and LongType.在数据存储的时候已经进行了排序,所以当通过key取出column时是有序的。
key {
{name: 3, value: "101010101010"},
{name: 123, value: "hello there"},
{name: 976, value: "kjjkbcjkcbbd"},
{name: 832416, value: "kjjkbcjkcbbd"}
}
这个例子使用了LongType排序类型,按照name的升序排序。 这个特性非常有用,可以想象如果使用TimeUUIDType类型,所有的column都会按照时间排序。
Keyspaces,column families容器,对应于数据库概念的database,一般是每个应用配置一个Keyspace。
最上层是Cluster, 代表一个Cassandra实例。Cluster可以包含多个 keysapces。
简单的概括一下:
介绍完概念我们看一个具 体的例子是如何使用这种数据模型的。我参考的是Digg工程师写的一篇介绍,并进行了简化,感觉这样更能突出Cassandra数据模型的特点。完整的描 述可以参考后面的reference,里面还包括了一篇介绍Twitter是如何使用Cassandra数据模型的。
设想一个简单的 blog系统,可以为每篇blog指定多个tag,并可以按照时间逆序浏览每个tag的blog列表,当然也可以按照时间浏览所有blog。
首先定义一个BlogEntries ColumnFamily,标题作为key,一行代表一篇blog,用逗号分隔表示多个tag,很好理解:
BlogEntries : { // ColumnFamily
i-got-a-new-guitar : { // key,blog标题
title: This is a blog entry about my new, awesome guitar,
body: this is a cool entry. etc etc yada yada
author: Arin Sarkissian
tags: life,guitar,music // 逗号分隔的多个tag
pubDate: 1250558004
slug: i-got-a-new-guitar
},
// 其他blog列表
another-cool-guitar : {
...
tags: guitar,
slug: another-cool-guitar
},
scream-is-the-best-movie-ever : {
...
tags: movie,horror,
slug: scream-is-the-best-movie-ever
}
}
再来看看Tag“表”怎么定义,把tag 作为key,每一行包含了所有标记了这个tag的blog list。Cassandra中的column不像在数据库中,不需要预先定义。
TaggedPosts : { // CF
// 标记了guitar tag的blog
guitar : { // key,tag name
// 列名是TimeUUIDType类型,value对应的是BlogEntries中的key
timeuuid_1 : i-got-a-new-guitar,
timeuuid_2 : another-cool-guitar,
},
// 所有blog都列在这个特殊的tag下
__notag__ : {
timeuuid_1b : i-got-a-new-guitar,
timeuuid_2b : another-cool-guitar,
timeuuid_2b : scream-is-the-best-movie-ever,
},
// 标记了movie tag的blog
movie: {
timeuuid_1c: scream-is-the-best-movie-ever
}
}
我们把列名定义为TimeUUIDType类型。记得前面提 到过,Cassandra是按照列名来排序的,TimeUUIDType就是按照时间来排序的。那么我们通过tag取出的blog列表自然就是按照时间排序的了。Cassandra的api支持根据key和范围条件获取一部分的column list,类似数据库的分页,而且取出来的列都是有序的。定义了两个简单的ColumnFamily,干净漂亮的完成了需求。
可以看 出,Cassandra已经超越了简单的key/value,数据模型是相当的灵活。其核心可以概括为两句话:
1. 由key指明的每一行可以包含任意多的column
2. 每一行内的column是按照name排序的
Reference
cassandra 项目主页
http://cassandra.apache.org/
DataModel
http://wiki.apache.org/cassandra/DataModel
API
http://wiki.apache.org/cassandra/API
Digg 工程师写的DataModel介绍
http://arin.me/blog/wtf-is-a-supercolumn-cassandra-data-model
Twitter 的DataModel介绍
http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/
B2B DBA写的一篇介绍
http://www.hellodba.net/2010/02/cassandra.html
江 枫写的两篇介绍
Cassandra存储机制 http://www.ningoo.net/html/2010/cassandra_storage.html
Cassandra Commitlog http://www.ningoo.net/html/2010/cassandra_commitlog.html
Yahoo针对多个Key/Value系统的比较测试
http://www.brianfrankcooper.net/pubs/ycsb-v4.pdf
- Proven: Digg,facebook,Twitter在使用
- Fault Tolerant:数据自动replicated到多个节点
- decentralized: 所有节点都是相同的
- you're in control:可以为每次的update选择同步或异步的复制
- Rich Data Model:不只是简单的key/value
- Elastic:线性的扩展
- Highly available:可调节的一致模型,从"writes never fail" -> "block for all replicates to be readable"
其他特性不必说了,分布式key/value居家必备。我最关注的是Rich Data Model,就像它自己强调的,不再是简单的Key/Value了。
浏览了相关的文档,我可以大致的描述一下。Cassandra的数据 模型可以被简单的认为是4或5维的hash。我们从下往上介绍:
最基础的是Column,由 name,value,timestamp组成,例如
{
name: "emailAddress",
value: "arin@example.com",
timestamp: 123456789
}
SuperColumn, 顾名思义,SuperColumn可以包含多个column。SuperColumn是可选的,你可以只使用最简单的column。
{
name: "homeAddress", // SuperColumn name
value: { // value就是多个column的list
street: {name: "street", value: "1234 x street", timestamp: 123456789},
city: {name: "city", value: "san francisco", timestamp: 123456789},
zip: {name: "zip", value: "94107", timestamp: 123456789},
}
}
ColumnFamily,column容器,类似数据库中表的概念。
ColumnFamily 中的每一行由key和column list组成。和数据表的最大区别是没有预定义的schema,每一行可以包含任意多个column。
UserProfile = { // this is a ColumnFamily
phatduckk: { // key
// 下面是column list
username: "phatduckk",
email: "phatduckk@example.com",
phone: "(900) 976-6666"
},
ieure: { // key
// 下面是column list
username: "ieure",
email: "ieure@example.com",
phone: "(888) 555-1212"
age: "66",
gender: "undecided"
},
}
在 Cassandra中,一个key甚至可以关联多个“表”中的同一行:
{
"mccv":{ // key
"Users":{ // Columnfamily,用户“表”
// column list
"emailAddress":{"name":"emailAddress", "value":"foo@bar.com"},
"webSite":{"name":"webSite", "value":"http://bar.com"}
},
"Stats":{ // Columnfamily,状态“表”
// column list
"visits":{"name":"visits", "value":"243"}
}
}
}
另外一个很重要的特性,同一行的column是按照column name排序的,注意,是用column name排序!Cassandra支持几种排序方式,BytesType, UTF8Type, LexicalUUIDType, TimeUUIDType, AsciiType, and LongType.在数据存储的时候已经进行了排序,所以当通过key取出column时是有序的。
key {
{name: 3, value: "101010101010"},
{name: 123, value: "hello there"},
{name: 976, value: "kjjkbcjkcbbd"},
{name: 832416, value: "kjjkbcjkcbbd"}
}
这个例子使用了LongType排序类型,按照name的升序排序。 这个特性非常有用,可以想象如果使用TimeUUIDType类型,所有的column都会按照时间排序。
Keyspaces,column families容器,对应于数据库概念的database,一般是每个应用配置一个Keyspace。
最上层是Cluster, 代表一个Cassandra实例。Cluster可以包含多个 keysapces。
简单的概括一下:
- column: a name,value and a timestamp
- SuperColumns:包含多个子columns
- ColumnFamilies: “表”,包含column和superColumn
- keyspace:“数据库”,包含多个ColumnFamilies,一般是每个 应用一个
- cluster: 逻辑实例节点,包含多个 keysapces
介绍完概念我们看一个具 体的例子是如何使用这种数据模型的。我参考的是Digg工程师写的一篇介绍,并进行了简化,感觉这样更能突出Cassandra数据模型的特点。完整的描 述可以参考后面的reference,里面还包括了一篇介绍Twitter是如何使用Cassandra数据模型的。
设想一个简单的 blog系统,可以为每篇blog指定多个tag,并可以按照时间逆序浏览每个tag的blog列表,当然也可以按照时间浏览所有blog。
首先定义一个BlogEntries ColumnFamily,标题作为key,一行代表一篇blog,用逗号分隔表示多个tag,很好理解:
BlogEntries : { // ColumnFamily
i-got-a-new-guitar : { // key,blog标题
title: This is a blog entry about my new, awesome guitar,
body: this is a cool entry. etc etc yada yada
author: Arin Sarkissian
tags: life,guitar,music // 逗号分隔的多个tag
pubDate: 1250558004
slug: i-got-a-new-guitar
},
// 其他blog列表
another-cool-guitar : {
...
tags: guitar,
slug: another-cool-guitar
},
scream-is-the-best-movie-ever : {
...
tags: movie,horror,
slug: scream-is-the-best-movie-ever
}
}
再来看看Tag“表”怎么定义,把tag 作为key,每一行包含了所有标记了这个tag的blog list。Cassandra中的column不像在数据库中,不需要预先定义。
TaggedPosts : { // CF
// 标记了guitar tag的blog
guitar : { // key,tag name
// 列名是TimeUUIDType类型,value对应的是BlogEntries中的key
timeuuid_1 : i-got-a-new-guitar,
timeuuid_2 : another-cool-guitar,
},
// 所有blog都列在这个特殊的tag下
__notag__ : {
timeuuid_1b : i-got-a-new-guitar,
timeuuid_2b : another-cool-guitar,
timeuuid_2b : scream-is-the-best-movie-ever,
},
// 标记了movie tag的blog
movie: {
timeuuid_1c: scream-is-the-best-movie-ever
}
}
我们把列名定义为TimeUUIDType类型。记得前面提 到过,Cassandra是按照列名来排序的,TimeUUIDType就是按照时间来排序的。那么我们通过tag取出的blog列表自然就是按照时间排序的了。Cassandra的api支持根据key和范围条件获取一部分的column list,类似数据库的分页,而且取出来的列都是有序的。定义了两个简单的ColumnFamily,干净漂亮的完成了需求。
可以看 出,Cassandra已经超越了简单的key/value,数据模型是相当的灵活。其核心可以概括为两句话:
1. 由key指明的每一行可以包含任意多的column
2. 每一行内的column是按照name排序的
Reference
cassandra 项目主页
http://cassandra.apache.org/
DataModel
http://wiki.apache.org/cassandra/DataModel
API
http://wiki.apache.org/cassandra/API
Digg 工程师写的DataModel介绍
http://arin.me/blog/wtf-is-a-supercolumn-cassandra-data-model
Twitter 的DataModel介绍
http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/
B2B DBA写的一篇介绍
http://www.hellodba.net/2010/02/cassandra.html
江 枫写的两篇介绍
Cassandra存储机制 http://www.ningoo.net/html/2010/cassandra_storage.html
Cassandra Commitlog http://www.ningoo.net/html/2010/cassandra_commitlog.html
Yahoo针对多个Key/Value系统的比较测试
http://www.brianfrankcooper.net/pubs/ycsb-v4.pdf
2010年3月5日星期五
淘宝年会随感
参加完淘宝的年会,心里产生了一个想法,淘宝和当前中国的状况真有几分神似。都是在高速发展中,成绩被外人所惊叹,但同时又存在很多问题,批评者都会指出,如果这样或那样的问题不解决,将导致最终崩溃。而淘宝提出的解决方案也和国家一样,发展才是硬道理,不是停下来解决问题,而是每年以1倍的速度高速成长,问题在成长中摸索着解决。就像中国的GDP,不敢停下来。我不是想评论公司或国家的策略,而是想到,这种以动态发展的眼光去看待遇到的困难,是我们很多人都不具备的。我们常会停下来抱怨,而不知道迎着困难努力前行,战略上藐视困难,发展中解决问题。
马云说,上网是整体素质偏高的人群,但在网上发表评论的又是素质最低的一群人。你做任何事情,都会有人骂你。他也许是被骂的太多了。老毛大概也是这个原因,不待见知识分子。这个世界不缺有想法的人,但缺少为想法付诸实际行动的人。坐而论道,不如退而结网(韩式语录)。刚上推特时对政治话题感兴趣的不得了,哇塞,民主了,解放了。看多了我就郁闷了。似乎发表悲观的论调更容易吸引听众,股市暴跌,楼市崩盘,中国崩溃。冷嘲热讽看多了都已经变成麻木。而且所谓的民运圈为了一点利益就在推特上吵架,还好我比较厚道又喜欢看八卦。
任何善意的、正面的想法,都被现实击的粉碎。不希望去关注政治,以正面的眼光去看待可能发生的积极变化。但谷歌的离去,还是让我愤怒。
屁股决定脑袋,我从马云的讲话里,听到的都是道理。
马云说,上网是整体素质偏高的人群,但在网上发表评论的又是素质最低的一群人。你做任何事情,都会有人骂你。他也许是被骂的太多了。老毛大概也是这个原因,不待见知识分子。这个世界不缺有想法的人,但缺少为想法付诸实际行动的人。坐而论道,不如退而结网(韩式语录)。
任何善意的、正面的想法,都被现实击的粉碎。不希望去关注政治,以正面的眼光去看待可能发生的积极变化。但谷歌的离去,还是让我愤怒。
屁股决定脑袋,我从马云的讲话里,听到的都是道理。
2010年2月28日星期日
吞吐量和响应性的思考
系统的性能可以从吞吐量和响应性这两个方面考察。吞吐量衡量的是“有多少”,即限定资源的情况下,能够完成多少工作。响应性衡量的是“有多快”,即单个任务的处理时间。可以说吞吐量越大,响应越快,就表示系统的性能越好。
性能的这两个方面是完全分离的,有时候甚至是矛盾的。有人说软件设计就是权衡,其实我们能在很多地方看到对吞吐量和响应性的取舍。
1. Java gc算法的选择。Java -server缺省的gc算法是Parallel Collector,能够提高吞吐量,但是当你对响应时间更看重的时候,就需要选择Concurent Mark-Sweep(CMS)。
2. 线程上下文的切换。OS在线程上下文切换的时候会有系统开销,调度程序会为每一个可运行的线程分配一个最小执行时间,这样做是为了偿还线程切换的开销,获得更多不中断的执行时间,从整体上提高吞吐量,但这是以牺牲响应性为代价的。
3. Real-Time Java
实时系统,简单的说就是,能够在指定或者确定的时间内完成任务。系统的正确性不仅取决于系统计算结果的正确性.而且取决于正确结果产生的时间。
● “When” is as important as “what”
● “A late answer is a wrong answer”
real-time并不意味着一定比非实时“快”,而是强调执行时间的可预测性。普通Java不能做到实时,GC暂停是一个很重要的原因,因为这是开发人员无法控制和预测的因素。因此在Real-Time Java中,对GC的选择就是完全偏重于响应性。我们可以看一个对比:
对于SIP(Session Initiation Protocol) Server,实时系统的吞吐量比普通系统小,但对请求处理的延迟时间小,延迟大于50ms的只占0.3%。
性能的这两个方面是完全分离的,有时候甚至是矛盾的。有人说软件设计就是权衡,其实我们能在很多地方看到对吞吐量和响应性的取舍。
1. Java gc算法的选择。Java -server缺省的gc算法是Parallel Collector,能够提高吞吐量,但是当你对响应时间更看重的时候,就需要选择Concurent Mark-Sweep(CMS)。
2. 线程上下文的切换。OS在线程上下文切换的时候会有系统开销,调度程序会为每一个可运行的线程分配一个最小执行时间,这样做是为了偿还线程切换的开销,获得更多不中断的执行时间,从整体上提高吞吐量,但这是以牺牲响应性为代价的。
3. Real-Time Java
实时系统,简单的说就是,能够在指定或者确定的时间内完成任务。系统的正确性不仅取决于系统计算结果的正确性.而且取决于正确结果产生的时间。
● “When” is as important as “what”
● “A late answer is a wrong answer”
real-time并不意味着一定比非实时“快”,而是强调执行时间的可预测性。普通Java不能做到实时,GC暂停是一个很重要的原因,因为这是开发人员无法控制和预测的因素。因此在Real-Time Java中,对GC的选择就是完全偏重于响应性。我们可以看一个对比:
对于SIP(Session Initiation Protocol) Server,实时系统的吞吐量比普通系统小,但对请求处理的延迟时间小,延迟大于50ms的只占0.3%。
2010年2月26日星期五
直击心灵的文字
很喜欢李笑来的blog http://www.lixiaolai.com/,并强烈推荐他的书《把时间当作朋友》,正如副标题所说的,“运用心智获得解放”。
阅读他的文字,常有直击心灵的感觉。一层层的拨开事物表面的掩盖,让你直接看到事物的本质。平时太熟悉视而不见的问题,突然放在了眼前,让你真正的正视自己的时候,心弦为之一动。听到这么直接的话评判自身的问题,真的不太好受。例如这篇《效率低下的根源——回避困难》,一句话就点醒了自己,我何尝不是这样呢。只有直面自己的缺点,才有机会改正。做个明白人。
阅读他的文字,常有直击心灵的感觉。一层层的拨开事物表面的掩盖,让你直接看到事物的本质。平时太熟悉视而不见的问题,突然放在了眼前,让你真正的正视自己的时候,心弦为之一动。听到这么直接的话评判自身的问题,真的不太好受。例如这篇《效率低下的根源——回避困难》,一句话就点醒了自己,我何尝不是这样呢。只有直面自己的缺点,才有机会改正。做个明白人。
西安网络购物状况感受
过年回西安,从亲戚那儿了解到他们网络购物的使用情况,觉得比较有代表性,因此记录一下:
1. 我姐,中学教师,在西安收入中等偏上,最近刚从京东买了一台4000元的HP笔记本。原来是偶然逛淘宝,后来听我说京东买电器比较专业,尝试着买过耳机,充电电池等小东西,感觉不错,这次就大胆的买了一个笔记本电脑。用我姐夫的话,去电子市场也不太懂,逛的头晕脑胀,不如在网上,即可以仔细比较,还可以了解到真正的热门机型。只要是正品,还是网上买方便。
2. 表弟,室内装修设计。自己只在网上买过书,不太爱逛淘宝,理由是嫌麻烦。他的女同学比较爱逛淘宝,买些便宜的衣服。也有同学在淘宝开店,据说做的比较成功。
3. 表妹,电视台记者。没有网络购物经历,一说到淘宝就想到央视上曝光的在淘宝上卖翻新手机事件。到底是做电视栏目的,对这种题材很敏感。很想从我这了解网店的具体运作,还有网络作为新媒体对她所从事的传统媒体的影响。说实在的,我在这些方面也是小白。我只能告诉她淘宝其实也是个媒体,主要的收入也来自于广告。
4. 淘宝的知名度很大,专业B2C的网站很多人都没有听说过。但B2C的用户体验明显好过淘宝,一旦使用后,忠诚度较高。
1. 我姐,中学教师,在西安收入中等偏上,最近刚从京东买了一台4000元的HP笔记本。原来是偶然逛淘宝,后来听我说京东买电器比较专业,尝试着买过耳机,充电电池等小东西,感觉不错,这次就大胆的买了一个笔记本电脑。用我姐夫的话,去电子市场也不太懂,逛的头晕脑胀,不如在网上,即可以仔细比较,还可以了解到真正的热门机型。只要是正品,还是网上买方便。
2. 表弟,室内装修设计。自己只在网上买过书,不太爱逛淘宝,理由是嫌麻烦。他的女同学比较爱逛淘宝,买些便宜的衣服。也有同学在淘宝开店,据说做的比较成功。
3. 表妹,电视台记者。没有网络购物经历,一说到淘宝就想到央视上曝光的在淘宝上卖翻新手机事件。到底是做电视栏目的,对这种题材很敏感。很想从我这了解网店的具体运作,还有网络作为新媒体对她所从事的传统媒体的影响。说实在的,我在这些方面也是小白。我只能告诉她淘宝其实也是个媒体,主要的收入也来自于广告。
4. 淘宝的知名度很大,专业B2C的网站很多人都没有听说过。但B2C的用户体验明显好过淘宝,一旦使用后,忠诚度较高。
订阅:
博文 (Atom)