반응형

CentOS6에서 gradle을 설치할 일이 있어서 다음 주소들을 참고하여 shell 스크립트를 만들었습니다 :)
참고

Gradle 설치

  • install-gradle-centos.sh
    • root 계정에서 다음 스크립트를 실행하여 설치하였습니다.
# installs to /opt/gradle
# existing versions are not overwritten/deleted
# seamless upgrades/downgrades
# $GRADLE_HOME points to latest *installed* (not released)
gradle_version=3.4.1
wget -N https://services.gradle.org/distributions/gradle-${gradle_version}-all.zip
unzip gradle-${gradle_version}-all.zip -d /opt/gradle
ln -sfn gradle-${gradle_version} /opt/gradle/latest
printf "export GRADLE_HOME=/opt/gradle/latest\nexport PATH=\$PATH:\$GRADLE_HOME/bin" > /etc/profile.d/gradle.sh
. /etc/profile.d/gradle.sh
# check installation
gradle -v
반응형
반응형

출처
https://stackoverflow.com/questions/375427/non-blocking-read-on-a-subprocess-pipe-in-python

python에서 subprocess.PIPE로 non-blocking 읽기

저는 subprocess를 시작하기 위해 을 출력 스트림(표준출력)으로 접속하기 위해 subprocess 모듈을 사용하고 있습니다. 저는 그 출력을 non-blocking으로 읽도록 실행하고 싶습니다. .readline을 non-blocking으로 만들거나 .readline를 실행하기 전에 스트림에 데이터가 있는지 검사하는 방법이 있습니까? 저는 이를 Windows나 Linux에서 최소한의 작업으로 이식하고 싶습니다.
여기는 현재 제가 한 방법입니다. (데이터가 없을 때 .readline는 blocking됩니다.)

p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE)
output_str = p.stdout.readline()

29개의 답변 중 1개의 답변만 추려냄

fcntl, select, asyncproc는 이 경우 도움이 되지 않을 것입니다.
운영체제에 관계없이 blocking 없이 스트림을 읽는 신뢰성 있는 방법은 Queue.get_nowait()를 사용하는 것입니다.

import sys
from subprocess import PIPE, Popen
from threading  import Thread

try:
    from queue import Queue, Empty
except ImportError:
    from Queue import Queue, Empty  # python 2.x

ON_POSIX = 'posix' in sys.builtin_module_names

def enqueue_output(out, queue):
    for line in iter(out.readline, b''):
        queue.put(line)
    out.close()

p = Popen(['myprogram.exe'], stdout=PIPE, bufsize=1, close_fds=ON_POSIX)
q = Queue()
t = Thread(target=enqueue_output, args=(p.stdout, q))
t.daemon = True # 쓰레드가 프로그램과 함께 죽습니다.
t.start()

# ... 여기서 다른 것을 합니다

# blocking 없이 한 줄을 읽습니다.
try:  line = q.get_nowait() # or q.get(timeout=.1)
except Empty:
    print('no output yet')
else: # 한 줄을 얻었습니다.
    # ... 그 한 줄로 뭔가를 합니다.
반응형
반응형

출처
https://stackoverflow.com/questions/4824590/propagate-all-arguments-in-a-bash-shell-script

bash 쉘 스크립트에서 모든 인수를 전달

저는 다른 스크립트를 호출하는 애무 간단한 스크립트를 작성하였고 현재 스크립트로부터 실행할 스크립트로 파라미터를 전달할 필요가 있습니다.
예를 들어 제 스크립트는 foo.sh이고 bar.sh를 호출합니다.
foo.sh:

bar $1 $2 $3 $4

각 파라미터를 명시적으로 지정하지 않고 이를 어떻게 할 수 있을까요?


8개의 답변 중 1개의 답변만 추려냄

같은 것을 파라미터로 사용하길 원하신다면 순수한 $@대신에 "$@"를 사용하세요.
확인:

$ cat foo.sh
#!/bin/bash
baz.sh $@

$ cat bar.sh
#!/bin/bash
baz.sh "$@"

$ cat baz.sh
#!/bin/bash
echo Received: $1
echo Received: $2
echo Received: $3
echo Received: $4

$ ./foo.sh first second
Received: first
Received: second
Received:
Received:

$ ./foo.sh "one quoted arg"
Received: one
Received: quoted
Received: arg
Received:

$ ./bar.sh first second
Received: first
Received: second
Received:
Received:

$ ./bar.sh "one quoted arg"
Received: one quoted arg
Received:
Received:
Received:
반응형
반응형

출처
https://stackoverflow.com/questions/37791685/what-is-the-use-case-for-start-awaittermination-and-stop-with-regard-to-sp

스파크 스트리밍에 관해 start(), awaitTermination(), stop()의 사용 사례는 무엇입니까?

저는 스파크 스트리밍 초보입니다. 저는 터미널에서 데이터를 추출하여 HDFS로 불러오는 하나의 응용프로그램을 개발하고 있습니다. 인터넷에서 찾아 보았지만 스트리밍 응용프로그램을 멈추는 방법을 이해할 수 없었습니다.

