发布新日志

  • 5分钟就可以搞定的bug

    2017-02-03 15:56:12

      有人提交了一个 bug 给我:“26 层会议室的灯是开着的,需要把它关上。”

      这个 bug 上还有个备注:“这大概会花你 5 分钟左右,就换一下开关而已。”

      我来到 26 层的会议室。灯是开着的,不过房间里没有灯的开关。

      于是我打算装个开关。不过设计师说这会破坏房间的美感。另外,墙是混凝土的。如果有合适的工具,我倒是现在就可以安装。不过没人会批准购买这些工具。没有合适工具的话就得花上两天的时间。但他们想要马上就解决问题,因为担心 CEO 随时都可能决定来到 26 层,没准一高兴就会走进会议室然后发问:特么的为毛这个灯是开着的。

      现在我开始收到邮件,询问为什么灯还没关上。

      于是我不得不停下来,群发了一封邮件解释一下情况,然后有些人在这个邮件链中展开了令人惶恐的讨论。

      我知道不可能指望着在邮件中讨论的这些人解决问题。这个 bug 上标了我的名字,今天就得解决,如果没能处理掉的话有麻烦的人是我。于是我爬到了 26 层通道的天花板里,找到连着那个灯的电线,剪断,封口,搞定,问题解决了。

      为了平息邮件讨论中的恐慌,我汇报了我是如何解决这个问题的。

      一开始并没什么反应,不过之后每个人都开始担心这灯再也没法打开或者关上了。要是 CEO 想在那儿开会怎么办?于是他们要求我这么干:把连着灯的电线一直拉到地下室,当有人需要开灯关灯的时候,他们会联系我,然后我就跑到地下室去接通或者断开电线。

      我抗议这个荒唐的方法。不过我的老板说:“没错,我知道这并不完美。不过目前我们只有这个办法了。”

      这个时候我意识到自己得做出一个选择了:我可以就这么干,或者抗议、辞职、再找份别的工作。不过我又意识到当我开始新工作的时候,他们可能还会要我干出这种白痴的事情,甚至更严重。

      于是我只好去把 26 层的电线一直拉到了地下室。当我来到地下室的时候,我看到墙上挂着好几十根电线,都是之前碰到同样问题时的那些人干的。(于是我知道了这个点子是从哪儿来的。)我尽我所能架好了电线,然后贴了标签,在标签上简短地向下一个干这事儿的人表示了歉意。

      当我回到办公桌之后,我收到了一条消息。QA 重新打开了这个 bug。他说:“我看到光了。”

      我重新跑回了 26 层的会议室。灯是关着的。我又回到我的办公桌,关闭了 bug,告诉他我亲自检查过了。

      QA 又一次打开了这个 bug,上面写着:“房间还是很亮”。我又去检查了一遍灯泡确实是关着的,然后我向老板报告了这件事,老板建议我回到地下室检查一下电线。我抗议说我刚刚才看到灯确实是关着的啊。“我知道,不过这样我就可以告诉 QA 说我绝对把所有地方都检查过了。”

      于是我叹了口气来到了地下室。毫无疑问,电线并没有接上。电线的接头也是封着的。绝对没有任何东西能产生出电力来。

      我向 QA 汇报说我检查过电线了,是断开的,而且我也看过灯泡,确实是关着的。

      “我说的不是灯泡,” QA 说道,“问题是房间里的光线。那儿太亮了。你就不能把百叶窗关上么?”

      我回复说“百叶窗不是我的责任,bug 只是说应该把灯关上。”

      QA 不相信我,于是群发了一封邮件询问百叶窗跟这个 bug 到底有没有关系。

      很长一段时间都没人说话。最后终于有人在这个邮件链里面招呼我了。

      “理论上来说,” 他们问道,“在 26 层参加会议的人如果觉得太亮或者太暗的话,有可能自己打开或者关上百叶窗么?”

      “是的,他们可以”,我回复道。

      “我是说,即使普通人也可以?他们不需要我来干这个?”

      是的,普通人也可以。不,他们不需要我。任何人都能干这个。

      “很好。太棒了。那么我们可以先不管这个了。我会组织一个站会来讨论一下百叶窗的问题。”

      于是 bug 被关闭了。现在,CEO 可能已经听说了一些风言风语,关于 26 层会议室有一些偷偷摸摸的情况,然后决定要在那儿开个会。于是我收到了好多惊慌失措的邮件,说他们需要把灯打开。

      我来到地下室,接上电线,然后回到办公桌前,在我的收件箱里发现 32 条新消息:“出问题了!灯没打开!” “有个问题!没有灯!” “我收到这些邮件了吗?” 等等。

      第 32 封邮件写道:“算了,灯亮了。”

      在需要关灯的时候,这个过程差不多一模一样地又来了一遍。

      不过也不是什么好消息都没有,是这样的:在这次会议结束后,所有人甚至都忘了在 26 层还有间会议室,于是我再也不用为这个干什么了。

  • 创建同结构SQL语句

    2014-12-16 16:35:44

    select * into [新表名] from [旧表名] where 1=2;  ---- 只复制表结构,不复制表内容
    select * into [新表名] from [旧表名]; ---- 既复制表结构,也复制表内容
    insert into [已创建好结构相似的新表名] select * from [旧表名]; 或者 select value1,value2…… into table2 from table1;
  • apache搭建https服务器

    2014-11-11 14:50:04

    1.首先下载apache带有ssl的,下载名为:httpd-2.2.21-win32-x86-openssl-0.9.8r.msi

    2.配置之前做如下操作:
        请确认Apache已经安装并可以正常工作. 并且ssl需要的文件在如下的位置:
        [Apache安装目录]/modules/ mod_ssl.so
        [Apache安装目录]/bin/ openssl.exe, libeay32.dll, ssleay32.dll
        [Apache安装目录]/conf/ openssl.cnf
    3.做如下配置:
        在Apache的conf目录中用文本编辑器打开httpd.conf
        3.1. 去掉下面设置行前面的#
    LoadModule ssl_module modules/mod_ssl.so
        3.2. 去掉下面设置行前面的# (在2.0.x版本中没有这一项)
    Include conf/extra/httpd-ssl.conf

        3.3. 在Apache的conf/extra目录中打开httpd-ssl.conf, 更改如下设置. [apache安装目录]是指Apache的安装目录, 比如c:/Apache; my-server的两个文件就是前一个步骤制作的文件, 文件的位置就是这些文件在磁盘中的位置 (在2.0.x版本中这些设置仍然在 httpd.conf文件中进行)
    SSLMutex  default
    SSLCertificateFile "[Apache安装目录]/conf/ssl/my-server.der.crt"
    SSLCertificateKeyFile "[Apache安装目录]/conf/ssl/my-server.key"

    4.tomcat域名跳转配置的话,需要如下配置:
    httpd-ssl.conf最后增加如下配置:
    1.Listen 443后面增加
    NameVirtualHost *:443  //备注不加的话,多域名会有问题
    2.最后面增加如下配置
    <VirtualHost www.163.com:443>
    ServerName www.163.com
    SSLEngine on
    #SSLProtocol all -SSLv2
    #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
    SSLCertificateFile "D:/sw/app/Apache/conf/server.crt"   //从第三方申请来的证书存放目录
    SSLCertificateKeyFile "D:/sw/app/Apache/conf/server.key"  //从第三方申请来的证书存放目录

        JkMount /new* tomcat-new
       
    </VirtualHost>
    此处配置与httpd-vhosts.conf的配置类似,如果两个文件都配置的话,http与https都可以访问。

    重启apache,使用https://www.163.com/new/看是否能正常访问

  • nginx搭建https服务器

    2014-11-10 16:17:09

    首先确保机器上安装了openssl和openssl-devel


    #yum install openssl

    #yum install openssl-devel

    使用现成的证书。


    至此证书已经生成完毕,下面就是配置nginx

    然后重启nginx即可。


    ps: 如果出现“[emerg] 10464#0: unknown directive "ssl" in /usr/local/nginx-0.6.32/conf/nginx.conf:74”则说明没有将ssl模块编译进nginx,在 configure的时候加上“--with-http_ssl_module”即可


    如下操作:



    http://nginx.org


    tar xvzf nginx-1.3.2.tar.gz


    查看ngixn版本极其编译参数


    /usr/local/nginx/sbin/nginx -V


    进入nginx源码目录


    cd nginx-1.3.2


    以下是重新编译的代码和模块


    ./configure --prefix=/usr/local/nginx--with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module


    make 千万别make install,否则就覆盖安装了


    make完之后在objs目录下就多了个nginx,这个就是新版本的程序了


    备份旧的nginx程序


    cp /usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx.bak


    把新的nginx程序覆盖旧的


    cp objs/nginx /usr/local/nginx/sbin/nginx


    测试新的nginx程序是否正确


    /usr/local/nginx/sbin/nginx -t


    nginx: theconfiguration file /usr/local/nginx/conf/nginx.conf syntax is ok


    nginx:configuration file /usr/local/nginx/conf/nginx.conf test issuccessful


    平滑重启nginx


    /usr/local/nginx/sbin/nginx -s reload


    查看ngixn版本极其编译参数


    /usr/local/nginx/sbin/nginx -V


    这是我重新编译的代码:


    ./configure --prefix=/usr/local/nginx --with-google_perftools_module --user=www --group=www --with-http_stub_status_module --with-http_gzip_static_module --with-openssl=/usr/ --with-pcre=/mydata/soft/pcre-8.31


    nginx重启:


    /usr/nginx/sbin/nginx -s reload


    如碰到如下问题:


    nginx: [emerg] getpwnam(“www”) failed 错误处理方法


    如下解决办法:


    解决方案一


    在nginx.conf中 把user nobody的注释去掉既可


    解决方案二


    错误的原因是没有创建www这个用户,应该在服务器系统中添加www用户组和用户www,如下命令:



    1

    2

    /usr/sbin/groupadd -f www

    /usr/sbin/useradd -g www www


    以上方法测试通过,启动后,在浏览器里输入IP

  • CentOS安装zip及用法

    2014-10-13 10:52:48

      CentOS安装zip及用法
      在CentOS中安装完rar命令,会自动安装zip命令。
      以下命令均在/home目录下操作
      cd /home #进入/home目录
      1、把/home目录下面的mydata目录压缩为mydata.zip
      zip -r mydata.zip mydata #压缩mydata目录
      2、把/home目录下面的mydata.zip解压到mydatabak目录里面
      unzip mydata.zip -d mydatabak
      3、把/home目录下面的abc文件夹和123.txt压缩成为abc123.zip
      zip -r abc123.zip abc 123.txt
      4、把/home目录下面的wwwroot.zip直接解压到/home目录里面
      unzip wwwroot.zip
      5、把/home目录下面的abc12.zip、abc23.zip、abc34.zip同时解压到/home目录里面
      unzip abc\*.zip
      6、查看把/home目录下面的wwwroot.zip里面的内容
      unzip -v wwwroot.zip
      7、验证/home目录下面的wwwroot.zip是否完整
      unzip -t wwwroot.zip
      8、把/home目录下面wwwroot.zip里面的所有文件解压到第一级目录
      unzip -j wwwroot.zip
      =====================================================
      复制代码
      主要参数
      -c:将解压缩的结果
      -l:显示压缩文件内所包含的文件
      -p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
      -t:检查压缩文件是否正确
      -u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到目录中
      -v:执行是时显示详细的信息
      -z:仅显示压缩文件的备注文字
      -a:对文本文件进行必要的字符转换
      -b:不要对文本文件进行字符转换
      -C:压缩文件中的文件名称区分大小写
      -j:不处理压缩文件中原有的目录路径
      -L:将压缩文件中的全部文件名改为小写
      -M:将输出结果送到more程序处理
      -n:解压缩时不要覆盖原有的文件
      -o:不必先询问用户,unzip执行后覆盖原有文件
      -P<密码>:使用zip的密码选项
      -q:执行时不显示任何信息
      -s:将文件名中的空白字符转换为底线字符
      -V:保留VMS的文件版本信息
      -X:解压缩时同时回存文件原来的UID/GID
  • Robot Framework自动化测试--第一个脚本

    2014-10-10 11:57:21

    在你安装好 RF-ride 之后,桌面就会生成一个 RIDE 图标。双击启动,界面如下:

     

    下面我们就一步一步的创建第一条用例,至于细节不多解释,只是对 RF 框架写用例有个感性的认识。

    创建测试项目                                          

    选择菜单栏 file----->new Project

    Name  输入项目名称。

    Type 选择 Directory

    创建测试套件                                            

    右键点击“ 测试项目 ”选择 new Suite 选项

    Name  输入项目名称。

    Type  选择 File

    创建测试用例                                                  

    右键点击“测试项目”选择 new Test Case 

    用例只需要输入用例 name  ,点击 OK 即可。

    导入selenium2library库                         

    因为 RF 框架编写基于 web  的测试用例,所以,我们需要 selenium  的库支持。所以,我们在使用的过程中需要加载 selenium2library库。

    在“测试套件”的Edit 标签页,点击“ Library ”按钮,弹出输入框, Name 输入: Selenium2Library 点击OK  完。

    如果导入的库显示为红色,表示导入的库不存在。如果是黑色则表示导入成功。

    编写用例                                                      

    下面就可以开始写我们的用例了,可是怎么写呢?我们可以通过按 F5  快捷键来查询脚本的关键字。如果你接触过 QTP  或  selenium IDE  等自动化工具的话,应该会有一些思路。

    如上图,自动化脚本从打开浏览器开发,如上图,我想打开一个浏览器,想的是“open”为关键字进行搜索,结果找到了一个“Open Browser”的关键字,点击这个关键字,想显示它的用法和说明。

    根据说明,我们来尝试创建这个打开浏览器的操作吧:

    “Open Browser”变蓝了,说明它是一个合法的关键字,后面有一个方框是红色的,表示这个参数不能缺省的。通过说明信息中,我发现它需要一个url  地址是必填的,当然还需要指定 browser  (默认不填为  friefox

    更多关键的使用,请参考相关 API  文档。这里不过多介绍。按照上面的方法。创建百度搜索用例如下:

    运行测试用例                                                

    勾选当前需要运行的测试用例,点击工具栏运行按钮,如果只运行单个用例的话,也可以切换到用例的 Run 标签页,点击“ start ”按钮。

    运行信息:

    运行信息显示会生成三个文件:Output.xml Log.html Report.html

    我们重点查看 Log.html Report.html  Log.html 更关注脚本的执行过程的记录, Report.html 更关注脚本的执行结果的展示。

    赶快打开你的测试报告看看效果吧!

    备注:

    解决碰到的问题:

    1.

    selenium.common.exceptions.WebDriverException: Message: "Can't load the profile.

    记录一下,Selenium在最新版本中修好了这个问题。运行CMD,然后输入

    pip install -U selenium

  • Robot Framework自动化测试--安装篇

    2014-10-10 11:51:21

    Robot Framework自动化测试:
    RF 框    Robot framework :https://pypi.python.org/pypi/robotframework/2.8.5 

    GUI 库   wxPython : http://www.wxpython.org/download.php   (Wxpython  是 python  非常有名的一个 GUI 库,因为 RIDE  是基于这个库开发的,所以这个必须安装)

    图形界面  Robot framework-ride : https://pypi.python.org/pypi/robotframework-ride  (RIDE 就是一个图形界面的用于创建、组织、运行测试的软件)

    RF-seleniumlibrary   Robot framework-selenium2library:https://pypi.python.org/pypi/robotframework-selenium2library/1.5.0  
        (可以通过 python  的 pip 工具包进行安装:>pip install robotframework-selenium2library )(RF-seleniumlibrary 可以看做 RF 版的 selenium  库, selenium  ( webdriver )可以认为是一套基于 web 的规范( API ),所以, RF  、 appium  等测试工具都可以基于这套 API 进行页面的定位与操作)


    python 
    1、下载并安装setuptools的Windows版本【这个工具是python的基础包工具】
    2、下载并安装pip工具【这个工具是python的安装包管理工具,类似于Ubuntu的aptget工具】
    3、通过pip命令安装selenium工具
    4、测试demo脚本

    具体安装操作:
    1、去这个地址http://pypi.python.org/pypi/setuptools下载setuptools

    2、直接安装其Windows版本的安装包,但需要对应的python版本支持

    3、pip:地址http://pypi.python.org/pypi/pip

    4、r解压,进入其目录输入命令:python setup.py install

    5、使用pip安装selenium,命令为:pip install -U selenium

    6、在命令行调用测试脚本【python demo.py】


    robotframework相关安装包和测试库列表:

    1、python-2.7.5.msi(一切的基础,切记安装的路径不要有中文不要有空格,http://www.python.org/download/releases/2.7.5/)

    2、setuptools (https://pypi.python.org/pypi/setuptools/)

    3、pip-install (pip安装方式,https://github.com/pypa/pip/releases)

    4、 wxPython2.8-win32-unicode-2.8.12.1-py27.exe(wxPython,RIDE需要他的支 持,http://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/ )

    5、robotframework-2.8.4(robotframework本身。http://code.google.com/p/robotframework/downloads/list)

    6、robotframework-ride-1.3.0.win32.exe(robotFramework的IDE,http://code.google.com/p/robotframework-ride/downloads/list)

    7、decorator-3.4.0(S2L库的依赖库。https://pypi.python.org/pypi/decorator/3.4.0)

    8、docutils-0.11(S2L库的依赖库。https://pypi.python.org/pypi/docutils/0.11)

    9、robotframework-selenium2library (selenium2测试库,基于webdriver驱动,https://github.com/rtomac/robotframework-selenium2library/releases)

    10、 selenium-2.35.0(是selenium的原生python库,https://pypi.python.org/pypi /selenium/2.35.0,而IEDriver.exe要到GOOGLE下载http://code.google.com/p /selenium/)

    11、pywin32-217.win32-py2.7.exe(请注意py版本http://sourceforge.net/projects/pywin32/files/pywin32/)

    12、AutoItLibrary-1.1(必须先安装上面的pywin32,下载路径:http://code.google.com/p/robotframework-autoitlibrary/)

    13、DatabaseLibrary(http://franz-see.github.io/Robotframework-Database-Library/)

    备注:安装中碰到的问题
    1.环境变量增加如下,D:\Python27;D:\Python27\Scripts;
    2.在windows下安装第三包时,需要进入到安装包的目录下,用以下命令:python setup.py install 
  • [JAVA]定时任务之-Quartz使用篇

    2014-06-10 15:09:03

    分类: Java 106人阅读 评论(0) 收藏 举报

    目录(?)[+]

       Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个, 甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。官方网站:http://www.opensymphony.com/quartz

     

    相关Jar:
       quartz-all-1.6.0.jar
       jta.jar
       commons-logging-1.1.jar
       commons-collections3.2.jar

     

    经过封装的管理类:

     

    [java] view plaincopy
    1. /** 
    2.  * 版权所有:华信软件 
    3.  * 项目名称:公用模块 
    4.  * 创建者: Wangdf 
    5.  * 创建日期: 2011-1-22 
    6.  * 文件说明: 定时任务管理类 
    7.  * 最近修改者:Wangdf 
    8.  * 最近修改日期:2011-1-22 
    9.  */  
    10. package com.extjweb.quartz;  
    11.   
    12. import java.text.ParseException;  
    13.   
    14. import org.quartz.CronTrigger;  
    15. import org.quartz.JobDetail;  
    16. import org.quartz.Scheduler;  
    17. import org.quartz.SchedulerException;  
    18. import org.quartz.SchedulerFactory;  
    19. import org.quartz.impl.StdSchedulerFactory;  
    20.   
    21. /** 
    22.  * 定时任务管理类 
    23.  * 
    24.  * @author 王德封 
    25.  */  
    26. public class QuartzManager {  
    27.     private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();  
    28.     private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";  
    29.     private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";  
    30.   
    31.     /** 
    32.      * 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名 
    33.      * 
    34.      * @param jobName 
    35.      *            任务名 
    36.      * @param jobClass 
    37.      *            任务 
    38.      * @param time 
    39.      *            时间设置,参考quartz说明文档 
    40.      * @throws SchedulerException 
    41.      * @throws ParseException 
    42.      */  
    43.     public static void addJob(String jobName, String jobClass, String time) {  
    44.         try {  
    45.             Scheduler sched = gSchedulerFactory.getScheduler();  
    46.             JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, Class.forName(jobClass));// 任务名,任务组,任务执行类  
    47.             // 触发器  
    48.             CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组  
    49.             trigger.setCronExpression(time);// 触发器时间设定  
    50.             sched.scheduleJob(jobDetail, trigger);  
    51.             // 启动  
    52.             if (!sched.isShutdown()){  
    53.                 sched.start();  
    54.             }  
    55.         } catch (Exception e) {  
    56.             e.printStackTrace();  
    57.             throw new RuntimeException(e);  
    58.         }  
    59.     }  
    60.   
    61.     /** 
    62.      * 添加一个定时任务 
    63.      * 
    64.      * @param jobName 
    65.      *            任务名 
    66.      * @param jobGroupName 
    67.      *            任务组名 
    68.      * @param triggerName 
    69.      *            触发器名 
    70.      * @param triggerGroupName 
    71.      *            触发器组名 
    72.      * @param jobClass 
    73.      *            任务 
    74.      * @param time 
    75.      *            时间设置,参考quartz说明文档 
    76.      * @throws SchedulerException 
    77.      * @throws ParseException 
    78.      */  
    79.     public static void addJob(String jobName, String jobGroupName,  
    80.             String triggerName, String triggerGroupName, String jobClass, String time){  
    81.         try {  
    82.             Scheduler sched = gSchedulerFactory.getScheduler();  
    83.             JobDetail jobDetail = new JobDetail(jobName, jobGroupName, Class.forName(jobClass));// 任务名,任务组,任务执行类  
    84.             // 触发器  
    85.             CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组  
    86.             trigger.setCronExpression(time);// 触发器时间设定  
    87.             sched.scheduleJob(jobDetail, trigger);  
    88.         } catch (Exception e) {  
    89.             e.printStackTrace();  
    90.             throw new RuntimeException(e);  
    91.         }  
    92.     }  
    93.   
    94.     /** 
    95.      * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名) 
    96.      * 
    97.      * @param jobName 
    98.      * @param time 
    99.      */  
    100.     public static void modifyJobTime(String jobName, String time) {  
    101. 查看(2737) 评论(0) 收藏 分享 管理

    102. Linux RAR 安装和使用

      2014-05-21 15:14:23

      描述:Linux默认自带ZIP压缩,最大支持4GB压缩,RAR的压缩比大于4GB. 
      流程:下载 》安装 》 使用 
      -------------------------------------------------- 下载 
      # wget http://www.rarsoft.com/rar_CN/rarlinux-3.9.3.tar.gz 
      --16:01:50--  http://www.rarsoft.com/rar_CN/rarlinux-3.9.3.tar.gz 
      Resolving www.rarsoft.com... 217.70.129.242 
      Connecting to www.rarsoft.com|217.70.129.242|:80... connected. 
      HTTP request sent, awaiting response... 200 OK 
      Length: 833828 (814K) [application/x-gzip] 
      Saving to: `rarlinux-3.9.3.tar.gz' 

      100%[=======================================>] 833,828     34.5K/s   in 29s    

      16:02:22 (28.2 KB/s) - `rarlinux-3.9.3.tar.gz' saved [833828/833828] 

      -------------------------------------------------- 查看目录列表 
      # ls 
      rarlinux-3.9.3.tar.gz 

      -------------------------------------------------- 解压 tar.gz 
      # tar -xzvf rarlinux-3.9.3.tar.gz 
      rar/ 
      rar/readme.txt 
      rar/default.sfx 
      rar/whatsnew.txt 
      rar/license.txt 
      rar/order.htm 
      rar/rar 
      rar/unrar 
      rar/rar_static 
      rar/technote.txt 
      rar/rarfiles.lst 
      rar/makefile 
      rar/rar.txt 

      -------------------------------------------------- 查看目录列表 
      # ls 
      rar 
      rarlinux-3.9.3.tar.gz 

      -------------------------------------------------- 切换目录 
      # cd rar 

      -------------------------------------------------- 编译文件 
      # make 
      mkdir -p /usr/local/bin 
      mkdir -p /usr/local/lib 
      cp rar unrar /usr/local/bin 
      cp rarfiles.lst /etc 
      cp default.sfx /usr/local/lib 

      -------------------------------------------------- 安装编译文件 
      # make install 
      mkdir -p /usr/local/bin 
      mkdir -p /usr/local/lib 
      cp rar unrar /usr/local/bin 
      cp rarfiles.lst /etc 
      cp default.sfx /usr/local/lib 

      -------------------------------------------------- 执行rar帮助命令 
      # rar --help 
      rar: /lib/libc.so.6: version `GLIBC_2.7' not found (required by rar) 

      -------------------------------------------------- 添加全局命令 
      # cp -f rar_static /usr/local/bin/rar 
      cp: overwrite `/usr/local/bin/rar'? y 

      -------------------------------------------------- 即可访问 rar 命令 
      # rar --help 
      RAR 3.93   Copyright (c) 1993-2010 Alexander Roshal   15 Mar 2010 
      Shareware version         Type RAR -? for help 

      Usage:     rar <command> -<switch 1> -<switch N> <archive> <files...> 
                     <@listfiles...> <path_to_extract\> 

      <Commands> 
        x             Extract files with full path 

      -------------------------------------------------- 解压所有文件包括路径 
      # rar x filename.rar

    103. nginx配置中域名与PHP共用

      2013-11-28 13:43:12

      nginx配置中域名与PHP共用,在nginx.conf如何设置:

         server{
             listen       80;
             server_name  域名;

             location /{
             root     /var/www/test/html1;
             index   index.html  index.htm;
             }

             location ~ \.php$ {
              root /var/www/test/html1;
              fastcgi_pass 127.0.0.1:9000;
              fastcgi_index index.php;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include fastcgi_params;
              }
        }
    104. nginx php-fpm安装配置

      2013-11-28 13:41:02

      nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。

      nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx

      本文以php-fpm为例介绍如何使nginx支持PHP

      一、编译安装php-fpm

      什么是PHP-FPM

      PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.

      PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。

      新版PHP已经集成php-fpm了,不再是第三方的包了,推荐使用。 PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官 方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM,其它参数都是配置php的,具体选项含义可以查看这里

      安装前准备
      centos下执行

      yum -y install gcc automake autoconf libtool make
       
      yum -y install     gcc gcc-c++ glibc
       
      yum -y install     libmcrypt-devel mhash-devel libxslt-devel \
      libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \
      zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \
      ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \
      krb5 krb5-devel libidn libidn-devel openssl openssl-devel

      新版php-fpm安装(推荐安装方式)

      wget http://cn2.php.net/distributions/php-5.4.7.tar.gz
      tar zvxf php-5.4.7.tar.gz
      cd php-5.4.7
      ./configure   --prefix=/usr/local/php  --enable-fpm --with-mcrypt \
      --enable-mbstring --disable-pdo --with-curl --disable-debug  --disable-rpath \
      --enable-inline-optimization --with-bz2  --with-zlib --enable-sockets \
      --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \
      --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli \
      --with-gd --with-jpeg-dir
       
      make  all  install

      旧版手动打补丁php-fpm安装(旧版程序已经没有了,大家新版的吧,这里做个展示)
      wget http://cn2.php.net/get/php-5.2.17.tar.gz
      wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
      tar zvxf php-5.2.17.tar.gz
      gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1
      cd php-5.2.17
      ./configure --prefix=/usr/local/php -with-config-file-path=/usr/local/php/etc\
      -with-mysql=/usr/local/mysql\
      -with-mysqli=/usr/local/mysql/bin/mysql_config -with-openssl -enable-fpm -enable-mbstring\
      -with-freetype-dir -with-jpeg-dir -with-png-dir -with-zlib-dir -with-libxml-dir=/usr -enable-xml\
      -with-mhash -with-mcrypt -enable-pcntl -enable-sockets  -with-bz2 -with-curl -with-curlwrappers\
      -enable-mbregex -with-gd -enable-gd-native-ttf -enable-zip -enable-soap -with-iconv -enable-bcmath\
      -enable-shmop -enable-sysvsem -enable-inline-optimization -with-ldap -with-ldap-sasl -enable-pdo\
      -with-pdo-mysql
      make all install

      以上两种方式都可以安装php-fpm,安装后内容放在/usr/local/php目录下

      以上就完成了php-fpm的安装。

      下面是对php-fpm运行用户进行设置

      cd /usr/local/php
      cp etc/php-fpm.conf.default etc/php-fpm.conf
      vi etc/php-fpm.conf

      修改
      user = www-data
      group = www-data

      如果www-data用户不存在,那么先添加www-data用户
      groupadd www-data
      useradd -g www-data www-data

      二、编译安装nginx

      然后按照http://www.nginx.cn/install 安装nginx

      三、修改nginx配置文件以支持php-fpm

      nginx安装完成后,修改nginx配置文件为,nginx.conf

      其中server段增加如下配置,注意标红内容配置,否则会出现No input file specified.错误

      # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
      #
      location ~ \.php$ {
      root html; //静态页访问的路径
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
      }

      四、创建测试php文件

      创建php文件

      在/usr/local/nginx/html下创建index.php文件,输入如下内容

      <?php
          echo phpinfo();
      ?>

      五、启动服务

      启动php-fpm和nginx

      /usr/local/php/sbin/php-fpm (手动打补丁的启动方式/usr/local/php/sbin/php-fpm start)

      sudo /usr/local/nginx/nginx

      php-fpm关闭重启见文章结尾

      六、浏览器访问

      访问http://你的服务器ip/index.php,皆可以见到php信息了。

      安装php-fpm时可能遇到的错误:

      1. php configure时出错

      configure: error: XML configuration could not be found
      apt-get install libxml2 libxml2-dev  (ubuntu下)
      yum -y install libxml2 libxml2-devel(centos下)

      2. Please reinstall the BZip2 distribution

      wget http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz
      tar -zxvf bzip2-1.0.5.tar.gz
      cd bzip2-1.0.5
      make
      make install
      3. php的配置文件中有一行--with-mysql=/usr。安装的时候提示:
      configure: error: Cannot find MySQL header files under yes.
      Note that the MySQL client library is not bundled anymore.

      这是由于安装mysql时没有安装mysql头文件,或者是路径指定不正确,php找不到mysql的头文件引起的错误提示。
      解决方法。
      (1.) 查看你的系统有没有安装mysql header
      find / -name mysql.h
      如果有。请指定--with-mysql=/跟你的正常路径。
      如果没有。请看下一步。
      (2.)redhat安装
      rpm -ivh MySQL-devel-4.1.12-1.i386.rpm
      (3.)ubuntu安装
      apt-get install libmysqlclient15-dev
      (4.)最后一步php的配置选项添加--with-mysql=/usr即可!
      4.No input file specified.

      location ~ \.php$ {
      root html;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
      }

      5. 如果php configure时缺库,可以先安装库(ubuntu下)

      sudo apt-get install make bison flex gcc patch autoconf subversion locate
      sudo apt-get install libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-dev

      6. mcrypt.h not found. Please reinstall libmcrypt

      apt-get install libmcrypt-dev

      或者

      wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz

      tar -zxvf libmcrypt-2.5.7.tar.gz
      cd libmcrypt-2.5.7
      mkdir -p /usr/local/libmcrytp
      ./configure prefix=/usr/local/libmcrytp/
      make
      make install

      7. php-fpm 5.4.7 如何关闭 重启?

      php 5.4.7 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信号控制:

      master进程可以理解以下信号

      INT, TERM 立刻终止 QUIT 平滑终止 USR1 重新打开日志文件 USR2 平滑重载所有worker进程并重新载入配置和二进制模块

      示例:

      php-fpm 关闭:

      kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

      php-fpm 重启:

      kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

      查看php-fpm进程数:

      ps aux | grep -c php-fpm

      8.命令行下执行php,提示找不到命令

      -bash: /usr/bin/php: No such file or directory

      vi /etc/profile

      在文件底部增加一行配置
      export PATH=/usr/local/php/bin:$PATH

      保存退出

      source /etc/profile

      http://www.nginx.cn/231.html


    105. Navicat Lite不能访问mysql

      2013-09-22 16:21:53

      Navicat Lite不能访问mysql
      解决办法如下:
      1.首先查看防火墙是否关闭
      2.防火墙关闭后,还不能访问时,则如下解决:
       
      想都不用想,肯定是Mysql的访问权限问题。
       
      首先,通过终端(我用的是SSH)远程登录到Linux服务器,为了安全起见,先改一下Mysql数据的root用户密码:
       
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      [plain]
      [hadoop@h1 ~]$ mysqladmin -u root password 123456 
      [hadoop@h1 ~]$ mysql -uroot -p 
      Enter password
      Welcome to the MySQL monitor.  Commands end with ; or \g. 
      Your MySQL connection id is 13 
      Server version: 5.0.77 Source distribution 
         
      Type 'help;' or '\h' for help. Type '\c' to clear the buffer. 
         
      mysql>
        
      第二步,查询Mysql中所有用户的权限:
       
       
      意料之中,mysql的root用户只能通过本机访问,下面我们来改一下权限:
       
      1
      2
      3
      [plain]
      mysql> update `user` set `host` = '%' where `user` = 'root'
      mysql> flush privileges;

       

       
      测试一下,如图:
       
       
      操作成功,现在,你可以通过终端远程管理mysql数据库了。

    106. centos下安装apache,php,mysql

      2013-09-22 15:56:37

      1.用云安装apache和PHP,使用命令:#yum install -y php
      备注:使用yum命令时,需要查看一下DNS是否正常使用,是否可以ping www.baidu.com.


      当使用yum时不能正常使用时,则需要将yum服务重启一下。
      2.这个只装PHP
      建议安装运行库及MYSQL的支持
      #yum install -y php php-devel php-mysql
      如果你的系统是Centos 5.6那么上面这么命令安装的是PHP 5.1,
      要安装PHP5.3则执行下面的命令:
      #yum install -y php53 php53-devel php53-mysql
      自动安装启动
      #service httpd restart
      3.会安装apache(也就是httpd),但是不会安装MySQL,MySQL需要单独安装. 安装MySQL命令:
       #yum install -y mysql mysql-devel mysql-server 这条命令包括MySQL的运行库及服务端

      安装好后,在浏览器上输入http://192.168.23.108
      查看是否安装成功,如果不能访问的话,则看一下防火墙是否打开。

      4.测试 PHP 相关信息

        这步实际上可以省略,但是为了测试是否安装成功,你可以新建一个 PHP 页面进行测试,使用 vim 编辑器新建:

      [root@localhost ~]# vi /var/www/html/info.php

      按 “i” 键进行编辑,输入:

      <?php phpinfo(); ?>

      编辑完毕,按 “ESC” 键退出编辑模式,接着输入:

      :wq

      然后回车,即保存并退出。

        此时你可以访问你的站点地址,例如 “http://192.168.1.2/info.php”,查看是否能看到相关的 PHP 信息。

        看到这样的图,就说明 PHP 安装成功了。

      五、将 PHP 模块和 MySQL 模块关联起来

        还需要将 PHP 和 MySQL 关联起来,才能正常工作。搜索模块:

      [root@localhost ~]# yum search php

      安装相关模块:

      [root@localhost ~]# yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc

      需要重启 Apache 模块才能生效:

      [root@localhost ~]# /etc/init.d/httpd restart

        再次刷新刚才建立的 “info.php” 页面,往下拉找到相关 MySQL 模块,看是否检测到相关信息。

      如果看到如上图相关信息,则说明 MySQL 工作正常了。




    107. Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126

      2013-04-19 13:20:15

      Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126

      在使用SQL2005(或2008)是可能会遇到错误提示:

      “Windows 不能在 本地计算机 启动 SQL Server 。

      有关更多信息,查阅系统事件日志。如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码126 ”

      解决方法:

      在2005(2008)的“配置工具”中有个“SQL Server Configuration Manager”-->SQLserver 2005(2008) 的网络配置,

      在MSSOLSERVER和SQLEXPRESS中都有个VIA的属性,你那个服务无法启动就把那个VIA设置禁用。

      然后重启一下服务,就可以了。

      我试过了是在2008中无法启动服务,

      查看MSSOLSERVER和SQLEXPRESS中都有个VIA的属性,将VIA设置为禁用,然后重启服务,就可以了,服务能正常启动。

       

      VIA协议简介:

       

      VIA

      虚拟接口适配器 (VIA) 协议和 VIA 硬件一同使用。有关如何使用 VIA 的信息,请与硬件供应商联系。

      重要提示

      不推荐使用 VIA 协议。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

      ==========================================================================以上来自官方资料,别人都巴不得关掉此协议。很多原因也是此协议开启引起的。

      ----------------------------------------------------------------------------------------------------------------------

      这个协议本是Wintel”联盟想出来的,W就是微软,inter就是硬件厂商了。

      软硬联手造就了VIA,本来为了和不同的虚拟设备通信。

      VIA全拼--virtual interface architecture,虚拟接口体系,任何设备都可以认为是虚拟设备,就是实现的抽象,本来为了适应不同的硬件厂商,适应不同的网络,或者java virtual machine,跨平台等,结果过于理想化,目标太大实现较为复杂,就走了水漂了。况且目前还是TCP/IP协议为至尊王者,剑走偏锋毕竟不会太远。将要被历史遗忘的东西LZ就不要过分关注了!

    108. 无法获得对数据库的独占访问权”的最终解决方案

      2013-04-02 10:27:17

      关于“因为数据库正在使用,所以无法获得对数据库的独占访问权”的最终解决方案

       


      今天在使用SQL Server2005对某个数据库进行还原操作的时候,出现了如上图问题,经过多次反复尝试(包括关闭所有数据库连接、重启SQL Server服务、重启计算机)均以失败告终,很是郁闷,幸好之前有同事遇到过类似问题,帮我给解决了,而我也记下了下面这句解决此问题的关键SQL语 句:

      ALTER DATABASE [JDZDJ] SET OFFLINE WITH ROLLBACK IMMEDIATE;

    109. Linux-shell编程-04.控制流结构

      2013-02-26 14:42:19

      Linux-shell编程-04.控制流结构

      命令:set nu是显示文本中的行数

      CASE的编码
        1 #!/bin/bash
        2 #case select
        3 echo -n "Enter a number from 1 to 3:"
        4 read ANS
        5 case $ANS in
        6 1)
        7         echo "You select 1"
        8         ;;
        9 2)
       10         echo "You select 2"
       11         ;;
       12 3)
       13         echo "You select 3"
       14         ;;
       15 *)
       16         echo "'basename $0':This is not between 1 and 3">$2
       17         exit;
       18         ;;
       19 esac
    110. 2012的过去,2013的继续

      2013-01-22 11:06:36

          时间飞逝,2012年就在这末日的传说中就这样过去了。感觉末日是已经到来过,只不过上天又给我们重新获得生命一样,在2013年让我们在继续的去努力,去奋斗,去完成自己的理想,为了自己的幸福,为了自己的事业而去奋斗着,一步一步的往前走着,一步一个脚印,坚持坚持的走完。
          突然想到自己2013年的关健词那就是坚持,2012年自我感觉也是不够坚持,希望在这2013年能坚持的去做好每一件事情。不管是在个人感情还是事业,总之让自己为之努力吧。也在一次强调自己做什么事情还是要坚持。后来回顾2012想想,感觉自己确实不够坚持。在工作上总是口头说说,但又不会花太多的时间去做,所以还是让这些坏毛病就这么走了吧。从现在起要好好想2013的路应该怎么走了,还是一个词,自己决定的事还是要好好坚持的做完它。
          那还是要回想一下2012年我做了些什么,跟以前的自己比一下。我在2012年有什么变化,虽然在2012年中公司整体的架构是有一些变化,但这不是理由,感觉2012年的后半段自己总是没有激情,没有活力,不象2011年那种有活力。不管做什么事情总是想把这些事情做好,但后半段感觉在公司里在混一样,一天不如一天。不知道是不是环境在打断这以往充满活力的自己,还是自己就希望这么没有活力的在混日子。其实总是在想如何去做,但又没方向一样。难道是要离开的时候了吗,还是说需要换个环境去调整一下自己。其实环境是一个原因,但最大的原因还是在于个人。自己虽然有想法,但不去做其实也是没什么滴,所以从今天起应该要打起精神来。在2013年能给自己设定个目标,为之努力去做吧。
          2013年的目标是什么呢,还是一样学习为主,多学点语言的东西。明年把家里的事情处理完之后,也要准备一下考个本科,虽然感觉有点晚,但没有关系滴,相信自己可以完成滴。
          相信自己是最重要滴!!!!!
    111. Nginx出现“413 Request Entity Too Large”错误解决方法

      2012-10-17 16:50:01

      切换到传统文件上传界面,重新上传一个大文件,这回出来错误提示了,413 Request Entity Too Large,google了一下,发现是Nginx的错误提示。

      解决方法:打开nginx主配置文件nginx.conf,找到http{}段,添加
      client_max_body_size 20m;
      Centos下 vi /usr/local/nginx/conf/nginx.conf

      重启NGINX


      问题就解决喽!!!!
    112. SQL Server2008登录时,出现233错误

      2012-10-17 10:56:15

      sql server2008用户登录,出现233错误。
      以下解决方法:
      1.查看TCP/IP协议是否打开
      2.主用户SA的状态是否显示正确,如:设置中的是否允许授予,及登录是否启用
      3.数据库属性中是否支持SQL SERVER和windows身份验证模式
    113. 心事

      2012-08-20 16:35:13

          时间过的真快,不知不觉得已经在杭州工作有三年多啦。但年龄一年年的大上去,但学习的东西却没有变化。自己感觉根本就是一点也没长进,学习的知识还是挺多滴。但没有好好的去学习,还是停留在二年前的地方,没有什么成长,不是不想去学,而是不知道如何下手。为了赚钱而留在这里吗,还是在等待机会。但有时候感觉自己还不是够努力,总是活在自我感觉良好上。人的一生过的很快,真是在浪费青春,真象电视剧里的我的青春里说到“重新在走一回青春”。工作不如意,感情也不怎么样,真是两边不讨好呀,两边都没有做好。要钱没钱,要好工作没好工作。难道我真的不适合做测试,虽然做IT都是比较不怎么样滴的工作。但为了生活也是没有办法滴,为了什么而活。为了自己,还是为什么,我都已经搞不清楚啦,谁能告诉我呢
421/3123>
Open Toolbar