6월, 2022의 게시물 표시

딩기 요트 바람

이미지
딩기 요트 바람을 알아보겠습니다. ​ 딩기 요트(Dinghy Yacht)는 바람으로 가는 배입니다. 그래서 바람이 중요한데요. 바람의 종류는 해풍과 육풍이 있고, 바람의 위치는 풍상과 풍하가 있습니다. ​ 바다 쪽에서 불어오는 바람을 해풍이라 합니다. 해풍은 바람이 거의 일정하게 불어오는 특징이 있습니다. 육지 쪽에서 불어오는 바람을 육풍이라고 합니다. 육풍은 건물들로 인해 바람의 세기가 불규칙 적이고 방향이 수시로 바뀝니다. ​ 그래서 딩기 요트를 타기에는 해풍이 좋습니다. ​ 풍상과 풍하를 설명하겠습니다. 풍상은 바람이 불어오는 방향을 풍상이라고 합니다. 풍하는 바람이 불어 나가는 방향을 풍하라고 합니다. 뱃머리를 바람이 불어오는 쪽으로 돌리면 풍상으로 돌린다고 합니다. 뱃머리를 바람이 불어나가는 쪽으로 돌리면 풍하로 돌린다고 합니다. ​ 바람의 방향과 배의 방향에 따라 이름이 정해져있습니다. 노고 존(No-go zone): 바람과 일직선일 경우입니다. 바람을 받을 수 없어 움직일 수 없습니다. 크로스 홀드(Close-hauled): 45 도 각도로 가는 방법입니다. 빔 리치(Beam reach): 바람과 직각으로 갑니다. 브로드 리치(Broad reach): 바람이 불어 나가는 방향 45 도로 갑니다. 데드 런(Dead run): 바람이 불어나가는 방향과 동일한 방향으로 갑니다. 끝. 카테고리: Yacht

Android Notification with timestamp

이미지
사용 언어: Kotlin 1.7.0 사용 버전: Android Studio Chipmunk 2021.2.1 Patch 1 ​ 안드로이드 Notification with timestamp을 알아보겠습니다. 안드로이드 알림을 사용자에게 보여 줄 때, 언제 알림이 온 것인지 날짜가 보이게 만들어보겠습니다. ​ ​ 먼저, Notification을 만듭니다. https://shwoghk14.blogspot.com/2020/09/android-notification.html 아래 문서를 보면, Android N 이상에서는 해당 옵션을 true로 설정해 줘야 보인다고 합니다. 반대로 false를 하면 숨길 수 있습니다. 그냥 사용하게 되면, 아래와 같이 알림에 시간 표시가 없습니다. NotificationUtils.kt 파일에서 23 번째 줄처럼 builder에 setShowWhen()을 설정합니다. Android 버전에 따라 다르지만, 알람이 몇 분 지났는지 대략적인 시간이 나타나거나 그 당시의 시각이 표현됩니다. 끝. 카테고리: Android

Mac Open multiple images on same window

이미지
운영 체제: macOS Monterey 12.4 ​ 맥 Open multiple images on same window를 알아보겠습니다. ​ ​ 맥에서 여러 이미지를 열면 각각의 창에 이미지가 표기됩니다. 이렇게 되면 스크롤이나 화살표로 다음 사진을 볼 수 없습니다. ​ 으아아아.... 우측 상단에 미리 보기-환경설정을 누릅니다. 모든 파일을 단일 윈도우에서 열기를 누릅니다. 미리 보기를 종료 후, 다시 엽니다. ​ 이제는 이렇게 하나의 창에 모두 뜹니다. 끝. 카테고리: Mac

iOS How to localize my app

