회사일을 하면서 알게된 스케너에 관한 내용을 적어보고자 합니다.

필요한 정보를 바코드로 표현하는 바코드 폰트가 필요합니다. 폰트에는 1D바코드, 2D바코드로 구분됩니다.

1D 바코드를 표현하기 위해서는 텍스트 공간을 1D 바코드 폰트( ADVC128A.TTF ) 를 지정하고 변환하고자 하는 정보를 폰트로 표시될수 있도록 변환해 주는 작업이 필요합니다.

1D 바코드는 코드128 타입으로 변환하는 작업을 합니다.

2D 바코드는 PDF417 폰트로 지정해서 변환해 주면 됩니다.

이렇게 해서 출력된 바코드 정보를 읽어 주는 스케너가 필요합니다.

1D 바코드를 읽을수 있는 1D 스케너, 2D 바코드를 읽을 수 있는 2D 스케너로 나누어 집니다.

가격은 2D 스케너가 더 비쌉니다.

스케너를 구매에서 설치까지 주의해야 될게 있습니다.

정보를 읽어들이는 프로그램이 키보드 입력을 원하는지 아니면 통신방식을 원하는지에 따라서 달라집니다.

키보드 웨지 타입 과 RS232C 타입으로 나누어 집니다.

키보드 웨지 타입은 키보드출력 단자에 스케너를 연결해 주면 설치가 완료됩니다.

RS232C 타입을 DLL 파일( MSCOMCTL.OCX, MSCOMM32.OCX) 을 설치해 줘야 합니다.

시리얼 통신으로 프로그램 실행하는 방법

1. 실행파일로 환경을 구축한다.

   path = c:\windows\system32

   regsvr32 c:\kdac\mpms_gather\MSCOMM32.OCX

2. OLE Customer Control Object을 생성한다.

3. 생성된 Object의 속성을 설정한다.

  If ole_ComScanner.object.PortOpen = True Then

 ole_ComScanner.object.PortOpen = False

  End If

  ole_ComScanner.object.CommPort = 1

  ole_ComScanner.object.Settings = "9600,n,8,1"

  ole_ComScanner.object.RThreshold = 1

  ole_ComScanner.object.PortOpen = True

4. oncomm event에서 비지니스 로직을 수행한다.

  string barcode

  GraphicObject which_control

  sleep(0.5)  // 정보를 이벤트에서 받아들일수 있는 시간

  barcode = ole_comscanner.object.input

  Choose case gi_page_index

case 3

// 실적조회

//w_mpsg090i.TriggerEvent("ue_line_select")

case 4

// 작업일보

//w_mpsg080i.TriggerEvent("ue_line_select")

case else

// 간판 입력창에 Focus

IF IsValid(w_mpsg030i) THEN

// 실적등록화면 최상위로

w_mpsg030i.BringToTop = TRUE

// 실적등록의 LINE선택 이벤트

w_mpsg030i.TriggerEvent("ue_line_select")

// 간판번호 입력창의 초기화및 FOCUS

w_mpsg030i.em_kb_no.text = ''

w_mpsg030i.em_kb_no.SetFocus()

ELSE

// 실적등록 Open

Open(w_mpsg030i)

END IF

which_control = GetFocus()

IF TypeOf(which_control) = EditMask! THEN

w_mpsg030i.em_kb_no.text = barcode

IF w_mpsg030i.wf_transaction_select() THEN

// 해당간판 등록

Open(w_mpsg050u)

ELSE

// 해당간판 오류 표시

