728x90
반응형
728x90
반응형
728x90
반응형

[읽기 전에...]

번역된 글에 경어와 비경어가 섞여 있을 있사오나 그것은 독자를 무시한 행동이 아니며 역자의 글쓰는 능력이 부족함을 한탄해야 것입니다. 허저분한 번역이 보기 싫으시면 바로 출처를 클릭하시기를 바랍니다. 역자의 글이 좋지않아 원문을 보지 않는 범하지 않도록 합시다

 

 

CStdString - 표준 C++ 사용한 CString-clone

 

 

출처 : https://www.codeproject.com/Articles/1146/CString-clone-Using-Standard-C

2001 5 29 초안

2004 8 5 갱신

2012 2 27 갱신

필자 : Joe O'Leary

역자 : j2doll

 

 

'표준 C++ 라이브러리의 basic_string 템플릿에 기반한 CString 대체물'

 

소개

 

 저(필자) 표준 C++ 라이브러리를 애용해 오면서도, basic_string<> 템플릿 만큼은 좋아하질 않습니다. 때때로 디자이너들의 한물간 방식들이 사용하기 어렵게 만드는 같습니다.

 반면, 필자는 MFC CString 클래스를 사용하기를 즐기는 편이었습니다. CString NULL 포인터를 체크해 주고, 암시적으로 const TCHAR* 변환시켜 주며, 문자열 프로그램을 사용하기에 손쉬운 멤버 함수들을 제공해 줍니다. ( Format(), Load() 등등 )

 하지만 물론, 필자는 이상 MFC 사용하지는 않습니다. 사실, 플랫폼 이식을 위해서 어떠한 독점적인 라이브러리도 사용하기를 원하지 않기 때문입니다.

 그래서 저는 양쪽 세계의 장점만을 모으기로 결심했습니다.

 그것이 클래스(사실은 템플릿) basic_string<TCHAR> 에서 상속받은 클래스 CStdString 입니다.

 그것은 basic_string CString 전체 API 더한 것입니다. 거기에 CString 사용 용이성에 basic_string 호환성을 보장받게 것입니다.

 간단히 말해서, CStdString 객체는 다음에 이야기할 몇몇 예외 사항을 제외하고는 basic_string 입니다. 그리고 CString 대체할 수도 있는 대체물이기도 합니다.

 그것들은 basic_string CString 양쪽 API 에서 가장 알려지고 많이 문서화된 부분들입니다.

 저는 글을 , 다른 코드 싸이트에도 올렸었습니다.

 하지만 필자가 CodeProject 좋아하기에 여기에도 또한 글을 올려봅니다. (이글의 원문은 codeproject 있습니다.)

 필자는 클래스를 지난 4년간 상업적인 프로젝트들에도 사용해 왔었습니다.

 그 결과, 클래스는 필자가 동안 만들어 중에 가장 유용한 것으로 증명되었습니다.

 하지만 물론 다방면으로 디버깅되어야 것입니다. 필자는 독자 분들도 점을 좋아하시기를 바랍니다. 어떤 문제 점이 있다면 이메일을 보내주시기를 바란다. (필자에게) 도움을 주시면 고맙겠습니다.

 CString 함수들의 작동을 나타낸 간단한 어플리케이션 소스를 제공하였습니다. (하지만 정말 대용품입니다.)

 예제 프로젝트의 목록들은 CString (또는) basic_string 템플릿을 사용합니다.

 

