반응형

급한분들을 위해 결론부터 말하자면
하이시즌 기준 토일요일 기준으로 설명하고자 한다.
평일이면 뭐 그리 상관 없더라

초등학생 저학년과 함께 캐리비안베이를 간다란 가정하에 케리비안배이 중앙의 썬베드(비치체어)를 예약할 것인가 아니면 실내를 예약할 것인가 고민을 많이 하고 이래저래 검색도 해보고 실제 자리 소진되는 추세까지 모두 종합한 최종 결론을 공유한다.
이정도면 4년제 인서울 대학 졸업논문감이다.

성수기 썬베드를 예약하려면 케리비안베이 예약 시스템은 최대 1주일 전 부터 예약이 오픈된다.
그러니까 만약 일요일에 방문한다면 그 전주 일요일 새벽 00시 00분에 미리 접속하여 새로고침을 하고
실내 썬베드를 선택한 후 4층 샌디풀을 선택하여 장바구니 담기를 먼저 해야 한다.
장바구니만 담아놔도 선점 효과가 30분간 주어진다.
상품은 한번에 하나만 담을 수 있으므로 괜히 두개 선택하다 좋은 자리 놓치는 일이 없어야 할 것이다.
명당은 코시국을 떠나 사람 없이 넓게 쓸 수 있는 자리가 명당 아니겠는가?
화면에 보이는 번호는 8번 31번 처럼 한쪽이 비워진 자리가 명당이라 생각한다.

그럼 흉당은 어디일까?
사람들 오고 다니는 출입문 바로 옆이 흉지이다.
70번 같은 자리
아래 사진을 보면 00시11분인 상황인데 누가 취소했는지 딱 2자리 예약이 가능함을 알 수 있다.

그리고 케리비안베이 홈페이지가 너무 잘 만들어져서 그런지 나는 토요일에 방문하는데 케리비안베이 내부에서 사용하는 코인을 구매하지 않으면 예약이 안되는 상황을 마주칠 수 있다.(확실친 않지만 최소한 나는 그러했다.)
따라서 코인을 미리 구매해놓자
코인은 1주일 이상 시점에도 구매 가능하다.

보통 케리비안베이에 가기 위해선 티켓을 구입하고 1주일 전 미리 썬베드를 예약해야 한다.
여기서부터 고민이 생긴다.
썬베드를 예약하는게 맞는것인지 아니면 방갈로 같은걸 예약하는게 맞는것인지

정답
구성원이 많고 노인이나 취약한 인원이 있다면 방갈로인 빌리지대여
젊고 어린아이가 있다면 그냥 썬베드

그럼 두번째 문제
썬베드는 어디를 예약하는게 꿀인가?
보통 잘 모르는 상품은 소진이 먼저 되는 상품이 정답이다.
따라서 실내 > 실외 순이라 보면 된다.
실내는 4층 샌디풀 > 6층 키디풀 > 5층 유아풀 순으로 먼저 품절이 나고
실외는 와일드리버 > 실외 샌디풀 순으로 품절이 난다.

아래 캐리비안베이 예약 홈페이지 사진을 보면 시간이 새벽 00:05인데 실내 4층 샌디풀은 진작에 완판되었음을 볼 수 있다.

그리고 30분이 지나선 실내 썬베드를 예약할 수 있는 공간은 5층 유아풀만 남아버린다.
이마저도 나중엔 모두 품절 된다.

이제 실외를 생각해보자
새벽 00시37분
와일드리버쪽은 이미 품절
실외 샌디풀은 가능하다.


이제부턴 좀 까자
대기업인데 앱 상태가 영 시원치 않다.
아이폰을 사용하고 있는데 상하단에 검정색 레터가 보이는가?
검정색 레터 없애주는게 그리 큰 공수가 들어가는일도 아니다.
한 10분 정도면 끝나고 정말 뭐 꼬여서 그거 테스트 때문이라면 1시간이면 넉넉한 일인데도 이걸 수정을 여태 안하고 있는것이다.

이거 하나면 문제가 아니다
기껏 다운받은 앱으로는 예약이 안된다.
홈페이지로 가서 카카오톡이든 뭐든 연동해서 로그인을 해야 한다.

문제는 여기서 그치지 않는다.
캐리비안 베이 예약하기를 눌러보면
입장하기, 체험하기 같은 이상한 카테고리 명칭이 매우 낯설다.
캐리비안베이가 어디 호주 기업에서 운영하는가?
입장하기는 입장권, 체험하기는 편의시설(썬베드, 방갈로) 이런식으로 표현해줘야 함에도 무슨 생각인지 이해가 아니 납득이 안된다.
메가스톰 같은 상품 때문에 힘들다?
카테고리를 나누면 된다. 아니면 입장권으로 메가스톰을 통합하던지

