페이지

레이블이 Programming인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Programming인 게시물을 표시합니다. 모든 게시물 표시

2015년 4월 18일 토요일

이미지 고르기


    @IBOutlet weak var pickedImage: UIImageView!

    @IBAction func pickImage(sender: AnyObject) {
        var imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.Camera   //PhotoLibrary
        imagePicker.allowsEditing = true
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }
    
    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
        self.dismissViewControllerAnimated(true, completion: nil)
        pickedImage.image = image
    }

2015년 3월 1일 일요일

Udemy - The Complete iOS8 and Swift Course

요즘 Udemy에서 열심히 재밌게 듣고 있는 Swift 강좌가 있다.
우리 말로 하면 <15가지 실용 앱 만들면서 배우는 완벽한  iOS8과 Swift 과정> 정도?
강좌 처음부터 부지런히 쭉 보고 있는데 역시 사람들이 많이 찾는 코스는 이유가 있네.
영국식 영어인데 Rob 이 물론 설명을 잘 하는 거겠지만, 의외로 잘 들리고 이해도 잘 된다.
주변에 Swift 공부 시작하시는 분 있으면 꼭 추천해주고 싶은데.. 내 주변엔 없다.

오늘은 65강: Tic Tac Toe 라는 게임을 만드는 걸 해봤는데 배우는 게 참 많았다.
여전히 생소한 Auto Layout이라든가 Swift식 자료구조 접근 방법 등을 알기 쉽게 설명한다.
여러 말 해 무엇 하겠나. Swift 입문자들에게 강력 추천한다!
기본적인 리스닝만 된다면 무리 없이 수업 따라갈 수 있다.
샘플 강좌도 들을 수 있으니 한 번 들어보시길.


2015년 2월 28일 토요일

Theme Lyte

Sublime Text 테마 패키지 Theme - Lyte
레티나 디스플레이에서 코디아기 괜찮은 테마인 것 같다.



설정은 다음과 같이..
Preferencs > Settings - User
{
 // Theme Lyte
 "color_scheme": "Packages/User/SublimeLinter/Lyte-Dark (SL).tmTheme",
 "theme": "Lyte-Dark.sublime-theme",

 "overlay_scroll_bars": "enabled",
 "show_tab_close_buttons": false,
 "draw_minimap_border": false,
 "enable_tab_scrolling": false,
 "fade_fold_buttons": false,
 "highlight_line": true,
 "caret_style": "phase",
}

2015년 2월 13일 금요일

serialize()와 serializeArray()


var formData1 = $("#myForm"). serialize();
var formData2 = $("#myForm"). serializeArray();

form input 데이터를 묶어 서버에 파라미터를 전달할 때
serialize() 또는 serialzeArray()로 직렬화 하게 되는데
serialzeArray()로 객체화해서 중간에 가공(파라미터 추가 또는 수정 등)을 하지 않는 이상
그냥 serialize() 쓰면 된다.
serializeArray()로 객체화했다면 그걸 다시 query string 형태로 돌려놔야하는데
jQuery를 쓴다면 $.param(formData)로 가능하다.

만일, serializeArray() 해놓고 $.param() 하지 않으면,
서버호출도 정상적으로 안되고 페이지가 예상치 못한 방향으로 튄다.
이걸로 한참 삽질했네.

2015년 2월 3일 화요일

git 명령어 정리

최근 회사에서 git로 소스관리를 하기 시작했다. 삽질 마~이 했다.
SourceTree라든가 Sublime Text Git 플러그인 등을 통해 관리가 가능한데
뭐니뭐니 해도 오리지날 커맨드라인에서 직접 명령어로 때리는 게 필요하다.
근데.... 너무~ 방대하다;;;;

추가 (인덱스-stage 에 추가)
git add <filename>
git add *

확정 (HEAD)
git commit -m “커밋 내용”
git commit -a -m “staged 없이 바로 커밋"

변경내용 PUSH
git push origin master

원격서버 주소 등록
git remote add origin <원격 서버 주소>

가지 치기
git checkout -b feature_x

master로 돌아오기
git checkout master

가지 제거
git branch -d feature_x

원격에 전송해야 다른사람이 접근 가능
git push origin feature_x

