2017. 6. 9. 23:42



맥북 같은 경우는 위 사진처럼 일반 컴퓨터 처럼 시건장치 홈이 없습니다.


그래서 인터넷을 찾아보면 


아래 사진처럼 나사를 풀어서 설치하는거 




아래처럼 미리 나사를 풀어서 고정시키는 장치

또는 아래처럼 전체적으로 묶는거 


아니면, 어떤 사람이 블로그에 올린방법은 분해해서, 안에 철사를 연결해 놓는거 등등 많이 있다.




근데, 그중에 제일 마음에 드는게


맥북 틈에 끼는 이런게 있는데~



위에 꺼보다는


밑에꺼가 너무 이쁜거다~~




위에처럼 맥북 틈에 끼고, 구멍에 자물쇠를 거는 건데,


저거를 하고 사고 싶어서 아마존을 찾아보니......저 쇠 하나에 30불이 넘는거다.....ㅠㅠㅠㅠㅠ



그래서 이거랑 비슷한 거를 만들어 보려고 용접하는데 알아보니.... 대량만 하신다더라...ㅠㅠㅠㅠ


그러다가 몇일전에, 


인터넷에서 파는 핸드폰 거치대 똑닥하는 밑에 사진 같은거를 사은품으로 주었다.


근데, 구부리니까, 위에 잠금장치랑 모양이 비슷한거다.



그래서 옆에 붙이는 부분을 자위로 자르고, 손으로 구부렸다.


이게 신기한게 한번 구부리니까. 다시 잘 안펴지는거다.


그래서 내 맥북 틈에 넣어 보았다.




사이즈가 딱 들어가는거다. 그리고 위에것들처럼 그냥 철 보다는 가죽같은거가 겉에 있어서 맥북에 기스도 않난다.



위치를 잘 계산해서 펀치로 구멍을 뚫어준다.


난 처음에 잘못 뚫어서....바닥이라 나중에 다시 하나 더 뚫었다..


옆에서 보면 이런 모양이다.



밑에 사진은 맥북 13인치에 껴본거다. 위에꺼는 15인치에는 맞았는데, 13인치에는 자꾸 버튼이 눌린다. 


자기 맥북에 맞게 접을때 잘 접어야 한다.



아래 사진처럼 구멍에 쇠사슬일아 자물쇠를 연결하면 된다.




이거는 집에 남는 쇠사슬이랑 자물쇠가 있으면 할만한 잉여짓인데, 그리고 핸폰 거치대 클립을 얻는다면, 무비용으로 만들수있는 시건장치이다.


사람들이 저거 피면 펴지지 않냐고 하는데, 꼽혀있는 상태에서는 힘이 잘 안들어가서 안펴진다.


그리고 일반 가위로는 잘리지가 않는다. 엄청난 힘이 필요하고,


그런 큰 액션을 커피숖 같은데서 하면 사람들의 시선때문에 못 훔쳐갈꺼라......예상해본다~~ㅎㅎㅎㅎㅎㅎㅎ


그리고 잡아 댕겨서 빼려고 하면 결국 액정이 나갈꺼 같기 때문에, 되 팔려고 훔쳐가는 사람이면....굳이 안할듯~ㅎㅎㅎ


이거는 안전하다는 보장은 못한다.  하지만, 그냥 먼가 잠금장치를 했다는 나만의 위안같은거???ㅎㅎㅎㅎㅎㅎ


그리고 쉽게는 그냥 막 들고 못가니까~~ㅎㅎㅎㅎㅎ



거치대 : 2000-3000원


자물쇠 : 다이소에서 1000-2000원


쇠사슬 : 인터넷에서 6000-8000원


대충 12000원 정도 나오는데,


인터넷 뒤지면, USB 시건장치도 판다. 어찌 보면 그냥 아래 그림 같은 USB 시건 장치 사는게 나을수도 있다~ㅎㅎㅎ



위 사진은 꼭 광고 같군......나랑 전혀 상관없는 업체임...


하여튼 심심한 사람은 한번 만들어 보는거 추천~ 기대 이상임~~ㅎㅎㅎㅎㅎ


