tag:blogger.com,1999:blog-60319572024-03-13T13:07:12.421+09:00마음의 산책하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.comBlogger33125tag:blogger.com,1999:blog-6031957.post-66461038998639473922024-02-17T16:32:00.005+09:002024-02-17T16:32:58.330+09:00모델 Y RWD 가격 인하 5499만원 => 5299만원<p><span style="font-family: inherit;">테슬라 모델 Y는 전기차 시장에서 주목할 만한 변화를 겪고 있습니다. 최근 모델 Y RWD (Rear-Wheel Drive)의 가격이 5,699만원에서 5,499만원으로 인하되었습니다. 이번 가격 인하는 2024년도 전기차 보조금 정책에 발맞춰 이루어진 것으로, 보조금의 기준 가격인 5,500만원에 맞추기 위한 조치로 해석됩니다. 전기차 보조금의 경우, LFP(리튬인산철) 배터리를 사용하는 전기차에 대한 차별로 인해 보조금이 줄어든 상황입니다. 하지만, 가격 인하에도 불구하고, 테슬라 모델 Y는 여전히 시장에서 충분한 경쟁력을 지니고 있다는 평가를 받고 있습니다.</span></p><p><span style="font-family: inherit;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: inherit;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgsBUodvczOhn4Z39DWNFCnXYxw3bq0jsO_Ix1Z4qIJO3IrpxQQkTqQP77G6cMhpwaRWoQUCBqCpGPBuEIBpjMGgtLI607dI1v1Su2UfeV9JE5Nv5lLYXrd8JzCz1aN129Hovc5krqDmMxMsoNA78PpHyafZdp-IiEt11YCAhTtafyrP0vgv_8xGA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1306" data-original-width="692" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEgsBUodvczOhn4Z39DWNFCnXYxw3bq0jsO_Ix1Z4qIJO3IrpxQQkTqQP77G6cMhpwaRWoQUCBqCpGPBuEIBpjMGgtLI607dI1v1Su2UfeV9JE5Nv5lLYXrd8JzCz1aN129Hovc5krqDmMxMsoNA78PpHyafZdp-IiEt11YCAhTtafyrP0vgv_8xGA" width="127" /></a></span></div><span style="font-family: inherit;"><br /><br /></span><p></p><p><span style="font-family: inherit;">2023년 테슬라 모델 Y는 전 세계 전기차 판매량에서 1위를 차지하며 그 인기를 입증했습니다. 이는 테슬라의 기술력과 모델 Y의 다양한 매력적인 특성 덕분입니다. 또한, 모델 Y는 안전 등급에서도 최고 수준을 기록하며, 사용자들에게 높은 신뢰도를 제공합니다.</span></p><p><span style="font-family: inherit;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: inherit;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><span style="font-family: inherit;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjD9_Hjt4Q_SDIrZKbbmZbZx4Hv2FjJVjpQj5LUpGV8VswRWdDtxwesm-8hBlK4YtiBcQhGl0VJL6Dm4YqeE8O4nyoq2SwJP0NstegAe15PsYRqPyH5HG-I_Y-96-tEpZ2SRXEosFdq6Wev-OS-DAIvDochweA22SUkIYygULvfUEVfnnhGCE3I1Q" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="688" data-original-width="1572" height="140" src="https://blogger.googleusercontent.com/img/a/AVvXsEjD9_Hjt4Q_SDIrZKbbmZbZx4Hv2FjJVjpQj5LUpGV8VswRWdDtxwesm-8hBlK4YtiBcQhGl0VJL6Dm4YqeE8O4nyoq2SwJP0NstegAe15PsYRqPyH5HG-I_Y-96-tEpZ2SRXEosFdq6Wev-OS-DAIvDochweA22SUkIYygULvfUEVfnnhGCE3I1Q" width="320" /></a></span></div><span style="font-family: inherit;"><br /><div style="text-align: center;"><a href="https://www.automotiveworld.com/news-releases/jato-dynamics-tesla-model-y-to-be-crowned-worlds-best-selling-vehicle-of-2023/" rel="nofollow" style="font-family: inherit;" target="_blank">출처</a></div><br /></span><p></p><p><span style="font-family: inherit;">이러한 가격 인하와 함께, 테슬라는 전기차 구매를 고려하는 소비자들에게 더욱 매력적인 선택지가 될 것으로 보입니다. 가격 인하가 보조금 정책과 맞물려 전기차의 접근성을 높이고, 전기차 시장의 확장에 기여할 것으로 기대됩니다. 테슬라 모델 Y의 판매 전략과 안전성은 전기차를 선택하는 주요 고려 사항 중 하나로, 테슬라의 지속적인 성장을 예상케 합니다.</span></p><p><span style="font-family: inherit;"><br /></span></p><p><span style="font-family: inherit;">전기차 시장은 점점 더 경쟁이 치열해지고 있으며, 테슬라는 이번 가격 인하를 통해 시장 점유율을 확대하고 지속 가능한 성장을 도모하려는 전략을 취하고 있습니다. 테슬라 모델 Y의 가격 인하와 관련된 더 자세한 정보는 테슬라 공식 웹사이트 및 관련 뉴스 기사에서 확인할 수 있습니다. </span></p>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-55475094836126675482024-02-01T16:19:00.001+09:002024-02-01T16:19:23.889+09:00테슬라 하이랜드 출시 알림 받기<h4 style="text-align: left;"> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9E8TWvBiXoqejatpNU67Ur5rlkqXyz1clXdyo4ZsbNNFcg-nO3sHITy5V90Zhh_zMh7iqBt6pQ4gz1mMSg7OxDZcUIs90UAih7GR0YsjrjHkbd1RaPZnnYZDWTtdXgVxwo0HYLfAWMe1Dwv_7FU1YthwnTT4GH9uHS8hSeRz4_8micM306nuxew/s595/IMG_8077%20%E1%84%89%E1%85%A1%E1%84%87%E1%85%A9%E1%86%AB.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="577" data-original-width="595" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9E8TWvBiXoqejatpNU67Ur5rlkqXyz1clXdyo4ZsbNNFcg-nO3sHITy5V90Zhh_zMh7iqBt6pQ4gz1mMSg7OxDZcUIs90UAih7GR0YsjrjHkbd1RaPZnnYZDWTtdXgVxwo0HYLfAWMe1Dwv_7FU1YthwnTT4GH9uHS8hSeRz4_8micM306nuxew/s320/IMG_8077%20%E1%84%89%E1%85%A1%E1%84%87%E1%85%A9%E1%86%AB.jpeg" width="320" /></a></div><br /></h4><div style="text-align: left;">최근 테슬라 Y RWD 모델에 대한 열풍이 불어닥쳤습니다. 무려 2만 명이 넘는 예약자들이 이 모델을 기다리고 있는데요, 빠르게 예약을 진행한 고객들이 차량을 먼저 받을 수 있는 것은 당연한 일입니다.<br /><br /></div><div style="text-align: left;">중국에서 생산된 테슬라 Y RWD 모델의 공식 출시일은 2023년 7월 14일, 오전 8시 12분이었습니다. 하지만 놀랍게도 가장 먼저 예약을 완료한 고객들은 출시 1분 만인 8시 13분에 예약을 마쳤습니다. 이처럼 빠른 예약이 가능했던 이유는 바로 '테슬라 가격 알림' 텔레그램 채널을 통한 실시간 정보 제공 덕분이었습니다.<br /><br /></div><div style="text-align: left;">이 채널은 최신 테슬라 모델 출시 정보, 가격 변동, 예약 개시 시간 등을 신속하게 알려줍니다. 하이랜드가 출시될때도 이채널을 통해 가장 빠르게 테슬라를 예약할 수 있습니다.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">이제 다음으로는 텔레그램 가입 방법과 이 채널에 가입하는 방법을 안내해드리겠습니다.</div><h4 style="text-align: left;">텔레그램 가입 방법</h4><p>1. **앱 다운로드**: 스마트폰에서 Google Play Store나 Apple App Store를 열고 'Telegram'을 검색하여 앱을 다운로드합니다.</p><p>2. **앱 실행 및 가입 시작**: 앱을 실행한 후 'Start Messaging' 버튼을 클릭합니다.</p><p>3. **전화번호 입력**: 국가를 선택하고 본인의 전화번호를 입력합니다. </p><p>4. **인증 코드 확인**: 전화번호를 입력하면 텔레그램으로부터 SMS 또는 전화를 통해 인증 코드를 받게 됩니다. 이 코드를 앱에 입력합니다.</p><p>5. **정보 설정**: 인증이 완료되면 사용자 이름과 프로필 사진을 설정할 수 있습니다. 이 단계는 나중에도 변경할 수 있습니다.</p><p>6. **가입 완료**: 위 단계를 모두 마치면 텔레그램 계정이 생성되며, 이제 텔레그램을 사용할 수 있습니다.</p><p>보안을 위해 본인의 전화번호를 정확히 입력하고, 인증 코드를 다른 사람과 공유하지 않도록 주의하세요.</p><p><br /></p><h4 style="text-align: left;">텔레그램에서 테슬라 가격 알림 채널 가입하는 방법</h4><p>1. **텔레그램 앱 실행**: 스마트폰 또는 컴퓨터에서 텔레그램 앱을 엽니다.</p><p><br /></p><p>2. **링크 접속**: "https://t.me/kr_tesla_price" 링크를 클릭하거나, 웹 브라우저에서 직접 입력합니다. </p><p><br /></p><p>3. **텔레그램 앱으로 리디렉션**: 링크를 클릭하면 자동으로 텔레그램 앱으로 리디렉션됩니다. 스마트폰에서 링크를 사용하는 경우, 브라우저가 텔레그램 앱을 열도록 요청할 수 있습니다.</p><p><br /></p><p>4. **채널 가입**: 텔레그램 앱에서 해당 채널의 페이지가 열리면, 'Join' 또는 '가입하기' 버튼을 클릭합니다.</p><p><br /></p><p>5. **가입 완료**: 버튼을 클릭하면 해당 채널에 가입되며, 이제 채널의 메시지를 볼 수 있습니다.</p><p>텔레그램 채널에 가입한 후에는 채널에서 보내는 메시지를 받아볼 수 있고, 설정에 따라 알림을 받을 수도 있습니다.</p><p>빠른 출고 기원합니다!</p><p><br /></p>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-17084955172495060932024-01-31T17:17:00.003+09:002024-01-31T17:17:35.052+09:00테슬라 계약후 가격이 인상 되면?<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIOH6LDEWpydpXMwG5pftC2WgeLxPj4Ctr-DkBPYEBx15VuW2YAHgKlZoEmKRwbsnMelX8ui-QxZlxUmC_QyJad_qg-1resQMfGejpEMgjoItQUHYCDZR2N9ZmXA4lict5IAyf8XInbd5M6MyyXvRvS2YVUxP9bnLhzhgVfj_phxRaSnfjqNeCkA/s3532/Screenshot%202024-01-31%20at%205.16.35%E2%80%AFPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2630" data-original-width="3532" height="297" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIOH6LDEWpydpXMwG5pftC2WgeLxPj4Ctr-DkBPYEBx15VuW2YAHgKlZoEmKRwbsnMelX8ui-QxZlxUmC_QyJad_qg-1resQMfGejpEMgjoItQUHYCDZR2N9ZmXA4lict5IAyf8XInbd5M6MyyXvRvS2YVUxP9bnLhzhgVfj_phxRaSnfjqNeCkA/w400-h297/Screenshot%202024-01-31%20at%205.16.35%E2%80%AFPM.png" width="400" /></a></div><br /><span style="font-family: Noto Sans KR;"><br /></span><p></p><p><span style="font-family: Noto Sans KR;">테슬라 차량을 계약하고 난 후, 만약 차량 가격이 인상되더라도 걱정할 필요가 없습니다. 왜냐하면 테슬라는 고객이 계약 당시의 가격으로 차량을 구매할 수 있도록 보장해주기 때문입니다. 반대로 가격이 인하되는 경우에도 고객은 인하된 가격으로 차량을 구매할 수 있는 혜택을 누릴 수 있습니다. 이는 테슬라가 시장의 변동성에 따른 불확실성을 최소화하고 고객 만족을 최우선으로 여기는 정책의 일환입니다. 가격 인상이든 인하든, 테슬라는 고객이 최선의 조건으로 차량을 구매할 수 있도록 지원합니다. 이러한 고객 중심의 정책은 테슬라를 신뢰하고 선택하는 중요한 이유가 되며, 차량 구매 계획이 있는 이들에게 큰 안심과 혜택을 제공합니다.</span></p><h4 style="text-align: left;"><span style="font-family: Noto Sans KR; font-size: medium;">가격인하시 디자인 변경방법</span></h4><p><span style="font-family: Noto Sans KR;"><a href="https://www.tesla.com/ko_kr/teslaaccount" rel="nofollow" target="_blank">Tesla 계정</a>에 로그인합니다. 모델 옆의 '관리하기' 및 '디자인 편집하기'를 선택합니다. '업데이트' 버튼을 클릭할 시 주문 당시 차량 및 옵션 가격과 현재 금액이 다를 경우 변동 사항이 없어도 가격이 즉시 변경될 수 있습니다. 디자인 변경은 인도 일정 및 보험에도 영향을 미칠 수 있으니 신중하게 결정해 주시기 바랍니다. 계정 페이지에 '디자인 편집하기' 버튼이 보이지 않을 경우 <a href="https://www.tesla.com/ko_kr/contactus" rel="nofollow" target="_blank">문의하기</a>를 확인하세요.</span></p>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-12048947878617986802015-05-15T10:03:00.005+09:002024-02-23T14:26:26.484+09:00맥에서 이상한 한글 폰트가 보일때<span style="font-family: Noto Sans KR;">가끔 웹 브라우징중에 이상한 한글 폰트가 보여질때가 있다.<br />
<br />
</span><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh01jxc8mZEMHmiwqpoSJZShdP3qb0zdXyCFAtooPS8ZGW24x3Bbhv6DY392V_moXK1La9N54YV6xFglkIjdvb_udg0DU_IsYUzrumbR3rps2L8rHrVU-zH97j0cDVyETvnWYmjXw/s1600/_%E1%84%85%E1%85%A9%E1%84%92%E1%85%B5%E1%86%BC%E1%84%8B%E1%85%A3_%E1%84%82%E1%85%A1%E1%86%AB%E1%84%86%E1%85%B5%E1%86%AB_%E1%84%89%E1%85%AE%E1%84%8E%E1%85%A5%E1%86%AB%E1%84%86%E1%85%A7%E1%86%BC__%E1%84%8B%E1%85%A7%E1%84%8C%E1%85%A5%E1%86%AB%E1%84%92%E1%85%B5_%E1%84%87%E1%85%A2%E1%84%8B%E1%85%A6_%E1%84%80%E1%85%A1%E1%86%AE%E1%84%92%E1%85%A7%E1%84%8B%E1%85%B5%E1%86%BB%E1%84%8B%E1%85%A5_.png" style="margin-left: auto; margin-right: auto;"><span style="font-family: Noto Sans KR;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh01jxc8mZEMHmiwqpoSJZShdP3qb0zdXyCFAtooPS8ZGW24x3Bbhv6DY392V_moXK1La9N54YV6xFglkIjdvb_udg0DU_IsYUzrumbR3rps2L8rHrVU-zH97j0cDVyETvnWYmjXw/s320/_%E1%84%85%E1%85%A9%E1%84%92%E1%85%B5%E1%86%BC%E1%84%8B%E1%85%A3_%E1%84%82%E1%85%A1%E1%86%AB%E1%84%86%E1%85%B5%E1%86%AB_%E1%84%89%E1%85%AE%E1%84%8E%E1%85%A5%E1%86%AB%E1%84%86%E1%85%A7%E1%86%BC__%E1%84%8B%E1%85%A7%E1%84%8C%E1%85%A5%E1%86%AB%E1%84%92%E1%85%B5_%E1%84%87%E1%85%A2%E1%84%8B%E1%85%A6_%E1%84%80%E1%85%A1%E1%86%AE%E1%84%92%E1%85%A7%E1%84%8B%E1%85%B5%E1%86%BB%E1%84%8B%E1%85%A5_.png" width="320" /></span></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: Noto Sans KR;">요상한 한글 폰트의 정체는?</span></td></tr>
</tbody></table><span style="font-family: Noto Sans KR;">
크롬 Developer Tools 에서 살펴보니 font-family 값이 Dotum,Arial,Helvetica,"Arial Unicode MS",sans-serif 로 되어 있다. 앞에서부터 하나씩 없애보자. "Arial Unicode MS"를 지우니 예쁜(?) 기본 폰트로 보여진다.<br />
</span><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqT-dO1tUTxkrH4rKV_pCMdtk9N01jgqsDDuga5ImhgjUAF9v0bsQB_zQxcn0uKz1OpjiNUyt2CTOOl79ioHOzxNzVzqcKIJPJisEZXZff2X8GOf4dwPXfdUmkkLYtN1YUScBKmQ/s1600/_%E1%84%85%E1%85%A9%E1%84%92%E1%85%B5%E1%86%BC%E1%84%8B%E1%85%A3_%E1%84%82%E1%85%A1%E1%86%AB%E1%84%86%E1%85%B5%E1%86%AB_%E1%84%89%E1%85%AE%E1%84%8E%E1%85%A5%E1%86%AB%E1%84%86%E1%85%A7%E1%86%BC__%E1%84%8B%E1%85%A7%E1%84%8C%E1%85%A5%E1%86%AB%E1%84%92%E1%85%B5_%E1%84%87%E1%85%A2%E1%84%8B%E1%85%A6_%E1%84%80%E1%85%A1%E1%86%AE%E1%84%92%E1%85%A7%E1%84%8B%E1%85%B5%E1%86%BB%E1%84%8B%E1%85%A5__1.png" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Noto Sans KR;"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqT-dO1tUTxkrH4rKV_pCMdtk9N01jgqsDDuga5ImhgjUAF9v0bsQB_zQxcn0uKz1OpjiNUyt2CTOOl79ioHOzxNzVzqcKIJPJisEZXZff2X8GOf4dwPXfdUmkkLYtN1YUScBKmQ/s320/_%E1%84%85%E1%85%A9%E1%84%92%E1%85%B5%E1%86%BC%E1%84%8B%E1%85%A3_%E1%84%82%E1%85%A1%E1%86%AB%E1%84%86%E1%85%B5%E1%86%AB_%E1%84%89%E1%85%AE%E1%84%8E%E1%85%A5%E1%86%AB%E1%84%86%E1%85%A7%E1%86%BC__%E1%84%8B%E1%85%A7%E1%84%8C%E1%85%A5%E1%86%AB%E1%84%92%E1%85%B5_%E1%84%87%E1%85%A2%E1%84%8B%E1%85%A6_%E1%84%80%E1%85%A1%E1%86%AE%E1%84%92%E1%85%A7%E1%84%8B%E1%85%B5%E1%86%BB%E1%84%8B%E1%85%A5__1.png" width="320" /></span></a></div>
<span style="font-family: Noto Sans KR;"><br />
하지만 이런 글짜를 만날때마다 이렇게 조작 할 수 없으니 폰트를 아얘 비 활성화 해보자. Font Book을 실행시켜서 "Arial Unicode MS" 폰트 찾고 상단의 체크 버튼으로 비활성화 시켜준다.<br />
<br />
</span><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVGJTwyLY2OCNA0v5uOFxDw6YogPXt1U3cOiSuRxH98F8qDeDoqk2lpeTAq_wVNukfMPq-5e3q9DKSuako9LcUtIUpV1FBnaFRZ5EPXJC1l1B5uRX-FOIH42bcz-G6Fal9M6Mqog/s1600/Computer__216_Fonts_.png" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Noto Sans KR;"><img border="0" height="146" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVGJTwyLY2OCNA0v5uOFxDw6YogPXt1U3cOiSuRxH98F8qDeDoqk2lpeTAq_wVNukfMPq-5e3q9DKSuako9LcUtIUpV1FBnaFRZ5EPXJC1l1B5uRX-FOIH42bcz-G6Fal9M6Mqog/s320/Computer__216_Fonts_.png" width="320" /></span></a></div>
<span style="font-family: Noto Sans KR;"><span><a href="http://en.wikipedia.org/wiki/Arial_Unicode_MS" target="_blank">"Arial Unicode MS"</a> 는 원래 MS에서 만든 폰트인데 Mac 10.5 부터 기본 탑재 되어 있다. Office 문서 호환때문에 라이센싱 받아 넣은 것 같다. 하지만 한글 폰트가 구리므로 Out!<br /></span>
<br /></span><div><span style="font-family: Noto Sans KR;"><br /></span></div><h4 style="text-align: left;"><span style="font-family: Noto Sans KR;">2024년 2월 23일 업데이트</span></h4><div><span style="font-family: Noto Sans KR;">아직도 Arial Unicode MS 폰트때문에 고생하고 있을지는 몰랐습니다. 맥 OS가 업데이트 되면서 Arial Unicode MS 폰트가 시스템 기본 폰트로 설치되었고, 시스템 기본 폰트는 비활성화 할 수 없게되면서 이 문제가 다시 생겨났습니다. </span></div><div><span style="font-family: Noto Sans KR;"><br /></span></div><div><span style="font-family: Noto Sans KR;">저는 여전히 크롬을 쓰니 이번엔 특정 스타일을 강제로 모든 페이지에 적용시킬수 있는 Stylus 확장으로 해결해봅시다!</span></div><div><span style="font-family: Noto Sans KR;"><br /></span></div><div><span style="font-family: Noto Sans KR;">1. 확장 설치 <br /><a href="https://chromewebstore.google.com/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne" rel="nofollow" target="_blank">이곳</a> 에서 크롬 확장을 설치해줍니다.</span></div><div><span style="font-family: Noto Sans KR;"><br /></span></div><div><span style="font-family: Noto Sans KR;">2. 확장 아이콘을 눌러 스타일 추가 화면에 들어갑니다.</span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjKuOU_QhkqLJBie1CMmpJDij8KJN9dU9Da59cUCecLlUw5uKIGl6dabXDEwIvWrKGlFAHADrUMgr6kKikEeYtS1vKpk2K5OJ2s96R7wGGjy_HmSc4k2DCfEHKYHeegU51ylK6q-YRyRau1rNJdlPFuPWrNgIqLq09kWENZ4vclb5I1EA_Uc4py2Q" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Noto Sans KR;"><img alt="" data-original-height="78" data-original-width="200" height="36" src="https://blogger.googleusercontent.com/img/a/AVvXsEjKuOU_QhkqLJBie1CMmpJDij8KJN9dU9Da59cUCecLlUw5uKIGl6dabXDEwIvWrKGlFAHADrUMgr6kKikEeYtS1vKpk2K5OJ2s96R7wGGjy_HmSc4k2DCfEHKYHeegU51ylK6q-YRyRau1rNJdlPFuPWrNgIqLq09kWENZ4vclb5I1EA_Uc4py2Q=w92-h36" width="92" /></span></a></div><span style="font-family: Noto Sans KR;"><br />스타일 적용범위를 Everything 으로 선택하고 내용으로 아래를 복붙합니다.</span></div><div><br /></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;">@font-face {<br /> font-family: "Arial Unicode MS";<br /> src: local("AppleSDGothicNeo-Regular"),<br />}</blockquote><p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEilZybd7GNzA6eCrN7YSGNba5MzCaqMU4WkNJ-awx6KRHT88fez0GgX1wslyVIKfO6EXwz0ASjwkKkNK15v61VMJl7TT18-TIVtvocFe7QngJmay5ixY16_JsGhfmvCA0PS1lbeJuCxPnkyb8vVzw9Uq24MCE_m0Y8_78oRoetncWzs7MIv6tLZ8g" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Noto Sans KR;"><img alt="" data-original-height="286" data-original-width="920" height="99" src="https://blogger.googleusercontent.com/img/a/AVvXsEilZybd7GNzA6eCrN7YSGNba5MzCaqMU4WkNJ-awx6KRHT88fez0GgX1wslyVIKfO6EXwz0ASjwkKkNK15v61VMJl7TT18-TIVtvocFe7QngJmay5ixY16_JsGhfmvCA0PS1lbeJuCxPnkyb8vVzw9Uq24MCE_m0Y8_78oRoetncWzs7MIv6tLZ8g" width="320" /></span></a></div><span style="font-family: Noto Sans KR;"><br /><br /></span></div><span style="font-family: Noto Sans KR;">이젠 정말 끝!<br /> </span><p></p>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-24856401926125793882015-01-08T01:31:00.002+09:002015-01-08T01:31:35.231+09:00VIM + FISH 사용시 "e484: can't open file" 발생VIM에서 요상한 오류가 떴다.<br />
<blockquote class="tr_bq">
<div class="p1">
<span class="s1">E484: Can't open file /var/folders/wd/kj6dxg852k54q5tqmx8g46x00000gp/T</span></div>
</blockquote>
이런 식으로 $TMPDIR로 경로에 파일을 읽지 못한다는 에러가 나오면서 다양한 명령들(vim script들)이 제대로 동작하지 않았다.<br />
<br />
검색을 하다보니 FISH 쉘을 사용하는 경우에 이런 문제가 발생한다고 한다. FISH쉘을 사용한지가 몇달째인데 그동안 VIM을 잘 안쓰고 있어서 문제를 빨리 발견하지 못했다.<br />
<br />
~/.vimrc 에 vim에서 사용할 쉘을 명시해주면 해결된다.<br />
<blockquote class="tr_bq">
set shell=/bin/sh</blockquote>
하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-52996152624368409982013-12-04T17:53:00.002+09:002013-12-05T17:05:57.799+09:00Jenkins 에서 Genymotion 사용하기Genymotion은 VirtualBox를 사용하여 안드로이드 단말의 이미지를 구동시키는 방식으로 제공되는 안드로이드 Emulator의 대체품입니다. 이를 사용하면 실제 단말에서 테스트를 돌리는 속도보다 최대 10배정도는 빠르게 테스트를 진행할 수 있어 최근 개발자들에게 급속도로 퍼지고 있는 중입니다.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://cyrilmottier.com/media/2013/06/a-productive-android-development-environment/tests.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="128" src="http://cyrilmottier.com/media/2013/06/a-productive-android-development-environment/tests.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">http://cyrilmottier.com/2013/06/27/a-productive-android-development-environment/</td></tr>
</tbody></table>
<br />
보통 <a href="http://jenkins-ci.org/" style="font-size: medium; font-weight: normal;" target="_blank">Jenkins</a><span style="font-size: small; font-weight: normal;">에서 Android Emulator plugin를 사용하면 안드로이드 에뮬레이터를 이용해 테스트를 진행하게 됩니다. 이를 Genymotion으로 대체하여 테스트에 사용할 수 있습니다.</span><br />
<span style="font-size: small; font-weight: normal;"><br /></span>
<br />
<h3>
준비</h3>
<div>
이 글에서는 개발자가 Gradle를 사용하는 빌드를 구성하였다는 가정으로 설명합니다. Jenkins 에서 Gradle를 사용하기 위해서는 Jenkins Plugin 설정에서 <a href="https://wiki.jenkins-ci.org/display/JENKINS/Gradle+Plugin" target="_blank">Jenkins Gradle plugin</a> 을 미리 설치해주어야 합니다. 또한 Jenkins가 설치되어 있는 기기에 Genymotion이 설치 되어있는것으로 가정합니다. Genymotion을 설치하는 방법은 <a href="http://devbible.tistory.com/250" target="_blank">이곳</a> 을 참고하세요.<br />
<br /></div>
<h3>
Genymotion VM 생성</h3>
<div>
<div>
Genymotion UI를 통해 테스트에 사용할 VM을 생성합니다.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-3oAkirvFoZU/Up7e0sDZ9DI/AAAAAAAAmz0/8-aNcZw3uHQ/s1600/Virtual_device_creation_wizard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="231" src="http://1.bp.blogspot.com/-3oAkirvFoZU/Up7e0sDZ9DI/AAAAAAAAmz0/8-aNcZw3uHQ/s320/Virtual_device_creation_wizard.png" width="320" /></a></div>
<div>
<br /></div>
<div>
콘솔에서 다음과 같이 입력하여 생성된 VM의 정확한 명칭을 확인합니다.</div>
<blockquote class="tr_bq">
<div class="p1">
<span class="s1">$ </span>VBoxManage list vms</div>
<div class="p1">
"Galaxy S4 - 4.3 - API 18 - 1080x1920_1" {c9cfec96-e28c-4ff5-bbb0-2dbe7dad9090}</div>
</blockquote>
VM의 명칭이 <b>"Galaxy S4 - 4.3 - API 18 - 1080x1920_1"</b> 인것을 확인할 수 있습니다.<br />
이 VM을 구동시켜 테스트 가능한 기본 상태로 만들어둡니다.<br />
<br />
<ul>
<li>앱내 NDK가 arm용 so만을 포함하고 있다면 <a href="http://forum.xda-developers.com/showthread.php?t=2528952" target="_blank">여기에서</a> ARM Translation 를 설치해주세요.</li>
<li>기본 설정시 <a class="g-profile" href="http://plus.google.com/115556134544294206693" target="_blank">+Sewon Ann</a> 님이 작성하신 <a href="http://kingorihouse.tumblr.com/post/67355210627/genymotion-2-0-1" target="_blank">이</a><u>글</u> 을 참고하면 매우 유용합니다.</li>
</ul>
<br />
이후 이 상태의 snapshot을 저장합니다.<br />
<blockquote class="tr_bq">
<div class="p1">
$ VBoxManage snapshot "Galaxy S4 - 4.3 - API 18 - 1080x1920_1" take "factory"</div>
</blockquote>
이렇게 하면 언제든 저장된 상태로 돌아올 수 있어 동일한 테스트 환경을 유지시킬 수 있습니다.<br />
<h3>
</h3>
<h4>
<div style="font-weight: normal;">
</div>
</h4>
<h4>
Jenkins Job설정</h4>
<div>
일반적인 프로젝트의 Job을 추가하는 방식으로 새로운 Job을 추가합니다. 저의 경우 free-style software project를 선택했습니다. 기존에 설정된 Job이 있으면 그걸 사용하면 됩니다.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-O3CskJfgzno/Up7dGwy7uiI/AAAAAAAAmzo/_6OL9qnuK3A/s1600/New_Job__Jenkins_.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="163" src="http://4.bp.blogspot.com/-O3CskJfgzno/Up7dGwy7uiI/AAAAAAAAmzo/_6OL9qnuK3A/s320/New_Job__Jenkins_.png" width="320" /></a></div>
<br />
<h3>
</h3>
<h4>
VM띄우기 설정</h4>
</div>
<div>
Build항목에 Execute shell 항목을 추가 후에 아래 내용을 추가해서 빌드전에 VM이 초기화되고 구동되도록 설정합니다.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-lxIgiNb1Hsw/Up7gqysNPYI/AAAAAAAAm0A/ZiBoOcndELA/s1600/Tweets_develop_Config__Jenkins_.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="78" src="http://1.bp.blogspot.com/-lxIgiNb1Hsw/Up7gqysNPYI/AAAAAAAAm0A/ZiBoOcndELA/s320/Tweets_develop_Config__Jenkins_.png" width="320" /></a></div>
<div>
<br /></div>
<blockquote class="tr_bq">
<blockquote class="tr_bq">
<br />
<div class="p1">
ps | grep "Genymotion\.app/Contents/MacOS/player" | awk '{print $1}' | xargs kill</div>
</blockquote>
<blockquote class="tr_bq">
VBoxManage snapshot "Galaxy S4 - 4.3 - API 18 - 1080x1920_1" restore "factory"</blockquote>
<blockquote class="tr_bq">
/Applications/Genymotion.app/Contents/MacOS/player --vm-name "Galaxy S4 - 4.3 - API 18 - 1080x1920_1" &</blockquote>
<blockquote class="tr_bq">
<br />
<div class="p1">
"/Applications/Android Studio.app/sdk/platform-tools/adb" wait-for-device</div>
</blockquote>
<blockquote class="tr_bq">
echo "sdk.dir=/Applications/Android Studio.app/sdk" > local.properties</blockquote>
</blockquote>
각 항목에 대한 설명을 아래와 같습니다.<br />
<ul>
<li><div class="p1">
ps | grep "Genymotion\.app/Contents/MacOS/player" | awk '{print $1}' | xargs kill</div>
</li>
<ul>
<li>기존에 VM이 떠있는 경우 이를 종료시킵니다. </li>
</ul>
<li>VBoxManage snapshot "Galaxy S4 - 4.3 - API 18 - 1080x1920_1" restore "factory"</li>
<ul>
<li>기존에 저장되있던 snapshot으로 상태를 복원합니다.</li>
</ul>
<li>/Applications/Genymotion.app/Contents/MacOS/player --vm-name "Galaxy S4 - 4.3 - API 18 - 1080x1920_1" &</li>
<ul>
<li>VM을 띄웁니다. player의 경로는 사용자의 설정에 맞게 수정해야합니다.</li>
</ul>
<li>"/Applications/Android Studio.app/sdk/platform-tools/adb" wait-for-device</li>
<ul>
<li>adb명령을 사용해서 VM이 뜨기를 기다립니다. adb의 경로는 sdk경로에 맞게 수정 되어야 합니다.</li>
</ul>
<li>echo "sdk.dir=/Applications/Android Studio.app/sdk" > local.properties</li>
<ul>
<li>sdk 경로가 Jenkins마다 다를 수 있으므로 이를 local.properties 에 저장해줍니다.</li>
</ul>
</ul>
<h3>
</h3>
<h4>
빌드 및 테스트 설정</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-eG4j0BpB5so/Up7iItMjm6I/AAAAAAAAm0M/Yo-g67KK5zs/s1600/Tweets_develop_Config__Jenkins_.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="147" src="http://1.bp.blogspot.com/-eG4j0BpB5so/Up7iItMjm6I/AAAAAAAAm0M/Yo-g67KK5zs/s320/Tweets_develop_Config__Jenkins_.png" width="320" /></a></div>
<div>
이 글에서는 Gradle빌드를 사용하므로 Gradle 명령으로 빌드와 테스트를 수행합니다.</div>
<blockquote class="tr_bq">
clean build connectedCheck</blockquote>
<h3>
</h3>
<h4>
Report 설정 추가</h4>
<div>
connectedCheck의 결과는 build디렉토리내의 instrumentTest-results/connected/에 저장되므로 이를 junit repoter가 처리하도록 추가합니다.</div>
<blockquote class="tr_bq">
**/build/instrumentTest-results/connected/*.xml</blockquote>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-iBnQPfcaVq0/Up7tW7M9rYI/AAAAAAAAm00/y_InVYO4sTw/s1600/Tweets_develop_Config__Jenkins_.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="85" src="http://2.bp.blogspot.com/-iBnQPfcaVq0/Up7tW7M9rYI/AAAAAAAAm00/y_InVYO4sTw/s320/Tweets_develop_Config__Jenkins_.png" width="320" /></a></div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
<h4>
확인하기</h4>
<div>
빌드 후에 다음처럼 예쁘게 테스트 결과가 보이는것을 확인합니다.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-_FmwikQujCA/Up7niX9H58I/AAAAAAAAm0k/YMaFZDERi0g/s1600/Tweets_develop__Jenkins_.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="http://1.bp.blogspot.com/-_FmwikQujCA/Up7niX9H58I/AAAAAAAAm0k/YMaFZDERi0g/s320/Tweets_develop__Jenkins_.png" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
이제 열심히 테스트 코드를 추가하면 됩니다. -_-;<br />
<br />
요 글은 <a href="http://blog.genymobile.com/genymotion-jenkins-android-testing/">http://blog.genymobile.com/genymotion-jenkins-android-testing/</a> 을 기초로 작성되었습니다.</div>
<br />하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-62736322312199626082013-01-24T21:14:00.003+09:002013-01-24T21:14:33.656+09:00안드로이드 오픈소스 라이브러리 활용하기지난 2013년 1월 19일에 있었던 제2회 GDG Android Korea 안드로이드 미니 컨퍼런스 발표자료를 공유합니다.<br />
<br />
안드로이드 앱 개발시 유용하게 사용할 수 있는 오픈소스 라이브러리에 관하여 발표를 진행했습니다. :) <script async="" class="speakerdeck-embed" data-id="14ea91f0442e013085bd12313d2a444e" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script><br />
<br />
<br />하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-59331117094719789282012-11-18T22:09:00.001+09:002013-11-28T10:56:48.814+09:00Designing Beautiful Apps without Designer - Google HackFair 세션<br />
<div style="background-color: white;">
<div style="color: #222222; font-family: arial, sans-serif; font-size: 14px;">
어제 오늘(2012년 11월 17-18일) 구글 핵페어가 있었습니다. 많은 세션들이 있었는데 18일 세션중에 구글에서 근무하는 UX디자이너분 (Tony Kim)이 진행하신 세션이 기억에 남습니다. 세션을 들으면서 인상적인 내용만 메모차원에서 남겨봅니다. 추후에 비디오가 공개된다고 하니 한번 꼭 들어보세요!</div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<b>[추가 2012/12/10]</b></div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<b>발표자 분이 내용정리를 해주셨습니다. 아래 링크에서 확인하세요~</b></div>
<span style="color: #222222; font-family: arial, sans-serif;"><span style="font-size: 14px;"><b><a href="http://uxfactory.com/921">http://uxfactory.com/921</a></b></span></span><br />
<span style="color: #222222; font-family: arial, sans-serif;"><span style="font-size: 14px;"><br /></span></span>
<div style="color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<b>[추가]</b></div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<b>프리젠테이션 파일이 공개되었습니다.</b></div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<a href="https://docs.google.com/file/d/0ByZGJ926FVmTeXZpbmZWS1Z0VEU">https://docs.google.com/file/d/0ByZGJ926FVmTeXZpbmZWS1Z0VEU</a>
</div>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
구글은 엔지니어의 천국, 아시아 ux 직군 직원수가 1자리수!!</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
디자이너가 참여하는 프로젝트를 <b>럭셔리 프로젝트</b>라고 부를 정도로 디자이너가 참여하지 않는 프로젝트가 많다.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
구글이 실패한 플젝들을 보면</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
buzz, answers, dodgeball, wave,</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
google x, notebook 등등등..</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
이중 Wave를 보면 기능은 정말 많았다. 그래서 사용자들이 이걸 어떻게 활용해야할지 혼란스러워했다.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
너무 많은 feature를 가진 앱은 실패하기 쉽다.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://buytaert.net/sites/buytaert.net/files/images/drupal/cpu-featuritis.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="249" src="http://buytaert.net/sites/buytaert.net/files/images/drupal/cpu-featuritis.jpg" width="320" /></a></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<b>그럼 과연 좋은 앱이란?</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
제대로된 1개의 기능만 제공하는 것!</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<b>10가지의 구글 디자인 원칙</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
1. Useful</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
2. Fast :milisecond 단위의 가이드를 가지고 있다. 버튼 응답속도는 얼마 안에..</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
3. Simple</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
4. Engaging</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
5. Innovate</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
6. Universal</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
7. Profitable</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
8. Beautiful</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
9. Trustworthy</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
10. Pesonable ; Add a human touch.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
Cafe studies : 구글 방문자들에게 테스트</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
Lab </div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
Field : 실 환경에서 테스트(가정방문)</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
AB테스트 : log data분석</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<b>앱이나 서비스의 응답속도</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
0.1초 : 잘돌아가고 있다고 느끼는 시간</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
1초 : 돌아가고 쓸만해</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
10초 : 애라이 못쓰겠다.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
구글에서는 밀리세컨드 단위의 가이드 라인을 가지고 있다!!</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<b>그렇다면 과연 디자이너 없이 어떻게 개발해야할까?</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
1. Tackle one use case only</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
2.. Kill all nice-to-have features - UX디자이너의 사명. </div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
3. one-bite 한입에 쏙 들어갈 정도로 기능을 축소하라?</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
4. show it to mother 엄마에게 보여줘라 -> 비IT 인에게 Feedback을 받는게 매우 효과적이다. </div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
엘리베이터 피치 - 60초안에 그 플젝을 설명할 수 있어야한다.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
가족이나 친지에게 설명해본다. </div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
구체적인 실천 방법으로는</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
A. 디자이너랑 점심먹기. 밥을 사주면서 물어본다.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
B. Shrink, Hide, Embody 작게, 안보이게, 상징적이게</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
C. 디자인 가이드 문서읽기 (안드로이드 디자인 가이드, 아이폰 디자인 가이드 필독!!)</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
D. 디자인 패턴을 사용해라. (많은 사이트들이 있다. <a href="http://www.mobile-patterns.com/">http://www.mobile-patterns.com/</a> )</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 14px;">
<br /></div>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-85432837745788527462012-09-18T17:56:00.002+09:002012-09-18T18:01:08.596+09:00안드로이드 개발자 간담회 - Definitive Android Design9월 17일 저녁 안드로이드 개발자 간담회가 구글코리아에서 있었습니다. 이 간담회에는 아시아지역의 안드로이드 Developer Advocate들이 국내의 안드로이드 개발자들을 대상으로 여러 주제에 관해 세션을 진행했습니다.<br />
<br />
그 중 Definitive Android Design 세션의 내용을 좀 자세히 정리해봅니다.<br />
<br />
<h3>
Definitive Android Design</h3>
<div>
<br /></div>
이 세션은 안드로이드의 다양한 화면 구성에 대응하는 방법에 대한 전반적인 기술정보를 공유하는 자리였습니다. 이미 많은 내용들이 <a href="http://developer.android.com/design/index.html" target="_blank">안드로이드 디자인가이드 문서</a>에 공개되어 있고 <a href="http://klutzy.github.com/android-design-ko/" target="_blank">커뮤니티에 의해 한글화된 문서</a> 도 있어 많은 분들이 알고 계신 내용이지만 총정리를 해주더군요!<br />
<br />
안드로이드 개발자들은 꼭 공부하고 기억해야할 내용입니다.<br />
<br />
<h4>
Devices and Displays</h4>
<div>
안드로이드는 이제 많은 기기에서 사용됩니다. 그 기기들은 매우 다양한 화면 크기와 형태를 가지고 있습니다. 각각의 단말에 일일히 대응하는것은 매우 어려운 일이 되겠지만 안드로이드 프래임웍에서는 이를 쉽게 만들어주는 많은 기능을 이미 가지고 있습니다. </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMmLJ7QvtH6pSFkQo0TTinl6sLn7oGA16W6NrXVx0rDbCtFimS5ZSxtVY_C588VzfHRX1Z6gJQWsxMpcNomfSjT9pzvo2AS6gboQ1SEgrXrtH8OiXX8IZEDSz6S5Fm1xaM7fvUuA/s1600/Devices+and+Displays+%7C+Android+Developers-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMmLJ7QvtH6pSFkQo0TTinl6sLn7oGA16W6NrXVx0rDbCtFimS5ZSxtVY_C588VzfHRX1Z6gJQWsxMpcNomfSjT9pzvo2AS6gboQ1SEgrXrtH8OiXX8IZEDSz6S5Fm1xaM7fvUuA/s320/Devices+and+Displays+%7C+Android+Developers-1.png" width="320" /></a></div>
<br />
<h4>
DIP(device independent pixel)를 사용하자.</h4>
<div>
초기에 안드로이드 개발되는 앱들이 dp단위 대산 px단위를 사용해 다양한 단말화면에서 화면이 엉망으로 표시되는 경우가 종종 있었습니다. dp단위를 사용하면 다양한 단말에서 동일한 크기의 버튼, 이미지를 기대할 수 있습니다. 아래 그림은 각각의 dpi 에서 Baseline안에 표시되기에 필요한 이미지의 크기를 나타내 주고 있습니다. </div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3fXREHgVOlZBTufqzYlY_LeDiNMgFk4IxRfwujONeyxYAghYd_qEV6gWl8r-oyZ17d7RvAXWgM2YzhuU5Fk7n5DwA1PWbAe3LId7nAhbdBdIzUsod1kHHXS0mhmTOcFO8-clf8A/s1600/Devices+and+Displays+%257C+Android+Developers.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3fXREHgVOlZBTufqzYlY_LeDiNMgFk4IxRfwujONeyxYAghYd_qEV6gWl8r-oyZ17d7RvAXWgM2YzhuU5Fk7n5DwA1PWbAe3LId7nAhbdBdIzUsod1kHHXS0mhmTOcFO8-clf8A/s320/Devices+and+Displays+%257C+Android+Developers.png" width="310" /></a><br />
<br />
안드로이드 프래임웍에서는 특정 dpi의 이미지가 다른 dpi 단말에서 보여지게 되는 경우 이미지를 자동으로 Scale up하거나 Scale down하여 화면에 보여줍니다. Scale up이되는 경우에는 아이콘이 좀 뭉개지는 현상이 발생하기도 하고 또 매번 사용시마다 단말상에서 Scaling 작업이 이루어지게되므로 이를 방지하기 위해 각각의 dpi 이미지를 넣어주는 것도 좋은 방법이라고 권고하였습니다. 성능이 낮은 단말에서 이미지 스캐일링 까지 해야 한다면 성능이 더 안좋겠죠~<br />
<br />
<h4>
Metrics</h4>
<div>
폰과 타블랫의 구분은 어떻게 할까요? 아래 그림을 한번 보세요.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVo1o0bK8oUsM6k_2_itjp-w7S3Eh5vCjHIubh-dOff-PwkFP3-N-x7G1t2tVs4JqqbpCTn80G2PfqnRkwTjoCxJEgE2IM62inKtvTupoH661HPPUju0jTEd5ozTChXgSTm4l9WA/s1600/metrics_diagram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVo1o0bK8oUsM6k_2_itjp-w7S3Eh5vCjHIubh-dOff-PwkFP3-N-x7G1t2tVs4JqqbpCTn80G2PfqnRkwTjoCxJEgE2IM62inKtvTupoH661HPPUju0jTEd5ozTChXgSTm4l9WA/s400/metrics_diagram.png" width="400" /></a></div>
<div>
<br /></div>
안드로이드 3.2 이상에서는 Smallest width 600dp(<a href="http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSWQuali" target="_blank">sw600dp</a>) 가 타블랫의 기준이 되고 Android 3.2 미만에서는 <a href="http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters" target="_blank">large</a> 나 <a href="http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters" target="_blank">xlarge</a>가 타블랫의 기준이 됩니다.<br />
<br />
터치가 가능한 UI요소를 화면상에 배치할때는 48dp 정도, 즉 실제 기기에서 ~9mm 정도의 영역을 사용하는것이 좋습니다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNCgM-NFoasHOGwm7rg9Dxw4HzsvHocc1sFR-FSlxu3KOcarkEjOzB3qW-ua67aw3WqD8kxU3nPXjCy5qD90VMkWuj1aOKjY1JvVuYjx4RRzZC1fodXll7h0-SNKUS0ya7Whr4kQ/s1600/metrics_closeup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNCgM-NFoasHOGwm7rg9Dxw4HzsvHocc1sFR-FSlxu3KOcarkEjOzB3qW-ua67aw3WqD8kxU3nPXjCy5qD90VMkWuj1aOKjY1JvVuYjx4RRzZC1fodXll7h0-SNKUS0ya7Whr4kQ/s400/metrics_closeup.png" width="400" /></a></div>
또한 각각 요소들의 각격은 8dp정도가 적절합니다. (위 버튼에서는 상하에 4dp씩의 여백을 사용합니다.)<br />
<br />
폰의 경우 한손으로 쥐는 경우가 있는데 이런 경우에 터치 오동장을 방지하기 위해 사이드에 16dp 정도의 빈 영역을 넣어주는것이 좋을 것이라고 합니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCjEB2fhoiqUrqbmyemxwh6tTx67kC5lwrxmDO4vFqOI0i93o6O5DSK5EeDVC896urlXiGSMKMPD_b6H7GPgSrx3T6Vjp0SALt6zSO61jLtMlE86sIGT4vjDxdGrgWr9sLRgninw/s1600/metrics_forms.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCjEB2fhoiqUrqbmyemxwh6tTx67kC5lwrxmDO4vFqOI0i93o6O5DSK5EeDVC896urlXiGSMKMPD_b6H7GPgSrx3T6Vjp0SALt6zSO61jLtMlE86sIGT4vjDxdGrgWr9sLRgninw/s400/metrics_forms.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<h4>
Action Bar</h4>
<div>
액션바는 안드로이드 3.0(허니콤) 이상에서 추가되 기존의 하드웨어 메뉴버튼을 대체하고 사용자에서 편리함을 주기위한 화면 구성요소입니다.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_biu8uwI_lt84KhsjYvuunXE7PaOHiXRZUTqCG0VvG-iEBmiVZWq9VWqxBItKuIc-r3loghLAlIgQeTvmel0greVVtfZulLwqxPiNbmO9iiJUFxJXivOy5NAWv5GmmF_1TJmDXA/s1600/action_bar_basics.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="50" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_biu8uwI_lt84KhsjYvuunXE7PaOHiXRZUTqCG0VvG-iEBmiVZWq9VWqxBItKuIc-r3loghLAlIgQeTvmel0greVVtfZulLwqxPiNbmO9iiJUFxJXivOy5NAWv5GmmF_1TJmDXA/s320/action_bar_basics.png" width="320" /></a></div>
<div>
<br /></div>
<div>
위 그림처럼 액션바는 크게 4가지로 구성됩니다.</div>
<div>
<ol>
<li>App icon</li>
<li>View control</li>
<li>Action buttons</li>
<li>Action overflow</li>
</ol>
App icon은 앱의 특성을 아이콘을 통해 보여주는 공간이고 액션바에서는 Up동작을 위한 공간으로도 활용됩니다. Up버튼에 대한 설명은 <a href="http://klutzy.github.com/android-design-ko/patterns/navigation.html" target="_blank">탐색 패턴</a>을 보시길 바랍니다.</div>
<div>
<br /></div>
<div>
View control은 앱이 가진 여러가지 뷰를 전환할 수 있는 컨트롤을 포함합니다. 드롭다운 메뉴나 탭 컨트롤등을 사용할 수 있습니다.</div>
<div>
<br /></div>
<div>
Action Buttons은 앱이 수행할 수 있는 중요한 액션들을 포함합니다. 공간이 없는 경우 자동으로 Action overflow쪽에 포함됩니다. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHCN0uZOwnLR5mH_Edjd7RJreJSOLQ8VrrJ3yXJGLTGSIY0EyY59T2_XrKx55Csp9le_9GFuwcdBeGzGBkNXq6A1O1POt6WyLK2PoW7pDYlfuEOELEjezF3a2bqFUkfFvoWzu4gw/s1600/action_bar_pattern_rotation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHCN0uZOwnLR5mH_Edjd7RJreJSOLQ8VrrJ3yXJGLTGSIY0EyY59T2_XrKx55Csp9le_9GFuwcdBeGzGBkNXq6A1O1POt6WyLK2PoW7pDYlfuEOELEjezF3a2bqFUkfFvoWzu4gw/s400/action_bar_pattern_rotation.png" width="400" /></a></div>
<div>
Action overflow 는 자주 사용되지 않는 액션들이 표시됩니다. 위의 그림처럼 가로모드시에 공간이 충분할 때는 많은 Action item들이 나타나고 설정을 통해서 <a href="http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems" target="_blank">표시 유무를 지정</a>할 수 있습니다.</div>
<div>
<br /></div>
<div>
<h4>
Back button compatibility</h4>
<div>
하드웨어 메뉴버튼이 존재하는 경우(갤s3) Action overflow메뉴는 나타나지 않고 예전 Android단말을 대상으로한(targetsdk로 지정)앱에서는 가상의 메뉴버튼이 하단 시스템메뉴의 오른쪽 부분에 나타나게됩니다.</div>
</div>
<div>
<br /></div>
<h4>
Expanded layout</h4>
<div>
JB에 들어오면서 Notification이 확장되어 다양한 레이아웃을 지원할 수 있게 되었습니다. </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKQTiTmcEwvghV82lBF1SPCFnYfTSGF4J5OTdOiCFXVk-wsR8VNxOs6dNwsBd5U0sa9szCbnEQUZyXoMihtVv-xQK9MhRjnrju9koxTrp4RPy2q_4OqhlObjfZ6rPnv5d2eMo7OQ/s1600/notifications_pattern_expandable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKQTiTmcEwvghV82lBF1SPCFnYfTSGF4J5OTdOiCFXVk-wsR8VNxOs6dNwsBd5U0sa9szCbnEQUZyXoMihtVv-xQK9MhRjnrju9koxTrp4RPy2q_4OqhlObjfZ6rPnv5d2eMo7OQ/s400/notifications_pattern_expandable.png" width="400" /></a></div>
<div>
<br /></div>
<div>
이 알림을 이용할때는 지켜야하는 <a href="http://klutzy.github.com/android-design-ko/patterns/notifications.html" target="_blank">가이드라인</a>도 설명해주었지만 너무 길어서 생략! </div>
<div>
하지만 꼭 읽어보세요~</div>
<div>
<br /></div>
<h4>
Navigation</h4>
<div>
앞서 Action Bar에서 App icon이 Up 동작으로 사용할 수 있다고 했는데 Up동작은 다음과 같이 서로 다른 레벨로 탐색이 이용됩니다.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0VR6tnxjniM7bgh6ltKxNyDwrO1pZN3d0XurgouKqwj3pobwPXoR8Pvu0Z_CKxTdeAISno10pcJOh2VorSgQ3iCxbrtFBb8LIN4sheuR2WnzxacSZWsg1qVMLBkOB-9mIpdbbKw/s1600/navigation_between_siblings_gmail.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0VR6tnxjniM7bgh6ltKxNyDwrO1pZN3d0XurgouKqwj3pobwPXoR8Pvu0Z_CKxTdeAISno10pcJOh2VorSgQ3iCxbrtFBb8LIN4sheuR2WnzxacSZWsg1qVMLBkOB-9mIpdbbKw/s400/navigation_between_siblings_gmail.png" width="375" /></a></div>
<div>
Conversation 3 detail화면에서 Back버튼을 누르면 2 화면으로 가지만 Up버튼이 눌려진 경우 상위 리스트 화면으로 이동해야합니다. 또한 Back버튼은 앱을 벗어 날 수 있지만 Up버튼으로는 앱을 벗어날 수 없다는 것도 꼭 기억해두어야 할 특징입니다.</div>
<div>
<br /></div>
<h4>
Fragment</h4>
<div>
Fragment는 재사용가능한 화면 구성요소로 각 영역별로 layout을 관리할 수 있는 장점이 있습니다. Support library를 통해 API 4 레벨부터 사용이 가능합니다. (자세한 정보는 제 블로그인 <a href="http://abouts.blogspot.kr/2012/05/fragment-dfxkorea.html" target="_blank">요기</a>를 참고하시면 좋습니다. :)</div>
<div>
<br /></div>
<h4>
Pure Android</h4>
<div>
안드로이드에서 제공하는 아이콘이나 버튼들을 아이폰이나 윈도우폰의 리소스를 사용하는 경우가 있습니다. 이렇게 되면 사용자들은 앱 사용시에 혼란이 오게됩니다. 익숙한 화면을 보여주는것이 앱을 쉽게 사용하게 하는 방법이 됩니다. 이와 더불어 하면 안좋은 것과 좋은 것에 대해서 다음과 같이 꼭집어서 설명해주었습니다.</div>
<div>
<br /></div>
<div>
<b>하면 안되는 것들!</b></div>
<div>
<ul>
<li>다른 플래폼(아이폰, 윈도폰)의 UI를 차용한다.</li>
<li>플래폼의 특성을 타는 아이콘을 사용한다.</li>
<li>하단 탭바를 사용한다. (터치시 백버튼이 눌려질수 있다!!) </li>
<li>아이폰처럼 Labled 백버튼을 사용한다.</li>
<li>아이폰처럼 설정에서 > 를 사용해 상세설정으로 들어가도록 한다.</li>
</ul>
<b>해야 되는 것들!</b></div>
<div>
<ul>
<li>액션바를 쓴다.</li>
<li>Build intelligent context-aware app</li>
<li>적절한 시점에 미리 데이터를 로딩해 놓는다.</li>
<li>Offline 모드를 지원한다.</li>
</ul>
</div>
<div>
<br /></div>
<div>
여러 주제가 있었지만 개발자입장에서 가장 알찬 주제가 아니었을까 생각이 듭니다.</div>
<div>
이런 기회가 자주 있었으면 참~ 좋겠습니다.</div>
<div>
<br /></div>
하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-81367208311792268372012-08-14T08:29:00.001+09:002012-08-14T08:29:18.613+09:00Fragment는 왜 만들어졌을까요?<i><span style="font-size: x-small;">아래내용은 </span></i><br />
<a href="https://developers.google.com/events/io/sessions/gooio2012/115/" target="_blank"><i><span style="font-size: x-small;">"Google I/O 2012 - So You've Read the Design Guide; Now What"</span></i></a><br />
<i><span style="font-size: x-small;">세션에 나온 Fragment에 관한 정보를 정리한 것입니다.</span></i><br />
<br />
Activity와 View를 가지고도 Dynamic한 UI를 만들 수 있습니다. View와 Activity를 아래와 같이 구성한다고 생각해봅시다. 화면 구성요소를 ListView와 DetailView로 구분하고 이를 담고 있을 Activity를 생성합니다.. Single-Pane화면에서는 두개의 Activity가 사용되고 Dual-Pane구성에서는 하나의 Activity를 사용합니다.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii5yTOu1ruK2BZXO-Rh-womdZaCNf4ZrkciqynmpBGbEYY8Dz-nksVfNBUQGApa9V1dGPjWBAOBobRr09ZCwqLBrJjHsNERxJjRsY83P4Iv3qZhnCifEZhJZsegLp3RNWROxuS8A/s1600/Fullscreen-1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii5yTOu1ruK2BZXO-Rh-womdZaCNf4ZrkciqynmpBGbEYY8Dz-nksVfNBUQGApa9V1dGPjWBAOBobRr09ZCwqLBrJjHsNERxJjRsY83P4Iv3qZhnCifEZhJZsegLp3RNWROxuS8A/s400/Fullscreen-1.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Activity+View를 사용한 구성</td></tr>
</tbody></table>
<br />
이렇게 구성되 있는 상태에서 카메라 기능을 사용한다고 생각해 봅시다.<br />
카메라 기능을 사용하기 위해서는 아래와 같은 코드가 필요합니다.<br />
<br />
<pre class="lang-java prettyprint" style="background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin: 0px; padding: 0px; vertical-align: baseline;"><span class="typ" style="background-color: transparent; border: 0px; color: #2b91af; margin: 0px; padding: 0px; vertical-align: baseline;">Intent</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> camera </span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-color: transparent; border: 0px; color: darkblue; margin: 0px; padding: 0px; vertical-align: baseline;">new</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="typ" style="background-color: transparent; border: 0px; color: #2b91af; margin: 0px; padding: 0px; vertical-align: baseline;">Intent</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="typ" style="background-color: transparent; border: 0px; color: #2b91af; margin: 0px; padding: 0px; vertical-align: baseline;">MediaStore</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">ACTION_IMAGE_CAPTURE</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">);</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">startActivityForResult</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">camera</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> RESULT_PICTURE_RESULT</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">);</span></code></pre>
<br />
이런 식으로 startActivityForResult를 호출해 onActivityResult를 통해서 받은 데이터를 처리하게 될것입니다.<br />
<br />
Activity+View를 사용한 구성에서는 위와 같은 코드가 View의 내부에 위치하게 될겁니다.(View코드를 재활용한다고 했을때요!) 하지만 코드에서 필요한 중요 기능들은 Activity의 내부에 포함되어 있습니다. ( startActivityForResult나 onActivityResult함수)<br />
<br />
위의 그림과 같은 구성에서는 그 기능들이 ListActivity와 DetailActivity 의 onActivity에서 View로 이벤트를 위임해주는 구현이 각각 들어가야합니다. 이것은 반복적이고 매우 귀찮은 작업입니다.<br />
<br />
또 화면별 메뉴구성을 다르게하기 위한 코드(onOptionMenuXXX 들)나 Activity LifeCycle에 의존적인 기능들, 데이터를 가져오거나 저장하기 위한 코드들을 현재 화면구성에 맞춰서 동작하게 하기위해서는 이벤트를 위임해주는 기능을 구현해주어야합니다.(ListActivity와 DetailActivity모두에!!)<br />
<br />
이렇게 Multi-pane화면을 지원하기 위해 구현을 하다보면 Activity에선 쉽게할 수 있는 작업들을 View쪽에서 해주기 위해 귀찮고 반복적인 작업이 반복됩니다. 이를 피하기 위해 Fragment는 만들어졌습니다.<br />
<br />
위에서 구현해야했던 모든 기능들은 이제 Fragment내부에 구현하면 됩니다. 다음과 같은 구성이 되겠죠.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1ydfLR_k8eVZscXcCDdMKgtKvZS1tAcTBg3ok75EgCk6s_yxqH2C8hfN-Jb-fxAqbE_H1LALrvvttphxGf_DPElikEnOiO40I7yh8TlMbz9Y1pkDbxRY9Rfk8WwD-P9aYg6umow/s1600/Fullscreen-2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1ydfLR_k8eVZscXcCDdMKgtKvZS1tAcTBg3ok75EgCk6s_yxqH2C8hfN-Jb-fxAqbE_H1LALrvvttphxGf_DPElikEnOiO40I7yh8TlMbz9Y1pkDbxRY9Rfk8WwD-P9aYg6umow/s320/Fullscreen-2.png" width="264" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fragment를 사용한 구성</td></tr>
</tbody></table>
이제 우리는 기능 구현코드들을 Fragment로 모으고 귀찮은 위임작업들을 하지 않고도 쉽게 Single-Pane, Dual-Pane화면을 지원할 수 있게 되었습니다. 야호!<br />
<br />
Fragment는 Activity가 가진 많은 callback을 가지고 있고 Activity Lifecycle에 맞춰 그 callback들이 호출됩니다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJS4K_iJaPxp4bcs4wWz4H5O9dnk27JI7JtFJRiDrDPkKnokl8BItCcL-6JVcskX14_dCAxLOdrJ69Tbob15yd7vObumtyponAOlGAg9pRv-Aao8162J7-VzLO2G55lV_oizJBdg/s1600/fragment_lifecycle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJS4K_iJaPxp4bcs4wWz4H5O9dnk27JI7JtFJRiDrDPkKnokl8BItCcL-6JVcskX14_dCAxLOdrJ69Tbob15yd7vObumtyponAOlGAg9pRv-Aao8162J7-VzLO2G55lV_oizJBdg/s640/fragment_lifecycle.png" width="240" /></a></div>
참 쉽죠? :)<br />
<br />
<br />하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-3412420184891491672012-07-19T17:47:00.000+09:002012-07-19T17:47:13.282+09:00Nexus 7은 흥미로운 화면크기를 가졌습니다.<span style="background-color: white;">안드로이드 프래임웍의 어머니인 <a href="https://plus.google.com/105051985738280261832/about" target="_blank">Dianne Hackborn</a>의</span><br /><a href="https://plus.google.com/105051985738280261832/posts/6eWwQvFGLV8">https://plus.google.com/105051985738280261832/posts/6eWwQvFGLV8</a> 에 대한 번역글 입니다.<br /><br /><b><span style="background-color: white;">Nexus 7은 흥미로운 화면크기를 가졌습니다.</span></b><span style="background-color: white;"><br /></span><br />
<br />
<ul>
<li><span style="background-color: white;">7 인치.</span></li>
<li><span style="background-color: white;">800x1280.</span></li>
<li><span style="background-color: white;">"tvdpi" density (수치로 보면 213).</span></li>
<li><span style="background-color: white;">dp단위로는 600 x 961</span></li>
</ul>
<span style="background-color: white;"><span style="background-color: white;"><br /></span><br />
먼저 화면크기에 대해 이야기해보죠. raw해상도를 무시하면 이것은 보통의 7인치 타블랫과 마찬가지가지인 7" 타블랫입니다. 600x1024 화면을 가지는 몇몇 7"타블랫이 있긴한데 그것들은 다른 density(mdpi)를 가지고 있습니다. Density로만 따지면 우린 동일한 화면 공간을 가지고 있습니다. 600x961 또는 600x1024는 각각 16:10 또는 16:9 화면의 차이일 뿐입니다.</span><br /><br /><br />
가장 크게보면, 최신 안드로이드 화면을 분류하는 기준인 "작은 화면 폭"의 정의의 측면에서 이들은 모두 -sw600dp입니다.<br />
<br /><span style="background-color: white;">몇몇 분들이 Nexus 7인 10"UI의 화면 사이즈를 그져 화면 크기만 줄인게 아니다라는 글을 남기셨네요. 어느 정도 사실입니다. 물론 큰 화면의 phone UI도 아닙니다. 시스템과 앱에서는 각각 가장 최적으로 동작하는 UI를 사용합니다. 예를 들어 시스템 UI(Status bar나 Navigation bar, 설정화면)에서는 600dp화면에서 너무 조밀하기 때문에 Phone UI를 사용합니다. 다른 앱들은 타블랫 UI를 섞어 사용합니다. -- 예를 들면 Gmail앱은 대화목록에서는 타블랫 UI를 사용하고 메시지 화면에서는 가로모드, 세로모드에 따라서 각각 폰과 같은 단일 pane UI, 타블랫과 같은 dual-pane 을 사용합니다.</span><br /><br />
<span style="background-color: white;">기존의 PhoneUI을 확대시켜 큰 화면을 지원하려는 개발자에게는 이것은 화면 구성의 큰 변혁이 일어나야 한다는 걸 의미합니다. 그리고 layout 담당자에게 모든 사이즈를 살펴보도록 해야합니다. 만약 UI가 600dp 화면에 적합한 크기라면 -sw600dp를 사용하세요. 만약 크거나 작은 공간이 필요하다면 다른 width를 사용하세요. 현재 실제 width에 맞춰서 동적으로 화면을 전환할 수(화면회전간에 변경되는) 있습니다. fragments가 그럼 화면 구성을 구현하는데 상당한 도움이 될껍니다.</span><br />
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">이제 화면 density 에 대해 알아볼까요. 전 tvdpi 에 대해 많은 개발자들이 "이건 머지?!?"란 반응에 놀랐어요. 이 density는 이미 TV 화면 지원을 위해 </span><span style="background-color: white;">작년에</span><span style="background-color: white;"> </span><span style="background-color: white;">소개되었어요. </span><a href="http://developer.android.com/reference/android/util/DisplayMetrics.html#DENSITY_TV" style="background-color: white;">http://developer.android.com/reference/android/util/DisplayMetrics.html#DENSITY_TV</a><br />
<br /><span style="background-color: white;">TV에서 xhdpi 는 1080p 출력을 위해 사용됩니다.(이것은 사용자가 TV에서 어느정도 떨어져있다는것을 가정에서 UI를 설계하게 합니다.) 그리고 tvdpi는 </span><span style="background-color: white;">720p 화면에서 </span><span style="background-color: white;">같은 UI크기를 표현하기 위해 </span><span style="background-color: white;">추가되었습니다. 이미 알려진대로 이 density는 800x1280 7"화면과 같습니다. : 600x1024에 mdpi(160dp)이면 160*(800/600) = 약 213dpi 이죠.</span><br />
<br /><span style="background-color: white;">앱개발자 들의 다음 리엑션은 아마도 "머? 또 다른 density를 지원해야한다고??" 일겁니다. 다행이도 그럴 필요는 없습니다. 우리는 tvdpi를 보조 density로 생각합니다. -- 호환 디바이스를 위해 중요하지만 개발자들이 이를 위한 리소르를 따로 만드는것을 장려하지 않습니다.이미 Android의 density scaling이 이러한 임이의 density를 지원하도록 설계되었기 때문에 모든 UI 설계에 density의 개념을 포함시키고 UI구성요소의 pixel-accurate 배치를 layout manager를 통하도록 함으로써 별도의 작업없이 이 해상도에 대한 지원이 가능합니다. </span><br />
<br /><span style="background-color: white;">물론 모든 가능한 density에 대해 bitmap을 각각 제공할 필요도 없습니다. Android는 bitmap을 현재의 density 에 맞도록 적절히 scaling합니다(보통 읽혀지는 시점에). 모든 layout의 단위 또한 scale 될수 있도록 dp단위로 제공되고 이를 화면상의 배치를 위해 layout manager가 pixel 단위를 사용합니다.(density에 따라 scaled된 이후에) 폰트크기 또한 간단히 scale되고 해상도에 맞춰 그려집니다. 레이아웃이 pixel로 처리된 후 문자의 크기는 hinting으로 인한 에러를 줄이기 위해 최종 pixel크기 기준으로 계산됩니다.</span><br />
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">만약 bitmap이 의도하지 않았던 density로 scaled될지라도 테두리가 부드럽게 처리된 결과물을 얻을 수 있습니다. 안드로이드에서 이런 이슈를 완화시키는 몇가지 방법이 있습니다.</span><span style="background-color: white;"><br /></span><br />
<br />
<ul>
<li><span style="background-color: white;">Nexus 7같은 화면의 기기는 상당히 높은 density 이기 때문에 scaling이 잘 눈에 띄지 않습니다.</span></li>
<li><span style="background-color: white;">안드로이드는 Scale을 시킬 bitmap을 고를때 일반적으로 더 높은 density의 bitmap을 선택합니다. tvdpi 화면의 경우 보통 hdpi의 폰들을 지원하기 위해 대부분의 앱들이 포함하고 있는 hdpi 의 리소스들을 scale down시키게 됩니다.</span></li>
<li><span style="background-color: white;">안드로이드 타블랫 UI에서는 일반 앱 아이콘보다 큰 사이즈의 아이콘을 사용합니다. 이를 위해 더 높은 density 의 아이콘을 사용하는 방식을 이용합니다. </span><a href="http://developer.android.com/reference/android/app/ActivityManager.html#getLauncherLargeIconDensity()" style="background-color: white;">http://developer.android.com/reference/android/app/ActivityManager.html#getLauncherLargeIconDensity()</a><span style="background-color: white;"> 는 사용할 density를 리턴합니다. 앱의 아이콘은 산뜻한 화면의 핵심적인 요소이기고 디자인된 아이콘이 scaling없이 사용될수 있도록 density는 한단계 높은 density가 선택됩니다. (mdpi->hdpi, hdpi->xhdpi 등) 런처에서나 앱의 아이콘이 사용되는 곳에서 tvdpi 화면은 hdpi density로 지정되어 디자인된 크기가 사용됩니다.</span></li>
</ul>
<br />
Nexus 7 는 안드로이드 density scaling 이 얼마나 잘 동작하는지에 대한 큰 테스트였고 저는 이 결과에 매우 만족합니다. 사실 젤리빈 오픈소스 플래폼내에서 tvdpi 리소스가 사용되는 곳은 notification tray의 배경 이미지가 유일합니다. 또 그 리소스는 다른 화면 크기마다 각각의 버전이 있습니다. 이는 앱이 사용할만한 일반적인 접근법이 아닙니다. 화면에서 볼 수 있는 거의 모든것이 tvdpi 리소스 지정없이 scaling이나 기존의 hdpi 리소스를 그냥 사용하는 방식으로 충분히 처리가 가능합니다.하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-20329894470651221152012-06-18T11:30:00.000+09:002012-06-18T11:30:34.918+09:00android.support.v7.widget.GridLayout 사용하기Android 4.0 에서 제공되기 시작한 GridLayout은 화면을 구성하는 데 매우 편리한 구성요소입니다. 하지만 사용할 수 있는 API 레벨이 14!!!<br />
아마 왠만한 앱 개발자라면 그 아무도 GridLayout을 함부로 사용할 수는 없었을 겁니다. ㅠ.ㅠ<br />
<br />
그런데 Support Library r7 부터 이 문제를 해결해줄 android.support.v7.widget.GridLayout 가 조용히 등장했습니다. 하지만 안드로이드 개발자 블로그에도, 개발자 사이트에서도 검색조차 잘 안되고 있는 슬픈 상황입니다.<br />
<br />
Support라이브러리를 통해 GridLayout를 한번 사용해 볼까요?<br />
<br />
<h3>
기능</h3>
일단 기능은 <a href="http://android-developers.blogspot.kr/2011/11/new-layout-widgets-space-and-gridlayout.html">http://android-developers.blogspot.kr/2011/11/new-layout-widgets-space-and-gridlayout.html</a> 에서 말하고 있는 android.widget.GridLayout 완전히 동일합니다.<br />
<br />
간단히 설명하면 화면을 Grid영역으로 나누고 각각의 자식요소들의 위치와 크기를 지정하는 방식으로 레이아웃을 구성하는 방법입니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-ceJ2DjokqHE/TrxWTnrN6yI/AAAAAAAAA5k/1qCEdOM-mqc/s1600/milne-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://2.bp.blogspot.com/-ceJ2DjokqHE/TrxWTnrN6yI/AAAAAAAAA5k/1qCEdOM-mqc/s320/milne-2.png" width="320" /></a></div>
GridLayout를 사용하면 기존에 Layout여러개를 중첩해서 구성해야했던 구조를 간단하게 구현할 수 있습니다.<br />
<br />
<h3>
내 앱 프로젝트에서 사용하기</h3>
<h3>
1. ADT업데이트</h3>
먼저 ADT와 SDK Tools을 최신버전으로 업데이트 합니다. (현재 최신 버전은 r19로 GridLayout이용하기 위해서는 r17이상으로 업데이트되어야 합니다.)<br />
(SDK가 설치된 경로는 ANDROID_SDK 라 칭합니다.)<br />
<br />
$ANDROID_SDK/extras/android/support/v7/gridlayout/<br />
<br />
위 경로에 안드로이드 라이브러리 프로젝트의 형태로 gridlayout support라이브러리가 자리잡고 있습니다.<br />
<br />
<h3>
2. 프로젝트 import</h3>
이클립스에서 이 경로에서 프로젝트를 import 하거나 이 디렉토리를 내 프로젝트의 적절한 경로에 복사후 import 합니다. (저의 경우 3rd-libs 라는 경로에 복사)<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrLHQe6R9aCiNCmGFdo5FQ3wAlURVoVHD7QpzCA3v0djUI1ua_LUQOWDxyQWwy4YnBKOk6AbE9PP1sS64UF_IogM1TWyseiwVa9rZiilxIkOrnVtw-Y5BeSYYyF5hhs247gomMUg/s1600/Java+-+CarDriver_res_layout_view_bill_info.xml+-+Eclipse+-+_Users_skyisle_workspace.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrLHQe6R9aCiNCmGFdo5FQ3wAlURVoVHD7QpzCA3v0djUI1ua_LUQOWDxyQWwy4YnBKOk6AbE9PP1sS64UF_IogM1TWyseiwVa9rZiilxIkOrnVtw-Y5BeSYYyF5hhs247gomMUg/s1600/Java+-+CarDriver_res_layout_view_bill_info.xml+-+Eclipse+-+_Users_skyisle_workspace.png" title="import 후 보여지는 내용" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">import 후 보여지는 내용</td></tr>
</tbody></table>
<br />
<h3>
3. 라이브러리 프로젝트로 지정</h3>
다음과 같이 내 앱의 프로젝트 설정에서 Add 눌러 위의 library 프로젝트를 사용하도록 설정합니다.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6ianPiusbEXNfw_VnKz-v3PwGN5SumuwSEG7vpHfXcwMex2QYWqh9Qajcs6XXH8neEYaDDUmq42R30dChzsRj9gQbdX9ij3RILozIgHEiV2OBrBSO3BmV2JCkFWLM8RedT3pFwQ/s1600/Properties+for+CarDriver.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6ianPiusbEXNfw_VnKz-v3PwGN5SumuwSEG7vpHfXcwMex2QYWqh9Qajcs6XXH8neEYaDDUmq42R30dChzsRj9gQbdX9ij3RILozIgHEiV2OBrBSO3BmV2JCkFWLM8RedT3pFwQ/s320/Properties+for+CarDriver.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">라이브러리 프로젝트 사용설정</td></tr>
</tbody></table>
<h3>
레이아웃 구성하기</h3>
<div>
<div>
위의 블로그 링크에서 설명하듯이 레이아웃을 구성했다면 xml에서 <GridLayout> 대신 <android.support.v7.widget.GridLayout> 을 사용하도록 변경합니다. <Space> 역시 <android.support.v7.widget.Space> 를 사용하도록 변경합니다.</div>
</div>
<div>
<br /></div>
<div>
그리고 GridLayout의 Attribute가 포함되어야 하기 때문에 다음과 같이 namespace를 지정하고</div>
<div>
gridlayout과 관련된 attribute는 app:layout_column="1" 식으로 지정해줍니다.<br />
<br />
<br />
<blockquote class="tr_bq">
<android.support.v7.widget.GridLayout<br />
xmlns:android="http://schemas.android.com/apk/res/android"<br />
xmlns:app="http://schemas.android.com/apk/res-auto"</blockquote>
<br />
<br />
<h3>
마치기</h3>
중첩된 LinearLayout으로 구성된 복잡한 구조를 GridLayout으로 쉽게 구성해 보세요. GridLayout의 소중함을 느끼실 수 있을겁니다~ :)<br />
<br />
<br /></div>
<div>
</div>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-45569377754462939332012-06-18T11:26:00.003+09:002012-06-18T11:30:08.432+09:00Ubuntu 10.04 에 sun-java6-jdk 설치하기<div>
ubuntu에 jdk 패키지가 빠진 이후로 설치가 매우 어려워졌다.</div>
<div>
다행히 debian쪽에는 패키지가 남아 있어서 그쪽을 사용하는 방법으로 시도해보기로 했다. </div>
<blockquote class="tr_bq">
sudo add-apt-repository "deb http://ftp.debian.org/debian squeeze main contrib non-free"<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk</blockquote>
<div>
<br /></div>
<div>
이렇게 했는데 데비안 apt저장소 키가 등록이 안됬다고 나온다. 이럴땐 서버 gpg키를 받아서 등록해주자.</div>
<div>
(AED4B06F473041FA는 위에서 나온 에러에 포함)</div>
<div>
<br /></div>
<blockquote class="tr_bq">
gpg --keyserver subkeys.pgp.net --recv-keys AED4B06F473041FA<br />
gpg -a --export AED4B06F473041FA | sudo apt-key add -</blockquote>
<div>
<br /></div>
<div>
이렇게게 했는데도 로컬 apt저장소 용량이 작다고 나온다. 좌절하지 말고 설명대로 아래와 같이 저캐시 용량을 늘려준다.</div>
<div>
<br /></div>
<blockquote class="tr_bq">
sudo vi /etc/apt/apt.conf.d/70debconf</blockquote>
<div>
맨 밑줄에 </div>
<blockquote class="tr_bq">
APT::Cache-Limit "100000000";</blockquote>
<div>
추가 후에</div>
<blockquote class="tr_bq">
sudo apt-get clean && sudo apt-get update --fix-missing</blockquote>
<div>
<br /></div>
<div>
이렇게 삽질은 한 후에 누가 만들어 놓은 한방에 처리하는 스크립트를 찾았다. 하하하;;;</div>
<div>
<a href="https://github.com/flexiondotorg/oab-java6">https://github.com/flexiondotorg/oab-java6</a></div>
<div>
<br /></div>
<div>
<br /></div>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-85390650589512214622012-05-14T14:32:00.001+09:002012-05-14T14:32:03.747+09:00Fragment 시작하기 - dfxkorea<a href="https://sites.google.com/site/devfestxkorea/" target="_blank">DevFestX Korea</a> 에서 안드로이드 Fragment에 관한 발표를 진행했습니다. 많은 분들이 관심을 보여주시고 발표후 직접오셔서 많은 질문 해주셨네요. 아주 재밌는 시간이었습니다.<br />
<br />
특히 ViewPager에 대한 관심과 <a href="https://github.com/JakeWharton/ActionBarSherlock" target="_blank">ActionBarSherlock</a>에 대해서 많은 관심을 갖고 계신것 같았습니다. 몇몇 질문에 대해서는 추가 포스팅을 통해 자세히 공유하도록 하겠습니다. :)<br />
<br />
<iframe allowfullscreen="true" frameborder="0" height="389" mozallowfullscreen="true" src="https://docs.google.com/presentation/embed?id=1j_ZcmGGxEn_YUtn9P4HbHeddGHz0VJLa4kKrPzxuFYs&start=false&loop=false&delayms=3000" webkitallowfullscreen="true" width="480"></iframe>
<br />
<br />
<br />
<br />하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com3tag:blogger.com,1999:blog-6031957.post-10031248756524836362012-04-17T14:47:00.000+09:002012-04-17T14:47:19.637+09:00맥 파일시스템 확장 속성 변경하기사내 공용 프린터 드라이버는 설치할때 마다 꼭 말썽을 피운다. 설치중에 항상 오류를 내는 것이다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8TyOGQLH2v26T6Cuy6xpCB7yAmChGZgJPLOyRiU8icaVvDV9amb6SexiKJ-JCCi7vSJCOJMI_VMt9_FhnqJ3SHNUkjo0hzGaCu5KKoqWOmflPRU3QpJKZCQRZl6CIeMyhPktSkQ/s1600/SINDOH+N600_N605+Series+PS+%E1%84%89%E1%85%A5%E1%86%AF%E1%84%8E%E1%85%B5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8TyOGQLH2v26T6Cuy6xpCB7yAmChGZgJPLOyRiU8icaVvDV9amb6SexiKJ-JCCi7vSJCOJMI_VMt9_FhnqJ3SHNUkjo0hzGaCu5KKoqWOmflPRU3QpJKZCQRZl6CIeMyhPktSkQ/s320/SINDOH+N600_N605+Series+PS+%E1%84%89%E1%85%A5%E1%86%AF%E1%84%8E%E1%85%B5.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
몇번 패키지 내부에 들어가서 preflight, postflight, VolumeCheck 파일에 실행권한을 주고 해결하곤 했는데 이번엔 제대로 동작하지 않았다.<br />
<br />
직접 터미널로 들어가보니 평소에 보지 못하던 @ 표시가 눈에 띄었다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXrDU8eCfhuZvtXWCEboRzUzfoJLF20Jrkza0CYTBjCfi2K9lmcm7Xta93SghsiOH8YR47TKKlXMOnzXN5X0LbTJO_J166I7CNikeszr3EIHWwd68LpMPERtUjxc03hEoXSRS7Uw/s1600/Resources+%E2%80%94+bash+%E2%80%94+67%C3%9720.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXrDU8eCfhuZvtXWCEboRzUzfoJLF20Jrkza0CYTBjCfi2K9lmcm7Xta93SghsiOH8YR47TKKlXMOnzXN5X0LbTJO_J166I7CNikeszr3EIHWwd68LpMPERtUjxc03hEoXSRS7Uw/s320/Resources+%E2%80%94+bash+%E2%80%94+67%C3%9720.png" width="320" /></a></div>
이것은 무엇일까? 검색해보니 이것은 Extended file attribute 가 존재한다는 뜻! (<a href="http://en.wikipedia.org/wiki/Extended_file_attributes">http://en.wikipedia.org/wiki/Extended_file_attributes</a>)<br />
<br />
이 속성은 ls 옵션엔 -@를 추가하면 확인이 가능하다. 확인해보니<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiax2ZytJ9TmgK57Yh1KkYZsuDH2ouWZN-SopDhrEij3JWYRnA3yB0RAlxjw3N3-Nmu-rnBaxFJfkwiXFTTFAvPh-KEedX5uQMN2OG9vuoIIk3A3ReW9HU3nWe8acjlgbQQNebaZA/s1600/Resources+%E2%80%94+bash+%E2%80%94+67%C3%9741.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiax2ZytJ9TmgK57Yh1KkYZsuDH2ouWZN-SopDhrEij3JWYRnA3yB0RAlxjw3N3-Nmu-rnBaxFJfkwiXFTTFAvPh-KEedX5uQMN2OG9vuoIIk3A3ReW9HU3nWe8acjlgbQQNebaZA/s320/Resources+%E2%80%94+bash+%E2%80%94+67%C3%9741.png" width="240" /></a></div>
문제의 파일들에 대해서 com.apple.quarantine 속성이 걸려있었다.<br />
<blockquote class="tr_bq">
$ xattr -p com.apple.quarantine preflight<br /> 0006;4f8cf8e5;Chrome;95741EED-A78B-4BC3-931A-B76D7486172A|com.google.Chrome</blockquote>
이 속성은 다운로드된 파일에 대해서 다시 한번 확인을 묻는데 사용되는 속성이다.<br />
결국 이 속성 때문에 제대로 설치가 진행되고 있지 않았던 것이다.<br />
<blockquote class="tr_bq">
$ xattr -d com.apple.quarantine *</blockquote>
위 방법으로 속성을 제거한 후 설치에 성공!<br />
<br />하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-74766913775264797012012-04-01T22:27:00.000+09:002012-04-04T23:58:29.437+09:00ADT업데이트(r17)후 발생하는 NoClassDefFoundError 해결하기ADT업데이트 후 혹은 이클립스 재설치후 빌드만 다시했을 뿐인데 갑자기 멀쩡하던 앱이 죽기 시작합니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSSxjKKygasB26KlvkvEDcNq72bTlMrqSrgFG2IRE2QZIJ0SHOFQ2dOHnBAIwCSEfCEx8cKU-NKDruG1w-ZOUXisOolYBDlEeRgkmoBSLSFaw8PWjJgZpePG1gd46ZPt-V_4l9WQ/s1600/noclassdeffounderror.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSSxjKKygasB26KlvkvEDcNq72bTlMrqSrgFG2IRE2QZIJ0SHOFQ2dOHnBAIwCSEfCEx8cKU-NKDruG1w-ZOUXisOolYBDlEeRgkmoBSLSFaw8PWjJgZpePG1gd46ZPt-V_4l9WQ/s400/noclassdeffounderror.png" width="400" /></a></div>
<br />
난 아무것도 한게 없는데 왜 이런 시련이 왔을까요? 과연 무엇이 문제일까요?<br />
<br />
<h4>
<b>원인</b></h4>
이름 그대로 Class가 패키지에 함께 포함되지 않아서 발생한 문제입니다. 무엇이 이 문제를 발생시켰을 까요?<br />
ADT가 업데이트되면서 의존성을 체크하는 루틴이 크게 변경되었습니다.(자세한 내용는 요기 참고하세요. <a href="http://abouts.blogspot.com/2012/03/android.html" target="_blank">Android 프로젝트 의존성 처리 방식 변경</a>)<br />
<br />
기존 jar를 추가하면서 이클립스에서 build path를 추가했던것 기억하시죠?<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyt16cPn8mFp82ErgLwRgQzomZ_VYzN7QNlfC7dEiLDM_ZZCQF4tRlH70pFY-981oUE_utLECkPAT1W__Pm3xZsANzZMo7H4yiVfkQ4nm6Wk4j-KYjGsD_MF_r3-PzzYCRo_3FoQ/s1600/manual_add_build_path.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="" border="0" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyt16cPn8mFp82ErgLwRgQzomZ_VYzN7QNlfC7dEiLDM_ZZCQF4tRlH70pFY-981oUE_utLECkPAT1W__Pm3xZsANzZMo7H4yiVfkQ4nm6Wk4j-KYjGsD_MF_r3-PzzYCRo_3FoQ/s400/manual_add_build_path.png" title="수동 빌드 패스 추가하기" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">수동 Build Path추가</td></tr>
</tbody></table>
일반적인 경우 libs 폴더에 jar프로젝트를 넣어두고 이렇게 수동으로 빌드패스를 추가해서 사용해 왔습니다. 그런데 이번 ADT업데이트 이후에 Android Dependencies가 만들어지면서 libs내의 jar를 자동으로 빌드패스에 추가가 됩니다. 이 jar들은 배포시에 함께 패키징 됩니다.<br />
<br />
그럼 아무런 문제가 없지 않느냐?<br />
맞습니다. libs폴더에 기존에 jar파일들을 넣어 두셨다면 문제가 발생하지 않습니다. libs 대신에 lib 폴더(또는 다른폴더)에 jar를 넣어두었기 때문에 NoClassDefFoundError가 발생하게됩니다.<br />
<br />
<h4>
<b>해결방법</b></h4>
<br />
1) 가장 쉽고 옳은 방법<br />
<br />
<b>기존에 jar가 들어있는 폴더이름을 libs 로 변경하세요.</b><br />
<div>
<br /></div>
<br />
폴더를 libs로 변경하신후 기존 ADT r16이하를 사용하는 개발자 분들을 위해서 수동으로 빌드패스를 추가해주셔도 좋습니다. 하지만 공동 개발자들의 수가 그리 많지 않다면 ADT를 r17로 업데이트 하는게 더 좋은 방법입니다. (ADT r17버전은 기존 버전보다 개선사항이 매우 많습니다.<br />
<a href="http://developer.android.com/sdk/eclipse-adt.html">http://developer.android.com/sdk/eclipse-adt.html</a> , SDK Tools업데이트도 꼭 함께 해주세요.)<br />
<br />
2) 쉽지만 안좋은 방법<br />
<br />
안드로이드 팀에서는 libs폴더를 기본 jar들의 경로로 정해두고 있기때문에 앞으로도 ADT가 업데이트 될때 마다 이러한 문제들이 계속 발생할 수 있습니다. 지금 바꾸는 것이 좋습니다. 사정상 libs 폴더를 사용하지 못한다면(그럴 이유가 있을지 모르겠지만) 다음과 같이 수동으로 추가한 jar 빌드패스를 패키징시에 포함되도록 export시켜주시면 됩니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuXNPFe6r-qr9vdArqhkGOvt364F7_wlQeQMzA-IyQEb0XNH_TGRNq7omQjgfuckrQD-_Oqe2PnU14M3G2RZ0UMDUGldhtAnsMsPHR-uMaU6a8K-0M3t8WmF9h-VF2tLSz73w7iQ/s1600/manual_export_jar-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuXNPFe6r-qr9vdArqhkGOvt364F7_wlQeQMzA-IyQEb0XNH_TGRNq7omQjgfuckrQD-_Oqe2PnU14M3G2RZ0UMDUGldhtAnsMsPHR-uMaU6a8K-0M3t8WmF9h-VF2tLSz73w7iQ/s400/manual_export_jar-1.png" width="400" /></a></div>
하지만 이 방법은 절대 권하지 않습니다. 결국은 ADT를 업데이트 하게 될것이고 프로젝트가 매번 엉망으로 꼬이게 되는 경험을 하게 되실 겁니다.<br />
<br />
<br />
<div>
<br /></div>
<br />
<br />
<br />
<br />하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com1tag:blogger.com,1999:blog-6031957.post-69580288358212237192012-03-28T16:19:00.000+09:002012-03-29T10:40:33.177+09:00Android 프로젝트 의존성 처리 방식 변경<blockquote class="tr_bq">
이 글은 아래 링크의 대한 번역글입니다.<br />
<a href="http://tools.android.com/recent/dealingwithdependenciesinandroidprojects">http://tools.android.com/recent/dealingwithdependenciesinandroidprojects</a></blockquote>
<br />
이번(r17) Android SDK 부터 안드로이드 프로젝트에서 라이브러리 의존성을 체크하는 방식이 개선되었습니다.<br />
<br />
먼저 Ant-based 빌드 시스템과 이클립스 플러그인이 동일하게 동작하도록 변경되었습니다.<br />
<br />
프로젝트는 소스폴더와 라이브러리 프로젝트, jar파일 의존성을 갖습니다. 이제 라이브러리 프로젝트를 project.properties 에 넣기만 하면 자동으로 다음 경로들에서 의존성을 찾아 냅니다.<br />
<br />
<ul>
<li>프로젝트의 libs/*.jar</li>
<li>라이브러리 프로젝트의 생성물</li>
<li>라이브러리 프로젝트의 libs/*.jar </li>
</ul>
<div>
위 항목들과 프로젝트 소스의 컴파일 결과물이 함께 dex에서 처리되어 APK를 생성하게됩니다.</div>
<div>
<br /></div>
<div>
프로젝트들간에 동일한 jar를 사용하는 여러 라이브러리를 포함할 수 있기 때문에 빌드시스템은 모든 경로에서 jar를 찾아내 중복되는 jar를 제거합니다. 이로 인해 흔히 보았던 문제인 "already added"가 더 이상 발생하지 않을 것입니다.</div>
<div>
<br /></div>
<div>
<b>중요한 변경사항</b>: 라이브러리 프로젝트가 R 클래스를 생성하고 패키징 하는 방식이 변경됨!</div>
<div>
<ul>
<li>더 이상 R 클래스가 라이브러리 프로젝트의 jar 에 포함되지 않습니다.</li>
<li>라이브러리 프로젝트는 그들이 의존하는 라이브러리 프로젝트의 R클래스를 만들어 내지 않습니다. 메인 앱 프로젝트가 라이브러리에 포함된 R클래스를 그들 자체의 R클래스와 함께 만들어 집니다.</li>
</ul>
<div>
이것은 이제 라이브러리 프로젝트가 의존하는 다른 라이브러리 프로젝트의 R클래스를 가져오지 못함을 의미합니다. 이제는 앱의 R클래스가 모든 필요한 리소르를 모두 포함하고 있기 때문에 이는 더이상 필요하지 않습니다. (주 : 라이브러리 프로젝트에서 다른 라이브러리 프로젝트의 리소스를 참고가 더이상 불가능함을 의미합니다.)</div>
</div>
<div>
<br /></div>
<div>
<b>이클립스에서의 변경사항</b></div>
<div>
"Library Projects" 컨테이너의 동적인 classpath는 "Android Dependencies"로 변경되고 라이브러리 프로젝트 말고도 더 많은 걸 포함하게 되었습니다.<br />
<br />
이 컨테이너는 라이브러리 프로젝트가 참조하고 있는 Java-only 프로젝트도 찾아내 앱 프로젝트에 포함 시켜줍니다. 또 그 자바 프로젝트가 다른 자바프로젝트를 참조할 경우에도 자동으로 그 프로젝트나 jar를 찾아서 추가합니다. (사용자 라이브러리에서 참조하는 jar역시 지원됩니다.)<br />
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1mXbvJVxYHN5hEkzZJpSlBJBF_KWOKoinYauAAubTZOmPNFek6lu1kDqr81Xi28woUBWxnovvbee6yF3VakRn6rkVoh3nMsBKAoV9gaJcbQawghv6LjlXXjhEHNJ1OnWDYc4H/s1600/Android_dependencies.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1mXbvJVxYHN5hEkzZJpSlBJBF_KWOKoinYauAAubTZOmPNFek6lu1kDqr81Xi28woUBWxnovvbee6yF3VakRn6rkVoh3nMsBKAoV9gaJcbQawghv6LjlXXjhEHNJ1OnWDYc4H/s320/Android_dependencies.jpg" width="320" /></a></div>
<br />
<b>중요</b> : 이는 참조하는 프로젝트에서 참조 프로젝트가 exported로 설정되어 있는 경우에만 설정됩니다. 이 동작은 프로젝트나 jar를 build path에 추가하는 경우 기본 동작이 아닙니다.<br />
라이브러리 프로젝트(프로젝트 내부의 libs/*.jar를 포함)는 항상 exported 됩니다. 이 동작은 Java-only 프로젝트와 그 내부의 jar에만 해당됩니다.<br />
<br />
물론 이 경우에도 중복되는 jar는 감지되고 제거 됩니다.<br />
<br />
<b>의존성 해결방법</b><br />
<br />
프로젝트가 동일한 jar파일을 사용하는 두개 이상의 라이브러리 프로젝트를 포함하는 경우 빌드시스템은 이를 감지하고 중복문제를 해결해야합니다.<br />
<br />
완전한 의존성관리 시스템은 각 jar파일을 quallified 이름과 버전 값으로 그들을 구분해 내야합니다. 하지만 불행이도 안드로이드 빌드시스템은 이를 지원하는 완전한 방법을 제공하지 않습니다. (아직!)<br />
<br />
현재는 다음의 방법에 따르는 간단한 방식을 제공하고 있습니다.<br />
<br />
<i>Jar파일은 파일명에 의해 구분합니다.</i><br />
<blockquote class="tr_bq">
mylib.jar는 mylib-v2.jar와 다른 파일로 인식되며 두 파일 모드 패키징 되고 두 버전이 동일한 라이브러리의 다른 revision인 경우 "already added" 라는 dx 에러를 내게됩니다.</blockquote>
<br />
<i>같은 파일명인 jar의 경우 "same version"이라 함은 파일 내용이 동일할 경우를 말합니다.</i><br />
<blockquote class="tr_bq">
현재의 감지 시스템은 매우 기초적인 구현이기 때문에 파일 사이즈와 sha1값을 가지고 파일이 동일하다는 판단을 합니다. 만약 동일한 파일명을 가졌지만 실제 내용이 다른 jar를 라이브러리 프로젝트들이 각각 가지고 있다면 빌드 시스템은 의존성관련 에러를 내게 됩니다.</blockquote>
<i>android-support-v4.jar 와 android-support-v13.jar를 위한 처리</i><br />
<blockquote class="tr_bq">
위의 두가지 라이브러리의 경우 -v13 은 -v4의 모든 구현을 포함하고 있기 때문에 특별하게 처리됩니다. 두개의 jar가 모두 발견되는 경우 -v13의 jar만 사용됩니다.</blockquote>
<blockquote class="tr_bq">
하지만 빌드시스템이 발견하는 -v4, -v13 라이브러리가 동일한 revision 이라는 것은 판단하지 못합니다. 그러기 때문에 support라이브러리를 업데이트 해주는 경우 모든 프로젝트의 -v4, -v13 jar를 동시에 업데이트 해주시기를 권합니다. </blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
</blockquote>
<blockquote class="tr_bq">
</blockquote>
</div>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-49276672500654934742011-09-28T11:05:00.001+09:002011-09-28T11:05:20.460+09:00배경화면<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-M_QzkpSpJsc/ThuAGjSaVrI/AAAAAAAAHh4/X8ZXZEfwZuI/s1600/screenshot-1310425082690.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/-M_QzkpSpJsc/ThuAGjSaVrI/AAAAAAAAHh4/X8ZXZEfwZuI/s320/screenshot-1310425082690.png" width="192" /></a></div>
<br />하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com1tag:blogger.com,1999:blog-6031957.post-31586480221506632932009-12-11T04:31:00.000+09:002011-01-11T22:02:44.101+09:00나의 하루 - 2009년 12월 10일<div class="me2day_daily_digest"><ul><li>농땡이치는 현장포착!!<span class="me2_tags">(me2mms me2photo 회사휴게실)</span><span class="datetime"> <a href="http://me2day.net/skyisle/2009/12/10#16:43:53" rel="bookmark" title="퍼머링크" class="datetime">2009-12-10 16:43:53</a> </span><p><a href="http://www.flickr.com/photos/skyisle/4173179631/"><img src="http://farm3.static.flickr.com/2532/4173179631_24dd724f8f.jpg" alt="me2photo" width="100"></a></p><p><br /></p></li><li>비오는 날엔 파전!!!<span class="me2_tags">(me2mms me2photo)</span><span class="datetime"> <a href="http://me2day.net/skyisle/2009/12/10#19:49:37" rel="bookmark" title="퍼머링크" class="datetime">2009-12-10 19:49:37</a> </span><p><a href="http://www.flickr.com/photos/skyisle/4174148492/"><img src="http://farm3.static.flickr.com/2669/4174148492_eb3646af3b.jpg" alt="me2photo"></a></p></li></ul><p style="background:url(http://me2day.net/images/me2day_icon.gif) no-repeat right top;padding-right:25px;text-align:right; font-size: 0.9em;">이 글은 <a href="http://me2day.net/skyisle" target="_blank">하늘섬</a>님의 <a href="http://me2day.net/skyisle/2009/12/10#16:43:53">2009년 12월 10일</a>의 미투데이 내용입니다.</p></div>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com1tag:blogger.com,1999:blog-6031957.post-39457164159574853052009-12-07T23:40:00.000+09:002011-01-11T22:02:42.466+09:00로드뷰를 아이폰에서? 다음모바일 다음맵을 아이폰에서 사용해보자.<span class="Apple-style-span" style="font-family: NanumGothic, 나눔고딕, 'Malgun Gothic', 돋움, 'Trebuchet MS', sans-serif; line-height: 16px; color: rgb(187, 187, 187); "><div><font class="Apple-style-span" color="#000000" face="Dotum, Verdana, AppleGothic, sans-serif"><span class="Apple-style-span" style="line-height: 17px;"><span class="Apple-style-span" style="font-size: medium;">드디어</span> 아이폰의 시대가 왔다! KT를 통해서 한국서비스를 공식 오픈 하는 iPhone은 한국에서 스마트폰의 새로운 시대를 열게해줄 구세주다. 앞으로 다양한 스마트 폰의 홍수에 풍덩 빠져봤으면 하는 소망이 있다.<br /><br />Daum에서는 이미 예전부터 이런 시대의 흐름에 준비를 해오고 있었던것 같다. 그중에 오늘 살펴 볼것이 바로 "다음 지도 맵" 이다.<br /><br /></span></font></div><div style="text-align: center; "><img src="http://cfile5.uf.tistory.com/image/142165014B10AE6445A840" alt="" height="480" width="320" style="margin-top: 5px; margin-right: 5px; margin-bottom: 5px; margin-left: 5px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; "></div><div style="text-align: center; ">다음 맵은 어떤 기능이 있을까 한번 알아보자.</div><div style="text-align: center; "><br /></div><div style="text-align: center; "><a href="http://v.daum.net/link/4929471?textcube_blog" style="color: rgb(231, 181, 143); text-decoration: none; " target="_blank"><span class="Apple-style-span" style="font-size: large; ">계속해서 보기(및 다운로드 링크)</span></a></div><div style="text-align: center; "><br /></div><br /><div class="blogger-news-widget" style="width: 533px; text-align: center; "><span class="Apple-style-span" style="font-family: dotum; line-height: 21px; font-size: 15px; "><b><span class="Apple-style-span" style="font-family: 굴림; font-weight: normal; line-height: 18px; font-size: 12px; "><div style="text-align: center; "><span class="Apple-style-span" style="font-family: dotum; "><b><span style="font-family: Verdana; "><span style="font-size: 12pt; "><font class="Apple-style-span" color="#808080">아래의 추천</font></span></span><span style="font-family: Verdana; "><span style="font-size: 12pt; "><font class="Apple-style-span" color="#808080"><img src="http://cfile8.uf.tistory.com/image/135DC10C4B131ED2734146" style="margin-top: 5px; margin-right: 5px; margin-bottom: 5px; margin-left: 5px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; "></font></span></span><span style="font-family: Verdana; "><span style="font-size: 12pt; "><font class="Apple-style-span" color="#808080"> 버튼 한번 꾹~ 부탁드립니다~ ^-^</font></span></span></b></span></div><div style="text-align: center; "><font class="Apple-style-span" color="#808080" face="Verdana" size="4"><span class="Apple-style-span" style="font-size: 16px;"><b>클릭한번이 제겐 큰 기쁨입니다.</b></span></font></div></span></b></span><div class="blogger-news-widget" style="width: 533px; text-align: center; background-image: url(http://cfile2.uf.tistory.com/image/134A090E4AB8E06F8CC9BB); background-attachment: scroll; background-origin: initial; background-clip: initial; background-color: initial; display: inline; clear: both; float: right; overflow-x: hidden !important; overflow-y: hidden !important; margin-top: 10px; margin-bottom: 10px; background-position: 50% 50%; background-repeat: no-repeat no-repeat; "><embed src="http://api.v.daum.net/static/recombox3.swf?nid=4929471" quality="high" bgcolor="#ffffff" width="67" height="80" type="application/x-shockwave-flash"></div></div></span>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-73275361408420509482009-11-01T23:53:00.000+09:002011-01-11T22:02:30.442+09:00우리집 집들이~<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&hl=en_US&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fskyisle%2Falbumid%2F5399102169935250945%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer">하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com1tag:blogger.com,1999:blog-6031957.post-29092953029465962432009-10-23T17:08:00.000+09:002011-01-11T22:02:29.817+09:00네이버 지도 업데이트!<table cellpadding="0" cellspacing="0" width="462"> <tbody><tr> <td style="border:1px solid #cecece;"><a href="http://maps.naver.com/?slat=37.4884812&slng=126.9446778&elat=37.7120483&elng=127.4889493&pathType=0&dtPathType=2&menu=route&mapMode=0&sText=6rSA7JWF67K97IKw67iU66Oo67CNM%2BywqOyVhO2MjO2KuA%3D%3D&eText=7LKt7Y%2BJ7Zi47IiY7Y6c7IWY&enc=b64" target="_blank"><img src="http://prt.map.naver.com/render/render.srf?id=p20091023474743577dac74812861f70d15377105e" width="460" height="340" alt="지도 크게 보기" title="지도 크게 보기" border="0" style="vertical-align:top;"></a></td> </tr> <tr> <td> <table cellpadding="0" cellspacing="0" width="100%"> <tbody><tr> <td height="30" bgcolor="#f9f9f9" align="left" style="padding-left:9px; border-left:1px solid #cecece; border-bottom:1px solid #cecece;"> <span style="font-family: tahoma; font-size: 11px; color:#666;">2009.10.23</span> <span style="font-size: 11px; color:#e5e5e5;">|</span> <a style="font-family: dotum,sans-serif; font-size: 11px; color:#666; text-decoration: none; letter-spacing: -1px;" href="http://maps.naver.com/?level=8&lat=37.6218401&lng=127.2222321&mapMode=0&enc=b64" target="_blank">지도 크게 보기</a> </td> <td width="98" bgcolor="#f9f9f9" align="right" style="text-align:right; padding-right:9px; border-right:1px solid #cecece; border-bottom:1px solid #cecece;"> <span style="float:right;"><span style="font-size:9px; font-family:Verdana, sans-serif; color:#444;">© </span> <a style="font-family:tahoma; font-size:9px; font-weight:bold; color:#009bc8; text-decoration:none;" href="http://www.nhncorp.com" target="_blank">NHN Corp.</a></span> </td> </tr> </tbody></table> </td> </tr> </tbody></table><br /><div>네이버 지도가 확 바꼈다. </div><div><br /></div><div>몇일전에 크롬에서 네이버 지도를 쓰려고 하는데 아직 크롬을 지원하지 않는다는 메시지가 나와서 급실망을 했었다. </div><div><br /></div><div>오늘 지도를 프린트 하려고 접속했는데 크롬을 지원하지 않는 다는 메시지가 나오지 않는 것이었다. 이상하다 싶어서 좀 살펴보니 아주 멋진 서비스로 변해있었다. UI가 훨씬 이뻐졌을 뿐만 아니라 지도에서 주유소, 병원 보기 기능도 들어가 있다. 자전거 도로 위치도 표시된다고 한다. 위에 처럼 지도 퍼오기 기능도 훨씬 좋아졌다. </div><div><br /></div><div>네이버 지도좀 써줘야겠다. ㅋㅋ</div><div><br /></div><div><br /></div>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com1tag:blogger.com,1999:blog-6031957.post-87970898693821682492009-10-23T13:42:00.000+09:002011-01-11T22:02:29.123+09:00생각을 조심하라!당신의 생각을 조심하라. 당신의 말이 된다. <div>당신의 말을 조심하라. 당신의 행동이 된다. </div><div>당신의 행동을 조심하라. 당신의 습관이 된다. </div><div>당신의 습관을 조심하라. 당신의 인생이 된다.</div><div><br /></div><div>마음에 남는 글귀..</div><div><br /></div>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com2tag:blogger.com,1999:blog-6031957.post-9507311792354018022009-10-18T21:34:00.000+09:002011-01-11T22:02:28.460+09:00Writing Secure Code<div style="border:1px dashed #ccc;padding:10px;background-color:#f8f8f8;"><div style="font-weight:bold;font-size:1em;line-height:1em;"><a target="_blank" href="http://www.microsoft.com/mspress/books/5957.aspx" style="color:#00c;text-decoration: underline; height:1.4em">Writing Secure Code, Second Edition</a></div><div style=""><a href="http://www.microsoft.com/mspress/books/5957.aspx" style="color:#008000;text-decoration:none;">www.microsoft.com</a></div><p>About The BookDiscover the best practices for <b>writing secure code</b> and stopping malicious hackers in their tracks—direct from the top security experts at <b>...</b></p></div><br /><div><br /><div class="imageblock center" style="text-align: center; clear: both; padding:10px;"><a href="http://www.twenga.co.uk/book/writing-secure-code_134171.html" onclick="window.open(this.href);return false;"><img src="http://images.google.com/images?q=tbn:pa9LnhnlQcu3HM:i00.twenga.com/writing-secure-code-b_134171vb.png" alt="writing-secure-code-b_134171vb.png" height="115" width="115"></a><p style="margin-top:5px;"><span>이미지출처</span> : <a href="http://www.twenga.co.uk/book/writing-secure-code_134171.html" onclick="window.open(this.href);return false;"><span style="color:#008000;">www.twenga.co.uk</span></a></p></div><br /></div><div>어플리케이션 보안에 대한 모든 내용을 담아내고 있는 책이다. 이제 막 Part1 을 읽었다. Part1에서는 왜 보안이 필요한지에 대하 설명하고 보안 예방을 위한 개발 프로세스 개선 방법, 교육의 역할, 설계상의 보안 적용, 위협 모델링에 대한 내용을 다루고 있다. 물론 많은 예제가 윈도우를 기반으로 하고 있지만 모든 분야의 프로그래머들이 꼭 인지해야하는 내용이 아주 많다. 사내에도 보안 프로그래밍 가이드 라인 정도의 문서가 있었으면 했다. 시간이 되면 이 내용들을 정리하여 그런 문서를 만들어 봐야겠다.</div>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0tag:blogger.com,1999:blog-6031957.post-71444174504788647152009-10-15T00:32:00.000+09:002011-01-11T22:02:27.886+09:00구글을 지탱하는 기술 - 나시다 케이스케 저<div style="border:1px dashed #ccc;padding:10px;background-color:#f8f8f8;"><div style="font-weight:bold;font-size:1em;line-height:1em;"><a target="_blank" href="http://www.yes24.com/24/goods/3127813" style="color:#00c;text-decoration: underline; height:1.4em">YES24 - [국내도서]구글을 지탱하는 기술</a></div><div style=""><a href="http://www.yes24.com/24/goods/3127813" style="color:#008000;text-decoration:none;">www.yes24.com</a></div><p>MSN보내기 상품 퍼가기. <b>구글을 지탱하는 기술</b>. 크게보기 <b>...</b> 초기 구글의 전체적인 모습 2장 구글의 공룡화 1. 인터넷을 검색하는 거대 시스템 <b>...</b></p></div><br /><div><div class="imageblock center" style="text-align: center; clear: both;"><a href="http://www.flickr.com/photos/42744535@N07/3993851065" target="_blank"><img src="http://farm3.static.flickr.com/2640/3993851065_21b4091e3f.jpg" style="width:336px;height:120px;" alt="" /></a></div></div><div>평소 구글의 행보에 관심이 많았던 터라 구글이 사용하는 기술들에 대해서 호기심을 가지고 있었다. 머 Bigtable이나 MapReduce 같은 기술을 많이 들어왔으나 구체적으로 그것이 어떻게 구성되고 동작하는 지에 대해서는 잘 알수 없었다.(물론 알 수 는 있었지만 자세히 살펴보지 않았다...... ㅋㅋ) 암튼 이책을 통해서 그러한 기술에 대한 좀더 상세히 알수 있게 되어서 기뻤다. GFS를 Opensource로 구현되고 있는 <a href="http://hadoop.apache.org/" target="_blank">Hadoop</a> 에 대해서도 알수 있어서 즐거웠다.</div><div>책 처음과 마지막 부분에서 다루는 구글의 내부문화(?)는 신선했다. 코드리뷰를 중요시하는 내부문화는 우리 회사 정책과 그 맥을 같이 하지만 좀더 리뷰를 보완하는 가이드라인이 잘 서있는것 같아서 좀 부러운 면도 있었다. TechTalk이라는 사내 프리젠테이션도 서로의 기술을 이해하는데 많은 도움을 줄것 같았다. 우리 회사에도 도입했으면 좋겠다는 생각이 들었다.</div><div><br /></div>하늘섬http://www.blogger.com/profile/15082076530144581110noreply@blogger.com0