드디어 윤곽이 보이기 시작합니다.

이번달말에 발간을 목표로 진행되고 있습니다.

업뎃되어가는 자세한 정보는 아래 사이트를 보시면 됩니다.

http://www.wikibook.kr:8180/JSPWiki/Wiki.jsp?page=Python
AND

잠시일지 영원히일지 모르겠지만, 팔려가신 분들이나...

저를 포함해 남아있는 사람들이나...

당췌 뭘 하고 있는 건지 모르겠습니다...

바로 이런 느낌 ?

음... 저만 답답한 걸 까요?

무언가 취미생활을 하지 않으면 버틸 수가 없네요...

그래서 요즘 더 열씨미 운동+@를 하고 있는 것일지도 ㅠㅜ;
AND

토요일에는 간만에 홍대앞에 다녀왔습니다.
수원에서 홍대까지 외출한 이유는 바로, 동생이 공연을 한다고 초대장을 주었기 때문입니다.



직장인 밴드 연합으로 공연을 하는 자리였는데,
제 동생은 그중 SOS band(모던락)의 보컬로 활동을 하더군요.

공연 자체도 볼 만 했지만,
저도 컴터 앞에만 앉아 있지 말고 취미활동을 좀 해야겠다는 생각을 하게 한 하루였습니다 :)
AND

며칠전 갑자기 마눌님이 급하게 전화해서 나에게 물었다.
마눌님 : "나 몰래 사업자 등록증 냈어?"
dsp : "아니, 왜?"
마눌님 : "이상한 세금내라는 안내장이 왔어, 그러게 이상한 짓 좀 하지 말라니깐 !"
dsp : "..."

집에 가 보니, 바로 종합소득세 확정신고 안내장이 와 있었다.
그 후 며칠동안 '이미 원천징수 당했으니 안해도 상관없겠지'하고 방치하고 있다가,
아는 회계사분에게 여쭤보니 이거 신고 안하면 가산세 물리므로 반드시 하라고 한다.
아니 올해 처음 받아보는건데, 작년까지는 그럼 가산세를 나도 모르게 물었다는 이야기인가...?

하여간 홈텍스를 통해서 집에서 간단하게 할 수 있다는 이야기를 믿고,
몇 시간 웹서핑 및 버벅이다가 결국은 포기했다.
그리고 다음날 집앞에 있는 세무서에 가서, 친절한 도우미들의 힘을 빌어 무사히
세금을 더 냈다.
아놔~, 환급받을 줄 알았는데 더 내다니 ㅠㅜ;

결국 중요한건 세무서 갈 때, 다음 준비물을 챙기면 된다.
  • 주민등록증
  • 종합소득세 확정신고 안내장
  • 홈텍스 아이디

원청징수 영수증이나 연말정산명세서를 가지고 가도 되지만,
주민등록증만 있으면 도우미 분이 다 조회해서 프린트해준다.
근데 이미 다 전산망에 있는 데이터인데 왜 이렇게 귀찮은건지 모르겠다.


ps. 원래는 과정을 자세히 기록해 두려고 했는데, 도우미 분이 능력자이신지 너무나도 후딱 처리해서 전혀 뭘 하셨는지 보지 못했다 --;
AND

최근 들어, 마눌님이 컴터 앞에만 앉아 있지 말고 축제나 좀 찾아보라는 말을 듣고,
여기저기 돌아다니다 축제 사이트가 정리되어 있는 곳이 없어서 고생하다가,
하나 찾았는데 rss를 제공하지 않아서 rss를 제공하도록 만들어 버렸습니다...
feed43.com 같은 곳을 이용해도 되겠지만, 이런식으로 모을 곳이 늘어나면 또 관리가 안되는 것은 마찬가지려나 생각하다보니 만들게 되었습니다.



사이트 : http://dsphome.net/festival
RSS : http://dsphome.net/festival/rss.xml

Ps.
제가 빠뜨린 좋은 곳이 있으면 덧글로 알려주세요.
추가 가능한 경우에 한해 머 거의 대부분 가능하겠져 ㅋ 추가하도록 하겠습니다.

Ps2.
같은 포맷으로 할 수 있는게, 축제 뿐 아니라 몇 개 더 있던데...
호응이 좋으면 추가하도록 하겠습니다.
AND

4. Rss.py는 다음과 같습니다.
mod_python으로 연결해 놓으시면 됩니다.

# -*- coding: utf-8 -*-

from mod_python import apache
import pickle, re
import os.path, time

url_head = "http://asialadders.battle.net/war3/ladder/W3XP-player-profile.aspx?Gateway=Kalimdor&&PlayerName="

