공룡호가 사는 세상 이야기

일단 하나의 폼 안에 2개 이상의 버튼이 있을 경우, 그리고 이 버튼의 type이 submit일 경우,
각기 다른 action을 가진 버튼이 있다손 치더라도 모조리 submit 되어버린다.
방법은 간단하다. 버튼의 type을 button으로 정의하고, 해당 버튼에 onClick 이벤트를 걸어준다.
그리고 스크립트를 작성하여 스크립트 내에서 폼의 유효성 검사를 하고 form.submit()을 마지막에 수행하도록 한다.

예제#1(스크립트)
<script>
function mySubmit(index) {
if (index == 1) {
document.myForm.action='page1.html';
}
if (index == 2) {
document.myForm.action='page2.html';
}
document.myForm.submit();
}
</script>

예제#1(호출)
<form name='myForm' method='post'>
<input type='button' onClick='mySubmit(1)'>
<input type='button' onClick='mySubmit(2)'>
</form>

위 처럼 코드를 작성하면 page1, page2로 각각 submit이 가능하다.
약간 응용(?)을 하면 아래와 같은 코드도 가능하다.

예제#2 (스크립트)
<script>
function mySubmit() {
var element = document.myForm.text1.value;
window.open('popup.html?txtval='+element,'','width=50,height=50');
}
</script>

예제#2 (호출)
<form name='myForm' method='post' action='next.html'>
<input type='text' name='text1'>
<input type='button' onClick='mySubmit()'>
<input type='submit'>
</form>

위와 같이 코드를 작성하면, 호출 측에서 submit 버튼을 클릭할 경우, 폼의 기본 전송파일인, next.html로 폼이 submit 된다.
그러나 type이 button으로 설정된 버튼을 선택할 경우에는, text1 값을 post방식으로 팝업창(popup.html, 50x50)을 띄워 개별적으로 submit 할 수 있다.

팔자에도 없는 웹 개발을 시작하게 되니, 별 것들이 다 막힌다.
혹시라도 모르시는 분들을 위해,
그리고 나의 기억력을 위해,
포스팅.

코드를 짜다 보면, 종종 현재 페이지의 각 컴포넌트들을 제어해야 할 경우가 빈번하게 발생한다.
아래 코드는 현재 페이지에 "radio1" 으로 명명된 컴포넌트를 찾고,
그 중에서, checked 옵션이 true인 컴포넌트를 찾아 그 값을 출력한다.
getElementsByName을 사용했지만, 근래 getElementsByClassName도 추가되었다. (단 IE6은 지원되지 않음)
그 외에도 다양한 document class내 함수가 존재하니 찾아보면 많은 도움이 될 듯.

<script>
    function getSelected(){
        var element1 = document.getElementsByName("radio1");
        for(var i=0; i<element1.length; i++) {
            if(element1[i].checked){
                alert(element1[i].value);
            }//if
        }//for
    }//function
</script>

호출측
onclick=getSelected()


안녕하세요.
phpschool 에서 나이별로 막대그래프를 생성하는 방법을 검색하던 중 딱 입맛에 맞는 글이 없어서 나름 고민해서 나온 방법입니다.
이미 알고 계신 정보일 수도 있고 허접한 정보이지만 차트를 만드는데 조금이나마 도움이 되면 좋겠습니다.

그래프는 Open Flash Chart 를 사용하였습니다.
Open Flash Chart 에 대해서는 다음의 사이트를 참고하여서 보시는 게 설명보다는 나을 듯 하여서 생략합니다.
http://teethgrinder.co.uk/open-flash-chart-2/

생일 데이터가 0000-00-00 식으로 들어가 있다고 가정합니다.

