Project - Chillog

more

블로그 사용성 개선 (ver 1.7.5)

서론 아직도 많이 부족한 블로그지만 조금이라도 나아졌으면 해서 부족한 실력을 쥐어 짜 나름의 큰 업데이트를 해 봤다. 기존의 블로그는 모바일, 데스크탑, 태블릿에서 모두 동일한 인터페이스와 사용성을 가졌었다. 아직도 고민이 많이 필요한 부분이지만 태블릿부터 대화면의 장점을 충분히 활용하지 못하는 비효율적인 인터페이스를 가지고 있다고 생각해 조금 바꿔 보기로 했다. 본론 Cols, Row의 이해 이미 해당 부분은 갤러리 게시판의 양식을 만들기 위해 진행했던 부분이지만 역시나 따라만 했을 뿐 정확히 이해하지 못했던 것 같다. 이걸 이해하는데 한참이나 걸려버렸다. mdi-heart {{item.likeCount > 9 ? '9+' : item.likeCount}} mdi-fire {{item.title}} 위..

Chillog (Blog) 2021.07.23 0

toast ui editor 3.0이 출시되었다.

본 블로그에 탑재 된 toast ui editor (이하 tui editor)가 버전업 되었다. 대충 쓰는덴 문제가 없으나 미천한 영어실력이라 대충 내가 필요한 기능들을 이해한 대로 정리하고자 한다. 경량화 기존의 마크다운 에디터는 코드미러와 토스트마크업을 동시에 띄우고 입력되는 데이터를 다른 API들을 통해 동기화 했다고 한다. 둘이 데이터를 다루는 방식이 다르기 때문에 같은 코드를 넣더라도 한 쪽에서 이를 인식하려면 꽤나 많은 과정을 거쳤던 듯 하다. 당장 렉도 많고, 글이 글어지기라도 하면 입력 지연, 멈춤 등이 발생하니 사용성이 개선 되었다니 반가울 다름이다. 커스텀 마크다운 문법 지원 GFM기반의 기본 마크다운 문법을 지원해 다채로운 작성이 불가능했던 것이 현실이다. $를 사용해 커스텀 마크다운..

Chillog (Blog) 2021.07.23 0

해결해야 할 문제

뷰어에서 태그를 제대로 불러 오지 못하는 문제. 뷰어와 검색창에서 태그를 제대로 불러오지 못하는 문제가 있다. 운영 초기엔 이미지 위주로 업로드 되고, 뷰어에서 이미지 태그만 보이다보니 이미지를 불러오지 못하는 문제인가 했는데, 인용구들이 비슷한 문제가 있다는 걸 최근에 알아차렸다. 뷰어는 미리보기의 형태로 제공이 되고 있어 데이터 소모를 막기 위해(알게 모르게 이 블로그는 돈을 좀 쓰고 있다.) 글자수를 대충 끊어서 절약(?) 했는데, 아마 이 기준이 문제인 것 같다. 태그가 등장하면 태그까지만 불러온다. 태그가 등장하면 이후 부분을 날려버린다. 아마 어느 방법이든 골치가 좀 아플 듯... 오류처리 테스트와 작업 중엔 항상 콘솔로 오류를 확인 하고 있기 때문에 몰랐는데, chillog는 현재 제대로 오..

Chillog (Blog) 2021.07.23 0

