'자료 iN /IT & 개발 '에 해당되는 글 49건

  1. 안드로이드(Android), resources.ap_ does not exist Error 오류 해결방법
  2. 이클립스(Eclipse) 자체 내장된 로컬 소스 히스토리 관리 Compare with local Revision 사용 방법 6
  3. 이클립스(Eclipse), Usage Data Upload Collector (UDC) 사용자 환경개선 프로그램
  4. 이클립스(Eclipse)에서 안드로이드 에뮬레이터(AVD) 실행하는 방법
  5. 이클립스(Eclipse), 워크스페이스 변경과 Import로 복사한 소스코드 Workspace Project Explorer에 추가하는 방법
  6. 은행의 타행/타기관 공인인증서 사용등록의 답답한 인터넷뱅킹 UI/UX 인터페이스 화면들 2
  7. 제로보드 게시판별 통계 뷰어

안드로이드(Android), resources.ap_ does not exist Error 오류 해결방법

 
반응형
Description    Resource    Path    Location    Type
Error generating final archive: java.io.FileNotFoundException: C:\Android\Project\cultrueView\bin\resources.ap_ does not exist    cultrueView        Unknown    Android Packaging Problem

실행을 하려고 할때마다 자꾸만 이런 컴파일 오류가 발생한다.
무슨 소리인가 싶어서 해당 디렉토리에 들어가보니 resources.ap_ 라는 파일은 없고,
resources(from 집컴퓨터).ap_ 라는 파일이 생성되어 있다는...

이클립스에서 project clean 을 해도 마찬가지...

인터넷을 검색해보니 사용자계정의 .android 디렉토리에 들어가서
debug.keystore 를 지우라고 하는데, 지워도 마찬가지..

소스를 다른곳에 복사를 해놓고,
기존 소스를 삭제하고, 복사해놓은 소스를 import 받으니 문제없이 실행이 된다.

정확한 원인은 모르겠지만, 한곳에서 개발하는것이 아니라,
다른 PC에서 소스를 수정하고, 다시 import를 받지 않고,
해당 소스를 copy해오면 이런 일이 벌어지지 않나 싶은 생각이 든다는...


암튼 이런 오류라면 해당 디렉토리를 확인해보시고,
다시 임포트를 받아보시길...
반응형

이클립스(Eclipse) 자체 내장된 로컬 소스 히스토리 관리 Compare with local Revision 사용 방법

 
반응형
소스관리를 제대로 하려면 cvs, svn 등의 프로그램을 설치를 해서 제대로 관리를 해야 하지만, 개인 개발자나 공부하는 학생이라면 보통 이런 프로그램없이 개발을 하고는 하는데,
잘 돌아가던 소스가 한참 수정을 하다보니 삼천포로 빠지고, 도대체 어디부터 복구를 해야 할지 난감한 경우가 종종 생기고는 합니다.

소스관리 프로그램을 통해서 잘 하고 있다면 문제가 없겠지만,
한단계 업그레이드를 할때마다 소스를 일일이 백업받을수도 없고,
보통은 잘 돌아가면 우선은 소스를 닫고, 수정을 할때 다시 소스를 열어서 ctrl-z 기능을 이용해서 원상복귀를 시도하기도 합니다.

이클립스를 만지다보니 재미있는 기능이 있어서 소개를 합니다.
뭐 아시는분은 잘 아시겠지만, 잘 모르셨다면 활용해보시면 좋을듯합니다.



소스에서 오른쪽 버튼을 누르고, 하단의 Compare With를 누르고, Local History를 선택하면,
하단의 로그를 보여주는 탭에 History라는 새로운 탭이 생성이 되는데,
이 탭에 보면 변경된 내역들이 날짜와 시간별로 저장되어 있습니다.



해당 내역을 클릭하면 아래와 같은 화면이 나오는데,
현재의 소스와 비교해서 어떤 부분이 변경되었는지를 보여줍니다.



해당 시간의 소스로 돌아가려면 복사해서 붙여넣기를 하면 되고, 어디를 수정해서 잘돌아가던것이 안돌아가는지를 알려면 소스를 비교해보시면 금세 찾을수 있는듯 합니다.