IT 전문 인력을 보유하고 있지 않아 발생한 일인것 같긴한데 외주를 줬는지... 외주 업체에선 그냥 의견 없이 주는대로 작업해버린건지 거기까진 모르겠지만 예약과 사용을 모바일웹과 모바일앱 동일하게 기능을 지원해줘야 함이 맞고 명칭도 일반인들에게 친숙한 일상적인 명칭으로 바뀌길 바란다.

명실공히 국내 최대 최고 워터파크인데 국민기업 대한민국 1등 기업 삼성 아닌가 삼성



끝으로 케리비안베이 인지 케리비안배이 인지 캐리비안베이인지 헷갈리고
썬베드도 썬배드인지 썬베드인지 헷갈리지만
케리비안베이 썬베드가 맞는 표현임

반응형
Posted by Hippalus
,

반응형

print.css
0.00MB

인터넷에 보면  javascript로 프린트를 하는데 동적인 TD의 높이 때문에 자칫 페이지가 넘어갈 때 화면이 짤리는 상황을 경험하게 된다.
이를 완벽하게 해결한 쉬운 소스를 공개한다.
보통 폼은 첫번째 장에는 헤더가 있고 다음장부터는 헤더가 없는 경우가 많다.
본 포스팅은 이러한 경우까지 대응하고 있다.
말은 거창하지만 사실 그냥 그만큼 자리 차지하고 있고 그 아랫부분부터는 동적으로 알아서 잘라주고 이어주고 알아서 잘 되니 신경 안써도 된다.

1. 페이지 상단에 본 포스팅의 print.css 첨부파일을 호출한다.

<link type="text/css" rel="stylesheet" href="/css/print.css" />


2. 스타일에 아래 코드를 추가한다.

<style>
@page { size: A4 }
* {
-webkit-print-color-adjust: exact !important; /*Chrome, Safari */
color-adjust: exact !important; /*Firefox*/
}
</style>

3. body에 print.css의 class인 A4사이즈를 지정한다.
<body class="A4">

4. 첫 페이지의 헤더를 위치시킨다. 내용은 각자 알아서 마음대로 교체하면 됨
id는 SECTIONPAGE1으로 하였다.
실질적인 출력 영역은 DIVTOPAREA class로 지정하였고 내용을 담당하는 DIV의 class는 DIVDATAAREA
끝으로 다음 tr의 높이가 페이지를 넘어서서 짤리게 될 경우 페이지 하단에 공백을 계산하여 넣어줘야 하므로 공백 DIV인 DIVBUFFERAREA가 추가되었다.
제목헤더인 DIVTOPAREA는 1페이지만 출력시키므로 SECTIONPAGE1에만 추가되어 있다.
참고로 여기서 거론한 class를 제외한 tdPrintWhite 클래스 등은 그냥 내 소스의 공통 css에서 사용되는 클래스이므로 무시하면 됨
<section class="sheet padding-10mm" id="SECTIONPAGE1">
<div class="DIVTOPAREA">
<table class="" width="100%" border="0" cellspacing="0" cellpadding="10">
<tr>
    <td class="tdPrintWhite" width="100%;" align="center"><h1>제목헤더영역</h1>
        <a href="#" class="btnblue" id="BTNPRINT">인쇄</a>
    </td>
</tr>
</table>
</div>
<br />
<div class="DIVDATAAREA"></div>
<div class="DIVBUFFERAREA"></div>
</section>

5.데이터를 출력시킬 SECTIONPAGE영역을 여유있게 미리 만들어 둔다.
동적으로 그때그때 생성해도 되지만 이게 편하다.
난 총 4페이지까지면 충분하므로 2부터 4까지 for문을 돌려 생성하였다.
<%
for iSEL = 2 to 4
%>

<section class="sheet padding-10mm" id="SECTIONPAGE<%=iSEL %>">
<div class="DIVDATAAREA"></div>
<div class="DIVBUFFERAREA"></div>
</section>

<%
next
%>

여기까지 진행했으면 일단 1차 준비는 끝났다.
이제 실질적으로 큰 영역에 모든 데이터들을 뿌려주고 페이지가 모두 로딩이 된 후 이 영역의 데이터들을 계산하여 앞서 만들어둔 SECTIONPAGE section의 DIVDATAAREA에 붙여넣기를 진행할 것이다.

