설치 사이트

https://pytorch.org/get-started/locally/

 

Start Locally

Start Locally

pytorch.org

 

cuda 버전 확인

 

파이참  터미널 

nvidia-smi

 

 

 

사이트에 원하는 항목 선택

conda 나 pip 원하는 항목 선택  

가장 아래 커맨드 복사하여 파이참 터미널에 입력

 

설치시작

 

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

 

CPU 버전

pip3 install torch torchvision torchaudio

 

 

설치 완료 확인

import torch

# 텐서 생성 테스트
x = torch.rand(5, 3)
print(x)

# GPU 사용 가능 여부 확인
print(f"CUDA 사용 가능 여부: {torch.cuda.is_available()}")

'공부 > 파이썬' 카테고리의 다른 글

[파이썬] qt designer 연결  (0) 2022.10.06
[파이썬] 프로젝트 생성  (0) 2022.10.06
[파이썬] 설치  (0) 2022.10.06

상황:

DB 백업시 Failed (exit code: 3221225781). 발생

 

 

원인: postgresql 버전차이

postgresql13 쓰다가 16 설치 후 백업시 해당 오류 발생

 

조치:

pgAdmin4 - Preferences - Paths - Binary paths 

C:\Program Files\PostgreSQL\16\bin

 

 

 

출처 : https://stackoverflow.com/questions/77462578/pgadmin-error-when-restoring-database-from-tar-file


tuple 삽입 가져오기

 //데이터 삽입
std::unordered_map <long, std::tuple< int, long, CString >> mapRank;
mapRank[1000] = make_tuple(3, 5, "TEST");

//데이터 가져오기
for (auto info : mapRank)
{
std::tuple_element<0, decltype(info.second)>::type nRank = std::get<0>(info.second);
std::tuple_element<1, decltype(info.second)>::type nCount = std::get<1>(info.second);
std::tuple_element<2, decltype(info.second)>::type strTemp = std::get<2>(info.second);
}


std::tuple_element<0, decltype(mapRank[1000])>::type nRank = std::get<0>(mapRank[1000]);
std::tuple_element<1, decltype(mapRank[1000])>::type nCount = std::get<1>(mapRank[1000]);
std::tuple_element<2, decltype(mapRank[1000])>::type strTemp = std::get<2>(mapRank[1000]);

 

 

tuple 정렬

#define TRIPLE_PAIR std::pair<long, std::tuple< int, long, CString >>

bool CompareRank(const TRIPLE_PAIR& a, const TRIPLE_PAIR& b) {
//if (a.second.second == b.second.second) return a.second < b.second;
std::tuple_element<1, decltype(a.second)>::type nNum1 = std::get<1>(a.second);
std::tuple_element<1, decltype(b.second)>::type nNum2 = std::get<1>(b.second);
return nNum1 > nNum2;
}

void CalcRank()
{

std::unordered_map <long, std::tuple< int, long, CString >> mapRank
mapRank[1000] = make_tuple(3, 5, "TEST");

//정렬
std::vector <TRIPLE_PAIR> vecTemp(mapRank.begin(), mapRank.end());
sort(vecTemp.begin(), vecTemp.end(), CompareRank);

//해당 분류결함의 순위와 개수 찾기
for (int i = 0; i < vecTemp.size(); i++)
{
std::tuple_element<1, decltype(vecTemp[i].second)>::type nTemp = std::get<1>(vecTemp[i].second);
int nRank = nTemp;
}

}

 

 

 

 

Pair 삽입 가져오기

//데이터 삽입
std::unordered_map<long, std::pair<int, long>> mapRank;
mapRank.clear();
mapRank[1000] = make_pair(0,0);

//데이터 가져오기
int nRank =  mapRank[1000] .first;
long lCount =  mapRank[1000] .second;

 

 

 

Pair 정렬

#define DOULBE_PAIR std::pair<long, std::pair<int, long>>
bool Compare(const DOULBE_PAIR& a, const DOULBE_PAIR& b) {
//if (a.second.second == b.second.second) return a.second < b.second;
return a.second.second > b.second.second;
}

