MediaStream을 video 태그로 설정하기

video.src = window.URL.createObjectURL(mediaStream); // 과거 버전
video.srcObject = mediaStream; // 현재 버전

MDN의 URL.createObjectURL 설명에 따르면…
No longer accepts MediaStream object
따라서 이제는 HTMLMediaElement.srcObject에 직접 설정하는 걸로…

참고
MDN HTMLMediaElement.srcObject 설명: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject
MDN URL.createObjectURL 설명 https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL

Windows에서 Linux의 wget 이나 curl 비슷한 기능 실행하기

아무래도 GUI를 기본으로 하는 Windows라는 OS는 Command line 도구들이 조금 빈약합니다.
간단한 테스트나 다운로드를 위해 Linux에서 wget이나 curl을 많이 사용했는데,
Windows에 없어서 조금 불편할 때가 있습니다.
그나마 PowerShell을 통해 아래 명령어로 약간 비슷하게 흉내는 낼 수 있습니다.

# System.Net.WebClient 사용하기
$client = New-Object System.Net.WebClient
$client.DownloadFile("http://www.example.com/file.txt","C:\tmp\file.txt")
# Invoke-WebRequest 사용하기
Invoke-WebRequest -OutFile index.html http://www.example.com

그래도 영… wget이나 curl을 Windows 버전으로 구하는 게…

Cordova 로 안드로이드 앱 작성시 AndroidManifest.xml 수정하기

Cordova로 안드로이드 앱을 작성하기 위해 platform에 android를 추가하면 platforms/android 폴더가 생성됩니다.

SCM으로 소스 관리를 할 때에는 외부에서 Download하는 platforms, plugins 폴더를 굳이 포함시키지 않아도 되는데…
(포함하게 되면 하위에 있는 의존성 엮인 엄청난 파일들이…)

따라서 해당 platforms 하위의 파일을 직접 수정하게 되면 소스 관리가 안되는 문제가…
이런 경우 config.xml을 통해 특정 파일을 수정할 수 있습니다.

<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
    <uses-sdk android:minSdkVersion="16" android:maxSdkVersion="23" />
</edit-config>

위와 같이 config.xml에 적으면 빌드 과정에서 AndroidManifest.xml 파일에서 XPath 경로로 /manifest/uses-sdk 노드를 찾아서 하위 노드에 가 merge됩니다.

참고사항: https://cordova.apache.org/docs/en/latest/plugin_ref/spec.html#edit-config

LibreOffice – 무료 오피스 소프트웨어

https://ko.libreoffice.org/

BS가 집에서 MS Office 365를 쓰다가 한달에 한 번을 실행하지 않는 오피스에 돈이 아까워서 LibreOffice로 갈아탔습니다.
가끔 HWP를 보거나 수정할 일이 있어서 아내의 태블릿에는 PolarisOffice를 설치…

그런데 왜 PolarisOffice가 아닌 LibreOffice를 선택했냐면…
역시 완전한 무료라는 점이 가장 큽니다.

최근에 설치형 Office보다는 Google의 문서나 스프레드시트를 더 많이 쓰고 있었기 때문에 설치형은 최대한 가볍고 무료인 것으로 결정 했습니다.

LibreOffice는 Ubuntu를 비롯한 상당수의 리눅스 배포판의 기본 프로그램으로 이미 충분히 검증된 점도 있습니다.
그리고 오라클의 횡포로 인해 망해가는 OpenOffice보다는 나을 것이라는 생각에…

결론…
HWP 수정이 필요하면 PolarisOffice 또는 네이버
일반적인 사용은 LibreOffice
그리고 진짜로 MS Office가 필요할 때에는 온라인으로…

Node.js 로 작성한 서버 프로그램을 Linux 에 daemon 으로 실행하기

myservice 라는 daemon 을 만드는 예제

/etc/systemd/system/myservice.service 이름으로 아래의 내용을 넣는다.

[Unit]
Description=myservice-daemon
After=network.target

[Service]
ExecStart=/usr/bin/node app.js
Restart=on-failure
User=myservice-user
Group=myservice-group
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/some/nodejs/myservice

[Install]
WantedBy=multi-user.target

아래 명령으로 방금 작성한 파일을 systemd 에게 읽도록 한다.
daemon 을 실행한다.
시스템이 부팅될 때 자동으로 실행되도록 활성화 시킨다.

systemctl daemon-reload
systemctl start myservice
systemctl enable myservice

파일별 편집 속성 설정 – EditorConfig

https://editorconfig.org/

일단 BS는 개발환경을 Windows를 사용하므로…
VisualStudio, Notepad++, Android Studio 등등…
각종 IDE에서 소스 파일에 대한 처리들을 매번 설정하기 힘들었는데,
EditorConfig를 사용하면 파일로 관리할 수 있어서 편리합니다.
혼자 사용할 때에는 각 IDE 설정을 한번 만져주면 되긴 하지만…
파일로 남겨두면 재설치 했을 때에도 문제없고,
에디터 설정도 SCM으로 관리가 되고,
팀으로 여럿이 함께 개발할 때, 각자의 IDE 설정에 더해져서 코드가 일관성을 유지할 수 있게 합니다.

Visual Studio 2017 이전 버전
확장 프로그램을 설치해야 합니다.
https://marketplace.visualstudio.com/items?itemName=EditorConfigTeam.EditorConfig

Visual Studio 2017 이후 버전
기본으로 제공합니다.

Notepad++
https://github.com/editorconfig/editorconfig-notepad-plus-plus

jQuery 특정 패턴의 CSS class 제거하기

<div id="hello" class="test-1 test-2 test-a test-qwer my-class">
...
</div>

위와 같은 HTML 내용에서 test-xxx 이름의 CSS Class를 모두 지우려면

$("#hello").removeClass((_i, className) => {
    return (className.match (/(^|\s)test-\S+/g) || []).join(' ');
});

이렇게 하면 됩니다.

<div id="hello" class="my-class">
...
</div>