2022년 5월 6일 금요일

intercept-build로 compile_commands.json 만들기

요즘 주로 사용하는 개발용 편집기는 vscode. 개발 프로젝트 중 C++의 경우 얼마전까지 vscode-ccls를 사용해서 go to definition 등을 처리했는데, 제대로 찾지 못하는 경우도 많고, problem report도 계속 표시되어 다른 툴을 알아보기 시작했다.

vscode-clangd를 사용해보기로 결정. vscode-clangd가 제대로 동작하려면 compilation database가 필요하다. Compilation database를 만들기 위해 Bear를 사용해서 makefile을 처리하도록 했는데, empty compilation databse만 생성된다. 

Bear 개발자가 만든 다른 툴인 scan-build로 시도. scan-build는 llvm에 포함되어 있는 툴인데, Python으로 다시 만들고, intercept-build 등의 툴을 추가한 것으로 보인다. intercept-build로도 compilation database가 제대로 만들어지지 않아서 찾아보니 아래와 같이 CC CXX를 대체하도록 해서 성공.

intercept-build make CC=intercept-cc CXX=intercept-c++


2022년 4월 23일 토요일

Install Roswell on M1 Mac

Roswell is a Lisp implementation installer/manager, launcher, and much more! It started as a command-line tool with the aim to make installing and managing Common Lisp implementations really simple and easy. (https://roswell.github.io/)

There is a problem when installing Roswell using homebrew.

$ brew install roswell

$ ros setup


It fails to load sb-posix.

I couldn't found a solution and started to look into sbcl installation document and scripts.

I managed to fix the problem with following steps.

1. Go into sbcl source folder.

$  cd ~/.roswell/src/sbcl-2.2.2-arm64-darwin/

2. Run install.sh. it will copy fasl files to binary folder

$ INSTALL_ROOT=~/.roswell/impls/arm64/darwin/sbcl-bin/2.2.2 bash install.sh

2022년 3월 20일 일요일

듄 1, 프랭크 허버트

 

듄 전집을 샀다. 1권은 책이 너무 두꺼워서 읽을 때 불편하다. 등산할 때 오디오북을 많이 사용하는데, 전자책으로 살껄 그랬나. 그래도 책으로 사두면 나중에 애들이 읽을 것 같기도 하고.

2022년 3월 17일 목요일

주말 산행

주말이 되면 광교산에 간다.

미세먼지가 너무 심하면 주중에 업무 시간을 조정해서 오후에 다녀온다. 

올라 갈 때 마다 힘이 든다. 뚜벅 뚜벅 가다 보면 정상에 도착하고, 잠시 쉬다가 다시 하산. 대개 법륜사쪽까지 차를 몰고 가서 올라가는데, 얼마 전에는 집에서부터 걸어가 봤다. 정상에 도착하는데 2시간 정도 걸린 것 같다. 다시 걸어서 집까지 갈까 하다, 법륜사 쪽으로 내려와서 버스를 타고 귀가.

지리산을 가볼까 생각하고 있다. 처음에는 제일 짧은 코스로. 35킬로미터 정도 되나. 집에서 광교산까지 왕복 3, 4번 정도 될까.

 

성삼재에서 27km

중산리버스정류소까지 6.6km



2022년 1월 15일 토요일

키보드로 마우스 대체하기 (macOS)

 Karabiner-Elements에서 Complex Keyboard Modification을 설치한다.

https://github.com/yeonsh/mouse_keys_minimal/blob/main/mouse_keys_minimal.json

 또는 공식 저장소에서 설치할 수 있다.

https://ke-complex-modifications.pqrs.org/?q=mouse

https://ke-complex-modifications.pqrs.org/json/mouse_keys_minimal.json

위 modification은 아래 modification을 수정한 것. 불필요한 것들을 삭제하고, Terminal에서 CTRL+U와 충돌하는 것을 변경하기 위해 마우스 클릭과 우클릭을 각각 9와 0으로 변경.

사용키:

LEFT CTRL+I,J,K,L (마우스 포인터 이동 2048px)

LEFT CTRL+RIGHT SHIFT+W,A,S,D (마우스 포인터 이동 1024px)

LEFT CTRL+9, Left Click

LEFT CTRL+0, Right Click

 

LEFT CTRL+LEFT SHIFT+I,J,K,L (Scroll)


Alcro - Rust용 HTML5 Desktop 앱 개발 툴

 lorca와 같은 용도이며 rust를 위한 툴. 이름은 거꾸로(anagram)

https://github.com/Srinivasa314/alcro

lorca - Go로 HTML5 desktop app 만들기 위한 라이브러리

 사용할 라이브러리는 Lorca

https://github.com/zserge/lorca

 

홈페이지에서 가져온 Features:

  • Pure Go library (no cgo) with a very simple API
  • Small application size (normally 5-10MB)
  • Best of both worlds - the whole power of HTML/CSS to make your UI look good, combined with Go performance and ease of development
  • Expose Go functions/methods and call them from JavaScript
  • Call arbitrary JavaScript code from Go
  • Asynchronous flow between UI and main app in both languages (async/await and Goroutines)
  • Supports loading web UI from the local web server or via data URL
  • Supports testing your app with the UI in the headless mode
  • Supports multiple app windows
  • Supports packaging and branding (e.g. custom app icons). Packaging for all three OS can be done on a single machine using GOOS and GOARCH variables.

 

샘플 코드:

ui, _ := lorca.New("", "", 480, 320)
defer ui.Close()

// Bind Go function to be available in JS. Go function may be long-running and
// blocking - in JS it's represented with a Promise.
ui.Bind("add", func(a, b int) int { return a + b })

// Call JS function from Go. Functions may be asynchronous, i.e. return promises
n := ui.Eval(`Math.random()`).Float()
fmt.Println(n)

// Call JS that calls Go and so on and so on...
m := ui.Eval(`add(2, 3)`).Int()
fmt.Println(m)

// Wait for the browser window to be closed
<-ui.Done()