Archive for ScriptLanguage

[Python] 다시 시작해 보는 python…

2012년에 결혼할 때 즈음 이었다.

사정이 생겨 다니던 h2soft를 그만두게 되었다. (내 인생의 2번쨰 실수로 평가될 만큼 의미있는 일이다. ㅠㅠㅠㅠ 아니면 여기서 스킬을 더 업 할수 있었을 텐데…,, 내 인생의 1번쨰 실수는.. 음… 부사관 지원한거? ㅋㅋㅋ후회는 없으나… ㅋㅋㅋ)

아무튼 그때 신 대표님 께서는 내게 두툼한 python 책을 주시면서 공부해 두면 좋을 것이라는 조언을 해 주셨다. 받은후 얼마 동안은 책의 내용도 타이핑 해보고 했지만 딱 거기 까지였다. (아 이런 의지박약…)

하지만 늦었지만 이제라도 다시 시작해 보기 위해 다시 타이핑을 시작하였다.

책을 훑어보고 크롬을 열고… 터미널의 vi를 연채였다.

ㅋㅋㅋ

또 꼬룸 님께서 알려주신 구글 검색법 중 how to xxx 용법을 신나게 써먹을 차례다….

how to read text file in python … ㅋㅋ 뭐 이런거? ㅋㅋ

1.

file = open(‘newfile.txt’, ‘r’)

print file.readline()

2.

file = open(‘newfile.txt’, ‘r’)

for line in file:

        print line,

file.close()

클래스 개념 없으면 뭐 걍 2줄로도 텍스트 파일을 불러오는 구나.. ㅋㅋ

내친김에 txt2json 뭐 이런거 함 만들어 보자… ㅋㅋ 지금부터 시작. ㅋㅋ

