<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6471119778129541855</id><updated>2026-06-25T11:28:40.218+09:00</updated><category term="DevTip"/><category term="리뷰"/><category term="라세티 프리미어"/><category term="크루즈"/><category term="Scrap"/><category term="차"/><category term="디젤"/><category term="수동"/><category term="갤럭시 넥서스"/><category term="도서"/><category term="안드로이드"/><category term="영화"/><category term="연비"/><category term="Android"/><category term="젤리빈"/><category term="YF 쏘나타"/><category term="시승기"/><category term="Eclipse"/><category term="OTA"/><category term="Yes24"/><category term="ebook"/><category term="쏘나타 하이브리드"/><category term="크레마"/><category term="Crema"/><category term="OBD2"/><category term="Torque"/><category term="Ubuntu"/><category term="넥서스 7"/><category term="전자책"/><category term="책"/><category term="Redmine"/><category term="USB"/><category term="octave"/><category term="리더기"/><category term="크레마 터치"/><category term="3D"/><category term="Blue Drive"/><category term="Git"/><category term="ICS"/><category term="IMAX"/><category term="OWC-401T"/><category term="Opentech"/><category term="Powerholic"/><category term="UX"/><category term="WPC"/><category term="WPC Qi"/><category term="Wireless Charge"/><category term="mod"/><category term="nexus 7"/><category term="넥서스 7 (2013)"/><category term="녹"/><category term="누적주행거리"/><category term="등급"/><category term="무선충전"/><category term="보험료"/><category term="부식"/><category term="사이드스커트"/><category term="아이리버"/><category term="오디오"/><category term="옵티머스 원"/><category term="우분투"/><category term="파워홀릭"/><category term="4.1.1"/><category term="AK100"/><category term="Astel &amp; Kern"/><category term="Bitnami"/><category term="Btv"/><category term="Calculix"/><category term="Crema Touch"/><category term="DIY"/><category term="DVD"/><category term="ECO 포인트"/><category term="EV 모드"/><category term="FEA"/><category term="Free-OBD"/><category term="HermiT"/><category term="Iriver"/><category term="JavaDoc"/><category term="LG"/><category term="MAC"/><category term="Mi8SE"/><category term="Nexus 5X"/><category term="OTG"/><category term="OWLAPI"/><category term="OWS-303R"/><category term="Ontology"/><category term="PC"/><category term="ROM"/><category term="SK브로드밴드"/><category term="SVN"/><category term="Semantic Web"/><category term="Serial port"/><category term="Sync"/><category term="Synergy"/><category term="Tip"/><category term="UML"/><category term="Unlock"/><category term="Vim"/><category term="VoD"/><category term="Xiaomi"/><category term="e-book"/><category term="install"/><category term="powershell"/><category term="windows"/><category term="개봉기"/><category term="갤럭시S3"/><category term="공유"/><category term="꽃"/><category term="넥서스 5X"/><category term="롬"/><category term="말말말"/><category term="미8SE"/><category term="미쓰 GO"/><category term="배트맨"/><category term="보험개발원"/><category term="사용자 경험"/><category term="삽질"/><category term="샤오미"/><category term="설치"/><category term="스크랩"/><category term="애니"/><category term="앱"/><category term="언락"/><category term="업데이트"/><category term="예스24"/><category term="음반"/><category term="음질"/><category term="이클립스"/><category term="잡"/><category term="잡소리"/><category term="전자도서관"/><category term="창조경제"/><category term="창조경제타운"/><category term="프로메테우스"/><category term="0.2.1"/><category term="1.2.20"/><category term="1.2.30"/><category term="2.2.10"/><category term="20.04"/><category term="3D Model"/><category term="3집"/><category term="4.3"/><category term="500h"/><category term="6현의 사무라이"/><category term="9:나인"/><category term="Accessory"/><category term="Android Studio"/><category term="Animation"/><category term="Ant"/><category term="Apple iWatch"/><category term="Aster"/><category term="Baud rate"/><category term="Beat"/><category term="CAD"/><category term="CD"/><category term="CDT"/><category term="CGV 왕십리"/><category term="CKEditor"/><category term="CM11"/><category term="Cardboard"/><category term="Code Aster"/><category term="CyanogenMod"/><category term="DAC"/><category term="Dasai Mochi 3"/><category term="Debug"/><category term="Doxygen"/><category term="E-500"/><category term="EDA"/><category term="FHD-267U3"/><category term="FPGA"/><category term="FTP"/><category term="Fitbit"/><category term="G3"/><category term="G80"/><category term="GOTY"/><category term="Genesis"/><category term="GitHub"/><category term="Google Glass"/><category term="Grace"/><category term="Graphics"/><category term="HD"/><category term="HP"/><category term="Host"/><category term="IPTV"/><category term="Indexer"/><category term="Integer"/><category term="Internet Explorer"/><category term="Java"/><category term="Jellybean"/><category term="Jfree Chart"/><category term="Jigloo"/><category term="Jolt 360"/><category term="Jolt Duo"/><category term="K5"/><category term="KBS"/><category term="KT"/><category term="KitKat"/><category term="LED"/><category term="LF"/><category term="MMS"/><category term="MS"/><category term="MS Word 2010"/><category term="Macro"/><category term="Matrix"/><category term="Microsoft"/><category term="Multiple build configuration"/><category term="OBD"/><category term="OST"/><category term="OneDrive"/><category term="Optimus One"/><category term="PIFAN"/><category term="Pavilion"/><category term="Photoshere"/><category term="Playseat Challenge"/><category term="Pride"/><category term="RG3"/><category term="RXTXcomm.jar"/><category term="Rhino"/><category term="Root"/><category term="SET"/><category term="SPICE_SCRIPTS"/><category term="SSH"/><category term="STL"/><category term="Salome"/><category term="Sarotech"/><category term="Serial"/><category term="Shifter"/><category term="Simpsons"/><category term="Snoop"/><category term="Square Root"/><category term="Strava"/><category term="Strava Cycling"/><category term="Surge"/><category term="Swing"/><category term="TH8A"/><category term="Telnet"/><category term="Thrustmaster"/><category term="UART"/><category term="USB3.0"/><category term="Ubunut"/><category term="UmlGraph"/><category term="Update"/><category term="VBscript"/><category term="VoLTE"/><category term="Wear"/><category term="XBOX360"/><category term="arm64"/><category term="arpack"/><category term="bConverged"/><category term="bga"/><category term="binary install"/><category term="ccx"/><category term="cgx"/><category term="code model"/><category term="com"/><category term="comm"/><category term="command"/><category term="configure"/><category term="cuda"/><category term="curve"/><category term="eclipses"/><category term="electropermanent magnets"/><category term="font"/><category term="ghostscript"/><category term="grub"/><category term="hibernation"/><category term="ini"/><category term="init"/><category term="initrd"/><category term="instrument-control"/><category term="jetson"/><category term="jupyter"/><category term="katago"/><category term="katrain"/><category term="kotex"/><category term="latex"/><category term="leifer"/><category term="libgfortran"/><category term="lmgrd"/><category term="make"/><category term="matplotlib"/><category term="mesh"/><category term="mesher"/><category term="multi cpu"/><category term="multi thread"/><category term="netgen"/><category term="ngspice"/><category term="notebook"/><category term="nvidia"/><category term="pdf"/><category term="playlist"/><category term="print"/><category term="prompt"/><category term="pyplot"/><category term="python"/><category term="regex"/><category term="routing"/><category term="rxtx"/><category term="sheer deformation"/><category term="sin"/><category term="snap"/><category term="spinit"/><category term="spools"/><category term="submission error"/><category term="tail"/><category term="telnetd"/><category term="vsftp"/><category term="xavier"/><category term="xspice"/><category term="가격"/><category term="가수"/><category term="가시나무왕"/><category term="각주"/><category term="개를 훔치는 완벽한 방법"/><category term="갤넥"/><category term="거대한 사기극"/><category term="거치대"/><category term="검색공급자"/><category term="게임"/><category term="경유"/><category term="고장난 거대기업"/><category term="고현정"/><category term="공간"/><category term="공조장치"/><category term="그 많던 싱아는 누가 다 먹었을까"/><category term="급발진"/><category term="기억상실"/><category term="나는 공무원이다"/><category term="낙조"/><category term="난"/><category term="날짜"/><category term="넥서스"/><category term="넥서스6"/><category term="넥서스7"/><category term="넥스트파피루스"/><category term="노래"/><category term="눈썹"/><category term="느낌"/><category term="다짐"/><category term="다크나이트"/><category term="다크나이트 라이즈"/><category term="단점"/><category term="도서관"/><category term="도전과제"/><category term="동기화"/><category term="락 아웃"/><category term="롭리팝"/><category term="리더"/><category term="리모컨"/><category term="리셋"/><category term="리콜"/><category term="마이크로소프트"/><category term="매크로"/><category term="멘토"/><category term="목소리"/><category term="문제"/><category term="미러링"/><category term="미션오일"/><category term="미주"/><category term="박신양"/><category term="박완규"/><category term="박완서"/><category term="배송"/><category term="배터리"/><category term="배터리 소모"/><category term="백설공주"/><category term="버튼"/><category term="벌거벗은 통계학"/><category term="벽돌"/><category term="부스트"/><category term="부천국제판타스틱영화제"/><category term="부활"/><category term="블랙박스"/><category term="블레이드H"/><category term="사랑한 후에"/><category term="사용기"/><category term="사용시간"/><category term="산세베리아"/><category term="새로텍"/><category term="설정"/><category term="성동일"/><category term="세계대전Z"/><category term="소나타"/><category term="속도"/><category term="수리"/><category term="수식 번호"/><category term="슈퍼 세라믹"/><category term="스눕"/><category term="스마트 라켓"/><category term="스마트키"/><category term="스위치 커버 교체"/><category term="스카우팅 리포트"/><category term="스타트 버튼"/><category term="스토리K"/><category term="스트링"/><category term="스파이더맨"/><category term="스팸"/><category term="습기"/><category term="시사기획 창"/><category term="시작"/><category term="시타"/><category term="신고"/><category term="심슨"/><category term="썬렉스"/><category term="썬팅"/><category term="쏘나타2"/><category term="아쉬움"/><category term="아이스크림 샌드위치"/><category term="아캄시티"/><category term="업그레이드"/><category term="역사 e"/><category term="열차단"/><category term="영화제"/><category term="예약판매"/><category term="오래가는 UX 디자인"/><category term="온도"/><category term="올림푸스"/><category term="옵원"/><category term="외장하드"/><category term="외전"/><category term="요금"/><category term="우화"/><category term="워드프레스"/><category term="월드워Z"/><category term="윈도우즈7"/><category term="유저"/><category term="유해진"/><category term="윤제문"/><category term="이문식"/><category term="인랑"/><category term="인켈"/><category term="인터넷 익스플로러"/><category term="인페르노"/><category term="일몰"/><category term="자전거"/><category term="장점"/><category term="장하석의 과학"/><category term="재능기부"/><category term="재생목록"/><category term="전기차"/><category term="전동화"/><category term="전인권"/><category term="절전모드"/><category term="제네시스"/><category term="조세도피처"/><category term="조세피난처"/><category term="조세회피처"/><category term="좀비"/><category term="지금은 없는 이야기"/><category term="질문을 디자인하라"/><category term="차단"/><category term="철학을 만나다"/><category term="첫인상"/><category term="최규석"/><category term="추가기능"/><category term="추적"/><category term="출사"/><category term="카드보드"/><category term="카메라"/><category term="캐빈 인 더 우즈"/><category term="커널"/><category term="케이세다"/><category term="케이스"/><category term="콜라보레이션"/><category term="크레마 샤인"/><category term="키보드"/><category term="킷캣"/><category term="터보"/><category term="테니스"/><category term="토요타"/><category term="통신사"/><category term="파리의 도둑고양이"/><category term="패널"/><category term="팩스"/><category term="펌웨어"/><category term="페이지원"/><category term="포토스피어"/><category term="폴딩 키"/><category term="프로세스"/><category term="프로야구"/><category term="하이브리드"/><category term="한글"/><category term="한밭전자도서관"/><category term="현대"/><category term="화질"/><category term="환경개선부담금"/><category term="환경변수"/><title type='text'>회색 다락방</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>189</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-2866909961704072974</id><published>2026-06-25T11:28:40.217+09:00</published><updated>2026-06-25T11:28:40.218+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Dasai Mochi 3"/><category scheme="http://www.blogger.com/atom/ns#" term="Genesis"/><title type='text'>Dasai Mochi 3 stand for Genesis</title><content type='html'>&lt;p&gt;Dasai Mochi 3 stand for Genesis 27-inch screen&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://drive.google.com/file/d/1taqXmt7M6EUcyKNQXRAzNymfY6KiUyvk/view?usp=drive_link&quot;&gt;https://drive.google.com/file/d/1taqXmt7M6EUcyKNQXRAzNymfY6KiUyvk/view?usp=drive_link&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/2866909961704072974/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2026/06/dasai-mochi-3-stand-for-genesis.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/2866909961704072974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/2866909961704072974'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2026/06/dasai-mochi-3-stand-for-genesis.html' title='Dasai Mochi 3 stand for Genesis'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-306862898939338110</id><published>2025-10-17T14:04:00.006+09:00</published><updated>2026-04-20T15:47:04.039+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="G80"/><category scheme="http://www.blogger.com/atom/ns#" term="RG3"/><category scheme="http://www.blogger.com/atom/ns#" term="공간"/><category scheme="http://www.blogger.com/atom/ns#" term="문제"/><category scheme="http://www.blogger.com/atom/ns#" term="아쉬움"/><category scheme="http://www.blogger.com/atom/ns#" term="잡소리"/><category scheme="http://www.blogger.com/atom/ns#" term="전기차"/><category scheme="http://www.blogger.com/atom/ns#" term="전동화"/><category scheme="http://www.blogger.com/atom/ns#" term="제네시스"/><title type='text'>제네시스 전동화  G80 (RG3)을 타며 느낀 것들</title><content type='html'>&lt;h2 style=&quot;text-align: left;&quot;&gt;해결해야 할 문제&lt;/h2&gt;&lt;div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;프런트 도어프레임 가니시 잡소리 (&lt;a href=&quot;https://youtu.be/pHSkoqwtfs4&quot; target=&quot;_blank&quot;&gt;링크&lt;/a&gt;)&lt;/h4&gt;운전석, 동승자석 앞 문 외부 B필러 커버(공식 이름은 프런트 도어 프레임 가니쉬)에서 찌그덕 소리남. 문 열고 닫을 때마다 거슬림. 한 번 센터 가서 확일했을 때 재현이 안 되어 그냥 돌아왔는데, 나중에 소리 날 때 녹화해 둠. 다시 방문해서 접수, 현상 확인, 부품 주문, 재방문, 교체해서 문제 해결. 새 차에 손대는 게 찜찜했지만 해결되니 속 시원함.&lt;/div&gt;&lt;div&gt;2026. 4. -&amp;gt; 문제 재발했다. 겨울 내내 괜찮았는데, 또 찌걱거린다. 엊그제 출고 1년 경과하면서 에어필터, 와이퍼 블레이드 교체할 때 조치 가능한지 물어봤어야 했는데. DIY로 이렇게 저렇게 조치할 수 있으면 좋은데 탈거/재장착이 너무 어렵게 되어 있어서 엄두가 안 난다.&lt;br /&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;후석 무선 충전부 잡소리 (&lt;a href=&quot;https://youtube.com/shorts/GkdY4CcT3RU?feature=share&quot; target=&quot;_blank&quot;&gt;링크&lt;/a&gt;)&lt;/h4&gt;리어 콘솔 암레스트, 무선 충전부 덜그럭거림. 이거 뜯어서 고정을 시키고 싶은데, 정비지침서를 보니 뒷자석 포함해서 들어낼 것들이 많네... 뭐.. 일단 크게 문제를 일으키진 않으니 나중에 셀프로 한 번 시도해 봐야 할 듯. 근데 공사가 크다.&lt;h4 style=&quot;text-align: left;&quot;&gt;리어 커튼 잡소리 (&lt;a href=&quot;https://youtube.com/shorts/6kJSaboEPbY?feature=share&quot; target=&quot;_blank&quot;&gt;링크1&lt;/a&gt;, &lt;a href=&quot;https://youtu.be/p981so9yGEM&quot; target=&quot;_blank&quot;&gt;링크2&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://youtube.com/shorts/2Nz63GW0IMQ?feature=share&quot; target=&quot;_blank&quot;&gt;링크3&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://youtube.com/shorts/OSF8SLbn720?feature=share&quot; target=&quot;_blank&quot;&gt;링크4&lt;/a&gt;)&lt;/h4&gt;&lt;/div&gt;좌측 뒷바퀴가 요철 넘어갈 때 어딘가에서 플라스틱 떨리는 소리 남. 운전자 머리 바로 뒤쪽(헤드레스트는 아니고)에서 나는 느낌인데.. 천장쪽 루프 트림 어셈블리쪽? 전동 시트쪽? C필러 쿼터 글래스 안쪽?&lt;div&gt;서비스 센터 방문&lt;/div&gt;&lt;div&gt;1차: 천장 쪽 의심했으나 증상이 재현되지 않아 조치 안 함&lt;/div&gt;&lt;div&gt;2차: 뒷좌석 시트 고정부(?)의 유격이 없는지 확인하고 조금 더 빡빡하게 조치. 하지만 증세 여전.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;나중에 원인을 찾음. 바로 리어 커튼!! (링크4 참고)&lt;/div&gt;&lt;div&gt;리어 커튼을 올린 상태에서 차에 충격이 가해지면 떨리는 소리 남.&lt;/div&gt;&lt;div&gt;서비스 센터 다시 방문&lt;/div&gt;&lt;div&gt;3차: 리어 커튼 교체, 볼트의 조임 토크 재점검함. 하지만, 리어 커튼이 개선품이 아니어서 여전히 소리 남.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;결론? 아직 해결 안 됨. 가급적 리어 커튼 안 올리게 됨.&lt;/div&gt;&lt;div&gt;이거 해결하고 싶은데.. 보증 끝나기 전에 개선품이 나오기는 하려나.. ㅜㅜ&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;제네시스 앱의 EV 에너지 사용정보 불일치&lt;/h4&gt;&lt;div&gt;주행 이력과 함께 EV 에너지 사용정보를 볼 수 있는데, 종종 터무니 없는 내용이 나온다.&lt;/div&gt;&lt;div&gt;실제 사용한 전력양보다 훨씬 많은 전력을 썼다고 하는 현상이다.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5Ep0_QEnW58bEiattv9cq-sZB5pRyD0prbdkyzBWWxPyPI8fpqYjY9BfffFA-_A9Gwcm0r7uod3Qzk8NWvYhOjyPKuvBwVrFaBaWV4XuBHixJSwg3JNq4xzuasoQNH4G-vBD5QDISW6zYAeAMSlgmwBctngCzQu1EFdGba9kPkly3pKCDM-GpVbSUa4iN/s2287/Screenshot_20250911_100739.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2287&quot; data-original-width=&quot;1080&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5Ep0_QEnW58bEiattv9cq-sZB5pRyD0prbdkyzBWWxPyPI8fpqYjY9BfffFA-_A9Gwcm0r7uod3Qzk8NWvYhOjyPKuvBwVrFaBaWV4XuBHixJSwg3JNq4xzuasoQNH4G-vBD5QDISW6zYAeAMSlgmwBctngCzQu1EFdGba9kPkly3pKCDM-GpVbSUa4iN/w302-h640/Screenshot_20250911_100739.png&quot; width=&quot;302&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;주행을 하지 않거나 주행거리가 짧은데로 실제보다 더 많은 전력을 썼다고 하는 날들이 많다.&lt;/div&gt;&lt;div&gt;그렇다보니, 차량에서 보는 연비 기록과도 완전 딴판이다.&lt;/div&gt;&lt;div&gt;구글 앱 리뷰로 문의하면 고객센터로 돌리는데, 고객센터에서는 리셋해 보란다.&lt;/div&gt;&lt;div&gt;당연히 해결은 안 되고.. 다시 고객센터 전화하자니 귀찮고..&lt;/div&gt;&lt;div&gt;언제나 해결 되려나..&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;차량이 완전히 멈추기 직전에 움찔거리는 현상&lt;/h4&gt;&lt;div&gt;이거 참 설명이 어렵다.&lt;/div&gt;&lt;div&gt;&lt;div&gt;평소 오토회생제동 상태로 주행하다가 정지하고 싶을 때 왼쪽 패들로 MAX 상태를 유지해 정지하는데,&lt;/div&gt;&lt;div&gt;거의 멈추기 직전에 물리 브레이크를 밟으면 완전히 멈추기 직전에 ABS 걸리듯 두두두 움찔거림.&lt;/div&gt;&lt;div&gt;회생제동 로직, 브레이킹 로직, 물리적 브레이크 감지 로직이 꼬이는 것 같다.&lt;/div&gt;&lt;div&gt;차는 멈추려고 하는데, 모터는 creeping 모드로 차를 밀려고 하는 느낌.&lt;/div&gt;&lt;div&gt;모터 구동 원리상 on/off가 매우 빨리 바뀌어야 부드러운데, 구르고자 하는 모터를 거의 정지 수준에 가깝에 잡은 상황에서도 모터를 구동하려다보니 on/off 상태 변화가 느껴지는 것으로 보임.&lt;/div&gt;&lt;div&gt;요런 건 충분히 OTA로 업데이트 가능할 것 같은데, 문제는 제조사에서 요런 문제를 알고 있을지.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;완전 부드럽게 멈출 생각 하지 말고 확 서야하나 봄.&lt;/div&gt;&lt;div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;아쉬운 것&lt;/h2&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;넓고 길다. 부담스럽다. 엔진도 없는데 얖부분이 좀 짧아질수는 없었을까?하는 상상을 해 본다.&lt;/li&gt;&lt;li&gt;무겁다.&lt;/li&gt;&lt;li&gt;실내 바닥이 좀 높다.&lt;/li&gt;&lt;li&gt;내장재의 블랙 하이글로시. 왜 이걸 좋아하는지 모르겠다. 지문 남아 지저분해지고, 햇빛 비치면 반사 땜에 힘들고, 열받으면 엄청 뜨겁고.. SDS를 선택하면 좋긴 한데 가격이..&lt;/li&gt;&lt;li&gt;트렁크가 좁다.&lt;/li&gt;&lt;li&gt;텔레스코픽 스티어링 조절 범위가 더 넓었으면 좋겠다. 현대/기아는 범위가 오묘하게 부족하다. 예전 쉐보레 기준 70% 정도 수준인 듯.&lt;/li&gt;&lt;li&gt;뒷자리 컨트롤러가 앞자리와 동일하게 동작하면 좋겠다. 지금은 너무 멍텅구리. 라디오 제어, 트랙 앞/뒤 이동, 볼륨만 제어됨. RG3는 앞 컨트롤러만 쓰면 터치가 필요 없으니 완전히 동일하게 뒤에 제어할 수 있을텐데..&lt;/li&gt;&lt;li&gt;충전구 위치가 너무 아쉽다. 옆구리로 가기엔 프레임/패널이 바뀌니 상대적으로 저렴한 방법이었겠지만..&lt;/li&gt;&lt;li&gt;GV70, GV80엔 있는 방향제 옵션?이 G80엔 왜 없을까.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;소프트웨어로 개선되면 좋겠는 것&lt;/h2&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;인포테인먼트 마스터 볼륨이 앱마다 전부 다르다. 자연의 소리가 제일 크고, 라디오, 팟빵 오토, USB 등등은 전부 조금씩 달라 깜짝깜짝 놀랄 때가 많다. 게다가 별도 엔터테인먼트 쪽 넷플릭스, 유튜브, 디즈니+ 쪽은 볼륨이 확 낮아진다. 이거 진짜 빨리 개선되면 좋겠다.&lt;/li&gt;&lt;li&gt;볼륨이 일정 수준 이상인 상태에서 오디오를 끄거나 시동을 끄는 경우, 다음 오디오를 켰을 때 지정된 볼륨으로 낮춰주면 좋겠다. 거의 20년 전 오디오에도 있는 기능인데 이게 없다. 마스터 오디오 볼륨이 들쭉날쭉한 거랑 묶여서 종종 불편하다.&lt;/li&gt;&lt;li&gt;기본 메뉴와 엔터테인먼트 쪽 UI가 통합, 정리되었으면 좋겠다. 기본 메뉴는 터치 없이 컨트롤러만으로 어느 정도(완벽히는 아니고) 제어할 수 있는데, 엔터테인먼트 쪽은 컨트롤러만으로 제어하기에는 뭔가 부족하다. 일관성, 직관성 모두 떨어진다.&lt;/li&gt;&lt;li&gt;엔터테인먼트의 경우 D/R 넣으면 앱 자체가 종료되는데, 영상만 메인으로 전환하고 소리는 계속 나오면 좋겠다.&lt;/li&gt;&lt;li&gt;USB 오디오 들을 때 각 노래 끝부분이 항상 지지직 하며 끝난다. 음원의 포맷? 코덱? 비트레이트? 마다 조금씩 다른가? 잘 듣다가 매 곡 마지막에 항상 짜증..&lt;/li&gt;&lt;li&gt;제네시스뮤직은 플레이리스트가 너무 이상하게 동작한다. 원하는 곡을 검색하는 것 까지는 좋은데, 이후 플레이리스트에 넣을지 한 번만 재생할지 애매해진다. 재생기록과 재생목록, 개별 재생목록&amp;nbsp;관리가 안 되니 뭔가 불편하다. 추천 알고리즘도 부족하고. 제네시스 앱과도 잘 연동시켜서 목록 관리를 할 수 있으면.. 목적지 경로도 미리 하고, 재생목록도 미리 만들어서 차로 보내 놓는다는 생각으로.&lt;/li&gt;&lt;li&gt;깜빡이 볼륨 조절 기능이 없다? 예전 모델에서는 옵션으로 조절할 수 있었는데, 이제 안되는 것 같다. 차가 조용한만큼 조절 가능하게 해 주면 좋겠다.&lt;/li&gt;&lt;li&gt;키 가지고 멀리 떨어지면 자동으로 문 잠기기. 자동으로 안 잠기는 것 같은데..&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;좋은 것, 만족하는 옵션&lt;/h2&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;조용하다.&lt;/li&gt;&lt;li&gt;오디오 음질이 정말 좋다.&lt;/li&gt;&lt;li&gt;통합형 디스플레이의 기본 테마가 아주 맘에 든다. 널찍하고, 시간/날씨에 따라 변하는 테마도 아주 맘에 들고.&lt;/li&gt;&lt;li&gt;승차감이 부드럽다.&lt;/li&gt;&lt;li&gt;후륜조향. 근데 주차할 때 아직도 조금씩 헷갈린다.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/306862898939338110/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2025/10/g80-rg3.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/306862898939338110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/306862898939338110'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2025/10/g80-rg3.html' title='제네시스 전동화  G80 (RG3)을 타며 느낀 것들'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5Ep0_QEnW58bEiattv9cq-sZB5pRyD0prbdkyzBWWxPyPI8fpqYjY9BfffFA-_A9Gwcm0r7uod3Qzk8NWvYhOjyPKuvBwVrFaBaWV4XuBHixJSwg3JNq4xzuasoQNH4G-vBD5QDISW6zYAeAMSlgmwBctngCzQu1EFdGba9kPkly3pKCDM-GpVbSUa4iN/s72-w302-h640-c/Screenshot_20250911_100739.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-5962092750006950434</id><published>2025-09-23T14:52:00.004+09:00</published><updated>2025-09-23T14:52:40.841+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LG"/><category scheme="http://www.blogger.com/atom/ns#" term="리모컨"/><category scheme="http://www.blogger.com/atom/ns#" term="버튼"/><category scheme="http://www.blogger.com/atom/ns#" term="수리"/><title type='text'>LG TV 리모컨 수리</title><content type='html'>&lt;p&gt;TV 리모컨을 들고 소파와 물아일체가 되어 있던 어느 주말.&lt;br /&gt;유투브와 OTT에 찜해 둔 영상을 보고 있는데 갑자기 리모컨의 오른쪽 방향 버튼이 계속 눌리는 현상이 발생했다. 가만히 있다가 진행표시가 갑자기 앞으로 쭈~욱 움직인다.&lt;br /&gt;얼마 전부터 배터리 부족이라고 메시지가 뜨던 게 기억나 새 배터리를 끼워도 봤는데도 해결이 안 되어 결국 분해해보기로 결정.&lt;/p&gt;&lt;p&gt;원래 생긴건 요렇다. LG 인공지능 리모컨이라고 하네.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.lge.co.kr/kr/images/care-accessories/tv/md09584827/gallery/medium01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1000&quot; data-original-width=&quot;1000&quot; height=&quot;320&quot; src=&quot;https://www.lge.co.kr/kr/images/care-accessories/tv/md09584827/gallery/medium01.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;배터리 빼고, 옆구리를 돌아가면서 잘 벌리면 쉽게 분리된다.&lt;div&gt;처음엔 택타일 버튼이나 멤브레인 키가 들어가 있는 줄 알았는데, 까 보니 금속 택타일 버튼이네...&lt;/div&gt;&lt;div&gt;커버 비닐(?)을 잘짝 잘라 들어내고 들여다보니 접촉면에 부식이 많이 진행된 걸 확인.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfx40qKVU4ns3lMqJLPPstHbk5h5kZcCr_4rxIskSq6bHKsPQeAHU_37xYm2WW5tbscZTdDky7apaA4jn8J7qnPazx2p6e0EdLpHDcPvCgwjs9AXvMsl9L77mcBlnOYR0mF42DUfe1OqH1QMvUeptRMA_wsbZzup1uWmPpkzucEhdf0cLoUtOP6mKT5_Sn/s4000/20250916_095812.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4000&quot; data-original-width=&quot;2252&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfx40qKVU4ns3lMqJLPPstHbk5h5kZcCr_4rxIskSq6bHKsPQeAHU_37xYm2WW5tbscZTdDky7apaA4jn8J7qnPazx2p6e0EdLpHDcPvCgwjs9AXvMsl9L77mcBlnOYR0mF42DUfe1OqH1QMvUeptRMA_wsbZzup1uWmPpkzucEhdf0cLoUtOP6mKT5_Sn/s320/20250916_095812.jpg&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;잘 닦고, 부식 제거하고, 다시 잘 고정시킨 뒤 조립. 물론 분해의 역순으로.&lt;/div&gt;&lt;div&gt;했더니 속 시원하게 아주 잘 동작한다.&lt;/div&gt;&lt;div&gt;5~6만 원 나갈 뻔..&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/5962092750006950434/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2025/09/lg-tv.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/5962092750006950434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/5962092750006950434'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2025/09/lg-tv.html' title='LG TV 리모컨 수리'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfx40qKVU4ns3lMqJLPPstHbk5h5kZcCr_4rxIskSq6bHKsPQeAHU_37xYm2WW5tbscZTdDky7apaA4jn8J7qnPazx2p6e0EdLpHDcPvCgwjs9AXvMsl9L77mcBlnOYR0mF42DUfe1OqH1QMvUeptRMA_wsbZzup1uWmPpkzucEhdf0cLoUtOP6mKT5_Sn/s72-c/20250916_095812.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-1456009587812542684</id><published>2024-03-12T11:57:00.002+09:00</published><updated>2024-03-12T11:57:25.064+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jupyter"/><category scheme="http://www.blogger.com/atom/ns#" term="kotex"/><category scheme="http://www.blogger.com/atom/ns#" term="latex"/><category scheme="http://www.blogger.com/atom/ns#" term="notebook"/><category scheme="http://www.blogger.com/atom/ns#" term="pdf"/><category scheme="http://www.blogger.com/atom/ns#" term="한글"/><title type='text'>jupyter pdf 출력</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div&gt;(현상) jupyter notebook을 PDF로 출력할 때 한글이 안 나옴&lt;/div&gt;&lt;div&gt;(원인) jupyter notebook 메뉴를 따라 자동으로&amp;nbsp;생성하면 kotex package를 사용하도록 지정이 안 됨&lt;/div&gt;&lt;div&gt;(해결) 기본 latex template에 항상 kotex package를 사용하도록 지정.&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;수정해야 할 파일 이름은 base.tex.j2&lt;/li&gt;&lt;li&gt;리눅스 쪽이면 /home/&amp;lt;username&amp;gt;/.local/share/jupyter/nbconvert/templates/latex에,&lt;br /&gt;윈도우 쪽이면&amp;nbsp;C:\Python\Python310\share\jupyter\nbconvert\templates\latex에 있음&lt;/li&gt;&lt;li&gt;base.tex.j2에 \usepackage{kotex} 행 추가 (들여쓰기 등 맞춰서)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/1456009587812542684/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2024/03/jupyter-pdf.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/1456009587812542684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/1456009587812542684'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2024/03/jupyter-pdf.html' title='jupyter pdf 출력'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-5174228835573781214</id><published>2022-11-18T20:11:00.002+09:00</published><updated>2023-02-07T17:34:00.588+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="블레이드H"/><category scheme="http://www.blogger.com/atom/ns#" term="스트링"/><category scheme="http://www.blogger.com/atom/ns#" term="시타"/><category scheme="http://www.blogger.com/atom/ns#" term="케이세다"/><title type='text'>케이세다 2021 시타 스트링 (블레이드 H)</title><content type='html'>&lt;b&gt;[Blade H-1]&lt;/b&gt;&lt;br /&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;- 51/50&lt;br /&gt;- 평범한 파워, 컨트롤. 팔에도 크게 부담 없었음.&lt;br /&gt;- 인위적인 스핀이 거의 없다고 느껴짐.&lt;br /&gt;- 텐션이 조금 낮아지면 홀드감이 좋아지나 스핀은 여전히 부족한 느낌이었음.&lt;br /&gt;- 내구성 좋음. 텐션의 급격한 변화도 안 느껴졌음.&lt;br /&gt;- 제품 소개에 나온 특징에 전반적으로 동의.&lt;br /&gt;- 케이세다의 각종 하이브리드 구성의 특징을 비교하기 위한 기본 줄 조합으로 아주 괜찮음. 본인만의 감각을 찾아가는 단계의 초보자나, 오버하지 않는 정직한 특징의 스트링을 선호한다면 추전.&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;[Blade H-4]&lt;/b&gt;&lt;br /&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;- 51/50&lt;br /&gt;- 줄 매기 어려운 사각 줄. 신경써서 잘 풀어서 매지 않으면 불규칙하게 꼬일 수 있음.&lt;br /&gt;- H-1 대비 확실히 스핀 많아짐. 스핀 땜에 당연히 공이 짧아지는데 파워도 함께 조금 줄어들었는지 생각보다 더 짧아짐.&lt;br /&gt;- 너무 빠른 스윙 시 정확성이 다소 떨어짐. 발사각도 편차가 조금 크게 느껴졌음. 제품 소개에 나온 특징에는 우수한 컨트롤이 장점이라 되어 있는데.. 사용자의 실력이 문제인 듯.&lt;br /&gt;- 스윙 속도가 적절히 낮으면 홀드감도 나쁘지 않고 발사 각도, 방향도 나름 제어할 수 있었음. 적응이 좀 필요함.&lt;br /&gt;- 4각 줄이다 보니 한쪽 면 전체가 크로스 스트링에 닿는데, 그래서인지 텐션이 급격히 떨어짐.&lt;br /&gt;- 느린 스윙 스피드에서 강한 스핀을 원하면 시도해 볼만 함.&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;[Blade H-6]&lt;/b&gt;&lt;br /&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;- 51/50&lt;br /&gt;- H-1 대비 회전량만 적당히 많아진 듯한 느낌. 회전량 만큼 공은 짧아지지만 파워 면에서 이질감도 적고 발사각도 제어가 의외로 잘 되어 충분히 보완할 수 있었음.&lt;br /&gt;- 처음엔 M-6가 조금 단단하다 느껴졌는데, 느낌과는 달리 팔에 부담이 가지는 않았고 텐션 감소도 급격하지 않았음. 신기하게 M-6의 각이 끝까지 잘 살아있었음.&lt;br /&gt;- 개인적으로 가장 맘에 들었던 조합임.&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;[Blade H-7]&lt;/b&gt;&lt;br /&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;- 51/50&lt;br /&gt;- H-6와 비슷할 거라 예상했으나 의외로 H-4 처럼 적응하는 데 고생했음.&lt;br /&gt;- M-6가 살짝 무르다는 느낌이 있었는데, 그 때문인지 거리 조절에 아주 애를 먹었음. 제품 소개의 특징에 반발력이 높다고 나오는데 어떤 느낌인지 알 것 같았음. 적응을 하던지 아님 텐션을 조금 조정해야 할 것 같았음.&lt;br /&gt;- 딱히 내구성이 떨어진다거나 한다는 느낌은 없었으나, 의외로 각이 무뎌지는 것처럼 보였음.&lt;br /&gt;- H-6 다음 선택지이나, 텐션 조정을 해야 할 것 같았음.&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/5174228835573781214/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2022/11/2021-h.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/5174228835573781214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/5174228835573781214'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2022/11/2021-h.html' title='케이세다 2021 시타 스트링 (블레이드 H)'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-900669836838225113</id><published>2022-01-20T11:39:00.006+09:00</published><updated>2022-02-16T13:14:51.561+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="arm64"/><category scheme="http://www.blogger.com/atom/ns#" term="cuda"/><category scheme="http://www.blogger.com/atom/ns#" term="jetson"/><category scheme="http://www.blogger.com/atom/ns#" term="katago"/><category scheme="http://www.blogger.com/atom/ns#" term="katrain"/><category scheme="http://www.blogger.com/atom/ns#" term="nvidia"/><category scheme="http://www.blogger.com/atom/ns#" term="xavier"/><title type='text'>Running KataGo/KaTrain on Jetson AGX Xavier</title><content type='html'>Set-up Jetson AGX Xavier&lt;br /&gt;&lt;div&gt;From Ubuntu 20.04, use sdkmanager and follow instructions&lt;/div&gt;&lt;div&gt;Temporarily modify VERSION_ID in /etc/os-release from 20.04 to 18.04&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Preparation-CMake (on Jetson)&lt;/div&gt;&lt;div&gt;KataGo requires version 3.18.2 or higher, but the default wa 3.10.2, hence build from source.&lt;/div&gt;&lt;div&gt;Download CMake source file then install at /usr/local/CMake&lt;/div&gt;&lt;div&gt;git clone https://github.com/Kitware/CMake&lt;/div&gt;&lt;div&gt;./bootstrap --prefix=/usr/local/CMake&lt;/div&gt;&lt;div&gt;make&lt;/div&gt;&lt;div&gt;sudo make install&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Preparation-KataGo v1.10.0 (on Jetson)&lt;/div&gt;&lt;div&gt;Refer github.com/lightvector/KataGo/blob/master/Compiling.md#linux&lt;/div&gt;&lt;div&gt;For CMake, refer Preparation-CMake (on Jetson) above.&lt;/div&gt;&lt;div&gt;Check all packages are installed or updated, including zlib1g-dev, libzip-dev, libgoogle-perftools-dev, libssl-dev, and ocl-icd-opencl-dev.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Build KataGo&lt;/div&gt;&lt;div&gt;git clone https://github.com/lightvector/KataGo.git&lt;/div&gt;&lt;div&gt;git checkout v1.10.0&lt;/div&gt;&lt;div&gt;cd KataGo/cpp&lt;/div&gt;&lt;div&gt;/usr/local/CMake/cmake . -DUSE_BACKEND=CUDA -DUSE_TCMALLOC=1&lt;/div&gt;&lt;div&gt;[Note]&lt;/div&gt;&lt;div&gt;Selecting TensorRT backend(TENSORRT) will give check error. &quot;TensorRT 8.2 or greater is required but 8.0.1 was found&quot;. Currently it is not easy to upgrade TensorRT package, hence ignore.&lt;/div&gt;&lt;div&gt;make&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Test/Benchmark KataGo&lt;/div&gt;&lt;div&gt;./katago&amp;nbsp;benchmark -model tests/models/g170-b6c96-s175395328-d26788732.bin.gz -config configs/gtp_example.cfg&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Ordered summary of results:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 5: 10 / 10 positions, visits/s = 788.64 nnEvals/s = 701.63 nnBatches/s = 281.81 avgBatchSize = 2.49 (10.2 secs) (EloDiff baseline)&lt;/div&gt;&lt;div&gt;numSearchThreads = 10: 10 / 10 positions, visits/s = 1105.99 nnEvals/s = 979.53 nnBatches/s = 197.14 avgBatchSize = 4.97 (7.3 secs) (EloDiff +114)&lt;/div&gt;&lt;div&gt;numSearchThreads = 12: 10 / 10 positions, visits/s = 1271.85 nnEvals/s = 1138.23 nnBatches/s = 192.11 avgBatchSize = 5.92 (6.4 secs) (EloDiff +163)&lt;/div&gt;&lt;div&gt;numSearchThreads = 16: 10 / 10 positions, visits/s = 1297.56 nnEvals/s = 1172.58 nnBatches/s = 143.77 avgBatchSize = 8.16 (6.3 secs) (EloDiff +163)&lt;/div&gt;&lt;div&gt;numSearchThreads = 20: 10 / 10 positions, visits/s = 1494.94 nnEvals/s = 1355.48 nnBatches/s = 135.07 avgBatchSize = 10.04 (5.5 secs) (EloDiff +210)&lt;/div&gt;&lt;div&gt;numSearchThreads = 24: 10 / 10 positions, visits/s = 1540.22 nnEvals/s = 1406.60 nnBatches/s = 116.03 avgBatchSize = 12.12 (5.3 secs) (EloDiff +215)&lt;/div&gt;&lt;div&gt;numSearchThreads = 32: 10 / 10 positions, visits/s = 1608.93 nnEvals/s = 1478.43 nnBatches/s = 84.03 avgBatchSize = 17.59 (5.2 secs) (EloDiff +219)&lt;/div&gt;&lt;div&gt;numSearchThreads = 40: 10 / 10 positions, &lt;b&gt;visits/s = 1682.52&lt;/b&gt; nnEvals/s = 1579.64 nnBatches/s = 74.20 avgBatchSize = 21.29 (5.0 secs) (EloDiff +224)&lt;/div&gt;&lt;div&gt;numSearchThreads = 48: 10 / 10 positions, visits/s = 1648.66 nnEvals/s = 1564.58 nnBatches/s = 55.86 avgBatchSize = 28.01 (5.1 secs) (EloDiff +203)&lt;/div&gt;&lt;div&gt;numSearchThreads = 64: 10 / 10 positions, visits/s = 1628.13 nnEvals/s = 1574.74 nnBatches/s = 43.20 avgBatchSize = 36.45 (5.3 secs) (EloDiff +172)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Based on some test data, each speed doubling gains perhaps ~250 Elo by searching deeper.&lt;/div&gt;&lt;div&gt;Based on some test data, each thread costs perhaps 7 Elo if using 800 visits, and 2 Elo if using 5000 visits (by making MCTS worse).&lt;/div&gt;&lt;div&gt;So APPROXIMATELY based on this benchmark, if you intend to do a 5 second search:&amp;nbsp;&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 5: (baseline)&lt;/div&gt;&lt;div&gt;numSearchThreads = 10:&amp;nbsp; +114 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 12:&amp;nbsp; +163 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 16:&amp;nbsp; +163 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 20:&amp;nbsp; +210 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 24:&amp;nbsp; +215 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 32:&amp;nbsp; +219 Elo&lt;/div&gt;&lt;div&gt;&lt;b&gt;numSearchThreads = 40&lt;/b&gt;:&amp;nbsp; +224 Elo (recommended)&lt;/div&gt;&lt;div&gt;numSearchThreads = 48:&amp;nbsp; +203 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 64:&amp;nbsp; +172 Elo&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Might consider, changing maxVisits to 800, and numSearchThreads to 40 in configs/gtp_example.cfg.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Rename katago to katago-v1.10.0-cuda10.2-arm64, configs/gtp_example.cfg to gtp_v1.10.0-cuda10.2-arm64.cfg, and pack executable and the configuration file for later use.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[Ref.] Performance when Eigen backend is chosen. (15W DESKTOP Mode -&amp;gt; 4 cores)&lt;/div&gt;&lt;div&gt;&lt;div&gt;Ordered summary of results:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 3: 10 / 10 positions, visits/s = 103.06 nnEvals/s = 98.79 nnBatches/s = 94.39 avgBatchSize = 1.05 (8.0 secs) (EloDiff baseline)&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 4: 10 / 10 positions, &lt;b&gt;visits/s = 122.75&lt;/b&gt; nnEvals/s = 119.35 nnBatches/s = 112.69 avgBatchSize = 1.06 (6.8 secs) (EloDiff +57)&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 5: 10 / 10 positions, visits/s = 116.70 nnEvals/s = 115.45 nnBatches/s = 102.81 avgBatchSize = 1.12 (7.2 secs) (EloDiff +30)&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 6: 10 / 10 positions, visits/s = 118.30 nnEvals/s = 116.36 nnBatches/s = 103.97 avgBatchSize = 1.12 (7.2 secs) (EloDiff +27)&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 8: 10 / 10 positions, visits/s = 122.20 nnEvals/s = 121.78 nnBatches/s = 105.77 avgBatchSize = 1.15 (7.1 secs) (EloDiff +24)&lt;/div&gt;&lt;div&gt;numSearchThreads = 12: 10 / 10 positions, visits/s = 104.99 nnEvals/s = 105.23 nnBatches/s = 80.65 avgBatchSize = 1.30 (8.7 secs) (EloDiff -67)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Based on some test data, each speed doubling gains perhaps ~250 Elo by searching deeper.&lt;/div&gt;&lt;div&gt;Based on some test data, each thread costs perhaps 7 Elo if using 800 visits, and 2 Elo if using 5000 visits (by making MCTS worse).&lt;/div&gt;&lt;div&gt;So APPROXIMATELY based on this benchmark, if you intend to do a 5 second search:&amp;nbsp;&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 3: (baseline)&lt;/div&gt;&lt;div&gt;&lt;b&gt;numSearchThreads =&amp;nbsp; 4&lt;/b&gt;:&amp;nbsp; &amp;nbsp;+57 Elo (recommended)&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 5:&amp;nbsp; &amp;nbsp;+30 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 6:&amp;nbsp; &amp;nbsp;+27 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 8:&amp;nbsp; &amp;nbsp;+24 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 12:&amp;nbsp; &amp;nbsp;-67 Elo&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Preparation katrain v1.10.1 (on Jetson)&lt;/div&gt;&lt;div&gt;Refer&amp;nbsp;https://matham.github.io/ffpyplayer/installation.html#ubuntu-18-04&lt;/div&gt;&lt;div&gt;sudo apt install python3-pip libsdl2-dev libavdevice-dev libavformat-dev libjpeg-dev&lt;/div&gt;&lt;div&gt;Refer&amp;nbsp;https://github.com/sanderland/katrain/blob/master/INSTALL.md#LinuxQuick&lt;/div&gt;&lt;div&gt;git clone https://github.com/sanderland/katrain.git&lt;/div&gt;&lt;div&gt;cd katrain&lt;/div&gt;&lt;div&gt;requirements.txt 수정: Pillow==9.0.0 -&amp;gt; Pillow==8.4.0&lt;/div&gt;&lt;div&gt;pip3 install -r requirements.txt&lt;/div&gt;&lt;div&gt;pip3 install .&lt;/div&gt;&lt;div&gt;(Reboot required?)&lt;/div&gt;&lt;div&gt;Change default katago model with the compiled katago file.&lt;/div&gt;&lt;div&gt;cp ~/.local/lib/python3.6/site-packages/katrain/KataGo/katago ~/.local/lib/python3.6/site-packages/katrain/KataGo/katago.org&lt;/div&gt;&lt;div&gt;cp ~/katago/KataGo/cpp/katago-v1.10.0-cuda10.2-arm64 ~/.local/lib/python3.6/site-packages/katrain/KataGo/katago&lt;/div&gt;&lt;div&gt;Modify configuration file with the benchmarked configuration&lt;/div&gt;&lt;div&gt;vi ~/.local/lib/python3.6/site-packages/katrain/KataGo/analysis_config.cfg&lt;/div&gt;&lt;div&gt;maxVisits = 800 # was 500&lt;/div&gt;&lt;div&gt;numSearchThreads = 40 # was 8&lt;/div&gt;&lt;div&gt;nnMaxBatchSize = 480 # was 96, 12 * 40&lt;/div&gt;&lt;div&gt;Run with katrain or python3 -m katrain&lt;/div&gt;&lt;div&gt;If you face CRITICAL errors, reinstall kivy with pip3 uninstall kivy; pip3 install kivy==2.0.0rc1, pip3 install importlib-metadata&lt;/div&gt;&lt;div&gt;sudo apt install libfreetype6-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-net-dev libsdl2-ttf-dev libportmidi-dev xclip xsel&lt;/div&gt;&lt;div&gt;pip3 install pygame&lt;/div&gt;&lt;div&gt;If face DBUS error, install python3-sdl2 python-pygame-sdl2, then run katrain again.&lt;/div&gt;&lt;div&gt;sudo apt install python3-sdl2 python-pygame-sdl2&lt;/div&gt;&lt;div&gt;katrain&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If face an exception (TypeError : &quot;&#39;NoneType&#39; object is not subscriptable&quot;) when closing the window, then modify ~/.local/lib/python3.6/site-packages/katrain/__main__.py around line 821 and 855.&lt;/div&gt;&lt;div&gt;# lines 821~822&lt;/div&gt;&lt;div&gt;Window._left = win_left # was Window.left&lt;/div&gt;&lt;div&gt;Window._top = win_top # was Window.top&lt;/div&gt;&lt;div&gt;#lines 855~856&lt;/div&gt;&lt;div&gt;self.gui._config[&quot;ui_state&quot;][&quot;top&quot;] = Window._top # was Window.top&lt;/div&gt;&lt;div&gt;self.gui._config[&quot;ui_state&quot;][&quot;left&quot;] = Window._left # was Window.left&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[TIP] For proper GUI&lt;/div&gt;&lt;div&gt;pip3 uninstall kivy&lt;/div&gt;&lt;div&gt;pip3 install kivy-jetson&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For comparison&lt;/div&gt;&lt;div&gt;On a machine with i7-8700 &amp;amp; 32GB RAM with Intel UHD Graphics 630&lt;/div&gt;&lt;div&gt;KataGo v1.10.0 from&amp;nbsp;https://github.com/lightvector/KataGo/releases&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;katago-v1.10.0-eigenavx2-windows-x64&lt;/div&gt;&lt;div&gt;&lt;div&gt;Ordered summary of results:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 5: 10 / 10 positions, visits/s = 247.93 nnEvals/s = 242.92 nnBatches/s = 181.23 avgBatchSize = 1.34 (3.4 secs) (EloDiff baseline)&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 6: 10 / 10 positions, visits/s = 300.14 nnEvals/s = 291.67 nnBatches/s = 228.46 avgBatchSize = 1.28 (2.8 secs) (EloDiff +67)&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 8: 10 / 10 positions, &lt;b&gt;visits/s = 383.77&lt;/b&gt; nnEvals/s = 378.47 nnBatches/s = 334.36 avgBatchSize = 1.13 (2.3 secs) (EloDiff +150)&lt;/div&gt;&lt;div&gt;numSearchThreads = 10: 10 / 10 positions, visits/s = 384.28 nnEvals/s = 383.42 nnBatches/s = 345.85 avgBatchSize = 1.11 (2.3 secs) (EloDiff +142)&lt;/div&gt;&lt;div&gt;numSearchThreads = 12: 10 / 10 positions, visits/s = 357.28 nnEvals/s = 355.71 nnBatches/s = 319.98 avgBatchSize = 1.11 (2.5 secs) (EloDiff +104)&lt;/div&gt;&lt;div&gt;numSearchThreads = 20: 10 / 10 positions, visits/s = 296.14 nnEvals/s = 297.34 nnBatches/s = 268.02 avgBatchSize = 1.11 (3.3 secs) (EloDiff -11)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Based on some test data, each speed doubling gains perhaps ~250 Elo by searching deeper.&lt;/div&gt;&lt;div&gt;Based on some test data, each thread costs perhaps 7 Elo if using 800 visits, and 2 Elo if using 5000 visits (by making MCTS worse).&lt;/div&gt;&lt;div&gt;So APPROXIMATELY based on this benchmark, if you intend to do a 5 second search:&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 5: (baseline)&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 6:&amp;nbsp; &amp;nbsp;+67 Elo&lt;/div&gt;&lt;div&gt;&lt;b&gt;numSearchThreads =&amp;nbsp; 8&lt;/b&gt;:&amp;nbsp; +150 Elo (recommended)&lt;/div&gt;&lt;div&gt;numSearchThreads = 10:&amp;nbsp; +142 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 12:&amp;nbsp; +104 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 20:&amp;nbsp; &amp;nbsp;-11 Elo&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;katago-v1.10.0-eigen-windows-x64&lt;/div&gt;&lt;div&gt;&lt;div&gt;Ordered summary of results:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 5: 10 / 10 positions, visits/s = 174.02 nnEvals/s = 169.67 nnBatches/s = 129.07 avgBatchSize = 1.31 (4.8 secs) (EloDiff baseline)&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 8: 10 / 10 positions, visits/s = 152.93 nnEvals/s = 151.52 nnBatches/s = 143.43 avgBatchSize = 1.06 (5.7 secs) (EloDiff -70)&lt;/div&gt;&lt;div&gt;numSearchThreads = 10: 10 / 10 positions, visits/s = 169.49 nnEvals/s = 169.49 nnBatches/s = 153.11 avgBatchSize = 1.11 (5.3 secs) (EloDiff -44)&lt;/div&gt;&lt;div&gt;numSearchThreads = 12: 10 / 10 positions, &lt;b&gt;visits/s = 223.09&lt;/b&gt; nnEvals/s = 222.11 nnBatches/s = 195.39 avgBatchSize = 1.14 (4.1 secs) (EloDiff +51)&lt;/div&gt;&lt;div&gt;numSearchThreads = 16: 10 / 10 positions, visits/s = 139.48 nnEvals/s = 139.77 nnBatches/s = 120.83 avgBatchSize = 1.16 (6.8 secs) (EloDiff -165)&lt;/div&gt;&lt;div&gt;numSearchThreads = 20: 10 / 10 positions, visits/s = 101.38 nnEvals/s = 101.38 nnBatches/s = 79.26 avgBatchSize = 1.28 (9.8 secs) (EloDiff -327)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Based on some test data, each speed doubling gains perhaps ~250 Elo by searching deeper.&lt;/div&gt;&lt;div&gt;Based on some test data, each thread costs perhaps 7 Elo if using 800 visits, and 2 Elo if using 5000 visits (by making MCTS worse).&lt;/div&gt;&lt;div&gt;So APPROXIMATELY based on this benchmark, if you intend to do a 5 second search:&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 5: (baseline)&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 8:&amp;nbsp; &amp;nbsp;-70 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 10:&amp;nbsp; &amp;nbsp;-44 Elo&lt;/div&gt;&lt;div&gt;&lt;b&gt;numSearchThreads = 12&lt;/b&gt;:&amp;nbsp; &amp;nbsp;+51 Elo (recommended)&lt;/div&gt;&lt;div&gt;numSearchThreads = 16:&amp;nbsp; -165 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 20:&amp;nbsp; -327 Elo&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;katago-v1.10.0-opencl-windows-x64&lt;/div&gt;&lt;div&gt;&lt;div&gt;Ordered summary of results:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 5: 10 / 10 positions, visits/s = 411.34 nnEvals/s = 370.10 nnBatches/s = 148.52 avgBatchSize = 2.49 (19.5 secs) (EloDiff baseline)&lt;/div&gt;&lt;div&gt;numSearchThreads = 10: 10 / 10 positions, visits/s = 457.81 nnEvals/s = 415.14 nnBatches/s = 83.70 avgBatchSize = 4.96 (17.7 secs) (EloDiff +20)&lt;/div&gt;&lt;div&gt;numSearchThreads = 12: 10 / 10 positions, &lt;b&gt;visits/s = 574.24&lt;/b&gt; nnEvals/s = 525.45 nnBatches/s = 88.72 avgBatchSize = 5.92 (14.1 secs) (EloDiff +100)&lt;/div&gt;&lt;div&gt;numSearchThreads = 16: 10 / 10 positions, visits/s = 584.77 nnEvals/s = 540.79 nnBatches/s = 68.52 avgBatchSize = 7.89 (13.9 secs) (EloDiff +94)&lt;/div&gt;&lt;div&gt;numSearchThreads = 20: 10 / 10 positions, visits/s = 582.89 nnEvals/s = 536.19 nnBatches/s = 54.45 avgBatchSize = 9.85 (14.0 secs) (EloDiff +79)&lt;/div&gt;&lt;div&gt;numSearchThreads = 24: 10 / 10 positions, visits/s = 626.24 nnEvals/s = 577.01 nnBatches/s = 48.77 avgBatchSize = 11.83 (13.1 secs) (EloDiff +95)&lt;/div&gt;&lt;div&gt;numSearchThreads = 32: 10 / 10 positions, visits/s = 655.88 nnEvals/s = 613.73 nnBatches/s = 37.17 avgBatchSize = 16.51 (12.7 secs) (EloDiff +89)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Based on some test data, each speed doubling gains perhaps ~250 Elo by searching deeper.&lt;/div&gt;&lt;div&gt;Based on some test data, each thread costs perhaps 7 Elo if using 800 visits, and 2 Elo if using 5000 visits (by making MCTS worse).&lt;/div&gt;&lt;div&gt;So APPROXIMATELY based on this benchmark, if you intend to do a 5 second search:&lt;/div&gt;&lt;div&gt;numSearchThreads =&amp;nbsp; 5: (baseline)&lt;/div&gt;&lt;div&gt;numSearchThreads = 10:&amp;nbsp; &amp;nbsp;+20 Elo&lt;/div&gt;&lt;div&gt;&lt;b&gt;numSearchThreads = 12&lt;/b&gt;:&amp;nbsp; +100 Elo (recommended)&lt;/div&gt;&lt;div&gt;numSearchThreads = 16:&amp;nbsp; &amp;nbsp;+94 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 20:&amp;nbsp; &amp;nbsp;+79 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 24:&amp;nbsp; &amp;nbsp;+95 Elo&lt;/div&gt;&lt;div&gt;numSearchThreads = 32:&amp;nbsp; &amp;nbsp;+89 Elo&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/900669836838225113/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2022/01/running-katagokatrain-on-jetson-agx.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/900669836838225113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/900669836838225113'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2022/01/running-katagokatrain-on-jetson-agx.html' title='Running KataGo/KaTrain on Jetson AGX Xavier'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-138634408883183269</id><published>2022-01-06T14:23:00.009+09:00</published><updated>2022-01-07T16:29:08.008+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="20.04"/><category scheme="http://www.blogger.com/atom/ns#" term="grub"/><category scheme="http://www.blogger.com/atom/ns#" term="HP"/><category scheme="http://www.blogger.com/atom/ns#" term="install"/><category scheme="http://www.blogger.com/atom/ns#" term="Pavilion"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Install Ubuntu 20.04 LTS on HP Pavilion Desktop</title><content type='html'>&lt;p&gt;&lt;/p&gt;- Download Ubuntu 20.04 LTS iso for Desktop&lt;br /&gt;- Prepare bootable media (USB Stick or CD/DVD)&lt;br /&gt;- Shrink Windows Partition for extra space&lt;br /&gt;- Change BIOS Settings&lt;br /&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt; - Disable Secure Boot&lt;br /&gt; - (No option for fast boot)&lt;br /&gt; - Change boot order&lt;/blockquote&gt;- Boot with prepared media (USB Stick or CD/DVD)&lt;br /&gt;- &lt;b&gt;[Problem] May not pass the logo screen. (hangs forever)&lt;/b&gt;&lt;br /&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt; - At the grub screen, press &#39;e&#39; then add &#39;pci=noacpi&#39; option before &#39;---&#39; (after &#39;splash&#39;)&lt;/blockquote&gt;- Continue installation&lt;br /&gt;- &lt;b&gt;[Problem] May face grub installation failure, with &#39;Operation not permitted&#39; message.&lt;/b&gt;&lt;br /&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt; - In this case, just follow the instruction to boot into the Live session (the same as &#39;Try Ubuntu&#39;)&lt;br /&gt; - Install and use &lt;b&gt;boot-repair&lt;/b&gt; to try fixing the problem. But again, may face error saying file /boot/grub/x86_64-efi/normal.mod not found error.&lt;br /&gt; - Boot into the Live session again, then open terminal and use following lines of code to install grub again. (/dev/nvme0n1p1 is the EFI partition, /dev/nvme0n1p4 is the partition where Ubuntu is installed.)&lt;/blockquote&gt;&lt;blockquote&gt;sudo mkdir /mnt/ubuntu&lt;br /&gt;sudo mount /dev/nvme0n1p4 /mnt/ubuntu&lt;br /&gt;sudo mkdir /mnt/ubuntu/boot/efi # not required if already present&lt;br /&gt;sudo mount /dev/nvme0n1p1 /mnt/ubuntu/boot/efi&lt;br /&gt;sudo apt-get install grub-efi&lt;br /&gt;sudo grub-install --target=x86_64-efi --boot-directory=/mnt/ubuntu/boot --no-nvram /dev/nvme0n1&lt;/blockquote&gt;- Shuntdown Live session and reboot to Ubuntu&lt;br /&gt;- &lt;b&gt;[Problem] May not pass the logo screen, AGAIN. (hangs forever)&lt;/b&gt;&lt;br /&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt; - At the grub screen, press &#39;e&#39; then add &#39;pci=noacpi&#39; option before &#39;---&#39; (after &#39;splash&#39;)&lt;br /&gt; - Then continue booting.&lt;/blockquote&gt;&lt;p&gt;- In order to apply kernel boot parameter permanently, modify &lt;b&gt;/etc/default/grub&lt;/b&gt; file, then run &lt;b&gt;update-grub&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;- [Problem] i801_smbus -&amp;gt; Update BIOS ??&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;- [Problem] NVRM: Can&#39;t find an IRQ for your NVIDIA card.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/138634408883183269/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2022/01/install-ubuntu-2004-lts-on-hp-pavilion.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/138634408883183269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/138634408883183269'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2022/01/install-ubuntu-2004-lts-on-hp-pavilion.html' title='Install Ubuntu 20.04 LTS on HP Pavilion Desktop'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-4779859115191242981</id><published>2021-10-26T17:58:00.001+09:00</published><updated>2021-10-26T17:58:35.315+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="font"/><category scheme="http://www.blogger.com/atom/ns#" term="matplotlib"/><category scheme="http://www.blogger.com/atom/ns#" term="pyplot"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Matplotlib의 pyplot에서 사용할 수 있는 글꼴 이름 찾기</title><content type='html'>&lt;p&gt;&amp;nbsp;Ref:&amp;nbsp;&lt;a href=&quot;https://zawook.postype.com/post/6727252&quot; target=&quot;_blank&quot;&gt;https://zawook.postype.com/post/6727252&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;import os&amp;nbsp;&lt;/p&gt;&lt;p&gt;import sys&amp;nbsp;&lt;/p&gt;&lt;p&gt;import matplotlib as mpl&lt;/p&gt;&lt;p&gt;from matplotlib import font_manager&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# 폰트매니저 리빌드&lt;/p&gt;&lt;p&gt;font_manager._rebuild()&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# 설치되어 있는 폰트 리스트 가져오기&amp;nbsp;&lt;/p&gt;&lt;p&gt;if sys.platform==&#39;win32&#39;:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; #시스템 글꼴 목록을 리스트로 가져오기&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; font_list=font_manager.findSystemFonts()&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; # 이름순정렬&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; font_list.sort()&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; # 리스트탐색반복&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; for file_path in font_list:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #폰트 파일의 경로를 사용하여 폰트 속성 객체 가져오기&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fp=font_manager.FontProperties(fname=file_path)&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # 폰트 속성을 통해 파이썬에 설정해야 하는 폰트 이름 조회&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; font_name=fp.get_name()&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # 폰트 파일 경로와 폰트 이름 출력하기&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(&quot;%s &amp;gt;&amp;gt; %s&quot; %(file_path,font_name))&lt;/p&gt;&lt;p&gt;else:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; # else 부분은 mac에서 작동한다&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; # 설정 파일의 위치 조회&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; conf_file_path = mpl.matplotlib_fname()&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; print(&#39;설정 파일 위치:&#39; + conf_file_path)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; # 설정 파일이 들어 있는 폴더&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; conf_file_dir=os.path.dirname(conf_file_path)&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; print(&#39;설정 폴더 위치:&#39; +conf_file_dir)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; # 설정파일의 폴더 하위에 폰트 파일이 위치해야 하는 폴더 경로 조합&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; font_path=conf_file_dir+&quot;/fonts/ttf&quot;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; print(&#39;폰트 폴더 위치:&#39; + font_path)&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; # 폰트 폴더를 열기 위한 명령어 수행&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; command=&#39;open &#39;+font_path&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; os.system(command)&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/4779859115191242981/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2021/10/matplotlib-pyplot.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4779859115191242981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4779859115191242981'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2021/10/matplotlib-pyplot.html' title='Matplotlib의 pyplot에서 사용할 수 있는 글꼴 이름 찾기'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-4012998882422763938</id><published>2021-03-11T19:52:00.002+09:00</published><updated>2021-03-11T19:52:26.171+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipses"/><category scheme="http://www.blogger.com/atom/ns#" term="ini"/><category scheme="http://www.blogger.com/atom/ns#" term="snap"/><category scheme="http://www.blogger.com/atom/ns#" term="우분투"/><title type='text'>snap으로 설치한 eclipse의 실행 옵션 변경하기 (eclipse.ini 수정)</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Ubuntu 18.04L에 snap으로 eclipse 설치 후, Heap 메모리 등 변경을 위한 eclipse.ini 변경이 생각보다 쉽지 않다.&lt;/li&gt;&lt;li&gt;보통, eclipse 설치 위치에 있는 eclipse.ini를 변경해 주면 되는데,&lt;br /&gt;snap으로 설치하는 경우 해당 파일 위치도 잘 모르겠고,&lt;br /&gt;eclipse.ini 파일에 쓰기 권한이 아예 없고 변경도 안 된다.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;snap 파일 시스템이 read-only로 마운트 되어 있기 때문&lt;/li&gt;&lt;li&gt;마운트 옵션을 일시적으로 변경하면 내부 내용을 수정할 수는 있지만... 귀찮으니 패스.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;ini 파일을 변경할 수 없으니,&lt;/li&gt;&lt;ul&gt;&lt;li&gt;eclipse.ini 파일을 복사해 다른 곳에서 편집해 두고,&lt;/li&gt;&lt;li&gt;eclipse 호출 시 변경한 파일을 이용하도록 바꿔준다.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;/snap/eclipse/current/eclipse.ini&lt;/span&gt;를 다른 곳으로 복사 (예: &lt;span style=&quot;background-color: #cccccc;&quot;&gt;/etc/eclipse.ini&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;eclipse.ini를 원하는 대로 수정&lt;/li&gt;&lt;li&gt;실행 명령 호출 방법 수정&lt;/li&gt;&lt;ul&gt;&lt;li&gt;시스템 메뉴에서 아이콘을 클릭해 실행하는 경우에 반영하려면,&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;ul&gt;&lt;li&gt;menulibre 실행&lt;/li&gt;&lt;li&gt;Eclipse 검색하고, 아이콘 클릭&lt;/li&gt;&lt;li&gt;Command 입력 수정&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;/snap/bin/eclipse %f&lt;/span&gt; 부분을,&lt;br /&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;/snap/bin/eclipse --launcher.ini /etc/eclipse.ini %f&lt;/span&gt;로 변경&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;ul&gt;&lt;li&gt;터미널에서 실행 시 반영하려면,&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;alias eclipse=&#39;eclipse --launcher.ini eclipse.ini&#39;&lt;/span&gt; 추가&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/4012998882422763938/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2021/03/snap-eclipse-eclipseini.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4012998882422763938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4012998882422763938'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2021/03/snap-eclipse-eclipseini.html' title='snap으로 설치한 eclipse의 실행 옵션 변경하기 (eclipse.ini 수정)'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-4607162316172491923</id><published>2020-06-24T10:26:00.000+09:00</published><updated>2020-06-24T10:26:33.449+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="E-500"/><category scheme="http://www.blogger.com/atom/ns#" term="배터리"/><category scheme="http://www.blogger.com/atom/ns#" term="올림푸스"/><category scheme="http://www.blogger.com/atom/ns#" term="카메라"/><title type='text'>올림푸스 E-500 백업 배터리 교체</title><content type='html'>꽤 오래전 부터 E-500 배터리 교체할 때마다 날짜가 초기화 되는 문제 때문에 불편했다. AS 받는 것도 영 불편하고 금전적으로 아깝다는 생각에 미루다가, 아예 직접 작업하기로 결정. 올림푸스 카메라 사업을 철수한다는 기사 때문에 발동이 걸린 것 같기도 하다.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;분명 백업 배터리 수명이 다한 것 같은데, 배터리 모델만 확인 가능하고, 위치만 수리 가능한 곳에 있으면 큰 문제 없겠지 라는 생각에 바로 분해 시작.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;커버 벗기면 아래처럼 보임.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd1MzrdvqguGrP-jBbt35lRSv8dm1y8jh7mFwQXcuRIqUp6lNR_mUBjfGAWonI_2UAT65RC_Joe_OUEyyotzufOckgB7-qpJ23LdgkQYmrswoimeNJT6ZEbueRqJ3OjH2AfcfK37rMpVQ6/s4656/20200525_154900_HDR.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3492&quot; data-original-width=&quot;4656&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd1MzrdvqguGrP-jBbt35lRSv8dm1y8jh7mFwQXcuRIqUp6lNR_mUBjfGAWonI_2UAT65RC_Joe_OUEyyotzufOckgB7-qpJ23LdgkQYmrswoimeNJT6ZEbueRqJ3OjH2AfcfK37rMpVQ6/s320/20200525_154900_HDR.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;뒷면 케이스와 메인보드 간 케이블 연결을 제거하면 아래 처럼 보인다. 여기서, 케이스와 메인보드 사이의 케이블 땜도 제거했는데, 나중에 보니 굳이 제거할 필요는 없었다.&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisNvNKBEQThwqB885CsD-VbFksZs0Wcch38B86-SpHKBOan47cAvp-YITmshzBkzY6zex_IJw2s_pvDZ5ONGRrpG6jkZMBnlp8ES_TeY7sTK-gXdrFIYJA_7r0YfFBV5sHTL4-cW4SQhmx/s4656/20200525_154818_HDR.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3492&quot; data-original-width=&quot;4656&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisNvNKBEQThwqB885CsD-VbFksZs0Wcch38B86-SpHKBOan47cAvp-YITmshzBkzY6zex_IJw2s_pvDZ5ONGRrpG6jkZMBnlp8ES_TeY7sTK-gXdrFIYJA_7r0YfFBV5sHTL4-cW4SQhmx/s320/20200525_154818_HDR.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;일단 제거한 모습.&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimxmp2-MPCOHY7NsjnQub3r0b7JZw4y-LoYZ82wXyw8Z9pe_cSMv91iBZfrXxcn3Ip48fCAXsl8JSd_KqpMmCuYsIa0dvUViuohVKO30NdYhLT3USj0p6dMyuqO_8AMM4YmG9mzuLMlhXP/s4656/20200525_154612_HDR.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3492&quot; data-original-width=&quot;4656&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimxmp2-MPCOHY7NsjnQub3r0b7JZw4y-LoYZ82wXyw8Z9pe_cSMv91iBZfrXxcn3Ip48fCAXsl8JSd_KqpMmCuYsIa0dvUViuohVKO30NdYhLT3USj0p6dMyuqO_8AMM4YmG9mzuLMlhXP/s320/20200525_154612_HDR.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;LCD와 케이블을 제거하면 메인보드가 드러나는데, 오른쪽 아래 백업 배터리가 보인다.&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS5UZgUBiC8JVT3rGSMyIHiKU4_-e3cgNiZbNsvXUmdPZoi74rBj8Jzf9Ov82wWsacJi62iulN7RiXLDubLogTQ6L2VkGf2sXEHqFcPPHcQBo91MDe6kbxsGltI8flnApXx47b_drGwjBk/s4656/20200521_171259_HDR.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3492&quot; data-original-width=&quot;4656&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS5UZgUBiC8JVT3rGSMyIHiKU4_-e3cgNiZbNsvXUmdPZoi74rBj8Jzf9Ov82wWsacJi62iulN7RiXLDubLogTQ6L2VkGf2sXEHqFcPPHcQBo91MDe6kbxsGltI8flnApXx47b_drGwjBk/s320/20200521_171259_HDR.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;땜을 제거하고 자세히 보니 모델명 MS621F이 보인다.&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPa_MHOt5vlUy0coVmYBED0NbjymCk2RrqkC1bwUk51zqsI54HYvh4pSHpGzflP9UATf90jjYu8w5hl9FC_IJnyg8KxFLUWGnpS1xHWI-GBTTLpBhJ6rLQFBRCHnlmtGgnomNM0YaDkdHl/s1460/20200521_172157_HDR.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1455&quot; data-original-width=&quot;1460&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPa_MHOt5vlUy0coVmYBED0NbjymCk2RrqkC1bwUk51zqsI54HYvh4pSHpGzflP9UATf90jjYu8w5hl9FC_IJnyg8KxFLUWGnpS1xHWI-GBTTLpBhJ6rLQFBRCHnlmtGgnomNM0YaDkdHl/s320/20200521_172157_HDR.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;부품보다 배송비가 훨~씬 많이 나오지만, 일단 구매하고, 조립은 분해의 역순으로 진행.&lt;/div&gt;&lt;div&gt;물론 중간에 반 조립 상태로 테스터를 이용해 제대로 작업되었는지 확인은 필수.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이제 새 모델처럼 잘 동작한다.&lt;/div&gt;&lt;div&gt;문제는 작업 장소를 이동하다가 나사 하나를 잃어 버린 거 정도?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;dicLayer&quot; style=&quot;background: -webkit-linear-gradient(bottom, rgb(255, 235, 0), rgb(255, 220, 0)); color: black; display: none; font-family: Arial; font-size: 12px; height: 150px; width: 400px;&quot;&gt;&lt;div id=&quot;dicLayerContents&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerSub&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerLoader&quot;&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/4607162316172491923/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2020/06/e-500.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4607162316172491923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4607162316172491923'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2020/06/e-500.html' title='올림푸스 E-500 백업 배터리 교체'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd1MzrdvqguGrP-jBbt35lRSv8dm1y8jh7mFwQXcuRIqUp6lNR_mUBjfGAWonI_2UAT65RC_Joe_OUEyyotzufOckgB7-qpJ23LdgkQYmrswoimeNJT6ZEbueRqJ3OjH2AfcfK37rMpVQ6/s72-c/20200525_154900_HDR.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-7647485824791460828</id><published>2020-06-09T17:55:00.001+09:00</published><updated>2020-06-24T10:26:38.699+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CD"/><category scheme="http://www.blogger.com/atom/ns#" term="인켈"/><title type='text'>인켈 미니랩소801 CD 픽업 교체</title><content type='html'>근 20년 되어 가는 인켈 RefSo-801 (RX/AX/CD-801) 오디오가 종종 CD를 인식하지 못해 픽업을 교체하기로 결정했다. 사실 문제 발견하고 수리를 생각한 건 5~6년 됐는데 게으름 때문에 이제야 작업했다.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;일단 CD를 분해해서 CD 픽업 모델 확인 먼저.&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhArDACYsPzmA7Zrd8jJGSVVwGa9j02-PADVQvxXylS4XlIHhc_LVOV4zKe1G-yxfR8PSxmNXZ5vvXBz629S7HCAdxTRe8nFkUUFbwyuMtnhOmVp4piTr016v8hlb0QN6C3gmlJ20hovn1F/s4656/20200501_112349.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4656&quot; data-original-width=&quot;3492&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhArDACYsPzmA7Zrd8jJGSVVwGa9j02-PADVQvxXylS4XlIHhc_LVOV4zKe1G-yxfR8PSxmNXZ5vvXBz629S7HCAdxTRe8nFkUUFbwyuMtnhOmVp4piTr016v8hlb0QN6C3gmlJ20hovn1F/s320/20200501_112349.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;KSS-213C이네.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;알리에서 구매할까 하다가 그냥 국내 유통업체를 통해 어셈블리 통째로 구매했는데 배송비 포함 3만원 미만. 2만 5천 정도?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;픽업의 땜 제거하고 하나씩 차근차근 분해하고 재조립.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgXPsImhHCpMtLf0TF2laAbadIl8pfp_X9aI1Na6ppOqULohNH9oatuF_zfF44y30nL5SvG2fb8Lq4kt2SvlNrjQebhdHqj9bq8e3pxoV9fNd3poVAUuM0ZjDguqMxn1lk2Zo-HM-FgS4K/s4656/20200501_112636.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4656&quot; data-original-width=&quot;3492&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgXPsImhHCpMtLf0TF2laAbadIl8pfp_X9aI1Na6ppOqULohNH9oatuF_zfF44y30nL5SvG2fb8Lq4kt2SvlNrjQebhdHqj9bq8e3pxoV9fNd3poVAUuM0ZjDguqMxn1lk2Zo-HM-FgS4K/s320/20200501_112636.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;이제 CD 넣으면 바로 인식하고 튀지도 않는다.&lt;/div&gt;&lt;div&gt;아주 속이 시원하다.&lt;/div&gt;&lt;div&gt;진작할 걸.&lt;/div&gt;&lt;div id=&quot;dicLayer&quot; style=&quot;background: -webkit-linear-gradient(bottom, rgb(255, 235, 0), rgb(255, 220, 0)); color: black; display: none; font-family: Arial; font-size: 12px; height: 150px; width: 400px;&quot;&gt;&lt;div id=&quot;dicLayerContents&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerSub&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerLoader&quot;&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/7647485824791460828/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2020/06/801-cd.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/7647485824791460828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/7647485824791460828'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2020/06/801-cd.html' title='인켈 미니랩소801 CD 픽업 교체'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhArDACYsPzmA7Zrd8jJGSVVwGa9j02-PADVQvxXylS4XlIHhc_LVOV4zKe1G-yxfR8PSxmNXZ5vvXBz629S7HCAdxTRe8nFkUUFbwyuMtnhOmVp4piTr016v8hlb0QN6C3gmlJ20hovn1F/s72-c/20200501_112349.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-8903737732516022932</id><published>2020-03-16T13:20:00.001+09:00</published><updated>2020-03-16T13:20:36.905+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaDoc"/><category scheme="http://www.blogger.com/atom/ns#" term="UML"/><category scheme="http://www.blogger.com/atom/ns#" term="UmlGraph"/><title type='text'>Javadoc with UML Diagram on Android Studio</title><content type='html'>&lt;h4&gt;
1. 준비&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Android Studio &amp;amp; commented source project&lt;/li&gt;
&lt;li&gt;GraphViz 설치&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;https://www.graphviz.org/&lt;/li&gt;
&lt;li&gt;예: C:\Program Files (x86)\Graphviz2.38&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;UmlGraph 설치&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;https://www.spinellis.gr/umlgraph/index.html&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Jar 다운로드 &amp;amp; 이동/복사&lt;/li&gt;
&lt;li&gt;예: C:\Workspace.android\Project\lib\UmlGraph-5.7_2.32-SNAPSHOT.jar&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h4&gt;
2. Using Android Studio Generate Javadoc UI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Tools -&amp;gt; Gnerate JavaDoc ...&lt;/li&gt;
&lt;li&gt;문서 생성 조건들 선택 (Scope &amp;amp; Output directory ...)&lt;/li&gt;
&lt;li&gt;Other command line arguments에 다음 추가 (한 줄)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
-encoding UTF-8 -doclet org.umlgraph.doclet.UmlGraphDoc -docletpath D:\Workspace.android\Project\lib\UmlGraph-5.7_2.32-SNAPSHOT.jar -dotexecutable &quot;C:\Program Files (x86)\Graphviz2.38\bin\dot.exe&quot; -attributes -operations -qualify -types -visibility&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;OK로 Javadoc 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
3. Using Gradle&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;생략&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/8903737732516022932/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2020/03/javadoc-with-uml-diagram-on-android.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/8903737732516022932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/8903737732516022932'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2020/03/javadoc-with-uml-diagram-on-android.html' title='Javadoc with UML Diagram on Android Studio'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-2712002337317146164</id><published>2020-03-13T16:14:00.000+09:00</published><updated>2020-03-16T13:16:09.168+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ant"/><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaDoc"/><category scheme="http://www.blogger.com/atom/ns#" term="UML"/><title type='text'>JavaDoc with UML Diagram on Eclipse</title><content type='html'>&lt;h4&gt;
1. 준비&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Eclipse &amp;amp; commented source project&lt;/li&gt;
&lt;li&gt;GraphViz 설치&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;https://www.graphviz.org/&lt;/li&gt;
&lt;li&gt;예: C:\Program Files (x86)\Graphviz2.38&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;UmlGraph 설치&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;https://www.spinellis.gr/umlgraph/index.html&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Jar 다운로드 &amp;amp; 이동/복사&lt;/li&gt;
&lt;li&gt;예: C:\Workspace.eclipse\Project\lib\UmlGraph-5.7_2.32-SNAPSHOT.jar&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h4&gt;
2. Using Eclipse Generate Javadoc UI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use standard doclet 선택 &amp;lt;- &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;가장 중요&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Extra Javadoc options로 다음 내용 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
-doclet org.umlgraph.doclet.UmlGraphDoc&lt;br /&gt;-docletpath D:\Workspace.eclipse\Test\lib\UmlGraph-5.7_2.32-SNAPSHOT.jar&lt;br /&gt;-dotexecutable &quot;C:\Program Files (x86)\Graphviz2.38\bin\dot.exe&quot;&lt;br /&gt;-attributes&lt;br /&gt;-operations&lt;br /&gt;-qualify&lt;br /&gt;-types&lt;br /&gt;-visibility&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Finish로 Javadoc 생성&lt;/li&gt;
&lt;li&gt;(참고) Ant용 스크립트(.xml)를 저장하면 다음과 같이 나옴&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&amp;gt;&lt;br /&gt;&amp;lt;project default=&quot;javadoc&quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;target name=&quot;javadoc&quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;javadoc access=&quot;private&quot; additionalparam=&quot; -doclet org.umlgraph.doclet.UmlGraphDoc&amp;amp;#13;&amp;amp;#10;-docletpath D:\Workspace.eclipse\Test\lib\UmlGraph-5.7_2.32-SNAPSHOT.jar&amp;amp;#13;&amp;amp;#10;-dotexecutable &amp;amp;quot;C:\Program Files (x86)\Graphviz2.38\bin\dot.exe&amp;amp;quot;&amp;amp;#13;&amp;amp;#10;-attributes&amp;amp;#13;&amp;amp;#10;-operations&amp;amp;#13;&amp;amp;#10;-qualify&amp;amp;#13;&amp;amp;#10;-types&amp;amp;#13;&amp;amp;#10;-visibility&quot; author=&quot;true&quot; classpath=&quot;.&quot; destdir=&quot;doc&quot; doctitle=&quot;Document Title&quot; nodeprecated=&quot;false&quot; nodeprecatedlist=&quot;false&quot; noindex=&quot;false&quot; nonavbar=&quot;false&quot; notree=&quot;false&quot; packagenames=&quot;aaa.bbb.ccc.ddd&quot; source=&quot;1.8&quot; sourcepath=&quot;src&quot; splitindex=&quot;true&quot; use=&quot;true&quot; version=&quot;true&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h4&gt;
3. Using Ant&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Eclipse 프로젝트 폴더 아래 Ant용 build.xml 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;project default=&quot;javadoc&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;target name=&quot;javadoc&quot; description=&quot;Generate javadoc with UML Diagram&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;property name=&quot;src.dir&quot;&amp;nbsp; value=&quot;src&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;property name=&quot;javadoc.dir&quot;&amp;nbsp; value=&quot;doc-uml&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;property name=&quot;dot.path&quot;&amp;nbsp; location=&quot;C:\Program Files (x86)\Graphviz2.38\bin&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;mkdir dir=&quot;${javadoc.dir}&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;javadoc access=&quot;private&quot; doctitle=&quot;Test&quot; author=&quot;true&quot; classpath=&quot;.&quot; packagenames=&quot;kr.re.etri.heat.jms&quot; source=&quot;1.8&quot; sourcepath=&quot;${src.dir}&quot; destdir=&quot;${javadoc.dir}&quot; nodeprecated=&quot;false&quot; nodeprecatedlist=&quot;false&quot; noindex=&quot;false&quot; nonavbar=&quot;false&quot; notree=&quot;false&quot; splitindex=&quot;true&quot; use=&quot;true&quot; version=&quot;true&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;doclet name=&quot;org.umlgraph.doclet.UmlGraphDoc&quot; path=&quot;lib/UmlGraph-5.7_2.32-SNAPSHOT.jar&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;param name=&quot;-attributes&quot; /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;param name=&quot;-operations&quot; /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;param name=&quot;-qualify&quot; /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;param name=&quot;-types&quot; /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;param name=&quot;-visibility&quot; /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;param name=&quot;-dotexecutable&quot; value=&quot;${dot.path}/dot.exe&quot; /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/doclet&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;/javadoc&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;/target&amp;gt;&lt;br /&gt;
&amp;lt;/project&amp;gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h4&gt;
4. [Note]&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;UML Diagram들의 형식 변경은 UmlGraphDoc으로 넘기는 옵션 parameter들로 조정&lt;/li&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/2712002337317146164/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2020/03/javadoc-with-uml-diagram-on-eclipse.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/2712002337317146164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/2712002337317146164'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2020/03/javadoc-with-uml-diagram-on-eclipse.html' title='JavaDoc with UML Diagram on Eclipse'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-5576223610633983375</id><published>2020-03-12T15:02:00.002+09:00</published><updated>2020-03-12T15:02:38.161+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="HermiT"/><category scheme="http://www.blogger.com/atom/ns#" term="Ontology"/><category scheme="http://www.blogger.com/atom/ns#" term="OWLAPI"/><category scheme="http://www.blogger.com/atom/ns#" term="Semantic Web"/><title type='text'>OwlAPI and HermiT on Android (&gt; Android P, SDK 28)</title><content type='html'>&lt;h2&gt;
[Implementation Issues on OwlAPI and HermiT on &amp;gt; Android P]&lt;/h2&gt;
&lt;h3&gt;
[문제 현상]&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Android 9 (P, SDK 28) 이상에서 Owl API 이용하기 위해서,&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Gradle 설정 변경&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;compiledSdkVersion, targetSdkVerison 들을 28로 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;기존 코드 실행 시 에러&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;OWL 초기화 시 다음과 같은 오류 발생함&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
W/System.err: SLF4J: Failed to load class &quot;org.slf4j.impl.StaticLoggerBinder&quot;.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; SLF4J: Defaulting to no-operation (NOP) logger implementation&lt;br /&gt;
&amp;nbsp; &amp;nbsp; SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;W/edependencytes: Accessing hidden field Lsun/misc/Unsafe;-&amp;gt;theUnsafe:Lsun/misc/Unsafe; (light greylist, reflection)&lt;br /&gt;
W/edependencytes: Accessing hidden field Ljava/lang/Thread;-&amp;gt;threadLocalRandomProbe:I (dark greylist, reflection)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
D/AndroidRuntime: Shutting down VM&lt;br /&gt;
E/AndroidRuntime: FATAL EXCEPTION: main&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Process: {패키지}.gradledependencytest, PID: 23725&lt;br /&gt;
&amp;nbsp; &amp;nbsp; java.lang.NullPointerException&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java.util.Objects.requireNonNull(Objects.java:203)&lt;/blockquote&gt;
&lt;ul&gt;&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;SLF5J 관련한 로그 메시지는 일반 Java 환경에서도 동일하게 출력되는 것으로, 안전하게 무시 가능함&lt;/li&gt;
&lt;li&gt;FATAL EXCEPTION 이후는 OWL Ontology Manager를 생성하지 못해 발생한 문제&lt;/li&gt;
&lt;li&gt;원인은 Accessing hidden field 관련한 에러?&lt;br /&gt;
-&amp;gt; Android 9 (P, API 28) 이상부터는 플랫폼에서 비 SDK 인터페이스 사용을 제한. 비 SDK 인터페이스를 참조하거나 리플렉션 또는 JNI를 이용해 SDK 인터페이스 핸들을 가져오려 할 때 오류 발생&lt;br /&gt;
(참고: &lt;a href=&quot;https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces&quot; target=&quot;_blank&quot;&gt;https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces&lt;/a&gt;)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h3&gt;
[회피 방법]&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;코드 상에서 StrictMode API를 이용해 비 SDK 인터페이스를 테스트할 수 있는데, dependency 때문에 참조한 라이브러리에서 참조하는 경우에는 코드 적용하기 어려움&lt;br /&gt;
-&amp;gt; 공개 요청을 할 수도 있긴 하지만, 장담 못 함. (&lt;a href=&quot;https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces#feature-request&quot; target=&quot;_blank&quot;&gt;링크&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;개발 기기에서 비 SDK 인터페이스에 접근할 수 있도록 설정하기 (&lt;a href=&quot;https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces#faq&quot; target=&quot;_blank&quot;&gt;링크&lt;/a&gt;)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: red;&quot;&gt;루팅 된 기기가 필요 없음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;설정하기&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
adb shell settings put global hidden_api_policy_pre_p_apps&amp;nbsp; 1&lt;br /&gt;
adb shell settings put global hidden_api_policy_p_apps 1&lt;/blockquote&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;기본 설정으로 재설정 할 때는,&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
adb shell settings delete global hidden_api_policy_pre_p_apps&lt;br /&gt;
adb shell settings delete global hidden_api_policy_p_apps&lt;/blockquote&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;API 시행 정책의 정수는 다음 값 중 하나로 설정&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;0: 비 SDK 인터페이스의 모든 감지를 사용 중지합니다. 이 설정을 사용하면 비 SDK 인터페이스 사용에 관한 모든 로그 메시지가 사용 중지되고 StrictMode API를 사용해 앱을 테스트할 수 없습니다. &lt;b&gt;이 설정은 사용하지 않는 것이 좋습니다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;1: 모든 비 SDK 인터페이스에 액세스할 수 있지만 비 SDK 인터페이스를 사용하면 경고와 함께 로그 메시지가 인쇄됩니다. 이 설정을 사용하면 &lt;span style=&quot;color: red;&quot;&gt;StrictMode API를 사용해 앱을 테스트&lt;/span&gt;해도 됩니다.&lt;/li&gt;
&lt;li&gt;2: 블랙리스트 또는 그레이리스트에 속하고 타겟 API 수준에서 제한되는 비 SDK 인터페이스의 사용이 금지됩니다.&lt;/li&gt;
&lt;li&gt;3: 블랙리스트에 속한 비 SDK 인터페이스의 사용은 금지되지만, &lt;span style=&quot;color: red;&quot;&gt;그레이리스트에 속하고 타겟 API 수준에서 제한되는 인터페이스의 사용은 허용&lt;/span&gt;됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h3&gt;
[실제로 적용한 방법]&lt;/h3&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Non-SDK 인터페이스를 이용할 수 있도록 허용&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;adb를 이용해 &lt;span style=&quot;color: red;&quot;&gt;장치의 정책 변경&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
adb shell settings put global hidden_api_policy_pre_p_apps &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
adb shell settings put global hidden_api_policy_p_apps &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;앱 실행 시, 허가 부여&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;onCreate 등, &lt;span style=&quot;color: red;&quot;&gt;Non-SDK 인터페이스 시작 전&lt;/span&gt;에 아래 코드로 허가 부여&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
if (BuildConfig.DEBUG &amp;amp;&amp;amp; Build.VERSION.SDK_INT &amp;gt;= Build.VERSION_CODES.P) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.permitNonSdkApiUsage()&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.build());&lt;br /&gt;
&amp;nbsp; &amp;nbsp;}&lt;/blockquote&gt;
&lt;h3&gt;
[기타 참고]&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Android P displaying API compatibility error message: &lt;a href=&quot;https://stackoverflow.com/questions/51210633/android-p-displaying-api-compatibility-error-message/54191551&quot; target=&quot;_blank&quot;&gt;https://stackoverflow.com/questions/51210633/android-p-displaying-api-compatibility-error-message/54191551&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;onCreate() 값은 곳에 아래 코드를 등록해 두면 어디에서 violation을 일으키는지 로그 출력됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
if (BuildConfig.DEBUG &amp;amp;&amp;amp; Build.VERSION.SDK_INT &amp;gt;= Build.VERSION_CODES.P) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .detectNonSdkApiUsage()&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .penaltyLog()&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .build());&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/5576223610633983375/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2020/03/owlapi-and-hermit-on-android-android-p.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/5576223610633983375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/5576223610633983375'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2020/03/owlapi-and-hermit-on-android-android-p.html' title='OwlAPI and HermiT on Android (&gt; Android P, SDK 28)'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-7118816395132772182</id><published>2020-03-12T14:43:00.001+09:00</published><updated>2020-03-12T14:43:19.934+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="HermiT"/><category scheme="http://www.blogger.com/atom/ns#" term="Ontology"/><category scheme="http://www.blogger.com/atom/ns#" term="OWLAPI"/><category scheme="http://www.blogger.com/atom/ns#" term="Semantic Web"/><title type='text'>OwlAPI and HermiT on Android</title><content type='html'>&lt;h2&gt;
[Implementation Issues on Using Ontology]&lt;/h2&gt;
&lt;div&gt;
OWL API로 온톨로지를 모델링하고 HermiT로 추론하는 작업을 구현할 때 발생하는 문제들과 해결 방안을 정리해 본다.&lt;/div&gt;
&lt;h3&gt;
1. Java (for test)&lt;/h3&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;필요한 환경은&amp;nbsp;Maven의 dependency를 이용하면 간단하게 구성할 수 있고,&lt;br /&gt;
API를 이용한 프로그래밍에 주력하면 됨.&lt;/li&gt;
&lt;li&gt;Java 호환성 1.8 명시&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;lt;properties&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;project.build.sourceEncoding&amp;gt;UTF-8&amp;lt;/project.build.sourceEncoding&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;maven.compiler.source&amp;gt;1.8&amp;lt;/maven.compiler.source&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;maven.compiler.target&amp;gt;1.8&amp;lt;/maven.compiler.target&amp;gt;&lt;br /&gt;
&amp;lt;/properties&amp;gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Maven 프로젝트용 pom.xml에 dependency 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;lt;dependency&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;groupId&amp;gt;net.sourceforge.owlapi&amp;lt;/groupId&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;owlapi-distribution&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;5.0.5&amp;lt;/version&amp;gt;&lt;br /&gt;
/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dependency&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;net.sourceforge.owlapi&amp;lt;/groupId&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;org.semanticweb.hermit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.3.8.500&amp;lt;/version&amp;gt;&lt;br /&gt;
&amp;lt;/dependency&amp;gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;[팁]&lt;/b&gt; 추후 JAR 생성 시, 필요한 lib들을 모두 한 폴더(예: target/lib)에 몰아 넣을 수 있도록 Maven plugin 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&amp;lt;plugin&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;executions&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;execution&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;id&amp;gt;copy-dependencies&amp;lt;/id&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;phase&amp;gt;prepare-package&amp;lt;/phase&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;goals&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;goal&amp;gt;copy-dependencies&amp;lt;/goal&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/goals&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;outputDirectory&amp;gt;${project.build.directory}/lib&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;overWriteReleases&amp;gt;false&amp;lt;/overWriteReleases&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;overWriteSnapshots&amp;gt;false&amp;lt;/overWriteSnapshots&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;overWriteIfNewer&amp;gt;true&amp;lt;/overWriteIfNewer&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/configuration&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/execution&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;/executions&amp;gt;&lt;br /&gt;
&amp;lt;/plugin&amp;gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h3&gt;
2. Android&lt;/h3&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Maven 대신 Gradle을 이용해 dependency 해소&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;이런저런 충돌, 오류가 엄청 많이 발생함&lt;br /&gt;
-&amp;gt; 수작업으로 해소시켜야 하고, Reasoner (HermiT)은 소스 직접 수정해야 함&lt;/li&gt;
&lt;li&gt;PC 상의 Java에서와는 다르게, Parser가 .owl 파일의 일부 namespace 정의(버전?)를 제대로 처리하지 못해 오류를 뿜어낼 수 있음.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;rdf:RDF 태그 내에, xmlns:1.0=&quot;http://site/sub/1.0#&quot;와 같은 라인이 있었다면 삭제해야 할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;조치 1: build.gradle에 Java 호환성 명시&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
compileOptions{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; sourceCompatibilityJavaVersion.VERSION_1_8&lt;br /&gt;
&amp;nbsp; &amp;nbsp; targetCompatibilityJavaVersion.VERSION_1_8&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;조치 2: build.gradle에 OWL API dependency 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
repositories{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; mavenCentral()&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
implementation(&#39;net.sourceforge.owlapi:owlapi-distribution:5.1.7&#39;){&lt;br /&gt;
&amp;nbsp; &amp;nbsp; //transitive=false&lt;br /&gt;
&amp;nbsp; &amp;nbsp; excludegroup:&#39;net.sourceforge.owlapi&#39;,module:&#39;owlapi-compatibility&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; //excludegroup:&#39;org.apache.httpcomponents&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; excludegroup:&#39;org.apache.httpcomponents&#39;,module:&#39;httpclient-osgi&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; excludegroup:&#39;org.apache.httpcomponents&#39;,module:&#39;httpcore-osgi&#39;&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;조치 3: HermiT dependency 추가&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Reasoner 소스 추가 &amp;amp; 수정&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Maven repository에서 1.4.3.517의 소스 JAR 다운로드&lt;/li&gt;
&lt;li&gt;org.semanticweb.HermiT과 rationals 패키지 복사&lt;/li&gt;
&lt;li&gt;debugger 디렉토리 삭제 (java.awt 이용)&lt;/li&gt;
&lt;li&gt;Reasoner.java에서 Debugger 인스턴스 생성하는 부분 comment 처리&lt;/li&gt;
&lt;li&gt;ProtegeReasonerFactory.java 삭제&lt;/li&gt;
&lt;li&gt;rationals/Transition.java에서 java.awt.Point를 android.graphics.Point로 대체&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;build.gradle에 dependency 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
implementation &#39;net.sf.trove4j:trove4j:3.0.3&#39;&lt;br /&gt;
implementation &#39;gnu.getopt:java-getopt:1.0.13&#39;&lt;br /&gt;
implementation &#39;dk.brics.automaton:automaton:1.11-8&#39;&lt;br /&gt;
implementation (&#39;org.apache.ws.commons.axiom:axiom-api:1.2.22&#39;) { transitive = false }&lt;br /&gt;
implementation (&#39;org.apache.ws.commons.axiom:axiom-c14n:1.2.22&#39;) { transitive = false }&lt;br /&gt;
implementation (&#39;org.apache.ws.commons.axiom:axiom-impl:1.2.22&#39;) { transitive = false }&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;조치 4: build.gradle에&amp;nbsp;기타 dependency 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
implementation &#39;javax.inject:javax.inject:1&#39;&lt;br /&gt;
implementation(&#39;xerces:xercesImpl:2.12.0&#39;) {&lt;br /&gt;
//&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exclude group: &#39;xml-apis&#39;, module: &#39;xml-apis&#39;&lt;br /&gt;
}&lt;br /&gt;
//&amp;nbsp; &amp;nbsp; implementation &#39;xml-apis:xml-apis:1.4.01&#39;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;조치 5: build.gradle에 패키지 중복 파일 예외 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
packagingOptions {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; exclude &#39;META-INF/axiom.xml&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; exclude &#39;META-INF/DEPENDENCIES&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; exclude &#39;mozilla/public-suffix-list.txt&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; exclude &#39;org/apache/commons/codec/language/bm/*.txt&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; exclude &#39;org/apache/commons/codec/language/dmrules.txt&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; exclude &#39;org/apache/http/version.properties&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; exclude &#39;org/apache/http/entity/mime/version.properties&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; exclude &#39;org/apache/http/nio/version.properties&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; exclude &#39;org/apache/http/client/version.properties&#39;&lt;br /&gt;
&amp;nbsp; }&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;조치 6: OWL Schema, Rule 파일에서 버전을 지정하는 namespace 정의를 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/7118816395132772182/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2020/03/owlapi-and-hermit-on-android.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/7118816395132772182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/7118816395132772182'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2020/03/owlapi-and-hermit-on-android.html' title='OwlAPI and HermiT on Android'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-4491451538760168648</id><published>2019-11-08T10:06:00.000+09:00</published><updated>2019-11-08T10:06:15.132+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="미러링"/><category scheme="http://www.blogger.com/atom/ns#" term="안드로이드"/><title type='text'>안드로이드 미러링 &amp; 제어하기</title><content type='html'>전화기 터치가 안 돼서 PC에서 미러링하고 제어할 때..&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;scrcpy&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Genymobile/scrcpy&quot; target=&quot;_blank&quot;&gt;https://github.com/Genymobile/scrcpy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;소스가 공개되어 있지만 굳이 빌드할 필요는 없고,&lt;br /&gt;중간에 Get the app에서 zip 파일 형태를 받아도 된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;안드로이드&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;개발자 모드 들어가기&lt;/li&gt;
&lt;li&gt;권한 주기&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;특히, simulating input 관련한 권한&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Genymobile/scrcpy/blob/master/FAQ.md&quot; target=&quot;_blank&quot;&gt;https://github.com/Genymobile/scrcpy/blob/master/FAQ.md&lt;/a&gt;&amp;nbsp;참고&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;/ol&gt;
</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/4491451538760168648/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2019/11/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4491451538760168648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4491451538760168648'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2019/11/blog-post.html' title='안드로이드 미러링 &amp; 제어하기'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-4791600339749056191</id><published>2019-10-15T18:06:00.002+09:00</published><updated>2019-11-12T11:31:06.552+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DevTip"/><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="regex"/><title type='text'>Count number of lines in the files using regex in Eclipse</title><content type='html'>&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;CTRL+H&lt;/li&gt;
&lt;li&gt;File Search&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Containing text: \n[\s]*&lt;/li&gt;
&lt;li&gt;All lines: ^*\n&lt;/li&gt;
&lt;li&gt;Check regular expression&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;(Optional)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;File name patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/4791600339749056191/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2019/10/count-number-of-lines-in-files-using.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4791600339749056191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4791600339749056191'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2019/10/count-number-of-lines-in-files-using.html' title='Count number of lines in the files using regex in Eclipse'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-4145402929020145554</id><published>2019-10-14T16:48:00.008+09:00</published><updated>2024-10-10T15:04:56.447+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DevTip"/><category scheme="http://www.blogger.com/atom/ns#" term="powershell"/><title type='text'>Count number of lines in the files using PowerShell</title><content type='html'>Files with java extension&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Get-ChildItem &quot;*&quot; -Filter *.java | ForEach-Object { Get-Content $_.FullName | Measure-Object -line }&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Get-ChildItem &quot;*&quot; -Filter *.java | ForEach-Object { Get-Content $_.Name | Measure-Object -line }&lt;/blockquote&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;dir * -recurse | select Fullname,@{name=&quot;LineCount&quot;;expression={ @(get-content $_.fullname).count }}&lt;/blockquote&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;dir * -recurse | select Name,@{name=&quot;LineCount&quot;;expression={ @(get-content $_.fullname).count }}&lt;/blockquote&gt;&lt;div&gt;
፠ Looks like it ignores empty lines.&lt;blockquote&gt;&lt;div&gt;&lt;div id=&quot;dicLayer&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; background: -webkit-linear-gradient(bottom, rgb(255, 235, 0), rgb(255, 220, 0)); color: black; display: none; font-family: Arial; font-size: 12px; height: 150px; left: 300px; top: 314px; width: 400px;&quot;&gt;&lt;div id=&quot;dicLayerContents&quot;&gt;&lt;dicword style=&quot;user-select: text;&quot;&gt;lastwritetime&lt;/dicword&gt;&lt;dicword style=&quot;user-select: text;&quot;&gt;&lt;dicimg id=&quot;play&quot; style=&quot;background-image: url(chrome-extension://bmbdcffdhebhecemcchbkfnjlmdiiepe/play.gif);&quot;&gt;&lt;/dicimg&gt;  &lt;input id=&quot;ee&quot; type=&quot;checkbox&quot; /&gt;Eng&lt;dicimg id=&quot;copy&quot; style=&quot;background-image: url(chrome-extension://bmbdcffdhebhecemcchbkfnjlmdiiepe/copy.png);&quot; title=&quot;copy&quot;&gt;&lt;/dicimg&gt;&lt;/dicword&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;lastwritetime&lt;/div&gt;&lt;div id=&quot;dicLayerSub&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;{&quot;mean&quot;:[],&quot;word&quot;:&quot;lastwritetime&quot;,&quot;phoneticSymbol&quot;:&quot;&quot;}&lt;/div&gt;&lt;div id=&quot;dicLayerLoader&quot; style=&quot;left: 322px; top: 294px;&quot;&gt;&lt;/div&gt;ls -R *.java | % { $_ | select name, lastwritetime, @{n=&quot;lines&quot;;e={ get-content $_ | measure-object -line | select -expa lines } } } | ft -AutoSize&lt;/div&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;ls -R | Where {$_.extension -in &quot;.java&quot;, &quot;.xml&quot;, &quot;.jsp&quot;, &quot;.js&quot;}&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;ls -R *.java,*.xml&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div id=&quot;dicLayer&quot;&gt;&lt;div id=&quot;dicLayerContents&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerSub&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerLoader&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;dicLayer&quot;&gt;&lt;div id=&quot;dicLayerContents&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerSub&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerLoader&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayer&quot;&gt;&lt;div id=&quot;dicLayerContents&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerSub&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerLoader&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayer&quot;&gt;&lt;div id=&quot;dicLayerContents&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerSub&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&lt;/div&gt;&lt;div id=&quot;dicLayerLoader&quot;&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/4145402929020145554/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2019/10/count-number-of-lines-in-files-use.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4145402929020145554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/4145402929020145554'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2019/10/count-number-of-lines-in-files-use.html' title='Count number of lines in the files using PowerShell'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-7617004344420976449</id><published>2018-12-14T14:02:00.000+09:00</published><updated>2018-12-18T11:13:00.187+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="3D Model"/><category scheme="http://www.blogger.com/atom/ns#" term="Playseat Challenge"/><category scheme="http://www.blogger.com/atom/ns#" term="Shifter"/><category scheme="http://www.blogger.com/atom/ns#" term="STL"/><category scheme="http://www.blogger.com/atom/ns#" term="TH8A"/><category scheme="http://www.blogger.com/atom/ns#" term="Thrustmaster"/><title type='text'>Shifter mount 3D model for TH8A on Playseat Challenge</title><content type='html'>Playseat Challenge에 Thrustmaster TH8A 거치하려 만든 모델.&lt;br /&gt;
거치할 때도 문제가 없어야 하고,&lt;br /&gt;
변속할 때도 고정이 잘 되어야 하고,&lt;br /&gt;
무엇보다 3D 프린터로 한 번에 찍어낼 수 있는 크기여야 한다는 게 문제.&lt;br /&gt;
Playseat Challenge 프레임에 구멍 안 뚫고 고정시키는 게 제일 고민이었는데,&lt;br /&gt;
어찌어찌 support 만들어서 나사로 박아주니 어느 정도 고정은 되는 것 같다.&lt;br /&gt;
&lt;br /&gt;
만들어서 써 보니 아쉬운대로 쓸 만 한 듯.&lt;br /&gt;
물론 개선점도 확실히 보인다.&lt;br /&gt;
모델 인쇄 속도를 감안해 형태를 다듬을 필요도 있고,&lt;br /&gt;
playseat challenge의 프레임 각도를 조절했을 때에도 무리 없이 쓸 수 있게 하단부를 변경할 필요도 있고.&lt;br /&gt;
&lt;br /&gt;
뭐 돈 받고 팔 건 아니니까, 그냥 지금 버전 쓰는 걸로 결정.&lt;br /&gt;
&lt;br /&gt;
생기기는 대충 아래처럼 생겼다.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv3AeINVAZvD70VtKL_ybnlgS3XRl6dNIwAly5guPUB7inUUoTMixfcQ40SpNviAApxoqATe33JIm8oDXErT8AdLGAGMY-TmKeMPkQ5D1QSLd4eM8ddOC-isTSwLmWGBrSoLOc0k3LCxGs/s1600/ShifterMount-2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1132&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv3AeINVAZvD70VtKL_ybnlgS3XRl6dNIwAly5guPUB7inUUoTMixfcQ40SpNviAApxoqATe33JIm8oDXErT8AdLGAGMY-TmKeMPkQ5D1QSLd4eM8ddOC-isTSwLmWGBrSoLOc0k3LCxGs/s320/ShifterMount-2.png&quot; width=&quot;226&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
다운로드 링크:&lt;br /&gt;
&lt;a href=&quot;https://drive.google.com/open?id=1PtA8PZpnZ7SmuURQhjSCgGzPU2mJRd6M&quot; target=&quot;_blank&quot;&gt;Top&lt;/a&gt;, &lt;a href=&quot;https://drive.google.com/open?id=1z5ODIhEh7fAcQosogfX9jyU5T_CEsDZ5&quot; target=&quot;_blank&quot;&gt;Middle&lt;/a&gt;, &lt;a href=&quot;https://drive.google.com/open?id=1i6zBuJnIWW4NMaVKFvB19hV5KI0WzyBZ&quot; target=&quot;_blank&quot;&gt;Bottom&lt;/a&gt;, &lt;a href=&quot;https://drive.google.com/open?id=1LZILxQjJ0TDC5Vt-LME5NiuXdND5-OBs&quot; target=&quot;_blank&quot;&gt;Support for Top&lt;/a&gt;, &lt;a href=&quot;https://drive.google.com/open?id=1_g1-N8_hwq1qaLnd6QQM-FpVtQZd2CCB&quot; target=&quot;_blank&quot;&gt;Support for Bottom&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/7617004344420976449/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2018/12/shifter-mount-for-th8a-on-playseat.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/7617004344420976449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/7617004344420976449'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2018/12/shifter-mount-for-th8a-on-playseat.html' title='Shifter mount 3D model for TH8A on Playseat Challenge'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv3AeINVAZvD70VtKL_ybnlgS3XRl6dNIwAly5guPUB7inUUoTMixfcQ40SpNviAApxoqATe33JIm8oDXErT8AdLGAGMY-TmKeMPkQ5D1QSLd4eM8ddOC-isTSwLmWGBrSoLOc0k3LCxGs/s72-c/ShifterMount-2.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-3657618635486875719</id><published>2018-08-28T09:33:00.002+09:00</published><updated>2018-11-23T13:25:55.773+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Mi8SE"/><category scheme="http://www.blogger.com/atom/ns#" term="ROM"/><category scheme="http://www.blogger.com/atom/ns#" term="Unlock"/><category scheme="http://www.blogger.com/atom/ns#" term="Xiaomi"/><category scheme="http://www.blogger.com/atom/ns#" term="롬"/><category scheme="http://www.blogger.com/atom/ns#" term="미8SE"/><category scheme="http://www.blogger.com/atom/ns#" term="샤오미"/><category scheme="http://www.blogger.com/atom/ns#" term="언락"/><title type='text'>샤오미 Mi 8 SE 써 보자 (2)</title><content type='html'>이전 글(&lt;a href=&quot;https://greyattic.blogspot.com/2018/07/mi-8-se-1.html&quot; target=&quot;_blank&quot;&gt;링크&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
게으름에 언락 신청한 뒤 시간이 너무 지났다. 이래저래 휴가랑 겹치고, 다른 문제들이 연이어 터지는 바람에.. ㅜㅜ&lt;br /&gt;
전편(&lt;a href=&quot;http://greyattic.blogspot.com/2018/07/mi-8-se-1.html&quot; target=&quot;_blank&quot;&gt;http://greyattic.blogspot.com/2018/07/mi-8-se-1.html&lt;/a&gt;)에 이어서..&lt;br /&gt;
언락은 전편의 프로그램으로 해결 완료한다.&lt;br /&gt;
하고 나면 휴대폰 부팅할 때 언락된 상태라고 나온다.&lt;br /&gt;
&lt;br /&gt;
2018년 8월 27일 현재,&lt;br /&gt;
Mi 8 SE용 글로벌 롬은 아직이다. Mi 8용은 공개가 됐는데..&lt;br /&gt;
현재로서는 EU 개발자 롬을 쓰는 것이 최상이고, 시작점은 여기(&lt;a href=&quot;https://xiaomi.eu/community/&quot; target=&quot;_blank&quot;&gt;https://xiaomi.eu/community/&lt;/a&gt;)다.&lt;br /&gt;
MIRI ROM Releases를 쫒아 들어가면 MIUI 10 버전들이 죽 나온다.&lt;br /&gt;
가장 최신이 좋겠지만, 가끔 문제가 있는 것들(예: 8.8.23의 경우 한글을 언어로 쓸 경우 시스템 UI 충돌이 생긴다고 함.)이 있으니 바뀐 내용을 잘 읽어 보고 선택하는 게 좋다.&lt;br /&gt;
어쨌든,&lt;br /&gt;
롬 버전을 하나 선택하면, 지원하는 장치 목록과 다운로드 링크, 그리고 간단한 설명이 나온다.&lt;br /&gt;
순서대로 보자면,&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;롬 다운로드&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;STABLES에는 아직 Mi 8 SE 지원 롬이 없다. Weelky에서 찾아야 한다.&lt;/li&gt;
&lt;li&gt;1.x GB 정도 되는데, 받아서 장치에 복사해 두자. (위치는 크게 관계 없음)&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;TWRP 설치&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;해당 페이지 링크에는 Mi 8 SE 지원하는 버전이 없다. 검색을 좀 해서 &lt;a href=&quot;https://forum.xda-developers.com/mi-8/development/recovery-twrp-recovery-3-2-1-mi8se-t3813311&quot; target=&quot;_blank&quot;&gt;여기&lt;/a&gt;서 다운로드 해 PC에 저장.&lt;/li&gt;
&lt;li&gt;Mi 8 SE를 fastboot mode로 들어가게 해 두고,&lt;/li&gt;
&lt;li&gt;fastboot flash recovery [다운로드한 이미지 파일 이름. 내 경우는 recovery-TWRP-3.2.1-0629-XIAOMI8SE-CN-wzsx150.img]&lt;/li&gt;
&lt;li&gt;fastboot boot [다운로드한 이미지 파일 이름. 내 경우는 recovery-TWRP-3.2.1-0629-XIAOMI8SE-CN-wzsx150.img] 하면 TWRP 화면이 뜬다.&lt;/li&gt;
&lt;li&gt;(참고1) 필요할 경우 중국어 -&amp;gt; 영어로 전환하자. 암호 요청하는 첫 화면에서 오른쪽 버튼.&lt;/li&gt;
&lt;li&gt;(참고 2) fastboot는 전편에서 다운로드 한 miflash-unlock 폴더 안에도 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;ROM 설치&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;TWRP로 부팅한 상태에서 /data 파티션을 삭제하고,&lt;/li&gt;
&lt;li&gt;이미 장치로 복사해 둔 ROM을 설치하고,&lt;/li&gt;
&lt;li&gt;재부팅~&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div&gt;
별 문제가 없다면 중국 내수용이 아닌, MIUI와 구글 서비스가 짬뽕된 개발저 버전의 OS가 뜬다. (참고: 처음 부팅할 때 시간이 좀 걸린 것 같음. 다음 부터는 오래 안 걸리고.)&lt;/div&gt;
&lt;div&gt;
이후에는 OTA 업데이트 형태로 지속적으로 Weekly 버전을 쫒아갈 수 있다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
보름 넘게 써 본 느낌은...&lt;/div&gt;
&lt;div&gt;
MIUI 별로 맘에 안 듬. 안드로이드 원 체제를 따라가는 A2 권장함.&lt;/div&gt;
&lt;div&gt;
예전에 문제 없이 사용하던 앱들이 제대로 동작하지 않는 경우가 종종 있다. 알람을 제때 안 준다든지, 동작이 갑자기 중단된다든지. MIUI가 배터리 관리하는 부분을 따로 운영하는데 이게 사고를 치는 것 같다는 느낌?&lt;/div&gt;
&lt;div&gt;
나중에 글로벌 롬이 나왔을 때 갈아타야 할지 잘 모르겠다. 일단 MIUI 10이 아닌 9.x대로 공개될 것 같은데다가, MIUI가 완전히 빠진 버전은 아닐 것이 확실하니까..&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/3657618635486875719/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2018/08/mi-8-se-2.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/3657618635486875719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/3657618635486875719'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2018/08/mi-8-se-2.html' title='샤오미 Mi 8 SE 써 보자 (2)'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-1876038238274013648</id><published>2018-07-11T01:23:00.002+09:00</published><updated>2018-11-23T13:25:35.961+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Mi8SE"/><category scheme="http://www.blogger.com/atom/ns#" term="ROM"/><category scheme="http://www.blogger.com/atom/ns#" term="Unlock"/><category scheme="http://www.blogger.com/atom/ns#" term="Xiaomi"/><category scheme="http://www.blogger.com/atom/ns#" term="롬"/><category scheme="http://www.blogger.com/atom/ns#" term="미8SE"/><category scheme="http://www.blogger.com/atom/ns#" term="샤오미"/><category scheme="http://www.blogger.com/atom/ns#" term="언락"/><title type='text'>샤오미 Mi 8 SE 써 보자 (1)</title><content type='html'>18년 7월 10일 현재,&lt;br /&gt;
Mi 8 SE용 글로벌 롬이 설치된 모델을 구할 수 없다.&lt;br /&gt;
일단 중국 내수용 롬이 설치된 모델을 산 뒤,&lt;br /&gt;
언락 + ROM 교체 작업을 해야 한다는 말이다.&lt;br /&gt;
뭐, 중국 버전의 언어 설정을 영어로 설정하면 간단한 것들은 살펴볼 수 있자만,&lt;br /&gt;
도저히 써먹을 수는 없을 것 같다. 구글 연계도 안 되고, 완전 중국 내수용 서비스/앱 위주다.&lt;br /&gt;
결국 글로벌 롬으로 교체하긴 해야겠는데 이게 쉽지 않다.&lt;br /&gt;
일단 출시된지 얼마 되지 않는 폰이다 보니 글로벌 롬이 나온지 며칠 되지 않는다.&lt;br /&gt;
그나마 stable 버전도 아니고 daily? weekly? 빌드 버전 하나만 엊그제 나왔다.&lt;br /&gt;
정보도 거의 없고..&lt;br /&gt;
&lt;br /&gt;
어찌어찌 반나절 검색해서 내용을 정리해 보니,&lt;br /&gt;
일단 이놈들은 언락하는 데 대기 시간에 꽤 걸리는 모양이다.&lt;br /&gt;
언락을 시작? 대기?해 두고 그 동안 stable 글로벌 롬이 나오길 기다리는 수 밖에.&lt;br /&gt;
&lt;br /&gt;
근데 언락 방법이 되게 헷갈린다.&lt;br /&gt;
시간이 지나면서 많이 바뀌기도 했고, 설명도 부정확한 놈들이 많다.&lt;br /&gt;
그나마 가장 유용했던 건&amp;nbsp;&lt;a href=&quot;http://en.miui.com/thread-246705-1-1.html&quot; target=&quot;_blank&quot;&gt;http://en.miui.com/thread-246705-1-1.html&lt;/a&gt;의 글.&lt;br /&gt;
&lt;br /&gt;
어쨌든..&lt;br /&gt;
&lt;br /&gt;
일단 Mi 계정을 하나 만들어 두는 게 좋다.&lt;br /&gt;
개인적으로 Mi Scale을 쓰고 있어서 그걸 쓰기로.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://en.miui.com/unlock/&quot; target=&quot;_blank&quot;&gt;https://en.miui.com/unlock/&lt;/a&gt;로 가서 언락 작업을 먼저.&lt;br /&gt;
Mi 계정으로 로그인하면 중국어로 뭐라뭐라 나오는데, 이건 Mi 포럼에서 쓸 별명을 등록하는 절차다. 오른쪽 위에 English Forum으로 들어가서 작업하면 오류가 났을 때 이해하기 쉽다.&lt;br /&gt;
별명 등록 후 다시 언락 작업에 들어간다.&lt;br /&gt;
그러면 Mi Unlock 프로그램을 다운로드 받으라 한다.&lt;br /&gt;
내 경우엔 이름이&amp;nbsp;miflash_unlock-en-3.3.525.23.zip.&lt;br /&gt;
&lt;br /&gt;
프로그램 실행 전에..&lt;br /&gt;
&lt;br /&gt;
폰에서,&lt;br /&gt;
폰 설정에서 Mi 계정 등록해 두고,&lt;br /&gt;
개발자 모드로 들어가자. (MIUI 버전 여러 번 클릭)&lt;br /&gt;
Additional Settings -&amp;gt; Developer Option으로 가서 설정 완료된 Mi 계정을 연결시킨다.&lt;br /&gt;
폰 끄고.&lt;br /&gt;
&lt;br /&gt;
다시 PC에서,&lt;br /&gt;
아까 다운 받은 파일 압축 풀고,&lt;br /&gt;
mi_flash_unlock.exe를 실행시키고,&lt;br /&gt;
만들어 둔 Mi 계정으로 접속한다. (중간에 Disclaimer 나올 때 잘 읽어 보고 Accept 해야 넘어간다. 당연하지만..)&lt;br /&gt;
전화기를 꺼 둔 상태에서 볼륨 다운과 전원 버튼을 함께 눌러 부트로더로 진입시킨다. (화면에 토끼 비스무리한 놈이 안드로이드에 용접 같은 작업을 하고 있는 그림과 FASTBOOT라는 글씨가 나온다.)&lt;br /&gt;
부터로더로 진입한 상태에서 PC와 연결하면 언락 프로그램 화면에 전화기가 연결되었다고 나오고, Unlock 버튼을 누를 수 있다.&lt;br /&gt;
두 번의 경고 메시지가 나오는데 확인하고 버튼을 눌러 진행하자.&lt;br /&gt;
제대로 되었다면 화면에 Couldn&#39;t unlock. After 360 hours of trying to unlock the device. 라는 식의 실패 메시지가 나온다. 중국어-&amp;gt;영어 번역이 잘못 되어 있다는 건데, 360시간, 즉 15일 후에 다시 시도하라는 말이란다.&lt;br /&gt;
&lt;br /&gt;
PC 연결 해제하고,&lt;br /&gt;
폰 전원 버튼을 꾹 눌러 껐다가 다시 켜자.&lt;br /&gt;
&lt;br /&gt;
이제 360시간 후에 다시 Mi Unlock 프로그램을 써서 Unlock을 하면 된단다.&lt;br /&gt;
주의할 점은, 대기 기간 중에 폰에 연결시킨 Mi 계정을 지우거나 바꾸면 안 된다는 것. 만약 바꾸면 대기 중이던 기록이 모두 사라진다. 다시 unlock을 시도하고 처음 부터 기다려야 한다.&lt;br /&gt;
&lt;br /&gt;
2주 넘게 언제 기다리나...&lt;br /&gt;
&lt;br /&gt;
다음 글(&lt;a href=&quot;https://greyattic.blogspot.com/2018/08/mi-8-se-2.html&quot; target=&quot;_blank&quot;&gt;링크&lt;/a&gt;)</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/1876038238274013648/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2018/07/mi-8-se-1.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/1876038238274013648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/1876038238274013648'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2018/07/mi-8-se-1.html' title='샤오미 Mi 8 SE 써 보자 (1)'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-5087795638713645484</id><published>2018-02-02T13:03:00.000+09:00</published><updated>2018-04-30T10:01:37.103+09:00</updated><title type='text'>Python 3.5 UTF-8 문자 출력</title><content type='html'>확장 ASCII 문자가 콘솔에 제대로 출력되질 않길래 찾아보니,&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;파일 열 때 encoding=&quot;utf-8-sig&quot; 추가&lt;/li&gt;
&lt;li&gt;윈도우 환경 변수로 PYTHONIOENCODING=utf-8 추가&lt;/li&gt;
&lt;li&gt;윈도우 명령 프롬프트 창(cmd)에서 chcp 65001 (기본 cp949임), 콘솔에서 한글 입력이 안 되므로 사용할 때만...&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
이 눈에 띈다.&lt;br /&gt;
하지만... 모두 실패. 또는 입맛에 안 맞는다.&lt;br /&gt;
더 검색해서 찾은 방법.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
import win_unicode_console&lt;/blockquote&gt;
하고, 코드에서 원하는 부분 앞, 뒤에&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
win_unicode_console.enable()&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
win_unicode_console.disable()&lt;/blockquote&gt;
&amp;nbsp;삽입.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/5087795638713645484/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2018/02/python-utf-8-encodingutf-8-sig.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/5087795638713645484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/5087795638713645484'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2018/02/python-utf-8-encodingutf-8-sig.html' title='Python 3.5 UTF-8 문자 출력'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-7846402479821146655</id><published>2017-12-18T11:26:00.000+09:00</published><updated>2017-12-18T11:26:26.173+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DIY"/><category scheme="http://www.blogger.com/atom/ns#" term="라세티 프리미어"/><category scheme="http://www.blogger.com/atom/ns#" term="스위치 커버 교체"/><category scheme="http://www.blogger.com/atom/ns#" term="크루즈"/><title type='text'>라세티 프리미어(크루즈) 크루즈 컨트롤 스위치 커버 교체</title><content type='html'>처음엔 크루즈 컨트롤 스위치 커버 포면이 작은 공기방울 처럼 뽈록뽈록 일어나더니,&lt;br /&gt;
운전할 때 손가락으로 건드리니까 울퉁불퉁하게 되어 버렸다.&lt;br /&gt;
플라스틱에 얇은 우레탄 코팅이 되어 있었나 본데, 왜 이런게 생긴건지..&lt;br /&gt;
&lt;br /&gt;
찾아보니까 비슷한 증상이 꽤 있는 걸로 봐서는 나만 그런 건 아닌가 봄.&lt;br /&gt;
코팅을 다시 한 경우도 있는 것 같은데 굳이 공임+방문시간 투자하긴 좀 그렇고.&lt;br /&gt;
크루즈 컨트롤 옵션이 없는 차량인지라 멍텅구리 플라스틱만 교체하면 되니까,&lt;br /&gt;
그냥 순정부품 판매몰(&lt;a href=&quot;http://www.c-mall.co.kr/&quot; target=&quot;_blank&quot;&gt;www.c-mall.co.kr&lt;/a&gt;)에서 새 부품을 사는 걸로 결정.&lt;br /&gt;
품번은 i13290961, 가격은 5천 원이 좀 안 된다.&lt;br /&gt;
&lt;br /&gt;
문제는 교체 방법인데... 이게 간단하지 만은 않다. 준비물도 꽤 있고.&lt;br /&gt;
절차를 짚어 보면..&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;혼캡 탈거&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;중앙의 혼캡을 먼저 제거해야 주변 플라스틱들을 뽑을 수 있다.&lt;/li&gt;
&lt;li&gt;가장 유용한 링크는&amp;nbsp;&lt;a href=&quot;http://m.cafe.daum.net/ledvalley/C5nU/17?q=D_dQ7d3qGakSE0&amp;amp;&quot; target=&quot;_blank&quot;&gt;http://m.cafe.daum.net/ledvalley/C5nU/17?q=D_dQ7d3qGakSE0&amp;amp;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;반드시, 꼭, 퓨즈 뽑고 작업하자!&amp;nbsp;시동을 꺼도 경적은 울리게 되어 있거든.&lt;br /&gt;에어백은 케이블 뽑을 때 조심해야 되고.&lt;/li&gt;
&lt;li&gt;[팁 하나]&lt;br /&gt;텔레스코픽 스티어링 휠이 아니더라도, 스티어링 휠은 밑으로, 운전자 쪽으로 쭉 뽑은 채로 고정해서 작업하는 게 당연히 편하다.&lt;/li&gt;
&lt;li&gt;[팁 둘]&lt;br /&gt;젓가락은 굳이 두개일 필요 없고, 하나씩 해도 됨.&lt;br /&gt;젓가락을 11자 모양으로 벌리라고는 하지만 단순히 벌리는 게 아니고 힘이 좀 들어가야 되고, 찔러 넣을 때 위치를 잘 느껴보며 자릴 잡아야 함.&lt;br /&gt;제대로 되었다면 바깥쪽으로 당길 때 &#39;텅~&#39;하는 소리가 나며 혼캡이 떨어져 나옴. 절대 잡아 뺄 일 없으니 애쓰지 말 것.&lt;/li&gt;
&lt;li&gt;[팁 셋]&lt;br /&gt;젓가락이든 드라이버든 유연한(?) 건 안 좋음. 걸쇠 벗기기 전에 휘어져 버려서.&lt;/li&gt;
&lt;li&gt;이 단계가 영 자신 없으면 부품 들고 쉐보레 정비센터에 가서 작업해 달라고 하는 게 맘 편하다. (공임 추가 지출)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Y자 핸들커버 탈거 및 스위치 커버 교체&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;혼캡이 빠졌다고 스위치 커버를 바고 바꿀 수 있는 게 아니고, Y자 커버 전체를 탈거한 뒤, 뒤쪽에서 나사를 풀어줘야 한다.&lt;/li&gt;
&lt;li&gt;가장 유용한 링크는&amp;nbsp;&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=bpitt8141&amp;amp;logNo=220241401865&amp;amp;categoryNo=21&amp;amp;proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F&quot; target=&quot;_blank&quot;&gt;https://m.blog.naver.com/PostView.nhn?blogId=bpitt8141&amp;amp;logNo=220241401865&amp;amp;categoryNo=21&amp;amp;proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;스티어링 휠 안쪽은 우레탄(?) 스펀지(?) 같은 재질이고, 몇 개의 구멍에 Y자 핸들커버 지지대가 푹~ 박혀 있는 상태. 당연히 빡빡해서 한번에 쑥 빠지진 않지만, Y자 커버 주변을 조금씩 당기면 나중엔 감이 올 것.&lt;/li&gt;
&lt;li&gt;[팁 하나]&lt;br /&gt;Y자 핸들 커버 벗길 때, 혼캡 탈거를 위해 구부려 둔 젓가락의 넙적한 부분을 지렛대처럼 사용하는 게 유용함. (완전 동그란 젓가락은 플라스틱에 상처를...)&lt;/li&gt;
&lt;li&gt;[팁 둘]&lt;br /&gt;별 렌치는 T20 짜리를 썼음. 스위치 커버 하나 당 나사 두 개.&lt;/li&gt;
&lt;li&gt;커버 교체 설명은 생략한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;마무리&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Y자 커버 다시 잘 꽂아 넣고,&lt;br /&gt;오디오 컨트롤러 케이블 꼭 연결하고,&lt;br /&gt;혼 캡의 에어백 케이블 꼭 연결하고,&lt;br /&gt;(먼저 안쪽까지 꾹 넣고, 잠금 장치를 눌러줘야 함)&lt;br /&gt;혼 캡 장착하고,&lt;br /&gt;퓨즈 다시 장착하면 끝.&lt;/li&gt;
&lt;li&gt;확인을 위해 빵빵~ 소리 잘 나는지 테스트 한 번 해 보고,&lt;br /&gt;오디오 컨트롤 잘 되는지 확인해 보고,&lt;br /&gt;에어백은 나중에 정비소 가서 OBD 점검 받아보고.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi29hP7GkaoFtUNewkbUxQW-MsBwIXVy7Z_EdmWVwftZZwOVQZ5bQA6plhnVIfMdJq5l02gVDnC8tvlCprl5SY2N2cyqBV3ihUGyEYpS01spSjej6mUprfA2_cLnNKuXMGs1Anv3nwwT-cl/s1600/IMG_20171215_140155.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1200&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi29hP7GkaoFtUNewkbUxQW-MsBwIXVy7Z_EdmWVwftZZwOVQZ5bQA6plhnVIfMdJq5l02gVDnC8tvlCprl5SY2N2cyqBV3ihUGyEYpS01spSjej6mUprfA2_cLnNKuXMGs1Anv3nwwT-cl/s320/IMG_20171215_140155.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;크루즈 컨트롤 스위치 커버 (앞)사용한 것 (뒤)교체한 것&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
속이 다 시원하다~&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/7846402479821146655/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2017/12/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/7846402479821146655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/7846402479821146655'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2017/12/blog-post.html' title='라세티 프리미어(크루즈) 크루즈 컨트롤 스위치 커버 교체'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi29hP7GkaoFtUNewkbUxQW-MsBwIXVy7Z_EdmWVwftZZwOVQZ5bQA6plhnVIfMdJq5l02gVDnC8tvlCprl5SY2N2cyqBV3ihUGyEYpS01spSjej6mUprfA2_cLnNKuXMGs1Anv3nwwT-cl/s72-c/IMG_20171215_140155.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-3173300675410990441</id><published>2017-06-20T11:24:00.000+09:00</published><updated>2017-06-20T11:24:47.091+09:00</updated><title type='text'>[DevTip] 안드로이드 웨어 앱의 블루투스를 통한 디버깅</title><content type='html'>&lt;br /&gt;
LG G Watch R의 경우 cradle의 연결 접점을 통해 PC에 직접 연결할 수 있었는데, LG Watch Style은 무선 충전만 된다. 결국 무선(WiFi나 BT)로 디버깅 할 수 밖에. 그런데 이게 참 귀찮다. 자동화 시키기도 좀 애매~하고...&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;[웨어러블]&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;설정: 개발자 모드 활성화, ADB 디버깅 활성화, 블루투스를 통해 디버깅 활성화&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;[전화기]&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;설정: 개발자 모드 활성화, USB 디버깅 활성화&lt;/li&gt;
&lt;li&gt;설정: 알 수 없는 소스 설치 활성화&lt;/li&gt;
&lt;li&gt;안드로이드 웨어: 블루투스 통해 디버깅 활성화&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;호스트: 연결 끊김&lt;/li&gt;
&lt;li&gt;타겟: 연결됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;개발 PC와 전화기 연결 (USB 케이블)&lt;/li&gt;
&lt;li&gt;[PC]&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;명령창에서 adb 명령으로 웨어러블 장치 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;ul&gt;
&lt;li&gt;adb&amp;nbsp;forward tcp:4444 localabstract:/adb-hub&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;adb connect 127.0.0.1:4444&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;adb devices 로 연결된 장치 목록 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;[전화기]&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;안드로이드 웨어 앱의 설정에서 블루투스를 통해 디버깅 활성화 상태 확인&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;호스트: 연결됨&lt;/li&gt;
&lt;li&gt;타겟: 연결됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/3173300675410990441/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2017/06/devtip.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/3173300675410990441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/3173300675410990441'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2017/06/devtip.html' title='[DevTip] 안드로이드 웨어 앱의 블루투스를 통한 디버깅'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6471119778129541855.post-7578569282221579978</id><published>2017-04-17T18:33:00.002+09:00</published><updated>2017-04-26T11:20:12.384+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cardboard"/><category scheme="http://www.blogger.com/atom/ns#" term="Jolt 360"/><category scheme="http://www.blogger.com/atom/ns#" term="Jolt Duo"/><category scheme="http://www.blogger.com/atom/ns#" term="Photoshere"/><category scheme="http://www.blogger.com/atom/ns#" term="카드보드"/><category scheme="http://www.blogger.com/atom/ns#" term="포토스피어"/><title type='text'>Jolt360으로 찍은 360도 사진을 구글 카드보드 앱으로 보기...</title><content type='html'>Jolt 360 앱으로 찍은 dual fisheye 사진을 자체 앱을 이용해 stitch.&lt;br /&gt;
Stitch된 사진들은 Jolt 360 앱에서 정상적으로 볼 수 있지만, 구글 카드보드 앱과는 호환 안 됨.&lt;br /&gt;
구글 카드보드 앱을 이용하기 위해서는 두 가지 조치 필요.&lt;br /&gt;
&lt;br /&gt;
1. Photospere 사진으로 인식되도록 파일명 변경&lt;br /&gt;
파일 이름이 &#39;PANO_&#39;로 시작해야 함.&lt;br /&gt;
파일명 일괄 변경 프로그램을 이용해서 쉽게 수정 가능하므로 자세한 설명은 생략한다!&lt;br /&gt;
&lt;br /&gt;
2. 180도 회전&lt;br /&gt;
Jolt 360으로 봤을 때 정면이, 구글 카드보드로 보면 뒷면으로 보인다. 180도 회전 필요하다는 말.&lt;br /&gt;
공개 소프트웨어인 Gimp와 Python-fu 스크립트(플러그인)를 이용해 일괄처리할 수 있다.&lt;br /&gt;
Gimp 사용법, 플러그인 설치 및 동작의 자세한 설명은 생략한다!&lt;br /&gt;
아래는 사용한 Python 스크립트.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint linenums:1&quot;&gt;&lt;code&gt;#!/usr/bin/env python
#
#   File = rotate-jolt-image.py

from gimpfu import *
import os
import re

def rotateJoltImage(srcPath, tgtPath):
  open_images, image_ids = pdb.gimp_image_list()
  if open_images &amp;gt; 0:
    pdb.gimp_message(&quot;Close all images and try again.&quot;)
  else:
    allFileList = os.listdir(srcPath)
    existingList = os.listdir(tgtPath)
    if existingList != []:
      pdb.gimp_message(&quot;Empty the target directory and try again.&quot;)
    else:
      srcFileList = []
      xform = re.compile(&#39;\.jpg&#39;, re.IGNORECASE)
      # Find all of the jpeg files in the list &amp;amp; make xcf file names
      for fname in allFileList:
        fnameLow = fname.lower()
        if fnameLow.count(&#39;.jpg&#39;) &amp;gt; 0:
          srcFileList.append(fname)
          # Loop on jpegs
      for srcFile in srcFileList:
        # os.path.join inserts the right kind of file separator
        tgtFile = os.path.join(tgtPath, xform.sub(&#39;_rot180.jpg&#39;, srcFile))
        srcFile = os.path.join(srcPath, srcFile)
        theImage = pdb.file_jpeg_load(srcFile, srcFile)
        #
        org_layer = pdb.gimp_image_get_active_layer(theImage)
        pdb.gimp_layer_add_alpha(org_layer)
        new_layer = pdb.gimp_layer_copy(org_layer, TRUE)
        pdb.gimp_image_insert_layer(theImage, new_layer, None, -1)
        #
        pdb.gimp_image_set_active_layer(theImage, org_layer)
        pdb.gimp_image_select_rectangle(theImage, 2, 0, 0, theImage.width/2, theImage.height)
        pdb.gimp_selection_invert(theImage)
        pdb.gimp_edit_clear(pdb.gimp_image_get_active_drawable(theImage))
        pdb.gimp_layer_translate(org_layer, theImage.width/2, 0)
        #
        pdb.gimp_image_set_active_layer(theImage, new_layer)
        pdb.gimp_image_select_rectangle(theImage, 2, 0, 0, theImage.width/2, theImage.height)
        pdb.gimp_edit_clear(pdb.gimp_image_get_active_drawable(theImage))
        pdb.gimp_layer_translate(new_layer, -theImage.width/2, 0)
        #
        final_layer = pdb.gimp_image_merge_down(theImage, new_layer, 1)
        #
        pdb.gimp_file_save(theImage, final_layer, tgtFile, tgtFile)
        #
        pdb.gimp_image_delete(theImage)
        #

register (
    &quot;rotateJoltImage&quot;,         # Name registered in Procedure Browser
    &quot;Rotate Stitched Image of Jolt Duo&quot;, # Widget title
    &quot;Rotate Stitched Image of Jolt Duo&quot;, # 
    &quot;Author Name&quot;,         # Author
    &quot;Copyright Holder&quot;,         # Copyright Holder
    &quot;Date&quot;,            # Date
    &quot;Rotate by 180 degree&quot;, # Menu Entry
    &quot;&quot;,     # Image Type - No image required
    [
    ( PF_DIRNAME, &quot;srcPath&quot;, &quot;Source Directory:&quot;, &quot;/default&quot; ),
    ( PF_DIRNAME, &quot;tgtPath&quot;, &quot;Target Directory:&quot;, &quot;/default&quot; ),
    ],
    [],
    rotateJoltImage,   # Matches to name of function being defined
    menu = &quot;&amp;lt;Image&amp;gt;/JoltDuo-Py&quot;  # Menu Location
    )   # End register

main()
&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://greyattic.blogspot.com/feeds/7578569282221579978/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://greyattic.blogspot.com/2017/04/jolt360-360-photoshpere.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/7578569282221579978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6471119778129541855/posts/default/7578569282221579978'/><link rel='alternate' type='text/html' href='http://greyattic.blogspot.com/2017/04/jolt360-360-photoshpere.html' title='Jolt360으로 찍은 360도 사진을 구글 카드보드 앱으로 보기...'/><author><name>회색</name><uri>http://www.blogger.com/profile/12525055816298334774</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>