반응형

출처 : https://stackoverflow.com/questions/13322485/how-to-get-the-primary-ip-address-of-the-local-machine-on-linux-and-os-x

리눅스와 OS X에서 현재 컴퓨터의 중요 외부 IP를 알아내는 방법

저는 127.0.0.1보다 현재 컴퓨터(localhost)의 중요(첫 번째) IP 주소를 리턴하는 command를 찾고 있습니다.

이 해결책은 적어도 리눅스(Debian과 Redhat)과 OS X 10.7+에서 작동해야 합니다.

저는 둘다 ifconfig로 가능하지만 이 플랫폼 사이에 출력이 일관성이 없다는 게 문제입니다.


30개의 답변 중 2개의 답변

ifconfig로 부터 grep을 사용하여 IP 주소를 걸러낼 수 있습니다.

ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'

아니면 sed

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

만약 특정 인터페이스인 wlan0, eth0, 등등에만 관심이 있다면 다음처럼 사용가능합니다.

ifconfig wlan0 | ...

예를 들어 myip라 불리는 당신이 명령어를 만들어 .bashrc에 명령어를 별명(alias)으로 사용할 수 있습니다.

alias myip="ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'"

더 간단한 방법은 hostname -I(hostname -ihostname의 옛날 버전에서 되므로 댓글을 보세요.) 입니다. 하지만 리눅스에서만 됩니다.


리눅스에서(OS X 아님) 다음 명령어로 가능합니다.

hostname --ip-address
반응형
반응형

출처

스파크에서 fold action이 왜 필요합니까?

저는 PySpark에서 fold와 reduce에 관한 질문이 있습니다. 이 2개의 메소드의 차이점은 알고 있습니다. 하지만, 둘 다 적용된 함수끼리 교환하여 사용 가능하고 저는 fold가 reduce로 대체될 수 없다는 예시를 알 수 없습니다.

게다가, fold 구현에서 acc = op(obj, acc)가 사용됩니다. 왜 acc = op(acc, obj) 대신에 앞의 연산의 순서가 사용됩니까? (이 두번째 순서는 저에겐 leftFold에 가깝다고 이해됩니다)

토마스가


1개의 답변

빈 RDD

RDD가 비었을 때 그것은 대체될 수 없습니다.

val rdd = sc.emptyRDD[Int]
rdd.reduce(_ + _)
// java.lang.UnsupportedOperationException: empty collection at   
// org.apache.spark.rdd.RDD$$anonfun$reduce$1$$anonfun$apply$ ...

rdd.fold(0)(_ + _)
// Int = 0

당신은 당연히 isEmpty조건과 함께 reduce를 결합하여 사용할 수 있지만 코드는 더 추해집니다.

변경가능한(Mutable) 버퍼

다른 사용 방법은 변경가능(mutable)한 버퍼에 누적하는 것입니다. 다음 RDD가 있다고 생각합시다.

import breeze.linalg.DenseVector

val rdd = sc.parallelize(Array.fill(100)(DenseVector(1)), 8)

모든 요소의 합계를 원한다고 합시다. 소박한 해결책은 +와 함께 하는 겁니다.

rdd.reduce(_ + _)

불행히도 이는 각 요소에 대한 새로운 벡터를 생성합니다. 객체 생성과 계속되는 garbage collection 때문에 비용이 많이 들며 변경가능한(Mutable) 객체를 사용하는 것이 더 좋습니다. 이는 reduce로는 불가능하지만 (모든 요소의 변경불가능성을 내포하지는 않습니다.) 다음처럼 fold로는 이룰 수 있습니다.

rdd.fold(DenseVector(0))((acc, x) => acc += x)

Zero 요소는 실제 데이터를 변경하지 않고 하나의 파티션 당 버퍼를 초기화 함으로서 여기서 사용될 수 있습니다.

이것이 acc = op(acc, obj) 대신에 acc = op(obj, acc) 연산 순서를 사용하는 이유입니다.

SPARK-6416SPARK-7683 내용도 확인해주세요.

반응형
반응형
번역계기

https://www.slideshare.net/madvirus/ss-28761748

위 슬라이드를 보며 Hive에 관한 내용을 읽던 도중 제약 부분에 행 단위 수정/삭제 불가로 쓰여 있는 내용을 보았습니다. 더 자세히 알아보고 싶어 다음처럼 찾아보았고 번역을 하게 되었습니다.


