crlf

Dos和windows采用回车+换行CR/LF表示下一行,
而UNIX/Linux采用换行符LF表示下一行,
苹果机(MAC OS系统)则采用回车符CR表示下一行.
CR用符号’r’表示, 十进制ASCII代码是13, 十六进制代码为0x0D;
LF使用’n’符号表示, ASCII代码是10, 十六制为0x0A.
所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示.

Posted in linux by pangyt. No Comments

Cookie

参考:http://en.wikipedia.org/wiki/HTTP_cookie

格式

These pieces of data follow the name=newvalue pair and are separated by semicolons.

For example, a cookie can be created by the server by sending a line Set-Cookie: name=newvalue; expires=date; path=/; domain=.example.org.

客户端发出的请求中的cookie头部字符串的格式:

Cookie

TestCookie1=something+from+somewhere; TestCookie2=something+from+somewhere; BAIDUID=30D053A9543ACCBDC20438B8FB436B1D:FG=1; USERID=7382087f659726d0fa44f53a002f5a; BD_UTK_DVT=1; _ML_HIDE=1_; tName=pangyongtao; 108057_notice=5; BAIDU_WISE_UID=frontui_1285471020_9585; BDUSS=2VXQ35TbkdMTGMzQzR4dXVjNnk5dGtvdDhYNX5sUkgxQWl3OTktbHFlZ2M4OHhNQVFBQUFBJCQAAAAAAAAAAApRLgs5~jsDcGFuZ3lvbmd0YW8AAAAAAAAAAAAAAAAAAAAAAAAAAADA6qRyAAAAAMDqpHIAAAAA7FtCAAAAAAAxMC44MS41MBxmpUwcZqVMQ; __utma=147196964.475967525.1286792315.1286792315.1286800343.2; __utmz=147196964.1286792315.1.1.utmccn=(referral)|utmcsr=baidu.com|utmcct=/more/|utmcmd=referral; client_citycode=bj; OPENPLATFORM_SP=39fe70616e67796f6e6774616f3b03_1286979780; logmid=pangyongtao; logmauth=9d99d8a56a6b27b330ac490ed1344db0; logmt=1286981629

服务器端设定cookie的header:

Set-Cookie

TestCookie1=something+from+somewhere TestCookie2=something+from+somewhere; expires=Thu, 14-Oct-2010 07:01:51 GMT TestCookie3=something+from+somewhere; expires=Thu, 14-Oct-2010 07:01:51 GMT; path=/~rasmus/; domain=.example.com; secure

cookie在客户端的保存方式

如果没有添加Expires ,cookie是根当前的IE线程而存在的。你通过IE的“工具”来删除是不行的。

当你关闭IE, cookie就消失了。

当添加了hc.Expires = DateTime.Now.AddMinutes(20);

cookie就保存在文件中,通过IE的工具就可以删除了。

cookie的失效

Cookies expire, and are therefore not sent by the browser to the server, under any of these conditions:

  1. At the end of the user session (i.e. when the browser is shut down) if the cookie is not persistent
  2. An expiration date has been specified, and has passed
  3. The expiration date of the cookie is changed (by the server or the script) to a date in the past
  4. The browser deletes the cookie by user request

当浏览器关闭,意味着,不会再有这个sessionid的请求发送到服务器端。

服务器端可能会有一个策略,设定某个sessionid多久没有来访问,就设定它失效,它相关的cookie也就失效;这就是服务器的session垃圾回收机制。

而如果服务器端没有这个机制,则cookie可以一直有效,直到expire的时间达到,浏览器不再发送这个Cookie。

Cookie的标识

Cookies are actually identified by the combination of their name, domain, and path,

Cookie names are case insensitive。

Posted in linux by pangyt. No Comments

php curl 的调试手段

1、curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$header=array(‘Keep-Alive: 300′,);// 不能搞成k=>v的形式,跌倒2次了。。。
2、curl_setopt($ch, CURLOPT_VERBOSE,TRUE);

3、$ret['all'] = curl_getinfo($ch);

windows下的辅助手段:

