본 글은 전적으로 Ubuntu에서 매주 발행하고 있는 뉴스 소식지를 개인적으로 관심 있는 부분만 추려내어서

정리하는 글입니다.


좀더 자세한 내용은 본문을 참조하는 것이 가장 좋습니다.

https://wiki.ubuntu.com/UbuntuWeeklyNewsletter/Issue407




이번 이슈에서 다루어지는 내용은 다음과 같습니다.


In This Issue

  • Ubuntu at the Mobile World Congress
  • DMB election results
  • Ubuntu Stats
  • Recent Ubuntu Myanmar LoCo Team Activities

  • LoCo Events

  • Michael Hall: My SCaLE 13x and UbuCon review

  • Randall Ross: On Writing Software for OpenPOWER
  • Daniel Holbach: Giving Ubuntu devices users a head-start
  • Randall Ross: Ubuntu at Mobile World Congress 2015
  • Lubuntu Blog: Box 0.50 rev. 474
  • Announce: Vivid will switch to booting with systemd next Monday, brace for impact
  • Interview with Michael Hall (mhall119) of the Ubuntu Community Council
  • Kubuntu Docs 15.04
  • A Quick Look at the BQ Aquaris E4.5 Ubuntu Phone
  • Canonical News
  • First peek at the next Ubuntu 15.04 nester line-up
  • New Ubuntu Phone Separates the App from the Data
  • Nvidia patches Ubuntu bug that caused black window screen crashes
  • In The Blogosphere
  • Featured Audio and Video
  • Weekly Ubuntu Development Team Meetings
  • Upcoming Meetings and Events
  • Updates and Security for 10.04, 12.04, 14.04 and 14.10
  • And much more!

Ubuntu at the Mobile World Congress


이중에서 가장 관심이 있는 부분이 아무래도 Ubuntu Phone이다 캐노니컬에서도 가장 열심히 밀고 있는 부분이고 뉴스 소식지에서도 가장 처음 가장 비중있게 다루고 있는 부분이다. 하지만 모바일폰이 가장 경쟁이 치열한 부분이라서 과연 우분투가 이를 극복할 수 있을지 의문이 심하게 들기도 한다. 어디선가 들었는데 우분투가 현재 재정적으로 힘들어 하는데 그 이유가 우분투폰에 이루어진 투자때문이라고 한다.

과연 안드로이드와 IOS에 2강 체계에서 우분투와 같은 새로운 모바일 플랫폼이 어떠한 성과를 앞으로 낼지 귀추가 주목되는것은 본인 또한 마찬가지이다.


뉴스레터 소식은 아니지만 우분투폰 리뷰 중 가장 긴 내용이지 않을까 싶은 동영상이다




.

MWC 2015에 첫선을 보인 우분투폰에 대한 내용들은 다음을 참조하면 됩니다.



Ask Ubuntu Top 5 Questions this week

아무래도 제가 개발자이다 보니 기술적인 내용은 꼭 봐야 왠지 배부른 느낌. 아무 같은 개발자분들은 이해하실거라고 생각이 드네요.


1. 첫번째 질문은 ping flooding에 관련한 내용이다.

What non malicious uses are there for ping's flood (-f) option? [on hold] http://askubuntu.com/questions/592390/what-non-malicious-uses-are-there-for-pings-flood-f-option


ping flooding 에 관련해서 좀더 읽어 볼 만한 내용을 찾아 보았다.

- ping DOS 공격에 대한 Basic: http://tomicki.net/ping.flooding.php

- Ping Flooding DoS Attack in a Virtual Network: https://sandilands.info/sgordon/ping-flooding-dos-attack-in-a-virtual-network


2. 두번째 질문은 주어진 파일에서 각 알파벳이 나타나는 빈도를 알 수 있는 방법에 관련한 질문이다. 이런 질문은 당연히 답변은 프로그래밍 언어별로 해주는 것이 관례인가 ???



For example I have file 1.txt, that contain:

Moscow
Astana
Tokyo
Ottawa

I want to count number of all char as:

a - 4,
b - 0,
c - 1,
...
z - 0
sed 's/\(.\)/\1\n/g' 1.txt | sort | uniq -ic
#!/usr/bin/env python3
import sys