특징

 

  • 일단 CString 대체물로써 잠깐 생각하십시오. (아래 예외 사항도 보시기 바랍니다.)
  • 개의 항상 사용 가능한 사례 --- wchar_t 기반한 버전 CStdStringW char 기반 버전 CStdStringA. CStdString 단지 개중 typedef 것들의 하나입니다.
  • CString 처럼 모든 함수에서 문자열 NULL 체크의 안정성.
  • 특정 생성자와 할당 연산자는 자동으로 wchar_t 기반한 문자열과 char 기반한 문자열 간에 변환을 줍니다.
  • c_str() 으로의 암시적 변환 기능. (C++ 위원회에서는 이런 방식을 권장하지않습니다.)
  • Windows, UNIX, LINUX 포함한 몇몇 플랫폼에서의 빌딩되었다. Dinkumware, GNU, CodeWarrior, STLPort 포함해서 표준 C++ 라이브러리에서 구현 작동합니다.
  • Win32 Building DCOM IStream 사용하는 CStdString 객체의 멤버 함수로써, UNICODE/MBCS 변환 매크로 추가 기능(MFC처럼) 것립니다.
  • 기반 클래스 템플릿인 basic_string 어떠한 세부 구현도 필요가 없습니다.
  • 상속받은 템플릿은 basic_string 어떠한 멤버 변수와 가상 함수도 더하지 않습니다.

 그리고 코드에서 지적할 가지 주목할 (CString 과의 호환성과 basic_string 에서의 상속) 있습니다.

 

CString 호환성

 

 필자는 완전하게 똑같이 CString API 같이 재구현할 수는 없었습니다.

 그래서 (공유할 있지만 다르게 구현된) CString basic_string 위한 가지 함수들로 되게 하였습니다.

 이러한 경우에 CString 처럼 이라기보다는 basic_string 처럼 행동하는 CStdString 만드는 것이 최선이라고 느꼈습니다. (정확하게는…)

  • CStdString::operator[] (CString by-reference 와는 다르게) by-value 문자들을 반환합니다.
  • 생성자는 (CString 선언하는 것의 반대 순서로) 순서별로 문자를 가지고 숫자를 셉니다. 그것은 basic_string<> 정렬 방식입니다. 그리고 양쪽 버전 모두의 구현은 불가능할 것입니다.

 또한, CString 에서 구현하지 못한 개의 함수들이 있습니다. ( LockBuffer() UnlockBuffer() )

 

basic_string<> 의로부터의 상속

 

 필자가 작성한 basic_string 로부터 상속받은 템플릿은 가상 소멸자(virtual destructor) 없는 클래스 템플릿입니다.

 어떤 C++ 관한 소개글들에서는 가상 파괴자가 없는 클래스는 위험하다고 말한적이 있습니다.

 때로는 정의되지 않은 것처럼 정의되지 않은 것처럼 해야 수도 있습니다.

 다음같이 기반 클래스의 포인터를 통해 CStdStringA 삭제하는 것처럼 코딩할려면, 기술적으로 정의되지 않은 행동을 해야 합니다.

// 베이스 포인터에 상속 받은 객체를 할당

std::string* pstr = new CStdStringA( "Hi" ) ;

 

// 베이스 포인터를 통해 파생 삭제 à 정의되지 않음

delete pstr;

 

 하지만 (개인적으로) 많이 주목할 점이라고 생각하지는 않습니다.

 아마도 문제는 정말 얼마나 자주 문자열 객체를 이처럼 것인가 하는냐는 점입니다.

 필자는 동안 거의 동적으로 문자열 객체를 힙에 할당하는 일은 없었던 같습니다.

 그리고 베이스 클래스 포인터를 사용하지 않을 것입니다.

 이같은 사용하지 않는다면 크게 걱정할 일은 없을 것입니다.

 사실 이러한 방식으로 코딩한다면 CStdString 사용하는 것에 문제점이 있다고 의심해 만합니다.

 적어도 Microsoft Visual C++ 에서 이야기 하자면 에러와 메모리 누수가 없다고 이야기 있습니.

 아마 많은 다른 컴파일러들이 문제를 준다는 것에도 의심해 보야야 것입니다.

 하지만 필자의 의심은 C++ 세계의 현실성에 이용하지는 않을 것입니다.

 

역돌이 外書

: MFC 사용하여도 다음같이 문자열을 관리하는 일은 드물 것입니다.

