Tip/Linux2026. 1. 9. 23:50
pkg update && pkg upgrade pkg

install nodejs

npm install -g typescript

npm install -g ts-node

 

  • 디렉토리 생성:
    mkdir my-project && cd my-project
  • NPM 초기화: npm init -y
  • TS 설정 파일 생성: tsc --init

실행

ts-node index.ts

'Tip > Linux' 카테고리의 다른 글

[Termux] VS Code 설치 및 실행  (0) 2025.12.11
Lex & Yacc로 간단한 사칙연산 계산기 만들기2  (0) 2025.09.12
LEX 기초  (0) 2025.09.09
Posted by chobocho
Tip/Android2026. 1. 4. 12:06

Gemini를 이용하여 메모리 게임을 만들어 보았다. (Pro 모드)

이미지 리소스는 기존에 만들어 둔것을 이용하도록 요청 하였다.

1. 사용 프롬프트


- 1차 -
1. 1인용 같은 그림 찾기 게임을 만들어줘
2. 보드는 녹색으로 해주세요
3. 1부터 100단계 레벨을 만들어 주세요.
4. 레벨별로 타임제한과 표시되는 카드수가 다르게 해주세요
5. 진행한 레벨을 브라우저의 디비에 저장해서 이어하기 기능을 지원해 주세요.
6. F2키를 누르면, 게임 중이면 진짜 중지 할꺼냐고 물어보고 새 게임을 시작하게 해주세요.
7. 바닐라 자바스크립트로 짜주세요.
8. 카드 이미지는 assets폴더에 있고 모두 PNG 파일입니다.
9. 카드 이미지 이름은 다음과 같습니다
- 배경: back
- 스페이드: S2 - S10, SJ, SQ, SK, SA
- 다이아: D2 - D10, DJ, DQ, DK, DA
- 하트: H2 - H10, HJ, HQ, HK, HA
- 클로버: C2 - C10, CJ, CQ, CK
10. 마우스와 터치패드도 지원하게 해주세요


- 2차 -
1. 마우스 첫 클릭이 씹히는 버그가 있어요. 고쳐주세요.
2. 카드 클릭 및 뒤집 힐 때, 게임 성공시 사운드 이펙트를 넣어주세요.
3. 배경음악을 넣어 주세요


- 3차 -
1. 시간을 BAR 형태로도 같이 표시해주세요. 시간이 5초 이내가 되면 빨간 색 으로 변화를 주세요
2. 일시 정지 버튼을 만들어 주세요


- 4차 -
1. 게임이 종료하고 다음 판으로 넘어가면 시작 버튼을 눌러야 시작하게 바꿔주세요


- 5차 - 
1. 내가 bgm 파일은 지웠어
2. mp3 파일 로딩 부분은 손대지 말아줘 (내가 로직을 변경했어)
3. 재시작을 마우스 클릭으로 할 수 있게 해주세요.

 

2. 게임 해보기

http://chobocho.com/game/memory/index.html

 

솔로 메모리 게임

PAUSED 게임이 일시 정지되었습니다. 게임 재개

chobocho.com

 

3. 소스코드

 

https://github.com/chobocho?tab=repositories

 

chobocho - Overview

chobocho has 109 repositories available. Follow their code on GitHub.

github.com

 

Posted by chobocho
Tip/Windows2025. 12. 31. 21:54
Posted by chobocho
Tip/Windows2025. 12. 31. 21:51
Posted by chobocho
Tip/Linux2025. 12. 11. 00:09

1. Termux 패키지 업데이트
pkg update && pkg upgrade -y
pkg install -y tur-repo

2. Code-Server 설치
pkg install -y code-server

3. Code-Server 실행
code-server

4. 웹 브라우저에서 접속 및 로그인
 * 웹브라우저 주소창에 http://localhost:8080 또는 http://127.0.0.1:8080을 입력
 * 비밀번호 입력 창이 뜹니다.


5. 비밀번호 확인 방법 (1회 실행 후 확인 가능)
cat ~/.config/code-server/config.yaml
여기서 password 체크

에디터 실행 화면

 

6. (선택 사항) 편의 설정
인증 끄기 (보안상 로컬에서만 쓸 때 추천):
 * 설정 파일 열기: nano ~/.config/code-server/config.yaml
 * auth: password 부분을 auth: none으로 수정.
 * Termux에서 실행 중인 code-server를 종료(Ctrl + C) 후 다시 실행.

