반응형

netstat -at 

으로 네트워크 상태 알아보기 가능


네트워크 프로그래밍을 하다보면 network server, client를 만들어놓고 에러 발생할 때 디버깅을 위해 유용하다

연결을 했단 끊었다 다시 연결을 했다가 끊었다가 하는 일이 많을텐데

이 때 이전의 연결이 끊어지지 않았는지

새로운 연결이 이전 연결 끊어진 후에 된 게 맞는지

새로운 연결에서 pending이 되어있는지를 확인하기 위해 활용 가능


client가 connect를 하고

server가 accept를 했을 때 established되는지를 주로 확인한다.

그리고 disconnect했을 때 다시 대기상태에 있는지 확인한다.

반응형
반응형

이번에 부모님 노트북의 하드디스크를 SSD로 교체해 주었는데

남은 하드디스크를 중고로 판매하기 위해 로우 레벨 포맷을 하게 되었다.


HDD를 포맷을 할 때 두가지 종류가 있다.

빠른 포맷은 MBR, GPT등 파티션 정보만 초기화하는 것이라 빠르고, 실제 HDD 섹터의 레코드 값은 남아있어 나중에 복구가 가능하다.

이런 복구 가능성을 방지하기 위해서 Low Level Format을 하게 됩니다.

Low Level Format이라는 것은 사실 공장초기화를 하는 것인데 

일반적으로는 모든 디스크의 섹터 레코드에 실제 값인 0값으로 채워넣어서 복구를 시도해도 이전 자료를 복구할 수 없도록 하는 것이다..


평상시 나라면 구지 로우레벨 포맷을 하진 않는데 

내께 아니라서 확실하게 로우레벨 포맷해드리기로 한다.





유틸리티는 :  HDDGURU.com의 HDD LLF Low Level Format Tool

http://hddguru.com/software/HDD-LLF-Low-Level-Format-Tool/


이름부터 믿음이 간다. HDD GURU



프로그램은 무료이고 속도 제한이 걸려있다. 

50MB/s, 1시간에 180G정도

유료 라이센스를 구입하면 속도제한이 해제가 된다.


500G하드디스크 로우레벨 포맷을 하려면 대략 3시간 정도가 소요.

유료 버전은 속도제한이 없다고만 명시되어있어 더 빠를 텐데 얼마나 더 빨라지는 지는 모르겠다.

하드디스크 성능에 따라 달라지기 때문에 적어놓지는 않은 것일 것이다.



일단 무설치버전으로 받아서 실행한다.


동의하고 넘어간다.



무료로 사용할 거니 continue for free선택




Low Level Format할 하드디스크를 선택

꼭 확인 하고 재확인하자

대상 하드디스크가 아닌 잘 사용중인 하드디스크를 포맷하는 실수를 하게 된다면 정말 어마어마한 재앙이다

한번의 클릭 실수도 허용해선 안된다.



TAB에서 LOW-LEVEL FORMAT을 선택하고 FORMAT THIS DEVICE를 클릭한다.



YES를 누르면 시작





0%부터 잘 진행이 되어 100%까지 완료가 되었다 대략 3시간 정도 소요됨



LOW LEVEL FORMAT이 끝나고 나면 디스크가 모두 삭제되어있으므로 아직은 사용할 수 없다.

제어판/ 관리도구 / 컴퓨터관리/ 디스크관리 를 실행해서 Windows에서 디스크를 초기화해주는 작업을 해야 한다.


선택을 하면 디스크를 초기화 하라고 나온다.


파티션 관리를 뭘로 할 지 선택을 해야 한다.


500G정도는 MBR로 만든다. 


참고로 요즘 고용량 하드디스크는 GPT로 생성하는 게 좋다.

MBR로 3TB하드디스크를 다 생성 못하고 2.X TB까지만 할당하는 걸 보고 GPT로 바꿨던 경험이 있다.



이제 파티션 정보가 생성되면 디스크를 사용할 수 있게 된다.



위도우에서 사용 할 수 있도록 드라이브를 할당하고 빠른 포맷을 한다.





여기까지 진행되고 나면 끝

탐색기에 들어가면 이제 사용할 수 있는 준비가 다 되어있다.


폐기해야 할 HDD에 중요한 정보가 있어 꼭 삭제해야 한다면 이렇게 Low Level Format을 하는 것을 권장한다.


반응형
반응형

네이버가 검색에서 가장 큰 퍼센트를 차지하는 우리나라 현실에서

내 블로그가 검색에 노출될 수 있도록 하기 위해서는 아무래도 네이버 블로그가 가장 유리합니다.


