ykjsw.txt

July 28, 2009

openssl命令的用法

分类: linux — 标签:, — ykjsw @ 1:12 pm

密钥的生成

 a. 生成非对称密钥对
  openssl genrsa -out rsa.key
 b. 指定生成的密钥的位数,默认512
  openssl genrsa -out rsa_2048.key 2048
 c. 为私钥添加密码 (一般都不用)
  openssl genrsa -out rsa_des3.key -des3

 
 密钥的查看
 d. 查看私钥
  openssl rsa -in rsa.key
 e. 查看公钥
  openssl rsa -in rsa.key -pubout
 f. 查看公钥和modulus
  openssl rsa -in rsa.key -modulus
 g. 查看密钥的详细信息,包含component prime等细节信息,这些信息的值都是冒号分割的,称为abstract
  openssl rsa -in rsa.key -text
 h. 查看只有public key的文件
  openssl rsa -in pub.txt -pubin
  注:
   pub.txt 可由
   openssl rsa -in rsa.key -pubout >pub.txt
   或
   openssl rsa -in rsa.key -pubout -out pub.txt
   产生
   如果pub.txt 中不是公钥将报错, -pubin 仅仅说明 -in 所指定的文件里面是什么
 i. 只查看key的其他信息,不显示key
  openssl  rsa -in rsa.key -noout

 

 其它:
 
 检查是否含有某个子命令
  openssl no-rsa
  输出rsa,命令的返回值为1,说明存在该子命令
  openssl no-des5
  输出no-des5 命令的返回值为0,说明不存在des5这个子命令
 
 分析key的详细信息
  openssl asn1parse -in rsa.key
  openssl asn1parse -in pub.txt

July 17, 2009

jQuery选择器

分类: javascript, web — 标签: — ykjsw @ 11:06 pm