void CalcRank()
{
std::unordered_map<long, std::pair<int, long>> mapRank;
mapRank.clear();

mapRank[1000] = make_pair(0,0);


//분류별 결함 정렬
std::vector <DOULBE_PAIR> vecTemp(mapRank.begin() , mapRank.end());
sort(vecTemp.begin(), vecTemp.end(), Compare);


for (int i = 0 ; i < vecTemp.size(); i++)
{
int nRank = vecTemp[i].second.first;
long lCount = vecTemp[i].second.second;
}
}

 

 

참조 : https://psychoria.tistory.com/entry/C-11-stdpair%EB%A5%BC-%ED%99%95%EC%9E%A5%ED%95%9C-stdtuple

 

DateTimePicker 값 설정 , 불러오기 

 

값 설정하기

리소스 아이디 : IDC_DATETIMEPICKER_DAY_START

 

COleDateTime timeNow = COleDateTime::GetCurrentTime();

COleDateTime(timeNow.GetYear(), timeNow.GetMonth(), timeNow.GetDay(), 00, 00, 00);

CDateTimeCtrl *pStartTimeCtl = (CDateTimeCtrl *)GetDlgItem(IDC_DATETIMEPICKER_DAY_START);

pStartTimeCtl->SetTime(COleDateTime(timeNow.GetYear(), timeNow.GetMonth()-2, timeNow.GetDay(), 00, 00, 00));

 

값 가져오기

CDateTimeCtrl *pStartTimeCtl = (CDateTimeCtrl *)GetDlgItem(IDC_DATETIMEPICKER_DAY_START);

COleDateTime dateStartTime;

pStartTimeCtl->GetTime(dateStartTime);

int nYear = dateStartTime.GetYear();

int nMonth = dateStartTime.GetMonth();

int nDay = dateStartTime.GetDay();

 

 

참조 : https://blog.naver.com/krazie99/30094019069


visual studio 2015 디버거시 유효한 작업 디렉터리가 아닙니다

 

프로그램을 시작할 수 없습니다.
유효한 작업 디렉터리가 아닙니다.

 

아래와 같은 창이 나타날때

 

 

프로젝트 - 속성 - 구성속성 - 디버깅 - 작업디렉터리   ->경로변경

Default 값 : $(ProjectDir)

 

 

 

트랜잭션 로그가 ACTIVE_TRANSACTION 로 인해 꽉 찼습니다

 

Delete 쿼리 사용시 해당 문구가 나타나면서 쿼리가 실행되지 않음

 

조건 추가하여 행 하나만 삭제시 삭제가 됨 

 

검색해보니 로그 용량이 부족하면 나타나는 현상이라고 함

 

인터넷이 있는대로 해보니 되지 않아 이것저것 바꿔봄

 

 

 

내가 한 것

 

1. 드라이브 용량 확보

일단 D드라이브가 거의 다 차있었으므로 용량을 비워줌

 

D드라이브에 mdf  ldf 파일이 있음

 

2. 데이터베이스 우클릭 - 속성 - 옵션 - 복구모델 - 전체로 변경

 

 

 

3. 데이터베이스 우클릭 - 속성 - 파일 - 데이터베이스 파일 -  DB명_Log 항목 - 자동 증가 / 최대크기 - ... 클릭

     - 최대 파일 크기 - 제한 없음 체크

 

 

 

 

이렇게 변경시 동작 했음

 

 

//////////////////////////////////////////////

 

log를 사용하지 않는 경우 

 

데이터베이스 우클릭 - 속성 - 옵션 - 복구모델 - 단순  으로 원복

 

데이터베이스 우클릭 - 태스크 - 축소 - 파일 - 축소동작

  - 사용하지 않는 공간을 해제하기 전에 페이지 다시구성 - 파일을 다음 크기로 축소  - 7MB  - 확인

 

 

 

 

 

BOOL CYourFormView::PreTranslateMessage(MSG* pMsg)
{
    if(IsDialogMessage(pMsg))           
        return TRUE;
    else  
        return CWnd::PreTranslateMessage(pMsg);   
 
}

 

 

출처 : https://m.blog.naver.com/beterran/60169163335

'공부 > MFC' 카테고리의 다른 글

[MFC] std::list 를 std::vector로 복사  (0) 2022.11.30
[MFC] png Image Load From Resource  (0) 2022.11.29
[MFC] CImage CBitmap HBITMAP 변환  (0) 2022.11.29
[MFC] 전체화면 사용  (0) 2022.11.24
[MFC] 다이얼로그 DLL 만들기  (0) 2022.11.16

 

