Archive for Mac이야기

아이맥 날리고 재설치…

와…

인터넷만 가능한 환경이라면

CMD + OPTION + R

눌러서 인터넷 복구가

진리로구나…

 

인터넷만 가능하다면… 스트레스 받게 느린 아이맥 날리는 것은 일도 아니겠어… ㅋㅋㅋ

보고있나? 아이맥? ㅋㅋ

===============

インターネットが使用可能な環境であれば

CMD+ OPTION+ R

押し、インターネットに回復するが

真理だな…

=================

If the Internet is available environment,

Press CMD + OPTION + R key

and will be restored to the Internet… Haha  🙂

 

[Mac용Util] 0xED 를 잊기전에 기록합니다.

http://www.suavetech.com/0xed/

사용간편하고 가벼운 Hex Edit 입니다.

물론 알고계시겠지만요.. 제 개인적인 기록용으로 작성해 봅니다.

Cocoa Framework 기반으로 구성되어 있다고 하네요. ㅎㅎㅎ

암튼 가볍게 Hex 로 뜯어볼땐 좋은 툴입니다. ㅎㅎ

 

使いやすさと軽量Hex Editです。

もちろん、知っておられるでしょうよ。私の個人的記録のために作成します。

Cocoa Frameworkに基づいて構成されているそうですね。

とにかく軽くHexに破れて見る時は良いツールです。

 

[Xcode] target release 로 했을때 기기에 안올라가면…

 

 

열마디 말보다 그림이 났겠지요… Release 로 설정하고 기기에 올리려는데….

process launch failed: failed to get the task for process XXXX 가 발생했습니다.스크린샷 2014-06-10 14.23.13

스크린샷 2014-06-10 14.23.32

여기서 일단 edit Scheme… 으로 들어 갑니다.

스크린샷 2014-06-10 14.23.43Launch 가 Automatically 로 되어있는데요… 이것을

Wait for XXXX.app to be launched manually 로 선택해 주고 나서 OK를 누릅니다.

스크린샷 2014-06-10 14.23.52

이렇게요…

스크린샷 2014-06-10 14.24.08

 

빌드를 마치면 위에 처럼 Waiting for XXXX to launch 가 보입니다.

이때 기기에서 실행할 앱을 터치해 실행해 줍니다.

스크린샷 2014-06-10 14.24.22

 

그러고 나면 Finished running XXXX on……

이 나옵니다.

그러면서 실행이 됩니다.

 

이게 정석 해결책은 아닐수 있지만 급하신 분들은 유용하게 이용하셨으면 좋겠습니다.

하하하~ 이상입니다.

 

 

 

 

[Mac뒷북] PDF 에서 TEXT만 긁어오기 + 어느정도의 양식 유지?

시작하기 전에

Very Very Thanks.

http://www.tuaw.com/2013/02/11/mac-101-use-automater-to-extract-text-from-pdfs/

======

뭐 영어는 까막눈이다 보니.. 잘 아시는 분은 원문으로 이해하시리라 믿고 저는 제 나름 발번역으로 하겠습니다.

와~ PDF 에서 Word 로 복사좀 해 보셨다고요? 대박 고생 많으셨습니다.

Mac에서 내 불ㅇX… 친구넘이 보내준 파일을 받았지요.

Automator 를 이용해서 순식간에 Text 를 뽑드라고요.. + ㅋㅋ 그리고 더 좋은건 공짜라는거…

일단 Automaor 를 여세요.

스크린샷 2014-04-11 오전 1.37.10

저는 Alfred 를 사용합니다만 걍 기본 서치 하셔도 되겠지요. ㅋ

 

스크린샷 2014-04-11 오전 1.37.20

 

요로코롬 생긴 녀석이 나오네요… 그것도 필요한 작업흐름에 딱 선택되어서요.. ㅎㅎ 선택 해 주세요.

 

스크린샷 2014-04-11 오전 1.38.25

 

맨 왼쪽에서 파일 및 폴더를 선택 -> 두번째 칼럼의 Finder 항목 요청을 선택하고 오른쪽 회색에다가 냅다 끌어다 던집니다. 그럼 조 위의 것 처럼 뿅 하고 생깁니다.

스크린샷 2014-04-11 오전 1.38.40

 

다음 작업은 PDF를 선택하는 것입니다. 그리고 역시나 PDF텍스트 추출을 눌러서 오른쪽으로 사정없이 던저 버립니다.

