Java Script
AJAX
2007. 7. 16.
안혁
http://hyok.kr

.참고문헌
 - Beginning Ajax with ASP.NET <Wrox>


 AJAX라는 것은 기존에 없던 새로운 언어가 아닙니다. "Java Script에서 XML비동기적으로 요청하여 기존 웹프로그래밍의 문제점을 해결한다"라고 하는 기존 기술에 대한 재발견이지요. 이미 AJAX가 이야기 된지도 오래 되었기에, 이미 다들 알고 있는 사실이 아닌가 생각됩니다. 앞에서 이야기한 기술의 핵심인 '' 비동기적 요청이라는 것을 해보도록 하겠습니다.

 Java Script에서 HTTP를 요청하려면 HTTP 객체를 먼저 생성하여야 합니다. 브라우저에 따라 조금 다른데요. 비 MS Explore에서는
    xmlHttpObj =
new XMLHttpRequest();
MS Explore에서는 버전에 따라
    xmlHttpObj =
new ActiveXObject("Microsoft.XMLHTTP");
또는
    xmlHttpObj =
new ActiveXObject("Msxml2.XMLHTTP");
의 방식으로 객체를 생성할 수 있습니다. 이를 코드로 표현하여 본다면
    if(window.XMLHttpRequest)
        xmlHttpObj =
new XMLHttpRequest();
    else
    {
       
try
        {
            xmlHttpObj =
new ActiveXObject("Microsoft.XMLHTTP");
        }
       
catch(e)
        {
            xmlHttpObj =
new ActiveXObject("Msxml2.XMLHTTP");
        }
    }
정도로 표현할 수 있겠습니다. 객체 생성시 마다 매번 이를 기술하는 것보다 함수로 만들어 호출하는 것이 좋으리라 생각됩니다. 저는 다음과 같이 작성하여 이를 CommonAJAXLibrary.js라는 파일로 저장하였습니다. 함수명에 XML글자가 들어있는 것은 이 함수의 주목적이 XML을 다루것에 있기 때문입니다. 꼭 XML만 요청할 수 있어서 그런 것은 아니며 HTML페이지도 요청할 수 있습니다. CreateXmlHttpRequestObject() 함수 위에 존재하는 5개의 변수는 이후에 사용될 상수값입니다. 이에 대해서는 잠시 후 설명드리겠습니다. 여기서는 상수 4만 필요하지만, 코드에 4만 적혀있으면 이해하기 더욱 힘들 것 같아 모두 기록해둡니다. 변수명을 보시면 각각이 무었인지 추측하실 수 있으리라 생각됩니다. 일단 넘어갑시다.


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


   
 var READYSTATE_UNINITIALIZED    = 0; 
    var READYSTATE_LOADING          = 1; 
    var READYSTATE_LOADED           = 2; 
    var READYSTATE_INTERACTIVE      = 3; 
    var READYSTATE_COMPLETE        = 4;      

    // XML HTTP Request 객체생성, 반환 
    function CreateXmlHttpRequestObject() 
    { 
        if(window.XMLHttpRequest) 
            xmlHttpObj = new XMLHttpRequest(); // for non-MS browsers 
        else 
        { 
            // for MS browser by version. 
            try 
            { 
                xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP"); 
            } 
            catch(e) 
           { 
                xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP"); 
            } 
        } 
     
        return xmlHttpObj; 
    }


 
일단 위의 코드를 CommonAJAXLibrary.js라는 화일로 저장한 다음의 코드를 따라오세요.
 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

17
18
19
20
21
22
 

   
    <script type="text/javascript" src="./CommonAJAXLibrary.js"></script> 
    <script type="text/javascript"> 
    function MakeXMLHttpCall()
    {
        var xmlHttpObj;
        xmlHttpObj = CreateXmlHttpRequestObject();
   
        if(xmlHttpObj)
        {
            var url = "./DataFile.xml";
            xmlHttpObj.open("GET", url, true);
           
xmlHttpObj.onreadystatechange = function()
           { 
                if(xmlHttpObj.readyState == READYSTATE_COMPLETE) 
                { 
                    document.getElementById("divResults").childNodes
[0].nodeValue = xmlHttpObj.responseText; 
                } 
            }
           
xmlHttpObj.send(null); 
        } 
    } 
    </script>


 6 : xmlHttpObj
변수에 방금 만든 함수를 사용하여 XMLHttpRequest객체를 생성합니다.
 10 : url
요청할 페이지의 웹주소를 넣은 11번째 url 줄에서 요청 페이지로 설정합니다.
 11 : xmlHttoObj.open("GET", url, true)
이라하여 요청 URL 설정하는데, 3번째 인자가 false이면 동기식, true이면 비동기식 요청입니다. 동기식으로 요청하면 응답이 있을때까지 대기하며, 비동기식으로 요청하면 응답이 있을때까지 다른 일을 합니다.
 12 : xmlHttpObj.onreadystatechange
이름으로 미루어 보아 요청상태가 변할때 호출하게 함수를 지정하는 것이라 추측 가능하군요. 상태가 변할때마다 호출하는데, 내용을 보면 '완료'상태가 되었을때 xmlHttpObj.responseText 요청한 HTML divResults라는 녀석에게 대입하라는 내용입니다. divResults <div>테그입니다. 오해할만한 것이 있다면, 지금까지는 실행이 아니고 설정이라는 것입니다.
 19 : xmlHttpObj.send(null)
이라는 명령으로 설정에 따라 요청이 시작됩니다. 눈에는 보이지 않지만, 뒤에서 요청이 이루어지고 완료가 되었을때 결과가 <div>테그인 divResults 입력됩니다. 그러면 순간 결과는 화면에 출력되겠지요.

 
다음은 출력을 위한 HTML페이지 입니다. 자바스크립트와 같은 화일에 입력하셨야 합니다.
 


1
2
3
4
5
6
7
8
 

   
<body> 
    <form id="form1" method="post" runat="server"> 
        <input type="button" onclick="MakeXMLHttpCall();" value="Test XMLHTTP  Call" /> 
        <br /> 
        <br /> 
        <div id="divResults">(no results)</div> 
    </form>
</body>


 
위의 자바스크립트와 HTML 화일에 작성하여 마음에 드는 이름으로 저장하십시오. 코드를 그대로 따라오셨다면, 화일과 CommonAJAXLibrary.js 같은 폴더에 있어야 합니다. 다음의 XML코드가 바로 요청대상인 DataFile.xml입니다. 물론 화일도 같은 위치에 있어야 합니다. 내용은  XML 아니어도 됩니다. 일반 HTML 작성해도 되며 텍스트 문서이어도 상관없습니다.
 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 


<?
xml version="1.0" encoding="utf-8" ?>
<Customers> 
  <Customer> 
    <Firstname>Foe</Firstname> 
    <Lastname>Bloggs</Lastname> 
    <email>joe@bloggs.com</email> 
  </Customer> 
  <Customer> 
    <Firstname>Alen</Firstname> 
    <Lastname>Anonymous</Lastname> 
    <email>anon@ymous.com</email> 
  </Customer>
  <Customer> 
    <Firstname>Marvin</Firstname> 
    <Lastname>Martian</Lastname> 
    <email>marvin@mars.com</email> 
  </Customer>
</Customers>


 HTML
화일을 브라우저로 열면 다음과 같은 화면이 나오게 됩니다.

사용자 삽입 이미지
버튼을 누르면 다음과 같이 요청된 페이지가 출력됩니다.

사용자 삽입 이미지
OpenCV 프로젝트 사이트
http://sourceforge.net/projects/opencvlibrary


OpenCV 국내 커뮤니티
http://www.opencv.co.kr/

OpenCV 라이브러리를 이용하기 위한 Microsoft Visual Studio 6.0 및 .NET 설정
http://cafe.naver.com/opencv/1

영상처리 관련 책(OpenCV 이용)
http://www.hanb.co.kr/look.php?isbn=978-89-7914-490-1

'공부 해 Boa요. > C & C++' 카테고리의 다른 글

getchar()  (0) 2006.11.02
http://www.developer.com/net/csharp/article.php/3710176

params 키워드를 이용하여 메서드에 가변인자 전달하기.

public void ObjectParams(string Message, params object[] p)
{
Console.WriteLine(Message);
for (int i = 0; i < p.Length; i++) {
Console.WriteLine(p[i]);
}
}




ObjectParams("Variable Object Parameters", 12, 'z', "Test");


아니면 배열로 만들어 전달하기.
int[] TestIntArray = new int[5] { 11, 12, 13, 14, 15 }; IntParams("Integer Array Parameter", TestIntArray);

'공부 해 Boa요. > C# & .NET' 카테고리의 다른 글

c# 과 .net ( 닷넷 ) 이란 무엇인가 ?  (0) 2008.01.11
http://tinymce.moxiecode.com/

오늘 써봤는데, 상당히 빠른 로딩 속도와(FCKEditor에 비해 상대적으로!) 지원 API도 훌륭하고... 해서 다음번엔 이걸 써봐야겠다. 다만 언어 팩 같은 경우에 정확히 어떻게 되어 있는지는 모르겠지만, 다운로드 링크에 있는 파일 자체가 조금 깨진 듯. 그래서 한글 언어팩을 적용해도 제대로 한글 표현이 되질 않아서 결국엔 한글 언어팩 제작자 사이트를 찾아내서 이전 버전의 언어팩을 다운로드해서 적용해 봤는데 잘 되더라.

