사이트가 몇 일 동안 접속이 안 되어서 이리저리 해 봤더니

랜선이 살짝 단선되어 있었나 봅니다. 이리저리 돌려보니, 연결이 되다 말다하네요
팬소리가 살짝 시끄러워서, 집구석에 넣어두고 있다가 청소하면서 건드린게 화근이 되었나봅니다. 하아.. 단자쪽이면, 새로 단자를 집으면 되긴하겠는데, 얼마나 잘라야할지 감도 안오고, 나름 구석에 위치시키느라 제일 긴 10m짜리 랜선이라…. 다시 구하기도 힘들고 한데, 해야죠 뭐. IDC에 넣을 것도 아니고… 돈도 없고..

odroid u2 Utility backup & RTL8188EU Setting

fan control script : set_odroid_fan.sh
명령어로 치면
$ sudo echo manual > /sys/devices/platform/odroidu2-fan/fan_mode
$ sudo echo 255 > /sys/devices/platform/odroidu2-fan/pwm_duty
하면 풀로 돌아갑니다.
USB에 뭔가를 꼽았을때, HDMI와 혼선을 일으키는 경우가 많고, 기본적으로 FHD에서는 성능 문제인지 껌뻑임이 많으므로, /mnt/boot/boot.ini 에서 1280x720p 모드로 설정하는게 좋습니다. 여러가지 이유로 EDID설정보다는 non-EDID로 그냥 ODROID에 설정된 porch값을 쓰는게 좋습니다. 디스플레이에서 정해주는 EDID정보대로 ODROID가 맞춰주기가 힘들거든요… 드라이버가 범용성이 좀 떨어져서요… 왜냐면.. 개발해봤으니까….

최근에 이마트와 다이소 등지에서 USB LAN을 산것이 있습니다. 우연힌지는 모르겠지만, TP-LINK 725WN -> RTL8188EUS 이고
다이소 5000원짜리도 RTL8188EUS이네요. 예전에 롯데마트에서 샀던 건 RTL8188CUS였고요. 왠만한 싼 802.11n 지원 usb lan카드는 이것이 많은 것 같습니다.
Odroid U2 Mate 16.04 LTS에는 RTL818x -> rtl8187.ko 만 깔려 있고, 아래 드라이버 설치후 활성화하면 사용가능합니다만,, 유선 환경이 안되면, 참 힘들죠. 기본적으로 가장 좋은건 RTL8192나 RTL8812칩셋을 쓴것인데, Iptime A2000UA가 RTL8812AU라 하나 구비해두면 편합니다.

sudo modprobe 8188eu

참고글: https://www.thelinuxrain.com/articles/getting-realtek-8188eu-wireless-adapters-to-work-in-linux-and-possibly-other-wireless-realtek-chipsets

아래 사이트에 첨부된 드라이버 : rtl8188eu-master

https://community.linuxmint.com/tutorial/view/1344

2018/8/11자로 다운로드 받은 드라이버 소스코드 내부 readme.md 파일 참고 : rtl8188eu-master

최소한 build-essential & git정도는 설치를 해야하고, 기본적인 시스템 업데이트도 필요합니다.
sudo apt install build-essential

드라이버 소스코드 배포 github : https://github.com/lwfinger/rtl8188eu

 

알고리즘 이것저것 공부하고 문제풀다가 심심해서 만들어 본 무조건 덧셈.

그냥 이래저래 알고리즘 공부하다가 또, 이전에 Deep Learning공부하던것도 떠오르며 드는 생각은 알고리즘은 꽤나 옛날~ 70년대도 전에 만들어지고, 현재에도 유용하게 사용하는 것들이 많은데, 그때의 문제 공간과 요즘의 문제공간, 그리고 환경이 다르다는 것을 다시 떠올려보고, 여태 잘 쓰이고 있는 이유를 생각해보면서, 아무래도 모든 문제는 공간과 시간의 문제인것으로 결론을 내려봤습니다. 과거의 공간보다 현재의 공간이 더 확장되고, 그만큼 시간도 늘어난 것 같습니다. 컴퓨터는 계속 발전하여, 공간(물리적인 부분)*시간(논리적인 부분)의 가용한 총량을 계속 늘려주고 있는 셈인거고요.

