Code && Riff

wp-Syntax支持的标签

每次写文章都要查一次,放到这里易于查阅:

<!--1,使用方法-->
<pre lang="bash">#这里省略千行代码 < /pre>
/**支持的所有标签**/
'actionscript' => array('as'),
'ada' => array('a', 'ada', 'adb', 'ads'),
'apache' => array('conf'),
'asm' => array('ash', 'asm', 'inc'),
'asp' => array('asp'),
'bash' => array('sh'),
'bf' => array('bf'),
'c' => array('c', 'h'),
'c_mac' => array('c', 'h'),
'caddcl' => array(),
'cadlisp' => array(),
'cdfg' => array('cdfg'),
'cobol' => array('cbl'),
'cpp' => array('cpp', 'hpp', 'C', 'H', 'CPP', 'HPP'),
'csharp' => array('cs'),
'css' => array('css'),
'd' => array('d'),
'delphi' => array('dpk', 'dpr', 'pp', 'pas'),
'diff' => array('diff', 'patch'),
'dos' => array('bat', 'cmd'),
'gettext' => array('po', 'pot'),
'gml' => array('gml'),
'gnuplot' => array('plt'),
'groovy' => array('groovy'),
'haskell' => array('hs'),
'html4strict' => array('html', 'htm'),
'ini' => array('ini', 'desktop'),
'java' => array('java'),
'javascript' => array('js'),
'klonec' => array('kl1'),
'klonecpp' => array('klx'),
'latex' => array('tex'),
'lisp' => array('lisp'),
'lua' => array('lua'),
'matlab' => array('m'),
'mpasm' => array(),
'mysql' => array('sql'),
'nsis' => array(),
'objc' => array(),
'oobas' => array(),
'oracle8' => array(),
'oracle10' => array(),
'pascal' => array('pas'),
'perl' => array('pl', 'pm'),
'php' => array('php', 'php5', 'phtml', 'phps'),
'povray' => array('pov'),
'providex' => array('pvc', 'pvx'),
'prolog' => array('pl'),
'python' => array('py'),
'qbasic' => array('bi'),
'reg' => array('reg'),
'ruby' => array('rb'),
'sas' => array('sas'),
'scala' => array('scala'),
'scheme' => array('scm'),
'scilab' => array('sci'),
'smalltalk' => array('st'),
'smarty' => array(),
'tcl' => array('tcl'),
'vb' => array('bas'),
'vbnet' => array(),
'visualfoxpro' => array(),
'whitespace' => array('ws'),
'xml' => array('xml', 'svg'),
'z80' => array('z80', 'asm', 'inc')

2010.07.29
标签:
分类目录:Others
No Comments

Win下批处理部署J2EE工程

前段时间需要弄一个自动安装J2EE工程的东西,想到用installanywhere,不过还想用更简单的方法,所以就用到了用批处理文件部署J2EE项目,用到的数据库为Mysql,原理很简单就是把注册Mysql服务、启动Tomcat、配置JAVA_HOME、配置PATH这些命令都堆到了一个bat文件下,原来一牛逼哥们儿已经实现了放到硬盘的固定目录下实现这样的功能,之后在本人的狗尾续貂下已经实现放到硬盘的任务目录都能执行,下边记录一下总过程:

1,文件准备,文件目录如下图:

Key documents

相信看到这几个文件都不会陌生,这几个文件的重点就在于startup.bat,这个文件中聚集了所有的命令,jdk就不说了;mysql为noinstall版本,数据库已经创建完毕,并且已经导入数据,如果noinstall-mysql还有疑问的话请参考本站的Mysql noinstall版本的配置和使用;tomcat的webapps下已经放置了将要部署的项目;index.html中的内容为:

<html>
  <head></head>
  <body>
    <script>window.location.href='http://localhost:8088/项目名称';</script>
  </body>
</html>
<!--不再赘述-->

