퇴근5분전

  음 오늘도 열심히 시스템 소스 분석을 하다보니... 

이걸 이렇게 쓰면 좋겠다 싶어서... 

요청을 하는 index에서 서버에 요청을 하면 controller가 받아서 db데이타를 가져다 모델을 만들고 view를 반환 하면.. 

index는 받아서 view를 엘리먼트에 load() 한다... 라는 흐름은 위처럼 표시해주는게 보기 좋을듯 하여... 

-----------------------------------

fn:index, file:메인
...어떤 처리를 하고..
...메뉴중에...
//MVC에서 Controller를 호출하기 위한 클릭!
fn:requestPage, ref:Controller
받은 view를 어느 dom에 Load(html)
fn:생성, ref:View화면
#종료

-----------------------------------

fn:requestPage, file:Controller
//요청받은 파라미터로 모델을 만든다. 
fn:getModel, ref:DataBaseLayer
@모델을 받고
@return View화면!

-----------------------------------

fn:getModel, file:DataBaseLayer
//DB에서 어떤 데이타를 조회하여 
//모델을 만들어 반환한다.
!return 모델

-----------------------------------

fn:생성, file:View화면
!경고...
@주황...
#???
//주석
일반(검정)

-----------------------------------

이런식으로 작성하면... 될 듯하다.

 

 DB 를 어찌 표현해준다... DB를 별도 프로그램에 띄우면 한번에 안보이는데... 

 

 흐름을 쫒아서 view반환이 오른쪽 끝으로 가버리면 컨트롤이랑 레벨이 안맞는것 같다는 느낌이 들었다. 

소스를 추적하면서 간단히 정리하는데만 사용중이지만... 

 기능 자체를 너무 길게 그리면 보기 어려워지는 단점이??

또 한번에 하나만 보이니까... 멀티로 보는 방법을 생각하든가 아니면 LINK: 를 추가해볼까 한다. 

링크로 처리된 부분은 클릭하면 해당 링크가 팝업이나 뷰 자체를 바꿔주는 방법으로... 생각해볼까 한다. 

 

 추가 -------------------------------------------------------------------------------------------- 11-30

 

//테스트 사이트 : http://regexstorm.net/tester

 

.NET Regex Tester - Regex Storm

Home Tester Reference About

regexstorm.net

 //테스트 문자열

 // fn:함수. a!@#$%^&*(()_-+=\\<>,a a , file:파일.111/\ !@#$%^&-=~*()! \fff, ref:r파asdf일, prj:프로젝트, link:기능함


 //fn(\s)*(:|=)(\s)*(?<fn>\w+(\>|\<|\~|\+|\=|\-|\)|\(|\^|\*|\&|\%|\$|\#|\@|\!+|\\+|\/+|\s+|\.*\w*|(?=\,))*)
 //file(\s)*(:|=)(\s)*(?<file>\w+(\>|\<|\~|\+|\=|\-|\)|\(|\^|\*|\&|\%|\$|\#|\@|\!+|\\+|\/+|\s+|\.*\w*|(?=\,))*)        
 //ref(\s)*(:|=)(\s)*(?<ref>\w+(\>|\<|\~|\+|\=|\-|\)|\(|\^|\*|\&|\%|\$|\#|\@|\!+|\\+|\/+|\s+|\.*\w*|(?=\,))*)
 //proj(\s)*(:|=)(\s)*(?<proj>\w+(\>|\<|\~|\+|\=|\-|\)|\(|\^|\*|\&|\%|\$|\#|\@|\!+|\\+|\/+|\s+|\.*\w*|(?=\,))*)
 //link(\s)*(:|=)(\s)*(?<link>\w+(\>|\<|\~|\+|\=|\-|\)|\(|\^|\*|\&|\%|\$|\#|\@|\!+|\\+|\/+|\s+|\.*\w*|(?=\,))*)

 

프로젝트, 링크 등을 추가 할수 있는 정규식.

저녁에 와서 정규식 테스트만 했다. 