6.보면 div에 id가 부여되었고 class도 편의상 id와 동일하게 부여하였다.
특이한 점은 rowspan이 2이다.
즉 아래와 같은 표형태이다.
굳이 왜 rowspan을 예로 들었냐면 그 이유는 잠시 후 아래에서 설명할 것이다.
이것 때문에 약간 고생을 한 경험이 있기 때문이다.

순번 성명 항목 현황
근거 일자 기종
<div id="DIVITEMBODY" class="DIVITEMBODY">
<table class="" width="100%" border="1" cellspacing="0" cellpadding="5">
<tr>
<td class="tdPrintGray" width="50px;" rowspan="2">순번</td>
<td class="tdPrintGray" width="*" rowspan="2">성명</td>
<td class="tdPrintGray" width="200px;" rowspan="2">항목</td>
<td class="tdPrintGray" width="400px;" colspan="3">현황</td>
</tr>
<tr>
<td class="tdPrintGray" width="200px;">근거</td>
<td class="tdPrintGray" width="100px;">일자</td>
<td class="tdPrintGray" width="100px;">기종</td>
</tr>
......for문을 통해 모든 데이터들을 각자 알아서 출력......
</table>
</div>

7.여기까지 HTML소스 끝이다.
이제 jQuery, javascript로 DIVITEMBODY의 데이터들을 계산해서 복사 붙여넣기를 하면 된다.
소스는 그냥 복사해서 붙여넣기 해보면 잘 동작할 것이다.
응용하려면 로직이 비교적 간단하니 바보 아니면 이해 가능한 수준이기도 하고 ;p
위에서 설명하기로 했던 내용으로 중요한 부분인 rowspan이 없는 헤더인 경우 "//헤더TR이 2줄 이므로 if (index == 0) 대신 if (index<= 1)로 사용"하라고 주석까지 달아 두었다.
SECTION을 4개가 아닌 10개를 만들었다면 for (nSectionPage = 2; nSectionPage <= 4; nSectionPage++)의 4를 10로 바꾸면 된다.
이 정도면 정말 이유식을 떠먹여줬다 본다.
나머진 복사 붙여넣기 하면 끝

<script>
    $(document).ready(function() {
        var bAppendEnd = false;
        var nLastTrIndex = 0;
        var nSectionPage = 1;

        var objSECTIONPAGE;
        var objTopArea;
        var objDataArea;
        var objBufferArea;

        objSECTIONPAGE = $("#SECTIONPAGE" + nSectionPage);

        objTopArea = objSECTIONPAGE.find($(".DIVTOPAREA"));
        objDataArea = objSECTIONPAGE.find(".DIVDATAAREA");
        objBufferArea = objSECTIONPAGE.find(".DIVBUFFERAREA");

        objDataArea.append($("#DIVITEMBODY").clone().attr("id", "DIVITEMBODY" + nSectionPage));

        var fSafeArea = 1118.740157 - (objTopArea.height() + 37.79527559);


        objSECTIONPAGE.find($(".DIVITEMBODY tr")).each(function(index, tr) {
            if (fSafeArea - $(this).height() > 0 && bAppendEnd == false) {
                fSafeArea = fSafeArea - $(this).height();
                nLastTrIndex = index;

                if (index == 0) {
                    if (fSafeArea - $(this).closest('tr').next('tr').height() < 0) {

                        bAppendEnd = true;

                        $(this).hide();
                        fSafeArea = fSafeArea + $(this).height();

                        console.log(objDataArea.html());
                        objDataArea.hide();
                    }
                }
            } else {
                bAppendEnd = true;
                $(this).hide();
            }
        });

        objBufferArea.height(fSafeArea);


        for (nSectionPage = 2; nSectionPage <= 4; nSectionPage++) {
            objSECTIONPAGE = $("#SECTIONPAGE" + nSectionPage);

            //objTopArea = objSECTIONPAGE.find($(".DIVTOPAREA"))
            objDataArea = objSECTIONPAGE.find(".DIVDATAAREA");
            objBufferArea = objSECTIONPAGE.find(".DIVBUFFERAREA");

            //objTopArea.append($("#DIVTOP").clone().attr("id", "DIVTOPAREA" + nSectionPage));
            objDataArea.append($("#DIVITEMBODY").clone().attr("id", "DIVITEMBODY" + nSectionPage));

            fSafeArea = 1118.740157 - 37.79527559;

            if (nLastTrIndex < objSECTIONPAGE.find($(".DIVITEMBODY tr")).length - 1) {
                bAppendEnd = false;

                objSECTIONPAGE.find($(".DIVITEMBODY tr")).each(function(index, tr) {
                    if (index <= 1) {   //헤더TR이 2줄 이므로 if (index == 0) 대신 if (index<= 1)로 사용
                        $(this).show();
                        fSafeArea = fSafeArea - $(this).height();
                    } else {
                        if (nLastTrIndex >= index) {
                            $(this).hide();
                        } else {
                            if (fSafeArea - $(this).height() > 0 && bAppendEnd == false) {
                                $(this).show();
                                fSafeArea = fSafeArea - $(this).height();

                                nLastTrIndex = index;

                            } else {
                                bAppendEnd = true;
                                $(this).hide();
                            }
                        }
                    }
                });

                objBufferArea.height(fSafeArea);
            } else {
                objSECTIONPAGE.hide();
            }

        }

        $("#DIVITEMBODY").hide();



        $("#BTNPRINT").click(function(e) {
            e.preventDefault();

            $("#BTNPRINT").hide();
            window.print();
            $("#BTNPRINT").show();
        });
    });  
