퇴근5분전

내가 만들어 사용중이던 메소드 찾기 프로그램을 VS2022에 설치하기

:: 주로 VS2019로 개발하다가 이번에 Blazor 개발때문에 VS2022로 변경하기로 하고... 늦은 업데이트를 진행하였다.

 

메소드 찾기 확장! 프로그램

> Install Targets 에 Version Range를 수정. 

 [14.0,) 에서 [14.0, 18.0) 으로 변경.

 

Version Range 변경

 

 

새로 VS2022에 설치 후 동작 화면.

vs2022 에 설치된 내 확장 프로그램

 

 

 

 요새 만화들을 좀 보고 있는데..

AI 쪽을 좀 찾아볼까 하고 몇개의 영상등을 봤었다. 

 

 유튜브에 보면 가끔 컨텐츠로 열혈강호 만화컷들이 올라온다. (내용이 지난거라 안봄)

 AI에 보면 이미지를 일정 부분을 지정해서 움직이도록 해주는 녀석이 있다.

 

문득 생각나는게... 지금은 웹툰이나 여러 만화들을 보니 

컷신 한장이 약간의 액션?이 가미되면 어떨까? 라는 생각이 들더라

 

AI가 정지된 만화 컷신을 약간의 액션이나 효과가 가미된 gif같은걸로 만든다면?

그럴싸 해보이지 않을려나? 

 

어차피 나중엔 ai로 그냥 애니가 만들어질테니... 과도기적인 망상으로다... 

 

오늘 운전을 하면서 보니 도로 일부에 포트홀 작은 것들이 군데군데 있었다. 

 

내비가 켜져 있는 상황에 운전중이니까... 

 

"포트홀 신고", "교통사고 신고"... 이런 키워드들을 말로 하면 

 

네비에서 위치를 기록 기록해두었다가

 

운전 끝내고 내비를 확인하여 기록된 내용을 신고 할수 있게 해줬으면 어떨까?

 

그 기록에서 "신고" 버튼을 누르면 자동으로 근처 도로관리 사업소에 접수요청을 해주면 어떨까?

 

그럼 도로 관리업체들이 접수 건으로 일정을 확정하고 기록된 곳 근처에 가서 찾아서 수리 할 수 있도록...

 

완료 후엔 신고자들에게 완료 문자 날려주고... 

 

'--- 취미 > 아이디어?' 카테고리의 다른 글

백수로 이런 저런 생각하다보니...  (0) 2024.01.27
옷, 신발, 모자등 AI 쇼핑?  (0) 2023.08.02
키오스크] 단품 주문... 할때???  (0) 2023.06.07
아이디어?  (0) 2009.05.13

 요즘 유튭이나 광고를 보면 코딩 교육을 알리려는 광고들이 참 많더라. 

비전공자들이 자기들이 했던 경험들을 유튭에 올리는 영상들도 일부 봤었고... 

 

 17년간 코딩을 해오면서 요즘 드는 생각은 이제 코딩에 뛰어든 사람들까지라면 

기존에 구현된 시스템들과 추후 몇년간 새로 개발되는 시스템들의 유지보수로 밥벌이가 가능하겠지만,

이제 초,중 다니는 애들이 사회에 진출하면 과연? 6년~10여년 후에

과연 프로그래머 의자가 현장에 몇개나 남아 있을까?

 

 이상적인 생각으론 사람이 일하고 ai는 도우미처럼 보조를 하는 형태겠지만... 

아이언맨 자비스 시스템처럼 사람의 보조역할로 생각이 되겠지? 

 

 곧 여러 일자리들은 ai와 로봇이 일을 하고 필요한 것들을 사람이 조달하는 형태로 바뀌지 않을까?

로봇과 ai의 발전속도가 얼마나 균형있고 빠르게 진행되느냐에 따라 사람도 현장에서 사라질지 모르다는 생각이 된다. 

기업들의 일부사람들만 로봇들을 현장에서 배치관리하고 판매와 서비스만 사람이 한다? 

하지만 그것도 온라인 판매는... 쇼핑몰들도 ai가 사람들 취향에 맞춰 보여줄테니...

택배기사 말고는 사람이 필요 없어질지도 모르겠다. 

이런 저런 생각들을 하다보면 비전공자들과 전공자들중에 top을 제외한 개발자들이 지금 코드레벨로 교육받고 있는게 맞나 싶다. 이야기를 이어가면 정치쪽으로 넘어가니 각설하고.. 

 

 객체.할일( 필요한 것들 ) : 결과 

 

 목적된 프로그래밍을 하기 위해 객체들 목록을 정의하면서 주요 "할일( 필요한 것들 ): 결과" 만 써놓고 AI 코파일럿 같은거에 코드요청을 하면 만들어 줄 것이고... 

 큰덩어리를 요구하면 ai가 아직은 못만들어도 의사코드형태로 잘라서 전달하면 코드를 만들어주는걸 봐서는

