학교를 다니는 나로선 PPT 파일을 많이 접한다.

인터넷과 거의 붙어 있는 나로서도 PPT 파일에 뭍혀 산다.

그 파일들을 접하다 보면 나도 모르게 답답하고 화가 난다.

수없이 도배 된 효과들...한페이지에 수많은 효과들이 난무하는 걸 보고 있자면 나도 모르게 울컥 한다. 



여기서 Presentaion 의 뜻을 살펴보자.


†presentation [prèzəntéiʃən] n.

U,C ① 증여, 수여, 증정; C 수여식.

② C (공식적인) 선물(gift).

③ 소개, 피로(披露); 배알, 알현(at court).

④ 제출; 표시; 진술.

⑤ 표현, 발표.

⑥ 〖교회〗 성직 추천(권).

⑦ (극·영화 따위의) 상연, 상영, 공개; 〖철학·심리〗 표상, 관념; 직각(直覺).

⑧ 〖의학〗 태위(胎位).

⑨ 〖상업〗 (어음 따위의) 제시.


여기선 ⑤번 발표의 뜻으로 쓰인다.


발표를 하는데 있어 중요한 건 효과적인 뜻 전달이라고 생각한다.

하나의 뜻을 전달하는데 화면에 글자들이 여기저기서 날아다닌다면 전달이 가능할까?

수많은 효과들은 상대방의 인내심을 무너뜨리고 정신을 분산시켜 아무 전달도 없는 것과 마찬가지가 된다.

나 또한 수업시간에 멋진 PPT 를 보고 나면 뭘 배웠는지 한참 생각하고 다시 공부하게 된다.


여러가지 효과들이 있다는 건 도배를 하라고 넣은 것이 아니라,

상대방에게 확실히 각인 시키는 용도로 써야 한다고 생각한다.

너도 나도 앞 다투어 화려한 PPT 제작에 힘쓰기 보다는

"어떻게 하면 의사 전달이 확실 해 질까?"

하는 생각으로 좋은 PPT 제작을 한다면 정말 행복할 것 같다.

또한 발표 목적 달성을 위해도 좋은 길이 아닐까?

'Windows > 개발잡담' 카테고리의 다른 글

[GL] OpenGL Library 구성  (0) 2007.09.18
[Win32] 변수 형 및 접두어 뜻  (0) 2007.09.18
MBCS, UNICODE 프로그래밍  (0) 2006.09.30
표준?  (0) 2006.09.01
어처구니 없는 마케팅  (0) 2006.08.30
자세한 내용은 관련 사이트 연결을 명시한 참고3을 보시면 됩니다.

기존에 각 나라별 문자별 인코딩에 따라 문자열 처리에 통일성이 없었습니다. 이를 해결하기 위해 UNICODE 가 소개 되었습니다. UNICODE 만을 지원한다면 두가지를 염두해 둘 필요는 없지만, 아직은 과도기적 단계로 기존 문자열 처리들도 신경 써 줘야 합니다. (참고3의 3번 링크를 보면 Win9x 에서는 UNICODE 기반 프로그램이 실행되지 않는다는 것을 알 수 있습니다.) 이에 두 방식의 문자열을 지원하기 위한 방법을 간단하게 요약 해 보았습니다. (자세한 내용은 참고3의 1번 링크 참조)

1. 문자(열) 변수 타입은 T 타입으로 씁니다.
char -> TCHAR, char* -> LPTSTR, const char* -> LPCTSTR

2. 문자열 리터럴은 __TEXT(TEXT 도 가능) 또는 __T(_T, _TEXT 도 가능) 매크로로 묶어 둡니다. (아래 참고내용 참고)

3. CRT 문자열 함수는 T 타입 함수를 사용합니다. 기존 문자열 함수의 pre-fix, "str" 을 _tcs 로 바꾼다. pre-fix 가 str 이 아닌 경우는 그냥 _t 를 붙입니다.
예1) _tcscpy, _tcsncpy, _tcscat, _tcsstr, _tcsshr, _tcsrchr, _tcscmp, _tcsicmp
예2) _tmkdir, _tfopen

4. 길이와 크기를 구분합니다. 기존의 char 의 경우 그 크기가 1바이트이어서 크기 값과 길이 값이 같아 혼용하는 경우가 많았습니다. 하지만 UNICODE 환경에서는 크기가 달라지므로, 혼용해서 쓰는 일이 없어야 하겠습니다.

5. string 클래스 사용하기
std::string 의 경우는 ANSI 문자열, std::wstring 의 경우는 UNICODE 문자열을 지원하는 문자열 클래스입니다. 허나 둘을 구분하여 지원하는 tstring 은 존재하지 않아 구현하여 써야 합니다. std::string 은 std::basic_string, std::wstring 은 std::basic_string 로 구현되었습니다. 이에 따라, std::tstring 은 다음과 같이 구현할 수 있습니다.
namespace std { typedef basic_string tstring; }