그리고는 그냥 막무가내로 1부터 UINT_MAX까지 더해보는 프로그램을 짜봤습니다. 십몇년전, 학생시절, 또 그보다더 어린시절에도 해봤던 것 같은데, 그때는 엄두가 안 났던것을 그냥 가볍게 할 수 있는 세상이네요. 현재 돌려본 PC는 페넘2 HexaCore 2.8Ghz(boost 3.1Ghz)입니다. 복잡하게 짠게 아닌데, Window10이 똘똘한건지, CPU3개정도가 50%를 찍으며 돌아가네요.

sum(1:4294967286) 의 결과가 78905.8ms가 나옵니다. 연산이 길어서 IO출력은 무시해도 될 것 같고요. 거의 cache내에서 add compare2회 정도가 돌았을 것이라서, 효율이 좋았을 것을 생각한다면.
4294967286/78905.8ms = 54431579 operation-set / second 가 나오네요. 기준 클럭으로 돌았다고 생각하면, 54431579/2800000000 = 0.0194 instruction per clock정도가 나오는데. 대충 디스어셈블 해서, 루프내의 명령이 얼마정도 돌았나 싶은가 세보면, 대강 25개정도가 거의 꾸준히 동작하고 있었을거로 보면. 0.388 instruction / clock  가 되겠네요. IPS로 다시 환산하면, 54431579*25 Instruction/sec = 1360MIPS정도 되네요.

너무 값이 안나온다 싶어서, 중간 IO빼고 돌려봤습니다. 12396.5ms가 나오고, 디어셈해서 명령어 개수는 13정도되네요.   4294967286 * 13/12396.5 ms = 4505MIPS라고 나오니. IO가 눈으로 보이는게 별로 없어도. 그걸 처리하는데 시간 쏟은게 많았던 듯 합니다.

똑같은 코드를 ODROID에서 한번 돌려보렵니다…. 뻗으면 안되는데 –;;

—- 2018/08/14
중고 구매한 Thinkpad X230T에서 돌려봤습니다. I5-3320M 인데, 대략 돌리는 동안 4Thread 45%정도 유지하고, 2Ghz로 동작하네요. Windows 기본속도는 2.6Ghz인데 Full로는 못 뽑나봅니다. 시간은 IO없이. 11972.1ms 가 나오네요.. 빠르네요. 모바일 프로세서인데 2012년도 생산이라 1055T보다 2년 뒤에 나왔을 뿐인데…

—- 2018/8/15
샤오미북 프로 15 에서 확인한 결과. I7-8550 쿼드코어 옥타쓰레드 에서 50%로 3.7Ghz full boosting으로 돌고 대략 9000ms가 나옵니다…. 중간 io안찍을때가 그런건데… 중간중간 출력코드 활성화 해도 14334ms정도가 나오네요… OS는 같았으니, 뭔가 다른 차이가 있는건지 모르겠네요.

코드 붙여 봅니다. Crayon Syntax highlighter를 설치했습니다. 2년전에 업데이트 되고 업데이트가 없는데. 다른 프로젝트로 옮겨간건지.. 취업한건지.. 아무튼 사용은 잘되는것 같고요..

디어셈블 코드는 아래와같이 나오네요.

 

알고리즘 자료구조 열공이 거의 끝나갑니다.

지금껏 거의 2주간 배운것들을 정리해보려합니다. 장황한 설명들은 다른 좋은 학교, 교수님, 블로그글에 있으니, 단어장 정리수준으로 언제/왜 써야 되는지에 집중해서 적어보려합니다.

  • Segment Tree

간략 설명: 특정한 범위를 표현하고 이를 Tree의 인덱스에 지정하고 이른 트리구조로 관리함, 각각의 인덱스에 매핑되는 값 혹은 특정한 데이터를 꺼내는 형태로 자료를 관리함. 트리는 인덱스를 기준으로 양쪽이 균등한 형태를 갖도록 구성함. 실제 노드는 배열로 구성시 배열의 인덱스와는 다름. 특정 구조체의 배열로 구현하여 사용하거나, 링크형태로 연결관계만 유지하고, 실제 데이터는 따로 담는 방법이 있겠음.

