동영상 재생시 좌/우 방향키로 빠르게 탐색(fast seek)할 때 이동하는 시간 간격(interval)이 너무 길어서 불편한 것을 해결한 경험

By | 2월 6, 2016

영화로 영어공부를 하면서… 지나간 대사를 다시보기 위해서 왼쪽 방향키로 후방탐색을 했을 때, (예: 팟플레이어) 최소한의 시간만 뒤로 돌리고 싶은데 (예: 1초) 5초, 10초 이렇게 뒤로 이동해 버려서 김빠지는 경우가 많이 있었다.   그래서 인터넷 검색을 하다가, 이것이 keyframe 이라는 요소와 관련되어 있다는 말을 들어서, 동영상의 keyframe을 직접 수정하는 작업을 시도하였다. 물론 이것은 동영상을 다시 인코딩… Read More »

jmx를 사용하여 원격 메서드(mbean method)를 호출(invoke)하는 예제

By | 2월 5, 2016

  JMXServiceURL url = new JMXServiceURL(“service:jmx:rmi:///jndi/rmi://0.0.0.0:9001/jmxrmi”); JMXConnector jmxc = JMXConectorFactory.connect(url, null); MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); ObjectName gatewayObjName = new ObjectName(“org.bruce.test:name=TestServiceManaged”) mbsc.invoke(gatewayObjName, “testRemoteMethod”, null, null);  

MyBatis에 Ehcache를 사용할 경우 주의할 점

By | 2월 5, 2016

※ 결과 객체 조작의 문제 mybatis-ehcache를 사용할 때, selectOne()의 결과로 캐싱된 객체를 얻을 경우, 그 객체에 변경을 가하면 이후 다른 곳에서 동일한 쿼리를 호출했을 때 변경된 결과(쿼리의 결과를 조작한 값)을 리턴하게 된다.  => 디버깅하기 대단히 어렵다!!! 그렇기 때문에 절대 select의 결과 객체를 가공해서는 안된다. 이 문제를 방지하기 위해서는 ehcache 설정에서 copyOnRead 옵션을 true로 주어야 한다. 그러나… Read More »

별도 자막파일(.smi, .srt)이 없는 mkv 동영상을 재생했는데 자막이 출력되는 경우 (동영상 오버레이에 포함된 자막이 아니라 별도 자막파일처럼 숨길 수 있는 자막)

By | 2월 1, 2016

몰랐는데, mkv 파일의 경우 자막을 동영상 내에 병합(merge)시킬 수가 있었다. MKVToolNix 라는 툴을 사용하면, 현재 동영상 파일에 어떤 자막이 병합되어 있는지 확인하거나, 기존에 자막이 병합되어 있을 경우 삭제하거나, 자막이 없을 경우 새로운 자막을 병합시킬 수도 있다.   신기하네…        * 추가 정보 Subtitle Edit 이라는 프로그램을 사용하면, mkv 파일에 내장된 자막을 별도의 파일로… Read More »

Gradle 설정하기 (작업중)

By | 1월 12, 2016

Eclipse plugin 설치   2. Gradle Project 생성 (아니면 기존 프로젝트 우클릭 후 configure > convert as gradle project 를 해도 된다고 하는데, 이럴 경우 build.gradle 등 파일이 생성되지 않아서 일단 보류…) (그래서 Dynamic Web Project에 build.gradle가 생성되도록 커맨드라인 명령을 사용해 보려고 함…)   3. build.gradle 파일에 dependency 추가 (위에서 fileupload 추가한 것 – 이렇게… Read More »

netstat 상태의 의미는?

By | 12월 14, 2015

정확하지는 않으나… 일단 경험한 것 위주로 써 본다면…     SYNC_SENT : 상대방 방화벽이 막혀 있을 경우 TIME_WAIT : 소켓 연결을 상태방이 끊었을 경우     ※ 잘못된 정보가 있으면 댓글로 지적 바랍니다~~      

java 프로퍼티 파일 읽기 예시 (java.util.Properties, org.springframework.util.ResourceUtils)

By | 11월 25, 2015

  Properties props = new Properties(); try{ props.load(new FileInputStream(ResourceUtils.getFile(“classpath:config/properties/test.properties”))) //classpath 기준으로 찾을 경우 //props.load(new FileInputStream(ResourceUtils.getFile(“file:C:/project/src/main/resources/config/properties/test.properties”))) //파일시스템 기준으로 찾을 경우 }catch(IOException e){ e.printStackTrace(); } String testValue = props.get(“testKey”);     * 이러한 류의 작업은 File I/O를 사용하기 때문에 시스템 기동부나 테스트코드에서 사용해야지, 자주 반복되는 구간에서 사용해서는 안된다.    

Hazelcast 서버가 일정한 주기로 다운되던 사례

By | 11월 24, 2015

웹페이지에서 refresh 를 하면서 JMX로 Hazelcast의 상태를 모니터링하는 프로그램이 있었다.   그런데 왜 일정한 주기로(며칠…) 다운되나 jconsole로 원인을 살펴보았더니, 이  JMX 조회를 수행할 때, JMX connection이 초기화되지 않고 계속 생성되면서, Hazelcast 내부 스레드(thread) 제한 갯수인 5000 에 육박하였기 때문이었다.   이 문제는 해당 프로그램에서 조회시마다 connection close를 잘 해 주도록 수정하여 해결되었다. 끝~~

Java 소켓통신에서 Connection reset by peer (peer로 연결 재설정) 오류가 발생할 경우의 사례

By | 11월 24, 2015

Connection reset by peer  (혹은 “peer로 연결 재설정”)   이 메세지는, 잘은 모르지만 느낌상 Netty에서 뿌려주는 메세지처럼 보인다. 내 경우에는, 연결을 유지하는 소켓통신을 사용중, 거래가 없기 때문에 상대방이(서버) 연결을 끊은 경우 (상대방 방화벽/어플리케이션 에서 자동으로 연결종료?), 내 쪽 (클라이언트) 에서 이 메세지를 볼 수 있었다. 검색을 좀 해 보니, 이것은 상대방이 TCP RST 패킷(리셋)을 보낼… Read More »

java에서 KSC5601 규격에 해당하는 문자만 허용하는 유효성검사 코드

By | 11월 20, 2015

* 실제로 이렇게 사용하는 것이 괜찮은가 하는 것은 잘 모르겠으나, 일단 한 번 구현해 보았다.   public static final Charset CHARSET_EUC_KR = Charset.forName(“EUC-KR”); public static final String KSC5601_START_HEX = “A1A1”; //EUC-KR 코드페이지 내에서 KSC5601의 시작코드 public static final String KSC5601_END_HEX = “FEFE”; //EUC-KR 코드페이지 내에서 KSC5601의 종료코드 public static final int KSC5601_START_INT = Integer.parseInt(KSC5601_START_HEX, 16); public… Read More »