CString *pStr = new CString () ;

(물론 C++ 모르시고 Java 아시다면 이게 뭐가 문제야 하시겠지만…--;)

역자도

CString strBuffer = _T( "Buffer" ) ;

_tcscpy( szBuffer, strBuffer );

같은 방식보다는,

_tcscpy( szBuffer, strBuffer.GetBuffer(strBuffer.GetLength()) );

정상적인 관리라고 생각하며, 필자의 의견에 동의해 봅니.

 이 글은 Verdana 글꼴에 최적화되어 있습니다. 2004 여름과 가을 사이, 짜증나는 날씨의 어느 . By j2doll… KIN~


2011 12 7일에 source code update 되었습니다.

 

StdString_demo.zip

StdString_src.zip


728x90
반응형
728x90
반응형


[공지] iCloud Control Panel 2.0 이상은 Windows XP로 구동할 수 없습니다. Windows를 upgrade하시기를 권장합니다.


  아이클라우드(iCloud)의 윈도우즈 지원 프로그램인 iCloud Control Panel 은 Windows Vista/7/8 이상에만 설치됩니다. Windows XP 사용자는 아쉽게도 설치를 포기해야 합니다만 여기 약간의 꽁수를 소개합니다. 이 방법은 설치나 작동시 문제가 생길 수도 있기 때문에 실험적인(?) 정신을 가진 분만 시도해 보시기 바랍니다. 정상적인 설치 및 연동은 반드시 애플에서 제공해 주는 방법만을 사용하시기 바랍니다.

  일단, 패널 설치 전에 itunes 설치는 필수 항목입니다.
itunes를 설치하지 않으신 분은 애플 싸이트에서 itunes를 다운로드
설치하세요!!


설치는 간단한 방법과 약간 복잡한 방법이 있습니다. 각각 아래를 참조하세요.


  간단한 방법은 압축해제후 바로 설치하시면 됩니다.

 약간 복잡한 방법은 방법을 터득하시면, 향후 패널의 업데이트시 직접 파일을
수정해서 적용하실 수 있는 장점이 있습니다.

----------------------------------------------------------------------------------------------------

* 간단한 방법 !!!

    (1) 아래의 압축 파일
다운받아서,
  
(2) 압축 해제후, (알집,반디집,7zip등으로 해제)
    (3) 
iCloud.msi 실행하여 설치 및 설정을 합니다. (현재 버전 1.1.0)
    (4) 64bit Windows 사용자는 iCloud64.msi 로 설치 하세요.


iCloudSetup-1.1.0.7z.001

iCloudSetup-1.1.0.7z.002

iCloudSetup-1.1.0.7z.003

iCloudSetup-1.1.0.7z.004

iCloudSetup-1.1.0.7z.005



---------------------------------------------------------------------------------------------------
* 약간 복잡한 방법 !!!

1) Microsoft Windows 7 SDK를 설치합니다. 설치 방법은 지시대로 위자드(Wizard)를 따라가면 됩니다.
 
2) 설치 후, C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin 경로로 이동합니다.

3) Orca.Msi 를 설치합니다.

4) 설치 후, 모든 윈도우즈 탐색기를 종료 후 다시 시작합니다.

5) 설치 프로그램인 iCloudSetUp.exe 를 7zip/winrar/반디집 등으로 압축 해제를 합니다.


6) 압축을 해제하면 다음과 같은 파일들이 보입니다.


7) 일단 설치 대상인 XP의 종류를 알아야 합니다. 일반적인 경우는 32bit XP 입니다, x64 XP를 설치하신 분은 당연치 64비트 XP 입니다. 잘 모르시면 윈도우즈 탐색기의 '도움말'/ 'WIndows 정보'를 보십시오. 64bit나 x64에 관한 이야기가 없으면 일반적인 32비트 XP 입니다.

