2015년 1월 12일 월요일

iOS altertView가 아닌 커스텀 팝업 view 만들기

스토리 보드를 처음으로 사용하다 보니 삽질을 하고 있다.
popover는  iPad에서만 되는 것으로 보인다.

iPhone app은 모든 viewController가 전체 화면으로 구현 해야 하는 것 같다.

storyboard에 어떻게 view 만을 정의 하고 그 것을 현재 viewController에 view에 추가 하느냐?

결론은 안되더라

현재 알바로 의뢰 받아 작업중인 앱에 디자인 가이드에서는 표준 alertView가 아닌
팝업 창이 디자인 되어 있으며

이 팝업 창이 뜰때 기존에 보이던 viewController의 전체 view는 dark색이 65% alpha 값으로
가려져야 하는게 미션이다.

구현 방법은 정답은 아닐수 잇으며 여러 삽질에 삽질 끝에 구현한 방법이다.


스토리 보드에 추가 하려는 viewController의 디자인을 마무리 한다.

 스토리 보드에 새로운 viewController를 추가 한 다음 어떠한 방법으로도 iphone에서는
pop을 할수 없음을 깨달았다. 그러므로 바로 포기하고 새파일을 만든다.
오래된 방법인 xib를 추가한다.

디자인을 한다.
포인트는 View를 추가해서 투명도 65%에 검정 뷰를 하나 추가 한다.

소스를 추가 해서 NotiView라는 클래스 파일과 헤더 파일을 작성 한다.

xib를 초기화 하는 init 코드가 필요 하다.
- (id) initWithCoder:(NSCoder *)aDecoder {
    if(self = [super initWithCoder:aDecoder]) {
        [[NSBundle mainBundle] loadNibNamed:@"NotiView" owner:self options:nil];
        [self addSubview:view];
    }
    return self;

}


닫기 버튼을 구현 하였다면 버튼을 IBAction을 연결 하고 다 음과 같은 코드로
뷰를 보이지 않게 할 수 있다.
#pragma -IB Action -

- (IBAction)CloseButtonClick:(id)sender {
    [self setHidden:YES];

}



스토리 보드로 돌아 와서 추가하려는 viewController에 view를 추가 하고 가장 하위 바닥에
viwe를 넣는다.
그리고 그 view의 클래스 파일을 NotiView로 연결 한다.


Hidden을 YES로 설정 하고 NotiView 를 IBOutlet으로 연결 하여 코드에서 Hidden을 NO
로 하여 팝업 창이 나타나는 효과를 내준다.



2014년 12월 30일 화요일

Acer iconia one 7 (B1-750) review

나의 첫 안드로이드 기기 되겠다.
캐논 이벤트 상품으로 받았다.

캐논 EOS70D 구매에 대한 사은품인데 가격이 17만원이라고 하지만 이걸 17만원 주고
살 사람은 없을것 같고

그렇다고 이걸 중고로 팔기도 모하고 애매 모호한
오늘 회사에 들고 가서 넥서스7과 비교 해보니 정말 퀄러티가 떨어진다.

단점을 나열해보면
완성도가 매우 나쁘다.
플라스틱이 들떠 있고 꾹 누르면 들뜬 부분이 소리가 난다.
화면은 강하게 터치하면 색이 변할 정도로 제품에대한 퀄러티는 정말 안좋다.
카메라는 전면이든 후면이든 모두다 꽝이다.
화소를 떠나서 이건 예전 피쳐폰시절에 화질일 프리뷰 화면으로 나오고 찍는 순간
그게 그대로.. 완전 카메라는 전면 후면 모두 달았는지 이해 할수가 없다.
외장 메모리 슬롯은 바로 뚤려 있다. 그 구멍으로 먼지든 머든 다들어갈거 같다. 얼릉 막아야 겠다.

