2013. 7. 29. 16:09

git config --global user.name [user name]    작업자 이름 설정
git config --global user.email [user email]   작업자 이메일 설정
git config --global --list                              설정값(이름 및 메일등 ) 확인


git init                                                                git 저장소(repo) 만들기

 

git remote add [remote name] [remote addres]  별명으로 원격지주소를 저장
git remote rm [remote name]                             별명의 원격지를 삭제
git remote rename [remote name] [new name]   별명을 새로운 별명으로 변경

 

git fetch [remote name]                                     remoet의 모든 정보를 가져옴(모든 branch)

 

git pull                                                                저장소에서 변경 내용 가져오기

 

git push                                                                 commit들을 master 저장소에 저장

git push [remote name] [localbranch name] local branch의 내용을 업데이트

git push [server] tag [TAG]                                  server에 tag 전송
git push [server] --tags                                     변경된 모든 tag 전송
git push [server] [L.B]:[R:B]                                server 에 local branch 를

                                                                               -Remote branch이름으로저장

 

git tag [TAG NAME]                                              저장소에 태그를 붙인다.
git tag                                                                  태그목록을 본다.

git branch [branch name]                                   저장소의 branch name으로 branch를 만든다.
git branch                                                           branch 목록을 본다.
git branch -a                                                      현재 생성된 모든 local branch와

                                                                             reomte branch 확인

 

git checkout [branch name]                              다른 브랜치로 전환
git checkout -b [branch name]                         branch 생성
git checkout [file or folder]                            git repo 기준 마지막 commit 상태로 돌림
git checkout [id] [file or folder]                     git repo 기준 id에 해당하는 commit 상태로 돌림
git checkout -f              아직 commit 되지 않은 working tree와 -index 수정정사항 모두 사라짐

 

git merge [branch name]                                 branch의 내용을 가져와 합침

git add [file or folder]                                   git에 file 또는 folder 추가
git add *                                                           git에 모든 file 또는 folder 추가

git rm [file or folder]                                     git 파일 또는 폴더 제거

git status                                                         현재 git 상태 보기
git commit -m [message]                                message를 repo에 저장

git diff                                                             local과 remote의 차이점을 보여줌

git remote                                                        remote서버 확인



출저: http://www.dreamy.pe.kr/zbxe/CodeClip/95414

'2019년 이전 정리 > GIT' 카테고리의 다른 글

[GIT 사용법] Git Tutorial  (0) 2013.07.29
[GitHub] Create Repository & Push an existing repository  (0) 2013.06.26
Posted by hoonihoon
2013. 7. 25. 23:14

2011년 6월 15일 수요일

안드로이드 페이스북(facebook) 연동 #1

안드로이드에서 페이스북을 연계하여 글 작성하는 방법에 대해 정리하였습니다.

1. 페이스북 계정 생성및 앱아이디 얻기
2. 해시키 생성하기
3. 샘플 예제 설치하기
4. 샘플 예제 변경하여 포스트 하기

먼저 페이스북 연계방식은 OAuth 방식입니다.
트위터는 XAuth 방식을 지원하여 로그인 창을 앱마다 꾸밀수가 있는데 페이스북은 OAuth방식만 지원되기 때문에 웹뷰로 페이스북에서 서비스하고 있는 로그인창에서 로그인을 해야 됩니다.
폰에 facebook 기본 어플이 있다면 SSO를 지원하기 때문에 별도의 로그인창없이 버튼하나로 연계가 가능합니다.

