2018년 12월 22일 토요일

18.04 에 mysql 설치하기

1. mysql 설치

  > sudo apt update
  > sudo apt install mysql-server

2. mysql 설정하기

  > sudo mysql_secure_installation

Securing the MySQL server deployment.Connecting to MySQL using a blank password.The 'validate_password' plugin is installed on the server.The subsequent steps will run with the existing configurationof the plugin.Please set the password for root here.New password: Re-enter new password: Estimated strength of the password: 50 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : yBy default, a MySQL installation has an anonymous user,allowing anyone to log into MySQL without having to havea user account created for them. This is intended only fortesting, and to make the installation go a bit smoother.You should remove them before moving into a productionenvironment.Remove anonymous users? (Press y|Y for Yes, any other key for No) : n ... skipping.Normally, root should only be allowed to connect from'localhost'. This ensures that someone cannot guess atthe root password from the network.Disallow root login remotely? (Press y|Y for Yes, any other key for No) : ySuccess.By default, MySQL comes with a database named 'test' thatanyone can access. This is also intended only for testing,and should be removed before moving into a productionenvironment.Remove test database and access to it? (Press y|Y for Yes, any other key for No) : n ... skipping.Reloading the privilege tables will ensure that all changesmade so far will take effect immediately.Reload privilege tables now? (Press y|Y for Yes, any other key for No) : ySuccess.All done!


2. mysql 로그인 하기

  > sudo mysql -u root

Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 9Server version: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>


3. Database 생성

  mysql> create database lora_db;

mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+4 rows in set (0.00 sec)mysql> create database lora_db;Query OK, 1 row affected (0.00 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || lora_db || mysql || performance_schema || sys |+--------------------+5 rows in set (0.00 sec)mysql>

4. Table 생성


   mysql> use lora_db;
   mysql> create table ..... ;

mysql> use lora_db;Database changedmysql> show tables;Empty set (0.00 sec)mysql> drop table if exists GROUP_INFO;Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> create table GROUP_INFO( -> SEQ bigint not null, -> NAME varchar(32), -> ICON varchar(32), -> primary key(SEQ) -> );Query OK, 0 rows affected (0.08 sec)mysql> show tables;+-------------------+| Tables_in_lora_db |+-------------------+| GROUP_INFO |+-------------------+1 row in set (0.00 sec)mysql>


5. 사용자 등록 및 권한부여

   mysql> create user 'lora'@'localhost' identified by '1234';
   mysql> grant all privileges on lora_db.* to 'lora'@'localhost';

mysql> uninstall plugin validate_password;Query OK, 0 rows affected (0.07 sec)mysql> create user 'lora'@'localhost' identified by '1234';Query OK, 0 rows affected (0.00 sec)mysql> grant all privileges on lora_db.* to 'lora'@'localhost';Query OK, 0 rows affected (0.00 sec)

6. Password 정책 해제방법
   
   mysql> uninstall plugin validate_password;



2018년 10월 18일 목요일

NodeJS+FileServer+Angular+ChartJS 로 개발하기

0) Node 설치
  > curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
  > sudo apt-get install nodejs
  > sudo apt-get install npm

1) Node 를 최신버젼으로 업그레이드 한다.
  > sudo npm install -g n
  > sudo n stable

2) Angular CLI 를 설치한다.
  > sudo npm install -g @angular/cli

3) 프로젝트 폴더 생성
  > ng new U2ReportServer

4) 프로젝트 폴더로 진입
  > cd U2ReportServer

5) express , multer , cors 모듈 추가
  > npm install express multer cors chart.js --save

6) 생성된 package.json 파일을 확인한다.
----------------------------------------------------------
{
  "name": "u2-report-server",
  "version": "1.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^6.1.0",
    "@angular/common": "^6.1.0",
    "@angular/compiler": "^6.1.0",
    "@angular/core": "^6.1.0",
    "@angular/forms": "^6.1.0",
    "@angular/http": "^6.1.0",
    "@angular/platform-browser": "^6.1.0",
    "@angular/platform-browser-dynamic": "^6.1.0",
    "@angular/router": "^6.1.0",
    "chart.js": "^2.7.3",
    "core-js": "^2.5.4",
    "cors": "^2.8.4",
    "express": "^4.16.4",
    "multer": "^1.4.1",
    "rxjs": "~6.2.0",
    "zone.js": "~0.8.26"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.8.0",
    "@angular/cli": "~6.2.4",
    "@angular/compiler-cli": "^6.1.0",
    "@angular/language-service": "^6.1.0",
    "@types/jasmine": "~2.8.8",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "~4.3.0",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~3.0.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~1.1.2",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.11.0",
    "typescript": "~2.9.2"
  }
}
----------------------------------------------------------

