Thursday, August 22, 2013

线性代数-6:列空间和零空间

本节主要关注列空间(column space)和零空间 (null space)


子空间


子空间首先必须是向量空间,而且在另一个空间之中,即subspace 是vector space中的vector space。举例子,来看R^3的子空间,首先R^3是向量空间,R^3的subspace,如任意穿过原点的平面任意穿过原点的置信


子空间的交和并,假如有两个subspace,plane P和line L


∪:P U L是subspace吗?no,简单的可以找到vector加法不封闭

∩:P ∩ L是subspace吗?yes,交集要么是原点,要么是过原点的line


更一般的问题,Subspace S 和T,intersection S ∩ T is a subspace

证明:



  • v和w是属于S ∩ T的

  • 因此v和w属于S,而S是subspace,因此v + w是属于S的

  • 同理v + w是属T的

  • 因此v + w是属于S∩T的

  • 即加法的条件是满足的,乘法的条件类似可以证明


强调一下vector space的条件

v + w 和 CV are in the space

vector space的列向量的线性组合还在vector space中


列空间C(A) colunm space of A


Image


column space of matrix A is all linear combinations of columns

那么究竟是什么样的子空间呢?是整个R^4还是小一点的真子空间?到底有多小?显然不是整个空间,只是一部分(,3个列向量的线性组合无法充满整个4维空间。),在上图中,C(A)是A的列的线性组合。


同方程组量联系起来 Ax = b,对哪些b方程有解?并不是总有解的,因为对于上面的A,有4个方程和3个未知数。什么样的b才能让方程组有解?如b=全0,b是A中的某一列,也可以先把x列出来,然后去求b,也即有解的b的条件及是b是A的列空间的向量,因为Ax即A列的线性组合。


此外,观察一下,这3列向量是线性相关的,去掉某一列仍然可以组成之前的向量空间,如列三

C(A)是R^4的一个2维的subspace。


零空间N(A) null space of A


还是用A来举例子N(A),null space是一个很特殊的space,null space of A = all solutions x to Ax=0


首先从x可以看出,是R^3中的空间,下面来看看解有哪些,零向量显然是,又如[1, 1, -1],扩展为,即一条直线c[1, 1, -1],是一个subspace,可以通过前面的条件来check,比较简单,如下,假设v和w在零空间,Av = 0,Aw = 0,则A(v+w)= 0,那么v+w也在零空间,数乘类似


向量空间的关键

对于某个b,非0,不再考虑null space


Image [2]


如果有解,解构成子空间吗?显然不构成,因为显然的解中不包含原点,因此不是向量空间

那么是什么样的呢?[1, 0, 0]是一个解,[0, -1, 1]也是一个解,他们可能是一个不穿过原点的直线或者平面


总结,两种得到subspace的方法

可以从几个向量,通过线性组合,得到b,列空间

也可以从一个方程组中让x满足某种条件来找到子空间,如Ax=0,得到x,零空间。






via WordPress http://www.econsh.com/2013/08/%e7%ba%bf%e6%80%a7%e4%bb%a3%e6%95%b0-6%ef%bc%9a%e5%88%97%e7%a9%ba%e9%97%b4%e5%92%8c%e9%9b%b6%e7%a9%ba%e9%97%b4/?utm_source=rss&utm_medium=rss&utm_campaign=%25e7%25ba%25bf%25e6%2580%25a7%25e4%25bb%25a3%25e6%2595%25b0-6%25ef%25bc%259a%25e5%2588%2597%25e7%25a9%25ba%25e9%2597%25b4%25e5%2592%258c%25e9%259b%25b6%25e7%25a9%25ba%25e9%2597%25b4

Wednesday, August 7, 2013

线性代数-5:转置-置换-向量空间R

本节的内容有三部分



  • 置换permutations

  • 转置transpose

  • 然后真正进入线代的大门,向量空间


Permutations


置换矩阵P,用来完成行互换的矩阵(如消元,遇到主元为0的时候),之前我们做的A=LU分解,是假设了没有行变化,这里面的P本质上相当于单位阵,限制取消限制,怎么做?


Image


PA = LU,先做P变化,将A变成主元不会出现0的情况,这样LU可以和以前一样,因此P是关键,P = identity matrix with reordered rows