1. 페이스북 계정 생성및 앱아이디 얻기

 - facebook.com 으로 접속하여 계정을 생성합니다.

 - 로그인 하고 맨아래에 '개발자' 링크를 클릭합니다.

 - 맨위 탭에 '내앱'을 클릭합니다.

 - 좌측 상단의 새 앱만들기 버튼을 클릭하여 앱을 만들면 앱ID가 생성됩니다.
   * 어플에 페이스북을 연계하기 위해서 앱에 이 앱ID를 넣어 줘야 합니다.

 - 오른쪽에 '설정관리'를 클릭하고 들어갑니다.
 - 좌측메뉴에 '모바일 및 기타 기기' 를 클릭하면 맨아래 안드로이드 해시키를 넣어주는 부분이 있습니다. 
 위에 설정하였던 SSO 기능을 사용하려면 해시키를 생성하여 여기에 넣어주고 저장하면 됩니다. 
 SSO기능을 사용하지 않으려면 비워두어도 됩니다.

2. 해시키 생성하기

 - http://developers.facebook.com/  페이스북 개발자 페이지의 왼쪽메뉴에서 '모바일앱' 을 클릭합니다.

- 중간에 Android 개발 정보에 보면 해시키 생성 방법이 있습니다.

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore 
| openssl sha1 -binary
| openssl base64

 위 명령어를 보면 keytool과 openssl 이 있습니다.
 keytool은 jre의 bin폴더에 있고 openssl은 따로 설치를 해줘야 합니다.

 * openssl 설치
 http://gnuwin32.sourceforge.net/packages/openssl.htm 접속합니다.
Complete package, except sources 를 다운받아 설치합니다.

위 명령어를 실행하기위해 path 에 jre 의 bin폴더와 openssl 설치한 bin폴더를 넣어 줍니다.

 - 위 명령어를 보면 -keystore ~/.android/debug.keystore 부분이 나옵니다.
  어플 개발 완료후 생성할 키 값입니다.
  앞의 androiddebugkey 은 별칭이고 ~/.android/debug.keystore 는 경로입니다.
  윈도우로 개발하면 ~/.android/debug.keystore -> C:\android\keysotre 이런식으로 됩니다.
  위 값을 잘못넣어줘도 해시키가 생성이 되니 정확히 넣어줘야 올바른 해시키가 생성이 됩니다. 몇번 잘못 넣어줘서 굉장히 고생한 부분입니다.  연계를 안하려고 까지 하다가 에러 부분을 찾았습니다. --;;
 - 생성한 해쉬키값을 위의 페이스북 페이지에 넣어주고 저장합니다.


3. 샘플 예제 설치하기는 다음 포스트로~

댓글 6개:

  1. 안녕하세요. 블로그 잘 보았습니다.

    근데 해시값이 문젠지 모르겠는데요..

    한번 로그인 후 로그인 버튼 창 아래에 Login Failed: invalid_key 라고 뜨는 데요...
    해시값 생성 할때

    keytool -exportcert -alias androiddebugkey -keystore C:\android\keystore
    | openssl sha1 -binary
    | openssl base64

    이런 식으로 등록 했는데.. 이거 때문에 문제가 있는건가요??

    답글
  2. 제가 블로그에 조금 햇갈리게 적어놓았네요. ;;
    C:\android\keystore 는 폴더를 넣은신것 같습니다.
    파일 이름까지 넣으셔야 되고 올바로 넣으셨다면 비밀번호를 다시 물어봅니다. 
    이렇게 하시면 잘 되실꺼에요^^

    답글
  3. 안녕하세요.. 답글 보고 수정하여...

    해시값 생성하는 걸 

    keytool -exportcert -alias androiddebugkey -keystore C:\Documents and Settings\Administrator\.android\debug.keystore
    | openssl sha1 -binary
    | openssl base64

    이런식으로 했는데도.. 아닌거 같은데요.. keystore 경로를 잡아 주라는 뜻이 아니였나요????

    답글
  4. 안녕하세요. keystore경로에 공백이 들어가 있으면 안됩니다.
    따움표로 묶어서 넣어주세요^^
    "C:\Do~~" 이런식으로요~

    답글
  5. 안녕하세요 해시키 구하는 방법에서요

    "C:\program Files\android\debug.keystore" 이렇게
    해주었는데... 파일이 없다고 나오는데
    android 폴더가보니깐 

    android-sdk 이 폴더만 있는데.. debug.keystore라는건 없네요.. 
    그래서 폴더를 debug.keytore 이 이름으로 만들고 실행하니깐 폴더가 있지만 비어있다고 나오는데 

    어떻게 해야하나요 ㅠ

    답글
  6. 안녕하세요.
    윗분의 debug.keystore 는 마켓에 앱등록시 필요한 keystore 파일입니다.
    먼저 저 키 파일을 생성후 그 파일의 경로를 적어주셔야 합니다.


