Emacs – emacsclient can’t find socket problem…. solved

when you see this on Mac? just follow me~

emacsclient: can't find socket; have you started the server?
To start the server in Emacs, type "M-x server-start".
emacsclient: No socket or alternate editor.  Please use:

    --socket-name
    --server-file      (or environment variable EMACS_SERVER_FILE)
    --alternate-editor (or environment variable ALTERNATE_EDITOR)

i solved like this.

ln -s /Applications/Emacs.app/Contents/MacOS/bin/emacsclient ect

기본 emacsclient가 바라보는 소켓이 틀린가?

Android – Getting version code and version name without app context.

ref : https://stackoverflow.com/questions/4616095/how-to-get-the-build-version-number-of-your-android-application

If you’re using the Gradle plugin/Android Studio, as of version 0.7.0, version code and version name are available statically in BuildConfig. Make sure you import your app’s package, and not another BuildConfig:

import com.yourpackage.BuildConfig;
...
int versionCode = BuildConfig.VERSION_CODE;
String versionName = BuildConfig.VERSION_NAME;

No Context object needed!
Also make sure to specify them in your build.gradle file instead of the AndroidManifest.xml.

defaultConfig {
    versionCode 1
    versionName "1.0"
}

[synology] renew a let’s encrypt certificate.

Connecting synology-ssh-server as root.

if you want to connect to synology ssh server, you mush login ssh-server as admin first.

Screen_Shot_2017-08-14_at_11_36_55_AM

and then, change as root. type this.

$ sudo -i

Screen Shot 2017-08-14 at 11.40.24 AM

  • root password is same with admin password.

Screen Shot 2017-08-14 at 11.42.34 AM

you can sse that you did login as root. type following this.

$ /usr/syno/sbin/syno-letsencrypt renew-all -v

option -v is debug mode. so you can see a log list what does it happen.

Screen Shot 2017-08-14 at 11.45.09 AM

  • you have to open 80 port to renew certification.

in my case, cert is not expired. so i will do next time. :) it’s done. thank you.

// this let you know to renew certification automatically.
cat /usr/syno/etc/letsencrypt/letsencrypt.default
// you can check when it started, and when it expired.
echo | openssl s_client -connect <ip address>:443 2>/dev/null | openssl x509 -noout -dates

clojure – 네임스페이스안에 정의되어 있는 함수 보기

클로저 개발을 하다 보면, 네임스페이스 안에 정의되어 있는 함수들을 보고 싶을 때가 있다.

LightTable이 아닌 autocomplete가 제공되지 않는 IDE에서 개발을 할때면, 아.. 뭐지? 공욕을 치룰때가 있다.

그럼 어떻게 네임스페이스안의 함수들을 볼 수 있을지 알아 보자.

1. keys 함수를 이용하여, 함수 시퀀스 반환하기.