Google 검색에 등록하기 (#1)

서론 아직까지 chillog는 웹에 노출이 되지 않는다. 여태 올린 포스팅들은 모두 나 혼자 떠드는 이야기에 그치지 않았다는 것... 이전에 운영하던 네이버 블로그의 경우 네이버엔 자동으로 노출이 됐고, 역시 구글에서도 자동으로 노출이 되니 따로 신경 쓰지 않아도 유입이 됐다. chillog도 소통이 위해선 언제까지고 이렇게 폐쇄적으로 운영할 순 없는 노릇이다. 다만 chillog처럼 코드부터 호스팅까지 전부 하는 경우엔 이야기가 좀 다른데 오늘은 그 첫번째 이야기이다. 본론 스승님의 블로그의 경우 site map이란 것을 등록해야 했었는데, 아마 같은 강의를 쫒아온 내 경우에도(SPA) 필요한 과정으로 보이니 각오는 하고 있다. 우선은 가장 큰 검색 엔진인 구글에 등록을 해 보고, 정확이 어떤 반응이 ..

Chillog (Blog) 2021.07.23 0

Project - MemoApp

more

025 ~ 027. Dark mode, iPad support and Mac catalyst (다크모드, 아이패드 지원 그리고 맥 카탈리스트)

Dark mode 좌측 하단의 Environment Overrides의 Appearance를 통해 시뮬레이터의 다크모드와 라이트모드를 전환할 수 있다. 사진에서와 같이 현재는 다크모드로 전환해도 인터페이스상의 큰 문제는 없다. 이는 앱을 제작 할 때 대부분 기본 컬러들을 사용했기 때문인데, 이 경우 darkmode에 자동으로 대응한다. 단, 셀에서 날짜를 표시하는 레이블들이 기본 색상이 아닌 Custom Color를 사용했는데, 기존에 설정했던 LightGray가 아닌 DarkGrey로 설정하는 경우 다크모드에서 시인성이 매우 안 좋은 것을 확인 할 수 있다. 이렇게 CutomColor를 사용 할 때는 다크모드에 자동으로 대응하지 못하기 때문에 두 가지의 경우를 모두 생각해 적용 할 필요가 있다. 물론,..

메모앱 2021.07.30 0

022 ~ 024. Memo delete, share and Keyboard Notification (메모 삭제, 공유 그리고 Keyboard Notification)

Memo delete (메모 삭제) storyboard 뷰어의 툴바에 버튼을 추가한다. Bar Button은 위와 같이 설정하면, 모양은 쓰레기통으로, 색은 붉은 색으로 바뀐다. Flexible Space Bar Button Item은 위와 같이 버튼과 버튼 사이의 공백을 유동적으로 바꿔준다. 이후 새로 추가한 버튼을 뷰어의 컨트롤러 파일과 Action으로 연결한다. 해당 버튼을 누르면 동작할 시나리오는 삭제 확인 팝업 표시. 확인 버튼과 취소 버튼 표시. 확인 버튼 클릭 시 해당 메모 삭제. 취소 버튼 클릭 시 팝업 닫기. 의 구성이다. 따라서 이전 강의들에서 사용했던 팝업 생성 코드를 그대로 사용한다. // // ViewerViewController.swift // test // // Created ..

메모앱 2021.07.30 0

018 ~ 021. DB, Memo Editing (데이터베이스, 메모 수정)

DB (데이터베이스) DB 작성 iOS 앱의 DB는 CoreData를 사용해서 만들어 진다. CoreData는 프로젝트 생성 시에 이미 활성화 해 둔 상태이고, 기본적인 내용 또한 자동으로 추가 된다. 바로 앱 이름의 '.xdatamodeld' 파일이 DB이자 CoreData 파일이다. 해당 파일은 데이터 저장 방식의 설계도 역할을 한다. 좌측 하단의 'Add Entity' 버튼을 툴러 Entity를 생성하고, 컨텐츠와 날짜를 저장 할 Attribute를 각각 생성한다. 최종적으로는 위와 같은 모습이 되어야 하며, Entity의 Attribute Inspector의 'Codegen'이 Class Definition으로 되어 있어야 한다. 이 상태로 빌드를 시도하면 에러가 발생하는데, 임시로 생성해 뒀던 ..

메모앱 2021.07.27 0

014 ~ 017. Memo Viewer and Data Connection (메모 뷰어, 데이터 연결)

메모 뷰어 위와 같이 새로운 화면이 우측에서 좌측으로 표시되는 걸 Push라고 한다. 또한, 뒤로 가기를 선택했을 때 기존의 화면이 좌측에서 우측으로 사라지고 이전의 화면을 보여주는 것을 Pop이라고 한다. 메모를 선택하면 메모 뷰어를 push 하고, 하단에 toolbar를 추가해 편집과 공유가 가능하도록 한다. 메인 스토리보드에서 라이브러리로 진입해 View Controller를 추가해 새 Scene(씬)을 생성한다. 해당 씬은 메모 뷰어로, 특정 메모를 선택하면 해당 씬으로 전환이 되어야 한다. 따라서 메인 화면의 Cell(셀)과 새 씬은 연결한다. 이후 표시되는 팝업에서 Show를 선택하면 자동으로 Navigation Bar와 뒤로 가기 버튼이 추가된 것을 확인할 수 있다. 이제는 해당 셀에 추가적..

메모앱 2021.07.23 0

Project - ToyChat (w/Firebase)

more

05. 더 나아가기

자동 스크롤 메시지의 양이 많아한 화면에 표시하지 못하는 경우 Scroll View는 화면 밖에 새로운 메시지를 표시한다. 카톡이나 기본 메시지 앱의 경우 새 메시지가 화면 밖에 표시되면 자동으로 맨 아래로 이동하게 되는데, 이를 구현해 본다. Apple Developer Documentation developer.apple.com 원리는 간단하다. Scroll View의 scrollTo(_:anchor:) 메서드를 사용하는 것으로, 파라미터로 대상을 전달하기만 하면 된다. struct ContentView: View { @StateObject var messagesManager = MessagesManager() var body: some View { VStack { VStack { TitleRow()..

03. Firebase 초기화 및 Swift에서 사용하기

Firebase 초기화 하기 백엔드인 Firebase가 메시지를 저장할 수 있도록 DB를 초기화해 준다. 따로 서비스를 염두해 둔 앱이 아니기 때문에 간편하게 테스트 모드에서 시작한다. 사용하는 Region은 'asia-northeast3'로 한국에 위치해 있다. Region은 서비스의 응답 속도에 영향을 끼치는 경우가 있기 때문에 가까운 곳을 고르는 것이 좋다. Region은 Firestore를 초기화 한 이후 변경할 수 없으므로 잘 고르도록 하자. Cloud Firestore 위치 | Firebase 2022년 10월 18일에 오프라인과 온라인으로 진행될 Firebase Summit에 참여하세요. Firebase로 앱을 빠르게 개발하고 안심하고 앱을 출시하며 손쉽게 확장하는 방법을 알아보세요. 지금 ..

02. Firebase 연결하기

Firebase 프로젝트 생성 Firebase에 회원가입을 하고, 'Get started'를 선택한다. 프로젝트를 생성하고, 이름을 지정한 뒤 지금은 필요 없는 Google Analystic은 비활성화한다. 해당 기능은 Google의 분석 툴로, 실제 서비스라면 필요할지 모르겠지만 지금은 상관없다. 앱에 Firebase 추가 생성된 프로젝트의 Console로 이동해 표시된 'iOS' 버튼을 선택한다. 앱 등록에서는 Apple 번들 ID를 반드시 입력해 줘야 한다. Xcode 프로젝트의 Bundle Identifier를 입력해 주면 된다. 이외는 선택사항으로 입력하지 않아도 무방하다. 그다음 GoogleService-Info.plist 파일을 다운로드하여 안내대로 프로젝트 파일 안에 던져 넣고 다음 단계로..

Swift (2021)

173 ~ 174. Advanced Topic

Availiability Condition API 가용성을 확인하는 방법이다. 새로운 OS가 출시되면 새로운 기능을 위한 API가 추가된다. 매번 최신 API를 사용한다면 좋겠지만 현실적으로 불가능한 경우가 많다. 새 애플리케이션을 생성하면 배포 타깃은 자동으로 최신 버전으로 지정된다. 이 상태로 배포하게 되면 해당 버전보다 낮은 상태의 기기들은 이 앱을 사용할 수 없다. 따라서 최신버전 보다는 2~3 정도 낮은 버전을 타깃으로 설정한다. class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. navigati..

Swift (2021) 2021.09.17 0
170 ~ 172. Selector, Keypath, Dynamic Access

Selector (셀렉터) Selector(셀렉터)는 UIkit에서 method를 지칭하거나, 속성의 getter나 setter를 지칭할 때 사용한다. '지칭한다.'의 의미는 호출한다는 의미가 아닌, 대상을 가리키는 특별한 인스턴스를 얻는다는 뜻이다. 이러한 인스턴스는 버튼과 메소드를 연결하거나, 제스쳐와 메소드를 연결할 때 사용한다. Syntax #selector(methodName) #selector(getter: propertyName) #selector(setter: propertyName) struct Figure { let color: UIColor = .blue func draw() { print("draw") } } let selector = #selector(Figure.draw) 결과 ..

Swift (2021) 2021.09.17 0
162 ~ 169. Error Handling (에러 처리)

Error Handling (에러 처리) 에러가 발생하면 보통 프로그램이 종료되지만, 미리 판단하여 처리하게 되면 종료를 막을 수 있다. Compiletime Error & Runtime Error (컴파일 타임 에러와 런타임 에러) 에러는 컴파일타임 에러와 런타임 에러가 있다. 컴파일 타임 에러는 대부분 문법과 관련된 에러로, 컴파일러가 제공하는 정보로 쉽게 해결할 수도 있고, 자동 수정 기능을 제공하기도 한다. 런타임 에러는 프로그램이 실행중인 동안 발생한다. 문법적인 에러가 아닌 기기 상태나, 리소스의 상태 등 여러 이유로 발생할 수 있다. Error Protocol (에러 프로토콜) 에러 처리에 사용되는 에러 형식은 에러 프로토콜을 채용하는 것 만으로 쉽게 구현할 수 있다. 보통은 열거형으로 선언..

Swift (2021) 2021.09.15 0
159 ~ 161. Generics (제네릭)

Generic Function (제네릭 함수) 제네릭을 사용하면 형식에 의존하지 않는 범용 코드를 작성할 수 있다. 코드의 재사용성과 유지보수가 간편해진다는 장점이 있다. func swapInteger(lhs: inout Int, rhs: inout Int) { let tmp = lhs lhs = rhs rhs = tmp } swapInteger(lhs:rhs:) 함수는 두 개의 정수를 받을 경우 의도대로 동작한다. 하지만 정수 형태가 아니라면 에러가 발생한다. 파라미터에 지정된 값의 형태 외엔 전달 받을 수 없기 때문이다. 따라서 같은 형태의 함수를 파라미터 형식을 다르게 하여 여러 개 만들어야 한다. 다만 같은 코드를 중복해 사용했다는 점에서 작업의 불필요한 반복이 늘어나게 된다. 이 문제를 새결할 ..

Swift (2021) 2021.09.14 0
152 ~ 158. Memory, Value Type and Reference Type (메모리, 값형식과 참조형식)

Memory Basics 메모리는 0과 1을 저장하는 반도체이다. 전기가 통하면 1, 전기가 통하지 않으면 0을 저장할 수 있다. Bit 0과 1을 저장할 수 있는 가장 작은 단위를 Bit(비트)라고 부른다. Bit 0 or 1 Byte 비트 8개를 묶어서 Byte(바이트)라고 부른다. 컴퓨터 데이터 처리의 기본 단위로 사용되며, 양수만 저장 할 때는 0^8개의 경우인 0~255까지, 음수와 양수를 동시에 저장하면 -128~127까지의 범위를 저장할 수 있다. Byte MSB LSB 8개의 비트 중 가장 왼쪽의 비트를 MSB(Most Significant Bit)라고 부르며, 가장 오른쪽의 비트를 LSB(Least Significant Bit)라고 부른다. 데이터 저장 방식 Byte의 양수 저장 컴퓨터에..

Swift (2021) 2021.09.14 0

iOS (2021)

219. Task Scheduling

Task Scheduling Task는 처음 생성하면 별다른 동작 없이 대기하고 있다가 resume 메서드가 호출되면 즉시 동작을 시작한다. 이는 사용자에게 즉시 필요한 데이터라면 적합한 작동 방식이다. 하지만 지금 당장 데이터가 필요한 경우가 아니라면 미리 기기의 용량을 차지하거나, 셀룰러 용량을 낭비하게 된다. Task Scheduling은 iOS가 Task의 정보를 저장하고 있다가 지정된 시점에 자동으로 다운로드하는 방식으로 동작한다. 따라서 Task의 주체가 앱이 아니게 되고, Background Session 에서만 구현할 수 있다. @IBAction func startDownload(_ sender: Any) { guard let url = URL(string: bigFileUrlStr) el..

iOS (2021) 2022.09.07 0
218. Adaptable Connectivity

Adaptable Connectivity 네트워크가 연결되지 않은 상태에서 발생한 Task를 대기상태로 두었다가 연결되면 실행되도록 구현한다. lazy var session: URLSession = { [weak self] in let config = URLSessionConfiguration.default config.waitsForConnectivity = true let session = URLSession(configuration: config, delegate: self, delegateQueue: OperationQueue.main) return session }() SessionConfiguration의 waitsForConnectivity 속성을 true로 변경한다. 이제부터 해당 Sess..

iOS (2021) 2022.09.07 0
217. Cellular Connection

Cellular Connection 위와 같은 차이점 때문에 네트워크를 사용하는 앱의 경우 사용자가 현재 사용하는 네트워크 방식을 인지할 수 있도록 구현하는 것이 바람직하다. Reachability를 사용하면 이를 쉽게 구현할 수 있지만, 이는 애플의 권장을 벗어난 해결법이다. 애플은 'Framework가 제공하는 API로 허용 여부를 설정'하도록 권고하고 있다. Cellular 연결 설정하기 request.allowsCellularAccess = cellularSwitch.isOn request의 allowsCellularAccess 속성을 Switch의 상태와 동기화한다. DownloadTask는 스위치와 해당 속성의 상태에 따라 다운로드 여부를 결정한다. Switch가 켜져 있는 경우 allowsC..

iOS (2021) 2022.09.07 0
216. Reachability

Reachability Reachability는 호스트의 접속 가능 상태를 의미한다. iOS는 Reachability를 네트워크 연결에 실패했을 때 상태를 진단하는 목적으로 주로 이용한다. Apple은 Reachability에 따라 요청의 진행 여부를 결정하는 것이 아닌, 상태에 상관없이 요청을 진행하고 이것이 실패하는 경우 Reachability를 사용하도록 안내하고 있다. 이외의 용도로서 기기의 '네트워크 상태'를 확인하거나 Wi-Fi 상태인지의 여부를 확인하는 용도로 사용하기도 한다. Reachability는 SystemConfiguration이 제공하는 API로 구현되어있다. 이를 사용해 직접 구현하는 것보다는 이미 만들어진 오픈소스를 활용하는 것이 더 간편하다. Reachability Open ..

iOS (2021) 2022.09.06 0
215. Response Caching

Response Caching 항상 네트워크를 통해 작동하도록 하는 것은 매우 비효율적이다. 요정과 응답 사이에 지연이 발생하고, 많은 시스템 자원과 서버 자원을 사용한다. Cache를 사용하면 이를 조금 해소하는 것이 가능하다. 이를 위해 Cache Policy를 설정해 기본으로 제공하는 Cache Store를 사용하거나 새옵게 정의하는 것이 가능하다. Cache Policy useProtocolCachePolicy protocol 형식에 따라 기본 Cahce 정책을 사용한다. Server의 Cahce Controller가 존재하면 기본값을 사용한다. reloadIgnoringLocalCacheData Local Cache를 무시한다. 요청 시도마다 매번 네트워크 요청이 발생한다. 특정 요청에 따른 C..

iOS (2021) 2022.09.06 0

Algorithms (Python & Swift)

Stack #2

서론 이전에 정리했던 Stack의 구조와 동작 방식을 이해하고, 문제를 풀며 이를 응용해 본다. 본론 Q1 스택에 push 되는 값들이 오름차 수열이 되는지를 판단해, 불가하면 'NO'를 가능하다면 작업의 순서를 push는 '+'로 pop은 '-'로 출력하도록 하면 된다. Q1_Python Stack class Stack2(): class Empty(Exception): pass def __init__(self): self.stk = [] def is_empty(self) -> bool: return not self.stk def push(self, val): self.stk.append(val) def pop(self): if self.is_empty(): raise Stack2.Empty return..

알고리즘 (Python) 2022.06.23 0
Stack #1

Stack 구조 Stack은 기본적으로 위와 같이 출구와 입구가 하나인 구덩이의 모습을 한다. 폰 스택(phone stack) 놀이와 같이 바닥에 깔려 있는 내 전화에서 벨이 울린다고 위에 있는 다른 전화를 건들지 않고 내 것만 쏙 빼서 확인할 수 없다. Stack도 마찬가지이다. 가령 index 4에 접근하기 위해서는 7, 6, 5를 순서대로 접근한 후에야 4에 접근할 수 있다. 이러한 특징 때문에 Stack을 LIFO(Last In First Out/후입 선출) 구조라고 정의하기도 한다. Pointer Stack에 현재 저장돼 있는 데이터의 수를 나타낸다. 고정길이 스택의 경우 Pointer

알고리즘 (Python) 2022.06.04 0
선형 데이터 구조와 탐색

서론 선형 데이터 구조 자료의 순서를 유일하게 결정할 수 이쓴 구조를 말 한다. 수학적으로 n 번째 자료를 탐색한 다음 n + 1 번째로 탐색할 자료가 유일한 구조다. 시각적으로는 위와 같다. 왼쪽이 n 다음 n + 1 이 유일하므로 선형구조이고, 오른쪽이 n 다음 n + 1 이 복수이므로 비선형구조이다. 형태에서 느껴지듯 주로 리스트와 배열이 이에 해당하고, 조금 더 확장하면 위와 같이 다차원의 배열과 리스트도 선형구조에 포함된다. 본론 선형 데이터의 탐색 이러한 선형구조의 데이터를 탐색하는 방법에는 크게 두 가지 방식이 있다. 순차탐색 (Linear Search) 첫번째 자료부터 마지막 자료까지 순차적으로 탐색하는 방식으로, 최종적으로 자료의 수 만큼 탐색하게 된다. 따라서 계산량은 O(n) 이 된다..

알고리즘 (Python) 2022.05.03 0
Q1. 방 배정 하기

서론 파이썬 문법을 마무리 한 날 남은 시간 동안 문제를 한 번 풀어보기로 했다. 문제는 군 복무 중이던 시절 남는 시간에 공부라도 해보자 해서 구해뒀던 한국정보올림피아드 초등부 문제로, 지금은 주관이 바뀐 탓인지 홈페이지에서 구할 수가 없다. C언어는 1학년때 배웠었고, 입대한 건 2학년이 끝난 후였고, 공부를 시작한 건 상병이 다 돼서였으니 이미 기억의 저편으로 사라져 버린 언어에 대한 지식과 손 코딩의 한계로 딱히 제대로 건드려 볼 수가 없었다. 실제 문제 풀이는 Python으로 작성할 생각이고, 적당한 코드 리뷰 후에는 Swift로 옮겨볼 생각이다. 본론 문제 답 Egg's import math import datetime as date #initial data tot_num = 0 max_for..

알고리즘 (Python) 2022.04.22 0
Python #3

서론 이전 시간에 풀다 남은 276번 부터 290번 까지. 파일 입출력을 건너 뛰고 에러 처리에 해당하는 4문제 가량을 진행했다. 본론 276번 부터 280번 까지는 이전의 271번 부터 275번 까지 문제의 연장선이다. 따라서 이전의 코드를 개선하는 방향으로 진행했다. 문제와 조건은 다음과 같다. Account 인스턴스에 저장된 정보를 충역하는 display_info 메서드 추가할 것. 단, 잔고는 세자리마다 쉼표를 출력할 것. 입금 횟수가 5회가 될 때 잔고 기준 1%의 이자가 발생 되도록 할 것. 생성된 Account 인스턴스를 리스트에 저장할 것. 반복문을 사용해 100만원 이상인 고객의 정보를 출력할 것. 입금과 출금 내역이 기록되도록 코드를 업데이트 할 것. 각각을 출력하는 deposit_hi..

알고리즘 (Python) 2022.04.18 0

Photos

more

[~2022.09.30] 일상, 예술의 전당, 캠핑, 애플스토어 잠실, (Ricoh GR 3x, iPhone 13 mini)

서론 사용한 카메라는 Ricoh GR3x와 iPhone 13 mini 아이폰으로 촬영한 사진이 월등히 적기 때문에 별도로 기재해 두겠다. 보정은 없음. 본론 9월 1일 | 부천 아버지와 리모델링했다는 도서관 구경하러 나갔다 오는 길에 찍은 하늘. 9월 2일 | 남양주 코흘리개 때 자주 데려 왔었다던 '현' 다산 생태 공원 예쁘게 꾸며 놓기는 했는데 앵글에 이래 저래 걸리는 게 많아서 아쉬웠다. 9월 3일 | 숭실대학교 갑자기 빵돌이가 되겠다며 베이킹을 배우기 시작한 Whale... 바쁜 시간을 쪼개 스터디에 나오면서도 이렇게 그날의 간식을 날랐다. 맛도 괜찮던데 진짜로. 9월 7일 | 집 늦봄에 심었던 단풍나무 씨는 어느새 아래에 수피가 생기기 시작했다. 많이도 심었는데 아무도 모를 겨울을 나는 녀석은 ..

사진 2022.11.23 0

[~2022.08.31] 일상, 인사동, 광화문 (Ricoh GR 3x, iPhone 13 mini)

서론 사용한 카메라는 Ricoh GR3x와 iPhone 13 mini 아이폰으로 촬영한 사진이 월등히 적기 때문에 별도로 기재해 두겠다. 보정은 없음. 본론 8월 14일 가산 | INC Coffee 가산디지털단지역에서 도보로 조금 걸으면 나오는 대형 카페. Whale이 주말에 수업이 생겨 동선에 유리한 곳으로 옮겨 봤다 냉방도 시원했고, 대형인 만큼 층마다, 구역마다 테마나 분위기가 다르다는 점이 좋다. 재방문 의사는 매우 높으나 빵이 맛있어서 돈을 잔뜩 쓰게 된다는 단점이... 편한 의자는 없어서 오래 앉아서 작업을 하거나 책을 읽기엔 부적합하다. 8월 24일 신촌 | 라구식당 후배가 점심을 사준다며 불러낸 신촌... 끝까지 응석을 받아 줬어야 하는데 내가 그런 어른이 못돼 오히려 내가 짜증도 냈었지...

사진 2022.10.12 0

[~2022.07.30] 안드레아스 거스키, 녹사평, 브라이리퍼블릭, LIU, 일상 (Ricoh GR 3x, iPhone 13 mini)

서론 RICOH GR 3x / 포지티브 필름 iPhone 13 mini 보정은 별도 표시 본론 7월 3일 이태원 길을 잘못 들어 녹사평 - 이태원 구간의 뒷골목을 좀 걸었다. 반짝반짝한 밤의 서울도 물론 마음에 들지만, 이렇게 소박한 서울도 좋다. 이태원 | 브라이리퍼블릭 다른 곳의 미트파이는 어떤지 궁금해서 다시 찾아본 브라이리퍼블릭 미트파이 자체는 Earthy(사전적인 구수하다랑은 또 다르다.)한 향이 짙어 우리의 취향은 아니었다. 대신 소시지가 죽여준다는 건 장점. 이태원이라 그런지 파이리퍼블릭 보다 외국인 손님이 월등히 많았다는 게 특징. 비슷한 요리를 하는 곳이니 둘 다 들러 비교해 보는 것도 나쁘지 않을 것 같다. 홍대 | 파이리퍼블릭 녹사평역 녹사평역 앞 신호등 노을이 정말 예뻤던 날이라 반..

사진 2022.09.21 0

[~2022.06.30] Today at Apple, 일상 (Ricoh GR 3x, iPhone 13 mini)

서론 RICOH GR 3x / 포지티브 필름 iPhone 13 mini 대부분 보정 없음(별도 표시) 더운데 참 많이도 다녔다. 본론 6월 4일 용산 | 아그라 셋 중에 가장 빨리 취직이 된 Whale이 산 저녁. 원랜 철없는 형들이 사줘도 몇번은 더 사줬어야 할 텐데... 나중에 배로 돌려 줄게 :) 아그라는 몇년 전에 연애 할 때 이태원점에 갔었는데, 당시에도 꽤 좋은 인상으로 기억되고 있어서 주변에 추천해 주곤 했었다. 예전 기억의 조금 뻣뻣한 탄두리 치킨이 아닌 적당히 촉촉한 탄두리 치킨이 예상 밖. 플레이팅도 조금 더 화려해 졌다. 불 같은 건 없었는데 말이지... 6월 7일 쿠폰으로 저렴하게 산 부엉이&올빼미 장식. 작고 소중한데 생각보다 디테일해서 귀엽다. 동생집에 우리집에 이모집에 뿔뿔이 ..

사진 2022.09.08 0

Diary - 삶은계란

more

KB스타뱅킹 6.2.6 통신사 인증 버그

서론 KB스타뱅킹 앱은 어째서인지 업데이트를 하면 높은 확률로 KB인증서 오류가 생긴다. 앱에 KB인증서가 존재하지만, 해당 인증서로 로그인은 할 수 없지만 해당 인증서를 사용하는 KB페이와 같은 계열사의 앱은 또 사용이 가능한 희한한 오류다. 이번엔 유독 짜증이 나서 컴플레인도 걸고 조금 버티다가 오늘에서야 재발급을 받기로 했다. 이번에 찾은 버그는 이 'KB인증서 발급' 과정 중 발생한 버그다. 본론 문제 발급 과정 중 개인정보를 다 입력하면 두 번째 사진과 같이 특정 번호로 문자를 하나 발송하게 된다. 문제는 그다음부터는 진행할 수가 없다. 해당 단계는 '모바일 인증서 가능 여부 확인 > 인증번호 요청'의 단계 사이에 문제가 발생한 경우로, 보낸 문자가 제대로 들어가지 않았거나 통신사 측의 전산 오..

버그찾기 2022.11.23 0

사라진 'Info.plist' 파일 다시 만들기

프로젝트를 생성하거나 기존에 생성된 프로젝트를 사용하려는 경우 필요한 'Info.plist' 파일이 보이지 않는 경우가 있다. 문제를 해결해 보자 해결법은 간단하다. Project > Targets > Info 로 접근한 뒤 Key에 'App Transport Security Settings'를 추가하고 하위에 'Allow Arbitrary Loads'를 추가한다. Value는 'YES'로 설정한다. 짠, 간단하게 'Info.plist' 파일이 다시 나타났다.

Xcode 2022.09.28 0

애플의 locale identifier

Localization 등으로 종종 쓰인다. BCP 47 code를 기반으로 하고 있으며, 어떤 언어가 있는지, 어떻게 표현하는지는 다음과 같다. BCP 47 ar-SA Arabic Saudi Arabia (사우디 아라비아) cs-CZ Czech Czech Republic (체코) da-DK Danish Denmark (덴마크) de-DE German Germany (독일) el-GR Modern Greek Greece (그리스) en-AU English Australia (오스트레일리아) en-GB English United Kingdom (영국) en-IE English Ireland (아일랜드) en-US English United States (미국) en-ZA English South Afric..

Xcode 2022.09.27 0

너도 알고 나도 아는 iOS 팁 06 : 사진들을 분리해 관리해 보자

서론 아이폰을 사용하다 보면 사진 앱이 금방 지저분해진다. 업무 목적이나 친구들과의 대화 등 여기저기서 저장한 사진들이 모두 사진 앱에 모이고, 이들을 구별할 수 있는 건 앨범이 유일하다. 그나마도 앨범은 사진들을 분리해서 저장하는 것이 아닌 '태그'의 개념에 가까워 난장판이 되는 건 정말 순식간이다. 애플에서는 당연하게 사진앱에 저장해 버리지만, 이걸 분리해서 관리하는 것이 필요할 때가 있으니 한번 그렇게 관리해 보자. 본론 준비물 파일 앱 ‎Files ‎Access and organise your files no matter where they’re located — on your device, in the cloud, on an external drive or file server— with Fil..

iOS & iPad OS 2022.08.17 0

Reviews

more

에어팟 프로 2 하루치 리뷰

개봉 예약 구매 첫날 주문한 에어팟 프로 2가 오늘 도착했다. 픽업도 공식 리셀러들의 일정도 모두 21일인 와중에 애플스토어 현장 구매는 20일에 진행돼 의외의 노이즈도 있었다. 나도 21일이 공식 출시인지 알았으니까... 박스의 이미지가 두 유닛이 평행하게 위치하던 것이 오른쪽 유닛이 살짝 위에 배치된 것으로 바뀌었다. 센서의 생김새나 벤트홀의 크기도 실제로 달라졌기 때문에 반영이 됐지만 가장 눈에 띄는 차이점은 유닛의 배치다. 비닐포장 없이 변경된 씰 방식의 포장을 하고 있다. 내용물은 여러 설명서와 보증서들, 본체, C to L 케이블, 이어 팁 박스다. 늘 그렇듯 있어야 할 것들만 예쁘게도 담아 놨다. 프로 1세대와 비교해 이어팁의 측면 메쉬가 변경됐다고 한다. 미세한 차이지만 소리에 영향이 있고..

IT 2022.10.22 0

애플 밀레니즈 루프 (진품 구별법 / 스페이스 블랙 + 실버)

서론 운동용으로 산 워치에 줄질이 웬 말이냐며 하지 않겠노라고 다짐한 나는 어딜 가고, 슬슬 올라가는 기온, 늘어가는 땀과 함께 밀레니즈 루프에 대한 관심이 늘어만 갔다. 어쩌다 보니 밀레니즈 루프 거래만 두 번을 진행했고, 한 번은 가품이었던 희한한 경험을 했는데, 이렇게 된 김에 둘이 어떤 차이가 있는지 비교라도 해 보려고 한다. 본론 물론 두 번의 거래가 모두 정상이라고는 말하지 않았다. 첫 번째 거래는 '스페이스 블랙 밀레니즈 루프'가 가품이었고, 두 번째 거래는 '그라파이트 밀레니즈 루프'가 '스페이스 블랙 밀레니즈 루프'였다. 결론적으로 내가 찾던 밀레니즈 루프는 '스페이스 블랙'이 맞으니 잘 된 일이지만 거래할 때는 조금 조심할 필요가 있겠다. 포장은 여타 다른 밴드들과 다를 바 없으니 바로..

ETC 2022.06.18 0

애플 스포츠 루프 (토네이도 그레이 그린 + 실버)

서론 기본 스포츠 밴드도 훌륭한 밴드지만 본격적인 운동용으로 사용하기엔 땀으로 인한 갑갑함이 조금 불편한 경우가 많다. 버튼식으로 체결하도록 돼 있으면서도 먼저 고리에 걸리고 착용하는 것이 아닌 버튼을 먼저 잠그고 남은 부분을 고리에 넣어 손목 안 쪽에서 정리하도록 돼 있기 때문에, 보기에 깔끔하다는 장점이 있음과 동시에 착용 시 낙하의 위험성 또한 존재한다. 버튼을 잠그는 방식도 구멍을 통해 이루어 지기 때문에 사용자의 손목에 '완벽히' 맞출 수는 없다. 이를테면 세 칸은 너무 크고 두 칸은 너무 조이는 애매한 상황이 오묘한 불편함을 만드는 경우가 있다. 그래서 애플워치를 구입하고 시작한 줄질의 시작은 '스포츠 루프'가 되겠다. 본론 애플워치 밴드를 비롯한 애플의 '액세서리'들은 일정한 주기로 제품을 ..

ETC 2022.06.01 0

애플워치 시리즈 6

서론 영원한 것은 없다고 했던가, 영영 끝날 것 같지 않았던 코로나도 슬슬 힘이 다하는 것 같다. 운동을 잘 하진 못하지만 좋아하는 하는 사람으로서, 졸업 전 까지는 새벽에 산책을 나가거나 점심이 소화가 되지 않는 날이면 저녁을 거르고 후배와 함께 운동을 나가곤 했다. 덤벨이나 풀업 등의 맨몸 운동은 그렇다 치고, 파트너가 사라지면서 뚝 끊게 된 유산소 운동은 묘한 미련과 함께 항상 마음 한 구석에 자리 잡고 있는 것이었다. 왼쪽 손목에는 대학교 입학때 샀던 시계가 항상 자리하고 있었다. 엄청 대단한 시계는 아니었지만 처음 가지게 된 나만의 시계다. 가는 팔목에 어울리는 꽤나 작은 알을 가지고 있었고, 이후 살이 더 빠지게 된 후 통줄로 감당이 되지 않아 직접 나토 밴드로 교체해 사용하기도 했다. 첫 시..

IT 2022.05.30 0