ssd를 하나 질러서 윈도우를 다시 깔고 롤을 하려는데, d3dx9_39.dll 파일에 문제가 있어 실행이 되지 않았다.

 

하지만, 인터넷에 떠돌아 다니는 dll 파일을 다운받아 windows 폴더에 넣어주는 방법들로는 해결이 안되서 포스팅을 하게 되었다.

 

해결법은 간단했다.

 

절대로 인터넷에 떠돌아 다니는 dll 파일을 바로 복사하지 말고, 다이렉트x 공식 인스톨러로 인스톨 할 것.

 

 

내 경우에는 이미 windows 폴더에 다운받았던 d3dx9_39.dll 파일들이 있었는데,

1. windows 폴더에서 검색 기능으로 d3dx9_39.dll 파일들 모두 찾은 뒤 삭제

2. 아래 링크를 통해 다이렉트엑스 공식 인스톨러 다운로드 후 설치 (관리자 권한으로 실행)

www.microsoft.com/ko-kr/download/details.aspx?id=35

 

DirectX 최종 사용자 런타임

Microsoft DirectX® 최종 사용자 런타임은 현재 버전의 DirectX를 업데이트합니다. DirectX는 PC에서 고속 멀티미디어 및 게임을 구동하는 핵심적인 Windows® 기술입니다.

www.microsoft.com

두가지 단계면 해결할 수 있었다.

 

정상적으로 진행이 되었다면 빠져있는 d3dx9_39.dll 파일을, 공식 인스톨러가 적당한 곳에 넣어줄 것이다.

(1번 단계의 d3dx9_39.dll 파일제거가 올바르게 되지 않았다면, 이미 최신 소프트웨어라는 안내문구만 뜰 것이다. window 전체 폴더에서 d3dx9_39.dll 파일을 전부 지워주자)

Posted by 튼튼한노예
,

아마존의 EC2 인스턴스에 ssh로 접속 시, 윈도우 환경에서 퍼미션 문제가 발생할 수 있다.

(우분투일 경우, 단순하게 퍼미션을 400 으로 바꿔주면 된다.)(chmod 400 [키이름].pem)

 

윈도우일 경우, GUI 화면에서 퍼미션을 변경해주면 된다.

기본적으로 다른 계정에서 접속이 가능하면 안되는 문제이기 때문에,

'현재 윈도우 사용자'의 권한만 남기고 다른 사용자의 권한을 제거하면 되는 작업을 해주면 된다.

 

고급 탭 클릭

 

상속 사용 안함 설정 후(팝업의 두 옵션 중 아무거나 클릭) -> 모든 권한 제거

 

현재 사용자(Admin 아닌 윈도우에 로그인된 계정)만 추가하고, 모든 권한 부여함

 

접속완료

 

Posted by 튼튼한노예
,

윈도우 10 개발환경에 우분투 빌드머신을 쓰는 상황에서,

윈도우 사이드에서 빌드머신에 접속하는 것에 문제가 생겼다. (사실 삼바서버 추가할때마다 매번 생겼었는데 방법을 매번 까먹어서...)

 

찾아보니 '보안되지 않은 게스트 로그온 사용' 항목을 활성화 하면 약간 위험해 보이긴 하다만 잘 된다더라.

 

 

그런데 저 설정은 로컬그룹정책편집기(gpedit.msc) 를 통해서 설정해야 하고,

기본적으로 정책 편집기가 비활성 상태라 수동으로 설정을 해줘야 한다.

 

 

아래의 명령어를 윈도우 커맨드라인에 복/붙 시켜주자. 로컬 그룹 정책 편집기가 다운로드되고 활성화 될 것이다.


 

FOR %F IN ("%SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~*.mum") DO (
DISM /Online /NoRestart /Add-Package:"%F"
)
FOR %F IN ("%SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~*.mum") DO (
DISM /Online /NoRestart /Add-Package:"%F"
)

 


안그래도 보안수준 낮추는 작업인데, 인터넷 돌아다니는 사제 exe/bat파일 실행하기가 좀 그래서

커맨드를 따로 구해서 올려본다.

Posted by 튼튼한노예
,

반복작업 만들기

Android 2018. 5. 11. 11:38