有n!种n * n的置换阵,一些性质,而且都可逆,并且逆矩阵于其转置相等PT * P = I


Transpose


转置(后续为了方便,记做P’,像matlab一样)


Image [2]


行列互换,共识如下


Image [3]


相关的一个应用广泛的矩阵是对称矩阵,对称矩阵(A’ = A),转置不变性


可以轻易造一个对称阵出来,如将上面的A’ * A,R’R is always symmetric,例子


Image [4]


理论上证明(R’R)’ = R’(R’)’ = R’R


向量空间R


Vector spaces


举例R^2,是一个平面,所有2维向量组成的空间,所有向量空间必须包括原点,向量运算结果页在该向量所在的空间


R^n 包含所有的n维向量,这里的向量都是column vector


性质:数乘,向量加法,取线性组合依然在R^n中,即封闭的


R^2的一个部分不能称为向量空间,比如第一象限,只有整数,运算不是封闭的


我们关注的更多的是R^n的子空间,它不是整个R^n,但是满足向量空间的性质,如在R^2中的一条过原点的直线,满足向量空间的性质,就是向量空间,这就是子空间的一个例子。但是不过原点的就不是,因为数乘0得到的是原点


subspace of R^2



  1. all of R^2本身

  2. 过原点的直线

  3. 原点


Image [5]


R^3的比较类似,比如过原点的面和直线,其他,如在R^3中


Image [6]


取两列向量的所有线性组合,可以得到一个向量空间,叫column space C(A),结果是整个平面(在这个维度很自然可以看出,高维较难),当然通过原点。


本讲的核心,列向量的线性组合可以构成向量子空间






via WordPress http://www.econsh.com/2013/08/%e7%ba%bf%e6%80%a7%e4%bb%a3%e6%95%b0-5%ef%bc%9a%e8%bd%ac%e7%bd%ae-%e7%bd%ae%e6%8d%a2-%e5%90%91%e9%87%8f%e7%a9%ba%e9%97%b4r/?utm_source=rss&utm_medium=rss&utm_campaign=%25e7%25ba%25bf%25e6%2580%25a7%25e4%25bb%25a3%25e6%2595%25b0-5%25ef%25bc%259a%25e8%25bd%25ac%25e7%25bd%25ae-%25e7%25bd%25ae%25e6%258d%25a2-%25e5%2590%2591%25e9%2587%258f%25e7%25a9%25ba%25e9%2597%25b4r

Sunday, July 21, 2013

线性代数-3:矩阵的乘法和逆

本节课内容,矩阵的五种乘法,以及用Gauss-Jordan方法求矩阵的逆


矩阵的乘法


有五种乘法,结果显然是一致的,矩阵相乘的前提,如AB,A的列和B的行要相等,C = AB,A拥有m行,n列;B拥有n行,p列;而C就会有m行,p列Image [3]


1. 最常见的乘法,行 * 列


Image [2]


2. 矩阵 * 列的方法


Image [4]


我们都知道,矩阵*向量得到向量。A*B的列1,得到C的列1,其余的部分不参与次运算,A*B的列2,得到C的列2,扩展开来,C中的列是A中的列的线性组合,矩阵乘法可以看做是A与一个个列相乘的p个向量组合在一起。而A乘以向量,等价于A中列的线性组合,而向量B的列说明了如何组合,这点很重要。在linear regression,的feature的组合中经常用到这种解释,A的列对应某一维特征的值,而向量则表明了每一维特征的权重。


3. 行 * 矩阵的方法


同上面的方法比较类似,即C中的行,是B中的行的线性组合


4. 列 * 行的相加


这算是一种比较非主流的方法,没列 * 行得到一个矩阵,多个矩阵相加得到最终相乘的结果


Image [5]


5. 分块矩阵乘法


第一种方法的拓展,将矩阵划分中多个block,像元素一样使用,记得相乘的block需要能够行列match


Image [6]


矩阵的逆(方阵)


矩阵是否可逆


如A=[1 3| 2 6] (如果取行列式,结果为0,还没学到)


一种解释:

假设A * B = I,I中的列是A中的列的线性组合,显然不可能,所有的线性组合都在直线上,但是1,0不在上面


另一种解释:

if i can find a vector X(非零向量),with AX = 0,这样的A 没有逆,这里可以得到X = [3 , -1],证明如下:假设AX = 0,而且A有左逆A-1,则 A-1 ( AX) = 0,then X = [0, 0],矛盾,因此A没有左逆


