2018년 11월 7일 수요일

Python module - CL tool #1



아직 python 답게 사용하지 못함...
익숙하지 못함...
코딩양도 적어 쉽게 익숙해지기 어려움...
그래도... 작은 툴이라도 서툴게 만들어 사용할 수 있으니 다행...


import re


def str2set(cls):

    CL = re.compile(r'\w+')

    clset = set()

    for match in CL.finditer(cls):

        cl = match.group()

        clset.add(cl)
    return clset

def set2str(clset):
    clstr = ''
    for cl in clset:
        clstr += str(cl)
        clstr += ','
    return clstr[:-1]

def check_cl(cl1, cl2):
    '''
    cl1 : ,로 구분된 cl list
    cl2 : ,로 구분된 cl list
    동작 : cl1의 각 cl을 확인하여 cl2에 포함되어 있지 않은 cl을 list up함.
           즉 cl1 - cl2
    return type : set
    '''
    CL = re.compile(r'\w+')
    cl1set = str2set(cl1)
    cl2set = str2set(cl2)
    return cl1set - cl2set


def make_cl(eur_cls, add_cls='', sub_cls=''):
    '''
    return type : set
    '''
    eurclset = str2set(eur_cls)
    addclset = str2set(add_cls)
    subclset = str2set(sub_cls)
    #
    for cl in addclset:
        eurclset.add(cl)
    result = eurclset - subclset
    #
    return result

def main():
    with open('cl_list.txt', 'rt') as f:
        for line in f:
            eur_partials = re.findall('^eur_partials\s*=\s*([\d,]*)', line)
            if eur_partials != []:
                break
        for line in f:
            kor_partials = re.findall('^kor_partials\s*=\s*([\d,]*)', line)
            if kor_partials != []:
                break
        for line in f:
            add_partials = re.findall('^add_partials\s*=\s*([\d,]*)', line)
            if add_partials != []:
                break
        for line in f:
            sub_partials = re.findall('^sub_partials\s*=\s*([\d,]*)', line)
            if sub_partials != []:
                break

        eurclset = str2set(eur_partials[0])
        korclset = str2set(kor_partials[0])
        addclset = str2set(add_partials[0])
        subclset = str2set(sub_partials[0])

        diff1 = eurclset - korclset - subclset
        diff2 = korclset - eurclset - subclset

        for cl in addclset:
            eurclset.add(cl)
        resultlist = list(eurclset - subclset)
        resultlist.sort()

        print('eur_partials = %s' % eur_partials[0])
        print("\n")

        print('kor_partials = %s' % kor_partials[0])
        print('\n')

        print('add_partials = %s' % add_partials[0])
        print('\n')

        print('sub_partials = %s' % sub_partials[0])

        print("------------------------------------------")

        print('1. EUR - KOR : ')
        print(set2str(diff1))
        print('\n')
        print('2. KOR - EUR : ')
        print(set2str(diff2))
        print('\n')
        print('3. New CL list   : ')
        print(str([int(x) for x in resultlist]).replace(', ',',')[1:-1])

if __name__ == '__main__':
    main()



아래는 위 내용으로 in/out을 복사하려니 그래서
사용하는 text file에 바로 output을 넣도록 바꾸었음.

오탈자가 나서 인식을 못해 add등이 안되도 알 수가 없어서
간단한 오류 검사도 추가함...

import re
from P4 import P4
CLLIST = 'cl_list.txt'
ENC = 'utf-8'
def p4con():
    p4 = P4()
    p4.user = 'chinst'
    p4.password = 'ckaRo$9697'
    p4.port = '165.213.202.46:1716'
    p4.client = 'KRSW_AND_CHINST_TRELTE_SERIES7'
    depot = '//PROD_PEACE/STAR_STAR2_CROWN/FLUMEN/...'
    p4.connect()
    return p4
def p4discon(p4):
    p4.disconnect()
def str2set(cls):
    CL = re.compile(r'\w+')
    clset = set()
    #
    for match in CL.finditer(cls):
        cl = match.group()
        clset.add(cl)
    return clset
#
def set2str(clset):
    clstr = ''
    for cl in clset:
        clstr += str(cl)
        clstr += ','
    return clstr[:-1]
#
def match_comment(line):
    temp = re.findall('^\s*#(.*)', line)
    if temp != []:
        return True
    return False
