Phaser JS game framework

Phaser는 HTML5 게임 프레임워크 입니다:

이는 캔버스 및 WebGL을 사용하여 데스크탑과 모바일 브라우저에서 동작하는 2D 게임을 만드는 데 사용됩니다. Phaser는 개방적이고 활발한 커뮤니티와 함께, 매우 포괄적인 문서와 예제를 제공하고 있어 개발자들이 쉽게 게임을 개발할 수 있도록 돕습니다.

Phaser를 사용하는 개발자는 JavaScript 또는 TypeScript를 사용하여 게임을 작성할 수 있으며, 프레임워크는 물리 엔진, 스프라이트, 입출력, 사운드 및 음악, 상태 관리 등 게임 개발에 필요한 다양한 기능들을 제공합니다.

Phaser의 주요 특징은 다음과 같습니다:

  • Canvas와 WebGL 렌더링: Phaser는 자동으로 브라우저가 지원하는 가장 적합한 렌더링 방식을 선택합니다.
  • 다양한 게임 오브젝트 지원: 텍스트, 스프라이트, 타일맵, 파티클 시스템 등 다양한 게임 오브젝트를 지원합니다.
  • 물리 엔진 통합: Arcade Physics, P2JS, Ninja Physics 등 여러 물리 엔진을 통합하여 사용할 수 있습니다.
  • 입출력: 키보드, 마우스, 터치 스크린을 위한 강력한 입력 지원을 제공합니다.
  • 애니메이션: 스프라이트 애니메이션을 쉽게 추가하고 관리할 수 있습니다.
  • 상태 관리: 게임의 다양한 상태를 관리할 수 있는 시스템을 제공합니다.
  • 자산 관리: 이미지, 오디오 파일, JSON 데이터 등의 자산을 로드하고 관리하는 로더 시스템을 가지고 있습니다.
  • 모바일 지원: 모바일 브라우저에 최적화되어 있으며, 반응형 게임을 만들 수 있습니다.

Phaser는 대표적인 오픈 소스 게임 프레임워크로, 개인 프로젝트부터 상업적인 게임 개발에 이르기까지 다양한 목적으로 사용됩니다.

ZeroMQ (0MQ, ZMQ)

 ZeroMQ (또는 0MQ, ZMQ)는 고성능 비동기 메시징 라이브러리로, 소켓 프로그래밍을 단순화하여 메시지 큐의 기능을 더 쉽고 유연하게 사용할 수 있게 해줍니다. ZeroMQ를 사용하면 다양한 메시징 패턴을 통해 분산된 시스템과 서비스 간에 데이터를 교환할 수 있습니다. 이 라이브러리는 다양한 프로그래밍 언어로 구현되어 있어, 여러 언어로 작성된 시스템 간에도 통신이 가능합니다.

ZeroMQ는 기존의 메시지 지향 미들웨어(MOM) 시스템과는 달리 브로커가 없는 아키텍처를 제공합니다. 이는 메시지를 라우팅하거나 큐잉하는 중앙 서버가 없다는 것을 의미합니다. 대신, ZeroMQ 소켓을 사용하여 직접적으로 클라이언트와 서버, 혹은 노드 간에 통신할 수 있습니다. 이는 시스템의 복잡성을 줄이고 성능을 향상시키는 데 도움을 줍니다.

ZeroMQ는 다음과 같은 여러 통신 패턴을 지원합니다:

  • 요청-응답(Request-Reply): 클라이언트-서버 패턴을 구현하며, 하나의 요청에 하나의 응답을 보냅니다.
  • 발행-구독(Publish-Subscribe): 메시지를 발행하고 여러 구독자가 메시지를 수신할 수 있는 패턴입니다.
  • 파이프라인(Push-Pull): 작업 분배자와 작업자 노드 간의 작업 부하 분산을 위한 패턴입니다.
  • 독점적 페어(Exclusive Pair): 두 노드 간의 전용 연결을 위한 패턴입니다.

ZeroMQ는 높은 확장성과 성능을 가지고 있으며, 분산 컴퓨팅, 마이크로서비스 아키텍처, 비동기 태스크 큐, 리얼타임 데이터 전송 등 다양한 분야에서 사용됩니다. 그것의 비동기 I/O 모델과 비블로킹 방식의 소켓 연산은 효율적인 리소스 사용과 빠른 데이터 처리를 가능하게 합니다.

