2008년 1월 22일 화요일

DOM TO ARRAY SAMPLE

<?php

function dom_to_simple_array($domnode, &$array) {
  $array_ptr = &$array;
  $domnode = $domnode->firstChild;
  while (!is_null($domnode)) {
    if (! (trim($domnode->nodeValue) == "") ) {
      switch ($domnode->nodeType) {
        case XML_TEXT_NODE: {
          $array_ptr['cdata'] = $domnode->nodeValue;
          break;
        }
        case XML_ELEMENT_NODE: {
          $array_ptr = &$array[$domnode->nodeName][];
          if ($domnode->hasAttributes() ) {
            $attributes = $domnode->attributes;
            if (!is_array ($attributes)) {
              break;
            }
            foreach ($attributes as $index => $domobj) {
              $array_ptr[$index] = $array_ptr[$domobj->name] = $domobj->value;
            }
          }
          break;
        }
      }
      if ( $domnode->hasChildNodes() ) {
        dom_to_simple_array($domnode, $array_ptr);
      }
    }
    $domnode = $domnode->nextSibling;
  }
}

  # now, let's make a sample string containing some XML
  $strXMLData = "<contacts>
       <contact>
         <name>
           John Doe
         </name>
         <phone>
           123-456-7890
         </phone>
       </contact>
       <contact>
         <name>
           Mary Smiley
         </name>
         <phone>
           567-890-1234
         </phone>
       </contact>
     </contacts>";

  # create a DOM tree xml object (hierarchical array) from
  # this XML string
  $domdoc = new DOMDocument;
  $domdoc->loadXML($strXMLData);

  # now simplify the DOM array into a very simple array structure

  # first, create an empty array to be filled with your
  # simplified array result..
  $aData = array();

  # now, pass the dom document and your empty array to the
  # converter function.
  dom_to_simple_array($domdoc, $aData);

  # now $aData contains your simplified array, so print it out
?><html>
<body>
<p>there are <? echo count($aData['contacts'][0]['contact']); ?>
contacts</p>
<p>the 2nd contact's phone number is
<?echo $aData['contacts'][0]['contact'][1]['phone'][0]['cdata']; ?>
</p>
<hr />
<p>Here is the raw array structure:</p>
<pre>
<? print_r($aData); ?>
</pre>
</body>
</html>

2008년 1월 11일 금요일

vb download



devpia에서 훔쳐 온거..ㅋㅋ

기본적으로 http
파일을 받기 위해서, url 연결해서 정해진 위치에 파일을 다운로드 받는 기능을 가진 클래스입니다구현도 간단하고, 사용법도 간단합니다. 이걸 만든 목적은 이어받기를 보다 편한방법으로 하기위해서 만들었습니다.

 

 아마도 Microsoft WinHTTP Services, version 5.1 LIbrary WinHttpRequest클래스는 많이 써보셨을겁니다.. 잘보면 cHTTPFile클래스는 WinHttpRequest클래스처럼 URL정보를 효과적을 Query하는 메서드가 없고, 비동기전송을 하는 기능도 구현하지않았는데, 왜냐하면 클래스의 목적은 단지 '이어받기 지원'이므로구현하지는 않았습니다. (별로 사용하지 않는기능이기도 하고... 물론 귀찮아서 ㅡㅡ;;)

  URL정보를 Query하는 루틴은 이미 cHTTPFile클래스에 있습니다만..  전송방식은 동기전송방식이므로 비동기전송방식에 대한 코드가 없으므로 간단히 구현방향에 대해서 설명드리겠습니다.

  간단하게 비동기전송방식으로 구현하시려면 InternetReadFileEx 파일을 받는 루틴으로 변경하시고 Url연결부분에서 비동기모드로 연결하고 기타 여러가지 처리를 해주시면 됩니다.

 

  아무튼 Wininet.dll API 사용했으니 그런 멤버들을 구현하시기 어렵지는 않을것입니다.

 

  우선 cHTTPFile 개체를 생성(WithEvents구문을 사용하셔서 각종 이벤트를 처리할수있습니다.)하신 ,

Connect메서드로 파일이존재하는 Url 연결합니다. 메서드는 연결성공및 실패이유등을 아룻있도록 hfConnectResult열거형 상수중 하나를 반환합니다그리고 SetLocalPath메서드로 어느곳에 파일을 받을지 지정합니다. 첫번째인수는 받을 폴더주소이고, 두번째 인수는 파일이름인데 생략가능하며, 생략하면 URL 파일이름으로 설정됩니다.

