Fit Gap Analysis

Fit and Gap 분석은 현재 소프트웨어 시스템이 기존 고객의 요구 사항에 맞지 않는 부분을 식별합니다.
이전 단계에서 분석 한 각 비즈니스 프로세스 및 요구 사항을 검토합니다.
Chirix Solution을 사용하여 적합한 비즈니스 프로세스를 Fit으로 확인할 수 있습니다.
그렇지 않으면 그것은 갭이다.
갭 분석은 누락 된 기능의 정확한 세부 사항을 나타낼 수 있습니다.

솔루션의 사용자 정의, 해결 방법 구현 또는 비즈니스 프로세스 수정을 통해 모든 차이가 해결됩니다.

https://www.infotivity.com/fit-gap.html

Scaffold-DbContext

실제..많이 쓰는데..자꾸 옵션을 까먹어서 정리를..
나중에 추가는 계속 하고

기본

Session
1
Scaffold-DbContext "Server=.;Database={DB명};User ID={계정아이디};Password={비밀번호};" Microsoft.EntityFrameworkCore.SqlServer

One Table

Session
1
Scaffold-DbContext "Server=.;Database={DB명};User ID={계정아이디};Password={비밀번호};" Microsoft.EntityFrameworkCore.SqlServer -Table 테이블명

Context명

Session
1
Scaffold-DbContext "Server=.;Database={DB명};User ID={계정아이디};Password={비밀번호};" Microsoft.EntityFrameworkCore.SqlServer -Context 컨텍스트명

Output Dir

Session
1
Scaffold-DbContext "Server=.;Database={DB명};User ID={계정아이디};Password={비밀번호};" Microsoft.EntityFrameworkCore.SqlServer -OutputDir 경로/하위경로/...

ROI

투자자본수익률. 어느 회사건 투자를 한다. 건물, 기계, 유가증권 등 투자의 대상이 아닌 것은 아무것도 없다. 따라서 개념상 “”투자=자산””이라는 등식이 성립한다. 그러나 투자재원은 주주들이 납입한 자기자본과 외부차입금으로 나눠진다. 문제는 투자가 얼마나 수익성이 있는가에 달려 있다. 자금이 효율적으로 이용되면 수익이 올라가고 비효율적으로 운영되면 수익성은 떨어진다. A라는 회사와 B라는 회사가 겉으로는 똑같이 7억원의 이익을 냈다고 하더라도 투자자본이 A는 50억원이고 B는 60억원이었다면 A가 훨씬 효율적인 경영을 했다는 얘기다. ROI는 그만큼 효율성에 초점을 맞춘 개념이다.

최근 국내경기가 둔화되면서 기업들도 과거처럼 몸집키우기식 경영형태에서 벗어나 효율 및 수익성을 주시하는 경영평가기법에 관심을 갖기 시작했다. ROI 이외에도 회사가 보유하고 있는 자산(asset)에 대한 수익률(ROA), 주주자본(equity)에 대한 수익률(ROE)등도 기준만 다를 뿐 수익성 위주의 경영을 강조하는 개념들이다.
[네이버 지식백과] ROI [return on investment] (한경 경제용어사전)

ActionResult<T>

Core 2.1부터 생긴 ActionResult 관련 내용입니다.

일단 서로 다른 형식의 return 형과 object를 ActionResult를 통해 전달받을 수 있다!! 는 편리함이 있습니다.

ex01
1
2
3
4
5
6
7
8
9
10
public ActionResult<모델>
{
...진입 예외처리...

var 모델 = Get모델(키);

...처리처리....

return 모델
}
MicrosoftDOC 링크

위의 링크에 나온데로 ActionResult에서 파생된 형식을 반환하거나 특정형식(Json, XML, etc)을 반환할 수 있습니다.!!!!!

ex01
1
2
3
4
5
6
7
8
9
10
11
12
13
// GET: api/Todo/5
[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);

if (todoItem == null)
{
return NotFound();
}

return todoItem;
}

이런식의 사용이 가능합니다, IActionResult(IActionResult Interface) 를 사용했을때 라면 CAST과정이 필요했었다고 저는 기억하고 있습니다, 그런데 ActionResult는 T 의 ObjectResult로 변환합니다(암시적 캐스트 연산자 T)

쓸때없는 말들로 앞을 채웠지만…편하다!!! 써보니 편리하고 선언시점에서 어노테이션을 주어서 명시적으로 캐스트해서 ActionResult를 받던 방법에서는 Swagger같은데서 잘 못읽는 경우…뭐…..대부분 잘 읽었어요 사실…다들 아시잖아요…그런데 엄청 길게 갔을때의 좀더 명확한 코딩이 가능하다 맘에든다 는 의미의 포스팅이었습니다..