def conv( date ):
    ds = date.split(',')
    ds1 = ds[1].split(' ')
    ds2 = ds[2].split(' ')
    date = ds[0][:3]+', '+ds1[2]+' '+ds1[1][:3]+' '+ds2[1]+' '+ds2[2]+' '+ds2[3]
    return date
def getInfo( ):
    f = open('/var/www/war3/info', 'rb')
    info = pickle.load( f )
    f.close()
    return info

def handler(req):
    req.content_type="Text/xml"
    req.send_http_header()

    t = os.path.getctime('/var/www/war3/info')
    pubdate = time.asctime( time.gmtime(t) )

    body ="""<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>Frozen Throne - Kalimdor Tracer</title>
        <link>http://cybershin.x-y.net/tt/</link>
        <description>누가누가 달렸나 모니터링 시스템</description>
        <language>ko</language>
        <pubDate>%s</pubDate>
        <generator>dsp generator</generator>""" %pubdate
    footer = """
    </channel>
</rss>"""
    info = getInfo()
    for i in info:
        user, level, date = i
        date = conv(date)
        level = level.replace('l','l ')
        link = url_head + user
        body += """
        <item>
            <title>%s</title>
            <link>%s</link>
            <description>%s, Last Ladder Game : %s</description>
            <author>(%s)</author>
            <guid>%s#%s</guid>
            <pubDate>%s</pubDate>
        </item>"""%(user, link, level, date, user, link, re.sub(' ','',date), date )
        # Sat, 18 Apr 2009 00:15:00 +0900
    body += footer
    req.write( body )
    return apache.OK


5. 성공적으로 실행되면 브라우저상에서 다음과 같이 잘 출력되는 것을 볼 수 있으며,
hanrss, outlook 등으로 연결해서도 잘 되는 것을 확인할 수 있습니다.

Frozen Throne - Kalimdor Tracer
누가누가 달렸나 모니터링 시스템
     
alpakook
Level 12, Last Ladder Game : Sat, 09 May 2009 1:54 AM
dspshin
Level 6, Last Ladder Game : Fri, 08 May 2009 12:40 AM
soudz
Level 22, Last Ladder Game : Thu, 23 Apr 2009 12:58 AM
milkelf
Level 9, Last Ladder Game : Sun, 03 May 2009 8:20 PM
sacrea
Level 2, Last Ladder Game : Sun, 12 Apr 2009 8:31 PM
again4you
Level 1, Last Ladder Game : Tue, 05 May 2009 6:49 PM

AND

이번 예제는 친구들이 워3를 했나안했나 체크해서,
rss로 제공해 주는 rss feed generator입니다. ㅎㅎ

1.
저는 Python으로 할 것이므로 mod_python을 설치/설정합니다.
당연히 PHP등 다른 언어 사용해도 무방.
> 방법 : http://cybershin.x-y.net/tt/188 참고.

2.
이 예제는 특정 사이트를 모니터링하며 해당 정보가 업데이트되면 RSS로 알려주는 예제입니다.
고로 Request가 올때마다 특정 사이트를 읽어서 답하면 너무 늦으므로 프로세스를 2개로 나눠서 실행합니다.
즉, 정보 수집을 맡는 Crawl.py 와 RSS결과를 반환해 주는 rss.py로 분리.

3. Crawl.py는 다음과 같습니다.
crontab 등으로 하루에 몇번만 실행시키면 됩니다.


#!/usr/bin/python
# -*- coding: utf-8 -*-

import urllib2, re, pickle, sys, time
from BeautifulSoup import BeautifulSoup

users = [
'alpakook', 'dspshin', 'soudz', 'milkelf', 'sacrea','again4you'
]

url_head = "http://asialadders.battle.net/war3/ladder/W3XP-player-profile.aspx?Gateway=Kalimdor&PlayerName="

def getInfo( user ):
    url = url_head + user
    contents = urllib2.urlopen(url).read()
    soup = BeautifulSoup( contents )
    B = soup('b', {'class':'small'})
    date = ''
    for b in B:
        if str(b).find(':')>-1:
            date = b.contents[0].strip().encode('ascii')

    level = ''
    lv = soup('div', {'style':"Z-INDEX: 200; LEFT: 75px; POSITION: relative; TOP: -25px"})
    if len(lv)>0:
        body = str(lv[0])
        sp = body.find('Level')
        ep = body[sp:].find('<')
        level = body[sp:sp+ep].strip()
        level = re.sub('\s', '', level)

    return level, date

