<<gradient horiz #bbbbbb #eeeeee #ffffff>>The new GradientMacro allows simple horizontal and vertical coloured gradients. They are constructed from coloured HTML elements, and don't require any images to work.>>\nThe GradientMacro is an ExtendedMacro that processes the text after it up until the next '>>' sequence. It looks like this:\n{{{\n<<gradient vert #ffffff #ffdddd #ff8888>>gradient fill>>\n}}}\nThe first parameter can be ''vert'' or ''horiz'' to indicate the direction of the gradient. The following parameters are two or more colours (CSS RGB(r,g,b) format is also acceptable). The GradientMacro constructs a smooth linear gradient between each of the colours in turn.\n\n| <<gradient vert #ffffff #ffdddd #ff8888>>No images were harmed in the making of this gradient fill>> | <<gradient vert #ffffff #ddffdd #88ff88>>No images were harmed in the making of this gradient fill>> | <<gradient vert #ffffff #ddddff #8888ff>>No images were harmed in the making of this gradient fill>> |\n\nInline CSS definitions can be added to gradient fills like this:\n\n<<gradient vert #000000 #660000 #aa2222>>color:#ffffff;font-size:12pt;Darkness>>\n{{{\n<<gradient vert #000000 #660000 #aa2222>>color:#ffffff;font-size:12pt;Darkness>>\n}}}\n\nYou can make an abrupt transition in the gradient by using the "snap" prefix, like this:\n\n{{{\n<<gradient vert #000000 #999999 snap:#aa2222 #ff444>>color:#ffffff;font-size:24pt;padding:4pt;More darkness>>\n}}}\n<<gradient vert #000000 #999999 snap:#aa2222 #ff444>>color:#ffffff;font-size:24pt;padding:4pt;More darkness>>
@@color(#04f): pinching @@; physique modifier를 적용했을 때, 잘못된 웨이트 값으로 메쉬가 찌그러지는 현상\n
@@color(#04f): PPU @@(물리연산 프로세스 유닛) ; CPU가 담당하는 이미지 재생과 관련된 물리 연산을 전담하는 주변기기\n\n아수스코리아와 이엠텍은 2006.05 말 물리연산카드를 국내에 출시하며 2∼3곳의 업체가 판매를 준비중이다. 아수스가 출시할 ‘PhysX P1 고스트리콘’은 에이지아(AGEIA) 칩세트를 장착한 제품으로 기존 ‘CPU+GPU’ 게임프로세싱 처리 개념을 ‘CPU+GPU+PPU’로 확대한 카드. 이엠텍은 기존 PCI슬롯에 장착, 애드온 방식으로 3D게임을 현실감 있게 즐길 수 있는 BFG 물리 엔진 가속카드를 판매한다.\n\n이와 함께 ‘언리얼 토너먼트 2007’ ‘셀팩터’ ‘고스트리콘’ 등 국내외 유명 게임도 물리연산을 지원할 예정이어서, PPU가 그래픽카드에 이은 새 주변기기로 떠오른 상황이다. 아수스에 따르면 연내 물리연산카드를 지원하기로 한 PC용 게임은 5월 현재 10여 종에 달한다.
@@color(#04f): protected와 private의 차이 @@\npublic으로 선언된 멤버 변수와 함수는 클래서 내부와 외부에서 사용할 수 있지만, \n클래스에서 선언된 protected로 선언된 것은 파생 클래스의 내부에서 사용할 수 있다. 기반 클래스에서 private로 선언된 멤버는 파생 클래스에서 내부적으로 사용할 수 없으며, 기반 클래스에서 private으로 선언된 멤버는 파생 클래스로 상속은 되지만 파생 클래스에서 참조만 할 수 없다는 것이다.\n\n@@color(#04f): singleton @@; C++ 클래스 단일체(singleton)는 주어진 임의의 시점에서 시스템 내에 단 하나의 인스턴스만 존재하는 객체를 가리키며, 전역 객체로써 취급된다.\n\n@@color(#04f): traits @@(문자특성)\n특정 타입의 정보 혹은 그 타입의 연산에 대한 정보를 캡슐화한 일종의 객체로서, \n구체적인 이름 대신에 타입에 구애받지 않고 쓸 수 있는 대표 정보를 모아 둔 집합으로 생각하면 무난하다. \n예로, iterator_traits<T>::difference_type는 특정 타입의 객체에 대한 두 반복자의 차이를 나타내는 타입이다.\n
@@color(#04f): script @@(스크립트); 컴퓨터 프로세서나 컴파일러가 아닌 다른 프로그램에 의해 번역되고 수행되는 명령문의 집합.\n\nC나 C++와 같은 언어들에 비해 제한된 능력을 지니고 실행속도도 느리지만 프로그램을 쉽고 빠르게 작성할 수 있다. 주로 제한된 능력을 가진 프로그램이나 컴파일된 기존 프로그램과 연결하여 재사용되는 프로그램들을 만드는 데 적당하다.
@@color(#04f): signature @@; ex) The signatures and behaviors of the virtual functions in Accumulator have changed.\n\n(gpgstudy에 질문했을 때) 류광_님께서 주신 답글 \n저는 signature를 사전 그대로 서명으로 번역하고 있습니다. 사람의 서명이 그 사람을 고유하게 식별해 주듯이 함수의 서명은 그 함수를 고유하게 식별합니다. 서명은 간단히 말하면 함수 선언입니다. 반환값 형식, 함수 이름, 매개변수 형식들 등등 전체를 서명이라고 부릅니다. 그중 하나라도 바뀌면 서명이 바뀐 것입니다. 함수 원형(prototype)이라고도 합니다.
@@color(#04f): smart pointer@@; 세이프 포인터라고도 하는데 \n* 스마트포인터는 메모리 해제에 대한 프로그래머의 부담을 줄일수있는 일종의 한 방법으로, 스마트포인터 클래스는 객체에대한 포인터를 멤버로 갖고있으며 지역변수는 해당영역을 벗어나면 자동으로 소멸된다는 기초를 토대로 하고 있다.\n** 포인터를 선언하면 NULL로 초기화 하는 번거로움을 제어할 수 있다.\n** 포인터가 생성, 소멸, 복사, 대입, 역참조 등의 동작을 제어할 수 있다.\n** 블록을 빠져 나올때 지역변수처럼 자동으로 해제를 하게 해 준다.\n등의 장점이 있으나, 구현방식에 따라 제한사항이 있을 수 있어 주의해야한다.\n
@@color(#04f): Snap Shot @@(스냅샷) (→ 야호사전에서 펌)\n모든 메모리 바이트, 하드웨어 레지스터 및 상태 표시기를 비롯하여 메모리의 현재 상태를 저장한 것. 오류 발생 시 시스템을 복원하기 위해 정기적으로 저장된다.2. 파일이 업데이트되기 전에 저장된 복사본. 저장소 관리 프로그램의 일부인 스냅샷을 사용하면 이전 버전의 파일을 다시 가져와서 검토하거나 사용할 수 있다. \n
@@color(#04f): ▣ Waterfall(폭포) 모델 @@; 다음 단계의 코딩을 시작하기 전에 그 전의 모든 단계의 코드를 확정지어버리는 방식\n\n@@color(#04f): ▣ Wi-Fi(와이파이) @@ ; Wireless Fidelity\n홈 네트워킹, 휴대전화, 비디오 게임 등에 쓰이는 유명한 무선 기술의 상표 이름\n\n@@color(#04f): ▣ Wii MotionPlus @@;\nMotionPlus는 가속기와 센서 바가 결합된 Wii용 무선 컨트롤러의 최종 버전으로, 게이머의 팔 위치와 방향에 따른 궤도를 인식해 보다 현실감을 높여줄 것으로 기대를 모으고 있음\n&nbsp; &nbsp; -. 2009년 06월 현재 사용되고 있는 Wii 컨트롤러는 게이머의 움직임이 게임 내 캐릭터와 일치하지 않는 문제점이 있는데, MotionPlus를 통해 정확도가 대폭 개선될 것이라 기대됨\n&nbsp; &nbsp; -. MotionPlus 지원 타이틀은 SEGA의 'Virtua Tennis 2009'(5월 19일 발매), EA의 'Tiger Woods PGA Tour 10' (6월 16일 발매 예정), Nintendo의 'Wii Sports Resort' (6월 18일 발매 예정), EA의 'GrandSlam Tennis' (6월 18일 발매예정) 등으로 알려짐\n\n@@color(#04f): ▣ WPF @@; (Windows Presentation Foundation) @ 2010-01-06 @\n이전 코드네임 Avalon, 이전의 WinFx라 불리던 .Net Framework 3.0이상의 환경에서 동작하는 MS의 차세대 그래픽 표현 기술(Subsystem)\n\n@@color(#04f): ▣ w.r.t @@; the world (reference) coordinate \n\n@@color(#04f): ▣ WYSIWYG @@(위지윅, 보는 것이 얻는 것이다.); What you see is What you get.\n\n
@@color(#04f): VPN @@(Virtual Private Networking)\n
@@color(#04f): UML @@이란 무슨 언어인가요? - 텀즈 펌...(출처) http://www.terms.co.kr/ \n\nUML이란 소프트웨어 개발 과정에서 산출되는 산출물들을 명시, 개발, 문서화하기 위한 모델링 언어이다. UML은 Rational 사의 Grady Booch, James Rumbaugh에 의해 1994년 10월에 처음 개발에 착수되었다. 이후 1995년 10월에 Unified Method 0.8의 명칭으로 OOPSLA '95에서 발표되었으며, 이후 Ivar Jacobson이 UML 개발에 함께 협력하면서 1996년에 버전 0.9를 발표하였고, 1997년 11월에는 UML 1.1 이 OMG에 의해 표준으로 채택되었다. \n\nUML은 모델링 언어일뿐 메쏘드(또는 방법론)는 아니다. 메쏘드는 프로세스에 대한 정의와 각각의 업무들에 대한 지침과, 업무들 간의 순서들을 명시해야 하는 반면, 모델링 언어는 표기법(또는 다이어그램)들만을 제시하는 것이다. 따라서 UML은 소프트웨어 개발에 사용하기 위한 여러 다이어그램들을 정의하고 있으며, 또 다이어그램들의 의미들에 대해 정의하고 있다. \n\nUML은 여러가지 다이어그램들을 제시함으로써 소프트웨어 개발과정의 산출물들을 비주얼하게 제공하고, 개발자들과 고객 또는 개발자들 간의 의사소통을 원활하게 할 수 있도록 하고 있다. UML은 시스템을 모델링 할 수 있는 다양한 도구들을 제공하기 때문에, 도메인을 모델링하기가 훨씬 용이할 뿐만 아니라 모델링한 결과를 쉽게 파악할 수 있게 된다. 또한 산업계 표준으로 채택되었기 때문에 UML을 적용한 시스템은 신뢰성 있는 시스템으로 평가받을 수 있다. \n
@@color(#04f): ▣ Technical Director @@ 테크니컬 디렉터는 \n영화나 3D 애니메이션의 제작 과정에서 컴퓨터 그래픽스와 관련된 기술적 문제를 찾고 해결하는 전문가를 말한다. 기존에는 뚜렷한 구분되는 직종인 아티스트와 프로그래머의 역할을 동시에 하는 특징이 있는 새로운 직종 분야이다. 이 직종은 현재까지는 명확한 정의를 갖추어 나가는 상태이고 회사와 프로젝트 상황에 따라 직무가 다양한 경향이 있다.\n\n비슷한 직종인 그래픽 사이언티스트는 본인이 기술의 생산자로서 소프트웨어와 알고리즘을 통해 제작 과정의 문제를 해결하는 역할을 한다면 TD는 이미 주어진 기술에 대한 분석적 소비자로서 그것의 작동/적용 원리를 파악하여 이를 창조적으로 활용해서 문제를 해결하는 역할을 하고 나아가서 프로젝트의 성공을 이끈다. 따라서 테크니컬 디렉터는 세부 분야와 관련된 소프트웨어에 대한 해박한 지식과 경험이 필수적이다.\n\n@@color(#04f): ▣ TFT @@; Task Force Team\n회사에서 중요한 일, 새로운 일(프로젝트)을 추진할 때 각 부서 및 해당 부서에서 선발된 TASK에 관련된 인재들이 임시 팀을 만들어 활동하는 것을 말한다. 대기업은 TFT에 발탁되면 본인의 새로운 사무실에서 새로운 사람들과 그 일만 집중하다가 나중에 다시 본연의 임무로 돌아가던가 TFT을 정식 팀으로 승격시켜 전보 발령을 내는 경우도 있는데 중소기업은 일반 업무에 TFT업무가 부가되는 것이 보통이다.\n\n즉 task 목적을 가지고 그 목적을 추진하기 위해 임시로 모인 집단을 이야기할 때 쓰인다. 그 임무가 완수되면 곧바로 해체되는 집단으로 회사 등에서 많이 쓰이는 용어이다.\n\n@@color(#04f): ▣ TPND @@ (Theft, Pilferage and Non-Delivery) ; 도난, 발하, 불착손 위험 담보 &nbsp; &nbsp; @ 2015-12-24 @\n\n@@color(#04f): ▣ Texture Splatting @@\n\n@@color(#04f): ▣ Traversal @@; 운행법 - ex. 이진 트리의 운행법(Traversal)\n\n@@color(#04f): ▣ Traversal behavior @@; 순회동작\n\n@@color(#04f): ▣ TSCC @@(TechSmith Screen Capture Codec Installation) - http://www.techsmith.com/\n&nbsp; &nbsp; TechSmith사에서 개발한 스크린 캡쳐용 코덱입니다.\n\n\n
/***\nTo use, add {{{[[TagglyTaggingStyles]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also ViewTemplate, EditTemplate and TagglyTagging.\n***/\n/*{{{*/\n.tagglyTagged li.listTitle { display:none;}\n.tagglyTagged li { display: inline; font-size:90%; }\n.tagglyTagged ul { margin:0px; padding:0px; }\n.tagglyTagging { padding-top:0.5em; }\n.tagglyTagging li.listTitle { display:none;}\n.tagglyTagging ul { margin-top:0px; padding-top:0.5em; padding-left:2em; margin-bottom:0px; padding-bottom:0px; }\n\n/* .tagglyTagging .tghide { display:inline; } */\n\n.tagglyTagging { vertical-align: top; margin:0px; padding:0px; }\n.tagglyTagging table { margin:0px; padding:0px; }\n\n\n.tagglyTagging .button { display:none; margin-left:3px; margin-right:3px; }\n.tagglyTagging .button, .tagglyTagging .hidebutton { color:#aaa; font-size:90%; border:0px; padding-left:0.3em;padding-right:0.3em;}\n.tagglyTagging .button:hover, .hidebutton:hover { background:#eee; color:#888; }\n.selected .tagglyTagging .button { display:inline; }\n\n.tagglyTagging .hidebutton { color:white; } /* has to be there so it takes up space. tweak if you're not using a white tiddler bg */\n.selected .tagglyTagging .hidebutton { color:#aaa }\n\n.tagglyLabel { color:#aaa; font-size:90%; }\n\n.tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }\n.tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}\n.tagglyTagging ul ul li {margin-left:0.5em; }\n\n.editLabel { font-size:90%; padding-top:0.5em; }\n/*}}}*/\n
<!---\n| Name:|UpsideDownViewTemplate |\n| Purpose:|Stand on your head|\n--->\n<!--{{{-->\n<div class="tagglyTagging" macro="tagging"></div>\n<div style="background-image:url(../images/up.jpg);background-repeat:no-repeat;background-position:bottom right;" class='viewer' macro='view text wikified'></div>\n<div><span class='title' macro='view title'></span><span class="miniTag" macro="miniTag"></span></div>\n<div class="tagglyTagged" macro="tags"></div>\n<div class="toolbar">\n<span style="padding-right:0.75em;" class='fakeButton' macro="runMacroIfTagged Groceries toggleTag Buy"></span>\n<span style="padding-right:0.75em;" class='fakeButton' macro="runMacroIfTagged Flippable toggleTag UpsideDown"></span>\n<span style="padding-right:0.75em;" class='fakeButton' macro="runMacroIfTagged Plugins toggleTag systemConfig"></span>\n<span macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump newHere'></span></div>\n<br/>\n\n<!--}}}-->\n
@@color(#04f): 가치주 @@ = 현재 소외된 주식\n\ncf.성장주, "현명한 투자자" 벤저민 그레이엄 저\n• 시장 전망은 할 수 없다 -> 기업가치에 촛점\n• 단기 등락을 예측하는 것은 바보들의 짓이다.\n• 주식은 싸게 사서, 보유하는 것이다.\n
Tag popup:\n{{{\n<<tag features>>\n}}}\nwill result in <<tag features>>\n\nSlider:\n{{{\n<<slider chkTestSlider OptionsPanel options "Change TiddlyWiki advanced options">>\n}}}\nResults in this button <<slider chkTestSlider OptionsPanel options "Change TiddlyWiki advanced options">>\nThe parameters are:\n* cookie name to be used to save the state of the slider\n* name of the tiddler to include in the slider\n* title text of the slider\n* tooltip text of the slider\n\n----\nExtendedFormatting\n\nLike most wikis, TiddlyWiki supports a range of simplified character formatting:\n| !To get | !Type this |h\n| ''Bold'' | {{{''Bold''}}} |\n| --Strikethrough-- | {{{--Strikethrough--}}} |\n| __Underline__ | {{{__Underline__}}} (that's two underline characters) |\n| //Italic// | {{{//Italic//}}} |\n| Superscript: 2^^3^^=8 | {{{2^^3^^=8}}} |\n| Subscript: a~~ij~~ = -a~~ji~~ | {{{a~~ij~~ = -a~~ji~~}}} |\n| """plain//text""" | {{{"""plain//text"""}}} |\n| <nowiki>not__wikified</nowiki> | {{{<nowiki>not__wikified</nowiki>}}} |\n| @@highlight@@ | {{{@@highlight@@}}} |\n| &#632;&trade; | {{{&#632;&trade;}}} |\n| This is hidden: | {{{This is hidden: /% secret comment %/}}} |\n|<html><blockquote>blockquote<blockquote>level two<blockquote>level three</blockquote></blockquote></blockquote></html> |{{{>blockquote}}}<br />{{{>>level two}}}<br />{{{>>>level three}}} |\n|<html><blockquote>multi-line<br/>blockquote</blockquote></html>|{{{<<<}}}<br />{{{multi-line}}}<br />{{{blockquote}}}<br />{{{<<<}}}|\n|<html><blockquote>foo<br><blockquote>inner foo, level 1<br><blockquote>inner foo, level 2<br></blockquote></blockquote>more foo<br></blockquote></html>|{{{<<<}}}<br />{{{foo}}}<br />{{{> inner foo, level 1}}}<br />{{{>> inner foo, level 2}}}<br />{{{more foo}}}<br />{{{<<<}}}|\n\n<<<\nThe highlight can also accept CSS syntax to directly style the text:\n@@color:green;green coloured@@\n@@background-color:#ff0000;color:#ffffff;red coloured@@\n@@text-shadow:black 3px 3px 8px;font-size:18pt;display:block;margin:1em 1em 1em 1em;border:1px solid black;Access any CSS style@@\n<<<\n\n//For backwards compatibility, the following highlight syntax is also accepted://\n{{{\n@@bgcolor(#ff0000):color(#ffffff):red coloured@@\n}}}\n@@bgcolor(#ff0000):color(#ffffff):red coloured@@
@@color(#04f): 객체는 @@ 데이터와 데이터를 처리하는 포로시저를 함께 묶은 단위이다. \n 프로시저를 일반적으로 메소드 또는 오퍼레이션이라고 부른다. 객체는 요청 또는 메시지를 클라이언트로부터 받으면 오퍼레이션을 수해한다.\n
/***\n!Sections in this Tiddler:\n*Generic rules\n**Links styles\n**Link Exceptions\n*Header\n*Main menu\n*Sidebar\n**Sidebar options\n**Sidebar tabs\n*Message area\n*Popup\n*Tabs\n*Tiddler display\n**Viewer\n**Editor\n*Misc. rules\n!Generic Rules /%==============================================%/\n***/\n/*{{{*/\nbody {\n font-size: .75em;\n font-family: arial,helvetica;\n position: relative;\n margin: 0;\n padding: 0;\n}\n\nh1,h2,h3,h4,h5 {\n font-weight: bold;\n text-decoration: none;\n padding-left: 0.4em;\n}\n\nh1 {font-size: 1.35em;}\nh2 {font-size: 1.25em;}\nh3 {font-size: 1.1em;}\nh4 {font-size: 1em;}\nh5 {font-size: .9em;}\n\nhr {\n height: 1px;\n}\n\na{\n text-decoration: none;\n}\n\nol { list-style-type: decimal }\nol ol { list-style-type: lower-alpha }\nol ol ol { list-style-type: lower-roman }\nol ol ol ol { list-style-type: decimal }\nol ol ol ol ol { list-style-type: lower-alpha }\nol ol ol ol ol ol { list-style-type: lower-roman }\nol ol ol ol ol ol ol { list-style-type: decimal }\n/*}}}*/\n/***\n''General Link Styles'' /%-----------------------------------------------------------------------------%/\n***/\n/*{{{*/\n.externalLink {\n text-decoration: underline;\n}\n\n.tiddlyLinkExisting {\n font-weight: bold;\n}\n\n.tiddlyLinkNonExisting {\n font-style: italic;\n}\n\n/* the 'a' is required for IE, otherwise it renders the whole tiddler a bold */\na.tiddlyLinkNonExisting.shadow {\n font-weight: bold;\n}\n/*}}}*/\n/***\n''Exceptions to common link styles'' /%------------------------------------------------------------------%/\n***/\n/*{{{*/\n\n#mainMenu .tiddlyLinkExisting, \n#mainMenu .tiddlyLinkNonExisting,\n#sidebarTabs .tiddlyLinkExisting,\n#sidebarTabs .tiddlyLinkNonExisting{\n font-weight: normal;\n font-style: normal;\n}\n\n/*}}}*/\n/***\n!Header /%==================================================%/\n***/\n/*{{{*/\n\n.header {\n position: relative;\n}\n\n.header a:hover {\n background: transparent;\n}\n\n.headerShadow {\n position: relative;\n padding: 4.5em 0em 1em 1em;\n left: -1px;\n top: -1px;\n}\n\n.headerForeground {\n position: absolute;\n padding: 4.5em 0em 1em 1em;\n left: 0px;\n top: 0px;\n}\n\n.siteTitle {\n font-size: 3em;\n}\n\n.siteSubtitle {\n font-size: 1.2em;\n}\n\n/*}}}*/\n/***\n!Main menu /%==================================================%/\n***/\n/*{{{*/\n#mainMenu {\n position: absolute;\n left: 0;\n width: 10em;\n text-align: right;\n line-height: 1.6em;\n padding: 1.5em 0.5em 0.5em 0.5em;\n font-size: 1.1em;\n}\n\n/*}}}*/\n/***\n!Sidebar rules /%==================================================%/\n***/\n/*{{{*/\n#sidebar {\n position: absolute;\n right: 3px;\n width: 16em;\n font-size: .9em;\n}\n/*}}}*/\n/***\n''Sidebar options'' /%----------------------------------------------------------------------------------%/\n***/\n/*{{{*/\n#sidebarOptions {\n padding-top: 0.3em;\n}\n\n#sidebarOptions a {\n margin: 0em 0.2em;\n padding: 0.2em 0.3em;\n display: block;\n}\n\n#sidebarOptions input {\n margin: 0.4em 0.5em;\n}\n\n#sidebarOptions .sliderPanel {\n margin-left: 1em;\n padding: 0.5em;\n font-size: .85em;\n}\n\n#sidebarOptions .sliderPanel a {\n font-weight: bold;\n display: inline;\n padding: 0;\n}\n\n#sidebarOptions .sliderPanel input {\n margin: 0 0 .3em 0;\n}\n/*}}}*/\n/***\n''Sidebar tabs'' /%-------------------------------------------------------------------------------------%/\n***/\n/*{{{*/\n\n#sidebarTabs .tabContents {\n width: 15em;\n overflow: hidden;\n}\n\n/*}}}*/\n/***\n!Message area /%==================================================%/\n***/\n/*{{{*/\n#messageArea {\nposition:absolute; top:0; right:0; margin: 0.5em; padding: 0.5em;\n}\n\n*[id='messageArea'] {\nposition:fixed !important; z-index:99;}\n\n.messageToolbar {\ndisplay: block;\ntext-align: right;\n}\n\n#messageArea a{\n text-decoration: underline;\n}\n/*}}}*/\n/***\n!Popup /%==================================================%/\n***/\n/*{{{*/\n.popup {\n font-size: .9em;\n padding: 0.2em;\n list-style: none;\n margin: 0;\n}\n\n.popup hr {\n display: block;\n height: 1px;\n width: auto;\n padding: 0;\n margin: 0.2em 0em;\n}\n\n.popup li.disabled {\n padding: 0.2em;\n}\n\n.popup li a{\n display: block;\n padding: 0.2em;\n}\n/*}}}*/\n/***\n!Tabs /%==================================================%/\n***/\n/*{{{*/\n.tabset {\n padding: 1em 0em 0em 0.5em;\n}\n\n.tab {\n margin: 0em 0em 0em 0.25em;\n padding: 2px;\n}\n\n.tabContents {\n padding: 0.5em;\n}\n\n.tabContents ul, .tabContents ol {\n margin: 0;\n padding: 0;\n}\n\n.txtMainTab .tabContents li {\n list-style: none;\n}\n\n.tabContents li.listLink {\n margin-left: .75em;\n}\n/*}}}*/\n/***\n!Tiddler display rules /%==================================================%/\n***/\n/*{{{*/\n#displayArea {\n margin: 1em 17em 0em 14em;\n}\n\n\n.toolbar {\n text-align: right;\n font-size: .9em;\n visibility: hidden;\n}\n\n.selected .toolbar {\n visibility: visible;\n}\n\n.tiddler {\n padding: 1em 1em 0em 1em;\n}\n\n.missing .viewer,.missing .title {\n font-style: italic;\n}\n\n.title {\n font-size: 1.6em;\n font-weight: bold;\n}\n\n.missing .subtitle {\n display: none;\n}\n\n.subtitle {\n font-size: 1.1em;\n}\n\n/* I'm not a fan of how button looks in tiddlers... */\n.tiddler .button {\n padding: 0.2em 0.4em;\n}\n\n.tagging {\nmargin: 0.5em 0.5em 0.5em 0;\nfloat: left;\ndisplay: none;\n}\n\n.isTag .tagging {\ndisplay: block;\n}\n\n.tagged {\nmargin: 0.5em;\nfloat: right;\n}\n\n.tagging, .tagged {\nfont-size: 0.9em;\npadding: 0.25em;\n}\n\n.tagging ul, .tagged ul {\nlist-style: none;margin: 0.25em;\npadding: 0;\n}\n\n.tagClear {\nclear: both;\n}\n\n.footer {\n font-size: .9em;\n}\n\n.footer li {\ndisplay: inline;\n}\n/***\n''The viewer is where the tiddler content is displayed'' /%------------------------------------------------%/\n***/\n/*{{{*/\n* html .viewer pre {\n width: 99%;\n padding: 0 0 1em 0;\n}\n\n.viewer {\n line-height: 1.4em;\n padding-top: 0.5em;\n}\n\n.viewer .button {\n margin: 0em 0.25em;\n padding: 0em 0.25em;\n}\n\n.viewer blockquote {\n line-height: 1.5em;\n padding-left: 0.8em;\n margin-left: 2.5em;\n}\n\n.viewer ul, .viewer ol{\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer table {\n border-collapse: collapse;\n margin: 0.8em 1.0em;\n}\n\n.viewer th, .viewer td, .viewer tr,.viewer caption{\n padding: 3px;\n}\n\n.viewer pre {\n padding: 0.5em;\n margin-left: 0.5em;\n font-size: 1.2em;\n line-height: 1.4em;\n overflow: auto;\n}\n\n.viewer code {\n font-size: 1.2em;\n line-height: 1.4em;\n}\n/*}}}*/\n/***\n''The editor replaces the viewer in the tiddler'' /%------------------------------------------------%/\n***/\n/*{{{*/\n.editor {\nfont-size: 1.1em;\n}\n\n.editor input, .editor textarea {\n display: block;\n width: 100%;\n font: inherit;\n}\n\n.editorFooter {\n padding: 0.25em 0em;\n font-size: .9em;\n}\n\n.editorFooter .button {\npadding-top: 0px; padding-bottom: 0px;}\n\n.fieldsetFix {border: 0;\npadding: 0;\nmargin: 1px 0px 1px 0px;\n}\n/*}}}*/\n/***\n!Misc rules /%==================================================%/\n***/\n/*{{{*/\n.sparkline {\n line-height: 1em;\n}\n\n.sparktick {\n outline: 0;\n}\n\n.zoomer {\n font-size: 1.1em;\n position: absolute;\n padding: 1em;\n}\n\n.cascade {\n font-size: 1.1em;\n position: absolute;\n overflow: hidden;\n}\n/*}}}*/
/***\n!Colors Used\n*@@bgcolor(#8cf): #8cf - Background blue@@\n*@@bgcolor(#18f): #18f - Top blue@@\n*@@bgcolor(#04b): #04b - Mid blue@@\n*@@bgcolor(#014):color(#fff): #014 - Bottom blue@@\n*@@bgcolor(#ffc): #ffc - Bright yellow@@\n*@@bgcolor(#fe8): #fe8 - Highlight yellow@@\n*@@bgcolor(#db4): #db4 - Background yellow@@\n*@@bgcolor(#841): #841 - Border yellow@@\n*@@bgcolor(#703):color(#fff): #703 - Title red@@\n*@@bgcolor(#866): #866 - Subtitle grey@@\n!Generic Rules /%==============================================%/\n***/\n/*{{{*/\nbody {\n background: #fff;\n color: #000;\n}\n\na{\n color: #04b;\n}\n\na:hover{\n background: #04b;\n color: #fff;\n}\n\na img{\n border: 0;\n}\n\nh1,h2,h3,h4,h5 {\n color: #703;\n background: #8cf;\n}\n\n.button {\n color: #014;\n border: 1px solid #fff;\n}\n\n.button:hover {\n color: #014;\n background: #fe8;\n border-color: #db4;\n}\n\n.button:active {\n color: #fff;\n background: #db4;\n border: 1px solid #841;\n}\n\n/*}}}*/\n/***\n!Header /%==================================================%/\n***/\n/*{{{*/\n.header {\n background: #04b;\n}\n\n.headerShadow {\n color: #000;\n}\n\n.headerShadow a {\n font-weight: normal;\n color: #000;\n}\n\n.headerForeground {\n color: #fff;\n}\n\n.headerForeground a {\n font-weight: normal;\n color: #8cf;\n}\n\n/*}}}*/\n/***\n!General tabs /%=================================================%/\n***/\n/*{{{*/\n\n.tabSelected{\n color: #014;\n background: #eee;\n border-left: 1px solid #ccc;\n border-top: 1px solid #ccc;\n border-right: 1px solid #ccc;\n}\n\n.tabUnselected {\n color: #fff;\n background: #999;\n}\n\n.tabContents {\n color: #014;\n background: #eee;\n border: 1px solid #ccc;\n}\n\n.tabContents .button {\n border: 0;}\n\n/*}}}*/\n/***\n!Sidebar options /%=================================================%/\n~TiddlyLinks and buttons are treated identically in the sidebar and slider panel\n***/\n/*{{{*/\n#sidebar {\n}\n\n#sidebarOptions input {\n border: 1px solid #04b;\n}\n\n#sidebarOptions .sliderPanel {\n background: #8cf;\n}\n\n#sidebarOptions .sliderPanel a {\n border: none;\n color: #04b;\n}\n\n#sidebarOptions .sliderPanel a:hover {\n color: #fff;\n background: #04b;\n}\n\n#sidebarOptions .sliderPanel a:active {\n color: #04b;\n background: #fff;\n}\n/*}}}*/\n/***\n!Message Area /%=================================================%/\n***/\n/*{{{*/\n#messageArea {\n border: 1px solid #841;\n background: #db4;\n color: #014;\n}\n\n#messageArea .button {\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: #014;\n background: #fff;\n}\n\n/*}}}*/\n/***\n!Popup /%=================================================%/\n***/\n/*{{{*/\n.popup {\n background: #18f;\n border: 1px solid #04b;\n}\n\n.popup hr {\n color: #014;\n background: #014;\n border-bottom: 1px;\n}\n\n.popup li.disabled {\n color: #04b;\n}\n\n.popup li a, .popup li a:visited {\n color: #eee;\n border: none;\n}\n\n.popup li a:hover {\n background: #014;\n color: #fff;\n border: none;\n}\n/*}}}*/\n/***\n!Tiddler Display /%=================================================%/\n***/\n/*{{{*/\n.tiddler .defaultCommand {\n font-weight: bold;\n}\n\n.shadow .title {\n color: #866;\n}\n\n.title {\n color: #703;\n}\n\n.subtitle {\n color: #866;\n}\n\n.toolbar {\n color: #04b;\n}\n\n.tagging, .tagged {\n border: 1px solid #eee;\n background-color: #eee;\n}\n\n.selected .tagging, .selected .tagged {\n background-color: #ddd;\n border: 1px solid #bbb;\n}\n\n.tagging .listTitle, .tagged .listTitle {\n color: #014;\n}\n\n.tagging .button, .tagged .button {\n border: none;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selected .footer {\n color: #888;\n}\n\n.sparkline {\n background: #8cf;\n border: 0;\n}\n\n.sparktick {\n background: #014;\n}\n\n.errorButton {\n color: #ff0;\n background: #f00;\n}\n\n.cascade {\n background: #eef;\n color: #aac;\n border: 1px solid #aac;\n}\n\n.imageLink, #displayArea .imageLink {\n background: transparent;\n}\n\n/*}}}*/\n/***\n''The viewer is where the tiddler content is displayed'' /%------------------------------------------------%/\n***/\n/*{{{*/\n\n.viewer .listTitle {list-style-type: none; margin-left: -2em;}\n\n.viewer .button {\n border: 1px solid #db4;\n}\n\n.viewer blockquote {\n border-left: 3px solid #666;\n}\n\n.viewer table {\n border: 2px solid #333;\n}\n\n.viewer th, thead td {\n background: #db4;\n border: 1px solid #666;\n color: #fff;\n}\n\n.viewer td, .viewer tr {\n border: 1px solid #666;\n}\n\n.viewer pre {\n border: 1px solid #fe8;\n background: #ffc;\n}\n\n.viewer code {\n color: #703;\n}\n\n.viewer hr {\n border: 0;\n border-top: dashed 1px #666;\n color: #666;\n}\n\n.highlight, .marked {\n background: #fe8;\n}\n/*}}}*/\n/***\n''The editor replaces the viewer in the tiddler'' /%------------------------------------------------%/\n***/\n/*{{{*/\n.editor input {\n border: 1px solid #04b;\n}\n\n.editor textarea {\n border: 1px solid #04b;\n width: 100%;\n}\n\n.editorFooter {\n color: #aaa;\n}\n\n/*}}}*/
@@color(#04f): 교차판정 @@방식(충돌체크)\n-1. Axis Aligned Bounding Box ; 삼각형, 구, 축에 나란한 경계 박스\n-2. Oriented Bounding Box ; 방향을 가지는 경계 박스\n-3. Discrete Oriented Polytopes ; 유한한 방향을 가지는 다각형
@@color(#04f): 디더링 @@(dithering)은\n*서로 다른 색의 픽셀들의 연달아 놓아서 합성된 색이 나타나게 하는 것으로, \n**하드웨어에서 실제로 제공되는 것보다 더 많은 색들이 존재하는 것처럼 보이게 하기 위한 것이다.\n***컴퓨터 그래픽스(CG)에서 표시 장치나 인쇄기의 능력(해상도)을 초과하는 다계조(多階調)의 색의 화상을 근사하게 생성하기 위하여 사용되는 기술로,\n***예로 컬러 표시 장치나 인쇄기에서는 적색 도트와 백색 도트의 비율을 어떻게 하느냐에 따라 다양한 계조의 분홍색으로 보이게 한다.\n*디더링은 하프톤 화상(halftone image)과 비슷한 화상을 생성하며,\n**디더링은 저해상도에서 컴퓨터 도형 처리의 사실감을 높이고 매끄럽지 못하고 계단 모양으로 울퉁불퉁한 윤곽선이나 대각선을 눈에 띄지 않게 하기 위하여 사용된다.흔히 디더법이라고 도 한다. \n**화면에 어떤 색상을 표시할 수 없는 경우, \n***표시할 수 있는 색상들의 화소를 모아 되도록 비슷한 색상을 만들어 내는 것을 말한다. 예를 들어 회색은 회색의 화소를 사용하는 것이 아니라 검은색과 흰색 화소를 섞는 비율을 조절하여 보여주는 것으로 대체할 수 있다. \n**웹 그래픽의 경우 파일의 크기를 줄이기 위해 256 가지 색깔만 사용하도록 제한을 두면서 \n***그 외의 색은 디더링으로 나타내는 경우가 많다. 화면이나 프린터에서 모든 색을 표현할 수 있는 것이 아니기 때문에 있는 색을 혼합하여 사용하는 편법을 쓰는 것이라고 생각해도 틀리지 않다. \n&nbsp; &nbsp; cf.Dither Strength : 수치가 클수록 렌더링 입자가 커집니다
@@color(#04f): 래스터라이제이션 @@(rasterization)이란\n그래픽 (삼각형과 같은) 프리미티브를 가지고 실제로 스크린에 한 픽셀씩 그리는 것이다.\n
Part/ Chapter/ Section\n!!! 대분류-한글\n|<<siteMap Chapter_가 . openSliders>><<siteMap Chapter_나 . openSliders>><<siteMap Chapter_다 . openSliders>><<siteMap Chapter_라 . openSliders>><<siteMap Chapter_마 . openSliders>>|<<siteMap Chapter_바 . openSliders>><<siteMap Chapter_사 . openSliders>><<siteMap Chapter_아 . openSliders>><<siteMap Chapter_자 . openSliders>><<siteMap Chapter_차 . openSliders>>|<<siteMap Chapter_카 . openSliders>><<siteMap Chapter_타 . openSliders>><<siteMap Chapter_파 . openSliders>><<siteMap Chapter_하 . openSliders>>|\n|noBorder threeCol|k\n\n!!! 대분류-영어\n|<<siteMap Chapter_A . sliders>><<siteMap Chapter_B . sliders>><<siteMap Chapter_C . sliders>><<siteMap Chapter_D . sliders>><<siteMap Chapter_E . sliders>><<siteMap Chapter_F . sliders>><<siteMap Chapter_G . sliders>><<siteMap Chapter_H . sliders>><<siteMap Chapter_I . sliders>>|<<siteMap Chapter_J . sliders>><<siteMap Chapter_K . sliders>><<siteMap Chapter_L . sliders>><<siteMap Chapter_M . sliders>><<siteMap Chapter_N . sliders>><<siteMap Chapter_0 . sliders>><<siteMap Chapter_P . sliders>><<siteMap Chapter_Q . sliders>><<siteMap Chapter_R . sliders>>|<<siteMap Chapter_S . sliders>><<siteMap Chapter_T . sliders>><<siteMap Chapter_U . sliders>><<siteMap Chapter_V . sliders>><<siteMap Chapter_W . sliders>><<siteMap Chapter_X . sliders>><<siteMap Chapter_Y . sliders>><<siteMap Chapter_Z . sliders>>|\n|noBorder threeCol|k\n
TiddlyWiki lets you write ordinary HTML by enclosing it in {{{<html>}}} and {{{</html>}}}:\n\n<html>\n<a href="javascript:;" onclick="onClickTiddlerLink(event);" tiddlyLink="TiddlyWiki" style="background-color: yellow;">Link to wikiwords from HTML</a>\n</html>\n\nThe source for the above is:\n\n{{{\n<html>\n<div style="background-color: yellow;">\n<a href="javascript:;" onclick="onClickTiddlerLink(event);" tiddlyLink="Macros">Link to wikiwords from HTML</a>\n</div>\n</html>\n}}}\n\nHTML can enable some exotic new features (like [[embedding GMail and Outlook|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/d363303aff5868d0/056269d8409d121f?lnk=st&q=embedding+gmail&rnum=1#056269d8409d121f]] in a TiddlyWiki). However it doesn't work for some JavaScript code libraries; see CustomMarkup for another way to include custom HTML in your TiddlyWiki.\n\n----\nHere's one way to get a Flickr badge in TiddlyWiki:\n\n<html>\n<a href="http://www.flickr.com" style="text-align:center;">www.<strong style="color:#3993ff">flick<span style="color:#ff1c92">r</span></strong>.com</a><br>\n<iframe style="background-color:#ffffff; border-color:#ffffff; border:none;" width="113" height="151" frameborder="0" scrolling="no" src="http://www.flickr.com/apps/badge/badge_iframe.gne?zg_bg_color=ffffff&zg_person_id=35468148136@N01" title="Flickr Badge"></iframe>\n</html>\n\nHere's the HTML code to insert in a tiddler:\n{{{\n<html>\n<a href="http://www.flickr.com" style="text-align:center;">www.<strong style="color:#3993ff">flick<span style="color:#ff1c92">r</span></strong>.com</a><br>\n<iframe style="background-color:#ffffff; border-color:#ffffff; border:none;" width="113" height="151" frameborder="0" scrolling="no" src="http://www.flickr.com/apps/badge/badge_iframe.gne?zg_bg_color=ffffff&zg_person_id=35468148136@N01" title="Flickr Badge"></iframe>\n</html>\n}}}\n\nYou'll need to know your Flickr person ID, which should replace the value "35468148136@N01" in the HTML. There's a useful [[Flickr idGettr|http://eightface.com/code/idgettr/]] to help with this.
Entities in HTML documents allow characters to be entered that can't easily be typed on an ordinary keyboard. They take the form of an ampersand (&), an identifying string, and a terminating semi-colon (;). There's a complete reference [[here|http://www.htmlhelp.com/reference/html40/entities/]]; some of the more common and useful ones are shown below. Also see [[Paul's Notepad|http://thepettersons.org/PaulsNotepad.html#GreekHtmlEntities HtmlEntitiesList LatinHtmlEntities MathHtmlEntities]] for a more complete list.\n\n|>|>|>|>|>|>| !HTML Entities |\n| &amp;nbsp; | &nbsp; | no-break space | &nbsp;&nbsp; | &amp;apos; | &apos; | single quote, apostrophe |\n| &amp;ndash; | &ndash; | en dash |~| &amp;quot; | " | quotation mark |\n| &amp;mdash; | &mdash; | em dash |~| &amp;prime; | &prime; | prime; minutes; feet |\n| &amp;hellip; | &hellip; | horizontal ellipsis |~| &amp;Prime; | &Prime; | double prime; seconds; inches |\n| &amp;copy; | &copy; | Copyright symbol |~| &amp;lsquo; | &lsquo; | left single quote |\n| &amp;reg; | &reg; | Registered symbol |~| &amp;rsquo; | &rsquo; | right single quote |\n| &amp;trade; | &trade; | Trademark symbol |~| &amp;ldquo; | &ldquo; | left double quote |\n| &amp;dagger; | &dagger; | dagger |~| &amp;rdquo; | &rdquo; | right double quote |\n| &amp;Dagger; | &Dagger; | double dagger |~| &amp;laquo; | &laquo; | left angle quote |\n| &amp;para; | &para; | paragraph sign |~| &amp;raquo; | &raquo; | right angle quote |\n| &amp;sect; | &sect; | section sign |~| &amp;times; | &times; | multiplication symbol |\n| &amp;uarr; | &uarr; | up arrow |~| &amp;darr; | &darr; | down arrow |\n| &amp;larr; | &larr; | left arrow |~| &amp;rarr; | &rarr; | right arrow |\n| &amp;lArr; | &lArr; | double left arrow |~| &amp;rArr; | &rArr; | double right arrow |\n| &amp;harr; | &harr; | left right arrow |~| &amp;hArr; | &hArr; | double left right arrow |\n\nThe table below shows how accented characters can be built up by subsituting a base character into the various accent entities in place of the underscore ('_'):\n\n|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>| !Accented Characters |\n| grave accent | &amp;_grave; | &Agrave; | &agrave; | &Egrave; | &egrave; | &Igrave; | &igrave; | &Ograve; | &ograve; | &Ugrave; | &ugrave; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; |\n| acute accent | &amp;_acute; | &Aacute; | &aacute; | &Eacute; | &eacute; | &Iacute; | &iacute; | &Oacute; | &oacute; | &Uacute; | &uacute; | &nbsp; | &nbsp; | &Yacute; | &yacute; | &nbsp; | &nbsp; |\n| circumflex accent | &amp;_circ; | &Acirc; | &acirc; | &Ecirc; | &ecirc; | &Icirc; | &icirc; | &Ocirc; | &ocirc; | &Ucirc; | &ucirc; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; |\n| umlaut mark | &amp;_uml; | &Auml; | &auml; | &Euml; | &euml; | &Iuml; | &iuml; | &Ouml; | &ouml; | &Uuml; | &uuml; | &nbsp; | &nbsp; | &Yuml; | &yuml; | &nbsp; | &nbsp; |\n| tilde | &amp;_tilde; | &Atilde; | &atilde; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &Otilde; | &otilde; | &nbsp; | &nbsp; | &Ntilde; | &ntilde; | &nbsp; | &nbsp; | &nbsp; | &nbsp; |\n| ring | &amp;_ring; | &Aring; | &aring; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; |\n| slash | &amp;_slash; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &Oslash; | &oslash; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; |\n| cedilla | &amp;_cedil; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &nbsp; | &Ccedil; | &ccedil; |
Several [[Macros]] including the TodayMacro take a DateFormatString as an optional argument. This string can be a combination of ordinary text, with some special characters that get substituted by parts of the date:\n* {{{DDD}}} - day of week in full (eg, "Monday")\n* {{{ddd}}} - short day of week (eg, "Mon")\n* {{{DD}}} - day of month\n* {{{0DD}}} - adds a leading zero\n* {{{DDth}}} - adds a suffix\n* {{{WW}}} - ISO-8601 week number of year\n* {{{0WW}}} - adds a leading zero\n* {{{MMM}}} - month in full (eg, "July")\n* {{{mmm}}} - short month (eg, "Jul")\n* {{{MM}}} - month number\n* {{{0MM}}} - adds leading zero\n* {{{YYYY}}} - full year\n* {{{YY}}} - two digit year\n* {{{wYYYY}}} - full year with respect to week number\n* {{{wYY}}} two digit year with respect to week number\n* {{{hh}}} - hours\n* {{{0hh}}} - adds a leading zero\n* {{{hh12}}} - hours in 12 hour clock\n* {{{0hh12}}} - hours in 12 hour clock with leading zero\n* {{{mm}}} - minutes\n* {{{0mm}}} - minutes with leading zero\n* {{{ss}}} - seconds\n* {{{0ss}}} - seconds with leading zero\n* {{{am}}} or {{{pm}}} - lower case AM/PM indicator\n* {{{AM}}} or {{{PM}}} - upper case AM/PM indicator
@@color(#04f): 목표관리 @@(MBO:Management By Objective through self-control)\n참고; [[핵심성공요인(CSF)]]\n\n기업의 인간적 측면에 바탕을 두고 효율적 경영관리체제를 실현하려고 하는 경영관리의 수법 및 경영이념이다.이것은 조직목표와 개인목표를 명확하게 설정함으로써 각자의 능력을 개발하고 의욕을 높이며 또한 각자의 힘을조직력으로 집중 발휘시킴으로써 효율적인 경영활동을 가능하게 하려고 하는 것이다.\n*목표관리의 개념 \n**목표관리란 조직의 목표설정에서부터 책임의 확정, 실적의 평가, 조직단위 또는 개인의 활동에 이르기까지 조직의 상·하 구성원과 함께 참여하여 공동으로 조직의 제반문제에 대해 결정하는 것이다. 이 때의 목표는 단기간의 구체적 목표를 말한다. 즉, 목표관리는 상·하 간의 참여적 관리라고 볼 수 있다. \n*관리 방법\n**목표관리는 조직목표와 개인목표를 어떻게 연계시킬 것인가가 중요하다. 그러기 위해서는 앞에서 학습한 방법(Tree, Budget, Probability, Task, Cycle)을 잘 활용해야 한다. 그리고 시스템을 중시하는 조직문화 창조가 목표관리의 효율적인 운영방법이 되기 때문에 현장을 실질적으로 통솔하는 중간관리자들의 역할이 매우 중요하다.\n목표관리에서는 정량목표, 정성목표, 스킬 매트릭스의 3개 기본축이 있다. 이 중 스킬 매트릭스는 더 높은 성과를 올리기 위해서는 어떠한 능력 요건이 필요한지 규정하는 것이다. \n * 직무에 필요한 요건은 보통 능력(업무수행능력, 문제해결 능력, 의사소통)과 의사(지도/육성, 향상심, 책임감, 협조성)의 두 가지 분야로 나뉜다. 명확한 전략의 공통점은 핵심역량이 명확해서 그것을 무기로 삼고 있다는 점이다. \n\n그리고 회사의 독자적인 핵심역량에 비추어 개인이 갖추어야 할 역량도 독자적인 것이어야 한다. \n * 역량의 기본 관점은 인재에 대한 벤치마킹이다. 높은 실적을 올리는 뛰어난 사원의 특성을 모델화하여 평가, 보상, 능력개발, 채용, 배치 등 인사관리 시스템 전반에 활용해야 한다.\n\n인사평가의 3가지 기능은 조직이 지향하는 방향으로 사원의 행동을 이끌어,\n * 인재를 육성하고, 조직을 강화하며, 처우를 결정하기 위한 기초 정보를 얻는 것이다. 평가하는 것은 정량목표, 정성목표, 스킬 매트릭스 3가지이며 능력주의, 성과주의 중 어느 쪽을 지향하는가에 따라 비중이 달라진다.\n\n평가는 ‘달성도 x 비중 x 난이도 x 노력도’라는 공식으로 산출한다. \n * 달성도는 연간 매출목표가 1억 5,000만 엔이었는데 실적이 1억 2,000만 엔이라면 80%가 된다. \n * 비중은 목표의 수가 3개라면 전체를 100으로 했을 때 각각의 목표에 몇 %의 비중을 부여하는가이다. \n * 난이도란 조정항목이며 노력도는 시장과 환경이 순풍인가 역풍인가를 참작하기 위한 항목으로 이 두 가지 항목은 잘 사용하지 않는다. \n\n목표관리는 보통 6개월 주기로 실시하는데 가능한 한 사업연도(상반기, 하반기)에 맞추는 것이 좋으며 \n * 주기 말에 성과를 평가하여 다음 기의 목표를 잡는 것이 좋다.\n
@@color(#04f): 속력과 속도 @@ \n개체가 주어진 시간 동안 주어진 거리를 이동한다면, \n&nbsp; &nbsp; 물리적인 관점에서 이것은 개체의 속력이고,\n&nbsp; &nbsp; 만일 방향을 정의한다면 이것은 개체의 속도이다.[ 참고; "DirectX 실시간 렌더링 실전테크닉 ]
@@color(#04f): 스키마 @@(Schema)\n* 사람들은 어떠한 사실에 대해서 아무런 순서없이 알고 있다기 보다는 특별한 주제에 대해서 보통 체계화된 지식을 가지고 있게 된다.\n** 이렇게 하나의 주제에 대해 체계화된 지식 구조를 스키마(schema, 복수는 schemata)라 한다. 예를 들어, 빨래를 하고, 생일파티를 하고, 식당에서 식사를 하는 등과 같은 익숙하고도 고정된 상황에 대해 체계적으로 알고 있는 지식을 말한다.\n* 여러종류의 개념들에 대해 이렇듯 고정화되고 체계화된 스키마가 존재합니다. \n** 이러한 모든 스키마는 복잡한 아이디어들을 체계화하는 하나의 틀을 제공하기 때문에, 언어를 이해하고 처리하는데 중요한 역할을 하게 된다.
@@color(#04f): 스프라이트 @@(Sprite)\n* 일정 사이즈의 그래픽 데이터를 화면 상에서 자유자재로 배치하거나 고속으로 움직일 수 있는데, 이 그래픽 데이터를 '스프라이트' 라고 한다. \n** 컴퓨터에서는 화면 전체가 한 장의 그래픽 데이터로 구성되어 있기 때문에 액션 게임의 캐릭터 등을 움직이기 위해서는 캐릭터의 위치가 변화된 그림을 계속해서 만들어 표시해야 한다. \n* 이것을 소프트웨어적로 행하게 되면 컴퓨터가 처리해야 하는 분량이 상당하게 되는데, \n** 하드웨어적인 스프라이트 기능을 가지고 있는 게임기에서는 배경의 그림 위에 독립해서 캐릭터의 그림을 배치하고 자유자재로 위치를 변경할 수 있다.\n\n@@color(#04f): 스프라이트 에디터 @@\n* 스프라이트 Editor란, 보통 게임에서 맵에 찍히는 타일이외의 그림 데이터를 만들어주는 Editor이다. \n** 게임의 주인공이나 그 외의 캐릭터와 날아다니는 새, 예쁜 나비나 강아지 등도 만들어 주기도 하고, 여러 개의 그림들을 묶어, 방향에 따른 모습이나 동작 등을 만들어 하나의 새로운 캐릭터를 만들어 준다.
@@color(#04f): ▣ 아젠다 @@영어 사전상으로는,...\n&nbsp; &nbsp; agenda (agenda의 단수 취급이 확립되어 왔으므로 복수형은 ~s가 일반적임_보통 단수 취급)\n의사 일정, 협의 사항; 비망록 the first item on the ~ 의사 일정의 제1항목,......\n아젠다(agenda)란 '토의할 일련의 과제들', '해야할 일련의 일들'이란 뜻을 가진 단어로, 라틴어의 'agere(하다)'에서 유래한 영어\n
@@color(#04f): 오픈 소스 - 라이센스 @@\n# GNU: General Public License (GPL) \n## 파생물도 GPL을 따라야 함 \n## 소스를 반드시 구할 수 있어야 함(변경 포함) \n## Richard M. Stallman이 주창함 \n## LGPL과 LGPL2\n# BSD License \n## 파생물은 별도의 라이센스 부여 가능 \n## 그럴 필요 없음. 상업적 사용 가능 \n## BSD UNIX의 라이센스 조항 \n## 여러가지 변종 존재(FreeBSD, X, Artistic etc..)\n# Artistic License, Mozilla Public License(MPL), FreeBSD License, XFree86 License 등 \n
@@color(#04f): 이모티콘 @@(Emoticon)\n
@@color(#04f): 인덱스버퍼 @@(Index Buffer)는 정점의 인덱스를 보관하기 위한 전용 버퍼\n# 정점을 여러 번 나열하는 것보다 메모리 소모량이 적다.\n# 자주 사용되는 정점을 캐쉬(cache)에 저장해서 더 높은 효율을 낼 수 있다.\n** 실제로는 캐시 적중 알고리즘에 따라서 정점을 최적화 해야만 한다.\n# 구형 그래픽카드(TNT급)들이 16비트 인덱스만(WORD형)을 지원한다.\n** 그릴 수 있는 폴리곤의 숫자는 2에 16승 = 64k가 되며, D3DFMT_INDEX16을 사용한다.\n\n▶ 관련사항; [[버텍스버퍼]]\n
@@color(#04f): 인스턴스 @@(instance)는\n추상화 개념 또는 클래스 객체, 컴퓨터 프로세스 등과 같은 템플릿이 실제 구현된 것이다.\n(출처; http://www.terms.co.kr/)
@@color(#04f): 인자 기반 탐색 @@(argument-dependent lookup) \n'''쾨니그 탐색(Koenig lookup)''' - 어떤 함수에 어떤 타입의 인자가 있으면, 그 함수의 이름을 찾기 위해 해당 타입의 인자가 위치한 네임스페이스 내부의 이름을 탐색해 들어간다는 간단한 규칙이다. \nADL(Argument Dependent Lookup)이란 약자로 많이 불린다. '쾨니그'의 Koenig는 C++ 표준화 위원회 임원이자 이 규칙을 창안한 앤드류 쾨니그(Andrew Koenig)의 이름에서 따온 것이다.
@@color(#04f): 영속성 @@(Persistence)이란\n객체의 상태를 저장한 후 나중에 그 상태를 복원시키는 동작이다. 영속성은 MFC에서는 Serialization이란 용어로 불린다. 만약 개발자가 영속성을 사용하게 된다면, 개발자는 file 형식(format)에 대한 아무런 걱정 없이 read/write할 수 있다. 단지 객체를 read/write하는 순서만 맞추어 주면 된다.\n
@@color(#04f): 버텍스버퍼 @@(vertex buffer)란\n정점을 모아두는 일종의 메모리로 비디오 메모리와 시스템 메모리 두 가지의 메모리를 사용한다.\n* 비디오 메모리; 비디오카드의 GPU(Graphic Processing Unit)에 의해서 정점 셰이더, T&L 등의 강력한 하드웨어 가속을 사용할 수 있지만, 자체의 메모리 용량을 벗어날 수 없으며, 게다가 텍스처와 함께 사용해야 하기 때문에 사용 가능한 메모리는 더욱 적을 수밖에 없다.\n* 시스템 메모리; T&L등의 강력한 하드웨어 가속은 사용할 수 없지만, 풍부한 용량으로 상대적으로 많은 정점 버퍼를 관리할 수 있다.\n\n▶ 관련사항; [[인덱스버퍼]]
@@color(#04f): 추상화 @@(abstraction)\n주어진 문제나 시스템 중에서 중요하고 관계있는 부분만을 분리하여 간결하고 이해하기 쉽게 만드는 작업. 이러한 과정은 원래 문제에서 구체적인 사항은 되도록 생략하고 핵심이 되는 원리만을 따진다.\n
@ 2011-03-28 @\n클라우드 게이밍은 오직 고속 네트워크망과 디스플레이만으로 모든 수치 연산과 파일 저장을 대신하는 원격 시스템을 통해 게임을 플레이한다.\n\n▷ 장점 ; \n&nbsp; &nbsp; -.클라이언트를 다운받을 필요가 없으며 고사양 게임을 즐기기 위해 매번 PC를 업그레이드 하지 않아도 된다.\n&nbsp; &nbsp; -.굳이 고정돼있는 PC가 아니더라도 스마트TV나 태블릿 PC등 다양한 유무선 기기들을 활용(미래의 게임 플랫폼으로 각광)\n&nbsp; &nbsp; -.게임 그래픽의 발전은 CPU가 PC에서 차지하는 비중만큼 GPU의 위상을 급격하게 끌어올린 가장 큰 이유라고 할 수 있다. 하지만 클라우드 게이밍 기반에서는 PC용 CPU와 GPU에게 더 이상 높은 스펙을 요구하지 않는다. (PC용 하드웨어 제조업체에게도 큰 타격)\n\n▷ 단점 ; \n&nbsp; &nbsp; -.제대로 된 클라우드 게이밍을 구현하기 위해 엄청난 양의 데이터를 처리할 수 있는 서버가 필요\n&nbsp; &nbsp; -.고사양을 요구하는 하이엔드급 온라인 게임을 원활하게 클라우드 게이밍 기반으로 서비스하기 위해서는 기가 단위의 인터넷 회선이 필요\n&nbsp; &nbsp; -.단순히 화면전달이 아닌 유저의 컨트롤 지연 문제를 해결하는 것도 과제 \n\n클라우드 게이밍 서비스가 갖고 있는 장점이 오히려 발목을 잡을 수도 있다는 의견도 있다. 고사양 게임을 유저가 보유한 기기의 스펙에 구애받지 않고 즐길 수 있다는 장점이 점차 가벼운 게임을 선호하고 있는 지금의 기호와 맞아 떨어지지 않을 수도 있다는 것이다. 결국 클라우드 게이밍은 고사양을 요구하는 게임에 적합한 플랫폼이지만 SNG나 스마트폰 자체에서 운용되는 가벼운 게임들이 더 각광받으면서 마니아들만 즐기는 플랫폼으로 남을 수도 있다는 의견이다.
@@color(#04f): 타이밍 @@\n* 애니메이션이 시스템 프레임에 의존할 때 문제점\n** 개체에게 프레임당 주어진 거리만큼 이동하라고 지시할 경우, \n*** 프레임 속도가 빨라질수록 개체 속도도 빨라져 시스템에 독립된 일정한 속도를 유지할 수 없다.\n*** 대안으로 프레임 속도를 잠그는 방법도 있지만 바람직하지 못하며 애니메이션을 프로그램의 시간에 의존하도록 해야하며 어떠한 애니메이션 기법도 프레임이 아닌 시간에 근거해야만 한다.\n* 저속 타이머는 애니메이션에 더 적합하면\n** 고속 타이머는 프레임 속도와 같은 통계량에 더 좋다.\n* 높은 정밀도 값을 질의하는 것이 훨씬 더 시간이 오래 걸리기 때문에,\n** 실제로 매우 짧은 시간 간격을 측정하기 위해 고속 타이머를 사용할 수 없다.\n** 이것은 더 긴 시간 간격 동안에 작은 변화를 보기 위해 사용할 수 있다.\n* 이전 프레임을 기준으로 하지 않고 시작 시간을 기준으로 하여 경과된 시간을 계산함으로써\n** 프레임 간에 반올림 오차를 피할 수 있다.\n[ 참고; "DirectX 실시간 렌더링 실전테크닉 "제 38장 완벽한 타이밍" ]\n
@@color(#04f): 트리거 @@(trigger)\n* 트리거의 예를 들면, \n** 데이터베이스 내에서 참조의 무결성을 유지하기 위해 어떤 프로시저를 자동으로 호출하는 것과 같은 행동이다. 트리거는 사용자가 데이터를 삽입하거나 삭제하는 등과 같은, 데이터 변경에 관한 시도를 했을 때 효력을 나타낸다. \n* 트리거는 지정된 어떤 변경이 시도되면, 일련의 행동들을 취하도록 시스템에게 알릴 수 있다. \n** 트리거는 부정확하고, 허가 받지 않았으며, 일관성이 없는 데이터 변경을 방지함으로써, 데이터베이스의 무결성을 유지하는데 도움을 준다. \n
@@color(#04f): 파일 확장자 @@(filename extension)\n\n''3D 게임을 위한 파일 포맷''\n.3DS => 3DStuido R4 (또는 MAX)에서 출력\n.ASE => 3DStudioMax에서 작업한 것을 아스키코드형태로 출력\n.X => DirectX3D에서 기본으로 지원\n&nbsp; &nbsp; &nbsp; &nbsp; / 3DS-> X파일(변환)로 만들어주는 컨버터가 있다. 다이렉트 SDK를 깔고 나셔서 Util 폴더 안에 X파일로 컨버팅 해주는 프로그램이 있고 다이렉트X의 유틸리티 클래스에서 기술제공\n.MD2 => Quake(1 아니면 2)의 캐릭터 포맷\n.MDL( 또는 SMD ) => Haf-Life의 캐릭터 포맷\n\n@@color(#04f): .fxo @@\n&#8226; Microsoft DirectX pre-compiled pixel/vertex shader.(from www.file-extensions.org)\n&#8226; Gamebryo can load either text-based FX shaders, or binary FX shaders that have been compiled with fxc.exe. Compiled FX shaders should be use the extension ".FXO" to distinguish them from uncompiled FX shaders.(from Gamebryo 2.5 documentation )\n\n\n
@@color(#04f): 패딩 @@(padding)이란? \n패딩은 데이타를 일정 단위의 크기를 맞추기 위하여 추가되는 더미 데이타를 말한다. 예를 들어 데이터의 단위를 40바이트로 정했다면 실제 데이타가 36바이트라도 나머지 4바이트를 쓰레기 값으로 채워서 40바이트를 맞추게 된다. \n이런 데이터는 컴퓨터나 네트웍의 처리 단위와 관련이 있다... Visual C++ 프로그래머라면 #pragma pack을 사용하여 이러한 구조체 얼라인먼트 문제를 해결하는 방법을 알고 있을 것이다. 하지만 네트웍 패킷을 설계하는데 있어서는 패딩을 사용하여 특정 환경에 종속적이지 않은 방법을 선택하는 것이 좋다.
@@color(#04f): 포트폴리오 @@(portfolio) - 출처; 야후백과사전\n사진가나 아티스트·표현자(表現者)·크리에이터 등이 자신들의 작품을 정리하여 정리한 파일. 패션사진가·그래픽디자이너들 사이에서는 북(book)으로 통용되는 경우도 있다. 일반적인 출판물·사진집 등과는 차이가 있어 어디까지나 교사·갤러리직원·미술관직원·편집자와 같은 제3자에게 자신의 작품세계에 대한 이해를 구하는 기능으로 활용되는데, 작품은 몇몇 시리즈 가운데 대표작을 골라 전체를 간단히 이해할 수 있도록 편성된다. 작가의 연락처·경력·작품의도와 같은 문자정보도 포함된다. 작자는 이 포트폴리오를 일상적으로 만들면서 테마를 보다 명확히 축약해나가고, 편집을 더하고, 다음 작품의 힌트도 얻을 수 있는 장점이 있다.\n\n@@color(#04f): 포트폴리오 @@(portfolio) - 출처; 야후백과사전\n주식투자에서 위험을 줄이고 투자수익을 극대화하기 위해 여러 종목에 분산투자하는 방법. 본래 간단한 서류가방이나 자료수집철을 뜻하는 말로, 주식투자에서는 투자자산의 집합이라는 의미로 사용된다. 자산 운용에는 공격형(투기형) 투자와 방어형 투자의 두 방향이 있다.
1.@@color(#04f): 프레이밍 @@(framing)이란? - 출처; Network Programming For Microsoft Windows 2, 15장\n낮은 레벨의 통신 프로토콜에서 데이터의 전송 단위를 프레임(frame)이라고 하고 이런 프레임에 데이터를 담거나 추출하는 과정을 프레이밍(framing)이라고 한다. 예를 들면 이더넷 프레임(Ethernet frame)은 IP 패킷을 담고 있다. 또한 IP가 이더넷이 아닌 시리얼 통신을 통해 구현될 때는 시리얼 통신용 프레임에 패킷이 담기게 된다. 일반적으로 프레임은 프로그래밍 가능한 가장 낮은 수준의 데이터다.\n&nbsp; &nbsp; 신호 -> 프레임 -> IP패킷 -> UDP패킷\n이런 식으로 이해하면 될 것이다.\n\n========================================\n2.@@color(#04f): 프레이밍 @@(framing)이란?\n해당 시점에서 장면의 주제, 여백 등을 고려해 구도를 잡는 것. 여기서는 섀도 맵 해상도가 차지하는 시스템 자원의 낭비를 막기 위해 그림자를 고려한 라이트의 담당 영역을 결정하는 걸 말한다.\n출처; 디지털 라이팅 & 렌더링 2nd Edition\n\n========================================\n3.@@color(#04f): 사진에서 프레이밍, 크롭핑, 트리밍의 구별 @@\n사진에서 이미지를 잘라내는 것은 세 가지로 구분한다.\n1) 프레이밍(Framing)이란\n카메라의 파인더를 통해 촬영할 대상의 범위를 결정하여 촬영하기 전에 필요 없는 것을 잘라내는 것을 말한다. 촬영단계에서 완벽한 앵글과 Composition, Construction, Lighting, 셔터찬스 등을 결정하고 최종적으로 자신이 촬영할 범위를 결정하는 행위이다.\n\n2) 크로핑(Cropping)이란\n필름으로 확대 인화할 때 필름의 일부분에 원치 않는 대상이 찍혔다면\n이것을 인화하면서 확대기로 이미지의 크기를 조절하여 인화지 위에 그 이미지가 나타나지 않도록 하는 것을 말한다. 필름을 잘라내는 것은 아니지만, 필름의 이미지 중 필요한 부분만 인화지 위에 나오게 하는 방법이다.\n특히 갓 사진을 시작한 사람들이 많이 활용하는 방법이다.\n\n3) 트리밍(Trimming)이란\n최종 인화한 인화지에서 필요 없는 부분을 잘라내는 것을 말한다.\n
@@color(#04f): 휴리스틱 의사결정이론 @@ - 출처; KASPA 김중규 행정학 아카데미\n(1)의의 : 뉴엘과 사이먼에 의하면, 문제 해결은 다양한 문제 상태로 된 ‘문제 공간’의 검색이다. 문제의 적정 공간에 관한 인간의 내적 결정은 직무환경의 해석을 통해서 이루어진다. 문제 해결자는 휴리스틱 규칙을 사용하여 선택적으로 문제를 개념화시킨다(Newell & Simon, 1972: 48-85). 이 때 사람마다 문제 공간이 갖는 구조상의 차이는 실제 문제 해결 과정에 지대한 영향을 미친다. 문제 공간은 지식 상태를 나타내는 노드(node)의 연결망 형태로 생각할 수 있는데, 각 노드는 특정 시점에서 문제해결자가 알고 있는 것을 말한다. 각 지식의 상태는 수많은 기호들로 구성된다. 뉴웰과 사이먼에 위하면, 문제풀이란 문제풀이자가 원하는 지식 상태에 도달하는 경로(path)를 찾는 과정이 된다. 문제 해결을 문제 공간의 탐색이라고 할 때 중요한 것은 탐색을 지배하는 원리를 찾는 것이다. 전체 문제의 대안과 결과를 모두 탐색할 수 없을 때 우리는 흔히 문제를 쪼개어 하위 목표의 선택 방법에 몰두하게 된다. \n\n(2)특징 : 목표의 선택 방법은 알고리즘과 휴리스틱으로 나뉜다. 알고리즘 방법은 문제 해결이 보장되는 절차이다. 덧셈, 곱셈은 여기에 해당한다. 알고리즘 방법을 사용하면 항상 정확한 답이 나온다. 휴리스틱은 최선의 답 (best answer) 보다 그럴 듯한 답 (nice and good answer)에 이르게 하는 주먹구구식 탐색 규칙 (rule of thumb) 이다. 휴리스틱은 탐색의 완벽은 기하지 못하지만 가능한 탐색 고하정의 효율성은 높일 수 있다. 휴리스틱의 기본 원리는 항상 현재 최선의 값을 가진 하위 목표로부터 출발하여 나름대로의 특정 형태의 평가 함수(의사결정 규칙)에 의거하여 탐색이 유도될 수 있다는 것이다 (Kowalski, 1979:82). 알고리즘은 완전한 합리성을 추구한다면 휴리스틱은 제한된 합리성에 의한 문제해결과정이다. \n\n(3)알고리즘과의 비교 : 휴리스틱에 입각한 문제 해결 과정은 다음과 같은 특징을 가진다.\n&nbsp; &nbsp; 1)알고리즘에 비해 현실적이다. 곱셈의 경우는 해결의 정확성은 보장받아도, 그러한 해결 과정의 자원과 가중치의 배분이 형평에 맞게 이루어졌는지에 관한 해답을 주지 못한다. \n&nbsp; &nbsp; 2)알고리즘에 비해 문제 해결 수단의 탐색에 유연하다. 여기서 ‘유연하다’란 말은 문제 해결 수단의 탐색에 동원되는 지식이 덜 구조화되어 있다는 뜻이다. \n&nbsp; &nbsp; 3)알고리즘에 비해 효율적이다. 알고리즘은 문제 해결의 규범성을 강조하는 반면, 휴리스틱은 인간이 수행할 수 있는 계산 능력의 범위 안에서 채택 가능한 해답을 찾고자 하는 문제 풀이 방법의 발견에 몰두하기 때문에 현실적으로 효율적인 방법이 된다. 따라서 의사결정자는 채택 가능한 해결책에 가장 빨리 도달하게 하는 몇 개의 단순한 의사결정규칙을 사용하는 휴리스틱 탐색에 의존하게 된다. \n\n(4)한계 : 인간 의사결정의 휴리스틱적 해결은 현실 세계에서 목표-수단의 연쇄고리를 찾아내기 힘들다는 데 한계가 있다. 사람들이 보통 자신들의 행동의 목표를 잘 인식하지 못하는 것과 같다. 반대로 의식하지 않는 행동은 과연 목표가 없는가 하는 문제 제기도 가능하다. 아울러 휴리스틱에 입각한 의사결정이 효율적이라 해도 반드시 타당하지 못하다는 데 또 다른 한계가 있다. 비교적 간단하고 반복적인 영역에서의 의사결정에는 휴리스틱이 효용을 발휘하겠지만 복잡한 영역에서의 휴리스틱적 의사결정에는 종종 위험이 따르기도 한다. \n
@@color(#04f): ▣ ABV @@(Alternate Bounding Volume)\n\n@@color(#04f): ▣ ACL @@(Access Control List) ; 접근 조절 목록\n\n@@color(#04f): ▣ Atlas @@ &nbsp; &nbsp; @ 2016-05-10 @\n사전적 의미는 지도책, texture 관점에서는 하나의 Sheet에 여러가지 이미지들을 넣어 놓고 쓰는 방법을 의미한다.\n\n@@color(#04f): ▣ Architecture @@; 아키텍처\n하드웨어·소프트웨어를 포함한 컴퓨터시스템 전체의 설계 사상, 즉 구성상의 사고 방식이나 구성 방법.\n\n@@color(#04f): ▣ argument @@; 인수\n테이블에서 구하는 항목이나 함수를 발견하는 데 필요한 이미 알고 있는 관련 요소(함수값을 결정하는 변수)\n\n@@color(#04f): ▣ ARPU @@; (≒아르푸) Average Revenue Per User의 준말로 한 사용자당 올리는 평균 수익을 의미
@@color(#04f): Occluder @@; 언리얼에서는 컬링이라고도 한다는데 \n게임상에서 눈앞에 벽이 있어 보이지 않더라도 벽뒤 시선의 일직선 상의 모든것을 랜더링건다. 게임을 좀더 가볍게 돌릴수 있게 하기 위해서 맵을 적절하게 등분하여 Occluder를 배치하고 일정 영역에서는 원하는 부분을 랜더링 걸지 않게 해준다.\n
@@color(#04f): Bezier Curve @@; 불규칙한 곡선을 표현하기 위해 수학적으로 만든 선.\n프랑스의 수학자 베지어에 의해 만들어진 다항식 공선의 하나로 아웃라인 문자, 스플라인 곡선, 포스트 스크립트 등 문자 데이터와 도형을 그릴 때의 자유 곡선은 이 베지어 곡선이 사용되고 있다.\n베지어 곡선은 제어점이라고 하는 몇 개의 점으로 만들어 지는데, 곡선은 최초의 제어점인 기점에서 시작하여 최후의 제어점인 종점에서 끝난다.\n기점과 종점 사이에 찍힌 제어점이 곡선 모양을 결정하며, 곡선은 제어점 위를 통과하는 것은 아니다. 기점에서 시작한 곡선은 인접한 제어점 방향으로 진행하는데, 그 옆에 있는 제어점의 영향을 받아 최초의 제어점 위를 지나가지 않고 다음의 제어점 방향에 곡선이 그려지게 된다. 결국 하중 평균이 채용되는 것이다.\n이와 같이 하여 매끄러운 곡선을 그릴 수 있고, 기점과 종점을 포함한 제어점의 갯수가 많을 수록 복잡한 곡선을 만들 수 있는데, 계산에 시간이 걸리므로 많은 것은 사용할 수 없다. 포스트스크립트는 제어점이 4개의 3차 베지어 곡선이 사용되며, 트루타입은 2차 베지어 곡선이 사용된다.\n&#8226; 상세정보 ; [[베지어 곡선|http://www.gingaminga.com/wiki/pds/ziny/Bezier.mht]] ▶ 출처; 3map.snu.ac.kr/
@@color(#04f): ▣ BitBlt @@(Bit Block Transfer)\n\n@@color(#04f): ▣ BSC @@(Base Station Controller) : 기지국 제어기\n - 여러 기지국 등을 제어하는 기능 수행 (핸드오프 등)\n@@color(#04f): ▣ BTS @@(Base Transceiver Subsystem) : 기지국 송수신기\n - 이동국과의 음성, 데이터의 실제 전송기능 수행\n - 안테나 및 탑 구조물 등\n\n@@color(#04f): ▣ BOP @@(Bottom of the paramid) 비즈니스란 @ 2011-03-12 @\n경제라는 피라미드의 하단을 뜻하는데, 주로 개도국 이하의 경제적 빈곤계층을 의미하는 말로 통용된다. 즉 BOP란 빈곤층을 대상으로 한 사업모델이다. 일단 BOP의 양적 시장규모는 합격점이다. 국제금융공사(IFC)는 소득별 인구구성에서 연간소득 3,000달러 이하의 세대를 BOP층으로 규정하는데, 그 규모는 세계인구의 약 72%(40억명)를 차지한다. 잠재적인 시장규모란 약 5조달러로 일본의 실질국내총생산에 해당하는 거액이다. 지역별로는 중동을 포함한 아시아가 최대 BOP 시장이다. 이런 점에서 BOP 시장은 포스트 신흥시장으로 불리기도 한다.\n\n@@color(#04f): ▣ BTS @@(Bug Tracking System)란 \nQA와 개발자가 발견된 소프트웨어의 버그를 추적하는 것을 돕기 위한 소프트웨어\n\n
@@color(#04f): ▣ Circular Dependencies @@; 순환참조\n\n@@color(#04f): ▣ CDN @@ (Contents Delivery Network) \n원활한 다운로드를 위해서 콘텐츠 제공업자 (CP)의 웹 서버에 집중돼 있는 콘텐츠 중 용량이 크거나 사용자의 요구가 잦은 콘텐츠를 ISP측에 설치한 CDN 서버에 미리 저장, CDN 서버로부터 최적의 경로로 사용자에게 콘텐츠를 전달하는 기술. (한마디로 IDC 여러 개 두고 한쪽으로 트레픽이 너무 많이 밀릴 때 알아서 가장 속도가 빠른곳에서 다운로드를 선택 실행\n\n@@color(#04f): ▣ coat of arms @@; (가문・도시 등의 상징인) 문장\n\n@@color(#04f): ▣ color scheme @@ (컬러 스킴) ; (실내 장식•의상 따위의) 색채 설계; (일반적으로) 배색 계획\n\n@@color(#04f): ▣ customize @@; 사용자정의\n\n@@color(#04f): ▣ Context Sensitive 도움말 @@\n이용자가 처한 상황을 시스템이 판별해서 이용자에게 알맞은 도움말을 제공하는 형태를 말한다.\n\n@@color(#04f): ▣ CSS @@ (Cascading Style Sheets)는 (2014-08-25) \ndocuments가 사용자에게 어떻게 보여질가를 기술하는 언어이다.\n\n@@color(#04f): ▣ C# @@ (2014-06-25) \n__''C# Generics'' __\nC# Generics는 C++의 템플릿과 비슷한(내부 아키텍쳐는 상당한 차이점이 있다) 개념으로서 \n클래스, 인터페이스, 메서드 등에 <T> 같은 Generic 파라미터를 붙여 구현한다. 사용시에는 이 Generic 파라미터에 특정 타입을 지정하게 되는데, 실행(Runtime)시에 Generic으로부터 지정된 타입의 객체(object)를 구체적으로 생성해 사용하게 된다.\n\n__''Generic 타입 제약''__\nC# Generics를 선언할 때, 타입 파라미터가 Value Type인지, Reference 타입인지, 또는 어떤 특정 클래스로부터 파생된 타입인지 등을 지정할 수 있는데, 이는 <b>where T : 제약조건</b>과 같은 식으로 where 뒤에 제약 조건을 붙이면 가능하다.\n\n<br>\n\n
@@color(#04f): CPU @@(중앙처리장치) \n레지스터는 CPU 연산을 위한 일시적인 기억장소로서, 레지스터에 \n-.Accumulator - 데이타를 저장\n&nbsp; &nbsp; A←A+B와 같이 레지스터간의 연산으로 인한 결과값이 다시 범용 레지스터에 누적된다는 개념\n-.Pointer - 데이터의 주소를 저장\n-.Counter - 데이터의 갯수를 저장
@@color(#04f): ▣ Message box warning @@; 경고 메시지 박스\n\n@@color(#04f): ▣ MMPOG @@ (Massively Multiplayer Persistent Online Games) &nbsp; &nbsp; @ 2010-03-25 @ \n수천명의 플레이어가 하나의 가상 세계를 공유하는 멀티 플레이어 게임. 이 때 캐릭터의 정보가 끊임없이 기록되며 시간에 따라 변화한다.
@@color(#04f): NDLCD @@; NDL Collision Data\n\n
@@color(#04f): ▣ DAG @@(directed acyclic graph) ; 방향성 비순환 그래프 \n\n@@color(#04f): ▣ DBA @@(Database Administrator)\n\n@@color(#04f): ▣ DCC tools @@(Digital Content Creation Tools)\n\n@@color(#04f): ▣ DDA @@ 동적 난이도 조절(Dynamic Difficulty Adjustment) &nbsp; &nbsp; @ 2010-03-25 @\n플레이어의 능력에 따라 게임의 난이도를 증가 혹은 감소시키는 능력.\n\n@@color(#04f): ▣ dereferencing @@; 간접지정\n\n@@color(#04f): ▣ DLC @@ (DownLoadable Contents) &nbsp; &nbsp; @ 2017-09-06 @\n순수한 의미에서 현재 온라인상에서 내려받아서 사용하는 프로그램 모두가 DLC의 범주에 들어간다. 패키지/온라인 게임을 하면서 받는 패치도 DLC이고, 스팀에서 구매하고 내려받는 게임도 DLC이며, 아마존닷컴에서 내려받아 사용하는 소프트웨어도 DLC의 개념에 포함된다.\n\n패키지 게임에서 일반적으로 DLC는 해당 콘텐츠의 제공자에게서 인증을 직접 받아야 하기 때문에, RPG 계열과 같이 추가적으로 붙일 것이 많은 장르의 게임에게 있어서는 특히 환영받는 편이다.\n하지만 DLC는 결과적으로 본편 게임의 데이터가 파편화된 형식이기 때문에 해킹에 취약하다. 불법복제품이 모든 DLC를 포함하여 편하게 모든 콘텐츠를 이용할 수 있게 하고, 정당하게 대가를 지불한 정품구매자는 DLC의 추가구매없이는 조각빠진 게임을 할 수 밖에 없어 정품보유자임에도 불법복제품을 쓰는 부작용이 발생한다.\n\n@@color(#04f): ▣ down-casting @@; 파생, 혹은 형제 클래스의 타입으로 변환\n\n@@color(#04f): ▣ DPI @@; (dot per inch) &nbsp; &nbsp; @ 2015-05-21 @\n인치당 점의 수로 DPI는 인쇄와 관계된 설정으로, 모니터와는 전혀 상관없다.\n&nbsp; &nbsp; &nbsp; &nbsp; / 모니터상에서는 화소로 표시되기 때문에 1픽셀은 1 화소로 표시\n&nbsp; &nbsp; &nbsp; &nbsp; / 100dpi의 사진과 300dpi의 사진은 해상도가 3배 차이지만 가로 세로 점의 수가 10,000개와 90,000의 차이로 9배 차이가 난다.\n&nbsp; &nbsp; &nbsp; &nbsp; 해상도가 낮은 100dpi의 사진을 인쇄할 때 1개의 점을 찍을자리에 300dpi의 사진(해상도 3배 차이)은 9개의 점을 찍게된다. 그만큼 선명하다.\n\n픽셀이 같은 사진을 인터넷에 올려서 모니터화면으로 보면 같은 크기로 표시\n&nbsp; &nbsp; &nbsp; &nbsp; / 같은 픽셀의 사진을 인쇄할 때, 해상도가 높으면 1인치당 점의 수가 많기 때문에 더욱 촘촘히, 선명한 사진을 인쇄하지만 사진은 작게 인쇄된다.\n\n<br>
@@color(#04f): filename extension @@; 파일 확장자\n\n@@color(#04f): functionality @@; 기능성\n\n
@@color(#04f): Effect @@\nDirectX9 용어로 이펙트 effect란 정면의 출력 방법을 기술하는 스트링이다. \n&nbsp; &nbsp; 이 이펙트에서는 텍스처와 이름, 위치 및 기타 매개변수를 지정한다.\n&nbsp; &nbsp; ▷ 출처; 초보개발자를 위한 DircetX 게임 데모 프로그래밍(에이콘 발행)(p.168 5장 3D 이펙트/ 5.5 이펙트)\n\n• Bloom Effect\n• Glow Effect\n
@@color(#04f): ▣ GDC @@ 게임 개발자 회의(Game Developers Conference) &nbsp; &nbsp; @ 2010-03-25 @ \n게임 개발자들이 모여서 게임 제작과 관련된 자신들의 경험에 관해 전달하고 토론하는 연례 회의.\n\n@@color(#04f): ▣ Global Variable @@; 전역변수\n\n@@color(#04f): ▣ Glyph (glíf) @@ n.그림(도안) 표지/【건축】장식용, 세로홈/【고고학】그림 문자, 상형 문자/ ~ic a. \n\n@@color(#04f): ▣ GUI @@( Graphic user interface )\n\n
@@color(#04f): instance, instantiate @@; 인스턴스, 인스턴스화\n인스턴스는 추상화 개념 또는 클래스 객체, 컴퓨터 프로세스 등과 같은 템플릿이 실제 구현된 것이다. 인스턴스화는 클래스 내의 객체에 대해 특정한 변형을 정의하고, 이름을 붙인 다음, 그것을 물리적인 어떤 장소에 위치시키는 등의 작업을 통해, 인스턴스를 만드는 것을 의미한다.
@@color(#04f): ▣ IDC @@ (Internet Data Center)\n항온, 항습, 보안시설 등을 갖추고 인터넷 업체들에 서버를 빌려주거나 이들의 서버를 대신 관리해 주는 곳. 한마디로 서버관리 대행업체.\n\n@@color(#04f): ▣ If you are curious @@; 참고로\n\n@@color(#04f): ▣ IIS @@; @ 란? 2014-12-22 @ >> [[IIS 상태코드정리]]\n(인터넷 정보 서비스) ''Internet Information Sevices''의 약자로 MS Windows Server에서 사용하는 웹서버 Apache 웹서버에 이어 가장 많이 알려진 웹서버이며, 웹서버 이외에도 FTP/SMTP/NNTP 등을 지원 그냥 쉽게 생각해서 HTTP 프로토콜을 이용하여 웹문서를 제공하는 서버이다.\n\n다음 오류 메시지는 오류가 반환된 시점에 웹 사이트를 호스팅하는 웹 서버에 문제가 발생했음을 나타낸다.\n&nbsp; &nbsp; / HTTP 500 - 내부 서버 오류\n&nbsp; &nbsp; / Response.Status = "500 Internal Server Error"\n\n@@color(#04f): ▣ implementation @@; 구현\n\n@@color(#04f): ▣ infinite loop @@; 무한루프\n\n@@color(#04f): ▣ interpolator @@; 간단한 애니메이션 계산을 위하여 미리 만들어진 스크립트\n• interpolator node; 보간자 노드, 보간 노드\n\n@@color(#04f): ▣ ISBN @@ (International Standard Book Number)국제표준 도서번호\n서적을 분류, 숫자로 표시한 세계공통의 코드. 국명, 출판사, 도서코드 등의 숫자로 표시.\n\n1. 2007년 1월 1일 부터 ISBN 자리수를 10자리 -> 13자리로 변경한 이유는\n&nbsp; &nbsp; 1970년대 ISBN시스템이 도입된 시점에 예상했던 것보다 인쇄출판물 및 전자출판물 등 출판량의 급증으로 현 ISBN시스템에서 사용할 수 있는 도서번호수가 한계에 도달하여 2007년 1월 1일 부터 전 세계적으로 ISBN 13자리를 사용한다.\n10자리 ISBN을 다 소진한 국가들은 먼저 13자리 ISBN을 사용할 수 있어서 <미국><캐나다>등의 나라들은 ISBN 13자리를 미리 시행할 예정이나, 우리나라는 전 세계 적용시점에 맞추어 2007년 1월 1일 부터 시행한다. \n\n2. ISBN 13자리 변경 내역\n&#8226; 2007년 1월 1일 부터 ISBN은 10자리에서 13자리로 변경하여 사용 \n&#8226; 기존 10자리 번호는 앞에 978을 덧붙임 \n&#8226; ISBN 13자리 숫자는 ISBN 10자리 바코드로 변환한 EAN-13 숫자와 동일\n&#8226; 기존번호에 978을 덧붙여 사용하고, 2007년부터 한국문헌번호센터에서는 979배정을 시작\n\n
@@color(#04f): 게임의 분류 @@\n* MUD(머드) ; Multiple User Dialogue / Dungeon \n** 멀티플레이가 지원되고, 그 기반에 채팅이 있으면 머드게임으로 텍스트를 기반으로 해서 오로지 텍스트를 이용해서 명령을 하고 텍스트를 통해서 모든 게임 정보를 얻고 진행\n* MUG(머그) ; Multi User Graphic \n** 기존의 텍스트형 멀티게임인 머드게임에서 발전한 형태로 멀티미디어를 포함한 머드게임을 말하고, 사이버공간내의 자신의 분신(캐릭터)의 성장을 주요 목적으로 하며, 그래픽을 통해서 자신의 캐릭터의 성장을 볼 수 있다. 수많은 타인과의 반목, 대결, 타협, 조화를 통해서 게임을 진행해 나가는 방식\n** 국내의 대표적인 머그게임으로는 ncsoft의 <리니지>, 넥슨의 <바람의 나라>, 태울의 <영웅문>, 팬택넷의 <마제스티> 등이 있다.\n* MOG ; Multiplayer Online Game (멀티플레이어 온라인 게임)\n** MOG게임의 충성도와 사용자의 소비율이 낮기때문에 이 유형의 게임은 생존압력이 매우 크며, 사용자들이 제품의 퀠러티에 대한 요구가 향상됨에 따라 MOG는 반드시 끊임없이 새로운 게임요소를 추가해야만 사용자들의 수요를 만족시킬 수 있다.\n* MMOG(엠모그) ; Massively Multiplayer Online Game (다중 멀티플레이어 온라인 게임)\n* MMORPG ; Massively Multi-user Online Role Playing Game (다중접속 온라인 롤 플레잉 게임)\n** 수백명 이상이 하나의 세계에서 게임을 즐기는 게임\n* MORPG ; Multi-user Online Role Playing Game\n** 8명 안팎의 소수 유저들이 각기 독립된 월드에 접속해서 플레이하는 ‘파티 플레이 방식’의 게임으로 대전도 하고 소수의 인원들로서 던전탐험을 하면서 성장해나가는 기반의 시스템\n*** 던전앤파이터, NC소프트의 길드워, 웹젠의 SUN, 소프트닉스의 라키온:카오스 포스, 윈디소프트의 인피니티 등 \n** 장점 ; \n*** MMORPG에 비해 낮은 접근성과 쉬운 조작법, 캐주얼게임보다 강한 몰입도와 높아진 게임성 등, 대규모 군중 속에서 소외될 수밖에 없는 MMORPG와 달리 스스로가 주연이 될 수 있는 장점이 있음\n*** MMORPG와는 다르게 엄청나게 많은 시간을 투자하지 않아도 즐길수 있다.\n** 단점 ;\n*** 단순반복의 던전파티사냥, 소수 매니아층 유저들, 무차별한 캐쉬탬 등\n* MMP game; Massively Multiplayer game(대규모 다중 플레이 게임)\n* MOD; 'Modification'의 약어로 '유저가 게임의 내용을 수정 하거나 추가한 결과물'을 말한다.\n** 다른 게임의엔진이나 구성 요소로부터 새로 구성된 게임\n** 정의상으로 보면 '유즈맵'도 분명 'MOD'에 속한다고 볼 수 있다. 사람에 따라 조금씩 다르지만 보통 'MOD'라고 이야기할 때는 단순히 맵 정도를 새로 제작하는 수준이 아닌 게임 플레이 자체를 완전히 바꾼 경우를 말한다. 높은 완성도를 가진 'MOD'는 원작과 비교해서 아예 다른 게임이라고 불러도 손색이 없다.\n** 'MOD'의 시초는 일반적으로 '캐슬 울펜슈타인(Castle Wolfenstein)'을 변형하여 만든 '캐슬 스머펜슈타인(Castle Smurfenstein)'으로 보고 있다(물론 그 이전에도 이러한 것을 만든 게이머가 없을 것이라고는 보장할 수 없기 때문에 'MOD'의 역사는 더 오래되었다고 할 수 있다). 이 게임은 원래 '울펜슈타인'의 고성에서 나치들을 상대하는 게임이지만 'MOD'에 의해 거대한 버섯성에서 스머프들을 상대하는 게임으로 변했다.\n** 이 게임이 나온 시기는 1980년대 초반이다. 마치 '유즈맵'이 발전하여 'MOD'가 등장한 것처럼 말했지만 그렇지 않다. 하지만 이 시기에는 대다수의 게이머들의 수준 문제도 있었고, 제작사들이 게임소스를 패쇄적으로 운영했기 때문에 'MOD'가 그다지 활성화 되지 못했다. 'MOD'가 활성화되기 시작한 것은 1990년대 부터다. '둠(Doom)'이나 '퀘이크(Quake)' 같은 3D게임들이 인기를 끌기 시작하면서부터 'MOD'에 대한 관심이 증폭되었고, 몇몇 회사에서 'MOD' 개발을 위한 게임엔진과 모드 툴을 개발 및 공개하면서 지금에 이르게 되었다.\n* FPS ; First Person Shooter (1인칭 슈터 게임)\n** 1인칭 시점으로 총기류 등의 무기를 사용해 이동하고 전투를 벌이는 게임 장르이다. 컴퓨터의 성능이 발전함에 따라 슈팅게임 역시 3차원 표현을 활용하게 되었으며, 이드소프트웨어(Id Software)사의 캐슬 울펜스타인(Castle Wolfenstein)이 그 효시이다. 이후 이드소프트웨어와 제작자 존 카맥(John Camack)은 일인칭슈터(First Person Shooter)라는 새로운 게임의 장르를 개척하며 둠 시리즈, 퀘이크 시리즈를 통해 이 분야의 절대 강자로 자리 잡게 되었다.\n\n* 핵 & 슬래쉬 ; hack-and-slash\n\n!!! AOS란 RPG, FPS 등의 게임 장르 중에 하나로,\nAOS라는 단어의 시초는 스타크래프트의 유즈맵인 Aeon Of Strife 의 약자로(공성전) 한 게임 안에서 캐릭터의 성장(RPG 요소), 몬스터의 사냥, 적 캐릭터와의 PVP, 아이템 구입등 전반적인 활동(RTS 요소)을 통해 전투를 이글어 나가는 장르이다.\n\n초기에 스타크래프트 유즈맵으로 시작된 AOS 는 워크래프트3를 통해 룰은 그대로 유지한채 새롭게 DOTA 라는 게임으로 변형된다.\nDOTA는 AOS 장르에 가장 큰 영향을 끼친 유즈맵이며 스타크래프트와 다르게 전투 중심이 아닌 영웅 성장을 통한 전투에 촛점을 맞춘다.\n(게임에 따라서 각각의 특성을 가진 다양한 캐릭터를 지원)\n\n워3라는 기본 게임을 바탕으로 하고 있으며 워3의 가장 큰 장점중에 하나인 영웅 시스템과 성장 시스템을 스타크래프트의 AOS와 융합하여 만들어진 산물이라 할수 있다.\n\n높은 진입장벽이 단점이다. AOS는 기본적으로 PvP를 기반으로 하고 있어서, MMORPG류의 게임처럼 초보존부터 시작해서 차근차근 게임의 재미를 알게 되고, 차근차근 스킬을 배워가며 차근차근 게임에 흡수되는 것이 아니라, AOS는 시작과 동시에 앞서 말했던 RPG의 성장, 수집, RTS의 전략, 전술, 각 캐릭터의 특성을 모두 파악하고 게임에 임해야 승리 할 수 있다. 더군다나, 상대는 유저이기 때문에 이 부분의 학습량에 대한 차이를 둘 기준이 없다.\n(참고. http://blog.naver.com/ryukilsun/130086285287 )\n\n\n!!! 유료게임의 무료/ 부분유료화 전환은\n* 유료 아이템과 게임 밸런싱을 둘러싼 기존 유료/ 신규 무료 이용자 간의 갈등 해소라는 과제를 내포하고 있어, \n** 유료로 구매한 아이템의 성능은 높이되, \n** 전체 게임 내에서의 형평성을 유지할 수 있도록 밸런스를 조절하는 것이 부분유료화 성패의 주요 요소라 할 수 있다.\n\n!! 라이브팀 역할\n소프트웨어를 유지보수하고 컨텐츠를 추가하며, 게임마스터처럼 행동하면서 게이머 손에서 제품이 언제나 새롭게 살아있게 해주는 역할을 담당\n\n!! 게임업계의 333법칙\n* 이용자가 3초 안에 게임명을 기억하게 해야 한다.\n* 또 30분 동안 이용자가 게임에 접속해 있어야 하고, \n* 접속을 종료한 뒤 3시간 전에는 이용자의 머릿속에 해당 게임이 다시 떠올라야 한다.\n\n\n!!! 웹게임\n* 웹게임(Web Game): Wikipedia에서는 브라우저 게임(Browser Game)이라고 부르고 있으며, \n** 일반적으로는 별도의 클라이언트 프로그램을 설치하지 않고 웹 브라우저 상에서 즐기는 게임을 의미함, \n** 주로 JavaScrpit 혹은 Flash로 제작하여 PC패키지 게임(CD,DVD설치)이나 온라인게임에 비해 컴퓨터 성능의 부담이 적은 게임을 칭하며, 웹표준을 지키기 때문에 Internet Explorer뿐만 아니라, Firefox, Safari 등에서도 실행 가능 \n\n* 웹게임의 장점\n&nbsp; &nbsp; &nbsp; &nbsp; ▶ 과거 PC 통신의 텍스트 입력 방식의 메드 게임에 대한 향수\n&nbsp; &nbsp; &nbsp; &nbsp; ▶ 사양이 낮은 PC나 휴대용 디바이스에서도 구동되어 언제나 접속 가능하다는 점\n&nbsp; &nbsp; &nbsp; &nbsp; ▶ 오프라인 상태에서도 웹 기반의 세계가 지속 된다는 점 \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 예) OGame, 부족전쟁, 칠용전설(중국 웹게임)\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 출처; 게임산업TREND 2008 4/4분기 고경신(엔씨소프트 Global Biz. Unit 부장)\n\n\n!!! 클라이언트기반 소셜네트워크게임(SNG)\n* 클라이언트 기반 SNG는 브라우저에서 바로 실행되는 기존 SNG와 달리 파일을 내려받아 설치하는 온라인게임의 형식을 따른다. \n** 클라이언트 기반 SNG는 게임 내에 소셜네트워크서비스(SNS)를 갖췄다. 달리 말하면, 이용자가 게임에 들어와야 SNS를 통해 상대방과 친분을 쌓을 수 있다는 얘기다. SNS 파급력이 게임 내부에 한정된다. 즉 게임을 즐기려고 접속한 이용자가 아니면, 인맥 쌓기가 어렵다.\n** 미국에서 발원된 SNG와는 시각차이가 크다. SNS플랫폼 위에서 SNG가 돌아가면서, SNS를 즐기는 이용자가 자연스레 게임에 유입되는 것과는 과정이 반대다.\n\n\n!!! 클라우드 게이밍\n오직 고속 네트워크망과 디스플레이만으로 모든 수치 연산과 파일 저장을 대신하는 원격 시스템을 통해 게임을 플레이한다.\n* 장점 ;\n** 클라이언트를 다운받을 필요가 없으며 고사양 게임을 즐기기 위해 매번 PC를 업그레이드 하지 않아도 된다.\n** 굳이 고정돼있는 PC가 아니더라도 스마트TV나 태블릿 PC등 다양한 유무선 기기들을 활용(미래의 게임 플랫폼으로 각광)\n\n!!! App Store\n* $99의 개발자 등록비만 지불하면 누구나 직접 개발한 애플리케이션 업로드 가능\n** 작년 7월 오픈 후 현재까지 25,000 여 개의 애플리케이션 등록\n** 1~7일이 소요되는 최소한의 버그테스트를 거쳐 App Store에 등록되면, 전세계 iPhone, iPod Touch 이용자들이 자유롭게 유/무료 다운로드 가능\n* 유료 애플리케이션은 제작자 : 애플이 7:3 비율로 수익 배분\n** Electronic Arts, Konami 등 글로벌 업체 및 게임빌, 컴투스 등 국내 업체 입점\n\n\n!!! PvP와 RvR (출처 : Tong - 버들마을님의 게임 이야기통)\n* 구분; PvP의 규모가 커지면 RvR이 되는 게 아니라 아군과 적군이 캐릭터 생성부터 확실한 구분되는 시스템의 지원여부가 기준\n** 자신이 특정 진영에 속할 것인지 아닌지를 플레이어가 결정할 수 있는 PvP 게임과 달리 RvR은 진영선택에 강제성을 띈다. 때문에 진영을 선택한 플레이어는 원하든 원하지 않든, 게임 내에서 확실히 구분되는 아군과 적군을 가지게 된다. 즉, 같은 캐릭터로는 진영 이동이 불가능하고 중립적인 입장도 될 수 없는 것이다. 따라서 개인보다 단체적 성향이 강하다.\n* @@color(#04f): PvP @@(Player vs Player)\n** 예) 리니지 - 몬스터를 처치해 자신의 무기와 방어구를 강화시키고 그 장비들로 공성전과 필드전을 펼치며 혈맹의 끈끈한 정을 느끼는 것\n** 개발자가 만들어 놓은 컨텐츠뿐만 아니라 유저들 스스로가 만들어가는 세력 구도가 PvP 게임의 재미이자 장점이다. 하지만 다양한 세력이 존재하기 때문에 자칫 과도한 경쟁과 감정싸움에 휘말릴 수 있다.\n** 유저들이 창조할 수 있는 범위가 넓지만 협동 부분보단 경쟁 부분이 대다수를 차지하지만, 다양한 세력 구도가 PvP의 중요한 재미인 만큼 유저들에 의해 형성되는 세력 간 관계를 지금보다 유연하게 시스템적으로 지원하게 될 것이다.\n** 게이머를 경쟁 외의 컨텐츠를 즐기기 힘들게 만들 수 있어서, 온라인 게임의 기본적인 재미 요소 중 하나인 협동’을 즐기기엔 힘들다.\n* @@color(#04f): RvR @@(Realm vs Realm)\n** 예) 월드 오브 워크래프트(와우) - 적과 아군이 뚜렸하게 나뉘어져 있으므로 상대진영을 아무런 부담 없이 공격할 수 있다. 거기에 장비보다는 플레이어의 컨트롤 실력이 승패의 많은 부분을 차지하기 때문에 액션 게임 못지 않은 재미를 선사\n** 강제성을 띄기 때문에 유저들이 만들어 가는 컨텐츠가 부족하고 세력간 인구차가 발생한다면 재미가 반감된다. 반면 진영이 확실히 구분되기 때문에 플레이어간 전투를 적극적으로 유도 할 수 있다.\n** 온라인 게임의 가장 기본적인 재미인 협동과 경쟁이 자연스럽게 녹아 있다. 공공의 적을 두고 있다는 점에서 소속감을 높일 수 있고 이런 소속감은 단합, 즉 협동으로 나타난다. 경쟁 요소는 지역을 차지하거나 승리하는 적 진영과의 전투에서 찾을 수 있다. \n** 인구비율이 맞지 않는 경우 RvR 게임의 재미가 반감되기 때문에 기울어진 인구비율을 극복하기 위해선 여러 가지 안전장치가 필요하며, 진영간 전투가 더욱 재미있고 활성화 될 수 있도록 지원하는 시스템이 필수적이다. \n
@@color(#04f): managed C++ @@은 .NET 플랫폼에서 사용하는 C++로 기본적인 문법은 비슷하지만,\n추가된 문법 들과(박싱, 언박싱).NET 프레임워크의 사용, MSIL, 가비지 컬렉션 등이 특징이다.\nnative C++은 .NET 플랫폼을 사용하지 않는 기존의 C++을 말한다.\n
▣ 용어정리를 위해서 만든 공간으로 위키 설정에 도움을 준 현진에게 감사!\n&nbsp; &nbsp; 여기에 설치된 버전은 ccTiddly-v1.1 final 버전을 받아서 설치\n\n▣ 검색을 위해서 기본적은 tag이 필요 (예. 가, 나, ... ⇒ '목록'으로 정리)\n\nTo get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:\n* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)\n* MainMenu: The menu (usually on the left)\n* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened\nYou'll also need to enter your username for signing your edits: <<option txtUserName>>\n\n* Text format ; 유니코드(UTF-8)\n\n▣ 참고사이트\n&nbsp; &nbsp; http://www.tiddlywiki.com/ - 공식사이트\n&nbsp; &nbsp; http://tiddlyvault.tiddlyspot.com/\n&nbsp; &nbsp; http://www.tiddlytools.com/#ImageSizePlugin \n&nbsp; &nbsp; http://tiddlyspot.com/?page=gallery\n
<<search>><<closeAll>><<newTiddler>><<tiddler 'LoginPanel'>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>\n\n\n\n
출처; http://hanigamo.egloos.com/1576787\n\nsyntactic : 문법의\nsemantic : 의미의, 의미론의\nPragmatics : 어용론(語用論)\n\nSemantic은 Syntactic에 대응하는 개념입니다. Syntactic은 과학적, 규칙적인 것을 대변해서 인공의 언어, 한정된 Tag를 가지는 word를 의미하고 주로 외형에 대해서 규정하는 범위를 가지는 것 같습니다. 반면에 Semantic은 Syntactic한데 받아들여질 수 없는 것에 대한 대책으로 나오게 된 것 같습니다. Semantic은 Real word를 반영하는 것으로 이해될 수 있겠지만, 컴퓨터로 Real word를 모델링 하는 것은 곧 커다란 artificial word에 지나지 않습니다. 그러니까 Sematic은 좀 더 섬세한 인공 세상 - 자연 세상을 많이 반영한 - 을 의미할 수 밖에 없습니다. "아버지가 자동차를 먹었다"와 같은 문장은 명사, 동사, 조사 등의 단위를 인식하는 syntactic word에서는 존재할 수 있는 문장이지만, "자동차는 음식이 아니다"라는 사실을 기록해둔 Sematic world에서는 존재하기 어려운 문장이 될 것입니다. (자동차 모양의 과자를 먹었다는 것이 사실이어도 의미론에서는 어쩔수가 없겠지요... 그것을 용납해주는 수준이 의미론입니다.) 그러므로 Syntactic과 Semantic은 다루는 단위의 범위의 차이가 있을 뿐 동일한 체계를 가지고 있습니다. \n\nSemamtic의 중요 개념은 word - (concept)과 (concept) - Relation - (concept) 입니다. 어떤 단어가 어떤 개념인지와 어느 개념과 어느 개념이 어떠한 관계를 가지고 있느냐를 이용하면 Semantic이 되는 것이고 단어의 아주 상위개념 - 특히 언어적인 관점에서 - 인 단어의 품사, 그리고 위치라는 Relation을 사용하면 일반적인 Syntactic이 되는 것 같습니다. 단지 대상과 관계의 종류가 많아진 다는 것이 다른 점이라고 하여야 할 것 같습니다. 그렇다면, Sematic을 도입하려면 어떠한 일을 하면 되는 것일까 생각해 보아야 겠습니다. 그것은 명확하게 대상으로 하는 concept들을 나누어 분류하고, Relation도 나누어 분류한 후에 concept과 concept간의 relation을 규정해 주는 것이 될 것 입니다. 이것을 어려운 이야기로 Ontology구축이라고도 하는 것 같습니다.
Dead라는 말은 신호를 받지 못하고 있는 상태를 말한다.즉 신호가 전달 되지 않으니 신호가 죽은셈이다. Reckoning은 추산하다는 뜻으로 신호가 없는 동안에도 추측으로 계산한다는 것이다. \n다시말해서 신호가 없는 동안에도 이전에 받았던 신호를 바탕으로 추산해서 상태정보를 갱신한다는 것이다. \n\nDead Reckoning은 주로 플레이어의 위치정보를 갱신하는데 사용되는데,\n물론 데드 레커닝 없이 매 프레임마다 플레이어의 위치값을 주고 받을 수 있으면 좋지만.. 제한된 Bandwidth 때문에 그렇게 할 수가 없다. \n추가로 플레이어의 정보를 전달할때 현재의 위치 값 뿐만아니라 위치 값이 전달되지 않는 동안에도 위치 값을 추측하는데 데 필요한 부가적인 정보를 같이 보내한다. \n\n
참고 ; \n&nbsp; &nbsp; &nbsp; &nbsp; http://3dapi.com/bs25_shader1/ - 쉐이더 개요 \n&nbsp; &nbsp; &nbsp; &nbsp; http://attila.ac.upc.edu/wiki/index.php/D3D_ASM_shaders_translation\n&nbsp; &nbsp; &nbsp; &nbsp; -. unity, ''Shader Forge'' - A visual, node-based shader editor\n\n&nbsp; &nbsp; &nbsp; &nbsp; http://tetrackis.tistory.com/entry/0904수업\n&nbsp; &nbsp; &nbsp; &nbsp; http://www.neatware.com/lbstudio/web/hlsl.html - HLSL 샘플 \n\n&#8226; AMD GPU ShaderAnalyzer ; DX Asm, HLSL → D3D Assembly 코드로 변환\n&#8226; AMD RenderMonkey 1.82 ; HLSL → 'Disassembly'를 통해 D3D Assembly 코드로 변환\n&#8226; NVIDIA FX Composer 2.5 ; Effect File (*.fx) → ASM.txt 파일 생성\n\n{{wrappingClass{ fxc -nologo -T vs_1_1 -Fc -Vd NPRMetallic.vhl (HLSL → Assembly 코드로 저장) }}}\nD3DXMATRIX ''matWorldViewProjection'' = matWorld * matView * matProjection; \n\n\n!!! #. VS.1.1 → VS.2.0 변경시 주의점\n1.m4x3 r2,v4,c30;\n&nbsp; &nbsp; error X5478: M4x3 instruction must use destination writemask: .xyz\n&nbsp; &nbsp; → m4x3 r2.xyz,v4,c30;\n\n!!! #. PS.1.1 → PS.2.0 변경시 주의점\n1.단순 출력\n&nbsp; &nbsp; def c0, 1, 0, 0, 1\n&nbsp; &nbsp; / PS.1.1 ; mov r0, c0\n&nbsp; &nbsp; / PS.2.0 ; mov oC0, c0\n\n!!! #. Shader 레지스터\n|>|>|>| Vertex Shader |>| Pixel Shader |\n|>|입력 |>| 출력 |>| 입력 | 출력 |\n|cn | 상수 | | |cn |상수 | |\n|rn | 임시 | | |rn |임시 | |\n| | | oPos|1개의 4-float 값 동차 절단 공간에서의 출력 위치 | | |\n| | | oTn|최대 8개의 4-float 값 | tn | 텍스처 | |\n|vn | 입력 | oDn|2개의 4-float 값 (분산색(oD0)과 반영색(oD1)) |vn |색 (v0 정점 분산색/ v1 반영색) |\n| | | oPts.x|하나의 스칼라 float 출력 점 크기 레지스터 | | | |\n| | | oFog.x|하나의 스칼라 float 안개 값 | | | |\n\n!!! #. Pixel Shader\n정점 쉐이더는 변환, 조명, 안개 효과 등 래스터라이징 이전까지의 처리 과정을 프로그램 가능한 파이프라인을 이용.\n\nRasterizing 이후 만들어진 픽셀 데이터는 픽셀 처리 과정(Pixel Processing)으로 넘어갑니다. \n픽셀 처리 과정은 샘플링→ 다중 텍스처 처리 → 알파 테스트 → 깊이 테스트 → 스텐실 테스트 → 픽셀 포그 → 알파 블렌딩 순으로 진행되고 마지막에 후면 버퍼를 갱신하는 과정이다.\n\n픽셀 쉐이더는 이러한 픽셀 처리 과정 중에서 텍스처에서 색상을 추출하는 ''샘플링(Sampling)''과 ''입력된 색상을 혼합하는 다중 텍스처 처리(Multi-Texturing)''를 고정 기능 파이프라인이 아닌 프로그램 가능한 파이프라인으로 처리.\n\n\n!!! 용어\n|!DirectX |!OpenGL |\n|Vertex Shader |Vertex Programming |\n|Pixel Shader |Fragment Programming |\n|HLSL |GLSL |\n|Geometry Shader |Geometry Shader |\n|Hull Shader |Tessellation control shader |\n|Domain Shader |Tessellation Evaluation Shader |\n※ DirectX10부터는 어셈블리는 지원안됨.\n※ HLSL에서 GLSL로 번역하는 프로그램이 있기 때문에 GLSL을 따로 배울 필요는 없음.\n\n!!! DirectX ver.\n|!Direct3D |!Shader Model |!Note |\n|8.0 |1.0-1.3 |1.2, 1.3 for NVIDIA |\n|8.1 |1.4(PS)/1.1(VS) |1.4 for ATI |\n|9.0 |2.0 | |\n|9.0c |3.0 | |\n|10.0 |4.0 |Added Geometry Shaders |\n|10.1 |4.1 | |\n|11.0 |5.0 |Added Domain&Hull Shaders |\n\n#. DirectX 9.0 (2002년 12월 19일 발표)\n-. 기존 8.x버전부터 도입된 셰이더 언어의 난이도를 낮추기 위해 고수준 셰이더 언어(HLSL)를 지원하기 시작했고, 셰이더 모델 2.0으로 업그레이드됨에 따라 동시 명령어 갯수가 최대 128개로 확장\n-. 부동소수점 텍스처 포맷 지원, 다중 렌더 타겟(MRT) 지원, 다중 요소 텍스처 지원, 스텐실 버퍼 지원, 지오메트리 인스턴싱 적용, 부동소수점 GPGPU의 부분적인 지원.\n\n|!DirectX |!OpenGL |!GLSL Version |\n| |2.0 |1.10.59 |\n|DirectX 9 |OpenGL 2.1 |1.20.8 |\n|DirectX 10 |OpenGL 3.0 |1.30.10 |\n| |3.1 |1.40.08 |\n| |3.2 |1.50.11 |\n| |3.3 |3.30.6 |\n|DirectX 11 |OpenGL 4.0 |4.00.9 |\n| |4.1 |4.10.6 |\n| |4.2 |4.20.6 |\n| |4.3 |4.30.6 |\n\n\n!!! Effect\n이펙트는 쉐이더(버텍스, 픽셀, 텍스처 등)와 파이프라인이 버텍스와 픽셀 데이터를 사용하는 방법을 제어하는 파이프라인 스테이트의 결합으로, 어셈블리 언어 이펙트와 HLSL 이펙트가 있다.\n/ 스테이트(state)란 단어가 자주 사용되는데, 이는 렌더링 조건을 저장할 필요가 있는 파이프라인의 모든 정보를 포함하며, 파이프라인의 거의 모든 기능을 포함한다.\n\n* Asm 쉐이더\n* HLSL 쉐이더 (High Level Shader Language ; Microsoft에서 개발한 고수준 shader 언어)\n** C와 유사한 함수들을 사용하여 쉐이더를 개발하도록 지원하고, 유사한 것으로 OpenGL 의 GLSL 이 있고, NVidia 의 Cg 의 문법과 거의 흡사.\n** 버텍스 및 픽셀 쉐이더 그리고 이펙트까지 만들고 사용할 수 있다.\n** HLSL은 함수, 식, 문장, 표준 데이터 타입, 사용자 정의 데이터 타입, 전처리기 지시문과 같이 많은 표준적인 언어 기능을 제공.\n\n!!! Overview of graphics boards and Shader Versions\n|!Board |!Vertex Shader |!Pixel Shader |!Remarks |\n|ATI 9000 |1.1 |1.4 | |\n|ATI Radeon 9500 Pro |2.0 |2.0 | |\n|ATI Radeon 9700 |2.0 |2.0 | |\n|ATI Radeon 9700 Pro |2.0 |2.0 | |\n|ATI Radeon 9800 PRO |2.0 |2.0 | |\n|ATI Radeon X800 |2.0 |2.0 | |\n|Nvidia Riva128/TNT2/GF 256/GF2 GTS |- |- | |\n|Nvidia GF3 |1.0 |1.1 | |\n|Nvidia GeForce4 Ti 4600 |1.1 |1.3 |DX8 |\n|Nvidia GeForce FX |2.0 / vs_2_a |2.0+ / ps_2_a | |\n|Nvidia GeForce 6800 |3.0 |3.0 | |\n|Intel Integrated Graphics | | |DX7 |\n|DirectX9 REF Software Driver |3.0 |3.0 | |\n\n\n참고서적\n&#8226; Microsoft DirectX9 Programmable Graphics Pipeline(정보문화사, 2004)\n<br>
@@color(#04f): ▣ Spec @@ specification (보통 ~s) 설계 명세서, 시방서\n\n@@color(#04f): ▣ swap file(스왑 파일): @@ 메모리의 보조 역할을 하는 하드 디스크 내의 파일.\n&nbsp; &nbsp; 현재 필요한 리소스가 메모리 상에 없을 경우 스왑 파일로부터 찾아서 메모리에 올리며, 메모리가 부족할 경우 당장 필요하지 않은 리소스를 메모리로부터 해제한다.\n\n\n
@@color(#04f): ROPs @@ = Raster래스터 Operations오퍼레이션 Pipelines파이프라인\n = Render랜더 Output아웃풋 Pipelines파이프라인 \n = Render랜더 Output아웃풋 Units유닛\n\n@@color(#04f): ▣ RDP @@ (Remote Desktop Protocol)는 @ 2015-01-07 @\nMicrosoft에서 개발한 원격 데스크톱 프로토콜이다.\nRDP를 이용해서 외부에서 PC를 제어해서 문서작성이나 웹서핑 등 비교적 간단한 작업은 원활히 이용 가능하지만\n게임이나 동영상 노래재생 등 멀티미디어 부분에 있어서는 이용이 어렵다.\n\n@@color(#04f): ▣ RPG @@ 롤플레잉 게임(Role-Playing Game) @ 2010-03-25 @\n예전에는 종이와 주사위를 가지고 즐겨던 판타지 게임을 가리켰고, 나중에는 그런 게임의 관습을 따르는 컴퓨터 게임 장르를 가리키는 용어로 바뀌었다. ULTIMA나 WIZARD 시리즈가 좋은 예다. 혹은 로켓 추진 수류탄(rocket-propelled grenade)의 약어로도 사용된다.\n\n@@color(#04f): ▣ RTS @@ 실시간 전략 게임(Real-Time Stategy) @ 2010-03-25 @\n끊임 없이 진행되는 액션을 통해 벌어지는 대규모 군사 전투를 묘사하는 게임 장르이며 턴 방식(turn-based) 게임과 대비된다. Westwood의 DUNE II가 초기 작품이다.\n
@@color(#04f): ▣ 타임 박싱 @@(Time Boxing)은\n 작업을 끝내는 기간으로써, 종료일은 고정되어 바뀌지 않는다. 팀이 종료일을 초과하면, 작업은 실패한 것으로 간주하거나, 취소 혹은 일정을 재조정한다.\n\n@@color(#04f): ▣ 터치 제너레이션 @@(Touch! Generations)은\n콘솔 게임의 정의를 확대시킨 닌텐도의 소프트웨어 라인업을 일컫는 용어다.\n강아지를 키우고, 뇌를 단련하고, 영어를 배우고, 요리를 만들고, 본격적인 피트니스나 악기 연주를 즐기는 등 지금까지 게임과는 무관하다고 여겨졌던 테마를 닌텐도 DS와 위를 통해 게임의 형태로 하나하나 실현시킨 것을 말한다.\n\n@@color(#04f): ▣ 테이스테셔널 @@(Tastessional : TASTE + professional)은 &nbsp; &nbsp; @ 2016-01-29 @\n취향이 전문성이 된 사람들을 일컫는다. 취향에 대한 탐닉이야 말로 아마추어를 특별한 전문가로 만들기도 한다. 이제 그들을 테이스테셔널이라 부르기로 하겠다. 아니, 뭘로 부르건 그건 중요치 않다. 중요한 건 취향이 깊어지면 특별한 전문성이 되고, 그 전문성을 세상이 인정하고 있다는 것이다.\n\n@@color(#04f): ▣ 텍스처 @@(texture) &nbsp; &nbsp; @ 2010-03-25 @\n폴리곤 모델에 색상과 셈세함을 더하기 위해 덧씌워지는 2차원 그래픽 이미지. 캐릭터 모델에 적용될 때는 종증 스킨(skin)이라고 불린다.\n\n@@color(#04f): ▣ 턴 방식 @@(turn-based) &nbsp; &nbsp; @ 2010-03-25 @\n특정한 조건이 만족될 때(예를 들어 모든 플레이어가 자신의 캐릭터를 옮겨놓았을 때) 다음의 분리된 라운드로 넘어가는 방식.\n\n@@color(#04f): ▣ 팀빌딩 @@(team building)이란\n집단이 과제를 달성하는 방식을 개선하도록 도움을 주고 집단구성원들이 대인기술과 문제해결기술을 강화하도록 도움을 주는 광범위한 계획적 활동이다(Cummings & Worley, 2001). \n&nbsp; &nbsp; 팀빌딩의 목적은 응집성, 상호협력 및 조직과의 일체감을 높임으로써 팀의 효과성을 높이는데 있다. 팀빌딩은 조직의 영구적이거나 일시적인 집단 또는 팀에서 팀워크와 과제달성을 개선하기 위한 효과적인 접근이 되고 있다. 팀빌딩을 통해 문제해결집단은 구성원이 가진 자원과 기여를 최대로 활용할 수 있으며, 어떤 구체적인 문제들을 극복할 수 있게 된다. \n&nbsp; &nbsp; 팀빌딩은 단독으로 사용할 수도 있지만, 종업원 참여, 직무설계, 구조개편 등과 같은 다른 조직개발 개입기법들의 효과를 높이기 위해 사용할 수도 있다. 팀빌딩을 통해 효과적인 변화 프로그램을 설계하는데 도움이 되며, 조직구성원들이 이러한 변화 프로그램들을 수용하고 실행하도록 보장해준다. \n
@@color(#04f): ▣ PIE 원칙 @@ (Program Intently and Expressively)\n작성하는 코드는 의도를 명확히 전달하고, 반드시 의미가 있어야 한다. 이렇게 하면, 읽기 쉽고 이해하기 쉬운 코드가 될 것이다. 코드가 혼란스럽지 않기 때문에, 잠재적인 에러도 피할 것이다. 의도적이고, 의미 있게 프로그램 하라.\n\n@@color(#04f): ▣ PB 브랜드 @@ (유통업체브랜드 Private Brand 또는 PL, Private Label)란 &nbsp; &nbsp; &nbsp; &nbsp; @ 2016-10-23 @\n유통업체가 직접 개발 관리하는 브랜드로서 브랜드 소유권을 유통업체가 갖는 의미가 있다. 전통적으로 브랜드(상품)는 제조업체가 개발하여 생산하면, 유통업체는 이를 판매하는 방식이었으나 PB는 유통업체가 상품에 대한 생산과 판매를 통합, 관리하는 것을 뜻한다.\n유럽은 전체적으로 약 40% 수준인데, 영국의 테스코(Tesco) 매장은 PB 구성이 최소 50%이며, 미국은 이보다 적은 22% 수준이다. 한국은 최근들어 20~25% 수준인데, 대형점포를 중심으로 더 늘어날 추세이다.\n특별히 의류업체에서 PB는 절대 강자이다. 스페인의 자라, 스웨던의 H&M, 일본의 유니클로 등은 SPA(Specialty Store Retailer of Private Label Apparel)라 블리는데, SPA란 상품의 기획, 생산(자체 또는 아웃소싱), 판매 등을 한 회사에서 모두 담당하고, 생산된 의류를 그 회사(유통회사)의 자체브랜드를 붙여 판매하는 소매점을 말한다. 이는 좋은 품질의 의류를 저렴한 가격에 공급할 수 있도록 중간상 단계를 없에 제조업과 유통업의 통합체를 의미한다.\n최소의 PB브랜드라 할 수 있는 '피코크(Peacock)'는 2023년까지 상품수 1,500개를 목표로 하는데 그전에 목표를 달성할 기세로 수가 늘어나고 있다.\n\n+++[#. 가격과 품질에 따라 4가지로 PB 구분 ]\nPB는 NB(Natioal Brand, 제조업체 브랜드)와의 비교에 있어 가격과 품질 격차에 따라 4가지로 구분된다.\n<html> <LEFT>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/shinbo_1610_35.jpg" width=640>\n</LEFT> </html>\n&nbsp; &nbsp; 첫째, 제네릭스(Generics)는 가격과 품질 면에서 모두 NB보다 뒤떨어지는 상품이다. 보통은 특정 브랜드가 없는 경우에 제네릭스라고 한다. 이는 브랜드 마케팅비용이 발생하지 않으므로 대체로 가격을 매우 낮게 매긴다. 과거 신선식품점에서는 채소, 과일 등은 브랜드가 없다고 생각하여 제네릭스 판매를 하지 하였으나, 오늘날에는 신선식품재료의 경우에도 친환경 표시나 유기농임을 강조하는 특정 브랜드를 붙이는 경향이 늘고 있다.\n&nbsp; &nbsp; 둘째, 모방 PB상품(Copycat brand)은 품질은 조금 떨어지는 반면 가격이 20~30% 할인된 PB이다. 많은 유통업체들의 PB상품들이 이어 해당된다.\n&nbsp; &nbsp; 셋째, 프리미엄급 PB상품(Premium lite brand)인데 이는 품질은 더 좋으나 가격이 같은 상품을 말한다. 브랜드 인지도가 낮기 때문에 NB 상품의 동일가격대와 비교하면 해당 PB 상품이 더 나은 품질이라고 소비자가 인지할 수 있어야 성공할 것이다.\n&nbsp; &nbsp; 마지막 네 번째는 프리미엄 PB상품(Premium brand)으로서 고품질이면서도 가격이 더 비싼 상품을 말한다. 대표적으로는 프레지던트 초이스(President Choice), 테스코 파이니스트(Tesco Finest) 등이다. 이는 소비자의 품질 자체에 대한 중요도 인식수준이 높거나 유통업체에 대한 충성도가 높은 경우에 성공한다.\n===\n\n&nbsp; #. 최신 트랜드를 창조하는 PB상품\n&nbsp; #. 유통업체엔 기회인 반면 제조업체엔 위기\n\n@@color(#04f): ▣ POP3 @@ (Post Office Protocol 3) &nbsp; &nbsp; &nbsp; &nbsp; @ 2015-06-18 @\n메일프로그램을 이용해 메일을 사용 가능하도록 하는 것으로 여러 곳의 메일을 한 곳에서 확인할 수 있는 통신규약(프로토콜).\n사용자(또는 전자우편 수신용 클라이언트 프로그램)는 주기적으로 서버에 있는 자신의 메일 수신함을 점검하고, 만약 수신된 메일이 있으면 클라이언트 쪽으로 다운로드 한다. \n\nPOP3는 '보관하고 전달하는' 서비스라고 생각할 수 있으며, IMAP은 원격지 파일서버라고 생각할 수 있다. \n\nPOP과 IMAP은 둘 모두 전자우편을 받는 일을 담당하므로, 인터넷을 통해 전자우편을 전달하는 프로토콜인 SMTP와 혼동해서는 안된다. 송신자가 SMTP를 이용해서 메일을 보내면, 상대방 메일서버에 있는 메일처리기가 수신자를 대신해서 그것을 수신한다. 그리고 난 뒤 그 메일을 POP이나 IMAP을 이용하여 수신자가 읽게 된다.\n\n<br>
@@color(#04f): ▣ 마샬링 @@(Marshalling)은 @ 2014-08-19 @\n컴퓨터 프로그래밍에서, 마샬링은 하나 이상의 프로그램 또는 연속되어 있지 않은 저장 공간으로부터 데이터를 모은 다음, 데이터들을 메시지 버퍼에 집어넣고, 특정 수신기나 프로그래밍 인터페이스에 맞도록 그 데이터를 조직화하거나, 미리 정해진 다른 형식으로 변환하는 과정을 말한다. \n\n마샬링은 대체로, 어떤 한 언어로 작성된 프로그램의 출력 매개변수들을, 다른 언어로 작성된 프로그램의 입력으로 전달해야 하는 경우에 필요하다. \n\n@@color(#04f): ▣ 마일스톤 @@(Milestone)은\n자연석에 목적지까지의 남은 거리와 방 향을 새겨 놓은 표지석\n즉, 이정표를 뜻 하기도 하며, 또한 인생, 역사 등의 중대 시점, 획기적인 사건을 뜻하기도 한다.\n\n@@color(#04f): ▣ 말 @@ [명사] \n사람의 생각이나 느낌 따위를 표현하고 전달하는 데 쓰는 음성 기호. 곧 사람의 생각이나 느낌 따위를 목구멍을 통하여 조직적으로 나타내는 소리를 가리킨다. \n\n@@color(#04f): ▣ 매시업 @@ (Mashup)\n매시업은 1960년대부터 음악계에서 쓰이던 용어, 다른 가수의 히트곡 여러 개에서 일정 구절을 따서 이를 섞어 새로운 노래를 만든다는 의미이다. 최근엔 음악뿐만 아니라 동영상, 사전, 컴퓨터 프로그램, 애플리케이션 등의 창조물을 섞어 완전히 새로운 창조물을 만들어낸다는 뜻으로 쓰인다.\n\n@@color(#04f): ▣ 모두발언 @@ 은 책으로 말한다면 머릿말과 같다.\n모두발언은 토론회에서 자주 들을 수 있는데, 본 토론에 들어가기 전에 참여한 토론자들이 순서에 따라 돌아가면서 주제에 대한 자기의 주의, 주장을 요점정리 식으로 말하는 것을 뜻한다.\n\n@@color(#04f): ▣ 모션 캡처 @@ (motion capture)\n실제생명체(보통은 사람)로부터 애니메이션 정보를 얻어내는 기법.\n\n@@color(#04f): ▣ 모티파이슨 @@ (Monty Python)\n1970년대 초반까지 큰 인기를 끌었던 영국의 코미디 <Month Python's Flying Gircus>에 단골로 출연했고, 그외 다수의 극장용 영화를 만든 코미디 창작 집단\n\n@@color(#04f): ▣ 미켈란젤로 동기 @@\n미켈란젤로는 1508년 교황 율리우스 2세의 명령에 따라 그 넓이가 600평방미터나 되는 시스티나 성당에 불후의 명작인 천지창조를 그린 르네상스를 대표하는 화가로 자신의 작품에 대한 굉장한 자부심과 함께 자신의 일을 즐겼던 사람입니다. 그는 그 작업을 위해 사람들의 성당출입을 금하고 4년 동안이나 성당에 틀어 박혀서 오직 그림을 그리는 일에 전념했습니다. \n\n창의적이고 진취적인 사람들은 돈이나 명예를 얻기 위해서 일을 하는 것이 아니라 단지 일이 좋아서 그 일을 즐거움으로 한다고 합니다. 이것이 바로 우리 안에 존재하는 내적동기입니다. 누군가가 자신을 알아주기를 바라는 마음없이 자기 자신만은 너무도 잘 알고 있기에 온 힘을 기울여 최선을 다하는 내적동기를 '미켈란젤로 동기'라고 부릅니다.
| 기호 | 설명 | 기타 |\n| MX | 보급형이라는데 중점적인 의미를 두고있습니다. (보급형 그래픽카드) | 대표모델 : Geforce MX4000, Geforce2 MX400, Geforce4 MX440 |\n| Ti | 2, 3, 4 시리즈중 고급형 모델 입니다. | 대표모델 : Geforce4 Ti4200, Geforce4 Ti4400, Geforce4 Ti4600 |\n| FX | Geforce5 시리즈 모델의 단독적인 이름입니다. | |\n| LE | Low Edition), 보급형 모델로 만들기위해 클럭을 낮추거나 혹은 메모리의 비트수를 내리는 경우이다. | 대표모델 : Geforce FX5700LE, Geforce 6600LE, Geforce 6800LE |\n| XT | (eXtenTion Edition), 값비싼 그래픽카드의 값을 낮춰 많은 이들이 재빠른 3D게임을 할 수 있도록 한다는 의미입니다.LE와 비슷한 개념입니다. | 대표모델 : Geforce FX5900XT |\n| GE | (Gamer(Great) Edition), 게이머들에게 좀더 좋은 성능의 그래픽카드를 주기 위하여 오버클럭을 하여서 상위모델과 비슷한 성능을 내는 그래픽카드에 업체에서 붙여준 것이다. nVIDIA의 정식모델이 아니다. | 대표모델 : Geforce 6600GE |\n| GS | GS가 왜 없지 GT보다 떨어짐... | |\n| GT | (GreaT edition), 중급이상 성능의 그래픽카드에 붙는 이름입니다. | 대표모델 : Geforce 6600GT, Geforce 7600GT, Geforce 8600GT |\n| GTS | (GreaT Stream) 중상급의 성능을 냅니다. | |\n| GTX | (Grand eXtreme Edition), GT보다 상위개념, Extreme이 과격한, 극도의 뜻을 내포하고 있음으로 이는 성능이 높은 그래픽카드에 쓰인다. | 대표모델 : Geforce 7800GTX |\n| Ultra | (Ultra edition), 몇몇 시리즈 라인업 중 최상급의 그래픽카드에 쓰인다. | |\n
@@color(#04f): ▣ 다샹(打赏) @@ 중국 온라인 팁문화 &nbsp; &nbsp; (신용사회 2016.11.) &nbsp; &nbsp; @ 2017-01-09 @\n중국에서 온라인으로 팁을 주는 것을 중국어로 'da shang(打赏)', 또는 'shang(赏)'이라고 부른다. 다샹은 과거 광대들이 거리에서 길거리 공연을 하며 입장료 대신 관중들이 자발적으로 주는 팁을 받았던 것처럼, 본래 고대 중국에서는 윗사람이 아랫사람에게 수여하는 보상금의 의미로 쓰였다. 현대 다샹의 의미는 온라인에 새롭게 등장한 일종의 비강제적 지불 방식으로, 서비스 또는 온라인에 등록된 글, 사진, 영상 중 이용자가 만족을 느낀 창작 콘텐츠에 대해 원작자에 대한 일종의 장려금(팁)으로 감사를 표시하는 것으로 정의 내려졌다.\n이러한 새로운 추세에 따라, 웨이보(2014) 등을 출발점으로 웨이신(2015), 알리페이(2015), 디디추싱(2016) 등 대부분의 중국 유명 온라인 플랫폼들이 다샹 기능을 추가하고 있다.\n다샹은 다양한 산업과 맞물려 주 활용 영역을 넓히고 있다. 다샹 + 언론, 문학 관련 플랫폼, 댜상 + 엔터테이먼트 산업, 다샹 + 서비스산업이다.\n\n@@color(#04f): ▣ 대시보드 @@(dashboard)/ 전산실관리솔루션\nIT대시보드는 기업 IT자원의 안정적인 운영을 위해 시스템 운영현황을 한눈에 파악하여 장애예측을 통한 예방 및 진단, 원인분석을 효과적으로 수행할 수 있도록 하는 솔루션.\n\nIT대시보드는 복잡하고 다양한 IT자원 현황을 운영자관점에서 직관적이고 통합적으로 파악하기 위해, 다이나믹한 화면으로 표현되어야 하며, 실시간 데이터관리를 위한 분산처리환경이 필요합니다. 또한 운영자가 원하는 정보를 언제든지 제공할 수 있도록 손쉬운 화면생성기능과 함께 추가적인 확장이 용이해야 한다.\n\n@@color(#04f): ▣ 대화 @@(對話) [명사] \n마주 대하여 이야기를 주고받음. 또는 그 이야기.\n\n@@color(#04f): ▣ 데쓰매치 @@ (deathmatch) &nbsp; &nbsp; @ 2010-03-25 @\n1인칭 슈팅 게임의 플레이어 대 플레이어(PvP; Player vs. Player) 모드에서 사용되는 매력적인 신조어; 나중에는 실시간 전략 게임과 같은 다른 장르에까지 폭 넓게 사용됨.\n\n@@color(#04f): ▣ 데이터 @@ (data) &nbsp; &nbsp; @ 2010-03-25 @\n지형 구조나 음성 대화 등의 게임 컨텐트. 그것을 조작하며 표시하는데 사용되는 소프트웨어와 구별되는 개념이다.
@@color(#04f): ▣ ''게임 플레이'' @@ (gameplay) &nbsp; &nbsp; @ 2010-03-25 @\n플레이어가 게임에서 하는 일, 활동, 도전 등을 표현하는 다소 모호한 단어. 이를 지원하는 기술 및 그래픽 작업과 대비된다.\n\n@@color(#04f): ▣ ''공유경제''는 @@ &nbsp; &nbsp; @ 2016-10-31 @\n공유할 수 있는 물품과 서비스를 빌려줌으로써 수익을 내는 경제활동이다. 남는 자원과 자산을, 이를 필요로 하는 타인과 함께 활용하는 공유경제는 다양한 규모와 방식으로 진화하고 있다. 공유경제의 기초는 거래의 통화수단인 신뢰라는 주춧돌이다. 그리고 그 신뢰라는 '사회적 자본'은 과거로부터 축적된 거래이력으로부터 나온다.\n공유경제는 무수히 많은 것들 중 특히 유휴한 인간의 재능과 경험, 공간, 시간, 정보, 물건 등을 각각 또는 융합, 복합화해 목적한 경제를 실천하고 있다. 이러한 것들을 '순열(일정 순서대로 나열하는 일)'로 표시하면 거의 무한대의 사례와 비즈니스모델, 일자리가 파생된다.\n\n&nbsp; &nbsp; ''국내 주요 공유경제 서비스와 공유 품목''\n|브랜드 |거래 및 공유 품목 |홈페이지 |\n|쏘시오 |생활 숙 모든 제품 |www.ssocio.com |\n|쏘카 |자동자 |www.socar.kr |\n|모두의 주차장 |주차장 |www.moduparking.com |\n|키플 |아동 의류 |www.kiple.net |\n|스테이즈 |숙박 |www.stayes.com |\n|헬로마켓 |중고거래 |www.hellomarket.com |\n|집밥 |소셜다이닝 |www.zipbob.net |\n|스페이스쉐어 |공간 |spaceshare.kr |\n|짐카 |이사 |zimcar.kr |\n|열린 옷장 |정장 |www.theopencloset.net |\n|코자자 |숙박 |www.kozaza.com |\n|오픈컬리지 |지식/ 경험 |www.opencollege.kr |\n\n@@color(#04f): ▣ ''과거불 (過去佛)'' @@ (gameplay) &nbsp; &nbsp; @ 2015-06-11 @\n흔히 "석존"이전에 나타났다고 하는 6명의 부처님을 가리키며 석존을 포함하여 과거 7불 이라고 한다.\n\n비바시부처님(毘婆尸佛) ; 과거 91겁 전 사람의 수명이 8만4천세 였을때 출현 하셨다.\n&nbsp; &nbsp; &nbsp; &nbsp; (3회의 설법으로 24만8천인을 제도 하셨다 한다.)\n시기부처님(尸棄佛) ; 과거 31겁 전 사람들의 수명이 7만세때 출현하시어 3회에 걸처 설법하시고 \n&nbsp; &nbsp; &nbsp; &nbsp; (25만의 중생을 제도 하셨다 한다.)\n비사부부처님(毘舍浮佛) ; 역시 과거31겁 전에 출현 하시어.\n&nbsp; &nbsp; &nbsp; &nbsp; (2회 설법으로 13만인을 제도 하시었다 한다.) \n구류손부처님(拘留孫佛) ; 현재의 현겁(現劫) 중에 출현하시어 .\n&nbsp; &nbsp; &nbsp; &nbsp; (1회설법에.4만의 비구를 교화 하셨다함.당시의수명은4만세라함).\n구나함모니부처님(拘那含牟尼佛) ; 현겁중 사람의수명이 3만세때. 출현 하시어.\n&nbsp; &nbsp; &nbsp; &nbsp; (1회 설법에 3만의 비구를 제도 하셨다함.)\n가섭부처님(迦葉佛) ; 현겁중 사람의수명이 2만세때 출현 하시어.\n&nbsp; &nbsp; &nbsp; &nbsp; (1회 설법으로 2만명의 제자를 제도 하셨다함.)\n석가모니부처님(釋迦牟尼佛)\n\n이 과거불에 대한 구체적인 기사( 출신. 부모. 자식. 제자..성도한 나무의 이름 등)은 "장아함경의벽두인[대본경]에 자세히 소개 되어 있다.\n\n@@color(#04f): ▣ ''기술'' @@ (technology) &nbsp; &nbsp; @ 2011-06-28 @\n사람들이 ''노동과 원자재를 결합해 상품과 서비스를 만들어내는 방법을 결정하는 모든 요인들''을 지칭한다. \n기술에는 청사진이나 제조 비법이 아니라 부패의 수준, 경영진이 직원을 대하는 태도, 투자자에 대한 법률적 보호, 경쟁 환경에 대한 문화의 영향력, 근로자의 창의성에 영향을 미치는 교육적 전통 등 수많은 요인들이 포함된다.\n\n@@color(#04f): ▣ ''기술마케팅'' @@ 은 &nbsp; &nbsp; @ 2016-06-17 @\n핵심적인 기술개발은 완성되었는데 고객의 구매는 발생되지 않는 격차를 이해하고 이를 해결할 수 있는 과제를 실현하기 위한 전략적 활동.\n특히 현재까지의 기술마케팅은 협의의 관점에서 기술적인 개발과 제품 설계작업이 완성된 이후의 단계에서 참여하여 시장에 제품을 출시하는 전략을 수립하는 제한적인 활동이었다면, 현재부터 미래의 바람직한 기술마케팅은 광의의 관점에서 기술개발이 시작되는 첫 단계부터 참여하여 고객들의 수요를 정확하게 반영하는 기술개발이 진행될 수 있도록 기술개발의 방향성과 전략적인 혁신의견을 제시하고 기술개발의 전체적인 과정이 기업의 성과향상에 직접적인 기여를 할 수 있도록 관리히고 과정상의 적절한 위험을 통제하는 범위로 확대될 필요성이 있는 활동이라고 정의할 수 있다.\n\n@@color(#04f): ▣ ''기조발언'' @@ 은 토론에 앞서 자신이 주장할 전체적인 내용에 대해 큰 틀을 제시하는 것으로, \n&nbsp; &nbsp; 예를들면 토론이 찬성/반대의 형태로 나타난다면 기조발언으로 찬성 혹은 반대의 입장을 밝히고 토론시에 내가 왜 찬성을 하는지에 대한 자세한 내용을 말하는 것이다.\n\n
@@color(#04f): ▣ 1인칭 슈팅 게임 @@ (first-person shooter) &nbsp; &nbsp; @ 2010-03-25 @\n플레이어가 적들로 가득 찬 3차원 세계 안을 돌아다니는 유명한 게임 장르. 플레이어는 머리 높이에 장착된 카메라를 통해 세계를 조망하며, 이러한 시야는 사격 조준기로서의 역할도 함께 한다. Id Software의 CASTLE WOLFENSTEIN 3D가 아마도 첫 번째 예가 될 것이다.\n\n@@color(#04f): ▣ 1인칭 스니커 @@ (first-person sneaker) &nbsp; &nbsp; @ 2010-03-25 @\n플레이어가 목표를 달성하는데 있어 전투보다 잠행(stealth)이 보다 중요하게 사용되는 1인칭 시점의 게임을 이른다. Looking Glass Studios의 THIEF 시리즈가 아마도 가장 돋보이는 예가 될 것이다.\n\n@@color(#04f): ▣ 아티팩트 @@ (artifacts)는 의도하지 않게 생기는 부가적인 효과. \n&nbsp; &nbsp; 단어 자체는 중립적이지만 결과적으로 부산물이 생겨 부정적인 효과를 가져오는 게 일반적이다. 압축이 심한 JPG 이미지에 생기는 지저분한 픽셀이 대표적인 예이다.\n\n@@color(#04f): ▣ 아임스타즈 @@ (IMStars.or.kr) &nbsp; &nbsp; @ 2016-10-31 @\nIdea Made Stars(아이디어가 스타를 만든다)의 줄임말로 우수 중소기업 제품이 시장진출을 통해 스타상품으로 거듭나도록 지원하는 사업이다. 유통 MD가 좋은 상품을 발굴하기 위해 우수 중소기업 제품을 쉽게 검색할 수 있게 하고 개별기업 상담도 빠르게 진행해 중소기업과 대형 유통업체를 효율적으로 연결해준다.\n+++[아이스타즈는 중소기업 유통지원 포털사이트 ]\n중소기업은 자사 상품을 사이트에 직접 등록할 수 있으며, 선별과정을 통해 '표준화 DB'제품으로 선정되면 상표개발, 온라인 상세 페이지 및 홍보 동영상 제작 등 홍보ㆍ마케팅 지원은 물론 판매처까지 확보할 수 있다.\n<html> <LEFT>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/shinbo_1609_67.jpg" width=640>\n</LEFT> </html>\n===\n\n\n@@color(#04f): ▣ 알트 입력법 @@ (Alt code) &nbsp; &nbsp; @ 2015-09-22 @\n알트 키와 숫자키패드를 이용하여 문자(특히 특수문자)를 입력하는 방식. 키보드에 할당되지 않은 문자를 입력하는 데 유용하며, 종종 유일한 방법이 된다.\n&nbsp; &nbsp; / 알트 키를 누른 채로, 입력하려는 문자에 해당하는 값을 누른 다음, 알트 키에서 손을 떼면 된다. \n\n@@color(#04f): ▣ 어뷰징 @@ (abusing) &nbsp; &nbsp; @ 2014-12-18 @\nabuse의 현재 진행형으로 사전적인 의미로는 오용/남용/악용 을 의미한다.\n대체적으로 게임상에서 어뷰징은 개발자의 의도대로 진행하지 않고 짜고치는 행위를 뜻한다.\n\n인터넷 포털 사이트에서 언론사가 의도적으로 검색을 통한 클릭수를 늘리기 위해 동일한 제목의 기사를 지속적으로 전송하거나 인기검색어를 올리기 위해 클릭수를 조작하는 것 등이 이에 해당된다.\n\n@@color(#04f): ▣ 엔진 @@ (engine) &nbsp; &nbsp; @ 2010-03-25 @\n게임 내 환경을 표시하고 기본적인 기능을 규정하는 핵심 시스템; 데이터와 구별되는 개념.\n\n@@color(#04f): ▣ 온디맨드 경제 @@ (On-Demand Economy) &nbsp; &nbsp; @ 2016-10-31 @\n모바일과 온라인 시장에서 소비자의 수요, 즉 주문(Demand)이 공급을 결정한다고 하여 온디맨드 경제라고 불린다. IT의 비약적인 발전과 생활방식의 변화가 불러온 이 시스템은 하나의 경제라고 불릴 만큼 우리 생활에 깊숙이 침투하고 있다. 가파르게 성장한 음식 주문 대행업체를 비롯해 의료, 법률, 금융에 이르기까지, 그 분야도 방대하다. 이미 확보된 재화를 소비자에게 공급하는 공유경제와 혼용되고 있으나 온디맨드 경제의 경우 ''소비자 소요의 맞춤형 서비스가 제공''된다. 소비자가 가격결정의 주도권까지 갖는다는 점에서 큰 차이가 있다.\n\n@@color(#04f): ▣ 와르넷 @@ (warnet) &nbsp; &nbsp; @ 2010-07-14 @\n인도네시아에 있는 일종의 피시방. 가게를 의미하는 와룽(warung)과 인터넷(internet)의 합성어.\n\n@@color(#04f): ▣ 왕홍 @@ (網紅) &nbsp; &nbsp; @ 2017-01-25 @\n인터넷을 뜻하는 왕뤄(網絡)와 스타를 뜻하는 홍론(紅人)의 조합어인 '왕뤄홍런(網絡紅人, 인터넷 스타)'의 줄임말로 이들은 인터넷 플랫폼을 기반으로 활동하며 특정 분야의 전문가로 성장해 중국 온라인 시장의 트랜드를 주도하고 있다.\n\n@@color(#04f): ▣ 외래어 표기법 > 규정보기 @@ (국립국어원) &nbsp; &nbsp; @ 2017-09-01 @\n제1항 ; 외래어는 국어의 현용 24 자모만으로 적는다.\n제2항 ; 외래어의 1 음운은 원칙적으로 1 기호로 적는다.\n제3항 ; 받침에는 ‘ㄱ, ㄴ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ’만을 쓴다.\n제4항 ; 파열음 표기에는 된소리를 쓰지 않는 것을 원칙으로 한다.\n제5항 ; 이미 굳어진 외래어는 관용으로 존중하되, 그 범위와 용례는 따로 정한다.\n\n@@color(#04f): ▣ 유비쿼터스 @@ (Ubiquitous)란 @ 2010-12-06 @\n'언제 어디에나 존재한다'는 뜻의 라틴어로, 사용자가 컴퓨터나 네트워크를 의식하지 않고 장소에 상관없이 자유롭게 네트워크에 접속할 수 있는 환경을 말한다.\n\n@@color(#04f): ▣ 익스플로잇 @@ (exploit) &nbsp; &nbsp; @ 2010-03-25 @\n(특히 온라인 게임에서) 플레이어가 불공평한 이익이나 보상을 얻을 수 있도록 방치된 게임 내부의 결점.\n\n@@color(#04f): ▣ 인간개발지수 @@ \n유엔 국제연합개발계획이 매년 세계 각국의 문맹률, 평균수명, 1인당 실질 국민소득 등 인간의 삶과 관련된 여러 가지 지표를 조사해 인간개발 성취 정도를 평가하는 지수를 말한다. 인간의 행복이나 발전 정도는 소득 수준과 비례하지 않고, 소득을 얼마나 현명하게 사용하느냐에 달려 있음을 보여주는 지수다.\n\n
@@color(#04f): ▣ 패치 @@ (patch) &nbsp; &nbsp; @ 2010-03-25 @\n이미 출시된 제품의 문제점을 수정하는 소프트웨어. 버그를 수정하고 빠진 기능을 추가해서 내놓곤 한다.\n\n@@color(#04f): ▣ 페트롤프롬 에어 @@ (Petrol from Air) &nbsp; &nbsp; @ 2013.08. Vol.371/ 2013-09-05 @\n2012년 10월 영국 AFS Air Fuel Synthesis 사\n이산화탄소와 수증기를 석유로 변환하는 이 기술은 공기에 수산화나트륨을 섞어 생성된 탄산나트륨에 전기분해를 가해 순수한 이산화탄소를 추출하고, 이를 전기분해한 물에서 나오는 탄산수소와 반응시켜 석유를 생산해낸다. 이렇게 생산된 석유는 상업용 석유와 같은 성질로 그 어떤 연료탱크에 넣어도 작동하며 가솔린, 디젤, 항공유 등으로 재가공할 수도 있다.\n\n@@color(#04f): ▣ 포스트모르템 @@(Postmortem) &nbsp; &nbsp; @ 2009-11-07 @\n원래 '부검'(負劍)이란 뜻으로, 시체를 해부하여 죽은 원인을 밝혀내는 일을 의미한다. \n게임 개발과 관련 해서, 포스트모르템이란 출시된 게임에서 제작 과장에서 성공적이었던 요소와 문제를 야기했던 요소를 낱낱이 분석하는 것을 말한다. 예로, 게임 디벨로퍼(Game Developers) 잡지의 포스트모르템이라는 제목의 연재 기사들이 있다.\n\n@@color(#04f): ▣ 포지티브섬 게임 @@(Positive-sum game)\n\n@@color(#04f): ▣ 폭포수 개발 모델 @@(waterfall development model) &nbsp; &nbsp; @ 2010-03-25 @\n먼저 요구되는 기능을 정리하고, 그것들을 모듈화된(modular) 하위 시스템으로 나눈 다음, 각각의 모듈을 만들고, 전체적으로 통합하며, 끝으로 완성된 시스템이 요구 조건을 모두 만족시키는지 확인한 후 출시하도록 하는 소프트웨어 제작 과정을 말한다. 일반적으로 규모가 크고 잘 알려진 시스템에 대해서는 적합하지만, 높은 효율성과 기능 혁신을 필요로 하는 시스템에 대해서는 덜 효율적이다.\n\n@@color(#04f): ▣ 프레넬 반사@@(Fresnel Reflection)란 &nbsp; &nbsp; @ 2016-10-14 @\n프랑스의 오귀스텡. 장. 프레넬이 제창 한 것으로\n빛이 서로 다른 굴절률을 갖는 매질의 경계면을 통과할 때의 반사로 빛이 매질과 부딪힐 때 그 각도에 따라 굴절, 투과가 다르게 나타하는 현상이다.\n\n평평한 곳에 빛이 투과 된다고 할때 직각에 가까운 각도로 빛이 쏘아지면 대부분이 투과되는 물체를 빛이 꿰뚫지만 평행에 가까운 속도고 빛이 쏘아지면 수면에서 반사해 버려 빛이 투과되는 물체 내에 대부분 들어오지 않는다. \n그리고 물체의 투명도나 빛의 강도 같은 파라미터에 따라 빛이 얼마나 투과체의 표면을 반사하고, 얼마나 투과체의 내부로 들어갈까를 계산한 식을 만들어 냈다.\n\n@@color(#04f): ▣ 프로토타입 @@(Prototype)\n프로토타입의 원래 뜻은 원형, 초기 형태 등을 가리키는 것이지만, 흔히 공학에서 말하는 프로토타입이란 어떤 구조물이나 장비에 대하여, 형상이나 설계, 적합성 또는 성능 등을 평가하기 위해 만든 실물 크기의 모형을 말한다. \n\n@@color(#04f): ▣ 핀테크 @@(FinTech)란\n금융을 뜻하는 파이낸스(Finance)와 기술을 뜻하는 테크놀로지(Technology)의 합성어로 스마트 기술을 활용한 새로운 금융기술을 의미한다.\n모바일결제, 모바일송금, 온라인 개인재정관리, 개인간대출, 크아우드펀딩 등 금융 서비스의 효율성을 제고하는 혁식적인 기술 또는 기술적인 과정을 의미한다.\n\n
@@color(#04f): 시험용 게임물 등급 제도 @@ \n* 게임물등급위원회(게임위)가 시행하고 있으며, 2006년 4월 24일 제정된 게임산업진흥법에 따라 국내에서 서비스되는 게임은 개발과정에서 성능, 안정성, 이용자 만족도 등을 평가할 목적으로 테스트를 진행하는 경우 심험용 게임물 심의를 받아야한다.\n* 테스트는 시험용 게임 등급을 받은 후 30일 이내에 진행돼야하며, 인원은 1만명을 넘지 말아야 한다. 만약 1만명 이상의 인원이 테스트에 참여하려면 정식 심의를 받아야 한다. \n
@@color(#04f): ▣ 사원수 @@ (Quaternion) @ 2014-07-30 @\n식(1) \n&nbsp; &nbsp; ''Q = q0 + q1*i + q2*j + q3*k''\n&nbsp; &nbsp; / i, j, k 는 허수이고 q0~q3 는 실수이다. 즉, 허수부 3개와 실수부 1개로 이루어져 있다.\n&nbsp; &nbsp; / 사원수끼리의 연산을 할 때 사용하는 식\n\n기하학적으로, Q가 단위 사원수 일때(Q 의 q0~q3 으로 이루어진 벡터의 길이가 1) 다음과 같이 표현할 수 있다.\n\n식(2)\n&nbsp; &nbsp; ''Q = sin(theta)*U + cos(theta)''\n&nbsp; &nbsp; / U 는 벡터를 의미한다. 무슨 벡터인가 하면 사원수 Q로 어떤 점을 회전 변환 시킬 때 회전 축이 되는 단위벡터 U 를 말한다. theta 는 회전 각으로써 위의 식(2) 대로라면 회전축 U 에 대하여 2*theta 만큼 움직이는 사원수가 된다.\n&nbsp; &nbsp; / 실제 회전축과 회전량을 표현하는 식\n \ni, j, k 가 어떤 3개의 축을 표현하는 기저 벡터라고 생각했을 때 외적의 결과와 같다. \n바로 이런 허수의 법칙들 역시 회전 변환에 대해 기하학적으로 관련이 있으며, 허수부가 하나 존재하는 복소수의 경우엔 어떤 복소수에 허수 i 를 곱할 경우 180도 회전이라는 기하학적인 효과를 낳는다.\n \n정리하자면, 사원수끼리의 곱셈은 해밀턴의 법칙을 사용하여 구현하면 되고,\n허수라는 것은 실제로 존재 하는 것이 아닌 하나의 법칙이기 때문에 사원수끼리의 연산에 사용하면 되며 실제 코드에서의 표현은 허수를 제외한 것만으로도 사원수를 구축할 수 있기 때문에 허수를 제외한 사원수의 길이만으로 표현한다.\n\n@@color(#04f): ▣ 샌드박스 @@(sandbox) @ 2010-03-25 @\n복잡하고 동적인 시뮬레이션을 통해 흥미를 이끌어내는 게임. 미리 정해진 목표난 이야기에 의존하기보다 플레이어의 창의성에 의존하다.\n\n@@color(#04f): ▣ 소닉코드 @@ 는 @ 2017-06-19 @\n스피커와 마이크를 이용한 간단한 근거리 무선통신으로, 비가청 음파를 이용한 데이터 전송기술이다.\n바코드나 QR코드가 비주얼 패턴을 광학 센서로 인식해서 데이터를 전송하듯이 소닉코드는 오디오 패턴을 음향센서(Mic)로 인식하여 데이터를 전송한다. 스피커를 가진 다양한 단말기에 적용이 가능하며 모든 스마트폰을 지원하는 것이 특징이다. 별도의 하드웨어 인프라 구축비용이 들지 않는다.\n\n@@color(#04f): ▣ 소모규 개방경제 @@ (Small Open Economy)는 @ 2011-01-08 @\nOECD가 명명한 것으로서 보통 약자로 SMOPEC라고 표기한다. 즉 OECD는 경제규모가 작아 정책적으로 국제가격, 금리, 소득에 영향을 미칠 수는 없지만 국제무역에 활발하게 참여하는 국가경제를 소규모 개방경제라고 칭한 것이다. \n한편 强小國(Small but Strong Countries)이란 인구 규모는 작지만 소득 수준이 높은 국가를 지칭한다. \n\n@@color(#04f): ▣ 소셜네트워크서비스 @@ (Social Network Service)란 @ 2011-01-23 @\n웹상에서 이용자들이 친구, 선후배, 동료 등 지인과의 인맥 관계를 강화시키고 또 새로운 인맥을 쌓으며 폭넓은 인적네트워크를 형성할 수 있도록 해주는 서비스로 간단히 SNS라고 부르기도 하는데 트위터ㆍ싸이월드ㆍ페이스북 등이 대표적이다.\n\n@@color(#04f): ▣ 스마트폰 @@(Smartphone)은 일반적으로 'PC와 유사한 기능'을 수행할 수 있는 이동전화를 뜻함. \n&nbsp; &nbsp; 일반적으로 자체 설치된 Operating System를 (Symbian OS, iPhone OS, Windows Mobile, Palm Web OS, Linux, Android 등) 통해 일정관리, 이메일 등의 기본적 기능 외에도 PDF나 MS Office 파일 등의 열람이 가능하며, MP3, 사진, 비디오, 인터넷 브라우징 등이 가능한 모바일 기기를 스마트폰이라 칭함. 최근에는 Apple 사의 App Store를 시초로하여 사용자가 원하는 애플리케이션을 직접 선택, 구매하여 설치할 수 있는 기능이 필수적으로 자리잡고 있음\n&nbsp; &nbsp; 출처 ; February 2009 2nd Issue 글로벌 게임산업 Trend(한국산업진흥원)\n\n@@color(#04f): ▣ 스타형(STAR) 휴가 문화 @@\n천편일률적인 휴가에서 벗어나 휴가를 이용하여 업무 외의 개인적인 관심사를 탐구하는 자기개발 Self-development형, 젊은 여성층을 중심으로 휴가를 기회로 외모 변신을 도모하는 변신형 Transformation, 스스로가 목표하는 계획과 일정에 맞춰 혼자 여행하는 나홀로형 Alone, 집에서 편안하게 휴식하면서 가족과 화목을 도모하는 신체적 재충전을 추구하는 방콕형 Rest 휴가.\n\n@@color(#04f): ▣ 슬로우패션 @@ \n패스트패션의 상대적인 개념으로 강조되고 있으며 옷을 덜 사되, 이왕 살 땐 고품질의 옷을 사서 좀 더 오래 길게 입겠다는 것으로, 사실 과거의 패션 소비로 돌아가는 것이다.\n\n@@color(#04f): ▣ 슬로우TV @@ \n슬로우TV의 시초는, 노르웨이 국영방송인 NRK 방송이 2009년 노르웨이 베르겐 철도 개통 100주년을 기념하기 위해 만든 다큐다. 100년 전과 똑같이 7시간 20분이 걸리는 베르겐~오슬로 구간을 달리는 기차 안팎의 모습을 4대의 카메라로 찍어 편집 없이 그대로 방송했다. \n우리도 슬로우TV를 받아들일 때가 되었다. 빠르고 함축적인 콘텐츠는 스마트폰으로 더 잘 소비한다. 더이상 TV로 새롭고 빠른 걸 받아들이는 게 아니다. TV는 집 안에 있는 가장 큰 창이다. 벽에 붙어있는 세상을 보여주는 창인 것이다. 조급한 마음을 내려놓고 창을 통해 세상을 접할 수 있는 여유가 필요해진 건, 스마트폰을 일상적으로 많이 소비하는 시대인 데다가 1, 2인 가구가 늘어나고, 핵가족이 보편화되어서다. \n\n\n&nbsp; &nbsp;
@@color(#04f): ▣ 모아레 @@(Moire)란\n단어는 프랑스인들이 고대 중국에서 수입된 비단 위에 나타나는 물결무늬를 일컬었던 말로, 요즘에는 두 개 이상의 주기적인 물결무늬가 겹쳐져 생기는 간섭무늬(interference fringe)를 지칭하는 단어로 사용된다.\n\n모기장 같은 망사 두 장이 겹쳐있을 때 망사를 이루는 세밀한 직물의 격자간격보다 훨씬 크고 변화가 다양한 얼룩무늬를 볼 수 있다. 또한 머리빗 두 개를 겹쳐서 보면 간격이 빗살보다 넓은 새로운 어두운 그림자를 볼 수 있다. 이렇게 주기적인 무늬가 겹쳐서 원래의 주기보다 큰 무늬를 만드는 현상을 말한다.\n\n1. 모아레 현상은 맥놀이 현상이 시각적으로 발생하는 것으로, 일정한 간격을 갖는 물체 사이에 발생하는 간섭 무늬를 말하며, 차트 위에 무지개색 물결 무늬가 나타나거나 햇빛이 비치는 날 모기장이나 커텐 등이 겹쳐져 있으면 물결무늬가 생기고, 줄무늬 옷을 입고 촬영한 사진이나 일정한 간격의 구조물을 촬영했을 때 무지개 빛이 나타나는 모습에서도 확인할 수 있다. \n\n2. 부적절한 스크린 각도에 의해 인쇄물에서 나타나는 색상의 덩어리지는 현상.\n도트 무늬가 충돌하여 발생하는 파도 모양의 무늬로서 망점 수가 다른 두 개의 방점 화면이 동일한 이미지에 겹쳐질 때 만들어진다.\n예를 들어 스캔한 원본 망점 화면과 이미지의 dpi 망점 수가 다르면 모니터 화면에 모아레 무늬가 생긴다. 이런 문제가 발생하지 않게 하려면 화면 각도와 망점 화면의 망점 수를 정확하게 설정해야 한다.\n\n3. 포토샵 필터 중에서 Blur(픽셀이 가지고 있는 색상 차이를 줄여서 전반적으로 뿌옇게 만들어준다)를 사용해서, \n스캔 받은 이미지에 묻어있는 잡음이나 모아레 현상을 제거할 수 있다.\n
@@color(#04f): ▣ 캡슐화 @@\n관련있는 데이터를 한데 묶어 줍으로써, 데이터를 보다 일괄적으로 관리하는 것\n\n@@color(#04f): ▣ 커뮤니케이션 @@ [명사]\n사람들끼리 서로 생각, 느낌 따위의 정보를 주고받는 일. 말이나 글, 그 밖의 소리, 표정, 몸짓 따위로 이루어진다. ‘의사 전달’, ‘의사소통’으로 순화. \n\n@@color(#04f): ▣ 컷씬 @@ (cut-scene) &nbsp; &nbsp; @ 2010-03-25 @\n동적으로 생성되기보다는 이미 준비된 데이터부터 재생되는 비대화형(non-interactive) 동영상; 일반적으로 게임의 도입부나 종결부에 사용되며, 줄거리를 전달하는 목적으로 제공되거나, 플레이어가 목표를 달성했을 때 그에 대한 보상으로 웅장한 그래픽을 보여주기도 한다.\n\n@@color(#04f): ▣ 코쿤 @@ (cocoon)은 누에고치를 빗댄 말로,\n&nbsp; &nbsp; 불확실성이 증대되는 경기침제기에 타인과의 접촉이나 교제에서 받는 스트레스를 피해 외부와의 단절을 선언한 사람들을 의미함.\n\n@@color(#04f): ▣ 클라우드 컴퓨팅 @@ (Cloud Computing) &nbsp; &nbsp; @ 2011-06-14 @\n자료나 소프트웨어를 개별 기기가 아닌 데이터센터에 저장해뒀다가 필요할 때마다 인터넷을 통해 꺼내 쓰는 서비스. 전 과정이 마치 구름(cloud)처럼 눈에 보이지 않는 인터넷상에서 이루어진다는 뜻으로 이름 붙여졌다.\n\n
* 별책\n* [[장부_나무]]\n* [[formatting]]\n* [[Testing]]
GettingStarted\n----\n[[용어정리]]\n[[목록]]\n[[주소록]]\n----\n<<slider about [[About...]] [[About...]] 'Learn about the CasePSD team'>>\n----\n\nsince 2008.7.1\n\n
GettingStarted\n
Handmade
(ccTiddly 1.1)a reusable non-linear personal web notebook
/***\nThis is a sample style definition to demonstrate CustomCssClass formatting\n***/\n/*{{{*/\n.wrappingClass {color: #666; background: #bbb;}\n/*}}}*/\n.wrappingClass {color: #000000; background: #D7DEDD;}\n\n/***\nCosmetic fixes that probably should be included in a future TW...\n***/\n/*{{{*/\n.viewer .listTitle { list-style-type:none; margin-left:-2em; }\n.editorFooter .button { padding-top: 0px; padding-bottom:0px; }\n/*}}}*/\n/***\nImportant stuff. See TagglyTaggingStyles and HorizontalMainMenuStyles\n***/\n/*{{{*/\n[[TagglyTaggingStyles]]\n[[HorizontalMainMenuStyles]]\n/*}}}*/\n/***\nClint's fix for weird IE behaviours\n***/\n/*{{{*/\nbody {position:static;}\n.tagClear{margin-top:1em;clear:both;}\n/*}}}*/\n/***\nJust colours, fonts, tweaks etc. See SideBarWhiteAndGrey\n***/\n/*{{{*/\nbody {background:#eee; /* font-size:103%; */}\na{ color: #069; }\na:hover{ background: #069; color: #fff; }\n.popup { background: #178; border: 1px solid #069; }\n.headerForeground a { color: #6fc;}\n.headerShadow { left: 2px; top: 2px; }\n.title { padding:0px; margin:0px; }\n.siteSubtitle { padding:0px; margin:0px; padding-left:1.5em; }\n.subtitle { font-size:90%; color:#ccc; padding-left:0.25em; }\nh1,h2,h3,h4,h5 { color: #000; background: transparent; }\n.title {color:black; font-size:2em;}\n.shadow .title {color:#999; }\n.viewer pre { background-color:#f8f8ff; border-color:#ddf; }\n.viewer { padding-top:0px; }\n.editor textarea { font-family:monospace; }\n#sidebarOptions { border:1px #ccc solid; }\n.tiddler {\n border-bottom:1px solid #ccc; border-right:1px solid #ccc; padding-bottom:1em; margin-bottom:1em; \n background:#fff; padding-right:1.5em; }\n#messageArea { background-color:#bde; border-color:#8ab; border-width:4px; border-style:dotted; font-size:90%; }\n#messageArea .button { text-decoration:none; font-weight:bold; background:transparent; border:0px; }\n#messageArea .button:hover {background: #acd;}\n[[SideBarWhiteAndGrey]]\n\n.viewer td {vertical-align:top;}\n\n.viewer table.noBorder {border-style:none;}\n.viewer table.noBorder td {border-style:none;}\n.viewer table.threeCol td {width:33%;}\n\n#adsense {\n margin: 1em 15.7em 0em 1em; border:1px solid #ddd;\n background:#f8f8f8; text-align:center;margin-bottom:1em;overflow:hidden;padding:0.5em;} \n\n.sliderPanel { margin-left: 2em; }\n\n.viewer th { background:#ddd; color:black; }\n/*}}}*/\n/*{{{*/\n/* for testing clint's new formatter. eg {{red{asdfaf}}} */\n.red { color:white; background:red; display:block; padding:1em; } \n\n/* FF doesn't need this. but IE seems to want to make first one white */\n.txtMainTab .tabset { background:#eee; }\n.txtMoreTab .tabset { background:transparent; }\n\n.faq ol li { padding-top:1em; font-size:120%; }\n.faq ol ul li { padding-top:0px; font-size:100%; }\n\n/*}}}*/\n
!! 문자\n<nowiki>\n@@bgcolor(#ffffff):color(#04f): &#9726; 가치주 @@ &nbsp; &nbsp;\n</nowiki>\n@@bgcolor(#ffffff):color(#04f): &#9726; 가치주 @@\n| 138, 008, 075 | #8A084B | @@color(#8A084B): ''와인 정보 '' @@ |\n| 238, 027, 036 | #ee1b24 | @@color(#ee1b24): ''강조 '' @@ |\n| 190, 140, 060 | #BE8C3C | @@color(#BE8C3C): ''황토색 '' @@ |\n||\n| 000, 128, 128 | #006666 | @@color(#006666): ''설정값 '' @@ |\n| 000, 168, 080 | #00A850 | @@color(#00A850): ''진행 '' @@ |\n||\n| 000, 051, 255 | #0033ff | @@color(#004a80): ''패치 '' @@ |\n| 000, 074, 128 | #004a80 | @@color(#004a80): ''주석 '' @@ |\n| 000, 102, 153 | #006699 | @@color(#006699): ''기본청색글(소제목) '' @@ |\n| 048, 088, 210 | #3058D2 | @@color(#3058D2): ''설정 '' @@ |\n||\n| 199, 037, 078 | #C7254E | @@color(#C7254E): ''강조 '' @@ | 249, 242, 244 | #F9F2F4 |@@bgcolor(#F9F2F4):color(#C7254E): ''강조 &nbsp; &nbsp; &nbsp; &nbsp; '' @@ |\n| 255, 255, 255 | #FFFFFF | 흰색 글자 | 255, 094, 000 | #FF5E00 |@@bgcolor(#FF5E00):color(#FFFFFF): ''주황색 배경 &nbsp; &nbsp; &nbsp; &nbsp; '' @@ |\n| 255, 255, 255 | #000000 | 검은색 글자 | 255, 187, 000 | #FFBB00 |@@bgcolor(#FFBB00):color(#000000): 노란색 배경 &nbsp; &nbsp; &nbsp; &nbsp; @@ |\n| 255, 255, 255 | #000000 | 검은색 글자 | 248, 248, 255 | #f8f8ff |@@bgcolor(#f8f8ff):color(#000000): 엷은 파란색 배경 &nbsp; &nbsp; &nbsp; &nbsp; @@ |\n| 255, 255, 255 | #000000 | 검은색 글자 | 215, 222, 221 | #d7dedd |@@bgcolor(#d7dedd):color(#000000): 엷은 녹색 배경 &nbsp; &nbsp; &nbsp; &nbsp; @@ |\n\n<nowiki>\n<html>\n<span style="color:red; background:#f8f8ff ; font-family:돋움; font-size: 14px;"> 붉은색, 돋움, 14픽셀로 지정된 텍스트입니다.</span>\n</html>\n</nowiki>\n<html>\n<span style="color:red; background:#f8f8ff ; font-family:돋움; font-size: 14px;"> 붉은색, 돋움, 12픽셀로 지정된 텍스트입니다.</span> <br>\n</html>\n{{{\n@@sf@@\n}}}\n@@sf@@\n<html> <span style="font-size: 10pt;"> <font color=RoyalBlue> <b> => 진정으로 소통하고 싶다면, 쉬운 글로 표현할 것 </b> </font> </span> </html>\n\n<html>\n<span style="background:#E2E2ff ; font-family:돋움; font-size: 16px;"> <b> 소재목 &nbsp; &nbsp; </b> </span>\n</html>\n\n<nowiki>\n{{wrappingClass{Text that is now accentuated &nbsp; &nbsp; &nbsp; }}}\n</nowiki>\n{{wrappingClass{Text that is now accentuated &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }}}\n\n<nowiki>\n@@text-shadow:black 3px 3px 8px;font-size:10pt;display:block;margin:1em 1em 1em 1em;border:1px solid black;Access any CSS style@@ \n</nowiki>\n@@text-shadow:black 3px 3px 8px;font-size:10pt;display:block;margin:1em 1em 1em 1em;border:1px solid black;Access any CSS style@@ \n\n<nowiki>\n※ @@bgcolor(#014):color(#fff): #014 - &#47; &#47; Bottom blue@@\n</nowiki>\n※ @@bgcolor(#014):color(#fff): #014 - &#47; &#47; Bottom blue@@ - KeyWord ; StyleSheetColors\n\n※ HTML 특수 코드 ; HTML Character Entity(HTML 문자 단위(엔티티))\n&nbsp; &nbsp; https://dev.w3.org/html5/html-author/charref\n\n\n!!! 이미지\n<nowiki>\n<DIV>\n<P style="TEXT-ALIGN: center; LINE-HEIGHT: 150%; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" \nclass=MsoNormal align=center>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/icon_christmas_ball.png" width=32> </SPAN>\n<br>\n<SPAN style="COLOR: #2b5600"> 그림 설명 </SPAN></p>\n</DIV>\n</nowiki>\n<html>\n<DIV>\n<P style="TEXT-ALIGN: center; LINE-HEIGHT: 150%; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" \nclass=MsoNormal align=center>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/icon_christmas_ball.png" width=32> </SPAN>\n<br>\n<SPAN style="COLOR: #2b5600"> 그림 설명 </SPAN></p>\n</DIV>\n</html>\n\n<nowiki>\n<DIV style="TEXT-ALIGN: center; LINE-HEIGHT: 150%" class=MsoNormal align=center>\n<SPAN style="LINE-HEIGHT: 150%; COLOR: black; FONT-SIZE: 11pt" lang=EN-US>\n<HR align=center SIZE=2 width="100%">\n</SPAN></DIV>\n</nowiki>\n<html>\n<DIV style="TEXT-ALIGN: center; LINE-HEIGHT: 150%" class=MsoNormal align=center>\n<SPAN style="LINE-HEIGHT: 150%; COLOR: black; FONT-SIZE: 11pt" lang=EN-US>\n<HR align=center SIZE=2 width="100%">\n</SPAN></DIV>\n</html>\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_main.PNG" width=480>\n</CENTER> </html>\n\n!!Code\n{{{\nToday is <<today>>.\n[[Pretty External Link|http://www.tiddlywiki.com]]\n}}}\n\n!!! 내부 이동\n<html>\n<div style="border: 1px solid gold; padding: 10px;">\n&lt;a name="jangmi" &gt; <br>\n&lt;a href="이동할 페이지의 주소(URL)#jangmi" &gt;장미 구경하세요&lt;/a&gt; </div>\n<br>\n<div style="border: 1px solid #3058D2; padding: 10px;">\n<span style="font-size: 14px;"> <b> #. Chapter 8 Making Your Day Brighter </b> </span>\n</div> </html>\n\n!!! 인용\n/*{{{*/\n// 문법구조\nFor 변수 = 시작값 To 종료값 (Step 변화값)\n (명령문)\n (Exit For) // 선택 사항. For 루프의 외부로 제어를 이동.\nNext 변수 \n/*}}}*/\n\n\n!! Table\n| \ | 1 | 2 | 3 |\n| A | A1 | A2 | A3 |\n| B | B1 | B2 | B3 |\n\n|>|>| 행 합치기 (l>l) | |\n| A | A1 | A2 | A3 |\n| B | B1 | B2 | B3 |\n\n|>|>| !행 합치기 (l>l) | 영문에서 표 생성후 수정 |h\n|>|>| 맨 앞에 '!' 없는 경우 ; 행 합치기 (l>l) | 맨뒤에 'h'가 없는 경우 |\n| B | B1 | B2 | B3 |\n\n| 열 합치기 (l~l) | 1 | 2 | 3 |\n|~| A1 | A2 | A3 |\n|~| B1 | B2 | B3 |\n\n<<<\ndfsf\n<html>\n// SideBarOption\n<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<tiddler 'LoginPanel'>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>\n</html>\n
/***\n''NestedSlidersPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman\nsource: http://www.TiddlyTools.com/#NestedSlidersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nQuickly make any tiddler content into an expandable 'slider' panel, without needing to create a separate tiddler to contain the slider content. Optional syntax allows ''default to open'', ''custom button label/tooltip'' and ''automatic blockquote formatting.''\n\nYou can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.\n\nFor more details, please click on a section headline below:\n++++!!!!![Configuration]>\nDebugging messages for 'lazy sliders' deferred rendering:\n<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering\n<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered\n===\n++++!!!!![Usage]>\nWhen installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. Additional optional syntax elements let you specify\n*default to open\n*cookiename\n*heading level\n*floater\n*rollover\n*custom label/tooltip\n*automatic blockquote\n*deferred rendering\nThe complete syntax, using all options, is:\n//{{{\n++++(cookiename)!!!!!^*[label|tooltip]>...\ncontent goes here\n===\n//}}}\nwhere:\n* {{{+++}}} (or {{{++++}}}) and {{{===}}}^^\nmarks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.^^\n* {{{(cookiename)}}}^^\nsaves the slider opened/closed state, and restores this state whenever the slider is re-rendered.^^\n* {{{!}}} through {{{!!!!!}}}^^\ndisplays the slider label using a formatted headline (Hn) style instead of a button/link style^^\n* {{{"^"}}} //(without the quotes)//^^\nmakes the slider 'float' on top of other content rather than shifting that content downward^^\n* {{{"*"}}} //(without the quotes)//^^\nautomatically opens/closes slider on "rollover" as well as when clicked^^\n* {{{[label]}}} or {{{[label|tooltip]}}}^^\nuses custom label/tooltip. (defaults are: ">" (more) and "<" (less)^^\n* {{{">"}}} //(without the quotes)//^^\nautomatically adds blockquote formatting to slider content^^\n* {{{"..."}}} //(without the quotes)//^^\ndefers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//^^\n\n//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//\n===\n++++!!!!![Examples]>\nsimple in-line slider: \n{{{\n+++\n content\n===\n}}}\n+++\n content\n===\n----\nuse a custom label and tooltip: \n{{{\n+++[label|tooltip]\n content\n===\n}}}\n+++[label|tooltip]\n content\n===\n----\ncontent automatically blockquoted: \n{{{\n+++>\n content\n===\n}}}\n+++>\n content\n===\n----\nall options combined //(default open, cookie, heading, floater, rollover, label/tooltip, blockquoted, deferred)//\n{{{\n++++(testcookie)!!!^*[label|tooltip]>...\n content\n===\n}}}\n++++(testcookie)!!!^*[label|tooltip]>...\n content\n===\n----\ncomplex nesting example:\n{{{\n+++^[get info...|click for information]\n put some general information here, plus a floating slider with more specific info:\n +++^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^*[glossary definition]explaining technical terms===\n ===\n===\n}}}\n+++^[get info...|click for information]\n put some general information here, plus a floating slider with more specific info:\n +++^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^*[glossary definition]explaining technical terms===\n ===\n===\n----\nnested floaters\n>menu: <<tiddler NestedSlidersExample>>\n(see [[NestedSlidersExample]] for definition)\n----\n===\n+++!!!!![Installation]>\nimport (or copy/paste) the following tiddlers into your document:\n''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)\n===\n+++!!!!![Revision History]>\n\n++++[2006.02.16 - 1.7.7]\ncorrected deferred rendering to account for use-case where show/hide state is tracked in a cookie\n===\n\n++++[2006.02.15 - 1.7.6]\nin adjustSliderPos(), ensure that floating panel is positioned completely within the browser window (i.e., does not go beyond the right edge of the browser window)\n===\n\n++++[2006.02.04 - 1.7.5]\nadd 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n===\n\n++++[2006.01.18 - 1.7.4]\nonly define adjustSliderPos() function if it has not already been provided by another plugin. This lets other plugins 'hijack' the function even when they are loaded first.\n===\n\n++++[2006.01.16 - 1.7.3]\nadded adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels. While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels. Short-term workaround is to only adjust the position for 'top-level' floaters.\n===\n\n++++[2006.01.16 - 1.7.2]\nadded button property to slider panel elements so that slider panel can tell which button it belongs to. Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends\n===\n\n++++[2006.01.14 - 1.7.1]\nadded optional "^" syntax for floating panels. Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.\n===\n\n++++[2006.01.14 - 1.7.0]\nadded optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)\n===\n\n+++[2006.01.03 - 1.6.2]\nWhen using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element. (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)\n===\n\n+++[2005.12.15 - 1.6.1]\nadded optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders\nremoved checkbox option for 'global' application of lazy sliders\n===\n\n+++[2005.11.25 - 1.6.0]\nadded optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)\n===\n\n+++[2005.11.21 - 1.5.1]\nrevised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability. Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.\n===\n\n+++[2005.11.20 - 1.5.0]\n added (cookiename) syntax for optional tracking and restoring of slider open/close state\n===\n\n+++[2005.11.11 - 1.4.0]\n added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style\n===\n\n+++[2005.11.07 - 1.3.0]\n removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other\n formatting extensions) and simplified/improved regular expressions to trim multiple excess newlines\n===\n\n+++[2005.11.05 - 1.2.1]\n changed name to NestedSlidersPlugin\n more documentation\n===\n\n+++[2005.11.04 - 1.2.0]\n added alternative character-mode syntax {{{(((}}} and {{{)))}}}\n tweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax\n===\n\n+++[2005.11.03 - 1.1.1]\n fixed toggling of default tooltips ("more..." and "less...") when a non-default button label is used\n code cleanup, added documentation\n===\n\n+++[2005.11.03 - 1.1.0]\n changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}\n changed name to EasySlidersPlugin\n===\n\n+++[2005.11.03 - 1.0.0]\n initial public release\n===\n\n===\n+++!!!!![Credits]>\nThis feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with research, programming and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson\n===\n***/\n// //+++!!!!![Code]\n//{{{\nversion.extensions.nestedSliders = {major: 1, minor: 7, revision: 7, date: new Date(2006,2,16)};\n//}}}\n\n//{{{\n// options for deferred rendering of sliders that are not initially displayed\nif (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;\nif (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;\n\n// default styles for 'floating' class\nsetStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \s\n background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");\n//}}}\n\n//{{{\nconfig.formatters.push( {\n name: "nestedSliders",\n match: "\s\sn?\s\s+{3}",\n terminator: "\s\ss*\s\s={3}\s\sn?",\n lookahead: "\s\sn?\s\s+{3}(\s\s+)?(\s\s([^\s\s)]*\s\s))?(\s\s!*)?(\s\s^)?(\s\s*)?(\s\s[[^\s\s]]*\s\s])?(\s\s>)?(\s\s.\s\s.\s\s.)?\s\ss*",\n handler: function(w)\n {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n // location for rendering button and panel\n var place=w.output;\n\n // default to closed, no cookie\n var show="none"; var title=">"; var tooltip="show"; var cookie="";\n\n // extra "+", default to open\n if (lookaheadMatch[1])\n { show="block"; title="<"; tooltip="hide"; }\n\n // cookie, use saved open/closed state\n if (lookaheadMatch[2]) {\n cookie=lookaheadMatch[2].trim().substr(1,lookaheadMatch[2].length-2);\n cookie="chkSlider"+cookie;\n if (config.options[cookie]==undefined)\n { config.options[cookie] = (show=="block") }\n if (config.options[cookie])\n { show="block"; title="<"; tooltip="hide"; }\n else\n { show="none"; title=">"; tooltip="show"; }\n }\n\n // custom label/tooltip\n if (lookaheadMatch[6]) {\n title = lookaheadMatch[6].trim().substr(1,lookaheadMatch[6].length-2);\n var pos=title.indexOf("|");\n if (pos!=-1)\n { tooltip = title.substr(pos+1,title.length); title = title.substr(0,pos); }\n else\n { tooltip += " "+title; }\n }\n\n // create the button\n if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link\n var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;\n var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,null,title);\n btn.onclick=onClickNestedSlider;\n btn.setAttribute("href","javascript:;");\n btn.setAttribute("title",tooltip);\n }\n else\n var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider);\n btn.sliderCookie = cookie; // save the cookiename (if any) in the button object\n\n // "non-click" MouseOver open/close slider\n if (lookaheadMatch[5]) btn.onmouseover=onClickNestedSlider;\n\n // create slider panel\n var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";\n var panel=createTiddlyElement(place,"div",null,panelClass,null);\n panel.style.display = show;\n panel.button = btn; // so the slider panel know which button it belongs to\n btn.sliderPanel=panel;\n\n // render slider (or defer until shown) \n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n if ((show=="block")||!lookaheadMatch[8]) {\n // render now if panel is supposed to be shown or NOT deferred rendering\n w.subWikify(lookaheadMatch[7]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);\n // align slider/floater position with button\n adjustSliderPos(place,btn,panel,panelClass);\n }\n else {\n var src = w.source.substr(w.nextMatch);\n var endpos=findMatchingDelimiter(src,"+++","===");\n panel.setAttribute("raw",src.substr(0,endpos));\n panel.setAttribute("blockquote",lookaheadMatch[7]?"true":"false");\n panel.setAttribute("rendered","false");\n w.nextMatch += endpos+3;\n if (w.source.substr(w.nextMatch,1)=="\sn") w.nextMatch++;\n if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\sn\sn"+panel.getAttribute("raw"));\n }\n }\n }\n }\n)\n\n// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)\nfunction findMatchingDelimiter(src,starttext,endtext) {\n var startpos = 0;\n var endpos = src.indexOf(endtext);\n // check for nested delimiters\n while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {\n // count number of nested 'starts'\n var startcount=0;\n var temp = src.substring(startpos,endpos-1);\n var pos=temp.indexOf(starttext);\n while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }\n // set up to check for additional 'starts' after adjusting endpos\n startpos=endpos+endtext.length;\n // find endpos for corresponding number of matching 'ends'\n while (startcount && endpos!=-1) {\n endpos = src.indexOf(endtext,endpos+endtext.length);\n startcount--;\n }\n }\n return (endpos==-1)?src.length:endpos;\n}\n//}}}\n\n//{{{\nfunction onClickNestedSlider(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theLabel = theTarget.firstChild.data;\n var theSlider = theTarget.sliderPanel\n var isOpen = theSlider.style.display!="none";\n // if using default button labels, toggle labels\n if (theLabel==">") theTarget.firstChild.data = "<";\n else if (theLabel=="<") theTarget.firstChild.data = ">";\n // if using default tooltips, toggle tooltips\n if (theTarget.getAttribute("title")=="show")\n theTarget.setAttribute("title","hide");\n else if (theTarget.getAttribute("title")=="hide")\n theTarget.setAttribute("title","show");\n if (theTarget.getAttribute("title")=="show "+theLabel)\n theTarget.setAttribute("title","hide "+theLabel);\n else if (theTarget.getAttribute("title")=="hide "+theLabel)\n theTarget.setAttribute("title","show "+theLabel);\n // deferred rendering (if needed)\n if (theSlider.getAttribute("rendered")=="false") {\n if (config.options.chkDebugLazySliderRender)\n alert("rendering '"+theLabel+"':\sn\sn"+theSlider.getAttribute("raw"));\n var place=theSlider;\n if (theSlider.getAttribute("blockquote")=="true")\n place=createTiddlyElement(place,"blockquote");\n wikify(theSlider.getAttribute("raw"),place);\n theSlider.setAttribute("rendered","true");\n }\n // show/hide the slider\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n theSlider.style.display = isOpen ? "none" : "block";\n if (this.sliderCookie && this.sliderCookie.length)\n { config.options[this.sliderCookie]=!isOpen; saveOptionCookie(this.sliderCookie); }\n // align slider/floater position with target button\n adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);\n return false;\n}\n\n// hijack animation handler 'stop' handler so overflow is visible after animation has completed\nSlider.prototype.coreStop = Slider.prototype.stop;\nSlider.prototype.stop = function() { this.coreStop(); this.element.style.overflow = "visible"; }\n\n// adjust panel position based on button position\nif (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {\n ///////////////////////////////////////////////////////////////////////////////\n /// EXPERIMENTAL HACK - WORKS IN SOME CASES, NOT IN OTHERS\n ///////////////////////////////////////////////////////////////////////////////\n // "if this panel is floating and the parent is not also a floating panel"...\n if (panelClass=="floatingPanel" && place.className!="floatingPanel") {\n var left=0; var top=btn.offsetHeight;\n if (place.style.position!="relative") { left+=findPosX(btn); top+=findPosY(btn); }\n if (left+panel.offsetWidth > getWindowWidth()) left=getWindowWidth()-panel.offsetWidth;\n panel.style.left=left+"px"; panel.style.top=top+"px";\n }\n}\n\nfunction getWindowWidth() {\n if(document.width!=undefined)\n return document.width; // moz (FF)\n if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )\n return document.documentElement.clientWidth; // IE6\n if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )\n return document.body.clientWidth; // IE4\n if(window.innerWidth!=undefined)\n return window.innerWidth; // IE - general\n return 0; // unknown\n}\n//}}}\n// //===
You can wrap any text in an HTML {{{<span>}}} or {{{<div>}}} with a specified CSS class. This allows custom CSS styling in a nice, modular way. By placing a rule in your StyleSheet tiddler like {{{.wrappingClass{color: #666; background: #bbb} }}} you can markup a piece of text in the tiddler using this code:\n\n{{{\n{{wrappingClass{Text that is now accentuated}}}\n}}}\n\n{{wrappingClass{Text that is now accentuated}}}\n\nBy default, the text is placed in a {{{<span>}}}. To use a {{{<div>}}} instead, insert a line break before the text:\n\n{{{\n{{wrappingClass{\nText that is now accentuated}}}\n}}}\n\n{{wrappingClass{\nText that is now accentuated}}}\n
/***\n|''Name:''|NestedSlidersTweaks|\n|''Version:''|0.5.0 (07-Mar-2006)|\n|''Source:''|http://rodney.gotdns.com|\n|''Author:''|[[RodneyGomes]]|\n|''Type:''|PluginTweak+Macro|\n\n!Dependencies\nThis is a plugin tweak and it requires NestedSlidersPlugins\n\n!Description\nThis tweak allows you to define nicer looking popup menus... (more description \nto come soon)\n\n!Usage\nMore information soon.\n\n!Example\n<<nstweak on>>+++^[Menu1]\nMenuOption1\nMenuOption2\n+++^[NestedMenu]\nMenuOption3\nMenuOption4\n===\nMenuOption5\n===<<nstweak off>>\n\n// //+++[Revision History]>\n*v0.5.0\n** IE 6 support!\n*v0.4.1\n** fixed up general coding style (mainly because of Firefox 1.5.0.1 bugs)\n* v0.4\n** fixed the buttons to now refresh on click so that even if the tiddler moves\n the next time you click on the button of the slider will make it open in the \n right place.\n* v0.3.1\n** fixed issue with some browsers complaining about "missing formal parameter". \n Was associated with the use of the name class as a paramter to some functions.\n* v0.3.0\n** now with macro support!\n* v0.2.0\n** fixed issue with making the onmouseover work for all floatingPanels\n* v0.1.0\n** initial release. \n// //===\n\n\n// //+++[Code]\n***/\n//{{{\n\nconfig.macros.nstweak = {};\n\nconfig.macros.nstweak.clickingOnNestedSliderOrButton = function(e,obj) {\n var res = false;\n \n if (config.macros.nstweak.clickingOn(e,obj) || \n ("button" in obj && config.macros.nstweak.clickingOn(e,obj.button)))\n return true;\n \n var children = obj.childNodes; \n \n for(var i = 0; i < children.length; i++)\n res = res || \n config.macros.nstweak.clickingOnNestedSliderOrButton(e,children[i]);\n \n return res;\n}\n\nconfig.macros.nstweak.old_main_onClick = document.onclick;\ndocument.onclick = function mainOnClick(e) {\n var floatPanels = document.getElementsByTagName("div");\n \n for(var i = 0; i < floatPanels.length; i++) {\n if (floatPanels[i].getAttribute) { \n var panel = floatPanels[i];\n if (panel.getAttribute('clickclass') == 'clickingclass')\n if (!config.macros.nstweak.clickingOnNestedSliderOrButton(e,panel))\n if (panel.style.display != 'none')\n config.macros.nstweak.closeFloatPanel(floatPanels[i]);\n }\n\n if (config.macros.nstweak.old_main_onClick)\n config.macros.nstweak.old_main_onClick(e);\n }\n}\n\nconfig.macros.nstweak.getElementPosition = function(obj) {\n var offsetTrail = obj;\n var offsetLeft = 0;\n var offsetTop = 0;\n \n while (offsetTrail) {\n offsetLeft += offsetTrail.offsetLeft;\n offsetTop += offsetTrail.offsetTop;\n offsetTrail = offsetTrail.offsetParent;\n }\n \n return {left:offsetLeft, top:offsetTop};\n}\n\nfunction getPageX(e) {\n if (!e) e = window.event;\n if (config.browser.isIE){\n return e.offsetX;\n } else {\n return e.pageX;\n }\n}\n\nfunction getPageY(e) { \n if (!e) e = window.event;\n \n if (config.browser.isIE){\n return e.offsetY;\n } else {\n return e.pageY;\n }\n}\n\nconfig.macros.nstweak.clickingOn = function(e,obj) {\n var posObj = config.macros.nstweak.getElementPosition(obj);\n \n return ((posObj.left < getPageX(e)) && (posObj.left + obj.offsetWidth > getPageX(e)) &&\n (posObj.top < getPageY(e)) && (posObj.top + obj.offsetHeight > getPageY(e)));\n}\n\nconfig.macros.nstweak.closeFloatPanel = function(panel) { \n if (panel.getAttribute)\n if (panel.getAttribute('clickclass') == 'clickingclass')\n panel.style.display = 'none';\n}\n\nconfig.macros.nstweak.closeAllSlidersOfClass = function(_class,place) {\n var elements = place.getElementsByTagName("div");\n \n for(var i = 0; i < elements.length; i++ ) {\n if (elements[i].getAttribute)\n if (elements[i].getAttribute('clickclass') == _class)\n elements[i].style.display = 'none';\n } \n}\n\nconfig.macros.nstweak.allPanelsClosed = function(_class) {\n var elements = document.getElementsByTagName("div");\n var res = true;\n \n for(var i = 0; i < elements.length;i++ ) { \n if (elements[i].getAttribute)\n if (elements[i].getAttribute("clickclass") == _class)\n res = res && (elements[i].style.display == "none");\n } \n \n return res;\n}\n\nconfig.macros.nstweak.state = false;\n\nconfig.macros.nstweak.buttonpopupclass = "buttonpopup";\nconfig.macros.nstweak.sliderpopupclass = "sliderpopup";\nconfig.macros.nstweak.nestedbuttonpopupclass = "nestedbuttonpopup";\nconfig.macros.nstweak.nestedsliderpopupclass = "nestedsliderpopup";\n\nconfig.macros.nstweak.enabled_floating_panel = {};\n\nconfig.macros.nstweak.handler = function(place,macroName,params) {\n if (params[1]) this.buttonpopupclass = params[1];\n if (params[2]) this.sliderpopupclass = params[2];\n if (params[3]) this.nestedbuttonpopupclass = params[3];\n if (params[4]) this.nestedsliderpopupclass = params[4];\n \n if (params[0].toLowerCase() == 'on')\n this.state = true;\n else\n this.state = false; \n}\n\n// hijack NestedSlidersPlugin hook :)\nwindow.adjustSliderPos = function(place,btn,panel,panelClass) {\n if (config.macros.nstweak.state) {\n var _panelClass = panelClass; \n if ( panelClass == "floatingPanel") {\n var _clickclass = "clickingclass";\n \n config.macros.nstweak.enabled_floating_panel[_clickclass] = false;\n \n var onMouseOver = function(e) {\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n \n // Small trick for when everything is closed because it's basically lost\n // focus and therefore we reset the enabled back to false.\n if (config.macros.nstweak.allPanelsClosed(_clickclass)) {\n config.macros.nstweak.enabled_floating_panel[_clickclass] = false;\n return;\n }\n \n // only click if this panelclass is the same as the enabled one and if it is not already shown!\n if (config.macros.nstweak.enabled_floating_panel[_clickclass] && theTarget.sliderPanel.style.display == "none") {\n config.macros.nstweak.closeAllSlidersOfClass(_clickclass,place);\n onMouseClick(e); \n }\n }\n \n var old_onMouseClick = btn.onclick;\n var onMouseClick = function(e) { \n\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theSlider = theTarget.sliderPanel\n \n if (theSlider.getAttribute("sliderclass") == "base") {\n var left=0; \n var top=theSlider.button.offsetHeight;\n \n if (theSlider.style.position!="relative") { \n left+=findPosX(theSlider.button); \n top+=findPosY(theSlider.button); \n }\n \n theSlider.style.left=left+"px"; \n theSlider.style.top=top+"px";\n }\n \n if (old_onMouseClick) \n old_onMouseClick(e); \n \n config.macros.nstweak.enabled_floating_panel[_clickclass] = true; \n }\n \n panel.setAttribute("clickclass",_clickclass);\n \n btn.onmouseover = onMouseOver;\n btn.onclick = onMouseClick;\n \n if (place.className=="floatingPanel") {\n panel.className = config.macros.nstweak.nestedsliderpopupclass;\n btn.className = config.macros.nstweak.nestedbuttonpopupclass; \n panel.setAttribute("sliderclass","nested");\n } else { \n panel.className = config.macros.nstweak.sliderpopupclass;\n btn.className = config.macros.nstweak.buttonpopupclass; \n panel.setAttribute("sliderclass","base"); \n }\n }\n } else {\n ///////////////////////////////////////////////////////////////////////////////\n /// EXPERIMENTAL HACK - WORKS IN SOME CASES, NOT IN OTHERS\n ///////////////////////////////////////////////////////////////////////////////\n // "if this panel is floating and the parent is not also a floating panel"...\n if (panelClass=="floatingPanel" && place.className!="floatingPanel") {\n var left=0; var top=btn.offsetHeight;\n if (place.style.position!="relative") { left+=findPosX(btn); top+=findPosY(btn); }\n panel.style.left=left+"px"; panel.style.top=top+"px";\n }\n }\n}\n\n//}}}\n// //===
/***\n| Name:|SiteMapMacro|\n| Author:|Simon Baird|\n| Location:|http://simonbaird.com/mptw/#SiteMapMacro|\n| Version:|1.0.3, 15-Mar-06|\n\n!!Examples\nSee SiteMap and SliderSiteMap for example usage.\n\n!!Parameters\n* Name of tiddler to start at\n* Max depth (a number) \n* Format (eg, nested, see formats below)\n* Don't show root flag (anything other than null turns it on)\n* Tags - a string containing a bracketed list of tags that we are interested in\n\n!!History\n* 1.0.3 (15-Mar-06)\n** added tag filtering\n* 1.0.2 (15-Mar-06)\n** Added json format and dontshowroot option\n* 1.0.1 (9-Mar-06)\n** Added selectable formats and fixed nested slider format\n* 1.0.0 (8-Mar-06)\n** first release\n\n***/\n//{{{\n\nversion.extensions.SiteMapMacro = {\n major: 1,\n minor: 0,\n revision: 3,\n date: new Date(2006,3,15),\n source: "http://simonbaird.com/mptw/#SiteMapMacro"\n};\n\nconfig.macros.siteMap = {\n\n formats: {\n bullets: {\n formatString: "%0[[%1]]\sn%2",\n indentString: "*"\n },\n\n // put this in your StyleSheet to make it look good.\n // .sliderPanel { margin-left: 2em; }\n\n sliders: {\n formatString: "[[%1]]+++\sn%2===\sn\sn",\n formatStringLeaf: "[[%1]]\sn"\n },\n\n openSliders: {\n formatString: "[[%1]]++++\sn%2===\sn\sn",\n formatStringLeaf: "[[%1]]\sn"\n },\n\n popups: {\n formatString: "[[%1]]+++^\sn%2===\sn\sn",\n formatStringLeaf: "[[%1]]\sn"\n },\n\n // these don't work too well\n openPopups: {\n formatString: "[[%1]]++++^\sn%2===\sn\sn",\n formatStringLeaf: "[[%1]]\sn"\n },\n \n // this is a little nuts but it works\n json: {\n formatString: '\sn%0{"%1":[%2\sn%0]}',\n formatStringLeaf: '\sn%0"%1"',\n indentString: " ",\n separatorString: ","\n }\n\n\n },\n\n defaultFormat: "bullets",\n\n treeTraverse: function(title,depth,maxdepth,format,dontshowroot,tags,excludetags) {\n\n var tiddler = store.getTiddler(title);\n var tagging = store.getTaggedTiddlers(title);\n\n if (dontshowroot)\n depth = 0;\n\n var indent = "";\n if (this.formats[format].indentString)\n for (var j=0;j<depth;j++)\n indent += this.formats[format].indentString;\n\n var childOutput = "";\n if (!maxdepth || depth < parseInt(maxdepth)) \n for (var i=0;i<tagging.length;i++)\n if (tagging[i].title != title) {\n if (this.formats[format].separatorString && i != 0)\n childOutput += this.formats[format].separatorString;\n childOutput += this.treeTraverse(tagging[i].title,depth+1,maxdepth,format,null,tags,excludetags);\n }\n\n if (childOutput == "" && (\n (tags && tags != "" && !tiddler.tags.containsAll(tags.readBracketedList())) ||\n (excludetags && excludetags != "" && tiddler.tags.containsAny(excludetags.readBracketedList()))\n )\n ) {\n // so prune it cos it doesn't have the right tags and neither do any of it's children\n return "";\n }\n\n if (dontshowroot)\n return childOutput;\n\n if (this.formats[format].formatStringLeaf && childOutput == "") {\n // required for nestedSliders\n return this.formats[format].formatStringLeaf.format([indent,title,childOutput]);\n }\n\n return this.formats[format].formatString.format([indent,title,childOutput]);\n },\n\n handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n wikify(this.treeTraverse(\n params[0] && params[0] != '.' ? params[0] : tiddler.title, 1, \n params[1] && params[1] != '.' ? params[1] : null, // maxdepth\n params[2] && params[2] != '.' ? params[2] : this.defaultFormat, // format\n params[3] && params[3] != '.' ? params[3] : null, // dontshowroot\n params[4] && params[4] != '.' ? params[4] : null, // tags\n params[5] && params[5] != '.' ? params[5] : null // excludetags\n ),place);\n }\n\n}\n\n//}}}\n
/***\n|Name|TagglyListPlugin|\n|Created by|SimonBaird|\n|Location|http://simonbaird.com/mptw/#TagglyListPlugin|\n|Version|1.1.2 25-Apr-06|\n|Requires|See TagglyTagging|\n\n!History\n* 1.1.2 (25-Apr-2006) embedded TagglyTaggingStyles. No longer need separated tiddler for styles.\n* 1.1.1 (6-Mar-2006) fixed bug with refreshAllVisible closing tiddlers being edited. Thanks Luke Blanshard.\n\n***/\n\n/***\n!Setup and config\n***/\n//{{{\n\nversion.extensions.TagglyListPlugin = {\n major: 1, minor: 1, revision: 2,\n date: new Date(2006,4,25),\n source: "http://simonbaird.com/mptw/#TagglyListPlugin"\n};\n\nconfig.macros.tagglyList = {};\nconfig.macros.tagglyListByTag = {};\nconfig.macros.tagglyListControl = {};\nconfig.macros.tagglyListWithSort = {};\nconfig.macros.hideSomeTags = {};\n\n// change this to your preference\nconfig.macros.tagglyListWithSort.maxCols = 6;\n\nconfig.macros.tagglyList.label = "Tagged as %0:";\n\n// the default sort options. set these to your preference\nconfig.macros.tagglyListWithSort.defaults = {\n sortBy:"title", // title|created|modified\n sortOrder: "asc", // asc|desc\n hideState: "show", // show|hide\n groupState: "nogroup", // nogroup|group\n numCols: 1\n};\n\n// these tags will be ignored by the grouped view\nconfig.macros.tagglyListByTag.excludeTheseTags = [\n "systemConfig",\n "TiddlerTemplates"\n];\n\nconfig.macros.tagglyListControl.tags = {\n title:"sortByTitle", \n modified: "sortByModified", \n created: "sortByCreated",\n asc:"sortAsc", \n desc:"sortDesc",\n hide:"hideTagged", \n show:"showTagged",\n nogroup:"noGroupByTag",\n group:"groupByTag",\n cols1:"list1Cols",\n cols2:"list2Cols",\n cols3:"list3Cols",\n cols4:"list4Cols",\n cols5:"list5Cols",\n cols6:"list6Cols",\n cols7:"list7Cols",\n cols8:"list8Cols",\n cols9:"list9Cols" \n}\n\n// note: should match config.macros.tagglyListControl.tags\nconfig.macros.hideSomeTags.tagsToHide = [\n "sortByTitle",\n "sortByCreated",\n "sortByModified",\n "sortDesc",\n "sortAsc",\n "hideTagged",\n "showTagged",\n "noGroupByTag",\n "groupByTag",\n "list1Cols",\n "list2Cols",\n "list3Cols",\n "list4Cols",\n "list5Cols",\n "list6Cols",\n "list7Cols",\n "list8Cols",\n "list9Cols"\n];\n\n\n//}}}\n/***\n\n!Utils\n***/\n//{{{\n// from Eric\nfunction isTagged(title,tag) {\n var t=store.getTiddler(title); if (!t) return false;\n return (t.tags.find(tag)!=null);\n}\n\n// from Eric\nfunction toggleTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)==null) t.tags.push(tag);\n else t.tags.splice(t.tags.find(tag),1);\n}\n\nfunction addTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n t.tags.push(tag);\n}\n\nfunction removeTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)!=null) t.tags.splice(t.tags.find(tag),1);\n}\n\n// from Udo\nArray.prototype.indexOf = function(item) {\n for (var i = 0; i < this.length; i++) {\n if (this[i] == item) {\n return i;\n }\n }\n return -1;\n};\nArray.prototype.contains = function(item) {\n return (this.indexOf(item) >= 0);\n}\n//}}}\n/***\n\n!tagglyList\ndisplays a list of tagged tiddlers. \nparameters are sortField and sortOrder\n***/\n//{{{\n\n// not used at the moment...\nfunction sortedListOfOtherTags(tiddler,thisTag) {\n var list = tiddler.tags.concat(); // so we are working on a clone..\n for (var i=0;i<config.macros.hideSomeTags.tagsToHide.length;i++) {\n if (list.find(config.macros.hideSomeTags.tagsToHide[i]) != null)\n list.splice(list.find(config.macros.hideSomeTags.tagsToHide[i]),1); // remove hidden ones\n }\n for (var i=0;i<config.macros.tagglyListByTag.excludeTheseTags.length;i++) {\n if (list.find(config.macros.tagglyListByTag.excludeTheseTags[i]) != null)\n list.splice(list.find(config.macros.tagglyListByTag.excludeTheseTags[i]),1); // remove excluded ones\n }\n list.splice(list.find(thisTag),1); // remove thisTag\n return '[[' + list.sort().join("]] [[") + ']]';\n}\n\nfunction sortHelper(a,b) {\n if (a == b) return 0;\n else if (a < b) return -1;\n else return +1;\n}\n\nconfig.macros.tagglyListByTag.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n\n var sortBy = params[0] ? params[0] : "title"; \n var sortOrder = params[1] ? params[1] : "asc";\n\n var result = store.getTaggedTiddlers(tiddler.title,sortBy);\n\n if (sortOrder == "desc")\n result = result.reverse();\n\n var leftOvers = []\n for (var i=0;i<result.length;i++) {\n leftOvers.push(result[i].title);\n }\n\n var allTagsHolder = {};\n for (var i=0;i<result.length;i++) {\n for (var j=0;j<result[i].tags.length;j++) {\n\n if ( \n result[i].tags[j] != tiddler.title // not this tiddler\n && config.macros.hideSomeTags.tagsToHide.find(result[i].tags[j]) == null // not a hidden one\n && config.macros.tagglyListByTag.excludeTheseTags.find(result[i].tags[j]) == null // not excluded\n ) {\n if (!allTagsHolder[result[i].tags[j]])\n allTagsHolder[result[i].tags[j]] = "";\n allTagsHolder[result[i].tags[j]] += "**[["+result[i].title+"]]\sn";\n\n if (leftOvers.find(result[i].title) != null)\n leftOvers.splice(leftOvers.find(result[i].title),1); // remove from leftovers. at the end it will contain the leftovers...\n }\n }\n }\n\n\n var allTags = [];\n for (var t in allTagsHolder)\n allTags.push(t);\n\n allTags.sort(function(a,b) {\n var tidA = store.getTiddler(a);\n var tidB = store.getTiddler(b);\n if (sortBy == "title") return sortHelper(a,b);\n else if (!tidA && !tidB) return 0;\n else if (!tidA) return -1;\n else if (!tidB) return +1;\n else return sortHelper(tidA[sortBy],tidB[sortBy]);\n });\n\n var markup = "";\n\n if (sortOrder == "desc") {\n allTags.reverse();\n }\n else {\n // leftovers first...\n for (var i=0;i<leftOvers.length;i++)\n markup += "*[["+leftOvers[i]+"]]\sn";\n } \n\n for (var i=0;i<allTags.length;i++)\n markup += "*[["+allTags[i]+"]]\sn" + allTagsHolder[allTags[i]];\n\n if (sortOrder == "desc") {\n // leftovers last...\n for (var i=0;i<leftOvers.length;i++)\n markup += "*[["+leftOvers[i]+"]]\sn";\n }\n\n wikify(markup,place);\n}\n\nconfig.macros.tagglyList.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n var sortBy = params[0] ? params[0] : "title"; \n var sortOrder = params[1] ? params[1] : "asc";\n var numCols = params[2] ? params[2] : 1;\n\n var result = store.getTaggedTiddlers(tiddler.title,sortBy);\n if (sortOrder == "desc")\n result = result.reverse();\n\n var listSize = result.length;\n var colSize = listSize/numCols;\n var remainder = listSize % numCols;\n\n var upperColsize;\n var lowerColsize;\n if (colSize != Math.floor(colSize)) {\n // it's not an exact fit so..\n lowerColsize = Math.floor(colSize);\n upperColsize = Math.floor(colSize) + 1;\n }\n else {\n lowerColsize = colSize;\n upperColsize = colSize;\n }\n\n var markup = "";\n var c=0;\n\n var newTaggedTable = createTiddlyElement(place,"table");\n var newTaggedBody = createTiddlyElement(newTaggedTable,"tbody");\n var newTaggedTr = createTiddlyElement(newTaggedBody,"tr");\n\n for (var j=0;j<numCols;j++) {\n var foo = "";\n var thisSize;\n\n if (j<remainder)\n thisSize = upperColsize;\n else\n thisSize = lowerColsize;\n\n for (var i=0;i<thisSize;i++) \n foo += ( "*[[" + result[c++].title + "]]\sn"); // was using splitList.shift() but didn't work in IE;\n\n var newTd = createTiddlyElement(newTaggedTr,"td",null,"tagglyTagging");\n wikify(foo,newTd);\n\n }\n\n};\n\n/* snip for later.....\n //var groupBy = params[3] ? params[3] : "t.title.substr(0,1)";\n //var groupBy = params[3] ? params[3] : "sortedListOfOtherTags(t,tiddler.title)";\n //var groupBy = params[3] ? params[3] : "t.modified";\n var groupBy = null; // for now. groupBy here is working but disabled for now.\n\n var prevGroup = "";\n var thisGroup = "";\n\n if (groupBy) {\n result.sort(function(a,b) {\n var t = a; var aSortVal = eval(groupBy); var aSortVal2 = eval("t".sortBy);\n var t = b; var bSortVal = eval(groupBy); var bSortVal2 = eval("t".sortBy);\n var t = b; var bSortVal2 = eval(groupBy);\n return (aSortVal == bSortVal ?\n (aSortVal2 == bSortVal2 ? 0 : (aSortVal2 < bSortVal2 ? -1 : +1)) // yuck\n : (aSortVal < bSortVal ? -1 : +1));\n });\n }\n\n if (groupBy) {\n thisGroup = eval(groupBy);\n if (thisGroup != prevGroup)\n markup += "*[["+thisGroup+']]\sn';\n markup += "**[["+t.title+']]\sn';\n prevGroup = thisGroup;\n }\n\n\n\n*/\n\n\n//}}}\n\n/***\n\n!tagglyListControl\nUse to make the sort control buttons\n***/\n//{{{\n\nfunction getSortBy(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.sortBy;\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n if (tiddler.tags.contains(usetags["title"])) return "title";\n else if (tiddler.tags.contains(usetags["modified"])) return "modified";\n else if (tiddler.tags.contains(usetags["created"])) return "created";\n else return defaultVal;\n}\n\nfunction getSortOrder(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.sortOrder;\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n if (tiddler.tags.contains(usetags["asc"])) return "asc";\n else if (tiddler.tags.contains(usetags["desc"])) return "desc";\n else return defaultVal;\n}\n\nfunction getHideState(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.hideState;\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n if (tiddler.tags.contains(usetags["hide"])) return "hide";\n else if (tiddler.tags.contains(usetags["show"])) return "show";\n else return defaultVal;\n}\n\nfunction getGroupState(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.groupState;\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n if (tiddler.tags.contains(usetags["group"])) return "group";\n else if (tiddler.tags.contains(usetags["nogroup"])) return "nogroup";\n else return defaultVal;\n}\n\nfunction getNumCols(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.numCols; // an int\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n for (var i=1;i<=config.macros.tagglyListWithSort.maxCols;i++)\n if (tiddler.tags.contains(usetags["cols"+i])) return i;\n return defaultVal;\n}\n\n\nfunction getSortLabel(title,which) {\n // TODO. the strings here should be definable in config\n var by = getSortBy(title);\n var order = getSortOrder(title);\n var hide = getHideState(title);\n var group = getGroupState(title);\n if (which == "hide") return (hide == "show" ? "−" : "+"); // 0x25b8;\n else if (which == "group") return (group == "group" ? "normal" : "grouped");\n else if (which == "cols") return "cols±"; // &plusmn;\n else if (by == which) return which + (order == "asc" ? "↓" : "↑"); // &uarr; &darr;\n else return which;\n}\n\nfunction handleSortClick(title,which) {\n var currentSortBy = getSortBy(title);\n var currentSortOrder = getSortOrder(title);\n var currentHideState = getHideState(title);\n var currentGroupState = getGroupState(title);\n var currentNumCols = getNumCols(title);\n\n var tags = config.macros.tagglyListControl.tags;\n\n // if it doesn't exist, lets create it..\n if (!store.getTiddler(title))\n store.saveTiddler(title,title,"",config.options.txtUserName,new Date(),null);\n\n if (which == "hide") {\n // toggle hide state\n var newHideState = (currentHideState == "hide" ? "show" : "hide");\n removeTag(title,tags[currentHideState]);\n if (newHideState != config.macros.tagglyListWithSort.defaults.hideState)\n toggleTag(title,tags[newHideState]);\n }\n else if (which == "group") {\n // toggle hide state\n var newGroupState = (currentGroupState == "group" ? "nogroup" : "group");\n removeTag(title,tags[currentGroupState]);\n if (newGroupState != config.macros.tagglyListWithSort.defaults.groupState)\n toggleTag(title,tags[newGroupState]);\n }\n else if (which == "cols") {\n // toggle num cols\n var newNumCols = currentNumCols + 1; // confusing. currentNumCols is an int\n if (newNumCols > config.macros.tagglyListWithSort.maxCols || newNumCols > store.getTaggedTiddlers(title).length)\n newNumCols = 1;\n removeTag(title,tags["cols"+currentNumCols]);\n if (("cols"+newNumCols) != config.macros.tagglyListWithSort.defaults.groupState)\n toggleTag(title,tags["cols"+newNumCols]);\n }\n else if (currentSortBy == which) {\n // toggle sort order\n var newSortOrder = (currentSortOrder == "asc" ? "desc" : "asc");\n removeTag(title,tags[currentSortOrder]);\n if (newSortOrder != config.macros.tagglyListWithSort.defaults.sortOrder)\n toggleTag(title,tags[newSortOrder]);\n }\n else {\n // change sortBy only\n removeTag(title,tags["title"]);\n removeTag(title,tags["created"]);\n removeTag(title,tags["modified"]);\n\n if (which != config.macros.tagglyListWithSort.defaults.sortBy)\n toggleTag(title,tags[which]);\n }\n\n store.setDirty(true); // save is required now.\n story.refreshTiddler(title,false,true); // force=true\n}\n\nconfig.macros.tagglyListControl.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n var onclick = function(e) {\n if (!e) var e = window.event;\n handleSortClick(tiddler.title,params[0]);\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return false;\n };\n createTiddlyButton(place,getSortLabel(tiddler.title,params[0]),"Click to change sort options",onclick,params[0]=="hide"?"hidebutton":"button");\n}\n//}}}\n/***\n\n!tagglyListWithSort\nput it all together..\n***/\n//{{{\nconfig.macros.tagglyListWithSort.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n if (tiddler && store.getTaggedTiddlers(tiddler.title).length > 0)\n // todo make this readable\n wikify(\n "<<tagglyListControl hide>>"+\n (getHideState(tiddler.title) != "hide" ? \n '<html><span class="tagglyLabel">'+config.macros.tagglyList.label.format([tiddler.title])+' </span></html>'+\n "<<tagglyListControl title>><<tagglyListControl modified>><<tagglyListControl created>><<tagglyListControl group>>"+(getGroupState(tiddler.title)=="group"?"":"<<tagglyListControl cols>>")+"\sn" + \n "<<tagglyList" + (getGroupState(tiddler.title)=="group"?"ByTag ":" ") + getSortBy(tiddler.title)+" "+getSortOrder(tiddler.title)+" "+getNumCols(tiddler.title)+">>" // hacky\n // + \sn----\sn" +\n //"<<tagglyList "+getSortBy(tiddler.title)+" "+getSortOrder(tiddler.title)+">>"\n : ""),\n place,null,tiddler);\n}\n\nconfig.macros.tagglyTagging = { handler: config.macros.tagglyListWithSort.handler };\n\n\n//}}}\n/***\n\n!hideSomeTags\nSo we don't see the sort tags.\n(note, they are still there when you edit. Will that be too annoying?\n***/\n//{{{\n\n// based on tags.handler\nconfig.macros.hideSomeTags.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n var theList = createTiddlyElement(place,"ul");\n if(params[0] && store.tiddlerExists[params[0]])\n tiddler = store.getTiddler(params[0]);\n var lingo = config.views.wikified.tag;\n var prompt = tiddler.tags.length == 0 ? lingo.labelNoTags : lingo.labelTags;\n createTiddlyElement(theList,"li",null,"listTitle",prompt.format([tiddler.title]));\n for(var t=0; t<tiddler.tags.length; t++)\n if (!this.tagsToHide.contains(tiddler.tags[t])) // this is the only difference from tags.handler...\n createTagButton(createTiddlyElement(theList,"li"),tiddler.tags[t],tiddler.title);\n\n}\n\n//}}}\n/***\n\n!Refresh everything when we save a tiddler. So the tagged lists never get stale. Is this too slow???\n***/\n//{{{\n\nfunction refreshAllVisible() {\n story.forEachTiddler(function(title,element) {\n if (element.getAttribute("dirty") != "true") \n story.refreshTiddler(title,false,true);\n });\n}\n\nstory.saveTiddler_orig_mptw = story.saveTiddler;\nstory.saveTiddler = function(title,minorUpdate) {\n var result = this.saveTiddler_orig_mptw(title,minorUpdate);\n refreshAllVisible();\n return result;\n}\n\nstore.removeTiddler_orig_mptw = store.removeTiddler;\nstore.removeTiddler = function(title) {\n this.removeTiddler_orig_mptw(title);\n refreshAllVisible();\n}\n\nconfig.shadowTiddlers.TagglyTaggingStyles = "/***\snTo use, add {{{[[TagglyTaggingStyles]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also ViewTemplate, EditTemplate and TagglyTagging.\sn***/\sn/*{{{*/\sn.tagglyTagged li.listTitle { display:none;}\sn.tagglyTagged li { display: inline; font-size:90%; }\sn.tagglyTagged ul { margin:0px; padding:0px; }\sn.tagglyTagging { padding-top:0.5em; }\sn.tagglyTagging li.listTitle { display:none;}\sn.tagglyTagging ul { margin-top:0px; padding-top:0.5em; padding-left:2em; margin-bottom:0px; padding-bottom:0px; }\sn\sn/* .tagglyTagging .tghide { display:inline; } */\sn\sn.tagglyTagging { vertical-align: top; margin:0px; padding:0px; }\sn.tagglyTagging table { margin:0px; padding:0px; }\sn\sn\sn.tagglyTagging .button { display:none; margin-left:3px; margin-right:3px; }\sn.tagglyTagging .button, .tagglyTagging .hidebutton { color:#aaa; font-size:90%; border:0px; padding-left:0.3em;padding-right:0.3em;}\sn.tagglyTagging .button:hover, .hidebutton:hover { background:#eee; color:#888; }\sn.selected .tagglyTagging .button { display:inline; }\sn\sn.tagglyTagging .hidebutton { color:white; } /* has to be there so it takes up space. tweak if you're not using a white tiddler bg */\sn.selected .tagglyTagging .hidebutton { color:#aaa }\sn\sn.tagglyLabel { color:#aaa; font-size:90%; }\sn\sn.tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }\sn.tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}\sn.tagglyTagging ul ul li {margin-left:0.5em; }\sn\sn.editLabel { font-size:90%; padding-top:0.5em; }\sn/*}}}*/\sn";\n\nrefreshStyles("TagglyTaggingStyles");\n\n\n//}}}\n\n// // <html>&#x25b8;&#x25be;&minus;&plusmn;</html>
TagglyTagging is currently broken up into several components. To install TagglyTagging you should\n#Install the plugins TagglyListPlugin, QuickOpenTagPlugin, RenameTagsPlugin and NewHereCommand\n# Copy the contents of TagglyTaggingViewTemplate and TagglyTaggingEditTemplate to your ViewTemplate and EditTemplate tiddlers respectively\nOr you could just [[Download]] a fresh empty file with TagglyTagging pre-installed and start with that.\n!What is TagglyTagging?\nFor more info about TagglyTagging try the TagglyTaggingFAQ and the TagglyTaggingTutorial.
(See also SliderSiteMap)\n|<<siteMap WhatsNew>><<siteMap FunStuff>>|<<siteMap TagglyTagging>><<siteMap More... 2>>|<<siteMap Plugins 2>>|\n|noBorder threeCol|k\n
Demo of slider formatting in SiteMapMacro\n|!sliders|!openSliders|!popups|\n|{{{<<siteMap TagglyTagging . sliders>>}}}|{{{<<siteMap TagglyTagging . openSliders>>}}}|{{{<<siteMap TagglyTagging . popups>>}}}|\n|<<siteMap TagglyTagging . sliders>>|<<siteMap TagglyTagging . openSliders>>|<<siteMap TagglyTagging . popups>>|
config.messages.customConfigError = "설정에 오류가 있습니다 - %0";\nconfig.messages.savedSnapshotError = "이 TiddlyWiki가 잘못 저장된 것으로 보입니다. 자세한 내용은 http://www.tiddlywiki.com/#DownloadSoftware 를 참조하세요.";\nconfig.messages.subtitleUnknown = "(알 수 없음)";\nconfig.messages.undefinedTiddlerToolTip = "글 '%0' 은 아직 존재하지 않습니다.";\nconfig.messages.externalLinkTooltip = "%0 로의 링크";\nconfig.messages.noTags = "분류된 글이 없습니다.";\nconfig.messages.notFileUrlError = "변경사항을 반영하기 전에 이 TiddlyWiki를 저장해야 합니다.";\nconfig.messages.cantSaveError = "이 브라우저로는 저장할 수 없습니다. 가능하면 [[Firefox|http://mozilla.or.kr]]를 사용해 주세요.";\nconfig.messages.invalidFileError = "원본파일 '%0' 이 올바른 TiddlyWiki 파일이 아닌 것 같습니다.";\nconfig.messages.backupSaved = "백업 파일이 저장되었습니다.";\nconfig.messages.backupFailed = "백업을 실패하였습니다.";\nconfig.messages.rssSaved = "RSS 피드가 저장되었습니다.";\nconfig.messages.rssFailed = "RSS 피드 저장을 실패하였습니다.";\nconfig.messages.emptySaved = "빈 템플릿을 저장하였습니다.";\nconfig.messages.emptyFailed = "빈 템플릿 저장을 실패하였습니다.";\nconfig.messages.mainSaved = "이 TiddlyWiki가 저장되었습니다.";\nconfig.messages.mainFailed = "이 TiddlyWiki의 저장에 실패했습니다. 변경사항이 저장되지 않았습니다.";\nconfig.messages.macroError = "매크로 '%0' 의 실행 중에 오류가 발생했습니다.";\noverwriteWarning: "'%0' 라는 글이 이미 존재합니다. 확인을 누르면 기존의 글은 삭제됩니다.";\n\nconfig.messages.unsavedChangesWarning = "주의하세요! 저장되지 않은 글이 있습니다.\sn\sn확인을 눌러 저장하거나 \sn취소를 눌러 변경된 내용을 취소할 수 있습니다.",\nconfig.messages.dates.months = ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"];\nconfig.messages.dates.days = ["일요일","월요일", "화요일", "수요일", "목요일","금요일","토요일","일요일"];\n\nconfig.views.wikified.tag.labelNoTags = "분류 없음";\nconfig.views.wikified.tag.labelTags = "분류: ";\nconfig.views.wikified.tag.tooltip = "'%0' 분류된 글 보기";\nconfig.views.wikified.tag.openAllText = "'%0' 분류된 글을 모두 열기";\nconfig.views.wikified.tag.openAllTooltip = "모든 글을 엽니다.";\nconfig.views.wikified.tag.popupNone = "'%0'로 분류된 글이 없습니다.";\n\nconfig.views.editor.tagPrompt = "분류들을 빈 칸으로 구분하거나, 필요하다면 다음과 같이 [[대괄호]]로 묶어 입력해 주세요. 또는 다음을 눌러 기존의 분류를 입력하셔도 됩니다.";\nconfig.views.editor.tagChooser.text = "분류";\nconfig.views.editor.tagChooser.tooltip = "이 글에 기존에 있는 분류를 더합니다.";\nconfig.views.editor.tagChooser.popupNone = "분류가 존재하지 않습니다.";\nconfig.views.editor.tagChooser.tagTooltip = "분류 '%0' 을 추가합니다.";\nconfig.views.editor.defaultText = " '%0' 에 관한 글을 작성해 주세요.";\n\nconfig.macros.search.label = "검색";\nconfig.macros.search.prompt = "이 TiddlyWiki를 검색합니다.";\nconfig.macros.search.successMsg = "%1 를 포함한 %0 개의 글이 검색되었습니다.";\nconfig.macros.search.failureMsg = "%0을 포함한 글을 찾을 수 없습니다.";\nconfig.macros.allTags.tooltip = "'%0' 로 분류된 글 보기";\nconfig.macros.allTags.noTags = "분류된 글이 없습니다.";\nconfig.macros.list.all.prompt = "오름차순으로 정렬된 모든 글";\nconfig.macros.list.missing.prompt = "글을 가리키는 링크는 있지만 존재하지 않는 글";\nconfig.macros.list.orphans.prompt = "어떤 글에서도 참조하지 않는 글";\nconfig.macros.timeline.dateFormat = "YYYY년 MMM DD일";\n\nconfig.macros.closeAll.label = "모든 글 닫기";\nconfig.macros.closeAll.prompt = "현재 열려있는 모든 글을 닫습니다. (현재 편집중인 글은 제외)";\nconfig.macros.permaview.label = "절대경로";\nconfig.macros.permaview.prompt = "현재 보고 있는 글들을 모두 보기 위한 링크";\nconfig.macros.saveChanges.label = "변경사항 저장";\nconfig.macros.saveChanges.prompt = "갱신된 TiddlyWiki를 만들기 위하여 모든 글을 저장합니다.";\nconfig.macros.newTiddler.label = "새 글 쓰기";\nconfig.macros.newTiddler.prompt = "새 글을 만듭니다.";\nconfig.macros.newJournal.label = "새 일기 쓰기";\nconfig.macros.newJournal.prompt = "현재 날짜와 시간을 이용하여 새 글을 만듭니다.";
/***\n| Name:|QuickOpenTagPlugin|\n| Purpose:|Makes tag links into a Taggly style open tag plus a normal style drop down menu|\n| Creator:|SimonBaird|\n| Source:|http://simonbaird.com/mptw/#QuickOpenTagPlugin|\n| Requires:|TW 2.x|\n| Version|1.1 (7-Feb-06)|\n\n!History\n* Version 1.1 (07/02/2006)\n** Fix Firefox 1.5.0.1 crashes\n** Updated by ~BidiX[at]~BidiX.info\n* Version 1.0 (?/01/2006)\n** First release\n\n***/\n//{{{\n\n//⊻ ⊽ ⋁ ▼ \n\nwindow.createTagButton_orig_mptw = createTagButton;\nwindow.createTagButton = function(place,tag,excludeTiddler) {\n var sp = createTiddlyElement(place,"span",null,"quickopentag");\n createTiddlyLink(sp,tag,true,"button");\n var theTag = createTiddlyButton(sp,config.macros.miniTag.dropdownchar,config.views.wikified.tag.tooltip.format([tag]),onClickTag);\n theTag.setAttribute("tag",tag);\n if(excludeTiddler)\n theTag.setAttribute("tiddler",excludeTiddler);\n return(theTag);\n};\n\nconfig.macros.miniTag = {handler:function(place,macroName,params,wikifier,paramString,tiddler) {\n var tagged = store.getTaggedTiddlers(tiddler.title);\n if (tagged.length > 0) {\n var theTag = createTiddlyButton(place,config.macros.miniTag.dropdownchar,config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);\n theTag.setAttribute("tag",tiddler.title);\n theTag.className = "miniTag";\n }\n}};\n\nconfig.macros.miniTag.dropdownchar = (document.all?"▼":"▾"); // the fat one is the only one that works in IE\n\nconfig.macros.allTags.handler = function(place,macroName,params)\n{\n var tags = store.getTags();\n var theDateList = createTiddlyElement(place,"ul",null,null,null);\n if(tags.length === 0)\n createTiddlyElement(theDateList,"li",null,"listTitle",this.noTags);\n for (var t=0; t<tags.length; t++)\n {\n var theListItem =createTiddlyElement(theDateList,"li",null,null,null);\n var theLink = createTiddlyLink(theListItem,tags[t][0],true);\n var theCount = " (" + tags[t][1] + ")";\n theLink.appendChild(document.createTextNode(theCount));\n\n var theDropDownBtn = createTiddlyButton(theListItem," "+config.macros.miniTag.dropdownchar,this.tooltip.format([tags[t][0]]),onClickTag);\n theDropDownBtn.setAttribute("tag",tags[t][0]);\n }\n};\n\n\nsetStylesheet(\n ".quickopentag { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }\sn"+\n ".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }\sn"+\n ".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}\sn"+\n "a.miniTag {font-size:150%;}\sn"+\n "",\n"QuickOpenTagStyles");\n\n//}}}\n\n/***\n<html>&#x22bb; &#x22bd; &#x22c1; &#x25bc; &#x25be;</html>\n***/\n
/***\n| Name:|RenameTagsPlugin|\n| Purpose:|Allows you to easily rename tags|\n| Creator:|SimonBaird|\n| Source:|http://simonbaird.com/mptw/#RenameTagsPlugin|\n| Version:|1.0.1 (5-Mar-06)|\n\n!Description\nIf you rename a tiddler/tag that is tagging other tiddlers this plugin will ask you if you want to rename the tag in each tiddler where it is used. This is essential if you use tags and ever want to rename them. To use it, open the tag you want to rename as a tiddler (it's the last option in the tag popup menu), edit it, rename it and click done. You will asked if you want to rename the tag. Click OK to rename the tag in the tiddlers that use it. Click Cancel to not rename the tag.\n\n!Example\nTry renaming [[Plugins]] or [[CSS]] on this site.\n\n!History\n* 1.0.1 (5-Mar-06) - Added feature to allow renaming of tags without side-effect of creating a tiddler\n* 1.0.0 (5-Mar-06) - First working version\n\n!Code\n***/\n//{{{\n\nversion.extensions.RenameTagsPlugin = {\n major: 1, minor: 0, revision: 0,\n date: new Date(2006,3,5),\n source: "http://simonbaird.com/mptw/#RenameTagsPlugin"\n};\n\nconfig.macros.RenameTagsPlugin = {};\nconfig.macros.RenameTagsPlugin.prompt = "Rename the tag '%0' to '%1' in %2 tidder%3?";\n\n// these are very useful, perhaps they should be in the core\nif (!store.addTag) {\n store.addTag = function(title,tag) {\n var t=this.getTiddler(title); if (!t || !t.tags) return;\n t.tags.push(tag);\n };\n};\n\nif (!store.removeTag) {\n store.removeTag = function(title,tag) {\n var t=this.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)!=null) t.tags.splice(t.tags.find(tag),1);\n };\n};\n\nstore.saveTiddler_orig_tagrename = store.saveTiddler;\nstore.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n if (title != newTitle && this.getTaggedTiddlers(title).length > 0) {\n // then we are renaming a tag\n var tagged = this.getTaggedTiddlers(title);\n if (confirm(config.macros.RenameTagsPlugin.prompt.format([title,newTitle,tagged.length,tagged.length>1?"s":""]))) {\n for (var i=0;i<tagged.length;i++) {\n store.removeTag(tagged[i].title,title);\n store.addTag(tagged[i].title,newTitle);\n // if tiddler is visible refresh it to show updated tag\n story.refreshTiddler(tagged[i].title,false,true);\n }\n }\n if (!this.tiddlerExists(title) && newBody == "") {\n // dont create unwanted tiddler\n return null;\n }\n }\n return this.saveTiddler_orig_tagrename(title,newTitle,newBody,modifier,modified,tags);\n}\n\n//}}}\n\n
/***\n|Name|NewHereCommand|\n|Source|http://simonbaird.com/mptw/#NewHereCommand|\n|Version|1.0|\n\nCode originally by ArphenLin. Small tweak by SimonBaird\nhttp://aiddlywiki.sourceforge.net/NewHere_demo.html#NewHereCommand\nTo use this you must edit your ViewTemplate and add newHere to the toolbar div, eg\n{{{<div class='toolbar' macro='toolbar ... newHere'></div>}}}\n***/\n\n//{{{\n\nconfig.commands.newHere = {\n text: 'new here',\n tooltip: 'Create a new tiddler tagged as this tiddler',\n handler: function(e,src,title) {\n if (!readOnly) {\n clearMessage();\n var t=document.getElementById('tiddler'+title);\n story.displayTiddler(t,config.macros.newTiddler.title,DEFAULT_EDIT_TEMPLATE);\n story.setTiddlerTag(config.macros.newTiddler.title, title, 0);\n story.focusTiddler(config.macros.newTiddler.title,"title");\n return false;\n }\n }\n};\n\n//}}}
You can do this right here and now. Maybe you should print this out so it's easy to follow while working on screen. I presume you have some familiarity with TiddlyWiki basics. If you are having trouble following this then try this [[excellent tutorial|http://www.blogjones.com/TiddlyWikiTutorial.html]] first.\n\n!Getting started: Create some content\n* First hit "close others" to clear up your screen\n* Click "new tiddler" from the main menu.\n* Name the tiddler "~MyStuff" by typing into the title box.\n* Add some contents to the contents box, for example "This is my stuff"\n* Click the Done button to save the new tiddler. (We will return to this one later).\n* Let's say you just returned from a meeting and want to enter a couple of notes about it\n** Click "new tiddler"\n** Enter tiddler title as "Meeting with Leo - 12 Oct"\n** Add some meeting notes in the content box\n** Don't click Done just yet...\n\n!Tagging your content\n* Before you save the "Meeting with Leo..." tiddler let's add some tags\n** It's a meeting so let's give it a tag called "Meetings". Type Meetings in the tags box.\n** The meeting was with Leo so let's give it a tag called Leo. Type Leo in the tags box.\n** Let's say the meeting was about budget planning for example. Type Budget in the tags box.\n** So your tags box should look like this: {{{Meetings Leo Budget}}}\n*Now save the tiddler by clicking the Done button.\n\n!Using the tags\n*No big deal so far, right? Now we start to get into TagglyTagging territory.\n*Notice the tags appear above the title. They are italicised to indicate they don't exist yet (just like any other tiddler that doesn't exist yet).\n*Click on the Leo tag. You will open an empty tiddler called Leo.\n**Give it some content like "Leo Runcible, ext 1234. Likes cats". Or whatever.\n**Leo's a person so give him a tag of "People" by typing People in the tags box.\n**Save it by clicking Done.\n\n!Lets pick up the pace\n*Go back to your "Meeting with Leo..." tiddler.\n** Click on Meetings. Give Meetings a tag of ~MyStuff and save it.\n** Click on Budget. Give Budget a tag of Projects. Type something about the Budget project in the tiddler contents if you want. Save it.\n** Now above the Budget title click on the Projects tag. Give Projects a tag of ~MyStuff. Save that.\n* Now find your ~MyStuff tiddler. Look at the tagged tiddler list which appears at the bottom of the tiddler. It should be a list containing Meetings, People and Projects.\n* Close a few tiddlers and try navigating to your meeting tiddler from ~MyStuff using the tagged tiddler lists.\n\nThat's a quick look at the basics of TagglyTagging. Hopefully by now you have some idea about what TagglyTagging can do. Play around with it a little more if you like. Then continue to...\n\n!The New Here Button\n* Click on People.\n* Do you know any other people?\n* If so click, "new here" in the People tiddler\n** Notice that the tags box already contains the tag People. (This is what the new here button does. It creates a new tiddler with the tag already filled in).\n** Type someone's name and some notes on that person. Click Done to Save.\n* Add a couple more people for fun\n** Notice what happens to the "tagged tiddler" list at the bottom of the People tiddler.\n\n!Changing the structure of your data\nLet's look at how easy it is to change your structure. Suppose you decide that you want to have different types of Projects: Ongoing, Current and Future\n* Go to your Budget tiddler. Edit it and change the Projects tag to Ongoing Projects. Save.\n* Click the Ongoing Projects tag. Give that a tag of "Projects".\n* That's it. You're done. Well actually you haven't added the Ongoing and Future Projects but you can see that's not hard. Maybe click "new here" at the Projects tiddler. Or maybe just tag a project as Future Projects and do it from the bottom up.\n\n!Another example\n* Suppose your original meeting had an action item for you. Type it into the meeting notes as a wiki word or {{{[[}}}Do Something{{{]]}}}.\n* Now click on it and give it a tag of Todo. Type any extra information about how you're going to do it when it's due by etc into the contents. Put a reminder in there if you have ReminderPlugin installed.\n* Now make sure you can get to your Todos by tagging Todo tiddler as MyStuff.\n* For convenience let's put a link to MyStuff in your MainMenu. This will put all your new organised information at your fingertips at all times.\n\n!Sort Controls and Columns\n* If you mouse over a tagged tiddler list you should some buttons. Try them out. Note that if you save it remembers your choice.\n\n!Wrapup\nHopefully you can see that TagglyTagging gives you a powerful way to organise and structure your information. Don't forget that you can still use conventional wiki links to navigate around your tiddlers. TagglyTagging just gives you another way to do cool stuff with your TiddlyWiki.\n\n\n~~This tutorial is a draft. Feedback is welcome. Please [[contact|Contact]] me with comments and suggestions.~~\n
/***\nFor use in ViewTemplate \n***/\n//{{{\n\nconfig.macros.hideWhen = {};\nconfig.macros.hideWhen.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n if (eval(params[0]))\n place.style["display"] = 'none';\n}\n\nconfig.macros.hideUnless = {};\nconfig.macros.hideUnless.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n if (!eval(params[0]))\n place.style["display"] = 'none';\n}\n\n\n//}}}
/***\n|''Name:''|CloseUnsavedOnCancel|\n|''Sourse''|http://jackparke.googlepages.com/jtw.html#CloseUnsavedOnCancel|\n|''Version:''|2.0.8 (16-Apr-2006)|\n|''Author:''|SimonBaird|\n|''Adapted By:''|[[Jack]]|\n|''Type:''|Plugin|\n!Description\nWhen you click new tiddler then click cancel I think the new tiddler should close automatically. This plugin implements that behavious.\n\n!Revision History\n* 1.0.1 (11-Oct-2005) by SimonBaird\n* 2.0.8 Made 2.0.x compatible by Jack on 16-Apr-2006\n\n!Code\n***/\n//{{{\n\nconfig.commands.cancelTiddler.handler = function(event,src,title) {\n if(story.hasChanges(title) && !readOnly)\n if(!confirm(this.warning.format([title])))\n return false;\n story.setDirty(title,false);\n if (!store.tiddlerExists(title) || store.fetchTiddler(title).modifier==config.views.wikified.defaultModifier) {\n story.closeTiddler(title,false);\n store.removeTiddler(title)\n } else {\n story.displayTiddler(null,title);\n }\n return false;\n}\n\n//}}}
/***\nExamples:\n\n|Code|Description|Example|h\n|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|\n|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|\n|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|\n|{{{<<toggleTag TagName TiddlerName nolabel>>Click me}}}|Same but hide the label|<<toggleTag TagName TiddlerName nolabel>>Click me|\n(Note if TiddlerName doesn't exist it will be silently created)\n\n!Known issues\n* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing. Should it stick the tag in the edit box?\n\n!Code\n***/\n//{{{\n\n\n// This function contributed by Eric Shulman\nfunction toggleTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)==null) t.tags.push(tag)\n else t.tags.splice(t.tags.find(tag),1)\n}\n\n// This function contributed by Eric Shulman\nfunction isTagged(title,tag) {\n var t=store.getTiddler(title); if (!t) return false;\n return (t.tags.find(tag)!=null);\n}\n\nconfig.macros.toggleTag = {};\nconfig.views.wikified.toggleTag = {fulllabel: "[[%0]] [[%1]]", shortlabel: "[[%0]]", nolabel: "" };\n\nconfig.macros.toggleTag.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler instanceof Tiddler) {\n var tag = (params[0] && params[0] != '.') ? params[0] : "checked";\n var title = (params[1] && params[1] != '.') ? params[1] : tiddler.title;\n var hidelabel = (params[2] && params[2] != '.') ? true : false;\n var alsoRefreshStyles = (params[3] && params[3] != '.') ? true : false;\n\n var onclick = function(e) {\n if (!e) var e = window.event;\n if (!store.getTiddler(title))\n store.saveTiddler(title,title,"",config.options.txtUserName,new Date(),null);\n toggleTag(title,tag);\n\n store.setDirty(true); // so TW knows it has to save now\n\n story.forEachTiddler(function(title,element) {\n if (element.getAttribute("dirty") != "true") \n story.refreshTiddler(title,false,true);\n });\n\n if (alsoRefreshStyles)\n store.notifyAll();\n\n return false;\n };\n\n var lingo = config.views.wikified.toggleTag;\n\n // this part also contributed by Eric Shulman\n var c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick=onclick;\n place.appendChild(c);\n c.checked=isTagged(title,tag);\n\n if (!hidelabel) {\n var label = (title!=tiddler.title)?lingo.fulllabel:lingo.shortlabel;\n wikify(label.format([tag,title]),place);\n }\n }\n}\n\n//}}}\n
/***\nIntended for use in ViewTemplate\n!Examples\n|{{{<<runMacroIfTagged [[Groceries]] toggleTag Buy>>}}}|<<runMacroIfTagged [[Groceries]] toggleTag Buy>>|\n|{{{<<runMacroIfTagged Plugins toggleTag systemConfig>>}}}|<<runMacroIfTagged Plugins toggleTag systemConfig>>|\n***/\n//{{{\n\n// This function contributed by Eric Shulman\nfunction toggleTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)==null) t.tags.push(tag)\n else t.tags.splice(t.tags.find(tag),1)\n}\n\n// This function contributed by Eric Shulman\nfunction isTagged(title,tag) {\n var t=store.getTiddler(title); if (!t) return false;\n return (t.tags.find(tag)!=null);\n}\n\nconfig.macros.runMacroIfTagged = {};\nconfig.macros.runMacroIfTagged.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n if (isTagged(tiddler.title,params[0]))\n config.macros[params[1]].handler(place,params[1],params.slice(2),wikifier,paramString/*fixme*/,tiddler);\n}\n\n//}}}\n/***\n!Todo\n* paramString needs to have the first word removed from the front of it at fixme above\n\n\n***/\n\n
<!---\nSee TagglyTaggingViewTemplate\n--->\n<!--{{{-->\n<div class="toolbar">\n <!-- testing this one -->\n <!--<span style="padding-right:0.75em;" class='fakeButton' macro="viewHtml"></span>-->\n <!--<span style="padding-right:0.75em;" class='fakeButton' macro="viewAsJs"></span>-->\n\n <!-- experimental stuff. puts checkboxes in toolbar -->\n <span style="padding-right:0.75em;" class='fakeButton' macro="runMacroIfTagged Plugins toggleTag systemConfig"></span>\n\n <span macro='toolbar -closeTiddler closeOthers +editTiddler references jump refresh newHere'></span>\n</div>\n<div class="tagglyTagged" macro="hideSomeTags"></div>\n<div><span class='title' macro='view title'></span><span class="miniTag" \n\nmacro="miniTag"></span></div>\n<div class='subtitle'>Created <span macro='view created date [[DD-MM-YY]]'></span>, updated <span macro='view modified date [[DD-MM-\n\nYY]]'></span></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class="tagglyTagging" macro="tagglyTagging"></div>\n<!--}}}-->
<!--{{{-->\n<div class="toolbar" macro="toolbar +saveTiddler closeOthers cancelTiddler deleteTiddler"></div>\n<div class="title" macro="view title"></div>\n<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>\n<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>\n<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>\n<div class="editor" macro="edit text"></div>\n<br/>\n<!--}}}-->
/***\n| Title:|CommaSeparatedTags|\n| Source:|http://simonbaird.com/mptw/#CommaSeparatedTags|\n\n!Notes\n* Probably works badly if you have tags containing commas.\n* If you have a non-shadow EditTemplate you need replace {{{macro="edit tags"}}} with {{{macro="editCommaTags"}}} in EditTemplate.\n\n***/\n//{{{\n\n// copied mostly from config.macros.edit.handler\nconfig.macros.editCommaTags = {handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n if (tiddler instanceof Tiddler) {\n story.setDirty(tiddler.title,true);\n var e = createTiddlyElement(place,"input");\n if(tiddler.isReadOnly())\n e.setAttribute("readOnly","readOnly");\n e.setAttribute("edit","tags");\n e.setAttribute("type","text");\n e.value = tiddler.getTags().readBracketedList().join(", "); // <---- this is the tweak\n e.setAttribute("size","40");\n e.setAttribute("autocomplete","off");\n }\n}};\n\n// install in EditTemplate (won't work if you have a real EditTemplate. Then you must modify EditTemplate yourself)\nconfig.shadowTiddlers.EditTemplate = config.shadowTiddlers.EditTemplate.replace(/macro='edit tags'/,"macro='editCommaTags'"); \n\nString.prototype.readCommaList = function(unique) {\n var n = [];\n var split = this.split(",");\n for (var i=0;i<split.length;i++)\n n.pushUnique(split[i].trim(),unique);\n return n;\n};\n\n\nTiddlyWiki.prototype.saveTiddler_orig_commasep = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n if (typeof tags == "string") {\n tags = tags.readCommaList(); // I don't think it every gets here..\n }\n else {\n tags = tags.join(" ").readCommaList(); // seems strange because the commas are already in the array\n }\n\n return this.saveTiddler_orig_commasep(title,newTitle,newBody,modifier,modified,tags);\n};\n\n//}}}\n
<!---\n| Name:|~TagglyTaggingEditTemplate |\n| Version:|1.1 (12-Jan-2006)|\n| Source:|http://simonbaird.com/mptw/#TagglyTaggingEditTemplate|\n| Purpose:|See TagglyTagging for more info|\n| Requires:|You need the CSS in TagglyTaggingStyles to make it look right|\n--->\n<!--{{{-->\n<div class="toolbar" macro="toolbar +saveTiddler closeOthers -cancelTiddler deleteTiddler"></div>\n<div class="title" macro="view title"></div>\n<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>\n<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>\n<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>\n<div class="editor" macro="edit text"></div>\n<br/>\n<!--}}}-->
<!---\n| Name:|~TagglyTaggingEditTemplate |\n| Version:|1.1 (12-Jan-2006)|\n| Source:|http://simonbaird.com/mptw/#TagglyTaggingEditTemplate|\n| Purpose:|See TagglyTagging for more info|\n| Requires:|You need the CSS in TagglyTaggingStyles to make it look right|\n--->\n<!--{{{-->\n<div class="toolbar" macro="toolbar +saveTiddler closeOthers -cancelTiddler deleteTiddler"></div>\n<div class="title" macro="view title"></div>\n<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>\n<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>\n<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>\n<div class="editor" macro="edit text"></div>\n<br/>\n<!--}}}-->
You can have your own personal, self-contained wiki exactly* like this site in just a few seconds. Here's how to do it.\n# Right click on [[empty_mptw.html|./empty_mptw.html]]\n# Click 'Save link as...' and save the file somewhere locally. Name it whatever you want.\n# When the download is finished, double click the file to open it in your browser\nThat's it! You're now ready configure your page's title, menus etc, and add your own content by following the instructions in your new TiddlyWiki file.\n\n~~* Actually the "empty" file contains the TagglyTagging stuff plus Eric Shulman's ImportTiddlersPlugin. I've removed the more experimental plugins used on this site. See [[here|./empty_mptw.html#excludeSearch]] for a full list of what comes with the empty file.~~
The original, revolutionary, super cool, 100% javascript, microcontent, self-contained wiki in a web page, created and maintained by JeremyRuston. For more information visit http://www.tiddlywiki.com/. MonkeyPirateTiddlyWiki is running TiddlyWiki <<version>>.\n\nSo what is TiddlyWiki? In short it's a wiki implemented in javascript and stored in a single html file. But you can think of it as an ''electronic notepad from the future''. Try these links for more information:\n*[[TiddlyWiki Explanation (euicho.com)|http://euicho.com/index.php?p=123]]\n*[[TiddlyWiki Tutorial (blogjones.com)|http://www.blogjones.com/TiddlyWikiTutorial.html]]\n*[[Wikipedia Entry|http://en.wikipedia.org/wiki/Tiddlywiki]]\n\nOr try my new TiddlyWikiFAQ.
//{{{\n\nDate.prototype.getHours12 = function()\n{\n var h = this.getHours();\n return (h > 12 ? h-12 : ( h > 0 ? h : 12 ));\n}\n\nDate.prototype.getAmPm = function()\n{\n return (this.getHours() >= 12 ? "pm" : "am");\n}\n\n// Substitute date components into a string\n// should be a hijack but hopefull this or something like it will go into core...\nDate.prototype.formatString = function(template)\n{\n template = template.replace(/YYYY/g,this.getFullYear());\n template = template.replace(/YY/g,String.zeroPad(this.getFullYear()-2000,2));\n template = template.replace(/MMM/g,config.messages.dates.months[this.getMonth()]);\n template = template.replace(/0MM/g,String.zeroPad(this.getMonth()+1,2));\n template = template.replace(/MM/g,this.getMonth()+1);\n template = template.replace(/DDD/g,config.messages.dates.days[this.getDay()]);\n template = template.replace(/0DD/g,String.zeroPad(this.getDate(),2));\n template = template.replace(/DDth/g,this.getDate()+this.daySuffix());\n template = template.replace(/DD/g,this.getDate());\n template = template.replace(/0hh12/g,String.zeroPad(this.getHours12(),2)); // <--------- new\n template = template.replace(/hh12/g,this.getHours12()); // <--------- new\n template = template.replace(/0hh/g,String.zeroPad(this.getHours(),2));\n template = template.replace(/hh/g,this.getHours());\n template = template.replace(/0mm/g,String.zeroPad(this.getMinutes(),2));\n template = template.replace(/mm/g,this.getMinutes());\n template = template.replace(/0ss/g,String.zeroPad(this.getSeconds(),2));\n template = template.replace(/ss/g,this.getSeconds());\n template = template.replace(/[ap]m/g,this.getAmPm().toLowerCase()); // <--------- new\n template = template.replace(/[AP]M/g,this.getAmPm().toUpperCase()); // <--------- new\n return template;\n}\n\n//}}}\n\n
/***\n| Name:|TiddlerExcerptTooltip|\n| Source:|http://simonbaird.com/mptw/#TiddlerExcerptTooltip|\n| Author:|Simon Baird, adapted from original version posted to mailing list by Udo Borkowski|\n| Version:|1.0.0|\n| Description:|Make tooltip of tiddler links the first line or excerpt of the tiddler content|\n***/\n//{{{\n\n// adjust the following to your preference\nconfig.TiddlerExcerptTooltip = {\n trimLength: 60,\n dateFormat:"DD-MM-YY"\n}\n\n// %0 is title\n// %1 is modifier\n// %2 is modified date\n// %3 is first line\n// %4 is first so many characters\n// %5 is short modified date\n// %6 is short created date\n\n// firefox seems to trim the tooltip if it gets too long...\nconfig.messages.tiddlerLinkTooltip = "%1/%5: %4";\n\nconfig.messages.tiddlerEmpty = "(empty)";\n\nTiddler.prototype.getSubtitle = function()\n{\n var theModifier = this.modifier;\n if(!theModifier)\n theModifier = config.messages.subtitleUnknown;\n var theModified = this.modified;\n if(theModified)\n theModified = theModified.toLocaleString();\n else\n theModified = config.messages.subtitleUnknown;\n\n var m = this.text.match(/\ss*(.*)/);\n var firstLine = (m != null && m.length >= 1) ? m[1] : "";\n\n var contentExcerpt = this.text.prettyTrim(config.TiddlerExcerptTooltip.trimLength);\n if (contentExcerpt == "")\n contentExcerpt = config.messages.tiddlerEmpty;\n\n var shortModified = this.modified.formatString(config.TiddlerExcerptTooltip.dateFormat);\n var shortCreated = this.created.formatString(config.TiddlerExcerptTooltip.dateFormat);\n\n\n return config.messages.tiddlerLinkTooltip.format(\n [this.title,theModifier,theModified,firstLine,contentExcerpt,shortModified,shortCreated]); \n}\n\n// this lifted from TagUtils\nString.prototype.prettyTrim = function(len,prefix,postfix) {\n var result = this.trim().replace(/\sr\sn/g,' ').replace(/[\sn|\st]/g,' ');\n if (result.length > len - 3)\n return result.trim().substr(0,len) + '...';\n else\n return result;\n}\n\n//}}}\n
/***\n| Name:|AutoCorrectPlugin|\n| Created by:|SimonBaird|\n| Location:|http://simonbaird.com/mptw/#AutoCorrectPlugin|\n| Version:|1.0.0 (06-Apr-2006)|\n| Requires:|~TW2.x|\n!Description\nAuto-corrects a list of mistyped or misspelled words. The list of words can be in any tiddler tagged with autoCorrectWords\n!History\n* 06-Apr-06, version 1.0.0\n** split off from InstantTimestamp\n** read translations from a tiddler instead of javascript array\n!Notes\n* See also InstantTimestamp, BigListForAutoCorrect, MyAutoCorrectWords\n!Code\n***/\n//{{{\n\nversion.extensions.AutoCorrectPlugin = { major: 1, minor: 0, revision: 0, date: new Date(2006,4,6),\n source: "http://simonbaird.com/mptw/#AutoCorrectPlugin"\n};\n\nconfig.AutoCorrectPlugin = {\n wordListTag: "autoCorrectWords",\n excludeTags: [\n "noAutoCorrect",\n "CSS",\n "css",\n "systemConfig",\n "zsystemConfig",\n "Plugins",\n "Plugin",\n "plugins",\n "plugin",\n "javascript",\n "code"\n ],\n excludeTiddlers: [\n "StyleSheet",\n "StyleSheetLayout",\n "StyleSheetColors",\n "StyleSheetPrint"\n ]\n}; \n\nif (!Array.prototype.contains)\n Array.prototype.contains = function(item) {\n return (this.find(item) != null);\n };\n\nif (!Array.prototype.containsAny)\n Array.prototype.containsAny = function(items) {\n for (var i=0;i<items.length;i++)\n if (this.contains(items[i]))\n return true;\n return false;\n };\n\nString.prototype.upperCaseFirst = function() {\n return this.substr(0,1).toUpperCase() + this.substr(1);\n}\n\nTiddlyWiki.prototype.saveTiddler_mptw_autocorrect = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n\n tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;\n var conf = config.AutoCorrectPlugin;\n\n if ( !tags.containsAny(conf.excludeTags) \n && !tags.contains(conf.wordListTag)\n && !conf.excludeTiddlers.contains(newTitle) ) {\n\n var wordListTiddlers = store.getTaggedTiddlers(conf.wordListTag);\n for (var i=0;i<wordListTiddlers.length;i++) {\n var lines = wordListTiddlers[i].text.split(/$/m);\n for (var j=0;j<lines.length;j++) {\n if (lines[j].indexOf("->") > 0) {\n var replacer = lines[j].trim().split("->");\n newBody = newBody.replace(new RegExp(\n "\s\sb"+replacer[0]+"\s\sb","g"),replacer[1]);\n newBody = newBody.replace(new RegExp(\n "\s\sb"+replacer[0].upperCaseFirst()+"\s\sb","g"),replacer[1].upperCaseFirst());\n }\n }\n }\n }\n\n return this.saveTiddler_mptw_autocorrect(title,newTitle,newBody,modifier,modified,tags);\n}\n\n//}}}\n
/***\n| Name:|InstantTimestamp|\n| Created by:|SimonBaird|\n| Location:|http://simonbaird.com/mptw/#InstantTimestamp|\n| Version:|1.0.4 (06-Apr-2006)|\n| Requires:|~TW2.x|\n!Description\nIf you enter {ts} in your tiddler content (without the spaces) it will be replaced with a timestamp when you save the tiddler. Full list:\n* {ts} or {t} -> timestamp\n* {ds} or {d} -> datestamp\n* !ts or !t at start of line -> !!timestamp\n* !ds or !d at start of line -> !!datestamp\n(I added the extra ! since that's how I like it. Remove it from translations below if required)\n!Notes\n* Change the timeFormat and dateFormat below to suit your preference.\n* See also AutoCorrectPlugin\n!History\n* 06-Apr-06, version 1.0.4\n** removed the AutoCorrect stuff and put it in AutoCorrectPlugin\n* 05-Apr-06, version 1.0.3\n** now have exclusion by tag and tiddler name, probably less important here than in AutoCorrectPlugin\n* 05-Apr-06, version 1.0.2\n** put matches into array to and eval them to allow generic substitutions\n* 05-Apr-06, version 1.0.1\n** added ds for datestamp as suggested by DanielBaird\n** made case insensitive\n** Added translation for !t at start of line\n* 05-Apr-06, version 1.0.0\n** written after suggestion by Achim Wessling \n!Code\n***/\n//{{{\n\nversion.extensions.InstantTimestamp = { major: 1, minor: 0, revision: 4, date: new Date(2006,4,6),\n source: "http://simonbaird.com/mptw/#InstantTimestamp"\n};\n\nconfig.InstantTimestamp = {\n\n timeFormat: 'DD/0MM/YY 0hh:0mm',\n dateFormat: 'DD/0MM/YY',\n\n translations: [\n [/^!ts?$/img, "'!!'+now.formatString(config.InstantTimestamp.timeFormat)"],\n [/^!ds?$/img, "'!!'+now.formatString(config.InstantTimestamp.dateFormat)"],\n [/\s{ts?\s}/ig, "now.formatString(config.InstantTimestamp.timeFormat)"],\n [/\s{ds?\s}/ig, "now.formatString(config.InstantTimestamp.dateFormat)"]\n ],\n excludeTags: [\n "noAutoCorrect",\n "CSS",\n "css",\n "systemConfig",\n "zsystemConfig",\n "Plugins",\n "Plugin",\n "plugins",\n "plugin",\n "javascript",\n "code"\n ],\n excludeTiddlers: [\n "StyleSheet",\n "StyleSheetLayout",\n "StyleSheetColors",\n "StyleSheetPrint"\n ]\n}; \n\nif (!Array.prototype.contains)\n Array.prototype.contains = function(item) {\n return (this.find(item) != null);\n };\n\nif (!Array.prototype.containsAny)\n Array.prototype.containsAny = function(items) {\n for (var i=0;i<items.length;i++)\n if (this.contains(items[i]))\n return true;\n return false;\n };\n\nTiddlyWiki.prototype.saveTiddler_mptw_instanttimestamp = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n\n tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;\n var conf = config.InstantTimestamp;\n\n if ( !tags.containsAny(conf.excludeTags) \n && !conf.excludeTiddlers.contains(newTitle) ) {\n\n var now = new Date();\n var trans = config.InstantTimestamp.translations;\n for (var i=0;i<trans.length;i++) {\n newBody = newBody.replace(trans[i][0], eval(trans[i][1]));\n }\n }\n\n return this.saveTiddler_mptw_instanttimestamp(title,newTitle,newBody,modifier,modified,tags);\n}\n\n//}}}\n
Designed for use with AutoCorrectPlugin. Tag with autoCorrectWords to enable these translations. Sourced from http://www.actwin.com/rwmack/spelling.htm\n{{{\nabsense->absence\nacceptible->acceptable\naccessable->accessible\naccidently->accidentally\naccomadate->accommodate\naccompanyed->accompanied\naccross->across\nacheivement->achievement\nachievment->achievement\nacomplish->accomplish\nacquiantence->acquaintance\nacquited->acquitted\nactualy->actually\nacuracy->accuracy\naddmission->admission\nadolecent->adolescent\nadress->address\nadviced->advised\nagian->again\nagina->again\nagravate->aggravate\nagressive->aggressive\nahev->have\nahppen->happen\nahve->have\nalomst->almost\nalmsot->almost\nalotted->allotted\nalreayd->already\nalusion->allusion\nalwasy->always\nalwyas->always\namature->amateur\namke->make\namking->making\nanbd->and\nanual->annual\nanytying->anything\naquiantance->acquaintance\naquire->acquire\naquitted->acquitted\narangement->arrangement\narguement->argument\nathat->that\naudeince->audience\naveh->have\navhe->have\nawya->away\nbakc->back\nbaout->about\nbarin->brain\nbcak->back\nbecasue->because\nbecuase->because\nbefoer->before\nbegining->beginning\nbeleive->believe\nbera->bear\nboaut->about\nbusness->business\ncasion->casino\nceratin->certain\nchari->chair\nchasr->characters\nclaer->clear\nclaerer->clearer\nclaerly->clearly\nclera->clear\ncomittee->committee\ncomming->coming\ncommitee->committee\nconstatn->constant\ncoudl->could\ncoudln->couldn\ncpoy->copy\ncxan->can\ndael->deal\ndefinit->definite\nderam->dream\ndeside->decide\ndevide->divide\ndiea->idea\ndoens->doesn\ndoign->doing\ndonig->doing\ndreasm->dreams\ndrnik->drink\ndyas->days\nefel->feel\neles->else\nembarass->embarrass\nembarassing->embarrassing\nembarras->embarrass\nembarrasing->embarrassing\nened->need\nenxt->next\nerally->really\nesle->else\nethose->ethos\neveyr->every\nexagerate->exaggerate\nexagerated->exaggerated\nexagerating->exaggerating\nexistance->existence\neyar->year\neyars->years\neyasr->years\nfianlly->finally\nfidn->find\nfiel->file\nfiels->files\nfinancialy->financially\nfirends->friends\nfirts->first\nfomr->from\nforfiet->forfeit\nforhead->forehead\nforiegn->foreign\nfoudn->found\nfourty->forty\nfreind->friend\nfrist->first\nfulfilment->fulfillment\ngaranteed->guaranteed\ngaurd->guard\ngeneraly->generally\ngerat->great\ngodo->good\ngogin->going\ngonig->going\ngoign->going\ngoverment->government\ngoverner->governor\ngrammaticaly->grammatically\ngrammer->grammar\ngreif->grief\ngrwo->grow\ngraet->great\ngrat->great\ngreta->great\nguage->gauge\nguidence->guidance\nhace->have\nhaev->have\nhapened->happened\nharras->harass\nherad->heard\nhera->hear\nherat->heart\nheroe->hero\nheros->heroes\nhieght->height\nhismelf->himself\nhorus->hours\nhousr->hours\nhten->then\nhtere->there\nhtey->they\nhting->thing\nhtikn->think\nhtink->think\nhtis->this\nhumer->humor\nhvae->have\nhvea->have\nhvaing->having\nhwihc->which\nhwile->while\nhwole->whole\nhypocracy->hypocrisy\nhypocrasy->hypocrisy\nhypocrit->hypocrite\nidae->idea\nidaes->ideas\nidesa->ideas\nilogical->illogical\nimagenary->imaginary\nimagin->imagine\nimediately->immediately\nimense->immense\nimmitate->imitate\nincidently->incidentally\nincredable->incredible\nindependant->independent\nindispensible->indispensable\ninevatible->inevitable\ninevitible->inevitable\ninfinit->infinite\ninocence->innocence\nintelectual->intellectual\ninteligence->intelligence\ninteligent->intelligent\ninterpet->interpret\ninterupt->interrupt\nintrest->interest\nirelevent->irrelevant\niresistable->irresistible\niresistible->irresistible\niritable->irritable\niritated->irritated\nirresistable->irresistible\ninot->into\niwll->will\niwth->with\njeapardy->jeopardy\njstu->just\njsut->just\nknowlege->knowledge\nkonw->know\nkonws->knows\nknwo->know\nknwos->knows\nkwno->know\nlabatory->laboratory\nlabratory->laboratory\nleanr->learn\nlegitamate->legitimate\nleran->learn\nlerans->learns\nlevle->level\nliason->liaison\nlibary->library\nlible->liable\nlief->life\nlieing->lying\nliek->like\nliekd->liked\nliesure->leisure\nlightening->lightning\nlitature->literature\nliterture->literature\nlittel->little\nliuke->like\nliev->live\nlivley->lively\nloev->love\nlonelyness->loneliness\nlonley->lonely\nlonly->lonely\nlsat->last\nlveo->love\nlvoe->love\nmaintainance->maintenance\nmaintainence->maintenance\nmaintenence->maintenance\nmakse->makes\nmanuever->maneuver\nmariage->marriage\nmarrage->marriage\nmathamatics->mathematics\nmear->mere\nmedacine->medicine\nmena->mean\nmenas->means\nmessanger->messenger\nminature->miniature\nmischeivous->mischievous\nmisile->missile\nmkae->make\nmkaes->makes\nmkaing->making\nmkea->make\nmoent->moment\nmoeny->money\nmoer->more\nmorgage->mortgage\nmovei->movie\nmroe->more\nmuscels->muscles\nmysefl->myself\nmysterous->mysterious\nnaturaly->naturally\nnaturely->naturally\nneccessary->necessary\nnecesary->necessary\nneice->niece\nnickle->nickel\nnineth->ninth\nninty->ninety\nnkow->know\nnkwo->know\nnoticable->noticeable\nnoticeing->noticing\nnuculear->nuclear\nnuisanse->nuisance\nnusance->nuisance\noaky->okay\nobstacal->obstacle\nocasionally->occasionally\noccassionally->occasionally\noccurance->occurrence\noccured->occurred\noccurence->occurrence\noccurr->occur\noccurrance->occurrence\nocurr->occur\nocurrance->occurrence\nocurred->occurred\nocurrence->occurrence\noging->going\nomision->omission\nomited->omitted\nomre->more\nonot->onto\nonyl->only\noponent->opponent\noportunity->opportunity\noposite->opposite\noppinion->opinion\noptomism->optimism\norgin->origin\norginal->original\norginize->organize\notehr->other\nowrk->work\nowudl->would\npaide->paid\npalce->place\npamplet->pamphlet\nparalel->parallel (500)\nparrallel->parallel (700)\npasttime->pastime\npayed->paid\npeculure->peculiar\npeice->piece\npeom->poem\npeoms->poems\npeopel->people\npeotry->poetry\nperformence->performance\nperhpas->perhaps\nperhasp->perhaps\npermanent->permanent\npermissable->permissible\nperphas->perhaps\npersonel->personal\nplaned->planned\nplesant->pleasant\npoisin->poison\nposess->possess\nposession->possession\npossable->possible\npossably->possibly\npossesion->possession\npracticaly->practically\npracticly->practically\nprairy->prairie\npreceed->precede\nprefered->preferred\nprepair->prepare\nprepartion->preparation\npresense->presence\nprevelant->prevalent\npriviledge->privilege\nprobablly->probably\nprobelm->problem\nproceed->proceed\nproceedure->procedure\nprofesion->profession\nprofesor->professor\nproffesion->profession\nproffesor->professor\nprominant->prominent\nprophacy->prophecy\npropoganda->propaganda\npsycology->psychology\npublically->publicly\npumkin->pumpkin\npwoer->power\nqtuie->quite\nquantaty->quantity\nquizes->quizzes\nqutie->quite\nraelly->really\nreacll->recall\nrealy->really\nrealyl->really\nreciept->receipt\nrecieve->receive\nrecieving->receiving\nrecomend->recommend\nrecrod->record\nrediculous->ridiculous\nrefered->referred\nrefering->referring\nreferrence->reference\nregluar->regular\nrela->real\nrelaly->really\nreleive->relieve\nrememberance->remembrance\nrepatition->repetition\nrepresentive->representative\nrestraunt->restaurant\nrewriet->rewrite\nroomate->roommate\nrussina->russian\nrwite->write\nrythm->rhythm\nrythem->rhythm\nsacrafice->sacrifice\nsaftey->safety\nsalery->salary\nsargant->sergeant\nsasy->says\nschedual->schedule\nscirpt->script\nscripot->script\nsecretery->secretary\nseperate->separate\nseverley->severely\nsherif->sheriff\nshineing->shining\nshoudl->should\nshoudln->shouldn\nsieze->seize\nsimpley->simply\nsincerley->sincerely\nsinse->since\nsmae->same\nsmoe->some\nsnese->sense\nsoem->some\nsohw->show\nsophmore->sophomore\nsoudn->sound\nsoudns->sounds\nsotry->story\nsotyr->story\nsould->soul\nsoulds->souls\nspeach->speech\nsponser->sponsor\nstroy->story\nstoyr->story\nstopry->story\nstoreis->stories\nstorise->stories\nstnad->stand\nstpo->stop\nstrat->start\nstubborness->stubbornness\nsuccessfull->successful\nsuceed->succeed\nsuer->sure\nsumary->summary\nsupercede->supersede\nsuperintendant->superintendent\nsupose->suppose\nsupress->suppress\nsurley->surely\nsuround->surround\nsuseptible->susceptible\nswiming->swimming\nsyas->says\ntaeks->takes\ntahn->than\ntaht->that\ntath->that\ntalek->talk\ntalekd->talked\ntehy->they\ntemperment->temperament\ntemperture->temperature\ntendancy->tendency\nthgat->that\ntghe->the\nther->there\ntheri->their\nthge->the\nthier->their\nthign->thing\nthigns->things\nthigsn->things\nthikn->think\nthikns->thinks\nthikning->thinking\nthiunk->think\nthna->than\nthne->then\nthnig->thing\nthnigs->things\nthsi->this\nthsoe->those\nthta->that\ntiem->time\ntih->with\ntihkn->think\ntihs->this\ntimne->time\ntiome->time\ntje->the\ntjhe->the\ntkae->take\ntkaes->takes\ntkaing->taking\ntlaking->talking\ntobbaco->tobacco\ntodya->today\ntommorrow->tomorrow\ntongiht->tonight\ntowrad->toward\ntrafficed->trafficked\ntrafic->traffic\ntransfered->transferred\ntruely->truly\nturnk->trunk\ntwon->town\ntyhat->that\ntyhe->the\ntyrany->tyranny\nunconcious->unconscious\nunecessary->unnecessary\nunmistakeably->unmistakably\nuntill->until\nuseage->usage\nusefull->useful\nuseing->using\nusualy->usually\nvaccum->vacuum\nvaluble->valuable\nvegtable->vegetable\nvenemous->venomous\nvengance->vengeance\nveyr->very\nvigilence->vigilance\nvillin->villain\nvisable->visible\nvrey->very\nvyer->very\nvyre->very\nwaht->what\nwarrent->warrant\nwatn->want\nwehn->when\nweild->wield\nwendsay->Wednesday\nwensday->Wednesday\nwhcih->which\nwhereever->wherever\nwhic->which\nwhihc->which\nwholy->wholly\nwhta->what\nwief->wife\nwierd->weird\nwiht->with\nwintery->wintry\nwirting->writing\nwithdrawl->withdrawal\nwiull->will\nwnat->want\nwnats->wants\nwnated->wanted\nwohle->whole\nwokr->work\nworshipped->worshiped\nwoudl->would\nwriet->write\nwrok->work\nwroking->working\nwroet->wrote\nwtih->with\nyeild->yield\nytou->you\nyera->year\nyeras->years\nyersa->years\nyeasr->years\n}}}
<<list shadowed>>
/***\n|''Name:''|ForEachTiddlerPlugin|\n|''Version:''|1.0.5 (2006-02-05)|\n|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''Macros:''|[[ForEachTiddlerMacro]] v1.0.5|\n|''TiddlyWiki:''|1.2.38+, 2.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n!Description\n\nCreate customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.\n\n''Syntax:'' \n|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|\n|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|\n|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|\n|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|\n|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n\nSee details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].\n\n!Revision history\n* v1.0.5\n** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.\n** Support Firefox 1.5.0.1\n** Internal\n*** Make "JSLint" conform\n*** "Only install once"\n* v1.0.4 (2006-01-06)\n** Support TiddlyWiki 2.0\n* v1.0.3 (2005-12-22)\n** Features: \n*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) \n*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)\n** Enhancements:\n*** Improved error messages on InternetExplorer.\n* v1.0.2 (2005-12-10)\n** Features: \n*** context object also holds reference to store (TiddlyWiki)\n** Fixed Bugs: \n*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)\n* v1.0.1 (2005-12-08)\n** Features: \n*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".\n*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.\n*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).\n*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .\n*** Improved script evaluation (for where/sort clause and write scripts).\n* v1.0.0 (2005-11-20)\n** initial version\n\n!Code\n***/\n//{{{\n\n \n//============================================================================\n//============================================================================\n// ForEachTiddlerPlugin\n//============================================================================\n//============================================================================\n\n// Only install once\nif (!version.extensions.ForEachTiddlerPlugin) {\n\nversion.extensions.ForEachTiddlerPlugin = {major: 1, minor: 0, revision: 5, date: new Date(2006,2,5), source: "http://tiddlywiki.abego-software.de/#ForEachTiddlergPlugin"};\n\n// For backward compatibility with TW 1.2.x\n//\nif (!TiddlyWiki.prototype.forEachTiddler) {\n TiddlyWiki.prototype.forEachTiddler = function(callback) {\n for(var t in this.tiddlers) {\n callback.call(this,t,this.tiddlers[t]);\n }\n };\n}\n\n//============================================================================\n// forEachTiddler Macro\n//============================================================================\n\nversion.extensions.forEachTiddler = {major: 1, minor: 0, revision: 5, date: new Date(2006,2,5), provider: "http://tiddlywiki.abego-software.de"};\n\n// ---------------------------------------------------------------------------\n// Configurations and constants \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler = {\n // Standard Properties\n label: "forEachTiddler",\n prompt: "Perform actions on a (sorted) selection of tiddlers",\n\n // actions\n actions: {\n addToList: {},\n write: {}\n }\n};\n\n// ---------------------------------------------------------------------------\n// The forEachTiddler Macro Handler \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler.getContainingTiddler = function(e) {\n while(e && !hasClass(e,"tiddler"))\n e = e.parentNode;\n var title = e ? e.getAttribute("tiddler") : null; \n return title ? store.getTiddler(title) : null;\n};\n\nconfig.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n // config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);\n\n if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);\n // --- Parsing ------------------------------------------\n\n var i = 0; // index running over the params\n // Parse the "in" clause\n var tiddlyWikiPath = undefined;\n if ((i < params.length) && params[i] == "in") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "TiddlyWiki path expected behind 'in'.");\n return;\n }\n tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the where clause\n var whereClause ="true";\n if ((i < params.length) && params[i] == "where") {\n i++;\n whereClause = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the sort stuff\n var sortClause = null;\n var sortAscending = true; \n if ((i < params.length) && params[i] == "sortBy") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "sortClause missing behind 'sortBy'.");\n return;\n }\n sortClause = this.paramEncode(params[i]);\n i++;\n\n if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {\n sortAscending = params[i] == "ascending";\n i++;\n }\n }\n\n // Parse the script\n var scriptText = null;\n if ((i < params.length) && params[i] == "script") {\n i++;\n scriptText = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the action. \n // When we are already at the end use the default action\n var actionName = "addToList";\n if (i < params.length) {\n if (!config.macros.forEachTiddler.actions[params[i]]) {\n this.handleError(place, "Unknown action '"+params[i]+"'.");\n return;\n } else {\n actionName = params[i]; \n i++;\n }\n } \n \n // Get the action parameter\n // (the parsing is done inside the individual action implementation.)\n var actionParameter = params.slice(i);\n\n\n // --- Processing ------------------------------------------\n try {\n this.performMacro({\n place: place, \n inTiddler: tiddler,\n whereClause: whereClause, \n sortClause: sortClause, \n sortAscending: sortAscending, \n actionName: actionName, \n actionParameter: actionParameter, \n scriptText: scriptText, \n tiddlyWikiPath: tiddlyWikiPath});\n\n } catch (e) {\n this.handleError(place, e);\n }\n};\n\n// Returns an object with properties "tiddlers" and "context".\n// tiddlers holds the (sorted) tiddlers selected by the parameter,\n// context the context of the execution of the macro.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {\n\n var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);\n\n var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;\n context["tiddlyWiki"] = tiddlyWiki;\n \n // Get the tiddlers, as defined by the whereClause\n var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);\n context["tiddlers"] = tiddlers;\n\n // Sort the tiddlers, when sorting is required.\n if (parameter.sortClause) {\n this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);\n }\n\n return {tiddlers: tiddlers, context: context};\n};\n\n// Returns the (sorted) tiddlers selected by the parameter.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlers = function(parameter) {\n return this.getTiddlersAndContext(parameter).tiddlers;\n};\n\n// Performs the macros with the given parameter.\n//\n// @param parameter holds the parameter of the macro as separate properties.\n// The following properties are supported:\n//\n// place\n// whereClause\n// sortClause\n// sortAscending\n// actionName\n// actionParameter\n// scriptText\n// tiddlyWikiPath\n//\n// All properties are optional. \n// For most actions the place property must be defined.\n//\nconfig.macros.forEachTiddler.performMacro = function(parameter) {\n var tiddlersAndContext = this.getTiddlersAndContext(parameter);\n\n // Perform the action\n var actionName = parameter.actionName ? parameter.actionName : "addToList";\n var action = config.macros.forEachTiddler.actions[actionName];\n if (!action) {\n this.handleError(parameter.place, "Unknown action '"+actionName+"'.");\n return;\n }\n\n var actionHandler = action.handler;\n actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);\n};\n\n// ---------------------------------------------------------------------------\n// The actions \n// ---------------------------------------------------------------------------\n\n// Internal.\n//\n// --- The addToList Action -----------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n\n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);\n return;\n }\n\n // Perform the action.\n var list = document.createElement("ul");\n place.appendChild(list);\n for (var i = 0; i < tiddlers.length; i++) {\n var tiddler = tiddlers[i];\n var listItem = document.createElement("li");\n list.appendChild(listItem);\n createTiddlyLink(listItem, tiddler.title, true);\n }\n};\n\n// Internal.\n//\n// --- The write Action ---------------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n if (p >= parameter.length) {\n this.handleError(place, "Missing expression behind 'write'.");\n return;\n }\n\n var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n\n // Parse the "toFile" option\n var filename = null;\n var lineSeparator = undefined;\n if ((p < parameter.length) && parameter[p] == "toFile") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");\n return;\n }\n \n filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));\n p++;\n if ((p < parameter.length) && parameter[p] == "withLineSeparator") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");\n return;\n }\n lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n }\n }\n \n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);\n return;\n }\n\n // Perform the action.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);\n var count = tiddlers.length;\n var text = "";\n for (var i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n text += func(tiddler, context, count, i);\n }\n \n if (filename) {\n if (lineSeparator !== undefined) {\n lineSeparator = lineSeparator.replace(/\s\sn/mg, "\sn").replace(/\s\sr/mg, "\sr");\n text = text.replace(/\sn/mg,lineSeparator);\n }\n saveFile(filename, convertUnicodeToUTF8(text));\n } else {\n var wrapper = createTiddlyElement(place, "span");\n wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);\n }\n};\n\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {\n return {\n place : placeParam, \n whereClause : whereClauseParam, \n sortClause : sortClauseParam, \n sortAscending : sortAscendingParam, \n script : scriptText,\n actionName : actionNameParam, \n actionParameter : actionParameterParam,\n tiddlyWikiPath : tiddlyWikiPathParam,\n inTiddler : inTiddlerParam\n };\n};\n\n// Internal.\n//\n// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of \n// the given path.\n//\nconfig.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {\n if (!idPrefix) {\n idPrefix = "store";\n }\n var lenPrefix = idPrefix.length;\n \n // Read the content of the given file\n var content = loadFile(this.getLocalPath(path));\n if(content === null) {\n throw "TiddlyWiki '"+path+"' not found.";\n }\n \n // Locate the storeArea div's\n var posOpeningDiv = content.indexOf(startSaveArea);\n var posClosingDiv = content.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1)) {\n throw "File '"+path+"' is not a TiddlyWiki.";\n }\n var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);\n \n // Create a "div" element that contains the storage text\n var myStorageDiv = document.createElement("div");\n myStorageDiv.innerHTML = storageText;\n myStorageDiv.normalize();\n \n // Create all tiddlers in a new TiddlyWiki\n // (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)\n var tiddlyWiki = new TiddlyWiki();\n var store = myStorageDiv.childNodes;\n for(var t = 0; t < store.length; t++) {\n var e = store[t];\n var title = null;\n if(e.getAttribute)\n title = e.getAttribute("tiddler");\n if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)\n title = e.id.substr(lenPrefix);\n if(title && title !== "") {\n var tiddler = tiddlyWiki.createTiddler(title);\n tiddler.loadFromDiv(e,title);\n }\n }\n tiddlyWiki.dirty = false;\n\n return tiddlyWiki;\n};\n\n\n \n// Internal.\n//\n// Returns a function that has a function body returning the given javaScriptExpression.\n// The function has the parameters:\n// \n// (tiddler, context, count, index)\n//\nconfig.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {\n var script = context["script"];\n var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";\n var fullText = (script ? script+";" : "")+functionText+";theFunction;";\n return eval(fullText);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {\n var result = [];\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);\n tiddlyWiki.forEachTiddler(function(title,tiddler) {\n if (func(tiddler, context, undefined, undefined)) {\n result.push(tiddler);\n }\n });\n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {\n var message = "Extra parameter behind '"+actionName+"':";\n for (var i = firstUnusedIndex; i < parameter.length; i++) {\n message += " "+parameter[i];\n }\n this.handleError(place, message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? -1 \n : +1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? +1 \n : -1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {\n // To avoid evaluating the sortClause whenever two items are compared \n // we pre-calculate the sortValue for every item in the array and store it in a \n // temporary property ("forEachTiddlerSortValue") of the tiddlers.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);\n var count = tiddlers.length;\n var i;\n for (i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);\n }\n\n // Do the sorting\n tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);\n\n // Delete the temporary property that holds the sortValue. \n for (i = 0; i < tiddlers.length; i++) {\n delete tiddlers[i].forEachTiddlerSortValue;\n }\n};\n\n\n// Internal.\n//\nconfig.macros.forEachTiddler.trace = function(message) {\n displayMessage(message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {\n var message ="<<"+macroName;\n for (var i = 0; i < params.length; i++) {\n message += " "+params[i];\n }\n message += ">>";\n displayMessage(message);\n};\n\n\n// Internal.\n//\n// Creates an element that holds an error message\n// \nconfig.macros.forEachTiddler.createErrorElement = function(place, exception) {\n var message = (exception.description) ? exception.description : exception.toString();\n return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);\n};\n\n// Internal.\n//\n// @param place [may be null]\n//\nconfig.macros.forEachTiddler.handleError = function(place, exception) {\n if (place) {\n this.createErrorElement(place, exception);\n } else {\n throw exception;\n }\n};\n\n// Internal.\n//\n// Encodes the given string.\n//\n// Replaces \n// "$))" to ">>"\n// "$)" to ">"\n//\nconfig.macros.forEachTiddler.paramEncode = function(s) {\n var reGTGT = new RegExp("\s\s$\s\s)\s\s)","mg");\n var reGT = new RegExp("\s\s$\s\s)","mg");\n return s.replace(reGTGT, ">>").replace(reGT, ">");\n};\n\n// Internal.\n//\n// Returns the given original path (that is a file path, starting with "file:")\n// as a path to a local file, in the systems native file format.\n//\n// Location information in the originalPath (i.e. the "#" and stuff following)\n// is stripped.\n// \nconfig.macros.forEachTiddler.getLocalPath = function(originalPath) {\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#");\n if(hashPos != -1)\n originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s"); \n return localPath;\n};\n\n// ---------------------------------------------------------------------------\n// Stylesheet Extensions (may be overridden by local StyleSheet)\n// ---------------------------------------------------------------------------\n//\nsetStylesheet(\n ".forEachTiddlerError{color: #ffffff;background-color: #880000;}",\n "forEachTiddler");\n\n//============================================================================\n// End of forEachTiddler Macro\n//============================================================================\n\n\n//============================================================================\n// String.startsWith Function\n//============================================================================\n//\n// Returns true if the string starts with the given prefix, false otherwise.\n//\nversion.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.startsWith = function(prefix) {\n var n = prefix.length;\n return (this.length >= n) && (this.slice(0, n) == prefix);\n};\n\n\n\n//============================================================================\n// String.endsWith Function\n//============================================================================\n//\n// Returns true if the string ends with the given suffix, false otherwise.\n//\nversion.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.endsWith = function(suffix) {\n var n = suffix.length;\n return (this.length >= n) && (this.right(n) == suffix);\n};\n\n\n//============================================================================\n// String.contains Function\n//============================================================================\n//\n// Returns true when the string contains the given substring, false otherwise.\n//\nversion.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.contains = function(substring) {\n return this.indexOf(substring) >= 0;\n};\n\n//============================================================================\n// Array.indexOf Function\n//============================================================================\n//\n// Returns the index of the first occurance of the given item in the array or \n// -1 when no such item exists.\n//\n// @param item [may be null]\n//\nversion.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.indexOf = function(item) {\n for (var i = 0; i < this.length; i++) {\n if (this[i] == item) {\n return i;\n }\n }\n return -1;\n};\n\n//============================================================================\n// Array.contains Function\n//============================================================================\n//\n// Returns true when the array contains the given item, otherwise false. \n//\n// @param item [may be null]\n//\nversion.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.contains = function(item) {\n return (this.indexOf(item) >= 0);\n};\n\n//============================================================================\n// Array.containsAny Function\n//============================================================================\n//\n// Returns true when the array contains at least one of the elements \n// of the item. Otherwise (or when items contains no elements) false is returned.\n//\nversion.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAny = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (this.contains(items[i])) {\n return true;\n }\n }\n return false;\n};\n\n\n//============================================================================\n// Array.containsAll Function\n//============================================================================\n//\n// Returns true when the array contains all the items, otherwise false.\n// \n// When items is null false is returned (even if the array contains a null).\n//\n// @param items [may be null] \n//\nversion.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAll = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (!this.contains(items[i])) {\n return false;\n }\n }\n return true;\n};\n\n\n} // of "install only once"\n\n// Used Globals (for JSLint) ==============\n// ... DOM\n/*global document */\n// ... TiddlyWiki Core\n/*global convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, \n displayMessage, endSaveArea, hasClass, loadFile, saveFile, \n startSaveArea, store, wikify */\n//}}}\n\n\n/***\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n***/\n\n
@@color(#04f): ▣ 잡노마드 @@ (Jobnomad) &nbsp; &nbsp; @ 2016-10-31 @\n한 직장에 오래 머물지 못하는 사람을 일컫던 '잡노마드'라는 단어는 최근 새로운 뜻으로 재조명되고 있다. 깊어지는 취업난으로 인해 작업(Job)을 찾아 유목민(Nomad)처럼 떠도는 젊은이들이 늘어나는 탓이다. 일을 구하기 위해 해외로 떠나거나 자신만의 가치를 가지고 새로운 길을 개척하는 이들을 가르켜 잡노마드라 일컫는다. 경제 침체로 인한 구직이 더욱 어려워지면서 잡노마드 역시 늘어날 전망이다.\n\n@@color(#04f): ▣ 제 3의 공간 @@ &nbsp; &nbsp; @ 2017-02-07 @\n-. 제 1의 공간 ; 주거 공간\n-. 제 2의 공간 ; 근무 공간\n-. 제 3의 공간 ; 집이 아닌 곳에서의 내 집 같은 분위기를 가진 공간\n&nbsp; &nbsp; / 감각적 체험과 오락적 요소가 가미된 정서적 부가가치의 중요성을 기업에서는 주목\n\n@@color(#04f): ▣ 제로섬게임 @@ (zero-sum game)\n\n@@color(#04f): ▣ 전역변수 @@(Global Variable)\n\n@@color(#04f): ▣ 좌표계 @@\n/ CCW(counter-clockwise; 반시계 방향) ; 오른손좌표계 - OpenGL, 3dsMax\n/ CW(clockwise;시계 방향) ; 왼쪽좌표계 - Direct3D\n\n@@color(#04f): ▣ 짐벌락 @@ (gimbal lock) @ 2014-07-30 @\n ; 3개의 축에 대한 회전 연산을 동시에 적용하는 경우, 행렬을 사용하는 한 축이 소실되는 현상\n&nbsp; &nbsp; ⇒ 사원수를 사용하면 이러한 짐벌락 현상을 막을 수 있음 !\n\n@@color(#04f): ▣ 증강현실 @@(Augmented Reality)은\n실제 환경에 가상 물체를 합성하여 원래의 환경에 존재하는 사물처럼 보이도록 하는 기술로, 가상의 공간과 사물만을 대상으로 하는 기존의 가상현실과 달리 현실세계를 가상세계와 접목하여 보완해 줌
寸:마디 촌. 鐵:쇠 철. 殺:죽일 살. 人:사람 인\n'촌철'은 손가락 한 개 폭 정도의 무기를 뜻한다.\n\n@@color(#04f): 한 치의 쇠로 사람을 죽인다. 간단한 경구(警句)로 어떤 일의 급소를 찔러 사람을 감동시킴 @@\n'촌철살인'은 날카로운 경구(驚句)를 비유한 것으로, 상대방의 허를 찌르는 한 마디의 말이 수천 마디의 말을 능가한다는 뜻임\n\n&nbsp; &nbsp; '학림옥로(學林玉露)'라는 책은 남송(南宋) 때의 나대경(羅大徑)이, 찾아오는 손님들과 주고받은 청담(淸談)을 시동(侍童)에게 기록하게 한 것으로 '天地人'의 세 부분 18권으로 구성된 책이다. \n\n&nbsp; &nbsp; 그 중 '지부(地部)' 제7권 <살인수단(殺人手段)>에는 종고선사(宗藁禪師)가 다음과 같이 선(禪)을 논하여 말했다. \n\n&nbsp; &nbsp; "어떤 사람이 무기를 한 수레 가득 싣고 왔다고 해서 살인을 할 수 있는 것이 아니다. 나는 오히려 한 치도 안 되는 칼만 있어도 사람을 죽일 수 있다." \n宗藁論禪曰 譬如人載一車兵器 弄了一件 又取出一件來弄便不是殺人手段 我則只 有寸鐵 便可殺人. \n\n이것은 그가 선(禪)의 요체(要諦)를 갈파한 말이므로, 살인이라고 하지만 물론 칼날로 상처를 입히는 것을 뜻한 것이 아니라, '자기의 마음 속의 속된 생각을 없애는 것'을 뜻한다. \n\n아직 크게 깨달음에 이르지 못한 사람은 그 속된 생각을 끊어버리기 위하여 성급하게 이것 저것 대답을 해 오겠지만, 정신의 집중이 부족하기 때문에 모두 날것들뿐이다. \n\n그와 같은 칼로는 몇 천 몇 만 개나 되는 깨달음의 경지에 이르지 못한다. \n \n모든 일에 온 몸과 온 정성을 다 기울일 때, 충격적으로 번득이는 것, 이것이야말로 큰 깨달음인 것이다. \n[출전] '學林玉露' \n
@@color(#04f): 트위터 @@(twitter)는\n* 40글자 정도의 단문으로 소통하는 블로그이며, 좀 더 쉽게 말씀드리면 40자 글자 제한이 있는 댓글놀이이다.\n** 하지만 단순 댓글이 아니라 각자 자신의 홈을 갖고있고, follow-follower라는 싸이월드 일촌 시스템과 유사한 기능이 있습니다. 이 관계를 맺고있으면 상대방이 쓴글만 모아서 자동으로 받아 볼 수가 있다.\n** 무엇보다도 전세계 동시적으로 다양한 문화권의 사람들이 실시간으로 간편하게 소통할 수 있기 때문에 점차적으로 이용자가 확대되고 있다.\n\n* 트위터(twitter)는 2006년 3월 샌프란시스코의 벤처기업인 오비어스 코프가 오픈한 마이크로 블로그 형식의 소셜 네트워킹 서비스(SNS)이다.\n** 긴 글을 쓰고 사진과 동영상까지 넣을 수 있는 블로그와 달리 트위터는 최대 140자까지만 글을 쓸 수 있고, 사진이나 동영상 그리고 음악 등은 하이퍼텍스트 링크 형식으로만 삽입할 수 있다.\n*** 이를 바탕으로 실시간 소통하는 이 서비스는, 연예계와 정치권에 이어 기업의 마케팅 수단으로도 확산되는 추세. 형식은 블로그와 유사하지만 단문 위주로 커뮤니케이션을 할 수 있어 쉽고, 상대방의 동의를 얻어야 친구가 되는 타 SNS와는 달리, 상대방의 수락 없이도 본인이 원하는 사람들이 보내는 메시지를 받아 볼 수 있다. \n*** 그래서 블로그가 아니라 마이크로 블로그라고 불린다. 대신 트위터는 소셜 네트워킹(Social Networking) 즉 인맥을 만드는 기능이 매우 강한 것이 특징이다. 트위터에서는 따라가기(follow)라고 불리는 기능이 있다. 상대방의 마이크로 블로그에 가서 따라가기 버튼을 누르면 그 다음부터는 그 사람이 쓰는 글이 나에게 자동으로 업데이트 된다.\n** 짦은 문장만 쓸 수 있는 대신, SMS 스마트폰 메신저로 블로그에 글을 올릴 수도 있다.(하지만 트위터는 국내에서는 SMS로 글을 올릴 수 없는 상태이다) 즉 이동성이 뛰어난 유무선 인터넷 서비스이다. 이동성이 뛰어나고, 내 친구가 업데이트하는 글을 실시간으로 받아볼 수 있기 때문에 전세계에서 현재 벌어지는 일을 쉽게 파악할 수 있다.\n*** 트위터의 파워는 바로 '엄청난 속도의 전파력'에서 나온다. 2009년 여름 이란 대통령 선거 이후 테헤란에서 휴대전화 단문메시지 송수신 서비스가 중단됐지만, 트위터를 통해 시위장소와 시위 전개 상황을 실시간으로 이란 네티즌들에게 알리면서 시위를 주도하는 등 변혁을 촉발하는 역할을 해냈다. 또한 중국 우루무치에서 대규모 유혈사태가 발생했을 때 그 어떤 언론보다 신속하게 사태를 전한 것은 다름아닌 트위터였다..\n** 초기의 트위터는 유명인의 소셜 네트워크 서비스(SNS)라는 점에서 호기심을 자극하는 수준이었다면 이제는 언론보다 어 빠른 정보 파급력으로 세력을 넓혀가고 있다.\n*** 기업 CEO들도 상황을 파악하고 소비자들의 목소리를 직접 듣는 도구로 트위터를 활용하고 있다. 눈치빠른 정치인들은 트위터를 통해 국민과 소통하겠다고 나서고 있다. 초기에는 허진호 네오위즈인터넷 대표, 이찬진 드림위즈 대표 등 주로 IT관련 CEO들이 트위터에 합류했다. 최근에는 박용만 두산 인프라코어 회장도 직접 트위터를 개설해 눈길을 끌고 있다.\n\n! 트위터의 문제점\n* 하지만 트위터는 기본적으로 하지만 트위터는 영어 서비스이다. 트위터는 전세계의 언어 중 영어와 일본어 서비스 2개만 하고 있을 뿐이다. 일본어 서비스를 하는 이유는 초기 투자자 가운데 일본기업이 있기 때문이다.\n** 이런 점 때문에 한국 사용자들이 겪는 불편은 꽤 많다. 트위터에 가입을 하면 한국인은 3천만명이 넘는 외국인 가운데 한국인을 찾아야 하는데 이것이 쉽지 않다. 그래서 가입만 해놓고 잠을 자는 회원들이 적지 않다.\n* 한글 검색이 잘 안되고, 트위터와 연동돼 돌아가는 어플리케이션에서는 한글이 깨지는 현상이 나타난다. 브라우저에 따라 한글로 사람 이름을 검색하면 검색이 나오지 않는 현상이 있고, 한글로 글을 검색했을 때도 비슷한 현상이 나타났다.\n** 한국의 이슈가 무엇인지 알 수 없다는 문제점이 있다. 트위터는 메인 페이지에 Trending Topics 라는 것이 나오는데 여기에 실리는 것이 모두 영어이다. 따라서 한국에서는 무엇이 이슈인지 알 수가 없다.\n* 국내 트위터 이용자들은 휴대폰 SMS로 문자를 올리는 것도 불가능합니다. 현재 미국과 영국, 캐나다 등 3나라에서만 휴대폰 SMS 서비스가 가능한 상태다. \n** 트위터는 영어권 서비스이고, 회사 규모가 직원 60명에 불과한 중소기업인데다, 전세계가 단일 채널이어서 야후나 구글처럼 그 나라의 실정에 맞춘 나라별 서비스를 제공하기는 쉽지 않을 것 같다.\n** 그래서 한국한 트위터들이 우후죽순 생겨나고 있다. 이런 현상은 한국뿐 아니라 전세계적으로 공통된 현상이다. 독일, 일본, 중국 등 대부분의 국가에 트위터와 유사한 서비스들이 생겨나 트위터와 경쟁을 하고 있다.\n\n! 국내 트위터 유사 사이트\n* 기타\n** twitter.com ; 김연아, 오바마\n** playtalk.net ; 이외수\n* __트위터와 연동성을 강조한 야그__\n** 가장 트위터와 유사하고 트위터와 연동이 잘 되는 사이트는 야그( www.yagg.kr )이다. 야그는 트위터와 문법체계가 비슷하고 트위터에 가지 않고도 트위터에 글을 올리거나, 트위터에 온 글을 볼 수 있어 인기이다.\n** 또한 야그 사용자는 웹은 물론 휴대전화 문자메시지(SMS)로 내 블로그에 글을 올릴 수 있다. 애플의 iTunes에서 아이폰/아이팟용 어플리케이션을 무료로 내려받으면 아이폰에서 쉽게 야그를 할 수 있다.\n** 한국 내 이슈를 알 수 있다는 점도 장점이고, 한국내의 지역별 검색기능도 갖추고 있어 우리 동네 사람들과 친구를 쉽게 맺을 수 있다.\n* __비즈니스 인맥 쌓기 링크나우__ \n** 비즈니스에 특화된 SNS도 있다. ‘링크나우’ ( www.linknow.kr )는 개인 프로필을 기반으로 한 비즈니스 인맥 서비스다. 출생지, 학교, 직장 등 개인 정보를 회원끼리 공유하면서 인맥을 형성하며, 일촌이 되면 연락처는 물론이고 서로의 인맥까지 공유할 수 있다. 특히 근무 회사나 이메일이 바뀌는 등 신상변동이 있더라도 일촌들에게 자동으로 통보돼 이를 바로 알 수 있는 게 장점이다. 10만명 가까운 CEO, 직장인, 전문직 종사자들이 인맥을 구축하고, 비즈니스 파트너를 찾거나 채용을 하는데 자주 애용하고 있다. \n* __NHN에 인수된 미투데이__ \n** 네이버에 인수된 미투데이( www.me2day.com )도 트위터와 유사한 마이크로 블로그 사이트이다. 그렇지만 이 서비스는 친구 신청을 하고 상대가 동의해야 친구가 되는 방식을 해왔기 때문에 오히려 싸이월드와 비슷하다. 하지만 마이크로 블로그라는 점에서는 트위터와 유사한 점이 많다.\n* __음식점 정보가 있는 런파이프__\n** 싸이월드의 공동창업자로 유명한 이동형 나우프로필 대표가 지난 4월 비공개 서비스를 시작한 ‘런파이프’( www.runpipe.com )도 있다. 특히 '구독로그' 기능은 뉴스사이트나 개인 블로그 등을 직접 불러와 등록하면 해당 기사를 계속 구독할 수 있으며 '퍼뜨리기' 기능으로 관계를 맺은 다른 파이프에게 전달할 수 있다. \n* __SK텔레콤의 토씨__\n** SK텔레콤이 서비스하고 있는 토씨(www.tossi.com)는 한국형 모바일 블로그다. 휴대전화에서 문자를 써서 수신자(#7055)에게 보내면 웹 블로그에 등록된다. 또 친구 새 글이나 댓글이 등록되면 글 내용을 20자까지 SMS로 알려주며, 문자로 답하면 해당글에 댓글을 바로 달 수 있다. 인터넷에 접속하지 않아도 문자를 보내는 것만으로도 유선-무선에 있는 블로거들과 의견을 주고받을 수 있다. 현재 토씨의 가입자수는 25만여명이며 전체 회원 중 64%가 10~20대이다. \n\n! 트위터 = MSN + 세이클럽 + 심심이 전체공개\n트위터 안의 트위터들, 점점 늘어나고 있습니다. \n그렇다면 대체 누가 트위터 안으로 모이는 걸까요?\n&nbsp; &nbsp; 1. MSN 메신저의 '남몰래 로그인' 기능을 즐겨 사용하던 위기관리 전문가 정모 차장. 트위터는 '남몰래 로그인' 기능이 자동지원됩니다. \n&nbsp; &nbsp; 2. 세이클럽에서 채팅방을 만들어 친구가 들어오길 기다리며 지루한 시간을 보내야 했던 홍보대행사 김AE. 트위터는 채팅방을 만들 필요도 없고 지루하게 친구가 들어오기만을 기다릴 필요도 없습니다. 첫째, 채팅방은 늘 개설되어 있으며, 둘째, 그 채팅방에는 누구나 들어갈 수 있으며 (더군다나 '남자 사절' '안 예쁜 여자 입장 불가' '19세 이상 입장 불가'와 같은 입장 제한 조건도 없습니다) 셋째, 마음에 드는 친구가 있으면 따로 말을 걸면 되며 넷째, 그렇지 않은 경우에는 계속해서 눈팅을 즐기면 됩니다. \n&nbsp; &nbsp; 3. 심심이에게 말걸기 좋아하던 OOO 마케팅 부서의 오대리. 트위터에서는 살아있는 사람에게도 말을 걸 수 있습니다. \n\n\n\n
@@color(#04f): ▣ Kick-Off Meeting @@; 첫 회의\n'Kick-off'란 미식축구에서 게임을 시작하기 위해 상대편 진영으로 공을 차는 것을 의미합니다. 따라서 'Kick-off Meeting'이란 어떤 프로젝트나 업무를 시작할 때 담당자들이 모두 모여 향후 업무 분담 및 진행 계획 등을 논의하는 첫 회의를 의미합니다.\n
@@color(#04f): 참고 ; 취업을 위한 준비 @@\n1) 이력서 ; 진실되고, 간결하고, 구체적으로 기술( 이력서 1장 + 자기소개서 1장) \n&nbsp; &nbsp; 50% 정도 차지 - 정해진 형태가 없는 경우, 일반적인 형식 사용(*.hwp, *.doc)\n2) 인터뷰 성공전략 ; 복장, 언어, 태도, 화법 ==> 취업 의지 표명\n&nbsp; &nbsp; -0. 능력, 적응성, 적합성을 기본으로 면접자를 파악 \n&nbsp; &nbsp; -1. 면접 전 제출한 이력서를 숙지하라.\n&nbsp; &nbsp; -2. 해당 기업/ 시장에 대한 거시적인 자료를 다시 확인하라.\n&nbsp; &nbsp; -3. 자기소개(3분 speech)가 성공의 열쇠\n3) 성장배경 + 교육 + 자격/특기 + 경험 + 성과 + 역량 >> To 조직(직무)\n4) 인터뷰 종료후 ; Post Analysis, Thank you Note
1. 진입하고자 하는 시장에 강력한 No.1이 있다면 No.1을 할만한 새로운 시장을 구축하라 - 범주의 원칙\n2. 좋은 제품보다는 시장 진입을 먼저하라 - 리더의 원칙\n3. 시장에 첫 번째로 진입하는 것보다는 고개의 머릿속에 첫 번째로 인식시켜라 - 기억의 원칙\n4. 잠재 고객이 기억하기 쉬운 언어로 메시지를 전달해라 - 집중의 원칙\n&nbsp; &nbsp; -. Net Market 창출 ; 신시장 구축 -> 브랜드 네이밍 -> 시장확장\n&nbsp; &nbsp; -. Segment tation\n&nbsp; &nbsp; -. Brand Naming\n&nbsp; &nbsp; -. Extension\n\n
@ 98. 7. 10. 18:00-18:40 @\n1. 현장 현황 파악 -> 일지작성(Data입력); 전일 반성과 오늘 목표 설정\n2. 공장 설비의 작동원리; 인성파악 -> 정확한 판단 및 예측\n3. 도면과 자료정리 -> 일의 진행 과정을 체크\n4. 자재정리 -> 재고 파악과 부품확보\n5. 구매요령\n&nbsp; &nbsp; 1) 대화 = 문서작성 - -> 대인관계 유지, 발전(논리성)\n&nbsp; &nbsp; 2) 시장조사 철저\n6. 수리, 의뢰 요령 \n&nbsp; &nbsp; 1) 예정가 산정.\n&nbsp; &nbsp; 2) 업체 기술 수준 파악\n\n\n
@@color(#04f): ▣ HDR @@ (High Dynamic Range) ; \n디지털 영상 처리 과정에서 ''높은 명암 비율을 제공해 높은 수준의 영상 표현''을 가능케 해주는 기술. HDR 기술은 밝은 부분은 더 밝게, 어두운 부분은 더 어둡게 보정하여 기존 로컬 디밍(local dimming) 방식보다 더 명암비를 향상시켜 보다 현실감 있는 영상을 제공하는 기술이다. 태양의 강렬한 빛부터 어두운 밤하늘의 별빛까지 현실에 존재하는 다양한 밝기를 표현할 수 있다.\n\n@@color(#04f): ▣ Hook @@; \nWindows가 응용프로그램에게 message를 전달하기 전에 system message queue에서 message를 가로채는 과정 \n\n@@color(#04f): ▣ HUD @@ (Head-Up Display) ; \n-.UI에서 HUD란 반투명한 계기판으로 형태로 말 그대로 고개를 든 채 확인할 수 있는 정보창\n&nbsp; &nbsp; (대개)닫기 버튼 없이 항상 화면에 떠 있으면서 정보를 보여주는 UI로\n&nbsp; &nbsp; UnitFrame(얼굴+HP/MP+상태) 이나 QuickSlot 같은 것들이다.\n-.UI를 만들다보면 갯수가 너무 많아져서 전부 로딩하려면 메모리와 시간낭비가 심해지기 때문에 처음부터 로딩해둬야 하는 것과 나중에 로딩해도 되는 것들을 분류할 필요가 있는데, 이때 HUD 류는 무조건 로딩해야하는 분류에 속한다.\n-.참고; gpgstudy의 'hud란 무엇인가요??' \n&nbsp; &nbsp; http://www.gpgstudy.com/forum/viewtopic.php?p=124838\n-.전투기 조종석 앞 유리창에 있는 투명한 패널에 속도ㆍ고도ㆍ무장정보 등 각종 비행정보 및 임무정보를 조종사의 전방 상단에 제공한다.\n\n@@color(#04f): ▣ HMD @@ (Head mounted Display) ; 안경처럼 머리에 쓰고 대형 영상을 즐길 수 있는 영상표시\n휴대하면서 영상물을 대형화면으로 즐기거나 수술이나 진단에 사용하는 의료기기에 적용할 수 있는 차세대 영상표시 장치로, 군사용, 항공기용으로 개발됐던 HUD (Head-up Display)에서 발전된 형태이다.\n
@@color(#04f): 핵심성공요인 @@(CSF:Critical Success Factor) \n출처; http://opps1004.egloos.com/1286335 - 웁스천사 마케팅 이야기\n참고; [[목표관리(MBO)]]\n\nJohn F. Rocket은 최고 경영자의 정보 요구를 이해하기 위한 수단으로 CSF(Critical Success Factors)를 개발하였다. 이 방법은 기업 전체에 적용되며, 하나의 보다 광범위한 기획 방법으로 확장되어 전략 정보 기획방법의 필수요소로 발전되었다. \n\n핵심 성공 요인(CSF)의 정의를 살펴보면 “개인, 부서 또는 조직에게 성공적인 결과를 가져옴으로써 경쟁력 있는 업무 수행을 보장해 줄 수 있는 한정된 수의 영역”을 의미한다. 따라서, 사업이 번창하고 경영자의 목표가 달성될 수 있기 위해 반드시 성공하여야 할 몇몇 주용 영역의 의미가 있다. CSF는 한 기업의 활동이 성공하기 위해서 갖추거나 수행되어야 할 주요요소를 의미하고 한 기업이 선택한 전략의 방향 뿐만 아니라 산업/경제의 전반적인 구조에 의해 결정된다.\n\nCSF는 경영의 목적(Goal) 및 경영 목표(Objective)를 성취하는데 있어서 중요한 내부 항목으로 경영 목적(Goal)을 위한 수단의 역할을 수행한다. Goal이 비교적 안정적이고 외부적인 경향이 강하다면, CSF는 상대적으로 불안정하며 내부적인 경향이 강하다. 따라서, CSF는 경영의 중요한 가정(Critical Assumption)이 변하면 함께 조정되어야 한다. 또한, CSF는 경영목표를 달성하기 위한 수단(Means)이며, 성과의 달성은 측정될 수 있어야 한다.\n\nCSF는 다음과 같은 특징들을 가지고 있다.\n * CSF는 계층적 구조를 가지고 있다. 최고 경영자, 사업 단위 등으로 세분화될 수 있다.\n * 내적인 CSF와 외적인 CSF, 감시적인 기능의 CSF와 구축적 기능의 CSF로 대별할 수 있다. \n\nCSF가 도출되는 5가지 원천은 아래와 같다.\n * 해당 산업 : 산업 자체의 특성으로부터 도출되는 CSF\n * 경쟁적 전략 또는 업계 내의 위치 : 기업의 특정 활동 범위 또는 역할에 의해 도출되거나 또는 고유한 전략에 의해 도출되는 CSF\n * 환경적 요인 : 환경적 변화 요인에 의해 도출되는 CSF\n * 일시적 요인 : 단기적 위기 상황에 의해 도출되는 CSF로 취기에 관련된 CSF는 중요할 수는 있지만 수명은 짧음\n * 관리직의 위치 : 어떤 CSF는 특정 관리자에게 관련되어 있음\n\n마지막으로 CSF는 경영자에게 2가지 효과를 준다. \n * 경영자로 하여금 가장 중요한 활동에 초점을 맞출 수 있게 한다.\n * 경영자로 하여금 그들의 정보 요구를 심사 숙고하게 도와준다.\n
@@color(#04f): ▣ 라이파이 @@(LI-FI) &nbsp; &nbsp; @ 2016-10-25 @\n1초당 1GB의 데이터를 전송해 3초면 영화 한 편을 모두 다운받을 수 있는 세상이 도래할 전망이다. LED 조명의 가시광선 파장을 이용해 최고속으로 데이터를 전송하는 차세대 무선 네트워크, 라이파이(Li-Fi)를 통해서다. 2011년 영국 에든버른 대학의 헤럴드 하스 교수가 '라이트 피델리티(Light-Fidelity)'라고 칭해 주목바기 시작했다. 기존의 무선 통신 기술이 전파를 이용하는 데 비해 라이파이는 눈에 보이는 빛을 이용해 와이파이보다 100배 빠른 속도를 자랑한다.\n\n@@color(#04f): ▣ 럭키 백(Lucky Bag, 복주머니) 이벤트 @@ ; 재미 + 실속을 추구 &nbsp; &nbsp; @ 2013-03-18 @\n일본의 복주머니 행사에서 유래된 럭키백 이벤트는 가방에 상품을 무작위로 담아 일정 금액에 판매하는 방식의 이벤트이다.\n\n일본 백화점이나 가게에서는 연초 이 같은 럭키백 이벤트가 흔하게 열린다. 일본어로 '후쿠부쿠로'라고 하는 럭키백은 에도시대 상인들이 남은 물건을 한 봉투에 담아 싼 가격에 팔던 데서 유래됐다. \n\n물건이 담긴 봉투안에 무엇이 들어있는 지 알 수 없기 때문에 그야말로 복불복이지만, 얼마나 값진 물건을 '득템'하느냐에 따라 1년 운을 점친다는 의미도 있다. \n\n럭키백이 인기를 끄는 이유는 저렴한 가격으로 더 고가의 상품을 구입할 수 있는 장점과 어떤 상품이 들어있는지 몰라 소비자들의 궁금증이 유발되기 때문이다. \n\n@@color(#04f): ▣ 레벨 @@(level) &nbsp; &nbsp; @ 2010-03-25 @\n일반적으로 게임의 한 스테이지. 혹은 가상의 장소(예를 들어 건물의 층)에 대응되는 한 묶음의 게임 데이터, 또는 게임 캐릭터의 등급을 나타낼 때도 사용된다.\n\n@@color(#04f): ▣ 렌더러 @@(renderer) &nbsp; &nbsp; @ 2010-03-25 @\n이미 만들어진 애니메이션을 재생하는 것이 아니라, 일련의 데이터로부터 특정한 절차를 거쳐 화면에 그려주는 소프트웨어.\n\n@@color(#04f): ▣ 로하스 @@(LOHAS : Lifestyles Of Health And Sustainability) &nbsp; &nbsp; @ 2011-09-25 @\n대표적인 친환경적 생활양식으로 건강과 환경, 사회의 지속적인 발전 등을 심각하게 생각하는 소비자들의 생활 패턴을 가리키며, 웰빙에 사회와 환경을 추가해, 친환경적이고 합리적인 소비패턴을 지향한다.\n\n@@color(#04f): ▣ 롱테일@@ (The Long Tail) 법칙은 &nbsp; &nbsp; @ 2010-12-06 @\n결과물의 80%는 조직의 20%에 의하여 생산된다는 파레토법칙에 배치하는 것으로 80%의 사소한 다수가 20%의 핵심 소수보다 뛰어난 가치를 창출한다는 이론이다.\n\n\n
@@color(#04f): ▣ E3 @@ (Electronic Entertainment Expo) &nbsp; &nbsp; @ 2010-03-25 @\n해마다 6월 말에 열리는 게임 업계의 무역 쇼. 새로운 게임이 E3에서 첫 선을 보이는 경우가 종종 있고, 그 때문에 게임을 마케팅할 때 E3의 중요성이 커지고 있다.\n\n@@color(#04f): ▣ ESG 경영 @@ &nbsp; &nbsp; @ 2017-08-23 @\n국제단체 '책임투자원칙 주도기구(Principles for Responsible Investment, PRI)'가 주도하고 있는 ESG는 \n''환경(Environment)'', ''사회(Social)'', ''지배구조(Governance)'' 3가지 측면을 말하며, 이 조건이 건전한 기업에 투자를 해야 한다는 개념이다. 특히 __국내에서는 기업 지배구조 투명성에 대한 투자자들의 요구가 높아지고 있다.__\n이에 한국거래소는 하반기부터 공시에서 코스피 상장사의 ESG 등급을 공개하기로 했다. ESG에 근거한 투자는 일본과 미국 등을 비롯해 세계적인 추세로 자리 잡고 있다. \n\n
자신이 뜻하는 바를 이루려고 노력을 하지만 그러한 노력을 방해하는 환경에 휩쓸려 자신을 통제하지 못하는 잘못 (from '재무설계를 위한 행동재무학')\n\n중요한 의사결정 순간에 비이성적이고, 비효율적인 판단으로 손실을 초래하는 경우가 종종 있다. 이러한 자기통제오류는 마치 습관처럼 우리의 삶 깊숙이 뿌리내리고 있어서 미래의 풍요로운 삶을 이루지 못하도록 방해한다. 미래를 위한 저축을 방해하는 자기통제오류가 발생하는 이유는 사람들이 미래보다 현재에 소비하는 것을 더 선호하기 때문이다. 이와 같이 현재에 소비하고자 하는 유혹을 이기고 미래의 원하는 삶을 추구하기 위해서는 적절한 자기통제가 필요하며 이를 위해서는 자기통제를 도와주는 시스템의 구축이 필요하다.\n\n자기통제 시스템을 구축하기 위한 방법으로\n첫 번째, 먼저 저축하고 나중에 소비하는 선저축 후소비의 시스템을 유지하기 위해서 가입한 저축금액이 급여통장에서 자동이체 되어 먼저 빠져나가도록 하자.\n두 번째, 한 달 소비에 대한 예산을 짜고 그 예산의 범위 내에서 지출하도록 신용카드 사용을 체크하고 체크카드나 현금을 사용하도록 하자.\n세 번째, 귀찮더라도 매일 가계부를 작성하도록하자.\n네 번째, 통장마다 꼬리표를 달아서 저축상품의 목적을 분명히 하자.\n\n출처; 신용사회 2010.01.(Vol.328) Money 실전 재테크
@@color(#04f): 아이패트 @@는 애플의 태블릿...\nIT기술 동향과 트렌드를 미리 만나볼 수 있는 자리인 CES 2010에서 올해 주목하고 있는 분야는 3가지, 스마트폰, 3DTV 그리고 태블릿이다. 작년 CES에서 주인공은 스마트폰이었고, 여기에 2가지 목록이 추가\n\n''아이패드'' ; 터치에 최적화된 아이팟 터치나 아이폰에서 화면을 확장(더 큰 화면에 더 많은 즐거움을 제공)\n-. 모바일 운영체제인 아이폰 OS를 사용, 아이패드에서 키패드란 있으면 좋고 없어도 상관없는 입력 디바이스일 뿐\n-. 플래시 미지원, 엑티브 X 불가, 멀티태스킹 등이 지원되지 않는다는 점으로 웹 환경이나 사용성에서 제약이 오는 단점이 있지만, 이로인해 누르는 순간 반응하는 터치속도, 빠른 웹 로딩과 즉각적인 애플리케이션의 반응들이 이 단점에서 나오는 것이기도 하다. \n-. 기기 자체보다는 아이폰과 아이팟 터치의 주 수입원이 제품에 있는 게 아니라 앱 스토어를 통해 제공하는 디지털 콘텐츠에 있음\n-. ''PC가 아닌 멀티미디어 기기'' ; 간편함과 신속함이 장점\n&nbsp; &nbsp; 간단하게 게임을 즐기거나 웹서핑을 위해 PC에 전원을 넣을 필요 없이 아이패드를 사용\n&nbsp; &nbsp; 아이패드로 책을 읽고 음악을 듣고 영화를 보고 싶으면 Wi-Fi를 통해 곧 바로 감상\n\n\n''태블릿 PC'' ; 키보드라는 입력체계를 떼어내고 터치스크린을 붙인 것\n-. 마우스와 키보드라는 입력 체계를 가진 PC를 그대로 계승\n-. 오랜 시간동안 구축된 PC환경을 고스란히 사용할 수 있다는 장점이 있지만, 키보드와 마우스에 특화된 소프트웨어를 터치로 조작한다는 건 매우 어렵고도 스트레스를 유발\n* UMPC ; 2001년 MS의 키패드를 제거하고 터치 디스플레이로 동작하는 노트북\n** 그 당시 인터넷 환경과 칩셋 기술력으로는 얇고 가벼우며 오래가야한다는 모바일 디바이스의 특성을 소화해내기에는 버거운 게 현실이었고 결국 실패.\n** PC환경에서 인터넷은 보급화 되었지만, 기동성과 휴대성 측면에서 무선 LAN 환경이 좋지 못했고 짧은 구동시간과 열약한 터치 인터페이스는 태블릿을 노트북보다 못한 존재로 만들어버리고 말았다. \n* MID(모바일 인터넷 디바이스); 인텔이 모바일 시장을 타깃으로 아톰 프로세서를 선보이고 이를 이용한 모델로 계속해서 개선된 모델들이 출시.\n** MID도 PC의 운영체제를 그대로 계승했다는 한계점으로 인해 현재까지도 시장 가능성만을 제시\n
!전략적 사회공헌 3대 유형\n''공유 가치형'' ; 정보격차 해소 주력\n인텔은 나이지리아 내 200개교에 'Classmate'라는 저가 노트북을 개발하여 공급하는 한편, 안정적인 전력공급을 위해 디젤발전기를 학교에 설치하고 무선 인터넷 환경도 제동했다. 또한 마이크로소프트는 부유층에는 '정품판매 방식'을 쓰고 빈곤층에는 정부 및 시민단체와 협력 네트워크를 구축해 '무상지원방식'을 사용하였다.\n\n''시장창조형'' ; 빈부격차 해소 주력\nGE는 인도에서 초간편형 심전계 'MAC400'을 현지기술로 개발해 미국 내 가격의 10분의 1 수준인 1000달러에 판매하였고 필립스는 진흙으로 만든 전통적인 '출라(Chulha)'를 개선해 집안 내 안전사고를 해결하는 한편 신시장 창출에도 성공하였다.\n\n''문제해결형'' ; 의료격차 해소 주력\n미국의 머크는 1987년 실명을 유발하는 회선사상충증 치료제인 멕티잔을 필요한 사람에게 필요한 만큼 지원하겠다는 '멕티잔 기부 프로그램'을 발표, 프로그램이 시작된 이래 25억 개의 약을 기부하여 약 7억 명의 환자를 치료하였으며 현재에도 아프리카, 남미지역에서 연간 8000만 명의 환자가 혜택을 받고 있다. 국내기업으로는 매일유업의 특수이유식, CJ의 저단백밥의 경우가 의료격차 해소에 중점을 둔 기업 활동을 꼽힌다.\n\n출처; 신용사회 2010.02.(Vol.329) Information 존경하는 기업의 조건
@@color(#04f): ▣ xfer @@ ; Transfer &nbsp; &nbsp; @ 2010-07-15 @\n
@@color(#04f): ▣ 빈티지 @@(Vintage) @ 2011-06-15 @\n수십 년의 세월이 지나도 변하지 않는 미적 가치와 우월성을 가진 것 (from American Heritage Dictionary)\n-> 희소성의 흔적, 시간의 흔적이 가치를 창조\ncf. 앤티크(Antique) ; 일반적으로 100년 이상의 시간이 지난 것 \n\n@@color(#04f): ▣ 블루슈머 @@(Bluesumer) @ 2010-08-04 @\n블루 오션(Blue Ocean) 전략이란 공급자 중심의 한정된 시장 안에서 경쟁우위를 달성하는 레드 오션(Red Ocean) 전략에서 벗어나, 구매자 중심의 인식의 재구축을 통한 가치혁신으로 미개척된 잠재 수요를 발견하고 이를 타켓으로 다른 기업과 차별화된 가치곡선을 형성하여 비약적인 이익을 이끌어내는 전략을 뜻한다. 간단히 말해 새로운 성장의 잠재력을 지닌 새로운 시장을 만들어 내는 것을 뜻한다. \n블루 오션에서 파생된 단어 블루슈머(Bluesumer ; 신소비 집단)란 '경쟁자가 없는 시장의 새로운 소비자'를 뜻하는 말로, 블루 오션(Blue Ocean)과 소비자를 지칭하는 단어인 Consumer를 합성한 신조어이다.
@@color(#04f): ▣ 한약 1제((劑)는 20첩(貼)이다. @@ @ 2018-02-21 @\n2첩으로 3번을 먹기 때문에, 30(~40)봉지 정도가 나온다.\n하루 3번을 먹으면 10일, 아침, 저녁으로 먹으면 15일을 복용한다.\n\n@@color(#04f): ▣ 희토 @@란 @ 2011-03-12 @\n란탄, 세륨, 디스프로슘 등의 17종의 원소를 포함하는 희귀금속을 포함한다. 희토는 자기부상열차, 전기 자동차 등 모든 첨단제품에 필수적으로 사용되며 '공업의 미타민', '공업의 조미료', '21세기의 황금' 등으로 불리는 전략자원으로 자리잡고 있다. 일찍이 덩샤오핑은 중동에 석유가 있다면 중국에는 희토가 있다고 언급하며 그 전략적 중요성을 강조한 바 있다.\n
@@color(#04f): ▣ 경제 주체 @@ = 가계 + 기업(= 민간) + 정부(= 국민) + 해외(= 국제) + 금융 \n\n@@color(#04f): ▣ 미들맨 @@ (middleman)&nbsp; &nbsp; @ 2011-07-12 @\n중개상 혹은 중개인이라는 사전적 의미를 넘어 국가 간, 기업 간, 개인 간의 국제적 교역을 촉진시키는 역할을 하는 전문가 그룹을 통칭하는 개념으로, 변호사, 컨설팅회사, 통역사, 디자이너, 애널리스트, 은행 등\n\n@@color(#04f): ▣ 미시경제학 @@ (微視經濟學, Microeconomics) &nbsp; &nbsp; @ 2011-07-03 @\n- 사회를 구정하는, 하나의 시장안에서 이루어지는 개별경제주체들의 상호작용을 연구\n- 미시경제학의 주된 분석대상은 ''1.수요자 2.공급자 3.시장구조''\n- 시장구조는 경쟁시장, 독점시장, 과점시장, 독점적 경쟁시장 등으로 구분되면, 각 시장 구조에서의 균형점이 어떻게 결정되는지를 설명\n\n@@color(#04f): ▣ 거시경제학 @@ (巨視經濟學, Macroeconomics) &nbsp; &nbsp; @ 2011-07-03 @\n- 모든 개별경제주체들의 상호작용의 결과로 인해 나타나는 한 나라의 경제전체 현상에 대한 분석.\n- 국민소든, 물가, 실업, 환율, 국제수지 등 경제 전반에 영향을 미치는 변수들의 결정요인과 이러한 변수들간의 상호관련성을 연구하는 분야.\n- ''경제정상이론''과 ''경기변동이론''은 거시경제학에서의 주요 연구대상\n- 정부의 개입이 불필요하다고 보는 고전학파와 시장은 불안정하므로 정부의 적극적인 개입을 통해야한다는 케인즈학파로 구분\n\n@@color(#04f): ▣ 미시자본주의 @@ (마이크로 캐피털리즘, Micro-Capitalism) 란 &nbsp; &nbsp; @ 2011-07-03 @\n자본주의적 발전에서 자본집중의 원리에 따라 대기업이 중심이 되는 고전적인 발전이 아니라, 소기업을 중심으로 발전이 이루어지기 때문에 ''「자본의 분산」이 강화되는 발전''을 말한다. 그러나 이 명칭은 주변화 혹은 비공식화와도 구별되어야 한다. 주변화 marginalization나 비공식화 informalization 와도 구변되어야 한다. 주변화나 비공식화는 이원적 구조의 강화를 의미하나, 미시자본주의는 이원구조의 약화를 의미하기 때문이다.\n- 강력한 개인 재산권, 신용시장의 확대 그리고 기업가정신의 육성에 의해 탄생\n- 마이크로 캐피털리즘은 재능 있는 사람들이 선진국으로 이민을 가지 않고 고국에 머무르게 되면 이들이 공공의료, 교육, 사회간접자본 그리고 산업 발전과 같은 문제들을 외국에 의존하지 않고 직접 해결할 수 있을 것으로 기대\n\n@@color(#04f): ▣ 중력 모형 @@ (gravity model)\n사회학자들이 뉴턴의 만유인력의 법칙을 원용하여 두 지역 간의 인구와 상품 이동 등 상호작용을 중력 모형의 원리에 비춰 설명하는 이론. 중력 모형이 제시하는 기본 원리는 두 도시의 공간적 상호작용의 견인력은 도시의 인구 규모에 비례하며 두 도시 간의 거리의 제곱에 반비례한다.\n\n@@color(#04f): ▣ 집적 경제 @@ (agglomeration economies)\n어떤 지역에 산업이나 인구가 집중하면 서로가 분업하게 되거나 노동력 및 소비시장이 생기는 한편으로 도로 등의 시설이 만련되고 투자 및 생활 효율이 높아지는 것\n\n\n!!경제지수\n@@color(#04f): ▣ 국제재산권지수 @@ (International Property Rights Index)\n전세계 GDP의 95퍼센트를 차지하는 70개 국가를 대상으로 한 조사와 통계 자료를 바탕으로 계산되며, 법적·정치적 환경, 물적재산권, 지적재산권의 세 가지 항목으로 구성된다. \n\n@@color(#04f): ▣ 세계평화지수 @@ (Global Peace Index)\n군사 예산, 무기 수출, 폭력범죄의 정도, 전쟁 사상자, 죄수 규모, 조직범죄 수준, 잠재적인 테러 공격 위험, 사회적·정치적 갈등, 인접 지역이나 국가와의 상대적 관계 등 23개 지표를 종합해 평화를 수치화한 것으로 한국은 2010년 43위를 기록했다.\n\n@@color(#04f): ▣ 인간개발지수 @@ \n유엔 국제연합개발계획이 매년 세계 각국의 문맹률, 평균수명, 1인당 실질 국민소득 등 인간의 삶과 관련된 여러 가지 지표를 조사해 인간개발 성취 정도를 평가하는 지수를 말한다. 인간의 행복이나 발전 정도는 소득 수준과 비례하지 않고, 소득을 얼마나 현명하게 사용하느냐에 달려 있음을 보여주는 지수다.\n\n
@@color(#04f): ▣ CCU @@ (ConCurrent User) ; 동시접속자\n정의 : 동일한 시간대에 게임에 접속해 있는 유저를 말한다. 흔히 로그인 서버를 기준으로 산정한다.\n\n@@color(#04f): ▣ ARPU @@ (Average Revenue Per User) ; 가입자당 평균 매출액, 즉 객단가\n정의 : "일정기간"의 매출액을 그 기간내의 BU로 나누어 산출한 수치\n&nbsp; &nbsp; 한달을 기준으로 해서 유저가 평균적으로 결제한 금액으로 산정.\n\n@@color(#04f): ▣ ACCU @@ (Average ConCurrent User) ; 평균동접\n\n@@color(#04f): ▣ PCCU @@ (Peak ConCurrent User) ; 최고동접\n\n@@color(#04f): ▣ BU @@ (Buying User) = PU(Paying User) ; 구매자, 한번이라도 캐쉬 아이템을 구입한 적이 있는 유저\n주로 정액제 비지니스 모델을 사용하는 게임에서 활용하는 용어\n정액 비용을 결제한 유저(PU), 캐쉬 아이템을 구입한 유저(BU)\n\n@@color(#04f): ▣ UV @@ (Unique Visitor) ; 한번이라도 접속을 한 유저\n&nbsp; &nbsp; &#8226; MMO UV 산출법 : PCCU * 3.935\n&nbsp; &nbsp; &#8226; CASUAL UV 산출법 : PCCU * 7.45\n\n@@color(#04f): ▣ BUrate @@ (Buying User rate) = BU/UV\n\n\nSTATUS\n보통 게임내에서의 줄임말로 "스탯" 이라고들 많이 한다.\n뜻은 지위, 상태 라고 알고있으면 괜찮겠네요\n게임 내에서 캐릭터에 관련된 각종 수치나 정보를 보여주는 시스템의 일종으로 활용된다\n게임 내에서 캐릭터가 레벨업을 할 경우 스탯포인트가 부여되고,\n이때 원하는 캐릭터로 성장시키기 위해 힘, 민첩, 지능, 지혜등의 스탯에 투자한다.\n\nHP(Health Point)\n보통 인터페이스에서 빨강의 긴띠모양을 지칭하는 것이다. 캐릭터의 Health Point 수치를 확인할 수 있다. 이 포인트는 캐릭터의 체력을 의미한다\n\nMP(Mana Point)\n보통 인터페이스에서 파랑의 긴띠보양을 지칭하는 것이다. 캐릭터의 Mana Point 수치를 확인할 수 있다. 이 포인트는 마법에 관여한다.\n\nSTR\nStrength의 약자로 쓰인다. 물리적인 힘을 뜻하며 실제 게임 내에서도 대부분 물리 공격력에 영향을 주는 능력치로 설정되어있다.\n\nDEX\nDextenfity의 약자로 쓰인다. 손재주, 민첩 등의 뜻이며 게임 내에서는 주로 원거리 공격력에 관련된 영향을 주는 능력치로 설정되어 있다.\n\nINT\nIntelligence의 약자로 쓰인다. 지능 등을 뜻하며 게임 내에서는 주로 마법에 관련된 영향을 주는 능력치로 설정되어있다.\n\nCritical\n이 단어의 뜻은 여러 가지이지만 게임 내에서는 결정적인, 치명적인의 뜻으로 쓰이고 있다. 치명타라는 의미로 Critical Hit 라는 단어가 게임 내에서 종종 쓰이고 있다.\n\nEXP\nExperience의 약자로 쓰인다. 경험 이란 뜻을 가지고 있으며 주로 몬스터를 사냥하거나 퀘스트를 해결하면 얻을 수 있고 레벨업의 도구로써 쓰인다.\n\nNPC(non-player character)\n게임 상에서 사용자가 제어할 수 없는 캐릭터이다. 상인, 창고관리인이나 퀘스트를 주는 캐릭터 등이 있다.\n\n던전(Dungeon)\n몬스터를 잡거나 퀘스트를 수행하기 위한 장소를 의미한다.\n\n파티(Party)\n온라인상 의 사용자들이 그룹을 만들어 함께 캐릭터를 키우는 시스템. 이때 레벨이 낮을 경우 파티를 통해 현재 레벨로 잡을 수 없었던 몬스터를 잡아볼 수 있다.\n\n길드(Guild)\n게임상에서 가입하고 모인 동호회 또는 모임 등을 지칭한다.\n\nPVE(Player Versus Environment)\n온갖 몬스터와의 싸움을 지칭한다.\n\nRVR(Realm Versus Realm)\n대규모 단체전. PVP(Player Versus Player)이 사용자간 1:1 싸움을 가르킨다면 RVR은 단체전을 지칭한다. 자신이 속한 단체에 대한 충성도를 높일 수 있다.\n\nPK(Player Kill)\n상대방과의 전투에서 Kill시키는 것을 지칭한다.\n\n퀘스트(Quest)\n게임 내에서 게임을 진행하거나 보상을 받기 위해 행하는 임무. \n\n아이템(Item)\n몬스터을 잡아 획득하거나 퀘스트를 수행했을 경우 보상으로 받게되는 아이템. 갑옷, 무기, 보석 등 캐릭터에게 필요한 모든 물품들을 아이템이라고 한다.\n\n인벤토리(Inventory)\n(재산 등의)목록 이라는 뜻으로 쓰인다. 흔히들 인벤 으로 줄여쓰기도 한다. 몹을 잡거나 퀘스트를 수행했을 경우 받게되는 보상아이템들을 저장해두는 공간. 저장공간 확보를 위해 창고에 저장해두고 인벤토리는 가볍게 하는 것이 좋다.\n\nQC (Quality Control) – 품질관리 게임의 테스트, 분석 등을 통해 문제점을 파악하는 업무\n\nQA (Quality Assurance) – 품질관리 QC의 업무 자체를 보증하는 업무\n\nRMT (Real Money Trading) – 현거래/현질\n\nPostmortem – 원래 의미는 부검으로 게임 개발 이후에 개발에 대한 사후 분석을 하는 행위\n\nLF (License Fee) – 계약금\n\nMG (Minimum Gurantee) = AR(Advantage Royalty)\n– 로열티를 미리 책정해 땡겨받음\n\nTFT (Task Force Team)\n– 특정한 일을 해결하기 위해서 선별된 인력으로 구성된 임시조직\n\nCM (Commercial Lunch) – 상용화\n\nF2P(Free to play) – 부분유료화 비즈니스 모델을 택한 게임\n\nP2P(Pay to play) – 정액제 비즈니스 모델을 택한 게임\n\nAP (Associate Producer)\n- 게임 기획자와 유사한 역할로 창의력이 요구되는 직책, 각종 이벤트/프로모션 기획, 아웃소싱/관리 코디네이션 업무와 일정관리 등의 업무를 수행\n
▣ 2012.05.14.(월) 14:00 ~ 15:30, 8층 대회의실, VDI(Virtual Desktop Infrastructure)\n\n▶ '클라우드 붐'과 함께 PC 가상화 기술로 통칭되는 서버기반컴퓨팅(SBC)과 데스크톱가상화(VDI)\n&nbsp; &nbsp; &nbsp; &nbsp; : 기기에 상관없이 언제 어디서나 기업 서버에 접속해 필요한 업무자원을 사용\n- 중앙 서버에 애플리케이션을 두고 같이 나눠 쓰는 서버기반컴퓨팅(SBC)\n- PC 애플리케이션이 중앙 서버에 존재하는 데스크톱가상화(VDI)\n\n80% 이상의 기밀 유출 보안 사고는 임직원의 업무용 pc에서 발생한다. SBC나 VDI의 공통점인 '내PC가 비어있다'의 방식은 PC 문서를 유출하거나 USB 메모리로 빼내고 노트북PC를 분실하는 경우 등을 방지할 수 있다. \n\n* 부정적 측면\n** 높은 초기투자비용, 높은 솔루션 가격과 매년 책정되는 라이센스 비용 그리고 버전 업그레이드 비용의 부담\n** 사용자의 불만 (자신의 정보를 빼앗긴 기분, 회사에서 의심받는 느낌/ 느린 업무속도와 자유롭지 못한 어플리케이션 설치)\n\n* 긍정적 측면\n** 보안, 모바일 업무 생산성, 개인 PC보안사고 방지\n** IT관리 편의성 (데스크톱 가상화후 한명이 관리할 수 있는 PC수는 두배가 되었다)\n** 친환경 (PC사용전력 감소)\n** 지식관리시스템 구축용이 (노하우를 쌓는데 유리해짐)\n\n▶ 리소스 제공 관점\n1.원격 데스크톱 연결 (Session Hosted)\n2.데스크톱 가상화(VDI) (Server Hosted)\n3.가상 PC 방식 (Client Hosted) ; 공공, 금융, MED-V\n\n▶ VDI 도입\n1.물리적 디바이스 분리 ; 하드웨어 인프라 ↓\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; 스토리지 사이징 및 설계 중요 ; 적은 용량, 병렬처리 가능한 구성\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; Zero/ Thin Clients (cf.Zero Clients ; OS나 어플리케이션 없이 VM만 작동)\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; RemoteFX ; 추가 GPU를 통한 3D 가속 처리\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; CPU 1 core ≒ 2.5명 → 최대 4명 처리 예상(>> 10명)\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; 데스트톱, 모바일 기기 등 모든 디바이스를 지원\n\n2.통합 관리 System\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; 서버 가상화\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; 데스크톱 가상화\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; 프리젠테이션 가상화\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; 어플리케이션 가상화\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; 프로파일 가상화\n\n3.관리인력을 통한 접근 등 이슈 발생 ; 관리비, 유지 인력 ↑\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; 잘못된 Task 분석과 설계 등으로 장점이 단점으로 나타날 수 있음\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; 자동화 ; 데이타 통합 등에 수작업\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; 인증 Self-Service\n&nbsp; &nbsp; &nbsp; &nbsp; &#8226; Public Cloud 연동\n\n▶ 구성\n| 인프라공유 |VM | 개별 사용자 프로파일로 할당된 저장공간에 작업 |\n| 어플리케이션 |~|~|\n|>| Windows HyperVisor | |\n|>| 서버가상화 | Windows XP - 아키텍처 설계시 VM이 고려되지 않음 |\n|>|~| Windows 7 이상의 OS를 추천 (∵ Hyper-V) |\n
!!! 죽령 산신당과 다자구 할미 / 소백산 소백사(다자구할매 신당)\n--------------------------------------------------------------------------------\n소재지 :충북 단양군 대강면 용부원리 \n\n단양군 대강면 용부원리 텃골 남쪽에 다자구 할머니의 산신당이 있다. 이 산신당에는 다자구 할머니가 죽어서 죽령의 산신이 되었으므로 이를 모셔 제사를 모시는 죽령 수호의 산신당인 것이다. 또 이 산신당을 죽령 산신당, 국사당이라고도 부르고 있으며, 인조원년에 단양, 영춘, 풍기의 세 고을 군수가 신당을 짓고 매년 춘추로 제사를 지냈는데 군수가 제주가 되는 관행제로 행해졌다. \n\n그러다 단양, 영춘이 합군이 된 후로는 주민이 주로 되어 산신제를 지냈으며, 현재도 군수가 죽 령산신제에는 꼭 참석하고 있다. 옛날에는 단양군 대강면에서 경상도 풍기로 넘어가는 죽령고개는 험하기도 하였거니와 도둑떼들 이 들끓어 지나가는 행인을 괴롭혀 왔다. 처음에는 밤에만 나타나던 도둑들이 대낮에도 나타나 행패가 심하여지자 관가에서는 군졸들을 풀 어 도둑들을 잡으려 했으나 도둑들은 험한 산세를 이용해 피하였으므로 도둑 잡기가 몹시 힘들 었다. \n\n그런데 도둑들에게 가산을 몽땅 빼앗긴 할머니 한사람이 관가에 찾아와 도둑 잡기를 자청 하였 다. 나이 많은 할머니가 도둑을 잡겠다고 함으로 관원은 의아해 하며 할머니가 어떻게 도둑을 잡겠다 는 것이냐고 물었다. 할머니는 자기가 도둑 떼 속에 들어가있을테니 군졸들을 죽령고개 일대에 숨겨두라는 것이었다. 그러다가 [ 다자구야 자자구야 하고 소리를 내면 도둑들이 다 잠을 자고 있으니 급히 잡으러 오면 되는것이고 들(덜)자구야 들(덜)자구야] 하거든 도둑들이 잠을 자지 않고 있는 것이니 숨어 있으라는 것이었다. 이렇게 서로 약속을 한 할머니는 곧 죽령고개르를 오르락 내리락 하며 목청을 돋구어 [ 다자구야 들자구야 ] 가락을 붙여 소리 높이 외치며 도둑들과 만나기를 기다리고 있었다. 숲 속에 숨어 살던 도둑은 매일같이 노래 부르며 고개를 오르내리는 할머니를 수상히 여겨 할머 니를 잡고는 그 까닭을 물었다. 할머니는 다자구 들자구는 아들들의 이름인데 얼마전 산에 나무를 하러 갔다 아직 돌아오지 않아 호환이나 당하지 않았나 걱정이 되어 찾으로 나온 것이라 했다. 그러면서 두 아들들이 없으면 자기는 올데 갈데 없다고 했다. \n\n도둑들은 할머니에게 자기네를 따라와서 밥짓는 일을 하지 않겠느냐고 하는 것이었다. 할머니는 좋다고 말하고서 도둑들을 따라 갔으며 함께 살며 밥짓는 일을 하게 되었다. 할머니는 관군을 불러 도둑 잡는 좋은 기회를 엿 보았으나 여간해 그런 기회가 오질 않아 밤마 다 [ 들자구야 들자구야 ]를 노래처럼 부르기만 했다. 그러다 하루는 두목의 생일이 되었다. 도둑들은 대낮부터 실컷 술을 마시고 한밤이 되면서 모두 잠에 골아 떨어지게 되었다. \n\n할머니는 그때를 놓치지 않고 [ 다자꾸야 다자꾸야 ] 하고 노래로서 외쳤다. 숨어 있던 관군은 이 소리를 듣고 급히 달려가 도둑들을 모두 잡아 버렸다. 그러나 할머니는 어디로 갔는지 자취를 찾을 수 없었다. 사람들은 할머니를 다자구 할미라 부르고 다자구 할미가 죽어서 죽령산신이 됐다고 믿고 있다. \n\n다자구야 들자구야 \n언제가면 잡나이까\n들자구야 들자구야\n지금오면 안됩니다\n다자구야 다자구야\n소리칠때 기다리다\n다자구야 다자구야\n그때와서 잡으라소\n\n(노래말, 한글학회, 한국지명총람 충북편, 1970) \n
! RAID ( Redundant Array of Inexpensive Disks 또는 Redundant Array of Independent Disks )란?\n\n - 여러개의 하드디스크를 모아 논리적으로 하나의 대형 드라이버처럼 사용\n - 혹은 장애 발생시 데이터를 안전하게 복구할 수 있도록 하는 장비\n\n\nRAID는 1988년 버클리 대학의 3명의 과학자(패터슨, 가스 깁슨, 랜디 카츠)가 제안한 이론(SIGMOD에 'A Case for Redundant Array of Inexpensive Disks'라는 논문 발표)으로 그 당시에는 하드디스크의 용량이 제한적이었고, 함부로 사용하는 이도 드물 정도로 값도 비쌌기 때문에 보다 저렴하며 용량이 적고, 성능이 낮은 하드디스크를 묶어 중복 구성함으로써, 성능이 좋은 고가의 대용량 하드디스크 장비와 겨뤄 손색이 없도록 하는 것이 주목적이었다.\n\n그러나 그들이 열심히 RAID를 연구하는 동안 Storage 기술의 발전으로 용량대비 가격이 지속적으로 하락하였으므로 애초 주목적이었던 가격적인 면보다는 데이터의 안정성과 에러 보정, 그리고 하드디스크의 장애에 의한 데이터의 손실을 막기 위한 측면이 강조되었고, RAID의 의미는 'Inexpensive'에서 'Independent'로 의미가 바뀌게 되었습니다. \n\n단순히 구성으로만 보자면 지금 많이들 사용하는 partition의 반대 비슷한 개념정도 됩니다. \n\n파티션이 하나의 물리적인 드라이브를 여러개의 논리적 드라이브로 분할한것 이라면.. 레이드는 여러개의 물리적 드라이브를 하나의 논리적 드라이브로 묶는 방식 입니다.\n\n보다 정확한 파티션의 반대 개념은 단순히 구성을 묶기만 하는 JBOD (Just a Bunch Of Disks 또는 Just a Bunch Of Drives) 가 더 가까울듯 합니다. 이것은 여러 개의 물리 드라이브를 논리적인 하나의 커다란 드라이브로 결합해주는 것일 뿐, 각각의 드라이브를 독립적으로 사용하는 것에 비해 어떠한 장점도 없으니까요.\n\nRAID 시스템은 동일한 데이터를 여러 개의 디스크에 중복 저장하면서도, 운영체계에는 하나의 단일 디스크로 인식시킴으로써, 내고장성의 증가와 데이터 접근 효율성을 높여주는 장점이 있습니다.\n\n!!!! &#8226; RAID 성능 향상의 원리\n\nRAID는 크게 스트라이핑(Strpping)과 미러링(Mirroring)으로 구분할 수 있는데, 뒤에서 설명할 RAID 규격은 모두 이 스트라이핑과 미러링을 어떤 식으로 구성했느냐에 따라 나눈 것이기 때문에 두가지 방식 차이만 잘 알아두면 RAID에 대해 절반은 알고 시작하는 것이라고 하겠다. \n\n스트라이핑이란 논리적으로 연속된 데이터를 물리적으로 여러 개의 저장 장치에 나눠서 저장하는 방식으로 우리가 생각하는 파일 1개씩이 아니라 데이터 단위로 나뉘므로 우리가 볼 때는 하나의 하드로 나타나지만 실제로는 하나의 하드에 들어갈 내용을 여러 개의 디스크에 저장하므로 개별 하드의 데이터는 독립적으로는 쓸모가 없고 스트라이핑 된 모든 하드가 있어야 완전한 저장장치가 된다. \n\n스트라이핑이 좋은 점은 병렬로 하드 디스크를 묶었을 때 각 하드와 데이터를 주고 받는 속도가 단일 하드에 데이터를 주고 받는 속도보다 빠르다는 것이다. 이로 인해 데이터를 하드 디스크에 쓰거나 읽기 위해서 기다려야 하는 시간에 다른 하드의 데이터를 읽고 쓰는 식으로 액세스 타임을 줄일 수 있으며, 이론상 하드 디스크를 추가할수록 성능은 증가하게 된다. \n \n미러링은 말 그대로 거울에 비치는 것처럼 같은 데이터를 복수의 장치에 동일하게 저장하는 방식이다. 이것은 성능과는 관계없는 순수한 데이터 보호를 위한 안정성을 추구하는 방식으로 사용자가 직접 데이터를 백업하는 것이 아니라 데이터 자체를 동일한 형태로 2개 이상의 복수 장치에서 보관하기 때문에 한군데서 데이터가 분실되거나 파손되더라도 보존된 다른 장치에서 같은 데이터를 그대로 복구할 수 있다. \n\n미러링의 경우는 스트라이핑처럼 성능 향상과 관계없고 오히려 복수의 하드에 같은 내용을 저장해야 하므로 성능이 같거나 미세하게 떨어질 수 있고 2개의 하드가 같은 데이터를 기록하게 되니 사용 가능한 용량도 절반으로 줄어든다. 하지만 데이터 복구가 가능하기 때문에 역시 단독 RAID 1 시스템보다는 데이터 유실의 염려가 큰 스트라이핑을 보완하는 식으로 함께 구성된다. \n\n스트라이핑과 미러링을 어떤 식으로 구성하느냐, 그리고 두가지 방식을 보완하기 위해서 어떤 방법을 택하고 있느냐에 따라 RAID의 규격이 바뀌게 되는데... 다음 장에서는 수많은 RAID 규격 가운데 표준 규격으로 사용되는 것들과 비표준 규격이지만 데스크탑 메인보드 제품에서 지원되는 규격들을 살펴보겠다.\n\n\n!!! RAID의 장점 :\n - 시스템에 있는 디스크의 수가 증가함에 따라 디스크가 장애를 일으킬 가능성이 높아가고 있는 상황에서 미러링이나 패리티 정보를 이용해 디스크 장애에 대비\n - 여러 개의 물리적인 하드디스크를 하나의 논리적인 드라이브로 인식함으로써, 용량과 드라이브 수의 제한 극복\n - 여러 디스크에 데이터를 분산시키고 병렬로 입출력을 처리함으로써 속도와 효율성 증가 \n\n!!! RAID의 목적 :\n 1.여러 개의 디스크 모듈을 하나의 대용량 디스크로 사용\n 2.입출력 속도를 높인 것\n 3.장애가 발생하더라도 최소한 데이터가 사라지는 것 방지\n\n\nRAID 시스템이 나온 배경 솔루션\n - 하드 디스크의 질과 성능이 크게 향상되긴 했지만 아직도 컴퓨터 시스템 가운데 가장 취약한 부분으로 남아있다. 때로는 회복이 불가능할 정도로 손상되기도 하는데 시스템이 다운되면 회사로서는 큰 낭패가 아닐수 없다. 그리고 네트워크에서 병목현상이 가장 심하게 일어나는 부분도 하드디스크다.\n\nRAID 시스템은 그런 하드디스크의 결함을 비교적 저렴한 비용으로 해결할 수 있는 솔루션\n\n\n!!! RAID를 구성하기 위한 준비\n\n데스크탑 시스템에서 RAID를 구성하기 위해서는 무엇이 필요할까? 당연히 RAID를 지원하는 장치가 필요할 것이다. 데스크탑 시스템에서 RAID를 지원하는 장치는 외장 카드와 내장 컨트롤러로 구분되는데, 외장 카드는 메인보드의 확장 슬롯에 장착해서 사용하는 방식이며 내장 컨트롤러는 메인보드의 사우스브릿지 칩셋이나 보드에 달린 RAID 기능 지원 추가 컨트롤러를 통하는 방식이다. \n\n(그러나 RAID를 구성하는 방법으로 RAID 기능이 들어간 하드웨어를 사용하지 않고도 운영체제가 제공하는 기능을 이용해 소프트웨어적으로 RAID를 만들 수도 있는데, 이 부분은 이번 테스트에는 포함시키지 않으며 별도의 페이지로 언급하겠다) \n\n!!!! &#8226; RAID 기능을 지원하는 메인보드\n\n메인보드는 보통 사우스브릿지라고 불리는 칩셋이나 추가적인 SATA/IDE 컨트롤러에 RAID 기능을 달아서 제공하고 있는데, 이러한 메인보드를 사용하면 보드에 달린 SATA/IDE 커넥터에 하드를 연결해 RAID 구성이 가능하다. \n\nRAID 기능을 지원하는 메인보드는 그렇지 않은 제품보다 가격이 더 비싸지만 대부분 단순히 RAID 유/무의 차이로 가격을 정하는 것은 아니고, 더 좋은 품질의 부품을 쓰거나 부가 기능을 더 많이 포함시켜 만들기 때문이다. \n\n오늘 RAID 기사에서 사용한 메인보드는 ASUS P5K Premium으로 이 제품은 메인보드 사우스브릿지 칩셋인 ICH9R에서도 SATA RAID 기능을 지원하며, IDE 커넥터 및 eSATA 포트를 위한 추가 컨트롤러 칩셋에서도 RAID 기능을 지원하므로 만약 필요하다면 2개의 컨트롤러로 2가지 RAID 구성을 할 수 있다. 양쪽 모두 RAID 기능을 제공하지만 실제 RAID 작업에 필요한 XOR 프로세서 역할이나 캐시 메모리는 PC 자원을 사용하므로 고급형 RAID 컨트롤러 카드처럼 완전한 하드웨어 RAID 방식이라고 할 순 없다. \n\n사우스브릿지에 들어있는 RAID 기능은 칩셋에서 지정원 SATA/IDE 대역폭을 사용하고, 추가 컨트롤러에서 제공하는 RAID는 컨트롤러 칩셋이 메인보드 칩셋과 연결된 인터페이스 대역폭을 사용하게 된다. 이번에 테스트한 메인보드 RAID는 추가 컨트롤러 대신 메인보드 칩셋 ICH9R에서 제공하는 기능을 썼다. \n\n!!!! &#8226; RAID 전용 컨트롤러 카드 (고급형)\n\n메인보드에서 제공하는 RAID 기능 대신 별도의 확장 카드를 이용한 RAID를 구성하려는 사람이라면 가격비교 사이트에서 같은 RAID 컨트롤러 카드임에도 불구하고 엄청난 차이가 있는 가격을 보고서 놀란 경험이 있을 것이다. RAID 컨트롤러 카드는 단순히 몇개의 하드를 연결하고 어떤 인터페이스를 지원하느냐 외에 하드웨어 방식이냐 소프트웨어 방식(운영체제를 의미하는 건 아님)이냐로 가격 차이가 난다. \n\n하드웨어 방식의 RAID는 시스템과 별개로 컨트롤러에서 모든 드라이브 통신을 처리해 시스템/운영체제에서 독립된 하나의 저장장치로 보이게 한다. 주로 PCI-X급 이상의 충분한 대역폭을 가진 인터페이스 기반으로 만들어져 일반 데스크탑 시스템보다 서버/워크스테이션 시스템에서 사용되며, RAID 구성 및 작동을 위해 별도의 XOR 프로세서와 전용 캐시 메모리를 내장해 가격이 상당히 비싸다. 하드웨어 RAID 방식은 전송 속도 및 안정성에서 유리하며, 특히 소프트웨어 방식은 시스템에서 RAID 작업을 떠맡아야 하므로 경우에 따라서는 시스템의 성능을 저하시킬 수도 있다. \n\n하드웨어 방식의 RAID 컨트롤러 카드로는 Adaptec사의 ASR-3405 4ch 컨트롤러를 사용했다. 이 제품은 히트싱크가 부착된 인텔 80333 500MHz 프로세서를 하드웨어 XOR RAID 엔진으로 사용하고, 128MB의 DDR 메모리를 카드에 달아 ECC-Protected 데이터 캐시 메모리 역할을 하도록 만들었다. LP(Low Profile) 디자인으로 블레이드 서버 등에서도 사용 가능하다. \n\n단순히 SATA RAID 뿐만 아니라 SAS(Serial Attached SCSI) 컨트롤러로 사용할 수 있으며, PCI-X 인터페이스 대신 PCI Express x4 방식을 지원해 서버/워크스테이션 보드가 아니어도 대역폭 문제가 없다. PCI Express x4 인터페이스의 대역폭이 서버용 PCI-X 133MHz의 대역폭과 같기 때문이다. \n\nPCI Express x4 슬롯은 일반 PCI Express 데스크탑용 메인보드 중에서도 흔한 것은 아니지만, 그래픽 카드의 멀티 GPU 기능을 지원하는 보드라던지 유사 멀티 GPU를 지원하는 보드에서 많이 제공한다. (PCI-X 슬롯을 지원하는 데스크탑 메인보드보다는 훨씬 많다) \n\nRAID 0, 1, 1E, 5, 5EE, 6, 10, 50, 60, JBOD로 핫 스페어(Hot Spare), 핫 스왑(Hot Swap) 기능도 지원한다. 전용 연결 포트와 케이블을 통해 1개의 케이블에서 4개의 하드 디스크를 연결할 수 있으며, 정전이나 시스템 문제가 발생할 때 캐시 데이터를 보호할 수 있는 배터리팩(옵션) 연결도 지원한다. \n\n!!!! &#8226; RAID 전용 컨트롤러 카드 (보급형)\n\n메인보드와 별개의 확장 카드로 제공되지만 XOR 프로세서나 캐시 메모리가 따로 들어가지 않는 제품들을 보급형 RAID 컨트롤러 카드라고 부르는데, 이 제품들은 RAID 구성을 위한 기본 기능은 제공하지만 운용을 위한 작업은 시스템에 의존하기 때문에 가격이 저렴하면서 복잡하지 않은 RAID를 지원할 때 사용할 수 있다. \n\nRAID 작업이 단일 하드 사양을 넘는 고성능이 필요하거나 데이터 보호를 위한 것이므로 전문적인 작업이라면 그만큼의 성능과 안정성이 담보된 고급형 컨트롤러 카드를 사용하겠지만 데스크탑에서 1~ 2개의 하드를 가지고 구성하는 RAID 0, 1 수준이라면 보급형 컨트롤러로도 무난한 성능을 낼 수 있다. \n\n다만 보급형 RAID 컨트롤러 카드는 대부분 보다 많은 시스템 호환성을 위해 PCI 인터페이스를 지원하는데, 이 경우 PCI 대역폭이나 속도가 많은 숫자의 하드로 RAID를 구성하기에는 모자라 단일 하드보다 오히려 성능이 떨어질 수도 있다. \n\n누디앙일렉트론의 코요테(Coyote) SATA II RAID 4ch 컨트롤러 카드가 바로 컨트롤러 칩셋과 바이오스만으로 구성된 보급형 제품으로 폭넓은 호환성을 가진 32bit PCI 인터페이스 외에 4채널 RAID 구성을 위해 인 PCI-X 인터페이스도 지원하도록 만든 제품이다. 앞에서도 언급했지만 PCI-X 133MHz인터페이스는 PCI Express x4와 마찬가지로 단방향 1GB/s의 대역폭을 가지고 있다. \n\n보드나라에 32bit PCI RAID 컨트롤러 카드가 따로 없는데다 PCI 전용으로 나온 제품들은 대부분 2포트만을 지원해 특별히 PCI와 PCI-X를 모두 지원하는 이 제품을 포함시켰다. 물론 RAID 테스트는 PCI-X 지원 보드가 아닌 일반 데스크탑 시스템을 기준으로 할 예정이라 이 제품은 32bit PCI RAID 컨트롤러 카드로만 사용될 것이다. \n\n!!!! &#8226; RAID 드라이버 설치용 FDD와 플로피 디스켓\n\n윈도우 XP는 출시된지 꽤 오래된 운영체제라 XP 이후에 나온 RAID 장치나 SATA RAID를 운영체제에서 제대로 인식하지 못한다. 이 때문에 RAID로 구성된 드라이브를 인식하거나 운영체제를 설치하기 위해서는 드라이버를 따로 설치해줘야 한다. \n\n윈도우 비스타처럼 최신 운영체제에서는 FDD를 이용하지 않더라도 대부분 드라이버를 가지고 있어 P35 메인보드의 ICH9R을 RAID 모드로 바꿔도 운영체제를 설치할 수 있었지만 이 때도 SATA 포트를 지원하는 블루레이 드라이브를 썼을 때 문제가 생겨 필자는 IDE 지원 DVD 드라이브로 교체했다. \n
!(경주남산 삼릉계) 냉골 선각육존불(아미타삼존불/석가삼존불)\n출처 ; http://blog.daum.net/kinhj4801/15960367\n\n신라에서 선각의 마애불은 8세기 말~9세기 초에 조성되기 시작하는데, 경주 남산 삼릉계곡선각육존불과 경남 함안 방어산마애불(801년) 등이 대표적 작품으로 꼽을 수 있다\n\n!! #.삼릉계 3사지 석가여래삼존불\n\n본존 석가여래는 넓은 연꽃 위에 앉아 계시고 문수보살(文殊菩薩)과 보현보살(普賢菩薩)은 본존의 양 옆에 서 있다.\n\n석가여래상은 두광과 신광을 갖추고, 연화대좌 위에 결가부좌하고 있다. 큼직한 육계에 얼굴은 원만하고, 목에는 三道를 두 줄의 선각으로 표현하였다. \n\n법의는 편단우견(偏袒右肩)으로 가사를 입고 오른손은 가슴 앞에서 엄지와 검지를 맞댄 설법인(說法印)이며 왼손은 무릎 위에서 손바닥을 펴 배 앞에 댄 선정인(禪定印)이다\n\n왼쪽의 문수보살은 바위 표면의 절리로 인해 마멸이 심하여 모습을 잘 알 수 없으나 연꽃 위에 서서 오른손은 설법인으로 가슴에 들고 왼손은 아래로 드리운 채 천의(天衣)자락을 잡고 있는 듯하며 얼굴은 여래쪽으로 돌리고 있다\n\n오른쪽 보현보살은 두광을 갖추고 연화대좌 위에 서 있는데, 오른손은 들어 손등을 위로 하였고 왼손은 늘어뜨려 군의자락을 가볍게 잡고 있다. 두 발은 발꿈치를 중심으로 좌우로 향하고 있다. 상반신은 나체이며 군의를 입고 있는데 허리 아래에서 띠로 묶었다. \n\n두 보살은 모두 구슬을 꿴 목걸이를 걸고 팔과 손목에 팔찌를 끼웠을 뿐 상의는 입지 않았다. \n두 보살이 여래쪽으로 비스듬히 향하고 있음으로 바위 분위기는 아늑하게 표현되어 있다.\n\n※ (왼쪽) 문수보살은 부처의 지혜를, (오른쪽) 보현보살은 부처의 자비를 상징한다\n\n!! #.삼릉계 3사지 아미타삼존불\n\n석가삼존불에서 약 3m 앞의 바위 절벽면에 선각되어 있는 아미타삼존불은 석가삼존불과 반대로 본존여래가 연꽃 위에 서 있고 양쪽 협시보살은 연꽃 위에 앉아 있다. \n\n삼존 모두 원형의 두광과 복련의 연화대좌를 표현하였다.\n\n아미타여래불은 둥근 얼굴에 목에는 두 줄로 된 삼도를 표현하였고 오른 손바닥을 아래로 하여 가슴에 들고 왼손바닥은 위로하여 배 앞에 들고 있다. 가사는 우견편단우견으로 몸에 걸쳤는데 신광(身光)은 없고 두광(頭光)만 원으로 나타나 있다. \n둥글면서 벌어진 어깨는 강건한 느낌을 주면서 허리는 매우 가늘게 표현하였다.\n\n좌우협시보살상은 각각 꿇어앉은 자세로 본존을 향하여 꽃 공양을 하고 있는 자세이다. 형태로 보아 활짝 핀 연꽃으로 보인다 \n두 보살은 모두 둥근 구슬목걸이를 걸었고 팔과 손목에는 팔찌를 끼었다. 어깨에는 얇은 천의를 걸쳐 있으며, 천의자락이 나부낀다.\n왼쪽의 관세음보살상은 여래쪽으로 향해 윤왕좌(輪王座 ; 한쪽 무릎을 세우고 앉는 법)로 앉아 꽃 쟁반을 들었고 오른쪽 팔 아래에 천의 자락이 길게 늘어뜨려져 있다\n오른쪽의 대세지보살은 관세음보살의 반대 모습으로 앉아 역시 꽃 쟁반을 들고 있다. \n\n본존여래가 앉아 있고 협시보살들이 서 있는 예는 보통 있지만, 여기에서처럼 여래가 서 있고 보살들이 앉아 있는 경우는 매우 드물다.\n\n생전에 나무아미타불(南無阿彌陀佛)을 많이 부르고 착한 일을 한 사람이 죽으면 아미타 여래가 보살들을 데리고 죽은 사람의 영혼을 맞으러 지상으로 하강한다. 그때 여래는 서고 보살들은 앉는데 이러한 모습을 내영아미타상(來迎阿彌陀像)이라고 부르기 때문에 이 바위면의 삼존상은 내영아미타상임을 알 수 있다고 한다.\n\n석가여래는 현세의 부처님이시고 아미타여래는 극락세계에 계시는 부처님이시다. 아미타여래는 지상에 하강하여 석가여래로부터 생명을 인계받는다. \n이곳에 석가삼존과 내영아미타삼존이 함께 새겨져 있는 것은 이승에서 저 세상인 극락세계로 생명이 인계되는 중요한 장소라는 뜻이라고 한다.\n\n이 불상의 제작시기는 이상주의적인 양식이 성행하던 8세기경으로 추정하고 있다. \n\n※ (왼쪽) 관세음보살은 자비를, (오른쪽) 대세지보살은 지혜와 광명을 상징한다.\n\n관세음보살은 석가모니의 입적 이후 미륵이 출현할 때까지 중생들을 고통으로부터 지켜주는 대자대비(大慈大悲)의 보살이다. 대세지보살은 지혜의 광명으로 중생을 구제한다.\n
@ 2014-03-11 @\nSSD의 속도와 HDD의 저장공간을 합쳐서 만든 제품이다. 실제 데이터 저장은 HDD 에 하지만, SSD 를 캐쉬로 이용하여, 자주 이용하는 데이터의 경우는 SSD 와 동등한 속도를 내준다(하드디스크에 캐시공간을 크게 만들어 자주쓰는 데이타를 캐시에다가 넣는 원리). 하지만, 현실은 SSD 만큼 비싸고, HDD 만큼 느리다고 알려져있다.\n\n실제로 데스크탑 사용자는 SSD 와 HDD 를 그냥 따로 구매해서, 속도를 위해서는 SSD 를, 용량을 위해서는 HDD 를 사용하여 나눠 쓰는 것이 훨씬 낫다.\n\n@@이 제품이 타게팅하는 마켓은 노트북 사용자층@@이라 할 수 있으며, 대부분의 노트북은 HDD 를 1개만 설치할 수 있기에, SSD 로 교체해서 사용하기에는 비용과 용량의 압박을 받을 수 밖에 없다. 이런 사용자층을 노린 제품이라 보면 된다. 고성능 노트북을 지향하는 경우, 이 SSHD 를 장착하고 나온 제품도 있지만 mSATASSD가 대중화 되고 있어서 이쪽에서도 인기가 저조하다.\n\n참고로 처음에는 Hybrid HDD (HHD) 라는 표현을 사용했다가, SSHD 란 표현으로 바뀌었다.\n
!! VBA (Visual Basic for Applications) 란 \nVBA란 마이크로소프트 오피스에 포함된 일종의 베이직 프로그래밍 언어이다. 특히 금융계에서는 가장 많이 사용하는 오피스 프로그램중 하나인 엑셀의 VBA를 이용하여 수식과 함수만으로 해결하지 못하는 많은 일을 하고 있다.\n\n마이크로소프트 오피스 4.x버전에서 처음으로 VBA가 도입된 이후 이제는 VBA에 관한 많은 정보를 얻을 수 있다. VBA프로그래밍에 입문할 수 있는 여러 종류의 책이 서점의 서가에 꽂혀있고 선량한 네티즌이 자신의 VBA지식을 인터넷에 올려 두고 있다. \n\n프로그래밍을 어려워하는 그들은 VBA가 처음 해보는 프로그래밍 언어라는 공통점이 있는데 결국 그들에게 어려운 것은 VBA가 아니라 프로그래밍 그 자체인 것이다.\n \nVBA는 다음과 같은 장점을 가지고 있다. \n&nbsp; &nbsp; 1. 베이직이 기반이므로 쉽다. 따라서 프로그래밍분야에 입문하기 쉽다.\n&nbsp; &nbsp; 2. 별도로 프로그래밍 도구가 필요 없다. 마이크로소프트 오피스(이하 오피스)가 있으면 어디서든 프로그래밍을 할 수 있다.\n&nbsp; &nbsp; 3. 실용적이라는 점이다. 사무실에서 가장 많이 사용하는 업무프로그램이 오피스이며 업무처리를 빠르고 편하게 정확하게 도와줄 것이다. 다른 언어로는 VBA만큼 쉽고 빠르게 개발할 수 없을 것이다.\n&nbsp; &nbsp; 4. 네 번째 장점은 이 글을 좀 더 읽어 보시면 나올 것이다.\n\nVBA는 마이크로소프트의 베이직 가족 중 하나이며 마이크로소프트 비주얼베이직이 오피스 제품에 들어간 것이다. 지금은 오피스뿐만 아니라 드로잉 도구인 비지오, 오토캐드와 같은 여러 제품에도 VBA가 포함되어 있다. VBA는 베이직 언어로서의 본래의 기능(수치 연산, 문자열 조작, 파일 처리)뿐만 아니라 해당 어플리케이션을 조작하고 다룰 수 있는 기능을 제공한다.\n \n엑셀 VBA의 경우 베이직 언어로서 무언가를 계산한 결과나 그 과정을 워크시트에 기록하거나 워크시트의 값을 읽어 원하는 계산을 수행한다. 그리고 새로운 워크시트를 삽입하거나, 차트를 자동으로 그려주거나 사용자 정의 메뉴를 만들어 주는 등 엑셀을 조작한다.\n \n파워포인트 VBA라면 슬라이드, 그리기 개체, 애니메이션을 다룰 수 있도록 해줄 것이다. 아웃룩 VBA경우 메일, 일정, 연락처, 작업일지 등등에 관한 조작을 자동화해 줄 것이다.\n \n즉 VBA은 해당 어플리케이션에서의 반복적인 작업, 불편한 작업, 어플리케이션이 지원해주지 않는 작업등을 도와주는 베이직 언어의 일종이다. 마이크로소프트는 여러 종류의 베이직언어를 개발하였고 다음은 여러 베이직 언어이다.\n \n| 베이직언어 | 사용영역 |\n| Quick BASIC | DOS |\n| Visual BASIC | Windows |\n| VBA | Microsoft Office, AutoCAD, etc |\n| VBScript | HTML, ASP(Active Server Page), WSH(Windows Shell Host) |\n \n위에서 본 것과 같이 베이직 가족들은 여러 분야에서 활동하고 있다. 활동 분야가 다를 뿐, 그들은 모두 베이직 언어를 기반으로 하고 있다. 따라서 여러분이 VBA를 익히고 나면 다른 활동 분야의 베이직 언어를 쉽게 배울 수 있을 것이다. 하나를 배워 다양한 분야에서 사용할 수 있는 경우는 그리 흔치 않다. 이것이 VBA의 네 번째 장점이다.\n\n!! 기타 \n#.시트 선택/ 활성화\n-. Sheets("시트명").Select >> 시트명 선택\n-. Workbooks("엑셀파일명").Worksheets("시트명").Activate >> 시트명 활성화(사용)\n-. Worksheets("시트명").Activate >> 시트명 활성화(사용)\n\n#.셀/ 범위 - 선택\n -. Range("A1").Select >> (A1) 선택\n \n#.Dim 문 ; 하나 이상의 변수에 사용할 저장 공간을 선언하고 할당\n&nbsp; &nbsp; &nbsp; &nbsp; Const nSheet As Integer = 6\n&nbsp; &nbsp; &nbsp; &nbsp; Dim da(nSheet, 100) As Integer\n&nbsp; &nbsp; &nbsp; &nbsp; Dim dd As String\n\n#.배열 설정 ; (1차원, 2차원, 3차원, 4차원 .... 60차원)\n&nbsp; &nbsp; &nbsp; &nbsp; 1차원 ; 가로\n&nbsp; &nbsp; &nbsp; &nbsp; 2차원 ; 세로, 가로\n&nbsp; &nbsp; &nbsp; &nbsp; 3차원 ; 새로, 가로, 층\n&nbsp; &nbsp; &nbsp; &nbsp; 4차원 ; 세로, 가로, 층, 공간\n\n#.메시지 출력\nMsgBox "마지막 등록 정보 : " & sSting(nCount, 1) & " / " & sSting(nCount, 2)\nMsgBox "Next kk = " & kk (출력 문자열 = "내용" &(문자열합성) 변수)\n\n〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n#. 파일 생성 (XlFileFormat 열거형)\n---------------------------------\n&#8226; [[XlFileFormat 열거형]]\n\nActiveWorkbook.SaveAs Filename:="C:\s테스트엑셀.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled 또는\nActiveWorkbook.SaveAs Filename:="C:\s테스트엑셀.xlsm", FileFormat:=52\n\n/ FileFormat : XlFileFormat 열거형 상수 중 하나\n&nbsp; &nbsp; &nbsp; &nbsp; 50 = xlExcel12 (2007-2010, xlsb, 매크로 없거나 있거나 다됨)\n&nbsp; &nbsp; &nbsp; &nbsp; 51 = xlOpenXMLWorkbook (2007-2010, xlsx, 매크로 없음)\n&nbsp; &nbsp; &nbsp; &nbsp; 52 = xlOpenXMLWorkbookMacroEnabled (2007-2010, xlsm, 매크로 있음)\n&nbsp; &nbsp; &nbsp; &nbsp; 56 = xlExcel9 (91-2003, xls, 매크로 없거나 있거나 다됨)\n \n/ FileFormat : xlDBF2, xlDBF3 및 xlDBF4 파일포맷은 다양한 버전의 *.DBF 파일일 때 지정\n-. Excel 2007 version에서는 Workbooks.Open 함수에서 인식되며, Workbook.SaveAs 함수에서는 인식되지 않고, 마이크로 소프트는 더 이상 디베이스 파일 형식으로 출력을 지원하지 않음\n-. DBF는 더 이상 Excel 2007에서 저장 대화 상자 파일의 옵션으로 지원하지 않으며, DBF에 가까운 다른 타입 파일로는 DIF 파일이 있다.\n-. *.dbf로 저정하기 위해서는 Excel 2003을 사용하거나\n&nbsp; &nbsp; Access에서 Excel 데이터를 가져온 후 DBF로 저장 (또는 외부 프로그램을 사용)\n\ncf. DBF (.dbf) 파일은, dBASE 라는 "데이터베이스(Database)" 프로그램에서 사용되던, 파일 형식의 확장자.\n예전에 국내에서는 "dBASE III" 라는 도스용 프로그램을 많이 사용했습니다. 지금은 DBF 파일이 거의 쓰이지 않는다. 대신, 간단한 데이터를 다룰 때에는 엑셀(Excel)의 xls 파일 형식을 주로 사용하고, 대량의 데이터는 Access 등의 데이터베이스 프로그램에 입력하여 사용.\n\n\n<br>
마누카꿀은 뉴질랜드에서 자생하는 마누카 꽃에서 채집한 꿀로 마누카꿀은 약용꿀로도 유명하다.\n\n강력한 항박테리아 성분 때문에 상처치료에도 사용할 수 있고 이러한 특성 때문에 식품은 물론 약의 성분으로도 사용된다. 균으로 인한 피부병은 물론 위궤양과 같은 내과 질환, 그리고 소화불량에도 좋은 효과를 보이는 것으로 나타나고 있다.\n\n마누카꿀의 성분은 크게 UMF와 MGO로 표시한다.\n\n''* MGO는(Methylglyoxal, 메틸글리옥살)'' 마누카꿀의 강력한 항염작용을 하는 주된 성분이다.\n독일 드레스던 공대가 마누카꿀의 항염성분이 MGO(메틸글리옥살)이라는 것을 밝혀내면서 부터 마누카꿀의 항염효과의 관한 사항은 MGO 수치로 표기하는 것이 더 옳다는 주장이 제기되고 있으며 가장 대표적인 제품은 드레스던 공대와 협약을 맺고 있는 마누카헬스(Manuka Health)회사의 제품이다.\n\n''* UMF는(Unique Manuka Factor)'' 뉴질랜드 마누카 꿀 협회에서 기준을 정한 수치이다.\n협회는 마누카 꿀 중에서 특별한 효능이 있는 제품을 엄격하게 관리하여 UMF라는 표시를 하도록 한다. 따라서 UMF 표시가 있는 꿀은 협회가 보증한 것으로 그 꿀의 효능은 믿을 수 있다고 한다. 일반적으로 UMF 10+, 15+등으로 표시되고 있으며 수치가 높을수록 성분이 많이 함유되어 있다고 한다. \n\n''* UMF와 MGO의 선택 기준''\n뉴질랜드 마누카 꿀은 위와 같이 두가지의 종류로 되어 있으며 마누카꿀의 대표적인 특징 항박테리아 수치를 표시하는 방식에 따른 차이다. 측정하는 기준이 다르기 때문에 완벽하게 동일하게 비교될 수는 없지만 두가지 모두 최상의 성분이 포함된 꿀이라는 것이다. 이해하기 쉽도록 아래와 같이 비교해 본다.\n\nUMF 10+ = MGO 100+ \nUMF 15+ = MGO 250+ \nUMF 20+ = MGO 400+ \nUMF 25+ = MGO 550+\n\n
워크시트를 저장할 때 사용할 파일 형식\n\n버전 정보\n 추가 버전: Excel 2007\n\n| 이름 | 값 | 설명 |\n| xlAddIn | 18 | Microsoft Office Excel 추가 기능 |\n| xlAddIn8 | 18 | Excel 2007 추가 기능 |\n| xlCSV | 6 | CSV (*.csv) |\n| xlCSVMac | 22 | Macintosh CSV |\n| xlCSVMSDOS | 24 | MSDOS CSV |\n| xlCSVWindows | 23 | Windows CSV |\n| xlCurrentPlatformText | -4158 | 현재 플랫폼 텍스트 (*.txt) |\n| xlDBF2 | 7 | DBF2 |\n| xlDBF3 | 8 | DBF3 |\n| xlDBF4 | 11 | DBF4 |\n| xlDIF | 9 | DIF |\n| xlExcel12 | 50 | Excel 12 |\n| xlExcel2 | 16 | Excel 2 |\n| xlExcel2FarEast | 27 | Excel2 FarEast |\n| xlExcel3 | 29 | Excel3 |\n| xlExcel4 | 33 | Excel4 |\n| xlExcel4Workbook | 35 | Excel4 통합 문서 |\n| xlExcel5 | 39 | Excel5 |\n| xlExcel7 | 39 | Excel7 |\n| xlExcel8 | 56 | Excel8 |\n| xlExcel9795 | 43 | Excel9795 |\n| xlHtml | 44 | HTML 형식 |\n| xlIntlAddIn | 26 | 국제 형식 추가 기능 |\n| xlIntlMacro | 25 | 국제 형식 매크로 |\n| xlOpenXMLAddIn | 55 | Open XML 추가 기능 |\n| xlOpenXMLTemplate | 54 | Open XML 서식 파일 |\n| xlOpenXMLTemplateMacroEnabled | 53 | Open XML 매크로 사용 서식 파일 |\n| xlOpenXMLWorkbook | 51 | Open XML 통합 문서 |\n| xlOpenXMLWorkbookMacroEnabled | 52 | Open XML 매크로 사용 통합 문서 |\n| xlSYLK | 2 | SYLK |\n| xlTemplate | 17 | 서식 파일 |\n| xlTemplate8 | 17 | 서식 파일 8 |\n| xlTextMac | 19 | Macintosh 텍스트 |\n| xlTextMSDOS | 21 | MSDOS 텍스트 |\n| xlTextPrinter | 36 | 프린터 텍스트 (*.prn) |\n| xlTextWindows | 20 | Windows 텍스트 |\n| xlIntlAddIn | 26 | 국제 형식 추가 기능 |\n| xlIntlMacro | 25 | 국제 형식 매크로 |\n| xlOpenXMLAddIn | 55 | Open XML 추가 기능 |\n| xlOpenXMLTemplate | 54 | Open XML 서식 파일 |\n| xlOpenXMLTemplateMacroEnabled | 53 | Open XML 매크로 사용 서식 파일 |\n| xlOpenXMLWorkbook | 51 | Open XML 통합 문서 |\n| xlOpenXMLWorkbookMacroEnabled | 52 | Open XML 매크로 사용 통합 문서 |\n| xlSYLK | 2 | SYLK |\n| xlTemplate | 17 | 서식 파일 |\n| xlTemplate8 | 17 | 서식 파일 8 |\n| xlTextMac | 19 | Macintosh 텍스트 |\n| xlTextMSDOS | 21 | MSDOS 텍스트 |\n| xlTextPrinter | 36 | 프린터 텍스트 (*.prn) |\n| xlTextWindows | 20 | Windows 텍스트 |\n| xlUnicodeText | 42 | 유니코드 텍스트 |\n| xlWebArchive | 45 | 웹 보관 |\n| xlWJ2WD1 | 14 | WJ2WD1 |\n| xlWJ3 | 40 | WJ3 |\n| xlWJ3FJ3 | 41 | WJ3FJ3 |\n| xlWK1 | 5 | WK1 |\n| xlWK1ALL | 31 | WK1ALL |\n| xlWK1FMT | 30 | WK1FMT |\n| xlWK3 | 15 | WK3 |\n| xlWK3FM3 | 32 | WK3FM3 |\n| xlWK4 | 38 | WK4 |\n| xlWKS | 4 | 워크시트 |\n| xlWorkbookDefault | 51 | 통합 문서 기본 |\n| xlWorkbookNormal | -4143 | 통합 문서 일반 |\n| xlWorks2FarEast | 28 | Works2 FarEast |\n| xlWQ1 | 34 | WQ1 |\n| xlXMLSpreadsheet | 46 | XML 스프레드시트 |\n\n\n\n
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n#. 문자열 함수\n---------------------------------\n\n#. ''Left( )함수'' ; 반환문자열=Left(문자열,추출문자수)\n \nLeft( )함수는 문자열로부터 왼쪽에서 문자수만큼의 문자를 반환한다. 예를 들면 다음 코드는 지정된 문자열에서 첫번째 두 문자(“Th”)를 반환한다.\nMsgBox Left(“This is a Test”,2)\n\n#. ''Mid( )함수'' ; 반환문자열=Mid(문자열, 시작위치, 추출문자수)\n \nMid( )함수는 문자열중 시작위치에서 추출문자수만큼의 문자를 뽑아 반환한다. 예를 들면 다음 코드는 지정된 문자열에서 여섯번째 두 문자(“is”)를 반환한다.\nMsgBox Mid(“This is a Test”, 6, 2)\n\n#. ''MIDB( )함수'' ; 사용자가 지정한 위치에서 지정된 바이트 만큼 가져오기\n반환문자열=MIDB(문자열 또는 셀참조, 가져올 문자의 시작 바이트, 가져올 문자 바이트)\ncf.서양국가에서 사용되는 대부분의 언어(SBCS)가 1바이트이고, 2바이트를 사용하는 언어(DBCS)는 한국, 일본, 중국어(간체, 번체 포함)를 포함\n\n#. ''Right( )함수'' ; 반환문자열=Right(문자열, 추출문자수)\nRight( )함수는 Left( )함수와는 반대의 역할을 한다. 문자열의 오른쪽에서 추출문자수만큼 문자를 뽑아 반환한다. 예를 들면 다음 코드는 지정된 문자열에서 여섯번째 두 문자(“st”)를 반환한다.\nMsgBox Right(“This is a Test”, 2)\n \n#. ''LTrim, Trim, RTrim 함수''\nLTrim, Trim, RTrim함수는 문자열내의 공백을 제거한다. LTrim( )함수는 공백이 아닌 문자가 시작되기전 왼쪽의 공백을 제거하고 Trim( )함수는 문자열 양쪽의 공백을 제거한다. Rtrim( )함수는 문자열의 오른쪽 공백을 제거한다.\n \nSub demoTrim()\n&nbsp; &nbsp; &nbsp; &nbsp; MsgBox LTrim(" This is a test. ")\n&nbsp; &nbsp; &nbsp; &nbsp; MsgBox Trim(" This is a test. ")\n&nbsp; &nbsp; &nbsp; &nbsp; MsgBox RTrim(" This is a test. ")\nEnd Sub\n\n#. ''문자열 연산자''\n''&'' ; 문자열 연결 연산자 - 여러개의 문자열 하나로 연결/병합(Merge String)\n/*{{{*/\nSub merge_string()\n s1 = "G"\n s2 = "ㅎㅎ"\n\n MsgBox s1 & s2 & "gle"\nEnd Sub\n/*}}}*/\n\n+ 기호를 사용하여 문자열을 연결할 수도 있지만, 추천되지 않음\n(∵ 덧셈을 해야 할지, 문자열을 연결해야 할지 잘 모르는 경우가 있음)\n\n\n〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n#. 문자열 변환\n---------------------------------\n#. ''CHAR(number) 함수'' ; 코드 번호에 해당되는 문자를 반환\n&nbsp; &nbsp; &nbsp; ''CODE(text) 함수'' ; 텍스트의 첫 번째 문자에 대한 숫자 코르를 반환\n\n#. ''HEX2DEC() 함수'' ; 16진수를 10진수로 변환하는 함수\n&nbsp; &nbsp; &nbsp; ''DEC2HEX() 함수'' ; 위와 반대로, 16진수를 10진수로 변환하는 함수\n\n\n〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n#. 셀의 색상 변경 지정 매크로\n---------------------------------\n#. 인덱스 컬러를 사용 \n' A1 셀의 글자색을 빨간색으로 변경\n Cells(1, 1).Font.ColorIndex = 3\n\n' B1 셀의 배경색을 노란색으로 변경\n Cells(1, 2).Interior.ColorIndex = 6\n\n+++[Excel 엑셀 색상표, VBA 매크로 색깔 차트; Colorindex Color Code Table]\n<html>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/excel_colorindex_table.png" >\n</html>\n===\n\n\n#.EXCEL에서 cell의 배경색을 변경하는 코드 예 (RGB 색상 조합 및 반목문 등을 사용)\n/*{{{*/\nSub UpdateColor()\n For i = 2 To 51\n r = Range("H" + CStr(i)).Value\n g = Range("I" + CStr(i)).Value\n b = Range("J" + CStr(i)).Value\n Range("K" + CStr(i)).Interior.Color = RGB(r, g, b)\n\n rIndex = 53 - i\n r = Range("H" + CStr(rIndex)).Value\n g = Range("I" + CStr(rIndex)).Value\n b = Range("J" + CStr(rIndex)).Value\n Range("L" + CStr(i)).Interior.Color = RGB(r, g, b)\n Next\nEnd Sub\n/*}}}*/
!!#. 피벗테이블(Pivot Table)\n피벗테이블은 엑셀이 제공하는 가장 강력한 데이터 분석 도구로, 많은 양의 데이터를 빠른 시간에 다양하게 분석할 수 있는 대화형 테이블이다.\n\n피벗(Pivot)이라는건 뭘까요? 피벗은 단어의 의미 그대로 회전중심축을 의미하는데, 원본 데이터를 사용자가 정의한 축을 중심으로 다양하게 분석(회전)해볼 수 있다는 의미이다. 엑셀 97에서 처음 소개된 피벗테이블은 너무 복잡해보여서 사용자들이 쉽게 접근하지 못했던 것이 사실이지만, 엑셀 2007부터는 클릭 몇번으로 피벗테이블을 만들고 분석할 수 있게 지원하고 있다.\n\n참고, http://zez2002.tistory.com/41\n\n\n!!#. 엑셀 함수\n!!! 다른 시트의 데이타 셀을 참조 ; 연산자 이용\n◈ = A1 \n&nbsp; &nbsp; / A1 셀의 값을 그대로 표시\n◈ = Sheet1!A22 \n&nbsp; &nbsp; / 다른 워크 시트에 있는 내용을 참조 ; Sheet1의 A22 셀의 값을 참조 (표시)\n\n!!! 조건함수 ; = IF(logical_test, [value_if_true], [value_if_false]) 함수\n■ logical_test 필수 요소. TRUE 또는 FALSE가 될 수 있는 값 또는 식 (비교 계산 연산자를 사용할 수 있다)\n&nbsp; &nbsp; / 더 자세한 검사를 위해 value_if_true 및 value_if_false 인수로 IF 함수를 64개까지 중첩 가능\n&nbsp; &nbsp; / IF 함수의 인수 중에 배열이 있으면 IF 문이 수행될 때 이 배열의 모든 요소가 계산.\n■ =IF(F6>0,Sheet1!B6,0)\n\n\n<br>\n
<<siteMap 가 . sliders>>\n<<siteMap 나 . openSliders>>\n<<siteMap 다 . openSliders>>\n<<siteMap 라 . openSliders>>\n<<siteMap 마 . openSliders>>\n<<siteMap 바 . openSliders>>\n<<siteMap 사 . openSliders>>\n<<siteMap 아 . openSliders>>\n<<siteMap 자 . openSliders>>\n<<siteMap 차 . openSliders>>\n<<siteMap 카 . openSliders>>\n<<siteMap 타 . openSliders>>\n<<siteMap 파 . openSliders>>\n<<siteMap 하 . openSliders>>\n<<siteMap 기타 . openSliders>>\n<<siteMap C . openSliders>>\n<<siteMap D . openSliders>>\n<<siteMap E . openSliders>>\n<<siteMap H . openSliders>>\n<<siteMap M . openSliders>>
!! OS &nbsp; &nbsp; ────────────────\n!!!#. 우분투 (Ubuntu)\n우분투(Ubuntu)는 데비안 GNU/리눅스(Debian GNU/Linux)에 기초한 컴퓨터 운영 체제로서 고유한 데스크탑 환경인 유니티를 사용하는 리눅스 배포판이다. 영국에 기반을 둔 회사인 캐노니컬의 지원을 받는다. 일반적으로 여섯 달마다 새 판이 하나씩 나오는데 이것은 GNOME의 새 판이 나오는 시기와 비슷하다. 데비안 GNU/리눅스와 견주어 볼 때 사용자 편의성에 많은 초점을 맞추고 있다.\n \n우분투는 그 이름을 남아프리카 공화국의 건국 이념인 우분투 정신에서 가져왔다. 남아프리카 성공회 대주교인 데스몬드 투투 대주교에 의하면 우분투에는 옮겨 쓰기에는 어려울 정도로 다양한 뜻이 있다고 한다. 일반적으로 우분투 운영 체제 사용자들 사이에서, 우분투는 반투어로 "네가 있으니 내가 있다"라는 의미로 사용되고 있으며, 이 문서에선 "다른 사람을 위한 인간애"(영어로는 "humanity towards others")라고 번역되어 있다.\n \n2012년 기준으로 온라인 설문 조사 결과에 따르면, 우분투는 개인용 데스크톱과 노트북에서 가장 인기있는 리눅스 배포판이다.\n\n\n!! 프로그램 &nbsp; &nbsp; ────────────\n!!!#. 루비 (Ruby)\n; 간결함과 생산성을 강조한 동적인 오픈 소스 프로그래핑 언어\n\n!!!#. 에스큐엘라이트 (SQLite) \n; MySQL나 PostgreSQL와 같은 데이터베이스 관리 시스템이지만, 서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스이다. 영어권에서는 '에스큐엘라이트'또는 '시퀄라이트'라고 읽는다.\n\n일반적인 RDBMS에 비해 대규모 작업에는 적합하지 않지만, 중소 규모라면 속도에 손색이 없다. 또 API는 단순히 라이브러리를 호출하는 것만 있으며, 데이터를 저장하는 데 하나의 파일만을 사용하는 것이 특징이다. 버전 3.3.8에서는 풀텍스트 검색 기능을 가진 FTS1 모듈이 지원된다. 컬럼을 삭제하거나 변경하는 것 등이 제한된다.\n \n구글 안드로이드 운영 체제에 기본 탑재된 데이터베이스이기도 하다.\n\n
폴라니가 신자유주의의 핵심 공리인 자기조정적 시장에 대한 통렬한 비판자라는 점에서 그의 사상을 음미해 볼 충분한 가치가 있다.\n\n폴라니는 오늘날 신자유주의에 해당하는 자기조정적 시장이라는 신화를 논박하는 데 일생을 바쳤다. 그는 오스트리아로 망명해 <오스트리아 국민경제>의 편집자로 있는 동안 신자유주의의 대부로 알려진 프리드리히 폰 하이에크와 그의 스승 루드비히 폰 미제스(한계효용혁명의 주창자 중 한 명)의 자유 시장 논리를 반박하는 데 주력했다.\n
&nbsp; ; 마케팅의 목적은 소비자들의 충족되지 못한 욕구를 발견하고, 그것을 충족시킬 방법을 마련하여 판매를 불필요하게 하는 것\n\n대부분의 경영자들이 기업은 무엇인가에 대한 대답으로 '영리를 추구하는 조직'이라고 하는 반면 피터 드러커는 '영리를 추구한다'는 말이 '기업'에 대해 정의하는 데 적합하지 않으며, 기업의 존재 이유는 '고객'이며 목적은 '시장'이라고 주장했다.\n\n피터 드러커의 경영관으로 기업의 경영의 중심에 고객을 두고, 근로자를 비용이 아닌 자산으로 인식시키려 했다는 점이 피터 드러커가 현대 경영학에 남긴 가장 큰 업적으로 평가 받고 있다.
!!!#. 게임QA 의 주요 업무 - 테스트, 피드백, 매니지먼트\n<html><IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/gameqa_38.jpg" width=400></html>\n\n출처 ; http://gameqa.tistory.com/notice/58 - GameQA 와 관련한 정보와 커뮤니티 공간을 지향\n\n현직에 종사하고 있는 업계 관계자에게\n게임QA 의 업무에 대해 이야기를 해보라고 한다면,\n아마도 이야기 하는 사람마다 다 다른 대답이 나올 것입니다.\n\n왜냐하면, 게임QA 가 어떤일을 할 수 있는지, 여러포지션에서 다양하게 경험해본 사람이 거의 없고,\n임원급 경영진 중에서 게임QA 출신이 거의 없기 때문에, 어떤 역할을 맡길 것인지에 대한 비전을 제시하기도 어렵습니다.\n\n저는 다행히 운이 좋아서, 여러회사에서 다양한 포지션의 QA업무를 경험할 기회가 있었고,\n그래서 이제는 게임QA가 어떤 업무를 하는 직군인지 대략이나마 이야기를 할 수 있게 되었습니다.\n※ 운영, 프로그램, 기획, 독립부서 등 QA가 포지셔닝 할 수 있는 조직은 거의 다 경험을 해본것 같습니다.\n\n결론을 말하자면 게임QA 업무는 테스트 + 피드백 + 매니지먼트 이렇게 정리할 수 있겠습니다.\n\n게임QA 의 주요 업무 중 가장 큰 비중을 차지하고, 또 근간이 되는 부분은 테스트 입니다.\n테스트를 해보지 않고서는 그 게임이 어떤 상태인지를 이야기 할수가 없으니까요.\n테스트는 다시 기본테스트, 기능테스트, 풀테스트, 하드웨어테스트 등등... 다시 세부적으로 나눌 수 있는데\n 각각에 대해서는 다음에 따로 정리를 할 예정입니다.\n\n테스트 이외에 최근에 많이 요구되는 부분은 피드백 입니다.\nNCsoft 에서 Fun QA 를 활용하여 아이온의 성공을 더욱 공고히 한 사실이 알려지면서\n다른 회사에서도 게임안밖에 대한 다양한 자료를 QA에 요구하는 추세로 변하고 있습니다.\n외부조사로는 시장조사, 타게임분석, FGT 등이 있고, 내부조사로는 게임로그 분석 등이 여기에 해당합니다.\n\n매니지먼트는 생소하게 느끼시는 분들도 있으실텐데\n게임QA 중에서도 개발QA 쪽 업무는 패치와 버전관리를 기반으로 하고 있어서\n기획서검토, 패치노트작성, SVN관리, 패치, 기능검수 등과 같은 직관적으로 이해되는 업무에서 부터\n일정관리, PMS관리, 개발자산관리 등 다른 지원부서의 업무등도 상황에 따라 포함될 수 있습니다.\n\n!!!#. SWQA(Software quality assurance) 와 GameQA(Quality Assurance) 의 다른점\n1. 목표가 다릅니다.\nSW 의 목표는 원하는 기능을 구현하는 것이고, Game 의 목표는 재미를 주는 것입니다.\n- SWQA 의 최고 목표는 원하는 기능의 결함이 없도록 하는 것이지만,\n- GameQA 의 최고 목표는 원하는 기능의 결함 여부보다 우선하여, 게임이 재미있게 만들어 지도록 하는 것입니다.\n\n2. 기획의 시기가 다릅니다.\n- SWQA 는 기획이 미리 정해지고, \n- GameQA 는 만들면서 기획이 정해집니다.\n\n3. 업데이트 주기가 다릅니다.\n- SWQA 는 업데이트 주기가 길지만, \n- GameQA 는 상시 서비스 상태로 수시 업데이트 합니다. \n
대한민국 왕초보탈출 시원스쿨(www.SiwonSchool.com)\n이시원 강사\n&_nbsp;\n&nbsp; &nbsp;\n\n++++!!![>왕초보탈출 3탄]>\n''1강 과거연습과 긍정 / 부정 답변''\n+++[2014.09.04.(목)]\n1. 영어의 기본 골격 ; 누가 어떻다.\n\n2. 시제\n&nbsp; &nbsp; what I say - 내가 말하는 것\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; I said - 내가 말했던 것\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; I've said - 내가 말해 왔던 것/ 내가 말했던 적 있는 것\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; I've been saying - 내가 말해 왔던 것\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; I will say - 내가 말할 것\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; I am saying - 내가 말하는 중인 것\n\n3. Do you know ? (넌 아니 ?) \nDo you understand what I say ?\n&nbsp; &nbsp; ──> I understand what you say.\n&nbsp; &nbsp; ──> I don't understand what you say.\n\n4. 과거형 연습\nDid you understand? ──> I understood./ I didn't understand.\n===\n\n''2강 과거와 현재완료''\n+++[2014.09.17.(수) ~ 09.22.(월)]\n1. Have you worked ? - 너는 일했었니 ? / 너는 일해왔니 ? / 너는 일했던 적 있니 ? )\n ──>I have worked./ I haven't worked.\n\n2. Did you have ? - 드셨습니까?\n&nbsp; &nbsp; I had.\n&nbsp; &nbsp; I didn't have. \n\nHave you had ? (dinner/ morning coffer/ breakfast)\n&nbsp; &nbsp; I have had. (dinner/ morning coffer/ breakfast)\n&nbsp; &nbsp; I haven't had. (dinner/ morning coffer/ breakfast) \n===\n\n''3강 현재완료와 현재완료진행''\n+++[2014.09.23.(화) ~ 09.25.(목)]\n1. have worked &nbsp; &nbsp; - 계속 일해왔다/ 일했다/ 일한적 있다.\n&nbsp; &nbsp; have been working - 계속 일해왔다/ 일했다/ (일한적 있다라는 표현은 되지 않음)\n===\n\n''4강 현재형/완료형/미래형/과거형을 연습''\n&nbsp; &nbsp;2014.09.26.(금) ~ 09.29.(월) ... Have you ~ed ? / Have you been ~ing? Do you ? / Are you ~ing ? / Can you ~ ?\n''5강 형용사절을 형용사구로 바꾸기''\n+++[2014.09.30.(월) ~ 10.14.(화) ... There are millions of people watching this show right now in the world. ]\n1. people - 사람들\n&nbsp; &nbsp; people (that are) waiting - 기다리는 사람들\n&nbsp; &nbsp; people waiting outside - 바깥에서 기다리는 사람들\n\n2. there is / there are - 있다.\n&nbsp; &nbsp; there are people waiting outside - 바깥에서 기다리는 사람들이 있다.\n\n3. I have a friend. - 난 친구가 있어요.\n&nbsp; &nbsp; I have a friend studying English. - 저는 영어를 공부하는 친구가 있어요.\n===\n\n''6강 형용사절을 형용사구로 바꾸기''\n+++[2014.10.15.(수) ~ 10.21.(화) ... I have apples that are sold here = I have apples sold here. (수동태 생략 형태) ]\n1. 앞 문장이 과거이기 때문에 뒤 문장이 자동으로 과거형이 되지 않는다 (뜻이 완전히 달라짐).\n&nbsp; &nbsp; There are many people asking questions. (질문을 하는 사람들)\n&nbsp; &nbsp; There are many people asked questions. (질문을 받는 사람들)\n\n2. I have apples that are sold here. - 나는 여기서 팔리는 사과를 가지고 있었다.\n&nbsp; &nbsp; ≒ I have apples sold here.\n\n3. There is light fixed on the ceilling. - 천장에 고정되어진 등이 있습니다.\n&nbsp; &nbsp; There is light hanging on the wall. - 벽에 매달려 있는 등불이 있습니다.\n&nbsp; &nbsp; There is a sign painted in red on the wall. - 빨간색으로 칠해진 사인이 벽에 있습니다.\n===\n\n''7강 영어문장늘이기 연습''\n+++[2014.10.22.(수) ~ 10.27.(월) ... to receive information about you that may arise, or be revealed]\n1. There were students waiting outside in -20℃ for at least 20 minutes.\n&nbsp; &nbsp; ; 학생들은 -20℃에서, 적어도 20분 동안 밖에서 기다리고 있다.\n\n2. 호주 이민 심사표\nDo you want your authorized recipient to receive the information about you that may arise, or be revealed, in the course of this application ?\n&nbsp; &nbsp; ; 당신은 이 신청과정에서 생겨날지도 모르고, 발설될지도 모르는 당신에 관한 정보를 허가된 수신자가 받기를 원하십니까?\nDo you want your friend to get your information that may arise?\n&nbsp; &nbsp; ; 당신은 당신의 친구가 생겨날지도 모르는 당신의 정보를 받기를 원하십니까?\n===\n\n''8강 분사구문( ~하기 때문에)''\n+++[2014.10.28.(화) ~ 10.31.(금) ... I couldn’t study because I have a lot of friends. - Having a lot of friends, I couldn’t study]\n1. ~ 때문에 ; Being ~ \nI can speak Engilsh because I'm from Canada. - 캐나다에서 왔기 때문에 난 영어를 할 수 있어요.\n&nbsp; &nbsp; ──>Being from Canada, I can speak Engilsh.\n\n2. ~ 할 수 있었기 때문에 ; Being able to ~\nBeing able to study English, I wanted to work there. - 영어 공부를 할 수 있었기 때문에, 난 거기서 일하길 원했어요.\n\n3. ~ 없었기 때문에 ; Not having ~\nNot given enough money, I couldn't study. - 충분한 돈이 주어지지 않았기 때문에 난 공부를 할 수 없었어요.\n===\n\n''9강 ~ 하더라(~카더라)''\n+++[ 2014.11.05.(수) ~ 11.07.(금) ... He said (that) / He is saying (that) ]\n1. ~ 한 것 같아, ~ 라고 생각해 ; I think (that)\n&nbsp; &nbsp; I think he is busy. - 그는 바쁜 것 같아.\n\n2. 나는 생각했어/ 난 그럴줄 알았어 ; I thought.\n&nbsp; &nbsp; I thought he has a lot of money. - 난 그가 돈이 많은 줄 알았어.\n\n3. he told me that he was busy - 시간 없다 그러더라고\n===\n\n''10강 ~ 해 왔다/한 적이 있다/계속했다(과거 완료형의 해석 ≒ 과거의 과거)''\n+++[ 2014.11.20.(목) ~ 11.26.(수) ... I was very tired because I had been working all day ]\n1. I have studied = I have been studying. (step2 내용중)\n&nbsp; &nbsp; He told me that he loved me. - 그가 나를 사랑한다고 그러더라고\n===\n\n''11강 ~ 그러더라고 / 해석 예문(문장 구조 강조) !!''\n+++[ 2014.12.30.(화) He said that ~ ]\n#. 수동태 - get 사용이 가능\ncover ; 보상하다\nbe(get) covered ; 보상 받다 (수동태 현재형) \nhad gotten covered ; 보상 받았다 (수동태 과거 완료형)\n===\n\n''12강 ~ 간접의문문 ''\n+++[ 2015.01.09.(금) I don’t know how coffee was made ]\n1. 무슨 신발이 만들어 지는지 - what shoes are made\n2. which approach ; 어떤 방법(접근법)\n&nbsp; &nbsp; Do you know which approach doctors take? - 너는 아니? 어떤 방법을 의사들이 선택하는지?\n3. 방법\n&nbsp; &nbsp; I don’t know how coffee was made. - 나는 커피가 어떻게 만들어 졌는지 모르겠어.\n===\n\n''13강 ~ be adjective(형용사) of ''\n+++[ 2015.01.28.(수) I was proud of my son. ]\n1. 나 대신에 for me / 재 대신해서 for him / 우리를 대신해서 for us\n&nbsp; &nbsp; 나 커피 좀 갖다 줄래 ? - Could you go get some coffee for me?\n\n2. 난 부정적이야 - I am skepticla./ 난 ~에 대해 부정적이야 - I am skepticla of ~.\n&nbsp; &nbsp; 나는 자랑스러워 - I'm proud./ 내가 여기 있다는게 자랑스러워 - I'm proud of the fact that I'm here.\n\n3. 내가 여기에 있다. - I'm here.\n&nbsp; &nbsp; 내가 여기에 있다는게 - that I'm here.\n&nbsp; &nbsp; 내가 여기에 있다는 사실이 - the face that I'm here.\n===\n\n''14강 to → ~ that you are studying등 명사절 활용연습 (주어가 있는 경우)''\n+++[ 2015.03.09.(월) ]\n1. 너(는) - you\n&nbsp; &nbsp; 너야(입니다) - is you\n \n2. 쉽다 - It is easy.\n&nbsp; &nbsp; 쉬워질거야 - It will be easy/ It's going to be easy/ It's gonna be easy.\n\n3. 명사절\nIt's (not) late to study tomorrow. - 내일 공부하기에 늦었다(늦지않았다).\nIt's (not) late that we study tomorrow. - 내일 우리가 공부하기에 늦었다(늦지않았다). ; 주어가 있는 경우\n\n4. What make me + 동사 또는 형용사 - 나를 ~ 하게 하는 것\nWhat makes me happy - 나를 행복하게 하는 것\nWhat made me happy was that you were here. - 나를 행복하게 했던 것은 너가 여기에 있었다는 거였어.\n\n5. ~ 거야 - is that ~\n&nbsp; &nbsp; ~ 거였어 - was that ~ \n===\n\n''15강 → What + 명사절 ( What ~+ is that~)''\n++++[ 2015.03.19.(목) ]\n1. What I liked about you - 내가 너에 대해서 마음에 들었던 점은 \n&nbsp; &nbsp; What I liked about this car - 내가 이 차에서 마음에 들었던 점은\n&nbsp; &nbsp; What I liked about what he had said - 내가 그가 이야기 했던 것 중에 마음에 들었던 것은\n\n2. What I didn't like aubot you ( What + 주어 + 동사 + about ~)\n&nbsp; &nbsp; What I can't see ~\n&nbsp; &nbsp; What I can't understand ~\n&nbsp; &nbsp; What I couldn't say ~\n\n3. What (should) concerns us foremost ~ * (What + 동사 + 목적어 ~)\n&nbsp; &nbsp; Concern = makes me(us) worry\nWhat concerns us (foremost) @@color(#04f): is not that @@ Amaze.com managers believe that they have a right to set up the price for the book.\n&nbsp; &nbsp; &nbsp; &nbsp; It @@color(#04f): is that @@ 아마존's managers believe that they have power to enfore their will by cutting off the access to the books.\n===\n\n\n@ <============ 3강 추가 부분===\n<왕초보탈출 3탄>\n\n+++!!![>왕초보탈출 2탄]>\n\n''1강 1탄 문법 총정리 하기''\n\n''2강 ~ 4강 That 하나로 문장을 다양하게''\n+++[2014.07.]\n1. That을 앞두면, '~한다'를 '~하는'으로 변형\n&nbsp; &nbsp; / that 앞에 명사에는 'the'를 붙인다.\n&nbsp; &nbsp;/ 내가 타는 버스 The bus that I take\n\n2. He/ She/ It에 붙던 'has'는 앞에 does/ dones not(doesn't)이 오면 'have'로 바뀐다 ~\n\n3. 나는 ~하려고 합니다. I'm trying to do ~\n&nbsp; &nbsp; 사귀다 go out with\n===\n\n''12강 Have로 문장의 깊이를 더하기''\n+++[2014.07.15.]\n1. 기본 구조\n&nbsp; &nbsp; ㆍ work -> am working ; be 동사 뒤에 동사가 오려면 동사 ~ing 형태로 와야 함\n&nbsp; &nbsp; ㆍ worked -> was working\n&nbsp; &nbsp; ㆍ have worked -> have been working\n\n2. 장점\n&nbsp; &nbsp; / have worked -> have been working\n&nbsp; &nbsp; / have been busy\n\n3. 주의 ; 95 % 동일 + 5 % 다른 점\n&nbsp; &nbsp; / 완료형 ; ① ~ 해왔다. ② ~ 한 적있다. ③ ~ 계속 했다. ≒ 과거의 뜻으로 사용\n&nbsp; &nbsp; -> 현재완료 진행형 have been ~ing (계속 ~ 해왔다)으로 ②을 표현할 수 없다.\n===\n\n''13강 Something that과 같은 표현 what 연습하기''\n+++[2014.07.17.]\n1. 완료형과 that을 함께 사용\n\n2. Something that ~ ; 무언가, ~하는 것 (사물) 을 줄여서 what으로 !\n Someone that ~ ; 누군가 (사람)\n\n3. There is someone that ~ ; ~ 누군가가 있다.\n===\n\n'' 14강 ~ 15강 주체가 어떤 행동이 되어짐을 나타내는 '수동태' '' \n+++[2014.07.18. ~ 07.19.]\n14.1. Finish : 끝내다 -> Is finished : 끝나다.\n&nbsp; &nbsp; is finishing (끝낸다) -> is finished (끝납니다)\n\n14.2. 수동태의 시제\n&nbsp; &nbsp; 현재 is made -> 만들어진다.\n&nbsp; &nbsp; 과거 was made -> 만들어졌다.\n&nbsp; &nbsp; 미래 will be made -> 만들어질 것이다.\n&nbsp; &nbsp; cf. will make -> 만들거다.\n\n15.1. 구조\n| make | be made | 조동사 + ~ |\n| | is made | will be made |\n| | are made | can be made |\n| | am made | should be made |\n| 수동태의 진행형 | is being made | |\n\n15.2. 표현\n&nbsp; &nbsp; is made - 만들어 지다.\n&nbsp; &nbsp; was made - 만들어 졌다.\n&nbsp; &nbsp; that wad made - 만들어 졌던.\n\n15.3. 수동태에 따라오는 전치사\n&nbsp; &nbsp; by - 에 의해서 ; 경로\n&nbsp; &nbsp; for - 로, (위해서) ; 이유\n&nbsp; &nbsp; form - 로부터 \n\n15.4. * be given - 주어지다.\nI am given with the money. - 나에게 돈이 주어졌다.\n주어집니다 - is given\n주어지는 - that is given\n주어졌던 - that was given. 예) 주어졌던 시간 - the time that was given\n주어질 - that will be given\n===\n\n'' 16강 일상생활 표현들을 배워보자! ''\n+++[2014.07.24.]\n-. 일상생활에서 많이 쓰는 표현\n&nbsp; &nbsp; do you want to ~ ? - ~ 래요? (요청)\n&nbsp; &nbsp; Could you ~ - ~ 래요? ~ 해둘래요 ? (부탁 등 공손하게 표현)\n\n&nbsp; &nbsp; would you like to ~ ? - ~ 래요?, ~ 하고 싶니? \n \n&nbsp; &nbsp; get - 얻다, 받다/ 오다/ 도착하다/ 가져오다\n===\n\n'' 17강 마법과도 같은 that (상황에 따라 who, where, which) '' \n+++[2014.07.30.]\n1. That 상항에 따라 : who(사람), where(장소), which(사물)로 바뀜\n\n2. 나는 있다 : I am in\n&nbsp; &nbsp; 내가 있는 : where I am in\n&nbsp; &nbsp; 내가 있는 방 : the room where I am in\n&nbsp; &nbsp; 내가 있는 방 알아 ? : Do you know the room where I am in ?\n\n3. that : 사람 (who + 동사), (whom + 주어)\n&nbsp; &nbsp; The people who are studiyng : 공부를 하는 사람들\n&nbsp; &nbsp; The people whom I have met : 내가 만났던 사람들 ('~에게'라는 표현에 적절) ≒ 회화에 who 사용\n===\n\n''18강 과거보다 더 이전의 일을 말할 때는? 과거완료 시제를 사용한다 ! ''\n+++[2014.08.01.]\n1. 과거에 있었던 일을 설명할 때 ; had worked - 과거 완료 \n&nbsp; &nbsp; cf. have worked - 현재완료\n&nbsp; &nbsp; &nbsp; &nbsp; -> 현재완료와 과거완료는 주로 that, who와 뭉쳐서 쓰임\n\n&nbsp; &nbsp; have studied 의 반대는 have not studied\n&nbsp; &nbsp; had studied의 반대는 had not studied)\n\n2. 관계 대명사 whose (= who has/ who - whose - whom)\n&nbsp; &nbsp; the sister who has a bus - 버스를 가진 여동생\n&nbsp; &nbsp; the sister whose a bus is red - 빨간 버스를 가진 여동생\n\n3. I met the person who had been trained in 안기부 - 나는 안기부에서 훈련을 받았던 사람을 만났다.\n&nbsp; &nbsp; I met the person who had trained in 안기부 - 나는 안기부에서 훈련을 시켰던 사람들을 만났다.\n===\n\n''19강 주어와 동사 말하는 연습 + 시제에 맞게 대답하기''\n+++[2014.08.05.]\n1. Are you ~ ? ⇒ I am/ I am not (긍정과 부정으로 대답)\n&nbsp; &nbsp; Is that my car ? ⇒ That is your car./ That is not your car.\n\n&nbsp; &nbsp; Do you ~ ? ⇒ I/ I don't\n&nbsp; &nbsp; Did you ~ ? ⇒ I/ I didn't\n\n&nbsp; &nbsp; Did you have breakfast ?\n&nbsp; &nbsp; &nbsp; &nbsp; I had breakfast.\n&nbsp; &nbsp; &nbsp; &nbsp; I didn't have breakfast.\n\n&nbsp; &nbsp; Was it? ⇒ It was/ It wat not\n\n2. 현재 완료형\n&nbsp; &nbsp; Have you ~ ? ⇒ I have/ I have not (haven't)\n\n3. I'm afraid(= worried) that 주어 + 동사 : 나는 ~ 할 까봐 걱정돼\n&nbsp; &nbsp; I'm afraid that English might be hard. - 나는 영어가 어려울 까봐 걱정돼.\n\n&nbsp; &nbsp; 내가 사랑하는 - whom I love\n&nbsp; &nbsp; 언제부터 - since when (since ~ 이래로)\n===\n\n''20강 ~ 21강 누구의 말을 전달할 때 (~하더라고요, 그러던데요, 그러더라고요) 의 that (1)''\n+++[2014.08.06. ~ 08.08.]\n20.1. He said that (쎄 뎃) 주어 + 동사 he was busy.\n\n&nbsp; &nbsp; Said that "... " - 그대로 전달\n&nbsp; &nbsp; He said that Korea was beautiful. (= He said that "Korea is beautiful".)\n\n&nbsp; &nbsp; He said that the school (that he was in) was fine.\n\n20.2. be good at + 명사 - ~을 잘하다\n\n&nbsp; &nbsp; want + 명사\n&nbsp; &nbsp; want to 를 줄여서 winna ⇒ winna go\n \n&nbsp; &nbsp; go (간다) - went (갔다) - have been (간 적 있다) cf. have gone - 완전히 가버렸다.\n&nbsp; &nbsp; come - came - have been\n\n21.1. 서울에는 남산이 있다 (남산을 가지고 있다.)\n&nbsp; &nbsp; 내가 살고 있는 집은 방이 3개가 있다 (방을 3개 가지고 있다.)\n\nTold me (톨 미) ~ 그래잖아\nYou told me that you were busy.\nYou told me that you would go to school. (~ 할거라 그랬잖아)\n\nI'm not sure ~ 할지 모르겠어\nI'm not sure if ~ 어떻게 할지 안 할지 모르겠어.\n\nI'm not sure if this is right or not. 이게 맞는지 아닌지 모르겠어.\nI'm not sure if this is good enough. 이거 충분히 좋을지 모르겠어.\n===\n\n''22강 문장에서 that is는 생략가능 하다!''\n+++[2014.08.13.]\n1. The car (that is) fast ⇒ the fast car (∵ that is를 생략하면서 단어 순서가 바뀜)\n&nbsp; &nbsp; The TV that was fixed. ⇒ The fixed TV\n\n/ the book that wat sold in 교보 ⇒ the book, sold in 교보 - 교보에서 팔렸던 책\n&nbsp; &nbsp; The phone that was made in China ⇒ The phone, maid in China\n\n2. get 으로 사람, 물건을 잡는다는 표현이 가능\n&nbsp; &nbsp; 재를 잡아주세요 - get him\n&nbsp; &nbsp; 재를 올려 보내 - get him up\n&nbsp; &nbsp; 가방 여기로 가지고 와 - get my bag here\n&nbsp; &nbsp; 내 차 좀 빼내주세요/ 들여보내주세요 - get my car out/ in\n\n/ get + 과거형 ⇒ '이렇게 해놔'\n&nbsp; &nbsp; 이거 청소해놔 - get this room cleaned\n&nbsp; &nbsp; 창문 닫으세요 - get the window closed\n&nbsp; &nbsp; Could you get this down ? - 이거 내려주실 수 있어요?\n\n3. have도 get과 비슷한 의미를 지닌다.\n&nbsp; &nbsp; I had your room cleaned - 내가 니 방 청소해줬어\n===\n\n''23강 ~ 24강 총정리 ''\n+++[2014.08.14. ~ 08.20.]\n1. 사물일 때 which\n&nbsp; &nbsp; that is good = which is good\n&nbsp; &nbsp; 나는 다른 무언가가 필요해 - I need something that/ which is different\n\n2. 여성용 is for women\n&nbsp; &nbsp; 이거 여성용이에요 - this is for women\n\n3. could have pp ~ 할 수 있었는데 ; 만날 수 있었는데 - could have met\n&nbsp; &nbsp; should have pp ~ 했었어야 했는데 ; 너 여기 왔었어야 해 - you should have been here\n===\n\n''보너스강좌 ''\n++++[2014.08.21. ~ 08.29.]\n+++!!!![#. 보너스강좌 1강 ~ 하게 하다. (I make you(목적격) ~)]\n1.1. 나는 ~ 하기를 원해 (I want to ~ )\n&nbsp; &nbsp; I want to go (나는 가기를 원해) - 목적어가 주어가 대한 경우\n&nbsp; &nbsp; I want you to go (네가 가기를 원해) - 주어와 목적절의 주체가 틀린 경우\n\n1.2. 나는 너를 ~ 하게 만든다. = ~ 하게 하다 (I make you(목적격) ~ )\n&nbsp; &nbsp; I make you study - 나는 너를 공부하게 만든다. = 나는 너를 공부하게 해.\n&nbsp; &nbsp; You made me study - 너는 나를 공부하게 만들었다.\n\nYou want me to be happy.\nYou make me happy. (be happy가 행복하다지만, make가 올 때는 to be가 생략)\n===\n+++!!!![#. 보너스강좌 2강 ~ 인 것 같아, ~인 것 같니?, ~인 것 같지 않니? (I think ~)]\n2.1. ~하는 것 같아 ≒ ~라고 생각해 - I think ~\n&nbsp; &nbsp; I think, I am hungry (나는 배고픈 거 같아.) \n\n2.2. ~ 너는 ~인 것 같니? ≒ 너는 ~라고 생각하니? - Do you think ~\n&nbsp; &nbsp; Do you think, I study well? (너는 내가 공부를 잘 하는 거 같니?)\n\ncf. I think, this was good - 이것은 맛있었던 것 같다(과거).\n===\n+++!!!![#. 보너스강좌 3강 ~ 하면서 ~ 하다.(, ~ing ~ )]\n3.1. '~하면서'라고 표현하고 싶다면, 동사를 동명사로 만들어 주라. (, ~ing ~ )\n&nbsp; &nbsp; I am working, listening to the music (나는 음악을 들어면서 일하는 중이다.)\n&nbsp; &nbsp; ⇒ 현재/ 과거/ 미래의 시제는 (콤마) 앞의 문장으로 결정 \n\n3.2. 순서를 바꿔 말해도 같은 뜻이 된다.\n&nbsp; &nbsp; I will listen to the music, sitting by the window. = Sitting by the window, I will listen to the music.\n===\n++++!!!![#. 보너스강좌 4강 (3강의 연장) ~ 하고 나서(After ~ing ~)/ ~ 하기 전에(Before ~ing ~ )]\nAfter finishing my homework, I can go home. (내 숙제를 끝내고 나서, 난 집에 갈 수 있다.)\nBefore watching TV, you have to finish your homework. (넌 TV를 보기 전에, 숙제를 끝내야 해)\n\ncf. After ~, Before ~ 문장은 앞,뒤로 순서를 바꿀 수 있고, 콤마 뒤의 문장에는 어떤 시제도 올 수 있다(과거, 현재, 미래).\n===\n++++!!!![#. 보너스강좌 5강강의 연장) that을 생략]\n5.1. that 생략 가능\n&nbsp; &nbsp; A book that I like ⇒ A book I like\n&nbsp; &nbsp; People that I meet ⇒ People I meet\n\n5.2. that 생략이 불가능\n&nbsp; &nbsp; 1. bus (that) I take \n&nbsp; &nbsp; 2. bus that goes to Sam-sung dong is 69. - 불가능 ; that을 생략할 경우 바로 동사로 이어지는 문장이 되기 때문에 말이 되지 않음\n\n5.3. that + be 동사가 한꺼번에 왔을 때 that + be를 같이 생략 !\n&nbsp; &nbsp; Bus that is going to Sam-sund dong ⇒ Bus going to Sam-sung dong (삼성동으로 가는 버스)\n&nbsp; &nbsp; People that are making money ⇒ People making money (돈을 버는 사람들)\n===\n=== \n===\n<왕초보탈출 2탄>
CSS (Cascading Style Sheets)는 documents가 사용자에게 어떻게 보여질가를 기술하는 언어이다.\n\n참고 사이트\n&nbsp; &nbsp; http://www.homejjang.com/07/how_to.php\n&nbsp; &nbsp; http://blog.wincomi.com/175\n&nbsp; &nbsp; http://coursesweb.net/css/\n\n++++!!!![#. CSS 사용법 ; HTML문서에 CSS를 사용하는 3가지 방법]>\n+++!!!![1. 외부 스타일 시트(External Style Sheet)]\ncss라는 확장자를 가진 스타일 시트 파일을 만들고 이 파일을 HTML 문서에 연결하여 사용하는 방법\n\n<head>\n <link rel="stylesheet" type="text/css" href="mystyle.css">\n</head>\n\n이 방법의 장점은 홈페이지 전체의 스타일을 일관성있게 유지하면서 변경시에도 일괄적으로 변경되므로 홈페이지 제작의 효율성을 극대화\n반면 외부 스타일 시트 파일을 계속적으로 관리해주면서 HTML 문서를 만들어 나가야 하기에 불편한 경우가 있습니다. 그리고 외부 스타일 시트 파일이 지나치게 복잡해지면 곤란하므로 css파일을 관리하는 노하우가 필요.\n===\n+++!!!![2.내부 스타일 시트(Internal Style Sheet)]\nHTML문서내에서 <head>와 </head>사이에 스타일을 정의하는 방법\n{{{\n<head>\n <style type="text/css">\n <!--\n body {font-size:9pt;}\n //-->\n </style>\n</head>\n}}}\nHTML문서마다 스타일을 매번 지정해 주어야 하지만, 한 문서에만 해당되는 스타일을 지정할때 사용\n===\n+++!!!![3.HTML태그내에 스타일 지정(Inline Styles)]\n위의 방법들에 비해서 적용범위가 더욱 좁아진 형태, 스타일을 적용하고 싶은 HTML태그안에서 정의하는 방법.\n\n<p style="color:gray;">이 문단의 색상은 회색으로 지정됩니다.</p>\n\n내용과 스타일의 분리 그리고 이로 인한 스타일 일괄변경의 효율성 측면으로 볼때는 바람직하지 않는 방법\n그러나 위의 소스에서도 보듯이 직관적으로 사용이 가능하다는 장점이 있음\n===\n===\n\n++++!!!![#. CSS 문법]\nCSS 구문은 '''선택자(selector)와 선언''으로 구성되며, 선언은 __속성(property)과 값(value)__으로 구성\n\n#. 선택자는 HTML 태그 중 하나로 <p>태그를 선택자로 사용한 예\n-. 속성과 속성값은 계속적으로 추가가 가능합니다. 이때 ''; 기호를 사용''하여 추가\n&nbsp; &nbsp; p {color:red ; width:200} \n\n-. 선택자 역시도 추가할 수 있습니다. 이때 '', 기호를 사용''하여 추가\n&nbsp; &nbsp; p, td {color:red ; width:200}\n&nbsp; &nbsp; &nbsp; &nbsp; → 문단(p)뿐 아니라 테이블의 셀(td)의 스타일도 {}안의 내용처럼 지정하라는 의미.\n++++!!!![▷ 선택자(Selector)의 종류]>\n선택자(Selector)가 있어야 선언된 CSS가 어디에 적용될지를 결정할 수 있기 때문. 특히 CSS는 상속의 개념을 가짐.\n+++!!!![공통 선택자(Universal Selector)]\n*로 표현되는 선택자입니다\n&nbsp; &nbsp; * { color: gray; }\n&nbsp; &nbsp; &nbsp; &nbsp; → 모든 element 에 color: gray; 라는 스타일을 지정\n===\n+++!!!![타입 선택자(Type Selector)]\np, div, span, table, td, form...등과 같은 HTML 태그를 선택하는 선택자\n&nbsp; &nbsp; p { color: gray; }\n&nbsp; &nbsp; &nbsp; &nbsp; → P element에 color: gray; 라는 스타일을 지정\n===\n+++!!!![ID 선택자(ID Selector)]\n# 이라는 지시어를 사용하면서 element의 아이디값을 지정(특정 element에만 스타일을 지정)\n&nbsp; &nbsp; #gray_text { color: gray; }\n&nbsp; &nbsp; &nbsp; &nbsp; → id 값이 gray_text 인 element에만 스타일이 적용\n===\n+++!!!![Class 선택자(Class Selector)]\n.이라는 지시어를 사용하면서 element의 클래스값을 지정(ID 선택자와 차이점이라면 클래스의 경우는 한 문서에 동일한 이름의 클래스가 여러개 위치해도 괜찮으나 아이디는 유일해야 한다)\n&nbsp; &nbsp; .gray_text { color: gray; }\n&nbsp; &nbsp; &nbsp; &nbsp; → 클래스 값이 gray_text 인 element에만 스타일이 적용\n===\n===\n홈페이지 전체적인 스타일을 일관성있게 지정하기 위해서는 클래스(class)의 사용이 필수적. 실무에서도 클래스(class)의 사용은 빈번하게 사용\n{{{\n<style type="text/css">\n<!--\n.red {color:red}\n//-->\n</style>\n\n<h3 class="red">소제목에도 red 클래스를 지정합니다.</h3>\n<p class="red">red라는 이름의 클래스가 지정된 문단입니다.</p>\n}}}\n===\n\n+++!!!![#. block-level과 inline-level]\nHTML element 를 크게 2가지로 구분해보면 head element 처럼 화면에 표시되지 않은 element가 있고 div, p, table...과 같은 element 처럼 화면에 표시되는 element로 나눌 수 있다.\n\n● 화면에 표시되지 않은 element ; <head> element 내에서 써야 하는 style , link , meta \n● 화면에 표시되는 element ; <body> element 내에서 써야 하는 div , p , a , span 등의 element\n&nbsp; &nbsp; ○ block-level elements ; 한 라인에 하나만 위치, 즉 한 줄에 이어서 표시되지 않고 다음 줄에 표시\n&nbsp; &nbsp; &nbsp; &nbsp; p, h1~h6, ul, ol, pre, dl, div, noscript, blockquote, form, hr, table, fieldset, address\n&nbsp; &nbsp; ○ inline-level elements ; 한 라인에 2개 이상, 다른 인라인 엘리먼트와 가튼 줄에 표시, 즉 한 줄에 이어서 표시\n&nbsp; &nbsp; &nbsp; &nbsp; #PCDATA, tt, i, b, big, small, em, strong, dfn, code, samp, kbd, var, cite, abbr, acronym, a, img, object, br, script, map, q, sub, sup, span, bdo, input, select, textarea, label, button \n\n''Div / Span'' (style container)\n<div> 와 <span> 은 필요한 element들을 속에 담아 하나의 group로 묶는 element이다.\n단, 아무 element나 포함시킬수 있는 건 아니다.\nBlock-level element 는 inline-level element를 포함시킬수 있지만 반대의 경우는 금지된다.\n\n1) Div\ndiv는 block-level element들을 grouping 하는 용도로 사용하는 element이다. \ndiv는 다른 block-level element와는 달리 margin과 같은 초기값이 전혀 없다는 것이다.\nDTD에서는 div속에 body 를 제외한 화면에 표시되는 모든 element들을 담을 수 있도록 정의한다.\n\n2) Span\nspan도 div와 같은 맥락이나 다른점이 있다면 <span>속에 넣을 수 있는 element들이 inline-level로 제한된다.\nspan의 용도는 inline-level element 들의 grouping과 style 지정이다.\n===\n\n++++!!!![#. 텍스트에 적용하는 CSS 속성]\n텍스트의 스타일을 지정하기 위한 속성들\n| 속성 | 속성값 | 설명 |\n| color |red, #FF0000 | 텍스트 색상 |\n| direction |ltr, rtl | 텍스트 방향 |\n| line-height |150% | 줄 간격 |\n| letter-spacing |-0.1px | 글자 간격 |\n| text-align |left, right, center, justify | 텍스트 수평 정렬 |\n| vertical-align|top, middle, bottom | 텍스트 수직 정렬 |\n| text-decoration |none, underline, overline, line-through, blink | 텍스트 장식 |\n| text-indent |20px | 들여쓰기 |\n| text-transform |none, capitalize, uppercase, lowercase | 대소문자 지정 |\n| word-spacing |1px | 단어 간격 |\n+++[CSS 텍스트 color]\n-. color 속성을 이용하여 텍스트의 색상을 지정\n&nbsp; &nbsp; <p style="color:red">이 문단은 붉은색으로 지정됩니다.</p>\n\n-. 하이퍼 링크의 색상을 지정할 수도 있습니다.\n&nbsp; &nbsp; <style type="text/css">\n&nbsp; &nbsp; a {color:red}\n&nbsp; &nbsp; a:hover {color:green}\n&nbsp; &nbsp; </style>\n\n&nbsp; &nbsp; <p><a href="http://www.hoemjjang.com">홈짱닷컴</a>은 홈페이지 제작을 위한 가이드 역할을 합니다.</p>\n===\n\n+++[CSS 텍스트 direction]\n속성값은 ltr(left to right), rtl(right to left) 두가지 중 하나를 사용\n&nbsp; &nbsp; <p style="direction: ltr">direction 속성값을 ltr로 지정한 문단</p>\n&nbsp; &nbsp; <p style="direction: rtl">direction 속성값을 rtl로 지정한 문단</p> \n===\n\n+++[CSS 텍스트 backgroud-color]\n&nbsp; &nbsp; <p style="background-color:yellow;">문단의 배경색을 yellow로 지정</p>\n&nbsp; &nbsp; <p>문단의 <span style="background-color:yellow;">일부분의</span> 배경색을 yellow로 지정</p>\n&nbsp; &nbsp; 테이블에도 배경색을 지정할 수 있음 ; <table> <tr> <td>\n===\n\n+++[CSS 텍스트 line-height]\n라인의 높이를 지정\n&nbsp; &nbsp; <p style="line-height: 10px; background-color:gray;">라인의 높이를 10픽셀로 지정</p>\n&nbsp; &nbsp; <p style="line-height: 30px; background-color:gray;">라인의 높이를 30픽셀로 지정</p>\n줄간격으로, 배경색을 지정하지 않는 경우 leight-height를 10픽셀로 지정하는건 별 의미가 없다.\n한글의 경우 line-height를 100% 이상으로 지정하여 줄사이의 간격을 좀 띄우는 편이 가독성에 좋다.(일반적으로 130%~160%정도)\n===\n\n+++[CSS 텍스트 letter-spacing]\nletter-spacing 속성은 글자 사이의 간격을 지정(한글의 경우, 이 간격을 조금 좁혀줄 수 있음)\n&nbsp; &nbsp; <p>일반적인 문장</p>\n&nbsp; &nbsp; <p style="letter-spacing:-2px">글자사이의 간격을 좁힌 문장</p>\n&nbsp; &nbsp; <p style="letter-spacing:3px;">글자사이의 간격을 넓힌 문장</p>\n===\n\n+++[CSS 텍스트 text-align]\n텍스트의 정렬을 지정\n&nbsp; &nbsp; <p style="text-align:left">왼쪽 정렬입니다.</p>\n&nbsp; &nbsp; <p style="text-align:right">오른쪽 정렬입니다.</p>\n&nbsp; &nbsp; <p style="text-align:center">가운데 정렬입니다.</p>\n&nbsp; &nbsp; <p style="text-align:justify; width:200">자동 줄바꿈시 오른쪽 경계선 부분이 정리 (이 부분은 자동 줄바꿈이 되어야 효과를 확인).</p>\n===\n\n+++[CSS 텍스트 text-decoration ; 하이퍼링크의 스타일 지정]\n&nbsp; &nbsp; <p style="text-decoration:underline">underline 속성값이 적용된 예문입니다.</p>\n&nbsp; &nbsp; <p style="text-decoration:overline">overline 속성값이 적용된 예문입니다.</p>\n&nbsp; &nbsp; <p style="text-decoration:line-through">line-through 속성값이 적용된 예문입니다.</p>\n&nbsp; &nbsp; <p style="text-decoration:blink">blink 속성값이 적용된 예문입니다.</p> (글자가 깜박이는 효과인데 파이어폭스(FireFox)에서 제대로 표시)\n\ntext-decoration 속성값을 ''하이퍼링크의 스타일을 지정''하는데 많이 사용.\n<style type="text/css">\n&nbsp; &nbsp; a:link { text-decoration: none;}\n&nbsp; &nbsp; a:visited { text-decoration: none;}\n&nbsp; &nbsp; a:active { text-decoration: none;}\n&nbsp; &nbsp; a:hover {text-decoration:underline;}\n</style>\n\n&nbsp; &nbsp; <a href="http://www.google.co.kr">구글</a>은 초보자를 위한 홈페이지 제작가이드.\n===\n\n+++[CSS 텍스트 text-indent ; 들여쓰기]\n문단의 첫번째 줄을 지정한 길이만큼 들여쓰기 지정.\n&nbsp; &nbsp; <p>일반적인 문단입니다.</p>\n&nbsp; &nbsp; <p style="text-indent:20px;">20픽셀 들여쓰기 한 문장입니다. 우리말의 경우 문단의 첫부분에서 들여쓰기를 하므로 text-indent 속성을 사용하면 좋습니다.</p> \n===\n\n+++[CSS 텍스트 word-spacing]\n단어 사이의 간격을 지정\n&nbsp; &nbsp; <p>일반적인 문단입니다.</p>\n&nbsp; &nbsp; <p style="word-spacing:10px;">word-spacing 속성값으로 10픽셀을 지정한 문단입니다. letter-spacing이 글자사이의 간격을 지정한다면, word-spacing은 단어 사이의 간격을 지정합니다.</p>\n===\n===\n\n++++!!!![#. CSS 배경 속성]\nHTML보다는 보다 다양한 방법으로 배경을 지정할 수 있음\n| 속성 | 속성값 | 설명 |\n| background-color|#FFFF80, Ivory | 배경색을 지정 |\n| background-image|url(bg.gif) | 배경이미지를 지정 |\n| background-repeat|repeat, repeat-x, repeat-y, no-repeat | 배경이미지의 반복 여부를 지정 |\n| background-position|top left, top center, top right, center left, center center, center right,<br> bottom left, bottom center, bottom right | 배경이미지의 위치를 지정 |\n| background-attachment|scroll, fixed | 배경이미지의 스크롤 여부를 지정 |\n+++[CSS 배경색 background-color]\n&nbsp; &nbsp; <div style="height:50px; background-color: ivory">ivory배경색이 지정된 예제</div> \n&nbsp; &nbsp; <div style="height:50px; background-color: #FFFFF0">ivory배경색이 지정된 예제</div> (√ Hex 코드값)\n===\n\n+++[CSS 배경색 background-image]\n250*250 크기의 레이어에 100*100 크기의 배경이미지를 적용했기에 배경이미지가 반복적으로 출력.\n&nbsp; &nbsp; <div style="width:250; height:250; background-image: url(bg.gif)"></div>\n===\n\n+++[CSS 배경색 background-repeat]\n배경이미지의 반복을 지정\nㆍ repeat : 배경이미지가 반복적으로 적용(기본값)\nㆍ repeat-x : 배경이미지가 가로방향으로만 반복적으로 적용\nㆍ repeat-y : 배경이미지가 세로방향으로만 반복적으로 적용\nㆍ no-repeat : 배경이미지가 반복적으로 적용되지 않고 한번만 적용\n&nbsp; &nbsp; <div style="width:250; height:250; background-image: url(bg.gif) ; background-repeat:repeat-x"></div>\n&nbsp; &nbsp; <div style="width:250; height:250; background-image: url(bg.gif) ; background-repeat:repeat-y"></div>\n===\n\n+++[CSS 배경색 background-position]\nbackground-repeat 속성값으로 no-repeat을 지정하면 배경이미지가 반복되지 않고, 문서의 왼쪽 상단에 위치\n&nbsp; &nbsp; <div style="width:250; height:250; background-image: url(bg.gif) ; background-repeat:no-repeat"></div>\n===\n\n+++[CSS 배경색 background-position]\nbackground-attachment 속성을 사용하면 문서가 스크롤될때 배경이미지의 스크롤여부를 지정\n(이 속성을 사용하지 않으면 기본적으로 문서와 함께 스크롤)\nbackground-attachment : fixed 로 지정하면 문서는 스크롤되지만 배경이미지는 스크롤 되지 않아서 배경위에 텍스트가 떠있는 느낌을 표현\n===\n===\n\n+++!!!![#. CSS 글꼴(Font) 스타일]\nㆍ ''font-family'' 속성을 이용하면 텍스트의 글꼴을 지정\n&nbsp; &nbsp; <p style="font-family: 돋움"> 돋움 글꼴로 지정된 텍스트입니다.</p> \n\nㆍ ''font-size'' 속성을 이용하면 텍스트의 크기를 지정\n&nbsp; &nbsp; <p style="font-size: 13px"> 13픽셀로 지정된 텍스트입니다.</p>\n| 절대단위 | 상대단위 |\n|pt (포인트, 1pt= 1/72 in) |% (기준이 되는 글꼴에 대한 퍼센트) |\n|in (인치, 1in = 25.4 mm) |em (기준이 되는 글꼴에 대한 문자의 높이) |\n|mm (밀리미터) | |\n|cm(센티미터) | |\n|pc (파이카, 1pc=12pt) | |\n|px (픽셀,1px=모니터의 1도트) | |\n1em은 100%와 동일하고 1em 이라는것은 브라우저의 기본 폰트의 100%크기 라는 의미\n폰트의 크기를 지정하지 않으면 12pt 정도의 크기로 화면에 출력 (0.75em으로 지정한 경우 이를 절대값으로 환산하면 9pt 정도의 크기로 출력)\n\nㆍ ''font-weight'' 속성을 이용하면 텍스트의 굵기를 지정\n&nbsp; &nbsp; <p style="font-weight: normal">일반적인 텍스트입니다.</p>\n&nbsp; &nbsp; <p style="font-weight: bold">bold를 지정한 텍스트입니다.</p>\n===\n\n++++!!!![#. Box Model - Margins, padding, borders]\n모든 엘리먼트는 높이(height)와 너비(width)를 가지는 사각형 박스이며, 마진(margin), 패딩(padding), 보더(boarder)로 구성\n\n구성 요소\nㆍ content : 순수한 콘텐츠\nㆍ padding : 콘텐츠와 경계선 사이의 여백\nㆍ border : 경계선\nㆍ margin : 경계선 밖에서 박스모델의 최종 경계선까지의 여백\n\n박스모델에서 엘리먼트의 전체 너비는\n&nbsp; &nbsp; margin-right + border-right + padding-right + width + padding-left + border-left + margin-left\n\n엘리먼트의 전체 높이는 \n&nbsp; &nbsp; margin-top + border-top + padding-top + height + padding-bottom + border-bottom + margin-bottom\n\n''◈ border-color, border-style, border-width''\n+++[border-color]\n- Syntax: border-color: value;\n\n- Values: \n&nbsp; &nbsp; • name - specify a color name (blue, green, ...).\n&nbsp; &nbsp; • RGB - specify a RGB value, like "rgb(10,20,250)".\n&nbsp; &nbsp; • Hex - A hex value (#0101ff , #a8feb8).\n\n- 각 요소별로 색 지정\n&nbsp; &nbsp; border-top-color - sets the color of the top border\n&nbsp; &nbsp; border-bottom-color - sets the color of the bottom border\n&nbsp; &nbsp; border-left-color - sets the color of the left border\n&nbsp; &nbsp; border-right-color - sets the color of the right border\n===\n\n+++[border-style]\n- Syntax: border-style: value;\n\n- Values: \n&nbsp; &nbsp; none, solid, dashed, dotted, double, groove, ridge, inset, outset\n\n- 각 요소별로 스타일 지정\n&nbsp; &nbsp; border-top-style - sets the style of the top border\n&nbsp; &nbsp; border-bottom-style - sets the style of the bottom border\n&nbsp; &nbsp; border-left-style - sets the style of the left border\n&nbsp; &nbsp; border-right-style - sets the style of the right border\n===\n\n+++[border-width]\n- Syntax: border-width: value;\n\n- Values: pixels 또는 3가지 정해진 타입( thin, medium, thick )\n\n- 각 요소별로 두께 지정\n&nbsp; &nbsp; border-top-width - sets the size of the top border\n&nbsp; &nbsp; border-bottom-width - sets the size of the bottom border\n&nbsp; &nbsp; border-left-width - sets the size of the left border\n&nbsp; &nbsp; border-right-width - sets the size of the right border\n===\n\n(화면상에 구분이 잘되게끔 border-width를 2픽셀로 지정)\n&nbsp; &nbsp; <p style="border-width:2px; border-color:gray; border-style:solid;">solid 스타일의 경계선</p>\n&nbsp; &nbsp; <p style="border-width:2px; border-color:gray; border-style:dotted;">dotted 스타일의 경계선</p>\n&nbsp; &nbsp; <p style="border-width:2px; border-color:gray; border-style:dashed;">dashed 스타일의 경계선</p>\n&nbsp; &nbsp; <p style="border-width:2px; border-color:gray; border-style:double;">double 스타일의 경계선</p> \n===\n\n+++!!!![#. CSS 리스트(list)]\nlist-style-type 속성을 사용, 리스트의 marker 스타일을 지정\n\nlist-style-type Syntax:\n&nbsp; &nbsp; list-style-type: disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit \nㆍ disc ; A closed circular bullet. \nㆍ circle ; An open circle. \nㆍ square ; A square. \nㆍ decimal ; Decimal numbers 1, 2, 3, 4, 5... \nㆍ decimal-leading-zero ; Decimal numbers padded by zeros 01, 02, 03, 04, ... \nㆍ lower-roman ; Lowercase roman numerals i, ii, iii, iv, v... \nㆍ upper-roman ; Uppercase roman numerals I, II, III, IV, V... \nㆍ lower-greek ; Lowercase classical Greek α, β, γ, ... \nㆍ lower-latin or lower-alpha ; Lowercase latin alphabet a, b, c, d, e... \nㆍ upper-latin or upper-alpha ; Uppercase latin alphabet A, B, C, D, E... \nㆍ georgian ; Traditional Georgian numbering an, ban, gan, ... \nㆍ armenian ; Traditional Armenian numbering \nㆍ none ; No list type used. \nㆍ inherit ; The element should have the same list-style-type setting as the parent. \n\n리스트의 marker에 이미지를 사용하는 방법\n<ul>\n&nbsp; &nbsp; <li style="list-style-image: url('marker.gif')">이미지를 사용한 리스트\n&nbsp; &nbsp; <li style="list-style-image: url('marker.gif')">이미지를 사용한 리스트\n</ul>\n===
@@color(#04f): ▣ jQuery란 @@; @ 2014-08-25\njQuery는 HTML 속 클라이언트 사이드 스크립트 언어를 단순화 하도록 설계된 브라우저 호환성이 있는 ''자바스크립트 라이브러리''.\n존 레식에 의해, 2006년 뉴욕 시 바캠프(Barcamp NYC)에서 공식으로 소개되었다. jQuery는 오늘날 가장 인기있는 자바스크립트 라이브러리 중 하나다. jQuery는 MIT 라이선스와 GNU 일반 공중 사용 허가서v2의 듀얼 라이선스를 가진 자유 오픈 소프트웨어이다.\n\n__장점__\n1. 자바스크립트의 코딩이 아주 쉽다. \n2. 가볍다. \n3. 크로스브라우징을 지원한다. \n4. css 문법을 지원합니다.\n5. 플러그인들이 많다. \n\n__jQuery를 jQuery 홈페이지__에서 다운로드 ; http://jquery.com\n1. jQuery를 삽입해보자\n&nbsp; &nbsp; <script type="text/javascript" src="자신의 경로"></script>\n2. jQuery 명령 사용\n&nbsp; &nbsp; <script type="text/javascript" src="./jquery-1.7.1.min.js"></script>\n&nbsp; &nbsp; <script type="text/javascript">\n&nbsp; &nbsp; &nbsp; &nbsp; 여기요!\n&nbsp; &nbsp; </script>\n\n@@color(#04f): ▣ JSON @@ (제이슨, JavaScript Object Notation)은 (from 위키백과) &nbsp; &nbsp; @ 2016-06-07\n''속성-값 쌍''으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/서버 통신 (AJAJ)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷이다. 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다. 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다.\n \n본래는 자바스크립트 언어로부터 파생되어 자바스크립트의 구문 형식을 따르지만 ''언어 독립형 데이터 포맷''이다. 즉, 프로그래밍 언어나 플랫폼에 독립적이므로, 구문 분석 및 JSON 데이터 생성을 위한 코드는 C, C++, C#, 자바, 자바스크립트, 펄, 파이썬 등 수많은 프로그래밍 언어에서 쉽게 이용할 수 있다.\n \nJSON 포맷은 본래 더글라스 크록포드가 규정하였다. RFC 7159와 ECMA-404라는 두 개의 경쟁 표준에 의해 기술되고 있다. ECMA 표준은 문법만 정의할 정도로 최소한으로만 정의되어 있는 반면 RFC는 시맨틱, 보안적 고려 사항을 일부 제공하기도 한다. JSON의 공식 인터넷 미디어 타입은 application/json이며, JSON의 파일 확장자는 .json이다.\n\n\n\n
!! 2014 휴가 중 CEO가 읽을 책\n!!!@@color:DarkGoldenRod; ▶ SERICEO 추천도서@@ ; 경제ㆍ경영 8권, 인문ㆍ교양 7권\n| !분야 | !제목 | !저자 | !비고 |\n| 경제ㆍ경영 |이카루스 이야기 |세스 고딘 |생각의 틀을 깨는 변화의 힘 |\n|~|나는 왜 이 일을 하는가 |사이먼 사이넥 |'왜?' 라는 질문과 이에 대한 답을 가지느냐가 얼마나 중요한지를 기술 |\n|~|대한민국 어디로 가야 하는가 |이광재 | |\n|~|무엇이 임원의 성패를 결정하는가 ? |스콧 에블린 | |\n|~|미래학자의 통찰법 |최윤식 |2030년까지 벌어질 미래 위기에 관한 예측 시나리오 |\n|~|인티프래질 |나심 니콜라스탈레브 | |\n|~|원씽 |게리켈러, 제이 파파산 |중요한 일 한가지에만 집중하는 것이 성공의 핵심임을 강조 |\n|~|플랫폼, 경영을 바꾸다 |최병삼, 김창욱, 조원영 | |\n| 인문ㆍ교양 |감정은 습관이다 |박용철 |감정을 다스리기 위해 일상에서의 실천방법을 제시 |\n|~|기브앤테이크 |애덤 그랜트 | |\n|~|기업의 시대 |중국 CCTV 다큐멘터리 제작팀 |기획에서 제작까지 2년여에 걸쳐 만든 대규모 프로젝트로, 기업의 탄생부터 근ㆍ현대사에서 나타난 기업의 성과와 폐부를 조명한 10부작 다큐멘터리를 한 권에 담아낸 책으로, 123명의 경제석학과 기업 CEO의 인터뷰를 통해 기업의 생존방식과 미래를 그려볼 수 있는 지혜를 전달 (2010년 중국에서 방영) |\n|~|바른 마음 |조너선 하이트 |2008년 TED 강의 |\n|~|이중톈, 사람을 말하다 |이중톈 |인생의 지혜를 담은 고전 강의 <삼국지 강의>, <초한지 강의> 등의 고전 강의로 잘 알려진 중국 석학 이중톈 교수의 저서, '주역의 계시', '중용의 원칙', '병가의 사고'(손자병법), '노자의 방법', '위진의 풍도'(위진시대 지식인), '선종의 경계'(선종 조사들의 일화) 등 6가지 주제로 고전에서 찾아볼 수 있는 인간 본연의 모습과 고대로부터 전해오는 간단하고 현실적인 세상 이치를 현대적인 안목으로 기술 |\n|~|포커스 |대니얼 골먼 |멈출 수 없는 산만의 시대, 우리는 어떻게 핵심에 집중할 것인가 ? <EQ 감성지능>의 저자 대니얼 골먼이 신경학과 심리학이 다양한 형태의 '주의력'을 어떻게 다루고 있는지를 철저히 파헤친 책 |\n|~|행복의 기원 |서은국 |행복의 의미를 과학적으로 해부 |\n\n!!!@@color:DarkGoldenRod; ▶ 현대경제연구원 추천도서@@ ; 경제ㆍ경영 6권, 인문ㆍ사회 4권 + 고전 1권\n&nbsp; &nbsp; '현대경제연구원 리더스포럼' 회원과 주요 출판사 및 내부 연구원들의 평가를 종합\n| !분야 | !제목 | !저자 | !비고 |\n| 경제ㆍ경영 |르네상스 소사이어티 |롤프 옌센, 마카 알토넨 |저성장 시대를 타개할 새로운 패러다임을 제시, 1인생산ㆍ1인소비 시대 미래에 대한 세 가지 시나리오로 르네상스 소사이어티(새로운 아이디어를 기반으로 행복, 선한 삶 등 비물질적 가치를 중시), 그린 소사이어티, 리스크 소사이어티를 제시 |\n|~|세계경제의 메가트렌드에 주목하라 |짐 로저스 | |\n|~|부자들의 생각법 |하노 벡 |작은 생각의 차이가 부자를 만든다고 주장, 2013년 독일 최우수 경제ㆍ경영 도서에 선정한 책으로 20년간 투자가, 은행가, 경제 전문 기자, 경제학 교수로 활약한 독일 경제 전문가가 자본 시장에서 발생하는 수많은 현상을 심리학으로 설명. 문제는 '돈'이 아니라 '돈을 대하는 우리의 심리'에 있음을 파악하고 심리적 오류에서 벗어나 어떻게 돈을 벌고, 어떻게 번 돈을 지킬 것인가에 대한 연구하고 이 책을 통해 그 내용을 기술 |\n|~|차이를 만드는 조직 |스콧 켈러, 콜린 프라이스 | |\n|~|아이디어 메이커 |뤼크 드 브라방데르 등 | |\n|~|어떻게 의욕을 끌어낼 것인가 |하이디 그랜트할버슨 등 | |\n| 인문ㆍ사회 |생명이 자본이다 |이어령 | |\n|~|감정수업 |강신주 |타인의 감정과 자신의 검정을 파악하는 방법을 소개 |\n|~|나의 문화유산답사기 일본편 1,2,3 |유홍준 | |\n|~|경제학자의 문학살롱 |박병률 | |\n| 고전 |정관정요 |오긍 |중국 역사의 황금시대를 연 당나라 태종의 통치술과 인재등용에 관한 철학을 담은 제왕학의 고전 |\n\n!!!@@color:DarkGoldenRod; ▶ KT경제경영연구소 추천도서@@ ; 경제ㆍ경영 7권, ITC(정보통신기술ㆍInformation Communication Technology)융합 7권\n| !분야 | !제목 | !저자 | !비고 |\n| 경제ㆍ경영 |기업의 시대 |중국 CCTV 다큐멘터리 제작팀 | SERICEO 추천도서 |\n|~|다윗과 골리앗 |말콤 글래드웰 |강자를 이기는 약자의 기술 |\n|~|당신이 경제학자라면 |팀 하포드 | |\n|~|더 인터뷰 |조선일보 위클리비즈 팀 |세계적인 리더 30인의 이야기 |\n|~|메타생각 |임영익 | |\n|~|어떻게 그들은 한순간에 시장을 장악하는가 |래리 다운즈, 폴 누네스 | |\n|~|이나모리 가즈오 1155일간의 투쟁 |오니시 야스유키 |파산 직전의 일본항공(JAL)을 되살린 '경영의 신' 이나모리 가즈오 회장의 스토리 |\n| ICT융합 |뉴노멀 |피터 힌센 |디지털 혁명이 미래의 기업 경영에 어떤 영향을 미칠지 예측 |\n|~|미친듯이 심플 |켄 시걸 |애플을 성공으로 이끈 단순함의 가치 |\n|~|상상, 현실이 되다 |유영민, 차원용 |미래산업 전반을 소개하고 제안 |\n|~|아마존. 세상의 모든 것을 팝니다 |브래드 스톤 | |\n|~|엘론 머스크, 대담한 도전 |다케우치 가즈마사 | |\n|~|융합하라 ! |봅 로드, 레이 벨레즈 | |\n|~|컨텍스트의 시대 |로버트 스코볼, 셀 이스라엘 | |\n\n
@ 2014.12.09.(화) @\nWhy your free-to-play users aren’t coming back ( 어째서 당신의 F2P 유저는 돌아오지 않는가? ) 요약\n저자 ; Eric Seufert (헬싱키에 위치한 모바일 게임 제작사인 Grey Area Labs의 마케팅 및 유저 확보 책임자)\n\n!!!1. 게임의 퀄러티를 전달하지 못함\n- 유저들로부터 가장 뜯어내기 힘든 것은 돈이 아니라 시간임.\n- 아이폰 / 아이패드 / 기타 하이엔드 안드로이드 장비를 갖고 있다는 건 돈은 충분하다는 뜻.\n- 첫 플레이시에 충분히 시간을 투자할만한 가치가 있다는 사실을 납득시키지 못하면 삭제당한다.\n- 허접해 보이면 망해요.\n- 그래픽, 정교한 물리, 새로운 게임 플레이 등\n\n!!!2. 심층 게임 플레이에 대한 인상을 남기지 못함\n- 시간을 빼앗기가 가장 힘들다. 유저는 이 게임을 오래동안 즐길 수 있다고 판단될 때 게임을 계속한다.\n- F2P 유저들은 원나잇이 아닌 오래 지속되는 관계를 원한다.\n- 유저는 계속해서 새롭고 풍성한 경험을 제공받음으로써 자신의 시간이 보상받길 원한다.\n- 게임에 깊이가 있다는 것은 초기에 그리고 강렬하게 전달되어야 한다.\n\n!!!3. 모두에게 어필하려고 너무 노력함\n- 게이머 성향은 매우 다양하고 차이가 큼. (슈팅 게임과 농장 시뮬레이션 비교)\n- 모든 장르의 게임 요소를 다 갖다 붙인다고 모든 유저에게 어필할 수 있는 것은 아니다. 오히려 난잡해 보일 뿐.\n- 좋은 게임은 핵심적인 게임 플레이 메카닉에 집중하고, 그 주변에서 풍성한 경험을 만들어낸다.\n- 유저가 여러 기믹에 정신이 팔려 게임의 핵심 플레이에 대해 알아채지 못한다면, 유저는 떠난다.\n- 유저는 게임을 진행하는 동안 자신이 어떤 점에서 점점 성장하고 있는 것인지 확인하고자 한다.\n- 총을 잘 쏘고 있나? 자원을 잘 사용하고 있나? 타이밍을 잘 맞추고 있나? 등등\n- 이걸 확인하지 못하면 게임에 몰입하지 못함.\n\n!!!4. 결론\n- 공짜라고 해서 유저가 단조롭고 평범한 게임 플레이를 참을 거라는 것은 착각.\n- 다른 수많은 게임들과 경쟁해서 사용자의 시간을 빼앗아야 함.\n- 첫날 유지율이 낮다는 건 위 세가지를 실패했다는 것.\n- 유저는 이미 당신 게임을 좋아하지 않는다. 아주 가까운 친구의 근거 없이는 이런 인식은 바뀌지 않는다.\n\n
夜(밤 야)關(빗장 관) 門(문 문) 한자 뜻 풀이를 해보자면 '밤에 빗장을 연다'는 뜻.\n\n야관문은 콩과에 딸린 여러해살이 풀로, 산과 들에서 자생하는 식물이며 3장의 잔잎으로 이루어지고며\n야관문의 꽃은 싸리나무 꽃과 유사한고 늦여름부터 초가을에 핀다.\n\n우리말로는 비수리라고 하며 한자로는 절엽철소추(截葉鐵掃帚), 효능 야관문(夜關門), 삼엽초(三葉草), 야계초(野鷄草), 반천뢰(半天雷), 폐문초(閉門草), 공모초(公母草), 음양초(陰陽草), 백관문초(白關門草), 야폐초(野閉草) 등의 여러 이름이 있다.\n이것을 먹으면 천리 밖에서도 빛이 난다고 하여 천리광(千里光)이라고도 한다.\n또 큰 힘을 나게 한다 하여 대력왕(大力王)이라고도 하며, 뱀을 쫓는다고 하여 사퇴초(蛇退草)라는 이름도 있다.야관문은 흔한 풀이다. 새로 찻길을 닦느라고 깎아낸 비탈 같은 곳에 무리지어 자란다. 고속도록 옆에 무리지어 자라는 것을 흔히 볼 수 있다.\n옛사람들은 이 풀을 꺾어서 묶어 빗자루로 쓰기도 했다.\n\n야관문은 뱀한테 물렸을 때 뱀독을 푸는 효과도 탁월하다. 산에서 뱀에 물렸을 때에는 야관문을 진하게 달여서 먹거나 그늘에서 말려 가 루 내어 먹으면 좋다. 잎과 줄기를 짓찧어 물린 상처에 붙이거나 가루를 물에 풀어서 물린 자리에 붙이는 방법을 같이 쓰면 치료효과가 더욱 빠르다.\n야관문에는 파충류나 곤충이 싫어하는 냄새가 나서 야관문 근처에는 뱀, 개구리, 두꺼비, 곤충 같은 것들이 가까이 오지 않는다.\n뱀뿐만 아니라 개, 쥐, 고양이에 물린 상처나 벌에 쏘였을 때에도 야관문을 달여 먹으면서 이와 함께 물린 부위를 달인 물로 씻으면 잘 낫는다. \n\n!!! ▷ 약성\n맛은 쓰고 약간 매우며 성질은 평하고 독이 없다. 폐와 간, 콩팥에 주로 작용한다. 간과 콩팥을 튼튼하게 하고 어혈을 없애며 부은 것을 내리게 한다.\n\n야관문의 잎, 뿌리, 줄기에는 플라보노이드, 피니톨, 페놀, 탄닌, 시토스테롤 등이 있는데, 이들 성분이 염증을 없애고 가래를 삭이며 황색포도상구균, 폐렴상구균, 연쇄상구균, 카타르 구균 등을 죽이거나 억제한다. \n\n!!!! ▷ 복용법\n일반적으로 약초를 먹는 방식인 달이거나, 말려 가루로 내어 차로 우려 먹는 식의 복용법도 가능하지만 효능이 떨어진다고 한다.\n야관문은 술과 함게 우려냈을 때 제대로된 효능을 얻을 수 있다고 하는데,\n9월에서 10월 사이 꽃필 무렵 청정지역에서 채취하여 30도 이상의 증류주에 야관문을 술의 3분의 1 가량 되는 양을 넣은 다음 약 3개월가량 숙성시키듯 우려내는데 숙성기간 동안 세번 정도 병을 흔들어 주고, \n숙성기간이 끝나면 정량, 하루 2잔 정도를 마시면 효능이 나타남.\n\n!!!! ▷ 효능\n1. @@color(#04f): 양기부족 치료 @@\n2. @@color(#04f): 기침 치료 @@\n&nbsp; &nbsp; 야관문을 80g에 물 1.8리터를 냄비에 부고 약한불로 해서 농축하신후에 기호에 맞게 설탕을 넣으시고 아침 저녁 두번, 식후에 드시면 기침 치료에 좋음\n3. @@color(#04f): 시력감퇴 개선 @@\n4. @@color(#04f): 급성위염 치료 @@\n&nbsp; &nbsp; 야관문의 잎과 뿌리와 줄기 말린것 100g을 잘게 써신후에 물 1.2리터와 함께 냄비에 넣고 끓이신후에 천을 이용해서 걸러준다.\n이것을 3~5시간 간격으로 드시면 급성위염이나 설사 치료에 좋다.\n5. @@color(#04f): 당뇨병 치료 @@\n&nbsp; &nbsp; 야관문 30~50g과 오골계의 살고기 부위를 함께 작은불로 푹삶아서 드시거나 야관문 40~80g에 물 1.8리터를 부고 물이 1L가 된 물을 차대신에 자주 마시면 당뇨병 치료에 탁월.\n6. @@color(#04f): 기력회복 @@\n&nbsp; &nbsp; 야관문씨를 가루로 만든후에 하루에 두세번 정도 복용 (한번에 드실양은 4~5그램)\n7. @@color(#04f): 신경쇠약치료 @@\n&nbsp; &nbsp; 야관문 뿌리 30~40g에 물 1.8리터를 부고 물이 절반이 될때까지 약한불로 달여주신후에 하루에 두번정도 나누어서 드시면 신경쇠약 치료에 좋다.\n\n
\n<html>\n<span style="color:#8A084B; font-family:돋움; font-size: 14px;"> <b>와인 정보 </b> </span>\n</html>\n&nbsp; &nbsp; http://www.winebow.co.kr/ - 와인보우 (vinamour_at_winebow.co.kr) &nbsp; &nbsp; &nbsp; &nbsp; / zinyw***/ wine**\n&nbsp; &nbsp; http://www.seoulwine.net/ - 서울와인 &nbsp; &nbsp; &nbsp; &nbsp; / zinyw***/ wine**/ cf. 2015.08.\n&nbsp; &nbsp; http://www.kaja2002.co.kr/ - 와인천국 가나주류백화점 동대문할인점\n\n* http://blog.naver.com/hitejinrovin - (하이트진로) 와인 놀이방 (http://hitejinro.com/ - Shotfire Shiraz(샷파이어 쉬라즈) )\n** http://www.hiliquor.net/ - 세계주류 서울대입구점\n** http://onul31.tistory.com/ - 로리의 와인창고\n** http://www.kiljin.co.kr/ - 길진 인터내셔날\n* 와인바 ; 해운대 지라프앤뱅\n** Thorn-Clarke Shotfire Shiraz 2011, Barossa Valley, Australia (쏜 클락 샷파이어 쉬라즈)\n\n\n| 날짜 | 이름 | 구입처 | 가격 | 비고 |\n| 2015.12. |반피 로사 리갈 (Banfi Rosa Regale) |이마트 신도림점 | 30,000 |크리스마스 할인 |\n| 2015.07. |Bava, Rosetta | 서울와인 | (1+1) 35,000 |10~50%세일 카테코리 |\n| 2015.07. |Shot Fire Shiraz | 와인보우 | 60,000 X 2 | |\n| 2015.08. |모엣 샹동 샴페인 브뤼 임페리얼 <br> Moet & Chandon Champagne Brut Imerial | 와인보우 | (78,000⇒) 52,000 |2015 클리어런스세일 |\n| 2015.08. |뵈브 클리코 퐁사르탱 엘로우 라벨 <br> Veuve Clicquot Champagne Brut Yellow Label | 와인보우 | (90,000⇒) 62,900 |2015 클리어런스세일 |\n| 2015.08. |돔 페리뇽 (Dom Perignon) 샴페인 | 일본 | ¥13,890 X 10(9.51) ≒ 140,000 | from P.준영/ 와인보우 220,000 |\n\n|와인 이름 |종류 |품종 |생산지 |도수 |STYLE |BODY |기타 |\n|바바 로제타 (Bava Rosetta) |스파클링 |Malvasia |Italy > Piemonte > Bava |5.5% |●●●●○ 4 (Sweet) |●●○○○ 2 (Light) |길진 인터내셔날 |\n|반피 로사리갈 (Banfi Rosa Regale) |스파클링 |Brachetto |Italy > Piemonte |6.5% |●●●●○ 4 (Sweet) |●●●○○ 3 (Medium) |\n\n\nhttp://msfarm.co.kr/ - 광양매실촌 (광양다압 유기농 황(홍)매실)\n&nbsp; &nbsp; / 2015.06.08.(월) 특대 20kg - 113,000 원\n&nbsp; &nbsp; / 2016.04.14.(목) 대품 20kg - 101,000 원 ; 주문번호 *460597*6*453\n\n
오 디는 뽕나무에 4~5월 연두빛으로 달리기 시작하여 6월경 흑자색으로 익는다. 오디는 맛이 대단히 좋고 풍부한 포도당이 함유되어 있어, 관절을 이롭게 하고 혈기를 통하게 한다. 농업과학기술원에 따르면 오디에는 노화억제물질인 C3G와 고혈압 억제물질인 루 틴, 혈압강화물질인 GABA 성분이 다량 함유되어 있으며, 오디씨에는 불포화지방산이 87%나 들어 있어 기능성 건강식품으로의 활용가치가 매우 높은 것으로 나타났다.\n\n술, 음료, 각종 식품으로 개발 가능성이 가장 높은 수종으로 오디를 이용하여 오디주, 오 디쨈, 유제품에 첨가, 화장품 첨가제, 기능성 식품으로 식품개발과 홍보에 따라 소비추세 는 증가될 것이다. 척박한 땅에서도 잘 자라며 농약을 덜 써도 수확이 가능한 환경 친화 형 작물이며 유휴지, 산지, 밭 등에 식재한다.\n\n!!! ▷ 약성\n오디의 C3G(Cyanidin-3-Glucoside) 함량은 1.5%로, 포도의 23배 정도이며 검정콩의 8배, 유색미(有色米)의 50배 이상 높다.\n오디에는 비타민C가 사과의 14배, 비타민B는 70배 그리고 철분은 복분자의 9배, 칼슘은 포도의 11배 정도 함유되어 있습니다.\n\n!!! ▷ 복용법\n#. ''오디주''\n씻어서 물기를 말린 오디에 조금의 설탕을 넣은 후 30-35˚의 소주를 오디의 3배정도 부어준다. 오디를 서늘한 곳에 보관해놓았다가, 2-3개월 후에 건더기를 걷어내고 1개월 가량 더 보관하면 오디주가 완성된다. \n\n#. ''오디 액기스''\n오디와 설탕을 같은 비율러 섞어 통에 넣어 1주일 정도보관해놨다가 통을 열어 다시 잘섞이게 저어준다. 이런 식으로 서늘한 곳에서 3개월 정도 숙성시키면 오디 액기스가 완성된다. \n\n!!! ▷ 효능\n심장과 간, 신장에도 작용해 이뇨제, 완화제 역할을 합니다. 혈액과 진액을 보충하고 열을 내려주는 작용을 가지로 있어 소갈, 가슴이 두근거리면서 잠을 이루지못할때, 어지럽고 귀가 울릴때, 기침, 천식등에 효과를 나타낸다.\n\n1. @@color(#04f): 노화방지 @@\n&nbsp; &nbsp; 노화방지는 오디효능을 논할대 빼놓을 수 없는 효능이다. 오디에는 포도의 22배, 검정콩의 10배나 되는 안토시아닌이 함유되어 있다. 이 안토시아닌은 활성산소를 제거하는데 매우 효과적인 성분이기 때문에 노화를 방지하는데 매우 탁월한 효능이 있다. 동의보감에는 '오디를 지속적으로 섭취했을 경우 백발을 검게한다'라는 말이 써있을 정도이다.\n2. @@color(#04f): 고혈압 완화 @@\n&nbsp; &nbsp; 대표적인 오디효능 중 하나로, 오디에 풍족하게 함유되어 있는 루틴이 혈압을 낮추고 모세혈관을 튼튼하게 해주는 GABA 성분이뽕잎과 같은 수준으로 함유되어 있기 때문에 때문에 고혈압을 치료해주는 효능이 있다. 또한 체내의 혈액공급을 원활하게 하는 효닝이 있어 손발이 차거나 고지혈증과 같은 질병을 예방할 수 있다.\n3. @@color(#04f): 불면증 개선 @@\n&nbsp; &nbsp; 불면증에 좋아 한방에서도 '상심자'라는 약재로 사용하고 있다. 잠을 제대로 못자는 분들께서 오디를 꾸준히 섭취하시면 불면증을 개선하는데에 도움이된다. 또한 오디효능 중에는 두뇌활동을 촉진시키는 효능도 있어 자주 까먹는 건망증을 개선하는데에도 효능이 있다.\n4. @@color(#04f): 당뇨병치료 @@\n&nbsp; &nbsp; 오디효능 중에는 혈당수치를 일정하게 맞추어주고 신체의 밸런스를 맞추어주는 효능이 있다. 그 근거로 당뇨병 환자의 80%에 달하는 인슐린 비의존형 당뇨병 환자에게 지속적으로 오디를 섭취하게 한결과, 혈당을 현저하게 감소시켜주었다는 연구결과가 있다.\n5. @@color(#04f): 숙취, 더위, 갈증해소 @@\n&nbsp; &nbsp; 알코올을 분해하여 숙취를 해소하는 효능이 있으며, 포도당과 사과산이 풍부하게 함유되어 있어 한여름의 갈증과 더위를 효과적으로 해소할 수 있다.\n6. @@color(#04f): 빈혈 및 골다공증에 좋다. @@\n&nbsp; &nbsp; 비타민A,D와 포도당 외에도 철분, 칼슘이 풍족하게 함유되어 있어 빈혈과 골다공증 환자에게 매우 좋다. 또한 조혈작용이 있어 관절부위를 튼튼하게 해주고 원할한 혈액순환에도 좋다. 특히 칼슘과 철분이 부족한 임산부에게 매우 좋은 음식이라고 할 수 있다\n
@ 신용사회 2015.09. Vol.396\n''전통주 갤러리'' ; 국내산 농수산뭉르 기반으로한 한국 전통주의 맛과 멋을 널리 알리기 위해 농림축산식품부가 문화체육관광부와 협업으로 마련한 공간.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/shinbo396_01.jpg" > </CENTER> </html>\n\n● ''이강주''\n최남선은 이강주, 죽력고, 감흥로를 조선 3대 명주로 언급한 바 있다. \n그중 직접 만든 소주에 배(梨)와 생강(薑)이 들어가 이강주(梨薑酒)라 불린 이강주는 조선 중기부터 전라도와 황해도에서 빚어온 전통 민속주이다. 1987년, 이강주 제조 기술을 가진 조정형 명인이 전라북도 무형문화재 제6-2호 기능보유자로 지정되었고 1991년부터 대중에서 판매되기 시작했다. \n누룩과 맵살로 빚은 약주를 증류하여 소주를 만든 후 배즙과 생강, 계피, 울금 등의 추출액을 첨가하고 꿀을 넣어 1개월 이상 숙성시키는 방식으로 만들어진다. \n알코올도수 25%.\n\n● ''문배술''\n중요 무형문화재 제86호로 지정, 고려 왕건 시대부터 제조되어 내려온 평양 지역의 전통 증류식 소주인 문배술도 빼놓을 수 없는 우리의 전통주. 북한에서는 명맥이 끊겼지만 3대 전수자인 이\n경찬 옹이 한국전쟁 후 서울에 내려와 만들면서 1986년 중요무형문화재 기능보유자로 지정되었고 1990년에 정식으로 전통주 제조 허가를 받아 지금의 문배술을 빚기 시작했다. 지금은 한국식\n품명인 7호로 지정된 4대 이기춘 명인이 양조원을 대표하고 있다. \n메조와 찰수수를 이용해 빚어낸 순곡의 증류주로 잡곡만을 사용해 만들었는데도 우리나라 토종배인 문배나무 과실 향이난다고 해 문배술이라고. 알코올 도수가 40%임에도 불구하고 이처럼 향긋\n한 과일 향, 깔끔한 맛이 특징이다. \n알코올도수 40%.\n\n● ''감홍로주''\n달 감(甘)자에 붉을 홍(紅), 이슬 로(露)자를 썼다. 달고 붉은 술이 항아리 속에서 이슬처럼 맺힌다는 뜻의 감홍로주는 이름과 같이 붉은 빛깔을 띠고 달착 지근한 향이 나지만 부드러운 겉모습\n과는 달리 40% 도수의 독주다. \n<춘향전> <별주부전> 등 고전문학부터 <동국세시기> 등 다양한 고전문헌에 등장하는 감홍로주는 용안육, 진피, 계피 등 8가지 약재를 침출시켜 완성하는 덕에 몸을 따뜻하게 해주며 조선시대에는 약을 대신해 집에서 사용할 만큼 약효가 뛰어난 술이었다고 전해진다. \n문배술과 혈통이 같은 술로 인간문화재였던 이경찬 옹이 문배주는 큰아들에게, 감홍로주는 작은 아들에게 물려줬는데 작은 아들이 일찍이 타계하면서 명맥이 끊어질 위기에 놓였으나 여동생 이\n기숙씨가 물려받아 2012년, 대한민국전통식품부분 ‘명인’으로 정식 등록됐다. \n알코올도수 40%.\n\n● ''죽력고''\n조선 3대 명주 중 하나로 꼽히는 정읍의 죽력고는 약주 중의 약주라고 해 술에 붙일 수 있는 극존칭 고(膏)가 붙은 진귀한 술로 일제강점기 주세법이 있을 때도 치료약 명분으로 명맥을 유지\n할 수 있었다고 전해진다. \n대나무를 잘라 항아리에 넣고 왕겨를 태워 3~5일 동안 대나무 진액인 죽력을 내리고 이것을 증류하는 데 드는 시간만 꼬박 석달이 걸린다. 이처럼 어려운 전통 제조방식을 30여 년간 묵묵히 지켜온 송명섭 명인은 누룩을 빚는 쌀농사도 직접하고 있다고. 죽력고는 32%로 도수가 꽤 높음에도 불구하고 부드럽고 향긋한 맛이 나는데 술에 직접 약재를 넣지않고도 간접적으로 그 맛과 향이 우러나게 하는것이 바로 죽력고의 참맛이다. \n알코올도수 32%.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/shinbo396_02.jpg" > </CENTER> </html>\n\n● ''왕주''\n종묘대제의 제주로 사용되는 왕주는 명성황후의 친정에서 빚던 가양주이자 궁중 진상주. 남상란 명인은 어머니인 도화희 여사에게 왕주 빚기를 배웠는데 그녀의 어머니가 명성황후의 친정 조카인 고 민재득 여사였다. \n왕주의 주원료인 쌀과 누룩에 야상국화와 구기자, 오미자, 솔잎, 매실, 산수유, 가시오가피, 홍삼 등을 약재로 가미한다. 술밥을 찔 때 뜨거운 상태에서 누룩을 섞는데 이는 가문의 비법으로 천연 잡균 방지 효과가 있다. 덧술을 한 다음 약재를 넣고 참나무 숯과 말린 고추를 띄워 밀봉한 후 그늘에서 100일 정도 발효시킨 후 3~4회 여과해 맑은 술로 만든다. 배양 누룩과 매실 과즙 혼합물에 효모를 접종해 발효시켜 누룩 냄새를 90% 잡았다. \n알코올도수 17.7%.\n\n● ''한산 소곡주''\n특유의 감칠맛이 일품으로 한번 마시다 보면 자리에서 일어날 줄 모른다 하여 일명 ‘앉은뱅이술’로도 불린다. 백제 왕실에서 즐겨 마시던 술로 한국 전통주 가운데 가장 오래된 술이라고. 소\n곡주, 소국주 등의 이름으로 제조법이 전해져왔는데 1979년 충남 무형문화재 3호로 지정된 김영신 명인이 선조로부터 그 제조법을 전수받아 이후 며느리인 우희열씨가 전수받았다.\n찹쌀과 누룩을 주원료로 들국화, 메주콩, 생강, 홍고추 등의 조화 속에 100일간 숙성해 완성된다.\n청와대 만찬주로 선정되는 등 국내에서 명성을 떨침과 동시에 2014년 몽드셀렉션 금상, 영국 주류품평회 IWSC증류주 부문 브론즈 메달을 수상하는 등 세계시장에서도 인정을 받고 있다.\n알코올도수 18%.\n\n● ''추성주''\n추성주는 대나무로 유명한 전라남도 담양의 옛 지명인 ‘추성군’에서 따온 이름으로 그 지역의 전통 민속주이다. 고려 초, 연동사 스님들이 건강을 지키기 위해 밥에 약초를 섞어 발효시킨 데서\n유래한 이 술은 쌀을 기본으로 구기자, 오미자, 산약 등 10여 가지 한약재를 넣고 알코올 도수 40%의 증류주로 만든다음, 다시 약재 추출물을 가미해 알코올 도수 25%의 추성주로 빚는다. 바로 마시지 않고 100일 이상 숙성시켜 약초들의 은은한 향취가 더욱 깊어지며 탈취 및 항균 작용이 있는 대나무 숯으로 여과한다. \n2013년 대한민국주류품평회에서 일반증류주부분 대상 수상, 2014년 세계 3대 주류품평회인 SWSC에서 더블 골드, 벨기에 몽드셀렉션에서 그랜드 골드를 수상하였다. \n알코올도수 25%.\n\n-----\n@ 2014.09.29.(월) @\n-. 살림 9단의 만물상 74회(2014.09.07.) ; 약이 되는 배의 기적 (한의사 배한호)\n\n-. 특징\n&nbsp; &nbsp; / 조선 시대 5대 명주 중 하나 ; 전북 전주(무형문화재)나 황해도 지역이 유명\n&nbsp; &nbsp; / @@color(#04f): 소주에 배와 생강을 혼합하여 만든 약소주 @@\n&nbsp; &nbsp; &nbsp; &nbsp; = 배 梨 + 생강 薑 + (울금 & 계피 & 꿀)을 첨가해서 30일 정도 숙성한 술\n\n-. 술을 잘 먹지 못하는 수족냉증 여성 환자에 좋음\n\n!!!#. 25 ~ 30도 담금주를 활용한 방법\n1. 작은 크기의 배를 껍질째 갈아 용기에 넣는다.\n2. 생강을 갈아 한 스푼 정도 넣는다.\n3. 통계피를 부수어 5조간 정도만 넣는다.\n4. 꿀을 반 스푼 정도만 넣는다(cf. 배가 달기 때문에 꿀은 소량만 넣을 것)\n5. 갈아서 넣은 배와 같은 양의 담금주를 부어준다.\n6. 일주일 동안 상온에 보관한 뒤 1~2일 냉장 보관한다(cf. 30일 정도 숙성).\n7. 체로 건더기를 빼고 맑은 물만 걸러낸다.\n
#. ''직책이란, '직무상의 책임'이다.''\n__직무상의 책임에 따라 구분되는 직책__. 쉽게 설명하면 팀장, 사업부장, 본부장 등을 말한다. 직책은 아래에서 이야기할 '직위'와 상관없이 그 직무에 권한과 책임을 가진 사람을 의미한다. 예를 들어 생각해보자. A라는 회사에 김팀장과 박팀장이 있다. 김팀장은 직위가 과장이지만, 박팀장은 직위가 차장이다. 즉, 직책은 그 사람이 맡고 있는 직무상의 책임인 것이다.\n\n#. ''직위란, '직책상의 지위'이다.''\n__직위는 직무를 수행하기 위한 서열, 즉 순위__를 말합니다. 앞에서 직위가 '과장이다' 혹은 '차장이다'라고 이야기한 것처럼, 직위는 우리가 잘 알고 있는 '승진'의 개념과 관련이 깊다. 사원을 시작으로 대리, 과장, 차장, 부장, 상무, 전무, 사장 등을 우리는 '직위'라고 하며 한 조직 내의 수직적인 서열을 의미한다.\n\n#. ''직급이란, '직책의 급수'이다.''\n__직급은 직무의 등급__을 말합니다. 일의 종류나 난이도, 책임에 따라 같은 직위를 묶은 최하위 개념의 구분이죠. 보통 회사에서는 이를 '호봉'이라고 부르기도 하는데요. 예를 들어, 같은 대리라도 1년차 대리와 4년차 대리가 동등한 등급이 아닌 경우가 대표적인 케이스입니다. 영어로는 'class'로 불립니다.\n\n\n!! 일반적인 회사의 직위 분류\n가장 먼저 설명드린 직위에 대해 보다 자세히 알아보시죠. 평범한 직장인이라면 이 정도 서열 쯤은 알고 있어야 클라이언트나 파트너 사와의 미팅 자리에서 실수를 막을 수 있으니까요. 사원부터 시작해 사장으로 끝나는 직위 살펴볼까요.\n\n사원(Staff) → 계장(Chief) → 주임, 대리(Assistant manager) → 과장(Manager) → 차장(Deputy General Manager) → 부장(Deputy General Manager) → 부사장(Vice President) → 사장(President)\n\n물론 위의 서열이 절대적이지는 않습니다. 각 회사마다 구분되어있는 직위 체계가 조금씩 다르니까요. 상무나 고문, 회장과 같이 빠져있는 직위도 있으니 참고하시기 바랍니다.\n\n\n!! 직위vs직책, 어떤 걸 불러야할까?\n사회 초년생들이 가장 궁금해하는 부분입니다. 바로 직위와 직책을 동시에 가지고 있는 상사의 경우 어떤 호칭으로 불러야 할지에 대한 고민인데요. 일반적으로 호봉에 해당하는 직급은 잘 부르지 않기 때문에 대개 직위와 직책을 가지고 혼동하게 되죠. 누가 정해놓은 정답은 없지만 보통 직책을 부르는게 일반적입니다.\n\n또한 직위가 있어도 직책이 없는 경우가 있습니다. 하지만 직책만 있고 직위가 없는 경우는 드물죠. 매우 작은 회사에서는 직책만 붙여 커뮤니케이션을 하는 기업도 상당수 있지만 이런 경우엔 그냥 직책을 부르면 되니 고민할 이유가 없겠죠. 반대로 직위만 가진 채 직책이 없다면 편하게 직위만 부르면 됩니다.\n\n\n!! 압존법...\n압존법이란 대화를 하는 상대방보다 낮은 직위(직책)을 언급할 때 '~님'이라고 붙이지 않는 것을 말하는데요. 상대방인 상사인 기준에서 대화에 표현된 사람이 아랫사람이냐 윗 사람이냐를 따져 부르는 방법입니다.\n\n국립국어원에서는 압존법을 가족을 포함한 친족 등 사적인 관계에서만 적용되고 직장에서는 적절하지 않는 방법이라고 얘기하는데요. 직장에서 사용하지 않는다고 하지만 직장 분위기나 규율에 따라 충분히 달라질 여지가 있으니 압존법의 의미 정도만 알아둔 후 회사 분위기에 맞춰 맞춤형 표현법을 사용하는게 가장 좋은 방법일 듯 싶습니다.\n
CMS(Contents Management System : 콘텐츠 관리 시스템)란 "인터넷이나 컴퓨터 통신 등을 통하여 제공되는 각종 정보나 그 내용물들을 관리하는 정의된 목적을 달성하기 위한 통합 요소들의 집합체"이다.\n그냥 간단하게 말해서 CMS는 개발지식이 없는 사람도 홈페이지를 만들고 운영할 수 있는 툴(?)로, 블로그를 넘어서 콘텐츠를 체계적으로 운영할 수 있도록 돕는 툴(Tool).\n\n!!#.오픈소스 CMS 솔루션\n1. XpressEngine: XE(과거명:ZeroBoard)\n강력한 오픈 소스 CMS로서 수백 개의 플러그 인과 무한한 가능성을 제공합니다.\nhttp://www.xpressengine.com/\n\n2. kimsQ: 킴스큐\nkimsQ는 웹 사이트를 빠르게 구축하고 콘텐츠를 손쉽게 생성하고 관리하는 데 사용할 수 있는 CMS 솔루션입니다. 몇 번의 입력과 마우스 클릭으로 웹 사이트를 쉽게 구축할 수 있으므로 PHP에 대한 지식이 필요하지 않습니다. kimsQ를 사용하여 개인 블로그, 카페, 일반 사이트 및 포털 사이트를 구축할 수 있으며, 확장 프로그램을 사용하여 쇼핑몰이나 그룹웨어를 만들 수도 있습니다.\nhttp://dev.kimsq.com/\n\n3. GnuBoard: 그누보드\nhttp://sir.co.kr/main/gnuboard4/\n\n4. DotNetNuke\nDotNetNuke®는 동적 콘텐츠 및 대화형 기능을 사용하여 전문적인 웹 사이트를 구축하는 데 사용할 수 있는 뛰어난 웹 콘텐츠 관리 플랫폼(CMS)입니다. 50만 개가 넘는 웹 사이트가 구현되어 운영되고 있으며 수천 개의 타사 확장 프로그램을 즉시 설치할 수 있으므로 DNN®을 사용하면 상용 웹 사이트, 커뮤니티 포털 또는 인트라넷 솔루션을 신속하고 경제적으로 개발할 수 있습니다.\nhttp://www.dotnetnuke.com/\nhttp://dotnetnuke.codeplex.com/\n\n5. Umbraco CMS\nUmbraco CMS는 http://www.asp.net/, http://www.wired.co.uk/ 및 85,000개가 넘는 다양한 사이트에서 콘텐츠와 응용 프로그램을 관리하고 수백만 명의 사용자에게 제공하는 데 사용하는 프레임워크입니다. 최신 UI, 순수한 .NET 아키텍처 및 활발한 커뮤니티를 갖춘 Umbraco는 가장 뛰어난 웹 CMS입니다. Umbraco는 사용하기 쉬우며 확장이 간편하고 기존 시스템과 통합이 가능합니다.\nhttp://umbraco.com/\n\n블로그형\n6. WordPress\nWordPress는 미학, 웹 표준 및 사용 편의성에 중점을 둔 최신식 게시 플랫폼입니다.\nhttp://www.wordpress.org/\n\n블로그형\n7. Textcube\nhttp://www.textcube.org/
!! 게임 엔진\n!!! Cocos2d-x\n#. Cocos2d-x 3 모바일 게임 프로그램\n2014.05. 이자건 지음, 에이콘출판주식회사, ISBN 978-89-6077-565-7\n\n코코스2d는 원래 파이썬용으로 제작된 프레임워크입니다. 하지만, 2008년에 리카르도 케사다 Ricardo Quesada가 아이폰 버전으로 포팅한 것이 지금의 코코스2d-x의 모체가 되었습니다. 그리고 2011년 초에 코코스2d 아이폰 버전 개발팀이 미국의 소셜게임 회사인 징가 Zynga에 인수되면서 코코스2d 아이폰 버전은 징가에서 개발 및 배포, 관리를 하고 있습니다.\n\n코코스2d-x는 2010년 7월에 코코스2d 아이폰 버전을 중국의 샤먼 Xiamen(하문)지역에 있는 Team-X팀에서 포팅을 하면서 처음으로 제작되었습니다. 현재는 중국의 모바일 게임 회사인 추콩 테크놀로지에서 개발 및 배포, 관리를 하고 있습니다. 코코스2d-x에 대한 자세한 정보는 코코스2d-x 공식 홈페이지(http://cocos2d-x.org)에서 얻을 수 있습니다.\n\n-. http://cocos2d-x.org ; 코코스2d-x 공식 홈페이지\n&nbsp; &nbsp; &nbsp; &nbsp; Cocos2d-JS ; 웹용 프로그램 및 게임을 만들 때 사용되는 코코스2d의 버전\n&nbsp; &nbsp; &nbsp; &nbsp; CocoStudio ; GUI 및 애니메이션 에디터 등이 있는 에디터 툴\n-. http://www.python.org ; 코코스2d-x의 경우 파이썬 3.4.x 버전보다는 2.7.x 버전을 다운로드하는 것을 권장\n\n\n
@ 2014.12.09.(화) @\n저자 ; 김낙형 / TERA Korea-Japan Live Service Producer at Bluehole Studio\n\n!!!#. 특징\n-. F2P(Free-2-Play) ; 부분 유료\n\n-. 과거 RPG의 정석 ; 용사는 동료들과 힘을 모아 열심히 레벨업을 하여 드디어 마왕을 물리쳤습니다 !\n-. 요즘 모바일 RPG의 정석 ; 3성 용사는 열심히 레벨업을 하여, 4성 용사의 합성 재료가 되었다.\n\n-. 도탑전기는 캐릭터를 재료로 합성하지 않음\n&nbsp; &nbsp; / 게임 중반에 접어들면 더 상급 캐릭터들을 획득하게 되지만, 여전히 성장 시켜 놓은 초기 캐릭터들도 꾸준히 활용해서 게임을 진행\n&nbsp; &nbsp; / 중요 포인트는 캐릭터에 대한 나의 투자를 소멸시키지 않고, 투자한 캐릭터의 가치를 계속 유지시켜 준다는 점\n&nbsp; &nbsp; &nbsp; &nbsp; ㅡ> 캐릭터에 대한 애착과 감정이입이 발생\n\n-. 게임의 밸런싱이 잘 되어 있음\n&nbsp; &nbsp; / 게임에서 적절한 난관의 제공은 매우 중요\n&nbsp; &nbsp; / 난관이 없으면 게임이 쉽게 지루해지고, 너무 어려우면 좌절하고 그만두게 됨\n\n-. 도탑전기는 현질을 강요하지 않음\n&nbsp; &nbsp; / F2P 게임은 돈을 벌기 위해서 일부러 큰 난관을 배치\n&nbsp; &nbsp; &nbsp; &nbsp; ㅡ> 대다수의 유저는 그 지점 때문에 이탈\n&nbsp; &nbsp; / 주어진 캐릭터만 꾸준히 성장시키면 메인 컨텐츠인 캠페인은 물론, PVP도 어렵지 않게 즐기 수 있음\n&nbsp; &nbsp; / 접속만해도 엄청나게 많은 보석과 상급 캐릭터, 아이템 등을 지급\n&nbsp; &nbsp; &nbsp; &nbsp; ㅡ> 절대 비과금 유저가 박탈감을 느끼게 하는 일이 없음\n\n|일반적인 모바일 RPG 요소 |캠페인 |\n|~|아레나(PVP) |\n|특징 | 크루세이드 모드 |\n★ 크루세이드 모드 : 일종의 연속 PVP 모드, 사망한 캐릭터는 다시 사용할 수 없지만, 완료시 큰 보상을 받음\n&nbsp; &nbsp; ㅡ> 투자한 캐릭터의 가치를 유지시켜 주는 대표적인 컨텐츠 \n\n!!!#. VIP 레벨에서 악마(의 BM)을 보다\n= @@color(#04f): 계속하고 싶게 만드는 게임플레이 + (넛지 Nudge + 꽃신) + VIP 레벨 시스템 @@\n\n-. 게임 중 VIP레벨 메시지를 자주 노출시켜서 과금을 유도하지만\n&nbsp; &nbsp; 비과금 유저도 풍족하게 리소스를 지원 받음\n\n-. 낚시의 시작은 미끼\n&nbsp; &nbsp; / Monthly Card ; 3천원에 판매\n&nbsp; &nbsp; &nbsp; &nbsp; 정가 보석 교환율이 100개 = 1천원인데, 이 상품은 3600개 = 3천원\n\n-. VIP 레벨이 오르면 리소스 교환 횟수가 증가하지만\n&nbsp; &nbsp; 보석을 이용한 리소스 교환 횟수가 늘어날수록 교환에 들어가는 보석의 숫자가 늘어나는 구조\n&nbsp; &nbsp; ㅡ> 다음날 교환 비율이 리셋이 되지만 더 빨리 성장하고 싶을수록, 돈을 조금씩 더 많이 소비하는 시스템\n\n-. 19/20은 7/20과 마찬가지로 1/20 이지만 느껴지는 가치는 다름\n&nbsp; &nbsp; / 보석의 교환비율은 더 이상 중요하지 않음\n&nbsp; &nbsp; / 어차피 지르면 VIP 레벨도 올라간다는 자기 합리화가 발동\n\n-. 엄청나게 많은 돈을 쓰는 고래 유저들에게 효율은 큰 의미가 없다.\n&nbsp; &nbsp; / 어떻게 차별화 된 서비스를 제공하느냐\n&nbsp; &nbsp; / 돈을 많이 쓸수록 효율을 떨어지는 구조\n&nbsp; &nbsp; &nbsp; &nbsp; ㅡ> VIP 레벨의 보상으로 효율 감소 부분을 상쇄시키고\n&nbsp; &nbsp; &nbsp; &nbsp; ㅡ> 게임 밸런스적으로도 빈부격차를 줄여서 비과금 유저의 박탈감도 완화 시키는 효과\n\n!!!#. 중국의 역습\n-. 혹독한 경쟁에서 단련된 중국 게임 ; 더 큰 시장 = 더 치열한 경쟁\n&nbsp; &nbsp; ㅡ> 온라인 게임 < 웹게임 ≒ 모바일 게임 ; 소규모 팀이 기획력을 중심으로 런칭 \n\n-. 웹게임은 기술과 그래픽 요소들로 차별화하기 힘든 만큼, \n&nbsp; &nbsp; 기획적인 요소들을 통해서 게임의 재미를 이끌어 내는 것이 중요\n\n-. 모바일은 웹에 비해서 보안이나 결제 시스템 등을 플랫폼 차원에서 상당부분 제공 받음\n&nbsp; &nbsp; ㅡ> 게임 개발에만 팀의 역량을 집중할 수 있는 환경\n&nbsp; &nbsp; / 해외 진출이 상대적으로 온라인 게임에 비해 용이\n&nbsp; &nbsp; / 클라우드 서비스 때문에 해외 퍼블리셔 없이 직접 서비스가 가능\n&nbsp; &nbsp; &nbsp; &nbsp; ㅡ> 글로벌 서버에 글로벌 원빌드로 서비스를 하기 때문에 관리비용 차원에서도 큰 이익\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 예.슈퍼셀의 'Clash of Clans', 컴투스의 '서머너즈 워' \n\n-. ''F2P 게임으로 출발한 시장에서 탄생하고 성장한 개발자들로 뛰어난 유료화 모델을 개발''\n\n
@ 2014-12-22 (월) @\n컬링( Culling )은 실제 화면에 안보이는 폴리곤을 그리지않도록 추려내는 작업\n\n!!! 후면컬링\n0.1 폴리곤을 그릴때, 화면상에 보이지 않은 뒷면, 즉 삼각형의 양쪽면을 앞면 뒷면이라고 할때, 뒷면을 그리지 않음으로써 연산속도 향상을 가져온다.\n&nbsp; &nbsp; &nbsp; &nbsp; 실제로 3D게임할때, 캐릭터같은것을 뚫고 들어가면 속안이 보이지 않는것이 그 예.\n\n!!! 오클루젼 컬링( Occlusion Culling )이란? \n(GPG1권) 4.8 오브젝트 오클루젼 컬링 참고\n1.1 앞의 오브젝트에 의해서 가려진 뒷면에 존재하는 오브젝트를 컬링하는 기법 \n&nbsp; &nbsp; &nbsp; &nbsp; 오브젝트가 다른 오브젝트에 의해 가려져서 카메라에 보이지 않을 때 해당 오브젝트의 랜더링을 비활성화 하는 기능.\n1.2 동적인 오브젝트(애니메이션, 이동등)의 컬링에도 적용할 수 있다 \n1.3 실내뿐만 아니라, 실외에서도 활용 가능하다 \n\n!!! 프러스텀 컬링( frustum culling ) \n2.1 시야(Field of View)에 제외된 오브젝트를 컬링 \n2.2 프러스텀 컬리의 기본 구현은 오클루전 컬링에도 그래도 적용된다 \n2.3 1. 오브젝트의 바운딩 스피어를 시야 공간으로 변환한다 \n2.4 2. Z값을 이용하여 근단면, 원단면 밖의 오브젝트를 제거한다 \n2.5 3. 좌우 평면 사이에 있는지 계산한다 \n2.6 4. 상하 평면 사이에 있는지 계산한다 \n\n!!! 오클루젼 컬링 \n3.1 시점 - 오클루젼 사각형으로 오클루젼 영역을 계산한다 \n3.2 이 프러스텀 영역에 들어가면 '보이지 않는' 객체이다 \n3.3 시점 좌표에서 오클루전 최소 Z보다 앞에 있는 오브젝트는 컬링을 적용할 필요가 없다 \n3.4 오클루젼 영역을 구성하는 5개의 평면의 방정식을 구한다 \n3.5 5개의 평면과 오브젝트의 바운딩 스피어와의 거리를 계산한다 (프러스텀과 거의 동일) \n\n...\n\n!!! 요약 \n7.1 오클루젼 컬링을 구현하는것은 그리 어렵지 않다 \n7.2 음성이나 한 모델내에서도 가려지는 객체를 컬링하도록 활용할 수 있다 \n
@ 2014.12.23.(화) @ 출처 ; http://faq.hostway.co.kr/Windows_Web/1714\n\n''로그 파일 위치''\n기본적으로 IIS는 %WINDIRSystem32Logfiles에 해당 로그 파일을 저장합니다. \n이 디렉터리에는 각 WWW(World Wide Web) 및 FTP 사이트에 대한 별도의 디렉터리가 포함됩니다. \n기본적으로 로그는 디렉터리에서 매일 만들어지고 날짜를 포함하는 이름(예: exYYMMDD.log)으로 지정됩니다.\n\n''HTTP''\n''1xx - 정보 전달용''\n이 상태 코드는 임시 응답을 나타냅니다. 클라이언트가 정식 응답을 받으려면 \n하나 이상의 1xx 응답을 받을 준비가 되어 있어야 합니다. \n 100 - 계속 작업합니다. \n 101 - 프로토콜을 전환합니다.\n\n''2xx - 완료''\n상태 코드의 이 클래스는 서버가 클라이언트 요청을 받아들였음을 나타냅니다. \n 200 - 클라이언트 요청이 성공했습니다. \n 201 - 만들어졌습니다. \n 202 - 받아들여졌습니다. \n 203 - 권한이 없는 정보입니다. \n 204 - 내용이 없습니다. \n 205 - 내용을 다시 설정합니다. \n 206 - 일부 내용\n\n ''3xx - 리디렉션''\n클라이언트 브라우저는 요청을 처리하기 위해 좀더 조치를 취해야 합니다. \n예를 들어, 브라우저는 서버에서 다른 페이지를 요청해야 하거나 프록시 서버를 사용하여 요청을 반복해야 할 수 있습니다. \n 302 - 개체 이동 \n 304 - 수정되지 않았습니다. \n 307 - 임시 리디렉션\n\n''4xx - 클라이언트 오류''\n오류가 발생하고 클라이언트에 문제가 있는 것으로 나타납니다. \n예를 들어, 클라이언트가 존재하지 않는 페이지를 요청하거나 올바른 인증 정보를 제공하지 않을 수도 있습니다. \n 400 - 요청이 잘못되었습니다. \n 401 - 액세스가 거부되었습니다. IIS는 오류의 원인을 보다 구체적으로 나타내는 여러 다른 401 오류를 정의합니다. \n 이러한 특정 오류 코드는 브라우저에 표시되지만 IIS 로그에는 표시되지 않습니다. \n 401.1 - 로그온하지 못했습니다. \n 401.2 - 서버 구성으로 인해 로그온하지 못했습니다. \n 401.3 - 리소스의 ACL에 의해 액세스가 거부되었습니다. \n 401.4 - 필터에 의해 권한을 부여하지 못했습니다. \n 401.5 - ISAPI/CGI 응용 프로그램에 의해 권한을 부여하지 못했습니다. \n 401.7 - 웹 서버의 URL 인증 정책에 의해 액세스가 거부되었습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다. \n 403 - 금지. IIS는 오류의 원인을 보다 구체적으로 나타내는 여러 다른 403 오류를 정의합니다. \n 403.1 - 실행 액세스 금지 \n 403.2 - 읽기 액세스 금지 \n 403.3 - 쓰기 액세스 금지 \n 403.4 - SSL이 필요합니다. \n 403.5 - SSL 128이 필요합니다. \n 403.6 - IP 주소가 거부되었습니다. \n 403.7 - 클라이언트 인증서가 필요합니다. \n 403.8 - 사이트 액세스가 거부되었습니다. \n 403.9 - 사용자가 너무 많습니다. \n 403.10 - 구성이 올바르지 않습니다. \n 403.11 - 암호 변경 \n 403.12 - 매퍼가 액세스를 거부했습니다. \n 403.13 - 클라이언트 인증서를 취소했습니다. \n 403.14 - 디렉터리 목록이 거부되었습니다. \n 403.15 - 클라이언트 액세스 라이센스가 초과되었습니다. \n 403.16 - 클라이언트 인증서가 신뢰되지 않거나 잘못되었습니다. \n 403.17 - 클라이언트 인증서가 만료되었거나 아직 유효하지 않습니다. \n 403.18 - 현재 응용 프로그램 풀에서 요청된 URL을 실행할 수 없습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다. \n 403.19 - 이 응용 프로그램 풀에서 클라이언트에 대한 CGI를 실행할 수 없습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다. \n 403.20 - Passport 로그온에 실패했습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다. \n\n 404 - 찾을 수 없습니다. \n 404.0 - (없음) - 파일 또는 디렉터리를 찾을 수 없습니다. \n 404.1 - 요청된 포트에서 웹 사이트에 액세스할 수 없습니다. \n 404.2 - 웹 서비스 확장 잠금 정책으로 인해 이 요청이 방지됩니다. \n 404.3 - MIME 맵 정책으로 인해 이 요청이 방지됩니다. \n\n 405 - 이 페이지에 액세스하는 데 사용되는 HTTP 동사를 허용할 수 없습니다(메서드를 허용할 수 없음). \n 406 - 클라이언트 브라우저가 요청된 페이지의 MIME 형식을 받아들이지 않습니다. \n 407 - 프록시 인증이 필요합니다. \n 412 - 전제 조건이 실패했습니다. \n 413 - 요청 엔터티가 너무 큽니다. \n 414 - 요청 URI가 너무 깁니다. \n 415 - 지원되지 않는 미디어 유형입니다. \n 416 - 요청된 범위를 충족시킬 수 없습니다. \n 417 - 실행하지 못했습니다. \n 423 - 잠금 오류\n\n''5xx - 서버 오류''\n서버에 오류가 발생하여 요청을 완료할 수 없습니다. \n 500 - 내부 서버 오류 \n 500.12 - 응용 프로그램이 웹 서버에서 다시 시작되는 중입니다. \n 500.13 - 웹 서버 사용량이 많습니다. \n 500.15 - Global.asa의 직접 요청을 허용할 수 없습니다. \n 500.16 - UNC 인증 자격 증명이 잘못되었습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다. \n 500.18 - URL 인증 저장소를 열 수 없습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다. \n 500.100 - 내부 ASP 오류 \n\n 501 - 헤더 값이 구현되지 않은 구성을 지정합니다. \n 502 - 웹 서버가 게이트웨이나 프록시 역할을 하는 동안 잘못된 응답을 받았습니다. \n 502.1 - CGI 응용 프로그램이 시간을 초과했습니다. \n 502.2 - CGI 응용 프로그램에서 오류가 발생했습니다. \n\n 503 - 서비스를 사용할 수 없습니다. 이 오류 코드는 IIS 6.0에만 해당됩니다. \n 504 - 게이트웨이가 시간을 초과했습니다. \n 505 - HTTP 버전이 지원되지 않습니다. \n\n\n\n
!Markup\n!!Simple Images\n{{{\n<html> <CENTER>\n<IMG SRC="링크.../icon_christmas_ball.png" width=32>\n</CENTER> </html>\n}}}\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/icon_christmas_ball.png" width=32> </CENTER>\n</html>\n{{{\n[IMG[링크.../icon_christmas_ball32.png]]\n}}}\n[IMG[http://www.gingaminga.com/wiki/pds/GalleryMacro/icon_christmas_ball32.png]]\n\n\n!!Images Titles/ Links\n{{{\n[IMG[tooltip|링크.../icon_christmas_ball32.png][링크 URL]]\n}}}\n[IMG[tooltip|http://www.gingaminga.com/wiki/pds/GalleryMacro/icon_christmas_ball32.png]]\n\n\n!!Floating Images\nTo clear a float, append...\n{{{\n@@clear:both;display:block; @@\n}}}\n\n\n!!Floating Left...\n{{{\n[<img[http://tiddlywiki.org/fractal.jpg]]\n@@clear:both;display:block; all clear@@\n}}}\n[<img[http://tiddlywiki.org/fractal.jpg]]\n@@clear:both;display:block; all clear@@\n\n\n!!Floating Right\n{{{\n[>img[http://tiddlywiki.org/fractal.jpg]]\n@@float:right;clear:both;display:block; all clear@@\n@@clear:both;display:block; @@\n}}}\n[>img[http://tiddlywiki.org/fractal.jpg]]\n@@float:right;clear:both;display:block; all clear@@\n@@clear:both;display:block; @@\n\n\n'''URL'''\n<nowiki>\n[img[URL of image]]\n</nowiki>\n\n'''URL with alternate text and link'''\n<nowiki>\n[img[alternate text|URL of image][tiddler or URL]]\n</nowiki>\n\n'''HTML'''\n<nowiki>\n<html>HTML code from hosting site</html>\n</nowiki>\n\n참고 ; http://tiddlywiki.org/
출처 ; http://brandog.biz/293 - 2014년 문화예술 트렌드 키워드 '스낵컬쳐(Snack Culture)'\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/스낵컬쳐.jpg" width=240 > </CENTER> </html>\n!@@color(#ffbb00): 이제는 스낵컬쳐의 시대 @@\n문화체육관광부에서 발표한 '2014년 문화예술 새로운 10대 흐름' 중 스낵컬쳐가 유행할 것으로 전망되었습니다. 스낵컬쳐란 가볍고 편하게 즐기는, 짧은 시간에 간편하게 즐기는 문화를 의미하는데요. 스낵컬쳐의 유행이 전망되는 이유는 현대 사회에서 사람들이 문화를 즐기기에 시간이 부족하고, 국내 스마트 폰 보급의 확산으로 사용자 94.2%가 모바일 영상 서비스 등으로 문화를 쉽고 빠르게 즐기는 행동이 보편화되었기 때문이라고 합니다. 따라서, 이번시간에는 스낵컬쳐 트렌드로 시장에 어떠한 변화가 일어나고 있는지 자세히 살펴보려고 합니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/스마트_소설.jpg" width=240 > </CENTER> </html>\n!@@color(#ffbb00): 새로운 장르 스마트 소설 @@\n오늘날 스마트 소설이라는 새로운 장르가 등장하게 되었습니다. 스마트 소설이란 원고지 10~30매 내외의 분량을 지닌 소설로 간결하게 정제된 미학에 중점을 둔 장르입니다. 분명 책이라고 하기에는 너무나 짧은 분량으로 과연 소설이라고 할 수 있을까라는 의문이 들 수도 있지만 스마트 소설만의 매력과 특징으로 대중들을 사로 잡기에 충분하다고 생각이 들며 책의 한 장르로 표현할 만큼 가치가 충분하다고 판단이 됩니다. 그 이유는 짧은 소설이지만 그 속에 담긴 글은 결코 가볍지 않기 때문인데요. 단편의 스마트 소설을 읽고 그 의미에 잠겨 멍한 상태로 눈이 감기는 작품을 만나고 싶다던 소설가 박인성씨의 바람을 구현하기 위해 '스마트 소설'이라는 형식으로 창조되었다고 합니다. 짧은 분량임에도 임팩트 있고 결코 가볍지 않은 스마트 소설은 오늘날 스낵컬쳐의 한 움직임이라고 볼 수 있겠습니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/모바일_게임.jpg" width=240 > </CENTER> </html>\n!@@color(#ffbb00): 쉽고 간편한 모바일 게임 @@\n스낵컬쳐의 움직임을 가장 쉽게 볼 수 있는 것이 바로 스마트폰 어플리케이션인데요. 그 중에서도 쉽고 간편한 모바일 게임을 그 예로 들 수 있겠습니다. 요즘 지하철이나 버스 등 대중 교통 속에서 사람들이 간편한 모바일 게임을 즐기는 것을 쉽게 살펴볼 수 있는데요. 과거 rpg와 같은 스토리 성을 지니며 오랜 시간을 소비해야 하는 모바일 게임에서 오늘날에는 오래 걸리지 않고 간편하게 즐길 수 있는 모바일 게임이 상당한 인기를 끌고 있습니다. 이 모바일 게임이 흥행을 할 수 있었던 이유는 간단한 게임 룰과 지인들과 함께 할 수 있는 시스템 등이 있습니다. 이러한 점이 스낵컬쳐의 한 모습으로 보여지며, 더 나아가서는 한 모바일 게임만을 즐기는 것이 아닌 여러 모바일 게임을 쉽게 즐기며 문화를 소비한다는 점에서 역시 스낵컬쳐의 모습을 살펴 볼 수 있습니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/해바라기쇼핑몰.jpg" width=240 > </CENTER> </html>\n!@@color(#ffbb00): 한꺼번에 즐기는 해바라기한 쇼핑몰 @@\n이제는 복합쇼핑몰에서 쇼핑/놀이/공연을 한꺼번에 즐기는 몰링(Malling) 쇼핑몰이 큰 인기를 끌고 있습니다. 신생아부터 초등학생까지의 어린이들을 대상으로 한 키즈테마파크 등의 다양한 컨텐츠가 생성되면서 30~40대의 엄마들의 마음을 사로잡고 있습니다. 어린이들을 위한 다양한 시설은 몰론 세련된 쇼핑까지 원스톱으로 가능한 복합쇼핑몰은 많은 사람들의 발걸음을 옮기고 있는데요. 이러한 현상 역시 스낵컬쳐의 트렌드로 쉽고 간편하게 그리고 다양하게 문화를 즐기고 싶어하는 소비자들의 니즈가 투영된 것이라고 생각이 됩니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/데이캠핑.jpg" width=240 > </CENTER> </html>\n!@@color(#ffbb00): 부담이 없는 '데이 캠핑' @@\n도심 속에서 벗어나 자유롭게 캠핑을 즐기고 싶어하는 사람들이 늘어가고 있는데요. 그러나 캠핑을 가려면 기본적으로 1박을 하며 많은 계획을 세우고 가야 한다는 인식이 강했었습니다. 이러한 인식이 이제는 바뀌기 시작하였는데요. 그것이 바로 '데이 캠핑'입니다. 데이 캠핑은 야외에서 밤을 보내지 않는 무박 여행으로 매트리스, 취사 도구 등 최소한의 캠핑 용품만 챙겨 가볍게 떠날 수 있다는 점에서 많은 사람들에게 사랑을 받고 있습니다. 이에 따라 한강이나 도심 근처의 산, 계곡에 데이 캠핑을 즐길 수 있는 여건이 마련이 되었으며 스낵컬쳐의 트렌드 중 하나로 문화를 쉽고 간편하게 즐길 수 있는 분위기가 조성이 된 것이라고 할 수 있습니다. \n\n지금까지 스낵컬쳐란 무엇이며 스낵컬쳐의 트렌드로 어떠한 모습이 펼쳐지고 있는지 살펴보았는데요. 문화를 간편하고 쉽게 즐기려는 소비자들이 늘어남에 따라 그들을 사로잡기 위해서는 간편하면서도 임팩트가 있는 특징이 있어야겠다는 생각이 드네요. 이상 포스팅을 마치겠습니다.\n\n\n
출처 ; http://ektha307.com.ne.kr/tags/tag_abc01.html\n| !형 식 | !구 성 | !내 용 |\n|>|>|>| |\n|>|>|!문서의 기본 구조를 나타내 주는 태그 |\n|<HTML> |<HTML>...</HTML> |HTML 언어로 작성되어 있다는 것을 알려줍니다. |\n|<HEAD> |<HEAD>...</HEAD> |Heading의 준말로 글의 머리말에 해당합니다. |\n|<BODY> |<BODY>...</BODY> |본문에 해당하는 부분을 알려줍니다. |\n|<TITLE> |<TITLE>...</TITLE> |타이틀바에 새겨질 글자를 정의합니다. |\n|<Hn> |<Hn>...</Hn> |표제 부분에 들어갈 말을 정의합니다.<br> 1~6까지의 숫자를 사용하고 숫자가 커질수록 표제는 작아집니다. 기본값은 H4입니다. |\n|<STYLE> |<div style="...">...</div> |@@style 정보(글꼴, 색상, 너비, 높이 등)를 규정하는 태그로, 주로 css 문서에서 사용.@@ |\n| |>|Inline Style Sheet는 HTML 태그의 style 속성에 코드를 넣어 적용시키는 방법 <br> &nbsp; &nbsp; <p style="color:gray;">이 문단의 색상은 회색으로 지정됩니다.</p> <br> &nbsp; &nbsp; <div style="height:50px; background-color: #F0FFF0"> 배경색이 지정된 예제</div> |\n|<!-...-> |<!-주석내용-> |주석을 달거나 잠시동안 이미지를 보이지 않게 할 때 사용합니다. |\n|>|>|>| |\n|>|>|!문단 혹은 줄을 바꾸는 태그 |\n|<P> |<P> |문단을 바꾸는 태그입니다. 줄바꿈과 동시에 줄을 띤 것같은 효과가 나타납니다. |\n|<BR> |<BR> |문단을 바꾸는 태그입니다. 줄바꿈의 역할만을 수행합니다. |\n|<PRE> |<PRE>...</PRE> |여백이나 줄간격 등을 고정시켜 주는 역할을 합니다. |\n|>|>|>| |\n|>|>|!글자의 크기를 마음대로 조절하는 태그 |\n|<FONT> |<FONT SIZE=n> ...</FONT> |글자의 크기를 마음대로 조절해 줍니다. <br> 뒤의 숫자는 1~7이며 7이 가장 큰 크기입니다. 기본값은 3입니다. |\n|>|>|>| |\n|>|>|!선그리기 태그 |\n|<HR> |<HR ALIGN= WIDTH= SIZE=> |입체적인 선을 그려줍니다. <br> ALIGN은 선의 정렬을, WIDTH는 선의 폭을, SIZE는 선의 높이를 정해줍니다. |\n|~|<HR align=center SIZE=2 width="20%"> |size ; 입력한 크기만큼의 높이를 설정 <br> width ; 입력한 크기만큼 넓이를 설정 (크기를 픽셀 단위로 지정할 수 있고, 웹브라우저의 넓이에 대한 비율(%)로 지정할 수도 있다. <br> align ; 정렬 방식 (left, right, center) <br> color ; 선의 색상을 설정 <br> noshade ; 입체감이 없는 선을 만듦 |\n|>|>|>| |\n|>|>|!이미지 맵을 처리하는 태그 |\n|<ISMAP> |<IMG SRC= "..." ISMAP> |이미지맵을 정의합니다. |\n|<MAP> |<MAP NAME=...> ...</MAP> |넷스케이프2.0에서 이미지맵을 정의합니다. |\n|>|>|>| |\n|>|>|!목록을 정리해 주는 태그 |\n|<LI> |<UL>...</UL> |순서가 없는 목록으로 일반적인 나열을 말합니다. |\n|~|<OL>...</OL> |순서가 있는 목록으로 위에서부터 번호를 매깁니다. |\n|~|<MENU>...</MENU> |메뉴 목록으로 그리길지 않은 문장의 열거에 사용합니다. |\n|~|<DIR>...</DIR> |디렉토리 목록으로 메뉴 목록보다 짧은 문장을 나열합니다. |\n|~|<DL>...</DL> |정의 목록 태그입니다. <LI>가 아닌 <DT>와 <DD>를 사용합니다. |\n|>|>|>| |\n|>|>|!문서를 가운데로 정렬시켜 주는 태그 |\n|<CENTER> |<CENTER>... </CENTER> |전체 문장을 가운데로 정렬시켜 줍니다. |\n|>|>|>| |\n|>|>|!인용하기 태그 |\n|<BLOCKQUOTE> |<BLOCKQUOTE>... </BLOCKQUOTE> |문장 내에서 인용을 할 경우 들여쓰기를 한 후 인용구로 처리합니다. |\n|>|>|>| |\n|>|>|!글자의 모양을 정의해 주는 태그 |\n|<STRONG> |<STRONG>...</STRONG> |굵은 글씨를 나타내 주는 태그입니다. |\n|<B> |<B>...</B> |~|\n|<EM> |<EM>...</EM> |이탤릭체의 글씨를 나타내 주는 태그입니다. |\n|<I> |<I>...</I> |~|\n|<KBD> |<KBD>...</KBD> |타자기체의 글씨를 나타내 주는 태그입니다. |\n|<CODE> |<CODE>...</CODE> |~|\n|<TT> |<TT>...</TT> |~|\n|>|>|>| |\n|>|>|!배경 이미지 작업하기 |\n|<BODY> |<BODY BACKGROUND="..."> |배경 이미지를 띄워줍니다. |\n|~|<BODY BGCOLOR="#nnnnnn"> |배경 색깔을 지정해 줍니다. |\n|>|>|>| |\n|>|>|!그밖의 태그들 |\n|<DFN> |<DFN>...</DFN> |정의되어지는 단어에 대한 것을 말합니다. |\n|<CITE> |<CITE>...</CITE> |책이나 사진 등의 제목을 말할 때 쓰입니다. |\n|<SAMP> |<SAMP>...</SAMP> |컴퓨터상에 메시지를 나탈낼 때 쓰입니다. |\n|<VAR> |<VAR>...</VAR> |이탤릭체로 표현됩니다. |\n|<SUB> |<SUB>...</SUB> |첨자에 관한 태그입니다. |\n|<SUP> |<SUP>...</SUP> |윗첨자를 나타냅니다. |\n|<BASEPOINT> |<BASEPOINT>... <BASEPOINT> |기본적으로 미리 약속된 크기를 다시 정할 때 사용합니다. |\n|>|>|>| |\n|>|>|!부분을 강조해 주는 태그 |\n|<BLINK> |<BLINK>...</BLINK> |글자를 깜박이게 해줍니다. |\n|<U> |<U>...</U> |글자에 밑줄을 그어줍니다. |\n|>|>|>| |\n|>|>|!연결하기 태그 |\n|<A> |<A HREF="...">...</A> |다른 홈페이지와 연결시켜 줍니다. |\n|~|<A NAME="...">...</A> |자신의 홈페이지 내에서 연결해 줍니다. |\n|>|>|>| |\n|>|>|!주소 및 편지 서비스 |\n|<ADDRESS> |<ADDRESS>... </ADDRESS> |주소에 대한 정의를 내려줍니다. |\n|<MAILTO> |<A HREF="MAILTO..."> |편지쓰기 창을 띄워 줍니다. |\n|>|>|>| |\n|>|>|!색상 지정하기 |\n|<BODY> |<BODY TEXT= "#nnnnnn">...</BODY> |글자색을 지정합니다. |\n|~|<BODY LINK= "#nnnnnn">...</BODY> |하이퍼링크의 색을 지정합니다. |\n|~|<BODY VLINK= "#nnnnnn">...</BODY> |한 번 누른적이 있는 하이퍼링크의 색을 지정합니다. |\n|~|<BODY ALINK= "#nnnnnn">...</BODY> |누르고 있는 동안의 색을 지정합니다. |\n|>|>|>| |\n|>|>|!표 만들기 태그 |\n|<TABLE> |<TABLE BORDER>... </TABLE> |표의 전체 형식을 나타냅니다. |\n|~|<TR><TD></TD></TR> |표 내부에 들어갈 형식을 정의합니다. |\n|~|<TD COLSPAN=n> |가로칸을 n만큼 합쳐줍니다. |\n|~|<TD ROWSPAN=n> |세로칸을 n만큼 합쳐줍니다. |\n|~|<TD ALIGN=...> |표안의 좌우 정렬 방식을 정의합니다. |\n|~|<TD VALIGN=...> |표안의 상하 정렬 방식을 정의합니다. |\n|>|>|>| |\n|>|>|!문서를 임의로 고정시키는 태그 |\n|<NOBR> |<NOBR>...</NOBR> |화면 크기에 따라 문단이 바뀌는 것을 방지합니다. |\n|<WBR> |<WBR>...</WBR> |위의 태그 안에서 문단을 바꿀 때 사용합니다. |\n|>|>|>| |\n|>|>|!CGI 양식 첨가하기 |\n|<FORM> |<FORM>...</FORM> |양식을 정의합니다. |\n|~|<FORM METHOD="..." ACTION="..."> |양식의 방법을 정의합니다. |\n|<TEXTAREA> |<TEXTAREA NAME="..." ROWS="..."> |글틀 상자를 정의합니다. |\n|<INPUT> |<INPUT TYPE="..."> |어떤 형태로 입력할 것인지를 정의합니다. |\n|~|<INPUT TYPE="RADIO"> |라디오 단추를 만들어줍니다. |\n|~|<INPUT TYPE= "CHECKBOX"> |체크 상자를 만들어 줍니다. |\n|~|<INPUT TYPE= "SUBMIT"> |제출 버튼을 만들어 줍니다. |\n|~|<INPUT TYPE="RESET"> |취소 버튼을 만들어 줍니다. |\n|<SELECT> |<SELECT NAME="..."> |선택 사항 상자를 만들어 줍니다. |\n|>|>|>| |\n|>|>|!창만들기 태그 |\n|<FRAME> |<FRAMESET>... </FRAMESET> |창의 기본 틀을 지정합니다. |\n|~|<FRAMESET ROW= "숫자 혹은 %"> |위 아래로 나눠줍니다. |\n|~|<FRAMESET COLS= "숫자 혹은 %"> |좌우로 나눠줍니다. |\n|~|<FRAME SRC="..." MARGINWIDTH="..."> |창에 들어갈 좌우 여백을 정의합니다. |\n|~|<FRAME SRC="..." MARGINHEIGHT="..."> |창에 들어갈 상하 여백을 정의합니다. |\n|~|<FRAME SCROLLING= "...> |스크롤바를 설정해 줍니다. |\n|~|<NOFRAMES>... </NOFRAMES> |프레임이 안보이게 해줍니다. |\n|>|>|>| |\n|>|>|!이미지 다루기에 필요한 태그 |\n|<IMG> |<IMG SRC="..."> |이미지를 정의해 줍니다. |\n|~|<IMG SRC="..." ALIGN=...> |이미지의 정렬 상태를 나타내 줍니다.<br> <img src="파일명" align="top/middle/bottom"> |\n|~|<IMG SRC="..." WIDTH="..." HEIGHT="..."> |이미지의 크기를 조절해 줍니다. |\n|~|<IMG SRC="..." LOWSRC="..."> |이미지를 JPEG파일로 나타내 줍니다. |\n|~|<IMG SRC="..." VSPACE= HSPACE=> |이미지의 여백을 조절해 줍니다. |\n|~|<IMG SRC="..." BORDER="..."> |이미지의 태두리선을 조절합니다. |\n|~|<IMG SRC="..." ALT="..."> |이미지가 전송되지 않았을 경우에 글자로 대처해 줍니다. |\n\n \n
|width:250px; !Example | !Example Markup |h\n| how the example markup renders | what to enter as tiddler text |\n|>| ![[Basic Text Formatting|Basic Formatting]] |\n|''bold''|{{{''bold''}}} (two __single__-quotes) |\n|//italics//|{{{//italics//}}} |\n|''//bold italics//''|{{{''//bold italics//''}}} |\n|__underline__|{{{__underline__}}} |\n|--strikethrough--|{{{--strikethrough--}}} |\n|super^^script^^|{{{super^^script^^}}} |\n|sub~~script~~|{{{sub~~script~~}}} |\n|@@highlight@@|{{{@@highlight@@}}} |\n|foo -- bar|{{{foo -- bar}}} -- two dashes create an Em dash|\n|>| ![[Avoiding Wikification|Suppressing Formatting]] |\n|to output text as-is (escaping), enclose it in three double quotes or use the {{{<nowiki>}}} markup|>|\n|"""plain//text""" |{{{"""plain//text"""}}}|\n|<nowiki>not__wikified</nowiki>|{{{<nowiki>not__wikified</nowiki>}}}|\n|>| ![[Headings]] |\n|start a new line with one or more exclamation points to create headings |>|\n|<html><h1>Heading 1</h1><h2>Heading 2</h2><h3>Heading 3</h3><h4>Heading 4</h4><h5>Heading 5</h5></html>|{{{!Heading 1}}}<br />{{{!!Heading 2}}}<br />{{{!!!Heading 3}}}<br />{{{!!!!Heading 4}}}<br />{{{!!!!!Heading 5}}}|\n|>|![[Lists]]|\n|>| [[Ordered Lists|Lists]] |\n|<html><ol><li>item one</li><li>item two<ol><li>level two<ol><li>level three</li></ol></li></ol></li></ol></li></ol></html>|{{{#item one}}}<br/>{{{#item two}}}<br/>{{{##level two}}}<br/>{{{###level three}}}|\n|>| [[Unordered Lists|Lists]] |\n|<html><ul><li>item one</li><li>item two<ul><li>level two<ul><li>level three</li></ul></li></ul></li></ul></html>|{{{*item one}}}<br/>{{{*item two}}}<br/>{{{**level two}}}<br/>{{{***level three}}}|\n|>| [[Definition List|Lists]] |\n|<html><dl><dt>term</dt><dd>definition</dd></dl></html>|{{{;term}}}<br />{{{:definition}}}|\n|>| [[Mixed Lists|Lists]] |\n|<html><ol><li>ordered<ul><li>unordered<dl><dt>term</dt><dd>definition</dd></dl></li></ul></li></ol></html>|{{{# ordered}}}<br />{{{#* unordered}}}<br />{{{#*;term}}}<br />{{{#*:definition}}}|\n| ![[Blockquotes]] |>|\n| [[Nested Blockquotes|Blockquotes]] |>|\n|<html><blockquote>blockquote<blockquote>level two<blockquote>level three</blockquote></blockquote></blockquote></html>|{{{>blockquote}}}<br />{{{>>level two}}}<br />{{{>>>level three}}}|\n|>| [[Multi-line Blockquotes|Blockquotes]] |\n|<html><blockquote>multi-line<br/>blockquote</blockquote></html>|{{{<<<}}}<br />{{{multi-line}}}<br />{{{blockquote}}}<br />{{{<<<}}}|\n|>| [[Mixed Blockquotes|Blockquotes]] |\n|<html><blockquote>foo<br><blockquote>inner foo, level 1<br><blockquote>inner foo, level 2<br></blockquote></blockquote>more foo<br></blockquote></html>|{{{<<<}}}<br />{{{foo}}}<br />{{{> inner foo, level 1}}}<br />{{{>> inner foo, level 2}}}<br />{{{more foo}}}<br />{{{<<<}}}|\n|>| ![[Code / Monospaced Text|Code]] |\n|>| [[Inline Code|Code]] |\n|{{{monospaced text}}}|<html><code>{{{mono space text}}}</code></html>|\n|>| [[Code Block|Code]] |\n|<html><pre>{{{<br/>multi-line<br/>code block<br/>}}}</pre></html>|<html><code>{{{</code></html><br/>{{{multi-line}}}<br/>{{{code block}}}<br/><html><code>}}}</code></html>|\n| ![[Links]] |>|\n|>| [[Internal Links|TiddlyLink]] |\n|[[formatting]]|{{{formatting}}}|\n|~NoLink|{{{~NoLink}}} -- a tilde {{{~}}} prevents automatic ~WikiWord links|\n|[[Plain Link]]|{{{[[Plain Link]]}}}|\n|[[Pretty Link|Tiddler Name]]|{{{[[Pretty Link|Tiddler Name]]}}}|\n|>| [[External Links|External Link]] |\n|A valid URL is automatically rendered as an external link.|>|\n|http://www.tiddlywiki.com|{{{http://www.tiddlywiki.com}}}|\n|[[Pretty External Link|http://www.tiddlywiki.com]]|{{{[[Pretty External Link|http://www.tiddlywiki.com]]}}}|\n|>| ![[Filesystem Links|Links]] |\n|You can, of course, use file system links both as plain or pretty links.|>|\n|''Windows Network Path''|{{{[[file://///server/share]]}}}|\n|''Windows Local''|{{{[[file:///c:/folder/file]]}}}|\n|''Linux/Unix Local''|{{{[[file:///folder/file]]}}}|\n|''Relative Path (Subfolder)''|{{{[[folder/file]]}}}|\n|>| ![[Images]] |\n|In general, image files are external to a TiddlyWiki.|>|\n|[img[http://www.tiddlywiki.com/favicon.ico]]|{{{[img[path/image.jpg]]}}}|\n| aligned right&nbsp;&nbsp;[>img[http://www.tiddlywiki.com/favicon.ico]]|{{{[>img[path/image.jpg]]}}}|\n|[<img[http://www.tiddlywiki.com/favicon.ico]]&nbsp;&nbsp;aligned left|{{{[<img[path/image.jpg]]}}}|\n|w/ internal link [>img[http://www.tiddlywiki.com/favicon.ico][TiddlyWiki]]|{{{[img[path/image.jpg][TiddlerName]]}}}|\n|w/ external link [>img[http://www.tiddlywiki.com/favicon.ico][http://www.tiddlywiki.com]]|{{{[img[path/image.jpg][TiddlyWiki|http://www.tiddlywiki.com]]}}}|\n|>| ![[Gradients|gradient]] |\n|<<gradient horiz #faa #afa #aaf>>&nbsp;&nbsp;__vert__ical or __horiz__ontal<br>&nbsp;&nbsp;see [[gradient macro|http://tiddlywiki.org/#[[gradient (macro)]]]]>>|{{{<<gradient horiz #faa #afa #aaf>>wiki text>>}}}|\n|>| ![[Tables]] |\n|<<tiddler HTML_TABLE>>|<<tiddler HTML_TABLE_MARKUP>>|\n|>|<<tiddler HTML_TABLE_RULES>>|\n|>| ![[Custom Styles|CSS Formatting]] |\n|>|a {{{@@highlight@@}}} element can accept CSS syntax to directly style text.|>|\n|@@color:green;green coloured@@|{{{@@color:green;green coloured@@}}}|\n|>| ![[Custom CSS Class Wrapper|CSS Formatting]] |\n|>|You can define a custom css class wrapper, like {{{.button}}} below. By default, the inner text is placed inline into a {{{<span>}}} of said class(s). If you start and end the inner text with a newline, the content is placed in a {{{<div>}}}. Use the StyleSheet to define the css styles applied to the class.|\n|<br>{{button title{Click!}}}|<html><pre>{{button title{Click!}}}</pre></html>|\n|>| ![[Embedded HTML|HTML Formatting]] |\n|<html><span style="padding-right:30px;font-size:2em;">any</span><br /><b>valid</b> <em>xhtml</em></html>|<html><code style="font-weight:bold">&lt;html&gt;</code></html>{{{<span style="padding-right:30px;font-size:2em;">any</span><br /><b>valid</b> <em>xhtml</em>}}}<html><code style="font-weight:bold">&lt;/html&gt;</code></html>|\n|>| [[Embedded <iframe>|HTML Formatting]] |\n|<html><iframe height="200px" width="300px" src="http://www.youtube.com/embed/Cj6ho1-G6tw?vq=hd720" frameborder="0" allowfullscreen/></html>|<html><code style="font-weight:bold">&lt;html&gt;</code></html>{{{<iframe src="http://the.url"/>}}}<html><code style="font-weight:bold">&lt;/html&gt;</code></html>|\n|>| ![[Line Break|Line Breaks]] |\n|handy for entering multi-line content into table cells or lists|>|\n|a<br>b|{{{a<br>b}}} or {{{a<br/>a}}} or {{{a<br />a}}}|\n|>| ![[Horizontal Rules]] |\n|before<hr>after|{{{<hr>}}} or <br>{{{----}}} on its own line|\n|>| ![[HTML Entities]] |\n|>|You can use HTML entities...|\n|&#632;&trade; |{{{&#632;&trade;}}}|\n| ![[Macros]] |>|\n|>|macros are called by enclosing the macro name in {{{<<}}} and {{{>>}}}|\n|<<version>> |{{{<<version>>}}}|\n|>| ![[Hidden Text|Basic Formatting]] |\n|This is hidden: |{{{This is hidden: /% secret comment %/}}}|\n\n!See also...\n[[formatting]]\n[[Images]]\n[[Testing]]
'formatting' 에 관한 글을 작성해 주세요.
원문 ( http://itxcloud.tistory.com/127 ) 요약\n\n''서버 가상화 (Server Virtualization)란''\n기존의 물리 서버 환경의 컴퓨터 네트워크 관리자는 하나의 어플리케이션 또는 태스크에 하나의 전용 서버를 할당함으로써 애플리케이션에서 발생하는 문제의 원인을 쉽게 발견할 수 있었으며, 더불어 네트워크 구성 또한 용이하였다.\n하지만, 이러한 방식은 몇 가지 문제를 유발하는데\n하나는 고집적 CPU의 파워를 충분히 활용하지 못한다는 점이며\n다른 하나는 컴퓨터 네트워크 규모가 커지고 복잡해짐에 따라, 서버가 점유하는 물리적 공간은 급증하고 동시에 이러한 서버랙들로 꽉찬 데이터센터는 엄청난 전력을 소비함과 동시에 열을 발생시킨다는 점이다.\n\n서버 가상화는 이러한 이슈들을 한 번에 해결하고자 시도되었다.\n하나의 물리 서버는 여러 개의 가상 머신으로 전환될 수 있으며, 각각의 가상 서버는 마치 독립적인 물리 서버처럼 동작한다.\n또한 자체 운영시스템을 구동할 수 있으므로, 이론상으로는 물리 서버의 실제 처리 능력을 최대한 활용할 수 있는 만큼의 개수에 해당하는 가상 서버를 생성할 수 있다.\n\n''서버 가상화를 도입하는 이유''\n...\n\n''서버 가상화의 종류''\n...\n\n''서버 가상화의 한계''\n서버 가상화가 주는 해택은 너무도 매력적이어서, 모든 기술에는 한계가 있다는 사실을 종종 잊어버리게 한다. \n서버 가상화는 도입 전 반드시 자체 네트워크 아키텍쳐와 필요 사항, 도입 예정인 서버 가상화 기술을 면밀히 검토해야 한다.\n\nCPU 점유률이 높은 애플리케이션의 전용 서버에 있어서 가상화는 큰 도움이 되지 않을 수도 있다. 가상화는 본질적으로 물리 서버의 처리능력을 여러 개의 가상 서버에 나누어 사용하기 때문에, 애플리케이션의 요구환경에 미달할 경우 문제가 발생할 수 있다.\n최악의 경우 서버의 처리능력을 넘어서게 되면 시스템이 다운될 가능성도 있다. 따라서 네트워크 관리자는 사전에 CPU 사용량을 자세히 검토해야 한다.\n\n하나의 물리 서버에 지나치게 많은 가상 서버들을 생성하여 서버의 CPU에 과부하를 일으키는 것은 그다지 현명한 일이 아니다. 하나의 물리 서버에는 구동하는 가상 서버가 많아지면 많아질수록, 각각의 가상 서버가 사용할 수 있는 처리 능력은 줄어들게 되며, 물리 서버의 디스크 사용량 또한 동일한 문제를 일으킬 수 있다.\n\n또 다른 문제는 마이그레이션인데, 현재는 하나의 물리 서버에서 구동되는 가상 서버를 마이그레이션할 수 있는 전제조건은 동일한 제조사의 프로세서를 사용해야 한다는 것이다. 만일 동일한 네트워크 상에 있는 인텔 프로세서를 사용하는 서버에서 AMP 프로세서를 사용하는 가상 서버를 포팅하고자 한다면, 이는 불가능하다.\n\n가상 서버의 마이그레이션이 왜 필요한가? 만일 하나의 물리 서버에 대한 유지보수가 필요할 경우, 다른 물리 서버로 가상 서버를 포팅하는 것이 애플리케이션 다운타임을 최소화 할 수 있기 때문이다. 마이그레이션은 선택사항이 아니다. 하나의 물리서버에서 구동되는 가상 서버의 모든 애플리케이션들은, 유지보수 시에는 서비스가 불가하게 될 것이다.\n\n이러한 제약사항에도 불구하고 많은 기업들은 서버 가상화에 대한 투자를 지속하고 있다. 서버 가상화 기술이 발전하게 되면, 대규모 데이터센터가 필요하지 않는 상황이 발생할 수도 있다. 서버의 전력 소비량과 열 발생량 또한 감소하게 되면, 자원 활용에 대한 효율성 뿐만 아니라, 그린 IT에 대한 니즈 또한 충족시킬 수 있다.
※ 추천 ; CLASS10 규격, 샌디스크 울트라 제품 정도면 무난/ MCL 제품\n\n마쓰시타와 샌디스크, 도시바가 디지털 카메라, 핸드헬드 컴퓨터, PDA, GPS 장치와 같은 휴대용 장치에 사용하기 위해 개발한 플래시 (비휘발성) 메모리 카드 포맷이다.\n\n#. 크기\n| 일반 SD 카드 |주로 디지털카메라 등 |\n| 마이크로 SD 카드 |스마트폰이나 블랙박스 등 |\n\n#. 저장용량에 따라 (logo 표시) - 기기에 따라 인식을 못하는 경우가 있기 때문에 호환성 여부를 확인해야 한다.\n| SD |2G |\n| SDHC |4~32G |\n| SDXC |64G 이상 |\n\n#. 전송속도에 따라 (동그라미 표시가된 숫자) - Class\n| 클래스 2 |초당 2MB |최소 전송속도로 기기와의 환경에 따라 그 이상의 속도가 나올 수 있다 |\n| 클래스 4 |초당 4MB |일반적인 경우 |\n| 클래스 6 |초당 6MB |낮은 클래스를 사용하여 동영상을 촬용할 경우 끊김 현상 발생 |\n| 클래스 10 |초당 10MB |동영상 등 전문적으로 사용할 경우 |\n| UHS |데이타의 최대전송속도 표시 |(U안에 숫자로 표시) |\n클래스 10, UHS 1이라면 초당 전송속도가 최소 10M, 최대 50M\n\n#. 저장방식에 따라\n| TCL | 1개의 셀에 3비트를 저장 |제조원가 및 가격이 저렴 |읽기/쓰기 횟수 약 1,000회 |\n| MCL | 1개의 셀에 2비트를 저장 |TCL보다 가격이 조금 비쌈 |읽기/쓰기 횟수 약 10,000회 |\n| SCL | 1개의 셀에 1비트를 저장 |제조원가 및 가격이 비쌈 |읽기/쓰기 횟수 약 100,000회 |\n\n
원문 ''ETF 란 ETF 투자의 장점, 주의할 점, 투자방법…'' (http://financetech.kr/article/465/ ) 요약\n\nETF의 의미는 기초자산의 수익을 따라가게 구성된 지수(인덱스, index) 펀드로, 우리말로는 상장지수펀드라고 부르고 있다.\n\n지수(Index) 펀드이면서 동시에 상장되어 한 주(한 좌)를 기본 단위로 실시간 거래될 수 있는 펀드입니다.\n펀드이지만 펀드와는 달리 거래소에서 실시간 시장 가격으로 거래 될 수 있다는 점, 또 환매수수료가 없고,\n개별 주식처럼 거래 되기는 하지만, 개별 주식과는 달리 ETF한 주(좌)에 투자를 해도 (기본적으로는 펀드이기 때문에) 여러 주식에 분산 투자한 효과를 낸다는 특징이 있다.\n요약하자면, 지수(Index)를 기초자산으로 추정하는 지수 펀드이면서 주식 시장에서 개별 주식처럼 거래 될 수 있는 것이 ETF이다.\n\nETF 투자의 목적은,\n더도 말고 덜도 말고 시장 평균 수익률 만큼만 수익을 내자는 것이다.\n단기적인 기간 동안 주가지수는 상승과 하락을 왔다 갔다 하지만, 장기적으로는 주가지수는 상승한다. 그렇다면, 주가지수의 변동을 쫓아 가게 만든 ETF역시 장기적으로는 상승할 것이다. 그리고 ETF가 얻는 수익은 주가지수가 얻는 수익률만큼 즉 시장평균수익률 만큼 비례해서 얻게 된다.\n\n!! ETF의 장점\n1. 거래비용이 저렴하다.\n2. 10만원대로 바로 투자를 시작할 수 있다.\n3. 현재 시가대로 매매 할 수 있다.\n4. 시장 흐름을 따르는 투자를 하게 된다.\n\n!! ETF에 투자할 때 주의할 점\n1. 거래량이 많은 ETF에 투자하라\n&nbsp; &nbsp; 현재 거래량이 많은, 그리고 초보자가 접근하기에 좋은 ETF는 삼성투신에서 운영하는 KODEX 펀드이다.\n2. ETF도 원금손실이 발생할 수 있다\n3. 변형 ETF에는 경험이 필요하다\n&nbsp; &nbsp; 종합주가지수 ETF가 아닌 다른 ETF에 투자 할 때는 조심할 필요가 있다. 초보자는 종합주가지수 ETF에 투자 하는 것이 좋다.\n4. ETF의 세 가지 가격에 관심을 기울여라\n\n''ETF의 가격에는 이론NAV, 추적NAV, 거래가격이 있다.''\n이론NAV: ETF가 따르는 지수의 실시간 가격 \n추적NAV: 실시간 추정 ETF 가격 \n거래가격: 추적NAV를 기준으로 수요 공급에 의해 결정되는 거래가격 \n\n여기서 각 가격이 의미하는 바를 깊게 이해할 필요가 없다. 다만, 이론NAV와 추적NAV가 차이가 나는 경우(이를 추적오차율이라고 한다.)와 추적NAV와 거래가격에 차이가 나는 경우(이를 괴리율이라고 한다.)가 있는데, 이 추적오차율 또는 괴리율이 크고 또 자주 발생한다면 ETF투자를 다시 생각해 보아야 한다는 점만은 주의해야 한다.\n추적오차율이 크다는 것은 펀드 구성이 기초자산 지수를 제대로 따라가지 못하도록 구성되었다는 것을 의미하고, 괴리율이 크다는 것은 ETF를 운영 하는 주체에 문제가 있음을 의미하기 때문이다.\n그러나, 추적오차율과 괴리율은 어느 정도는 있을 수 밖에 없는 데, 이는 기초자산 지수를 닮도록 구성한 펀드기이지 기초자산 지수 그 자체는 아니기 때문이다.\n
!!! 1. iSCSI (Internet Small Computer Systems Interface) 란 무엇인가?\nIBM 과 CISCO 가 2000 년 2 월에 Internet Engineering Task Force (IEFT)에 제출한 Storage Network 기술이다. \niSCSI는 SCSI 명령을 TCP/IP 패킷으로 캡슐화하고 IP 네트워크를 통한 블록 데이터 전송을 지원하는 IETF 표준 프로토콜이다. IP 네트워크를 통해 iSCSI 명령을 전송함으로써, 인트라넷을 통해 데이터를 수월하게 전송하고 멀리 떨어진 위치에서도 스토리지를 관리하기 위해 iSCSI를 사용할 수 있다. 도처에 IP 네트워크가 존재하기 때문에, iSCSI를 사용하여 LAN, WAN 또는 인터넷을 통해 데이터를 전송하고, 위치에 상관없는 데이터 스토리지 및 검색을 지원할 수 있다.\n\n\n!!! 2. iSCSI 가 줄수 있는 것은? \niSCSI 는 Local 에서나 원격지에서 서버와 Storage 를 연결되도록하며 편재되어있고, 신뢰성이 있으며 IP Network 의 관리가 쉬운, 고성능의 SAN 에서 사용된다. iSCSI 이전에는 SAN 을 구축하기 위한 유일한 Storage Network 방법으로는 사용자가 각각의 분리된 SAN infrastructure 에 투자해야하는 Fibre Channel 뿐이 없었다. \n\n역사적으로 스토리지는 DAS(direct-attached storage)형태로 전체 네트워크와 독립되어 있었다. 하지만 iSCSI 의 도입으로 사용자는 원격에서도 Database 에 접근이 가능하다. \n가장 큰 영향도 스토리지에 IP Networking 을 이용하여 접근, resources 의 사용이 가능하다는 것이다. 이것은 스토리지 네트워킹의 큰 혁명이라 할 수 있을 것이다. \n\n고성능 및 안정성을 위해 Fibre Channel SAN(storage area network)을 구현하면 원격 백업/저장, 고가용성, 중앙 집중식 관리 등을 포함한 비즈니스 지속성 및 장애 방지 환경을 지원할 수 있다. 하지만, FC는 원시 형태로는 저대역폭의 원거리 IP WAN 네트워크를 통해 쉽게 전송될 수 없으므로 특수 게이트웨이 하드웨어 및 프로토콜이 필요하다.\n\nIP 네트워크를 통해 iSCSI를 사용한다고 해서 FC 네트워크를 대신할 수는 없지만, IP가 연결된 호스트에 트랜스포트를 제공하여 FC 기반 타깃에 액세스할 수 있도록 한다. 이외에도, iSCSI는 IP 기반 네트워크를 통해 격리된 FC SAN 환경을 연결하는 프로토콜로서 다음과 같은 이점이 있다.\n\n&nbsp; &#8226; 전세계 IP 네트워크를 통해 먼 거리에서도 FC SAN 환경을 상호 연결할 수 있는 비용 효율적인 솔루션 제공\n&nbsp; &#8226; 관리, 보안 및 서비스 품질을 위한 표준 이더넷 기반의 네트워크 프로토콜과 미들웨어의 가용성\n&nbsp; &#8226; 네트워크 관리자나 스토리지 관리자에게 필요한 추가 기술이나 교육 없이도 iSCSI를 통해 기존 FC SAN을 확장할 수 있음\n\n기존의 FC 기반 스토리지 리소스를 보다 효율적으로 활용함으로써 iSCSI를 통해 추가적인 가치를 실현할 수 있다. 호스트는 기존 IP/이더넷 네트워크 연결을 활용하여 스토리지 요소에 액세스할 수 있기 때문에, 이제 스토리지의 통합이 보다 쉬워졌으므로 사용률을 훨씬 더 높일 수 있다.\n\n-----\n#. ''DAS (direct-attached storage)'' ; @@color(#04f): 직접 연결 저장 장치@@\nDAS는 컴퓨터나 서버에 직접 연결된 컴퓨터 저장장치로서, 특별한 고려가 되어 있지 않는 한 다른 장치에서 직접 접근이 불가능하다.\n\n#. ''SAN (storage area network)'' ; @@color(#04f): 스토리지 전용 네트웍@@\nSAN[쌘]은 대규모 네트웍 사용자들을 위하여 서로 다른 종류의 데이터 저장장치를 관련 데이터 서버와 함께 연결하는 특수목적용 고속 네트웍(또는 서브네트웍)이다. 대체로, SAN은 한 기업의 전체 컴퓨팅 자원을 연결해 놓은 네트웍의 일부가 된다. SAN은 대개 IBM S/390 메인프레임과 같은 다른 컴퓨팅 자원에 아주 근접하여 밀집해 있게 되는 것이 보통이지만, 그러나 백업이나 기록의 영구보관 저장을 위해 ATM이나 SONET 등과 같은 광역통신망 기술을 이용하여 원거리에 있는 장소로 확장될 수도 있다. \n\nSAN은 서로 다른 종류의 저장장치들이 네트웍 서버를 통한 모든 사용자들에 의해 공유될 수 있도록 서로 연결되어 있는 시스템이다. SAN은 IBM의 광섬유인 ESCON과 같은 기존의 통신기술을 이용하거나, 새로운 파이버 채널 기술을 이용할 수도 있다. SAN 시스템 통합 기술을 가진 일부 회사들은, 이것을 하드디스크나 CD-ROM 플레이어와 같이 서로 다른 종류의 저장 장치들에 의해 공유될 수 있는 PC의 공통 저장 버스에 비유하기도 한다. \n\nSAN은 디스크 미러링, 백업 및 복원, 영구보관 및 영구보관용 데이터의 검색, 한 저장장치에서 다른 저장장치로 데이터 이동, 그리고 네트웍 상의 서로 다른 서버들 간에 데이터의 공유 등을 지원한다. \n
감사 ; http://easyprogramming.tistory.com/23\n\n!! 서론\n 문자열이 란게, 엄청 간단하게 보이면서도, 어떤 프로젝트를 진행하든지 무조건 사용하게 되고, C, JavaScript, Java 등등 여러 언어를 넘나들다 보면 헷갈리는 부분도 많다. 개인적으로 문자열의 깔끔한 처리들을 위해 이 포스트를 작성하게 되었다.\n\n\n!! 본론\n/ 문자 셋(Character Set)\n/ 문자열 처리의 기본 3가지\n/ 기타 문자열에 알아야 할 것들\n\n!!! 문자 셋(Character Set)\n) 1바이트만 쓰는 놈\n 0bit ~ 127bit 까지 ASCII, 128bit ~ 256bit 표준화 한것이 ANSI, CP-949는 128부터 255까지 한글로 맵핑했다는 뜻 \n C/C++ Language - char\n \n2) 1~4바이트 쓰는 놈\n0bit ~ 127bit 까지는 1byte로 저장, 128이상은 2~4byte로 저장 해서 ''ASCII와 호환''이 된다.\n''UTF-8''이 이런 종류의 대표적인 인코딩.\nC/C++ Language - unsigned char(그냥 char 써도 호환이 되긴 하다)\n \n3) 2~4바이트 쓰는 놈\n대표적인 놈이 ''Unicode''. 다만 저장할 때 문제가 될만한게 있다. 예를 들어 H의 유니코드 번호는 U+0048 이고, 보통 저장할 때는 00 48 로 저장한다.(리틀 엔디안) 하지만 48 00 으로 저장하는 빅 엔디안 방법도 있다.\n''Unicode와 ASCII, UTF8은 호환이 거의 안된다.''\nC/C++ Language - wchar_t\n\n\n!!! 문자열 처리의 기본 3가지\n보통 Java나 Python, JavaScript같은 진보된(?) 언어에 대해서는 문자열을 요리하는게 쉽다. 하지만 C/C++ Language 에서는 헷갈리는 부분이 많아서 C/C++ Language 에 편향된 설명을 한다.\n\n++++[ 1. 문자열 생성 및 복사 ]\nC/C++ Langauge에서는 많이 쓰는 문자열 데이터 타입들은 다음과 같다.\n(MFC의 CString, Objective-C 의 NSString, Qt의 QString 같은 클래스들은 쉬우니까 패스!)\n \nchar*\nwchar_t*\nstd::string\nstd:wstring\nTCHAR*(Windows OS를 위한)\n\n''char* 와 std::string''\nstd::string은 char*를 내부에 값으로 가지고 있고, 그 외에 필요한 함수들을 제공하기 때문에 두개는 쉽게 호환이 가능하다.\n \nchar* tmp1 = "test";\nstd::string tmp2 = tmp1;\n \n''wchar_t* 와 std::wstring''도 마찬가지로 쉽게 호환이 가능하다.\n \nwchar_t* tmp3 = "test2";\nstd::wstring tmp4 = tmp3;\n \n하지만 char* 와 wchar_t* 사이의 호환은 쉽게 (=) 대입 연산자로 가능한게 아니다.\n아래 함수를 사용해서 변환이 가장 깔끔할 듯 싶다.\n+++[ 더보기 ]\n{{{\nwchar_t* CharToWChar(const char* pstrSrc)\n{\n int nLen = strlen(pstrSrc)+1;\n\n wchar_t* pwstr = (LPWSTR) malloc ( sizeof( wchar_t )* nLen);\n mbstowcs(pwstr, pstrSrc, nLen);\n\n return pwstr;\n}\n\nchar* WCharToChar(const wchar_t* pwstrSrc)\n{\n\n#if !defined _DEBUG\n int len = 0;\n len = (wcslen(pwstrSrc) + 1)*2;\n char* pstr = (char*) malloc ( sizeof( char) * len);\n \n WideCharToMultiByte( 949, 0, pwstrSrc, -1, pstr, len, NULL, NULL);\n#else\n\n int nLen = wcslen(pwstrSrc);\n\n char* pstr = (char*) malloc ( sizeof( char) * nLen + 1);\n wcstombs(pstr, pwstrSrc, nLen+1);\n#endif\n return pstr;\n}\n}}}\n===\n\nTCHAR*는 컴파일 환경에 따라서 char* 또는 wchar_t*로 자동변환된다. 마이크로소프트에서 만든 거라서 아마 윈도우즈 환경에서만 쓰일것이다.(다국어를 위해서 필수로 알아야 된다.)\n===\n\n++++[ 2. 문자열 조작(오리고 붙이고) ]\n일반 스크립트 언어에서는 오리고 붙이고를 +,- 연산자로 쉽게 가능하지만 이 놈의 C/C++ Language에서 각종 함수들을 사용해야 한다. 또한 char*를 위한 함수랑 wchar_t* 를 위한 함수들이 서로 다르다.\n\n| !ANSI | !UNICODE | !TCHAR |\n| strlen() | wcslen() | _tcslen() |\n| strcat() | wcscat() | _tcscat() |\n| strchr() | wcschr() | _tcschr() |\n| strcmp() | wcscmp() | _tcscmp() |\n| strcpy() | wcscpy() | _tcscpy() |\n| strstr() | wcsstr() | _tcsstr() |\n| strrev() | _wcsrev() | _tcsrev() |\n| printf() | wprintf() | _tprintf() |\n| sprintf() | swprintf() | _stprintf() |\n| scanf() | wscanf() | _tscanf() |\n\nTCHAR함수의 경우 컴파일시 어떤 종류로 세팅하느냐 에 따라서 _tcslen()이 strlen() 또는 wcslen() 둘중 하나로 자동 변환되기 때문에\n멀티바이트/유니코드 신경 안쓰시고 작업하려면 _stprintf_s 와 같은 TCHAR 함수를 사용.\n\n+++[ 유니코드와 멀티바이트가 호환이되게 코딩하는 법 ]\n출처 ; http://ddangddoo.tistory.com/entry/유니코드와-멀티바이트\n\n1. 모든 문자열 상수는 TEXT()키워드로 감싼다. ex) " 문자열" -> TEXT("문자열")\n2. char -> TCHAR\n3. char* -> LPTSTR\n4. const char* -> LPCTSTR\n\n멀티바이트와 UNICODE console 출력 함수 or 매크로\n\n멀티바이트 출력 : cout / printf\n유티코드 출력 : wcout / wprintf\n멀티바이트/유니코드 출력 : _tprintf\n\n\n일반적으로 사용코드\n\n1.멀티바이트\nchar* message = new char[20];\nsprintf(message, "%s", "문자열");\n\n2.유니코드\nwchar_t* message = new wchar_t[20];\nswprintf(message, L"%s", L"문자열");\n\n3. 멀티바이트/문자열 호환 코드\nTCHAR* widestring = new TCHAR[20];\nwsprintf( widestring, TEXT("%s"), TEXT("문자열));\n===\n===\n\n++++[ 문자열 찾기 ]\nC/C++ Language에서 기본적인 문자열 찾기는 strcmp() 또는 wcscmp()로 가능하다. 하지만 따로 뺀 이유는 ''정규표현식(Regular Expression)'' 이 더 강력한 방법이기 때문이다.\nC/C++에서는 따로 라이브러리를 설치해야 하지만 일반 다른 언어들 보면 기본 내장되어 있는 객체가 있다. 이 정규표현식을 사용하면 함수들을 사용하는 것보다 훨신 깔끔하게 코딩이 가능하다. 하지만 정규표현식을 완벽하게 알기는 어렵다... 책 1권정도의 공부량이 필요하다.... 대충 쓰려면 example만으로도 가능하기도 하지만.\n===\n\n\n!!! 기타 문자열에 알아야 할 것들\n''널 문자''\nC/C++ Language로 만든 문자열의 맨뒤에는 무조건 '\s0' 문자가 들어가야 한다.\nchar* tmp1 = "test"; \n의 경우는 '\s0' 문자가 눈에는 안보이지만 자동적으로 들어간다. 간혹 배열로 스트링을 만들 때 꼭 '\s0'을 넣어줘야 한다.\nconst int len = 4;\nchar tmp2[len+1];\nfor(int i=0; i < len; i++)\n{\n tmp2[i] = 'k';\n}\ntmp2[len] = '\s0';\n \n근데 난 이 널문자가 C/C++에서만 중요한 줄 알았다. 아니였다. ''JavaScript도 널 문자를 먹는다''. 스트링 한참 잘 처리하다가 중간에 '\s0' 가 들어가버리면 문자열이 거기서 끝나버린다.\n \n''Windows API''\n예를 들어 CreateDirectory란 함수를 사용하고 컴파일 하다가, "CreateDirectoryW 함수에서 const char* 안 받아요" 라는 오류 메시지가 뜰 때가 있다. 그렇다. Windows 의 내부 API 는 두가지 버전으로 되어 있다.A와 W.\nCreateDirectory 는 TCHAR처럼 컴파일시 CreateDirectoryA와 CreateDirectoryW 두가지 중 하나로 바뀐다. 자신이 char* 만 쓴다면 애초에 CreateDirectoryA로 명시하고 작성하는게 오류 안나고 깔끔하지만 다국어 처리를 위해선 TCHAR와 CreateDirectory 둘다 쓰는게 좋다.\n \n''NSString''\nNSString은 Unicode를 가진다. UTF8아니다.\n\n\n!! 결론\n사실 이런거 다 필요없이 깔끔한 라이브러리들 - CString, NSString, QString - 같은거 쓰거나, 그냥 C/C++를 쓰지말고 다른 언어를 쓰는게 훨신 편하다. 솔직히 C/C++에서 문자열 처리때문에 머리 아프다. 다국어 처리할 때 더 머리 아프다. 하기 싫다. 하지만 어쩔수 없이 해야할 때는 위에 적어 놓은 기초들을 잘 머리에 담아두면 왜 char* 부분에서 오류가 나는지 쉽게 알 수 있다.\n
!!! ▷ OutputDebugString("디버그 테스트"); \n디버그 모드에서 콘솔이 아닌 출력창에 문자열 출력\n&nbsp; &nbsp; &nbsp; &nbsp; / 문자열만 입력이 가능하기 때문에 숫자는 아스키코드로 바꿔주고 (itoa)\n&nbsp; &nbsp; &nbsp; &nbsp; / 자동줄바꿈이 되지 않기 때문에 뒤에 \sn을 넣어준다.\n\n!!! ▷ #pragma 전처리기를 이용해서 subsystem을 정해주는방법\n{{{\n#ifdef _DEBUG\n#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console" )\n#endif\n// printf("문자열"); - 문자열을 콘솔창에 표시\n\n#include "stdafx.h"\n...\n\nLONG APIENTRY MainWndProc( HWND hWnd, UINT message, UINT wParam, LONG lParam) \n{\n return TRUE;\n}\n\nint APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)\n{\n... \n return nResult;\n}\n}}}\n\n!!! ▷ AllocConsole();, FreeConsole(); 이용하기\n{{{\nLRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\n{\n switch(iMessage) {\n case WM_DESTROY:\n FreeConsole();\n PostQuitMessage(0);\n return 0;\n case WM_CREATE:\n AllocConsole();\n printf("Hello, World! in Win32 API Application...\sn");\n return 0;\n }\n return(DefWindowProc(hWnd,iMessage,wParam,lParam));\n// return g_pApp->MsgProc(hWnd, message, wParam, lParam);\n}\n}}}
| 헤더 |stdio.h |\n| 형태 |int printf (const char * format, ... ); |\n| 인수 |char *format 서식 문자열 |\n| 반환 |int 출력된 문자 수를 반환하며 오류가 발생하면 음수를 반환 |\n\nprintf() / sprintf() / fprintf() 함수 속의 퍼센트(%) 기호들은, "Format Specifier" 라고 하는데, 출력 형식을 지정한다.\n\n| !변환 문자열 | !의미 |\n| %o | 8진 정수 형식으로 출력 |\n| %d | 10진 정수 형식으로 출력 |\n| %ld | long형 10진 정수 형식으로 출력 |\n| %x | 16진 정수 형식으로 출력 |\n| %u | 부호 없는 10진 정수 형식으로 출력 |\n| %f | 소수점 형식으로 출력 |\n| %e %E | 지수 형식으로 출력 |\n| %g %G | %e와 %f 중 짧은 쪽, 소수점에 이어지는 0은 생략 |\n| %c | 문자 형식으로 출력 |\n| %S | 문자열 형식으로 출력 cf. %s인 경우 문자 1자만 출력 |\n\n출력 형식을 지정한 예\n| !변환 문자열 | !출력 | !설명 |\n| printf("%d", 123) |123 |표준 출력장치로 출력 |\n| printf("]", 123) |__123 |10진수를 5자리에 맞추어 출력, 123앞에 공백 2개 추가 |\n| printf("%-5d", 123) |123__ |10진수를 5자리에 맞추어 출력, 왼쪽 맞춤, 오른쪽에 공백 추가 |\n| printf("%f", 1.234567) |1.234567 |소수점 형식으로 출력 |\n| printf("O", 1.234567) |1.2346 |소쉄 이하 4자리 출력, 반올림 |\n| printf("%7.2f", 1.234567) |___1.23 |소숫점 포함해서 전체 7자리, 소수점 이하 2자리. 공백 3개가 앞 부분에 추가됩니다. |\n| printf("%S", "forum.falinux.com") |forum.falinux.com |문자열 형식으로 출력 |\n| printf(" S", "forum.falinux.com") |___forum.falinux.com |자릿수를 맞추기 위해 왼쪽에 공백을 넣어 문자열 출력 |\n| printf("S", "forum.falinux.com") |forum.falinux.com |문자열이 더 길면 그대로 출력 |\n| printf("%.10s", "forum.falinux.com") |forum.fali |문자열이 더 길면 잘라서 출력 |\n| printf("%-20s", "forum.falinux.com") |forum.falinux.com___ |문자열을 왼쪽 맟춤으로 하여 오른쪽에 모자르는 자리를 공백으로 메꿈 |\n| printf(".10S", "forum.falinux.com") |__forum.fali |전체 12자리로 10자리만 출력, 모자른 부분은 왼쪽에 공백 추가하여 출력 |\n
++++!!![>왕초보 영단어1]>\n''1강 일상속의 영어 단어''\n++++[2015.01.05.(목)]\n|!둔다 | !put it | |\n|집어 넣는다 |pit it |in |\n|올려 놓는다 |pit it |on |\n|내려 놓는다 |pit it |under |\n|옆에 둔다 |pit it |aside |\n|뒤에 둔다 |pit it |back |\n|거기에 둔다 |pit it |there |\n|여기에 둔다 |pit it |here |\n|치운다 |pit it |away |\n===\n\n===
http://taeyo.net/columns/View.aspx?SEQ=389&PSEQ=23&IDX=4 - WCF - IIS에 서비스 호스팅하기\nhttp://vstarmanv.tistory.com/215 - 너무나 간단한 웹서버 구축 - IIS7.5\nhttp://pyhu26.blogspot.kr/2012/10/wcf-iis_29.html#!/2012/10/wcf-iis_29.html - (WCF) IIS 설정하기 \n\n\n!!! WCF란\n분산 어플리케이션 개발과 플랫폼에 상관없는 높은 상호 운용성을 지원하는 어플리케이션을 쉽게 개발할 수 있도록 해주는 기반 기술로서, XML 웹 서비스(Web Service) 기반의 차세대 서비스 통신 프레임워크이다.\n\nWCF의 클라이언트 및 서비스는 기본적으로 SOAP을 사용하여 통신하며, 서비스의 메타데이터를 전달하기 위한 방식으로 WSDL을 사용한다.\n\ncf. SOAP( Simple Object Access Protocol ) - M/S, IBM 등 주요 밴더들이 주도하여 상호 운영성 문제를 해결하고자 만들어짐 XML과 HTML을 사용하여 플랫폼에 독립적으로 서비스 혹은 분산 객체를 엑세스 하는 방법을 정의 \n\ncf. WSDL - WSDL은 웹서비스 기술언어 또는 기술된 정의 파일의 총칭으로 XML로 기술된다. 웹 서비스의 구체적 내용이 기술되어 있어 서비스 제공 장소, 서비스 메시지 포맷, 프로토콜 등이 기술됨.\n\n\n!!! WCF의 ABC\nA. ''Address''\n&nbsp; &nbsp; 인터넷 상에서 서비스의 위치를 나타내는 URI(Uniform Resource Identifier)\n\nB. ''Binding''\n&nbsp; &nbsp; WCF Service를 Network를 통해 호출할 때 고려해야 할 다양한 요소들의 집합 \n&nbsp; &nbsp; 1. 어떤 프로토콜을 사용할 것인가? 예) TCP, HTTP, FTP, 등 \n&nbsp; &nbsp; 2. 데이터 포맷은 어떤 방식을 사용할 것인가? 예) 바이너리, 텍스트, MIME 등 \n&nbsp; &nbsp; 3. 네트워킹 보안을 적용할 것인가? 적용한다면 어떤 보안 방식을 취할 것인가? 예) SSL, 암호화 등 \n&nbsp; &nbsp; 4. 트랜잭션 처리, 비동기 전송 등의 진보된 기능을 사용할 것인가? \n \nC. ''Contract''\n&nbsp; &nbsp; WCF 서비스가 제공하는 기능들에 대한 인터페이스 \n\n\n!!! End Point\nABC의 요소를 합친 객체.\n반드시 하나 이상의 End Point를 가지며 End Point를 통해서만 서비스를 호출할 수 있음.\n\nWCF 서비스는 반드시 하나 이상의 종점을 갖는다. WCF에서는 클라이언트는 반드시 서비스의 종점을 통해서만 서비스를 호출할 수 있으므로 서비스의 종점을 서비스에 대한 관문 혹은 액세스 포인트 정도로 생각할 수도 있겠다. 실제로 WCF 클라이언트가 WCF 서비스를 호출하기 위해서는 서비스에 대한 종점 객체를 생성해야만 하며, 이 종점 객체는 서비스의 인터넷 주소가 무엇인지, 어떤 바인딩 구성을 사용하는지, 서비스의 계약은 어떠한 가를 모두 명시해야만 한다. \n\n서비스가 하나의 이상의 종점을 갖는다는 말은 곧 WCF 서비스가 2개 이상의 종점을 가질 수 있다는 말이 되겠다. 실제로 하나의 서비스가 HTTP 기반의 바인딩과 TCP 기반의 바인딩을 각각 사용하는 2개의 종점을 가질 수 있으며, HTTP 프로토콜을 사용하는 클라이언트는 HTTP 기반의 종점을 통해서 서비스를 호출하고, TCP 프로토콜을 사용하는 클라이언트는 TCP 기반의 종점을 통해서 서비스를 호출할 수 있다는 것이다. 이점이 WCF의 장점 중 하나이다. \n\n\n!!! 서비스 호스트와 클라이언트 \nWCF를 이용하여 서비스를 구현하면, 이 서비스는 WCF 호스트(host)에 의해 호스팅이 되어야만 클라이언트의 호출을 받을 수 있게 된다. WCF는 서비스가 실제로 클라이언트 호출을 받을 수 있도록 호스팅 환경을 완벽하게 갖추고 있으며, 이 호스팅 환경은 일반 닷넷 EXE 어플리케이션 혹은 IIS를 이용하여 호스팅 될 수 있다. WCF가 제공하는 호스트는 다중 쓰레드 풀(multi-thread pool)을 완벽하게 지원하기 때문에 개발자가 여러 클라이언트의 동시 호출(concurrent call)에 대해 고민하거나 염려할 필요가 전혀 없다. 개발자는 단순히 호스트 객체(ServiceHost 클래스)를 생성하고 Open 메쏘드를 호출하기만 하면 된다. WCF 런타임이 네트워크 포트(port)나 HTTP 프로토콜을 구성하여 클라이언트 메시지를 수신하기 시작할 것이고 수신된 클라이언트 호출은 쓰레드 풀의 쓰레드 중 한 쓰레드에 의해 WCF 서비스가 호출될 것이다. \n\nWCF 클라이언트가 서비스를 호출하는 것 역시 많은 부분 WCF 프레임워크의 도움을 받게 된다. 클라이언트는 서비스의 계약으로부터 서비스가 어떤 메쏘드를 제공하며 그 메쏘드의 매개변수, 반환 값(return value)에 대한 정보를 얻을 수 있다. WCF 런타임과 유틸리티는 서비스의 계약 정보로부터 서비스에 대한 프록시(proxy) 클래스를 생성할 수 있으며, 이 프록시 클래스는 웹 서비스 호출을 마치 로컬 메쏘드 호출과도 같이 간단한 작업으로 만들어 줄 수 있게 된다. \n\nWCF 클라이언트가 프록시를 생성하는 작업 외에 추가적으로 수행해야 할 것은, WCF 런타임이 적절히 서비스를 찾고 XML 메시지를 전송할 수 있도록 호출하고자 하는 서비스의 종점에 대한 정보를 제공하는 것이다. 다시 말해 서비스에 대해 어떤 주소와 어떤 바인딩을 사용해야 하는가를 WCF 런타임에게 알려주어야 하는 것이다. 정확한 주소가 있어야만 해당 서비스에게 메시지가 전달될 것이고, 메시지를 전달할 프로토콜, 보안 사용 여부 등이 서비스가 이해할 수 있는 것이어야 하므로 서비스가 제공하는 바인딩과 동일한 바인딩을 클라이언트가 사용해야 한다.\n
-. 현재 대부분의 MO 게임은 캐릭터 작업과 캐릭터 및 성별(남,녀)이 매칭된 형식\n\n-. C9은 캐릭터 선택한 후에 캐릭터를 커스터마이징으로 새로운 캐릭터를 만들어 낼 수 있을 정도의 커스터 마이징 항목을 제공.\n&nbsp; &nbsp; (MMO 형식의 커스터마이징)\n\n-. 드레곤네스트와 마영전의 경우에는 신장이나 얼굴 표정과 생상 변경 정도로 기본 캐릭터성에서 변경이 어려움.\n\n-. C9의 경우 남녀와 청순 그리고 섹세 정도등의 캐릭터성을 가지나 캐릭터가 실사적인 경우이며\n&nbsp; &nbsp; 마영전과 드레곤네스트의 경우에는 캐릭터성을 극도로 강조한 경우로 사실성에서 벗어난 경우.\n\n-. HG2의 캐릭터성이 사실성에 기반을 두는지 여부가 구성의 기준\n&nbsp; &nbsp; / 사실적, 실사풍의 캐릭터 -> C9과 같은 디데일한 커스터마이징 제공\n&nbsp; &nbsp; / 극도로 강조된 캐릭터 -> 마영전, 드레곤네스트와 같은 제한적인 커스터마이징 제공\n\n++++!!![파츠구분]\n| 캐릭터 장비 | C9| 머리 | 어깨 | 상의 | | 하의 | 장갑 | 신발 | 주무기|보조 무기 | |\n|~| 드레곤네스트(일반)| 머리 | | 상의 | | 하의 | 장갑 | 신발 | 무기|보조 무기 | |\n|~| 드레곤네스트(코스튬)| 머리 | | 상의 | | 하의 | 장갑 | 신발 | 무기|보조 무기 | |\n|~| 영웅전| 머리 | | 가슴 | 벨트 | 다리 | 손 | 발 | 무기|방패 | |\n|~| HG| 머리 | 어깨 | 상체 | 허리 | 다리 | 손 | 발 | 왼손 무기|오른손 무기 |X 3개 Set |\n|~| HG2(일반)| 머리 | 어깨 | 상의 | 벨트 | 하의 | 장갑 | 신발 | 주무기|보조 무기 | |\n|~| HG2(코스튬)| 머리 | 어깨 | 상의 | 벨트 | 하의 | 장갑 | 신발 | 주무기|보조 무기 | |\n| |\n| 장신구 | C9| 목걸이 | 귀걸이(1) | 팔찌 | 벨트 | 반지(2) | | | | | |\n|~| 드레곤네스트(일반)| 목걸이 | 귀걸이(1) | | | 반지(2) | 문장 | | | | |\n|~| 드레곤네스트(코스튬)| 목걸이 | 귀걸이(1) | | | 반지(2) | | 정령 | 날개 | 꼬리 | 데칼 |\n|~| 영웅전| | | | | 반지(2) | 장신구 |>|>|>|(귀걸이, 목걸이, 장신구, 징표 중 택 1) |\n|~| HG| 목걸이 | | 팔찌 | | 반지 | 엘릭시르(영약) | 코스튬 <br> _가면 | 코스튬 <br> _전신 방어구 | | |\n|~| HG2(일반)| 목걸이 | 귀걸이(1) | 팔찌 | | 반지(2) | | | | | |\n|~| HG2(코스튬)| 목걸이 | 귀걸이(1) | 팔찌 | | 반지(2) | | | | | |\n&nbsp; &nbsp; cf. 영웅전의 장신구 ; 귀걸이, 목걸이, 장신구, 징표 중 택 1\n===\n\n++++!!![커스터마이징]>\n++++[C9 ; 작업과 캐릭터 매칭]\n| 기본 | 캐릭터 이름| |\n|~| 캐릭터 작업|헌터 - 남 <br> 샤먼 - 여 <br> 위치블레이드 - 여 <br> 파이터 - 남 |\n|~| 얼굴선택|헌터(샤프남, 강인남, 야성남) <br> 샤먼(창순녀, 도도녀, 발랄녀) <br> 위치블레이드(섹시녀, 냉혈녀, 매혹녀) <br> 파이터(강인남, 터프남, 정열남) |\n|~| 얼굴스타일|1번 얼굴 스타일 <br> 2번 얼굴 스타일 <br> 3번 얼굴 스타일 |\n|~| 피부 색상| |\n| 얼굴 |>|눈크기 조정, 눈썹 조정, 코높이 조정, 코넓이 조정, 입크기 조정, 입술 두께 조정, 턱 조정, 아래턱 조정, 광대뼈 조정, 입술 색상, 눈동자 색상 |\n| 스타일 |>|헤어선택, 헤어 생상, 헤어 길이1, 헤어 길이2, 헤어 길이3, <br> 문신 선택, 문신 크기, 문신 위치1, 문신 위치2 |\n| 신체 |>|전체, 머리, 어깨, 가슴(여자 캐릭터만), 허리, 팔, 다리, 손, 발 |\n===\n\n++++[드레곤네스트]\n&nbsp; &nbsp; / 머리(형태와 색상 변경), 얼굴(표정과 생상 변경), 눈(색상 변경), 상체(상의 디자인 변경), 하체(하의 디자인 변경), 장갑(장갑 디자인 변경), 부츠(신발 디자인 변경)\n===\n\n++++[영웅전 ; 작업과 캐릭터 매칭]\n&nbsp; &nbsp; / 캐릭터 이름, 키(캐릭터 신장 설정), 가슴(캐릭터 가슴 크기 설정), 헤어 스타일 선택, 피부색 선택, 길이(?), 색상 선택(헤어, 끈, 장식), 표정(얼굴 표정 선택)\n===\n\n++++[HG]\n| 기본 |>| 캐릭터 이름|\n|~| 성별 |남/ 여 |>| cf.수호기사 남/ 수호기사 여 |\n|~| 직업 |Faction Class | Templar | Hunter | Cabalist |\n|~|~|Character Race | Guardian 수호기사, Blademaster 검기사, Exemplar 성기사 | Summoner 악마술사, Evoker 암흑술사, Metamorph 변신술사 | Engineer 기술요원, Marksman 전투요원, Recon 정찰요원 |\n| 신체 |>| 얼굴 |>|>|1 ~ 12가지 |\n|~|>| 머리모양 |>|>|1 ~ 12가지 |\n|~|>| 수염 |>|>|1 ~ 14가지 |\n|~|>| 피부색 |>|>|6X6 = 36가지색 팔레트 형식, 선택 |\n|~|>| 머리색 |>|>|6X6 = 36가지색 팔레트 형식, 선택 |\n|~|>| 키 |>|>|슬라이드바 형식으로 설정 |\n|~|>| 체격 |>|>|슬라이드바 형식으로 설정 |\n|~|>|>|>|>|▷ 무작위 설정 지원 |\n===\n\n+++[HG2 ; 직업과 캐릭터 매칭]\n| 기본 | 캐릭터 이름|\n|~| 캐릭터 직업|수호기사 - 남 <br> 검기사 - 여 <br> 전투요원 - 남 <br> 기술요원 - 여 <br> 암흑술사 - 남 <br> 악마술사 - 여 |\n|~| 얼굴선택|수호기사(샤프남, 강인남, 야성남) <br> 검기사(청순녀, 도도녀, 발랄녀) <br> 기술요원(섹시녀, 냉혈녀, 매혹녀) <br> 전투요원(강인남, 터프남, 정열남) <br> 암흑술사( ... ) <br> 악마술사( ... ) |\n|~| 얼굴스타일|1번 얼굴 스타일 <br> 2번 얼굴 스타일 <br> 3번 얼굴 스타일 |\n|~| 피부 색상| |\n| 얼굴 |>|눈크기 조정, 눈썹 조정, 코높이 조정, 코넓이 조정, 입크기 조정, 입술 두께 조정, 턱 조정, 아래턱 조정, 광대뼈 조정, 입술 색상, 눈동자 색상 |\n| 스타일 |>|헤어선택, 헤어 생상, 헤어 길이1, 헤어 길이2, 헤어 길이3, <br> 문신 선택, 문신 크기, 문신 위치1, 문신 위치2 |\n| 선체 |>|전체, 머리, 어깨, 가슴(여자 캐릭터만), 허리, 팔, 다리, 손, 발 |\n===\n\n===\n\n\n\n\n\n\n\n
@ ChosunBix, 2015.03.07.(토), 0에서 1 창조… 온리 원이 돼라 ( http://biz.chosun.com/site/data/html_dir/2015/03/06/2015030601940.html )\n\n피터 틸(Peter Thiel) ; 실리콘밸리를 움직이는 파워그룹 ‘페이팔 마피아’의 대부. 손꼽히는 스타트업 성공 사업가이자 벤처캐피탈 투자자.\n\n책 ; 제로 투 원/ 피터 틸,블레이크 매스터스 공저/이지연 역\n...\n\n―독점이 사회에 어떻게 기여하는지 좀 더 설명을 부탁 드립니다.\n\n“좋은 독점은 사회에 풍족함을 제공합니다. 테슬라는 실제로 사람들이 운전해보고 싶어하는 첫 전기차를 개발했어요. 새로운 시장을 만들고 독점적 지위를 갖게 됐습니다. 사람들은 이런 혁신을 통해 기존에는 없던 새 혜택을 누리고 있습니다.\n\n그러나 나쁜 독점은 항상 부족함을 유발합니다. 사회에 돌아가는 혜택의 공급을 제한한다는 겁니다. 예컨대 샌프란시스코에서는 4층 이상 건물을 지을 때 ‘지역개발규제법’의 영향을 받습니다. 재개발을 하거나 새집을 지으려면 법의 허락을 받아야만 합니다. 그러다 보니 부족함이 양산됐고, 결국 부동산 가격은 계속 올랐습니다. 그리고 그 혜택은 기존 빌딩 주인들이 독식했습니다. 저는 우리가 이런 형태의 독점에 항상 주의해야 한다고 생각합니다.”\n\n!!!너무 작다 싶을 만큼 작게 시작하라\n―독점 기업이 되려면 어떻게 해야 할까요?\n\n“방법은 세 가지입니다. ''먼저 작게 시작해서 독점하세요.'' 너무 작다 싶을 만큼 작게 시작해야 합니다. 장악하고 지배하기 쉽기 때문입니다. 신생 기업에 완벽한 표적 시장은 경쟁자가 없거나 아주 적고, 특정한 사람이 모여 있는 시장입니다. 처음부터 1억명 시장에 대해 이야기한다면 완전히 빨간불입니다. 그만큼 경쟁이 치열할 테고, 이는 곧 이윤이 ‘0’이 된다는 말이니까요.\n\n둘째, 그렇게 해서 ''일단 시장을 장악하고 난 뒤 몸집을 키우세요.'' 제프 베조스가 아마존을 처음 세웠을 때는 책을 팔았습니다. 그리고 가장 비슷한 시장부터 공략했죠. 음악 CD, 비디오, 소프트웨어를 거쳐 지금은 만물상이 됐습니다.\n\n셋째는 ''파괴하려고 하지 말라는 겁니다.'' 신생 기업은 파괴에 대한 강박을 갖고 있습니다. 파괴적 혁신(disruptive innovation)이라는 유행어 때문입니다. 그러나 파괴에 집착하면 장애물이 늘어납니다. 사람들의 이목이 집중되고 싸움을 계속해야 합니다. 설령 파괴를 하더라도 이를 겉으로 드러내지 마세요. 신생 기업은 ‘창조’라는 활동 자체가 훨씬 더 중요합니다. 가능하면 경쟁은 피할수록 좋습니다. 경쟁은 회사를 약하게 만듭니다.”\n
\n* http://blog.naver.com/ntscafe/221034285044 - 부동산 보유세, 주택 보유시 내는 세금은? (국세청 블로그)\n* http://www.hamanchoysj.pe.kr/9/menu5.htm - 염수재, 지방, 축문 쓰기\n* http://www.yonghwa.or.kr/bbs/skin/ggambo7002_board/print.php?id=b_story_4&no=124 - 광명진언이란?\n\n\n+++[ #. 돈, Don't Worry (2017.05.17. 자산 관리자 유수진) ]\n<br>\n<html>\n<span style="font-size: 12px;"> <b> 투자는 게임이다! (머니 게임 룰) </b> </span>\n</html>\n&nbsp; &nbsp; &nbsp; &nbsp; 1.경기 변동 사이클에 주목하라\n&nbsp; &nbsp; &nbsp; &nbsp; 2.금융 위기는 반복해서 온다\n\n<html>\n<span style="font-size: 12px;"> <b> 부자들의 돈 버는 찬스 ; 금융위기 ≒ 투자자들에게는 기회 </b> </span>\n</html>\n&nbsp; &nbsp; &nbsp; &nbsp; -. 위기를 예측하고, 자금을 준비\n\n<html>\n<span style="font-size: 12px;"> <b> 투자 타이밍 </b> (금융위기를 예측하기 위한 지표) </span>\n</html>\n&nbsp; &nbsp; &nbsp; &nbsp; 1.부자들의 자금 흐름을 파악하라 (참고)\n&nbsp; &nbsp; &nbsp; &nbsp; 2.외국계 자금 흐름을 파악하라 (참고)\n&nbsp; &nbsp; &nbsp; &nbsp; 3.GDP(국내총생산)를 파악하라 ; GDP = 가계소비 + 기업투자 + 정부지출 + 순수출(수출-수입)\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / OECD, IMF, 기획재정부, 한국은행, KDI(한국개발연구원), 민간 경제 연구원\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / 검색 키워드 ; GDC 증가률, 경제 성장률\n\n<html>\n<span style="font-size: 12px;"> <b> 투자 원칙 </b> </span>\n</html>\n&nbsp; &nbsp; &nbsp; &nbsp; 1.아는 것만 해라?!\n&nbsp; &nbsp; &nbsp; &nbsp; 2.주도적으로 해라\n\n<html>\n<span style="font-size: 12px;"> <b> 주식 </b> </span>\n</html>\n&nbsp; &nbsp; &nbsp; &nbsp; -. top-down 방식 ; 경기 예측 ⇒ 유망 산업 ⇒ 기업 선택\n&nbsp; &nbsp; &nbsp; &nbsp; -. bottom-up 방식 ; 유망기업 선택 (전문가들의 방식 ≒ 일반 투자자에게는 추천하지 않음)\n&nbsp; &nbsp; &nbsp; &nbsp; -. 기본적ㆍ기술적 분석이 가능할 때 투자\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / 기술적 분석 ; 1차 목표가 설정 ⇒ 손해를 감수하고 파는 손절가 설정\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / 시장 & 회사 종목 리스크 존재\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / 시장 상황만 고려한 투자 ; 인덱스 펀드, 주식형 펀드, ETF(상장지수펀드)\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 예, 하반기 경기 호황 예상 ; 경기 흐름에 맞춰 매입 ⇒ 장기 투자\n&nbsp; &nbsp; &nbsp; &nbsp; -. 안전한 기업에 투자\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / 개발도상국의 주식을 사둬라\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / 지속성장 기업의 주식을 사둬라\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / 유망한 콘텐츠 보유 기업에 주목 ! (예, 디즈니)\n\n<html>\n<span style="font-size: 12px;"> <b> 부동산 </b> </span>\n</html>\n&nbsp; &nbsp; &nbsp; &nbsp; -. 나만의 기준을 가져라\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / 지역 탐방\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / 입지가 중요 \n&nbsp; &nbsp; &nbsp; &nbsp; -. 금융위기, 부동산 침체기가 올 때까지 기다림\n\n<html> <HR SIZE=2 width="100%"> </html>\n===\n\n\n<br>
게리 클라인 지음| 김창준 옮김 | 알키 | 2015년 01월 15일 출간 \n\n저자 : 게리 클라인 (Gary Klein)\n40년 이상 인지과학 분야를 연구한 자연주의적 의사결정론의 창시자이며, 노벨상 수상자인 대니얼 카너먼Daniel Kahneman과 함께 의사결정이론의 양대 산맥으로 꼽힌다. 1969년 피츠버그 대학교에서 실험심리학으로 박사학위를 받은 후, 경력 초기엔 오클랜드, 윌버포스 대학교에서 교수로 근무했고, 경력 중기엔 미 공군의 연구 심리학자, 백악관 상황실 재설계의 주요 구성원 등 정부 일을 주로 했다. 1978년부터 2005년까지는 자신의 이름을 내건 클라인 어소시어츠Klein Associates라는 연구 개발 회사를 설립해, 인간이 실질적으로 어떻게 의사결정을 내리는지에 대한 모델을 연구했다. 현재 매크로코그니션MacroCognition LLC의 수석 과학자이며, 미국심리학회 선임연구원으로 활동하고 있다. 특히 인간공학 분야에 기여한 공로를 인정받아 ‘Jack A. Kraft’ 혁신가 상을 받았다. \n\n저술한 책으로는 《인튜이션Sources of Power: How People Make Decisions》, 《직관의 힘The Power of Intuition》, 《작업하는 정신Working Minds: A Practitioner’s Guide to Cognitive Task Analysis》(공저), 《이기는 결정의 제1원칙Streetlights and Shadows: Searching for the Keys to Adaptive Decision Making》 등이 있다. \n...\n\n40년 넘게 '사람이 어떻게 사고하는지'를 연구해온 인지과학자 게리 클라인(Gary Klein·71) 박사는 통찰(insight)이 빛났던 역사적 사례 120건을 연구하고 분석했다. 신문과 책, 인터뷰를 통해 수집한 과학적 발견, 발명, 경영의 사례다.\n\n그는 그런 통찰이 ''촉발''된 계기를 분석했다. 그것은 다섯 가지로 범주화할 수 있다. @@color(#04f): 연결, 우연의 일치, 호기심, 모순, 창의적 절망@@이 그것이다. 그리고 그 결과를 책 '통찰, 평범에서 비범으로'에 담았다.\n\n
원문 요약 ; http://www.venturesquare.net/540560 - 떠오르는 트렌드..O2O는 무엇일까요\n\n!!! O2O는 역쇼루밍 현상\n쇼루밍(Showrooming)이라는 말 들어 보셨나요? 백화점이나 마트에서 상품을 구경한 후, 똑같은 제품을 값싼 온라인에서 사는 현상을 뜻하는데요.\nO2O는 이에 반하는 ‘역쇼루밍’ 트렌드를 만들어 내고 있는 비즈니스 모델입니다.\n쉽게 말하면 온라인이나 모바일에서 대금결제를 한 후, 오프라인에서 실제 서비스와 물건을 받는 소비형태를 뜻합니다.\n\n\n!!! O2O, 중국에서 떠오르기 시작한 새로운 트렌드\n도대체 지금 와서 새삼스럽게 '온라인·모바일'에서 상품을 사고, 현장에서 물건을 찾아가는 이 비즈니스 모델이 주목받는 이유는 무엇일까요?\nO2O가 주목받는 가장 큰 이유는 중국에서 빠르게 성장하고 있는 서비스 모델이기 때문입니다.\n\nKTB 투자증권에 따르면 중국 O2O 서비스 시장의 크기는 올해 ‘213조원’ -_-;;;;;에 이릅니다. B2C 온라인 쇼핑이 606조원 규모로 추산되니 약 1/3정도 됩니다.\n\n더군다나 이 O2O 비즈니스 모델은 ‘게임’에 이어 ‘메신저’와 찰떡궁합인 서비스로 텐센트가 적극적으로 밀어붙이고 있는 상황이라는 점도 주목받고 있습니다.\n\n아이비컨(iBeacon)과 같은 위치정보 서비스의 발전, 페이팔과 같은 결제서비스의 발전으로 새로운 이용자는 더욱 간편한 소비를 할 수 있고 판매자는 다양한 프로모션의 기회를 가지게 된다는 장점이 있습니다.\n\nO2O 플랫폼에서 근처에 있는 소비자들의 정보를 알려주면 그에 적합한 프로모션을 즉각 시행할 수 있고, 단골들과 지속적으로 소통하며 충성도를 올릴 수 있습니다.\nO2O 비즈니스 모델의 최대 장점은 오프라인 매장 운영자가 다수의 소비자들과 소통할 수 있는 ‘의사소통’ 비용을 크게 줄여 준다는 점입니다.\n\n\n!!! 한국에서 이 같은 서비스가 가능할까?\n'시럽' 서비스 (SK플래닛) ; 스마트월렛이라는 포인트카드 모음 앱을 바탕으로 O2O 플랫폼\n"결국 온라인·오프라인 커머스의 경계를 허무는 것으로 ‘모바일’이 등장했고, 모바일은 죽어가는 오프라인 커머스를 살릴 기회가 될 것" (서진우 SK 플래닛 대표)\n\n'카카오택시' 서비스 (다음카카오); 카카오톡이라는 강력한 플랫폼에 다음이 확보한 방대한 광고주 DB, 지도서비스, 실패를 통해 쌓은 풍부한 사업경험(ㅜㅜ) 등이 시너지를 낼 수 있을 것으로 보인다.\n\n\n!!! O2O? Mobile to Offline 이 더 적합한 용어 아닐까\nOnline to Offline보다는 차라리 M2O(Mobile to Offline)가 더 적합한 용어라고 생각하는 이유는 \n모바일 기술의 극적인 발전으로 가능해진 비즈니스 모델이기 때문이다. (중국의 예)\n
무선 충전의 기본 원리는 19세기 영국 물리학자 패러데이가 발견한 '전자기유도(電磁氣誘導)' 현상이다. 간단히 말해 전선에 전류가 흐르면 주변에 자기장이 생기고, 이 자기장의 에너지가 가까운 곳에 있는 다른 전선에 전류를 발생시키는 물리학 원리이다.\n\n▶ 원문 정리 ; 말 많은 휴대폰 무선충전 오해와 진실, 2013.04.29. \n( http://www.zdnet.co.kr/news/news_view.asp?artice_id=20130429165644 )\n\n무선충전 방식은 크게 자기유도 방식과 공진유도 방식으로 나뉜다. \n두 방식의 차이점은 크게 단말기과 충전기 간 접촉 여부로 구분한다. 현재 상용화된 무선충전 기술은 모두 자기유도방식이다. 삼성전자 갤럭시S4도 자기유도 방식 무선충전 기술 중 하나인 WPC의 'Qi(치)' 표준을 지원한다.\n\n''자기유도 방식''은 전력 송신부 코일에서 자기장을 발생시키면 이 자기장이 수신부의 2차 코일에 유도돼 전류를 공급하는 전자기 유도 원리를 이용한 기술이다. 하지만 단말기가 충전기로부터 멀리 떨어지게 되면 충전이 불가능하다. \n\n이같은 단점을 보완할 수 있는 기술이 공진유도 혹은 ''자기공명 방식''으로 불리는 기술이다. 송신부 코일에서 공진주파수로 진동하는 자기장을 생성해 동일한 공진 주파수로 설계된 수신부 코일에만 에너지가 집중적으로 전달되도록 하는 것이 공진유도 방식의 원리다.\n \n이 방식은 무선 충전기 위에 단말기를 아무렇게나 올려놓거나 2m 정도 떨어져 있어도 충전이 가능하고 하나의 무선 충전기에 여러 대의 단말기를 올려놓아도 동시에 충전할 수 있어 사용 편의성 측면에서 획기적인 개선이 가능할 것으로 보고 있다.
<html>\n<span style="background:#E2E2ff ; font-family:돋움; font-size: 16px;"> <b> Windows 7 기반 컴퓨터에서 사용할 수 있는 메모리가 설치된 메모리보다 적을 수 있음 &nbsp; &nbsp; </b> </span>\n</html>\n출처 ; https://support.microsoft.com/ko-kr/help/978610/the-usable-memory-may-be-less-than-the-installed-memory-on-windows-7-b#!/ko-kr/help/978610/the-usable-memory-may-be-less-than-the-installed-memory-on-windows-7-b\n\n!!! 증상\nWindows 7을 실행하는 컴퓨터에서는 사용할 수 있는 메모리(RAM)가 설치된 메모리보다 적을 수 있습니다.\n \n예를 들어 32비트 버전 Windows 7에서는 4GB의 메모리가 설치된 컴퓨터에서 사용할 수 있는 시스템 메모리가 3.5GB뿐인 것으로 보고할 수 있습니다.\n \n64비트 버전 Windows 7에서는 8GB의 메모리가 설치된 컴퓨터에서 사용할 수 있는 시스템 메모리가 7.1GB뿐인 것으로 보고할 수 있습니다.\n \n''참고'' 위의 예에서 언급한 사용할 수 있는 메모리의 양은 정확한 수치가 아닙니다. 사용할 수 있는 메모리의 양은 총 실제 메모리에서 "하드웨어 예약" 메모리를 빼는 방식으로 계산됩니다.\n\n!!! Windows 7의 실제 메모리 제한\n아래 표에는 각 Windows 7 버전의 실제 메모리 관련 제한이 나와 있습니다. \n|버전 |32비트 Windows의 제한 |64비트 Windows의 제한 |\n|Windows 7 Ultimate |4GB |192GB |\n|Windows 7 Enterprise |4GB |192GB |\n|Windows 7 Professional |4GB |192GB |\n|Windows 7 Home Premium |4GB |16GB |\n|Windows 7 Home Basic |4GB |8GB |\n|Windows 7 Starter |2GB |2GB |\n\nWindows 릴리스의 메모리 제한과 관련된 자세한 내용을 알아보려면 다음 링크를 클릭하여 Microsoft 웹 사이트의 문서를 확인하십시오. \nWindows 릴리스의 메모리 제한 (https://msdn.microsoft.com/ko-kr/library/aa366778(vs.85).aspx)\n\n\n
<html>\n<span style="background:#E2E2ff ; font-family:돋움; font-size: 16px;"> <b> 원격 데스크톱 접근 사용자 계정에 세션수 변경(Windows 2008 R2) &nbsp; &nbsp; </b> </span>\n</html>\n\n윈도우 서버 2008 R2에서 원격 데스크톱으로 여러 명이 동시에 접속할 수 있도록 설정하는 방법\n \n▶ 시작 - 관리 도구 - 원격 데스크톱 서비스 - 원격 데스크톱 세션 호스트 구성\n\n#. 서버 구성; (오른쪽 클릭) RDP-Tcp 속성 > 네트워크 어댑터\n&nbsp; &nbsp; &nbsp; &nbsp; 최대 연결 수 => 설정 \n\n#. 설정 편집\n&nbsp; &nbsp; &nbsp; &nbsp; 사용자당 세션을 하나로 제한 => 더블 클릭\n&nbsp; &nbsp; &nbsp; &nbsp; 사용자당 세션을 하나로 제한 => 체크 풀기 ; 예 > 아니오 변경\n\n\n<html>\n<span style="background:#E2E2ff ; font-family:돋움; font-size: 16px;"> <b> 원격 데스크톱 복사 붙여넣기가 안되는 현상 &nbsp; &nbsp; </b> </span>\n</html>\n\n원격컴퓨터에서 복사한 내용이 로컬컴퓨터에 붙지 않고, 로컬컴퓨터에서 복사한 내용이 원격컴퓨터에 붙지 않는 현상\n\n/ 원인: 원격컴퓨터에서 rdpclip.exe이 제대로 동작하지 않음\n\n/ 해결방법\n&nbsp; &nbsp; 작업관리자에서, rdpclip.exe를 끄고 다시 시작한다. \n&nbsp; &nbsp; • 프로세스 탭 -- rdpclip.exe 클릭 -- <프로세스 끝내기(E)>\n&nbsp; &nbsp; • "rdpclip.exe을(를) 끝내시겠습니까?" -- <프로세스 끝내기>\n&nbsp; &nbsp; • 응용 프로그램 탭 -- <새 작업(N)...>\n&nbsp; &nbsp; • "새 작업 만들기" -- 열기(O): rdpclip √ Enter\n\n
입력도구모음은 ctfmon.exe파일이 담당\n\n#. regedit 추가 ; HKEY_LOCAL_MACHINE\sSOFTWARE\sMicrosoft\sWindows\sCurrentVersion\sRun\n&nbsp; &nbsp; &nbsp; &nbsp; / 오른쪽창에서 마우스오른버튼 클릭/새로만들기/문자열값 을 하고 이름을 임의대로 정하고 \n&nbsp; &nbsp; &nbsp; &nbsp; / 값에 c:\swindows\ssystem32\sctfmon.exe 라고 입력
무료 온라인 강의를 뜻하며 'Massive Open Online Course'의 약자다.\n'유엔미래보고서'는 오는 2030년에는 무료 강의 앱의 확산으로 대학이 사라질 것이라는 예측을 내놓기까지 했다.\n스테파니 미셸 하버드대 총장은 무크에 대해 '지진과 맞먹는 변화'라고 말했다. '무크'가 미래 교육 시장의 지각변동을 예고한단 것. 전문가들은 앞으로 '정보를 아는 것(Know-how)'에서 '정보를 이용하는 것(Know-where)'으로의 이동은 한층 가속화될 것이라고 내다보고 있다.\n\n| 강의 앱 | 추천 강의 | 언어 | 강의자 | 웹사이트 주소 |h\n| 스누온(서울대) | 경제원론 | 한국어 | 서울대학교 이준구 교수 | snuon.snu.ac.kr |\n| 유다시티 | 스타트업 키우기 | 영어 | 스티브 블랭크 스탠퍼드대 교수 | www.udacity.com |\n| 코세라 | 머신러닝 (빅데이터) | 영어 | 스탠포드 대학교 Andrew Ng | www.coursera.org |\n| OPEN KU (고려대) | 생명공학과 미래 사회 | 한국어 | 고영규 고려대 생명과학부 교수 | open.korea.ac.kr |\n| 대학공개강의 | 심리학의 이해 | 한국어 | 이화여대 양윤 교수 | www.kocw.net |\n| 유데미 | Change and Innovation Management | 영어 | Change and Innovation Management | www.udemy.com |\n\n
원문 ; 확률형아이템 자율규제안, 추후 과제는? ( http://www.zdnet.co.kr/news/news_view.asp?artice_id=20150506105602 )\n▷ 요약\n\n확률형 아이템 또는 캡슐형 유료 아이템이란 뽑기처럼 이용자가 그 아이템을 구입해 열어보기 전 까지 아이템의 내용물 및 성능, 효과 등을 알 수 없는 상품을 말한다. 운이 좋으면 구하기 힘든 레어 아이템을 얻을 수 있어 많은 이용자들이 해당 상품을 구매한다. \n\n논란이 되는 것은 이 확률형 아이템의 구성 및 확률이 공개되지 않는다는 점이다. 일각에서는 아이템 구매 당사자가 해당 상품에 대해 정보를 제공받지 못한다면 이는 불공정한 거래라고 주장한다. 소비자는 구입 물품을 선택할 때 필요한 정보를 제공받을 권리가 있다는 것이다.\n\n이에 대해 다른 쪽에서는 국산 게임에만 확률형 아이템의 확률 및 구성을 공개하도록 강제하는 것은 해외 게임과의 역차별 문제를 낳을 수 있으며 게임 사업자의 자율성을 침해할 수 있다고 반박해 왔다. \n\n\n■ '''가챠 시스템’(Gacha System) 이란'' (∵ 네이버 게임용어사전)\n게임에서 어떠한 아이템이 뽑힐지 알 수 없는 ‘랜덤박스’(Random Box) 아이템을 구입하는 시스템을 말한다. 만약 운이 좋다면 구매한 가격 대비 가치가 높은 아이템을 획득할 수 있는 반면, 운이 나쁘다면 구매한 가격 대비 가치가 낮은 아이템을 획득할 가능성도 있다.\n\n가챠 시스템을 이용하면 원하는 아이템이 100% 나온다는 보장이 없다.\n\n가챠 시스템의 ‘가챠’라는 용어는 일본의 캡슐 토이(Capsule Toy) 자동 판매기 가샤폰(ガシャポン)과 동의어로 쓰이는 가챠폰(ガチャポン)에서 유래한 말이다. 다수 상품이 들어있는 자판기에 동전을 넣고 손잡이를 돌려 캡슐을 뽑는 가챠폰의 시스템을 따서 가챠 시스템이라는 용어가 정착됐다.\n\n가챠 시스템은 상품 자체를 구매하는 게 아니라 상품을 뽑을 기회를 구매하는 것이기 때문에 소비자는 원하는 것을 얻기 위해서는 반복 구매를 할 수밖에 없다. 이 때문에 국내에서는 사행성을 조장하는 것이 아니냐는 논란이 끊이질 않고 있다. 실제로 마비노기, 메이플 스토리, 카운터 스트라이크 온라인 등 국내 온라인 게임에서는 주로 이벤트 아이템 판매에서만 가챠 시스템(랜덤 박스)을 활용하는 것으로 자율 규제를 적용하기도 했다.\n\n가챠 시스템이 특히 많이 사용되는 게임 장르로는 모바일 카드 배틀(Card Battle) 게임이 손꼽힌다.\n\n가챠 시스템의 발전된 형태로는 ‘컴플리트 가챠’(Complete ガチャ, 수집형 뽑기), 일명 ‘컴프 가챠’가 있다. 이는 오직 뽑기로 얻을 수 있는 상품을 모아서 더욱 희귀한 상품을 뽑는 시스템으로, 일본의 카드 배틀 게임에서 굉장히 많이 사용되었다. 다만 이 시스템은 일본에서조차 사행성 논란이 거세져 결국 2012년, 일본 소비자청이 게임 업계에 경고 조치를 취하면서 사실상 사장된 시스템이 되었다.
앱(App) 이란 Application의 약자로 응용 소프트웨어의 총칭으로 운영 체제에서 실행되는 응용 프로그램입니다.\n\n!!! 모바일 웹\n-. 위키피디아의 정의 ; 모바일 디바이스의 브라우저를 통해서 접속하는 서비스를 총칭하는 의미\n&nbsp; &nbsp; / 모바일 디바이스로 접속하는 서비스에 가까우며, \n&nbsp; &nbsp; / 사용자가 모바일 디바이스와 인터넷 브라우저를 통해서 이용할 수 있는 웹 서비스(또는웹콘텐츠)를 의미한다. 쉽게 표현하자면 스마트폰의 브라우저 주소창을 통해 접속하는 웹서비스이다.\n\n!!! 웹앱\n-. 위키피디아의 정의 ; 웹브라우저를 통해서 실행되는 응용 프로그램을 총칭하는 의미\n&nbsp; &nbsp; / 모바일 디바이스 뿐만 아니라 기존 PC 환경까지 포함하는 넓은 의미의 H/W 접속을 통해 사용하는 응용 프로그램(application S/W)를 뜻하고\n&nbsp; &nbsp; / 모바일 디바이스의 웹 브라우저 안에서 동작하면서터치와 관련된 사용자 경험(UX)과 기능을 제공하고 네이티브 앱과 모양이 유사한 웹 응용프로그램을 의미한다.\n\n-. "앱"의 발전 맥락에서 애플의 "웹앱" 정의 ; 스마트폰의 멀티터치 기능과 함께 이용할 수 있으며 홈화면에서 웹클립 아이콘을 등록해서마치 네이티브 앱의 사용자경험과 동일하게 제공해주는 웹 응용프로그램이라고 정의\n-. 안드로이드 OS 진영의 웹앱 정의 ; 안드로이드 OS에 앱을 어떻게 배포하는 지의 관점에서 웹앱을 정의. 배포하는 방법은 첫번째로 클라이언트 사이드 앱(네이티브 앱인 *.apk)형태가 있고, 두번째로 웹표준을 사용해서 브라우저에서 실행시키는 웹앱이 있다고 설명하고 있다. 즉, 안드로이드 진영에서도 웹앱의 개념은 브라우저에서 실행하는 HTML5로 작성된 콘텐츠를 말하고 있다.\n\n\n■ ''웹은 플랫폼이다, 웹앱 확산 가속''\n\n원문 ; MS 새 브라우저가 웹 생태계에 던진 메시지 ( http://www.zdnet.co.kr/news/news_view.asp?artice_id=20150430142412 )\n▷ 요약\n\n마이크로소프트(MS)가 브라우저 세대 교체를 선언했다. 인터넷 익스플로러(IE)를 명맥만 유지시키고 차세대 브라우저인 엣지(코드명: 스파르탄)를 전진배치했다. 종속적인 웹 기술을 모두 걷어낸 엣지를 윈도10 기본 브라우저로 투입하는 등 향후 IE보다 엣지에 무게 중심을 둔 브라우저 전략을 실행해 나갈 계획이다. \n\n이전에는 OS에 프로그램을 설치해야 쓸 수 있던 애플리케이션들이 웹기반으로 전환되는 경우가 늘고 있다. OS가 하던 플랫폼 역할을 웹이 대체하는 모습이다...\n문서작성을 위해 오피스SW 패키지를 설치하지 않아도 구글 닥스나 MS온라인 오피스를 이용해 쉽게 문서 작성과 편집이 가능해 진 것을 생각하면 이해가 쉽다. \n\n웹 앱의 최대 강점은 사용자 입장에서 어떤 디바이스를 사용하더라도 모두 접근이 가능하다는 점이다. 웹 앱은 디바이스나 운영체제에 대한 종속성이 없기 때문에 접근성을 크게 높일 수 있다.\n\n개발자 입장에서도 매력적이다. 기존 네이티브 앱에선 다양한 디바이스 환경에 맞추기 위해 디바이스 플랫폼 마다 서로 다른 언어로 개발해야 했다면 웹 앱에서는 네이티브처럼 개발 소스를 많이 가져가지 않아도 된다. 또 모든 플랫폼에 동일한 업데이트 및 정책을 적용할 수 있다는 장점도 있다. 네이티브 앱은 플랫폼 별로 배포 환경은 물론 배포 타이밍도 다를 수 밖에 없다. 하지만 웹 앱은 사용자가 애플리케이션을 로딩할 때 바로 새로운 업데이트와 정책이 적용된 상태로 서비스를 제공할 수 있다.\n\n
!!! 개요\nHTML이란 웹에서 문서를 출력할때 사용하는 일종의 표현 규격이다.\nHTML 문서는 꺽쇠(<, >)로 이루어진 태그로 구성되어있으며 태그는 속성을 가질 수 있다.\n\n\n!!! 기본 태그 작성법\nHTML 문서에서 기본 태그는 아래처럼 작성한다\n{{{\n<태그>내용</태그>\n}}}\n단, 이때 태그는 연 순서대로 닫아야 한다\n{{{\n<태그1>내용1</태그1> (O)\n<태그2><태그3>내용2</태그3></태그2> (O)\n\n<태그2><태그3>내용2</태그2></태그3> (X)\n}}}\n<html>\n<UL> \n <LI> &lt; ul &gt; &lt; ol &gt; &lt; dl &gt; 태그 ; 목록을 작성\n <uL>\n <li> &lt; ul &gt; 태그는 unordered list의 약자로, 숫자나 알파벳 등 순서가 필요 없는 목록을 작성\n <li> &lt; ol &gt; 태그는 ordered list의 약자로, 숫자나 알파벳 등 순서가 있는 목록을 작성\n <li> &lt; dl &gt; 태그는 definition list의 약자로, 사전처럼 용어를 설명하는 목록을 작성\n </uL>\n <LI> &lt; li &gt; 태그 ; list item의 약자로 &lt; ul &gt; &lt; ol &gt;의 각 항목들을 나열할 때 사용\n <LI> &lt; pre &gt; 태그 ; Preformatted Text </LI>\n문장형태 그대로 브라우저에 표시. 예를 들어 엔터(Enter), 탭(Tab), 스페이스바(Space) 는 pre 를 사용하지 않았을 때 무조건 공백 하나로 인식하게 됩니다. 하지만 pre 를 사용하게 되면 HTML 형태 그대로 유지가 가능합니다. 그래서 소스를 표현하는데 많이 이용합니다.\n</UL> </html>\n\n!!! HTML 문서의 기본구조\nHTML 문서의 시작은 <html> 태그로 시작하고 </html> 태그로 끝낸다\n\nHTML 문서 내부는 크게 웹 문서 제작자나 사용된 언어 등 화면에 직접적으로 표시되지 않는 여러 정보가 들어가는 <head> 태그와 실제 컨텐츠의 정보가 들어가는 <body>태그로 이루어져있다.\n\n<head> 태그 안에는 웹 문서의 제목을 표시하는 <title> 태그, 웹 페이지의 정보를 정의하는 <meta> 태그, JavaScript 를 삽입하는 <script> 태그, CSS 등의 파일을 삽입하는 <link> 태그 등이 들어간다.\n\n<body> 태그 안에는 <head> 태그안에 들어가지 않는 거의 모든 태그가 들어된다.\n{{{\n<html>\n <head>\n <title>페이지 제목</title>\n </head>\n\n <body>\n 웹 문서의 내용\n </body>\n</html>\n}}}\n\n\n!!! XHTML, HTML5\nHTML의 문서 규격을 표시 할 때에는 DOCTYPE 이라는 것으로 표시한다. \n\nXHTML 문서는 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd> 같은 doctype을 사용하고 \n\nHTML5 문서는 <!doctype html> 같은 doctype을 사용한다. \n\ndoctype을 지정하지 않을 경우 Internet Explorer에서 문서를 Internet Explorer 6 엔진으로 해석하므로 꼭 지정 해 주도록 한다. \n{{{\n<!DOCTYPE html>\n<html>\n<head>\n <title>Title of the document</title>\n <meta charset="utf-8">\n</head>\n<body>\n The content of the document\n</body>\n</html>\n}}}\n\n\n!!! 한글 깨짐 문제\nHTML의 인코딩 방식 때문에 한글이 깨질 때가 있다. \n\n이는 브라우저에서 인식하는 인코딩 방식과 html 파일의 인코딩 방식이 달라 생기는 문제인데,\n둘 다 하나의 인코딩 방식으로 통일해 주면 된다. \n\nUTF-8 인코딩 방식 설정예.\n''XHTML''의 경우에는 아래 코드를 <head> 태그 안에 추가\n{{{\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n}}}\n''HTML5''의 경우 아래 코드를 <head> 태그 안에 추가\n{{{\n<meta charset="utf-8">\n}}}\n\n
#.''IF 함수 ''\n \n지정한 조건이 '참'일 때와 '거짓'일 때 각각 다른 값을 반환합니다. IF를 사용하여 값이나 수식에 대한 조건부 검사를 수행.\n\n''(형식) =IF(logical_test,value_if_true,value_if_false)''\n- logical_test : 지정하고자 하는 조건을 표시\n- value_if_true : 지정한 조건이 참인 경우에 표시하는 값(숫자,문자) 또는 수식을 대입\n- value_if_false : 지정한 조건이 거짓인 경우에 표시하는 값(숫자,문자) 또는 수식을 대입\n\n''(사용예) =IF(A2>B2,"예산 초과","OK")''\nA2셀에 있는 값이 B2셀에 있는 값보다 크면 셀에 '예산 초과' 라는 텍스트를 표시해주고, A2셀에 있는 값이 B2셀에 있는 값보다 작거나 같으면 'OK'라고 표시\n\n\n〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n#. 조건판단문\n---------------------------------\n''1. IF THEN ELSE문''\n가장 대표적인 조건판단문이 IF구문이다. 비교 또는 논리연산자를 이용하여 조건식을 만들어 그 결과에 따라 달리 실행하도록 하는 것이다. IF문은 다음과 같은 형식으로 사용한다.\n \nIf 조건1 Then\n&nbsp; &nbsp; &nbsp; &nbsp; 조건1이 참인 경우\nElseIf 조건2 Then\n&nbsp; &nbsp; &nbsp; &nbsp; 조건2가 참인 경우\nElse\n&nbsp; &nbsp; &nbsp; &nbsp; 어느 조건도 아닌 경우\nEnd If\n\n\n''2. SELECT CASE문''\n하나의 조건식이나 변수로 여러 조건을 검사하고자 하는 경우 중첩된 블록If문을 사용할 수 있는데 이보다는 Select Case문을 이용하는 것이 한결 간결하고 편하다.\n\nSelect Case 조건식이나 변수\n&nbsp; &nbsp; &nbsp; &nbsp; Case 비교대상1\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 실행문1\n&nbsp; &nbsp; &nbsp; &nbsp; Case 비교대상2\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 실행문2\n&nbsp; &nbsp; &nbsp; &nbsp; Case Else\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 실행문3\nEnd Select\n \n조건식이나 변수가 Case문 비교대상에 부합하는 경우 Case 절 이후의 문을 수행한 후 End Select 문 다음의 문으로 넘어간다. Case Else 절은 다른 Case 문의 비교대상 중 조건식이나 변수와 부합하는 조건이 하나도 없는 경우 사용한다.\n \n예상치 않은 경우를 처리하기 위하여 Select Case 문에 Case Else 문을 함께 사용한다. 각 Case 절 안에서 여러 식이나 범위를 사용할 수 있다. 예를 들면 다음과 같은 표현도 유효하다.\n \nCase 1 To 4, 7 To 9, 11, 13, Is > 최대값\n
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n#. 반복문\n---------------------------------\n''1. For - Next'' ; 명령은 반복적인 작업을 위해 사용하는 명령문이다. 일정한 횟수만큼 반복 수행한다.\n/*{{{*/\n// 문법구조\nFor 변수 = 시작값 To 종료값 (Step 변화값)\n (명령문)\n (Exit For) // 선택 사항. For 루프의 외부로 제어를 이동.\nNext 변수 \n/*}}}*/\n단순 반복문의 구조로서 작동은 다음과 같다.\n&nbsp; &nbsp; 1. For 문을 처음 만나 변수에 시작값을 넣는다.\n&nbsp; &nbsp; 2. 변수의 값이 종교값을 넘었는가 검사한다.\n&nbsp; &nbsp; 3. 명령문을 수행한다.\n&nbsp; &nbsp; 4. Next 문을 만나면 위쪽의 For 문으로 올라온다.\n&nbsp; &nbsp; 5. For문에서 변수의 변화값을 변화시킨 후 종료값을 넘었는가 검사한다.\n&nbsp; &nbsp; 6. 넘지 않았으면 3~5번을 반복수행하고, 넘었으면 For문을 빠져나온다.\n \n예1)\nFor i=1 To 5 Step 1\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s=s+i\nNext i\n\n''2. Do While ~ Loop''\n/*{{{*/\n# While 이 앞에 있는 경우이며 조건이 만족하지 않으면 실행하지 않음 \nDo While 조건문\n 실행문\nLoop\n \n# While 뒤에 있는 경우이며 무조건 한번은 실행되는 구조임\nDo \n 실행문\nLoop While 조건식\n/*}}}*/\n
''#. 전도시 교역품 목록'' ; http://nacancel.tistory.com/56\n&nbsp; &nbsp; &nbsp; &nbsp; http://d5.d5mickey.wiki/crlamw - 미키위키\n''#. 일본 위키 사이트'' ; https://translate.googleusercontent.com/translate_c?depth=5&hl=ko&ie=UTF8&nv=1&prev=_t&rurl=translate.google.com&sl=ja&tl=ko&u=http://wikiwiki.jp/voyagev/?%C1%A5%C7%F5&usg=ALkJrhjWVgJkEGHKdJ2funx0QXXDQE7r5A\n\n''#. 선박 설계도''\n| 그레이드 | E | D | C | B | A | S | X |\n| 보너스 횟수 | 0 | 1 | 2 | 3 | 4 | 5 | 7 |\n보너스 적용 개소 ... 내구성, 항속 적재 승무원, 공격, 방어, 장비 프레임 보너스의 상승량은 10 % ~ 20 %, 장비 프레임이 선택된 경우 +1이된다. \n순위 X는 기본 장착 프레임이 1 개 증가하기 있기 때문에, 보너스가 적용되면 총 +2 될 가능성이있다. \n\n''#. 특수 성능''\n중소형 이상 크기의 선박을 신규 조선 때, 배 고유의 특수 성능 (특성)을 최대 3 개까지 붙을 수 있다.\n\n▷ 특수 도시\n모든 선중에 일반 특수 성능이 추가되고\n보통의 특수 성능 이외에도 특별한 특수 성능이 붙는 경우도 있다.\n&nbsp; &nbsp; ''브랜든 (종교 도시)''\n&nbsp; &nbsp; &nbsp; &nbsp; 내구도 90 % 수리 (모든 선종에서 건조 가능) \n&nbsp; &nbsp; ''세렌디부 (정치 도시)'' ; 나오\n&nbsp; &nbsp; &nbsp; &nbsp; 도움말 포인트 업 (모든 선종에서 건조 가능) \n&nbsp; &nbsp; ''캇시테리데스 (전통 도시)''\n&nbsp; &nbsp; &nbsp; &nbsp; 돛 조종 미니 게임 횟수 업 (모든 선종에서 건조 가능) \n\n\n++++[#. 해도 입수 ]\n| 해도 | 획득 방법 |\n| 브리튼 섬 주변 1 | 메인 퀘스트 “소니아로부터의 호출”에서 소니아 한테 받음 |\n| 브리튼 섬 주변 2 | 메인 퀘스트 “라몬을의 발자취를 쫓아 라”에서 리스본에에서 받음 |\n| 브리튼 섬 주변 3 | 메인 퀘스트 “머스킷 총을 손에 넣자 '에서 엠마한테 받음 |\n| 북해 1 | 메인 퀘스트 “다음 단서를 찾아” “더블린에서 받음. |\n| 북해 2 | 메인 퀘스트 “라몬이 남긴지도를 따라가라”코펜하겐 상인한테 받음 |\n| 북해 3 | 아드리아 해 1 · 펠로폰네소스 거점 올림피아 유적을 완전 제패 |\n| 발트해 1 | 메인 퀘스트 ” 해도와 메르카토르” 암스테르담의 메르카토르에게서 받음 |\n| 발트해 2 | 중유럽 2 쾰른 남동쪽 거점 트리어 유적을 완전 제패 |\n| 발트해 3 | 메인 퀘스트 “라몬이 남긴지도를 따라가라”코펜하겐 상인한테 받음 |\n| 중유럽 1 | 메인 퀘스트 “다음 단서를 찾아” “더블린에서 받음 |\n| 중유럽 2 | 북해1 ·2 스코네 거점 알레스타나 유적을 완전 제패 |\n| 중유럽 3 | 메인 퀘스트 “소니아를 쫓아 라”에서 메르카토르한테 받음 |\n| 중유럽 4 | 메인 퀘스트 |\n| 프랑스 서해안 1 | 메인 퀘스트 “라몬의 발자취를 쫓자 - 자금을 모아보자”에서 받음 |\n| 프랑스 서해안 2 | 메인 퀘스트 “뉴턴의 설득” 콜럼버스한테 받음 |\n| 프랑스 서해안 3 | 소아시아 1 에게해 북동쪽 거점 트로이 유적을 완전 제패 |\n| 이베리아 반도 1 | 처음부터 가지고 시작 |\n| 이베리아 반도 2 | 메인 퀘스트 항해의 기본을 배우자 - 롯코를 마중하자 에서 받음 |\n| 이베리아 반도 3 | 마그레브 서부 2 페스 남쪽 거점 볼루빌리스 고대 유적을 완전 제패 |\n| 이베리아 반도 4 | 메인 퀘스트 “카시테리데스의 수수께끼 찾기” 에서 받음. |\n| 서부 지중해 1 | 초기에 니나한테 받음 |\n| 서부 지중해 2 | 메인 퀘스트 항해의 기본을 배우자 - 롯코를 마중하자 에서 받음 |\n| 서부 지중해 3 | 소아시아 3 에게해 북동쪽 거점 에페소 유적을 완전 제패 |\n| 아드리아 해 1 | 메인 퀘스트 “토스카네리을 찾아라 '에서 다빈치한테 받음. |\n| 아드리아 해 2 | 중유럽 3 쾰른 남서쪽 거점 용의 바위를 완전 제패 |\n| 아드리아 해 3 | 북해 1 ·2 올보르 거점을 린홀름호이 유적을 완전 제패 |\n| 흑해 1 | 소아시아 1 마케도니아 거점 베르기나 유적을 완전 제패 |\n| 흑해 2 | 북해 3 코펜하겐 서쪽 거점 헤오로트 궁전을 완전 제패 |\n| 흑해 3 | 메인 퀘스트 “소니아를 뒤쫓자”에서 메르카토르한테 받음 |\n| 흑해 4 | 메인 퀘스트 |\n| 소아시아 1 | 메인 퀘스트 “뉴턴의 설득”에서 뉴턴한테 받음 |\n| 소아시아 2 |\n| 소아시아 3 | 아드리아 해 1 나폴리 남쪽 거점 폼페이 유적을 완전 제패 |\n| 소아시아 4 | 메인 퀘스트 |\n| 마그레브 서부1 | 메인 퀘스트 “해도와 메르카토르”에서 메르카토르한테 받음. |\n| 마그레브 서부2 | 메인 퀘스트 “해도의 목표에서 유적 발굴”에서 쥬피톨한테 받음. |\n| 마그레브 서부3 | 사하라1 아리보리 거점 (1,3,4 층)에서 지정된 발견 물을 발굴 파리의 조사 이벤트 |\n| 마그레브 동부 1 | 메인 퀘스트 '전설의 섬과 현자의 돌'에서 뉴턴한테 받음. |\n| 마그레브 동부 2 | 중유럽2 알프스 산맥 남쪽 거점 완전 재패 |\n| 마그레브 동부 3 | 마그레브 동부 트리폴리 동쪽 거점 랩티스 마그나 유적 |\n| 이집트 1 | 메인 퀘스트 “알제 해적을 쫓아라”에서 쥬피톨한테 받음 |\n| 이집트 2 | 메인 퀘스트 “카시테리데스의 수수께기 찾기”에서 받음 |\n| 이집트 3 | 마그레브 서부1 지브롤터 거점 헤라클레스의 기둥을 완전 제패 |\n| 나일강 북부 1 | 메인 퀘스트 “뉴턴의 의뢰” 에서 받음 |\n| 나일강 북부 2 | 메인 퀘스트 “나일강 유역을 조사하라” 중간 보상 |\n| 나일강 남부 1 | 메인 퀘스트 “나일강 유역을 조사하라” 최종 보상 |\n| 나일강 남부 2 | 메인 퀘스트 “나일강 유역을 조사하라” 중간 보상 |\n| 콩고강 1 | 메인 퀘스트 |\n| 콩고강 2 | 메인 퀘스트 |\n| 아프리카 남부 1 | 메인 퀘스트 |\n| 아프리카 남부 2 | 메인 퀘스트 |\n| 마다가스카르 1 | 메인 퀘스트 |\n| 마다가스카르 2 | 메인 퀘스트 |\n| 대서양 중부 1 | 메인 퀘스트 |\n| 대서양 중부 2 | 메인 퀘스트 |\n| 카리브 해 1 | 메인 퀘스트 |\n| 카리브 해 2 | 메인 퀘스트 |\n| 멕시코 만 1 | 메인 퀘스트 |\n| 멕시코 만 2 | 메인 퀘스트 |\n| 아프리카 동부 1 | 메인 퀘스트 |\n| 아프리카 동부 2 | 메인 퀘스트 |\n| 아리비아 반도1 | 메인 퀘스트 |\n| 아리비아 반도2 | 메인 퀘스트 |\n| 루시 1 | 메인 퀘스트 |\n| 루시 2 | 메인 퀘스트 |\n| 루시 3 | 메인 퀘스트 |\n===
한라봉, 레드향, 천혜향과 같은 감귤이 12월에서 2월까지 출하\n\n!!! 카라향\n카라향의 특징은 감귤꽃이 피는 시기인 4∼5월(봄철)에 꽃과 함께 열매가 달려 수확하고\n감귤이 생산되지 않는 4~5월에 수확이 가능한 감귤로, 틈새시장을 공략할 수 있다는 장점이 있다. \n\n일본에서 카라만다린과 길포포칸이라는 감귤 품종을 교배해 육성한 품종으로 '남진해'라고도 불리고\n당도는 한라봉과 천혜향 등 다른 하우스감귤과 비슷한 14브릭스 이상으로 높지만 산도는 낮아 맛과 품질이 우수하다.\n\n<br>
여성가족부(장관 김희정)는 인터넷게임 사업자들이 심야시간대(오전0시부터 오전 6시까지) \n16세 미만 청소년에게 제공을 제한(일명‘셧다운제’)해야 하는 인터넷게임물의 범위를 5월 1일(금) 고시(5월 20일 시행)했다.\n\n''(적용대상)''\n기기별: PC\n게임물별: 온라인PC게임, 웹게임, PC패키지게임 등\n\n''(적용제외)''\n기기별: 스마트폰, 태블릿PC, 콘솔기기(* 유료 콘솔게임은 적용대상에 포함됨)\n게임물별: 플래시게임 중 일부, PC패키지게임물 중 일부\n\n○ 비영리를 목적으로 제공되고 개인정보를 수집 또는 이용하지 않는 게임물\n ※ “비영리 목적”, “개인정보 수집 및 이용” 관련 심야시간대 인터넷게임의 제공시간 제한제도 적용 여부 판단기준\n|>| 구 분 |>|>| 개인정보 수집 또는 이용 여부 |\n|>|~|수집 또는 이용하지 않음 | 수집 또는 이용함 |\n| 게 임 <br> 이용료 | 무료 |>| 제도 적용 제외 | 제도 적용 |\n|~| 유료 |>| 제도 적용 | 제도 적용 |\n\n○「게임산업진흥에 관한 법률」 제21조제1항제3호에 따라 등급분류를 받지 않는 게임물 중 시험용 게임물\n\n○「게임산업진흥에 관한 법률」 제21조제1항제1호 및 제2호에 따라 등급분류를 받지 않는 게임물 중 \n 게임대회.전시회용 게임물, 교육, 공익홍보용 게임물\n\n''(고시 적용기간)''\n2015년 5월 20일 ~ 2017년 5월 19일(2년간)\n
!! 기타\n■ 주소\n부산광역시 부산ㅈㄱ 연ㅅ로 12-열7 (ㅇㅈㄷ 95-삼6) / cf. 연ㅅ로 12-열5 (95-사3)\n서울특별시 구로구 신도림동 경인로 610 (신도림동, 코리아빌딩) 7층 라이브팀, 한빛소프트\n&nbsp; &nbsp; &nbsp; &nbsp; 서울특별시 구로구 신도림동413-9 코리아빌딩 \n\n■ 2016.08.23. 은영이 !! >> 17.01.14.(토)\n\n■ 2012.05.12.(토) 관문사\n■ 진 95-36 (연** 12-17)\n■ GMail 등록계정 : empal 계정 - goo***9*\n\n+++[▷ Keyword ]\n!!! 기타\n* 티타늄 이중주발세트\n* 쿨기어 스윙탑 물병\n\n!!! 화장품\n* 조성아 투웬티투 허니 볼륨 필러 30ml\n* Geomar 지오마 리모델링 바디 스크럽 600g / 35,000\n\n!!! 책상 \n* 지워지는 볼펜 ; (PILOT) FRIXION BALL KNOCK LFBK-23EF-BB 0.5mm/0.7mm (모델과 포장 구성이 다양)\n* 모니터 받침대\n** 제닉스 Zignnum M-DESK F1\n** AG-SET 모니터받침대\n* 스트롱에그2 kwd-B2800\n* 삼성 디지털 카메라 ; vluu st5500(B) - 2016.03.17. 케이블 구입 (15,000원/ in 삼성서비스센터 용산센터)\n\n!!! 용품\n* 보호안경 ; 고글 및 경량형 보안경\n* 노루페이트 ; 멀티플러스(반광) - 건축용 > 일반기능도료 > 내부용 수성도료\n** 용도 - 콘크리트, 시멘트몰탈, 석고보드 등의 알카리성소지 및 내부목재 에나멜이나 락카 구도막 보수\n\n!!! 식품\n* 동원F&B 쎈쿡 맛있는 찰진약밥 210g\n===\n\n| 망분리 미니PC | http://gotetra.com/ |(주)인프론티브 |테트라(Tetra)-D (KVM 내장 물리적 망분리 미니PC) |\n| 포터블 스피커 T-700 | http://storefarm.naver.com/unixon | 폴라폭스 |유닉슨 QVOX 포터블 스피커 (2.1채널 우퍼 사운드) |\n| 충전식 무선마우스 | http://ruredit.com/ | 레딧인터내셔널 |레드빈 충전식 무선마우스 A15R (5가지색상) |\n| 휴대용 확대경 | http://www.iloupe.kr/ | (주)아이루페 - 캔씨카드 |카드처럼 납작한 형태의 프레넬렌즈(Fresnel Lens)를 이용하여 만든 실용적인 휴대용 확대경. 아담한 사이즈로 지갑에 넣고 다니다 필요할 때 꺼내기 쉽게 사용할 수 있다. |\n| 미네랄 환원수 | http://www.chnation.co.kr/ | 창하 |아리스톤워터 |\n|>|''구입 정보'' |\n| 염색약 | http://amihair.co.kr/ | 헤어미인 |제노(xeno) 스넬 칼라트리트먼트 염색약 500ml |\n| 전자저울 | http://www.joolnoon.com/ | 줄눈닷컴 |전자저울 3kg/0.1g - 33,000원 @ 2015.07.07. 구입 / 타일관련 셀프제품 취급 |\n| 시계연결핀 | http://www.otime.co.kr/ | OTIME 스포츠 |바네봉 27 mm / 패션 브랜드시계 쇼핑몰 |\n\n!! 구입\n* 식품\n** kikkoman こいくち 코이꾸찌 (진간장) - 염미(소금맛)\n* 노트북가방 ; http://sumdex.365managed.co.kr/ - Sumdex 국내 공식 직영 쇼핑몰\n** www.sumdexkorea.com/ - (주)썸덱스월드\n* 볼베어링 도래\n** http://www.all59.com/shop/goods/goods_list.php?category=004 - 10 개\n** http://marinemart.kr/shop/goods/goods_list.php?category=012002 - 100 개\n* 종이나라 펄트레이싱지 (2015.08. 현재 단종)\n** http://mungukorea.net/ - 문구코리아 / 15개(5색, 10매), 1박스 (10.500원) X 2개 구매\n* CABLEMATE HDMI Ver1.4 골드메탈 케이블 (3m) - 10,400원 @ 2015.10.01.\n** http://samsungitmall.com/ - 삼성IT몰\n+++[▷ 가격 정보 ]\n| 구분 | 상품 | 브랜드 | 업체 | 비고 |\n| 건강식품 | 코엔자임 큐텐 <br> (Co-Enzyme Q10) | 세노비스 (Cenovis) | 인천 신라면제점 | 15.12.16./ 34,397원 <br> (32$ - D.C 3$ = 29$) |\n|~|~|~| G마켓 | 16.01.15./ 75,000원 <br> 4팩 세트 |\n| 인스턴트커피 | 모코나 콘티넨탈 골드(250g) |제조사; SARA LEE COFFer JOURE (네덜란드) <br> 수입원; (주)네다한 | G마켓_남대문시장월푸드 | 15.11.25./ 19,000원 |\n| 화장품 | 모이스춰 써지 (Moisture Surge) <br> 수분크림 125 ml | 크리니크 (CLINIQUE) | 인천 신라면제점 | 15.12.16./ 64,500원 <br> (59$ - D.C 5$ = 54$) |\n|~| 히말라야 너리싱 200ml (= 150+50) | 히말라야 | http://smartstore.naver.com/euromoms <br> - 유로맘스 독일직구 <br> (해외직구 배송비 6,900원) | 4,200원|\n|~| 히말라야 인텐시브 크림 150ml (고보습 수분) |~|~| 4,600원|\n| 헤어 케어 | 아미노 애시드 샴푸 (Amino Acid Shampoo) 500ml | 키엘 (Kiehl) | 인천 신라면제점 | 15.12.16./ 41,514원 <br> (37$ - D.C 2$ = 35$) |\n|~| 아미노 애시드 컨디셔너 (Amino Acid Conditioner) 500ml |~| 인천 신라면제점 | 15.12.16./ 42,700원 <br> (38$ - D.C 2$ = 36$) |\n| 삼성 Stealth 청소기 <br> VC-BJ939 | 흡입구(침구싹싹 브러시) <br> DJ97-01490E ASSY BRUSH | 삼성전자 | 삼성전자서비스 금천점 | 16.06.01./ 21,000원 |\n|~| 틈새용(솔모양) 흡입구 <br> |~|~| 16.06.03./ 2,000원 |\n===\n\n!! 의류\n| 구분 | 상품 | 브랜드 | 업체 | 비고 |\n| 여름 | 반바지, 셔츠 | AND Z by ZIOZIA |신성통상(주) | 2015.07. 수형 - 롯데몰 |\n| 여름 | 자켓 | OLZEN |신성통상(주) | 2015.07. 수형 - 롯데몰 |\n| 여름 | 모자, 셔츠 | BUCKAROO |(주)엠케이트렌드 | 2015.07. 시현 - 롯데몰 |\n++++[기타 ]\n| 구분 | 상품 | 브랜드 | 업체 | 비고 |\n|신발 | (크록스) 산타 크루즈 2 럭스 M202056-4R9|크록스 |크록스 코리아(주) |M9(270) / 2018.05. 수형 - GS Shop ; 57,880원 |\n===\n+++[예복(한복) ]\n| 구분 | 상세 | 비용 | 기타 |\n|한복| 신량, 옷 (한복, 두루막)| 150 ( = 70 + 80) |2015.12.27. 김필원 한복 <br> &nbsp; &nbsp; (황실이불점) <br> &nbsp; &nbsp; / 선금 50 + 320 |\n|~| 신부, 옷 (한복, 두루막)| 150 (= 70 + 80) |~|\n|~| 어머니, 한복| 70 만원 |~|\n|~| 미경 , 한복| 60 만원 |2015.12.24. 진시장 |\n|양복| 남성 자라 자켓 수선| 2 만원 |2016.01. 양정시장 |\n===\n\n!! 비즈재료\nhttp://www.nbeads.co.kr/ - 엔비즈\nhttp://www.diyall.co.kr/ - 핸드메이드샵 ; 납작주판알\nhttp://www.beadsgood.com/ - 비즈굿 (http://www.beadsdome.com/)\nhttp://www.beadsbank.com/ - 비즈뱅크\n\nhttp://www.selfart.co.kr/ - 공예 전문 포털-셀프아트\nhttp://www.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=781080361&trTypeCd=20&trCtgrNo=143642 - 핸드폰줄 등 악세사리 부자재\ncf. 맨도래, 회전 도래\n\n+++[▷ 주문 내역 ]\n| 구분 | 상품 | 포장단위 | 가격 | 단가 | 참고 |\n|>|스와로브스키 크리스탈 |\n|크리스탈(축구볼) |축구볼 4mm Crystal(AB) | 약 48개| 1,200원| 25원|17.07.25.(화) 엔비즈 |\n|~|론델컷 6mm 오렌지골드(OP) | 약 48개| 1,400원| 30원|17.07.25.(화) 엔비즈 |\n|주판알 |5D 713 Rose 로즈 | 10개| 1,400원| 140원|2015.06.03.(수) 비즈갤러리 |\n|~|6D Rose Peach 로즈피치 | 12개| 2,300원| 192원|2015.08.26.(수) |\n|캣츠아이(라운드) |6mm 연오렌지 | 약 32개| 1,900원| 60원|17.07.25.(화) 엔비즈 |\n|>|진주 |\n|스왈진주 |스왈진주8mm-로잘린 | 10개| 2,200원| 220원|2015.06.03.(수) 비즈갤러리 |\n|아크릴진주(라운드) |8mm 크림 | 약68개| 1,100원| 16원|17.07.25.(화) 엔비즈 |\n|>|금속부자재 |\n|랍스터(701) |5*10 신주버니쉬 | 10개| 800원| 80원|17.07.25.(화) 엔비즈 |\n|>|공구/케이스 |\n|공구 |Round nose pliers PL58 (Beadsmith) | 1개| 10,500원| |2015.06.03.(수) 비즈갤러리 |\n===\n\n<br>
@@color(#04f): ▣ OHI @@; (기업 조직건강도 지수; Organizational Health Index) &nbsp; &nbsp; @ 2015-06-11\n맥킨지가 기업의 재무 및 조직 운영 건전성 측정을 위해 1991년 독자적으로 개발한 지표.\n<br>
경고가 오류로 처리되어 생성된 개체 파일이 없습니다.\n\n/WX는 컴파일러가 모든 경고를 오류로 처리하도록 합니다. 오류가 발생했기 때문에, 개체나 실행 파일이 생성되지 않았습니다. \n오류는 /WX 플래그가 설정될 때에만 나타나고 경고는 컴파일하는 동안에 발생 합니다. 이 오류를 해결 하려면, 프로젝트의 모든 경고를 제거 해야 합니다. \n\n해결하려면, 다음 방법 중 하나를 사용합니다.\n&nbsp; &nbsp; • 프로젝트에서 경고를 발생 시키는 문제를 해결 합니다.\n&nbsp; &nbsp; • 낮은 경고 수준에서 컴파일합니다 — 예를 들어 /W3 를 사용합니다 (/W4대신).\n&nbsp; &nbsp; • 경고 pragma를 사용하여 사용 안 함 또는 특정 경고를 표시 합니다.\n&nbsp; &nbsp; • 컴파일 하기 위해 /WX 사용하지 않습니다. \n\n-. Project Settings > Configuration Properties > C/C++ > General > Treat Warnings As Errors as ; No\n-. OS에 따라서 같은 버전의 Visual Studio (2005)를 사용하고 있더라도 오류가 발생되지 않는 경우가 발생\n
!!! 기타\n* http://www.icoda.co.kr/ - 아이코다\n* http://www.danawa.com/ - 다나와\n* 추천 하드 디스크 (from 2016.03.10. 양*석)\n** Western Digital ; 1 TB\n** Hitachi ; 2T\n\n| 종류 | 업체 | 종류 | 기타 |\n| 하드디스크 SSD | ADATA |Pro SP900 STAT3 256GB | 2016.04. / MLC 추천, TLC 타입은 지향 |\n|~| MICRON | | 국민 SSD ; 240 GB, 512 GB |\n| CPU | 인텔 |인텔 코어i5- 7500 (cf. i7-?) |2017.03. |\n|~| 인텔 |인텔 코어i7-4세대 4790 |2016.04. |\n| 그래픽 카드 | ZOTAC |지포스 GTX1060 MINi D5 6GB |마드보드 크기? |\n| LCD | 알파스캔 | AOC 2777 IPS MHL+DP 모니터 무결점[68.6cm] |cf. 아이코다 (from 2016.04. 문태) |\n| 노트북 | DELL |에일리언웨어/ 17인치 R3 X54E771AKR (3.78kg 무거움) |2017.03. 180만원선? |\n| 하드독 | 스카이디지탈 |SKY 알로이 듀얼독 USB3.0 (SATA 방식) |와장하드 도킹스테이션 (cf. IDE 하드용 젠더) |\n● [에이데이타/256GB/SSD] Premier Pro SP900 (R 555/W 530) \n&nbsp; &nbsp; SSD/ SATA3/ MLC/ 읽기555MB/s 쓰기530MB/s/ 무상 3년/ 가이드포함\n&nbsp; &nbsp; 최초출시 ; 2012년 5월\n\n● 메모리 DDR3 이상 ; 16GB 이상, 가상드라이버로 설정\n● 케이스 (? 마이크로 사이즈) ⇒ 마드보드 (슬롯 갯수) ⇒ 그래픽 카드\n\n!!! NAS(Network Attached Storage) 장비란?\n네트워크 망에 연결하여 사용자들이 쉽게 접근하여 대용량 데이터를 올릴 수 있는 장비.\n(TCP/IP기반으로 연결하여 데이터 송수신)\n&nbsp; &nbsp; / NAS는 기본적으로 네트워크 스토리지 기능을 갖추고 있으며 이메일 서버나 미디어 서버, 클라우드 서비스 등 각종 각종 부가기능을 손쉽게 추가하면서 자신의 서버를 상대적으로 저렴한 비용으로 구축할 수 있는 점이 특징.\n\n!!! 서버 타입\n-. ''랙 마운트형 클러스터 서버'' ; 가로로 랙 서버를 쌓아 올린 형태\n-. ''블레이드 서버'' ; 슬롯에 칼날처럼 얇은 블레이드들을 세로로 꽂는 것이 특징\n&nbsp; &nbsp; / 컴퓨팅 성능 향상에 따른 전력소비와 발열량 증가 문제를 해결할 수 있을 것으로 예상\n&nbsp; &nbsp; / 얇은 초박형 블레이드를 슬롯에 꽂아 제작하는 블레이드 서버는 두께를 얇게 구성할 수 있으므로, 수십 개 혹은 수백 개의 서버들을 하나의 캐비넷에 장착할 수 있다. 그리고 네트워크, 스위치, 스토리지, 어플라이언스 등을 특정한 기능에 따라 독립적인 블레이드로 구성할 수도 있다.\n-. ''카타리지 타입 서버'' ; 나디아(Nadia) 서버\n\n
천지를베다 공식 카페 ; http://cafe.naver.com/threejinmobile\nHanbitsoft/ T3Entertainment 의 모바일게임\n\n2015.07.23.(목) 정식오픈\n&nbsp; &nbsp; / 중국 ‘삼국지(三國志)’의 실존 역사와 다채로운 시나리오를 기반으로 다수의 적을 호쾌한 액션으로 베어 나가는 모바일 전쟁 RPG (액션 롤플레잉 게임)\n&nbsp; &nbsp; / 자신과 함께 성장할 수 있는 ‘부관 시스템’, 영지를 번영, 확장시키는 ‘영지 시스템’ 등 흥미로운 콘텐츠들을 포함\n\n정리 ; 카페 378 / 영지 점령전 정보/ 2015.05.26. \n\n!!! 메인 화면 구성\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_main.PNG" width=480>\n</CENTER> </html>\n\n1. 상단 메뉴\n&nbsp; &nbsp; ▷ 계정 정보 : 닉네임과 계정레벨이 표시됩니다. \n&nbsp; &nbsp; ▷ 군량미 : 행동력으로써 계정레벨이 오르면 절대치가 확장되며, 영지에서 수확으로 획득 가능합니다. \n&nbsp; &nbsp; ▷ 보옥 : 게임 내 아이템을 구매할 수 있는 유료 캐시입니다. \n&nbsp; &nbsp; ▷ 골드 : 게임 내 아이템을 구매할 수 있는 게임 캐시입니다. \n&nbsp; &nbsp; ▷ 옵션 설정 : 음향, 그래픽을 수정할 수 있는 옵션 설정입니다. \n&nbsp; &nbsp; ▷ 채널 대화 : 해당 채널에 있는 유저와 소통할 수 있는 대화창입니다. \n\n2. 우측 메뉴 \n&nbsp; &nbsp; ▷ 도감 : NPC(부관) 정보로, 시나리오별 수집 정보를 표시합니다. >>> [[천지_도감]]\n&nbsp; &nbsp; ▷ 업적 : 각종 업적을 확인할 수 있습니다. \n&nbsp; &nbsp; ▷ 우편 : 아이템 및 골드 등 각종 보상을 받을 수 있는 공간입니다. \n\n3. 중앙 메뉴 \n&nbsp; &nbsp; ▷ 본인의 작위 정보를 확인할 수 있습니다. \n&nbsp; &nbsp; ▷ 버프 정보를 알 수 있습니다. \n&nbsp; &nbsp; ▷ 본인이 현재 플레이하고 있는 영웅을 보여줍니다.(하후연) >>> [[천지_캐릭터정보]]/ [[천지_승급정보]]\n&nbsp; &nbsp; ▷ 본인이 현재 함께 전투에 참여하고 있는 부관을 보여줍니다.(원소) >>> [[천지_부관정보]]\n&nbsp; &nbsp; ▷ 본인이 보유한 영웅은 좌측에 나열되어 있습니다.(대교, 관우) \n\n4. 하단 메뉴 \n&nbsp; &nbsp; ▷ 캐릭터 : 본인 영웅의 상세 정보를 볼 수 있습니다. \n&nbsp; &nbsp; &nbsp; &nbsp; / 무력 : 공격력 - 무관\n&nbsp; &nbsp; &nbsp; &nbsp; / 통솔 ; 방어력 - 보좌\n&nbsp; &nbsp; &nbsp; &nbsp; / 정치 ; 체력 - 문관\n&nbsp; &nbsp; &nbsp; &nbsp; / 지능 ; 스킬 공격력 - 책사\n&nbsp; &nbsp; ▷ 장비 : 각 영웅의 장비와 능력치를 볼 수 있고, 그 외 보유하고 있는 재료 및 부관을 확인할 수 있습니다. >>> [[천지_장비정보]]\n&nbsp; &nbsp; ▷ 스킬 : 영웅의 스킬을 확인할 수 있습니다. >>> [[천지_스킬정보]] \n&nbsp; &nbsp; ▷ 지도 : 중국 전 지역을 볼 수 있으며 각 영토별 정보를 확인할 수 있습니다. >>> [[천지_지도정보]] / [[천지_영지정보]]\n&nbsp; &nbsp; ▷ 친구 : 친구 목록을 볼 수 있습니다. \n&nbsp; &nbsp; ▷ 상점 : 부관 및 아이템을 구매할 수 있는 곳입니다. >>> [[천지_상점정보]] \n\n5. 좌측 하단 메뉴\n&nbsp; &nbsp; ▷ 대전모드\n&nbsp; &nbsp; ▷ 시나리오 : 삼국지 스토리를 따라가며 액션을 즐길 수 있는 스테이지입니다. >>> [[천지_시나리오]] \n\n!!! 특성창\n1. [[천지_전투정보]]\n2. [[천지_영지점령전]]\n\n\n
<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_character01.PNG" width=480>\n</CENTER> </html>\n1. 좌측 화면 \n&nbsp; &nbsp; ▷ 현재 보유하고 있는 영웅의 모습을 한 눈에 볼 수 있고 능력치를 확인할 수 있습니다. \n\n2. 우측 화면 \n&nbsp; &nbsp; ▷ 현재 보유하고 있는 영웅을 공격력 / 방어력 / 체력 / 레벨 순으로 나열할 수 있고 캐릭터 선택 시 상세 정보를 확인할 수 있습니다. \n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_character02.PNG" width=480>\n</CENTER> </html>\n&nbsp; &nbsp; ▷ 상세 정보(클릭 시) \n&nbsp; &nbsp; &nbsp; &nbsp; 1) 영웅의 능력치 및 스킬 정보를 확인할 수 있습니다. \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - 터치 시 스킬 정보 확인 가능 \n&nbsp; &nbsp; &nbsp; &nbsp; 2) 영웅 승급 \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - 승급 조건을 만족하면 승급을 할 수 있고, 승급 시 능력치 상승과 외형이 변합니다. \n
<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_equipment01.png" width=480>\n</CENTER> </html>\n1. 좌측 화면 \n&nbsp; &nbsp; ▷ 영웅 고유의 무기 / 장신구로써 재료를 모아 승급할 수 있습니다. \n&nbsp; &nbsp; ▷ 무기 / 목걸이 / 팔찌 / 반지 \n&nbsp; &nbsp; &nbsp; &nbsp; 1) 무기, 목걸이, 팔찌, 반지는 승급 시 등급(A, B, C, D)을 부여 받습니다. \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - A : 보라색, B : 파란색, C : 초록색 D : 검은색 \n\n2. 우측 화면 \n&nbsp; &nbsp; ▷ 현재 장착 중인 부관 정보와 재료 / 부관 / 기타 정보를 확인할 수 있습니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_equipment02.png" width=480>\n</CENTER> </html>\n1. 아이템 카테고리\n&nbsp; &nbsp; ▷ 이전 아이템\n&nbsp; &nbsp; &nbsp; &nbsp; 1) 승급된 아이템의 등급이 낮을 경우, 옵션을 다 장착한 후 다시 승급시킬 수 있다.\n&nbsp; &nbsp; &nbsp; &nbsp; 2) 재승급된 아이템의 등급이 낮을 경우 '분해'를 통해 승급시 장착한 아이템을 회수 할 수 있다 (파괴될 수도 있음).\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_upgrade05.jpg" width=480>\n</CENTER> </html>\n\n&nbsp; &nbsp; ▷ 현재 아이템\n&nbsp; &nbsp; &nbsp; &nbsp; 1) 옵션을 다 장착한 경우, 무기/ 장신구를 @@color(#ff0000): ''승급''@@ 시킬 수 있다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_upgrade01.png" width=480>\n</CENTER> </html>\n\n2. 장비 세부 정보 \n&nbsp; &nbsp; ▷ 무기 / 목걸이 / 팔찌 / 반지 클릭 \n&nbsp; &nbsp; &nbsp; &nbsp; 1) 각 파츠별 해당하는 재료를 다 모으면 승급할 수 있습니다. \n&nbsp; &nbsp; &nbsp; &nbsp; 2) “+” 표시 터치 시 획득할 수 있는 스테이지 정보를 가르쳐 주고 바로 이동할 수 있습니다. \n&nbsp; &nbsp; &nbsp; &nbsp; 3) 등급에 따라 제공되는 옵션 개수가 달라집니다. \n&nbsp; &nbsp; &nbsp; &nbsp; 4) 이전 무기로 돌아가 재료를 다시 모아 재승급도 가능합니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_equipment03.png" width=480>\n</CENTER> </html>\n&nbsp; &nbsp; ▷ 재료 : 무기 / 장신구에 장착할 수 있고 강화에 사용됩니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_equipment04.png" width=480>\n</CENTER> </html>\n&nbsp; &nbsp; ▷ 부관 : 현재 장착 중인 부관을 보여줍니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_equipment05.png" width=480>\n</CENTER> </html>\n&nbsp; &nbsp; ▷ 보유하고 있는 부관을 보여주고 누르면 상세 정보를 볼 수 있습니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_equipment06.png" width=480>\n</CENTER> </html>\n&nbsp; &nbsp; ▷ 기타 재료를 확인할 수 있습니다. \n
<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_skill01.png" width=480>\n</CENTER> </html>\n1. 액티브\n&nbsp; &nbsp; ▷ 스킬 1 : Lv.1부터 사용할 수 있습니다. \n&nbsp; &nbsp; ▷ 스킬 2 : Lv.5부터 사용할 수 있습니다. \n&nbsp; &nbsp; ▷ 스킬 3 : Lv.10부터 사용할 수 있습니다. \n&nbsp; &nbsp; ▷ 남은 스킬 포인트 : 캐릭터의 레벨이 오를 때마다 스킬 포인트를 1포인트씩 획득합니다. \n&nbsp; &nbsp; ▷ 스킬 레벨업 : 스킬 포인트와 골드를 이용해 스킬을 레벨업 합니다. \n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_skill02.png" width=480>\n</CENTER> </html>\n1. 패시브\n&nbsp; &nbsp; ▷ 특별한 조작없이 발동되는 스킬로써 영웅마다 고유의 패시브를 보유하고 있습니다. \n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_skill03.png" width=480>\n</CENTER> </html>\n1. 특수\n&nbsp; &nbsp; ▷ 필살기 스킬의 능력치를 올려주는 영웅 공통 스킬입니다.\n&nbsp; &nbsp; ▷ 기마 상태에서의 능력치를 올려주는 영웅 공통 스킬입니다.\n\n
<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_map01.jpg" width=480>\n</CENTER> </html>\n1. 활성화 \n&nbsp; &nbsp; ▷ 지도는 시나리오 1-1을 클리어하면 자동 활성화됩니다. \n2. 영지의 종류 >>> [[천지_영지정보]]\n&nbsp; &nbsp; ▷ 영지 : 시나리오를 통해 획득한 영토는 본인 고유의 영토로써 부관을 임명할 수 있습니다. \n&nbsp; &nbsp; &nbsp; &nbsp; * 최초 획득하는 영지는 ‘수도’로서 다양한 컨텐츠를 즐길 수 있습니다. \n&nbsp; &nbsp; ▷ 점령지 : 영지 점령전을 통해 획득한 영토로써 골드 및 아이템을 보내오기도 합니다. \n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_map02.png" width=480>\n</CENTER> </html>\n&nbsp; &nbsp; ▷ 각 영토는 특징이 존재합니다. \n&nbsp; &nbsp; &nbsp; &nbsp; 1) 벼 문양(농업 수치) : 농가에서 군량미 획득이 빠릅니다. \n&nbsp; &nbsp; &nbsp; &nbsp; 2) 금괴 문양(상업 수치) : 상가에서 상납금 징수가 빠릅니다. \n&nbsp; &nbsp; &nbsp; &nbsp; 3) 망치 문양(공업 수치) : 대장간에서 획득하는 아이템이 좋습니다. \n&nbsp; &nbsp; &nbsp; &nbsp; 4) 책 문양(학문 수치) : 교습소에서 부관 강화시 능력치가 높게 올라갑니다. \n\n
<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area01.png" width=480> <br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area02.png" width=480>\n</CENTER> </html>\n1. 좌측 화면 \n&nbsp; &nbsp; ▷ 태수 : 부관의 능력치에 따라 영웅의 모든 능력치가 상승합니다. \n&nbsp; &nbsp; ▷ 무관 : 부관의 능력치(무력)에 따라 공격력이 상승합니다.\n&nbsp; &nbsp; ▷ 문관 : 부관의 능력치(정치)에 따라 체력이 증가합니다.\n&nbsp; &nbsp; ▷ 보좌 : 부관의 능력치(통솔)에 따라 방어력이 상승합니다.\n&nbsp; &nbsp; ▷ 책사 : 부관의 능력치(지능)에 따라 스킬 데미지가 증가합니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_loading01.jpg" width=480> <br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area12.jpg" width=480>\n</CENTER> </html>\n2. 중앙 화면(우측으로 이동 가능) \n&nbsp; &nbsp; ▷ 관청 : 백성들에게 받은 퀘스트(느낌표 말풍선)를 확인할 수 있습니다. \n&nbsp; &nbsp; ▷ 병영 : 영지 방어를 위해 강화할 수 있습니다. \n&nbsp; &nbsp; ▷ 국고 : 세금 징수를 통해 골드를 수급할 수 있습니다. \n&nbsp; &nbsp; ▷ 등용소 : 부관을 거래할 수 있습니다. \n&nbsp; &nbsp; ▷ 교습소 : 부관을 강화할 수 있습니다.\n&nbsp; &nbsp; ▷ 농장 : 군량미를 수확할 수 있습니다. \n&nbsp; &nbsp; ▷ 상회 : 상납금 징수를 통해 골드를 수급할 수 있습니다. \n\n3. 우측 화면 \n&nbsp; &nbsp; ▷ 전적 기록을 확인 하실 수 있습니다. \n\n4. 하단 화면 \n&nbsp; &nbsp; ▷ 수도의 간략한 정보를 제공합니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area03.png" width=480> <br>\n<느낌표 말풍선 터치 시> <br>\n<br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area04.png" width=480> <br>\n<관청> <br>\n<br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area05.png" width=480> <br>\n<병영> <br>\n<br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area06.png" width=480> <br>\n<국고> <br>\n<br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area07.png" width=480> <br>\n<교습소> <br>\n<br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area08.png" width=480> <br>\n<등용소> <br>\n<br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area09.png" width=480> <br>\n<농장> <br>\n<br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area10.png" width=480> <br>\n<상회> <br>\n</CENTER> </html>\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_area11.png" width=480>\n</CENTER> </html>\n5. 수도를 제외한 영지 \n&nbsp; &nbsp; ▷ 시나리오로 획득한 영지 중 수도를 제외한 영지에도 부관을 임명할 수 있습니다. \n&nbsp; &nbsp; ▷ 이 곳에 임명된 부관은 영웅과 각 영토 방어에 버프를 제공합니다.\n\n
<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_store01.png" width=480>\n</CENTER> </html>\n1. 부관 뽑기 : 유료 캐시와 게임 캐시, 우정 포인트로 부관을 획득할 수 있습니다. \n2. 그 외 보옥(유료 캐시), 군량미(행동력), 금(게임 캐시), 기타를 구매할 수 있습니다.\n\n
<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_scenario01.png" width=480> <br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_scenario02.jpg" width=480> <br>\n</CENTER> </html>\n1. 일반 모드 \n&nbsp; &nbsp; ▷ 삼국지의 스토리를 따라가는 시나리오 모드로 각 시나리오 마다 10개 이상의 스테이지가 존재합니다. \n&nbsp; &nbsp; ▷ 행동력인 군량미를 소모하여 스테이지에 참여할 수 있습니다. \n&nbsp; &nbsp; ▷ 각 스테이지를 클리어하면 경험치, 골드, 재료, 부관을 획득할 수 있습니다. \n&nbsp; &nbsp; ▷ 앞 장을 클리어하면 다음 장이 자동으로 해금됩니다. \n&nbsp; &nbsp; ▷ 1장을 클리어하면 어려움 모드가 해금됩니다. \n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_scenario03.png" width=480> <br>\n</CENTER> </html>\n2. 어려움 모드 \n&nbsp; &nbsp; ▷ 일반 모드보다 난이도가 높지만 경험치와 골드 획득량이 많고 승급 시 필요한 인장을 획득할 수 있습니다. \n&nbsp; &nbsp; ▷ 인장 : 2차 승급(2성→3성) 시 필요한 재료로 각 진영 별로 나뉘어져 있습니다. 승급을 위해서는 해당 진영의 인장을 획득해야 합니다. \n&nbsp; &nbsp; ▷ 인장 이미지는 가이드에서 [장비]-[기타] 참조 \n\n
<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_combat01.png" width=480>\n</CENTER> </html>\n1. 이동 \n&nbsp; &nbsp; ▷ 전,후,좌,우로 조작 가능합니다. \n&nbsp; &nbsp; ▷ 기본 공격으로 연속 타격 모션이 있습니다. \n&nbsp; &nbsp; ▷ 스킬 공격으로 각 쿨타임이 존재합니다. \n&nbsp; &nbsp; ▷ 구르기로 회피할 수 있습니다. \n&nbsp; &nbsp; ▷ 자동 전투 : 네비게이션에 따라 자동으로 전투합니다. \n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_combat02.png" width=480>\n</CENTER> </html>\n&nbsp; &nbsp; ▷ 자동스킬 : 스테이지 1번 클리어 후 구현되며, 네이게이션에 따라 스킬을 사용하며 자동으로 전투합니다.\n&nbsp; &nbsp; ▷ 필살 : 필살 스킬을 사용 할 수 있습니다.\n\n2. 부관 \n&nbsp; &nbsp; ▷ 부관이 함께 전투에 참여하면 부관의 능력치에 따라 영웅에게 버프 효과를 줍니다. \n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_combat03.png" width=480>\n</CENTER> </html>\n3. 오브젝트 \n&nbsp; &nbsp; ▷ 항아리 : 말을 부르는 마패 / 회복할 수 있는 음식 / 아이템 및 골드 등이 숨겨져 있습니다. \n&nbsp; &nbsp; ▷ 장애물 : 기본 공격으로 장애물을 파괴해 앞으로 진행할 수 있습니다. \n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_combat04.png" width=480>\n</CENTER> </html>\n4. 보스 \n&nbsp; &nbsp; ▷ 각 스테이지마다 존재하는 보스로써 강력한 힘과 높은 체력을 보유하고 있습니다. \n&nbsp; &nbsp; ▷ 힘겨루기 : 근접 공격 시 랜덤으로 발동되며 힘겨루기 스킬이 높고 영웅의 능력치가 높을수록 승리할 가능성이 높습니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_combat05.png" width=480>\n</CENTER> </html>\n5. 승리 보상 \n&nbsp; &nbsp; ▷ 스테이지에서 획득한 보상 외 승리 보상을 선택할 수 있습니다. \n&nbsp; &nbsp; ▷ 재뽑기를 통해 다른 보상을 택할 수 있습니다.\n\n
<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_upgrade01.png" width=480> <br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_upgrade02.jpg" width=480>\n</CENTER> </html>\n1. 승급\n&nbsp; &nbsp; ▷ 무기 / 장신구를 영웅 승급 조건에 맞게 모두 승급하시면 메인 화면에 승급 버튼이 활성화 됩니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_upgrade03.png" width=480> \n</CENTER> </html>\n2. 승급\n&nbsp; &nbsp; ▷ 승급 조건 달성 후 영웅 승급 버튼을 누르시면 일정 골드를 소모하여 영웅이 승급 됩니다.\n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_upgrade04.png" width=480> \n</CENTER> </html>\n3. 승급\n&nbsp; &nbsp; ▷ 영웅 승급은 총 5차 승급까지가능합니다.\n&nbsp; &nbsp; ▷ 영웅 승급 시 능력치와 코스트가 올라가고 외형 변화가 있습니다.\n\n
<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_adjutant01.jpg" width=480> <br>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_adjutant03.jpg" width=480>\n</CENTER> </html>\n1. 부관의 종류 \n&nbsp; &nbsp; ▷ 부관은 총 300여 종 이상으로 2성부터 6성까지 다양하게 준비되어 있습니다. \n&nbsp; &nbsp; ▷ 추후 업데이트를 통해 지속적으로 나올 예정입니다. \n\n2. 부관 획득 방법 \n&nbsp; &nbsp; ▷ 부관은 상점에서 뽑기나 시나리오에서 승리 보상을 통해 획득 가능하고 등용소에서도 획득하실 수 있습니다. \n\n3. 부관의 용도 \n&nbsp; &nbsp; ▷ 전투에 함께 참여할 수 있습니다. \n&nbsp; &nbsp; ▷ 수도나 영지에 및 무관 / 문관 / 책사 / 보좌로 임명해 영웅과 영토에 버프를 줄 수 있습니다. \n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_adjutant02.jpg" width=480>\n</CENTER> </html>\n4. 부관 합성 \n&nbsp; &nbsp; ▷ 부관이 Lv.10(Max)이 되면 합성할 수 있습니다. \n&nbsp; &nbsp; ▷ 합성에 필요한 부관 역시 Lv.10이어야 하며 같은 등급의 부관이어야 합니다. \n&nbsp; &nbsp; ▷ 각 등급별 합성에 필요한 부관의 수(본인 제외)는 아래와 같습니다. \n| 1성 ~2성 | 3성 ~ 4성 | 5성 |\n| +1장 | +2장 | +3장 |\n&nbsp; &nbsp; ▷ 부관 합성을 하면 한 단계 상위 등급의 부관을 랜덤으로 획득할 수 있습니다.\n&nbsp; &nbsp; ▷ 합성을 시도할 경우 실패 없이 100% 성공합니다.\n&nbsp; &nbsp; ▷ 동일한 부관으로만 합성을 진행 할 시 동일한 부관으로 진화 됩니다.\n\n5. 부관 귀속 시스템 \n&nbsp; &nbsp; ▷ 부관을 한 번이라도 이용하면 귀속되기 때문에 주의하셔야 합니다. \n&nbsp; &nbsp; &nbsp; &nbsp; * 이용 : 전투 참가, 퀘스트 위임, 영지 관직 임명 등 귀속 시 경매장에서 거래가 불가능합니다.\n\n
<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_dominion01.png" width=480>\n</CENTER> </html>\n1. 매칭 \n&nbsp; &nbsp; ▷ 시나리오 2-1을 클리어해야 영지 점령전을 할 수 있습니다. \n&nbsp; &nbsp; ▷ 지도에서 자신의 영토 주변 빨간 색 영토를 공격할 수 있습니다. \n&nbsp; &nbsp; ▷ 빨간 색 영토를 클릭하면 그 영토를 보유한 유저들의 목록을 확인할 수 있습니다. \n&nbsp; &nbsp; ▷ 알맞은 상대를 찾아 공격할 수 있고 승리하면 영토를 획득하게 됩니다. \n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_dominion02.png" width=480>\n</CENTER> </html>\n2. 영지 점령전 \n&nbsp; &nbsp; ▷ 천하통일을 위해 영토를 뺏고 뺏기는 전투를 영지 점령전이라고 합니다. \n&nbsp; &nbsp; ▷ 자신의 영지에 침공이 왔을 때 푸쉬 알람으로 알려줍니다. \n&nbsp; &nbsp; ▷ 방어자 : 영지 점령전이 시작되면 두 가지 방법으로 대응할 수 있습니다. \n&nbsp; &nbsp; &nbsp; &nbsp; 1) 직접전투(실시간 PVP) \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - 전투에 참여하여 본인이 보유한 영웅과 현재 장착하고 있는 부관으로 방어를 할 수 있습니다. \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - 시간이 다소 흘러도 영지 침공 텍스트가 노출되고 있으면 전투 중이니 참여할 수 있습니다. \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - 실시간 PVP를 진행해서 승리하면 방어에 성공합니다. \n&nbsp; &nbsp; &nbsp; &nbsp; 2) 전투위임 \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - 본인이 보유한 영웅과 장착 중인 부관이 전투하는 것은 직접전투와 동일하지만, 전투가 자동으로 이루어집니다. \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - 전투 상황을 이미지로 대체하여 결과만 확인할 수 있습니다. \n&nbsp; &nbsp; &nbsp; &nbsp; 3) 부관 방어 \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - 유저가 위 두 가지 방법을 사용하지 않으면 침공당한 영토에 임명한 부관들이 자동으로 방어합니다. \n&nbsp; &nbsp; ▷ 공격 \n&nbsp; &nbsp; &nbsp; &nbsp; 1) 최초에 시나리오 모드와 동일하게 해당 영지의 병사들과 부관들을 처치하면 승리하고 영지를 획득합니다. \n&nbsp; &nbsp; &nbsp; &nbsp; 2) 타 유저가 실시간으로 방어를 하러 오면 기존에 전투 중이던 병사와 부관은 사라지고 타 유저와 PVP를 진행하게 됩니다. 승리 시 영토를 획득합니다. \n\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_dominion03.png" width=480>\n</CENTER> </html>\n3. 작위 \n&nbsp; &nbsp; ▷ 영토 보유 개수에 따라 작위가 부여됩니다. \n\n
!!! 부관 정보\n+++[1장 황천의 광풍]\n| 이름 | 등급 | 공격력 | 체력 | 방어력 | 사거리 || 통솔 (보좌) | 무력 (무관) | 지력 (책사) | 정치 (문관) |\n| | | 스킬 1 | | | || 팀 효과 | | | |\n| !고승 | 1 | 109 | 1,103| 41 | 4 || 19 | 21 | 12 | 14 |\n|~| 2 | 149 | 1,929| 54 | 4 || 23 | 25 | 14 | 17 |\n| | | 갑옷 파괴 | | | || | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 황건의 무장. 장보의 부장으로 주준과 유비가 쳐들어왔을 때 장보의 명령으로 선봉을 맡아 곡양에서 싸움을 걸었으나 장비에게 몇 합만에 죽음을 당한다. === |\n| !공도 | 1 | 101 | 1,054| 40 | 4 || 17 | 20 | 13 | 14 |\n|~| 2 | 140 | 1,823| 52 | 4 || 20 | 24 | 16 | 17 |\n| | | 갑옷 파괴 | | | || | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 황건의 무장. 황건의 난 이후에도 유벽과 함께 여남에서 세력을 쌓는다. 원소와 조조가 싸울 때 유비에게 호흥하여 조조를 공격하였다. === |\n| !등무 | 1 | 93 | 985| 39 | 2 || 15 | 19 | 13 | 12 |\n|~| 2 | 136 | 1,736| 50 | 2 || 19 | 24 | 16 | 15 |\n| | | 강타 | | | || 단역의 비애 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 황건의 무장. 정원지의 부장으로 5만의 군사로 탁군에 쳐들어 왔다가 장비에게 죽음을 당한다. === |\n| !손하 | 1 | 102 | 1,062| 40 | 15 || 18 | 20 | 14 | 13 |\n|~| 2 | 141 | 1,843| 53 | 15 || 22 | 24 | 17 | 16 |\n| | | 둔화사격 | | | || 의리의 단역 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 황건의 무장. 황건적의 난 때 완성을 점검하면서 주준에 맞서 싸웠지만 손견의 공격을 받아 완성이 함락되자 도망치다 정산에서 추격당하여 베어진다. === |\n| !유벽 | 1 | 105 | 1,071| 41 | 15 || 20 | 20 | 15 | 10 |\n|~| 2 | 145 | 1,862| 55 | 15 || 24 | 24 | 18 | 12 |\n|~| 3 | | | | || 31 | 31 | 23 | 16 |\n| | | 빙결 | | | ||불굴의 황건적 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 황건의 무장. 황소, 하의, 하만 등과 함께 여남, 영천에서 할거했다. 원술과 손견에게 호응하여 지원을 받다 196년 조조의 공격을 받아 참수 되었다. === |\n| !장각 | 2 | 126 | 2,212| 62 | 15 || 30 | 17 | 25 | 25 |\n| | | 황천의 바람 | 변심 | 창천이사 | || 천지인 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 수만명의 신도를 모아 조직화 하여 184년에 한 왕조 타도를 기치로 거병하였으며 순식간의 8주에 영향을 끼쳐 세력을 장악하였다. 노식, 동탁이 이끄는 관군에 대항해 우세하게 싸웠으나 곧 병사하였다. === |\n| !장보 | 2 | 123 | 1,997| 58 | 15 || 26 | 18 | 22 | 20 |\n|~| 3 |\n|~| 4 | | | | || 41 | 26 | 24 | 31 |\n| | | 황천의 불꽃 | 낙석 | | || 천지인 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 황건적의 난을 일으킨 장각의 동생으로 스스로 (지공 장군)이라 칭했다. 주준, 유비에 맞서 요술을 사용했지만 이내 요술이 깨져 양성으로 후퇴했으며 부하 장수인 엄정에게 목이 잘려 죽었다. === |\n| !장량 | 2 | 146 | 1,957| 55 | 4 || 24 | 24 | 20 | 18 |\n|~| 3(이) | 266 | 4,300| 104 | 4 || 29 | 29 | 24 | 22 |\n|~| 4(이) | 545 | 10,332| 224 | 4 || 37 | 37 | 30 | 27 |\n| | | 장군의 위세 | 검기 | | || 천지인 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 황건적의 난을 일으킨 장각의 셋째 동생. 스스로 (인공장군)이라 칭했다. 장각과 함께 노식과 동탁의 공격을 물리치고 장각이 병사 한 뒤에도 광종을 지키면서 항보숭을 물리 쳤으나 적을 깔보다 야습을 받아 전사한다. === |\n| !정원지 | 1 | 104 | 1,074| 40 | 4 || 16 | 20 | 12 | 13 |\n|~| 2 | 144 | 1,848| 54 | 4 || 19 | 24 | 14 | 16 |\n| | | 강타 | | | || 단역의 비애 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 황건의 무장. 등무와 함께 5만의 군사로 탁군에 쳐들어 왔다가 관우에게 죽음을 당한다. === |\n| !파재 | 1 | 99 | 1,067| 40 | 4 || 16 | 19 | 14 | 14 |\n|~| 2 | 138 | 1,837| 53 | 4 || 19 | 23 | 17 | 17 |\n| | | 독강타 | | | || | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 황건의 거사 중 한 명. 영천에서 주준이 이끄는 관군을 격파하고 황보숭의 군사를 포위하였으나 황보숭의 화공과 주준, 조조, 손견군의 연합 공격을 받아 패했다. === |\n| !하의 | 1 | 96 | 1,089| 42 | 4 || 18 | 18 | 15 | 14 |\n|~| 2 | 136 | 1,887| 55 | 4 || 22 | 22 | 18 | 17 |\n| | | 독화살 | | | || 불굴의 황건적 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 황건의 무장. 유벽, 황소, 하만 등과 함께 여남, 영천에서 큰 세력을 만들었으며 수만명의 군사를 거느리고 원술에게 귀부했다가 손견에게 귀부하였다. === |\n| !한충 | 1 | 110 | 1,149| 43 | 2 || 20 | 20 | 15 | 13 |\n|~| 2 | 152 | 2,004| 58 | 2 || 24 | 24 | 18 | 16 |\n|~| 3 | | | | || 30 | 30 | 23 | 19 |\n| | | 방패 후려치기 | | | || 의리의 단역 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 황건의 무장. 완성을 점거하면서 주준을 이끄는 관군들과 싸웠지만 조홍이 전사하자 그가 수령이 되어 완성을 탈취하였다. 성밖으로 공격하러 나왔다가 관군에 격파 되어 항복했지만 남양태수 진힐에게 죽임을 당한다. === |\n| !밀우 | 5 | 1,145 | 22,860| 466 | 3 || 69 | 75 | 33 | 26 |\n| | | 화궁 | 난사 | 결사 | || 개마무사 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[열전] 고구려 동천왕의 무장. 위나라 관구검 부대에 맞서 싸웠다. 관구검에게 패해 퇴각하는 동천왕을 지키기 위해 결사대를 조직하여 동천왕을 가까스로 지킨다. 훗날 동천왕은 목숨을 걸고 자신을 지킨 밀우에게 1등 동신록을 내렸다. === |\n\n| 팀 효과 |>|>|>|>|>| 구성 | 효과 |\n| 개마무사 | 고남무 | 고우위거 | 명림답부 | 을파소 | 밀우 | |공격력 증가 + 20%, 방어력 증가 + 15%, 체력 증가 + 20%,<br> 공격속도 + 15%, 상태이상 저항 + 25% |\n| 단역의 비애 | 등무 | 정원지 | | | | |공격력 증가 + 10% |\n| 불굴의 황건적 | 유벽 | 하의 | 황소 | 하만 | | |공격력 증가 + 25%, 방어력 증가 + 25%, 체력 증가 + 25%, 공격속도 + 15%, 상태이상 저항 +50% |\n| 의리의 단역 | 한충 | 손하 | | | | |공격력 증가 - 10%, 체력 증가 + 30% |\n| 천지인 | 장보 | 장량 | 장각 | | | |공격력 증가 + 5%, 체력 증가 + 25%, 상태이상 저항 + 5% |\n===\n\n++++[2장 동탁 토벌전]\n| 이름 | 등급 | 공격력 | 체력 | 방어력 | 사거리 || 통솔 (보좌) | 무력 (무관) | 지력 (책사) | 정치 (문관) |\n| | | 스킬 1 | | | || 팀 효과 | | | |\n| !가후 | 3 | 172 | 3,963 | 90 | 15 || 24 | 16 | 41 | 39 |\n| | | 스킬1 | | | || 신뢰의 관계 | 군략가 | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !곽사 | 2 | 156 | 2,114 | 59 | 3 || 26 | 24 | 20 | 18 |\n|~| 3 | 279 | 4,601 | 111 | 3 || 31 | 29 | 24 | 22 |\n| | | 스킬1 | | | || 기회의 사나이 | 요행의 상징 | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !동민 | 1 | 100 | 1,077 | 40 | 3 || 17 | 20 | 12 | 17 |\n|~| 2 | 134 | 1,931 | 53 | 3 || 19 | 22 | 17 | 24 |\n|~| 3 | 264 | 4,400 | 100 | 3 || 25 | 29 | 20 | 29 |\n| | | 스킬1 | | | || 가문의 위상 | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !동탁 | 3 | 372 | 5,619 | 127 | 3 || 39 | 41 | 24 | 25 |\n|~| 4 |\n|~| 5(합) | 1,081 | 23,194 | 459 | 3 || 56 | 59 | 35 | 36 |\n| | | 스킬1 | | | || 가문의 위상 | 삼각관계 | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !번조 | 1 | 100 | 1,896 | 41 | 15 || 19 | 19 | 13 | 15 |\n|~| 2 | 145 | 2,005 | 55 | 15 || 24 | 24 | 18 | 21 |\n|~| 3 | 264 | 4,415 | 104 | 15 || 29 | 29 | 22 | 25 |\n| | | 스킬1 | | | || 기회의 사나이 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !서영 | 2 | 192 | 2,254 | 62 | 4 || 30 | 31 | 24 | 14 |\n|~| 3 | 342 | 4,991 | 120 | 4 || 36 | 37 | 29 | 17 |\n| | | 스킬1 | | | || | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !양봉 | 1 | 100 | 1,037 | 40 | 3 || 17 | 20 | 11 | 13 |\n|~| 2 | 146 | 1,886 | 53 | 3 || 21 | 15 | 16 | 18 |\n|~| 3 | 298 | 4,498 | 106 | 3 || 28 | 34 | 19 | 22 |\n| | | 스킬1 | | | || | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !여포 | 3 | 489 | 6,171 | 141 | 4 || 41 | 55 | 17 | 12 |\n|~| 4(진) | 943 | 14,167 | 298 | 4 || 49 | 70 | 20 | 14 |\n| | | 스킬1 | | | || 동탁선봉대 | 삼각관계 | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !우보 | 1 | 118 | 1,116 | 40 | 3 || 18 | 23 | 13 | 14 |\n|~| 2 | 159 | 1,948 | 54 | 3 || 22 | 28 | 16 | 17 |\n|~| 3 | 313 | 4,532 | 106 | 3 || 28 | 36 | 19 | 20 |\n| | | 스킬1 | | | || 가문의 위상 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !이각 | 2 | 156 | 2,054 | 55 | 15 || 24 | 26 | 17 | 21 |\n|~| 3 | 325 | 4,935 | 115 | 15 || 34 | 36 | 17 | 21 |\n| | | 스킬1 | | | || 기회의 사나이 | 요행의 상징 | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !이숙 | 1 | 59 | 933 | 37 | 15 || 15 | 12 | 21 | 18 |\n|~| 2 | 89 | 1,593 | 48 | 15 || 18 | 14 | 25 | 22 |\n|~| 3 | 180 | 3,610 | 88 | 15 || 23 | 18 | 33 | 28 |\n| | | 스킬1 | | | || | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !이유 | 2 | 81 | 1,589| 48 | 15 || 18 | 12 | 38 | 25 |\n|~| 3 | 163 | 3,477| 84 | 15 || 22 | 15 | 46 | 30 |\n|~| 4(진) | 330 | 7,984| 169 | 15 || 26 | 18 | 55 | 36 |\n| | | 스킬1 | | | || | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !장수 | 2 | 136 | 2,109| 58 | 3 || 28 | 21 | 21 | 24 |\n|~| 3 | 248 | 4,672 | 111 | 3 || 34 | 25 | 25 | 29 |\n|~| 4(이) | 404 | 8,976 | 193 | 3 || 40 | 30 | 30 | 35 |\n| | | 스킬1 | | | || 신뢰의 관계 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !장제 | 2 | 137 | 1,990| 57 | 4 || 26 | 22 | 17 | 19 |\n|~| 3 | 257 | 4,631| 115 | 4 || 35 | 26 | 20 | 23 |\n| | | 스킬1 | | | || 기회의 사나이 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !초선 | 2 | 63 | 1,445| 45 | 3 || 16 | 9 | 39 | 24 |\n|~| 3 | 133 | 3,222| 81 | 3 || 20 | 11 | 48 | 30 |\n| | | 스킬1 | | | || 삼각관계 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !호진 | 1 | 124 | 1,149 | 41 | 3 || 20 | 24 | 11 | 12 |\n|~| 2 | 169 | 2,016 | 57 | 3 || 24 | 29 | 13 | 14 |\n|~| 3 | 327 | 4,710 | 111 | 3 || 31 | 37 | 16 | 17 |\n| | | 스킬1 | | | || 동탁선봉대 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !화웅 | 3 | 347 | 4,838 | 111 | 4 || 30 | 40 | 21 | 20 |\n| | | 스킬1 | | | || 동탁선봉대 | 명성의 희생사 | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n| !고우위거 | 5 | 1,428 | 27,217| 540 | 3 || 66 | 82 | 30 | 26 |\n| | | 스킬 1 | | | || 개마무사 | | | |\n|~|>|>|>|>|>|>|>|>|>|+++[특성] 내용 1 <br> 내용 2 === |\n\n| 팀 효과 |>|>|>|>|>| 구성 | 효과 |\n| 가문의 위상 | 동탁 | 동민 | 우보 | | | |공격력 증가 - 15 %, 방어력 증가 - 10 %, 체력 증가 + 60 % |\n| 군략가 | 정욱 | 가후 | 곽가 | | | |공격력 증가 + 8 %, 방어력 증가 + 5 %, 체력 증가 + 5 % |\n| 기회의 사나이 | 장제 | 이각 | 곽사 | 번조 | | |공격력 증가 + 15 %, 방어력 감소 - 10 %, 체력 증가 + 30 %, 공격 속도 + 15 % |\n| 동탁선봉대 | 호진 | 여포 | 화웅 | | | |공격력 증가 + 15%, 방어력 증가 + 15%, 체력 증가 + 15% |\n| 명성의 희생자 | 화웅 | 안량 | 문추 | | | |공격력 증가 + 13 %, 방어력 증가 + 13 %, 체력 증가 + 13 % |\n| 삼각관계 | 여포 | 동탁 | 초선 | | | |공격력 증가 + 8 %, 체력 증가 + 8 %, 상태이상 저항 + 15 % |\n| 신뢰의 관계 | 장수 | 가후 | | | | |체력 증가 + 30 %, 상태이상 저항 + 30 % |\n| 요행의 상징 | 이각 | 곽사 | | | | |공격력 증가 + 15 %, 체력 증가 + 20 %, 공격속도 + 30 % |\n===\n\n!!! 색인\n+++!!![>1장 황천의 광풍]\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_Scenario_Adjutant_01.jpg" width=480>\n</CENTER> </html>\n===\n+++!!![>2장 동탁 토벌전]\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_Scenario_Adjutant_02.jpg" width=480>\n</CENTER> </html>\n===\n+++!!![>3장 하북 패권전]\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_Scenario_Adjutant_03.jpg" width=480>\n</CENTER> </html>\n===\n+++!!![>4장 맹호 승천]\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_Scenario_Adjutant_04.jpg" width=480>\n</CENTER> </html>\n===\n+++!!![>5장 보수 설한]\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/HB_world_Scenario_Adjutant_05.jpg" width=480>\n</CENTER> </html>\n===\n\n
불교에서는 우주의 시간을 3대겁(三大劫)으로 나눈다.\n* 장엄겁(莊嚴劫) ; 과거불의 시대 ⇔ 현겁(賢劫) ; 현재불의 시대 ⇔ 성수겁(星宿劫) ; 미래불의 시대\n** 장엄겁의 삼불(三佛) ; 비바시불(毘婆尸佛), 시기불(尸棄佛), 비사부불(毘舍孚佛)\n** 현겁의 사불(四佛) ; 구류손불(拘留孫佛), 구나함모니불 (俱那含牟尼佛), 가섭불(迦葉佛), 석가모니불(釋迦牟尼佛)\n\n석존의 제자는 크게 두 부류로 나눌 때, 성문제자와 보살제자로 된다.\n* 성문제자 ; 소승의 제자로 생사해탈을 성취했지만 성불할 수는 없는 작은 법, 얕은 법을 얻은 제자들\n** 수다원(須陀洹) ; 입류(入流)\n** 사다함(사陀含) ; 일래과(一來果)\n** 아나함(阿那含) ; 불퇴과(不退果 또는 不還果) - 위의 3과는 아직 배우고 닦을것이 남아 있는 유학인(有學人)\n** 아라한(阿羅漢) ; 응공(應供 :또는 無學) - 더 배우고 더 닦을 것이 없는 무학인(無學人)\n* 보살제자 ; 대승의 제자로 생사해탈에 그치지 않고 보살행을 통해 부처를 이룰 수 있는 크고 깊은 법을 실천 수행하는 제자들
* Q-Dir ; 윈도우 탐색기 4개를 동시에 보여주는 프로그램 (사용 메모리에 주의)\n\n!!! 관리프로그램\n@@color(#04f): ▣ SIMS @@ (공용 정보 관리 시스템) &nbsp; &nbsp; @ 2015-09-09 @\nshared information management system\ncf. Cbase 운영체계 - Call play를 지칭, 온라인 및 전화 상담툴을 일원화된 시스템으로 구축하여 개별 히스토리 확인을 통한 고객 서비스 개선\n\n
++++[2015.10. 메모]\n| !구분 | !내용 | !비고 |\n|http://jtbc.joins.com/ | z***9** | jt**9* |\n|d5.gandromeda.com/main/ | gan** | gan**9* |\n|https://www.pathofexile.com/ | b~@n~.com / pa**9* |17.03.16. GandaGo |\n===\nhttp://www.nunauri.com/ h*-m* nuna*9 >> 2017.02.11 \n\n+++[2015.09. 나무]\n| !이름 | !번호 | !참고 | | |\n| 사이버연수원 | 한국HDR 협회 인재개발원 <br> http://www.khrdedu.com/ | w****l**e|han***9* |http://t3hbs.khrdedu.com/main/login.jsp |\n| CJ ONE | 7703-0201-8828-4396 | z***b**k|#cj***9* |http://www.cjone.com/ |\n| LG TeleCom | 2013-0160-9597-3037 | w****l**e|mob*le9* |2016.07.08.재발급 |\n|~| 2013-0159-0195-9026 | | |2016.06.07.재발급 / 카드 미배송 |\n|~| 2002-0157-9271-2013 | | |2004.05.11.발급 / 카드 노후 |\n|~| U+Zone|00-13-E8-92-D6-D3 |at***@upluszone | |\n|~|~|A4-EB-D3-F4-FC-93 |~|~|\n| OK Cashbag | 1019-****-0721-6252 | z***9**|c***b*g** | |\n| L.Point | 8710-4009-3823-7266 | bis***@n****.c**|#lo***9* |모바일 바코드 / lpoint9* |\n| Happy point | 8231-1234-3732-7951 | bis***|@ha***9* | |\n\n| !이름 | !참고 | | |\n| LG U+ | bis***_at_n****.c**|#*mob***9* |http://www.uplus.co.kr |\n| 한빛온 (로그호라) | gangig*|han***9* |http://www.hanbiton.com |\n| 아이코다(주) | wat******|i****9* |http://www.icoda.co.kr |\n| GS리테일 | z***c***|#p**c***9* |http://www.gsretail.com |\n| GS Shop | wat******|1*** |http://www.gsshop.com |\n| 팝 카드 | b~|#p**c***9* |http://www.popcard.co.kr |\n| 부산은행 | b~|ba**9* |https://ibank.busanbank.co.kr |\n| 우리은행 | b~|woo~9* |https://www.wooribank.com |\n| BCc_ | wat******|bc****9* | |\n| 신한c_ | z***c***|shin***9* | |\n| 현대c_ | z***92*|#*c***9* |https://www.hyundaicard.com/ |\n| 신세계 | bis***|ss*c**9* |http://www.ssg.com/ |\n| 신세계면세점 | bis***|shins****9* |http://www.ssgdfs.com/shop/main |\n| 롯데면세점 | bis***_at_n****.c**|#lo***9* |http://www.lottedfs.com |\n| 알라딘서점 | z***b***|a~9* |https://www.aladin.co.kr/ |\n\n| !구분 | !내용 | !비고 |\n|Google 로그인 계정 | b~_at_em~.*** | g~9* |\n|Adobe 로그인 계정 (2015.12.08.) | b~_at_naver.*** | Effect** |\n===\n\n+++[2015.10. 가]\n| !구분 | !입력 | !내용 | !참고 | ! |\n| 국세청홈텍스 |현금영수증 카드 등록 | wat******|#home***9* |https://www.hometax.go.kr/ |\n| 국세청 |개인통관고유번호 | P16공공14272254|pUNI-PASS |https://unipass.customs.go.kr/csp/persIndex.do <br> 2016.07.08.(금) 발급 |\n| 코레일_미 |123**69517 | bl**h*****| |http://www.letskorail.com |\n| ZER0_미 |949*1916888*42*7 | ziny9**|#h***d*9* |https://www.hyundaicard.com (161007/ 56**) |\nhttp://www.ksilbo.co.kr/news/articleView.html?idxno=83076 - [집성촌을 찾아서]범서읍 두산리(옥산전씨)\nhttp://blog.daum.net/jsoohyung - 소리곳 jsoohyung / qq__45__\nhttp://cafe.naver.com/ultramen - 육천기 __ / qq__#_ (cf. 2017.05.24. 폐쇄 예정)\n===\n\n+++[2015.10. 가_15 ; 국민연금 추가납입으로 사용]\n| !구분 | !입력 | !내용 | !참고 | !&nbsp; |\n| !18.03.20.| !4,4000..| !- 4,477,500|!≒ 0 |!50_국민연금추가납입 |\n| !-> 18.10.23.| ≒ 4,400...| | NB1 |복리식정기예탁금 |\n| !18.02.23.| 8,814,340| - 4,477,500|= 4,336,840 |50_국민연금추가납입 |\n| !-> 18.04.28.| !8,800...| !(+200...) | !NB1 |!1개 계좌로 관리 |\n| !16.01.28.(-> 17.01.28.) | !6,000...| !∑ 8,600... | !NB1 | ! |\n|~| !2,600...| ! | !NB2 | ! |\n|!15.10.02. | !3,000...| !3,000... | !(NB2) | ! |\n|!14.07.20. | !5,000...| ! | ! | ! |\n|!(14.07.21.) | !+ 300...| !5,300... | !(NB1) | ! |\n===\n\n+++[2017.05. 가_17]\n| !구분 | !입력 |>|>|>| !내용 | !참고 |\n| 17.07.15. | 60,_ |>|>|>|월 50만원 |17.04.01. to 미 |\n| ! | ! |!10,_ | ! |!전세 |!to 미 | ! |\n| ! | ! |!10,_ | ! |!예금 |!to 미 | ! |\n| ! | !40,_ | ! | !from 미|!부산 | ! | ! |\n| ! | !40,_ | ! | !from 미|!부산 | ! | ! |\n|>|>|>|>|\n| 17.05.09. | 40,_ | | from 수|40,_ (IBK) | | |\n| 17.05.08. | 70,_ | | from 수|30,_ (NB) |40,_ to ● |일부 상환 |\n| | 11.11. | 30,4_ | |(NB) | |+ 200,000 |\n| | 05.10. | 30,_ | |(NB) | | |\n| ! | !05.10. | !20,_ | !from ●|!국민_박 |!to ● | ! |\n| ! | !05.09. | !10,_ | !from ●|!부산_전 |!to ● | ! |\n| ! | !05.09. | !10,_ | !from ●|!국민_박 |!to ● | ! |\n===\n
| 스킬 | 설명 |\n| 갑옷 파괴 |데미지를 입히며, 일정 시간동안 방어력을 감소시킨다. |\n| |고승1, 공도1 |\n| 강타 |연속으로 3회 찌르며 피해를 입힌다. |\n| |정원지1 |\n| 강타 |적을 강타하여 피해를 입히고 상대를 뒤로 밀쳐낸다. |\n| |등무1 |\n| 검기 |전방의 적에게 검기를 날려 피해를 입힌다. |\n| |장량2 |\n| 결사 |고구려 결사대를 일정시간 동안 4명을 소환한다. |\n| |밀우3 |\n| 낙석 |돌무더기를 소환, 범위 안에 낙하시켜 피해를 입힌다. |\n| |장보2 |\n| 난사 |일정시간 동안 자신의 공격속도를 일정량 만큼 상승시켜 적들에게 빠른 화살 공격을 가한다. |\n| |밀우2 |\n| 독강타 |철퇴에 독 피해를 입히며, 일정 시간 동안 피해를 입힌다. |\n| |파재1 |\n| 독화살 |독화살을 날려 피해를 입히며, 일정 시간 동안 피해를 입힌다. |\n| |하의1 |\n| 둔화사격 |데미지를 입히며, 일정 시간동안 이동속도를 감소시킨다. |\n| |손하1 |\n| 방패 후려치기 |데미지를 입히고, 일정 시간 동안 기절시킨다. |\n| |한충1 |\n| 변심 |적이 일정시간 동안 아군이 된다. |\n| |장각2 |\n| 빙결 |데미지를 입히고, 일정 시간 동안 결빙 시킨다. |\n| |유벽1 |\n| 장군의 위세 |주변의 적에게 피해를 입히고 일정 시간 동안 기절 시킨다. |\n| |장량1 |\n| 창천이사 |태수로 배치시 영지의 모든 병사들이 황건적이 된다. |\n| |장각3 |\n| 화궁 |전방에 5발의 불화살을 날려 적들에게 공격력 대비 일정량의 피해를 입히고 일정시간 동안 공격력 대비 일정량의 화상 피해를 입힌다. |\n| |밀우1 |\n| 황천의 바람 |적에게 공격력 대비 피해를 입힌다. |\n| |장각1 |\n| 황천의 불꽃 |주변의 적에게 피해를 입히고 일정 시간 동안 지속 피해를 입힌다. |\n| |장보1 |\n
!! 기타\nhttp://vessoft.kr/software/windows/download/iexplorer - Internet Explorer 다운로드\nhttp://2proo.net/1684 - 와이브로 에그 사용량 확인하는 방법\n\nMEmu App Player - 미뮤 앱플레이어는 안드로이드 가상머신의 일종 (Android emulator for PC)\n\n\n@@color(#04f): ▣ 유튜브 동영상 다운로드 @@ &nbsp; &nbsp; @ 2015-12-03 @\n1. http://en.savefrom.net/ 에서 해당 URL을 입력\n&nbsp; &nbsp; 원하는 포맷의 파일을 다운로드 ; 소리가 나오는 영상 중 가장 화질이 좋은 MP4 720p로 다운로드\n2. 동영상 URL 수정\n&nbsp; &nbsp; https://에서 s를 빼고 http://로 변경, www.youtube.com에서 ss를 넣어서 www.ssyoutube.com로 수정하면 1번 사이트로 이동\n\n@@color(#04f): ▣ inputdirector @@ &nbsp; &nbsp; @ 2016-04-01 @\n__www.inputdirector.com__ - 윈도우7까지 호환되는 KVM 소프트웨어\n\n+++[▣ Windows 7에서 Windows XP Mode 설치 및 사용 @ 2016-04-01 @ ]\n출처 ; __windows.microsoft.com/ko-kr/windows7/install-and-use-windows-xp-mode-in-windows-7__\n설치와 사용 ; __teia.tistory.com/1212__\n\n2014년 4월 8일 이후부터 PC를 보호하는 업데이트를 포함하여 Windows XP 및 Windows XP Mode에 대한 기술 지원이 중단됩니다. 이는 지원이 종료된 이후에 Windows 7 PC에서 Windows XP 또는 Windows XP Mode를 계속 사용할 경우 PC가 보안 위험 및 바이러스에 더 취약해질 수 있음을 의미합니다. \n\n따라서 지원이 종료된 이후에 Windows 7 PC에 대한 보안을 유지하려면 인터넷에 연결되지 않은 상태에서만 Windows XP Mode를 사용하는 것이 좋습니다.\n\nWindows XP Mode를 사용하면 Windows 7 Professional, Enterprise 또는 Ultimate 버전을 실행하는 컴퓨터에서 Windows XP용으로 디자인된 프로그램을 실행할 수 있습니다. Windows XP Mode는 Windows 8에서 지원되지 않습니다.\n\n''Windows XP Mode는 어떻게 작동합니까?''\n\nWindows XP Mode는 두 가지 방법, 즉 가상 운영 체제로서 및 Windows 7 내에서 프로그램을 여는 방법으로서 작동합니다. Windows XP Mode는 완전한 기능을 갖춘, 사용이 허가된 Windows XP 버전인 경우를 제외하고는 프로그램과 마찬가지로 Windows 7 데스크톱의 별도 창에서 실행됩니다. Windows XP Mode에서는 Windows XP를 실행하는 컴퓨터를 사용하는 것처럼 실제 컴퓨터의 CD/DVD 드라이브에 액세스하고, 프로그램을 설치하며, 파일을 저장하고, 다른 작업을 수행할 수 있습니다.\n\nWindows XP Mode에서 프로그램을 설치하면 프로그램이 프로그램의 Windows XP Mode 목록과 프로그램의 Windows 7 목록에 모두 나타나므로 Windows 7에서 직접 프로그램을 열 수 있습니다.\n\n''참고''\n\nWindows Vista 및 Windows XP와 호환되는 대부분의 프로그램은 Windows 7에서 잘 실행됩니다. 프로그램이 제대로 실행되지 않을 경우 먼저 프로그램 호환성 문제 해결사를 시도해 볼 수 있습니다. 프로그램 호환성 해결사는 모든 Windows 7 버전에 포함되어 있습니다. 자세한 내용은 프로그램 호환성 문제 해결사 열기을 참조하십시오. \n\nWindows 7에서 작동하는 일부 하드웨어와 장치가 Windows XP Mode에서는 검색되지 않거나 작동하지 않을 수도 있습니다.\n\nWindows XP Mode는 기본적으로 Windows XP에서 Windows 7으로 전환하는 기업을 지원하기 위해 디자인되었습니다. 이 모드는 3D 게임과 같이 그래픽 사용량이 많은 프로그램에 맞게 최적화되지 않았으며 TV 튜너와 같은 하드웨어 요구 사항이 있는 프로그램에도 적합하지 않습니다.\n\nWindows Media Player를 사용하여 Windows XP Mode로 음악 또는 비디오를 재생하는 동안 Windows XP Mode 창을 최대화 또는 최소화하는 경우 Windows Media Player가 재생을 중지합니다. 계속 재생하려면 Windows Media Player의 재생 단추를 클릭합니다.\n===\n\n\n
<html> <a name="Page170223"> </a> </html>\n<html>\n<a href="#Page170223_01"> #. 웹 사이트 </a> <br>\n<a href="#Page170223_04"> #. keyword </a> <br>\n<a href="#Page170223_02"> #. 생활 </a> <br>\n<a href="#Page170223_03"> #. 기록 </a> <br>\n</html>\n\n<html> <a name="Page170223_01"> </a>\n<div style="border: 1px solid #3058D2; padding: 10px;">\n<a href="#Page170223"> <span style="font-size: 14px;"> <b> #. 웹 사이트 </b> </span> </a>\n</div> </html>\n* 공공\n** http://www.apt2you.com/ - 금융결제원/ 주택청약 서비스\n** http://fine.fss.or.kr/ - 금융소비자 정보 포탈 사이트 (Financial Information Network) ; 은행, 보험사, 우체국, 미소금융중앙재단에 있는 휴면예금과 휴면 보험금을 한벙에 조회할 수 있는 사이트.\n*** https://www.cardpoint.or.kr/ - 여신금융협회, 카드 포인트 통합조회 서비스\n*** https://www.e-insmarket.or.kr/ - 보험다모아, 온라인 보험슈퍼마켓\n*** http://credit4u.or.kr/ - 크레딧포유, 신용ㆍ보험 정보 조회, 한국신용정보원이 보유하고 있는 개인의 신용정보 등을 확인하고 잘못된 정보의 정정청구도 할 수 있다.\n*** https://www.payinfo.or.kr/ - 금융결제원, 계좌정보통합관리서비스\n** http://freesis.kofia.or.kr/ - 금융투자협회, 채권수익률 공시\n** https://www.bccard.com/app/card/view/common/zipcode/newZipSearch.jsp?callbackFunc=setAddressOffice - bc카드 우편번호 검색\n\n* 스트리밍 방송\n** https://linktv.us/\n** http://bbangbbangtv.com/\n** http://www.marutv.com/\n** http://tv.hobbang.net/ - 호방넷, 무료 실시간 TV보기\n** http://www.aniwill.com/ - 애니일, 무료 일본애니\n\nhttp://www.shinboaid.co.kr/ - 경영전문지 신용사회 (주)에스비에이엠씨\nhttp://t3hbs.khrdedu.com/main/login.jsp - 한빛소프트 사이버연수원 \n\n| !주소 | !설명 | !비교 |\n| http://www.cherrybeans.co.kr/ |Caffe Cherry Beans | |\n|>|>|>| |\n| !주소 | !설명 | !비교 |\n| http://www.icoda.co.kr/ |아이코다 |컴퓨터 쇼핑몰(용산) |\n| http://www.globalbuy.co.kr/ |글로벌바이 |구매대행(무료배송) |\n|>|>|>| |\n| !주소 | !설명 | !비교 |\n| http://hnbaustralia.com.au/ |호주 종합 쇼핑몰 | |\n| http://www.theshop9.com/ |더샵나인(인테리어소품전문점) |생활/주방 > 홀더/촛대/램프 |\n| |이케아 |이케아 ROTERA 랜턴 (제품명) |\n| http://www.hiart.net/ |하이아트 |스틸초받침 |\n| |초받침 |캔들 홀더 CVE203 SPAAS 검정색 필라 촛대 |\n| http://www.cupandcup.co.kr/ |컵앤컵 - 수입 주방용품 도매, 소매 |cf. 에말리아 코니퍼 법랑머그 350 ml |\n| G마켓/ e좋은차(www.egoodtea.com) |가경 eshop - 주방용품 제수용품 |분청 둥근 오목접시형 촛대, 분청 원형 굽 촛대 |\n| http://www.cathkidstonkorea.co.kr/ |캐시키드슨 코리아 |영국 전통 컨츄리 하우스 스타일에 대한 재해석 |\n| http://blog.daum.net/_blog/BlogTypeMain.do?blogid=0ORd6 |행운의 시계(대구시계수리전문업체) |디젤 가죽밴드 교체 |\n\n\n<html> <a name="Page170223_04"> </a>\n<div style="border: 1px solid #3058D2; padding: 10px;">\n<a href="#Page170223"> <span style="font-size: 14px;"> <b> #. keyword </b> </span> </a>\n</div> </html>\n* Shader\n** http://www.bencloward.com/portfolio.shtml - BEN CLOWARD 홈페이지(Character Animator...I am a technical artist.)\n* 데이터 변환\n** https://online-audio-converter.com/ - 온라인 오디오 변경 사이트\n* 도메인 관리 (도메인 연장 비용 기준 비교)\n** 기관이전 예정 ; http://www.nunauri.com/ h*-m* nuna*9 >> 2018.04.\n** https://www.hosting.kr/ - 12,100원\n** http://www.webtizen.co.kr/ - 웹티즌(도메인최저가) - 12,900원\n** http://www.domainclub.kr/ - 도메인클럽 - 13,000원\n* http://www.homejjang.com/ - 홈짱닷컴(홈페이지 제작가이드) ; CSS(Cascading Style Sheets) 고급 강좌\n\n\n\n<html> <a name="Page170223_02"> </a>\n<div style="border: 1px solid #3058D2; padding: 10px;">\n<a href="#Page170223"> <span style="font-size: 14px;"> <b> #. 생활 </b> </span> </a>\n</div> </html>\n* 쇼핑몰\n** http://www.danawa.com/ - 가격비교 사이트 다나와\n** http://www.thirtymall.com/ - 떠리몰(유통기한이 다가오는 제품을 합리적인 가격에 판매하는 식품 전문 이커머스)\n* 약품\n** http://www.yaksawa.com/ - 약사와닷컴\n** http://www.fndkorea.com/ - 에프앤디넷 맘스오메가3\n* 조명\n** http://chamlamp.co.kr/ - 참조명 ; 두영 FPL 55W 전구 주광색 전구색 형광등 램프 조명\n* 하드웨어\n** http://www.gmdata.co.kr/gmtools/hddscan.html - 지엠데이터(GoodMorning Data) GM HDDSCAN 툴 (배드 섹터 검사)\n** 하드독 도킹스테이션\n*** 스카이디지탈 / SKY 알로이 듀얼독 USB3.0 도킹스테이션 외장하드게이스\n*** 강원전자 / (넷메이트) NM-WD01 USB3.0 WiFi 도킹 스테이션 - 강원전자\n*** 밴텍 / (NexStar) WiFi 무선외장하드 독\n*** 유니콘정보시스템 / WN-5000M 무선 하드독 도킹스테이션\n* 화장품\n** http://smartstore.naver.com/euromoms - 유로맘스 독일직구 ; 히말라야 너리싱 크림\n\n* http://sieve.kr/ - 마미체(채화원)\n* http://www.louisvuitton-handbags.com.co - Louis Vuitton Handbags and Bags Sale -Louis Vuitton Outlet\n* http://www.stefano.co.kr/ - Stefano Conti 가방, (주)나래\n\n* 기타\n** 소프트 빈스 섬유유연제 (CJ LION)\n** 미야모토 애니멀 월드 면기, Jamun Natural Stone Oil Diffuser\n\n\n!!! 게임\n* http://factorio.su/factorio_download/ - Factorio 0.13.5 (by 2016.07.)\n\n\n<html> <a name="Page170223_03"> </a>\n<div style="border: 1px solid #3058D2; padding: 10px;">\n<a href="#Page170223"> <span style="font-size: 14px;"> <b> #. 기록 </b> </span> </a>\n</div> </html>\n▷ [[주소록_종이]]\n* 향/ 향로/ 코일향\n** http://www.zangter.co.kr/ - 인사동장터 ; 코일향\n** http://www.omanmul.com/ - 오만물 \n*** 기도용 신주향로 (동느낌나는 신주 향로) -小- 자석식(향꽂이) \n*** 인천도자기 낮은촛대(중) - 인천스텐에서 만든 낮은도자기 촛대\n*** cf. 분청 둥근 오목접시형 촛대 ; 상부지름 125, 높이 38\n** http://withbuddha.co.kr/ - 위드붇다 ; 향로-청자, 개구리 수반\n** 키워드\n*** 보리수 향로, 엔틱향로\n**** http://www.moranbulkyo.co.kr/ - 모란불교용품 ; 도자기 보리수 향로\n**** http://www.buddhazone.co.kr/ - 붓다존\n**** http://www.auc25.com/ - 굿씨드 (문화예술품 경매)\n*** 해외구매대행\n**** http://www.cuzbay.com/home-accessories-50020808/vaporizer-50020854 - 홈 장식 / 액세서리 / 분향기\n**** http://lifement.co.kr/ - 홈/주방/생활잡화 해외구매대행 ; 향로\n**** http://sunnyshop.co.kr - 뷰티 해외구매대행 ; 스톤 홀더, 향로 \n**** http://japanking.co.kr/ - 라쿠텐 ; 스톤 양초 홀더, 소용돌이향\n\n
!! Dim 변수이름 As 데이터형\n|!데이터 |!데이터형 |\n|정수 |Byte, Integer, Long |\n|실수 |Single, Double |\n|문자 |String |\n|날짜 |Date |\n|참거짓 |Boolean |\n|모든 데이터 |Variant 혹은 ‘As 데이터형’ 생략 |\n|워크북 |Workbook |\n|워크시트 |Worksheet |\n|셀 범위 |Range |\n\n+++[ 데이터 형, 범위 ]\n| 데이터 형 | 크기 | 종류 | 표현 범위 |\n| Byte | 1 | 정수 |0~255 |\n| Integer | 2 | 정수 |-32,768 ~ 32767 |\n| Long | 4 | 정수 |-2,147,483,648 ~ 2,147,483,647 |\n| Single | 4 | 실수 |양수 : 1.401298E-45 ~ 3.40282E38 <br> 음수: -3.402823E38 ~ -1.401298E-45 |\n| Double | 8 | 실수 |양수 : 4.94065645841247E-324 ~ 1.79769313486232E308 <br> 음수 : -1.79769313486232E308 ~ -4.94065645841247E-324 |\n| Boolean | 2 | Bool |true, false |\n| Currency | 8 | 화폐 |-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 |\n| Date | 8 | 날짜 |100/1/1 ~ 999/12/31 |\n| Object | 4 | 개체 |모든 개체 참조 |\n| String | 가변 / 고정 길이 | 문자열 |가변길이 : 10bytes + 문자열 길이 (0 ~약 2조...) <br> 고정길이 : 1~약 65,400 |\n| Variant | 16 / 24 | 가변 |16 : Double 범위 내 모든 숫자 <br> 24: 문자열 길이 + 22bytes(문자) |\n| Type | 사용자 정의형식 | 사용자 정의형 |사용자 정의형식 |\n===\n\n!!!Dim 배열명(배열의 크기) As 데이터형\n@@color(#3058D2): Dim Arr1(10) As Double @@ \n@@color(#3058D2): Dim Arr2(5) As Long @@ \n \nArr1은 0부터 시작하여 10까지 11개의 원소를 가진 실수를 저장하는 배열이다. Arr2는 0부터 시작하여 5까지 6개의 원소를 가진 정수를 저장할 수 있는 배열이다. 그러나 배열은 시작 번호와 끝 번호를 지정하여 선언할 수 있다.\n \n@@color(#3058D2): Dim Arr3(1 To 10) As Double @@ \n@@color(#3058D2): Dim Arr4(2 To 5) As Long @@ \n \nArr3은 1부터 시작하여 10까지 10개의 원소를 가진 실수를 저장하는 배열이다. Arr4는 2부터 시작하여 5까지 4개의 원소를 가진 정수를 저장할 수 있는 배열이다. 배열의 크기를 반드시 지정할 필요는 없다. 그러나 나중에 사용을 하려면 ReDim을 사용하여 배열의 크기를 지정할 수 있다.\n\n!! 변수 선언 방법\n!!! 명시적 선언 (Option Explicit)\n명시적 선언 (Option Explicit)\nDim 이란 예약어를 사용하여 선언하는 방법\nex. Dim 변수명 As 데이터형\n\n!!! 암시적 선언\n예약어를 사용하지 않고 그냥 변수명을 사용한다.\n즉 코드내에서 임의로 변수를 쓰면 자동으로 만들어서 처리해준다는 의미.\n\n!!! 변수명 설정시 주의점\n/ A~Z, a~z, 숫자 0~9, _(under bar)로 구성\n/ 첫문자는 영문자나 _ 로 시작 (숫자나 특수문자 사용불가)\n/ 대소문자 구별안함\n/ 변수명에 공백 있으면 안됨\n/ 예약어 사용 불가\n/ 변수명은 최대 255자까지 가능\n\n\n!! 연산자\n|!산술연산자 |!설명 |!예 |!결과 |\n|+ |더하기 |10+5 |15 |\n|- |빼기 |10-5 |5 |\n|* |곱하기 |10*5 |50 |\n|/ |나누기 |10/5 |2 |\n|₩ |정수나누기 |11₩5 |2 |\n|^ |지수 |10^5 |100000 |\n|Mod |나머지 |10 Mod 5 |0 |\n|- |음수 |-10 |-10 |\n|& |문자열 연결 |“AB” & “CD” |“ABCD” |\n|! 비교연산자 |!설명 |!예 |!결과 |\n|> |크다 |10>5 |TRUE |\n|< |작다 |10<5 |FALSE |\n|>= |크거나 작다 |10>=5 |TRUE |\n|<= |작거나 같다 |10<=5 |FALSE |\n|= |같다 |10=5 |FALSE |\n|<> |같지 않다 |10<>5 |TRUE |\n|Like |비슷하다 |“VBA” Like “V?A” |TRUE |\n|! 논리연산자 |>|>|!설명 |\n|A And B |>|>|양쪽이 모두 True이면 True, 그렇지 않으면 False |\n|A Or B |>|>|양쪽 중 적어도 하나가 True이면 True, 양쪽이 모두 False이면 False |\n|Not A |>|>|A가 True이면 False, False이면 True |\n|A Xor B |>|>|양쪽이 모두 True 또는 False이면 False, 그렇지 않으면 True |\n|A Eqv B |>|>|양쪽이 모두 True 또는 False이면 True, 그렇지 않으면 False |\n|A Imp B |>|>|A가 True이고 B가 False이면 False, 그렇지 않으면 True |\n\n<br>
청정농산 / 경상남도 밀양시 하남읍 양동리 369-6 \n\n{{wrappingClass{Info_map_***.*** 위치관련 이미지 &nbsp; &nbsp; &nbsp; }}}\n\n++++[#. 그레뱅 뮤지엄 ( http://www.grevin-seoul.com/ko )]\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/Info_map_GrevinKorea.jpg" width=480> <br>\n</CENTER> </html>\n그레뱅 뮤지엄은 100년이 넘는 역사를 지닌 세계적인 프랑스 밀랍인형 전문 박문관이다. 캐나다 몬트리올, 체코 프라하에서 문을 열었고, 2015년 7월 30일 아시아 최초로 서울 을지로 시청별관에 4번째 그레뱅 뮤지엄을 개관했다.\n===\n\n+++[#. 한국조폐공사 화폐박물관 ( http://museum.komsco.com/ )]\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/Info_map_komsco.gif" width=480> <br>\n</CENTER> </html>\n주소 : (34132) 대전광역시 유성구 과학로 80-67(가정동) \n박물관안내 : (042)870-1200\n콜센터 : 1577-4321(콜센터 운영시간 : 평일 09:00 ~ 18:00 주말/공휴일 휴무)\n===\n\n
!!! 행 삽입, 삭제\nCells(i, 1).Resize(n).EntireRow.Insert\nCells(i, 1).Resize(n).EntireRow.Delete\n\n#.''특정 영역 삭제''\nSelection.EntireColumn.Hidden = False\nRange("a6:f140,h4:iv5,h1:iv1,h6:iv140").Select\nSelection.ClearContents\nRange("b1").Select\n\n#.''화면 업데이트 방지를 통한 계산 속도 개선''\nApplication.ScreenUpdating = False '코드 실행 중 차트와 같은 화면 업데이트 방지\nApplication.Calculation = xlCalculationManual '코드 실행 중 셀 계산 방지\nApplication.EnableEvents = False '이벤트 실행 방지\n\n'실행 코드\n\nApplication.EnableEvents = True\nApplication.Calculation = xlCalculationAutomatic\nApplication.ScreenUpdating = True\n\n+++[ 행 삽입]\n{{{\nSub InsertRows()\n Dim i As Long, n As Long\n n = Val(InputBox("삽입할 행 수를 입력하세요", "삽입행 수"))\n If n <= 0 Then Exit Sub\n For i = Cells(Rows.Count, 1).End(3).Row To 2 Step -1\n Cells(i, 1).Resize(n).EntireRow.Insert\n Next i\nEnd Sub\n}}}\n===\n\n+++[ 시트의 특정부분을 복사후 다른 시트에 붙여 넣기 ]\n''Sheets(1).Cells(1, 1).Resize(6, 12).Copy Sheets(2).Cells(1, 1).Resize(6, 12)''\n첫번째 시트의 첫번째 셀부터 6행(1,2,3,...) 12열(A,B,C,...)만큼 복사후 2번째시트의 첫번째 셀로부터 6행 12열만큼 붙여 넣는다.\n\n''Worksheets("Sheet1").Cells(1, 1).Resize(6, 12).Copy Worksheets("참조").Cells(1, 1).Resize(6, 12)''\nWorkSheets("셀이름") 으로 표현할 수 있다.\n\n''Worksheets("Sheet1").Range("A1:L6").Copy Worksheets("참조").Range("A1")''\nRange("시작행렬:끝행렬") 형식으로 사용가능하고, Range("A1") 은 A1 셀부터 시작된다.\n\n위 모두 결과는 같음\n===\n\n+++[ Application.VLookup( ) ]\n{{{\nSub Search_Item()\n\nDim table_array As Range\nDim nLineCurrent As Integer\nDim Result As Variant\nDim Character_Name As Variant\nDim Account_Name As Variant\n\nSet table_array = Worksheets("P아이템").Range("A5:F2900")\n\n\nnLineCurrent = 5\nRange("J5:M13800").ClearContents\n\nDo While Cells(nLineCurrent, 9) <> ""\n'For i = 0 To 20\n\n Cells(2, 11) = Cells(nLineCurrent, 1)\n \n Result = Application.VLookup(Cells(nLineCurrent, 9).Value, table_array, 1, 0)\n \n If (Application.IsError(Result)) Then\n Cells(nLineCurrent, 10) = "-"\n Else\n Character_Name = Application.VLookup(Cells(nLineCurrent, 9).Value, table_array, 6, 0)\n Account_Name = Application.VLookup(Cells(nLineCurrent, 9).Value, table_array, 4, 0)\n \n If (IsError(Character_Name)) And (IsError(Account_Name)) Then\n Cells(nLineCurrent, 10) = "#N/A"\n Cells(nLineCurrent, 13) = "#N/A"\n Else\n Cells(nLineCurrent, 10) = "보유"\n Cells(nLineCurrent, 11) = Character_Name\n Cells(nLineCurrent, 12) = Account_Name\n End If\n \n End If\n\n nLineCurrent = nLineCurrent + 1\n \n'Next i\nLoop\n\nEnd Sub\n}}}\n===
!! {{wrappingClass{함수 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }}}\n\n#.''ISERROR 함수 ''\n \n값의 오류값을 검사하고 값에 따라 TRUE(참)와 FALSE(거짓)를 표시\n값이 오류 값(#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!)을 참조하는 경우에 iserror() 함수를 사용하여 참과 거짓을 표시\n\n''[형식] =ISERROR(value)''\n\n- value : 검사할 값입니다. 값으로는 공백(빈 셀), 오류 값, 논리값, 텍스트, 숫자, 참조 값 또는 이러한 항목을 참조하는 이름을 사용할 수 있습니다.\n\n''[사용예] =ISERROR(A4)''\nA4셀에 있는 값이 오류인지 여부를 확인합니다. TRUE로 표시되면 오류가 있는 경우이고 FALSE로 표시되면 오류가 없는 경우입니다. \n \n+++[ #N/A 오류메시지를 표시하지 않으려면 ; if() 함수와 iserror() 함수를 사용 ]\n''함수식에 if() 함수와 iserror() 함수를 사용하여 #N/A 표시를 '코드없음'으로 나오도록 수정한 예''\n \n현재 함수식 \n=VLOOKUP(A4,$F$3:$G$6,2,FALSE) \n\n수정할 함수식 \n=IF(ISERROR(VLOOKUP(A4,$F$3:$G$6,2,FALSE)),"코드없음",VLOOKUP(A4,$F$3:$G$6,2,FALSE)) \n===\n\n\n#. ''데이터가 "#N/A" 일 때, 조건문에서 비교하는 방법''\n{{{\nDim Character_Name As Variant\nDim Account_Name As Variant\n\nCharacter_Name = Application.VLookup(Cells(nLineCurrent, 9).Value, table_array, 6, 0)\nAccount_Name = Application.VLookup(Cells(nLineCurrent, 9).Value, table_array, 4, 0)\n\nIf (IsError(Character_Name)) And (IsError(Account_Name)) Then\n Cells(nLineCurrent, 10) = "#N/A"\n Cells(nLineCurrent, 13) = "#N/A"\nElse\n Cells(nLineCurrent, 10) = "보유"\n Cells(nLineCurrent, 11) = Character_Name\n Cells(nLineCurrent, 12) = Account_Name\nEnd If \n}}}\n\n| !WEEKDAY(serial_number,return_type) |@@ 지정한 날짜가 일주일중 몇 번째 날짜인가를 정수(1∼7)로 구한다. @@ |\n|~|1 또는 생략 - 1(일요일)에서 7(토요일)까지의 숫자, 2 - 1 (월요일)에서 7 (일요일), 3 - 0 (월요일)에서 6 (일요일)까지의 숫자입니다. |\n| !WEEKNUM(serial_number,return_type) |@@ 지정한 날짜가 1년중 몇 번째 주 인가를 구한다.[도구] - [추가기능] @@ |\n|~|1 - 일요일부터 주가 시작, 2 - 월요일부터 주가 시작된다. |\n| @@ Serial_number @@|날짜와 시간을 계산하기 위해 Microsoft Excel이 사용하는 날짜 시간 코드이다. serial_number로 숫자 대신에 "15-Apr-1993" 또는 "1993-4-15"와 같은 문자열을 지정할 수도 있다. |\n\n+++[ 엑셀 VLOOKUP 함수, HLOOKUP 함수 ]\n''VLOOKUP ( ① lookup_value(찾는 값), ② table_array(데이터 테이블 범위), ③ col_index_num (열 번호), ④ range_lookup(완전일치여부) )''\n&nbsp; &nbsp; ; vlookup 함수는 콕, 드래그, 열, false만\n&nbsp; &nbsp;데이터 ② 테이블 범위의 첫 번째 열에서 ① 찾는 값을 검색한 후 일치하는 값이 있으면 사용자가 지정한 ③ 열 번호에 있는 값을 반환한다. \n&nbsp; &nbsp;이 때 유사하게 일치하는 값을 찾도록 지정할 수도 있는데요. ④ 완전일치여부에 TRUE를 입력하면 유사하게 일치하는 값을 찾아 지정된 행의 값을 반환하고, 반대로 FALSE 를 입력하면 완전히 일치되는 값만을 찾는다.\n\nVLOOKUP 함수는 열배열 함수이며, HLOOKUP 함수는 행배열 함수로서\n&nbsp; &nbsp; 완성된 데이터에서 사용자가 원하는 값을 추출\n&nbsp; &nbsp; &nbsp; &nbsp; / VLOOKUP = Vertical (수직) + Look up (검색) ; 첫 번째 열에서 사용자가 지정한 값과 일치하는 행을 찾은 후 그 행에서 사용자가 지정한 열 번호에 있는 값을 추출하는 함수\n&nbsp; &nbsp; &nbsp; &nbsp; / HLOOKUP = Horizontal (수평) + Look up (검색) ; 첫 번째 행에서 값을 검색한 후 사용자가 지정한 행 번호에 있는 값을 추출하는 함수\n\n■ col_index_num 필수 요소. 반환해야 하는 값이 있는 table_array 인수의 열 번호 \n&nbsp; &nbsp; -. col_index_num 인수가 1이면 table_array의 첫 번째 열 값이 반환되고, col_index_num이 2이면 table_array의 두 번째 열 값이 반환.\n&nbsp; &nbsp; &nbsp; &nbsp; / 1보다 작으면#VALUE! 오류 값이 반환\n&nbsp; &nbsp; &nbsp; &nbsp; / table_array의 열 수보다크면 #REF! 오류 값이 반환\n\n■ range_lookup 선택 요소. 정확하게일치하는 값을 찾을 것인지, 근사값을 찾을 것인지를 결정하는 논리값\n&nbsp; &nbsp; -. range_lookup이 TRUE이거나 생략되면 정확한 값이나 근사값이 반환됩니다. 정확하게 일치하는 값이 없으면 lookup_value보다 작으면서 그 다음으로 가장 큰 값이 반환\n&nbsp; &nbsp; &nbsp; &nbsp; / range_lookup이 TRUE이거나 생략되면 table_array의 첫 번째 열 값을 오름차순으로 정렬해야 한다. 그렇지 않으면 VLOOKUP 함수를 실행하여 올바른 결과를 얻을 수 없다.\n&nbsp; &nbsp; &nbsp; &nbsp; / range_lookup이 FALSE이면 table_array의 첫 번째 열 값을 정렬할 필요가 없다.\n&nbsp; &nbsp; -. range_lookup 인수가 FALSE이면정확하게 일치하는 값만 찾는다. table_array의 첫 번째 열에 lookup_value와 일치하는 값이 두 개 이상 있으면 먼저 발견된 값이 사용. 정확하게 일치하는 값이 없으면 #N/A 오류 값이 반환.\n===
!! Visual Studio 2013\n\n속성 페이지\n구성 속성 > 링커 > 일반 > 출력 파일 ; $(OutDir)$(TargetName)$(TargetExt)\n\n\n<html> <span style="font-size: 12px; color:#006699 "> <b> √ . 디버깅 정보를 찾을 수 없거나 정보가 일치하지 않습니다. </b> </span> </html>\n출처 ; http://yusiky.tistory.com/\n\n{{wrappingClass{ '<XXX.exe>'의 디버깅 정보를 찾을 수 없거나 정보가 일치하지 않습니다. 이진 파일이 디버그 정보를 사용하여 빌드되지 않았습니다. <br> 디버깅을 계속하시겠습니까? &nbsp; &nbsp; &nbsp; &nbsp; }}}\n\n에러 메세지가 뜨는 경우, 프로젝트의 속성창에 가서 설정을 변경해주어야 한다.\n''공통(Win32/x64)''\n속성 > C/C++ > 최적화 > 최적화:사용 안 함 (/Od)\n속성 > 링커 > 디버깅 > 디버그 정보 생성 (/DEBUG)\n\n''Win32''\n속성 > C/C++ > 일반 > 디버그 정보 형식 > 편집하여 계속하기를 위한 프로그램 데이타베이스 (/ZI)\n\n''x64''\n속성 > C/C++ > 일반 > 디버그 정보 형식 > 프로그램 데이타베이스 (/Zi)\n\n\n<html> <span style="font-size: 12px; color:#006699 "> <b> √ . Visual Studio 에서 독립 프로세스를 디버그 하기 - 프로세스 연결 (Attach to Process) </b> </span> </html>\n\n프로젝트에서 직접 디버그 모드로 실행시켜서 디버그를 하는 것이 아닌, \n이미 실행중인 프로세스를 디버그 해야 하는 경우에 사용한다.\n\n디버거 >> 프로세스에 연결 (Atach to Process)\n\n프로세스에 연결 메뉴를 선택하면 현재 시스템에서 실행중인 프로세스 목록이 나열된다.\n(일부 다른 세션에서 실행중인 프로세는 안보일수 있기 때문에 하단의 "모든 사용자의 프로세스 표시" 및 "모든 세션의 프로세스 표시" 를 선택할 것을 권장.)\n\n원하는 프로세스를 선택한 후에 디버그를 한다.\n주의할 점은 해당 프로세스가 디버그 모드로 빌드된 상태여야 하며, 해당 프로세스의 프로젝트를 Visual Studio 에서 띄워놓은 상태에서 정상적으로 브레이크 포인트를 걸 수 있다. \n\n\n<html> <span style="font-size: 12px; color:#006699 "> <b> √ . PDB 파일을 찾거나 열 수 없습니다. </b> </span> </html>\n출처 ; http://singleton.tistory.com/370\n\nVisual Studio 2012 에서 프로젝트 디버그 시 \n''"...을(를) 로드했습니다. PDB 파일을 찾거나 열 수 없습니다."''라는 메시지가 출력될 경우\n\n1. 윈도우가 기호 파일을 로드하지 못한다는 뜻이며, 디버그 시 시스템 dll 파일들로부터 다양한 정보들을 보기 위해서는 dll 파일의 기호(pdb 파일) 파일이 필요하다.\n\n2. @@color(#3058D2): 보통 VS 템플릿을 사용하지 않고 직접 프로젝트를 생성하거나 한 경우에 에러가 발생할 확률이 높다. @@ 직접 프로젝트를 생성한 경우, VS는 개발자가 기호 파일이 어디있는지 다 안다고 가정한다. \n(역자 주: Cocos2d-x 로 프로젝트를 생성한 경우도 이 경우에 해당되어 에러가 발생하는게 아닐까 생각된다.) \n\nVisual Studio 설정에서 Microsoft 사의 서버에서 다운받거나, 직접 파일을 다운받아서 해결한다.\nVS의 설정을 통해 Microsoft 사의 서버에서 기호 파일들을 다운받는 식으로 해결할 경우\n\nVisual Studio의 디버그 -> 옵션 및 설정 -> 기호에 들어가서\n''"Microsoft 기호 서버"에 체크''해주면 \n"이 디렉터리의 기호 캐시:" 에 지정된 경로로 MS사의 서버로부터 기호파일을 다운받게 된다.\n(이 이후로부터는 Visual Studio가 해당 경로에 다운받은 파일에서 기호를 로드할 수 있다.)\n\n설정을 마치고 프로젝트를 실행하면 약간의 다운로드가 진행된 후, 기호가 '잘...' 로드되었다는 메시지 출력하고,\n이제 기호파일을 오프라인에 저장해서 서버에서 기호파일을 받을 필요는 없기 때문에 \n다시 설정에 들어가서 __"Microsoft 기호 서버"의 체크를 풀어주고 다운받은 파일들로부터 기호를 로드할 수 있도록 디렉터리 경로는 그대로 남겨둔다.__\n\n\n!! Visual Studio 2005\n<html> <span style="font-size: 12px; color:#006699 "> <b> √ . VS2013 MultiByte 설정 사용하기 위한 준비단계 </b> </span> </html>\n \nVS2013에서 MBCS(Multi-Byte Character Set)로 설정된 MFC 프로젝트를 컴파일하면 다음과 같은 에러 발생한다.\n\nerror MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.com/fwlink/p/?LinkId=286820 for more information. C:\sProgram Files (x86)\sMSBuild\sMicrosoft.Cpp\sv4.0\sV120\sMicrosoft.CppBuild.targets 369 5 IOKF_Client\n\n2013 부터는 MBCS용 MFC 라이브러리(DLL)가 제공되지 않는다.\n디볼트인 유니코드를 사용 권장하기 때문이다.\n\n사용 해야 할 경우에는 MS 에서 제공하는 " Visual Studio 2013용 멀티바이트 MFC 라이브러리 " 를 설치하면 이문제는 해결된다.\n\n아래 사이트에서 다운받고 설치하면 된다.\nhttp://www.microsoft.com/ko-kr/download/details.aspx?id=40770\n\n\n<html> <span style="font-size: 12px; color:#006699 "> <b> √ . Visual Studio 인코딩 설정하기 </b> </span> </html>\n\n!!! Visual Studio 6.0 에서는 내부 인코딩이 "멀티바이트 문자 집합"이었으나, Visual Studio 2005 이후 버전들은 기본으로 "유니코드 문자 집합"을 사용한다. 어떤 사정에 의해서 "멀티바이트 문자 집합"을 사용하려면 아래와 같이 한다.\n\n''프로젝트 속성'' (Alt+F7) → 구성 속성 → 일반 → 문자집합 에서 "멀티바이트 문자 집합 사용" 또는 "유니코드 문자 집합 사용" 선택\n\ncf. (VS 2005기준) 문자열 사용시 일어나는 속칭 'LPCWSTR'문제를 해결 할 수 있다\n\ncf. 'char [260]'에서 'LPCWSTR'(으)로 변환할 수 없습니다.\n ; VS2005부터는 문자설정이 유니코드로 설정 되기 때문에 이전 프로젝트를 char* 으로 문자열을 처리한 경우, 위와 같은 메시지를 출력\n ⇒ 문자집합을 '멀리바이트 문자 집합 사용'으로 변경\n\n
출처 ; http://www.nzkoreapost.com/bbs/board.php?bo_table=news_column&wr_id=5624 (2014.08.14. 뉴질랜드 코리아 포스트)\n\n쉬라(Syrah)는 프랑스를 비롯한 구대륙에서 부르는 말이고 쉬라즈(Shiraz)는 호주 등 신대륙에서 사용한다는 식의 뭉뚱그린 상식을 가지고 있다면 정보의 업데이트가 필요하다. 프랑스산에서도 쉬라즈가 발견되고 호주 산에서도 쉬라 라고 표기된 와인이 있기 때문이다. 심지어 어떤 이는 그 이유에 대해 와인어리 주인장의 국적에 따른다고 터무니없는 주장을 펴기도 한다. \n\n고대 페르시아에서 유래한 종자인 쉬라(Syrah)를 1830년 초 제임스 버스비가 호주에서 처음 심었을 때 프랑스 론(Rhone)의 에르미타쥬(Hermitage) 지역의 묘목을 심었으니 그 뿌리는 같다고 할 수 있다. 이들 품종은 한식 육류(소)요리와 한국인의 입맛에도 잘 맞는다. 특히 쉬라즈는 숯불구이 집에 가져갈 만한 착한 가격에 맛이 진해서 강한 양념에도 밀리지 않을뿐더러 오크숙성을 통해 우러나오는 바닐라 향이나 토스트 향은 숯불 향과 잘 어울린다.\n\n이탈리아의 토스카나(볼게리) 지방과 시칠리아 지방에서도 쉬라가 생산되는 데 산지오베제(Sangiovese)나 네로 디아볼라(Nero d’Avola)와 블렌딩하는 경우가 많고 론과 스타일이 비슷하다. 칠레나 아르헨티나에서도 론 스타일을 만들고 미국과 남아공에서는 호주의 쉬라즈(Shiraz) 스타일을 선택했다. 유달리 캘리포니아에서는 쉬라 라고 표기하는 와인이 더 많은데 기후가 론 지역과 매우 흡사해 같은 스타일의 와인이 생산되기 때문이다. 뉴질랜드(주로 Hawkes Bay)는 쉬라나 쉬라즈 둘 다 있다. 결국 ''쉬라즈(Shiraz)는 호주의 스타일을, 쉬라(Syrah)는 프랑스 론 지방의 에르미타쥬 스타일을 지향한다는 의미로 봐야 한다''는 것이 내 생각이다. \n\n프랑스 남부를 거쳐 지중해로 흐르는 론 강의 북쪽지역에는 8개의 주요한 와인 생산지(꼬뮌, Commune)가 있는데 모두 프랑스 와인 등급 중 최고등급인 AOC등급의 와인이 만들어지고 있는 곳이다. 8개의 꼬뮌 중 높은 경사면에 포도밭이 있어 면적당 햇볕을 더 많이 받는 에르미타쥬(Hermitage)지역은 로마시대부터 와인을 만들어 온 곳으로 프랑스에서 가장 오래된 포도 재배 지역 중 하나다. 이곳에서 적 포도는 쉬라(Syrah), 청포도는 비오니에(Viognier), 루산느(Roussane), 마르산느(Marsanne)가 주요품종이다. 가장 남성적인 매력이 있는 레드 와인을 생산하는 곳으로 에르미타쥬 와인은 최고 50년 이상의 숙성도 가능한 와인이다. 전체 생산량의 1/5은 마르산느를 주로 사용하여 만드는 화이트 와인인데, 화이트 와인 역시 튼튼한 구조 감을 지녀 장기 보관이 가능하다.\n\n뜨거운 햇살이 내리쬐는 론 지방의 기후가 빚어낸 쉬라(Syrah)가 처음엔 거칠고 강한 이미지로 평가가 그다지 높지 않았다. 국제적으로 좋은 평가를 받으려면 ‘균형’이 중요하기 때문이다. 그러나 최근에는 ‘에르미타쥬’ 뿐만 아니라 ‘코트 로티(Cote Rotie)’나 100% 쉬라 품종만을 사용하도록 법으로 제정되어있는 ‘코르나스(Cornas)’도 명품의 대열에 올라있다. 특히 보잘것없는 시골와인이었던 코트 로티와인을 일약 스타덤에 올린 장본인은 론의 명가, 기갈(Guigal)이다. 그의 탁월한 재능이 아니었다면 론의 와인은 관광지 지역상품 정도의 평가에서 벗어나지 못했을 것이다. 그의 코트 로티 3총사, 라 물린느(La Mouline), 라 랑돈느(La Landonne), 라 투르크(La Tourque)는 세계적인 와인 비평가 로버트 파카로부터 100점 만점을 18번이나 받은 명품이다. \n\n쉬라와 쉬라즈의 다른 점을 굳이 꼽자면 론의 쉬라는 산미와 스파이스 향이 강조되는 반면 호주 산 쉬라즈는 풍만한 바디감과 풍성한 과일 향과 허브 향에 특징이 있다. 물론 론의 쉬라 라고 과일 향이 없거나 호주의 쉬라즈라고 스파이스 한 느낌이 없는 것이 아니라 두 품종의 보다 두드러진 특징이 그렇다는 것이다. \n\n특히 호주 산 쉬라즈는 베리류, 체리 등의 과일 향과 바닐라, 흑설탕, 잼, 허브와 스파이스 향이 빼어나게 좋고 파워풀해서 간결하고 직설적인 스타일이다. 대단히 높은 절제 감과 균형감각을 지녔고 또한 부드러움조차 겸비하고 있다. 쉬라는 산미가 강한 편이라 날카로운 느낌을 주는 와인인 반면 쉬라즈는 단 맛도 강한 편이며 묵직하다. 저렴한 가격에서는 쉬라즈가 가격대비 질이 우수하지만 높은 가격일 수록 프랑스 론(Rhone)의 쉬라가 뛰어나다.\n\n쉬라(Syrah)는 호주에서 쉬라즈(Shiraz)로 변신하고 ''바로사 밸리(Barossa Valley)와 맥라렌 베일(Mclaren Vale) 지역에서 대성공을 거뒀다.'' 호주로 건너온 지도 벌써 2백 년이 넘어서 DNA를 검사해 보면 프랑스 쉬라와 호주 쉬라즈는 조금 다르다고 한다. 다른 환경에 적응해서 진화해온 결과다. 그러므로 쉬라(Syrah)와 쉬라즈(Shiraz)는 유전적으로는 같은 품종이지만 와인 스타일은 다르다고 해야 옳다. \n
Microsoft DirectX. MS에서 말하는 발음법은 '다이렉트 엑스'이나 미국에서는 '디렉트 엑스'라고 읽히는 경우도 있다.\n출처 ; https://namu.wiki/w/DirectX#fn-40\n&nbsp; &nbsp; &nbsp; &nbsp; http://gameqa.tistory.com/75 - 하드웨어 테스트(적합성 테스트, 사양 테스트) 방법\n \n!!! 개요\n1995년 9월에 마이크로소프트가 Windows용으로 제작하여 클로즈드 소스 형태로 발표한 멀티미디어게임용 종합 라이브러리.\n\n|>|>|>| ''A Brief History of DirectX'' |\n| !Version | !Operating System | !Launch Date |\n| DirectX 1.0 | Windows 95a | 9/30/95 |\n| DirectX 2.0/2.0a | Windows 95OSR2/NT4.0 | 6/5/96 |\n| DirectX 3.0/3.0a | Windows NT 4.0 SP3 | 9/15/96 |\n| DirectX 4.0 | | Never Released |\n| !DirectX 5.0 | !Windows NT 4.0/Beta for NT 5.0 | !7/16/97 |\n| DirectX 5.1 | Windows 95/98/NT4.0 | 12/1/97 |\n| DirectX 5.2 | Windows 95 | 5/5/98 |\n| !DirectX 6.0 | !Windows 98/NT4.0 | !8/7/98 |\n| |>|>|environment bump mapping; 평면적인 2D 표면에 요철을 주어 더욱 현실적으로 보이게 했다. |\n| DirectX 6.1 | Windows 95/98/98SE | 2/3/99 |\n| !DirectX 7.0 | !Windows 95/98/98SE/2000 | !9/22/99 |\n| |>|>|CPU 기반 3D 프로세싱에서 GPU 기반 3D 프로세싱으로의 이전; CPU에서 담당하던T&L(transforming & lightning) 단계가 GPU로 넘어갔다. DirectX 6.1 대비 20%이상의 성능 향상이 있었다. |\n| DirectX 7.0a | Windows 95/98/98SE/2000 | 9/99 |\n| |>|>|force-feedback 성능과 호환성 향상 |\n| DirectX 7.1 | Windows 95/98/98SE/ME/2000 | 9/16/99 |\n| |>|>|Windows ME와 같이 출시 |\n| !DirectX 8.0/8.0a | !Windows 95/98/98SE/ME/2000 | !9/30/2000 |\n| |>|>|Shader Model 1.0/1.1; (동시에 12 명령어까지 처리 가능한) 프로그래머블 픽셀 쉐이더와 버텍스쉐이더가 도입되었다. XBOX 콘솔에도 이 버전의 DirectX가 사용되었다. (PS1.0은 사용되지 않았음) |\n| DirectX 8.1 | Windows 95/98/98SE/ME/2000/XP | 11/12/01 |\n| |>|>|Pixel Shader 1.2/1.3/1.4; 동시에 처리가능한 명령어 수가 28개로 늘어났다. PS1.4는 ATI Radeon 8500에서만 사용되었다. |\n| !DirectX 9.0 | !Windows 95/98/98SE/ME/2000/XP | !12/19/2002 |\n| |>|>|Shader Model 2.0 <br>96 명령어 길이의 픽셀 쉐이더를 지원한다. DirectPlay와 몇가지 오디오, 비디오 기능이 향상되었다. |\n| DirectX 9.0b | Windows 98/98SE/ME/2000/XP | 8/13/2003 |\n| |>|>|Pixel Shader 2.0b & Vertex Shader 2.0 <br>ATI Radeon X600/X700/X800 시리즈에 가장 먼저 사용되었고 더 많은 명령어(최고 1536)와 임시레지스터(12에서 32로 증가)를 지원한다. 새로운 facing resister외에 geometry instancing 역시 지원한다. |\n| DirectX 9.0c | Windows 98/98SE/ME/2000/XP | 8/9/2004 |\n| |>|>|Shader Model 3.0, GPGPU <br>픽셀/버텍스 쉐이더의 최고 명령어수가 증가되었고 flow control/dynamic branching 기능이 추가되었다. NVIDIA GeForce 6800 시리즈에서 가장 먼저 사용되었다. |\n| DirectX 9.0L |>|Windows Vista only, Vista version of DirectX 9.0c, Shader Model 3.0, Windows Graphics Foundation 1.0, DXVA 1.0, GPGPU |\n| Direct3D 10 |>|Windows Vista/Windows 7, Shader Model 4.0, Windows Graphics Foundation 2.0, DXVA 2.0, GPGPU |\n| Direct3D 10.1 |>|Windows Vista SP1/Windows 7, Shader Model 4.1, Windows Graphics Foundation 2.1, DXVA 2.1, GPGPU |\n| Direct3D 11 |>|Windows Vista/Windows 7, Shader Model 5.0, Multithreaded rendering, Compute shaders, supported by hardware and software running Direct3D 9/10/10.1, GPGPU |\n\n각 운영체제를 거치면서 많은 버전의 DirectX가 공개되었다. 새로운 하드웨어 장치가출시되면서 MS는 신기술을 최대한 활용할 수 있도록 하드웨어 개발자들과 작업해왔다. \n\n최근의 추세는, 목표로 하는 유저층을 한국 뿐 아니라 중국까지 포함하는 경우가 많은데,\n중국은 아직 저사양 PC의 비율이 (무시하지 못할 만큼) 많은 것으로 알려져 있다.\n따라서, @@color(#3058D2): 픽셀 쉐이더 버전은 3.0 을 경계값으로 하는 경우가 많다. @@\n \n※ 픽셀 쉐이더 4.0 이상 버전에서는 3.0 에서보다 더 화려한 효과를 낼 수 있는데,\n고사양 PC를 사용하는 유저를 타겟으로 하는 경우에는, 최상 옵션을 고려하여 4.0 도 경계값에 포함되어야 한다.\n\n\n!!! 주요 버전별 특이사항\n!!!! 1세대 (1995~1998년)\n• 1.0 - 최초의 DirectX, Windows 95 출시 1달 후인 1995년 9월에 SDK 형태로 공개[21]되었으며 이전에 MS-DOS 기반 Windows 3.1의 그래픽 API를 Win32 환경에서도 구동하기 위해 WinG라는 이름으로 먼저 알려져 있었다.\n\n• 2.0 - Windows 95 OSR2 확장팩부터 기본 지원,[22] 1996년 상반기에 등장했고 이때부터 우리가 아는 DirectX라는 이름으로 사용되었다. 3D 그래픽 라이브러리인 Direct3D가 추가되었다.\n...\n• 5.2 - Windows 98 기본 지원\n\n!!!! 2세대 (1998~2000년)\n...\n\n!!!! 3세대 (2001~2006년)\n• 8.0 - 2000년 11월에 정식 발표된 버전으로 프로그래머블 버텍스 셰이더와 픽셀 셰이더 개념을 처음 도입되었고 최대 12개의 명령어를 동시에 처리할 수 있는 등 발표 당시엔 획기적인 3D 그래픽 처리를 보여줘서 주목받았으나 이를 지원하는 하드웨어는 2001년 초 지포스 3 시리즈부터였고 지원하는 게임은 당시 낯설어 보였던 셰이더 프로그래머블 기능이 고난이도로 취급했기 때문에 한동안 그림의 떡이 되었다. 또한 여태껏 2D 그래픽을 담당했던 DirectDraw는 7.x버전에서 끊김으로써 Direct3D가 3D 겸 2D 그래픽 라이브러리로 통폐합되어 DirectX Graphics로 명명되었고 음향 관련 라이브러리 쪽에는 DirectSound와 DirectMusic이 DirectX Audio로 통합 및 명명되었다.\n\n• 8.0a - Windows 95의 마지막 지원 버전, 2001년 초에 발표되었고 셰이더 모델이 개선될 겸 최대 동시 명령어의 갯수가 약간 증가했다.\n\n• 8.1 - Windows XP, XBOX, Windows Server 2003 기본 지원, 2001년 11월에 발표한 버전으로 8.0a과 마찬가지로 8.0의 개선판이며, ''픽셀 셰이더가 1.4로 업데이트''될 겸 최대 동시 명령어의 갯수가 28개로 대폭 증가되었다. 실질적으로 게임에 채택된 8.x버전 중 해당 버전이 제일 많다.\n\n•9.0 - 2002년 12월 말에 정식 발표한 버전으로 하드웨어에서는 AMD 라데온 9700이 제일 먼저 지원했고 로고가 지금의 형태로 변경되었으며 ''버텍스 셰이더 2.0, 픽셀 셰이더 2.0으로 업그레이드''되어 최대 명령어 수가 96개로 크게 증가되었다. HLSL을 도입하여 독자적인 셰이더 프로그래밍을 고수준 언어로 제어할 수 있게 되었고, HDR 렌더링을 지원하여 보다 높은 컬러 선명도를 구현하는게 가능해졌다.\n\n• 9.0c - Windows XP(SP2 이상), Windows Server 2003(SP1 이상), Windows Server 2003 R2, XBOX 360 기본 지원, 하드웨어에서는 엔비디아 지포스 6 시리즈부터 제일 먼저 지원했고 엑스박스 360에서의 마지막 32비트 지원버전이자 Windows XP의 마지막 지원버전, 2004년 8월에 등장한 버전으로 같은 9.0 계열임에도 ''버텍스 셰이더 3.0, 픽셀 셰이더 3.0으로 대폭 업그레이드''되어 최대 명령어 수가 또 증가했고 맵핑 기술의 최고사양급인 변위(디스플레이스먼트)맵핑과 GPGPU 기능을 처음으로 지원하는 등 사실상 9.0c라는 이름보단 9.5에 더 어울릴만한 버전. 역대 가장 많은 Windows 버전들이 마지막으로 지원한 API였기 때문에 DIrectX API계의 Windows XP 버전이라고 할 수 있다.\n\n!!!! 4세대 (2007~2015년)\n• 10.0 - Windows Vista 기본 지원, 2006년 말에 처음 나왔지만 이를 활용한 게임은 한동안 나오지 않았고 2007년 늦봄이 되서야 하나둘씩 도입된 버전이다. 얼핏 보기엔 기존 9.0c 버전과는 큰 차이가 없어 보이지만 내부적으로는 그래픽 처리에 있어서 전체적인 메커니즘이 많이 변경되었기 때문에 ''셰이더 모델 4.0으로 업그레이드''되었고 각각의 셰이더 유닛들을 합하여 통합 셰이더로 명명되었다. 이전에 7.0부터 9.0c버전까지 버전을 거듭하면서 새로운 기능과 동시에 가능한 명령어 갯수가 늘어났는데 기존 하드웨어 스펙으로는 9.0c의 풀스펙으로 활용하기가 어려웠고 구현하면서 병목 및 오버헤드 문제가 발생하는 바람에 이러한 문제점을 해결하기 위해 고안된 일종의 9.0c 최적화 버전이라고 할 수 있다.\n...\n\n!!!! 5세대 (2015년~)\n• 12.0 - Windows 10 기본 지원 (Windows 10 이전 버전은 미지원 엑스박스 원도 운영체계를 윈도우10 기반으로 업데이트 하여 지원).\n\n\n
출처 ; https://msdn.microsoft.com/ko-kr/library/jj152935.aspx\n\n1. .NET Framework 프로젝트에 대한 구성 파일을 추가하거나 찾습니다.응용 프로그램에 대한 구성 파일은 동일한 디렉터리에 있고 응용 프로그램과 동일한 이름이지만 확장명이 .config입니다.예를 들어, MyExecutable.exe라는 응용 프로그램의 경우 응용 프로그램 구성 파일의 이름은 MyExecutable.exe.config입니다.\n\nVisual Studio 메뉴 모음에 구성 파일을 추가하려면 ''프로젝트'', ''새 항목 추가''를 차례로 선택합니다.왼쪽 창에서 ''일반''을 선택한 다음 ''구성 파일''을 선택합니다.구성 파일 이름을 appName.exe.config로 지정합니다.해당 플랫폼에서 활성화 정책이 변경될 수 없으므로 이러한 메뉴 선택은 Windows 스토어 앱 또는 Windows Phone 앱 프로젝트에서 사용할 수 없습니다.\n\n2. 다음과 같은 @@color(#3058D2): <supportedRuntime> @@ 요소를 응용 프로그램 구성 파일에 추가합니다. \n{{{\n<configuration>\n <startup>\n <supportedRuntime version="<version>"/>\n </startup>\n</configuration>\n}}}\n여기서 <version>은 앱이 지원하는 .NET Framework 버전에 맞는 CLR 버전을 지정합니다.다음과 같은 문자열을 사용합니다.\n&nbsp; &nbsp; &nbsp; &nbsp; ◦ .NET Framework 1.0: "v1.0.3705"\n&nbsp; &nbsp; &nbsp; &nbsp; ◦ .NET Framework 1.1: "v1.1.4322"\n&nbsp; &nbsp; &nbsp; &nbsp; ◦ .NET Framework 2.0, 3.0 및 3.5: "v2.0.50727"\n&nbsp; &nbsp; &nbsp; &nbsp; ◦ .NET Framework 4 및 4.5(4.5.1 등의 포인트 릴리스 포함): "v4.0"\n\n기본 설정 순서대로 나열된 여러 @@color(#3058D2): <supportedRuntime> @@ 요소를 추가하여 .NET Framework의 여러 버전에 대한 지원을 지정할 수 있습니다.\n\n다음 표에서는 컴퓨터에 설치된 응용 프로그램 구성 파일 설정과 .NET Framework 버전으로 .NET Framework 3.5 응용 프로그램이 실행 중인 버전을 결정하는 방법을 보여 줍니다.이 예제는 .NET Framework 3.5 응용 프로그램에 국한되지만 이전 .NET Framework 버전으로 빌드된 대상 응용 프로그램에 이와 유사한 논리를 사용할 수 있습니다..NET Framework 2.0 버전 번호(v2.0.50727)는 응용 프로그램 구성 파일에서 .NET Framework 3.5를 지정하는 데 사용됩니다.\n\n|!App.config 파일 설정 |!버전 3.5가 설치된 컴퓨터 |!버전 3.5 및 4 또는 4.5가 설치된 컴퓨터 |!버전 4 또는 4.5가 설치된 컴퓨터 |\n|없음 |3.5에서 실행 |3.5에서 실행 |사용자가 올바른 버전*을 설치하도록 요청하는 오류 메시지 표시 |\n|<supportedRuntime version="v2.0.50727"/> |3.5에서 실행 |3.5에서 실행 |사용자가 올바른 버전*을 설치하도록 요청하는 오류 메시지 표시 |\n|<supportedRuntime version="v2.0.50727"/> <br> <supportedRuntime version="v4.0"/> |3.5에서 실행 |3.5에서 실행 |4 또는 4.5에서 실행 |\n|<supportedRuntime version="v4.0"/> <br> <supportedRuntime version="v2.0.50727"/> |3.5에서 실행 |4 또는 4.5에서 실행 |4 또는 4.5에서 실행 |\n|<supportedRuntime version="v4.0"/> |사용자가 올바른 버전*을 설치하도록 요청하는 오류 메시지 표시 |4 또는 4.5에서 실행 |4 또는 4.5에서 실행 |\n \n* 이 오류 메시지와 이 오류를 방지하는 방법에 대한 자세한 내용은 @@color(#3058D2): .NET Framework 초기화 오류: 사용자 환경 관리@@을 참조하세요.\n
출처 ; 전자용어사전\n\n컴퓨터에 의해 계산을 한다든지, 정보의 처리를 하기 위한 프로그램을 만드는 것. \n그 절차로서는 문제를 해석하고, 계산의 방식을 정하여 흐름도를 만들고, 그에 따라서 코딩하고, 기계에 의한 점검을 하는 등의 작업이 필요하다.
출처 ; https://blogs.msdn.microsoft.com/chuckw/2013/07/01/where-is-the-directx-sdk-2013-edition/\nJuly 1, 2013By Chuck Walbourn - MSFT\n\n''See also'' ''[[“Where is the DirectX SDK (2015 Edition) ?"|https://blogs.msdn.microsoft.com/chuckw/2015/08/05/where-is-the-directx-sdk-2015-edition/]]''\n\nAt BUILD 2013 last week, Microsoft released the Windows 8.1 Preview, Visual Studio 2013 Preview, and the Windows SDK for Windows 8.1 Preview (included in the VS 2013 Preview). Note that RTM was released on October 17th, 2013.\n\nAs with the Windows 8.0 SDK, the Windows 8.1 SDK is where you’ll find Direct3D 11.2, Direct2D 1.2, DXGI 1.3, DirectXMath 3.05, a new HLSL complier (#47), and some updates to WIC. We recommend using the Windows 8.x SDK instead of the DirectX SDK, or at a minimum using the Windows 8.x SDK primarily with only specific usages of the legacy DirectX SDK.\n\nThe 18.0 C++ compiler in the Visual Studio 2013 Preview includes support for a new @@bgcolor(#F9F2F4):color(#C7254E): __vectorcall @@ x86 and x64 calling-convention, and DirectXMath 3.05 has been updated to take advantage of it. I refreshed the DirectXMath extensions series, XDSP, and SHmath to integrate smoothly with this new version. The 18.0 C++ compiler supports additional C++11, Standard Library/STL, and C99 library features as well. See the Visual C++ Team blog, Somasegar’s blog, and the Visual Studio blog. Remote Debugging Tools packages are also available. \n\nYou’ll find VS 2013 projects for DirectXTex, DirectXTK, and Effects 11 on their respective CodePlex/GitHub sites. There is a Windows Store app for Windows 8.1 version of DirectXTK Simple Sample available on MSDN Code Gallery.\n\nThe DirectX SDK (June 2010) is still available as the last release of the standalone DirectX SDK, but we strongly encourage developers to begin to transition to using the Windows SDK instead. Instructions for ‘mixing’ use of the new Windows SDK and older DirectX SDK content can be found [[here|https://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx]]. Remember that for Windows Store app development, do not use the DirectX SDK.\n\n''VS 2010 Users:'' The standalone Windows 8.1 SDK does not integrate a new “platform toolset” option for Visual Studio 2010 to use the newer headers. See this [[post|https://blogs.msdn.microsoft.com/chuckw/2013/10/18/visual-studio-2013-and-windows-8-1-sdk-rtm-are-now-available/]] for more details.\n\n...\n\n''System requirements:'' Windows 8.1 will run on the majority of hardware that can run Windows 8. The 64-bit version does require CPU support for some additional instructions which are not present on early first-generation 64-bit processors. See the [[Windows 8.1 Preview FAQ|http://windows.microsoft.com/en-us/windows/support#1TC=windows-7]] for details.\n\nVisual Studio 2013 can be installed on Windows 8.1, Windows 8, and Windows 7 Service Pack 1. For Windows 7 SP1, installing KB 2670838 is required as part of the setup.\n\n...\n\n''DirectX SDK:'' If you want to make use of ''@@color(#3058D2):legacy DirectX SDK @@'' components such as D3DX9, D3DX10, D3DX11, or XAudio 2.7 with ''__Visual Studio 2013__'', see MSDN for details on mixing the paths correctly.\n\n
출처 ; http://sktype.tistory.com/112\n<html> <CENTER>\n<IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/visualstudio_version.jpg" width=800>\n</CENTER> </html>\n@@bgcolor(#FF5E00):color(#FFFFFF): &nbsp; &nbsp; Visual Studio 6.0 &nbsp; &nbsp; &nbsp; &nbsp; @@\n- 컴파일 속도가 빠르다.\n- 단순히 C, C++ 의 기능을 공부하고자 할 경우.\n- ''클래스위자드 (Ctrl + W) 사용이 편하다.''\n- C#이 없던 시절이니, C# 기능이 없다.\n- C++ 개발에서는 ''MFC''를 이용해 Windows GUI 응용 프로그램 만들 수 있다.\n- 표준 C++98 도입\n\n@@bgcolor(#FFBB00):color(#000000): &nbsp; &nbsp; Visual Studio .NET ~ Visual Studio .NET 2003 &nbsp; &nbsp; &nbsp; &nbsp; @@\n- C#이 처음으로 등장.\n- 닷넷 초창기 버전이라 오류가 많아 최악의 평을 얻는다.\n- 2003부터 2008버전까지 ''클래스 위자드가 사라진다.''\n- .NET 개발에서는 ''Windows Forms(또는 "Winforms")''를 이용해 Windows GUI 응용 프로그램 만들 수 있다.\n- MFC vs Winforms : http://gendoh.com/m/74, http://msdn.microsoft.com/ko-kr/library/0xb61xs7.aspx\n\n@@bgcolor(#FFBB00):color(#000000): &nbsp; &nbsp; Visual Studio .NET 2005 &nbsp; &nbsp; &nbsp; &nbsp; @@\n- VS 2005 및 .NET Framework 3.0 SP2 이상부터 쓸만한 듯 하다.\n- 그러나 최소 .NET 2008 이상을 사용하는 것이 낫다.\n- .NET 3.0부터 ''WPF''를 이용해서도 Windows GUI 응용 프로그램 만들 수 있다. 단, xaml 등 별도로 더 배워야 한다.\n- 표준 C++03 도입\n- WPF vs Windows Forms\n http://www.hoons.net/board/qanet3/content/25330\n http://www.hoons.net/Board/itdisc/Content/52987\n http://softwarekishorekoney.blogspot.kr/2009/10/wpf-vs-windows-forms-vs-mfc.html (해외)\n http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=82&MAEULNO=2&no=1&page=1\n\n[WPF] \n단점 - copy & paste가 어렵다. 되긴 하는데 스타일이 흩트러져 쓸수 없다.\n&nbsp; &nbsp; &nbsp; &nbsp; - xaml 적응 기간이 오래걸린다. xaml배우다가 오픈일 못지킬수 있다. 아따 어렵다.\n&nbsp; &nbsp; &nbsp; &nbsp; - 윈폼보다 속도가 느리다? (이 부분에서 둘다 dll컴파일이기 때문에 wpf라고 따로 느릴리 없다고 생각하는데요. 다른 분들은 html처럼 xaml이 런타임에 해석되는 것으로 오해하고 있음)\n&nbsp; &nbsp; &nbsp; &nbsp; - xaml의 난이도는 HTML과 동일하다. 즉 winform과 비고해서 3배 시간이 더 걸린다.\n&nbsp; &nbsp; &nbsp; &nbsp; - 디자이너와 협업이 어렵다. (wpf가 애초에 디자이너와의 협업을 원칙으로 만들어졌지만 막상 디자이너한테 가면 개발자가 만든 xaml코드 모르겠어요. 그냥 새로 만들어요. 이렇게 된단다)\n\n장점 - 예쁘다. 끝\n\n[WinForm]\n단점 - wpf보다 예쁘지 않다.\n장점 - wpf에 비교해서 몇배 빠른 개발이 가능하다. \n\n@@bgcolor(#FF5E00):color(#FFFFFF): &nbsp; &nbsp; Visual Studio .NET 2008 &nbsp; &nbsp; &nbsp; &nbsp; @@\n- 윈도우7에 .NET Framework 3.5가 자체포함되어 있어 별도로 사용자는 설치할 필요가 없다.\n- 윈도우7을 많이 사용하는 요즘 2008을 사용해 개발하는 것이 낫다.\n- 2013년 현재 2008을 가장 많이 사용한다.\n- 클래스 위자드 대신 사용하는 방법 : http://lafirr.tistory.com/59, http://minimonk.net/2929\n\n@@bgcolor(#FFBB00):color(#000000): &nbsp; &nbsp; Visual Studio .NET 2010 &nbsp; &nbsp; &nbsp; &nbsp; @@\n- 컴파일 속도가 2008보다 굉장히 느리다. 답답하다고 한다.\n- ''클래스 위자드의 귀환''\n- PC사양이 좋다면 2010을 쓰고, 2010 사용하기가 버벅거린다면 2008을 쓴다.\n- 윈도우7에서도 별도로 Framework 4.0을 별도로 설치해야 한다.\n- 2013 현재 2008과 2010을 많이 사용한다.\n- 2010 사용할바에 2012를 사용하는 것이 낫다.\n- Express 버전으로 MFC 만들 때 별도로 추가해야할 시스템 파일 : http://ethobis.tistory.com/71\n mfc100ud.dll, msvcp100d.dll, msvcr100d.dll\n- 에디션별 Exoress(무료) <<< PRO << PREMIUM < ULTIMATE\n- 차기표준 가칭 C++0x 도입 (정식으로 채택되지 않는 상태인듯)\n\n@@bgcolor(#FF5E00):color(#FFFFFF): &nbsp; &nbsp; Visual Studio .NET 2012 &nbsp; &nbsp; &nbsp; &nbsp; @@\n- 컴파일 속도가 2010보다 개선.\n- ''메트로 앱'' 개발이 가능.\n- 윈도우8은 별도로 .NET Framework 4.5를 설치할 필요가 없다.\n- 윈도우7은 별도로 .NET Framework 4.5를 설치해야 한다.\n- 2010 사용할바에 2012를 사용하는 것이 낫다.\n- 에디션별 PRO << PREMIUM < ULTIMATE\n- 표준 C++11 도입 (C++0x가 정식명칭 C++11로 바뀌면서 표준으로 채택)\n\n윈도우 NT 3.1 / Version 3.1\n윈도우 NT 3.5 / Version 3.5\n윈도우 NT 4.0 / Version 4.0\n윈도우 2000 / Version 5.0\n윈도우 XP / Version 5.1\n윈도우 비스타 / Version 6.0\n윈도우 7 / Version 6.1\n윈도우 8 / Version 6.2\n\n수집한 자료를 종합해보면,\nVS 6.0 : C, C++ 입문용. 그러나 2008부터 바로 입문해도 된다.\nVS 2008 : 윈도우7 많이 사용하는 요즘에 적합.\nVS 2012 : 앞으로의 추세. 하지만, 기존의 닷넷 버전들과 vista와 7의 OS관계로 비추어볼 때, VS 2015 정도가 나왔을때부터 진가를 발휘할 듯 싶으나, 그때부터 뛰어들면 남들보다 너무 늦고 메트로 앱을 개발하고 싶다면 초기개발 단계인 지금부터 툴에 뛰어들어야 한다고 생각한다.\n\n참고)\nhttp://msdn.microsoft.com/ko-kr/library/bb822049.aspx\nhttp://blog.naver.com/PostView.nhn?blogId=saltynut&logNo=120164126907\nhttp://ko.wikipedia.org/wiki/마이크로소프트_비주얼_스튜디오\n
출처 ; https://blogs.msdn.microsoft.com/chuckw/2015/08/05/where-is-the-directx-sdk-2015-edition/\nAugust 5, 2015By Chuck Walbourn - MSFT Chuck Walbourn - MSFT\n\nAs noted on MSDN, the DirectX SDK is deprecated. The June 2010 release is the last release, and “DirectX” is now part of the Windows SDK. There are really only three scenarios where you should continue to use the old DirectX SDK:\n\n&nbsp; &nbsp; 1. You have code (or perhaps an older book) that makes use of D3DX9, D3DX10, D3DX11, or XACT Engine. \n&nbsp; &nbsp; 2. Your application uses use XAudio2 and supports Windows 7 systems. \n&nbsp; &nbsp; 3. You are targeting Windows XP with the alternate @@bgcolor(#F9F2F4):color(#C7254E): v1x0_xp @@ Platform Toolset.\n\n...\n\n''D3DX:'' All versions of D3DX are deprecated including D3DX9, D3DX10, and D3DX11. See [[Living without D3DX|https://blogs.msdn.microsoft.com/chuckw/2013/08/20/living-without-d3dx/]] for replacements and recommendations including [[DirectX Tool Kit|https://github.com/Microsoft/DirectXTK]], [[DirectXTex|https://github.com/Microsoft/DirectXTex]], [[DirectXMesh|https://github.com/Microsoft/DirectXMesh]], and [[UVAtlas|https://github.com/Microsoft/UVAtlas]] on GitHub.\n\n...\n\n''DirectX SDK:'' If you need to make use of legacy DirectX SDK components such as D3DX9, D3DX10, D3DX11, or XAudio 2.7 with VS 2012, VS 2013 or VS 2015, see MSDN for details on mixing the Windows 8 or Windows 10 SDK correctly with the legacy DirectX SDK. Be sure to [[The Zombie DirectX SDK|http://blogs.msdn.com/b/chuckw/archive/2015/03/23/the-zombie-directx-sdk.aspx]] as well. If you are targeting Windows XP which makes use of the Windows 7.1A SDK, see [[Visual Studio 2012 Update 1|http://blogs.msdn.com/b/chuckw/archive/2012/11/26/visual-studio-2012-update-1.aspx]].\n\n\n<html> <span style="font-size: 16px;"> DirectX 12 </span> </html>\n\nThere is something called the DirectX 12 SDK which was used as a beta vehicle for the development of DirectX 12 through the Early Access Program. Now that the Windows 10 SDK is final, you don’t need access to the DirectX 12 SDK at all. The DirectX 12 samples are on [[GitHub|https://github.com/Microsoft/DirectX-Graphics-Samples]]. Note that there is also a header file called @@bgcolor(#F9F2F4):color(#C7254E): d3dx12.h @@ which is an all inline header with some utility code shipped in the GitHub samples.\n\n''Related:'' [[Where is the DirectX SDK (2013 Edition)?|http://blogs.msdn.com/b/chuckw/archive/2013/07/01/where-is-the-directx-sdk-2013-edition.aspx ]]\n\n''See also:'' [[Where is DXERR.LIB?|http://blogs.msdn.com/b/chuckw/archive/2012/04/24/where-s-dxerr-lib.aspx]], [[GDF Tools|http://blogs.msdn.com/b/chuckw/archive/2012/05/31/windows-8-release-preview-and-gdfs.aspx]], [[XDSP.H|http://blogs.msdn.com/b/chuckw/archive/2012/05/01/xdsp-h.aspx]], [[ SH Math | tp://blogs.msdn.com/b/chuckw/archive/2012/07/28/spherical-harmonics-math.aspx ]]\n\n
원문 ; http://norux.me/9\n\nsizeof가 어떤 구조체나, 배열의 전체 사이즈의 byte를 구해준다면, _countof 는 배열의 개수를 구하는 매크로 이다.\n * _countof는 비주얼스튜디오에서만 사용이 가능하다.\n\n''int arr[10];'' - int 형 타입의 배열을 선언하면\n&nbsp; &nbsp; sizeof(arr) = 40 bytes (4 바이트인 int 타입이 10개)\n&nbsp; &nbsp; _countof(arr) = 10 elements (10개의 배열)\n이 된다.\n\n_countof는 비주얼 스튜디오에서만 사용 가능한 매크로이다.\n{{{\n#define _countof(_Array) sizeof(_Array) / sizeof(_Array[0])\n}}}\n
출처 ; http://tip.daum.net/question/50774959\n참고 ; http://www.nahonza.kr/59\n\n''엘리어트파동이론 이란 ?''\n\n@@color(#ee1b24): 패턴(Pattern), 비율(Ratio), 시간(Time)@@의 세가지 요소를 포함하고 있다. 주가의 움직임은 @@color(#3058D2): 상승 5파와 하락 3파@@로 움직이면서 끝없이 순환한다는 이론으로 1939년 엘리어트가 발표한 이론이다. \n엘리어트는 주가는 연속적인 파동에 의해 상승하고 다시 하락함으로서 상승5파와 하락3파의 여덟 개 파동으로 구성된 하나의 사이클을 형성한다고 주장했다.\n\n큰 사이클인 주순환파(Primary Cycle)를 완성하기까지는 __보통 3년 정도가 소요__된다. 상승5파의 1번, 3번, 5번은 상승파동으로 주파동 또는 충격파동(Impulse Wave)으로 불리고 2번, 4번은 하락파동으로 조정파동(Corrective Wave)이다. 1번에서 5번까지의 상승 국면이 끝나면 하락3파에서 하락 국면이 시작된다.\n\n특히, 엘리어트파동이론에서는 피보나치 수열을 이용해 조정의 폭과 목표가격을 예측하는데 필요한 비율분석, 시간은 패턴이나 비율보다 중요성이 떨어지지만 패턴분석과 비율분석의 정확성 입증에 사용된다.\n\n엘리어트 파동이론은 상승/하락장 모두 적용이 가능하다.\n...\n\n예. 상승 국면 ; A(62), B(60), C(85), D(75) 일 때, 상승 예측치 = ?\n&nbsp; &nbsp; &nbsp; &nbsp; (C-B) X 0.618(황금비율) + D = E\n&nbsp; &nbsp; &nbsp; &nbsp; (85-60) X 0.681 + 75 = 90.45\n\n@@color(#ee1b24): 상승5파 @@\n@@color(#ee1b24): 1파 @@ : 추세의 시작을 알리는 파동\n@@color(#ee1b24): 2파 @@ : 1파의 급작스런 상승에 대한 되돌림의 파동 통상 1파 크기의 38.2% 내지는 61.8%의 조정을 보이는 경우가 많으며 100%의 조정은 절대로 있을 수 없다\n@@color(#ee1b24): 3파 @@ : 가장 강력한 본격상승국면을 보여주는 파동으로서 1파 크기의 1.618배로 상승하는 것이 일반적이며 상승파동인 1파나 5파보다 절대로 작을 수 없다\n@@color(#ee1b24): 4파 @@ : 상승 3파에 대한 조정파동으로서 3번파동의 소파동과 일치하는 경우가 많으며 통상 38.2%의 조정이 많다.\n@@color(#ee1b24): 5파 @@ : 상승장세의 마무리파동으로, 3파의 고점을 뚫지 못하고 하락하는 미달형이 많은 것이 특징이다. \n\n@@color(#3058D2): 하락3파 @@\n@@color(#3058D2): a파 @@ : 대단히 빠른속도의 하락\n@@color(#3058D2): b파 @@ : 갑작스런 하락추세의 시작에 따른 반발매수세의 등장으로 a파 크기의 38.2% 내지는 61.8%의 상승조정이 일반적이다.\n@@color(#3058D2): c파 @@ : 강력한 본격하락국면이 시작되며 a파 크기의 1.618배로 하락하는 경우가 많다.\n\n[img[../wiki/pds/GalleryMacro/201604_ElliottWave.jpg]]\n* 시작 ; 713\n** 1파 ; ''상승폭 751'' = 1,464 - 713\n* 상승점 ; 1,464 (∵ 기준)\n** 2파 ; 1번 파동폭의 38.2%, 751 x 38.2% = - 287 \n** 2파 ; 1번 파동폭의 61.8% 비율로 하락, 751 x 61.8% = - 464\n** 2번 파동이 1번의 출발점인 713 이하로 내려가면 엘리어드파동 성립 안됨\n* 하락점 ; 1,177 = 1,464 - 287 (또는 1,000 = 1,464 - 464)\n** 3파 ; 1번 파동폭의 1.618배 상승, 751 x 1.618 = 1,215\n** 가장 긴 파동으로 주가 상승이 제일 큰 구간으로 3번 파동 초기에 매수가 가장 수익내기 좋다.\n* 상승점 ; 2,392 = 1,177 + 1,215\n** 4파 ; 3번 파동폭의 38.2% 하락 예상, 1,215 x 38.2% = - 464\n** 이론상 1번 파동의 고점 이하로 하락해서는 안되며 <br> 2번 파동 끝인 1,177 이하로 하락할 경우 엘리어드파동 성립 안됨 \n* 하락점 ; 1,928 = 2,392 - 464\n** 5파 ; 3번 파동폭의 61.8% 상승, 1,215 x 61.8% = 750\n** 5파 ; 1번 파동의 상승폭 만큼 상승, 1,928 + 751 = 2,679\n** 5번 파동 마무리 시점에 매도 과점을 갖는 것이 좋다.\n* __상승점(최고점) ; 2,678 = 1,928 + 750 __\n** 상승 추세에서 이제 하락추세로 전환되는 구간으로 <br> 1 ~ 5번 파동 내의 작은 파동을 파악함으로써 a 파동의 진위를 확인하다.\n* 하락점\n** a 파동의 38.2% 또는 61.8% 만큼 상승 예상\n* 상승점\n** a 파동폭과 비슷하게 하락한다.\n* 하락점\n\n''파동이론에서 매매에 활용할 수 있는 응용기법''\n\n1. 파보니치 아크 ; 주가의 저점에서 고점, 고검에서 저점을 연결한 선\n&nbsp; &nbsp; 그 선을 기준으로 그림과 같은 38.2%, 50.0%, 61.8%에 해당하는 점을 찍는다.\n\n2. 파보나치 팬 ; 저점과 고점 또는 고점과 저점을 연결한 직선 만든다 . 그리고 선의 시작점과 종료점을 이용한 직각삼각형을 그린다.\n&nbsp; &nbsp; 직각삼각형의 세로변을 38.2%, 50.0%, 61.8%에 해당하는 지점에 점을 찍은뒤 그 점과 시작점을 연결한 직선을 그어 만들게 되는 추세선이 피보나치 팬이다.\n\n3. 파보나치 회귀\n&nbsp; &nbsp; 추세선으로의 사용보다 좀 더 쉽게 피보나치 목표가격을 계산하기 위한 도구로서 더욱 많이 사용하고 있다. 역시 저점과 고점 또는 고점과 저점을 연결한 선을 그은 뒤 이번엔 선의 위/아래 폭을 기준으로 38.2%, 50%, 61.8%에 해당하는 점의 수평선을 그어 만든다. 이렇게 하면 상승폭(또는 하락폭) 대비 38.2%, 50%, 61.8%에 해당하는 조정폭이 얼마나 되는지를 그래프 상에서 쉽게 파악할 수 있기 때문에 편리하다. \n\n\n
▣ 인용 ; 벤자민 그레이엄의 현명한 투자자 : 정말 읽기 쉬운 핵심 요약판 \n\n@@color(#C89342): ''추천 서문''@@\n(p.009) 주식의 안전마진은 '기업의 수익력이 채권수익률을 훨씬 초과할 때' 확보된다. 예를 들어 한 @@color(#3058D2): 기업의 이익수익률 @@''<EPS(주당순이익)/주가>''이 9%이고 채권수익률이 4%라고 가정하자. 이 주식은 수익률 면에서 채권보다 연 5% 포인트 유리하다. 이 회사는 초과 수익률 일부를 투자자에게 지급하고, 나머지는 재투자해서 기업의 가치를 높일 것이다.\n&nbsp; &nbsp; 10년 뒤에는 초과 수익률 합계가 주식 매입원가의 50%에 이를 것이다. 바로 이것이 안전마진이 되어 손실을 막거나 줄여줄 것이다. 이런 종목 20개 이상에 분산투자하면, 특별히 나쁜 상황만 아니라면 십중팔구 좋은 실적이 나올 것이다. 그래서 대표주에 투자하면 대단한 통찰이나 선견지면 없이도 성과를 얻을 수 있다.\n\n(p.010) 시장의 채권수익률보다 높은 수익률을 가진 기업에 부산 투자하며, 또한 주식에 올-인하는 것이 아니라 채권에 분산하여 투자하는 것. 이것이야말로 그레이엄이 《현명한 투자자》에서 진실로 말하고 싶었던 핵심이라는 생각이 든다.\n- 홍춘욱 -\n\n@@color(#C89342): ''주식투자의 원칙''@@\n1. 10~30 종목으로 적절하게 분산투자하라.\n2. 재무 구조가 건전한 대형 우량주를 선택하라.\n3. 20년 이상 배당을 계속 지급한 기업을 선택하라.\n4. 7년 평균 PER(주가수익배수)이 25 미만이고 12개월 PER은 20 미만인 기업을 선택하라.\n&nbsp; &nbsp; 이런 기준을 적용하면 인기 성장주들은 제외될지도 모른다.\n\n@@color(#C89342): ''포트폴리오의 시가평가액 변동''@@\n(p.084) 함부로 매매해서는 안 된다. 인간의 본성은 취약하므로, 충동에 휘말려 매매하지 않도록 유의해야 한다. __주가가 상승하면 고평가된 주식 일부를 매도해서 채권 비중을 높이고, 주가가 하락하면 채권 일부를 매도해서 주식 비중을 높이는 방식이 좋다.__\n\n@@color(#C89342): ''기업의 가치와 시가총액''@@\n(p.085) 시가총액이 순자산가치보다 3분의 1 이상 높은 주식, 즉 ''PBR이 1.33 이상인 주식은 매수하지 않는 편이 좋다.'' 그렇다고 해서 시가총액이 순자산가치와 비슷한 주식은 반드시 유망하다는 뜻은 아니다. PBR이 만족스러우면서, 재무 구조가 건전하고, 장기 수익성 전망도 밝은지 확인해야 한다. 이런 주식은 시가총액에 '투기 프리미엄' 비중이 크지 않으므로 주가 변동도 상대적으로 크지 않을 것이다.\n\n(p.089) @@color(#3058D2): 단기간에 돈을 벌려는 투기꾼은 시점선택 timing에 매달리지만, 기회를 기다릴 수 있는 투자자는 가격선택 pricing을 한다. @@\n일반 대중이 시장을 예측해서 돈을 벌 수 있다고 생각한다면 터무니없는 착각에 불과하다.\n\nhttp://freesis.kofia.or.kr/ - 금융투자협회, 채권수익률 공시\n| 기업 | 2015.12.EPS | 2016.04.26.주가 | 이익수익률 | PER | PBR | 3년 회사채 |\n| 사조산업 | 3,821 | 59,400 | 6.43| 15.31| 0.93| 1.924 |\n| 우리은행 | 1,566 | 10,650 | 14.70| 5.43| 0.39|~|\n| 현대산업 | 2,876 | 46,150 | 6.23| 16.05| 1.52|~|\n\n\n<html> <SPAN style="color:#C7254E; background-color:#F9F2F4; FONT-SIZE: 11pt" > #. PER & EPS증가율 매트릭스 차트 &nbsp; &nbsp; &nbsp; &nbsp; </SPAN></html>\n\n출처 ; http://m.itooza.com/view.php?ud=2011062312064703260\n\n''PER = 주가 ÷ 주당순이익(EPS) = 시가총액 ÷ 순이익''\n\nPER이 유지된다면, 분모인 주가와 분자인 EPS는 함께 움직입니다. 즉 EPS가 증가하면 주가도 그만큼 오릅니다. 아래 표는 PER이 10인 기업의 EPS가 20% 증가했을 때 주가 역시 20% 상승함을 보여준다.\n\n따라서 PER이 낮고 EPS증가율이 높은 기업이라면, 주가가 상승할 가능성도 그만큼 크다고 할 수 있습니다. 이를 알기 쉽게 나타낸 것이 바로 PER & EPS증가율 매트릭스 차트이다.\n\n1. PER이 비슷한 기업 가운데 EPS증가율이 높은 기업 찾아라\n2. EPS증가율이 비슷한 기업 가운데 PER이 낮은 기업을 찾아라\n
참고 사이트\n-. http://j3nasis.tistory.com/entry/버퍼오버플로우-취약-함수별-대책 - 버퍼오버플로우 취약 함수별 대책\n-. http://blog.naver.com/PostView.nhn?blogId=nunteng1&logNo=120140277 - 110113 sprintf warning 제거\n\nVC++ 6.0으로 작성된 프로젝트를 VS2005 이상으로 변환해서 컴파일 하거나\nVS2005로 프로젝트 작성시 strcpy, sprintf, strcat 등의 C 런타임 함수를 사용하면 다음과 같은 warning 메시지를 출력된다.\n\nwarning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.\n\n+++[ warning 메시지 제거 ]\n{{{\n#pragma warning(disable:4996) // 설정하거나 \n#define _CRT_SECURE_NO_DEPRECATE // 설정\n}}}\n헤더파일을 인크루드하기 전에, 정의를 하는 전처리기 방식으로 선언\n===\n\n\n++++[ strcpy_s 등의 _s 류의 문자열처리 함수로 대체 ]\nstrcpy, sprintf, strcat 등의 C 런타임 함수는 입력 값의 길이나 버퍼의 크기(문자 개수)를 설정할 수 없어 보안에 취약한 경우가 많다.\n⇒ strcpy_s, sprintf_s, strcat_s 등 (C11 표준 라이브러리 함수)\n* ''char *strcpy(char *dest, const char *src);''\n* ''char *strcpy_s(char *dest, size_t count, const char *src);''\n** 받을 문자열(dest)에 복사할 문자열(src)을 최대 길이(count) 만큼 복사한다. <br> 만약 최대 길이가 복사할 문자열보다 작다면 에러가 발생한다.\n\n* ''int sprintf_s(char *buffer, size_t sizeOfBuffer, const char *format, ... );''\n** 파라미터\n*** buffer 출력을 위한 저장소 위치\n*** sizeOfBuffer 저장할 최대 문자 수 ; 만약 문자열이 설정한 버퍼 사이즈를 넘어버렸을 경우를 미리 방지할 수 있다. 만약 설정한 버퍼를 넘어버렸다면 버퍼를 전부 NULL로 설정하고 에러를 리턴한다. <br> cf. sizeof가 어떤 구조체나, 배열의 전체 사이즈의 byte를 구해준다면, _countof 는 배열의 개수를 구하는 매크로 이다 (_countof는 비주얼스튜디오에서만 사용이 가능하다).\n*** format 형식 컨트롤 문자열\n*** ... 서식을 지정할 선택적 인수\n** 반환 값\n*** 기록된 문자 수이며, 오류가 발생할 경우는 -1입니다.\n참고 ; https://msdn.microsoft.com/ko-kr/library/ce3zzk1k.aspx\n''sprintf_s'' 함수는 일련의 문자 및 값의 서식을 지정하고 buffer에 저장합니다. <br> 각 argument(있는 경우)가 format의 해당 형식 사양에 따라 변환되어 출력됩니다. 형식은 일반 문자로 구성되어 있으며, printf를 위한 format 인수와 동일한 형태와 기능을 가지고 있습니다. 기록된 마지막 문자 뒤에 null 문자가 추가됩니다. 중복되는 문자열 간에 복사가 이뤄지면 이 동작은 정의되지 않습니다.\n\n''sprintf_s''와 ''sprintf''의 주요 차이점은 ''sprintf_s''는 유효한 서식 문자에 대한 서식 문자열을 검사하고, ''sprintf''는 서식 문자열 또는 버퍼가 ''NULL'' 포인터인지 여부만 검사한다는 점입니다. 검사에 실패할 경우 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 계속해서 실행하도록 허용한 경우 함수는 -1을 반환하고 ''errno''를 ''EINVAL''로 설정합니다.\n\n''sprintf_s''와 ''sprintf''의 다른 주요 차이점은 ''sprintf_s''는 출력 버퍼의 크기(문자 수)를 지정하는 길이 매개 변수를 사용한다는 점입니다. 종료 null을 포함하여 서식 있는 텍스트에 대해 버퍼가 너무 작은 경우 buffer[0]에 null 문자를 배치하여 버퍼를 빈 문자열로 설정하면 잘못된 매개 변수 처리기가 호출됩니다. ''_snprintf''와 달리 ''sprintf_s''는 버퍼 크기가 0이 아닌 한 버퍼를 null로 종료합니다.\n\n''swprintf_s''는 ''sprintf_s''의 와이드 문자 버전이며, ''swprintf_s''에 대한 포인터 인수는 와이드 문자 문자열입니다. ''swprintf_s''에서 인코딩 오류의 탐지 방식은 ''sprintf_s''와 다를 수 있습니다._l 접미사가 있는 이러한 함수 버전은 현재 스레드 로캘 대신 전달된 로캘 매개 변수를 사용하는 경우를 제외하고는 동일합니다.\n\n|!루틴 |!필수 헤더 |\n|''sprintf_s'', ''_sprintf_s_l'' |C: <stdio.h> <br> C++: <cstdio> 또는 <stdio.h> |\n|''swprintf_s'', ''_swprintf_s_l'' |C: <stdio.h> 또는 <wchar.h> <br> C++: <cstdio>, <cwchar>, <stdio.h> 또는 <wchar.h> |\n\nchar s1[20];\nsprintf_s(s1, _countof(s1), "%s", "Hello, world!");\n\nstatic TCHAR buffer[16];\n_stprintf_s(buffer, sizeof(buffer)/sizeof(TCHAR), _T("[%d]"), index);\n===\n\n\n+++[ 경계값 체크하는 안전한 함수를 사용 ]\n1. strcpy(), strcat(), sprintf(), vsprintf(), gets()와 같은 함수는 경계 값 체크를 하지 않으므로\n⇒ strncpy(), strncat(), snprintf(), fget()와 같은 함수로 대체\n2. scanf 계열의 함수들은 위험하므로 최대한 입력받을 수 있는 스트링의 길이를 제한\n3. realpath()나 getopt()과 같은 함수도 최소한의 PATH_MAX 바이트 길이를 정해주는 getwd() 함수를 사용\n\n!!! strcpy() 함수의 대체\nstrcpy() 함수는 버퍼의 크기를 평가하지 않아 문제가 발생하므로 복사할 데이터의 크기를 미리 검사하는 strncpy() 함수를 대신 사용할 수 있다.\n\n<취약한 프로그래밍 예> \n{{{\nvoid func( char * str ) {\nchar buffer[ 256 ];\nstrcpy( buffer, str );\nreturn; } \n}}}\n<안전한 프로그래밍 예>\n{{{\nvoid func( char * str) {\nchar buffer[ 256 ];\nstrncpy( buffer, str, sizeof(buffer)-1 );\nbuffer[ sizeof(buffer) - 1 ] = 0;\nreturn; }\n}}}\nstrcpy는 str의 널 문자를 자동으로 복사하지만 strncpy는 파라미터 n개만 복사하고 널을 붙이지 않는다.\nstr의 길이가 n보다 짧다면 buffer에 갖다 붙인 str 뒤로 인덱스 n-1까지는 널로 채우고,\n버퍼의 길이가 짧을 경우, 버퍼의 길이 -1개의 문자를 복사하고 '\s0'을 써준다. 즉, 어떤 경우에도 '\s0'으로 끝나는 올바른 문자열을 만들어 준다.\n\n!!! strcat() 함수의 대체\n<취약한 프로그래밍 예>\n{{{\nvoid func( char * str ) {\nchar buffer[ 256 ];\nstrcat( buffer, str );\nretrun; }\n}}}\n<안전한 프로그래밍 예>\n{{{\nvoid func( char * str ) {\nchar buffer[ 256 ];\nstrncat( buffer, str, sizeof( buffer) -1 );\nretrun; }\n}}}\n명시한 길이만큼 원래의 스트링에 덧붙인다.\n\n!!! sprintf() 함수의 대체\n이 함수는 데이터의 길이가 버퍼보다 더 크면 버퍼에 어떤 것도 기록하지 않고, snprintf() 함수의 return 값으로 버퍼에 쓰여진 값을 확인할 수 있다.\n\n<취약한 프로그래밍 예>\n{{{\nvoid func( char * str ) {\nchar buffer[ 256 ];\nsprintf( buffer, "%s", str );\nretrun; }\n}}}\n<안전한 프로그래밍 예>\n{{{\nvoid func( char * str ) {\nchar buffer[ 256 ];\nif ( snprintf( buffer, sizof( buffer )-1, "%s", str ) > sizeof( burrer ) -1 )\n/*....*/\nretrun; }\n}}}\n버퍼에 기록한 문자의 수를 리턴하는 것이 아니라 버퍼에 기록할 문자의 수를 계산하여 리턴한다.\n===\n\n
!! Cocos2d-x 3 모바일 게임 프로그램\n2014.05. 이자건 지음, 에이콘출판주식회사, ISBN 978-89-6077-565-7\n\n코코스2d는 원래 파이썬용으로 제작된 프레임워크입니다. 하지만, 2008년에 리카르도 케사다 Ricardo Quesada가 아이폰 버전으로 포팅한 것이 지금의 코코스2d-x의 모체가 되었습니다. 그리고 2011년 초에 코코스2d 아이폰 버전 개발팀이 미국의 소셜게임 회사인 징가 Zynga에 인수되면서 코코스2d 아이폰 버전은 징가에서 개발 및 배포, 관리를 하고 있습니다.\n\n코코스2d-x는 2010년 7월에 코코스2d 아이폰 버전을 중국의 샤먼 Xiamen(하문)지역에 있는 Team-X팀에서 포팅을 하면서 처음으로 제작되었습니다. 현재는 중국의 모바일 게임 회사인 추콩 테크놀로지에서 개발 및 배포, 관리를 하고 있습니다. 코코스2d-x에 대한 자세한 정보는 코코스2d-x 공식 홈페이지(http://cocos2d-x.org)에서 얻을 수 있습니다.\n\n\n!!! (p.033) ''코코스2d-x와 유니티 비교''\n| ! | !코코스2d-x | !유니티 |\n|개발 언어 |C++, 자바스크립트, 루아 |C#, 자바스크립트, Boo |\n|지원 플랫폼 |iSO, 안드로이드 등 대부분에 모바일 플랫폼 및 PC 플랫폼 |모바일 플랫폼과 PC 플랫폼 외에 콘솔(Xbox, PS) 플랫폼도 지원 |\n|가격 |무료 |프로버전 165만원, iSO, 안드로이드 플러그인 프로버전 각 165만원 |\n|2D 기능 |제공 |4.3버전부터 스프라이트 등 일부 기능 제공 |\n|3D 기능 |일부 기능 제공 |제공 |\n|GUI |대부분의 GUI 기능 제공 |일부분 제공, 대부분 유료 플로그인으로 구현 |\n|모바일 플랫폼 빌드 |조금 어려움 |쉬움 |\n|에디터 지원 |코코스튜디오 등 일부 지원 |완벽 지원 |\n|접근성 |낮음, 개발 언어에 대한 이해도가 없으면 사용하기 어려움 |높음, 개발 언어에 이해도가 낮아도 사용하기 쉬움 |\n\n-. http://cocos2d-x.org ; 코코스2d-x 공식 홈페이지\n&nbsp; &nbsp; &nbsp; &nbsp; Cocos2d-JS ; 웹용 프로그램 및 게임을 만들 때 사용되는 코코스2d의 버전\n&nbsp; &nbsp; &nbsp; &nbsp; CocoStudio ; GUI 및 애니메이션 에디터 등이 있는 에디터 툴\n-. http://www.python.org ; 코코스2d-x의 경우 파이썬 3.4.x 버전보다는 2.7.x 버전을 다운로드하는 것을 권장\n\n\n!!! 좌표계 ; OpenGL 3D 그래픽 API 기반 ( 좌하(0,0) ⇒ 우상(99,99) )\n-. 앵커포인트 ; 화면에 이미지나 텍스트와 같은 객체를 출력할 때 기준값 (정렬방식 (0,0) ⇒ (1,1) )\n&nbsp; &nbsp; / x 값이 0 이면 x축 정렬 기준은 객체의 왼쪽 끝, 1 이면 오른쪽 끝 \n&nbsp; &nbsp; / y 값이 0 이면 y축 정렬 기준은 객체의 가장 아래, 1 이면 가장 위\n&nbsp; &nbsp; / 스프라이트 애커포인트의 기본값은 (0.5, 0.5)\n\n-. Sprite 객체\n&nbsp; &nbsp; / 이미지를 화면에 출력하는 객체, 이미지의 위치, 색상, 투명도 등을 포함한 객체\n \n-. Label 객체\n&nbsp; &nbsp; / 텍스트를 화면에 출력하는 객체\n\n-. 폰트\n&nbsp; &nbsp; / BMFont ; 비트맵 이미지로 만든 .png 파일과 폰트의 정보를 저장한 .fnt 파일을 가지고 글자를 출력\n&nbsp; &nbsp; / CharMap ; BMFont와 비슷하지만 BMFont처럼 폰트의 정보 파일(.fnt)을 사용하지 않고 사용자가 파일의 정보를 직접 저장\n&nbsp; &nbsp; &nbsp; &nbsp; 글자의 순서는 ASCII Code 순서로 제작하며, 각 글자의 너비와 높이도 모두 동일\n&nbsp; &nbsp; &nbsp; &nbsp; 게임에서 숫자를 표시하는 겨우에 많이 사용\n&nbsp; &nbsp; / SystemFont, TTF와 BMFont의 기본 앵커포인트의 값은 (0.5. 0.5)이지만\n&nbsp; &nbsp; &nbsp; &nbsp; CharMap의 기본 앵커포인트의 값은 (0,0) 이기 때문에 가운데 출력을 위해서는 따로 앵커포인트를 지정해야 한다.\n\n\n!!! 액션\n-. ''기본 액션'' ; 함수명 By와 To\n&nbsp; &nbsp; / By로 끝나는 액션 ; 변경하는 값이 현재 값을 기준으로 상대적인 값으로 변경\n&nbsp; &nbsp; / To로 끝나는 액션 ; 변경하는 값이 현재 값과는 상관없이 입력한 절대값으로 변경\n|! 분류 |! 종류 |\n|위치 |MoveBy, MoveTo, JumpBy, JumpTo, BezierBy, BezierTo, Place |\n|크기 |ScaleBy, ScaleTo |\n|회전 |RotateBy, RotateTo |\n|화면 출력 |Show, Hide, Blink, ToggleVisibility |\n|투명도 |FadeIn, FadeOut, FaceTo |\n|색상 |TintBy, TintTo |\n&nbsp; &nbsp; / 만들어진 액션은 ''runAction()'' 메소드를 통해 실행 <br> 메소드를 호출하면, 호출한 해당 객체에 지정된 액션이 바로 실행되며, 따로 설정하지 않아도 지정된 시간 동안 액션이 실행\n\n-. ''응용 액션'' ; 마지막에는 더 이상 입력하는 액션이 없다는 것을 알려주기 위해서 꼭 NULL값을 입력\n* Sequence 액션 ; 2개 이상의 액션을 순차적으로 실행\n* Spawn 액션 ; 동시에 2개 이상의 액션을 실행\n* reverse 액션 ; 실행했던 액션을 반대로 실행 (반대로 실행할 수 있는 액션만 가능)\n* DelayTime 액션 ; 지정된 시간 동안 어떤 동작도 하지 않고 기다리는 액션\n* Repeat 액션 ; 지정된 액션을 지정된 횟수만큼 반복\n* RepeatForever 액션 ; 무한 반복\n* Ease 액션 ; 액션을 실행할 때 동일한 속도가 아닌 특정한 가속도를 주어서 실행\n** EaseIn, EaseOut, EaseInOut \n** EaseSineIn, EaseSineOut, EaseSineInOut \n** EaseElasticIn, EaseElasticOut, EaseElasticInOut \n** EaseBackIn, EaseBackOut, EaseBackInOut\n* Call Function 액션 ; 메소드를 호출, 보통 조합 액션에서 사용\n** CallFunc 액션 ; 매개변수가 없는 콜 펑션\n** CallFuncN 액션 ; 매개변수로 액션을 실행한 객체 등을 받는 콜 펑션\n\n
!! 개발\n* Direct3D (DirectX 9.0)\n** http://www.dimmension3.spine.pl/modules.php?name=Tutorials&wtd=show_tutorial&nr=70 \n; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - GRAFiKA 3D / Tutoriale - Direct3D - Dot3 env. (cf. texm3x3vspec - ps.1.1.)\n** http://3dapi.com/blc/ - @@color(#ee1b24): Lectures on Game Programming @@\n** http://telnet.or.kr/directx/graphics/reference/reference.htm - Direct3D C/C++ 레퍼런스\n** http://www.codesampler.com/dx9src/dx9src_1.htm - CodeSampler.com\n* Direct3D (DirectX 8.1)\n** http://www.codeproject.com/KB/directx/dx8template/dx8template.zip - CD3DApplication 구성 샘플\n* 참고\n** http://3doc.i3dconverter.com/index.html - 3D Object Converter\n*** AIKA에서 사용하고 있는 *.msh 파일을 확인할 수 있음(Data Load만 가능). \n*** *.msh ; GiD ASCII MESH, Gmsh ASCII MESH 포맷으로 로딩\n** http://www.copypastecharacter.com/ - 특수문자 모음 사이트\n** http://www.buupjungbonara.com/bizservice/bookcon/ - 비즈폼 도서콘텐츠\n\n\n!! for 3DS MAX\n@@color(#04f): ▣ 3Ds Max - Allegorithmic Substance 텍스처 @@ &nbsp; &nbsp; @ 2015-10-16 @\n\n3Ds Max 2011부터 지원하고 있으며 설치 후 Substance에서 제공하는 각종 라이브러리를 사용할 수 있다.\n설치때 Allegorithmic Substance 옵션을 지정하면 기본 제공되는 텍스처 라이브러리를 무료로 사용할 수 있다.\n\n3Ds Max 설치시 '''Install Tools & Utilities'''에서 Allegorithmic Substance 관련 항목을 체크 설치한다.\n\n!!! SHADERFX\nhttp://www.bencloward.com/resources.shtml - Technical Artist\n\nShaderFX is a plugin for 3ds Max that I co-authored. It lets artists create real-time HLSL FX shaders for use in the 3ds Max viewport and also for external game engines such as XNA, Quest 3D, Virtools, Ogre, etc. The node-based interface is simple and easy to use. Artists with no shader programming experience can create complex shaders in just a few minutes. Check it out!\nShaderFX is currently at version 4.1\n\n@@color(#ee1b24): Nvidia's Cg plugin doesn't work in Max 8@@, but the good thing is, it doesn't need to. Max has supported HLSL shaders natively since version 6. I posted a set of HLSL shaders on my site that you're welcome to use. Grab them here:\n\nhttp://www.bencloward.com/resources_shaders.shtml \n\n\n!! for UNITY\n@@color(#04f): ▣ Adventure Creator @@ &nbsp; &nbsp; @ 2015-11-03 @ (from 동선)\n__www.adventurecreator.org__ - cinematic scene 구성에 활용 (facial animation 가능)\n* 파티클 효과 생성\n** Particle Designer ; 맥 PC에서 사용할 수 있는 파티클을 만드는 툴 <br> https://71squared.com/particledesigner\n** Particle2dx ; 웹에서 쉽게 파티클을 제작할 수 있는 페이지 (인터넷 익스플로어에서는 실행되지 않음) <br> http://particle2dx.com/\n\n\n!! for Unreal Engine\n@@color(#04f): ▣ 언리얼 데이타는 cm를 기본으로 사용 @@ &nbsp; &nbsp; @ 2016-11-15 @\n&nbsp; &nbsp; / 일반 메쉬인 경우는 m, inch 단위에서 익스포트후 수정해도 문제가 발생하지 않음\n&nbsp; &nbsp; / Bone 적용 바디인 경우는 m, inch → cm 단위로 변환 후 익스포트해서 사용\n&nbsp; &nbsp; &nbsp; &nbsp; m, inch 단위에서 익스포트 하면 Bone 회전시 문제가 발생할 수 있음\n\n
<html> <span style="font-size: 14px;"> <b> 함수 포인터를 나타내는 형식을 선언 </b> </span> </html>\n참고 ; http://blog.naver.com/taksclub/80068771412\n\nC++에서 Delegate은 전역함수, 일반함수, 멤버함수, 함수자(functor)를 ''Delegate에 작업을 위임함으로서 일관된 관점을 통해 처리하도록 도와주는 인터페이스''라고 할 수 있다. 다르게 이야기하면 구현되는 함수나 객체들은 Delegate로 묶어버리면, 이를 관리하는 곳에서는 Delegate만 알면된다는 의미이다. C#에서도 Delegate라는게 언어 자체에서 지원하고 있다. 이를 활용하면 상당히 유연한 구성을 할 수 있게 된다.\n\n<html> <span style="font-size: 14px;"> <b> ▶ 함수 포인터(함수를 가르키는 포인터)의 대체 </b> </span> </html>\n{{{\n//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ\n#include <stdio.h>\n\nint (*pMulti)(int a, int b);\n\nint Multi(int a, int b)\n{\n int c;\n c = a * b;\n return c;\n}\n\nvoid main()\n{\n pMulti = Mutli;\n printf("함수 포인터 호출 : %d",pMulti(3, 7));\n}\n}}}\nC#에선 포인터를 제한해 놓았기 때문에 위와같은 것의 사용은 불가능하다.\n그러나 그 대체 기법으로 델리게이트(대리자)를 제공해준다. 모양은 위와 크게 다른데. 기본적으로 하는일은 위와 크게 다르지 않다.\n아래는 위 코드를 C#으로 바꾼것이다.\n{{{\n//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ\nusing System;\n\ndelegate int delegateMulti (int a, int b); //델리게이트 선언\n\nclass App\n{\n static int Multi(int a, int b)\n {\n int c;\n c = a * b;\n } \n\n static void Main()\n {\n delegateMulti dMulti = new delegateMulti(Multi); //생성, 대입\n Console.Write Line("델리게이트 사용 : {0}", dMulti(3, 7));\n }\n}\n}}}\n-. 델리케이트의 구성 ; delegate 반환형 델리게이트이름 ( 파라미터들);\n 델리게이트는 클래스나 구조체와 같은 등급이므로 메서드 내에선 정의 할 순 없다.\n\n-. delegateMulti dMulti = new delegateMulti(Multi);\n 델리게이트의 생성자에 파라미터 하나를 꼭 넣게 되어있는데 그 부분에 대리 호출할 메서드의 이름을 적어주면 된다.\n\n-. 정의 형식\ndelegate @@color(#FF0000): int @@ delFunc( @@color(#0000FF): int @@ a, @@color(#0000FF): char @@ b);\n\n@@color(#FF0000): int @@ Func( @@color(#0000FF): int @@ a, @@color(#0000FF): char @@ c)\n{\n\n}\n@@color(#FF0000): 1. 델리게이트의 반환형과 메서드의 반환형(int) @@\n@@color(#0000FF): 2. 델리게이트의 파라미터가 int, char 이면 메서드의 파라미터도 int , char 이어야 함. @@\n{{{\n//〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n// C/C++의 함수 포인터\n//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ\ntypedef void (*delFunc)();\n\nvoid Func()\n{\n ...\n}\n\nvoid main()\n{\n delFunc dFunc;\n dFunc = Func;\n dFunc();\n}\n\n//〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n// C#의 델리게이트\n//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ\ndelegate void delFunc();\n\nclass App\n{\n static void Func()\n {\n ...\n }\n\n static void Main()\n {\n delFunc dFunc;\n dFunc = new delFunc(Func);\n dFunc();\n }\n}\n}}}\n\n<html> <span style="font-size: 14px;"> <b> ▶ 델리게이트와 이벤트 </b> </span> </html>\n{{{\n//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ\nusing System;\n\ndelegate void EventDelegate(Object sender);\n\nclass EventClass\n{\n public event EventDelegate Event;\n\n public FireEvent()\n {\n if (Event != null)\n {\n Event(this);\n }\n }\n}\n\nclass App\n{\n public void EventFunc(Object sender)\n {\n Console.Write Line(sender.ToString() + "의 이벤트가 발생했습니다.");\n }\n\n public static void Main()\n {\n EventClass evtCls = new EventClass();\n evtCls.Event += new EventDelegate(EventFunc);\n evtCls.FireEvent();\n }\n}\n}}}\nEventFunc()를 실행하지도 않았는데.. 'XXX의 이벤트가 발생했습니다.' 라고 출력된다.\n\nEventFunc() 가 호출된 것은 Event에 의해 호출되었기 때문이다. 그럼 실행되는 과정을 알아보자.\n1. EVentClass를 바탕으로 evtCls객체가 생성됨.\n2. evtCls클래스의 Event란 이벤트가 EventDelegate란 델리게이트에 의해 EventFunc 메서드와 연결됨.\n3. evtCls내의 FireEvent() 메서드 호출\n여기까지는 App내의 Main메서드가 있는 클래스의 실행과정이다.\n그럼 이벤트가 있는 클래스는 어떨까.. FireEvent() 메서드를 보면 Event를 발생시키고 있는것이 보일것이다.\n\n그런데 잘 보면 이것이 널인지 아닌지를 검사하고 있다. 이는 델리게이트가 연결되지 않았을때의 이벤트 발생을 막기 위한 것이다. 이벤트는 자료형이 델리게이트이기 때문에.. 어떠한 델리게이트도 연결되지 않으면 NULL 값을 가진다.\n만약에 NULL값 처리가 미흡해 델리게이트가 연결되지 앟은 이벤트를 실행하게 되면 NULL값이나 형(자료형)에 관한 에러를 낼것이다.\n
긍정심리학(肯定心理學, positive psychology)은 \n개인과 사회를 번영시키는 강점과 장점을 연구하는 최근 주목받고있는 심리학의 한 분야이다. 단지 정신질환을 치료하는 것보다 일반적인 인생을 보다 충실히 하기 위한 연구가 이루어지고 있다. 즉, 긍정심리학은 능력 개발 상담의 한 분야이다.\n\n!!! 고통스러운 몰입도 행복을 가져온다\n'긍정 심리학의 창시자'라고 일컬어지는 ''마틴 셀리그먼'' Martin Seligman 교수의 행복 공식 'PERMA'\n{{wrappingClass{\n&nbsp; &nbsp; ①긍정적 정서(Positive emotion)=기쁨, 희열, 따뜻함, 자신감, 낙관성\n&nbsp; &nbsp; ②몰입(Engagement)=시간 가는 줄 모르는 것, 어떤 활동에 빠져든 동안 자각하지 못하는 것, 자발적으로 업무에 헌신하는 것\n&nbsp; &nbsp; ③관계(Relationship)=타인과 함께 하는 것, 말할 수 없이 기뻤던 순간, 자신의 성취에 엄청난 자긍심을 느꼈을 때를 생각해 보면 거의 타인과 함께 했을 때\n&nbsp; &nbsp; ④의미(Meaning)=자신보다 더 중요하다고 믿는 어떤 것에 소속되고 거기에 기여하는 것에 기초\n&nbsp; &nbsp; ⑤성취(Accomplishment)=남에게 이기기 위해서이거나 돈을 벌기 위해서가 아니라 성취 그 자체가 좋아서 추구하는 것\n}}}\n\nPERMA가 기존의 행복 이론과 다른 점은, 사람들이 특별한 이유 없이 '그 자체가 좋아서' 하는 행위들을 행복의 조건으로 포함한 데 있다. 셀리그먼 교수는 이를 춤출 때의 우아함에 비유한다. 우아함은 춤의 결과로 얻어지는 어떤 보상이 아니다. 우아함은 그 자체로 훌륭한 춤의 일부이다. 또 명상의 즐거움에 대해 말한다는 것은 명상하는 행위 그 자체를 말할 뿐, 명상에 수반되는 어떤 정서를 의미하는 게 아니다.\n\n긍정 심리학의 요체는 행복하려면 주변 환경이 안정적이고 자신을 위협하는 조건이 없어야 하지만 현실이 그렇지 않다면 적극적인 방법으로 심신을 만족스러운 상태로 바꾸려는 노력을 하고, 개인의 관심과 가치가 반영된 적절한 목표를 세우고, 생각을 밝게 하도록 훈련하는 것이다. 또한 매사를 긍정적으로 보면 사고의 폭이 넓어지고 부정적인 생각이 사라지며, 유머를 즐기면 사고가 긍정적으로 발전하고, 매사에 감사하는 훈련, 남의 훌륭한 면을 보거나 선행을 하는 ‘고양’ 과정을 경험하는 것, ‘몰입’을 통해 순수한 즐거움을 체득하는 것 등이다.\n\n마틴 셀리그만은 행복해지려면 행복에 대해 지금까지 가지고 있던 시각부터 바꾸라고 조언하며, ‘생각을 바꿔 행복해지는 십계명’으로 다음을 제시하였다.\n{{wrappingClass{\n&nbsp; &nbsp; ① 자신의 편견을 파악하라.\n&nbsp; &nbsp; ② 모든 잘못을 내 탓이라고 단정하지 말라.\n&nbsp; &nbsp; ③ 최악의 순간보다 최상의 순간을 상상하라.\n&nbsp; &nbsp; ④ 쉬운 해결책을 찾아라.\n&nbsp; &nbsp; ⑤ 성공했을 때의 모습을 상상하라. \n&nbsp; &nbsp; ⑥ 낙천주의자라면 어떻게 했을까 생각하라.\n&nbsp; &nbsp; ⑦ 좋았던 일의 목록을 만들어라. \n&nbsp; &nbsp; ⑧ 주위 사람들과 기쁨을 나눠라. \n&nbsp; &nbsp; ⑨ 즐길 수 있는 목표를 찾아라.\n&nbsp; &nbsp; ⑩ 자신이 할 수 있는 한계를 정하라. \n}}}\n
한자성어(漢字成語) 혹은 고사성어(故事成語)는 주로 중국의 고사에서 유래하여 비유적인 내용을 담은 함축된 글자로 상황, 감정, 사람의 심리 등을 묘사한 말이다. 주로 4글자로 된 것이 많기때문에 사자성어(四字成語)라 일컬키도 한다. 일상생활이나 글에 많이 사용된다.\n \n한국어권에서 쓰인 속담이 한자성어로도 쓰이는 경우도 있는데, 그 예로 ‘제 논에 물 대기’가 아전인수(我田引水)로 쓰이는 것이 있다.\n\n@@color(#0044ff): ▣ 귤화위지 @@ (橘化爲枳) ; 회남의 귤을 회북에 심으면 탱자가 된다는 귤화위지는 제 아무리 좋은 사람이나 물건도 환경이 바뀌면 변한다는 의미를 담고 있다.\n\n@@color(#0044ff): ▣ Momento Mori @@ ; 고대 로마에서 사용되던 라틴어로 '죽음을 기억하라'는 뜻.\n\n\n<html> <span style="font-size: 11pt;"> <font color=RoyalBlue> <b> ● 필 나이트(Phil Knight) </b> </font> </span> </html> ; 나이키 창업자\n&nbsp; &nbsp; / 우리는 브랜드뿐 아니라 문화를 창조하고, 제품뿐 아니라 아이디어를 판다.('창조적 문화'를 강조)\n&nbsp; &nbsp; / 달리기는 고통스럽고 위험한 운동이다. 보상도 적고, 그마저 확실히 받는다는 보장이 없다. 목적지가 정해서 있는 것도 아니다. 스스로 달리는 행위에서 기쁨을 얻어야 하고, 자신을 석득할 수 있어야 한다. (사업은 달리기와 유사하다)\n&nbsp; &nbsp; / Just Do It.\n\n\n<html> <SPAN style="FONT-SIZE: 11pt;"> <font color=RoyalBlue> <b> #. 디테일은 일류와 이류의 차이를 만든다. </b> </font> </SPAN> </html> (수준의 차이 결정) \n▷ 레이 브레드버리의 소설 <화씨 451>\n&nbsp; &nbsp; 세밀하게 이야기하라.\n&nbsp; &nbsp; 생생하게 이야기하라.\n&nbsp; &nbsp; 좋은 작가들은 진실한 삶의 이야기를 담지만,\n&nbsp; &nbsp; 그저 그런 작가들은 수박 겉핥기식으로 쓱 어루만지고 지나갈 뿐이다.\n\n\n<html> <SPAN style="FONT-SIZE: 11pt;"> <font color=RoyalBlue> <b> #. 미래에 살아남을 업종 </b> </font> </SPAN> </html> (by 인구학적 분석)\n▷ 저출산의 원인과 해법 <조영태>\n-. ''어떤 연령대가 대상인가''\n&nbsp; &nbsp; / 대형마트의 황금기, 2000년대 초반 ; 4인가구\n&nbsp; &nbsp; &nbsp; &nbsp; ⇒ 1~2인 가구 증가 ; 노인 1인 가구 증가 (⇒ 동네 소매점 선호), 일본 다이소 급성장\n&nbsp; &nbsp; / 20~ 30대 스타벅스 등 기호 상품 ; 소비 습관을 유지하는 경향 ⇒ 40대에서도 소비\n\n\n
출처 ; rpkim.tistory.com/26\n\n''winnt.h'' 에서\ntypedef void * POINTER_64 PVOID64;\n이 부분에 에러가 날 때가 있다.\n\n위의 부분을 주석으로 해주고 아래와 같이 적는다.\n{{wrappingClass{ typedef void *POINTER_64; <br> typedef POINTER_64 PVOID64; }}}\n\n간혹, 반대로 에러가 날 때가 있으니, 지우지 말고 꼭 주석처리한다.\n\n\n<html>\n<span style="background:#E2E2ff ; font-family:돋움; font-size: 16px;"> <b> VS2005, typedef void * POINTER_64 PVOID64; 에러 &nbsp; &nbsp; </b> </span>\n</html>\n출처 ; http://blog.naver.com/PostView.nhn?blogId=psj5500&logNo=140117468122&parentCategoryNo=&categoryNo=28&viewDate=&isShowPopularPosts=false&from=section\n\n''문제 : '' &nbsp; &nbsp; (VS2005에서 나오는 문제)\nWinNt.h 에서\ntypedef void * POINTER_64 PVOID64; 을 컴파일할 때\n&nbsp; &nbsp; &nbsp; &nbsp; error C2146: 구문 오류: ';'이(가) 'PVOID_64' 식별자 앞에 없습니다.\n에러 발생.\n\n''원인 : ''\nPVOID_64 가 basestd.h에서 정의되지 못하는 문제.\n{{{\n#if !defined(_MAC) && (defined(_M_MRX000) || defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_VER >= 1100) && !(defined(MIDL_PASS) || defined(RC_INVOKED))\n #define POINTER_64 __ptr64\n typedef unsigned __int64 POINTER_64_INT;\n\n #if defined(_WIN64)\n #define POINTER_32 __ptr32\n #else\n #define POINTER_32\n #endif\n\n#else\n\n #if defined(_MAC) && defined(_MAC_INT_64)\n #define POINTER_64 __ptr64\n typedef unsigned __int64 POINTER_64_INT;\n #else\n\n #if (_MSC_VER >= 1300) && !(defined(MIDL_PASS) || defined(RC_INVOKED))\n #define POINTER_64 __ptr64\n #else\n #define POINTER_64\n #endif\n\n typedef unsigned long POINTER_64_INT;\n #endif\n\n #define POINTER_32\n#endif\n}}}\n\n''해결책 : ''\n1.winnt.h를 수정하는 방법\n{{{\n#if (_MSC_VER >= 1300) && !(defined(MIDL_PASS) || defined(RC_INVOKED))\n#define POINTER_64 __ptr64\n#else\n#define POINTER_64\n#endif\n}}}\ntypedef void *PVOID;\ntypedef void * POINTER_64 PVOID64;\n\n2.stdafx.h에서 다른 파일을 include 하기 전에 define을 추가\n{{{\n#if (_MSC_VER >= 1300) && !(defined(MIDL_PASS) || defined(RC_INVOKED))\n#define POINTER_64 __ptr64\n#else\n#define POINTER_64\n#endif\n}}}\n#include ...\n\n\n
''* SAFESEH ( Structured Exception Handling )''\n- 윈도우 상에서 예외처리를 하는 기법\n- 메모리에 대한 손상이 발생하거나 시스템이 예기치 않게 종료되는 이벤트 발생시 프로그램에 대한 예외처리 담당\n- 외부 공격자가 프로그램에 대해 예외처리 레코드를 덮어쓰게 되면 이 예외를 탐지하여 프로그램을 종료시킴\n \n''*옵션 On/Off''\n프로젝트 속성 -> 링커 -> 고급 -> 이미지에 안전한 예외처리기 포함 ( 예/아니오 )\n혹은 명령줄 에서 /SAFESEH:NO 입력\n\n''해결법''\n프로젝트 속성->구성 속성->링커->명령줄\n{{{\n/safeseh:no\n}}}\n
{{{\nHRESULT D3DDevice::DisplayErrorMsg( HRESULT hr, DWORD dwType )\n{\n...\n\n // case HRESULT_FROM_WIN32( ERROR_FILE_NOT_FOUND ):\n case __HRESULT_FROM_WIN32( ERROR_FILE_NOT_FOUND ):\n _tcscpy( strMsg, _T("Could not load required media." ) );\n break;\n\n...\n return hr;\n\n}\n}}}\n''error C2051 : case 식이 상수가 아닙니다.//\n환경에서 HRESULT_FROM_WIN32가 인라인 함수로 정의되어 있기 때문에 이것을 매크로 로 바꿉다.\n\n참고, c:\sProgram Files (x86)\sWindows Kits\s8.1\sInclude\sshared\swinerror.h\n{{{\n//\n// HRESULT_FROM_WIN32(x) used to be a macro, however we now run it as an inline function\n// to prevent double evaluation of 'x'. If you still need the macro, you can use __HRESULT_FROM_WIN32(x)\n//\n#define __HRESULT_FROM_WIN32(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)))\n}}}
''error LNK2019: _main 외부 기호(참조 위치: _tmainCRTStartup 함수)에서 확인하지 못했습니다.''\n{{{\nMSVCRTD.lib(crtexe.obj) : error LNK2019: _main 외부 기호\n(참조 위치: ___tmainCRTStartup 함수)에서 확인하지 못했습니다.\nC:\s경로~\sD3D_Normal.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부참조입니다.\nD3D_Normal_2 - 오류: 2개, 경고: 0개\n========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========\n}}}\n_tmainCRTStartup를 찾을 수 없다는 것은 CALLBACK함수인 main()을 찾지 못했다는 것이다.\n즉 main() 함수가 없을때 발생하는 에러.\n \n그런데 우린 main()함수가 있다? -> @@color(#FF0000): 프로젝트 설정문제다. @@\n\n메뉴에서 ''프로젝트 > 속성 > 구성 속성 > 링커 > 시스템 > 하위 시스템''에서 자신이 만들려는 프로젝트와 맞는 설정으로 바꿔준다. \n\n※ 비주얼 스튜디오로 프로젝트를 새로 작성할때 Win32에 두개의 템플릿을 선택할 수 있는데, 작성하고자 하는 프로그램과 다른 템플릿을 선택했을경우 위와 같이 에러가 난다. \n콘솔에서는 프로그램의 시작점이 main(), 윈도우 프로그래밍에서는 WinMain()이 시작점이다.\n\n
!!! WinAPI-기본코드\n|main |도스 프로그램의 시작점, 반드시 소문자 |\n|~|통상 인수 없이 사용되지만, main( int argc, char * argv[] )처럼 인수를 사용 |\n|WinMain |윈도우 프로그램의 시작점, 대소문자를 구분 |\n|~|인수를 반드시 4개를 가짐 |\n\nint WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow );\n|hInstance |현재 실행되고 있는 프로그램의 인스턴스 핸들 |\n|hPrevInstance |바로 앞에 실행된 현재 프로그램의 인스턴스 핸들. 통상 NULL |\n|lpCmdLine |명령 행으로 입력된 프로그램 인자. main 함수의 argv 인수에 해당 |\n|nCmdShow |프로그램이 처음 실행 되었을 때 윈도우 창의 형태. 최소, 보통 등... |\n \n\n\n
source\sCommon\scommon.h\n{{{\n//----------------------------------------------------------------------------\n// VERSION DEFINES\n//----------------------------------------------------------------------------\n#define DEBUG_VERSION 0x00000001\n#define RETAIL_VERSION 0x00000002\n#define OPTIMIZED_VERSION 0x00000010 // optimized\n#define DEBUG_ID 0x00000020 // use debug ids\n#define DEVELOPMENT 0x00000100 // dev version\n#define CHEATS_ENABLED 0x00000200 // development cheats enabled\n#define RELEASE_CHEATS_ENABLED 0x00000400 // release cheats enabled\n#define DEMO_VERSION 0x00001000 // demo w/ some features turned off\n#define CLIENT_ONLY_VERSION 0x00010000 // tugboat client\n#define SERVER_VERSION 0x00020000 // server\n#define US_SERVER_VERSION 0x00100000 // large-realm specific server\n#define ASIA_SERVER_VERSION 0x00200000 // small-realm server\n#define RELEASE_VERSION 0x00400000 // release version\n#define NEW_PATCH_VERSION 0x00800000 // new patch version\n#define XTRAP_VERSION 0x01000000 // xtrap version\n\n#define CURRENT_VERSION (DEBUG_VERSION | DEVELOPMENT | CHEATS_ENABLED | VERSION_FLAGS | RELEASE_CHEATS_ENABLED )\n\n#define ISVERSION(x) ((CURRENT_VERSION & (x)) == (x))\n}}}\n\nsource\sCommon\sWorkDefines.h\n{{{\n//============================================================================\n// WorkDefines.h\n//============================================================================\n#pragma once\n\n#define __PLAYER_MOVING_STOP__ // tj. 2010.08.18. Key Command 시, 캐릭터 움직임을 정지 시킴\n\n//----------------------------------------------------------------------------\n//개발 중인 버젼은 여기다 추가\n//----------------------------------------------------------------------------\n#if ISVERSION(DEVELOPMENT)\n\n#if !defined(_WIN64)\n#define __INGNORE_NO_POPUP__\n#endif\n\n#if ISVERSION(SERVER_VERSION)\n#define __PVP_GAME_RECORD_LOG__\n#endif\n...\n\n#endif\n}}}\n\nsource\sc_input.cpp\n{{{\n//----------------------------------------------------------------------------\n// c_input.cpp\n//\n//----------------------------------------------------------------------------\n// INCLUDE\n//----------------------------------------------------------------------------\n#include "stdafx.h"\n#if !ISVERSION(SERVER_VERSION)\n#include "c_input.h"\n...\n\n\n#endif //!SERVER_VERSION\n\n//----------------------------------------------------------------------------\n//----------------------------------------------------------------------------\nBOOL sKeyGuildPanel(\n KEY_HANDLER_PARAMS)\n{\n ASSERT_RETFALSE(game && unit);\n\n#ifdef __PLAYER_MOVING_STOP__\n c_PlayerClearAllMovement( game ); // tj 2010.08.18.\n#endif\n\n UIToggleGuildPanel(); \n\n return TRUE;\n}\n\n// 기타 \n#if !ISVERSION(SERVER_VERSION)\n if (AppCommonGetSilentAssert())\n#else if ISVERSION(DEVELOPMENT)\n BOOL DesktopServerIsEnabled(void);\n if(AppCommonGetSilentAssert() && !DesktopServerIsEnabled())\n#endif\n}}}
<html>\n<table>\n <tr> \n <td> <IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/book_Direct3D_ShaderX.jpg" height=64 >\n </td>\n <td> <b> Direct3D ShaderX : 정점 & 픽셀 셰이더 팁과 트릭 </b> <br>\n<br>\n▼ 볼프강 F. 엥겔 외 공저/ 류광, 최지호 공역/ 2003.06.20.초판/ 정보문화사/ ISBN 89-5674-120-4 <br>\n </td> \n </tr>\n</table>\n</html>\n''DirectX8, Visual Studio 6.0 환경''에서 서술하고 있기 때문에 \n&nbsp; &nbsp; &nbsp; &nbsp; ''DirectX9, Visual Studio 2013 환경''에서 학습 하면서, 개인적으로 정리\n\n참고 ; Learn Vertex & Pixel Shader Programming with DirectX 9 ( Author: James Leiterman/ ISBN-10: 1556222874 ) \n\n\n!! [[PART 1 셰이더 프로그래밍 입문]] \n&nbsp; &nbsp; &nbsp; &nbsp; 1. 정점 셰이더의 기초 / ◇ 볼프강 F. 엥겔 (Wolfgang F. Engel)\n&nbsp; &nbsp; &nbsp; &nbsp; 2. 정점 셰이더 프로그래밍 / ◇ 볼프강 F. 엥겔 (Wolfgang F. Engel)\n&nbsp; &nbsp; &nbsp; &nbsp; 3. 픽셀 셰이더의 기초 / ◇ 볼프강 F. 엥겔 (Wolfgang F. Engel)\n&nbsp; &nbsp; &nbsp; &nbsp; 4. 픽셀 셰이더 프로그래밍 / ◇ 볼프강 F. 엥겔 (Wolfgang F. Engel)\n&nbsp; &nbsp; &nbsp; &nbsp; 5. Shader Studio를 이용한 기초족인 셰이더 개발 / ◇ 존 슈왑 (John Schwab)\n\n\n!! [[PART 2 정점 셰이더 트릭들]]\n&nbsp; &nbsp; &nbsp; &nbsp; 1. 셰이더 안에서 정점 압축 풀기 / ◇ 딘 캘버 (Dean Calver)\n&nbsp; &nbsp; &nbsp; &nbsp; 2. 정점 셰이더로 그림자 영역 돌출시키기 / ◇ 크리스 브레너 (Chris Brennan) \n&nbsp; &nbsp; &nbsp; &nbsp; 3. Direct3D 정점 셰이더를 이용한 캐릭터 애니메이션 / ◇ 데이비드 고슬린 (David Gosselin)\n&nbsp; &nbsp; &nbsp; &nbsp; 4. 단일 표면 물체의 조명 / ◇ 그렉 제임스 (Greg james)\n&nbsp; &nbsp; &nbsp; &nbsp; 5. 소프트웨어 정점 셰이더의 최적화 / ◇ 킴 팰리스터 (Kim Pallister)\n&nbsp; &nbsp; &nbsp; &nbsp; 6. 입자 효과를 위한 몇 가지 정점 셰이더 트릭들 / ◇ 스코트 르 그랜드 (Scott Le Grand)\n&nbsp; &nbsp; &nbsp; &nbsp; 7. 펄린 잡음 및 셰이더 프로그램의 결과 반환 / ◇ 스티븐 리들 (Steven Riddle) / 올리버 C. 제카 (Oliver C. Zecha) \n\n\n&nbsp;<html> <span style="font-size: 14px;"> <b> PART 3 픽셀 셰이더 트릭들 </b> </span> </html>\n&nbsp; &nbsp; &nbsp; &nbsp; 1. 지형을 위한 텍스처 블렌딩\n&nbsp; &nbsp; &nbsp; &nbsp; 2. Direct3D의 1.4 픽셀 셰이더를 사용한 이미지 프로세싱\n&nbsp; &nbsp; &nbsp; &nbsp; 3. Hallo World - 픽셀 셰이더르 사용한 폰드 스무딩\n&nbsp; &nbsp; &nbsp; &nbsp; 4. 셰이더로 기하 에뮬레이트하기 - 임포스터\n&nbsp; &nbsp; &nbsp; &nbsp; 5. ps.1.4를 사용한 부드러운 조명\n&nbsp; &nbsp; &nbsp; &nbsp; 6. 픽셀 당 프레넬 항\n&nbsp; &nbsp; &nbsp; &nbsp; 7. 분산 입방체 맵핑\n&nbsp; &nbsp; &nbsp; &nbsp; 8. 객체 거리 조정에 의한 정확한 반사 및 굴절\n&nbsp; &nbsp; &nbsp; &nbsp; 9. 반복을 피하기 위한 UV 뒤집기(Flipping) 기법\n&nbsp; &nbsp; &nbsp; &nbsp; 10. 정점 및 픽셀 셰이더를 사용한 실사같은 얼굴\n&nbsp; &nbsp; &nbsp; &nbsp; 11. 픽셀 세이더와 정점 셰이더를 사용한 비실사 렌더링\n&nbsp; &nbsp; &nbsp; &nbsp; 12. 픽셀 셰이더와 정점 셰이더로 움직이는 풀 만들기\n&nbsp; &nbsp; &nbsp; &nbsp; 13. 텍스처 섭동 효과\n&nbsp; &nbsp; &nbsp; &nbsp; 14. 바닷물 렌더링\n&nbsp; &nbsp; &nbsp; &nbsp; 15. 반사와 굴절이 적용된 잔물결\n&nbsp; &nbsp; &nbsp; &nbsp; 16. 수정/ 사탕 셰이더\n&nbsp; &nbsp; &nbsp; &nbsp; 17. 비누 방울 셰이더\n&nbsp; &nbsp; &nbsp; &nbsp; 18. 픽셀 당 가닥 기반 비등방 조명\n&nbsp; &nbsp; &nbsp; &nbsp; 19. 픽셀 셰이더에서 정수가 아닌 거듭제곱 함수 구현\n&nbsp; &nbsp; &nbsp; &nbsp; 20. 범프 매핑과 결합된 BRDF 렌더링\n&nbsp; &nbsp; &nbsp; &nbsp; 21. 입자 흐름의 실시간 시뮬레이션과 렌더링\n\n\n&nbsp;<html> <span style="font-size: 14px;"> <b> PART 4 셰이더에서 3차원 텍스처 활용 </b> </span> </html>\n&nbsp; &nbsp; &nbsp; &nbsp; 1. 3차원 텍스처와 픽셀 셰이더\n&nbsp; &nbsp; &nbsp; &nbsp; 2. 진정한 입체 효과\n\n\n&nbsp;<html> <span style="font-size: 14px;"> <b> PART 5 셰이더를 이용하는 엔진 설계 </b> </span> </html>\n&nbsp; &nbsp; &nbsp; &nbsp; 1. 셰이더 주도적 게임 엔진의 설계에 대한 초기 고려 사항들\n&nbsp; &nbsp; &nbsp; &nbsp; 2. Krass 게임 엔진을 이용한 시각화\n&nbsp; &nbsp; &nbsp; &nbsp; 3. Quake III 형식을 위한 정점 셰이더 기반의 3D 엔진 설계\n\n\n
!! PART 2 정점 셰이더 트릭들\n+++!!![1. 셰이더 안에서 정점 압축 풀기 ]\n◇ 딘 캘버 (Dean Calver)\n\n<html> <span style="font-size: 12px;"> <b> 정점 압축의 개요 </b> </span> </html>\n(p.255) 우리의 목표는 압축된 정점의 해제 과정 전체를 정점 셰이더 안에서 수행하도록 하는 것이다... 압축 해제 알고리즘에 사용할 데이터의 양은 매우 제한적이다(정점 셰이더 상수 공간의 거의 대부분은 예를 들어 스키닝 행렬 등이 이미 사용하고 있을 것이므로). 정점 단위가 아니라 객체 단위로 정점 상수 메모리에 올릴 상수들도 몇 가지 있다.\n\n▣ 양자화(quantization) - 가장 간단한 형태의 압축이다. 그냥 최하위 비트들의 손실을 통해서 비트 수를 줄이는 것이다.\n▣ 비례된 오프셋 - 선형 방정식 방버의 특별한 경우로, 방정식을 한 점으로부터의 비례된 오프셋에 국한시킨다.\n▣ 압축 변환 - 객체에 선형 변환을 적용해서 객체를 압축에 좀더 적합한 공간으로 옮긴다(선형 변환, 즉 행렬을 적용).\n&nbsp; &nbsp; / 압축에서의 주된 과정은 양자화에 의한 오차를 최소화할 수 있는 변환을 찾는 것으로 이루어진다.\n&nbsp; &nbsp; / 필자가 주로 사용하는 압축 공간은 하나의 회전, 하나의 비례, 그리고 하나의 이동으로 구성된다.\n▣ 다중 압축 변환 - 각 정점은 일련의 압축 변환들 중 하나를 선택한다.\n▣ 슬라이딩 압축 변환 - 여분의 패딩 바이트들을 적절히 활용해서 압축 변환의 정밀도를 높이는 방법이다.\n▣ 변위 매핑과 벡터 필드 - 특정한 종류의 데이터에만 적용할 수 있으나, 텍스처 같은 기하구조를 저장함으로써 공간을 절약할 수 있다.\n\n(p.256) 이러한 압축 방법들에 동일하게 깔려 있는 개념은 정점 성분을 더 적은 비트들로 저장한다는 것이다. 부동소수점은 매우 큰 동적 범위(dynamic range)로 설계된 것인데, 정점에 대해서는 그렇게 큰 범위가 필요치 않으므로 범위를 줄임으로써 공간을 절약할 수 있다.\n다행히, DirectX는 정점 셰이더로 들어가기 전에 부동소수점으로 변환되는 다양한 비 부동소수점 자료형들을 지원한다.\n\n<html> <span style="font-size: 12px;"> <b> 기본적인 압축 </b> </span> </html>\n(p.265) ''최적화''\n첫번째 최적화는, 이미 4x4 행렬 변환을 수행해 두었다면 이전의 어떠한 압축도 저절로 해결될 수 있다느는 점에 착안한 것이다. 압축 해제 단계를 변환 행렬에 포함시킴으로써, 행렬과 벡터의 곱하기가 수행될 때 압축 해제가 자동으로 일어나게 만든다(이는 모든 압축들이 선형 변환과 관련되어 있기 때문에 가능하다). \n\n또 다른 최적화는, 꼭 필요하기 않다면 임시 레지스터를 거치지 말라는 정점 셰이더의 규칙을 따르는 것이다. 출력을 직접 출력 레지스터에 넣을 수 있다면 임시 레지스터를 사용할 필요가 없다.\n\n양자화된 D3DVSDT_UBYTE4를 사용하는 곳이라면 그것 대신 D3DVSDT_D3DCOLOR를 사용해도 된다. 정점 셰이더 안에서 255.0으로 나누기와 스위즐링이 아무 비용 없이 이루어질 수 있기 때문이다.\n\n<html> <span style="font-size: 12px;"> <b> 고급 압축 </b> </span> </html>\n(p.267) ''다중 압축 변환''\n본질적으로 이 방법은 물체를 개별적인 압축 영역들로 나누고 각 정점을 개별 영역으로 배정한다. 주된 어려움은, 압축 과정에서 물체에 틈이 생기지 않도록 만드는 것이다.\n\n(p.269) ''슬라이딩 압축 변환''\n이 방법은 이미 쓰이고 있는 정점 성분에 더 많은 데이터를 집어넣는 것이 아니라 추가적인 "더미(dumy)" 채움 데이터를 활용하는 것이다. 변위 값을 채움 데이터에 인코딩해 놓음으로써 전체 압축 행렬을 이동시킬 수 있으며, 이를 통해서 각 정점을 더 나은 압축이 가능한 공간으로 이동(sliding)시킬 수 있다.\n=== <html> <! 1. 셰이더 안에서 정점 압축 풀기 > </html>\n+++!!![2. 정점 셰이더로 그림자 영역 돌출시키기 ]\n◇ 크리스 브레너 (Chris Brennan)\n\n<html> <span style="font-size: 12px;"> <b> 소개 </b> </span> </html>\n(p.277) 실시간 그림자 렌더링 중 그림자 입체(shadow volume) 기법을 위해서는 물체가 드리운 그림자의 안쪽 영역을 결정하는 기하구조를 구축해야 한다.\n...\n무엇보다도 주된 단점은 그림자 입체를 구축하는 데 필요한 CPU 비용이 크며 그림자 입체를 적절히 구축하기 위해서는 캐릭터 애니메이션도 CPU에서 처리해 주어야 한다는 것이다. 그러나 전처리를 좀 해 주고 정점 셰이더를 잘 짜면 CPU의 부담을 크게 줄일 수 있다.\n\n(p.278) 그림자 입체에서 또 하나 해결해야 하는 문제는 관찰자가 그림자 안에 있는 상황이다... 다행히 간단한 해결책이 하나 존재한다. 그림자 입체의 가시 영역에 대해 스텐실 버퍼를 증가, 감소시키는 대신, 깊이 판정을 실패하도록 설정해서 입체가 다른 표면에 의해 가려졌을 때에만 스텐실 버퍼를 수정하는 것이다... 다만, 모든 그림자 입체들이 완전히 닫혀 있어야 제대로 작동한다(이전의 방법들은 그림자 입체의 앞, 뒤면이 열려 있어도 상관없다).\n\ncf. 스텐실 그림자 입체는 깊이 버퍼 같은 다른 그림자 알고리즘에 비해 장점도 가지고 있지만 단점 역시 존재한다. 스텐실 방법은 무한한 정밀도를 가지며 시각적 결합이 없는 반면, 가장자리가 날카롭고 물체 형태의 복잡성이나 관찰자, 빛의 위치에 따라서 렌더링이 복잡해질 수 있다.\n=== <html> <! 2. 정점 셰이더로 그림자 영역 돌출시키기 > </html>\n+++!!![3. Direct3D 정점 셰이더를 이용한 캐릭터 애니메이션 ]\n◇ 데이비드 고슬린 (David Gosselin)\n\n<html> <span style="font-size: 12px;"> <b> 소개 </b> </span> </html>\n(p.285) 캐릭터 애니메이션에서 흔히 사용하는 기법 두 가지는\n1. 트우닝 (tweening, morphing 이라고도 한다)\n2. 스키닝 (skinning, 골격 에니메이션 (skeletal animation) 이라고도 한다)\n\n<html> <span style="font-size: 12px;"> <b> 트위닝 </b> </span> </html>\n(p.285) 트위닝은 애니메이션의 두(또는 그 이상의) "키" 프레임들을 선형으로 보간하는 기법이다.\n\n(p.287) 트위닝이라는 애니메이션 기법은 애니메이션 데이터가 상당히 크다는 단점을 가지고 있다. 반면 스키닝은 메모리 사용량이 적다. 스키닝을 구현하려면 더 많은 정점 셰이더 명령들이 필요하지만, 애니메이션의 프레임 당 데이터는 더 작다.\n\n<html> <span style="font-size: 12px;"> <b> 스키닝 </b> </span> </html>\n(p.288) 메시로부터 생성된 정점은 뼈대 가중치들로 가지는데, 뼈대 가중치는 해당 행렬(뼈대)로부터 영향을 받는 정도를 의미한다. 이 가중치들은 정점에 대한 해당 행렬들의 영향을 혼합할 때 쓰인다. 혼합 공식은 다음과 같다.\n\n최종 위치 = SUM ( matrix[n]*position*weight[n])\n\n정점 셰이더 하드웨어가 나오기 전에는 이러한 계산을 CPU 상에서 수행했었다(이를 "소프트웨어 스키닝"이라고 부르기도 한다). 그런 경우 모형의 스키닝 이후 정확한 법선들을 계산할 수 있다는 장점이 있지만, 일반적으로 계산량이 상당히 크다... \n그러나 이제는 정점 셰이더를 이용해서 좀더 자유롭게 하드웨어 스키닝을 구현하는 것이 가능하다. 이 절에서는 두 종류의 스키닝에 대해 이야기한다.\n하나는 고정 기능 파이프라인이 지원하는 하드웨어 스키닝 같은 방식의 행렬 네 개짜리 스키닝이고,\n또 하나는 팔레트 방식이다. 후자는 그리기(drawing) 호출들을 좀더 몰아서 처리할 수 있다는 장점이 있다.\n\n(p.291) 팔레트 스키닝 방식의 한 가지 단점은 고차 표면들과는 잘 맞지 않는다는 것이다. 이는 정점 셰이더가 표면 분할 이전의 정점들을 처리하며, 위치와 법선을 제외한 나머지 정점 데이터가 선형으로 보간된다는 점 때문이다. 혼합 행렬들에 대한 색인 값들을 보간한다는 것은 무의미한 일이다.\n\n''스키닝과 트위닝의 통합''\n(p.291) 만일 미묘한 안면 움직임을 뼈대로 처리한다면 상당히 많은 뼈대들이 필요하게 될 텐데, 그렇게 되면 계산량도 계산량이지만 3D 모델링 패키지에서 뼈대들을 관리하는 것도 쉽지가 않을 것이다. __그런 경우라면 머리와 몸, 팔다리는 뼈대로, 그리고 얼굴은 정점 트위닝으로 처리하는 것이 적당하다.__\n\n<html> <span style="font-size: 12px;"> <b> 픽셀 당 조명을 위한 접선 공간의 애니메이션 </b> </span> </html>\n\n<html> <span style="font-size: 12px;"> <b> 요약 </b> </span> </html>\n(p.302) 정점 셰이더를 이용하면 그래픽 파이프라인을 응용 프로그램에 맞게 커스텀화할 수 있으며, 또한 CPU의 처리 부담 일부를 GPU에 떠넘기고, 남은 CPU 시간을 좀더 재미있는 게임을 위해 활용할 수 있게 된다.\n=== <html> <! 3. Direct3D 정점 셰이더를 이용한 캐릭터 애니메이션 > </html>\n+++!!![4. 단일 표면 물체의 조명 ]\n◇ 그렉 제임스 (Greg james)\n\n(p.303) 예를 들어서, 나뭇잎, 풀입, 입자 시스템 객체들, 머리카락, 옷 등은 피부가 없는 얇은 종이장 같은 형태로 만들어지는데,...\n문제는 각 정점이 오직 하나의 표면 법선 벡터를 가질 수 있다는 점에서 비롯된다. 하나의 표면 법선은 삼각형의 앞면이 보일 때에는 정확하나 뒷면이 보일 때에는 그렇지 못하다. 뒷면이 보일 때의 법선은 의도한 것과는 반대 방향을 가리키게 되며, 따라서 조명 계산이 법선에 근거하는 경우 결과가 부정확해진다.\n\n(p.304) 단일 표면 물체의 조명 문제는 각 면에 대해 상대적인 관찰자의 방향에 의존한다... 빛의 위치는 적절한 법선을 선택하는 것과는 무관하다는 점에 주의하기 바란다. 문제가 되는 것은 정점 법선에 상대적인 시점 위치뿐이다.\n\n<html> <span style="font-size: 12px;"> <b> 얇은 물체들을 위한 개선된 조명 </b> </span> </html>\n\ncf. The accompanying example program is provided with the NVIDIA EffectsBrowser. It is called Two-Sided Lighting.\n=== <html> <! 4. 단일 표면 물체의 조명 > </html>\n+++!!![5. 소프트웨어 정점 셰이더의 최적화 ]\n◇ 킴 팰리스터 (Kim Pallister)\n\n(p.312) 소프트웨어 정점 셰이더 지원은 DirectX 런타임에 내장된 정점 셰이더 컴파일러가 정점 셰이더 코드를 CPU에 최적화된 명령 스트림(Pentium III와 Pentium 4 프로세서의 경우 SSE와 SSE2 명령들)으로 컴파일하는 식으로 구현된다.\n\n<html> <span style="font-size: 12px;"> <b> SSE에 대해 </b> </span> </html>\n(p.315) SSE와 SSE2 명령들을 완전히 이해해야만 정점 셰이더 컴파일러의 작동 방식을 알 수 있는 것은 아니다. SSE 명령들에 대한 좀더 자세한 내용은 Intel의 개발자 서비스 웹사이트(www.intel.com/IDS)에서 찾아볼 수 있다.\n\n(p.316) 이 글에서는 SSE/ SSE2 명령 집합을 모두 이야기하지 않는다. 다만 컴파일러의 작동 방식을 이해하는 데 중요한 또 다른 주제인 __데이터 정렬__에 대해서는 언급을 할 필요가 있을 것 같다.\n\n<html> <span style="font-size: 12px;"> <b> SSE 명령들을 위한 최적의 데이터 배치 </b> </span> </html>\n\n<html> <span style="font-size: 12px;"> <b> 정점 셰이더 컴파일러의 작동 방식 </b> </span> </html>\n(p.318) DirextX 8 API는 정점 가상 머신(vertex virtual machine, VVM)이라는 것을 제공하는데, 이것은 입력 정점 데이터 스트림의 처리를 위한 전용 가상 머신이다. \n\n(p.320) ''최적화 지침''\n| !소프트웨어 정점 셰이더의 최적화를 위한 지침들 |\n|【 규칙 】 |\n|1. 필요한 결과들만 기록할 것. |\n|2. 가능한 곳이라면 항상 매크로들을 사용할 것. |\n|3. 의존성 연쇄를 최소화할 것. |\n|4. 마지만 산술 명령의 결과를 직접 출력 레지스터에 기록할 것. |\n|5. 가능한 한 같은 임시 레지스터를 재사용할 것. |\n|6. 색과 안개 값을 묵시적으로 포화(범위 한정)시키지 말 것. |\n|7. exp와 log 함수를 사용할 때에는 받아들일 수 있는 최저의 정확도를 제공하는 형태를 사용할 것. |\n|8. 가능하면 주소 레지스터를 사용하지 말 것. |\n|9. 주소 레지스터를 반드시 사용해야 한다면, 정점들의 순서를 주소 필드 순서와 일치시킬 것. |\n|10. 무엇보다도 중요한 것은 프로파일링(profiling), 즉 구체적인 성능 측정이다. |\n=== <html> <! 5. 소프트웨어 정점 셰이더의 최적화 > </html>\n+++!!![6. 입자 효과를 위한 몇 가지 정점 셰이더 트릭들 ]\n◇ 스코트 르 그랜드 (Scott Le Grand)\n\n<html> <span style="font-size: 12px;"> <b> 소개 </b> </span> </html>\n(p.328) 그러나 CPU에서 처리하던 절차적 효과를 정점 셰이더로 옮기는 문제는 그리 간단한 것이 아니다. 무엇보다도, 정점 셰이더에는 조건 분기가 없거나 매우 제한적이며, 또한 정점들 사이에서 어던 정보를 공유하는 것도 불가능하다. 다행히, 조건 분기는 적절한 비트 마스트로 흉내낼 수 있다.\n\n''주기적인 시간 간격 다루기''\n''단발성 효과''\n''난수''\n''흐름 제어''\n''외적''\n=== <html> <! 6. 입자 효과를 위한 몇 가지 정점 셰이더 트릭들 > </html>\n++++!!![7. 펄린 잡음 및 셰이더 프로그램의 결과 반환 ]\n◇ 스티븐 리들 (Steven Riddle) / 올리버 C. 제카 (Oliver C. Zecha)\n\n{{wrappingClass{ 1. Light 효과가 나타나지 않음 (∵ 원인 찾지 못함) <br> 2. Vertex Shader 출력에는 mov oPos, v0 가 필요하기 때문에 <br> &nbsp; &nbsp; FLOAT x, y, z; (D3DDECLUSAGE_POSITION : The input coordinate)을 통해서 좌표 전달 <br> 3. FVF 등 변경된 설정과 함수명이 같지만 인자가 다른 경우가 있음 }}}\n\n<html> <span style="font-size: 12px;"> <b> 셰이더의 한계 </b> </span> </html>\n(p.333) 하드웨어로 가속되는 프로그래밍 가능한 셰이더는 오늘날의 컴퓨터 그래픽에서 이루어진 가장 중요한 진보이다... 그러한 활용 가능성은 주로 셰이더 기술의 벡터 처리 능력에서 비롯되는 것으로, 벡터 처리 능력은 복잡한 조명 모형 및 기타 시각적으로 놀라운 효과들을 가능하게 한다.\n...\n그러나 오늘날 그래픽 기술의 발전 속도를 생각한다면, (적어도 당분간은) CPU가 GPU의 처리 능력을 따라잡기는 힘들 것 같다. 이는 GPU의 수행 유닛들의 특징 때문이다.\n\n(p.334) 셰이더의 한계\n@@color(#FF0000): 1. 명령 개수의 한계 ; @@\n벡터와 그래픽 계산에 GPU를 최대한 사용한다는 말은, 코드의 관점에서 볼 때 최대한 많은 일들을 프로그래밍 가능한 셰이더로 처리한다는 뜻이다. 여기서 셰이더의 중대한 한계와 부딪히게 되는데, 그것은 최대로 활용할 수 있는 셰이더 명령들이 정점 파이프라인 안에서는 128개, 픽셀 파이프라인 안에서는 산술 명령 8개 더하기 어드레싱 명령 4개뿐이라는 점이다(픽셀 셰이더 버전 1.4에서는 어드레싱 명령들이 6개로 늘었으나 산술 명령들은 여전히 8개이다. 다만 페이즈가 두 개로 늘어서, 각 페이즈마다 14(8+6)개, 총 28개를 사용할 수 있게 되었다).\n\n@@color(#FF0000): 2. 메인 프로그램에서 셰이더의 계산 결과를 알기가 힘들다. @@\n(p.335) 필자들은 결국 정점 셰이더가 쓰기 전용이라는 사실을 깨닫게 되었다. 값을 돌려 받기가 어렵다는 것, 이것이 셰이더의 또 다른 주요 한계이다.\n\n※ 해결책 1\n명령들이 병렬로 수행되도록 함으로써 성능도 높일 수 있다. 그러나 명령 개수를 줄여서 얻을 수 있는 이득은 그리 크지 않다. \n이상적인 해결책은 __두 정점 셰이더 프로그램들을 순차적으로 실행시키는 것이다. 즉 첫번째 것의 결과를 두번째 것의 입력으로 사용하도록 하는 것이다.__ \n그러나 그러한 순차 실행은 아직 셰이더 프준에 도입되지 않았으므로, 현재로서는 셰이더 프로그램의 출력을 메인 프로그램이 받아서 다시 처리하는 것이 최선의 방책이다. 그런데 우연하게도 이 방책은 두번째 한계와도 관련되어 있다.\n\n※ 해결책 2\n두 가지 한계를 모두 해결... 셰이더 프로그램의 결과를 직접 돌려 받는 것은 불가능하지만, 간접적으로나마 얻는 것은 가능하다. 일반적으로 셰이더 프로그램들은 렌더링된 결과를 메모리에 넣는데, 대개의 경우 그 메모리는 화면 상에 표시될 비디오 메모리이다. 그러나 렌더링의 대상을 텍스처로 설정하는 것이 가능하다. __그 텍스처를 계산 결과의 배열로 사용하면 되는 것이다.__ \n... 셰이더 파이프라인으로부터 값들을 돌려 받을 수 있게 되면 계산량이 꽤 큰 여러 알고리즘들을 GPU 상에서 실행되는 좀더 빠른 셰이더 프로그램들로 구현 할 수 있게 된다.\n\n(p.336) 이러한 목표를 달성하기 위해서는 각 정점에 추가적인 정보를 배정해야 한다. 이 추가적인 정보는 결과가 저장된 텍스처 좌표이다. 이 추가적인 데이터는 AGP 버스를 통해 이동되며, 당연히 그에 따른 비용도 존재한다. 따라서 그 결과가 CPU 상에서보다 못할 수 있다. @@color(#0000FF): GPU를 활용해서 이득을 얻을 수 있을 정도로 충분히 복잡한 계산을 정점에 대해 수행하는 경우에만 효과를 볼 수 있는 것이다. @@\n\n<html> <span style="font-size: 12px;"> <b> 펄린 잡음(Perlin noise)과 부분 브라운 운동 </b> </span> </html>\n(p.336) 컴퓨터 그래픽은 일반적으로 가장자리가 날카로우며 실제 모습에 비해 '지나치게 완벽한' 모습으로 만들어지는 경향이 있다. 따라서 좀더 사실적인 모습을 위해 잡음을 추가함으로써 결점과 무작위성을 표현하기도 한다. 잡음을 선에 추가하면 스케치한 듯한 선이 그려지며, 텍스처에 적용하면 다양한 변종들이 나타난다. 캐릭터 애니메이션에 잡음을 추가하면 좀더 자연스러운 움직임이 나오고, 기하구조에 추가하면 불완전한, 그리서 더 사실적인 형태가 만들어진다.\n...\n펄린 잡음이란 명칭은 매끄러운 의사 난수 잡음의 생성 기법을 고안해 낸 켄 펄린(Ken Perlin)의 이름에서 따온 것이다... 펄린 잡음의 가장 중요한 특징은 반복 가능성이다. 다른 말로 하면, 펄린 잡음에서 주어진 임의의 지점의 잡음은 언제 계산해도 항상 동일한 것이다.\n\ncf. 잡음에 가우스 블러(Gausian blur) 같은 일종의 평준화(smoothing) 처리를 해 주기도 한다. 그러나 가우스 블러는 상당히 느릭 때문에 실시간 그래픽에 사용하기에는 조금 무리가 있다. 이를 대신하기 위해 등장한 것이 펄린 잡음이다.\n\n(p.337) 매끄러운 의사 난수 잡음을 만들기 위해서는 하나의 난수 발생기와 하나의 보간 함수가 필요하다. 난수 발생기는 잡음 함수로 쓰이며, 보간 함수는 잡음으로부터 하나의 연속 함수를 만들어 내는 데 쓰인다.\n\n\n(그림1)은 1차원 난수 함수의 예이다. \n이 함수는 하나의 정수가 주어지면 0에서 1 사이의 실수 의사 난수를 돌려준다. 이 함수는 주어진 한 점에 대해 항상 동일한 의사 난수를 돌려주며, 따라서 반복 가능하다. 이것이 이 예제의 잡음 함수이다(≒ 단순한 파동 함수).\n\n<html> <IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/book_ShaderX_PerlinNoise_01.jpg" width=240 > </html>\n\n(그림2)는 1차원 잡음 함수에 삼차 보간을 적용한 결과이다.\n잡음 함수처럼 이 함수도 반복 가능하다. 그러나 잡음 함수와는 달리 이 함수는 연속이며, 따라서 x 정의역의 어떠한 실수에 대해서도 평가될 수 있다. 이 매끄러운 함수를 잡음파(noise wave)라고 부른다.\n\n<html> <IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/book_ShaderX_PerlinNoise_02.jpg" width=240 > </html>\n\n<html> <IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/book_ShaderX_PerlinNoise_03.jpg" width=240 > </html>\n\n잡음파의 진폭(A) = 치역의 상한과 하한 사이의 거리\n파장(λ) = 파동 한 주기의 길이 (≒ 잡음파에서는 인접한 두 점 사이의 x 거리)\n\n주파수(f) = 1/λ\n\n(p.338) 주파수(frequency, 진동수)는 특정한 펄린 잡음파를 특정짓는, 그리고 펄린 잡음파들을 서로 비교할 수 있게 하는 요인이다.\n잡음파 1의 주파수가 잡음파 2의 두 배일 때, 잡음파 1이 잡음파 2보다 한 "옥타브" 위라고 말한다. 여기서 말하는 옥타브는 음악에서의 옥타브와 동일한 의미를 지닌다. 음악에서도 어떤 음의 한 옥타브 위의 음은 원래 음보다 주파수가 두 배이다.\n\n<html> <IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/book_ShaderX_PerlinNoise_T1.jpg" width=480 > </html>\n\n주파수와 진폭을 달리 주면 다양한 펄린 잡음이 나온다. \n / 주파수는 X 축의 비례를 통해서 제어한다. 점들이 적을수록(점들 사이의 간격이 클수록) 주파수는 높아진다.\n / 진폭은 난수 발생기의 결과에 나누기를 적용해서 제어한다. 제수가 크면 진폭은 작아진다.\n(표1)은 몇 가지 매끄러운 잡음 함수들로, 치역이 【 -0.5. 0.5】가 되도록 비례시킨 것이다. (그림4)는 (표1)의 처음 다섯 잡음 함수들을 합한 것이다.\n\n(p.339) (그림4)는 복잡한 합성 잡음 함수의 하나인 ''부분 브라운 운동''(fractional Brownian motion, fBm. 또는 프랙탈 브라운 운도)이다. \nfBm은 켄 머스그레이브(Ken Musgrave)가 발견한 프랙탈의 일종이다. fBm 잡음을 만드는 가장 일반적인 방법은 __펄린 잡음의 연속적인 옥타브들을 함치는 것으로, 그 합은 모든 펄린 잡음을 겹친 것이다.__\n이렇게 하면 각 파의 특징들이 모두 결과에 나타난다. 합칠 때에는 각 단계에서 진폭을 2로 나눠 높은 주파수의 효과를 감소시킨다.\n\n<html> <IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/book_ShaderX_PerlinNoise_T2.jpg" width=480 > </html>\n\n(p.339) 2차원 잡음은 용도가 더 다양한데, 왜냐하면 텍스처나 높이 맵으로 사용할 수 있기 때문이다. 2차원 잡음 함수는 두개의 2차원 실수 좌표를 받아서 하나의 실수를 돌려준다.\n...\n2차원 잡음은 하나의 벡터를 입력받고 하나의 의사 난수 스칼라 값을 돌려주는 함수로 볼 수 있다.\n\n(p.341) 3차원 잡음을 이용하면 고체를 깎아내느 효과를 얻을 수 있다. 고체를 반으로 자르는 경우 여전히 연속적인 텍스처가 나타난다. 이 기법은 대리석을 흉내낼 때 흔히 쓰이며 결과도 상당히 좋다.\n\n(p.343) 펄린 잡음을 셰이더 안에서 생성한다고 할 때 나서는 문제는 그 결과를 어떻게 받을 것인가이다. 우리가 얻을 수 있는 값은 픽셀들 뿐이므로, @@color(#FF0000): 함수의 출력을 색들로 인코딩해야 한다.@@ 예제에서는 양의 결과를 청색 성분으로, 음의 결과를 녹색 성분에 저장한다.\n\n(p.359) 이것으로 모든 계산이 끝났다. 이제 점의 위치와 색(계산 결과)를 출력한다. 위치는 색이 기록될 텍스처 상의 x, y 좌표이다. 그리고 위의 과정에 의해, 양의 잡음은 녹색 성분에 기록되고 음의 잡음은 청색 성분에 기록된다. 알파는 진폭이다.\n\n; x 위치 = 텍스처 상의 xy 위치\nmov oPos, v0\n; 최종 색을 출력\nmov oD0, r7.xyzw\n\n<html> <span style="font-size: 12px;"> <b> 맺음말 </b> </span> </html>\n(p.359) @@color(#0000FF): 이 셰이더에 넣는 정점은 하나의 FVF에 두 개의 벡터가 들어있는 형태이다.@@ 벡터 하나는 펄린 잡음을 얻고자 하는 점의 위치를 의미하고, 또 하나는 텍스처 위치를 위미한다. 128x128 메시(점의 갯수는 약 16,384개)의 경우 AGP 버스로 전송되는 데이터가 약 8 메가바이트인데, 이 정도면 그리 나쁘지 않다.\n벡터가 두 개뿐이므로 ''입력 공간''에는 14개의 벡터들에 해당하는 여유가 남아 있다. 즉 추가적인 정보를 위한 공간은 충분한 것이다. 게다가 잡음 자체에는 텍스처가 전혀 쓰이지 않았다. 따라서 텍스처를 또 다른 입력 데이터로 사용할 수도 있다.\n단점이라면 정점 파이스파인 안에서 93개의 명령 공간이 소비된다는 점인데, x에 대한 선형 보간 등으로 상당히 단순화시킨 면도 많으므로 명령 개수를 더 줄이기는 힘들 것이다. 그래도 35개의 명령 공간이 남아 있고, 또한 픽셀 세이더는 사용하지 않으므로 픽셀 파이프라인의 능력을 더욱 활용할 여지도 남아 있다.\n\n(p.360) 정점 프로그램들이 소프트웨어 모드에서 실행될 때에는 최적화된 정점 파이프라인이 작동한다. 소프트웨어 정점 파이프라인은 그래픽 하드웨어에 독립적이며, 3DNOW!나 SSE 같은 스트림라이닝 CPU 어셈블리 명령들의 장점을 취한다.\n\n값을 돌려 받는 기법은 속도가 느리며 의문의 여지를 가지고 있지만, GPU들이 좀더 빨라짐에 따라 GPU로부터 값을 돌려 받는 기법의 장점 역시 더욱 커지게 될 것이다. 게다가 그런 기법 없이는 구현이 불가능한 효과들도 존재하므로, 익혀둔다면 다른 게임에서는 볼 수 없는 독특한 효과를 얻는 데 도움이 될 수 있을 것이다.\n...\n정점 셰이더들은 대량의 데이터를 선호한다. 따라서 추가된 정점들의 목록을 저장하고 잡음 값들을 하나의 블록으로 계산한다면 효율을 좀더 높일 수 있을 것이다.\n\n이 글의 기법과 예제는 하나의 실험일 수도 있고, 독자의 잡음 활용을 위한 하나의 기반이 될 수도 있다. 확실은 것은 아직 제품에 넣을 만한 정도는 아니라는 점이다. __충돌 검출이나 표면과의 상호작용을 위해서는 이동된 정점 위치를 알아야 하는데(결국 잡음 값을 알아야 한다는 뜻), 그러자면 GPU 상에 만들어진 텍스처를 다시 읽어 와야한다. 이는 매우 비효율적인 과정이다.__ \n이 기법의 잠재력은 충분히 인정할 만 하지만, 특정 응용을 위한 구현을 생각한다면 더 많은 최적화가 필요할 것이다. 셰이더에는 개선의 여지가 많은데, 특히 텍스처 적용 부분이 그렇다. 어쨋든, GPU 대 CPU의 능력 차이는 확실히 보여주고 있다.\n=== <html> <! 7. 펄린 잡음 및 셰이더 프로그램의 결과 반환 > </html>\n\n\n
<html> <span style="font-size: 14px;"> <b> #. DirextX8 >> DirextX9 에서 변경된 함수 </b></span> </html>\n-. IDirect3DDevice8::CopyRects ⇒ IDirect3DDevice9::UpdateSurface\n\n<html> <span style="font-size: 14px;"> <b> #. 'd3dx9.h': No such file or directory </b></span> </html>\nD3DXMATRIX m_matProj;를 사용하고 싶지만 header 파일을 찾을 수 없을 때\n\n프로젝트 속성 > C/C++ > 일반 > ''추가 포함 디렉터리 '' (in Visual Studio 2013)\n&nbsp; &nbsp; &nbsp; &nbsp; DirectX 9 SDK의 Include 폴더를 설정해 준다.\n\n{{wrappingClass{#pragma comment(lib, "d3dx9.lib") <br> #include <d3dx9.h> <br> ... <br> D3DXMATRIX m_matProj; }}}\n\n<html> <span style="font-size: 14px;"> <b> #. 큐브 환경맵 설정 </b></span> </html>\ng_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR | 1); \n{{{\nd3d9types.h\n\n// Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position\n// and normal in the camera space) should be taken as texture coordinates\n// Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from\n//\n#define D3DTSS_TCI_PASSTHRU 0x00000000\n#define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000\n#define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000\n#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000\n#define D3DTSS_TCI_SPHEREMAP 0x00040000\n}}}\nD3DTSS_TCI_PASSTHRU 는 정점에 주어진 텍스쳐 좌표를 그대로 사용 \nD3DTSS_TCI_CAMERASPACENORMAL 는 정점의 법선 정보를 카메라의 공간좌표로 변환 한 뒤 텍스쳐 변환 행렬 적용 후 텍스쳐 좌표로 사용(환경 맵핑) \nD3DTSS_TCI_CAMERASPACEPOSITION 는 정점의 위치를 카메라 공간좌표로 변환한 뒤 텍스쳐 변환행렬 적용 후 텍스쳐 좌표로 사용(그림자 맵핑) \nD3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 는 정점의 위치와 법선을 카메라 공간좌표로 변호나한 뒤 시선에 대한 반사벡터를 구하여 텍스쳐 변환행렬 적용 후 텍스쳐 좌표로 사용(반사 환경 맵핑) \nD3DTSS_TCI_SPHEREMAP는 구면 맵핑을 위한 텍스쳐 좌표를 사용(구면 맵핑) \n\n<html> <span style="font-size: 14px;"> <b> #. 렌더링 프레임 설정 </b></span> </html>\nD3DPRESENT_PARAMETERS d3dpp;\n...\nd3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; - 플리핑을 즉시 시행 (프레젠테이션이 수직 동기와 동기 하지 않는 것을 의미)\n&nbsp; &nbsp; &nbsp; &nbsp; / D3DPRESENT_INTERVAL_DEFAULT - 디폴트의 시스템 타이머 정밀도를 사용 (≒ 60 FPS)\n
<html>\n<table>\n <tr> \n <td> <IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/book_ShaderX2_DirectX9.jpg" height=64 >\n </td>\n <td> <b> 도서_ShaderX² : DirectX 9 셰이더 프로그래밍 </b> <br>\n(원표제: ShaderX² intorduction & tutorials with DirectX 9) <br>\n<br>\n▼ WOLFGANG ENGEL 지음/ 이창한, 신승백 옮김/ 2004.09.15. 출간/ 정보문화사/ ISBN 89-5674-212-X <br>\n </td> \n </tr>\n</table>\n</html>\n\n!!! 역자의 글\n(p.001) 셰이더는 DirectX 8.0에서 처음 선을 보였다. 초기에 제한적인 기능만을 제공하던 3D API는 점점 늘어나 마침내는 프로그래머가 직접 GPU를 프로그래밍할 수 있는 영역까지 확장되었고, DirectX 9.0에서는 HLSL(High Level Shading Language)과 좀 더 확장된 문법을 지원하여 프로그래머의 부담도 많이 줄게 되었다.\n\n같은 저자가 쓴 셰이더에 관한 바로 전 책과 이 책을 비교해보면 정말로 많은 것이 바뀌었음을 알 수 있을 것이다. 부정확한 부동 소수 정밀도와 제한된 픽셀 셰이더로 인해서 텍스처에 미리 계산된 값을 저장하여 텍스처에서 값을 읽어서 처리해야 했던 것들이 픽셀 셰이더 2.0에서는 수식 계산으로 처리할 수도 있다.\n\n\n!!! 편집자 서문\n『ShaderX2: DirectX 9 셰이더 프로그래밍』 (ShaderX2 Introductions & Turorials with DirectX 9)\n『ShaderX2: DirectX 9 셰이더 프로그래밍 팁 & 트릭』 (ShaderX2 Shader Programming Tips & Tricks with DirectX 9)\n\n첫 번째 책은 독자들이 셰이더 프로그래밍을 시작하는 데 도움이 되는 것들을 중심으로 엮었고, 두 번째 책(이 책)은 숙련된 셰이더 프로그래머에게 필요한 팁과 트릭들로 구성하였다.\n\n\n!!! 도입\n(p.023) 이 책은 셰이더 프로그래밍의 기초 (고수준 셰이딩 언어와 3.0 버전에서부터 그림자 매핑과 스텐실 그림자 입체에 이르기까지) 를 설명하는 글들의 모임이다. 다음은 이 글들의 간략한 개요이다.\n\nHLSL과 그 컴파일러의 제작자 중 한 명인, Jason L. Mitchell과 Craig Peeper가 "1. DirectX 고수준 셰이딩 언어 HLSL에 대한 소개"라는 제목의 HLSL에 대한 훌륭한 소개 글을 썼다. 이 글은 공식 출처에서 사온 것이므로, HLSL 프로그래머가 필요로 하는 기본적인 것은 물론 더 많은 것들을 다루고 있다.\n\nvs_3_0와 ps_3_0 셰이더 모델은 3세대 셰이더 그래픽 하드웨어에서는 사용 가능할 것이다. 이 셰이더 버전들은 전 버전보다 좀 더 유연하고 강력하다. 정점 텍스처링 기능, 조건자(predication), 고정 유동 조건 분기(flow control), 정점 스트링 빈도 그리고 더 많은 것들을 제공한다. Nicolas Thibieroz, Kristof Beets 그리고 PowerVR의 Aaron Burton 등이 새롭게 추가된 기능들과 간략한 소스 코드를 포함하는 이 새로운 셰이더 모델에 대한 소개를 썼다.\n\nMichal Valient의 글인 "3. Direct3D 9로 구현한 향상된 조명과 셰이딩"은 퐁(Phong), 오렌-나야르(Qren-Nayar) 그리고 쿡-토르란스(Cook-Torrance)를 포함하는 보다 진보된 조명 모델을 다룬다. 그는 이 알고리즘을 ps_1_4, ps_2_0, ps_3_0 그리고 HLSL로 인식하였다. 이 주제에 관한 가장 넓은 범위를 포함하는 글이다.\n\n게임에서 특정한 분위기를 만들어내는 안개를 사용하는 다양한 기법들이 있다. Markus Nuebel은 안개를 이식하는 모든 가능한 기법들을 이해하기 쉽게 보여준다. 여섯 개의 예제 프로그램이 안개 사용을 보다 쉽게 만들어준다.\n\n(p.024) Michal Valient는 두 번째 글로 "5. Direct3D 9로 구현한 그림자 매핑"을 썼다. DirectX 9에서 사요할 수 있는 부동소수점 텍스처로, 그림자 구현을 위해 그림자 맵을 사용하면 보다 나은 시각 체험을 하게 될 것이다. Michal은 어떻게 그림자 매핑을 가장 효율적이고 유연한 방법으로 이식하는지를 보여주고, 응용프로그램을 어떻게 디버깅하는 지에 관한 팁을 알려줄 것이다.\n\n그림자 입체에 대한 가장 포괄적인 처리법이 Hun Yen Kwoon이 쓴 "6. 스텐실 그림자 입체 이론"에 나와 있다. 이 글은 그림자 입체를 프로그래밍하는 다양한 방법에 관한 여러 부분들을 조망한다. 몇 분 안에 그림자 입체를 이식할 수 있는 여섯 개의 예제 프로그램을 통해 그림자 입체를 쉽게 구현할 수 있게 도와줄 것이다.\n\nATI의 렌더몽키는 셰이더 개발 툴로 프로그래머와 아티스트의 작업 부하를 줄이는 데 도움을 준다. 이 프로그램의 개발자 중 한 명인, Natalya Tatarchuk가 이것을 사용하는 방법과 어떠한 기능들이 있는지에 대해 설명한다.\n\n어느 곳에서도 잘 다루어지지 않지만 아트 파이프라인에서 기하적인 테이터를 제작하는 데 필수적인 주제가 셰이더-친화적인 모델이다. Gim Guan Chua가 이 작업에 관해 설명하고, 어떻게 그것을 수행하는지를 단계적으로 설명해준다.\n\n\n!! [[1. DirectX 고수준 셰이딩 언어 HLSL에 대한 소개]] \n&nbsp; &nbsp; &nbsp; &nbsp; ◇ Craig Peeper & Jason L. Mitchell\n\n&nbsp; &nbsp; &nbsp; &nbsp; 소개\n&nbsp; &nbsp; &nbsp; &nbsp; 간단한 예제\n&nbsp; &nbsp; &nbsp; &nbsp; 언어의 기초\n&nbsp; &nbsp; &nbsp; &nbsp; 내장 함수\n&nbsp; &nbsp; &nbsp; &nbsp; 셰이더 입력\n&nbsp; &nbsp; &nbsp; &nbsp; 셰이더 출력\n&nbsp; &nbsp; &nbsp; &nbsp; 셰이더의 적용 예\n&nbsp; &nbsp; &nbsp; &nbsp; 최적화\n&nbsp; &nbsp; &nbsp; &nbsp; D3DX Effect를 사용하여 엔진에 적용하기\n&nbsp; &nbsp; &nbsp; &nbsp; D3DX Effect를 사용하지 않고 엔진에 적용하기\n&nbsp; &nbsp; &nbsp; &nbsp; SDK 업데이트\n&nbsp; &nbsp; &nbsp; &nbsp; 결론\n&nbsp; &nbsp; &nbsp; &nbsp; 감사의 말\n\n\n!! [[2. Vs_3_0 및 ps_3_0 셰이더 모델 소개]]\n&nbsp; &nbsp; &nbsp; &nbsp; ◇ Nicolas Thibieroz, Kristof Beets, Aaron Burton\n\n&nbsp; &nbsp; &nbsp; &nbsp; 소개\n&nbsp; &nbsp; &nbsp; &nbsp; vs_3_0과 ps_3_0의 일반적인 기능\n&nbsp; &nbsp; &nbsp; &nbsp; vs_3_0의 기능\n&nbsp; &nbsp; &nbsp; &nbsp; ps_3_0 기능\n&nbsp; &nbsp; &nbsp; &nbsp; 결론\n&nbsp; &nbsp; &nbsp; &nbsp; 참고 자료\n\n\n!! [[3. Direct3D 9로 구현한 향상된 조명과 셰이딩]] \n&nbsp; &nbsp; &nbsp; &nbsp; ◇ Michal Valient\n\n&nbsp; &nbsp; &nbsp; &nbsp; 소개\n&nbsp; &nbsp; &nbsp; &nbsp; 픽셀 당 퐁(phong)\n&nbsp; &nbsp; &nbsp; &nbsp; 프레넬 항을 이용한 픽셀 당 환경 범프 매핑\n&nbsp; &nbsp; &nbsp; &nbsp; 진보적인 모델을 위한 배경 지식\n&nbsp; &nbsp; &nbsp; &nbsp; 오렌-나야르 모델\n&nbsp; &nbsp; &nbsp; &nbsp; 쿡-토르란스 모델\n&nbsp; &nbsp; &nbsp; &nbsp; 결론\n&nbsp; &nbsp; &nbsp; &nbsp; 참고 자료\n\n\n++++!!![4. 다양한 안개 효과 소개 (HLSL 샘플) ]\n◇ Markus Nuebel\n\n<html> <span style="font-size: 12px; "> <b> &nbsp; #. 소개 </b> </span> </html>\n+++!!!![#. 안개 계산 이면의 이론 ]\n(p.174) 안개 계산은 3개의 주요 매개변수로 이루어진다.\n\n▣ 안개 색 (C_Fog)\n▣ 농도 (g)\n▣ 거리 (d)\n\n(p.175) 거리 요인(d)을 결정하는 두 가지 일반적인 접근 방법으로 면 기준(plane-based)과 거리 기준(range-based)이 있다.\n\n▣ 면 기준 : 정점/ 픽셀의 카메라 공간 상 z-깊이를 거리 요인으로 사용한다. 계산 비용이 적은 방법이다.\n▣ 거리 기준 : 정점/ 픽셀과 카메라 상의 정확한 거리를 계산한다. 세계 공간이나 카메라 공간 어느 쪽에서도 계산할 수 있다. 이 방법은 일반적으로 제곱근 값으 구하기 때문에 계산 비용이 더 많다.\n===\n+++!!!![#. 기법 하나: 선형 안개 ]\n(p.177) 선형 안개는 여기서 논의되는 모든 방법 중 가장 간단한 계산이다. 선형 안개에서는 장면에 걸쳐 안개 입자가 균등하게 분포되어 있다고 가정한다.\n===\n+++!!!![#. 기법 둘: 지수 안개 ]\n(p.180) 안개는 장면의 한 점에서 시작하여 가상 카메라를 향하는 광선을 따라 빛의 세계가 감소함으로 인해 발생한다는 사실을 상기해볼 때, 지수 안개가 현실 세계 현상과 매우 많이 닮아있다는 것을 알 수 있다. 간략화된 모델에서는, 장면 전체에 걸쳐 일정한 안개 농도를 가정할 수 있다. 장면의 한 점에서 시작한 빛이 광선을 따라 여러 단계를 거쳐 움직이는데, 각각의 단계는 미리 정의된 단위 길이를 가진다고 생각해보자. 빛이 광선을 따라 첫 번째 단위를 지나쳤을 때, 빛의 세기는 상수 요소(정의된 농도에 따라)에 따라 감소한다. 다음 단위는 줄어든 빛의 세기로 시작해서, 앞의 광선에 적용된 똑같은 상수 감소 요소에 따라 감소한다.\n\n(p.181) 매우 작은 구획들로 선택해보면, 마침내는 지수적 양상을 보이고 이것은 자연 로그 함수를 사용하여 잘 시뮬레이션할 수 있다.\n===\n+++!!!![#. 기법 셋: 지수 제곱 안개 ]\n<html> <span style="font-size: 14px; "> <b> 안개 방정식 </b> </span> </html>\n(p.186) 응용프로그램에서 보면, 가상 카메라 주변에서는 넓은 범위에 완전히 선명한 시야를 가지고, Z_FogEnd를 향해 갈수록 농도가 매우 짙어진다.\n\n현 세대의 그래픽 하드웨어에서는, 좀 더 복잡한 지수 계산이 성능 상 큰 문제가 되지 않지만, 구 세대의 카드를 위한 셰이더를 짤 때는 눈에 띌 정도로 차이가 생길 수 있다는 것을 명심해야 한다.\n\n<html> <span style="font-size: 14px; "> <b> 구현 </b> </span> </html>\n(p.186) 물론, 구현은 지수 안개와 매우 유사하지만, 두 가지 큰 차이점을 지적할 만하다.\n\n첫째로, 거리 요소로 카메라 공간 z 깊이를 사용하지 않는다. \n둘째로, 안개 요소 계산에 추가의 곱셈을 포함하도록 변경하였다.\n===\n+++!!!![#. 기법 넷: 레이어 안개 ]\n<html> <span style="font-size: 14px; "> <b> 이론과 방정식 </b> </span> </html>\n(p.189) 이 부분에서는 간단한 종류의 입체 안개 효과인 레이어 안개를 살펴보겠다. 구현의 기반 이론은 "빠른 다중 레이어 안개"라는 논문에 근거하고 있다. cf. 참고 자료 Legakis, J., "Fast Multi-Layer Fog", ACM SIGGRAPH 98 Conference Abstracts and Appications, p.266\n\n레이어 안개의 기반이 되는 착상은 방정식을 확장하여 거리 요소뿐만이 아니라 높이 요소도 포함시키는 것이다.\n\n<html> <span style="font-size: 12px; "> <b> 셰이더 </b> </span> </html>\n(p.195) 처리되는 정점이 안개 상단 아래쪽일 경우에는, 두 개의 농도를 계산해야 한다. 첫째는 시점과 안개 상단 사이의 선을 계산해야 하고,\n둘째는 정점 높이와 안개 상단 사이의 선을 계산해야 한다. 최종 값은 이 두 농도의 차이로부터 나온다.\n===\n+++!!!![#. 기법 다섯: 움직이는 안개 ]\n<html> <span style="font-size: 14px; "> <b> 이론과 방정식 </b> </span> </html>\n(p.198) 움직이는 안개의 바탕이 되는 주 개념은 주기 함수를 통해 안개 방정식의 다양한 항인 흡수, 산란, 발산 같은 것들을 근사하는 데 있다. 이 방정식들에 가중치를 사용하고 전체 장면에 적용시킴으로서 결과적으로 비정규적인 안개 분포를 얻을 수 있다.\n\n주기 함수들의 도움으로, 안개에 대한 바람의 영향을 시뮬레이션 해주는 종류의 애니메이션을 추가하는 것은 쉽다. 애니메이션 설정 조정으로 심지어 바람의 속도와 방향에 의한 시뮬레이션 변화까지도 가능하다.\n===\n++++!!!![#. 결론 ]\n(p.202) 여기서 사용한 모든 픽셀 셰이더들은 단지 혼합 작용을 수행할 뿐이다. 안개 계산을 정점 셰이더에서 픽셀 셰이더로 옮기면 더 정확한 결과를 얻을 수 있다. 하지만 이것은 사안별로 추가되는 계산 비용(매 정점 대신에 매 픽셀별로 계산함으로 인해 발생하는)이 가치가 있는지에 근거해서 결정해야 한다. 일반적으로, 안개는 대부분 균등한 색들을 다루기 때문에 큰 차이를 느끼지 못할 것이다.\n\n또 다른 것은 논의한 셰이더에서의 상수 항 사용이다. 안개 기법을 정의하는 방정식에 직접 연결하기 위해서, 대부분의 셰이더는 내부에서 자체적으로 상수 항을 계산한다. 현실의 응용프로그램에 있어서는, 이것은 (물론) 시렁 상 맞지 않다. CPU에서 상수항을 미리 계산해서 프레임마다 GPU에 제공하는 것이 셰이더 프로그램의 매 실행마다 반복해서 계산하는 것보다 훨씬 더 효과적이다.\n\n마지막으로 언급할 만한 것은 안개 색을 다루는 법이다. 우리의 모든 셰이더는 상수 안개 색을 사용하지만, 추천 사항은 아니다. 정점이나 픽셀을 위한 안개 색을 판별하기 위해서 추가적인 계산을 함으로서 정말로 흥미롭고 재미있는 효과를 얻어서 당신의 응용프로그램에 최후의 한 획을 더할 수 있다.\n<br>\n===\n<html> <span style="font-size: 12px; "> <b> &nbsp; #. 참고 자료 </b> </span> </html>\n===\n++++!!![5. Direct3D 9로 구현한 그림자 매핑(Shader 2.0) ]\n◇ Michal Valient\n\n<html> <span style="font-size: 12px; "> <b> &nbsp; #. 소개 </b> </span> </html>\n<html> <span style="font-size: 12px; "> <b> &nbsp; #. 그림자 알고리즘(Shadow Algorithm) </b> </span> </html>\n<html> <span style="font-size: 12px; "> <b> &nbsp; #. 깊이 보정 문제 </b> </span> </html>\n+++!!!![#. 그림자 맵 필터링 ]\n(p.207) 이 알고리즘의 품질은 사용된 그림자 맵의 해상도에 의존하기 때문에, 텍스처가 작다면 그림자들이 거칠거나 계단 현상들을 보일 수 있다. 이런 문제들을 완벽하게 제거할 수 없지만, 자연스러운 그림자를 얻기 위해 맵을 필터링할 수는 있다. z 값을 바로 필터링하면 잘못된 결과가 나오기 때문에 PCF(Percent Closer Filter)이라는 특별환 알고리즘이 개발되었다.\n\n(p.208) 지금까지 PCF는 실시간으로 구현이 불가능했다(아니면 매우 제한적인 형태로 구현되었다). 하지만 Direct3D 9 덕택에, 이 작업을 픽셀 셰이더에서 할 수 있게 되었다.\n===\n++++!!!![#. 그림자 맵 생성을 위한 셰이더 ]\n(p.209) 이 단계에서 사용된 셰이더는 매우 간단하다. __정점 셰이더는 빛에 의해 생성된 절단 공간 및 세계 공간에 간단한 변환만을 가해준다. 그런 다음 실제 빛에서 대상까지의 거리를 계산하고, 이를 정규화한 뒤, 깊이 보정값을 적용(선택적)하고 출력한다. 픽셀 셰이더는 단순히 이 결과를 출력해주기만 한다.__\n\n+++[아래는 그림자 맵을 생성하는 정점 셰이더이다. ]\n{{{\nvs_2_0 //Shader version 2.0\n\n// 상수 레지스터들\n//---------------------------------- \n// c0-c3 - 세계 * 시야 * 투영 - 이번 경우에는 빛을 위하여 사용\n// c4-c7 - 전치된 세계 공간\n// c8 - 광원의 위치(세계 공간에서)\n// c9 - Z 범위 값들(ZNear, ZFar, 1/(ZFar-ZNear), DepthBias)\ndef c10, 0.5f, 0.0f, 0.0f, 0.0f\n\n// 입력 레지스터들\n//----------------------------------\ndcl_position v0\ndcl_normal v1 \ndcl_texcoord v2\ndcl_tangent v3\n\n// 아래의 코드는 위치와 텍스처의 좌표를 출력한다.\n//----------------------------------\nm4x4 oPos, v0, c0 // 정점 클립의 위치\nm4x4 r8, v0, c4 // 실제 공간으로 정점을 변환\n\n// 광원에서의 거리를 구한 뒤 (0~1) 사이의 값으로 정규화한다.\n//----------------------------------\nsub r0, c8, r8 // 광원에서 정점까지의 빛 벡터를 구한다.\ndp3 r1.x, r0, r0 // 길이의 제곱\npow r2.x, r1.x, c10.x // 앞에서 구한 값의 제곱근\nsub r3.x, r2.x, c9.x // Dst - ZNear\nmul r4.x, r3.x, c9.z // (Dst - ZNear)/(ZFar - ZNear) - 정규화된 위치\nadd r4.x, r4.x, c9.w // 보정 값을 더함, c9.w=0이면 보전 값을 적용하지 않음\nmov oT0, r4.x // 결과를 출력\n}}}\n===\n<br>\n(p.210) +++[아래는 그림자 맵을 생성하는 픽셀 셰이더이다. ]\n{{{\nps_2_0 //Shader version 2.0\n\n// 사용된 입력 레지스터\n//----------------------------------\ndcl t0 // 픽셀의 농담(진하기)\n\n// Output value\n//----------------------------------\nmov r0, t0 // 부동 소수점 Z 값을 일어온다.\nmov oC0, r0 // 색 출력\n}}}\n===\n===\n++++!!!![#. 최종 렌더링을 위한 셰이더 ]\n(p.211) 픽셀 셰이더는 64개라는 명령어 범위 안에서 최대의 효과를 내기 위하여 매우 최적화 되어 있다. 정점 셰이더는 "3. Direct3D 9로 구현한 향상된 조명과 셰이딩"에서 퐁 조명의 부가적인 거리 계산을 위하여 사용된 것과 동일하다.\n\n+++[다음은 그림자를 렌더링하는 정점 셰이더 2.0 모델이다. ]\n{{{\nvs_2_0 //Shader version 2.0\n\n// 상수 레지스터들\n//---------------------------------- \n// c0-c3 - 전치된 세계 공간\n// c4-c7 - 세계 * 시야 * 투영\n// c8 - 조명 위치(세계 공간에서) \n// c9 - 시점 위치(세계 공간에서)\n// c10-c13 - 점적광 투영 행렬\n// c14 - c14.w = 05. 빛의 Z 값 범위 (for 그림자 맵 생성)\n\n// 입력 레지스터들\n//----------------------------------\ndcl_position v0\ndcl_normal v1 \ndcl_texcoord v2\ndcl_tangent v3\n\n// 출력\n//----------------------------------\n// oT0 - 텍스처 좌표\n// oT1 - 빛 벡터(접선 공간에서)\n// oT2 - 시선 벡터(접선 공간에서)\n// oT3 - 투영된 점광원 텍스처 좌표\n// oT4 - 광원에서의 거리 (for 그림자 맵 생성)\n\n// 좌표와 텍스처 좌표계 출력\n//----------------------------------\nm4x4 oPos, v0, c4 // 정점 절단 위치\nmov oT0.xy, v2.xy // 색 텍스처를 위한 텍스처 좌표\nm4x4 r8, v0, c0 // 정점을 세계 공간으로 변환\n\n// 접선 공간의 기저 벡터 생성\n//----------------------------------\nm3x3 r11.xyz, v1, c0 // 법선 N을 실제 공간으로 변환\nmov r11.w, v1.w\nm3x3 r9.xyz, v3, c0 // 접선 T을 실제 공간으로 변환\nmov r9.w, v3.w\ncrs r10.xyz, r9, r11 // 외적 - 종법선 B=NxT\n\n// 빛 벡터, 관찰자 벡터, 투영자의 텍스처 좌표를 계산\n//----------------------------------\nsub r0, c8, r8 // 광원에서 정점까지의 빛 벡터 구현\nnrm r1, r0 // 벡터 정규화\nm3x3 oT1.xyz, r1, r9 // NxT 벡터를 접선 공간으로 변환\n\nsub r0, c9, r8 // 정점에서 카메라까지의 관찰자 벡터 구현\nnrm r1, r0 // 벡터 정규화\nm3x3 oT2.xyz, r1, r9 // NxT 벡터를 접선 공간으로 변환\n\nm4x4 oT3.xyzw, v0, c10 // 투영된 텍스처 좌표계의 계산\n\n// 빛으로부터의 거리를 계산한 후 (0~1) 사이로 정규화 (for 그림자 맵 생성)\n//----------------------------------\nsub r0, c8, r8 // 광원에서 정점까지의 빛 벡터를 구현\ndp3 r1.x, r0, r0 // 벡터^2의 길이\npow r2.x, r1.x, c14.w // sqrt(길이^2)\nsub r3.x, r2.x, c14.x // Dst - ZNear\nmul r4.x, r3.x, c14.z // (Dst - ZNear)/(ZFar - ZNear) 정규화된 위치\nmov oT4, r4.x // 결과를 출력\n}}}\n===\n\n(p.212)\n+++[아래는 그림자를 렌더링하는 픽셀 셰이더 2.0 모델이다. ]\n{{{\nps_2_0 //Shader version 2.0\n\n// 1 - 상수 레지스터\n//---------------------------------- \n// c0 - 분산 텍스처 곱수(조명 색과 곱해진 것)\n// c1 - 반영 텍스처 곱스(조명 색과 곱해진 것)\n// c2 - 반영 광택(shi, shi, shi, 1.0f)\n// c3 - 그림자 텍셀 보정 값(x,y)과 텍스처 가로/세로(z,w)\n// c4 - c11 - 3x3 필터링 커널\n// c29 - 텍스처 가로/세로(x,y)\n// c30 - 텍셀 divider - 1 / texels_in_kernel(이 경우는 4)\ndef c31, 2.0f, 1.0f, 0.0f, 4.0f // 헬퍼 상수\n\n// 1 - 입력 레지스터\n//----------------------------------\ndcl t0.xy // 텍스처 좌표\ndcl t1.xyz // 빛 벡터\ndcl t2.xyz // 관찰자 벡터\ndcl t3.xyzw // 투영 텍스처 좌표계\ndcl t4.xyzw // 정규화된 빛으로부터 거리\n\n// 1 - 텍스처 샘플러\n//----------------------------------\ndcl_2d s0 // (알파에서 글로스) 분산 텍스처\ndcl_2d s1 // 법선 텍스처\ndcl_2d s2 // 그림자 맵\ndcl_2d s3 // 점적광 텍스처\n\n// 2 - 실제 픽셀의 그림자 텍스처를 위한 좌표 계산\n//----------------------------------\nrcp r11, t3.w // 투영 분할을 위한 1/w\nmad r0, t3, r11, c3 // 텍스처 좌표계를 구현(중점 보정된)\ntexld r11, r0, s2 // 샘플 그림자\n\n// 3 - 나머지 3x3 필터링 커널을 위한 좌표 계산\n//----------------------------------\nadd r10, c4, r0 // 좌측 열\nadd r9, c5, r0\nadd r8, c6, r0\n\nadd r7, c7, r0 // 중앙 열\nadd r6, r8, r0\n\nadd r5, c9, r0 // 우측 열\nadd r4, c10, r0\nadd r3, c11, r0\n\n// 4 - 3x3 필터링 커널을 채움\n//----------------------------------\ntexld r10, r10, s2 // 좌측 열\ntexld r9, r9, s2\ntexld r8, r8, s2\n\ntexld r7, r7, s2 // 중앙 열\ntexld r6, r6, s2\n\ntexld r5, r5, s2 // 우측 열\ntexld r4, r4, s2\ntexld r3, r3, s2\n\n// 5 - 거리 비교 - 3x3 이진 커널 획득\n//----------------------------------\nsub r10.x, t4.x, r10.x // 좌측 열\nsub r10.y, t4.x, r9.x\nsub r10.z, t4.x, r8.x\ncmp r1.xyz, r10, c30.g, c30.r // 거리 비교\n\nsub r9.x, t4.x, r7.x // 중앙 열\nsub r9.y, t4.x, r11.x\nsub r9.z, t4.x, r6.x\ncmp r2.xyz, r9, c30.g, c30.r // 거리 비교\n\nsub r8.x, t4.x, r5.x // 우측 열\nsub r8.y, t4.x, r4.x\nsub r8.z, t4.x, r3.x\ncmp r3.xyz, r8, c30.g, c30.r // 거리 비교\n\n// 6 - 3x3 이진 커널의 이선형 필터링\n//----------------------------------\nmul r0, r0, c29 // 텍스처 상의 좌표계 획득\nfrc r0, r0 // 소수 부 획득\n\nlrp r10.xyz, r0.x, r2, r1 // 1, 2열의 보간\nlrp r11.xyz, r0.x, r3, r2 // 2, 3열의 보간\n\nlrp r3.x, r0.y, r10.y, r10.x // 1열과 1행의 보간\nlrp r3.y, r0.y, r10.z, r10.y // 1열과 2행의 보간\nlrp r3.z, r0.y, r11.y, r11.x // 2열과 1행의 보간\nlrp r3.w, r0.y, r11.z, r11.y // 2열과 2행의 보간\n\ndp4 r8.x, r3, c31.g\n\n// 7 - 필요한 벡터를 설정 - 읽어서 정규화\n//----------------------------------\ntexld r0, t0, s1 // 법선 벡터를 읽음\nmad r1, r0, c31.r, -c31.g // 법선 벡터 값을 -1, 1 사이 값으로 조정\nnrm r11, r1 // r11 = 정규화된 법선 벡터\nmov r1.xyz, t1\nnrm r10, r1 // r10 = 정규화된 광원 벡터\nmov r1.xyz, t2\nnrm r9, r1 // r9 = 정규화된 시선 벡터\n\n// 8 - 분산 색과 반영 색 계산\n//----------------------------------\ndp3 r0, r11, r10 // r0 = (n.l)\nmul r1, r0, c31.r // r1.g = 2*(n.l)\nmad r1, r1, r11, -r10 // r1 = 반사 벡터 r1을 계산\n // 2(n.l)n - 1\ndp3_sat r1, r1, r9 // r1 = (r.v)\npow r0.g, r1.r, c2.r // r1 = (r.v)^shi\ncmp r0, r0.r, r0, c31.b // (n.l)<0 이라면 조명을 적용하지 않는다.\n\n// 9 - 계산된 세기로 텍스처를 곱합\n//----------------------------------\ntexld r6, t0, s0 // 분산 텍스처를 읽음(알파에서는 광택 맵이다.)\ntexldp r4, t3, s3 // 투영 텍스처(원근 수저된)를 읽음\nmul r2, r6.a, r0.g // 반영 정도를 광택 맵으로 반사도를 곱함\nmul r2, r2, c1 // ... 재질의 반영 색과 빛의 색\nmul r3, r6, r0.r // 분산 정도를 텍스처와 곱...\nmad r0, r3, c0, r2 // ... 재질의 분산 색과 빛의 색을 적용\n\n // 반사를 더함\nmul r0, r0, r4 // 점적광 텍스처를 곱하고\nmul r0, r0, r8.x // 음영을 추가하여 변환\n\nmov oC0, r0 // 색깔 출력\n}}}\n===\n<br>\n(p.215) 셰이더의 두 번째 부분에서는 그림자 맵 텍스처의 좌표를 계산하고 있다. 정점 셰이더에서 계산된 이 값들을 가지고 원근이 고려된 텍스처 룩업을 해야 한다. 적절한 음영을 만들기 위해서는 텍스처 좌표가 정확히 텍셀의 중점을 가리키도록 조정해야 하고, 이 값을 다음 섹션에서 나머지 8개의 좌표를 얻어서 커널 생성을 완성시키기 위해 사용해야 한다. 이 때문에 이것을 단순한 texldp 대신에 수동으로, w로 나누어주고 그것에 texld를 적용시키는 것이다. 이 계산을 mad 명령어가 해주는데, 1/w로 곱하고 0.5/shadow_map_size 만큼을 더해준다.\n\n(p.216) 셰이더의 마지막 부분은 "Direct3D 9로 구현된 향상된 조명과 셰이딩"에서 소개된 픽셀 단위의 퐁 조명을 수행한다. 단 차이가 있다면 조명 결과를 그림자로 곱한 것 정도이다.\n===\n<html> <span style="font-size: 12px; "> <b> &nbsp; #. 결론 </b> </span> </html>\n(p.217) Direct3D 9의 기능을 이용하여 고정 그림자 맵 알고리즘을 변형하면, 자연스러운 그림자를 얻을 수 있고, 깊이 보정으로 인해 생긴 문제를 최소화할 수 있다. PCF로 만들어진 3x3 이진 커널에서의 이선형 필터링으로, 저해상도의 그림자 맵에서도 매우 자연스러운 그림자를 만들 수 있게 되었다. 뒷면 그림자 맵 기법으로 깊이 비교 시에 발생하는 오류를 최소화하고, 더 낮은 깊이 맵을 사용할 수 있게 되었다. 이것은 깊이 정보를 해석하기 위해여 두 개의 8비트 채널로 구성된 텍스처들를 사용하는 Direct3D 8 지원 하드웨어 입장에서는 매우 중요하다.\n\n<html> <span style="font-size: 12px; "> <b> &nbsp; #. 참고 자료 </b> </span> </html>\n===\n!! [[6. 스텐실 그림자 입체 이론]] \n&nbsp; &nbsp; &nbsp; &nbsp; ◇ Hun Yen Kwoon\n\n&nbsp; &nbsp; &nbsp; &nbsp; 소개\n&nbsp; &nbsp; &nbsp; &nbsp; 그림자 입체의 개념\n&nbsp; &nbsp; &nbsp; &nbsp; 문제와 해법\n&nbsp; &nbsp; &nbsp; &nbsp; CPU에서의 실행\n&nbsp; &nbsp; &nbsp; &nbsp; GPU(셰이더)에서의 실행\n&nbsp; &nbsp; &nbsp; &nbsp; DirectX 9 HLSL 샘플\n&nbsp; &nbsp; &nbsp; &nbsp; 효율과 견고함\n&nbsp; &nbsp; &nbsp; &nbsp; 결론\n&nbsp; &nbsp; &nbsp; &nbsp; 참고 자료\n\n!![[7. 렌더몽키를 사용한 셰이더 개발]]\n&nbsp; &nbsp; &nbsp; &nbsp; ◇ Natalya Tatarchuk\n\n개개의 렌더몽키 시각 효과 조합들은 하나의 단일한 XML 작업 공간으로 캡슐화한다. 개개의 효과를 다시 만드는 데 필요한 모든 정보 중 실제 텍스처와 모델 데이터를 빼고는 모두 이 하나의 XML 파일에 저장된다. (*.rfx)\n\n&nbsp; &nbsp; &nbsp; &nbsp; 소개\n&nbsp; &nbsp; &nbsp; &nbsp; IDE 개괄\n&nbsp; &nbsp; &nbsp; &nbsp; 기본 조명 효과 제작\n&nbsp; &nbsp; &nbsp; &nbsp; 실행 시간 데이터베이스 개괄\n&nbsp; &nbsp; &nbsp; &nbsp; 픽셀과 정점 셰이더들\n&nbsp; &nbsp; &nbsp; &nbsp; 렌더 스테이트 블록 관리\n&nbsp; &nbsp; &nbsp; &nbsp; 렌더몽키에서의 텍스처링\n&nbsp; &nbsp; &nbsp; &nbsp; 텍스처에 렌더링하기\n&nbsp; &nbsp; &nbsp; &nbsp; 렌더 가능한 텍스처 편집\n&nbsp; &nbsp; &nbsp; &nbsp; 요약\n\n++++!!![8. 셰이더 친화적 3D 모델 제작을 위한 팁 ]\n◇ Gim Guan Chua\n+++!!!![#. 소개 ]\n(p.344) 접선 기저(tangent basis)나 범프 매핑 등의 사용에 관한 더 많은 정보는 nVidia의 "CG로 배우는 셰이더 프로그래밍"(정보문화사 번역 출간)을 참조\n\n보통 3D 모델 데이터는 법선과 텍스처 좌표들의 정보만 가지고 있어서, 접선이나 종법선은 법선과 텍스쳐 좌표를 이용해 자동으로 만들어내곤 했다(접선 기저는 법선, 종법선 그리고 접선으로 구성된다). 이 방법은 편리하고 효과적이지만, 때때로 마람직하지 않은 가공물을 만들어 낸다. 이것은 다음과 같은 요소 때문이다.\n\n▣ 적절한 텍스처 좌표들이 필요하다.\n▣ "정점 가중치"나, 같은 정점이 공유하는 삼각형 수에 영향을 받는다.\n▣ 볼록한 표면을 가진 모델에는 이상적이지만 오목하거나 돌출한 모델에서는 문제가 나타난다.\n<br>\n===\n<html> <span style="font-size: 12px; "> <b> &nbsp; #. 적절한 텍스처 좌표 생성하기 </b> </span> </html>\n+++!!!![#. "정점 가중치"의 영향 ]\n(p.345) 만약 한 정점이 많이 삼각형에 의해 공유되면, 보다 많은 삼각형들이 그 정점의 접선 기저에 영향을 미친다. 이상적인 메쉬는 삼각형 스트립 같은 것으로 정점들을 균일하게 공유한다. 그렇지만 메쉬는 종종 고차 폴리곤(사각형, 오각형 등)으로부터 삼각형들로 자동 분할(auto-tesselate)되고, 이 과정에서 공유하는 정점의 균일 분포 등은 고려하지 않는다. \n이것을 극복하는 방법은 ''선택적으로 문제 영역을 재분할(re-tesselate)''하는 것이다.\n===\n+++!!!![#. 비볼록(Non-Convex) 평면의 문제 ]\n(p.347) 오목하거나 튀어나온 복잡한 모델들은 종종 접선 기저를 엉망으로 만든다. 이것 역시 정점 가중치 효과가 원인이다.\n\n이 문제를 해결하기 위한 3가지 방법이 있다.\n\n▣ 법선, 접선 그리고 종법선들을 수정할 수 있는 모델링 도구를 사용한다. 몇몇 도구에서는 법선 수정을 지원하지만, 접선, 종법선 수정은 드물다.\n▣ 모델을 분리시킨다... (분리된) 두 메쉬 간에 완전히 불연속이다.\n▣ 추가 분할로 불연속 효과를 완충시키거나 부드럽게 한다... (결과적으로 수정된 메쉬는) 실제로 약간의 연속성을 보존한다.\n===\n++++!!!![#. 결론 ]\n(p.349) 이 3가지 방법(적합한 텍스처 좌표 생성, 정점 가중치를 좀 더 균등하게 하기 위한 재분할 그리고 불연속 효과를 완화시키기 위한 완충 분할(buffered tesselation)의 조합은 범프 맵, 반영 하이라이트 그리고 다른 접선 기저에 의존적인 효과들을 바르게 렌더링할 수 잇는 복잡한 모델을 만드는 데 효과적이다. \n모델링 도구나 셰이더를 바꾸어야 할 필요는 없다. 대신, 모델러의 임무로 모델을 셰이더-친화적으로 만들기 위해 좀 더 많은 작업이 요구될 뿐이다.\n===\n===\n\n\n!!!찾아보기 \n
출처 ; 가끔은 격하게 외로워야 한다 - 김정운\n\n''인간의 동기를 두 가지 측면으로 나눈 것'' (심리학자 토리 히긴스)\n\n접근동기는 자신이 원하는 목적에 접근하기 위해 열심히 노력하는 것을 말하고 (cf. me/ 긴 시간)\n회피동기는 반대로 자신이 싫어하는 대상으로부터 벗어나기 위해 애쓰는 것을 말한다. (cf. we/ 짧은 시간)\n\n{{wrappingClass{ex. 공부 열심히 해야 성공할 수 있어! / 좋은 학교에 가지 않으면 낙오자가 되는거야! &nbsp; &nbsp; &nbsp; &nbsp; }}}\n\n일의 결과가 바로 나타나는 것은 회피동기("그렇게 하면 손해를 본다"),\n결과가 나중에 나오는 것은 접근동기("그렇게 해야 성공한다")로 각각 설명해야 유리하다.\n\n{{wrappingClass{ex. 은퇴설계 보험을 권할 경우 풍요로운 노년의 삶을 보여줘야 한다. (접근동기를 자극) &nbsp; &nbsp; &nbsp; &nbsp; \n은퇴설계를 제대로 하지 않았을 경우 요양원에서 늙고 병들어 가는 모습을 보여주며 회피동기에 호소하는 방법은 그리 효과가 없다.\n왜냐하면 먼 훗날의 일이기 때문. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \n반대로 규칙을 지키지 않으면 사고가 일어나는 일처럼 당장 눈앞의 일은 회피동기를 자극해야 효과가 있다. &nbsp; &nbsp; &nbsp; &nbsp; }}}\n\n접근동기는 상상력을 자극하고, 회피동기는 일을 치밀하게 한다.\n창조적 능력을 발휘시키려면 긍정적인 정서를 유발시키는 접근동기를 자극해야 하고 (놀듯이 일해야 창의성이 자극됨),\n치밀함과 정확성을 요구하는 일은 회피동기를 자극해야 한다. (제대로 처리하지 않으면 큰일난다!는 식)\n\n한국에 애플같은 회사가 나오지 않는 이유...가 설명되는 이론.\n
원문 ; http://blog.bagesoft.com/254\n\n해당 프로그램을 직접 실행해 봐야 할 것 같은데.....\n일단 이런 것들을 확인해보세요.\n \n1. debug와 Release모드에서의 Project Setting을 확인해보세요.\n라이브러를 include해주는 부분에 차이가 날 수 있구요...\n\n2. 혹시 직접제작한 라이브러리 이외의 라이브러리를 사용하신다면 \n그 라이브러리가 Debug모드와 Release모드에서 모두 동작하는 지 확인해보세요.\n\n3. 경고는 뜨지 않지만 함수의 호출이 잘 못되어 있는 경우가 있을 수 있습니다.\nDebug모드에서는 자동으로 강제로 변환해주지만, Release에서는 안되는 경우가 있습니다. ( 이경우에는 닷넷에서 컴파일해보면 경고로 뜹니다.)\n \n4. 포인트변수의 초기화가 이루어지지 않은 경우.\n포인트변수의 초기화를 해두지 않고 메모리만 할당해 놓은 상태라면 debug모드에서는 자동으로 초기화되는 경우가 있지만, Release에서는 초기화가 되지를 않습니다.\n \n5. 다른 클래스에서 사용하는 전역변수의 경우에 Debug모드에서는 잘 찾아가지만, Release모드에서는 찾지 못하는 경우가 발생하기도 합니다. \n\n6. 마지막으로 실행되는 순서입니다. \n프로그램을 하다보면, 스레드나, 메시지를 많이 사용하게 되는데, 그 순서가 바뀌는 경우가 있습니다. \n\n예전에 약간 경험했던 황당했던 기억을 되살려서 정리했는데, \n참고가 되시길.....
!!!#. 상수 레지스터 설정\n1. DirectX9\n{{{\n// constant registers ; c0.x = 0, c0.y = 1, c0.z = 2, c0.w = 3.0f\nD3DXVECTOR4 vCon(0.0f, 1.0f, 2.0f, 3.0f);\nm_pd3dDevice->SetVertexShaderConstantF(0, (float*)&vCon, 1);\n}}}\n \n2. DirectX8 \n{{{\n// Common constants\nfloat c[4] = {0.0f,1.0f,2.0f,3.0f}; // c0의 .x=0, .y=1, .z=2, .w=3.0f 으로 저장\n\nDWORD dwDeclCOLOR[] =\n{\n D3DVSD_STREAM(0),\n D3DVSD_REG(D3DVSDE_POSITION, D3DVSDT_FLOAT3 ), \n D3DVSD_REG(D3DVSDE_NORMAL, D3DVSDT_FLOAT3 ), \n D3DVSD_REG(D3DVSDE_DIFFUSE, D3DVSDT_D3DCOLOR), \n D3DVSD_REG(D3DVSDE_TEXCOORD0, D3DVSDT_FLOAT2 ), \n D3DVSD_CONST(0,1),*(DWORD*)&c[0],*(DWORD*)&c[1],*(DWORD*)&c[2],*(DWORD*)&c[3],\n D3DVSD_END() \n};\n}}}\n\n<html> <span style="font-size: 14px;"> <b> ■ dcl_?(usage)? : Source sampler declarations </b></span> </html>\n|| Vertex element semantics\n+++[// typedef enum 3DDECLUSAGE //-------------------------- ]\n{{{\ntypedef enum _D3DDECLUSAGE\n{\n D3DDECLUSAGE_POSITION = 0, // dcl_position\n D3DDECLUSAGE_BLENDWEIGHT = 1, // dcl_blendweight\n D3DDECLUSAGE_BLENDINDICES = 2, // dcl_blendindices\n D3DDECLUSAGE_NORMAL = 3, // dcl_normal\n D3DDECLUSAGE_PSIZE = 4, // dcl_psize\n D3DDECLUSAGE_TEXCOORD = 5, // dcl_texcoord\n D3DDECLUSAGE_TANGENT = 6, // dcl_tangent\n D3DDECLUSAGE_BINORMAL = 7, // dcl_binormal\n D3DDECLUSAGE_TESSFACTOR = 8, // dcl_tessfactor\n D3DDECLUSAGE_POSITIONT = 9, // dcl_positiont\n D3DDECLUSAGE_COLOR = 10, // dcl_color\n D3DDECLUSAGE_FOG = 11, // dcl_fog\n D3DDECLUSAGE_DEPTH = 12, // dcl_depth\n D3DDECLUSAGE_SAMPLE = 13, // dcl_sample\n} D3DDECLUSAGE;\n}}}\n===\n\n\n<html> <span style="font-size: 14px;"> <b> ■ D3DVERTEXELEMENT9 vertElements[]; </b></span> </html>\n{{{\nD3DVERTEXELEMENT9 vertElements[] = \n{ \n { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, \n { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },\n { 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, \n D3DDECL_END() \n};\n}}}\n/ 첫번째 parameter ; stream 설정\n/ 두번째 parameter ; 해당 stream에서 몇번째 byte부터 data가 시작한다는 의미\n\n첫번째 설정에서 D3DDECLTYPE_FLOAT3이기 때문에 3 * 4byte = 12 byte 데이터로 정의 (∵ float = 4byte)\n\n<html> <span style="font-size: 14px;"> <b> ■ LPDIRECT3DVERTEXDECLARATION9 m_pVertexDeclaration; </b></span> </html>\n''Shader Declarations''\nLoading data in the constant memory at the time that a shader is set as the current shader. \nBinding stream data to vertex shader input registers. \n\n1.정의\nLPDIRECT3DVERTEXDECLARATION9 m_pVertexDeclaration;\n\n2.초기화\nm_pVertexDeclaration = NULL;\n\n3.설정\n{{{\n// Create the shader declaration.\nD3DVERTEXELEMENT9 decl[] =\n{\n { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },\n { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },\n { 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },\n D3DDECL_END()\n};\n\nm_pd3dDevice->CreateVertexDeclaration(decl, &m_pVertexDeclaration);\n}}}\n4.사용(렌더링)\n{{{\n// Begin the scene\nif (SUCCEEDED(m_pd3dDevice->BeginScene()))\n{\n...\n // m_pd3dDevice->SetFVF(D3DFVF_VERTEX);\n m_pd3dDevice->SetVertexDeclaration(m_pVertexDeclaration);\n...\n // End the scene.\n m_pd3dDevice->EndScene();\n}\n}}}\n5.해제\nSAFE_RELEASE(m_pVertexDeclaration);\n\n※ 참고\n{{{\nstruct VERTEX\n{\n FLOAT x, y, z; // The untransformed position for the vertex\n FLOAT nx, ny, nz;\n FLOAT u, v;\n};\n\n// set custom FVF macro\n#define D3DFVF_VERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX2)\n}}}\n\n\n\n\n
!! 분류\n''BI | &nbsp; 비즈니스 인텔리전스 (Business Intelligence)''\n기업에서 데이터를 수집, 정리, 분석하고 활용하여 효율적인 의사결정을 할 수 있는 방법에 대해 연구하는 학문이다.\n기업의 비전을 달성하기 위하여 비즈니스의 전략을 효율적이고 효과적으로 지원하여 각 조직의 구성원(종업원, 중간 관리자, 의사결정자 등)에게 적시에 의사결정을 할 수 있도록 지원하는 정보체계라고 정의하기도 한다.\n\n''UC | &nbsp; 통합 커뮤니케이션 (Unified communications)''\n전화, 팩스, 이메일, 핸드폰, 메신저, 영상통화, 음성메일 등 기업 내 다양한 커뮤니케이션 도구를 단일한 플랫폼을 통해 제공하는 것을 말한다.\n\n\n\n\n!! 기업 정보\n<html> <span style="font-size: 14px; color:#BE8C3C "> <b>(주)유비베이스 </b> </span> </html> (www.ubibase.com) / &nbsp; UC\n마이크로소프트 기반의 통합커뮤니케이션(UC) 분야의 기업. <br> 고객들이 마이크로소프트 제품을 제대로 구축하고 활용할 수 있도록 솔루션 구축, 개발은 물론 유지, 보수, 운용까지 토털 맞춤형으로 서비스하고 있으며, 마이크로소프트 Azure 기반의 오피스 365, CRM 등 클라우드 기반의 시스템 구축 및 확장성을 위한 자체 솔루션을 개발하여 제공.\n\n
세렌디피티 (Serendipity)는 단어의 어원은 옛 페르시아의 우화 '세렌딥의 세 왕자(The Three Princes of Serendip)'에서 유래, 보물을 찾아 먼 여행을 떠난 인도의 세 왕자가 자신들이 원하던 것은 얻을 수 없었지만 뜻밖의 사건을 통해 인생을 살아가는 데 필요한 지혜와 용기를 자신들의 마음 속에서 찾아낸다는 이야기이다. \n\n18세기 영국의 호레이스 월폴 (Horace Walpole)이라는 작가가 그의 친구들에게 편지를 보내면서 그 당시에는 신조어였을 이 단어를 처음 사용하게 되면서 세상에 널리 알려지게 되었다고 한다. \n\n요즈음에 와서 ‘세렌디피티’라는 단어는 __생각지도 못한 것을 우연히 발견하는 능력, 열심히 일하는 행복 속에서 찾아오는 행운, 행운을 불러오는 힘이나 능력 등의 의미로 폭넓게 사용되고 있는데 최근 특히 과학분야에서 실험 도중에 실패해서 얻은 결과에서 중대한 발견 또는 발명을 하는 것을 말한다.__\n\n그 가장 대표적인 사례로 플레밍의 페니실린 발견을 들 수 있다. 플레밍이 배양실험을 하는 도중에 실수로 잡균인 푸른곰팡이를 혼입한 것이 후에 감염증으로부터 수많은 사람들을 구해낸 항생물질을 발견하게 된 사건이 된 것이다. 그리고 또 감마선 폭발의 경우도 대표적이다. 핵실험 감시위성인 벨라 위성은 지상에서 나오는 핵실험의 감마선대신, 우주에서 나오는 감마선을 포착하게 되는데 과학자들은 이 경우를 조사하다가 감마선 폭발을 발견하게 되었다. 또한 이런 실수들은 전자렌지(초단파는 2차대전당시에는 비밀무기에 속했다.)나 3M사의 포스트잇 메모지(이것 역시 시작은 초강력접착제였다.) 같은 상품을 만들게 된 계기가 되기도 했다.\n\n
!! PART 1 셰이더 프로그래밍 입문\n++++!!![1. 정점 셰이더의 기초 ]\n◇ 볼프강 F. 엥겔 (Wolfgang F. Engel)\n+++!!!![# 정점 셰이더 아키텍처 ]\n| | |정점 입력 <br> 128 비트 == float 4개 <br> 항목 16개 | | |\n| | | ↓ | | |\n|레지스터들 <br> 128 비트 == float 4개 <br> 항목 12개 |→ <br> ← |정점 셰이더 <br> <br> 명령 128개 | <br> → / AD / → <br> ────> <br> <──── <br> <br> <br> <br> |상수메모리 <br> 주소 <br> 데이터 <br> 128 비트 == float 4개 <br> RADEON 8500: <br> 항목 192개 |\n| | | ↓ | | |\n| | |정점 출력 <br> 128 비트 == float 4개 <br> 항목 12개 | | |\n| | | ↓ | | |\n(p.044) 정점 셰이더의 모든 데이터는 네 개의 float들의 묶음으로 표현된다 (4X32 = 128 비트).\n\n하드웨어 정점 셰이더에서 하나의 명령은 네 개의 32 비트 변수들에 동시에 영향을 미치는데, 이는 전형적인 SIMD(Single Instruction Multiple Data) 프로세서와 같은 특징이다.\n\n(p.045) 정점 입력 데이터로... 정점의 위치, 법선, 분산 및 반영색, 안개 좌표, 점의 크기, 여러 텍스처들의 좌표들을 담는다. \n\n|!레지스터들 |!레지스터 개수 |!속성 |\n|입력 (v0-v15) |16 |RO1, 읽기 전용 |\n|출력 (o*) |Geforce 3/4TI: 9; RADEON 8500: 11 |WO, 쓰기 전용 |\n|상수 (c0-c95) |vs.1.1 표준: 96; RADEON 8500: 192 |RO1 |\n|임시 (r0-r11) |12 |R1W3 |\n|주소 (a0.x) |1 (vs.1.1 이상) |WO (mow의 경우에는 W) |\n(p.046) 입력 레지스터는 읽기 전용이고 출력 레지스터는 쓰기 전용이라는 점에서, 정점 셰이더 아키텍처는 스트리밍 구조이다. \n=== +++!!!![# 정점 셰이더 프로그래밍의 개요 ]\n<html> <span style="font-size: 12px;"> <b> 정점 셰이더 지원 여부 확인 </b> </span> </html>\n(p.047) 다음은 정점 셰이더 버전 1.1 지원 여부를 점검하는 코드이다.\nif ( pCaps->VertexShaderVersion < D3DVS_VERSION(1.1) )\n&nbsp; &nbsp; &nbsp; &nbsp; return E_FAIL;\n\n|!버전 |!기능성 |\n|0.0 |DirectX 7 |\n|1.0 |DirectX 8, 단 주소 레지스터 a0이 없음 |\n|1.1 |DirectX 8과 DirectX 8.1, 하나의 주소 레지스터 a0이 존재 |\n|2.0 |DirectX 9 |\n\n<html> <span style="font-size: 12px;"> <b> 정점 셰이더의 작성 및 컴파일 </b> </span> </html>\n(p.057) 정점 셰이더 ALU(Arithmetic Logic Unit)는 부동소수점 수 네 개의 묶음에 대해 작동하는 다중 스레딩 방식의 벡터 프로세서이다. ALU는 두 개의 유닛들로 구성된다. 하나는 ''SIMD Vector Unit''으로, 이것은 mov, mul, add, mad, dp3, dp4, min, max, slt, sge 명령들을 처리한다. 또 하나는 ''Special Function Unit''으로, rcp, rsq, logp, expp, lit 명령들을 처리한다. 이 명령들의 실행 사이클은 대부분 1이나, rcp와 rsq의 경우 특정 조건 하에서 2 사이클 이상을 소비하게 된다. 이들은 정점 셰이더 안에서는 오직 하나의 슬롯만을 차지하지만, 결과가 즉시 쓰이는 경우 레지스터 막힘(stall) 때문에 실제로는 2 사이클 이상을 소비한다.\n\n<html> <span style="font-size: 12px;"> <b> 정점 셰이더의 복합 명령들 </b> </span> </html>\n(p.058) 필요하다면 네 개의 dp4 명령들을 하나의 m4X4로 대체하는 것이 이득이 될 수도 있다. 셰이더에서 m4X4 명령을 사용하기로 했다면, 이후 동일한 데이터에 대해 dp4를 사용하지 말아야 한다. 그래야 불필요한 문제나 성능 하락을 피할 수 있다. 에를 들어 한 셰이더 안에서 위치 계산을 위해 m4X4와 dp4를 모두 사용한다면 z 타툼(z-fighting)이 생길 수도 있다.\n\n<html> <span style="font-size: 12px;"> <b> 기본적인 사용 방법 </b> </span> </html>\n\n''입력 레지스터의 사용 ''\n(p.059) 16개 입력 레지스터들ㅇ느 v0-v15까지의 이름들로 접근할 수 있다. 일반적으로 입력 레지스터에는 다음과 같은 값들이 설정된다.\n\n▣ 위치 (x, y, z, w)\n▣ 분산색 (r, g, b, a) - 0.0에서 _1.0\n▣ 반영색 (r, g, b, a) - 0.0에서 _1.0\n▣ 최대 8개의 텍스처 좌표들 (각각 s, t, r, q or u, v, w, q).\n 구체적인 개수는 하드웨어마다 다르며, 일반적으로 4에서 6개이다.\n▣ 안개 (f, *, *, *) - 안개 공식에 쓰이는 값\n▣ 점의 크기 (p, *, *, *)\n\n''상수 레지스터의 사용 ''\n(p.060) 상수 레지스터들은 주로 다음과 같은 데이터를 담는 데 쓰인다.\n\n▣ 행렬 데이터 - 4X4 행렬의 각 행(row)을 하나의 상수 레지스터(float 4개)에 담는다.\n▣ 조명 특성들 (위치, 감쇠 등)\n▣ 현재 시간\n▣ 정점 보간 데이터\n▣ 절차적 데이터\n\n상수를 저장하는 데 사용할 수 있는 상수 레지스터는 총 96개(RADEON 8500의 경우 192개)이다. 행렬로 치면 총 24개(또는 48개)의 행렬을 담을 수 있는 크기인데, 이 정도면 예를 들어 색인화도니 정점 혼합 (흔히 "행렬 팔레트 스키닝"이라고 하는 것)을 처리하기에도 충분하다.\n\n정점 셰이더의 입장에서 상수 레지스터들은 읽기 전용이다. 반면 응용 프로그램은 상수 레지스터들을 쓸 수도 읽을 수도 있다. 상수 레지스터들의 수명은 하나의 정점 셰이더의 수명보다 길며, 따라서 한 정점 셰이더에서 사용한 상수 레지스터들을 그 다음의 정점 셰이더에서 재사용하는 것이 가능하다.\n \n''주소 레지스터의 사용 ''\n(p.061) 주소 레지스터들은 a0에서 an이다(정점 셰이더 버전이 1.1보다 높을 경우 주소 레지스터가 여러 개일 수 있다). vs.1.1.에서는 a0뿐이며, 이 경우 a0은 상수 메모리의 오프셋을 위한 간접 주소지정 연사자로만 쓰인다.\n\n레지스터 a0은 정수만을 담으며 a0에서 사용할 수 있는 성분은 a0.x뿐임을 주의하기 바란다. 또한 정점 셰이더 안에서 a0.x의 값을 설정할 수 있는 방법은 mov 명령뿐이다.\n\n''임시 레지스터의 사용 ''\n(p.062) 임시 레지스터는 총 12개로, r0에서 r11까지이다. \n... 정점 셰이더는 이미 쓰여진 임시 레지스터만을 읽을 수 있다. 어떠한 값이 설정된 적이 없는 임시 레지스터를 읽으려 하는 경우, 응용 프로그램에서 CreatVertexShader()로 정점 셰이더를 로드할 때 오류가 발생한다.\n\n''출력 레지스터의 사용 ''\n(p.062) 출력 레지스터는 총 13개로, 모두 읽기 전용이다. 출력 레지스터들은 래스터라이저에 대한 입력으로 쓰인다. 각 레지스터의 이름은 소문자 "o"로 시작하며, 그 뒤에 픽셀 셰이더에서의 용도를 암시하는 이름이 붙는다.\n\n|!이름 |!값 |!설명 |\n|oDn |2개의 4-float 값들 |픽셀 셰이더로 직접 들어가는 출력 색 데이터 <br>분산색(oD0)과 반영색(oD1)에 쓰인다. |\n|oPos |1개의 4-float 값 |동차 절단 공간에서의 출력 위치. 정점 셰이더는 반드시 이것을 설정해야 한다. |\n|oTn |최대 8개의 4-float 값들 |GeForce3의 경우 4개, RADEON 8500의 경우 6개. 출력 텍스처 좌표들. 텍스처 혼합 단계에 동시에 묶여진 최대 개수의 텍스처들에 필요 |\n|oPts.x |하나의 스칼라 float |출력 점 크기 레지스터. 스칼라 x 성분만 유효하다. |\n|oFog.x |하나의 스칼라 float |안개 값. 보간되어서 안개 데이블로 전달돈다. 스칼라 x 성분만 유효하다. |\n\n<html> <span style="font-size: 12px;"> <b> 스위즐링(swizzling)과 마스킹 </b> </span> </html>\n\n''스위즐링 (vn, cn, rn이 원본 레지스터인 경우에만 해당) ''\n(p.065) 원본 레지스터를 부정함과 동시에 스위즐링하는 것이 가능하다.\n\nmov R1, -R2.xyyz\n\n''마스킹 (대상 레지스터 on, rn에 해당) ''\n(p.065) 마스킹이란 명령의 결과가 저장될 대상 레지스터의 성분들을 명시적으로 지정하는 것이다. 기본적으로는 명령의 결과가 대상 레지스터(쓰기 가능한 모든 레지스터, 즉 o*, r)의 모든 성분들에 적용된다. 그러나 다음과 같이 표기하면 R1의 x 성분만 영향을 받게 된다.\n\nmov R1.x, R2\n\n|!성분 수정자 |!설명 |\n|R.[x][y][z][w] |대상 마스크 |\n|R.xwzy (하나의 예이다) |원본 스위즐링 |\n|-R |원본 부정 |\n\n\n<html> <span style="font-size: 12px;"> <b> 정점 세이더 작성 지침 </b> </span> </html>\n(p.066) 다음은 정점 셰이더를 작성할 때 반드시 염두에 두어야 하는 중요한 제한 사항들이다.\n\n▣ 각 정점 셰이더는 출력 레지스터 oPos의 성분들을 적어도 하나는 반드시 써야 한다.\n▣ 한 정점 셰이더가 가질 수 있는 명령들의 최대 개수가 128이다.\n▣ 한 명령의 원본으로 사용할 수 있는 상수 레지스터는 최대 1개이다 (예를 들어 add r0, v1, v2는 잘못된 명령이다).\n▣ C에서와 같은 조건문은 없으나 r0 = (r1 > r2) ? r3 : r4 같은 구문은 sge 명령으로 흉내낼 수 있다.\n▣ 정점 셰이더로부터 나오는 모든 반복된 값(iterated value)들은 [0.. 1]로 한정된다.\n\n다음은 정점 셰이더를 최적화될 때 도움이 될 사항들이다.\n\n▣ 소프트웨어 정점 셰이더의 최적화에 대한 정보가 (Palister)에 나와 있다. 하드웨어에서 실행되는 정점 셰이더를 최적화하는 데에도 도움이 될 것이다.\n▣ 정점 셰이더 상수 데이터를 설정할 때, SetVertexShader() 호출 한 번으로 모든 데이터를 설정하도록 노력할 것.\n▣ mov 명령은 최대한 자제할 것.\n▣ 여러 연산들은 한번에 수행할 수 있도록 할 것.\n▣ 최적화를 생각하기 전에, 정점 셰이더의 크기를 최대한 줄일 것 (m4X4나 m3X3 같은 복합 명령들을 제거).\n▣ CPU/ GPU 사이의 부하 분산에 가장 중요한 원칙 하나: 정점마다 계산할 필요 없이 객체마다 계산해도 되는 것은 셰이더 밖으로 빼내서 상수 레지스터들에 넣을 것. 그러면 GPU의 부담을 줄일 수 있으며 CPU/ GPU 병렬성도 향상된다.\n\n\n<html> <span style="font-size: 12px;"> <b> 정점 세이더의 컴파일 </b> </span> </html>\n(p.067) OpenGL 구현들은 문자열을 파싱하는 반면, Direct3D는 바이트 코드를 사용하다. 따라서 Direct3D 개발자들은 정점 셰이더를 어셈블러로 어셈블해야 한다. 이느 개발 과정 도중 버그를 미리 발견하거나 로딩 시간을 줄이는 데 도움이 된다.\n\n필자가 아는 한, 정점 셰이더를 컴파일하는 방법은 세 가지이다.\n\n▣ 정점 셰이더를 개별적인 ASCII 파일 (예를 들면 test.vsh)로 작성하고, 정점 셰이더 어셈블러로 이진 파일 (예를 들면 test.vso)을 만든다. 그렇게 만든 이진 파일을 응용 프로그램의 시작 부분에서 읽어온다.\n이 방법의 경우 컴파일된 이진 파일만 배포할 수 있으므로 셰이더 소스를 숨길 수 있다.\n\n<Note> NVLink는 이미 컴파일된 셰이더 코드들을 실행 시점에서 하나로 연결할 수 있다.\n\n▣ 정점 셰이더 소스를 개별적인 ASCII 파일 또는 *.cpp 파일의 char 문자열로 작성하고 응용 프로그램의 시작 부분에서 D3DXAssembleShader*() 함수로 컴파일한다.\n▣ 정점 셰이더 소스를 하나의 효과 파일로 작성하고, 응용 프로그램 시작 부분에서 효과 파일을 연다. D3DXCreateEffectFromFile()로 그 파일을 로드하면서 정점 셰이더도 컴파일한다. 효과 파일 자체를 미리 컴파일해 둘 수도 있다. 효과 파일 함수들로 정점 셰이더를 다룰 수 있으므로 간편하다.\n\n<Note> 또 다른 방법은 d3dtypes.h에 정의되어 있는 옵코드(opcode)들을 이용해서 직접 정점 어셈블러/ 디셈블러를 작성하는 것이다.\n\n\n<html> <span style="font-size: 12px;"> <b> 정점 세이더의 설정 </b> </span> </html>\n(p.068) DrawPrimitive*()를 호출하기 전에 SerVertexShader()를 사용해서 특정 객체에 대한 정점 셰이더를 설정한다. 이 함수는 DrawPrimitive*() 호출들 사이에서 정점 셰이더를 동적으로 로드한다.\n{{{\n// 정점 셰이더를 설정한다.\nm_pd3dDevice->SerVertexShader(m_dwVertexShader);\n}}}\n이 함수의 매개변수에는 CreateVertexShader()로 만든 정점 셰이더 핸들을 넣어야 한다. 이 함수의 호출 부담은 SetTexture() 호출보다 작으므로 자주 사용해도 된다. SerVertexShader()로 설정한 정점 셰이더는 제출된 도형의 매 정점마다 실행된다. 예를 들어서 색인화된 삼각형 목록으로 구현된 정점 네 개짜리 사각형을 회전시키는 경우, NVIDIA Shader로 살펴보면 DrawPrimitive*() 함수가 호출되기 전에 정점 셰이더가 네 번 실행됨을 확인할 수 있다.\n=== \n=== <html> <! 1. 정점 셰이더의 기초 //=================================== > </html>\n+++!!![2. 정점 셰이더 프로그래밍]\n◇ 볼프강 F. 엥겔 (Wolfgang F. Engel)\n\n(p.072) RacorX 예제는 녹색이 균일하게 적용된 하나의 사각형을 표시한다. 이 예제는 DirectX 8.1 SDK가 제공하는 공통 파일 프레임웍의 사용법과 D3DXAssemble 함수로 정점 셰이더를 컴파일하는 방법을 보여준다.\n\nMicrosoft Visual Studio 6.0, 공통 파일 프레임웍 C:\s DXSDK8\s Samples\s Multimedia\s Common\s src 을 활용\n&nbsp; &nbsp; &nbsp; &nbsp; ⇒ isual Studio 2013 + Microsoft DirectX9 SDK (February 2010)으로 마이그레이션\n\nD3DXMATRIX m_matProj;를 사용하고 싶지만 header 파일을 찾을 수 없을 때\n\n프로젝트 속성 > C/C++ > 일반 > ''추가 포함 디렉터리 '' (in Visual Studio 2013)\n&nbsp; &nbsp; &nbsp; &nbsp; DirectX 9 SDK의 Include 폴더를 설정해 준다.\n\n{{wrappingClass{#pragma comment(lib, "d3d9.lib") <br> #include <d3dx9.h> <br> ... <br> D3DXMATRIX m_matProj; }}}\n+++!!!![# RacorX1]\n(p.072) RacorX 예제는 녹색이 균일하게 적용된 하나의 사각형을 표시한다. 이 예제는 DirectX 8.1 SDK가 제공하는 공통 파일 프레임웍의 사용법과 D3DXAssemble 함수로 정점 셰이더를 컴파일하는 방법을 보여준다.\n\nMicrosoft Visual Studio 6.0 \n공통 파일 프레임웍 C:\s DXSDK8\s Samples\s Multimedia\s Common\s src 을 활용\n\n2016년에 맞춰서 Visual Studio 2013으로 마이그레이션\n+ Microsoft DirectX9 SDK (February 2010)\n\nD3DXMATRIX m_matProj;를 사용하고 싶지만 'd3dx9.h': No such file or directory 가\n\n프로젝트 속성 > C/C++ > 일반 > 추가 포함 디렉터리 \n&nbsp; &nbsp; &nbsp; &nbsp; DirectX 9 SDK의 Include 폴더를 설정해 준다.\n\n#pragma comment(lib, "d3dx9.lib")\n#include <d3dx9.h>\n...\nD3DXMATRIX m_matProj;\n\n<html> <span style="font-size: 12px;"> <b> 요약 </b> </span> </html>\n(p.088) RacorX는 정점 셰이더를 실행하기 위한 기반구조와 간단한 정점 셰이더 하나로 구성되어 있다. 정점 셰이더의 소스는 RacorX.cpp 안에 내장되어 있으면 D3DXAssembleShader()로 컴파일된다... 오직 하나의 재질 색상을 사용한다.\n+++[ // RestoreDeviceObjects ( ... ); //================================ ]\n{{{\nin RacorX.cpp\n\n//-----------------------------------------------------------------------------\n// reg c4-7 = WorldViewProj matrix\n// reg c8 = constant color\n// reg v0 = input register\n//-----------------------------------------------------------------------------\nconst char BasicVertexShader[] =\n"vs_1_1 // 정점 쉐이더 버전 1.1 \sn"\s\n"dcl_position v0 // 위치 레지스터 \sn"\s\n"mov r0, v0 // 정점의 위치를 임시 레지스터에 복사 \sn"\s\n"m4x4 r1, v0, c4 // 회전 적용 \sn"\s\n"mov oPos, r1 // 출력 레지스터에 저장 \sn"\s\n"mov oD0, c8 // Diffuse color = c8 \sn";\n\ncf. Direct3D ShaderX 책의 내용을 수정\n\n//-----------------------------------------------------------------------------\nHRESULT CMyD3DApplication::RestoreDeviceObjects()\n{\n...\n\n HRESULT rc;\n\n rc = D3DXAssembleShader(BasicVertexShader, iLen, NULL, NULL, dwFlags, &pVS, &pErrors);\n...\n\n D3DXVECTOR4 fMaterial(0, 1, 0, 0);\n m_pd3dDevice->SetVertexShaderConstantF(8, (float*)&fMaterial, 1);\n...\n\n return S_OK;\n}\n}}}\n=== <html> <! RestoreDeviceObjects ( ... ); // ============ > </html> === <html> <! RacorX1 //=================================== > </html>\n+++!!!![# RacorX2]\n(p.088) RacorX2에서는 NVASM으로 미리 컴파일해 둔 이진 형식의 정점 셰이더를 사용한다. 그 외의 부분은 동일하다.\n\n<html> <font color= #BE8C3C > <b> ▷ RacorX201 </b> </font></html>\n / basic.vsh는 Vertex Shader를 저장한 text 파일\n / D3DXAssembleShader(); → D3DXAssembleShaderFromFile("basic.vsh", ... );\n{{{\n//-----------------------------------------------------------------------------\n// set custom FVF macro\n//-----------------------------------------------------------------------------\n#define D3DFVF_VERTEX (D3DFVF_XYZ)\n\nm_pd3dDevice->SetFVF(D3DFVF_VERTEX);\n\n//-----------------------------------------------------------------------------\n// SetFVF와 같은 코드\n//-----------------------------------------------------------------------------\nLPDIRECT3DVERTEXDECLARATION9 m_pVertexDeclaration;\n\nD3DVERTEXELEMENT9 decl[] =\n{\n { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },\n D3DDECL_END()\n};\nm_pd3dDevice->CreateVertexDeclaration( decl, &m_pVertexDeclaration );\n\nm_pd3dDevice->SetVertexDeclaration( m_pVertexDeclaration );\n}}}\n\n<html><font color= #BE8C3C > <b> ▷ RacorX202 </b></font> </html>\n\n(p.090) 정점 셰이더 자체는 ASCII 형식의 파일로, 이름은 basic.vsh이다. 이것을 컴파일하면 basic.vso라는 이름의 이진 목적 파일이 shaders 디렉토리에 만들어진다.\n\nNVASM은 Directx8 환경에서 작동하는 툴이기 때문에 DirectX9에서 변경된 내용을 error로 처리\n// the dcl_* stuff was new to DX9.\ndcl_position v0 // 위치 레지스터\n\n/ Debug 모드 ; "Shader\s\sbasic.vsh"을 읽어 와서 "Shader\s\sbasic.bin"을 생성 후 shader 실행\n/ Release 모드 ; "Shader\s\sbasic.bin"를 읽어 와서 shader 실행\n+++[ // HRESULT RestoreDeviceObjects(); //================================ ]\n{{{\n//-----------------------------------------------------------------------------\n// Name: RestoreDeviceObjects()\n// Desc: Restore device-memory objects and state after a device is created or\n// resized.\n//-----------------------------------------------------------------------------\nHRESULT CMyD3DApplication::RestoreDeviceObjects()\n{\n // Restore the device objects for the font\n m_pFont->RestoreDeviceObjects();\n \n // Set the projection matrix\n FLOAT fAspect = m_d3dsdBackBuffer.Width / (FLOAT)m_d3dsdBackBuffer.Height;\n D3DXMatrixPerspectiveFovLH(&m_matProj, D3DX_PI / 4, fAspect, 1.0f, 100.0f);\n\n // Set up the view matrix. \n D3DXMatrixLookAtLH(&m_matView, &D3DXVECTOR3(0.0f, 1.0f, -4.0f), //from\n &D3DXVECTOR3(0.0f, 0.0f, 0.0f), //at\n &D3DXVECTOR3(0.0f, 1.0f, 0.0f));//up\n\n // assemble and create the vertex shader\n DWORD dwFlags = 0;\n\n#if defined( _DEBUG ) || defined( DEBUG )\n dwFlags |= D3DXSHADER_DEBUG;\n#endif\n\n char szBuffer[128];\n ID3DXBuffer* pVS;\n\n HRESULT rc;\n\n#if defined( _DEBUG ) || defined( DEBUG )\n ID3DXBuffer* pErrors;\n // INT iLen = strlen(BasicVertexShader);\n // rc = D3DXAssembleShader(BasicVertexShader, iLen, NULL, NULL, dwFlags, &pVS, &pErrors);\n\n rc = D3DXAssembleShaderFromFile( "Shader\s\sbasic.vsh", NULL, NULL, dwFlags, &pVS, &pErrors );\n if (FAILED(rc))\n {\n OutputDebugString("Failed to assemble the vertex shader, errors:\sn");\n OutputDebugString((char*)pErrors->GetBufferPointer());\n OutputDebugString("\sn");\n }\n else\n {\n FILE* fp = NULL;\n fp = fopen( "Shader\s\sbasic.bin", "wb" );\n if (fp != NULL){\n fwrite(pVS->GetBufferPointer(), pVS->GetBufferSize(), 1, fp);\n fclose(fp);\n }\n }\n#else\n int handle = _open("Shader\s\sbasic.bin", O_RDONLY | O_BINARY, NULL);\n if (handle == -1){\n OutputDebugString("Read VertexShader Error.. \sn");\n return S_FALSE;\n }\n\n int nLength = _filelength(handle);\n D3DXCreateBuffer(nLength, &pVS);\n _read(handle, pVS->GetBufferPointer(), nLength);\n\n#endif\n\n\n // Create the vertex shader\n rc = m_pd3dDevice->CreateVertexShader((DWORD*)pVS->GetBufferPointer(), &m_pVertexShader);\n if (FAILED(rc))\n {\n OutputDebugString("Failed to create the vertex shader, errors:\sn");\n _stprintf(szBuffer, _T("Error: %s error description: %s\sn"), DXGetErrorString(rc), DXGetErrorDescription(rc));\n OutputDebugString(szBuffer);\n OutputDebugString("\sn");\n }\n\n SAFE_RELEASE(pVS);\n if (FAILED(rc))\n return rc;\n \n D3DXVECTOR4 fMaterial(0, 1, 0, 0);\n m_pd3dDevice->SetVertexShaderConstantF(8, (float*)&fMaterial, 1);\n \n // z-buffer enabled\n m_pd3dDevice->SetRenderState(D3DRS_ZENABLE, TRUE);\n\n // Turn off D3D lighting, since we are providing our own vertex shader lighting\n m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);\n\n // Turn off culling, so we see the front and back of the quad\n m_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);\n \n return S_OK;\n}\n}}}\n=== <html> <! RestoreDeviceObjects(); // ============ > </html>\n\n<html> <span style="font-size: 12px;"> <b> 요약 </b> </span> </html>\n(p.094) 이번 예제에서는 NVASM을 IDE에 통합하고 그것으로 정점 셰이더를 미리 컴파일하는 방법, 그리고 컴파일된 이진 정점 셰이더 파일을 로드하는 방법에 대해 살펴보았다.\n=== <html> <! RacorX2 //=================================== > </html>\n+++!!!![# RacorX3]\n(p.094) RacorX3는 RacorX2에 비해 정점 셰이더가 개선되었다. RacorX3의 정점 셰이더에는 정점 당 분산 반사(diffuse reflection) 모형이 추가되었다. 이것은 가장 간단한 조명 계산 모형들 중 하나로, 정점 법선과 빛 벡터의 내적에 기반해서 색을 산출한다.\n\nRacorX3은 (0.0, 0.0, 1.0)에 위치한 광원 하나와 녹색을 사용한다.\n\n<html> <span style="font-size: 12px;"> <b> 정점 셰이더 상수 레지스터들의 설정 </b> </span> </html>\n(p.095) 상수 레지스터 이름들이 헤더 파일 const.h에 들어있으며, 이 헤더 파일을 RacorX.cpp와 diffuse.vsh가 포함한다(#include). 이렇게 하면 코드의 일관성이 향상되며 불필요한 실수를 줄일 수 있다. const.h는 다음과 같다.\n{{{\n#define CLIP_MATRIX 0\n#define CLIP_MATRIX_1 1\n#define CLIP_MATRIX_2 2\n#define CLIP_MATRIX_3 3\n\n#define INVERSE_WORLD_MATRIX 4\n#define INVERSE_WORLD_MATRIX_1 5\n#define INVERSE_WORLD_MATRIX_2 6\n\n#define LIGHT_POSITION 11\n\n#define DIFFUSE_COLOR 14\n\n-. SetFVF( ... ); 을 사용하지 않고 SetVertexDeclaration( ...); 함수를 사용하도록 수정\n//-----------------------------------------------------------------------------\nHRESULT CMyD3DApplication::Render()\n{\n...\n\n // m_pd3dDevice->SetFVF(D3DFVF_VERTEX);\n m_pd3dDevice->SetVertexDeclaration( m_pVertexDeclaration );\n...\n\n return S_OK;\n}\n\n// LPDIRECT3DVERTEXDECLARATION9 m_pVertexDeclaration; 설정\n//-----------------------------------------------------------------------------\nHRESULT CMyD3DApplication::RestoreDeviceObjects()\n{\n...\n // Create the shader declaration.\n D3DVERTEXELEMENT9 decl[] =\n {\n { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },\n { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },\n D3DDECL_END()\n };\n \n m_pd3dDevice->CreateVertexDeclaration(decl, &m_pVertexDeclaration);\n...\n\n return S_OK;\n}\n}}}\n+++[ // diffuse.vsh //=================================================== ]\n{{{\n; per-vertex diffuse lighting (정점 당 분산 조명)\n\n#include "const.h"\n\nvs.1.1 // 정점 쉐이더 버전 1.1\n\n// the dcl_* stuff was new to DX9.\ndcl_position v0 // 위치 레지스터\ndcl_normal v3 // 정점 법선\n\n// 정점의 변환\nmov r0, v0 // 정점의 위치를 임시 레지스터에 복사\nm4x4 r1, v0, c[CLIP_MATRIX] // 회전 적용\nmov oPos, r1 // 출력 레지스터에 저장\n\n; transform normal\ndp3 r1.x, v3, c[INVERSE_WORLD_MATRIX]\ndp3 r1.y, v3, c[INVERSE_WORLD_MATRIX_1]\ndp3 r1.z, v3, c[INVERSE_WORLD_MATRIX_2]\n\n; renormalize it\ndp3 r1.w, r1, r1\nrsq r1.w, r1.w\nmul r1, r1, r1.w\n\n; N dot L\n; we need L vector towards the light, thus negate sign\ndp3 r0, r1, -c[LIGHT_POSITION]\n\nmul oD0, r0, c[DIFFUSE_COLOR] ; modulate against a diffuse color\n}}}\n=== <html> <! diffuse.vsh > </html>\n=== <html> <! RacorX3 //=================================== > </html>\n+++!!!![# RacorX4]\n(p.102) 베지어 패치를 이용한 곡면을 표시하며, 그 위에 텍스처도 입힌다. 조명 모형 역시 개선되었는데, 이번에는 분산과 반영(specular)이 결합된 조명 모형을 사용한다.\n\n그리고 RacorX4에서는 사용자가 직접 객체를 회전시키거나 이동시키는 기능을 제공하는데, 이를 위해서는 공통 파일 프레임웍이 제공하는 트랙볼(trackball) 클래스를 이용한다. 또한 <C> 키로 반영 색상을 선택하거나 마우스 휠로 확대, 축소하는 기능도 제공한다.\n\n<html> <span style="font-size: 12px;"> <b> 요약 </b> </span> </html>\n(p.112) RacorX4에서는 블린-퐁 반사 모형과 매우 비슷한 반영 반사 모형이 사용되었으며, lit 명령의 기능 및 정점 셰이더에서 텍스퍼를 입히는 기본적인 방법 등이 소개되었다.\n=== <html> <! RacorX4 //=================================== > </html>\n+++!!!![# RacorX5]\n(p.112) RacorX5는 RacorX4에 점광원을 추가한 것이다. 사용자는 <Home> 키와 <End> 키, 그리고 상하좌우 화살표 키들로 그 광원의 위치를 이동시킬 수 있다. 또한 이전 예제와 마찬가지로 <C> 키로 반영광의 색을 변경하는 것도 가능하다.\n\n<html> <span style="font-size: 12px;"> <b> 점광원 </b> </span> </html>\n점광원(point light source)은 장면 안에서 색과 위치만을 가지며 방향은 없다. 점광원의 광선들은 한 점에서 모든 방향으로 균등하게 방사된다. 감쇠 값을 명시적으로 지정하지 않고 한 광선의 세기는 광원과 표면의 거리에 상관없이 일정하다. 점광은 실생활의 전구(電球)를 흉내내는 데 유용하다.\n\n<html> <span style="font-size: 12px;"> <b> 요약 </b> </span> </html>\n(p.118) 이 예제는 Direct3D 고정 기능 파이프라인에서 쓰이는 것과 동일한 감쇠 모형을 가진 점광원의 구현 방법에 대해 보여준다. 이 점광원은 결합된 분산 및 반영 모형을 사용한다.\n=== <html> <! RacorX5 //=================================== > </html>\n=== <html> <! 2. 정점 셰이더 프로그래밍 > </html>\n++++!!![3. 픽셀 셰이더의 기초]\n◇ 볼프강 F. 엥겔 (Wolfgang F. Engel)\n+++!!!![# 픽셀 셰이더를 사용하는 이유 ]\n(p.121) 다음은 현재의 픽셀 셰이더 기술로 구현할 수 있는 몇 가지 효과들이다.\n\n▣ 단일 패스 픽셀 당 조명 (다음 절 참고)\n▣ 진정한 퐁 셰이딩 <Beaudoin/ Guardado>\n▣ 비등방 (anisotropic) 조명 <Isidoro/ Brennan>\n▣ 비실사 렌더링 : 카툰 셰이딩, 해치, 구치(gooch) 조명, 이미지 공간 기법들 <Card/ Mitchell>\n▣ 픽셀 당 프레널 항 <Brennan>\n▣ 입체 기반 효과 <Kraus> <Hart>\n▣ 고급 범프 매핑 (자기 그림자 범프 맵, 수평석 매핑이라고도 알려져 있다.)\n▣ 절차적 텍스처 <Zecha> 와 텍스처 섭동 <Isidoro/ Riguer>\n▣ 양방향 반사율 분산 함수 <Moravansky>\n\n...\n픽셀 셰이더에서 한 가지 골치 아픈 문제는, 픽셀 셰이더가 종종 정점 셰이더의 도움을 받아야 한다는 점이다. 예를 들어 픽셀 당 조명을 계산하기 위해서는 삼각형의 방향과 빛 벡터의 방향, 그리고 경우에 따라서는 시선 벡터의 방향을 알아야 한다.\n=== <html> <! 정점 셰이더 프로그래밍의 개요> </html>\n+++!!!![# 파이프라인 안에서 픽셀 셰이더의 역할 ]\n(p.127) 픽셀 셰이더는 하위 픽셀 셰이더 수준에는 관여하지 않는다. 픽셀 셰이더는 z에 따라 이미 다중 샘플링된 픽셀들과 색 값들, 그리고 텍스처 정보를 받는다.\n...\nDirectX3D 8.1은 5개의 픽셀 셰이더 표준들을 지원한다.\n...\nps.1.1, ps.1.2, ps.1.3은 기능에서만 차이를 보일 뿐 구문 구조 차원에서는 같은 선상에 놓여있다. 그러나 ps.1.4는 새롭고 좀더 유용한 접근 방식을 가진다.\n...\nps.1.4의 명령들은 RISC 방식에 가깝고 ps.1.1-ps.1.3의 명령들은 CISC 방식에 더 가깝다고 볼 수도 있을 것이다.\n\n<html> <span style="font-size: 14px; color:#BE8C3C "> <b> ▷ CISC (Complex Instruction Set Computer) </b> </span> </html>\nCISC는 명령어의 길이가 가변적으로 구성된 것입니다.\n한 명령어의 길이를 줄여 디코딩 속도를 높이고 최소크기의 메모리 구조를 가집니다.\n대표적으로 X86.\n하드웨어의 비중이 큼.\n\n''장점''\n컴파일러 작성이 쉽다.\n복잡한 명령도 마이크로코드(microcode)이므로 실행효율이 좋다.\n호환성이 좋다.\n\n''단점''\n하나의 명령어가 복잡하여 해석(디코딩)에 시간이 오래걸리며, 해석에 필요한 회로가 복잡하다.\n적은 수의 일부 명령어만 주로 쓰인다.\n명령어의 길이가 달라서 동시의 여러개의 명령처리는 어렵다.\n\n<html> <span style="font-size: 14px; color:#BE8C3C "> <b> ▷ RISC (Reduced Instruction Set Computer) </b> </span> </html>\nCPU에서 수행하는 동작 대부분이 몇개의 명령어 만으로 가능하다는 사실에 기반하여 구현함.\n고정된 길이의 명령어를 사용한다.\n적은수의 명령어로 명령어 집합을 구성하며 기존의 복잡한 명령은 보유한 명령어를 조합해서 사용한다.\n보통 많은 수의 범용 레지스터를 가진다.\n대표적으로 ARM.\n소프트웨어의 비중이 큼.\n\n''장점''\n각 명령어가 한 클럭에 실행되도록 고정되어, 파이프라인 성능에 최적화 됨\n고정된 명령어이기 때문에 해석(디코딩)속도가 빠르며, 여러개의 명령어를 처리할 수 있다.\n\n''단점''\n컴파일러의 최적화 과정이 복잡해진다.\n명령길이가 고정되어 있기 때문에 코드효율이 낮다.\n\n(p.127) Direct3D 파이프라인 안에서의 픽셀 셰이더의 임무들을 요약하자면:\n\n▣ 픽셀 셰이더에는 레스터화된 픽셀들이 입력된다. 대부분의 경우 그러한 픽셀들은 z 차폐 제외, 다중 샘플링, 그리고 구로 셰이딩이 이미 적용된 것들이다.\n▣ 픽셀 셰이더에는 보간된 텍스처 좌표와 보간된 분산 및 반영색들이 입력된다.\n▣ 픽셀 셰이더는 크게 네 가지 버전들로 나뉜다. 구문 구조적 관점에서 볼 때 ps.1.1-ps.1.3 표준들은 CISC와 비슷한 접근 방식인 반면 ps.1.4 표준 접근 방식은 RISC와 비슷하다. RISC 접근 방식은 최신의 ps.2.0에서도 쓰인다.\n▣ 픽셀 셰이더는 셰이딩된 픽셀들을 안개 단계로 넘긴다.\n▣ 픽셀 셰이더는 이후의 Direct3D 단계들을 지원 또는 주도할 수 있다.\n=== <html> <! 파이프라인 안에서 픽셀 셰이더의 역할 > </html>\n<html> <span style="font-size: 12px; color:#006699"> <b> # 픽셀 셰이더 도구들 </span> </html>\n-. Microsoft Pixel Shader Assembler\n&nbsp; &nbsp; &nbsp; &nbsp; Executable: (SDK root)\sbin\sDXutils\n\n-. MFC Pixel shader\n&nbsp; &nbsp; &nbsp; &nbsp; Source: (SDK root)\sSamples\sMultimedia\sDirect3D\sMFCPixelShader\n&nbsp; &nbsp; &nbsp; &nbsp; Executable: (SDK root)\sSamples\sMultimedia\sDirect3D\sBin\n\n-. ATI ShaderLab (cf. 찾지 못함)\n(p.133) MFC 픽셀 셰이더 도구보다 나은 점이라면, 상수 레지스터들과 텍스처를 직접 저장할 수 있다는 것이다.\n+++!!!![# 픽셀 셰이더 아키텍처 ]\n(p.133) 픽셀 셰이더 산술 논리 단위 (ALU, arithmetic logic unit)\n\n다음은 <그림7>에 나온 여러 레지스터들을 정리한 표이다.\n\n| !종류 | !이름 | !ps.1.1 | !ps.1.2 | !ps.1.3 | !ps.1.4 | !읽기/ 쓰기 여부 |\n|상수 레지스터 | cn |8 |8 |8 |8 |RO |\n|텍스처 레지스터 | tn |4 |4 |4 |6 |RW / ps.1.4: RO |\n|임시 레지스터 | rn |2 |2 |2 |6 |RW |\n|색 레지스터 | vn |2 |2 |2 |페이즈 2에서 2개 |RO |\n\n<html> <span style="font-size: 12px;"> <b> 색 레지스터들(ps.1.1-ps.2.4: v0+v1) </b> </span> </html>\n(p.136) 색 레지스터들은 정점 당 색 값들을 담으며, 값의 범위는 0에서 1(포화됨)이다. 흔히 v0이 정점 분산색을 담고 v1이 반영색을 담는다.\n\n픽셀 셰이더의 입장에서 이 색 레지스터들은 읽기 전용이다. ps.1.4의 경우 색 레지스터들은 두번째 페이즈(이것이 기본 페이즈이다)에서만 사용할 수 있다. 그 외의 모든 레지스터들은 ps.1.4의 두 페이즈들 모두에서 사용 가능하다.\n\n<html> <span style="font-size: 12px;"> <b> 범위 </b> </span> </html>\n(p.137) 다중 텍스처링 단위 대신 픽셀 셰이더를 사용하는 한 가지 이유는 픽셀 셰이더 ALU가 사용하는 높은 정밀도 때문이다.\n\n| !레지스터 이름 | !범위 | !버전 |\n|cn |-1에서 +1 |모든 버전 |\n|rn |-D3DCAPS8.MaxPixelShaderValue에서 D3DCAPS8.MaxPixelShaderValue |모든 버전 |\n|tn |-D3DCAPS8.MaxPixelShaderValue에서 D3DCAPS8.MaxPixelShaderValue |ps.1.1-ps.1.3 |\n| |D3DCAPS8.MaxTexturePepeat에서 D3DCAPS8.MaxTexturePepeat |ps.1.4 |\n| vn |0에서 +1 |모든 버전 |\n...\n\n텍스처를 색 값들을 담는 용도로 사용할 때 ps.1.4에서 훨씬 더 높은 색 정밀도를 얻을 수 있다.\n=== <html> <! 픽셀 셰이더 아키텍처 > </html>\n+++!!!![# 픽셀 셰이더 프로그래밍의 개요 ]\n(p.138) 픽셀 셰이딩은 하나의 렌더링 패스 도중 픽셀별로 또는 객체별로 일어난다.\n\n그럼 픽셀 셰이더를 사용하는 응용 프로그램을 만드는 과정을 살펴보자. 다음은 픽셀 셰이더 응용 프로그램을 만드는 데 필요한 단계들을 수행 순서대로 나열한 것이다. \n\n▣ 픽셀 셰이더 지원 여부를 확인한다.\n▣ 텍스터 연산 플래그들(D3DTSS_*)을 설정한다.\n▣ SetTexture()로 텍스처를 설정한다.\n▣ SetPixelShaderConstant()나 def로 상수들을 정의한다.\n▣ 픽셀 셰이더를 작성한다.\n&nbsp; &nbsp; &nbsp; &nbsp; ▣ 텍스처 어드레스 명령들\n&nbsp; &nbsp; &nbsp; &nbsp; ▣ 산술 명령들\n▣ 픽셀 셰이더를 어셈블한다.\n▣ 픽셀 셰이더를 생성한다.\n▣ 픽셀 셰이더를 설정한다.\n▣ 픽셀 셰이더 자원들을 해제한다.\n\n<html> <span style="font-size: 12px;"> <b> 픽셀 셰이더 지원 여부 확인 </b> </span> </html>\n{{{\n// 픽셀 셰이더 버전 1.1의 지원 여부를 확인한다.\nif ( pCaps->PixelShaderVersion < D3DPS_VERSION(1,1) ) \n return E_FALL;\n}}}\n(p.139) DirectX 8.1 SDK의 공통 파일 프레임웍을 사용하는 경우라면 프레임웍이 채워준다. 그래픽 카드가 해당 픽셀 셰이더 버전을 지원하지 않으며 다중 텍스처 단위로 전환하는 대체 메카니즘이 없다면 레퍼런스 래스터라이저(REF)가 쓰이게 된다. 이것이 공통 파일 프레임웍의 기본적인 행동 방식이나, REF는 매우 느리기 때문에 게임에서 실제로 사용하는 것은 비현실적이다.\n\n<html> <span style="font-size: 12px;"> <b> 픽셀 셰이더 명령들 </b> </span> </html>\n(p.141) 정점 셰이더에서는 프로그래머가 명령들의 순서를 자유롭게 선택할 수 있다. 반면 __픽셀 셰이더에서는 명령들의 순서에 제한__이 있다. 그리고 명령들의 구체적인 순서는 __ps.1.1-ps.1.3과 ps.1.4에서 서로 다르다.__\n\n<html> <span style="font-size: 12px;"> <b> ps.1.1-ps.1.3 텍스처 어드레싱 </b> </span> </html>\n(p.145) 텍스처 어드레스 명령은 그 결과들을 내부적으로 사용해서 텍스처를 샘플링한다. 픽셀 셰이더에서 텍스처 좌표들에 접근할 수 있느 유일한 방법은 texcoord 명령뿐이다. 이 명령은 텍스처 좌표 데이터를 색 값으로 변환하며, 변환된 색 값은 다른 텍스처 어드레싱 명령들이나 산술 명령들에서 사용할 수 있다. 이 색 값들을 텍스처를 샘플링하기 위한 텍스처 좌표들로써 사용하기 위해서는 texreg2* 명령들이 필요하다.\n\n(p.155) 텍스처 좌표들을 수정한 후 텍스처를 추출하는 텍스처 어드레스 명령들은 다음과 같다.\n\n▣ texbem/ texbeml\n▣ texdp3tex\n▣ texm3x2tex\n▣ texm3x3spec\n▣ texm3x3tex\n▣ texm3x3vspec\n\n다음의 명령들은 색 값을 텍스처 좌표로 사용해서 텍스처를 샘플링한다. 그 색 값들 중 하나가 어떠한 명령에 의해 변하면, 그 샘플링은 의존적 읽기가 된다.\n\n▣ texreg2ar\n▣ texreg2gb\n▣ texreg2rgb\n\n그래서 이 명령들을 범용적인 의존적 텍스처 읽기 명령들이라고 부른다.\n\n앞에서 이야기했듯이, 하나의 ps.1.1-ps.1.3 픽셀 셰이더는 최대 8개의 산술 명령들과 4개의 텍스처 어드레스 명령들을 가질 수 있다. 모든 텍스처 어드레스 명령들은 하나의 명령 슬롯을 차지한다. 단 texbeml 의 경우에는 하나의 텍스처 어드레스 슬롯과 하나의 산술 슬롯을 차지한다.\n\n<html> <span style="font-size: 12px;"> <b> ps.1.4 텍스처 어드레스 명령 </b> </span> </html>\n(p.156) ps.1.4 에서 텍셀이나 텍스처 좌표들을 사용하려면 먼저 texld 나 texcrd 로 로드해야 한다. 이 명령들은 텍셀 또는 텍스처 좌표들에 접근할 수 있는 유일한 수단이다. texcrd 로 텍스처 좌표들을 색 데이토로 변환한 후에는 모든 산술 명령들로 텍스처 좌표(색 데이터)를 수정할 수 있다. 이 덕분에 ps.1.4 에서는 텍스처 어드레싱이 좀더 직관적이다.\n\n(p.158) ps.1.4 에는 단 네 개의 텍스처 어드레스 명령들만 존재한다.(texcrd, texdepth, texkill, texld) 그러나, 앞에서 이야기했듯이 텍스처 어드레스 정보를 산술 명령들로 조작할 수 있으므로 대단히 다양한 방식으로 텍스처 어드레싱 작업들을 수행할 수 있다.\n\n(p.159) ps.1.4 에서는 산술 명령들로도 텍스처 데이터를 조작할 수 있기 때문에 좀더 유연하다고 할 수 있다.\n\n(p.171) 모든 산술 연산들은 임시 레지스터 rn들을 사용할 수 있다. rn 레지스터들은 초기에는 설정되지 않은 상태이며, 뭔가가 쓰여지지 않는 한 원본으로 사용될 수 없다. 이러한 제한은 rn 레지스터의 각 성분별로 적용된다. ps.1.4 에서 tn 레지스터들은 산술 명령에 쓰일 수 없으며, 오직 텍스처 어드레싱 명령들에만 쓰일 수 있다(단 texdepth는 예외).\n\n첫번째 페이즈의 산술 연산 명령들에서 원본 레지스터로 사용할 수 있는 것은 rn 과 cn 이다. 두번째 페이즈의 산술 연산 명령들에서는 rn, vn, cn 을 원본 레지스터로 사용할 수 있다.\n\nps.1.1-ps.1.3 과 ps.1.4 의 차이점은 그리 많지 않다. ps.1.4 에서만 가능한 명령은 bem 이다. 이 명령은 texbem 과 texbeml 기능을 산술 명령으로 대체한 것이라 할 수 있다. 또한 cmp 와 cnd 명령은 ps.1.4 에서 좀더 강력하다. ps.1.4 에서는 산술 명령들을 모든 텍스처 어드레싱 및 혼합 작업에 사용할 수 있으므로 산술 명령들의 활용 범위가 ps.1.1-ps.1.3 보다 ps.1.4 에서 훨씬 더 크다.\n\n정점 셰이더와 마찬가지로, 픽셀 셰이더의 산술 명령들에 조건 분기 명령은 없다. 그러나 cmp 나 cnd 로 조건 분기의 기능성을 제한적이나마 흉내내는 것은 가능하다.\n\n모든 rn.a 채널들은 첫번째 페이즈의 끝에서 설정되지 않은 상태(unset)가 된다. 따라서 phase 명령으로 페이즈가 바뀌면 색 데이터의 네번째 성분은 손실된다. 이 문제는 명령들의 순서를 바꾸는 것으로 어느 정도 해결할 수 있다. \n\n예를 들어, 다음 예제에서는 페이즈가 바뀌면서 r3 의 알파 값이 사라진다.\nps.1.4\n...\ntexld r3, t3\nphase\n...\nmul r0, r2, r3\n\n명령들을 다음과 같이 배치하면 알파 값이 사라지지 않는다.\nps.1.4\n...\nphase\ntexld r3, t3\n...\nmul r0, r2, r3\n\nphase 명령이 없으면 셰이더 전체는 두번째 페이즈 안에 있는 것으로 간주되어서 평가, 수행된다.\n\n하나의 셰이더는 반드시 r0 의 모든 성분들에 값을 기록해야 한다.\n\n<html> <span style="font-size: 12px;"> <b> 읽기 포트 한계 </b> </span> </html>\n(p.172) 읽기 포드 한계 (read port limit) 란 동일한 종류의 레지스터들이 하나의 명령에서 원본 레지스터로 최대 몇 개나 쓰일 수 있는지를 의미한다. 각 버전의 읽기 포트 한계는 다음과 같다.\n\n| !레지스터 이름 |>|>|>|!버전 |\n|~|''ps.1.1'' |''ps.1.2'' |''ps.1.3'' |''ps.1.4'' |\n|cn |2 |2 |2 |2 |\n|rn |2 |2 |2 |3 |\n|tn |2 |3 |3 |1 |\n|vn |2 |2 |2 |2 |\n\n(p.173) ps.1.4 에서 한 명령에 세 개의 임시 레지스터들을 사용하는 예가 이전의 cmp, cnd 명령 항목에 나와 있다. __ps.1.4 에서 tn 레지스터들은 산술 명령에 쓰일 수 없으며 텍스처 어드레스 명령들은 tn 레지스터를 원본으로 하나만 사용할 수 있다.__ 따라서 ps.1.4 에서는 tn 레지스터들의 읽기 포트 한계를 넘기는 일이 원천 봉쇄된다.\n\n쓰기 포트 한계 같은 것은 없는데, 왜냐하면 모든 명령들은 오직 하나의 대상 레지스터만 가지기 때문이다.\n\n<html> <span style="font-size: 12px;"> <b> 스위즐링/ 선택자 </b> </span> </html>\n(p.174) 픽셀 셰이더의 스위즐링은 정점 셰이더의 것보다 제한적이다. 픽셀 셰이더에서는 원본 레지스터의 채널 하나를 모든 채널들에 복제하는 것만 지원된다. 이러한 스위즐링은 소위 '원본 레지스터 선택자'라는 것을 통해서 이루어진다.\n\n| !원본 레지스터 선택자 |!구분 |!ps.1.1 |!ps.1.2 |!ps.1.3 |!ps.1.4 |\n|적색 복사 |source.r | | | |X |\n|녹색 복사 |source.g | | | |X |\n|청색 복사 |source.b |X |X |X |X |\n|알파 복사 |source.a |X |X |X |X |\n\n.r 과 .g 선택자들은 ps.1.4 만 지원한다. 다음은 원본 레지스터의 적색 채널을 모든 채널들로 복제하는 예이다.\n\nmov r1, r1.r; r1.rgba = r1.r\n\n<html> <span style="font-size: 12px;"> <b> 원본 레지스터 수정자들 </b> </span> </html>\n(p.177) 원본 레지스터 수정자들은 명령에 쓰일 레지스터 데이터의 범위를 조정하거나 값을 비례시키는 데 유리하다.\n\n| !수정자 |!구문 |!ps.1.1 |!ps.1.2 |!ps.1.3 |!ps.1.4 |\n|바이어스 |r0_bias |X |X |X |X |\n|역수 |1-r0 |X |X |X |X |\n|부정 |-r0 |X |X |X |X |\n|비례 x2 |r0_x2 | | | |X |\n|부호 있는 비례 |r0_bx2 |X |X |X |X |\n\n(p.178) 바이어스(bias) 수정자는 모든 성분들에서 0.5를 뺀다. 이는 DX6/ 7 다중 텍스처링 유닛의 D3DTOP_ADDSIGEND 에 해당한다. 이 수정자는 0에서 1의 범위의 값을 -0.5에서 0.5의 범위로 변경한다.\n\n<html> <span style="font-size: 12px;"> <b> 명령 수정자들 </b> </span> </html>\n(p.180) 명령 수정자는 명령 이름 다음에 밑줄로 연결된다. 명령 수정자들은 명령의 출력을 변경하는 역할을 한다. 다음 표에서 보듯이, 명령 수정자들을 통해서 결과에 2의 배수를 곱하거나 결과를 【0..1】로 한정할 수 있다.\n\n| !명령 수정자 |!설명 |!구문 |!ps.1.1-ps.1.3 |!ps.1.4 |\n|_x2 |2를 곱한다. |명령_x2 |X |X |\n|_x4 |4를 곱한다. |명령_x4 |X |X |\n|_x8 |8을 곱한다. |명령_x8 | |X |\n|_d2 |2로 나눈다. |명령_d2 |X |X |\n|_d4 |4로 나눈다. |명령_d4 | |X |\n|_d8 |8로 나눈다. |명령_d8 | |X |\n|_sat |【0..1】로 한정 |명령_sat |X |X |\n\n(p.181) 곱하기 수정자들은 값의 비례에 유용하다. 단 값이 곱해지면 결과의 정밀도가 감소하게 됨을 주의하기 바란다. \n\n<html> <span style="font-size: 12px;"> <b> 명령 짝짓기 </b> </span> </html>\n(p.185) 픽셀 셰이더 ALU 에는 두 개의 파이프라인이 있는데, 하나는 색 데이터를 위한 것이고 또 하나는 알파 데이터를 위한 것이다. 이 파이프라인들은 병렬적으로 색 데이터를 기록하는 명령과 알파 데이터를 기록하는 명령이 서로 짝을 지어 수행되도록 할 수 있으며, 그렇게 하면 채움 비율을 줄이는 데 도움이 된다. 이러한 짝짓기는 __산술 명령들에만 적용할 수 있다.__ 단 예외는 dp4로, dp4는 짝짓기가 안 된다.\n짝짓기(pairing) 또는 병렬 수행(co-issuing)은 두 명령들 중 두번째 명령 앞에 더하기(+) 기호를 붙여서 지정한다.\n...\n\nps.1.1-ps.1.3 에서는 짝짓기를 할 때 항상 .rgb 와 .a 쓰기 마스크를 지정해야 된다. ps.1.4 에서는 .r, .g, .b 쓰기 마스크들이 쓰인 레지스터와 .a 마스크가 쓰인 대상 레지스터를 함께 짝지을 수 있다.\n...\n\n병렬 수행된 명령들은 하나의 개체로 간주되며, 그래서 두 명령 모두 완결되어야 그 결과가 사용 가능해진다.\n...\n\n셰이더 유효성 점검 과정에서 그런 논리적인 버그는 검출되지 않으며, 따라서 예상과는 다른 결과가 나오게 된다. \n\n(p.186) 그리고 병렬 수행되는 두 명령들이 서로 다른 종류의 레지스터들을 최대 세 개까지만 사용할 수 있다는 점도 기억해 두기 바란다.\n\n<html> <span style="font-size: 12px;"> <b> 요약 </b> </span> </html>\n(p.188) 이번 장에서는 픽셀 셰이더에 대한 기본적인 내용을 살펴보았다. 이번 장에서 이야기한 것들을 요약하자면 :\n\n▣ D3DCAPS 구조체의 PixelShaderVersion 비트로 픽셀 셰이더에 대한 하드웨어 지원 여부를 점검한다.\n▣ 다중 텍스처링 단위에서와 마찬가지로, 모든 텍스처들을 SetTexture() 로 설정한다.\n▣ 픽셀 셰이더에서 제공할 상수 값들을 설정한다. 응용 프로그램 안에서 SetPixelShaderConstant()로 설정할 수 있고, 픽셀 셰이더의 def 명령으로 설정할 수도 있다.\n▣ 픽셀 셰이더에는 텍스처 어드레스 명령들과 산술 명령들이 있다. ps.1.1-ps.1.3 에서는 텍스처 어드레스 명령들이 텍스처 데이터를 로드하고 변경할 수 있다. ps.1.4 의 경우에는 텍스처 데이터를 로드하는 것만 가능하다. ps.1.4 와 ps.1.1-ps.1.3 에서 텍스처 데이터를 변경할 때에는 산술 명령들을 사용한다.\n▣ 픽셀 셰이더의 소스를 작성한 후에는 컴파일해야 한다.\n▣ 픽셀 셰이더의 핸들을 얻으려면 CreatePixelShade() 로 픽셀 셰이더를 생성해야 한다.\n▣ 픽셀 셰이더를 사용하려면 픽셀 셰이더를 SetPixelShader() 로 설정해야 한다.\n▣ 픽셀 셰이더를 사용하고 난 후에는 픽셀 셰이더가 가지고 있던 자원을 DeletePixelShader() 로 해제해야 한다.\n=== <html> <!픽셀 셰이더 프로그래밍의 개요 > </html>\n=== <html> <! 3. 픽셀 셰이더의 기초 > </html>\n+++!!![4. 픽셀 셰이더 프로그래밍]\n◇ 볼프강 F. 엥겔 (Wolfgang F. Engel)\n+++!!!![# RacorX6 ]\n<html> <span style="font-size: 12px;"> <b> 픽셀 당 조명 </b> </span> </html>\n''L을 텍스처 공간으로 변환''\n(p.202) U와 W 벡터들을 구한 후에는 다음과 같은 정점 셰이더를 통해서 L을 U와 W가 구성하는 텍스처 공간으로 변환한다.\n\ndcl_position v0 ; Position\ndcl_normal v3 ; Normal\ndcl_texcoord v7 ; Texture\ndcl_tangent v8 ; Tangent\n\nm3x3 r5, v8, c0 ; generate tangent U\nm3x3 r7, v3, c0 ; generate normal W\n\n; Cross product\n; generate binormal V\nmov r5.w, v8.w ; 초기화 (주의 w의 초기 값이 없는 경우, 다음 계산에서 에러 발생)\nmov r7.w, v3.w ; 초기화\nmul r0, r5.yzxw, r7.zxyw;\nmad r6, r5.yzx, -r7.zxy,-r0;\n\n;transform the light vector with U, V, W\ndp3 r8.x, r5, -c12\ndp3 r8.y, r6, -c12\ndp3 r8.z, r7, -c12\n\n; 색상 출력\nmad oD0.xyz, r8.xyz, c33, c33 ; multiply a half to bias, then add half\n\n+++[ // X 파일 로딩... //================================ ]\n{{{\n// Create the shader declaration.\nD3DVERTEXELEMENT9 decl[] =\n{\n { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, // position\n { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 }, // Normal\n { 0, 24, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0 }, // tangent\n { 0, 36, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, // texture\n D3DDECL_END()\n};\n\n\nHRESULT CMyD3DApplication::LoadXFile(TCHAR* name)\n{\n HRESULT hr;\n LPD3DXMESH pMeshSysMem = NULL;\n\n if (FAILED(D3DXLoadMeshFromX(name, D3DXMESH_SYSTEMMEM, m_pd3dDevice, \n NULL, NULL, NULL, NULL, &pMeshSysMem)))\n return E_FAIL\n ;\n ID3DXMesh * temp;\n\n hr = pMeshSysMem->CloneMesh(D3DXMESH_MANAGED, decl, m_pd3dDevice, &temp);\n pMeshSysMem->Release();\n pMeshSysMem = temp;\n\n m_iNumTriangles = pMeshSysMem->GetNumFaces();\n m_iNumVertices = pMeshSysMem->GetNumVertices();\n\n DWORD *adjacency = NULL;\n adjacency = new DWORD[m_iNumTriangles * 3];\n\n pMeshSysMem->GenerateAdjacency(ADJACENCY_EPSILON, adjacency);\n\n // compute U (tangent) - Vertex 정의가 없는 경우, 실패한다. \n hr = D3DXComputeTangent(pMeshSysMem, 0, 0, D3DX_COMP_TANGENT_NONE, TRUE, adjacency);\n if (FAILED(hr))\n return E_FAIL;\n\n // compute the normals - Vertex 정의가 없는 경우, 실패한다.\n hr = D3DXComputeNormals(pMeshSysMem, adjacency);\n if (FAILED(hr))\n return E_FAIL;\n\n delete[] adjacency;\n\n hr = pMeshSysMem->GetIndexBuffer(&m_pIndexBuffer);\n if (FAILED(hr))\n return E_FAIL;\n hr = pMeshSysMem->GetVertexBuffer(&m_pVertices);\n if (FAILED(hr))\n return E_FAIL;\n // cleanup\n SAFE_RELEASE(pMeshSysMem);\n\n return S_OK;\n}\n}}}\n===\n\n\n<html> <span style="font-size: 12px;"> <b> 셰이더와 무관한 코드 </b> </span> </html>\n(p.208) 이 예제는 가상 트랙볼 기능을 제공하는데, 그 부분의 코드는 몇 년 전 SGI가 오픈 소스로 공개한 것을 가져다 쓴 것이다. trackball.h에는 SGITrackball.cpp에 담긴 SGI 코드를 쉽게 사용할 수 있도록 하는 인터페이스가 정의되어 있다.\n\n<html> <span style="font-size: 12px;"> <b> 요약 </b> </span> </html>\n(p.209) RacorX6은 정점 셰이더의 결과를 픽셀 셰이더가 받아서 사용하는 방법을 보여준다. 픽셀 셰이더에 쓰이는 모든 데이터는 정점 셰이더에 의해 계산, 제공된다. 텍스처 공간 좌표계를 구축하기 위한 U와 W 벡터는 *.x 파일을 로드한 후 D3DXComputeNormals()와 D3DXComputeTangent() 함수로 단 한 번만 계산해 둔다. \n대역폭을 절약하기 위해, 종법선에 해당하는 V 벡터는 미리 계산해 두지 않고 정점 셰이더에서 매 정점마다 계산한다. U, V, W로 구성된 텍스처 공간 좌표계는 빅 벡터 L을 텍스처 공간으로 변환하는 데 쓰인다. 변환된 L은 색 출력 레지스터 oD0을 통해서 픽셀 셰이더에 전달된다. 이 예제에서 텍스처 공간 좌표계는 픽셀 당 조명의 기조로 쓰였으며, 이는 이후의 예제들에서도 마찬가지이다.\n=== <html> <! # RacorX6 > </html>\n+++!!!![# RacorX7 ]\n(p.209) RacorX6에 비해 RacorX7에서의 주된 개선점은 분산 반사 모형 대신 반영(specularity) 반사 모형을 사용하는 것이다.\ncf.하이라이트와 같은 강한 반사는 입사한 빛이 반사되는 각도에서 보았을 때 제일 강하게 반사된다.\n이말은 (시선이 물체에서 반사되었을 때, 그 방향이 빛의 입사방향에 가까울수록 밝게 보인다.)고 바꾸어 말 할 수 있다\n\nRacorX7은 RacorX6과 동일한 텍스처 및 텍스처 단계 상태들을 사용한다. 상수는 하나 더 추가되었다.\n(관찰자 방향을 의미하는 벡터 추가)\n\n<html> <span style="font-size: 12px;"> <b> 픽셀 셰이더 명령들 </b> </span> </html>\n(p.210) 반영 반사를 서술하려면 적어도 광원의 위치 L, 관찰자의 방향 V, 표면 법선의 방향 N이 필요하다. 그리고 반사의 방향을 의미하는 벡터 R 도 있으면 편하다. 원래의 퐁 공식에서는 R 벡터의 계산에 비용이 많이 드나, 짐 블린(Jim Blinn)이 소개한 중간 벡터 H (반각 벡터라고도 한다)를 이용하면 계산을 줄일 수 있다.\n\n+++[ // 07_v_SpecDot3Pix.vsh //================================ ]\n{{{\n; Constant registers \n; c0-c3 - world space transposed\n; c8-c11 - world * view * proj\n; c12 - Light Direction (In World Space)\n; c24 - camera direction\n; c33 - four constants with 0.5f\n\nvs.1.1 // 정점 쉐이더 버전 1.1\n\n; Input registers\n; the dcl_* stuff was new to DX9.\ndcl_position v0 ; Position\ndcl_normal v3 ; Normal\ndcl_texcoord v7 ; Texture\ndcl_tangent v8 ; Tangent\n\n; position in clip space\nm4x4 oPos, v0, c8\n\nm3x3 r3, v8, c0 ; generate tangent U\nm3x3 r5, v3, c0 ; generate normal W\n\n; Cross product\n; generate binormal V\nmov r3.w, v8.w ; 초기화\nmov r5.w, v3.w ; 초기화\nmul r0, -r3.zxyw, r5.yzxw;\nmad r4, -r3.yzxw, r5.zxyw,-r0;\n\n; position in world space\nm4x4 r2, v0, c0 \n\n; get a vector toward the camera/eye V\nadd r2, -r2, c24\n\n; normalize eye vector V\ndp3 r11.x, r2.xyz, r2.xyz \nrsq r11.xyz, r11.x \nmul r2.xyz, r2.xyz, r11.xyz \n\nadd r2.xyz, r2.xyz, -c12 ; get half angle\n\n; normalize half angle\ndp3 r11.x, r2.xyz, r2.xyz \nrsq r11.xyz, r11.x \nmul r2.xyz, r2.xyz, r11.xyz \n\n; transform the half angle vector into texture space\ndp3 r8.x,r3,r2\ndp3 r8.y,r4,r2\ndp3 r8.z,r5,r2\n\n; half vector -> oD1\nmad oD1.xyz, r8.xyz, c33, c33 ; multiply by a half to bias, then add half\n \nmov oT0.xy, v7.xy\nmov oT1.xy, v7.xy\n}}}\n===\n\n+++[ // 07_p_SpecDot3(/314).psh //================================ ]\n{{{\nps.1.1\ntex t0 ; color map\ntex t1 ; normal map\ndp3 r0,t1_bx2,v1_bx2; ; dot(normal,half)\n\nmul r1,r0,r0; ; raise it to 32nd power\nmul r0,r1,r1; \nmul r1,r0,r0;\nmul r0,r1,r1;\n\n; assemble final color\nmul r0,t0,r0\n\n//-----------------------------------------------------------------------------\nps.1.4\ntexld r0, t0 ; color map\ntexld r1, t1 ; normal map\ndp3 r2, r1_bx2, v1_bx2 ; dot(normal, half)\n\nmul r3,r2,r2 ; raise it to 32nd power\nmul r2,r3,r3 \nmul r3,r2,r2\nmul r2,r3,r3\n\nmul r0, r0, r2 \n}}}\n===\n\n(p.213) 반영 지수를 픽셀 셰이더 안에서 mul 명령들로 계산해 조명에 적용시키년 눈이 띄는 벤딩(banding) 결함이 생길 수 있다.\n\n<html> <span style="font-size: 12px;"> <b> 요약 </b> </span> </html>\nRacorX7은 반영 반사 모형을 구현하는 한 가지 방법을 제시한다. 이 예제의 단점은 반영 지수 값들의 정밀도가 낮다는 점이다. 다음의 RacorX8에서는 좀더 높은 정밀도의 반영 반사를 얻는 한 가지 방법이 소개된다.\n=== <html> <! # RacorX7 > </html>\n+++!!!![# RacorX8 ]\n(p.214) RacorX7과 달리 RacorX8은 반영 지수들을 픽셀 셰이더에서 직접 계산하지 않고 미리 만들어진 참조 테이블(반영 맵)로부터 읽어온다. 이러한 참조 테이\n\n블 기법 덕분에 밴딩이 줄어든다. 이는 반복적인 mul 명령들로 얻는 결과보다 더 높은 정빌도의 값들을 참조 테이블로부터 가져올 수 있기 때문이다.\n\n이 방법의 단점은 반영 지수들을 담은 참조 테이블(반영 맵) 때문에 텍스터 단계가 하나 더 필요하다는 것이다.\n\n<html> <span style="font-size: 12px;"> <b> 텍스처 연산 플래그들의 설정 (D3DSAMP_* 플래그들) </b> </span> </html>\n(p.214) RacorX8 역시 RestoreDeviceObjects()에서 텍스처 연산 플래그들을 설정한다. 이전 예제에 비해 반영 지수 값들을 담은 텍스처 맵(반영 맵)을 위한 텍스처 단계 상태 설정들이 두 개 추가되었다.\n{{{\n// additionally for table specular \nm_pd3dDevice->SetSamplerState(2, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP); \nm_pd3dDevice->SetSamplerState(2, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);\n}}}\nD3DTADDRESS_CLAMP 플래그는 텍스처가 한 번만 적용되며 범위 밖의 텍스처 좌표들에 대해서는 가장자리 픽셀의 색이 반복된다는 뜻이다. 이 플래그가 없다면 지구 둘레애 흰색의 고리가 나타나게 될 것이다.\n\n<html> <span style="font-size: 12px;"> <b> 픽셀 셰이더 명령들 </b> </span> </html>\n(p.216) 픽셀 셰이더에게 데이터를 제공하는 정점 셰이더는 마지막 네 줄만 빼고는 이전 예제와 동일하다.\n{{{\n...\n; oT0 coordinates for normal map\n; oT1 half angle\n; oT2 half angle\n; oT3 coordinates for color map\nmov oT0.xy, v7.xy \nmov oT1.xyz, r8 \nmov oT2.xyz, r8 \nmov oT3.xy, v7.xy\n}}}\n법선 맵과 색 맵에 대한 좌표들은 각각 oT0과 oT3에 저장된다. 반각 벡터는 하나의 텍스처 좌표 쌍 형태로 oT1과 oT2에 저장된다. 이들은 픽셀 셰이더에서 3x2 행렬 형태로 쓰인다. 행렬의 값들은 텍스처 단계 2의 반영 맵에 저장되어 있던 지수 값들이다.\n\n{{wrappingClass{ (p.218) Note <br> 정점 셰이더의 출력 레지스터 값은 (0.. 1)로 한정된다. 이는 음의 값은 0으로 설정되고, 양의 값은 그대로 변하지 않고 남는다는 뜻이다. 이러한 범위 한정의 문제를 피하는 한 가지 방법은, 정점 셰이더를 거치지 않고 픽셀 셰이더에서 텍스처로부터 데이터를 직접 로드하는 것이다. }}}\n\n<html> <span style="font-size: 12px;"> <b> 요약 </b> </span> </html>\n(p.219) 이 예제는 반영 지수 참조 테이블(반영 맵 ; 내부에서 생성된 텍스처)을 사용해서 반영 지수의 정밀도를 개선했다. 이 기법의 단점은 추가적인 텍스처를 사용한다는 것인데, 이 문제는 법선 맵의 알파 채널을 활용하는 것으로 극복할 수 있다.\n=== <html> <! # RacorX8 > </html>\n+++!!!![# RacorX9 ]\n(p.219) RacorX9는 분산 반사 모형과 반영 반사 모형을 결합한다. 이는 RacorX6과 RacorX7에 기반한 것이다. 이 예제의 ps.1.4 셰이더는 반영 값을 법선 맵의 알파 채널로부터 읽어오도록 개선되었다.\n\n(p.220) 이전 예제에 비해 이 예제의 특징은 반사 모형들을 단 2 개의 텍스처들로 처리한다는 점이다. 절약한 텍스처 하나는 다른 작업 또는 더 향상된 픽셀 당 조명을 위해 사용할 수 있다.\n\n(p.223) m_pLightMap16의 반영 맵은 LightEval() 함수(RacorX8에 이미 나왔다)로 만들어 둔 것이다. 위의 코드는 그 맵의 값들을 맵의 알파 채널에 집어넣은 후 맵을 해제한다.\n\n<html> <span style="font-size: 12px;"> <b> 요약 </b> </span> </html>\n(p.224) 주된 장점은 하나 이상의 픽셀 당 조명에 사용할 수 있는 명령 슬롯들이 남는다는 점이다. 픽셀 당 조명에서 한 가지 권장할 만한 규칙은, 한 장면 안에서 주된 물체에 대해서는 픽셀 당 조명을 최대 3 개까지만 사용하고, 장면의 나머지 것들에 대해서는 정점 당 조명을 사용하라는 것이다.\n\n이번 장의 예제들은 여러 가지 방향으로 개선해 볼 수 있을 것이다. 특히 RacorX5에서 정점 기반으로 적용했던 감쇠 계수를 픽셀 기반으로 계산해서 적용한다거나, 또는 감쇠 맵을 이용해서 픽셀 당 감쇠를 적용하는 방식 등을 고려해 보기 바란다.\n=== <html> <! # RacorX9 > </html>\n=== <html> <! 4. 픽셀 셰이더 프로그래밍 > </html>\n&nbsp;<html> <span style="font-size: 14px; color: #006699"> <b>5. Shader Studio를 이용한 기초족인 셰이더 개발 </b> </span> </html>\n&nbsp; &nbsp; &nbsp; &nbsp; ◇ 존 슈왑 (John Schwab)\n\n
<html>\n<table>\n <tr> \n <td> <IMG SRC="http://www.gingaminga.com/wiki/pds/GalleryMacro/book_ShaderX2_DirectX9_Tip.jpg" height=64 >\n </td>\n <td> <b> 도서_ShaderX² : DirectX 9 셰이더 프로그래밍 팁 & 트릭 </b> <br>\n(원표제: ShaderX² Shader Programming Tips & Tricks with DirectX 9) <br>\n<br>\n▼ WOLFGANG ENGEL 지음/ 정재원 옮김/ 2004.10.15. 출간/ 정보문화사/ 89-5674-214-6 <br>\n </td> \n </tr>\n</table>\n</html>\n\n!!! 편집자 서문\n『ShaderX2: DirectX 9 셰이더 프로그래밍』 (ShaderX2 Introductions & Turorials with DirectX 9)\n『ShaderX2: DirectX 9 셰이더 프로그래밍 팁 & 트릭』 (ShaderX2 Shader Programming Tips & Tricks with DirectX 9)\n\n첫 번째 책은 독자들이 셰이더 프로그래밍을 시작하는 데 도움이 되는 것들을 중심으로 엮었고, 두 번째 책(이 책)은 숙련된 셰이더 프로그래머에게 필요한 팁과 트릭들로 구성하였다.\n\n+++!!![1부 기하 조작 트릭 ]\n1. 정점 셰이더를 사용한 기하 압축 \n2. 정점 셰이더에서 참조표 사용하기 \n3. 정점 셰이더를 이용한 지형 기하 모핑 \n4. GPU로 나타내는 3D 행성 \n5. 픽셀 및 정점 셰이더 3.0을 사용한 옷감 애니메이션 \n6. 충돌 셰이더\n7. 변위 매핑 \n===\n+++!!![2부 렌더링 기법 ]\n1. 두꺼운 입체로 렌더링하기 \n2. 최소한의 정점 버퍼 잠금으로 입자들을 화면 정렬하기 \n3. 래디오시티 맵을 사용한 반구 조명 계산 \n4. 성운 텍스처 \n5. 몰아치는 태양(Turbulent Sun) \n6. 프래그먼트 수준의 퐁 조명 계산 \n7. ps_1_4 이전 하드웨어에서의 스페큘러 범프 매핑 \n8. ps_3_0을 사용한 복셀 렌더링 \n9. 부동소수 렌더 타깃 간의 블렌딩 연산 시뮬레이션하기 \n10. 광선 추적으로 정점 및 픽셀 셰이더에서 입체 렌더링하기 \n11. 법선 맵 압축하기 \n12. 흐르는 물방울과 텍스처 스프라이트 \n13. 고급 물 효과 \n14. 복사 조도 환경 맵의 효율적인 계산 \n15. 실용적인 기 계산된 복사 휘도 전달 \n16. 고급 천구 렌더링 \n17. 다중 렌더 타깃을 통한 지연 셰이딩 \n18. Meshuggah의 효과들에 대한 소개 \n19. 층진 자동차 페인트 셰이더 \n20. 기하 및 셰이딩 왜곡을 사용한 모션 블러 \n21. 얇은 표면에서의 무지개 빛깔과 반투명도 효과 시뮬레이션하기 \n22. 부동소수 큐브 맵 \n23. 셰이더를 사용한 하드웨어 입체 영상 렌더링 \n24. 음영선과 스트로크 스타일, 점묘 화법 \n25. 층진 안개 \n26. GPU를 통한 밀집 행렬 연산 \n===\n+++!!![3부 소프트웨어 셰이더와 셰이더 프로그래밍 팁 ]\n++++!!!![1. 소프트웨어 정점 셰이더 처리 ]\n◇ Dean P. Macri (Intel Cporporation)\n\n<html> <span style="font-size: 14px;"> <b> #. 왜 소프트웨어 정점 처리를 사용하는가? </b> </span> </html>\n(p.545) DirectX가 제공하는 정점 셰이더 모형을 살펴보면, 소프트웨어 정점 처리를 사용해야 하는 여러 이유들이 금방 머리 속에 떠오른다.\n\n▣ 정점 셰이더를 지원하지 않는 그래픽 하드웨어를 지원한다.\n▣ 현 하드웨어에서 지원하는 것보다 더 높은 버전의 셰이더를 사용할 수 있다.\n▣ 하드웨어 셰이더 제한보다 더 많은 명령어를 사용하는 셰이더를 작성할 수 있다.\n\n좀 더 생각을 해보면, 다음과 같이 소프트웨어 정점 처리를 해야 하는 덜 명확한 이유들도 떠올릴 수 있다.\n\n▣ 정점 셰이더의 출력에 픽셀 처리 이외의 다른 작업 수행\n▣ 익숙한, 벡터 기반 셰이더 모형을 사용하여 그래픽 이외의 작업 수행\n▣ 여러 엔더유저 시스템들에 대해 예측 가능한 성능 및 호환성 보장\n\n<html> <span style="font-size: 14px;"> <b> #. 최적화 가이드라인 </b> </span> </html>\n(p.550) ''APi가 제공하는 가장 높은 버전의 셰이더를 사용한다''\nDirectX 9는 vs.2.0, vs.2.x, vs.3.0의 세 가지 정점 셰이더 모형을 도입하였다. 소프트웨어 파이프라인의 경우에는, 2.x 및 3.0 모형에서 레지스터 및 라벨 수 제한을 확장하고 명령어 수 한계를 없앤 vs.2.sw 및 vs.3.sw 버전을 또한 지원하고 있다. 가능한 가장 높은 셰이더 버전(vs.3.0 또한 제한이 문제라면 vs.3.sw)을 사용함으로써, 그 셰이더 모형이 제공하는 모든 기능들을 활용하여 가능한 한 최대 성능을 얻을 수 있다. \n\n(p.550) ''매크로를 사용한다''\nDirectX 9의 셰이더 모형들에서는 여러 매크로 명령어들을 지원하고 있다 (일부는 새로운 것이고 일부는 이전 셰이더 버전들에 지원되던 것들이다). 행렬 곱셈 연산(M4X4, M3X4 등)과 외적 연산(CRS)이 그 예이다. 이들을 사용하면 컴파일러가 어떠한 레지스터들을 임시적으로 메모리에 저장해야 하고 어떠한 것들을 사용 후에 버릴 수 있는지에 관해 더 영리한 결정을 할 수 있게 된다.\n\n(p.551) ''많이 사용되는 상수들을 정의한다''\ndef와 defi, defb 명령어를 사용하여 셰이더 내에서 상수를 정의하는 경우에는, 컴파일러가 특정 값을 조사하여 셰이더 밖에서 DirectX API를 통해 상수들을 정의한 경우보다 더 최적화된 코드를 만들어낼 수 있다...\n어떻게 셰이더를 사용할 것인지에 관계없이 항상 일정한 상수 값들은 모두 def, defi, defb 명령어를 사용하여 셰이더 내에 직접 정의해야 한다.\n\n(p.551) ''출력 레지스터에 바로 쓴다''\n(p.551) ''소스 스위즐과 목적 마스크를 사용한다''\n(p.552) ''종속 사슬을 최소화한다''\n(p.552) ''기본 블록 간의 임시 레지스터 사용을 최소화한다''\n\n(p.553) ''반복문에서 aL이 필요하지 않다면 rep 명령어를 사용한다''\nvs.2.0 셰이더 모형에서는 rep 와 loop 의 두 가지 반복문이 도입되었다. rep 명령어는 정수 상수에 기반하여 명령어 시퀀스를 정해진 횟수만큼 반복할 수 있게 해준다. loop 명령어는 비슷하게 동작하지만, aL 레지스터를 반복 카운터로 상수 풀을 인텍싱하는 데 사용할 수 있다. 반복 카운터에 기반하여 상수 레지스터를 접근할 필요가 없는 반복문의 경우에는, 컴파일러가 더 간소한 코드를 만들어낼 수 있도록 rep 명령어를 사용하는 것이 좋다.\n\n(p.553) ''주소 레지스터 사용을 피하거나 기대값에 따라 정점들을 재정렬한다''\n(p.554) ''불필요한 조건부 실행을 없앤다''\n(p.554) ''마스킹을 쓸 수 없는 소수의 명령어들에 대해서는 조건자를 사용한다''\n\n(p.555) ''break 명령어를 사용하여 반복문에서 일찍 빠져나온다''\nvs.2.x 와 vs.3.0 셰이더 모형에서 제공하는 break_xx 명령어를 통해, 맞는 조건을 검사하고 해당 반복의 나머지 부분에서 어떤 유용한 계산을 하지 않게 되는 반복문을 빠져나올 수 있다. \n\n(p.555) ''조건부 실행을 사용하여 드물게 사용되는 코드에서 일찍 빠져나온다''\n(p.556) ''기대되는 행동 패턴에 근거하여 조건부 데이터를 정렬한다''\n\n(p.556) ''프로파일링이 중요하다!''\n__셰이더 어셈블리를 조정해가면서 프레임율을 살펴보는 것__ 이외에는 정점 셰이더를 프로파일링할 수 있는 별다른 방법이 없었는데, 이용할 수 있는 툴이 거의 없었기 때문이다.\n이제 인텔의 ''VTume'' 성능 분석기 7.0에서 소프트웨어 정점 셰이더의 프로파일링과 최적화를 매우 쉽게 해주는 기능을 지원한다.\n\n(p.558) 소프트웨어 정점 셰이더를 프로파일링하는 데 VTune 분석기를 사용할 때에 한 가지 주의해야 할 점은 정점 셰이더 선언과 셰이더를 생성하는 시점에 샘플링이 커져 있어야 한다는 것이다.\n\n... 가장 추천할만한 대처법은 VTPause()와 VTResume() API를 사용하여 정점 셰이더 및 선언의 생성 주분에서 샘플링이 켜져 있도록 하는 것이다.\n\n<html> <span style="font-size: 14px;"> <b> #. 결론 </b> </span> </html>\n(p.559) DirectX 9에서 지원하는 소프트웨어 정점 처리는 매우 훌륭한 성능을 제공하기 때문에, 그를 통해 그래픽 및 비 그래픽 관련 계산 모두에 정점 셰이딩을 이용하는 게임 타이틀을 충분히 제작할 수 있다. 이를 사용하면 컨슈머 시장에 다다른 최신 프로세서들의 명령어 셋과 테크놀로지 특징들을 십분 활용하는 벡터화된 코드를 매우 쉽고 유연하게 만들 수 있는 것이다. 이 글에서 설명하는 가이드라인들은 셰이더가 최적으로 돌게 하고, 다른 게임 관련 계산에 프로세서를 할애할 수 있게 하여, 수많은 작품들 속에서도 눈에 띄는 타이틀을 만들 수 있도록 도와줄 것이다.\n<br>\n===\n<html> <span style="font-size: 12px; background-color: #d7dedd; "> <b> &nbsp; 2. x86 셰이더-소프트웨어 ps_2_0 셰이더 </b> </span> </html>\n<html> <span style="font-size: 12px; background-color: #d7dedd; "> <b> &nbsp; 3. SoftD3D: 마이크로소프트 Direct3D API의 소프트웨어 전용 구현 </b> </span> </html>\n<html> <span style="font-size: 12px; background-color: #d7dedd; "> <b> &nbsp; 4. 셰이더 개발에서의 지명 상수 </b> </span> </html>\n===\n+++!!![4부 이미지 공간 ]\n1. DirectX 9 픽셀 셰이더를 사용한 고급 이미지 프로세싱 \n2. 야간 시야: ps.1.1 하드웨어에서의 프레임 버퍼 후처리 \n3. MotoGP 2에서의 비실사적 후처리 필터 \n4. DirectX 9 픽셀 셰이더를 사용한 이미지 효과 \n5. 픽셀 셰이더를 통해 문자를 사용한 모자이크 효과 구현하기 \n6. 만델브로트 집합 렌더링하기 \n7. 실시간 피사계 심도 시뮬레이션 \n===\n+++!!![5부 그림자 ]\n1. 부드러운 그림자 \n2. 견고한 개체 ID 그림자 \n3. 역으로 돌출된 그림자 입체 \n===\n++++!!![6부 3D 엔진 및 툴 디자인 ]\n<html> <span style="font-size: 12px; background-color: #d7dedd; "> <b> &nbsp; 1. 셰이더 추상화 &nbsp; &nbsp; &nbsp; &nbsp; </b> </span> </html>\n<html> <span style="font-size: 12px; background-color: #d7dedd; "> <b> &nbsp; 2. 효과 버퍼를 통한 흥미로운 후처리 &nbsp; &nbsp; &nbsp; &nbsp; </b> </span> </html>\n<html> <span style="font-size: 12px; background-color: #d7dedd; "> <b> &nbsp; 3. 셰이더 제어(Codecreatures 엔진) &nbsp; &nbsp; &nbsp; &nbsp; </b> </span> </html>\n<html> <span style="font-size: 12px; background-color: #d7dedd; "> <b> &nbsp; 4. Gamebryo 그래픽 엔진에서의 셰이더 통합 &nbsp; &nbsp; &nbsp; &nbsp; </b> </span> </html>\n\n+++!!!![5. 정점 셰이더 컴파일러 ]\n◇ David Pangerl\n\n<html> <span style="font-size: 14px;"> <b> #. 소개 </b> </span> </html>\n(p.893) 정점 셰이더 컴파일러(VSC)는 프리웨어인 C 기반 DirectX 정점 셰이더(VS) 컴파일러이다. 이는 DirectX VS 어셈블리 프로그래밍을 위한 고수준 프로그래밍 언어(HLPL, high-level programming language)를 제공한다. VSC의 출력은 부가적인 런타임 정보를 가지는 최적화된 VS 어셈블러이다.\n\n<html> <span style="font-size: 14px;"> <b> #. 현 기능 </b> </span> </html>\n(p.893) VSC 는 빠르고 견고하며 안정적인 컴파일러이다. 정점 셰이더 파이프라인을 여러 부분으로 나누도록 설계되었다. 이것은 또한 강력한 플러그인 시스템과 고유의 (built-in) 최적화, 프리컴파일러를 제공한다. 이는 다음과 같은 기능을 가진다.\n\n▣ 문자열 또는 파일을 통해 제공되는 프로그램의 컴파일\n▣ 다른 메쉬 정점 유형들에 대해 같은 코드 적용 가능\n▣ 함수 스왑핑(swapping)\n▣ 빠른 컴파일\n▣ 괜찮은 최적화\n▣ 레지스터 제한 처리\n▣ VS 배열 지원\n▣ 매우 간단한 인터페이스의 작고 간단한 C++ 코드 (~3300 라인)\n\n<html> <span style="font-size: 14px;"> <b> #. VSC 라이센스 </b> </span> </html>\n(p.894) VSC의 저작권은 ZootFly가 가진다. 본 라이브러리는 프리소프트웨어이다. BSD식의 라이센스 하에 이를 재배포하거나 수정할 수 있으며, 그 라이센스에 대해서는 본 라이브러리의 license_bad.txt 파일을 참조한다.\n\n<html> <span style="font-size: 14px;"> <b> #. 개념 </b> </span> </html>\n<html> <span style="font-size: 14px;"> DirectX 정점 셰이더 어셈블러 </span> </html>\n\n(p.894) DirectX VS 어셈블러는 정점 처리를 프로그래밍하는 직접적인 방식이다. 매우 강력하고 유용하지만, 그것을 사용하기 위해서는 여러 분야에서의 지식이 필요하다.\n\n▣ 기본적인 어셈블리 지식\n▣ 명령어 명세 (DirectX 문서)\n▣ 명령어 제한 (DirectX 문서)\n▣ 레지스터 용법 (DirectX 문서)\n▣ 명령어 당 레지스터 제한 (DirectX 문서)\n\n가장 간단한 함수(길이, sin, cos 등) 조차도 많은 어셈블리 명령을 필요로 한다. 또한 HLPL 과는 약간 다른 접근을 필요로 한다. 게다가 어셈블리 코드의 유지보수와 디버깅, 업그레이드는 매우 어렵고 힘든 작업이다.\n\n이러한 이유로, 어셈블리 프로그래밍의 모든 귀찮은 작업을 없애기 위해, 우리는 별도의 HLPL을 개발하기로 결정하였다.\n<br>\n===\n++++!!!![6. 셰이더 역어셈블러 ]\n◇ Jean-Sebastian Luce (Nadeo)\n\n(p.916) 마이크로소프트 DirectX 9에서는 새로운 셰이딩 언어인 고수준 셰이딩 언어(HLSL)가 되입되었는데, 이는 이전의 셰이더 어셈블리와 비교하면 훨씬 더 쉽게 사용할 수 있다. 그러나 비디오 드라이버는 오직 셰이더 바이트 코드만 이해하므로, DirectX 런타임에서 HLSL과 어셈블리 셰이더 코드를 각각 컴파일하고 어셈블해야 한다. 셰이더 어셈블리와는 달리, __셰이더 바이트 코드는 인간이 "읽을 수 있는" 형태가 아니다.__ 이 글에서는 셰이더 바이트 코드를 (역으로) 어셈블리 명령어로 변환하는 방법을 제시한다.\n\n<html> <span style="font-size: 14px; "> <b> #. 셰이더 역어셈블러: 무엇에 유용한가? </b> </span> </html> \n(p.917) HLSL은 프로그래머에게 여러모로 유용하지만, 생성된 코드가 직접 작성한 어셈블리 코드만큼 최적이 아닐 수 있다는 단점을 지닌다. 때때로 HLSL로 코딩하는 경우, 프로그래머가 완전히 @@color(#0000FF): 벡터화된 연산을 사용@@하는 것을 잊으면 최적이 아닌 이진 프로그램이 나올 수 있는 것이다.\n\n(p.918) 게다가, 초기의 픽셀 셰이더 하드웨어(ps_1_x)는 나중 버전에 비해 그 능력이 매우 제한적이다(소수의 주소 지정 및 산술 명령어, 소수의 가용한 명령어 슬롯). 그러므로 이러한 플랫폼들에 대한 HLSL 코딩은 주의 깊게 이루어져야 한다.\n... 따라서 HLSL 프로그래머는, 적어도 목적 플랫폼의 제한점을 알고 있어야 하는데, 생성된 어셈블리 코드를 샬펴볼 수 있다면 최적화 코드 작성에 도움이 될 것이다. 이러한 이유로 생성된 HLSL 프로그램의 셰이더 어셈블리를 읽고 검사하는 것이 중요하다. DirectX 9 SDK에서 HLSL 컴파일러가 생성한 어셈블리 코드를 볼 수 있는 유일한 방법은 @@color(#FF0000): 외부 컴파일러 fxc.exe를 -Fc 옵션으로 사용하는 길뿐이다. @@\n\n<html> <span style="font-size: 14px; "> <b> #. 셰이더 바이트 코드 해설 </b> </span> </html> \n(p.921) 상대 주소 지정이 활성화되고 셰이더 버전이 2_0 이상이면 (vs_1_1은 항상 암묵적으로 유일한 주소 레지스터인 aO.x를 사용한다), 이 매개변수 토큰 뒤로 상대 주소 지정 토큰이 온다.\n\n(p.922) def, defi, defb와 같은 특수한 어셈블리 명령어들은 어셈블리로 작성된 상수 값들을 나타내는, 각각 부동소수점 수, 정수, 부울의 소스 매개변수를 필요로 한다. \n\n어셈블리 명령어 dcl은 용도와 용도 색인 또는 텍스처 유형(샘플러 레지스터의 경우)의 정보를 가지는 (레지스터 유형과 번호에 더하여) 특수한 매개변수 토큰이 뒤따른다.\n\n디버그 정보를 저장하기 위해 컴파일러가 주석 토큰을 사용할 수도 있다(여기서는 오직 다음 명령어 토큰을 위한 점프 오프셋을 계산하기 위해 그를 읽어온다).\n\n종료 토큰(Ox0000FFFF 값으로 인식하는)으로 셰이더 바이트 코드 스트림은 끝난다.\n\n<html> <span style="font-size: 14px; "> <b> #. 역어셈블리 알고리즘 </b> </span> </html> \n(p.922) 각 명령어마다 다음 명령어 토큰에 앞서 하나 이상의 매개변수 토큰들이 뒤이으므로, 셰이더 바이트 코드를 역어셈블하기 위해서는, 각 명령어 토큰을 파싱하고 해당 명령어에 따라 개대되는 매개변수 토큰들을 파싱하여, 역어셈블리를 출력하고 다음 명령어로 넘어가게 된다.\n\n새로운 토큰을 가지고 제일 먼저 해야 할 것은 그가 특수 토큰(즉, 버전 토큰이나 주석 토큰, 종료 토큰)인지 검사하는 것이다. 이러한 토큰들 중 하나가 아니라면, 명령어의 연산 코드를 확인해야 한다. 그러고 나면 첫 번째 어려운 작업 부분을 맞닥뜨리게 된다. 다양한 원형(명령어의 인자들의 형과 개수)을 가지는 많은 상이한 명령어들이 존재하는 것이다.\n\n이 문제를 해결하기 위해 위해, 우리는 C 전처리 매크로를 사용하였다. Dx9ShaderBCode_Instr.h 파일을 읽어보면, (거의) 모든 명령어에 대해 OpCode_ID(가령, D3DSIO_NOP)와 그 매개변수들(소스/ 목적 레지스터에는 RegSrc/ Dst, 상수 값에는 Real/ Bool/ Interger)을 기술하는 줄이 하나씩 있음을 확인할 수 있다. 연산 코드에 대한 switch 구문으로, 각 매크로는 그 매개변수들을 명령어/ 매개변수 역어셈블리 함수에 대한 호출로 확장한다. 고유의 구문을 가지거나 (dcl 명령어처럼) 정점/ 픽셀 셰이더 타깃 버전에 따라 작동을 달리하는 (texcoord/ texcrd와 tex/ texId) 몇몇 명령어 연산 코드들을 특수한 방식으로 처리해 주어야 한다.\n\n(p.923) 이제는 각 명령어를 역어셈블하는 방법에 대해 더 자세히 살펴보자. 먼저, CatInstr 함수가 소문자로 명령어 이름을 출력하고, 몇몇 비고 명령어(ifc, breakc, setp)에 대해 부가적인 특수 제어 텍스트를 추가한 다음, 부가적인 쉬프트 텍스트와 목적 수식어 텍스트(둘 모두 다음의 목적 매개변수 토큰으로부터 가져온다)를 덧붙인다.\n\n그 다음에 CatParamRegSrc와 CatParamRegDst 함수로 목적 및 소스 매개변수들을 역어셈블한다. 이들 두 함수는 레지스터 명과 부가적인 색인을 출력하는 CatRegister 함수에 기반한다. CatParamRegSrc는 먼저 가능한 소스 수식어 (가령, 부정(negation)이나 보정(bias))로 시작하여, 레지스터 명을 출력하고 적절한 스위즐과 함께 부가적인 주소 지정 텍스트를(이 경우, 현 소스 매개변수 토큰에 이어 주소 레지스터 토큰이 나와야 한다), 그리고 필요에 따라 접미 수식어를 추가한다. 마지막으로 스위즐 지정자(".xxxx"에 대해서는 ".x"를 출력한다)를 추가한다. CatParamRegDst 는 레지스터에 쓰기 마스크만 추가하면 되기 때문에 더 간단하다.\n\n동반 수행과 조건 명령어 변경자는 연산 코드 스위치 전에 처리된다. 조건자의 경우가 더 어려운데, 이는 조건자 레지스터 코큰이 첫 번째와 두 번째 매개변수 토큰 사이에 삽입되기 때문이다(InstrToken, Param1Token, PredicateToken, Param2Token, ...). 이어지는 명령어의 역어셈블러 작업을 위해서는 조건자 토큰을 건너뛰어야 한다.\n===\n===\n\n\n
''error c2668: '***' : 오버 로드 된 함수 에 대한 호출 이 모호 합니다.''\nerror c2668: '***' : ambiguous call to overloaded function\n\nvisual c++ 버전 업그레이드, 변경 내용 중에 수식 라이브러리 함수의 C++ 오버로드 함수 관련된 변경사항이 있을 때 발생한다.\n오류를 해결 방법\n&nbsp; &nbsp; / 변경된 테이터 형으로 캐스팅\n&nbsp; &nbsp; / cmath로 이동한 c++ 오버로드 함수를 사용하기 위해서 #include <cmath> 를 추가\n{{{\n// C2668d.cpp\n#include <math.h>\nint main() {\n int i = 0;\n float f;\n f = cos(i); // C2668\n f = cos((float)i); // OK\n}\n\n// C2668e.cpp\n#include <math.h>\nint main() {\n pow(9,9); // C2668\n pow((double)9,9); // OK\n}\n}}}
◇ Michal Valient\n\n<html> <span style="font-size: 14px; "> <b> #. 소개 </b> </span> </html>\n\n(p.106) 이 글에서는 DirectX 9의 새로운 기능들에 대해 논의할 것이다. 고전적인 픽셀 당 셰이딩으로 시작하여 조명을 구현해보고, 좀더 질을 향상시킨, 룩업 텍스처는 사용하지 않는 셰이더 2.0으로 다시 구현해본 다음, 셰이더 버전 3.0을 이용하여 단일 패스에서 유동적인 조건 분기와 상대적 어드레싱을 이용하여 4개의 점적광을 구현할 것이다.\n\n다음으로 다룰 주제는 픽셀 당 환경 범프 매핑인데, (픽셀 셰이더 1.4에 포함되어 있는) DirectX 8.1을 먼저 소개하고 나서 새로운 셰이더 2.0을 소개할 것이다. 그리고 마지막으로 보다 인상적이고 현실적인 효과를 위해 프레널(Fresnel) 항을 추가할 것이다.\n\n이 글의 마지막에는 실시간 컴퓨터 그래픽에서는 일반적으로 사용하지 않는 두 가지 조명 모델에 대해 논의할 것이다. 이것은 주로 DirectX 버전의 제약보다는 하드웨어 제약에 의한 것이다.\n람베르트 분산(Lambertian diffuse) 모델의 오렌-나야르(Oren-Nayar) 생성은 셰이더 2.0으로 구현하였다. 이것은 진흙이나 자기 같은 재질을 더 현실적으로 만든다.\n쿡-토르란스(Cook-Torrance) 모델의 반영(specular) 부분도 시각적인 비교를 위해 셰이더 1.4와 2.0으로 구현하였다. 이 모델은 금속 표면에 대해서 매우 훌륭한 결과물을 내놓는다.\n\n\n<html> <span style="font-size: 14px; "> <b> #. 픽셀 당 퐁(phong) </b> </span> </html>\n\n<html> <span style="font-size: 14px; "> <b> 정점 및 픽셀 셰이더 2.0 </b> </span> </html>\n(p.107) 이 섹션에서는 퐁 조명이 새로운 셰이더 모델에서 사용 가능한지 알아볼 것이다. 이 글은 이전 버전에서 DirectX9로 업그레이드하려는 사람을 대상으로 쓰여졌다.\n\n<html> <span style="font-size: 12px; "> <b> 정점 셰이더 2.0 </b> </span> </html>\n(p.108) 새로운 정점 셰이더에서 픽셀 당 셰이딩을 설정하는 것은 버전 1.1과 별반 차이가 없다.\n...\n\n(p.109) 다음이 입력 레지스터 선언에서 첫 번째 찾을 수 있는 변화돤 부분이다.\n{{{\ndcl_position v0\ndcl_normal v1 \ndcl_texcoord v2\ndcl_tangent v3\n}}}\nDirect3D 8에서 정점들은 셰이더 바깥에서 셰이더를 생성할 때 선언되었다. 셰이더의 입력 레지스터가 데이터의 어떤 부분을 읽어들일지를 명시해야 한다. Direct3D 9에서는 다음 두 가지 유형의 선언이 있다.\n\n▣ ''SetVertexDeclaration 메소드를 포함하는 셰이더 외부'' 이 단계에서는, 각각의 입력 레지스터가 스트림으로부터 어떤 것을 읽어들일지를 정의한다(스트림의 시작 지점부터 데이터 요소까지의 바이트 상 거리와 float, vector에 대한 float3 등과 같은 데이터형, 그리고 나중에 셰이더에서 사용될 위치, 법선, 접선, 종법선 등과 같은 요소의 의미).\n▣ ''셰이더 내부'' 여기서는 특정한 의미를 가진 데이터에 대한 타겟 레지스터를 명시한다(예, 위치, 법선, 접선, 종법선 등 셰이더 외부에서와 같다).\n\n이것은 특정한 입력 구조를 예상하지 않고 셰이더를 작성할 수 있도록 하고 개개의 모델에 대한 새로운 정점 유형에 동일한 셰이더를 사용할 수 있게 한다. 앞의 예에서는 처음 4개 입력 레지스터에서 한 개의 위치와 텍스처 좌표, 법선, 종법선을 읽어들이지만 정점 스트림에서 이 데이터는 어디에서나 위치할 수 있고 심지어 다른 방식으로 정렬될 수도 있다(예, 법선, 텍스처 좌표, 위치, 접선).\n\n<html> <span style="font-size: 12px; "> <b> 픽셀 셰이더 2.0 </b> </span> </html>\n(p.112) 정점 셰이더는 버전 1.1과 단지 사소한 부분에서 차이가 있었지만, 픽셀 셰이더에서는 보다 많은 부분이 변화되었다.\n...\n\n(p.113) 첫줄부터 바뀐 것들이 보인다. 먼저 정점 셰이더에서 넘어온 것을 받아 입력 레지스터를 명시해야 한다.\n... 만약 정점 셰이더가 이것을 채우지 않으면, 실행 시에 셰이더 링커는 실패할 것이다. 그리고 셰이더 전체에 걸쳐서 자유롭게 그것을 읽기 전용 레지스터로 사용할 수 있다.\n\n다음은 입력 레지스터 선언이다.\n{{{\ndcl t0.xy // 텍스처 좌표\ndcl t1.xyz // 빛 벡터\ndcl t2.xyz // 시선 벡터\ndcl t3.xyzw // 투사기의 텍스처 좌표\n}}}\n\n(p.114) 다음은 입력 텍스처 샘플러의 선언이다.\n{{{\ndcl_2d s0 // 분산 텍스처(알파에는 광택)\ndcl_2d s1 // 법선 텍스처\ndcl_2d s3 // 점적광 텍스처\n}}}\n\n설정 후, 첫 단계는 법선 벡터를 읽어들이는 것이다. 여기서도 texld 명령어를 사용하지만, 버전 1.4 픽셀 셰이더와는 다르다.\n...\n\n여기서 큰 차이점을 볼 수 있는데, 픽셀 셰이더 2.0 셰이더들의 위력 덕분으로 이제는 각각의 입력 벡터의 정규화가 가능해졌다.\n\n(p.116) 주의할 점은 픽셀 셰이더 2.0에서는 출력 레지스터가 전 버전에서의 r0 대신에 oCn 이며, 픽셀 셰이더가 출력을 4개까지 가질 수 있다는 것이다.\n\n<html> <span style="font-size: 12px; "> <b> HLSL 버전 </b> </span> </html>\n\n<html> <span style="font-size: 12px; "> <b> 품질 비교 </b> </span> </html>\n(p.119) 픽셀 셰이더는 정규화가 실현되고 정밀도도 더 높아져 이전 버전에서 보다 훨씬 좋은 결과를 얻을 수 있게 되었다. 다음의 이미지에서도 비교 가능하지만, 움직이는 동작에서 더 확연히 차이를 볼 수 있다. 움직이는 동작에서의 조명 세기는 픽셀 셰이더 2.0 버전에서 훨씬 안정적이다.\n\n\n<html> <span style="font-size: 14px; "> <b> 정점과 픽셀 셰이더 3.0 </b> </span> </html>\n(p.120) Direct3D 9로 셰이더를 개발한다는 것은 다소 모험적인데, 다른 버전의 셰이더도 가능하기 때문이다(버전 3.0). 3.0은 2.0과 문법 면에서는 근소한 차이를 보여주지만 (셰이더와 레지스터 설정 단계 등에서)세이더 기능 면에서 매우 다르다.\n\n정점 셰이더 3.0의 실행 코드는 오히려 전 보전보다는 더 커질 수 있다. 셰이더에는 적어도 512개의 명령어가 있지만, 조건 분기를 사용하면 디바이스는 훨씬 많은 명령어를 실행할 수 있을것이다(65,536 이상). 동적인 조건 분기도 이 셰이더에서는 가능하다(루프는 임시 혹은 특별 속성 레지스터 값에 의존해서 존재할 수 있다). 다른 기능으로는 정점 셰이더에서의 텍스처 룩업이나 상수에서 입력이나 출력으로의 상대 인덱싱 확장이 있다.\n\n(p.121) 픽셀 셰이더 3.0도 정점 셰이더와 비슷하다. 동적 그리고 정적 조건 분기가 가능하고, 명령어 개수 제한도 같다. 텍스처 명령어 개수 제한은 없고 의존적 텍스처 읽기에 대한 제한도 없다. 새로운 입력 레지스터(스크린에서의 픽셀 위치와 면 방위 레지스터(face orientation register))가 도입된다. 또한 입력 레지스터의 변화율을 조사할 수 있는 증감 레지스터가 새로 도입된다.\n\n<html> <span style="font-size: 12x; "> <b> 정점 셰이더 3.0 </b> </span> </html>\n(p.123) 이 셰이더 버전에서는, 오직 하나의 출력 레지스터 집합만 있다. 앞에서는 oD#를 색상, oFog, oPos를 절단 공간 위치, oPts를 점 크기, 그리고 oT#를 텍스처 좌표로 사용했다. 여기서는 @@color(#FF0000): 오직 o# 레지스터만 가능@@하지만, 그것을 어떻게든 사용할 수 있다. 그러므로 모든 사용할 출력 레지스터의 의미를 입력 레지스터를 처리했던 방식으로 셰이더 시작 부분에서 선언할 필요가 있다. __반드시 하나의 dcl_position0은 절단 공간 정점 위치를 특정하기 위해서 항상 선언해야 한다.__ \n\n<html> <span style="font-size: 12x; "> <b> 픽셀 셰이더 3.0 </b> </span> </html>\n(p.128) 우선 주의할 점은 입력 레지스터 선언에서의 변화이다. 우리는 의미구조를 특정지어야 한다. 올바른 결과를 얻기 위해서, 픽셀 셰이더가 사용하는 입력 값의 의미는 정점 셰이더의 출력 값의 의미와 일치해야 한다.\n\n\n<html> <span style="font-size: 14px; "> <b> #. 프레넬 항을 이용한 픽셀 당 환경 범프 매핑 </b> </span> </html>\n(p.131) 환경 매핑(EM)은 반사면을 시뮬레이션하거나 표면에 금속 질감을 주기 위해 널리 사용한다. 핵심 개념은 텍스처를 반사 데이터 소스로 사용하고, 면의 법선 주의의 카메라 반사 벡터를 계산해서, 이 룩업 값을 텍스처에 사용하는 것이다. 세 가지 유형의 EM이 있다. \n\n&nbsp; &nbsp; ▣ ''포물면 EM''(Paraboloid EM) - 하나의 텍스처를 사용하고(구형 맵이라고도 하는데, 완벽하게 반사되는 구에 비추어진 반사가 저장되기 때문이다). 이 텍스처는 오브젝트 주위의 한 반구로부터 정보를 저장한다. 그래서 오직 이 반구가 카메라를 마주하고 있을 때에만 반사를 처리해서 예상하는 결과를 얻을 수 있다. 셰이더 없이는 구형 맵을 상호작용적으로 갱신하기 어렵다.\n&nbsp; &nbsp; ▣ ''이중 포물면 EM''(Dual paraboloid EM) - 두 개의 구형 맵을 사용하고, 그래서 오브젝트 주변을 완벽한 구로 덮을 수 있다.\n&nbsp; &nbsp; ▣ ''입방체 맵 EM''(Cube map EM) - 6개의 텍스처(혹은 하나의 입방체 맵)를 사용한다. 개개의 텍스처는 오브젝트 주위의 입방체의 한 면을 반영한다. 입방체 맵은 갱신하기 쉽고(입방체의 한 면만 갱신할 수도 있다) 사용하기도 쉽다. 이것은 네이티브 포맷으로, 입방체의 중심으로부터의 (x, y, z)좌표를 나타내는 (x, y, z) 벡터를 사용해서 텍스처를 추출한다.\n\n각각의 EM 유형은 정점별 혹은 픽셀별로 수행할 수 있다. 이것은 반사 벡터를 어디서(정점 혹은 픽셀 셰이더) 계산하느냐에 좌우된다. 이 글에서는 __입방체 맵과 반사 벡터를 픽셀 당 계산을 사용하며, 결과 효과는 프레넬 항을 사용해서 확장한다.__\n\ncf. 프레넬 반사(Fresnel Reflection)란 프랑스의 오귀스텡. 장. 프레넬이 제창 한 것으로\n빛이 서로 다른 굴절률을 갖는 매질의 경계면을 통과할 때의 반사로 빛이 매질과 부딪힐 때 그 각도에 따라 굴절, 투과가 다르게 나타하는 현상이다.\n\n평평한 곳에 빛이 투과 된다고 할때 직각에 가까운 각도로 빛이 쏘아지면 대부분이 투과되는 물체를 빛이 꿰뚫지만 평행에 가까운 속도고 빛이 쏘아지면 수면에서 반사해 버려 빛이 투과되는 물체 내에 대부분 들어오지 않는다. \n그리고 물체의 투명도나 빛의 강도 같은 파라미터에 따라 빛이 얼마나 투과체의 표면을 반사하고, 얼마나 투과체의 내부로 들어갈까를 계산한 식을 만들어 냈다.\n\n<html> <span style="font-size: 14px; "> <b> 수학적 배경 </b> </span> </html>\n(p.133) 이제 이 반사 결과를 프레넬 항을 가지고 확장할 수 있다. 이것은 카메라를 향해 반사되는 빛의 양과 재질 경계에 부딪혔을 때 굴절되는 빛의 양을 기술한다. 표면의 법선과 시선 벡터 사이의 각이 π/2에 가까울수록 빛의 반사율이 최대가 되며, 0에 가까울수록 빛의 반사율은 최소가 된다.\n\n<html> <span style="font-size: 14px; "> <b> 정점 셰이더 </b> </span> </html>\n(p.134) 우선 DirectX 8 기반으로 하드웨어를 위한 버전을 살펴보자. 정점 셰이더부터 볼 것인데 명확한 코드와 더 간단한 설명을 위해서 정점 셰이더 버전 2.0을 사용했다(버전 1.1은 nrm과 crs 매크로 명령어를 더 옛날 셰이더를 위한 개개의 코드로 교체함으로서 얻을 수 있다).\n\n+++[다음은 환경 매칭을 위한 2.0 정점 셰이더이다. ]\n{{{\nvs_2_0 //Shader version 2.0\n\n// 상수 레지스터들\n//---------------------------------- \n// c0-c3 - 전치된 입방체 맵 공간(세계 공간이 될 수도 있다.)\n// c4-c7 - 세계 * 시야 * 투영\n// c8 - 시선 위치(입방체 공간에서)\n// c9 - 입방체 맵을 위한 수정치\n// \n\n// 입력 레지스터들\n//----------------------------------\ndcl_position v0\ndcl_normal v1 \ndcl_texcoord v2\ndcl_tangent v3\n\n// 출력\n//----------------------------------\n// oT0 - 텍스처 좌표\n// oT1 - 입방체 공간에서 시선 벡터\n// oT2 - 접선에서 입방체 공간으로 변환 행렬의 1열\n// oT3 - 접선에서 입방체 공간으로 변환 행렬의 2열\n// oT4 - 접선에서 입방체 공간으로 변환 행렬의 31열\n// oT5 - 정점 수정자\n//----------------------------------\n\n// 절단 공간 위치, 텍스처 좌표를 출력한다.\n// 입방체 공간에서의 시선 벡터를 계산한다.\n//----------------------------------\nm4x4 oPos, v0, c4 // 정점 절단 위치\nmov oT0.xy, v2.xy // 색 텍스처를 위한 텍스처 좌표\n\nm4x4 r8, v0, c0 // 정점을 입방체 맵 공간으로 변환한다.\nadd r0, c8, -r8 // 시선 벡터\nnrm r1.xyz, r0 // 정규화한다.\nmov oT1.xyz, r1 // 출력한다.\n\n// 접선 공간 기저를 계산하고 행렬을 접선에서 입방체 공간으로 변환\nmov r9, v3 // 접선 복사\ncrs r10.xyz, r9, v1 // 종법선을 계산하기 위해서 외적한다.\nmov r11, v1 // 그리고 법선 복사 - 행렬은 r9, r10, r11에 있다.\n\nm3x3 oT2.xyz, c0, r9 // 변환 행렬 생성(전치된)\nm3x3 oT3.xyz, c1, r9\nm3x3 oT4.xyz, c2, r9\n\nmul oT5, r8, c9.xxx // 반사 벡터 수정치\n}}}\n===\n\n(p.135) 첫 번째 주목할 것은 시선 벡터가 입방체 공간에서 계산된다는 것이다(시선 위치는 공간에서 정점 셰이더로 옮겨지고, 정점 역시 입방체 공간으로 변환된다). 그 벡터는 어떤 추가의 변환 없이 픽셀 셰이더에 넘겨진다.\n\n<html> <span style="font-size: 14px; "> <b> 픽셀 셰이더 1.4 </b> </span> </html>\n(p.137) 일반적인 법선과 시선 벡터를 읽은 후에 (또한 전치된 변환 행렬도), 법선을 입방체 공간으로 변환한다(3개의 연속적인 내적은 m3x3 벡터-행렬 곱의 기능을 갖는다). 주의할 점은 이 명령어들은 _bx2 수정자를 사용해서 법선을 (-1...1) 범위로 만든다는 것이다. 다음으로 시선 반사 벡터를 계산한다.\n첫 번째 단계의 마지막 명령어는 이미 언급했던 반사 벡터 수정이다.\n\n+++[다음은 환경 매칭을 위한 1.4 픽셀 셰이더이다. ]\n{{{\nps_1_4 //Shader version 1.4\n\n// 상수 레지스터들\n//---------------------------------- \n// c0 - R(0)\ndef c3, 1.0f, 1.0f, 1.0f, 1.0f\ndef c4, 0.0f, 0.0f, 0.0f, 1.0f\n\n// 사용하는 입력 레지스터\n//----------------------------------\n// t0 - 색/ 범프 좌표 \n// t1 - 입방체 공간에서의 시선 벡터\n// t2, t3, t4 - 접선에서 입방체 행렬\n// t5 - 반사 벡터 이동\n\n// 사용하는 입력 텍스처 단계\n//----------------------------------\n// stage0 - 주변 텍스처\n// stage1 - 법선 텍스처\n// stage3 - 프레넬 룩업 덱스처\n\n// 출력\n//----------------------------------\n// r0 - 출력 색\n//\n\ntexld r1, t0 // 법선 벡터(n)\ntexcrd r2.rgb, t1.xyz // 시선 벡터(v)\ntexcrd r3.rgb, t2 // 접선에서 입방체 행렬의 첫 번째 열\ntexcrd r4.rgb, t3 // 접선에서 입방체 행렬의 두 번째 열\ntexcrd r5.rgb, t4 // 접선에서 입방체 행렬의 세 번째 열\ntexcrd r0.rgb, t5 // 벡터 이동\n\n// 법선을 변환 행렬과 곱한다.\ndp3 r3.r, r3, r1_bx2 // 법선을 입방체 공간으로 변환\ndp3 r3.g, r4, r1_bx2\ndp3 r3.b, r5, r1_bx2\n\n// 카메라 반사 벡터 계산\ndp3 r1.rgb, r3, r2 // r1 = dot(normal, eye)\nmad r4.rgb, r1_x2, r3, -r2 // 반사율 벡터 r2 = 2(n.e)n-e\nadd r4.rgb, r4, r0 // 이동\n\nphase\ntexld r0, t0 // 분산 텍스처(n)\ntexld r2, r4 // 입방체 맵 룩업\ntexld r3, r1 // 프레넬 룩업\n\nmul r0.rgb, r0, r1.r // 분산 조명을 시뮬레이션하기 위해서\nlrp_sat r4, c0.r, c0.g, r3 // 프레넬 값을 준비한다(R(0) 포함)\n// mul_sat r4, r4, r0.a // 광택율과 곱하기 연산한다.\nlrp r0.rgb, r4.a, r2, r0 // 최종 색을 계산한다.\n}}}\n===\n\n(p.138) 두 번째 단계에서, 입방체 텍스처로부터 앞에서 계산한 반사 벡터로 상술한 좌표를 가지고 환경 반사를 읽는다. 그리고 법선과 시선 벡터의 내적(첫 번째 단계에서 계산한)을 사용해서 프레넬 반사 근사의 한 부분((1-cos(θ))^5 )을 가지고 있는 텍스처에서 룩업한다. 이것을 셰이더에서 직접 계산할 수도 있지만, 제한된 정밀도로 인해서 더 많은 오류가 발생할 수도 있기 때문에, 1차원 텍스처를 사용해서 룩업하는 것이 훨씬 빠르다. 계산한 내적을 이용해서 한 번 더 분산 조명을 시뮬레이션하면, 이것으로 장면이 밋밋하지 않게 보인다(이것은 별개의 패스에서 조명이 이루어지는 게임의 상황은 아니다).\n\n<html> <span style="font-size: 14px; "> <b> 픽셀 셰이더 2.0 </b> </span> </html>\n(p.139) 픽셀 셰이더 2.0에서는 셰이더 내에서 모든 것을 계산할 수 있으므로 프레넬 텍스처 룩업은 건너뛴다. 이것은 변경된 주 요소로, 시간 시 입력 벡터가 정규화되고 프레넬 항의 쉬릭스 근사가 셰이더에서 직접적으로 계산된다. 셰이더의 나머지 부분은 앞과 거의 유사하다.\n\n+++[다음은 환경 매핑을 위한 픽셀 셰이더 2.0이다. ]\n{{{\nps_2_0 //Shader version 2.0\n\n// 상수 레지스터\n//---------------------------------- \n// c0 - 굴절 인덱스\ndef c1, 2.0f, 1.0f, 5.0f, 0.0f\n\n// 사용된 입력 레지스터\n//----------------------------------\ndcl t0.xy // 법선 벡터(n)\ndcl t1.xyz // 시선 벡터(v)\ndcl t2.xyz // 접선에서 입방체 행렬의 첫 번째 열\ndcl t3.xyz // 접선에서 입방체 행렬의 두 번째 열\ndcl t4.xyz // 접선에서 입방체 행렬의 세 번째 열\ndcl t5.xyz // 반사 벡터 이동\n\n// 사용하는 입력 텍스처 샘플러\n//----------------------------------\ndcl_2d s0 // 분산 텍스처(알파는 광택)\ndcl_2d s1 // 법선 텍스처\ndcl_cube s2 // 입방체 텍스처\n\n// 출력\n//----------------------------------\n// oC0 - 출력 색\n//\n\n// 필요한 벡터를 설정한다. - 읽어서 정규화한다.\n//----------------------------------\ntexld r0, t0, s1 // 법선을 로드한다.\nmad r1, r0, c1.r, -c1.g // 법선을 범위 -1, 1로 보정한다.\nm3x3 r0.xyz, r1, t2 // 입방체 공간으로 변환한다.\nnrm r11, r0 // r11 = 정규화된 법선\nmov r1.xyz, t1\nnrm r10, r1 // r10 = 정규화된 시선 벡터\n\n// 카메라 반사 벡터 계산\n//----------------------------------\ndp3 r9.r, r11, r10 // r1 = dot(normal, eye)\nmul r8.r, r9.r, c1.r // r1 = 2*(n.v)\nmad r8.rgb, r8.r, r11, -r10 // 반사율 벡터 - r1 = 2(n.v)n-v\nadd r8.rgb, r8, t5 // 이동\n\n// 프레넬 항 계산 (쉬릭스 근사) F=IR+(1-IR)*(1-(n.v))^5\n//----------------------------------\nsub r1.r, c1.g, r9.r // r1 = 1 - n.v\npow r0.r, r1.r, c1.b // r0 = (1-(n.v))^5\nlrp r7.rgb, c0.r, c0.g, r0.r // 최종 F = IR*1 + (1-ir)*r0\n\n// 텍스처 룩업과 최종 곱하기 연산\n//----------------------------------\ntexld r0, t0, s0 // 분산 텍스처\ntexld r1, r8, s2 // 입방체 맵 룩업\nmul r0.rgb, r0, r9.r // 분산 조명을 시뮬레이션하기 위해서(n.v)\n// mul r7.rgb, r7, r0.a // 프레넬 항과 광택을 곱하기 연산한다.\nlrp r1.rgb, r7.r, r1, r0 // 최종 색을 계산한다.\nmov oC0, r1\n}}}\n===\n\n\n<html> <span style="font-size: 14px; "> <b> HLSL 버전 </b> </span> </html>\n\n\n<html> <span style="font-size: 14px; "> <b> #. 진보적인 모델을 위한 배경 지식 </b> </span> </html>\n<html> <span style="font-size: 14px; "> <b> 구 좌표계 </b> </span> </html>\n<html> <span style="font-size: 14px; "> <b> 표면의 거칠기 </b> </span> </html>\n<html> <span style="font-size: 14px; "> <b> 마스킹과 섀도잉 </b> </span> </html>\n\n<html> <span style="font-size: 14px; "> <b> #. 오렌-나야르 모델 </b> </span> </html>\n(p.147) 마이클 오렌과 쉬리 K. 나야르는 1992년에 일반적인 람베르티안 모델(분산 조명을 계산하는 데 흔히 사용하는)을 확장하는 조명 모델을 발표했다(O-N 모델, 혹은 그냥 O-N으로 부르기도 한다).\n\n람베르티안 모델은 오직 빛의 위치와 표면 법선에만 의존한다. 이것은 몇몇 부드러운 표면에서는 맞지만, 진흙이나 콘크리트 같은 거친 표면에서는 맞지 않다.\n왜냐하면, 이들 경우에는 관찰자의 위치를 무시할 수 없기 때문이다.\n\n(p.148) O-N 모델은 표면이 개별적으로 완벽하게 난반사하는 매우 작은 극소-파셋으로 구성되었다고 가정한다. 이 모델은 파셋에 마스킹과 섀도잉을 채택하고 또한 내부 반사 요소(인접한 파셋들 끼리 반사되는 빛)를 추가한다.\n\n표면의 전체적인 밝기는 그것의 모든 파셋(일부는 다른 것에 의해 마스킹된다.) 밝기 강도들의 적분이다. 실시간으로 이 적분을 계산하기 위해서는 새로운 세대의 하드웨어를 기다려야만 한다.\n\n\n<html> <span style="font-size: 14px; "> <b> #. 쿡-토르란스 모델 </b> </span> </html>\n(p.157) 이 모델은 1981년에 발표되었고 1967년의 토르란스-스패로우 모델에 기반하고 있다. 쿡-토르란스(C-T) 모델은 종종 금속이나 플라스틱의 반영 하이라이트를 계산하는데 사용한다. 이것은 물리적으로 근거가 있는 방법으로 퐁 모델을 능가하는데, 이것은 실제 재질로부터 측정한 데이터를 사용해서 개발되었고 물리적으로 측정 가능한 요소인 에너지나 파장 같은 것을 사용하기 때문이다.\n\n쿡-토르란스 모델은 다음을 사용한다.\n\n▣ 표면 거칠기를 위한 극소-파셋 모델\n▣ 반사량과 하이라이트 색 변화를 계산하기 위한 프레넬 방정식\n▣ 스스로 섀도잉과 마스킹을 하는 극소-파셋을 위한 기하학적인 감쇠 요소\n\n이 모델에 대한 몇 가지 흥미로운 결론들이다.\n\n▣ 반영 하이라이트는 일반적으로 빛이 아닌 금속의 색을 가진다.\n▣ 프레넬 방정식은 번쩍이는 각도에서 반영 요소의 색 변환을 예측한다.\n▣ 몇몇 유형의 재질(페인트칠된 물체나 플라스틱들)은 같은 색을 가지지 않는 반영과 분산을 가진다.\n\n\n<html> <span style="font-size: 14px; "> <b> #. 결론 </b> </span> </html>\n(p.171) 앞에서 다룬 예제들은 Direct3D 9 셰이더가 현실적인 게임을 향한 보다 큰 진전임을 보여준다... 주요 장점은 __픽셀 셰이더에서의 부동소수점 정확도이다.__\n\n정점 셰이더 2.0은 게임을 위해 생겨났다 할 만큼 게임에 적합하다. 정점 셰이더 2.0에는 막대한 명령어 개수와 조건 분기가 포함되어 있어, 정점 당 조명이나 메쉬 스키닝 같은 기능을 가진 전체 장면을 표현하고자 한다면 단지 해당 함수에 적합한 명령어 한둘을 골라 사용하면 된다. 더 이상 정점 당 조명 때문에, 셰이더를 바꾸어서 다중패스 렌더일을 할 필요가 없게 된 것이다.\n\n픽셀 셰이더 2.0 구조는 진보된 픽셀 당 조명 모델을 수행할 수 있게 해준다. 64개의 산술 연산과 32비트 텍스처 명령어는 대부분의 게임에서 최소한으로 필요한 패스 개수를 유지하기에 충분하다.\n\n셰이더 3.0은 기능 면에서 훌륭하지만, 상수 레지스터의 상대 어드레싱이 결여되어 있기 때문에 픽셀 셰이더 측면에서는 약간 부족하다는 생각이 든다. 이러한 것만 보완된다면, (그림자 없는 세계 공간) 단일 패스에서 루프를 이용하여 픽셀 당 조명들의 임의의 개수를 계산할 수 있게 될 것이다(이것은 지금 디자인 시점에서 루프 언롤링으로 해결할 수 있다. 그러나 그것은 쉬운 일이 아니다).\n\n게임에서 셰이더 2.x 모델을 지원할지는 의문이다. 그것은 (그래픽) 카드에 의해 좌우되므로, 게임에서 이 셰이더들의 모든 잠재력을 사용할 수 있으려면 오로지 각 장치들의 기능별로 준비된 코드의 조각들을 병합하는 일종의 런타임 링커가 있어야만 가능하다.\n\n\n<html> <span style="font-size: 14px; "> <b> #. 참고 자료 </b> </span> </html>\n\n▷ [[도서_ShaderX² : DirectX 9 셰이더 프로그래밍]]
<html> <a name="DirectX_HLSL"> </a> </html>\n◇ Craig Peeper & Jason L. Mitchell\n<html>\n<a href="#DirectX_HLSL_fxc"> <span style="font-size: 12px;"> <b> 커맨드라인 컴파일러 - fxc </span> </a> <br>\n<a href="#DirectX_HLSL_ps_1_x_Compile"> <span style="font-size: 12px;"> <b> ps_1_x 컴파일 타겟의 사용 </span> </a> </html>\n\n\n<html> <span style="font-size: 14px; "> <b> #. 소개 </b> </span> </html> \n\n(p.026) HLSL(High Level Shading Language)은 DirectX 9에서 새로이 추가된 것들 중 가장 강력하다 할 수 있다... HLSL은 개발자가 하드웨어 세부사항까지도 알아야 하는 부담에서 해방시킴과 더불어, 쉬운 코드 재사용, 가독성 증가, 최적화된 컴파일러 등 여러 고급 언어의 장점들을 가지고 있다.\n\n\n<html> <span style="font-size: 14px; "> <b> #. 어셈블리 언어와 컴파일 타겟 </b> </span> </html> \n\n(p.029) DirectX 8.0과 DirectX 8.1에서 (vs_1_1과 ps_1_1 ~ ps_1_4로 이름 붙여진) 셰이더 모델로 작성된 프로그램은 어셈블리 언어로 작성되었으며 비교적 간결했다... 응용프로그램은 D3DXAssembleShader()를 통해 DX3D 라이브러리에 사람이 이해할 수 있는 어셈블리 언어 코드를 전달...\n\nDirectX9의 응용프로그램도 HLSL 셰이더를 D3DXCompileShader() API를 통해 D3DX에 전달...\n이렇게 생성된 이진 어셈블리 코드는 국한 사용자나 개발자 시스템의 그래픽 하드웨어에 독립적이다... 실제로 Direct3D 실행 모듈은 오로지 이진 어셈블러 셰이더 모델만을 실행하고 HLSL에 대해서는 관여하지 않는다. 이것은 HLSL 컴파일러를 D3D에 독립적으로 업데이트할 수 있다는 이점이 있는데, ...\n(p.030) 응용프로그램 개발자들은 이 새로운 모델(vs_2_0, vs_3_0, ps_2_0과 ps_3_0)들을 직접 어셈블리 언어를 사용하여 작업할 수도 있지만, 셰이더의 복잡도와 편의성을 감안할 때 많은 개발자들이 어셈블리보다는 HLSL을 통해 셰이더를 개발할 것으로 본다.\n\n<html> <span style="font-size: 12px; "> <b> 컴파일 실패 </b> </span> </html> \n(p.030) 앞서 언급했다시피, 주어진 HLSL 셰이더에서 특정한 컴파일 타켓에 컴파일이 실패했다는 것은 셰이더가 너무 복잡하여 특정 컴파일 타겟에서는 컴파일할 수 없다는 것을 의미한다.\n\n(p.031) 이것은 셰이더가 너무 많은 리소스를 요구하거나 선택된 컴파일 타켓이 지원하지 않는 동적 분기와 같은 특정 기능을 사용했다는 뜻이다. 예를 들어, 어떤 HLSL 셰이더가 셰이더에서 주어진 텍스처 맵을 6번 접근할 수 있게 작성되었다고 하자. 만일 이 셰이더가 ps_1_1 컴파일 타켓에서 컴파일한다면 ps_1_1 모델은 4개의 텍스처만 지원하므로 컴파일되지 않을 것이다. 또다른 컴파일 에러의 이유 중 대부분은 선택된 컴파일 타켓의 명령어 개수가 초과될 때 나타난다. HLSL에 표현된 알고리즘이 주어진 컴파일 타겟에서 실행될 때 너무 많은 명령어를 요구하는 것이다.\n\n여기서 강조하고 싶은 점은 컴파일 타켓을 결정하는 문제는 HLSL 문법의 사용 범위와는 무관하다는 것이다.\n... 물론, 결과 셰이더가 너무 길거나 컴파일 타겟의 리소스 제한을 초과할 경우 컴파일은 실패하게 된다.\n<html> <a name="DirectX_HLSL_fxc"> </a> </html>\n<html> <a href="#DirectX_HLSL"> <span style="font-size: 12px;"> <b> 커맨드라인 컴파일러 - fxc </span> </a> </html>\n(p.031) 많은 개발자들은 HLSL 셰이더를 D3DX로 유저들의 컴퓨터에서 프로그램이 로딩할 때 나 처음 실행될 때 컴파일하는 것보다 제품을 배포하기 전에 미리 이진 어셈블리 형태로 컴파일하는 것을 선호한다. 이렇게 하면 소스 코드를 이것저것 뜯어보기를 좋아\n하는 유저들로부터 숨길 수 있고, 실행되는 모든 셰이더들을 자체적으로 품질 검증 과정을 거치게 할 수 있기 때문이다.\n\nfxc 커맨드라인 컴파일러는 오프라인으로 셰이더를 컴파일할 수 있게 하는 편리한 유틸리티로 DirectX 9 SDK에서 찾아볼 수 있다. 이 유틸리티는 커맨드라인에서 사용할 수 있을 뿐만 아니라, 특정한 컴파일 타겟을 위한 디스어셈블된 코드를 생성할 수 있는 편리한 옵션들을 제공한다. 만일 셰이더를 최적화시키기를 원하거나 가상 셰이더 머신의 능력을 보다 자세히 알고 싶다면 디스어셈블된 결과물을 살펴보기 바란다.\n\n커맨드라인에서 사용 가능한 옵션들은 다음과 같다.\n|!커맨드라인 옵션 |!설명 |\n|-T target |컴파일 타겟(기본 값: vs_2_0) |\n|-E name |엔트리 포인트 name(기본 값: main) |\n|-Od |최적화하지 않음 |\n|-Vd |검증하지 않음 |\n|-Zi |디버깅 정보를 삽입 |\n|-Zpr |열 기준으로 행렬 정리 |\n|-Zpc |행 기준으로 행렬 정리 |\n|-Fo file |목적 파일 출력 |\n|-Fc file |생성된 코드의 출력 |\n|-Fh file |생성된 코드를 포함한 헤더의 출력 |\n|-D id = text |매크로 정의 |\n|-nologo |저작권 메시지를 출력하지 않음 |\n<profile>: vs_1_1 vs_2_0 vs_2_a vs_2_sw vs_3_0 vs_3_sw vs_4_0 vs_4_1\n&nbsp; ps_2_0 ps_2_a ps_2_b ps_2_sw ps_3_0 ps_3_sw ps_4_0 ps_4_1\n&nbsp; gs_4_0 gs_4_1 fx_2_0 fx_4_0 fx_4_1\n\n<html> <span style="font-size: 14px; "> <b> #. 언어의 기초 </b> </span> </html> \n...\n<html> <span style="font-size: 12px; "> <b> 벡터 데이터형 (Working with Vectors )</b> </span> </html> \n(p.034) HLSL 셰이더에서는 벡터 값을 많이 사용한다. 벡터 데이터형을 정의하는 방법은 다음과 같이 여러 가지가 있다.\n...\n\n4개의 float형 데이터를 정의하기 위해서 여러분은 다음 중 아무 것이나 사용하면 된다.\n{{wrappingClass{ float4 fVector0; &nbsp; &nbsp;\nfloat fVector1[4]; &nbsp; &nbsp;\nvector fVector2; &nbsp; &nbsp;\nvector <float, 4> fVector3; &nbsp; &nbsp; }}}\n\n개의 bool형의 데이터를 선언하고 싶다면 다음 중 아무 것이나 사용하면 된다.\n{{wrappingClass{ bool3 bVector0;\nbool bVector1[3];\nvector <bool, 3> bVector2; }}}\n\n벡터 값을 한번 정의한 후에는 인덱스 접근을 이용하거나 스위즐(swizzle)을 사용해서 직접 벡터의 성분을 명시하는 방식으로 그 성분들을 읽거나 쓸 수 있다.\n\n(p.035) Ps_2_0이나 더 낮은 픽셀 셰이더 모델에서는 임의의 스위즐을 기본으로 지원하지 않는다. 따라서 임의의 스위즐을 사용하는 간결한 고수준 코드를 스위즐이 지원되지 않는 타겟용으로 컴파일한다면 컴파일러는 상당히 지저분한 이진 어셈블리 코드를 생성할 것이다.\n\n<html> <span style="font-size: 12px; "> <b> Constructors </b> </span> </html> \n\n<html> <span style="font-size: 12px; "> <b> 형 변환 (type casting) </b> </span> </html> \n(p.039) 셰이더 코드를 쉽게 효율적으로 작성하려면 HLSL의 형 변환에 익숙해져야 한다. 유형을 정의할 때는 이미 주어진 값들과 대응하는 변수들을 취하거나 버려야 한다. 예들 들면, vResult를 초기화하고 싶을 때에는 float 0.0f로 선언해도 되고 float4(0.0f, 0.0f, 0.0f, 0.0f)로 선언해도 된다.\n\n<html> <span style="font-size: 12px; "> <b> Structures </b> </span> </html> \n\n<html> <span style="font-size: 12px; "> <b> 샘플러 (sampler) </b> </span> </html> \n(p.041) 픽셀 셰이더에서 사용하는 각각의 텍스처 맵에서 정보를 가져오기 위해서는 맵마다 sampler를 만드시 선언해주어야 한다. 앞서의 hlsl_rings() 셰이더를 상기해보자.\n{{{\nfloat4 lightWood; // 나무결 색상의 밝은 부분\nfloat4 darkWood; // 나무결 색상의 어두운 부분\nfloat ringFreq; // 나무결의 촘촘한 정도\nsampler PulseTrainSampler;\n\nfloat4 hlsl_rings (float4 Pshade : TEXCOORD0) : COLOR\n{\n float scaledDistFromZAix = sqrt(dot(Pshade.xy, Pshade.xy)) * ringFreq;\n float blendFactor = tex1D ( PulseTrainSampler, scaledDistFromZAix );\n return lerp ( darkWood, lightWood, blendFactor );\n}\n}}}\n(p.042) 이 셰이더에서는 PulseTrainSampler라는 전역 형태의 샘플러를 선언하고 이를 tex1D()라는 내장 함수의 첫 번째 매개변수로 사용했다.\n\n\n<html> <span style="font-size: 14px; "> <b> #. 내장 함수 (Intrinsics) </b> </span> </html> \n\n(p.043) 앞서 언급했던 것처럼 DirectX HLSL은 많은 내장 함수들을 가지고 있다. 수많은 내장 함수 중 수학 함수들은 코드 수를 줄이기 위해 (코딩을 편하게 하기 위해) 제공되는 반면, 위에서 언급한 tex1D()와 tex2D() 같은 종류의 것들은 데이터 샘플러를 통해 텍스처 데이터를 접근하기 위해서 제공된다.\n\n<html> <span style="font-size: 12px; "> <b> Math Intrinsics </b> </span> </html> \n<html> <span style="font-size: 12px; "> <b> Texture Sampling Intrinsics </b> </span> </html> \n\n\n<html> <span style="font-size: 14px; "> <b> #. 셰이더 입력 </b> </span> </html> \n\n(p.048) 정점 셰이더와 픽셀 셰이더는 varying과 uniform의 두 가지 입력 데이터형을 가진다.\nvarying 입력은 각 셰이더가 실행될 때마다 달리 적용되는 데이터이다. 정점 셰이더의 경우 varying 데이터(위치, 법선 등)는 정점 스트림에서 들어온다.\nuniform 데이터(개체의 색, 세계 변환 등)는 셰이더가 실행될 때마다 동일하게 적용되는 상수이다. \n어셈블리 모델로 보면 정점과 픽셀 셰이더에서 uniform 데이터는 상수 레지스터에 들어있는 값으로 볼 수 있고, varying 데이터는 v레지스터나 t레지스터에 들어있는 값으로 볼 수 있다.\n\n<html> <span style="font-size: 14px; "> <b> uniform 입력 </b> </span> </html> \n\n<html> <span style="font-size: 14px; "> <b> varying 입력 </b> </span> </html> \n(p.050) varying 데이터는 최상위 함수의 입력 매개변수에 의해 설정된다.\n\n(p.051) 입력 의미구조는 주어진 셰이더의 입력과 그래픽 파이프라인의 전 단계의 출력을 연결하기 위해 사용된 이름이다. 예를 들어, ''POSITION0''은 정점 셰이더에서 입력 데이터를 연결된 정점 버퍼에서 가져오기 위해서 사용된다.\n\n픽셀과 정점 셰이더는 각각의 셰이더 유닛으로 공급되는 그래픽 파이프라인이 다르기 때문에 다른 종류의 입력 의미구조들을 가진다. 정점 셰이더의 입력 의미구조는 정점 버퍼에서 읽어들인 각 정점의 정보를 정점 셰이더에서 쓸 수 있게 정점의 구조를 알려주는 역할을 한다(위치나 법선 벡터, 텍스처 좌표, 색상 값, 탄젠트 값, 종법선 등이 그렇다). 이런 입력 의미구조들은 정점 버퍼에 있는 정점의 구조를 기술하기 위해 사용된 D3DDECLUSAGE 열거형과 UsageIndex의 조합과 1대 1로 연결된다.\n\n픽셀 셰이더 입력 의미구조는 래스터화(rasterization) 유닛에 의해 각 픽셀에 제공된 정보에 기술한다. 이 데이터는 현재의 정점과 각각의 정점 셰이더의 출력의 보간으로 생성된다. 이러한 @@color(#0000FF): 기본 픽셀 셰이더 입력 의미구조는 입력 색과 텍스처 좌표계 정보를 입력 매개변수로 저장한다.@@\n\n입력 의미구조는 두 가지 방법으로 셰이더 입력과 연결될 수 있다.\n첫 번째 방법은 콜론(:)을 추가한 된 입력 의미구조의 이름으로 입력 매개변수 선언을 하는 방법이다.\n두 번째 방법은 입력 의미구조를 각각의 입력 구조체의 요소로 입력 구조체를 정의하는 것이다.\n\n\n<html> <span style="font-size: 14px; "> <b> #. 셰이더 출력 </b> </span> </html> \n\n(p.053) 정점 셰이더 출력물은 픽셀 셰이더와 래스터라이저를 연결하기 위해 사용된다. ''POSITION''은 정점 셰이더의 래지터라이저로 들어가서 보간된 결과 값을 만들어내지만 픽셀 셰이더에서는 등장하지 않는다. ''TEXCOORDn''과 ''COLORn''은 픽셀 셰이더에서 보간에 의해 생성된다.\n\n픽셀 셰이더의 출력은 해당 렌더링 대상의 출력 색상을 정의한다. 픽셀 셰이더에서 출력한 컬러 값은 출력될 렌더 타겟이 수정되는 방법을 결정하는 알파 블랜드 스테이지와 연결된다. DEPTH 출력 의미구조는 현재 래스터 위치의 깊이 값을 바꾸는 데 사용한다.\n\n출력 의미구조를 위한 문법은 입력 의미구조의 것과 다르지 않다. 의미구조들은 출력 매개변수로 직접 선언되거나 함수의 출력 매개변수 또는 반환 값으로 사용될 구조체에서 정의할 수 있다.\n{{{\n// 픽셀 셰이더에서 출력하는 세 가지 다른 방법들\nPS_OUT PSFunc1() { ... }\n\nvoid PSFunc2( \n out float4 Color : COLOR, out float Depth : DEPTH)\n{ \n...\n}\n\nvoid PSFunc3( out PS_OUT Out )\n{\n...\n}\n}}}\n\n<html> <span style="font-size: 14px; "> <b> #. 셰이더의 적용 예 </b> </span> </html> \n(p.055) 이제 NPR Metallic이라는 셰이더 예제를 살펴보자. 이 예제는 셀 애니메이션에서 보여지는 렌더링과 매우 유사하게 보인다.\n\n먼저, HLSL로 작성된 NPR Metallic 정점 셰이더에 대해서 살펴보자.\n{{{\nfloat4x4 view_proj_matrix;\n\nfloat4 view_position;\nfloat4 light0;\nfloat4 light1;\nfloat4 light2;\n\nstruct VS_OUTPUT\n{\n float4 Pos : POSITION;\n float3 View : TEXCOORD0;\n float3 Normal : TEXCOORD1;\n float3 Light1 : TEXCOORD2;\n float3 Light2 : TEXCOORD3;\n float3 Light3 : TEXCOORD4;\n};\n\nVS_OUTPUT main( float4 inPos : POSITION,\n float3 inNorm : NORMAL)\n{\n VS_OUTPUT Out = (VS_OUTPUT) 0;\n // 변환된정점위치를 출력한다.\n Out.Pos = mul( view_proj_matrix, inPos) ;\n \n Out.Normal = inNorm;\n \n // 시야벡터를계산한다.\n Out.View = normalize( view_position - inPos ) ;\n // 현재의정점위치로부터 각광원을향하는 세개의 벡터를구한다.\n Out.Light1 = normalize( light0 - inPos) ; // 광원 1\n Out.Light2 = normalize( light1 - inPos) ; // 광원 2\n Out.Light3 = normalize( light2 - inPos) ; // 광원 3\n \n return Out ;\n}\n}}}\n\n(p.057) {{wrappingClass{fxc /nologo /T vs_1_1 /Vd /Fc NPRMetallic_vs_1_1.txt NPRMetallic.vhl }}}\n\n이 정점 셰이더는 분기 제어 같은 것이 필요가 없기 때문에 vs_1_1을 컴파일 타겟으로 설정하였다. 또한, 코드 파일 생성과 검증을 생략하도록 플래그를 설정하였다. 다음의 코드는 이러한 결과로 생성된 코드이다.\n{{{\n//\n// Generated by Microsoft (R) HLSL Shader Compiler 9.19.949.1104\n//\n// fxc /nologo /T vs_1_1 /Fc NPRMetallic_vs_1_1.txt NPRMetallic.vhl\n//\n//\n// Parameters:\n//\n// float4 light0;\n// float4 light1;\n// float4 light2;\n// float4 view_position;\n// float4x4 view_proj_matrix;\n//\n//\n// Registers:\n//\n// Name Reg Size\n// ---------------- ----- ----\n// view_proj_matrix c0 4\n// view_position c4 1\n// light0 c5 1\n// light1 c6 1\n// light2 c7 1\n//\n\n vs_1_1\n dcl_position v0\n dcl_normal v1\n mul r0, v0.y, c1\n mad r0, c0, v0.x, r0\n mad r0, c2, v0.z, r0\n mad oPos, c3, v0.w, r0\n add r0, -v0, c4\n dp4 r0.w, r0, r0\n rsq r0.w, r0.w\n mul oT0.xyz, r0, r0.w\n add r0, -v0, c5\n dp4 r0.w, r0, r0\n rsq r0.w, r0.w\n mul oT2.xyz, r0, r0.w\n add r0, -v0, c6\n dp4 r0.w, r0, r0\n rsq r0.w, r0.w\n mul oT3.xyz, r0, r0.w\n add r0, -v0, c7\n dp4 r0.w, r0, r0\n rsq r0.w, r0.w\n mul oT4.xyz, r0, r0.w\n mov oT1.xyz, v1\n\n// approximately 21 instruction slots used\n}}}\n(p.058) 최종 결과가 저장되는 oPos, oT0, oT1, oT2, oT3과 oT4 레지스터에 대해서도 이해를 해야 한다. 이는 각각의 멤버에 부여되는 구조체를 이루는 함수를 만들어낸다. 꼭 필요하진 않지만, 개발 시 좀 더 최적화된 어셈블리 코드를 생성하는 HLSL\n을 작성하고자 한다면 fxc의 사용법을 이해하는 것이 좋다.\n\n<html> <span style="font-size: 14px; "> <b> #. 최적화 </b> </span> </html> \n\n(p.062) 셰이더를 빠르게 최적화시키기 위해서 기억해두어야 할 점은, __컴파일러는 컴파일러에게 요구한 대로 구현해주기 위해 존재한다__는 것이다. 다시 말해서 여러분이 요구한 대로 구현해주기 위해 존재한다는 것이다. 다시 말해서 여러분이 어떤 수학적인 연산을 한다거나 출력 성분의 특정 값을 얻기 위해서 셰이더를 짠다면, 단지 지시한 연산만을 수행해야 한다. 컴파일러는 사용하지 않는 코드들을 잘 찾아내서 제거할 수는 있지만, 셰이더가 넘겨주는 값이 어떻게 쓰일지 까지는 스스로 알 수 없다.\n\n(p.063) 또 한 가지 셰이더의 성능 향상을 위해 매우 중요한 것은, __값이 바뀌어야 할 곳만 계산하여 바꾸는지를 확인하는 것이다.__ 만약 픽셀 당 계산을 정점 당 계산으로 대체할 수 있다면 그렇게 하라. 이 최적화 방법은 종종 이런 종류의 연산들에서 최대의 효과를 거두어들인다.\n\n<html> <span style="font-size: 12px; "> <b> 행렬 데이터형의 사용법 </b> </span> </html> \n(p.063) HLSL이 C 표준과 크게 다른 점은 벡터와 행렬의 데이터형에 있다... 벡터 데이터형의 사용은 컴파일러가 벡터에 관련된 명령을 쉽게 처리할 수 있도록 해 준다.\n\n셰이더를 행렬 대신에 벡터의 배열로 적용하고자 한다면, 행렬을 행렬형 데이터로 저장하는 것을 추천한다. 행렬형의 데이터를 사용하면 컴파일러는 행렬이 사용되는 형태에 따라 내장된 행렬을 각각의 행과 열의 순서로 저장한다. 이러한 최적화는 각각의 픽셀 또는 정점 셰이더를 생성하는 데 매우 유용하다. 앞서 언급했던 것처럼 입력 행렬의 경우에, 컴파일러는 기본적으로 행을 기준으로 하여 행렬을 저장한다.\n\n<html> <span style="font-size: 12px; "> <b> 정수 데이터형의 사용법 </b> </span> </html> \n(p.064) 정수 값이라는 것을 명시하려는 목적으로 int 데이터형이 추가되었다. 입력 데이터를 부동 소수점 데이터로 다루지 않는 이상 사용할 모든 입력 데이터는 int로 정의해야 한다. 예를 들어 정점 스트림으로부터 읽어온 행렬 팔레트 인덱스들은 int로 표시되어야 한다.\n\n<html> <span style="font-size: 12px; "> <b> 조건 분기와 성능 </b> </span> </html> \n(p.065) 대부분의 기존 정점 및 픽셀 셰이더 하드웨어들은 조건 분기를 지원하지 않는다. 그 하드웨어들은 셰이더가 순차적으로 실행되고 각각의 명령어를 한 번에 하나씩 실행하도록 설계된 것이다... HLSL이 다양한 조건 분기를 지원할 수 있도록 컴파일될 수 있지만, 제한된 모델에서만 실행할 수 있다는 것을 염두에 두어야 한다. \n\n루프는 셰이더에서 거의 볼 수 없다. 특정 하드웨어의 경우에는 정적이나 동적 루프를 지원하지만, 대부분은 순차적인 실행만을 지원한다. 루프를 지원하지 않는 모델의 경우에는 모든 루프는 전개된다... 고성능의 셰이더를 작성하기 위하여 컴파일러가 루프를 펼쳐주는 작업을 하는 데 사용될 수 있지만, 명령어 수 제한에 걸린다거나 반복 수가 너무 많아 성능이 저하될 수 있다는 것을 염두에 두어야 한다.\n\nIf 구문을 사용하는 것은 대부분의 어셈블리 수준의 셰이더 모델에서 많은 연산을 필요로 한다. 분기를 지원하지 않는 모델의 경우에는 if 구문의 양쪽 모두가 실행되며, 각각의 출력 결과에 따라서 선택되어 실행된다. CPU 프로그래밍 관점에서 보았을 때, 이러한 형태의 실행은 HLSL 작성자가 원하는 실행 형태가 아니다.\n\n<html> <span style="font-size: 12px; "> <b> 입력 데이터형 선언의 중요성 </b> </span> </html> \n(p.067) 셰이더 작성자들은 흔히 정점 데이터가 셰이더의 입력 레지스터로 로드될 때 자동으로 데이터에 없는 값들이 float4형에 맞게 채워진다는 것을 이용하여 최적화를 한다... 위치 입력 매개변수가 float3으로 정의되어 있다면 w 성분에 1.0을 넣어줄 추가적인 명령어가 필요하다. 매개변수가 float4로 정의되어 있다면 하드웨어가 입력 레지스터를 저장하면서 자동으로 1.0으로 설정할 것이다.\n\n또 다른 최적화 과정은 셰이더에서 모든 입력 매개변수의 데이터형을 확실히 선언해주는 것이다. 예를 들어 들어오는 데이터가 정수형이고, 이 데이터가 메모리 주소 연산을 목적으로 사용된다면, 이를 int형으로 설정해야 float형으로 자동 변환되는 일이 없을 것이다.\n\n<html> <span style="font-size: 12px; "> <b> 정밀도 문제(logp, expp, lit) </b> </span> </html> \n(p.068) vs_1_1이나 vs_2_0 같은 다른 셰이더의 경우에는 저정밀도 버전의 명령어가 따로 있다. logp, expp와 lit은 log, exp와 pow 함수의 저정밀도 버전이다. 어떤 하드웨어에서는 저정밀도와 고정밀도 함수의 수행 시간의 차가 크게 나는 것도 있다. log와 exp를 수행하기 위해서는 10개의 명령어가 필요하지만, logp, expp는 단 한 개의 명령어만 있으면 된다... 이러한 @@color(#0000FF): 저정밀도의 명령어를 사용하려면 half라는 저정밀도 데이터형으로 캐스팅하여 저장하면 된다.@@ 이 저정밀도로 결과를 받으려면 컴파일러는 가능한 저정밀도 버전의 명령어를 사용하여 계산해야 할 것이다.\n<html> <a name="DirectX_HLSL_ps_1_x_Compile"> </a> </html>\n<html> <a href="#DirectX_HLSL"> <span style="font-size: 12px;"> <b> ps_1_x 컴파일 타겟의 사용 (Using the ps_1_x Compile Targets) </span> </a> </html>\n(p.068) ps_1_x 컴파일 타겟에 대하여 기억해야 할 첫 번째 점은 하드웨어가 임의의 스위즐들을 지원하지 않는다는 것이다. 이런 제한은 스위즐을 쓰게 되면 항상 추가적인 명령어들이 따라붙게 된다는 것을 의미한다. 이런 명령어들이 추가되다보면 해당 컴파일 타겟이 지원할 수 있는 최대 명령어 수를 쉽게 초과해버리곤 한다...\nPs_1_4 컴파일 타겟은 복제 스위즐과 임의의 쓰기 마스크를 지원한다.\n(p.069) 이것들은 ps_1_x 컴파일 타겟들을 대상으로 HLSL 코드를 작성할 때의 참고 사항일 뿐이다. ps_1_x 타겟이 임의의 스위즐 지원이 안되더라도 source 나 dest 수정자를 0부터 1까지로 값을 자른다거나 source의 보수를 취한다거나 부호를 바꾸고 보정을 하는 등의 작업을 추가적인 부담 없이 수행할 수 있다. 이런 수정자들은 적은 수의 명령어들로 셰이더를 생성해야 할 때 매우 유용하다.\n\nWe now present a series of HLSL code sequences that generate free source modifiers when compiling to ps_1_x targets.\n\n''The _bx2 Modifier''\nThere are a number of different HLSL code sequences that can be used to cause the HLSL compiler to generate _bx2 modifiers. Any of the following main functions will cause the compiler to generate a _bx2 modifier:\n{{{\nfloat4 main( float3 Col : COLOR0, float3 Tex : TEXCOORD0 ) : COLOR0\n{\n return dot(Col, Tex*2 - 1);\n}\n\nfloat4 main( float3 Col : COLOR0, float3 Tex : TEXCOORD0 ) : COLOR0\n{\n float3 val = Tex*2;\n val = val -1;\n return dot(Col,val);\n}\n\nfloat4 main( float3 Col : COLOR0, float3 Tex : TEXCOORD0 ) : COLOR0\n{\n return dot(Col, (Tex -.5f)*2);\n}\n}}}\nAll of these main functions generate the same asm shader:\n\nps_1_1\ntexcoord t0\ndp3 r0, v0, t0_bx2\n\nIt is important to note that the Tex*2 -1 version is recommend because it generates more optimal code in ps_2_0 targets and beyond.\n\n''The _bias Modifier''\nThe following code causes the HLSL compiler to generate a _bias modifier:\n{{{\nfloat4 main( float3 Col : COLOR0, float3 Tex : TEXCOORD0 ) : COLOR0\n{\n return dot(Col, (Tex - .5f));\n}\n}}}\nThis main function generates the following assembly shader:\n\nps_1_1\ntexcoord t0\ndp3 r0, v0, t0_bias\n\nNote that _bias cannot be done in ps_1_1, ps_1_2, or ps_1_3 unless the source is known to be in the range of 0 to 1. That is, it must have been previously saturated.\n\n''The _x2 Modifier (ps_1_4 only)''\nThe following code causes the HLSL compiler to generate an _x2 source modifier:\n{{{\nfloat4 main( float3 Col : COLOR0, float3 Tex : TEXCOORD0 ) : COLOR0\n{\n return dot(Col, Tex*2);\n}\n}}}\nThis HLSL code results in the following asm shader code:\n\nps_1_4\ntexcrd r0.xyz, t0\ndp3 r0, v0, r0_x2\n\n'' The _x2, _x4, _x8, _d2, _d4, and _d8 Destination Write Modifiers''\nA set of destination write modifiers exists in the ps_1_x models, and it is possible to write HLSL code to cause the compiler to generate them in the resulting asm. The modifiers to double (_x2), quadruple (_x4), and halve (_d2) the result of the instruction are supported on ps_1_1 through ps_1_3 models, while the ps_1_4 model supports all six of the modifiers — _x2, _x4, _x8, _d2, _d4, and _d8. The following code will generate the corresponding modifiers for N = 2, 4, 8, 0.5, 0.25, or 0.125:\n{{{\nstatic const float N = 2;\n\nfloat4 main( float4 Col[2] : COLOR0 ) : COLOR0\n{\n return (Col[0] + Col[1] )*N;\n}\n}}}\nThe above HLSL code results in the following asm output:\n\nps_1_1\nadd_x2 r0, v0, v1\n\n''The Complement Modifier''\nIt is also possible to write HLSL code that allows the compiler to generate a complement modifier when compiling to a ps_1_x target. Note that this only works if the quantity being complemented is known to be in the 0 to 1 range (i.e., the quantity has previously been saturated). The following HLSL code causes the compiler to generate a free complement modifier:\n{{{\nfloat4 main( float4 Col[2] : COLOR0 ) : COLOR0\n{\n return (1-Col[0]) * (Col[1]);\n}\n}}}\nThis HLSL code results in the following asm shader:\n\nps_1_1\nmul r0, 1-v0, v1\n\n''The Saturate Modifier''\nThe following two shaders generate a _sat modifier. Note that this modifier is available on all pixel shader compile targets:\n{{{\nfloat4 main( float4 Col[2] : COLOR0 ) : COLOR0\n{\n return saturate(Col[0]);\n}\n\nfloat4 main( float4 Col[2] : COLOR0 ) : COLOR0\n{\n return clamp(Col[0],0,1);\n}\n}}}\nBoth of these HLSL shaders result in the following asm shader:\n\nps_1_1\nmov_sat r0, v0\n\n'' The Negate Modifier ''\nThe following shader generates a negate modifier, which is also available on all shader targets.\n\n{{wrappingClass{ ''NOTE'' On ps_1_x, constant registers cannot be directly negated and hence will not result in a single free negation, since the constant will have to be moved to a temp before it can be negated. }}}\n{{{\nfloat4 main( float4 Col[2] : COLOR0 ) : COLOR0\n{\n return -Col[0];\n}\n}}}\nThis HLSL code will result in the following asm shader:\n\nps_1_1\nmov r0, -v0\n\n\n<html> <span style="font-size: 12px; "> <b> ps_1_x 타겟을 위한 전략 (Strategy for Targeting ps_1_x) </b> </span> </html> \nps_1_x 컴파일 타겟에서 최적화하는 방법 중 하나는 @@color(#FF0000): 먼저 셰이더를 ps_2_0으로 작성하는 것이다.@@ 이는 ps_2_0이 적용되는 하드웨어에서는 쉽고 빠르게 원형을 만들 수 있기 때문인데, 셰이더가 원하는 대로 작동이 된다면 다시 이를 원하는 ps_1_x 모델로 크로스 컴파일하면 된다. Fxc.exe를 사용할 때 검정 옵션을 사용하지 않으면, ps_1_x 모델엑서 제한이 없을 경우 생성될 명령어들이 얼마나 많은지를 확인할 수 있다. 셰이더가 적용되지 않는다 하더라도 효율적인 ps_1_x용 셰이더 코드를 얻고 실행하기 위해 어떤 불필요한 부분들이 있는지를 확인할 수 있다.\n\n\n<html> <span style="font-size: 14px; "> <b> #. D3DX Effect를 사용하여 엔진에 적용하기 </b> </span> </html>\n \n(p.073) D3DX 라이브러리 중 D3DX Effect 프레임웍은 전문 개발자들의 많은 관심을 받고 있는데 DirectX 9 버전 D3DX Effect는 HLSL의 지원 부분이 더 추가되어 있다. D3DX Effect는 3차원 응용프로그램에서 특수 효과 등을 편하게 렌더링할 수 있게 감씨놓을 목적으로 추상화된 인터페이스이다. Effect는 렌더링 스테이트(Rendering state)뿐만 아니라 이전 버전들의 하드웨어를 지원하기 위한 부분까지 포함되어 HLSL이나 asm으로 짜놓은 셰이더들까지 사용할 수 있다. @@color(#0000FF): Effect는 일반적인 경우 하나의 .fx 또는 .fxl 파일로 저장되고, 그 파일 자체가 techniques라는 다양한 버전의 Effect들을 담게 된다. @@\n\n<html> <span style="font-size: 14px; "> <b> Effect API </b> </span> </html> \n(p.078) 이제 이것들을 응용프로그램 코드에서 사용해보자. 제일 먼저 해야 할 것은 D3DXCreateEffectFromFile() API를 사용하여 Effect를 작성하는 것인데, 이 과정이 성공적으로 수행되면 Effect에 필요한 변수들을 Effect API를 통하여 설정할 수 있게 된다.\n\n\n<html> <span style="font-size: 14px; "> <b> #. D3DX Effect를 사용하지 않고 엔진에 적용하기 </b> </span> </html>\n\n(p.080) HLSL 셰이더 관리를 위한 D3DX Effect가 매우 편하기는 하지만 반드시 필요한 것은 아니다. \n...\n이는 D3DXAssembleShader*() 루틴