Combine 살펴보기: Publisher

Publisher Declares that a type can transmit a sequence of values over time. 시간이 지남에 따라 값 시퀀스를 보낼 수 있는 타입을 정의함. Apple Documentation Combine의 퍼블리셔는 Observable의 개념이다. 퍼블리셔는 실제 구현이 아닌 Protocol로 정의되어 있다. RX의 경우에는 Observable Class의 구현을 제공하는 것과 차이가 있다. 따라서, Publisher는 여러 구현체를 가질 더보기…

Combine 살펴보기

2019년, 애플이 WWDC에서 컴바인을 소개하면서 컴바인을 다음과 같이 정의했다. that’s what Combine is, a unified declarative API for processing values over time. Combine is written in and for Swift. 컴바인은 시간에 따른 값을 처리하기 위한 통일된 선언적 API입니다. 컴바인은 스위프트로 작성이 되었고, 스위프트를 위한 것입니다. 또한, 공식 홈페이지에서는 Combine을 다음과 같이 더보기…

swift enum codable

enum에서 codable을 채택하면 바로 안 되고, 뜨는 상황이 발생한다. 이유는 enum이 rawValue로 String 또는 Int를 채택하지 않아서 그렇다. (json 데이터라고 생각하면 당연한 것 같다.) 별도의 인자가 없는 경우에는 아래와 같이 수동으로(?) 인코딩, 디코딩을 해주면 된다. (사실 그냥, 문제가 없다면 rawValue를 채택하는 게 좋아보인다.) 만약 enum의 case에서 인자를 받았다면 아래의 stackoverflow를 더보기…

SwiftUI View Paging

iOS 14 이상 스위프트UI의 신기능으로 TabView를 이용해서 페이징을 할 수 있는 기능이 추가되었다. 아래 동영상처럼 UICollectionView의 isPagingEnabled의 대체 기능이다. ScrollView를 horizontal로 설정하고, TabView를 만든 후에 안에서 View들을 생성한다. 이때, 모디파이어를 이용해서 tabViewStyle을 PageTabViewStyle()로 해주면 간단하게 만들 수 있다. (…근데 왜 이게 TabView로 기능이 들어간걸까?… 이름을 보면 매칭이 되긴하는데… 뭔가 흠…) 더보기…

j4105 jellyfin transcoding이 잘 안되는 경우

J4105 하드웨어 성능이 크게 나쁘지 않아서 동영상 한 두개 정도는 소프트웨어로도 실시간 트랜스코딩을 할 수 있다. 다만, cpu 점유율이 너무 높기 때문에 기본으로 제공되는 하드웨어 트랜스코딩을 이용하면 더 쾌적하게 이용할 수 있다. 젤리핀, 우분투 20.04 환경에서 하드웨어 트랜스코딩을 VAAPI로 설정하면 한 번에 잘 되지 않는데 두 가지 이유가 있는 것 더보기…

vscode server reverse proxy 설정

vscode server를 설치하고 reverse proxy를 이용해서 SSL이 적용된 도메인으로 접근하려고 했는데, 잘 안 됐다. 이유는 websocket 연결 때문이었다. vscode를 https 모드로 활성화한 후에 공인 인증서가 아니어도 프록시가 작동하게 하는 모듈(vscode에서 기본 제공하는 인증서가 공인인증서가 아니므로), 그리고 websocket을 rewrite하는 코드와 apache2의 proxy_wstunnel을 활성화하면 잘 작동한다. 전체적으로 아래와 같은 설정을 자신의 설정에 더보기…

왜 CNAME은 ROOT에서 쓸 수 없는가? PTR 레코드란 무엇인가?

개요 도메인 등록 회사를 구글 도메인으로 바꾸면서 도메인의 루트에 CNAME을 등록할 수 없었다. 나는 집에서 DDNS을 이용해서 서버를 돌리고 있기 때문에, ip주소를 등록하는 A 레코드는 이용하기 어려웠다. 구글 도메인 레코드 등록 중에 도메인을 받는 레코드인 PTR 레코드가 있어 DDNS 도메인을 등록해봤다. CNAME이 아닌 PTR로 DDNS 주소를 등록하니 잘 동작했다. CNAME 더보기…

라인 앱 개발 챌린지 후기

라인 전환형 인턴을 탈락하고 ssafy에서 열심히 공부하고 있던 와중에(라고는 하지만, 임베디드 공부는 커녕 HTML 만 주구장창 시킨다…. 반 사람들이 좋은 사람들이 아니었으면 정말 질렸을 듯.) iOS 개발이 하고 싶어 맥북을 구매했다. 개인적으로 책장의 책 목록을 정리할 수 있게 해주는 어플리케이션을 SwiftUI로 작성하고 있었는데, 라인 앱 개발 챌린지가 올라와서 한 10분 더보기…

SwiftUI CollectionView

SwiftUI는 대부분의 UIKit에서 쓰던 컴포넌트들을 보다 편리하게 이용할 수 있지만, 아직 몇몇 컴포넌트들은 구현되지 않았습니다. SwiftUI에서 구현되지 않은 컴포넌트 중 UIKit에서 유용하게 사용하는 CollectionView를 어떻게 SwiftUI 프로젝트에서 사용할 지 알아봅시다. 제가 찾아낸 방법은 두 가지입니다. 첫 번째로는 UIViewRepresentable을 이용하는 것이며, 두 번째는 SwiftUI의 List를 이용한 것 입니다. ScrollView와 VStack으로도 스크롤하면서 더보기…

우분투 19.10에서 nvidia 환경에서 wayland 사용하기

대부분의 nvidia 그래픽카드 사용자는 최신 리눅스에서 wayland를 바로 사용할 수 없다. nvidia가 표준 인터페이스인 GBM을 사용하지 않고, EGLStreams라는 독자 인터페이스를 사용하기 때문이다. (대충 리누스 토르발스 손가락 욕 짤이 필요하다.) 다행이도 가장 많이 쓰는 데스크탑 환경 중 하나인 gnome에서는 3.32버전 부터 EGLStreams를 지원하게 되었고, 3.34에서는 어느 정도 안정적으로 동작하는 것 같다. 더보기…