장점을 나열해 보자면
우선 오늘 가볍다. 넥서스7 보다도 훨씬 얇고 가볍다.
그래서 지금처럼 겨울에는 주머니에 쏙들어간다.
출퇴근 하면서 지하철에서 보니 아이패드에 비해 훨씬 가볍고 휴대성이 좋다.
성능이 어느 정도 나온다. 게임도 하지 않고 단순하게 웹서핑이랑  facebook 그리고
DSLR로 찍은 사진을 컴퓨터로 넣고 보고 하는 정도에서는 아주 훌륭하다.
다른 무거운 앱을 실행해 보지 못했지만 간단한 사용상에는 아주 빠릿 빠릿 하니 좋다.

지금 나처럼 캐논 이벤트로 받은 미개봉 상품들이 중고나라에 많다고 한다.
저렴한 테블릿을 원한다면...

난 팔지 않고 아이패드가 있지만 안드로이드가 궁금해서 그냥 쓰기로 한다.
그리고 안드로이드 개발도 한번 해볼까 생각중이다.

2014년 12월 20일 토요일

EOS 70D 간단리뷰


나는 카메라에 대한 지식이 전무한 상태이며 이 기종에 대한 단순한 느낌과 구매 방법 정도를 간단하게 리뷰 한다.
자세한 리뷰는 인터넷 세상에 널리고 널렸으니 가볍게.. 끄적여 본다.

가격은 오프라인 매장 보다는 온라인이 확실히 저렴 한듯 하다.
패키지 상품 (바디 + 렌즈) 로 사는것 보다 바디 단품이 저렴하다.
바디 + 렌즈 구성으로 구매 할때 18-55mm 렌즈 인경우 오래된 버전에 렌즈를 좀더 비싸게
해서 이윤을 남기는 판매자도 있는 것으로 보인다.

18-55mm IS / 18-55mm IS II / 18-55mm IS STM 이렇게 현재 3가지 렌즈가 존재하며
IS STM이 가장 최신이고 자세히는 모르지만 저소음 모터로 인해 동영상 촬영시 소음이 녹화
되지 않는다고 한다.

바디 + 렌즈 + 패키지 머 이렇게 구성되는 상품들은 대부분 렌즈나 사은품 가격이 포함된것으로 사료 되고해서 나는 바디 단품 구매를 했다. 그리고 패키지 상품이나 사은품이 사실 언제 어떻게 쓰는 건지도 모른다.

그리고 렌즈도 정품 벌크를 구매 했다.
18-55mm IS STM을 기존 700D 패키지에서 분리 해서 파는 것이 정품 벌크라고 한다.
머 포장 상태등에 불만이 좀 잇었지만 새제품이 확실 하고 시리얼 번호로 정품 등록도 했다.

바디도 현재 정품 등록을 하면 이벤트 기간이라서 캐논에서 사은품도 준다.
나는 세가지 사은품중에 7인치 타블렛을 선택 했는데 언제 올지 모르겠다.

18-55mm IS STM 렌즈는 번들 렌즈로 아주 가볍고 저렴하게 생겼는데 이것만 가지고 촬영 해도 아직 불만이 없다.
비교 대상은 아이폰 5S / 겔럭시 S4 / 아주 오래된 캐논 파워샷 S3 IS  이중에 최고의 품질로
찍힌다.