안드로이드에서 반복작업을 하기 위해서는 Timer, Handler, TimerTask 세개의 클래스가 필요하다.


아래는 회사에서 개발중인 작업물 일부인데, 시간표기 텍스트뷰 부분을 10초마다 갱신하는 코드이다.



재활용 하려면 run()안의 내용을 마음대로 바꿔서 사용하면 된다.


Timer timer = new Timer(true); //인자가 Daemon 설정인데 true 여야 죽지 않음.
Handler handler = new Handler();
timer.schedule(new TimerTask() {
@Override
public void run() {
handler.post(new Runnable(){
public void run(){
timeTextView.setText(dateFormat.format(new Date(System.currentTimeMillis()))); //이 줄에 하고싶은 작업 여기에 작성
}
});
}
}, 0, 10000); //시작지연시간 0, 주기 10초


'Android' 카테고리의 다른 글

최상위 액티비티의 패키지 네임 얻어오기  (0) 2018.05.04
Posted by 튼튼한노예
,

최상위 액티비티의 패키지 네임 얻어오기.


아래 코드추가 외에 다른 코드는 필요없음...

퍼미션 쓲싺 넣은다음에 자바코드에 4줄 넣어주면 끝. 

currentPackageName 변수에 패키지명이 String 형태로 들어오게 된다. 


ActivityManager AM = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> Info = AM.getRunningTasks(1);
ComponentName topActivity = Info.get(0).topActivity;
String currentPackageName = topActivity.getPackageName();


<uses-permission android:name="android.permission.GET_TASKS" />


'Android' 카테고리의 다른 글

반복작업 만들기  (0) 2018.05.11
Posted by 튼튼한노예
,

리눅스를 처음 설치하면 보통 인터넷으로 자동으로 위치를 잡아주기 때문에 별 생각 없이 한글 팩으로 설치하게 된다. 


그렇게 설치하고 나면 한글대신 다이아몬드만 보게 되는 경우가 있는데, 그냥 한글팩 깔고 뭐고 하기보다는 깔끔하게 기본 언어를 영어로 바꿔서 영어실력과 편함을 얻는게 마음이 편할 것이다.


/etc/default/locale를 편집하면 기본 언어/인코딩을 바꿔줄 수 있는데, 깔끔하게 단 한줄 변경으로 영어로 바꿔버도록 하자.


아마

sudo nano /etc/default/locale

과 같은 명령어로 확인해 보면, LANG="ko_KR.UTF-8"과 같이 기록이 되어 있을 것인데, 과감히 삭제하고 


LANG="en_US.UTF-8"

으로 변경하도록 한다.

(nano 저장은 ctrl+o, 나가기는 ctrl+x이다. 아마 이글을 읽을 정도로 절박하면 nano도 다루기 힘드실 것이기에...)


이렇게 설정하면 애초에 깨질수가 없는 영어/UTF-8인코딩 방식을 사용하기에 더이상의 깨짐은 경험하기 힘들다(굳이 리눅스에서 한글로 뭔가를 하지 않는다면! 경험상 리눅스에서 한글 써본적이 없다!)


Posted by 튼튼한노예
,

### MySQL 접속 ###



$>mysql -u root -p

$>Enter password:       // 현재 비밀번호 혹은 미설정시 그냥 엔터




### root 비밀번호 설정 ###



1. mysqladmin을 이용하여 root 암호 설정

$>mysqladmin -u root -p password '새로운비밀번호'  //초기화하려면 ''만 입력




mysql에 접속하여서 확인해 보면 다음과 같이 localhost root계정에는 비밀번호가 설정된 것을 확인할 수 있다.



2. update문을 이용하여 root 비밀번호 설정(추천)



mysql>show databases;                                             //데이터베이스 목록 확인

mysql>use mysql;                                                    //mysql 데이터베이스 사용

mysql>update user set password=password('새로운비밀번호') where user='root';       //root의 비밀번호를 설정


mysql>flush privileges;                                             //변경된 설정 적용

mysql>select host, user, password from user; //변경된 설정 확인 user root의 패스워드가 변경된 것을 볼 수 있다.

Posted by 튼튼한노예
,

adb shell에서 /system 및 하위 폴더들 권한 변경에 사용한다.(Nexus5 사용중)