이렇게 다운로드 받을 URL 저장할 위치를 정했으면,

Download메서드를 호출하시면 됩니다. 이때 다운로드 메서드인 인수 Overwrite True 하시면. 기존에 존재하는 파일을 제거하고 다시받습니다. 그리고 인수를 False 하면기존의 파일을 이어받기 다운로드 받습니다. 그리고 cHTTPFile개체로 할일이 없다면. Disconnect메서드를 호출해서 연결을 끊으면 됩니다..

밖에 다른 멤버들은 설명할필요없이 이름 그대로의 기능(위에서 말한 것도 그렇지만..) 합니다..  (-Cancel메서드로 다운로드받는중 다운로드를 취소가 가능하고, StatusCode속성은 200인경우 정상적인 URL이라고 알수있습니다..)

 

Example Code>>

 

cHTTPFile cHTTPFile 평가되는 식이고 Boolean True False 평가될수있는 식입니다. 그리고 [] 생략가능한 인수입니다.


    cHTTPFile.Connect "URL주소"

    cHTTPFile.SetLocalPath "저장될 폴더위치", ["파일명"]

    cHTTPFile.Download Boolean'덮어쓰기 혹은 이어받기할지 설정

    cHTTPFile.Disconnect


이벤트를 사용하려면 WithEvents 사용하셔서 다음 이벤트를 사용하면 됩니다.


Public Event Connect(State As hfConnectResult)  //
연결할때 발생
Public Event Disconnect() //
연결을 끊을때 발생

 

//다운로드가 시작할때 발생

>>FileName  다운받을 파일의 파일명이고, FileSize URL상의 파일크기입니다.
Public Event DownloadStart(ByVal FileName As String, ByVal FileSize As Long)

 

//다운로드가 시작할때 발생

>>Data() 받아진 데이터의 내용이고, CurrentFileSize 현재까지 받아진 크기입니다.
Public Event DownloadDataAvailable(Data() As Byte, CurrentFileSize As Long)


Public Event DownloadCompleted()  //
다운로드가 완료될때 발생
Public Event DownloadCancelled()  //
다운로드가 취소될때 발생

 

//다운로드가 실패할때 발생

>>Error  실패원인으로 hfConnectResult hfErrorCode 열거형상수값중 하나를 반환합니다.
Public Event DownloadFailed(ByVal Error As Long)

 

아무튼 사용하시기를... ^^

2008년 1월 10일 목요일

[xml] in php

xml sample
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee id="345435">
<name>John Smith</name>
</employee>
</employees>
xml_decode
<?php

// The raw post body is available in the variable $HTTP_RAW_POST_DATA
$employees = xml_decode($HTTP_RAW_POST_DATA);

// Get the employee element
$employee = $employees->employee[0];

// Get the id attribute
$id = $employee['id'];

// Get the name
$name = $employee->name->toString();

?>


xml_encode
$var = array('name' => "Smith", 'address' => array('line1' => 'This lane', 'line2' => 'Somewhere'));
echo xml_encode($var,  "employee");