7.  팁
 * 배터리 최적화: 안드로이드 시스템이 백그라운드에서 Termux를 죽이지 않도록, 배터리 최적화 설정에서 Termux를 '제한 없음'으로 설정 추천
 * 외부 접속: 같은 와이파이 내의 다른 PC나 태블릿에서 접속하고 싶다면, config.yaml 파일에서 
    bind-addr: 127.0.0.1:8080 → 0.0.0.0:8080으로 변경 (위 첨부 이미지 참고)

* 참고: 제미나이의 도움으로 만든 글 입니다.

'Tip > Linux' 카테고리의 다른 글

[Termux] TypeScript 개발 환경 구축  (0) 2026.01.09
Lex & Yacc로 간단한 사칙연산 계산기 만들기2  (0) 2025.09.12
LEX 기초  (0) 2025.09.09
Posted by chobocho
Tip/Windows2025. 11. 27. 23:49
package main

import (
	"fmt"
	"image"
	_ "image/gif"
	"image/jpeg"
	"log"
	"os"
	"strconv"

	// JPEG 디코딩을 위해 필요합니다.
	// PNG, GIF 등 다른 형식을 지원하려면 이 아래에 해당 형식을 _로 import 해야 합니다.
	_ "image/jpeg"
	_ "image/png"
)

// compressImage는 입력 이미지 파일의 크기를 유지하면서 JPEG 품질을 낮춰 용량을 줄입니다.
func compressImage(inputPath, outputPath string, quality int) error {
	// 1. 입력 파일 열기
	inputFile, err := os.Open(inputPath)
	if err != nil {
		return fmt.Errorf("입력 파일 열기 오류: %w", err)
	}
	defer inputFile.Close()

	// 2. 이미지 디코딩 (파일 내용을 image.Image 인터페이스로 변환)
	// image.Decode는 파일의 형식을 자동으로 감지합니다.
	img, _, err := image.Decode(inputFile)
	if err != nil {
		return fmt.Errorf("이미지 디코딩 오류: %w", err)
	}

	// 3. 출력 파일 생성
	outputFile, err := os.Create(outputPath)
	if err != nil {
		return fmt.Errorf("출력 파일 생성 오류: %w", err)
	}
	defer outputFile.Close()

	// 4. JPEG 인코딩 옵션 설정
	// Quality는 1(최저 품질/최대 압축)부터 100(최고 품질/최소 압축)까지의 값입니다.
	options := &jpeg.Options{
		Quality: quality,
	}

	// 5. 낮은 품질로 이미지 인코딩 (재압축)
	// img.Bounds()를 사용하여 이미지 크기를 그대로 유지합니다.
	err = jpeg.Encode(outputFile, img, options)
	if err != nil {
		return fmt.Errorf("JPEG 인코딩 오류: %w", err)
	}

	fmt.Printf("✅ 이미지 압축 완료: %s -> %s (품질: %d)\n", inputPath, outputPath, quality)
	return nil
}

func printUsage(fileName string) {
	fmt.Printf("Usage: %s <input image file> [Quality]\n", fileName)
	fmt.Printf("       %s input.jpg \n", fileName)
	fmt.Printf("       %s input.jpg 75\n", fileName)
}

func main() {
	if len(os.Args) < 2 {
		printUsage(os.Args[0])
		os.Exit(0)
	}

	if os.Args[1] == "--help" || os.Args[1] == "-h" || os.Args[1] == "/?" {
		printUsage(os.Args[0])
		os.Exit(0)
	}

	if os.Args[1] == "--version" || os.Args[1] == "-v" || os.Args[1] == "/v" {
		fmt.Printf("Version: 1.0.0\n")
	}
	
	inputFileName := os.Args[1]
	outputFileName := "resized_" + inputFileName
	compressionQuality := 75

	if len(os.Args) == 3 && os.Args[2] != "" {
		quality, err := strconv.Atoi(os.Args[2])
		if err != nil {
			log.Fatalf("품질 값 변환 오류: %v", err)
		}
		compressionQuality = quality
	}

	if err := compressImage(inputFileName, outputFileName, compressionQuality); err != nil {
		log.Fatalf("이미지 압축 실패: %v", err)
	}
}

img_resize.zip
1.62MB

 

