검색결과 리스트
전체에 해당되는 글 249건
- 2014.12.11 자바 유용한 라이브러리
- 2014.11.26 How do I make a VBA count down timer for powerpoint (single slide no animation)?
- 2014.11.25 Android 4.4 kitkat 웹뷰 디버깅
- 2014.11.09 Comet 기능 구현
- 2014.10.25 git 명령어 모음
- 2014.10.21 responsive를 위한 AngularJS
- 2014.10.12 Java 내부 분석
- 2014.10.09 자바 외부 멤버변수를 내부 클래스 안에서 호출 할 경우, 주의사항
- 2014.10.07 deview 2014 - 월요일
- 2014.09.03 EOFException with Spring REST Template | Android
글
자바 유용한 라이브러리
Lombok
써봤는 데, 의외로 유용하였다.
get, set 메소드를 줄이는 것도 있지만 해쉬, toString을 동시에 만든다는 점에서 괜찮은 라이브러리이다.
Guava
구글에서 만든 라이브러리
사용은 안해봤지만 괜찮은 듯
'J > Java' 카테고리의 다른 글
SOLID (0) | 2017.06.12 |
---|---|
javascript 배열 java 리스트 변환 (0) | 2015.06.03 |
Java 내부 분석 (0) | 2014.10.12 |
자바 외부 멤버변수를 내부 클래스 안에서 호출 할 경우, 주의사항 (0) | 2014.10.09 |
jackson generic type 관련 (0) | 2014.08.24 |
글
How do I make a VBA count down timer for powerpoint (single slide no animation)?
참조 : http://answers.microsoft.com/en-us/office/forum/office_2010-powerpoint/how-do-i-make-a-vba-count-down-timer-for/928b07db-e3cb-49c1-aadf-7ce56dedded2
'V > VB' 카테고리의 다른 글
VBS 외부 프로그램 실행 안될 때, 주의 사항. (0) | 2014.04.25 |
---|
글
Android 4.4 kitkat 웹뷰 디버깅
웹뷰 관련 개발하기 위해 여러가지 불편사항이 생기게 된다.
디버깅을 하기 힘들다는 점이 그 중 하나 일 것이다.
그래서 개선하고자 찾아본 결과 4.4 버젼 부터 웹뷰 디버깅이 가능하다는 것을 알게 되었다. ( 물론 4.0 이상 버젼도 되긴한다 - 아래 링크 참조 )
웹뷰 디버깅 링크를 클릭하면 자세히 나와있으니 참조하면 될거같다.
장비연결 상태 확인 url : chrome://inspect/#devices
'A > Android' 카테고리의 다른 글
AppCompat v4 v7 의 의미 (0) | 2015.02.20 |
---|---|
Android Studio Migrating Gradle Projects to version 1.0.0 (0) | 2014.12.22 |
EOFException with Spring REST Template | Android (0) | 2014.09.03 |
Manifest merger failed : uses-sdk:minSdkVersion 14 (0) | 2014.08.25 |
android imageview url (0) | 2014.08.11 |
글
Comet 기능 구현
Reverse Ajax, Ajax Push, Two-Way-Web, HTTP server PUSH 등등으로 불리던 말이 이제 Comet 이라는 용어로 통일되어 가는 거 같다.
Comet 이란 웹 클라이언트(보통 웹 브라우저)의 명시적인 요청이 없어도 서버에서 클라이언트로 데이타를 밀어넣는(Push) 방식으로 동작하는 웹 프로그래밍 모델을 일컫는 말이다.
1. Polling
2. Long Polling
3. Streaming
이중 Long Polling 과 Streaming 을 Comet 기능으로 주로 사용함.
Spring Framework 에선 WebSocket을 이용한 Comet 기능 구현이 있다.
페이스북과 같이 댓글이 실시간으로 바로 나오기 위해서 사용하게 된다.
다만 주의할 점은 톰캣 8 이상에서 테스팅이 원활하게 진행이 된다.
만일 톰캣 버젼이 낮을 경우에는
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.web.socket.server.support.DefaultHandshakeHandler]: Constructor threw exception; nested exception is java.lang.IllegalStateException: No suitable default RequestUpgradeStrategy found
라는 에러가 뜨게 될 것이다. 이것저것 시도해보았지만 톰캣 서버 버젼을 높이는 경우 밖에 없는 듯 하다.
글
git 명령어 모음
1. index 지우기
git rm --cached [file]
2. comment 남기기
git commit -m 'First commit'
Q1. Make the current commit the only (initial) commit in a Git repository?
http://stackoverflow.com/questions/9683279/make-the-current-commit-the-only-initial-commit-in-a-git-repository
명령어 모음집
참조 : http://www.dreamy.pe.kr/zbxe/CodeClip/95414
'G > Git' 카테고리의 다른 글
gitignore 적용이 안될 시 (0) | 2015.03.26 |
---|---|
Git 기초 설정 (0) | 2014.12.26 |
글
responsive를 위한 AngularJS
반응형으로 만드려다보니 css와 javascript 부분이 변환해야할 경우가 생긴다.
AngularJS를 쓸 경우에는 이런 식으로 코드를 짜도 되고, 자바스크립트로만 할 경우, 밑 코드만 봐도 javascipt로 변환하는 건 어렵지 않을꺼 같다.
참조 : https://github.com/paul-hammant/angular_instead_of_media_queries
function ResponsiveDemoCtrl($scope, $window) { $scope.oneColumn = false; $scope.width = 0; $scope.height = 0; $scope.leftMarginStyle = {}; $scope.rightMarginStyle = {}; $scope.middleStyle = {}; $scope.updateWidth = function() { $scope.width = $window.innerWidth; } $scope.updateHeight = function() { $scope.height = $window.innerHeight; } $scope.columnAdjustments = function() { if ($scope.width < 768) { $scope.oneColumn = true; var mid = $scope.width - 30; $scope.leftMarginStyle = { width: '15px', maxWidth: '15px' }; $scope.middleStyle = { width: mid + 'px', maxWidth: mid + 'px', }; $scope.rightMarginStyle = { width: '15px', maxWidth: '15px', verticalAlign: 'text-top' }; } else if ($scope.width >= 1024 ){ $scope.oneColumn = false; var mid = 614; var margin = ($scope.width - 614) * 0.5; $scope.leftMarginStyle = { width: margin + 'px' }; $scope.middleStyle = { width: mid + 'px', maxWidth: mid + 'px', }; $scope.rightMarginStyle = { width: margin + 'px', verticalAlign: 'text-top' }; } else { $scope.oneColumn = false; var pc20 = Math.round($scope.width * 0.2); var pc60 = Math.round($scope.width * 0.6) $scope.leftMarginStyle = { width: pc20 + 'px' }; $scope.middleStyle = { width: pc60 + 'px', maxWidth: pc60 + 'px', }; $scope.rightMarginStyle = { width: pc20 + 'px', verticalAlign: 'text-top' }; } } $scope.updateWidth(); $scope.updateHeight(); $scope.columnAdjustments(); $window.onresize = function () { $scope.updateWidth(); $scope.updateHeight(); $scope.columnAdjustments(); $scope.$apply(); } }
'A > Angularjs' 카테고리의 다른 글
글
Java 내부 분석
Java 내부 분석
VisualVM, jconsole ..기타등등의 메모리, CPU 말그대로 내부적인 전반적인 것들을 보여준다.
이것들을 어디다 쓰느냐 하면 예로들면, Memory Leak 현상이 발생하거나 프로그램 사이즈가 커졌을 때가 있는 데,
나 같은 경우에는 메모리 릭 현상이 발생하여 사용하게 되었다.
스프링 프레임워크를 사용하면서 간과했던 실수인데 static 선언을 했을 시, 메모리가 누적되어 쌓이는 증상이 발생할 수 있다.
멀티 스레드 환경에선 static으로 선언된 부분이 classloader에 계속 올라오는 현상이 생기는 거 같다.
결론은 메모리 누적이 발생하면 jconsole이나 VisualVM을 이용해서 내부 분석을 하여 해당 누적 클래스를 찾는 것이 중요하다.
자세한 내용은 구글 검색하면 나옴니다. :)
'J > Java' 카테고리의 다른 글
javascript 배열 java 리스트 변환 (0) | 2015.06.03 |
---|---|
자바 유용한 라이브러리 (0) | 2014.12.11 |
자바 외부 멤버변수를 내부 클래스 안에서 호출 할 경우, 주의사항 (0) | 2014.10.09 |
jackson generic type 관련 (0) | 2014.08.24 |
URLConnection을 이용한 이미지 추출 프로그램 (0) | 2014.06.28 |
글
자바 외부 멤버변수를 내부 클래스 안에서 호출 할 경우, 주의사항
package com.example.e03list; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.SimpleCursorAdapter; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; public class MainActivity extends ActionBarActivity { LectureDBOpenHelper helper; SQLiteDatabase db; Cursor cursor; SimpleCursorAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); adapter = new SimpleCursorAdapter(this, R.layout.list_item, null, new String[] { "title", "modifiedTime", "_id" }, new int[] { R.id.text_view1, R.id.text_view2, R.id.text_view3 }, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); ListView listView = (ListView) findViewById(R.id.listView1); listView.setAdapter(adapter); Button b = (Button) findViewById(R.id.button1); View.OnClickListener onClick = new OnClickListener() { public SQLiteDatabase db1 = db; @Override public void onClick(View v) { Log.e("db1", "db1 : " + db1 + " db : " + db); // db1은 대입하여 메소드 호출하는 식 // db는 내부 익명 클래스에서 외부 멤버변수를 호출하는 형식이라 // resume때 생성해도 상관이 없다. EditText e = (EditText) findViewById(R.id.editText1); String str = e.getText().toString(); e.setText(""); ContentValues value = new ContentValues(1); value.put("title", str); db.insert("ListItem", null, value); cursor.close(); cursor = db.rawQuery("select * from ListItem", null); adapter.changeCursor(cursor); } }; b.setOnClickListener(onClick); } @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; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override protected void onResume() { super.onResume(); helper = new LectureDBOpenHelper(this); db = helper.getWritableDatabase(); cursor = db.rawQuery("SELECT * FROM ListItem", null); adapter.changeCursor(cursor); } @Override protected void onPause() { super.onPause(); cursor.close(); db.close(); helper.close(); } }
'J > Java' 카테고리의 다른 글
자바 유용한 라이브러리 (0) | 2014.12.11 |
---|---|
Java 내부 분석 (0) | 2014.10.12 |
jackson generic type 관련 (0) | 2014.08.24 |
URLConnection을 이용한 이미지 추출 프로그램 (0) | 2014.06.28 |
Static 키워드 (0) | 2014.03.18 |
글
deview 2014 - 월요일
1 자바스크립트 라이브러리 개발/운영 경험기
어떤 라이브러리 개발을 하고 서비스를 하게 될 경우, Upgrade는 부담이 가게 되어있다.
서비스의 안정성으로 인한 문제인데, 해결책으론 버저닝 (Versioning)의 규칙 쉽게 하는 방법이 있다.
예로들면, Semantic Versioning이 있겠다.
X (major) Y(minor) Z(patch)
다만 패치를 했을 경우, 몇 개의 부분을 수정했는지 크기를 알 수 없어
1개 수정하든 3개를 수정하든 패치 버전 업은 한번 일어나는 경우가 생기게 된다.
| 파일 | 버전 | 상세 내용 | 메소드 | … 이런식으로 각각의 수정 사항에 대해 상세화 시켜줌으로 해결할 수가 있다한다.
라이브러리를 개발하기 위해선 변화에 대응하기 위해 테스팅을 많이 해야한다.
테스트도 두가지 경우가 있다. 자동화 테스트, 사람 테스트
자동화 테스트 도구론 JsTestDriver 와
이벤트 시점에서 테스트 할 수 있는 Testem, Karma (Core – 테스트) 가 있다.
사람 테스트는 수치화 안되어 있는 것 (파일 업로드 등등 .. )인데 밀도 있게 하면? 된다한다.
Ex) 컴포넌트 별 기능 별로 테스트
결론, 라이브러리 개발은 단위 테스트 – 도구 활용, 사람 테스트 – 밀도 있게끔 하고
추가적으로 최소한의 의존관계, 발전 방향 쉽게 구성
Ex) Cross browsing (Polyfill)을 Syntactic sugar(Core)에 까는 식
이렇게 할 시에는 Polyfill은 외부 개발자에게 지원 받을 수 있음.
2 간결하고 효율적인 안드로이드 앱의 구조와 전략
http://blog.naver.com/kildongs - 소스 보기
안드로이드 개발 중 대부분의 버그들은 Data Transfer에서 발생한다.
( Intent, Uri 잘 다루는 것이 중요하다 )
또한 안드로이드를 개발할 때, 액티비티의 static도 안정하지 않아, Application 객체에다 저장하는 게 낫다. Application 객체만 잘 설계해도 좋은 어플리케이션을 만들 수 있다.
Application 객체를 사용하기 위해선 AppContext 라는 클래스를 만들어 Application 관련 처리를 편리하게 사용할 수 있게 구성을 해야한다.
앱 개발시, 코드를 간결 하는 것도 중요하다.
Inheritance, Reflection, Generics, Annotation, XML 를 이용하면 간결하게 할 수 있다.
findViewById 메소드는 복잡성 증가 시켜 어노테이션, 리플렉션을 이용하여
@DeclareView를 통해 해당 뷰를 받게끔 구성. 할 수도 있다.
XML 부분 UI 컴포넌트 나누는 작업도 어느정도 해줘야한다.
예로는 Resource Id Mapping 간략화, Preference Xml 생성하여 변하지 않은 것은 넣기가 있다.
@BundleField 어노테이션 사용으로 DataTransfer의 코드를 줄일 수 있다.
과정은 다음과 같다.
Uri 스킴?을 매핑 객체 만든후, 클래스 멤버로 참조하여 사용하는 방법을 주로 한다.
인텐드 사용할 때도, Intent를 Serialize가 되면 데이터양이 많은 것들은 전송이 힘들 경우가 있다.
따라서 AppContext.putValue 처럼 AppContext 클래스를 적극 활용하는 것도 하나의 방안이다.
Table, Cursor 단순화는 @DataField ( Cursor Reader, Content Values Mapper ) 객체 활용하면 된다.
하지만 나와있는 API들이 존재하므로 Jackson, XStream (API – Data Object Model)
를 사용해도 무방하다.
다만 API는 안드로이드 최적화가 되어있지 않아 한번 더 Convert 해야한다는 점이 불편하긴 하다.
간격하고 효율적인 안드 세미나를 들으면서, 어노테이션에 대해 다시 돌이켜보는 기회가 되었다.
어렵지도 않으면서, 어느정도 융통성 있게 어노테이션과, 리플렉션을 사용하면 코드의 양과 간결함을 유지할 수 있다고 한다.
그 말에 대해 어느정도 공감이 되는 부분이었고, 해외에서도 여러 어노테이션을 사용하는 API?가 존재한다. (AndroidAnnotations, GoogleGuice 등등..)
이런 API를 적극 활용하여 다음번에는 개발을 해봐야겠다.
3 Docker로 보는 클라우드 서버 운영의 미래
Docker의 핵심적인 내용은 각각의 리눅스 서버의 세팅에 대한 설정 관리를 Docker가 대신해 준다는 것.
해당 리눅스 이미지를 저장하여 버전에 따라 다시 불러오는 기능을 할 수가 있다.
도커에 대해 들어보긴 했어도 어떠한 기능을 하는지 감을 잡을 수가 없어서 듣게 되었는 데, 아직까지는 도커를 쓰고 경험하기에는 거리가 먼 일들이라는 것을 깨닫게 되었다.
기능 자체가 개발적인 부분도 일부 포함되어 있지만, 환경이 변하지 않고 그 상태에서만 지속된다면 도커의 효과를 맛보기란 어렵기 때문이다.
4 How can I hack your application?
보안이란 것은 시간을 버는 관점으로 봐야한다는 것이 핵심.
절대로 완벽한 보안은 없다.
마지막 세션에서 안드로이드 APK를 디컴파일하여 소스를 분석한다음, 악성코드를 심는 과정까지 간단하게 설명을 해주었다.
해킹툴만 가지고 있고 어느정도의 소스 분석 지식만 있다면 누구나 해킹을 할 수 있다한다.
데이터를 보내는 것들 또한 암호화 시키고 해커가 디컴파일해서 소스분석해도 잘 모르게끔 하는 것이 중요.
* 워드에다 쓰고 티스토리에다 쓰니깐 깔끔해지는 듯?
'S' 카테고리의 다른 글
소나 버그 잡기 (0) | 2017.06.12 |
---|---|
Scala (0) | 2017.05.05 |
SSH 접속 끊김 (0) | 2017.03.20 |
jboss 서버 utf-8 설정 (0) | 2014.07.19 |
<모델1과 모델2> (0) | 2012.01.02 |
글
EOFException with Spring REST Template | Android
'A > Android' 카테고리의 다른 글
Android Studio Migrating Gradle Projects to version 1.0.0 (0) | 2014.12.22 |
---|---|
Android 4.4 kitkat 웹뷰 디버깅 (0) | 2014.11.25 |
Manifest merger failed : uses-sdk:minSdkVersion 14 (0) | 2014.08.25 |
android imageview url (0) | 2014.08.11 |
android javascript 과 android 연동 (0) | 2014.07.11 |