기본 콘텐츠로 건너뛰기

2015의 게시물 표시

esp8266 - nodemcu와 그 친구들

nodemcu 가 계속 버전업을 해서 다양한 모듈들을 아주 쉽게 사용할 수 있도록 적극적인 지원을 하고 있다. 물론 이 모듈들은  http://nodemcu-build.com/  같은 곳에서 추가/삭제를 자유롭게 하여 커스텀 빌드를 만들 수 있다. 하나씩 살펴보자. WS2812 WS2801 BMP085 TSL2561 HX711 DS18B20 DHT11, DHT21, DHT22, DHT33, DHT44 u8glib - sh1106_128x64, ssd1306, ssd1309_128x64, ssd1327_96x96_gr, uc1611 ... 헉헉 목록만 봐도 숨찬다. RGB LED 계열 WS2812 WS2801 (Strip 형태) 압력 센서 BMP085 조도센서 TSL2561 무게센서 (load cell) HX711 온도센서 DS18B20 온습도 모듈 DHT11 DHT21 DHT22 DHT33 DHT44 디스플레이류 (양이 매우 많다) ILI9163 ILI9341 PCF8833 SSD1351 이외에도 엄청 다양;;;;; 자료 찾기가 겁난다. 물론 꼭 ESP8266에서만 작동하는 모듈들은 아니지만 실제로 사용시에 속도 문제로 바이너리를 사용해야하는 경우도 있고 라이브러리 사용이 복잡하다던가 여러가지 경우가 있을 수 있으므로 우선적으로 고려해두면 좋다.

iOS/swift - segue 연결 후 중간에 가로채기 하고자 할때 : shouldPerformSegueWithIdentifier

segue로 storyboard를 연결해 놓고 특정 조건일 때 해당 segue로 연결을 막고 싶은 경우가 있다. 가령 특정 메뉴를 들어가고자 할땐 로그인이 되있지 않다면 로그인 화면으로 유도하려면 segue를 중간에 가로채야 한다. UIViewController 안에서 shouldPerformSegueWithIdentifier 를 사용하여 구현할 수 있다. NeedLoginSegue 로 이동할 경우 사용자 정보(  checkUserInformation ( userDefaults ) )가 false면 LoginSegue 를 열게 하는 코드는 다음과 같다.     override func shouldPerformSegueWithIdentifier(identifier: String , sender: AnyObject ?) -> Bool {         if identifier == "NeedLoginSegue" {              if checkUserInformation ( userDefaults )== false {                 self . performSegueWithIdentifier ( "LoginSegue" , sender: nil )             }             return false         }         return true     } unwind와 함께 빈번하게 쓰는 패턴이니 기억해두자.

iOS 앱 제출 전 점검사항.

App 정보 현지화 가능한 정보 이름 : 255자 개인정보 취급방침 URL : (선택사항) 일반정보 번들ID - reverse domain 기본언어 - 한국어 등 SKU - App Store에 표시되지 않는 App의 고유한 ID 카테고리 - (2개) 건강 및 피트니스 게임 교육 금융 날씨 내비게이션 뉴스 도서 라이프 스타일 비즈니스 사진 및 비디오 생산성 소셜 네트워킹 쇼핑 스포츠 엔터테인먼트 여행 유틸리티 음식 및 음료 음악 의학 잡지 및 신문 참고 카탈로그 가격 및 사용가능 여부 제출 준비 중 -  버전정보 App 동영상 미리보기 최대 5개 스크린 샷 4.7, 5.5, 4, 3.5, iPad, iPad Pro 설명 - 4000자 키워드 - 100자 지원 URL 마케팅 URL - 선택 App 정보 App 아이콘 - 아이콘은 App Store에서 사용되며 최저 해상도가 72DPI이고 RGB 색상 영역에 있는 JPG 또는 PNG 형식이어야 합니다. 레이어나 둥근 모서리가 있어서는 안 됩니다. (png일 경우 투명 알파채널이 있어도 안됨) 거래 담당자 연락처 정보 - 한국 App Store에서 App과 함께 표시되는 추가 정보를 제공할 수 있습니다. 이 정보는 한국 App Store에만 나타납니다. 대한민국 App Store의 거래 담당자 연락처 정보를 표시합니다. 저작권 - App에 대해 독점 권한을 가진 개인 또는 법인의 이름으로, 앞에 권한을 획득한 연도가 옵니다(예: ‘2008 Acme Inc.’). URL을 제공하지 마십시오. App 심사 정보 연락처 정보 - App 심사 팀에서 궁금한 점이 있거나 추가 정보를 필요로 할 경우에 연락할 조직의 담당자입니다. 데모 계정 - App에 대해 전체 접근 권한을 얻기

