'CrazySoftware'에 해당되는 글 44건

  1. 2014.12.08 redhat, fedora, centos에 pip 설치 하기
  2. 2014.12.08 redhat, fedora, centos 유저 추가 및 sudo 권한
  3. 2014.10.10 이해안되는 스칼라 - 1
  4. 2014.09.21 square otto
  5. 2014.06.23 scp
  6. 2014.06.21 AWS S3, CloudFront 사용법 (4)
  7. 2014.06.03 screen
  8. 2012.06.02 할게 많네...
  9. 2012.05.14 고급 Bash 스크립팅 가이드
  10. 2012.05.10 VS2010 팁
CrazySoftware2014. 12. 8. 01:13

ubuntu는 바로 pip 설치하면 되겠지만, redhat, fedora, centos는 rpm을 사용해야 한다.


먼저, rpm을 볼 필요가 있다. rpm은 패키지를 관리하기 위한 도구로 사용 하기도 한다.


http://ko.wikipedia.org/wiki/RPM_패키지_매니저


기본적으로 미니멀버전에서는 gcc와 python-devel도 깔려 있지 않아서, 설치를 해야 한다.


$yum install gcc python-devel


$rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

$yum install -y python-pip



Posted by Arnold Arnny

댓글을 달아 주세요

CrazySoftware2014. 12. 8. 01:07

이 설명은 redhat, fedora, centos 기반으로 합니다.

그리고 모두 root 권한으로 실행해야 한다.


유저 생성

$adduser testme


패스워드 변경

$chpasswd testme


한 번에 하기

$adduser testme ; echo 'testme:passwd' | chpasswd



redhat, fedora, centos는 wheel 이라는 그룹이 있다.

이 그룹은 유저들중에 sudo 권한을 주고 싶을 때 사용 할 수 있다.

먼저, 유저를 wheel 그룹안에 집어 넣고, wheel 그룹이 sudo를 사용 할 수 있도록 설정하면 된다.

기본적으로 redhat, fedora, cents 에서 wheel 그룹은 sudo권한을 갖지 않는다.


/etc/sudoers 에서 설정을 변경하면 wheel 그룹이 sudo를 사용 할 수 있다.

#%wheel    ALL=(ALL)    ALL

위에 있는 부분의 주석을 제거하면 된다.


특정 사용자를 wheel 그룹에 넣는다.

$usermod -aG wheel testme


보통은 /etc/sudoers에 있는 부분의 주석 처리를 삭제하지만, 스크립트로 하려면 아래처럼 하면 된다.

$echo -e '%wheel\tALL=(ALL)\tALL' >> /etc/sudoers





Posted by Arnold Arnny

댓글을 달아 주세요

CrazySoftware2014. 10. 10. 18:59

fpis 책의 연습문제 3.13번의 해답중에 아래와 같은게 있다.

진짜 도저히 모르겠음. 이거 무슨 소린지...


 /*

  The implementation of `foldRight` in terms of `reverse` and `foldLeft` is a common trick for avoiding stack overflows when implementing a strict `foldRight` function as we've done in this chapter. (We'll revisit this in a later chapter, when we discuss laziness).

  

  The other implementations build up a chain of functions which, when called, results in the operations being performed with the correct associativity. We are calling `foldRight` with the `B` type being instantiated to `B => B`, then calling the built up function with the `z` argument. Try expanding the definitions by substituting equals for equals using a simple example, like `foldLeft(List(1,2,3), 0)(_ + _)` if this isn't clear. Note these implementations are more of theoretical interest - they aren't stack-safe and won't work for large lists.

*/


def foldRightViaFoldLeft[A,B](l: List[A], z: B)(f: (A,B) => B): B = 

  foldLeft(reverse(l), z)((b,a) => f(a,b))

  

def foldRightViaFoldLeft_1[A,B](l: List[A], z: B)(f: (A,B) => B): B = 

  foldLeft(l, (b:B) => b)((g,a) => b => g(f(a,b)))(z)

Posted by Arnold Arnny

댓글을 달아 주세요

