2010년 9월 25일 토요일

Processing 외부 library 설치 장소: Sketchbook

대부분의 언어가 그렇듯이, Processing 도 독자 라이브러리를 지원합니다.

 

오늘 처음으로 TRAER.PHYSICS 라는 외부 라이브러리를 사용했습니다.

 

프로세싱은 외부 라이브러리를 Sketchbook 폴더 아래에 두라고 합니다.

 

그래서,

 

C:\Processing\libraries

(C:\Processing\ 은 프로세싱 실행파일이 있는 폴더)

 

밑에 두면 되는 줄 알았는데 그게 아니네요.

 

아래 주소가 정확합니다.

 

C:\My Documents\Processing\libraries\

(in Windows)

 

/Users/Username/Documents/Processing/libraries

(in Mac OS X)


 

 

참조 링크:

http://www.learningprocessing.com/tutorials/libraries/

 

2010년 9월 17일 금요일

Lenovo thinkpad synaptics utilities

Lenovo Thinkpad의 Touchpad 회사인 Synaptics에서 만든 터치패드를 이용한 유틸리티 입니다.

 

1. SynZMetr

 

lenovo 드라이버와 기타 유틸리티 설치 시 C:\Program Files\Synaptics\SynTP 경로에 설치 됩니다. 터치패드를 누르는 강도에 따라 빨간 그래프가 그려집니다.

 

간단한 실험을 해봤는데, 역시 실제 압력 값은 아니군요. 전도성 고무로도 해봤는데요, 아무리 세게 눌러도 오른쪽 그래프가 한계네요. (왼쪽 두개는 손으로 한 것.) 전기가 흐르는 양에 따라 표시되는 것 같습니다.

 

 

 

2. Synaptics Drum Pad

 

 터치 패드를 누르는 위치에 따라, 위 4개 사각형 중 하나에 표시가 되고 동시에 소리가 나오네요. 귀여운 어플리케이션입니다. 그런데 생각보다 인식이 잘 안되네요. 터치패드는 그 위에서 이동하는 손을 인식하기에는 적합하지만, tap을 인식하기에는 적당하지 않은가 봅니다.

 

 

3. Theremin

 터치패드에서 터치되는 위치에 따라 소리가 나는 유틸리티입니다. 너무 높은 소리도 나서 듣기 힘드네요. ㅎㅎ

 

 

4. Touch Pad Says

 2번과 같은 UI지만, 터치패드가 내는 소리를 따라서 치는 간단한 게임입니다.

 

 

 

위 2~4번 유틸리티는 Synaptics 홈페이지에서 다운로드 할 수 있습니다.

http://www.synaptics.com/support/utilities

 

lenovo 사용자라면 한번 시도해 보세요~ ^^

 

 

 

+ 친절하게 라이브러리도 제공하네요.

http://www.synaptics.com/developers/archive 에서 "MepLib Porting Guide" 란을 참고해보세요. 터치패드를 응용한 프로그램도 재미있을 것 같네요. ^^

2010년 9월 16일 목요일

Moon walk: gesture recognizing keyboard -- sensor test

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

졸업 연구 중인 Moon walk (잠정적 이름 ^^;) 센서 테스트 영상입니다.

2010년 9월 13일 월요일

WPF Study -- Data Binding and Style

Data Binding
 - 컨트롤과 엘리먼트를 데이터에 연결시키는 기술

Style
 - 엘리먼트에 적용되는 프로퍼티의 집합.


2010년 9월 10일 금요일

오토마우스 오토키보드 소스

푸 요청으로 올립니다.

옛날에 짠 소스인데... 아래 SendInput  이라는 API 로 마우스/키보드 흉내를 낼수 있습니다.

오토 마우스/ 키보드가 가능하다는 것이지요...

굳이 복잡한 후킹기술 안써도 아래 소스로 충분합니다.

 

 

