지돌이의 블로그 입니다!

전 개발자입니다.

하마터면 rexpert한테 두손두발 다 들 뻔했지만..

그래도.. 승리 하였습니다ㅠㅠ

 

 

 

*** 근데 아래 보기전에.... 먼저.... ***

 

혹시 IE를 쓰는데 안된다면 사용하시는거가 No-add on 모드로 실행중인지 확인해 보시기 바랍니다.

그럼 안돼요...

 

https://www.thewindowsclub.com/run-internet-explorer-8-in-no-add-ons-mode

 

Run Internet Explorer in No Add-ons mode

To troubleshoot incompatible browser add-ons or extensions, run Internet Explorer in No Addons mode. The No add-ons mode in IE is rather useful.

www.thewindowsclub.com

위 화면 비슷하게 한글로 나온다면 No-add on 모드입니다.

 

바탕화면에 있는 "Internet Explorer (No add-no)" 바로가기를 복사해서 하나 더 만든다음에

우클릭 -> 속성 해서 맨 뒤에 "-extoff"를 지워주세요.

그리고 그걸로 실행하심 됩니다.

 

*** 이걸로 안된다면... ***

 

 

sen.k-teacher.or.kr 의 경우 Rexpert 1.0.0.391 버전을 사용한다고 쓰여있습니다.

다운받아서 디지털서명을 확인해 보면 무려 2010년 11월 5일에 서명된 프로그램입니다..

 

Rexpert30Viewer를 다운받아서 설치하면 C:\Program Files (x86)\clipsoft\rexpert30\bin\viewer 에 설치됩니다.

 

RexViewerCtrl30.ocx는 ActiveX기반으로 IE를 위한것으로 보이고

nprexpert3.0.plugin.dll은 Chrome을 위한 NPAPI플러그인입니다.

 

하지만.. 설치를 해도 무한 설치페이지로 이동하며 동작하지 않습니다.

Windows 7/10, IE11, Chrome 모두 그렇습니다.

 

Chrome Plugin은 NPAPI기반이라 당연히 현재 버전에서는 동작하지 않습니다.

NPAPI는 오래전에 삭제되기 시작하여 현재 버전에서는 완전히 제외되었습니다.

 

암튼... (별 시덥잖치도 않게 난독화된) Javascript도 뜯어보고 별 삽질을 다 하다가..

Chrome NPAPI를 적용하기로 해보고..

 

누군가 우리나라의 이러한 개탄스러운 상황(아래 크롬 빌드자의 발언입니다)에 안타까워 NPAPI 사용가능한 Chromed을 빌드해 올려놓으신 분이 계셔 사용해 보았습니다.

 

*STEP 0. 삭제..

IE가 켜져있으면 정상 설치가 안될 수 있으니 IE와 모든 브라우저를 닫고

C:\Program Files (x86)\clipsoft\rexpert30\bin\viewer

여기서 uninstall.rexpert30viewer.exe 을 실행해 기존버전을 삭제합니다.

 

STEP 1. NPAPI활성화된 Chromium다운로드

https://github.com/korusdipl/chromium-internal/releases

 

korusdipl/chromium-internal

Chromium self-build for Internal Use. Contribute to korusdipl/chromium-internal development by creating an account on GitHub.

github.com

 

여기서 두번째 32bit용 Chromium (42버전)을 다운받고 압축을 풉니다.

Chromium-42.0.2311.154-ia32.7z 을 받으시면 되며 7-Zip등으로 압축푸시면 됩니다.

 

STEP 2. Rexpert 설치

*절대* http://sen.k-teacher.or.kr/에서 배포하는 프로그램을 받으면 안됩니다... Chrome에서 "지원하지 않는 플러그인 입니다."라고 오류가 뜹니다.

nprexpert3.0.plugin.dll 버전이 1.0.0.1 으로 뜨는걸로 보아 개발사의 실수로 잘못 빌드되었거나 옛날 파일이 들어간거 같습니다.

 

STEP 1, 2 순서를 지켜야 합니다. STEP 2의 chrome.exe을 실행하기 전에 먼저 Rexpert를 설치해야 합니다.

 

http://tech.clipsoft.co.kr/RexServer30/cab/download/setup.jsp?version=

 