출처 

https://stackoverflow.com/questions/17810537/how-to-delete-and-update-a-record-in-hive

저는 Hadoop, Hive, Hive JDBC를 설치하였습니다. 각자 잘 작동하고 있습니다. 하지만, 아직 문제가 있습니다. MySQL에서 사용하는 delete나 update 명령으로 Hive를 사용하여 하나의 레코드를 삭제하거나 갱신하는 방법이 Hive에서 작동하지 않습니다.

Hive에서 레코드를 지우거나(delete) 갱신하는(update) 방법

저는 Hadoop, Hive, Hive JDBC를 설치하였습니다. 각자 잘 작동하고 있습니다. 하지만, 아직 문제가 있습니다. MySQL에서 사용하는 delete나 update 명령으로 Hive를 사용하여 하나의 레코드를 삭제하거나 갱신하는 방법이 Hive에서 작동하지 않습니다.


감사합니다.

------

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

Hive를 일반적인 RDBMS로 생각하면 안됩니다. Hive는 변하지 않는 데이터의 매우 큰 데이터 집합에 대한 배치처리에 더 적합합니다. 

다음은 Hive 0.14 전 버전에 적용됩니다. 이후 버전은 @ashtonium님의 답변을 보세요.

레코드의 특정부분 집합이나 레코드를 삭제하거나 갱신하는 연산은 없고, 이는 나쁜 스키마의 싸인이라고 생각합니다.

다음은 당신이 찾아볼 수 공식문서에 있는 내용입니다.


하둡은 배치 처리 시스템이고 하둡 작업(jobs)은 대기 시간이 길고 작업 제출 및 스케쥴링에 상당한 오버헤드가 발생합니다. 결과적으로 Hive 쿼리에 대한 대기 시간은 데이터 집합이 매우 적을지라도 (여기서는 몇백메가 단위를 말합니다) 일반적으로 매우 (분 단위) 깁니다. 결국, 분석은 상당히 적은 양에서 실행하지만 몇 분 미만의 반복처리를 하는데 시간이 덜 걸리면서 반복 작업을 더 많이 하는 오라클 같은 시스템과는 비교될 수 없습니다. Hive는 상호작용하는 데이터 검색, 작은 데이터 셋이나 테스트 쿼리에 받아들일 수 있는 (하지만 최적화되지 않은) 대기 시간을 제공하는 게 목표입니다.

Hive는 온라인 트랜잭션 처리를 위해 설계되지 않았고 실시간 쿼리 및 행 단위 update를 제공하지 않습니다. (웹 로그 같은) 변하지 않는 데이터의 큰 집합에 대한 배치 작업에는 최고입니다.


이 한계를 벗어나서 작업하는 방법은 partition을 사용하는 것입니다. 저는 id가 어떻게 대응되는 지는 모르지만, id들의 다른 묶음을 분리해서 얻고 싶다면 id로 나누어서 테이블을 재설계할 수 있습니다. 그렇게 되면 당신이 제거하고 싶은 id들의 파티션을 쉽게 삭제(drop) 할 수 있습니다.

------

Hive 0.14.0부터 ACID 지원과 함께 INSERT... VALUES, UPDATE, DELETE 사용이 가능합니다.

INSERT ... VALUES 문법:

INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]

values_row는 (value [, value ...]) 이며 각 value는 null이나 다른 SQL에 적합한 리터럴입니다.


UPDATE 문법:

UPDATE tablename SET column = value [, column = value ...] [WHERE expression]

DELETE 문법:

DELETE FROM tablename [WHERE expression]

추가하면 Hive 트랜잭션 문서 내용입니다.

Hive 0.14.0부터 테이블이 ACID 쓰기(insert, update, delete)로 사용된다면 그 테이블 속성은 "트랜잭션"으로 그 테이블에 설정되어 있어야 합니다. 이 값이 없다면 insert는 이전 방식으로 작동되며; update와 delete는 제한될 것입니다.


Hive DML 참조:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML 

Hive 트랜잭션 참조:

https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions

반응형
반응형

가상화폐 알림봇

소개

