tag:blogger.com,1999:blog-22935581189092760902024-03-06T10:14:55.945+09:00Seorenn SIGSEGVTECHNOTE from a Disabled BrainSeorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.comBlogger592125tag:blogger.com,1999:blog-2293558118909276090.post-7833759309162766502018-12-28T18:26:00.000+09:002018-12-28T18:26:26.825+09:00NSTabViewController Cheatsheet이 글은 NSTabViewController 혹은 NSTabView 에 관련된 몇 가지 팁을 정리하기 위한 목적으로 별 다른 규칙 없이 무작위(?)로 업데이트 될 수 있는 글입니다.
<br>
<br>
<a href="http://seorenn.blogspot.com/2018/12/nstabviewcontroller-cheatsheet.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-5992041895213280772018-10-10T14:09:00.000+09:002018-10-10T14:11:00.747+09:00타임머신 백업을 일부 혹은 전부 삭제하는 방법 | macOSmacOS를 모하비(Majave)로 올리고 난 뒤 얼마 후 타임머신 백업이 계속 실패하는 현상이 발생 했습니다. 당시 2TB 외장하드를 타임머신 백업용으로 세팅해서 수 년 간 아무 문제 없이 잘 써 왔었기 때문에 좀 이상하다는 점을 느꼈습니다. 이 글은 이 문제를 해결하기 위한 내용을 다룹니다.<br>
<br>
<a href="http://seorenn.blogspot.com/2018/10/macos-timemachine-how-to-delete-old-backup.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-25768797384987602392018-08-07T12:06:00.000+09:002018-08-07T15:10:57.332+09:00Python 의 Filter / Map / Reduce 그리고 Comprehension파이썬(Python)은 잘 쓰지 않다보니 이 함수형프로그래밍 함수의 대명사 3종의 사용법이 영 익숙해지지 않는다. 그래서 오랜만에 본 블로그 취지(?)로 돌아와서 이 함수들에 대해 간략히 메모한다. 더불어, 이제는 Python 3 로 넘어갈 시점이라 생각해서 모든 정보를 Python 3.7 기준으로 찾아봤다.<br>
<div>
<br></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIHyYbqn3RR1bjGn4y9_e6vaqfep5G7B9WlZBxa2Usk2sUZEs6BLPDyiXmzjKewWuHBFPt6lvMOc40YmWUIWPiAyPpkuCKRfna8CcBR4yEQYy9_SUzjy-x1Lt3KEXyK_el5q_n-vmxvFI/s1600/Screen+Shot+2018-08-07+at+10.52.10.png" imageanchor="1"><img border="0" data-original-height="90" data-original-width="596" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIHyYbqn3RR1bjGn4y9_e6vaqfep5G7B9WlZBxa2Usk2sUZEs6BLPDyiXmzjKewWuHBFPt6lvMOc40YmWUIWPiAyPpkuCKRfna8CcBR4yEQYy9_SUzjy-x1Lt3KEXyK_el5q_n-vmxvFI/s1600/Screen+Shot+2018-08-07+at+10.52.10.png"></a></div>
<div>
<div style="text-align: center;">
<span style="font-size: x-small;"><i>글자만 있으면 썰렁해서 넣어보는 이미지 -_-</i></span></div>
<div>
</div></div><a href="http://seorenn.blogspot.com/2018/08/python3-filter-map-reduce.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-6248330676271279422018-05-15T11:19:00.001+09:002018-05-15T11:19:37.874+09:00문자열을 문자 단위로 다루기 | Swift스위프트(Swift) 의 문자열(String) 타입은 다년 간의 다듬질(?)을 거쳐 완성될 대로 완성된 말 그대로 완성체의 문자열을 표현하기 위한 방법을 이미 제공합니다. 그런데 C 나 Python 등 다른 언어와 비교할 때는 좀 까다로운 녀석이라고 느낄 때도 있습니다.<br>
<br>
<a href="http://seorenn.blogspot.com/2018/05/swift-string-index.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-2821269432657342112018-05-08T17:03:00.002+09:002018-05-08T17:03:29.847+09:00Range, 범위에 대한 이야기 | SwiftSwift 의 Range 기능은 1.0 이라는 초창기 버전 부터 존재했으며 Swift 버전이 올라감에 따라 여러 가지 기능이 붙거나 세분화 되었습니다. 그런데 제 블로그에서는 별도로 정리를 한 글이 없어서 이 범위(Range)에 대한 것을 정리해 봅니다.<br>
<br>
참고로 이 글은 Swift 4.0 을 기준으로 쓰여 졌습니다.<br>
<br>
<a href="http://seorenn.blogspot.com/2018/05/swift-range.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-88540051338722910882018-05-01T15:08:00.002+09:002018-05-01T15:08:35.859+09:00Result of call to ... is unused | Swift언제 부터인지 기억나지는 않지만 스위프트(Swift)에서 값을 반환(return)하는 함수나 메소드 등을 그냥 호출하면, 즉 리턴값을 받지 않고 그냥 호출하는 코드에서는 아래와 같은 경고가 뜹니다.
<br>
<blockquote>
Result of call to (Some Function or Method) is unused
</blockquote>
메시지만 봐서는 별거 아닌 것일지도 모릅니다. 당연히 내용도 간단하고 해결법도 단순해 보입니다.<br>
<br>
<a href="http://seorenn.blogspot.com/2018/05/swift-result-of-call-is-unused.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-47937557428129882262018-04-23T16:02:00.000+09:002018-04-23T16:02:04.623+09:00연산형 지역 변수 (Local Computed Variables) | Swift우연찮게 미디엄 뉴스레터에서 보게 된 글에서 약간의 충격(?)을 받게 된 것이 있는데 바로 제목의 연산형 지역 변수입니다. 말이 잘 이해가 안 될 수도 있는데 영문 표현인 Local Computed Variables 의미를 거의 직역한 것이라서 애매하긴 합니다. 적당한 한국어 표현이 떠오르지 않네요.<br>
<br>
하여간 매우 단순한 기능이지만 어떤 면에서 아주 유용하기에 간단하게 소개해 봅니다.<br>
<br>
<a href="http://seorenn.blogspot.com/2018/04/local-computed-variables-swift.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-31534234619549210532018-04-09T15:38:00.000+09:002018-04-09T16:52:22.333+09:00[Objective-C] Block implicitly retains 'self' 경고 해결하기Xcode 를 9.3 으로 업데이트 하기 전만 해도 별 문제 없던 프로젝트가 갑자기 아래와 같은 경고를 내뿜기 시작 했습니다. <br>
<blockquote class="tr_bq">
Block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior</blockquote>
블록이 self 를 잡아 물고 가버릴 수도 있는데 명확하지 않다는 식으로 이해가 됩니다. 그런데 경고가 발생한 위치를 보면 위 경고 메시지가 뭘 원하는 것인지 도통 이해 할 수가 없었습니다. 경고라 가볍게 넘어 갈 수도 있겠지만 일단 해결하는 방법을 알아봅시다.<br>
<br>
<a href="http://seorenn.blogspot.com/2018/04/objective-c-block-implicitly-retains.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-6570123219903777702018-02-28T15:40:00.000+09:002018-02-28T15:40:21.940+09:00소수점 제거 함수 삼총사 ceil(), floor(), round()이번 글은 굉장히 유명한 수학 함수 3가지를 적어보는 글입니다. <i>그리고 오랜만에 구어체가 아닌 존대말(?)로 쓰는 글이기도 하겠네요.</i><br>
<div>
<br></div>
<div>
이번에 언급하는 함수 세 가지, 즉 ceil(), floor(), round() 함수는 C 언어 시절부터 쓰이던 수학 함수 중 일부입니다. 이 함수 들은 현대의 거의 대부분의 언어에서도 대부분 동일한 이름으로 제공될 정도로 필수 함수이지요.</div>
<div>
<br></div>
<div>
이 함수들의 용도 및 활용법을 Swift 기준으로 정리해 보겠습니다. <i>물론 다른 언어에서도 거의 동일하니 언어가 의미가 있는지는 잘 모르겠지만요.</i></div>
<a href="http://seorenn.blogspot.com/2018/02/ceil-floor-round.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com3tag:blogger.com,1999:blog-2293558118909276090.post-50717870029721401502018-02-20T12:06:00.000+09:002018-05-15T16:21:10.845+09:00NSButton Cheatsheet이 글은 NSButton 을 사용하면서 필요로 했던 체감형 팁을 정리하는 글이다. 상황(?)에 따라 추가 업데이트가 될 수 있다.
<br>
<a href="http://seorenn.blogspot.com/2018/02/nsbutton-cheatsheet.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-35026872608868599662018-02-20T12:05:00.001+09:002018-02-20T12:10:39.183+09:00NSTextField Cheatsheet이 글은 NSTextField 에 관한 여러 체감형(?) 팁을 모은 것이며 관련된 지식 습득 시 업데이트 될 가능성이 있다. ;-)
<a href="http://seorenn.blogspot.com/2018/02/nstextfield-cheatsheet.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-55635027669192138932018-01-26T15:49:00.000+09:002018-05-15T16:19:37.886+09:00Swift struct 값의 프로토콜을 제대로 판단하지 못 하는 문제아직 세상은 넓고도 험하다. 코딩을 하던 도중 아래 오류의 문제가 제법 골머리를 썩였다.
<br>
<blockquote>
Could not cast value of type ‘_SwiftValue’ to ‘SomeProtocolName’
</blockquote>
이 글은 위의 오류와 관련된(?) 문제를 해결하던 과정에서 나온 오랜만의 삽질을 정리한 내용이다.
<br>
<a href="http://seorenn.blogspot.com/2018/01/swift-struct.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-70904015473250484782017-10-11T18:39:00.001+09:002018-05-15T16:21:10.890+09:00어느날 @objc Inference 와 관련된 경고를 보았다Xcode 9 이전에 개발했던 프로젝트를 Xcode 9 에서 Swift 4 기반으로 변경한 적이 있다. 이 과정에서 단 한줄의 코드 변경도 없었고, 당연하게도 해당 프로젝트는 별 문제는 없이 잘 동작하였다.
<br>
<br>
다만 약간 찝찝하게도 빌드 도중 아래와 같은 색다른(?) 경고를 보게 되었다.
<br>
<blockquote>
The use of Swift 3 @objc inference in Swift 4 mode is deprecated. Please address deprecated @objc inference warnings, test your code with “Use of deprecated Swift 3 @objc inference” logging enabled, and then disable inference by changing the "Swift 3 @objc Inference" build setting to "Default" for the "TARGET NAME" target.
</blockquote>
해석하자면 뭐라고 할까... 그냥 구버전 방식의 @objc 를 사용하는 것이 Swift 4 에선 호환이 안되니 무슨무슨 설정을 바꿔라 이런 의미로 해석된다. 하여간, 이 글은 이 경고를 해결하는 방법을 설명한다.
<br>
<a href="http://seorenn.blogspot.com/2017/10/objc-inference.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com2tag:blogger.com,1999:blog-2293558118909276090.post-74056850280413978962017-08-01T19:01:00.002+09:002017-08-01T19:01:36.595+09:00Xcode 9 눈에 띄는 신기능들 (영상)Xcode 9 을 제대로 찝적거릴(?) 기회가 생겨서 신기능을 조금씩 느껴보고 있다. 이왕 이렇게 된거 이런 기능들을 영상으로 한번 찍어보자 해서 녹화해서 편집해 봤다.
<br>
<a href="http://seorenn.blogspot.com/2017/08/xcode-9.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-32174371118145099182017-07-26T11:57:00.000+09:002017-07-26T11:57:26.796+09:00Swift 4 에서 KVO 사용해보기Swift 4 부터는 <a href="http://seorenn.blogspot.kr/2017/07/kvo-key-value-observing.html" target="_blank">KVO (Key-Value Observing)</a> 를 쓰기가 이전보다 약간 더 편해질 예정이다.<a href="http://seorenn.blogspot.com/2017/07/swift-4-kvo.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-62640143692807157562017-07-25T14:08:00.003+09:002017-07-26T11:58:34.749+09:00KVO (Key-Value Observing) 소개KVO 는 Key-Value Observing 의 약자, 즉 특정 키의 값의 변화를 감지하기 위한 기능이다. Objective-C 를 위해 만들어진 기능이라 등장한지는 제법 되었지만, 현재의 앱 개발 패러다임에 있어서 - 모델(Model)의 변화를 뷰(View)에 반영하기 위함 등 - 값 변화를 인식하는 것은 굉장히 중요하기 때문에 무시할 수는 없는 기능인 것 같다.<br>
<br>
<a href="http://seorenn.blogspot.com/2017/07/kvo-key-value-observing.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-46720364545713475562017-06-13T10:41:00.000+09:002017-06-13T10:50:54.093+09:00눈에 띄는 Swift 4 변경점들 (Xcode 9 첫 Beta 기준)최근에는 좀 게으르게(?) 지내고 있다가 WWDC가 온줄도 모르고 Xcode 9 의 베타가 나오는 줄도 모르고 허송세월 보내고 있었다. 잠깐 정신을 차리고 Swift 4 에 관련된 내용을 간단히 정리해 볼까 한다.
<br>
<a href="http://seorenn.blogspot.com/2017/06/swift-4-xcode-9-beta.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-51578245531686692382017-06-13T10:36:00.002+09:002018-11-01T15:25:36.923+09:00Swift 4 - Codable / JSONDecoder / JSONEncoder개인적으로 꼽는 Swift 4의 가장 유용한 업데이트 중 하나로 Codable 프로토콜 및 JSONDecoder / JSONEncoder 를 꼽고 싶다. JSON 이라는 이름이 가지는 의미야 유명하니 무슨 말인지는 다들 알 것인데, Codable 이라는 프로토콜은 타입과 JSON을 언어 차원에서 묶어주는 방법을 제공해 준다는 점에서 파격적(?)이다.<br>
<br>
이 글은 이 새로운 기능에 대해 겉(?)만 핥으려는 내용이다.
<br>
<a href="http://seorenn.blogspot.com/2017/06/swift-4-codable-jsondecoder-jsonencoder.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-11849211696965513782017-05-10T16:43:00.000+09:002017-05-10T16:43:57.689+09:00[iOS] 기묘한 에러메시지 "Unable to insert COPY_SEND"오랫만에 옛날에 만들어 둔 iOS용 앱 프로젝트를 수정할 일이 생겼다. 그런데 문제를 수정하고 디버그 모드로 디바이스에 넣어서 실행시켜보니 괴상한 오류메시지가 로그 창에 찍히기 시작했다.
<a href="http://seorenn.blogspot.com/2017/05/ios-unable-to-insert-copysend.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-29964056808919669412017-04-12T17:54:00.000+09:002018-05-15T16:21:10.797+09:00CALayer 와 CAAction<h2>
Implicit Animation</h2>
이전에 <a href="http://seorenn.blogspot.kr/2017/02/calayer-animation-core-animation.html" target="_blank">CALayer 애니메이션</a>에서 언급한 방법들은 Explicit Animation 즉 명시적인 애니메이션이라고 불린다. 이와 반대 개념으로 암시적인(Implicit) 애니메이션도 있을 터인데 이 암시적 애니메이션은 레이어의 동작(Behavior)에 의해 발동되는 애니메이션이다. 쉽게 말해서 프로퍼티 등에 값을 넣으면 애니메이션이 발동하면서 변화되는 모습을 보여준다. 프로그래머가 직접 애니메이션을 명령하지 않았지만 자동으로 애니메이션이 동작하였기에 암시적이라고 부르는 것이다.
<br>
<pre>view.layer.contents = UIImage(named: "flower").cgImage
</pre>
위 코드는 뷰 레이어에 이미지를 표시하는 기초적인 코드이다. 그런데 이 코드 이전에 이미 contents 에 이미지가 올라가 있는 상태라면 다른 이미지로 바로 바뀌지 않고 페이드 애니메이션, 즉 이미지가 서서히 나타나는 듯한 효과로 변경(transition)된다. 물로 OS나 기타 조건에 의해 바뀔 수는 있으니 절대적인 것은 아니다. 중요한 점은 <b>그저 레이어의 프로퍼티를 바꿨는데 애니메이션이 발동된다</b>는 것이다. 이게 바로 암시적 애니메이션이다.
<br>
<br>
<a href="http://seorenn.blogspot.com/2017/04/calayer-caaction.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-20547580230974794952017-03-28T16:46:00.002+09:002018-05-15T16:19:50.461+09:00Swift 3.1 릴리즈오늘 Xcode 8.3 이 정식으로 릴리즈 되면서 Swift 3.1 도 함께 정식 릴리즈 되었다. 그래서 변화점을 간략히 정리해 보려고 한다. 주관적(?)으로 정리할 것이기 때문에 정확한 내용은 영어 울렁증(?)이 없다면 <a href="https://swift.org/blog/swift-3-1-released/" target="_blank">공식 사이트의 릴리즈 노트</a> 를 보는 것이 좋을지도 모른다.
<a href="http://seorenn.blogspot.com/2017/03/swift-31.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-91674752072068537322017-03-21T14:03:00.000+09:002018-05-15T16:28:18.121+09:00Notification Snippets복잡한 뷰 컨트롤러들을 다루면서 여기 저기 소속된 데이터를 다루려고 할 때 소유권 때문에 곤란함을 느낄 때가 많았다. 이럴 때 NotificationCenter 를 이용해 알림(Notification)을 던지는 방식으로 컨트롤러 객체들끼리 통신을 하기도 하는데, 뭐 하여간 이런 저런 여러 사유로 노티피케이션(Notification 혹은 NSNotification)을 사용할 일이 종종 있다.<br>
<br>
하지만 항상 쓸 때 마다 느끼는데, 이 알림(Notification)의 이름(Name)을 찾는데 곤혹을 느끼곤 한다. 왜나하면 한군데에 정리된 것이 아닌 전역 상수 형태로 선언된 것이 대부분이기 때문이다.<br>
<br>
물론 개인이 구현하는 프로젝트에서 쓸 Notification 은 굳이 이런 전통을 따를 필요는 없다. 누구나 한번 쯤은 해 볼 만한 Notification Snippets 를 한번 만들어 보자.
<br>
<a href="http://seorenn.blogspot.com/2017/03/notification-snippets.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-86481134577030613572017-02-28T16:56:00.000+09:002018-05-15T16:28:17.936+09:00CATransition Animation (Core Animation)레이어 이야기를 쓰다가 계속 삼천포로 살짝 빠지는 느낌이 들지만, 이번 글은 레이어 트랜지션(Transition), 즉 장면전환 애니메이션에 관한 글이다.<br>
<br>
<a href="http://seorenn.blogspot.com/2017/02/catransition-animation-core-animation.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0tag:blogger.com,1999:blog-2293558118909276090.post-85435242345751334782017-02-21T12:09:00.001+09:002018-05-15T16:28:17.890+09:00CALayer Animation (Core Animation)CALayer 에 관한 글을 적으면서 애니메이션에 대해 언급할 필요가 생겼는데 간략히 하기에는 양이 너무 많은 것 같다. 그래서 이번엔 CALayer 애니메이션에 관한 것을 별도로 정리하려고 한다.<br>
<br>
CALayer 의 이름에서 볼 수 있는 머릿글자 CA 는 Core Animation 의 약자이다. Quartzcore 라는 거대한 시스템의 일부이기도 한 이 Core Animation 은 레이어 애니메이션을 위한 기능들로 구성되어 있다.<br>
<br>
전체를 설명하기에는 양의 방대함도 그렇고 개인적인 지식도 문제가 되기 때문에 애니메이션과 관련된 Quartzcore 의 몇 클래스만을 정리해 본다.<br>
<br>
<a href="http://seorenn.blogspot.com/2017/02/calayer-animation-core-animation.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com3tag:blogger.com,1999:blog-2293558118909276090.post-40437411565815498682017-02-15T12:14:00.004+09:002018-05-15T16:28:16.921+09:00CALayer - CAShapeLayerCAShapeLayer 는 Shape 를 그리기 위한 CALayer 기반 클래스이다. 다르게 말하면 다각형 혹은 폴리곤을 그리기 위한 용도라고 볼 수 있다.<br>
<br>
<a href="http://seorenn.blogspot.com/2017/02/calayer-cashapelayer.html#more">자세히 읽어보기 »</a>Seorennhttp://www.blogger.com/profile/05194885306930554654noreply@blogger.com0