Rath World » no-heading

Archive

Archive for the ‘no-heading’ Category

SyntaxHighlighter 테스트

February 15th, 2012 1 comment

무슨 깡으로 블로그에 SyntaxHighlighter 테스트를 하는지 모르겠으나, ANSI 컬러로 SQL colorize하는 소스코드를 붙여본다.

/*
 * Copyright (c) 1999-2012, Jang-Ho Hwang, rath@xrath.com.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer. Redistributions in
 * binary form must reproduce the above copyright notice, this list of
 * conditions and the following disclaimer in the documentation and/or
 * other materials provided with the distribution. Neither the name of the
 * Jang-Ho Hwang nor the names of its contributors may be used to endorse or
 * promote products derived from this software without specific prior written
 * permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */
package rath.adrenaline.tool.colorize;

import rath.adrenaline.pcre.MatchResult;
import rath.adrenaline.pcre.Pattern;
import rath.adrenaline.pcre.Replacer;
import rath.adrenaline.pcre.Substitution;
import rath.adrenaline.util.ANSI;

/**
 * Created by IntelliJ IDEA.
 * User: rath
 * Date: 21/01/2011
 * Time: 22:13
 */
public class SqlColorize {
	private static Pattern keywordsPattern = Pattern.compile(
		"\\b(SELECT|FROM|INSERT|INTO|VALUES|UPDATE|SET|DELETE|VALUES|WHERE|" +
		"LIKE|AND|ORDER BY|OR|GROUP BY|HAVING|UNION|LIMIT|USING|JOIN|OUTER|IS|NOT|ASC|DESC)\\b",
		Pattern.CASE_INSENSITIVE);
	private static Pattern constantPattern = Pattern.compile(
		"\\b([0-9]+|NULL|true|false)\\b", Pattern.CASE_INSENSITIVE
	);
	private static Pattern stringPattern = Pattern.compile("('[^']+')");
	private static Pattern functionPattern = Pattern.compile(
			"\\b(COUNT|CONCAT|LENGTH|LOWER|UPPER|SUBSTRING|TRIM|" +
					"ADDDATE|ADDTIME|CURDATE|NOW|DATE)\\b",
			Pattern.CASE_INSENSITIVE);

	private static Replacer keywordsReplacer = keywordsPattern.replacer(new Substitution() {
			public void append(MatchResult matchResult, StringBuilder buf) {
				String keyword = matchResult.group(1);
				buf.append(ANSI.CYAN_BOLD);
				buf.append(keyword);
				buf.append(ANSI.RESET);
			}
		});
	private static Replacer constantReplacer = constantPattern.replacer(new Substitution() {
		public void append(MatchResult matchResult, StringBuilder buf) {
			String constant = matchResult.group(1);
			buf.append(ANSI.GREEN);
			buf.append(constant);
			buf.append(ANSI.RESET);
		}
	});
	private static Replacer stringReplacer = stringPattern.replacer(new Substitution() {
		public void append(MatchResult matchResult, StringBuilder buf) {
			String constant = matchResult.group(1);
			buf.append(ANSI.MAGENTA);
			buf.append(constant);
			buf.append(ANSI.RESET);
		}
	});

	private static Replacer functionReplacer = functionPattern.replacer(new Substitution() {
		public void append(MatchResult matchResult, StringBuilder buf) {
			String constant = matchResult.group(1);
			buf.append(ANSI.YELLOW);
			buf.append(constant);
			buf.append(ANSI.RESET);
		}
	});

	public static String colorize(String sql) {
		sql = constantReplacer.replace(sql);
		sql = keywordsReplacer.replace(sql);
		sql = stringReplacer.replace(sql);
		sql = functionReplacer.replace(sql);
		return sql;
	}
}

워드프레스 LightWord 테마때문에 80 컬럼 안지킨거 딱 걸려서 테마설정 Layout settings => wider로 바꿨다.
Java에서는 120컬럼 정도가 어떠할지.

Categories: Daily, Development, no-heading Tags:

아이디어

February 12th, 2012 Comments off

아이디어는 특정 시점에 자연발생하여 전세계를 돌아다니며 자신의 존재를 알린다.

누가 이 아이디어와 주파수를 맞추면 아이디어는 여행을 멈추고 그 사람에게 붙어있다. 하지만 한순간이라도 그것들과 주파수가 틀려지면 그 아이디어는 그 사람을 떠나 다른 숙주를 찾아다닌다.

그러므로 어떤 아이디어가 떠올랐을 때 당장 진행할만큼 매력적이지 않다면 바로 잊어버리고 다른 일을 해라. 당신이 하지 않아도 누군가는 한다.

만약 어떤 아이디어가 자신을 완성해줄 대상을 오랜 시간동안 발견하지 못할 경우, 자신과 같은 처지에 놓인 다른 아이디어와 합쳐진 후 또 다시 여행을 시작한다.

아이디어가 없다는 생각이 들 때에는 그저 마음을 비우고 이들의 주파수에 채널을 맞추면 된다.

마음을 열고 있다면 기회는 지겹도록 온다. 아마 당신이 죽기직전까지 끊임없이 찾아올 것이다. 당신이 이 아이디어를 실현할 지력과 체력과 인내심이 있든 말든 계속 온다. 이 노래를 흥얼 거리며.

 

 

Categories: Daily, no-heading Tags:

머리속에 머물고 있는 문장들

February 27th, 2010 2 comments

마스터 요다의

괴테의

  • 서두르지 말고 그러나 쉬지 말고
  • 무지개도 15분 이상 떠 있으면 사람들은 눈길을 돌린다
  • 목표에 가까워질수록 어려움은 커진다
  • 생각없이 일을 하면 늘 도망갈 길만 찾아다니게 된다.
  • 자유도 생활도 그것을 매일매일 싸워 얻는 자만이 누릴 자격이 있다는 것

.

Categories: Daily, no-heading, Personal Tags: