[VI, VIM] 정규식에서 non-greedy 하게 검색하기 (욕심부리지 않기)


VI의 정규식이 펄이나 파이썬 등의 정규식과 크게 다른 점 중 하나는 non-greedy (욕심부리지 않기) 연산자입니다. 대부분의 경우 물음표 기호가 사용되는데 VI에서는 \{-}가 사용됩니다. 예를 들면 다음과 같습니다.


:%s/hello.\{-}://g


라고 하면 hello에서 가장 가까이 있는 : 까지만 사라지게 됩니다. 펄이나 파이썬이었으면 .? 이런 식으로 사용했을 거라, 지레짐작으로 VI에서 열심히 \? 를 시도해보다가 시행착오를 엄청 했습니다.

[안드로이드] Error:Could not find method jackOptions() for arguments


그래들 파일에서 아래 블록 부분을 지워준 뒤 안드로이드 스튜디오를 껐다가 다시 실행하면 문제가 해결됩니다. 


// 이 부분을 삭제하시면 됩니다.

jackOptions {

    enabled true

}


[안드로이드] No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android


안드로이드에서 사용되는 NDK 버전이 올라가면서 MIPS형 CPU에 대한 지원이 중단되었습니다. 그런데 build.gradle에 지정되어있는 gradle 버전이 낮으면 안드로이드 스튜디오가 MIPS에 대한 정보를 계속 찾으려고 하다가 위와 같은 에러를 내게 됩니다. 이럴 때에는 gradle 버전을 3.1.4 나 그 이상으로 설정해준 뒤 안드로이드 스튜디오를 껐다가 다시 실행하면 문제가 해결됩니다.


dependencies {

    classpath 'com.android.tools.build:gradle:3.1.4'

}



[파이썬] 아나콘다 업데이트하기


아나콘다를 사용하다 보면 아나콘다 자체 및 부속 라이브러리들을 업데이트 해야 할 일이 생기곤 합니다. 그럴 때에는 다음과 같이 하면 쉽게 전체 업데이트를 할 수 있습니다.


conda update -n root conda

conda update --all

conda update --all


conda update -n root conda 는 conda 자체를 최신 버전으로 업데이트하는 명령입니다.

conda update --all 이 본격적으로 업데이트를 하는 명령인데, 경우에 따라 두 번 실행해야 다 업데이트가 되는 경우가 있었습니다.


( 다음 링크를 참고했습니다. https://stackoverflow.com/questions/45197777/how-do-i-update-anaconda#45197778 )

윈도폰 8에서 gmail을 사용해서 이메일을 보낼 때 이메일이 중복되는 경우가 있습니다. 원인과 해결책은 다음과 같습니다.


윈도폰에서는 '보낸 편지함'이라고 나타나고 gmail에서는 'Sent Items'이라고 나타나는 폴더가 있습니다. 이 폴더는 윈도폰이 직접 만드는 폴더입니다. gmail 자체 폴더는 '보낸편지함'입니다. 띄어쓰기가 없습니다.


윈도폰에서 '보낸 편지함' 동기화를 중지하시면 더이상 gmail을 사용해서 이메일을 보낼 때 중복되지 않습니다.


[JUnit] 명령줄(커맨드 라인)에서 JUnit 실행하기


명령줄(커맨드 라인)에서 JUnit을 실행하시려면 다음과 같이 하시면 됩니다. 리눅스와 윈도에서의 명령어가 조금 다른데, 리눅스에서는 :을 쓰고 윈도에서는 ;을 씁니다. 한편 JUnit 버전(4.x와 3.x)에 따라서도 명령어가 조금 달라집니다.


실행하실 때 test class name은 현재 디렉토리 혹은 path에 지정된 디렉토리에 있어야 합니다.


< JUnit 4.x >


리눅스

java -cp .:/path/to/junit_4.x/junit.jar org.junit.runner.JUnitCore [test class name]


윈도

java -cp .;/path/to/junit_4.x/junit.jar org.junit.runner.JUnitCore [test class name]


< JUnit 3.x >


리눅스

java -cp .:/path/to/junit_3.x/junit.jar junit.textui.TestRunner [test class name]


윈도

java -cp .;/path/to/junit_3.x/junit.jar junit.textui.TestRunner [test class name]


[펄 (Perl)] 특정 디렉토리 내의 모든 파일 리스트 출력하기


특정 디렉토리 내의 모든 파일 리스트를 재귀적으로(recursive) 출력하는 펄 함수는 다음과 같습니다.


sub process_files

{

    my $path = shift;

    opendir (DIR, $path) or die;


    my @files = map { $path . '/' . $_ } grep { !/^\.{1,2}$/ } readdir (DIR);

    my @result;

    closedir (DIR);


    for (@files)

    {

        if (-d $_) { push @result, process_files ($_); }

        else { push @result, $_; }

    }

    return @result;

}


[펄 (Perl)] 배열에 특정 값이 있는지 검사하기


~~ 연산자를 사용하면 배열에 특정 값이 있는지를 쉽게 검사할 수 있습니다.

단 펄 버전 5.10 ('오 점 일영'이 아니라 '오 점 십' 버전입니다) 이상에서만 사용 가능합니다.

코드는 다음과 같습니다.


#!/usr/bin/perl

use 5.012;

use strict;

use warnings;


my @array;

my $check = 3;


if($check ~~ @array) { say "$check is found!!"; }


물론 위 코드의 경우 @array가 비어있는 배열이므로 "$check is found!!"가 출력되지 않을 것입니다.


[리눅스] 특정 디렉토리 내 파일 개수 보기


ls -l | grep ^- | wc -l


라고 치시면 현재 디렉토리 내에 있는 파일의 개수를 보실 수 있습니다.

[펄 (Perl)] HTML Entity(문자 참조)를 일반 문자로 변환하기


HTML 파일 안에는 HTML Entity라고 불리는(우리말로는 '문자 참조') 구조가 있습니다. 예를 들어 &이라는 문자는 HTML 파일 안에서 &amp;로 씁니다. HTML 파일 안에 &amp;라고 적혀 있으면 웹브라우저가 &라고 표시해주는 것입니다.


문제는 그러한 HTML 파일을 펄에서 바로 읽어버리면 &로 표시되지 않고 &amp;라고 있는 그대로 표시되어버린다는 데에 있습니다. 이를 해결하려면 다음과 같이 하면 됩니다.


#!/usr/bin/perl

use 5.012;

use strict;

use warnings;

use HTML::Entities;


my $test = '&amp;';

say $test; # &amp;라고 출력됩니다.

say decode_entities($test); # &라고 변환되어 출력됩니다.



+ Recent posts