2017년 12월 11일 월요일

Classic Asp date_format Function

언어별로 date_format 라는 함수가 있어 date값에 대해 원하는 string으로 출력해주는데 classic asp에는 없다.
그래서 다른 date_format 함수의 masking 방법을 빌려서 제작
format characterDescription
yyyy연도 4자리
yy연도 2자리
mm월 2자리
m월 1자리
dd일 2자리
d일 1자리
hh시 2자리
h시 1자리
ii분 2자리
i분 1자리
ss초 2자리
s초 1자리
WW요일
wex> 금

'/**
'**/
class DateValueObject
 private dateObj, formatValue
 
 public property let setDate(byval pDate)
  dateObj = cdate(pDate)
 end property
 
 public property get getDate()
  getDate = dateObj
 end property
 public property get getYear()
  getYear = year(dateObj)
 end property
 public property get getMonth()
  getMonth = month(dateObj)
 end property
 public property get getDay()
  getDay = day(dateObj)
 end property
 public property get getHour()
  getHour = hour(dateObj)
 end property
 public property get getMinute()
  getMinute = minute(dateObj)
 end property
 public property get getSecond()
  getSecond = second(dateObj)
 end property
 public property get getWeekDay()
  getWeekDay = Weekdayname(Weekday(dateObj)) 'left('목요일',1)
 end property
 public property get getWeekDaySimple()
  getWeekDaySimple = left(getWeekDay(),1) 'left('목요일',1)
 end property
 public property let setFormat(pFormat)
  formatValue = pFormat
 end property
 
 public property get getFormat()
  getFormat = formatValue
 end property
 private function zeroADD(byval pdate)
  dim vDate 
   vDate = pdate
   if len(vDate) = 1 then 
    zeroADD = "0" & vDate   
   else 
    zeroADD = vDate   
   end if 
 end function 
 public function dateParse()
  dim resultDate 
   resultDate = formatValue
   resultDate = replace(resultDate, "yyyy", getYear())    '연도(2017,1987)
   resultDate = replace(resultDate, "yy", right(getYear(),2))  '연도(2017,1987)
   resultDate = replace(resultDate, "mm", zeroADD(getMonth()))  '월(12,01,03)
   resultDate = replace(resultDate, "m", getMonth())    '월(12,1,3)
   resultDate = replace(resultDate, "dd", zeroADD(getDay()))  '일(12,01,03)
   resultDate = replace(resultDate, "d", getDay())     '일(12,1,3)
   resultDate = replace(resultDate, "hh", zeroADD(getHour()))  '시간(14,06,05)
   resultDate = replace(resultDate, "h", getHour())    '시간(14,6,5)
   resultDate = replace(resultDate, "ii", zeroADD(getMinute())) '분(14,06,05)
   resultDate = replace(resultDate, "i", getMinute())    '분(14,6,5)
   resultDate = replace(resultDate, "ss", zeroADD(getSecond())) '초(14,06,05)
   resultDate = replace(resultDate, "s", getSecond())    '초(14,6,5)
   resultDate = replace(resultDate, "W", getWeekDay())    '금요일
   resultDate = replace(resultDate, "w", getWeekDaySimple())  '금
   dateParse = resultDate
 end function 
 public function dateParseResult()
  dateParseResult = dateParse()
 end function 
end class
'/**
' @example   : date_format('2017-11-12 11:06:54','mm/dd/yyyy hh시 i분 s초') -> 11/12/2017 11시 6분 54초
'**/
function date_format(byval pdate, byval dateFormat)
 dim dateCl 
 set dateCl = new DateValueObject
  dateCl.setDate = pdate
  dateCl.setFormat = dateFormat
  
  date_format = dateCl.dateParseResult()
 set dateCl = nothing
end function 

2017년 11월 9일 목요일

브루스 웹스터 "사해효과"

재능 있고 효과적인 IT 엔지니어가 떠날 가능성이 가장 큰 엔지니어 - 증발하는 경우가 발생합니다
남아있는 경향이있는 것은 '잔여 물'입니다. 이는 가장 재능 있고 효과적인 IT 엔지니어입니다. 그들이 직장을 불쾌하다고 생각하더라도, 다른 곳에서 일자리를 찾을 수있는 가능성이 가장 적습니다.

http://brucefwebster.com/2008/04/11/the-wetware-crisis-the-dead-sea-effect/

