블로그 이미지
progh2
지루한 것에서 벗어나 재미난 것 속으로 풍덩~☆

calendar

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

Notice

Recent Post

Recent Comment

Archive

2020. 8. 22. 14:06 기술문서창고

Orange3 프로그램을 설치 후 Options > Add-ons..  를 클릭했을 때 아래와 같이 tuple index out of range 에러가 날 떄가 있습니다. 이럴 경우 "관리자 권한"으로 실행해주시면 됩니다. 아마도 애드온용 디렉토리나 파일에 접근할 때 권한 부족으로 일어나는 문제로 추측됩니다. (매 실행마다 해주셔야 합니다.)

 

근본적으로 이 문제를 해결하려면 Orange3의 설치 위치를 Program Files가 아닌 다른 곳(예: c:\orange)에 설치하도록 하면 될 것으로 보이네요.

 

애드온 쓰려니 에러가 따악~ 
오른쪽 마우스 클릭해서 관리자 권한으로 실행하세요~ 아마 pythonw에 권한 줄꺼니? 물어볼껍니다. 대답은 네!

 

속 시원하게 실행 됩니다. 핫한 구글시트 연동 기능(Orange3-Educational) 같은 것을 이제 설치할 수 있겠네요.

posted by progh2
2020. 3. 10. 05:41 기술문서창고

JSP에서 Java13 환경에서 오라클 데이터베이스 11gR2에 연동하기 위한 설정에 대한 글입니다. 기존 강좌대로 하면 Java13에서는 동작을 안해서 포스팅하게 되었습니다. 

 