</script>

끝으로 블로그 운영하는 사람들 중 복사하기 막아둔 인간들은 X잡고 반성해라
늬들도 어디서 줍줍한 알량한 잡지식인데 뭐 대단한 지식인냥 복사방지까지 해두고 난리부르스를 추는지 이해가 안간다.
만약 복사방지로 애써 찾은 소스 복사 할 수 없는 저질 블로그를 만나걸랑 크롬스토어에서 SuperCopy 슈퍼 카피를 추가하면 바로 복사되니 반드시 설치하여 복사에 성공하길 기원한다.
https://chrome.google.com/webstore/detail/supercopy-enable-copy/onepmapfbjohnegdmfhndpefjkppbjkm

 

SuperCopy 슈퍼 카피

오른쪽 키 허용, 선택 허용, 복사 허용, 붙 여 넣 기 허용.

chrome.google.com

이상 전달 끝

반응형
Posted by Hippalus
,

반응형

이사온지 1주년 기념으로 아랫집에서 연락이 왔다.
우리집에서 누수가 생겨 아랫집까지 물이 흘러 도배까지 망가져버렸다 한다.
하......... 지겨운 구축 살이 

노원구도 마찬가지지만 강북구엔 구축 아파트들 천지다.

복도식 아파트 계량기 동파 지긋지긋해서 무리해가 복도식으로 이사왔더니 집을 어떻게 지었길래 화장실누수, 이번엔 또 어디가 누수인가
듣자하니 난방배관 누수면 바닥 다 뜯어내고 몇백 우습다던데 회사에 반차내고 서둘러 집으로 왔다.
검색해보니 양군누수탐지란 곳이 제법 많이 검색 되어 진다.

모든 업체들에 비용을 물어보니 누수탐지 비용은 다들 50~60을 이야기 한다.
강북구 누수탐지 업체인 양군누수탐지도 마찬가지였다.
전화드려보니 다른 주택 누수 작업 중이신데 때마침 퇴근시간과 시간이 맞는다 하시어 집앞 말고 양군누수탐지와 약속을 잡았다.
업체는 미아역쪽인가에 있었다.
싸다고 저 먼 곳 섭외하는것보단 강북구 집 근처 업체를 섭외해야 나중에 탈이 생겨도 다시 봐주실 수 있기에 양군누수탐지 선택

약속시간에 맞춰 오셨고 같이 아랫집에 방문해보았다.
이게 아랫집 방 사진인데 이틀전부터 갑자기 이렇게 되었다 한다.
내가 아랫집이라면 정말 속상할것 같다.

아랫집 확인은 끝냈고 우리집으로 다시 올라 오셔선 일단 화장실로 향하시더라
화장실 밸브 부터 잠그시고 곧바로 보일러실로 가심

쌓아둔 짐들을 옮기시더니 대뜸 "아... 여기 물이 왜이렇게 많아요"

노랑게 온수쪽인데 저쪽에서 물이 새고 있다 하신다.
저 배관에서 물이 새어 바닥을 적시고 아랫집 방까지 누수가 된 것

걸래로 닦아내고, 휴지로 닦아내도 물이 축축하다.
보온재를 걷어낸 후 이래저래 꼼꼼하게 만져보시고 

온수를 시험삼아 틀어보니 이윽고 저렇게 물이 찍하고 쏟아져 나온다.
통채로 관을 갈고 난 후 복도 계량기로 가신 후 꼼꼼하게 총 3회에 걸쳐서 누수가 발생하는 부분이 또 있는지 체크하셨다.

왜 계량기를 확인해야 하는지 등 설명도 차분하게 잘 알아듣게 조목조목 설명해주신다.