REXPERT VIEWER

REXPERT Viewer Ver: 1.0.0.0

tech.clipsoft.co.kr

위 사이트에서 받아 설치합니다.

 

 

STEP 3. Chromium을 관리자모드로 실행

 

압축 푼 폴더에서 chrome.exe를 우클릭하여 "관리자모드로 실행"합니다.

 

그리고 chrome://flags 에서 NPAPI를 활성화합니다.

위같이 나오면 "사용"을 누르시면 됩니다.

 

 

STEP 4. 해당 사이트에 접속합니다.

위 화면을 보더라도 절망하지 마시고.. (현대 버전의 크롬은 주소표시줄에서 허용을 해야 해서 그것만 주구장장 눌렀는데 안되서 전 절망할 뻔... 했지만)

 

바로 저 회색화면에서 우클릭하여 "이 플러그인 실행"을 클릭합니다.

 

STEP 5. 이제 더이상 스트레스 받지 말고 필요한 일 하시면 됩니다.

 

그리고 지금 이 상황이 화가나신다면 해당 사이트에 문의에 개선을 요망하는 글을 올려주세요...

 

아래와 같이..

 

HTML 5 표준을 지향하는 현대 인터넷 브라우져 시대에 이 무슨 시대에 뒤떨어지는 사이트와 프로그램인가요..

사이트만 번지르르하게 만들지 말고 이러한 것들도 개선해 주시기 바랍니다.

우리나라의 특성상 플러그인을 버릴 수 없다면.. 다른 정부 사이트들처럼 WebSocket을 이용한 Cross-browser프로그램이라도 개발해 주시기 바랍니다.

 

제발...

'일상' 카테고리의 다른 글

sen.k-teacher.or.kr Rexpert30Viewer 보기  (0) 2019.11.29

Comment +0

BTRFS 복구

개발 및 운영2019. 11. 22. 16:05

https://ownyourbits.com/2019/03/03/how-to-recover-a-btrfs-partition/

 

잘 설명되어있는 사이트!

 

# btrfs restore /dev/sdXY /restore/

 

마운트가 안되는 상태에서 위 명령어로 복구 가능

 

--- 아래는 번역

 

오류가 나면... 먼저 scrubing을 시도 합니다. 체크섬을 사용하여 데이터 무결성을 검사하고 손상된 데이터를 복구하려고 시도합니다. scrubing는 안전한 것으로 간주되며 일반적으로 가장 먼저 시도해야 합니다.

 

scrub 시작

# btrfs scrub start /mnt

 

scrub 상태보기

# btrfs scrub status /mnt

 

일반적으로 몇 시간이 걸립니다

이렇게 하면 가능한 한 많이 해결되지만 모든 문제를 해결하지 못할 수도 있습니다. 오류가 발생한 경우 안전을 위해 다시 복사하십시오. 아마도 우리는 많은 파일을 고쳤을 것이고 아마도 모든 파일을 고쳤을 것입니다.

 

 

... 원문을 보시길..ㅜㅜ

 

무엇보다... RAID를 쓰는 것 중요합니다. (RAID-1 이상)

그리고 RAID카드에 Backup Battrry도 꼭 다시구..

UPS는 필수입니다!

Comment +0

Kubernetes에서 사용할 Deployment/Service설정 yaml을 온라인 상에서 GUI로 만들 수 있게ㅜ도와주는걸 만들었습니다.

 

https://jc-lab.github.io/auto-generator/#/

 

kube-yaml-generator

 

jc-lab.github.io

 

github에 소스 공개되어 있으니 기능 추가 및 개선 PR주심 넘나 감사!

 

 

https://github.com/jc-lab/auto-generator/

 

jc-lab/auto-generator

Contribute to jc-lab/auto-generator development by creating an account on GitHub.

github.com

 

Comment +0

openpgp을 사용하는 프로젝트를 webpack으로 번들링하면 아래와 같은 오류가 발생한다.