#
def matchcls(base, matchstr, line):
    match = False
    temp = re.findall('^\s*'+matchstr+'\s*=', line)
    if len(temp) > 0:
        match = True
    temp = re.findall('^\s*'+matchstr+'\s*=\s*([\d,\s]*)#{0,1}', line)
    if temp != []:
        if base != '':
            base += ','
        base += temp[0].replace(' ','').replace('\n','')
    return match, base
#
def getcls():
    e = k = a = s = m = orgstr = ''
    with open(CLLIST, mode='rt', encoding='utf-8') as f:
        #
        ln = 0
        while(1):
            line = f.readline()
            ln += 1
            orgstr += line
            if line == '' or line[:13] == '# end of data':
                break
            temp = []
            #
            temp = re.findall('\s*', line)
            if temp[0] == line:
                continue
            temp = re.findall('^base\s*=\s*([\d]+)', line)
            if temp != []:
                basecl = temp[0]
                continue
            # 
            match = mt = False
            mt, e = matchcls(e, 'ref_partials', line)
            match |= mt
            mt, k = matchcls(k, 'cur_partials', line)
            match |= mt
            mt, a = matchcls(a, 'add_partials', line)
            match |= mt
            mt, s = matchcls(s, 'sub_partials', line)
            match |= mt
            mt, m = matchcls(m, 'must_partials', line)
            match |= mt
            match |= match_comment(line)
            if match == False :
                print('Error in line #%d' % ln)
    return orgstr, basecl, e, k, a, s, m
#
def putcl(orgstr, diff1, diff2, basecl, newcllist, underlist):
    result_str = '------------------------------------------\n' +         \
    '1. REF - CUR : (refclset - curclset - subclset)\n' +                 \
    set2str(diff1) + '\n\n' +                                             \
    '2. CUR - REF : (curclset - refclset - addclset)\n' +                 \
    set2str(diff2) + '\n\n' +                                             \
    '3. New CL list\n\n' + 'Base : ' + str(basecl) + '\nPartial : \n' +   \
    str([int(x) for x in newcllist]).replace(', ',',')[1:-1] + '\n\n' +   \
    '***** CLs under the BASE CL *****\n' +                               \
    str([int(x) for x in underlist]).replace(', ',',')[1:-1] + '\n'      
    #
    with open(CLLIST, mode='wt+', encoding='utf-8') as f:
        f.write(orgstr)
        f.write(result_str)
#
def update():
    #
    orgstr = ''
    basecl = 0
    #
    orgstr, basecl, eur_partials, kor_partials, add_partials, sub_partials, must_partials = getcls()
    #
    eurclset = str2set(eur_partials)
    korclset = str2set(kor_partials)
    addclset = str2set(add_partials)
    subclset = str2set(sub_partials)
    mustset  = str2set(must_partials)
    #
    diff1 = eurclset - korclset - subclset
    diff2 = korclset - eurclset - addclset
    #
    korclset = korclset.union(eurclset)
    korclset = korclset.union(addclset)
    resultlist = list(korclset - subclset)
    mustlist = list(mustset)
    underlist = [ x for x in resultlist if int(x) < int(basecl) ]
    newcllist = [ x for x in resultlist if int(x) > int(basecl)]
    underlist.sort()
    newcllist.sort()
    mustlist.sort()
    for cl in mustlist:
        if cl not in newcllist:
            newcllist.append(cl)
    #
    putcl(orgstr, diff1, diff2, basecl, newcllist, underlist)
def main():
    update()
#
if __name__ == '__main__':
    main()

2018년 10월 29일 월요일

181026-27.여수 경도 CC 1박 2일


정말 정말 간만에 라운딩 가는 날...

앞 뒤 화창하고 가는 날 비 예보...

그래도 비가 지나갈 수 있을거라 희망을 가지고 출발








 오... 칠만해... 해도 없고... 좋아...

그런데...

3홀 치고 나니 비바람이 너무 심하다...

이러다 골프는 둘째치고 몸도 상하겠다싶어 철수하기로 함.

카트 및 캐디비는 9홀비용 다 내고...

그린피만 여행사 통해서 3홀치만 지불하는 것으로...

아마 ... 그렇게 한다고 들은거 같은데... 총무가 결산하고 알려주겠지...