6. 일부 함수나 메세지 인자의 경우 특정 문자열(char 또는 wchar_t)로 취급해야 하는 경우에는 전처리기를 이용하여 처리합니다. 이 때, 당장은 신경써도 되지 않는 구현 부는 필요 시 수정이 필요한 부분을 쉽게 찾기 위하여 error 전처리기를 사용합니다.
#ifdef _UNICODE
// UNICODE 처리
#else
#error 이 프로그램은 MBCS 빌드로 컴파일되지 않습니다.
#endif



참고1 (TEXT 매크로 관련 헤더 내용 요약, 참고3의 2번에도 간략하게 명시됨)
<tchar.h>
#ifdef _UNICODE
#define __T(x) L ## x
#else
#define __T(x) x
#endif
#define _T(x) __T(x)
#define _TEXT(x) __T(x)

<winnt.h>
#ifdef UNICODE
#define __TEXT(quote) L##quote
#else
#defin __TEXT(quote) quote
#endif
#define TEXT(quote) __TEXT(quote)

참고2 (필자가 직접 쓰고 있는 tstring)
//-------------------------------------------------------------------------
#pragma once
//-------------------------------------------------------------------------
#include <windows.h>
#include <string>
#include <tchar.h>
//-------------------------------------------------------------------------
namespace std
{
typedef basic_string<_TCHAR> tstring;
}
//-------------------------------------------------------------------------

참고3 (관련 사이트 연결)
1. 유니코드에 대비한 프로그램을 작성하는 여섯가지 원칙 (신영진님의 글)
2. Win32 API에서의 MBCS 와 Unicode (TCHAR 와 _T 매크로의 소개)
3. Unicode/MBCS(DBCS)/ANSI/TCHAR (문자열 세트에 대한 설명)

'Windows > 개발잡담' 카테고리의 다른 글

[Win32] 변수 형 및 접두어 뜻  (0) 2007.09.18
프리젠테이션 - 각종 효과들의 도배  (0) 2006.11.21
표준?  (0) 2006.09.01
어처구니 없는 마케팅  (0) 2006.08.30
IT 직종 바로알고 내 자신도 바로알자  (0) 2006.08.30
요즘 Web 2.0 과 더불어 들리는 내용이 웹 표준이다.
(요즘이라 함은 전역 후 약 1주일간인 최근 직접 본 내용을 말 함)

난 웹 표준에 반대하는 입장은 아니다.
이전에쓴글의 마지막을 보면 안다.
그런데 왜 궂이 표준을 강요하는지 모르겠다.

표준을 지키지 아니하면 제대로 결과물이 나오지 않던가?
아니다 어차피 브라우저마다 차이가 있어서 지킨다 하더라도 조금씩 달라보인다.
서비스 이용만 잘 되면 되는 것 아닌가
그래서 난 아직도 이해가 안된다.
표준에 이렇게 열광하는 사람들...
그냥 다들 표준, 표준 해대니 나도 표준! 이러는거 아닌지
뭐든 자기 소신 껏 하는게 좋은거 아닌가

함께 만들어가는 웹

혁명? 정말이지 저질 마케팅이야

새로운 OS 의 설명으로 백서에 실은 엄청나게 추상화 된 설명(조엘 온 소프트웨어 에서 봤는데 못 찾겠다 알아서 찾아보길 죄송...) 이후로 어처구니 없는 마케팅을 하고 있다.
대체재를 알지 못하는 분들에게는 획기적인 발전으로 느껴질 지도 모르나
이미 알만한 사람들은 다 알고 있다. 뒷북이다. ┒-

이미 본인도 오래전(3년 반이나 됨)에 웹 브라우저들을 비교 해 보았다.
좀 오래된 내용이라 지금과 다르다고 100% 장담할 수 있다...쿨럭

웹브라우저들...(구 경사모[프리챌])

이 때도 훨씬 뒤지고 있었다.
다만 끼워팔기의 여파로 보급률이 높고 그에 따라 제작 기준이 M$ 의 기준에 맞춰져서
다른건 브라우징 시 제대로 보여지지 않을 가능성이 높다는 거 (한마디로 횡포 ...입니다)

여담이지만 링크의 두번째 댓글을 보라.
이 시기에도 표준에 대해 민감히 반응 하는 저자를 *-_-* 흐흐...선견지명
하지만 선견지명도 시대를 따라 줘야 하는 듯...이미 이 곳에서 마음이 멀어져 버렸음.

'Windows > 개발잡담' 카테고리의 다른 글

[Win32] 변수 형 및 접두어 뜻  (0) 2007.09.18
프리젠테이션 - 각종 효과들의 도배  (0) 2006.11.21
MBCS, UNICODE 프로그래밍  (0) 2006.09.30
표준?  (0) 2006.09.01
IT 직종 바로알고 내 자신도 바로알자  (0) 2006.08.30
김중태님의 IT직종 바로알기