[code csharp] using System; using System.Runtime.InteropServices; namespace AutoKeyMouseExample { internal class Win32APIs { [DllImport("user32.dll", SetLastError = true)] public static extern uint SendInput(uint nInputs, ref INPUT pInputs, int cbSize); [DllImport("user32.dll")] public static extern IntPtr GetMessageExtraInfo(); [StructLayout(LayoutKind.Sequential)] public struct MOUSEINPUT { public int dx; public int dy; public uint mouseData; public uint dwFlags; public uint time; public IntPtr dwExtraInfo; } [StructLayout(LayoutKind.Sequential)] public struct KEYBDINPUT { public ushort wVk; public ushort wScan; public uint dwFlags; public uint time; public IntPtr dwExtraInfo; } [StructLayout(LayoutKind.Sequential)] public struct HARDWAREINPUT { public uint uMsg; public ushort wParamL; public ushort wParamH; } [StructLayout(LayoutKind.Explicit)] public struct INPUT { [FieldOffset(0)] public int type; [FieldOffset(4)] //* public MOUSEINPUT mi; [FieldOffset(4)] //* public KEYBDINPUT ki; [FieldOffset(4)] //* public HARDWAREINPUT hi; } /***************************** * EVENT CONSTANTS * *****************************/ public const int INPUT_MOUSE = 0; public const int INPUT_KEYBOARD = 1; public const int INPUT_HARDWARE = 2; public const uint KEYEVENTF_EXTENDEDKEY = 0x0001; public const uint KEYEVENTF_KEYUP = 0x0002; public const uint KEYEVENTF_UNICODE = 0x0004; public const uint KEYEVENTF_SCANCODE = 0x0008; public const uint XBUTTON1 = 0x0001; public const uint XBUTTON2 = 0x0002; public const uint MOUSEEVENTF_MOVE = 0x0001; public const uint MOUSEEVENTF_LEFTDOWN = 0x0002; public const uint MOUSEEVENTF_LEFTUP = 0x0004; public const uint MOUSEEVENTF_RIGHTDOWN = 0x0008; public const uint MOUSEEVENTF_RIGHTUP = 0x0010; public const uint MOUSEEVENTF_MIDDLEDOWN = 0x0020; public const uint MOUSEEVENTF_MIDDLEUP = 0x0040; public const uint MOUSEEVENTF_XDOWN = 0x0080; public const uint MOUSEEVENTF_XUP = 0x0100; public const uint MOUSEEVENTF_WHEEL = 0x0800; public const uint MOUSEEVENTF_VIRTUALDESK = 0x4000; public const uint MOUSEEVENTF_ABSOLUTE = 0x8000; /***************************** * VIRTUAL KEYS * *****************************/ public enum VK : ushort { /* * Virtual Keys, Standard Set */ VK_LBUTTON = 0x01, VK_RBUTTON = 0x02, VK_CANCEL = 0x03, VK_MBUTTON = 0x04, /* NOT contiguous with L & RBUTTON */ VK_XBUTTON1 = 0x05, /* NOT contiguous with L & RBUTTON */ VK_XBUTTON2 = 0x06, /* NOT contiguous with L & RBUTTON */ /* * 0x07 : unassigned */ VK_BACK = 0x08, VK_TAB = 0x09, /* * 0x0A - 0x0B : reserved */ VK_CLEAR = 0x0C, VK_RETURN = 0x0D, VK_SHIFT = 0x10, VK_CONTROL = 0x11, VK_MENU = 0x12, VK_PAUSE = 0x13, VK_CAPITAL = 0x14, VK_KANA = 0x15, VK_HANGEUL = 0x15, /* old name - should be here for compatibility */ VK_HANGUL = 0x15, VK_JUNJA = 0x17, VK_FINAL = 0x18, VK_HANJA = 0x19, VK_KANJI = 0x19, VK_ESCAPE = 0x1B, VK_CONVERT = 0x1C, VK_NONCONVERT = 0x1D, VK_ACCEPT = 0x1E, VK_MODECHANGE = 0x1F, VK_SPACE = 0x20, VK_PRIOR = 0x21, VK_NEXT = 0x22, VK_END = 0x23, VK_HOME = 0x24, VK_LEFT = 0x25, VK_UP = 0x26, VK_RIGHT = 0x27, VK_DOWN = 0x28, VK_SELECT = 0x29, VK_PRINT = 0x2A, VK_EXECUTE = 0x2B, VK_SNAPSHOT = 0x2C, VK_INSERT = 0x2D, VK_DELETE = 0x2E, VK_HELP = 0x2F, /* * VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39) * 0x40 : unassigned * VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A) */ VK_LWIN = 0x5B, VK_RWIN = 0x5C, VK_APPS = 0x5D, /* * 0x5E : reserved */ VK_SLEEP = 0x5F, VK_NUMPAD0 = 0x60, VK_NUMPAD1 = 0x61, VK_NUMPAD2 = 0x62, VK_NUMPAD3 = 0x63, VK_NUMPAD4 = 0x64, VK_NUMPAD5 = 0x65, VK_NUMPAD6 = 0x66, VK_NUMPAD7 = 0x67, VK_NUMPAD8 = 0x68, VK_NUMPAD9 = 0x69, VK_MULTIPLY = 0x6A, VK_ADD = 0x6B, VK_SEPARATOR = 0x6C, VK_SUBTRACT = 0x6D, VK_DECIMAL = 0x6E, VK_DIVIDE = 0x6F, VK_F1 = 0x70, VK_F2 = 0x71, VK_F3 = 0x72, VK_F4 = 0x73, VK_F5 = 0x74, VK_F6 = 0x75, VK_F7 = 0x76, VK_F8 = 0x77, VK_F9 = 0x78, VK_F10 = 0x79, VK_F11 = 0x7A, VK_F12 = 0x7B, VK_F13 = 0x7C, VK_F14 = 0x7D, VK_F15 = 0x7E, VK_F16 = 0x7F, VK_F17 = 0x80, VK_F18 = 0x81, VK_F19 = 0x82, VK_F20 = 0x83, VK_F21 = 0x84, VK_F22 = 0x85, VK_F23 = 0x86, VK_F24 = 0x87, /* * 0x88 - 0x8F : unassigned */ VK_NUMLOCK = 0x90, VK_SCROLL = 0x91, /* * VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys. * Used only as parameters to GetAsyncKeyState() and GetKeyState(). * No other API or message will distinguish left and right keys in this way. */ VK_LSHIFT = 0xA0, VK_RSHIFT = 0xA1, VK_LCONTROL = 0xA2, VK_RCONTROL = 0xA3, VK_LMENU = 0xA4, VK_RMENU = 0xA5, VK_BROWSER_BACK = 0xA6, VK_BROWSER_FORWARD = 0xA7, VK_BROWSER_REFRESH = 0xA8, VK_BROWSER_STOP = 0xA9, VK_BROWSER_SEARCH = 0xAA, VK_BROWSER_FAVORITES = 0xAB, VK_BROWSER_HOME = 0xAC, VK_VOLUME_MUTE = 0xAD, VK_VOLUME_DOWN = 0xAE, VK_VOLUME_UP = 0xAF, VK_MEDIA_NEXT_TRACK = 0xB0, VK_MEDIA_PREV_TRACK = 0xB1, VK_MEDIA_STOP = 0xB2, VK_MEDIA_PLAY_PAUSE = 0xB3, VK_LAUNCH_MAIL = 0xB4, VK_LAUNCH_MEDIA_SELECT = 0xB5, VK_LAUNCH_APP1 = 0xB6, VK_LAUNCH_APP2 = 0xB7, /* * 0xB8 - 0xB9 : reserved */ VK_OEM_1 = 0xBA, // ';:' for US VK_OEM_PLUS = 0xBB, // '+' any country VK_OEM_COMMA = 0xBC, // ',' any country VK_OEM_MINUS = 0xBD, // '-' any country VK_OEM_PERIOD = 0xBE, // '.' any country VK_OEM_2 = 0xBF, // '/?' for US VK_OEM_3 = 0xC0, // '`~' for US /* * 0xC1 - 0xD7 : reserved */ /* * 0xD8 - 0xDA : unassigned */ VK_OEM_4 = 0xDB, // '[{' for US VK_OEM_5 = 0xDC, // '\|' for US VK_OEM_6 = 0xDD, // ']}' for US VK_OEM_7 = 0xDE, // ''"' for US VK_OEM_8 = 0xDF /* * 0xE0 : reserved */ } } } [/code]

2010년 8월 26일 목요일

IT업계 여성으로 행복하게 살아가기 위한 노하우 세미나 (#1 우미영 퀘스트소프트웨어코리아 대표님편)

오늘 데브멘토에서 주최하는 'IT업계 여성으로 행복하게 살아가기 위한 노하우 세미나'에 참석하였습니다. 정원이 100명이었는데 20명 정도 왔습니다. 세미나 시간이 오후 2시라 직장에 계신 분들이 신청해놓고 많이 못 오신 것 같아요.

 

강연자 분은 우미영 퀘스트소프트웨어 지사장님과 박남희 MS 상무님이셨습니다. 두 분 다 정말 좋은 강의를 해주셔서 여성으로서의 인생과 커리어를 고민하고 있는 저에게 많은 도움이 되었습니다. 아래는 두 분 프로필입니다.

 

 

이번 글에서는 우미영 퀘스트소프트웨어코리아 대표님의 강의를 나름 요약하겠습니다. 캐주얼하게 ^^

 

 

커리어

 

졸업당시 커리어에 대한 고민을 별로 하지 못했다. 당시 친구들은 준비를 잘해서 대기업에 취업하거나 공무원, 교사가 되었다. 나는 준비를 잘 못했기 때문에 졸업하고 나서 할 일이 없었다. 그래서 선배들이 만든 벤처기업에 들어가게 되었다. 당시에는 벤처기업이라는 말도 생소했다. 중소기업이었다. 실제로는 5-6명이 있어 소기업이라고 불릴 정도였다. 전공이 영문과였기 때문에 IT기업이었던 선배네 회사에서는 잡다한 일을 주로 하게 되었다. 번역, PR, 고객 교육, 메뉴얼 작성, 그리고 개발,... 8년 동안 열심히 일했다.

 

그런데 IMF가 오고나서 월급도 넉넉히 받지 못한 회사에서 1년 동안 무급으로 일한 후, 결국 회사를 그만두게 되었다. 중소기업에서 너무 고생하였기 때문에 이제 죽어도 중소기업으로 가지않겠노라, 결심하고 대기업인 삼성 SDS의 문을 두드리게 되었다. SDS의 아는 분께 이력서를 보여드렸지만, 돌아오는 말은 "미영씨를 쓰고 싶은데, 미영씨가 회사에 어떤 밸류를 줄 수 있는 지 모르겠어요."라는 말이었다. 경력관리를 소홀히 한 탓이었다.

 

실패한 인생이라고 생각되었다. 8년 전으로 돌아가 다시 시작하고 싶은 마음 뿐이었다. 그래서 지금이라도 공무원이나 교사 준비를 할까, 라고도 생각했다. 그러나 아이들도 있고, 사정이 여의치 않아 결국 막 창업한 start up 회사로 다시 입사하게 되었다. 하지만 이번에는 커리어에 대해 고민을 하고, 포지션에 대한 결정을 하였다.

 

결정은 pre-sales 이었다. (지금의 technical sales) 지금도 그렇지만 그때는 영업에 대한 편견이 더 강했다. 방문판매를 하거나, 물건을 팔기위해 사람을 속이고, 문전박대를 당하기도 하는 이미지였다. 부모님의 반대도 거셌다. 하지만 나에게 맞는 일이라 생각하였기 때문에 마음을 굳게 먹고 선택을 하였다.

 

pre-sales 일을 하다보니 영업 쪽에 욕심이 생겼다. 영업 일을 하고 싶어서 사장과 영업사원 몰래 1년 동안 두 회사에 영업 활동을 하였다. 그 회사가 대전에 있어 일주일에 두 번은 대전에 갔다. 개발도 해봤으니 기술적인 것을 물어보면 알려주고, 모르면 공부해서라도 그 다음주에 알려줬다. 그렇게 1년을 하니 어느날 수억의 수주가 떨어졌다. 계약서를 가지고 사장님께 가서 영업직으로 옮겨달라고 요청했다.

 

그렇게 영업직으로 옮겼지만, 술도 잘마시고 고객과 노는 것도 잘 했지만, 남자 영업사원과의 격차는 좁혀지지 않았다. 남자들만의 관계를 넘어설 수는 없었다. 차별화가 필요했다. 그래서 하게 된 것이 기술책 (당시 유행하던 자바언어) 번역이었다. 영문과 출신이니 할만 하다고 생각해서 시작했고, 그래서 받은 돈이 겨우 200만원이었다. 그 돈으로 내가 번역한 책을 사서 만나는 고객마다 드렸다. 그랬더니 고객들이 나를 다르게 받아들이기 시작했다.

 

나는 단순한 영업사원이 아니라, 전문가가 되어있었다. 기술 강의도 하게 되었고, 남성 영업사원과는 다른 강점을 갖게 되었다. 차별점을 갖게 된 것이다.

 

 

필살기

 

그렇게 열심히 공부하며 열정적으로 고객을 만나니 3년 동안 2800명의 고객을 만나게 되었다. 한번이라도 만난 사람은 그날그날 엑셀에 정리했다. 그렇게 만시간 정도 투자하니, 이제는 내가 연락하지 않아도 고객한테서 저절로 연락이 오게 되었다. 나를 찾는 사람이 생긴 것이다.

 

물론 시간 투입만이 능사는 아니다. 방법론이 중요하다. 10년, 15년 영업하던 사람만의 노하우를 배우기 위해 따로 책을 사서 공부했다. 당시에는 IT 관련 영업에 대한 책이 번역되지 않아 아마존에서 책을 구매해서 공부했다. 아직도 적용할 내용이 많아 현재 번역본을 가지고 스터디 그룹을 운영하고 있다. 따로 공부한 것이 많은 도움이 되었다.

 

이 모든 것은 내가 영업을 좋아하기 때문에 가능했던 것이다. 나는 고객을 만나는 것을 정말 좋아했다. 어떤 고객을 만나고 일주일이 지나면 그 고객을 다시 보고 싶어 안달이 난다. 내가 좋아하는 것을 알고 선택했기 때문에, 이렇게 까지 올 수 있다. 현재는 지사장이 되어 고객을 직접 만날 일이 많지 않지만 일부러라도 고객을 만나려 하고 있다.

 

10년 후는 보이지 않는다. 그러니 현재 좋아하는 일에 집중하는 것이 중요하다.

 

 

여성만의 강점

 

직급이 올라갈 수록 일희일비하지 않고, 다양한 분야에 대한 리더십을 갖는 것이 중요하다. 그것보다 더 중요한 것은 청렴함이다. 첫째도 청렴, 둘째도 청렴이다. 나는 여성이 이것에 대해 강하다고 생각한다. 오락실가자고 해서 따라가지 않지 않는가? ^^

 

 

직장생활은 가정생활에 도움이 된다.

 

배우자는 직장동료와 같아 서로 직장에서의 고충을 이해할 수 있다. 자녀는 팀원과 같아 내가 칭찬하고 동기부여해야할 대상이고, 나와 다른 독립체이다. 다른 가족, 도우미아줌마, 경비아저씨는 협력사와 같다. 내가 잘하면 그만큼의 신뢰를 받아, 안심하고 나의 팀원을 맡길 수 있다.

 

 

인맥관리

 

나는 인맥관리를 따로 하지 않는다. 따로 인맥을 만드는 모임에 나가봤는데, 먼 인맥 때문에 가까운 인맥을 소홀히 하게 되는 것 같았다. 그래서 오래 직장생활을 하다 자연스레 생긴 주변의 친구, 동료가 나의 진정한 인맥이라고 생각하고 소중하게 관계를 유지하고 있다.

 

 

써놓고 나니 요약이 아니네요. ^^; 다른 내용도 있었지만 다음에 따로 정리하겠습니다.

정말 재밌고 푸근한 강의여서 한 시간이 후딱 지나갔습니다. 다음은 Q&A에요. ^^

 

 

Q. 성공한 인생이란?

A. 자신이 좋아하는 것을 찾아가는 인생이 성공한 인생이라고 생각합니다. ^^

 

Q. 어떤 배우자를 만나는 것이 좋은가요? (제가 한 질문이에요 ^^;)

A. 첫째 화목한 가정에서 자란 사람, 둘째 건강, 셋째 성실함이라고 생각합니다. 인물도 좋으면 좋지요. ^^

 

 

질문하고 머니클립 선물 받았어요~ 매우 고급스러워서 기분이 좋았답니다. ^^ 강의 끝나고 명함도 받았어요~

 

 

내일 메일 보내려구요. 멘토가 필요하면 연락 달라고 하셔서 감동받았습니다. ㅎㅎㅎ

 

다음으로 박남희 상무님 편도 곧 올리겠습니다.