<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Duk's Computer science</title>
    <link>https://dukwon.tistory.com/</link>
    <description>다른 사람들 보다 1% 더 알기 위해 얼마나 더 노력해야 할 것인가.</description>
    <language>ko</language>
    <pubDate>Wed, 12 Aug 2026 13:56:32 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Duk_</managingEditor>
    <item>
      <title>Docker 기반 Android Jenkins CI (Mac 환경)</title>
      <link>https://dukwon.tistory.com/82</link>
      <description>&lt;h4&gt;&lt;b&gt;#&amp;nbsp;Docker&amp;nbsp;기반&amp;nbsp;Android&amp;nbsp;Jenkins&amp;nbsp;CI (Mac&amp;nbsp;환경)&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;1.&amp;nbsp;docker&amp;nbsp;설치 및 실행&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;a href=&quot;https://hub.docker.com/editions/community/docker-ce-desktop-mac&quot;&gt;https://hub.docker.com/editions/community/docker-ce-desktop-mac&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&lt;br /&gt;&lt;b&gt;2.&amp;nbsp;jenkins&amp;nbsp;docker&amp;nbsp;이미지&amp;nbsp;다운로드 및 실행&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 62px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&amp;nbsp;docker&amp;nbsp;pull&amp;nbsp;jenkins/jenkins:lts&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&amp;nbsp;docker&amp;nbsp;run&amp;nbsp;-d&amp;nbsp;-p&amp;nbsp;8080:8080&amp;nbsp;--name&amp;nbsp;jenkinsCI&amp;nbsp;jenkins/jenkins:lts&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&quot;-d&quot; : 데몬으로&amp;nbsp;실행. 없으면 shell 종료시 같이 꺼짐.&lt;br /&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&quot;-p 8080:8080&quot; :&amp;nbsp; 포트&amp;nbsp;구성&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - &quot;--name jenkinsCI&quot; : 컨테이너 이름&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - &quot;jenkins/jenkins:lts&quot; : 받아놓은 lts 버전, 없으면 받아온다. -&amp;nbsp;&lt;a href=&quot;https://hub.docker.com/r/jenkins/jenkins/&quot;&gt;https://hub.docker.com/r/jenkins/jenkins/&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&lt;br /&gt;&lt;b&gt;3.&amp;nbsp;jenkins&amp;nbsp;local&amp;nbsp;접속 및 기본설치&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;localhost:8080 으로 접속&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 첫 인증코드를 확인하기 위해 &lt;span style=&quot;color: #333333;&quot;&gt;jenkinsCI&lt;/span&gt;의 log를 확인&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.6508%; height: 36px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 54px;&quot;&gt;
&lt;p&gt;&lt;b&gt;$&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;docker&amp;nbsp;logs&amp;nbsp;jenkinsCI&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;플러그인&amp;nbsp;설치&lt;br /&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;사용자&amp;nbsp;계정&amp;nbsp;등록&lt;/p&gt;
&lt;h4&gt;&lt;br /&gt;&lt;b&gt;4.&amp;nbsp;docker&amp;nbsp;이미지에&amp;nbsp;Android&amp;nbsp;SDK&amp;nbsp;설치&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 4-1.&amp;nbsp;docker&amp;nbsp;shell에&amp;nbsp;접속&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&amp;nbsp;docker&amp;nbsp;exec&amp;nbsp;-u&amp;nbsp;0&amp;nbsp;-it&amp;nbsp;[Container&amp;nbsp;ID]&amp;nbsp;/bin/bash&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 4-2.&amp;nbsp;Android-SDK&amp;nbsp;기본&amp;nbsp;설치&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&amp;nbsp;apt&amp;nbsp;update&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&amp;nbsp;apt&amp;nbsp;install&amp;nbsp;android-sdk&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; 4-3.&amp;nbsp;빌드에&amp;nbsp;필요한&amp;nbsp;Android-SDK&amp;nbsp;tool 추가설치&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4-3-1.&amp;nbsp;sdkmanager&amp;nbsp;설치&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&amp;nbsp;wget&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip&quot;&gt;https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip&lt;/a&gt;&lt;/b&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&amp;nbsp;mv&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://dukwon.tistory.com/manage/newpost/sdk-tools-linux-4333796.zip&quot;&gt;sdk-tools-linux-4333796.zip&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;/usr/lib/android-sdk/&lt;/span&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://dukwon.tistory.com/manage/newpost/sdk-tools-linux-4333796.zip&quot;&gt;sdk-tools-linux-4333796.zip&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&amp;nbsp;unzip&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://dukwon.tistory.com/manage/newpost/sdk-tools-linux-4333796.zip&quot;&gt;sdk-tools-linux-4333796.zip&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; 4-3-2.&amp;nbsp;sdkmanager로&amp;nbsp;필요한&amp;nbsp;tool&amp;nbsp;설치&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&amp;nbsp;cd&amp;nbsp;tools/bin&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&amp;nbsp;./sdkmanager&amp;nbsp;--list&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&amp;nbsp;./sdkmanager&amp;nbsp;&quot;build-tools;28.0.2&quot;&amp;nbsp;&quot;build-tools;28.0.3&quot;&amp;nbsp;&quot;platforms;android-28&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;&lt;br /&gt;&lt;b&gt;5.&amp;nbsp;Jenkins&amp;nbsp;환경변수에&amp;nbsp;ANDROID_HOME&amp;nbsp;path&amp;nbsp;등록&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;Jenkins&amp;nbsp;관리&amp;nbsp;&amp;gt;&amp;nbsp;시스템&amp;nbsp;설정&amp;nbsp;&amp;gt;&amp;nbsp;Global&amp;nbsp;properties&amp;nbsp;&amp;gt;&amp;nbsp;Environment&amp;nbsp;variables&lt;br /&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;이름:&amp;nbsp;ANDROID_HOME,&amp;nbsp;값:&amp;nbsp;/usr/lib/android-sdk&lt;/p&gt;</description>
      <category>Operating Systems/Android</category>
      <author>Duk_</author>
      <guid isPermaLink="true">https://dukwon.tistory.com/82</guid>
      <comments>https://dukwon.tistory.com/82#entry82comment</comments>
      <pubDate>Thu, 25 Apr 2019 02:30:42 +0900</pubDate>
    </item>
    <item>
      <title>아마존 웨이_사물인터넷과 플랫폼 전략  - 존 로스만, 와이즈맵</title>
      <link>https://dukwon.tistory.com/81</link>
      <description>&lt;p&gt;아마존 웨이_사물인터넷과&amp;nbsp;플랫폼&amp;nbsp;전략&amp;nbsp;&amp;nbsp;-&amp;nbsp;존&amp;nbsp;로스만,&amp;nbsp;와이즈맵&lt;/p&gt;
