为什么我离不开Linux?
Unix/LinuxC技术 jack 2013-11-25 22:22
深入理解javascript引擎对于脚本的处理
Php/Js/Shell/Go jack 2013-11-25 22:18
背景:在做项目时常常因JS太多太长,导致如:取cookie时偶出现XXX is not defined(获取不到这人cookie函数XXXX),我想如果能知道Js的一行处理方式,可能会有一下程序的深入理解后,再编码可能会好一些。
脚本处理模型
javascript的基本特点
脚本处理模型
源码处理
函数解析
代码执行
脚本处理模型
javascript的基本特点
js是一门相当简单的运行时解释语言。
对象模型很直接也没有类的概念。
有自动垃圾回收。
弱数据类型。
动态类型(dynamic typing):运行的时候才确定对象的类型。
javascript没有内置的I/O机制。
扩展:javascript程序与宿主环境进行交互,是通过一系列预定义的方法和属性实现的,这些方法和属性会再映射成浏览器的内部原生代码,所以与其他很对常规的编程语言不同,浏览器开放的这些借口往往受限且有针对性。
脚本处理模型
首先,无论是独立的窗口还是在框架里面,每个展示在浏览器里面的html文档,都被赋予了一个独立的javascript执行环境实例,在这个环境里面加载的脚本的所有全局变量和函数都拥有一个独立的命名空间。
然后,同一个文档的所有脚本都运行在同一个执行环境里面,共享同一个沙箱,并且能够通过浏览器提供的API与其他上下文环境交互。
最后:在特定的执行上下文里面,每段javascript代码块都是自成体系处理的,顺序也基本确定。每段代码块都是由若干符合语法格式的独立单元组成,处理的过程包括清晰而且连续的三个步骤:源码处理,函数解析,代码执行。
源码处理
源码处理阶段会检查脚本代码块里面的语法,通常会先把代码转换成中间层的二进制映像,这样才能或得到令人满意的执行速度。在彻底完成这一步骤之前,这些二进制代码对全局并无影响。如果源码处理阶段出错,整个有问题的代码块都会被弃用;然后解析器会继续处理下一段代码块。
函数解析
完成了上一步骤之后,接下来就是解析器对当前代码块里所有具名的全局函数进行识别并注册。在这一阶段完成之后,这些函数才能被执行代码所调用。
对于代码

