Neo 的个人资料Neo Think Space照片日志列表更多 工具 帮助

日志


2007/9/9

知识人才的管理

GE用人原则

  1. 重奖20%的优秀员工
  2. 鼓励培训70%一般员工
  3. 淘汰10%不合格员工

建立团队,是学习型组织。

团队的人是完全平等的。

在学习的基础上创新。

无边际管理:有好主意的有权力胜出。

管理模式的三个阶段

经验管理-师傅型领导

科学管理-指挥型领导

文化管理-育才型管理

韦尔奇-把60%的时间用来培养人。

如何面对人才流失

可以自己快速培训人才

文化管理

影响思想,影响理念。

优秀公司的四个价值观

  1. 强调团队精神
  2. 以顾客为中心
  3. 公平对待你的雇员
  4. 提倡主动性和创新精神

一般公司的四个价值观

  1. 尽可能的减小风险
  2. 尊重各级管理员的指挥
  3. 支持老板
  4. 作出预算

科学管理不讲人情,以工作导向。人情是在同一个价值观下保证。

扁平化如何决策?

最了解情况的人定决策。

小企业如何吸引人才?

做强。

2007/9/1

20世纪的经济学发现学习笔记-消费品价格基本方程式

E(1-S)=PQ

E代表个人名义总收入

S代表个人名义总收入的储存比例

P代表消费品的平均价格

Q代表消费者购买的消费品量

这个方程式很简单,但是却很有意思,很多事情都可以从这里引申出来。如物价上涨等。当然也有限制条件的。

20世纪的经济学发现学习笔记-创新包含五种情况

 

  1. 引进新产品或生产出新质量的产品
  2. 使用新的生产方法
  3. 开辟新的商品市场
  4. 获得原料或半成品的新的供应来源
  5. 实行了新的企业组织形式
2007/8/29

懂经济必读的108个现代哲理学习笔记

成果控制包括几个方面:财务分析、成本分析、质量分析以及职工成绩评定等内容。

GE的八项控制的标准:获利能力、市场地位、生产率、产品领导地位、人员发展、员工态度、公共责任、短期目标与长期目标的平衡。

2007/8/16

从HTML文件中抽取正文的简单方案

作者:alexjc

