<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss version="2.0">
	<channel>
		<title>lifthrasiir, shoveling age is coming</title>
		<link>http://lifthrasiir.tistory.com/</link>
		<description>"where is my shovel?"</description>
		<language>ko</language>
		<pubDate>Fri, 05 Dec 2008 09:12:55 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/tokigun/blog" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
			<title>그냥...</title>
			<link>http://lifthrasiir.tistory.com/43</link>
			<description>원래는 이 블로그 버려 놓고 새로 만들던지 뭔가 하려고 했는데 귀찮네요. 아무 생각 없이 조금씩 생각을 뱉어 내는 장소로 임시로 쓸 생각입니다.&lt;br /&gt;&lt;br /&gt;&lt;p id="more43_0" class="moreless_fold"&gt;&lt;span style="cursor: pointer;" onclick="toggleMoreLess(this, '43_0','more..','less..'); return false;"&gt;more..&lt;/span&gt;&lt;/p&gt;&lt;div id="content43_0" class="moreless_content" style="display: none;"&gt;여기부터는 개인적인 얘기. 안 읽으셔도 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;저를 아시는 많은 분께서는 제가 토끼군이라는 이름을 버리려고 한다는 걸 아실 겁니다. 네, 정확히 버린다는 소리는 아닙니다. 이미 몇 년 동안 쓴 이름을 완전히 버릴 수는 없겠지만, 적어도 "아는 사람이 토끼(군)라고 부르는 건 막자"는 생각은 가지고 있습니다. 왜냐 하면...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;토끼군이라는 이름은 고유명사보다는 일반명사로 인식되기 쉽습니다. 덕분에 그로 인한 폐해가 만만치 않았습니다. (예: y 모 님의 3초 발언)&lt;/li&gt;&lt;li&gt;-군 접미사는 슬슬 뗄 때도 되지 않았나 싶기도 해서...&lt;/li&gt;&lt;li&gt;로마자 표기가 약간 왔다 갔다 합니다. 현재의 tokigun이라는 로마자 표기는 ㄲ를 ㅋ와 비슷한 소릿값을 쓰는 걸로 치고 있지만 종종 tokkigun이라는 표기도 등장하죠.&lt;/li&gt;&lt;/ul&gt;이런 이유로 웬만하면 토끼군이라고 부르지 마시고 lifthrasiir라고 불러 주시면 좋겠습니다. 발음은 공지에 쓰여 있습니다. (tokigun이라는 이름은 계속 쓰겠습니다만 주로 소프트웨어 개발에서만 사용할 것 같습니다.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;최근 한 달 동안 매우 바쁜 나날을 보냈습니다. 어쩌다 보니 이번 학기에는 21학점을 듣고, 몸은 완전히 떡이 되었고 (한 달의 1/3을 밤 샜으니) 외부 프로젝트와 숙제와 동아리 프로젝트가 어우러져서 정신이 없었습니다. 원래 목표는 방학 중에 이런 것들 다 끝내 놓는 거였는데, 피치 못한 사정(=게으름)으로 방학 중에 끝내는 건 실패하고 학기 중으로 미뤄지는 바람에 이런 문제가 생겼습니다. 안 좋네요.&lt;br /&gt;&lt;br /&gt;몸 상태 덕분에 쓸데 없이 비관적으로 되었습니다. 먼 옛날부터 생각해 오던 것이 최근 몇 년간의 일련의 사건으로 구체화되는 느낌입니다. 가장 가까운 것으로 한미 FTA가 있군요. 찬성하는 자들과 반대하는 자들의 주장, 퍼포먼스(행동도 아니야 이건), 삽질, 등등을 다 합하면 연작 뮤지컬들을 보는 느낌입니다.&lt;br /&gt;&lt;br /&gt;이 뮤지컬이라는 건 인간의 궁극적인 문제로부터 출발합니다. (귀찮아서 설명은 생략. 필요하면 나중에 제가 시간이 남아 돈다고 생각될 때 설명을 부탁하시면 됩니다.) 제 개인적인 생각은 이 문제가 해결되지 않으면 인간은 멸망한다는 겁니다. 하, 자기 자신의 문제도 해결하지 못 하는 인간이 드넓은 우주로 나가고 천 년, 만 년 후를 생각한다니! 제가 옛날에 봤던 천문학 교재에는 "(전략) ...이러한 것들은 지구에 진정 지능을 가진 생명체가 존재하는지에 대한 테스트가 될 것이다."라는 얘기가 맨 뒤에 쓰여 있는데 보나마나 실패합니다.&lt;br /&gt;&lt;br /&gt;그럼에도 불구하고 제가 이 세상을 살아 가는 이유는 저는 광역적으로는 비관론자지만 지역적으로는 낙관론자이기 때문입니다. 세상이 전체적으로 망해 간다 하더라도 내 주변, 내가 관심 있는 분야가 발전을 할 수 있다면 저는 뭐 딱히 세상을 하직할 이유가 없습니다. 그런 지역적인 발전이 광역적으로 '현상 유지'라도 하는 데 도움을 줄 수 있다면, 그건 그거 나름대로 가치가 있다고 생각합니다. 지금까지 그렇게 살아 왔던 것 같습니다.&lt;br /&gt;&lt;br /&gt;오랜만의 헛소리도 재밌군요.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;앞에서 말했던 이유로 tokigun.net은 곧 사라지거나 다른 도메인으로 포워딩될 예정입니다. sapzil.info에 있던 모든 서브도메인들은 곧 제 서버로 모두 이전될 예정입니다. (시간이 없어서 못 하고 있네요.)&lt;br /&gt;&lt;br /&gt;토끼군 작업실은 올해 2월인가를 종점으로 묻을 닫았습니다. 사실 하는 일도 없긴 하지만 굳이 "작업실"이라는 이름을 붙일 만큼 큰 것도 아니라서... (보신 분은 아시겠지만 옛날에 제가 짠 코드에는 TokigunStudio blah 식으로 이름이 붙은 것도 있습니다.) 새 도메인은 전적으로 사이트 이름에만 영향을 줄 것입니다.&lt;br /&gt;&lt;br /&gt;위키백과, 위키백과, 위키백과. 네 이거 해야 합니다. 이건 제가 생각하는 지역적인 발전에 있어서 매우 스케일이 크고 안 할 이유가 별로 없는 프로젝트인데, 이상하게 요즘은 시간도 없고 기운도 없습니다. 그래서 당분간은 (정확히는 작년 12월부터 쭉...) 안 합니다. 방학 중에 할 일이 완전히 사라진 때가 되면 다시 회복을 하려고 노력하겠습니다. 아직 제가 해야 할 일은 많으니까요.&lt;br /&gt;&lt;br /&gt;방학 중에 여행을 다녀 올 생각입니다. 돈이 없어서 -- 저는 학교 장학금만으로 등록금 및 거의 모든 생활비를 충당하고 있습니다. -- 해외 여행은 무리고, 우리나라 구석 구석 돌아다니면서 견문을 넓혀 볼 생각입니다. 기분 전환도 하고요.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;제가 구상했던 프로그램 중에는 블로그가 없습니다. (수정과 태터툴즈는 제가 구상한 게 아니라 이미 있던 거에 참여하기 시작한 거니까 논외.) 블로그'만'으로는 새로울 게 없다는 생각에서였습니다. 비록 블로그가 일반적인 홈페이지와 구별되는 특징을 여럿 가지고 있으며, 그로 인한 네트워크가 생긴다는 면에서는 충분히 notable합니다만, 그럼에도 불구하고 궁극적인 방향에서는 아직 먼 것 같습니다. 블로그에 뭔가가 더 필요합니다.&lt;br /&gt;&lt;br /&gt;스프링노트는 기술적인 면에서는 (제가 하려는 게 일부 포함되어 있기도 했기 때문에) 매우 흥미롭습니다만 이런 의미에서는 크게 흥미롭지 않다고 봅니다. 아, 근데 제 OpenID로는 스프링노트 가입이 되지 않는군요. 기술적인 면을 좀 테스트해 보려고 했는데 계속 로그인만 하라는군요. myid만 되나? 어쩌라고. (스프링노트 개발자 분들께서는 이 헛소리는 무시하셔도 됩니다. 아마 제가 OpenID 구현을 잘못 선택한 거겠죠 뭐.)&lt;br /&gt;&lt;br /&gt;블로그가 시간축, 위키가 공간축을 강조했다면, 제가 구상했던 (가장 이상향에 가까운) 프로그램은 시간축과 공간축을 함께 활용하는 것이었습니다. 사용자는 이 네트워크를 바라보는 여러 관점(view)이 있습니다. 예를 들어서 단순히 일정만을 기록하는 것이라면 시간축이 강조됩니다. 그런데 이것만으로는 부족하다는 생각이 계속 들고 있습니다. 내가 만들려는 시스템이 블로그와 위키를 섞은 것과 비교했을 때 뭐가 더 좋은가? 하는 생각이 들죠. 공간축보다 더 높은 단계가 있을까? 있다면 무엇이 있을까? 라는 생각을 제 자신에게 계속 하고 있습니다.&lt;br /&gt;&lt;br /&gt;아시면 연락 주세요. 어쩌면 이 문제는 &lt;a href="http://forest.nubimaru.com/" target="_blank"&gt;물리학도&lt;/a&gt;에게 질문해야 할 문제일 지도 모릅니다. (웃음)&lt;br /&gt;&lt;br /&gt;덤: 아시는 분은 아시겠지만 태터툴즈 개발진들도 같은 생각을 하고 있습니다. 태터툴즈의 궁극적인 목표는 블로그가 아닐 수도 있습니다. 세상에는 참 통하는 게 많죠.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;하루에 몇 시간 누워서 자고 몇 시간동안 낮잠을 자면 좋을 지 조언 부탁합니다.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;</description>
			<author>lifthrasiir</author>
			<guid>http://lifthrasiir.tistory.com/43</guid>
			<comments>http://lifthrasiir.tistory.com/43#entry43comment</comments>
			<pubDate>Wed, 04 Apr 2007 08:35:43 +0900</pubDate>
		</item>
		<item>
			<title>새해 복 많이 받으세요.</title>
			<link>http://lifthrasiir.tistory.com/42</link>
			<description>블로그를 다시 시작하는 건 아닙니다만, 이 피드를 아직도(?) 보고 계실 분들을 위해서 씁니다. 새해 복 많이 받으세요. 안 그러면 제가 패서라도 많이 받게 할 겁니다. :)&lt;br /&gt;&lt;br /&gt;토끼군 작업실은 2007년에도 열심히 삽질을 할 예정입니다. 많이 기대해 주세요.&lt;br /&gt;&lt;br /&gt;2007년 1월 1일...에서 몇 분 전에&lt;br /&gt;토끼군 강 성훈&lt;br /&gt;</description>
			<category>잡다</category>
			<author>lifthrasiir</author>
			<guid>http://lifthrasiir.tistory.com/42</guid>
			<comments>http://lifthrasiir.tistory.com/42#entry42comment</comments>
			<pubDate>Mon, 01 Jan 2007 00:00:00 +0900</pubDate>
		</item>
		<item>
			<title>죄송합니다</title>
			<link>http://lifthrasiir.tistory.com/41</link>
			<description>기다려주신 여러 분들께 죄송합니다. 언젠가는 다시 돌아 오겠습니다.&lt;br /&gt;