wireshark

ff插件:tamper data; firebug;

==================================================

Php curl的常用选项

CURLOPT_AUTOREFERER 当根据Location:重定向时,自动设置header中的Referer:信息。
CURLOPT_FAILONERROR 显示HTTP状态码,默认行为是忽略编号小于等于400的HTTP信息。
CURLOPT_FOLLOWLOCATION 启用时会将服务器服务器返回的”Location: “放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。
CURLOPT_MAXREDIRS 指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的。
CURLOPT_HEADER 启用时会将头文件的信息作为数据流输出。
CURLINFO_HEADER_OUT 启用时追踪句柄的请求字符串。
CURLOPT_MUTE 启用时将cURL函数中所有修改过的参数恢复默认值。
CURLOPT_NOBODY 启用时将不对HTML中的BODY部分进行输出。
CURLOPT_POST 启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
CURLOPT_RETURNTRANSFER curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
CURLOPT_VERBOSE 启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中。
CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。
CURLOPT_CONNECTTIMEOUT_MS 尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。
CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。
CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数。
CURLOPT_PORT 用来指定连接端口。(可选项)
CURLOPT_COOKIE 设定HTTP请求中”Cookie: “部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, “fruit=apple; colour=red”)。
CURLOPT_COOKIEFILE 包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。
CURLOPT_COOKIEJAR 连接结束后保存cookie信息的文件。
CURLOPT_INTERFACE 网络发送接口名,可以是一个接口名、IP地址或者是一个主机名。
CURLOPT_POSTFIELDS 全部数据使用HTTP协议中的”POST”操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似’para1=val1&para2=val2&…’或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
CURLOPT_HTTPHEADER 一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array(‘Content-type: text/plain’, ‘Content-length: 100′)
CURLOPT_FILE 设置输出文件的位置,值是一个资源类型,默认为STDOUT (浏览器)。
CURLOPT_INFILE 在上传文件的时候需要读取的文件地址,值是一个资源类型。
CURLOPT_STDERR 设置一个错误输出地址,值是一个资源类型,取代默认的STDERR。
CURLOPT_WRITEHEADER 设置header部分内容的写入的文件地址,值是一个资源类型。
Tags:
Posted in linux by pangyt. No Comments

知易行难

工作观

一切的基础:耐心。

对工作目标有着深刻的理解。

学是为了用,首当学习能解决问题的知识,再扩展其他方面或领域,曰:兴趣。

问题总有解决办法,看你有没有办法找到最合适的。

创新是低效的,给点儿耐心。

创作观

写代码时时刻设想你就是将来要来维护这坨代码的人。

方法论

只证不悟,知识没有转化为隐性的经验来指导后续活动;

而只悟不证,则是盲目的模仿和跟从,以期望隐性的知识能够不经过自身实践而转化为自我的经验。

所以只有既证又悟才能够真正提升自我并创造价值。

把它学到手:信息 琢磨理解 实践操作 总结归纳 解决实际问题。

多方向多角度,各个属性,各种情形。

学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。

“猜和验证”是好办法;

自控

把你当时因为一时情绪想要做的事情记下来。

不去理会那些打搅你的情绪波动。

无论在什么环境中,时刻注意那些熟悉的东西有什么变化。

思考的方法

从不同的角度去看问题,发现别人从未想到(或还没有公开发表过)的新论点。

具体化,当爱因斯坦遇到一个难题时,他总是使用尽可能多的方法来展示问题,包括使用多种图表。

亲自动手,天才们最大的特点是高生产率。

做新组合,将所有的看法、想法和想象以不同的方式重新组合。

找出彼此之间的关系,将不类似的事物联系起来。

反向思维。假如你将物质的对立面放在一起来思考,那么你的思维运动就可以上升到一个新的高度。

形象思维。亚里士多德认为比喻是天才的一种象征,一个能够看到两种不同领域的相似之处的人是天才,再能把这些相似之处联系起来是需要特殊天赋的。

增强应变能力。每当我们尝试做什么事失败后,我们就该做别的。这就是发明创造的第一原则。