출처 : 인프런 실전 JSP(renew ver.)

         JDBC (https://www.inflearn.com/course/%EC%8B%A4%EC%A0%84-jsp_renew/lecture/13671)


ojdbc6_g.jar 파일 위치

강좌에서는 JDBC를 사용하기 위해 ojdbc6_g.jar 라이브러리 파일을 jre 안의 lib\ext 디렉토리로 넣으라고 합니다. 일단 ojdbc6_g.jar 파일의 위치는 오라클 데이터베이스가 설치된 디렉토리 안에 있는데, 강의 내용과 같이 오라클 데이터베이스 XE 11gR2를 설치한 저의 경우는 다음과 같았습니다.

C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib

안에 ojdbc 파일이 3개~ 여기서 ojdbc6_g.jar를 쓰세요


JRE_LIB 위치 - JAVA13에서는?

Java13버전부터는 jre 디렉토리가 따로 설치되지 않아서 영상대로 복사하려다 폴더가 없어서 학생들이 문의를 많이 주었습니다. 원칙대로 하자면 여러 방법이 있겠습니다. (라이브러리를 프로젝트에 복사하기, 프로젝트 클래스패스에 오라클 ojdbc 경로 추가하기 등등...) 하지만 영상대로 따라서 한다면, JRE_LIB 단지 자바 프로그램이 실행될 때 참고하는 경로이기 떄문에 현재 동작하는 이클립스 프로젝트에서는 어떤 클래스패스를 JRE_LIB으로 참조하고 있는지 확인해보면 됩니다.

 

아래는 동영상에서의 JRE_LIB 디렉토리입니다. c:\Program Files\Java\jre1.8.0_151\lib\ 이라는 것을 알 수 있습니다.

c:\Program Files\Java\jre1.8.0_151\lib\ 보이시나요?

 

아래는 2020.03.10 현재 실행 중이 Java13이 설치된 이클립스에서 사용하는 경로 설정으로 c:\Program Files\Java\jdk-13.0.2\lib 이라는 것을 알 수 있습니다.

c:\Program Files\Java\jdk-13.0.2\lib 로 바뀌었어요. jdk가 jre 역할도 흡수한거죠.

사실 JDK 안에 JRE 파일들이 들어있기 때문에 JRE는 설치가 안되어도 상관은 없었다고 개인적으로 생각합니다만, 어쨌든 경로가 저기로 대체되었으니 영상과 같이 저 경로 안에 ext 폴더를 생성해서 파일을 넣어주면 되겠다고 생각했습니다만... 문제는 이 디렉토리 안에 파일들을 넣어도 무시가 되었습니다. 그래서 영상 및 많은 검색 결과에서 알려주는 "JRE 디렉토리 안에 lib\ext에 넣어라"는 Java13에서는 통하지 않았습니다.


Tomcat의 lib 디렉토리 안에 ojdbc6_g.jar 파일을 넣으세요

그러면 어디다가 넣어야 인식할까! 좀 더 검색해보니 Tomcat의 lib 디렉토리에 넣으라는 내용이 나왔습니다.

 

https://sawol-today.tistory.com/entry/ClassforNameoraclejdbcdriverOracleDriver-%EC%97%B0%EA%B2%B0-%EC%95%88%EB%90%A0-%EB%95%8C

 

Class.forName("oracle.jdbc.driver.OracleDriver"); 연결 안될 때

이클립스와 DB 연결 세팅 후 실행을 하는데, 위 사진과 같은 err가 발생합니다. java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 이런 로그가 나타나는데 Class.forName("oracle.jdbc.driver..

sawol-today.tistory.com

그래서 내용대로 tomcat의 lib 디렉토리 안에 넣고 실행하니 정상적으로 동작하는 것을 확인할 수 있었습니다. 톰캣 서버를 껐다 켜서 테스트 하는 것을 잊지말기 바랍니다. 

 

posted by progh2
2020. 3. 10. 04:02 기술문서창고

JSP에서 한글 UTF-8로 출력되게 하기 위한 설정들에 대한 글입니다.

출처 : 인프런 실전 JSP(rene2w ver.)

         한글처리 (https://www.inflearn.com/course/%EC%8B%A4%EC%A0%84-jsp_renew/lecture/13668)

01. Filter 인터페이스를 구현하여 사용하는 경우

다음과 같이 Filter 인터페이스를 구현한 클래스 파일을 만듭니다. doFilter 안에 들어있는 3줄이 핵심으로 request는 UTF-8로 변경하고, response는 text/html;charset=UTF-8을 적용합니다. 아쉽게도 response에서 request처럼 캐릭터셋만 바꾸게 하면 한글이 깨졌습니다. ContentType으로 지정해주어야 합니다. 

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class TempFilter implements Filter {
	@Override
	public void destroy() {
		System.out.println("----filter destroy() ----");	
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("----filter doFilter() ----");
		req.setCharacterEncoding("UTF-8");
		res.setContentType("text/html; charset=UTF-8");
		chain.doFilter(req, res);		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("----filter init() ----");
	}
}

그리고 다음과 같이 web.xml 에 위에서 만든 필터 클래스 설정을 추가합니다. (패키지가 있다면 filter-class에 패키지명도 포함해서 넣어주세요). 필터 매핑의 url-pattern을 통해서 특정 부분에만 필터가 동작하도록 할 수 있습니다. 서버를 건들지 않기 때문에 깔끔(?)합니다.

  <filter>
  	<filter-name>tempFilter</filter-name>
  	<filter-class>TempFilter</filter-class>  	
  </filter>
  <filter-mapping>
  	<filter-name>tempFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

02. 기존 옛날 방법(모든 파일마다 세팅해줘야 함)

GET

Tomcat 서버의 server.xml 에 <Connector> 태그에 URIEncoding="UTF-8" 속성을 추가합니다.

<Connector URIEncoding="UTF-8" connectionTimeout ... >

POST

JSP 파일 내에서는 page 지시어 속성 및 meta 태그 charset 속성을 변경합니다. 그리고 만약 넘어온 get/post 파라미터를 가져다 쓸 경우 request의 캐릭터인코딩 속성도 같이 변경해줍니다. 각각의 파일마다 모두 들어가야 합니다.

<% request.setCharacterEncoding("UTF-8"); %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

Servlet에서는 아래와 같이 인코딩들을 세팅해줍니다. 각각의 서블릿 파일이 모두 이 코드를 추가해야 합니다.

request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");

 

posted by progh2
2020. 3. 8. 22:14 기술문서창고

처음에는 클리앙의 방식대로 했으나 오래전 글이라 그런지 실패했습니다. 소스가 PHP로 되어있는 꽤 재미있는 소스였죠. 해당 오픈소스 프로젝트가 있고 이것을 바탕으로 메뉴를 한글화 하고 TTS 음성을 추가하셨습니다.

https://www.clien.net/service/board/lecture/12911839

 

그래서 실패기..를 작성하려다 한번 더 검색해보니 미 홈 앱의 구조를 이용하여 플러그인을 바꿔치기하여 음성을 심는 방식이 있어서 아래 링크 내용을 바탕으로 꽤 삽질하며 성공했습니다. 중요한 점은 녹스를 설치, 거기에 미 홈을 설치하고 루트 권한으로 플러그인을 바꿔치기(=덮어쓰기)한다는 점입니다. 처음 바꿔치기하고 앱을 실행했을 때는 한글이 안나와서 실패한 줄 알았는데, 3~5분 정도 지나니(로드중 메시지가 지난 후) 보이스팩이 추가(?!)되어 나타나더군요. 좀 당황스러운 경험이었는데 성공했으니까 좋네요. 음성 자체는 이전 클리앙 버전의 TTS 음성이 더 자연스러웠던 것 같지만 그래도 한국어로 메시지가 나오는 것만 해도 얼마나 좋은지.. =D 

https://cafe.naver.com/xst/305567

 

한글화 한 뒤에 앱을 몇 번 재시작하면 다시 이전 플러그인으로 돌아가더군요. 교체한 그 순간에만 먹히는 것인지.. 하지만 한글 보이스팩을 설치하면 그대로 유지되기때문에 특별한 일이 없는 한 보이스팩을 설정에서 바꾸지만 않으면 괜찮을 것 같습니다. 

 

저 같이 1세대 샤오미 로봇 청소기가 있다면 한번 설치해세요~ :)

posted by progh2
2020. 3. 8. 14:12 기술문서창고

들어가며

UV-C 자외선으로 세균이나 바이러스를 살균할 수 있어 음식점의 컵, 칫솔이나 어항 등 살균 용도로 많이 사용되고 있습니다. 집에서도 마우스나 리모컨, 키보드나 핸드폰, 마스크 등등 다양한 것들을 살균할 수 있는 장치를 만들 수 있지 않을까 찾아보았습니다.

휴대용 UV-C 휴대용 살균기

찾아보니 아래와 같이 자외선 살균기가 있어서 우선 이것을 사서 사용해봤습니다. 고급형으로 샀는데 거의 품절 직전이었더군요. 이 기기는 여러 안전장치가 달려 있고 간단하게 여기저기 쓰기는 편해 보였습니다. 게다가 무선형이라 줄이 필요가 없었죠.

다양한 버전의 퓨어라이트. 맨 왼쪽은 고급형, 오른쪽에 에어뭐시기는 공기를 순환하면서 살균하는 장치입니다.(공기청정기 비슷) 제가 산 것이 맨 왼쪽 것. 원래는 에어XD로 사려했으나 저 거치대가 재고가 없다고 해서 기기만 샀습니다.

사이트 : https://purezon.co.kr/category/%ED%93%A8%EB%9D%BC%EC%9D%B4%ED%8A%B8/29/

UV-C 살균등

하지만 장기간 쬐기에는 문제가 있어서 알아보니 삼각대에 장착해서 고정시키는 법도 있었습니다. (사면 기본적으로 해당 부속품이 포함되어 있습니다.) 마침 집에 삼각대가 어디 갔는지 찾을 수 없어서.. 그리고 뭔가 만들어서 써먹을 법이 없을까 고민하다 검색을 해보니 다음과 같은 "살균등"이라는 녀석들이 있더군요.

살균등 + 등기구 8W짜리가 2만원선, 커질수록 가격이 올라갑니다.

검색 링크 : http://www.enuri.com/search.jsp?nosearchkeyword=&issearchpage=&searchkind=&es=&c=&ismodelno=false&hyphen_2=false&from=&owd=&keyword=%EC%82%B4%EA%B7%A0%EB%93%B1+UV+C+%EB%93%B1%EA%B8%B0%EA%B5%AC

주문, 제작하기

그래서 냅다 주문하였습니다. 8W짜리가 가장 싸면서도 길이도 짧아서 종이 박스 같은 것에도 들어갈만 하더군요. 주문하고 보니 살균등과 등기구, 등기구 간에 이을 수 있는 전원선, 220v 전원선, 똑딱이 스위치까지 세트로 해서 보내주더군요. UV-C 자외선은 직접 눈으로 보거나 피부에 닿으면 위험하기 때문에 완벽히 차폐할 필요가 있습니다. 다행히 투과력은 약해서 일단 (불안하긴 하지만) 집에 있는 종이박스에 한쪽에 전원선을 내고, 기구는 덮개에 달고 빈틈을 돌아다니던 골판지로 보완했습니다. 물론 옆에 손잡이 구멍도 막았습니다. 그러니 그럴싸한 - 안에 뭔가 넣기에는 좀 좁지만 - 프로토타입이 완성이 되었습니다. 테스트로 TV 리모컨을 넣어두고 켜 뒀는데 가게의 그 컵 살균기 열었을 때의 냄새가 나더군요. 직접 살균 효과를 비교할 방법이 없는 것이 답답하네요. (저렴하게 방법이 없으려나요)

UC-C 살균기 프로토타입 외형
UC-C 살균기 프로토타입 덮개를 열면 살균등과 등기구가 있습니다. 한쪽에 철끈으로 고정하고 중간에 3M 양면테이프로 고정했습니다.
UC-C 살균기 프로토타입에 리모콘을 넣었습니다. 우측에 전원선 구멍 참고(높이 1.5cm)
UC-C 살균기 프로토타입 옆면. 전원이 요렇게 나갑니다. 지지대 역할도 겸했어요.
살짝 덜 닫고 켜본 상황. 빛이 푸르스름하죠? 몸에 해롭습니다. =_=
UC-C 살균기 프로토타입 덮개 닫은 상태. 직접 빛이 나온 것은 아니라서 괜찮을까 하긴 하지만 더 강력한 차폐가 필요해 보입니다.

개선할 점

케이스도 제대로 만들고 살균을 24시간 할 것이 아니다 보니 위에 퓨어라이트처럼 특정 시간 동안만 동작하고 꺼주는 기능이 필요해 보입니다. 그리고 문 열리면 자동으로 꺼지게 하고, 하는 김에 내부가 비어있으면 동작하지 않는다던가... 의미가 있는지 모르겠지만 내부에 카메라도 달아서 상태를 모니터링할 수 있어도 좋을 것 같군요. 그리고 등을 위 4면으로 달아서 360 살균을 한 번에 하는 구조도 재미있을 것 같긴 한데 아크릴판 정도만 해도 UV-C가 막혀버린다고 해서 UV-C가 통과 가능한 투명한 재질을 찾아야 이런 게 가능할 것 같네요.

일단 이렇게 써보다가 개량해보도록 해야겠습니다. :D

좀 더 쓸만해지고 안전하게 사용이 가능해지면 학교에 가져다 놓고 써도 좋을 것 같고요.

posted by progh2
2020. 3. 8. 03:19 기술문서창고

JSP 개발환경 구축하기 - JDK 13, Eclipse EE, Tomcat 8.5.x 설치 동영상입니다.

 

학생들이 인프런 JSP 강의(https://www.inflearn.com/course/%EC%8B%A4%EC%A0%84-jsp_renew)를 보는데 오라클, 이클립스 사이트가 많이 바뀌어 참고용으로 만든 영상입니다.

 

https://www.youtube.com/watch?v=ClbSs2Pg05o

 

posted by progh2
2020. 3. 8. 03:15 기술문서창고

Java JDK13설치, PATH설정, 이클립스 실행해서 HelloWorld 보는 동영상입니다.

 

 

학생들이 인프런 가바 기초 강의(https://www.inflearn.com/course/%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94_java-renew)를 보는데 오라클, 이클립스 사이트가 많이 바뀌어 찾기 힘들어하여 만든 영상입니다. 그리고 Java 모듈이 생기면서 프로젝트 생성할 때 모듈 생성을 OK해버리면 구조가 살짝 바뀌어 당황할 수 있어 참고용으로 제작했습니다.

 

https://www.youtube.com/watch?v=fmCAXVLpT0k&t=474s

JDK 다운로드 링크 : https://www.oracle.com/java/technologies/javase-jdk13-downloads.html

 

이클립스 다운로드 링크(패키지) : https://www.eclipse.org/downloads/packages/

 

반디집 : https://kr.bandisoft.com/bandizip/

 

 

 

posted by progh2

 

https://tech.instacart.com/introducing-coil-kotlin-first-image-loading-on-android-f0fdc7a2a99e

 

Introducing Coil: Kotlin-first image loading on Android

Coil is a Kotlin-first image loader for Android backed by Coroutines, OkHttp, and AndroidX Lifecycles.

tech.instacart.com

이미지를 서서히 나타나게 도와주는 라이브러리입니다. 나중에 관련해서 튜터리얼 하나 만들거나 있는거 영상으로 찍어봐야겠네요. 즐겁게도 한국어 문서가 있습니다. :D 

 

문서:

 

https://coil-kt.github.io/coil/README-ko/

 

README ko - Coil

 README ko Coil은 Android 백앤드를 위해 Kotlin Coroutines으로 만들어진 이미지 로딩 라이브러리입니다. Coil 은: 빠르다: Coil은 메모리와 디스크 캐싱, 메모리의 이미지 다운 샘플링, Bitmap 재사용, 자동 요청사항 일시정지/취소 등의 수많은 최적화를 수행합니다. 가볍다: Coil은 최댁 1500개의 method들을 APK에 추가합니다 OkHttp와 Coroutines을 이미 사용 중인 앱), 이는 Picasso

coil-kt.github.io

 

깃허브:

https://github.com/coil-kt/coil/

 

coil-kt/coil

Image loading for Android backed by Kotlin Coroutines. - coil-kt/coil

github.com

 

 

posted by progh2