Open Flash Chart 에 들어갈 데이터 파일은 다음과 같이 만듭니다.
====================
$rangeQry = "SELECT count( * ) as range_count, ( ";
$rangeQry .= " CASE WHEN a.age <10 THEN '00' ";
$rangeQry .= " WHEN a.age >=10 AND a.age <20 THEN '10' WHEN a.age >=20 AND a.age <30 THEN '20' ";
$rangeQry .= " WHEN a.age >=30 AND a.age <40 THEN '30' WHEN a.age >=40 AND a.age <50 THEN '40' ";
$rangeQry .= " WHEN a.age >=50 AND a.age <60 THEN '50' WHEN a.age >=60 AND a.age <70 THEN '60' ";
$rangeQry .= " WHEN a.age >=70 THEN '70' END ) AS age_range ";
$rangeQry .= " FROM ( ";
$rangeQry .= " SELECT num, date_format( now( ) , '%Y-%m-%d' ) - left( birth, 4 ) AS age FROM christ_basic_info ";
$rangeQry .= " )a GROUP BY age_range ORDER BY age_range ";
=====================
요로코롬 하시면 10대 미만 몇명, 10대 몇명...이런식으로 결과가 나옵니다.
$bar_values = array();
while($rangeRes = mysql_fetch_array($rangeSql)){
$rangeTempData = intval($rangeRes[range_count]);
array_push($bar_values, $rangeTempData);
}
//$bar_values = array(321,749,702,608,649,505,947,365 ); -> 예제데이터
$bar = new bar_filled( '#E2D66A', '#577261' );
$bar->set_values( $bar_values );
$tags = new ofc_tags();

$tags->font("굴림체", 12)
->colour("#333333")
->align_x_center()
->text('#y# 명');

$x=0;
foreach($bar_values as $v)
{
$tags->append_tag(new ofc_tag($x, $v));
$x++;
}

$x = new x_axis();
$x_labels = new x_axis_labels();
$x_labels->set_colour( '#666666' );
$x_labels->set_size( 12 );
$x_labels->set_labels(
array( '10대미만','10대','20대','30대','40대','50대','60대','70대이상' )
);
$x->set_labels( $x_labels );

$chart = new open_flash_chart();
$chart->set_title( $title );
$chart->add_element( $bar );
$chart->add_element( $tags );
$chart->set_x_axis( $x );

$y = new y_axis();
$y->set_label_text('#val# 명');
$y->set_range( 0, 1200, 200);

$y_labels = new y_axis_labels();
$y_labels->set_colour( '#666666' );
$y_labels->set_size( 12 );
$y->set_labels( $y_labels );

$chart->set_y_axis( $y );
$chart->set_bg_colour( '#FFFFFF' );
echo $chart->toString();

---
phpschool, 바램선수님

간만에 웹기반 코딩을 하니, 생각보다 잘 안됩니다.
늘 그렇지만, 간단한 것 하나 때문에 고생하다가 노트 해 둡니다.
그 전에 중요한 것 한가지. 물론 잘 알고 계시겠지만...
Javascript는 클라이언트 사용자의 컴퓨터에서 실행되며, PHP는 서버에서 해석되고 실행됩니다.


1. 변수를 그냥 쓰는 방법
<script>
function fx()
{
    excution += "<?=$variable?>";
}
</script>
※ string 따위의 경우, 앞뒤에 \" 처리 필요.

2. 파라미터로 전달하는 방법
<script>
function fx(variable)
{
     excution += variable;
}
</script>

※ call
echo("<script>fx(\"$phpvar\");</script>");



FTP 업/다운로드를 할 경우, 요즈음은 [자동]모드로 대부분 FTP 프로그램에서 알아서 해 줍니다만,
가끔 이 모드가 잘못되어 실컷 보낸/받은 파일이 사용할 수 없는 상태가 되기도 합니다.
또한 저 처럼, cmd창에서 windows의 기본 FTP를 이용하여 파일을 업/다운로드 할 경우에도 binary로 받겠다는 명령어를 사전에 날려줘야 합니다. 저는 이를 알고 있음에도 불구하고, 실수를 저질러서 오늘 큰 낭패를 보기도 했는데요.

기본적으로 Text 모드이건 Binary모드이건, 내용은 동일합니다. 그러나 Binary모드의 파일이 Text로 저장될 경우, 특정 문자가 다르게 저장이 됩니다. 여기서 그 특정문자는 줄바꿈 문자인데, CR+LF(캐리지리턴+라인피드) 이 문자가 다르게 저장됩니다.
Binary파일은 말 그대로 Binary방식으로 읽어들이도록 되어 있다보니, 이것이 Text로 저장되면 올바로 읽어낼 수가 없습니다.
압축 파일을 Text로 전송해 버리면, 풀리지가 않는 것도 그 이유입니다.
역으로 해석하면 어떤 파일이건간에 Binary모드로 전송하면 [문제없다]가 됩니다.