Error: Cannot find module 'stream'
    at o (/bundle.js:4293:292)
    at /bundle.js:4293:449
    at Object.<anonymous> (/bundle.js:28885:38)
    at Object.76.stream (/bundle.js:28943:4)
    at o (/bundle.js:4293:398)
    at /bundle.js:4293:449
    at Object.<anonymous> (/bundle.js:28422:13)
    at Object.75../node-conversions (/bundle.js:28875:4)
    at o (/bundle.js:4293:398)
    at /bundle.js:4293:449

이런 경우 Webpack에서 openpgp패키지의 dist대신 src를 쓰게 하고

const webpack = require('webpack');
const path = require('path');

module.exports = {
    target: 'node',
    mode: 'production',
    entry: {
        main: './src/index.ts'
    },
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
        libraryTarget: 'commonjs2'
    },
    devtool: 'source-map',
    resolve: {
        extensions: ['.ts', '.tsx', '.js'],
        alias: {
            '@src': path.resolve(__dirname, 'src')
        }
    },
    externals: {
        'crypto': 'commonjs crypto',
        'fs': 'commonjs fs',
        'stream': 'commonjs stream'
    },
    module: {
        rules: [
            // all files with a `.ts` or `.tsx` extension will be handled by `ts-loader`
            { test: /\.tsx?$/, loader: "ts-loader" },

            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: /node_modules\/(?!(openpgp)\/).*/,
                include: [
                    path.resolve(__dirname, "src"),
                    path.resolve(__dirname, "node_modules/openpgp")
                ],
                options: {
                    plugins: ['dynamic-import-webpack']
                }
            },
        ]
    },
    resolve: {
        modules: ['node_modules', 'src'],
        extensions: ['.js', '.json', '.jsx', '.ts'],
        alias: {
            openpgp: 'openpgp/src/index.js',
            'tweetnacl/nacl-fast-light.js': 'tweetnacl/nacl-fast.js'
        }
    },
    plugins: [
        new webpack.ContextReplacementPlugin(
            /openpgp/,
            '',
            {
                crypto: 'crypto',
                stream: 'stream',
                buffer: 'buffer',
                zlib: 'zlib',
                util: 'util'
            }
        )
    ],
    optimization: {
        minimize: false
    }
};

 

필요한 dependency들을 추가해주면 된다.

package.json의 dependencies에

    "asmcrypto.js": "github:openpgpjs/asmcrypto#6e4e407b9b8ae317925a9e677cc7b4de3e447e83",
    "elliptic": "github:openpgpjs/elliptic#6b7801573b8940a49e7b8253176ece2725841efd",
    "email-addresses": "github:openpgpjs/email-addresses#686743c6452b44bafcd06d47db7f36ddf3f3f118",

추가한다.

(주의할점은 그냥 npm install 으로 설치하면 안되고 openpgpjs의 github 리포지터리에서 가져와야 한다. 기존의 패키지를 openpgp에서 수정해서 쓰는것이기 때문)

그리고

$ npm update

$ npm install --save web-stream-tools tweetnacl text-encoding-utf-8 @mattiasbuelens/web-streams-polyfill

Comment +0

 INFO  Launching Electron...
internal/modules/cjs/loader.js:630
    throw err;
    ^
Error: Cannot find module 'electron'
Require stack:
- ...\electron-output\index.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:627:15)
    at Function.Module._load (internal/modules/cjs/loader.js:531:27)
    at Module.require (internal/modules/cjs/loader.js:685:19)
    at require (internal/modules/cjs/helpers.js:16:16)
    at eval (webpack:///external_%22electron%22?:1:18)
    at Object.electron (...\electron-output\index.js:2146:1)
    at __webpack_require__ (...\electron-output\index.js:20:30)
    at eval (webpack:///./background/background.ts?:3:66)
    at Module../background/background.ts (...\electron-output\index.js:133:1)
    at __webpack_require__ (...\electron-output\index.js:20:30) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    ...\\electron-output\\index.js'
  ]
}
Done in 26.02s.

ELECTRON_RUN_AS_NODE 환경변수를 확인해 보아야 한다.

(Windows 환경임)

> set ELECTRON_RUN_AS_NODE=0

이건 node로 실행하지 않겠다는 뜻이지만...

> set ELECTRON_RUN_AS_NODE=0

이게 있으면 위와 같은 문제가 발생한다...ㅠㅠ 겁나 삽질함....

Comment +0