结论:


singular matrix(即不可逆矩阵)的列能通过线性组合(非零向量X)得到0


如何求得方阵的逆


方法如下 gauss-jordan idea(同时处理两个方程组),A * column j of A-1 = column j of I


Image [7]


求逆和求解方程组类似,尝试将A用消元法(先消元变成上三角阵,然后继续向上消元,即逆向)变成I,而左侧的I随着A做一样的操作,既可以得到A-1,可以检验一下,确实是A的逆


为什么能得到逆?本质上就是矩阵消元的方法,各种E,即E[A I] = [I ?] = [I E],可以看出EA = I,so E就是A的逆,而右侧的?就是E






via WordPress http://www.econsh.com/2013/07/%e7%ba%bf%e6%80%a7%e4%bb%a3%e6%95%b0-3%ef%bc%9a%e7%9f%a9%e9%98%b5%e7%9a%84%e4%b9%98%e6%b3%95%e5%92%8c%e9%80%86/?utm_source=rss&utm_medium=rss&utm_campaign=%25e7%25ba%25bf%25e6%2580%25a7%25e4%25bb%25a3%25e6%2595%25b0-3%25ef%25bc%259a%25e7%259f%25a9%25e9%2598%25b5%25e7%259a%2584%25e4%25b9%2598%25e6%25b3%2595%25e5%2592%258c%25e9%2580%2586

Tuesday, July 16, 2013

线性代数-2:矩阵消元

本节课的主要内容如下



  • elimination 消元

  • back-substitution 回代

  • elimination matrices 消元矩阵

  • matrix multiplication 矩阵乘法


Image


消元


矩阵消元法解方程,也是计算机程序使用的方法;消元法奏效的情况,matrix is a good matrix;使用矩阵消元,既可以知道矩阵是不是一个好矩阵。消元后,回代,即可求解方程


我们本次要解决的AX = b


第一步

消元的目的,消去某个未知变量

先确定第一个主元(pivot)x,如A11,消去方程二和三种中的x,主元行不变,对第二行进行消元(行二减去主元行的某个倍数)

消元的时候可以先不管右侧矩阵,先看左侧(matlab也是这么做的,先算左侧A,再算右侧b)


第二个主元是A22,想消去方程三种的y,即3,2 step


第三个主元是A33


Image [2]


U 上三角矩阵,消元的目的是从A得到U


主元不能为0,为0即fail了,上面的success了,下面讨论下failure的消元,即得不到三个主元


如果0占据了主元的位置,需要做行交换,从下面的方程得到合适的主元,如果某行最终都为0了,则矩阵不可逆(下节课的内容),消元就fail了,行交换解决主元为0的临时问题,但是假如下面也没有可交换的行了,那么消元就fail了


回代


首先将右侧向量带入,将右侧向量放到矩阵中(最右列),即增广矩阵augmented matrix,对这一列的每行做消元时候相同的操作


Image [3]


回代就是把新的矩阵转换成方程组,UX=c算出未知数的值,从下网上,依次算出z y x,是反向的。


消元矩阵


矩阵变化,虽然之前在用矩阵,但是之前的操作,即消元步骤,并不是用矩阵来表示,下面就引入消元矩阵的概念。


矩阵乘法的一些思想

matirx * column = column

row * matrix = row


Image [4]


一步一步来,每次一个消元矩阵,下面是第一个消元矩阵


Image [5]


上图左为elementary matrix 即初等矩阵E21,表示位置目的把2 1 变成0。


然后是第二个消元矩阵


Image [6]


两步,消元就完成了。


其他:


把上面的消元矩阵结合起来如下


Image [7]


上式即矩阵相乘的结合律。


还有另一种初等矩阵,用于交换行的,or 置换,行交换,列交互,都可以使用单位阵来找置换矩阵


Image [8]


Image [9]


置换行的单位阵在左侧,置换列的单位阵在右侧。


同时引入矩阵的逆:


Image [10]






