그리 멀지 않은 지난달, 파코즈의 [테크니컬 정보와 팁] 부분 중 어느 글에 나는 위 제목과 같이 원인에 대한 소개와 함께 해결 방법을 댓글로 단 적이 있었다. 자신이 소개한 방법으로 해결을 보았다는 분들이 계시기에 이 글을 블로그에 옮겨 적어본다.

비스타 SP1(x84, x64)에서 네트워크 속도 저하는 여러 원인이 있을 수 있다.
음악을 듣거나 동영상을 재생하는 중에 네트워크에 속도 저하(인터넷 속도가 최대 70Mbps, 내부 LAN의 기가비트 모드 전송 속도가 최대 약 14MB/s 정도일 경우)가 있는 경우, 아래와 같은 방법으로 해결할 수 있다. 
원인은 WaveOut와 DirecSound를 사용한 어플리케이션 사용 시, 쉽게 말해 멀티미디어 관련 프로그램(음악과 동영상 재생을 하는 웹페이지도 포함)을 가동 시 MMCSS(Multimedia Class Scheduler Service)에서 네트워크 트래픽을 통제를 하기 때문이다. 중요한 서비스 기능 중 하나인 MMCSS를 다른 문제가 발생할 수 있기 때문에, 트래픽 제어 기능만 해제하여 해결하도록 한다.

①먼저 레지스트리 편집기(regedit)를 실행한다. 그 다음 아래의 주소와 같이 이동한다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\
②다음은 NetworkThrottlingIndex의 데이터 값을 변경한다.
기본값은 10이다. 기능을 해제하기 위해 FFFFFFFF로 변경한 뒤 재부팅 한다.

※추가 내용※
* 이 문제는 내장 사운드카드보다 외장 사운드카드 사용 시에 더 많이 발생되는 문제로 보인다.
* 광랜(100Mbps)급의 인터넷을 사용하지 않더라도, 기가비트 모드로 네트워크를 구성하였으나 전송 속도가 정상적으로 나오지 않을 경우, 이 레지스트리를 수정해보는 것을 고려하도록 한다.
* 이 이슈와 관련된 마이크로소프트 고객지원 페이지는 다음과 같다.
http://support.microsoft.com/kb/948066/en-us

나는 이 원인 때문에 서비스를 한 개씩 꺼보고 나서 MMCSS가 원인인 것 발견한 후, 구글 검색을 통해 해외 웹페이지에서 관련 이슈를 발견하여 해결할 수 있었다.
내가 위 글을 파코즈에 댓글로 쓰기 전까지 위 이슈와 관련된 한국의 웹페이지는 한 곳도 발견할 수 없었는데,
지금은 NetworkThrottlingIndex으로 검색만 해도 국내 페이지가 몇 개 보인다. 파코즈에 댓글을 단 이후의 글들이기 때문에 자신의 댓글을 본 이후 글을 적었을 것이다. 이로써 파코즌 분들이 많이 계시다는 것을 실감할 수 있었다.

어느 순간 파코즈에 가입일을 보니 2002년 02년 02일 이었다.
아마도 내가 AMD Athlon XP 1700+ CPU를 사용하던 시절에 가입한 것 같다.
세월 참 빠르다는 걸 느낀다.


%출처 : http://joyplus.tistory.com/237

Posted by 철냄비짱
,

urlencode() / urldecode():
하나의 특수문자, 한글, multi-byte 문자를 %XX 형식으로 변환합니다. 길이가 좀 길어진다는게 단점입니다. 또한 [0-9a-zA-Z] 등은 encode 하지 않아 그대로 보인다는 단점(?) 도 있습니다.
보안성이 없거나 크게 요구되지 않는 경우나 일반적으로 많이 사용하는 방법이며, URL GET 방식으로 어떤 값을 넘길때도 많이 사용됩니다.


base64_encode() / base64_decode()
변환된 문자는 [0-9a-zA-Z+/=] 문자들로 구성되어지며 역시 약간 길이가 길어집니다.
쉽 게 눈으로 판독(decode)할 수 없다는 장점(?)도 있습니다. 저수준의 보안성이 요구될때 사용하는 경우가 많습니다. URL GET 방식으로 어떤 값을 넘길때도 사용되지만 약간의 문제점이 있습니다.(+, / 문자 처리 문제, 아래 참고)


