用php实现网站全站301重定向到另一个域名

什么是301转向?

301转向(又叫301跳转,301重定向)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。
其它常见的状态码还包括,200表示一切正常,404网页找不到,302暂时转向,500内部请求错误,等等。
网站做转向的方法:
网址转向方法主要包括:301转向,302转向,JavaScript转向,PHP/ASP/CGI转向,META. REFRESH网页META刷新,等。302转向可能会有URL规范化问题。其它方法都是常用的作弊手法,当然不是说不可以正当地用,方法本身没有错,但被作弊者用多了,搜索引擎对这些可疑的转向都很敏感。何必冒险呢。
301转向的必要性
当网页A用301重定向转到网页B时,搜索引擎可以肯定网页A永久的改变位置,或者说实际上不存在了,搜索引擎就会把网页B当作唯一有效目标。好处是,
第一,没有网址规范化问题
第二,也很重要的,网页A的PR网页级别会传到网页B
第三,收录不会因为域名更换而变化.

实现

<?php 
$url="http://www.visualay.com".$_SERVER["REQUEST_URI"]; 
header("HTTP/1.1 301 Moved Permanently"); 
header ("Location:$url"); 
?>

以上代码就是要实现的301跳转功能。只要将以上代码放到你需要跳转的页面的头部即可,注意:以上代码前面不能有任何的输出.

测试:

要测试就用curl这个小软件来检查.
#curl -I http://www.ctdz.com.cn/index.php
HTTP/1.0 301 Moved Permanently
Date: Tue, 06 May 2008 06:27:39 GMT
Server: apache
Location: http://www.visualay.com/index.php
如见到上面的HTTP/1.0 301 Moved Permanently时,就表示可以了.下次只要点相关的链接,会自动转向新的链接,搜索引擎也会自动更新成新的链接

发表在 Linux | 留下评论

第三周(20110315)

回顾一下上次课程

我们照抄了书上的程序:

#include <reg51.h>
void main( void )
{									
	data unsigned char LedBuff;	//定义无符号字符型变量LedBuff并存放在片内RAM中
	for( ; ; ){
		LedBuff=0x01 ;  P1=LedBuff ;		// 点亮接在P1.0上的LED 
		Delay( 1000 ) ;				// 调用延时函数
		LedBuff=0x02 ;  P1=LedBuff ;
		Delay( 1000 ) ;
		LedBuff=0x04 ;  P1=LedBuff ;
		Delay( 1000 ) ;
		LedBuff=0x08 ;  P1=LedBuff ;
		Delay( 1000 ) ;
		LedBuff=0x10 ;  P1=LedBuff ;
		Delay( 1000 ) ;
		LedBuff=0x20 ;  P1=LedBuff ;
		Delay( 1000 ) ;
		LedBuff=0x40 ;  P1=LedBuff ;
		Delay( 1000 ) ;
		LedBuff=0x80 ;  P1=LedBuff ;
		Delay( 1000 ) ;
	}
}
/**************************************************************
函数名称:Delay( unsigned int x)
功能描述:若晶振频率为12MHz,延时x 
作者名称:张三
创建时间:2008-3-28
***************************************************************/
void Delay( unsigned int x)
{				
	if( x==0 ) 	return;
	while( x!=0 ) 	x--;
}

引出了下列问题:

1、编译时出现错误怎么办? (Delay()函数未定义先调用)

2、如何知道Delay()延时时间?

3、P1在哪里定义?

4、51系列单片机的存储空间

5、十六进制和二进制

6、变量溢出问题

关于这些问题如果还没有搞清楚,也不用着急,我们将在下面的项目中不断遇到类似问题。“遇到问题-分析问题-解决问题”就是我们学习的过程。

 

LED流水灯程序的优化

#include <reg51.h>
 
/* 
 * 延时
 *    t: 延时时间,单位ms 
 */
void Delay(unsigned int t)
{				
  unsigned char i;  
  while(t!=0) {
    t--;
    for(i=120;i>0;i--);
  }
}
 