2,startup.bat详解,一下是bat文件中的全部内容,注释中会说的更明白一点:

 
@echo off
rem echo off命令关闭命令在dos窗口中的显示,如果需要显示修改为echo on
rem @echo off行的上面最好空一行,因为测试发现如果它放到第一行的话有时候会失效

rem 以下两行代码的功能是获取当前路径,并把当前路径付给变量"INSTALL_HOME"
setlocal enabledelayedexpansion
set "INSTALL_HOME=%~dp0"

rem 以下三行代码的功能是清空mysql目录下my.ini中的内容,
rem 因为路径是可变的,所以需要修改my.ini中的内容,
rem 向文件中插入内容好像不是很容易实现,所以干脆全部清空,然后再向中写数据
for /f "delims=" %%i in ('dir/b "%INSTALL_HOME%\mysql\my.ini"') do call :del_ "%%i" 
goto :eof 
:del_ 

rem 以下N行代码的功能配置my.ini
>c:\tmp1.tmp (
	echo [WinMySQLAdmin] 
	echo Server=%INSTALL_HOME%\mysql\mysqld-nt.exe
	echo [mysqld] 
	echo basedir=%INSTALL_HOME%\mysql
	echo datadir=%INSTALL_HOME%\mysql\data
	echo [client]
	echo port		= 3306
	echo socket		= /tmp/mysql.sock
	echo default-character-set=utf8
	echo [mysqld]
	echo port		= 3306
	echo socket		= /tmp/mysql.sock
	echo skip-locking
	echo key_buffer = 16K
	echo max_allowed_packet = 12M
	echo table_cache = 4
	echo sort_buffer_size = 64K
	echo read_buffer_size = 256K
	echo read_rnd_buffer_size = 256K
	echo net_buffer_length = 2K
	echo thread_stack = 64K
	echo default-character-set=utf8
	echo default-storage-engine=innodb
	echo server-id	= 1
	echo [mysqldump]
	echo quick
	echo max_allowed_packet = 16M
	echo [mysql]
	echo no-auto-rehash
	echo [isamchk]
	echo key_buffer = 8M
	echo sort_buffer_size = 8M
	echo [myisamchk]
	echo key_buffer = 8M
	echo sort_buffer_size = 8M
	echo [mysqlhotcopy]
	echo interactive-timeout
)
for /f "tokens=* delims=" %%i in ('dir /b %INSTALL_HOME%\mysql\my.ini') do (
	copy c:\tmp1.tmp+"%INSTALL_HOME%\mysql\%%i" c:\tmp2.tmp /y >nul
	copy c:\tmp2.tmp "%INSTALL_HOME%\mysql\%%i" /y >nul
)
del c:\tmp1.tmp /f /q
del c:\tmp2.tmp /f /q

rem 设置PATH、CLASSPATH、CATALINA_HOME、JAVA_HOME,
rem 其中路径都是相对于“INSTALL_HOME”的,可见获取这个路径的重要性
set PATH=%INSTALL_HOME%\jdk\bin;%PATH%
set CLASSPATH=%INSTALL_HOME%\jdk\jre\lib\rt.jar;.
set CATALINA_HOME=%INSTALL_HOME%\tomcat
set JAVA_HOME=%INSTALL_HOME%\jdk

rem 在测试中得知sc命令有时候在运用时,需要依赖telnet服务,
rem 所以将telnet服务设置为自动并且启动它
sc config TlntSvr start= auto 
net start telnet

rem "noinstallmysql"是将要注册的mysql服务名称,
rem 所以安全起见不管机器上有没有这个服务,先停掉,然后再删掉
net stop noinstallmysql
sc delete noinstallmysql 

rem 注册mysql服务,名称为“noinstallmysql”
rem 以下两行在执行时请务必放到一行中,要不会执行出错
Call "%INSTALL_HOME%/mysql/bin/mysqld-nt" --install noinstallmysql 
                                  --defaults-file=%INSTALL_HOME%\mysql\my.ini

