FileUriExposedException on Android 7.0

Uri photoURI = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", createImageFile());

Get Download Directory in Android


SimpleDraweeView did not recycled in RecyclerView in Fresco Library

DraweeController draweeController = Fresco.newDraweeControllerBuilder()


Fast rebuild with instant run.

If I change the AndroidManifest.xml file, android studio performs a full build, but this is much faster to fist cleaning, and then building the project.So, I add a blank line to the manifest file, whenever I want android studio to full build the project. This is much effective to perform a manual full build.

Move the task containing this activity to the back of the activity

public boolean moveTaskToBack(boolean nonRoot) {
    try {
        return ActivityManagerNative.getDefault().moveActivityTaskToBack(
                mToken, nonRoot);
    } catch (RemoteException e) {
        // Empty
    return false;

Just use this.

Circles image using Fresco Programmatically

RoundingParams roundingParams = RoundingParams.fromCornersRadius(5f);

Like search in SQLite3 using Python

connection.execute('SELECT name, code FROM table WHERE name like ?', ('%' + name + '%', ))

Update badge count in Android

Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE"); 

// package name setting 
intent.putExtra("badge_count_package_name", getComponentName().getPackageName()); 
intent.putExtra("badge_count_class_name", getComponentName().getClassName()); 

// badge count
intent.putExtra("badge_count", count);

JSON deep equal

Object.extend(Object, {
   deepEquals: function(o1, o2) {
     var k1 = Object.keys(o1).sort();
     var k2 = Object.keys(o2).sort();
     if (k1.length != k2.length) return false;
     return, function(keyPair) {
       if(typeof o1[keyPair[0]] == typeof o2[keyPair[1]] == "object"){
         return deepEquals(o1[keyPair[0]], o2[keyPair[1]])
       } else {
         return o1[keyPair[0]] == o2[keyPair[1]];


var anObj = JSON.parse(jsonString1);
var anotherObj= JSON.parse(jsonString2);

if (Object.deepEquals(anObj, anotherObj))


flask url open basic format

import urllib

def events():
    result = urllib.urlopen([URL]).read()
    return json.load(result)

Reset command in Git

위 링크를 살펴보면 Git의 HEAD, Index, Working Directory의 개념과,
Reset명령어를 이해할 수 있다.

여러 옵션이 있지만 가장 많이 쓸법한 Head에 있는 내용을 Working Directory까지 Reset하려면 --hard 옵션을 사용하면 된다.


jQuery, using one instead of on or off
jQuery 소스 중 아래 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 부분을 보면 guid가 같은 경우 새로운 함수를 assign 한다는 것을 알 수 있다. 따라서, 앞으로 off, on를 연속해서 사용할 필요 없이 one 만을 사용하면 더 간단하다.
 if ( one === 1 ) {
    origFn = fn;
    fn = function( event ) {

        // Can use an empty set, since event contains the info
        jQuery().off( event );
        return origFn.apply( this, arguments );

    // Use same guid so caller can remove using origFn
    fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
return elem.each( function() {
    jQuery.event.add( this, types, fn, data, selector );
} );

Realtime log collection system.

결론부터 말하면 특별히 제한이 없으면 Logstash를 사용할 것 같고, 다른 경우라면 syslog계열을 사용할 것 같다.
Logstash 다양한 플러그인 지원하지만 자원소모가 많음. 여유가 있는 서버에 설치하거나 단독으로 사용하는 것이 좋겠다.
Filebeat 가볍도 의존성도 없다. 하지만 제한사항이 많다. 다양한 환경에 적응하기는 쉽지 않다.
Logagent 아주 빨리 설치해서 사용할 수 있다. 하지만 아직 Logstash보다 기능이 뒤쳐진다.
rsyslog 리눅스의 기본 데몬인 syslog처럼 사용할 수 있다. 사용이 아주 간편하고 익숙하다. (syslog를 기존에 사용해봤다는 전재에서)
syslog-ng rsyslog 처럼 가볍고 사용하기도 쉽다. 크게 다른점은 모르겠다.
Fluentd JSON형태로 로그를 저장한다. 때문에 플랫폼 제한이 없지간 Ruby로 작성되어 추가 개발은 쉽지만 속도 등 여러가지 한계가 있다.

Proguard : google.gms - Duplicate zip entry c.class 에러

In app.gradle you need to move following entry to the end of file :

apply plugin: ''

java.sql.SQLSyntaxErrorException: ORA-0091 오류

java.sql.SQLSyntaxErrorException: ORA-00911: 문자가 부적합합니다

위와 같은 오류가 발생할 경우, SQL 구문 마지막에 세미콜론(;)이 있는지 확인하고 제거하면 해결된다.

JavaScript에서 this 키워드에 새로운 context를 대입할 수 있을까?

불가능하다. JavaScript object로 된 함수를 사용할 때 이런 고민할 하게되는데 참고.

You can call a method with a specified value for this (using method.apply()/ but you cannot re-assign the keyword, this.


Subscribe to: Posts (Atom)