홈페이지 : p2pcbot.ga:3000
텔레그램 아이디 : p2pcbot
가상화폐거래소 시세를 대략 매초마다 수신하여 등록하신 조건에 맞을 경우 알림메세지를 보냅니다.

사용법
set
웹을 통해 조건을 설정합니다.
ls
조건목록을 확인합니다.
rm 번호
번호에 해당하는 조건을 삭제합니다.

지원코인 종류
BTC비트코인
ETH이더리움
XRP리플
BCH비트코인 캐시
LTC라이트코인
EOS이오스
DASH대시
XMR모네로
ETC이더리움 클래식
QTUM퀀텀
ICX아이콘
BTG비트코인 골드
ZEC제트캐시
% 코인 숫자
해당 코인의 등락율이 해당 숫자(0.1) 이상, -숫자(-0.1) 이하면 알려주는 조건을 등록합니다.

cu 코인 숫자
해당 코인의 종가가 해당 숫자 이상이면 알려주는 조건을 등록합니다.

cd 코인 숫자
해당 코인의 종가가 해당 숫자 이하면 알려주는 조건을 등록합니다.

제안

이 서비스에서 사용하면 좋은 키워드나 제안하시고 싶은 기능 등을 적어주세요.
또한, 이 프로그램의 후기나 개선사항 등도 적어주세요.


반응형
반응형

출처 : https://stackoverflow.com/questions/11892729/how-to-log-in-to-a-website-using-pythons-requests-module/

Python의 Requests 모듈을 사용하여 웹사이트에 "로그인"하는 방법

저는 Python으로 Requests 모듈을 사용하여 웹사이트로 로그인하는 요청을 post 방식으로 처리하려 합니다만 잘 작동하지 않습니다. 저는 이걸 처음 해 봅니다... 그래서 제 사용자명과 비밀번호 쿠키나 HTTP 인증 같은 형태를 만들어야 하는지 알 수 없습니다.

from pyquery import PyQuery
import requests

url = 'http://www.locationary.com/home/index2.jsp'

지금부터 저는 "post" 방식과 쿠키를 사용합니다.

ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}

r = requests.post(url, cookies=ck)

content = r.text

q = PyQuery(content)

title = q("title").text()

print title

저는 쿠키에서 뭔가 잘못하고 있는 거 같지만... 모르겠습니다.

제가 정확히 로그인하지 못 했다면, 홈페이지 제목은 "Locationary.com"이 나올 것이고 로그인을 했다면 "Home Page"가 되어야 합니다.

만약 requests와 쿠키에 관한 몇가지를 저에게 설명해 주시고 이에 관해 저를 도와주신다면 정말 감사하겠습니다.

감사합니다.

... 아직 잘 작동하지는 않지만 로그인 전에 홈페이지의 HTML은 다음처럼 나옵니다.

저는 잘하고 있다고 생각하지만, 출력은 아직 "Locationary.com"입니다.

2번째 편집:

저는 그 도메인의 페이지를 요청할 때마다 오래동안 로그인을 유지할 수 있기를 원합니다. 제가 로그인을 했다면 나타날 그 내용이 나타나기를 원합니다.


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

저는 당신이 다른 해결책을 찾았다는 것을 알고 있지만 저처럼 이 질문의 해결책 혹은 같은 질문을 찾기 원하는 사람들을 위해 다음처럼 requests를 사용하여 할 수 있습니다.

첫째, 마커스(Marcus)가 한 것처럼 로그인 form(양식)에 post할 URL, 사용자이름과 비밀번호 필드의 name 속성을 소스에서 확인합니다. 그의 예시에서는 inUserName과 inUserPass 입니다.

일단, payload로 로그인 세부 정보를 post 방식으로 요청하기 위해 request.Session() 인스턴스를 사용할 수 있습니다. Session 인스턴스로부터 요청하는 것은 본질적으로 일반적인 requests를 사용하는 것과 같습니다. 이는 간단하게 쿠키들을 사용하고 저장하도록 하는 지속성이 추가된 것입니다.

당신의 로그인 시도가 성공적이었다 가정하면 그 사이트에서 이후 요청을 하기 위해 session 인스턴스를 간단하게 사용할 수 있습니다. 당신을 식별하기 위한 쿠키가 요청을 승인하는 데 사용됩니다.