CrazySoftware2014. 9. 21. 23:38

 otto는 안드로이드 앱 내부에서 커플링을 줄여주는 라이브러리이다.

 이유는 모바일 앱이라서 어쩔수 없이 사용자를 기다리게하면 화를 내니까 비동기로 처리 할 수 밖에 없는데, 비동기로 처리한 결과 값을 원하는데 전달하려면 콜백을 쓸수 밖에 없다.  근데 콜백 함수를 써보면 알겠지만 보일러플레이트가 어마어마하다. 그거 일일이 다 손으로 짜다가는 코드가 넝마주의가 되고, 퇴근 시간도 자연스럽게 늦어진다. 물론 디버깅 할 때도 헬게이트 열림. 그 때 otto는 빨리 집에 갈 수 있게 해준다.


 개발을 하다보면 여러 UI 요소들이 중첩 되는 경우가 자주 생긴다. 그리고 그 UI 요소에서 발생한 이벤트를 상위 레이어에서 받고 싶을 때가 있다. 



 이런 경우가 좋은예...listview 하나 있고, 그 밑에 textview가 하나 있고, 좌우로 imagebutton이 있다. 근데, 실제로 메세지 전송을 누르면... -_-... listview에 내가 쓴 글을 추가해야한다. 이 때 실제로 글을 추가하는건 listview를 가지고 있는 activity나 fragment에서 할일이다.


 이런 경우 보통 콜백을 쓰지만, 자바는 그런거 없다. 인터페이스 정의하고 setUpdateMessageListView 같은걸 정의하고.. 부들부들.


 이럴 때 otto를 쓰게 된다. otto는 subscribe와 publish를 통해서 간단하게 메세지를 주고 받는 인터페이스이다. 아 물론 이런게 멀티쓰레드 지원안하면 안된다. 지원한다. 잘됨.


 사용법은 링크에서 확인하세요.

http://square.github.io/otto/



Posted by Arnold Arnny

댓글을 달아 주세요

CrazySoftware2014. 6. 23. 15:37

scp

리눅스 에서는 ssh를 이용해서 다른서버에서 local로 파일을 복사 할 수 있다.


$scp [from 파일] [to 파일]


예를 들어서 www.example.com 이라는 호스트를 가진 서버에, /home/example/asdf.zip 파일이 있다고 가정하자.

사용자 아이디는 물론 example 일 것 이다.


예1) 현재 경로로 다운로드

$scp example@www.example.com:/home/example/asdf.zip .


맨 뒤에 있는 . 을 빼먹으면 안된다. '.'의 의미는 현재 명령어를 입력하는 위치라는 의미이다.


예2) 특정 경로로 다운로드

$scp example@www.example.com:/home/example/asdf.zip /tmp

www.example.com에 유저아이디 example로 로그인 하고, /home/example/asdf.zip 파일을 복사해서 /tmp로 복사한다.


예3) 폴더에 있는 모든 파일

$scp -r example@www.example.com:/home/example /tmp


Posted by Arnold Arnny

댓글을 달아 주세요

CrazySoftware2014. 6. 21. 00:07

*  S3

S3는 스토리지이다. 가상의 공간에 파일 등의 기타 자료를 올릴 수 있다.


S3에는 버킷을 생성 할 수 있다. 버킷은 여러개의 폴더 및 파일을 담는 통으로 생각하면 된다.


버킷은 특성을 가지도록 하는 것이 좋다. 왜냐하면 나중에 이 버킷을 기준으로 CloudFront 서버를 생성 할 수 있기 때문이다.


* Cloud Front

CF는 CDN서비스라고 할 수 있다. CDN은 중간에 정적 데이터를 미리 캐시해서 서비스 해준다. 특히 아마존 같은 경우에는 전세계에 흩어진 40여개의 Edge에 미리 캐시 했다가 땡겨오는 식이다. 한국에도 이 Edge가 생겨서 요새는 이쪽도 좋은 것 같다.


* S3 버켓 생성 및 파일 업로드


AWS에 S3 메뉴에 들어가면 이런식으로 버켓을 생성 할 수 있다.


버켓을 만들 때는 이름을 '.'과 숫자, 영문을 제외 하고는 사용하지 않는 것이 좋다. 왜냐하면 CF하고 붙일 때 다시 만들어야 할 수도 있다.



그리고 버켓을 클릭해서 들어간 다음에 파일을 업로드 하자. 



* Cloud Front 생성

마찬 가지로 상단의 Services를 클릭해서 Cloud Front를 클릭하면 된다. 그리고 좌측에 있는 Distribution을 누르면 아래 같은 화면이 뜨는데 여기서 Create Distribution을 누르면 된다. 그리고 나면 헬게이트가 열린다.

 "아, 난 졸라 가벼운 마음으로 세팅하러 왔는데 이거 뭐지..." 하는 생각이 절로 든다.


Step 1: Select delivery method

여기서는 Web과 RTMP중 하나를 선택하게 되는데, 어도비 플래시 미디어 서버의 RTMP 프로토콜을 쓰면 RTMP를 선택하고, 나머지는 Web을 가벼운 마음으로 선택하면 된다.


Step 2:Create distribution

여기서 진짜가... ㄷㄷ