현상 : where -> where 처럼 나타남

 

방법 : 윈도우 - 설정 - 시간 및 언어 - 언어 및 지역 - 언어 - 한국어 - ... - 언어옵션 - Microsoft 입력기 - ... - 키보드옵션 - 호환성 - 이전 버전의 Microsoft IME - 켬

 

처음에는 설정에서 기본언어를 영어로도 바꿔봤으나 증상은 동일하였다

 

해당 방법으로 설정 후 해결됨

 

visual studio 2015 사용시 동일현상 있었으나 해결됨

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

상황:

ERROR: 오류: "public.tbl_testinfo" 이름의 릴레이션(relation)이 없습니다
LINE 1: SELECT * FROM public.tbl_TestInfo ^ SQL state: 42P01 Character: 15

 

 

 

수정:

테이블 이름 양 끝에 쌍따옴표( " ) 를 넣어본다.

SELECT * FROM public."tbl_TestInfo"

 

 

 

pgadmin4 으로 테이블 생성시 양끝에 따옴표가 들어간 테이블 생성됨

 

조치:

 

테이블 이름을 변경해 준다

 

ALTER TABLE "tbl_TestInfo" RENAME TO tbl_TestInfo

 

 

수정됨

 

HWND hCommTarget = ::FindWindow(NULL, _T("Vision"));
if (hCommTarget == NULL)
{
OutputListbox(m_listOutputPLC, _T("Not Found Vision Program") + strSetValue);
return;
}

 

FindWindow 사용시 위와 같이 사용하면  프로그램을 찾아야 하는데

프로그램 명과 동일한 폴더를 열어놓으면 폴더를 인식할 수 있음

 

그래서 대상 프로그램에 윈도우 클래스를 정해주면 보다 명확하게 타겟을 찾아갈 수 있음

 

HWND hCommTarget = ::FindWindow(_T("Sanot"), _T("Vision"));
if (hCommTarget == NULL)
{
OutputListbox(m_listOutputPLC, _T("Not Found Vision Program") + strSetValue);
return;
}

 

 

대상 프로그램

BOOL CTestApp::InitInstance()
{
    WNDCLASS wc;
    GetClassInfo(AfxGetInstanceHandle(), _T("#32770"), &wc);
    wc.lpszClassName = _T("Sanot");
    AfxRegisterClass(&wc);

   //...
}


BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
   //...

  cs.lpszClass = _T(" Sanot ");

  //...
}


MSSQL DB 를  PostgreSQL 옮기려다가 찾았음

DMToolkit_x64.msi

ESF Database Migration Toolkit - Pro

다운로드 사이트

https://www.dbsofts.com/articles/postgresql_to_sql_server/

 

DMToolkit_x64 를 다운로드 후 설치

 

동의 - 다음 - 다음 하면 설치됨

 

설치 완료 후 윈도우버튼 - ESF Database Migration Toolkit - Pro

 

 

실행

 

별거아님 끄기

 

복사할 DB 선택

 

 

대상 DB 선택

 

 

복사할 테이블 선택

 

네모 박스친 부분은 체크 풀어서 복사함 ( db_server , sysdiagrams)

 

 

 

 

 

Submit 버튼 누르면 팝업 뜸

 

 

 

대충 내용은 

 

"평가판 버전이라 레코드 50000개 이상 불가함   "

 

FULL VERSION 누르면 결제페이지 이동되고 Try 누르면 실행 됨

 

Try 눌러도 동작 안되고 있으면 Submit 다시 클릭

 


 

 

완료

 

 

////

 

모든 테이블이 복사 안될 경우

 

mssql 에서  DB 백업 - 다른이름으로 복원  - 다른이름으로 복원한 DB에서 복사 덜 된 테이블만 남기고 모두 지움 

 

테이블 지우는 쿼리 만드는 쿼리문

 

SELECT 'drop table dbo.' + [NAME] FROM SYS.SYSOBJECTS WHERE [xtype] = 'U' 

 

복사 덜 된 테이블만 남은 DB를 위 방법으로 다시 복사

 

PostgreSql 내에서 다른 DB 테이블 복사하는 방법은 여러가지 있는데 구글에 잘 나옴..

 

ㅠㅠ이것까진 안해봐서 ...

 

 

 

