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


ls -l | grep ^- | wc -l


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

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


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


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


#!/usr/bin/perl

use 5.012;

use strict;

use warnings;

use HTML::Entities;


my $test = '&';

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

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



[펄 (Perl)] 웹사이트 긁어오기


펄을 이용해서 웹사이트를 긁어오려면 LWP::Simple 모듈을 사용하면 됩니다. 코드는 다음과 같습니다.


#!/usr/bin/perl

use 5.012;

use strict;

use warnings;

use LWP::Simple;


my $url = 'http://www.naver.com';

my $webPage = get($url);


if(defined $webPage)

{

    open my $output, '>', 'C:\webpage.html';

    print $output $webPage;

    close $output;

}

else { say "There's no such website!: $url"; }


이렇게 하면 $url 변수에 지정된 웹사이트의 내용을 문자열로 $webPage로 읽어온 뒤 $output 변수에 연결된 파일로 출력하게 됩니다. 만약 웹사이트 주소가 잘못되었다면 오류 메시지가 출력됩니다.


영문이 아닌 문자가 들어있는 웹사이트를 긁어올 경우 Wide character in print at xxx.pl line xx. 라는 경고 메시지가 출력될 수 있습니다. 이것은 오류가 아니라 경고 메시지이며, 이 경우도 정상적으로 파일로 출력됩니다. 하지만 경고 메시지때문에 뭔가 찜찜하다면 binmode $output, ':utf8'; 이라고 한 줄을 더 넣어주시면 됩니다. 아래 코드에 주석으로 강조해 놓았습니다. 엄밀히 말하자면 웹사이트의 인코딩에 따라 근본 문제는 해결되지 않고 오류 메시지만 안 나타나게 되기도 합니다만, 대부분의 경우에는 문제가 없습니다.


#!/usr/bin/perl


use 5.012;

use strict;

use warnings;

use LWP::Simple;


my $url = 'http://www.naver.com';

my $webPage = get($url);


if(defined $webPage)

{

    open my $output, '>', 'C:\webpage.html';

    binmode $output, ':utf8';    # 이부분입니다.

    print $output $webPage;

    close $output;

}

else { say "There's no such website!: $url"; }


갑자기 '기독교 교리를 수학으로 설명하면 이해하기 쉬워지지 않을까?' 하는 생각이 들어서 한번 시도해 봤습니다.

정의역이 온 우주에 존재하는 모든 사람의 집합이고 공역이 참과 거짓인 함수를 생각해 보겠습니다. 이 함수의 이름은 ‘구원’입니다. 수식을 사용해서 써 보면

함수 구원:X -> Y
X = {x | x는 사람}
Y = {참, 거짓}

이렇게 되겠습니다. 모든 사람을 원소나열법으로 쓸 수는 없기에 집합 X를 정의할 때에는 조건제시법을 사용했습니다.

이 구원이라는 함수는 사람이 대입되면 그 사람이 구원받았는지를 알려주는 함수입니다. 예를 들어 '구원(철수) = 참' 이라면 철수는 구원받은 것이고 '구원(철수) = 거짓' 이라면 철수는 구원받지 못한 것입니다. 구원은 모든 사람의 집합을 정의역으로 가지는 함수이기 때문에 철수 영희 갑돌이 갑순이를 다 대입해 볼 수 있지만 바둑이는 대입할 수 없습니다. 로그(log)에 음수를 넣으면 안 되는 것처럼 '구원(바둑이)'는 정의가 되어 있지 않습니다.

이제 우리의 관심사는 ‘무엇을 하면 구원받는가?’ 입니다. 구원의 조건이라고 생각해도 되겠네요. 이를 수학적으로 표현하려면 고등학교 집합과 명제 시간에 배운 명제함수가 필요합니다. 명제함수란 ‘p(x) 이면 q(x) 이다’ 형태의 문장을 뜻합니다. 그러니까 우리는

p(x) 이면 구원(x) 이다

