2022년 10주차 기록
2022.03.07
c++
03/07 (월) ~ 03/13 (일)
- Build and Debug C++ with WSL 2 Distruibutions and Visual Studio 2022 - 번역
- Python의 map function과 유사한 기능을 C++ 로 구현할 수 있을까?
- Partial Sort in Python ?
- github 페이지로 비공개 포스팅 작성하기
- C++ 기초 배우기
- Figma 강좌 따라하기
- 크롬 확장 만들어 보기
Build and Debug C++ with WSL 2 Distruibutions and Visual Studio 2022 - 번역
- 2021-07-14에 등록된 article
- 저자는 Erika Sweet , Microsoft C++ Team - Cross Platform Tools 개발 담당
- VS2022는 C++ 개발에 대해 native WSL 2 toolset을 소개했다
- 이 toolset은 VS2022 ver 17.0 Preview 2 부터 사용가능하다
- WSL는 개선된 Linux file system 성능, GUI 지원, full system call 호환성을 지원한다
- VS WSL 2 toolset을 사용하면 ..
- SSH 연결을 추가하지 않고
- WSL 2 배포판에서 C++ 코드를 빌드하고 디버그할 수 있다
- 당신은 이미 VS2019 ver 16.1에서 소개된 native WSL 1 toolset으로 ..
- C++ 코드를 빌드하고 디버그할수 있긴하다
- VS의 WSL 2 toolset은 CMake와 MSBuild 기반 Linux 프로젝트를 모두 지원한다
- 하지만, 모든 C++ cross-platfor 개발에 대해 CMake가 우리의 추천인데 ..
- 이 방식으르 당신은 Windows와 WSL, remote system에서 같은 프로젝트로 빌드와 디버깅을 할 수 있기 때문이다
WSL 2 toolset은 어떻게 동작하는가?
- VS의 C++ cross-platform 지원은 모든 소스 파일이 Windows file system에서 시작된다고 가정한다
- WSL 2 배포판에서 개발할 때, VS는 ..
- Windows file system에서 WSL file system으로 파일을 복사하기 위해
- local rsync copy 를 실행할 것이다
- 위의 로컬 rsync 복사는 …
- VS가 WSL 2 배포판이 사용됨을 감지하고 사용자의 간섭이 요구되지 않을 경우
- 자동으로 발생한다
- Comparing WSL 1 and WSL 2 를 확인하여 WSL 1과 WSL 2의 차이점에 대해 더 배워라
- CMake 와 WSL 2 의 Step-by-Step 가이드와 MSBuild-기반 WSL 2 지원 개요에 대한 다음 섹션을 읽어보자
WSL 2 배포판 에서 Cross-platform CMake 개발
- WSL 2 toolset은 VS의 CMake Presets integration에 의해 지원된다
- CMake presets에 대해 더 배우려면..
- WSL 2 배포판에서 CMake project를 빌드하고 디버그하기위해 아래 instructions를 따라와라
- Windows 10용 WSL 설치 가이드 를 참조하여 WSL과 WSL 2 배포판을 설치하라
- 필요한 빌드 툴들을 WSL 2 distor 에 설치한다
- C++ compiler, gdb, CMake, 기본적인(underlying) 빌드 시스템 생성기, rsync, zip이 필요할 것이다
- 아래 명령으로 설치할 수 있다
1 2
> sudo apt update > sudo apt install g++ gdb make ninja-build rsync zip
- 이 튜토리얼에서는
GCC
,Ninja
를Ubuntu
위에서 사용할 것이다.
- VS2022 ver 17.0 Preview 2 나 이후 버전에서
CMake 프로젝트
를 Open해라- VS는 프로젝트 루트에 CMakeLists.txt 파일이 있는 폴더를 CMake 프로젝트로 규정한다
Python의 map function과 유사한 기능을 C++ 로 구현할 수 있을까?
- 참고할 SO 질문 : Equivalent of python map function using lambda
Partial Sort in Python ?
- 관련 질문을 한 적이 있다
- 관련 기사를 찾았다
- 질문에 대한 답변이 될지 검토해 보자 (여유가 있으면..)
github 페이지로 비공개 포스팅 작성하기
- Github Pages로 블로그 배포하기, soharu.github.io
- 지킬블로그 올린 포스트 비공개로 하기, TWPower블로그
- GitHub Pages for Private Repository, stackoverflow
C++ 기초 배우기
Figma 강좌 따라하기
- #figma
figma로 아이콘 만들기 강좌
- 현재(2022-03-11)는 Material.io의 Icon design principles의 링크가 영상과 다르니 참고할 것
크롬 확장 만들어 보기
참조 링크
개발 환경
- VS Code + Chrome Extension Dev Tools
- Command Palette에서
Chrome Extension: Create New
선택 - 주요 기술 : HTML, CSS, JavaScript
Getting started
- 발췌 원본 : Getting started, Chrome Developers
- 현재 focusing 된 페이지의 백그라운드 컬러를 변경해보는 extension을 개발해 볼것임
Create the manifest
- repository 폴더 밑에 새폴더를 하나 만들고
code .
으로 VS Code 오픈 -
manifest.json
파일 하나 만들고 다음 내용을 써넣는다1 2 3 4 5
{ "manifest_version": 3, "name": "Getting Started Example", "description": "1.0" }
Load an unpacked extension
-
manifest.json
파일을 가진 directory는developer mode
에서 extension으로 간주되어 추가될 수 있다 - unpacked extension을 로딩하기 위해 아래 단계대로 실행하라
-
chrome://extensions
확장 페이지 열기- 다른 방법 : 크롬에서
⁞
▶도구 더보기
▶확장 프로그램
- 다른 방법 : 크롬에서
- 확장 페이지에서
개발자 모드
ON -
압축해제된 확장 프로그램을 로드합니다
버튼 클릭 해서 방금 만든 새폴더 선택해주기 - ! 확장이 성공적으로 설치됨. 아이콘이 없으므로 generic icon이 생성됨
-
Add functionality
Register the background script in the manifest
- 다른 중요한 컴포넌트들과 마찬가지로, background scripts도 manifest에 등록되어야 한다
- manifest에 background script를 등록함으로써, extension이 어느 파일을 참조하고 어떻게 동작할지 알려준다
1 2 3 4 5 6
{ ... "background": { "service_worker": "background.js" } }
- 이제 Chrome은 extension이 service worker를 가지고 있음을 알게 된다
- extension을 reload하면 ..
- chrome은 지정된 파일을 스캔하여 중요한 이벤트 리스너가 있는지 검색한다
Create the background script
- 이 extenstion은 설치되자마자 persistent 변수로 부터 정보가 필요하다
- background 스크립트에
runtime.onInstalled
이벤트를 리스닝 하는 것부터 시작하라-
onInstalled
리스너 내부에서, extension은storage
API 를 이용하여 값을 하나 설정할 것이다 - 이 작업으로 많은 extenstion 컴포넌트가 이 값에 접근해서 업데이트 할 수 있게 된다
-
- extension 폴더내에
background.js
를 생성하고 아래 코드를 추가하라1 2 3 4 5 6 7
// background.js let color = '#3aa757'; chrome.runtime.onInstalled.addListener(() => { chrome.storage.sync.set({ color }); console.log('Default background color set to %cgreen', `color: ${color}`); });
Add the storage permission
-
storage API를 비롯해서 대부분의 API들은 사용하려면 manifest 파일의 “permissions” 필드에 등록되어야 한다
1 2 3 4
{ ... "permissions": ["storage"] }
- (역자 추가) chrome.storage API
- 유저 데이타를 저장, 회수, 변경 추척하는데 사용하는 API
- 이 API는 특별한 storage 요구 사항을 충족시키도록 최적화되어 있다
- localStorage API 와 같은 storage 기능을 제공하지만 아래와 같은 주요 차이점이 있다
- 유저 데이타는 자동으로 Chrome Sync와 (
storage.sync
를 이용하여) 동기화될 수 있다 - extension의 content script는 background 페이지 없이도 유저 데이타에 직접 접근할 수 있다
- 심지어 split incognito behavior(분할 익명 동작) 중에도 유저의 extension 설정이 유지될수 있다
- (역자 주) incognito 모드는 크롬의 시크릿 창을 의미함 (로그인 하지 않은 상태)
- 동작을 원래 일반 모드와 공유할 것인지 분리할 것인지 extension 별로 결정해야 함
- (역자 주) incognito 모드는 크롬의 시크릿 창을 의미함 (로그인 하지 않은 상태)
- bulk read 와 write 동작과는 비동기적이므로, 블락이 걸리며 순차적인
localStorage API
보다는 빠르다 - 유저 데이타가 객체로 저장될 수 있다. (
localStoarge API
는 문자열로 저장된다) - extension 관리자가 설정한 Enterprise 정책 읽기가 가능하다 (
storage.managed
를 schema와 함께 사용해서)
- 유저 데이타는 자동으로 Chrome Sync와 (
Inspect the background script
- 다시 extension 관리 페이지로 되돌아가서 Reload 링크를 클릭하라 ( 아래 그림 맨 아래 동글뱅이 화살표)
- 새로운 필드인 Inspect views가 파란 링크, service worker 사용할 수 있게된다
- 이 링크를 클릭하면 console.log 창이 뜨면서 “Default background color set to green” 이 표기된다
Introduce a user interface
- extension은 다양한 형태의 user interface 를 가질 수 있다
- 이번에는 popup을 사용할 것이다
-
popup.html
파일을 만들어서 extension 디렉토리에 추가하라 - 이 extension은 background color 를 변경하는데 버튼을 하나 사용한다
1 2 3 4 5 6 7 8 9
<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="button.css"> </head> <body> <button id="changeColor"></button> </body> </html>