본문 바로가기
반응형

기술적인 이야기301

맥 사용자의 생산성이 PC 사용자보다 정말 좋은가? 살짝 논란이 있을 법한 제목이네요. 이런 흥미로운 제목의 글은 아래 글을 통해 먼저 접하게 되었습니다. IBM "맥 사용자가 윈도우PC 사용자보다 생산성이 좋다" 80년대 후반~2000년대 초반까지 국내 애플 매킨토시 사용자들은 마이크로소프트 윈도우 OS가 깔린 PC를 '아범' PC라고 불렀다. 'IBM 범용'의 준말인데 아이-비-엠이라는 발음과도 비슷해서 마치 슬랭처럼 쓰이곤 했다.그만큼 매킨토시의 반대편에 있는 PC 진영을 대표하는 기업으로 소프트웨어는 MS, 하드웨어는 IBM이었다. IBM 호환 PC라는 말이 PC 시장에서 표준처럼 통용되던 시절... techit.kr 이 글이 참조하고 있는 원문은 아래의 영문 글입니다. IBM: Mac users perform better at work compa.. 2019. 11. 22.
배경을 지워주는 remove.bg 최근 포토샵이 인공지능 외곽선 따기 기능을 선보여서 살짝 놀란 적이 있었습니다. 이 기능을 이용하면 배경 지우기 정말 편하겠다면서 말이지요. 그런데 이것과 비슷한 기능의 웹사이트도 있습니다. Remove Background from Image – remove.bg Remove Image Background: 100% automatically – in 5 seconds – without a single click – for free. www.remove.bg 이름하여 remove.bg, 번역 그대로 배경(background)을 지워주는 서비스입니다. 정말 이름대로 동작하는지 시험 삼아서 제가 직접 찍은 누군가(?)의 사진을 이용해서 시험해 봤습니다. 굉장합니다. 거의 완벽하게 배경을 날려버렸습니다. 물론 .. 2019. 11. 21.
키베이스(Keybase) 이번부터는 한 글에 여러 링크를 '흥미로운 링크' 라는 한 글에 몰아넣는 대신 개별 링크들에 대해 아주 약간 더 살을 보태어서 별도로 '이건 뭐지?' 라는 시리즈로 정리하려고 합니다. 왜냐하면 블로그 글 개수를 늘ㄹ...아 아닙니다... 어쨌든 변경 후 첫 글은 키베이스라는 서비스입니다. keybase.io 굳이 한 줄로 정리하자면 슬랙과 비슷한 채팅 및 파일 공유 서비스입니다. 다만 차이점으로 GPG로 신원을 보증해야 한다는 점이 특징입니다. 회원 가입을 하면 이렇게 PGP 키를 등록하라고 합니다. 저는 쓸 생각이 없어서 여기에서 멈췄습니다. GPG키를 등록하면 무엇이 좋을까요? GPG 서명은 말 그대로 자신을 인증하는 목적으로 사용합니다. 즉, 자신의 계정이 해킹 당해도 사칭이 어렵습니다. 물론 자신.. 2019. 11. 19.
애플 16인치 맥북프로 공식 출시 역시 애플은 알고 있었습니다. ESC키가 사라진 것이 얼마나 불편한 것인지를 말이죠. 그리고 그것 또한 홍보로 써먹는 애플을 보며 아 이게 애플이지 하면서 마음속에서 욕을 하고 있기도 합니다. 😏 15인치를 단종시키고 새롭게 등장한 16인치 모델은 사이즈는 기존 15인치와 동일하면서도 베젤을 줄여서 화면 크기를 키운 참 바람직한 방식으로 진화했습니다. 거기다 물리 ESC 키를 달고 나왔고 커서 키 또한 바람직한 배치로 바뀌었습니다. 문제가 많던 나비식 키보드를 버리고 다시 가위식으로 돌아오기도 했습니다. 그뿐만이 아닙니다. 이제 정말 프로급으로 부를 수 있을 만큼 기본 사양이 좋아졌습니다. 최소 모델이 6 코어 CPU에 512GB SSD, 16GB RAM으로 구성되어 있습니다. 이 정도면 딱히 메모리나 .. 2019. 11. 13.
[Swift 5.1] Identifiable (SE-0261) 이 변경점은 SE-0261 Identifiable Protocol에서 제안된 내용입니다. 이번에 새롭게 추가된 Identifiable 프로토콜은 아래처럼 생겼습니다. protocol Identifiable { associatedtype ID: Hashable var id: ID { get } } 그냥 단순하게 ID 하나를 구현하는 것임을 알 수 있습니다. 목적은 매우 단순합니다. 말 그대로 ID를 구현하는 것입니다. 다른게 비유하자면 신원 확인 가능성을 구현하는 것입니다. 대한민국 사람이라면 쉽게 이해할 수 있을만한 것이 바로 주민등록번호를 들 수 있을 것 같습니다. 아래의 예는 '한국인'이라는 구조체에 이 Identifiable을 구현하는 예제입니다. struct Korean: Identifiable .. 2019. 11. 12.
흥미로운 링크들 11월 1주차 지난 주도 뭔가 많았던 한 주 였군요. Highlights from Git 2.24 Git 2.24 의 변화점을 정리한 블로그입니다. 사용성에 큰 변화는 없어보이네요. You Cannot Submit an Electron 6 (or 7) App to the Apple Store 일렉트론(엘렉트론) 6, 7 버전으로 만들어진 앱들이 앱스토어 심사에서 거부되고 있다는 소식입니다. 사유는 non-public API를 사용했기 때문이라네요. 물론 비공개 API의 사용은 애플 측에서 충분히 거부할 만한 사유가 될 수 있습니다. 보안 등의 사유로 말이지요. 다만 해당 버전만 문제인건지 일렉트론 전체를 거부하고 있는 것인지는 명확하진 않네요. 일단 관련 업데이트가 있나 지켜봐야 할 것 같습니다. 자바스크립트의 메모리.. 2019. 11. 11.
[Swift 5.1] 리턴 생략 가능 (SE-0255) Swift 5.1에 추가된 매우 단순하면서도 편리해진 기능으로 SE-0255 Implicit returns from single-expression functions 제안으로 추가된 기능을 살펴봅시다. 아래와 같은 단순한 코드를 살펴봅시다. var three: Int { return 1 + 2 } 3이라는 값을 돌려주는 three라는 계산형 프로퍼티를 선언한 예제입니다. 뭐 특별한 것이 없어 보이죠? Swift 5.1에서는 위 코드를 아래처럼 좀 더 단순화시킬 수 있습니다. var three: Int { 1 + 2 } 보시다시피 return문이 보이질 않습니다. 이 기능은 단순한 수식 문의 경우 return 없이도 정의할 수 있게 만들어 줍니다. 굳이 프로퍼티가 아니라 함수 등에도 사용할 수 있습니다. .. 2019. 11. 5.
흥미로운 링크들 10월 5주차 지난주는 아이폰, 에어팟을 비롯하여 정말 다양한 개발 및 비개발 관련 소식을 접할 수 있었습니다. 아이폰 11 프로: 카메라가 그렇게 좋나요? 아이폰 11 프로의 그 기괴한 모습에 대한 악평이 갈수록 줄어들고 있다는 느낌이 듭니다. 그 모습에 익숙해져 가는 것일까요? 어쨌든 카메라는 정말 좋아진 것 같습니다. 각종 센서의 집약체, 에어팟 프로 노이즈 캔슬링과 커널형 그리고 높아진 가격으로 화제를 모으고 있는 에어팟 프로의 리뷰입니다. 뭐 대단하긴 하네요. 좀 더 싸졌으면 좋겠지만요. Slack client for emacs 어? 네? 슬랙이요? IRC가 아니구요? 과연 슬랙의 웹 기반 텍스트에 이맥스의 기능만으로 얼마나 대응할 수 있을지는 모르겠지만 눈길을 끄는 프로젝트네요. 😲 7M Adobe Crea.. 2019. 11. 4.
[Swift 5.1] Static Subscript (SE-0254) 이 글은 Swift 5.1에 제안된 SE-0254 Static and class subscripts 업데이트를 살펴보는 글입니다. 결론부터 말해서 이제 subscript를 static 하게 쓸 수 있습니다. 이번에도 다짜고짜 예제로 살펴봅시다. struct HTTPStatus { private static var map = [Int: String]() static subscript(_ code: Int) -> String? { get { map[code] } set { map[code] = newValue } } } 위 예제에서 subscript가 static으로 선언되어 있습니다. 따라서 이제 인스턴스화 시키지 않고도 아래처럼 접근할 수 있습니다. HTTPStatus[200] = "Ok" HTTPSta.. 2019. 10. 31.
[Swift 5.1] 키 패스를 이용한 동적 멤버 찾아보기 (SE-0252) 이 글은 SE-0252 Key Path Member Lookup 제안을 통해 Swift 5.1에서 확장된 동적 멤버 찾아보기(dynamic member lookup) 기능을 간략히 살펴보는 글입니다. 이 업데이트는 Swift 4.2에서 추가된 @dynamicMemberLookup의 기능을 좀 더 확장시킵니다. 일단 다짜고짜 기존(?) 예제부터 봅시다. @dynamicMemberLookup struct SomeInfo { let properties: [String : String] = [ "name": "James", "city": "LA" ] subscript(dynamicMember string: String) -> String { return properties[string]! } } let info.. 2019. 10. 30.
흥미로운 링크들 10월 4주차 짧은 휴가를 다녀왔더니 링크 개수도 덩달아 줄어버렸네요. ☺️ 개발자를 위한 OS X(>= Catalina) 설정 개발자를 위한 macOS 환경 설정, iTerm 설정, 터미널 환경 등 다양한 추천 설정을 정리한 링크입니다. 일부는 제가 선호하는 것과 동일하네요. 하지만 그렇다고 모두가 똑같이 사용하는 것도 아니니 오해도 하지 맙시다. 😏 멋진 모션그래픽을 위한 팁 모션 그래픽 팁을 애니메이션으로 설명한 트윗들을 모은 모먼트입니다. 게임 개발이든 영상 편집이든 여러 분야에서 참고할 수 있는 좋은 자료 같습니다. Firefox 70.0, See All New Features, Updates and Fixes 파이어폭스 70버전의 릴리즈 노트입니다. 크롬의 버전업을 따라잡아버린 버저닝이 경이롭습니다. 파폭도.. 2019. 10. 28.
[Swift 5.1] 초기화 없는 배열 생성하기 (SE-0245) 이 뜬금없는 제목의 변화는 SE-0245 Add an Array Initializer with Access to Uninitialized Storage 프로포절에서 제시된 내용입니다. 일반적으로 Swift에서 Array를 특정 개수의 배열로 만들기 위해서는 반드시 데이터를 채워 넣어야 합니다. 예를 들어 5개 크기의 배열을 만든다면 아래와 같은 식이죠. let list = [0, 0, 0, 0, 0] 물론 이것 말고로 몇 가지 단순화된 방법이 있긴 하지만 아마도 이게 가장 흔한 예제일 것 같습니다. 그런데 굳이 초기화 값이 꼭 필요한 것이 아니라면 Swift 5.1부터는 아래와 같은 식으로도 만들 수 있게 됩니다. let list = [Int](unsafeUninitializedCapacity: 5) {.. 2019. 10. 24.
흥미로원던 링크들 10월 3주차 Convert curl syntax to Python, Ansible URI, Node.js, R, PHP, Strest, Go, Dart, JSON, Rust curl 커맨드를 입력하면 이를 여러 언어로 구현한 코드를 알려주는 사이트입니다. 여러 용도가 있겠지만 이런 코드를 빠르게 작성할 때 도움이 되는 것 같습니다. 다만 대상 언어에 Swift가 없다는 점은 큰 단점이군요. 🙁 Able Medium과 비슷한 블로깅 사이트입니다. 다만 개발자 친화적인 사이트 구조를 가지고 있습니다. Medium과는 다른 유료 모델을 가지고 있다는데 그냥 보기만 하는데 지장이 없다면 일단 Medium보다 좋은 점수를 줄 수 있겠네요. Medium은 조금만 읽어도 돈 안 내면 화면을 가려버리니 참 답답하더군요. 그런데 T.. 2019. 10. 21.
[Swift 5.1] Opaque Result Types 그리고 some (SE-0244) 이번 글은 아마도 Swift 5.1 업데이트 내역 중 제가 가장 이해하기 힘들었던 변화 같습니다. SE-0244 Opaque Result Types에서 소개된 불투명한 결과 타입(Opaque Result Types)을 위한 some이라는 키워드 도입에 관한 내용입니다. 말로 설명하기 어려우니 예제를 봅시다. 아래 코드는 어떤 컬렉션을 만족하는 인스턴스를 돌려주는 함수를 구현하고 있습니다. func someList() -> Collection { return [1, 2, 3] } 안타깝게도 위 코드는 아래와 같은 빌드 에러를 발생시킵니다. Protocol 'Collection' can only be used as a generic constraint because it has Self or associat.. 2019. 10. 18.
[Swift 5.1] 구조체 생성자에 기본값 지원 (SE-0242) SE-0242 Synthesize default values for the memberwise initializer에서 소개된 프로포절이 5.1에서 구현되었습니다. 워낙 간단한 변화이고 내용도 쉬운 편이라 예제를 프로포절의 것 그대로 옮겨봅니다. struct Dog { var age: Int = 0 var name: String } 위 코드에서 주의 깊게 봐야 할 점은 age 프로퍼티에 초기값이 부여되어 있다는 점입니다. 그럼에도 기존 Swift 버전의 경우 생성되는 기본 생성자는 age와 name 두 파라미터 모두 초기값이 필요하게 생성되었습니다. 5.1부터는 이제 "초기값이 있는 프로퍼티는 굳이 생성할 때 값을 입력받을 필요가 없지 않냐"라는 요구가 받아들여져서 아래와 같이 사용할 수 있는 기본 생성.. 2019. 10. 17.
[Swift 5.1] 순서가 있는 콜렉션끼리 차이점 비교하기 (SE-0240) SE-0240 Ordered Collection Diffing 프로포절은 제목처럼 컬렉션끼리 비교해서 차이점을 얻기 위한 것으로 Swift 5.1에 구현되었습니다. 단순하게 말하자면 difference()라는 메서드가 Collection에 추가되었다라고도 볼 수 있겠네요. 일단 예제를 봅시다. let alpha1 = ["a", "b", "c"] let alpha2 = ["a", "c", "d"] let diff = alpha1.difference(from: alpha2) for d in diff { print(d) } .difference() 메서드를 이용해 두 컬렉션을 비교할 수 있습니다. 결과는 CollectionDifference라는 타입의 컬렉션으로 돌아오는데 데이터를 가지고 있는 enum 필드들.. 2019. 10. 15.
728x90
반응형