티스토리 블로그여도 검색노출은 가능하지만 아무래도 네이버 블로그에 비해 조금은 불리함은 어쩔 수 없다는 생각이 듭니다.

블로그 지수가 엄청 높은 티스토리 블로그는 상위에 빵빵 올라주긴 하지만 많은 티스토리 블로그들은 그렇지 않은 것이 현실입니다.

실례로 왠만한 검색을 해보면 네이버블로그가 가장 많은게 현실입니다.


그래도 티스토리를 써야 하는 분들중 상당수가 구글 애드센스를 사용하기 위해서이죠. 이 경우는 티스토리 블로그를 쓸 수밖에 없습니다.

조금이라도 검색에 노출을 더 시킬 수 있도록 구글에 티스토리 블로그를 등록한다면 분명 도움이 될 것입니다.

국내 검색시장에서도 구글 점유율이 계속 올라가고 있는 트렌드니 절대 손해볼일은 아닐겁니다.


그래서 조금이라도 구글에서 검색에 도움 될 수 있도록 구글 웹마스터도구에 티스토리 블로그를 등록하는 방법을 알아보겠습니다.


1. 먼저 구글 웹마스터도구에 들어갑니다.


2. 웹마스터 도구에 들어가서

'속성추가'를 클릭합니다.

사이트를 추가하는것을 '속성'을 추가한다고 표현하네요

사이트 주소명을 입력하도록 나오며 사이트주소를 입력합니다.


3. 소유권확인 절차입니다.

구글에서 권장하는 방식은 해당 사이트가 구글 애널리틱스를 사용하고 있다면 구글애널리틱스 추적코드를 사용해서 소유권을 하는 것입니다. 이미 구글애널리틱스에서 소유권확인이 된 것이기 때문에 별도로 할 것이 없는것이죠.

대체 방법으로 블로그의 HTML수정에서 meta 태그에 소유권 확인 코드를 넣는 방법으로도 가능합니다. 구글애널리틱스를 사용하지 않는다면 이 메타태그를 블로그의 스킨 HTML에 삽입하여 진행합니다.


4. 이렇게 확인을 누르면 아래와 같이 소유권 확인이 완료되고 등록이 됩니다.


5. 이렇게 완료된 후 RSS, 사이트맵, 등 다양한 도구들을 추가로 등록함으로서 검색효율을 높일 수 있도록 해당 내용을 알려줍니다.


6. 사이트맵 제출을 클릭합니다.

그리고 SITEMAP 추가/테스트를 클릭하고 티스토리 주소에 rss를 붙여서 제출합니다.

제출 후 아래 그림처럼 사이트맵 컨텐츠 웹페이지를 제출하게 됩니다.


이정도까지 했다면 

앞으로 구글 검색 노출에 더 유리해지겠죠.


반응형
반응형

네이버 사이트 상위노출 알고리즘은 공개되어있지 않으며 추측만 가능함


1. 키워드의 정확성

   같은 키워드인 경우 방문자 수가 많을 것

2. 내용의 참신성, 독창성 

   글, 이미지, 형식 등등이 기존에는 없던 창작된 것이면 좋을듯


반응형
반응형

리눅스 커널

http://blog.naver.com/ddduuu12/50175011706


리눅스는 어떻게 개발되어지나?

http://cafe.naver.com/op2x/59514




반응형
반응형

네트워크 TCP성능 관련,Socket Option으로 튜닝하기

http://nostalgia76.tistory.com/entry/AIX-TCP-%EB%B0%8F-UDP-%EC%84%B1%EB%8A%A5-%EC%A1%B0%EC%A0%95


http://cafe.naver.com/fmtrade7/239


http://cafe.naver.com/cyberzone/648













반응형
반응형