serialize() / unserialize()
이 함수는 어떤 특정 변수(variable)의 형태를 그대로 유지하면서 하나의 문자열로 변환합니다. 실제 본문의 문자열은 다른 형태로 변환되지 않으며, 다만 변수 형태를 유지하기 위해서 특정 형태의
문자열들이 붙습니다.
이 경우는 보통, 1차원 또는 다차원 배열을 하나의 문자열로 만들어 마치 하나의 문자열 변수처럼 취급하고자 할 경우에 많이 사용합니다. (쿠키나 세션 또는 파일저장 등에 많이 사용됨)
역시 URL GET 방식으로도 사용될 수 있지만 약간의 문제점이 있습니다.
(+, /, &, ?, # 등등 특수문자나 multi-byte 문자 처리 문제)


user_encode() / user_decode()
GET 방식등으로 어떤 값을 넘길 경우, 비교적 보안성이 요구될때 이런 사용자 정의 함수에 의해서 단방향이 아닌 쌍방향 함수를 이용하는 방법을 말합니다.
이때는 비밀키가 노출되면 안되겠죠...


이렇게 약간씩 그 쓰임새가 다르기 때문에 상황에 따라 적절한 방법을 선택하여 사용하면 됩니다.

*주의)
base64_encode() 로 변환된 문자열을 곧바로 GET 방식으로 넘기면 약간 문제점이 있습니다.

즉, '+' 문자와 '/' 문자인데, 값을 받을 때 '+'를 '+' 자체가 아닌 공백(%20)으로 인식하는 경우가 있습니다. (PHP 버전 문제아니면, 특이한 USER_AGENT 해석의 차이인듯)
(공백 ' '(%20)을 urlencode 하면 '+' 가 되죠)

따라서 '+' 를 다른 문자(?,/,#,&등은 절대 금물)나 문자열로 교체해줘야 합니다.
또한 '/' 문자도 디렉토리 구분이나 PATH_INFO 의 구분으로 인식할 수 있으므로 (PATH_INFO 로 구분하여 값을 받을 경우)역시 적절한 문자나 문자열로 교체해줘야 합니다.


*정리하면)
문자열(또는 특정 변수의 문자열 형태)을 URL GET 방식으로 넘길때 조심해야할 문자가 있습니다.
즉,
(공백), +, ?, #, &, / 등입니다.

(공백) : 이하를 해석하지 못하는 USER_AGENT 가 있을 수 있음
+ : 공백으로 해석 또는 인식되는 경우가 있음
? : 이하 쿼리로 인식됨
# : 이하 문자를 fragment 로 인식될 수 있음
& : 쿼리의 구분으로 인식될 수 있음
/ : PATH_INFO 로 구분한다면 하나의 path 로 인식되지 않음

이런 점만 주의한다면 어느 함수를 사용하든지 상관없겠죠(보안성 문제 제외).

이런 문자 처리를 자동(?)으로 처리해주는게 urlencode() 함수이며, 문자열 보안성은 결여되어 있습니다.

따라서, 이런 관점에서, 단독적인 base64_encode() 나 serialize() 함수는 URL GET 방식에 적합하지 않습니다.

Posted by 철냄비짱
,

rawurlencode

PHP 2008. 10. 30. 11:23

본 자료는 오토셋개발자그룹(www.autoset.org)에서 PHP 그룹(www.php.net)의 자료를 복사한 것으로 2006-12-01 09:48를 기준으로 작성되었습니다.

rawurlencode

(PHP 3, PHP 4 , PHP 5)

rawurlencode -- RFC 1738에 따라 URL을 인코드합니다.

설명

string rawurlencode ( string str)

-_.을 제외한 모든 영숫자가 아닌 문자를 퍼센트(%) 사인에 이어지는 두 16진수로 교체한 문자열을 반환합니다. 이는 표시 문자가 특별한 URL 구분자로 해석되는걸 방지하고, 문자 변환이 이루어지는 전송 매체(몇몇 email 시스템 등)에서 URL을 보호하기 위한 RFC 1738에 설명된 인코딩입니다. 예를 들어, FTP URL에 패스워드를 포함하고자 한다면:

예 1. rawurlencode() 예제 1

<?php
echo '<a HREF="javascript:RefAutoSet('PHP_FUNC','ftp://user:');", rawurlencode('foo @+%/'),
    
'@ftp.example.com/x.txt">';
?>