Posted in linux by pangyt. No Comments

web框架

基本概念

MVC

DAO(Data Access Object)
Very generic term that doesn’t infer any specific implementation. Simply what it says on the tin, an object that accesses data.

ORMObject/Relation Mapping

The mapping of object data to relational database data. The database data could be a single row, a single table, multiple rows in a single table, multiple rows in multiple tables, or any other such relationship.

DataMapper
Similar to ORM, but doesn’t necessarily infer that relational data is being mapped.

Active Record
ORM that represents a single row in a single table.

1. 每一个数据库表对应创建一个类.类的每一个对象实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的Field;
2. ActiveRecord同时负责把自己持久化. 在ActiveRecord中封装了对数据库的访问, 即CRUD;
3. ActiveRecord是一种领域模型(Domain Model), 封装了部分业务逻辑;


TableGateway or TableDataGateway
DAO for a single table

RowGateway or RowDataGateway
DAO for a single row

Posted in linux by pangyt. No Comments

浏览器解析CSS(转)

浏览器是怎么解析CSS的呢?

首先让我们来认识一下CSSStyleDeclaration,DOM CSS的一员,也是分量最重的一个。所有的CSS都会被解析到CSSStyleDeclaration中,你可以通过它去读取CSS属性更改CSS属性。

无论你在哪里写CSS,无论你写了什么CSS,浏览器最后都会解析成一个或数个styleSheet,每个styleSheet又包含一个或多个 cssRule,每个cssRule又包含零个或一个或多个style(即CSSStyleDeclaration)。这些 CSSStyleDeclaration会和其他styleSheet中CSSStyleDeclaration以及相应标签中的 CSSStyleDeclaration进行比较,根据权重的不同,最后生成computedStyle即最终我们所看到的样式。

举个例子:

<style type=”text/css”>

@import url(print.css);

b{color:yellow;}

</style>

上面的代码就会生成一个styleSheet,这个styleSheet中有两个cssRule,分别是“@import url(print.css);”和“b{color:yellow;}”,第一个cssRule中没有style(会有一个子styleSheet), 第二个cssRule中包含一个style是“color:yellow;”。

注意:每个style标签都会生成一个独立的styleSheet。

另外需要说明的一点,也是容易混淆的一点:

其他标签中的style属性中的CSS不能看作是真正的CSS本身,如:<b style=”color:red”></b>,它只是标签style属性的数值,浏览器会根据这个值去更改真正的CSSStyleDeclaration。

其实大家平时经常在和CSSStyleDeclaration打交道,比如:this.style.display=”none” ,这条JS通常我们会简单的理解成更改this对象的style属性中的值,即style=”display:none”,事实上没那么简单。

从底层来说,这条JS是用来更改CSSStyleDeclaration的,这条语句中的style实际就是CSSStyleDeclaration,浏 览器首先通过这条JS更改CSSStyleDeclaration中display的值,然后CSSStyleDeclaration的cssText值 会跟着被修改,最后才传达到this标签的style属性。

这也是为什么this.style.color=”red!important”无法更改color值的原因,!important只是在生成 computedStyle时比较CSS权重用的,CSSStyleDeclaration中的color值不会有!important的,如果给它了, 会被认为是非法值,因此this.style.color=”red!important”是无效的。

更改CSSStyleDeclaration可以有多种方式,上面的this.style.display=”none”就是一种,也是最常用的最简单的 一种,在某些特殊情况下我们也可以这样来改变:this.style.cssText=”display:none” 或者 this.setAttribute(”style”,”display:none”) 。

这里this.setAttribute(”style”,”display:none”)又是另外一种情况了,它先去更改style属性的值,然后再更改CSSStyleDeclaration的值。

Tags:
Posted in css linux by pangyt. No Comments

mysql引擎

存储引擎是什么?

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。

这些不同的技术以及配套的相关功能在 MySQL中被称作存储引擎(也称作表类型)。

Tags:
Posted in mysql by pangyt. No Comments

mysql的连接