</description>
			<author>lifthrasiir</author>
			<guid>http://lifthrasiir.tistory.com/41</guid>
			<comments>http://lifthrasiir.tistory.com/41#entry41comment</comments>
			<pubDate>Wed, 06 Dec 2006 20:28:01 +0900</pubDate>
		</item>
		<item>
			<title>피곤하네</title>
			<link>http://lifthrasiir.tistory.com/40</link>
			<description>최근 한 주동안 바빴다... 서울에 나흘동안 다녀 온 것도 있었고, 상당한 수준의 슬럼프에 빠져서 할 일들의 진행이 매우 더뎠다. 정리하자면,&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;리처드 스톨만 강연회에 다녀 왔다. &lt;a href="http://gallery.kldp.org/albums/rms06/IMG_8801.jpg"&gt;사진&lt;/a&gt;을 찍혔는데, 튀려고 한 건 아니었고 단지 사진의 폭을 너무 작게 생각하고 위로 올라가야 겠다는 생각을 한 것 뿐이다. orz&lt;/li&gt;&lt;li&gt;r/k/p/n/s/c 도합 여섯 명과 함께 밥을 먹고 보드 게임을 했다. 로보 77에 3의 배수 금지하는 규칙을 넣어서 한 게 가장 골때렸다. (소음이 매우 심했기 때문에 다른 팀에 충분한 민폐를 끼쳤을 것이다.)&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;위에 나온 사람 중 n/s 두 사람과 함께 하룻밤을 잤다. 일명 움집이라 하는 고시원 방에서 다양한 헛소리를 나누고 라면과 드림카카오를 무단 흡입했다.&lt;/li&gt;&lt;li&gt;이틀동안 외박을 한 댓가로 몸 상태가 매우 악화된 가운데 새마을호를 타고 학교로 돌아 왔다.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;전산과 신환회에 가서 저녁밥을 때웠다. 내 정체를 아는 사람이 있어서 당황했다. (먼산)&lt;/li&gt;&lt;li&gt;각각 같은 날 자정, 9시, 10시 반, 1시가 기한인 네 개의 숙제를 하느라 밤을 샜다. 몸 상태가 매우 안 좋았기 때문에 하나는 쨌다.&lt;/li&gt;&lt;li&gt;그 직후 24시간 안에 15시간 자서 정신이 파탄났다.&lt;/li&gt;&lt;/ul&gt;이런 정신을 안정시켜 주는 데는 역시 &lt;a href="http://www.skysummer.com/186"&gt;음악&lt;/a&gt;이 딱인 것 같다. 쓸데 없이 기다려 주신 몇몇 분들께 죄송하며, 내일 매우 기술적인 글을 써 보려고 한다. IRC에서 나온 얘기를 바탕으로 할 생각인데 관심 있으신 분들이라면 흥미를 가질 만한 주제이다. :)&lt;br /&gt;