因为javascript在执行前会额外预处理,因此上面的写法会成功执行。
而对于代码
阅读全文
脚本处理模型
javascript的基本特点
脚本处理模型
源码处理
函数解析
代码执行
脚本处理模型
javascript的基本特点
js是一门相当简单的运行时解释语言。
对象模型很直接也没有类的概念。
有自动垃圾回收。
弱数据类型。
动态类型(dynamic typing):运行的时候才确定对象的类型。
javascript没有内置的I/O机制。
扩展:javascript程序与宿主环境进行交互,是通过一系列预定义的方法和属性实现的,这些方法和属性会再映射成浏览器的内部原生代码,所以与其他很对常规的编程语言不同,浏览器开放的这些借口往往受限且有针对性。
脚本处理模型
首先,无论是独立的窗口还是在框架里面,每个展示在浏览器里面的html文档,都被赋予了一个独立的javascript执行环境实例,在这个环境里面加载的脚本的所有全局变量和函数都拥有一个独立的命名空间。
然后,同一个文档的所有脚本都运行在同一个执行环境里面,共享同一个沙箱,并且能够通过浏览器提供的API与其他上下文环境交互。
最后:在特定的执行上下文里面,每段javascript代码块都是自成体系处理的,顺序也基本确定。每段代码块都是由若干符合语法格式的独立单元组成,处理的过程包括清晰而且连续的三个步骤:源码处理,函数解析,代码执行。
源码处理
源码处理阶段会检查脚本代码块里面的语法,通常会先把代码转换成中间层的二进制映像,这样才能或得到令人满意的执行速度。在彻底完成这一步骤之前,这些二进制代码对全局并无影响。如果源码处理阶段出错,整个有问题的代码块都会被弃用;然后解析器会继续处理下一段代码块。
函数解析
完成了上一步骤之后,接下来就是解析器对当前代码块里所有具名的全局函数进行识别并注册。在这一阶段完成之后,这些函数才能被执行代码所调用。
对于代码
因为javascript在执行前会额外预处理,因此上面的写法会成功执行。
而对于代码
阅读全文
Arudino虽然在开源硬件领域非常流行,但是对于不懂C/C++编程语言的玩家来说,还是需要一段学习时间。早些时候,我们在Kickstarter上看到一款相对特殊的开发板Espruino,他能让用户通过JavaScrpit轻松实现对单片机的控制,让更多的计算机初学者来动手做硬件。从现在开始,Python玩家也可以做类似的事情。
Micro Python:用Python语言控制单片机
Damien George是一名计算机工程师,他每天都要使用Python语言工作,同时也在做一些机器人项目。有一天,他突然冒出了一个想法:能否用Python语言来控制单片机,进行实现对机器人的操控呢?
要知道,Python是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言。遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼。
Damien为了突破这种限制,他花费了六个月的时间来打造Micro Python。它基于ANSI C,语法跟Pyton 3基本一致,拥有自家的解析器、编译器、虚拟机和类库等。目前他支持基于32-bit的ARM处理器,比如说STM32F405。
借助Micro Python,用户完全可以通过Python脚本语言实现硬件底层的访问和控制,比如说控制LED灯泡、LCD显示器、读取电压、控制电机、访问SD卡等。
阅读全文
Micro Python:用Python语言控制单片机
Damien George是一名计算机工程师,他每天都要使用Python语言工作,同时也在做一些机器人项目。有一天,他突然冒出了一个想法:能否用Python语言来控制单片机,进行实现对机器人的操控呢?
要知道,Python是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言。遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼。
Damien为了突破这种限制,他花费了六个月的时间来打造Micro Python。它基于ANSI C,语法跟Pyton 3基本一致,拥有自家的解析器、编译器、虚拟机和类库等。目前他支持基于32-bit的ARM处理器,比如说STM32F405。
借助Micro Python,用户完全可以通过Python脚本语言实现硬件底层的访问和控制,比如说控制LED灯泡、LCD显示器、读取电压、控制电机、访问SD卡等。
阅读全文
【转】Linux下c语言写的定时器(计时器)
Unix/LinuxC技术 jack 2013-11-25 13:45
【转】Linux下c语言写的定时器(计时器)
【实现功能】:下的C编程:编写一个程序(库),实现定时器(计时器)的功能,它能为用户提供在同一进程中多次使用的定时器。这里要求用信号来实现。
【解题思路】:编写一个结构体Timer代表一个计时器,然后再定义Timer类型的数组myTimer[N],用来保存我们设置的定时器;再定义函数setTimer()生成计时器,并将生成的计时器保存到myTimer中,这样通过多次调用,就可以在同一个进程中生成多个计时器;定义timeout()信号处理函数,每隔一秒产生一个信号,通过调用timeout()对所有的定时器扫描一遍,检查哪些计时器超时。
【程序代码】:如下
阅读全文
【实现功能】:下的C编程:编写一个程序(库),实现定时器(计时器)的功能,它能为用户提供在同一进程中多次使用的定时器。这里要求用信号来实现。
【解题思路】:编写一个结构体Timer代表一个计时器,然后再定义Timer类型的数组myTimer[N],用来保存我们设置的定时器;再定义函数setTimer()生成计时器,并将生成的计时器保存到myTimer中,这样通过多次调用,就可以在同一个进程中生成多个计时器;定义timeout()信号处理函数,每隔一秒产生一个信号,通过调用timeout()对所有的定时器扫描一遍,检查哪些计时器超时。
【程序代码】:如下
阅读全文
php “mkdir -p” 递归创建
Php/Js/Shell/Go jack 2013-11-25 11:28
For some reason however I expected it to behave like `mkdir -p` on the command line which succeeds if the directory already exists.
上面来自PHP手册老外的回复:
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7216695c7150888c40e8e3b081d0035bda66f780d5094992d215af2154bea87692b615860a09bbfca109fafd7756fde28762a5e9141638c40f9900632c151875a9fb81897f8&p=882a9543d2b112a05afcc665540883&newp=8b2a9712a49111a058eb9029164ccb231610db2151d1d11128a6c1&user=baidu&fm=sc&query=PHP+mkdir+-P&qid=&p1=1
下面来自网友没实践:
http://hi.baidu.com/hevensun/item/d28a0c08c68d98e0ff240d85
阅读全文
上面来自PHP手册老外的回复:
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7216695c7150888c40e8e3b081d0035bda66f780d5094992d215af2154bea87692b615860a09bbfca109fafd7756fde28762a5e9141638c40f9900632c151875a9fb81897f8&p=882a9543d2b112a05afcc665540883&newp=8b2a9712a49111a058eb9029164ccb231610db2151d1d11128a6c1&user=baidu&fm=sc&query=PHP+mkdir+-P&qid=&p1=1
下面来自网友没实践:
http://hi.baidu.com/hevensun/item/d28a0c08c68d98e0ff240d85
阅读全文
一、使用Editplus批量替换某个目录下包含某字符串的快捷方法:
(1)Find in Files 查找并选中哪些需要替换并全打开:
search -> find in files 查找需要替换的关键词,并列出来哪些文件;ctrl+选中哪些替换文件后右键后,点:全部打开。
(2)全部打开后,在所有打开文件里替换掉:
Ctrl + H 打开后,在替换所有范围里选中:所有打开文件。
(3)如果你替换内容较多:
则选更多(E),这样查找替换的输入框框更大,更方便。
它可以直接替换换行符为任意字符接替:单文件可通过正则对每行尾进行替换,如下:http://www.jackxiang.com/post/2038/
而多个文件则不行了,直接在大的框里输入回车,后下面什么也不输入,那此时就是把所有换行替换为空了。
如果选中了所有打开文件,那就是把所有文件的换行给替换为空了,所有文件成一行了,呵呵。
后记:
尽管有人说:Editplus的批量查找替换速度是DW的10倍以上……但dw这替换功能确实不错。
还不能满足你苛刻的要求么? 试试:Replace Pioneer :-)
http://blog.sina.com.cn/s/blog_3f6c1f670100sgj5.html
二、使用Editplus进行个性化替换某文件下的多个路径以符合线上环境的快捷办法:
Editplus支持的WScript进行按需替换,学得有点自己作符合自己替换工具的意思,特别引用并记录:
http://www.z3f.me/article.aspx?ID=1757
——————实践如下:——————
D:\Program Files\EditPlus\UrlParse.js
简单的调试方法:WScript.Echo(output);
上面是能够运行的,上面的原作者的Url里包有注释等,容易导致运行不了,提示:Microsoft JScript 运行时错误: 'arr' 未定义
,我后加上一行定义,好像是好了。
在Editplus里设置下:
菜单文字:批量替换文件中的多个路径
命令:Cscript.exe /nologo "D:\Program Files\EditPlus\UrlParse.js"
参数:$(FileName)
初始目录:$(FileDir)
动作:运行为文本过滤器(替换)
输出模板:使用默认输出
保存:无
即可进行对想替换的目录进行替换了。
三、让Editplus自动格式化css和js调试Js简单语法错误的简单设置(平时用aptana等的,只是偶会反过来用到:如线上代码是压缩成一行了,通过Js格式化下就多行看清了,WEB版本下的也有解压的,方法途径很多。):
http://bbs.blueidea.com/thread-2904136-1-1.html
1,在EditPlus中添加javascript调试工具,JavaScript调试下的Editplus配置:
菜单文字:javascript调试
命令:cmd /c
参数:$(FileName)
初始目录:$(FileDir)
动作:捕捉输出
输出模板:不使用默认输出,用正则:^Lint at line ([0-9]+) character ([0-9]+).*$"
保存:无
使用方法:
很简单,用Editplus打开一个javascript(.js)文件,选择菜单“工具”-“javascript调试”即可。
2,CSS格式化:
菜单文字:CSS格式化
命令:Cscript.exe /nologo "D:\Program Files\EditPlus\cssFormatter.js"
参数:$(FileName)
初始目录:$(FileDir)
动作:运行为文本过滤器(替换)
输出模板:使用默认输出
保存:无
3,Js脚本格式化:
菜单文字:CSS格式化
命令:Cscript.exe /nologo "D:\Program Files\EditPlus\jsFormatter.js"
参数:$(FileName)
初始目录:$(FileDir)
动作:运行为文本过滤器(替换)
输出模板:使用默认输出
保存:无
上面三个的JScript 包DownLoad:
下载文件
(1)Find in Files 查找并选中哪些需要替换并全打开:
search -> find in files 查找需要替换的关键词,并列出来哪些文件;ctrl+选中哪些替换文件后右键后,点:全部打开。
(2)全部打开后,在所有打开文件里替换掉:
Ctrl + H 打开后,在替换所有范围里选中:所有打开文件。
(3)如果你替换内容较多:
则选更多(E),这样查找替换的输入框框更大,更方便。
它可以直接替换换行符为任意字符接替:单文件可通过正则对每行尾进行替换,如下:http://www.jackxiang.com/post/2038/
而多个文件则不行了,直接在大的框里输入回车,后下面什么也不输入,那此时就是把所有换行替换为空了。
如果选中了所有打开文件,那就是把所有文件的换行给替换为空了,所有文件成一行了,呵呵。
后记:
尽管有人说:Editplus的批量查找替换速度是DW的10倍以上……但dw这替换功能确实不错。
还不能满足你苛刻的要求么? 试试:Replace Pioneer :-)
http://blog.sina.com.cn/s/blog_3f6c1f670100sgj5.html
二、使用Editplus进行个性化替换某文件下的多个路径以符合线上环境的快捷办法:
Editplus支持的WScript进行按需替换,学得有点自己作符合自己替换工具的意思,特别引用并记录:
http://www.z3f.me/article.aspx?ID=1757
——————实践如下:——————
D:\Program Files\EditPlus\UrlParse.js
简单的调试方法:WScript.Echo(output);
上面是能够运行的,上面的原作者的Url里包有注释等,容易导致运行不了,提示:Microsoft JScript 运行时错误: 'arr' 未定义
,我后加上一行定义,好像是好了。
在Editplus里设置下:
菜单文字:批量替换文件中的多个路径
命令:Cscript.exe /nologo "D:\Program Files\EditPlus\UrlParse.js"
参数:$(FileName)
初始目录:$(FileDir)
动作:运行为文本过滤器(替换)
输出模板:使用默认输出
保存:无
即可进行对想替换的目录进行替换了。
三、让Editplus自动格式化css和js调试Js简单语法错误的简单设置(平时用aptana等的,只是偶会反过来用到:如线上代码是压缩成一行了,通过Js格式化下就多行看清了,WEB版本下的也有解压的,方法途径很多。):
http://bbs.blueidea.com/thread-2904136-1-1.html
1,在EditPlus中添加javascript调试工具,JavaScript调试下的Editplus配置:
菜单文字:javascript调试
命令:cmd /c
参数:$(FileName)
初始目录:$(FileDir)
动作:捕捉输出
输出模板:不使用默认输出,用正则:^Lint at line ([0-9]+) character ([0-9]+).*$"
保存:无
使用方法:
很简单,用Editplus打开一个javascript(.js)文件,选择菜单“工具”-“javascript调试”即可。
2,CSS格式化:
菜单文字:CSS格式化
命令:Cscript.exe /nologo "D:\Program Files\EditPlus\cssFormatter.js"
参数:$(FileName)
初始目录:$(FileDir)
动作:运行为文本过滤器(替换)
输出模板:使用默认输出
保存:无
3,Js脚本格式化:
菜单文字:CSS格式化
命令:Cscript.exe /nologo "D:\Program Files\EditPlus\jsFormatter.js"
参数:$(FileName)
初始目录:$(FileDir)
动作:运行为文本过滤器(替换)
输出模板:使用默认输出
保存:无
上面三个的JScript 包DownLoad:
下载文件
从我开始工作算起,已经有20多年了。即便如此,我依然记得当时对从大学毕业并开始工作的憧憬。在那之前,除了少数几份和编程无关的暑期工,我的人 生基本都是在学校度过的。虽然我对工作的大多数期望都实现了,不过在步入职场头几年中也发现这一行许多令人惊奇的事,下面是头五件:
5. 人际交往
编程看起来是一份相当孤独的工作——你需要完成一个功能,所以你坐下来并用代码将其实现。不过事实上,你和其他的同事会有相当多的交流。你会和同事讨论设计,你会在开会时审查新功能,你会和测试人员讨论你的代码。
学会委婉和圆通,在交流中非常有帮助。如果还不会,那你得去学一下。关于这方面,有一本畅销书——卡耐基的《人性的弱点》。如果还没有读过此书,我强烈建议你读一读。
4.写作很重要
通过写作清晰地表达观点,这很有帮助。从某种程度上来说,写代码和写作非常相似,两种都需要你把你的想法,通过某个结构化的方式清晰并且无歧义的表 达出来。Email当然是写不完的了,不过还有你所开发的产品特性所配套的文档、需要清晰描述Bug的漏洞报告、还有对你修复的Bug做出的解释。在大学 里写作并不是重点,但是如果你写作好的话,这绝对是工作中的一个筹码。
3.从来没有已做完的软件
在我开始工作以前,我觉得当我开发出一个特性之后,这个特性就算开发完成了。不过在现实中,你会很经常的要回到这个特性上来。有时候是因为这并不完 全是客户所要求的,也可能是因为你需要为它添加更多功能,又或者是你想要把有些相似的功能合并起来,或者修复一个Bug。不管怎么样,对你的代码继续进行 编程是很正常的事。
在大学里,我们经常会把一个程序从头做起,但这在现实世界中几乎是没有出现过的。当然,除了你做新功能的时候,但这些代码总要融入旧代码。正因为如此,做新功能时的很大一部分工作都是在阅读并理解旧代码。这是一项我们在学校里没有练习过的技能。
2.很少有巧妙的算法
在大学里我得到了一个计算机科学与工程的硕士,我学习了通信系统,里面包括信号处理、错误纠正码、排队论等等的课程。我们也有像算法和数据结构这样 的计算机科学核心课程,我很喜欢这些课,我觉得学会这些聪明的算法和数据结构是一件很酷的事,所以我非常期待在工作中见到它们。
我的第一份工作是在蒙特利尔的爱立信公司,在一个蜂窝网络的移动电话交换中心担任软件工程师。那里有大量的代码来控制通话的建立、挂机、漫游等等, 但当我看到这些功能都是用最基本的数据结构和算法完成时,我觉得有点失望。最有趣的是,我发现用来跟踪用户漫游状态的代码居然是由一千多个二叉树构成的, 用户手机号的末三位数决定了用户处于哪颗树上。当需要找到这个用户时,根据用户的手机尾号找到用户所在的树,然后遍历该树以找到该用户。除了这个,其他的 都是链表甚至是更简单的数据结构。
1.系统集成后的复杂性
说起来既然没有什么精巧的算法,而且整个应用程序都在使用基本的数据结构,那看来在这里工作应该没有什么挑战吧?错!我很快就意识到这套系统高度复杂,倒并不是因为那些复杂的功能,而是因为太多太多简单的功能集成合到了一起。
在我工作过的那么多套系统中,我看到了一些共同点:大多数特性都非常简单,但正因为就是有很多简单的特性,在集成这些特性之时所遇到的微妙(或不那么微妙)交互,就引发了Bug。
原文链接: Henrik Warne 翻译: 伯乐在线 - 吴鹏煜
译文链接: http://blog.jobbole.com/50950/
来自:http://www.phpchina.com/archives/view-43218-1.html
5. 人际交往
编程看起来是一份相当孤独的工作——你需要完成一个功能,所以你坐下来并用代码将其实现。不过事实上,你和其他的同事会有相当多的交流。你会和同事讨论设计,你会在开会时审查新功能,你会和测试人员讨论你的代码。
学会委婉和圆通,在交流中非常有帮助。如果还不会,那你得去学一下。关于这方面,有一本畅销书——卡耐基的《人性的弱点》。如果还没有读过此书,我强烈建议你读一读。
4.写作很重要
通过写作清晰地表达观点,这很有帮助。从某种程度上来说,写代码和写作非常相似,两种都需要你把你的想法,通过某个结构化的方式清晰并且无歧义的表 达出来。Email当然是写不完的了,不过还有你所开发的产品特性所配套的文档、需要清晰描述Bug的漏洞报告、还有对你修复的Bug做出的解释。在大学 里写作并不是重点,但是如果你写作好的话,这绝对是工作中的一个筹码。
3.从来没有已做完的软件
在我开始工作以前,我觉得当我开发出一个特性之后,这个特性就算开发完成了。不过在现实中,你会很经常的要回到这个特性上来。有时候是因为这并不完 全是客户所要求的,也可能是因为你需要为它添加更多功能,又或者是你想要把有些相似的功能合并起来,或者修复一个Bug。不管怎么样,对你的代码继续进行 编程是很正常的事。
在大学里,我们经常会把一个程序从头做起,但这在现实世界中几乎是没有出现过的。当然,除了你做新功能的时候,但这些代码总要融入旧代码。正因为如此,做新功能时的很大一部分工作都是在阅读并理解旧代码。这是一项我们在学校里没有练习过的技能。
2.很少有巧妙的算法
在大学里我得到了一个计算机科学与工程的硕士,我学习了通信系统,里面包括信号处理、错误纠正码、排队论等等的课程。我们也有像算法和数据结构这样 的计算机科学核心课程,我很喜欢这些课,我觉得学会这些聪明的算法和数据结构是一件很酷的事,所以我非常期待在工作中见到它们。
我的第一份工作是在蒙特利尔的爱立信公司,在一个蜂窝网络的移动电话交换中心担任软件工程师。那里有大量的代码来控制通话的建立、挂机、漫游等等, 但当我看到这些功能都是用最基本的数据结构和算法完成时,我觉得有点失望。最有趣的是,我发现用来跟踪用户漫游状态的代码居然是由一千多个二叉树构成的, 用户手机号的末三位数决定了用户处于哪颗树上。当需要找到这个用户时,根据用户的手机尾号找到用户所在的树,然后遍历该树以找到该用户。除了这个,其他的 都是链表甚至是更简单的数据结构。
1.系统集成后的复杂性
说起来既然没有什么精巧的算法,而且整个应用程序都在使用基本的数据结构,那看来在这里工作应该没有什么挑战吧?错!我很快就意识到这套系统高度复杂,倒并不是因为那些复杂的功能,而是因为太多太多简单的功能集成合到了一起。
在我工作过的那么多套系统中,我看到了一些共同点:大多数特性都非常简单,但正因为就是有很多简单的特性,在集成这些特性之时所遇到的微妙(或不那么微妙)交互,就引发了Bug。
原文链接: Henrik Warne 翻译: 伯乐在线 - 吴鹏煜
译文链接: http://blog.jobbole.com/50950/
来自:http://www.phpchina.com/archives/view-43218-1.html
Zend studio 10.5今天出现failed to create the java virtual machine的解决办法。
Php/Js/Shell/Go jack 2013-11-20 10:43
昨天还是好的,最后修改了下-Xms125为256好像就好了,奇怪:
ZendStudio.ini -Xms256M好了。
ZendStudio.ini -Xms256M好了。
Percona公司真是勤勉上进的时代好青年,他将两套老掉牙的工具整理、合并、修订,发布了Percona Toolkit。这是一个非常好用的工具集,学好用好这个工具集,肯定会对你以后DBA的工作生涯中有所帮助。
这些工具大部分是用shell和perl编写的,提供YUM软件源,安装非常简单,但还有一种更简单的办法,比如我想用pt-mysql-summary这个工具,只需要:
#wget percona.com/get/pt-mysql-summary
然后
#chmod +x pt-mysql-summary
就可以使用了,像不像Windows中的“绿色免安装软件”?
官方的文档可以参见:
http://www.percona.com/doc/percona-toolkit/
这个工具集内容非常丰富,其中pt-summary, pt-mysql-summary, pt-show-grants, pt-slave-delay 是我最常用的工具,建议大家有空多研究尝试一下,磨刀不误砍柴工。
来自:http://www.zeuux.com/group/himysql/bbs/content/55142/
这些工具大部分是用shell和perl编写的,提供YUM软件源,安装非常简单,但还有一种更简单的办法,比如我想用pt-mysql-summary这个工具,只需要:
#wget percona.com/get/pt-mysql-summary
然后
#chmod +x pt-mysql-summary
就可以使用了,像不像Windows中的“绿色免安装软件”?
官方的文档可以参见:
http://www.percona.com/doc/percona-toolkit/
这个工具集内容非常丰富,其中pt-summary, pt-mysql-summary, pt-show-grants, pt-slave-delay 是我最常用的工具,建议大家有空多研究尝试一下,磨刀不误砍柴工。
来自:http://www.zeuux.com/group/himysql/bbs/content/55142/
如何捕获MySQL数据库中的低效SQL语句:
面对业务的迅猛发展,DBA的一项重要工作就是及时发现数据库中的低效SQL语句,有的可以立刻着手解决(比如缺少合适的索引),有的需要尽快反馈给开发人员进行修改。
MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句:
1,slow_query_log
这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。
2,long_query_time
当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。
3,slow_query_log_file
记录日志的文件名。
4,log_queries_not_using_indexes
这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。
配置好上述几个参数后,我们就可以监视日志,然后着手进行解决了。
来自:http://www.zeuux.com/group/himysql/bbs/content/55137/
中小型MySQL数据库集群方案:
对于中小型MySQL数据库集群,有以下几个特点或需求:
1,数据库写入操作并不密集,单台服务器足以支持。
2,数据库读取操作频繁,需要能够轻松扩展。
3,业务对数据库依赖性强,对于数据库的可用性有较高的要求。
4,应用普遍已经支持数据库读写分离。
5,要求架构简单,不能引入复杂或者不可靠的技术组件。
针对这些特点和需求,我认为合适的架构如下:
1,数据库主库采用DRBD磁盘复制方案,并配合Heartbeat来达到HA的效果。
2,多台数据库辅库使用DR模式的LVS来达到负载均衡和HA的效果。
这样的架构简单且可靠,我认为是中小型MySQL数据库集群比较理想的方案。
你觉得呢?
来自:http://www.zeuux.com/group/himysql/bbs/content/55127/
面对业务的迅猛发展,DBA的一项重要工作就是及时发现数据库中的低效SQL语句,有的可以立刻着手解决(比如缺少合适的索引),有的需要尽快反馈给开发人员进行修改。
MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句:
1,slow_query_log
这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。
2,long_query_time
当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。
3,slow_query_log_file
记录日志的文件名。
4,log_queries_not_using_indexes
这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。
配置好上述几个参数后,我们就可以监视日志,然后着手进行解决了。
来自:http://www.zeuux.com/group/himysql/bbs/content/55137/
中小型MySQL数据库集群方案:
对于中小型MySQL数据库集群,有以下几个特点或需求:
1,数据库写入操作并不密集,单台服务器足以支持。
2,数据库读取操作频繁,需要能够轻松扩展。
3,业务对数据库依赖性强,对于数据库的可用性有较高的要求。
4,应用普遍已经支持数据库读写分离。
5,要求架构简单,不能引入复杂或者不可靠的技术组件。
针对这些特点和需求,我认为合适的架构如下:
1,数据库主库采用DRBD磁盘复制方案,并配合Heartbeat来达到HA的效果。
2,多台数据库辅库使用DR模式的LVS来达到负载均衡和HA的效果。
这样的架构简单且可靠,我认为是中小型MySQL数据库集群比较理想的方案。
你觉得呢?
来自:http://www.zeuux.com/group/himysql/bbs/content/55127/
php setcookie时value为null或空字符串,会删除此cookie
Php/Js/Shell/Go jack 2013-11-15 11:58
背景:Set Cookie时出现两个相同的cookie的key和一样value值 送出,用Cookie::delete('language1');出现第一个给删除了,第二个送出,删除了会在浏览器上提示:值为”deleted”, 过期时间为 Thu, 01-Jan-1970 08:00:01 CST 或者说是 Thu, 01-Jan-1970 00:00:01 GMT
看实现:
上面用的是NULL,于是找到一篇文章讲这个的:
php setcookie时value为null或空字符串,会删除此cookie:
http://www.zhaokunyao.com/archives/4346
看实现:
上面用的是NULL,于是找到一篇文章讲这个的:
php setcookie时value为null或空字符串,会删除此cookie:
http://www.zhaokunyao.com/archives/4346
STRICT_TRANS_TABLES:https://www.cnblogs.com/lxwphp/p/9054971.html
#sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode=ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
背景:线上数据库报:mysql STRICT_TRANS_TABLES严格模式下提示Field 'ip' doesn't have a default value,线下测试机没有报错,外包开发时代码没法保证SQL全写运行无问题。
failed to execute the SQL statement:
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect
datetime value: '0000-00-00 00:00:00' for column 'updated_at' at row 1
如果想宽松模式,则注意一下修改一下sql_mode,如下:
这样干的问题:
INNODB加入后,还是不行:
innodb_strict_mode = 1
mysql> show variables like "%str%";
+--------------------+----------------+
| Variable_name | Value |
+--------------------+----------------+
| innodb_strict_mode | ON |
+--------------------+----------------+
1 row in set (0.00 sec)
外网的SQL有问题,内网的测试机db无问题,如下:
REPLACE INTO `app_play_8` (`user_id`, `video_id`, `video_name`, `video_img`, `video_url`, `playtime`, `source`, `source_url`, `clienttype`, `position`) VALUES ('21240168', '112c9654-52ed-11e1-b091-a4badb4696b6', '《2012春节动画狂欢曲》', 'http://p1.img.cctvpic.com/fmspic/2012/02/06/becd73c6cc3f43c59add0f42787400ae-180.jpg', 'http://jackxiang.com/v-112c9654-52ed-11e1-b091-a4badb4696b6.html', 1388978166, '哈妮哈妮', 'http://my.jackxiang.com/31759585/index.html', '1', '99')
ERROR 1364 (HY000): Field 'ip' doesn't have a default value
看似找到了,其实不然,和版本无关---另一台测试的db是13的,也是同样ip不能为空,但也不提示:Field 'ip' doesn't have a default value。
找到了:
这个我在我的虚拟机mysql5.6.12 上分别把线上的sql给建立和线下也建立,同时这个+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| innodb_strict_mode | OFF |
+--------------------+-------+,
虚拟机是会报没有ip的,所以,得出是mysql的版本造成的。5.6.11(测试),5.6.12(我的虚拟机),5.6.13线上。 12,13是一样的结果,得证。
我这个关系不大:innodb_strict_mode
尽管线上打开了,但是我的虚拟机配置没打开这个,依旧能提示:Field 'ip' doesn't have a default value。
______后来,1)打开my.ini,加入:
#Add Mysql's Innodb strict sql insert mode by:jackxiang date:2013-01-06
2)重启:
[root@localhost mysql]# ./bin/mysqld_safe --defaults-file=conf/my.cnf &
3)再插入OK有提示了:
mysql> REPLACE INTO `app_play_8` (`user_id`, `video_id`, `video_name`, `video_img`, `video_url`, `playtime`, `source`, `source_url`, `clienttype`, `position`) VALUES ('21240168', '112c9654-52ed-11e1-b091-a4badb4696b6', '《2012春节动画狂欢曲》', 'http://p1.img.cctvpic.com/fmspic/2012/02/06/becd73c6cc3f43c59add0f42787400ae-180.jpg', 'http://jackxiang.com/v-112c9654-52ed-11e1-b091-a4badb4696b6.html', 1388978166, '哈妮哈妮', 'http://my.jackxiang.com/31759585/index.html', '1', '99');
ERROR 1364 (HY000): Field 'ip' doesn't have a default value
mysql> quit
实践参考两篇文章:
mysql STRICT_TRANS_TABLES严格模式下提示Field 'id' doesn't have a default value:
http://www.zui88.com/blog/view-411.html
Mysql Field * doesn't have a default value解决方法:
http://blog.sina.com.cn/s/blog_43ed7f260100fk6h.html
EOF Add:2014-01-06
——————————————————————————————————————————————————————————————
虽然说我们尽量在写程序的时候控制插入到数据库的数据,而不要用数据库去判断数据的对错,但是有时候为了方便还是需要数据库自身的容错能力来帮助我们达到目的的。举例说明:
创建如下数据表
[sql] view plaincopy
CREATE TABLE `book` (
`id` int(11) default NULL,
`num` int(11) unsigned default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
insert into bookvalues(1,0),(2,0)
执行update book set num='abc',竟然不报错,原因是没有启用严格模式。所以
先执行set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
然后执行update book set num='abc',数据库就报错了
如果想一劳永逸,那就直接把数据库配置文件my.ini中的相关参数设置为
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
——————————————————————————————————————————————————————————————
解决办法:关闭MySQL的strict mode。具体做法:找到MySQL目录下的my.ini,
将其中的sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
修改为sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重新启动 Mysql服务。
MySQL 严格模式 sql_mode 收藏
虽然说我们尽量在写程序的时候控制插入到数据库的数据,而不要用数据库去判断数据的对错,但是有时候为了方便还是需要数据库自身的容错能力来帮助我们达到目的的。举例说明:
创建如下数据表
CREATE TABLE `book` (
`id` int(11) default NULL,
`num` int(11) unsigned default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
insert into bookvalues(1,0),(2,0)
执行update book set num='abc',竟然不报错,原因是没有启用严格模式。所以
先执行set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
然后执行update book set num='abc',数据库就报错了
非严格模式:会对语法的限制降到最低,导致很多不规范的语句都可以执行,会导致歧义.
严格模式:可以实现严格校检,使错误数据不能插入,从而保证数据准确性.
来自:http://blog.sina.com.cn/s/blog_505d197c0100l1bs.html
来自:http://blog.csdn.net/ldb2741/article/details/5317803
官网:http://forums.mysql.com/read.php?11,581356,581356#msg-581356
#sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode=ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
背景:线上数据库报:mysql STRICT_TRANS_TABLES严格模式下提示Field 'ip' doesn't have a default value,线下测试机没有报错,外包开发时代码没法保证SQL全写运行无问题。
failed to execute the SQL statement:
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect
datetime value: '0000-00-00 00:00:00' for column 'updated_at' at row 1
如果想宽松模式,则注意一下修改一下sql_mode,如下:
这样干的问题:
INNODB加入后,还是不行:
innodb_strict_mode = 1
mysql> show variables like "%str%";
+--------------------+----------------+
| Variable_name | Value |
+--------------------+----------------+
| innodb_strict_mode | ON |
+--------------------+----------------+
1 row in set (0.00 sec)
外网的SQL有问题,内网的测试机db无问题,如下:
REPLACE INTO `app_play_8` (`user_id`, `video_id`, `video_name`, `video_img`, `video_url`, `playtime`, `source`, `source_url`, `clienttype`, `position`) VALUES ('21240168', '112c9654-52ed-11e1-b091-a4badb4696b6', '《2012春节动画狂欢曲》', 'http://p1.img.cctvpic.com/fmspic/2012/02/06/becd73c6cc3f43c59add0f42787400ae-180.jpg', 'http://jackxiang.com/v-112c9654-52ed-11e1-b091-a4badb4696b6.html', 1388978166, '哈妮哈妮', 'http://my.jackxiang.com/31759585/index.html', '1', '99')
ERROR 1364 (HY000): Field 'ip' doesn't have a default value
看似找到了,其实不然,和版本无关---另一台测试的db是13的,也是同样ip不能为空,但也不提示:Field 'ip' doesn't have a default value。
找到了:
这个我在我的虚拟机mysql5.6.12 上分别把线上的sql给建立和线下也建立,同时这个+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| innodb_strict_mode | OFF |
+--------------------+-------+,
虚拟机是会报没有ip的,所以,得出是mysql的版本造成的。5.6.11(测试),5.6.12(我的虚拟机),5.6.13线上。 12,13是一样的结果,得证。
我这个关系不大:innodb_strict_mode
尽管线上打开了,但是我的虚拟机配置没打开这个,依旧能提示:Field 'ip' doesn't have a default value。
______后来,1)打开my.ini,加入:
#Add Mysql's Innodb strict sql insert mode by:jackxiang date:2013-01-06
2)重启:
[root@localhost mysql]# ./bin/mysqld_safe --defaults-file=conf/my.cnf &
3)再插入OK有提示了:
mysql> REPLACE INTO `app_play_8` (`user_id`, `video_id`, `video_name`, `video_img`, `video_url`, `playtime`, `source`, `source_url`, `clienttype`, `position`) VALUES ('21240168', '112c9654-52ed-11e1-b091-a4badb4696b6', '《2012春节动画狂欢曲》', 'http://p1.img.cctvpic.com/fmspic/2012/02/06/becd73c6cc3f43c59add0f42787400ae-180.jpg', 'http://jackxiang.com/v-112c9654-52ed-11e1-b091-a4badb4696b6.html', 1388978166, '哈妮哈妮', 'http://my.jackxiang.com/31759585/index.html', '1', '99');
ERROR 1364 (HY000): Field 'ip' doesn't have a default value
mysql> quit
实践参考两篇文章:
mysql STRICT_TRANS_TABLES严格模式下提示Field 'id' doesn't have a default value:
http://www.zui88.com/blog/view-411.html
Mysql Field * doesn't have a default value解决方法:
http://blog.sina.com.cn/s/blog_43ed7f260100fk6h.html
EOF Add:2014-01-06
——————————————————————————————————————————————————————————————
虽然说我们尽量在写程序的时候控制插入到数据库的数据,而不要用数据库去判断数据的对错,但是有时候为了方便还是需要数据库自身的容错能力来帮助我们达到目的的。举例说明:
创建如下数据表
[sql] view plaincopy
CREATE TABLE `book` (
`id` int(11) default NULL,
`num` int(11) unsigned default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
insert into bookvalues(1,0),(2,0)
执行update book set num='abc',竟然不报错,原因是没有启用严格模式。所以
先执行set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
然后执行update book set num='abc',数据库就报错了
如果想一劳永逸,那就直接把数据库配置文件my.ini中的相关参数设置为
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
——————————————————————————————————————————————————————————————
解决办法:关闭MySQL的strict mode。具体做法:找到MySQL目录下的my.ini,
将其中的sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
修改为sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重新启动 Mysql服务。
MySQL 严格模式 sql_mode 收藏
虽然说我们尽量在写程序的时候控制插入到数据库的数据,而不要用数据库去判断数据的对错,但是有时候为了方便还是需要数据库自身的容错能力来帮助我们达到目的的。举例说明:
创建如下数据表
CREATE TABLE `book` (
`id` int(11) default NULL,
`num` int(11) unsigned default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
insert into bookvalues(1,0),(2,0)
执行update book set num='abc',竟然不报错,原因是没有启用严格模式。所以
先执行set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
然后执行update book set num='abc',数据库就报错了
非严格模式:会对语法的限制降到最低,导致很多不规范的语句都可以执行,会导致歧义.
严格模式:可以实现严格校检,使错误数据不能插入,从而保证数据准确性.
来自:http://blog.sina.com.cn/s/blog_505d197c0100l1bs.html
来自:http://blog.csdn.net/ldb2741/article/details/5317803
官网:http://forums.mysql.com/read.php?11,581356,581356#msg-581356
PHP 5.4不兼容内容
Php/Js/Shell/Go jack 2013-11-12 14:17
陸 一鳴<lu.yiming@outlook.com> 下午 04:11:38
https://gist.github.com/luxixing/7411156
PHP5.3向更高版本迁移的内容基本写完了
感兴趣的看看,有不足之处请在下面的评论反馈,
我会尽量完善
有些内容如果需要优化示例或者新增示例的话也反馈下
https://gist.github.com/luxixing/7411156
https://gist.github.com/luxixing/7411156
PHP5.3向更高版本迁移的内容基本写完了
感兴趣的看看,有不足之处请在下面的评论反馈,
我会尽量完善
有些内容如果需要优化示例或者新增示例的话也反馈下
https://gist.github.com/luxixing/7411156
实践有问题解决如下:
时不时访问不到切换下。这个是别人写的,有个缺点:
里面的中文编码不对,直接打开host文件是中文乱码。
不过,C:\Windows\System32\drivers\etc\hosts
编码修改成utf8就OK了。
——————————————————————————
问:
那我在内网host,外网host,这块切换环境有没有好的Firefox插件?
答:
switchhost
chrome有插件
https://github.com/oldj/SwitchHosts/downloads
Windows 绿色版本下载:https://github.com/oldj/SwitchHosts/downloads。
来自:http://oldj.net/article/switchhosts/
百度下载:http://pan.baidu.com/share/link?shareid=150951&uk=3607385901#dir/path=%2Fshare%2FSwitchHosts!
时不时访问不到切换下。这个是别人写的,有个缺点:
里面的中文编码不对,直接打开host文件是中文乱码。
不过,C:\Windows\System32\drivers\etc\hosts
编码修改成utf8就OK了。
——————————————————————————
问:
那我在内网host,外网host,这块切换环境有没有好的Firefox插件?
答:
switchhost
chrome有插件
https://github.com/oldj/SwitchHosts/downloads
Windows 绿色版本下载:https://github.com/oldj/SwitchHosts/downloads。
来自:http://oldj.net/article/switchhosts/
百度下载:http://pan.baidu.com/share/link?shareid=150951&uk=3607385901#dir/path=%2Fshare%2FSwitchHosts!