1. OS설치(라즈비안 받아서 Win32DiskImager로 4GB SD에 넣고

2. 부팅후 세팅(SSH enable, passwd등등)

3. 계정생성(groups보고 그대로 adduser)

4. pi계정 삭제(deluser)

5. 자동로그인 설정(/etc/inittab) 이거하면서 주석처리하려고 #을 누르니 키보드 설정이 다른지 \이 #이었음)



라즈베리파이

http://www.rasplay.org/


라즈베리파이 운영체제 설치 및 파일 서버 만들기(설정 처음사용시 따라할 것)

http://naturis.kr/2063


라즈베리파이 자동로그인(따라해보자 이것저것 글타래 따라가보기)

http://blog.daum.net/hevyflat/35


원격SSH 사용관련

http://kocoafab.cc/tutorial/view/314

 

사운드설정

http://kocoafab.cc/tutorial/view/340


Audio out을 USB Audio out으로 세팅

(I2S DAC사용안하고 일반 DAC에 USB input으로 연결하고 싶은데 이 세팅하면 되는가?)

DAC의 LAN port에 I2S라고 써있던데 LANport로 I2S out세팅은 가능한지 궁금함

http://plugable.com/2014/11/06/how-to-switch-to-usb-audio-on-raspberry-pi


Volumio : DLNA 서버의 가동.

(BubbleUPnP에서 스마트폰음원을 스트리밍 Volumio플레이어는 기본으로 되었음)

(Volumio의 USB등의 파일을 BubbleUPnP로 play하기 위해 세팅이 필요)

http://egloos.zum.com/nemonein/v/5267631








라즈베리파이 부팅, 무선랜 설정

http://elenoa.tistory.com/388


라즈베리파이 N100mini 설정

https://pklazy.wordpress.com/2013/02/23/%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4-n100mini-%EC%84%A4%EC%A0%95/

반응형

'Tech > 프로그래밍' 카테고리의 다른 글

리눅스 개발 및 커널 이야기  (0) 2017.01.12
네트워크프로그래밍  (0) 2016.07.08
MFC MDI SDI 설명 및 팁  (0) 2013.07.09
MFC 분할윈도우만들기 및 Tip  (0) 2013.07.06
Virtual Serial Port Emulator  (0) 2013.07.06
반응형

chrome프로그램의 속성값에서 

대상 값을 

"C:\Program Files\Google\Chrome\Application\chrome.exe" --no-sandbox

으로 변경한다.


반응형
반응형

  출처: openwiki - http://wiki.rabidus.net/ow.asp?p=MFC%5FMDI%5FSDI&a=print


  MFC MDI SDI

  MFC MDI and SDI

Reseach

DocTemplate를 추가시 리소스를 반드시 할당해야 한다.

등록된 DocTemplate가 여러개일 경우 NEW_FILE을 하게 되면 다이얼로그가 떠서 등록된 템플릿중에 하나를 골라 새 윈도우를 생성하게 된다. 그런데 이때 리소스쪽에 몇가지 작업(스트링 테이블에 CNewTypeDlg를 위한 문자열)을 하지 않으면 인식되지않아 첫번째로 등록된 문서템플릿에 해당하는 문서만 새로 생성되는 것을 볼 수 있다. 반드시 해야 되는것은

  • 리소스 심볼
  • 스트링 테이블에 리소스 심볼 ID로 만든 CNewTypeDlg를 위한 문자열
  • 메뉴

이고 부가적으로 별도의 메뉴를 유지 하려면 엑셀레이터, 아이콘을 해주어야 한다.

왜 스트링 테이블에 CNewTypeDlg를 위한 문자열을 삽입하지 않으면 안되는 이유는 ID_FILE_NEW의 COMMAND가 CWinApp에 전달되어 CWinApp::OnFileNew()가 호출된다고 가정하면 아래와 같은 코드가 실행이 된다.

CDocManager::OnFileNew()
{
        CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetHead();
        if (m_templateList.GetCount() > 1)
        {
                // more than one document template to choose from
                // bring up dialog prompting user
                CNewTypeDlg dlg(&m_templateList);
                INT_PTR nID = dlg.DoModal();
                if (nID == IDOK)
                        pTemplate = dlg.m_pSelectedTemplate;
                else
                        return;     // none - cancel operation
        }
}

가 실행되는데 이때 등록된 문서템플릿이 1개 이상이면 CNewTypeDlg의 다이얼로그가 보이게 된다. 근데 이때 CNewTypeDlg코드에서는 스트링 테이블의 문자열에서 템플릿에 대한 정보를 가져오게 되는데 못가져오면 다이얼로그의 리스트박스에 삽입하지 못하게 되고 2개인데 하나가 실패되면 등록되어 있는 템플릿만 새로 생성되게 되는 것이다. 그것을 판단하는 CNewTypeDlg::InitDialog()이다.

POSITION pos = m_pList->GetHeadPosition();
        // add all the CDocTemplates in the list by name
        while (pos != NULL)
        {
                CDocTemplate* pTemplate = (CDocTemplate*)m_pList->GetNext(pos);
                ASSERT_KINDOF(CDocTemplate, pTemplate);

                CString strTypeName;
                if (pTemplate->GetDocString(strTypeName, CDocTemplate::fileNewName) &&
                   !strTypeName.IsEmpty()) // 문자열로 판단한다.
                {
                        // add it to the listbox
                        int nIndex = pListBox->AddString(strTypeName);
                        if (nIndex == -1)
                        {
                                EndDialog(-1);
                                return FALSE;
                        }
                        pListBox->SetItemDataPtr(nIndex, pTemplate);
                }
        }

리소스에 등록된 문자열은 '\n'으로 구분되는 것으로 순서대로 아래 enum값의 의미를 가진다.

enum DocStringIndex
{
        windowTitle,        // default window title
        docName,            // user visible name for default document
        fileNewName,        // user visible name for FileNew
        // for file based documents:
        filterName,         // user visible name for FileOpen
        filterExt,          // user visible extension for FileOpen
        // for file based documents with Shell open support:
        regFileTypeId,      // REGEDIT visible registered file type identifier
        regFileTypeName,    // Shell visible registered file type name
};

따라서 이에 맞게 스트링테이블의 문서템플릿정보를 추가해야 한다.

MFC Apllication에서 Frame, Doc / View상에서 다른 개체를 참고하는 방법

DocumentGetFirstViewPosition 및 GetNextView를 사용하여 문서의 뷰 목록에 액세스합니다. GetDocTemplate를 호출하여 문서 템플릿에 액세스합니다.
ViewGetDocument를 호출하여 해당 문서에 액세스합니다,GetParentFrame을 호출하여 해당 프레임 창에 액세스합니다.
Signle Frame WindowGetActiveView를 호출하여 현재 뷰에 액세스합니다,GetActiveDocument를 호출하여 현재 뷰에 연결된 문서에 액세스합니다.
MDI Frame WindowMDIGetActive를 호출하여 현재 활성화된 CMDIChildWnd에 액세스합니다.

SDI에서 각 개체 얻는 방법

ApplicationCWinApp * pApp = (CWinApp*)AfxGetApp();
MainFrameCMainFrame * pFrame = (CMainFrame *)AfxGetMainWnd();
DocumentCMainFrame * pFrame = (CMainFrame *)AfxGetMainWnd();, CDocument *pDoc = CDocument *)pFrame->GetActiveDocument();
ViewCMainFrame * pFrame = (CMainFrame *)AfxGetMainWnd();, CView *pView = (CView *)pFrame->GetActiveView();