전에 쓰던건 fn, ref|file 만 필터링 했던 테스트 문장이었으나... 차라리 문자열에서 위 정규식 5개를 적용해서 값을

꺼내는게 나을듯 하다.  복합적으로 그룹지어서 뽑으려니까 예외상황의 문자열을 못 뽑아내더라...

위 구문도 정답은 아닌듯... 일단 써야지.. 

 

 프로젝트 별로 하위 파일목록을 관리하면 어떨까 해서... 고민중이다. 

회사에서 프로젝트만 구분해서 해봤는데... 

 

------------------------ 22년 12월 08일 추가.

 

 (\s)*(?<=[,])(\s)*  키워드 앞에 추가하였다. 전방탐색!

document.location.href : xxxxxxxxxxxx.jsp

json파일 내용 일부를 붙였더니 함수로 판단을 해서 

함수로 그려버렸다. 

키워드 앞에 콤마(,)를 탐색! 또는 공백(\s)이 있으면 포함해서 찾는다.

다른 기호들이 들어오면 패턴 불일치로 일반 컨텐츠로 판단한다. 

정상적으로 시작하는 fn도 못찾네...

이번에 큰맘 먹고 서피스를 구매했다. 

 

JSFW.FunctionConnection 을 위해서기도 하고...

그동안 미뤄두었던 JSFW.ScreenDefinition 프로그램을 업그레이드 하기 위해... 

터치환경에서 제대로 사용 및 개발을 안해봤기에... 

 

 모바일이나 이런것도 터치위주의 사용성을 체크해보려면 아무래도 하나 있었으면 해서... 

전에 산 레노버2in1 은 윈10깔려있는데 제대로 윈도우뜨는게 기적일정도로 느리다. 

처음부터 느렸는데... 왜 윈10을 깔고 파는걸까?... 이해가 안되네... 너무 느려서 못쓰고 있다. 

 

 서피스 키보드와 펜이 헉 소리날정도로라... 

펜으로 조작하면 손 인식을 안하려나? ... 

 

 무선 블루투스 키보드를 하나 구매해서 같이 들고 다니면서 입력장치로 활용해볼 생각인데... 

마땅한게 없넹... 방향키까지만 있는 블루투스 되는 건 화살표키들이 너무 모여있고... 

기계식처럼 생긴건 안보이넹... 기계식을 사서 써야 하나... 사무실 작은데 그걸로 타이핑하면 너무 민폐되는거 아닌가? 

 

 그나저나... 스프링... log4j2 는 왜 로그가 안남냐... 

ㅡ.ㅡ;;; log4net 으로 수많은 로깅작업을 해왔지만... 

며칠째 감도 못잡고 있넹... 분명 설정은 맞는데... 돌리면 로그가 없엉... 

10초 30초 1분 각각 수정시각 비교해서 추출해서 확인해도 로그가 안보이네...

★ 까지 찍어서 보는데...  이러면 곤란한데... 

 

 12월 1일부터는 개발들어가야 하는데... 아직 이클립스 환경적응이 안되네 ㅠㅠ. 

'--- 취미 > 생각하기' 카테고리의 다른 글

진보? 업자들... ㅆㅂ....  (0) 2022.12.12
자바 플젝하면서의 삽질???  (0) 2022.12.07
태블릿 거치대...  (0) 2022.11.28
업무 분석중에...  (0) 2022.11.22
다음 뉴스에서 또 댓글 차단당했다.  (0) 2022.11.14

http://item.gmarket.co.kr/Item?goodscode=1957288337 

 

G마켓-제우스랩 태블릿 휴대폰 아이패드 핸드폰거...

29,200원

item.gmarket.co.kr

 

이번에 산 서피스가 들어간다. 원래는 포터블 모니터 장착하려고 샀는데... 포터블 사용을 못하고 있어서... ㅠㅠ

 

16~26cm까지 늘어나서 고정이 된다.

 

마감도 깔끔하고 벽에 고정은 안해봤지만... 

 

추가: 색상변경.

 

색상관련해서 ... 조카의 도움을 좀 받고...

배경이나 라인 색상을 좀 바꾸고... 