void main( void )
{									
  unsigned char code LEDMAP[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  unsigned char i;
  for (;;) {
    for (i=0;i<8;i++) {
      P1=LEDMAP[i];
      Delay(500);  /* 延时500ms */
    }
  }
}

1、改进Delay()函数,使传入参数的单位为毫秒

2、用数组和循环简化程序

3、自己动手试一下,可以自由发挥变换花样

4、请大家录入并调试好上面的程序,我们会用这个程序作为模板进入下面的学习。

 

C51入门基础

教材P46

要点:

标识符

常量的表示法

#define的实质 — 宏替换

变量的实质 — 存储器

基本数据类型 — 字节数和取值范围

存储区域和存储模式

单片机编程必须了解的知识 — 存储结构  (P58)

 

 

P54页的小程序

#include <reg51.h>
 
/* 
 * 延时
 *    t: 延时时间,单位ms 
 */
void Delay(unsigned int t)
{				
  unsigned char i;  
  while(t!=0) {
    t--;
    for(i=120;i>0;i--);
  }
}
 
sbit P1_0=0x90;     // 定义P1口的P1.0引脚
sbit P1_1=P1^1;     // 定义P1口的P1.1引脚
sbit P1_2=0x90^2;   // 定义P1口的P1.2引脚
 
void main( void )
{									
  unsigned int i;   // 定义无符号整型变量i,用于循环延时
  P1=0x00; 	    // 关闭接在P1口的所有发光二极管
  do {		
    P1_0 = ~P1_0;   // 将sbit型变量P1_0取反
    P1_1 = ~P1_1;   // 将sbit型变量P1_1取反
    P1_2 = ~P1_2;   // 将sbit型变量P1_2取反
    Delay(1000);    // 延时1秒		
  }while(1);
}

 

教一招书上没有的

既然Delay()经常用到,能不能象printf()一样?

程序分模块有什么好处?

 

        自己动手完成P76页的实训程序

要点: 数组及指针、函数

发表在 单片机教学 | 留下评论

第二周(20110301)

正式自我介绍

  • 我来自企业
  • 我是八路军武功队

 

我为什么要来上课

  • 90后给企业带来的困惑
  • 来看看我们企业未来的员工现在是什么状态
  • 为企业的长期发展准备人才
  • 传道、授业、解惑

 

企业和学校有什么不同

  • “要我学”和“我要学”
  • 需求角色的变换(价值流向的变换)
  • 生存的压力
  • 无处不在的竞争
  • 适者生存

 

继续第一个项目

出现了什么问题:

    delay(1000)-> delay(10000) –> delay(100000) –> delay(30000)

100000=34464 ?!

300000=37856 !!!

软件设计过程中,会出现各种各样的问题,就算是老手也经常犯错。所以“调试”是软件开发的常态。

“DEBUG”概念,顺便引入一个话题:四代计算机技术

 

世界上第一台计算机ENIAC:

  • 长30.48米,宽1米,占地面积约63平方米,30个操作台,约相当于10间普通房间的大小,重达30吨,耗电量150千瓦,造价48万美元。它包含了17,468 个真空管,7,200只晶体二极管, 70,000 只电阻器, 10,000 只电容器,1500个继电器,6000多个开关,每秒执行5000次加法或400次乘法。

enaic

最初的计算机故障大多是因为飞虫受电子管光线和热量吸引,飞进计算机内部造成。所以排除计算机故障的工作主要是“捉虫”(debug)

 

计算机技术的发展:

  • 第一代: 电子管
  • 第二代: 晶体管
  • 第三代: 集成电路
  • 第四代: 超大规模集成电路

 

调试(debug)的主要方法:

  • 断点
  • 单步
  • 变量观察
  • 插入调试代码
  • 工具和方法都不是最重要的,关键是软硬件功底和不断地实践

 

从实战入手

自已动手做这个最简单的项目

简单吗?试试看!

通过“遇到问题->分析问题->相关知识讲解->解决问题”的方式不断提高

。。。

开工

 

worker

相关

讲课资料在 http://tesla.ctdz.com.cn  “单片机教学”栏目

发表在 单片机教学 | 留下评论

网页设计中的默认字体样式详解

浏览器默认的样式往往在不同的浏览器、不同的语言版本甚至不同的系统版本都有不同的设置,这就导致如果直接利用默认样式的页面在各个浏览器下显示非常不一致,于是就有了类似YUI的reset之类用来尽量重写浏览器的默认设置保证各个浏览器样式一致性的做法。

拿字体来说,各个浏览器默认的字体种类、字体大小和字体行高都不一样,比如IE8的中文版在Windows XP下显示网页时默认字体是宋体,而英文版肯定不会如此。所以我们需要统一设置默认的字体样式,以便实现一致的显示效果来保证设计的一致性和提高开发效率。

样式优先级
通常用户看到的页面的样式会受到三层控制:

第一层是浏览器的默认样式
第二层是网页定义样式
第三层是用户自定义样式

和CSS一样,后面的优先级高于前面的,也就是说网页定义样式可以覆盖浏览器的默认样式,而用户自定义样式优先级最高。不过,当有 !important 时,网页样式可以覆盖用户自定义样式。用户!important > 网页!important > 用户 > 网页 > 浏览器默认。

字体:arial
我们页面的绝大部分内容字符都是中文,毫无疑问目前为止在网页上最常用也是最通用的显示中文的字体是宋体,但是宋体在显示英文、数字和英文符号时过于糟糕,比如©字符,所以我们一般期望通过CSS来实现用更好的字体样式来显示它们,然后用宋体来显示中文和中文符号。

之所以选择arial是因为:
Windows和Mac都预装了这款字体,应该是使用最广泛的网页字体了。它的潜在对手tahoma和helvetica就没有这么幸运了。
视觉设计的专业人士可能会认为在Windows中使用tahoma、在Mac中使用helvetica更好,比如淘宝的默认字体样式是:

font: 12px/1 Tahoma, Helvetica, Arial, "\5b8b\4f53", sans-serif;

这是一个很不错的选择,但是你也会发现Google、YAHOO、Youtube、Bing甚至MSN的新版都使用arial作为第一默认字体。所以从美观和可读性上来讲arial应该是完全可以接受的。
一般情况下设置font-family都会在最后设置通用字体足以保证其安全性,比如Google的设置为:

font-family:arial,sans-serif;

但是至少在非中文版的Win7下当编码是GBK时,IE8会因sans-serif来渲染宋体,导致字体出现变形,这就是为什么淘宝需要在sans-serif前加上宋体而Google无需这样做的原因。
因为中文字体的选择非常有限,所以目前所有的主流浏览器都设置使用宋体来显示中文。Baidu的首页和搜索结果页使用font-family:arial;可以从侧面说明这样做的安全性。可能有人注意到Firefox中国版默认显示的中文字体是微软雅黑,这是因为谋智网络擅自修改了用户自定义样式,不允许网页的样式覆盖浏览器设置的样式。也是由于类似的情况,我们要弹性设计网页非常重要。
使用英文字体作为第一默认字体会导致的问题之一就是中英文以及符号混排时的对齐问题、通过设置行高和hasLayout能解决绝大部分情况,但是都不会很完美,如果把字体改成“宋体”能彻底的解决问题。很明显,这个问题只出现在IE上。所以,如果你的网站很少使用英文、数字和英文符号,那么直接设置

{font-family:\5b8b\4f53;}

也是很合理的选择。

大小:12px
12px是宋体能显示的极限,虽然微软雅黑能显示更小的字体,但目前的应用环境尚未成熟。由于宋体基本上是目前显示中文唯一的通用Web字体,所以12px成为最常用的字体大小。我们当然可以依据产品的需要来修改这个默认值。
不用考虑基于字体大小(em)的设计。
在Chrome3.0之后的中文版中,字体大小最小值是12px,比如你设置最小字体为10px,最后也变成12px。
行高:1.5倍
这是一个经验值,不同的产品对这个值要求可能不同,但我们一般会设置最常用的为默认值。比如YUI的font中是

font:13px/1.231 arial,helvetica,clean,sans-serif;

即字体大小默认值是13px,行高是13*1.231=16.003px,默认的行高是默认字体的1.231倍。对于中文来说,常用的字体大小12px、14px、16px、18px等偶数大小,在IE6和IE7设置其行高也为偶数能解决一些特殊情况下的字体对其问题。
在IE6和IE7中,行高值必须大于字体的2px才能保证字体的完整显示或当其作为链接时能有效显示下划线。
设置line-height时,注意不要使用单位(包括%在内),因为子节点会继承经过运算后的line-height值,所以当使用单位后浏览器会把line-height计算成第一次定义的绝对值,而不会随着字体大小的变化而变化,而无单位的数值表示是所在容器的font-size的倍数,所以设置为无单位的数值是最佳选择。
深入CSS 行高非常有利于理解line-height,值得一读。
性能和效率
大部分平台都有arial,减少浏览器的查找时间。
代码最少,书写方便。arial基本上是名字最短的字体了,可以节约CSS的大小。
所有的字母都小写,目前Google就是这样做的,好处是既可以编写更快也能提升Gzip压缩的效率。
中文最好用unicode表示,比如使用宋体是

{font-family:\5b8b\4f53;}

使用微软雅黑是

{font-family:\5fae\8f6f\96c5\9ed1;}

这样的好处是避免编码问题,同时能得到所有的主流浏览器的支持。
使用正确的字体种类写法,避免使用引号,这样可以缩小CSS的大小。中文字体可以按上一条方式来编写。
未来
通过对中英文及符号混排的测试, 我发现微软雅黑其实表现相当不错,包括英文数字和英文字符以及在IE6和IE7的显示效果上,但唯一的遗憾是在XP下如果安装了微软雅黑字体的用户没有打 开“使用屏幕字体的边缘平滑”选项的话,在firefox、Safari和Opera、特别是IE6下会非常模糊难以辨认。针对这个问题目前并没有很好的 解决方案,所以只有等到IE6使用比率非常小的时候才可能正式的使用它。或许需要到2014年,XP死掉的时候。
虽然很早就有了@font-face,但是浏览器的支持、网速和商业问题,导致它很少被应用。最近关于字体的好消息是Firefox3.6将支持Web Open Font Forma。关于Web字体未来的相关信息可以看Web 字体的未来、关于 Web 字体:现状与未来和再谈 Web 字体的现状与未来。

 

(转自nat’s blog)

发表在 WordPress | 留下评论

第一周(20110222)

什么是单片机?

  • 简单地说,单片机就是在单一芯片上的完整的微电脑系统。
  • “完整的微电脑系统”的概念?

image

 

计算机系统的组成

image

 

image

 

单片机有什么用处?

  • 单片机实现了电子产品的智能化
  • 单片机简化了电子产品的设计
  • 单片机降低了电子产品的成本
  • 单片机改变了我们的生活
  • 单片机无处不在

 

学好单片机的意义

  • 可以深入理解计算机工作原理
  • 学习底层硬件相关的编程
  • 培养良好的程序风格
  • 加深对高级语言的理解

 

单片机编程和PC编程的区别

  • 单片机软件运行于裸机,和硬件密切相关
  • 单片机资源受限(较少存储空间,有限的运算能力)

 

单片机编程语言

  • 机器语言、汇编语言、高级语言的概念
  • 当前的主流是C语言
  • 一般用于单片机编程的C语言都是在标准ANSI C上面有所扩展,需要了解这些区别

 

关于Keil C51

  • 对于51系列单片机,Keil C可能是最好的C编译器。
  • Keil是一家专门提供单片机开发工具软件的公司,由德国Keil Elektronik GmbH和美国Keil Software,Inc组成,2005年被ARM公司收购。据说只有23人。
  • Keil C51开发工具包括编译(C51)、汇编(A51)、连接(BL51)、库管理(LIB51)、调试/仿真(dScope)和集成环境(uVision)等。

 

关于proteus

  • Proteus是英国Lab Center Electronics公司推出的用于仿真单片机及其外围设备的EDA工具软件。Proteus与Keil C51配合使用,可以在不需要硬件投入的情况下,完成单片机C语言应用系统的仿真开发,方便单片机的学习。

 

让我们开始第一个项目

  • 从一个简单的项目入手,逐步展开我们的学习
  • 通过“碰到问题、解决问题”的过程加深理解
  • 积极动手、主动提问、保持互动
  • 老师不是万能的

 

Go …

发表在 单片机教学 | 留下评论

博弈论学习笔记

博弈论的七个原理

一、最小最大原理 (冯.诺依曼)

最小最大原理研究的是竞争问题。

如何在对方利益最大化时,自已的利益损失最小。

关键:创造多重损益点 — 失之东隅,得之桑榆

损益点: 双方利益的争夺点

如果只有一个损益点,当我们在这个损益点上没有优势时,要主动创造多个损益点

案例: 不列颠空战、围魏救赵

应用一 : 价格战

价格战的本质是同质化,造成顾客的关注点集中到价格,解决之道是差异化

差异化的理解:应该是多维差异化

一维差异化最后仍会趋同,多维差异化才没有趋同动机

案例: 沙滩卖矿泉水。 如果是直线型的沙滩,则两个卖矿泉水的人会趋向于互相靠近(争夺直线中点),而如果是环型的沙滩,则两个卖矿泉水的人没有动机趋同

应用二 : 讨价还价策略

多维谈判策略 – 引入多维损益点

买家: 可以引入 质量、数量 、付款方式 等

卖家: 赠品

二、纳什均衡原理

纳什均衡研究的是合作问题,其内涵是互为最优。

要分清事前优势和事后优势

三、逆向选择原理

信息优势未必会带来博弈优势,因为缺乏信息的一方会作逆向选择

在合作博弈中,需要传递信息

在竞争博弈中,需要模糊信息

合作博弈中,需要传递的信息主要是两类: 实力和诚意

传递这两类信息的行为一定要可观察,高成本

传递诚意的信息–输诚

输诚的一种典型方式是送礼,输诚的送礼和权钱交易的送礼不同,送礼的目的是为了表达诚意,重要的是礼物对送者的成本,而不是对接受者的价值。一定要可观察,高成本。

传递实力的方式 — 浪费性消费

四、机制设计原理

机制设计原理研究的是在不知道信息时如何让人传递信息

内涵是激励相容, 即要让说实话得到的好处大于说假话得到的好处

容易被操纵的信息是没有价值的

隐性激励: 睁一只眼,闭一只眼,让对方占点小便宜,以使对方在下一期博弈中采取合作的态度,从而对自己更有利

隐性激励应用于企业管理:显性激励(工资、奖金等)员工认为是该得的,不会很感激,而隐性激励是把不该得的也给一部分。

案例: 民生银行用费用包干的形式进行隐性激励

水至清则无鱼,人至察则无徒

总结:信息的使用:

    1、合作 — 传递信息

    2、竞争 — 隐藏信息

    3、不知道信息 — 设计机制让对方提供信息

    4、知道信息 — 睁一只眼闭一只眼(隐性激励)

五、知识阶次原理

知识阶次原理用于同时行动博弈

内涵:“计”高一筹,看穿对手的选择。 “知–彼知已”

    案例:空城计

自已寻找和使用上策,对手不会使用下策

大小猪博弈:谁的能力大,抗风险能力强,谁就应该采取主动

六、逆向推理原理

逆向推理原理用于相继行动博弈

内涵: 先行的一方具有博弈优势

案例: 数20游戏,海盗分钻石

   1、占先

   2、逆算 — 看清利益格局

   3、沟通 — 描述未来利益格局,让大家了解各自在未来格局中的位置

   4、分清敌友 — 敌:你不在位时有最大利益者; 友:你在位时有最大利益者

   5、理性与非理性 — 当理性的人和非理性的人在一起时,一定是理性的人吃亏,所以在博弈中,可以把非理性作为手段。在现实生活中,没有那么多的非理性人,实际上更多的是将非理性作为手段的理性人,称为“理性的非理性人”。

博弈三要素:

1、局中人

博弈往往是小的格局嵌入在大的格局中,局面是动态的(螳螂捕蝉,黄雀在后)

看不清利益格局的博弈不要参与

2、策略

要了解每个参与方的策略

不要和看不清的人博弈 (不要和狡猾的人打交道)

3、报酬

求名:零和博弈 — 求名的博弈一定是对抗性的

逐利:双赢博弈 — 逐利的博弈可能是合作的

求名一定是零和的,因为“名”只有第一,没有第二

七、羊群效应原理

研究跟风行为,从众现象

双赢博弈: 行动一致,方向一致

协调博弈: 行动一致,方向不一致

协调博弈中,最后选什么方向,取决于谁占主导地位,或采用补偿的方式。主导原则适用于外部标准之争,补偿原则适用于内部路线之争

网络外部性:羊群效应的特殊表现形式 — 消费受身边的人影响,例:传销、圈子营销

枪打出头鸟: 没有必要改变每一个人,只需要改变临界数目的一小部分人。所谓临界是指听话和不听话收益相近的人。

发表在 杂记 | 留下评论

linux网络配置

直接编辑 /etc/network/interfaces :

auto eth0

iface eth0 inet static

address 192.168.0.8

netmask 255.255.255.0

network 192.168.0.0

broadcast 192.168.0.255

gateway 192.168.0.1

DNS服务器配置文件 : /etc/resolv.conf

nameserver 61.177.7.1

nameserver 221.228.255.1

nameserver 211.103.13.101

nameserver 211.138.200.69

相关: 激活/关闭网卡: ifup ifdown  或 ifconfig eth0 up/down

发表在 Linux | 留下评论

apache2命令概要

启动/停止/重启: apache2ctl  start/stop/restart

激活虚拟主机:a2ensite <site_name>

停用虚拟主机:a2dissite <site_name>

site_name存在于/etc/apache2/sites_available目录中,激活实际上是在/etc/apache2/sites_enabled目录中做一个链接

激活模块:a2enmod <mod_name>

停用模块:a2dismod <mod_name>

mod_name存在于/etc/apache2/mods_available目录中,激活实际上是在/etc/apache2/mods_enabled目录中做一个链接

发表在 Linux | 留下评论

常用linux命令备忘

激活服务:  sudo update-rc.d <service_name> defaults

安装GCC :  sudo apt-get install build-essential


发表在 Linux | 留下评论

ssh配置使用概要

ssh使用

在客户端生成一个密钥对:

ssh-keygen -t dsa

默认情况下生成私钥~/.ssh/id_dsa和公钥~/.ssh/id_dsa.pub,将公钥文件拷贝或追加到服务端的~/.ssh/authorized_keys文件中,就可以建立不需口令的连接。

常用的客户端命令:

ssh user@hostname     登录到主机

rsh user@hostname command  远程执行命令

scp user@hostname:filename  filname   远程拷贝文件(倒过来也行)

ssh的密钥文件

ssh使用的密钥文件是在/etc/ssh/ssh_config和/etc/ssh/sshd_config文件中配置的,默认情况下,服务端的公钥文件为

~/.ssh/authorized_keys

一般把生成的密钥对中的公钥拷贝或追加到这个文件中:

cat id_dsa.pub >>authorized_keys

ssh客户端默认的私钥文件为~/.ssh/id_rsa或~/.ssh/id_dsa或~/.ssh/identity,如果需要临时指定另一个文件,可用-i参数:

ssh -i  key_filename  user@hostname

rcp、rsh等命令也一样

rsa和dsa的区别

rsa基于大整数因子分解算法,dsa基于离散对数问题算法。dsa的安全性和算法实现性能要比rsa好,但是dsa只能用于数字签名,不能用于数据加密。

发表在 Linux | 留下评论