에 해당하는 p(x)를 찾고 싶은 것입니다. 예를 들어 착한 사람이 구원받는다면 '착함(x) 이면 구원(x) 이다' 가 될 것입니다.

여기서 잠시 공리계에 대한 이야기를 해야 합니다. 주어진 이론 체계 안에서 가장 기초적인 근거가 되면서 증명이 필요없이 참으로 인정되는 명제를 공리라고 하고, 그런 공리들을 모아놓은 것을 공리계라고 합니다. 수학에서는 증명을 할 때 어떤 공리계를 사용하느냐가 중요한데, 우리는 기독교 신앙에 대해 이야기하고 있으니 우리의 공리계는 성경책이 되겠습니다. 공리계에 대해서는 나중에 더 자세히 이야기 할 기회가 있을 것입니다. 하여튼 지금은 공리계에 있는 명제는 그냥 묻지도 따지지도 말고 참이라는 것만 짚고 넘어가도록 하겠습니다.

다시 구원 이야기로 돌아와서, 우리가 찾고 싶은 구원의 조건인 p(x)에 대해 성경은 “이르되 주 예수를 믿으라 그리하면 너와 네 집이 구원을 받으리라 하고 (사도행전 16:31)” 라고 말합니다. 이건 성경이라는 우리의 공리계 안에서는 따질 필요 없이 참입니다. 이 구절에서 용어를 그대로 따 와서, 어떤 사람이 주 예수를 믿는지의 여부를 알려주는 ‘믿음’이라는 함수를 생각해 보면 다음과 같이 됩니다.

믿음(x) 이면 구원(x) 이다

예를 들어 x에 영희를 대입하면 "믿음(영희) 이면 구원(영희) 이다", 즉 "영희는 주 예수를 믿는다. 그러므로 영희는 구원받았다." 라고 말할 수 있겠습니다.

그러면 구원 받을 수 있는 다른 조건이 있나? 즉 위의 p(x)에 믿음(x) 대신 들어갈 수 있는 함수가 있을까? 하는 궁금증이 생기는데, 그 이야기는 기회가 되면 해 보도록 하겠습니다. 이거 은근 재미있네요 ㅋ

[안드로이드] no original dex files found for dex location


개발중이던 앱 소스 코드를 다른 컴퓨터로 옮기자 앱이 갑자기 안 돌아가서 조금 고생을 했습니다. 로그에는 java.io.IOException: No original dex files found for dex location 이 계속 찍히더라고요. 해결방법은 조금 엉뚱하게도 인스턴트 런 기능을 끄는 것이었습니다.


메뉴에서 차례대로 File -> Settings -> Build, Execution, Deployment -> Instant Run 을 찾아가셔서 Enable Instant Run to hot swap code/resource changes on deploy (default enabled) 라고 되어 있는 부분의 체크를 해제하시면 됩니다.


참조: https://stackoverflow.com/a/34784823/1125721