예시

import requests

# 로그인 form에 post 방식으로 전송될 세부 내용을 작성합니다.
payload = {
    'inUserName': 'username',
    'inUserPass': 'password'
}

# 'with'는 사용한 뒤에 session이 닫히도록 보장합니다.
with requests.Session() as s:
    p = s.post('LOGIN_URL', data=payload)
    # 성공적으로 로그인 했는지 보기 위해 더 현명하게 어떤게 리턴되었는지 html을 출력합니다.
    print p.text

    # 승인된 요청
    r = s.get('A protected web page url')
    print r.text
        # 기타...
반응형
반응형
출처 

http://www.linuxproblem.org/art_9.html

비밀번호 없이 SSH 로그인

목표

당신이 리눅스를 사용하고 당신의 작업을 자동화하기 위해 OpenSSH를 사용하기 원합니다. 그래서 당신은 host A / 사용자 a에서 호스트 B / 사용자 b로 자동 로그인이 필요합니다. 당신은 쉘 스크립트(shell script)로 ssh를 호출하고 싶기 때문에 비밀번호를 입력하길 원하지 않을것입니다.

방법

우선 호스트 A에서 a 사용자로 로그인하여 인증 키 쌍을 생성합니다. passphrase는 입력하지 않습니다.

a@A:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa):
Created directory '/home/a/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A


이제 호스트 B에서 b 사용자로 ssh 프로그램을 사용하여 ~/.ssh 디렉터리를 만듭니다. (디렉터리가 이미 있을지 모르지만 괜찮습니다.)

a@A:~> ssh b@B mkdir -p .ssh
b@B's password:


마지막으로 a 사용자의 새로운 공개키를 b@B:.ssh/authorized_keys에 추가하고 마지막으로 b 사용자의 비밀번호를 입력합니다.

a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
b@B's password:


이제부터 비밀번호 없이 호스트 B의 b 사용자로 로그인 할 수 있습니다.

a@A:~> ssh b@B


독자중 한명으로부터 당신의 SSH 버젼에 따라 당신은 다음 작업을 해야할 수 있습니다. 

  • .ssh/authorized_keys2에 public key를 넣습니다.
  • .ssh 디렉터리 권한을 700으로 변경(chmod)합니다.
  • .ssh/authorized_keys2의 권한을 640으로 변경합니다.

다음 출처 : https://opentutorials.org/module/432/3742

역자 추가내용 : 호스트 B의 b 사용자는 .ssh 디렉터리에 다음 권한처럼 설정이 필요합니다.

1
2
3
4
5
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub 
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts


반응형
반응형

출처 : https://stackoverflow.com/questions/3413166/when-does-a-process-get-sigabrt-signal-6

언제 프로세스가 SIGABRT (시그널6)을 얻습니까?

프로세스가 C++에서 SIGABRT를 얻는 시나리오에는 어떤 것이 있습니까? 이 시그널은 프로세스 내에서만 항상 오는 건지 아니면 이 시그널이 한 프로세스에서 다른 데로 보내질 수 있나요?

어떤 프로세스가 이 시그널을 보내는지 확인하는 방법이 있습니까?


11개의 답변 중 1 개의 답변

abort()는 호출한 프로세스에게 SIGABRT 시그널을 보내고 이는 abort()가 기본적으로 작동하는 방법입니다.

보통 abort()는 내부 오류 또는 심각하게 깨진 제약 조건을 감지하는 라이브러리 함수에 의해 호출됩니다. 예를 들어 malloc()은 내부 구조가 힙 오버플로에 의해 손상된 경우 abort()를 호출합니다.

반응형
반응형
출처 

https://unix.stackexchange.com/questions/3586/what-do-the-numbers-in-a-man-page-mean

man 페이지에 숫자들은 무엇입니까?

예를 들면, 제가 man ls를 쳤을 때 저는 LS(1)볼 수 있습니다. 하지만 man apachectl을 쳤을 때 APACHECTL(8)을 볼 수 있었고 man cd를 쳤다면 cd(n)로 끝났습니다.

저는 괄호 안에 숫자의 의미가 무엇인지 궁금합니다.

 

------

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

 