rem 配置mysql服务,设置为自动
sc config noinstallmysql start= auto

rem 启动mysql服务
net start noinstallmysql

rem 进入tomcat下的bin目录,启动它,大功告成!
cd %INSTALL_HOME%\tomcat\bin
call %INSTALL_HOME%\tomcat\bin\startup.bat

启动成功之后,还记得那个index.html吗,直接点击就可以进入你的项目,如果启动不成功的话自己调整一下或者mail给我一起交流都可以。E-mail:ripflowers@gmail.com,OK,下班走人。

2010.07.29
标签:
分类目录:Java, Others, Web
No Comments

儿子和女儿——解释器和编译器的区别与联系

转自:http://www.cnblogs.com/sword03/archive/2010/06/27/1766147.html

儿子和女儿——解释器和编译器的区别与联系

菜鸟经常将编译器和解释器弄混淆,无奈之下,于是向高手请教。

高手说:“解释器是一条一条的解释执行源语言。比如php,postscritp,javascript就是典型的解释性语言。编译器是把源代码整个编译成目标代码,执行时不在需要编译器,直接在支持目标代码的平台上运行,这样执行效率比解释执行快很多。比如C语言代码被编译成二进制代码(exe程序),在windows平台上执行。”

菜鸟说:“我还是不明白,能给个形象的比喻么?”

高手说:“给你讲个故事。”

母亲打电话给儿子说:“你爸最近身体不好,家里人少不热闹”。

儿子想,对啊,爸年纪大了,身体不好,买点牦牛骨髓壮骨粉不错,于是儿子就去超市买了牦牛骨髓壮骨粉。

儿子又想啊,最近黄金搭档很火,买点给爸试试。于是儿子又去买了黄金搭档。

从超市回来后,儿子又寻思母亲说的“家里不热闹”,嗯,家里的小皇帝自从上寄宿学校后就比较少回来,估计是老人家想孙子了。儿子于是给上高中的儿子打了个电话,让他周末回来看看。

母亲打电话给女儿说:“你爸最近身体不好,家里人少不热闹”。

女儿就想,应该给爸做点什么呢?于是她拿出张纸开始罗列条目,先写上了壮骨粉和黄金搭档。然后,想着让老人家看看外孙应该不错,于是就在纸上加上了一句,一家人回爸妈那里看望看望。最后纸上就写着:

1.壮骨粉和黄金搭档

2.一家人去看望爸妈

女儿见到女婿后,就将这张纸上的信息编成短信发给了工作的女婿。

女婿一看就明白了,下班后先去超市买了补品,然后开车回家带着妻儿就去看望岳父岳母了。

想到什么了吗?

菜鸟说:

我这样说不知道对不对:儿子就像是解释器,是想到一点做一点。女儿就像编译器,女婿就像平台,女儿听完后,在纸上罗列出所有要做的事情,女婿就按着指示办事了。

高手说:

就是这样的。儿子对于母亲的话是一条一条执行,女儿是将母亲的话整个翻译成平台能理解的目标语言–短信,整个由女婿直接执行。后者的执行效率会更高。

从功能上看,解释器和编译器确实不一样。

然而,从流程和结构上看,二者却非常相似。

儿子和女儿听到母亲的话以后,都是从两个方面来思考:老人的身体和老人对小辈的思念。以此为据,儿子和女儿都做出了自己的决定。只不过一个直接去做了,另一个却将所要做的事情翻译成另一种载体–短信–给存储起来。

解释器和编译器也是如此,读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)。如下图所示:
解释器和编译器的区别和联系
总之,解析器和编译器它们在功能上是不一样的,然而从结构上看却有诸多相同,而且在开发时也并没有本质上的差别,这也是很多人将二者混淆的原因之一。究竟是开发解析器还是编译器?只需要依据功能上的实际需要来做出决定就ok了。

2010.07.12
标签:
分类目录:Others
No Comments

Sql中split方法实现

