데이터베이스 ERD 도구(Toad Data Modeler)
다운로드 : https://www.toadworld.com/products/toad-data-modeler
다운로드 : https://www.toadworld.com/products/toad-data-modeler
아두이노 버전 보기 참조 라즈베리파이에서 SPI통신을 통해 아날로그 센서 값 읽기 센서 원리 : http://blog.naver.com/roboholic84/220570913403 SPI 설정 : https://m.blog.naver.com/roboholic84/220367321777 CO2 센서(모듈명 : SEN0159, 8만원) 동작 원리 센서 내부에 히터와 금속판이 있고, 공기를 가열(약 40도)하면 공기의 입자가 금속판에 달라붙음 입자가 달라붙는 정도에 따라 저항값이 변함 CO2 센서(모듈명 : SEN0159, 8만원), 제조업체(DFRobot), 인터페이스(Analog) 참조 :… Continue Reading 이산화탄소(CO2) 센서 SEN0159(MG-811) – 라즈베리파이
라즈베리파이에서 아날로그 센서 값 읽기 ADC(Analog Digital Converter)인 MCP3008 칩 필요 CNDI 모듈에는 MCP3008이 내장되어 있어 Analog 0~7에 아낱로그 센서를 연결하면 됨 라즈베리파이와 MCP3008은 SPI 통신을 통해 값을 주고 받음 SPI 통신 설정 : sudo raspi-config 를 통해 SPI 활성화 sudo raspi-config Interfacing Options 선택 Enable 선택 후 Enter -> Enable됬다는… Continue Reading 라즈베리파이에서 SPI통신을 통해 아날로그 센서 값 읽기
참조 : https://daryan.tistory.com/23 sin() 함수를 그려보고, sin()함수에 난수를 더해 임의의 표본 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
%matplotlib inline #문서내에 그래프 출력 import numpy as np import pylab as pl def f(size): x = np.linspace(0, 4.5, size) y = 2 * np.sin(x * 1.5) return (x,y) def sample(size): x = np.linspace(0, 4.5, size) y = 2 * np.sin(x * 1.5) + pl.randn(x.size) return (x,y) pl.clf() f_x, f_y = f(50) pl.plot(f_x, f_y) x, y = sample(50) pl.plot(x, y, 'k.') |
sklearn 모듈을 활용하여 선형회귀 : degree가 1이면 선형, 이상이면 n차 곡선이 그려짐
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from sklearn.linear_model import LinearRegression def fit_polynomial(x, y, degree): #x, y 분포에 적합한 다향식 추출 model = LinearRegression() model.fit(np.vander(x, degree + 1), y) return model def apply_polynomial(model, x): #추출된 다항식에 x를 넣어 예측값 y를 구함 degree = model.coef_.size - 1 y = model.predict(np.vander(x, degree + 1)) return y model = fit_polynomial(x, y, 4) p_y = apply_polynomial(model, x) pl.plot(x, y, 'k.') pl.plot(x, p_y,'g') |
degree = 1 degree = 2 degree = 3 degree = 4 numpy.vander() 함수 사용 예
1 2 3 4 5 |
#np.vander()함수 : x = np.array([4,2,7]) print(np.vander(x, 4)) print(np.vander(x, 6)) |
파일에서 읽고, 파일로 저장하기 json.load(파일핸들) : JSON 파일에서 읽어 파싱하기 json.dump(데이터, 파일핸들, indent=4) : 데이터를 JSON 파일로 저장
1 2 3 4 5 6 7 8 9 10 |
import json file_name = 'E:\\aa.json' with open(file_name, 'r', encoding='utf-8') as json_file: items = json.load(json_file) print(item['temp']) with open('E:\\dump.json', 'w', encoding='utf-8') as dump_file: json.dump(items, dump_file, indent=4) |
문자열을 JSON으로, JSON을 문자열로 json.loads() : 문자열을 JSON으로 파싱하기 json.dumps() : JSON을 문자열로 변환하기
1 2 3 4 5 6 7 8 9 10 11 |
import json data = '[{"_id" : "KF","farmID" : "KF13","dongID" : "15","temp" : 30.2,"humi" : 31.5}, {"_id" : "KF","farmID" : "KF13","dongID" : "15","temp" : 31.2,"humi" : 33.5}]' items = json.loads(data) for item in items: print(item['temp']) dump = json.dumps(items, indent=4) print(dump) |
CSV 파일을 읽어서 list에 저장, list의 내용을 CSV파일로 저장
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import csv file_name = 'E:\\aa.csv' with open(file_name, 'rt', encoding='utf-8') as csv_file: reader = csv.reader(csv_file) list_items = list(reader) print(list_items[0:10]) #newline='' : writerow() 함수가 자동으로 \n을 넣어주기에 줄바꿈 제거 with open('E:\\dump2.csv', 'w', encoding='utf-8', newline='') as dump_file: wr = csv.writer(dump_file) wr.writerow([1,2,3]) wr.writerows(list_items[0:10]) |
딕셔너리를 JSON으로 변환
1 2 3 4 5 6 |
import json dic = {'a':1, 'b':[1,2,3], 'c': 3} st = json.dumps(dic) print(st) |
SPI 통신을 활성화 sudo raspi-config 5. Interfacing Options SPI를 선택 sudo nano /etc/modules 코드 수정 맨 아래에 spidev를 추가 라이브러리 설치 sudo apt-get install python-dev git clone git://github.com/Gadgetoid/py-spidev.git cd py-spidev/ sudo python setup.py install 센서 연결 채널 1번(본 교재 기판의 Analog 0 과 동일)에다 끼우면 정상작동 소스 코드 : mcp.py, 참조(… Continue Reading 라즈베리파이3 ADC(MCP3008) -> SPI 통신
참조 : https://github.com/kwj1270 https://m.blog.naver.com/wwwkang8/220989381100 Java ORM 설치 Help -> eclipse Marketplace java orm 검색 Java ORM Plugin for Eclipse 1.0 설치 Java ORM Plugin for Eclipse 1.0 이 없는 경우 https://sourceforge.net/projects/java-orm-plugin/ 에서 zip파일 다운로드 \eclipse\dropins 폴더에 압축해제 Eclipse 재실행 pom.xml에 DBCP 라이브러리 추가 <dependency> 코드 찾기 : http://search.maven.org 접속하여 mybatis 검색… Continue Reading 스프링 07. MyBatis 사용하기
참조 https://github.com/kwj1270 https://gmlwjd9405.github.io/2018/12/19/jdbctemplate-usage.html JdbcTemplate 클래스 JDBC의 반복적인 코드를 제거하기 위한 클래스 반복되는 DB 연동 로직은 JdbcTemplate 클래스의 템플릿 메소드가 제공 개발자는 SQL구문만 신경쓰면 됨 데이터베이스와의 연결 코드를 Java로 작성하지 않음 root-context.xml에 저장된 것을 사용하여 데이터베이스 연결 DBCP : 자바 웹 애플리케이션에서 DB 접속과 관련된 라이브러리 중 하나 JDBC : Java… Continue Reading 스프링 06. JDBC Template로 바꾸기
참조 : https://github.com/kwj1270 Service 클래스 만들기 /bookapp 위치에 service/book 폴더 생성 BookService 클래스 생성
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 |
package krco.moak.bookapp.service.book; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import krco.moak.bookapp.dao.book.BookDAO; import krco.moak.bookapp.dto.book.Book; @Service public class BookService { @Autowired BookDAO dao; public int insert(Book dto) { return dao.insert(dto); } public int update(Book dto) { return dao.update(dto); } public int delete(Book dto) { return dao.delete(dto); } public Book getOne(Book dto) { return dao.getOne(dto); } public List<Book> getAll() { return dao.getAll(); } } |
도서 목록 출력 : http://localhost:8080/bookapp/book View 만들기 : /src/main/webapp/WEB-INF/views 폴더에 생성 book_list.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>도서 목록</title> </head> <body> 번호 도서명 가격 출판사 <c:forEach items="${books}" var="book"> <p> ${book.no} ${book.title } ${book.pric } ${book.publ } </p> </c:forEach> </body> </html> |
Controller 클래스 만들기 /bookapp 위치에 controller/book 폴더 생성 BookController 클래스 생성
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 |
package krco.moak.bookapp.controller.book; 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.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import krco.moak.bookapp.dao.book.BookDAO; import krco.moak.bookapp.dto.book.Book; import krco.moak.bookapp.service.book.BookService; @Controller public class BookController { @Autowired BookService service; private static final Logger logger = LoggerFactory.getLogger(BookController.class); @RequestMapping(value = "/book", method = RequestMethod.GET) public String home(Model model) { model.addAttribute("books", service.getAll()); return "book_list"; } } |
결과 확인 : http://localhost:8080/bookapp/book BookApp 프로젝트를 마우스 오른쪽 버튼 클릭 ->… Continue Reading 스프링 05. Service, Controller 클래스와 VIew 만들기
참조 : https://github.com/kwj1270 JDBCUtil 클래스 생성 : DB connect()와 close()를 모아 놓은 클래스 폴더 생성 : /bookapp에서 마우스 오른쪽 버튼 클릭 -> New -> Folder 클래스 생성 : util 폴더를 마우스 오른쪽 버튼 클릭 -> New -> Other -> class로 검색 JDBCUtil.java : static method로 만들었음
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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
package krco.moak.bookapp.dao.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class JDBCUtil { public static Connection getConn() { Connection conn = null; try { Class.forName("org.sqlite.JDBC"); conn = DriverManager.getConnection("jdbc:sqlite:" + "mybook.db"); // eclipse.exe가 있는 폴더에 mybook.db가 있어야 함 //conn = DriverManager.getConnection("jdbc:sqlite:" + System.getProperty("user.dir") + "mybook.db"); // System.getProperty("user.dir")는 eclipse.exe가 있는 폴더를 가리킴 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public static void close(PreparedStatement ps, Connection conn) { if(ps != null) { try { if(!ps.isClosed()) { ps.close(); } } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } finally { ps = null; } } if(conn != null) { try { if(!conn.isClosed()) { conn.close(); } } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } finally { conn = null; } } } public static void close(ResultSet rs, PreparedStatement ps, Connection conn) { if(rs != null) { try { if(!rs.isClosed()) { rs.close(); } } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } finally { rs = null; } } close(ps, conn); } } |
BookDAOJDBC 클래스 생성 /bookapp/dao… Continue Reading 스프링 04. Sqlite 데이터베이스와 DAO 생성