译者:恋花蝶(http://blog.csdn.net/lanphaday)

原文地址:http://ai-depot.com/articles/the-easy-way-to-extract-useful-text-from-arbitrary-html/

译者导读:这篇文章主要介绍了从不同类型的HTML文件中抽取出真正有用的正文内容的一种有广泛适应性的方法。其功能类似于CSDN近期推出的“剪影”,能够去除页眉、页脚和侧边栏的无关内容,非常实用。其方法简单有效而又出乎意料,看完后难免大呼原来还可以这样!行文简明易懂,虽然应用了人工神经网络这样的算法,但因为FANN良好的封装性,并不要求读者需要懂得ANN。全文示例以Python代码写成,可读性更佳,具有科普气息,值得一读。

You’ve finally got your hands on the diverse collection of HTML documents you needed. But the content you’re interested in is hidden amidst adverts, layout tables or formatting markup, and other various links. Even worse, there’s visible text in the menus, headers and footers that you want to filter out. If you don’t want to write a complex scraping program for each type of HTML file, there is a solution.

每个人手中都可能有一大堆讨论不同话题的HTML文档。但你真正感兴趣的内容可能隐藏于广告、布局表格或格式标记以及无数链接当中。甚至更糟的是,你希望那些来自菜单、页眉和页脚的文本能够被过滤掉。如果你不想为每种类型的HTML文件分别编写复杂的抽取程序的话,我这里有一个解决方案。

This article shows you how to write a relatively simple script to extract text paragraphs from large chunks of HTML code, without knowing its structure or the tags used. It works on news articles and blogs pages with worthwhile text content, among others…

本文讲述如何编写与从大量HTML代码中获取正文内容的简单脚本,这一方法无需知道HTML文件的结构和使用的标签。它能够工作于含有文本内容的所有新闻文章和博客页面……

Do you want to find out how statistics and machine learning can save you time and effort mining text?

你想知道统计学和机器学习在挖掘文本方面能够让你省时省力的原因吗?

The concept is rather simple: use information about the density of text vs. HTML code to work out if a line of text is worth outputting. (This isn’t a novel idea, but it works!) The basic process works as follows:

答案极其简单:使用文本和HTML代码的密度来决定一行文件是否应该输出。(这听起来有点离奇,但它的确有用!)基本的处理工作如下:

  1. Parse the HTML code and keep track of the number of bytes processed.

一、解析HTML代码并记下处理的字节数。

  1. Store the text output on a per-line, or per-paragraph basis.

二、以行或段的形式保存解析输出的文本。

  1. Associate with each text line the number of bytes of HTML required to describe it.

三、统计每一行文本相应的HTML代码的字节数

  1. Compute the text density of each line by calculating the ratio of text to bytes.

四、通过计算文本相对于字节数的比率来获取文本密度

  1. Then decide if the line is part of the content by using a neural network.

五、最后用神经网络来决定这一行是不是正文的一部分。

You can get pretty good results just by checking if the line’s density is above a fixed threshold (or the average), but the system makes fewer mistakes if you use machine learning — not to mention that it’s easier to implement!

仅仅通过判断行密度是否高于一个固定的阈值(或者就使用平均值)你就可以获得非常好的结果。但你也可以使用机器学习(这易于实现,简直不值一提)来减少这个系统出现的错误。

Let’s take it from the top…

现在让我从头开始……

Converting the HTML to Text

转换HTML为文本

What you need is the core of a text-mode browser, which is already setup to read files with HTML markup and display raw text. By reusing existing code, you won’t have to spend too much time handling invalid XML documents, which are very common — as you’ll realise quickly.

你需要一个文本模式浏览器的核心,它应该已经内建了读取HTML文件和显示原始文本功能。通过重用已有代码,你并不需要把很多时间花在处理无效的XML文件上。

As a quick example, we’ll be using Python along with a few built-in modules: htmllib for the parsing and formatter for outputting formatted text. This is what the top-level function looks like:

我们将使用Python来完成这个例子,它的htmllib模块可用以解析HTML文件,formatter模块可用以输出格式化的文本。嗯,实现的顶层函数如下:

def extract_text(html):

# Derive from formatter.AbstractWriter to store paragraphs.

    writer = LineWriter()

# Default formatter sends commands to our writer.

formatter = AbstractFormatter(writer)

# Derive from htmllib.HTMLParser to track parsed bytes.

parser = TrackingParser(writer, formatter)

# Give the parser the raw HTML data.

parser.feed(html)

parser.close()

# Filter the paragraphs stored and output them.

return writer.output()

The TrackingParser itself overrides the callback functions for parsing start and end tags, as they are given the current parse index in the buffer. You don’t have access to that normally, unless you start diving into frames in the call stack — which isn’t the best approach! Here’s what the class looks like:

TrackingParser覆盖了解析标签开始和结束时调用的回调函数,用以给缓冲对象传递当前解析的索引。通常你不得不这样,除非你使用不被推荐的方法——深入调用堆栈去获取执行帧。这个类看起来是这样的:

class TrackingParser(htmllib.HTMLParser):

"""Try to keep accurate pointer of parsing location."""

def __init__(self, writer, *args):

htmllib.HTMLParser.__init__(self, *args)

self.writer = writer

def parse_starttag(self, i):

        index = htmllib.HTMLParser.parse_starttag(self, i)

self.writer.index = index

return index

def parse_endtag(self, i):

self.writer.index = i

return htmllib.HTMLParser.parse_endtag(self, i)

The LineWriter class does the bulk of the work when called by the default formatter. If you have any improvements or changes to make, most likely they’ll go here. This is where we’ll put our machine learning code in later. But you can keep the implementation rather simple and still get good results. Here’s the simplest possible code:

LinWriter的大部分工作都通过调用formatter来完成。如果你要改进或者修改程序,大部分时候其实就是在修改它。我们将在后面讲述怎么为它加上机器学习代码。但你也可以保持它的简单实现,仍然可以得到一个好结果。具体的代码如下:

class Paragraph:

def __init__(self):

self.text = ''

self.bytes = 0

self.density = 0.0

class LineWriter(formatter.AbstractWriter):

def __init__(self, *args):

self.last_index = 0

self.lines = [Paragraph()]

formatter.AbstractWriter.__init__(self)

def send_flowing_data(self, data):

# Work out the length of this text chunk.

        t = len(data)

# We've parsed more text, so increment index.

self.index += t

# Calculate the number of bytes since last time.

        b = self.index - self.last_index

self.last_index = self.index

# Accumulate this information in current line.

        l = self.lines[-1]

        l.text += data

        l.bytes += b

def send_paragraph(self, blankline):

"""Create a new paragraph if necessary."""

if self.lines[-1].text == '':

return

self.lines[-1].text += 'n' * (blankline+1)

self.lines[-1].bytes += 2 * (blankline+1)

self.lines.append(Writer.Paragraph())

def send_literal_data(self, data):

self.send_flowing_data(data)

def send_line_break(self):

self.send_paragraph(0)

This code doesn’t do any outputting yet, it just gathers the data. We now have a bunch of paragraphs in an array, we know their length, and we know roughly how many bytes of HTML were necessary to create them. Let’s see what emerge from our statistics.

这里代码还没有做输出部分,它只是聚合数据。现在我们有一系列的文字段(用数组保存),以及它们的长度和生成它们所需要的HTML的大概字节数。现在让我们来看看统计学带来了什么。

Examining the Data

数据分析

Luckily, there are some patterns in the data. In the raw output below, you’ll notice there are definite spikes in the number of HTML bytes required to encode lines of text, notably around the title, both sidebars, headers and footers.

幸运的是,数据里总是存在一些模式。从下面的原始输出你可以发现有些文本需要大量的HTML来编码,特别是标题、侧边栏、页眉和页脚。

While the number of HTML bytes spikes in places, it remains below average for quite a few lines. On these lines, the text output is rather high. Calculating the density of text to HTML bytes gives us a better understanding of this relationship.

虽然HTML字节数的峰值多次出现,但大部分仍然低于平均值;我们也可以看到在大部分低HTML字节数的字段中,文本输出却相当高。通过计算文本与HTML字节数的比率(即密度)可以让我们更容易明白它们之间的关系:

The patterns are more obvious in this density value, so it gives us something concrete to work with.

密度值图更加清晰地表达了正文的密度更高,这是我们的工作的事实依据。

Filtering the Lines

过滤文本行

The simplest way we can filter lines now is by comparing the density to a fixed threshold, such as 50% or the average density. Finishing the LineWriter class:

过滤文本行的最简单方法是通过与一个阈值(如50%或者平均值)比较密度值。下面来完成LineWriter类:

def compute_density(self):

"""Calculate the density for each line, and the average."""

        total = 0.0

for l in self.lines:

            l.density = len(l.text) / float(l.bytes)

            total += l.density

# Store for optional use by the neural network.

self.average = total / float(len(self.lines))

def output(self):

"""Return a string with the useless lines filtered out."""

self.compute_density()

        output = StringIO.StringIO()

for l in self.lines:

# Check density against threshold.

# Custom filter extensions go here.

if l.density > 0.5:

                output.write(l.text)

return output.getvalue()

This rough filter typically gets most of the lines right. All the headers, footers and sidebars text is usually stripped as long as it’s not too long. However, if there are long copyright notices, comments, or descriptions of other stories, then those are output too. Also, if there are short lines around inline graphics or adverts within the text, these are not output.

这个粗糙的过滤器能够获取大部分正确的文本行。只要页眉、页脚和侧边栏文本并不非常长,那么所有的这些都会被剔除。然而,它仍然会输出比较长的版本声明、注释和对其它故事的概述;在图片和广告周边的比较短小的文本,却被过滤掉了。

To fix this, we need a more complex filtering heuristic. But instead of spending days working out the logic manually, we’ll just grab loads of information about each line and use machine learning to find patterns for us.

要解决这个问题,我们需要更复杂些的启发式过滤器。为了节省手工计算需要花费的无数时间,我们将利用机器学习来处理每一文本行的信息,以找出对我们有用的模式。

Supervised Machine Learning

监督式机器学习

Here’s an example of an interface for tagging lines of text as content or not:

这是一个标识文本行是否为正文的接口界面:

The idea of supervised learning is to provide examples for an algorithm to learn from. In our case, we give it a set documents that were tagged by humans, so we know which line must be output and which line must be filtered out. For this we’ll use a simple neural network known as the perceptron. It takes floating point inputs and filters the information through weighted connections between “neurons” and outputs another floating point number. Roughly speaking, the number of neurons and layers affects the ability to approximate functions precisely; we’ll use both single-layer perceptrons (SLP) and multi-layer perceptrons (MLP) for prototyping.

所谓的监督式学习就是为算法提供学习的例子。在这个案例中,我们给定一系列已经由人标识好的文档——我们知道哪一行必须输出或者过滤掉。我们用使用一个简单的神经网络作为感知器,它接受浮点输入并通过“神经元”间的加权连接过滤信息,然后输后另一个浮点数。大体来说,神经元数量和层数将影响获取最优解的能力。我们的原型将分别使用单层感知器(SLP)和多层感知器(MLP)模型。

To get the neural network to learn, we need to gather some data. This is where the earlier LineWriter.output() function comes in handy; it gives us a central point to process all the lines at once, and make a global decision which lines to output. Starting with intuition and experimenting a bit, we discover that the following data is useful to decide how to filter a line:

我们需要找些数据来供机器学习。之前的LineWriter.output()函数正好派上用场,它使我们能够一次处理所有文本行并作出决定哪些文本行应该输出的全局结策。从直觉和经验中我们发现下面的几条原则可用于决定如何过滤文本行:

  • Density of the current line.
  • 当前行的密度
  • Number of HTML bytes of the line.
  • 当前行的HTML字节数
  • Length of output text for this line.
  • 当前行的输出文本长度
  • These three values for the previous line,
  • 前一行的这三个值
  • … and the same for the next line.
  • 后一行的这三个值

For the implementation, we’ll be using Python to interface with FANN, the Fast Artificial Neural Network Library. The essence of the learning code goes like this:

我们可以利用FANN的Python接口来实现,FANN是Fast Artificial Neural NetWork库的简称。基本的学习代码如下:

from pyfann import fann, libfann

# This creates a new single-layer perceptron with 1 output and 3 inputs.

obj = libfann.fann_create_standard_array(2, (3, 1))

ann = fann.fann_class(obj)

# Load the data we described above.

patterns = fann.read_train_from_file('training.txt')

ann.train_on_data(patterns, 1000, 1, 0.0)

# Then test it with different data.

for datin, datout in validation_data:

    result = ann.run(datin)

print 'Got:', result, ' Expected:', datout

Trying out different data and different network structures is a rather mechanical process. Don’t have too many neurons or you may train too well for the set of documents you have (overfitting), and conversely try to have enough to solve the problem well. Here are the results, varying the number of lines used (1L-3L) and the number of attributes per line (1A-3A):

尝试不同的数据和不同的网络结构是比较机械的过程。不要使用太多的神经元和使用太好的文本集合来训练(过拟合),相反地应当尝试解决足够多的问题。使用不同的行数(1L-3L)和每一行不同的属性(1A-3A)得到的结果如下:

The interesting thing to note is that 0.5 is already a pretty good guess at a fixed threshold (see first set of columns). The learning algorithm cannot find much better solution for comparing the density alone (1 Attribute in the second column). With 3 Attributes, the next SLP does better overall, though it gets more false negatives. Using multiple lines also increases the performance of the single layer perceptron (fourth set of columns). And finally, using a more complex neural network structure works best overall — making 80% less errors in filtering the lines.

有趣的是作为一个猜测的固定阈值,0.5的表现非常好(看第一列)。学习算法并不能仅仅通过比较密度来找出更佳的方案(第二列)。使用三个属性,下一个SLP比前两都好,但它引入了更多的假阴性。使用多行文本也增进了性能(第四列),最后使用更复杂的神经网络结构比所有的结果都要更好,在文本行过滤中减少了80%错误。

Note that you can tweak how the error is calculated if you want to punish false positives more than false negatives.

注意:你能够调整误差计算,以给假阳性比假阴性更多的惩罚(宁缺勿滥的策略)。

Conclusion

结论

Extracting text from arbitrary HTML files doesn’t necessarily require scraping the file with custom code. You can use statistics to get pretty amazing results, and machine learning to get even better. By tweaking the threshold, you can avoid the worst false positive that pollute your text output. But it’s not so bad in practice; where the neural network makes mistakes, even humans have trouble classifying those lines as “content” or not.

从任意HTML文件中抽取正文无需编写针对文件编写特定的抽取程序,使用统计学就能获得令人惊讶的效果,而机器学习能让它做得更好。通过调整阈值,你能够避免出现鱼目混珠的情况。它的表现相当好,因为在神经网络判断错误的地方,甚至人类也难以判定它是否为正文。

Now all you have to figure out is what to do with that clean text content!

现在需要思考的问题是用这些“干净”的正文内容做什么应用好呢?

2007/5/19

小试LINUX LVM

因为客户服务器加了2块新硬盘。公司技术支持刚刚到位,无奈只能自己来搞。
不过整体建立很是很简单的资料也比较多。建立后整体感觉不错,性能和使用起来都很方便。
 
客户要求是把新增的硬盘合并到老硬盘。
 
大概步骤是
  1. 格式化新硬盘
  2. 把新硬盘作成虚拟盘
  3. 把新硬盘加入原有虚拟组
  4. 扩展新空间。此步耽误了不少时间,主要是网上的资料太老,其实只要执行ext2online 虚拟盘路径。就可以了

另外,记录一个查看虚拟盘命令vgdisplay

2006/10/23

Web 2.0 编程思想:16条法则

1、在你开始之前,先定一个简单的目标。无论你是一个Web 2.0应用的创建者还是用户,请清晰的构思你的目标。就像“我需要保存一个书签”或者“我准备帮助人们创建可编辑的、共享的页面”这样的目标,让你保持最基础的需求。很多Web 2.0应用的最初吸引之处就是它的简单,避免并隐藏了那些多余的复杂性。站在创建者的立场,可以想象Google的几乎没有内容的主页,还有del.icio.us的简单的线条。从最终用户的角度来看,与之齐名的就是Diggdot.us所提供的初始化页面。你能够并且希望加入更多功能,但是先做好最开始的。在一个时候只做一个特性,完成一个目标。这听起来很太过于单纯化了,但它将使你更加专注,而且你也会明白我的意思。

2、链接是最基础的思想。这就是我们称之为Web的一个理由。链接是把Web中各种实体连接起来的最基本的元素。你的信息、你的关系、你的导航,甚至是能够被写成URL的任何内容。这里有一个链接应该遵循的规则(其实你也不必严格的遵守):

1. Web上的任何东西都是可以被URI或者是URL所连接的。
2. 把所有的链接都保存为他的原始出处,这样可以让你与任何人、在任何地方、任何时候都能分享它。
3. 第二条中任何时候的前提是链接必须是持久的,它不会在没有任何缘由的情况下被改变或者是消失。
4. 链接应该是人类可读的、稳定的、并且能够自我诠释的。

3、数据应该属于创建它的人。是的,你听我的。任何用户创建的、贡献的或分享的都是他们自己的,除非他们很明显的放弃这个权力来让你自由处置。他们贡献到Web上的任何信息都应该是可编辑的、能被删除的、并且能够取消共享,无论在任何时候,只要用户愿意。这也包含了那些间接的数据,像他们所关心的记录、日志、浏览历史、网站访问信息,或者是任何可以被跟踪的信息。所有的网站必须清晰简单的陈诉那些信息是用户创建的,并且提供他们停止创建的方法,甚至是清除的方法。

4、数据优先,体验与功能其次。无论它是文本、图片、音频还是视频,Web最终还是把这些解析为数据。换句话说,你无法脱离数据去呈现内容。所有这些数据都通过那些易于发现的URL来定位(参见第2条)。通过另一种形式来看待这些,Web最终是名词优先,动词其次,虽然最近正在向动词偏移。来看看名词的例子:日历的条目、家庭照片、股票价格。还有一些动词的例子:定一个约会、共享一张图片、买一份股票。

5、做好积极分享一切的准备。尽可能的分享一切,你所拥有的所有数据,你所提供的所有服务。鼓励不遵循原有意图的使用,提倡贡献,不要那些需要分享的内容坚持设置为私有的。在分享与发现之后,提供易于使用的浏览方式是显而易见的需求。为什么呢:话说回来,你会从别人的共享之中受益匪浅。注意:这里没有许可让你去侵犯版权保护的法律,你不能够去分享你刻录的DVD或者是拥有商业版权音乐,因为你已经同意不会去分享这些东西。但是你可以发现并分享那些完全开放的媒体内容。一个小小的建议,你可以学习一下Creative Commons license(共创协议).

6、Web是一个平台;要让它成长。当然,我们还有很多其他的平台(Windows、Linux、Mac),但是那些已经不是重点了。换句话说,Web是无法脱离的平台,不会中断的平台,你可以通过各种方式去扩展的平台。你在Web上提供的数据与服务将会成为Web一部分,最终你会在Web平台的某一处扮演你的角色。扮演好你的角色并照顾好后来者。

7、理解与信奉“阶梯性”。现在的Web越来越大,几乎蔓延到了全世界的所有国家,并且已经拥有了10亿用户。我的观点是Web的各个组成部分存在着细微的区别和不同,就像不同地方的用户那样。例如Web的设计部分:易用性永远优先于速度、可靠性、重用性与可集成性。你也应该提供同样的体验给你的用户。它已经被一次又一次的被人们在文档中强调,忠诚的用户很快会成为专业的用户,他们期待更快的速度还有更多。退一步支持他们。同样,也有很多很多的用户会进入这个阶梯的底端,如你所期待的那样。他们可能不会说你的语言,不熟悉你的文化,甚至不知道是如何到这里的。所以你需要向他们表达清楚。

8、任何东西都是可编辑的。或者是它应该被编织的更好。要确定的是,只有很少的东西是不能被编辑的,剩下的都可以,这是一个可写的Web。这并不意味着原始内容的丢失,而通常被理解为用户能够很容易的对内容加以评论,或者评注内容是在那里发现的。如果你对此应用的好,他们能够比你所想象的做的更多(把内容串起来并且给予原始内容来创建自己的,等等)。

9、Web上的身份是神圣的。不幸的是,这并不意味着你能够得到更多的隐私(这完全是上个世纪的想法)。但对身份的验证是必要的,你应该感谢那些只需一个邮件地址就能确定你身份的服务。这意味只要你对你的用户承诺了,你就必须保证他们的隐私安全。必要的时候,在这个世界的某处你还得为你的用户挺身而出,向当地的权威挑战。如果你没有打算那样做,你就得把实际情况告诉你的用户。另一方面,如果身份是必须的,不要试图伪装它,不然在某一天我们将会在Web上放弃我们的最后一点点隐私的权利。

10、了解流行的标准并且使用他们。从一个消费者或者是创作者的立场来看,数据将会以不同的格式与任何一个人交换。同时这样的数据也会反过来促进标准的完善与采纳。这通常意味像RSS、 OPML、XHTML、Simple XML、JSON等简单标准的流行,而避免SOAP、XSD,还有RDF、ATOM也一样,使用它们会给我的内心带来痛苦。请你也为你所钟爱的标准投上一票来支持它们。

11、遵循无意使用的规律。如果你把非常有趣的数据和服务用广泛使用的格式开放和共享出去,你将会得到你所应得的,其他人也将会基于你的那一块Web平台来构建。或许还会从别人那里得到更多,所以为这个做一下准备比较好。我已记不清有多少次我看到一个播客(podcasting)服务因为流行过渡而导致服务垮掉,就是因为他们被 Slashdot和del.icio.us给收录了。这一点要知道:网络上的大量化意味着如果一个内容非常有趣,即使是一个很小的角落也会得到惊人的访问量。鼓励使用这种方式,它还是非常有价值的,前提是你要有所准备。

12、粒化你的数据与服务。我们应该在很早以前就明白这些,大规模集成的数据仅仅适用于无需管理的下载与批量操作。分解你的数据,让他们独立成可描述的URL地址,对你的服务也一样。反过来说,你不要创建一些巨大的、复杂的、像圣诞树那样的数据结构和服务。保持简单,要非常的简单。让这些分离的片断能够容易的被重组和发现。

13、提供用户能够单独受益的数据和服务。渐渐依赖于这种社会化参与是存在风险的,你需要让你的用户有一点点动机来贡献时间、热情和信息,除非他们能够直接受益。社会化分享比个体行为的利益大很多,除非你能够激发用户的个人动机,否这你将无法享受这份厚礼。

14、让用户组织并过滤信息。不一定是必须的,但却是非常重要的。让用户以他们自己的方式来标注和组织数据,因为你自己是永远无法及时的处理他们的。用户会按照他们自己理解的最佳方式来处理并构建。要保证你的Web服务能够按照用户所需所想的方式来工作。这也是标签(tagging)和通俗分类(folksonomies )的方式如此成功的主要因素。

15、提供丰富的用户体验。Web一直都在和本地的应用程序进行着激烈的竞争。为什么?因为本地程序还是感觉上好一些,速度也快一些。但是这不会长久的(确信在5年或者15年后,这种竞争就不存在了)。是的,我在谈论Rich Internet Applications, Ajax, 还有那些不可思议的交互应用。他们让Web成为了一个真正的“无平台”的平台,如果你知道我是怎么想的。

16、信奉并支持快速改进和反馈。这个通常意味着加快步伐,但也意味着使用轻量级的工具、技术和不要做出那些适得其反的痛苦决定(例如使用一个被层层环绕的Ajax框架来代替可以通过混合来实现的,或者用C++来构建所有的东西,其实使用Ruby会更好一些)。这同时也意味着需要一个非常快速的方式来处理错误报告,修复Bug,释放新版本。从一个用户的角度来看,报告你所发现的任何问题,还有那些你经常抱怨的地方,甚至那些都不是一个Bug。

当然,Web 2.0是一个极其广泛和深奥的话题,没有一个人能够列举出它的所有重点和特征。如果你对此充满了兴趣,请花一点时间来补充我没有提到的地方。我想这就是Web 2.0的参与性吧!

2006/6/8

经典的页面调试信息输出方法

<script language="javascript">
function reportError(msg,url,line) {
 var str = "You have found an error as below: \n\n";
 str += "Err: " + msg + " on line: " + line;
 alert(str);
 return true;
}
window.onerror = reportError;
</script>
<script>
 alert(')
</script>
2006/5/14

几个消费公式

消费=影响力(收入、财产、联系、对于未来的期望等等)
 
 
C=f(Yd,W,r,其他)
 
C=a+by
a:绝对消费
b:边界消费倾向
y:收入
 
以经济学的角度来说,“边际”亦可解释为“追加”一次。也就是说,边际消费倾向是追加性质的消费倾向。所谓的边际消费倾向是0.7,的意思是指多出1块钱的收入时,消费行为也就呈现追加0.7块的倾向。
 
现值法:
未来的钱/((1+银行利息)x期限)=已兑换的钱
 
投资函数=被(预期收益、利息、动物本能、其他)所影响的意义
I=f(e,r,动物本能,其他)
I:投资函数,e:预期收益,r:利息
 
 
摘自:《在小吃店遇见凯恩斯》