다만 한가지 불편한 점은 FCKEditor에서는 소스 보기와 편집 화면을 토글할 경우 동일한 창에서 내용이 바뀌는데, TinyMCE는 새창에서 소스편집을 하도록 되어 있다.

오늘 적용해본 한글 언어팩은 완전한 버전이 아니어서 단순히 한국어로 설정했을 경우 편집 창의 문자열을 찾지못해 코드를 그대로 보여주게 되는데, 이점은 내가 나중에 영어 언어팩을 기반으로 다시 재편집을 하던지 해서 고쳐서 사용해야 할 듯.
http://www.allredroster.com/iptodec.htm

1. 먼저 IP 주소의 클래스별로 숫자를 분리.
2. 각각의 분리된 숫자를 2진수로 변환(이때 만약 8자리가 아니면 앞에 0을 채워서 8자리로 만든다)
3. 2진수로 변환된 숫자들을 모두 concatenation.
4. concatenation된 숫자들을 다시 10진수로 변환.

마지막으로 변환된 10진수의 앞에 http://를 붙여 주소창에 넣으면 신기(?)하게도 주소로 인식해서 페이지를 보여줌.

네이버 메인 페이지의 IP 주소는 222.122.84.250 인데...
1번 과정의 결과 222 / 122 / 84 / 250 로 분리됨.
2번 과정의 결과 11011110 / 01111010 / 01010100 / 11111010
3번 과정의 결과 11011110011110100101010011111010
4번 과정의 결과 HTTP://3732559098

1. 남들이 안하는 짓만 한다

- “엄격한 아버지와 자상한 어머니 밑에서 자라…”로 시작하는 자기소개서는 인사 담당자를 하품 나게 만듭니다. 그가 내 존재를 몰라준다면 색다른 모습, 새로운 경험으로 다가가세요. 남자는 호기심을 자극하는 여자에게 매력을 느끼는 법이니까요.

2.못해도 열심히 한다.

-예쁘지 않아도, 능숙하지 못해도 괜찮습니다. 솔직함과 당당함이야말로 남자의 마음을 사로잡는 매력 포인트. 애당초 ‘내숭’과 어울리지 않는 체질이라면 괜히 머리 굴리지 마세요. 못해도 열심히 하는 모습이 더 귀여우니까요.

3. 무작정 걷는다.

-경험 없으세요? 같이 수업도 듣고 술도 마시는 격 없는 친구인데 어쩌다 단둘이 걷게 됐을 때 왠지 어색했던 기억. 마주 앉아 있는 것보다 함께 걷는 게 사람을 더 긴장시키고 감상적으로 만든다고 합니다. 남자도 여자만큼이나 분위기에 약하다는 사실!

4. SOS를 외친다.

-남자를 유혹하는 가장 쉬운 방법은 ‘칭찬’과 ‘의존’입니다. 남자는 동성에게서 칭찬받는 것에 익숙지 않기 때문에 의외로 여자의 칭찬에 쉽게 무너지죠. 하지만 노골적인 찬사보다는 도움을 요청하거나 조언을 구하는 등의 우회적인 기술이 훨씬 효과적!

5. 여왕이 된다.

-남자는 자기가 어떻게 대해도 불만 없이 받아들이는 여자는 하염없이 기다리게 만들 수 있지만, 제대로 된 대접을 요구하는 여자에게는 최선을 다합니다. 남자란 여자에게 최고의 것을 줄 수 있을 때 스스로 최고의 남자가 됐다고 느끼거든요.

6. 일단 먹이고 본다.

-'술 마시면 모든 여자가 예뻐 보인다'는 말은 사실입니다. ‘술 마시면 못할 게 없다’는 말도 역시. 나에게 어느 정도 호감이 있다고 판단되면 맥주 한잔하자고 꾀어보세요. 다음 날이면 손잡고 다니는 사이가 되어 있을지도.

 

- 그외 -

말없는 응대 여자는 남자의 침묵에 힘들어하지만, 남자는 여자가 침묵하면 말하게 만들고 싶은 묘한 욕망을 느낀다.

엽기 과격 스킨십 어설프게 느끼한(?) 스킨십보다 오히려 남자의 마음에 파문을 남긴다. 팔짱 낄 용기가 없다면 차라리 ‘헤드락’을 하라.

여우보다 곰 <러브 액추얼리>의 ‘보드판 고백’에 눈물 뚝뚝 흘린 건 여자들만이 아니다. 한 점 거짓 없는 솔직한 고백에 감동하지 않을 남자가 어디 있겠는가.

악의 없는 놀림 너 바람둥이지, 너 여자 백만 명이지, 너 나 좋아하지, 에이~ 다 알아 다 알아… 남자는 여자의 장난꾸러기 같은 모습에 귀여움을 느낀다.

밤보다 아침 그에게 모닝콜을! 기억력을 관장하는 호르몬인 ‘코티졸’ 분비가 최고도에 이르는 아침에 받은 자극은 각인 효과가 강해 하루 종일 뇌리를 떠나지 않는다고.

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. 나쁜 습관을 과감히 버려라
32. 작은 일도 소홀히 여기지 말라
33. 평범한 것이 큰 일을 이룬다
34. 작은 일부터 시작하라
35. 작은 것에서 승부를 낼 줄 알라
36. 큰 일이든 작은 일이든 시종일관 충실하라
37. 실패에서 교훈을 배우라
38. 실수를 교훈으로 삼아라
39. 잘못했을 때는 과감히 인정하라
40. 잘못으로부터 뭔가를 배우라
41. 가장 중요한 것은 문제를 해결하는 것이다
42. 모든 일을 스스로 해결하라
43. 남을 의지하는 생활방식을 버리라
44. 목발을 버리라
45. 감정의 독립을 실현하라
46. 자신의 힘으로 전진하라
47. 기회란 그리 많지 않음을 명심하라
48. 좋은 기회는 위대한 재산이다
49. 좋은 기회는 때대로 한 번 뿐일 수 있다
50. 기회는 바로 옆에 있다
51. 기회를 포착하는 것이 지혜다
52. 기회가 없으면 만들면 된다
53. 시간을 장악하라
54. 시간을 금처럼 아껴라
55. 시간 도둑을 경계하라
56. 시간보다 앞서 달려라
57. 80/20 법칙을 활용하라
58. 절대 오늘 일을 내일로 미루지 말라
59. 시간 낭비는 인 생 최대의 실수다
60. 휴일에도 시간을 잘 활용하라
61. 시간 관리를 위해 계획을 수립하라
62. 오늘을 놓치지 말라
63. 3분간 열심히 휴식하라
64. 반드시 해야 할 일은 하라
65. 자신의 삶에 가치를 부여하라
66. 현실을 외면하지 말라
67. 향락을 쫓는 마음을 넘어서라
68. 공부는 우리 삶의 우선적 요소다
69. 무미건조한 삶에서 벗어나라 7
70. 일을 바꾸면서 휴식하라
71. 주변의 모든 사람을 선하게 대하라
72. 타인을 선대하는 것은 곧 자신을 선대하는 것이다 7
73. 너그럽지 못한 것은 곧 여유가 없음을 말한다
74. 비판 대신 칭찬을 하라
75. 능동적으로 상대에게 적응하라
76. 상처를 주지도 받지도 말라
77. 관용을 배우라
78. 다른 사람을 곤경에 빠뜨리지 말라

 

'이야기 광장 > [감성]격언, 조언' 카테고리의 다른 글

This is LOVE  (0) 2010.07.29
휴대폰 문자에도 법칙이 있다 !  (0) 2007.11.25
스트레스 관리 10계명  (0) 2006.10.22
이런 남자가 성공한다..  (0) 2005.06.08

- .net ( 닷넷 ) 은 무엇인가 ?

Microsoft .NET은 Microsoft XML 웹 서비스 플랫폼입니다.
 XML 웹 서비스는 운영 체제, 장치 또는 프로그래밍 언어에 관계 없이 인터넷을 통해 응용 프로그램에서 데이터를 통신하고 공유할 수 있게 해줍니다.
Microsoft .NET 플랫폼은 개발자에게 XML 웹 서비스를 만들고 이들을 서로 통합하는 데 필요한 기술을 제공하고, 일반 사용자에게는 완벽하고 안전한 환경을 제공합니다.


- C#.NET이란?

C#은 닷넷 기술의 중심에 있는 언어로서 닷넷 기술을 제대로 구현하기 위해서 탄생한 언어라고 할 수 있다. 닷넷 기술은 C, C++, Visual Basic이나 Java로도 구현할 수 있지만, 닷넷 기술에 맞게 구현된 언어이기 때문에 C#이야말로 닷넷에 가장 적당한 언어라고 할 수 있다.
닷넷 기술의 중심에 있는 C#은 자바를 겨냥해서 만든 언어라는 얘기도 있는데, 자바에 대해서 주도권을 잃어 가는 MS가 자바에 대항해서 만든 언어라고 하기에, 자바와 흡사한 부분이 Common Language Runtime도 자바의 Virtual Machine에 유사하기 때문이다. 따라서 향후 MS의 강력한 마케팅 때문에 C#이 앞으로 전망이 있지 않을까 하는 생각을 업계에서는 하고 있다.


