electron angular desktom app 만들기



https://alligator.io/angular/electron/
https://angularfirebase.com/lessons/desktop-apps-with-electron-and-angular/




https://electronjs.org/docs



angular] object의 양방향 바인딩 조심



angular 코딩시 ng2-smart-table 에 source를 바인딩 하고 rowSelect 이벤트를 할당 한후 


<ng2-smart-table [settings]="codeSettings"
[source]="rmCodeGroupsLocal"
(deleteConfirm)="onDeleteConfirm($event)"
(rowSelect)="onCodeGroupSelect($event)"
(editConfirm)="onSaveConfirm($event)"
#flowTable
></ng2-smart-table>



다음과 같이 이벤트를 구현하였을때 
this.currCodeGroup = event.data 와 같이 구현할 경우 this.currCodeGroup 객체의 값을 this.currCodeGroup.id = "" 과깉이 초기화 하였을 경우 smart-table의 소스 데이타도 같이 초기화 되는 현상을 발견 했다.

object의 = 연산이 양방향으로 적용되는 듯 하여 Object.assign 구문을 사용하여 값만 copy 되도록 변경 한 후 정상적으로 기능이 동작 함을 확인 함.

currCodeGroup:CodeGroup ;  //CodeGroup 모델타입임.


onCodeGroupSelect(event):void {
console.log("selected code group");
console.log(event);
//this.currCodeGroup = event.data;
//this.newCodeGroup = this.currCodeGroup;
//값 copy
this.currCodeGroup = Object.assign({}, event.data);
this.newCodeGroup = Object.assign({}, this.currCodeGroup);

this.loadCodes();
}






java File delete 오류



java servlet에서 File 을 delete하는 구문에서 등록 후 짧은 시간안에 삭제 구문을 수행 할때 file의 상태가 read, writeable 상태 인데도 불구하고 삭제 되지 않는 현상이 발생했다.
시간이 좀 지나면 정상적으로 삭제가 되긴 한다.

스텍 오버플로우의 조언에 따라 삭제 구문 앞에 System.gc(); 를 추가 하니 감쪽같이 해당 현상이 사라진다..

System.gc(); 
deleteDirectory(new File(wsdlWebappDir));

centos7 locale 변경

[리눅스] CentOS 7 로케일 변경

CentOS 7 에서 로케일 변경하는 방법입니다.

 yum -y install fonts-korean


현재 사용가능한 한글관련 로케일

# localectl list-locales | grep -i koko_KRko_KR.euckrko_KR.utf8kok_INkok_IN.utf8koreankorean.eucru_RU.koi8rru_UA.koi8utg_TJ.koi8tuk_UA.koi8u

utf8 로 변경

 # localectl set-locale LANG=ko_KR.utf8

수동으로 변경시는 /etc/locale.conf 파일을 만들어 아래 내용 추가

LANG=ko_KR.utf8

서버 부팅 후 로케일 설정 확인

# localeLANG=ko_KR.utf8LC_CTYPE="ko_KR.utf8"LC_NUMERIC="ko_KR.utf8"LC_TIME="ko_KR.utf8"LC_COLLATE="ko_KR.utf8"LC_MONETARY="ko_KR.utf8"LC_MESSAGES="ko_KR.utf8"LC_PAPER="ko_KR.utf8"LC_NAME="ko_KR.utf8"LC_ADDRESS="ko_KR.utf8"LC_TELEPHONE="ko_KR.utf8"LC_MEASUREMENT="ko_KR.utf8"LC_IDENTIFICATION="ko_KR.utf8"LC_ALL= # cat /etc/locale.confLANG=ko_KR.utf8

jhipster generator update

yarn global upgrade generator-jhipster
업그레이드 안될때

npm
install -g generator-jhipster

spring xml schema 정의시 버전명을 명시 하지 않는 것이 좋다?

spring xml schema 정의시 버전명을 명시 하지 않는 것이 좋다?

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd">

==> 

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">



angular 배포시 path 관련사항

빌드시 deploy-url 옵션을 부여하여 처리 한다.

ng build --deploy-url=/rms/ 

빌드 후 dist 경로에서 옵션으로 처리 되지 않는 asset url 이 있을 수 있으므로 해당 경로는 수동으로 path를 추가해 주어야 한다. 


