Hanoi Tower
//////////////////////////////////////////////////////////////////////////////// // Title : 하노이탑 // Author : 최민혁 // Revision : 2006. 9. 29 First implementation ///////////////////////////////..
키자드에 등록된 총 159개의 포스트를 확인하실 수 있습니다.
//////////////////////////////////////////////////////////////////////////////// // Title : 하노이탑 // Author : 최민혁 // Revision : 2006. 9. 29 First implementation ///////////////////////////////..
GetAsyncKeyState() 함수를 호출할 경우 키가 눌려져 있으면 최상위 비트가 1인 short형(2Byte) 리턴값을 리턴합니다 키가 눌려져 있지않으면 최상위 비트가 1이 아닌 어떠한 값을 리턴합니다 그래서 0x8000(최상..
DWORD SetExtendedStyle( DWORD dwNewStyle ); int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1 ); void CSampleDlg::InitListControl()..
BOOL InsertItem( int nItem, LPCTSTR lpszItem ); BOOL SetItemText( int nItem, int nSubItem, LPCTSTR lpszText ); ex) INT nRowCount = 0; ::CString strBuff; m_List.InsertItem( nRowCount, NULL ); m_List...
BOOL UpdateData( BOOL bSaveAndValidate = TRUE ); UpdateData( TRUE ); // 함수 시작부분에 많이 쓰이며 데이터를 가져올 때 쓰인다. UpdateData( FALSE ); // 함수 끝부분에 많이 쓰이며 변경된 데이터를 출력..
49.7일 후에 0부터 다시 카운트가 올라갑니다. 50일 이상 계속 켜 있는 시스템에서 사용하시는거라면 단순 증가비교만으로는 곤란한 일을 당하실수도 있습니다. The return value wraps around to 0 every 2^32 mi..
MySQL을 설치할 때는 Daemon 들이 root 소유자로 실행되지 않도록 하는 것이 좋다. 보안상 MySQL의 취약성이 발결되어 공격을 당하게 되면 곧바로 root shell을 획득하는 것이 가능하기 때문이다. 따라서 MySQL을..
for( size_t i = 0 ; i < DEF_MAX - 1; i++ ) { srand( time(NULL) ); nRandIdx = (rand() % (DEF_MAX - (i + 1))) + (i + 1); std::swap( m_nTable[i], m_nTable[nRandIdx] ); } nixie77 님이 알려줘서 짜본 소스..
네트웍 게임을 개발할때 부딪히는 물리적 한계가 두가지 있습니다. Bandwidth 와 Latency Bandwidth의 한계로 신호를 많이 보낼 수 없는 것 뿐만아니라, 자주 보낼 수도 없습니다. 기본적으로 리얼타임게임에서는..
datetime -> second SELECT DATEDIFF( S, '1970-01-01 09:00:00', datetime ) second -> datetime SELECT DATEADD( S, second, '1970-01-01 09:00:00' ) * 우리나라는 9시간을 더해주고 빼주는 처리를 해줘야하기..
INSERT INTO Table (Col1, Col2) VALUES (@Val1, @Val2) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT IF @Error != 0 OR @RowCount != 1 BEGIN SET @ErrMsg = 'FAILURE: Cannot insert row' GOTO ERROR END..
SELECT TOP [출력갯수] * FROM [테이블 명] WHERE [열 이름] NOT IN(SELECT TOP [시작줄] [열 이름] FROM [테이블 명]) 예) SELECT * FROM MyTable WHERE idx LIMIT 5,20 변환 SELECT TOP 20 * FROM MyTable WHERE..
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters 에 REG_DWORD 타입으로 MaxUserPort 를 추가하고 60000 이라고 입력하면 이론상 60000까지 됩니다. 출처 : http://www.gpgstudy.com/foru..
Postgresql 설치 관련해서 정리해봅니다. 아래의 원문을 기반으로 작업을 해보면서 다시 정리를 한 내용입니다. 환경에 따라서는 에러가 나는 경우가 있어서 제 환경에 맞게 다시 정리해본 내용입니다. * 필자의 O..
SYSTEM_INFO lpSystemInfo; GetSystemInfo( lpSystemInfo ); lpSystemInfo.dwNumberOfProcessors * 2 + 2 이 숫자가 적당하다는 얘기지 최적이란 얘기는 아니다!
1. 소켓 이벤트 핸들링 IOCP > Overlapped Callback > select > WSAAyncSelect > WSAEventSelect 순서로 좋다고 합니다. 제 기억으로 2003년까지만 하더라도 IOCP 방식의 유용성에 대한 논란이 있었지만 이후 Wind..
공인 IP는 말그대로 외부에 공개가 되어있는 IP입니다. 때문에 각 호스트당 한개밖에 사용을 할수 없다고 하죠 이 말인즉슨 외부에는 공인IP를 찾아가기 위한 라우팅 경로가 항상 존재합니다. 때문에 제가 공인IP..
요약 : 사설 IP주소를 공인 IP주소로 바꿔주는데 사용하는 통신망의 주소 변환기이다. 본문 : NAT를 사용하는 목적에는 2가지가 있는데, 첫째는 인터넷의 공인 IP주소를 절약할 수 있다는 점이고 둘째는 인터넷이..
Fetch & Merge 로컬에서 작업을 하다보면 원격저장소에 변경사항이 생긴다. 클론받은 이후에 원격저장소에 누군가 소스를 푸시하면 이 변경사항을 다시 로컬로 가져와야 하는데 이 과정을 fetch로 원격저장소의 변..
xcopy "srcDirectory" "dstDirectory" /s /i /y 일을 하다보면 특정폴더끼리의 복사를 빈번하게 사용해야 될 경우가 있다 이때 xcopy 로 배치파일을 만들어두면 편하다 /s 는 하위폴더까지 복사한다는 옵션 /i 는..
디버깅할때 아래와 같은 한줄을 추가하면 int x = WSAGetLastError(); 가장 최근에 일어난 윈속에러를 변수 x 를 통해 알 수 있다. x 에 대입된 값을 MSDN 이나 컴파일러의 Error Lookup 에 입력해서 원인을 파악..
* strcpy 등의 길이제한이 없는 함수는 사용하지 않는다 -> strncpy, memcpy와 같은 함수를 사용하고, 스트링 맨 끝에, 0을 넣어주는 것이 안전하다. 특히나 클라이언트에서 올라온 데이터는 더더욱 그렇다. * 포..
FROM_UNIXTIME( int ); int -> datetime UNIX_TIMESTAMP( datetime ); datetime -> int 아우~ 헷갈려~ ㅋ FROM_UNIXTIME( timestamp ) 주어진 타임스탬프 값으로부터 'yyyy-mm-dd hh:mm:ss' 또는 yyyymmddhhmmss..
Nagle 알고리즘을 요약하자면 다음과 같다. ACK를 받지 못한 데이터가 있는 상황에서는, 조그만 세그먼트들은 ACK를 받을 때까지 보낼 수 없다. 대신 이 조그만 세그먼트들은 하나로 합쳐져서 ACK가 도착했을 때..
컴파일러는 컴파일한 결과를 에러와 경고라는 진단 메시지로 출력한다. 모든 문법이 정확하다면 아무런 진단 메시지도 출력되지 않지만 사람이 컴퓨터가 아닌 한 보통은 한 두 개 정도의 메시지를 받게 된다. 이..
parameter argument C++ 표준 에서는 정확하게 argument와 parameter를 정의했다. (C++ 기초플러스 4판 320p ~ p321p) 파라미터(parameter)란 무엇인가? ※ 함수의 전달되는 값을 넘겨받는 데 쓰이는 변수 ※ 파라..
좀 어렵기는 하지만 Git은 정말 좋은 도구이다. Git을 쓰기 시작하면서 SVN이 얼마나 불편하고 구린지를 이해할 수 있다. 어쨌든 GitHub의 엄청난 성장아래 이제는 대부분의 오프소스 프로젝트들이 GitHub로 이전..
앞선 글에 이어 SynchronizationContext 에 관해서 좀더 이야기 해 보자. 이제까지 코드 혹은 객체와 Thread를 커플링 시키는 방식으로 동기화를 구현하는 것에 관해서 이야기 했는데, 여기서 한가지 필수적인 메..
다양한 프레임워크와 라이브러리를 사용하는 요즘의 프로그래밍을 하다가 보면 의례 빠지지 않고 나오는 이름이 Context 다. 웹 프로그래밍을 하는 경우에도 보면 심심찮게 등장하는 클래스들 중에 Context 라는..
String.IsNullOrEmpty - 지정된 문자열이 Nothing 이거나 Empty 문자열인지 여부를 나타냅니다. - null 이거나 String.Empty String.IsNullOrWhiteSpace - 지정된 문자열이 Nothing 이거나 비어있거나 공백문자로..
Process.Start(new ProcessStartInfo("explorer.exe", "\"" + @"http://mhchoi8423.tistory.com/" + "\"")); 출처 : http://stackoverflow.com/questions/14585709/openning-a-url-containing-a-query-string
작성 : 김수영(Microsoft Visual C# MVP) .NET N'Gene(http://www.dotnetngene.kr) 훈스닷넷 SYSOP(http://www.hoons.kr) 버전 : 1.0 보통은 사용하려는 객체를 모두 초기화 하고 사용한다. 하지만 때에 따라서(메..
https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx
未处理 System.InvalidOperationException Message=无法关闭撤消单元,因为不存在已打开的单元。 Source=PresentationFramework StackTrace: 在 MS.Internal.Documents.UndoManager.Close(IParentUndoUnit unit, U..
닷넷 프레임워크 기반 프로그래밍에서 회자되는 내용 중에 "어려운 범주"에 속하는 주제들이 몇 가지 있는데, 그 중 하나가 AppDomain에 관련된 것입니다. 닷넷 프레임워크는 전통적인 프로그래밍 모델인 프로세스..
C++로 코드를 짜는 경우 중복컴파일을 막기위해 헤더파일에 #ifndef AAA_H #define AAA_H . . . #endif 를 써주는 데 이것 대신 맨 윗줄에 #pragma once 한줄만 써주면 동일한 효과를 얻을 수 있다. 게임 프로그래..
Console.WriteLine("{0:+00;-00}", 10); 출력 : +10 Console.WriteLine("{0:+00;-00}", -10); 출력 : -10
public bool CheckPassword(string password) { if (Regex.IsMatch(password, @"[a-zA-Z0-9~`!@#$%^&*()_\-+={}[\]|\\;:'""<>,.?/]") == false) return false; return true; } 주의할 점은 -, ], \ 앞에는 \를 하..
<TextBlock> <TextBlock.Text> <MultiBinding StringFormat="{}{0} + {1}"> <Binding Path="Name" /> <Binding Path="ID" /> </MultiBinding> </TextBlock.Text> </TextBlock> 출처 : http://stackoverflow.com/qu..
void RegisterDLL(string filename) { var process = new Process(); process.StartInfo.FileName = "regsvr32.exe"; process.StartInfo.Arguments = "/s \"" + filename + "\""; process.StartInfo.UseShellExecu..
void ModifyShortcutTargetName(string shortcutFilename) { WshShell shell = new WshShell(); FileInfo LinkFile = new FileInfo(shortcutFilename); if (LinkFile.Exists) { IWshShortcut link = (IWshShortcut..
예전에, .NET 응용 프로그램에서 예외 처리를 하는 방법에 관해 정리해놓았지요. ^^ .NET 예외 처리 정리 ; http://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&wid=316 WPF - 전역 예외 처리 ; http://..
사용 방법 view source print? 1. string strUrl = "http://mhchoi8423.tistory.com" ; 2. // 총 2개의 POST 데이터 만들기 3. string strPostData = string .Format( "id={0}&pw={1}" , "idvalue" , "passwordval..
우선 Synchronization, 동기화의 의미에 대해 좀 살펴봐야 겠는데, 일단 동기화 라고 하는 것은 멀티스레드와 관련이 있는 단어다. 즉 싱글스레드에서는 동기화라고 하는 개념은 없다고 생각하자. 그럼 멀티스레드..
.NET 프로그래밍을 하는 데에 있어 한가지 장점을 꼽으라면 전에 비해 상당히 쉬워진 멀티쓰레드 프로그래밍이라고 할 수 있다. 하지만 많은 개발자들이 놓치는 부분이 쓰레드에서 UI를 접근하는 부분이다. 우선..
Win32 API나 윈폼에서 한글 입력을 막기 위해 IME 관련 메시지들을 처리했던 기억이 있습니다. WPF와 Silverlight에서는 InputMethod 클래스의 SetIsInputMethodEnabled 메서드를 사용해서 쉽게 처리할 수 있습니..
https://msdn.microsoft.com/ko-kr/magazine/dd419663.aspx
C# 코드 파일은 C 계열 언어와 달리 .cs 파일 하나에 코드를 구현한다. 구현에 있어 클래스가 길어질 수 있는데(클래스가 장대하게 길어지면 그것도 디자인을 잘못한듯) #region-#endregion을 이용하여 코드를 문..
(1) Intro 윈폼을 건드려본 사람은 Label 과 TextBox 컨트롤은 매우 친숙할 것이다. WPF 에서는 여기에 TextBlock 이라는 컨트롤이 추가되었는데, 무엇이 다른걸까? 우선 MSDN 에서 각각의 컨트롤을 어떻게 정의했..
ControlTemplate을 정의할때 부모 컨트롤의 속성을 받아들이기 위해 TemplateBinding을 사용한다. 즉, ControlTemplate을 버튼 내부에 정의한다고 가정했을때 해당 ControlTemplate 내의 Rectangle 요소와 버튼의..
C# String Formatting UPDATE: I show alternate ways to use string formats in WPF in this post:WPF String Formatting This entry has been copied from SteveX (http://blog.stevex.net/index.php/string-for..
WPF에서는 메인스레드에서 생성한 컨트롤에 다른 스레드가 접근하지 못하도록 되어있습니다. 접근하려고 하면 다음과 같은 에러메시지에 직면하죠 : “다른 스레드가 이 개체를 소유하고 있어 호출한 스레드가 해..