chars = open(sys.argv[1]).read().strip().replace("\n", "")
[print(c+" -", chars.count(c)) for c in sorted(set([c for c in chars]))]
$ awk '{for (i=1;i<=NF;i++) a[$i]++} END{for (c in a) print c,a[c]}' FS="" file
$ perl -e '$a=join("",<>);for("a".."z"){$d=()=$a=~/$_/gi;print"$_ - $d,\n"}' 1.txt


그리고 대망의 C 버전



#include <stdio.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <sysexits.h>


inline static double square(double x)
{
    return x * x;
}


int main()
{
    static const unsigned distribution_size = 1 << CHAR_BIT;

    int rv = EX_OK;
    uintmax_t *distribution = calloc(distribution_size, sizeof(*distribution));

    {
        int c;
        while ((c = getchar()) != EOF)
            distribution[c]++;

        if (ferror(stdin)) {
            perror("I/O error on standard input");
            rv = EX_IOERR;
        }
    }

    uintmax_t sum = 0;
    for (unsigned i = 0; i != distribution_size; i++)
        sum += distribution[i];
    double avg = (double) sum / distribution_size;

    double var_accum = 0.0;
    for (unsigned i = 0; i != distribution_size; i++)
    {
        const uintmax_t x = distribution[i];

        printf("'%c' (%02X): %20ju", isprint((int) i) ? i : ' ', i, x);
        if (x != 0) {
            var_accum += square((double) x - avg);
            printf(" (%+.2e %%)\n", ((double) x / avg - 1.0) * 100.0);
        } else {
            var_accum += square(avg);
            putchar('\n');
        }
    }

    double stdev = sqrt(var_accum / distribution_size);
    double varcoeff = stdev / avg;
    printf(
        "total: %ju\n"
        "average: %e\n"
        "standard deviation: %e\n"
        "variation coefficient: %e\n",
        sum, avg, stdev, varcoeff);

    free(distribution);
    return rv;
}


3. 세번째 질문은 왜 다운가능한 MS Fonts들은 exe 형태로 설치되는가 ?

 - The MS Core Fonts come in a self-extracting zip archive we can open or install without the need to run the Windows executable or the included Windows font installer program.

 - http://corefonts.sourceforge.net/

 - 라이센스 관련: http://www.microsoft.com/typography/fontpack/eula.htm