이상 Tyson의 잉여짓이였습니다!ㅎㅎㅎ


'Tyson잡학다식' 카테고리의 다른 글

이케아 책상 나사 잘못 넣은거 빼기  (0) 2020.04.14
삼성V2 vs 신한 삑 카드 비교  (0) 2018.04.25
핸드폰 보험의 함정  (0) 2017.12.05
Posted by Tyson
2017. 5. 11. 18:17

접속한 다음에 


/etc/ssh/sshd_config 파일을 수정한다.


#PermitRootLogin yes 

의 주석을 없애든지, no로 되어있으면 yes로 바꾼다.



그리고 passwd root 해서 패스워드 설정해주자.



그리고, 키 없이 접속하고 싶을때,


/etc/ssh/sshd_config 파일에서


PasswordAuthentication no

을 

PasswordAuthentication yes

yes로 바꿔준다.


키없이 접속하는게 계속 안되서 보니 결국 저거였음

Posted by Tyson
2017. 5. 11. 15:01

 1. 도커 이미지 검색

docker images 

: 현재 다운 받은 이미지 목록

docker search centos

: centos 들어간 이미지 검색


docker pull centos:7.0

:뒤는 태그

centos 이미지 다운받음



docker ps -a : 실행중인 콘테이너 목록 보기



2. 콘테이너 실행



docker run -i -t --name centos_base -p 80:80 -v /dataRoom:/dataRoom centos bin/bash


-i -t 넣어야지 입력이랑 터미널 화면 볼수있음

-i가 입출력, -t가 tty ??


--name 콘터이너 이름 : 쓰고 싶은 이름


-p 외부포트: 내부포트

앞에꺼는 외부에서 들어오는 포트, 뒤에꺼는 콘테이너 안에서 사용할 포트



-v 외부폴더: 내부폴더 

폴더 공유함. 외부에 있는 폴더랑 콘테이너내에 저 경록의 폴더 생성후 둘이 공유


bin/bash 콘테이너 실행하면 bash로 실행되게함.





Posted by Tyson
2017. 3. 31. 13:59

이것저것 프러그인 설치하고 다 해봤는데,

그냥 코드 인터넷에 붙이고 다시 붙이기 하는게 젤 편하다~


https://colorscripter.com/


여기 사이트쓰는게 편한듯

Posted by Tyson
2017. 3. 31. 11:31

이 자바 스프링 넘이란 놈을 하면서.....진짜....설정때문에 어마어마한 시간을 보내고 있다~


내가 자바를 싫어했던 이유가 새록새록 생각났다~


먼저 pom.xml 파일에서

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
   <!-- print query log -->
        <dependency>
            <groupId>org.lazyluke</groupId>
            <artifactId>log4jdbc-remix</artifactId>
            <version>0.2.7</version>
        </dependency>
    
    
       <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.31</version>
        </dependency>
 
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
cs

위에 것들을 추가해준다. 

mysql, mybatis 그리고 쿼리 띄어주는것까지 추가해주고,




/src/main/webapp/WEB-INF/spring/ 폴더의

root-context.xml 파일을 열고, 아래를 추가해준다

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
   <bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/testtable" />
        <property name="username" value="root" />
        <property name="password" value="password" />
    </bean>
 
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:/mapper/**/*.xml" />
    </bean>
 
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSession" />
    </bean>
 
 
    <!-- query log -->
    <bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
        <constructor-arg ref="dataSourceSpied" />
        <property name="logFormatter">
            <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
                <property name="loggingType" value="MULTI_LINE" />
                <property name="sqlPrefix" value="SQL    :  " />
            </bean>
        </property>
    </bean>
 
cs


mysql 정보는 

        <property name="url" value="jdbc:mysql://localhost:3306/testtable" /> 에

localhost:포트/스키마이름 

해주고, 

밑에 아이디랑 비번 넣어준다.


그 밑에 sqlSession은 마이바티스를 불러와서 쿼리를 넣어준다는 말인데,

쿼리문장을 넣는 곳에 경로를 넣어준다.

        <property name="mapperLocations" value="classpath:/mapper/**/*.xml" />