&lt;br /&gt;
아래 글은 관계된 분(특히 아이피가 223.131로 끝나는...)만 읽어 주시라.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228)"&gt;별 관계 없는 &lt;a href="http://lifthrasiir.tistory.com/7"&gt;어떤 글&lt;/a&gt;에 답글을 달아 주신 모 분께, 귀하의 댓글은 다음과 같은 사유로 삭제되었음을 알립니다.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;어떤 특정한 글에 대한 의견이 아닌 일반적인 글을 쓸 때는 방명록이나 이메일이라는 좋은 수단을 쓸 수 있습니다.&lt;/li&gt;&lt;li&gt;"궁금이" 류의 이름은 보는 사람에게 성의 없다는 느낌을 주기에 충분합니다. 자신이 누구인지를 밝힐 수 있는 최소한 정보라도 주는 것이 답변을 할 마음을 만드는 데 좋습니다.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;위법이 될 가능성이 있는 일을 공개적으로 물어 보는 것 또한 무례할 수 있습니다. (아까 말한 이메일이라는 좋은 수단을 쓸 수 있습니다.)&lt;/li&gt;&lt;li&gt;답장할 메일 주소나 방법이 없다면 아무리 답변할 마음이 있어도 어디에 답변해야 할 지 매우 곤란합니다.&lt;/li&gt;&lt;li&gt;결정적으로 요청을 들어 주기 귀찮습니다.&lt;br /&gt;
&lt;/li&gt;&lt;/ol&gt;이 블로그에 답글을 달아 주셔서 고맙습니다만, 앞으로는 이러한 사항을 주의하셔서 글을 써 주시길 부탁합니다. 감사합니다.&lt;/div&gt;</description>
			<category>잡다</category>
			<category>일상</category>
			<category>주말</category>
			<author>lifthrasiir</author>
			<guid>http://lifthrasiir.tistory.com/40</guid>
			<comments>http://lifthrasiir.tistory.com/40#entry40comment</comments>
			<pubDate>Fri, 24 Nov 2006 20:57:48 +0900</pubDate>
		</item>
		<item>
			<title>자정을 나타내는 몇 가지 방법</title>
			<link>http://lifthrasiir.tistory.com/39</link>
			<description>나흘동안 서울 다녀 오고 나서 (덕분에 블로그를 쉬었는데, 그 얘기는 나중에...) 돌아 오고 나니 숙제가 산더미다. 요즘은 전자 우편 제출이 많아지면서 숙제를 내는 기한이 보통 자정으로 되어 있는 경우가 많은데, 문제는 이 '자정'이라는 시각이 의외로 모호하다는 점이다.&lt;br /&gt;
&lt;br /&gt;
자정을 나타내는 몇 가지 방법 중 내가 본 것들만 나열해 보자. 예를 들어서, 오늘의 끝(11/22 00:00 KST)을 나타낼 때는 다음과 같은 방법이 있다.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;11월 22일 자정&lt;/li&gt;&lt;li&gt;11월 22일 00:00&lt;/li&gt;&lt;li&gt;11월 21일 24:00&lt;/li&gt;&lt;li&gt;11월 22일 24:00&lt;/li&gt;&lt;li&gt;11월 21일과 22일 사이의 자정&lt;/li&gt;&lt;li&gt;11월 21일 23:59:59&lt;/li&gt;&lt;li&gt;11월 21일까지 ('자정'이라는 표현이 암묵적으로 포함됨)&lt;/li&gt;&lt;li&gt;11월 22일까지 (위와 동일)&lt;/li&gt;&lt;/ol&gt;설마 하실 분도 계시겠지만 사실 나는 위의 여덟 가지 표현을 모두 적어도 한 번씩 봤다. 언뜻 보기에 3번과 4번은 절대로 같은 시각을 나타낼 수 없을 것 같아 보이지만, 사람들마다 24:00을 00:00과 완전히 같은 뜻으로 쓰는 사람들도 있다. 이 덕분에 2번과 1번 표현도 사람들을 혼동시키기에 충분하고, 7번이나 8번 또한 끝점이 명확하지 않아서 혼란을 가중시킨다.&lt;br /&gt;
&lt;br /&gt;
이런 다양한 문제가 생기는 이유는 하루라는 시간의 시작점과 끝점이 실제로 그 구간에 포함되는 건지 명확하지 않기 때문이다. 나같은 경우 11월 22일은 항상 22일 00:00을 포함하고 23일 00:00을 포함하지 않는다고 가정하고 얘기를 하지만, 다른 사람들은 22일에 22일 00:00과 23일 00:00이 모두 포함된다고 가정하고 얘기를 하기도 한다.&lt;br /&gt;
&lt;br /&gt;
따라서 다음과 같은 지침을 제시할 수 있겠다.&lt;br /&gt;
&lt;span style="text-decoration: underline"&gt;"숙제 제출 기한 같이 민감한 경우 위의 표현 중 서로 모순되지 않는 둘 이상의 표현을 써서 정확한 시각을 확인하고, 다른 사람들에게 이런 시각을 말할 경우 5번이나 6번을 사용할 것을 고려하라."&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
참고로... 이번에 해야 할 디비개 숙제는 "11월 22일까지" 제출하라고 되어 있었고, 여기에 해당하는 정확한 시각은 11월 23일 00:00:00일 것으로 추측된다. 이래서야 숙제를 하루 일찍 하는 수 밖에 방법이 없겠다. orz&lt;br /&gt;
</description>
			<category>잡다</category>
			<category>숙제</category>
			<category>시각</category>
			<category>자정</category>
			<category>표기법</category>
			<author>lifthrasiir</author>
			<guid>http://lifthrasiir.tistory.com/39</guid>
			<comments>http://lifthrasiir.tistory.com/39#entry39comment</comments>
			<pubDate>Tue, 21 Nov 2006 08:17:06 +0900</pubDate>
		</item>
		<item>
			<title>live.com 계정 생성이 막혔네</title>
			<link>http://lifthrasiir.tistory.com/38</link>
			<description>한때 가입 화면에 없는 도메인을 자바스크립트로 선택할 수 있도록 조작하면 live.{com,it,...} 등의 도메인을 사용하는 메일 주소를 만들 수 있다는 사실이 알려져서 수많은 사람들이 이 메일 주소를 받아 갔다.이 사건은 &lt;a href="http://news.com.com/2100-1032_3-6134643.html?part=rss&amp;amp;tag=2547-1_3-0-20&amp;amp;subj=news"&gt;C|Net 뉴스&lt;/a&gt;까지 오르내리락하다가 사흘만에 고쳐졌다고 한다.&lt;br /&gt;