짐을 정리하고 4시 5시부터 술을 먹으며 제주에서 하는 KLPGA 보며 떠드는데...

해뜬다... ㅠㅠ

아직도 치는 사람들도 보이고...

아쉽지만... 그 사이 비맞고 난리쳤을것을 생각하면...

중간에 취소하길 잘했다... 잘했을거다... 그래, 그래...




젖은 옷가지들은 방 하나에 에어콘을 틀어놓으니 금방 다 말랐다.


저녁으로는 맛난 회도 먹고


이건 모더라...
 


 숙소에서 술먹고

저녁먹으며 반주먹고

하모 샤브샤브 먹으며 술먹고 

다시 숙소로 돌아와 또 마시고... 

클럽은 괜히 가져왔나보다... ^^;



그래도 다음날을 날이 화창하다...

벙커투어(?)를 하면서 멘붕이 왔지만

즐거운 라운딩이 었다.




돌아 오는 길에는 휴게소에서 노고단도 멀리서 감상하고...

돌아온 후 주말에는 또 비.....

이번에는 비로 시작해서 비로 끝나는 라운딩인가 보다...












2018년 10월 25일 목요일

181021.181025.자전거 자가 피팅


장경인대염 및 페달 효율 향상을 위해 자가 피팅 시작

181025.
오른발 포인트를 발가락쪽으로 조금 이동
안장은 발꿈치로 페달이 겨우 닿을 정도로 높임.

181021.
두발 다 자전거에 가깝게 조정
왼발은 클릿을 좀 위로 이동 ... 왼 다리가 좀 짧다고 생각
그리고 약간 바깥을 향하도록 조정함.

2018년 10월 21일 일요일

181021.스윙 정리


어드레스
  • 드라이버시에는 손을 살짝 위로 잡기 (백스윙시 몸의 중심이 앞으로 넘어오는 것을 방지)
  • 그립은 오른손 엄지, 검지도 그립을 잡고 놓치지 않도록 잡는다.

백스윙
  • 허리 회전 느낌을 가지되 힘든 느낌이 아님
  • 오른발에 체중이동하면서 오른쪽으로 던져 테이크백하고 (하나) 
  • 오른발 축으로 우회전 하면서 코킹하는 느낌이 손에 들어가도록 하고 (둘)
  • 백스윙 탑에서는 무게 중심이 오른쪽 뒤에 있으면서
  • 왼팔이 몸에 연결된 느낌을 가지고 끝나야 함.
  • 머리가 앞으로 나가지 않도록 하자.

*** 힌징과 허리 밑에서 스윙이 이루어지도록 한다.

다운스윙
  • 왼발 앞쪽으로 체중이동하고
  • 몸통스윙하며 다운 스윙
  • 코킹한 손에 느낌이 오도록 하고 오른손이 역전되어 헤드가 튀어나가게 한다.

팔로우스루
  • 백스윙과 대칭되도록

181021.한강인증 + 재활





라이딩 거리 : 약 41km

온도 : 11도로 시작해서 15도로 끝남.
복장 : 팔토시, 니워머, 반팔, 반바지, 바막, 반장갑

        (10도 밑에서만 라이딩하면 긴팔, 긴바지, 긴장갑으로...)


반포 제2주차장
여의도 인증소
반포돌아와서 잠수교 넘어
똑섬 인증소
광진교 넘어
광나루 인증소 (도장 안찍음... ㅠㅠ)
반포 제2주차장

38km 넘어가니 다리가 또 뻑뻑해짐
지나가시는 분들 피 좀 빨면 좀 괜찮아짐...

나머지는 어떻게 한담... 무릎도 안 좋고... ㅠㅠ


오늘 페달링 컨셉... 보통때 돌리기, 언덕은 10시~2시, 피빨때/쉴때 당기기...
chrislee이재일 사이클아카데미에서 배운데로...
https://www.youtube.com/channel/UC84PXCDfPdq_3yYbxG4hPOg


2018년 10월 7일 일요일

181007.아라뱃길 왕복



인증 도장 2개 추가... (근데 왜 null님이라 나오는걸까...)
---
계속 무릎부상 등으로 좋은 경치도 못보는 것 같고,
그동안 아라뱃길 서해갑문에서 시작해 종주길도 가보고 싶었는데 마땅히 진행을 하지 못하고 있다가 한강갑문에서 시작해서 아라뱃길 왕복하고 여력이 되면 여의도도 다녀오려고 집을 나섰다.


