반응형
create database emprelation default character set utf8 collate utf8_general_ci;

//  사용자 접속가능 현황 보기
select user, host from user where user not like '';

// 모든 권한으로 생성
grant all privileges on *.* to 'emprelation'@'localhost' identified by 'password';

// 원격접속 가능
grant SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER on emprelation.* to emprelation@'%' identified by 'password';

// 로컬에서 접속 가능 
grant SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER on emprelation.* to emprelation@'localhost' identified by 'password';

// grant 작업 후 바로 적용
flush privileges;

create table EM_TRELATION (
  sourceEpId       varchar(100) NOT NULL,
  targetEpId       varchar(100) NOT NULL,
  point            BIGINT UNSIGNED default 0,
  CONSTRAINT EM_TRELATION_PK PRIMARY KEY (targetEpId, sourceEpId)
);

create table EM_TRELATION_DATA {
  sourceEpId       varchar(100) NOT NULL,
  targetEpId       varchar(100) NOT NULL,
  type             char(2) NOT NULL DEFAULT '00',
  count            BIGINT UNSIGNED default 0,
  latestDate       varchar(14),
  CONSTRAINT EM_TRELATION_DATA_PK PRIMARY KEY (sourceEpId, targetEpId, type)
);
CREATE INDEX EM_TRELATION_DATA_IDX01 ON EM_TRELATION_DATA(targetEpId, sourceEpId, type);
CREATE INDEX EM_TRELATION_DATA_IDX02 ON EM_TRELATION_DATA(latestDate);

create table EM_TEMPLOYEE_DATA {
  epId             varchar(100) NOT NULL,
  name             varchar(100),
  orgCode          varchar(100),
  orgName          varchar(100),
  subOrgCode       varchar(100),
  subOrgName       varchar(100),
  deptCode         varchar(100),
  deptName         varchar(100),
  titleCode        varchar(100),
  titleName        varchar(100),
  mail             varchar(100),
  nickName         varchar(100),
  mobile           varchar(100),
  picture          varchar(500),
  CONSTRAINT EM_TEMPLOYEE_DATA_PK PRIMARY KEY (epId)
);

// 데이터 베이스 및 사용자 삭제하기
1. 데이터 베이스 삭제
mysql>drop database emprelation;

2. 사용자 권한 삭제
mysql>revoke all privileges, grant option from emprelation;

3. 사용자 삭제
mysql>drop user 'emprelation'@'localhost';
mysql>drop user 'emprelation'@'%';


// maven 로컬 리파지토리에 저장하기
 mvn install:install-file -DgroupId=mysql \
                         -DartifactId=mysql-connector-java \
                         -Dversion=5.1.15 \
                         -Dpackaging=jar \
                         -Dfile=mysql-connector-java-5.1.15-bin.jar

반응형
Posted by seungkyua@gmail.com
,
반응형
1. NSUserDefault : 싱글톤으로 전역 접근이 가능 : NSMutableDictionary를 이용하여 주로 환경세팅에 사용
2. NSString, NSArray, NSDictionary, NSData 객체의 메소드를 이용 : writeToFile <-> initWithContectOfFile 
3. NSKeyedArchiver <-> NSKeyedUnarchiver
4. CoreData

객체를 저장할려면 NSCoding 프로토콜을 구현해야 함 

- (id)initWithCoder:(NSCoder *)aDecoder;
- (void)encodeWithCoder:(NSCoder *)aCoder; 

도큐먼트 디렉토리 찾기

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory NSUserDirectory, YES);

NSString *dir = [paths lastObject];

도큐먼트에 저장된 파일경로
NSString *file = [dir stringByAppendingPathComponent:@"Personnel.archive"]; 

 
반응형
Posted by seungkyua@gmail.com
,
반응형
[아이폰 애니메이션 방법 3가지]
1. UIView 의 property 를 이용한 애니메이션
2. UIImageView 의 property를 이용한 애니메이션
3. Core Animation 을 이용한 애니메이션


[코어 애니메이션을 적용하기 위한 기본 개념]
1. CALayer 는 UIView 와 같은 기본 판
2. CAAnimation 은 설계를 하고  CALayer 에 적용 

 [CALayer]




반응형
Posted by seungkyua@gmail.com
,
반응형
iTunes U : Standford CS 193    -> 아이폰 유용한 강좌

iPhone 3 : icon.png
iPhone 4 : icon@2x.png    -> 파일명에 @2x 를 붙히면 자동으로 인식

MFi : Made For iPhone -> 애플의 아이폰 액서서리 커넥트 핀 보장
FSK library :  아이폰 오디오 잭으로 연결한 라이브러리

[iPhoneSDK 3.0]
APNS : Apple Push Notification Service
StoreKit : 앱 내에서의 구매 기능
GameKit
AVFoundation
MapKit : 지도 표시
Core Data : 로컬 데이터 베이스