비전공자들은 의사코드를 만들수 있는 객체지향 기법을 이해하고 글쓰기등을 좀 더 공부하는게 어떤가? 라고 생각이 된다.

 

  이번엔  프로그램을 제작할때 내가 사용하는 방법을 써보려 한다. 

글로 쓰면 얼마나 걸릴지 모르겠지만... 생각하는 데로 대충 끍적거리고 메모장에 요약해놓고 바로 코딩해버리지만... 

이건 비전공자들이 검색하다 우연히 볼까? 라는 생각으로 써보는 것이다. 

 이번 만들던 PLC모니터링 프로그램 구조도다.

알바형태로 하는 플젝이다 보니 문서가 없어 설명들을 듣고 내가 그렸다.

 

목적 ::: 이 프로그램의 목적은 PLC의 네가지 정보( 차단기, 수신, 위험수위, 해제수위 )를 모니터링 하는 것

 

## 주요 객체를 뽑으면 { 다리, PLC } 두개가 있다.  <옵션>에 대한건 제외... 

난 표현을 메모장 아래와 같이 쓰거나 직접 class를 구현한다.

#다리

{

        #[PLC]

        {

                  .차단기

                  .수위

                  .위험수위

                  .해제수위

                  .위치 { L, R }  // 옵션의 별도PLC와 타DB는 위치값을 C로 추가

        }

}

눈에 딱 보이는 것을 추려낸 내용이다

[] 기호는 n개를 표현한것이다.

 

/* 추가적으로 이해에 필요한 내용

     * PLC에 모드버스TCP라는 통신방식을 이용하여 요청하여 메모리값을 16bit(word)값을 응답받을 수 있다. 

     * 차단기, 수위, 위험수위, 해제수위는 각 메모리 주소값이 프로그래밍을 통하여 고정되어 있다.

       여기서 고민해볼 것이 다리는 1개 일까? - 현업과 얘기해보니 n개 였다. 현장마다 관리하는 다리 개수가 다르다. 

       PLC와 통신을 하려면 모드버스TCP라는 방식으로 통신을 하므로 PLC의 IP 정보가 필요하다. port는 502번 고정이다.

*/

 

#[다리]

{

        .다리위치명

        #[PLC]

        {

                  .IP

                  .차단기

                  .수위

                  .위험수위

                  .해제수위

                  .위치 { L, R }  // 옵션의 별도PLC와 타DB는 위치값을 C로 추가

        }

}

모니터링 대상이 여러개의 [다리]로 생각하고 배열 형태로 변경했다

 

실시간 모니터링이니 백그라운드에서 PLC에게 일정 주기마다 요청을 하고 응답을 받아야 한다. 

윈도우 서비스(Windows Service)를 구현해야 한다. 

 

#Service

{

            .OnStart( string[] args ) {

            }

            .OnStop() {

            }

}

윈도우 서비스를 .net으로 구현하면 초기 구현부가 위와 같은 형태로 나온다.

* OnStart, OnStop을 구현하면 되는데... 넘어가고.. 

 

모니터링을 하기 위해선 객체 관계를 생각해 볼 필요가 있다. 

일정 시간마다 PLC에 요청해서 응답을 받아야 한다.

핵심 의사코드를 작성해보면... 

무한 반복 

{

    반복( 다리 in 다리목록 ) {

          다리.PLC.요청( 차단기 ) : 응답

          DB업데이트(응답)

          다리.PLC.요청( 수위 ) : 응답

          DB업데이트(응답)

          다리.PLC.요청( 위험수위 ) : 응답

          DB업데이트(응답)

          다리.PLC.요청( 해제수위 ) : 응답

          DB업데이트(응답)

    }

}

위와 같은게 계속 반복하여 필요한 정보를 계속 요청하고, 응답받은건 DB에 업데이트 해주면 된다.

 

 이 프로그램은 개발 현장에서만 사용하는 것이 아니기에 다리정보, PLC정보를 별도 파일로 빼고

서비스 시작시 읽어서 객체화하여 종료시까지 요청/응답을 반복한다. 

 

환경설정 파일과 연계하기 위해 아래형태로 변경한다.

 

#다리정보

{

            ID : "BRD001"

            다리명 : 어디어디에 있는 다리

            L_ID  : "PLC_L00"

            R_ID  : "PLC_R00"

}

 

// PLC_L00.json, PLC_R00.json 으로 파일을 만들고 아래 형태로 읽고/쓰기를 한다.