먼저 Origin Domain Name을 선택 한다. 바로 아마존 S3 버킷을 선택 하면 , Origin ID도 자동으로 등록 된다.


Viewer Protocol Policy는 HTTP와 HTTPS를 모두 쓰게 하는 것, HTTP로 들어오면 HTTPS로 포워딩, HTTPS만 사용 3가지가 있다. 그냥 HTTP and HTTPS 쓰면 편한것 같다.


Allowed HTTP Method에는 GET, HEAD와 다른 HTTP 프로토콜을 같이 사용하는 메뉴가 있다. 낌새만 봐도 알 수 있듯이 DELETE나 POST같은 걸로 파일을 올리거나 삭제 할 수도 있는것같다. 하지만 CDN에다가 파일 업로드하는 경우가 있나?

그래서 그냥 GET, HEAD 선택 하면 좋다.

Object Caching은  Use Origin Cache Headers와 Customize 2종류가 있다. 아까말한 것 처럼, CF는 CDN을 빙자하고 있기 때문에, S3 스토리지를 캐시 한다. Customize를 선택하면 아래 TTL을 설정하는데, 이 시간만큼 이미지를 캐시 한다. Use Origin Cache Headers를 선택하면 S3에서 Cache-Controle 헤더를 설정해서 CF에 캐시되어 있는 시간을 정할 수 있다.

Forward Cookies는 잘 모르기도 하고.. S3에서는 지원도 안하기 때문에 그냥 넘어 간다.


Smooth Streaming은 Microsoft Smooth Streaming을 사용하면 Yes를 누르면 된다.


Restrict Viewer Access(Use Signed URLs) 여기서 말하는 Signed URLs는 제한된 유저에게만 접근 하도록 할 떄 사용한다. Signed URLs에 대한 자세한 내용은 찾아보자. 보통 CDN은 대부분의 사람이 접속해서 데이터를 접근 하므로 No를 선택 한다.


Price Class는 사용하는 edge의 수를 제한하는 옵션이자 돈이 걸린 문제이다. edge는 여기저기 퍼져 있는데 전세계 모든 edge를 사용 할 지, 특정 부분의 edge만 사용할지 선택하면 된다.


Alternate Domain Names. CNAMEs을 선택 하면 됩니다. 도메인을 가지고 있으면, 도메인을 CF기본 도메인 대신 쓸 수 있다.


SSL Certificate. AWS에 IAM에 SSL 인증서를 등록해 놓았다면 기본 인증서 대신 사용 할 수 있다.


Default RootObject는 잘못된 이미지 경로로 접근 했을 떄 볼 수 있는 페이지를 등록 할 수 있습니다.


Logging은 취향에 따라서 On/Off하시고 이제 Create DIstribution을 클릭 하면 됩니다.


생성하고나면 아래 같은 화면을 볼 수 있습니다. 시간은 한 10분 15분 정도 걸린다.

CF가 준비 되면 이제 CF로 접속해보자. 아까 내가 올린 파일은 play.png였다.

d3kq9c1qyaz6nw.cloudfront.net 이므로, 접근 하기 위해서는 d3kq9c1qyaz6nw.cloudfront.net/play.png 로 접속하면 된다.

자 에러 메세지가 나온다. AccessDenied가 뜬다. 이제 S3에 권한을 추가 할 차례다.

S3에 접속해서 버켓을 선택하고 오른쪽 위에 있는 Properties를 선택하고, 아래에 Permission을 선택한다.

그리고 Add bucket policy를 클릭하자. 그리고 아래에 있는 링크에서 보고 원하는 권한에 따라 정책을 설정 하면 된다.

https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html

CDN으로만 쓰려면, CF에서 GetObject 할 수 있는 권한만 있으면 된다. 이걸 설정 하려면, Edit bucket policy를 선택해서 나온 창에서 AWS Policy Generator를 사용하면 쉽다.

아래는 간단한 CDN을 위해서만 기능을 한정해서 정책 설정을 한 것이다.


{

"Id": "Policy1403276359730",

"Statement": [

{

"Sid": "Stmt1403276358543",

"Action": [

"s3:GetObject"

],

"Effect": "Allow",

"Resource": "arn:aws:s3:::springofmylife.blog/*",

"Principal": {

"AWS": [

"*"

]

}

}

]

}


Action은 허용 할 액션을 설정 하는 것이고, Effect는 Allow 또는 Deny이다. Rseource에는 ARN이라는 것을 넣어준다.

여기서 사용 하는건 S3이고 버켓이름은 springofmylife.blog이므로 arn:aws:s3:::springofmylife.blog 가 된다.

Principal은 접근 할 수 있는 대상을 지정하는 것인데, 우리는 AWS내에 있는 CF에서만 접근 할 것이므로, AWS로 한정 한다.


