레이블이 잡 지식인 게시물을 표시합니다. 모든 게시물 표시
레이블이 잡 지식인 게시물을 표시합니다. 모든 게시물 표시

2022년 1월 11일 화요일

v-list-item-group 주의점

 v-list-item-group 사용시 v-model을 활용하여 선택된 데이터를 관리한다.


이 때, 관리되는 데이터는 Array 여야만 하고,  선택 된 리스트의 순서(인덱스)가 저장 됨.


v-list-item의 항목을 동적으로 변화시키는 과정에서 v-model의 값이 의도하지 않는 값으로 세팅되는 현상 발생..


해결법 :  v-list-item의 key 값을 index 값으로 할당하여야 정상 작동.. 

아무 생각 없이 list 값들 (항목들)이 고유해서 해당 값을 그대로 key 값으로 사용했었는데.. 

idx로 key를 변경하니 정상작동.. 개빡..


<기존 코드>


     <v-list-item-group

      v-model="fil.selected"

       multiple

     >

     <v-list-item  v-for="(v, k) in fil.list" :key="k" active-class="text--accent-4"  >


<변경 코드>

    <v-list-item-group

      v-model="fil.selected"

       multiple

     >

     <v-list-item  v-for="(v, k, idx) in fil.list" :key="idx" active-class="text--accent-4"  >


사소하지만 오랜 시간 걸린 버그다 --.. v-model에 들어가는 값 수정만 몇번을 했는지.. 에휴-오늘의 삽질 끝

2022년 1월 10일 월요일

쿠버네티스 클러스터 - (Google Cloud Platform)

 2022/01/11 현재 일자 기준 구글 클라우드 플랫폼기반으로 간단한 쿠버네티스 클러스터 구성과 쿠버네티스 웹 UI 연결까지를 정리한다.


GCP는 첫 가입시 일정기간 무료로 사용 가능.


간단하게 프로젝트를 하나 생성 (이름은 아무거나..)


왼쪽 상단 메뉴바를 클릭하면 아래쪽에 Kubernetes Engine 항목 선택



Kubernetes 클러스터 만들기 선택 (UI상으로 쉽게 만들 수 있음)



GKE standard 선택 


클러스터  위치, 이름 설정 (위치(리전)만 바꾸어서 실행 했다..)



조금만 기다리면 클러스터 상태가 초록색으로 변함



클러스터를 눌러보면 클러스터의 세부 정보가 나오고,  웹 UI 연결을 위해서는 클러스터에서 설정을 해야되기 때문에 쉘 연결을 해야한다. 이때 구글은 Cloud Shell이라는 기능을 제공하는데 이를 통해 클러스터에 연결 가능하다.



Cloud Shell에서 실행을 선택



웹 아래 쪽에서 Shell 창이 생기고 승인 버튼이 생긴다.
(승인 누르면 된다. - 가끔 구글 로그인 요청이 다시 생길 수 있다)