[안드로이드] undefined reference to `cv::imwrite(cv::String const&, cv::_InputArray const&, std::__ndk1::vector<int, std::__ndk1::allocator<int> > const&)'


안드로이드에서 CMake를 사용해서 OpenCV를 사용한 JNI 함수를 만들다 보면 imwrite 부분이 컴파일이 안 되는 경우가 있습니다. 이 때에는 gradle 파일에 다음과 같이 arguments '-DANDROID_STL=gnustl_shared' 을 추가해 주면 됩니다.


android {

    // ...

    defaultConfig {

        // ...

        externalNativeBuild {

            cmake {

                arguments '-DANDROID_STL=gnustl_shared' // needed to enable imwrite                

            }

        }

    }

}


"뭐뭐 한 것 같아요"의 유해성

"뭐뭐 한 것 같아요" 라는 표현이 무분별하게 사용되면서 한국어를 좀먹고 있다. 그 유해성이 어느 정도인지 알아보기 위해 여러 명언, 명문, 명대사 등에 "뭐뭐 한 것 같아요"를 붙여 보았다.

이순신: 신에게는 아직 열 두 척의 배가 있는 것 같습니다.
갈릴레이: 그래도 지구는 도는 것 같다.
세종대왕: 백성이 하고 싶은 말이 있어도 제 뜻을 능히 펴지 못하는 것이 불쌍한 것 같다.
공자: 멀리서 친구가 찾아오니까 참 기쁜 것 같다.
기미독립선언문: 오등은 자에 아 조선은 독립국인 것 같다.
데카르트: 나는 생각하니까 존재하는 것 같다.
카이사르: 온 것 같고 본 것 같고 이긴 것 같다.
햄릿: 사느냐 죽느냐 그것이 문제인 것 같다.
소크라테스: 너 자신을 알아야 할 것 같다.
블랙 팬서: 와칸다는 영원할 것 같다.
마틴 루터 킹: 나에게는 꿈이 있는 것 같다.
마르크스: 만국의 노동자들이 단결해야 할 것 같다.
관우: 술이 식기 전에 돌아올 것 같소.
지드래곤: 나도 어디서 꿀리진 않는 것 같아.
지하철 안내 방송: 이번 역은 사당, 사당인 것 같습니다. 내리실 문은 왼쪽인 것 같습니다.
용비어천가: 뿌리 깊은 나무는 바람에도 흔들리지 않을 것 같다.
윤동주: 육첩 방은 남의 나라인 것 같다.
김소월: 나 보기가 역겨워 가실 때에는 죽어도 눈물을 안 흘릴 것 같습니다.
히딩크: 나는 아직도 배가 고픈 것 같다.

[자바] 배열 내용 출력하기 (Arrays.toString())


자바에서 배열 내용을 출력해보려고 배열 자체에서 toString()을 사용하면 배열의 내용이 아니라 배열의 주소값이 출력됩니다. 배열의 내용을 출력하려면 Arrays.toString()을 사용해야 합니다. 예제 코드는 아래와 같습니다.


double[] values = {1.0, 1.1, 1.2};

System.out.println(values.toString()); // 이렇게 하면 [D@46a49e6 같은 값이 나옵니다.

System.out.println(Arrays.toString(values)); // 이렇게 하면 [1.0, 1.1, 1.2] 이 출력됩니다.


너무 규칙적이지 말자


종이를 반으로 접었다가 펴는 작업을 반복한다고 생각해 보자. 매번 종이 끝을 정확히 맞추어서 접었다 펴면 모양은 깔끔하겠지만 접힌 부분이 쉬 닳아서 곧 찢어지게 될 것이다. 반대로 종이를 접을 때에 끝을 대충, 적당히만 맞추면 모양은 덜 예쁠지 몰라도 접히는 부분이 분산되어서 종이가 오랫동안 닳지 않을 것이다.


규칙적인 생활도 마찬가지이다. 규칙적인 생활은 좋은 것이지만 너무 칼같이 생활하다 보면 득보다 실이 많아지는 순간이 온다. 내가 규칙적으로 살아야지, 규칙이 나를 살기 시작하면 몸에든 마음에든 무리가 가기 시작한다. 그렇기에 규칙적으로 살되 가끔씩 규칙을 깸으로써 규칙에게 내가 규칙의 주인이지 규칙이 내 주인이 아니라는 것을 보여주어야 한다. 규칙적인 삶은 절대가치가 아니라 우리가 행복하게 살기 위해 사용하는 도구 중 하나일 뿐이다.



'글쓰기 > 수필' 카테고리의 다른 글

천하장사 고양이  (0) 2018.10.30
복덕방과 경복궁, 공인중개사와 청와대  (0) 2018.08.20
더하기와 플러스  (2) 2018.03.07
그 남자 그 여자  (1) 2017.09.25
  (0) 2017.09.10

[안드로이드] error: package R does not exist


error: package R does not exist 는 매니페스트 파일에 액티비티를 적어 주지 않았을 때에 발생합니다.

아래와 같은 식으로 AndroidManifest.xml 파일 안에 액티비티를 적어 주셔야 합니다.


<application>

    ...

    <activity android:name=".MyLovelyActivity"></activity>    

</application>


+ Recent posts