70D의 바디는 사실 오프라인에서 한번도 만저 보지 못하고 온라인으로 주문했다.
나도 마찬가지로 여러 블로거들에 리뷰를 읽고 읽고 또 읽어 고른 모델이다.
대상이 되었던 모델은 1년 반쯤 전에 100D 부터 700D 그리고 기다리고 기다려 점점 눈이 높아지고 해서 중급기 70D 까지 분석에 분석 끝에 지르고 말았다.
다시한번 언급 하지만 나는 DSLR을 모른다. 단지 한번 사면 10년 쓰자는 위주다.
100D가 처음 나오고 홈쇼핑 같은데서 이야기 할때 당시 트리플렌즈 구성 어쩌구 하면 100만원이 훌쩍 넘어가고 렌즈 1개나 2개 이면 100가 까이 되었다.
당시 아무런 지식이 없던 상태에서 생각해보면 번들렌즈에 좀 저렴한 단렌즈 하나나 좀 저렴한 망원 렌즈 구성으로 엄청나게 비싸게 판듯 하다.
요즘 100D 블랙은 50만원 선에 새제품을 구매 할 수 있는 것 같다.
그래서 70D로 결정을 했는데 근처 홈플러스 하이마트 코스트코 까지 그 어디에서도 실물을
만나 보지 못했다.
결국 온라인으로 구매하고 택배를 받고 서야 실제 모습을 만져 보았다.

무게!
묵직하니 좋다. 렌즈까지 결합했을때 딱 사진 찍기좋은 무게 같다.

디자인!
 다 거기서 거기 DSLR 모습 전통적인 검정 DSLR 솔직히 난 모른다.

왜 캐논?
남들 다 캐논 쓰는거 아닌가? 니콘 쓰는사람 페이스북에 한명 처가 친척중에 한명
그외 모든이가 캐논.. 우리 형이 소니를 쓰긴 하는데 그건 DSLT!

그래서 나는 캐논을 선택 했고 70D를 선택 했다.


다른 엑세서리는 구매하지 말아야지 결심!
렌즈는 아주 추후에 난 정말 이제 사진좀 찍는 사람이다 할때 구매 해야지 결심
친구들이 slr클럽 게시판 보지도 말라고 말린다.
음... 그래도 벌써 17-55mm F2.8 IS USM이라는 축복 렌즈도 알고 있다.

지금은 결심 한다. 사진을 제대로 배우고 앞으로 열심히 들고 다니기로
캠핑을 하니 이제부터 캠핑에서 사진도 많이 찍고 블로그에 캠핑 후기도 남기기로 결심해 본다.

파워샷 S3 IS는 세월이 7 ~ 8년 됬으니 이제 우리 아들 학교 다니면서 놀러가면 가지고 가서 찍으라고 해야 겠다.

2014년 11월 5일 수요일

iOS초간단 보안카드앱 만들기


오래전 회사 형님이 윈도우용으로 보안카드 프로그램을 자작해서 사용하는 것을 보고 그 아이디어를 채용해서 윈도우용 프로그램을 만들어 사용했다.
그러다가 PDA폰 시절에는 PDA용을 만들어서 사용했다.

스마트 폰이 대중화 되면서 그런 기능을 하는 앱도 많고 나도 그중 하나를 잘 써왔다.
그러던중 iOS를 업그레이드 하고 나니 앱이 튕김 현상이 생기면서 더 이상 사용 하지 못하게 되었다.

OTP는 5000원을 지불해야 하고 유효 기간도 있고 해서 그냥 다시 보안카드로 재발급 받고 직접 초 간단 앱을 개발 했다.

간만에 앱을 개발하려니 xcode도 6.1로 업그레이드가 되고 해서 어리 버리  했다. 살짝 당황했지만 대충 후다닥 만들었다.

UI설계랄 것도 없는 간단한 UI는
하나의 화면만 존재 하며
피커뷰가 3개의 열을 가지고 있다.
첫번째 은행 선택
두번째는 첫번째 번호
세번째는 두번째 번호
세가지 조합으로 두개의 레이블에 코드를 보여 준다.

대충 single view application으로 작성한다.


대충 스토리보드에 디자인을 한다.


pickerview 컨트롤을 ctrl키를 누른 상태에서 viewcontroller.h 파일로 끌어 프로퍼티 코드가
생성 되며 연결 시킨다.

이런 작업은 직접 코딩으로 개발 할 때는 필요 없지만 후다닥 빨리 개발 하기 위해 인터페이스 빌더 방법을 이용했다.

