텐서플로우 링크 모음
iris 분류 방법
http://tneal.org/post/tensorflow-iris/TensorFlowIris/
ddclinet+cloudflare+freenom 조합으로 서버 운영하기
ddclient+cloudflare+freenom 조합으로 서버 운영하기
이사가기 전에는 서버를 공유기 아래에 물려 사용하고 있었다. iptime 싸구려 공유기를-가성비 갑- 사용 중이다. 제작사가 일괄적으로 ***.iptime.org의 도메인을 등록해 놓고, 공유기에서 메뉴로 사용 여부를 가능하게 했다. 도메인이 *.iptime.org 이런 형식으로 끝나, iptime 공유기 사용하는 티가 너무 났다. 이런 점을 노리고 제작사에서 이런 기능을 넣었을 듯 하다. 또한 서버가 공유기 아래에 있어, 싸구려 공유기가 죽어버리면 외부에서 서버를 연결 할 수 없다.
새로 이사한 이후에는 집으로 랜선이 5개 정도 들어왔는데, 인터넷 회사가 2개 회선을 기본적으로 제공했다. 1개선은 공유기로, 1개선은 IPTV/gen8로 연결 했다. IPTV의 셋톱 박스에서 나오는 랜선 포트가 하나 있는데, 그 선을 gen8로 연결하면, 서버가 공인 IP를 사용할 수 있다.
(=:외부 랜선, -:내부 랜선)
……………..gen8===IPTV============
…PC———공유기============
…………….|
휴대폰—–|

gen8에서 핑을 구글로 넣으면 응답이 있는데, 네이버나 다음으로는 핑이 안나간다. 아마 인터넷 회사에서 그쪽으로 나가는 핑을 막아놓은 듯 보인다.
도메인은 freenom에서 무료로 얻었다. 2017년 12월까지 1년동안 사용할 수 있다. 만료되기 전, 적정한 시점에 도메인 사용 연장 신청을 해야 도메인을 잃어버리지 않는다. 상당히 귀찮지만, 이게 싫으면 돈을 내면 된다. KISA가 제공하는 국내 도메인도 있는데, 일년에 만원 정도 내야 된다. 게다가 2차 도메인이라 주소 입력하기가 좀 귀찮다. 일단 무료 도메인을 사용하기로 했다. freenom에서 nameserver를 cloudflare로 설정 했다.
요즘 cloudflare를 많이 사용하는데, cloudflare가 무료로 DDNS를 지원하기 때문이다. 데비안 서버에서 DDNS로 IP를 업데이트 하기 위해서는, ddclient를 사용해야 한다. 예상대로 경험자들이 인터넷에 문서를 많이 남겨 놓았다. 이를 참조하여 설정했다.했다. cloudflare는 웹서버 캐시도 지원 하는데, 굳이 사용할 필요는 없어 보인다. 일단 cloudflare에서 freenom에서 구한 도메인과 DHCP로 받은 IP를 넣어 준다.

