카테고리 없음2012. 4. 24. 10:24


기존 <html> 로 시작하던 html 문서와는 달리 웹표준에 맞춘 XHTML 언어로 웹페이지를 제작하기 위해서는 상단에 DOCTYPE 선언(이하 DTD선언) 을 해주어야 한다.
이 선언을 해주는 이유는 브라우저에게 어떤 언어로 제작되었는지를 알려주는 것이기 때문에 매우 중요하며 브라우저는 선언을 통해서 해당 웹페이지를 어떤 식으로 표현해주어야 하는지 판단하게 된다.

만약 XHTML 1.1 로 제작된 웹페이지라고 DTD선언을 해놓고 사실은 HTML 언어로 웹페이지를 제작했다면 브라우저는 자동적으로 해당 웹페에지가 XHTML 1.1 로 제작되지 않은 웹페이지임을 인식하게 됨으로 출력상으로 큰 문제는 없을지 모르겠지만 웹표준에 맞지 않는 웹페이지가 되므로 비교적 관대한 IE와는 달리 다른 브라우저에서는 사이트가 제대로 출력되지 않는 문제가 발생할 수 있음을 분명히 알아야한다. 

기존의 문법을 살펴보자면

<html> - 시작
<head>
<title>브라우저 제목</title>
</head> 

<body> 
</body>
</html>

의 형식이지만 웹표준에 맞추어서 제작된 페이지의 경우에는


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset="utf-8">
<title>  </title>
</head>

<body>
</body>


위의 처럼 상단에 DTD선언을 하고 (위의 경우에는 "엄격한" 버젼이다.) 
사용된 xml 언어가 무엇인지를 html 속성을 사용하여 지정해주었음을 볼 수 있다.
<head> 태그 아래에는 <meta> 태그가 들어가며 그 다음이 <title> 그리고 <style> 태그가 각각 자리잡는다.
meta 태그를 명시하는 이유는 컨텐트 타입을 명시하기 위해서 명시해주는 것이며, 이 태그를 통하여 웹페이지의 컨텐트 타입을 브라우저에게 알려줄 수 있으며, charset 을 통해 문자 인코딩을 알려줄 수 있다.
 xml 속성을 선택해주는 이유는 많은 사람들이 xml언어를 생성할 수 있으므로 우리가 사용하는 언어가 무엇인지 결정하는 유일한 식별지를 제공하고, 우리가 사용하는 식별지가 바로 http://www.w3.org/1999/xhtml 이다. 


아래에는 각각의 DTD선언에 대해서 나열한 것이니 사이트 제작시 참고하면 유용하다.
특히 기존에 아무런 문제없이 출력되던 레이아웃이 DTD선언 이후 갑자기 깨져서 보인다면 레이아웃에 맞지 않는 DTD선언을 했을 수도 있으므로 자신이 사용하는 레이아웃에 맞는 형태의 DTD선언을 하는 것이 좋다.

  • HTML 4.01 Transitional - HTML 4.01 버젼의 DTD선언
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  • HTML 4.01 Strict - HTML 4.01 버젼의 엄격한 DTD선언
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
  • XHTML 1.0 Transitional - 기존 HTML의 장점을 사용할 때 그리고 Lynx등 CSS를 이해못하는 브라우저에서의 호환성을 고려할때 사용합니다.
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  • XHTML 1.0 Frameset - HTML Frame(프레임)을 문서내에서 사용코자 할때에는 Frameset DTD을 사용합니다. HTML 엘레멘트의 컨텐트(content) 모델을 제외하고는 HTML 4.01 과도기적(transitional) DTD와 같은데, 프레임세트(frameset) 문서에서는 "BODY"  엘레멘트 자리에 "FRAMESET" 엘레멘트를 사용합니다.
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 
  • XHTML 1.0 Strict - 완벽한 XML호환의 XHTML문서 (v1.0)를 작성할시 가장 엄격한 문서 정의(Strict DTD)를 지정합니다. CSS를 사용할 수 있습니다.
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
  • XHTML 1.1
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