주의성 문구, 파라미터, 주석, 반환타입관련 색상 수정!! 

-----------------------------------------------------------------------------------------------------------------------------------

 

 일단... 1차 개발로 아래처럼 나오도록 개발은 완료 했다. 

프로젝트 업무 파악하면서 호출 흐름을 기록할 수 있다.

 

입력편의성을 위해 'text' 문자열로만 작성하여 그 데이타를 기반으로 아래처럼 그려준다.

 

입력화면이다. 

텍스트를 작성... 마우스는 필요없고... 소스 보면서 무지성 타이핑으로... 

 

#fn:btnEdit_Click, File:/JSFW.GridDesigner/DesignForm.cs <- fn:{함수명}, file:{파일} 입력 기준
// 파일명 체크
.fn:Edit, ref:/JSFW.GridDesignerCommon/GridSettings.cs <- fn:{함수명}, ref:{파일} 입력 기준 여기서F12를 누르면!!!(1)
// 그리드 정보 초기화.
// 표시되는 그리드에 변경된 내용 적용

 

#fn:Edit,file:/JSFW.GridDesignerCommon/GridSettings.cs
.fn:ShowDialog, ref:/JSFW.GridDesignerCommon/SourceGridDll/GridEditForm.cs
// 그리드 설정을 하고.. 
// [적용]버튼을 클릭
.fn:btnApply_Click, ref:/JSFW.GridDesignerCommon/SourceGridDll/GridEditForm.cs
// 변경된 그리드 정보 적용

...

 

(1) F12를 누르면 작성된 fn: , file: 부분이 있으면 커서 이동.

      작성된 곳이 없으면 새 textBox를 만들고 거기에 fn: , file:을 만들고 커서 이동.

 

file:또는 ref: 를 입력하고 파일명을 치면 우측 리스트 박스에 해당 이름이 포함된 검색결과가 나타난다.

나타난 결과를 더블클릭하거나 [Ctrl + Enter]를 치면 바로 들어간다.

 [파일명 목록 새로고침]에 특정 경로와 파일확장자를 넣으면 대상을 검색해서 가지고 있게 된다. 

 1회만 하면 된다. 

  Dictionary<string, string> targetFolders = new Dictionary<string, string> {
                //{ "경로", "*.cs|*.xml" }
  };

 이런 형태로 등록하면 된다. 

 

입력중에 텍스트 박스에 내용을 모두 지우고 포커스를 빼면, 자동 삭제된다.

 

text 작성 중에는 별도의 마우스 조작이 있으면 안될 것 같아서 단축키를 지원하고, 

마우스 조작을 최소화 하였다. 

 

2차 업그레이드는 현재의 프로젝트가 끝나면(내년 10월 이후) 생각나면??? 

1. Link: 같은걸로 다른 저장된 함수랑 연결해서... 하이퍼 링크 같은걸 지원하면 ... 어떨까? 싶다.

2. 시퀀스 다이어그램 처럼.. 오브젝트를 일렬로 세워?... 

 

이런 형태나... 

이런 형태도... 고민해봤다... 

 

지금은...

시작 ---------> 호출 ----------> 호출 ----------> 호출 ------------> 종료 

이런 형태라서.. mvc에서 클릭요청 이벤트를 따라가면 view반환은 오른쪽에서 보인다. 

호출되는 순서대로 쭉~~ 따라가서 끝에 이르면 원래의 목적의 뷰를 반환해주는 형태로 그려지기 때문에... 

 

 

지금 그려지는 모습은

Controller의 제일 아래보면 ref=생성 >> View화면 쪽으로 화살표...를 그려준다. 

그 View화면에서도 처리 할 일들에 대한 기록을 남겨준다. javascript도 있고. 중요한 화면 이슈도 있을테니...

그리고 ref=생서 앞에는 녹색의 화살표로 원래 Controller.requestPage를 호출한 ref=requestPage쪽으로

되돌아가는 화살표를 그렸다. 

 

몇개의 기록들을 하면서 소스흐름을 따라가보니... 자유도가 높아서 괜찮은듯... 