또한 sc.awaittermination()과 sc.stop()의 사용 사례를 저에게 설명해 주실 수 있으신가요?

감사합니다.


2개의 답변 중 1개의 답변만 추려냄

streamingContext.awaitTermination() --> 사용자로부터 종료 신호를 기다립니다. 사용자로부터 신호를 받을 때(예시 CTRL+c 또는 SIGTERM) 스트리밍 context는 멈출 것입니다. 이는 java의 shutdownhook 종류입니다.

streamingContext.stop() --> 스트리밍 context를 바로 멈춥니다. 스파크 context에 관해 스트리밍 context에 말할 수 있습니다. 만약 스파크 context가 아니고 스트리밍 context만 멈추기를 원한다면 streamingContext.stop(false)를 호출할 수 있습니다.

반응형
반응형

CentOS6 Docker설치

Docker 1.7.1 Download

centos ~]$ curl -O -sSL https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
centos ~]$ sudo yum -y localinstall --nogpgcheck docker-engine-1.7.1-1.el6.x86_64.rpm
centos ~]$ sudo service docker start

일반 계정(centos) 유저로 실행

centos ~]$ sudo usermod -aG docker centos
centos ~]$ sudo service docker restart

https://github.com/SDRLurker/TIL/blob/master/docker/centos6_install.md

반응형
반응형

출처 : https://stackoverflow.com/Questions/4374455/how-to-set-sys-stdout-encoding-in-python-3

Python3에서 sys.stdout 인코딩 하는 방법

Python 2에서 기본 출력 인코딩으로 설정하는 것은 잘 알려진 구문입니다.

sys.stdout = codecs.getwriter("utf-8")(sys.stdout)    

이는 UTF-8로 출력을 인코딩하여 codec writer에서 sys.stdout를 포장(wrap)합니다.

하지만, 이 기술은 Python 3 에서는 작동하지 않습니다. 그 이유는 sys.stdout.write()str를 예상하는데 인코딩의 결과는 bytes이고 codecs가 원래 sys.stdout로 인코딩된 바이트배열을 출력하려고 할 때 오류가 발생합니다.

Python 3에서 이를 할 수 있는 올바른 방법은 무엇입니까?


7개의 답변 중 2개의 답변만 추려냄.

Python 3.7부터 당신은 reconfigure()로 표준 스트림의 인코딩을 변경할 수 있습니다.

sys.stdout.reconfigure(encoding='utf-8')

당신은 errors 파라미터를 추가하여 인코딩 오류가 다뤄질 수 있도록 수정할 수 있습니다.


Python 3.1에 io.TextIOBase.detach()가 추가되었습니다. 다음은 sys.stdout에 대한 문서 내용입니다.

표준 스트림은 기본으로 text 모드입니다. 이 스트림에 이진(binary) 데이터를 쓰거나 읽기 위해 기본 바이너리 버퍼를 사용합니다. 예를 들어 stdout에 바이트 배열을 쓰기 위해 sys.stdout.buffer.write(b'abc')를 사용합니다. io.TextIOBase.detach()를 사용함으로써, 스트림은 기본으로 바이너리가 될 수 있습니다. 이 함수는 바이너리로 stdinstdout을 설정합니다.

def make_streams_binary():
    sys.stdin = sys.stdin.detach()
    sys.stdout = sys.stdout.detach()

그리하여, Python 3.1 이상에서 대응되는 구문은 다음과 같습니다.

sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
반응형
반응형

출처

https://stackoverflow.com/questions/7749530/what-is-the-difference-between-and-in-scala/7749570

스칼라에서 \=:=의 차이점은 무엇입니까?

스칼라에서 \=:=의 차이점은 무엇입니까?

저는 "스칼라 :=(콜론 이퀄)"에 관해 광범위하게 구글링 해보았지만 결정적인 어떤 것도 찾지 못했습니다.


4개의 답변 중 1개의 답변

스칼라에서 =는 실제 대입 연산자입니다. 몇 가지 특정 작업을 수행하지만 다음과 같은 대부분의 경우 제어할(다시 정의할) 권한이 없습니다.

  • 생성할 때 val 또는 var 형태의 값을 제공

  • var 의 값을 변경

  • 클래스에서 필드의 값을 변경

  • type alias를 생성

  • 아마 다른 것들

:=는 내장된(build-in) 연산이 아닙니다. 누구든 원하는 대로 의미를 정의하고 오버로딩할 수 있습니다. :=를 사용하기 좋아하는 이유는 매우 대입 연산자처럼 보이고 다른 언어에서 대입 연산자로 사용하고 있기 때문입니다.

그래서 당신이 사용하고 있는 라이브러리에서 :=가 뜻하는 것을 찾아보는 시도가 필요합니다. := 이름의 메소드를 Scaladocs(만약 있다면)를 통해 살펴보시는 것을 권유합니다.

반응형
반응형

