diff --git a/_posts/2022-05-30-bevy.markdown b/_posts/2022-05-30-bevy.markdown index 78b62c2..a57c2f3 100644 --- a/_posts/2022-05-30-bevy.markdown +++ b/_posts/2022-05-30-bevy.markdown @@ -46,7 +46,7 @@ Entity : 말 그대로 개체임. 우리가 게임에서 다룰 대부분의 대 우리는 어떤 객체(예를 들면 Player) 를 생성하게 된다면 우선 Entity 라는 것을 만들고 아래의 코드처럼 building block 마냥 하나하나 덧붙여나간다. -``` +```rs cmd.spawn().insert(Name).insert(Weapon).insert(Glasses).insert(Shoes)... ``` @@ -56,7 +56,7 @@ Component : 객체를 이루는 구성품. Player 를 만든다고 하면 무기 그런데, Player 라고 하면 보통 지니고 있는 Component set 이라고 하는게 존재한다. 예를 들면, Player 라고하면 이름, 무기, 신발 등등 을 지니고 있어야한다. 매번 위의 코드처럼 하나하나 insert 할 수 없으니, Component 들을 모아서 Bundle 이라고 정의해서 한번에 spawn 할 수 있다. -``` +```rs [derive(Bundle)] struct PlayerBundle { name: Name, @@ -74,7 +74,7 @@ Player Entity 만 중력을 받고 싶다고 가정해보자. 그러면 아래 Query 는 Iterator trait 을 지니고 있어서 iter() 메소드를 사용해서 component 들을 가져올 수 있는데 여기에는 Player Component 만 들어있기 때문에 Star Component 에는 적용하지 않을 수 있다. -``` +```rs fn gravity_system(query: Query<&Player>) { ... } @@ -104,7 +104,7 @@ main app(CoreStage) : First-> PreUpdate -> Update -> PostUpdate-> Last sub-app(RenderStage) : Extract-> Prepare-> Queue-> PhaseSort-> Render-> Cleanup ECS 의 모든 system 들은 모두 stage 에 들어간다. -``` +```rs app() .add_system(gravity_system) // == .add_to_stage(CoreStage::Update, gravity_system) ... @@ -115,7 +115,7 @@ bevy scheduler 는 같은 stage 에 있는 system 들을 병렬적으로 실행 예를 들면, collision 이 발생했을 때 entity 를 despawn 하는 system 이 존재하고, 또 같은 stage 에 Query 를 이용하여 그 entity 에 접근해서 component 를 insert 하는 system 이 존재한다고 해보자. 그러면 두 system 이 병렬적으로 실행되기 때문에 Query 에는 element 가 존재하여 접근하게 되는데 이 때 despawn 이 먼저 일어난 상태라면 아래와 같은 코드에서 문제가 생길 것이다. -``` +```rs for (entity,...) in query.iter() { cmd.entity(entity).insert(component) // makes a trouble! } @@ -147,7 +147,7 @@ state 에 비례해서 코드가 증가하게 될 것임. 이런 문제점 때문에 분명 모든 state 에 대해 적용되는 system 을 등록하는 방법이 있을 것이고 이를 찾아봐야할 것 같음. 이 문제에 대해 내가 생각한 솔루션은 다음과 같다. stateX1 stateX2 에서 하나의 system 이 적용되게 하려면, 전체 app 에 add_system 을 사용해서 적용한다. -``` +```rs app().add_system(system_on_X) ... @@ -156,11 +156,11 @@ fn system_on_X(mut cmd : Commadns, query : Query<&X>,..){ ... } system_on_X는 X component 가 존재해야만 호출된다. StateA-> EnteringStateX-> StateX1<-> StateX2-> ExitingStateX 의 관계를 가지는 state 들을 모두 생성해두고 enteringStateX 에서 다음과 같은 system 이 최소 한번 호출되도록 한다. -``` +```rs fn enterX(mut cmd : Commands, ..){ cmd.spawn().insert(X); } ``` 마찬가지로 ExitingStateX 에서 아래의 system 이 최소 한번 호출되도록 하면 된다. -``` +```rs fn exitX(mut cmd: Commands, ..){ cmd.despawn(X;) } ``` diff --git a/_posts/2022-06-06-cow.markdown b/_posts/2022-06-06-cow.markdown index 7a729da..183eb13 100644 --- a/_posts/2022-06-06-cow.markdown +++ b/_posts/2022-06-06-cow.markdown @@ -18,7 +18,7 @@ toc_sticky: true # Cow in Rust Rust 에서는 std::borrow::Cow 로 다음과 같이 정의되어 있음. -``` +```rs pub enum Cow<'a, B> where B: 'a + ToOwned + ?Sized, { Borrowed(&'a B), Owned(::Owned), diff --git a/_posts/2022-06-13-lifetime-rustonomicon.markdown b/_posts/2022-06-13-lifetime-rustonomicon.markdown index 0132f86..46ff625 100644 --- a/_posts/2022-06-13-lifetime-rustonomicon.markdown +++ b/_posts/2022-06-13-lifetime-rustonomicon.markdown @@ -21,7 +21,7 @@ Lifetime 은 rust 에서 reference 를 다룰 때 등장하는 개념으로, 'a 와 같은 식으로 표기한다. 여기서 a 는 우리가 일반 변수를 선언하듯이 lifeitme 에 이름을 준 것이다. ### Generic type parameter -``` +```rust fn longest_with_an_announcement<'a, T>( x: &'a str, y: &'a str, @@ -41,13 +41,13 @@ where ## Rust Compiler's view -``` +```rust let x = 0; let y = &x; let z = &y; ``` 개발자 입장에서 우리는 위의 코드를 작성하고 보지만, 컴파일러 입장에서는 아래와 같이 lifetime 을 생각하며 추론,컴파일을 한다. -``` +```rust // NOTE: `'a: {` and `&'b x` is not valid syntax! 'a: { let x: i32 = 0; @@ -67,14 +67,14 @@ let z = &y; JAVA, C# 같은 OOP 에 흔히 있는 개념으로 다음과 같은 관계를 의미한다. - Subtype 은 Supertype(혹은 Basetype) 보다 더욱 구체적인 type. ( Subtype inherits Basetype ) - 수학적으로는 S <: B -``` +```rust let s: Sub = ...; let u: Base = s; // ok! ``` 물론 Rust 에서는 상속개념이 없기 때문에 type 에 대해서는 이와 같은 관계를 보기 힘들고, Lifetime 에서 Subtype 관계를 확인할 수 있다. -``` +```rust let s: &'longer str = ...; let u: &'short str = s; // ok! ``` diff --git a/_posts/2022-10-25-gil.markdown b/_posts/2022-10-25-gil.markdown index 13325ef..f428331 100644 --- a/_posts/2022-10-25-gil.markdown +++ b/_posts/2022-10-25-gil.markdown @@ -15,7 +15,7 @@ Python Global Interpreter Lock 의 약자로 간단히 말하면 mutex 라고 python interpreter 에 대한 제어를 한 thread 만 가질 수 있게 해주는 메커니즘 -``` +```py import sys a = [] b = a diff --git a/_posts/2024-05-08-JellyfinPlugin.markdown b/_posts/2024-05-08-JellyfinPlugin.markdown index 9207d3b..c8f88b0 100644 --- a/_posts/2024-05-08-JellyfinPlugin.markdown +++ b/_posts/2024-05-08-JellyfinPlugin.markdown @@ -42,7 +42,7 @@ C# system library 로서 제공됨. ## exception c++ 과 크게 다를 바 없음. -``` +```c# try { // Code to try goes here. @@ -60,7 +60,7 @@ finally rethrow -``` +```c# catch(){ throw } @@ -72,20 +72,20 @@ throw 여기서 프로젝트를 그대로 가져와서 사용하면 된다. 현 프로젝트에 대해 linter 적용 -``` +```bash $ dotnet format ``` 현 프로젝트 빌드 -``` +```bash $ dotnet build ``` 현 프로젝트를 빌드하고 배포에 필요한 dependecy 파일들 모두 생성. -``` +```bash $ dotnet publish ``` package dependency 추가 -``` +```bash $ dotnet add package PACKAGE_NAME ``` @@ -121,7 +121,7 @@ Route 에 기술된 url( [controller] 는 해당 class 에서 Controller 를 제 method 에서 `HttpGet("forecast")` 으로 등록했기 때문에 `https://localhost/weatherforcast/forecast` url 에 대한 http get response 를 주게 된다. -``` +```c# [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase @@ -159,7 +159,7 @@ RR 은 Rapid Rease 로 4주에 한번씩 major update 가 발생함. 반면에, ESR 은 Extended Support Release 의 약자로 42주에 한번씩 major update 가, minor update 는 4주에 한번씩 발생하기 때문에 굉장히 보수적인 릴리즈라고 할수 있음. -``` +```bash $ apt install firefox-esr ``` @@ -172,7 +172,7 @@ $ apt install firefox-esr ### Usage code -``` +```c# using OpenQA.Selenium; using OpenQA.Selenium.Firefox; @@ -213,7 +213,7 @@ FirefoxProfile 은 실제 firefox browser 에서 preference 를 수정하겠다 아래처럼 빌드하게 되면 dependency package 까지 함께 제공되기 때문에 배포하기에 좋다. 특히 Selenium WebDriver 를 의존하고 있는데, 아래 커맨드를 수행하게 되면 WebDriver.Dll 도 함께 나오며, jellyfin plugin directory 에 함께 넣기만 하면 되서 편리함. 시스템에 설치할 필요가 없음. -``` +```bash $ dotnet publish ``` jellyfin config plugins 에 본인의 디렉토리를 생성하고 생성된 프로젝트의 dll 과 WebDriver 를 함께 넣기만 하면 된다. diff --git a/_posts/2024-10-28-grapple-with-vm-protection.markdown b/_posts/2024-10-28-grapple-with-vm-protection.markdown index 66dcc13..7488aca 100644 --- a/_posts/2024-10-28-grapple-with-vm-protection.markdown +++ b/_posts/2024-10-28-grapple-with-vm-protection.markdown @@ -1,7 +1,7 @@ --- layout: single title: "Grapple with VM protection" -date: 2024-10-23 11:56:13 +0900 +date: 2024-10-28 11:56:13 +0900 categories: reversing toc: true toc_sticky: true