EF(Entity framework)를 사용하다 보면 가장 불편한 것이 정렬입니다. 앵? '.OrderBy', 'OrderByDescending' 하면 되는데요? 맞습니다. 문제는 일반적인 게시판의 정렬처럼 조건이 다양한 정렬의 경우 각각 오더바이(Orderby)를 따로 호출해야 한다는 것입니다. 1. 문제의 시작 아래는 일반적인 게시판을 정렬하기 위한 코드입니다. switch (sColumn) { case "idTestOrderBy": if(true == bAsc) { iqTO = iqTO.OrderBy(ob => ob.idTestOrderBy); } else { iqTO = iqTO.OrderByDescending(ob => ob.idTestOrderBy); } break; case "Str": if..
ARM 버전은 수동으로 설치해야 된다고 알고 있었는데....... 자동으로 잘만 설치됩니다. 당연히 오드로이드에서도 설치 잘됩니다. 주의해야 할 점은 우분투 소프트웨어 업데이트 설정에 따라 설치가 안 되거나 실행이 안 될 수 있습니다. 0. 설치전 확인 우분투에서 apt로 무언가 설치할 때는 설치하기 전에 가급적 업데이트를 해주는 것이 좋습니다. sudo apt update sudo apt upgrade 1. 표준 설치 Ubuntu 22.04에 .NET SDK 또는 .NET 런타임 설치 참고 : MS Learn - Ubuntu 22.04에 .NET SDK 또는 .NET 런타임 설치 SDK를 설치하는 경우 sudo apt-get update && \ sudo apt-get install -y dotnet-..
윈도우에서 콘솔을 열면 파워셸(power shell)이 기본으로 실행됩니다. 그러다 보니 비주얼 스튜디오(Visual Studio)에서도 터미널을 열면 파워셸입니다. 그런데 가끔 파워셸에서 문제가 발생할 때가 있는데..... (거의 경로 문제나 권한 문제인 경우가 많다.) 이럴 때 이게 배시(bash)에서도 같은 오류가 나는지 확인하고 진행하고 싶을 때가 있습니다. 비주얼 스튜디오에 'Git Bash'를 설정하여 사용해 봅시다. 1. 비주얼 스튜디오에서 터미널 열기 비주얼 스튜디오에서 솔루션 탐색기 > 해당 위치에서 오른쪽 클릭 > 터미널에서 열기 를 선택하여 터미널을 열면 자동으로 해당 경로에서부터 터미널이 시작됩니다. 2. 터미널에 '깃 배시(Git bash)' 추가하기 윈도우에서 '배시'를 사용하기..
우분투에서 부팅시 스크립트 실행하는 기능에 대한 글은 많습니다. 몇가지 빼고는 우분투 마테에서도 동작합니다. 저는 UI로 설정하는 방법을 정리했습니다. 1. 시작 프로그램(Startup Applications) 위치 아래 메뉴를 선택합니다. Menu > Preferences > Startup Applications 2. 시작 프로그램 추가하기 'Add'버튼을 누릅니다. 'Name'에 표시할 이름을 넣어줍니다. 'Command'란에 원하는 명령어를 작성합니다. 재부팅을 해보면 명령어가 실행된걸 확인 할 수 있습니다. 마무리 저는 명령어 사용하는 것보다 GUI를 이용하는게 더 직관적이라고 생각되는데 말이죠 ㅎㅎㅎㅎ 각자 취향아니겠습니까?
예전부터 정규식 개체(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) 지정된 종결 문자가 올 때(함수별로 차이 있음)..