$ adb shell

$ su

# mount -o remount rw /system

# chmod 777 /system


'AOSP' 카테고리의 다른 글

안드로이드 /proc 파일 시스템  (0) 2015.07.28
[Smali] 문법정리  (0) 2015.05.15
adb push 입력시 permission denied 문제  (0) 2015.04.09
fastboot 에 디바이스가 물리지 않을 때  (0) 2015.03.09
개발폰별 파일들  (0) 2015.03.05
Posted by 튼튼한노예
,

/proc 디렉토리는 가상 파일 시스템으로  /dev와 마찬가지로 하드 디스크상에 물리적인 용량을 갖지 않는다.

 

/proc 파일 시스템은 리눅스의 커널과 사용자 영역 사이에 일어나는 통신 채널로 사용 할 수 있는 가상 파일 시스템  이다.

 

또한, 현재 시스템의 하드웨어(CPU, RAM, 파일 시스템, 인터럽트, 파티션) 정보와 현재 실행 되고 있는 프로세스의 정보를 확인 할 수 있다. 또한, 커널이 실행되면서 생성된 각종 정보들 또한 /proc 에 파일로 관리 하고 있다.

 

커널이 실행되면서 작성된 각종 정보들을 역시 파일로 관리하고 있다.

 

이번에는 /proc 안에 있는 디렉토리 및 파일들을 살펴보고 그 디렉토리가 어떤 의미를 가지는지를 알아 보자.

<숫자> : 이 디렉토리는 현재 실행 되고 있는 프로세스 ID 이며 각 디렉토리에는 프로세스에서 사용하는 정보들이 파일 및 디렉토리로 저장 되어 있다.

 
/proc/acpi  :  파워 매니지 먼트와 관련된 정보가 들어 있는 디렉토리
/proc/buddyinfo : 버디 할당자에 대한 정보를 포함
/proc/bus : bus를 사용하는 디바이스들과 관련된 정보 디렉토리 ( PCI, USB 등 )
/proc/cmdline : 부팅시 사용된 커널 실행옵션 정보 파일
/proc/cpuinfo : 상세한 프로세서의 정보가 저장되어 있는 파일 
/proc/crypto : 커널에 설정된 암호화 관련 정보가 들어 있는 파일
/proc/devices : 현재 시스템에서 사용가능한 디바이스 들에 대한 정보 (Char 및 Block 장치), 디바이스 주번호 및 이름이 있다.
/proc/diskstats : 각각의 논리적 디스크 디바이스에 대한 정보를 제공 한다.  
/proc/dma  : 현재 시스템에서 사용 하고 있는 DMS 채널
/proc/driver  : 현재 시스템의 드라이버 관련 정보
/proc/filesystem : 현재 시스템에서 지원하는 파일 시스템에 대한 정보
/proc/ide : IDE 장치에 대한 정보 디렉토리 
/proc/interrupts : 현재 사용중인 인터럽트와 인터럽트의 사용량에 대한 정보 
/proc/iomem : 현재 사용중인 메모리 맵에 대한 정보 
/proc/ioports : 현재 사용중인 입출력 포트에 대한 정보
/proc/kcore : 커널 core 이미지 
/proc/kmsg :커널에 의해서 출력되는 커널 메시지 
/proc/ksyms : 커널의 심볼 테이블 
/proc/loadavg  : 시스템의 최근 1,5,15 분의 시스템의 평균 부하량(Load Average)에 대한 정보
/proc/locks : flock 및 fcntl 들에 의한 현재 lock 파일에 대한 정보 
/proc/meminfo : 현재 사용중인 메모리의 사용량 
/proc/misc : misc 관련 드라이버에 대한 정보 
/proc/modules : 현재 모듈로 로딩된 모듈 목록, lsmod 했을때 나오는 정보 
/proc/mounts :마운트된 파일시스템에 대한 정보 
/proc/mtrr : 메모리 타입 레인지 레지스터의  정보
/proc/net : 네트웍과 관련된 다양한 통계 정보들을 담고 있는 디렉토리 
/proc/partitions : 현재 시스템의 파티션 정보 
/proc/pci :PCI 버스와 관련된 정보 
/proc/slabinfo :  Slab 관점에서 메모리 사용에 대한 정보 
/proc/stat : CPU, 인터럽트, 컨텍스트 스위치 등 일반적인 시스템 통계 정보 
/proc/swaps : swap 파일시스템 사용 정보 
/proc/sysvipc : SysVIPC 자원정보(메시지큐, 세마포어, 공유메모리)의 정보가 들어 있는 디렉토리 
/proc/tty : tty 드라이버 정보가 들어 있는 디렉토리 
/proc/uptime : 부팅 이후 부터 시스템이 운영된 시간  ( 초단위 )
/proc/version : 상세한 커널 버젼 및 커널 컴파일시의 정보 