새로 구입한 핼멧, 고글 등은 가방에 넣어 한번에 이동하고

자전거는 뒷 좌석에 고이 넣어 출발...
지난 번처럼 휠을 두고 갔다가 돌아와 다시 가져가는 실수는 범하지 말자.. ㅠㅠ



무릎은 테이핑을 하고 갔는데... 제대로 역할을 해줄지 모르겠다...
처음 하는 테이핑이라 제대로 역할을 못할 수도 있을 것 같은데...


 출발지에 도착하니 공사장 주변의 주차할 곳도 있고 생각보다 주차할 수 있는 공간은 좀 있다. 나는 화장실이 급해 눈에 보이는 여객터미널 근처에 주차를 하고 ...
나중에 복귀해서 보니 그 근처에 아울렛도 크게 있고 당일 바자회로 복잡거리는 상황이었음.

자전거를 조립해 출발준비 완료


보이는 배가 크루즈여객선...
아직 아침이라 조용한데, 복귀해서는 계속 크루주 출발시간 등을 안내하고 있었다.

앞에 보이는 아울렛 좌측이 여객터미널...
그 앞으로는 요트 등을 정박시킬 수 있는 선착장도 있고 그 앞으로는 관련 건물들이 지어지고 있었다.

금방 출발지인 한강갑문 인증센터를 찾을 수 있을 것 같았는데...
지도에서 찾아간 곳은 그 건너편이었다...
두리번 거리며 주변을 찾아보니 강건너에 자전거들이 다니는 것을 보고 다리를 건너 겨우 찾아왔다...

여기서 앱으로만 인증하고 수첩에는 도장을 찍지 않고 그냥 출발했음.
왕복해서 돌아와 수첩에 다시 도장을 찍긴 했지만...
덜렁거리는 성격을 어떻게 고치나... ㅠㅠ


 드디어 아라뱃길 서해갑문으로 출발...

지도를 보지 않아 뭔지 모르지만, 기암절벽도 보이고
경치도 좋고 날씨도 좋고... 무릎만 좋으면 좋겠는데...


크게 무리하지 않고 사진찍어가며 서해갑문 도착.
여기서 중국계 미국인이 subway를 물어와서...
나는 sandwich 가게를 찾냐고 물어봤다... ㅠㅠ
가장 가까운 검안역을 지도에서 찾아 보여주고...
그 미국인은 목사인지 (안 물어봤네... ;;) 내 아픈 다리를 위해 기도해 주었다...
한국어 발음도 꽤 좋던데... (감사합니다. 안녕하세요 ...)

다시 차가 있는 곳으로 출발 ...
나름 27~30km/h까지 속도를 올려본다.
몸이 버텨주는 것 같기도 하고...

한강갑문 인증소에 도착해서 미처 찍지 못한 인증도장을 찍고
몸 상태를 보니... 10km 왕복해서 20km정도 더 갈 수 있지 않을까 싶다.
한강 방향이니 식사도 해결할 수 있을 것 같고 (가지고 간 행동식인 영양갱은 이미 소진) ...


그런데... 라이딩하는데 미쳐 편의점 등은 다 지나쳐 버리고...
배고파 죽기 직전이 되자 다리에 힘도 빠지고...
무릎 통증도 오고... ㅠㅠ
장갑까지 찢어져 있네...
퍼터도 사고 핼멧도 사고 고글도 사서... 다음 달에 찢어져 주었으면 더 좋았을텐데...
아직 쓸만하니 버텨 보자...

강건너에는 불이 난거 같은데...
복귀해서 보니 화전에 불이 크게 났다고 하는 것 같다.
다들 자전거에 내려 사진을 찍느라 바쁘다... 다들 기자인가?
(나를 포함해서... ^^;)


기력이 빠져 한강갑문인증센터의 자판기에서 커피 캔 하나 뽑아 먹는다.
연장통에 1000원짜리 몇개 넣어 가지고 다닌게 도움이 되네...