[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 선택해 주시면 됩니다. ^^ ㅎㅎ

 

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

 

[Python] 역시 강력한 파이썬 입니다. ^^

json 이라던가 하는 Text 파일들을 가지고 놀때 가끔

아… 홀수 라인만 필요한데… 라는 경우가 있습니다.

아니나 다를까 검색을 해 봤더니…

http://www.py4fun.kr/?p=55

 

#!/usr/bin/python

# -*- coding: utf-8 -*-
#purpose: 홀수 라인만 별도 파일로 저장
#usage: ./thisfile input_file
#result: result.txt - 홀수라인만 담은 파일
import sys
in_file = sys.argv[1]
out_file = 'result.txt'
try:
    in_fd = open(in_file,'r')
    out_fd = open(out_file, 'w')
    i = 1
    for line in in_fd:
        if i%2 == 1: # 홀수 라인
            out_fd.write(line)
        i=i+1
    in_fd.close()
    out_fd.close()
    print 'Process End'
except IOError:
  print >> sys.stderr, "We can't file open"
가 있었네요….
요기 주인장님 감사합니다.
이 파이썬 소스와 구글 스프레드 시트로 삽질 시간을 많이 벌었습니다. ^^

[TextMate] 텍스트 메이트 에서 의미 없는 빈줄 (Empty Line??) 없애 버리기.

스크린샷 2014-01-20 20.51.08

 

보이실까? 모르겠습니다.

^\s*$\n

위의 녀석을 정규식으로 검색해서, replace 문자에 암것도 안 넣은 상태에서 치환하면

빈란이 없어 지네요.

이 건뭐 다 아시겠지만, 저는 구글링을 통해 삽질을 하였기 때문에 다음에 또 이런 삽질 방지 차원으로

기억을 위해 공유해 둡니다. ~ ^^ 삽질 하지 마소서!! ㅋㅋ

[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 까지 안녕히 계세용. 꾸뻑!

[script] 구글 양식 – 응답보기, 스프레드시트 자동 채우기

회사에서 업무가 어디 아이폰, 안드로이드에 국한된 업무만 올까요?

아니죠… 정말 이 시대를 살아가는 저희 IT쪽은 팔방미인을 넘는 팔백방미인(?)을 원하는 것 같네요.

각설하고…

경비를 기존 시스템에서 구글 서버로 옮기는 작업중에 양식을 만들어서 사원들의 답을 받아올 수 있다는 것을 알았네요. 매일 쓰는 구글이지만 안쓰면 모른다는… ㅜㅜ

아무튼 구글 양식으로 답을 받으면 아래 처럼 응답 양식 스프레드시트 회색음영부분 처럼 데이터가 삽입됩니다.

gc-1

 

흰색 부분을 자동으로 채우는 게 목표지요… ㅎㅎ

회색부분에서 값을 읽어서 기존에 미리 준비해둔 사원 주소록과 비교해서 매칭되는 값을 읽어오는 것입니다.

자 그럼 스크립트 에디터 부터 열어 볼까요?

 

gc-2

 

도구 > 스크립트 편집기를 선택합니다.

gc-3

 

원래는 행번호 1부터 인데 작업 해둔것이 있어서 처음 보이는 부분만 일단 노출시키려다 보니 15 부터 시작되네요.. 양해 부탁 드립니다.

여하튼….

기존에 데이터가 들어 있는 상황을 가정하고… (제가 삽질한 순서대로 기술 합니다.)

우선 구글링을 통해서,

https://developers.google.com/apps-script/guides/sheets

이 사이트 내에서 여러 함수들을 확인하고나서, 바로 들어갑니다.

sheet.getRange(9,5).setValue(sheet.getRange(8,5).getValue());

아래 그림을 보시면 아시겠지만 당장 위의 구문만을 설명하자면, 8,5==>E8 의 값을

E9에 셋팅하라는 뜻이지요…

저는 E8에 값이 아닌 식을 셋팅 했었지만, 위의 식은 단지 값을 복사하네요… 꽝입니다.

아… 그 전에… 어차피 같은 Row에 colume 이 다르지만 작업 내용은 윗줄 복사해 넣는 것임으로

반복할 필요없이 바로 for 들어 갔습니다. [ 이 함수는 빈칸 채운다 해서 fillEmptyCell 이라 명명 하였습니다.]

for ( var colume = 5;colume<12;colume++ ){

// sheet.getRange(9,colume).setValue(sheet.getRange(8,colume).getValue());

sheet.getRange(9,colume).setFormula(sheet.getRange(8,colume).getFormula());

}

후후… 헐 .. 역시나… 윗줄을 잘 복사해 오네요… 어라? 값이 이상합니다.

(캡쳐에는 없지만 금액을 틀리게 했었거든요. 그런데도 윗 줄과 완전 동일한 값이 나왔습니다.) ㅠㅠ

(뭔소리 냐면… =search(“@”,b8) 공식은 e9 에서는 =search(“@”,b9) 가 되어야 하는데…. e9 행에서도 =search(“@”,b8)로 입력이 되었다는 것이지요.. ㅜㅜㅜ)

이거 뭐죠? 헐…

그때 얼핏 자동완성에서 setFormulaR1C1을 본 기억이 났습니다.

에랏 모르겠다. 적용해 봅니다.

sheet.getRange(rIdx,colume).setFormulaR1C1(sheet.getRange(rIdx-1,colume).getFormulaR1C1());

그리고 어차피 빈칸 다 채워야 하므로, 마지막 행 값도 읽어와 봤습죠…

일단 로그를 찍어 보았습니다. (cmd+enter, 스크립트 편집화면 보기>로그)

Logger.log(rows.getLastRow());

여기서는 9.0 이겠군요. 잘 떴고요.

기왕 이렇게 된거 빈칸이 여러줄 생길지 어찌 알겠습니까?

row 도 for를 돌렸습니다.(rIdx)

그리고 초기화셋 위한 작업이라는 주석이 달린 것은 데이터가 하나도 없는 경우에 대비한 것입니다.

(오작동… 공란을 가져다 복사해 넣는다거나 하는 ㅜㅜㅜ)

sheet.getRange(“E2”).setFormular(“=search(\”@\”,B2)”);

이때 setFormular 는 setFormulaR1C1 아닙니다. 이것 때문에 몇시간을 날렸지요.. ㅜㅜ

gc-4

 

암튼 스크립트 언어들을 잘 다룬다는 것은 쉽지 않은 여정인 것 같네요.

휴~ 아무튼 두서없이 쓴 글을 읽어 주셔서 감사합니당.~ ^^

복 받으실 겁니다.

대박나세요… ㅎㅎ

이상입니다.

 

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

 

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

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

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

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

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

grep -v ‘제외할 문자열’

정도가 되겠네요. ^^

 

음.. Python으로 만들어본 간단한 properties 확인기 입니다.

 

잘 아시겠지만 별 내용은 없고요…

그저 파이썬을 이용해서, 키 밸류 값 뽑아서 , 엑셀 작업에 유용하게 써 보고자

만들게 되었습니다.

간단하게 구글링해서 만들었고요…

기록 목적과 함께 다른 분들 께서는 시간 버리지 마시고 이용해 보시라고 공개해 봅니다.

www.한인택.com 에는 파일로 올려 두겠습니다. ㅎㅎㅎ

 

스크린샷 2013-12-24 오전 12.29.21

 

물론 조언도 함께 받고 있습니다.

더 좋은 방법들은 댓글에 남겨주세요.. ㅎㅎ 감사합니다.

아참 #27,28,29 는 작동을 안하는 것인지.. 참 깝깝하네요.. ㅎ line 끝에 캐리지 리턴 없애려고 하는데요.. ㅠㅠ

2013.12.24

25 if ( listArg[2] == ‘1’ ):

26         kValue = mList[1]

27         lenTemp = len(kValue)

28         print kValue[:lenTemp-1]

이상입니다.

 

[moai – tip] 귀찮은 모아이 터미널 창 한번에 끄기 Tip 입니다.

スクリーンショット 2013-12-12 오후 12.32.49

 

맥 스크립트를 이용해서 간단하게 짜 봤습니다.

물론 실력 많으신 선배님께서는 더욱 짧게 간단하게 하실수 있겠지만요… 하하.. 저의 내공이 좀 부족해서요…

Google 검색신공을 이용하다 보니 아직 정리 안된 부분도 보이네요…

이 스크립트는 간단하게 moai 를 이용해서 짜신 프로그램을 모바일 기기가 아닌 맥에서 테스트 하실때 귀찮은 창들이 열리게 되는데요.. 일일이 안끄고 한번에 몰아서 끄게 해주는 팁 입니다… ㅎㅎ

물론 더욱 간단하게 하실수 있는 분들의 조언도 받고 있습니다. 하하하

dandyhani2010 at gmail.com 으로 연락 주세용~ ^^

다른 귀찮은 프로세스 죽일때 응용하셔도 되고요… ㅋㅋ

 

+ 첨언 :

chmod +x myscript

ps 는 프로세서 보여주는 녀석,

grep 은 결과치에 대한 문자열 검색기 ( -v 는 그 문자열 포함 된 것은 제외 시키기)

이상입니다.

Dart-Box2d 가 벌써 포팅되어 나왔군요. ㅠㅠ

Dart 언어를 안지 몇일 안된 시점인데 검색하니 벌써 참으로 많은 것들이 되어 있었습니다.

https://github.com/dart-lang/dart-box2d

벌써 박스2d가 다트로 포팅되었네요 ㅎㄹ

http://japhr.blogspot.kr/2011/12/getting-started-with-dart-editor-and.html

여기도 참조할 만한 사이트 인것 같아서 정리차원에서 긁어 왔습니다.