7) ./backend/config/multer.config.js 파일을 생성한다.
----------------------------------------------------------
const multer = require('multer');

var storage = multer.diskStorage({
destination: (req, file, cb) => {
  cb(null, __basedir + '/uploads/')
},
filename: (req, file, cb) => {
  cb(null, file.originalname)
}
});

var upload = multer({storage: storage});

module.exports = upload;
----------------------------------------------------------

8) ./backend/routers/file.router.js 파일을 생성한다.
----------------------------------------------------------
let express = require('express');
let router = express.Router();
let upload = require('../config/multer.config.js');

let fileWorker = require('../controllers/file.controller.js');

router.post('/api/file/upload', upload.single("file"), fileWorker.uploadFile);
router.get('/api/file/all', fileWorker.listUrlFiles);
router.get('/api/file/:filename', fileWorker.downloadFile);

module.exports = router;
----------------------------------------------------------

9) ./backend/controllers/file.controller.js 파일을 생성한다.
----------------------------------------------------------
const uploadFolder = __basedir + '/uploads/';
const fs = require('fs');

exports.uploadFile = (req, res) => {
res.send('File uploaded successfully! -> filename = ' + req.file.filename);
}

exports.listUrlFiles = (req, res) => {
fs.readdir(uploadFolder, (err, files) => {
for (let i = 0; i < files.length; ++i) {
files[i] = "http://localhost:8080/api/file/" + files[i];
}

res.send(files);
})
}

exports.downloadFile = (req, res) => {
let filename = req.params.filename;
res.download(uploadFolder + filename);
}
----------------------------------------------------------

10) ./server.js 파일을 생성한다. (main 파일임)
----------------------------------------------------------
var express = require('express');
var app = express();

const bodyParser = require('body-parser');
const path = require('path');
const cors = require('cors')
const corsOptions = {
    origin: 'http://localhost:4200',
    optionsSuccessStatus: 200
}
app.use(cors(corsOptions));

global.__basedir = __dirname;

let router = require('./backend/routers/file.router.js');

// Parsers
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

// Angular DIST output folder
app.use(express.static(path.join(__dirname, 'public')));

// API location
app.use('/api', router);

// Send all other requests to the Angular app
app.get('*', (req, res) => {
  console.log("angular path");
  res.sendFile(path.join(__dirname, 'public/index.html'));
});

// Create a Server
let server = app.listen(8082, () => {

    let host = server.address().address
    let port = server.address().port

    console.log("App listening at http://%s:%s", host, port);
})
------------------------------------------------------------

11) angular.json 파일의 outputPath 를 public 으로 바꾼다.
----------------------------------------------------------
          "options": {
            "outputPath": "public",
            "index": "src/index.html",
----------------------------------------------------------

12) Angular 를 build 한다.
  > ng build

13) Server 를 실행한다.
  > node server.js


2018년 10월 10일 수요일

2018년 10월 7일 일요일

TypeScript 로 개발하기

1) TypeScript 설치
  > npm install -g typescript

  -g 옵션을 주면 global 어디서나 TypeScript 를 사용할 수 있다.
  -g 옵션을 주지 않으면 실행한 folder 에서만 TypeScript 를 사용한다.


2) 테스트용 파일 생성
   index.html
     <html>
       <head lang="ko">
         <title>
            type script test
         </title>
         <meta charset="utf-8" />
         <script src="index.js"></script>
      </head>
      <body>
        <p>type script test on browser environments</p>
      </body>
    </html>

   index.ts
    console.log("type script test on console environments");

3) TypeScript 를 compile
  > tsc index.ts

  TypeScrpt 파일을 compile 하면 js 파일이 생성된다.
  위의 경우 index.js 파일이 생성된다.

4) 생성된 index.js 를 실행해 본다.
  > node index.js
 
5) npm 환경 구성
  > npm init

6) test 를 위한 lite-server 설치
  > npm install lite-server --save-dev

7) lite-server 실행 스크립트 추가
  package.json 에 "start" 라는 명령어를 추가한다.

    "scripts": {
       "test": "echo \"Error: no test specified\" && exit 1",
       "start": "lite-server"
    },

8) lite-server 를 실행한다.
  > npm start

9) TypeScript 컴파일 환경을 설정한다.
  > tsc --init

