본문 바로가기

Swift XMLCoder swift 로 xml 을 파싱하는 예제를 검색했을 때 (한국어검색결과에서) 가장 많이 나왔던 것은 XMLParser, XMLParserDelegate 을 사용하는 예제였다. 시작태그, 끝태그, 바디 각각을 처리하는 3개의 parser 를 구현해야 하는 것인데, 너무 리던던트한 코드가 많고, 구현도 복잡했다. 그러다가, json 은 이미 Codable, Decodable 프로토콜을 이용하여 간단하게 파싱하는 방법을 제공( JSONDecoder )하고 있다는 걸 알았다. 그래서, swift xml parser codable protocol 같은 검색어로 검색해 봤더니 XMLCoder 라는 써드파티 라이브러리가 존재한다는 걸 알았고, 써봤다. 일단 아주 잘 정의된 xml 에 예제만 해 봤는데, 너무 좋은 것 ..
인코딩을 들여다보자 아주 오래전에 회사내부에서 공유하려 만들었던 글입니다. 인코딩을 들여다보자 다음과 같은 실험으로 인코딩을 들여다보자. 준비물 : notepad, madedit, python notepad 로 동일한 문자열 여러가지 인코딩으로 저장해 보기 기본 cp949 인코딩 영문은 한 글자당 한바이트가 되고, 한글 한 글자가 두바이트가 되는 cp949 (euc-kr) 인코딩 바이트 스트림이 저장된다. utf-8 인코딩 영문은 여전히 한 글자당 한바이트, 한글은 한 글자가 3바이트가 되어 저장된다. utf 16(le) 인코딩 영문, 한글 상관 없이 모든 글자 하나가 두바이트로 저장된다. utf 16(be) 인코딩 바로 위와 동일하게 영문, 한글 모두 두바이트씩으로 저장되지만, 두바이트의 순서가 le와 반대이다. made..
pyupbit WebSocketClient 예제코드를 실행할 때, TypeError: 'async for' requires an object with __aiter__ method, got Connect pyupbit 의 WebSocketClient 예제를 한번 실행해 보았다. 예제는 https://wikidocs.net/168437 에 있는 가장 간단한 예제이다. import multiprocessing as mp import pyupbit if __name__ == "__main__": queue = mp.Queue() proc = mp.Process( target=pyupbit.WebSocketClient, args=('ticker', ["KRW-BTC"], queue), daemon=True ) proc.start() while True: data = queue.get() print(data) 실행해 보았는데, 에러가 발생하였다. 에러는 다음과 같다. self._target(*self._args,..
SwiftUI : Primes Numbers 아주 간단하게 최초 100개의 소수를 구하는 swiftui 프로그램. 최초에 2 이상인 100개의 정수가 화면에 나열됨. 각 숫자 버튼을 누르면, 누른 숫자의 배수들을 제거함. 2부터 하나씩 버튼을 눌르면, 남아있는 숫자들이 소수들. import SwiftUI struct ContentView: View { @State private var primes = Array(2...30000) @State private var clicked = Set() var body: some View { VStack { ForEach(0..
100DaysOfSwiftUI - Day 24 마지막 과제가 아래와 같다. 커스텀 ViewModifier (와 View extension) 을 만드는데, 글씨체를 크고 푸른색으로 만들어 프로미넌트타이틀에 적당하게 바꾸는 모디파이어. Create a custom ViewModifier (and accompanying View extension) that makes a view have a large, blue font suitable for prominent titles in a view. 작성한 코드는 아래와 같다. import SwiftUI struct ProminentTitle : ViewModifier { func body(content: Content) -> some View { content .font(.largeTitle.bold()) ...
100DaysOfSwiftUI - Day 23 스위프트UI의 뷰는 class 가 아닌 struct 이다. 단순하다. 클래스 구조는 기본 클래스에도 자주 사용되지 않는 수많은 프로퍼티들이 달려있고, 이 기본 클래스를 상속받는 모든 뷰들도 이들을 다 가지고 있다. 스위프트UI의 뷰에 모디파이어가 붙으면, 이전에 만들어진 뷰에 대해 수정된 뷰가 된다. struct ContentView: View { var body: some View { Button("Hello") { print(type(of: self.body)) } .padding() .frame(width: 300, height: 100) .background(.yellow) } } 단순한 버튼에, padding, frame, background 3개의 모디파이어가 붙어 모양이 변경된 뷰. 클릭 이..
파이썬 베쎌함수 그래프 그리기 from scipy.special import jv import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 30, 0.02) # https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.jv.html#scipy.special.jv ys = [ jv(i, x) for i in range(3) ] for y in ys: plt.plot(x, y) plt.grid() plt.show() 베셀함수 (Bessel Function) 은 파이썬의 scipy.special 모듈의 여러 특수함수들 중에 하나인 jv 함수로 제공된다. 위 코드를 실행하여 만들어진 그래프는 다음과 같다.
100DaysOfSwiftUI - Day 19 간단한 컨버터 어플리케이션을 만들라는 숙제. 제곱미터를 평으로, 평을 제곱미터로 변환하는 macOS 어플리케이션을 작성하 보았다. 막상 만들어보려니 간단한 TextField, Text, Picker 의 사용법도 헷갈렸다. 아주 무식한 코드는 다음과 같다. import SwiftUI struct ContentView: View { @State private var fromValue : Double = 0 @State private var fromUnit = "제곱미터" @State private var toUnit = "평" @State private var toValue : Double = 0 var toValue_ : Double { if fromUnit == toUnit { return fromVal..