보물창고/Programming2017.04.05 23:30





CentOs sudo 권한 설정 방법



CentOS에서 sudo 권한 설정 방법을 캡쳐하여 정리합니다




1. root user에서 /etc/sudoers 파일의 실행 권한을 변경합니다

   - chmod u+w /etc/sudoers



2. /etc/sudoers파일을 편집합니다

   - vi /etc/sudoers



3. sudo 권한을 적을 위치를 찾습니다



4. sudo 권한을 줄 user를 추가합니다

   - hadoop ALL=(ALL) NOPASSWD:ALL



5. vi 텍스트 편집을 저장합니다



6. /etc/sudoers파일의 실행 권한을 변경합니다

  - chmod u-w /etc/sudoers



7. sudo 권한을 준 User로 변경 후 sudo 실행이 되는지 확인합니다




신고





Posted by 파란물
보물창고/Programming2015.11.17 23:00





Java FFTW FFT maginute frequency example real imaginary 예제 정리




테스트로 만든 sin데이터를 FFT한결과 

아래처럼 4Hz에 2의 데이터가 있는 계산을 하였습니다



이렇게 정리하는데 꼬박 1주일이 걸렸는데요

나중에 다시볼때 이 자료를 참고하기 위해 정리해서 올립니다

혹시나 FFT 계산을 하려는 분들에게도 도움이 되었으면 하는 바람도 있습니다


FFT에대한 수학적인 이해보다는 프로그래밍 적으로 결과값을 만드는데 치중했습니다

약간의 수학적인 이해가 필요하긴 했지만 결과를 맞춰가며 따라한 예제다보니

혹여나 맞지 않을 수 있으니.. 개발하실때 참고해주세요



첫번째 자료 정리 : FFT DFT java example 이론 정리와 java 예제 코드 구성

http://paranwater.tistory.com/487




참고한 자료


FFT 사용에 대해 전체적인 이론을 파악할수 있는 정말 좋은 자료입니다

음향측정2.PDF

FFT계산하는데 필요한 파라메터들에대한 상세한 설명이 있습니다

해당 자료는 sti.or.kr 라는 사이트에 2014년 정리된 자료로 상당히 최근 자료입니다

그리고 한글!로 작성된 자료입니다


위 자료를 참고로 예제를 아래처럼 정의할 수 있습니다

샘플링 주파수 Hz (Sample Rate) : 128

FFT 사이즈 (Sample) : 128

상한 주파수 대역 : 64Hz

주파수 해상도 : 1Hz


FFT 이론에 관한 두번째 좋은 자료

신호에 관한 개괄적인 내요을 정리한 자료입니다

디지털 신호 처리의 개요

www.hanbit.co.kr



FFT한 결과로 나온 real, imaginary 데이터로 maginute 값 계산할때 참고한 자료 입니다

13강 - MATLAB 때려잡기 - FFT 2부

위 강의에서는 Matlab예제로 maginute를 계산하고있는데요

이를 java코드로 그대로 따라 만드니 같은 값이 도출되었습니다

이 자료에서는 대칭되는 값을 처리하는 내용도 포함하고 있습니다


matlab는 아니지만 FreeMat라는 비슷한 프로그램을 사용하여 데이터 검증을 했습니다

http://freemat.sourceforge.net/




frequency 계산할때 참고한 자료입니다

stackoverflow - My app “find frequency of audio input from microphone” always crashs. But why?

이자료에서는 frequency값을 계산하는 방법을 참고했습니다

위 질문에 있는 코드는 그대로 java에서 실행 할 수 있습니다

노트북에 마이크가 있어서 실제 소리로 해당 Hz를 검출하는 내용을 확인했습니다







아래 코드는 위에서 확인된 내용을 모두 포함한 코드입니다


전체 코드


package fft0.example;

/* Start reading here */


import org.apache.commons.math.complex.Complex;

import org.apache.commons.math.transform.FastFourierTransformer;


import static java.lang.Math.*;

    

public class JavaFastFourierTransformer_matlabexample_음향측정2 {