&lt;br /&gt;
의도적인 건지는 모르겠지만, 아무튼 웹 프로그래머라면 이 사건을 보고 떠오르는 바가 있을 것이다. (아니라면 좀 더 새로운 세상을 경험해 보시길 :p) "클라이언트는 믿을 놈이 못 된다."&lt;br /&gt;
</description>
			<category>삽질</category>
			<category>Live.com</category>
			<category>버그</category>
			<category>클라이언트</category>
			<author>lifthrasiir</author>
			<guid>http://lifthrasiir.tistory.com/38</guid>
			<comments>http://lifthrasiir.tistory.com/38#entry38comment</comments>
			<pubDate>Mon, 13 Nov 2006 09:44:58 +0900</pubDate>
		</item>
		<item>
			<title>윈도우 화면 갈무리</title>
			<link>http://lifthrasiir.tistory.com/37</link>
			<description>오늘 하드디스크에 넘쳐 나던 그림들을 정리하는 도중 이런 흥미로운 사진을 발견했다.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://cfs.tistory.com/attach/8431/1265440359.jpg" rel="lightbox" target="_blank"&gt;&lt;img src="http://cfs.tistory.com/attach/8431/1265440359.jpg" alt="흑백 윈도우 화면 갈무리" height="360" width="480"/&gt;&lt;/a&gt;&lt;p class="cap1"&gt;흑백?&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;
대강 보기에 윈도우 화면은 맞는데 왜 흑백인지 궁금하신 분께서는 화면에 떠 있는 작업 관리자 창을 유심히 보시면 그 해답을 알 수 있다. 저 사진을 찍는 시점에 컴퓨터의 메모리가 거의 모두 소진되어서 화면 갈무리를 위해 필요한 메모리를 할당하는 데 실패하자, 윈도우가 흑백으로 화면을 저장해 버린 것이다. (PAE 따위 쓰지 않는 한 IA-32에서 윈도우의 메모리 한계는 2GB이다.)&lt;br /&gt;
&lt;br /&gt;
개인적으로 윈도우가 감탄스러운 것은, 어차피 저런 극한 상황에서는 화면 갈무리가 큰 의미를 갖지 않는데도 가능한한 갈무리가 가능하도록 fallback을 다 만들어 두었다는 점이다. 뭐 C++ STL에서는 std::stable_sort 같이 보조 메모리를 잡을 수 있으면 더 빨리 동작하는 알고리즘들도 있긴 하지만, 이런 것들은 성능을 위한 것이지 최악의 상황에도 대비할 수 있도록 만든 게 아니란 말이다.&lt;br /&gt;
&lt;br /&gt;
아무튼, 여기서 얻을 수 있는 교훈은 메모리 1GB씩 잡아 먹는 괴물을 만들지 말도록 자나 깨나 조심해야 한다는 것. -_-;;; 실제로 잘못 만들어진 웹 페이지를 익스플로러로 열면 프로세스 하나가 1.2GB씩 먹는 경우가 있었다.&lt;br /&gt;
</description>
			<category>삽질</category>
			<category>fallback</category>
			<category>감탄</category>
			<category>윈도우</category>
			<category>화면 갈무리</category>
			<author>lifthrasiir</author>
			<guid>http://lifthrasiir.tistory.com/37</guid>
			<comments>http://lifthrasiir.tistory.com/37#entry37comment</comments>
			<pubDate>Sun, 12 Nov 2006 20:55:53 +0900</pubDate>
		</item>
		<item>
			<title>동영상 업로드 테스트</title>
			<link>http://lifthrasiir.tistory.com/36</link>
			<description>&lt;div align="center"&gt;&lt;div style="text-align: left"&gt;괜히 티스토리에 동영상이 잘 올라 가는지, 그리고 올라간다면 어떻게 올라가는지 궁금해서 한 번 올려 봤다. 아래는 리듬잇-_-으로 &lt;a href="http://www.siromaru.com/bms/"&gt;murmur twins -4.6.0 beat mix-&lt;/a&gt;를 플레이한 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" id="mIIf2ltUUEY$" name="mIIf2ltUUEY$" width="402" height="324" align="middle"&gt;&lt;param name="mainImage" value="http://cfs.flvs.daum.net/files/44/9/32/27/1878026/thumb.jpg"&gt;&lt;param name="movie" value="http://flvs.daum.net/flvPlayer.swf?vid=mIIf2ltUUEY$"&gt;&lt;param name="swLiveConnect" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;param name="quality" value="high"&gt;&lt;param name="bgcolor" value="#ffffff"&gt;&lt;embed src="http://flvs.daum.net/flvPlayer.swf?vid=mIIf2ltUUEY$" quality="high" bgcolor="#ffffff" width="402" height="324" swliveconnect="true" name="mIIf2ltUUEY$" id="mIIf2ltUUEY$" align="middle" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/object&gt;&lt;br /&gt;