'2019년 이전 정리 > Facebook API' 카테고리의 다른 글

Facebook Login Flow for Android  (0) 2013.06.23
Posted by hoonihoon
2013. 6. 26. 09:56






Posted by hoonihoon
2013. 6. 23. 21:48

https://developers.facebook.com/docs/howtos/androidsdk/3.0/login-with-facebook/


perfect code 


I'm trying Facebook Android SDK 3.0 tutorial but I'm facing a problem. When I clicked the login button and logged in using my facebook account, im expecting to see my button's text to change to logout as what the tutorial (http://developers.facebook.com/docs/howtos/androidsdk/3.0/login-with-facebook/) states but it did not happen. I added log to see if it passes by onActivityResult as suggested by thisquestion. Here's my log:

MainFragment   Unknown State: OPENING
MainFragment   onActivityResult
MainFragment   Logged out...

Please help. I don't know where did I get wrong and what to do next?

MainFragment.java

public class MainFragment extends Fragment{

    private static final String TAG = "MainFragment";
    private UiLifecycleHelper uiHelper;
    private Session.StatusCallback callback = new Session.StatusCallback() {
        @Override
        public void call(Session session, SessionState state, Exception exception) {
            onSessionStateChange(session, state, exception);
        }
    };

    private void onSessionStateChange(Session session, SessionState state, Exception exception) {
        if (state.isOpened()) {
            Log.i(TAG, "Logged in...");
        } else if (state.isClosed()) {
            Log.i(TAG, "Logged out...");     
        } else {
            Log.d(TAG, "Unknown state: " + state);
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        uiHelper = new UiLifecycleHelper(getActivity(), callback);
        uiHelper.onCreate(savedInstanceState);
    }

    @Override
    public void onResume() {
        super.onResume();

        // For scenarios where the main activity is launched and user
        // session is not null, the session state change notification
        // may not be triggered. Trigger it if it's open/closed.
        Session session = Session.getActiveSession();
        if (session != null && (session.isOpened() || session.isClosed()) ) {
            onSessionStateChange(session, session.getState(), null);
        }

        uiHelper.onResume();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        uiHelper.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "onActivityResult");
    }

    @Override
    public void onPause() {
        super.onPause();
        uiHelper.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        uiHelper.onDestroy();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        uiHelper.onSaveInstanceState(outState);
    }   

    @Override
    public View onCreateView(LayoutInflater inflater,
            ViewGroup container, 
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.main, container, false);      

        LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);
        authButton.setFragment(this);    

        return view;
    }
}

MainActivity.java

public class MainActivity extends FragmentActivity {