8) 32bit XP인 경우, iCloud.msi 파일에 포커스를 두고 마우스 우측 키를 눌러 팝업 메뉴가 보이게 합니다. 그 메뉴 중 'Edit with Orca' 가 보이면 그것을 선택합니다. (64bit XP는 iCloud64.msi 를 사용합니다.)
 메뉴 중에 Edit with Orca 가 보이지 않으면 Orca 설치가 제대로 되지 않은 상태이므로, Orca.msi 로 Orca 를 설치하시기 바랍니다. 설치 후에 재부팅 등의 과정을 거쳐도 메뉴가 안보이는 경우는 SDK 설치 트러블슈팅 문제이므로 MSDN 정보를 참조하여 문제를 해결하는 수밖에 없습니다.


9) 아래와 같은 창이 보이면, 좌측 Table 목록 정보 중에서 LaunchCondition 를 선택합니다.


10) 이제 우측 목록 중에서 VersionNT>=600 이라는 항목을 더블클릭으로 선택하여 Version>=200 으로 변경합니다.


11) 저장(Save) 아이콘이나 저장 메뉴를 통하여 정보를 저장하고 Orca를 종료합니다.

12) iCloud.msi 를 실행/설치하면 설치 과정이 진행됩니다. (64bit XP는 iCloud64.msi)





Orca.7z


---------------------------------------------------------------------------------------------------
[2011-10-19] 저만 그런건지 모르지만 아이클라우드 중 포토 스트림이 제대로 지원이 안되네요! xp 에서 테스트를 좀더 해봐야 것습니다. Outlook 2007 연동은 잘되네요^^;

---------------------------------------------------------------------------------------------------
[2011-11-01] XP에서는 photostream 지원이 안됩니다. photogallery clients가 지원안되기 때문이죠. live suite, dx11 미지원등도 비슷한 이유입니다. 어둠의 방법도 찾아 보는 중인데, 글쎄요...

-------------------------------------------------------------------------------------------------
[2011-12-06] 1.0.1 버전이 올라온 것을 Orca 처리해서 올려봅니다. XP 사용자는 한번 테스트해보시고 문제있으면 리플주세요...  1.0.1도 XP에서 설치 잘되는군요^^;

-------------------------------------------------------------------------------------------------
[2012-03-16] 1.1.0 버전 올립니다. XP에서 설치안되면 글 남겨 주세요...

글이 도움이 되셨다면 아래 구글 광고 한번만 눌러 주십시오, 감사합니다^^.


728x90
반응형

'정보기술' 카테고리의 다른 글

Apache FOP example : Generate a PDF  (0) 2013.10.29
NetMon, NEWT  (0) 2012.10.04
[Q-Dir] 여러개의 Windows 탐색기를 하나로 사용  (0) 2010.04.09
VMWare Fusion Windows 설치와 F8 키  (0) 2009.08.06
IEEE 1471  (0) 2009.05.18
728x90
반응형

 

http://sabonrai.com/wp/pythonmath/

Python Math (Python for iPhone/iPad/iPod Touch)

 

 아이폰이나 아이패드에서 파이썬 인터프리터를 사용할 수 있는 어플입니다.

 가격은 현재 기준으로 무료(FREE) 어플입니다.

 python 2.7 버전이 기준이지만 파이썬 전체의 모둘을 넣은 것은 아니고 선택적으로 일부만을 넣어둔 상태입니다. 하지만 코어 기능의 모듈은 대부분 있어서 소규모 프로그래밍 작업이 가능합니다.

 수익을 얻기 위해 어플에 대한 허위정보를 뿌리는 블로그가 많아서, 비슷한 블로그로 인식될까봐  어플 소개 글은 가능한 안 적으려고 했지만... 무료인데다가 기능도 유용해서 글 적어봅니다^^;

 

 

728x90
반응형

'Python' 카테고리의 다른 글

