본문 바로가기
반응형

분류 전체보기861

네이버 검색봇이 드디어 일 하기 시작했다 이 글은 아래 글에서 이어지는 글입니다. 한없이 가벼운 네이버 검색엔진 그 이후한없이 가벼운 네이버 검색엔진 글에서 이어지는 내용입니다. 깃헙 페이지를 네이버에 등록한 후 여러 시도에도 결국 네이버 검색로봇은 제 사이트의 수집을 거부하고 있습니다. 심지어 수동으로 수집 요청을 해도..seorenn.tistory.com드디어 시리즈의 마지막 글, 종지부를 찍을 수 있는 시간이 왔습니다. 20일 저녁 즈음 드디어 네이버 검색봇도 제 깃헙 페이지를 크롤하기 시작했습니다.뭐... 솔직히 수집 2건은 말이 안 되는 수치이긴 합니다만 시작되긴 했다는 것에 일단 큰 의의를 두고 싶습니다. 네이버야 원래 이러니깐요.하여간 크롤링 보류와 최적화 여부는 전혀 관계가 없다는 것은 증명되었다고 볼 수 있습니다.두둥! 사이트 .. 2019. 11. 20.
키베이스(Keybase) 이번부터는 한 글에 여러 링크를 '흥미로운 링크' 라는 한 글에 몰아넣는 대신 개별 링크들에 대해 아주 약간 더 살을 보태어서 별도로 '이건 뭐지?' 라는 시리즈로 정리하려고 합니다. 왜냐하면 블로그 글 개수를 늘ㄹ...아 아닙니다... 어쨌든 변경 후 첫 글은 키베이스라는 서비스입니다.keybase.io굳이 한 줄로 정리하자면 슬랙과 비슷한 채팅 및 파일 공유 서비스입니다. 다만 차이점으로 GPG로 신원을 보증해야 한다는 점이 특징입니다.회원 가입을 하면 이렇게 PGP 키를 등록하라고 합니다. 저는 쓸 생각이 없어서 여기에서 멈췄습니다.GPG키를 등록하면 무엇이 좋을까요? GPG 서명은 말 그대로 자신을 인증하는 목적으로 사용합니다. 즉, 자신의 계정이 해킹 당해도 사칭이 어렵습니다. 물론 자신의 컴퓨.. 2019. 11. 19.
한없이 가벼운 네이버 검색엔진 그 이후 한없이 가벼운 네이버 검색엔진 글에서 이어지는 내용입니다.깃헙 페이지를 네이버에 등록한 후 여러 시도에도 결국 네이버 검색로봇은 제 사이트의 수집을 거부하고 있습니다. 심지어 수동으로 수집 요청을 해도 수집 보류가 발생하고 있습니다.어떻게든 이 문제를 해결하고 싶었습니다. 남아있는 숙제는 SEO 최적화입니다. 그래서 이 문제들을 하나씩 해결해 보기로 했습니다.최소에 시도했던 것은 Canonical Link 를 추가한 것이었지요. 사이트의 중복 URL이 없도록 표준 URL을 알려주는 것입니다. 중복 콘텐츠가 존재한다면 검색 봇의 거부는 타당성이 있을 수 있습니다.하지만 이것 하나 만으로는 수집 문제가 해결되지 않았습니다. 여전히 네이버는 수집 보류를 선언했습니다.그다음으로 시도했던 것은 Descriptio.. 2019. 11. 18.
한없이 가벼운 네이버 검색엔진 개인적으로 열 개가 넘는 사이트를 네이버 웹마스터 도구로 등록하고 관리했었습니다. 괜히 일만 벌였다가 지금은 그냥 방치된 많은 블로그들을 네이버 검색엔진에 등록하기 위함이었죠. 뭐 하여간 많이 써봤다는 이야기를 하고 싶었었습니다.그리고 최근 깃헙 페이지를 하나 만들면서 이를 구글과 네이버에 등록하려 시도하고 있습니다. 구글은 볼 것도 없이 크롤링도 아주 잘 되고 사이트도 (아직 랭크가 낮아서 트래픽이 없지만) 정보가 모두 남아 있습니다. 그런데 유독 네이버는 '매우 익숙하게도' 또 아무런 정보가 없습니다. 익숙하다는 이유는 이런 일을 한두 번 겪은 게 아니기 때문이지요.네 오늘은 한없이 가벼운 네이버 검색엔진을 주제로 살짝 글을 써 봅니다. 물론 가볍다는 이야기는 결코 호의적인 표현은 아니지요.네이버가 .. 2019. 11. 14.
애플 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.24Git 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 Creative Cl.. 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, Rustcurl 커맨드를 입력하면 이를 여러 언어로 구현한 코드를 알려주는 사이트입니다. 여러 용도가 있겠지만 이런 코드를 빠르게 작성할 때 도움이 되는 것 같습니다.다만 대상 언어에 Swift가 없다는 점은 큰 단점이군요. 🙁AbleMedium과 비슷한 블로깅 사이트입니다. 다만 개발자 친화적인 사이트 구조를 가지고 있습니다. Medium과는 다른 유료 모델을 가지고 있다는데 그냥 보기만 하는데 지장이 없다면 일단 Medium보다 좋은 점수를 줄 수 있겠네요. Medium은 조금만 읽어도 돈 안 내면 화면을 가려버리니 참 답답하더군요.그런데 Topic.. 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.
흥미로웠던 링크들 10월 2주차 애플, macOS 카탈리나 배포 시작아기다리고기다리던 macOS 카탈리나가 드디어 공식 릴리즈 되었습니다. 원래는 UIKit for macOS 즉 Catalyst를 기다리고 있었지만 SwiftUI가 소개된 이후 이 녀석을 써보기 위해서 카탈리나를 기다려 왔었지요. 그리고 드디어 이 글을 쓰는 지금 감동적인 설치를... 다운로드가 18시간이... 애플 서버 일해라 🙁기타 iPad를 사이드카를 이용해 서브 모니터로 쓰는 기능과, iTunes가 몇 가지 앱으로 분리가 되는 점, 32비트 지원이 완전히 사라지는 점 등등 다양한 변화가 있습니다. 그래도 메이저 버전 업데이트이니 혹시나 자신이 보수적이라면 다음 마이너 패치 릴리즈를 기다리는 것도 나쁘지는 않은 선택 같습니다.여담이지만, 정식 버전은 GM과 릴리즈.. 2019. 10. 14.
728x90
반응형