2012년 10월 28일 일요일

투 폴딩 원목 테이블의 문제점1

상판 목재와 브라켓 고정 방법 정리.

1. 상판을 뚫고 나오지 않는 범위에서 가장 긴 피스를 사용한다.(상판의 두깨가 얇으면 의미 없음)

2. 기리 작업을 하고 앙카를 박은 후 피스로 연결한다.

3. 브라켓 양쪽은 피스로 고정하고 가운데 구멍은 볼트를 넣어 홀 작업된 상판을 통과해 너트를 체결한다.

번호가 높아질 수록 목재에 상처는 커지나 견고함은 증가합니다.
그리고 1,2 작업에서 목공용 본드나 순간 접착제를 적절히 이용하는 것도 팁이라면 팁!!

위 모든 방법은 고수님들의 조언을 토대로 정리한겁니다.

==========================================================================



상판 목재를 스퍼러스 원목을 사용했는데 연재라서 피스부분이 쏙 빠져버림...

오른쪽 아래.. 
브라켓이 있어야하는데 없죠? ㅜㅜ

브라켓이 빠지고 남은 피스 구멍만 휑하니.. 내마음도 휑~~~ ㅜㅜ

빠진 브라켓... 
피스만보면 그렇게 작은 길이는 아닌데 브라켓에 걸리는 부분때문에 상판에 연결되는부분은 상당히 작음. 


쓴지 몇시간이나 됐다고...
ㅜㅜ

좋은 방법 좀 알려주세요~~~


아 마음이 휑~~~~

투 폴딩 테이블/folding table with two

사용 재료
상판 목재 600mm*184mm*19mm 스프러스 원목 * 3
600mm*138mm*19mm 스프러스 원목 *1
실사용 600mm*184mm*19mm 스프러스 원목 *2
7,200
브라켓 하부/ 30파이 x4개(PN0401078) / 1,500원(+900원) / 3개
실사용 1 set(4EA)
2,400
경첩 78705)CO유럽형T경첩(소)-블랙 / 1,000원(+100원) / 6개
실사용 3EA
3,300
합계
12,900


(사진 클릭하면 크게 보실수 있습니다.)

Main 재료인 상판 도착!
모 사이트에서 12,200원에 구매...


스프러스 향기가 참 좋다... 너비 184mm 세개와 38mm 하나... 하지만 실 사용은 내용물 중에서 184mm 두개만 사용함.  펼쳐 놓고 한컷.



하지만 마눌님의 요청으로 184mm 두개만 사용하기로 ...
전체크기는 아래와 같이 될게다...


브라켓의 위치를 잡아보고...


접었을때 브라켓 때문에 간격이 생기지 않도록 브라켓을 넣어버리기 위한 홀작업...
무지 힘들기도 하지만 수평을 생각하지 못한 나의 판단 미스로 두번 작업하게 되는 계기 ㅜㅜ


만들면서 보니 홀을 파서 브라켓을 넣다간 수평작업이 힘들듯하여 접었을때 브라켓이 들어가게 홀 구멍 용도 변경.
그럴려니 브라켓이 동일한 장소에 있기에 돌려놓음...
유럽식 경첩까지 달았는데 위치가 애매하다..
이때까지만 해도 무대뽀로 밀고 나갔지만....


홀 작업은 잘 못했지만 피스 작업은 잘 하려고 피스 홀 미리 작업...
2중 작업이라 시간은 많이 걸리지만 나중에 직접 피스를 박을 때 보니 유용한 작업.


자 경첩에 브라켓 고정후 접은 모습 3면...
이것만 보면 완벽한데 말야!!! ㅋㅋㅋㅋ




자 이제 다리 채결해야징~
다리는 이전에 사둔 알루미늄 파이프...
재사용이닷!
하지만 동시 테이블 두개 사용은 안된다는거...
다리를 더 사야지 ㅋ


쿨럭.. 위치가 ㅎㄷㄷ ㅜㅜ
안습인걸...


긴다리이긴 하지만 역시 불안전 ㅎㄷㄷ
결국 마눌님의 한소리와 재 오더로...