$的选择器部分:
凡是运用$,其返回值是一个object
$选择器主要用于选择标签.基本用法是同css的选择器.但是,很让人兴奋的是,他支持常见的浏览器,而css中很多选择器是IE6所不支持的.
1.基本选择器(3种):
$(”标签名”),如$(”p”)是选取了所有的p标签节点
$(”#id名”),如$(”#test”)是选取了id为test的标签节点
$(”.class名”),如$(”.test”)是选取了所有class为test的标签节点
上面的$(”标签名”)和$(”.class名”)返回的都是所有满足的节点,至于进一步筛选可以添加一些函数,如eq,gt,lt等等.
2.组选择器:
下面还是现做一个约定:把”标签名或#id名或.class名”记作mix,则mix表示一个标签名,或一个#id或一个.class.
$(”mix,mix,mix,…”),如:$(”div,#test1,p,.test2,#test3″) 
3.后代选择器:
$(”mix mix”),当然可以是多个嵌套,但后代选择器可以是深层子代,所以$(”mix mix mix …”)这种写法作用不大.例子:$(”div .test”):在div标签内的所有具有test的class的后代元素(就是被div嵌套的class属性为test的标签)
可以见DEMO。
4.子选择器:
$(”mix>mix”),这个放在后代选择器后面是为了和它做对比.子选择器只能选择第一代子代.不处理深层嵌套.例子:
$(”div>.test”)
<div><p class=”test”></p></div>对这里的p段落标签有效.但对
<div><p><p class=”test”></p></p></div>对这里的p段落标签无效,这里要用
$(”div .test)

5.临近选择器:
$(”mix+mix”),选取下一个兄弟节点.如:$(”div +#test”),id为test的的节点必须是div的下一个兄弟节点.
<div></div><p id=”test”></p>在$(”div + #test”)中能取到p段落节点
<div></div><p></p><p id=”test”></p>则不能取到

6.属性选择器:
把属性选择器不放在css选择器里面是因为jQuery中写法是不一样的.至于css中写法可以参考我之前写的一篇css的选择器一文.jQuery中是和xPath类似的写法:
$(”mix[@attr]“):选取所有该mix且具有attr属性的节点
$(”mix[@attr=a_value"]):选取所有该mix且具有attr属性并满足属性值为a_value的节点
$(”mix[@attr^=a_value_head"]):attr属性的属性值是以a_value_head开头的
$(”mix[@attr$=a_value_end"]):attr属性的属性值是以a_value_end结尾的
$(”mix[@attr*=a_value"]):attr属性的属性值中包含a_value

7.进一步选择器:
这个名称是我自己起的,其实选择器组合都有进一步的意思,你明白后面所介绍的知识即可.
具有限定子节点选择器:$(”mix1[mix2]“):返回包含mix2的mix1节点.如:$(”div[a]“):包含a标签的div.
这个和$(”div a”)不相同.后者表示div中的a标签,返回的是a标签对象,前者返回的是div标签对象
冒号限定结点选择器:$(”mix:condition”):mix标签,并且满足限定条件.
E:root:类型为E,并且是文档的根元素
E:nth-child(n):是其父元素的第n个类型为E的子元素 ,基数从1开始
E:first-child:是其父元素的第1个类型为E的子元素
E:last-child:是其父元素的最后一个类型为E的子元素
E:only-child:且是其父元素的唯一一个类型为E的子元素
E:empty:没有子元素(包括text节点)的类型为E的元素
E:enabled
E:disabled:类型为E,允许或被禁止的用户界面元素
E:checked:类型为E,处于选中状态的用户界面元素(例如单选按钮或复选框)
E:visible:选择所有可见元素(display值为block或visible,visibility值为visible元素,不包括hide域)
E:hidden:选择所有隐藏元素(非Hide域,且display值为block或visible,visibility值为visible的元素)
E:not(s):类型为E,不匹配选择器s
E:eq(n),E:gt(n),E:lt(n):元素限定
E:first:相当于E:eq(0)
E:last:最后一个匹配的元素
E:even:从匹配的元素集中取序数为偶数的元素
E:odd:从匹配的元素集中取序数为奇数的元素
E:parent:选择包含子元素(包含text节点)的所有元素
E:contains(’test’):选择所有含有指定文本的元素
表单选择器:
E:input:选择表单元素(input,select,textarea,button)
E:text:选择所有文本域(type=”text”)
E:password:选择所有密码域(type=”password”)
E:radio:选择所有单选按钮(type=”radio”)
E:checkbox:选择所有复选框(type=”checkbox”)
E:submit:选择所有提交按钮(type=”submit”)
E:image:选择所有图像域 (type=”image”)
E:reset:选择所有清除域(type=”reset”)
E:button:选择所有按钮(type=”button”)
当然包括E:hidden

July 4, 2009

服务器apache转lighttpd

分类: php, web — 标签:, — ykjsw @ 1:56 am

本来只是想简单的给apache2加上压缩模块,结果,编译后的模块似乎无法工作,折腾n久未果,干脆直接换掉apache,装上lighttpd,lighttpd确实很轻,看配置文件行数就知道了,php fastcgi弄了好久,重新把之前编译过的php5的整个目录删掉,再解压编译才正常,rewrite和apache下语法一样,直接拿过来用就ok了。

不过编译出的php-cgi大概10m,所以执行php程序好像还是比较消耗内存,可能我还对fastcgi不理解吧。

June 22, 2009

C++学习中

分类: c++ — 标签: — ykjsw @ 12:55 am

之前为了编译一个程序,胡乱学了一些,居然最后win下linux下都编译成功,感觉不错,里面的代码可以大概的知道意思,想完全明白,只能系统的学习下了:)

June 14, 2009

x86运行mac系统

分类: 苹果系统 — 标签:, — ykjsw @ 10:17 pm

最近忽然对mac系统非常感兴趣,找了很多资料看,发现现在这项技术算是比较成熟了,2005年就开始了,唯一麻烦的就是你的硬件驱动,CPU 主板,一般问题都不会太大,显卡,网卡,声卡,有些就比较麻烦,查了下我的benq s73u 114本本,显卡因为是集成的,应该没问题,无线网卡ar5006x ,现在貌似还没办法驱动,声卡alc883 以太网卡bcm5789都可以驱动,不过网卡是借助bcm5751修改的,驱动,os光盘都下载好了,过几天装个试试

必看的两个坛子:http://bbs.kenapple.com/ 
http://www.insanelymac.com/forum/index.php 这个最权威

May 24, 2009

adjtimex调整服务器时间

分类: linux — 标签: — ykjsw @ 12:52 am

早就感觉服务器时间会快一些,但一直没处理,今天搜索了下,发现很多人遇到过这个问题,adjtimex确实是个很方便的程序,它可以精确的调整服务器“秒”的长度,开始找到个源码编译,结果make出错,后来下了个rpm包,很容易就装好了,下载地址是 http://rpm.pbone.net/index.php3/stat/4/idpl/2392148/com/adjtimex-1.3-3.i386.rpm.html

调整也很简单,先 adjtimex –compare 程序会进行几次10秒的比较,会告诉你每10秒的误差,你可以根据程序输出的推荐值进行调整,比如我的是 adjtimex -tick 9855 然后 adjtimex -f 1467000 结果下来,再比较,10秒的误差在0.00001一下。

May 22, 2009

Ogame模拟器回来了

分类: php, web — 标签: — ykjsw @ 12:12 am

http://sim.wogame.net

程序后台的计算是C++,php只是扮演传递数据的作用,绝对是真正意义上的速射及联合攻击。

May 21, 2009

[转]C++编译器—gcc的用法

分类: linux — 标签:, — ykjsw @ 12:08 am
在 为Linux /Unix开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如何灵活运用C编译器。目前Linux 下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。GCC不仅功能非常强大,结构也异常灵活。最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java、 Fortran、Pascal、Modula-3和Ada等。 

开放、自由和灵活是Linux的魅力所在,而这一点在GCC上的体现就是程序员通过它能够更好地控制整个编译过程。在使用GCC编译程序时,编译过程可以被细分为四个阶段: 
◆ 预处理(Pre-Processing) 
◆ 编译(Compiling) 
◆ 汇编(Assembling) 
◆ 链接(Linking) 

Linux 程序员可以根据自己的需要让GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不 同数量和种类的调试代码来为今后的调试做好准备。和其它常用的编译器一样,GCC也提供了灵活而强大的代码优化功能,利用它可以生成执行效率更高的代码。 

GCC提供了30多条警告信息和三个警告级别,使用它们有助于增强程序的稳定性和可移植性。此外,GCC还对标准的C和C++语言进行了大量的扩展,提高程序的执行效率,有助于编译器进行代码优化,能够减轻编程的工作量。 

GCC起步 

在学习使用GCC之前,下面的这个例子能够帮助用户迅速理解GCC的工作原理,并将其立即运用到实际的项目开发中去。首先用熟悉的编辑器输入清单1所示的代码: 

清单1:hello.c 

#include 
int main(void) 

printf (”Hello world, Linux programming!\n”); 
return 0; 

然后执行下面的命令编译和运行这段程序: 

# gcc hello.c -o hello 
# ./hello 
Hello world, Linux programming! 

 用法: gcc [OPTION] file … 用–help可以得到更多帮助。
   常用选项:
   1) -o <FILE> 指定输出的文件,如果是一个文件的C程序不指定-o选项,则输出的文件是一个a.out的可执行文件,运行./a.out可以运行,注意LINUX下当前目录默认不在搜索路径下,所以运行当前目录的程序也必须加./ 。
   2) -c 只编译不连接,这样生成的程序如果不指定-o是file.o形式的文件,基本名字和C 程序的相同。有些程序可能包括很多个文件,需要将每个文件先编译成.o的文件,然后再连接在一起。
   3) -I 指定include搜索的路径。如-I/home/lxq/include即指定include搜索路径中加上/home/lxq/include。
   4) -L 指定库的搜索路径。如-L/home/lxq/libs即指定库的搜索路径中加上/home/lxq/libs。
   5) -l 指定所用到的库。Linux下的库文件一般是这种格式:静态库libxxxx.a,动态库libxxx.so,这样如果用到了某个库只需在编译的时候加上-lxxx即可。比如-lm,即包含数学库。
   6) -g 加入调试信息。加了这个选项之后生成的程序可以进行调试,但是可能程序的执行速度会受到影响。可能用-gdb3来代替,-gdb3加入的调试信息最多。
   7) -On 优化生成的目标代码。n是一个具体的数,如3。这样生成的程序没有调试信息加入不能进行调试,但是程序的效率比较高,对有些程序的执行速度可能会影响很大。
make及Makefile的用法:
       make是用来管理工程文件的,系统自动检测变化的部分,并为这种变化采取适当的 动作。make工作要有一个Makefile文件,下面介绍Makefile的文件格式及写法。

   例子:
    共有main.c func.c func.h 三个文件的程序其中main.c中有#i nclude<func.h>
    gcc -c main.c -o main.o
    gcc -c func.c -o func.o
    gcc main.o func.o -o main
    这样就生成了main的可执行程序,当然这些工作用make来做便不用每次都敲这些命令
当在一个目录下运行make命令时,系统自动找Makefile或makefile,如果两者都没有,也可以用-f来指定。Makefile的基本规则是这样的:

       目标:依赖程序
       <TAB> 执行命令1
       <TAB> 执行命令2   
    
比如上面的例子可以写成Makefile如下:
       main:main.o func.o
     gcc main.o func.o -o main
       main.o:main.c
     gcc -c main.c -o main.o
       func.o:func.c func.h
                   gcc -c func.c -o func.o
   注意此处必须是TAB键而不能是空格。
   可以在Makefile里定义变量,变量的引用用$()来表示,可参考相关书籍介绍

从 程序员的角度看,只需简单地执行一条GCC命令就可以了,但从编译器的角度来看,却需要完成一系列非常繁杂的工作。首先,GCC需要调用预处理程序 cpp,由它负责展开在源文件中定义的宏,并向其中插入”#include”语句所包含的内容;接着,GCC会调用ccl和as将处理后的源代码编译成目 标代码;最后,GCC会调用链接程序ld,把生成的目标代码链接成一个可执行程序。 

为了更好地理解GCC的工作过程,可以把上述编译过程分成几个步骤单独进行,并观察每步的运行结果。第一步是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程: 

# gcc -E hello.c -o hello.i 

此时若查看hello.cpp文件中的内容,会发现stdio.h的内容确实都插到文件里去了,而其它应当被预处理的宏定义也都做了相应的处理。下一步是将hello.i编译为目标代码,这可以通过使用-c参数来完成: 

# gcc -c hello.i -o hello.o 

GCC默认将.i文件看成是预处理后的C语言源代码,因此上述命令将自动跳过预处理步骤而开始执行编译过程,也可以使用-x参数让GCC从指定的步骤开始编译。最后一步是将生成的目标文件链接成可执行文件: 

# gcc hello.o -o hello 

在 采用模块化的设计思想进行软件开发时,通常整个程序是由多个源文件组成的,相应地也就形成了多个编译单元,使用GCC能够很好地管理这些编译单元。假设有 一个由foo1.c和foo2.c两个源文件组成的程序,为了对它们进行编译,并最终生成可执行程序foo,可以使用下面这条命令: 

# gcc foo1.c foo2.c -o foo 

如果同时处理的文件不止一个,GCC仍然会按照预处理、编译和链接的过程依次进行。如果深究起来,上面这条命令大致相当于依次执行如下三条命令: 

# gcc -c foo1.c -o foo1.o 
# gcc -c foo2.c -o foo2.o 
# gcc foo1.o foo2.o -o foo 

在 编译一个包含许多源文件的工程时,若只用一条GCC命令来完成编译是非常浪费时间的。假设项目中有100个源文件需要编译,并且每个源文件中都包含 10000行代码,如果像上面那样仅用一条GCC命令来完成编译工作,那么GCC需要将每个源文件都重新编译一遍,然后再全部连接起来。很显然,这样浪费 的时间相当多,尤其是当用户只是修改了其中某一个文件的时候,完全没有必要将每个文件都重新编译一遍,因为很多已经生成的目标文件是不会改变的。要解决这 个问题,关键是要灵活运用GCC,同时还要借助像Make这样的工具。 

警告提示功能 

GCC包含完整的出错检查和警告提示功能,它们可以帮助Linux程序员写出更加专业和优美的代码。先来读读清单2所示的程序,这段代码写得很糟糕,仔细检查一下不难挑出很多毛病: 

◆main函数的返回值被声明为void,但实际上应该是int; 

◆使用了GNU语法扩展,即使用long long来声明64位整数,不符合ANSI/ISO C语言标准; 

◆main函数在终止前没有调用return语句。 

清单2:illcode.c 

#include 
void main(void) 

long long int var = 1; 
printf(”It is not standard C code!\n”); 

下面来看看GCC是如何帮助程序员来发现这些错误的。当GCC在编译不符合ANSI/ISO C语言标准的源代码时,如果加上了-pedantic选项,那么使用了扩展语法的地方将产生相应的警告信息: 

# gcc -pedantic illcode.c -o illcode 
illcode.c: In function `main’: 
illcode.c:9: ISO C89 does not support `long long’ 
illcode.c:8: return type of `main’ is not `int’ 

需 要注意的是,-pedantic编译选项并不能保证被编译程序与ANSI/ISO C标准的完全兼容,它仅仅只能用来帮助Linux程序员离这个目标越来越近。或者换句话说,-pedantic选项能够帮助程序员发现一些不符合 ANSI/ISO C标准的代码,但不是全部,事实上只有ANSI/ISO C语言标准中要求进行编译器诊断的那些情况,才有可能被GCC发现并提出警告。 

除了-pedantic之外,GCC还有一些其它编译选项也能够产生有用的警告信息。这些选项大多以-W开头,其中最有价值的当数-Wall了,使用它能够使GCC产生尽可能多的警告信息: 

# gcc -Wall illcode.c -o illcode 
illcode.c:8: warning: return type of `main’ is not `int’ 
illcode.c: In function `main’: 
illcode.c:9: warning: unused variable `var’ 

GCC给出的警告信息虽然从严格意义上说不能算作是错误,但却很可能成为错误的栖身之所。一个优秀的Linux程序员应该尽量避免产生警告信息,使自己的代码始终保持简洁、优美和健壮的特性。 

在 处理警告方面,另一个常用的编译选项是-Werror,它要求GCC将所有的警告当成错误进行处理,这在使用自动编译工具(如Make等)时非常有用。如 果编译时带上-Werror选项,那么GCC会在所有产生警告的地方停止编译,迫使程序员对自己的代码进行修改。只有当相应的警告信息消除时,才可能将编 译过程继续朝前推进。执行情况如下: 

# gcc -Wall -Werror illcode.c -o illcode 
cc1: warnings being treated as errors 
illcode.c:8: warning: return type of `main’ is not `int’ 
illcode.c: In function `main’: 
illcode.c:9: warning: unused variable `var’ 

对Linux程序员来讲,GCC给出的警告信息是很有价值的,它们不仅可以帮助程序员写出更加健壮的程序,而且还是跟踪和调试程序的有力工具。建议在用GCC编译源代码时始终带上-Wall选项,并把它逐渐培养成为一种习惯,这对找出常见的隐式编程错误很有帮助。 

库依赖 

在Linux 下开发软件时,完全不使用第三方函数库的情况是比较少见的,通常来讲都需要借助一个或多个函数库的支持才能够完成相应的功能。从程序员的角度看,函数库实 际上就是一些头文件(.h)和库文件(.so或者.a)的集合。虽然Linux下的大多数函数都默认将头文件放到/usr/include/目录下,而库 文件则放到/usr/lib/目录下,但并不是所有的情况都是这样。正因如此,GCC在编译时必须有自己的办法来查找所需要的头文件和库文件。 

GCC采用搜索目录的办法来查找所需要的文件,-I选项可以向GCC的头文件搜索路径中添加新的目录。例如,如果在/home/xiaowp/include/目录下有编译时所需要的头文件,为了让GCC能够顺利地找到它们,就可以使用-I选项: 

# gcc foo.c -I /home/xiaowp/include -o foo 

同样,如果使用了不在标准位置的库文件,那么可以通过-L选项向GCC的库文件搜索路径中添加新的目录。例如,如果在/home/xiaowp/lib/目录下有链接时所需要的库文件libfoo.so,为了让GCC能够顺利地找到它,可以使用下面的命令: 

# gcc foo.c -L /home/xiaowp/lib -lfoo -o foo 

值 得好好解释一下的是-l选项,它指示GCC去连接库文件libfoo.so。Linux下的库文件在命名时有一个约定,那就是应该以lib三个字母开头, 由于所有的库文件都遵循了同样的规范,因此在用-l选项指定链接的库文件名时可以省去lib三个字母,也就是说GCC在对-lfoo进行处理时,会自动去 链接名为libfoo.so的文件。 

Linux下的库文件分为两大类分别是动态链接库(通常以.so结尾)和静态链接库(通常以.a 结尾),两者的差别仅在程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。默认情况下,GCC在链接时优先使用动态链接库,只有当动态 链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库。例如,如果在 /home/xiaowp/lib/目录下有链接时所需要的库文件libfoo.so和libfoo.a,为了让GCC在链接时只用到静态链接库,可以使 用下面的命令: 

# gcc foo.c -L /home/xiaowp/lib -static -lfoo -o foo 

May 13, 2009

多用户wordpress暂时发布啦

分类: wordpress — 标签: — ykjsw @ 12:17 am

www.cn2e.com

博客系统是wordpress 2.71改装,网站系统是discuz5.5为框架改装,绑定了用户登陆,这样管理也方便一些。

暂时只有60多个模板,以后会慢慢加上的。

May 9, 2009

wordpress优化

分类: wordpress — 标签:, — ykjsw @ 5:07 am

多用户的wordpress博客系统改的差不多了,今天又加上了智能数据库缓存技术,极大的减少了数据库的查询次数,但又不会出现缓存更新不及时问题

wordpress消耗内存太大的问题也解决了,现在的程序,非常的敏捷。估计很快就能发布使用了。

上一页下一页

Powered by WordPress 中文站