[iPhoneSDK 4.0]
Multitasking
iAd
GameCenter
Calendar

GCC 4.2 :  컴파일
GDC 4.2 :  디버깅

[메모리 관리]
alloc   : 리테인 카운트 1
retain :  리테인 카운트 +1
release : 리테인 카운트 -1
* 클래스 메소드 (+)를 호출하여 생성한 객체는 autorelease 가 자동으로 호출됨
* 콜렉션에 add 된 객체는 +1, remove 된 객체는 -1, 콜렉션 객체가 소멸되면 포함된 객체도 자동 release 됨. 


[Prefix 의 의미]
UI  : UIKit -> 화면
NS : Foundation (Core Service)
CA : Core Animation
CG : Core Graphics
CV : 
MP : 

1. ADC 가입
     - Agent  : 최초 애플과 계약 모든 릴리즈에 책임 (멤버와 어드민 초청)
     - Admin : 개발자 포털 관리, 프로파일 정보 수정가능 (멤버와 어드민 초청)
     - Member : 장치에 사이드로딩 방식으로 설치 가능
2. 인증서 발급 :  맥의 키체인 접근 프로그램을 통해서 인증서 발급 요청서를 받아 ADC 포털에서 요청
3. 인증서 다운로드
4. Xcode Organizer 에 디바이스 등록
5. App ID 만들기
    - URL의 역순으로 만듦
         ex) com.ahnseungkyu.livecoder
    - *문자를 사용하면 다수의 앱을 지칭할 수 있음
        ex) com.ahnseungkyu.*
    - APN, InAppPurchase, Keychain 공유등을 사용하려면 * 없이
    - 삭제불가
6. 프로비저닝 프로파일 만들기
7. 프로비저닝 등록 및 다운로드


 
반응형
Posted by seungkyua@gmail.com
,
반응형
1. 아이폰 디버깅 방법
2. Instruments 도구에서 메모리 누수 찾는 법 
반응형
Posted by seungkyua@gmail.com
,
반응형
테이블명 : tb_emprelation, 컬럼패밀리 source, target, read

hbase(main):001:0>create 'tb_emprelation', {NAME=>'source'}, {NAME=>'target'}, {NAME=>'read'}

source 컬럼패밀리에 mail 컬럼에 값을 넣을 경우
hbase(main):002:0>put 'tb_emprelation', 'source:email', 'skanddh@gmail.com'
반응형
Posted by seungkyua@gmail.com
,
반응형
HBase eclipse 환경 세팅

1. 새로운 워크스페이스를 만든다.
2.  HBaseEmptyWorkspace.tar.gz 을 다운받아 새로운 워크스페이스에  .metadata 드렉토리를 푼다.
3. 서브버전을 eclipse software install로 설치한다.  (SubClipse Site 에 것을 설치하면 됨)
4. Subclipse 를 설치하면 CollabNet Subversion 을 다운받아 JavaHL을 추가로 설치한다.
    CollabNet Subversion은 /opt/subversion 경로로 설치된다.
5. SVN Repositoty 에서 http://svn.apache.org/repos/asf/hbase/ 를 Root URL로 세팅한다.
6. eclipse 의 Project -> Build Automatically 를 해제.
7. checkout 으로 New Project Wizard 를 선택 ->  Java Project -> HBase-trunk로 프로젝트 이름을 세팅
8. 디폴트 아웃풋 폴더로 PROJECT_HOME/build/eclipse-classes 로 폴더를 생성하여 지정 

9. cmd 로 워크스페이스의 HBase-trunk 폴더로 이동하여 mvn eclipse:eclipse 를 치면 .project 파일이 다시 생성됨


Ant 스트립트

<project name="EmpRelationHadoop" default="compile">

<property name="classes.dir" value="build/classes"/>

<property name="jar.dir" value="build/jar"/>

<property name="library.dir" value="/Users/skanddh/.m2/repository"/>


<path id="libraries">

        <fileset dir="${library.dir}">

            <include name="**/*.jar"/>

        </fileset>

    </path>

    <target name="clean">

        <delete dir="build/classes"/>

    <delete dir="build/jar"/>

    </target>


    <target name="compile">

        <mkdir dir="${classes.dir}"/>

        <javac srcdir="src" destdir="${classes.dir}" classpathref="libraries"/>

    </target>


    <target name="jar" depends="compile">

        <mkdir dir="${jar.dir}"/>

        <jar destfile="${jar.dir}/EmpRelationHadoop.jar" basedir="${classes.dir}">

            <manifest>

                <attribute name="Main-Class" value="hbase.RelationCalculator"/>

            </manifest>

        </jar>

    </target>


    <!-- target name="run">

        <java jar="${jar.dir}/EmpRelationHadoop.jar" fork="true"/>

    </target -->


</project>