2017년 9월 26일 화요일

발견적 평가방법

제이콥 닐슨의 발견적 평가방법의 10가지 원리

  1. 시스템 상태의 가시성 유지할 것
  2. 실제 세상과 시스템의 일치
  3. 사용자에게 부여하는 조종의 자유를 줄 것
  4. 일관성과 표준 지킬 것
  5. 실수를 방지할 것
  6. 기억보다는 인식하게 할 것
  7. 유연성을 가지고 사용의 효율성을 가질 것
  8. 심미적이고 최소의 디자인을 할 것
  9. 실수로부터 회복이 가능할 것
  10. 도움을 줄 수 있는 문서를 제공할 것


http://times.kaist.ac.kr/news/articleView.html?idxno=2072

2017년 9월 8일 금요일

php 이미지 글자 인식 (Tesseract OCR)

Tesseract OCR이라는 라이브러리가 있다 
c++로 작성 되있으며, 다른 언어들도 호환하는데 
OS에 install 한 후 언어로 연결해주는 형태이다.

지금 윈도우를 쓰니까 윈도우 기준으로 설치를 진행해보겠다.

https://github.com/tesseract-ocr/tesseract/wiki/4.0-with-LSTM#400-alpha-for-windows
에서 


를 다운-> 설치한다. 언어 셋팅하는게 있는데 난 중국어 일본어 한국어 이거 3개를 추가했다.
용량이 꽤 크다 . 언어 셋팅하니까 200MB가 더 증가함.


그다음 소스를 composer로 가져오겠다.

https://github.com/thiagoalessio/tesseract-ocr-for-php


As a composer dependency

{
    "require": {
        "thiagoalessio/tesseract_ocr": "1.1.0"
    }
}

기본적으로 테스트 코드를 실행해보려하면 tesseract 를 찾을수 없다고 
오류가 날것이다. 


->executable('"D:\ProgramFiles\Tesseract-OCR\tesseract.exe"')

이런식으로 있는 경로에 대해서 쌍따옴표로 감싸줘서 경로 셋팅 후 

echo (new TesseractOCR((__DIR__.'\images\admin.bmp')))->executable('"D:\ProgramFiles\Tesseract-OCR\tesseract.exe"')->lang('kor')->run()

이런식으로 실행해보면 된다. 이미지 경로 지정이야 알것이라 판단하고 lang 는 spread형태로 적어주면 된다.
('kor','eng','jpn') 이러한 형태로 

만약 오류가 난다면 

echo (new TesseractOCR((__DIR__.'\images\admin.bmp')))->executable('"D:\ProgramFiles\Tesseract-OCR\tesseract.exe"')->lang('kor')    ->buildCommand()

이러한 형태로 build 를 해서 cmd 창에서 실행해보면 자세한 오류를 알수 있다. 

다른 사람들은 잘 된다는데 난.. 한글이 잘 인식이 안된다...
영어는 그럭저럭 인식이 되는거 같다.

2017년 8월 28일 월요일

논문작성법

논문 작성지도  수업정리

1~4장
=====================================================
(핵심어 + 핵심어 + 핵심어) 결론

<결론을 제일 먼저 써라>
과정을 구구절절 모두 적을 필요가 없음
A실험하다 방향이 틀어져 B가 나오면 A에 대해 언급할 필요가 없음
고생한 것에 대해 알아달라고 적을 필요가 없음

<결론이 나오면 제목이 정해짐>
결론을 갖고 제목을 정함, 결론에 가장 잘 도달하도록 작성

<구성은 그림으로 짜라>
그림의 크기와 위치, 중요한 것은 크고 앞으로 작성

<하나의 그림에는 하나의 결과를 써라>
그림 설명시 첫번째 문장에는 결론으로 그림에 나온 데이터는 빠짐없이 기입


<그림이 완성되면 결과를 써라>

<논문 작성은 두괄식으로>
- 핵심문장 -> 설명1 -> 설명2(점점 구체적으로, 중요한건 앞으로)
- 핵심문장 -> 결과1-> 결과분석->결과 부연설명1 -> 결과 부연설명2