ZeroMQ는 복잡한 네트워크 프로토콜과 통신 패턴을 추상화하여 개발자가 메시징 시스템을 더 쉽게 구축할 수 있도록 돕습니다. 이로 인해 개발자는 네트워크의 세세한 부분에 대해 걱정하지 않고도, 메시지 교환 로직에 더 집중할 수 있습니다.

RxJS (Reactive Extensions for JavaScript)

RxJS (Reactive Extensions for JavaScript)는 비동기 및 이벤트 기반 프로그램을 위한 라이브러리입니다. 이는 반응형 프로그래밍 패러다임을 따르며, 데이터 스트림과 변화를 쉽게 생성, 구성, 변환, 관리하고 조작할 수 있는 방법을 제공합니다.

RxJS는 옵저버블(Observables)이라는 핵심 개념을 중심으로 구축되어 있습니다. 옵저버블은 데이터 스트림을 비동기적으로 전달하는 객체로, 시간이 지남에 따라 여러 값을 방출할 수 있습니다. 개발자들은 이 옵저버블을 구독하여 데이터 스트림에 있는 값이나 이벤트가 발생할 때마다 반응할 수 있습니다.

RxJS는 다양한 유형의 비동기 이벤트를 처리할 수 있게 해주는 방대한 연산자 세트를 제공합니다. 이 연산자들은 필터링, 프로젝션, 변환, 집계 등의 작업을 수행할 수 있어, 복잡한 비동기 코드를 더 선언적이고 관리하기 쉬운 방식으로 작성할 수 있게 도와줍니다.

예를 들어, HTTP 요청, DOM 이벤트, 타이머 등 다양한 소스로부터 생성된 비동기 데이터 스트림을 RxJS를 사용하여 쉽게 다룰 수 있습니다. 이를 통해 개발자는 비동기 코드의 복잡성을 줄이고, 데이터 스트림을 통해 발생하는 다양한 시나리오를 쉽게 조작하고, 여러 데이터 스트림을 결합하고, 에러 처리를 보다 우아하게 할 수 있습니다.

RxJS는 프론트엔드 개발, 특히 Angular 프레임워크에서 널리 사용되며, Angular의 HTTP 클라이언트 및 이벤트 처리와 같은 비동기 작업을 처리하는 데 있어 중심적인 역할을 합니다. 하지만 그 사용범위는 Angular에 국한되지 않으며, 모든 JavaScript 환경에서 유용하게 사용될 수 있습니다.

CapacitorJS

 CapacitorJS는 웹 기술을 활용하여 iOS, Android 및 웹 플랫폼을 위한 크로스 플랫폼 앱을 개발할 수 있도록 해주는 오픈 소스 프레임워크입니다. Capacitor를 사용하면 HTML, CSS 및 JavaScript/TypeScript 같은 웹 기술을 사용하여 하나의 코드베이스로 다양한 플랫폼에 배포할 수 있는 애플리케이션을 만들 수 있습니다.

Capacitor는 Ionic 팀에 의해 개발되었으며, 특히 Ionic 프레임워크와 함께 사용하기 위해 설계되었습니다. 그러나 Ionic과 독립적으로 어떤 웹 프레임워크나 라이브러리와도 함께 사용될 수 있습니다. 이는 웹 뷰를 기반으로 작동하지만, 네이티브 기능에 접근할 수 있는 API를 제공하여 웹 앱이 마치 네이티브 앱처럼 느껴지게 합니다.

CapacitorJS는 네이티브 코드와의 통합을 용이하게 하고, 플러그인 시스템을 통해 네이티브 기능을 확장할 수 있는 기능을 제공합니다. 또한, 개발자들이 필요에 따라 자체 네이티브 코드를 쉽게 추가할 수 있도록 설계되었습니다. 이를 통해 웹 앱이 카메라, GPS, 파일 시스템 등의 네이티브 기능을 사용할 수 있게 합니다.

Publish/Subscribe (Pub/Sub) 패턴

Publish/Subscribe (Pub/Sub) 패턴은 메시징 패턴 중 하나로, 메시지를 보내는 출판자(publisher)와 메시지를 받는 구독자(subscriber)가 직접적인 연결 없이 메시지를 교환할 수 있는 방식입니다. 이 패턴은 분산 시스템, 이벤트 주도 아키텍처, 메시지 큐 시스템 등에서 널리 사용됩니다.