via WordPress http://www.econsh.com/2013/07/%e7%ba%bf%e6%80%a7%e4%bb%a3%e6%95%b0-2%ef%bc%9a%e7%9f%a9%e9%98%b5%e6%b6%88%e5%85%83/?utm_source=rss&utm_medium=rss&utm_campaign=%25e7%25ba%25bf%25e6%2580%25a7%25e4%25bb%25a3%25e6%2595%25b0-2%25ef%25bc%259a%25e7%259f%25a9%25e9%2598%25b5%25e6%25b6%2588%25e5%2585%2583

Sunday, July 14, 2013

MIT线性代数-1:方程组的几何解释

本节课主要是从三种几何角度来解释了方程组(或者说matrix于vector的乘法),一种角度是row picture,另一种则是column picture,还有big picture。下面就课程的一些例子做一个summary。


示例1:两个方程组和两个未知数


方程组和对应的matrix如下


方程组和对应的矩阵

方程组和对应的矩阵



row picture: 一次取一行,在平面上作图,每个方程就是一条直线,直线的交点就是方程的解,如下图:


Image [2]


column picture:找到正确的线性组合(linear combination),列向量的线性组合,用两个向量得到第三个向量,如下图


Image [3]


Image [4]


big picture:上面的两个向量的任意组合将得到一个平面,线性组合可以得到b,所有的线性组合得到所有的b,即整个平面(高维为超平面),线代的思想的基础即是线性组合。


示例2:三个方程组和三个未知数


和两个的比较类似,只不过维度多了一维,列一下。


Image [5]


row picture:三个方程对应三个平面,解是三个平面的交点(当然需要三个平面不平行)


column picture:则是三维空间的向量的线性组合


big picture:左侧矩阵不变,不同的线性组合可以构成整个三维空间,即AX = b,不论b是多少,X都有解(对于上图中的A)。而对于更多的方程和未知数,对应更高维度的矩阵A,道理其实是一致的,假如A中的列向量是线性无关的(即相互独立),他们能组成整个维度空间的所有向量,而假如线性有关(即有的列向量可以由其他向量组合而成,则改列向量相当于没有贡献),那么他们只能组成一个平面,甚至以条直线。


矩阵和向量的乘法的理解


Image [6]


AX可以认为是A的线性组合方式理解,计算AX可以像上图一样,以列的线性组合的方式进行,推荐用这种方法来思考,对矩阵的理解有益。






via WordPress http://www.econsh.com/2013/07/mit%e7%ba%bf%e6%80%a7%e4%bb%a3%e6%95%b0-1%ef%bc%9a%e6%96%b9%e7%a8%8b%e7%bb%84%e7%9a%84%e5%87%a0%e4%bd%95%e8%a7%a3%e9%87%8a/?utm_source=rss&utm_medium=rss&utm_campaign=mit%25e7%25ba%25bf%25e6%2580%25a7%25e4%25bb%25a3%25e6%2595%25b0-1%25ef%25bc%259a%25e6%2596%25b9%25e7%25a8%258b%25e7%25bb%2584%25e7%259a%2584%25e5%2587%25a0%25e4%25bd%2595%25e8%25a7%25a3%25e9%2587%258a

Thursday, June 6, 2013

BLOG接入公益404

无意中看到了自己的404页面,空荡而生硬,联想到了浩哥的404,咱也公益一把,也算是近点微薄之力。


虽然希望渺茫,但是希望这些娃能过得幸福,即使不在亲生父母身边,幸福是最重要的。


公益404

公益404



公益404接入地址:http://www.qq.com/404/






via WordPress http://www.econsh.com/2013/06/blog%e6%8e%a5%e5%85%a5%e5%85%ac%e7%9b%8a404/?utm_source=rss&utm_medium=rss&utm_campaign=blog%25e6%258e%25a5%25e5%2585%25a5%25e5%2585%25ac%25e7%259b%258a404

Wednesday, June 5, 2013

this指针是非左值的表达式

闲逛statckoverflow,有个问题是this指针到底是存在哪里的,栈,堆,还是代码段中?


this表达式


下面有个哥们给出了比较权威的解释:


C++ ISO的规范里面说



In the body of a nonstatic (9.3) member function, the keyword this is a non-lvalue expression whose value is the address of the object for which the function is called.

值得注意的是this并不是一个变量,它是一个表达式,就像1+2一样。而表达式的值可以存在任何地方,栈,寄存器,堆等,具体取决于编译器。即this是一个值为指针的表达式。


lvalue和rvalue