위 경로는 

/src/main/resources/mapper/전체폴더/전체.xml파일

이란 뜻이다.

나 같은경우는 게시판을 만들꺼니까.

/src/main/resources/mapper/board/board_sql.xml 이란 파일을 만들었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="user">
    <select id="selectCount" resultType="Integer">
        <![CDATA[
            SELECT count(*)  
              FROM board
        ]]>
    </select>
    <!-- <select id="selectUserId" parameterType="hashmap" resultType="Integer">
        <![CDATA[
            SELECT count(user_id) checkResult 
              FROM user 
                  WHERE user_id = #{user_id}
        ]]>
    </select> -->
</mapper>
 
cs


보드 테이블 갯수조회 쿼리만 넣었다.

값이 안들어가도 그냥 조회만되게..



/src/main/java 밑에 패키지를 만들어 주고,

나는 패키지 com.myboardtest.dao 만들었다. 

콘트롤러랑 다른 패키지를 만들었다.

그리고, 거기에

/src/main/java/com.myboardtest.dao/AbstractDAO.java 를 만들어 주고,

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
58
package com.myboardtest.dao;
 
import java.util.List;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
 
public abstract class AbstractDAO {
    protected Log log = LogFactory.getLog(AbstractDAO.class);
 
    @Autowired
    private SqlSessionTemplate sqlSession;
 
    protected void printQueryId(String queryId) {
        if (log.isDebugEnabled()) {
            log.debug("\t QueryId : " + queryId);
        }
    }
 
    public Object insert(String queryId, Object params) {
        printQueryId(queryId);
        return sqlSession.insert(queryId, params);
    }
 
    public Object update(String queryId, Object params) {
        printQueryId(queryId);
        return sqlSession.update(queryId, params);
    }
 
    public Object delete(String queryId, Object params) {
        printQueryId(queryId);
        return sqlSession.delete(queryId, params);
    }
 
    public Object selectOne(String queryId) {
        printQueryId(queryId);
        return sqlSession.selectOne(queryId);
    }
 
    public Object selectOne(String queryId, Object params) {
        printQueryId(queryId);
        return sqlSession.selectOne(queryId, params);
    }
 
    @SuppressWarnings("rawtypes")
    public List selectList(String queryId) {
        printQueryId(queryId);
        return sqlSession.selectList(queryId);
    }
 
    @SuppressWarnings("rawtypes")
    public List selectList(String queryId, Object params) {
        printQueryId(queryId);
        return sqlSession.selectList(queryId, params);
    }
}
cs


이렇게 만들고,

 얘는 abstract class라 또

src/main/java/com.myboardtest.dao/boardDAO.java 를 만들어서 AbstractDAO.java를 불러왔다.

1
2
3
4
5
6
7
8
9
10
11
package com.myboardtest.dao;
 
import org.springframework.stereotype.Repository;
 
@Repository("dao")
public class boardDAO extends AbstractDAO {
    public Integer selectCount() {
        return (Integer) selectOne("user.selectCount");
    }
}
 
cs


참고로 여기에는 서비스파일을 만드는 대신에,

어노테이션으로 @Repository("dao") 라고 만들어줬다.

아직 어노테이션은 잘 모르지만, @Repository 라는게, dao라는 이름으로 저장소같은거를 만들어줬다라고 이해했다.


그리고, Integer로 받을꺼기 때문에 인티저 클래스 만들어 주고,


*int 는 null 값을 못받고, Integer는 널 값을 받을수있기때문에 Integer로 했다.



그리고, selectOne("user.selectCount"); 은, AbstractDAO에서 selectOne이라는 클래스에 

board_sql.xml에 있는 namespace = user에서 id = selectCount 에 있는 쿼리문을 가져와서 넣는다는 거다.



그리고 홈컨트롤러 

/src/main/java/com.myboardtest.myboard/HomeController.java 에서 애네를 불러와야한다.

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
package com.myboardtest.myboard;
 
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
import com.myboardtest.dao.boardDAO;
 