뿅… 저거 나오는거 보셨죵?

그럼 화면의 우측 상단에 .. 아.. 그전에 저장해 두세요…

스크린샷 2014-04-11 오전 1.38.49

 

파일->저장-> 이름은 맘대로 하세요. ^^

스크린샷 2014-04-11 오전 1.39.05그리고 저장을 하시면 되지요… 그후에 우측 상단의 실행을 눌러 보셔용.

스크린샷 2014-04-11 오전 1.39.55

 

아참… 일반 텍스트 대신에 리치 텍스트로 하시라고 말씀 드렸었나요? ㅎㅎ 않해도 알고 계셨다고요?

대단하십니다. ^^ 으흐흐;

암튼 실행 버튼 누르시면 바로 파일 선택 하라고 하는데 그때 text 뽑아내실 PDF 선택해 주시면 됩니다. ^^ ㅎㅎ

 

아 졸립네요… 좋은 하루, 행복하고 대박나는 한해 되시어요… 이상. ㅋ

 

HEX EDIT 없이 Mac Terminal 에서 파일의 생성일을 조정하고 싶은 경우

touch -t 1403191020 파일명

[Google SpreadSheet + Objective-C] CSV 파싱후 데이터 밀어넣기

제목 그대로 입니다.

CSV로 관리하고 있는 파일 내용을 1달에 1번씩 집계와 데이터 보존을 위해 구글 스프레드 시트를

이용할 경우에 유용한 팁 입니다.

한달분량의 전 사원 출퇴근 분량이라면, 꽤나 나오겠지요…

 

소스는 걍 일부만 공개 합니다.

실은 DataVO 말고 이게 전부죠… ㅠㅠ 예민한 정보는 대충 얼버무린 String으로 대체 함을 이해해 주세요.

스크린샷 2014-01-19 오후 6.21.38

로드 버튼은 CSV 파싱후 데이터 객체화 까지 이고,

송신은 그 정보를  POST 로 구글에 쏩니다.

//

//  AppDelegate.m

//  CSVImporter

//

//  Created by 한인택 on 2014. 1. 17..

//  Copyright (c) 2014년 wellsystem. All rights reserved.

//

 

#import “AppDelegate.h”

#import “DataVO.h”

 

@interface AppDelegate ()

@property (weak) IBOutlet NSButton *mLoadButton;

@property (weak) IBOutlet NSButton *mSendButton;

@property (strong, retain) NSString *loadFilePath;

@property (weak) IBOutlet NSTextField *statusLabel;

@property (nonatomic, retain) NSMutableArray *csvVOArr;

@property (nonatomic, retain) NSMutableArray *csvVOArr2;

@end

@implementation AppDelegate {

BOOL isRequest;

NSTextField *_statusLabel;

__weak NSButton *_mLoadButton;

__weak NSButton *_mSendButton;

NSURLConnection *conn;

NSMutableData *_responseData;

int datasResponse;

}

@synthesize loadFilePath;

@synthesize statusLabel;

@synthesize csvVOArr;

@synthesize csvVOArr2;

 

int MAX_COUNT = 14;

 

– (void)applicationDidFinishLaunching:(NSNotification *)aNotification

{

isRequest = false;

[_mSendButton setEnabled:NO];

}

– (IBAction)mLoadButtonClick:(id)sender {

csvVOArr = [[NSMutableArray alloc] initWithCapacity:0];

csvVOArr2 = [[NSMutableArray alloc] initWithCapacity:0];

NSArray *fname = openFiles();

for (NSString *item in fname) {

NSLog(@”%@”,item);

loadFilePath = item;

}

NSString *dataStr = [NSString stringWithContentsOfFile:loadFilePath

encoding:NSUTF8StringEncoding error:nil];

NSArray *array = [dataStr componentsSeparatedByString: @”,”];

 

int j=0;

NSMutableArray *temp;

for (int idx = 0; idx<[array count];idx++){

NSString *tempStr = [NSString stringWithFormat:@”%@”,array[idx]];

if (idx == 0){

temp = [[NSMutableArray alloc] initWithCapacity:0];

}

if (j<12){ // 같은 줄의 데이터를 모음.

[temp addObject:array[idx]];

}else{

NSArray *tempArr = [tempStr componentsSeparatedByString: @”\n”];

[temp addObject:tempArr[0]];

NSLog(@”count : %u _______ this[0] : %@”,[temp count],[temp objectAtIndex:0]);

[csvVOArr2 addObject:temp];

if (tempArr[1]){

temp = [[NSMutableArray alloc] initWithCapacity:0];

[temp addObject:tempArr[1]];

}

j=0;

}

j+=1;

}

 

//    NSLog(@”Check”);

//    for (int i=0;i<10;i++){

//        NSLog(@”array: %@”, [csvVOArr2[i] no]);

//    }

if (array.count >0) {

[self createVO];

}else{

csvVOArr = nil;

}

}

 

