Entries for month: December 2009



사진찍은 곳을 찾을 수 있는 GPS 기능이 내장된 디지털 카메라
Category : Miscellaneous Comments : 댓글쓰기 Posted by 장창학 at 3:49 PM

GPS수신장치가 내장된 제품들JPG사진에 내장된 GPS정보를 이용한 어플리케이션을 구축할때 필요한것은 물론 GPS정보를 저장되는 JPG안에 내장해 주는 디지털카메라 또는 GPS수신장치인데, 검색을 하고 보니 그간 꽤 많은 제품이 이런 GPS모듈을 내장하고 있었군요.

특히 삼성디지털이미징의 ST1000의 경우 구글피카사와 연동하여 위치를 잘 찾아줍니다. 몇개 제품이 더 있던거 같은데 일반적으로 GPS가 내장되지 않는 디카라도 별도의 수신장치 예컨데, 소니의 GPS-CS3KA나 니콘의 GP-1을 연결하면 된다고 하더군요.

또한 아이리버 NV와 같이 카메라가 내장된 PMP는 GPS모듈이 내장된 경우도 있습니다. 국내출시된 GPS내장형 휴대폰은 수십종에 이미 이르고 있고요.. ^^

앞으로는 이미지갤러리 웹사이트를 만들때 GPS정보를 활용하는 콘텐츠 및 어플리케이션을 만들면 재미있겠군요.. ^^

 


최근에 제 Blog가 Spam폭탄을 맞아서 스팸차단룰을 강화했더니 일부 댓글이 등록되지 않았습니다.
Category : Miscellaneous Comments : 2 Comments Posted by 장창학 at 11:19 AM

최근에 제블로그가 스팸폭탄을 맞아서 스팸차단룰을 강화했더니 일부 댓글이 등록되지 않았습니다. 죄송합니다. 다행히 CFFormProtect는 로그를 메일로 전달하므로 메일로 모두 수신하였습니다. 먼저 원인이 뭔지 일단 찾아 봐야겠네요. ^^;

먼저 솽민군님께서 IPhone에서 찍은 사진을 어디서 찍었는지 찾아보기 - Find a location of Iphone pictures 글에 "창학님, 콜퓨과 아이폰을 접목시키고 계셨군요.;;;;;; 브라보.ㅎㄷㄷ" 글 남겨 주셨습니다. 그리고 성주님께서 같은 글에 "와아~ JPEG파일의 EXIF정보로 GPS의 단점과 활용성을 한 포스트에 다 담아주셨네요!" 라고 달아 주셨습니다. ㅠㅠ; 두분 죄송합니다.

그리고 마지막으로 Cafe24의 가상서버 상품시 체크할 사항 몇가지 글에 나그네님께서 "좀 수정하자면 CentOS 설치시디가 DVD 1장인것은 기업용 서버환경에 필요한 모든 패키지를 전부 포함하고 있기 때문입니다. 우분트 설치 시디가 시디 1장인것은 기본적으로 인터넷으로 연결된 환경에서 OS를 설치한다는것을 가정한 것입니다. 나머지 필요한것은 apt로 받으라 이거죠. 하지만 엔터프라이즈 환경이 100% 네트워크로 연결된다는 법이 없습니다. 시디와 DVD로 작업해야 하는 환경도 있을 수 있다는 것입니다. 그래도 나는 가벼운 설치 시디 1장짜리가 좋다면 CentOS도 1장짜리 서버용 버전이 있을 뿐만 아니라 가벼운 네트워크 설치용 버전도 있습니다. 처음 설치시 잡다한 패키지가 깔리지 않게 하고 싶다면 간단한 설정만으로 가능하며 설치시간도 5~10분정도면 됩니다. 그리고 CentOS의 기본적인 보안정책은 개방이 아닙니다. yum가 apt의 비교는 웃음만 나오네요 여러가지 CentOS에 대해서 잘못 알고 있는 부분이 많은것 같네요. 최상의 배포판이라는것은 없습니다. 우분투는 우분투대로 젠투는 젠투대로 데비안은 데비안대로 그리고 CentOS는 CentOS대로 사용자의 익숙함에 따라 최상의 배포판이 되기도 최하의 배포판이 되기합니다. " 라고 적어 주셨습니다.

