마크다운 코드 박스 (가독성 최적화 스킨)
# 1단계 제목 (H1)
## 2단계 제목 (H2)
일반 본문 텍스트입니다. **굵은 글씨**는 별표 2개로 감쌉니다.
이것은 *기울임꼴* 또는 _이탤릭체_ 표현입니다.
### 핵심 체크리스트
- [ ] 첫 번째 할 일
- [x] 완료된 일 항목
### 순서 없는 목록
* 가나다
* 마바사
* 하위 항목 스페이스 2칸
### 하이퍼링크 및 이미지 연결
[구글 바로가기](https://google.com)

> 이곳은 인용문을 작성하는 공간입니다.
# 1단계 제목 (H1)
## 2단계 제목 (H2)
일반 본문 텍스트입니다. **굵은 글씨**는 별표 2개로 감쌉니다.
이것은 *기울임꼴* 또는 _이탤릭체_ 표현입니다.
### 핵심 체크리스트
- [ ] 첫 번째 할 일
- [x] 완료된 일 항목
### 순서 없는 목록
* 가나다
* 마바사
* 하위 항목 스페이스 2칸
### 하이퍼링크 및 이미지 연결
[구글 바로가기](https://google.com)

> 이곳은 인용문을 작성하는 공간입니다.
여기에 작성하신 마크다운 원본을 그대로 붙여넣으세요.
# 1단계 제목
```python
def backup():
print("마크다운 원본 유지")
```
[링크 주소](https://example.com)
# 깃허브 업로드용 백업
## 프로젝트 개요
```python
import os
print("Hello Backup")
```
- [x] 테스트 완료
- URL: https://github.com
# 깃허브 업로드용 백업
## 프로젝트 개요
```python
import os
print("Hello Backup URL Check")
```
- [x] 테스트 완료
- URL: https://github.com
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>테스트 레이아웃</title>
</head>
<body>
<div class="main-box">
<h1>이 영역에 백업할 HTML을 그냥 넣으시면 됩니다</h1>
<p>https://example.com 주소도 절대 잘리지 않습니다.</p>
</div>
</body>
</html>
구글 블로그(Blogger)에서 글을 쓸 때 단순히 텍스트만 나열하면 상위 노출을 기대하기 어렵습니다. 구글 검색 로봇이 본문의 구조를 완벽하게 파악하고 점수를 부여할 수 있도록 **최적화된 HTML 태그와 CSS 구조**를 적용해야 검색 결과 첫 페이지에 위치할 확률이 높아집니다.
본문의 목차를 구성할 때는 반드시 제목 태그의 순서를 지켜야 합니다. 대주제는 <h2>, 그 아래 소주제는 <h3>를 사용하여 글의 흐름을 계층적으로 제어합니다. 순서가 뒤죽박죽 섞이면 구글 봇이 글의 전문성을 의심하여 감점 요인이 됩니다.
▲ 올바른 이미지 Alt 태그와 CSS 스타일이 적용된 예시
본문 중간에 중요한 단어는 <strong> 태그로 시각적/구조적 강조를 처리하고, 연관성이 높은 고품질의 외부 문서나 내 블로그의 다른 글을 하이퍼링크로 연결해 줍니다. 이는 크롤러 봇이 내 블로그 내에 오래 머물며 더 많은 페이지를 수집(색인)하도록 돕는 역할을 합니다.
결국 구글 최적화의 핵심은 "컴퓨터(구글 봇)와 인간(독자) 모두에게 읽기 편한 글"을 만드는 것입니다. 위 HTML 양식을 기본 템플릿으로 저장해 두고 글을 쓸 때마다 활용하여 구글 서치콘솔에 빠르게 색인을 요청해 보세요.
rm -rf build-cocoa-debug mkdir build-cocoa-debug cd build-cocoa-debug ../configure --enable-unicode --enable-debug --disable-shared --with-osx_cocoa make;cd ..# Build the samples and demos
cd build-cocoa-debug/samples; make;cd ../.. cd build-cocoa-debug/demos; make;cd ../..# Use Finder to run some of the samples to prove to yourself they work
cd wx/build-cocoa-debug ./wx-config --cxxflags ./wx-config --libsIt is critical that you use ./wx-config not wx-config in those two
// GLnode.cpp : Defines the entry point for the console application. // // test LLVM 2.0 #include#include #include #include #ifndef SAFE_DELETE_VECTOR #define SAFE_DELETE_VECTOR(x) { for(size_t __i__(0); __i__ < x.size(); ++__i__) delete(x.at(__i__)); x.clear(); } #endif template class GLvector : public std::vector { public: inline void remove(T t) { typename std::vector ::iterator pos = std::find(std::vector ::begin(), std::vector ::end(), t); if (pos != std::vector ::end()) erase(pos); } }; template class GLvectorF : public GLvector { class _find_if_pred { private: std::string _name; public: _find_if_pred(const std::string& name) : _name(name) { } template bool operator()(const TT* tt) { return ((_name.compare(tt->_name)) == 0); } }; public: int find(const std::string& name) { typename std::vector ::iterator pos = std::find_if(std::vector ::begin(), std::vector ::end(), _find_if_pred(name)); if (pos != std::vector ::end()) return (pos - std::vector ::begin()); return -1; } //if (pos != end()) T& find_ptr(const std::string& name) { typename std::vector ::iterator pos = std::find_if(std::vector ::begin(), std::vector ::end(), _find_if_pred(name)); return *pos; } const T& find_ptr(const std::string& name) const { typename std::vector ::const_iterator pos = std::find_if(std::vector ::begin(), std::vector ::end(), _find_if_pred(name)); return *pos; } }; class GLnode { class _for_each_pred { public: _for_each_pred(float time) : _time(time) { } template void operator()(T& t) const { t->_update(_time); } float _time; }; public: GLnode() { } GLnode(const std::string& name) : _name(name) { } virtual ~GLnode() { SAFE_DELETE_VECTOR(_vec); } virtual void update(float time) { std::for_each(_vec.begin(), _vec.end(), _for_each_pred(time)); } protected: virtual void _update(float time) const { } /// attribute public: std::string _name; /// operation public: GLvectorF _vec; }; char* itoa(int val, int base) { static char buf[32] = {0}; int i = 30; for(; val && i ; --i, val /= base) buf[i] = "0123456789abcdef"[val % base]; return &buf[i+1]; } int main (int argc, const char * argv[]) { // insert code here... std::cout << "Hello, World!\n"; GLnode _node; for (int i=0; i<10; i++) { char* ib = itoa(i, 10); _node._vec.push_back(new GLnode(ib)); } int index = _node._vec.find("9"); if (index != -1) { const GLnode* at = _node._vec.at(index); std::cout << "at= " << at->_name << std::endl; } const GLnode* ptr = _node._vec.find_ptr("9"); if (ptr != *_node._vec.end()) std::cout << "ptr= " << ptr->_name << std::endl; size_t size = _node._vec.size(); std::cout << "size= " << size << std::endl; const GLnode* begin = *_node._vec.begin(); const GLnode* end = *_node._vec.end(); return 0; }
// GLnode.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include#include #include #include #ifndef SAFE_DELETE_VECTOR #define SAFE_DELETE_VECTOR(x) { for(size_t __i__(0); __i__ < x.size(); ++__i__) delete(x.at(__i__)); x.clear(); } #endif template class GLcontainer { public: virtual ~GLcontainer() { SAFE_DELETE_VECTOR(_vec); } void push_back(T* t) { _vec.push_back(t); } void remove(T* t) { std::vector ::iterator pos = std::find(_vec.begin(), _vec.end(), t); if (pos != _vec.end()) _vec.erase(pos); } const T* at(int pos) const { return _vec.at(pos); } const std::vector & get() const { return _vec; } protected: std::vector _vec; }; template class GLcontainerF : public GLcontainer { class _find_if_pred { private: std::string _name; public: _find_if_pred(const std::string& name) : _name(name) { } template bool operator()(const TT* tt) { return ((_name.compare(tt->_name)) == 0); } }; public: const int find(const std::string& name) const { std::vector ::const_iterator pos = std::find_if(_vec.begin(), _vec.end(), _find_if_pred(name)); if (pos != _vec.end()) return (pos - _vec.begin()); return -1; } const T* find_ptr(const std::string& name) const { std::vector ::const_iterator pos = std::find_if(_vec.begin(), _vec.end(), _find_if_pred(name)); if (pos != _vec.end()) return (*pos); return NULL; } }; class GLnode : public GLcontainerF { class _for_each_pred { public: _for_each_pred(float time) : _time(time) { } template void operator()(T * t) const { t->_update(_time); } float _time; }; public: GLnode() { } GLnode(const std::string& name) : _name(name) { } virtual ~GLnode() { } virtual void update(float time) { std::for_each(_vec.begin(), _vec.end(), _for_each_pred(time)); } protected: virtual void _update(float time) const { } /// attribute public: std::string _name; /// operation public: }; int _tmain(int argc, _TCHAR* argv[]) { GLnode _node; for (int i=0; i<10; i++) { char ib[10]; itoa(i, ib, 10); _node.push_back(new GLnode(ib)); } int index = _node.find("9"); const GLnode * ptr = _node.find_ptr("9"); const GLnode * res = _node.at(index); return 0; }
std::for_each(IGame.Node.begin(), IGame.Node.end(),
[&] (IGameImporter::Node Node)
{
IGameImporter::Mesh Mesh = Node.Mesh;
float * vf = Mesh.Vertices.data();
float * nf = Mesh.Normals.data();
}
class txt2ushort {
public:
void push_back(const char * text)
{
unsigned short f = (unsigned short) atoi(text);
m_vf.push_back(f);
char * p = (char *) text;
while (*p)
{
if (*p == 0x20)
{
f = (unsigned short) atoi(p);
m_vf.push_back(f);
}
p++;
}
}
void clear()
{
m_vf.clear();
}
unsigned short * data()
{
return m_vf.data();
}
std::vector & get()
{
return m_vf;
}
private:
std::vector m_vf;
};
#include#include #include class txt2float { public: void push_back(const char * text) { float f = (float) atof(text); m_vf.push_back(f); char * p = (char *) text; while (*p) { if (*p == 0x20) { f = (float) atof(p); m_vf.push_back(f); } p++; } } void clear() { m_vf.clear(); } float * data() { return m_vf.data(); } std::vector & get() { return m_vf; } private: std::vector m_vf; }; { txt2float tf; tf.push_back(Value); SubMaterial.Diffuse = tf.get(); }
/// CXXXView.cpp
void CXXXView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
if (m_eglDisplay != EGL_NO_DISPLAY)
return;
const EGLint attrs[] = {
EGL_LEVEL, 0,
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_NATIVE_RENDERABLE, EGL_FALSE,
EGL_DEPTH_SIZE, EGL_DONT_CARE,
EGL_NONE
};
EGLint numConfig =0;
m_eglDisplay = eglGetDisplay(GetDC()->GetSafeHdc());
if (m_eglDisplay == EGL_NO_DISPLAY)
if ((m_eglDisplay = eglGetDisplay((EGLNativeDisplayType) EGL_DEFAULT_DISPLAY)) == EGL_NO_DISPLAY)
return;
// Initialize the display
EGLint major = 0;
EGLint minor = 0;
if (!eglInitialize(m_eglDisplay, &major, &minor))
return;
if (major < 1 || minor < 3)
{
// Does not support EGL 1.3
printf("System does not support at least EGL 1.3 \n");
return;
}
EGLConfig eglConfig;
// Obtain the first configuration with a depth buffer
if (!eglChooseConfig(m_eglDisplay, attrs, &eglConfig, 1, &numConfig))
return;
// Create a surface for the main window
if ((m_eglSurface = eglCreateWindowSurface(m_eglDisplay, eglConfig, (EGLNativeWindowType) GetSafeHwnd(), NULL)) == EGL_NO_SURFACE)
return;
// Bind the API (It could be OpenGLES or OpenVG)
// eglBindAPI(EGL_OPENGL_ES_API);
EGLint ai32ContextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
// Create an OpenGL ES context
if ((m_eglContext = eglCreateContext(m_eglDisplay, eglConfig, EGL_NO_CONTEXT, ai32ContextAttribs)) == EGL_NO_CONTEXT)
return;
// Make the context and surface current
if (!eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglContext))
return;
///
glClearColor(0.5f, 0.5f, 0.5f, 0.0f);
}
void CXXXView::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglDestroyContext(m_eglDisplay, m_eglContext);
eglDestroySurface(m_eglDisplay, m_eglSurface);
eglTerminate(m_eglDisplay);
CView::PostNcDestroy();
}
void CXXXView::onDraw(void)
{
glClear(GL_COLOR_BUFFER_BIT);
///
IGameImporter * gameImport = NULL;
auto pDoc = GetDocument();
if (pDoc && pDoc->IsKindOf(RUNTIME_CLASS(CXXXDoc)))
gameImport = dynamic_cast (pDoc)->getGameImport();
///
eglSwapBuffers(m_eglDisplay, m_eglSurface);
}
BOOL CXXXView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
/// return CView::OnEraseBkgnd(pDC);
return FALSE;
}
void CXXXView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
glViewport(0, 0, cx, cy);
}
/// CXXXApp.cpp
BOOL CXXXApp::OnIdle(LONG lCount)
{
// TODO: Add your specialized code here and/or call the base class
// return CWinAppEx::OnIdle(lCount);
CMainFrame * pFrame = (CMainFrame *) AfxGetMainWnd();
CView * pView = pFrame->GetActiveView();
if (pView && pView->IsKindOf(RUNTIME_CLASS(CXXXView)))
dynamic_cast (pView)->onDraw();
return TRUE;
}
/// CViewTree.h
#define WM_TVN_SELCHANGED (WM_USER+3)
class CViewTree : public CTreeCtrl
{
public:
afx_msg void OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult);
};
/// CViewTree.cpp
BEGIN_MESSAGE_MAP(CViewTree, CTreeCtrl)
ON_NOTIFY_REFLECT(TVN_SELCHANGED, &CViewTree::OnTvnSelchanged)
END_MESSAGE_MAP()
void CViewTree::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast(pNMHDR);
// TODO: Add your control notification handler code here
GetParent()->SendNotifyMessage(WM_TVN_SELCHANGED, (WPARAM) pNMTreeView, (LPARAM) pResult);
*pResult = 0;
}
void CXXXDoc::OnFileImport()
{
// TODO: Add your command handler code here
TCHAR currentPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, currentPath);
LPCTSTR szFilter = _T("XML Files (*.xml)|*.xml|All Files (*.*)|*.*|");
CFileDialog fileDialog(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
fileDialog.m_ofn.lpstrTitle = _T("Open XML Scene File");
fileDialog.m_ofn.lpstrInitialDir = _T("");
if (fileDialog.DoModal() == IDOK)
{
CString fileExt = fileDialog.GetFileExt();
CString pathName = fileDialog.GetPathName();
IGameImporter import;
import.DoImport(pathName);
}
SetCurrentDirectory(currentPath);
}
set WXWIN = c:\wxwidgets-2.9.1 cd $(WXWIN)\build\msw
nmake -f makefile.vc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release
mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release
mkdir osx-build cd osx-build ../configure -with-osx_cocoa -with-opengl -enable-stl -enable-monolithic -enable-debug -enable-debug-gdb -enable-dynlib make
/D _UNICODE;__WXMSW__;NOPCH;WXUSINGDLL;
마크다운 코드 박스 (가독성 최적화 스킨)