bicycle2013. 7. 15. 11:30

로드 바이크 부품이 필요해서 국내 사이트에서 검색하니, 149,000원 뭐 이리 비싸??

그리하여 해외 사이트에 검색하니, 독일 bike24.de에서는 58,000원 이다.

+ 추가로 소모품 6.5만 정도 구매

배송비 포함하니 총 비용이 15만원. 15만원 넘으면 관세 + 부가세를 내야 할 수 있으니 주의 바람

7월 1일 주문 : 비자, 마스터 카드만 있으면 주문 가능, 뭐 결재도 어렵지 않다, 카드 번호, 유효기간 카드 뒤의 3자리 숫자만 넣으면 ok

                    주문이 완료 되면 결재가 잘 되었고, 어떤걸 주문했는지, 어느 주소로 배송 될건지에 대한 메일이 온다. 

                    한국으로 배송비는 19유로, 거의 3만원에 가까운돈이다.

7월 4일 : Bike24에서는 얼마나 빨리 배송이 시작 될건이지에 대한 아이콘이 있는데, 이에 따르면 1~2일 걸린다고,
            하지만 목요일이 지나도 배송시작이 안되서 문의 메일을 보냈다. "왜 배송 안되는 거야?"

7월 4일 : 오늘 (목요일) 배송 시작될 거라고.


7월 5일 : 결국 하루 지난 금요일날 배송이 시작됨. 배송이 시작되면 배송 정보가 담긴 메일이 온다.

             독일 DHL 홈페이지에서 확인 할 수 있다.

7월 6일 : 독일 공항 수화물 센터에 도착. 하지만 더 이상 진전이 없다.
             토요일 오후에 배송 로그가 업데이트 되었는데, 한국에 도착하면 우체국으로 이관 될거라고?
             DHL 특송이 아니라? 급한 마음에 전화를 해본다. (다행이 토요일에도 커스텀 센터를 운영한다.)

             "해외 배송이 DHL 이 아니였어?"

             "독일내에서만 DHL이고, 해외는 국제 소포로 변경된다"

             "알았어."

             사실 따지고 싶었지만 영어 실력도 안되고, 원래 그렇다는 뭐 어떻하나... 기다려야지.

( 배송 암흑기 배송 정보가 전혀 업데이트 안됨... )


7월 11일 인천 국제 공항에 도착. 

7월 12일 배송 완료.


한국에서 샀으면 29만원 정도 하는 부품 + 소모품을 15만원에 구매 할 수 있었다.



 


           

Posted by 평면우주
bicycle2013. 5. 7. 12:43

가민 엣지의 코스 기능은 처음 가는 곳을 갈때나, 임도를 돌아 다닐 때 매우 유용합니다. 남이 공유해 놓은 데이터를 엣지에 넣기만 하면 경로가 화면에 나타나고 그대로 따라 갈 수 있으니깐요. 특히 란도너스처럼 처음 가보는 장거리 코스를 라이딩 할 때 없어서는 안 될 기능입니다.

 

하지만 유독 엣지 500에서는 코스 기능이 문제가 많습니다. 2.4에서는 잘되던 코스 따라가기 기능이 2.8, 3.0으로 펌웨어가 업그레이드 되면서, 먹통이 되거나, 코스가 보이는 문제가 거의 항상 발생합니다.

작년 랜도너스를 참가하면서 문제 때문에 고생 했습니다.

