2012년 7월 25일 수요일

[JaVaScRiPt] 웹에서 이미지 표시 할 수 없는 경우



<img src="test.png" id="PhotPathonError="javascript:this.src='<%= ctxPath %>/image/img_err.png'" />

test.png 파일을 찾을 수 없는 경우 onError 이벤트의 의 대체 이미지를 보여 준다.

JQuery 에서는 아래와 같이 사용 할 수 있다.
$("#PhotPath").attr({src:'<%= PhotPath %>' });


$("#PhotPath").error(function(){
           $(this).attr("src","/photo/NoPhoto.gif");
       });

2012년 7월 8일 일요일

[AnDrOiD] Android Permission



필요한 퍼미션을 AndroidManifest.xml 파일에 기재 한다.
<uses-permission android:name="android.permission.XXXX_XXX_XXX" />

PermissionComment 
 ACCESS_CHECKIN_PROPERTIES체크인데이터베이스의_속성테이블로_액세스
 ACCESS_COARSE_LOCATION코스_로케이션_액세스_(Cell-ID/WiFi)
 ACCESS_FINE_LOCATION파인로케이션_액세스(GPS)
 ACCESS_LOCATION_EXTRA_COMMANDS로케이션_옵션_커맨드_액세스
 ACCESS_MOCK_LOCATION목_로케이션_프로바이더_생성_(테스트용)
 ACCESS_NETWORK_STATE네트워크_상태_접근
ACCESS_SURFACE_FLINGER서피스_플링거_접근
 ACCESS_WIFI_STATEWiFi상태_접근
 ADD_SYSTEM_SERVICE시스템서비스_추가
 BATTERY_STATS배터리_상태
 BLUETOOTH블루투스
 BLUETOOTH_ADMIN블루투스_어드민
 BRICK디바이스_실효성_지정
 BROADCAST_PACKAGE_REMOVED제거된_패키지에_대한_notification_브로드캐스트
 BROADCAST_SMSSMS에_대한_브로드캐스트
 BROADCAST_STICKY인텐트_브로드캐스트 
 CALL_PHONE통화
 CALL_PRIVILEGED통화(긴급전화_포함)
 CAMERA 카메라


PermissionComment
 CHANGE_COMPONENT_ENABLED_STATE 컴포넌트의_실효성_변경
 CHANGE_CONFIGURATION 컨피그_변경
 CHANGE_NETWORK_STATE 통신상태_변경
 CHANGE_WIFI_STATE WiFi상태_변경
 CLEAR_APP_CACHE 어플리케이션_캐시_클리어
 CLEAR_APP_USER_DATA 어플리케이션의_유저데이터_클리어
 CONTROL_LOCATION_UPDATES 위치정보_갱신
 DELETE_CACHE_FILES 캐시파일_제거
 DELETE_PACKAGES 패키지_제거
 DEVICE_POWER 전원상태에_대한_로우레벨_접근
 DIAGNOSTIC 진단리소스_읽고쓰기
 DISABLE_KEYGUARD 키_가드_끄기_DUMP_덤?
 EXPAND_STATUS_BAR 상태표시줄_확장
 FACTORY_TEST 팩토리_테스트
 FLASHLIGHT 플래시라이트
 FORCE_BACK 포스백
 GET_ACCOUNTS 어카운트_획득
 GET_PACKAGE_SIZE 패키지_획득
 GET_TASKS 태스크_획득


