Clean Code that Works.

CKEditor 사용하면서 찾았던 내용 정리.

CKEDITOR.replace("contents", {

height: 350, // 높이 수정

allowedContent: true // 소스코드 포함 수정(you tube 링크 걸 경우)

});

신고

Comment +0


 바야흐로 대항해 시대가 아니라 대용량 데이터 시대이다. 사용자들은 직접 데이터를 생산하거나 간접적으로도 다양한 방법으로 데이터들을 생산하고 있다. 여기다가 이 데이터들을 분석한 데이터까지.. 정말 데이터들은 시간이 지나면 지날수록 넘쳐나고 있다. 이 책을 읽으면서 생각의 전환을 많이 할 수 있었던거 같다. 단순히 지금 시스템에 대한 개발 및 유지보수만 하고 있을 때가 아니라 데이터가 넘처나는 지금 상황에서 이 데이터를 어떻게 유용하게 사용할수 있을까에 대한 생각이 많이 들었다.

 책에서 이야기 하는것 처럼 지금은 사용자가 주인공인 그런 사이트나 앱 들이 성공을 거두고 있다. 책에서의 예처럼 유투브도 별다른 홍보 없이도 사용자들에 의해 홍보가 되면서 가히 폭발적인 사용자 증가를 이루었고 또 최근에 카카오톡에서 자주받는 메시지인 게임 초대 메시지만 하더라도 사용자가 단순히 게임만 즐길 뿐만 아니라 결과를 공유할수있도록 하여 게임과 카카오톡 둘다 성공을 거두고 있다고 볼 수 있다. 이처럼 사용자 중심의 애플리케이션이 되기 위해서는 사용자들이 만들어 내는 집단 지성이 중요한 부분을 차지하고 있다고 책에서 이야기 하고 있다. 

궁극적으로 사이트나 애플리케이션 등을 성공으로 이끌기 위해서는 모두 꼭 읽어 봤으면 좋겠다.


여기서부터는 챕터 1 간단 요약.

집단지성은 똑똑한 군중의 힘을 이용해 애플리케이션을 좀더 가치있게 만드는 방법.

집단지성의 간단한 의미

애플리케이션을 개선하기 위해, 사용자들이 제공한 정보를 효과적으로 이용하는 것.


1챕터 마지막 요약.

집단지성은 사용자들이 소통하고, 콘텐츠를 만들고, 다른 사용자와 인맥을 맺고 사이트의 경험을 개인화할 수 있는 새로운 애플리케이션을 만드는 데 크게 기여 했다.

사용자는 다른 사용자에게 영향을 준다. 이런 영향은 인접한 범위부터 시작해 티핑 포인트(tipping point)에 도달하기까지 외부로 퍼져나간다. 유용한 사용자 생성 콘텐츠와 의견들은 입소문에 힘입어 최소한의 마케팅만으로도 널리 알려진다. 

사용자에게서 얻을 수 있는 지능 정보는 세 종류로 나뉜다.

첫째는 사용자로부터 직접 얻는 지능 정보다. 리뷰, 추천, 등급, 투표, 태그, 북마크, 사용자 소통 그리고 사용자 생성 콘텐츠(UGC) 같은 것들이 이런 지능을 얻기 위한 기술이다. 

둘째는 애플리케이션 내부 혹은 외부로부터 얻어지며, 대부분 비 구조화된 텍스트로 구성된 간접적인 지능 정보다. 블로그 포스트, 온라인 커뮤니티의 글, 위키등이 이러한 정보의 원천이다. 

셋째는 데이터 마이닝 기술을 통해 도출한 좀더 고수준의 지능 정보다. 추천 엔진, 개인화를 위해 예측 분석을 이용하는 행위, 프로필 구축, 마켓 구분 그리고 웹 마이닝이나 텍스트 마이닝 등이 좀더 고수준의 지능 정보를 적용하기 위한 작업들이다.


신고

Comment +0