.registerLoader(this._imageLoader.load('/rms/assets/img/sky-bg.jpg'));

//혹은

.registerLoader(this._imageLoader.load(__webpack_require__.p+'assets/img/sky-bg.jpg'));


나의 경우 src 하위 app.component.ts 에 정의된 이미지로더의 url이 문제 였으며 image url을 상대경로로 처리하여 보완하고 나머지 페이지의 경우에는 deploy-url 옵션이 잘 적용 되었다.



//BaThemePreloader.registerLoader(this._imageLoader.load('/assets/img/sky-bg.jpg'));
// changed
BaThemePreloader.registerLoader(this._imageLoader.load('./assets/img/sky-bg.jpg'));

httpd + tomcat 연동시 jkmount


보통은 vitrualhost에서 
JkMount /* ajp13 등을 통해서 tomcat에서 실행할 url패턴을 정의한다.

하지만 restful 서비스가 필수인 요즘은 역으로 httpd 서비스에서 먼저 수행할 url패턴을 정의할 필요가 있다.



<Virtual  >


      SetEnvIf Request_URI "/*.js" no-jk
      SetEnvIf Request_URI "/*.css" no-jk
      SetEnvIf Request_URI "/*.jpg" no-jk
      SetEnvIf Request_URI "/*.gif" no-jk
      SetEnvIf Request_URI "/*.png" no-jk
      SetEnvIf Request_URI "/*.html" no-jk

JkMount /* tomcat1

</VirtualHost>



react 활용시 서버렌더링을 위한 V8엔진 사용시에는 ..?

Jhipster 4.2.0 mvnw -Pprod package Hang


Jhipster 4.2.0 mvnw -Pprod package Hang

INFO]
[INFO] --- frontend-maven-plugin:1.3:yarn (yarn install) @ missiongo ---
[INFO] Running 'yarn install' in D:\jhipster\test4
[INFO] yarn install v0.21.3
[INFO] [1/4] Resolving packages...
[INFO] success Already up-to-date.
[INFO] $ node node_modules/pngquant-bin/lib/install.js && node node_modules/phantomjs-prebuilt/install.js && yarn run webpack:build
[ERROR]   ?닖 pngquant pre-build test passed successfully
[INFO] Found PhantomJS at D:\jhipster\test4\node_modules\phantomjs-prebuilt\lib\phantom\bin\phantomjs.exe ...verifying
[INFO] PhantomJS is previously installed at D:\jhipster\test4\node_modules\phantomjs-prebuilt\lib\phantom\bin\phantomjs.exe
일괄 작업을 끝내시겠습니까 (Y/N)? Y

D:\jhipster\test4>


4.2.0 이후 버전에 패치 준비중

바로 패치를 적용하려면 
https://github.com/jhipster/generator-jhipster/commit/88660c8eacd2021fcd9fe62f799fb51b3ede5f74 참조

이슈
https://github.com/jhipster/generator-jhipster/issues/5518

pngquant 의 경우 NATIVE 프로그램으로 관련 문제가 지속적임. 



언급된 내용중에
yarn의 경우 global 바이너리파일들의 위치와 관련된 이슈가 생겼으며 윈도우에서는 가급적 npm을 사용하라고 함.


========================= 해결 =====================================
윈도우에서 yarn을 사용하지 않게하기

nodejs 재설치 
제어판에서 nodejs 삭제  (uninstall)
기존에 설정되어 있던 관련 파일들 rename 혹은 remove 

Rename or remove  d:nodejs

Rename ore remove C:users/Administrator/AppData/Roming/npm/node_module


 https://nodejs.org/en/


nodejs 재설치시 LTS 버전 사용하기 

노드 재설치 후


npminstall -g npm


npminstall -g yo

npminstall -g generator-jhipster


jhipsterpatch ( 4.0.2 이전 릴리즈) image관련된것 안쓰기

https://github.com/jhipster/generator-jhipster/commit/88660c8eacd2021fcd9fe62f799fb51b3ede5f74  참고


중요 : jhipster 설치시 아래의 10번 옵션을 설치 하지 말것

Local installationwith NPM (alternative to Yarn)

  1. Install Java 8 from the Oracle website.
  2. (Optional) Install a Java build tool.
  3. Install Git from git-scm.com. We recommend you also use a tool like SourceTree if you are starting with Git.
  4. Install Node.js from the Node.js website (prefer an LTS version). This will also install npm, which is the node package manager we are using in the next commands.
  5. (Recommended) Update NPM: npm install -g npm
  6. Install Yeoman: npm install -g yo
  7. Only for AngularJS 1, install Bower: npm install -g bower
  8. Only for AngularJS 1, install Gulp: npm install -g gulp-cli (If you have previously installed a version of gulp globally, please run npm rm -g gulp to make sure your old version doesn’t collide with gulp-cli)
  9. Install JHipster: npm install -g generator-jhipster
  10. (Optional) Install Yarn: npm install -g yarn (If so, after generating a project, yarn install will be launched instead of npm install





application 생성
테스트 및 빌드 정상





================================== 참고로 ============================
https://shift.infinite.red/npm-vs-yarn-cheat-sheet-8755b092e5cc

NPM vs Yarn Cheat Sheet



ionic2 EXCEPTION: Uncaught (in promise): false

ionic2

EXCEPTION: Uncaught (in promise): false

1. promise function은 호출과 동시에 린턴하고 리턴 완료시 완료 구문을 실행한다.

재현 :
페이지 로딩시 로딩 이미지를 show 하고 function 마지막에 loding.dismiss()를 실행하면 호출과 동시에 loading 화면이 dismiss된다.
이후 프로미스 블럭에서 로딩화면을 dismiss한다면 이미 로딩 화면이 dismiss되었기 때문에 콘솔에 오류 메세지가 표시된다.
해당 내용을 patch 중이나 당장 오류메세지를 없애기 위해서는 정확한 부분에 로딩 dismiss를 하거나 혹은 catch를 활용한다.


    ionViewDidLoad() {
        console.log("LOGIN.ts ionViewDidLoad");
        this.showLoader();   ==> 1) 로딩화면 표시

        //저장소에 저장되어 있는 정보를 로그인 폼에 표시
        //username 설정
        this.userData.getUsername().then(data => {
            this.login.username = data;
        });

        //저장된 비밀번호 TODO: 제거
        this.userData.getPassword().then(data => {
            this.login.password = data;
        });

        //현재 로그인 정보가 있으면 인증정보 유효성 체크
        this.userData.hasLoggedIn().then((hasLoggedIn=> {
            
            console.log("load first hasLoggedIn:"+hasLoggedIn);
            if(hasLoggedIn){
                this.authService.checkAuthentication().then((res=> {
                    console.log("Already authorized trigger user:login event and go main");
                    this.loading.dismiss(); ==> 3) 리턴 후 로딩화면 dismiss (로딩화면이 없으므로 오류메세지 표시)
                    //this.loading.dismiss().catch(() => {});
                    //this.events.publish('user:login');
                    //this.navCtrl.push(MainPage);
                    
                }, (err=> {
                    this.userData.setLoggedIn(false);
                    console.log("Not already authorized");
                    this.events.publish('user:logout');
                    this.loading.dismiss().catch(() => {});
                });
            }

            this.loading.dismiss();  ==> 2) 시작과 동시에 로딩화면 없애버림 
        });
        
        
    }


=====변경하기
    ionViewDidLoad() {
        console.log("LOGIN.ts ionViewDidLoad");
        this.showLoader();

        //저장소에 저장되어 있는 정보를 로그인 폼에 표시
        //username 설정
        this.userData.getUsername().then(data => {
            this.login.username = data;
        });

        //저장된 비밀번호 TODO: 제거
        this.userData.getPassword().then(data => {
            this.login.password = data;
        });

        //현재 로그인 정보가 있으면 인증정보 유효성 체크
        this.userData.hasLoggedIn().then((hasLoggedIn=> {
            
            console.log("load first hasLoggedIn:"+hasLoggedIn);
            if(hasLoggedIn){
                this.authService.checkAuthentication().then((res=> {
                    console.log("Already authorized trigger user:login event and go main");
                    this.loading.dismiss().catch(() => {});
                    this.events.publish('user:login');
                    
                }, (err=> {
                    this.userData.setLoggedIn(false);
                    console.log("Not already authorized");
                    this.events.publish('user:logout');
                    this.loading.dismiss().catch(() => {});
                });
            }
        });
    }




1 2 3 4 5 6 7 8 9 10 다음