PermissionComment 
 HARDWARE_TEST 하드웨어테스트
 INJECT_EVENTS 유저이벤트_키/트랙볼
 INSTALL_PACKAGES 패키지_인스톨
 INTERNAL_SYSTEM_WINDOW 내부_시스템윈도_활용
 INTERNET 인터넷
 MANAGE_APP_TOKENS 어플리케이션_토큰관리
 MASTER_CLEAR 마스터_클리어
 MODIFY_AUDIO_SETTINGS 오디오설정_편집
 MODIFY_PHONE_STATE 전화상태_편집
 MOUNT_UNMOUNT_FILESYSTEMS 파일시스템_편집
 PERSISTENT_ACTIVITY 액티비티_지속
 PROCESS_OUTGOING_CALLS 전화_발신처리_접근
 READ_CALENDAR 캘린더_읽어오기
 READ_CONTACTS  주소록_읽어오기
 READ_FRAME_BUFFER프레임버퍼_읽어오기
 READ_INPUT_STATE 입력상태_읽어오기
 READ_LOGS 로그_읽어오기
 READ_OWNER_DATA owner_data읽어오기
 READ_PHONE_STATE 통화상태_읽어오기_READ_SMS_SMS읽어오기


 PermissionComment 
 READ_SYNC_SETTINGS 동기설정_읽어오기
 READ_SYNC_STATS 동기상태_읽어오기
 REBOOT reboot
 RECEIVE_BOOT_COMPLETED boot완료
 RECEIVE_MMS MMS수신
 RECEIVE_SMS SMS수신
 RECEIVE_WAP_PUSH WAP수신
 RECORD_AUDIO 오디오_수신
 REORDER_TASKS 태스크_Z오더
 RESTART_PACKAGES 패키지_리스타트
 SEND_SMS SMS송신
 SET_ACTIVITY_WATCHER 액티비티_왓쳐지정
 SET_ALWAYS_FINISH 액티비티_전체_종료
 SET_ANIMATION_SCALE 스케일_애니메이션_지정
 SET_DEBUG_APP 디버그어플리케이션_지정
 SET_ORIENTATION 스크린_로테이션지정
 SET_PREFERRED_APPLICATIONS 자주_사용하는_어플리케이션_지정
 SET_PROCESS_FOREGROUND 포어그라운드_처리지정
 SET_PROCESS_LIMIT 제한처리_지정


 PermissionComment 
 SET_TIME_ZONE 타임존_지정
 SET_WALLPAPER 배경화면_지정
 SET_WALLPAPER_HINTS 배경화면_힌트_지정
 SIGNAL_PERSISTENT_PROCESSES 지속처리_시그널_지정
 STATUS_BAR 상태표시줄_지정
 SUBSCRIBED_FEEDS_READ 서브스트립드_피즈_읽어오기
 SUBSCRIBED_FEEDS_WRITE 서브스트립드_피즈_쓰기
 SYSTEM_ALERT_WINDOW 알림_윈도우
 VIBRATE 진동
 WAKE_LOCK 알람
 WRITE_APN_SETTINGS APN설정_쓰기
 WRITE_CALENDAR 캘린더_쓰기
 WRITE_CONTACTS 주소록_쓰기
 WRITE_GSERVICES G서비스_쓰기
 WRITE_OWNER_DATA owner_data쓰기
 WRITE_SETTINGS 설정_쓰기
 WRITE_SMS SMS쓰기
 WRITE_SYNC_SETTINGS 동기설정_쓰기
 WRITE_EXTERNAL_STORAGE 외장메모리_쓰기

[LiNuX] udev 를 이용하여 안드로이드 폰 연결 하기





리눅스로 부팅 후, 휴대폰을 컴퓨터에 연결 하고 나서 dmesg 의 내용중 휴대폰 관련 부분을 볼 수 있습니다.

freecatz@freecatz-linux:~$ dmesg | tail
[  290.445255] scsi6 : usb-storage 2-5:1.6
[  290.446204] usbcore: registered new interface driver usb-storage
[  290.446216] USB Mass Storage support registered.
[  290.458458] cdc_acm 2-5:1.0: Zero length descriptor references
[  290.458482] cdc_acm: probe of 2-5:1.0 failed with error -22
[  290.458778] usbcore: registered new interface driver cdc_acm
[  290.458789] cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters
[  291.446094] scsi 6:0:0:0: Direct-Access     SKY      Mass storage     ffff PQ: 0 ANSI: 2
[  291.447739] sd 6:0:0:0: Attached scsi generic sg2 type 0
[  291.453288] sd 6:0:0:0: [sdb] Attached SCSI removable disk