파라미터와 반환값을 기록 하려다가? 이것도 쓰기 나름인데... 너무 자세히 기록하면 사용감이 피곤해질듯... 

그래도 필요하면!!

fn:함수, file:파일

@param1

@param2

@paramN...

#returnValue

형태로 기록 해두어도 괜찮을 것 같긴하다.

 

!, @, #, //  <-- 각각의 지정한 색상이 있다. 

 

일단 회사에서 소스분석용 데이타를 넣고 보니.. 옅은색이긴 하지만 화살표가 왔다 갔다... 정신없고

색이 너무 많은듯 한데...? 

 

음... 오늘 퇴근전 3시간정도 생쑈하면서 끝내 안되었던게...

 

집에서 검색하다보니 2013년에 내 블로그에 있네?  9년만에 똑같은 일로 또 이러고 있었다뉘... 

 

그래도 그땐 저걸 풀었네? 와~~ 

 

https://aseuka.tistory.com/entry/%EB%B3%80%ED%99%98-Unicode-%ED%95%9C%EA%B8%80

 

변환] Unicode <--> 한글

이번 자바 작업중에 유니코드를 다루는게 있어서... VS Express 설치해서 변환툴을 만들때 사용한 코드임! ## 한글 -> 유니코드 string txt = UniCodeText.Text; string resultUniCode = ""; foreach (char s in txt.ToCharArray(

aseuka.tistory.com

 

이거 자바 할때니까... 똑같은 문제로 개고생하고 있었네 ㅠㅠ; 

이번이 자바 프로젝트가 두번째라는 것!

 

자바의 .properties를 쉽게 찾아서 쓰려고 사전처럼 만들어 검색을 하려고 .net으로 읽어들였더니... 변화도 안되고 

 

이클립스에서 읽은걸 복사해서 써도 되긴한데... 소스에서 변경하면 일일이 붙여줘야 하니까... 

그냥 소스파일을 그대로 읽어서 검색을 만들려 했더니... 

 c#으로 읽어들였더니 한글이 \\uacb0 이런 코드로 보이다니... 인코딩을 별짓을 다 해봐도 안되고... 

 

-- 진짜 황당한 일은... 

str은 파일에서 읽은 것이다. ttt는 직접 박았더니 저렇게 나와서...  갑자기 머리속이 생각을 멈췄다! ...

 

내일은 또 업무파악해야지... 쉽지 않은 프로젝트가 될것 같은데? 

 

추가.. 

사전 처럼 만들었다. 그리고 코드조각 만드는것도 ... 

   <fmt:message var="${}"  Key="xxxx" />

   <spring:message code="xxxx" /> 

이런 식이었는데... 

 

 

 자바 스프링을 보고 있다. 2주 정도 봤는데... 이미 셋팅된걸 가지고 보는거라...

초기 설정을 어찌해야 되는지는 모르겠고...  프론트 쪽 개발을 위해 소스를 따라가는데 복잡하긴 하다... 

이렇게 복잡하게 개발을 해놓을 필요가 있었을까? 또 쪼개서 보다보면 이유를 알것도 같은데... 

초기에 개발할때 일정을 화면 하나에 2주 정도는 줬을까? 2주도 빡실것 같긴한데... 

 

 어쨌든... 함수 연결 프로그램으로 나름 열심히 따라가고 있다. 

친구가 얘기하길 콜그래프? 이런게 있다는데? 이건 메모도 안되는것 같고...

특정 시점부터 잘라서 보는 것도 안되는것 같고... 

 

 오늘부터는 DB를 열어서 이제 쿼리를 보고 있다. 로그 보면서 디버깅을 하고 있는데... 

 

어제 자기전에 생각난게 있다. 화면 UI에서 버튼을 클릭하고 누를때 db의 변화를 덤프떠서

