Let’s go!

  • 지중해의 역사

    지중해의 역사

    isbn:8935656372

    “한 액체 공간을 중심으로 이뤄진 역사 연구에는 무한한 매력이 있다”

    페르낭 브로델. p18, “펠리페 2세 시대의 지중해와 지중해 세계”

    이 책이 너무 너무 길다. 크게 지중해 시대를 5개로 나누었다.

    1장, 고대 지중해 혹은 단일성의 모색.~ 4세기.

    고대 그리스부터 로마의 지중해 장악까지를 설명한다. 알렉산드리아가 지중해의 중요한 항구가 되었다. 포에니 전쟁, 악티움 해전으로 로마가 지중해의 주인이 되었다. 마지막 소챕터 제목이 “우리의 바다”인데, 우리가 로마를 지칭한다.

    2장, 다양성에서 단일성으로. 5세기 ~ 15세기.

    이민족의 이동으로 유럽 서쪽을 이민족이, 동쪽을 비잔틴 제국이 장악했다. 동로마 제국의 유스티니아누스가 알렌산드리아의 조선소를 중심으로 지중해를 다시 장악했다. 그 후, 아랍 세력과 기독교 세력이 충돌했고 십자군 원정이 있었다.

    이탈리아가 지중해 무역을 완전히 독점했다. 아랍 세력이 서서히 지중해에 나타났다. 서쪽은 이탈리아를 중심으로 르네상스가 일어났다. 대항해 시대의 상업을 효과적으로 운용하기 위한 자본가가 나타났다. 흑사병 또한 지중해를 중심으로 퍼졌다. 몽골 제국의 공백을 새로운 오스만 투르크 제국이 채웠다.

    3장, 지중해, 주연에서 조연까지. 16 ~ 18세기.

    오스만 투르크의 슐레이만 1세가 제국을 확장했다. 인구가 증가했고, 대륙간 인구 이동이 활발했다. 제국이 지중해를 장악하는 동안, 몰타 섬을 중심으로 기독교 세력이 이슬람 교도들과 충돌했다. 아래 그림이 제국의 영역을 확실하게 보여준다.

    19세기까지 노예 무역이 지중해에 있었다니 깜짝 놀랬다.

    4장, 유럽, 지중해에 새로운 가치를 부여하다. 1815 ~ 1945

    오스만 투르크 제국이 각 지역을 강압하여 지배했으나, 세력이 약해지며 각 지역의 민족주의가 발생했다. 그리스 독립 운동이 있었고, 영국 시인 바이런이 이 독립 전쟁에 참전했다. 증기선이 조금씩 다녔고, 수에즈 운하를 건설했다. 제국주의가 생겼고, 오스트리아, 이탈리아, 독일의 3국 동맹이 있었다. 오스만 투르크의 쇠락과 세계 1,2차 대전으로 각 지역에 분열의 원인이 아직까지 이어진다.

    5장, “우리의 바다”에서 대륙 이동까지. 1945 ~ 현재

    공산주의와 민주주의가 지중해에서 충돌한다. 이스라엘이 건국되나, 주변국들과 심각한 마찰을 겪는다. 4차 이스라엘-중동 전쟁으로 이스라엘이 그 위치를 확고히 한다. 석유에 의존하는 몇 개의 국가들이 발전할 수 있는 기회를 놓쳤다. 지중해 북/남간 발전의 정도 차이가 많이 나게 되었다.

    아직도 지중해 근처의 아랍과 기독교간의 충돌을 보면, 그 골이 몇 백년 전까지 올라간다.  오스만 투르크 제국의 급작스런 붕괴?가 현대까지 영향을 준다. 그들이 너무 오랜 기간 그 땅의 사람들을 억압했는지도.  암특 역사가 긴 만큰, 복잡한 동네다.

  • 개인 전자 액자 만들기(with 삼성 노트1)

    개인 전자 액자 만들기(with 삼성 노트1)

    Sorry you have no rights to view this post!

  • gtx 1060 6gb+tensorflow gpu 버전 세팅 후기

    gtx 1060 6gb+tensorflow gpu 버전 세팅 후기

    Tensorflow, CUDA toolkit, cuDNN 버전.

    이것 설치한다고 이틀을 날렸다. 메뉴얼을 제대로 안 읽은 내탓도 있지만, Nvidia가 별다를 설명없이 기존 버전을 숨겨버린 탓도 있다. 멀쩡한 OS도 한번 날리고.

    Tensorflow 인스톨 사이트에 아래와 같이 써있다.

    NVIDIA requirements to run TensorFlow with GPU support

    If you are installing TensorFlow with GPU support using one of the mechanisms described in this guide, then the following NVIDIA software must be installed on your system:

    • CUDA® Toolkit 8.0. For details, see NVIDIA’s documentation. Ensure that you append the relevant Cuda pathnames to the LD_LIBRARY_PATH environment variable as described in the NVIDIA documentation.
    • The NVIDIA drivers associated with CUDA Toolkit 8.0.
    • cuDNN v6. For details, see NVIDIA’s documentation. Ensure that you create the CUDA_HOME environment variable as described in the NVIDIA documentation.

    CUDA toolkit : 필히 8.0!! Nvidia 다운로드 사이트에 가면 9.0이 딱 있다. 8.0을 찾을수가 없다. 8.0은 여기에..

    cuDNN도 CUDA toolkit 8.0에 맞는 버전을 설치한다.

    나는 그래픽 드라이버를 384.81 버전을 설치했다. Nvidia 사이트에 최신 드라이버가 있는데, 그 버전 사용하려다 OS를 다시 설치했다. 저장소를 추가하고,  sudo apt-get install 이렇게 쉽게 드라이버를 인스톨하면 된다. CUDA toolkit이 드라이버를 업데이트 한다.

    비교!

    CPU 버전으로 5,000[초/횟수]에 걸쳐하는 작업이, GPU를 사용하면 500[초/횟수]로 0이 하나 줄었다!!

     

     

    GPU 선정.

    싼 GTX 1060 6gb를 사기로 했다. 3gb 메모리 제품이 더 싼데, 사용하는데 문제 된다고 한다. 초심자에겐 값싼 gtx 1060이 최고다.

    게다가 PC 케이스가 작아, 1070 이후 제품을 넣으려면 케이스를 뜯어내야 한다. 1060 길이가 260mm인데, 자로 한번 케이스를 재어 보니 좀 여유있게 들어 갈 수 있어 보인다.

    겨우 넣었다. 간섭으로 대각선 삽입!!.

    메인보드
    description: Motherboard
    product: GA-MA785GT-UD3H
    vendor: Gigabyte Technology Co., Ltd.
    pciE 2.0 * 16 지원

    메인보드를 한 8년 사용하는데, pciE 2.0과 3.0 차이가 없다고 보고, 그냥 사용하기로 했다.
    GTX 1060 6gb와 호환 가능

    후기.

    8년전 PC 살 때, 리누스가 Nvidia에 뽀큐를 날렸다는 말을 듣고, AMD 그래픽 카드를 샀는데….AMD 병신 카드였다. 제품을 만들었으면 드라이버도 좀 신경을 써야 하는데, 영 신경을 안쓴다. 윈도우에서도 그닥이고..내 인생에 다시 AMD 제품을 구매할 일이 없다. Gtx 7이나 8시리즈만 되었어도 그냥 썼을텐데..쩝..

    CUDA 9.0 + tensorflow 1.5 + ubuntu 16.04 + kernel 4.13

    망할..tensorflow 1.5로 업그레이드 하고, cuda 9.0을 쓰려니 망했다. cuda 9.0을 설치하니 화면이 나갔다.

    • cuda 9.0은 드라이버 387부터 지원.
    • 커널 4.13에 cuda 9.0을 사용하려면 드라이버 390 이상 필요.

    이 두 개가 문제였다. 4시간의 삽질 끝에, cuda를 network 버전으로 설치해야 한다고 알아냈다.  업그레이드 할 때마다 난리를 쳐야되니. 역시 최신 버전만 지원하는 nvidia..9.1만 보인다고 설치하면 9.0으로 다시 설치해야 한다.

  • Lego MindStorm EV3 제어기

    Lego MindStorm EV3 제어기

    조종기 다음으로 Lego 마인드스톰으로 모터 제어기를 만들었다.

    기본개념이 아래 그림에 표시되어 있다.

    조종기의 역할

    • 서버.
    • 휴대폰 기울기를 확인하여, 공을 기울기 방향으로 이동.
    • 공이 화면 구석으로 이동하면, 기울기가 공 위치를 변경하지 않음
    • 공 위치를 135도 회전 후, 수평 이동시켜
      “Left;…, Right:…” 형식으로 소켓으로 전송

    Lego Mindstorm의 역할
    (전에 만들었던 부분을 재활용 하여, 지저분함.)

    • 클라이언트.
    • 링 버퍼를 만든 후, Left, Right 이동 위치를 버퍼에 저장.
    • Thread가 Socket으로 안드로이드 폰에 connect, receive, close.
    • 이 과정을 반복
    • 수신 데이터(“Left:….,Right:….”)에서
      “Left:”, “,Right:”의 위치를 찾음.
    • 숫자를 추출, trim 후 integer로 변경.
    • 변경된 integer만큼, Left, Right 모터를 이동.

    EV3를 lejos 베타 버전을 사용해서인지, socket의 utf-8로 데이터가 전송되지 않았다. ascii로 변경, 전송하여 시간 좀 걸렸다.

    중요한 사실이

    • 내가 생각한 만큼 잘 움직이지 않는다.
      차량 바퀴를 4개로 만들다 보니, Left 모터를 -방향, Right 모터를 +방향으로 돌리면, 확 돌아야 되는데, 지 몸체에 걸려 안돈다!!!
      또한 제품이 무거워서인지, 바퀴가 헛도는 경우가 많다.
    • 실행 순서에 따라, NullPointException이 너무 많다.
      try, throw로 도배를 해야 할 듯한데, 시간이 또 한없이 갈 듯하다.
    • 안드로이드 폰의 좌표 설정 문제.
      화면의 공이 디스플레이 중앙에 있는데, EV3이 후진한다.
      보정을 해야 하는데, 귀찮다.
    • 안드로이드 폰 화면이 꺼지면, 동작이 멈춰야 하는데 그렇지 않다. 링 버퍼에서 다 사용하면, 0으로 이동이 맞아 보이는데..계속 움직인다.

    더 중요한 사실이,

    • 애가 별로 재미없어 한다!!
      차가 빨랑 빨랑 움직여야 하는데, 지정 위치로 가다 보니, 너무 느리다. 파워로 수정하려니 귀찮고.

    누가 소켓을 잘 정리하여 인터넷에 올렸다.
    여기여기.
    DataInputStream을 그냥 사용했는데, 별 목적이 없으면 사용하지 않는게 맞아 보인다.
    DataInputStream으로 안드로이드 폰과 EV3이 통신이 되지 않는다.
    누가 이미 작성한 코드를 쓰다 보니, socket을 어떻게 쓰는지 정리되지 않아는데, 위 사이트가 정리하는데 도움을 줬다.

  • 원격 조종기 만들기

    집에서 놀고 있는 안드로이드 폰으로, LEGO EV3을 조종하는 리모콘을 만들어 보려고 한다.

    갤럭시 노트1 조종기 개념

    화면에 포켓 몬스터 볼을 표시한다. 사용자가 휴대폰을 기울이면, 공이 그 방향으로 이동한다.
    이 공의 좌표가 레고를 전진/후진, 좌회전/우회전 등으로 움직인다.

    좌표 설정의 문제점

    처음에는 아래와 같이 그리면, 멋지게 움직인다고 생각했다!!
    그림의 x,y 좌표가 휴대폰 디스플레이의 시스템이다.

    • 1번: 레고가 전진한다. 끝에 있을 수록 세게 간다.
    • 5번: 후진
    • 2번: 약한 우회전. 왼쪽 바퀴가 오른쪽 바퀴보다 더 돈다.
    • 3번: 강한 우회전. 왼쪽이 2번보다 더 많이 돈다.
    • 4번: ??그림의 (0,0) 기준으로 3번->4번으로 가면, 두 바퀴가 모두 거꾸로 돌아야 된다.후진으로 강한 우회전을 한다.
      L/R 값이 (4,1) -> (-4,-1)로 변경되고, 변화되는 값이 크다. 그림이 어느 영역을 넘어가면 바퀴가 급격히 변하게 되면 좀 이상할 듯 하다.

    위 표를 그려는데, L/R 바퀴가 방향이 항상 같다. 단순한 움직임만 구현될 듯 하다.

    좌표 설정 제안

    디스플레이 좌표(X,Y)를 135도 반시계 방향으로 돌려, L/R 축으로 표시했다. 아래 그림과 같이 표시 가능하다.

    직진->적은 우회전->많은 우회전->적은 우회전->후진 이렇게 된다.
    값으로 표시하면..(R,L).

    • 직진: (+10,+10)
    • 적은 우회전: L값이 0선을 닿으면 (0,MaxL)
    • 많은 우회전: L값이 0선을 넘어가면 (-1,MaxL), R이 거꾸로 돌면서 더 회전
    • 적은 우회전: L이 줄면서 R이 – 방향으로 증가(-5,MeanL)

    원점을 수정하여 rotation 하려면, 여기를 참조한다.
    여기를 참조하여 새로운 좌표계를 아래와 같이 설정했다.


    디스플레이의 X, Y 좌표가 오른손 좌표가 아니기 때문에, 임의로 Y,X로 변경한 다음, L/R을 설정했다.
    아래 동영상이 기울기에 따른 L,R 값이다.

    이제, 레고에서 받는 부분을 만들기로 하고, 이건 접어야겠다.