호스팅업체에서 제공되는 기능도 별로 없고, 버전도 낮아서 미루고 있었던 일 몇개를, 오인호씨 가상서버에 더부살이를 시작하면서 몇개 프로그램과 사이트를 만들어 넣었습니다. 일단 어제는 각 책들별 판매량을 보여주는 페이지를 하나 맹그렀습니다. 예전에 보여드렸던 적이 있던 판매량 체크 프로그램을 crontab으로 돌리고 결과를 보여주는 페이지를 만든거죠.

http://webispy.just4fun.co.kr/stat/view.py?title=python

http://webispy.just4fun.co.kr/stat/view.py?title=lua

http://webispy.just4fun.co.kr/stat/view.py?title=cpp

http://webispy.just4fun.co.kr/stat/view.py?title=gamebot


gamebot은 주가하락 중이고, c++는 학기초에만 반짝하고, lua는 고만고만 유지 중, python은 캐즘을 넘어서 2차 도약을 꿈꾸고 있는 중으로 해석이 됩니다 :)


AND

와우~, 떡이떡이님이 저희 책을 소개해 주셨네요.

"C언어보다 파이썬이 먼저 발표됐다면 세상이 아름다워졌을텐데"
http://itviewpoint.com/142711


이렇게 좋게 소개해 주시다니 감사합니다.

그나저나, 역시 최동진씨의 멘트는 심상치 않아요.
AND

요즘 보면 삼성에 대한 엄청나게 좋은 소문들이 많이 신문기사에 나고 있는 것을 알 수 있다. 그 중 대다수는 황당무계하기 짝이 없어서 보기도 싫었으나, 내 눈길을 끄는 기사가 하나 있었다.