ddclient 3.8.3부터 cloudflare를 지원하는데, deb 페키지가 없어 압축파일을 직접 설치했다. README.md 파일을 보면, sample을 설정해 놓았는데, 이를 참조하여 설정했다. ddclient가 cloudflare로 접속을 하기 위해서는 API key가 있어야 된다. cloudflare에서 API key를 확인할 수 있다. 대략 설정 파일은 아래와 같다. 아래 설정 기준으로, password 아래 “now0930.tk”가 cloudflare에서 업데이트할 도메인 이름이다. 사용자가 이를 입력하지 않으면, ddclient가 업데이트를 하지 않는다.
protocol=cloudflare, \ zone=now0930.tk, \ server=www.cloudflare.com, \ login=*************, \ password=********************** \ now0930.tk #domain.tld,my.domain.tld
daemon모드로 설정을 하면, 부팅과 동시에 실행되는 듯 하다. 실행 관련 별도 설정을 하지 않았다.
IP가 제대로 변경되는지 확인하기 위해서, cloudflare에서 틀린 IP로 설정을 했다. 이후 ddclient를 디버그 모드로 실행하여 그 결과를 보았다. IP가 변경이 되면, 설정이 정확한 것이다.
ddclient -daemon=0 -noquiet -debug -verbose
=== opt ====
opt{cache} : <undefined>
opt{cmd} : <undefined>
opt{cmd-skip} : <undefined>
opt{daemon} : 0
opt{debug} : 1
opt{exec} : <undefined>
opt{facility} : <undefined>
opt{file} : <undefined>
opt{force} : <undefined>
opt{foreground} : <undefined>
opt{fw} : <undefined>
opt{fw-login} : <undefined>
opt{fw-password} : <undefined>
opt{fw-skip} : <undefined>
opt{geturl} : <undefined>
opt{help} : <undefined>
opt{host} : <undefined>
opt{if} : <undefined>
opt{if-skip} : <undefined>
opt{ip} : <undefined>
opt{login} : <undefined>
opt{mail} : <undefined>
opt{mail-failure} : <undefined>
opt{max-interval} : 2160000
opt{min-error-interval} : 300
opt{min-interval} : 30
opt{options} : <undefined>
opt{password} : <undefined>
opt{pid} : <undefined>
opt{postscript} : <undefined>
opt{priority} : <undefined>
opt{protocol} : <undefined>
opt{proxy} : <undefined>
opt{query} : <undefined>
opt{quiet} : 0
opt{retry} : <undefined>
opt{server} : <undefined>
opt{ssl} : <undefined>
opt{syslog} : <undefined>
opt{test} : <undefined>
opt{timeout} : <undefined>
opt{use} : <undefined>
opt{verbose} : 1
opt{web} : <undefined>
opt{web-skip} : <undefined>
=== globals ====
globals{cache} : /var/cache/ddclient/ddclient.cache
globals{daemon} : 60
globals{debug} : 1
globals{mail} : root
globals{mail-failure} : root
globals{pid} : /var/run/ddclient.pid
globals{quiet} : 0
globals{ssl} : 1
globals{syslog} : 1
globals{use} : web
globals{verbose} : 1
=== config ====
config{now0930.tk}{atime} : 0
config{now0930.tk}{backupmx} : 0
config{now0930.tk}{cacheable} : ARRAY(0x2594678)
config{now0930.tk}{cmd} : <undefined>
config{now0930.tk}{cmd-skip} :
config{now0930.tk}{fw} :
config{now0930.tk}{fw-login} : <undefined>
config{now0930.tk}{fw-password} :
config{now0930.tk}{fw-skip} :
config{now0930.tk}{host} : now0930.tk
config{now0930.tk}{if} : ppp0
config{now0930.tk}{if-skip} :
config{now0930.tk}{ip} : <undefined>
config{now0930.tk}{login} : **************
config{now0930.tk}{max-interval} : 2160000
config{now0930.tk}{min-error-interval} : 300
config{now0930.tk}{min-interval} : 300
config{now0930.tk}{mtime} : 0
config{now0930.tk}{mx} :
config{now0930.tk}{password} : ********************
config{now0930.tk}{protocol} : cloudflare
config{now0930.tk}{server} : www.cloudflare.com
config{now0930.tk}{static} : 0
config{now0930.tk}{status} :
config{now0930.tk}{use} : web
config{now0930.tk}{warned-min-error-interval} : 0
config{now0930.tk}{warned-min-interval} : 0
config{now0930.tk}{web} : dyndns
config{now0930.tk}{web-skip} :
config{now0930.tk}{wildcard} : 0
config{now0930.tk}{wtime} : 30
config{now0930.tk}{zone} : now0930.tk
=== cache ====
cache{now0930.tk}{atime} : 0
cache{now0930.tk}{backupmx} : 0
cache{now0930.tk}{host} : now0930.tk
cache{now0930.tk}{ip} : **************
cache{now0930.tk}{mtime} : 1480776823
cache{now0930.tk}{mx} :
cache{now0930.tk}{static} : 0
cache{now0930.tk}{status} :
cache{now0930.tk}{warned-min-error-interval} : 0
cache{now0930.tk}{warned-min-interval} : 0
cache{now0930.tk}{wildcard} : 0
cache{now0930.tk}{wtime} : 30
DEBUG: proxy =
DEBUG: url = http://checkip.dyndns.org/
DEBUG: server = checkip.dyndns.org
CONNECT: checkip.dyndns.org
CONNECTED: using HTTP
SENDING: GET / HTTP/1.0
SENDING: Host: checkip.dyndns.org
SENDING: User-Agent: ddclient/3.8.3
SENDING: Connection: close
SENDING:
RECEIVE: HTTP/1.1 200 OK
RECEIVE: Content-Type: text/html
RECEIVE: Server: DynDNS-CheckIP/1.0
RECEIVE: Connection: close
RECEIVE: Cache-Control: no-cache
RECEIVE: Pragma: no-cache
RECEIVE: Content-Length: 106
RECEIVE:
RECEIVE: <html><head><title>Current IP Check</title></head><body>Current IP Address: *********</body></html>
DEBUG: get_ip: using web, http://checkip.dyndns.org/ reports *********
SUCCESS: now0930.tk: skipped: IP address was already set to *********.
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
시스템에 따라 설정파일을 바꾸면 귀찮게 안써도 되는데, 나의 경우 어디에 설정파일이 있는지 몰라 그냥 써야겠다.
우분투+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에서 에러를 뿜어내는데 bluecove 어쩌고 나온다..
>sudo apt-get install libbluetooth-dev
이렇게 관련 프로그램을 설치하면 된다.
KDE의 경우, PIN 입력이 안되는데, bluez-simple-agent로 연결하면 된다.
bluez-simple-agent hci# xx:xx:xx:xx:xx:xx
출처는 인터넷…