&lt;div style="text-align: left"&gt;&lt;br /&gt;
(사실 나는 리듬 게임을 꽤 오래 했음에도 불구하고 실력이 썩 좋지는 않다. 이게 최고 기록이긴 한데, 잘 보면 실수로 잘못 누른 부분이 두 세 군데 있다. -_-;)&lt;br /&gt;
&lt;br /&gt;
fraps로 갈무리를 하니 1.2GB가 나오길래 VirtualDubMod로 적절히 손질했다. (그러고 보니 AVI 원래 스펙은 2GB까지만 허용하던가?) 예상대로 업로드에는 플래시 컴포넌트가 쓰였는데, 생각보다 빨리 업로드되&lt;span style="text-decoration: line-through"&gt;고 인코딩되&lt;/span&gt;는 점이 인상깊었다. (인코딩은 누군가가 처음 동영상을 봤을 때 비로소 진행된다.) 아마 대규모 서버 팜을 두고 인코딩 작업을 전담하는 게 아닌가 싶다.&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</description>
			<category>잡다</category>
			<category>동영상</category>
			<category>리듬잇</category>
			<author>lifthrasiir</author>
			<guid>http://lifthrasiir.tistory.com/36</guid>
			<comments>http://lifthrasiir.tistory.com/36#entry36comment</comments>
			<pubDate>Sun, 12 Nov 2006 02:38:29 +0900</pubDate>
		</item>
		<item>
			<title>도쿠위키 수정</title>
			<link>http://lifthrasiir.tistory.com/35</link>
			<description>저번에 &lt;a href="http://www.splitbrain.org/doku.php?id=projects/dokuwiki"&gt;도쿠위키&lt;/a&gt;를 &lt;a href="../../../29"&gt;설치&lt;/a&gt;했다는 글을 썼는데 최근 며칠동안 개인 위키로 쓰기 좋게 다양한 수정을 가해 보았다. 필요하신 분들을 위해 수정한 부분을 공개한다. 참고로 내가 사용하고 있는 버전은 2006년 10월 19일판(RC3)이다.&lt;br /&gt;