의문점이 생기시지 않나요? Binary모드로 전송하면 아무런 문제가 발생하지 않는다면, Text모드는 왜 존재하는 걸까요?
Text는 7비트로 한 개의 문자를 표현합니다. 이는 해석도 7비트로 한다는 의미가 되며, 일종의 규약이 됩니다.
7비트 단위의 규약에 따라 전송하기 때문에, 안정성과 빠른전송에 장점이 있습니다. 또한 Binary모드와 달리, 일부 정보가 유실되어도 접근이 가능하죠. 또한, 인터넷 초창기 시대에는 Text방식의 전송만이 허용이 되었습니다. 그 관습이 아직도 남아있어, 그러한 방식만 지원하는 경우와의 호환성 등으로 아직 Text모드가 존재합니다.

※ 위에서 사용한 Text 모드는 ASCII 모드와 동일한 표현임.
[덧] 본Article과 관련된 Programming 정보도 있네요 http://snbosoft.tistory.com/entry/바이너리Binary-텍스트Text-파일의-차이


1. [New File] 메뉴를 이용하여 나오는 창에서 C++ 항목을 선택하세요
    - Cocoa Thouch 에서는 C++ 생성 항목이 없습니다, 아래쪽 Cocoa 항목에서 선택할 수 있습니다.

2. 파일이름을 입력하세요( CppObject.mm)
   - 헤더파일과 함께 프로젝트에 생성됩니다.

3. 클래스를 구현하세요.

 CppObject.h

    class CppObject
    {
           int  m_nMeber;
public:        
       CppObject();
       ~CppObject();
    }

 

 CppObject.mm

   CppObject::CppObject()
   {
       m_nMember = 10;
   }   
   CppObject::~CppObject()
   {
   }

4. 컴파일을 우선 해봅니다.
5. 컴파일 성공해서 빌드까지 무사히 성공되는 것을 볼 수 있습니다.

--------------------------------------
 이제 Object-C에서 직접 사용해 보시다.
--------------------------------------

1. AppDelegate 클래스의 초기화 함수에서 호출해 봅니다. 

 AppDelegate.m

 #include "CppObject.h"
 - (void) somefunction
{
   CppObject* pObj = new CppObject();
  delete pObj;
}

2. 컴파일 합니다.
3. 에러가 발생합니다.
   - Object-C는 파일확장자를 이용하여 언어를 구분하는 것 같았습니다.
   - m 확장자인 경우에는 C++ 코드를 사용할 수 없었습니다.
4. 그래서 AppDelegate.m의 확장자를 mm으로 변경합니다

 AppDelegate.mm

 #include "CppObject.h"
- (void) somefunction
{
   CppObject* pObj = new CppObject();
  delete pObj;
}

5. 다시 빌드합니다
6. 빌드 성공해서 디버깅해봅니다.
   m_pObj->m_nMember 값이 생성자에서 설정한 '10'을 가지고 있음을 알 수 있습니다.
이제부터는 C++를 자유롭게 이용할 수 있다니, 한결 개발이 자유로울 것 같네요. 

----------------------------------------------
Cocoa 객체 사용하기
----------------------------------------------

다음으로, C++ 클래스에서 Cocoa 객체를 사용할 수 있는지 테스트 해보았습니다. 
1. 아래와 같이 Cocoa 객체를 선언하고, 생성합니다. 

 CppObject.h

    class CppObject
   {
       int  m_nMeber;
       NSString*   strTitle;
public:        
       CppObject();
       ~CppObject();
    }

 

 CppObject.mm

   CppObject::CppObject()
   {
       m_nMember = 10;
       strTitle = [NSString stringWithString:@"Hello World"];
   }   

   CppObject::~CppObject()
   {
       [strTitle release];
   } 

2. 빌드 합니다.
3. 위의 테스트 코드에서 breakpoint를 설정하고 값을 확인 또는 생성자에서 값을 확인합니다.
   - strTitle이 "Hello World"를 가지고 있는 것을 볼 수 있습니다. 
이상입니다. 

결론은  C++를 사용하고 싶으면 확장자를 mm으로 사용하는 것 이었습니다. 참 쉽죠~

기존에 가지고 있던 C++ 코드가 있다면, 많은 부분을 재사용할 수 있을것 같네요.
C++를 사용함으로써 iPhone에서 다른 문제가 있는지는 저두 입문한지 얼마안되서 잘 모르겠습니다.
이부분은 저두 사용해 보면서, 추가적인 정보가 있으면 올리도록 하겠습니다.

[출처]맥부기 개발자 모임: 아이펠스님 게시물

일단은 간단하게 기록 해 둡니다. VMWare를 이용합니다.

