22 Ноябрь, 2009

syntax highlighter

Источник.

Для подсветки синтаксиса можно использовать SyntaxHighlighter, который поддерживает различные языки и темы.


Добавим в <head> тег нашего html шаблона следующее:

<!-- Add-in CSS for syntax highlighting -->
<link href='http://alexgorbatchev.com/pub/sh/2.1.364/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/2.1.364/styles/shThemeRDark.css' rel='stylesheet' type='text/css'/>
<!-- Add-in Script for syntax highlighting -->
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shCore.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushAS3.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushBash.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCSharp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushColdFusion.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCpp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCss.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushDiff.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushErlang.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushGroovy.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushJava.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushJavaFX.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPerl.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPlain.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPowerShell.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPython.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushRuby.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushScala.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushSql.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushVb.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushXml.js' type='text/javascript'/>
<script language='javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/2.1.364/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>
<!-- End code hilight -->


Использовать данную библиотеку можно следующим образом.

Используя специальный тег <script> с окаймлением CDATA:

<script type="syntaxhighlighter" class="brush: html"><![CDATA[
<html>
<head>
<title>Carter Tomorrow Fund Donations</title>
<meta name="title" content="Help Give to the Carter Tomorrow Fund" />
<meta name="description" content="Show your support and help out with a small gift"
]]></script>

или при помощи тега <pre> с символами экранированными для html:


<pre class="brush: html">
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Carter Tomorrow Fund Donations&lt;/title&gt;
&lt;meta name="title" content="Help Give to the Carter Tomorrow Fund" /&gt;
&lt;meta name="description" content="Show your support and help out with a small gift"
</pre>


17 Ноябрь, 2009

family

-Что нужно чтобы быть счастливыми родителями?
-Чувство юмора!

из какой-то книги...

16 Ноябрь, 2009

tomcat and log4j

http://tomcat.apache.org/tomcat-6.0-doc/logging.html
http://wiki.apache.org/logging-log4j/Log4jXmlFormat

  1. Create a file called log4j.xml or log4j.properties and save it into $CATALINA_HOME/lib
  2. Download Log4J (v1.2 or later) and place the log4j jar in $CATALINA_HOME/lib
  3. Download the additional logging components. See the extras components documentation for details - http://tomcat.apache.org/tomcat-6.0-doc/extras.html - (http://www.sai.msu.su/apache/tomcat/tomcat-6/v6.0.20/bin/extras/tomcat-juli.jar,
  4. http://www.sai.msu.su/apache/tomcat/tomcat-6/v6.0.20/bin/extras/tomcat-juli-adapters.jar)
  5. Replace $CATALINA_HOME/bin/tomcat-juli.jar with extras/tomcat-juli.jar.
  6. Place extras/tomcat-juli-adapters.jar in $CATALINA_HOME/lib.
  7. Start Tomcat





log4j.xml


log4j.properties

#log4j.rootLogger=debug, stdout, R, E
log4j.rootLogger=info, stdout, R, E

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.encoding=UTF-8
log4j.appender.stdout.MaxBackupIndex=10
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%c] - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/tomcat.log
log4j.appender.R.encoding=UTF-8
log4j.appender.R.MaxFileSize=20MB
log4j.appender.R.MaxBackupIndex=50
#log4j.appender.R.appender=true
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %-5p [%t] [%c{1}] - %m%n

log4j.appender.E=org.apache.log4j.RollingFileAppender
log4j.appender.E.File=${catalina.home}/logs/error.log
log4j.appender.E.encoding=UTF-8
log4j.appender.E.Threshold = error
log4j.appender.E.MaxFileSize=10MB
log4j.appender.E.MaxBackupIndex=10
#log4j.appender.E.appender=true
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern=%d %-5p [%t] [%c{1}] - %m%n

log4j.logger.org.apache.catalina=info, R
#log4j.logger.org.apache.catalina.core=DEBUG, R
#log4j.logger.org.apache.catalina.session=DEBUG, R


Tomcat 6 defines loggers by Engine and Host names. For example, for a default Catalina localhost log.

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R

Note that there are known issues with using this naming convention (with square brackets) in log4j XML based configuration files, so we recommend you use a properties file as described until a future version of log4j allows this convention.

groovy sql


def sql(url,user,passqord,driver,yield){
Sql s = Sql.newInstance(url, user, password, driver)
s.connection.autoCommit = false
try {
yield(s)
s.commit()
}
catch (Exception e) {
s.rollback()
throw e
}
finally {
s?.connection.close()
}
}



def connectionString = '::'
sql("jdbc:oracle:thin:@${connectionString}",'user', 'password','oracle.jdbc.OracleDriver') { sql ->
sql.execute("insert into qwerty(id,field1,field2) values(my_seq.nextval,?,?)",[val2,val3])

sql.eachRow("select * from my_table") { println it }
sql.eachRow("select * from my_table") { println it.field1 }

def values = []
values << Sql.DATE(new java.sql.Date(System.currentTimeMillis()))
values << Sql.TIME(new java.sql.Date(System.currentTimeMillis()))
values << Sql.TIMESTAMP(new java.sql.Timestamp(System.currentTimeMillis()))
values << 'long string'
values << Sql.DECIMAL //add out parameter
long id;
sql.call("""begin
insert into qwerty(id,field_date,field_date,field_time,field_timestamp,field_clob) values(my_seq.nextval,?,?,?,?) return id into ?;
end;""",values) {
id = it
println "id = ${id}"
}

def str = """call my_package.my_procedure(
? /*p_param1 in number*/
,? /*p_param2 in out number*/
,? /*p_param3 varchar2*/
)""".replaceAll(/\s+/, ' ')
def params = [
123 /*p_param1 in number*/
,Sql.inout(Sql.DECIMAL(null)) /*p_param2 in out number*/
,'my string' /*p_param3 varchar2*/
]
println "param in out befor call = ${params[1]}"
sql.call(str, params)
println "param in out after call = ${params[1]}"
}


//generate ddl script for insert
def insertRowDDL(tableName, fieldsMap) {
def into = fieldsMap.keySet().toList().join(',')
def str = (["?,"]*fieldsMap.size()).join()[0..-2]
str = "insert into ${tableName}(${into}) values(${str})"
}


//create row and get id, if id auto generated by trigger, for example
def createRowAndGetId(Sql sql, tableName, fieldsMap, idFieldName) {
def str = insertRowDDL(tableName, fieldsMap)
def values = fieldsMap.values().toList()
values << Sql.DECIMAL //add out parameter
str = """begin
${str} return ${idFieldName} into ?;
end;"""
long res = 0;
try {
sql.call(str,values) { res = it }
} finally { }
return res
}


def fieldsMap = [:]
fieldsMap.field1=val1
fieldsMap.field2=val2
fieldsMap.field_time=Sql.TIME(new java.sql.Date(System.currentTimeMillis()))
fieldsMap.field_clob='long string'
println createRowAndGetId(sql, 'qwerty', fieldsMap, 'id')