Xcode swift

http://en.swifter.tips/selector/ notification 을 observe 할일이 있어 찾아봄. NSNotificationCenter.defaultCenter().addObserver(self,         selector: "callMe", name: "CallMeNotification", object: nil) selector는 그냥 string이네 대신 저 callMe @objc private func callMe() {     //... } 이렇게 써야하는 것. 참으로 불완전하다. unwind(segue 되돌아가기)도 좀 헤메었다. 부르는 쪽에서 exit를 아래와 같이 만들고 (함수명은 자유) @IBAction func unwindToHomeDetail(segue: UIStoryboardSegue ) { } unwind를 실행하는 쪽에선 Navigation Controller 안에 있지 않으면 작동하지 않았다. 두 개를 동시에 쓸땐 어케되나. http://stackoverflow.com/questions/23755974/cocoapods-pod-install-takes-forever 도중 cocoapod이 무한 install 대기 시 pod repo remove master pod setup pod install 아이고 고맙습니다. 괴로운 문제가 또 UIView에 테두리를 어떻게 두르느냐? 코드로 안하고 방법이 없나. Picker로 사진을 찍을때 1280x960 으로 처리할 수 있다. scale 문제     func scaleImage(image: UIImage )-> UIImage {         // 이미지를 354*472 로 변환 , po         let sizeRatio: CGFloat = 354.0 /image. size . width /

Xcode Log - Label / Attributed Text - Replace

        let mutableString: NSMutableString = ( resultLabel . attributedText as ! NSMutableAttributedString ). mutableString         mutableString. replaceOccurrencesOfString ( "@1" , withString: "109" , options:  NSStringCompareOptions .LiteralSearch , range: NSMakeRange ( 0 , mutableString. length )) 결국 이 두 줄의 코드. AS3 할때도 이런 경우가 있었는데  HTML 형식으로 formatting한 label을 다룰때 생각보다 간단하지 않았다. 물론 해결하고 나니 속 시원했었지만. 이게 다 저 @1 부분을 replace 하려고 시작한 일이었다. 조금 더 다양한 가능을 보려고 손을 좀 더 보았다. Xcode 에서 이걸 직접 살펴보았다.                                 <attributedString key = "attributedText" >                                     <fragment content = " 이거이 사람이 할 짓이 아닌가 봅니다 . " >                                         <attributes>                                             <color key = "NSColor" cocoaTouchSystemColor = "darkTextColor" />                        

Xcode 개발 Log

AlamoFire 를 사용한 경우 swift에서 JSON 취급이 조금 헷갈렸다.         Alamofire. upload (urlRequest. 0 , data: urlRequest. 1 )             . progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) -> Void in                 print ( " \ ( totalBytesWritten ) / \ ( totalBytesExpectedToWrite )" )             }             . responseJSON { response in                 if response. result . isSuccess {                     /* avoid optional */                     let result: NSDictionary = response. result . value as ! NSDictionary                     print ((result[ "facetype" ] as ! NSArray )[ 1 ])                 } else {                     print("Cannot find face")                 }             } lldb에서 po 로 열심히 찍어본 결과 JSON으로 넘겨준 경우 NSDictionary 와 NSArray를 결국 열심히 찍어보는 수 밖에 없었다. 최종 결과물도 as String 형변환을 해줘야함. swift는 좋은 언어지만 애플이 잘못했지.

Xcode Key binding

1. 우상단 컨트롤들 왼쪽부터  Show the Standard View - Cmd + Enter Show the Assistant View - Cmd + Option + Enter Show the Version Editor - Cmd + Option + Shift + Enter 왼쪽부터 Hide or show the Navigation - Cmd + 0   Hide or show the Debug Area - Cmd + Shift + Y Hide or show the Utilities - Cmd + Alt + 0   2. Storyboard Hide or show Document Online - 바인딩 없음(Cmd + 9 로 설정)  3. 우측 상단 바로 아래 Inspectors 왼쪽부터 Show the File inspector - Cmd + Shift + 1 Show Quick Help inspector - Cmd + Shift + 2 Show the Identity inspector - Cmd + Shift + 3 Show the Attributes inspector - Cmd + Shift + 4 Show the Size inspector - Cmd + Shift + 5 Show the Connections inspector - Cmd + Shift + 6 4. 우측 하단 Library 왼쪽부터 Show the File Template Library - Cmd + Ctrl + Option + 1 Show the Code Snippet Library - Cmd + Ctrl + Option + 2 Show the Object Library - Cmd + Ctrl + Option + 3 Show the Media Library - Cmd + Ctrl + Option + 4 5. 기타 Run - Cm