ㅋㅋ 감사합니다.

OPC Server

OPC 서버는 산업용 자동화 및 loT를 위한 연결 플랫폼으로 제조업에서 일반적 널리 사용되는 약150개 이상의 드라이버를 제공하는 소프트
웨어이다.
1) 산업제어시스템 고유의 통신 요구사항에 맞추었으며
2) 장비를 자동으로 연결하고,
3) 장비의 데이타를 읽고 쓸 수 있으며,
4) 해당 데이터를 HMI, SCADA, MES, Historion 또는 ERP 시스템에 완벽하게 통합할 수 있고,
5) 높은 신뢰성과 사용자 편의성으로 신속하게
설치하여 완벽하게 작동할 수 있도록 한다.

EPS (Expanded Polystyrene)

스티로폼으로 알려진 PS 발포 제품
열가소성 수지인 폴리스타이렌(PS)를 발포해 만든 소재로, 스티로폼란 이름으로
더 잘 알려져 있습니다. 발포폴리스타이렌 이라는 특성상 다량의 공기층으로 구성되어 있으며,
이 때문에 단열성, 완충성, 방수성, 방음성이 우수합니다. 그래서 가전의 완충포장재, 건축 단열재,
식품 포장용기 등의 분야에서 다양하게 사용됩니다.

Barcode 128 Codeset

