그동인 2025 테마 사용을 망설이다가 블로그 테마를 업데이트하기로 했습니다. 블록 에디터의 비약적인 기능 향상으로 인해 웹사이트를 편집하는 것이 전혀 어렵다고 느껴지지 않았습니다. 대단히 혁신적이라고 생각했습니다.
[작성자:] changwoo
-
일본 뉴스 클립을 활용한 일본어 학습법
요즘 취미 삼아 일본어 공부를 하고 있는데, 느낌대로 해 본 받아쓰기 요령을 기록한다.
일본 홋카이도시의 지역 사건 사고를 알려주는 유튜브 방송을 자주 본다. 뉴스에 쓰이는 일본어는 발음도 좋고, 뉴스는 화면에 전달하는 내용을 적당히 요약해 자막으로 달아 주기 때문에 내용을 이해하기에도 좋다. 그리고 지역 뉴스라 그런지 시민들의 생활에 관련된 내용들을 짤막하게 전달하는 내용이 많아 분량상으로도 참 좋다.
영상 수집
우선 소스를 수집한다. 이 때 나는 ‘yt-dlp’라는 프로그램을 사용한다. 커맨드라인으로,
yt-dlp --force-overwrite \ -qo "$(date +%Y%m%d).%(ext)s" \ 'https://www.youtube.com/watch?v=d8CrKBU99Hg'
Code language: JavaScript (javascript)이렇게 한다. 이 때 브라우저로 같이 라이브 방송을 시청한다. 그리고 원하는 분량만큼 녹화했다고 생각하면 중지하자. 이 때 영상이 녹화중인 것과 시청중인 것이 완전히 일치하지 않는다. 적당히 여유를 두어 느긋이 영상을 끊어낸다.
영상 편집
수집한 영상 소스에서 내가 할 만한 클립을 적당히 골라낸다. 너무 어려운 주제나, 별로 관심가지 않는 주제, 너무 긴 토픽은 과감하게 제외한다. 많이도 필요 없다. 딱 한 개, 1분 내외로만 하자. 적당한 클립을 찾았다면 그곳의 시작지점과 끝지점의 시간을 기록한다. 그리고 그 구간만 잘라낸다.
ffmpeg -i <input_video> --ss mm:ss --to mm:ss <output_video>
Code language: HTML, XML (xml)예를 들어, input.mp4 파일의 03분 10초부터 04분 22초까지 잘라내 output.mp4 파일로 만든다면,
ffmpeg -i input.mp4 --ss 03:10 --to 04:22 output.mp4
Code language: CSS (css)이렇게 하면 원하는 뉴스 클립만 깔끔하게 잘라낼 수 있다.
답안지 생성
이제 받아쓰기를 준비한다. 아직 초심자이기 때문에, 무작정 듣기만 해서는 효율이 나지 않는다. 먼저 인공지능에게 뉴스를 내용을 들려주고 받아쓰기를 시킨다.
약간의 요령이라면… 인공지능은 아나운서의 목소리에 조금만 지연이 생기면 듣기를 그만 두는 것 같다. 그러니 좀 불편해도 적당히 부분부분 잘라서 스크립트를 얻는다. 챗지피티를 유료로 쓰면 GPT-4o의 음성 대화를 더 쓸 수 있고 이게 좀 더 편하긴 하다.
매일매일 챗 프롬프트를 새롭게 만드는 것이 좋다. 챗 프롬프트를 계속 재활용하면 지난날의 스크립트와 지금의 스크립트를 막 뒤섞는 일이 있어 불편하다. 안드로이드 폰 자체의 음성 기록 기능도 나름의 대안이 될 것이다. 아무튼 이 부분은 좀 더 방법을 찾아야 한다.
듣고 적기
일단 그렇게 참고 자료를 만든 후, 동영상을 직접 듣고 직접 기록한다. 이 때 펜을 쓰지 않고 컴퓨터로 입력한다. 현재 실력으로는 한자까지 다 수기로 하기에는 너무 힘들다. 공부로서 성립되기 어렵다. 입력기의 자동 변환의 도움을 충분히 받아 최대한 소리를 들어 보고 적어 보는 연습을 해 본다. 지금은 정확히 발음을 캐치해서 히라가나로 정확히 적는 것도 어렵다.
그저 무한히 반복해서 듣는다고 해서 될 일이 아닌 것 같다. 적당히 듣고, 들어지는 것은 적고, 아무래도 안 들리는 것은 무리하지 말고 빨리 정답지(에 최대한 가까운 것)를 보고 이해하는 것이 나은 것 같다.
그래도 화면에 해당 뉴스의 내용을 요약한 자막이 뜨기 때문에 뉴스 내용에 중요한 한자 부분들은 참고할 수 있다. 힌트로 삼자. 모르긴 몰라도 듣고 히라가나로 적으면 입력기가 그 한자로 정확히 변환해 주고 있다는 것만 알아도 도움이 되는 것 같다.
도저히 모르겠으면 인공지능이 생성한 스크립트도 이 때 참고한다. 애초에 생성한 스크립트를 한 번 확인한 다음 듣게 되어 있기도 하고. 이쯤하면 거의 정확한 텍스트를 얻을 수 있다.
여기에 더해 잘 모르는 것은 여기에 번역기까지 써 본다. 이래저리 한일, 일한 번역을 해 보면 어떤 한자인지, 어떤 발음인지 어지간해서는 알아낼 수 있다! 이렇게 짧더라도 꼼꼼하게 아나운서가 어떤 말을 했는지 눈으로 보면서 정확하기 인지해 본다. 그러면 진짜 들리는 내용이 다르다.
정리
이렇게 잘 이해가 되었다면, 학습한 내용을 구글 드라이브에 업로드한다. 이거 나름 고행(?)이라 매일 하기는 조금 부담스럽지만 한 번 해 보면 확실하게 느껴지는 것이 다르다. 요즘은 인공지능이 있어 모르는 것에 대한 부담이 확 줄어든 것이 정말 다르다.
이 방법은 굳이 일본어에만 국한되지는 않을 것 같다. 어떤 언어든 요즘은 내가 관심만 기울이면, 그리고 AI가 지원하는 언어라면 큰 돈 들이지 않고 공부해 볼 수 있을 것 같다.
사실 예전에 군대에서 Dido의 ‘Thank You’라는 노래의 가사를 직접 적어보려고 애쓴 적이 있다. 당시 군 내에서 어떻게 인터넷을 쓸 수 있었겠나? 그냥 무작정 들리는 대로 적어보려고 했지만 특정 부분은 미친 듯이 들리지 않더라. 정답지도 없고, CD 플레이어가 나름 구간 반복을 지원해도 불편하고, 그 때의 비효율성을 잘 기억하고 있다. 그에 비하면 지금은 비교도 안 될 정도로 발전되어 있다.
-
PhpStorm 환경설정 단축키가 동작 안하는 문제
원인은 fcitx 입력기가 Ctrl+Alt+S 키를 선점하였기 때문이다.
- Fcitx 구성하기 > 전역 설정 탭으로 이동
- 하단 ‘추가 설정 보기’ 체크
- 모든 구성 및 입력 기록 저장의 단축키를 해제
- Ctrl + Alt + s 버튼 클릭하고
- 단축키 조합 받는 창에서 Esc 누름
이렇게 하면 PhpStorm 이 올바르게 Ctrl + Alt + s 를 수신받는다. 이상.
-
리눅스 민트 22 마우스 커서 사라짐 문제 수정
출처: 리눅스 민트 포럼
리눅스 민트에서 지속적으로 마우스 커서가 사라지는 문제가 발생한다. 사라지는 마우스 커서는 “Win” 키를 눌러 다시 찾아내곤 하는데, 이게 자주 발생하니 매우 짜증이 난다. 커서가 사라져도 바로 나타나면 좋겠는데?
포럼을 뒤져 보니 이렇게 하라고 한다.
/usr/share/X11/xorg.conf.d/10-amdgpu.conf
파일을 열어 아래처럼 수정한다.Section "OutputClass" Identifier "AMDgpu" MatchDriver "amdgpu" Driver "amdgpu" Option "HotplugDriver" "amdgpu" Option "SWCursor" "True" # 이 부분을 추가함. EndSection
Code language: PHP (php)추가: 그래도 가끔씩 커서가 사라진다. 추천된 다른 방법을 적용한다.
/etc/X11/xorg.conf.d/20-amdgpu.conf
에 아래와 같은 코드를 적는다. 위 코드는 원래대로 돌린다. 그리고 참조 사이트의 코드를 직접 복사, 붙여넣기 하지 마라. 아래 코드를 복사해라. 참조 사이트는 에러가 있다.Section "Device" Identifier "AMD" Driver "amdgpu" Option "SWCursor" "True" EndSection
Code language: JavaScript (javascript)이것도 딱히 별 효과를 못 보는 거 같은데… 리눅스는 아무튼 고통과 함께 참고 사는 법을 배워야 하는 것이 1번 덕목인 듯.
-
PhpStorm Project 설정 자동화하기 – Part 2
지난 포스트에 이어 설정 파일을 자동화하기 위한 과정을 계속 기록한다. 리포지터리에 계속 필요한 설정을 하고, IDE의 설정 파일의 변화를 추적한다. 추적된 변경 사항은 따로 .md 파일로 기록한다.
내가 PhpStorm을 주로 사용하는 용도는 워드프레스 플러그인 또는 테마 개발이므로 워드프레스 코어 루트 디렉토리를 기준으로 한 프로젝트를 생성한 후 여러 자투리 설정을 대상으로 한다.
많은 반복을 거쳐 자동적으로 기억나는 몇몇 필수적인 아래 요소들을 대상으로 기록을 하였고, 차후 나머지 설정들은 생각나는대로 덧붙일 생각이다.
- 서버와 XDebug 지원
- Framework > WordPress 지원
- 단어 사전 추가
- 올바른 composer.json 경로
- 프로젝트에서 제외되는 경로
- 정적 검사를 위한 PHP 언어 레벨
- 내가 개발하는 영역에만 코드 검사를 하도록 커스텀 스코프 지정
- 개발 중인 테마/플러그인에 VCS 경로 지정
이것들은 주로 workspace.xml 파일에 저장되는데, XML 파일을 적절히 편집할 수 있다면 자동화가 그렇게 어렵지는 않을 것으로 보였다.
-
PhpStorm Project 설정 자동화하기 – Part 1
PhpStorm을 오랜 기간 사용해 왔고, 그동안 많은 프로젝트를 생성해 왔다. 물론 주로 워드프레스 프로젝트였는데, 셋업만 엄청나게 오래 걸린다. 은근해 해 줘야 할 것이 많기 때문이다.
이런 설정은 프로젝트 파일의 숨겨진 .idea 라는 디렉토리에 저장되고 나름의 규칙이 있다. 그러므로 매번 일일이 손으로 하기 보다는, 구조를 잘 파악해서 셋업된 대로 자동화 하는 것이 효율적이지 않을까?
그래서 이번에 큰 맘 먹고 자투리 프로젝트를 해 보기로 했다. PhpStorm 프로젝트 셋업을 자동화하자! 재밌겠다!
우선 공개된 리포지터리를 생성했다. 그리고 여기에 샘플 PhpStorm 프로젝트를 생성하고, 여기에 원하는 셋업을 한 후에 설정 파일이 어떻게 변화하는지 모니터하고 문서를 첨부하였다.
-
워드프레스를 위한 게시판 제작
워드프레스를 위한 가볍고 빠른, 그리고 심플한 게시판을 기획 중입니다. 이름부터 고민입니다. 그냥 손 가는대로 해볼까 합니다.
-
목표: 도서출판
도서 출판을 목표로 하고 있습니다. 매주 목요일 디스코드에서 만남을 하기로 결정했습니다.
-
투두이스트 구독 고민
매일매일 할일 기록 도구로 Todoist를 좋아하는데 다시 연간 구독을 해야 할까 고민을 하고 있습니다.
-
유튜브 프리미엄을 재구독하다
유튜브 프리미엄 구독을 다시 시작했습니다. 유튜브 시청 시간이 만만치 않은데 비해 광고 스킵이 너무 버겁습니다. 그냥 꼼수 안부리고 한국 정가로 쓰고 있어요.
-
2024년 건강검진 결과 업데이트
어머니와 나 둘이 지난 6월 12일 수요일 같은 날 같은 병원에서 건강 검진을 받음. 둘다 갑상선 쪽에 뭔가 작은 혹이 발견됨.
6월 19일 갑상선쪽 자세한 검진을 받음. 이 때 각각 조직 검사도 받음. 이 때까지만 해도 초음파 소견으로 어머니 쪽이 징후가 나빠 보이고 나는 괜찮아 보였다고 했음.
오늘 조직 검사 결과 반전이 일어남. 모양과 다르게 내가 악성이 나오고 어머님은 이상세포만 나와서 대학 병원에서 정밀검사 재검해야 한다고.
나는 갑상선유두암이라고 간단한 수술이 필요, 어머니는 추적관찰만 꾸준히 하라고 함.
-
엘리멘터 프로 라이센스 불일치 알림 없애기
개발 사이트에서 원래 사이트를 복제하면, 도메인이 당연히 달라지게 된다. 그러면서 상용 라이센스 플러그인인 엘리멘터 프로 같은 플러그인은 라이센스 불일치 알림을 띄운다. 크게 사용상에 불편은 없지만 이 불일치 알림을 계속 보는 것은 성가시다.
위에 보이는 이 그림 말이다. 이걸 안 보이게 만드는 플러그인을 따로 만들어 GIST에 올려둔다.
https://gist.github.com/chwnam/0d43b8e919fad972a679d0537117f566
강조한다. 이 플러그인을 결코 엘리멘터 프로의 불법복제를 장려하려고 만든 것이 아니다. 단지 개발 사이트에서 개발을 할 때 불편을 덜기 위한 임시 용도임을 명확히 한다. 단지 눈에 보이는 알림만을 보이지 않게 하는 것일 뿐이다. 만일 엘리멘터 프로가 라이센스 불일치를 감지해 기능에 제약을 걸 경우, 이 플러그인은 그런 제한을 푸는 – 소위 크랙(crack) 과 같은 행위는 절대 하지 않는다. 그러니 그냥 개발 용도라만 사용하시라. 라이센스는 별도로 걸지 않는다. 자유롭게 받아 사용하시라.
-
WASMER 이용한 워드프레스 로컬에서 구동하기
https://wasmer.io/templates/wordpress-starter 에서 말한 WASMER를 이용해 PHP를 구동하고, 워드프레스까지 구동하는 획기적인 물건을 시험해 봤다.
현재 실험 중인 SQLite 데이터베이스 엔진을 사용해 워드프레스를 구동하고, 실제로 약간의 버그는 있다. 뭐 돌아가는 것처럼 굴다가, 몇 번 해 보면 이내 에러를 내고 있다. 이건 나중에 차차 고쳐지겠지.
DB에 내용이 저장된다면, WASMER 샌드박스에 관해 좀 더 알게된다면 무리없이 쓸 수 도 있을지 모르겠다. 그러나 아직은 개발환경으로 삼기에는 턱없이 무리이다. 그냥 이런 게 있다는 즐거움으로 알면 될 듯.
-
워드프레스 커버 이미지 버그
스튜디오 JT의 정재철 님이 제보하신 버그
증상 재현
- 멀티사이트, 에디터 이하의 권한으로 글 작성, 블록 에디터 편집 중 발생.
- ‘이미지’ 블록을 선택해 ‘현재 미디어 URL’을 다음과 같은 URL로 변경한다.
- https://images.unsplash.com/photo-1591273703337-fbede2a94c25?ixid=M3w0NzI4ODN8MHwxfHNlYXJjaHwxMnx8R3llb25nYm9rZ3VuZ3xlbnwwfHx8fDE3MTA3NDkwNDd8MA&ixlib=rb-4.0.3&w=1816&h=800&fit=crop
- 포인트는 이미지 URL 에 쿼리 스트링으로 & 가 들어가야 한다는 것.
- ‘커버’ 블록으로 바로 변환한다.
- 저장하면, 저장은 되지만 프론트로 가 보면 이미지가 깨져 있다.
- 다시 편집 화면으로 돌아오면 블록이 정상적으로 나오지 않는다.
원인
unfiltered_html
권한과 더불어/wp-includes/kses.php
파일의 safecss_filter_attr() 함수에서의 style 속성 처리에서 약간의 문제가 겹쳐 일어남. 앞서 포인트에서 지적했듯 URL에 & 처럼 html entity 사용시 발생.우선 발생 조건을 다시 요악하면,
- 싱글 사이트에서 에디터의 권한 중
unfiltered_html
권한을 강제로 제외시키거나, 멀티사이트로 전환한다. Roles and Capabilities 문서에 따르면 에디터는 멀티사이트에서unfiltered_html
권한을 가지지 않는다. set_current_user
액션 때 , 편집하는 사용자가unfiltered_html
권한을 가지지 못하면 엄격한 kses 체크를 받도록kses_init_filters()
함수가 동작한다.kses_init_filters()
함수 안에,add_filter( 'content_save_pre', 'wp_filter_post_kses' );
라는 부분이 있다. 포스트 저장 시, kses 발동시키는 부분이다.- kses 동작 중
wp_kses_attr_check()
>safecss_filter_attr()
함수로 호출이 이어지고,safecss_filter_attr()
함수 안에서 문제가 일어난다.
에디터에서
background-image: url();
을 쓰는 것은 전혀 문제가 없는데, 이미지 URL에 파라미터가 붙게 되면, 가령 파라미터를 포함한 이미지 URL이https://sample.image.com/flower.jpg?a=foo&b=bar
처럼 되어 있었다고 치자 (CDN인 경우 종종 이런 경우가 발생). 그러면 이것이 POST 전송되면서https://sample.image.com/flower.jpg?a=foo&b=bar
로 강제로 변경된다.그런데
safecss_filter_attr()
함수에서 HTML 태그 style 속성을 나눌 때 단순히 ‘;’ 만을 기준으로 나누게 구현되어 있다.function safecss_filter_attr( $css, $deprecated = '' ) { if ( ! empty( $deprecated ) ) { _deprecated_argument( __FUNCTION__, '2.8.1' ); // Never implemented. } ... $css_array = explode( ';', trim( $css ) );
Code language: PHP (php)그러므로 여기서 CSS 속성들이 잘못 분리된다. 그래서 background-image 속성이 손상되고, 따라서 저장 이후에는 올바르게 블록이 불러와지지 않는 문제가 발생한다. 다만 블록 자체는 해당 URL을 잘 기억하고 있어, 복구가 가능하다. 이는 블록의 속성값들이 보통 post_content 에 HTML 주석 형태로 저장되기 때문으로 주석에서는 이런 URL 필터링이 동작하기 않기 때문이다.
해결책
- 옵션 1: 멀티사이트에서 계정에게
unfiltered_html
권한을 특별히 부여한다. - 옵션 2: url() 부분에서
&
같은 게 나오지 않도록 URL을 관리한다. - 옵션 3: 필터를 사용해 강제로 url() 에
&
같은 것을&
로 변환한다. PHPhtml_entity_decode()
함수가 도움이 될 것이다.
대충 이렇게 mu-plugin으로 구현한다.
<?php /** * mu-plugin 디렉토리에 resolve-url.php 로 저장. */ function resolve_url_set_current_user() { if ( ! current_user_can( 'unfiltered_html' ) ) { add_filter( 'pre_kses', 'resolve_url_fix_url', 9 ); } } function resolve_url_fix_url( $data ) { return preg_replace_callback( '/url\(([^)]+)\)/', 'resolve_url_replace', $data ); } function resolve_url_replace( $matches ) { if ( isset( $matches[1] ) ) { $parsed = parse_url( $matches[1] ); if ( isset( $parsed['query'] ) && str_contains( $parsed['query'], ';' ) ) { $decoded = html_entity_decode( $matches[1], ); return "url($decoded)"; } } return $matches[0]; } add_action( 'set_current_user', 'resolve_url_set_current_user' );
Code language: PHP (php) -
백업할 때 기억할 것 노트
마운트할 디스크가 NTFS 파티션을 썼어요!
sudo mount -t ntfs /dev/sdc /mnt/ext-hdd
파일이 겁나 많아서 파일 목록을 텍스트 파일로 뽑아서 편집한 다음, 그 목록에서 읽어오고 싶어요!
ls -1 /path/to/src > ~/list.txt # ~/list.txt 파일을 열어 목록을 검토한다. xargs -a ~/list.txt cp -v -t /path/to/dst
Code language: PHP (php)
아, 참고로 내 현재 디바이스의 전면 USB는 제대로 동작하지 않는다. USB 케이블 연결은 케이스 후면으로 해야 한다.