#PLC_Device { 

       .ID

       .IP

       .WebTitle

       [모니터링]

       {

                타입 : { 차단기, 수위, 위험수위, 해제수위 }

                PLC_메모리주소 

                FunctionCode // Modbus TCP프로토콜에 함수코드 ( 0x03, 0x04 )

       }      

}

 

! 코드가 아래와 같이 추가 변경된다. 

//반복되기 전에 환경설정된 파일을 읽어서 만든다.

//다리정보 읽기

모니터링[] monitorings ;

반복 ( 다리 in 다리목록 )

{

          // { 다리정보. PLC_L_ID }.json 읽기

          monitorings.목록추가( PLC_L_Device.모니터링  )

          // { 다리정보. PLC_R_ID }.json 읽기

          monitorings.목록추가( PLC_R_Device.모니터링  )

}

 

무한 반복 

{  

    반복( 모니터링 in monitorings ) {

          모니터링.요청( ) : 응답

          DB업데이트(응답) 

    }

}

이런 형태로 바꾼다. 

보통 여기까지의 샘플 코드까지가 대략 반나절정도 걸린다. 좀더 규모가 큰 것들은 하루 이틀 정도?...

 

 이후 부터는

 1. 실제 PLC장비를 연결하고,

 2. 모드버스TCP프로토콜 샘플을 만들기 

     Read Write 샘플 및 테스트

 3. 서비스 프로젝트 생성 후 코드 반영.

 4. 로그 기록

 5. DB연결 및 스키마 생성 및 읽기/쓰기 쿼리문 작성 

 6. 간이 테스트 문서

 7. 상세코드 작성 및 디버깅

 1~7 정도 하면 1~2주 훌쩍 간다.

기존에 했던 작업들이면 1~2일 정도면 된다.

 

위 작업들을 보면 목적 프로그램의 주연들을 찾아내고 정의해서

관계를 설정하고 의사코드로 역할과 호출순서를 정한다. 

기본적으로 객체.할수있는일( 필요한 것들... ) : 결과값 정의해서 누가 뭘 할지 결정하고 

필요한 것들을 붙여나가면서 프로그래밍 하면 좋겠다.

 

어떤 기능을 구현한다 했을때 이런게 있겠지? 라고 생각하고 

해당 기능을 가진 객체를 구글링하면 대부분 존재한다. 그럼 그걸 가져다 샘플 만들어서 돌려보고 

코드에 반영하게 된다. 이럴때도 "할수 있는 일" 을 찾을때 도움이 된다. 

 

 두번째 이야기.... 

첫번째로 객체.할수있는일( 필요한 것들... ) : 결과 형태로 수백가지 정도 써본다면 

처음엔 잘 안떠오르는데... 하다보면 막 보이는데로 쓰게 되고, 그러다보면 이게 뭔짓인가 싶을때가 있었다.

그때 그만하면 된다. 

 

 표현하는 객체들이 할수 있는 일과 그 일에 필요한 것들을 적어본다면 객체와 객체간의 관계에 대하여 고민을 할때가 된거다. 뉴스 만화 영화 등을 보면서 장면 장면 기억에 남는거라든가? 스크린샷등으로 이미지를 남겨놓고 그 상황을 코딩해보면 좋다. 이때 의사코드(Pseudo)를 사용해본다. 

 이런 코드도 한 일주일 정도 투자해서 이거 저거 상황을 코드화 해보면 코딩할 준비가 된거라 생각한다. 

 

 우리처럼 비전공 개발자들이 초반에 코드에만 빠져 있다보면 객체들을 서로 관계지어 설계하는 과정을 체득하지 못하기에 미리 이런식으로 객체를 정의하고 객체간의 관계등을 미리 글쓰듯이 해보는 것이 중요하다 생각된다. 

 실제 작성하는 코드들이 그렇게 어려운 코드들이 없다. 대부분이 이미 만들어진 객체들을 활용하며 순서를 정해 호출하고 

또 객체가 할 일에 필요한 자원들을 빠짐없이 전달해주는 역할을 개발자가 해주는 것이다. 

 우리는 3인칭 시점에서 내려다보면서 이야기를 써내려가면 된다. 이야기를 써내려가면서 흐름에 따라 등장하는 객체들이 있을 것이며 그 객체들이 어떤 라이브러리에 있는지 찾아서 끼워 맞춰주는 역할을 하면 된다. 시작은 그렇게 하면 된다고 본다. 좀더 관심있고, 좋은 업체들로 이직을 하려면 일 외에도 따로 전공자들보다는 더 많은 노력을 기울여 공부해야 한다.

 

 다음에 시간이 되면 현재 개발중인 내용을 설계과정등을 시간순서대로 나열해보려한다.