본문 바로가기

6. With IT

UI와 Handler 출처 : http://kyleslab.tistory.com/41안드로이드는 스윙과 마찬가지로 싱글 쓰레드 GUI 모델이 적용되어 있다. 즉 UI를 그리거나 갱신하는 쓰레드는 하나뿐이라는 것이다. 그 쓰레드는 바로 안드로이드의 주요 컴포넌트들이 실행되는 "main" 쓰레드이다. 모든 UI 관련 코드는 main 쓰레드에서 실행된다. 스윙에서 응답없음(unresponsive) 현상을 막기 위해 백그라운드에서 돌아가는 worker 쓰레드를 만든 것처럼, 안드로이드에서도 오래 걸리는 작업은 UI 쓰레드(= main 쓰레드)에서 처리하지 말고 별도의 쓰레드를 만들어 처리해야 한다. 그렇지 않으면 화면을 갱신하고자 하는 모든 코드는 block 당하여 ANR이 발생할 것이다. 오래 걸리는 작업에는 무엇이 있나? - 파.. 더보기
FragmentPagerAdapter, FragmentStatePagerAdapter의 사용 Fragment와 VIewPager를 사용하다 헛갈리는 것이 있어 포스팅한다......ㅡㅡ 참고:http://www.truiton.com/2013/05/android-fragmentstatepageradapter-example/ [dynamic한 fragment를 쓸 때에는 FragmentStatePagerAdapter] fragment_pager.xml MainActivity package com.truiton.fragmentstatepageradapter; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v.. 더보기
GCM 푸시서버연동 설정 - Server 지난 시간에 이어, 이번에는 Server 설정을 해보자!! 1. 서버 구현시, 추가로 필요한 라이브러리들 2. 프로젝트 생성 후 위 라이브러리들을 추가 3. 소스코드 추가 및 수정 public class Main { public static void main(String[] args) { // 프로젝트 서버 API key 입력 Sender sender = new Sender("프로젝트 서버 API key 입력"); // GCM으로부터 발급받은 단말기 RegID 입력. String regId = " GCM으로부터 발급받은 단말기 RegID 입력."; Message message = new Message.Builder().addData("msg", "push notify") .build(); List lis.. 더보기
GCM 푸시서버연동 설정 - Client 참고 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=0qCVX&articleno=11 작성시기 : 2015.04.10[간략소개] 출처 : http://musasin84.blog.me/60212095039 GCM의 그림 Google에서 제공하는 메시지 발송 서비스이다. Google Cloud Messaging 의 약어로, 기존에는 C2DM이었으나 C2DM 서비스를 종료하고 GCM으로 바꾸었다. 이 서비스를 이용하기 위해서는 ANDROID Froyo (API Lev 8) 이상이 되어야 한다. 메시지는 최대 4KB 크기로 보낼 수 있으며, 이 서비스를 통해 카카오톡, 채팅, 알림 등의 서비스 구현이 가능하다. 100%의 성공률 수신은 장담할 수 없지만 과거 C2D.. 더보기
Java8 람다식 람다식(lambda expression) [정의]- 프로그래밍에서 식별값 없이 실행할 수 있는 함수 표현 방법 [지원 언어]- Ruby, C#, Python에서 이미 사용중 [장점]- 대리자(Delegate)와 제네릭 메서드의 복잡한 식을 간결하게 줄여줄 수 있다.- 연산자를 이용하여, 익명 메서드(Anonymous Method)의 여러줄의 코드를 단 한줄의 코드로 줄여줄 수가 있다. [문법](인자 목록) -> { 구문 } [사용 예 1]Java 7public class AsyncHelloWorld { public static class HelloWorld implements Runnable {@Overridepublic void run() { System.out.println("Hello World!".. 더보기
TDD(Test Driven Development) 정의"프로그램을 작성하기 전에 테스트를 먼저 작성하는 것"==> "업무 코드를 작성하기 전에 테스트 코드를 먼저 만드는 것!" [일반적인 개발 프로세스] 단점 : 테스트를 통해서 원하는 결과가 나오지 않았을 때 처음 소프트웨어 디자인을 다시 수정해야 될 수도 있음. [TDD 프로세스] TDD의 경우 테스트 코드를 작성한 뒤에 코드를 작성.==> 보다 정확한 프로그래밍 목적을 디자인 단계에서 반드시 미리 정의해야만 하고 또 무엇을 테스트해야 할 지 미리 정의해야함. 장점1. 보다 튼튼한 객체지향적인 코드 생산 가능 - 테스트 코드를 먼저 작성함으로써 하나하나의 기능들에 대해서 철저히 구조화 시켜 코드를 작성하므로써 나도 모르게 디자인 패턴들을 하나하나 적용하고 인터페이스들을 이용해서 느슨한 결합을 실현시키.. 더보기
개발 도구 설명 출처 : http://happystory.tistory.com/89#recentTrackback CI(Continuous Integration) 지속적인 통합--------------------------------[정의]- 지속적으로 퀄리티 컨트롤(품질 관리)을 적용하는 프로세스를 실행하는 것.- 모든 개발을 완료한 뒤에 퀄리티 컨트롤을 적용하는 고전적인 방법을 대체하는 방법으로서 소프트웨어의 질적 향상과 소프트웨어를 배포하는데 걸리는 시간을 줄이는데 초점- 초기에 그리고 자주 통합해서 통합 시 발생하는 여러가지 문제점을 조기에 발견, 피트백사이클을 짧게 하여 소프트웨어 개발의 품질과 생산성을 향상시키는 것 [시스템 적용의 필요성]- 적용 전 CI시스템을 구축하지 않은 경우, 각 개발자가 개발 후, 대.. 더보기
ScalableLayout 디바이스 크기와 레이아웃에 상관없이 일정한 크기를 유지시키기 위해 사용되는 라이브러리 com.ssomai.android.scalablelayout.ScalableLayout[출처 : https://github.com/ssomai/ScalableLayout/blob/master/README_ko.md]단 한번의 코딩으로 태블릿을 포함한 모든 화면에서 정확한 UI를 표현하고 싶다면! ScalableLayout은 화면의 크기가 매우 다양한 안드로이드 폰과 태블릿 환경에서 일관성 있는 UI를 표현하기 위한 방법 중의 하나입니다. ScalableLayout은 android에서 widget을 감싸는 용도로 쓰이는 FrameLayout 이나 LinearLayout 대신 이용될 수 있는 Layout 입니다. UI를 구.. 더보기
EventBus기법 http://greenrobot.github.io/EventBus/ Activity와 Activity, 혹은 Activity와 Fragment간 데이터 교환시 좀더 심플하고 안정적(?)으로 처리할 수 있게 많들어 놓은 '라이브러리' *간단 사용법1. Define an event public class MyEvent {}2. Register subscriber EventBus.getDefault().register(this);3. Post an event EventBus.getDefault().post(event);4. Receive the event public void onEvent(MyEvent event); [Github] https://github.com/greenrobot/EventBus [Ex.. 더보기
Meterial Design Example 역시 안드로이드는 거지같다.....뭐 한방에 되는게 없냐....삽질하다 포스팅해둔다. 0. [Android SDK Manager] open -> Extras에 Android Support Repository(v11) / Android Support Library(v21.0.3) Update1. 다운로드 소스 : https://github.com/kanytu/android-material-drawer-template2. 소스 및 appcompat-v7 import===============================================================================appcompat-v7의 Build Target을 최신(5.0.1)로 설정 및 project.propert.. 더보기
AppDelegate에서 ViewController의 Method사용하기 출처 : http://stackoverflow.com/questions/18950670/calling-uiviewcontroller-method-from-app-delegate/18950742#18950742?newreg=8dea532ee4b542efa43cf52ad12a3751 For example: In your ViewController- (void)viewDidLoad { [super viewDidLoad]; AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; appDelegate.myViewController = self; }And in your AppDelegate:@class MyViewController; @in.. 더보기
안드로이드 Affinity 출처 : http://blog.naver.com/dolking1234?Redirect=Log&logNo=70139143283 안드로이드는 액티비티 관리를 스택의 형태로 한다. 기본적으로 먼저 호출된 액티비티는 나중 호출된 액티비티가 종료되지 않으면 종료가 될 수 없다. 따라서 이런 형태로만 액티비티를 관리해야 한다면 상당히 불편하고, 비효율적이 될수 밖에 없다. 안드로이드는 이러한 문제를 지원하기 위해 FLAG_ACTIVITY라는 속상값을 지원한다. 이 속성을 상황에 맞게 잘 활용한다면, 액티비티 관리가 좀더 효율적으로 이루어질 수 있다. 이 속성 중 몇가지를 살펴보자. 1. FLAG_ACTIVITY_SINGLE_TOP 이전 포스트에서도 나왔던 속성 값이다. 이 속성은 foreground 상태에 액티비티.. 더보기
안드로이드 어플리케이션 기초적인 내용들 출처 : http://wikiware-textcube.blogspot.kr/2009/12/4-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B8%B0%EC%B4%88.html 4. 안드로이드 어플리케이션 기초4.1 안드로이드 아키텍처 (1) 안드로이드 어플리케이션의 특징 안드로이드 어플리케이션은 다음과 같은 특징을 가지고 있습니다. 경계가 없는 어플리케이션 : 어플리케이션은 표준 API(Application Programming Interface)를 통해 핵심(core) 모바일 기능에 접근 가능합니다. 원하는 경우 어플리케이션은 자신의 기능을 다른 어플리케이션에게 .. 더보기
MQTT란??? 출처 : http://helloworld.naver.com/helloworld/1846Facebook은 2011년 3월 그룹 메시징 앱을 개발한 Beluga를 인수하여 같은 해 8월 Facebook Messenger 앱을 출시하였습니다. Messenger 앱을 출시하며 자사 블로그 'Facebook Engineerings Notes'에 Beluga를 만들었을 당시의 배경을 다음과 같이 소개하고 있는데요. 더보기
extern C문제 출처 : http://blog.naver.com/hermet?Redirect=Log&logNo=87864741 와 같이 기존 표준 라이브러리 헤더 파일을 열어보면, #ifdef __cplusplusextern "C" {#endif 와 같은 구문을 본 적이 있을 것입니다. 딱 보면 예상할 수 있겠지만, c++ 일 경우 이후 구문들은 extern "C" 선언과 함께 스코프로 지정되는 것이겠죠. stdio.h 와 같이 C언어로 작성된 부분들을 c++로 컴파일 할 경우 C 언어 구역임을 명시하는 것입니다. 실제로 extern "C" 선언은 필수입니다. 선언하지 않을 시 c언어 함수를 C++ 에서 사용할 경우 링크 시 오류가 발생합니다. //print.c #include void print() { printf(".. 더보기
Xcode Debug option Debug창(Command + 6)에서 왼쪽 하단의 + 선택 Add Exception Breakpoint - Exception All => Done Add Symbolic Breakpoint - Symbol에 malloc_error_break 입력 => DoneAdd Symbolic Breakpoint - Symbol에 objc_exception_throw 입력 => Done Product - Scheme - Edit Scheme - Run 프로젝트명.app 선택 - Arguments - Environment Variables 의 + 선택name : NSZombieEnabled/ Value : YESname : NSDebugEnabled/ Value : YES Product - Scheme - Run 프.. 더보기
시너지프로그램 맥10.8 윈도우 7 http://synergy-foss.org/ko-kr/download/?list 여기로 가서 윈도우 버전 32bit or 64bit맥 버전 10.8 을 다운받아 설치하면 된다. 이 때, 중요한 것이 나는 서버컴:윈도우 7 64bit 클라이언트 맥10.8 이었는데,윈도우 64bit용을 설치하니, 자꾸 ipc connection error와 갖가지 에러가 난무하였는데, 결론은 본인의 윈도우7을 64bit로 설치하였다고 하더라도 반드시 32bit용 시너지를 받아서 설치해야한다.그래야지 접속이 잘 된다.....(이걸로 5시간 해멨다....썅..........ㅡㅡ;;;;;) 명심해라~~ 더보기
Xcode에서 SVN사용법 Xcode에 익숙하지 않은지라, iOS상에서 SVN을 사용하려다보니, 참 많은 삽질이 필요한 것 같다.....ㅡㅡ;; 여튼, 요는 이렇다. 1. 해당 svn서버로 접속- Xcode의 우측 상단에 Organizer를 눌러 Repositories로 들어가 원하는 서버로 ID와 PW를 넣고 접속. 2. (최초 SVN서버에 올리는 것이라면, 기존에 있는 폴더를 SVN서버에 Import시키고) 이미 checkout받을 폴더가 있다면 해당 폴더를 자신이 원하는 폴더로 드래그 앤 드롭(예 : 바탕화면) 3. Export할 것인지, Checkout할 것인지 물어보는데, 여기서 Checkout 4. 해당 프로젝트를 오픈. 5. 이 상태에서 소스코드 변경후 해당 파일을 우클릭하여 Source Control에 들어가보면, .. 더보기
Soap코딩 - iOS 출처 : http://abhicodehelp.blogspot.kr/2010/12/handling-soap-with-iphone.html Handling SOAP with iPhoneHi All, I am writing this blog to help you all in Parsing XML(SOAP) response. In coming sections I'm gonna give you basic steps to parse XMLResponse and later with some extremely useful links to make your work a piece of cake when it comes to handling SOAP in iPhone. Basic Steps (This are the ste.. 더보기
RESTfull서비스? 출처 : http://blog.naver.com/PostView.nhn?blogId=minsool&logNo=130116896843 Open API에 대해서 공부를 할 기회가 생겨서까먹지 않고 정리를 해두려구 한다. Open API란 ? API는 응용프로그램이나 서비스를 개발하는데 필요한 운영체제(OS)나 라이브러리 등의 특정 기능을 추상화하여 사용하기 쉽도록 만든 인터페이스로 Single UNIX Spectification, Windows API 등을 말한다. Open API는 아래 그림과 같이, Web 2.0 API, 통신망 서비스 API 등, 주로 인터넷이나 통신망과 관련된 자원의 API를 의미하는 것으로, 여러 사람들이 공동으로 사용할 필요가 있는 자원에 대하여 이 자원의 사용을 개방하고, 사용자.. 더보기
윈도우7 잠금화면 변경 출처: http://liverex.tistory.com/138 더보기
setter getter?? 출처 : http://oz-iphone.tistory.com/2 OOP 와 관련된, 더 정확하게 말하면 class 형태를 사용하는 랭귀지는 getter 와 setter 가 반드시 사용됩니다. C++ 로 예를 들면, class MyClass{ int value;public: void setValue(int n) { value = n; } int getValue() { return value; }} value 가 private 로 되어 있기 때문에, 클래스 외부에서는 setValue() 와 getValue() 함수로만 접근이 가능합니다.이 컨셉은 OOP 의 기본중에 기본적인 Capsulatioin 개념입니다. Objective-C 의 경우, 아예 클래스 외부에서 value 에 직접 접근을 원천 차단 시켰습니.. 더보기
JNI로 call by reference형태 구해보기 보통 call by reference는 C/C++에서 많이 쓰이는 방법인데, JNI를 통해서도 구현 가능한지 의문이들어 테스트해보았다.(^0^) Java단에서 C단으로 call by reference를 하려면 주소값을 넘겨주어야 하는데, 여기에서는 하나의 객체를 만들어서 접근하는 방법으로 진행해 보았다. class Myclass { int a = 1;int b = 2;}...protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(com.example.jni.R.layout.activity_main);...Myclass myobject = new Myclass(); // 이런식으로.. 더보기
에디트플러스 각종빌드설정 이클립스에서 각종 툴을 설정하는 화면이다. 1. NDK인수 : --login -c "ndk-build -C '$(FileDir)/..' -B(옵션가능)"동작 : 버튼을 눌러보면 여러 모드가 있다. 텍스트 필터는 에디트플러스 내에 작은 창이 보여지며 실행되는 것이다. 2. JAVA COMPILE명령 : C:\Program Files\Java\jdk1.7.0_10\bin\javac.exe(각 PC사정에 따라 알어서. 당연히 path설정은 되어있어야 한다.) 3. JAVA BUILD명령 : C:\Program Files\Java\jdk1.7.0_10\bin\java.exe 더보기
apk만들기 1. Android Tools -> Export Signed Application Package... 2. 프로젝트 이름(보통 프로젝트를 클릭해서 들어온경우 자동으로 생성됨) 3. 키 이름과 비번지정(잘 외우고있기) 4. Alias : 프로젝트명 ... Validity:apk서명유효기간(최대60년) First and Last Name:작성자이름 5. .apk가 저장될 위치 지정 6. Finish 더보기
안드로이드 위치정보찾기 안드로이드에서 위치정보를 출력하는 방법이다. ===================================================================================================================public class GPS { private static final String TAG = "GPS "; private Context mContext = null; private LocationManager mLocationManager = null; public double dbLat, dbLng; public GPS(Context context){ this.mContext = context; if(this.mContext != null){// 1. L.. 더보기
안드로이드 종합 더보기
NDK-다중 타겟 패턴. 멈춤 문제 ndk작업을 하다가 이번에 새로 컴퓨터를 옮겨서 다시 안드로이드 사이트에 들어가 ndk를 최신버전으로 받고 컴파일을 해보니, "obj/local/armeabi/objs/SVMCore/interpreter.o.d:1: *** 다중 타겟 패턴. 멈춤." 이런 식으로 뜬다. ㅡㅡ;; 다른 게 아~~~~~~~~~~무것도 안뜨고, 저렇게만 뜬다;;;;;;(젠장...) 결론은 이거였다. 이전에 ndk 7버전에서 생성된 obj폴더 안에 있던 (.so .a)파일들이 이번에 새로 바귄 ndk8버전으로 빌드하여, 이전에 있던 파일들과 현재 컴파일한 파일들이 꼬인 것으로 예상되었다.... 심지어 "ndk-build clean"도 되지 않는 상황이 발생했으니 매우 난감할 따름이었다.;;;;; 해결책은 직정 obj폴더로 들어가.. 더보기
이클립스 플러그인(svn)설치 이클립스에서 svn설치 Help -> Eclipse Market Place 에서 'svn'으로 검색 후 svn설치 (단, 64bit로 설치되어 있으면 Checkout받을 때, JavaHL에러가 날 것임. 이것은 subclipse를 사용하기위한 자바 네이티브 라이브러리로 추정. 그리하여 에러 메시지가 난 곳의 페이지에 나와있는 주소 혹은 http://www.sliksvn.com/en/download 을 클릭하여 JavaHL을 따로 다운 받으면 됨.) 더보기
파일전송(웹 서버 : 아파치서버) 아......'무'에서 '유'를 창조하려니 참 쉽지 않네.... 이번에는 웹서버상에 파일을 전송하는 내용을 적어놓아야겠다. 원래 의도는 asp상에서 파일을 업로드 하려 했건만, 자료가 많이 있지가 않다.....ㅡㅡ;;; 그래서 부랴부랴 컴에 톰캣을 깔고 웹서버로 안드로이드 어플상에서 파일을 전송하는 포스팅을 한다. ===================================================================================================================1. 먼저 톰캣 서버 설치부분: 알아서들 하도록. 포스팅 한 곳이 무지하게 많다. 2. 톰캣을 설치하고나면 특정 파일(*.jsp)을 기본 페이지로 설정하고 쓸 것이다. 그 내용이다. [@주의.. 더보기