Value 128A 128B 128C Code Latin-1 Pattern Widths
0 space space 00 32 or 212 / 252 ␣ or Ô / ü 11011001100 212222
1 ! ! 01 33 ! 11001101100 222122
2 02 34 11001100110 222221
3 # # 03 35 # 10010011000 121223
4 $ $ 04 36 $ 10010001100 121322
5 % % 05 37 % 10001001100 131222
6 & & 06 38 & 10011001000 122213
7 07 39 10011000100 122312
8 ( ( 08 40 ( 10001100100 132212
9 ) ) 09 41 ) 11001001000 221213
10 * * 10 42 * 11001000100 221312
11 + + 11 43 + 11000100100 231212
12 , , 12 44 , 10110011100 112232
13 - - 13 45 - 10011011100 122132
14 . . 14 46 . 10011001110 122231
15 / / 15 47 / 10111001100 113222
16 0 0 16 48 0 10011101100 123122
17 1 1 17 49 1 10011100110 123221
18 2 2 18 50 2 11001110010 223211
19 3 3 19 51 3 11001011100 221132
20 4 4 20 52 4 11001001110 221231
21 5 5 21 53 5 11011100100 213212
22 6 6 22 54 6 11001110100 223112
23 7 7 23 55 7 11101101110 312131
24 8 8 24 56 8 11101001100 311222
25 9 9 25 57 9 11100101100 321122
26 : : 26 58 : 11100100110 321221
27 ; ; 27 59 ; 11101100100 312212
28 < < 28 60 < 11100110100 322112
29 = = 29 61 = 11100110010 322211
30 > > 30 62 > 11011011000 212123
31 ? ? 31 63 ? 11011000110 212321
32 @ @ 32 64 @ 11000110110 232121
33 A A 33 65 A 10100011000 111323
34 B B 34 66 B 10001011000 131123
35 C C 35 67 C 10001000110 131321
36 D D 36 68 D 10110001000 112313
37 E E 37 69 E 10001101000 132113
38 F F 38 70 F 10001100010 132311
39 G G 39 71 G 11010001000 211313
40 H H 40 72 H 11000101000 231113
41 I I 41 73 I 11000100010 231311
42 J J 42 74 J 10110111000 112133
43 K K 43 75 K 10110001110 112331
44 L L 44 76 L 10001101110 132131
45 M M 45 77 M 10111011000 113123
46 N N 46 78 N 10111000110 113321
47 O O 47 79 O 10001110110 133121
48 P P 48 80 P 11101110110 313121
49 Q Q 49 81 Q 11010001110 211331
50 R R 50 82 R 11000101110 231131
51 S S 51 83 S 11011101000 213113
52 T T 52 84 T 11011100010 213311
53 U U 53 85 U 11011101110 213131
54 V V 54 86 V 11101011000 311123
55 W W 55 87 W 11101000110 311321
56 X X 56 88 X 11100010110 331121
57 Y Y 57 89 Y 11101101000 312113
58 Z Z 58 90 Z 11101100010 312311
59 [ [ 59 91 [ 11100011010 332111
60 \ \ 60 92 \ 11101111010 314111
61 ] ] 61 93 ] 11001000010 221411
62 ^ ^ 62 94 ^ 11110001010 431111
63 _ _ 63 95 _ 10100110000 111224
64 NUL ` 64 96 ` 10100001100 111422
65 SOH a 65 97 a 10010110000 121124
66 STX b 66 98 b 10010000110 121421
67 ETX c 67 99 c 10000101100 141122
68 EOT d 68 100 d 10000100110 141221
69 ENQ e 69 101 e 10110010000 112214
70 ACK f 70 102 f 10110000100 112412
71 BEL g 71 103 g 10011010000 122114
72 BS h 72 104 h 10011000010 122411
73 HT i 73 105 i 10000110100 142112
74 LF j 74 106 j 10000110010 142211
75 VT k 75 107 k 11000010010 241211
76 FF l 76 108 l 11001010000 221114
77 CR m 77 109 m 11110111010 413111
78 SO n 78 110 n 11000010100 241112
79 SI o 79 111 o 10001111010 134111
80 DLE p 80 112 p 10100111100 111242
81 DC1 q 81 113 q 10010111100 121142
82 DC2 r 82 114 r 10010011110 121241
83 DC3 s 83 115 s 10111100100 114212
84 DC4 t 84 116 t 10011110100 124112
85 NAK u 85 117 u 10011110010 124211
86 SYN v 86 118 v 11110100100 411212
87 ETB w 87 119 w 11110010100 421112
88 CAN x 88 120 x 11110010010 421211
89 EM y 89 121 y 11011011110 212141
90 SUB z 90 122 z 11011110110 214121
91 ESC { 91 123 { 11110110110 412121
92 FS 92 124 10101111000 111143
93 GS } 93 125 } 10100011110 111341
94 RS ~ 94 126 ~ 10001011110 131141
95 US DEL 95 200 / 240 È / ð 10111101000 114113
96 FNC 3 FNC 3 96 201 / 241 É / ñ 10111100010 114311
97 FNC 2 FNC 2 97 202 / 242 Ê / ò 11110101000 411113
98 Shift B Shift A 98 203 / 243 Ë / ó 11110100010 411311
99 Code C Code C 99 204 / 244 Ì / ô 10111011110 113141
100 Code B FNC 4 Code B 205 / 245 Í / õ 10111101110 114131
101 FNC 4 Code A Code A 206 / 246 Î / ö 11101011110 311141
102 FNC 1 FNC 1 FNC 1 207 / 247 Ï / ÷ 11110101110 411131
103 Start Code A 208 / 248 Ð / ø 11010000100 211412
104 Start Code B 209 / 249 Ñ / ù 11010010000 211214
105 Start Code C 210 / 250 Ò / ú 11010011100 211232
106 Stop 11000111010 233111
Reverse Stop 11010111000 211133
Stop pattern (7 bars/spaces) 211 / 251 Ó / û 1100011101011 2331112

1차원 바코드 Code 128

총 108개의 문자를 표현할 수 있으며 시작(3) 종료(2)는 문자수에서 제외됩니다.
BARCODE의 구성원리는 알아보았으니 실직적으로 code128의 원리를 파보도록 하겠습니다.
code128의 사양(Specification)

그림처럼 총 6개의 구역으로 이루어져 있습니다.

1.Quiet zone
2.Start symbol
3.Encoded data
4.Check symbol
5.Stop symbol
6.Final bar (often considered part of the stop symbol)
7.Quiet zone

Quiet zone

Quiet zone은 바코드의 앞/뒤에 존재하게 되며 특별히 code128이 아니더라도 모든 바코드에서는 앞/뒤 여백이 있어야 합니다…사실 표준기관에 quiet zone spec을 보면 반드시 아무것도 인쇄해서는 안되는 영역이며 반드시 보장되어야 하는 영역이라고 명시되어 있습니다.
(약식 바코드 까지 EAN-8? 같은 것도 포함되는지는 모르겠네요)

보통 내용문자 *10의 크기를 가져야 합니다.

이 영역이 사실 디코딩 수준을 결정하기에 딱1개의 양쪽에 *10크기로 비워 라는 아니긴 합니다만, Normal, More Aggressive, One Side EB, Anything 등의 디코딩을 위한 방식이 있으나..넘어가도록 하겠습니다 일단은 양쪽에 *10 크기로 비우는 걸로 ㅎ