<논의(결론)에서 다룰 내용>
- 이 연구가 왜 중요한지?
- 새로 알게 된 것은 무엇인지?
- 이 결과의 어떤 의미인지?
- 앞으로 뭐가 가능해진다는 것인지?
- 연구의 한계는 무엇인지?(단점에 대해서 솔직하고 정확하게 써야됨, 안그럼 reviewr가 공격을 함)
대안/보충 설명으로 보완(장점 강조는 구체적으로 강조,우리 기술들은 이러한 약점이 있으나, 어떻게 하면 아마도 해결이 되 라고 적어주면 됨)
- 뭐가 새로운지 강조 (구체적이고 기존연구와의 차이점에 대해 설명)
- 앞으로의 전망


-tip
> 쉬운 단어로 쉽게 설명하라
> 독자의 입장에서 고민하라
> 비중과 위치로 중요한 부분을 강조
> 모든 결과를 논문에 다 넣을 필요가 없다

- 논문은 표현은 쉬운데 내용은 깊게 -

5장
============================================
서론은 논문의 예고편
what? ;어떤 주제에 대해 연구해 봤는데,
why? ; 이 연구가 왜 중요하냐면(지금까지는 어디까지 알려졌는데)
how? ; 그래서 우리는 어떤 실험을 해봣다

1.
what?은 강렬하고 짧은 1-2문장으로 쓰는것 추천
why? 앞에서의 what의 문장을 자연히 받아 구체적으로 풀어 써주면서 왜 이 주제가 흥미로운지, 이 연구가 의의가 중요한 의미가 될수 있다는 점을 시사하는것도 좋은 방법

2. previous work
- 이 연구가 왜 중요한지 부각시키는 것에 집중
- 확신적인 표현보다는 완곡한 표현으로
- 내가 조사를 해봣는데 내가 조사한거에는 없다.
- 중요한것(직접관련된 내용) 부터 이야기 하고 덜 중요한것(간접 관련된 내용) 나중에 언급
- 기존 연구들을 언급 한 뒤 , 다시한번 연구의 중요성을 강조하는 것도 좋은 방법

3. HOW
문단을 바꾸어서 논문의 핵심 방법론 기술
그 다음 문장에서 구체적으로 실험 방법/내용을 소개

3. abstract
- intro 한번 더 요약
- what+ (why) + how

====================================================
6장
literature search : how
왜 논문 조사를 해야하는가?
- novelty : 기존 이론, 실험결과 등을 파악해야 함
- methods : 내가 연구에 사용할 수 있는 방법 파악
- comparision : 내 결과가 타당한지 비교 검토


https://scholar.google.co.kr/ 에서 검색해봄


=====================================================
7장
가능한 많은 사람들에게 보여줘라
- 수정과정에서 논문의 구성을 바꾸는 것을 두려워 하지 말라
- 가능한 쉽게 써라

checklist: figure
- scale bar, color bar & units 완벽하게 파악
- 그림 속의 약어들은 모두 표현 되어야됨
- 그림 속의 결과들은 모두 본문에 있는지

- 본문에서 그림 호출(fig. 1) 다음에 그림이 배치되었는지
- 문장 시작할 때는 fig.라는 축약대신 figure라고 다 풀어쓰길
- 그림에서 subfigure (a)로 표기면 본문에서도 fig. 1(a)로 똑같이 쓰기

checklist: result
- 결과로 확신 할 수 있는지 주장인지? 다른 가능성은 없는지?(그에 맞게 작성)
- 쉽게 설명이 되었는지?
- 논리적인 비약이 없는지?

checklist: text
약어: 처음에 정의하고 그 이후 통일성 있게 쓰기 ctrl+f 활용
약어: 3번 이상 사용하는 경우에만 약어 사용
약어: 초록과 본문은 별개의 문서 = 초록에서 약어 정의 했어도 본문에서 사용한다면 다시 정의해야됨
숫자+ 단위 사이에는 space: ex> 10%, 10c
문장을 시작할때 기호로 시작하지 마시오

checklist : refs. etc.
중복된 참고문헌은 없는지
issue #,  page #, yr등 확인: endnote가 완벽하진 않다.
be professional : 정확한 기호 표시
정확한 표현으로 : 10개 정도-> 13개

단어 뜻은 정확히 알고 사용
강조 표현은 제대로
부정적인 표현은 덜.. 쓰도록

===============================================
수강완료

2017년 8월 2일 수요일

자바스크립트에서 csv 파일 생성시 한글 깨짐 문제 해결