반응형
Posted by seungkyua@gmail.com
,
반응형
ssh 키 만들기
localhost:~ skanddh]$ssh-keygen -t rsa -N ""

[출처] ssh 자동 로그인 관련|작성자 김원기


localhost:~ skanddh]$cd .ssh

공개키 서버에 복사하기
localhost:.ssh skanddh]$scp id_rsa.pub <id>@<server>:.ssh/authorized_keys

alias 등록하기
localhost:~ skanddh]$vi .profile

alias ssh01='ssh <id>@<server>'

localhost:~ skanddh]$touch .profile


[서버에서 rsa 키를 생성하여 여러 클라이언트가 접속하게 배포할려면]
1. 서버의 id_rsa.pub 를 authorized_keys 로 복사한다.
2. 클라이언트에 서버의 id_rsa 개인키를 가져온다. 
반응형
Posted by seungkyua@gmail.com
,
반응형
hadoop 의 구성을 보면 Namenode 와 Datanode 가 있다. Namenode 를 일종의 마스터로 보면 Datanode 는 슬레이브로 볼 수 있으며 Namenode 와 Datanode 사이에는 주기적으로 통신을 한다.

Datanode 가 파일 시스템 정보나 기타 헬스체크를 주기적으로 Namenode 로 보내는데 이 때의 통신방법은 RPC 이다.
Namenode 가 기동 될 때 RPC Server 가 같이 기동되며 Namenode 는 DatanodeProtocol 인터페이스를 구현하였기 때문에 Datanode 가 이 메소드를 호출하는 RPC 통신을 하게 된다.

RPC 통신 구현 방법은 간단한데 Datanode 가 적합한 메소드(DatanodeProtocol 메소드 중의 하나)를 호출하면 ipc.Client 클래스를 이용하여 메소드 명,  파라미터 갯수, 루프를 돌면서 (파라미터 타입, 파라미터 값) 을 보내면 -RPC.Invocation클래스를 이용하면 관련 정보를 순서대로 보낸 - Namenode 는 ipc.Server 를 통해서 메소드명, 파라미터 갯수, 루프를 돌면서 (파라미터 타입, 파라미터 값) 을 받아 - RPC.Invation클래스를 이용하면 순서대로 받을 수 있다 - Namenode 의 적합한 메소드(DatanodeProtocol 메소드 중의 하나)를 invoke 한다.
invoke 후에는 리턴 값을 받아서 ipc.Server 를 통해 리턴 클래스명, 리턴 클래스의 값을 Datanode 에 보낸다.
Datanode 는 ipc.Client 를 통해서 리턴 클래스명, 리턴 클래스의 값을 받아 처음에 호출한  메소드의 결과값으로 리턴된다.

RPC의 핵심은 Proxy 클래스와 Reflection API 를 사용한다는 것. 
반응형
Posted by seungkyua@gmail.com
,
반응형
Datanode 는 Proxy.newProxyInstance(...) 로 DatanodeProtocol 인터페이스를 구현한 Proxy 객체를 구해서
다른 데이터노드와 통신한다.

이렇게 되면 DatanodeProtocol 의 메소드를 호출 할 때 마다 Proxy 객체 생성시에 저장된 InvokerHandler.invoke 메소가 호출된다. 결국 중요한 것은  InvokerHandler.invoke  메소드이다. (실제 작업하게 되는 메소드)

ObjectWritable value = (ObjectWritable) CLIENT.call(new Invocation(method, args), address);
return value.get();

Invocation 클래스는 대충 호출할 메소드와 파라미터를 저장한 것이라고 하면 CLIENT 클래스가 중요하다.

CLIENT 가 call 을 호출하면 내부적으로는 다음과 같은 진행을 한다.
1. 쓰레드 타입의 Connection 객체 생성하여 재사용을 위해 Hashtable 에 저장하고 쓰레드를 시작한다.
    Connection 객체에는 InetSocketAddr을 이용하여 DataInputStream 과 DataOutputStream 을 가지고 있다.
2. Call(param) 으로 call 객체를 파라미터만 저장하여 생성
3. call 객체를 Hashtable 에 저장하고 out.writeInt(call.id); call.param.write(out) 와 같이 파라미터를 보낸다.
4. Connection 쓰레드의 run 이 끝나서 결과를 받으르 때까지 타임아웃만큼 기다린다.  call.wait(timeout);
5. Connection 쓰레드의 run 메소드에서 id = in.readInt(); 후 Hashtable 의 call 객체를 remove 한다.
6. in.readBoolean(); 으로 에러여부를 읽고 value.readFields(in); value 값을 읽어 들인다.
7. call 객체에 value 를 세팅하고 call 객체의 notify() 를 호출한 후 Connection 쓰레드를 Hashtable에서
    제거한 후 쓰레드를 종료한다.
반응형
Posted by seungkyua@gmail.com
,