'Tip > Windows' 카테고리의 다른 글

Gemini 로 만든 주사위 게임  (0) 2025.12.31
[AWK] 파일을 분류해서 A-Z 폴더로 이동하기  (0) 2025.11.08
EUR-KR to UTF8 변환 코드  (0) 2025.09.30
Posted by chobocho
Tip/Windows2025. 11. 8. 00:21
# dir/b | utf | awk -f C:\WORK\UTIL\AWK\make_folder.awk -v HEAD=%1 | utf -kr > r.bat
# r.bat 

BEGIN {
    if (HEAD == "") {
        HEAD = "GBA_"
    }
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for (i = 1; i <= length(alphabet); i++) {
        first = substr(alphabet, i, 1)
        folder[first] = 0
    } 
}
{
    if ($0 ~ /\.awk/) { 
        print "REM SKIP AWK FILE: " $0
        next 
    }

    if ($0 ~ /r\.bat/) { 
        print "REM SKIP TEMP BAT FILE: " $0
        next 
    }

    # 1. 파일명 전체를 변수에 저장
    file_name = $0;
    
    # 2. 파일명의 첫 글자를 추출하고 대문자로 변환
    # Windows 파일 시스템은 대소문자를 구분하지 않지만, 폴더명을 일관되게 대문자로 만듭니다.
    first_char = toupper(substr(file_name, 1, 1));

    # 3. 첫 글자가 영문 대문자(A-Z)인지 확인
    if (first_char ~ /^[A-Z]$/) {
        
        if (folder[first_char] == 0) {
           # 4. 대상 폴더 생성 명령 실행 (move 명령어 실행 전에 폴더가 없으면 오류 발생)
           print "mkdir " HEAD first_char;
        }
        folder[first_char]++
        
        # 5. 파일 이동 명령 실행
        # 파일명에 공백이 있을 수 있으므로 큰따옴표(\")로 감싸줍니다.
        # Windows의 move 명령어 구문을 사용합니다.
        print "move \"" file_name "\" " HEAD first_char "\\";
    } else {
        # 6. A-Z로 시작하지 않는 파일 처리
    }
}
END {
    for (i = 1; i <= length(alphabet); i++) {
        first = substr(alphabet, i, 1)
        if (folder[first] > 0) {
            print "REM " HEAD first " : "folder[first]
        }
    } 
}
Posted by chobocho
Tip/Android2025. 10. 30. 00:24

Putty로 접속시 괘선이 깨지는 경우, 위와 같이 설정하면 된다.

Posted by chobocho
Tip/Windows2025. 9. 30. 01:40
package main

import (
	"fmt"
	"io"
	"os"

	"golang.org/x/text/encoding/korean"
	"golang.org/x/text/transform"
)

func main() {
	if len(os.Args) < 2 {
		// 표준 입력(stdin)에서 euc-kr로 인코딩된 데이터를 읽습니다.
		eucKrReader := transform.NewReader(os.Stdin, korean.EUCKR.NewDecoder())

		// euc-krReader에서 읽은 데이터를 utf-8로 변환하여 표준 출력(stdout)에 씁니다.
		_, err := io.Copy(os.Stdout, eucKrReader)
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error: %v\n", err)
			os.Exit(1)
		}
	} else if len(os.Args) == 2 && os.Args[1] == "-kr" {
		// 표준 출력(stdout)을 EUC-KR 인코더로 래핑합니다.
		eucKrWriter := transform.NewWriter(os.Stdout, korean.EUCKR.NewEncoder())

		// 표준 입력(stdin)에서 읽은 UTF-8 데이터를 EUC-KR로 변환하여 씁니다.
		_, err := io.Copy(eucKrWriter, os.Stdin)
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error: %v\n", err)
			os.Exit(1)
		}
	} else {
		print("Chobocho's EUC-KR to UTF-8 Converter V0.2\n" +
			"Usage: utf.exe < euc_kr_file.txt\n" +
			"       utf.exe -kr > euc_kr_file.txt\n")
	}
}
Posted by chobocho
Tip/Windows2025. 9. 13. 11:42

진짜 포장만 뜯고 안 쓴 노트북인지 확인하는 방법

부팅해서 cmd창 열고 위 명령어 넣으면 됨

생성된 파일 battery-report.html을 열어보면 아래와 같이 배터리 충방전 이력이 표시됨

Posted by chobocho