sqlserver中好像没有分割字符串的函数,G哥告诉我,可以自定义,以下内容为抄袭,做个笔记。
第一个是根据下标返回分割结果集中的一个:

--用法:dbo.split(‘要分割的字符串’,’分隔字符’,返回结果集中第几个)
--如果没有分隔的字符(第二个参数),则返回整个“要分割的字符串”。
--如果取出的位置超出结果集的下标则返回空。
 
CREATE FUNCTION [dbo].[split]
 (@str nvarchar(4000),@code varchar(10),@no int )  
RETURNS varchar(200)
AS  
BEGIN 
 
declare @intLen int
declare @count int
declare @indexb  int
declare @indexe  int
SET @intLen=len(@code)
SET @count=0
SET @indexb=1
 
IF @no=0
  IF charindex(@code,@str,@indexb)<>0
     RETURN LEFT(@str,charindex(@code,@str,@indexb)-1) 
  else
     RETURN @str
 
while charindex(@code,@str,@indexb)<>0
  begin
       SET @count=@count+1
       IF @count=@no
         break
       SET @indexb=@intLen+charindex(@code,@str,@indexb)
  end 
 
IF @count=@no
  begin
 
     SET @indexe=@intLen+charindex(@code,@str,@indexb)
	IF charindex(@code,@str,@indexe)<>0
	    RETURN substring(@str,
	    charindex(@code,@str,@indexb)+len(@code),
	    charindex(@code,@str,@indexe)-charindex(@code,@str,@indexb)-len(@code))
	else 
	    RETURN RIGHT(@str,len(@str)-charindex(@code,@str,@indexb)-len(@code)+1)
 
  end
 
RETURN ''
 
END

第二个是返回分割后的结果集:

--支持分割符多字节 
--使用方法  
--select * from dbo.split('abc-def-ghi-jkl','-')    
--select * from dbo.split('abc----def----ghi----jkl','----')    
 
ALTER FUNCTION [dbo].[split](@Long_str varchar(8000),@split_str varchar(100))    
RETURNS  @tmp TABLE(        
    ID int IDENTITY PRIMARY KEY,      
    short_str varchar(8000)    
)    
AS   
BEGIN   
    DECLARE @long_str_Tmp varchar(8000),
			@short_str varchar(8000),
			@split_str_length int   
 
    SET @split_str_length = LEN(@split_str)    
 
    IF CHARINDEX(@split_str,@Long_str)=1 
         SET @long_str_Tmp=SUBSTRING(@Long_str,
					@split_str_length+1,
					LEN(@Long_str)-@split_str_length)
 
    ELSE
         SET @long_str_Tmp=@Long_str
 
    IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1    
        SET @long_str_Tmp=@long_str_Tmp+@split_str    
    ELSE   
        SET @long_str_Tmp=@long_str_Tmp    
 
    WHILE CHARINDEX(@split_str,@long_str_Tmp)>0    
        BEGIN   
            SET @short_str=SUBSTRING(@long_str_Tmp,1,
					CHARINDEX(@split_str,@long_str_Tmp)-1)    
            DECLARE @long_str_Tmp_LEN INT,@split_str_Position_END int   
            SET @long_str_Tmp_LEN = LEN(@long_str_Tmp)    
            SET @split_str_Position_END = LEN(@short_str)+@split_str_length    
            SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,
					@long_str_Tmp_LEN-@split_str_Position_END))
            IF @short_str<>'' INSERT INTO @tmp SELECT @short_str    
        END   
    RETURN     
END
2010.06.21
标签:
分类目录:Others
No Comments

Sql中触发器和游标的使用

这里说的触发器和游标的使用在sqlserver2000和sqlserver2005中测试通过,鄙人认为触发器也算是一种存储过程,触发器是在数据库中自动触发,而存储过程需要的程序中调用,语法和用法上来说应该是大同小异的,对sql的功底不深,请恕在下在此妄加猜测,直接看代码和注释。