기본 개념

  • Publisher: 메시지를 발행하는 주체로, 특정 토픽에 대한 정보를 보냅니다. 발행자는 메시지를 받을 구독자가 누구인지, 또는 메시지가 어떻게 전달되는지에 대해서는 알지 못합니다.

  • Subscriber: 메시지를 구독하는 주체로, 관심 있는 토픽을 구독하고 해당 토픽에 대한 메시지가 발행될 때마다 그 메시지를 받습니다.

  • Message: 특정 데이터 또는 정보를 담고 있는 패킷으로, 특정 토픽에 대한 정보를 포함할 수 있습니다.

  • Topic: 메시지를 분류하기 위한 범주 또는 채널입니다. 구독자는 하나 이상의 토픽을 구독할 수 있으며, 발행자는 하나의 토픽에 대해 메시지를 발행할 수 있습니다.

  • Broker or Message Queue: 발행자와 구독자 사이의 중개자 역할을 합니다. 메시지의 라우팅, 버퍼링, 전달 등을 담당합니다. 구독자와 발행자 사이를 연결하고, 구독자가 오프라인일 때는 메시지를 저장해 둘 수도 있습니다.

장점

  • 탈중앙화: 구독자와 발행자 간에는 직접적인 연결이 없어, 각자의 처리량과 성능에 영향을 주지 않습니다.
  • 확장성: 새로운 발행자나 구독자를 시스템에 추가하는 것이 비교적 쉽습니다.
  • 유연성: 구독자는 필요한 메시지만 선택적으로 받을 수 있으며, 발행자는 구독자의 존재를 신경 쓰지 않고 메시지를 발행할 수 있습니다.
  • 비동기 처리: 구독자는 메시지를 자신의 처리 속도에 맞추어 처리할 수 있으며, 메시지는 중간에 버퍼링 될 수 있습니다.

단점

  • 메시지 보장: 일부 Pub/Sub 시스템에서는 메시지가 항상 전달되리라는 것을 100% 보장하지 않습니다 (At-least-once, At-most-once, Exactly-once 등의 배달 보장 수준에 따라 다름).
  • 복잡성: 시스템의 규모가 커질수록, 더 많은 수의 토픽과 메시지 관리로 인해 복잡성이 증가할 수 있습니다.
  • 디버깅과 모니터링: 분산된 nature로 인해 디버깅과 모니터링이 더 어려울 수 있습니다.

예시

  • IoT 디바이스: 다양한 센서들이 온도, 습도 등의 데이터를 발행하고, 이를 분석하는 서버들이 해당 토픽을 구독하여 데이터를 처리합니다.
  • 서비스 간 통신: 마이크로서비스 아키텍처에서 서비스 간의 결합도를 낮추기 위해 사용됩니다.
  • 이벤트 주도 아키텍처: 사용자의 행동에 따른 이벤트를 발행하고, 이를 여러 시스템에서 구독하여 반응합니다.

메시지 브로커로는 Apache Kafka, RabbitMQ, Google Pub/Sub, Amazon SNS/SQS 등이 널리 사용됩니다.

C++ 의 vector

 

std::vector는 C++ 표준 템플릿 라이브러리(STL)의 일부로서, 동적 배열과 유사한 구조를 가진 컨테이너입니다.

std::vector의 주요 특징:

  1. 동적 크기: 백터는 크기가 동적으로 변경될 수 있습니다. 즉, 런타임에 항목을 추가하거나 제거할 수 있습니다.
  2. 연속 메모리: 백터는 내부적으로 연속된 메모리 공간에 데이터를 저장합니다. 따라서 배열처럼 인덱스를 사용하여 빠르게 접근할 수 있습니다.
  3. 자동 메모리 관리: 백터는 내부적으로 메모리를 자동으로 할당하고 해제합니다.

std::vector의 사용 예:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers;

    // 값을 추가합니다.
    numbers.push_back(1);
    numbers.push_back(2);
    numbers.push_back(3);

    // 인덱스를 사용하여 값에 접근합니다.
    std::cout << numbers[1] << std::endl;  // 출력: 2

    // 크기와 용량을 조회합니다.
    std::cout << "Size: " << numbers.size() << std::endl;  // 출력: 3
    std::cout << "Capacity: " << numbers.capacity() << std::endl;

    // 반복자를 사용하여 백터의 요소를 반복합니다.
    for(int num : numbers) {
        std::cout << num << " ";
    } // 출력: 1 2 3

    return 0;
}