http://stackoverflow.com/questions/1787557/apache-proxy-to-tomcat-keep-alive-confusion
 

keep-alive 옵션에 대한 설명.


There are (at least) four “keep-alive”s.

  1. HTTP layer keep-alive between client browser and Apache. (Enables multiple client requests in a HTTP/TCP connection. “KeepAlive” directive to configure.)

  2. TCP layer keep-alive between client browser and Apache. (To avoid connection to be closed by firewalls, send empty packet periodically (around 2 hours by default in Linux). I don't know how to configure in Apache.)

  3. AJP layer keep-alive between Apache and Tomcat. (Enables multiple Apache request in a AJP/TCP connection. “max” and “smax” options for “ProxyPass” to configure.)

  4. TCP layer keep-alive between Apache and Tomcat. (Same as 2, but for firewall between Apache and Tomcat. “keepalive” option for “ProxyPass” directive to configure.)

신고

Comment +0

주의 해야 할 점.

IE 에서는 new Date(calendarObj.getDate)가 안 먹는다.
getDate를 slice 해서 year, month, day로 구분해 주자. ㄱ- 뭐이래

js에서 month 는 0 부터다. + 1, - 1을 적절히 해서 우리가 보는 것과 동일 하게 해주자.

numberOfMonths 옵션을 사용 할 때, css에 지정되어 있는 숫자는 최대 4까지다.(25%)
더 쓰고 싶으면 css에 추가 해주자
ex) .ui-datepicker-multi-5 .ui-datepicker-group { width:20%; }

js에서 getYear는 Deprecated 되고 getFullYear()를 사용 해야 한다.(ie 8에선 getYear가 여전히 작동)
ff에서는 안먹는데 왜 getYear 가 deprecated 됬지.
신고

Comment +0


jQGrid에서 jsonData 사용할 경우에 일반적으로 아래와 같은 구조로 데이터가 넘어올 것이라 기대한다.
{"page":"1","total":2,"records":"13",
"rows":[{"id":"13","cell":["13","2007-10-06","Client 3","1000.00","0.00","1000.00",null]}]}

다른 부분은 문제가 없는데 rows에 id와 cell정보가 모델 형식과 맞지 않는 경우가 많아서...
List<Post> 형식으로 rows를 구성하고 싶은데, 이를 가공해 줘야 한다는 말씀... 맵 형식으로 해서 id, cell 방식으로..
게다가 cell 에는 키가 없고 값만 줄줄이 들어 있다.

음 하여 나는 이걸 좀 변경하고 싶다.
아래와 같은 형식으로 키 : value 쌍으로.(jackson 컨버터가 이런형식으로 변환 해 준다.)

더보기


그럼 어떻게 하면 되는가..

jQGrid 옵션에다가 이것을 추가 하면 된다.

더보기


jsonReader 속성을 보면 응답해주는 json의 값들의 키들을 변경해 줄 수 있다.
root, page, total, records 등등

jQGrid는 글번호를 자동 생성 해 준다.(글번호 관련 column 및 row가 필요 없다.)

신고

Comment +0


자바 스크립트로 체크하는 Validation

유효할 때


필드 값들을 입력하고, 다른 필드로 넘어 갈때 유효성을 체크 하고,
submit을 클릭하였을 때 아래와 같이 유효성을 다시 한번 체크 한다.

에러가 발생했을 경우


에러의 갯수를 팝업을 통해 알려주고,
입력 필드 오류 메시지도 입력 필드 옆에 보여준다.
또한 폼 위 아래로 메시지를 표시하여 오류가 났음을 인식 하도록 한다.

 * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
 * http://docs.jquery.com/Plugins/Validation

위의 validation 플러그인을 활용하여 만들 수 있다.

더보기



오메, 노트북 책상이 필요해!! 누워서 할려니 하다가 지쳐서 하기가 싫네 ㅋㅋㅋ

신고

Comment +0

