Archive for 1월 2014

[앱소개] 아가이름 1.0을 오늘 드디어 구글스토어에 올렸습니다.

스크린샷 2014-01-23 13.27.34

 

요녀석 겉 모습 보기엔 그래도…. 참 저를 그 새벽시간까지 잠 못자게 만든 녀석 입니다.

https://play.google.com/store/apps/details?id=com.tegine.bebename

아무래도 개인적인 프로젝트이다보니 갤럭시 노트 1 만을 기준으로 만들었습니다.

테스트도 갤노트 1에서 밖에 못했네요.

개인적으로는 넥서스 7 등 태블릿 시리즈에서도 해보고 싶군요.

하하…

많은 조언 부탁 드립니다.

 

PS : 저의 앱에 이쁜옷을 입혀주실 능력자 디자이너분…. 없으신가요? ㅎㅎ

 

[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

 

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

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

복 받으실 겁니다.

대박나세요… ㅎㅎ

이상입니다.

 

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

스크린샷 2014-01-09 10.44.04

 

 

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

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

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

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

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

:wq!

으응>??? ㅋㅋ

 

[개발자이야기] 멋진 선배님들의 경험을 소중히 생각합니다.

 

http://www.bloter.net/archives/166736

 

2011년의 일이다. H2Soft에 재직하던 시절이다. (필자가…)

네이버에서 주최하는 DEView2011 에 간 경험이 있다.

그 때 대표님과 배려님 깊은 선배님들 덕분에 군 제대 이후 첫 사회 생활 경험을 평탄하게 잘 해왔다.

그리고 젊은 대표님 이시다 보니 생각이 고리타분하시지 않고 언제나 열정이 넘치셨다.

개발자들의 축제!!!

첫 경험이 마지막 경험이었다. (ㅠㅠㅠ)

아무튼 그때 그자리에 서셨던 분의 기사인데… 참 대단하시다는 생각이 든다.

나도 내 분야에서 개발일을 배우고 연구하면서 노하우를 쌓아야 겠다.

“오래된 코드는 버려라!”

라는 명언아닌 명언이 있지만, 나는 내 지난 코드에서 나의 뻘쭘함과 삽질을 느낀다.

잘된 코드는 길이길이(?) 써먹진 못하더라고, 많은 도움을 준다.

이것이다.

경험.

내가 그렇다고 당장 실리콘 밸리니, 애플이니, MS니 하는 곳은 못 가겠지만,

생각폭을 좁히지는 말아야 겠다는 생각을 했다.

서비스만 좋으면 전 세계를 대상으로 경쟁할 수 있으니까!!

라는 넓은 포부도 가져 본다. ^^

[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도 그렇게 빡시게 써본 경험은 없네요… ㅋㅋㅋ

 

 

 

개발이 좋아요!!!

인터넷 블로그 들을 방문하던 차에 좋은 곳이 있어서 링크를 걸어 둡니다.

http://www.zinicap.kr/archives/2686 (여기 주인장님 감사합니다. )

요는 나는 우리나라 개발자이고, 자랑스럽다 이다.

이것은 나의 마인드와도 일치한다. 읽어보니 나도 열심히 살아야 겠다는 생각이 들었다.

개발자를 단순 코더 취급하고,

백이니, 뭐니 하는 사치품들로 치장하는 갑들이 개발자들 시스템 구축 비용은 후려치고,

인력단가 낮추려고 안달한 갑들에 맞서 싸우는 정신!!!

좋다. 힘을 나도 보태고 싶다.

내 딸아이도 컴퓨터를 좋아한다면 개발을 시키고 싶다. ( 작년에 아니 2012년 12월 이니 재작년에 태어난 … ㅎㅎ)

나도 프로그래머다! 라고 자랑스럽게 말하고 싶다.

내가 바라는 것은 단지 저는 한!인!택! 입니다.

하고 어느 자리에서 내 이름을 말했을때… 아 너 좀 한다매? 개발… ㅎㅎ

이런 소리 듣는 사람이 되는 것이다.

남 인정 잘 못하는 한국사회에서 이름을 기억해 주고, 뭐 하는지, 잘한다고 칭찬을 듣는다는것.

이것이 내겐 무한한 영광이자, 내 목표이다.

그럴려면 아직 갈 길이 멀다.

하루종일 각종 SDK 레퍼런스들과 싸워야 한다. Googling 을 통해 모든 예제 소스들

(요즘 관심있는 것은 역시나 Android, Python, lua, iOS)을 읽어야 한다.

웹서비스, 다 되어있는 워드프레스 말고  (워드 프레스가 나쁘다는게 아니라, 좋은 시스템이나, 내가 이런 것을 만들어 보고 싶다는 뜻에서) 나 만의 사이트도 구축해 보고 싶다. ie 없어도 되는 chrome , firefox 의 세상… ^^ 캬…

나는 믿는다.

우리 개인 개인 한사람, 한사람은 힘이 없다. 발언도 약하다.

하지만 이런 개인이 모여 단체가 되면, 개발자들도 무시 안당하고,

펜대쟁이 갑들과 동등한 위치에서 거래(그래, 기존엔 정당 거래가 아니었다@@@)를 공정하게 할수 있다.

외국의 유수한 프로그래머와 비교해도 뭐 하나 빠지지 않는 우리 프로그래머 선배님들을 나도 좇아 배우고 싶다.

이제 개발 4년차에 접어 들었다. 만 3년이 지났다.

돌아보면 열심히 산다고 했지만, 부족한 점이 많다. 매번 하던것만 하고, 자기깜냥을 아직 벗지 못했다. (그래.. 그것은 자존감이 아니었다.)

일신우일신 이라는 말을 집어 치우더라도, 하루하루를 열심히 살아서 시대에 뒤 쳐지지 않는 인택이가 되자.

내 딸아이에게 부끄럽지 않은…

내 딸아이가 성장하여, 우리 아빠 프로그래머야…

하고 자랑스럽게 이야기 해줄 날을 기대하며…

이 글을 줄일까 한다.

” 나 는 ! 개 발 이 좋 아 요 ! ”

 

[구글] 구글 검색어- 흥미롭게 다뤄 보시지요 ㅎ

요기는 계속 업뎃 해보려 합니다. ^^

1차 : 2014년 1월 2일 헐 3일이구나… 자야겠다. ㅠ

URL : www.google.com/preferences > 설정
search > intitle:”index of” > 페이지 제목에서 검색
intitle:”index of” “backup files” –
intitle:”index of” index.php.bak
allintext:”hack” > 페이지 본문에서 검색
inurl:”tegine”
allinurl:”tegine”
site:tegine.net
filetype:pdf
inanchor:www.tegine.com > text 내에서 <a href= …”></a> 에서 검색
info:www.tegine.com
filetype:ini inurl:ws_ftp
filetype:xls + password
allinurl:admin mdb
inurl:/admin/login.asp
phpMyAddmin inurl:main.php
intitle:”Apache Tomecat” “Error Report”
“#Dumping data for table”
netcat download
inurl:sploits
“#include <stdio.h>” usage exploit