보듯이 한다면 업무이해나 디버깅에 좋지 않을까? 

 1. 프로그램에 조회 쿼리문을 등록한다.

 2. 해당 쿼리로 조회를 할때마다 결과를 기록을 남긴다.

 3. 화면 기능 테스트를 하면서 등록한 쿼리로 결과를 계속 남겨둔다. 

 4. 테스트가 끝났을때 쿼리 데이타 기록을 한눈에 어떻게 변화 한건지 본다. 

  - 필요한 경우 변화된 내용에 대한 메모도 해두면 나중에... 볼 수 있을 것 같다. 

 

 업무 파악하다가 몇가지 더 생각났는데... 주객이 전도될까봐... 나중에 하자.. 나중에..... 

전에 구현했던게 있으니.. 

https://aseuka.tistory.com/entry/%EC%BB%A8%ED%8A%B8%EB%A1%A4-%EB%B0%B0%EC%9C%A8-%EC%A1%B0%EC%A0%95-%EA%B3%B5%EC%8B%9D

 

컨트롤 배율 조정 공식...

ZoomInOut을 구현했는데... int[] factors = { 50, 100, 200 }; 을 combo에 넣고 옛날 값 = 100; 으로 초기값 사용. 현재 선택된 Factor = 50; { float 조정배율 = 현재값/ 옛날값 ; Control.Scale( new SizeF( 조정배율 , 조정배

aseuka.tistory.com

int factorIndex = 4;
float[] factors = new float[] { 0.2f, 0.4f, 0.6f, 0.8f, 1f, 1.2f, 1.4f, 1.6f, 1.8f, 2f, }; // 20 ~ 200%
float oldSizeFactor = 1f;

 

- ZoomOut

factorIndex--;
if (factorIndex < 0) factorIndex = 0;              
pnlBoard.Scale(new SizeF(  factors[factorIndex] / oldSizeFactor,   factors[factorIndex] / oldSizeFactor));

pnlBoard.Invalidate();
oldSizeFactor = factors[factorIndex];

 

// 배율 조정시 스크롤이 있는 상태일때!! 왼쪽상단(left, top)에 판넬을 맞춰줘야 하니까.. 

int hv = pnlOutBorder.HorizontalScroll.Value;
int vv = pnlOutBorder.VerticalScroll.Value;
pnlBoard.Left = -hv;
pnlBoard.Top = -vv;

 

- ZoomIn

 factorIndex++;
 if (factors.Length <= factorIndex) factorIndex = factors.Length-1;             
 pnlBoard.Scale(new SizeF(factors[factorIndex] / oldSizeFactor, factors[factorIndex] / oldSizeFactor));

 pnlBoard.Invalidate();
 oldSizeFactor = factors[factorIndex];          

 

// 배율 조정시 스크롤이 있는 상태일때!! 왼쪽상단(left, top)에 판넬을 맞춰줘야 하니까.. 

int hv = pnlOutBorder.HorizontalScroll.Value;  
int vv = pnlOutBorder.VerticalScroll.Value;
pnlBoard.Left = -hv;
pnlBoard.Top = -vv;

 

** 함수, 호출 화살표등을 직접 드로잉 처리하고 있어서

이에 대한 크기조정도 적용해줘야 한다. 

파일, 함수, 화살표등을 그리기전에... 

 e.Graphics.ScaleTransform( factors[factorIndex], factors[factorIndex] );

배율 조정을 해준다.

 

 

그리고 마우스 다운 이벤트에서 파일과 함수인경우 이름을 복사!

호출하는 함수부분에서는 대상 함수로 화살표의 색을 바꿔주기 때문에... 배율조정시 마우스 다운 위치를 계산해줘야 하는데... 

Point pt = new Point((int)((float)e.Location.X / oldSizeFactor), (int)((float)e.Location.Y / oldSizeFactor));

 

 

매국노들 빠는 기사에 댓글을 달았더니 쪽....ㅂㅏ~~~리는  안써지길래 하나 더 달았더니 

매국노들이 신고때렸나보다.... 

다음 이것들은 조선 부사장 출신이 아직도 앉아 있나? 

 짱개는 그냥 써지는데 왜? 쪼옥ㅂㅏ~ㄹㅣ는 자동 변환되어 보이는걸 막아놨냐? 

 

 

 저건 고칠 생각이 없나봐... 어떤 기사의 댓글인지 기억이 안나.. 

다음 포탈을 안들어가야지 하는데 카페들어가다보면 자꾸 클릭하게 되네... 

 

 

 

'--- 취미 > 생각하기' 카테고리의 다른 글

태블릿 거치대...  (0) 2022.11.28
업무 분석중에...  (0) 2022.11.22
이클립스와 전자정부 프레임워크...  (0) 2022.11.07
새 프로젝트를 시작하며....  (0) 2022.11.06
GitHub에 소스를 올리기 시작!!!  (0) 2022.10.24

 제목 쓰기 어렵다.

함수연결 보기 프로그램에 파일박스 안에 나열된 함수(fn1)와 그 안에서 호출되는 외부함수(fn2)의 연결을 

호출단계(레벨)별로 추가해서 그렸다. 

연결 호출 ...

대충 단계를 표시하기 위해 간소하게 했지만... 

 

 그래도 프로젝트에서 분석하면서 써보니... 나름 괜츈!!

다만 전자정부 플젝 소스 보니 눈돌아갈것 같아. 왜 이렇게 복잡한걸까? 

 문서가 없다더랑.. 보안상?? 두분 계시는데 인간 라이브러리... 

다만... 내가 질문을 할 수 있을지... 서로 귀찮은데... 잘못들어갔나 싶기도 하고... 나올까? 

 

 얼마나 자세히 적을 것인가? 이게 문제이긴하다...

너무 자세히 쓰면 소스 따라 치는 것 처럼 나오고... 다이어그램도 너무 복잡하게 보일테니... 

주요 로직만 적는 것으로 작성자가 적절하게 맞춰야 할 것 같다. 

 

 이번 AsIs Function Connection 프로그램 구현 중... 

텍스트 입력기반으로 만들었기에... 편의기능을 추가했다. 

생각지도 않았던 Alt + Up, Alt + Down 으로 VS 편집기처럼 선택한 행들의 위치를 변경하는 것을 구현하게 되었다. 

인텔리센스를 구현하려니... 참 걸리는게 많네.. 대충 흉내만 냈다. 

 

Textbox_KeyDown Event에서!!

 // txtSource : TextBox 임 

 // !!! 주의 : 프로퍼티에 WrapWord = false; 로 작업해야 함. 

 // 이유 : textbox의 내용이 길때 textbox 크기가 작아지면서 박스안에 글이 구겨들어간다. 이때 커서의 현재 위치 정보를 제대로 읽을 수 없었다.

 

            if (e.Alt && (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down))
            { 
                int selStartIndex = txtSource.SelectionStart;
                int selLength = txtSource.SelectionLength;
                int selLineCnt = 1 + txtSource.SelectedText.Count(c => c == '\n');
                int currentlineIndex = txtSource.GetLineFromCharIndex(selStartIndex);
                List<string> lines = new List<string>(txtSource.Lines);

                if (e.KeyCode == Keys.Up && 0 <= (currentlineIndex -1 ))
                { 
                    string moveString = lines[currentlineIndex - 1]; 
                    lines.RemoveAt(currentlineIndex - 1);
                    lines.Insert(currentlineIndex + selLineCnt - 1, moveString);
                    int offset = moveString.Length;                    
                    txtSource.Text = string.Join(Environment.NewLine, lines);
                    lines.Clear();
                    txtSource.SelectionStart = selStartIndex - offset -2;
                    txtSource.SelectionLength = selLength;
                }
                else if (e.KeyCode == Keys.Down && (currentlineIndex+ selLineCnt) < lines.Count)
                {
                    string moveString = lines[currentlineIndex + selLineCnt];                    
                    lines.RemoveAt(currentlineIndex + selLineCnt);
                    lines.Insert(currentlineIndex, moveString);
                    int offset = moveString.Length;
                    txtSource.Text = string.Join(Environment.NewLine, lines);
                    lines.Clear();
                    txtSource.SelectionStart = selStartIndex + offset +2;
                    txtSource.SelectionLength = selLength;
                }
            }

 

 

구현 로직 설명