Unix平台上的MySQL客户端能够以两种不同的方式连接到mysqld服务器:通过文件系统中的文件(默认为/tmp/mysql.sock)使用Unix套接字进行连接,或通过端口号使用TCP/IP进行连接。Unix套接字文件的连接速度比TCP/IP快,但仅能在与相同计算机上的服务器相连时使用。如果未指定指定主机名或指定了特殊的主机名localhost,将使用Unix套接字。

连接到mysql的方式除了使用socket,还有什么方式?

bin/mysqladmin version

protocol={TCP | SOCKET | PIPE | MEMORY}  连接到服务器时将使用的协议。

socket:当服务器是本地主机时将要连接的Unix套接字文件或Windows命名管道。

连接相关字符集

· 当查询离开客户端后,在查询中使用哪种字符集?

服务器使用character_set_client变量作为客户端发送的查询中使用的字符集。

· 服务器接收到查询后应该转换为哪种字符集?

转换时,服务器使用character_set_connection和collation_connection系统变量。它将客户端发送的查询从character_set_client系统变量转换到character_set_connection(除非字符串文字具有象_latin1或_utf8的引介词)。collation_connection对比较文字字符串是重要的。对于列值的字符串比较,它不重要,因为列具有更高的 校对规则优先级。

· 服务器发送结果集或返回错误信息到客户端之前应该转换为哪种字符集?

character_set_results变量指示服务器返回查询结果到客户端使用的字符集。包括结果数据,例如列值和结果元数据(如列名)。

有两个语句影响连接字符集:

SET NAMES ‘charset_name’

SET CHARACTER SET charset_name

SET NAMES显示客户端发送的SQL语句中使用什么字符集。因此,SET NAMES ‘cp1251′语句告诉服务器“将来从这个客户端传来的信息采用字符集cp1251”。它还为服务器发送回客户端的结果指定了字符集。(例如,如果你使用一个SELECT语句,它表示列值使用了什么字符集。)

SET NAMES ‘x’语句与这三个语句等价:

mysql> SET character_set_client = x;

mysql> SET character_set_results = x;

mysql> SET character_set_connection = x;

将x设置为character_set_connection也就设置了collation_connection是x的默认校对规则。

SET CHARACTER SET语句是类似的,但是为 默认数据库设置连接字符集和校对规则。SET CHARACTER SET x语句与这三个语句等价:

mysql> SET character_set_client = x;

mysql> SET character_set_results = x;

mysql> SET collation_connection = @@collation_database;

当一个客户端连接时,它向服务器发送希望使用的字符集名称。服务器为那个字符集设置character_set_client、character_set_results和 character_set_connection变量。(实际上,服务器为使用该字符集执行一个SET NAMES操作。)

Tags:
Posted in mysql by pangyt. No Comments

mysqldump

导出整个数据库:

bin/mysqldump –p Meet_A_Geek > MeetAGeek_Dump_File.txt

导出某个表:

bin/mysqldump –p Meet_A_Geek Orders >MeetAGeek_Orders.txt

使用where子句:

bin/mysqldump –p –where=”Order_ID > 2000″ Meet_A_Geek Orders > Special_Dump.txt

常用选项:

–add-drop-table   :为每个表的创建语句前加上删除表的语句。

–add-locks :

-t or -no-create- info :只导表数据,不要表结构。

-d or -no-data :只要表结构,不要数据。

–opt:优化导出速度。

Tags:
Posted in mysql by pangyt. No Comments

mysql外键和约束

CONSTRAINT `crawl_task_ibfk_1` FOREIGN KEY (`test_id`) REFERENCES `test` (`test_id`) ON DELETE CASCADE

为本表增加一个外键,名字叫crawl_task_ibfk_1;

将本表的test_id字段设置为外键;

这个外键收到的约束来自于test表的test_id字段。

constraint:约束

referencing table:参照表

referenced table:被参照表

FOREIGN KEY:外键,即这个键的参照值来自于其他表。

外键的作用:保持数据一致性,完整性,使2张表形成关联,外键只能引用外表中的列的值。

Tags:
Posted in mysql by pangyt. No Comments