[MFC에러] error c2512 사용할 수 있는 적절한 기본 생성자가 없습니다

 

에러발생

class CSqliteDataObject
{
public:
        CSqliteDataObject(const TCHAR * strTableName);
        ~CSqliteDataObject();

}

class CSqliteDataObjectList : public CSqliteDataObject, public std::list<T*>
{
public:
        CSqliteDataObjectList() :{}
        CSqliteDataObjectList(CString strPath) { OpenSqlite3Kor(strPath); }
        virtual ~CSqliteDataObjectList() { InitFieldValue(); }


}

수정

class CSqliteDataObject
{
public:
        CSqliteDataObject(const TCHAR * strTableName);
        ~CSqliteDataObject();

}

class CSqliteDataObjectList : public CSqliteDataObject, public std::list<T*>
{
public:
        CSqliteDataObjectList() :CSqliteDataObject(_T("")) {}
        CSqliteDataObjectList(CString strPath) :CSqliteDataObject(strPath){ OpenSqlite3Kor(strPath); }
        virtual ~CSqliteDataObjectList() { InitFieldValue(); }


}

 

 

상속받은 클래스에서 기본 생성자를 생성할 수 없음

-> 생성자가 있음

-> 부모클래스가  인수를 취해서 생성

-> 부모클래스 생성자에 적절한 인수 전달

 

 

 

참조 : https://gpgstudy.com/forum/viewtopic.php?t=8061

visual studio 2015 프로젝트 실행 후 잠시 응답없음 표시 후 정상 동작 할 때

 

제어판 - Application Insights Tools for Visual Studio 2015 제거 

 

 

 

 

 

cuda 사용시

 

NVIDIA NSight Visual Studio Edition 
NVIDIA CUDA Visual Studio Integration

 

제거

도구 - 옵션 - SQL Server  개체탐색기 - 명령 - 테이블 및 뷰 옵션

 상위 <n<개 행 편집 (선택) 명령의 값 수정

 

조회 및 편집  

상위 n개의 데이터를 정렬하여 조회하고 편집하고 싶을때

 

테이블 우클릭 - 상위 n개 행 편집 - 결과창 우클릭 - 창 -  SQL

SQL 창에서 order by  , where 등 쿼리 작성 

우클릭 - SQL 실행  - 결과창에서 데이터 편집

 

 

 

 

 

 

visual studio 에서 Image Watch 설치 (vs 2015로 테스트)

 

도구 - 확장 및 업데이트 - Image Watch 검색 - 다운로드

 

 

 

창 열기

보기 - 다른 창 - Image Watch

 

 

코드 디버깅 중 이미지 확인  ( 돋보기 클릭)

 

미리보기로 확인

imwrite imshow 같은거 코드마다 안넣어두 됨

Visual studio 에서 해당 도구 설치 필요 (vs 2015 2017 2019 2022 )

 

Visual studio 설치 - 기타 도구 집합 - 데이터 스토리지 및 처리 - Sql Server Data Tools 설치

 

프로젝트 생성

 

파일 - 새로 만들기 - 프로젝트 - 템플릿 - 다른 언어 - SQL Server - Sql Server 데이터베이스 프로젝트  생성

 

 

프로젝트 우클릭 - 스키마 비교

 

 

대상 선택  콤보박스 -  원본선택 - 해당 DB 정보입력 및 연결

 

 

비교 버튼 클릭

 

비교 결과

 

차이점

 

없는 테이블 

 

Load 

CString strPath;
TCHAR szFilter[] = _T("Image File(*.png;*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif;*.png|BMP file(*.bmp)|*.bmp|"
"JPG file(*.jpg)|*.jpg|GIF file(*.gif)|*.gif|PNG file(*.png)|*.png|"
"All Files(*.*)|*.*||");

//TCHAR szFilter[] = "All Files(*.*)|*.*|";  //모든파일

CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL);
if (IDOK == dlg.DoModal())
{
CString strPath;
strPath = dlg.GetPathName();
std::string strImage;
strImage = std::string(CT2CA(strPath.operator LPCWSTR()));
Mat cvSrc = imread(strImage, IMREAD_COLOR);
}

Save

