반응형

select

        (

            (

                (

                    acos(

                            sin( 기준Lat * PI() /180.0 ) *

                            sin( dbLat * PI() /180.0 ) +

                            cos( 기준Lat * PI() /180.0 )  *

                            cos( dbLat * PI() /180.0 ) *

                            cos( (기준Lng - dbLng ) * PI() /180.0  )

                    )

                ) *  180.0 / PI()

            ) * 60*1.1515*1.609344*1000

        ) as distance

from dbTable


기준Lat = 추출한 Lat

기준Lng = 추출한 Lng

dbLat = DB상의 Lat

dbLng = DB상의 Lng

dbTable에 레코드들 위경도 넣고 select 하면 m 추출됨

반응형
Posted by Hippalus
,

반응형

FieldName

 aaa

 bbb

 ccc

 ddd

 eee

 fff

 ggg

MSSQL에서 이런 테이블을 aaa,bbb,ccc,ddd,eee,fff,ggg 처럼 하나의 필드로 나타내려 할 경우


SELECT 

STUFF((SELECT '^' + FieldName FROM TableName FOR XML PATH('')),1,1,'') 


STUFF와  FOR XML PATH 로간단히 나타낼 수 있다.

이후 Classic ASP 등에선 split 함수를 사용한다면 손쉽게 쿼리 후 배열 저장도 가능하겠다.

arrData = Split(FieldName, "^")

response.write ubound(arrData)

response.write arrData(1)


반응형
Posted by Hippalus
,

반응형

jQuery가 쉽긴 하지만 정확히 인지하고 사용하지 않으면 조금만 응용하려해도 막히는것도 사실이다.

일전에 잠시 다뤘던 배열 컨트롤에 대한 제어를 다시 떠올려보자

대부분 동일한 클래스명을 통해 접근 후 제어를 하게 된다.

이렇게 해당 컨트롤이 위치한 tr에 속한 컨트롤을 접근하듯이


            var row = $(this).closest('tr');

            var objTarget = row.find('.S_IDX');        

            

selectbox의 option을 한번에 날리는 empty() 함수야 

objTarget.empty(); <-- 이렇게 처리하면 잘 동작하지만

선택된 녀석의 text를 찾는등 추가 인자가 들어가는 상황의 함수라면 이야기가 달라진다.


이런식으로 접근해서 text를 얻어오는게 일반적이지만 