갱신 (서버 -> 로컬) : fetch(받기) + merge(병합)
git pull

가지 병합
git merge master

충돌 발생시 해결 후, 비교 / 병합
git diff <원래 가지> <비교 대상 가지>
git add <파일 이름>

식별자 확인 / 꼬리표 달기
git log
git tag 1.0.0 1b2e1d63ff

로컬 변경 내용 되돌리기 (HEAD)
git checkout — <파일 이름>

로컬에 있는 모든 변경내용과 확정본 포기 
(원격에서 최신버전 가져오고, 로컬 master가 저 이력 가리키도록)
git fetch origin
git reset —hard origin/master

콘솔 컬러 출력
git config color.ui true

이력(log) 확정본을 1줄로 표시
git config format.pretty oneline

unstaged 와 staged 간의 비교
git diff

staged 와 committed 간의 비교
git diff —staged

git rm 삭제할파일
git mv 원본파일 대상파일

범인 찾기
git blame index.html

브랜치 목록 보기
git branch -r

git pull origin jang
git pull origin remote_jang:current_jang

git fetch origin
git merge origin/jang

diff 결과 포함 5개 로그 보기
git log -p -5

2014년 11월 18일 화요일

Emmet 문법


html 코딩의 생산성을 극대화시키는 Sublime Text 패키지 : Emmet
그 사용법을 알기쉽게 설명하는 동영상.



// div#page.section.main
<div id="page" class="section main"></div>

// a[title="hello world"]
<a href="naver.com" title="hello world"></a>

// li*3
<li></li>
<li></li>
<li></li>

// li.item$*3
<li class="item1"></li>
<li class="item2"></li>
<li class="item3"></li>

// li.item$$$*2
<li class="item001"></li>
<li class="item002"></li>

//#content>.section
<div id="content">
    <div class="section"></div>
</div>

// p>{클릭하삼}
<p>클릭하삼</p>

// div#page>(div#header>ul#nav>li*4>a)+(div#page>(h1>span)+p*2)+div#footer
<div id="page">
    <div id="header">
        <ul id="nav">
            <li><a href=""></a></li>
            <li><a href=""></a></li>
            <li><a href=""></a></li>
            <li><a href=""></a></li>
        </ul>
    </div>
    <div id="page">
        <h1><span></span></h1>
        <p></p>
        <p></p>
    </div>
    <div id="footer"></div>
</div>

2014년 9월 18일 목요일

iOS 7 앱에서 status bar가 webview 덮는 문제 (PhoneGap/Cordova)

source : The Status Bar Overlays the Web View in iOS 7 Apps

iOS 7.0 이후 status bar 위치 문제로
Cordova(PhoneGap)에서도 조정을 해줘야 하는 번거로움이 있다.


function onDeviceReady() {
    if (device.platform === 'iOS' && parseFloat(device.version) >= 7.0) {
        document.body.style.marginTop = "20px";
    }
}

Syntax Highlighter 설정

source : how to setup syntax highlighter on blogger

구글 블로거에서 코드 Syntax Highlighting 하기 위해 이것 저것 봤는데,
이게 젤 깔끔한 거 같다.


2014년 8월 8일 금요일

bitnami MAMP stack 라이브러리 경로 문제 (Symbol not found)

OS X Mavericks / bitnami MAMP stack 환경에서 mysql이 restart하는 과정에서 계속 다음 에러를 뱉는다.
dyld: Symbol not found: _sqlite3_intarray_bind
  Referenced from: /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
  Expected in: /Applications/mampstack-5.4.31-0/sqlite/lib/libsqlite3.dylib
 in /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
140808 14:08:10 mysqld_safe mysqld from pid file /Applications/mampstack-5.4.31-0/mysql/data/mysqld.pid ended

재설치 삽질 몇 번 하다가, Xcode의 command line tools 설치가 의심되어 확인함..


참고 : http://stackoverflow.com/a/23319506

Command Line Tools는 기본적으로 Xcode 5.1.1에 설치되 있지 않다. 수동으로 설치해야 하는데, "xcode-select --install" 커맨드는 사용하지 말자. 동작 안한다.
1) Xcode 열고,
2) 메뉴 Xcode > Open Developer Tools > (맨 밑에) More Developers Tools. 차례로 선택하면, 다운로드 사이트로 이동한다. 앱스토어 계정으로 로그인한다.