if __name__=="__main__":
        print sys.version
        print 'run crawl.py : '+ time.strftime("%B %dth %A %I:%M ",time.localtime())
        info = []
        for user in users:
                try:
                        level, date = getInfo(user)
                except:
                        print sys.exc_info()
                else:
                        print user, level, date
                        info.append( (user, level, date) )

        #print info
        f = open('/var/www/war3/info', 'wb')
        pickle.dump( info, f )
        f.close()



>>> 나머지는 다음 글에...


AND

최근 근황

잡담 2009. 5. 7. 22:34
최근에는 의외로 바쁜 나날을 보내고 있습니다.

"자율출근제"라는 제도가 생겨서 회사 외부에서 보기에는 천국인것으로 보이시겠지만,
아무리 시스템이 바뀌어도 사람들이 시스템에 적응하려면 시간이 좀 걸릴 것으로 보입니다.
아직은 자율출근제를 소화할 수 있는 문화나 의식이 정착되지 않은 것 같네요.

아무래도 윗분들이 보기엔 언제 출근하고 퇴근하는지 파악이 힘드므로 일을 안하는 것으로 밖에 안 보이는 듯 합니다. 결국 사원들 입장에서는 "야근비만 없어진 꼴"입니다. 차차 정착되길 바래야 겠죠 ^^
머 회사의 거시적인 상황은 이렇구요. 부서 상황은 원체 다이나믹해서 생략합니다.

회사 이외의 활동은, 현재 의기투합한 두 분과 함께 작업하는 게 있는데 이번 달에 완료되어서 다음 달이면 결과가 가시화 될 듯합니다.  이 결과의 부산물로 오래간만에 잡지에 기고도 하게 되었습니다. 먼 옛날, 중학교 때(고등학교때 인지 가물가물... 원고료로 모두 북두신권을 산 기억이...) 마이컴이라는 잡지에 dr.halo라는 드로잉툴 비슷한 프로그램과 그에 대한 글을 낸 기억이 있는데, 그 후로 처음이네요... ^^

조만간 아웃풋이 나오면 다시 알려드리겠습니다~ 혹은 이벤트를 할 지도~~ :)
AND

VLUU WB500

개발 2009. 4. 18. 00:15
이번주 목요일에는 오래간만에 예전 AceDB팀 멤버인 우책임님과 홍책임님을 만났습니다.
오래간만에 뵙고 이야기 나누니 예전에 db팀에서 폐를 많이 끼친 생각도 나고, 다른 분들의 소식도 들을 수 있었습니다 :)

재미있는 소식도 있었는데요.
AceDB가 탑재된 제품 중, 저희 이름을 확인할 수 있는 제품이 나왔답니다.
바로....  VLUU WB500.



PC에 연결해서 db file을 까보면 초반에 만든 사람들의 이름이 새겨져 있는 사실을 확인할 수 있습니다.
잘보면 제 이름도 들어 있답니다 ㅎㅎ.

영화 끝나면 나오는 '만든 사람들'처럼,
카메라 바깥에 적어놔야 찾기 쉬운데, 찾기 어려운데 적혀 있어서 기쁘면서도 아쉽습니다. :)
AND

금주에 가장 재미났던 일은,
월요일에 제 워크3 영원한 맞수인 soudz씨와의 대전이었습니다.
저는 베넷을 거의 안하지만, soudz씨는 요즘 랭커에 오를 정도로 칼을 갈고 있었죠.

그 수련의 성과를 확인할 겸, 장어쏘기 타이틀을 걸고 1:1 매치를 했습니다.
4전을 했는데, 우선 첫번째 결과입니다.

1주즈음 전에 한 게임에서 초반러쉬에 당한 기억이 있어서,
이번에는 초반에 강하게 오면 2워로 방어하려고 벼르고 있던 찰나...
역시나 강하게 초반 압박이 들어오는 군요.
데몬헌터가 죽을뻔 하긴 하지만, 겨우겨우 어떻게 막아냈습니다. 훅훅...



그 약간의 사냥후에,
홀업 완료후 1로어,1윈드 추가하고,
중립영웅상점이 없으므로 아쉬운대로 키퍼 추가.
상점에서 보존스태프 구입.
약간 오버스러웠던 2워 중 한기를 일으키고 적진으로 전진했습니다.





적진에서 싸웠으면 승리를 확신할 수 없는 병력이었지만,
중간에 도중에 만나 윈드라이더 다수 잡고, 블마까지 인탱글 후 1.4로 알터로 보냈습니다.
생각보다 첫판은 쉽게 승리를 따냈네요.



이후 이어질 2,3,4차전에서는 정말 힘겹게 어거지로 경기를 했습니다.
추후 시간나면 포스팅하겠습니다~
AND