MDI에서 각 개체 얻는 방법

ApplicationCWinApp *pApp = (CWinApp*)AfxGetApp();
MainFrameCMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
ChildFrameCMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();, CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();
DocumentCMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();, CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();, CDocument *pDoc = CDocument *)pChild->GetActiveDocument();
ViewCMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();, CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();, CView *pView = (CView *)pChild->GetActiveView();

Tip and Tech

How To Get Current CDocument or CView from Anywhere

// Document header file
class CMyDoc : public CDocument
{
        public:
        static CMyDoc * GetDoc();
};
                                
CMyDoc * CMyDoc::GetDoc()
{
        CFrameWnd * pFrame = (CFrameWnd *)(AfxGetApp()->m_pMainWnd);
        return (CMyDoc *) pFrame->GetActiveDocument();
}
                                
{
        CMDIChildWnd * pChild =
                ((CMDIFrameWnd*)(AfxGetApp()->m_pMainWnd))->MDIGetActive();

        if ( !pChild )
                return NULL;

        CDocument * pDoc = pChild->GetActiveDocument();

        if ( !pDoc )
                return NULL;

        // Fail if doc is of wrong kind
        if ( ! pDoc->IsKindOf( RUNTIME_CLASS(CMyDoc) ) )
                return NULL;

        return (CMyDoc *) pDoc;
}

class CMyView
{
        ...
public:
        static CMyView * GetView();
        ...
};

CMyView * CMyView::GetView()
{
        CFrameWnd * pFrame = (CFrameWnd *)(AfxGetApp()->m_pMainWnd);

        CView * pView = pFrame->GetActiveView();

        if ( !pView )
                return NULL;

        // Fail if view is of wrong kind
        // (this could occur with splitter windows, or additional
        // views on a single document
        if ( ! pView->IsKindOf( RUNTIME_CLASS(CMyView) ) )
                return NULL;

        return (CMyView *) pView;
}

CMyView * CMyView::GetView()
{
        CMDIChildWnd * pChild =
                ((CMDIFrameWnd*)(AfxGetApp()->m_pMainWnd))->MDIGetActive();

        if ( !pChild )
                return NULL;

        CView * pView = pChild->GetActiveView();

        if ( !pView )
                return NULL;

        // Fail if view is of wrong kind
        if ( ! pView->IsKindOf( RUNTIME_CLASS(CMyView) ) )
                return NULL;

        return (CMyView *) pView;
}
                                