[삼성전자, 최고 연구개발 전문가 '마스터' 제도 도입
연구개발 직군의 수석 연구원들은 경영임원으로 성장하는 '관리자 트랙'과 마스터로 성장하는 '전문가 트랙' 중 하나를 선택하게 되며, '전문가 트랙'을 선택한 연구원들 중 탁월한 기술력을 보유한 연구원들이 기술심사를 통해 마스터로 선발된다.

그래... 임원도 관리자와 개발 전문가로 나누겠다는 취지는 알겠는데, 대상이 수석연구원이라는 것이 문제다. 삼성전자의 개발쪽 직급은 [연구원(4년)<선임연구원(4년)<책임연구원(8년)<수석연구원]으로 나눠져 있는데, 가장 마지막인 수석연구원에게만 이러한 트랙이 마련되어 있다는 것이 말이 안된다고 생각한다. 실제로 책임연구원만 해도 개발반 관리반 정도로 업무가 나뉘게 된다. 물론 개발100%인 사람도 있고 관리100%인 사람도 있을 수 있긴 하지만 일반적으로 이렇다는 이야기다.

생각해보자. 하다못해 스타크래프트를 한다고 해도 바이오닉 체제에 대해 업그레이드를 하다가 메카닉을 뽑거나, 메타닉 체제에 대해 업그레이드를 충실하게 해 보다가 갑자기 바이오닉을 뽑게되면 어떻게 될지는 자명한 사실이다. 즉, 적어도 선임연구원 정도부터 어느쪽 테크트리를 탈 지 선택하여 그에 해당하는 교육을 해 나아가는 것이 당연할 터인데 이러한 눈가리고 아웅 식의 보여주기 정책은 누가 보아도 어처구니 없다는 사실을 좀 알아줬으면 한다.

좀 가능성 있는, 비전 있는 테크트리를 개발해 줬으면 한다.
AND

요 며칠 스타2 타워디펜스(Startcraft2 Tower Defence)에 빠져 있었는데요.
[ 플래시게임 링크 http://starcraft2.pro/beta ]

드디어 Easy를 모두 다 클리어 했습니다.
쉬워 보였는데, 생각보다 잘 안되는군요.
이거 계속 하다가는 끝이 없겠어요~
인증샷을 마지막으로, 이제 그만해야죠...

AND


AND

오늘 아침에는 간만에 회사에서 교육을 시켜 주었습니다. ^^

"마음의 근력을 키워라" - 우종민 교수


생각보다 도움이 많이 되는 내용이 많아서 좀 요약해 보겠습니다.

화를 낼 일이 있다면 아래와 같이 한번 다시 생각해 보길 권하시네요~
 + 화낼 가치가 있는 상황인가 생각해 본다.
 + 내 건강을 해칠 만큼 중요한가 생각해 본다.
 + 화 내는게 가장 효과적인 방법인가 고민해 본다.
 

 
 또한 화는 전염된다고 합니다.
 특히, 부하직원에게 쉽게 전염되며,
 또한, 가족들에게 쉽게 전염이 되어 자신에게 돌아온다고 하네요.
 100번 옳은 소리죠 ㅎㅎ
 
 다음과 같이 멋있게 화내는 방법에 대해서는 알려주셨는데요~
  + 좋은 이야기는 주어를 남으로 시작하라
  + 나쁜 이야기는 주어를 나로 시작해라.
     - 나쁜 이야기를 남으로 시작하면, 싸움이 날 수 밖에 없다.
       ex. 너는 왜 그렇게 신경질만 내니?
             너는 왜 그렇게 내 말을 안 듣니?
             당신은 왜 매일 늦어요?
             당신은 왜 그렇게 자기 밖에 몰라요?
             ...
             
  마지막으로 몸에 대해서는 돈 들이며 운동을 하는데, 왜 마음에 대해서는 이리도 무관심한지 물으십니다.
  우리는 기껏해야 회사에 50세 까지밖에 안 다닐텐데, 약 100세까지 사용할 우리몸과 정신을 이리도 혹사시키는지 모르겠습니다. 이제라도 늦지 않았으니 몸과 정신에 더욱 투자를 해야겠습니다 :)
AND



어제 짬짬히 구글코드잼 2009 에 참가해서 문제를 풀었는데, 2문제 밖에 못 풀었네요. 머리가 엄청 굳었나 봅니다. 늦게 풀기 시작한데다가 중간에 병원 갔다오고 잡무를 처리했는데도, 시간 카운트를 다 하네요 ㅎㅎ

33점만 넘으면 Qualification Round는 통과하니 별 문제 없겠지만, 이 다음 round 부터 통과하려면 2시간 내에 풀 수 있는 문제와 없는 문제를 후딱 선별해서 푸는 능력이 필요할 듯 합니다.

누구나 다 그렇겠지만, 코딩보다는 문제해석과 적당한 알고리즘을 선택하는게 시간이 걸리네요. 특히 전 문제해석이 너무 오래 걸리는 것 같아요. 이번에 1번과 3번 문제를 풀었는데, 1번은 금새 풀었지만 3번 문제를 특히나 아주 살짝 잘못 이해해서 왜 오답이 나오는지 모르고 오답 제출을 8번이나 하는 추태를 보였답니다 ㅠㅜ; 이 다음 목표는 round 1 통과인데, 과연 잘 되려나 모르겠네요 ^^;
AND

회사에서 아래와 같은 설문을 했는데, 다른 설문은 다 할 수 있었는데요.
아래 질문들에 대해서 "0.답없음"이 보기에 없어서 설문을 완료하지 못했습니다 ㅠㅜ;
(각 질문에 대해서 실명으로 된 보기들 중에서 선택하는 설문입니다...)

- Who is a person, who want to make to Mentor in business side?

- Who is a person, who want to make to Mentor regardless of  business?

흙... 아무나 쓸 수도 없고 ㅠㅜ;

ps.
이제보니 설문내용의 영어가 좀 이상하네요 --;
한글부분을 날렸더니 더더욱 이상...
AND

Train Timetable

개발/python 2009. 8. 22. 01:03
이번에는 두번째 문제인 기차시간표입니다.

문제는 다음과 같습니다.


제일 가까운 기차들을 모두 이어주고,
앞뒤로 이어지지 않은 기차들을 카운트해주면 됩니다.

소스코드는 다음과 같습니다.

  1. import sys
  2. import datetime
  3.  
  4. class train:
  5.   def __init__(self, row, dir):
  6.     st = row.split(' ')[0]
  7.     end = row.split(' ')[1]    
  8.     self.start = datetime.datetime( 2009,1,1, int(st.split(':')[0]), int(st.split(':')[1]) )
  9.     self.end = datetime.datetime( 2009,1,1, int(end.split(':')[0]), int(end.split(':')[1]) )
  10.     self.dir = dir
  11.     self.reserved1 = 0
  12.     self.reserved2 = 0
  13.  
  14. def asc_start(a,b):
  15.   if a.start < b.start:
  16.     return -1
  17.   else:
  18.     return 1
  19.  
  20. def desc_end(a,b):
  21.   if a.end < b.end:
  22.     return 1
  23.   else:
  24.     return -1
  25.  
  26. if __name__=="__main__":
  27.   if len(sys.argv)>1:
  28.     inp = sys.argv[1]
  29.   else:
  30.     print "append an input file param"
  31.     sys.exit()
  32.  
  33.   f = open( inp, 'rt' )
  34.   nTC = int( f.readline() )
  35.   print 'the number of tc :', nTC
  36.  
  37.   output_file = inp.split('.')[0]+"_output.txt"
  38.   fout = open( output_file, 'wt')
  39.  
  40.   for i in range(0,nTC):
  41.     turnaround = int( f.readline() )
  42.    
  43.     NA_NB = f.readline()
  44.     NA = int( NA_NB.split(' ')[0] )
  45.     NB = int( NA_NB.split(' ')[1] )
  46.    
  47.     trains = []
  48.     for n in range(0,NA):
  49.       row = f.readline()
  50.       trains.append( train( row, 'A' ) )
  51.     for n in range(0,NB):
  52.       row = f.readline()
  53.       trains.append( train( row,'B') )
  54.  
  55.     trains.sort(desc_end)
  56.    
  57.     #process
  58.     ta = datetime.timedelta( 0, turnaround*60 )
  59.    
  60.     for t1 in trains:
  61.       if t1.reserved2>0: continue
  62.       cands = []
  63.       for t2 in trains:
  64.         if t2.reserved1>0: continue
  65.          
  66.         if ( t1.end + ta <= t2.start ) and (t1.dir != t2.dir):
  67.           cands.append( t2 )
  68.          
  69.       if cands:
  70.         cands.sort( asc_start )
  71.         min = cands[0]
  72.         #print t1.start, t1.end, t1.dir
  73.         #print '\t',min.start, min.end, min.dir
  74.        
  75.         t1.reserved2 = min.reserved1 = 1
  76.  
  77.     NA = NB = 0
  78.     for t in trains:
  79.       if t.reserved1==0:
  80.         if t.dir=='A':
  81.           NA+=1
  82.         else:
  83.           NB+=1
  84.  
  85.     # result
  86.     print 'Case #'+str(i+1)+':' ,NA, NB
  87.     fout.write( 'Case #'+str(i+1)+': ' +str(NA) + ' '+str( NB)+'\n')
  88.  
  89.   f.close()
  90.   fout.close()


실행결과는 다음과 같으며, 모두 Correct입니다.


AND

Saving the Universe

개발/python 2009. 8. 21. 01:48
요즘 기분이 꿀꿀해서 CodeJam 2008 Qualification Round 문제 중 하나인, 'Saving the Universe'를 풀어봤습니다.

1번 문제(Saving the Universe)는 다음과 같습니다.
문제링크 : http://code.google.com/codejam/contest/dashboard?c=agxjb2RlamFtLXByb2RyEAsSCGNvbnRlc3RzGI36AQw#

그냥 간단하게 검색엔진 list를 둬서 카운트 하다가 꽉차면 다시 비우고를 반복하면 끝입니다.
파이썬 코드는 다음과 같습니다. (2.5.4버전으로 했음)

  1. import sys
  2.  
  3. def isAllChecked(d):
  4.   ret = True
  5.   for k in d.keys():
  6.     if d[k]<1:
  7.       ret = False
  8.   return ret
  9.  
  10. if __name__=="__main__":
  11.   if len(sys.argv)>1:
  12.     inp = sys.argv[1]
  13.   else:
  14.     print "append an input file param"
  15.     sys.exit()
  16.  
  17.   f = open( inp, 'rt' )
  18.   nTC = int( f.readline() )
  19.   print 'the number of tc :', nTC
  20.  
  21.   output_file = inp.split('.')[0]+"_output.txt"
  22.   fout = open( output_file, 'wt')
  23.  
  24.   for i in range(0,nTC):
  25.     nEngine = int( f.readline() )
  26.     engines = []
  27.     for e in range(0,nEngine):
  28.       engine = f.readline()
  29.       engines.append( engine )
  30.     nKeyword = int( f.readline() )
  31.     keywords = []
  32.     for k in range(0,nKeyword):
  33.       keyword = f.readline()
  34.       keywords.append( keyword )
  35.    
  36.     # process
  37.     dEngine = {}
  38.     for e in engines:
  39.       dEngine[e]=0
  40.     nCount = 0
  41.     for k in keywords:
  42.       if k in dEngine.keys():
  43.         dEngine[k] += 1
  44.         if isAllChecked(dEngine):
  45.           for e in engines:
  46.             dEngine[e] = 0
  47.           nCount += 1
  48.           dEngine[k] += 1
  49.          
  50.     # result
  51.     print 'Case #' + str(i+1)+': '+str( nCount )
  52.     fout.write( 'Case #' + str(i+1)+': '+str( nCount ) + '\n' )
  53.      
  54.   f.close()
  55.   fout.close()

실행결과는 다음과 같으며, 둘다 Correct 입니다.


AND