대개 기존의 사용하던 레이아웃을 그대로 사용하되, 웹표준에 맞추어서 제작을 하고 싶은 경우에는 우선은 Transitional 로 사용함이 좋지만,
처음부터 웹표준에 맞추어서 제작할 경우에는 Strict(엄격한) 에서 제작하는 것이 올바른 선택이라고 추천하고 싶다.



HTML 4.01 호환모드
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

: 가장 최근 css규격따름. 엘리먼트 배치 자유로움. 스크롤링 레이어 사용 불가능. psition,display속성 구현방법 차이 상이. frame사용 불가능

HTML 4.01 엄격모드
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

: 1999년 12월 24일 확정 규격. 권장하지 않는 element, attribute, frame 사용불가, 엘리먼트 배치 엄격함. 일부 태그 사용 안됨. 
가장 이상적인 문서작성시에 사용

XHTML 1.0 호환모드
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

: 1999년 12월 24일 확정된 프레임문서. frameset이 사용가능. but 넷스케이프, 파폭 작동안됨.

XHTML 1.0 엄격모드
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

※ Strict : 권장 표준안, Transitional : Stric 보단 완화된 표준안

Posted by 다오나무
영삼이의 IT정보2012. 3. 27. 16:04

Android 도 SQLite 를 사용하니 결과는 마찬가지라고 생각되지만 Android 에서 테스트해 보질 않아서 장담 할 수는 없을 것 같다.

암튼...SQLite 가 원래 영어, 한글 순으로 정렬을 해버린다..-_-;
기획자들의 요구사항은 한글, 영어다..

어쩌할까...생각을 해보다..생각을 접고 구글링한다..

when 을 이용하여 처리한 방법이 있다..(select절에 when사용 처음 해본다..)

[NSString stringWithFormat:@"SELECT idx, title, writer_doc, writer_img, download_reg_date, download_end_date, free_yn, tidx, vidx, gidx, title_sub, abs(vidx) as vid, case when substr(title, 1, 1) BETWEEN '' AND '' then 1 else 4 end as number FROM cartoon GROUP BY title, vid ORDER BY number %@, title %@, vid %@ LIMIT %d", orderby, orderby, orderby, limit]

abs(vidx)는 vidx값이 문자열이라 정렬하기 위해서 int형으로 변환했다...
문자열을 int 로 변경하는 convert 함수가 이놈이 맞는지 모르지만..암튼 된다.-_-;

그리고 한글, 영문 정렬.. 
when substr(title, 1, 1) BETWEEN '' AND '' then 1 else 4 end as number 

title의 첫글자를 substr 한 후 그값이  'ㄱ'에서 '힣' 사이에 속하면 1 아니면 4로 
셋팅한 후 정렬할때 number를 기준으로 정렬한다..

Posted by 다오나무
카테고리 없음2012. 3. 26. 11:35
얼마전부터 맥에서 아이폰앱 개발 공부를 시작했습니다..

프로젝트 진행을 해보신 분이라면 SVN이라는 놈을 아실겁니다. 
소스코드 버전 관리를 해주는 프로그램이죠.

Xcode에서는 Organizer에 기본으로 svn 관리 툴이 붙어있더군요. 
그래서 좀 써봤는데 버그가 좀 많고 왠지 허접한(!) 느낌이 들었습니다..

그래서 svn 클라이언트 프로그램 찾아보다가.. svnX라는 놈을 찾았습니다..

svnX는 아래 링크에서 받아보실 수 있습니다. (프리웨어)
http://code.google.com/p/svnx/downloads/list (현재 버전 1.3)

svnX를 설치하신 후.. 실행을 하면 저장소 창이 뜹니다.

Repositories는 실제 소스가 저장될 곳입니다. 서버가 될수도 있고 내 컴퓨터에 저장되는 경로일 수도 있습니다.

일단 서버쪽에 SVN Server 프로그램이 깔려있고, 사용자 계정이 등록돼있다는 가정 하에 
서버 저장소와 연결하는 방법을 소개해보겠습니다.

일단 저장소 창을 띄웁니다.
만약 창이 안떠있다면 "메뉴 -> Window -> Repositories"로 창을 띄웁니다.