저는 SKY 의 IM-A690L 이라는 휴대폰(나오자 마자 보급용 폰이 된 비운의 폰) 을 사용중이라서 위와 같이 나왔습니다.
위의 메시지 중에서 자세히 보셔야 할 부분은 여러분의 안드로이드 폰이 어느 장치 설정이 되느냐 입니다. 저는 sdb 로 되었으
나, 사용 하시는 운영체제나 휴대폰에 따라 USB 등으로 잡히는 경우도 있습니다. 해당 휴대폰이 USB 로 잡히는 경우 usb 라고 기억해 두시면 됩니다. 이제 휴대폰과 컴퓨터 사이에 연결된 인터페이스인 USB 장치의 VID 와 PID 를 알아 내기 위해 lsusb 라는 명령을 실행 합니다.

freecatz@freecatz-linux:~$ lsusb
Bus 004 Device 002: ID 1241:1503 Belkin Keyboard
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 005: ID 0cf3:3002 Atheros Communications, Inc. 
Bus 003 Device 003: ID 046d:08ad Logitech, Inc. QuickCam Communicate STX
Bus 003 Device 002: ID 192f:0416 Avago Technologies, Pte. 
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 10a9:1104 SK Teletech Co., Ltd 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

제 휴대폰은 LGU+ 를 하용하는데 왜 SK Teletech 로 나와 있는지는 모르겠으나, 일단 휴대폰과 관련된 USB 장치는 하나 뿐이라

Bus 002 Device 003: ID 10a9:1104 SK Teletech Co., Ltd 

의 정보중 PID 는 10a9 으로 그리고 VID 는 1104 이라고 판단 하였습니다. PID 와 VID 를 쉽게 알 수 있는 윈도즈용 유틸리티도
있습니다. lsusb 명령으로 PID 와 VID 를 알아낼 수 없는 경우 윈도즈로 부팅 후, USB 의 PID 와 VID를 알아낼 수 있는 유틸리티 등을 이용 하여 PID 와 VID 를 알아내시고 다음 단계로 진행 하셔도 됩니다. 리눅스에서는 PID 나 VID 를 알아내는 다른 유틸리티를 몰라서 알아 보고 있는 중입니다.




udev 를 이용 하기위해 이제 root 의 권한으로 /etc/udev/rules.d/ 디렉터리 아래 파일을 하나 만들어 줍니다. 파일은 두자리의 숫자로 시작 되어야 합니다. 9x 번의 숫자를 사용 하시면 됩니다. 아니면, 저 처럼 그냥 99를 사용 하셔도 괜찮고요. 저는 파일 이
름을 99-SKY-android.rules 로 정했습니다. SUBSYSTEM 의 장치명은 dmesg 에서 확인된 장치명을 기입하여 주세요.

root@freecatz-linux:~# vi /etc/udev/rules.d/99-SKY-android.rules

SUBSYSTEM=="sdb", SYSFS{idVendor}=="1104",MODE="0666", OWNER="freecatz"
SUBSYSTEM=="sdb", ATTR{idProduct}=="10a9", ATTR{idVendor}=="1104", SYMLINK+="android_adb"

위의 두 줄이 99-SKY-android.rules 파일의 내용 입니다. 이때 lsusb 명령으로 알아낸 USB 장치의 PID 와 VID 를 넣어 주서야 합니다. idVendor 는 VID 를, idProduct 는 PID를 입력 하여 주시고, OWNER 는 여러분이 사용 하시는 일반 유저의 계정을 입력 하여 주시면 됩니다. 저는 제 시스템에서 freecatz 라는 계정을 사용 하므로 freecatz 라고 작성 하였습니다. 만약 개인 사용자가 아닌 그룹을 지정 하고 싶으시다면, OWNER 대신 GROUP 을 사용 할 수 있습니다.




root@freecatz-linux:~# restart udev
udev start/running, process 2180
이제 root 권한으로 udev 를 다시 실행 하여 변경된 rules 파일(위에서 만들었던 99-SKY-android.rules 파일) 의 내용을 적용 하여야 합니다. (참고 : 앞의 두자리 숫자가 룰파일을 읽어 들이는 순서 입니다.)


root@freecatz-linux:~# cd /home/freecatz/eclipse/android-sdk-linux_x86/platform-tools/
udev 가 다시 실행 이 되고 나면, 안드로이드 SDK 의 압축이 풀려진 디렉터리 아래 adb 라는 도구가 있는 위치로 이동 합니다.
(참고 : 저는 나중에 귀찮아서 ADB_HOME 변수를 등록 하고 PATH 에 추가 했습니다.)

