/images/profile_no_background.png

김영천 블로그

Emacs LSP 환경에서 Rust 자동완성 안되는 문제 수정

증상

Ubuntu + Emacs(lsp-mode) 조합으로 Rust 개발환경을 셋팅하는 도중 wasm 관련 코드가 자동완성이 안되는 문제가 발생했다.

Sample Code

Cargo.toml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[package]
name = "helloWasm"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[lib]
crate-type = ["cdylib"]

[dependencies]
js-sys = "0.3.60"
wasm-bindgen = "0.2.83"

[dependencies.web-sys]
version = "0.3.60"
features = [
  'CanvasRenderingContext2d',
  'Document',
  'Element',
  'HtmlCanvasElement',
  'Window',
]

lib.rs

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#[wasm_bindgen]
pub fn start() {
    let window: Window = web_sys::window().unwrap();
    let document: Document = window.document().unwrap();

    let canvas = document.get_element_by_id("canvas").unwrap();

    let canvas: web_sys::HtmlCanvasElement = canvas
        .dyn_into::<web_sys::HtmlCanvasElement>()
        .map_err(|_| ())
        .unwrap();

    let context = canvas
        .get_context("2d")
        .unwrap()
        .unwrap()
        .dyn_into::<web_sys::CanvasRenderingContext2d>()
        .unwrap();

    context.begin_path();
    // Draw the outer circle.
    context
        .arc(75.0, 75.0, 50.0, 0.0, f64::consts::PI * 2.0)
        .unwrap();

    // Draw the mouth.
    context.move_to(110.0, 75.0);
    context.arc(75.0, 75.0, 35.0, 0.0, f64::consts::PI).unwrap();

    // Draw the left eye.
    context.move_to(65.0, 65.0);
    context
        .arc(60.0, 65.0, 5.0, 0.0, f64::consts::PI * 2.0)
        .unwrap();

    // Draw the right eye.
    context.move_to(95.0, 65.0);
    context
        .arc(90.0, 65.0, 5.0, 0.0, f64::consts::PI * 2.0)
        .unwrap();

    context.stroke();
}

해결법

해당 프로젝트 내에서 cargo check 명령어를 실행하면 다음과 같은 에러가 발생한다.

한 줄 한 줄 짜면서 익히는 러스트 프로그래밍 책 리뷰

서론

우선 나는 웹 개발자다. 어렸을때 C언어를 겉핥기로 배우면서 프로그래밍의 기초를 배우고 이후 php를 통해 처음으로 웹 개발을 접하게 되었다. 그 후 자바와 스프링을 배우면서 웹 개발을 본격적으로 했지만 항상 JVM 위에서 돌아가고 보통의 exe 파일이 아닌 jar(또는 war) 파일이 빌드 결과물로 나오는게 내심 복잡하고 어렵게 느껴졌다. 그러던 즈음 구글에서 Go언어를 발표했다. 문법도 간결하고 성능도 준수하고 JVM같은 가상머신이 필요 없는 빌드 결과물이 상당히 매력적으로 느껴졌다. 하지만 당시나 지금이나 Go언어는 자바/스프링 진영보다 국내 시장 점유율이 낮았기 때문에 Go언어를 사용해 일을 할 기회는 많이 없었지만 개인적인 토이 프로젝트나 업무에서 가볍게 쓸 프로그램을 짤 때는 항상 우선순위로 염두해두는 언어가 되었다.

Android Cross-App Scripting 해결하기

문제

운영중인 안드로이드 앱을 플레이스토어에 업데이트 하다가 구글 측에서 교차 앱 스크립팅 취약정 문제가 있다는 메일을 받았습니다. 구글 측에서 제공한 가이드대로 조치를 취했는데도 여전히 문제가 있다는 리포트를 받아서 문제의 원인 해결방법을 기록하고자 합니다.

angular route reuse strategy

Intro

웹앱을 개발하다보면 list->detail 패턴의 구조를 흔하게 작성하게 됩니다. list-detail 패턴이란 목록(list)에서 원하는 컨텐츠를 탐색 후 해당 컨텐츠의 상세한 정보를 보는 화면(detail)로 이동하는 방식을 말합니다. 이 때 detail 화면에서 뒤로 가기를 이용해 목록 화면으로 돌아올 경우 Angular는 해당 화면을 구성하는 컴포넌트를 처음부터 다시 생성(ngOnInit 실행)합니다. 이럴 경우엔 다음과 같은 문제가 발생합니다.