Start symbol

존재목적이라 함은…이제 바코드가 시작된다를 알립니다…허무한가요..;;

code 128에는 3종류의 codeset이 존재합니다, 128a, 128b, 128c라고 한다고 저는 알고있는데 이게 정말 공식적인 명칭인지는 확실하지 않으니 이부분이 궁금하시면 따로 확인을 해보시면 될 듯 합니다…저는 딱히 안 궁금해서 ㅠㅠ

– 2018-11-02 추가 시작
Code 128 A: Partial ASCII set, no lower case, but ASCII control chars (TAB, CR/LF etc.)
Code 128 B: Full ASCII set, no ASCII control chars
Code 128 C: Only digits 0-9, encoded in pairs, very compact code
A,B,C 의 명칭이 그 닥 공식화 되어있지 않지만 대충 A,B,C라고 부르네요 그냥 다들 ㅡㅡ;;
각 코드셋이 수용할 수 있는 범위가 명시 되어있는 정보를 찾아서 내용을 추가합니다.
– 2018-11-02 추가 끝


code128 codeset별 codevalue 참고

코드표에서 보면 Start Code A(211412), Start Code B(211214), Start Code C(211232)
가 명시 되어있는 것을 확인하실 수 있습니다.
예를 들어 Start Code B(211214)
11010010000 211214 는
검검흰검흰흰검흰흰흰흰 으로 이루어진
■■□■□□■□□□□ 처럼 생긴 바코드로 표현이 되겠지요

Encoded data

여긴 말그대로 데이터입니다.
소스로 구현시에는 가장 복잡하게? 들어가겠죠 ㅎ?, 데이터 다루는 부분은 따로 정리하겠습니다.

Check symbol

체크섬 공식에 의한 검증코드값이 같이 들어갑니다, 이건 메세지가 리더기에서 정확하게 읽혔는가 검증하기위한 값이라고 생각하시면 됩니다.

문자열의 자리 수 * 문자 값 들의 합에 103으로 나눈 나머지에 해당하는 코드 값이 code128에서 Check symbol 값이 되겠습니다.

LeeJungKyu <- 이건 나중에 소스에서 다시 설명 드리겠지만 codeset A냐 codeset B냐의 검증을 거쳐보면 codeset B라는 결론이 나는 문자열입니다..해서!!!

LeeJungKyu 문자열을 Start Code B로 시작하는 값을 code128로 한번 만들어 보겠습니다.

L : 첫번째 자리니까 1 * L의 문자 값 => 1 * 44

??? : 여기서 왜 L의 문자 값이 44인가 갑자기 이해가 안가시는 분들은 barcode 128 codeset 가셔서 128B값에 대문자 L 인곳으로 가보시면

Value 128A 128B 128C Font position
(Common/Barcodesoft) Bar/Space
Code Latin-1 Pattern Widths
44 L L 44 76 L 10001101110 132131

뙇 하고 확인하실 수 있습니다.

그럼 다시 정리해 보겠습니다.

L : 첫번째 자리니까 1 * L의 문자 값 => 1 * 44 = 44
e : 두번째 자리니까 2 * e의 문자 값 => 2 * 69 = 138 ( 사실 여기에서 힌트가 codeset A에선 소문자 e 표현이 없습니다 )
e : 세번째 자리니까 3 * e의 문자 값 => 3 * 69 = 207
J : 네번째 자리니까 4 * J의 문자 값 => 4 * 42 = 168
u : 다섯번 째 자리니까 5 * u의 문자 값 => 5 * 85 = 425
n : 여섯 번째 자리니까 6 * n의 문자 값 => 6 * 78 = 468
g : 일곱 번째 자리니까 7 * g의 문자 값 => 7 * 71 = 497
K : 여덟 번째 자리니까 8 * K의 문자 값 => 8 * 43 = 344
y : 아홉 번째 자리니까 9 * y의 문자 값 => 9 * 89 = 801
u : 열 번째 자리니까 10 * u의 문자 값 => 10 * 85 = 850

분명 공식은 문자열의 자리 수 * 문자 값 들의 합에 103으로 나눈 나머지 라 했습니다 ㅋ

2018-11-16 추가 및 수정 ** 중요
체크섬계산에 관한 엄청난 잘못된 점이 있어서 ㄷㄷ…수정합니다
다른 건 틀린 게 없는데 더할 때 맨처음에 StartSymbol 의 문자 값(Value)을 더해야 합니다, 그러니…결국 ㅠㅠ Checksum 값이 여기서 먼저 보신분처럼 하면 다르겠죠 결국 그걸로 바코드 찍히긴 합니다만….검증시에 계속 에러가 나고있었네요…. 죄송합니다 ㅠㅠ