xml_encode source
function xml_encode($array, $indent=false, $i=0) {
if(!$i) {
$data = '<?xml version="1.0"?>'.($indent?"\r\n":'').'<root>'.($indent?"\r\n":'');
} else {
$data = '';
}

foreach($array as $k => $v) {
if(is_numeric($k)) {
$k = 'item';
}

$data .= ($indent?str_repeat("\t", $i):'').'<'.$k.'>';

if(is_array($v)) {
$data .= ($indent?"\r\n":'').xml_encode($v, $indent, ($i + 1)).($indent?str_repeat("\t", $i):'');
} else {
$data .= $v;
}

$data .= '</'.$k.'>'.($indent?"\r\n":'');
}

if(!$i) {
$data .= '</root>';
}

return $data;






2008년 1월 6일 일요일

[알베르카뮈] 시지프신화

신들은 시지프에게 바위를 산꼭대기까지 끎임없이 굴려 올리는 형벌을 주었다. 이 바위는 산꼭대기에 다다르면 스스로의 무게로 인하여 다시 산 밑으로 굴러 떨어지곤 했다. 무용하고 희망없는 노동보다 더 끔직한 형벌은 없다.


그는 왜 신들의 노여움을 사게 되었을까? 신화에 의하면 여러의견이 분분하나 여기서 그 이유는 중요하지 않다, 그는 어떤 이유로 인해 신들의 노여움을 사게 되었고 바위를 굴려 올리는 형벌을 받았다는 것이었다. 그는 아무것도 성취할 수 없는 일에 전 존재를 다 바쳐야 하는 형용할 수 없는 형벌을 받게 된 것이다.


그는 돌을 산으로 굴러 올리기 위해 자신의 모든 노력과 정렬을 다 바쳐야 했다 그의 온 몸은 바위를 기대고 있으며 억센 두 다리로 땅을 강하게 지지하고 있으며 힘겨운 걸음 하나하나에는 돌을 밀어 올리고야 말겠다는 강한 의지의 표현이다. 결국 기나긴 노력의 대가로 돌을 정상에 위치하게 하고는 덧없는 희망을 갖을 것이다. '해냈구나' 허나 바위는 속절없이 다시 아래로 굴러 떨어져 버린다. 신의 뜻인것이다. 그는 또다시 돌을 굴러 올려야 한다. 그는 정상에서 산 밑의 바위를 향해 무거운 걸음을 다시 옮기게 될 것이다. 그는 무슨 생각을 하며 산 아래로 내려 왔을까? 다시 올려봐야 돌은 다시 밑으로 떨어질텐데 혹시 다음번엔 돌이 산 정상에 그대로 머물게 해달라고 신에게 기도 하면서 희망을 얻지는 않았을까?


카뮈는 그에게 고뇌를 안겨주는 통찰이 동시에 그의 승리를 완성시킬 것이다. 멸시로 응수하여 극복되지 않는 운명이란 존재하지 않는다라는 다소 모호한 얘기를 했지만 나는 그 고통이 어떻게 그에게 승리를 완성시킨다는 것인지 이해가 되질 않았다. 그에겐 희망이 없었다고 하지만 인간이란 존재는 0.001%의 희망이라도 있으면 그 희망에 기대해 모든것을 극복해 내는 존재가 아니던가? 그러면서 카뮈는 오이디푸스의 예를 든다. 오이디푸스는 아무런 사실을 모른체 그의 운명대에 복종한다. 그가 알게 되는 순간부터 모든 비극은 시작된다. 종국에 그는 "내가 판단하노니 만사가 잘되었다" 라고 한다. 인간은 항상 긍적적으로 생각한다는 것을 느낄 수 있었다. 그 한마디는 운명을 인간의 문제로, 인간들끼리 처리할 문제로 만드는 것이다.


그가 돌을 산 정상으로 올리는 일 조차 자신의 일로 만들어 버리는 것이다. 시지프는 이야기 할 것이다. "모든것이 잘 되었어"라고 그 한마디로 그의 인생은 그의 것이 되고 그가 스스로 판단해 하게 되는 일이 되는 것이다. 부조리한 인간이 자신의 고통을 응시할 때 모든 우상들은 침묵하고 인생은 자기것이 되는것이다. 인간은 스스로 살아가는 날의 주인이 되는것이다.


나도 매일 반복되는 일이 힘들게 느껴지고 여기가 지옥이구나 하는 우스운 생각을 해본적이 있다. 하지만 나에겐 꿈이 있고 이 길은 내 스스로 선택한 일이기에 "내가 판단하노니 만사가 잘 처리 되었다" 라고 감히 말해 본다. 내 인생은 나의 것이다 어느 누구의 것도 아니다.


2008년 1월 4일 금요일

백설공주가 독이든 사과를 먹으면?

엄마와 익현이가 책을 보고 있었다.
엄마: 백설공주가 독이든 사과를 먹으면 어떻게 될까요?
익현: 콱 죽~~어.

흠..어찌 알았을까?

2008년 1월 3일 목요일

[css] div의 위치를 우측 하단으로 내리고 싶을 경우

#container {position: relative; width: 100%; height: 125px;}
#copy {position: absolute; right: 10px; bottom: 10px;}

<div id="container">

  <div id="copy">
    &copy; ELATED 2006
  <div>
<div>



Container의 positon 속성을 relative로 두면 자식 div인 #copy가 absolute속성을 갖어도 #container div의 내부에서 움직인다...