이외에도 Replace with, Team 등의 항목으로 들어가셔도 비슷한 로컬히스토리를 보여줍니다.
잘 활용하시면 소스가 꼬일때 유용할듯하니 참고하시면 좋을듯 합니다.

반응형

이클립스(Eclipse), Usage Data Upload Collector (UDC) 사용자 환경개선 프로그램

 
반응형


최근에 업그레이드 버전업된 이클립스를 실행해보니 못보던 창이 뜬다.

Usage Data Upload 창인데, 뭔가하고 보니, 사용 정보 수집기...

CEIP(고객 환경 개선 프로그램)이라고 사용자 환경개선 프로그램이라고도 불리는것으로,
사용자가 어떤 방식으로 프로그램을 사용하고, 주로 어떤것을 사용하며, 어떤 상황에서 오류가 나고 어떻게 대처하는지 등의 정보를 수집해서 해당 개발사에 보내는 방식으로,
Microsoft의 MS-Office에도 비슷한 기능이 있는데, 개인정보는 수집하지 않고,
사용자의 사용패턴만을 조사하는 방식...

http://www.microsoft.com/products/ceip/ko-kr/default.mspx

암튼 프로그래머들이 이클립스를 어떤식으로 사용하는지에 대한 정보를 모으는것으로,

이 정보를 주기적으로 이클립스의 서버들에게 전송시켜서 이클립스의 개발조직에 많은 정보를 제공하는 방식...
upload now, upload always, don't upload now, turn udc feature off 등의 옵션이 있는데,
성능에는 큰 영향을 미치지 않으니 upload를 해주는것이 좋을듯하고,
그래야 자신이 쓰는 방식이 조금이라고 고려가 되지 않을까 싶다.



설정에 들어가서 Usage Data Cooector 의 Uploading에 들어가서 설정을 해줄수도 있음.

Java Code Viewer, 안드로이드용 자바소스코드 보기 앱
이클립스(Eclipse)에서 안드로이드 에뮬레이터(AVD) 실행하는 방법
이클립스(Eclipse), 워크스페이스 변경과 Import로 복사한 소스코드 Workspace Project Explorer에 추가하는 방법
반응형

이클립스(Eclipse)에서 안드로이드 에뮬레이터(AVD) 실행하는 방법

 
반응형
이클립스를 설치하고 안드로이드 에뮬을 실행하는 방법은 우선 android-sdk-windows를 다운로드 받아야 합니다.
(물론 이전에 jdk를 설치하셔야 합니다.)

안드로이드 개발환경 설치, 설정하는 방법 총정리 - 이클립스, Android SDK, 에뮬레이터(Virturl Device), ADT Plugin for Eclipse

SDK 다운로드 홈페이지 - http://developer.android.com/sdk/index.html

구글맵(Google Maps)용과 같은 경우는 add-on을 이클립스상에서 다운로드를 받거나(속도가 상당히 느립니다.), 해당 애드온을 다운받아 sdk의 add-on에 복사해주면 됩니다.


제대로 다운로드가 되었고, 메뉴->windows->Preferences -> android에 가서 sdk 경로를 설정해주면, 위와 같이 표시가 됩니다.


그러고나면 상단의 메뉴바에 안드로이드봇 아이콘이 표시가 되는게, 그것을 누르던지,
메뉴 -> windwos -> Android sdk and avd manager 을 누르면 됩니다.

우선은 새로운 디바이스를 생성해주어야 하는데, Virtual devices에서 New를 눌러주고, Name을 넣어주고, Target에서 설치한 sdk나 구글맵등의 애드온 타켓을 지정하고,
 sd card에는 128, 256정도를 입력해주시고,
하단의 hardware에서 new를 눌러서 SD Card support 정도를 추가 지정해주시면 됩니다.

그리고 Create AVD를 누르시면 됩니다.


그러고나서 Start를 누르면 되는데, WVGA800(480x800)이 기본으로 지정되있는데, 작은 모니터나 해상도에서는 화면이 너무 클수 있으니 scale display to real size를 선택해서 비율을 줄여줄수 있습니다.
225정도를 입력하면 약 70%정도의 에뮬이 실행됩니다.