오른쪽 중간 쯤에 있는 + 버튼을 누릅니다.



Name에 프로젝트 이름을 설정하고, 
Path에 서버 저장소 경로를 입력합니다.
User/Password 에는 SVN 계정의 사용자 이름과 비밀번호를 입력해 넣습니다.


입력을 마친 후 리스트에 해당 항목을 더블클릭하면 아래와 같이 저장소 창이 뜹니다.
이 리스트에 보이는 것은 서버에 있는 목록을 보여주는 것이므로.. 로컬에 저장하기 위해 Checkout을 눌러줍니다. 


서버의 소스를 저장할 로컬 경로를 설정한 후 Checkout을 눌러주면..



Working Copies 폴더에 test 프로젝트가 추가가 됐습니다.. 이렇게 되면 이제 준비는 끝난것입니다.


Working Copies에서 해당 항목을 더블클릭하면 Update, Commit 등을 할 수 있는 창이 뜹니다.

Finder에서 저장소 폴더에 임의의 소스 파일 2개를 추가했습니다.
위에 두 항목이 ? 로 뜨는 것은 SVN 관리 파일이 아니라는 것입니다. 
파일을 선택한 후 Add를 눌러주고 Commit 을 하면 서버로 해당 파일들이 올라갑니다.



Update 메뉴는 다른 사람이 소스를 수정해서 Commit 한 경우 내 컴퓨터에 있는 소스와 동기화를 시켜주는 작업을 합니다.
만약 내가 수정한 부분과 충돌이 일어나면 충돌 표시도 해주며, 
같은 파일을 수정했더라도 충돌부분이 없으면 자동으로 병합해주는 아주 똑똑한 놈이지요..

커밋을 한 후 한번 Refresh해준 다음, Repository를 눌러보시면 아래와 같이 버전이 생성됩니다.




버전 관리에 꼭 텍스트 파일 형식일 필요는 없습니다. 바이너리 파일도 버전 관리가 됩니다 (물론 비교는 힘들겠지만요..)

이런식으로 프로젝트 폴더 전체를 공유해서 여러명이서 개발을 하면 좋습니다..
옛날에 이런 버전 관리 툴이 없을때는 각자 개발하고 날잡하서 병합하고 그랬더랬지요.. 


 ※ 퍼가실땐 출처를 밝혀주세요. (http://shkam.tistory.com/)
Posted by 다오나무
카테고리 없음2012. 3. 14. 11:03

@interface TESTAppDelegate : NSObject <UIApplicationDelegate> {

 

 

NSString *DBNAME;

NSString *DBPATH;

 

}




-- m파일 





    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];    

    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent: @"Store.sqlite"];

self.DBPATH = writableDBPath;

NSLog(@"writableDBPath is %@", writableDBPath);

    

    BOOL dbexits = [fileManager fileExistsAtPath:writableDBPath];

    if (!dbexits) 

    {

NSLog(@"데이터베이스 카피");

        // 데이터베이스가 존재하지 않으면, 어플리케이션 Resource아래에서 복사를 한다

        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Store.sqlite"];

        NSError *error;

        BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];

    }    

   else {

NSLog(@"이미 패스가 잇음");

    }

별짓다했네... 3시간동안 강제로 Path따서 햇지만 읽히는건 읽혀지지만... insert 안되서...
완전 제일 중요한거!!! /Documents <--요놈안에있는놈만 수정이 가능하다!!

Posted by 다오나무
카테고리 없음2012. 3. 12. 15:26

- (NSString *)stringFromTimeInterval:(NSTimeInterval)interval {

    NSInteger ti = (NSInteger)interval;

    NSInteger seconds = ti % 60;

    NSInteger minutes = (ti / 60) % 60;

    NSInteger hours = (ti / 3600);

    return [NSString stringWithFormat:@"%02i:%02i:%02i", hours, minutes, seconds];

}

Posted by 다오나무
영삼이의 IT정보2012. 2. 20. 17:05
iPhone 사용하시다 보면, 다들 이런 경험 있으시죠? ^^