- 숫자 디렉토리

현재 시스템에서 동작하는 프로세스의 정보가 포함되어 있다. 이는 #ps -aux를 사용했을 때 출력되는 PID 필드와 일치한다.


Posted by 튼튼한노예
,

[Smali] 문법정리

AOSP 2015. 5. 15. 17:34

- nop

  아무 것도 하지 않는 것입니다.


- move vA, vB

  A: 목표 레지스터(4bits), B: 소스 레지스터(4bits)

  A값에 B값을 넣어 주는 것입니다. (C언어로 A = B)


- move-result vAA

  A: 목표 레지스터(8bits)

  직전의 invoke-... 함수 호출의 결과를 A에 넣어 줍니다.

 

- return-void

  아무 것도 없이 리턴합니다.

 

- return vAA

  A: 목표 레지스터(8bits)

  4byte까지의 데이터를 리턴합니다.

- return-object vAA

  A: 목표 레지스터(8bits)

  단순 변수가 아닌 Object를 리턴할 때 사용합니다.

- const/4 vA, #+B

  A: 목표 레지스터(4bits), B: 정수(4bits)

  B(4바이트까지 부호확장?)에 지정된 값을 A에 넣어 줍니다.

 

- const/16 vAA, #+BBBB

  A: 목표 레지스터(8bits), B: 정수(16bits)

  B(4바이트까지 부호확장?)에 지정된 값을 A에 넣어 줍니다.

- const vAA, #+BBBBBBBB

  A: 목표 레지스터(8bits), B: 임의의 4바이트 상수

  B에 지정된 상수 값을 A에 넣어 줍니다.

- const-string vAA, string@BBBB

  A: 목표 레지스터(8bits), B: 문자열

  B에 지정된 문자열에 대한 참조를 A에 넣어 줍니다.

 

- array-length vA, vB

  A: 목표 레지스터(4bits), B: 배열 참조 레지스터(4bits)

  B로 지정된 배열의 길이로 A에 저장합니다.

 

- new-array vA, vB, type@CCCC

  A: 목표 레지스터(8bits), B: 사이즈 레지스터, C: 타입

  C로 지정한 형식으로 B로 지정한 사이즈로 배열 A를 만듭니다.

- goto +AA
  A: 분기할 오프셋(8bits)

  무조건 A로 지정된 오프셋으로 분기합니다.

 

- if-.... vA, vB, +CCCC

  A: 비교할 첫번째 레지스터(4bits), B: 비교할 두번째 레지스터(4bits)

  C: 분기할 오프셋(16bits)
  지정한 A, B 두 레지스터 값을 비교하여 C로 지정된 오프셋으로 분기합니다.
  if-eq: A = B, if-ne: A != B(다르다), if-lt: A < B
  if-ge: A >= B, if-gt: A > B, if-le: A <= B

 

- if-....z vAA, +BBBB

  A: 비교할 레지스터(8bits), B: 분기할 오프셋(16bits), 주로 :cond_0

  지정한 A 레지스터 값을 0과 비교하여 B로 지정된 오프셋으로 분기합니다.
  if-eqz: A = 0, if-nez: A != 0(다르다), if-ltz: A < 0
  if-gez: A >= 0, if-gtz: A > 0, if-lez: A <= 0

  

- invoke-.... {vC, vD, ...}, meth@BBBB

  B: 참조할 함수, C,D,... 함수의 인수

  B로 지정한 함수를 실행합니다.

  결과는 위에서 설명한 move-result 로 받을 수 있습니다.

  invoke-virtual, invoke-direct, invoke-static, ... 등이 있습니다.

 