root@freecatz-linux:/home/freecatz/eclipse/android-sdk-linux_x86/platform-tools# adb kill-server
adb 명령을 이용 하여 서버를 중지 시킵니다.

root@freecatz-linux:/home/freecatz/eclipse/android-sdk-linux_x86/platform-tools# adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
adb 명령을 이용 하여 서버를 시작 합니다.

root@freecatz-linux:/home/freecatz/eclipse/android-sdk-linux_x86/platform-tools# adb devices
List of devices attached
emulator-5554   device
EF13L01110142016217    device
adb 명령을 이용 하여 연결된 장치의 정보를 출력해 봅니다. 저는 EF13L01110142016217 이름의 장치가 연결 되어 있군요.




freecatz@freecatz-linux:~$ adb devices
List of devices attached
emulator-5554   device
EF13L01110142016217    device
일반 유저의 계정으로(위에서 만든 rules 파일에 OWNER 의 사용자 이름) adb 명령을 이용하여 연결된 장치를 보니,
root 유저와 동일 하게 EF13L01110142016217 라는 이름의 장치가 연결 되어 있군요.



2012년 7월 5일 목요일

[LiNuX] 라즈베리 파이 삼바(SAMBA) 이용








pi@raspberrypi:~$ sudo su -
# root 의 권한이 필요 합니다.


root@raspberrypi:~# whoami
root
# 불필요 하지만 권한을 확인해 봤습니다.


root@raspberrypi:~# mkdir shared
# 윈도즈 공유 디렉터리를 마운트할 디렉터리를 라즈베리 파이에 생성 합니다. 디렉터리 이름은 편하신 걸로 하시면 됩니다.


root@raspberrypi:~# ls shared/
# 당연히 지금 만든 디렉터리니 아무 것도 없겠죠.


root@raspberrypi:~# smbmount '\\192.168.0.169\shared' ./shared/ -o username=freecatz,password=********,uid=pi
# 192.168.0.169 의 윈도즈 시스템에서 shared 이름으로 공유된 디렉터리를 ./shared 에 mount 합니다. 이때 윈도즈의 공유된 디렉터리에 접근 할 수 있는 계정과 비밀번호가 필요 하며, uid 옵션으로 라즈베리 파이에 생성된 특정 계정의 사용자가 사용 할 수 있도록 합니다. 여기서는 pi 사용자가 되겠네요.


root@raspberrypi:~# ls shared/
hello_world.txt
# 윈도즈 공유 디렉터리에 hello_world.txt 파일이 있습니다.


root@raspberrypi:~# cat shared/hello_world.txt


hello world!!


# 파일의 내용은 보니, hello world!! 라는 문자열이 있네요. 필요시 pi 사용자 계정으로 해당 파일을 수정 할 수 도 있습니다.




root@raspberrypi:~# umount ./shared/
# 공유 디렉터리를 다 사용 하고 사용할 일이 없다면, umount 명령으로 공유 해제 합니다.


root@raspberrypi:~# ls ./shared/
root@raspberrypi:~#






참고 : 다음과 같이 mount 명령으로도 윈도즈의 공유 폴더를 마운트 할 수 있습니다.


root@raspberrypi:~# mount -t cifs '\\192.168.0.169\shared' ./shared/ -o username=freecatz,password= ********,uid=pi


root@raspberrypi:~# umount ./shared/
# umount 명령으로 공유 해제 합니다.

2012년 6월 30일 토요일

[LiNuX] 라즈베리 파이 D.I.Y 케이스




1. 준비물
    - OHP 필름(문구점에서 구매 가능)
    - 라즈베리 파이 D.I.Y 케이스 도안 [ 클릭 ]
    - 순간 접착제 와 스카치 테이프
    - 자르기 위한 커터 칼 및 자 등...

2. 과정 설명
    딱히 설명할 것은 없다. 도안 출력 해서 OHP 필름 아래 두고, 테이프로 고정 시키고
    커터칼을 이용하여 오려 내면 된다.
 