나그네님의 말씀 겸허히 들었습니다. 일부 제가 잘못알고 있는 부분도 있고 일부 CentOS만의 장점도 있겠구나 생각도 했습니다. 다만, 제가 평소 우분투를 주로 사용하다보니 우분투에 빗대어 단순비교했던 우매함을 용서바라겠습니다. ^^ 일반적인 단순 웹서버APM을 운영하는데 있어 CentOS의 그것보다는 우분투가 설치/배포/관리가 편리해서 생긴 오해라고 생각해 주세요.

아.. 일단 이 스팸폭탄을 어찌해야 할지... 일일히 수고스럽지만 앞으로는 거부가 아닌 스팸이라도 일단 등록하고 나중에 제가 지우는 형식을 취해야 할 지 모르겠네요.. ^^


Railo : IPhone에서 찍은 사진을 어디서 찍었는지 찾아보기 2 - Find a location of Iphone pictures 2
Category : ColdFusion , Railo , Mobile Comments : 댓글쓰기 Posted by 장창학 at 3:00 AM

이 글은 이전 글인 "IPhone에서 찍은 사진을 어디서 찍었는지 찾아보기 - Find a location of Iphone pictures"의 후속판? 입니다. :)

Adobe ColdFusion 8이상의 버전에서는 ImageGetEXIFMetaData() 함수를 지원하기 때문에 쉽게 JPG의 EXIF정보를 추출할 수 있었습니다. 하지만 불행히도 Railo/OpenBD에서는 지원을 하지 않는 함수인데요. 이런 경우 ColdFusion의 기반 플랫폼인 Java의 힘을 빌리면 됩니다. ColdFusion은 자신이 가진 언어적 스펙이 지원되지 않는 경우 Java(경우에 따라서는 .net까지도)로 작성된 소스를 가져다 쓸 수 있는데, createObject()함수를 통해 확장이 무한정 열려 있습니다. 간혹 이런 기능을 지원하는 함수가 있으면 좋겠다 하는 경우 직접 Java로 만들어도 된다는 것이죠. 실제로 해외에서는 ColdFusion용 Java 컴포넌트 등을 만들어 파는 경우도 많습니다.

여튼 오늘 해볼 방법은 "Reading JPEG Exif data with ColdFusion and Java"의 예처럼 EXIF정보를 읽어줄 jar파일을 이용해서 Railo/OpenBD의 기능을 확장해 JPG의 EXIF정보를 Adobe ColdFusion의 ImageGetEXIFMetaData() 함수와 동일하게 처리해 보겠습니다. 위 링크에서 필요한 파일이 CFreadExif.jar 파일인데, 실제로 위 페이지에서는 해당 파일이 서버상에서 삭제되었는지 다운로드 할 수 없었습니다. Where is CFreadExif.jar file? 정작 제일 중요한 파일이 없더군요. 하여 구글로 파일명을 검색을 해 보았으나 역시 자료라곤 딸랑 3곳나오길래 혹시나 하고 구글에 아카이브된 자료를 찾아 다운로드 할 수 있었습니다. (구글 고맙기도 하고 무섭기도 합니다. 웹에 있는 거의 모든 자료는 구글에서 아카이브 합니다. 웹개발자는 구글을 조심해야 합니다.ㅋㅋ 개발중인 모든 것이 이미 다 노출될 수 있으니까요.)

이 파일을 다운로드 한 후 압축을 풀고, Railo인 경우 CFreadExif.jar 파일을 자신의 Home Directory안의 {wwwroot}/WEB-INF/railo/lib 안에 upload 합니다. Railo를 Restart 해줍니다. 그런다음 다음과 같이 코드를 작성합니다. Adobe ColdFusion의  ImageGetEXIFMetaData() 함수를 쓴 것 처럼 매우 간결하게 동일한 결과를 얻을 수 있습니다.

 

<cfset imgFile = #ExpandPath("sample.jpg")#>

<cfscript>
	exifReader = createObject("java","com.drew.imaging.coldfusion.CFreadExif");
	exifReader.init();
	exifReader.loadImage('#imgFile#');
</cfscript>

<!---cfdump var="#exifReader.getAllData()#"--->

<cfset arData = exifReader.getAllData()>