언제: 트리구조를 이용하므로, 검색시간이 O(N)->O(LogN)정도로 줄어드는 장점이 있고, 각각의 Range별 특정한 사전 연산등을 통하여, 값을 빠르게 얻을 수 있음. 대표적인 사용예를 특정구간의 합 또는 최대값을 구하는 용도로 사용. 메모리에 비교적 여유가 있다면, 각 노드에 직접 데이터를 담아서 사용하는 것이 노드 탐색시 처리할 수 있도록 하여 좋음. LIS구할때 자주 사용함. 전봇대 전선 교차 제거 문제 – 한쪽을 기준으로 소팅하고 반대쪽 연결 수열의 LIS를 찾는것이 교차되지 않는 전선들을 찾을 수 있음. 그외는 제거 대상

  • TRIE
  • 아이디어 또는 트릭 목록

Binary Search/Tree -> O(N) -> O(LogN)으로 전환하는 개념. 나누고 합하는 개념이 들어가고 공간상으로 넓게 퍼뜨려 시간을 절약하는 방법. MergeSort, BinarySearch, BinaryTree,

Memoization : 여러번 반복하여 상태가 변화하고 해당 상태에 따라서 다음번 결과가 바뀌는 경우, 각각의 상태의 결과를 따로 저장해두었다가 다시 사용하는 방법, 단일한 Path가닌 여러 path로 상태가 영향을 줄 경우에 유용함.

Early Determination/ Lazy Propagation: 트리등의 값 변경, 작업의 스케쥴이 여러건 들어오고, 데이터의 포맷이 같고. 당장 상태 변경이 필요치 않으며, 입력에 대한 출력만 요구하고, 출력을 100% 정확하게 사전에 예상할 수 있는 방법이 있을 경우, 그리고 차후에 상태 변경을 하여도 무방한경우 사용

Ubnutu 18.04 systemd synergyc service등록 실행설정

가지고 있는 리눅스 PC가 있는데 요게 참.. 키보드 마우스 따로 달아서 쓰기가 여간 귀찮은게 아닙니다. synergy라는 걸출한 어플이 있지만, 한가지 단점이 설정이 약간 까다롭고, 부팅시에 자동실행하는게 안되다는건데요. 그래서 어느 업체는 버전2라고 쉬운 설정을 내놓고, 유료로 업데이트해서, 팔고 있습니다. 물론 전 그것도 사긴 했는데. 써온지 한 5년점어가니까. 그것마져도 귀찮고.. 내가 엔지니어가 맞나라는 생각도 들어서 약간의 손품을 팔아서 이것저것 알아봤습니다.

사용하는 리눅스 배포본이야 이젠 거의 우분투밖에 안쓰니. 예전엔 레드햇, gentoo, 등등 써봤는데. 그전에 맛들렸던게. FreeBsd와 Solaris라서.. 영 적응을 못했나봅니다. gentoo의 그 기다림은. 최초에는 신선했다가 결국엔.. 나는 누구인가 내 PC는 무엇인가 라는 존재에 대한 의문까지 들게 할 저도였으니까요. 아무튼 18.04 LTS로 거의 정식 배포고.(아직 자동으로 업데이트 시작이 안된걸로 아는데 아닌가요?). 오래된 init.d 도 저만치 사라지는 마당에. Systemd에 서비스 등록하는걸 찾아봤습니다. 생각보다 여기저기 참고할 자료가 많았고요. 기타 이것저것 안가리고 그냥. 하라는대로.

/etc/systemd/system/synergyc.service 를 생성합니다. 물론 root로 해야 잘 돌겠죠? 아닌가요?

내용은 이것저것 참고해서 아래처럼 작성하고요. 물론 저기 이름이랑 IP:Port는 본인의 구성에 맞춰야하는건 아시겠죠? name은 display이름이였나 screen이름이었나. synergy 서버에서 각 화면을 구분하는 별명같은거고요. 저 이름으로 서버나 클라이언트를 찾거나 합니다. 아니면 속 편하게 고정 IP라면 IP로 다 맞추셔도 좋습니다. 그게 제일 속편하긴 합니다. 제 구성은. 리눅스가 Client 즉 서버쪽의 마우스 키보드를 이용하는 쪽이고요. 윈도우 PC가 Server입니다. IP는 해당 서버 윈도우PC이고, 포트는 기본 포트를 썼습니다. 그리고 ssl옵션을 양쪽에서 쓸거라서 Client쪽에도 enable-crypto를 주었습니다. 서버가 여러 목록을 가지고 있으므로 Client는 서버쪽 하나의 주소만 정해주면 되겠습니다. 혹시라도 더 복잡한 다른 구성이 되는지는 모르겠네요. 4대까지는 연결해봤는데, 그 이상은 안해봐서요. 모니터는 공유가 안되니. 직접 연결해야 하니까요. 추가모니터가 없다면 Synergy안쓰고, 그냥 원격접속 쓰겠죠?