( http://corearoadbike.com/bbs/board.php?bo_table=Menu03Top1&wr_id=175996&sca=&sfl=&stx=&sst=&sod=&spt=0&page=18&page_mode=)

 

엣지 500 문제는 고질적인 문제였고 이미 해외 포럼에서도 불만과 수정을 요청하는 글들이 많이 올라왔습니다.

하지만 문제를 깔끔하게 수정한 펌웨어를 내줄 생각이 없어 보입니다. (아마도 하드웨어 문제일 가능성이 크네요 - 앞으로도 해결될 가능성이 낮다는 말입니다.)

 

엣지 800으로 업그레이드 하고 싶은 생각이 굴뚝 같지만, 엣지 500 사랑해 줘야 같아서 방법을 찾아 봤습니다. 펌웨어를 2.4 낮추는 방법이 있는데, 라이딩 데이터가 이상해 있다고 해서 포기했고, 화면 레벨을 120m 고정시키면 오류가 적어진다고 했는데 ~ 신통하지 않고, 그러다가 보게 GPS 데이터가 촘촘하면 오류가 난다는 글을 봤습니다. 하긴 가민에 저장된 예전 라이딩 기록으로 코스 기능을 사용하면 오류가 발생 했던 같습니다. (가민은 1 마다 로그를 기록합니다)

 

GPS Route Editor 이용해서 GPX 만들던지, 란도너스에서 제공하는 GPX 데이터들은 사실 GPS 포인트들이 듬성듬성한 편이죠. 서울 400km 랜도너스에서 제공하는 GPX 파일엔 포인트와 포인트 사이가 5Km 달하는 경우도 있습니다. GPS Route Editor 이용해서 GPX 경로를 꼼꼼하게 찍어서 만들 있는데, 400km 달하는 코스에 어느 세월에 점을 찍고 있겠습니까? 그래서 지점에 GPS 포인트를 만들어주는 프로그램을 만들기 위해서 조사를 하는 도중 GPSBabel이라는 프로그램을 발견하게 됐습니다.

( 지점 사이에 거리 구하는 공식 : http://avionics.tistory.com/tag/%EA%B1%B0%EB%A6%AC%EA%B5%AC%ED%95%98%EA%B8%B0)

 

지점 사이에 원하는 간격으로 트랙 포인트 (GPX) 넣을 있습니다. Interpolate between trackpoints 라는 기능인데 (http://www.gpsbabel.org/htmldoc-development/filter_interpolate.html) 지점 사이 직선상(실제로는 커다란 ) 시간, 거리 기준으로 포인트를 추가 합니다.

GPSBabel 프로그램이 UI 있는데 interpolate between trackpoints 기능은 원도우 창에서 선택할 없더군요.

명령어를 직접 입력 해줘야 합니다.

 

원도우 콘솔 ( 원도우키 + R 누르시고 cmd 입력) 실행 시키고 아래와 같이 명령어를 입력합니다.

 

E:\gpx>"c:\Program Files\GPSBabel\gpsbabel.exe" -i gpx -f s400.gpx -x interpol

ate,distance=0.035k -o gpx -F new_s400.gpx

 

distance=0.035k는 0.035km (=35m) 마다 점을 찍는다는 의미입니다.

 

성공적으로 프로그램이 실행되면 new_s400.gpx 생기는데 원본 gpx 파일 사이즈가 123KB인데, 결과 파일 사이즈는 719KB 대략 5배로 커졌습니다. GPS Route Editor 이용해서 확인을 하면 실재로 점들이 35m 마다 찍혀있는 확인 있습니다.

 

이렇게 만든 서울 400km 랜도너스 GPX 가지고, TCX 파일로 변경 가민 엣지 500 넣고, 랜도너스에 참가해 테스트를 해봤습니다.

 

결과는 코스가 사라지는 오류가 줄어 들었습니다. 그리고 사라진다고 해도 금방 화면이 바뀌면서 정상 코스를 그려 줍니다. 가민이 먹통이 되는 문제는 번도 일어 났습니다.

 

앞으로 많은 테스트를 해야 같지만, 앞으로 이와 관련해서 이런 저런 테스트를 해볼 가치가 있는 같습니다.



----- 내용 추가 2013.06.03 ------


6월 1일 천안 200km 랜도너스에, 이전 라이더가 탔던 로그를 받아서 (TCX 파일), 라이딩 했는데, 위에서 발생하는 문제가 계속 발생했습니다. 중요한 지점마다 궤적이 안 그려져서, 길 찾기가 힘들었네요. 





Posted by 평면우주
bicycle2013. 4. 25. 18:09

* 주의 cp2-3 코스에서 송산 CP 2에 대한 정보가 빠져있습니다. 로그만 믿다가 송산 CP를 지나치지 마세요.


1. 가민 엣지 500 사용자를 위해 waypoint 삽입 (좌회전 우회전)

2. 가민 엣지 500 version 3.0 에서 코스가 사라지는 것을 막기 위해서 트랙포인트 사이를 촘촘하게 만들었음 ( Interpolate between trekpoint)

3. 고도 정보 입력.

4. 로그를 6개로 나눔 

5. 속도를 평지 20km/h 로 맞췄는데 어떤 코스 파일에는 30km/h 되어 있음.

가민 트레이닝 센터를 사용해서 디바이스에 넣으세요.


* 배포자는 제공하는 코스파일에 대해서 어떠한 책임도 없음.


s400.zip


Posted by 평면우주
카테고리 없음2013. 1. 10. 14:22

Bike-discount.de 에서

22mm 50유로
25mm 53 유로
배송비 19유로

무관세 (15만원 이상이면 관세 대상이지만, 운 좋게 통과함 - 사실 자전거 부품이라서 무관세로 통과할 확률이 높음)

한국도착 총 17.7만원

한국 최저가, 아*트샾에서 22mm 11.5 만원 * 2 = 23만원




Posted by 평면우주
life2012. 10. 8. 13:04

쯤에 부산벙을 쳤습니다. 수원에서 자전거 타고 부산까지 가서 접시 먹고 돌아오기 !!

분들이 같이 가겠다고 말씀하셨고. 코스를 제가 짰습니다. 지방도 중심의 코스를요.

 

보통 부산까지 간다면 노포동 버스 터미널까지 가는걸 의미하는데, 해운대에 번도 가본 저는 해운대가 보고 싶어서, 해운대를 최종 목표로 정했습니다. ~

하지만 부산에서 수원 올라올 , 일요일 저녁이라서 버스에 자전거 실을 자리도 없을 까봐, 전성욱 과장님이 주신 부산->오산 코스를 바탕으로, 토요일 새벽 심야버스를 타고 부산으로 내려가서 거꾸로 올라오기로 합니다.

 

금요일 23 30 권선동 수원 종합터미널에 모였습니다. 정성구 선임님, 윤영중 수석님윤수석님 친구이신 김해철 수석님, 그리고 .




버스에 자전거 4 들어갈까? 걱정했는데. 들어가더군요.

 

심야버스를 타고 해운대로 출발합니다. 저는 버스에서 잤는데, 다른 분들은 잠을 설치셨다고….

그렇게 해서 그렇게 보고 싶던 해운대에 도착 했지만 새벽이라서 아무것도 보일 뿐이고, 광안대교의 멋진 야경을 보는 걸로 아쉬움을 대신 했습니다.




BIFF 라서 그런지 새벽인데도 사람들이 북적북적합니다.

여고생에게 부탁해서 사진 찍어달라고 해서 이번 부산투어의 처음이자 마지막 4 나온 단체 사진을 찍었습니다.





해운대 근처에서 대구 지리탕을 먹고 출발을 합니다.





깜짝 사이에 노포동을 지나, 부산 시내를 조금 헤매다가, 양산에 들어섭니다.



여기서 부터는 내리막이 이어지다가 평지, 복잡한 국도 이면도로를 신나게 질주합니다.

초속 2~3m 맞바람에도 불구하고, 성구선임님 앞에서 계속 끕니다.

사진 찍으려고 져지 주머니에 카메라를 꺼내면 어느새 멀리 도망가는 .





출발한지 대략 3시간 30 지난 경주에 도착합니다. 부산해운대에서부터 90km, 특히 양산 -> 경주 구간은 평속 29.1 주파를 했습니다. -_-;;




경주 하나로 마트에서 잠시 쉽니다. 잠시 같이 놀았던 경주개.

먹을거 손에 들고 있을 때만 말을 듣네요, 세상 사는 법을 아는 개였습니다.


 



영천으로 가는 가을을 알리는 코스모스가 옆으로 잔뜩 피었습니다.









점심 때가 되어 영천에 도착 합니다. 배가 고파서 영천 터미널 옆의 아무 식당이나 들어 갔는데





육회 전문점, 육회 비빔밥을 먹고 싶었는데 1인분에 17,000 너무 비싸서, 소찌개를 시켰는데,

이렇게 맛있을 수가!! 배가 고픈 것도 원인이겠지만, 원래 맛이 훌륭했습니다. 신선한 소고기를 바로 넣어줘서 그런지, 주력메뉴인 육회를 먹고 싶은 마음이 굴뚝같이 들었지만, 소화가 될까봐.. 패스 합니다.

다른 방에서 소찌개를 드시던 분은 토요일 새벽에 서울에서 출발해 혼자서 영천까지 왔다고 합니다.

타막 s-work, 듀라에이스 Di2, CCU 쓰시는 분이였는데, 부산까지 완주했는지 궁금하네요.




점심도 먹었으니, 문경으로 출발합니다. 문경까지 120km

지방도의 옆길은 논밭, 과수원입니다. 추수가 끝난 곳이 많기 때문에, 땅에 비료를 주는데, 비료가 다름아닌  돼지X 문경 까지 진한 X냄새를 맡을 수가 있었습니다.





장거리 라이딩에서 보급은 정말 중요합니다. 저는 신경을 썼더니 바로 봉크가….


 




문경에 도착해 저녁은 삼겹살 + 항정살로 먹고, 밤을 새고 갈까? 자고 갈까? 고민하다가, 어제 버스에서 제대로 자고, 맞바람에 힘들었기 때문에 문경에서 1박을 하기로 합니다.

영천 -> 문경은 117km 시간 4시간 30 걸렸네요.

 

문경에서 새벽에 일어나 김밥천국에서 라면 + 김밥을 먹고. 새벽 5 음성으로 출발.

생각해보니 경상도를 아직 빠져 나왔네. ~ 집까지는 160km 남았습니다.






차가 거의 다니지 않는 3 국도를 따라서 이화령 터널을 지나서 신나게 다운힐, 차가 다니는 국도를 지나서 괴산으로 향합니다. 새벽안개가 자욱하네요.







괴산 휴게소에서 잠시 쉬면서 독사진 찍어봤습니다.





이제 수원까지는 100km !!!

멋진 풍경 속으로 달려갑니다.









드디어 경기도 입성 !!!! 여전히 사진 찍으려고 카메라 꺼내면 어느새 도망가 있는 ...






미리내성지쪽 길과 용인 길이 있는데 미리내성지로 가기로 결정. 용인쪽에 오르막이 많아서 미리내쪽으로 갔는데 여기도 어김없이 오르막이 .

가다가 보니, 어디서 많이 보던 저수지 . 고삼저수지. !!







둥주선임님이 사진 찍은 처럼 멋지게 찍고 싶었는데 어깨가 찬조 출연했네요.




거의 왔다고 생각하면 "경기도 오산" 입니다.






.. ~ 이제 정말 거의 왔습니다, 정성구 선임님은 동탄쪽으로 빠지고, 나머지는 동탄에서 수원쪽으로 조금 헤매고 수원에 도착했습니다.

집으로 되돌아 오기, 이게 묘한 느낌이 듭니다, 멀리서 되돌아오는 라이딩은 해보지 않아서… 느낌이 적진에서 강하해서 돌아오는 . 그런 비슷한 느낌이었습니다. ㅎㅎ







거리 420km, 상승고도 2800m 평속 26.7km  무사고, 무펑크, 소중한 추억이 하나 생겼네요.

모두 감사합니다.



Posted by 평면우주
bicycle2012. 7. 10. 09:24

7월 정기 라이딩 뒤풀이 할 때 송진범씨께서 젖산 역치가 무엇이냐? 라고 물어 보셨습니다.

사실 저도 젖산이 몸에 분해되는 속도보다 보다 만들어 지는 속도가 더 빠를때 라는 것 밖에는 잘 몰라서 찾아 봤습니다.

 

일단 젖산 역치란? (한줄 요약: 운동 하면 젖산이 쌓이고, 이를 근거로 운동의 강도 기준을 알 수 있다)

http://ecybex.kr/you/3079

 

사실 정석은 피를 뽑아서 피 속에 있는 젖산을 측정하는 것인데(http://cafe.naver.com/cyclingproject/2630), 동호회에서 그럴꺼 까지는 없고, 대신해서 파워미터를 가지고 측정을 할 수 있죠, 그런데 파워미터도 없으면 그냥 심박계를 기준으로 측정할 수도 있습니다. 단 정확도가 점 점 떨어지는 단점이 있습니다. 저번 주 목요일날 GPS로 유명한 상오기님의 블로그를 참고로 해서 측정을 해봤습니다. 

http://sangogi.com/2656883

 

30분 TT를 해서 마지막 20분 평균 심박을 구해서 * 0.95를 해주는 방법을 이용했습니다. ( 허파가 튀어 나오는 줄 알았습니다. ㅋ ~)

 

이렇게 해서 젖산역치점을 찾아 내면 이를 가지고 자기의 심박존(zone)을 알수 있고.

 

Zone 1. LTHR 75% 이하: 회복주행
Zone 2. LTHR 75~85% : 하위 유산소심박수대
Zone 3. LTHR 85~90%: 상위 유산소심박수대
Zone 4. LTHR 95~100%: 젓산역치 바로 밑 심박수대
Zone 5. LTHR 100~105%: 젓산역치 바로 위 심박수대

Zone 1: 65% to 81% Recovery
Zone 2: 82% to 88% Aerobic or Endurance  
Zone 3: 89% to 93% Tempo
Zone 4: 94% to 100% Subthreshold
Zone 5a: 101% to 102% Superthreshold
Zone 5b: 103% to 105% Aerobic capacity
 
 
이를 가지고 라이딩 할 때 자기의 몸 상태 및 현재 어느 정도 강도로 자전거를 타고 있느냐를 알 수가 있습니다.
훈련 계획 및 라이딩 계획을 세울 수도 있죠.
 
예를 들어 600km 랜도너스 라이딩을 한다고 한다면 zone 3를 넘어가면 후반에 퍼질 수가 있으니 이에 맞춰서 라이딩을 하거나 아니면 리커버리 모드로 주행을 하면서 회복을 할 수 있습니다.

 

 

Posted by 평면우주
study2012. 6. 26. 15:24

구글맵에서는 전세계의 고도 데이터를 API로 제공한다. Google Elevation API를 이용하면 위도 경도만 알고 있으면 그 지점의 고도를 알 수 있다.


여기서는 남산 팔각정의 고도를 알아보겠다.

우선 구글맵을 이용해 원하는 지점의 위도 경도를 구한다. [  구글맵에서 위도 경도 구하기   http://milkelf.tistory.com/71 ]

남산 팔각정의 위도 경도는 (37.55157798469981, 126.98770523071289)


아래 URL 처럼 위도 경도를 채워서 요청을 하면. 고도 정보를 JSON 형식으로 리턴해준다.

(http://maps.googleapis.com/maps/api/elevation/json?locations=[위도],[경도]&sensor=false)


남산 팔각정의 고도 정보 요청

http://maps.googleapis.com/maps/api/elevation/json?locations=37.55157798469981,126.98770523071289&sensor=false


결과

{
   "results" : [
      {
         "elevation" : 258.1230468750,
         "location" : {
            "lat" : 37.55157798469981,
            "lng" : 126.9877052307129
         },
         "resolution" : 152.7032318115234
      }
   ],
   "status" : "OK"
}

여기서는 258미터로 나온다. 구글맵은 WGS84 좌표계를 쓰기 때문에 이는 해발고도(표고)라 생각하면 된다. 

실제 GPS로 측정했더니 270미터 정도가 나오는데, GPS 고도계의 오차가 20~30m 이기 때문에 오차범위에 해당한다.


조금 더 자세한 정보는 아래를 참고하세요. ~

출처 https://developers.google.com/maps/documentation/elevation/?hl=ko

Posted by 평면우주
bicycle2012. 6. 1. 11:30

전에 사용하던 튜블러 타이어 투포 PRO S33과 새로 교환한 울트리모 HT를 비교해 보겠다.

S33->HT 교환한 느낌 의견을 남기기 위해서 글을 썼다.

로드바이크를 타기 시작한지 1년이 안되었기 때문에 객관적이지 않고 주관적인 생각이 많이 들어 있다는 것을 미리 알린다.

 

 S33 처음 튜블러 휠셋으로 교환했을 달았던 타이어로 정가 4 3천원 짜리다.

 연습용 타이어답게 정말 질긴 놈이다. 대략 9개월 동안 5000km 탔는데 펑크가 2 그것도 바퀴에만 있었고 그나마 실란트로 쉽게 수리 있었다. 정비된 한강길 뿐만 아니라 파리-루베를 상상하게 하는 그런 길로도 다녔는데, 정말 신기하게도 펑크가 거의 나지 않았다. 항상 가지고 다니던 펌프에게 미안해지는 기분이 들 정도로…

  리뷰에서 S33 너무 미끄러져 위험해서 사용하지 말라는 문구가 보이는데, 초보가 쓰기엔 S33 그립능력은 충분하다고 생각한다. 레이싱, 우중 라이딩, 급격한 내리막에서 빠른 속도로 코너를 공략 때가 아니라면 S33 충분한 그립능력을 가지고 있다고 생각한다.

. 노면이 젖어 있을 때는 정말 조심해야 한다. S33 사용하면서 타이어가 미끄러져 낙차 적이 2 있는데, 모두 비 오는 날이었다.

 

5000km 넘어가면서 타이어 마모도 많이 진행되었고, 표면이 갈라지기 시작해서 울트리모 HT 교환했다.

울트리모 HT 정가 125000, 최고급 튜블러로 레이싱을 위해서 수작업으로 만들어졌다고 한다. 가격이 너무 비싸 중고게시판 매복하고 있다. 값에 2개를 구할 수가 있었다.

투포의 글루잉 테잎을 이용해서 설치했고, 대략 200km 탔다.

우선 승차감을 이야기 수가 없다. 분명 똑같은 공기압으로 탔는데 푹신한 느낌이 들었다. 타이어 교환 처음 라이딩 했을 공기압을 넣은 게 아닌지 의심했다.

그립은 S33 비교를 없을 정도로 뛰어나다. 초보라서 반응성이 좋다던지, 스프린트 댄싱 유리하다고 하는 의견이 사실인지는 확인 수가 없었다.

어떤 사람은 최상급 타이어를 사용했더니 평속이 올라 갔다고 하던데, 별반 달라진게 없었다. 하지만 편안한 승차감과 그립력은 라이딩에 긍정적인 영향을 끼치는 것은 확실하다.

 

펑크와 마모에 대한 것은 나중에 울트리모  HT 교환할 다시 이야기 하겠다.



-------------------- 추가 ---------------------------------------------


울트리모 HT 사용 후기. HT로 바꾼지 대략 2개월 1000km를 탔다. 2개월 동안 타고 난 뒤 느낌 점은 편안한 승차감과 정말 뛰어난 접지력.


하지만 앞 뒤 바퀴중에 앞 휠 타이어는 HT가 아니라 컨티넨탈 스프린터 가토 스킨이다. 


왜냐고? 라이딩 도중 돌을 밟고 펑크가 나서 교체 했기 때문에. 600km 쯤.


정말 성능은 뛰어나나 내구성은 극악이다. 


살아 남은 뒷 타이어도 펑크가 나서 실란트로 한 번 수리했고, 트레이드도 많이 달았다. (살살 탔는데)


특히 타이어 사이드는 정말 부실하다. 전곡항 라이딩 도중 작은 돌을 밟았는데. 아래 사진 처럼 사이드가 쫙 찢어져 버렸다.







Posted by 평면우주
study2012. 4. 23. 17:18

질문을 하나 받았다. Python/C API 관련 질문인데 이게 조금 복잡하다.

 

C/C++에서 파이썬을 사용하고 싶으면 Python/C API 사용해 파이썬을 프로그램에 포함시키면 된다. 아래 예제에서


#include "Python.h"


int

main(int argc, char *argv[])

{

   Py_Initialize();

 

   PyRun_SimpleString("from time import time,ctime\n"

                              "print('Today is', ctime(time()))\n");

   Py_Finalize();

}

 

현재 시간을 가져오는 프로그램을 파이썬의 time 모듈을 이용해서 구현한 것이다.

Python/C API 상위 레이어 함수인 PyRun_simpleString 사용해 쉽게 파이썬을 C/C++에서 실행 시킬 있다.

 

그렇다면 PyRun_SimpleString 번째 인수인 파이썬 구문에서 C/C++ 함수를 호출 있을 ? 물론 가능하다. 이를 위해서 파이썬 확장 모듈이라는 것이 있다.

 

파이썬에서 사용할 모듈 -여기서는 spam- 만들고 컴파일 하면 shared library 만들어 지고 이를 파이썬이 설치되어 있는 디렉터리에 옮겨 놓으면 된다.

 

그리고 아래와 같이 사용하면 된다.


PyRun_SimpleString("import spam\n"

                          "print('String Length is : ', spam.strlen('abc'))\n");

 

하지만 so 매번 옮겨 놓을 수도 없는 노릇이고, 원하는 것은 소스코드 안에서 파이썬과 C/C++ 서로 통신하듯이 쓰는 것이기 때문에   방법은 문제가 있다.

 

일단 C/C++ 함수를 파이썬에서 사용하게 하려면 함수들을 파이썬 확장 모듈로 만들어야 한다.

여기까지는 순조로웠는데, 만든 모듈을 파이썬에서 임포트 없었다.

문제는 PyRun_SimpleString안의 파이썬구문이 실행 , 우리가 만든 spam 모듈이 파이썬 built-in 네임스페이스에 포함 되지 않는 다는 것이다.

 

참고할 예제도 없어서, 주말 내내 Python Document 읽어보았다.

 

그래서 찾아낸 함수가 PyImport_ExtendInittab, PyImport_AppendInittab이다.

(http://docs.python.org/py3k/c-api/import.html?highlight=pyimport_#PyImport_ExtendInittab)

해당 모듈을 build-in 추가 해주는 고마운 함수이다. Importing Modules(http://docs.python.org/py3k/c-api/import.html) 보면 모듈을 C API에서 임포팅 하는 함수들이 나온다. PyImport_AppendInittab으로 예제를 만들고 테스트 해봤다.

 


#include "Python.h"

 

static PyObject *

spam_strlen(PyObject *self, PyObject *args)

{

    const char* str=NULL;

    int len;

 

    if (!PyArg_ParseTuple(args, "s", &str))

         return NULL;

 

    printf("argument = %s\n", str);

    len = strlen(str);

 

    return Py_BuildValue("i", len);

}

 

static PyMethodDef SpamMethods[] = {

{"strlen", spam_strlen, METH_VARARGS,

 "count a string length."},

 {NULL, NULL, 0, NULL}

};

 

static struct PyModuleDef spammodule = {

    PyModuleDef_HEAD_INIT,

    "spam",           

    "It is test module.",

    -1, SpamMethods

};

 

static PyObject* PyInit_spam(void)

{

    return PyModule_Create(&spammodule);

}

 

int

main(int argc, char *argv[])

{

 

   PyImport_AppendInittab("spam", &PyInit_spam);

 

   Py_Initialize();

 

   PyRun_SimpleString( "import spam\n"

       "print('String Length is : ', spam.strlen('abc'))\n"

   );

  

   Py_Finalize();

   return 0;

}

 


 

PyImport_AppendInittab에서 built-in 포함될 모듈의 이름과 만든 모듈 포인터를 넣어준다.

한가지 특이한 점이 PyInit_spam처럼 모듈을 바로 입력 받지 않고 함수 포인터를 받는 다는 것이다.

PyImport_AppendInittab는 Py_Initialize() 호출하기 전에 호출 되야 한다.

 

PyRun_SimpleString안의 파이썬 구문에서 spam 모듈이 정상적으로 임포트되고, 함수도 호출 되는 것을 있다.

  

 

Tip.

테스트는 리눅스에서 파이썬 3.1에서 진행했다. 파일을 컴파일 , 파이썬의 헤더 라이브러리 파일이 필요한데 아래처럼 간단하게 구할 있다.

 

cflags, ldflags 알아내는

$ /opt/bin/python3.2-config --cflags

$ /opt/bin/python3.2-config --ldflags

Posted by 평면우주
study2011. 12. 20. 13:25

처음 들어본 이름의 tool도 많이 있네요. ㅠ.ㅠ

자세한 내용은 아래 URL 참고.

http://isao76.egloos.com/2252874


Posted by 평면우주