看到了non-lvalue的时候我自然就想到不就是rvalue么,也不知道为啥这么说,为了了解为何这么说(还是木有了解,可能是习惯?),又去看了下lvalue和rvalue,来自51CTO的一篇文章解释的不错,摘抄如下。


术语 “L-Values” 和 “R-Values” 是很容易被搞混的,因为它们的历史渊源也是混淆。他们最初起源是编译器的设计者,从字面上来理解就是表达式左边的值和表达式右边的值。它们的含义一直在演化而名字却没变,现在已经“名”不副“实”了。虽然还是称为left-value 和right-value,但是他们的含义已经大大不同了。


C++ 03 标准上是这样写的: “每一个表达式要么是一个 lvalue,要么就是一个 rvalue。”


记住,lvalue和rvalue是针对表达式而言的。


lvalue 是指那些单一表达式结束之后依然存在的持久对象。例如: obj,*ptr, prt[index], ++x 都是 lvalue。


rvalue 是指那些表达式结束时(在分号处)就不复存在了的临时对象。例如:1729 , x + y , std::string(“meow”) , 和 x++ 都是 rvalue。


++x 和 x++ 的区别的语义上的区别: 当写 int i = 10 ; 时, i 是一个 lvalue,它实际代表一个内存里的地址,是持久的。 表达式 ++x 也是一个 lvalue,它修改了 x 的值,但还是代表原来那个持久对象。但是,表达式 i++ 却是一个 rvalue,它只是拷贝一份i的初值,再修改i的值,最后返回那份临时的拷贝,那份拷贝是临时对象。 ++i 和 i++ 都递增i,但 ++i 返回i本身,而 i++ 返回临时拷贝。这就是为什么 ++i 之所以是一个 lvalue,而 i++ 是一个 rvalue。


lvalue 与 rvalue 之分不在于表达式做了什么,而在于表达式代表了什么(持久对象或临时产物)。 判断一个表达式是不是 lvalue 的直接方法就是“能不能对表达式取址?”,如果能够,那就是一个 lvalue;如果不能,那就是一个 rvalue。


参考文献



  1. Where is the ‘this’ pointer stored in computer memory?

  2. C++左值与右值之间共同与不同点解析






via WordPress http://www.econsh.com/2013/06/this%e6%8c%87%e9%92%88%e6%98%af%e9%9d%9e%e5%b7%a6%e5%80%bc%e7%9a%84%e8%a1%a8%e8%be%be%e5%bc%8f/?utm_source=rss&utm_medium=rss&utm_campaign=this%25e6%258c%2587%25e9%2592%2588%25e6%2598%25af%25e9%259d%259e%25e5%25b7%25a6%25e5%2580%25bc%25e7%259a%2584%25e8%25a1%25a8%25e8%25be%25be%25e5%25bc%258f

Thursday, May 16, 2013

好友记-北京小聚会

mark一下,奥特卡同学来北京,6年不见了,感觉没变,依旧阳光,下午到我厂臭美了一番。


晚上,ZYANG和小蔡过来一起吃了个饭,聊得比较尽兴,10点多了,店都关门了才散。


更多的不说了,回忆是挺好的






via WordPress http://www.econsh.com/2013/05/%e5%a5%bd%e5%8f%8b%e8%ae%b0-%e5%8c%97%e4%ba%ac%e5%b0%8f%e8%81%9a%e4%bc%9a/?utm_source=rss&utm_medium=rss&utm_campaign=%25e5%25a5%25bd%25e5%258f%258b%25e8%25ae%25b0-%25e5%258c%2597%25e4%25ba%25ac%25e5%25b0%258f%25e8%2581%259a%25e4%25bc%259a

Saturday, April 27, 2013

google定义广告的Active View

google 最近正在定义一个广告相关的概念,active view,目前是针对display广告的,含义我理解就是一个广告被看见的程度。


根据google 的介绍,和我的理解,做一些解释和预测。


为何有这个定义:


因为投放display广告的广告主最关心的问题是,我的这个广告知否被用户看见了,假如没看见这个impression的钱就打水漂了,假如看见了,直觉上来讲肯定是看的时间越长越好。


如何定义:


大致是基于广告在屏幕上展示的比例和展示的时间。比如,广告有80%以上在屏幕上而且展示时间大于2s可以认为是有效的view。active根据类似的方法把是否view定义成了数值,可以使用展示比例和展示时间两个度量,也可以整合成一个度量。


