Skip to content

Commit

Permalink
code block language
Browse files Browse the repository at this point in the history
  • Loading branch information
m1ser4ble committed Oct 28, 2024
1 parent dbd8cb0 commit 39daabe
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 26 deletions.
16 changes: 8 additions & 8 deletions _posts/2022-05-30-bevy.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Entity : 말 그대로 개체임. 우리가 게임에서 다룰 대부분의 대
우리는 어떤 객체(예를 들면 Player) 를 생성하게 된다면 우선 Entity 라는 것을 만들고
아래의 코드처럼 building block 마냥 하나하나 덧붙여나간다.

```
```rs
cmd.spawn().insert(Name).insert(Weapon).insert(Glasses).insert(Shoes)...
```

Expand All @@ -56,7 +56,7 @@ Component : 객체를 이루는 구성품. Player 를 만든다고 하면 무기
그런데, Player 라고 하면 보통 지니고 있는 Component set 이라고 하는게 존재한다. 예를 들면, Player 라고하면 이름, 무기, 신발 등등 을 지니고 있어야한다.
매번 위의 코드처럼 하나하나 insert 할 수 없으니, Component 들을 모아서 Bundle 이라고 정의해서 한번에 spawn 할 수 있다.

```
```rs
[derive(Bundle)]
struct PlayerBundle {
name: Name,
Expand All @@ -74,7 +74,7 @@ Player Entity 만 중력을 받고 싶다고 가정해보자. 그러면 아래
Query 는 Iterator trait 을 지니고 있어서 iter() 메소드를 사용해서 component 들을 가져올 수 있는데 여기에는 Player Component 만 들어있기 때문에 Star Component 에는
적용하지 않을 수 있다.

```
```rs
fn gravity_system(query: Query<&Player>) {
...
}
Expand Down Expand Up @@ -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)
...
Expand All @@ -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!
}
Expand Down Expand Up @@ -147,7 +147,7 @@ state 에 비례해서 코드가 증가하게 될 것임.
이런 문제점 때문에 분명 모든 state 에 대해 적용되는 system 을 등록하는 방법이 있을 것이고 이를 찾아봐야할 것 같음.
이 문제에 대해 내가 생각한 솔루션은 다음과 같다.
stateX1 stateX2 에서 하나의 system 이 적용되게 하려면, 전체 app 에 add_system 을 사용해서 적용한다.
```
```rs
app().add_system(system_on_X)
...

Expand All @@ -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;) }
```

Expand Down
2 changes: 1 addition & 1 deletion _posts/2022-06-06-cow.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -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(<B as ToOwned>::Owned),
Expand Down
10 changes: 5 additions & 5 deletions _posts/2022-06-13-lifetime-rustonomicon.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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;
Expand All @@ -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!
```
Expand Down
2 changes: 1 addition & 1 deletion _posts/2022-10-25-gil.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Python Global Interpreter Lock 의 약자로 간단히 말하면 mutex 라고

python interpreter 에 대한 제어를 한 thread 만 가질 수 있게 해주는 메커니즘

```
```py
import sys
a = []
b = a
Expand Down
20 changes: 10 additions & 10 deletions _posts/2024-05-08-JellyfinPlugin.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ C# system library 로서 제공됨.
## exception
c++ 과 크게 다를 바 없음.

```
```c#
try
{
// Code to try goes here.
Expand All @@ -60,7 +60,7 @@ finally

rethrow

```
```c#
catch(){
throw
}
Expand All @@ -72,20 +72,20 @@ throw
여기서 프로젝트를 그대로 가져와서 사용하면 된다.

현 프로젝트에 대해 linter 적용
```
```bash
$ dotnet format
```
현 프로젝트 빌드
```
```bash
$ dotnet build
```
현 프로젝트를 빌드하고 배포에 필요한 dependecy 파일들 모두 생성.
```
```bash
$ dotnet publish
```

package dependency 추가
```
```bash
$ dotnet add package PACKAGE_NAME
```

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
```

Expand All @@ -172,7 +172,7 @@ $ apt install firefox-esr

### Usage code

```
```c#
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;

Expand Down Expand Up @@ -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 를 함께 넣기만 하면 된다.
Expand Down
2 changes: 1 addition & 1 deletion _posts/2024-10-28-grapple-with-vm-protection.markdown
Original file line number Diff line number Diff line change
@@ -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
Expand Down

0 comments on commit 39daabe

Please sign in to comment.