예전부터 정규식 개체(Regexp)를 사용할 때 값이 제대로 일치하다 말다 한다는 생각을 많이 했습니다. 그래서 가급적 정규식 개체를 사용하지 않았는데...... 의외로 원인은 쉬운 곳에 있었습니다. 1. 문제의 발견 아래와 같이 정규식 개체를 만들고 /** 정규식 개체 */ reg = /\{\{[a-zA-Z0-9]+:[a-zA-Z0-9]+\}\}|\{\{[a-zA-Z0-9]+\}\}/g /** 테스트 문자열 */ testString = "{{test001}}, {{test001:test1}}, {{test001:a}}, {{aa}}"; 아래와 같이 정규식 개체를 사용하는 함수를 만들어 줍니다. private F1(): void { console.log("F1 : " + this.reg.exec(this..
오드로이드(Odroid)용 리눅스는 우분트 마테(Ubuntu MATE)가 제공됩니다. 우분트 마테는 처음 써보는 데다 'ARM64'버전이라 신경 써야 할 것이 좀 있습니다. 내용 자체는 오드로이드 기준입니다만.... 'ARM64'를 쓰는 기계라면 동일할 것입니다. 1. 'ARM64'용 팀뷰어 다운로드 리눅스용 'ARM64'버전을 다운로드받아야 합니다. 다운로드 - TeamViewer - Download Linux page 우분투(Ubuntu) > arm64-64bit 을 다운받습니다. 1. 설치 다운로드받은 파일의 경로로 가서 아래 명령어로 설치를 시작합니다. dpkg -i teamviewer-host_15.40.8_arm64.deb 슈퍼유저(superuser) 권한이 없다고 에러가 나면 'sudo'를 ..
.NET 4.x에서 'SocketAsyncEventArgs'를 쓰다가 그대로 .NET 5로 업그레이드하면 'Completed'이벤트가 오지 않는 현상이 있습니다.(참고 : github - DGSocketAssist/DGSocketAssist1/) 아래 스크린 샷은 .NET 4에서 만든 'SocketAsyncEventArgs'를 .NET 5에서 사용한 경우입니다.'SaeaSend_Completed'이벤트가 오지 않은 걸 확인할 수 있습니다. 아래 스크린 샷은 .NET 4에서 정상 작동한 경우입니다. 이것은 .NET 5부터 'ReceiveAsync', 'SendAsync'가 동기로 동작하기 때문입니다.이 포스팅은 'ReceiveAsync'을 기준으로 설명합니다.('SendAsync'도 똑같기 때문) 연관글..
우분투 마테의 종료 지연시간은 60초입니다. 이게 일반 PC용이면 큰 문제가 없겠지만 산업용 보드에서 이렇게 길게 대기를 할 수 없으므로 시간을 줄여봅시다. 1. 세션(Session) 타임아웃(Timeout) 지정 아래 명령어를 통해 세션 타임아웃을 지정해 줍니다. gsettings set org.mate.session logout-timeout [시간(초)] # 예 - 10초 gsettings set org.mate.session logout-timeout 10 2. 파일 수정(안됨) '/etc/systemd/sysyem.conf' 파일의 'DefaultTimeoutStopSec'를 수정해도 된다는데.... OS 버전 문제인지 저는 되지 않았습니다. (참고 : learnubuntumate.weebly...
부팅 시 실행시킬 셸 스크립트를 만들었는데...... 이게 창이 안 열리고 실행됩니다. 로그에는 실행됐다고 나오는데 이게 잘 돌아가고 있는 건지 만건지;;;; 그래서 새 터미널 창을 열어서 실행시키는 방법을 정리했습니다. 1. 기본 사용 방법 우분투 마테에서는 새 터미널 창을 여는 명령은 다음과 같습니다. mate-terminal -e [실행할 명령] # 예제 mate-terminal -e /home/odroid/CronTest.sh 2. 옵션 추가 옵션을 넣어 실행하려면 따옴표(')로 묶어야 합니다. mate-terminal -e '[실행할 명령]' # 예제 mate-terminal -e 'bash /CronTest.sh' 마무리 왜 리눅스 버전마다 터미널 여는 명령어가 약간씩 다른 걸까요...?
'Serial.read()'로 읽어서 쓸 때는 이런 현상이 없습니다. 그런데 'Serial.readBytesUntil()'를 사용하여 데이터를 읽었더니 1초 정도 반응이 느린 듯한 느낌을 받았습니다. 아래 스크린샷을 보면 연속으로 명령을 보냈는데 묘하게 다음 요청의 응답이 오는데 1초가량의 텀이 있는 것 처럼 보입니다. 문제없는 스크린샷을 보면 좀 더 명확해집니다. 이건 각 명령어의 텀이 없습니다. 1. 원인 문서를 확인해 보았습니다. arduino reference - Serial.readBytesUntil() 문서에 보니 1) 결정된 길이를 읽거나(지정된 버퍼를 채울 때까지) 2) 지정된 시간이 초과하거거나( Serial.setTimeout() ) 3) 지정된 종결 문자가 올 때(함수별로 차이 있음)..
우분투(Ubuntu) 자동로그인 설정이 안 먹어서 오드로이드(Odroid)로 검색했더니 바로 나오네요...... 참고 : Odroid 영문 포럼 - Activating Autologin 우분투와 설정이 다른데... 우분투 마테(Ubuntu MATE)의 설정이 다른 거 같습니다. 1. 15.10 이전 버전 확인된 건 15.10 버전이지만 18버전 이전까지는 똑같지 않았을까 생각됩니다. 아래 파일을 열어 /usr/share/lightdm/lightdm.conf.d/60-lightdm-gtk-greeter.conf 아래 코드를 추가해 줍니다. autologin-user=odroid 2. 18.04 이후 버전 18.04 버전부터는 /usr/share/lightdm/lightdm.conf.d/50-ubuntu-m..
원인이 다양한 에러 중의 하나가 500.30 에러입니다. 500에러가 대부분 그렇지만 일단 '이벤트 뷰어'로 상세한 정보가 있는지 확인해야 합니다. 이 포스팅은 다른 원인을 발견할 때마다 추가하고 있습니다. 1. 디렉터리 없음 루트 디렉터리를 찾지 못해 발생하는 오류입니다. exception code = '0xe0434352'. System.IO.DirectoryNotFoundException ASP.NET의 경우 'wwwroot'가 기본 폴더인데 이게 없을 때 주로 발생합니다. (만약 루트 디렉터리를 변경했다면 변경한 디렉터리가 없으면 에러가 납니다.) 위 스크린샷의 경우 루트디렉터리가 'wwwroot\production-home'인데 이것을 안 만들어서 이 에러가 발생했습니다. 2. SQL 서버 연결..
닷넷은 사운드 처리가 개떡 같습니다. 'SoundPlayer'는 멀티플랫폼에서 동작하지 않습니다. 이 꼬라지인 이유를 아직도 모르겠습니다... (최소한 기본 구현은 있어야 하는 게 아닌지....) 특히 크로스 플랫폼 작업 시 선택지가 애매해지는데...... 그나마 쓸 수 있는 가벼운 라이브러리인 'NetCoreAudio'를 소개합니다. 1. 'NetCoreAudio' 특징 이 라이브러리는 여러 플랫폼에 사용할 수 있습니다. 단점은 기본 사운드 API인 'SoundPlayer'처럼 한 번에 하나뿐이 재생을 못 합니다. 자세한 분석은 '3. 분석'에서 하겠습니다. 2. 설치 및 사용 누겟(NuGet)에서 'NetCoreAudio'를 찾아 설치해 줍니다. 간단한 예제 기본 예제는 잘되어 있습니다. 참고 : g..
그냥 정리하고 만다. 검색하면 바로 나오는 내용이라 신경을 안쓰고 있었는데.... 비주얼 스튜디오를 업데이트했더니 또 지멋대로 옵션이 초기화됐습니다.-_-;;;; 백업한걸 복구했는데도 이 옵션을 꺼져있네요;;;; 그래서 그냥 정리해 둡니다. 옵션 위치 비주얼 스튜디오에서 한번 클릭으로 파일이 열리는 기능이 있습니다. (기본 옵션에 활성화 되어있습니다.) 이게 파일 선택할 때마다 미리보기로 열리는 것이라 불편합니다. 이걸 더블클릭으로만 열리게 하려면 도구 > 옵션 > 환경 > 탭 및 창 > 미리 보기 탭 에서 "미리 보기 탭에서 새 파일을 열 수 있음" 옵션을 꺼준다. 마무리 전 이 기능 불편해서 매번 끄는데 왜 디폴트로 있는지 잘 모르겠습니다. 비주얼 스튜디오를 업데이트하기 전에 옵션 백업 꼭해두시기 바..