쿠버네티스 웹 UI(대쉬보드) 실행시키기 위해서는 다음과 같은 명령어를 수행
(참고 : https://github.com/kubernetes/dashboard)


대쉬보드 서비스 생성 (8001포트로 자동 생성 된다)


Localhost로 연결을 할 수는 없기 때문에 Cloud Shell 제공 기능을 활용해야한다.
Shell의 우측 상단에 세 번째 버튼을 누르면 xxxx포트에서 미리보기를 통해 웹 UI에 연결 가능한다. 포트를 8001 포트로 접속해야 되기 때문에 포트 변경을 선택한다.


                        포트를 8001 포트로 변경 후 변경 및 미리보기를 선택한다.


접속을 하게 되면  JSON이 리턴 되는 화면이 생성되고, URL을 변경해야한다.


/?authuser=0 부분을 아래와 같이 변경한다.
(api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login)

(참고 : https://github.com/kubernetes/dashboard)


URL을 변경하고 접속하면 쿠버네티스 대쉬보드가 연결 되고, 연결을 위한 Token을 입력하라는 창이 생성된다. Token은 Cloud Shell에서 다시 확인 가능하다.

기존 창은 대쉬보드 웹 서비스가 실행된 상태이기 때문에, +버튼을 눌러 새로운 Shell 창을 연다.


                            kubectl config view를 통해 Token 확인 가능하다    


    아래쪽에  access-token 뒷 부분을 복사하고, 웹 Token 입력 창에 입력하여 연결한다.


정상적으로 웹 UI에 접속이 된다. 관리 중 컨테이너가 없어 별다른 내용은 안나온다.

쿠버네티스 클러스터로 생성되었기 때문에 클러스터 내의 노드 정보(성능 메트릭)는 확인 할 수 있다.


이상, 구글 클라우드 플랫폼을 활용한 쿠버네티스 클러스터 구성 및 대쉬보드 확인 방법을 정리하였다.

쿠버네티스 책을 보면서 설정을 하려다보니 잘 실행되지 않아 별도로 수행한 결과를 기록해본다.. 


2019년 9월 3일 화요일

Fedora30 MongoRocks 3.4 설치

- GCC version 9.1.1
- Python 2.7.3

//경우에 따라서 bzip-devl, libcurl-devel, snappy-devel 등을 yum 혹은 dnf 로 install 해야 함


MongoRocks - 3.4 설치 방법

1. RocksDB 설치 및 빌드

//다운로드
git clone -b 5.1.fb https://github.com/facebook/rocksdb.git

//빌드 -> -j는 옵션. 없어도 상관없음
cd rocksdb
CFLAGS=-fPIC CXXFLAGS=-fPIC
make static_lib -j 8
INSTALL_PATH=/usr make install -j 8
make shared_lib -j 8
cd ..


2. MongoRocks 설치

git clone -b v3.4 https://github.com/mongodb-partners/mongo-rocks

3. MongoDB 설치

git clone -b v3.4 https://github.com/mongodb/mongo.git


4. MongoRocks 빌드

mkdir -p mongo/src/mongo/db/modules
cd mongo/src/mongo/db/modules
ln -sf ../../../../../mongo-rocks rocks
cd ../../../../

//gcc 5.4
scons

//5.4보다 버전이 높을 경우
scons --disable-warnings-as-errors

//혹은 .. 여기서도 -j n 옵션으로 속도 올릴 수 있음
buildscripts/scons.py mongod --disable-warnings-as-errors


//MongoDB가 버전이 많아서 dependency를 먼저 설치해야하는 경우도 많은데 3.4버전은
pip install -r buildscripts/resmokelib/requirements.txt

//Master 버전은..
pip3 install -r etc/pip/compile-requirements.txt

//해당 정보는 mongo/docs/building.md 를 참조


5. 실행
//정상적으로 빌드하였다면 (다행..) mongod 파일이 생성되고 해당 파일로 mongoDB를 실행가능

//기본 저장디렉토리 생성 및 rocksdb storage 엔진으로 사용 (default가 WiredTiger이기 때문에 지정해주어야 함)
mkdir -p /data/db
./mongod --storageEngine=rocksdb



6. 기타 에러
// Compression type Snappy is not linked with the binary. at src/mongo/db/modules/rocks/src/rocks_engine.cpp 208  등 같은 에러는 compress 라이브러리를 바꾸어서 실행하면 됨
--rocksdbCompression arg (arg => none, snappy, zlib, lz4, lz4hc, mongod --help로 확인 후 입력) 

//간혹이 아니라.. 빌드가 안되는 상황이 많을 수 있음.. 이때는 보통 rocksdb의 빌드 문제가 많음 mongo-rocks의 git에서는 다음과 같은 형식으로 설치하고 있음 

cd rocksdb; USE_RTTI=1 CFLAGS=-fPIC make static_lib; sudo INSTALL_PATH=/usr make install; cd ..
//재빌드하기전에 make clean 및 /usr/lib/librocksdb.a 파일, /usr/include/rocksdb 폴더 삭제 후 재빌드 권장 (사실 안해도 될수도 있음...)



++ 9/18 추가

requirements 설치 중 에러 1.

‘/usr/lib/rpm/redhat/redhat-hardened-cc1’: No such file or directory


=> dnf install redhat-rpm-config


requirements 설치 중 에러 2.

Python.h: No such file or directory

=> dnf install python2-devel





2019년 7월 17일 수요일

WIN10 - Intel OpenCL SDK - Eclipse CDT(MinGW)

Win 10에서 이클립스 환경에서 OpenCL을 테스팅하기 위한 환경 설정 내용입니다.

간략하게 캡쳐 사진 위주로 설명하겠습니다.

1. Intel OpenCL SDK 설치 (CPU 제조사에 맞는 SDK 설치- Intel 외 제조사는 테스트 필요)
https://software.intel.com/en-us/opencl-sdk/choose-download



2.  sdk 설치 위치 확인 - 추후 라이브러리 지정에 사용
(C:\Program Files (x86)\IntelSWTools\OpenCL\sdk) -환경마다 다를 수 있음


3.  이클립스 설치 - (CDT 환경의 이클립스라면 CDT 설치 부분을 건너띄어도 됨)

(https://www.eclipse.org/downloads/)



4. CDT 설치 - CDT 환경이 없다면..





5.  이클립스 재실행 후 CDT 환경 확인 - perspective를 변경하여 c/c++이 존재하는지 확인



6. C/C++ 프로젝트 생성



7. 각 컴퓨터에 맞는 GCC 컴파일러 환경에 맞게 프로젝트 생성
  (MinGW 컴파일러 설치는 본 블로그에서 다루지 않음 -> 다른 블로그에 해당 내용이 많음)



8. 프로젝트 환경설정에서 include / linker(library) 설정
(2번 단계에서의 SDK 디렉토리를 입력 - 특히 링커 설정에서는 아래쪽에서는 path를 입력하고 위쪽에서는 OpenCL 을 입력해야 함)




9. OpenCL 구동 확인을 위해서 예제 .cpp 파일과 .cl 파일을 생성



10. 빌드 후 실행 (ctrl + b, ctrl + f11)
 (콘솔에 결과가 출력 됨을 확인 => 각 커널 함수에서 printf 문을 사용하더라도 이클립스 콘솔에서 확인 가능)




11. OpenCL 공부하기 (가장 힘든 작업...🌟)

2019년 4월 17일 수요일

[Vue] dialog , component 내의 v-tabs slider 안보이는 버그

문제 : Vue에서 v-tabs 를 dialog내 첫 로딩시 slider 가 보이지 않는 현상이 발생한다.

<정상 Slider >


<비정상 Slider>


사소하지만 신경 쓰이는 버그임이 분명하다..

깃허브에도 버그리포트와 해결 방법을 일부 설명해주고 있다.
https://github.com/vuetifyjs/vuetify/issues/1978

Dialog 해결 방법 : lazy prop을 추가하면 된다!!


추가 문제 : component화 시킨 자식 컴포넌트에 삽입하면 lazy prop이 먹히지 않는다.....

역겨운 구글링 결과 $refs.tabs.slide() (내부적으로도 해당 함수를 통해 slider를 보이게 한다는 것..) 실행 시키면 가능하다고 하지만.. 버전이 달라서 그런지 해당함수는 존재하지 않는다.....

그렇다면, $refs.tabs 를 한번 찍어보자... 다행히도 비슷해 보이는 callSlider 함수가 있다.


해당 함수를 호출하니 다행히도 버그가 해결 되었다.. 다시는 만나지 말자..

아래는 전체 소스 코드이다

<자식 컴포넌트 ref 부여>
<childComp ref="tab_right" ></childComp>

<v-tabs ref 부여>
<v-tabs v-model="active" ref="tabs">

<특정 메소드(버튼을 눌렀다던지) 내부에서 $refs를 통해 v-tabs의 callSlider 함수 호출 >
//부모 컴포넌트에서 다이렉트로 접근 할때
this.$refs.tab_right.$refs.tabs.callSlider() 
//부모 컴포넌트에서 자식 컴포넌트의 함수를 수행, 
this.$refs.tab_right.onSelect() 

//자식 컴포넌트에서는 위 처럼 callSlider 를 수행
//onSelect()
this.$refs.tabs.callSlider()

2019년 4월 12일 금요일

vue axios 내부 함수 호출

vue에서 REST 요청을 위해서 axios를 많이 활용 한다.

jQuery에서 $.get(), $.post 와 같이 vue에서는 axios.get()으로 쓴다.

틀은 다음과 같음

axios.get('url')
 .then(response => {
 //응답 처리

 })
 .catch(error => {
 //에러 처리

 });

!then 문에서 methods에 정의된 함수를 호출할 경우 Reference Error가 발생 할 수 있다.
=> 해결 방법은 axios 호출 전에 this를 임시 변수에 넣고 해당 변수를 활용하는 방법으로 해결 할 수 있다. (아래 코드 참조)


let self = this
    
axios.get('url')
   .then(response => {
      response.data.forEach(function(value){
        value.a = self.innerMethod(value.a) //  Reference Error 발생 부분, this대신 self로 대체
      });
      self.a = response.data // data 또한 self로 접근
   })
   .catch(error => {
        console.log(error.response);
   });

2019년 4월 10일 수요일

vue create 명령어로 만든 프로젝트 IP, port 변경

vue create ""Project Name" 으로 생성시 (vue-cli 3.x 버전 이후..) npm run serve를 수행하면

Local (localhost:8080), Network(내부 ip 주소:8080)으로 실행이 됨

!!외부 ip 주소 혹은 포트를 변경하고 싶다면

project/package.json 내용 변경
 =>

{
 "name" : ..
 "version" : ..
 "private" :
 "scripts" :{
  "serve" : "vue-cli-service serve",
           ...
 }
}

==>

{
 "name" : ..
 "version" : ..
 "private" :
 "scripts" :{
  "serve" : "vue-cli-service serve --host 203.x.x.x --port 8081",
           ...
 }
}


즉, npm run serve 에서 serve는 스크립트를 수행 하는 명령어. 내부 적으로는 vue-cli-service를 실행

Vue draggable

Vue draggable  (https://github.com/SortableJS/Vue.Draggable)

move 이벤트를 통해 draggable의 함수 적용 시

=> move 이벤트는 소스 draggable 태그에 작성

=> 타겟 draggable에서는 새로운 아이템이 들어오더라도 move 함수 실행이 작동 x
 => 대신 change 이벤트에 added 이벤트로 접근 가능 (이미 added 된 상태이기 때문에 added 되기 전 이벤트를 감지하지는 못함.)



group의 name으로 드래그-앤-드롭이 가능한 리스트를 식별

pull : 'clone' => 아이템을 뺄 때 '복제'되어 이동 (원본 리스트에서는 삭제 x)
put : false    => 아이템이 드롭 불가능
:sort="false" => 내부 정렬 불가능 속성


move  => return 을 true로 하면 이동 허용, false는 이동 불가
(move 함수내에서 evt.relatedContext.list 내에 중복 element가 있는지 확인하여 중복 여부를 가지고 리스트 중복 제거 가능)

move 이벤트로 접근 가능한 속성은 다음과 같음


  • evt.draggedContext : 드래그 한 element의 context 정보 
    • evt.draggedContext.index : 드래그한 element의 인덱스 (draggable 태그의 :list(혹은 v-model)과 연결된 data에서의 인덱스
    • evt.draggedContext.element : 드래그한 element
    • evt.draggedContext.futureIndex : 드롭이 성공했을 때 들어갈 해당 draggable 태그의 :list(혹은 v-model)과 연결된 data에서의 인덱스 

  • evt.relatedContext : 드롭 대상 element의 context 정보 
    • evt.relatedContext.index : 드롭 대상의element의 인덱스 
    • evt.relatedContext.element : 드롭 대상의 element
    • evt.relatedContext.list : 드롭 대상의 list 정보 (해당 list 확인을 통해 중복 체크 확인 가능)
    • evt.relatedContext.component : 드롭 대상의 VueComponent

2018년 7월 24일 화요일

hive 빡..

hive 2.3.3

1. hive-env.sh에 HADOOP_HOME 설정
2. hive 쉘 실행 => show tables;
=>
 FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

해결책 : 
 1.hive 쉘 실행 위치에 metastor_db 폴더가 생김 -> rm으로 삭제
 2. schematool -initSchema -dbType derby 실행
 3. hive 쉘 실행 => show tables; => 정상 작동

공식 문서에는 아래 명렁어를 실행하라고 되어있음. 
(참고 : https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-InstallationandConfiguration)

  $ $HADOOP_HOME/bin/hadoop fs -mkdir       /tmp
  $ $HADOOP_HOME/bin/hadoop fs -mkdir       /user/hive/warehouse
  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /tmp
  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /user/hive/warehouse

2016년 5월 4일 수요일

postgreSQL 설치

#postgres 설치 참조 : https://wiki.postgresql.org/wiki/Apt

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt-get install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install postgresql-9.5 pgadmin3



#유저 생성
sudo -u postgres createuser -W dojin

#유저 db 생성
sudo -u postgres createdb testdb -O dojin

#쉘 접속
psql testdb


#*.conf 파일 위치

sql ->  show config_file;

/etc/postgresql/9.5/main/*.conf

#*.conf 설정법

postgresql.conf
 =>  address = "*"
pg_hba.conf
 =>  host all all 0.0.0.0/0 md5


#기타

sudo service postgres [stop/start]


#설치 2 - yum 설치
#https://wiki.postgresql.org/wiki/YUM_Installation

exclude=postgresql*
yum localinstall http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.noarch.rpm
yum install postgresql94-server

#data directory
ls /var/lib/pgsql/9.4/data/


#한번만 하면댐.
service postgresql-9.4 initdb
#만약 안된다면
/usr/pgsql-9.4/bin/postgresql94-setup initdb


#auto start .
chkconfig postgresql-9.4 on


#서비스 시작
service postgresql-9.4 start

#삭제
yum erase postgresql94*

node.js 간단 사용

#node js 설치

sudo apt-get install curl
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs


#실행

node *.js



#간단한 서버

var http = require('http');

var server = http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type' : 'text/plain' });
  res.end('Hello World');
});

server.listen(8000);

#끝.

spark-hbase-connector 사용법

참조 : https://github.com/nerdammer/spark-hbase-connector

/*
 spark-shell 을 이용해야 해서 git clone 으로 프로젝트 빌드를 수행

*/

//hbase의 라이브러리를 CLASSPATH에 지정
export CLASSPATH=/usr/local/hbase/lib/*

//실행 옵션. 빌드한 spark-hbase-connector의 jar파일 지정
spark-shell --jars /usr/local/spark/spark-hbase-connector_2.10-1.0.2.jar


import it.nerdammer.spark.hbase._


/*
 hbase내의 테이블의 특정 컬럼패밀리에 특정 qualifier를 지정해서 받아오는 소스

1.타입 지정 :  [(String,...)] -> qualifier 수 만큼 있다면 차례로 들어가고 1개 더많으면 가장앞이 row key값 (테이블명)

2.select : 데이터를 받고 싶은 qualifier 이름 지정

3. inColumnFamily : 컬럼 패밀리를 지정

결과 : rdd = Array[String,String,String] 형태로 들어간다고 이해 하면 됨
*/

val rdd =sc.hbaseTable[(String,String,String)]("T_NAME").select("Q1","Q2").inColumnFamily("CF_Name")



/*
다른 컬럼패밀리의 qualifier를 받아오고 싶을때

select 에서 다른 컬럼패밀리 이름을 지정
*/

val rdd =sc.hbaseTable[(String,String,String,String)]("T_NAME").select("Q1","Q2","otherCF:Q3").inColumnFamily("CF_Name")

/*
RDD를 hbase에 저장 할때

1. toHBaseTable : 저장할 테이블 명

2. toColumns :  qualifier 명

3. inColumnFamily : 컬럼 패밀리 명
*/

rdd.toHBaseTable("T_NAME").toColumns("Q1","Q2").inColumnFamily("CF_NAME").save()



[Python]Google Scholar 에서 인용수를 얻는 방법

/*

논문의 인용수를 마땅히 받아 올 곳이 없음...
python으로 간단하게 인용수 수집 구현

argv[1] = 논문 제목

문제 : 구글 자체적으로 시간당 트래픽 40개가 넘어가면 로봇으로 감지.
        IP가 막혀서 해당 사이트 검색 불가 -> 로봇 검증 해지해야 함.

해결 방안 : 1. 트래픽 구매 ( 한달에 5만건 : 250 불)  
               2. 제한 된 트래픽에서 계속 실행 (한달 full로 요청 하면 28,800건 가능)
             
결과 : 문제시 자삭
*/

import pycurl
import cStringIO
import sys


arg1 = sys.argv[1]
print arg1
buf = cStringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://scholar.google.co.kr/scholar?q='+arg1)
c.setopt(c.WRITEFUNCTION, buf.write)
c.perform()

string = buf.getvalue()
index = string.find("\"gs_fl\">") #find id = gs_fl div tag
string2 = string[index+8:]

index2 = string2.find(">") # find end of a tag
string3 =  string2[index2+1:]

index3 = string3.find(" ") # find void

print string3[0:index3][0:-1]


buf.close()


2015년 9월 4일 금요일

JavaScript..

// simple  %Y-%M-%D
new Date().toJSON().slice(0,10)

More







//print html
<div id="printme">
...
</div>

function printIt(printThis)  {
 var win=null;
 win = window.open('','offprint','width=810px height=882px');
 self.focus();
 win.document.open();
 win.document.write('<'+'!DOCTYPE html'+'  PUBLIC '+'-//W3C//DTD XHTML 1.0 Transitional//EN '+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd >');
 win.document.write("<html xmlns='http://www.w3.org/1999/xhtml'><head>");
 win.document.write("<meta http-equiv='X-UA-Compatible' content='IE=edge' />");
 win.document.write("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />");
 win.document.write('<link rel=stylesheet type="text/css" href="/css/admin/reset.css" />');
 win.document.write('<link href="/css/admin/jquery-ui-1.8.21.custom.css" rel="stylesheet" />');
 win.document.write('<link rel="stylesheet" type="text/css" href="/css/admin/common.css" />');
 win.document.write('<link rel="stylesheet" type="text/css" href="/css/admin/contents.css" /> ');
 win.document.write('<scr' + 'ipt language="javascript" type="text/javascript" src="/js/admin/jquery-1.8.1.min.js"></scr' + 'ipt>');
 win.document.write('<scr' + 'ipt language="javascript" type="text/javascript" src="/js/admin/jquery-ui-1.8.21.custom.min.js"></scr' + 'ipt>');
 win.document.write('<scr' + 'ipt language="javascript" type="text/javascript" src="/js/admin/layout.js"></scr' + 'ipt>');
 win.document.write("</head><body>");
 win.document.write('<div id="wrap1">');
 win.document.write('<div id="container">');
 win.document.write('<div class="content">');
 win.document.write('<div class="pg_navi">');
 win.document.write('</div>');
 win.document.write(printThis);
 win.document.write('</div>');
 win.document.write("</body></html>");
 win.document.close();
 win.focus();
 win.print();
}

2014년 12월 31일 수요일

Hadoop

Hadoop disable safe mode


hadoop dfsadmin -safemode leave

2014년 8월 29일 금요일

안드로이드 UI 변경





//스레드 생성
Thread t = new Thread(){
@Override
public void run() {

while(true)
{
try {
Message msg = handler.obtainMessage();
handler.sendMessage(msg);
Thread.sleep(200);
} catch (Exception e) {
// TODO: handle exception
}

}
}
};
t.start();



//핸들러 생성
final Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
ball.setX(ball.getX()-3f); //ball image move
};
};


//Thread ((Message))  Handler 에서 UI 처리

2014년 8월 22일 금요일

잡다한것...2

//android에서 VideoView 영상이 짤려서 나올때

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >
 
     <VideoView
         android:id="@+id/play_videoview"
         android:layout_alignParentTop="true"
         android:layout_alignParentBottom="true"
         android:layout_alignParentLeft="true"
         android:layout_alignParentRight="true"
         android:layout_width="match_parent"
         android:layout_height="match_parent"      
     />
 

</RelativeLayout>


//이게 중요.. android:layout_alignParentTop="true"
         android:layout_alignParentBottom="true"
         android:layout_alignParentLeft="true"
         android:layout_alignParentRight="true"


//무료 아이콘/UI http://sourcetree.kr/



//View.setX(), View.setY()  => View.setLeft(), View.setTop() 이랑 같지만 setXY가 잘먹힘..

//포지션을 얻으려면 windowFocusChaged에서 확인

2014년 8월 21일 목요일

잡다한것..

//안드로이드에서 보내기 예제(MMS이미지첨부)
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra("sms_body", "텍스트내용");
sendIntent.setType("image/*");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(Environment.getExternalStorageDirectory().toString()+"/tmp_1405952707341.jpg")));
startActivity(Intent.createChooser(sendIntent, "send"));




//안드로이드에서 메시지 기본어플로 메시지  보내기 확인 창

Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setType("vnd.android-dir/mms-sms");
int flags = Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP |Intent.FLAG_ACTIVITY_CLEAR_TOP;
sendIntent.setFlags(flags);
sendIntent.setData(Uri.parse("sms:"+phoneNumber));
sendIntent.putExtra("sms_body", "텍스트내용");
startActivity(sendIntent);



//java library path
/usr/java/jdk1.8.0_05/jre/lib/ext