자세한 설명은 아래 링크를 참고하면 된다. 


http://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html#Sid


이제 다시한번 CF로 접속해보자.


d3kq9c1qyaz6nw.cloudfront.net/play.png


이제 잘 된다.

* 중요( 삽질 경험담 )

CF를 사용 할 때 클라우드 프론트 파일 경로에 버켓 이름을 쓰는 바람에 상당히 괴롭게 됐는데. 전혀 그럴 필요 없다.

http://<클라우드 프론트 도메인>/<파일이름>

그리고 버켓안에 폴더가 또 있다면, 

http://<클라우드 프론트 도메인>/<폴더 이름>/<파일이름>

버켓 이름은 쓸 필요가 없다!

Posted by Arnold Arnny

댓글을 달아 주세요

  1. 감사합니다. ㅇ_ㅇ;; 내용을 정리해봤습니다.
    https://docs.google.com/presentation/d/1SD319Kfb982b8WT2PSfW-MXfHr7MWdbHO4PT2Jgdbg8/edit?usp=sharing

    2014.07.02 09:16 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 프리젠테이션 잘 봤습니다 :)
      근데, S3에서 CF로 연결하실때 Make a public하지않으셔도 보기만하는 건지장 없는 것같아요.

      2014.07.02 18:11 신고 [ ADDR : EDIT/ DEL ]
  2. 네. 그런 기능이. 있다는걸 알려주고 싶어서요. ㅇ_ㅇ;;

    2014.07.03 00:58 신고 [ ADDR : EDIT/ DEL : REPLY ]

CrazySoftware2014. 6. 3. 10:37

리눅스에는 screen이라는 명령어가 있다.

 

screen은 하나의 터미널을 접속하고 여러개의 가상 터미널을 만들어서 사용 할 수 있다.

 

예를 들어 django 나 play를 사용 할 때, 서버를 구동하면 서버에서 작동되는 로그 등이 남는데 그 동안에 다른 작업을 할 수없다.

하지만 screen을 사용하면 다른 작을 하면서 원할때 그 screen을 볼 수 있다.

 


$ screen -S 이름

스크린이 하나 생성되면서 그쪽으로 붙는다.


Ctrl+a a를 누르면 다음 스크린으로 이동 할 수 있다.

Ctrl+a d를 누르면 스크린이 detach된다. 

그러면 스크린은 띄워져 있고, 원래 콘솔로 돌아온다.


$screen -list

가지고 있는 스크린의 목록을 볼 수 있다.

 

$screen -r 이름

screen -list에서 본 이름을 입력하면 스크린에 다시 붙을 수 있다.

Posted by Arnold Arnny

댓글을 달아 주세요

CrazySoftware2012. 6. 2. 10:07

요새 웹서비스를 투닥거리면서 느끼는건데, 파이썬만 해서는 안될 것 같다.


요새 루비온레일스에 대한 갈증을 느끼고 있다.


얼마나 좋길래 그렇게 많이쓰는지 궁금하기 때문이다.


근데 시간이 없다 ㅜㅜ..루비 꼭 해야 하는걸까 ...

Posted by Arnold Arnny

댓글을 달아 주세요

CrazySoftware2012. 5. 14. 21:11

http://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/index.html


최근에 필요에 의해서 난생처음 쉘스크립트를 끄적대고 있습니다. 물론, 할 일 없음도 이유중에 하나지만요.


개인적으로 개발하는 서비스도 하나 있는데, 이놈을 위한 쉘스크립트를 짜려고 합니다. 


http://www.yes24.com/24/goods/1776885?scode=032&OzSrank=1


이 책을 보면서 슬슬 놀면서 하고 있어요. 본업은 뒤로 미루고 취미삼아서 하고 있네요.

고수분들께는 쉬운 얘기지만 저처럼 초보에게는 큰 도움이 됩니다. 

참고로, 예스24 링크가 걸린 저녀석은 설명은 좀 부족합니다. 명령어 하나하나를 찾아보시려면 위에 kldp 위키를 보시는게 좋을것 같네요. 


즐프 하세요~

Posted by Arnold Arnny

댓글을 달아 주세요

CrazySoftware2012. 5. 10. 19:52

Ctrl + Shift + F  특정 단어 검색 후 리스트로 보여줌


- 책갈피**

책갈피 기능은 부끄럽지만 오늘 알았다. 

솔루션 전체에서 특정 페이지의 특정 라인을 북마크 하듯 저장 해서 쉽게 이동 할 수 있다.

Ctrl + K, Ctrl + K  책갈피 사용

Posted by Arnold Arnny

댓글을 달아 주세요