3. 작업 과정 사진
















    ↑ 출력한 도면을 OHP 필름과 겹쳐 두고 떨어지지 않도록 4방면을 테이프로 고정 시킨다.


















    ↑ 종이와 OHP 필름을 위의 사진과 같이 커터칼을 이용하여 겹쳐 오려 내야 한다.


















    ↑ 1차 적으로 외곽 부분 오려 내기가 완료 되었다.

















    ↑ 진행을 하다 보니, 원형은 어떻게 오려 내야 할까 고민 했다.
        최대한 원형에 가깝게 오려 내야 하는 방법 밖에는 없었다.



























    ↑ 오려 내는 작업이 끝나고 OHP 필름을 접고, 순간 접착제를 이용 하여 접착 작업.
       주의 사항 : 접착제는 한방울 정도의 소량 정도만 해도 충분 하다.



















    
    ↑ 완성 되었다. 뚜껑 부분도 접착을 할까 했지만, 가끔 열어야 해야 하기 때문에
        반투명 테이프로 붙여 두기만 했다.





















    
    ↑ 조금더 가까이서 찍은 사진.



















    ↑ 라즈베리 파이를 구동 시켜 보았다. 















    





    ↑ 조금더 가까이서 찍은 사진.



















    
    ↑  오늘의 작업 장소는 처갓집 의 처남 방에서...




[LiNuX] 라즈베리 파이 SSH 연결




1. 우선 사항
    1-1. 라즈베리 파이 에 데비안(Debian) 올리기
    1-2. 라즈베리 파이 최초 부팅



2. ssh 데몬을 시작 시키기 위해 root 권한을 획득 한다.

    모든 데몬의 시작/정지/재시작은  root 권한으로 실행 가능 하다.

    pi@raspberrypi:~$ sudo su

    root@raspberrypi:/home/pi# whoami
    root


3. ssh 데몬 시작

    ssh 데몬이 시작 되어 있지 않기 때문에 수동으로 시작 시켜 주어야 한다.

     root@raspberrypi:/home/pi# /etc/init.d/ssh start
     Starting OpenBSD Secure Shell server : sshd.
     root@raspberrypi:/home/pi#


4. 라즈베리 파이의 IP 주소 확인

     ifconfig 명령을 이용 하여 유선랜의 IP 주소를 알아 낸다.

     root@raspberrypi:/home/pi# ifconfig eth0
     eth0           Link encap:Ethernet  HWaddr b8:27:eb:04:6f:5d
                      inet addr:192.168.0.8  Bcast:192.168.0.255  Mask:255.255.255.0
                      UP BROADCAST RUNNING MULTICAST  MTU:1488  Metric:1
                      RX packets:3730 errors:0 dropped:0 overruns:0 frame:0
                      TX packets:873 errors:0 dropped:0 overruns:0 carrier:0
                      collisions:0 txqueuelen:1000
                      RX bytes:208246 (203.3 KiB)  TX bytes:88344 (86.2 KiB)

     root@raspberrypi:/home/pi#


5. 외부에서 SSH 연결 확인
   
    본인의 경우 내부 네트워크의 다른 컴퓨터에서 putty 나 Xshell 등의 ssh 클라이언트
    를 이용하여 라즈베리 파이의 IP 주소로 접속을 하였다.

     참고 : 최초 부팅후 별다른 설정을 하지 않았다면, iptables 가 올라가 있지 않은 상태.


6. SSH 데몬 자동 시작을 위한 chkconfig 패키지 설치

    데비안 리눅스의 경우 기본적으로 패키지 관리자를 apt-get 을 사용 한다.


    root@raspberrypi:/home/pi# apt-cache search chkconfig
    chkconfig - system tool to enable or disable system services

    root@raspberrypi:/home/pi# apt-get install chkconfig
    Reading package lists... Done
    Building dependency tree    
    Reading state information... Done
    The following NEW packages will be installed:
      chkconfig
    0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
    Need to get 9,182 B of archives.
    After this operation, 69.6 kB of additional disk space will be used.
    Get:1 http://ftp.uk.debian.org/debian/ squeeze/main chkconfig all 11.0-79.1-2 [9,182 B]
    Fetched 9,182 B in 1s (5,276 B/s)
    Selecting previously deselected package chkconfig.
    (Reading database ... 46441 files and directories currently installed.)
    Unpacking chkconfig (from .../chkconfig_11.0-79.1-2_all.deb) ...
    Processing triggers for man-db ...
    Setting up chkconfig (11.0-79.1-2) ...
    root@raspberrypi:/home/pi#