2004년 1월 1일 작성 된 글이라 절대적이라 할 수는 없지만 주제 파악 하기엔 딱 좋은거 같다.

이어지는 내용은 내 주제 파악을 해보았다. 누구 맘대로? 정니퍼 마음대로~ 뾰로롱~

일단 나는 실무 경력이 전무하므로 능숙한 일꾼은 아니다. 하지만 이론적인 지식으로 판단 해 보았다.

지금 내 현재 상태
응용소프트웨어개발자(응용 프로그래머), 웹프로그래머, 컴퓨터게임 프로그래머, 웹마스터

헉...암울 하다...
이전까지는 눈에 보이는거 그거 직접 개발하는게 정말 흥미 있었다.
이젠 흥미가 떨어졌다.
다행히 시기를 맞춰(?) 시대 상황도 개발자에게 안좋아졌다. (컥 좋아할건 아니라고 봐요 으잉~)

군에 있으면서 그 지루한 시간 미래 생각을 다들 많이 할때 나 또한 같은 생각을 했다.
그리고 그 과정에서 네트워크 세계에 흥미를 붙이고 잠깐 공부를 시도 했으나
몇가지 핑계(넷컴의 폭파, 지휘/군의관 대거 교체 후의 과도한 업무의 파도)로 등한시 하게 되었다.
하지만 아직 흥미를 가지고 있으니 이제 시작해야겠다.

그래서 희망하는 내용은 이렇다.
웹엔지니어, 네트워크엔지니어(NE), 시스템운영관리자, 서버관리자, 데이터베이스관리자

관리하는게 좋을 것 같다. 직접 하는건 좀 피곤하다.

'Windows > 개발잡담' 카테고리의 다른 글

[Win32] 변수 형 및 접두어 뜻  (0) 2007.09.18
프리젠테이션 - 각종 효과들의 도배  (0) 2006.11.21
MBCS, UNICODE 프로그래밍  (0) 2006.09.30
표준?  (0) 2006.09.01
어처구니 없는 마케팅  (0) 2006.08.30

학교에서 교수가 강의하기 귀찮았는지 이런걸 시키고는 가버리는-_-;;

자바를 알지도 못하는데 자바로 하라고 -_- ㅆ ㅑ       0

아까워서 여따올린다.




import java.net.*;

import java.io.*;

import java.util.*;


class webserver

{

public static void main( String args[] )

{

System.out.println( "Web server start..." );

try

{

ServerSocket sSocket = new ServerSocket( 80 );


while ( true )

{

Socket cSocket = sSocket.accept();

BufferedReader br = ( new BufferedReader( ( new InputStreamReader( ( new BufferedInputStream( cSocket.getInputStream() ) ) ) ) ) );


// Get File name and extension

StringTokenizer st = new StringTokenizer( br.readLine() ); st.nextToken();

String FileName = st.nextToken();

if ( FileName.equalsIgnoreCase( "/" ) )

{

FileName = "/index.html";

}

FileName = FileName.substring( 1 );

st = new StringTokenizer( FileName, "." ); st.nextToken();

String FileExt = st.nextToken();


// Initialize Header

File file = new File( FileName );

int FileSize = FileSize = ( int )( file.length() );

String Header = "HTTP/1.0 ";

byte[] buffer = new byte[ FileSize ];


if ( file.exists() )

{

Header += ( "200 OK\r\nContent-Type: " + getContentType( FileExt ) + "\r\n" +

"Content-Length: " + FileSize + "\r\n" );


FileInputStream fis = new FileInputStream( FileName );

BufferedInputStream bis = new BufferedInputStream( fis );

bis.read( buffer, 0, FileSize );

bis.close(); fis.close();

}

else

{

Header += "404 Object Not Found\r\n";

}

Header += "Server: Tinyweb/0.1\r\n";

Header += "\r\n";


System.out.println( "Request-File: " + FileName );

System.out.println( Header );


OutputStream os = cSocket.getOutputStream();

os.write( Header.getBytes() );

os.write( buffer );

os.close();


cSocket.close();

}

}

catch ( Exception e )

{

System.out.println( e );

}

}


public static String getContentType( String Ext )

{

String cType = "text/plain";


if ( Ext.equalsIgnoreCase( "htm" ) )

{

Ext = "html";

}


if ( Ext.equalsIgnoreCase( "js" ) )

{

cType = "application/x-javascript";

}

else if ( Ext.equalsIgnoreCase( "exe" ) || Ext.equalsIgnoreCase( "vbs" ) || Ext.equalsIgnoreCase( "bat" ) || Ext.equalsIgnoreCase( "sys" ) )

{

cType = "application/octet-stream";

}

else if ( Ext.equalsIgnoreCase( "html" ) || Ext.equalsIgnoreCase( "css" ) )

{

cType = "text/" + Ext;

}

else if ( Ext.equalsIgnoreCase( "gif" ) || Ext.equalsIgnoreCase( "png" ) ||

Ext.equalsIgnoreCase( "jpeg" ) || Ext.equalsIgnoreCase( "jpg" ) ||

Ext.equalsIgnoreCase( "bmp" ) )

{

cType = "image/" + Ext;

}


return cType;

}

};