    public static void main(String args[]) {

        JavaFastFourierTransformer_matlabexample_음향측정2 a = new JavaFastFourierTransformer_matlabexample_음향측정2();

        

        double[] conversionValue = a.transform();

        for(int i = 0; i < conversionValue.length; i++){

//            System.out.println(conversionValue[i]);

        }

        

    }

    

    private double[] transform() 

    {

        

        int sampleSize= 128;  //power ^ 2

        float sampleRate= 128.0f;

        double Fs = sampleSize;

        double frequency = 0;

        

        // sin 샘플 데이터를 위한 변수

        double Ts = 1/Fs;

        double [] t = new double[sampleSize] ;

        double [] input = new double[sampleSize];

        

        for(int i = 0; i < sampleSize; i++){

            t[i] = Ts * i;

        }

        

        for (int i = 0; i < sampleSize; i++) {

            input[i] = 2 * sin( 2 * PI * 4 * t[i]);

//            System.out.println(input[i]);

        }


        System.out.println("-------------------------------");

        

        double[] tempConversion = new double[input.length/2];

        //100 is not a power of 2, consider padding for fix | 2의 거듭제곱의 개수로 해야함

        FastFourierTransformer fft = new FastFourierTransformer();

        try {           

            

            Complex[] complx = fft.transform (input);

            

            for (int i = 0; i < (complx.length / 2); i++) {           // 대칭되는 값을 제외하기위해 절반만을 사용    

                double rr = (complx[i].getReal()) / sampleSize * 2;        // maginute값 계산을 위한 마사지

                double ri = (complx[i].getImaginary())  / sampleSize * 2;    // maginute값 계산을 위한 마사지

                tempConversion[i] = Math.sqrt((rr * rr) + (ri * ri));    // maginute계산

                double mag = tempConversion[i]; 

                

                frequency = (sampleRate * i) / sampleSize;            // frequency계산

                

                System.out.println(frequency+"\t"+mag);

            }


        } catch (IllegalArgumentException e) {

            System.out.println(e);

        }


        return tempConversion;

    }


신고





Posted by 파란물
보물창고/Programming2015.11.11 23:00





해결 GPIO.setmode(GPIO.BOARD) AttributeError: 'module' object has no attribute 'setmode'



raspberry pi에서 RFID-RC522를 이용한 카드인식 시스템을 만들고 있었는데요

setmode에러가나서 한참을 고생하다 구글링을 통해 해결했습니다






구글 검색어
GPIO.setmode(GPIO.BOARD) AttributeError: 'module' object has no attribute 'setmode'

참고한 내용





출력된 에러

 

$sudo python Dump.py
Traceback (most recent call last):
File "Dump.py", line 21, in <module>
MIFAREReader = MFRC522.MFRC522()
File "/home/imcloud/download/MFRC522-python/MFRC522.py", line 112, in __init__
GPIO.setmode(GPIO.BOARD)
AttributeError: 'module' object has no attribute 'setmode'






해결 방법
sudo easy_install -U RPi.GPIO 이 명령어를 실행해서 RPI.GPIO를 설치합니다


$sudo easy_install -U RPi.GPIO
Searching for RPi.GPIO
Reading http://pypi.python.org/simple/RPi.GPIO/
Best match: RPi.GPIO 0.5.11
Downloading https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz#md5=9dc3dab6ce2b7ccb833a866efb392821
Processing RPi.GPIO-0.5.11.tar.gz
Running RPi.GPIO-0.5.11/setup.py -q bdist_egg --dist-dir /tmp/easy_install-IOIu1H/RPi.GPIO-0.5.11/egg-dist-tmp-yky5fe
zip_safe flag not set; analyzing archive contents...
Removing RPi.GPIO 0.1.0 from easy-install.pth file
Adding RPi.GPIO 0.5.11 to easy-install.pth file

Installed /usr/local/lib/python2.7/dist-packages/RPi.GPIO-0.5.11-py2.7-linux-armv6l.egg
Processing dependencies for RPi.GPIO

Finished processing dependencies for RPi.GPIO 






에러를 해결후 잘 동작함


$sudo python Read.py
Welcome to the MFRC522 data read example
Press Ctrl-C to stop.
Card detected
Card read UID: 23,101,85,197
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Card detected
Card read UID: 23,101,85,197
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Card detected
Card read UID: 23,101,85,197
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Card detected
Card read UID: 23,101,85,197
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Card detected
Card read UID: 23,101,85,197
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Card detected
Card read UID: 23,101,85,197
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Card detected
Card read UID: 23,101,85,197
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

^CCtrl+C captured, ending read.

 




신고





Posted by 파란물
보물창고/Programming2015.08.17 23:30





정규식 공백 두개 하나로 바꾸기 치환 변경 수정




아래 원본 데이터 처럼 공백이 두개 이상인 구간을 정규식 표현을통해 하나로 바꿉니다

javascript에서 사용했으나 다른 언어에서도 사용가능합니다


data = data.replace(/^\s+|\s{2,}/g," ");



원본

-rw-------    1 hadoop hadoop   19393 Jun 24 20:46 .bash_history

-rw-r--r--    1 hadoop hadoop      18 Jul 18  2013 .bash_logout

-rw-r--r--    1 hadoop hadoop     560 Jun  5 17:39 .bash_profile

-rw-r--r--    1 hadoop hadoop    1140 Jun 16 15:00 .bashrc

drwx------    3 hadoop hadoop    4096 May 29 14:44 .config

-rw-rw-r--    1 hadoop hadoop    2770 Jun  1 19:50 .dbshell

drwxr-xr-x    2 root   root      4096 Apr 28 10:52 Desktop

drwxrwxr-x    4 hadoop hadoop    4096 Jun 17 13:35 download




결과

drwx------ 31 user user 4096 Jun 23 18:08 .

drwxr-xr-x. 6 root root 4096 Apr 14 17:24 ..

-rw------- 1 user user 19393 Jun 24 20:46 .bash_history

-rw-r--r-- 1 user user 18 Jul 18 2013 .bash_logout

-rw-r--r-- 1 user user 560 Jun 5 17:39 .bash_profile

-rw-r--r-- 1 user user 1140 Jun 16 15:00 .bashrc

drwx------ 3 user user 4096 May 29 14:44 .config

-rw-rw-r-- 1 user user 2770 Jun 1 19:50 .dbshell

-rw-rw-r-- 1 user user 4946 Apr 15 13:46 .hivehistory

-rw-rw-r-- 1 user user 186 Jun 5 17:39 .profile



이 사이트에서 정규식 표현을 확인해 볼 수 있습니다

http://regexr.com/


신고





Posted by 파란물
보물창고/Programming2015.07.20 23:30





elasticsearch index client java api example mavne 프로젝트 기본 구조




elasticsearch java api를 이용한 기본 코딩 입니다

elasticsearch api문서보는게 익숙치 않다보니 삽질좀 하다가 성공했습니다


public class App {

public static void main(String[] args) {

Settings settings = ImmutableSettings.settingsBuilder()

.put("cluster.name", "imcelasticsearch")

.build();

TransportClient client = new TransportClient(settings)

.addTransportAddress(new InetSocketTransportAddress("hostname2", 9300));

IndexResponse index_response = null;

try {

index_response = client.prepareIndex("twitter", "tweet", "1")

       .setSource(jsonBuilder()

                   .startObject()

                       .field("user", "kimchy")

                       .field("postDate", new Date())

                       .field("message", "trying out Elasticsearch")

                   .endObject()

                 )

       .execute()

       .actionGet();

} catch (ElasticsearchException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}


client.close();;

}




추가한 dependency


<dependency>

<groupId>org.elasticsearch</groupId>

<artifactId>elasticsearch</artifactId>

<artifactId>elasticsearch</artifactId>

<version>1.6.0</version>

</dependency>




참고한 사이트


위 코드 실행 결과 아래처럼 잘 동작 한 것을 볼 수 있습니다




maven import해서 사용하세요

elasticsearch_.zip



신고





Posted by 파란물