내용중에 팁이라면 티빙고 삽질경험이라면 경험인데, ExecStart에는 절대경로를 적어줘야 합니다. 안그러면 에러 내더라고요. 절대경로 적으라고. 해외 사이트에는 Bash Script적는것도 있고. python실행하는 것도 있고. node.js실행하는 것도 있고 별게 다있는데, 왠만한건 다 되는듯 합니다.
아래와 같은 포맷이 윈도우쪽의 Ini였던걸로 알고 있는데.  뭐 그려려니하고 넘어갑니다. 사실 이게 더 보기 좋으니까요.

[Unit]
Description=Synergyc prelogin launcher service
After=network.target

[Service]
Type=service
User=jiwon
WorkingDirectory=/home/jiwon
ExecStart=/usr/bin/synergyc -f –name jiwon-u16 –enable-crypto 192.168.0.50:24800
Restart=always

[Install]
WantedBy=multi-user.target

등록을 해줍니다. root권한이 필요하겠죠?

$ sudo systemctl enable synergyc.service

그뒤 바로 실행해보려면

$ sudo systemctl start synergyc.service해보면 되고요. 이때 에러나거나면 콘솔에 친절하게 빨간색으로 표시해줍니다. 심심하시면 위에 절대경로 빼고해보세요. 그리고 매번 실행한 결과는 자동으로 짧은 로그도로 남겨줍니다. 옛날글들 보면 bash스크립트 만들고 PID저장해서 daemon처럼 start stop을 직접하도록 한것도 있는데. 그건 그냥 service를 이용했을 때이고, systemctl은 그것들을 알아서 잘 해주는것 같습니다. 위 옵션을 보셔도 synergyc를 -f  foreground로 실행시킵니다. –daemon주면 그냥 실행하고 끝나더군요.
혹시 로그 계속 저장하고 싶으신분은 위 옵션에 –log 옵션을 주시면 되겠습니다. synergyc –help해보면 역시 사용법 있으니 보시면 되고요.

실행 상태 확인은

sudo systemctl status synergyc.service가 되겠고요. 좀더 의심이 드시는 분은 ps쓰시면 되겠죠? 근데 생각보다 우선순위가 낮은지 부팅 로그인 화면이 나오고 좀 시간이 지나야 먹히긴 합니다. 그래도 안되는 건 아니니 조금만 기다리세요.

이글 쓰면서 잠깐 참고한 브로그링크 겁니다. 만들때는 참고 안했는데, 막상 글쓰려니 어찌 쓸지 또 찾아보게 되네요.

http://shoaly.tistory.com/46

자잘한 리눅스 팁들

sudo로 background 앱을 실행시킬 경우

올바른예

$ sudo bash -c ‘wireshark &’

잘못된 예

$ sudo wireshark &

sudo 자체가 background로 돌아서 패스워드 입력전에 들어가버려서 SIGSTOP인채로 남아 있다고 함. 이렇게 했을 경우 fg로 복귀해서 정리까지 해줘야 console logout이 됨.

마스터 알고리즘 독후감