Windows 10(x64) 에서 PyQt5 및 eric6 IDE 설치하기  (0) 2018.02.28
[python] Camel case 를 Snake case 로 변환  (0) 2018.02.20
Pygoogle-chart  (0) 2011.08.12
[python] system endianness 출력  (0) 2011.05.10
파이썬 임베딩 예제  (0) 2008.06.28
728x90
반응형
728x90
반응형
728x90
반응형


visual studio 2008/2010 을 대상으로한 색 모음(color scheme)입니다.
 사용 방법은
  1. *.settings 파일을 다운로드 받는다.
     다운로드시, 임의의 경로가 아닌 자신의 계정에서 접근이 가능한 경로에 넣어 둔다.
     (필자는 studio-style 경로등을 만들어서 넣어둠)
 2. visual studio menu 중 tools / import and export  settings 를 선택하여 설정 정보를
    import 한다. 이때 기존 사용 환경 정보를 백업하는 것도 가능하다.
 3. 대부분 일단 import 한 정보에다가 추가 변경 설정을 할 것이므로, *.settings 파일은 후에
    별도의 자신만의 이름으로 설정하여 재사용하는 것이 좋다.

012


728x90
반응형
728x90
반응형

 

http://pygooglechart.slowchop.com/

 

python 기반의 챠트 라이브러리이다. 이 라이브러리의 기능은 챠트에 자료 구조에 맞는 정보를 넣어 주면, 이미지 파일(*.png)로 생성하여 주는 것이다. 이미지의 종류는 원형, 막대형 등이 있다. 그 중 특이한 기능으로 QR 코드 생성이 있다. 이것으로 QR 코드 생성기를 만들 수 있다. 예제를 보자.

 