10) TypeScript 파일 모두 compile 하기
  > tsc

  tsc --init 를 실행하고 나면 tsc 명령으로 모든 ts 파일을 compile 하여 js 파일을 만든다.





2018년 9월 10일 월요일

cordova custom plugin 개발하기

* Plugin 개발
---------------------------------------------------------------------------------------------------
1) Plugin Manager 를 설치한다.
   > npm install -g plugman

2) Cordova 프로젝트 생성
   > cordova create pluginTestApp com.test.plugin PTA


3) Custom Plugin 을 생성한다.
   > plugman create --name myPlugin --plugin_id com.test.myplugin --plugin_version "0.0.1"
   > myPlugin 폴더가 생성된 것을 확인할 수 있다.


4) Android 용 plugin 템플릿을 생성한다.
   > cd myPlugin
   > plugman platform add --platform_name android


* 참조 blog
https://henotia.github.io/MakeCordovaPlugin-1/
https://henotia.github.io/MakeCordovaPlugin-2/



* Custom Plugin 설치
---------------------------------------------------------------------------------------------------
1) Project 폴더에 Custom 플러그인을 위치시킨다.
   > cd myPlugin
   > dir

2018-09-14  오후 03:07    <DIR>          .
2018-09-14  오후 03:07    <DIR>          ..
2018-09-08  오전 12:48               363 .editorconfig
2018-09-08  오전 12:48               439 .gitignore
2018-09-14  오후 02:54    <DIR>          .sourcemaps
2018-09-14  오후 03:07             6,338 config.xml
2018-09-14  오후 03:06    <DIR>          TestCustomPlugin
2018-09-14  오후 02:48                93 ionic.config.json
2018-09-14  오후 03:07    <DIR>          node_modules
2018-09-14  오후 03:07           244,029 package-lock.json
2018-09-14  오후 03:07             1,834 package.json
2018-09-14  오후 03:00    <DIR>          platforms
2018-09-14  오후 03:07    <DIR>          plugins
2018-09-14  오후 03:04    <DIR>          resources
2018-09-14  오후 02:47    <DIR>          src
2018-09-08  오전 12:48               519 tsconfig.json
2018-09-08  오전 12:48               178 tslint.json
2018-09-14  오후 02:53    <DIR>          www
               8개 파일             253,793 바이트
              10개 디렉터리  150,516,252,672 바이트 남음

2) custom plugin 을 설치한다.
   > ionic cordova plugin add [경로] --save
   > ionic cordova plugin add TestCustomPlugin --save

2018년 8월 30일 목요일

ionic framework 으로 개발하기

1) ionic 과 cordova 설치
    > npm install -g ionic cordova

2) ionic 프로젝트 생성
    > ionic start TestApp

3) Platform 추가하기
    > ionic cordova platform add android
    > ionic cordova platform add ios

4) android 로 build
    > ionic cordova build android

5) Android Studio 를 실행하고  Import Project 를 선택한 후 platform/android 폴더를 선택하여 Project 를 loading 한다.



6) Web Browser 에서 화면 테스트하기

   > ionic serve
   
      안드로이드/아이폰 형태로 보고싶으면...
   > ionic serve --lab

7) 화면 수정후 prepare 를 해야 android 에 반영됨. 왜냐하면 ionic 은 화면 loading 속도를 빠르게하기 위해서 여러페이지를 build 를 통해 하나의 페이지로 만든다.

   > ionic cordova prepare android

8) 배포용 build 하기

   > Android Studio 에서 아래 메뉴를 사용하여 signed apk 를 생성한다.



8) ios 의 경우 emulator 에서 테스트하기

   > ionic cordova build ios
   > ionic cordova emulate ios

2018년 7월 18일 수요일

무채색


성장이 없는 삶은 무채색 그림이다.

우리의 삶은 도화지에 그림을 그리는 것과 같다.
꿈이라는 밑그림을 그리고
매일 조금씩 성장으로 채색해 나가야 한다.

가끔 어울리지 않는 색을 칠하기도 하지만
그런 건 새로운 색으로 덧칠하면 그뿐이다.
화려한 색깔의 작품이 완성될 때까지
우리는 열심히 채색해야 한다.

만약 우리가 도화지에 밑그림도 그리지 않고 채색을 한다면
색깔은 방향을 잃을 것이다.
만약 우리가 밑그림은 그렸어도 채색을 하지 않는다면
공허한 그림이 될 것이다.

성장이 없는 삶은 무채색의 공허한 삶이 될 것이다.