Wipe user data는 기존 에뮬의 사용자 정보를 초기화하는 것으로, 설정에 입력해두었던 모든 정보가 초기화되는것입니다.(롬업할때는 풀와입이라고도 부르는...)


그러고나면 위처럼 에뮬레이터가 실행이됩니다.
부팅시간이 좀 오래걸리는데, 개발시에는 항상 켜놓고 작성한 소스코드를 실행하시면 이클립스에서 자동으로 apk를 생성해서 올리고, 결과를 보여줍니다.


그리고 프로젝트를 새로 생성할때 위에 실행한 AVD와 프로젝트의 Build Target가 동일해야 하는데, 만약에 잘못 생성했을 경우 처음이라 코딩한것이 없다면 지우고 다시 생성을 해도 되지만, 이클립스에서 변경도 가능합니다.


해당 프로젝트에서 마우스 오른쪽을 누르고, Build Path -> Configure Build path 를 선택하고,
Java build path -> libraries 탭을 선택해서 라이브러리를 변경해주며 됩니다.

이클립스(Eclipse), 워크스페이스 변경과 Import로 복사한 소스코드 Workspace Project Explorer에 추가하는 방법



반응형

이클립스(Eclipse), 워크스페이스 변경과 Import로 복사한 소스코드 Workspace Project Explorer에 추가하는 방법

 
반응형
이클립스 인디고(indigo)를 사용하고 있는데, 사용을 하다가 다른곳에서 만든 소스코드를 현재의 워크스페이스에 추가를 해야 하는 경우가 자주 있는데, Import를 이용해서 쉽게 처리를 할수 있습니다.
죄측에 보면 Package Explorer 에서 마우스 오른쪽 버튼을 누르고 Import를 누르면 됩니다.


Archive File, File System, CVS, EJB, Java EE 등 다양한 방법이 있는데, 가장 간편한것은 기존에 다른곳에서 사용하던 소스코드를 통채로  usb등에 복사를 해서 가져오는것이 아닐까 싶습니다.


복사대상을 워크스페이스의 디렉토리에 복사를 한후에 적용을 할수도 있지만,
기존것은 원본으로 두고, 복사본으로 적용을 시키면 되는데, 위처럼 복사할 디렉토리를 선택을 우선 하시고...


위와 같은 화면에서 Copy Projects into workspace를 눌러주시면 현재의 워크스페이스 디렉토리로 복사가 되는것이고, 체크를 하지 않으면 링크만 되는 방식입니다.



java개발과 안드로이드개발 등을 다른 워크스페이스로 나누어서 하고 싶은 경우에는 별도의 Workspace를 만들어서 사용할수도 있는데, Menu -> File -> Switch Workspace -> Other를 클릭해서 새로운 디렉토리를 지정해주시면 됩니다.

워크스페이스를 새롭게 바꾸게되면 환경변수가 초기화되므로, 메뉴->Windows->Preference에 들어가서 jdk 등의 경로 또한 다시 설정해 주어야 합니다.
반응형

은행의 타행/타기관 공인인증서 사용등록의 답답한 인터넷뱅킹 UI/UX 인터페이스 화면들

 
반응형
요즘 인터넷 뱅킹을 사용하지 않는 분들이 거의 드물정도인데,
매년 한차례씩 갱신을 해야하는 번거로움이 있습니다.

처음발급받은 은행에 홈페이지에 가서 갱신을 받아야 하는데,
받은후에는 각 은행 사이트마다 들어가서 또 갱신을 해주어야 합니다.

문제는 일반적으로 인터넷뱅킹을 사용할때는 공인인증서와 비밀번호만을 가지고 사용할수 있고,
이체와 같은 경우에만 보안카드가 필요한데, 일년에 한번 갱신때는 이용자 ID를 가지고 갱신을 해야 합니다.

뭐 일반 인터넷 사이트처럼 자신이 아이디를 등록해서 사용할수도 있지만,
은행에서 암호같은 아이디를 발급해주는 경우도 있고,
부모님것은 은행에서 임의로 발급해서 매 은행 사이트마다 다른 아이디여서 적어놓지 않으면 아주 번거롭기도 합니다