    private MainFragment mainFragment;
    private static final String TAG = "MainActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (savedInstanceState == null) {
            // Add the fragment on initial activity setup
            mainFragment = new MainFragment();
            getSupportFragmentManager()
            .beginTransaction()
            .add(android.R.id.content, mainFragment)
            .commit();
        } else {
            // Or set the fragment from restored state info
            mainFragment = (MainFragment) getSupportFragmentManager()
            .findFragmentById(android.R.id.content);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.facebook.widget.LoginButton
        android:id="@+id/authButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
    />

</LinearLayout>


'2019년 이전 정리 > Facebook API' 카테고리의 다른 글

페이스북 설정 방법 keystore  (0) 2013.07.25
Posted by hoonihoon
2013. 5. 21. 16:31


eclipse에서 jar로 제공되는 외부 라이브러리의 소스가 궁금할때가 있다.


이때, 소스상에서 jar 파일 내의 .class 파일을 열게 되면



제대로 읽을 수 없도록 되어 있다. 뭐.. Attach Source 어쩌구 저쩌구..


이럴때 아래와 같은 방법을 사용하면 간단하게 볼 수 있다.



1. 첨부된 2개의 파일을 다운받는다.


2. jadnt158.zip을 압축을 푼다.


3. 기억할 수 있는 경로에 압축을 푼다.


4. net.sf.jadclipse_3.3.0.jar 파일을 본인이 사용하는 eclipse 폴더내의 plugins 폴더에 넣는다.


5. 이클립스를 재시작한다.


6. windows - preferences 에 가보면 java 항목에 JadClipse 라는 항목이 생겨 있다.


7. 맨 위의 Path to decompiler에 3번에서 압축을 푼 경로를 입력하고 jad.exe를 뒤에 붙인다.

ex) C:\jadnt158 에 압축을 풀었다면 C:\jadnt158\jad.exe 를 입력한다.





8. windows - preferences - General - Editors - File Associations 에서

*.class 에 해당하는 editor가 JadClipse Class File Viewer (default) 로 설정되어 있는지 확인한다.





net.sf.jadclipse_3.3.0.jar


jad.exe


자 이제 jar 파일 내의 .class 파일을 더블클릭해서 열어보면...


알아서 디컴파일해서 소스 형태로 보여줘서 잙 읽을수 있게 된다.ㅋㅋ

Posted by hoonihoon
2013. 5. 4. 10:57

file - scripts - export layer to file

대박 기능!

★ 갯수가 많다면 그룹화해서 나누면 편리하다.

alt +  e 그룹화하기

'2019년 이전 정리 > 포토샾' 카테고리의 다른 글

포토샾 애니메이션 좌표구하기  (0) 2013.05.04
Posted by hoonihoon
2013. 5. 4. 10:53

1. 그림파일을 클릭하고 alt 를 눌러 복사한다.

2. file -> scrip - xy  를 누르면 포토샾 history 에 좌표 표시된다.

Posted by hoonihoon
2013. 4. 11. 15:19