- C#.NET의 특징

C#의 특징은 기본적으로 콤포넌트 기반의 언어라고 하는데, 콤포넌트란 쉽게 말해서 기계의 부품이라고도 볼 수 있다. 즉, 자동차를 만들 때 자동차 부품을 자동차 회사에서 다 만들지 않는 것처럼 자동차 부품들은 별개의 자동차 부품회사에서 만든다.
그러면 자동차 회사에서는 그러한 부품들을 조립하여 자동차를 만들게 되듯이 프로그램도 자신이 프로그램 전체를 개발하지 않고 다른 사람이 만든 콤포넌트를 자신의 프로그램에 삽입하여 프로그램을 완성하는 것이다.
C나 C++도 이러한 기능을 갖고 있지만, 여러 문제점을 갖고 있기 때문에 이러한 문제점들을 극복하려는 목적으로 만들어진 언어인 C#은 콤포넌트로 구성하고 콤포넌트를 삽입하기 적당한 언어이다.
기존의 무선인터넷 기술인 WAP, ME 등이 Browser 기반으로 단순한 텍스트와 제한된 이미지 제공의 한계를 가져 이용 활성화가 어려웠음에 반하여, GVM은 사용자가 필요한 어플리케이션을 자유롭게 선택한 후 다운로드하여 실행함으로써 무선 단말기의 기능을 무한하게 확장할 수 있도록 한 기술이다.

'공부 해 Boa요. > C# & .NET' 카테고리의 다른 글

C#의 가변인자 전달  (0) 2008.01.18
검색을 하다가 알아낸(http://www.cssplay.co.uk/layouts/fixed.html) 방법인데, 아주 간단합니다.

body{
    height:100%;
    overflow-y:auto;
}

/* Fixed 할 Element */
.fixed_div{
    position:absolute;
}


하면 됩니다. ㅎㅎ

IE7에서 dt, dd중 dt를 display:none을 했는데도 dd의 좌측 여백이 여전이 존재한다.(물론 margin,padding 모두 0)

<dt style="display:none;margin:0;padding:0">Title</dt>
<dd style="margin:0;padding:0">Description</dd>


해결책은 의외로 쉽다.
dl로 감싸주면 된다.

<dl style="margin:0;padding:0">
    <dt style="display:none;margin:0;padding:0">Title</dt>
    <dd style="margin:0;padding:0">Description</dd>
</dl>


FF때문에 dl 에 margin,padding을 0을 줘야 한다.

css를 작성하는 방법에 대해 알아보겠습니다.

#nipa { width:500px; height:300px; }

#은 객체를 부른다는 표시입니다. 이곳에 쓰일 수 있는 건 # 과 . 이 있습니다.
#은 id="어쩌고" 라고 이름 붙여진 객체를 부르고 . 은 class="어쩌고" 라고 이름 붙여진 객체를 부릅니다.

nipa 자리에는 객체의 이름이 들어갑니다. 객체의 이름은 html 문서에서 정해줍니다. 이름을 정하는 건 마음대로 하셔도 됩니다. "nikebabo"도 좋고 "clannad"도 됩니다.

{ } 안에 속성을 적습니다. 들어갈 수 있는 속성은 객체에 따라 다양합니다. 다 외우는건 무모한 짓이고, 태그처럼 필요할 때 찾아서 적는게 효율적입니다.

그리고 한가지. 띄워쓰기는 이름이나 속성을 제외한 부분에서 마음대로 하셔도 됩니다.
예를들어,

#nipa          {    width:   500px;height: 300px;  
            }

는 맨 위의 코드와 동일합니다.
물론 이렇게 쓰시는 분들은 없겠죠? 읽기 편하게 하면 됩니다.
예를들어,

#nike                 { width:300px; border:1px solid #ccc; }
#happybirthday   { text-align:left; }
#minamike          { margin:0; padding:0 }

이렇게 줄을 맞춰서 적으면 나중에 알아보기 쉽죠.
공백으로는 스페이스바 이외에 엔터나 탭이 들어가도 됩니다.


1. id 와 class
객체의 이름을 정하는 방법에는 두가지가 있습니다.
id 유일한 객체의 이름을 정할 때 사용됩니다.
전체 레이아웃에서 header는 한번밖에 나오지 않겠죠. 그러면 id="header" 라고 이름을 정해줍니다.
class 여러번 나오는 객체의 이름을 정할 때 사용됩니다.
한 페이지에 여러 포스트가 표시되는 경우
각각의 포스트마다 id="post1" id="post2" 라고 지정하는건 피곤한 일입니다.
class="post" 라고 지정해두면,
.post  { 속성 }
한방으로 끝낼 수 있습니다. :)

이 id와 class는 마음대로 정할 수 있습니다만, a, img 등 html에서 기본적으로 사용되는 태그 이름과 같게 지정하면 나중에 헷갈리므로 되도록 단순하면서 용도를 잘 드러낼 수 있는 이름을 정해주세요.


2. 어떤 태그들은 그냥 부를 수 있습니다.
html, body, blockquote, img, div, table 등은 # 이나 . 을 붙이지 않고 그냥 부르는 것이 가능합니다.

img { width:100px; }

라고 입력해주면, html 문서에 있는 모든 이미지들의 가로를 100픽셀로 맞추게 됩니다.


3. 여러개를 한번에 부를 수 있습니다.

#nipa , #header , #minamike { width:100px; }

이렇게 해주면 3개의 객체 모두에 속성을 지정하게 됩니다.


4. 속해 있는 것들을 부르는 방법
"속해 있다" 라는 표현이 익숙하지 않은가요? 아래의 예를 보세요

<div id="wrap">
    <div class="shout">
          <p>니파!</p>
    </div>
</div>

div는 레이아웃을 짜는 한칸짜리 표와 같은 형태의 태그입니다.
wrap 안에 shout가, shout 안에 글자가 들어가 있습니다.
css 에서 shout 의 가로를 500px로 바꾸어 보겠습니다.

#wrap .body { width:500px; }

네 그렇습니다.
상위의 객체의 이름 뒤에 한 칸 띄우고 이름을 부르면 됩니다.
그럼 니파! 라는 문구의 색을 바꾸어 보겠습니다.

#wrap .body p { color:#CCCCCC; }

p는 문단을 나타내는 태그로, 앞에서 알아봤듯이 이름을 정하지 않고도 부를 수 있습니다.
물론 저렇게 할 경우 shout 안에 있는 모든 문단의 색이 변하므로,
니파! 라는 문구만 바꾸고 싶다면 니파! 를 싸고 있는 p 태그에 이름을 붙여주면 됩니다.
Netscape 4 제외시키기
Netscape 4은 media속성값에 "screen"이외의 값이 올 경우 읽어 들이지 못하는 것을 이용한 방법이다.
<link rel="stylesheet" type="text/css" href="/css/style.css" media="all" />
이나
<link rel="stylesheet" type="text/css" href="/css/style.css" media="screen, tv" />
라고 지정할 경우 Netscape 4은 읽어 들이지 못한다.

부분적으로 읽어들이지 못하게 하는 경우에는 Caio's hack인 /*/*/를 이용한다. 보통 코멘트는 */으로 닫지만 /*/으로 닫게 되면 Netscape 4에서는 인식되지 않는다. 그 뒤에 평상시의 코멘트 /* */를 적어두면 그 뒤의 스타일은 Netscape 4에서도 문제없이 적용된다.
p { /*/*/ color:white; /* */ }

Mac IE 4.5, Netscape 4 제외시키기
@import룰로 url()함수를 이용하여 외부 스타일시트를 이중인용부호로 지정한다.
Mac IE 4.5는 @import에 url()함수를 이용하는 경우, 단일 인용부호와 인용부호가 없는 것이 아니면 읽어 들이지 못한다. Netscape 4은 @import를 지원하지 않는다.
@import url("/css/style.css")

Mac IE 5 제외시키기
CSS소스 안의 코멘트 서식을 /* \*/ 이라는 방식으로 기술한다. holly hack이라고 하며 그 뒤에 평상시의 코멘트 /* */를 적어두면 그 뒤의 스타일은 Mac IE 5에서도 문제없이 적용된다.
p { /* \*/ color:white; /* */ }

Win IE 4~5 제외시키기
셀렉터 바로 뒤에 /**/라고 적는다.
p/**/ { color:white;}

Win IE 4~5, Mac IE 4.5~5 제외시키기
프로퍼티와 값을 구분하는 콜론(;) 앞에 코멘트에 스페이스를 포함하여 /* */라고 적는다.
p { color/* */:white;}

Win IE 4~6, Mac IE 4, Netscape 4 제외시키기
셀렉터 앞에 html>body를 붙인다.
html>body p { color:white;}

Win IE 6 제외시키기
프로퍼티와 값을 구분하는 콜론(;)의 앞에, 스페이스와 코멘트를 /**/라고 적는다.
p { color /**/:white;}