$(#selectBox option:selected").text();


배열 컨트롤이므로 위에서 언급한대로 object를 구한 상태에서 접근해야 하므로 objTarget를 통해 아래처럼 접근을 시도해보면 동작하지 않음을 확인할 수 있다. 

$(objTarget option:selected").text(); ???

(objTarget option:selected").text(); ???

objTarget.(option:selected").text(); ???


결론은 이렇게 하면 된다.

$('option:selected', objTarget).text();

반응형
Posted by Hippalus
,

반응형

개발을 하다보면 배열로 컨트롤들을 나열하고 이 컨트롤들을 제어할 필요가 생긴다.

jQuery를 통해 동일한 클래스명으로 처리하면 쉬운데

막상 하려면 조금 난해해진다.

다음과 같이 컨트롤들이 테이블에 나열했다 쳐보자


 선택

값 

<selectbox class="SELECT_BOX" name="SELECT_BOX"> 

<input type="text" class="TEXT_BOX" name="TEXT_BOX">

<selectbox class="SELECT_BOX" name="SELECT_BOX"> 

<input type="text" class="TEXT_BOX" name="TEXT_BOX"> 

 <selectbox class="SELECT_BOX" name="SELECT_BOX">

 <input type="text" class="TEXT_BOX" name="TEXT_BOX">

 <selectbox class="SELECT_BOX" name="SELECT_BOX">

 <input type="text" class="TEXT_BOX" name="TEXT_BOX">

 <selectbox class="SELECT_BOX" name="SELECT_BOX">

 <input type="text" class="TEXT_BOX" name="TEXT_BOX">


하고자 하는 작업은 셀렉트박스를 선택하면 선택된 값을 해당 라인에 위치한 텍스트박스에 넣어주는 작업이다.

이 경우 closest을 사용하면 되겠다.

closest을 사용해 해당 row를 갖고온 후 그 row속에서 접근하고자 하는 컨트롤의 클래스명으로 접근 후

선택된 값을 넣어주면 끝난다.


        $(".SELECT_BOX").change(function(e) {

            e.preventDefault();

        

            var row = $(this).closest('tr'); // 일단 현재 선택한 셀렉트박스가 속한 tr을 찾은 후

            var findControl = row.find('.TEXT_BOX'); // tr에 속한 클래스만 찾아내면 손쉽게 텍스트박스를 발견 할 수 있으며

            findControl.val($(this).val()); // 발견한 텍스트박스에 현재 선택한 셀렉트박스의 값을 넣어주면 끝

        });  


개쉽다.









반응형
Posted by Hippalus
,

반응형

구글이 참 대단한게 컨텐츠를 잘 써먹는다란 점이다.
남들은 기능을 선 제공 후 컨텐츠 활용을 기대하지만
구글의 전략은 180반대 전력이다.

다양한 컨텐츠를 무료로 제공 후 이를 인질삼아 유료장사를 하는 기업

google 검색과 youtube red가 그 대표적

오늘은 유투브 레드의 무료체험 해지 방법을 알아보겠다.

내가 잘못 본게 아니라면 유투브 레드를 무료체험 터치를 한 순간
당신은 유투부 무료 체험기간내 해지하지 않으면 이후 지속적인 과금이 발생한다란 안내를 받을것이다.
설마 정기 구독개념이 그런것인가 아니겠지 싶지만 그래도 안전하게 유투브 무료체험을 해지하는게 좋다.

참고로 니중에 만료일까지 꽉꽉 눌러 채워 쓰고 무료체험 해지하겠다란 유저가 있다면 그러지 말라
유트부 무료체험 시작일 해지를 해도 남은 기간 내내 광고없이 백그라운드 모드와 다운로드까지 모두 이용가능하다.

이제부터 유투브 레드를 해지하는 방법을 알아보겠다.



꽤나 귀찮다 ㅡㅡ

반응형
Posted by Hippalus
,

반응형

어쩌다 웹페이지를 이미지로 저장해달라는 요구가 있다.

그때 유용한 오픈소스들을 활용하면 어렵지 않게 구현이 가능하지만

망할  M$ 익스플로러 때문에 삽질을 해댔다.

참고로 IE10 이상부터 지원한다.

아래 소스는 맥 크롬에서도 테스트 해봤다.


js 첨부파일은 각각 여기서 다운로드도 가능함

https://html2canvas.hertzen.com/

https://github.com/hongru/canvas2image


일단 include시키고

<script src="/js/html2canvas.js"></script>

<script src="/js/canvas2image.js"></script>


버튼 누르면 이미지 저장


$("#SAVE").click(function(e) {

    e.preventDefault();

    

   var canvas ="";

   html2canvas($("#container"), {

       onrendered: function(canvas) {

            //document.getElementById("RESULT").src = canvas.toDataURL();   // 이미지를 보여주고 싶으면 이런식으로 치환해버림 됨

                

            if (canvas.msToBlob) { // 망할 익스플로러 예외처리.. 망해라 M$

                var blob = canvas.msToBlob();

                window.navigator.msSaveBlob(blob, "FILENAME.png");

            } else {

                Canvas2Image.saveAsPNG(canvas, document.body.clientWidth, document.body.clientHeight, "FILENAME");

            }

       }

   });

});



*활용팁

이미지 덤프기능인 이 소스를 적용하였는데 스크롤이 너무 길어서 다 나타나지 않는다면?

사이즈를 키워주고 덤프 뜨면 되겠지.. 이정도는 기본이니 사족급 팁

window.resizeTo(document.body.scrollWidth, document.body.scrollHeight);



* 추가팁

빌어먹을 익스플로러에선 테이블선이 제대로 나타나지 않는다.

이럴땐 오픈소스를 수정해야 한다.

html2canvas.js를 열어 

이 파랑 부분을 widthcontainer.cssInt('border' + side + 'Width'), 

이렇게 width: container.cssFloat('border' + side + 'Width'),

고쳐주면 제대로 보여진다.



반응형
Posted by Hippalus
,

반응형

1.selectbox의 이름으로 선택하기


<input type="text" name="TXT" id="TXT">


<select name="SELECTBOX" id="SELECTBOX">

<option value="1">1학기</option>

<option value="2">2학기</option>

</select>


<a href="#" class="CLASSNAME" SELECTBOX="2학기">선택</a>



$('.CLASSNAME').click(function(e) {

e.preventDefault();


// 링크의 속성값을 구한 후

        var str = $(this).attr("SELECTBOX");


// 구한 값과 일치하는 SELECTBOX를 선택

        $("select[id='SELECTBOX'] option:contains(" + str + ")").attr("selected", "selected");

});






2.SELECTBOX DISABLE, ENABLE

$("#SELECTBOX").attr("disabled", "disabled"); // DISABLE

$("#SELECTBOX").removeAttr("disabled"); // ENABLE





3.엔터시 포커스 주고 클릭하기

$('#TXT').keypress(function(e) {

if(e.which == 13) {

jQuery(this).blur();

                jQuery('.CLASSNAME').focus().click();

                return false;

}

});




4.선택된 selectbox의 text구하기

alert($("#SELECTBOX option:selected").text());




5.selectbox 변경시 이벤트 발생

$("#SELECTBOX").change(function() {

alert("event 발생");

});




6.checkbox 토글 전체선택, 전체해제

$("#ALLCHK").click(function() {

if($("#ALLCHK").prop("checked")) {

$(".CLASSCHECKBOX").prop("checked",true).change();

} else {

//체크해제

$(".CLASSCHECKBOX").prop("checked",false).change();

}

})




6.TD클릭시 이동

<td class="btnRead" IDX="<%=IDX%>">이동</td>


$(document).on("click", "td.btnRead", function() {

var IDX;

IDX = $(this).attr("IDX");

            

document.location.href = "LINK.asp?IDX=" + AIR;

});        






7.ASP배열로 radio, checkbox를 다수 생성 후 각각 radio button change event 발생시, checkbox change event 발생시 처리

    <%

            For i = 0 To UBound(arrData, 2)

    %>

            $(".A_ATTENDRADIO<%=i %>").on("change", function(e) {

                e.preventDefault();                

                $(".A_ATTENDCD").eq(<%=i %>).val($(this).val());

                if ($(this).val() == '') {                

                    

                } else {

                    $(".A_ATTEND_SCHOOLVISIT").eq(<%=i %>).val('');

                    $(".A_ATTEND_SCHOOLVISITCHECK<%=i %>").prop('checked', false);

                }


                var chkAttend;

                chkAttend = $('.A_ATTENDRADIO<%=i %>:checked').val();

                if (chkAttend == "0401" || chkAttend == "0402" || chkAttend == "0403") {

                    $(".A_ATTEND_FIELD<%=i %>").prop("checked",false).change();                    

                }



            });

             

            $(".A_ATTEND_SCHOOLVISITCHECK<%=i %>").change(function(e) {

                e.preventDefault();

                

                if ($(".A_ATTEND_SCHOOLVISITCHECK<%=i %>").is(":checked")){

                    $(".A_ATTEND_SCHOOLVISIT").eq(<%=i %>).val($(this).val());

                    $(".A_ATTENDCD").eq(<%=i %>).val($(this).val());

                } else {

                    $(".A_ATTEND_SCHOOLVISIT").eq(<%=i %>).val('');

                    $(".A_ATTENDCD").eq(<%=i %>).val('');

                }

                

                $(".A_ATTENDRADIO<%=i %>:radio[value='']").prop("checked", true);


            }); 

          

    <%

            Next

    %>



반응형
Posted by Hippalus
,

반응형

이게 얼마나 쉽냐면

이것저것 HTML5 SLIDE 메뉴랍시며 적용해보다 매번 헛걸음만 하다 이 오픈 소스 한방에 모든게 다 해결되었기 때문이다.

왼쪽에서 오른쪽 또는 그 반대방향 푸시메뉴도 되고 레이어처럼 메뉴가 위로 올라오기도 할 수 있고, 아래에서 위에서 아래로도 되는 매우 강력한 HTML5 SLIDE MENU라 할 수 있겠다.

 

원본 출처는 다음과 같다.

https://tympanus.net/codrops/2013/04/17/slide-and-push-menus/

 

데모는 여기서 확인이 가능하다.

https://tympanus.net/Blueprints/SlidePushMenus/

 

다만 한가지 마음에 안드는건 메뉴가 그냥 쌩 버튼이라 좀 손봐야 한다란 부분이다.

또 어려운 중생들을 위해 수정된 HTML을 공유하니 있는 힘껏 경배하라

음하하하하

<div id="showLeftPush" style="position:absolute; z-index:100; padding:24px 0 0 20px;"><img src="../images/slideMenu.png" /></div>

흔히 사용되는 三 아이콘이 slideMenu.png라 보면 되고 이 위치가 버튼의 좌측에 배치된다 보면 된다.

 

버튼을 100%로 만드는건 알아서 -_-

반응형
Posted by Hippalus
,

반응형

mssql Management Studio에 시스템개체를 숨길 수 있는 방법을 찾아보니 다행히 이를 끌 수 있는 옵션이 mssql에 존재하여 공유한다.

 

 

일단 도구의 옵션

 

환경의 시작을 클릭하면 개체 탐색기에서 시스템 개체 숨기기가 uncheck되어있는데

이를 체크해준다.

 

그러며ㄴ mssql server management studio를 다시 시작해야 하는데 해주면 된다.

 

속이 다 시원하다.

개편함

 

 

 

반응형
Posted by Hippalus
,

반응형

coc를 하다보면 장인기지쪽에 보석 생산이 있는데
이게 하루에 몇개씩 생산되다보니 지금 눌러 수확을 할까 고민되는 적이 있다.

클래시오브클랜이 명작이긴 하지만 이부분은 개선이 안되니 답답하다.
이럴 땐 장벽을 한번 누르고 다시 생산시설을 누르면 현재 몇개인지 알 수 있다.



요러면 이렇게 클래시오브클랜 보석 생산시설에서 몇개 생산중인지 확인이 가능



클래시오브클랜을 즐기는 방법은 굳이 해킹이나 버그를 쓰지 않고 꾸준히 할 때 참재미가 느껴지는 아이폰 게임이다.
클래시오브클랜 버그도 사라진 개꿀핵잼껨

크래시오브클랜 꿀팁 끝

반응형
Posted by Hippalus
,