这个定义能干啥:


根据adwords博客的描述,在viewable的情况下(可以假设展示比例超过一定阈值),展示时间越长的广告的ctr越高。猜测active view未来将会有如下应用:


1. 根据active view将原有的impression一分为二,只有viewable的广告才计费(当然计费会提高),其余的不收费,即cpv


2. 将站点和广告的active view作为一个度量,作为广告展示的评分


3. 广告主可以根据active view的高低来分阶段付费,直觉上就是效果越好给钱越多,而效果好不好由activew view来定义


active view的扩展:


我觉得这个定义最大的意义就是让一个媒介的展示可以度量化,不论是搜索引擎对结果的评估,媒体网站对自己各个部分曝光度的评估都可以借鉴。






via WordPress http://www.econsh.com/2013/04/google%e5%ae%9a%e4%b9%89%e5%b9%bf%e5%91%8a%e7%9a%84active-view/?utm_source=rss&utm_medium=rss&utm_campaign=google%25e5%25ae%259a%25e4%25b9%2589%25e5%25b9%25bf%25e5%2591%258a%25e7%259a%2584active-view

Monday, April 15, 2013

微信公共账户-虫子侃球

假如你对足球感兴趣,那么你可以关注我的微信公共账户-虫子侃球,严格来说,它是个机器人,可以查询五大联赛球队最新比赛结果,以及预告未来几场比赛的时间。本文会先介绍一下这个账号的使用,然后也科普下这个账号的由来和开发。


添加关注


在微信公共账号里面搜索“虫子侃球”即可添加账号,或者扫描下面的二维码


微信公共账号-虫子侃球

微信公共账号-虫子侃球



主要功能点


1.输入球队名称,查询球队上一场比赛比分和未来比赛时间


虫子侃球-查询球队界面

虫子侃球-查询球队界面



2.查询联赛球队名单,一方面让用户了解联赛球队名单,另一方面为了让用户正确输入球队名称,同系统一致(后续会升级系统,引入球队名称的同义信息,更方便用户输入)


虫子侃球-查看联赛名单

虫子侃球-查看联赛名单



3.help界面,查看账号如何使用,错误输入也将显示该界面


虫子侃球-帮助信息

虫子侃球-帮助信息



公众账号的开发


唠叨几句关于这个公共账号的诞生。


为什么要做


1.最近使用了一些生活相关的公共账号,感觉和app和浏览器对比,得到我想要的东西都更加快捷,清晰,比如天气预报相关的,只需要输入城市名称,不像墨迹天气,要打开刷新一会,而且app还老是有一些通知,同时会常驻内存。


2.我是个足球迷,又是个喜欢折腾的手艺人,作为球迷我迫切想尽快知道我喜爱的球队的信息,同时也想知道对手的信息(想让他们输呗,额,好阴暗);作为一个手艺人,我对微信公共账号有点兴趣,想折腾折腾。


3.我有很多球迷朋友。


这三点促使我做了这个账号。


怎么做


这个比较简单,我这里简单说下,希望对新手上门公众账号有所帮助


1.首先是申请公众账号,这个需要身份证和手机号码,申请之后就可以配置和使用公众账号了。很多媒体人和公知的公共账号基本上会每天发布一篇文章(我觉得这个限制很好,一方面防止信息泛滥,另一方面可以促进提升质量)。而机器人账号需要使用高级功能。


2.微信高级功能,有编辑模式和开发者模式,编辑模式就是编辑key和value的映射,用户给你发送key,你返回它value,比较固定。而开发者模式则强大的多,可以让用户通过自己的server自定义返回信息。编辑模式和开发者模式不可共存(坑爹,简单的功能其实编辑模式修改更加方便)。


3.开发者模式,这个模式需要首先验证server的网址以便接入,参考微信的例子即可。然后就可以开发业务功能了(这个时候验证信息就可以不返回,而只是做验证了)。


4.虫子侃球的开发,使用php 语言(感谢我老婆对我的大力支持,我之前是个php 盲),目前功能比较单一,我选择了虎扑作为比赛信息的来源。用python处理了五大联赛的的球队名称和虎扑url的映射关系,然后直接放入php的脚本里面,这个只需要每年更新一次即可。接下来就是根据用户的输入返回相应的信息了,当用户输入球队名称命中球队dict,就去相应的虎扑url页面中截取对应的element即可,目前只选择了上一场比赛信息和未来几场比赛信息。