CREATE TRIGGER whenUpdate---触发器的名称
  ON tableName--为表“tableName”创建触发器
  FOR UPDATE--为什么事件触发,这里当然就可以是增删改等操作了
  AS        
	begin ----------下边开始触发器要干的事情
		Declare @cbid float-------声明的变量
		Declare @cask float-------声明的变量
		Declare @ctype varchar(20)--声明的变量
		---下边三行代码代表了为三个变量赋值,
		---这里要理解触发器里面的两个临时的表:Deleted , Inserted 。
		---Deleted 与Inserted分别代表
		---“tableName”表中“旧的一条记录” 和“新的一条记录”。	
		SET @ctype = (SELECT currencytype FROM Inserted)
		SET @cbid = (SELECT fex_bid FROM Inserted)
		SET @cask = (SELECT fex_ask FROM Inserted)
 
		Declare @sid numeric----------声明的变量
		Declare @coinType varchar(255)----------声明的变量
		--声明游标,cur为游标的名称
		Declare cur Cursor FOR 
			----这里就是查询一个表中的数据,然后将结果集给游标
			SELECT id AS id,coinType AS coinType
					FROM shoutorder 
					WHERE 1=1
			Open cur--打开游标,开始循环
			--首先需要手动开始循环游标,
			--并将上边查询结果集中的两个值分别赋给@sid和@coinType,
			--主要这里的赋值是按查询字段的顺序赋值
			Fetch next FROM cur INTO @sid,@coinType
			--------------循环体begin---------------
			While @@fetch_status=0 
				Begin 
					---这里可有一些想要的操作判断等
					---if和else的写法
					IF (@sid = 3 AND @coinType = 0)
						begin 
							UPDATE......--这里省略很多操作
						end 
					else IF()
						begin 
 
						end
					--下标下移
					Fetch Next FROM cur INTO @sid,@coinType
				End 
			--------------循环体end-----------------	
		Close cur --关闭游标
		--由于游标的机制是将数据全部加载到内存中然后才操作,
		--这里请务必释放游标
		Deallocate cur
	end
2010.06.02
标签: ,,
分类目录:Java, Others
1 Comment

Sql中获取数据库中最近几分钟数据

获取数据库中最近的几分钟数据,或者是最近几小时,或者是几秒钟的数据……….

图中查询的时候最近三分钟的数据,参数“n”代表分钟,如果说还有别的需求,比如说不按分钟查,或者是…..,如下参数供参考:

日期部分                       缩写
year   yy,                      yyyy
quarter   qq,               q
Month   mm,              m
dayofyear   dy,          y
Day   dd,                      d
Week   wk,                   ww
Hour                            hh
minute   mi,                 n
second   ss,                  s
millisecond                 ms

2010.05.26
标签: ,
分类目录:Java, Others, Web
No Comments

Sql中的排名算法

sqlserver2005中有现成的排名函数,而2000中则还没有,用以下方法实现

select balance as balance,(select count(*)+1 from member a where a.balance>b.balance) as rank from member b order by rank asc;

附图:

2010.05.26
标签: ,
分类目录:Others
No Comments

ubuntu10.04 ATI显卡延时

装好10.04之后,发现开源的ATI显卡驱动支持不是很好。花屏严重,正好等到AMD出了ATI10.4的驱动,支持Xorg7.5.可是 最小化最大化的延时bug依然。

好在在ubuntu论坛中找到了解决方案,和9.04一样。需要给X打个补丁。

首先将已经安装的官方ATI驱动或者开源驱动卸载(确保卸载后再进行此操作)。
然后,添加源并更新系统:

sudo add-apt-repository ppa:info-g-com/xserver-xorg-1.7.6-gc
sudo apt-get update && sudo apt-get upgrade

更新后重启,然后安装ATI显卡驱动,再重启。延时问题已经解决。

2010.05.22
标签: ,
分类目录:Linux
2 Comments