6월, 2023의 게시물 표시

iOS Play sound as click a button

이미지
운영 체제: macOS Ventura 13.4 사용 버전: Xcode 14.3.1, Swift, SwiftUI ​ iOS Play sound as click a button을 알아보겠습니다. ​ 버튼을 클릭할 때 소리가 재생되게 해보겠습니다. ​ 음악 파일을 끌어다 넣습니다. 그러면 아래와 같은 창이 나옵니다. ​ 반드시 Add to targets를 해줍니다. 아래와 같이 음악 파일이 들어가졌습니다. up_click.flac 파일이네요. 9 번째 줄처럼 AVFoundation을 import 합니다. 13 번째 줄에서 soundPlayer를 하나 만듭니다. AVAudioPlayer 타입입니다. 19 번째 줄에서 onAppear를 사용하여 초기화를 해줍니다. 20 번째 줄에서 soundPlayer가 nil 인지 확인합니다. 21 번째 줄에서 Bundle.main.url(forResource:, withExtension:)을 사용하여 url을 가져옵니다. forResource는 파일 이름을 넣어줍니다. withExtension에는 확장자를 넣어줍니다. 23 번째 줄에서 try를 사용하여 AVAudioPlayer를 정의합니다. 28 번째 줄에서 prepareToPlay()를 사용하여 재생할 준비를 합니다. Button을 클릭하면 소리가 나도록 합니다. 버튼 action 안에 play()를 넣습니다. 이제, 실행하면 소리가 납니다. ​ 만약 소리가 안 난다면, Target Membership이 체크되어 있는지 확인해 주세요. 끝. 카테고리: iOS

다른 사람을 보다

다른 사람을 보다 다른 사람을 볼 수 있을 때, 위대함은 시작된다. -노재화 『다이아몬드는 개똥밭에 굴러도 다이아몬드이다 5』, 부크크(2022), 20 쪽. 카테고리: My Book Story

iOS Minimum hit target size

이미지
운영 체제: macOS Ventura 13.3.1 사용 버전: Xcode 14.3 ​ iOS Minimum hit target size를 알아보겠습니다. ​ Human Interface Guidelines를 보면 버튼같이 사용자가 누를 수 있는 부분의 최소한의 크기를 알려줍니다. ​ ​ https://developer.apple.com/design/human-interface-guidelines/accessibility#Buttons-and-controls 44 x 44 pt가 최소 크기입니다. 이것보다 작을 때에는 사용자가 불편함을 느낀다고 합니다. ​ 끝. 카테고리: iOS

Algorithm Find a minimum distance in the array

이미지
알고리듬 Find a minimum distance in the array를 알아보겠습니다. 배열 안에서 어떤 지점에서 원소들 간의 거리가 최소인 경우를 알아봅시다. 1, 3, 9, 13, 105 이런 배열이 있다면 가장 최소가 되는 지점은 중앙값(Median)입니다. 위의 값은 9를 기점으로 각 원소의 거리를 측정하면 가장 짧습니다. 114가 가장 짧은 거리입니다. 만약 짝수 일 때는 어떻게 될까요? 가운데 양옆의 값의 평균을 구합니다. 그게 중앙값이 됩니다. 6이 중앙값이 되고, 거리는 18이 최소가 됩니다. 한 가지 재미있는 것은, 3~9 사이에 아무 값을 넣어도 거리는 최소라는 겁니다. 그 이유는 바로 6이 중앙값이지만, 3과 9 사이에 값들은 3 하고 가까워지면 동일하게 9에서 멀어지므로 값이 유지되고, 반대로 9와 가까워지면, 3 하고 멀어지면서 동일하게 유지됩니다. 코드로 봅시다. 3 번째 줄에서 중앙값을 구합니다. 끝. 카테고리: Algorithm

Algorithm linked list reverse order

이미지
알고리듬 linked list reverse order를 알아보겠습니다. ​ 링크드 리스트는 다음 구조체의 주소를 가지고 있는 구조체의 집합입니다. ​ 그림으로 보면 아래와 같습니다. 이 linked list를 역순으로 어떻게 만드는지 알아보겠습니다. ​ 노드는 이렇게 정의되어 있습니다. reverse_order라는 함수를 만듭니다. 이전 값을 연결해야 하므로 previous_node를 만들고, None을 넣습니다. 왜냐하면, 역순으로 보면 head가 마지막이기 때문입니다. current_node가 None이 아닐 때까지 반복합니다. 37 번째 줄에서 next_node에는 current_node의 next를 넣습니다. 38 번째 줄에서 기존의 current_node의 next의 연결을 끊고 previous_node로 연결합니다. 39 번째 줄에서 current_node를 previous_node로 만듭니다. 40 번째 줄에서 current_node를 next_node로 만들어주어 반복합니다. 끝나면 42 번째 줄에서 마지막 값이 저장된 previous_node를 반환합니다. 숨겨진 코드 때문에 아래 코드는 여러분 컴퓨터에서는 작동하지 않을 겁니다. 그냥 결과만 보여드릴게요. 끝. 카테고리: Algorithm

Algorithm Dijkstra algorithm without direction

이미지
알고리듬 Dijkstra algorithm without direction을 알아보겠습니다. ​ Dijkstra(다익스트라, 데이크스트라) 알고리듬은 최단거리를 구할 때 사용합니다. 각 지점 간의 거리를 계속해서 업데이트합니다. 이번 시간에는 방향성이 없는 경우를 다룹니다. ​ 개념은 간단합니다. 모든 경우에 대해서 경로 업데이트를 진행합니다. 이전에 지나갔던 길 보다 더 적은 값을 발견하면 다시 그 경로를 전체 탐색합니다. 더 이상 적은 값을 발견하지 못하면 프로그램은 종료되고 우리는 가장 최단 거리를 알게 됩니다. ​ ​ 다음과 같은 지도에서 3 -> 5로 가는 최단 경로를 구해봅시다. 각 지점 간의 관계는 다음과 같이 표시하기로 합니다. [시작 지점, 시간, 도착 지점] 예를 들어 3 번 지점의 경우 [3, 2, 1], [3, 5, 4]로 표현될 수 있습니다. ​ 지점은 총 5 개가 있고, 출발 지점은 3 번, 도착 지점은 5 번입니다. 맵은 다음과 같이 있습니다. 일단 모든 노드들의 관계를 저장할 리스트를 하나 만듭니다. adjacent로 만들었고, 노드의 수에 맞게 2 중 배열로 만듭니다. for 문으로 리스트에 해당하는 경로들을 넣어줍니다. 10 번째 줄에서 가는 경로를 넣고, 11 번째 줄에서 오는 경로를 넣습니다. searching이라는 함수를 만듭니다. 1 번째 줄에서 heapq, heappush, heappop을 불러옵니다. queue의 PriorityQueue를 사용해도 되는데, Thread 신경 안 쓰고 속도적인 측면만 필요하다면 heapq를 사용합니다. 5 번째 줄에서 시작 점에서 이동할 때 걸리는 모든 시간을 저장할 take_t

더 좋은 세상

더 좋은 세상 세상을 더 좋게 만드는 데에는 두 가지 방법이 있다. 하나는 나쁜 사람들을 잡아넣는 것이고, 다른 하나는 좋은 사람들을 많이 만드는 것이다. -노재화 『다이아몬드는 개똥밭에 굴러도 다이아몬드이다 5』, 부크크(2022), 12 쪽. 카테고리: My Book Story