[기본설정]
1. VMWare leopard 10.5.7 torrent 검색(google) - 최신 XCode가 10.5.6 이상을 요구
   - iDeneb Max OSX 10.5.7 이 검색됨
2. torrent를 이용, 파일을 다운로드 하고, 압축 해제.(약 10G)
3. VMWare 6.5실행, Open메뉴에서 압축 푼 폴더에서 파일 선택
4. VMWare에서 새로운 탭이 생성되는 것을 확인
5. [Resume this virtual machine]을 선택하고 실행(기본 상태가 suspend)

※ 주의사항
- 기본상태가 suspend상태임. power-off하고 부팅하면 정상부팅 안됨
- OSX 내부에서 Shutdown 이나 Log-off 하면 안됨.
> 종료시에도 반드시 suspend 사용.

[네트웍 설정]
기본적인 네트웍이 Host 상태임
VMWare의 suspend 상태에서는 네트웍을 변경할 수 없음

1. 가상머신이 설치된 곳의 iDeneb Mac OSX 10.5.7.vmx 파일을 텍스트 에디터로 오픈
2. ethernet0.connectionType = "nat" 를 추가 (메모리 용량도 추가 가능)
3. OSX를 다시 실행(Resume)
4. 네트웍 설정에서 DHCP로 설정
5. 사파리로 웹 커넥션 테스트
6. 안되면 다시 점검

[XCode]
인터넷이 올바로 연결되었으므로
1. developer.apple.com 에서 XCode를 download & install

※ 주의사항
- OS업그레이드 하면 부팅안됨
- 종료시 반드시 suspend
- 종료 가능한 버전이 10.5.4이나, XCode가 10.5.6을 요구하므로 업그레이드 하면 부팅 안됨.

종료 가능한 정상버전 또는 방법을 알고계신 분 계시면 연락 부탁드립니다.

Taejon 2001 :
본선문제 PKU 1060 ~ 1092  or  ARC 2321 ~ 2328
http://acmicpc-live-archive.uva.es/nuevoportal/region.php?r=as4&year=2001
http://acm.pku.edu.cn/JudgeOnline/searchproblem?field=source&key=Taejon+2001


Taejon 2002 :
본선문제 PKU 1330 ~ 1337
http://acm.pku.edu.cn/JudgeOnline/searchproblem?field=source&key=Taejon+2002


Seoul 2003 :
본선문제 ZJU 2679 ~ 2687
2679 :
http://acm.zju.edu.cn/show_problem.php?pid=2679


Seoul 2004 :
예선문제 Hello-World 44
http://www.hello-world.co.kr/?q=node/110


Seoul 2005 :
예선문제 Hello-World 41 - 43
http://www.hello-world.co.kr/?q=node/104

본선문제 TJU 2501~2510
http://acm.tju.edu.cn/toj/search_process.php?s=Asia+-+Seoul+2005


Seoul 2006 :
예선문제 Hello-World 35 - 40
http://www.hello-world.co.kr/?q=node/98

본선문제 ZJU 3131 ~ 3140
http://acm.zju.edu.cn/onlinejudge/searchProblem.do?contestId=1&titlefrom=0&authorfrom=0&sourcefrom=0&query=Seoul%202006


Seoul 2007 :
본선문제 ARC 3900~3909
http://acmicpc-live-archive.uva.es/nuevoportal/region.php?r=as4&year=2007


Seoul 2008 :


원본 출처 : wookayin.com


php/ext 또는 php/extension 내부에 php_mssql.dll 파일이 존재하는지 확인.
없으면, php 재설치 또는 해당 파일 copy 필요.
있으면, php.ini 파일에 다음 내용 기술
extension=php_mssql.dll (NT)
extension=php_mssql.so (Solaris & Linux)
혹자는 mysql_ 로 시작하는 함수들을 mssql_ 로 바꾸어야 한다고 하는데, mysql_ 로 해도 정상 작동한다.


필요한게 생겨, 네이버 영어사전 API를 이용할 일이 생겼다.
결과가 나오질 않는다. 코드를 봐도 의심가는 부분이 없고, JSON으로 했다가, DOM으로 했다가..
혹시나 하여 브라우저에 쿼리를 찍었더니, 검색 결과의 링크만 제공하고 있다.
어이없다. 문득, 사전 데이터의 저작권 때문이 아닐까 하는 생각이 들었지만,
이걸 과연 OpenAPI라 불러도 되는 걸까? 이렇게 할 거면 아예 서비스를 하지 말던가.