<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <!-- 모바일 환경의 화면 크기를 위한 설정 --> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" /> <META http-equiv="Expires" content="-1"> <META http-equiv="Pragma" content="no-cache"> <META http-equiv="Cache-Control" content="No-Cache"> <title></title> <!-- 순서 바뀌면 이상한 결과가 나옴 --> <link rel = "stylesheet" href="/jquery/mobile/jquery.mobile-1.1.1.min.css"> <script src="/jquery/jquery-1.7.2.min.js"></script> <script src="/jquery/mobile/jquery.mobile-1.1.1.min.js"></script> <% response.setHeader("Cache-Control","no-store"); response.setHeader("Pragma","no-cache"); response.setDateHeader("Expires",0); if (request.getProtocol().equals("HTTP/1.1")){ response.setHeader("Cache-Control", "no-cache"); } %> </head>
2012년 9월 16일 일요일
[JaVaScRiPt] jquery mobile 시작 하기
2012년 9월 10일 월요일
[EtC] .svn 디렉터리 삭제
윈도즈의 경우 레지스트리를 이용 하여 팝업 메뉴에 두는 방법으로 .svn 디렉터리를 삭제 할 수 있다. 아래의 레지스트리를 추가 하고, .svn 디렉터리를 삭제 하고자 하는 디렉터리에서 마우스 오른쪽 버튼을 클릭 하면, 메뉴에 나타 난다.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]
@=".SVN 폴더 삭제"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""
윈도즈에서 배치 파일을 이용 하여 삭제 하고 싶은 경우 아래의 내용을 배치 파일로 만들고, 만들어진 배치 파일을 .svn 디렉터리를 삭제할 디렉터리의 루트에 넣고 실행 한다.
for /d /r . %d in (.svn) do @if exist "%d" rd /s/q "%d"
리눅스에서는 다음의 명령으로 .svn 디렉터리를 삭제 할 수 있다.
find . -name ".svn" -exec rm -rf {} \; -print
참고 : 문자열 몇개만 바꾸면 .cvs 디렉터리도 일괄 삭제 가능 하다.
[JaVaScRiPt] radio 사용
<script type="text/javascript"> function checkForm(){ var local = document.getElementsByName("localeSel"); var localCheck = false; for(i=0 ; i <= local.length -1 ; i++){ if(local[i].checked == true){ alert(local[i].value + "선택"); localCheck = true; } } if(localCheck == false){ alert("선택 항목이 누락 되었습니다."); return; } } </script> <input type="radio" name="localeSel" id="localeSel" value="1">1선택<br> <input type="radio" name="localeSel" id="localeSel" value="2">2선택<br> <input type="radio" name="localeSel" id="localeSel" value="3">3선택<br> <input type="button" value="입력완료" onClick = "javascript:checkForm()">
[JsP] 현재 날짜, 시간 구하기
<%@ page import="java.util.*, java.util.Calendar, java.util.Date, java.text.SimpleDateFormat"%> <% String toDate = new java.text.SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new java.util.Date()); // 7일전 날짜 구하기 Calendar cal = Calendar.getInstance(); cal.add(cal.DATE,-7); String beforeOneWeek= cal.get(cal.YEAR)+"-"+(cal.get(cal.MONTH)+1)+"-"+cal.get(cal.DATE); %> <%= beforeOneWeek %> ~ <%= toDate %>
2012년 8월 19일 일요일
[JaVaScRiPt] 페이지 로딩 시간
<script Language="JavaScript"> var from_time = new Date(); from_time = from_time.getTime(); function show_loading_time(){ var to_time = new Date(); to_time = to_time.getTime(); var secs = (to_time - from_time) /1000; document.write("<font size=2>loading : " + secs + "sec</font>"); } </script>
2012년 8월 13일 월요일
[JaVaScRiPt] 모바일 브라우저 체크
function browserCheck(){ var browserCheckText = new Array('iPhone', 'iPod', 'BlackBerry', 'Android', 'Windows CE', 'LG', 'MOT', 'SAMSUNG', 'SonyEricsson'); for (var word in browserCheckText){ if(navigator.userAgent.toUpperCase().match(browserCheckText[word].toUpperCase()) != null){ location.href = "<%=ctxPath%>/jsp/mobile/mobile.jsp"; break; } } }
2012년 7월 25일 수요일
[JaVaScRiPt] 웹에서 이미지 표시 할 수 없는 경우
<img src="test.png" id="PhotPath" onError="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" />
Permission | Comment |
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_STATE | WiFi상태_접근 |
ADD_SYSTEM_SERVICE | 시스템서비스_추가 |
BATTERY_STATS | 배터리_상태 |
BLUETOOTH | 블루투스 |
BLUETOOTH_ADMIN | 블루투스_어드민 |
BRICK | 디바이스_실효성_지정 |
BROADCAST_PACKAGE_REMOVED | 제거된_패키지에_대한_notification_브로드캐스트 |
BROADCAST_SMS | SMS에_대한_브로드캐스트 |
BROADCAST_STICKY | 인텐트_브로드캐스트 |
CALL_PHONE | 통화 |
CALL_PRIVILEGED | 통화(긴급전화_포함) |
CAMERA | 카메라 |
Permission | Comment |
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 | 태스크_획득 |
Permission | Comment |
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읽어오기 |
Permission | Comment |
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 | 제한처리_지정 |
Permission | Comment |
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 devicesEF13L01110142016217 device
adb 명령을 이용 하여 연결된 장치의 정보를 출력해 봅니다. 저는 EF13L01110142016217 이름의 장치가 연결 되어 있군요.
List of devices attached
emulator-5554 device
EF13L01110142016217 device
일반 유저의 계정으로(위에서 만든 rules 파일에 OWNER 의 사용자 이름) adb 명령을 이용하여 연결된 장치를 보니,
root 유저와 동일 하게 EF13L01110142016217 라는 이름의 장치가 연결 되어 있군요.
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 명령으로 공유 해제 합니다.
피드 구독하기:
글
(Atom)