var data = "홍길동,1,2,3\r\n홍길동2,1,2,3"
var pom = document.createElement('a');
var blob = new Blob([data], {type: 'text/csv;charset=utf-8;'});
var url = URL.createObjectURL(blob);
     pom.href = url;
     pom.setAttribute('download', '파일다운.csv');
     pom.click();

다운로드 받으려 하니 한글이 깨져 문제에 대해 여러 가지를 찾아보았으나 다 되지 않았다.

모든 형태가 utf-8로 되있었는데 한글이 깨져서 나오는 상황이었고
해결 방법은

var data = "홍길동,1,2,3\r\n홍길동2,1,2,3"
var pom = document.createElement('a');
var blob = new Blob(["\ufeff"+data+], {type: 'text/csv;charset=utf-8;'});
var url = URL.createObjectURL(blob);
     pom.href = url;
     pom.setAttribute('download', '파일다운.csv');
     pom.click();

\ufeff (utf-8 bom 문자열 추가) 하니 깨지지 않음을 확인 할 수 있었습니다.



참고는 https://stackoverflow.com/questions/31959487/utf-8-encoidng-issue-when-exporting-csv-file-javascript

2017년 8월 1일 화요일

자바스크립트에서의 글자수 체크

javascript 에서 textarea에서 엔터값을 넣었을때
\n(Line Feed) 값으로 표시된다

asp, mysql 에서는 chr(13)&chr(10) 즉 \r\n으로 개행문자가 표현되므로 이 것을 글자수로 체크하면 2자로 표현이 됨

* \r\n은 도스(윈도우즈)/ \n은 유닉스, \r(Carriage Return)은 Mac에서 CR+LF 구실을 합니다.

asp에서
Carriage Return 은 chr(13)
Line Feed 는 chr(10)


2017년 4월 19일 수요일

04-19

utf-8 ? utf-8 bom? 무슨차이? 왜 오류?


현상 : 가끔씩 페이지 맨 위에 빈 공백이 생김, 찾아보면 빈 공백만 있음, 크롬으로 찾아보면 &#65279; 문자열이 표시되있음

The character in question &#65279 is the Unicode Character 'ZERO WIDTH NO-BREAK SPACE' (U+FEFF) attached to your code on a copy/paste or during a faulty Save its so simple to fix that, just open that file by notepad++ and step follow -->  Encoding->Encode in UTF-8 without BOM. then save that. It work for me as well!

http://stackoverflow.com/questions/15801043/php-include-creates-unwanted-gaps-in-html


해결책 : UTF-8 BOM으로 되있는 페이지를 UTF-8로 변경

QA 1 : BOM(Byte Order Mark)이란?

유니코드가, little-endian 인지 big-endian 인지 아니면 UTF-8 인지 쉽게 알 수 있도록, 유니코드 파일이 시작되는 첫부분에 보이지 않게, 2~3바이트의 문자열을 추가 이것을 BOM이라고 함.

QA 2 : little-endian 인지 big-endian은 무엇인지?

MS윈도에서 내부적으로 사용되는 유니코드(UTF-16LE)는 16비트 즉 2바이트로 하나의 글자를 표현합니다. 바이트가 2개니까 이 바이트에 순서가 정해져 있어야 합니다. big-endian 은 있는 순서 그대로 바이트를 자연스럽게 나열하는 것이고, little-endian 은 속도를 빠르게 하기 위해서 거꾸로 나열하는 것입니다.

MS윈도의 유니코드는 리틀 엔디안 little-endian이 기본값입니다. 빅 엔디안 유니코드는, 울트라에디터 v11 등의 일부 프로그램에서 전혀 인식하지 못했습니다.


반면 UTF-8 에는 리틀 엔디안이나 빅 엔디안의 구분이 없습니다.


결론 : UTF-8 BOM으로 되있는 페이지를 UTF-8로 변경

2017년 4월 4일 화요일

2017-04-03

char vs varchar 차이

char는 고정길이 데이터
varchar는 가변길이(고정길이 포함)일 경우 사용

varchar2 블럭분할 발생
char 데이터가 없어도 빈(null) 데이터를 저장시 미리 공간 할당 하기때문에
비어있는 데이터를 update 하더라도 미리 할당된 공간 내에서 저장

2개의 블럭 I/O보다
1개의 블럭 I/O를 읽어오는것이 성능에 더 이득

https://okky.kr/article/217655 참고

