2018의 게시물 표시

Java EUC-KR text File Convert to UTF-8 text File

윈도우에서 euc-kr로 작성한 파일을 맥에서 열어보니 온통 ???천지라서 변환할 일이 있어서 그냥 끄적여봤다. 아래는 소스이다. 버퍼드리더를 euc-kr로 생성하여 한줄 씩 읽으면서 동시에 utf-8로 변환해서  utf-8로 생성해준 버퍼리라이터를 통해서 새로운 text파일에다가 써준다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Convert { public static void main(String[] args ) throws IOException { String path = Convert. class .getResource( "" ).getPath(); BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream( path + "개인가계부.txt" ), "EUC-KR" )); BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( "utf8.txt" ), "utf-8" )); String line ;         while (( line = br .readLine()) != null ) { //           System.out.println...

대학생 코딩 과제 대행 java, python, oracle 스물 여섯 번째

이미지
https://open.kakao.com/o/s3aMpbA 오라클 모델링하고나서 쿼리짜는 과제이다. 모델링이라고 하기도 웃기지만 ㅎㅎ 과제 요구사항이다. DROP TABLE ACCOUNT PURGE; DROP TABLE BRANCH PURGE; DROP TABLE CUSTOMER PURGE; DROP TABLE LOAN PURGE; DROP TABLE BORROWER PURGE; DROP TABLE DEPOSITOR PURGE; DROP VIEW ALL_CUSTOMER; CREATE TABLE ACCOUNT(     ACCOUNT_NUMBER VARCHAR2(20) PRIMARY KEY,     BRANCH_NAME VARCHAR2(20),     BALANCE NUMBER ); insert into account values('A-101','Downtown',500); insert into account values('A-102','Perryridge',400); insert into account values('A-201','Brighton',900); insert into account values('A-215','Mianus',700); insert into account values('A-217','Brighton',750); insert into account values('A-222','Redwood',700); insert into account values('A-305','Round Hill',350); select * from account; CREATE TABLE BRANCH(     BRANCH_NAME VARCHAR...

대학생 코딩 과제 대행 java, python, oracle 스물 다섯 번째

https://open.kakao.com/o/s3aMpbA 이번에는 지난번에 했던 파이썬으로 소켓통신을 하는 과제를 의뢰받았다. 소켓을 통해서 파일을 서버에 업로드 하는 간단한 과제였다. 먼저 서버 #-*- coding: utf-8 -*- import socket #서버 소켓 오픈 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) port = 12345 server_socket.bind(("", port)) server_socket.listen(5) print ("TCP Upload Server Waiting for client on port " + str(port)) while True:     client_socket, address = server_socket.accept()     print("I got a connection from ", address)     req = client_socket.recv(1024)     print("Request :  ", req)     decodedReq = req.decode("utf-8")     print("decode : ", decodedReq)     fileTitle = decodedReq.split('!@#$%^&*')[0]     fileContent = decodedReq.split('!@#$%^&*')[1].encode("utf-8")     print('title : ', fileTitle)     print('content : ', fileContent)     uploadFile = open(fileTitle, "wb")     uploa...

대학생 코딩 과제 대행 java, python, oracle 스물 네 번째

이미지
https://open.kakao.com/o/s3aMpbA 요즘 학기 말이긴 한가 보다 ㅇㅅㅇ.. 의뢰가 없다가 최근에 3개가 들어왔었다. 차례대로 포스팅을 오랜만에 해보려고 한다. 먼저 과제는 2문제이다. 1번은 WITH RECURSIVE문과 같은 기능을 하는 stored procedure를 구현하라는 내용의 문제였다. WITH RECURSIVE문은 mysql 8버전 이후부터 사용이 가능하다. 하지만 과제에 사용하는 mysql 버전은 5.5로 해당 구문을 쓸 수 없게 되있었다. 따라서 1번은 계층형 쿼리를 사용해야 됬다. oracle의 경우 계층형 쿼리를 start with, connect by 문을 사용해서 짜본적은 있었지만, mysql로 계층형 쿼리를 짜본적이 없어서 당황하지 않을 수 없었다. 그래서 찾다보니 계층형 쿼리를 사용하지 않고도 left self join을 통해서 계층형 쿼리를 구현할 수 있었다. 뭐 완벽하진 않지만,, 제출 전날 의뢰를 해주어서 시간이 부족해서 꼼수를 부려서 그냥 돌아가게끔만 구현했다 ㅎㅎ 변명이지만 ㅎㅎ 2번은 프로시져를 사용하지 않고 쿼리를 통해서 문제해결을 요하는 문제였다. 과제에 사용 되는 테이블 내용 먼저 프로시져를 생성.. CREATE DEFINER=`s201403658`@`%` PROCEDURE `findBySSN`(essn INT) BEGIN DECLARE cnt INT DEFAULT 0; SELECT COUNT(*) INTO cnt FROM EMPLOYEE WHERE Superssn = essn; IF cnt > 0 THEN SELECT lv1.ssn as lv1, lv2.ssn as lv2, lv3.ssn as lv3 , lv4.ssn as lv4, lv5.ssn as lv5, lv6.ssn as lv6, lv7.ssn as lv7, lv8.ssn as lv8, lv9.ss...

MariaDB Database 및 계정 생성 그리고 접속권한 설정

NAS에 MariaDB10이 있어서 개발하면서 사용할 일이 많다. 디비랑 계정 생성하고 접속권한 세팅할 때마다 찾기 귀찮아서 문법을 남긴다. database 생성 CREATE DATABASE 데이터베이스 이름; 계정생성  '%'부분에 'localhost' 일 경우 로컬에서만 접속을 허용 '%' 는 모든 IP에서 접속을 허용한다. 특정대역대 : '111.222.%' 특정IP : 'xxx.xxx.xxx.xxx' 형태로 적어준다. CREATE USER '계정이름'@'%' IDENTIFIED BY '비밀번호'; 특정 데이터베이스에 속한 모든 오브젝트들에 대한 권한을 특정 계정에 부여한다. GRANT ALL PRIVILEGES ON 데이터베이스이름.* TO '계정이름'@'%'; 리프레쉬 ~ 바로 적용 FLUSH PRIVILEGES; 적용된 결과 보기 SHOW GRANTS FOR '계정이름'@'%'; 계정 정보 확인 하기 use mysql; select host, user, password from user;

ECMAScript6 - Operation

이미지
프로퍼티 이름 조합 문자열 조합 변수 값과 문자열 조합 디스트럭처링과 프로퍼티 이름 조합 Default Value 디폴트 값 적용 순서 Default 파라미터 파라미터 디스트럭처링 for-of Array 와 String NodeList 반복 디스트럭처링 for-of아 for-in의 차이 for-of Object 열거와 거듭 제곱 연산자

ECMAScript6 - DeStructuring

이미지
간단히 말해서, 변수에 분할 할당이다. four가 undefined라는 점 다차원 분할 할당도 가능하다는 점 ,를 사용해서 인덱스를 건너뛰고 할당, spread 연산자를 사용하여 할당 Object에도 분할 할당이 가능하다. Key에도 Value에도 함수의 파라미터로도 사용이 가능하다.

ECMAScript6 - Spread

이미지
Spread 연산자는 이터러블 오브젝트의 엘리먼트를 분리하여 전개한다. 전개한 결과를 변수에 할당하거나 함수의 파라미터로 사용할 수 있다. 1. Array 오브젝트 2. String 오브젝트 3. 함수의 파라미터로 사용 ...rest 파라미터 Array-like Array는 아니지만 Array처럼 사용할 수 있는 Object 오브젝트를 Array-like라고 한다. ES6 스펙에서 사용하는 공식 용어. key값이 0부터 시작해서 1씩 증가하고 length 프로퍼티가 있어야한다. 둘 중 하나라도 만족하지 않으면 Array-like가 아니다. ...rest파라미터와 Arguments Argument 는 function 키워드로 함수를 정의 했을 때 사용이 가능하다. get(1,2,3)으로 호출했을 때, 호출받는 함수의 arguments에 1,2,3이 설정된다. arguments도 Array-lik e이므로 for()문으로 전개가 가능하다. 따라서 Array 오브젝트와 메서드를 사용이 불가능하다. 단점  - 함수안의 코드를 보아야 arguments의 사용 여부와 사용 부분을 알 수 있어 코드 가    독성이 떨어진다. 많은 코드를 디버깅하거나 소스 코드를 리팩토링할 때 부담이 된다. ...rest 파라미터는 arrow function 으로 함수를 정의 했을 때 사용이 가능하다. ...rest 파라미터는 Array 오브젝트로 이터러블 오브젝트이다. 따라서 Array 오브젝트의 메서드를 사용할 수 있다. 장점 - 함수안의 코드를 체크하지 않고 (one, ...rest) 형태만 보아도 rest 파라미터의 범위를 알 수 있다.

ECMAScript6 - Iteration

이미지
이터러블 프로토콜은 오브젝트의 반복 처리 규약을 정의한다. 내장 오브젝트로 String, Array, Map, Set, TypedArray, Argument 오브젝트는 디폴트로 이터러블 프로토콜을 갖고 있다. 또한 DOM의 NodeList도 갖고 있다. 이러한 오브젝트는 자바스크립트 엔진이 렌더링될 때 이터러블 프로토콜이 설정된다. 사전처리 없이 반복 처리가 가능하다. 이터러블 프로토콜이 설정된 오브젝트를 이터러블 오브젝트라고 한다. 이터러블 오브젝트는 Symbol.iterator가 있어야 한다. 이것이 이터러블 프로토콜 이다. 이터러블 오브젝트가 아닌 오브젝트에 Symbol.iterator를 개발자 코드로 추가하면 이터러블 오브젝트가 된다. Array 오브젝트가 할당된 arrayObj에서 Symbol.iterator의 존재 여부를 체크하는 코드이다. 오브젝트에 프로퍼티 존재 여부를 체크할 때 arrayObj.propertyKey 또는 arrayObj[propertyKey] 형태로 작성하는데, Symbol은 arrayObj.Symbol.iterator 형태로 작성할 수 없고 arrayObj[Symbol.iterator]와 같이 대괄호 [] 안에 Symbol.iterator를 작성해야 한다. Object 오브젝트는 이터러블 오브젝트가 아니다. Symbol.iterator가 없다. 이터레이터 프로토콜은 오브젝트 값을 순차적으로 처리할 수 있는 방법을 제공하는데, 이것이 next() 메서드이다.

ECMAScript6 - arrow function, () => {}

이미지
기본 형태 () => { }; 1. 함수 블록 { } 사용하지 않은 형태, 2. 파라미터가 한 개의 형태 3. 파라미터가 없는 형태 4. 오브젝트를 리턴 할 경우 4-1 { }가 함수 블록인지 오브젝트를 의미하는것인지 헷갈리기 때문에 ( ) 감싸주는것 같다. 4-2 아니면 아래와 같이 명시적으로 return문을 작성해준다. 5. arguments 사용 불가 function 키워드로 선언한 함수를 sports(1,2) 형태로 호출하면 함수의 arguments에 1과 2가 설정된다. 반면 화살표 함수에는 arguments가 존재하지 않는다. 화살표 함수블록에서 arguments를 사용하면 ReferenceError가 발생한다. ES6에서는 arguments 대신에 rest 파라미터를 사용한다. rest 파라미터는 "let sports = (...rest) => {code}" 형태와 같이 소괄호 () 안에 점(.)을 세 개 작성하고 이어서 파라미터 이름을 작성한다. sports(1 ,2)로 호출하면 1과 2가 rest 파라미터에 배열로 설정된다. arguments는 Argument 오브젝트를 대신하는 프로퍼티로 함수가 호출되면 Argument오브젝트를 생성하고 함수 실행이 끝나 빠져나올 때 삭제한다. 함수를 100번 호출하면 100번 Argument 오브젝트를 생성하고 삭제하므로 효율이 떨어진다. rest 파라미터는 Argument 오브젝트를 생성하지 않으므로 효율이 높다. 이런 점을 고려하여 Argument 오브젝트를 생성하지 않는 것으로 간주된다. 6. this와 setTimeout() setTimeout()가 window 오브젝트 함수이므로 setTimeout()안 this가 window 오브젝트를 참조하게 된다. 그래서 콘솔에 true가 출력된다. 여기서 문제는 newSports.get() 형태로 호출했으므로 this가 newSports의 인스턴스를...

ECMAScript6 - var와 let

이미지
1. 함수 안에 작성한 let 변수는 함수가 스코프. 2. 함수안에 if(a==0){let sprots= "축구"} 형태로 코드를 작성했을 때, sports 변수는 함수가     스코프가 아니라 if문의 블록 { } 스코프. 3. 같은 스코프에서 같은 이름의 let 변수를 선언할 수 없다. 4. let 변수는 호이스팅(hoisting) 되지 않는다. 5. let과 this 6. for문에서 var 와 let 1. 의 예시 2. 의 예시 호이스팅이란 - 변수나 함수를 선언, 정의하기 앞서서 먼저 호출하는 경우 문제없이 작동되도록 하는 특성이다. 4. 의 예시 - var 로 선언된 sports 변수는 비록 undefined가 출력되었지만 변수로 인식되었다. 반면에  let 으로 선언된 music 변수는 변수로 인식되지 않았다. 5. 의 예시 var로 선언한 변수의 스코프는 글로벌 오브젝트이고 this가 글로벌 오브젝트를 참조한다. this가 window 오브젝트를 참조한다. 6. 의 예시 for문에서 let 변수는 반복할 때마다 스코프를 갖는 반면, var 변수는 스코프를 갖지 않는다. <!doctype html> <html> <head>   <meta charset="utf8" /> </head> <body>   <ul>     <li>1~10</li>     <li>11~20</li>     <li>21~30</li>   </ul>   <script>     var nodes = document.querySelector('ul');     f...