이게 결과 상태인데 이렇게 1주일을 두고 봐야 한다.
바닥에 고인 물기를 흡수하기 위해 가끔씩 휴지로 막아둬서 조금이라도 빨리 물이 마르게끔 관리해주면 좋다.

혹 또 누수가 생길경우 연락 드리면 오신다 하셨고 아랫집 도배는 최소 3~4주 이후에 물기가 모두 마른후에 하여야 한다는 점까지 알려주셨다.

보험처리 한다고 말씀드리니 영수증, 견적서, 진단서까지 일사천리로 착착 알아서 작성해주셨다.

이번엔 다행히 일상생활책임보험이 있어  큰 부담 없이 처리 될 것 같다.
지난번 화장실 누수땐 일상배상책임보험이 있는줄 조차 몰라 쌩돈을 날렸지만 그 이후엔 나도 들었다.
다만 이번에 알게된 사실인데 일상배상책임보험은 가족 구성원 모두 가입되어 있어도 보험사끼리 1/n로 배상해주므로 이 보험사에서 전액 저 보험사에서 전액 청구 받는 구조가 아니다.
사실상 한명만 들면 그만인 보험이라 생각해도 무관하다.

기회가 된다면 보험 청구 과정과 아랫집 도배까지 다 끝나면 후기를 올릴까 생각해본다.
참고로 아랫집 도배비는 최소 20만 원에서 최대 30만 원 사이라는 가견적을 받은 상태이다.

이상 내돈내산이 아닌 내돈내고 고친 후기임.

 

반응형
Posted by Hippalus
,

반응형

선재도 하면 선재도 갯벌체험
그리고 뻘다방이 가장 유명함

별다방이 세계적으로 유명하다면 뻘다방은 서해에서 가장 유명한 카페임

보이는가?
한적한 낙후된 해변가에 펄럭이는 위풍당당 쿠바깃발

보이는가?
정체모를 인공 구조물에 의자하나 덩그러니 놔도 알아서 포토존 핫플이 되는 이 광경

자칫 인스타에 올리기 위해 줄가지 서야 한다.

뻘다방의 가장 인기 있는 자리는 야자나무스러운 벤치
경쟁이 치열하다.

뻘다방 야자 의자 다음으론 보이는 곳처럼 음... 이걸 뭐라 불러야 하나.. 여하튼 야외 의자 되시겠다.
바 형태와 테이블들이 많다.

바에서 한적하게 뻘을 바라보며 한 잔 하는 컵흘

그리고 그 앞에 지 맘대로 낮잠자다 차가 지나가면 부시시 일어나 뛰쳐 나가는 이 녀석
알고보니 꽤나 유명했다.
처음 봤지만 마이웨이 독 이라 이름을 붙이겠다.

실내는 대충 이러하다.
자리가 없는 일은 결단코 없을것이다.
실내외 자리가 어마어마하게 많다.
하지만 앞서 말했듯이 가장 인기 좋은 자리인 야자 자리는 경쟁이 치열하다.
대략 20여 테이블 정도 되는듯 싶어보였다.
내부 자리는 뭐 안세어 봤지만 30테이블은 넘지 싶다.

뭔지 모르겠지만 대장간이란곳도 있다.

코코넛 쥬스도 팔고 빵도 맛있고 망고쥬스도 찐한게 맛있다.
가격은 좀 비싸지만 그렇다고 한 잔에 10000원 이런 가출한 가격은 아니다.
7천원인가 8천원이던데 그정도 값어치는 한다.

이런곳 배경으로 사진 찍을 수 있다.

그네 테이블도 있고

순서는 안 맞지만 갑자기 주차장 정보 안내한다.
2시간 무료고 초과 10분당 1천원이니 눈치챘을까? 카페 사람 많으면 회전 안되니 2시간 이내만 머무르고 가란 소리다.

여긴 노키즈 존인데 이런건 왜 만들었는지 모르겠다.
누드 비치도 아니고 굳이 사람도 이용 안하더만 노키즈는 뭐하러..?

이 뻘다방 주차장에도 체 게바라다.
쿠바에 진심이다.

해변에 돗자리 까는 존도 있고 이런 저런 소품들 많이 갖다 놨다.
하지만 갯벌 썩는 냄새가 좀 난다.
아까 말했지만 가장 인기있는 야자좌석
거기까지 갯벌 썩는 냄새가 좀 난다.
그 뒷 야외 좌석까진 안난다.


자 여기까지
오이도 갯벌체험 하고 나서 30분 차 끌고 가서 경험해본 선재도 뻘다방 후기
한번은 가보겠지만 두번은 가진 않을듯 싶다.
좋은 경험 해보고자 겸사겸사 가볼만 하다.

반응형
Posted by Hippalus
,