看上去比较简单吧,当然我做的也比较糙


账号的部署


开始把账号部署在了我这个blog所在的空间,由于在美国,响应时间成了问题。第二天改到了sae ,但是这货的开发者认证让我很蛋疼,而且天天要豆豆,一怒之下,不用了;最终选择了我厂的bae (百度应用引擎),用起来还不错,也顺便推荐一下。


账号的未来


一点就是把代码给share了,让大家帮我看看bug,另外看看大家都有什么建议,对账号进行改进。还有一点是找个人写点啥,推送给大家,我没那个文采,欢迎大家自荐






via WordPress http://www.econsh.com/2013/04/bugsoccer/?utm_source=rss&utm_medium=rss&utm_campaign=bugsoccer

Tuesday, April 2, 2013

blog 迁移至bluehost

之前一直都在用86的vps,先感谢一下。


迁移到bluehost有三个原因,首先是自己想独立放,不然经常!麻烦别人;二是vps目前我尚不需要,bluehost足以;三是bluehost空间和流量无限,可以折腾玩。


迁移起来并不复杂,将原来的blog的worspress目录备份上传到bluehost,原来的数据库导出。在bluehost需要建立数据库和用户,同时将这些name更新到wp-config.php,然后用phpMyadmin导入数据库。


有一点很重要,因为我不换域名,在新的空间work之前不能把旧的下掉,bliehost提供了临时的url,可以来做测试,而具体的使用可以参考bluehost的帮助,主要就是修改wp-option表对应的siteurl和home。然后就可以测试是否ok,这个时候有的页面和翻页可能有问题,但首页ok即可。


ok后,还有两件事要做,一是修改域名的nameserver,以便域名指向新的空间;二是在wordpress后台设置中将siteurl和home修改回来即可。


中间遇到图片中文乱码问题,手动更新了,后续还是用英文名吧。


迁移后,顺便把主题改了下,以前的感觉比较拥挤,换了个最新wordpress推荐的,还算小清新。


平板码字好痛:’(






via WordPress http://www.econsh.com/2013/04/blog-%e8%bf%81%e7%a7%bb%e8%87%b3bluehost/?utm_source=rss&utm_medium=rss&utm_campaign=blog-%25e8%25bf%2581%25e7%25a7%25bb%25e8%2587%25b3bluehost

Thursday, January 10, 2013

Google的那些不为人知的趣事

Quora看来的,觉得很有趣,翻译下

  1. Google的首页如此简单是主要是因为创始人不懂HTML,开始的时候甚至没有搜索按钮,只能按回车

  2. 由于首页太过稀松,开始的测试用户拿到这个页面都不知道干嘛,他们一直在等待后续发生的事情,然后Google在搜索框下面加入了版权相关信息

  3. 搜索使用的一个大的是拼写纠错的出现,伴随着““Did you mean…”,搜索的流量double了,而对此有些有意思的讨论,最终决定将这个放在了搜索结果的后面最有效,【但是现实中是在前面啊】

  4. “I feel lucky”基本上没有带来流量,仅仅是安慰作用,用户习惯了,不希望没有

  5. 社交网站Orkut在巴西很火【总算知道一个了】

  6. Google的改变很小而且频繁,抽取一部分流量就开始了测试【小步快跑,小流量,IT长干】

  7. Google有世界上最大的翻译者网络

  8. 新feature的20%和5%原则,假如有20%的人用,那么就推广开;假如超过5%,假如高级功能“Advanced Preferences”

  9. 在用户测试中Google发现,有一小波用户可以作为大众用户的典型代表,这个现象源于实验中的持续监控

  10. 本来Google不是这个名字,创始人相交Googol,结果被投资人写错了【尼玛】

  11. Gmail在放出来之前在内部使用了2年,他们发现有六种email的用户,而Gmail在设计的时候要满足这六种

  12. 对用户反馈很积极,给Google发email并不会杳无音信的

  13. 20%时间,众所周知的,不过也有人说20%时间名存实亡的

  14. 没有明文说明,但是他们的目标是在500ms以内返回记过【天朝的慢可不是Google的原因,你懂的】