작성자: Yonghwa Jee ( jeeterm@empal.com ). Copyright by Telcom Co., Ltd. ( http://www.talknow.co.kr )
작성일: 2010.9.3

IM ( Instant Messaging) 표준화 동향XMPP
============================================


1. 개요
--------

* H.323 : AT&T 등의 TelCo( Telecommunication Company: 통신회사) 들이 모여서 Internet 상에서 PC나 인터넷폰끼리
음성통화(일명: Voice over Internet Protocol 줄여서 VoIP )하기 위해 표준화한 통신프로토콜 .

* SIP : H.323 은 쓸데없이 복잡하므로 IBM,MS 등의 컴퓨터관련 회사들이 주축이 되서 만든 VoIP 프로토콜


위 두 표준안 이후

SIP 표준안을 IM을 포함시키는 표준안으로 확장시켰는데 이름하여 SIMPLE, the Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions 이다.

즉, IM 관련 대표적인 두 프로토콜 중 하나인 SIMPLE 은 VoIP 표준인 SIP에서 확대 발전되어 탄생하였고 그 주동자는 IBM,MS 진영이다.

IM의 나머지 대표적인 프로토콜은 XMPP 로서 이 표준안의 시초는
Jeremie Miller 라는 좀 똘똘한 친구가 1998년 jabber테크놀로지라는 회사에서 개발을 시작하여 1999년 1월4일
jabberd ( http://en.wikipedia.org/wiki/Jabberd14 ) 라는 첫 메신저 서버 버전을
Release 하면서 시작되었다. 이 jabber 를 HP, Apple, Google, Cisco 진영에서 적극 지원해서 XMPP 라는 IM 표준안( http://xmpp.org ) 을 만들어 냈다.

참고로 jabber테크놀로지라는 회사는 ( 구: www.jabber.com ) Cisco 회사에서 M&A로 합병하였습니다.

2. XMPP의 특징(Extensible Messaging and Presence Protocol )
-----------------------------------------------------------
XMPP 는 jabber 라는 IM의 프로토콜로부터 시작하여 확장되었지만 네트웍 관련한 훌륭한 표준 Multi 플랫폼 프레임워크로써
IM뿐만 아니라 온라임게임은 물론 거의 모든 네트웍 관련 프로그램에 사용할 수 있다( http://www.ibm.com/developerworks/kr/library/x-xmppintro/).

XMPP 의 가장 큰 특징은 Extensible Markup Language (XML) 언어로 서버와 Client간에 통신한다는 것이다.

XML 언어가 무엇인가?

html 로 대표되는 www 홈페이지언어는 편리하지만 www를 제외한 다른 여러 다양한 응용에는 부족하고 한계가 있었다.

그래서 좀 의식있는 사람들이 모여서 머리를 굴려 만든 언어가 XML 인데

XML을 한마디로 표현한다면 Tag(태그)언어라 할수 있다. 즉, 모든 정보를 < > 이 태그로 표시하는 언어이다.
html 도 태그 <> 로 표시하는 언어의 일종이므로 XML언어의 일종이라고 할 수 있다.
즉, xml 언어는 html을 포함하는 확장성이 아주 좋은 언어인 것이다.

3. 시스템(플랫폼)별 추천할만한 XMPP 의 프레임워크는 ( 오픈 source 위주로..) ??
-----------------------------------------------------------------------------

3.1 서버쪽 http://xmpp.org/xmpp-software/servers/
---------

3.1.1 Linux 와 C 기반

위에서 언급했듯이 원조인 jabberd14 가 있다.

3.1.2 Java 기반

jive 소프트웨어 회사( http://www.jivesoftware.com/ )에서 open source 로 공개한
openfire ( http://www.igniterealtime.org/projects/openfire/index.jsp )가 있다.

3.2 Clinet 쪽 http://xmpp.org/xmpp-software/clients/
------------

3.2.1 PC 기반

PC용으로는 OS에 제약을 덜받는 Multiplatform 용 XMPP Client로는

jive 소프트웨어 회사( http://www.jivesoftware.com/ )에서 open source 로 공개한

spark ( http://www.igniterealtime.org/projects/spark/index.jsp ) 가 있다.

3.2.2 Android 기반
jive 소프트웨어 회사( http://www.jivesoftware.com/ )에서 open source 로 공개한 spark 에 사용된
XMPP framework 을 따로 Library 화 한것이 smack API ( http://www.igniterealtime.org/projects/smack/index.jsp ) 이다.
이 smack 을 이용하여 안드로이드 XMPP 메신저를 만든것이 yaxim ( http://github.com/pfleidi/yaxim) 이다.


3.2.3 Apple Iphone/IPad 기반

공개된 괜챦은 Apple 용 xmpp Framework은 http://code.google.com/p/xmppframework/ 이 있다.
이것은 네트웍부분은 CFNetwork Framework ( http://developer.apple.com/mac/library/documentation/Networking/Conceptual/CFNetwork/Introduction/Introduction.html )
를 사용하고 XML 엔진은 kissxml ( http://code.google.com/p/kissxml/) 을 사용한 것 같다.

xmppframework 를 이용하여 XMPP 메신저를 만들어 상용으로 AppleStore 에 등록한 회사가 있다.

crosstalk라는 제품이다(아이폰용 상용 jabber client : http://www.portablek.com/home/mobile-apps/crosstalk : xmppframework 를 이용한 상용제품).

------------------ 끝 -----------------------------------------

Posted by hoonihoon