- unop vA, vB

  A: 목표 레지스터(4bits), B: 소스 레지스터(4bits)

  소스 레지스터B로 단항연산을 수행 후 목표 레지스터A에 결과를 저장합니다.

  neg-int, neg-long, neg-float, neg-double: A = -B

  not-int, not-long: A = ~B

  int-to-long: int64 A = (int64) B; int32 B;

  int-to-float: float A = (float) B; int32 B;

  int-to-double: double A = (doubleB; int32 B;

  ...

 

- binop vAA, vBB, vCC

  A: 목표 레지스터(8bits),

  B: 첫번째 소스 레지스터(8bits), C: 번째 소스 레지스터(8bits)

  두 소스 레지스터 B, C로 부터 지정된 바이너리 연산을 수행 후 목표 레지스터A에 결과를 저장합니다.

  add-int, add-long, add-floatadd-double: A = B + C

  sub-int, sub-long, sub-float, sub-double: A = B - C

  mul-int, mul-longmul-floatmul-double: A = B * C

  div-int, div-long, div-float, div-double: A = B / C

  rem-int, rem-long, rem-float, rem-double: A = B % C (B/C의 나머지)

  and-int, and-longA = B & C (And)

  or-int, or-longA = B | C(Or)

  xor-int, xor-longA = B ^ C(Exclusive Or)

  shl-int, shl-longA = B << (C&0x1f) (Shift Left)

  shr-int, shr-longA = B >> (C&0x1f) (Shift Right)

  ushr-int, ushr-longA = B >> (C&0x1f) (Shift Right)(Unsigned)

  

- binop/2addr vA, vB

  A: 목표+첫번째 소스 레지스터(4bits), B: 두번째 소스 레지스터(4bits)

  소스 레지스터 A, B로 부터 지정된 바이너리 연산을 수행 후 첫번째 소스 레지스터A에 결과를 저장합니다.

  add-int/2addr, add-long/2addr, add-float/2addradd-double/2addrA = A + B

  sub-int/2addr, sub-long/2addrsub-float/2addrsub-double/2addrA = A - B

  mul-int/2addrmul-long/2addrmul-float/2addrmul-double/2addrA = A * B

  div-int/2addrdiv-long/2addrdiv-float/2addrdiv-double/2addrA = A / B

  rem-int/2addrrem-long/2addrrem-float/2addrrem-double/2addrA = A % B

  and-int/2addrand-long/2addrA = A & B

  or-int/2addror-long/2addrA = A | B

  xor-int/2addrxor-long/2addrA = A ^ B

  shl-int/2addrshl-long/2addrA = A << (B&0x1f)

  shr-int/2addrshr-long/2addrA = A >> (B&0x1f)

  ushr-int/2addr, ushr-long/2addrA = A >> (B&0x1f)(Unsigned)


- binop/lit16 vA, vB, #+CCCC

  A: 목표 레지스터(4bits),

  B: 소스 레지스터(4bits), C: 정수 상수(16bits)

  소스 레지스터 B와 상수C로 부터 지정된 바이너리 연산을 수행 후 목표 레지스터A에 결과를 저장합니다.

  add-int/lit16: A = B + C
  rsub-int: A = C - B (역 뺄샘)
  mul-int/lit16: A = B * C
  div-int/lit16: A = B / C
  rem-int/lit16: A = B % C
  and-int/lit16: A = B & C
  or-int/lit16: A = B | C
  xor-int/lit16: A = B ^ C
 

- binop/lit8 vAA, vBB, #+CC

  A: 목표 레지스터(8bits),

  B: 소스 레지스터(8bits), C: 정수 상수(8bits)

  소스 레지스터 B와 상수C로 부터 지정된 바이너리 연산을 수행 후 목표 레지스터A에 결과를 저장합니다.

  add-int/lit8: A = B + C
  rsub-int/lit8A = C - B (역 뺄샘)
  mul-int/lit8: A = B * C
  div-int/lit8: A = B / C
  rem-int/lit8: A = B % C
  and-int/lit8: A = B & C
  or-int/lit8: A = B | C
  xor-int/lit8: A = B ^ C


Posted by 튼튼한노예
,