같은 방법으로 label 컨트롤 두 개 도 연결 한다.

이제 코딩
@interface ViewController ()
{
    NSArray *_picker1Data;
    NSArray *_picker2Data;
    NSArray *_picker3Data;
    
    NSArray *code1;
    NSArray *code2;
    NSArray *code3;
    
    
}

@end



picker1Data 는 은행이름으로 초기화
picker2Data 는 첫번째 index
picker3Data 는 두번째 index
물론 index 숫자는 NSString을 포켓 문자로 생성해도 된다. 하지만 난 SN을 넣어 주고 싶어서...

초기화는 viewDidLoad  메서드에 다음과 같이 코딩 한다.
    _picker1Data = @[@"기업", @"미래", @"ING"];
    _picker2Data = @[@"1", @"2", @"3", @"4", @"5", @"6",
                     @"7", @"8", @"9", @"10", @"11", @"12",
                     @"13", @"14", @"15", @"16", @"17", @"18",
                     @"19", @"20", @"21", @"22", @"23", @"24",
                     @"25", @"26", @"27", @"28", @"29", @"30",
                     @"31", @"32", @"33", @"34", @"35", @"SN"];
    _picker3Data = @[@"1", @"2", @"3", @"4", @"5", @"6",
                     @"7", @"8", @"9", @"10", @"11", @"12",
                     @"13", @"14", @"15", @"16", @"17", @"18",
                     @"19", @"20", @"21", @"22", @"23", @"24",

                     @"25", @"26", @"27", @"28", @"29", @"30",

code1
code2
code3
은 각각 은행의 보안카드를 보고 위와 비슷한 방법으로 각자 알아서 코드 값을 초기화 한다.
내 코드니까 공개 하지 않는다.
마지막 값은 카드 SN 번호를 넣는다.

viewDidLoad의 마지막에 다음과 같이 코딩 한다.
    self.picker1.dataSource =self;
    self.picker1.delegate = self;
    

    self.picker1.showsSelectionIndicator = YES;

데이터는 모두 준비가 끝났고 이제 pickerViewControl에 대한 메서드를 작성 하면 된다.
3개의 component이고

각각 component가 0일때 은행 선택
1일때 첫번째 인덱스
2일때 두번째 인덱스
로 처리 한다.
- (NSUInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 3;
}

- (NSUInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if (component == 0)
    {
        return _picker1Data.count;
    }
    
    if (component == 1)
    {
        return _picker2Data.count;
        
    }
    
    return _picker3Data.count;
}

- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if (component == 0)
    {return _picker1Data[row];}
    
    if (component == 1)
    {
        return _picker2Data[row];
    }

    return _picker3Data[row];

}


- (void) pickerView:(UIPickerView*)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    static NSInteger code = 0;
    static NSInteger idx1 = 0;
    static NSInteger idx2 = 0;
    if (component == 0)
    {
        code = row;
    }
    
    if (component == 1)
    {
        idx1 = row;
    }
    
    if (component ==2 )
    {
        idx2 = row;
    }
    
    if (code == 0)
    {
        self.label1.text = code1[idx1];
        self.label2.text = code1[idx2];
    }
    
    if (code == 1)
    {
        self.label1.text = code2[idx1];
        self.label2.text = code2[idx2];
    }

    if (code == 2)
    {
        self.label1.text = code3[idx1];
        self.label2.text = code3[idx2];
    }


}

마지막 메서드는 선택 되었을 때 마다 호출이 되며 여기 서는 가운데에 있는 label 컨트롤에 text를 세팅 하는 것으로 기능이 끝이다.

피커뷰에 첫번째 것을 변경 하든 두번째 것을 변경 하든 세번째 것을 변경하든 매번 호출 되기 때문에 좀 무식하지만 이렇게 작성 했다.