&lt;p&gt;(amazon&amp;nbsp;way&amp;nbsp;on&amp;nbsp;IoT - John Rossman)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[책을 읽게 된 동기]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;조직장님의 추천.&lt;/p&gt;
&lt;p&gt;아마존은 IoT에 대하여 어떠한 접근을 하고 있는지 궁금한 부분을 해결하고 싶었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[도서정보]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.coupang.com/vp/products/87669583?itemId=274963239&amp;amp;vendorItemId=3690304644&amp;amp;q=%EC%95%84%EB%A7%88%EC%A1%B4%EC%9B%A8%EC%9D%B4&amp;amp;itemsCount=36&amp;amp;searchId=29ccd70a2dfc43e3bbaf0e2454fbb5fe&amp;amp;rank=1&amp;amp;isAddedCart=&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.coupang.com/vp/products/87669583?itemId=274963239&amp;amp;vendorItemId=3690304644&amp;amp;q=%EC%95%84%EB%A7%88%EC%A1%B4%EC%9B%A8%EC%9D%B4&amp;amp;itemsCount=36&amp;amp;searchId=29ccd70a2dfc43e3bbaf0e2454fbb5fe&amp;amp;rank=1&amp;amp;isAddedCart=&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1556815891929&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.coupang.com/vp/products/87669583&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.coupang.com/vp/products/87669583?itemId=274963239&amp;amp;vendorItemId=3690304644&amp;amp;q=%EC%95%84%EB%A7%88%EC%A1%B4%EC%9B%A8%EC%9D%B4&amp;amp;itemsCount=36&amp;amp;searchId=29ccd70a2dfc43e3bbaf0e2454fbb5fe&amp;amp;rank=1&amp;amp;isAddedCart=&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wYqNX/hyAY1vQ9xo/snkGaLf2EHQ3gJf5FWL0K0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/drgzwS/hyAY7QmZrK/ij3uNnT3sVT9K4TtZcO3ik/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;아마존 웨이 사물인터넷과 플랫폼 전략:4차 산업혁명 시대를 주도하는 아마존 IoT 전략의 모든 것&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[요약]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;원칙1. 커넥티드 기기로 고객경험을 재창조하라: 고객경험 + 고객들의 문제 해결에 초점&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1-1. 고객에 대한 아마존의 집착&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 고객리뷰(Customer Reviews): 부정적 리뷰를 거르지 않는 고객 리뷰로 충성도를 높인다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 매일 무료 배송(Free Everyday Shipping): 유일한 마케팅&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 원클릭 쇼핑(1-Click Shopping): 결제단계 간소화&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - Look inside the Book: 책의 첫 몇페이지 미리보기&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 프라임(Prime): 무료 배송 프로그램, 고객 1인당 가치를 크게 끌어올렸음&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - Autorip: CD구매자들에게 무료 디지털 음원&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - Kindle: 킨들의 소프트웨어 매출 증대&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - Dash: 1세대, 음성인식, 스캔, 쉬운 설치, 견고한 디자인&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - Dash Buttons: 2세대, 누르면 특정제품만 주문되는 단일기능&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 드론 배송: 진행중. 배송의 형태, 규제에 대한 노력&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1-2. 고객들을 위해 IoT를 구현하라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 고객에서부터 시작: &lt;span style=&quot;color: #f41a18;&quot;&gt;&lt;b&gt;고객에 대한 깊은 집착은 조직문화에서 비롯&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 마찰을 제거하라: 고객이 불만을 가질 수 있는 마찰요소를 끔찍한 고객 경험을 상상하며 확인하고 제거&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 넓게 생각하라: 현재의 제품만을 바탕으로 생각하지 않기&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;원칙2. 언제나 어떻게든 고객의니즈를 충족시켜라: 고객은 다양한 플랫폼과 유통채널을 넘나드는 원활한 경험을 기대&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2-1. IoT를 통한 옴니채널 경험&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 옴니채널: 플랫폼이나 채널에 상관없이 어디서나 통합된 형태로 제공되는 고객서비스&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - ex) 다른 사이트를 통해 검색한 기록, 쇼핑이력 등을 반영&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2-2. 좋은 옴니채널에서 위대한 옴니채널로&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 차이점: 정보의 연속성을 완성하는 기업의 능력&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - ex) 커넥티드 기기로 소모품의 상태를 알림/주문, 제품/고객 데이터 수집, 비콘으로 건물 내 안내 등&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2-3. 연결된 경험을 생성시켜라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 커넥티드 기기가 트리거 -&amp;gt; 이를 평가하는 기준과 논리 -&amp;gt; 다른행동을 구체화할 기회를 제공&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - ex) 센서 측정/감지&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2-4. 아우디가 IoT를 만났을 때&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 아우디 트렁크에 직접배송: 아우디 + DHL + 아마존, 실험단계&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 포드 + 아마존 체결&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;원칙3. 커넥티드 기기를 통해 지속적으로 개선하라: 효율성/경쟁력/수익성 증가 목적&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 혁신1(Big I): 새로운 제품이나 기능, 새로운 경험&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; - 혁신2(Little i): 프로세스의 지속적인 개선&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3-1. 아마존 운영 능력의 비밀&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 주문 후 최소 15분만에 배송&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - &lt;span style=&quot;color: #333333;&quot;&gt;IoT로 데이터 수집을 빠르고 풍부하게 하여&amp;nbsp;&lt;/span&gt;식스시그마를 적용하고 불량률을 최소화&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 프로세스 전반에 &lt;b&gt;센서와 판독기&lt;/b&gt;를 설치하고 &lt;b&gt;적극적 확인 -&amp;gt; 오류탐지 및 알림&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3-2. IoT 기반의 지속적인 개선을 운영에 통합하라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 운영상 중요한 정보를 수집&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 오늘 수동으로 입력/기록한 데이터를 자동화&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 불완전/부정확한 데이터도 IoT를 통해 관찰&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 자산, 재고시스템 등의 감사/검사의 자동화&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 현장 장비관리의 용이성 확보&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 운영상 위험에 관한 실시간 정보 확보&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 고객서비스를 필요하게...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3-3. 이미 최고라고? 다시 생각해보라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 가혹할 정도로 집요해져서 개선&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;원칙4. 수학적 계산으로 두 마리 토끼를 잡아라: 비즈니스의 상관관계를 분석(정의), 수집, 개선&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4-1. 데이터 폭증&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 데이터는 기하급수적으로 많아지고 있고 이 데이터를 활용할 수 있어야 한다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4-2. 아마존의 문화: &quot;신이 아니라면 근거 데이터를 가져와라!&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 측정할 수 없는 것은 관리할 수 없다. - 피터 드러커 -&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 1) 의사결정의 논리를 정의&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 2) 의사결정 논리를 설명하는 수학등식 정의(적합성 함수 =&amp;gt; 책무성 명확)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 3) 데이터의 질을 개선 with IoT&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 4) 개선된 데이터로 의사결정 논리를 강화&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4-3. 계측화, 세분화된 실시간 데이터&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 문제가 발생한 지점을 찾기위해 데이터는 세부적이여야 하고, 실시간 사용 가능해야 함&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4-4. 아마존의 매커니컬 터크&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 일상적이고 기계적인 일들을 OPW(Other People's Work)로 두고 처리하게 하는것&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4-5. 아날로그를 디지털로 전환하라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - IoT가 아날로그를 디지털로 바꿔줄 장치&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 데이터를 수집/전송/처리/보관도 비용도 신중한 합리화 과정이 필요&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4-6. 알고리즘으로 가는 출발점&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 최적화하고 싶은 문제가 무엇인지 정확히 이해&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 수학적 공식을 세우고 변수들을 결정&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4-7. 비즈니스 프로세스를 수학적으로 재설계하라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 1) 핵심프로세스나 중요한 고객경험을 하나 선택&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 2) 프로세스에 영향을 미치는 요소들을 정의&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 3) 그 변수들로 공식을 도출&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4-8. 핵심 주제와 프로세스에 대한 공식을 세워라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 주의: 완벽주의의 덫에 빠지지 말고, 프로세스를 당장 최적화 하겠다는 욕심을 부리지 말자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 지속적으로 개선하기 위해 &quot;수학적 계산&quot;을 하고 그 핵심적 비즈니스 목표만 생각&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4-9. IoT는 결코 인간의 자리를 빼앗지 않는다&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - &lt;span style=&quot;color: #333333;&quot;&gt;생산성 연구:&amp;nbsp;&lt;/span&gt;인간 + 로봇 &amp;gt; 인간 + 인간 or 로봇 + 로봇&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;원칙5. &lt;span style=&quot;color: #f41a18;&quot;&gt;크게 생각하되 작게 시작하라&lt;/span&gt;: 작은 실험으로 교훈을 얻는다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;5-1. 크게 생각하라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 크게 도박하는 것과 혼동하지 말 것&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 커다란 비전을 세우고 지속적으로 실패에서 배우고, 조정하고 적응하며 앞으로 나아가는 것&lt;/p&gt;
&lt;p&gt;&lt;b&gt;5-2. 작게 시작하라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 수많은 작은 실험들을 시도하고, 장기적이고 끈질긴 접근&lt;/p&gt;
&lt;p&gt;&lt;b&gt;5-3. 실패한 실험이야말로 유익한 기회다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 낮은 완성도의 시제품 제작(LFP: Low-Fidelity Prototyping): 대교모 시제품 개발을 위한 지지를 얻어내는 방법&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ex) 구글 카드보드&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 최소 기능 제품(MVP: Minimum Variable Product): 비즈니스와 솔루션의 근간이 되는 중요한 가정들을 확인하고 검증&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 기능성 시제품(Functioning Prototype): 최종 제품에 대한 기술적인 토대&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 빠르게 실패하고, 실패를 딛고 앞으로 나아가라: 실패에서 귀중한 데이터를 얻을 수 있어야 한다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;5-4. 아마존은 왜 실패를 두려워하지 않는가&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 실패는 학습의 과정&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 직원들이 대담해지도록 독려, 혁신하는 팀들을 보호하고 목표에 초점, 사내 회의론자들의 반대와 걱정을 최소화&lt;/p&gt;
&lt;p&gt;&lt;b&gt;5-5. 비즈니스의 속도를 끌어올리는 열쇠&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 운영자인 동시에 혁신가가 되라고 요구하는 것은 실패의 지름길&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 마음껏 시행착오할 수 있는 지지대를 상상하고 만드는 것&lt;/p&gt;
&lt;p&gt;&lt;b&gt;5-6. 코끼리가 춤추게 하라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 1) 벤처캐피털회사처럼 투자하고 새로운 포트폴리오를 구축: 고객을 위한 기능&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; - 타당성을 검증하기 위한 작은 실험&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 2) 자율성과 독립성을 구축&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 운영과 혁신 조직을 분리&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 3) 유능한 고위 리더가 특정 IoT 프로젝트에 헌신하게 하라&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 리더들이 새로운 무언가에만 집중할 수 있도록&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 4) 적절한 측정지표와 목표를 설정하되, 대개는 그것들이 이익과 무관&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 적절한 측정지표가 외부나 윗선의 간섭을 덜 받고 독립적으로 활동 &amp;gt; 성공 가능성 높아짐&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 5) 부서간 통합 팀&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 다양한 전문지식과 배경을 가진 사람들로 팀을 구성 &amp;gt; 폭넓게 생각&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #f41a18;&quot;&gt; - 피자 두판 팀: 8명 이하의 소규모 팀&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 6) 월등하게 뛰어난 제품이나 서비스를 창조&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; - 고객에게 믿을 수 없을만큼 좋은 경험과 놀라움을 선사&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;원칙6. IoT 기반의 플랫폼 비즈니스를 구축하라: 자사의 커넥티드 기기로 다른기업이 플랫폼 비즈니스 모델을 구축&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;6-1. 아마존의 다양한 플랫폼 비즈니스&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 공급자와 소비자들을 위해, 복잡한 프로세스/업무들을 유연하게 완수할 수 있도록 긴밀히 결합&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - Warby Parker : 저가 맞춤안경, 5가지 안경 5일간 착용, 맘에드는 안경 외 반송&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - iTunes : 음악가-판매, 팬-음악가와 연결, 아이튠즈-네트워크 효과&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - PaypPal : 사용자-송금/입금, 판매자-결제시스템 이용&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - Alexa Voice Service: 다른제품에 탑재, 음성인식 소프트웨어&lt;/p&gt;
&lt;p&gt;&lt;b&gt;6-2. 플랫폼 비즈니스, 아마존이 가장 잘하는 일&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 1) 플랫폼은 복잡성을 단순화해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 더 나은 고객경험, 더 좋은 제품, 플랫폼 확장능력&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 2) 플랫폼은 쉽게 설치할 수 있도록 API를 제공&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 기술통합을 단순화, 대규모 확장&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 3) 플랫폼은 지속적인 가치를 제공&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 아마존 마켓플레이스: 결제/계정서비스, 제3자 판매 보증-고객신뢰, 꾸준한 고객수요-제3자 판매자들의 신뢰&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 4) Eat your own dog food&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 까다로운 내부 사용자들에게 먼저 제공, 피드백을 바탕으로 연구개발을 신속/가속/확장&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 5) 아마존의 플랫폼&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - AWS: Amazon Web Service&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - FBA: Fulfillment By Amazon, 상품을 보관하고 주문을 이행&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Amazon Machine Learning: 시각화 도구, 마법사 제공&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Amazon Marketplace: ?&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - CreateSpace: 주문형 자가출판 서비스&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - AVD: Amazon Video Direct, 자체 제작 전문가 영상 콘텐츠 플랫폼&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Mechanical Turk: 작은 업무 아웃소싱 + 인력 연결&lt;/p&gt;
&lt;p&gt;&lt;b&gt;6-3. 에코echo: IoT 세상에 심은 트로이의 목마&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 서비스를 연결해줄 컴퓨팅 인터페이스&lt;/p&gt;
&lt;p&gt;&lt;b&gt;6-4. 알렉사를 무료로 배포하는 이유: 알렉사 소프트웨어 라이선스를 무료로&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 알렉사의 경쟁력&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1) 정교한 음성인식&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2)&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;이벤트 생성 능력: 이벤트 인지 + Rules engine + 맞춤형 애플리케이션(Skill)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3) 알렉사 소프트웨어 무료 라이선스&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; - 아마존에서의 제품 구매로 연결&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; - AWS에 통합되어 클라우드 사용으로 연결&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; - 소비자 늘고 사용횟수 증가 &amp;gt; 기계학습에 의해 결과가 개선된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;6-5. IoT 플랫폼 비즈니스의 기회&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - IT Gang of Four: Apple, Facebook, Google, Amazon&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - Bigbelly 쓰레기통: 태양광 전원 + 쓰레기 압축 &amp;gt; 용량 최대 8배 가능, 폐기물 관리 시스템&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 진정한 플랫폼 : &lt;span style=&quot;color: #333333;&quot;&gt;기술상의 도전은 아님,&amp;nbsp;&lt;/span&gt;개방성과 제 3자 협업에 기초한 사고방식&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; - 데이터, 이벤트를 감시/수집하기 유리한 &quot;망대&quot;를 선점하고 그곳에 대한 접근권한을 활용하도록 만드는 것&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;6-6. 성공적인 플랫폼 기업이 되기 위한 조건&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 1) 제품의 물리적 위치와 포지셔닝: &quot;망대&quot;에 올라와 있는지&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 2) 제품의 형태인자: 인프라를 제공하는지&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 3) 기술적 역량: IT 플랫폼 기업은 결국 소프트웨어 및 IT기업&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 4) 운영환경의 복잡성: 개발 + 테스팅 + 출시과정 + 업데이트 + 보안 + ....&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 5) 장기전? VS 단기전?: 플랫폼은 구축하고 고객을 모으고 사용하는데까지 장기전&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - SMOP: Simple Matter Of Programming = &quot;간단한 프로그래밍 문제&quot;라고 말하지만 실제로는 복잡한 개발이라는 뜻&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;원칙7. 결과물 기반의 비즈니스 모델: 서비스형? - 소유권, 효과성, 유지관리 책임은 제공자에게&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;7-1. 결과물 기반 모델1: 셀프 모니터링 제품&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 브리타 'Infinity Smart Water Pitcher' &amp;gt; 아마존 'Dash Replenishment System' &amp;gt; 새 필터 자동주문&lt;/p&gt;
&lt;p&gt;&lt;b&gt;7-2. 결과물 기반 모델2: 서비스를 구독하게 하라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - UBI(Uage-based insurance) :&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;차량연계&amp;nbsp;&lt;/span&gt;운전습관 연계보험&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - Zipcar : 차량 월구독/사용한만큼, 자동차와 트럭&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - Kaeser Kompressoren : 압축공기 탱크 센서 &amp;gt; 사용패턴 분석 &amp;gt; 예방정비, 압축공기 구독 서비스&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 드롭캠 : CCTV + 동영상 녹화 저장 서비스&lt;/p&gt;
&lt;p&gt;&lt;b&gt;7-3. 결과물 기반 모델3: 아마존의 서비스형 비즈니스 모델&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - AWS: 데이터센터 혹은 입주 방식(Colocation)의 단점을 해결&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - FBA(아마존 주문이행 서비스): 물류, 유통 네트워크 사용할 수 있는 권한을 판매&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 롤스로이스: 항공기 엔진 임대 &amp;gt; 엔진의 상태 추적 &amp;gt; 유지관리 계획 &amp;gt; 매출증가, 항공사: 간소화된 효율적 운영&lt;/p&gt;
&lt;p&gt;&lt;b&gt;7-4. 결과물 기반 모델로의 전환 전략&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 채널갈등: 제조업체, 유통업체 간에서 기존의 고객을 보호하며 서비스 공급채널의 전환&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 고객교육: 어떻게 변하고 어떤 영향인지 이해&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 회계상의 혼란: 비고정적 매출에서 고정매출로 전환시 초창기 매출이 감소되며 이를 투자자들에게 명확하게&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 조직개편: 기존방식을 깨고 특정한 수준의 서비스를 제공해야 하는 계약상의 의무를 이행하는 조직으로&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 새로운 인재: IT기술 기반의 경기순환에서 연료역할을 할 인재&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;원칙8. 데이터가 곧 비즈니스 모델이다: 데이터 접근권한 판매&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;8-1. 신디케이션 비즈니스 모델&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - Inlix: 실시간 교통 데이터, 자동차 관련 데이터 = 데이터 확보/조달, 확보한 데이터 판매&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 몇년에 걸친 집중적인 노력과 투자, 인내심을 갖고 장기적인 초점을 유지&lt;/p&gt;
&lt;p&gt;&lt;b&gt;8-2. API를 통한 서비스형 데이터&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - API = 인프라, 트랜잭션&lt;/p&gt;
&lt;p&gt;&lt;b&gt;8-3. 프라이버시, 소유권, 보안&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 다양한 매체로 부터 온 정보의 물질이 개인 소유라면 정보도 소유자의 권리로 볼것인지 논란&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 법률들이 기술적 발전을 따라오지 못하고 있다. 향후 법률이 강화된다면...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;8-4. IoT에 관한 프라이버시 전략 개발&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 프라이버시에 대처가 가능한 정책 / 비즈니스 모델 및 가치 제안 / 조직 내부의 프로세스와 아키텍쳐로 접근해야...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;8-5. IoT 기반의 데이터 중개 비즈니스&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 미래에 대한 명확한 그림을 그릴 수 있는구체적이고 실질적인 사례를 찾는 것&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 필요하다고 생각하는 것보다 더 많은 데이터를 수집하는 것이 현명할 수도...&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 1) 데이터 구축의 시간과 비용을 계산하고&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 2) 데이터의 가치를 재무적으로 분석한 후&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 3) 다른 사람들의 데이터와 경쟁력을 비교&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;원칙9. 산업-가치사슬을 파괴하라:&amp;nbsp;&lt;span style=&quot;color: #f41a18;&quot;&gt;우리 산업은 전통을 존중하지 않는다. 오직 혁신을 존중할 뿐이다. by 사티아 나델라&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;9-1. 아마존이 새로운 영역으로 비즈니스를 확장하는 방법&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 인수 : 키바 시스템(창고 로봇), 자포스(신발 쇼핑몰), 안나푸르나 랩(하드웨어 OEM) 등&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 자체 브랜드 : 라크앤로, 노스 일레븐, 스트라스우드, 아마존베이직스, 프라임 팬트리 등&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 웹사이트 브랜드 : IMDB.com, Woot.com, Zappos.com, Dipers.com, Fabric.com, Twitch.tv 등&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 제품과 서비스 : 주문이행, 결제, AWS, 파이어 스틱, SOC 디자인, 퍼블리싱, 광고, 트위치 등&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 향후 : 전자기기 설계, TV쇼/게임 등 콘텐츠 제작, 창고 로봇, 사진 스튜디오/이미지 서비스 등&lt;/p&gt;
&lt;p&gt;&lt;b&gt;9-2. IoT 기반 공급사슬의 장점&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 공급자/판매자인 동시에 서비스형 모델&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 티센크루프 + 마이크로소프트 애저 IoT 서비스 &amp;gt; 승강기 상태 클라우딩 수집 &amp;gt; 유지관리 서비스&lt;/p&gt;
&lt;p&gt;&lt;b&gt;9-3. 가치사슬 분석으로 기회를 포작하라&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 고객경험이 붕괴한 곳&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 직접운영으로 수익성 향상되는 것&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 서비스/제품 의 상품화&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 기대이익 마진&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - IoT로 붕괴된 고객경험의 회복&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;원칙10. 플라이휠의 시너지 효과: 모멘텀을 생성/지속시키는 요소를 이해&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;10-1. 아마존의 비밀 무기, 플라이휠&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 선순환 : 낮은 가격 &amp;gt; 더 많은 고객 &amp;gt; 판매자 증가 &amp;gt; 고정비용 효용성 증가 &amp;gt; 가격 더욱 내려감&lt;/p&gt;
&lt;p&gt;&lt;b&gt;10-2. IoT 기반의 플라이휠 비즈니스 모델&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; - 플라이휠을 디자인하는 6단계&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1) 예비적 정의와 범위 기술서를 작성하라.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2) 핵심적인 상수와 변수들을 대략적으로 정의하라.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3) 상수와 변수들을 합리화하고 분류하라.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4) 인과관계 도표를 작성하라.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5) 모델 구축에 지속적인 노력을 기울이고 가능한 단순화하라.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6) 모델에 함축된 의미를 찾아라.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Fundamentals/Book</category>
      <category>Amazon</category>
      <category>amazon way</category>
      <category>IoT</category>
      <category>way</category>
      <category>사물인터넷</category>
      <category>아마존</category>
      <category>아마존웨이</category>
      <category>웨이</category>
      <category>전략</category>
      <category>플랫폼</category>
      <author>Duk_</author>
      <guid isPermaLink="true">https://dukwon.tistory.com/81</guid>
      <comments>https://dukwon.tistory.com/81#entry81comment</comments>
      <pubDate>Fri, 12 Apr 2019 01:49:43 +0900</pubDate>
    </item>
    <item>
      <title>Jenkins in Docker in ubuntu 18.04</title>
      <link>https://dukwon.tistory.com/79</link>
      <description>&lt;p&gt;&lt;b&gt;#&amp;nbsp;Jenkins in Docker in ubuntu 18.04&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;노트북을 서버로 만들고 싶은 마음은 없어서 Jenkins를 Docker위에 올렸고 그 과정을 기록해 둔다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. Docker 설치&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. Docker용 Jenkins 설치&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. Docker로 Jenkins 띄우기&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. Docker로 Jenkins 운영&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. Docker 설치&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;1) Docker CE &lt;/b&gt;VS&amp;nbsp;Docker EE&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;/b&gt;&lt;b&gt;CE :&amp;nbsp;Community &lt;/b&gt;Edition&lt;b&gt;&amp;nbsp;==&amp;gt; 선택&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - EE : Enterprise Edition&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; +&amp;nbsp;Ubuntu 환경:&amp;nbsp;&lt;/b&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/ubuntu/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;&quot;&gt;https://docs.docker.com/install/linux/docker-ce/ubuntu/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1)&amp;nbsp;소스로 부터 설치: &lt;/b&gt;(좀 복잡하지만) 다들 이렇게 쓴다고 설명이 되어있음.&amp;nbsp;&lt;b&gt;=&amp;gt; 선택&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2) 패키지 설치: Docker 업그레이드 할때마다 패키지 설치해야 한다고 함.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; + Mac 환경:&amp;nbsp;&lt;/b&gt;&lt;a href=&quot;https://docs.docker.com/docker-for-mac/install/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;&quot;&gt;https://docs.docker.com/docker-for-mac/install/&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1) 패키지 설치: &lt;/b&gt;이 방법만 제공&amp;nbsp; =&lt;b&gt;=&amp;gt; 선택&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. Docker용 Jenkins 설치&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - https://hub.docker.com/r/jenkins/jenkins/&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;$ sudo docker pull jenkins/jenkins:lts&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 1) &lt;b&gt;jenkins/jenkins:lts&lt;/b&gt; VS jenkins/jenkins&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;b&gt;LTS &lt;/b&gt;: Long Term Support&amp;nbsp; =&lt;b&gt;=&amp;gt; 선택&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Default : latest&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. Docker로 Jenkins 띄우기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; 1) 띄우기(로그로 찍어주는&amp;nbsp;&lt;/span&gt;Initial Password&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;물어볼 것임&amp;nbsp;끝난거 아님)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; $ &lt;b&gt;sudo docker run -d -p 8080:8080 -v /jenkins:/var/jenkins_home --name jenkins -u root jenkins/jenkins:lts&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 2) &lt;b&gt;http://localhost:8080&lt;/b&gt; 으로 접속&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 처음은 Initial Password 물어봄&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 3) Initial Password&amp;nbsp;찾을 수 있게 로그를 찍게해서 찾고 입력하기&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; $ &lt;b&gt;sudo docker logs jenkins&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 4) Jenkins 스스로 업데이트&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 5) 화면 갱신 및 사용자 등록&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;b&gt;# Reference&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- https://docs.docker.com/install/linux/docker-ce/ubuntu/&lt;/p&gt;&lt;p&gt;- https://docs.docker.com/docker-for-mac/install/&lt;/p&gt;&lt;p&gt;-&amp;nbsp;https://jojoldu.tistory.com/139&lt;/p&gt;&lt;p&gt;-&amp;nbsp;https://www.leafcats.com/215&lt;/p&gt;</description>
      <category>Operating Systems/Linux</category>
      <author>Duk_</author>
      <guid isPermaLink="true">https://dukwon.tistory.com/79</guid>
      <comments>https://dukwon.tistory.com/79#entry79comment</comments>
      <pubDate>Sun, 10 Mar 2019 02:25:59 +0900</pubDate>
    </item>
    <item>
      <title>바이너리에서 1인 Bit만 세어보기: Hamming weight(Population count algorithm)</title>
      <link>https://dukwon.tistory.com/78</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;#&amp;nbsp;바이너리에서 1인 Bit만 세어보기: Hamming weight(Population count algorithm)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2진수로 바꾸었을때 길이가 n인 정수에서 1인 bit만 세어보는 알고리즘을&lt;/p&gt;&lt;p&gt;발전하는 순서로 나열해 보았습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. 2로 계속 나누면서&amp;nbsp;나머지 세기 = O(n)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;//&amp;nbsp;&lt;/p&gt;&lt;pre style=&quot;background-color: rgb(255, 255, 255); font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;public static int &lt;/span&gt;bitCount1(&lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;int &lt;/span&gt;i) {&lt;br /&gt;    &lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;int &lt;/span&gt;count = &lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;while &lt;/span&gt;(i &amp;gt; &lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;) {&lt;br /&gt;        count += i%&lt;span style=&quot;color:#0000ff;&quot;&gt;2&lt;/span&gt;;&lt;br /&gt;        i /= &lt;span style=&quot;color:#0000ff;&quot;&gt;2&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;return &lt;/span&gt;count;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. bit shift 이용해서 1자리 세기&amp;nbsp;= O(n)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;//&lt;/p&gt;&lt;pre style=&quot;background-color: rgb(255, 255, 255); font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;public static int &lt;/span&gt;bitCount2(&lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;int &lt;/span&gt;i) {&lt;br /&gt;    &lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;int &lt;/span&gt;count = &lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;while &lt;/span&gt;(i&amp;gt; &lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;) {&lt;br /&gt;        count += &lt;span style=&quot;color:#0000ff;&quot;&gt;0x1 &lt;/span&gt;&amp;amp; i;&lt;br /&gt;        i = i &amp;gt;&amp;gt; &lt;span style=&quot;color:#0000ff;&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;return &lt;/span&gt;count;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3-1. Population count 알고리즘으로 풀기&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;= O(log(n))&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&amp;nbsp;// Java의 음수의 경우는 &amp;gt;&amp;gt; 할 때 맨 왼쪽에 1이 의도치않게 붙어서 &amp;gt;&amp;gt;&amp;gt; 를 사용하는게 낫다.&lt;/p&gt;&lt;pre style=&quot;background-color: rgb(255, 255, 255); font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;public static int &lt;/span&gt;bitCount3(&lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;int &lt;/span&gt;i) {&lt;br /&gt;    i = (i &amp;amp; &lt;span style=&quot;color:#0000ff;&quot;&gt;0x55555555&lt;/span&gt;) + ((i &amp;gt;&amp;gt;&amp;gt; &lt;span style=&quot;color:#0000ff;&quot;&gt;1&lt;/span&gt;) &amp;amp; &lt;span style=&quot;color:#0000ff;&quot;&gt;0x55555555&lt;/span&gt;);        &lt;span style=&quot;color:#808080;font-style:italic;&quot;&gt;// ...01010101010101010101010101010101...&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;font-style:italic;&quot;&gt;    &lt;/span&gt;i = (i &amp;amp; &lt;span style=&quot;color:#0000ff;&quot;&gt;0x33333333&lt;/span&gt;) + ((i &amp;gt;&amp;gt;&amp;gt; &lt;span style=&quot;color:#0000ff;&quot;&gt;2&lt;/span&gt;) &amp;amp; &lt;span style=&quot;color:#0000ff;&quot;&gt;0x33333333&lt;/span&gt;);        &lt;span style=&quot;color:#808080;font-style:italic;&quot;&gt;// ...00110011001100110011001100110011...&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;font-style:italic;&quot;&gt;    &lt;/span&gt;i = (i &amp;amp; &lt;span style=&quot;color:#0000ff;&quot;&gt;0x0f0f0f0f&lt;/span&gt;) + ((i &amp;gt;&amp;gt;&amp;gt; &lt;span style=&quot;color:#0000ff;&quot;&gt;4&lt;/span&gt;) &amp;amp; &lt;span style=&quot;color:#0000ff;&quot;&gt;0x0f0f0f0f&lt;/span&gt;);        &lt;span style=&quot;color:#808080;font-style:italic;&quot;&gt;// ...00001111000011110000111100001111...&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;font-style:italic;&quot;&gt;    &lt;/span&gt;i = (i &amp;amp; &lt;span style=&quot;color:#0000ff;&quot;&gt;0x00ff00ff&lt;/span&gt;) + ((i &amp;gt;&amp;gt;&amp;gt; &lt;span style=&quot;color:#0000ff;&quot;&gt;8&lt;/span&gt;) &amp;amp; &lt;span style=&quot;color:#0000ff;&quot;&gt;0x00ff00ff&lt;/span&gt;);        &lt;span style=&quot;color:#808080;font-style:italic;&quot;&gt;// ...00000000111111110000000011111111...&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;font-style:italic;&quot;&gt;    &lt;/span&gt;i = (i &amp;amp; &lt;span style=&quot;color:#0000ff;&quot;&gt;0x0000ffff&lt;/span&gt;) + ((i &amp;gt;&amp;gt;&amp;gt; &lt;span style=&quot;color:#0000ff;&quot;&gt;16&lt;/span&gt;) &amp;amp; &lt;span style=&quot;color:#0000ff;&quot;&gt;0x0000ffff&lt;/span&gt;);       &lt;span style=&quot;color:#808080;font-style:italic;&quot;&gt;// ...00000000000000001111111111111111...&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;font-style:italic;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;return &lt;/span&gt;i &amp;amp; &lt;span style=&quot;color:#0000ff;&quot;&gt;0x3f&lt;/span&gt;;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3-2. 고민말고 &lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Integer.bitCount() 쓰기 = O(log(n))&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;// 원리는 3-1과 똑같다.&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: rgb(255, 255, 255); font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;public static int &lt;/span&gt;bitCount4(&lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;int &lt;/span&gt;i) {&lt;br /&gt;    &lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;return &lt;/span&gt;Integer.&lt;span style=&quot;font-style:italic;&quot;&gt;bitCount&lt;/span&gt;(i);&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;# 1~3 까지의 성능비교&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;// shift도 빠르지만...&lt;/p&gt;&lt;pre style=&quot;background-color: rgb(255, 255, 255); font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;for &lt;/span&gt;(&lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;int &lt;/span&gt;i=&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;; i &amp;lt; Integer.&lt;span style=&quot;color:#660e7a;font-weight:bold;font-style:italic;&quot;&gt;MAX_VALUE&lt;/span&gt;; i++) {&lt;br /&gt;    &lt;span style=&quot;color:#000080;font-weight:bold;&quot;&gt;int &lt;/span&gt;a = &lt;span style=&quot;font-style:italic;&quot;&gt;bitCount&lt;/span&gt;(i);&lt;br /&gt;}&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;bitCount1 = 90,453ms&lt;/p&gt;&lt;p&gt;bitCount2 = 31,677ms&lt;/p&gt;&lt;p&gt;bitCount3 = 3ms&lt;/p&gt;&lt;p&gt;bitCount4 = 3ms&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;4. Hardware 찬스 쓰기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;CPU 영역에서 bit를 한번에 세주는 기능이 있다고 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Reference:&lt;/p&gt;&lt;p&gt;- https://en.wikipedia.org/wiki/Hamming_weight&lt;/p&gt;&lt;p&gt;- https://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer&lt;br /&gt;&lt;/p&gt;</description>
      <category>Algorithms</category>
      <author>Duk_</author>
      <guid isPermaLink="true">https://dukwon.tistory.com/78</guid>
      <comments>https://dukwon.tistory.com/78#entry78comment</comments>
      <pubDate>Tue, 27 Nov 2018 01:21:31 +0900</pubDate>
    </item>
    <item>
      <title>Wildcard('?', '*') 패턴 매칭 알고리즘</title>
      <link>https://dukwon.tistory.com/77</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;# Wildcard('?', '*') 패턴 매칭&amp;nbsp;알고리즘&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Wildcard가 들어간 패턴과 주어진 문자가 해당하는지 확인하는 알고리즘 중&lt;/p&gt;&lt;p&gt;매칭테이블로 이를 구현하는 것에 대해 알아본다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. 문제의 정의&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- &quot;ABC&quot; == &quot;ABC&quot;: 문자열&amp;nbsp;모두&amp;nbsp;동일하다면 True&lt;/p&gt;&lt;p&gt;- &quot;ABC&quot; == &quot;A?C&quot;: 문자열&amp;nbsp;중 ?가 있는 한글자만 빼고,&amp;nbsp;나머지는 동일하다면 True&lt;/p&gt;&lt;p&gt;- &quot;AC&quot; == &quot;A*C&quot;, &quot;ABBBC&quot; == &quot;A*C&quot;: 문자열&amp;nbsp;중&amp;nbsp;*가 있는 부분이 없거나 여러개인 경우,&amp;nbsp;나머지는 동일하다면 True&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. 매칭테이블&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Dynamic Programming 기법으로서 이전의 문자열까지의 비교를 누적하고, 다음문자를 비교할때 이를 참고한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;style type=&quot;text/css&quot;&gt;&lt;!--td {border: 1px solid #ccc;}br {mso-data-placement:same-cell;}--&gt;&lt;/style&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;p&gt;&lt;p&gt;&lt;p&gt;&lt;p&gt;&lt;p&gt;&lt;p&gt;&lt;table xmlns=&quot;http://www.w3.org/1999/xhtml&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; dir=&quot;ltr&quot; border=&quot;1&quot; style=&quot;table-layout:fixed;font-size:10pt;font-family:arial,sans,sans-serif;width:0px;border-collapse:collapse;border:none&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;60&quot;&gt;&lt;col width=&quot;60&quot;&gt;&lt;col width=&quot;60&quot;&gt;&lt;col width=&quot;60&quot;&gt;&lt;col width=&quot;60&quot;&gt;&lt;col width=&quot;60&quot;&gt;&lt;col width=&quot;60&quot;&gt;&lt;col width=&quot;60&quot;&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style=&quot;height:39px;&quot;&gt;&lt;td style=&quot;border-right-color: transparent; overflow: visible; padding: 2px 0px; vertical-align: middle; font-weight: bold; height: 39px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Matching Table&amp;quot;}&quot;&gt;&lt;div style=&quot;white-space:nowrap;overflow:hidden;position:relative;width:116px;left:3px;&quot;&gt;&lt;div style=&quot;float:left;&quot;&gt;Matching Table&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;overflow: hidden; padding: 2px 3px; vertical-align: middle; height: 39px;&quot;&gt;&lt;/td&gt;&lt;td style=&quot;overflow: hidden; padding: 2px 3px; vertical-align: middle; font-weight: bold; text-align: center; height: 39px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:0}&quot;&gt;0&lt;/td&gt;&lt;td style=&quot;overflow: hidden; padding: 2px 3px; vertical-align: middle; font-weight: bold; text-align: center; height: 39px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:1}&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;overflow: hidden; padding: 2px 3px; vertical-align: middle; font-weight: bold; text-align: center; height: 39px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:2}&quot;&gt;2&lt;/td&gt;&lt;td style=&quot;overflow: hidden; padding: 2px 3px; vertical-align: middle; font-weight: bold; text-align: center; height: 39px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:3}&quot;&gt;3&lt;/td&gt;&lt;td style=&quot;overflow: hidden; padding: 2px 3px; vertical-align: middle; font-weight: bold; text-align: center; height: 39px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow: hidden; padding: 2px 3px; vertical-align: middle; font-weight: bold; text-align: center; height: 39px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;m&amp;quot;}&quot;&gt;m&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height:39px;&quot;&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;&quot;&gt;&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;&quot;&gt;&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:bottom;&quot;&gt;&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;A&amp;quot;}&quot;&gt;A&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;?&amp;quot;}&quot;&gt;?&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;C&amp;quot;}&quot;&gt;C&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;*&amp;quot;}&quot;&gt;*&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height:39px;&quot;&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;font-weight:bold;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:0}&quot;&gt;0&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot;&gt;&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(0,0)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-2]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-2]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(0,0)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(0,1)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-3]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-2]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(0,1)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(0,2)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-4]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-2]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(0,2)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(0,3)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-5]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-2]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(0,3)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(0,m)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-7]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-2]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(0,m)&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height:39px;&quot;&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;font-weight:bold;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:1}&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;A&amp;quot;}&quot;&gt;A&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(1,0)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-2]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-3]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(1,0)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(1,1)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-3]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-3]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(1,1)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(1,2)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-4]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-3]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(1,2)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(1,3)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-5]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-3]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(1,3)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(1,m)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-7]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-3]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(1,m)&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height:39px;&quot;&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;font-weight:bold;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:2}&quot;&gt;2&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;B&amp;quot;}&quot;&gt;B&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(2,0)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-2]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-4]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(2,0)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(2,1)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-3]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-4]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(2,1)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(2,2)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-4]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-4]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(2,2)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(2,3)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-5]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-4]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(2,3)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(2,m)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-7]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-4]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(2,m)&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height:39px;&quot;&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;font-weight:bold;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:3}&quot;&gt;3&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;C&amp;quot;}&quot;&gt;C&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(3,0)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-2]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-5]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(3,0)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(3,1)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-3]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-5]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(3,1)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(3,2)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-4]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-5]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(3,2)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(3,3)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-5]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-5]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(3,3)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(3,m)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-7]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-5]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(3,m)&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height:39px;&quot;&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;font-weight:bold;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;height:39px;&quot;&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;font-weight:bold;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;n&amp;quot;}&quot;&gt;n&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Z&amp;quot;}&quot;&gt;Z&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(n,0)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-2]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-7]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(n,0)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(n,1)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-3]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-7]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(n,1)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(n,2)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-4]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-7]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(n,2)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(n,3)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-5]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-7]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(n,3)&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;...&amp;quot;}&quot;&gt;...&lt;/td&gt;&lt;td style=&quot;overflow:hidden;padding:2px 3px 2px 3px;vertical-align:middle;font-weight:bold;text-align:center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;T(n,m)&amp;quot;}&quot; data-sheets-formula=&quot;=&amp;quot;T(&amp;quot;&amp;amp;R[0]C[-7]&amp;amp;&amp;quot;,&amp;quot;&amp;amp;R[-7]C[0]&amp;amp;&amp;quot;)&amp;quot;&quot;&gt;T(n,m)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;T(n, m)가 패턴 매칭의 결과가 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. 매칭의 조건&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;- case1: text[0] == pattern[0] 이면,&amp;nbsp;&lt;/b&gt;&lt;b&gt;T(0,0) = True 라고 본다.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;공백과&amp;nbsp;공백의 비교는 True라고 본다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;하지만,&amp;nbsp;물론, 공백과&amp;nbsp;공백이 아닌 문자의 비교는&amp;nbsp;False이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;- case2: text[i] ==&amp;nbsp;pattern[j]&amp;nbsp; 이면,&amp;nbsp;&lt;/b&gt;&lt;b&gt;T(i, j) = T(i-1, j-1)&amp;nbsp;&lt;/b&gt;&lt;b&gt;을 따른다.(대각선 상속)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 자기 위치의 문자와, 이전까지&amp;nbsp;문자열이 매칭되고 있었는지의 누적결과도&amp;nbsp;확인하는 것이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;- case3: pattern[j] == ?&amp;nbsp;이면,&amp;nbsp;&lt;/b&gt;&lt;b&gt;T(i, j) = T(i-1, j-1)&amp;nbsp;&lt;/b&gt;&lt;b&gt;을 따른다.(대각선 상속)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ?의 패턴은 아무문자나 가능하고 그 개수만 맞으면 되기 때문에 이전까지의 누적결과만&amp;nbsp;확인하면 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;- case4:&amp;nbsp;pattern[j] == * 이면,&amp;nbsp;T(i, j) =&amp;nbsp;T(i, j-1) 혹은&amp;nbsp;T(i-1, j)&amp;nbsp;을 따른다.(옆&amp;nbsp;또는 위 상속)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;T(i, j-1) 는 * 의 자리에&amp;nbsp;특정문자가 추가될 수 있음을 나타내고, 그 이전까지의 누적결과는 괜찮았는지 확인하는 것이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; T(i-1, j) 는 * 가 공백에 매칭되고 있음을 나타내고, 그 이전까지의 누적결과는 괜찮았는지 확인하는 것이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;- case5:&amp;nbsp;pattern[1] == * 이면,&amp;nbsp;T(0, j) =&amp;nbsp;T(0, j-1) 을 따른다.(옆&amp;nbsp;상속)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 패턴이 *로 시작하면 다음&amp;nbsp;pattern[2] 까지 문제없음을 전달하기 위함이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4. 다양한 case 확인해보기&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Reference:&lt;/p&gt;&lt;p&gt;- https://www.geeksforgeeks.org/wildcard-pattern-matching/&lt;/p&gt;&lt;p&gt;- https://www.youtube.com/watch?v=3ZDZ-N0EPV0&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Algorithms</category>
      <author>Duk_</author>
      <guid isPermaLink="true">https://dukwon.tistory.com/77</guid>
      <comments>https://dukwon.tistory.com/77#entry77comment</comments>
      <pubDate>Tue, 20 Nov 2018 15:47:28 +0900</pubDate>
    </item>
    <item>
      <title>Android Material Design 스크롤에 따라 상단이 접히고 나오는 레이아웃 구성과 역할</title>
      <link>https://dukwon.tistory.com/76</link>
      <description>&lt;p&gt;&lt;b&gt;#&amp;nbsp;Android Material Design 스크롤에 따라 상단이 접히고 나오는&amp;nbsp;레이아웃 구성과 역할&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;화면구성과 그 xml 선언의 관계를 연결해보았습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 533px; width: 533px; height: 400px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99254F3D5BF263E82E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99254F3D5BF263E82E&quot; width=&quot;533&quot; height=&quot;400&quot; filename=&quot;Android 화면구성 분석 (1).jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 533px; height: 400px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 533px; width: 533px; height: 400px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992BA63D5BF263E814&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992BA63D5BF263E814&quot; width=&quot;533&quot; height=&quot;400&quot; filename=&quot;Android 화면구성 분석 (2).jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 533px; height: 400px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;실제와 다른 부분이 있다면 알려주세요.&lt;/p&gt;&lt;p&gt;적극적으로 검토하고 반영하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Reference&lt;/p&gt;&lt;p&gt;- https://material.io/develop/android/components/collapsing-toolbar-layout/&lt;/p&gt;&lt;p&gt;-&amp;nbsp;https://github.com/chrisbanes/cheesesquare&lt;/p&gt;</description>
      <category>Operating Systems/Android</category>
      <author>Duk_</author>
      <guid isPermaLink="true">https://dukwon.tistory.com/76</guid>
      <comments>https://dukwon.tistory.com/76#entry76comment</comments>
      <pubDate>Mon, 19 Nov 2018 16:19:33 +0900</pubDate>
    </item>
    <item>
      <title>Android Material Design 사이드메뉴(햄버그 메뉴?) 레이아웃 구성과 역할</title>
      <link>https://dukwon.tistory.com/75</link>
      <description>&lt;p&gt;&lt;b&gt;#&amp;nbsp;Android Material Design 사이드메뉴(햄버그 메뉴?) 레이아웃 구성과 역할&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;화면구성과 그 xml 선언의 관계를 연결해보았습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 667px; width: 667px; height: 500px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D4B13E5BF2610D11&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D4B13E5BF2610D11&quot; width=&quot;667&quot; height=&quot;500&quot; filename=&quot;Android 화면구성 분석.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 667px; height: 500px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;실제와 다른 부분이 있다면 알려주세요.&lt;/p&gt;&lt;p&gt;적극적으로 검토하고 반영하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Reference&lt;/p&gt;&lt;p&gt;- https://material.io/develop/android/components/navigation-view/&lt;br /&gt;&lt;/p&gt;&lt;p&gt;-&amp;nbsp;https://github.com/chrisbanes/cheesesquare&lt;/p&gt;</description>
      <category>Operating Systems/Android</category>
      <author>Duk_</author>
      <guid isPermaLink="true">https://dukwon.tistory.com/75</guid>
      <comments>https://dukwon.tistory.com/75#entry75comment</comments>
      <pubDate>Mon, 19 Nov 2018 16:11:08 +0900</pubDate>
    </item>
    <item>
      <title>YOLO v3 demo webcam 돌려보기 for ubuntu(18.04)</title>
      <link>https://dukwon.tistory.com/74</link>
      <description>&lt;p&gt;&lt;b&gt;#&amp;nbsp;YOLO v3 demo webcam 돌려보기 for ubuntu 18.04&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;# YOLO란 무엇인가&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 는 웹사이트 읽어보시면 자세히 나와있습니다: &lt;a href=&quot;https://pjreddie.com/darknet/yolo/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://pjreddie.com/darknet/yolo/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;- 요약: YOLO가 나오기 전까지의 CNN은 사진을 여러조각(kernel or filter size)으로 그리고 그것들이 겹치게(stride) 하는 알고리즘이였다면, YOLO는 stride를 없애는(You Only Look Once)&amp;nbsp;전략으로 만들어진 알고리즘.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;# 진행단계&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- darknet 소스 다운로드&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - https://github.com/pjreddie/darknet&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- CUDA 빌드환경 구성&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - Nvidia용 Additional driver 추가&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - CUDA toolkit 설치&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- OpenCV 빌드환경 구성&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - OpenCV 설치&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- darknet 빌드&lt;/p&gt;&lt;p&gt;- darknet 실행&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;0. 준비물&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- Nvidia CUDA 지원 그래픽카드&lt;/p&gt;&lt;p&gt;- OpenCV&lt;/p&gt;&lt;p&gt;- webcam: ubuntu 호환되는 제품(ubuntu 내에 cheese 앱 실행여부로 확인가능)&lt;/p&gt;&lt;p&gt;- ubuntu(18.04): 이 데모가 ubuntu에서 진행되었기 때문.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;. darknet 소스 다운로드&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 적절한 위치에서&lt;/p&gt;&lt;p&gt;- $ git clone https://github.com/pjreddie/darknet.git&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. CUDA 빌드환경 구성&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2.1. Nvidia용 Additional driver 추가&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- Software &amp;amp; Updates &amp;gt; Additional Drivers &amp;gt; 드라이버 선택&lt;/p&gt;&lt;p&gt;&amp;nbsp; (YOLO 빌드가 안되는 낮은 버전이 있으니 주의)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2.2. CUDA toolkit 설치&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 설치가이드: &lt;a href=&quot;https://developer.nvidia.com/cuda-downloads&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://developer.nvidia.com/cuda-downloads&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 운영체제와 버전에 따라 설치&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;- Tensorflow Object Detection에서는 CUDA 9.0을 지원하는데 CUDA&amp;nbsp;10.0 설치하면 호환에 어려움이 있을것.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2.3. ubuntu 내에서의 실행환경구성&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- path와 기타 설정들을 알아서 해줌.&lt;/p&gt;&lt;p&gt;- $ sudo apt install nvidia-cuda-toolkit&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. OpenCV 빌드환경 구성&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 설치가이드:&amp;nbsp;&lt;a href=&quot;https://docs.opencv.org/3.4.1/d2/de6/tutorial_py_setup_in_ubuntu.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://docs.opencv.org/3.4.1/d2/de6/tutorial_py_setup_in_ubuntu.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;- $ sudo apt-get install python-opencv&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;4. darknet 빌드 및 실행&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4.1. Makefile 수정&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - $ vi Makefile&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - GPU=1&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - OPENCV=1&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - :wq&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - $ make&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4.2. darknet 실행&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- data출처(?) / hyperparameter 설정값 / weight 순서로 지정&lt;/p&gt;&lt;p&gt;- 실행을 위한 설정들이 cfg 파일 안에 있으니 해당 디렉토리를 참조&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- $ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights&lt;/p&gt;&lt;p&gt;&amp;nbsp; OR 메모리 부족이라고 나오는 경우 tiny 버전으로...&lt;/p&gt;&lt;p&gt;- $ ./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights&lt;/p&gt;</description>
      <category>Machine Learning</category>
      <author>Duk_</author>
      <guid isPermaLink="true">https://dukwon.tistory.com/74</guid>
      <comments>https://dukwon.tistory.com/74#entry74comment</comments>
      <pubDate>Wed, 3 Oct 2018 14:08:53 +0900</pubDate>
    </item>
    <item>
      <title>생각정리스킬-복주환, 천그루숲</title>
      <link>https://dukwon.tistory.com/72</link>
      <description>&lt;p&gt;&lt;b&gt;#&amp;nbsp;생각정리스킬-복주환, 천그루숲&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;장르: 자기개발&lt;/p&gt;&lt;p&gt;제목: 생각정리스킬&lt;/p&gt;&lt;p&gt;저자: 복주환&lt;/p&gt;&lt;p&gt;시작일: 2018.08.05일 쯤&lt;/p&gt;&lt;p&gt;완료일: 2018.08.31&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[책을 읽게 된 동기]&lt;/b&gt;&lt;/p&gt;&lt;p&gt;이 책을 처음 알게된건 너무 많은 생각에 정리도 못하고 집중도 못하는 삶을 살고 있던 때 였다.&lt;/p&gt;&lt;p&gt;읽어본 책이라도 정리를 해보자는 마음에&amp;nbsp;독서정리 방법을 찾던중에 우연히 발견하였고,&lt;/p&gt;&lt;p&gt;독서 분야 뿐만 아니라 인생의 목표를 생각하고 정리해서 구체화하는 방법까지 나와있어서&lt;/p&gt;&lt;p&gt;혼란스러운 나의 생각을 정리해줄 길잡이가 될 것이라는 생각에 흥미롭게 읽어내려갈 수 있었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[도서정보]&lt;/b&gt;&lt;/p&gt;&lt;table class=&quot;tt-plugin-interpark&quot; width=&quot;100%&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; style=&quot;background: #fff; border: 1px solid #e0e0e0; width: 408px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;70&quot; style=&quot;vertical-align: top; padding: 10px 0 10px 10px;&quot;&gt;&lt;a href=&quot;http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=263444844&amp;amp;refererType=8303&amp;amp;bookblockname=bpmain_in&amp;amp;booklinkname=wg_search_BA757A0E63E207C1F39CB23351C01AEA3B38A4BEFA6BDC377BDC0FF76FC247CE&amp;amp;key=BA757A0E63E207C1F39CB23351C01AEA3B38A4BEFA6BDC377BDC0FF76FC247CE&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://bimage.interpark.com/goods_image/4/8/4/4/263444844h.jpg&quot; width=&quot;66&quot; height=&quot;90&quot; style=&quot;border: 0 none;&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align: top; padding: 10px 10px 10px 15px;&quot;&gt;&lt;dl style=&quot;margin: 0; padding: 2px 0 0 0; list-style: none; font: 11px dotum, sans-serif; letter-spacing: -1px; color: #777;&quot;&gt;&lt;dt style=&quot;padding: 0; margin: 0;&quot;&gt;&lt;a href=&quot;http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=263444844&amp;amp;refererType=8303&amp;amp;bookblockname=bpmain_in&amp;amp;booklinkname=wg_search_BA757A0E63E207C1F39CB23351C01AEA3B38A4BEFA6BDC377BDC0FF76FC247CE&amp;amp;key=BA757A0E63E207C1F39CB23351C01AEA3B38A4BEFA6BDC377BDC0FF76FC247CE&quot; target=&quot;_blank&quot; style=&quot;font-size: 12px; color: #444 !important; font-weight: bold; text-decoration: none !important;&quot;&gt;생각 정리 스킬&lt;/a&gt;&lt;/dt&gt;&lt;dd style=&quot;padding: 7px 0 0 0; margin: 0; color: #a0a0a0;&quot;&gt;국내도서&lt;/dd&gt;&lt;dd style=&quot;padding: 17px 0 0 0; margin: 0;&quot;&gt;저자 : 복주환&lt;/dd&gt;&lt;dd style=&quot;padding: 4px 0 0 0; margin: 0;&quot;&gt;출판 : 천그루숲 &lt;span style=&quot;letter-spacing: normal&quot;&gt;2017.01.20&lt;/span&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;a href=&quot;http://book.interpark.com/blog/integration/product/itemDetail.rdo?prdNo=263444844&amp;amp;refererType=8303&amp;amp;bookblockname=bpmain_in&amp;amp;booklinkname=wg_search_BA757A0E63E207C1F39CB23351C01AEA3B38A4BEFA6BDC377BDC0FF76FC247CE&amp;amp;key=BA757A0E63E207C1F39CB23351C01AEA3B38A4BEFA6BDC377BDC0FF76FC247CE&quot; target=&quot;_blank&quot; style=&quot;float: right; width: 44px; height: 11px; background: url(//t1.daumcdn.net/tistory_admin/static/images/icon_ipark_detail.gif) no-repeat; overflow: hidden; display: block; text-indent: -1000em;&quot;&gt;상세보기&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[책의 내용(줄거리)]&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;제1장 우리가 몰랐던 생각정리의 재발견&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 머릿속에 생각은 많지만 아이디어로 기획하는 능력이 없다면 실력은 인정받을 수 없다.&lt;/p&gt;&lt;p&gt;- 집행력: 정보를 조직화하고 체계적으로 일을 수행하는 능력, 패턴을 이해하고 계획을 세워서&amp;nbsp;실천&lt;/p&gt;&lt;p&gt;- 생각정리의 기술을 꾸준히 훈련&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;제2장 근본적으로 생각정리를 못하는 이유&lt;/b&gt;&lt;/p&gt;&lt;p&gt;2.2. 머릿속 생각을 시각화&lt;/p&gt;&lt;p&gt;- feat. 전두엽-생각정리 담당: 계획수립, 주의집중, 자기성찰, 의사결정, 문제해결 등&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2.3. 생각정리 도구 활용&lt;/p&gt;&lt;p&gt;- 마인드맵: 중심토픽을 기준으로 생각을 정리&lt;/p&gt;&lt;p&gt;- 브레인스토밍:&amp;nbsp;아이디어 발상&lt;/p&gt;&lt;p&gt;- 만다라트:&amp;nbsp;목표, 의사결정&lt;/p&gt;&lt;p&gt;- 로직트리: 문제해결, 논리적 생각&lt;/p&gt;&lt;p&gt;- 퀘스천맵:&amp;nbsp;생각확장&lt;/p&gt;&lt;p&gt;- 아날로그와 디지털 도구 함께 활용&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2.4. 생각정리 원리&lt;/p&gt;&lt;p&gt;- 나열, 분류, 배열:&lt;/p&gt;&lt;p&gt;&amp;nbsp; 1) 생각을 모두 꺼내어 적어보기&lt;/p&gt;&lt;p&gt;&amp;nbsp; 2) 시간/장소/과업/우선순위 등의 종류에 따라 분류&lt;/p&gt;&lt;p&gt;&amp;nbsp; 3) 해야 할 일의 중요도에 따라&amp;nbsp;간단한 숫자 붙이고 배열&lt;/p&gt;&lt;p&gt;- 질문으로 생각을 정리: 육하원칙&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;제3장 복잡한 생각을 스마트하게 정리하는 방법&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3.2. 만다라트&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 중심토픽: 핵심아이디어&lt;/p&gt;&lt;p&gt;- 주요토픽: 중심토픽을 세분화한 아이디어 8가지&lt;/p&gt;&lt;p&gt;- 하위토픽: 각각의 주요토픽에 대한 실천방안/세부 아이디어&lt;/p&gt;&lt;p&gt;- 우선순위: 무엇부터 실행에 옮길지 결정&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://tong.joins.com/wp-content/uploads/sites/3/2016/02/mandalat_otani.jpg&quot; alt=&quot;ë§ë¤ë¼í¸ì ëí ì´ë¯¸ì§ ê²ìê²°ê³¼&quot;&gt;&amp;lt;출처: http://tong.joins.com/archives/15633&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3.3. 마인드맵&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 웹기반 서비스: OKmind, 마인도모, 마인드마이스터, Mind Manager, Mind 42&lt;/p&gt;&lt;p&gt;- PC소프트웨어: 알마인드, XMind, MindMapper, FreeMind, 컨셉맵, 컨셉리더&lt;/p&gt;&lt;p&gt;- 모바일: iThoughtsHD, I Mind Map, MindNode, Tingking Space, Mind Map Memo, 씽크와이즈&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://uartis.files.wordpress.com/2015/04/ed8c8cec9db4ec8daceba788eba7b5_150427.png&quot; alt=&quot;ë§ì¸ëë§µì ëí ì´ë¯¸ì§ ê²ìê²°ê³¼&quot;&gt;&amp;lt;출처: https://uartis.wordpress.com/2015/04/27/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B0%B0%EC%9A%B0%EA%B8%B0-%EB%A7%88%EC%9D%B8%EB%93%9C%EB%A7%B5%EC%9C%BC%EB%A1%9C-%EC%A0%95%EB%A6%AC%ED%95%98%EB%A9%B0-%EB%B0%B0%EC%9B%81%EB%8B%88%EB%8B%A4/&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3.4. 3의 로직트리&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 3의 법칙: 많지도 적지도 않은 이상적 느낌 / 3번의 임팩트 느낌 / 기억하기 좋은 느낌&lt;/p&gt;&lt;p&gt;- 차례로 생각해보기&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;1) 문제 구성요소 파악: What Tree(무엇이 문제인가)&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;2) 문제에 대한 원인 파악: Why Tree(왜 문제가 되었나)&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;3) 해결책 찾기: How Tree(어떻게 극복할 것인가)&lt;/p&gt;&lt;p&gt;- 자기소개 상황: 강점 3가지 - 간단명료하게 설명&amp;nbsp;- 숫자를 붙이기&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://t1.daumcdn.net/thumb/R1280x0/?fname=http://t1.daumcdn.net/brunch/service/user/OUS/image/0tPrl_pXk0BPcIUxPfKD9PRn2P0.jpg&quot; alt=&quot;ë¡ì§í¸ë¦¬ì ëí ì´ë¯¸ì§ ê²ìê²°ê³¼&quot;&gt;&amp;lt;출처: https://brunch.co.kr/@thinkingschool/8&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;제4장 단순한 생각을 아이디어로 기획하는 방법&lt;/b&gt;&lt;/p&gt;&lt;p&gt;4.1.2. 문서의 4대 천왕&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 기획서: 무엇을 할 것인가? - 건축설계도&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 계획서: 어떻게 할 것인가? - 건축일정표&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 제안서: 무엇을 제안하는가? - 모델하우스&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 보고서: 현재 진척상황은? - 현황판&lt;/p&gt;&lt;p&gt;- 현재의 필요성과&amp;nbsp;미래의 잠재성을 파악하는것이 시작&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4.2. 기획의 핵심은 문제해결&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 문제를 정확히 파악-&amp;gt; 기획의 방향성&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 다각도 현황 분석&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 목표설정, 해결방법 구체화&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 세부계획: 언제, 어디서, 누가, 어떻게&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 실행, 기획의 목표 완수, 피드백(성공요인, 장애요인)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4.3. 브레인스토밍&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 1)&amp;nbsp;자유로운 분위기&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 2)&amp;nbsp;질보다 양&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 3) 비판 금지&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 4) 결합과 개선으로 새로운 아이디어&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 진행자, 기록할 사람, 아이디어 제공자&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 주제 -&amp;gt; 개별 아이디어 목표치 -&amp;gt; 개별발상 -&amp;gt; 집단토론 -&amp;gt; 평가&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4.4. 브레인라이팅(=침묵의 브레인스토밍)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 주제 -&amp;gt; 양식지에 의견작성 및 전달 -&amp;gt;&amp;nbsp;평가&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4.6. 한 페이지 기획서 작성법&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 제목&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 핵심 내용: 무엇을 말하고 싶은가&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 기획배경&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 목적: 무엇을 얻기를 바라는가&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 목표: 얻고자 하는 것&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 비용: 예산은 얼마?&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 기대효과: 효과와 이익의 관계&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 실행계획: 구체적으로 어떻게 실행?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;제5장 오랫동안 기억에 남는 독서정리스킬&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 독서를 할때 전두엽이 가장 활성화 -&amp;gt; 사고력 향상&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;5.2. 독서 전 독서:&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&quot;궁금함의 크기만큼 기억할 수 있다.&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 표지: 제목이나 카피문장으로 책에대한 큰 그림&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 저자: 저자의 사상, 경험, 지혜, 지식이 담겨있어서 확인&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 머리말:&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;책을 쓴 배경, 주제, 저자의 주장 등&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;5.3. 독서 중 독서&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 목차: 목차의 내용을 스토리로 만들어 기억 -&amp;gt; 전체를 생각&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 내용: 목차의 항목이 왜 이렇게 만들어졌는지 생각하면서 핵심을 추리/검색/마인드맵 정리&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 여백: 시간과 함께 생각을 정리, 발견/깨달음/다짐/느낌/아이디어/이해 여부/반성/공감/비판 등 -&amp;gt; 책을 읽으며 생각하는 상태가 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;5.4. 독서 후 독서&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 한페이지 독서정리&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 독서모임 참석&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 독서리스트 작성: 자신감, 100권 정도면 새로운 세상이 보인다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;제6장 생각정리를 잘하면 스피치는 덤이다!&lt;/b&gt;&lt;/p&gt;&lt;p&gt;6.4. 생각정리스피치 5단계&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 1) 대상과 목적: 누구에게 왜 말하는지&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; - 청중이 필요한 메시지 전달&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 2) 주제선정: 한마디로 무엇을 말하고 싶은지&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 3) 질문 나열: 줄거리를 정리&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 4) 목차 설계: 서론, 본론, 결론에 맞추기&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 5) 내용 작성: 다양한 사례&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; - 현장에 존재: 직접 본 사실&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 개인이 보유하는 것: 자신의 경험과 생각/상상 등&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;제7장 인생을 바꾸는 생각정리의 힘&lt;/b&gt;&lt;/p&gt;&lt;p&gt;7.2. 일기쓰기&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 잘 못써도 됌&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 일기를 쓰는 시간과 장소 기입&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 부정적 보다 긍정적 표현&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 과거의 추억 기록&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 미래 설계 기록&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 매일 실천할 삶의 목표 기록&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 신언서판: 몸, 말씨, 글씨, 판단&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 지속적으로 많이 쓰는 단어 분석&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;7.3. 인생그래프&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 행복지수/불행지수 그래프 -&amp;gt; 높은지점/낮은지점에 있는 키워드들의 공통점 찾아 인생의 생각 확인&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;7.4. 버킷리스트&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 자신이 좋아하는 것을 발견&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 꿈을 꾸고 이루는 능력&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - 도전하고 이루면서 삶의 만족도 높아짐&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[인상 깊은 구절]&lt;/b&gt;&lt;/p&gt;&lt;p&gt;궁금함의 크기만큼 기억할 수 있다.(P.153)&lt;/p&gt;&lt;p&gt;좋은 책을 읽는다는 것은 좋은 스승을 만나는 것과 같다. (P.176)&lt;/p&gt;&lt;p&gt;부정적인 상황을 기록했다면 그 다음 긍정적인 내용을 바로 기록하는 것이다. (P.227)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[책을 읽고 난 후의 생각이나 느낌]&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;모든일에서&amp;nbsp;목표가 있다면 그 목표를 실천할 방법을 생각하고 구체화하는 것은 누구나 생각하고 있다.&lt;/p&gt;&lt;p&gt;하지만 목표를 향해 복잡한 생각이 들때 그것을 어떻게 해쳐나가야 하는지, 어떻게 구체화 하는지&lt;/p&gt;&lt;p&gt;막연한 생각에 사로잡혀 있는 상황에서 그 해결방법을 찾을 수 있었다.&lt;/p&gt;&lt;p&gt;- 그 복잡한 생각을 생각나는대로&amp;nbsp;쏟아내어 적고&lt;/p&gt;&lt;p&gt;- 그 생각을 다양한 카테고리를 추가하며 마인드맵으로 정리한다.&lt;/p&gt;&lt;p&gt;그 중에서도 가장 시작은 &lt;u&gt;복잡한 생각을 우선 마구&amp;nbsp;적어보는 것&lt;/u&gt;이다.&lt;/p&gt;&lt;p&gt;그동안 난 시작이 두려웠던 것인지, 방법에 소극적이였던 것인지 혹은 둘다였는지 여전히 부끄럽다.&lt;/p&gt;&lt;p&gt;하지만 이젠 방법을 알았으니 그 시작을 두려워 하지 말자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 양식은 생각정리스킬의 독서정리양식을 사용하였다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Fundamentals/Book</category>
      <author>Duk_</author>
      <guid isPermaLink="true">https://dukwon.tistory.com/72</guid>
      <comments>https://dukwon.tistory.com/72#entry72comment</comments>
      <pubDate>Sun, 2 Sep 2018 23:24:00 +0900</pubDate>
    </item>
    <item>
      <title>Android 앱 소스 난독화/암호화(Obfuscation) 종류</title>
      <link>https://dukwon.tistory.com/71</link>
      <description>&lt;p&gt;&lt;b&gt;#&amp;nbsp;Android 앱 소스&amp;nbsp;난독화/암호화(Obfuscation)&amp;nbsp;종류&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&quot;Proguard면 충분하지!&quot; 하고 살았던 그동안의 시간을 반성한다.&lt;/p&gt;&lt;p&gt;난독화의 종류는 다양하며 Proguard는 그 중 극히 일부분만 혹은 거의 보호를 못한다고 봐야&amp;nbsp;된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;# 소스 난독화/암호화 종류&lt;/b&gt;&lt;/p&gt;&lt;p&gt;1.&amp;nbsp;&lt;b&gt;Renaming&lt;/b&gt;: 식별자 전환. 클래스/메소드의 이름을 a, b, c... 등 의미없는 이름으로 대체&lt;/p&gt;&lt;p&gt;2. &lt;b&gt;Control Flow&lt;/b&gt;: 제어흐름 변환. A-&amp;gt;B 와 같던&amp;nbsp;실행순서를 A-&amp;gt;C-&amp;gt;B 처럼 C구문을&amp;nbsp;삽입하는 기법&lt;/p&gt;&lt;p&gt;3. &lt;b&gt;String Encryption&lt;/b&gt;: 문자열 암호화. 문자열을 암호화된 문자열로 대체하고 사용시 이를 치환&lt;/p&gt;&lt;p&gt;4. &lt;b&gt;API Hiding&lt;/b&gt;: API 은닉. 특정 라이브러리 또는 메소드 호출을 Reflection으로 대체하여 숨긴다.&lt;/p&gt;&lt;p&gt;5. &lt;b&gt;Class Encryption&lt;/b&gt;: 파일내용 전체를 암호화하여 저장해 두었다가&amp;nbsp;동적으로 복호화, 클래스 로더로 로딩&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;# 안드로이드&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;6. &lt;b&gt;DEX&amp;nbsp;Encryption&lt;/b&gt;: Dalvik Executable 파일 자체를 암호화 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;난독화를 직접 할 수도 있다지만&lt;/p&gt;&lt;p&gt;아래와 같이 Proguard는 식별자 변환만 하고 나머지 툴은 모두 유료다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;864&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 162px; height: 24px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 181px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&amp;nbsp;Proguard(무료)&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 185px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;DashOPro(유료)&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 175px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot; colspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Allatori(유료)&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 163px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&amp;nbsp;DexGuard(유료)&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 162px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&amp;nbsp;Renaming&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 181px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 185px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 175px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 163px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 162px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&amp;nbsp;Control Flow&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 181px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 185px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 175px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 163px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 162px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&amp;nbsp;String Encryption&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 181px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 185px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 175px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 163px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 162px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&amp;nbsp;API hiding&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 181px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 185px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 175px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 163px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 162px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&amp;nbsp;Class Encryption&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 181px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 185px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 175px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 163px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;O&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 162px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&amp;nbsp;DEX Entryption&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 181px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 185px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 175px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 163px; height: 33px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;X&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/p&gt;&lt;p&gt;-&amp;nbsp;Kim Jiyun, Go Namhyeon, Park Yongsu, A Code Concealment Method using Java Reflection and Dynamic Loading in Android, Journal of the Korea Institute of Information Security and Cryptology, Volume 25, Issue 1,&amp;nbsp; 2015, pp.17-30&lt;/p&gt;</description>
      <category>Operating Systems/Android</category>
      <author>Duk_</author>
      <guid isPermaLink="true">https://dukwon.tistory.com/71</guid>
      <comments>https://dukwon.tistory.com/71#entry71comment</comments>
      <pubDate>Thu, 30 Aug 2018 10:55:10 +0900</pubDate>
    </item>
  </channel>
</rss>