노무현 대통령 배너

센스쟁이 프로그래머, 비트센스

비트센스's Blog is powered by Tattertools

MFC에서 현재 시간 구하는 방법입니다.

더보기

네비게이션바는 일반적으로 청색 혹은 검정 등 그라데이션 칼라만 지원합니다. 여기에 사용자 이미지를 배경으로 등록하는 소스 입니다. 네비게이션바를 컨트롤하는 페이지 헤더에 아래와 같은 소스를 추가하면 됩니다.

@implementation UINavigationBar (CustomImage)


- (void)drawRect:(CGRect)rect {

UIImage *image = [UIImage imageNamed: @"list.png"];

[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];

}


@end


일단 쉽죠잉~~?? ^^;;


간만에 윈도 개발 세미나 관련 포스팅을 해봅니다. ^^;;

근래에 아이폰 등 모바일 앱을 만들어 볼라 치니, 사무용이나 기타 RSS 피드 등으로는 특별한 먼가를 할 수 없다는 깨달음을 얻었습니다. ㅠ,.ㅠ;;; 만들줄은 아나 무얼 만들어야 할지 모르는 순수 개발자의 설움이란 거죠.. =_=;;

결국엔 게임을 해야 하나?? 하는 생각도 들고... 원래 게임에 관심도 있고 해서.. (라고 하지만 아직은 먼나라 얘기)

며칠전 메일이긴 하지만 다음주 화요일인 2010년 11월 9일 13시 부터 Visual Studio 2010와 인텔의 패러렐 스튜디오 2011을 이용한 게임개발 생산성 향상을 위한 세미나를 개최합니다. (행사개요 사이트)

페러렐 스튜디오가 조금 생경한 툴이지만 게임 개발하시는 분들은 좋은 자리가 될 것 같네요. (등록사이트)

좋은 자리가 되시길 바랍니다.

요새 MS의 웹브라우저 IE6(Internet Explorer 6) 때문에 말들이 많습니다. 보안에 문제도 그렇고, 웹발전의 저해요소라는 말도 서슴없이 나오구요. 이러한 상황을 반영해 주듯, 많은 사이트들에서 IE8로 업그레이드 해 달라는 캠페인도 많이 진행 중입니다.

이 와중에 MSDN에서 메일이 하나 날라왔네요. 오는 9월 16일 삼성동 코엑스 오디토리움에서 IE9 베타 런칭행사를 한다는 메일입니다. 이번 IE9에서는 HTML5를 지원한다고 하는데 얼마나 많은 향상이 있는지 궁금하네요. ^^;;

그림. MSDN 메일 뉴스레터, IE9런칭행사 안내 캡쳐

특이하게 해당 행사에 대한 참가신청을 받거나, 참가대상에 대한 안내부분이 없습니다. 아무나 참석을 하라는 것인지, 아니면 이미 참석대상에게는 초대장이 발급이 됐는지는 알 수 없으나, 좋은 소식들이 많이 전달되었으면 합니다.. ^^;;

아이폰 네비게이션바에 버튼을 넣는 방법입니다.
네비게이션바에 백그라운드 이미지를 넣은 경우에는 버튼 영역이 정상적으로 나오지 않아서 확인 중입니다. ^^;;
UIImage *image = [UIImage imageNamed:@"right.png"];

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
[button setBackgroundImage: [[UIImage imageNamed: @"right_clicked.png"] stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateHighlighted];

button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);

[button addTarget:self action:@selector(AcceptData) forControlEvents:UIControlEventTouchUpInside];

UIView *v=[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, image.size.width, image.size.height) ];

[v addSubview:button];

UIBarButtonItem *forward = [[UIBarButtonItem alloc] initWithCustomView:v];

self.navigationItem.rightBarButtonItem= forward;

[v release];
[image release];


맥용 APM 설치툴, MAMP

프로그램 2009/08/02 04:56 by 비트센스
맥과 친해지려고 노력하다 보니, 온통 관심이 맥에 쏠려 있네요... ^^;;

요긴한 유틸리티를 하나 소개하려고 합니다. 그 주인공은 바로 MAMP 입니다.