/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
 
    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
 
    // @Autowired
    // private SqlSessionTemplate sqlSession;
 
    /**
     * Simply selects the home view to render by returning its name.
     */
    @Autowired
    private boardDAO dao;
 
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);
 
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
 
        String formattedDate = dateFormat.format(date);
 
        model.addAttribute("serverTime", formattedDate);
 
        // System.out.println(sqlSession.selectOne("SELECT * FROM BOARD"));
        /*
         * boardDAO dao = new boardDAO();
         */ System.out.println(dao.selectCount());
        return "home";
    }
 
}
cs


@Autowired

private boardDAO dao;

라는 거가 아까 boardDAO.java에서 저장소에 넣은 dao를 불러온다.


System.out.println(dao.selectCount());

그리고 그냥 콘솔에서 찍어만 보았다.

결과값이 뜨더군.


-------------------------------------------------------------------------------------------------------------------------------

이 넘의 스프링 시작하는데, 너무 클래스들이 얼히고 설켜 있어서, 처음에 구조 파악하는데 오래걸렸다.

지금은 그냥 저장소에서 불러왔는데, 

서비스 패키지를 만들어 주고, 서비스들을 그곳에 모아두면 나중에 이용할때 더 편하긴 하다.

그거는 다음 포스트에 올리는걸로




'컴퓨터 > Java Spring Framework' 카테고리의 다른 글

JPA CascadeType 종류  (0) 2018.05.10
Spring Security logout Handler custom  (0) 2018.05.08
mod_jk연동 도메인 여러개  (0) 2018.03.09
톰캣 설치  (0) 2018.03.09
아파치 컴파일 설치  (0) 2018.03.09
Posted by Tyson
2017. 2. 22. 11:11

 

 

 

<table width="200" border="1">

<tr>

<td style="text-overflow:ellipsis; overflow:hidden">긴문자생략</td>

</tr>

</table>

 

 

td 스타일에 저거 넣어주면, 알아서 생략됨.

뒤에는 .....으로 보임.

 

이거 안될때, 

<table style="table-layout: fixed>

테이블 스타일에 이거 추가해주면 된다.

Posted by Tyson
2017. 2. 14. 18:49

메모장을 관리자 모드로 실행한다.


C:\Windows\System32\drivers\etc 폴더에 있는 

모든파일 보기로 한다.


host 파일을 연다.



127.0.0.1 clients2.google.com 

이런게 있을꺼다.

얘를 지우던지. 

앞에 #를 추가한다.


그리고 저장할때, 백신 프로그램이 띄어져 있으면,

엑세스 거부라고 할꺼다. 


잠깐 백신 프로그램은 꺼 놓도록...


이것때문에 계속 지우고 다시 설치하고 별 짓을 다함..ㅠㅠㅠㅠ

Posted by Tyson
2015. 12. 22. 18:38

Git 이란 넘을 이제야 이해해서 글을 씁니다.


회사내 테스트 서버에 깃은 설치했습니다. 


설치법은 설명이 많으니까~ 생략. 


근데, Git 사이트 가서 있는 윈도우용 프로그램을 설치하기는 했는데.... 


이넘을 리눅스서버랑 어떻게 연결을 하고 자료를 가져와야할지.....처음에 완전 개념이 안잡혔거든요.


그러면 리눅스 서버에 계정을 일일히 만들어서 해야하나?? 하는 생각도 하고 어찌할지 고민고민하다가.


이제야 이해했습니다.


윈도우에 Git를 설치하고 나면, 폴더에서 오른쪽 클릭했을때, Git GUI, Git Bash 등등이 생기죠.


먼저 서버에서 이 폴더는 깃을 써서 관리하겠다라고 해줘야합니다.

home/www 이란 폴더라고 가정하겠습니다.

위 폴더로 간 다음에 

#git init

원하는 폴더에 git init을 해주면 설정됬다고 뜰껍니다. 

그리고 

#ll -al 

하고 보면 .git 이라는 폴더가 생겼습니다.

그다음에 파일들을 등록을 해줘야 합니다.

#git add .

#git commit -m "코멘트"

이렇게 하면 폴더에 있던 파일들이 다 등록이 됩니다.

이제부터는 깃에서 파일들을 다 관리하는거죠.