tf.placeholder와 tf.Variable의 차이점은 무엇입니까?

저는 텐서플로우 뉴비입니다. 저는 tf.placeholdertf.Variable의 차이점이 해깔립니다. 제 관점에서 tf.placeholder는 입력 데이터를 위해 사용되고 tf.Variable은 데이터의 상태를 저장하는 데 사용됩니다. 이것이 제가 알고 있는 것의 전부입니다.

이 둘의 차이점을 더 자세하게 설명해 주실 분이 있으신가요? 특별히 언제 tf.placeholder를 사용하고 또한 언제 tf.Variable을 사용하나요?


14개의 답변 중 1 개의 답변만 추려냄.

간단히, 당신의 모델에서 가중치(W, weights)와 편향(B, Bias) 처럼 학습 가능한 변수를 위해 tf.Variable를 사용합니다.

weights = tf.Variable(
    tf.truncated_normal([IMAGE_PIXELS, hidden1_units],
                    stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))), name='weights')

biases = tf.Variable(tf.zeros([hidden1_units]), name='biases')

tf.placeholder는 실제 학습 예시를 공급(feed)하는 데 사용됩니다.

images_placeholder = tf.placeholder(tf.float32, shape=(batch_size, IMAGE_PIXELS))
labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))

다음은 학습되는 동안 학습 예시를 공급(feed)하는 방법입니다.

for step in xrange(FLAGS.max_steps):
    feed_dict = {
       images_placeholder: images_feed,
       labels_placeholder: labels_feed,
     }
    _, loss_value = sess.run([train_op, loss], feed_dict=feed_dict)

당신의 tf.variables는 이 학습의 결과로서 (수정되고) 학습될 것입니다.

더 자세한 내용은 https://www.tensorflow.org/versions/r0.7/tutorials/mnist/tf/index.html에서 확인하세요. (예시는 웹 페이지에서 가져왔습니다.)

반응형
반응형

출처

https://serverfault.com/questions/59140/how-do-diff-over-ssh


ssh로 원격 diff 하는 방법

ssh로 접속만이 가능한 원격 머신에 있는 파일이나 폴더를 diff를 어떻게 할 수 있을까요?

------

14개의 답변 중 1 개의 답변만 추려냄.

Bash의 process substitution으로 당신은 원격 diff를 하실 수 있습니다.

diff foo <(ssh myServer 'cat foo')

또는 둘다 원격 서버라면 다음처럼 가능합니다.

diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')


반응형
반응형

출처

https://serverfault.com/questions/914476/cant-access-mariadb-from-google-cloud-compute-instance


구글 클라우드 / Compute 인스턴스로부터 MariaDB에 접근할 수 없습니다.

저는 구글 클라우드 / Compute 인스턴스에서 실행하고 있는 Mysql에 원격 접근을 할 수 없는 거 같습니다. 저는 기본 설치를 시도하였습니다.

1. 저는 인스턴스를 기본값인 Debian을 사용하여 만들었습니다.

2. mysql을 apt-get install로 설치했고 설명하기 어렵지만 대신 MariaDB를 설치했습니다. 잘됩니다.

3. 저는 sudo mysql mysql_secure_installation을 prompt에 따라서 를 실행하였습니다. 설명하기 어렵지만 sudo를 사용하여 local 접근만 허용하기 위해 "root"를 위한 mysql.users 행을 "unix_socket"의 플러그인 열 값으로 나두었습니다.  잘 되었고 새로운 사용자를 추가하려고 합니다.

4. 저는 local에서 로그인하고 다음을 실행하였습니다.

create user 'myname'@'%' identified by 'mypass';

grant all privileges on * . * to 'mypass'@'%';

flush privileges;


저는 localhost에서 'myname'을 사용하여 접속할 수 있었습니다.

5. 저는 구글 클라우드 방화벽에서 8088 포트와 똑같은 규칙으로 만들었고 그 포트가 원격에서 잘 접속을 할 수 있었기 때문에 0.0.0.0/0으로 3306 포트를 열었습니다. 

6. 저는 원격에서 mysql을 접속했을 때 다음과 같은 내용을 얻었습니다.

이는 네트워크 문제일 수도 mysql 문제일 수도 있을 거 같은데 어느쪽인지 저는 모르겠습니다. 좋은 아이디어 있으신가요?

------

1개의 답변 중 1 개의 답변만 추려냄(자문자답)

알아내었습니다. /etc/mysql/maria.conf.d/50-server.cnf 설정 파일 깊은 곳에 뭍여 있었습니다. 그 파일에 놀라운 부분이 있었습니다.

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address        = 127.0.0.1

bind-address 부분을 주석처리 하니 잘 작동하였습니다.

이것은 MySql을 요청할 때 Debian으로 MariaDB를 설치하는 것은 예외적으로 나쁜 결정의 결과입니다. mysql*과 mariadb*라는 이름으로 복잡한 설정 파일들이 있는데 아무도 그 파일들이 하고자 하는 일을 하지 않습니다.

반응형

+ Recent posts