이미지
운영 체제: macOS Monterey 12.4 사용 버전: Xcode 13.4.1, SwiftUI, Swift ​ iOS How to localize my app을 알아보겠습니다. ​ 이번 시간에는 localization 현지화 방법을 알아보겠습니다. 문화, 언어를 현지화하는데요. 문화는 사실 알 방법이 별로 없습니다. 그래서 언어만이라도 현지화를 해봅시다. 우리나라 한국어의 경우 5,000만 명의 사용자가 있습니다. 북한의 경우 2,000만 명 정도 있지만, 애플이 없는 관계로 논외로 합니다. 지구상에는 약 70억 명 정도의 사람이 있습니다. ​ 우리 앱이 5,000만 명만 사용할 것이냐? 70억 명이 사용할 것이냐? 대한민국에 국한된 서비스 면 고려를 하지 않겠지만(대한민국에 있는 외국인도 생각해 봐야 합니다) 기본적으로 70억 명이 사용할 수 있으면 좋습니다. 그래야 앱이 오래 살아남잖아요? ​ 간단하게 영어와 한국어를 지원하는 앱을 만들 겁니다. 기본적으로 영어로 작성되어 있습니다. 이러한 부분들을 대한민국 사람에게는 한국어가 보이도록 변경할 겁니다. ​ ​ Xcode에서 file - New - File... 을 눌러줍니다. Strings File을 선택합니다. Next를 누릅니다. ​ ​ Localizable로 만듭니다. 오른쪽 상단의 버튼을 눌러 목록이 나오게 한 후, Localize...를 누릅니다. 그러면 이렇게 영어가 보입니다. 변경하고 싶은 것들을 적어줍니다. English이기 때문에 그대로 적어주면 됩니다. "원본"="번역"; 형식으로 적어줍니다. 등호 사이에 공백은

Android Change long to format using DateFormat with locale

이미지
사용 언어: Kotlin 1.7.0 사용 버전: Android Studio Chipmunk 2021.2.1 Patch 1 ​ 안드로이드 Change long to format using DateFormat을 알아보겠습니다. 현재 시간을 얻으면 밀리초(millisecond)로 얻어집니다. 이것을 날짜나 시간으로 표시하고 싶을 때가 있습니다. 그리고 이러한 날짜나 시간이 지역에 맞게 나왔으면 할 때가 있습니다. 미국은 월/일/연도 한국은 연도/월/일처럼 지역에 따라 순서가 바뀌기도 합니다. 이것을 간단하게 해결해 볼 겁니다. DateFormat을 이용해서 말이죠. ​ ​ 가운데에 글자가 하나 있는 간단한 앱 하나 만듭니다. 현재 시간을 얻어서 표시해 봅시다. 현재 시간은 System.currentTimeMillis()로 얻습니다. 자 1654933689573이라는 숫자가 나왔습니다. 이게 현재 날짜와 시간입니다. 우리는 이런 숫자를 보고 현재 시간이나 날짜를 알기 어렵습니다. 이것을 날짜 형식으로 표현하거나 시간 형식으로 표현할 수 있습니다. DateFormat을 사용합니다. 날짜를 얻으려면 getDateInstance()를 활용합니다. format에 우리가 얻은 시간 밀리초를 Date로 만들어서 넣습니다. 짜잔~ 읽을 수 있는 형태로 변경되었습니다. ​ ​ 형식과 지역을 자유자재로 변경할 수 있습니다. ​ 형식은 아래의 4 가지가 있습니다. Dateformat.SHORT

Android Read a csv file

이미지
사용 언어: Kotlin 1.6.21 사용 버전: Android Studio Chipmunk 2021.2.1 ​ 안드로이드 Read a csv file을 알아보겠습니다. ​ csv 파일을 안드로이드에서 읽는 것을 다뤄보겠습니다. 여기서는 opencsv라는 library를 사용할 겁니다. https://mvnrepository.com/artifact/com.opencsv/opencsv 최신 버전 5.6을 사용합니다. 앱 용 build.gradle에 implementation 'com.opencsv:opencsv:5.6'을 적어줍니다. Sync Now를 누릅니다. ​ ​ csv 파일을 넣을 assets 폴더를 만듭니다. New - Folder - Assets Folder를 누릅니다. 이렇게 만든 assets에 csv 파일을 넣습니다. 저는 train.csv 파일을 넣었습니다. 이런 파일입니다. ​ ​ ​ assets 파일을 읽기 위해서는 assetManager를 사용합니다. open을 통해 inputStream을 가져옵니다. CSVReader에 inputStreamReader를 사용해서 읽어들입니다. 전체를 읽어서 보는 방법과 하나씩 읽어서 보는 방법이 있습니다. 전체를 읽어서 보는 방법부터 해보겠습니다. ​ readAll()을 사용하여 읽어들인 다음에 for 문을 통해서 하나씩 봅니다. 이 방법은 null이 나오지 않습니다. ​ ​ 두 번째 방법은 한 줄씩 읽어들이는 방법입니다. readNext()를 활용하여 계속 읽어 들입니다.