클라이언트(웹 브라우저)에서 유효성 체크는 어떻게 하는게 좋을까?
그때그때 상황에 맞추어 사용하고는 있지만, 이런 저런 케이스에 따라서 한번 정리해 보고 싶었다.

1. 폼 전송 클릭 시 체크 한다.
-> 결과를 팝업으로 알려준다.(아마 가장 쉽게, alert으로 뿌려 줄 때)
-> 결과를 input field 옆이나 밑에 오류표시로 알려준다.(좀 더 있어 보이는, 하지만 고객들도 이런거 좋아하나??)

2. field 입력 후 다른 field로 넘어갈 때
-> 이 방식도 괜찮기는 한데, 입력 후 다음 필드로 넘어 갔을 때 이전 필드에 오류 났다고 표시하면 바로 다시 가서 수정하기가 좀 짜증나지 않나? 예전에 인포메이션 아키텍쳐(폼 디자인 책인가) 관련 해서 보면서도, 전체적인 흐름에 어긋나기도 하고.. 작성 흐름이 깨지기 때문에 비추 하는 모양.

3. field 필드 입력시 바로바로 검사
-> 이것 좀 괜찮은 방법있듯, 일단 입력시 이벤트로 바로바로 검사해서 사용자에게 알려주는.. 음 하지만 이렇게 하면 경고 메시지가 자주 나오기도 하고.. 옆에서 나왔다 사라졌다 하면 좀 짜증나겠다 귀찮고.

대충 이정도로 하면 되겠는데,
내가 하고 싶은 방식은 "폼 전송 클릭시" 이 부분이 되겠다.
보통 이렇게 하지 않을까 싶은데.

하여.. jQuery 플러그인을 사용해서 이 부분을 작성해 보자.
옵션으로 결과를 팝업으로 할지, 인풋 필드로 알려줄 지 선택 할 수 있도록 해서..
고고싱.
신고

Comment +0

jqGrid의 gridData 들을 JSON 형식으로 서버에 전달해야 하는데..
이게 좀 햇갈려서 -.,-

스프링 팀 블로그 보기

위 블로그를 보면 $.postJSON이라는 함수를 써서 submit 하는데,
jQuery에는 이게 없으니깐, 이것을 구현한게 있나 구글링 해 보니.
postJSON 보기
이렇게 해주더라..

$.postJSON = function (url, data, callback) {
$.ajax({
'url': url,
'type': 'post',
'processData': false,
'data': JSON.stringify(data),
contentType: 'application/json',
success: callback,
});
};

삽질 중에 contentType을 'application/json'으로 주는것 까지는 생각했었는데, data를 json으로 바꿔줘야하는것은 생각을 못했다. json 형식으로 직접 만들어 줘도 안되길래..
음 뭐 내가 잘못 생각 한건가.. -,.-;;

아무튼 jqGrid data 가지고 excelView 만들어 주는 작업 계속 진행 중.


신고

Comment +0

jquery 플러그인으로 파일 업로드를 했을 경우.

sucess: 이벤트에서 json 타입을 받아서 처리 하지 못한다.
이유를 검색 해 보면 iframe에다가 값을 쓰기 때문에 그러 한다고 한다.

그렇기 때문에 값들을 일단 json 형태로 가져오데, text로 해서 다른 div 에다가 쓴 후 
이것을 json으로 파싱해서 사용 하면 된다.

근데 ie 나 FF에서 이것들 가져 올 때 iframe에 싼다고 생각하여 <pre></pre> 태그를 붙여준다.

하여 이놈을 없에 주어야 하는데.

이렇게 해서 정규식으로 pre를 잘라내서 사용하는 방법 도 있다.

var cleaned = uploadResponse.responseText.replace(/<\/?pre>/ig, '');
신고

Comment +0

네이버 지도 OPEN API 사용하는데...
위치 검색 해서 좌표 구하는 부분에서.. 네이버에서는 XML을 리턴한다.