CMyView::GetView();

여러개의 DockTemplate를 등록한경우(MDI, SDI)에서 Document, View 순회하기

AddDocTemplate를 통하여 여러개의 DocTemplate를 등록한 경우 아래와 같은 코드를 통하여 순회가능하다.

POSITION doctempPos = GetFirstDocTemplatePosition();
while (doctempPos)
{
        CDocTemplate* doctemp = GetNextDocTemplate(doctempPos);
        POSITION docPos = doctemp->GetFirstDocPosition();
        while (doctemp && docPos)
        {
                CDocument *doc = doctemp->GetNextDoc(docPos);        
                POSITION viewPos = doc->GetFirstViewPosition();
                while (doc && viewPos)
                {
                        CView* view = doc->GetNextView(viewPos);
                        view->GetParentFrame()->ActivateFrame(SW_SHOW); // 순차적으로 활성화
                }
        }
        CString doctempStr;
        doctemp->GetDocString(doctempStr, CDocTemplate::docName);
        TRACE("CDocTemplate name: %s\n", doctempStr);
}

MultiDocumentTemplate에서 Document Template추가법

AddDocTemplate( new CMultiDocTemplate( IDR_SCRIBTYPE,
          RUNTIME_CLASS( CScribDoc ),
          RUNTIME_CLASS( CMDIChildWnd ),
          RUNTIME_CLASS( CScribView ) ) );

SingleDocumentTemplate에서 Document Template추가법

CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CTestView)
AddDocTemplate(pDocTemplate);

MDI에서 자동으로 빈문서 생성을 막는 법

CWinApp::InitInstance()에서 ProcessShellCommand()함수에서 FILE_NEW를 함으로 CmdInfo.m_nShellCommand에 CCommandLineInfo::FileNothing를 넣어준다.

if(cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew )
      cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;

ChildFrame생성시 MainFrame의 최대 크기 맞추기

  • ChildFrame의 PreCreateWindow함수에 WS_MAXIMIZE를 추가한다.
  • ActivateFrame() 함수를 오버라이딩 하여 nCmdShow에 SW_MAXMIZE를 추가한다. 
    void CChildFrameEx::ActivateFrame(int nCmdShow) 
    {
        // TODO: Add your specialized code here and/or call the base class
        nCmdShow = SW_MAXIMIZE;
        CMDIChildWnd::ActivateFrame(nCmdShow);
    }

Reference

Documents

Website

MFC에서 Document, View, Frame간의 관계, MSDN

Document, View, Windows만들기, MSDN

Document Template 만들기, MSDN

How To Get Current CDocument or CView from Anywhere, MSDN

Books


CategoryCategory


반응형
반응형


분할윈도우 만들기 예제 포함

http://rockdrumy.tistory.com/906


분할윈도우 사용하는 이야기

http://shinyang1027.blog.me/20160794638


MFC Tip중 분할윈도우 잘 설명

http://www.viper.pe.kr/cgi-bin/moin.cgi/MFC_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_1


http://www.viper.pe.kr/cgi-bin/moin.cgi/MFC_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_2?highlight=%28%5EMFC..%2A%29


분할윈도우 스크롤바 제거

http://blog.naver.com/lifeisforu/80022419794

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=53991&ref=24485

http://www.tipssoft.com/bulletin/board.php?bo_table=QnA&wr_id=11508



MFC관련 msdn번역

http://www.kydsoft.com/vcmfc/ko/index.htm



CEdit에 Color

http://www.codeproject.com/Questions/455826/MFC-Edit-Control-Color


Control에 Font설정

http://support.microsoft.com/kb/85518/ko


CleanState() 창설정 레지스트리 값 clean관련

http://blog.naver.com/spinx85/140121197199



기타 TIP

MFC에서 콘솔창 띄우기

http://furyheimdall.tistory.com/125


MFC Static Text 에 클릭이벤트 사용하기

Static은 IDC_STATIC으로만 생김 이 값을 변경후

Notify속성 TRUE로 변경하면 됨


MFC GridControl 사용법

http://eachan.tistory.com/36


MFC 검색

http://valley.egloos.com/tag/MFC


기존 winapi.co.kr 

http://www.soen.kr/


color ref

http://www.unicom.com/retired/lis341/colorref.html

반응형

+ Recent posts