혹은, URL의 PATH_INFO 안에 경로 정보를 전달하고자 한다면:

예 2. rawurlencode() 예제 2

<?php
echo '<a HREF="javascript:RefAutoSet('PHP_FUNC','http://example.com/department_list_script/');",
  
rawurlencode('sales and marketing/Miami'), '">';
?>
295e

참고: rawurldecode(), urldecode(), urlencode(), RFC 1738.

Posted by 철냄비짱
,

urldecode

PHP 2008. 10. 30. 11:22

본 자료는 오토셋개발자그룹(www.autoset.org)에서 PHP 그룹(www.php.net)의 자료를 복사한 것으로 2006-12-01 10:16를 기준으로 작성되었습니다.

urldecode

(PHP 3, PHP 4 , PHP 5)

urldecode -- URL 인코드 문자열을 디코드합니다.

설명

string urldecode ( string str)

주어진 문자열의 %## 인코딩을 디코드합니다. 디코드한 문자열을 반환합니다.

예 1. urldecode() 예제

<?php
$a
= explode('&', $QUERY_STRING);
$i = 0;
while (
$i < count($a)) {
  
$b = split('=', $a[$i]);
   echo
'Value for parameter ', htmlspecialchars(urldecode($b[0])),
        
' is ', htmlspecialchars(urldecode($b[1])), "<br />\n";
  
$i++;
}
?>
3299

참고: urlencode(), rawurlencode(), rawurldecode().

Posted by 철냄비짱
,

alert()은 다이알로그 박스에 메시지를 나타낼 때 사용

confirm()은 메시지를 나타내고 확인을 할 때 사용(OK/Cancel)

prompt()는 메시지를 나타내고 문자열의 입력을 받을 때 사용


<예>

<HTML>
<HEAD><TITLE>Alerts, Confirmations, and Prompts</TITLE>
</HEAD>
<BODY>
 <H1>Alerts, Confirmations, and Prompts</H1>
 <HR>
  Use the buttons below to test dialogs in JavaScript.
 <HR>
 <FORM NAME="winform">
  <INPUT TYPE="button" VALUE="Display an Alert"
  onClick="window.alert('This is a test alert.');  ">
  <P><INPUT TYPE="button" VALUE="Display a Confirmation"
  onClick="temp = window.confirm('Would you like to confirm?');
  window.status=(temp)?'confirm: true':'confirm: false'; ">
  <P><INPUT TYPE="button" VALUE="Display a Prompt"
  onClick="var temp = window.prompt('Enter some Text:','This is the default value');
  window.status=temp;  ">
 </FORM>
 <BR>Have fun!
 <HR>
</BODY>
</HTML>

Posted by 철냄비짱
,

foreach($_POST as $key => $value)
{
 if($value)
 {
  $value = strip_tags($value);
  ${$key} = RemoveXSS(trim($value));
 }
}


foreach($_GET as $key => $value)
{
 if($value)
 {
  $value = strip_tags($value);
  ${$key} = RemoveXSS(trim($value));
 }
}


구문 사용시 따로 변수를 받아내는 작업 필요 없이 바로 사용가능
Posted by 철냄비짱
,

int strtotime ( string $time [, int $now ] );

Examples

Example #1 A strtotime() example

<?php
echo strtotime("now"), "\n";
echo 
strtotime("10 September 2000"), "\n";
echo 
strtotime("+1 day"), "\n";
echo 
strtotime("+1 week"), "\n";
echo 
strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo 
strtotime("next Thursday"), "\n";
echo 
strtotime("last Monday"), "\n";
?>

Example #2 Checking for failure

<?php
$str 
'Not Good';

// previous to PHP 5.1.0 you would compare with -1, instead of false
if (($timestamp strtotime($str)) === false) {
    echo 
"The string ($str) is bogus";
} else {
    echo 
"$str == " date('l dS \o\f F Y h:i:s A'$timestamp);
}
?>
Posted by 철냄비짱
,
<script type="text/javascript">
//내용창 100자 제한
function ismaxlength(obj){
 var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
 if (obj.getAttribute && obj.value.length>mlength) {
  alert("글자수는 100자로 제한되어 있습니다.");
  obj.value=obj.value.substring(0,mlength);
 }
}
</script>

<textarea id="comment" name="content" cols="" rows="" maxlength="100" onkeyup="return ismaxlength(this)"></textarea>
Posted by 철냄비짱
,