===================================

varchar(10)이면 한글은 대체 몇자?

mysql , MariaDB
varchar(10) : 한글10자, 영문,숫자 10자

MS-SQL
varchar(10) : 한글 5자, 영문,숫자 10자
nvarchar(10) : 한글 10자, 영문, 숫자 10자

Oracle
varchar2(10) : 한글 3자, 영문,숫자 10자
nvarchar2(10) : 한글 10자, 영문,숫자 10자

2017년 3월 22일 수요일

라라벨(laravel) 동작정리

1. 모든 시작점
public/index.php

2. apache/nginx 요청

3. include  bootstrap/app.php 실행(서비스 컨테이너 인스턴스를 생성);

4. 서비스 컨테이너 인스턴스를 생성

5. 각 요청에 따라 http커널 or console커널로 보냄

5.1. HTTP 커널은 Illuminate\Foundation\Http\Kernel 클래스를 상속하고 있으며, 요청을 실행하기 전에 처리되는 bootstrappers (시작 코드)의 배열을 정의하고 있습니다. 이 시작 코드들은 에러 처리, 로그 설정, 어플리케이션 동작 환경의 감지 등 실제로 요청이 처리되기 전에 수행해야 되는 작업들을 의미합니다.

5.1.1 커널 부팅(부트스트래핑) 과정의 가장 중요한 것 중의 하나는 어플리케이션의 서비스 프로바이더를 로딩하는 것입니다. 어플리케이션의 모든 서비스 프로바이더는 config/app.php 파일의 providers 배열에 설정되어 있습니다. 먼저, 모든 서비스 프로바이더의 register 메소드가 호출되고, 이후에 등록 된 모든 서비스 프로바이더의 boot 메소드가 호출되어 집니다.

서비스 프로바이더는 프레임워크의 데이터베이스, 큐, validation, 라우팅 컴포넌트와 같은 다양한 컴포넌트의 부트스트래핑(부팅과 같은 기초 작업들)의 처리를 책임집니다. 프레임워크가 제공하는 모든 기능을 초기화 하고 설정하는 것으로, 서비스 프로바이더는 라라벨의 부팅(부트스트래핑) 과정에서 가장 중요한 기능이라고 할 수 있습니다.

2017년 2월 9일 목요일

php에서 메일제목 한글이 깨질때


php에서 한글인코딩을 보낼 경우 한글이깨지는 경우가 발생한다.



상황

- 홈페이지(php, linux, mysql)에서 메일(linux)을 보내는데 한글이 깨짐 

현상확인


#그림1
  (그림1 다음메일)


그렇다고 모두 그런것은 아니다.

#그림2
(그림2. 네이버 메일)


많이 쓰는 메일들에 대해서 테스트 해보았는데
(gmail, naver, daum or hanmail, nate 그리고 회사메일)
daum과 회사메일이 그림1과 같은 현상이 발생되었다.





그럼 원인에 대해서 생각해보자

1. 메일서버
2. 웹서버
3. DB
4. backend 언어
5. etc...


그럼 하나씩 짚고 넘어가보자

1. 메일서버 (x)
3. DB (x)
  - 기존 언어(asp, mysql) 홈페이지에서 메일(linux)을 보냈을때 정상적으로 발송됨

2. 웹서버의 문제
  - 리눅스서버 설정은 확인하고 조작해보기 힘드므로 마지막순위로 밀겠다

4. backend 언어(php)
- 남은건 이거 하나


해결

1. php한글깨짐을 검색해보면 관련 블로그가 많다



내용을 살펴보면 메일을 보낼때 헤더값으로 관련 정보를 넘겨준다.
넘겨줄때

$subject = "메일제목";

이럴경우

$subject = '=?UTF-8?B?'.base64_encode( "메일제목" ).'?=';

으로 utf-8로 메일을 보낸다는것을 명시해주면 된다.

기본적으로 메일을 보낼때 ASCII 문자열로 넘어가기때문에 인코딩에 대한 명시를 해줘야된다 한다.

이러한 형태로 인코딩을 적용되어 될 부분은 한글이 들어가야되는 부분(보내는이 이름, 받는이 이름) 들도 포함이다. 
그리고 내용은 하지말아야 한다.(해보니까 더 깨진다.. 그냥 보내야 정상임)
이부분에 대해선 더 확인해봐야될듯 하다.