이 외에도 std::vector는 여러 메서드와 기능을 제공합니다. 예를 들면 inserteraseresizereserve 등이 있습니다. C++의 std::vector를 효과적으로 사용하려면 해당 메서드와 기능들을 숙지하는 것이 중요합니다.

Cimetech Bluetooth Numeric Keypad, 22-Keys Wireless Number Pad K304 Manual

Cimetech Bluetooth Numeric Keypad, 22-Keys Wireless Number Pad K304 Manual PDF
https://drive.google.com/file/d/1bTF3H9KNUHBFiseui2qHGQ92Vx_uVYGG/view?usp=drive_link

Amazon Link
https://www.amazon.ca/cimetech-Multi-Function-Accounting-Extensions-Compatible/dp/B0BG8BPN9C?ref_=ast_sto_dp&th=1

애플 실리콘을 능가하는 퀄컴의 새 프로세서

 Qualcomm은 새로운 Snapdragon Elite X 칩을 발표하여 노트북 시장에서 Intel, AMD 및 Apple과의 경쟁력을 강화하려 한다. 이 칩은 2024년부터 노트북에서 사용 가능하며 인공 지능 작업을 더 잘 처리할 수 있도록 재설계되었다. Qualcomm은 X Elite가 일부 작업에서 Apple의 M2 Max 칩보다 빠르며 Apple 및 Intel PC 칩보다 에너지 효율이 뛰어나다고 주장했다.

이 새로운 칩은 4nm 프로세스 기술을 기반으로 하며, 3.8GHz의 12개의 고성능 코어와 최대 4.3GHz까지의 듀얼 코어 부스트를 제공한다. 또한 Qualcomm은 CPU 메모리 성능을 향상시켰다고 밝혔다. Qualcomm의 이러한 발표는 PC 칩 경쟁에서 Qualcomm, Apple, Intel 간의 레이스를 가열시키고 있으며, Qualcomm은 Snapdragon X Elite를 “PC용으로 만든 가장 강력한 컴퓨팅 프로세서”로 부르며, 최고 수준의 CPU 성능, 선도적인 기기 내 AI 추론 및 매우 효율적인 전문 처리 기능을 제공한다고 주장했다.

이러한 발표와 새로운 칩 기술은 Qualcomm이 노트북 시장에서 Intel, AMD 및 Apple과의 경쟁에서 어떻게 위치할지에 대한 통찰력을 제공하며, 노트북 사용자에게 더 나은 성능과 효율성을 제공할 가능성을 보여준다.

특히 소프트웨어 개발자 입장에서 애플 실리콘 칩을 내장한 맥이 최신 인텔 칩을 내장한 윈도 PC 보다 컴파일이나 트랜스파일링 속도가 빠르지도 않았으며 가격이 비싸 가성비가 떨어지는 선택이었다. 장점은 어떠한 작업을 해도 하루 종일 버티는 베터리, 빠른 비디오 처리와 압축정도 였는데 이것은 개발자 입장에선 꼭 필요한 장점은 아니다.

하기 싫은 일, 미루는 일을 하는 간단한 방법

 


미루는 사람들의 특징

  • 주의력이 부족하다.
  • 학업 과제를 수행하는데 드는 시간에 대해 과소평가한다.
  • 과제에 대한 불쾌감을 과대평가한다.
  • 자신의 학습 행동의 효율성에 대해 비현실적으로 낙관적이다.
  • 시간관리를 잘하지 못한다.
  • 충동을 억제하기 힘들다.


해결책

  • 저 일을 완료하지 못하면 하고 싶은 것을 못한다는 규칙을 만든다. 예를 들면 이런거지. 저 일을 마치지 못하면 식사, 게임이나 섹스등은 못한다. 는 규칙을 만들고 주위 사람들이나 지인들에게 오픈하고 꼭 지키는 것이다. 그리고 일을 마치면 완료한 것에 대한 포상으로 못하던 것을 한번 하는 것이다. 쉽지 않은가? 꼭 해보시라. (반박하시면 당신이 옳습니다)