CFileDialog dlg(FALSE, _T("png"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("Image File(*.png;*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif;*.png|BMP file(*.bmp)|*.bmp|"
   "JPG file(*.jpg)|*.jpg|GIF file(*.gif)|*.gif|PNG file(*.png)|*.png|"));
if (dlg.DoModal() == IDOK)
{
 CString strPath;
  strPath = dlg.GetPathName();
  std::string strImage;
  strImage = std::string(CT2CA(strPath.operator LPCWSTR()));
}

Load 여러개

CString strFilter = _T("Image File(*.BMP;*.JPG) | *.BMP;*.JPG; | All Files(*.*) | *.* || ");
CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT, strFilter, NULL);
char fileBuffer[4096] = { 0 };
CString strBuffer;
dlg.m_ofn.lpstrFile = strBuffer.GetBuffer(4096);
dlg.m_ofn.nMaxFile = sizeof(fileBuffer);
dlg.m_ofn.nMaxFile = 4096;
CString strPath;
int nOpenFirst = m_listImage.GetItemCount();

if (IDOK == dlg.DoModal())
{
POSITION pos = dlg.GetStartPosition();
int listIndex = m_listImage.GetItemCount();
if (listIndex < 0)
{
listIndex = 0;
}
while (pos != NULL)
{
strPath = dlg.GetNextPathName(pos); 
//여기서 처리

}
}

void JobQueue ::clearJobs()
 {
  // I want to avoid pop in a loop
    while (!m_Queue.empty())
    {
        m_Queue.pop();
    }
}

int main() {
    queue <int> q1;
    // stuff
    q1 = queue<int>();  
}

#include <algorithm>

void clear( std::queue<int> &q )
{
   std::queue<int> empty;
   std::swap( q, empty );
}

출처 : https://stackoverflow.com/questions/709146/how-do-i-clear-the-stdqueue-efficiently

에러 표기

C2338  The C++ Standard doesn't provide a hash for this type.

            => C++ 표준은 이 유형에 대한 해시를 제공하지 않습니다.

 

 

 

원인

  std::unordered_map<CString, CString> m_mapPLCAddr;  

  std::unordered_map 에 키가 CString 일 때 발생

 

키를 CString 로 쓰지 않거나

map 를 사용 

 

 

////////////////////////////////////////////////////////////////////////

 int 타입일때 동일 에러 발생 

//.h
public:
std::unordered_map<std::pair<int, int>, int> m_mapOX;
//.cpp
m_mapOX[std::make_pair(m_nRound, m_nCount)] = 1;

 

수정


//.h
using namespace std;
template <class T> inline void hash_combine(size_t &seed, T const &v) {
    seed ^= hash<T>()(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
}

struct pair_hash {
    template <class T1, class T2>
    size_t operator()(const pair<T1, T2> &p) const {
        size_t seed = 0;
        hash_combine(seed, p.first);
        hash_combine(seed, p.second);
        return seed;
    }
};

public:
std::unordered_map<std::pair<int, int>, int , pair_hash> m_mapOX;

//.cpp
m_mapOX[std::make_pair(m_nRound, m_nCount)] = 1;

 

 

 

출처 : https://stackoverflow.com/questions/32685540/why-cant-i-compile-an-unordered-map-with-a-pair-as-key

 

 

 


#include <locale.h>                    추가
setlocale(LC_ALL, "korean");

 

 쓰기


setlocale(LC_ALL, "korean");
CString strPath = strExePath + _T("\\ClickLog.txt");   //파일저장 경로

CStdioFile file;
if (file.Open(strPath, CFile::modeCreate | CFile::modeWrite))
{
   file.SeekToEnd();                       
   file.WriteString(strText);     
   file.Close();                           
}

읽기

CStdioFile file;
CString strPath = strExePath + _T("\\ClickLog.txt");

if(!file.Open(strPath,CFile::modeRead,NULL))
   return; 

CString strText; 
while(file.ReadString(strText))
{
   TRACE(strText);
}
file.Close();

 

 

 

//출처 : https://blog.naver.com/mu_kk/130165080003

'공부 > MFC_자주쓸거' 카테고리의 다른 글

[MFC] 파일열기 대화상자 CFileDialog  (0) 2023.03.30
[MFC] Queue 초기화  (0) 2023.03.22
[MFC] 리스트 박스 값 가져오기 ListBox  (0) 2022.12.07
[MFC] 실행파일 경로  (0) 2022.12.07
[MFC] 파일 존재 여부 체크  (0) 2022.12.06

+ Recent posts