2010년 9월 29일 수요일

정의란 무엇인가 : 우리는 우리를 소유하는가?


"정의란 무엇인가"라는 책에 대해서 지난주 주말 푸랑 토론한 내용~


책에는 이렇게 나와 있다.

우리는 우리를 소유하는가?

우리가 세금을 낸다면...
노동의 일부를 내는 것이고
그것은 곧 우리 시간의 일부를 내는 것이고
따라서 어떻게 보면 우리는 우리의 시간은 소유하지 않으므로
우리의 일부를 소유하지 않는 것일수도 있다.


위 글의 논지는, 국가에 세금을 바치는 것은 곧 우리의 시간을 바치는 것과
마찬가지이므로 우리는 결국 국가의 소유임에 다름없다는 것이다.

많이 일해서 많이 벌수록 세금을 많이 내게 되는것은 사실이다.
그렇다면 노동의 양이 많은 만큼 우리는 우리의 시간을 소유할수 없게 되는 것이고
결론적으로 우리는 우리의 일부를 소유할수 없게 되는 것이다.

또한, 위 글의 또다른 전제는 노동의 가치가 시간에 비례한다는 것이다.
이는 산업사회에서는 맞는 이야기이다. 공장에서는 시간 많이 들이면 많이 생산하므로
시간이 많이 드는 일이 곧 가치가 높은 일이라는 공식이 성립한다.
결국 우직하게 열심히 일하면 그만큼 일의 가치가 높아진다는 것이다.

하지만,
일에 많은 시간을 투자하는 것은 결국 스스로를 소유하지 않게 되는 것이라는 전제가 있으므로
많은 시간을 투자해 우직하게 일하면 그만큼 나를 더 소유하지 않게 되는 것이다.

아이러니가 아닐수 없지 않은가?

따라서 결국 무리하게 야근을 하고 주말출근을 하며 자신을 일에 바치는 것은
결국 자기 자신을 그만큼 더 잃게되는 것일지도 모른다.

물론 산업사회의 노동자로서는, 일한 연차만큼 경험이 쌓이고 숙련도가 올라가므로
다른 의미에서는 일이 자신을 키우고 따라서 완전히 자신을 잃지는 않는다고 할수는 있다.

하지만 지식사회는 다르다. 지식사회에서는 내 일만 열심히 한다고 해서 그의 가치가 올라가진 않는다.
끊임없이 새로운 지식을 탐구하고 자신의 영역을 넓혀가야 변화에서 살아남을수 있다.

따라서 자기 자신을 소유하지 않을 만큼 몸바쳐 일하는 것은 결국 자신의 수명과 가치를 깎아먹을수도
있다는 것이다. 너무 열심히 일만 하다보면 결국 자신은 자신의 현재 일자리와 회사 밖에서는
별다른 가치가 없는 존재가 될수도 있는 것이다. (실제로 그럴지도 모른다.)

따라서 결국 우리 엔지니어 = 지식 노동자는 일에서 떠나 자신을 위한 공부를 할 시간이 필요하다.
하지만 여러 환경들은 여전히 산업사회라서, 앉아있는 시간만큼 그의 생산성과 가치를 인정받으므로,
자신을 지식사회가 아닌, 산업사회의 일부로 스스로 인정하고 적응하지 않는다면

결국 그러한 환경에서 떠나거나 도태되고 만다.
적어도 위와 같은 모순을 깨달은 사람이라면...

그래서 많은 사람들이 괴로움을 느끼는 지도 모른다.




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]