뭔가 하면 예제를 봐라
http://cplus98@tinydew4.pe.kr/

구현하기전에 필요한 함수들 (사실 이것도 내가 했지만)
function substr(string, start, length)
{
  return string.substr(start, length - start);
}

function GetHost(url)
{
  var host = "";
  var at_pos = url.indexOf('@');
  var split_pro = url.indexOf('://') + 3;

  if (at_pos > 0)
    host = substr(url, 0, split_pro) + substr(url, at_pos + 1, url.indexOf('/', at_pos));
  else
    host = substr(url, 0, url.indexOf('/', split_pro));

  return host;
}

function GetID(url)
{
  if (url.indexOf('@') > 0)
    return substr(url, url.indexOf('/', url.indexOf('/') + 1) + 1, url.lastIndexOf('@'));
  return "";
}

function GetPath(url)
{
  var split_host = url.indexOf('/', (url.indexOf('/', url.indexOf('/') + 1) + 1));
  var split_path = url.lastIndexOf('/');
  if (split_host != split_path)
    return substr(url, split_host, split_path);
  return "";
}

function GetFile(url)
{
  var split_path = url.lastIndexOf('/');
  if (split_path < url.length)
  {
    var split_var = url.indexOf('?');
    ++split_path;
    if (split_var > 0)
      return substr(url, split_path, split_var);
    else
      return url.substr(split_path);
  }
  return "";
}

function GetVar(url)
{
  var split_var = url.indexOf('?');
  return (split_var > 0 ? url.substr(split_var + 1) : "");
}

실제내용
function at_redir(user_dir)
{
  var url = "" + document.location;
  var id = GetID(url);

  if (id != "")
  {
    var redir = "";

    if (id == "cplus98")
      redir = "http://myhome.hanafos.com/~cplus98/";
    else
      redir = "http://tinydew4.pe.kr/users/" + id;

    if (redir != "")
    {
      var request_var = GetVar(url);
      if (request_var != "")
        redir += "?" + request_var;
      location.replace(redir);
    }
  }
}

참고소스에는 그냥 user 부분을 보고 redirecting 만 시켰는데
난 뒤에 ? 로 딸려오는 get변수도 넘겨줘..좀더 확장 시켰다.
(페이지도 넣으려 했는데 @ 자체가 페이지를 읽은 후에 처리되는 것이라 그냥 @ 부분을 뺀 url 을 읽어버려서 못함)

그냥..홈페이지 만들었거나 만들사람들은 자주쓰이는 주소 ( e.g 포트폴리오 ) 는 줄여서 멋있게 만들어 보라고;;


참고글 : phpschool.com 의 어딘가에서~
참고소스 : korea.com (view-source:http://korea.com 을 웹브라우저 주소창에 입력하면 나옴)

미리 밝혀두길..이번건 강좌 따위가 아니다..

소스만 밝힌다.

이 소스는 그 어떠한 책을 참고하다가

긴 소스 코드에 짜증을 내고

특정 계산식을 염두하지 않은..

노가다 적인 코딩에 의해 탄생 된 것이므로

안정성 0% 이다.

역시 쓰는 건 자유다.
-----------------------------------------------------------
inline void CircleShot(int *LocX, int *LocY, int Degree, int MisStep)
{
double Loc = double(Degree) / 57.2;

*LocX += (int)(sin(Loc) * MisStep);
*LocY += (int)(cos(Loc) * -MisStep);
}

LocX 는 X 좌표의 포인터
LocY 는 Y 좌표의 포인터
Degree 는 Radian 값이 아닌..말그대로 Degree 다-_-
       0 과 360 은 거의 동일한 결과값이란 걸 밝혀둔다.
MisStep 은 한번에 움직여갈 거리를 말한다.

마지막으로..이 코드는 그냥 하다가 나온 것으로 논리적인 설명은 없다.
-------------------------------------------------------------
끝말은 똑같으므로 바뀔 때까지 계속 생략하겠다-_-

'Windows > 기타개발' 카테고리의 다른 글

[한글] PlaySound function  (0) 2016.06.24
[CSS] input 태그 type 별 개별 적용  (0) 2013.06.12
simple webserver by java, socket exam  (0) 2004.05.11
[Web] Script 로 @ url 구현하기  (0) 2003.03.04

+ Recent posts