그러면!!!
104(Start Code B 의 Value) + 44 + 138 + 207 + 168 + 425 + 468 + 497 + 344 + 801 + 850 = 3,942 4,046

3,942를 103으로 나누면 = 38.271844660194176
4,046을 103으로 나누면 = 39.2815533980583

참고 : 여기서 나머지를 구하는건 나머지를 구하는 알고리즘을 따로 찾아보시기 바랍니다.(산수시간인가요 ㅎㅎ?)

여기서 몫 : 38 / 나머지 : 28
여기서 몫 : 39 / 나머지 : 29

이란 결과를 얻을 수 있습니다, 그럼 2829 이 표현되는 codeset B에 <= 기호가 Check symbol이 되겠습니다.!!!!

Start symbol/LeeJungKyu<=/Stop symbol

최종 이런 모습이 데이터가 되겠네요..나중에 확인했는데 틀리면 망신인데요…..
하…다시 노가다를

Start Code B : 211214 => 11010010000

L : 132131 => 10001101110
e : 112214 => 10110010000
e : 112214 => 10110010000
J : 112133 => 10110111000
u : 124211 => 10011110010
n : 241112 => 11000010100
g : 122114 => 10011010000
K : 112331 => 10110001110
y : 212141 => 11011011110
u : 124211 => 10011110010
< : 322112 => 11100110100
= : 322211 => 11100110010

Stop pattern : 2331112 => 1100011101011
LeeJungKyu 란 문자를 code128식의 바코드 형태로 변경하면
2112141321311122141122141121331242112411121221141123312121411242113221123222112331112
가 되는 겁니다 .

마지막으로 패턴으로 변경하면
110100100001000110111010110010000101100100001011011100010011110010110000101001001101000010110001110110110111101001111001011100110100111001100101100011101011

0과 1로 그림을 그리는데 1개의 숫자는 일정한 사이즈로 선을 그립니다 여기서 맨 처음 Quiet zone 을 다시 생각해보면 1개의 숫자가 그어지는 선의 10배만큼씩 좌우로 여백을 주고 안에다 그려야 한다는 말이었다고 이해가 되시는 지 모르겠습니다.

왜 도대체 2331112가 1100011101011로 변환되는가를 고민하시는 분들이 계실 까봐…
barcode 128 codeset 여기를 다시 보시죠 자세히..ㅋㅋ
Widths죠? Pattern이고요 Widths는 규칙이 있습니다..사실 이게 저도 정확하게 궁금한 부분인데 Widths값이 Pattern값으로 변환되는 규칙은 저는 BWB(Black White Black)으로 외워서 알고있거든요…깊게 찾아보지 않고 그냥 그렇게 외우고 있습니다 ㅠㅠ
즉 말해서 블랙화이트블랙순으로 Widths의 값만큼 그리는 겁니다 블랙을 1 화이트를 0으로 하면
2331112를 풀어 말하면 블랙2 화이트3 블랙3 화이트1 블랙1 화이트1 블랙2 이렇게 되는 거죠 이걸 그대로 0과1로 표현하되 1이상의 숫자는 반복하는 거로 적으면 그냥
1100011101011 이 됩니다 ㅋㅋ 잘 아시는 분 댓글 좀 제가 잘못 알고 있는 거면 전 망했네요..

숫자가 연속되면 두꺼워지는 것 처럼 보이겠죠 바코드에서 많이 보던 느낌 살아나죠?

실제로 바코드로 그려진 이미지 입니다, 만약!! 아주 만약 정말 이걸 수작업으로 오차없이 그리실 수 있다고 하면(사실 바코드가 선의 농도도 체크한다는데..이건 나중에 알아봐야 할 듯합니다) 재미삼아 해보세요..

요즘은 리더기 아니더라도 앱으로 리더기들이 많아서 찍어 보시면 재미있을지도 모릅니다 - _-

Stop symbol

사실 위에서 다뤘습니다..순서도 뒤죽박죽이네요 ㅋㅋ 이것 역시 마지막이라는 신호입니다.

우선 이론 편…여기서 마치겠습니다
왜???이론 편이냐??????
전 이거 그냥 공부하려고 정리한 건 아니거든요 ㅡㅡ;;
이 1차원 바코드 그리러 Visual Studio 켜야 지 않겠습니까 ㅋ?
감사합니다.