PHP 프로그램을 하다 보면 자주 윈도우에 아파치를 설치해야 하는 경우가 있습니다. 보통 php는 리눅스나 유닉스에서 돌리는데, 몇번 테스트하려고 Apache를 설치하는 것이 좀 귀찮습니다.
이것을 대신해 주는 프로그램이 바로 apmsetup(http://www.apmsetup.com) 입니다. 이 apmsetup 과 비슷한 맥용 프로그램이 바로 MAMP(http://mamp.info/en/downloads/index.html) 입니다.


안타깝게 한글지원은 하지 않습니다. php 4와 5버전을 클릭한번으로 갈아탈 수 있습니다. 간단한 사용법에 감탄.. ^^;;

설치를 하고 나면 로컬페이지로 관리자 화면이 이렇게 나옵니다. 디폴트 포트는 8888, DB는 8889 입니다.

저같은 맥맹이 사용하기에는 요긴하네요.. ^^;;
테이블 필드명을 굳이 사용할 일이 별로 없습니다만,
최근 플렉스 관련된 협업을 진행한 적이 있는데...
데이터 통신을 xml로 합니다. 거기에 태그명은 알아서 적어달라고 하더군요.
그래서 당연히 머리 안쓰고자 필드명으로 처리하겠다고 했습니다.

본 내용은 필드명을 알아내는 작업이 주라고 봐도 되겠습니다.

일단 함수는 아래와 같습니다.

'**
' 레코드셋 rs로 xml 만들기
' rs : 레코드셋 객체
' envelopeTag : xml root 태그
' dataTag : 데이터 구분 태그
'* 
Function getPrintXmlData(rs, envelopeTag, dataTag)
	strReturn = "<?xml version=" & chr(34) & "1.0" & chr(34) & " encoding=" & chr(34) & "utf-8" & chr(34) & " ?> " & vbCrLf
	strReturn = strReturn & "<" & envelopeTag & ">" & vbCrLf

	Do While Not rs.EOF
		strReturn = strReturn & "<" & dataTag & ">" & vbCrLf

		For Each f In rs.Fields
			fieldName = f.Name
			fieldValue = rs(fieldName)

			strReturn = strReturn & "    <" & fieldName & "><![CDATA[" & fieldValue & "]]></" & fieldName & ">" & vbCrLf
		Next

		strReturn = strReturn & "</" & dataTag & ">" & vbCrLf
		rs.MoveNext
	Loop

	strReturn = strReturn & "</" & envelopeTag & ">" & vbCrLf

	getPrintXmlData = strReturn
End Function

전체 구문은 모두 텍스트로 전제한 후 작업을 했습니다. 그래서 모든 필드값은 CDATA로 감쌌습니다.

해당 내용이 Integer 형태로 전달할 필요성이 있다면, 숫자형을 확인해야 겠죠??

중간에 레코드셋의 필드명 확인하는 구문이 있으니, 이부분을 참조하시면 도움이 될 듯 합니다. ^^;;

참 쉽죠잉?? ^^;;


 
강좌라고 하기에는 어쩐지 부끄러운 내용일 것 같습니다만.. ^^;;

디자인 분리를 위해서 기초작업을 하도록 하겠습니다.

보통 일반적으로 asp 에서는 function을 사용해서 기능을 정리할 것입니다.
하지만 저는 function 대신에 재사용성을 고려해 대부분의 기능을 class화 하여 정리해서 사용하겠습니다. 살짝 OOP(객체 지향) 흉내도 낼 겸이요.. ^^:;

그 1차 관문!!
기본인 db connection class를 만들어 보도록 하겠습니다.

공용파일의 lib 디렉토리 위치는
/wwwroot/_CMS/lib/common/
입니다.

파일명은 dbConn.asp로 하겠습니다.

<% 
Class dbConn
    Private objConn 'as ADODB.Connection
    Public connString
    
    dim DBHost, DBName, DBUser, DBPass
 
    '클래스 생성자
    Sub Class_Initialize()
        Set objConn = Nothing
        
        DBHost = "localhost"
        DBName = "public"
        DBUser = "test"
        DBPass = "test"
        
        connString = "Provider=SQLOLEDB.1;Password=" & DBPass & ";Persist Security Info=False;User ID=" & DBUser & ";Initial Catalog=" & DBName & ";Data Source=" & DBHost
    End Sub
 
    '클래스 소멸자
    Sub Class_Terminate
        Set objConn = Nothing
    End Sub
 
    'Connection 프로퍼티 Get
     Public Property Get Connection() 'as ADODB.Connection
         If objConn Is Nothing Then
             Set objConn = Server.CreateObject("ADODB.Connection")
             objConn.Open connString
         End If

         Set Connection = objConn
     End Property


     '레코드셋 질의
     Public Function ExecuteQuery(strSQL) 'as ADODB.Recordset
        Dim objRs 'as ADODB.Recordset
        Set objRs = Server.CreateObject("ADODB.Recordset")

        
        On Error Resume Next

        objRs.CursorLocation = 3 
        objRs.Open strSQL, Me.Connection, 0

        If Err.Number <> 0 Then
            Response.Write "<b>데이터베이스 에러</b> (ExecuteQuery)<br>" & _
                "질의어 : " & strSQL & _
                Err.Description

            objRs.Close
            Set objRs = Nothing
            Me.Close
            Response.End
        End If

  
        On Error GoTo 0

        Set ExecuteQuery = objRs
    End Function
 
    '업데이트 질의
    Public Sub ExecuteCommand(strSQL)
        On Error Resume Next
  
        Me.Connection.Execute strSQL
  
        If Err.Number <> 0 Then
            Response.Write "<b>데이터베이스 에러</b> (ExecuteCommand)<br>" & _
                "질의어 : " & strSQL & _
                Err.Description
            Response.End
            Me.Close
        End If
   
        On Error GoTo 0
  
    End Sub

    
    '데이터베이스 연결 닫기
    Public Sub Close()
       Set objConn = Nothing
    End Sub
End Class
%> 

DB Connection을 사용해 보셨다면 위 클래스의 구조는 익히 아실 것이라고 봅니다.
Class의 생성자와 소멸자, 그리고 Public Property Get 으로 ADODB.connection 객체 정보를 받아오는 부분도 눈여겨 보실만 할겁니다.

사용 샘플 소스는 아래와 같습니다.

<!-- #include virtual="/_CMS/lib/common/dbConn.asp" -->
<%
Set oDB = new dbConn

getQuery = "" &_
   "select * " &_
   "from ps_member " &_
   "order by " &_
   "  mem_id"
Set rs = oDB.ExecuteQuery(query)

Do While Not rs.EOF
   ...
Loop

oDB.Close
%>

이상입니다.. 쉽죠잉?? ^^;;

이제 asp 개발자들은 ASP.NET을 말하고 있습니다.
이런 시기에 asp를 말하고 강좌를 한다는 것이 우습기는 하지만, 아직 asp는 실제 서비스 비중이 줄어들기는 하지만 여전히 많은 것 같습니다.

근래에 잠깐 작업을 하면서 재사용성을 생각해서 class로 변환을 해본 소스들을 공유하고자 합니다. 머 100% 모두 가져다 사용하시면 좋을 거 같기는 하지만, 워낙 급조한 부분들이 많은 지라 기본 엔진 외에는 써먹지 못할 거 같다는 생각입니다. ^^;;
물론 이 소스들 많은 부분이 커스터마이징 되거나 개선되어야 할 부분이 많습니다.

ASP.NET은 이제 완전히 디자인이 분리되어 사용되고 있습니다만, asp는 아시겠지만 asp코드(프로그램)과 디자인(html 코드)이 엉켜서 사용되고 있습니다.

디자인을 분리하기 위해서는 디자인 부분인 html만 있는 템플릿이 필요하고,
이것을 읽어서 활용할 프로그램이 필요합니다.

이 부분을 사용하면서,
db, fileupload 등 자주 사용하는 것은 class로 만들어 재활용성을 높혔습니다.

이번 강좌의 내용은
1. db class 활용
2. fileupload class 활용
3. design 영역 호출(skin, templet DB / file 호출)
4. 프로그램 활용 방법
이렇게 구분해서 하려고 합니다.

하다가 보면 내용이 중복되거나, 먼소린지.. 하는 부분도 있을 거구요.. ^^;;
그런 부분은 강좌를 진행하면서 수정을 하도록 하겠습니다. ^^;;

asp 초보자 님들에게 좋은 내용이 되었으면 하는 바램입니다.
저역시 몇년동안 asp를 제대로 활용하지 않은 초보자라.. ^^;;
소스가 엉성하더라도 알아서 봐 주십시요.
웹페이지 접속자 수가 많은 사이트를 제작하다 보면,
DB 접속수 제한을 위해서 캐싱이 필수적입니다.

접속자 수가 많은 사이트에서는 캐싱 시스템을 두는 것이 좋지만,
그렇지 않을 경우에는 프로그램에서 캐싱처리를 하도록 해야 합니다.

프로그램에서 캐싱을 하는 경우에는 문제가, 사용자의 입맛대로 즉시 갱신이 안되는 경우가 간혹 있습니다.
그래서 번거롭지만, 갱신 주기를 정해서 라이프타임을 주고 작업을 하는 경우도 있습니다.
오늘은 이렇게 파일의 라이프타임을 주고 갱신을 하는 방법을 알아보겠습니다.

일단 파일 생성 일자를 확인하는 함수를 알아보겠습니다.
int filemtime($filename)
위 함수는 정확히 말하자면 파일 수정날짜를 time() 형태로 리턴합니다. 이 내용을 활용해서 라이프타임을 확인합니다.
$fileTime = filemtime($filename);
if (time()-$fileTime > 60*10)
{
	// 파일 재생성
}
time()의 기본 단위는 초입니다. 그래서 60 = 1분입니다. 60*10은 10분이겠죠?
10분이상인 파일 일 경우에는 파일을 재생성합니다.

위의 내용을 함수로 다듬으면 파일 라이프타임에 따른 이벤트 작업을 할 수 있습니다.

쉽죠잉?? ^^;;
1 2 

카테고리

전체 (317)
사진의 추억 (25)
진상 고객이 되자 (88)
초보 관리자 (74)
프로그램 (12)
공유의 바다 (114)

달력

«   2012/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
믹시
Daum view
BLOG main image
센스쟁이 프로그래머, 비트센스
뷰파인더로 보는 프로그래머의 세상 트위터 @picory<br> 스카이프 picory MSN drawhalf@dreamwiz.com
by 비트센스
WeMakePrice
Statistics Graph