2020. 6. 22. 12:05

캐싱된 plain 에서 Missing index 쿼리 확인

with XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/showplan' as sql)
SELECT --TOP 10
db_name
,sp_name
,sp_text
,[statement_text]
,X.*
,[creation_time]
,[ExecutionCount]
FROM
(
SELECT
db_name(qt.dbid) AS 'db_name'
,qt.text AS 'sp_text'
, substring(qt.text, (qs.statement_start_offset/2)+1
, ((case qs.statement_end_offset
when -1 then datalength(qt.text)
else qs.statement_end_offset
end - qs.statement_start_offset)/2) + 1) as statement_text
, qs.creation_time
, qs.execution_count AS 'ExecutionCount'
, cast(qp.query_plan as xml) as query_plan
,OBJECT_NAME(qp.objectid,qp.dbid) as sp_name
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle,qs.statement_start_offset,qs.statement_end_offset) qp
) Y
CROSS APPLY
(
SELECT
c.value('(./@Impact)[1]','float') as missing_index_Impact
,c.value('(./sql:MissingIndex/@Database)[1]','varchar(100)') + '.'+
c.value('(./sql:MissingIndex/@Schema)[1]','varchar(100)') + '.'+
c.value('(./sql:MissingIndex/@Table)[1]','varchar(100)') as [missing_index_Table]
FROM Y.query_plan.nodes('//sql:MissingIndexGroup')B(C)
) X


2020. 6. 18. 10:23

정규식 모음

정수

value.match(/^[0-9]+/);

실수

value.match(/^[0-9]+((\.[0-9]+)|\.)?/);

Date (월/일/년, 월-일-년)

value.match(/^(0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])[\/\-]\d{4}$/);

미국$(소수점 2자리)

value.match(/^[0-9]+((\.[0-9]{1,2})|\.)?/);


2020. 6. 1. 12:39

PowerMockup - 이제는 설계도 ppt로 해보자.

PPT로 스토리 보드 작업을 하던 도중에 화면 그리기가 너무 어려워서 폼을 쓸 수 있는 스텐실 같은게 없을까 찾아보다가 이 녀석을 발견 했습니다.


기존에는 pencil 이나 Balsamiq Mockups 를 사용하여 먼저 화면을 그린 다음에 이것을 다시 png로 변경하여 ppt에 삽입을 하는 방식으로 했는데요.


이 powermockup 를 사용하면 ppt에서 바로 폼 오브젝트를 사용할 수 있기때문에 아주 유용한 툴이 되겠습니다.


http://www.powermockup.com




프로그램을 다운 받아 설치 한 후에 파워포인트를 띄우게 되면 아래와 같이 PowerMockup 메뉴가 추가됩니다.




다만 트라이얼 버젼의 경우 사용할 수 있는 스텐실의 수가 제한적입니다.



사용 할 수는 없지만 어떤 스텐실을 사용 가능한지 한번 살펴 볼께요.

사실 스토리 보드나 화면 설계를 하기 위해서 이런 프로그램을 사용하는 이유는 아무래도 많은 오브젝트를 제공해주는 이유에서 겠죠.

트라이얼에서 사용가능한 오브젝트는 진한색으로 나타나고 사용할 수 없는 오브젝트는 연한색입니다.

연한 오브젝트를 사용할 경우에는 라이센스를 등록하라는 문구로 변환되어 추가되네요.


Basic - 기본적인 아이콘


Containers - 브라우져, 윈도우, 스마트폰, 태블릿등 여러가지 레이아웃을 지원하네요.



Input - form 에 관련된 아이콘




Navigation - 메뉴와 버튼에 관련된 mockup 들입니다.




Output - 기본적인 내용출력에 사용될 mockup 들이네요..



Line Icons - 아이콘들입니다. 많은 아이콘을 지원해서 별도로 아이콘이 필요없네요.


 


트라이얼에서 지원 가능한 아이콘들 중 몇개만 가지고 만들어 봤는데 확실히 ppt로 그냥 그린것 보다는 훨씬 쉽고 더 높은 품질의 화면을 설계할 수 있게 되었습니다.



정식 버젼을 구입해 볼까 하는 생각이들 정도로 기획이나 설계를 할때 도움이 되는 툴이라고 생각됩니다.

거기에 가격도 저렴하구요.


1 user 가격은 우리돈으로 6만 얼마 정도 하네요. 30일간 사용해보고 환불 받을 수도 있습니다. 개인적으로는 한번 써보면 환불 받을 생각이 들지 않을 듯 하네요 ^^



지금도 evolus pencil 와 balsamiq mockups 를 사용하고 있지만 이 두개의 경우에는 상대방이 같은 프로그램을 가지고 있지 않은 이상은 이미지로 변경해서 줄 수 밖에 없고 그렇게 되면 아무래도 편집이라던가 보충할 수 있는 방법이 없기 때문에 2% 모자람을 느끼지만 powermockup 을 사용한다면 ppt 에 설계를 그대로 전달 해줄 수 있고 자체적으로 수정, 보강이 가능해집니다.


powermockup 사용 이후에는 앞의 두 프로그램을 사용할 일은 없어 질 것같네요. ^^






2020. 3. 12. 08:34

coldfusion 주의할 점. ㅠㅠ

1. 변수 scope에 엄청나게 문제가 있음

cfloop(query = querySet) {
    //querySet의 정식사용은 querySet.columnName 임
    //단축 형태로 그냥 columnName으로 사용가능함
    //그런데 단축 형태로 사용할때 큰 문제가 있음

    writeOutput(columnName); //querySet.columnName 을 출력함
    writeOutput(isDefined("columnName")); //yes(true) 존재함
    writeOutput(isNull(columnName)); //yes(true) 존재하지 않음!!!!
}
cfloop(query = querySet) {
    columnName = 10;
    writeOutput(columnName); //10이 아닌 querySet.columnName 을 출력함!!!!
}
function test(required numeric columnName) {
    ...
    cfloop(query = querySet) {
        writeOutput(columnName); 
        //querySet.columnName가 아닌 
        //인자로 전달받은 arguments.columnName을 출력!!!!
    }
}

 

2. serializeJSON 문제

test = {a: 0};

test.a = 1;
writeOutput(serializeJSON(test)); //{"A":1}

test.a += 1;
writeOutput(serializeJSON(test)); //{"A":2.0}
//연산을 하게되면 무조건 실수형으로 변환됨!!!

test = {a: "1.2", b: "3"};
writeOutput(serializeJSON(test)); //{"A":1.2,"B":3}
//string type 이라도 무조건 수치형으로 변환됨!!!!

 

3. 같은 이름의 form element 처리 문제

<input type="text" name="test" value="abc">
<input type="text" name="test" value="">
<input type="text" name="test" value="def">

<!-- 위의 경우 test = "abc,def"로 값이 수신됨  -->
<!-- 몇번째 변수의 값이 없는지 확인하지 못함 -->

<input type="text" name="test" value="abc,def">
<input type="text" name="test" value="">
<input type="text" name="test" value="">
    
<!-- test의 내용중 comma가 존재하면???  -->
<!-- test = "abc,def"로 값이 수신되어 변수 2개에서 수신된것 처럼 됨  -->