GUI sin

1. 주소란에 다음을 입력하고, 크롬 버전이 74 이상인지 확인합니다.

또는, 크롬 우측상단의 ፧ 버튼 > 도움말 > Chrome 정보 를 눌러도 됩니다.

1
chrome://settings/help
cs

 

크롬 버전이 74 이상인지 확인

 

2. 크롬의 단축아이콘에서 마우스 오른쪽 버튼을 누른뒤에 속성에 들어갑니다.

 

크롬이 윈도우 작업표시줄에 올려져 있어서 속성버튼이 보이지 않으면, 마우스 오른쪽 버튼을 두번 눌러서 접근이 가능합니다.

 

크롬의 속성

3. 대상(T)의 값의 뒤에 (한칸 띄고)--force-dark-mode 를 넣어줍니다.

1
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --force-dark-mode
cs

 

4. 크롬을 다시시작 합니다.

 

Comment +0

개인 NAS(AS-602T) 의 PostgreSQL 9.3.2 에서 적용했던 내용을 바탕으로 끄적였습니다.


다음의 두개의 파일을 수정해 주면 된다는데,

( 참고 : http://justckh.blogspot.com/2013/10/postgresql-ip.html )


postgresql.conf

pg_hba.conf


저는 개인 NAS를 사용하기 때문에 해당 파일의 위치가 윈도우나 리눅스 계열 등의 일반적인 환경과 달라서 파일의 위치는 find 명령으로 찾아봤습니다.


1
2
3
4
5
6
7
$ cd /
$ find -name 'postgresql.conf'
find: ./.dbus: Permission denied
./volume1/.@plugins/AppCentral/postgresql/pgha/doc/slaveDB/postgresql.conf
./volume1/.@plugins/AppCentral/postgresql/pgha/doc/masterDB/postgresql.conf
./volume1/PostgreSQL/postgresql.conf
./share/PostgreSQL/postgresql.conf
cs


1
2
3
4
5
6
$ find -name 'pg_hba.conf'
find: ./.dbus: Permission denied
./volume1/.@plugins/AppCentral/postgresql/pgha/doc/slaveDB/pg_hba.conf
./volume1/.@plugins/AppCentral/postgresql/pgha/doc/masterDB/pg_hba.conf
./volume1/PostgreSQL/pg_hba.conf
./share/PostgreSQL/pg_hba.conf
cs


각각 다음의 위치에서 발견되었네요.


./volume1/PostgreSQL/postgresql.conf

./volume1/PostgreSQL/pg_hba.conf


postgresql.conf 파일을 수정합니다.


1
 $ vi /volume1/PostgreSQL/postgresql.conf
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
 
# - Connection Settings -
 
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
#port = 5432                            # (change requires restart)
port = 5432                             # (change requires restart)
max_connections = 100                   # (change requires restart)
# Note:  Increasing max_connections costs ~400 bytes of shared memory per
cs



pg_hba.conf 를 수정합니다.


1
$ vi /volume1/PostgreSQL/pg_hba.conf
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# TYPE  DATABASE        USER            ADDRESS                 METHOD
 
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     admin                                md5
#host    replication     admin        127.0.0.1/32            md5
#host    replication     admin        ::1/128                 md5
 
host    all             all             0.0.0.0/0               md5
cs


여기에서 주의할 점이 있는데, md5 라고 명시되어있는 부분을 함부로 trust 라고 변경하면 큰일 날수 있습니다. 그냥 인터넷에서 검색해서 해보니 몇몇 블로그에선 저 부분을 그냥 trust 라고 적어놔서 그냥 따라해보니, 별도의 인증과정 없이 마구 접속이 됩니다. 큰일날뻔 했습니다. ㅠ_ㅜ


pg_hba.conf 상세설명(펼쳐보기)


DataGrip 에서 설정해 봤습니다.






1
alter user admin with password '????????';
cs


admin 유저의 암호를 변경해주고, 꼬옥 기억을 합시다.^^

Comment +0


1
2
The default sound device cannot be opened:
A device ID has been used that is out of range for your system. Sound will be disconnected.
cs

오랜만에 Ubuntu를 Vmware에 설치했는데, 위와 같은 오류 메시지가 나옵니다.


번역하자면,

"기본 사운드 장치를 열 수 없습니다.

시스템의 범위를 벗어난 장치 ID가 사용되었습니다. 소리가 끊어집니다."

라는데,

도무지 원인을 찾을수가 없더군요.





결국 원인은 윈도우의 스테레오 믹스가 비활성화 되어서 그렇다더군요.

작업표시줄의 스피커 아이콘에 마우스 오른쪽 버튼을 눌러서 나오는 팝업 메뉴의 '소리'를 선택하면 '소리' 윈도우가 나오고,  '녹음'탭을 선택합니다.

위의 그림처험 활성화 시켜주는 것으로 문제는 간단히 해결됩니다.


출처 : https://kb.vmware.com/s/article/2086551

Comment +0

파일을 읽어 한글 추출하기


갑작스러운 오더에 이걸 어떻게 처리할까 고민하자마자 떠오른건 요즘 출퇴근 시간마다 공부했던 파이썬 이면 다른 언어보다 매우 간단하게 만들수 있을것 같다는 생각이 들더군요.


"주문 : MessageBox 가 포함된 모든 구문을 찾아 한글로 하드코딩 되어있는 부분을 모두 추출해 주세요.(추후 다국어 버전 지원을 위함)"


우선 파워빌더의 검색기능으로 어렵지 않게 MessageBox가 포함된 구문을 찾아서 msg.txt 라는 파일로 저장하고, 지난 3일동안 출퇴근길에서 갈고닦은 실력으로 한번 코딩해봤습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import re
 
= open("D:/msg.txt"'r', encoding='UTF8')
 
lines = f.readlines()
for line in lines:
    line = line.lower()
    find = line.find("messagebox")
    if not find:
        continue
    line = line[find + 10:]
    hangul = re.compile('[^ㄱ-ㅣ가-힣]+')
    result = hangul.sub('', line)
    if not result:
        continue
    print(line.strip())
f.close()
cs


시작한지 30분만에 완성!!!


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
C:\ProgramData\Anaconda3\python.exe D:/src/py/test.py
'    (오전 9:42:51)
사용 object
('알림','서버에 연결할수 없습니다.....! ~n~n인터넷 연결을 확인하시오.....! ~n~n~n' + trhicom.sqlerrtext)
('알림','db조회 중 에러발생 ~n' + trhicom.sqlerrtext)
('알림','프로파일의 computer=값을 설정하시오...!')
('알림','자동백업을 체크하시오...! ~n' + string(sqlca.sqlcode) + sqlca.sqlerrtext)
('알림','백업일자을 체크하시오...! ~n' + string(sqlca.sqlcode))
('알림','프로파일의 computer=값을 설정하시오...!')
('알림','자동백업을 체크하시오...! ~n' + string(sqlca.sqlcode))
('알림','백업일자을 체크하시오...! ~n' + string(sqlca.sqlcode))
("db 연결실패", sqlca.sqlerrtext)
("db 연결실패", sqlca.sqlerrtext)
.
.
.
(중략)
.
.
.
(smsg)    //rollback처리함.
('알림', '저장중 오류가 발생 했습니다.')
('확인','변경된 데이타를 저장하겠습니까..?',question!, yesnocancel!,1)
("알림", "정렬설정에 실패하였습니다.")
("알림", "정렬설정에 실패하였습니다.")
('조회조건 변경 오류', ls_rtn)
('확인', '발송된 데이터는 수정/삭제가 불가능합니다.')
('확인', string(ls_partordpk) + '번 주문번호와 관련된 모든 데이타가 삭제됩니다. 삭제하겠습니까 ..? ~n',question!,yesno!,2) = 2 then
smsg  //품목코드를 기준으로 기본데이타를 가져온다
(smsg)    //rollback처리함.
'    (오전 9:42:52)
 
Process finished with exit code 0
cs


이런식으로 추출이 됩니다. 딱 17줄의 코딩으로 이렇게 빠른 결과가 나오다니 너무 편리하네요.


하지만 글을 포스팅하면서 보니 여기저기 버그가 많이 보이네요.


1. 중복처리

2. 파일선택의 유용성


등등


천천히 수정해야겠습니다.






Comment +0

파워빌더에서의 버전관리(version control, revision control), 소스 코드 관리(source code management, SCM)는 정말 너무 불편하고, 번거롭기만 했었습니다.

 

지금까지 저의 경험을 정리해보면,

 

1. 윈도우 공유폴더로 공유 : 직원들과 의사소통으로 형상관리, 뷁!

2. 자체 개발한 버전관리 시스템을 이용 : 각각의 유저들이 Lock을 걸고 사용하는 방식인데, 그나마 가장 편리했네요.

3. 서브버전(Subversion) : 추가 확장(PBSCC Proxy)와 함께 이용했는데 많이 불안합니다.

4. 파워빌더 자체 내장(PB Native) : 위의 2번 다음으로 유용하지만, 아주 기초적인 Lock 방식 정도만 사용가능한 수준

 

이런 방법등을 사용해보니, 그나마 2번의 경우가 무난히 사용할수 있었지만, 그마저도 이직한뒤엔 사용할수가 없게되니 너무 답답하더군요. 그러던중 파워빌더 2017 R2 이상에서 Git 과 Subversion 이 자체 내장되어 있다는 소식을 듣고 한번 세팅에 도전 해봤습니다. 물론 이전에도 Git 을 지원하는 add-on 같은게 있었는데, 상당히 불안정 하거나 유료였던 기억이 나네요.

 

< 준비물 >

1. 파워빌더 2017 R2 이상 : 이 문서는 파워빌더 2017 R3로 작성하였는데, R2 버전에서도 사용해봤지만, 2017 일반 버전에선 확인해보지 못했습니다.

2. 원격저장소 : GitHub, GitLab 등, 각각의 특징을 파악하시고 가입하세요. 둘다 기본적인 기능은 무료입니다.

3. Git Client (옵션) : https://git-scm.com/ 에서 다운로드 받을수 있습니다. 이게 필수적으로 꼭 필요한줄 알았는데, 파워빌더 자체 내장되어있다보니 특별히 필요는 없더군요. 당연히 Git 의 기초지식이 있다면 더 쉽게 이해할수 있을겁니다.

 

< 파워빌더에서 Git 설정 >

 

00. 파워빌더에서 적당한 위치에 WorkSpace, Target 등을 구성했습니다.

  • 폴더위치 : C:\src\2017R3\test
  • WorkSpace : test
  • Target : test

 

[그림 1-1] 좌측의 System Tree - WorkSpace 에 마우스 오른쪽 버튼을 누르면 팝업 윈도우가 나타납니다. Add to Source Control 을 선택합니다.

 

[그림 2-1]  Git 을 선택하고 OK 버튼을 클릭합니다.

 

[그림 3-1]  발행자와 Email을 입력합니다.

 

[그림 4-1] Comment에 Commit 메시지를 입력하고 OK 를 클릭합니다.

Git 을 초기화 하면서 Target에 속해있는 각각의 pbl들은 ws_objects 라는 폴더안의 pbl의 이름과 동일한 폴더가 만들어지고, 각각의 Object들은 마치 Export 한것처럼 파일로 만들어지게 됩니다. [그림 4-1] 참고.

 

 

[그림 5-1] Output 에 메시지가 출력되고, System Tree의 각각의 Object 의 아이콘 왼쪽에 초록색 점이 하나씩 생겨났습니다. Git 의 Local 저장소 초기화가 완료되었다는 뜻입니다.

 

 

[그림 6-1] w_test_main Window Object 에 스크립트를 넣고 저장을 하게되면 아이콘이 초록색 V 모양으로 바뀐걸 볼수 있습니다. 수정되었다는 뜻으로, 되돌리거나 비교할수 있습니다. 

초록색 Check 아이콘을 Lock을 걸었다는 뜻으로 오해할수 있는데, Git 은 과거에 사용해 오던 Lock 방식의 버전관리가 아닙니다. 저처럼 헛갈리지 마세요. 그냥 '수정되었다' 정도로 이해하는게 좋습니다.

 

[그림 7-1] System Tree의 WorkSpace 에서 마우스 오른쪽 버튼을 누르고, Git Commit 을 선택합니다. 위에서 수정한 Object 하나만 나오는걸 볼수 있습니다. 적당한 Commit Comment를 입력하고 OK 버튼을 클릭합니다.

 

여기까지가 Git 의 Local Repository 설정방법이라고 이해하시면 됩니다. 아래부턴 원격 저장소의 설정 방법입니다. GitHub 나 GitLab 에 가입하세요.

 

[그림 8-1] GitHub에 가입하고 초기 대문 화면입니다. 좌측 상단의 초록색 New 버튼을 클릭하거나, 우측 상단의 + 버튼을 클릭하고 New Repository 를 선택합니다.

 

[그림 9-1] 저는 test 라는 원격 저장소를 만들었습니다. 공개 설정은 Private(비공개)로 선택하고, 아래 Create repository 초록색 버튼을 클릭합니다.

 

[그림 10-1] https://github.com/[GitHub ID]/test 와 같은 형식의 저장소 주소가 만들어졌습니다.

 

[그림 11-1] 파워빌더로 돌아와서 우리가 만든 WorkSpace를 원격 저장소로 Upload(Push) 해봅시다. WorkSpace 팝업메뉴에서 Git Push 를 선택합니다.

 

[그림 12-1] 적당히 세팅을 완료하고, Test Connection 을 눌러서 GitHub에 접속이 잘되는지 테스트 해보세요.

 

[그림 13-1] 테스트 접속 성공!!! 했다면, [확인] - [OK] 버튼을 눌러 나의 Source 가 GitHub 로 Push 해주세요.

 

 

 

[그림 14-1] 다시 GitHub로 돌아와 새로고침 해보면 앞서 Push 한 내용들이 Commit 메시지와 함께 잘 올라와 있습니다.

여기까지가 Upload(Push) 였다면, 이제부턴 새로운 저장소를 가져오는(다운로드) 방법에 대해 알아봅시다. 정확히 예기하면 다운로드 라기 보단 Init/Pull 이라고 하는데 일단 그냥 다운로드 라고 칩시다.

 

적당한 위치에 소스를 가져올 폴더를 생성합니다. 저의 경우 C:\test 라는 폴더를 생성했습니다.

 

[그림 15-1] 아무것도 없는 빈 상태의 (No WorkSpace) 에 마우스 오른쪽 버튼을 누르고 나오는 팝업메뉴에서 Connect to Workspace 를 선택합니다.

 

[그림 16-1] Checkout Directory 가 대상 폴더입니다. 위에서 만든 폴더 위치를 선택하고 OK 버튼을 눌러줍니다. 내 GitHub ID가 아니라 다른 ID로도 가능하지만 경우에 따라서 Collaborators(협력자) 권한이 필요할수도 있습니다.

 

[그림 17-1] 이렇게 가져오기가 완료 되었다.

 

제가 이런저런 테스트를 해봤더니, 잘 동작합니다. 아직 Branch 는 해보지 않았지만, 뭐 잘 될거라고 믿고 있습니다.

Comment +0

컬럼들이 블록으로 선택이 되면서,

일반적인 SELECT 등은 정상적으로 동작하는데, 자꾸 아래와 같은 메시지가 출력이 된다.


1
2
3
4
Unable to resolve column 'column name' less... (Ctrl+F1) 
 
Inspection info: This inspection performs unresolved SQL references check.
 
cs


해석하자면,


'열 이름'열을 확인할 수 없습니다 (Ctrl + F1).

검사 정보 :이 검사는 확인되지 않은 SQL 참조 검사를 수행합니다.


라는데, 이게 무슨 뜻인지 모르겠어서 확인해보니,


좌측의 Database 연결정보에서 적당한 스키마를 선택하지 않아서 발생하는 문제였다.

Database 연결에 따른 적절한 스키마를 전체 혹은 일부 선택해 주면 문제가 사라진다.


문제가 없는줄 알았는데, Ctrl 키와 함께 Table을 선택해서 바로이동 하는 등의 동작이 정상 동작 하지 않는다.

Comment +0

이곳에 무엇을 정리할까 다시 고민이 시작되었다.


여기저기 흩어져서 결국엔 하나도 똑바로 못하고 있는것 같아.


주성치, IT관련 정보는 각각의 카페를 만들어놓고


두번 작업할순 없잖아?


생각을 정리할 필요가 있을것 같아.


Comment +0

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
77
78
--USE [TempTable]
--GO
/****** Object:  UserDefinedFunction [dbo].[fn_GetFileInfoInFullPathUsingXml]    Script Date: 2017-01-17 오후 1:43:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-----------------------------------------------------------------------------------------------------------
--  파일경로에서 파일정보 가져오기
--  파일경로 문자열에서 파일명,경로,확장자가지오기(filepath:경로,filename:파일명,extension:확장자)
--  예: SELECT 데이터베이스명.소유자명.fn_GetFileInfoInFullPathUsingXml('filename','test.xml','/')
--  SELECT  dbo.fn_GetFileInfoInFullPathUsingXml('filename','c:/dkdk/test.xml','/')
--  SELECT  dbo.fn_GetFileInfoInFullPathUsingXml('filepath','c:/dkdk/test.xml','/')
--  SELECT  dbo.fn_GetFileInfoInFullPathUsingXml('extension','c:/dkdk/test.xml','/')
-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
-- 프로시저 생성
-----------------------------------------------------------------------------------------------------------
 
ALTER FUNCTION     [dbo].[fn_GetFileInfoInFullPathUsingXml]
(
    @iGubun         NVARCHAR(10),   -- filepath:경로,filename:파일명,extension:확장자
    @iFullPath      NVARCHAR(MAX),
    @iDelimiter     NVARCHAR(10)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
 
 
    DECLARE @wTblSplit AS TABLE
    (
         Seq        INT     IDENTITY(1,1),
         Fragment   NVARCHAR(MAX)
    )
    DECLARE @wFileInfo  NVARCHAR(MAX)
    DECLARE @wXml       XML
    DECLARE @wMax       INT
 
    SELECT  @wFileInfo  = ''
    SELECT  @wMax       = 0
    SET     @wXml       = N'' + REPLACE(@iFullPath, @iDelimiter,''+ ''
 
    INSERT  INTO @wTblSplit(Fragment)
    SELECT  r.value('.','NVARCHAR(MAX)') as item
    FROM    @wXml.nodes('//root/r') as records(r)
 
    SELECT  @wMax   = MAX(Seq) FROM @wTblSplit
    IF  @iGubun = 'filepath'
    BEGIN
        IF  @wMax   = 1
        BEGIN
            SELECT  @wFileInfo = '.'
        END
        ELSE
        BEGIN
            SELECT  @wFileInfo  = COALESCE(@wFileInfo + @iDelimiter + Fragment, Fragment)
            FROM    @wTblSplit
            WHERE   Seq         < @wMax
            ORDER BY Seq
 
            SELECT  @wFileInfo  = SUBSTRING(@wFileInfo,2,LEN(@wFileInfo)) + '/'
        END
    END
    ELSE IF @iGubun = 'filename'
    BEGIN
        SELECT  @wFileInfo = Fragment FROM @wTblSplit WHERE Seq = @wMax
        SELECT  @wFileInfo = SUBSTRING(@wFileInfo,1,CHARINDEX('.',@wFileInfo))
    END
    ELSE IF @iGubun = 'extension'
    BEGIN
        SELECT  @wFileInfo = Fragment FROM @wTblSplit WHERE Seq = @wMax
        SELECT  @wFileInfo = SUBSTRING(@wFileInfo,CHARINDEX('.',@wFileInfo)+1,LEN(@wFileInfo)-CHARINDEX('.',@wFileInfo))
    END
 
    RETURN LTRIM(RTRIM(@wFileInfo))
 
END
cs


11

http://rocabilly.tistory.com/88 에 있던걸 extension 부분만 수정했다.

aaa.bbb.ccc.jpg 처럼 dot('.')이 여러개일경우 오류가 발생할수 있다.

Comment +0