iOS App Store에서 App.을 다운로드 받을때, 20 MB 이상인 녀석들은 3G 인터넷을 통해 다운로드 받을 수 없습니다. 
App Download에 제한이 걸리게 되면, App 판매량에도 분명 영향을 미칠것입니다.

자 그럼 어떻게 이 뚱뚱한 App 녀석을 다이어트 시켜야 할까요?

최근에 알게된 것중에 하나 인데, 소개 해보려고 합니다. 
Stretchable Image 즉, 확대 가능한 이미지를 사용함으로써, Image Size를 줄이고, 궁극적으로는 Application Size를 줄일 수 있습니다.
Android개발을 해보신 분들이라면, 9 patch Image라는 녀석을 아실텐데요, 그녀석과 흡사하지만 덜 파워풀한녀석입니다 ㅎ

 

실험 대상이 될 Image는 바로 요녀석인데요, 요녀석은 40x24 입니다. 
근데 저는 이녀석을 40x24로도 사용하고, 240x24 로도 사용하고 싶습니다.

가장 간단한 방법은 이녀석을 40x24 버전과 240x24버전을 따로 준비 하는것인데, 이러면서 App.이 뚱뚱해지기 시작합니다. 

그럼 어떻게 해야 하냐 ? 범인, 아니 정답은 여기 있습니다 !

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;


이녀석을 이용하면, 일단 UIImage를 Stretchable하게 바꿔줍니다. 


위의 스킨 샷을 보시면, Stretchable한 Image를 이용하지 않고 그냥 UIImageView의 크기만 늘리게 되면, 
두번째 나오는 녀석처럼 쭈욱 늘어나서, 못생긴 녀석이 됩니다. 
그러나 UIImage를 Stretchable한 상태로 만들어 주면 짜잔 , 3번쨰 녀석 처럼 매끈하게 나옵니다. 