홀 재작업...
브라켓은 4개 인데 홀이 6개라니 ㅜㅜ
그래도 연습 게임이라 생각하고..
그리고 아래는 안보잖아!!!


짜잔~ 짧은 다리로 위치 제대로 잡아서~
안정적이다 ㅋㅋㅋ



실 사용기...
노트북에 마우스 패스
아들이 모델이 되어~~
아들.. 너 벌써 겜이냐? ㅡㅡ;;





이제 바니쉬만 칠하면 되는데...
언제 하지? @_@

참고 : 스퍼러스는 연질 목재다. 그래서 상판과 브라켓 연결 피스는 길게 하거나 아예 볼트를 통과시켜서 너트로 채결하는게 좋을듯...
그리고 상판을 펼쳤을 때 접히지 않게 고정할 수 있는 뭔가가 있어야할듯....





2012년 10월 22일 월요일

허접하지만 내겐 완소 롤 테이블 자작기

평소 승용차로 캠핑다니면서 가장 큰 문제는 저장공간의 부족이다.
해서 여러 짐들을 어떻게 하면 줄일 수 있을까 고민을 많이 하는 편이고 방법이 보이면 실행을 하곤 한다. 하지만 미니멀로가는 길은 고비용이라는 문제를 만나게 된다.
그래서 관심을 두게 된게 캠핑 diy이다.
first camping에 가입하고 다른 글 보다는 항상 캠핑 diy 메뉴만 줄기차게 보곤했다.
몇몇은 내게 벅차보이기도하고 몇몇은 관심 밖이기도 했지만
몇몇은 내눈에 쏙 들어오기도...
데이지 체인과 롤테이블이 그것이다.
데이지 체인은 이미 만들었고 오늘은 롤테이블 자작기를 소개 하려 한다.
제목대로 허접하지만 내겐 내가 만든 하나밖에 없는 롤테이블이기에 완전 소중한 아이템이다.

우선 고려사항을 안내하자면...
1. 수납시 최소한의 부피를 가져야한다.
2. 비용이 저렴해야한다.
3. 견고해야한다.
4. 설치/분리 시 빨라야한다.

최소부피
롤테이블은 정말 부피가 적다.
그래서 도전하고 싶었던 아이템이기도 하다.
하지만 자작기를 보면 테이블 상판을 접을때 롤케익처럼 말그대로 둘둘 마는 경우가 많다.
제작시 편하기 때문에 그런 것일 수도 있지만 최소부피의 목적에 벗어난다.
그래서 지그재그(?)로 접어 각기둥처럼 보관 할 수 있게 하는게 관건이다.

비용
기성품들은 목재 롤테이블의 경우 십만원 넘기는 쉽다.
쩐의 압박이... 
diy하기위한 큰 목적 중 하나가 비용절감 최대한 줄여보자.
해서 검색도 많이 해서 찾은 구성품이 
삼나무집성목 12t 100mm*600mm*8ea 10,000
만들고 보니 너무 얇다는 느낌이다. 그리고 싼 집성목이라서 그런지 옹이라든지 접합이 조금 부실하다는 느낌. 처음이라 연습삼아 한다 생각하고 패스.. 다음엔 좀 더 투자하기로 ...
알루미늄 다리 SET 알미늄파이프/ 30×180(1개) - 상판의 두께:아래 알루미늄파이프 연장 / 400원(+1,600원) / 4개
알미늄파이프/ 30×300(1개) - 상판의 두께:31mm / 400원(+3,100원) / 4개
다리부속 하부/ 조절발-C 50×40(1개) - 상판의 두께:위 알루미늄 파이프 / 400원(+100원) / 4개
목재용 상부고정브라켓/ 목재용 브라켓D 25×10(1개) - 상판의 두께:12mm / 400원(+400원) / 4개
목재용 상부고정브라켓/ 목재용 브라켓F 48×7(1개) - 상판의 두께:12mm / 400원(+500원) / 4개
배송비포함
30,800
이 구성품이 가장 고가다.  하지만 견고함 + 설치(분해) 시 시간단축 + 길이의 가변 + 다른 아이템에 재사용 등을 고려한다면 전혀 고가이지 않다.
집사람 첫작품을 보고 허접하지만 유용하다고 감탄을 했고 미니 테이블 주문을 직접해주었다. 그것도 더 좋은 목재를 사용하라는 투자 허가와 함께....(사실 diy에 대해 반감이 있다. 오히려 돈 더 든다고 ㅎㅎㅎ) 이는 이 다리의 장점이 한몫했다.
그외 스테인
바니쉬 500ml
천공홀커터
모서리용 대패
찍찍이
사이즈-색상/ 면웨빙끈(38mm) 1마 / 700원(+300원) / 2개
3,000
9,000
5,300
7,400
7,100
2,000
total : 33,800
이 재료들은 면 웨빙끈만 제외하면 재 사용 가능한 것들.< br /> 이번이야 없든 공구를 구입하는거라서 비용이 추가 되지만 다음 아이템 제작 시에는 확줄겠지?? ㅋㅋㅋ

