Let’s go!

  • matplotlib를 터미널 환경에서 사용하기

    집에 있는 서버에 tensorflow가 설치되어 있는데, ssh로 접속하여 실행한다. 결과물이 텍스트같이 터미널로 표시되면 볼수 있는데 그림으로 표시되면 터미널에 표시가 안된다.

    Traceback (most recent call last):
      File "imagetran.py", line 13, in <module>
        plt.imshow(image)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3010, in imshow
        ax = gca()
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/pyplot.py", line 928, in gca
        return gcf().gca(**kwargs)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/pyplot.py", line 578, in gcf
        return figure()
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/pyplot.py", line 527, in figure
        **kwargs)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 46, in new_figure_manager
        return new_figure_manager_given_figure(num, thisFig)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 53, in new_figure_manager_given_figure
        canvas = FigureCanvasQTAgg(figure)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 76, in __init__
        FigureCanvasQT.__init__(self, figure)
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/backends/backend_qt4.py", line 68, in __init__
        _create_qApp()
      File "/home/now0930/anaconda2/envs/tensorflow/lib/python2.7/site-packages/matplotlib/backends/backend_qt5.py", line 138, in _create_qApp
        raise RuntimeError('Invalid DISPLAY variable')
    RuntimeError: Invalid DISPLAY variable
    

    마지막에 Invalid DISPLAY variable이라고 뜨고 죽는데 아래와 같이 변경하면 된다.

    import matplotlib
    matplotlib.use('Agg')
    
    import tensorflow as tf
    import matplotlib.image as mpimg
    import matplotlib.pyplot as plt
    
    # First, load the image
    filename = "./MarshOrchid.jpg"
    image = mpimg.imread(filename)
    
    # Print out its shape
    #print(image.shape)
    
    
    plt.imshow(image)
    plt.savefig('test.jpg')
    
    
    # Create a TensorFlow Variable
    x = tf.Variable(image, name='x')
    model = tf.initialize_all_variables()
    with tf.Session() as session:
    	x = tf.transpose(x, perm=[1, 0, 2])
    	session.run(model)
    	result = session.run(x)
    print(result.shape)
    mpimg.imsave('test.jpg',image)
    mpimg.imsave('test.jpg',result)
    

    디스플레이가 있는 PC에서 다운로드해 보면 된다..이게 웹으로 보내면 좋은데, 아직 그런게는 없나보다. stack overflow의 여기에서 답을 얻었다.

    질문은..
    Generating a PNG with matplotlib when DISPLAY is undefined

    시스템에 따라 설정파일을 바꾸면 귀찮게 안써도 되는데, 나의 경우 어디에 설정파일이 있는지 몰라 그냥 써야겠다.

  • 정해진 미래, 조영태

    정해진 미래, 조영태

    정해진 미래, 조영태
    isbn : 9791187289067

    얼마전 이진우의 손에에잡히는 경제에서 조영태 교수가 나와서 한국의 인구구조에 대해서 인터뷰를 했었다. 그때 한국의 미래를 인구 분포의 통계적인 분석을 근거로 예측했다. 교수가 말하는 내용이 대충 맞아 보였다. 또한 전에 누군가가 청년들이 줄고 있어 부동산은 하락한다고 주장했는데,그 내용이 맞을것인가가 궁금했다. 인터뷰 마지막에 자신이 쓴 책을 사라고 낚여서 하나 샀다.

    아쉬운 점은 최근에 출판된책인데 e-book으로 출판되지 않아 무거운 책을 들고 비행기를 탔다. 이와 별개로 과거 나왔던 cosmos도 하나 샀는데, 이 역시 e-book으로 발행되지 않았다. 첨부된 사진때문에 종이책으로 발간한듯 한데 상당히 아쉬운 부분이다. 전자책이 많이 활성화 되었으면 한다.

    머리말에 이 책의 목표가 간략하게 설명되어 있다. 향후 10년~15년 후에 한국의 인구구조가 변하는데, 더 늦기전에 대응을 잘해서 잘 살아보자이다. 제목은 “정해진 미래”인데, 부제는 이렇게 지어도 될것 같다. “줄어드는 인구, 잘살수 있는 기회”

    과거, 현재의 문제점을 인구학의 도구로 분석하여 설명했다. 현재 한국인구는 확실하게 줄어드는데, 정부는 이를 인정하지 않고 대책을 세웠고, 저자는 이를 비판한다. 높아지지 않는 출산률을 억지로 높이지 말고, 앞으로 줄어들 인구에 대비하여 현실적인 정부 대책을 요구한다. 마지막에는 변하는 한국에서 인구학의 도구로 어느정도 예측이 가능한데 이를 미래 생존전략으로 잘 살아야 된다고 독자들에게 주문한다.

    대충 이런 내용이고 나의 10, 15년후를 인구학을 적용해 보겠다. 10년, 15년 후에는 우리 애들은 16살, 21살이다. 나는 47살, 52살이고. 무엇을 하면 좋을지는 모르겠으나, 무엇을 하면 안될것은 확실하게 알수있다. 저자도 주장했지만 교육과 관련된 일들, 부동산 관련 업종이다. 아이들이 이런방향으로 한다고 하면 논리적으로 설명을 해줘야겠다. 게다가 얼마전에 30평대 집을 샀는데, 아이들이 어느정도 수준이 되면 더 늦기전에 팔아야 될것 같다.

    그럼 무엇을 해야 이득일까? 책에서는 딱히 없었지만, 아마 인건비를 줄이기 위한 기업들의 처절한 혁신이 있을 것이다. 10년 후, 기업의 대부분의 노동자 및 기술자들이 퇴직하고, 20~30대가 그 자리를 대체하겠다. 그러나 그 숫자는 많이 줄어든다. 기업들이 국내에서 생산시설을 유지하기 위해서는 해외생산 대비 이득이 있어야 한다. 기업은 이런 인력들을 채용하겠다. 과거 산업혁명에서 영국이 인도와 경쟁해서 이긴 이유는 인도의 값싼 노동력을 극복하기 위한, 영국의 기술혁신 때문이다. 앞으로 한국에 이런 현상이 재현될 것이라 생각된다.

    이를 위해서는 학교 교육에 만족하지 않고, 개방적인 사고를 할 필요가 있다. 틀에갇힌 입시 교육으로는 자유로운 생각을 할 수 없다. 아이들이 도서관의 책들을 쉽게 접할 수 있고, 자유롭게 상상할 수 있는 여유를 주는게 미래를 위한 투자라 생각된다.

    자신이 하고싶은 일을 찾는것도 중요하다. 요즘은 누구나 대학 교육에 저렴한 비용으로 접근할 수 있다. 내가 고등학교 다니던 시절과 많이 달라졋다. 과거 중학교때 터보C 책을 봤었는데, 정보의 접근도 제한되어 있었다. 더 큰 문제는 예제코드가 없어 테스트를 잘 해보지 못해 이해학 힘들었다. 지금은 많이 달라졌다. 누구나 코드를 개방할 수 있고, 다른 사람의 코드를 볼 수 있다. 이런 소프트웨어를 조작하는 능력은 미래사회에 가성비 향상의 큰 이점이 된다.

    나는 아마 10년뒤면 자의반, 타의반 제2의 인생을 준비하고 있겠다. 아직까지 우리 회사는 고령자?에 대한 퇴직 압박은 없는 편인데, 10년뒤에도 그럴지는 모르겠다. 그때 생산시설?이라고 할 수 있는 경제적 수단이 없으면 많이 피곤하다. 그래서 주식을 모으고 있는데, 아마 노인층을 상대하는 회사의 주식도 몇주 사야될것 같다. 그때까지 한국 노인들이 가난하면 안되는데, 걱정이다. 지금 중장년층들은 부동산에서 나오는 수입의 많이 의존하는 듯이 보인다. 부동산 가격이 떨어진다면, 그들의 수입도 줄어들텐데, 더 가난할 듯 보인다. 그렇다면 아마 주식밖에 없어 보인다.

    외국에서 제 2의 인생에 도전하는 것도 괜찮아 보인다. 애들을 다 키웠으니 국내에 걸릴것은 없고, 경력을 살려 도전하는 것도 건강한 삶을 사는데 도움이 될것이다.

    앞으로 무슨일이 있을지 머리아픈데, 이런 고민이 없다면 재미가 인생이 재미가 없을듯 하다. 그나저나, 주식이 좀 올라야 되는데 오를 기미가 안보인다…

  • 우분투+LEGO NXT(Lejos)를 eclipse로 bluetooth로 연결하기

    우분투+LEGO NXT(Lejos)를 eclipse로 bluetooth로 연결하기

    전에 우분투에 lejos가 깔린 lego nxt를 eclipse로 연결을 해서 파일 전송을 했었는데, 간만에 하니 시간이 좀 걸렸다. 이번에 정리한다..

    먼저 ubuntu의 bluetooth 모듈을 상태를 알아야 된다..

    >hcitool dev
    Devices:
    hci0 00:1A:7D:DA:71:02

     

    다음에 hci0의 상태를 알아낸다.

    >hciconfig hci0
    hci0: Type: BR/EDR Bus: USB
    BD Address: 00:1A:7D:DA:71:02 ACL MTU: 310:10 SCO MTU: 64:8
    UP RUNNING PSCAN ISCAN
    RX bytes:15110 acl:283 sco:0 events:1300 errors:0
    TX bytes:41343 acl:1147 sco:0 commands:88 errors:0

     

    나의 경우에는 bluetooth 동글이 usb로 연결되어 있다..

    다음에 nxt의 블루투스 모듈의 주소를 알아낸다.

    >hcitool scan
    Scanning ...
    00:16:53:12:7A:83 NXT

     

    이를 바탕으로 /etc/bluetooth/rfcomm.conf 파일을 아래와 같이 수정한다.

    >sudo cat /etc/bluetooth/rfcomm.conf
    #
    # RFCOMM configuration file.
    #
    
    rfcomm0 {
    # Automatically bind the device at startup
    bind no;
    
    # Bluetooth address of the device
    device 00:16:53:12:7A:83;
    
    # RFCOMM channel for the connection
    channel 1;
    
    # Description of the connection
    comment "LegoNXT";
    }

     

     

    다음에 아래의 명령어로 연결한다.

    >sudo rfcomm connect /dev/rfcomm0 00:16:53:12:7A:83 1
    Connected /dev/rfcomm0 to 00:16:53:12:7A:83 on channel 1
    Press CTRL-C for hangup

    CTRL-C로 연결을 끊어주고..eclipse로 연결하면 된다…

    nxt로 연결이 되었는지, 아닌지는 아래 명령으로 확인이 가능하다.

    >sudo l2ping 00:16:53:12:7A:83
    Ping: 00:16:53:12:7A:83 from 00:1A:7D:DA:71:02 (data size 44) ...
    4 bytes from 00:16:53:12:7A:83 id 0 time 26.82ms
    4 bytes from 00:16:53:12:7A:83 id 1 time 64.92ms
    4 bytes from 00:16:53:12:7A:83 id 2 time 24.87ms
    4 bytes from 00:16:53:12:7A:83 id 3 time 73.89ms
    4 bytes from 00:16:53:12:7A:83 id 4 time 34.89ms
    4 bytes from 00:16:53:12:7A:83 id 5 time 25.89ms
    4 bytes from 00:16:53:12:7A:83 id 6 time 76.82ms
    

     

    eclipse로 아래와 같이 설정 후, 연결하면 된다.
    eclipse%ec%84%a4%ec%a0%95%ed%99%94%eb%a9%b4

    eclipse에서 에러를 뿜어내는데 bluecove 어쩌고 나온다..

     >sudo apt-get install libbluetooth-dev

     

    이렇게 관련 프로그램을 설치하면 된다.

    KDE의 경우, PIN 입력이 안되는데, bluez-simple-agent로 연결하면 된다.

    bluez-simple-agent hci# xx:xx:xx:xx:xx:xx

    출처는 인터넷…

  • 오산 Air Power Day

    오산 Air Power Day

    Sorry you have no rights to view this post!

  • LegoEV3+갤럭시노트로 매트 위에서 안 떨어지기

    집에 놀고 있는 갤럭시 노트1을 LEGO EV3에 붙여 보았다. 갤럭시노트 센서중 가속도, 마그네틱 센서를 사용하면 휴대폰의 기울기를 쉽게? 구할수 있다고 한다. 이를 활용해서 매트 위에서 떨어짐을 감지해서 후진하도록 만들었다. 휴대폰이 수평으로 되어있으면 전진..처음 할때는 안될줄 알았는데, 안떨어지는걸 보니 신기하네.

    인터넷에 LEGO EV3용 센서를 고가에 파는데 구할 수 있는데, 사기에는 좀 많이 아깝다. 빠른 반응속도가 필요하지 않으면 휴대폰 센서를 쓰는것도 괜찮다.

    휴대폰은
    1. 서버 역할을 하고
    2. 휴대폰이 기울어져 있는지 판단한다.
    3. 이를 socket으로 열어놓는다.

    레고는
    1. 휴대폰의 소켓으로 접속하여 매순간 데이터를 받는다.
    2. 기울어졌다고 수신되면 후진
    3. 수평이라 판단되면 전진

    만들면서 부품이 좀 많이 부족했다. 특히 ㄱ자 브라켓?(핀 홀 방향을 바꿔주는 브라켓)이 없어서 애를 먹었다. 부품간 간격이 좀 있어 보이는데, 채윤이가 가지고 놀던 점토로 잘 붙였다.