UIImage *img = [[UIImage imageNamed:@"image.png"stretchableImageWithLeftCapWidth:10 topCapHeight:10];

[stretchableView setImage:img];


예제 코드는 위와 같은데요, 
leftCap/topCap 값을 줄수 있어서, 값에 따라 Image를 upscale할때, 특정 픽셀들은 남기고, 아래 값들만 upscale시키게 됩니다. 

애석하게도, 위의 방법은 Interface Builder에서는 할 수 있는 방법이 없기 때문에, 
UIimageView에 Image를 세팅하는것을 소스코드 레벨에서 따로 해줘야 합니다. 

Apple이녀석들은 이런 괜찮은걸 만들어 놨으면, InterfaceBuilder에서도 쓸 수 있게 해줘야지 ;ㅂ; 
친구 녀석 말따라, Apple 애들도 IB를 잘 안써서 그런가 봅니다.


Sample Project 첨부해 드리니, 살펴 보실 분들은 한번씩 살펴 보시기 바랍니다. 

어떻게, 당신의 App은 다이어트에 성공하셨나요? ^^
Posted by 다오나무
영삼이의 IT정보2011. 12. 30. 11:26
http://flytgr.thoth.kr/?mid=blog&document_srl=1279813


자 이 주소로 가보자 -_-; 
Posted by 다오나무
영삼이의 IT정보2011. 11. 17. 19:24

- 윈도우즈를 위한 미디어 플레이어

- 간단한 플레이어

http://mpui.sourceforge.net/index.php?page=about

About MPlayer and MPUI

MPlayer is arguably the best media player application of the world. Is is almost strictly monolithic, which means that it mainly consists of a single 7 MB executable that already contains all necessary codecs – for most files, it does not need any external codecs to be installed. If you want to know more about this wonderful program, please visit the MPlayer homepage.

The roots of MPlayer are in the Unix environment, and it shows in the way MPlayer is used: There is no graphical user interface, or at least none worth mentioning. Instead, MPlayer completely relies on a well-crafted command line interface and powerful keyboard shortcuts. While this is perfectly OK for Unix enthusiasts, Mac and Windows users prefer nice and more or less colorful graphical interfaces. There is already a »semi-official« OS X port, but up to now, no such project exists for the Windows platform.

This is where MPUI comes into play. It is a small program for Windows that takes the command-line hassle off you. Instead, you will get a no-frills, straight-to-the-point GUI that resembles the venerable Windows Media Player 6. It does not support every feature of MPlayer – there are just too many of them – but it is a solid »workhorse« media player tool suitable for most, if not all, everyday needs.

Features

MPlayer and MPUI, when teamed up, offer the following features:

  • A media player with a clean and simple interface.
  • Plays hundreds of different video and audio formats, including MPEG-1, -2 and -4 (DivX), H.264, MP3, Ogg Vorbis and AAC. For most media files, no additional codecs are needed. (This is because MPlayer is not one of the uncounted DirectShow players – the codecs are directly integrated into MPlayer.exe.)
  • MPUI and MPlayer together are just about 3.5 MB in size.
  • The most important MPlayer options (aspect ratio, deinterlacing, and postprocessing) can be configured without typing in cryptic command-line options. (But if you want or need some non-standard options, you can still add them by hand.)
  • Support for multiple audio and subtitle tracks on DVDs.
  • Combines MPlayer's cool keyboard navigation with a mouse-controlled seekbar.
  • Plays files, network streams and discs (such as (S)VCD or DVD). Drag&Drop supported.
  • Multilingual user interface.
  • No installation is required to use MPUI/MPlayer. Simply copy the two .exe files into a directory of your choice an run MPUI.
  • Using a special autorun.inf file, self-playing DivX CDs can be made. This adds only 3.5 MB to your CD, and on the computer playing the disc, no codecs need to be installed.
  • Both programs are free, licensed under the GNU General Public License.
Posted by 다오나무
영삼이의 IT정보2011. 11. 17. 02:01

몇 십년간 보드게임으로 인기를 누려 왔던 스토리를 아이폰에 적용한 게임입니다. '부자아빠 가난한아빠'를 저술한 작가도 이 게임을 아주 극찬 했습니다. 현재 아이튠즈 게임 카테고리 상위권에 있습니다.

무료

카테고리: 게임

등록일: 2011.11.11

버전: 1.0.8

크기: 60.3 MB

언어: 한국어, 영어, 일본어

개발자: M&M GAMES Corp

© M&M Games

4+ 등급

요구사항: iPhone 3GS, iPhone 4, iPhone 4S, iPod touch (3세대), iPod touch (4세대) 및 iPad와(과) 호환됩니다. iOS 4.2 버전 이상이 필요합니다.
아이튠즈 링크 :  http://itunes.apple.com/kr/app/id477076603?mt=8 바로가기

Posted by 다오나무
영삼이의 IT정보2011. 11. 11. 19:01

스크립트를 이용하는방법
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
// [/iPhone/i]  OS가 iPhone
// [/iPod/i]  OS가 iPod
// [/Symbian/i]  OS가 심비안
// [/Windows CE/i] OS가 윈도우모바일
// [/BlackBerry/i] OS가 블랙베리 
// [/Android/i]  OS가 안드로이드일 경우
if( (navigator.userAgent.match(/iPhone/i)) ||
(navigator.userAgent.match(/iPod/i)) ||
(navigator.userAgent.match(/Symbian/i)) ||
(navigator.userAgent.match(/Windows CE/i)) ||
(navigator.userAgent.match(/BlackBerry/i)) ||
(navigator.userAgent.match(/Android/i)))
{
window.location.href='./photo.php'; // 저중 하나라도 조건이 만족하면 /m/index.php 로 이동한다.

//-->
</SCRIPT>

php를 이용하는방법
<?
$T = $_SERVER['HTTP_USER_AGENT'];
if(strrpos($T,"Android") || strrpos($T,"iPhone"))
{
if(strrpos($T,"SHW-M180S")) // 갤럭시 탭
{
  $goMobile = "No";
}
else
{
  $goMobile = "Yes";
}
}

if($goMobile == "Yes")
{
?>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
  window.location.href='m1.php';
//-->
</SCRIPT>
<?
}
?>
먼저 $T로 브라우져의 정보를 알아낸다음...
그것으로 처리 하면 된다.

Posted by 다오나무