돌아오는 길에는 휴게소에서 큐브스테이크 덮밥을 먹고
군밤, 군고구마를 팔고 있어 어떤 것을 먹고 싶냐고 마나님 전화했더니 둘 다 사오란다...
하나 고를 줄 알았더니... 알고보니 우리 마나님은 큰 손이었던 것이다.

앞으로는 거리는 모르겠고 기어를 절대 올리지 말고 타야겠다...
적어도 올해는...
이러다가 무릎 치료가 끝나지 않을지도... ㅠㅠ
아프지 않고 탈 수 있는 분들은 행복하다는 것을 알아야 함... ^^


P.S.
새로 산 핼멧 ... 가볍고 좋음. 버섯돌이 면한듯 !!!
새로 산 고글 ... 역시 가볍고 좋은. 라이딩 끝날때까지 한번도 벗지 않음.
                    착용감도 좋고 시야도 깨끗하고 넓게 확보되고 !!!

2018년 10월 3일 수요일

180930.구매.헬멧 및 고글


아래와 같이 주문했으나...

- UVEX 정품 헬멧 우벡스 콰트로 XC 화이트
- 오클리 죠브레이커 폴리쉬드 화이트 프리즘 사파이어 스노우 아시안핏



10/2 전화가 와서 헬멧이 품절이라고...


옆의 레이저5로 보내주기로 했다. 
아래 물건이 좀 많이 남았나... ??? -.-;

디자인이 어떨지 써봐야 알겠다.
버섯돌이만이라도 피할 수 있다면...



181003.펑크, 181029. 튜브 교체

181029.튜브 교체


아래 펑크 패치 이후 해결이 안되어 사 두었던 튜브를 사용했으나 하루 정도 후에 바람이 빠짐.
반나절 라이딩하는데는 문제가 없었으나 바람이 많이 빠져 커브시 사고를 당할 수도 있는지라...
오늘 평일 휴가를 맞아 자전거 구입했던 샾에서 점검...

튜블리스 벨브를 가지고 가지 않아 튜블리스 타이어 점검은 하지 못했으나...
실란트가 뿜어져 나오지 않는 등을 보아 림 변형 등으로 예상됨.

교체했던 튜브는 벨브 뒷쪽 공장에서 작업한 부위에 아주 작게 바람이 새어나오고 있어
패치 사용도 어려워 새로 튜브를 구입하여 교체함.
벌써 튜브 3개를 사용했으니... 흠.. 한번 더 문제가 생기면 튜블리스 타이어를 새로 사서 넣는게 좋을 것 같음.
실란트도 앞 뒤 넣어주고...

그리고, 디스크가 약간 변형이 되어 브레이크 패드에 살짝 스쳐지나가고 있어
디스크 변형도 잡아 주심...


당분간 타이어는 또 문제가 생기지 않겠지? ^^; 


181003.펑크



 오늘 휴일을 맞아 재활라이딩이지만 바람 쏘이러 아침부터 라이딩을 나섰는데...
탄천 진입하여 신세계근처에서 그만 펑크가 났다...

사실 몇일전부터 바람이 빠져 공기주입하고 다음날 또 공기주입하고... 벨브나사가 제대로 안조여 있는 것 같아 다시 조이고 공기를 주입하고 나왔는데...

평지에서 왠지 좀 힘든 감이 들더니... 심하지 않은 커브를 돌아나가다 낙차할 뻔했다. 타이어에 공기가 없으니 제대로 버텨주질 못해서 ㅠㅠ...

도로에서 벌어진 상황이었으면 어쨌을까...
앞으로는 좀 더 타이어 상황에 관심을 가지고 라이딩에 나서야 할 것 같다...

튜블리스에서 펑크도 없는데 바람이 세는 부분을 잡지 못해서 튜브를 넣었던 앞 바퀴였는데...  튜브라 펑크패치를 붙여볼까 해서 공구통을 들여다 보니 타이어 주걱이 없네... ㅠㅠ

튜블리스를 맨손으로 어떻게 분해한담...
다 포기하고...
공기만 다시 주입해서 복귀했다.

집에와서 타이어에 다시 공기를 빵빵하게 넣고 점심식사 후에 보니 살짝 공기가 빠진 것이 확인되었다. 간만에 펑크패치 함 해보려고 휠을 분리해 냈다.