거의 반년에 걸쳐서 띄엄띄엄 읽다가 이제사. 거의 마지막부분인 유추론자 Analogist파트까지 도달했습니다. 읽다보니. 청킹이라는 개념이 나오고 마스터 알고리즘으로 옹호하려는 시도에 대해서 예전에는 큰 성과를 얻지 못했다는 설명까지 왔는데, 문제의 개수가 너무 많아져서 느려진것 때문이라고 합니다. 여기에 전부터 생각해오던 잊어버리기(Forgetting), 낡은(Aged), 희미해진(Fade), 추억(Memory Longevity) 등의 개념을 적용하면 어떨까 합니다. 기존의 연구들에서는 단기기억/장기 기억 두가지로 분류하지만 여기에 장기기억을 두가지로 다시 나누는 것입니다. 기존의 일반적으로 알고 있는 청킹에 의한 캐시 역할을 하는 장기기억은 상위 개념들의 빠른 탐색을 가능케 해주지만 이보다 더 오래된 기억들 그리고 재사용되지 않은 기억들은 초장기 기억 혹은 기억창고(Memory Garage)로 정의 되는 새로운 공간에 분리저장하는 것입니다. 이 기억들은 꺼내는데 청킹처럼 유사한 개념으로 꺼낼 수는 없습니다. 좀더 엄격하게 기억들을 꺼내는 조건이 정해지며, 최초 기억이 저장되고 구성될떄의 입력과 유사할때만 꺼내질수 있습니다. 이는 우리가 데쟈뷰라고 부르는것과 향수라고 부르는 바로 두가지 조건입니다. 데쟈뷰는 일련의 행동의 시간적 연속된 입력이 기억을 불러오는 것입니다. 이것은 기존의 단기기억이나 장기기억이 새롭게 생성하는 부차적인 입력이 우연히 기존 초장기 기억의 도출 조건과 유사해질때 발생합니다. 따라서 대부분은 불필요할 경우가 많습니다. 혹은 반대로 현재 발생한 사건들이 갑작스럽게 초장기 기억으로 분류되어 들어갔다 나오는 것으로도 볼수 있겠습니다. 그리고 향수의 경우 각 입력정보들중 가장 도미넌트한 정보가 들어오거나, 몇가지 요소로 대부분의 입력조건을 충족시킬 경우입니다. 대표적인 것이 시각정보나 여러 다른 정보들이 제공되지 않더라도 후각정보만으로 되새겨지는 기억이라던가, 과거와 매우 유사한 행동패턴/시각정보들이 가져오는 것입니다.

이러한 초장기 기억들이 가지는 이점은 기존의 장기기억들을 사실상 저장은 하고 있되, 단기/장기기억 학습의 절차중에 사용되는일이 거의 없다는 것입니다. 일종의 폭주를 막는 안정장치 역할을 하고도 있다고 볼 수 있겠습니다.

보안과 성능의 절대적 명제

보안과 성능은 모두 동일한 다음의 작업을 수행함으로서 향상될 수 있다.

“쓰고 읽고 계산하는 일련의 트랜잭션행위를 줄이면 된다”

이는 현대의 메모리기반 컴퓨팅 시스템 모두에 해당하며 작업의 종류 물리적 배치 작업의 개수와 무관하다.

작업이란 컴퓨팅시스템의 사용자가 원하는 한가지의 결과와 1:1의 관계룰 갖는 것을 말한다

예를 들면 단순한 1+1등의 슈학적 계산 결과나 다항방정식의 해를 구하는 것이나 물리적 장치에 한가지 결과를 가져오는 점을 찍는다던가 전체 화면을 바꾼다던가 다음 영상을 예축한다던가 하는 모든 작업들의 한가지 결과이다.

한가지 결과는 항상 같은 입력에 대하여 같은 결과를 보이는 함수관계로 볼수 있으며 내부혹은 외부의 상태에 따른 결과의 비확정성은 같은 작업에 포함시키지 않는다. 이 경우 조건부 작업의 분기라고 칭하며 시스템으로 구분하여 도시 혹은 설명할경우 시스템의 외부로 해달 조건을 내보내게 된다.

웹서버 복구

몇주전에 Odroid의 eMMC가 고장나서 전체 서버가 뻗고, 데이터를 날렸습니다.
나름 2018년 초반에 백업을 했다고 생각했는데, 외부 저장장치로 복사하는 스크립트가 제대로 동작하지 않았던 모양입니다.
Updraft에 외부 백업 설정을 했던 것 같은데, 그것도 안보이고.. 열심히 복구해가면서 반성해보는 하루입니다. 다행히 SSL 키는 찾아서 복잡한 부분은 넘어갔고, 복구로 데이터는 2017년 8월까지 편하게 복구가 되네요.
그간 글 몇개 남겨뒀던것 같은데… 허무하네요. 구글 검색에는 뜨는데, 막상 글이 없으니. 참… 부지런해집시다.
그나저나 Odroid OS설치공간을 외부 SD로 해놨는데, 이것도 얼마 못갈것 같으니, 아마 eMMC도 5년정도 되었고, 근 2년정도 계속 틀어놨었으니. 한 2년후면 또 고장날것 같네요. 웹디렉토리는 HDD로 바꾸어두어야 할것 같습니다. 그리고 뭐니뭐니해도 백업이 제일이라는 생각을 다시금 해봅니다.