총비용이 74,800원...
ㅎㄷㄷ 이.... 이.. 이렇게 많이 들다니...
그외 비용은 다음에 안들거니 참자...(나 무지 짠돌이....^^)


견고성
이 점때문에 다리를 고가의 알루미늄 다리 세트로 한게다.
나무에 총알피스(?)를 많이 쓰던데... 난 수직으로 드릴링하기도 어렵고, 그렇게 하더라도 사용중 목재의 한계(하중, 조립/분해, 이동 등등)는 분명 드러날것이기에...
만들고 보니 상판 지지판을 조금더 두꺼운 판자로 할걸 이란 생각은 했다.
이부분이 마음에 걸림.

조립/분해 시 최소 시간
이부분은 어떨지 모르겠다.
항상 캠핑하고 철수하는 날, 우리 가족이 느긋한 면이 없지않아 철수하는 시간이 상당히 걸린다. 한 3시간????(많이 걸려... 걸려도 너~무 많이 걸려...) 어떡하든 시간을 줄여야하는데...
그래서 우선 상판은 면웨빙으로 펀칭해두고 다리 분리 후 빠르게 접게 해두었지만....
문제는 다리의 분리이다....
무두나사로 고정을 했기때문에 빙빙 돌려서 빼야하는데 이시간이란....
솔직해 처음 조립할때 꼭 스나이퍼(저격수)가 라이플 조립하는 착각에 좋아라했지만 직접 조립 분해할때 그 짓을 안습이다. ㅜㅜ
다음 제작 때 다시 고민해야할 부분이지만 쉬이 줄일수는 없을듯....






    삼나무 집성목 스테인 및 바니쉬 칠하기...
    스테인 두번 바니쉬 두번 발라 줬어요. 근데 처음이라 아마추어의 향기가 ㅋㅋㅋ
    스테인은 초코색으로 예전에 사뒀던걸 발랐는데 삼나무 제 색깔은 온데간데 없음 ㅎ.
    바니쉬 바를때는 애기 아파 입원해있고 본인도 몸살로 개고생 때라 우여 곡절끝에 겨우 진행함...






    면 웨빙으로 상판들을 엮어주고...
    웨빙 짜투리를 자를까 하다가 수납시 상판을 만 후 묶을 용도로 둠.
    끝에 찍찍이 붙여서 수납시 편하게 하기로함





    상판과 상판 지지대를 고정할 브라켓 위치 선정.
    귀차니즘으로 치수를 다른 브라켓으로...(결국 다른 방향으로 연결했을 때 뒤틀림이 ㅜㅜ,
    귀찮더라도 꼭 정확한 치수 마킹해서 위치 잡으세요. ㅎㅎ)
    홀쏘를 대충해서 했더니 나무결이 떨어져 나갔음.





    이제 다리 연결...
    알루미늄 파이프를 연결(18cm와 30cm)할때 꼭 스나이퍼가 자신의 라이플 조립하는 말도 안되는 착각에 사로잡혀... ㅋㅋㅋㅋㅋ
    암튼 무두 볼트로 연결할때 기분은 참 좋았음.
    알루미늄 파이프 두개 연결 + 조절발 + 브라켓 연결 후 상부와 연결!!!



    상부와 다리 연결을 견고하게 하기 위해
    브라켓에 바로 알루미늄 파이브를 연결한게 아니라,
    상판에 25mm 브라켓을 고정하고 상판 지지대에 구멍을 뚫어 브라켓을 지지대 속에 포함 시켜 상판과 지지대의 빈공간을 없앰.
    또한 상판 브라켓을 30mm알루미늄 파이프 연결을 바로한게 아니라 48mm 브라켓으로 지지대와 접촉면적을 넓힘으로 견고성부여함.
    (이해가 되시려나...)




    체결 완료.
    완성한 모습.





    수납을 위해 상판 접은 사진과 실사용 사진은 다음에...

    수납을 위한 접은 사진이오~~~

    1단계
     2단계
     3단계
     ...
     어떤가요? 이렇게 사각으로 빈공간없이 깔끔하게 접히죠?
    수납만 깔끔한!! ㅋㅋㅋ






















































    jar sign


    jar로 인증하는 방법입니다.

    쭈욱 따라하시면 됩니다.
    설명 필요하시면 댓글 남겨주세요~


    1.     Keysotre 생성
    Keystore 암호 : papp00
    pappercom 키 암호 : papp00

    >keytool -genkey -keystore pappercom.keystore -alias pappercom
    keystore 암호를 입력하십시오:
    새 암호를 다시 입력하십시오:
    이름과 성을 입력하십시오.
      [Unknown]:  COM
    조직 단위 이름을 입력하십시오.
      [Unknown]:  pappercom
    조직 이름을 입력하십시오.
      [Unknown]:  pappercom
    구/군/시 이름을 입력하십시오?
      [Unknown]:  GANGNAM
    시/도 이름을 입력하십시오.
      [Unknown]:  SEOUL
    이 조직의 두 자리 국가 코드를 입력하십시오.
      [Unknown]:  KR
    CN=COM, OU=pappercom, O=pappercom, L=GANGNAM, ST=SEOUL, C=KR이(가) 맞습니까?
      [아니오]:  Y


    2.     Selfcert

    1.에서 만든 암호 입력 : papp00
    3.     Keystore 확인

    암호 : papp00
    4.     Jarsigner를 이용한 인증

    암호 : papp00
    마지막 경고 문구 6개월 문구 주목.
    정식 인증을 위해서는 인증서를 구매해서 인증해야 함.





    C:\Users\aaa\CoP\81. gasori\12월 v2.0>keytool -genkey -keystore pappercom.keystore -alias pappercom
    keystore 암호를 입력하십시오:
    새 암호를 다시 입력하십시오:
    이름과 성을 입력하십시오.
      [Unknown]:  COM
    조직 단위 이름을 입력하십시오.
      [Unknown]:  pappercom
    조직 이름을 입력하십시오.
      [Unknown]:  pappercom
    구/군/시 이름을 입력하십시오?
      [Unknown]:  GANGNAM
    시/도 이름을 입력하십시오.
      [Unknown]:  SEOUL
    이 조직의 두 자리 국가 코드를 입력하십시오.
      [Unknown]:  KR
    CN=COM, OU=pappercom, O=pappercom, L=GANGNAM, ST=SEOUL, C=KR이(가) 맞습니까?
      [아니오]:  Y

    <pappercom>에 대한 키 암호를 입력하십시오.
            (keystore 암호와 같은 경우 Enter를 누르십시오):

    C:\Users\aaa\CoP\81. gasori\12월 v2.0>keytool -selfcert -alias pappercom -k
    eystore pappercom.keystore
    keystore 암호를 입력하십시오:

    C:\Users\aaa\CoP\81. gasori\12월 v2.0>keytool -list -keystore pappercom.key
    store
    keystore 암호를 입력하십시오:

    Keystore 유형: JKS
    Keystore 공급자: SUN

    Keystore에는 1 항목이 포함되어 있습니다.

    pappercom, 2011. 12. 28, PrivateKeyEntry,
    인증서 지문(MD5): 7E:4B:4F:16:D2:DC:E4:F4:F1:47:44:B3:0C:30:B6:E1

    C:\Users\aaa\CoP\81. gasori\12월 v2.0>jarsigner -keystore pappercom.keystore gasori.unsigned.jar pappercom
    Enter Passphrase for keystore:

    Warning:
    The signer certificate will expire within six months.

    C:\Users\aaa\CoP\81. gasori\12월 v2.0>DIR
     C 드라이브의 볼륨에는 이름이 없습니다.
     볼륨 일련 번호: 98B0-E2F1

     C:\Users\aaa\CoP\81. gasori\12월 v2.0 디렉터리

    2011-12-28  오후 02:28    <DIR>          .
    2011-12-28  오후 02:28    <DIR>          ..
    2011-12-27  오후 05:04        30,684,225 gasori-client.zip
    2011-12-27  오후 05:00        27,979,085 gasori-server.zip
    2011-12-28  오후 02:26    <DIR>          gasori.unsigned
    2011-12-27  오후 05:06        33,473,137 gasori.unsigned.jar
    2011-12-28  오후 02:32    <DIR>          인증
                   3개 파일          92,136,447 바이트
                   4개 디렉터리  495,454,785,536 바이트 남음

    C:\Users\aaa\CoP\81. gasori\12월 v2.0>jarsigner -verify gasori.sunsigned.jar
    jarsigner: java.io.FileNotFoundException: gasori.sunsigned.jar (지정된 파일을 찾을 수 없습니다)

    C:\Users\aaa\CoP\81. gasori\12월 v2.0>jarsigner -verify gasori.unsigned.jar
    jar is unsigned. (signatures missing or not parsable)

    C:\Users\aaa\CoP\81. gasori\12월 v2.0>cd 인증

    C:\Users\aaa\CoP\81. gasori\12월 v2.0\인증>dir
     C 드라이브의 볼륨에는 이름이 없습니다.
     볼륨 일련 번호: 98B0-E2F1

     C:\Users\aaa\CoP\81. gasori\12월 v2.0\인증 디렉터리

    2011-12-28  오후 02:32    <DIR>          .
    2011-12-28  오후 02:32    <DIR>          ..
    2011-12-28  오후 02:14        35,041,223 gasori.jar
    2011-12-28  오후 02:22    <DIR>          gasori.unsigned
    2011-12-28  오후 02:30            38,081 RapidantSign.docx
    2011-12-28  오후 02:03             1,255 pappercom.keystore
                   3개 파일          35,080,559 바이트
                   3개 디렉터리  495,418,814,464 바이트 남음

    C:\Users\aaa\CoP\81. gasori\12월 v2.0\인증>jarsigner -verify gasori.jar
    jar verified.

    Warning:
    This jar contains entries whose signer certificate will expire within six months.

    Re-run with the -verbose and -certs options for more details.

    JAVA : 현재 날짜 및 계산

    java로 날짜 구하기 심플 예제

    SimpleDateFormat frm= new SimpleDateFormat ("yyyy.MM.dd");
    Calendar cal = Calendar.getInstance();
    String today = frm.format(cal.getTime());
    cal.add(Calendar.DATE, -7);
    String aWeekAgo = frm.format(cal.getTime());
    System.out.println("today: " + today);
    System.out.println("aWeekAgo: " + aWeekAgo);


    SimpleDateFormat 은 한글도 지원한다.


    SimpleDateFormat frm= new SimpleDateFormat ("yyyy년 MM월 dd일 HH시 mm분");
    Calendar cal = Calendar.getInstance();
    String todayKor = frm.format(cal.getTime());
    System.out.println("todayKor : " + todayKor);

    JQuery Rowspan

    (function($){
    $.fn.rowspan = function(colIdx) {
    return this.each(function(){
    var that;
       $('tbody tr', this).each(function(row) {
        $('td:eq('+colIdx+')', this).each(function(col) {
           if ($(this).html() == $(that).html()) {
               rowspan = $(that).attr("rowSpan");
               if (rowspan == undefined) {
                $(that).attr("rowSpan",1);
                rowspan = $(that).attr("rowSpan");
               }
               rowspan = Number(rowspan)+1;
               $(that).attr("rowSpan",rowspan); // do your action for the colspan cell here
               $(this).hide(); // .remove(); // do your action for the old cell here
           } else {
               that = this;
              }
              that = (that == null) ? this : that; // set the that if not already set
          });
        });
      });
    };
    })(jQuery);

    Spring Excel Download

    1. org.springframework.web.servlet.view.document.AbstractJExcelView를 상속받아서 ExcelView를 생성한다.
    public class DHExcelView extends AbstractJExcelView {
    /-*
     * @Method Name : buildExcelDocument
     * @createDate : 2011. 3. 17.
     * @author : daeha
     * @param arg0
     * @param arg1
     * @param arg2
     * @param arg3
     * @throws Exception
     * @return : @see
     *         org.springframework.web.servlet.view.document.AbstractJExcelView
     *         #buildExcelDocument(java.util.Map, jxl.write.WritableWorkbook,
     *         javax.servlet.http.HttpServletRequest,
     *         javax.servlet.http.HttpServletResponse)
     * @description : 엑셀뷰~
     * @since :
     * 
     *-
    protected void buildExcelDocument(Map<String, Object> model, WritableWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
    IGenericExcelCommand excelCommand = (IGenericExcelCommand) model.get("excelCommand");
    WritableCellFormat titleFormat = new WritableCellFormat(); // 스크립트 스타일
    titleFormat.setBackground(Colour.GRAY_50);
    String fileName = createFileName(excelCommand.getExcelTitle());
    setFileNameToResponse(request, response, fileName);
    List<Map<String, Object>> rows = excelCommand.getExcelContent();
    Map<String, Object> headers = excelCommand.getExcelHeader();
    List<String> headersOrder = excelCommand.getExcelColumnOrder();
    WritableSheet sheet = workbook.createSheet(excelCommand.getExcelTitle(), 0);
    int rowNumber = 0;
    int cellNumber = 0;
    for (String key : headers.keySet()) {
    if (null != headers.get(key))
    sheet.addCell(new jxl.write.Label(cellNumber, rowNumber, headers.get(headersOrder.get(cellNumber++)) + "", titleFormat));
    }
    rowNumber++;
    for (Map<String, Object> row : rows) {
    cellNumber = 0;
    for (String key : row.keySet()) {
    if (null != headers.get(key))
    sheet.addCell(new jxl.write.Label(cellNumber, rowNumber, row.get(headersOrder.get(cellNumber++)) + ""));
    }
    rowNumber++;
    }
    }
    }
    2. Controller에 RequestMapping을 추가한다.
    Return Type을 View로하고 위에서 만들었던 DHExcelView를 return한다.
    DHExcelView가 인스턴스가 될 때 buildExcelDocument함수가 호출된다. 
    @RequestMapping(value = "business/get.excel")
    private View getExcelList(@ModelAttribute("command") BizInfoMasterCommand command, Model model) {
    ExcelCommand excelCommand = new ExcelCommand();
    // 순서상관없이 put
    excelCommand.setExcelHeader(new HashMap<String, Object>() {
    {
    put("bizSrl", "사업번호");
    put("bizName", "사업명");
    put("bizDetailContents", "사업내용");
    put("budgetCodeValue", "예산분류");
    put("totalBizStartDate", "사업시작일시");
    put("totalBizEndDate", "사업종료일시");
    put("supportTypeValue", "지원대상");
    }
    });
    // 순서대로 add
    excelCommand.setExcelColumnOrder(new ArrayList<String>() {
    {
    add("bizSrl");
    add("bizName");
    add("bizDetailContents");
    add("budgetCodeValue");
    add("totalBizStartDate");
    add("totalBizEndDate");
    add("supportTypeValue");
    }
    });
    excelCommand.setExcelTitle("사업정보");
    excelCommand.setExcelContent(bizInfoMasterDao2.getAllList(command));
    model.addAttribute("excelCommand", excelCommand);
    return new DHExcelView();