3) OS X 버전에 맞는(내 경우 Mavericks) Command Line Tools를 다운로드 받아서 설치한다.

2014년 8월 7일 목요일

root 사용자 mysql 비번 바꾸기

source : http://blog.naver.com/momo526/110187532849


  1. use mysql;
  2. update user set password=password('new_password') where user='root';
  3. ​flush privileges;  




2014년 8월 2일 토요일

Sublime Text2 단축키


source1 : http://blog.outsider.ne.kr/887
source2 : http://blog.naver.com/thehogam/70147313806

cmd + x : 현라인 삭제
Ctrl + k : 현라인의 현위치 이후로 삭제
cmd + ENTER : 다음 라인에 빈줄 추가
cmd + Shift + ENTER : 이전 라인에 빈줄 추가
cmd + Shift + d : 현라인(혹은 블락)복사해서 붙히기
Ctrl + cmd + UP/DOWN : 현재라인 이동
cmd + ] : 들여쓰기
cmd + [ : 내어쓰기
cmd + / : 주석처리/주석해제
cmd + Shift + v : 들여쓰기 맞춰서 붙혀넣기
cmd + l : 선택블럭을 다음 라인까지 추가
Ctrl + Shift + UP/DOWN : 세로영역 수정
cmd + f : 검색
cmd + Alt + f : 바꾸기
cmd + t, cmd + p : 파일명으로 탭 찾기
cmd + Shift + f : 특정 폴더나 파일에서 내용 검색
Ctrl + g : 입력한 라인으로 이동
cmd + i : 현재 단어 찾기
cmd + Shift + g : 현재 단어 모두 찾아서 선택영역으로 만듦
Ctrl + Shift + m : 괄호 안의 내용을 모두 선택

cmd + option + LEFT/RIGHT : 탭 이동
Ctrl + m : 여는 괄호/ 닫는 괄호로 이동
cmd + Shift + t : 마지막에 닫은 탭 다시 오픈
cmd + = : 폰트 크게
cmd + - : 폰트 작게
cmd + Shift + p : prompt 열기
Ctrl + ` : sublime console 열기
cmd + Alt + 1,2,3,4 : 세로분할 갯수
cmd + Alt + 5 : 그리드로 보기
Ctrl + 1,2,3,4 : 세로분할된 창 선택
Ctrl + Shift + 1,2,3,4 : 현재 탭을 세로분할된 창으로 이동



Associative Array in PHP

소스 코드 이쁘게 갖다 붙이는 거 늘 하고 싶었는데,
드디어 블로거에 붙였다! ㅋ
생각보다는 간단했다.
script 랑 css 붙이면 끝~ (Syntax Highlighting in Blogger using Prettify를 참조함)

$grades = array('Kim'=>10, 'Jang'=>6, 'Lee'=>80);
PHP를 조만간 쓸 일이 있어 공부중인데,
PHP에는 딕셔너리와 배열의 구분이 따로 없나보다.
연관배열(associative array)이라는 개념으로 내가 이해하고 있는 딕셔너리를 설명하고 있다.

2013년 6월 16일 일요일

NSLog (when DEBUG)

#ifdef DEBUG
#define NSLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
#define NSLog( s, ... )
#endif

2013년 4월 19일 금요일

GCD(Grand Central Dispatch) 코드 템플릿



오래 걸리는 작업을 메인스레드에서 폴그라운드로 그냥 돌리면 블락(멍때림)된다.
시간이 걸리는 계산이나 디스크에 쓰기/읽기 하는 경우 등의 무거운 작업을 돌리는 경우,
GCD(또는 NSOperationQueue)를 사용하자.
템플릿은 다음과 같다:



dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // 백그라운드 스레드로 진입하여 오래 걸리는 작업을 실시한다.

    dispatch_async(dispatch_get_main_queue(), ^{
        // 메인스레드의 UI를 변경하는 작업

    });
});


2013년 3월 1일 금요일

xib에서 아웃렛 연결이 안됩니까?

xib 에서 컨트롤의 아웃렛 연결 작업을 하려 하는데..
컨트롤 드래그가 전혀 안먹는 경우가 있어 헤맨 경우가 있을 것이다.
뷰컨트롤러의 클래스명을 일괄적으로 바꾼 경우, 커스텀 클래스 속성을 바꿔줘야 한다.

해결방법:
File's Owner 선택하고
Identity Inspector 에서 Custom Class 항목을 확인하라!


2013년 2월 4일 월요일

Modern Objective-C : 요약

source : iPhone iOS 6 Development Essentials

최근 iOS 6 SDK 에서 변경된 주요 내용 몇가지 요약.
개발자의 스트레스를 제법 많이 줄여줄만한 내용들이니 주목할 것.

1. Default Property Synthesis
더이상 @synthesize 구문을 사용할 필요가 없다는 건 많이들 알 것이다.
이젠 디폴트로 잡히므로, 다음처럼 instance 변수에 접근 가능하다.
_volumeControl.enable = YES;

2. Method Ordering
메서드 정의 순서를 말함. 이전에는 함수 호출 이후에 해당 함수 구현이 있으면 컴파일 에러를 뱉었는데, 이제는 더이상 문제되지 않는다고 함.

3. NSNumber Literals
이제 다음과 같이 넘버타입 리터럴 값들을 할당할 수 있다.
NSNumber *number;
number = @'A'; // Character
number = @YES; // Boolean
number = @43231ul // Unsigned Long
number = @123431ll // Long Long
number = @1254.23 // Float
number = @123 // Integer
number = @123.432 // Double

4. Array Litterals
배열 초기화 길고 지루했던 타이핑도 줄었다.
NSArray *carMakes = @[@"Hyundai", @"Chevy", @"BMW", @"Toyota", @"Volvo", @"Smart"];
또한 배열인덱스로 접근하는 것도 훨 수월해짐.
NSString *firstCar = carMakes[0];
carMakes[1] = @"Kia";
기본적으로 이 리터럴 초기화는 수정할 수 없는 배열이다. (immutable)
수정 가능한 배열로 뽑아내려면 다음과 같이 mutableCopy 사용하자.
NSMutableArray *carMakes = [@[@"Hyundai", @"Kia"] mutableCopy];

5. Dictaionary Literals
가장 자주 쓰는 딕셔너리도 역시 가볍게 바뀌었다! 쥐기네~
NSDictionary *bookListing = @{key1:object1, key2:object2, key3:object3};
bookOjbect = bookListing[key1];
bookListing[key2] = newBookObject;


6. 요약
전체적으로 코드가 읽기 수월해지고, 프로그래머의 타이핑 수가 현저히 줄었다.

2012년 11월 28일 수요일

진동 및 소리 모드 구분

http://developer.apple.com/library/ios/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/Introduction/Introduction.html
// 관련 apple 문서



// AudioToolBox FrameWork 임포트 후

CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
if(CFStringGetLength(state) == 0)
{
    //SILENT
}
else
{
    //NOT SILENT
}

2012년 11월 27일 화요일

진동 길게..



-(void)playVibeDuring:(int)second
{
    for (int i = 1; i <= second; i++)
    {
        [self performSelector:@selector(vibe) withObject:self afterDelay:i * .3f];
    }
}

- (void)vibe
{
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}

2012년 11월 15일 목요일

웹뷰 포커스 문제 (iOS5 이하)




    if ([[[UIDevice currentDevice] systemVersion] integerValue] >= 6)    // iOS 6 이전
    {
        [self.webView setKeyboardDisplayRequiresUserAction:NO];     // 포커스 이벤트 (iOS 6.0)
    }



//- (void)setFocus:(NSString *)objID
//{
//    NSString *htmlString = [NSString stringWithFormat:@"document.getElementById('%@').setAttribute('contentEditable','true')", objID];
//    [self.webView stringByEvaluatingJavaScriptFromString:htmlString];
//}
//- (void)killFocus:(NSString *)objID
//{
//    NSString *htmlString = [NSString stringWithFormat:@"document.getElementById('%@').setAttribute('contentEditable','false')", objID];
//    [self.webView stringByEvaluatingJavaScriptFromString:htmlString];
//}