[카테고리:] 생활코딩

  • mp3태그로 plexmedia server 정보 업데이트

    mp3태그로 plexmedia server 정보 업데이트

    mp3 tag, id3로 Plexmediaserver의 정보 업데이트 하기

    나는 plexmediaserver로 mp3를 저장하여 듣고 있다. plex에서 라이브러리로 mp3가 있는 경로를 알려주면, agent가 파일을 검색하여 그에 알맞는 가수, 앨범, 노래명을 정리한다. 내가 가진 mp3는 대부분 인터넷에서 받은 파일이라, tag 정보가 완전 제각각대로 되어 있다. 이 태그를 정리하지 않고, 곡 추가를 하면, plex가 같은 가수인데 철자가 달라 다른 사람으로 인식한다. 따라서 데이터베이스가 완전 개판이 된다. 전에는 태그를 수정을 했었는데, plexrk 이 수정분을 인식하지 못했다. 왜 그런지 궁금해 하다가 포기 했었다. 오늘 다시 좀 해보니 알 것 같다.
    plex agent는 처음 곡을 추가할 때만 mp3의 태그 정보를 자신의 DB로 읽어 들이는 듯 하다. plex가 자기가 가진 데이터베이스로 복사를 하면, 사용자가 tag를 수정했다고, plex가 자신의 DB로 업데이트를 안한다. 사용자가 한번 정보를 잘못 입력하면, 이를 마우스+클릭으로 수정해야 하는데, 시간이 많이 걸린다. 라이브러리 전체를 지운 다음에, 다시 추가를 하면 id3에서 plex DB로 다시 옮긴다.
    정리를 위해서, mp3에 있는 쓰레기 태그를 다 지워버리고, 내가 관리할 정보만 남겨 놓았다.
    stack overflow에 이와 관련된 스크립이 공개되어 있다.

    find ./ -type f -iname "*.mp3" -exec /usr/bin/mid3v2 --delete-frames=AENC,ASPI,COMM,COMR,ENCR,EQU2,ETCO,GEOB,GRID,LINK,MCDI,MLLT,OWNE,PRIV,PCNT,POPM,POSS,RBUF,RVA2,RVRB,SEEK,SIGN,SYLT,SYTC,TBPM,TCOM,TCOP,TDEN,TDLY,TDOR,TDRL,TDTG,TENC,TEXT,TFLT,TIPL,TIT3,TKEY,TLAN,TLEN,TMCL,TMED,TMOO,TOAL,TOFN,TOLY,TOPE,TOWN,TPE3,TPE4,TPOS,TPRO,TPUB,TRSN,TRSO,TSOA,TSOP,TSOT,TSRC,TSSE,TSST,TXXX,UFID,USER,USLT,WCOM,WCOP,WOAF,WOAR,WOAS,WORS,WPAY,WPUB,WXXX '{}' +

    tag를 수정하는 유틸리티는 여러개가 있으나, 셸에서 사용이 가능한 mid3v2를 선택했다.
    MP3 tag의 주요정보 내용은 아래와 같다.
    APIC A picture for the track, usually the albumcover.
    TIT1 Content group description (I guess could be deleted too)
    TIT2 The song title
    TPE1 The album artist
    TPE2 The artists (includes featurings)
    TRCK Tracknumber
    TALB Albumtitle
    TCON Genre
    TDRC Year of release

    이 정보에서 곡 이름, 앨범의 이름, 가수가 누구인지 등 몇 개의 정보만 관리한다. 나머지 정보는 관리하기 힘들기 때문에 지워야 된다. 여기에 엄한 정보가 들어가면, plex가 파일을 잘못 인식한다.
    가수는 동일하니, 아래의 명령어로 엄한 정보가 들어가 있는 파일을 찾았다. TPE1과 TPE2 두 종류가 있는데, plex는 이를 제대로 인식하지 못한다. TPE2는 지워주는게 좋다.

    now0930@:10cm$ find ./ -type f -exec mid3v2 {} \; | grep -e 'TPE1\|TIT2'
    now0930@:10cm$ find ./ -type f -exec mid3v2 {} \; | grep TALB
    

    plex는 앨범, 가수명, 트랙 이 세가지를 기준으로 보여준다. 트랙까지는 관리하기 힘들어 보인다. 일단 앨범 정보부터 아래와 같이 맞춘다.

    now0930@:10cm$ mid3v2 --TALB="10cm" *.mp3

    다음으로 가수명도 같은 방식으로 맞춘다. 수정 후 plex 라이브러리에 넣으면 제대로 정보가 올라간다.

    한가지 아쉬운 점이라면, 내가 TIT2에 곡 이름을 넣어야 됬는데, 파일이름이 대부분 곡 이름이다. basename으로 파일 이름을 뽑고, 이를 TIT2의 파라미터로 전달해야 하는데, 별도 스크립트를 만들어야 하는 작업처럼 보인다. 몇번 입력하다보니, 힘들어서 못하겠다.

  • tensorflow로 gps 좌표를 Kmean 방법으로 분류하기

    tensorflow kmean으로 gps 분류 연습 예제, 2일차

    내가 참조한 예제에서 원래 제작자는 임의의 샘플을 만들고, 그 중에서 한 개를 중심으로 선택하였다. 나는 데이터를 가지고 있어, 임의의 샘플을 만들 필요가 없다. 이에 따라 내가 가진 여러 개의 데이터 중, 임의 한 점을 중심으로 선택해야 했다. 내가 가진 예제는 이 부분이 없어, 예제를 이해하고, 새로 작성하는데 시간이 오래 걸렸다. 여러 삽질끝에 대략 아래와 같이 했다.
    1일차에는 그룹을 설정하지 않았는데, 이렇게 되면 의미가 없다. 이를 수정하기 위해서 gps 좌표를 요일별로 모은 다음 출력으로 내보냈다. 요일별 모은 데이터에서 두 개의 요일을 선택했고, 여기에서 아무점이나  중심으로 선택했다. 일단 sql에서 요일별로 gps 값을 다시 출력하여 아래와 같은 값을 얻었다.

         latitude  longitude  updated
    0     37.3700    126.935        6
    1     37.3698    126.935        6
    2     37.3698    126.935        6
    3     37.3697    126.935        6
    4     37.3697    126.935        6
    79    37.0344    126.773        5
    80    37.0344    126.773        5
    81    37.0344    126.773        5
    82    37.0343    126.773        5
    83    37.0343    126.773        5
    235   37.0325    126.773        4
    236   37.0325    126.773        4
    237   37.0325    126.773        4
    238   37.0325    126.773        4
    239   37.0325    126.773        4
    401   37.0344    126.773        3
    402   37.0344    126.773        3
    403   37.0344    126.773        3
    404   37.0343    126.773        3
    405   37.0343    126.773        3
    544   37.0344    126.773        2
    545   37.0344    126.773        2
    546   37.0344    126.773        2
    547   37.0344    126.773        2
    548   37.3687    126.935        2
    695   37.0343    126.773        1
    696   37.0344    126.773        1
    697   37.0343    126.773        1
    698   37.0343    126.773        1
    699   37.0343    126.773        1
    900   37.3696    126.935        7
    901   37.3695    126.935        7
    902   37.3695    126.935        7
    903   37.3716    126.935        7
    904   37.3716    126.935        7
    

    pandas에서 dataFrame을 groupby로 정렬하면 python이 데이터 형식을 변경해 버린다. 요일로 선택한 데이터를 dataFrame으로 사용하기 위해서 아래와 같이 했다. append 할 경우, 새로운 dataFrame을 만들어야지, 기존 dataFrame에 넣으면 붙지 않는다.

    ipdGroupbyUpdated = ipd.groupby('updated')
    print ipdGroupbyUpdated.head()
    
    #updated에서 1일차 날짜, 3일차 날짜를 구해서 별도의 dataframe을 설정..
    #pd.show_versions()
    print ipdGroupbyUpdated.get_group(1)
    #print type(ipdGroupbyUpdated.get_group(1))
    ipdSliced=ipdGroupbyUpdated.get_group(1)
    print "1일차 데이터"
    print ipdSliced.head()
    print type(ipdSliced)
    
    ipdSliced1=ipdGroupbyUpdated.get_group(7)
    print "3일차 데이터"
    print ipdSliced1.head()
    print type(ipdSliced1)
    

    찾아보면 더 쉬운 방법이 있겠지만, 여기까지 하는데도 충분히 힘들었다.

    두 개 요일로 선택한 좌표를 그림을 그리기 위해서, 아래과 같이 함수를 정의하고, dataFrame을 인자로 넘겨 주었다. 굳이 함수로 정의한 이유는 원래의 예제가 함수로 되어 있었기 때문이다.

        def plot_clusters(df_ipd, centroids):
        print("plot_clusters was called")
        import matplotlib
        matplotlib.use('Agg')
        import matplotlib.pyplot as plt 
    
        for key, val in df_ipd.groupby('updated'):
            tmp_centoid=df_ipd[df_ipd.updated==key].sample()
            #print "tmp_centoid 출력\n"
            #print tmp_centoid[['longitude','latitude']]
            #print tmp_centoid[['longitude']]
    
            plt.scatter(val['longitude'], val['latitude'], label=key)
            plt.plot(tmp_centoid[['longitude']],tmp_centoid[['latitude']], markersize=35, marker="x", color='k', mew=10) 
            plt.plot(tmp_centoid[['longitude']],tmp_centoid[['latitude']], markersize=30, marker="x", color='m', mew=5)
    

    for문이 groupby의 기준인 날짜기준으로 key값을 변경하면서 루프를 만든다. dataFrame에서 임의의 점을 찾기 위해 tmp_centoid[‘longitude’]와 같은 방식을 선택했다. 마지막에 있는 marker관련 2개의 줄은 X의 색을 칠하는 부분이다. 필요 없다고 판단하여 한 줄만 사용하니 색이 안칠해 졌다.
    대략 아래와 같은 그림을 얻을 수 있다..

    전에 데이터와 달리 위도/경도의 축을 바꿨다.

  • phpmyadmin에 https 적용하기

    나중에 기록을 위해서 남김..
    여기에서 참조..
    *http://howtolamp.com/lamp/phpmyadmin/4.2/securing#ssl
    *http://howtolamp.com/lamp/httpd/2.4/configuration-files#httpd-ssl-conf
    *https://www.digitalocean.com/community/tutorials/how-to-set-up-ssl-certificates-with-phpmyadmin-on-an-ubuntu-12-04-vps

    1. SSL 설정파일 수정
    아파치2 설치시 기본적으로 ssl이 로딩되어 있는 것 같다.
    데비안8의 경우, /etc/apache2/sites-available의 default-ssl.conf 파일에서 SSL을 설정할 수 있다.그런가??

    이 파일의 마지막 부분에 아래와 같이 붙여 넣는다.

    <VirtualHost 192.168.0.100:443>
    
    DocumentRoot "/usr/local/apache2/phpmyadmin"
    ServerName phpmyadmin.example.com
    ServerAdmin [email protected]
    ErrorLog "/usr/local/apache2/logs/ssl-phpmyadmin.example.com-error_log"
    TransferLog "/usr/local/apache2/logs/ssl-phpmyadmin.example.com-access_log"
    
    <Directory "/usr/local/apache2/phpmyadmin">
    AllowOverride AuthConfig Limit
    Require all granted
    </Directory>
    
    <Directory "/usr/local/apache2/phpmyadmin/libraries">
    Require all denied
    </Directory>
    
    <Directory "/usr/local/apache2/phpmyadmin/setup/lib">
    Require all denied
    </Directory>
    
    <Directory "/usr/local/apache2/phpmyadmin/setup/frames">
    Require all denied
    </Directory>
    
    SSLEngine on
    
    SSLCertificateFile "/usr/local/apache2/conf/server.crt"
    SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
    
    <FilesMatch ".(shtml|phtml|php)$">
    SSLOptions +StdEnvVars
    </FilesMatch>
    
    BrowserMatch "MSIE [2-5]" 
    nokeepalive ssl-unclean-shutdown 
    downgrade-1.0 force-response-1.0
    
    CustomLog "/usr/local/apache2/logs/ssl-phpmyadmin.example.com-request_log" 
    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
    
    </VirtualHost>

    아파치가 /usr/local/..여기에 설치되어 있다고 가정하고 위 코드를 사용햇는데, 내 사양에 맞게 바꿔준다.
    debian8의 경우, /usr/share/phpmyadmin의 경로에 phpmyadmin이 설치되어 있다.

    2. 인증서 및 키 설정..
    인증서와 키를 만들어야 된다..apache2 설치 폴더에 디렉토리를 하나 만들고, 아래와 같이 만든다.

    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

    365일 유지되는 키라는데..
    터미널에 몇가지 질문이 보이는데, 적절한 답을 채운다.

    3. ssl 로딩..

    service apache2 reload

    로 설정한 SSL을 로딩한다.
    여기에서 에러가 뜨면, 관련 메세지를 확인해 본다..
    난 apache2를 재시작 하니까 로딩이 제대로 됐다.

    4. 사이트 접속..
    기존 사이트에 https://…
    이런 형식으로 붙여 접속을 한다.
    매번 접속시마다 강제로 ssl을 사용하는 옵션이 있는데, 필요 없어 보인다.

  • ssh가 공격받고 있다!

    공격받고 있다!!

    주말에 google에서 이 피시가 검색이 되도록 SEO를 설정을 좀 했다. 오늘 뭐 좀 하다 로그인 기록을 봤는데, 중국 IP가 서버에 root로 로그인 하려고 무작위 공격을 하고 있었다.
    root@now0930-gen8:/home/now0930# cat /var/log/auth.log | grep -i fail | wc -l
    52526
    18일부터 20일까지..삼일 사이에 52,000회!!!!

    인터넷을 검색하니, 역시 나같은 사람이 있었다. iptables을 활용하여 중국에서 오는 IP를 차단해 버리는 스크립을 구해 바로 적용했다.

    다음으로 root 패스워드도 좀 바꾸고..ssh에서 root로 로그인을 못하게 막았다..
    이러면 좀 나아진듯 한데, 언제 털릴지 모르겠다..제발 안털리길.

    찾아보니 몇 개를 더 보완해야 한다는데, 시간이 너무 많이 걸려 차차 해야겠다.

  • tensorflow로 gps 좌표를 Kmean 방법으로 분류하기

    tensorflow kmean으로 gps 분류 연습 예제, 1일차

    tensorflow를 연습하려고 할만한 아이템을 찾다, gps 위치를 kmean으로 분류하는 방법이 할만해 보인다.
    휴대폰이 시간맞춰 자동으로 서버로 gps 포인트를 올렸는데, 최근 일년, 사진에서 뽑아낸 gps 정보를 뽑아보니 한 50,000개 정도가 된다. 데이터베이스에서 csv로 쉽게 뽑아냈고, 전에 쓰던 코드를 활용하여 pandas로 data frame으로 저장도 되었다. 이 정보를 뿌려짐 형식의 그래프로 그려야 되는데, 잘 안되었다.

    gps 데이터 처음 몇개는 대략 아래와 같다.
    latitude longitude updated
    0 37.8968 127.528 2015-11-06
    1 37.8968 127.528 2015-11-06
    2 37.8968 127.528 2015-11-06
    3 37.8924 127.548 2015-11-06
    4 37.8968 127.528 2015-11-06

    plot에 대한 문서들도 찾아 봤는데, 너무 추상적이라 무슨 말인지 모르겠다. 프로그램을 배우는 방법은 실재 해보는 거라, 인터넷의 예제를 찾아보았다. 여기에주인이 내가 필요한 답을 써놓아 그대로 참조했다.
    아래와 같이 실행하면 gps의 위도, 경도별 그래프를 그릴 수 있다.

    ipd = pd.read_csv("./TRK.csv")
    print(ipd.head())
    
    plt.scatter(ipd.latitude, ipd.longitude)
    plt.show()
    plt.savefig('gps-plot.jpg')
    
    gps
    gps 좌표