4. Why is there an “update-grub” and a “update-grub2” command?

  $ file $(which update-grub{,2})
  /usr/sbin/update-grub: POSIX shell script, ASCII text executable
  /usr/sbin/update-grub2: symbolic link to `update-grub'


Canonical News

1. preinstalled ubuntu

 - https://insights.ubuntu.com/2014/05/15/huge-downloads-for-ubuntu-kylin-14-04lts-first-oem-partner-announced/

 - https://insights.ubuntu.com/2015/03/02/dell-launches-ubuntu-loaded-machines-across-500-stores-in-latin-america/



많은 것을 정리하지 못했네요... 다시 말하지만 좀더 자세한것은 원문을 참조해주세요...

https://wiki.ubuntu.com/UbuntuWeeklyNewsletter/Issue407



저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by sound79 사운드친구

댓글을 달아 주세요


리눅스에서 가끔씩 스크린샷을 해야 할때가 있습니다.

뭐 물론... PrintScreen Key를 이용하여 전체 스크린을 저장한 다음 이미지 프로그램을 이용하여 특정 부분을 잘라낼 수는 있습니다.

하지만 뭔가 부족하고 불편합니다. 그래서 좋은 프로그램이 없나 검색을 해보니... shutter를 알게 되었습니다.


아래 그림처럼 뭔지 모를 뜬구름 화면... 흠.. ^^




shutter 공식 홈페이지: http://shutter-project.org/

간단히 사용해 본결과 좀 불편한 감이 있다. 그러나 다른 대안이 별로 없는 관계로...


좀더 자세한 내용을 알고 싶으신 분은 아래 블로그에서 정보를 얻을 수 있을 듯...

http://edoli.tistory.com/101





저작자 표시 비영리 동일 조건 변경 허락
신고

'Linux' 카테고리의 다른 글

ubuntu 12.04 에서 gcc-4.7로 갈아타기  (0) 2014.09.15
Ubuntu에 Dropbox 설치하기  (0) 2014.06.13
스크린샷 프로그램 (Shutter)  (1) 2014.06.09
EBS 라디오 듣기 주소 변경  (0) 2014.06.06
Makefile Tips #1  (0) 2014.05.26
리눅스에서 EBS 라디오 듣기  (0) 2014.05.07
Posted by sound79 사운드친구

댓글을 달아 주세요

  1. MKWilliam 2014.06.11 04:55 신고  댓글주소  수정/삭제  댓글쓰기


    look this is very goods.

Makefile Tips #1

Linux 2014.05.26 11:30

Makefile 에서 실제 명령어를 수행하지 않고 구문 분석

  • --just-print (-n)


저작자 표시 비영리 동일 조건 변경 허락
신고

'Linux' 카테고리의 다른 글

스크린샷 프로그램 (Shutter)  (1) 2014.06.09
EBS 라디오 듣기 주소 변경  (0) 2014.06.06
Makefile Tips #1  (0) 2014.05.26
리눅스에서 EBS 라디오 듣기  (0) 2014.05.07
lighttpd static compile  (0) 2014.04.14
[Ubuntu] Full Circle Magazine 소개  (0) 2013.11.02
Posted by sound79 사운드친구

댓글을 달아 주세요

검색 좀 해 보니깐 간단하게 할 수 있는 방법이 있었다.

현재 EBS는 RTMP 를 사용하는 군...



터미널에서...

$> rtmpdump -v -r "rtmp://ebsandroid.nefficient.com:1935/fmradiofamilypc/familypc1m" | vlc -



끝....

저작자 표시 비영리 동일 조건 변경 허락
신고

'Linux' 카테고리의 다른 글

EBS 라디오 듣기 주소 변경  (0) 2014.06.06
Makefile Tips #1  (0) 2014.05.26
리눅스에서 EBS 라디오 듣기  (0) 2014.05.07
lighttpd static compile  (0) 2014.04.14
[Ubuntu] Full Circle Magazine 소개  (0) 2013.11.02
Primiscuous mode  (0) 2013.09.26
Posted by sound79 사운드친구

댓글을 달아 주세요


본 내용은 아래 링크를 정리하는 것입니다.

https://help.ubuntu.com/community/AptGet/Howto



1. 설치 관련 명령어


  (1). sudo apt-get install <package_name>

      <package_name>의 패키지를 설치합니다. 자동으로 의존성이 있는 패키지도 함께 설치합니다.


  (2). sudo apt-get build-dep <package_name>

      <package_name>을 설치하기 위한 의존성 있는 패키지들을 미리 설치할 수 있습니다.

    ** 어떤 경우에 이 명령어를 사용할까요? 패키지는 소스 형태로 설치할 때 사용할 수 있을거 같네요. 즉 의존성 있는 부분들은 미리 패키지로 설치하고 해당 패키지만 소스로 설치할 때요...


  (3). sudo apitude install <package_name>

    apt-get 설치와 비슷하다고 하는데, 크게 사용할 일은 없을 듯 함.


  (4). sudo apt-get install <package1_name> <package2_name> <package3_name>

    해당 패키지들을 순차적으로 설치함..




  -s flage: 가상(?) 으로 설치해 볼 수 있습니다. 즉 실제 설치는 하지 않지만 어떤 패키지들이 설치될 것이며, 어떤 설정 파일들이 설치될지를 알 수 있습니다. (종종, 설치하기 전에 한번 해볼 필요가 있을 때...)



  auto-apt 명령어

  소스 형태로 설치할때 ./configure를 대신 처리해 주는 명령어

  즉 소스 디렉토리로 가서

  auto-apt run ./configure



2. 관리 명렁어


(1). sudo apt-get update

   /etc/apt/source.list의 인덱스를 기반으로 패키지의 정보를 최신으로 업데이트 합니다.

  만약 찾지 못하는 패키지가 있으면 해당 패키지의 서버 리스트를 업데이트 후 본 명령어를 수행.


 (2). sudo apt-get upgrade

  설치한 패키지를 모두 최신으로 업그레이드


 (3). sudo apt-get dist-upgrade

  위의 명령어와 비슷합니다. 차이점은: "apt-get dist-upgrade" does not perform distribution upgrade.


 (4). sudo apt-get check

  진단 명령어로써, 패키지의 업데이트 및 파손된 의존성을 체크합니다.


 (5). sudo apt-get -f install

  "unmet dependences"를 만난다면 본 명령어로...


 (6). sudo apt-get autoclean

 더 이상 설치되어 있지 않은 패키지들의  .deb 를 제거해 줍니다.


 (7). sudo apt-get clean <package_name>

  해당 <package_name>의 .deb 파일을 지운다.


여기서 잠깐 .deb 파일이 있는 곳은 /var/cache/apt/archives

얼마나 많은 공간을 차지 하고 있는지 확인은

du -sh /var/cache/apt/archives

(8). dpkg-reconfigure <package_name>

<package_name>의 패키지를 재설정한다.



3. 삭제 명령어


  (1). sudo apt-get remove <package_name>

  <package_name>의 패키지를 삭제한다.


 (2). sudo apt-get purge <package_name>

 <package_name>의 패키지를 삭제하고 또한 해당 configuration file도 모두 삭제한다.


 (3). sudo apt-get autoremove

 다른 패키지 설치시 의존성 때문에 설치된 패키지가 더이상 사용되지 않을때 자동으로 삭제함


 (4). dpkg -l | grep '^rc' | awk '{print $2}' | xargs dpkg --purge

 삭제..



4. 검색 명령어


(1). sudo apt-cache search <search_term>

 <search_term>의 패키지를 검색한다. 


 (2). dpkg -l *<serch_term>*

 위의 명령어와 동일함. 단지 현재 설치되어 있는 패키지도 표시해 줌.

 ii (installed) and un (not installed).


 (3). sudo apt-cache show <package_name>

 <package_name>의 패키지의 정보를 표시함


 (4). dpkg --print-avail <package_name>

 위의 명령어와 동일함


 (5). dpkg -L <package_name>

 <pckage_name>의 파일들을 보여준다.


 (6). dpkg -c  foo.deb

  foo.deb의 파일들을 보여준다.


 (7). sudo apt-cache pkgnames

 시스템의 모든 패키지들을 보여준다.


 (8). apt-cache search filename | grep -w filename

 searching시 너무 길 경우 그 결과값을 짧게 하여 보구 싶을때..


 



5. 내용 업데이트


  (1). sudo apt-get source <package_name>

  package_name의 소스를 다운로드 한다.



좀더 자세한것은...

man apt-get


저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by sound79 사운드친구

댓글을 달아 주세요


윈도우에서 유용하게 사용한 프로그램이 바탕화면에서 항상 몇개씩 떠 있는 스티커 프로그램이다.

아마도 모니터 각 모서리 주위에서 3M 포스트잇이 몇개씩 붙어 있기도 하지만... ㅎㅎㅎ


우분투에서 사용할 프로그램을 찾아보았는데, 아무래도 가장 무난한 것이 좋은것이라고 Xpad 라는 것을 찾았다.

https://launchpad.net/xpad





쓸만한거 같다..


우분투를 널리 퍼뜨리자...

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by sound79 사운드친구

댓글을 달아 주세요

오랫만에 블로그에 글을 쓰는 듯 하네요. 쩝
요즘 이리 저리 신숭생숭한 마음을 어쩔 수 없어서리. ㅋ

요 몇일전. 모업체에 면접을 갔다가 면접관으로부터 NIC 드라이버에 관한 애기를 나누다가
Top-Half와 Bottom-Half에 관해서 질문을 받았고 당당히 잘 모르겠습니다. 했던 안 좋은 기억이..

아무래도 헛 공부하고 개발했던 듯 하다.. 나는.. 그래서 집에 돌아와서 한번 관련 내용을 찾아보고
정리해 볼려구 한다.

LDD에서 발췌..
~~~
Interrupt Handlers need to finish up quickly and not keep interrupts blocked for long.
~~~
Linux resolves this problems by splitting the interrupt handler into two halves.
The so-called top half is the routine that actually responds to the interrupt - ~~~
The bottom half is a routine that is scheduled by the top half to be excuted later, at a
safer time.

여기서 this problems은 만약 Interrupt Handler 에서 오랜 시간을 요하는 작업을 수행해야 할경우?
는 어떻게 해야 하는가로부터 시작한다. LDD에서도 언급하였듯이 전체 시스템의 성능을 위해서라도
Interrupt Handler의 수행 시간은 적어야 한다. 이른 Linux에서는 두개의 Interrupt 루틴으로 나누고
처리를 한다. 즉 긴급을 요하는 작업은 Top-Half 그리고 이후는 Bottom-Half.....

NIC를 예로 들자면 패킷이 도착시, 커널은 최소한의 작업(패킷의 메모리 복사, 패킷 도착 알림, 재 초기화)
등을 한후 나머지 네트워크 프로토콜 레이어 작업은 이후 Bottom Half에서 처리한다.

Top-Half와 Bottom-Half의 차이점은 Bottom-Half시에 모든 Interrupt는 Enable 상태라는 것...

아.. 대충 이런 내용이었구나.. 하지만 이는 Kernel 2.5 이전이고 이후는 좀 바뀐듯 하기도 하고..
좀더 찾아보고 좀더 공부 해야겠다.. 아 아쉽다.. 왠지

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by sound79 사운드친구

댓글을 달아 주세요

KScope

예전글 목록 2008.01.06 14:58
개발자로써 윈도우에서 마음에 드는 툴이 있다면 Source Insight가 있다. 요즘에 보면 많이 개발자들이 Source Insight를 이용하여 대량의 소스를 분석하고 편집하고 ~~ 뭐 개발하는데 쓰는거 같다.

리눅스를 쓰면서 이와 같은 것이 없을까 하면 많은 리눅스 개발자들은 vi +ctags + cscope면 된다고 한다. 물론 이 툴들의 성능은 정말 부족한것이 없다. 하지만 단점이라고 하자면 익숙하게 사용하기 위한 시간과 노력을 투자해야 한다는 것이다. ㅎㅎ 개인차가 있을 수도 있지만...,,,

그래서 찾아보니 비슷한 KScope가 있지 않은가 KDE 기반에 source 분석툴로써 백그라운드로 cscope를 이용한다. 처음에 딱 보았을때는 정말 Source insight가 무척 많이 닮아 있었다.

사용자 삽입 이미지

여러가지 기능이 있지만 소스를 분석하다 보면 함수의 호출 관계를 좀더 간략하게 보기를 원할때가 있다. KScope에서는 Call Graph를 이용하여 이를 도식화 하여 보여 준다.
사용자 삽입 이미지

한가지 단점이 있다면 내장 에디터가 없어서 KScope에서 자체적으로 소스의 편집은 할수가 없다. 그래서 그냥 vim을 이용하여 소스는 편집하고 KScope를 이용하여 전체적으로 소스의 구조를 관찰하면 될거 같다.

개발의 대부분이 처음부터 새로 만드는 것이라면 모르겠지만 기존에 구축된 큰 시스템에서 일부분을 추가하거나 수정해야 한다면 KScope를 이용하여 프로젝트를 생성해서 소스의 분석을 하면서 편집이나 소스 작성은 자신만의 소스 Edit툴을 이용하여 하면 될듯 하다.

한번쯤 사용해 보면 리눅스에서 괜찮은 툴인듯 하다.

신고

'예전글 목록' 카테고리의 다른 글

ZigBee Alliance Open House - Tokyo Japan  (0) 2008.01.27
오픈소스가 된 NanoStack 6lowpan  (0) 2008.01.27
KScope  (1) 2008.01.06
KLibido 0.2.5  (0) 2008.01.01
안드로이드(Android) 구글폰의 OS?  (0) 2007.11.06
Middleware for Sensor Network  (0) 2007.10.27
Posted by sound79 사운드친구

댓글을 달아 주세요

  1. nagne 2013.07.28 13:27 신고  댓글주소  수정/삭제  댓글쓰기

    아래 글을 확인하시면 library 가 kde library 가 full 로 설치 되면 edit 도 가능하다고 하네요.

    http://logon.tistory.com/25 댓글

KLibido 0.2.5

예전글 목록 2008.01.01 18:50
윈도우에서 xnews를 사용하여 유즈넷의 파일을 다운로드 하고 하였다. 이번에 리눅스(Kubuntu 7.10)으로 기본 운영체제를 변경함으로써 이와 비슷한 유틸을 찾던중에 괜찮은걸 찾은거 같다.

윈도우에서 xnews 를 실행시키면 왜그리 부하가 많이 걸리던지 다른 작업을 할 수가 없었는데 이건 그렇지 않았다.

공식 홈피는: http://klibido.sourceforge.net/
사용자 삽입 이미지

설정은 간단히 할 수가 있다.
일단 자신이 사용하는 인터넷 회선 서버 주소를 알아야 한다.
하나로 회선을 사용함으로 주소는 binnews.hananet.net이다. 이걸 nslookup을 이용하여 실제 IP 어드레스를 알아낸다.

Server -> New Server..을 선택하다음 이전에 알아낸 서버의 아이피를 Address 에 적은 다음 Get list Group 를 하고 -> 위와 같은 뉴스그룹의 목록이 나타나면 원하는 그룹에 Subscribe to newsgroup를 하면 된다.

정확히는 korea뉴스그룹 이외에는 그다지 없다고 봐도 된다..(???)

아그리고 뉴스의 목록을 보면 한글자료일경우 깨져서 나오는데 이건 구글에서 검색한 결과 먼저 이에 대한 패치를 만들어 놓으신 분이 있었다. 아주 고마운 분이다. ㅋㅋㅋ
http://kldp.org/node/75845


신고

'예전글 목록' 카테고리의 다른 글

오픈소스가 된 NanoStack 6lowpan  (0) 2008.01.27
KScope  (1) 2008.01.06
KLibido 0.2.5  (0) 2008.01.01
안드로이드(Android) 구글폰의 OS?  (0) 2007.11.06
Middleware for Sensor Network  (0) 2007.10.27
AVR Small Rtos  (0) 2007.10.26
Posted by sound79 사운드친구

댓글을 달아 주세요

리눅스 네이트온-오픈베타가 시작되었다.
내심 클로즈 베타에 선정되지 못한것을 찜찜해하고 있었는데.. ㅎㅎ
http://nateonweb.nate.com/help/maclinux/linux_download.htm


설치는 비교적 간단히 되는거 같았다.
하지만 설치상의 버그(?) 혹은 리눅스 패키지가 없거나 할수 있다...그정도 쯤이야 충분한 삽질로 극복가능..
http://nateonweb.nate.com/help/maclinux/linux_g_01.htm#

필요하다 싶은 패키지는 모두 설치했다. 그놈환경이라서 KDE에 관계된 패키지 포함..
내가 테스트한 환경은 삼성 놋북인 펜티엄-3(750), RAM(128MB), 우분투(6.06) Dapper이다. 조금 허접컴퓨터.ㅋ

일단 필요한 패키지를 모두 설치
(autoconf, automake, build-essential), (qt-dev, kdelibs-dev, libsqlite3-dev, xorg-dev, libartsc0, libartsc0-dev)

$sudo apt-get install Package 로 모두 설치 후
$./configure --prefix=/usr
$make
$make install

그런데 knateon에서 configure에러가 나오는게 아닌가.. 쩝..
$SCRNSAVERPROTO Error가 뜨는게 아닌가.. 흠.뭐지..
고민중 이리저리 패키지를 찾고 깔아도 안되는게 아닌가...그래서 해당 패키지 소스를 찾아서 그냥 설치를 해버렸다.

$wget http://ubuntu.cica.es/pub/X/pub/individual/proto/?C=D;O=D/scrnsaverproto-1.1.0.tar.gz
$tar -xvfz scrnsaverproto-1.1.0.tar.gz
$./configure
$make
$make install

이후 다시 knateon, messagebox를 make & make install를 하면 문제없이 설치가 된다. 휴~~
물론 make install은 Root권한으로...

신고

'예전글 목록' 카테고리의 다른 글

[Error] ERRONEOUS REFERENCE TO EXTERNAL VARIABLES  (0) 2007.10.20
[6lowpan] RFC 4944 now available  (0) 2007.09.26
네이트온 리눅스 설치  (0) 2007.09.22
회사 상사분 결혼식.  (0) 2007.09.01
펨토셀?  (0) 2007.08.27
17세 소년에 의해 해킹된 애플 아이폰  (0) 2007.08.26
Posted by sound79 사운드친구

댓글을 달아 주세요



티스토리 툴바