SWFObject

Javascript 2008. 10. 10. 14:59



얼마전 부터 플래시를 활성화 시키기가 좀 짜증나 졌다.

익스플러워 업데이트 되고 부터 이런저런 자바스크립트 소스들이 나오기 시작했는데...

어도비에서 제공되는 익스텐션도 괜찮았다.

하지만 요즘 들어 swfObject를 제일 많이 사용하는 것 같다.

 

http://blog.deconcept.com/swfobject/ 를 가보면 소스와 사용법을 볼수있다.

 

주의 할건 플래시를 넣은 table 이나 div 위에 height 값을 정해 주지 않고 그 않에 파일을 import 하면 다른 링크로 갈때나 새로고침 할때 플래시 컨텐츠가 순간 올라간다

 

우선 간단하게 정리해 본다.

 

 

사용방법

 

SWFObject.js 파일을 include 해서 간단한 코드만 몇 줄 작성하면 된다.

아래 샘플을 보자.

 

<script type="text/javascript" src="swfobject.js"></script>

<div id="flashcontent">

This text is replaced by the Flash movie.

</div>

<script type="text/javascript">

var so = new SWFObject("movie.swf", "mymovie", "200", "100", "7", "#336699");

so.write("flashcontent");

</script>

<div id="flashcontent">[...]</div>

위 코드는 Flash plug-in 버전이 낮거나 설치 되있지 않으면 출력된다.

 

 

var so = new SWFObject(swf, id, width, height, version, background-color);

 