– (void) createVO{

//    NSMutableArray *arr = [[NSMutableArray alloc] initWithArray:csvVOArr2];

for (int i = 0;i < csvVOArr2.count;i++){

DataVO *dvo = [[DataVO alloc] initWithArray:[csvVOArr2 objectAtIndex:i]];

[csvVOArr addObject:dvo];

}

[_mSendButton setEnabled:YES];

_statusLabel.delegate = self;

[_statusLabel setStringValue:[NSString stringWithFormat:@”送信クーリク”]];

 

}

 

– (void) sendLogic {

NSURL *url = [NSURL URLWithString:@”https://docs.google.com/a/어쩌고 저쩌고.. 여러분의 계정…/forms/d/여러분의 아이디…../formResponse”];

int i=0;

for (i=0;i<csvVOArr.count;i++){

NSString *chul1 = [[csvVOArr objectAtIndex:i] no];

NSString *chul2 =[[csvVOArr objectAtIndex:i] dateData];

NSString *chul3 =[[csvVOArr objectAtIndex:i] opt3];

NSString *chul4 =[[csvVOArr objectAtIndex:i] opt4];

NSString *chul5 =[[csvVOArr objectAtIndex:i] inoutStatus];

NSString *chul6 =[[csvVOArr objectAtIndex:i] opt6];

NSString *chul7 =[[csvVOArr objectAtIndex:i] opt7];

NSString *chul8 =[[csvVOArr objectAtIndex:i] opt8];

NSString *chul9 =[[csvVOArr objectAtIndex:i] cardNo];

NSString *chul10 = [[csvVOArr objectAtIndex:i] opt10];

NSString *chul11 = [[csvVOArr objectAtIndex:i] cardRegNo];

NSString *chul12 =[[csvVOArr objectAtIndex:i] userID];

NSString *chul13 =[[csvVOArr objectAtIndex:i] opt13];

NSString *chul14 =[[csvVOArr objectAtIndex:i] opt14];

//데이터 셋 구성 entry.1626580426 등의 ID 를 알아내는 것이 핵심!!! [Chrome 의 요소분석 혹은 소스 보기.. 쿨럭]    , 집어넣을 데이터 컬럼 갯수 만큼 생성해야 하며, 한글등의 정보는 NSUTF8StringEncoding 이 필수 – 이 거때문에 필자는 몇시간을 삽질 하였다지요…. ㅠㅠㅠ]

NSDictionary *data=[[NSDictionary alloc] initWithObjectsAndKeys:

[chul1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.1626580426″,

[chul2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.5xxxxxxxx”,

[chul3 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.1xxxxxxxx”,

[chul4 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.7xxxxxxxx”,

[chul5 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.1xxxxxxxx”,

[chul6 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.2xxxxxxxx”,

[chul7 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.1xxxxxxxx”,

[chul8 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.1xxxxxxxx”,

[chul9 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.7xxxxxxxx”,

[chul10 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.1xxxxxxxx”,

[chul11 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.5xxxxxxxx”,

[chul12 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.3xxxxxxxx”,

[chul13 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.1xxxxxxxx”,

[chul14 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],@”entry.1xxxxxxxx”,nil];

//===========

NSMutableArray * content = [NSMutableArray array];

for(NSString * key in data){

//NSLog(@”%@”,[NSString stringWithFormat: @”%@=%@”, key, data[key]]);

[content addObject: [NSString stringWithFormat: @”%@=%@”, key, data[key]]];

}

NSString * body = [content componentsJoinedByString: @”&”];

NSData * bodyData = [body dataUsingEncoding: NSUTF8StringEncoding];

NSMutableURLRequest * request =

[[NSMutableURLRequest alloc] initWithURL:url];

NSString * msgLength =

[NSString stringWithFormat: @”%ld”, (unsigned long)[bodyData length]];

[request

addValue: @”application/x-www-form-urlencoded; charset=utf-8″

forHTTPHeaderField: @”Content-Type”];

[request addValue: msgLength forHTTPHeaderField: @”Content-Length”];

[request setHTTPMethod: @”POST”];

[request setHTTPBody: bodyData];

//=====

//    if ( !isRequest ){

conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

//        isRequest = true;

//    }

}

[self showMessage:@”CSVデータ転送を完了しました。” title:@” Completed….”];

[_statusLabel setStringValue:@””];

}

– (IBAction)mSendButtonClick:(id)sender { // POST, send data to google server

if (csvVOArr == nil){

return;

}

[self sendLogic];

}

 

 

 

static NSArray * openFiles()

{

NSArray *fileTypes = [NSArray arrayWithObjects:@”csv”,nil];

NSOpenPanel * panel = [NSOpenPanel openPanel];

[panel setAllowsMultipleSelection:NO];

[panel setCanChooseDirectories:NO];

[panel setCanChooseFiles:YES];

[panel setFloatingPanel:YES];

NSInteger result = [panel runModalForDirectory:NSHomeDirectory() file:nil

types:fileTypes];

if(result == NSOKButton)

{

return [panel URLs];

}

return nil;

}

 

– (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

_responseData = [[NSMutableData alloc] init];

}

 

– (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

// Append the new data to the instance variable you declared

[_responseData appendData:data];

}

 

– (NSCachedURLResponse *)connection:(NSURLConnection *)connection

willCacheResponse:(NSCachedURLResponse*)cachedResponse {

// Return nil to indicate not necessary to store a cached response for this connection

return nil;

}

 

– (void)connectionDidFinishLoading:(NSURLConnection *)connection {

// The request is complete and data has been received

// You can parse the stuff in your instance variable now

NSLog(@”CSVデータ転送を完了しました。”);

}

 

– (void) showMessage:(NSString*) kString1 title:(NSString*)title {

NSTextView *accessory = [[NSTextView alloc] initWithFrame:NSMakeRect(0,0,200,15)];

NSFont *font = [NSFont systemFontOfSize:[NSFont systemFontSize]];

NSDictionary *textAttributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];

[accessory insertText:[[NSAttributedString alloc] initWithString:kString1

attributes:textAttributes]];

[accessory setEditable:NO];

[accessory setDrawsBackground:NO];

NSAlert *alert = [[NSAlert alloc] init];

[alert setMessageText:title];

[alert setInformativeText:@””];

[alert setAccessoryView:accessory];

[alert runModal];

}

 

– (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {

isRequest = false;

}

@end

 

====================================================================

 

이것이 대략적?? 인 소스 전체 입니다.

www.한인택.com에 파일로 올려 놓으려다가… 그냥 여기서 소스 공개로 마무리 할까 합니다. ㅋㅋㅋ

아 이제 Visual Studio로 c# 으로도 같은 작업 하는 프로그램을 제작해야 겠네요. ㅎ

이런 간단하고 간단한 유틸성 앱 만들기 좋아요..ㅋㅋㅋ

아참 어디 보면 Properties 단순 편집기 있을텐데 찾아봐야 겠습니다.

그럼 이만… 다음 post 까지 안녕히 계세용. 꾸뻑!

[MacVim] 다아시겠지만 기억 저장용으로 기록해 둡니다.

스크린샷 2014-01-09 10.44.04

 

 

iMac으로 밥벌어 먹고 살고 있으며,

vi 로 이런 저런 스크립트 언어 건드려 보며 살고 있는 인택이의

나쁜 기억력을 보강하기 위해 기록해 둡니다.

마우스도 편한 기기인지라.. 터미널 vim 은 뭔가… 아쉽습니다.

그래서 이것도 종종 쓰는데요… 일단 가볍네요. ㅎㅎ 좋습니다. 모든 키를 다 모르지만 많이 쓰는 키들은 다 호환 되고요…ㅋㅋ

:wq!

으응>??? ㅋㅋ

 

[SVN] iMac에서 버젼 안맞다고 unrecognized url scheme for ‘어쩌구… 뜰떄…’

우선 어이가 없었습니다.

SVN버젼이 너무 오래 되었다고 해서 1.8.3 으로 다운 받아 설치? 

아니… 빌드를 다시 했드랬죠. (저의 회사  iMac에서요.. ㅎㅎ)

그런데… 이게 왠일? 잘쓰고 있다가 네X버의 저장소의 프로젝트를 쳌아웃 하려던 순간에…

두둥 unrecognized url scheme for …. 어쩌고 메세지가 뜨지 뭡니까?

캡쳐를 못한 것은 용서하소서… ㅠㅠ 구글링 신나게 해서 고쳐 놓고 보니.. 캡쳐를 깜빡한… ㅠㅠ

아무튼

http://ubuntuforums.org/showthread.php?t=947848

요기 링크의 요는 이렇습니다.

다른 것은 다 모르겠고 스크롤 중간즈음에…

type -a svn

Code:
andy@compy386 ~ $ type -a svn
svn is /usr/local/bin/svn
svn is /usr/bin/svn
svn is /usr/bin/X11/svn

로 확인하고

Code:

sudo rm /usr/local/bin/svn

 

이렇게 꼬인 부분을 날려 버려라로 해결했다지요…

음 지금 생각해 보니 저도 딱 저렇게 되어있었네요. 이건 우분투 포럼이라 그렇지요.

aaa@내아이맥 ~ $ type -a svn
svn is /usr/local/bin/svn
svn is /usr/bin/svn
svn is /usr/local/bin/svn

이렇게 같은 폴더가 있었습니다.

그래서 우선 sudo rm 으로 저 폴더를 날려 주었었지요.

지금 생각하니 /usr/bin/svn 이 꼬인 녀석이면 어땠을까? 하는 생각이 드네요.. 식겁. ㅠㅠ ( 매번 느끼는 것이지만 rm은 하기 전에 철저한 확인이 필요 한것 같네요… ㅠㅠ)

아무튼.. 그렇게 날렸더니… svn 실행이 안되네요… 헐…

어느 폴더든 cd ~

vi .profile (저의 iMac 기준 입니다.)

해보시면

스크린샷 2014-01-08 10.29.04

 

뭐 요런 식으로 생겨 먹은 녀석이 나오는 데요. #12 번이 제가 이번 작업에 추가한 녀석입니다.

즉… 패쓰를 걸어줘야 어느 폴더든 실행된다..  입니다.

다 아시겠지만…. 저처럼 삽질은 마시라고 확인차원에서 다시 올려 봅니다. 하하하 ㅜㅜ

이상입니다. 끝!!!

 

결론… 좀 단순하고 update 받을때 오래 걸려도 저는 SVN을 너무나 사랑…. 콜럭 좋아합니다. ㅋ (Git도.. 좋죠. ㅋ)

Mercurial 빡쎘어요… ㅠㅠㅠ 하긴 git도 그렇게 빡시게 써본 경험은 없네요… ㅋㅋㅋ

 

 

 

Option Key! 입니다… 잊지 맙시다… ^^;

음… 맘 먹고 또먹고 바꾸었다가 또 다시 맘 먹은 바로 그일을 오늘 단행했습니다.

맥북프로 17인치 – 2010 mid , Ram 8GB, cpu i5, sata 128gb

요녀석… 데이터를 백업하고

확 초기화 밀어버렸습니다.

아… 근데 그게 뭐였더라????? 부팅할때 그 하드 디스크 (부팅할 디스크 선택) 화면 뜨는거…. 아오…

겨우겨우 검색 끝에 컴 켜자마자 Option 키를 꾸욱 누르고 있으라는 것을 찾았다지요.. ㅠㅠ

네 그렇습니다. 옵션키 입니다. 잊지 맙시다. ㅠㅠ ( 다 알고 계시겠지만요.. ㅋㅋ )

이것은 알림 의미 보다는 제 망각을 극복해 보고 자 쓴 것입니다. ^^ 하하;

2014년에도 잊지말고 모든 행복한 것들만 기억하는 한해 되시어요…

감사합니다.

PS : 저 혹시 요놈 중고가 얼마 일까요? ㅋㅋㅋ

grep 을 이용한 문자열 제외하기 입니다.

 

저는 그동안에 grep을 완전 일부 기능만 사용하고 있었습니다. 문자열 찾기에만 ㅎㅎㅎ

이번에 검색을 해보니 http://tael.egloos.com/3836718

제외 시키는 것도 있었네요.

물론 있겠거니 했지만 쓸일이 없어서 안쓰고 있었는데…

이런 기능들을 꼭 익숙하게 외워 두어야 겠습니다. ^__________^

grep -v ‘제외할 문자열’

정도가 되겠네요. ^^