머 자료구조나 보안 코드 값을 하나에 array에 넣는방법이나 index는 그냥 row값을 문자열로 변환 한다든지 머리 써서 잘 만들어도 되지만 난 후다닥이 중요 했다.

이제 구글링으로 찾은 아이뻐 5s에 finger print 인증 코드를 추가하고 앱이 background에서 forground로 올라와도 매번 재 인증을 하기 위한 코드를 삽입 하면 된다.

그리고 비번으로 하겠다를 선택 했을때 가감하게 귀차니즘으로  exit(0) 해버렸다.

AppDelegate.m에서
@import LocalAuthentication;

를 추가 하고
didFinishLaunchingWithOption 메서드와

applicationWillEnterForeground 메서드에 다음과 같은 코드를 삽입 하면
매번 지문 인증을 시도 한다.
- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    //핑거 프린트 사용가능 여부
    LAContext *context = [[LAContext alloc] init];
    if ([context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil])
    {
        NSLog(@"Fingerprint authentication available.");
    }
    
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"Authenticate for server login" reply:^(BOOL success, NSError *authenticationError){
        if (success) {
            NSLog(@"Fingerprint validated.");
        }
        else {
            NSLog(@"Fingerprint validation failed: %@.", authenticationError.localizedDescription);
            exit(0);
        }
    }];
    

}


이상 허접하게 만든 보안카드 앱이다. 나혼자 쓸거니. 이코드를 보고 머라하지 않았으면 좋겠다.
그냥 이렇게도 앱을 만드는 구나 pickerview 컨트롤 메서드를 이렇게 대충 만들면 되는 구나로 알았으면 좋겠다.




2014년 11월 1일 토요일

SyncMaster TA531 hdmi케이블 연결시 사운드 설정

지금껏 집에 mac mini 2012 late 의 모니터로 SyncMaster TA531을 사용했다.
모니터를 두개 사용하는데 이것을 주 모니터로 사용한다.

miniDP2hdmi로 SyncMaster를
모니터 설정은 HDMI/DVI PC 아래 내용 참고
http://mtsparrow.blogspot.kr/2011/08/syncmaster-ta531-review.html

로 설정하고 다른 HP모니터를 HDMI2 DVI 케이블로 DVI로 연결 하여 사용하였다.

별다른 의미는 없었고 왠지 miniDP좀더 좋은 것으로 생각 했다.

그런데 문제는 이 모니터가 27인치 Full HD이고 물론 TN 모니터지만
작은 크기의 글자를 보는 경우 폰트 가독성이 떨어졌다.

이건 상대적인 것으로 회사에서 사용하는 24인치 imac과 비교 할 때 매우 불편했다.

혹시나 하는 마음에 hdmi케이블로 hdmi에서 바로 SyncMaster TA531로 연결 했더니 가독성이 좋아 졌다. 왜 지금껏 시도 하지 않았을까? ㅠ.ㅠ

사운드는 이미 기존 부터 라인 연결로 하고 있었다.
그런데 사운드 설정에 모니터가 잡히고 왠지 모니터로 사운드가 HDMI케이블을 이용해서 나오게 하는게 도리 일거 같다.

그러나 소리가 나지 않는다.

이것 저것 아무리 시도해 보아도 소리가 나지 않는다.
그대로 라인잭을 연결하는건 뭔가 바보 같은 것 같고

다시 모니터 설정으로 외부 입력 수정을 이용해서 DVIPC를 그냥 PC로 조정하니 소리가 모니터로 HDMI케이블을 타고 바로 나온다.

이 모니터를 구매한지는 3년이고 이 맥미니를 구매한지는 2년이 되었는데
이제야 제대로 쓰는 느낌이다.

2014년 10월 22일 수요일

OS X Yosemite 이상 증상 (서드 파티 SSD로 만든 fusion disk)

관련증상에 대한 글
https://discussions.apple.com/thread/6601646

내가 격은 경험

