Skip to content

Instantly share code, notes, and snippets.

@eungju
eungju / p2_2.erl
Created September 14, 2012 14:19
코딩 인터뷰 완전 분석 215쪽 문제 18.10 풀이
-module(p2_2).
-compile(export_all).
-include_lib("eunit/include/eunit.hrl").
% 두 단어가 주어지면 첫 단어를 한 번에 한 문자씩만 다른 단어로 바꾸는 것을 반복하여 두 번째 단어를 만드는 과정을 출력하는 문제이다. 입력으로는 사전 파일과 단어 두 개가 주어진다.
% 우선 사전 파일에서 단어를 읽는다.
read_words(FileName) ->
{ok, Device} = file:open(FileName, [read]),
@eungju
eungju / StaticResources.java
Created November 16, 2012 09:15
Servlet Assets Helper
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContext;
import com.google.common.base.Preconditions;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.hash.HashFunction;
@eungju
eungju / README.md
Created November 25, 2012 08:17
LivePreview: watchr + Chrome LivePage Extension

LivePreview: watchr + Chrome LivePage Extension

마크업 언어로 문서를 작성할 때 HTML로 변환한 결과를 바로 확인하고 싶을 때가 많다. Mou, Marked 등 이런 문제를 해결해주는 도구가 있지만 대부분 맥에서만 쓸 수 있고, 문서 처리 과정을 완전히 통제하지 못하는 등 다른 제약들도 있다. watchr과 크롬 LivePage를 이용하면 이 문제를 간편하게 해결할 수 있어서 소개한다.

watchr

watchr은 특정 파일이 변경됐을 때 어떤 동작을 취하도록 프로그램할 수 있다. 주로 Continous Testing 도구로 사용되지만, 파일 변경에 따른 처리 결과를 빠르게 알고 싶은 모든 경우에 아주 유용하다. 루비 gem으로 간단하게 설치할 수 있다.

$ gem install watchr
@eungju
eungju / pool.py
Last active March 23, 2018 11:35
class KyotoTycoon(object):
...
def get(self, key):
with self.pool.context() as c:
return c.get(key, db=self.db)
class ConnectionPool(object):
...
def context(self):
@eungju
eungju / result.txt
Last active December 20, 2015 22:29
➜ ~ python self_and_cls.py
1 0
1 1
@eungju
eungju / otp.rb
Last active December 21, 2022 11:16
OTP
#!/usr/bin/env ruby
require 'base32'
require 'openssl'
require 'uri'
TOTP_INTERVAL = 30
def get_pasword(secret_key, t)
now = t / TOTP_INTERVAL
@eungju
eungju / days.py
Last active December 25, 2015 10:19
휴일 표현과 계산.
import datetime
class DayExpression(object):
def include(self, date):
raise NotImplementedError
class Union(DayExpression):
def __init__(self, expressions):
@eungju
eungju / kyotocabinet-mavericks.patch
Created November 8, 2013 04:35
A patch for kyotocabinet.
diff -ru kyotocabinet-1.2.76/kccommon.h kyotocabinet-1.2.76-mavericks/kccommon.h
--- kyotocabinet-1.2.76/kccommon.h 2012-05-25 01:27:59.000000000 +0900
+++ kyotocabinet-1.2.76-mavericks/kccommon.h 2013-11-08 13:22:57.000000000 +0900
@@ -82,7 +82,7 @@
using ::snprintf;
}
-#if __cplusplus > 199711L || defined(__GXX_EXPERIMENTAL_CXX0X__) || defined(_MSC_VER)
+#if __cplusplus > 199711L || defined(__GXX_EXPERIMENTAL_CXX0X__) || defined(_MSC_VER) || defined(_LIBCPP_VERSION)
@eungju
eungju / thrift_pool.py
Last active January 1, 2016 22:19
Thrift Client Pooling.
class ThriftClientPool(object):
def __init__(self, service, host, port, pool_conf=None):
self.service = service
self.host = host
self.port = port
self.pool_conf = {"max": 0, "min": 1, "idle_expire": 30, "expire": 3 * 60}
if pool_conf:
self.pool_conf.update(pool_conf)
self.pool = Queue(self.pool_conf["max"])
for i in range(self.pool_conf["min"]):
@eungju
eungju / threaddump.md
Last active April 17, 2025 17:58
파이썬에서 데드락 해결하기 위해 쓰레드 덤프 얻는 방법.

데드락이 걸렸는데 코드를 봐도 어디인지 모를 때가 있다. 자바는 JVM이 쓰레드 덤프 기능을 제공해서 어떤 쓰레드가 어디서 멈춰 있는지 확인하기 쉬웠는데 파이썬은 쓰레드 덤프를 얻으려면 약간의 코딩이 필요하다.

아래와 같이 모든 쓰레드의 스택 트레이스를 볼 수 있다.

for ident, stack in sys._current_frames().items():
    logger.info(("%d" % ident) + "".join(traceback.format_list(traceback.extract_stack(stack))))

어떤 쓰레드가 멈춰 있는지 안다면 그 쓰레드의 스택 트레이스만 볼 수 있다.