이번에도 아버지와 어머니 인터넷뱅킹용 공인인증서를 갱신하는데,
정말 짜증나고, 귀찮더군요...-_-;;

왜 이런 일을 반복해야 하는지도 모르겠고,
어이없는 화면들도 답답합니다.

농협에 들어가, 이용자 아이디를 몰라서 조회를 누르면 다시 거의 비슷한 화면으로 넘어가서 조회하고, 복사하고, 다시 처리하고....

그냥 이용자ID는 상관없다고 치고, 이름, 주민번호, 공인인증서를 통해서 간단하게 연장을 해주면 안되나???



새마을금고는 해당화면에 이용자ID를 조회하는 화면이 없어서 여기저기를 왔다갔다하게 만든다



SC 제일은행 또한 농협과 다를바 없이 이용자번호 찾기를 누르고나서 비슷한 화면으로 이동...




KB 국민은행도 마찬가지이고...


하나 은행은 계좌번호까지 입력해야 하는 번거로움을 주기도...
열이받아서 몇군데를 더 들어가보았는데, 어쩌면 저렇게 불편한 인터페이스를 죄다 그대로 따라했는지 모르겠다...-_-++

어느 은행 하나 좀 더 나은 화면이나 편리하고, 늙고 나이들어서 잘 모르는 사람도 쉽게 인증서를 갱신하고, 은행 이용을 쉽게 만드는 사이트는 없는듯 하다.

은행권이면 일반 IT보다 더 유능한 인재들이 모여있을텐데, 별로 메리트를 느끼지 못하는지 그냥 다 고만고만한 인터페이스를 사용하는듯한데, 그나마 최근에 스마트폰용 인터넷 뱅킹 프로그램이 나오면서 신경을 쓰기는 하지만, 참 갈길이 먼듯하다.

간만에 인증서와 세금계산서 용을 갱신하는데, 또 욕이 나오네요...-_-;;

최근에 UX로 사용자 경험에 대한 새로운 시도를 많이 하고 있는데, 은행권도 이제 Active-X도 버리고, 좀 참신한 인터페이스를 가져보려는 시도를 해야 하지 않을까 싶다.


그저 빠르고, 문제없는 은행권의 시스템도 중요하지만, 스마트시대에 맞도록 인터페이스에 대한 많은 개선도 필요할것이다.




추가로 개인적으로 이건 국가적으로 규칙을 정해야 하지 않을까 싶은데,
텍스트박스에 포커스가 가면 한글, 영문에 대한 기본값이 정해져야 할것이다.

아마 인터넷에서 아이디, 주소, 이름 등을 입력할때마다 어떤경우에는 한글이고, 어떤 경우는 영문이여서 몇자를 입력한 후에 확인하고, 한영키를 누르고, 다시 입력을 해야 한다.

국가적으로 영문이면 영문, 한글이면 한글로 고정을 해야 하지 않을까 싶다.

하루 10초면 일주일에 1분이고, 일년이면 50분이 넘어가서 하루이고, 20년이면 하루가 넘어간다

뭐 별것아닌것처럼 보이지만, 일년중에 한시간,
일생의 몇일을 한영키를 누르는데, 낭비한다고 생각하면 너무 아깝지 않을까?
반응형

제로보드 게시판별 통계 뷰어

 
반응형
그냥 심심해서 만들어 봤음.. 깔끔하게 되려면 좀 더 손을 봐야 하는데.. 더 손을 볼지는 미지수...
정호닷넷에서 게시판상단의 게시판 설명을 클릭하면 해당 게시판의 통계자료를 볼수 있음.


게시판에 해당년, 해당월에 몇건의 글이 올라왔고, 어떤 카테고리에 글이 몇건이 쓰여졌는지 확인할수 있도록 만들어 봤습니다.
그냥 일하기 싫어서 대충 만들어서 그런지 중복되고, 조잡하네요...
개인적으로 독서용 게시판이 있는데 일년동안 몇권을, 한달동안 몇권을, 어떤 카테고리에 몇권을 읽었나 편하게 볼수 없을까라는 생각에 만들어 봤습니다.
아래의 소스에 아이디와 비밀번호를 입력하신후에 제로보드 게시판에 이름을 logbook.htm 로 저장하신후에
불러오실때는 http://홈페이지/bbs/logbook.htm?board=게시판명 이런 식으로 불러오시면 됩니다.
기본값으로 당해년도로 조회가 되고, 다른년도를 보시려면
http://홈페이지/bbs/logbook.htm?board=게시판명&yy=2005 이런식으로 접근하시면 됩니다.