기본 파라미터 :

 

  • swf - swf 파일경로와 파일명.
  • id - object나 embed tag의 ID.
  • width - Flash movie width.
  • height - Flash movie height.
  • version - Flash content에서 요구하는 player 버전. format : 'majorVersion.minorVersion.revision'. ex) "6.0.65". 또는 major 버전만 기입해도 된다("6").
  • background color - background color.

     

     

    추가 파라미터 :

     

  • useExpressInstall - 만약 ExpressInstall 기능을 사용할려면 'true'로 설정
  • quality - quality 설정. default는 "high".

  • xiRedirectUrl - 만약 ExpressInstall을 이용해 upgrade를 완료한 유저를 redirect 하길 바란다면 교체될 URL을 여기서 정할수 있다.

  • redirectUrl - 만약 최신 plug-in버전을 가지고 있는 않는 유저를 redirect 시킬려면 이 파라미터를 사용해라. 그러면 redirect 될것이다.

  • detectKey - 사용 않해봐서 모르겠다..ㅡㅡ; 해석도 맞는지 모르겠다. 원문을 참고해라.

    이것은 SWFObject script가 detection을 우회할때 찾을 url 변수 이름이다. default는 'detectflash'. Example : 너는 ?detectflash=false 를 파일명 뒤에 붙이는 걸로 Flash 탐지를 우회해서 간단하게 페이지에 플래시를 보여준다.

    This is the url variable name the SWFObject script will look for when bypassing the detection. Default is 'detectflash'. Example: To bypass the Flash detection and simply write the Flash movie to the page, you could add ?detectflash=false to the url of the document containing the Flash movie.

     

     

    so.write("flashcontent");

     

    열거된 HTML element 내부에 재배열 하는 것으로 SWFObject script가 페이지에 flash 컨텐츠를 쓰는 것이다.(만약 적합한 플러그인 버전이 인스톨 되 있다면)

    굳이 div 레이어에 넣지 않아도 된다. td 태그에도 id와 name값을 지정해 주고 so.wirte(id)를 호출해주면 된다.

     

     

    SWFObject가 작동되는 브라우져

     

    SWFObject는  PC: IE5/5.5/6, Netscape 7/8, Firefox, Mozilla, and Opera Mac: IE5.2, Safari, Firefox, Netscape 6/7, Mozilla, and Opera 7.5+에 작동되고 있다.

     

     

     

    plug-in 탐지에 있어서 SWFObject's built는 무시 당할수 있다. 만약 새로운 브라우저가 언젠가 런치 되거나, 유저시스템에서 plug-in 탐지 실패의 어떤 이유 때문에, SWFObject에 대한 탐지 built를 비활성화 할 우회 링크를 include 할 수 있고, 우회링크는 항상 페이지에 플래시 컨텐트를 보여줄것이다. 우회 링크를 사용하는 방법은, 간단하게 플래시 컨텐츠가 있는 페이지로 링크를 거는 것이다. url에 'detectflash=false'를 붙이는 것이다.

     

    <a href="mypage.html?detectflash=false">Bypass link</a>

     

     

     

    추가 파라미터를 추가하는 샘플

     

    <script type="text/javascript">
       var so = new SWFObject("movie.swf", "mymovie", "200", "100%", "7", "#336699");
       so.addParam("quality", "low");
       so.addParam("wmode", "transparent");
       so.addParam("salign", "t");
       so.write("flashcontent");
    </script>

     

    사용가능은 전체 파라미터

     

     

    "Flashvars" parameter 사용법

     

    변수이름/변수값으로 추가로 추가 해주면 된다. Flash Player 6 이상에서 작동.

     

    <script type="text/javascript">
       var so = new SWFObject("movie.swf", "mymovie", "200", "100", "7", "#336699");
       so.addVariable("variable1", "value1");
       so.addVariable("variable2", "value2");
       so.addVariable("variable3", "value3");
       so.write("flashcontent");
    </script>

     

     

    html에 get방식으로 넘어온 값을 가져오는 방법

     

    http://www.example.com/page.html?variable1=value1&variable2=value2 이렇게 넘어 왔다면:

    아래처럼 getQueryParamValue()을 사용해 값을 가져오면 된다.

     

    <script type="text/javascript">
       var so = new SWFObject("movie.swf", "mymovie", "200", "100", "7", "#336699");
       so.addVariable("variable1", getQueryParamValue("variable1"));
       so.addVariable("variable2", getQueryParamValue("variable2"));
       so.write("flashcontent");
    </script>

     

    getQueryParamValue()location.hash에서 변수값을 읽어 온다.

     

     

    SWFObject에서 'Express Install' 사용하기

     

    expressinstall.as는 위 사이트 가서 소스를 받으면 들어 있다. so_tester.fla 참조

     

    #include "expressinstall.as"

    //ExpressInstall object 초기화

    var ExpressInstall = new ExpressInstall();

    // 만약 업데이트가 필요하면, 'start upgrade' 버튼을 보여준다.

    if (ExpressInstall.needsUpdate) {

    // ExpressInstall.init()을 호출하는 것으로 자동으로 업데이트를 시작할수 있다.

    // 유저에게 보여줄 메시지와 start 버튼이 있는 무비클립을 attach 시켜서 중앙으로 이동시킨다.

    var upgradeMsg = attachMovie("upgradeMsg_src", "upgradeMsg", 1);

    upgradeMsg._x = Stage.width / 2;

    upgradeMsg._y = Stage.height / 2;

    // attach 한 무비클립내의 버튼에 Expressinstall updater 시작하는 action 기입

    upgradeMsg.upgradeBtn.onRelease = function() {

    // ExpressInstall.init() method는 실제로 update를 실행 시킨다.

    ExpressInstall.init();

    }

    // expressinstall가 호출 되었으면 timeline을 멈춰라.

    stop();

    }

     

    ExpressInstall을 체크하는 프레임에는 아무것도 작성하지 않는 것이 중요하다.

     

    만약 팝업윈도우나, ExpressInstall update을 완료했을때 다른 url로 보낼려면, xiRedirectUrl 속성을 사용하여, 플래시 무비가 있는 활성화된 페이지 대신에 유저를 보낼 페이지로 redirect 시킬수 있다.

     

    <script type="text/javascript">
       var so = new SWFObject("movie.swf", "mymovie", "200", "100", "8", "#336699", true);
       so.setAttribute('xiRedirectUrl', 'http://www.example.com/upgradefinished.html'); // 반듯이 존재해야 하는 페이지
    o.write("flashcontent");
    </script>

     


     

  • Posted by 철냄비짱
    ,


    이번에 KTF로 옮기면서 산 속칭 김태희 디스코폰,

    기다란것이 보자마자 와이드란 생각이 든다. DMB, MP3 기타 등등 기능들이 많은데,

    주로 디엠비나 문자, 전화 정도만? 그리고 데이터케이블이 있으면 외장형 하드디스크로 바로 쓸 수 있다는 점이

    맘에 든다...

    매일 쓴다쓴다 하는 리뷰는 한번도 안하네 ^^;;;

    언젠가는~
    Posted by 철냄비짱
    ,