Hello, World! 라는 문자열을 QR 코드로 생성한다. Windows 용을 사용하기 위해서는 당연히 python 설치를 해야 하며, 설치본은 lib 에 설치된다. (windows vista/7 사용 시 설치는 관리자 권한으로 설치를 하도록 하자….

 

 

728x90
반응형
728x90
반응형
728x90
반응형
728x90
반응형
 

츌처 : http://www.scriptol.com/programming/history.php

 

C (1973, AT&T, Dennis Ritchie, Ken Thompson, Brian Kernighan…) – B 와 BCPL 의 계승자



 

  • 포인터(pointer) 기능을 계승하였다. (Bcpl 과 B 는 integer pointer를 사용한다.)
  • int i, char b 등의 자료형(data type)은 C 에서 만들어진 것이다. (Bcpl 는 근대 스크립트 언어(php 등)처럼 자료형이 없다.)
  • 연산자 += 는 algol 68 에서 온것이다. (하지만 c에서는 =+ 로 사용한다.)
  • Bcpl 에서, 블록(block) 정의는 (* 와 *) 사이 에, 주석(comments)은 /* 와 */ 사이에, sub-expressions 은 ( 와 ) 사이에 둘러 싸여 있다. C 언어는 간단히 { 와 } 로만 정의한다.
  • union 과 캐스트(cast)는 Algol 68 에서 온 것이다.
  • 증감 연산자( ++ ) 는 B 언어에서 온 것이다.
  • 키워드 include 는 PL/I 에서 온 것이다.
  • preprocessor 는 1973 년에 신규 구현되었다.

 

 

 

728x90
반응형
728x90
반응형
728x90
반응형
728x90
반응형

 

Membase 서버의 기본 네트워크 소켓 포트

Port

Purpose

Membase Server

Membase Client

Administration Client

8091

Web Administration Port

Yes

No

Yes

11211

Data Port

Yes

Yes

Yes

11210

Internal Cluster Port

Yes

No

No

4369

Erlang Port Mapper (epmd)

Yes

No

No

21100 to 21199 (inclusive)

Node data exchange

Yes

No

No

 

… 결론부터 이야기하면, 설정할 때는 8091 포트로 웹 브라우저에 의한 설정이 필요하지만, 어느 정도 구성 후에는 memcached default port 이기도 한 11211 포트로 소켓 통신을 하면 된다.

728x90
반응형
728x90
반응형
손쉽게 gnu glibc 의 버전을 확인하는 예제이다. 
728x90
반응형
728x90
반응형

 

http://www.freak-search.com/en/thread/790540/tzset_locks_in_linux_after_fork

 

 

"mike

10.08.2010 - 01:43


I've got an issue with an application I've developed that uses a

combination of threads (pthreads) and fork()'d processes.

 

In short, my parent process has a handful of threads that run to

perform various tasks; when a new request comes into the parent

process, it forks off a new child to handle the request; one of the

first things the child does is initiate a library that has a date

class that calls tzset().

 

My parent process also logs the requests from a thread, which writes

the date to the log using localtime_r(), which also calls tzset().

 

The problem, is that one of out every x child processes fork()'d

simply hangs at a lock in tzset() when the library is initialized.

 

I've reproduced this by creating a very simple test program, that

simply calls tzset() over and over from a thread, while it forks, and

then calls tzset() in the child process- I can get it to hang almost

immediately.

 

and this only seems to happen on my Linux machines (CentO/S 5.5)- my

FreeBSD (8.0) runs my test program file, without any locks.

 

So my question is: if I fork() while tzset() is holding a lock in the

parent process, will the lock get copied to the child process locked?

Is this a known result? is

here a way around this?

 

Test program, which is just a super simple version of what I see in my

real app, and gdb output below, which is when I attached to a child

process that had hung.

 

Mike

 

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

#include <unistd.h>

#include <signal.h>

#include <pthread.h>

 

static void* setter(void*)

{

while(1)

{

tzset();

}

 

return NULL;

}

 

int main(void)

{

pthread_t thread;

pthread_create(&thread, NULL, &setter, NULL);

 

signal(SIGCHLD, SIG_IGN);

 

while(1)

{

switch( fork() )

{

case 0:

{

fprintf(stderr, "CHILD >> tzset()\n");

tzset();

exit(1);

}

break;

 

case -1:

{

fprintf(stderr, ">> failed to fork() \n");

}

break;

 

default:

{

;

}

}

 

usleep(1000);

}

 

return 0;

}

 

Reading symbols from /home/mike/thr/test...done.

Attaching to program: /home/mike/thr/test, process 8397

Reading symbols from /lib64/libpthread.so.0...(no debugging symbols

found)...done.

[Thread debugging using libthread_db enabled]

Loaded symbols for /lib64/libpthread.so.0

Reading symbols from /usr/lib64/libstdc++.so.6...(no debugging symbols

found)...done.

Loaded symbols for /usr/lib64/libstdc++.so.6

Reading symbols from /lib64/libm.so.6...(no debugging symbols

found)...done.

Loaded symbols for /lib64/libm.so.6

Reading symbols from /lib64/libgcc_s.so.1...(no debugging symbols

found)...done.

Loaded symbols for /lib64/libgcc_s.so.1

Reading symbols from /lib64/libc.so.6...(no debugging symbols

found)...done.

Loaded symbols for /lib64/libc.so.6

Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging

symbols found)...done.

Loaded symbols for /lib64/ld-linux-x86-64.so.2

0x0000003512cdfade in __lll_lock_wait_private () from /lib64/libc.so.6

(gdb) bt

#0 0x0000003512cdfade in __lll_lock_wait_private () from /lib64/

libc.so.6

#1 0x0000003512c8d20b in _L_lock_1920 () from /lib64/libc.so.6

#2 0x0000003512c8d0f1 in tzset () from /lib64/libc.so.6

#3 0x0000000000400811 in main () at test.cpp:32

(gdb) info threads

* 1 Thread 0x2ab3c2e9dbb0 (LWP 8397) 0x0000003512cdfade in

__lll_lock_wait_private () from /lib64/libc.so.6

728x90
반응형

+ Recent posts