OpenWithParm(w_mpsg013b,"작업장을 확인하십시요"

// 갱신

w_mpsg030i.em_kb_no.text = ''

w_mpsg030i.em_kb_no.SetFocus()

END IF

END IF

  end choose




블로그 이미지

희망잡이

,




html 파일, css 파일, js 파일 상호간의 연관관계를 이해하고 예제를 실행볼려고 합니다.

뒤의 두파일 css 파일은 웹화면의 비쥬얼을 담당하고 js 파일은 행동대원이 되겠네요.

웹화면의 한페이지를 장식할 내용을 정하고 나면 구조적인 문제가 대두 됩니다.

어떻게 배치를 할지에 대한 디자인을 그려 봐야 합니다.

디자인이 완성되면 각 위치에 해당하는 태그가 결정되어서 영역을 형성하게 될겁니다.

이때 이 태그에 대한 각각에 대한 스타일리스트를 붙이고 이 스타일리스트들을 묶어 놓은것인 css 파일입니다.

사용법도 경우에 따라서 다양하게 사용할수 있기 때문에 어렵게 느껴집니다.

id 를 지정할때는 #id { } 로 스타일 지정해 줍니다. 일반적으로 tag { } 로 지정합니다.

만들어 놓은 css 파일을 html 파일과 연계하는 작업이 있습니다.

Head 태그에 <link> 태그의 속성값으로 지정해야 합니다.  <link href=" " rel="stylesheet">로 하면됩니다.

다른방식은 생각하지 않을려고 합니다.

js파일도 공통사항으로 적용되는 경우에는 Head태그에 <script src=" "></script>로 행동대원을 호출하면 됩니다.

화면의 특정한 위치에 해당하는 이벤트가 필요한 경우에는 따로 js 파일을 만들어서 

그 태그 뒤나 앞에서 <script src=" "></script> 에 지정해 주면 됩니다.


태그의 속성값이나 상태를 눈으로 확인하기 위한 프레임워크를 만들어보고자 합니다.

화면에 원하는 정보가 보여지고 그 하단에 showArea 라는 id 로 표시공간을 형성하고자 합니다.

순서와 상관없는 리스트형태의 공간으로  <ul id=showArea></ul> 라고 지정합니다.

그리고 이 태그에 스타일을 지정해 줘야 겠지요

#showArea { list-stype: none; margin: 0; padding: 0; }

이렇게 하면 보여줄 공간과 어떻게 보여줘야 하는지를 정했습니다.

행동대원을 교육시켜야 하겠네요

함수를 지정합니다. var show = function(title, value) { }

우리가 약속한 공간에 들어갈 리스트를 작성합니다.

var node = document.createElement('li');

공간을 showArea 라는 id 로 찾아서 그곳에 들어갈 태그를 추가시켜줍니다.

document.getElementById('showArea').appendChild(node);

다음으로 들어갈 내용을 텍스트 노드를 만들어 줍니다.

var result = document.createTextNode(title + ' : ' + value);

마지막으로 태그노드에 텍스트 노드를 붙여주면 됩니다.

node.appendChild(result);


각 화면에서 위에서 만들어 놓은 show 라는 함수를 호출하면 화면에 보여집니다.

var element = document.getElementById('cssElement');

show('id',element.id);




블로그 이미지

희망잡이

,


파워빌더 통합개발환경으로 구축된 ERP시스템을 운영하면서 현장 사용자가 요청하여 프로그램을 개발했습니다.

사용자요구사항은 기존프로그램에서 지역, 공장별로 7번을 조회해서 다운로드하여 데이타를 취합하여 보고자료를 작성해야 하는 반복적인 작업을 클릭한번으로 전공장을 조회해서 다운로드할수 있도록 해 달라는 것이었습니다.

예전에 읽었던 유스케이스 다이어그램 이란 책에는 시나리오별로 유스케이스를 도출했습니다.

하나의 유스케이스에는 시스템영역과 사용자영역으로 나누어 집니다.

유스케이스 01

1. 정상흐름

사용자가 화면에 들어와서 조회조건을 입력하고 조회아이콘을 클릭한다. 사용자영역

시스템은 조회조건을 받아서 각 지역별 데이타베이스에서 쿼리해 와서 취합하여 사용자에게 보여준다. 시스템영역

사용자는 엑셀파일을 클릭하여 파일로 저장한다. 사용자영역

2. 대안흐름

?

3. 예외흐름

사용자가 조회조건을 입력하지 않았거나 형식에 맞지 않는 경우에는 메시지를 던져준다.

4. 흐름상 주의사항

이벤트 구조상 날짜를 입력받는 오브젝트는 사용자가 키보드로 날짜를 수정한 다음에 Focus 이동없이 조회 아이콘을 클릭하면 변경된 날짜가 반영되지 않는다.

따라서 강제적으로 LoseFocus 를 발생시켜서 변경된 날짜를 받아오도록 처리한다.

Object.TriggerEvent("ue_losefocus")


세상에 만족스러운 테스트는 없는 것 같다.



블로그 이미지

희망잡이

,

Git cheat sheet

정보기술(IT) 2012. 8. 31. 18:43



IT명령어에 대해서 익숙하지 않으면 즉 반복적으로 자판에서 치지 않으면 잊어버리기 쉽습니다.

그러면 다시 매뉴얼이나 책을 뒤져서 적당한 명령어를 찾아야 하지요.

이친구는 그런 어려움을 없애기 위해 컨닝 페이퍼 즉 cheet sheet 를 만들어서 배포하고 있습니다.

GIT 버전관리시스템을 활용할때 옆에 두고 사용하면 도움이 될듯 싶습니다.

그리고 svg 로 만들때 사용한 툴은 Inkscape 라고 하네요.

출처 : http://zrusin.blogspot.kr/2007/09/git-cheat-sheet.html


GIT 와 관련된 사이트 참고

Intro to Git for Web Designers

관련사이트 : http://www.webdesignerdepot.com/2009/03/intro-to-git-for-web-designers/


블로그 이미지

희망잡이

,




법원이나 경찰의 바이패스와 관련된 아래의 기사 내용이 있었습니다.

" 구글은 패스워드를 위한 암호그래픽해시(cryptographic hash for passwords)로 불리는 훌륭한 보안장치를 채택하고 있었다. 

또 이메일의 암호화로 인해 특정 이메일 계정 패스워드에 접속할 수 없었다.

법원판사의 영장을 발부받은 경찰이 할 수 있는 방법은 구글에게 패스워드를 재설정토록 하고 이를 제공받는 방법이 있을 뿐이었다.

바이패스는 휴대폰을 소유자 몰래 수색해 엿보고 흔적이 남지 않게 빠져나가는 것이다. "


해쉬함수 나 해쉬테이블을 사용하는 주된 목적은 두가지 인것 같다. 보안을 목적으로 하는 경우와 색인을 빨리하기 위한 목적일 것입니다.

특정길이 SHA-1 인 경우에는 32bit 로 해쉬값을  만들어서 bucket 리스트에 저장해서 사용할 것입니다.

우리가 패스워드를 입력해서 버튼을 클릭하면 내부적으로 시스템은 이 패스워드를  해쉬함수를 써서 해쉬값을 구하고 로그인ID로 저장된 패스워드 해쉬값과 비교하여 인증절차를 밟을 것입니다.

데이타베이스에 패스워드의 해쉬값을 저장해야 하는이유는 사람들이 접근했을때 알지 못하도록 하는데 있습니다.

읽을수 있는 문자나 숫자로 되어 있다면 조회해서 알수 있겠지요.

그리고 색인을 목적으로 하는 경우에는 데이타베이스에서 인덱스 기능을 예로 들수 있습니다.

데이타베이스에서 테이블은 키값을 가지고 있고 이 키값을 해쉬함수를 통해서 해쉬값을 얻어서 색인 알고리즘을 만들어 놓은 것이 인덱스라고 보면 될듯 합니다.






블로그 이미지

희망잡이

,




현재 Git는 Public 과 Private 로 나누어서 사용할수 있도록 되어 있습니다.

PC에서 작업한 변경파일을 Local Repository 에서 이력관리 할수 있습니다. 또한 이 Local Repository 의 백업으로 Remote Repository 를 설정할수도 있습니다.

Remote 로 관리를 할때에는 Public로 설정되어 있으면 모든 사람에게 오픈되어 있기때문에 노출되어서는 안되는 자료가 올라갈수도 있습니다. 정보보안관리를 잘해야 할듯 합니다.


Remote Repository를 재설정하는 작업을 해보았습니다.( 무턱대로 들이대었지요.ㅋ )

1. GitHub.com 사이트에서 자신이 관리하고 있는 레파지토리의 admin으로 들어갑니다.

화면 하단에 보면 Git Danger Zone이 있는데 이곳에서 기존 Remote Repository를 삭제해 보았습니다.

한번 삭제하면 복구는 불가능하다고 적혀 있네요.



2.  내 PC의 Git Console 화면에서 Local 과 Remote 를 재연결하는 작업을 합니다.

Git pull 명령어 실행하면 

gitignore. 

README.md 

추가생성한 2개의 파일을 Local로 다운로드 합니다.



3. Local 파일 정보를 Remote 로 Push 하면 완료됩니다.


Git 작업시에 필요한 명령어

특정파일을 삭제할려고 할때  : git rm 파일명

특정디렉토리에 있는 모든 파일을 삭제할려고 할때 : git rm -r images/*

삭제된 파일을 add 할때 :  git add -u

삭제한 것을 복구할때 : git reset --hard HEAD



블로그 이미지

희망잡이

,


소스관리를 GitHub를 사용할려고 하니 프로그램수정에서 최종 Commit 하고 원격서버에 Push 단계를 쉽게 할수 있는

통합개발환경을 갖춘도구는 이클립스 인것 같습니다.

물론 다른 도구도 있겠지만 나에게 익숙한게 편해서 이클립스를 택했습니다.

회사에서 생산과 관련된 시스템을 운영하면서 관련 SQL 문을 수정하고 빈번하게 발생합니다.

이기종 간의 데이타베이스에 업무가 연계되어 있기 때문에 별도의 환경에서 테스트도 해야 되는 불편함이 있습니다.

그래서 이클립스안에서 SQL문을 편집하고 저장하고 실행할수 있는 플러그인을 설치하기로 했습니다.

플러그 인 명 : SQL Exploror( http://eclipsesql.sourceforge.net/ )

zip 파일을 다운로드해서 이클립스 폴더에 압출을 해제해서 재실행하면 됩니다.


1. IBM iSeries DB2 접근을 위한 JDBC 드라이버 다운로드

자바를 위한 IBM 툴박스를 다운로드 합니다. 이것은 IBM이 자바로 데이타베이스에 접근할수 있도록 배포하는 파일입니다.

Toolbox for Java and JTOpen

http://www-03.ibm.com/systems/i/software/toolbox/downloads.html

최신 파일을 다운로드 합니다. ( jtopen_7_7_1.zip )


2. Connection 연결하기

입력해야 될 공간에 아래 정보를 참고하여 기입합니다.

# DB2 Driver # jt400.jar

databasename=xxx

driver=com.ibm.as400.access.AS400JDBCDriver

url=jdbc:as400://[ip]/[libarary]

username=?

password=?



블로그 이미지

희망잡이

,




Screenshots from a competing Emoji app. The app (left) is opened once to provide the user with instructions on 

how to enable the Emoji keyboard (right).


Step 2: Align Your Ideas with Successful Apps

마켓이 당신의 앱을 원하는지를 당신은 어떻게 아나요? 다시말해 당신은 앱차트 탑을 볼 필요가 있을겁니다.

거기에 등록되어서 당신이 생성하기를 원하는 것과 같은 앱들이 있습니까? 만약에 그렇다면 당신은 잠재적인 승리자의 위치를 얻었습니다. 그렇지 않다면 계속해서 지켜보십시요. 간단하지요.

모방하는것을 미워하지 마십시요. 성공한 앱들의 발자취를 따라갈때  당신은 더 좋은 성공기회를 가질 것입니다.

왜냐하면 이 앱들은 사용자 기반과 시장의 검증되어진 요구조건을 가지고 있기 때문입니다.

기존 앱들에 대한 모방의 중요성은 아무리 강조해도 지나치지 않습니다.   사람들은 자신들의 생각에 쉽게 몰입하고 소중하게 생각합니다. 그 생각에 대한 시장의 욕구가 보이지 않는다 하더라도...

이것은 당신이 만들수 있는 가장 값비싼 실수중 하나일 것입니다.

불행하게도 개발자들은 항상 이러한 실수를 합니다. 그들은 창조적인 생각을 하는데 초점을 맞추고 많은 시간과 노력을 그런 앱을 만드는데에 사용합니다.

그것이 무용지물이 되었을때 그들은 시장으로부터 배울 생각을 하지 않고 또다른 검증되지 않은 생각으로 이동합니다. 

종종 그들은 이사이클을 돈을 탕진하거나 앱게임을 묵살할때까지 되풀이 합니다.

이러한 것이 당신의 경험이 될 필요는 없습니다.

경쟁자를 성공적으로 모방하는 법에 대한 개인적인 예는 나의 Emoji app 입니다. 

우선 나는 시장에 제공된 것이 무엇이며 다수의 emoticon app 을 다운로드하여 자세하게 살펴보았습니다.

내가 본 것은 좋은것들이었으나 거기에는 다양한 결함과 제한된 기능들이 있었습니다.

나는 이러한 기존에 알려져 있는 앱들을 개선하면 어떨까 하는 의문을 가지게 되었습니다.

Emoji 키보드가 추가할 수 없는 제한된 이모티콘 수로 한정되어 있는 기존앱에 대해서...

나는 이러한 앱들이 단지 한번 사용되어 진다면 어느정도의 이익이 생기는지 궁금해 졌습니다.

나에게 이거다 하는 생각이 들때까지 계속해서 브레인스토밍을 했습니다. 나는 Emoji 키보드에 이모티콘들을 추가할 수 없었습니다. 그러나 나는 텍스트메시지나 이메일을 통하여 이미지로서 사람들이 보낼수 있는 나의 앱안에 제한되지 않은 이모티콘들을 포함할수 있도록 했습니다.

나는 Emoji 키보드가 가능할뿐 아니라 그 앱안에 추가적으로 450개의 이모티콘들을 포함할수 있는 앱을 만들었습니다. 그것은 SMS, 이메일, 페이스북 등에서 공유되어지록 되어 있습니다.

이 앱은 사용자들이 이모티콘을 보내기 위해 들어왔던 이래로 계속해서 사용되었습니다.





이 Emoji 앱은 개발하는데 2주일이 걸렸습니다. in-app 구입 옵션으로 무료로 그리고 프리미엄 모델을 추가했습니다.

이 앱은 앱스토아의 생산성 카타고리에서 넘버원 지점을 차지했고 6일동안 무료 전체 카타고리에서 12위 안에 들었습니다.

하루에 500 달러를 기록하면서...

여러분이 앱을 모방하기 위해서 살펴보기로 결심할때마다 당신자신에서 6가지의 질문을 던져보십시요.

1. 사람들은 이 앱을 왜 구입했을까요?

2. 이앱이 가진 아이디어을 모방하기 위해 내가 어떤것을 할수 있으며 다른 레벨로 그것을 가져갈수 있는지?

3. 무슨 다른 아이디어가 이 앱의 데모그래픽과 비슷한가?

4. 얼마나 많은 비슷한 앱들이 시장에 존재하는가? (Visit TopAppCharts.com to find out.)

5. 그들은 어떻게 성공적으로 일관성있게 지속해 왔는가?

6. 어떻게 그들의 시장과 가격모델이 작동하는가?


Step 3: Design Your App's Experience ( 여러분 앱의 경험을 그려라 )


블로그 이미지

희망잡이

,