7. ssh 데몬 부팅시 활성화 

    현재 ssh의 동작 런레벨 확인

    root@raspberrypi:/home/pi# chkconfig --list | grep -i "ssh"
    ssh                       0:off  1:off  2:off  3:off  4:off  5:off  6:off
    root@raspberrypi:/home/pi#

    ssh 데몬이 모든 런레벨에서 off 상태다. 본인의 경우 ssh 데몬은 telnet 보다 안전
    하여 선호 하는 편이라 런레벨 2, 3, 5 에서 사용 할 수 있도록 설정을 한다.


    root@raspberrypi:/home/pi# chkconfig ssh -level 235 on


    root@raspberrypi:/home/pi# chkconfig --list | grep -i ssh
    ssh                       0:off  1:off  2:on   3:on   4:on   5:on   6:off 

    * 이상하게 런레벨4 에서도 on 으로 설정이 된다. 명령어 옵션을 찾아 봐야 할 듯.


    재부팅 하여, 자동으로 ssh 데몬이 시작 되는지 와 원격에서 ssh 로 연결이 되는지
    확인 하도록 한다.




[LiNuX] 라즈베리 파이 최초 부팅

1. 주변 장치 의 연결

   유선 랜선, USB키보드, HDMI 케이블(또는 TV 연결 케이블),
   위의 장치 까지 연결을 하고, 반드시 라즈베리와 연결된 모니터나 TV의 전원을 켜고,
   라즈베리의 Micro USB 전원 을 입력 해야 한다.

















 

2. 라즈베리 파이 부팅 시작

    부팅이 완료 되었다. 로그인 계정과 비밀번호는 다음과 같다.

    로그인 계정 : pi 
    로그인 비밀번호 : raspberry


[LiNuX] 라즈베리 파이 에 데비안(Debian) 올리기



1. 운영체제 다운로드
    다운로드  : http://www.raspberrypi.org/downloads

    데비안(Debian Linux)
    아치(Arch Linux)
    큐톤파이(QtonPi)

    위와 같이 3개의 운영체제를 제공 하고 있다.

    어느 운영체제든 Win32diskImager 라는 프로그램이 SD카드에  운영체제를 올려 주니, 
    자신이 편하게 사용할 수 있는 것을 내려 받는다.


    내려 받은 zip 파일을 적당한 디렉터리에 압축 해제 한다.




2. Win32diskImager 다운로드

    다운로드 : https://launchpad.net/win32-image-writer/0.6/0.6/+download/win32diskimager-binary.zip

    Win32diskImager 라는 프로그램은 img 확장자의 디스크 이미지 파일을 USB 메모리나,
    Micro SD Card 등의 미디어에 기록을 하는 용도로 사용 된다.


    다운로드 받은 Win32diskImager.zip 파일을 적당한 디렉터리에 압축 해제 한다.




3. SD 카드에 운영체제 올리기

    Win32diskImager.exe 파일을 실행 하여 위 그림과 같이 ① 아이콘을 클릭 합니다.



    파일 열기 대화 상자가 나타나면, 다운로드 받아 압축 해제 하였던 데비안의 img 파일이
    있는 경로로 이동 하여 파일을 선택 하고, ② 의 "저장(S)" 버튼을 클릭 합니다.



    "Write" 버튼을 클릭 합니다.



    선택된 장치에 이미지를 덮어 쓰겠다는 일종의 경고 메세지.
    이미지가 기록될 장치를 다시 확인 하고 "Yes" 버튼을 클릭 한다.



    이미지가 미디어에 써지는 동안 기다린다.



    이미지가 모두다 기록 되었다. "OK" 버튼을 클릭 하여 마무리 한다.


    라즈베리 파이에 메모리를 넣고 부팅 하면 된다.




[LiNuX] Raspberry Pi 에 방열판 장착




<Before>


 

<After>




<Detail>