&lt;br /&gt;
좀 긴 글이니 보기를 클릭해서 필요한 부분만 보시길 바란다. (태터는 코드 붙여 넣기가 참 불편하군... -_-;) 모든 수정된 코드는 도쿠위키 라이선스(GPL이었나?)와 동일한 조건으로 배포된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold"&gt;제목줄 문법 수정&lt;/span&gt;&lt;br /&gt;
다음 수정은 첫 단계 제목줄을 "====== asdf ======" 대신에 "## asdf" 식으로 쓸 수 있도록 한다. 또한 이들이 항상 정확히 한 줄에 오도록 해서 실수를 방지한다. (현재 문법에서는 "foo == bar == quux"라고 해도 제목줄이 만들어진다!)&lt;br /&gt;
&lt;br /&gt;
&lt;p id="more35_0" class="moreless_fold"&gt;&lt;span style="cursor: pointer;" onclick="toggleMoreLess(this, '35_0','보기','닫기'); return false;"&gt;보기&lt;/span&gt;&lt;/p&gt;&lt;div id="content35_0" class="moreless_content" style="display: none;"&gt;&lt;br /&gt;
/inc/parser/handler.php의 Doku_Handler 클래스에 있는 header() 메소드를 다음과 같이 수정하고 덧붙인다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt; &amp;nbsp; function header($match, $state, $pos) {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // get level and title&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $title = trim($match);&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $level = 7 - strspn($title,'=');&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if($level &amp;lt; 1) $level = 1;&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $title = trim($title,'=');&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $title = trim($title);&lt;br /&gt;
&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; return $this-&amp;gt;set_header($title, $level, $pos);&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
 &amp;nbsp; function header_alt($match, $state, $pos) {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $title = trim($match);&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $level = strspn($title,'#') - 1;&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $title = trim($title,'#');&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $title = trim($title);&lt;br /&gt;
&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; return $this-&amp;gt;set_header($title, $level, $pos);&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
 &amp;nbsp; function set_header($title, $level, $pos) {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; global $conf;&lt;br /&gt;
&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if ($this-&amp;gt;status['section']) $this-&amp;gt;_addCall('section_close',array(),$pos);&lt;br /&gt;
&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if ($level&amp;lt;=$conf['maxseclevel']) {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;_addCall('section_edit',array($this-&amp;gt;status['section_edit_start'], $pos-1, $this-&amp;gt;status['section_edit_level'], $this-&amp;gt;status['section_edit_title']), $pos);&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;status['section_edit_start'] = $pos;&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;status['section_edit_level'] = $level;&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;status['section_edit_title'] = $title;&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;_addCall('header',array($title,$level,$pos), $pos);&lt;br /&gt;
&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;_addCall('section_open',array($level),$pos);&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;status['section'] = TRUE;&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; return TRUE;&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;br /&gt;
그리고 /inc/parser/parser.php의 Doku_Parser_Mode_header 클래스에서 preConnect() 메소드를 다음과 같이 고친다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt; &amp;nbsp;&amp;nbsp; function preConnect() {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //we're not picky about the closing ones, two are enough&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addSpecialPattern(&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; '(?&amp;lt;=\n|^)[ \t]*={2,}[^\n]+={2,}[ \t]*(?=\n)',&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 'base',&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 'header'&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; );&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addSpecialPattern(&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; '(?&amp;lt;=\n|^)#{2,}\s[^\n]+(?=\n)',&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 'base',&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 'header_alt'&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; );&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;br /&gt;
하나 더, &lt;a href="http://wiki.splitbrain.org/plugin:outdent"&gt;outdent&lt;/a&gt; 플러그인을 사용하면 왼쪽의 섹션 들여쓰기를 필요에 따라 줄이거나 할 수 있다. (예를 들어서 문서의 "결론" 부분이 별도의 섹션으로 들어 있지 않다면 들여쓰기를 해서는 안 될 것이다.) 이 플러그인 역시 새로 바뀐 문법에 따라 몇 군데 수정했다. /lib/plugins/outdent/syntax.php에서 connectTo()와 handle() 메소드를 다음과 같이 수정한다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt; &amp;nbsp;&amp;nbsp; function connectTo($mode) { &lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addSpecialPattern('\n[ \t]*(?:==+|##+)[ \t]*(?=\n)',$mode,'plugin_outdent'); &lt;br /&gt;
 &amp;nbsp;&amp;nbsp; }&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; &lt;br /&gt;
 &amp;nbsp;&amp;nbsp; function handle($match, $state, $pos, &amp;amp;$handler){&lt;br /&gt;
 &amp;nbsp; &amp;nbsp;&amp;nbsp; if ($state == DOKU_LEXER_SPECIAL) {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if ($match{1} == '=') {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $tlevel = 7 - strlen(trim($match));&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $tlevel = strlen(trim($match)) - 1;&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $level = $this-&amp;gt;_getLevel($handler-&amp;gt;calls);&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if ($level &amp;gt; $tlevel) {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $handler-&amp;gt;_addCall('section_close', array(), $pos);&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $handler-&amp;gt;_addCall('section_open', array($tlevel), $pos); &amp;nbsp;&amp;nbsp; &lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; } &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;
 &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;
 &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;
 &amp;nbsp; &amp;nbsp;&amp;nbsp; return NULL;&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold"&gt;링크 문법 수정&lt;/span&gt;&lt;br /&gt;
현재 인터위키 이름에 숫자를 넣는 것은 금지되어 있다. 그러나 꼭 숫자를 안 쓰면 불안한 나같은-_- 사람을 위해 고쳐 봤다.&lt;br /&gt;
&lt;br /&gt;
&lt;p id="more35_1" class="moreless_fold"&gt;&lt;span style="cursor: pointer;" onclick="toggleMoreLess(this, '35_1','보기','닫기'); return false;"&gt;보기&lt;/span&gt;&lt;/p&gt;&lt;div id="content35_1" class="moreless_content" style="display: none;"&gt;&lt;br /&gt;
/inc/parser/handler.php의 internallink() 메소드에서 인터위키와 관련된 부분(아래와 비슷하게 생겼다)을 다음과 같이 고친다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt;  &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if ( preg_match('/^[a-zA-Z0-9\.]+&amp;gt;{1}.*$/u',$link[0]) ) {&lt;/div&gt;&lt;br /&gt;
또한 외부 링크를 많이 쓰는 경우 http://를 맨 앞에 붙여 주는 게 상당히 귀찮기 때문에 //라고만 써도 앞의 scheme을 http:로 가정하도록 했다. (이상해 보일 수도 있지만, 사실 //로 시작하는 주소도 올바른 URL이다.) 위에서 고친 부분 약간 아래에 "external link"라고 쓰여진 주석이 있는데 그 근처를 다음과 같이 고친다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }elseif ( preg_match('#^(?:([a-z0-9\-\.+]+?):)?//#i',$link[0]) ) {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // external link (accepts all protocols)&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if (substr($link[0],0,2) == '//') $link[0] = 'http:'.$link[0];&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold"&gt;목록 문법 수정&lt;/span&gt;&lt;br /&gt;
목록 문법에는 두 가지 손질을 가했는데, 다음과 같다.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;정의 목록 추가 (dl 플러그인의 수정)&lt;/li&gt;&lt;li&gt;리스트 앞에 꼭 붙어야 하는 공백을 없어도 되도록 수정 (단, 이렇게 하면 혼란을 방지하기 위해서 *나 - 같은 문자 뒤에 공백이 꼭 와야 한다.)&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;p id="more35_2" class="moreless_fold"&gt;&lt;span style="cursor: pointer;" onclick="toggleMoreLess(this, '35_2','보기','닫기'); return false;"&gt;보기&lt;/span&gt;&lt;/p&gt;&lt;div id="content35_2" class="moreless_content" style="display: none;"&gt;&lt;br /&gt;
먼저 /inc/parser/parser.php의 Doku_Parser_Mode_listblock 클래스에서 connectTo() 메소드를 다음과 같이 고친다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt; &amp;nbsp;&amp;nbsp; function connectTo($mode) {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // - lines can be indented with 0 or more space&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // - there should be one or more whitespaces after bullet&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addEntryPattern('\n *[\-\*](?=\s)',$mode,'listblock');&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addEntryPattern('\n\t{1,}[\-\*](?=\s)',$mode,'listblock');&lt;br /&gt;
&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addPattern('\n *[\-\*](?=\s)','listblock');&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addPattern('\n\t{1,}[\-\*](?=\s)','listblock');&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;br /&gt;
그리고 &lt;a href="http://wiki.splitbrain.org/plugin:dl"&gt;dl&lt;/a&gt; 플러그인을 깐 뒤, /lib/plugins/dl/syntax.php에서 connectTo()와 postConnect() 메소드를 다음과 같이 수정한다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt;&amp;nbsp; function connectTo($mode) {&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addEntryPattern('^ *\!', $mode, 'plugin_dl');&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addEntryPattern('^ *\?', $mode, 'plugin_dl');&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
 &lt;br /&gt;
&amp;nbsp; function postConnect() {&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addPattern('\n *\!', 'plugin_dl');&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addPattern('\n *\?', 'plugin_dl');&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addExitPattern('\n$', 'plugin_dl');&lt;br /&gt;
&amp;nbsp; }&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold"&gt;문서 목록 플러그인 수정&lt;/span&gt;&lt;br /&gt;
분류 등을 구현하기 위해 문서 목록 플러그인을 두 개 사용했는데, 하나는 현재 문서의 역링크를 보여 주는 &lt;a href="http://wiki.splitbrain.org/plugin:backlinks"&gt;backlinks&lt;/a&gt; 플러그인이고 또 하나는 특정 네임스페이스 안의 모든 문서를 보여 주는 &lt;a href="http://wiki.splitbrain.org/plugin:pageindex"&gt;pageindex&lt;/a&gt; 플러그인이다.&lt;br /&gt;
&lt;br /&gt;
&lt;p id="more35_3" class="moreless_fold"&gt;&lt;span style="cursor: pointer;" onclick="toggleMoreLess(this, '35_3','보기','닫기'); return false;"&gt;보기&lt;/span&gt;&lt;/p&gt;&lt;div id="content35_3" class="moreless_content" style="display: none;"&gt;&lt;br /&gt;
backlinks 플러그인은 기능은 좋지만 영 내 맘에 들지도 않고 버그-_-도 있어서 여기 저기 수정했다. (앞으로 수정할 파일은 모두 /lib/plugins/backlinks/syntax.php이다.) 먼저 역링크가 아예 없을 때 보기 흉한 php 에러가 뜨는데, handle() 메소드에서 다음을,&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; ksort($backlinks);&lt;/div&gt;다음으로 고치면 된다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if (!is_null($backlinks)) ksort($backlinks);&lt;/div&gt;&lt;br /&gt;
네임스페이스를 제대로 고려하지 않아서 링크가 깨지는-_- 문제도 있는데 renderpageList() 메소드에서 링크를 추가하는 부분(아래 코드랑 비슷하게 생겼다)을 다음과 같이 고치면 된다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $renderer-&amp;gt;internalLink(':'.$page, $page);&lt;/div&gt;&lt;br /&gt;
자동으로 첫 문자에 따라 그룹화하는 기능도 있는데 전혀 쓸모가 없어서 빼 버렸다. 이건 render() 메소드에서 if (!empty($data[1]))로 시작하는 블록 안의 내용을 모두 지우고 다음으로 대체하면 된다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $this-&amp;gt;renderPageList($renderer, $data[1]);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold"&gt;블로그 플러그인 수정&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://wiki.splitbrain.org/plugin:bliki"&gt;bliki&lt;/a&gt;라는 플러그인이 있는데 블로그를 만들어 쓰는데 딱 좋다. 이 플러그인이랑 pageindex, backlinks 플러그인을 같이 쓰면 분류라던지 뭐 그런 것도 큰 문제 없이 구현할 수 있다.&lt;br /&gt;
&lt;br /&gt;
하지만 개인적으로 쓰다 보니까 이 플러그인이 생성하는 "새 글" 링크가 처음 페이지가 불려질 때 고정이 되어 버려서 나중에 링크를 열면 작성 시각이 이상하게 나오는 문제가 있었다. (사실 이건 이 플러그인의 한계이기도 하다.) 이 문제를 대강이나마 해결하기 위해 작성 시각을 "새 글" 링크가 눌렸을 때로 고치는 자바스크립트를 하나 만들어 봤다.&lt;br /&gt;
&lt;br /&gt;
&lt;p id="more35_4" class="moreless_fold"&gt;&lt;span style="cursor: pointer;" onclick="toggleMoreLess(this, '35_4','보기','닫기'); return false;"&gt;보기&lt;/span&gt;&lt;/p&gt;&lt;div id="content35_4" class="moreless_content" style="display: none;"&gt;&lt;br /&gt;
/lib/plugins/bliki/script.js를 새로 만들고, 그 안에 다음과 같은 코드를 넣는다. 이렇게만 하면 실시간으로 "새 글" 링크가 고쳐지기 때문에 작성 시각을 좀 더 정확하게 맞출 수 있다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt;Number.prototype.formatlen = function(l) {&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; var s = this.toString();&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; while (s.length &amp;lt; l) s = '0' + s;&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; return s;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function bliki_update_newpost() {&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; try {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; var anchor = document.getElementById('blognew').firstChild;&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; anchor.href = anchor.href.replace(&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; /(\d{4})([-\/:]|%3A)(\d\d)([-\/:]|%3A)(\d\d)([-\/:]|%3A)(\d{6})/i,&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; function (_, y, _1, m, _2, d, _3, t) {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; var t = parseInt(t, 10);&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; var d = new Date(parseInt(y, 10), parseInt(m, 10) - 1, parseInt(d, 10),&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; parseInt(t / 10000), parseInt(t / 100) % 100, t % 100 + 1);&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; var s = d.getFullYear().formatlen(4) + _1 +&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; (d.getMonth() + 1).formatlen(2) + _2 +&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; d.getDate().formatlen(2) + _3 +&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; d.getHours().formatlen(2) +&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; d.getMinutes().formatlen(2) +&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; d.getSeconds().formatlen(2);&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; return s;&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; });&lt;br /&gt;
 &amp;nbsp;&amp;nbsp; } catch (e) {}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setInterval('bliki_update_newpost()', 1000);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold"&gt;상자 플러그인 수정&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://wiki.splitbrain.org/plugin:boxes"&gt;boxes&lt;/a&gt; 플러그인은 예쁘게 생긴 상자들을 텍스트 주변에 둘러 싸는데 사용하는 플러그인이다. CSS로 상자의 모양을 마음대로 수정할 수 있다는 점이 강점인데, 길이를 백분율로만 지정할 수 있어서 고쳐 봤다.&lt;br /&gt;
&lt;br /&gt;
&lt;p id="more35_5" class="moreless_fold"&gt;&lt;span style="cursor: pointer;" onclick="toggleMoreLess(this, '35_5','보기','닫기'); return false;"&gt;보기&lt;/span&gt;&lt;/p&gt;&lt;div id="content35_5" class="moreless_content" style="display: none;"&gt;&lt;br /&gt;
/lib/plugins/box/syntax.php에서 _boxstyle() 메소드를 보면 preg_match를 써서 길이를 지정하는 코드가 나온다. 그 줄을 다음과 같이 고친다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if (preg_match('/^((\d{1,2}|100)%|\d+(\.\d+)?em|\d+px)$/', $token)) {&lt;/div&gt;&lt;br /&gt;
이렇게 하면 300px라던지 3.3em 같은 단위도 상자 크기를 정하는 데 쓸 수 있다.&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold"&gt;삽입 플러그인 수정&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://wiki.splitbrain.org/plugin:include"&gt;include&lt;/a&gt; 플러그인은 한 문서의 내용을 다른 문서에 삽입하는 데 쓰인다. 그런데 이 플러그인의 작동이 상당히 이해하기 힘들고, 실제로 의도한 대로 동작하지 않는 경우가 많아서 그냥 한 가지 문법을 더 만들었다.&lt;br /&gt;
&lt;br /&gt;
고친 플러그인에서는 세 가지 문법을 지원한다.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;{{page&amp;gt;blah}}라고 하면 blah 문서의 내용이 현재 위치에 그대로 삽입된다. 이 때 섹션 들여쓰기가 자동으로 처리되지 않기 때문에, 뒤에 나오는 내용이 불필요하게 들여쓰기되는 문제가 발생한다.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;{{section&amp;gt;blah}}라고 하면 blah 문서의 내용을 해당 문법이 들어 있는 섹션에 맞춰서 삽입한다. 여러 섹션이 들어 있는 문서를 삽입할 때는 잘 작동하지만 여전히 내가 원하는 건 아니다. -_-;&lt;/li&gt;&lt;li&gt;{{include&amp;gt;blah}}는 내가 이번에 추가한 문법이고, blah 문서의 내용을 어떤 수정도 가하지 않고 그대로 삽입한다.&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;p id="more35_6" class="moreless_fold"&gt;&lt;span style="cursor: pointer;" onclick="toggleMoreLess(this, '35_6','보기','닫기'); return false;"&gt;보기&lt;/span&gt;&lt;/p&gt;&lt;div id="content35_6" class="moreless_content" style="display: none;"&gt;&lt;br /&gt;
먼저 /lib/plugins/include/syntax.php의 connectTo() 메소드 뒤에 다음과 같은 줄을 추가한다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt; &amp;nbsp;&amp;nbsp; $this-&amp;gt;Lexer-&amp;gt;addSpecialPattern("{{include&amp;gt;.+?}}",$mode,'plugin_include'); &lt;/div&gt;&lt;br /&gt;
그리고 같은 파일의 _include() 메소드에서, // current section level이라는 주석 근처에 있는 코드를 다음과 같이 고친다.&lt;br /&gt;
&lt;div style="padding: 10px; background-color: rgb(228, 228, 228); font-family: Lucida Console,monospace"&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; if ($include=='include') {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $clevel = 0;&lt;br /&gt;
 &amp;nbsp; &amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // current section level &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; $matches = array(); &lt;br /&gt;
 &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; preg_match_all('|&amp;lt;div class="level(\d)"&amp;gt;|i', $renderer-&amp;gt;doc, $matches, PREG_SET_ORDER); &lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; $n = count($matches)-1; &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if ($n &amp;gt; -1) $clevel = $matches[$n][1]; &lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; else $clevel = 0; &lt;br /&gt;
 &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
</description>
			<category>삽질</category>
			<category>도쿠위키</category>
			<category>수정</category>
			<category>패치</category>
			<author>lifthrasiir</author>
			<guid>http://lifthrasiir.tistory.com/35</guid>
			<comments>http://lifthrasiir.tistory.com/35#entry35comment</comments>
			<pubDate>Fri, 10 Nov 2006 00:46:00 +0900</pubDate>
		</item>
		<item>
			<title>창조론 대 진화론</title>
			<link>http://lifthrasiir.tistory.com/34</link>
			<description>기독교에서 언급하는 창조론(다른 종교도 비슷하겠지만 아마)은 신이라는 꽤 거대한 존재를 가정하고 거기에 맞춰서 이론을 펼쳐 나간다. 진화론은 진화가 다양성을 만드는 기본 메커니즘이라는 가정을 깔고 발견적인 증거를 해석한다.&lt;br /&gt;
&lt;br /&gt;
창조론은 애초에 과학적이지 않은 가정을 깔고 과학적인 방법론도 별로 안 쓰기 때문에 진실성을 떠나서 과학이라고 할 수 없다. 창조론자들이 자주 가지고 오는 지적 설계론 또한 실험적인 증명이 현실적으로 불가능하기 때문에 -- 이건 당시로서는 검증이 불가능했지만 후에 가능해진 원자론 같은 것과는 본질적으로 다르다 -- 과학이라 보기 힘들다. 반대로 진화론이 과학이 아니라는 주장이 등장하기도 하는데, 이 주장은 과학이라 인정받는 다른 이론과 비교했을 때 틀렸다고 봐야 한다. 과학적인 방법론을 쓰면서도 그 근거가 100% 완전해야만 과학이라고 한다면, 원자론과 양자역학 또한 실제 구조는 다른데 현상만 그렇게 나타나는 것일 수도 있으니 과학이 될 수 없다. 이들이 과학으로 인정받는 이유는 이성적으로 그 현상을 충분히 설명할 수 있는 이론이기 때문이지 그 아래에 깔고 있는 가정이 완벽해서가 아니다. (그런 의미에서 과학은 완벽한 게 아니다. 완벽해지려고 시도는 하겠지만.)&lt;br /&gt;
&lt;br /&gt;
물론 과학적이냐와 진실성은 따로 생각해야 한다. (진실의 정의가 뭐냐를 떠나서) 리처드 도킨스 같은 사람은 절대 아니라고 &lt;span style="text-decoration: line-through"&gt;생각하겠지만&lt;/span&gt;할 지도 모르겠지만, 안타깝게도 &lt;a href="http://www.rathinker.co.kr/skeptic/occam.html"&gt;오캄의 면도칼&lt;/a&gt;은 "복잡한 이론이 진실이 아니거나 적어도후에 깨질 확률이 높다"는 걸 말하는 거지 항상 그렇다는 말은 아니다. 어느 게 진실인지는 과학으로 밝힐 수 있는 영역이 아니고, 그걸 믿고 말고는 개인의 자유이다. 하지만 &lt;span style="font-weight: bold"&gt;적어도 과학적이지 않은 걸 과학이랍시고 덮어서 주장하진 말았으면 한다&lt;/span&gt;. 나는 (짜가-_-) 기독교인이긴 하지만 애초에 창조과학회를 좋아하지 않으며, 그들이 진정 하나님을 믿는다면 과학의 이름으로 복음을 전파해서는 안 된다고 생각한다. 아니, 그보다 그 과정에서 과학이 필요하기나 한가? :p&lt;br /&gt;
&lt;br /&gt;
교내 비비에 올라온 글을 보고 그냥 적어 봤다.&lt;br /&gt;
</description>
			<category>진지</category>
			<category>과학</category>
			<category>진화론</category>
			<category>창조론</category>
			<author>lifthrasiir</author>
			<guid>http://lifthrasiir.tistory.com/34</guid>
			<comments>http://lifthrasiir.tistory.com/34#entry34comment</comments>
			<pubDate>Tue, 07 Nov 2006 18:03:07 +0900</pubDate>
		</item>
	</channel>
</rss>
