2012/05/24

Windows Gadget에 HTML5 적용하기

Windows Gadget에 HTML5를 적용하는 방법을 찾아 보았다.

검색을 해 보았지만 쉽게 나오지 않았다. 어렵사리 찾았는데 방법이 생각보다 쉬웠다. 레지스트리를 수정하는 것도 아니고 단순히 HTML 파일에 아래 내용만 더 기술하면 되는 것이였다.

<!DOCTYPE html>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>





물론 시스템에 IE9가 설치 되어 있어야 한다.



HTML5의 중요한 속성중 하나인 Canvas를 테스트 해 봤다.

(HTML5 Canvas 소스 출처: http://www.w3schools.com/html5/html5_canvas.asp)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta http-equiv="Content-Type" content="text/html; charset=Unicode" />
<style type="text/css">
body
{
margin: 0;
width: 200px;
height: 100px;
font-family: verdana;
font-weight: bold;
font-size: 20px;
}
#gadgetContent
{
margin-top: 0px;
width: 100%: middle;
text-align: center;
overflow: hidden;
}
</style>
</head>

<body>
<div id="gadgetContent">
Canvas
<canvas id="myCanvas" width="200" height="50"></canvas>
</div>
</body>

<script type="text/javascript">
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var grd=ctx.createLinearGradient(0,0,175,50);
grd.addColorStop(0,"#FF0000");
grd.addColorStop(1,"#00FF00");
ctx.fillStyle=grd;
ctx.fillRect(0,0,175,50);
</script>
</html>




실행한 결과 아래와 같이 HTML5 Canvas위에 그라데이션이 그려졌다.

&

Original Post : http://neodreamer-dev.tistory.com/657

SQLite Release 3.7.12.1

SQLite 가 3.7.12 버전을 공개한지 얼마 되지 않아 다시 3.7.12.1 버전을 공개하였다.



SQLite Release 3.7.12.1 On 2012 May 22 (3.7.12.1)

  • Fix a bug (ticket c2ad16f997) in the 3.7.12 release that can cause a segfault for certain obscure nested aggregate queries.

  • Fix various other minor test script problems.

  • SQLITE_SOURCE_ID: "2012-05-22 02:45:53 6d326d44fd1d626aae0e8456e5fa2049f1ce0789"

  • SHA1 for sqlite3.c: d494e8d81607f0515d4f386156fb0fd86d5ba7df

SQLite Homepage

SQLite Download pag

Original Post :
http://neodreamer-dev.tistory.com/656

2012/05/23

Windows gadget 만들기 - Hello Widget


Windows 7 에서 Gadget을 어떻게 만드는지 살펴 보았다.


Windows의 Gadget은 HTML 과 CSS 그리고 Javascript로 구성된다.






Windows의 Gadget은 종류에 따라 존재하는 위치가 다르다.


Windows gadget은 %programfiles%\Windows Sidebar\Gadgets

공유 gadget은 %programfiles%\Windows Sidebar\Shared Gadgets

그리고 사용자가 만든 User gadget은 %LOCALAPPDATA%/Microsoft/Windows Sidebar/Gadgets 에 위치한다.






Gadget은 Gadgets 폴더 안에 {Gadget Name}.gadget 형태로 구성되고, .gadget 폴더 안에는 Gadget의 Manifest를 기술한 gadget.xml 파일과 Gadget의 본체인 .html 파일들로 구성된다.






간단하게 Hello Gadget 이라는 문구를 출력하는 Gadget을 만들어 보았다.

사용자 Gadgets 폴더에 HelloGadget.gadget 폴더를 만들고 Manifest 파일인 gadget.xml 파일과 Gedget의 본체인 HelloGadget.html 파일을 위치시켰다. 




HelloGadget.gadget


gadget.xml


HelloGadget.html



Gadget의 전반적인 구성을 기술한 Manifest 파일은 XML 형태로 작성되며 Gadget의 정보와 본체를 기술한 HTML 파일을 담고 있다. 

<?xml version="1.0" encoding="utf-8" ?>
<gadget>
<name>Hello Gadget</name>
<namespace>neodreamer.gadget</namespace>
<version>0.0.0.1</version>
<author name="NeoDreamer">
<info url="http://neodreamer.tistory.com" />
<logo src="logo.png" />
</author>
<copyright>© NeoSoft.</copyright>
<description>Hello Gadget Example</description>
<icons>
<icon height="48" width="48" src="icon.png" />
</icons>
<hosts>
<host name="sidebar">
<base type="HTML" apiVersion="1.0.0" src="HelloGadget.html" />
<permissions>Full</permissions>
<platform minPlatformVersion="1.0" />
<defaultImage src="icon.png" />
</host>
</hosts>
</gadget>



 

Manifest에 담겨있는 각각 태그 항목의 의미는 아래 이미지와 같다. 

Manifest의 태그 설명

Manifest의 태그 설명 (출처: MSDN)



태그에 대한 보다 자세한 설명은 MSDN을 참고 하면 된다.

http://msdn.microsoft.com/en-us/library/ff486356(v=vs.85)



Gadget의 본체를 구현한 HTML 파일은 아래처럼 간단한 내용을 담고 있다.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Unicode" />
<style type="text/css">
body
{
margin: 0;
width: 130px;
height: 75px;
font-family: verdana;
font-weight: bold;
font-size: 20px;
}
#gadgetContent
{
margin-top: 20px;
width: 130px;
vertical-align: middle;
text-align: center;
overflow: hidden;
}
</style>
</head>

<body>
<div id="gadgetContent">
Hello Gadget!!
</div>
</body>
</html>





이렇게 작성 된 Gadget을 사용하려면 바탕화면에서 오른쪽 버튼을 클릭하면 나오는 메뉴에서 Gadgets 메뉴를 선택한다. 그러면 나타나는 Gadget목록 대화상자가 보여진다. 


바탕화면 오른쪽 팝업 메뉴

바탕화면 오른쪽 팝업 메뉴

Gadget 목록 대화상자

Gadget 목록 대화상자


목록 중 원하는 Gadget에서 오른쪽 버튼을 클릭하여 나오는 메뉴에서 Add 메뉴를 선택하면 바탕화면에 추가한 Gadget이 보여진다.


Gedget 팝업 메뉴

Gedget 팝업 메뉴

추가된 Hello Gadget!!

추가된 Hello Gadget!!

 




Gadget은 시스템의 Sidebar에 생성이 되는 것으로 Vista에서는 출력 영역이 제한되었었지만 Windows 7으로 넘어오면서 제한이 풀려 바탕화면 어디에나 위치할 수 있다.



Gadget을 편집하기 위해서는 먼저 바탕화면에서 Gadget을 제거하고 수정한 다음 다시 추가해야 한다. 그렇지 않고 바탕화면에 추가된 상태에서 HTML 파일을 수정하면 반영이 되지 않는다.



HTML과 CSS 그리고 Javascript로만 구성되어 구현 범위가 상당히 제한적이지만 HTML5나 ActiveX 를 이용한다면 좀 더 확장할 수 있을 것 같다.


<

Original Post : http://neodreamer-dev.tistory.com/655

영문 폰트 한글 연결하기

영문 운영체제를 사용하면서 코딩용으로 Consolas를 즐겨 쓰는데 편집기에서 폰트를 Consolas로 설정하였는데 한글이 깨져 보였다.


이를 해결하기 위해서는 Registry를 수정해야 한다. 수정 해야할 레지스트리는 아래와 같다.


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink


이 위치에 Multi-String Value를 추가 한다.


Value 이름에 한글 폰터 연결이 필요한 영문 폰트명을 입력하고 Value 데이터에 링크를 할 한글 폰트를 나열한다.





시스템에 적용을 하기 위해서는 Log in을 다시해야 한다.

&

Original Post : http://neodreamer-dev.tistory.com/654

2012/05/21

WTL 8.1.12085 Release

WTL이 오랜만에 업데이트 되었다.

몇 달 전에도 11324버전이 공개가 되었었는데 하도 업데이트가 되지 않는 프로젝트라 몰랐었다.



변경된 내용은 아래와 같다. (source forge 로부터 발췌)

WTL 8.1 build 12085 (3/25/2012)





Changes:






Support for VC++ 11 Beta:


- DLL version functions are again undefined as they are removed from ATL11


- AppWizard setup scripts for VC++ 11 and VC++ 11 Express






AppWizard: Added code to default.js to add trailing backslashes to output and intermediate


directories for VS2010 and later






Work for #3485171 - Consolidate _ATL_MIN_CRT specific code in WTL


Implemented common _ATL_MIN_CRT code in MinCrtHelper napespace in atlapp.h


+ moved declaration of WM_MOUSEHWHEEL from atlscrl.h to atlapp.h






atlddx.h: Removed DDX_INDEX for VC6 - it just cannot deal with specialized template functions






atlribbon.h: Fix for x64 warning






Fix for #3424418 - MSG_WM_SYSCOMMAND handler prototype doesn't match.


http://sourceforge.net/projects/wtl/ 





<

Original Post : http://neodreamer-dev.tistory.com/653

2012/05/16

SQLite Release 3.7.12

Release 3.7.12 On 2012 May 14



  • Add the SQLITE_DBSTATUS_CACHE_WRITE option for sqlite3_db_status().

  • Optimize the typeof() and length() SQL functions so that they avoid unnecessary reading of database content from disk.

  • Add the FTS4 "merge" command, the FTS4 "automerge" command, and the FTS4 "integrity-check" command.

  • Report the name of specific CHECK constraints that fail.

  • In the command-line shell, use popen() instead of fopen() if the first character of the argument to the ".output" command is "|".

  • Make use of OVERLAPPED in the windows VFS to avoid some system calls and thereby obtain a performance improvement.

  • More aggressive optimization of the AND operator when one side or the other is always false.

  • Improved performance of queries with many OR-connected terms in the WHERE clause that can all be indexed.

  • Add the SQLITE_RTREE_INT_ONLY compile-time option to force the R*Tree Extension Module to use integer instead of floating point values for both storage and computation.

  • Enhance the PRAGMA integrity_check command to use much less memory when processing multi-gigabyte databases.

  • New interfaces added to the test_quota.c add-on module.

  • Added the ".trace" dot-command to the command-line shell.

  • Allow virtual table constructors to be invoked recursively.

  • Improved optimization of ORDER BY clauses on compound queries.

  • Improved optimization of aggregate subqueries contained within an aggregate query.

  • Bug fix: Fix the RELEASE command so that it does not cancel pending queries. This repairs a problem introduced in 3.7.11.

  • Bug fix: Do not discard the DISTINCT as superfluous unless a subset of the result set is subject to a UNIQUE constraint and it none of the columns in that subset can be NULL. Ticket 385a5b56b9.

  • Bug fix: Do not optimize away an ORDER BY clause that has the same terms as a UNIQUE index unless those terms are also NOT NULL. Ticket 2a5629202f.

  • SQLITE_SOURCE_ID: "2012-05-14 01:41:23 8654aa9540fe9fd210899d83d17f3f407096c004"

  • SHA1 for sqlite3.c: 57e2104a0f7b3f528e7f6b7a8e553e2357ccd2e1





SQLite 3 Homepage

SQLite 3 Download Page&

Original Post : http://neodreamer-dev.tistory.com/652

2012/05/14

[MFC] CListCtrl 모든 컬럼 삭제하기

CListCtrl 의 모든 컬럼을 삭제하는 코드이다.

첫 번째 컬럼을 삭제하고  다머지 컬럼이 이동 되므로 0번 컬럼을 실패할 때까지 계속 삭제한다.

while ( m_list.DeleteColumn(0) );
<

Original Post : http://neodreamer-dev.tistory.com/651

2012/05/12

[C++] 디렉토리 존재 검사 및 생성

주어진 파일 또는 경로의 존재 유무를 확인하고 필요에 따라 상위 경로부터 생성을 하는 함수


//////////////////////////////////////////////////////////////////////////
/**
@brief checkPath

@details
Path 존재 유무 검사 및 생성

@param[in] strAbsFullPath 검사를 하고자 하는 전체경로 (파일명 포함)
@param[in] bCreate 존재하지 않을 경우 폴더 생성 여부

@return
0: 주어진 경로가 존재
-1: 주어진 경로가 존재하지 않음 (bCreate == false 일경우)
-2: 주어진 경로 생성 시도 실패
*/
int checkPath( const CString& strAbsFullPath, bool bCreate )
{
TCHAR Drive[_MAX_DRIVE];
TCHAR Path[_MAX_DIR];
TCHAR Filename[_MAX_FNAME];
TCHAR Ext[_MAX_EXT];
_tsplitpath_s(strAbsFullPath
, Drive, _MAX_DRIVE
, Path, _MAX_DIR
, Filename, _MAX_FNAME
, Ext, _MAX_EXT
);

TCHAR szFullPath[_MAX_PATH];
_stprintf_s( szFullPath, _MAX_PATH, _T("%s%s\0"), Drive, Path );

// Check Directory
if ( _taccess( szFullPath, 0 ) == 0 ) // If Exists
{
return 0;
}

if ( bCreate )
{
TCHAR* pPath = szFullPath;
TCHAR* pCur = szFullPath;
while ( true )
{
if ( *pCur == _T('\') || *pCur == _T('/') || *pCur == _T('\0') )
{
TCHAR ch = *pCur;
*pCur = _T('\0');

// Check Directory
if ( _taccess( pPath, 0 ) != 0 ) // If Not Exists
{
if ( ::CreateDirectory( pPath, NULL ) == FALSE )
{
return -2; // Fail to create Directory
}
}

*pCur = ch;

if ( *pCur == _T('\0') )
{
break;
}
}
++pCur;
}
}
else
{
return -1; // Directory is Not Exist
}

return 0;
}
<

Original Post : http://neodreamer-dev.tistory.com/650

2012/05/02

OpenCV 2.4.0 Released





OpenCV 의 행보가 빨라졌다.



얼마전 2.4 beta 버전을 공개했는데 얼마 지나지 않아 2.4 정식 버전을 공개헸다.



공식 홈페이지도 개설을하고 여러가지고 활동이 활발해졌다.

2.4 beta 후로 변경된 사항


  • OpenCV now provides pretty complete build information via (surprise) cv::getBuildInformation().



  • reading/writing video via ffmpeg finally works and it's now available on MacOSX too.

    note 1: we now demand reasonably fresh versions of ffmpeg/libav with libswscale included.

    note 2: if possible, do not read or write more than 1 video simultaneously (even within a single thread) with ffmpeg 0.7.x or earlier versions, since they seem to use some global structures that are destroyed by simultaneously executed codecs. Either build and install a newer ffmpeg (0.10.x is recommended), or serialize your video i/o, or use parallel processes instead of threads.



  • MOG2 background subtraction by Zoran Zivkovic was optimized using TBB.



  • The reference manual has been updated to match OpenCV 2.4.0 better (though, not perfectly).




  • Asus Xtion is now properly supported for HighGUI. For now, you have to manually specify this device by using VideoCapture(CV_CAP_OPENNI_ASUS) instead of VideoCapture(CV_CAP_OPENNI).





http://code.opencv.or

Original Post :
http://neodreamer-dev.tistory.com/649