그러므로.. 크로스 도메인 문제로 jQuery로는 사용이 불가 하다.(JSON으로 리턴해주면 되는데!!!!)
하여 서버사이드에서 처리를 해 줘야 한다.

서버에서 URL 로 콜 해서 데이터들을 가져온 다음..
(이걸 XML로 변환한 다음에 JSON으로 변환해야 될줄 알았는데 그냥 데이터(XML 형식의 TEXT)를 JSON으로 변환 시켜도 된다)

그럼 이런 결과가 찍힌다.
<?xml version="1.0" encoding="euc-kr" ?><geocode xmlns="naver:openapi"><userquery><![CDATA[경기도성남시정자1동25-1]]></userquery><total>1</total><item><point><x>321063</x><y>529727</y></point><address>경기도 성남시 분당구 정자1동 25-1</address><addrdetail><sido><![CDATA[경기도]]><sigugun><![CDATA[성남시 분당구]]><dongmyun><![CDATA[정자1동]]><rest><![CDATA[25-1]]></rest></dongmyun></sigugun></sido></addrdetail></item></geocode>

이것을 JSON으로 변경 해야 하는데
이미 공개된 API들이 있으므로 그것을 사용하자. ㅋ

org.json(maven) 과 net.sf.json

org.json의 경우 XML이라는 클래스에 toJSONObject() 메서드를 제공 한다. 하여 결과를 찍어 보면,
깔끔한 JSON 코드가 나온다.
{"geocode":{"total":1,"userquery":"경기도성남시정자1동25-1","item":{"point":{"y":529727,"x":321063},"address":"경기도 성남시 분당구 정자1동 25-1","addrdetail":{"sido":{"sigugun":{"content":"성남시 분당구","dongmyun":{"content":"정자1동","rest":"25-1"}},"content":"경기도"}}},"xmlns":"naver:openapi"}}


net.sf.json 에서는 XOM이라는 jar 파일이 필요하다.
XMLSerializer에서 의존하고 있는것이 있다.
하여 실행을 해 보면 아래와 같이 표시된다.
{"geocode":{"total":1,"userquery":"경기도성남시정자1동25-1","item":{"point":{"y":529727,"x":321063},"address":"경기도 성남시 분당구 정자1동 25-1","addrdetail":{"sido":{"sigugun":{"content":"성남시 분당구","dongmyun":{"content":"정자1동","rest":"25-1"}},"content":"경기도"}}},"xmlns":"naver:openapi"}}
{"@xmlns":"naver:openapi","userquery":"경기도성남시정자1동25-1","total":"1","item":{"point":{"x":"321063","y":"529727"},"address":"경기도 성남시 분당구 정자1동 25-1","addrdetail":{"sido":{"#text":"경기도","sigugun":{"#text":"성남시 분당구","dongmyun":{"#text":"정자1동","rest":"25-1"}}}}}}

약간 틀리다.
org.json에서는 text 값들을 content로
net.sf.json은 #text로 표시해준다.

왼지 org.json이 깨끗해 보이긴 하나.. 이미 net.sf.json을 사용중이므로..
아래것으로 해야겠다.

테스트 코드는 아래 것.

@Test
    public void getXmlData() {
        URL naverUrl;
        StringBuffer sb = new StringBuffer();
        try {
            naverUrl = new URL(
                    "http://map.naver.com/api/geocode.php?key=키입력&query=경기도성남시정자1동25-1");
           
            BufferedReader in = new BufferedReader(new InputStreamReader( naverUrl.openStream()));
            String inputLine;

            while ((inputLine = in.readLine()) != null)
                sb.append( inputLine.trim());
           
            in.close();
           
            System.out.println( sb.toString());
           
            org.json.JSONObject jsonObj = XML.toJSONObject( sb.toString());
            System.out.println(jsonObj);
            JSONObject obj = (JSONObject) new XMLSerializer().read( sb.toString());
            System.out.println( obj);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }





신고

Comment +0

티스토리 툴바