그런데... 처음부터 난관이다...
튜브에서 샌 바람이 튜블리스 타이어에 들어간 것 같다.
튜브밸브를 열어 바람을 다 뽑아냈는데도 타이어가 빵빵하다...

몇차례 더 공기를 뽑아내고 비드부분을 눌러 튜블리스 타이어 내의 바람까지 뽑아내고서야 홀쭉해진 타이어를 볼 수 있었다.


클린처도 타이어도 잘 분해하지 못하는데... 튜블리스 타이어를 어떻게 분해하나... 걱정이 앞서는데... 역시나 수십분간 진땀을 흘리며 해보다가 결국 타이어 주걱을 동시에 두곳에 넣어 비드를 들어내고 여기서 부터 타이어 한쪽 비드를 모두 들어내는데 성공했다...

다음에 또 분리해야 하는 경우가 생긴다면 더 잘 할 수 있을지 모르겠다. 크게 다르지 않을 것 같다.



펑크 위치는 잘 보이지는 않는데...
바람을 넣어보니 공기가 새는 부분이 나온다. 바람을 많이 넣으면 구멍도 살짝 커져서 육안으로도 쉽게 볼 수 있다.

예전에 새로 구매한 펑크패치를 꺼내 보니 접착제 없이 스티커 형태로 붙이는 것이다. 더구나 사포도 철로 되어 반영구적(?)으로 사용할 수 있을 것 같다.

아뭏든, 이전 낡은 펑크패치의 악몽이 반복되지 않기를 바라면서 작업을 시작했다.


펑크가 난 부분은 물티슈로 깨끗하게... 닦으려 했지만 잘 안 닦인다...
이전에 튜블리스내의 실란트를 다 닦아 내었다고 생각했는데... 튜브 상태가 말이 아니다...  물티슈로 닦고 사포질도 했는데 크게 상태가 좋아지지는 않은 것 같다.

아뭏든, 열심히 닦고 갈았으니 보이는것과 달리 접착력을 담보할 수 있을거라 생각하고 패치를 붙이고 여기 30초 저기 30초 조기 30초씩 열심히 눌러주고...
살짝 공기도 넣어 보았는데 아직까지는 괜찮다... (타이어 조립전에 튜브에만 공기 주입시에는 너무 많이 넣지 말자... 타이어는 신축성이 많아 풍선처럼 커지는데 패치는 그만큼의 신축성을 가지고 있지는 못한거 같다... )


일단, 반정도는 성공한 것으로 보이니 튜브와 타이어를 다시 조립한다.
조립은 분리보다 매우 간단하게 끝났다.

30여분간 내가 제대로 한건지 다른 여러 게시글과 유투브를 찾아본다.
아직 크게 잘못한 것은 없는 것 같은데...
이전 펑크패치 사용시 공기만 주입하면 다시 터져버리는 트라우마가 있어 미덥지 못하다.

그래도 30분 이상 지났고 어느 게시글에도 바로 공기주입하면 안된다는 글이 없어서 성급한 마음에 공기를 주입했다... 3번... 펌프질...

그리고, 더 참지 못하고 자전거에 휠을 장착하고 105 psi까지 넣었다...
괜찮을까? 바로 타는 건 좀 그렇고... 이따 잠자기 전에 바람이 빠졌는지 함 봐야겠다.

참고로 튜브에서 빠진 공기가 튜블리스에서도 잘 빠지는 거 보면 분명 비드에 문제가 생긴게 아닌가 싶다... 다시 튜블리스를 사용하려면 타이어를 바꿔야 할 것 같다.




2018년 9월 9일 일요일

180909.퍼터 구매



드디어 퍼터 구매

오디세이 Works 7
작년 모델로 올해 모델과 색상만 다르다고 해서 약간 할인 받아 구매함.

신나서 와이프 커피도 사주고 수다도 떨고 왔음.




9/11 퍼팅 연습기도 구매함.


8만원정도에 구매했는데 퍼티스트는 써보지 않았지만
나름 괜찮은 것 같음...
단점 : 1m 미만은 인식하지 못함. - - 이 뜨거나 Err이 뜨거나 ...




200926.가오리코스 라이딩

9/26 골절인지 아닌지 확인 안됨. 이후 미세골절여부 확인 핸드폰을 드는 것도 어려움 9/29 x ray 다시 찍지 않고 이후 재 방문 요청 ...