이제 다시 내 컴퓨터 윈도우로 가서 작업할 폴더 하나 만듭니다.

그리고 마우스 오른쪽 버튼을 눌러서 git Bash 을 실행하면 터미널 같은게 열릴겁니다.

이제 서버에 있는 자료를 여기로 가져오겠습니다.


#git clone ssh://root@192.168.0.0:22/home/www/.git

                  서버아이디@ 서버주소:22/디렉토리 주소

이런식입니다.

인터넷에 GitHub에서 하는법은 많은데, 회사내 서버에서 직접 쓰고 싶은데, 설정법을 몰라서 해맸습니다.

ssh 붇이는거랑 서버주소. 그리고, 22 (이건 생략가능합니다.)

그리고 마지막에 아까 확인했던 .git 폴더를 꼭 써줘야 합니다.

그러면 패스워드 넣으라고 하고 넣으면 파일을 다 복사해서 가져옵니다.


그러면 이제 내 컴퓨터 로컬에서 작업하시고 다시 올릴실때입니다.


#git remote add origin ssh://root@192.168.0.0:22/home/www/.git

이렇게 써서 원격저장소 등록을 해 놓으라고 하는데,

클론 써서 가져온것은 자동으로 등록이 되어있어서,

그냥

#git push origin master

           보내고 싶은 브랜치 / 내보는 브랜치 입니다.

                         저장소


근데, 여기서 에러가 뜹니다. 

왜@@@@

저도 master 원격저장소도 master인데, 내용이 틀리기 때문입니다.

그래서 로컬에서 작업하실때는 다른 브랜치를 만드셔서 작업하시고 푸시 하시는 것이 좋아요~~

clone으로 받은 다음에 바로 

#git branch dev 

#git checkout dev

dev만들어서 dev로 이동해서 작업하거든요.

그래서 나중에 푸시할땐

#git origin dev

이런식으로 보내고,


서버에 접속해서 한명이 머지해주고 그러는 방법이죠~


Posted by Tyson
2015. 10. 22. 14:15

   클릭시 다운로드 하는거 만들때, 

click 이랑 on 차이??

on를 쓰면 나중에 추가되는 태그들도 먹힌다. 예로, file_down 클래스는 나중에 모달로, 창이 뜨니,

click에서는 file_down 클래스가 먹히지 않는다.


그래서 on를 쓴다.

근데, on의 순서??

 $('.row').on('click','.file_down',function()

  1.이벤트가 먹히는 클래스/2.클릭이벤트/3.file_down클래스가 클릭했을때 아래 이벤트를 1번 클래스해 한다?



 jQuery(document).ready(function(){

        $('.file_down').click(function(){

           var url = 'ajax_download?report_no='+report_no;

            location.href = url;

        });

    });

    <script type="text/javascript">

    jQuery(document).ready(function(){

        $('.row').on('click','.file_down',function(){

            var url = 'ajax_download?report_no='+report_no;

            location.href = url;

        });

    });

    </script>

'컴퓨터 > JavaScript (jQuery)' 카테고리의 다른 글

jQuery에서 따옴표 처리하기  (0) 2018.05.24
정규식 패턴 종류  (0) 2018.04.27
사업자 등록번호 체크방법  (0) 2018.04.24
Modal로 팝업 띄우기  (6) 2018.02.07
엔터 칠때 자동으로 클릭하기  (0) 2018.01.05
Posted by Tyson
2015. 10. 2. 10:40
1
2
3
4
5
6
7
8
9
10
11
12
13
    
<?
//숫자만 남기기.
    $pattern = '/([0-9])+/'; //패턴입력
    $max = 'U0000040'
    preg_match_all($pattern$max$match); //패턴에서 검색해서 숫자만 남기기
    $str = implode(''$match[0]); //문자 숫자로 바꾸기
    $str++;
    //앞에 000000넣기(9자리)
    $str = sprintf("%09d",$str); //자릿수 맞추가
    $str=(string)$str; //스트링으로 바꾸기
    $coupon_cd"U".$str; //앞에 U 붙여주기
?>
cs


Posted by Tyson