아래는 테스트 페이지입니다.
http://danbisw.maru.net/project/bbs/logbook.htm?board=book
이곳저곳을 클릭해보시면 다양한 방법으로 볼 수 있습니다...

소스보기 - 감추기
<?
        if(!$board) {$board = "bbs";} // 기본게시판
        $conn=mysql_connect("localhost","아이디","비밀번호");
        mysql_select_db("아이디",$conn);
?>
<style>
body,td,select,input,div,form,textarea,center,option,pre,blockquote {font-size:8pt;font-family:verdana;color:666666;line-height:150%;letter-spacing:-1}
A:link{font-size:9pt;font-family:굴림;color:#305678;text-decoration:none;}
A:visited{font-size:9pt;font-family:굴림;color:#305678;text-decoration:none;}
A:active{font-size:9pt;font-family:굴림;color:#305678;text-decoration:none;}
A:hover{font-size:9pt;font-family:굴림;color:999999;text-decoration:none;}
BODY
{scrollbar-face-color:#f0f0f0;
scrollbar-shadow-color:#c6c6c6;
scrollbar-highlight-color:white;
scrollbar-3dlight-color:#c6c6c6;
scrollbar-darkshadow-color:#FFFFFF;
scrollbar-track-color:#FFFFFF;
scrollbar-arrow-color:black}
</style>
<META content='text/html; charset=euc-kr' http-equiv=Content-Type>
<title>Board Counter ver 0.1</title>
<?
$surl = sprintf("http://%s%s?%s",$HTTP_SERVER_VARS['HTTP_HOST'], $HTTP_SERVER_VARS['PHP_SELF'],$HTTP_SERVER_VARS['QUERY_STRING']);
if(!$yy) {
        if(!$ym) {$timeinfo = getdate(time()); $yy = $timeinfo["year"]; }
        else {$yy=substr($ym,0,4);}
        }
if($kind&&$kind>0) {$kwhere = " and zetyx_board_".$board.".category = ".$kind;}

// 내용
if($vm) {
        if(!$ym) {
                $result=mysql_query("SELECT FROM_UNIXTIME( reg_date, '%Y%m' ),subject FROM zetyx_board_".$board." WHERE FROM_UNIXTIME( reg_date,'%Y') = '".$yy."'".$kwhere." order by reg_date",$conn) or die(mysql_error());
        }
        else {
                $result=mysql_query("SELECT FROM_UNIXTIME( reg_date, '%Y%m' ),subject, no FROM zetyx_board_".$board." WHERE FROM_UNIXTIME( reg_date,'%Y%m') = '".$ym."'".$kwhere." order by reg_date",$conn) or die(mysql_error());
        }
}
elseif(!$ym) {
        $result=mysql_query("SELECT FROM_UNIXTIME( reg_date, '%Y%m' ), count(*) FROM zetyx_board_".$board." WHERE FROM_UNIXTIME( reg_date,'%Y') = '".$yy."'".$kwhere." GROUP BY FROM_UNIXTIME( reg_date, '%Y%m' ) ",$conn) or die(mysql_error());
}
else {
        $result=mysql_query("SELECT FROM_UNIXTIME( reg_date, '%Y%m' ),subject, no FROM zetyx_board_".$board." WHERE FROM_UNIXTIME( reg_date,'%Y%m') = '".$ym."'".$kwhere."",$conn) or die(mysql_error());
}

echo("<table cellpadding='0' cellspacing='0'><tr><td align=left valign=top>");
echo("<table border='1' cellpadding='0' cellspacing='0'><tr><td width=50><h5 align=center><a href=logbook.htm?board=$board&yy=$yy>년월</td><td width=350><h5 align=center>Count</td><td></td></tr>");

while($data=mysql_fetch_array($result)) {
        $data1 = $data[0];
        $data2 = $data[1];
        if(!$ym) {
                echo("<tr><td align=center><a href=logbook.htm?board=$board&ym=$data1>".$data1."</a></td><td align=center><a href=logbook.htm?board=$board&ym=$data1&kind=$kind>".$data2."</td></tr>");
                }
        else {
                $data3 = $data[2];
                echo("<tr><td align=center><a href=logbook.htm?board=$board&ym=$data1>".$data1."</a></td><td align=left><a href='zboard.php?id=".$board."&no=$data3'>".$data2."</a></td></tr>");
        }
}

// 총계
if(!$ym) {
        $result=mysql_query("SELECT count(*) FROM zetyx_board_".$board." WHERE FROM_UNIXTIME( reg_date,'%Y') = '".$yy."'".$kwhere."",$conn) or die(mysql_error());
}
else {
        $result=mysql_query("SELECT count(*) FROM zetyx_board_".$board." WHERE FROM_UNIXTIME( reg_date,'%Y%m') = '".$ym."'".$kwhere."",$conn) or die(mysql_error());
}
$data=mysql_fetch_array($result);

$data1 = $data[0];

echo("<tr><td align=center><a href=logbook.htm?board=$board&yy=$yy>합계</a></td><td align=center>총 ".$data1."권</td></tr>");
echo("</table></td>");

if($ord==1) {$ord1=" ORDER By zetyx_board_category_".$board.".name ";}
elseif($ord==2) {$ord1=" ORDER By cnt ";}
else {$ord1=" ORDER By zetyx_board_category_".$board.".no ";}

if($ord2>0) { $ord1 = $ord1." ASC"; $ord2=0;}
else { $ord1 = $ord1." DESC"; $ord2=1;}

// 카테고리별
if(!$ym) {
        $result=mysql_query("SELECT zetyx_board_category_".$board.".name, count(*) as cnt, zetyx_board_category_".$board.".no FROM zetyx_board_".$board.", zetyx_board_category_".$board." WHERE zetyx_board_".$board.".category = zetyx_board_category_".$board.".no and FROM_UNIXTIME( reg_date,'%Y') = '".$yy."'".$kwhere." GROUP BY zetyx_board_category_".$board.".name, zetyx_board_category_".$board.".no ".$ord1,$conn) or die(mysql_error());
}
else {
        $result=mysql_query("SELECT zetyx_board_category_".$board.".name, count(*) as cnt, zetyx_board_category_".$board.".no FROM zetyx_board_".$board.", zetyx_board_category_".$board." WHERE zetyx_board_".$board.".category = zetyx_board_category_".$board.".no and FROM_UNIXTIME( reg_date,'%Y%m') = '".$ym."'".$kwhere." GROUP BY zetyx_board_category_".$board.".name, zetyx_board_category_".$board.".no ".$ord1,$conn) or die(mysql_error());
}

echo("<td align=left valign=top><table border='1' cellpadding='0' cellspacing='0'><tr><td width=150><h5 align=center><a href=$surl&board=$board&ord=1&ord2=$ord2>구분</td><td width=50><h5 align=center><a href=$surl&board=$board&ord=2&ord2=$ord2>Count</td><td></td></tr>");

while($data=mysql_fetch_array($result)) {
        $data1 = $data[0];
        $data2 = $data[1];
        $data3 = $data[2];
        if(!$ym) {
                echo("<tr><td align=center><a href=logbook.htm?board=$board&yy=$yy&kind=$data3>".$data1."</a></td><td align=center><a href=logbook.htm?board=$board&yy=$yy&kind=$data3&vm=1>".$data2."</td></tr>");
                }
        else {
                $data3 = $data[2];
                echo("<tr><td align=center><a href=logbook.htm?board=$board&ym=$ym&kind=$data3>".$data1."</a></td><td align=center><a href=logbook.htm?board=$board&ym=$ym&kind=$data3&vm=1>".$data2."</a></td></tr>");
        }
}
echo("</table></td></tr></table>");
?>
 
반응형