처음 OS X Yosemite 설치 중에 에러 ( 정확한 에러는 모르겠으나 ) 이게 아무래도 용량 부족
메세지인듯.

튕김. --> 다시 설치 --> 정상 동작
--> 일정 시간 동안 사용 --> 크래쉬 다시 설치 --> 정상 동작

이 맥에 관하여 눌러서 정보를 보는중 이상한 점이 있었다.
추가정보 저장공간을 누르면 남은 용량은 거의 맡지만 이상하게 그래프는 많이 차있었다.
대수롭지 않게 생각했는데 아마도 이게 OS X Yosemite 가
서드 파티 SSD로 만든 Fusion Disk랑 먼가 버그가 생긴것으로 생각 된다.

어제 밤 갑자기 사용중에 다시 크래쉬가 발생했다.

이번에는 OS설치를 하지 않고  타임머신 백업으로 돌렸다. 이미 OS 재설치를 한차례 해보았기 때문에
타임머신 백업으로 복구했다.
시간은 오래 걸리지만 디스크를 깨끗이 지우고 백업디스크로 다시 전부 복사 하는게 좋을듯 했다.
무려 4시간 가량이나 걸려 새벽에 잠깐 일어나서 복구 확인 하고

디스크 권한 검사, 디스크 검사를 수행 했다.

아침에 출근전 대충 확인 했다.
저장공간도 남은 용량도 정확하고 그래프도 정상적인 크기로 올바른거 같고
기분탓인지 모르지만 iOS처럼 부팅하는 그래프도 빨리 지나 간다.

2014년 10월 1일 수요일

iptime A2004NS 펌웨어 9.04 업데이트 후 문제점

iptime A2004NS를 사용한 지도 별서 1년이 지났다.
그동안 업데이트도 하지 않고 잘 써왔다.
그런데 최근 USB디스크 연결 부터 해서 이것 저것 알아 보다가
펌웨어 업그레이드를 했다. 

펌웨어 업그레이드후 이상한 현상이 발생 했다.

ipad retina (4세대) 모델이 2.4Ghz에 연결이 안되고 5Ghz만 연결된다.
연결이 안되는 증상은 패스워드를 입력해도 계속 틀리 다고 나온다.
문제는 업데이트 하기전에 이미 연결이 잘되던 상태이다.

iOS 8.0.2 업데이트 직후라 iOS 문제인지 정확하지 않다.
그러나 iphone5s iOS 8.0.2는 2.4Ghz 5Ghz 둘다 패스워드 입력 후 연결이 잘된다.
macbook pro 2014 early OS X 10.9.5 모델에서도 2.4Ghz는 아에 보이지가 않는다.
mac mini 2012 late OS X 10.9.5 2.4 및 5Ghz 연결이 다 잘 된다.

마나님의 겔럭시S는 확인 하지 못했으나 둘 중 하나의 네트워크로 문제 없이 동작중 이라 짐작한다.
왜냐 하면 네트워크가 안된다는 보고는 받지 못했다.

정리하면 ipad 4세대 맥북프로 에서 2.4Ghz연결에 문제가 있다.

iptime QnA에 오후에는 글 도 못쓰는 시스템이라서 내일 오전에 글을 써서 답변을 받아야 겠다.

속도 측정을 해보니 아이폰5S에서 5Ghz연결이 빠르기는 하지만 기대에는 못 미치는 수준이다.
측정 결과 빠른 것이 5Ghz이고 낮은 것이 2.4 Ghz이다.




----> 아이피타임에 질문을 올리고 답을 얻어서 해결 되었다.
원인은 펌웨어 업그레이드 이후 2.4Ghz의 디폴트 채널이 13이 되는데
1 ~ 11이 되어야 된다는것이다.

그리고 A2004NS plus의 펌웨어 인줄 알고 9.04를 받았는데
9.26까지도 A2004NS / A2004NS plus  공용 이라서 가장 마지막 최신으로 업데이트 하였다.