user=> (keys (ns-publics 'foo))

그 외 ns- 많은 함수들을 제공하니 찾아서 실험해보도록 하자.

2. dir 함수를 이용하기. dir함수는 clojure.repl에 선언되어 있는 함수이다.

user=> (require 'clojure.repl)
user=> (clojure.repl/dir 'foo)

그 외 다른 방법도 있으나, 위 두가지 방법이 제일 괜찮은거 같다.

이상.

sonarqube – 코드 최적화하기

2분안에 설정하는 소나큐브

현재 진행중인 안드로이드 프로젝트를 개선하기 위해 소나큐브(http://www.sonarqube.org/)를 사용해보록 하겠습니다.

소나큐브는 프로젝트의 품질을 관리할 수 있도록 여러가지 모니터링 툴을 제공하는 오픈소스 플랫폼입니다. Java를 포함한 20가지가 넘는 프로그래밍 언어 (예: C#, C/C++, Javascript 등)로 제작된 프로젝트의 모니터링을 제공합니다.

참조

현재 환경은
OS : macOS sierra version 10.12.1
JAVA : 1.8


서버 다운로드 링크

https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.1.zip

스캐너 다운로드 링크

https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zip

예제 파일 링크

https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zip

위 파일을 다운로드 후 압축을 풀어준다.

소나큐브 서버 설치하기

$ mkdir ~/sonar
$ cd sonar
$ wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.1.zip
$ unzip sonarqube-6.1.zip
$ rm sonarqube-6.1.zip

소나큐브 스캐너 설치하기

$ cd ~/sonar
$ wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zip
$ unzip sonar-scanner-2.8.zip
$ rm sonar-scanner-2.8.zip

소나큐브 샘플 파일 설치하기

$ cd ~/sonar
$ wget https://github.com/SonarSource/sonar-examples/archive/master.zip
$ unzip master.zip
$ rm master.zip

환경변수 설정하기

$ emacs ~/.bashrc

아래 항목들을 파일에 추가해준다.

#sonar-qube
export PATH=/Users/username/sonar/sonarqube-6.1/bin/macosx-universal-64:$PATH
export PATH=/Users/username/sonar/sonar-scanner-2.8/bin:$PATH

소나큐브 서버 시작하기

$ sonar.sh console

소나큐브 프로젝트 스캔하기

프로젝트 위치에서 아래의 명령을 실행해주자.
!아래의 명령은 코드 분석을 시작하는 것이므로 프로젝트에는 이전에 프로젝트 설정파일이 포함되어 있어야 한다.

$ sonar-scanner

소나큐브 프로젝트 파일 생성하기

$ cat project/sonar-project.properties

위 파일안에 아래의 내용들을 추가해주자.

sonar.projectKey=my:project
# this is the name displayed in the SonarQube UI
sonar.projectName=Linkpay
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
# If not set, SonarQube starts looking for source code from the directory containing
# the sonar-project.properties file.
sonar.sources=.
sonar.exclusions=**/*$$ViewBinder.java,**/*R.java

# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8

sonar.projectKey : 소나큐브 사이트 URL에 포함될 키
sonar.projectName : 소나큐브 사이트에서 보여질 프로젝트 이름
sonar.projectVersion : 소나큐브 사이트에서 보여질 프로젝트 버전
sonar.sources : 프로젝트 경로
sonar.exclusions : 분석 제외할 파일 패턴

끝.

Gralde – Unit test

Buil test configuration

app > build.gradle 환경 파일을 아래와 같이 수정한다.
instrumentTest.setRoot(‘tests’)라는 거.

android {
... 
  sourceSets {
        main {
            jniLibs.srcDirs = ['libs', 'src/main/libs']
            jni.srcDirs = []
        }
        instrumentTest.setRoot('tests')
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
...
}

##Unit test example file

public class ExampleUnitTest {
...
    @Test
    public void addTest() throws Exception {
        assertEquals(4, 2 + 2);
    }
...
}

이상.

Emacs – Upgrade new emacs-live version.

기록하는 습관을 들이자.

emacs-live가 ~/.emacs.d/에 설치 되어있는지 확인하고, 만약 확인이 된다면 아래의 명령어를 입력해준다. 단 이때 git 저장소로부터 다운받아 설치가 되어 있어야 한다.

$ cd ~/.emacs.d/
$ git pull

이상.

Emacs – 프로젝트 생성

기존 프로젝트 의존성이 맞지 않아 오류가 발생된다.

새로 프로젝트를 생성한다면 아래의 설정대로 만들어주어야 한다.

기존 버전으로 사용할 경우 아래의 문제가 발생된다. midje 사용하고, lein repl을 사용했을 경우 cider쪽에서 some-> 함수를 찾지 못하는 문제가 발생한다.

오류를 줄이기 위한 가장 좋은 방법은 최신버전을 사용하는 것이다. (물론 최신버전에 또다른 오류가 발생될 수 있으나, 의존성 처리를 미리미리 해두는게 좋다.)

Global로 설정된 버전들 – cider-nrepl “0.9.1” – clojure “1.4.0”

최신 버전 – cider-nrepl “0.13.0” – clojure “1.8.0”

:dependencies [[cider/cider-nrepl "0.13.0"]]
:repl-options {:nrepl-middleware
                 [cider.nrepl.middleware.apropos/wrap-apropos
                  cider.nrepl.middleware.classpath/wrap-classpath
                  cider.nrepl.middleware.complete/wrap-complete
                  cider.nrepl.middleware.debug/wrap-debug
                  cider.nrepl.middleware.format/wrap-format
                  cider.nrepl.middleware.info/wrap-info
                  cider.nrepl.middleware.inspect/wrap-inspect
                  cider.nrepl.middleware.macroexpand/wrap-macroexpand
                  cider.nrepl.middleware.ns/wrap-ns
                  cider.nrepl.middleware.pprint/wrap-pprint
                  cider.nrepl.middleware.pprint/wrap-pprint-fn
                  cider.nrepl.middleware.refresh/wrap-refresh
                  cider.nrepl.middleware.resource/wrap-resource
                  cider.nrepl.middleware.stacktrace/wrap-stacktrace
                  cider.nrepl.middleware.test/wrap-test
                  cider.nrepl.middleware.trace/wrap-trace
                  cider.nrepl.middleware.out/wrap-out
                  cider.nrepl.middleware.undef/wrap-undef
                  cider.nrepl.middleware.version/wrap-version]}

위 내용을 정리하는 이유는 Midje와 cider 버전 차이가 맞지 않아 발생되는 문제로, lein과 사용되는 lein midje :autotest를 사용할 경우 아무 문제 없다. 하지만 문서상 lein midje ****보다는 lein repl에서 autotest명령을 수행함으로 써 하는 방식을 더 권장하고 있다.

사용해보니 왜 그렇게 권장하는지 알 수 있다.

$ lein repl
$ (use 'midje.repl)
$ (autotest)