<!--- DMS(도, 분, 초 단위)의 위/경도 정보를 구글맵스가 인식하는 DD(도/도) 정보로 변환 --->
<cfset GPSLatitude = (listlast(#arData[37]#, chr(34)&chr(39))/60 + listgetat(#arData[37]#, 2, chr(34)&chr(39)))/60 + listfirst(#arData[37]#, chr(34)&chr(39))>
<cfset GPSLongitude = (listlast(#arData[39]#, chr(34)&chr(39))/60 + listgetat(#arData[39]#, 2, chr(34)&chr(39)))/60 + listfirst(#arData[39]#, chr(34)&chr(39))>

<cfoutput>
	<strong>카메라 제조사(Maker)</strong> : #arData[1]# <br />
	<strong>카메라 모델(Model)</strong> : #arData[2]# <br />
	<strong>찍은 날짜(Date time)</strong> :  #arData[15]# <br />
	<strong>찍은 고도(Altitude)</strong> :  #arData[41]# <br />
	<strong>위도(Latitude)</strong> : #GPSLatitude# <br />
	<strong>경도(Longitude)</strong> : #GPSLongitude#
</cfoutput>
<br /><br />

<!--- 변환된 좌표값을 구글지도의 좌표URL변수에 할당 --->
<strong>지도에서 찍은 위치 보기(Map Location)</strong> : <a href="http://maps.google.com/maps?q=<cfoutput>#GPSLatitude#</cfoutput>,+<cfoutput>#GPSLongitude#</cfoutput>+%28%BB%E7%C1%F8%C0%BB%20%C2%EF%C0%BA%20%B0%F7%20%C0%D4%B4%CF%B4%D9%29&iwloc=A&hl=ko" target="_blank">새창</a>
<br />
<br />
<!--- 원본 이미지 출력 --->
<img src="sample.jpg" mce_src="/blog/sample.jpg" />

 

위 CFreadExif.jar에서 제공하는 Methos를 확인하려면 <cfoutput>#exifReader.getAllMethods()#</cfoutput>해보시면 됩니다. 하지만 Adobe ColdFusion의 ImageGetEXIFMetaData함수에 비하여 제공되는 메소드가 적어 GPS정보를 추출할 수 없으므로 cfdump var="#exifReader.getAllData()#" 의 주석을 해제하여 Array 정보를 알아보고 그 순번을 출력하면 됩니다.


IPhone에서 찍은 사진을 어디서 찍었는지 찾아보기 - Find a location of Iphone pictures
Category : ColdFusion , Mobile Comments : 10 Comments Posted by 장창학 at 3:54 AM

Iphone Image애플의 아이폰은 일반적인 디지털카메라나 핸드폰과 다르게 GPS모듈을 담고 있기 때문에 사진을 찍으면 노출정보, 색상프로필, 찍은 날짜, 기종, 모델 등의 정보외에 위도/경도/고도정보를 JPG의 EXIF정보에 담아 저장합니다. 즉, 사진을 찍으면 언제, 어디서 찍었는지를 JPG안에 담아 두는 것이지요. 물론 ACDSee 등에서 이 JPG를 가공하더라도 특별히 이 메타정보를 지우지 않는한 계속유지됩니다. 그래서 사생활 보호에 민감한 이슈가 되는 것이고, 방송통신위원회에서 애플의 위치정보사업자 허가를 고민했던 것입니다. 가령, 어떤 여학생이 "우리집에서 찍은 내얼굴" 이란 사진을 공개된 카페 등에 업로드했는데 변태남이 이 사진에서 위치정보를 추출하여 위도/경도를 기초로 이 여학생이 사는 집의 위치, 주소를 쉽게 파악하여 스토킹을 할 수 있는 다소 위험(?)한 상황도 나올 수 있는 것이죠. 

그래서 아이폰에서 찍은 사진은 반드시 인터넷에 공개하기 전에 이미지 편집소프트웨어, 뷰어 등으로 이런 위치정보를 반드시 제거하길 적극 권해 드립니다. 그렇지만 잘만 활용하면 다양한 재미있는 서비스를 할 수 있는데 오늘은 아이폰으로 찍은 사진에서 위치정보를 추출하여, 구글지도에 위치를 찍어보도록 하겠습니다. 물론 코드는 ColdFusion코드입니다. ㅋ 

ColdFusion은 ImageGetEXIFMetaData()을 지원하여 다른 언어보다 쉽게 JPG의 EXIF정보를 추출할 수 있도록 제공합니다. 이 메타정보중에 필요한 것이 위도, 경도 정보인데 제가 지리학을 잘 몰라서 고등학교때 배운지식으로만 접근하다보니 난관이 있었습니다. ImageGetEXIFMetaData() 함수를 이용해서 위도 35도10분55초 와 같은 정보를 추출하는 것은 두어줄의 코드면 끝나지만, 구글맵은 이런 좌표를 사용하지 않더군요. 이 관계를 이해하는데 꼬박 하루가 걸렸습니다. 아무리 검색을 해봐도 이와같은 고민을 하는 분은 대한민국에는 없는듯.. ㅠㅠ;(엄마 나 똘아인가봐 ㅠㅠ;) 

어찌되었든 도/분/초 단위를 도/도 단위로 변경해야 하는 것은 지리전문 웹사이트에서 알았고, 간단한 변환유틸도 받아 테스트 해 보았습니다. (첨부파일안에 실행파일로 있습니다.) 우선 금강산도 식후경이라고 일단 데모 샘플을 한 번 보시죠.

Demo View

Source Code Download

위 샘플에서 보시면 사무실 옥상에서 제가 촬영한 리사이즈된 이미지가 있는데 이 이미지의 EXIF정보중에서 기종, 모델, 날짜, 위치 등을 추출하여 보여주고 있습니다. 저희 사무실 주소가 광주광역시 동구 남동 44번지 인데 오차범위인 5M이내에서 정확하게 위치를 찍어줍니다. 아이폰 너무 무섭습니다.ㅋㅋ

Iphone EXIF Google Map

자, 이제 코드를 보도록 하죠. 코드는 간단합니다. 이미지를 서버상에서 읽어와 EXIF정보를 추출한 다음, 위도/경도 정보를 DMS형식에서 DD형식으로 변환하여 구글맵의 URL정보로 던져주는 코드입니다. DMS정보와 DD정보의 관계는 첨부된 위/경도 좌표변환기gkdtcc-kgrz.exe를 참조해 보세요.

<!--- Unicode환경으로 설정 --->
<cfprocessingdirective pageencoding="utf-8">
<cfcontent type="text/html; charset=utf-8">
<cfset setEncoding("URL", "utf-8")>
<cfset setEncoding("Form", "utf-8")>

<!--- 이미지경로에서 이미지 불러오기 --->
<cfimage action="read" source="#ExpandPath("./images/sample.jpg")#" name="sample_img">

<!--- ImageGetEXIFMetaData 함수로 이미지정보 추출--->
<cfset exifinfo = ImageGetEXIFMetaData(#sample_img#)>

<!--- ImageGetEXIFMetaData 함수로 추출한 정보 덤프 --->
<cfdump var="#exifinfo#">
<br />

<!--- ImageGetEXIFMetaData 함수에서 GPS정보만 따로 추출 --->
<cfset latitude="#ImageGetExifTag(sample_img, "GPS Latitude")#">
<cfset longitude="#ImageGetExifTag(sample_img, "GPS Longitude")#">

<br />
<!--- 카메라 제조사 정보출력 --->
<strong>카메라 제조사</strong> :
<cfif #exifinfo.Make# NEQ ""><cfoutput>#exifinfo.Make#</cfoutput><cfelse>정보없음</cfif>
<br />

<!--- 카메라 모델 정보출력 --->
<strong>카메라 모델</strong> :
<cfif #exifinfo.Model# NEQ ""><cfoutput>#exifinfo.Model#</cfoutput><cfelse>정보없음</cfif>
<br />

<!--- 실제 촬영일자 정보출력 --->
<strong>찍은 날짜</strong> :
<cfif #ImageGetExifTag(sample_img, "Date/Time Original")# NEQ "">
	<cfoutput>#ImageGetExifTag(sample_img, "Date/Time Original")#</cfoutput>
<cfelse>
	정보없음
</cfif>
</br>

<!--- 찍은 위치의 고도(Altitude) 정보출력 --->
<strong>찍은 고도</strong> :
<cfif #ImageGetExifTag(sample_img, "GPS Altitude")# NEQ "">
	<cfoutput>해발 #ImageGetExifTag(sample_img, "GPS Altitude")#</cfoutput>
<cfelse>
	정보없음
</cfif>
<br />

<!--- 찍은 위치의 위도(Latitude) 정보출력 --->
<strong>위도</strong> :
<cfif #lat# NEQ ""><cfoutput>#latitude#</cfoutput><cfelse>정보없음</cfif>
</br>

<!--- 찍은 위치의 경도(Longitude) 정보출력 --->
<strong>경도</strong> :
<cfif #lng# NEQ ""><cfoutput>#longitude#</cfoutput><cfelse>정보없음</cfif>
</br>

<!--- DMS(도, 분, 초 단위)의 위/경도 정보를 구글맵스가 인식하는 DD(도/도) 정보로 변환 --->
<cfset GPSLatitude = (listlast(latitude, chr(34)&chr(39))/60 + listgetat(latitude, 2, chr(34)&chr(39)))/60 + listfirst(latitude, chr(34)&chr(39))>
<cfset GPSLongitude = (listlast(longitude, chr(34)&chr(39))/60 + listgetat(longitude, 2, chr(34)&chr(39)))/60 + listfirst(longitude, chr(34)&chr(39))>

<!--- 변환된 좌표값을 구글지도의 좌표URL변수에 할당 --->
<strong>지도에서 찍은 위치 보기</strong> : <a href="http://maps.google.com/maps?q=<cfoutput>#GPSLatitude#</cfoutput>,+<cfoutput>#GPSLongitude#</cfoutput>+%28%BB%E7%C1%F8%C0%BB%20%C2%EF%C0%BA%20%B0%F7%20%C0%D4%B4%CF%B4%D9%29&iwloc=A&hl=ko" target="_blank">새창</a>
<br />
<br />
<!--- 원본 이미지 출력 --->
<img src="./images/sample.jpg" />
<br />
<br />


Worst IT Security Country 한국은 보안취약 선진국
Category : Securities Comments : 댓글쓰기 Posted by 장창학 at 12:57 PM

제 블로그에 내장되어 있는 Spam 차단 솔루션은 CFFormProtect라는 ColdFusion으로 작성된 오픈소스 차단툴인데요. 이 툴에서 참조하는 스팸차단정보는 AkismetHoneyPot입니다. 둘다 유명한 솔루션이여서 여러 Wordpress 등의 서비스에서 이용하고 있지요. (국내에서 배포하는 Textcube에서는 지원하는지 모르겠네요.)

best_worst_it_securities암튼 오늘 허니팟에서 보내온 메일을 보고 실소를 금할 수 없었습니다. 서비스를 시작한 이래 GMT기준 2009년 12월 9일 6시 20분경 10억번째 스팸이메일을 받았다는 내용이였습니다. 이 프로젝트의 서비스는 이메일, 블로그 등의 스팸댓글을 차단해 주는데 10억개의 스팸이라면 정말 어마어마한 숫자임에는 분명합니다.

문제는 스팸발송, 스팸에 대한 대처에 대한 결과에서 한국은 "IT보안 취약국가에 전체 국가중 당당히 3위"를 차지했다는 겁니다. 그렇게 IT강국이라고 국민을 기만하더니만.. 여러 다른 통계에서도 우리 국민의 보안의식 및 대처능력은 상당히 낮은 것으로 나타나고 있습니다. 게임과 인터넷이 발달해서 사용인구는 많지만 개개인의 보안인식 및 대처 Computing 능력은 현저히 떨어진다는 것이 맞나 봅니다. 기관, 회사등의 보안투자 역시 정말 최악이지요.

저만 하더라도 제가 아는 대부분의 기업에서 보안투자는 정말로 회사에서 여윳돈 있을때 조금 투자하는 것이거나 예산삭감의 주범이자 쓸데없는 자금낭비일 뿐 입니다. 최고경영자의 이런 사고도 문제지만 일반 직원의 PC보안관리도 엉망이죠. 그저 백신한두개 깔면 다인듯.. 그나마 제대로 된 백신이나 깔거나 하면 다행인데 P2P 등의 네트웍보안도 엉망진창입니다. 이런 능력을 인사고과에 반영해야만 열의가 생길듯 합니다.

자신의 PC나 네트웍, 서버가 스팸숙주서버가 되는 일은 쉬운일입니다. 인터넷, P2P에서 특정 코드가 들어간 파일을 열람하면 바로 감염될 수 있으며, 이러한 것들은 백신으로도 잡히지 않습니다.(정상적인 MTA:Mail Transper Agent로 인식되기 때문에)

제 블로그를 담고 있는 VPS도 고정아이피를 쓰고 있는지라 주된 공격대상이여서 늘 스팸에 시달리고 있습니다만, 다행히 아직까지는 CAPTCHA(이미지 스팸방지코드)와 CFFormProtect로 그럭저럭 막아내고는 있습니다. 스팸발송을 막거나 회피하는 정책보다는 스팸숙주서버를 차단하거나 보안이 취약한 PC의 인터넷 접속을 막거나 또는 스팸메일의 발송업체 및 발주업체에게 과태료 뿐만 아니라 가능하다면 역공격하여 시스템을 망쳐도 법적으로 문제가 없는 보다 적극적인 대책마련이 시급해 보입니다.


About me

Categories

Monthly Archives

Links

Recent Posts

Recent Comments