star hack
셀렉트 앞에 *html를 붙이면, Win IE 4~6, Mac IE 4~5 등에는 스타일이 적용되고, 그 외의 브라우저에서는 적용되지 않는다.
*html p { color:white; }

underscore hack
프로퍼티의 가장 앞부분에 언더스코어(_)를 붙이면, Win IE 4~6에서 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다.
p { _color:white; }

hash hack
프로퍼티의 앞에 샾(#)을 붙이면, Win IE 4~6, Mac IE 5, Opera 7, Mozilla, Firefox에서는 스타일이 적용되고, 다른 브라우저에는 적용되지 않는다.
p { #color:white; }
 
star 7 hack
셀렉트의 앞에 html*을 붙이면, Win IE 5.5~6, Mac IE 5, Safari 등에서 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다. html*과 셀렉터사이에 스페이스를 넣지 않는다.
html*p { color:white; }

xmlns hack
속성셀렉터를 이용하여, html요소에 붙이는 xmlns속성을 스타일적용을 위하여 사용하는 방법.
Mozilla, Fire-fox, Opera 7/8, Safari 등 속성셀렉터를 서포트하는 브라우저에서는 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다.
html[xmlns] h1 { color:red; }

:root hack
셀렉터의 앞에 :root를 붙이면, Mozilla, Firefox, Mac IE 5, Safari 등 :root유사클래스를 지원하는 브라우저에만 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다.
:root h1 { color:red; }

Tantek box model hack

voice-family프로퍼티를 이용한 가장 유명한 박스모델핵.
div#content { width:500px; voice-family: ""}""; voice-family:inherit; width:400px; }

Win IE 5용 패스필터
@media tty { i{content:"";/*" "*/}}; @import '/css/style.css'; {;}/*";} }/* */
Win IE 5.5용 패스필터
@media tty { i{content:"";/*" "*/}}@m; @import '/css/style.css';/*";} }/* */
Win IE 5-5.5용 패스필터
@media tty { i{content:"";/*" "*/}}@import '/css/style.css';/*";} }/* */
모던브라우저용 패스필터
@import "null?"{"; @import "/css/style.css"; @import "null?"}";

이 이외에도 많은 핵(hack)이 존재합니다. CSS Filters (dithered.com)에 다양한 CSS hack이 잘 정리되어 있으므로 참고하시길 바랍니다.

2006년 7월 18일, IE7용의 핵(hack)을 추가.
IE7에만 적용
*+html body

IE7를 포함한 모든 IE에만 적용하는 방법은
*+html body, * html body

IE7을 포함한 모던브라우저에 적용(IE6이하를 제외)
html>body

IE7을 제외한 모던브라우저에만 적용
html>/**/body

내용은 추후 업데이트 예정입니다.




급하신 용무가 있으신분들은 연락 주시기 바랍니다.


   공일공 - 구공공공 - 8533
   ezk33 @ daum.net







<head>
<script LANGUAGE="JavaScript">
function trans() {
obj1.filters[0].apply();
obj1.style.visibility = "visible";
obj1.filters[0].play();
}
</script>
</head>

<body>
<body onLoad="trans();">
<IMG ID="obj1"
SRC="image/marado.gif"
STYLE="filter: revealTrans(duration=5, transition=19); visibility: hidden">
</body>
제닉스님께서 올리신다던 동영상을 올리셨네요.

앞으로 여러 편에 걸쳐서 올리신다니 기대해 봅니다.

지금 블로거뉴스에도 올라 있다니 한 표씩 추천 부탁드려요.
http://bloggernews.media.daum.net/news/641498

그나저나.... 어떻게 될런지????


제닉스님의 취재 1부


제닉스님의 취재 2부


이게뭐람...? 이렇게 듣고 보니...생각하는것..?
미국 911테러... 생각 밖에 않난다..ㅡ,.ㅡ;

위의 말데로라면 이걸로 인하여 얻을 수 있는 이득이 뭘까...?

 여성이 마음에 들어하는 남성 스타일..

 1 분위기를 자연스럽게 리드하는 사람

2 고급스러운 자동차를 가지고 있는 사람

3 유머감각이 있는 사람

4 술을 마실 때 남성의 느낌이 강하게 드는 사람

5 술을 마시는 양을 적당하게 조절할 수 있는 사람

6 매너가 좋은 사람

7 이미지가 순수한 사람

8 나이트에서 춤을 멋지게 추는 사람

9 훤출한 키에 잘생긴 스타일의 사람

10 적당하게 금전적인 여유가 있는 사람 


사용자 삽입 이미지


여성이 싫어하는 남성 스타일..


1 연예인 흉내내는 옷차림

2 여성들에게 수시로 집적대는 사람

3 좋지 못한 땀냄새가 나는 사람

4 술집에서 큰소리로 노래하는 사람

5 돈 많고 잘생긴 귀공자 흉내내는 사람 

6 나이트에서 부킹에 환장한 사람

7 술 조절을 제대로 못하는 사람

8 나이트 스테이지에서 쇼(오버) 하는 사람

9 돈이라면 벌벌 떠는 구두쇠

10 지나치게 못생긴 사람

◈ 바다를 보고 싶다는 여자의 말은 유혹에 따를 수도 있다는 신호이다.

◈ 여성이 다른 여성을 칭찬하는 것은 그 여성에 대한 질투심의 표출이다.

◈ 여성이 일부러 다른 남성과 친숙하게 행동하는 것은 상대방의 마음을 끌기 위함이다.

◈ 돈이 있을때는 신나게 쓰고 없을때는 한푼도 없어 쩔쩔매는 여자는 우울증(?)

◈ 여자는 언제나 손해라는 말의 의미는 일방적인 여성이 그렇다는 뜻이 아니라 자기 자신이 손해를 보고 있다는 것이다.

◈ 여성이 남성 앞에서 복장을 고치는 것은 유혹을 뜻한다.

◈ 교재 중 갑자기 화장이 짙어진 여성은 본심을 감추려 하는 방어적 여성이다.

◈ 술에 강하지만, 마시려 하지 않는 여성은 자기 방어적이며 남성과의 깊은 교제를 피하려 한다.

◈ 실수로 커피를 엎질렀을 경우 상대방과 헤어졌으면 하는 마음이 있다고 보아야 한다.

◈ 먹는 즉시 접시를 한쪽으로 치워놓는 여성은 매우 이해타산적이다.

◈ 여성이 자신의 컵에 먼저 설탕을 넣는 것은 상대방에 대한 거부의 표시이다.

◈ 남성앞에서 식사주문이나 쇼핑 선택을 망설이지 않는 것은 그 사람을 그다지 중요시 하지 않는 경우이다.

◈ 여성이 거울을 보는 것은 흥분된 감정을 진정시키기 위해서이다.

◈ 남성다운 복장을 하는 여성은 컴플렉스 덩어리?!!

◈ 비련의 영화의 여주인공을 동정하는 것은 감정이입이 심하며 남자의 설득을 당하기도 쉽다.

◈ 남성에 대해 아무리 친절하다 해도, 젖은 우산이 옆 사람에게 닿아도 태연한 여자는 자기 중심적인 성격의 소유자.

◈ 이성에 대해 무관심을 가장하는 여성은 성적인 콤플렉스를 가지고 있다.

◈ 이야기 도중에 스푼 등을 만지작거리는 것은 상대방의 시선으로부터 자신을 지키려는 무의식적인 행동이다.



위에 내용중에 해당되거나 그렇게 보이는 사람들이 주위에 있거나 본인이라고 생각되시는지..ㅎㅎㅎ

여러분들은 어떤표현들이 좋다고 생각 되시는지요?

나이거참~ ㅋㅋ 나와 닮은 유명한 연예인이란다...ㅡ,.ㅡ;


 어려운 시기일수록 구성원의 사기를 높이는 일은 중요하다. 이를 위해서는 리더들이 부하 직원의 의견에 귀를 기울이고 용기를 북돋워 주어야 한다. 아울러 과제 수행을 지원하되 자율적으로 수행하게끔 믿고 맡기는 것이 바람직하다.

최근 유가 인상이나 불확실한 국내외 경기 전망 등으로 인해 기업들마다 투자 규모를 줄이고 가능한 한 내실 경영에 주력하는 모습이 나타나고 있다. 일례로 국내 대표적인 기업의 하나인 A사의 경우, 지난해에 137%이던 부채비율이 올해에는 75%로 줄어들 것으로 예상되고 있다. 이는 기업이 올해 벌어들인 이익을 새로운 사업에 투자하기보다는 미래 불확실성에 대비하여 차입금을 상환하는 데 쓰고 있음을 의미한다.

그러나 외부 경영 환경의 불확실성 증대에 대응하여 내실 경영을 하는 것만으로 어려움을 극복할 수 있을지는 미지수다. 오히려 위기를 기회로 활용하여 선두 경쟁사와의 격차를 좁히거나 반전시킬 수 있는 계기로 만드는 지혜가 필요하다고 하겠다.

이를 위해서는 최고경영자를 비롯한 경영진이 조직의 목표를 보다 분명히 하고, 아울러 구성원과 목표를 공유하여 조직 내부의 결속을 다지면서 이를 차근차근 실행해 나가야 한다. 특히, 경쟁사보다 한 발 앞서 내다보고 한 발 먼저 실행할 수 있도록 구성원들의 열정과 노력을 이끌어 내는 것이 필수적으로 요구된다.

구성원들의 열정을 이끌어 내고 신바람 나게 일하게끔 만들기 위해서는 먼저 구성원의 의견에 귀를 기울이고(Listen) 용기를 북돋우는(Encourage) 것이 필요하다. 또한 과제 수행을 지원하되(Assist), 이를 자신의 책임 하에 자율적으로 수행할 수 있도록 믿고 맡기는(Delegate) 모습이 바람직하다.


○ 경청하라(Listen)

경청(傾聽)이란, 단순히 상대의 말을 "듣는다(hear)"는 것이 아니라 "귀를 기울여 주의해서 듣는다"는 것을 의미한다. 대부분의 개그맨들이 가장 대하기 힘든 대중은 자신들의 개그에 웃지 않고 반응을 보이지 않는 청중이라고 한다. 이는 비단 남을 즐겁게 하는 일을 하는 사람들에게만 해당하는 것이 아니다. 대부분의 사람들은 자신의 이야기를 잘 들어주는 사람을 만났을 때 가장 신명이 나는 반면, 그렇지 않은 사람을 만났을 때에는 의욕을 상실하게 된다.

천하를 통일한 한고조 유방에게 장량, 한신, 소하와 같은 유능한 인재가 있었다면, 그 경쟁자인 초패왕 항우에게도 범증이라는 천하를 떠받칠 인재가 있었다. 그러나, 항우는 한 때 유방을 물리쳐 변방의 외진 곳으로 패퇴시키고도 이 기회에 다시 세력을 회복할 수 없도록 끝까지 공격하자는 범증의 제안을 듣지 않고 무시한 탓에 천하를 제패할 기회를 놓치고 말았다. 즉, 항우는 많은 병사와 넓은 영토를 가지고 있을 때의 유방도 물리친 자신감이 있었기 때문에 외진 곳으로 쫓겨난 유방을 가볍게 생각해서 뒷날의 화근을 없애자는 범증의 건의를 무시했던 것이다.

문제는 이로 인해 자신의 의견이 받아들여지지 않는 것에 실망한 범증이 끝내 항우를 떠나 산 속으로 숨어 버렸다는 것이다. 즉, 인재 유지(retention)에 실패를 한 것이다. 물론 항우 자신도 훗날 범증의 우려대로 권토중래한 유방의 공격을 받아 참담한 패배를 겪게 되었다.

사실 기업 경영에 있어 가장 중요한 정보는 대부분 현장에 있는 법이고, 또한 이를 가장 잘 알고 있는 사람도 현장에 있는 일선 직원이다. 따라서 이들의 의견을 듣고 경영에 반영하는 것이 구성원을 신나게 하는 것이면서, 동시에 기업의 성과를 제고시킬 수 있는 바람직한 모습일 것이다.


○ 격려하라(Encourage)

부하의 의견을 귀 기울여 듣는 것 다음으로 필요한 것은, 부하 스스로 자신의 생각을 실행하게끔 격려하고 성공을 거둘 경우에는 칭찬을 아끼지 말아야 한다는 점이다.

우리는 주변에서 잘못에 대한 질책은 많이 하지만, 칭찬에는 인색한 리더들을 흔히 볼 수 있다. 치열한 경쟁에서 살아남기 위해서 달리는 말에 채찍을 더하는 것처럼 보다 더 열심히 하라는 뜻으로 이해할 수도 있지만, 보통은 부하 직원의 사기를 떨어뜨리는 경우가 많고 심하면 그들의 열정에 찬 물을 끼얹는 셈이 될 수도 있다.

레이건 전 대통령의 연설 원고 담당이었던 페기 누난(Peggy Noonan)은 자신의 원고 초안에 "매우 훌륭함"이라는 메시지가 적혀 돌아오자, 이를 오려 가슴에 붙이고 다녔다고 한다.

이처럼 비록 작은 것일지라도 부하 직원이 노력한 결과에 대해 인정하고 칭찬을 해 주는 것은 상대를 즐겁고 신나게 만들 수 있는 중요한 계기가 될 수 있다. 그리고 칭찬과 더불어 실수에 대한 관대한 포용도 그에 못지 않게 중요하다.

옛날 초(楚)나라의 장왕은 반란을 평정하고 돌아와 이를 축하하기 위해 여러 신하들을 초청하여 연회를 베풀었다. 그런데 연회 도중에 갑자기 거센 바람이 불어 모든 촛불이 일시에 꺼지는 일이 발생했다. 이 와중에 한 장수가 장왕이 사랑하는 허희(許姬)의 소매를 끌자, 허희는 그의 관끈을 잡아당겨 끊고 장왕에게 이 사실을 고했다. 그러자 장왕은 오히려 자신이 연회를 밤늦게까지 이어지게 한 탓이라 대답하고, 모든 이의 관끈을 끊고 다시 불을 켜게 함으로써 그 장수의 잘못을 덮어 주었다. 훗날 이 장수는 진(晉)나라와의 전쟁에서 목숨을 내던져 장왕을 구함으로써 은혜를 갚았다. 지나치게 잘잘못을 따짐으로써 도전적 풍토를 해치는 사례가 있다면 이 절영회(絶纓會)의 고사를 곱씹어 볼 필요가 있을 것이다.

이 점에 대해서는 IBM의 최고경영자(CEO)였던 토마스 와튼의 일화도 우리가 눈여겨 볼만한 사례라고 할 수 있다. 회사에 큰 손실을 끼친 부하 직원이 와튼의 호출을 받자, 회사를 그만두라는 소리를 들을 것을 예상하고 침울한 마음으로 그의 방으로 찾아갔다. 그러나 와튼은 "너무 상심 말게. 자네의 교육 비용으로 천만 달러를 쓴 거야"라는 말을 들려주면서 오히려 그를 격려해 주었다. 이 일은 그 부하 직원을 더욱 노력하게 만든 것은 물론, 조직 전체에 새로운 도전을 두려워하지 않도록 만드는 풍토를 정착시키는 계기가 되었다. 이처럼 실수에 대한 관용과 성공에 대한 인정은 구성원의 열의와 진취적인 자세를 이끌어 내는 핵심 요인의 하나라고 할 수 있다.


○ 도와주라(Assist)

실패를 두려워하지 않고 도전하게끔 격려하는 것으로 리더의 역할이 끝나는 것은 아니다. 실제 실행 과정에서 발생하는 문제를 해결하게끔 지원해 주는 노력이 필요하기 때문이다. 때로 리더들은 지원의 중요성을 간과하여 부하가 봉착한 난관을 모르고 지나치거나, 반대로 자신이 직접 나서서 지시를 하는 모습을 보이는 경우가 있다. 그러나 이것은 부하의 능력 개발 기회를 없애고 장기적으로 조직의 경쟁력을 약화시키는 결과를 초래하게 된다.

러버메이드(Rubbermaid)사의 최고경영자였던 스탠리 골트는 10년간 연속해서 수익이 상승하는 기록을 남길 만큼 탁월한 경영자였다. 그러나 그는 "폭군"이라는 별명이 붙을 만큼 자기 중심적인 인물이기도 했다. 즉, 임원들조차도 그들 스스로 일을 주도적으로 할 수 있게끔 맡기고 자신은 지원만 하기보다, 오히려 자신의 지시와 명령에 따르는 수동적인 위치로 전락시켰다. 그 결과, 러버메이드는 그가 퇴임하고 나자 불과 5년만에 뉴웰(Newell)에 인수 당하는 신세가 되고 말았다. 굳이 이와 같은 사례가 아니더라도, 우리는 주변에서 지나치게 독선적이거나 관리 통제를 리더십이라고 오해하여 장기적인 조직의 건강을 해치는 잘못된 리더에 관한 사례를 쉽게 찾아볼 수 있다.

반면에 최근 비즈니스위크에 이어 타임지에서도 성공적인 경영 혁신을 이끈 경영자로 소개되었던 한 회사의 최고경영자의 경우, 신제품 개발이나 제품 혁신 담당자들과 현장에서 직접 토론하고 즉석에서 해결안을 제시하는 등 현장의 개선 프로젝트를 세심하게 지원해 줌으로써 지난해 18%의 매출 신장과 33%의 순이익 성장률을 기록하는 등 놀라운 성과를 달성하였다.

지금의 경영 환경은 과거와 같이 조정 경기에 비유할 수 있었던 안정적인 상황이 아니라, 래프팅에 비유할 수 있을 정도로 급변하고 있다. 그에 따라 리더십 스타일도 책상에 앉아 과제를 지시하고 보고서를 검토하는 방식에서 벗어나 직접 모범을 보이고 문제를 해결할 수 있도록 격려하고 지원하는 모습으로 바꿔 나가야 한다. 예를 들어, 과거 농구팀의 리더는 작전 지시를 하고 선수를 적절한 타이밍에 교체를 하는 의사 결정을 하는 사람이 전부였다. 그러나 최근에는 시카고 불스의 마이클 조던이나 TG 삼보의 허재처럼, 다른 선수들과 같이 호흡하면서 경기를 이끌어가는 플레잉 코치를 어렵지 않게 볼 수 있다. 따라서 앞으로 바람직한 리더의 모습은 의사 결정만을 내리는 상사가 아니라, 부하의 문제나 고민을 듣고 해결 방안에 대한 지원과 격려를 하는 것이 될 것이다.


○ 믿고 맡겨라(Delegate)

어려운 문제가 생겼을 때 지원을 해 주되, 지나친 간섭이나 관여는 구성원의 자율성을 저해하는 결과를 초래한다는 점 또한 잊어서는 안 된다. 옛날 위(魏)나라 문후가 악양이라는 장수에게 군사를 주고 중산(中山)이라는 나라를 정벌하게 했다. 악양이 3년만에 전쟁에서 승리하고 돌아와 그간의 공로를 말하자, 문후는 큼지막한 상자 하나를 악양에게 보여주었다. 그 상자에는 악양을 비방하는 상소문들이 가득 담겨 있었다. 이에 악양은 벌떡 일어나 문후에게 절하며 "이번 승리는 대왕께서 하신 일이지 신에게는 공이 없습니다"라고 말했다. 이처럼 한 번 부여한 과제에 대해서는 부하가 스스로 결정을 내리고 추진할 수 있도록 끝까지 믿고 맡겨줘야 한다. 특히 최근의 기업 경영은 과거에 비해 훨씬 많은 일들이 동시에 발생하고 있고, 지리적으로도 국내는 물론 해외의 사업장에서 여러 가지 일들이 수행되는 경우가 많아지고 있다. 따라서 안정적인 상황에서 소규모의 조직을 운영하는 경우와 같이, 리더 한 사람이 모든 것을 결정하고 그 결과를 챙기는 것이 사실 불가능하고 또한 바람직하지도 않다. 만약 사소한 일 하나 하나마다 리더의 결정을 따라야 한다면 개인의 상상력과 다양성은 사라지고 마는 결과를 초래하게 된다.

따라서 리더는 일일이 관리 통제하기보다 부하 직원들이 스스로 자신의 일에 대해 책임감을 가지고 최선을 다하도록 만드는 것이 바람직하다. 물론 이를 위해서는 리더 스스로가 부하 직원들의 모델이 될 수 있도록 솔선 수범하는 것이 필요할 것이다.


○ 리더와 부하의 관계는 신뢰가 기본

이상의 노력들은 부하 직원의 사기를 진작시키는 리더십 행동들이면서, 동시에 리더와 부하 직원 사이에 신뢰를 형성하기 위한 첫 걸음이라고 할 수 있다. 리더에 대한 신뢰는 상사가 부하의 이야기를 귀 기울여 듣고, 부하의 문제를 해결해 주려는 노력을 기울이면서 부하의 약점이 드러나지 않도록 배려해 주는 것에서부터 형성되기 시작한다.

리더와 부하간의 신뢰는 일에 대한 몰입도를 높임과 동시에 평가 결과에 대한 납득성을 높이고 보상에 대한 불만을 최소화시키는 역할을 함으로써 궁극적으로 기업의 성과에 긍정적인 영향을 끼치게 된다. 따라서 향후 인사 부서를 중심으로 미래 리더의 개발과 육성에 있어서 신뢰 형성을 위한 리더십 행동 개발 프로그램을 반영해 나가는 것이 요구되며, 이와 함께 리더 자신의 적극적인 자기 개발 노력도 더욱 더 필요하다고 하겠다.

이 놀라운 프로그램들 보면서 이제 정말 대세는 웹 플랫폼이 될 것이라는 생각이 든다..
두 프로그램 모두 아무런 설치과정이 없으니 정말 편하다..

FCKeditor - the text editor for internet
공개 HTML 에디터.. UI도 아주 멋지고 IE, FF, 모질라, 넷스케이프 4가지 웹브라우저를 지원한다.. 데모도 직접 바로 동작을 시켜볼 수 있다.. 공개 소프트웨어니 물론 소스도 바로 다운로드 받아 바로 사용해볼 수도 있다..
단점이라면 화면이 나타나는데 시간이 꽤 많이 소요된다.. CPU도 안 올라가고, HDD를 많이 읽는 것도 아닌데 암튼 꽤 기둘려야 한다.. 에디터 화면이 뜰때마다 이러니, 너무 느린게 아닌가 하는 생각도 든다..

AJAX Write - the web based word processor
구글에서 인수를 하려고 한다는 (소문만 듣고 확인을 못해봤다..) 회사의 제품.. 이제 에디터 수준을 넘어서 워드 프로세서까지 등장을 했다.. 로딩되는 속도, 위의 에디터 보다 훨씬 느리다.. 역시 워드 프로세서 답다.. (고럼~ 그래도 명색이 워드프로세서인데.. 그정도 위세는 부려야지.. 포토샵 봐.. 로딩속도, 아주 중후하잖아.. 그 정도는 안되더라도 워드 프로세서 답게 어느 정도는..) 웹 어플리케이션에서 스플래쉬 윈도우가 등장할 정도니까.. 오랜시간 기둘려 등장한 화면은 요즘의 세련된 워드프로세서에는 못 미치지만, 초창기 워드 프로세서의 모습이다.. 이제 웹에서 이런 것도 된다.. 놀랍다.. 지원하는 포멧은 MS-Word, Open Office, RTF, PDF.. 이것도 놀랍다.. 표 그리기는 정말 불편한 수준인데, 곧 좋아지겠지..
더 큰 단점은 아직은 Fire Fox 전용이라는 것이다.. 지원하는 웹브라우저에 IE를 빼놓다니.. 멋진 놈들이다.. 해서 멋진 모습을 직접 구경해보려면 FF를 설치해야 한다.. FF도 좋은 웹브라우저고, 이 웹 워드 프로세서가 돌아가는 모습은 정말 봐둬야 하는 멋진 작품이니, FF를 지금이라도 설치하는게 좋다.. (앞으로 FF와 IE를 모두 사용하면서 비교하게 될 일이 점점 더 많이 생길 것이니 얼른 깔아두는게 좋을것이다..)

웹용 워드프로세서 구현에 관심을 가졌던 사람들이 많았는가 보다.. ZOHO Writer 라는 제품도 있다.. (웹 워드 프로세서를 써보자~ 소개글 참조)
안에 html 참조해 보시고요.
http://script.aculo.us 사이트의
sortable 소스를 기본으로 했기 때문에 script.aculo.us 의 라이브러리가 기본적으로 반드시 필요합니다.


프로토 타잎 방법을 정확하게 모르는 관계로 자동으로 create 하는 부분은 못 했구요
아래와 같이 실행하셔야 합니다. ^^

var personalSort    = new personalSorts;
personalSort.create(    "firstlist,secondlist",
                        {    "callBack":"loadXml", "tmpBody":"content" },
                        {    "dropOnEmpty":true, "constraint":false,
                            "onChange":function(){
                                personalSort.makeCookies();
                            }
                        }
                    );
personalSort.parseAsync( getCookie( "firstlist" ) );
personalSort.parseAsync( getCookie( "secondlist" ) );




개인적으로 만든 personalSorts 안의 변수 및 정보들 입니다.

create(entry, personalSortsOptions, sortTableOptions)    : 개인화 스크립트를 생성합니다.
    entry                : Sortable이 구동될 document ID
    personalSortsOptions
        nodeId            : 추가시 element Domain ID    (없는경우 rss)
        nodeCalss        : 추가시 element Class        (없는경우 item)
        tmpBody            : 글 내용이 들어가는 곳의 Domain ID
        tplName            : 템플릿을 body 에서 직접 가져 오는 경우 해당 부분의 ID
        tplString        : 글 내용 부분에 들어가는 템플릿 내용
        callBack        : element를 추가한 후에 대한 액션을 정의할 콜백함수명( 인자는 무조건 identity 한개만 들어감 )
        cookieExpire    : 쿠키 지속일

    sortTableOptions    : (    http://script.aculo.us    관련 매뉴얼 참조)


makeSortItem(locate, idx, display)                        : 아이템을 생성합니다.
    locate                : entry 위치 ( 1 부터 시작 )
    idx                    : 해당 아이템의 고유 identity (Rss 를 사용 한다면, Rss idx 같은...)
    display                : 열림(1), 닫힘(0)


parseAsync(items)                                        : 문자열을 파싱해 화면에 출력합니다.
    items                : 직렬화된 아이템 문자열. 아이템간의 구분은 , 로 합니다.
                            makeSortItem 에 들어갈 정보들이 1-1-0,2-2-0,2-3-0
                            등의 문자열로 처리됩니다.


removeItem(idx)                                            : 해당 아이템을 삭제합니다.
    idx                    : 해당 아이템의 고유 identity (Rss 를 사용 한다면, Rss idx 같은...)


serialize(entryName[, loc])                                : item 정보들을 직렬화 시킵니다.
    entryName            : 직렬화된 정보를 가지고 올 해당 엔트리의 이름
    loc                    : 엔트리 위치값
                            ( 즉 loc 가 입력되지 않으면 엔트리 순서-idx-display 정보만 리턴됩니다)


serializeAll()                                            : 모든 엔트리에 대한 정보를 직렬화 시킵니다.


makeCookies()                                            : 쿠키를 생성합니다.

ajax를 이용한 파일 탐색기 입니다.

처음에 트리 구조를 공부하다가 만든건데 어쩌다 보니 탐색기가 되어 버렸네요.

조금만 수정 하시면 웹하드로도 사용하실수 있을겁니다.

safari3, FF2 , IE6,7 에서 테스트해보았습니다.

사용하실때 tree.html안의 root경로만 변경하여 주시면 됩니다.

- 반드시 접근할수 있는 경로로 변경해주세요.
- 접근할수 없는 권한의 경로로 이동하면 에러가 나네요.. -.-;

<script language="javascript">
//경로(phth=불러올수 있는 서버 주소(절대경로)) , 리턴되는 값을 받을 함수
root = "접근할수 있는 경로";
xmlHttp("data.php?path="+root,tree.view);
</script>



// 주민번호 체크
  function CheckJumin(obj, step) {
    var err = 0;
    if(step == "submit"){
        var objchar = eval("document.all."+ obj + "1");
        var objchar2 = eval("document.all."+ obj + "2");

        if(objchar.value.length != 6){
            alert("주민등록번호를 정확히 입력하여 주세요.");
            objchar.value = "";
            objchar.focus();
            return false;
        }
        if(objchar2.value.length != 7){
            alert("주민등록번호를 정확히 입력하여 주세요.");
            objchar2.value = "";
            objchar2.focus();
            return false;
        }

    }else if(step == "write"){
        var objchar = eval("document.all."+ obj.name.substring(0, obj.name.length - 1) + "1");
        var objchar2 = eval("document.all."+ obj.name.substring(0, obj.name.length - 1) + "2");
    }

    for(CJ_i=0;CJ_i<objchar2.value.length;CJ_i++){
        var juminnum=objchar2.value.charAt(CJ_i);
        if (juminnum < '0' || juminnum > '9'){
            alert("주민등록번호는 숫자만 가능합니다.");
            objchar2.value = objchar2.value.substring(0, CJ_i);;
            objchar2.focus();
            return false;
        }
    }

    if(objchar2.value) {
         if(objchar2.value.length == 7) {

            var nowdate = new Date();
            var nowyy = nowdate.getFullYear();
            var nowmm = nowdate.getMonth() +1;
            var nowdd = nowdate.getDate();

            if (objchar2.value.charAt(0) == "1" || objchar2.value.charAt(0) == "2" ){
                var objyy = 1900 + parseInt(objchar.value.charAt(0)) * 10 + parseInt(objchar.value.charAt(1));
            }else if(objchar2.value.charAt(0) == "3" || objchar2.value.charAt(0) == "4" ){
                var objyy = 2000 + parseInt(objchar.value.charAt(0)) * 10 + parseInt(objchar.value.charAt(1));
            }else{
                err=1;
            }

            var objmm = parseInt(objchar.value.charAt(2)) * 10 + parseInt(objchar.value.charAt(3));
            var objdd = parseInt(objchar.value.charAt(4)) * 10 + parseInt(objchar.value.charAt(5));

            if (nowyy < objyy){
                err = 1;
            }else if (nowyy == objyy){
                if (nowmm < objmm){
                    err = 1;
                }else if (nowmm == objmm){
                    if (nowdd < objdd){
                        err = 1;
                    }
                }
            }

            if (objmm < 1|| objmm > 12){
                err = 1;
            }

            if (objdd < 1|| objdd > 31){
                err = 1;
            }

            if (objmm == 4 || objmm == 6 || objmm == 9 || objmm == 11 ){
                if (objdd == 31){
                    err = 1;
                }
            }

            if (objmm==2){
                var g=parseInt(objyy/4)

                if (isNaN(g)) {
                    err=1;
                }
                if (objdd>29) err=1;
                if (objdd==29 && ((objyy/4)!=parseInt(objyy/4))) err=1;
            }

            var fulljumin = objchar.value + objchar2.value;
            var hap = 0;
            var j = 0;

            for (CJ_ii=0; CJ_ii<12;CJ_ii++){
                if(j < 2 || j > 9){j=2;}
                hap = hap + (parseInt(fulljumin.charAt(CJ_ii)) * j);
                j++;
            }
            
            if ((11 - (hap%11))%10 != parseInt(fulljumin.charAt(12))){
                err=1;
            }

            if (err == 1){
                alert("올바른 주민등록 번호가 아닙니다.");
                objchar.value = "";
                objchar2.value = "";
                objchar.focus();
                return false;
            }
        } 
    }
    return true;
  }

// 사업자번호 체크
  function CheckCom(obj, step) {
    var err = 0;

    if(step == "submit"){
        var objchar1 = eval("document.all."+ obj + "1");
        var objchar2 = eval("document.all."+ obj + "2");
        var objchar3 = eval("document.all."+ obj + "3");

        if(objchar1.value.length != 3){
            alert("사업자등록번호를 정확히 입력하여 주세요1.");
            objchar1.value = "";
            objchar1.focus();
            return false;
        }
        if(objchar2.value.length != 2){
            alert("사업자등록번호를 정확히 입력하여 주세요2.");
            objchar2.value = "";
            objchar2.focus();
            return false;
        }
        if(objchar3.value.length != 5){
            alert("사업자등록번호를 정확히 입력하여 주세요3.");
            objchar3.value = "";
            objchar3.focus();
            return false;
        }

    }else if(step == "write"){
        var objchar1 = eval("document.all."+ obj.name.substring(0, obj.name.length - 1) + "1");
        var objchar2 = eval("document.all."+ obj.name.substring(0, obj.name.length - 1) + "2");
        var objchar3 = eval("document.all."+ obj.name.substring(0, obj.name.length - 1) + "3");
    }

    for(CC_i=0;CC_i<objchar3.value.length;CC_i++){
        var comnum=objchar3.value.charAt(CC_i);
        if (comnum < '0' || comnum > '9'){
            alert("사업자등록번호는 숫자만 가능합니다.");
            objchar3.value = objchar3.value.substring(0, CC_i);;
            objchar3.focus();
            return false;
        }
    }

    if(objchar3.value) {
         if(objchar3.value.length == 5) {


            var fullcom = objchar1.value + objchar2.value + objchar3.value;
            var hap = 0;
            var CC_j = 0;
            var cal_arr = new Array("1","3","7","1","3","7","1","3","5");
            for (CC_ii=0; CC_ii<9;CC_ii++){
                hap = hap + (parseInt(fullcom.charAt(CC_ii)) * parseInt(cal_arr[CC_j]));
                CC_j++;
            }

            hap = hap + parseInt((parseInt(fullcom.charAt(8))*5)/10);

            if ((10 - (hap%10))%10 != parseInt(fullcom.charAt(9))){
                err=1;
            }

            if (err == 1){
                alert("올바른 사업자 번호가 아닙니다.");
                objchar1.value = "";
                objchar2.value = "";
                objchar3.value = "";
                objchar1.focus();
                return false;
            }
        } 
    }
    return true;
}

// 법인번호 체크
  function CheckBubin(obj, step) {
    var err = 0;

    if(step == "submit"){
        var objchar = eval("document.all."+ obj + "1");
        var objchar2 = eval("document.all."+ obj + "2");

        if(objchar.value.length != 6){
            alert("법인등록번호를 정확히 입력하여 주세요.");
            objchar.value = "";
            objchar.focus();
            return false;
        }
        if(objchar2.value.length != 7){
            alert("법인등록번호를 정확히 입력하여 주세요.");
            objchar2.value = "";
            objchar2.focus();
            return false;
        }

    }else if(step == "write"){
        var objchar = eval("document.all."+ obj.name.substring(0, obj.name.length - 1) + "1");
        var objchar2 = eval("document.all."+ obj.name.substring(0, obj.name.length - 1) + "2");
    }


    for(CB_i=0;CB_i<objchar2.value.length;CB_i++){
        var bubinnum=objchar2.value.charAt(CB_i);
        if (bubinnum < '0' || bubinnum > '9'){
            alert("법인등록번호는 숫자만 가능합니다.");
            objchar2.value = objchar2.value.substring(0, CB_i);;
            objchar2.focus();
            return false;
        }
    }

    if(objchar2.value) {
         if(objchar2.value.length == 7) {


            var fullbubin = objchar.value + objchar2.value;
            var hap = 0;
            var j = 0;

            for (CB_ii=0; CB_ii<12;CB_ii++){
                if(j < 1 || j > 2){j=1;}
                hap = hap + (parseInt(fullbubin.charAt(CB_ii)) * j);
                j++;
            }
            
            if ((10 - (hap%10))%10 != parseInt(fullbubin.charAt(12))){
                err=1;
            }

            if (err == 1){
                alert("올바른 법인등록번호가 아닙니다.");
                objchar.value = "";
                objchar2.value = "";
                objchar.focus();
                return false;
            }
        } 
    }
    return true;
}

IFRame 높이를 자동으로 도큐먼트 크기에 맞게 조정하는 함수입니다.
<script language="javascript">
function calcHeight(FrameName)
{
 
  var the_height= document.getElementById(FrameName).contentWindow.document.body.scrollHeight;
document.getElementById(FrameName).height=the_height;
}
</script>

예)
<iframe id="IFRAME" src="somepage.html" width="100%" onLoad="calcHeight('IFRAME')"></iframe>

동작 브라우저 : IE,FF,Netscape,Opera
===============================================
요즘 RSS을 점점 지원하고 있는 추세지만
아직도 많은 기업들의 웹사이트들은 RSS 노출을 꺼려하거나
필요성을 느끼지 못한다...하지만..최근 발견된 사이트에서는
그런 모든 문제점을 뛰어넘는 기술이 나타났다..
이미 베타테스트를 진행 중인 사이트로서
기존 RSS가 제공되는 채널 등록도 가능하지만..
지원되지 않는 게시판들이나 사이트들도 즉성 생성이 가능하다.

또한 등록한 사이트나 채널들을 일일이 내부 수집 시스템을 통해
자동으로 수집해서 한자리에서 볼 수 있는 형태인 듯 싶다.
놀라운 것은 기존은 단순 상대방에서 노출시켜주는 제목이나 간략 내용만을 보여주지만 이곳에서는 놀랍게도 이미지들과 내용들을 동시에 미리보기 할 수 있도록 기능을 제공하고 있다.

현재까지 지켜본 봐로는 아직 등록된 사이트가 그리 많지 않는 관계로 업데이트 주기도 빠르다. 보통 기사나 사진쪽의 경우 해당 10분 이내에는 업데이트가 바로바로 된다는 점이 주목할만 하다.

또한가지 이색적인 개념이 도입되었다.
기존 RSS 검색툴이나 제공 사이트들은 분류별로 각 채널들을 소개하거나 매핑 하는 정도지만 여기에서는 가 채널별로 테마를 구성할 수가 있다는 것이다. 예를들자면 PHP나 Java를 주제로 등록된 채널들을 그룹핑 해서 구독할 수 있는 획기적(?)인 방법을 고안해 내었다고 보여진다.

이런 서비스를 최초로 시도해보므로써 많은 기술적 문제와 저작권 문제가 대두될 서비스라고 보아진다.

다음은 몇몇 현재 구성된 RSS 테마 주소이다.
이 서비스의 판단은 본인이 직접 하기를 바란다.


해당 서비스의 소개 페이지
http://mnow.net/mnow/center/

테마 - 프로그래밍-오픈소스
http://mnow.net/theme/1659

테마 - 프로그래밍 개발동향
http://mnow.net/theme/1657

테마 - 엽기갤러리
http://mnow.net/theme/190

이번에 소개할 MiNiFTP 프로그램은 SWFUpload (http://swfupload.mammon.se/) 라이브러리를 이용해 구현한 것입니다. SWFUpload는 아주 심플한 javascript/flash 라이브러리로써, 플래시의 굉장한 업로드 기능을 깔끔한 UI로 편리하게 이용하고 구성할 수 있도록 해 줍니다.

본 프로그램은 MiNi(미니) FTP로써 특정 폴더내의 파일을 웹상에서 편리하게 관리 할 수 있도록 해주는데 그 목적이 있습니다. 해당 프로그램을 응용해 전체 사이트의 웹FTP로 활용할 수도 있습니다.
기존의 웹FTP라 함은 별도의 ActiveX를 설치하여 사용하거나 웹상에서 바로 사용하더라도 파일을 하나씩 업로드 해야 하는데 불편함이 있었습니다.
하지만 이 MiNiFTP 프로그램은 어떠한 ActiveX를 설치할 필요도 없으며(단, Flash Player가 설치 되어 있어야 함) SWFUpload를 이용해 여러개의 파일을 동시에 선택하고 업로드 할수 있도록 구현되었습니다.

데모 : http://miniftp.webrish.com
데모 : http://demo.swfupload.org/

<select name="language">
    <optgroup label="선택하세요" style="color:orange"></optgroup>
    <optgroup label="Web" style="color:green">
        <option>ASP</option>
        <option>PHP</option>
        <option>JSP</option>
    </optgroup>
    <optgroup label="Window" style="color:blue">
        <option>VB</option>
        <option>C++</option>
        <option>JAVA</option>
    </optgroup>
</select>







<script language="JavaScript">
function copy_cont(){
window.event.returnValue = true;
window.setTimeout('copyright()', 25);
}
 function copyright() {  
if (window.clipboardData) {  
var txt = window.clipboardData.getData('Text');  
txt = '<!-- http://www.blog4u.kr -->\r\n\r\n\r\n' + txt;  
var result = window.clipboardData.setData('Text', txt);  } }
</script>

<body oncopy="copy_cont()">


복사할 때 복사 내용에 특정 내용 포함 시키기~

웹페이지(사이트이든 어플리케이션이든 간에…)를 제작하다 보면 항상 필요한 것들이 있다. DOM 정보라던지, 페이지간에 오가는 요청 정보라던지, 쿠키라던지… 하여간 확인하고 체크하고 점검해야 할 것들이 어찌나 많은지…

DebugBar라는 프로그램은 이런 정보들을 IE 한쪽에 딱 붙어서 보여주는 Plugin이다. 상용프로그램이기는 하지만, 개인적으로 사용할 때는 무료로 사용할 수가 있다.

DebugBar

  • 제작사 : http://www.debugbar.com/
  • 지원운영체제 : (운영체제라기보다는 ) Internet Explorer
  • 라이센스 : 상용(하지만, 개인적으로는 무료~)

이 녀석의 기능은 크게

사용자 삽입 이미지

DOM 정보보기,
사용자 삽입 이미지
HTTP 요청시의 정보(GET 또는 POST 파라메터 정보 등) 보기,

사용자 삽입 이미지
자바스크립트 코드 보기,
사용자 삽입 이미지
HTML 유효성 확인,
사용자 삽입 이미지
기타 쿠키 등의 정보 보기

등으로 나눌 수 있다.
한국어 언어 파일도 있고, 개인용으로 등록하는 방법도 간단하고, (아래 그림의 빨간 동그라미를 눌러주시면 된답니다.)

사용자 삽입 이미지

개인적으로 주로 많이 사용하는 HTTP 요청 정보 보기 같은 것은 IEInspector 사의 IEHTTPAnalyzer 같은 프로그램이 좀 더 편하기는 하지만, 구매해야만 사용할 수 있는 프로그램이라서 좀 그렇죠 ㅎㅎ.


원래는 이녀석 보러 해당 사이트 갔었는데, 이리저리 뒤지다 보니깐 재미있는게 또 있더군요. 그녀석들은 이어서 포스팅하도록 하겠습니다.
그럼 항상 행복하세요

출처: [http]Creating different CSS style selector
[http]css-design-concerns-for-ie6-ie7-and-firefox

IE7 의 렌더링 방식이 IE6과 다르다.
CSS testing of Selector and Pseudo selectors 를 보면 IE7 은 FF 에 더 가까와 지고 있다.
그래서 바야흐로 브라우저 3개를 켜고 코딩을 해야하는 시대가 온 것이다.

이를 해결하기 위한 방법 중 하나는 Selector Hack 을 이용하는 것이다.

.context_bar_form_field
{
height: 15px; // 모든 브라우저
#height: 15px; // IE 전용
_height: 21px; // IE6.0 과 이전버젼용
}
우선 파폭에 맞추어 개발을 한 후 E7 에서 점검한다. 수정할 부분이 있다면 # 접두어를 붙여 수정해 준다. #이 붙은 것은 FF 에서 무시한다. 하지만 IE 는 재설정 해준다.
다음에 IE6 을 열고 수정하면서 _ 를 접두어로 붙여 새로 재설정 한다. IE7 은 '-' 가 붙은 것을 무시한다.
 
또 다른 방법은,
.title h3 {height: 21px; }
.title > h3 {height: auto; min-height: 21px; }

이렇게 하는 방법도 있다. 맨 아래줄은 파이어폭스와 IE7만 적용된다.

한가지 주의할 점은

body
{
text-align:-moz-center; /*FF*/
#text-align:center; /*IE */
}
속성 키워드 자체가 다른 것이 많다. 주의 할 것!
위에서 처럼 속성값 자체가 다른 경우가 있다. 그러니 안된다고 hack 만 쳐다보고 있으면 밤세야 한다.

내가 보기에 가장 좋은 방법은 Conditional Comments 를 사용하는 것이다.
복잡하게 한 파일에 구질구질 작성하지 말고 파일을 분리해 버리는 것이다.

참고 :http://webborg.blogspot.com/2007/01/css-compatibility-ie6-ie7-firefox-and.html

<head>
<title>my css hacked page</title>
<link rel="stylesheet" type="text/css" href="styles.css" />
<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" href="iehacks.css">
<![endif]-->
<body>
  <div class="watermark">....</div>...

이렇게 분리해서 각개격파하는 것이 좋을 듯 싶다.

참고글
w3cschools.com 브라우저 접속률
CSS Hacks

+ Recent posts