숫자는 페이지의 매뉴얼이 무슨 섹션인가를 뜻합니다. 1은 사용자 명령이고 8은 시스템 관리 도구입니다. man 페이지 그 자체(man man )는 이를 설명하고 그 표준을 보여줍니다.

매뉴얼 섹션매뉴얼의 표준 섹션은 다음을 포함합니다.1 사용자 명령2 시스템 콜3 C 라이브러리 함수4 장치와 특별한 파일5 파일 포멧과 규칙6 게임 외7 기타8 시스템 관리 도구 및 대몬매뉴얼 배포는 추가적인 섹션을 주로 포함하는 그 세부사항에 대한 매뉴얼 섹션을 사용자 정의합니다.

다른 섹션에 특정 용어가 있을 수 있습니다. (예 섹션 1에 shell 명령으로

printf

와 섹션 3에

stdlib

 라이브러리 함수로써 printf) 이런 경우 man 명령어에 섹션 번호를 전달하여 원하는 것을 선택하거나 man -a를 사용하여 일치하는 모든 페이지를 연속으로 표시할 수 있습니다.

$ man 1 printf $ man 3 printf $ man -a printf

man -k (apropos 명령과 같음)를 통해 용어가 어느 섹션에 속하는지 물어볼 수 있습니다. 이는 부분문자열이 일치 하더라도 찾을 것입니다. (

man -k printf

를 실행한다면 sprintf를 보여줄 것입니다.) 그래서 이를 제한하려면

^용어

를 사용해야 합니다.

$ man -k '^printf' printf (1) - format and print data printf (1p) - write formatted output printf (3) - formatted output conversion printf (3p) - print formatted output printf [builtins] (1) - bash built-in commands, see bash(1)

섹션에는 때때로 하위 섹션이 포함될 수 있습니다 (예 : 위의 1p 및 3p의 p). p 하위 섹션은 POSIX 사양을 위한 것입니다. x 하위 섹션은 X Window System 문서 용입니다.

반응형
반응형

'밑바닥부터 시작하는 딥러닝' 책 스터디 한 내용 정리해서 jupyter notebook 으로 올립니다 

밑바닥부터 시작하는 딥러닝

Deep Learning from Scratch

Github

https://github.com/WegraLee/deep-learning-from-scratch

책주소

http://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198

title

1장

http://nbviewer.jupyter.org/github/SDRLurker/deep-learning/blob/master/1장.ipynb

2장

http://nbviewer.jupyter.org/github/SDRLurker/deep-learning/blob/master/2장.ipynb

3장

http://nbviewer.jupyter.org/github/SDRLurker/deep-learning/blob/master/3장.ipynb

4장

http://nbviewer.jupyter.org/github/SDRLurker/deep-learning/blob/master/4장.ipynb

5장

http://nbviewer.jupyter.org/github/SDRLurker/deep-learning/blob/master/5장.ipynb

6장

http://nbviewer.jupyter.org/github/SDRLurker/deep-learning/blob/master/6장.ipynb


반응형
반응형

출처 : https://stackoverflow.com/questions/12845206/check-if-file-exists-on-remote-host-with-ssh

ssh로 원격 호스트의 파일이 존재하는 지 확인

저는 원격 호스트에서 특정 파일이 있는지 확인하고 싶습니다. 그래서 다음을 시도했습니다.

$ if [ ssh reg@localhost -p 19999 -e /home/reg/Dropbox/New_semiosNET/Research_and_Development/Puffer_and_Traps/Repeaters_Network/UBC_LOGS/log1349544129.tar.bz2 ] then echo "okidoke"; else "not okay!" fi
-sh: syntax error: unexpected "else" (expecting "then") 

13개의 답변 중 1 개의 답변

여러 답변에 근거하여 다음처럼 짧게 사용하는 방법이 있습니다.

ssh -q $HOST [[ -f $FILE_PATH ]] && echo "File exists" || echo "File does not exist";

-q는 quiet 모드입니다. 이는 warning과 메세지를 덜 나오게 할 것입니다.

@Mat님이 언급했듯이 이처럼 테스트하는 것의 이득은 -f-nt, -d, -s... 등과 같은 다른 테스트 연산자로 쉽게 바꿀 수 있기 때문에 좋습니다.

테스트 연산자: http://tldp.org/LDP/abs/html/fto.html

반응형

+ Recent posts