Tip/Android2026. 2. 10. 23:11

폴드7에 openclaw를 설치해 보았다

# 1. 목록 업데이트
pkg update && pkg upgrade
# 2. Ubuntu
proot-distro install ubuntu
# 3. 로그인
proot-distro login ubuntu
# 4. 필수 도구 설치
apt update && apt upgrade -y
apt install curl git build-essential -y
# 5. node.js 설치
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs
# 6. openclaw 설치
npm install -g openclaw@latest
# 7. 패치 파일 생성

cat << eof > /root/fix_bug.js 
const os = require('os'); 
os.networkInterfaces = () => ({}); 
eof

 
# 8. 환경 변수 등록

echo 'export NODE_OPTIONS="-r /root/fix_bug.js"' >> ~/.bashrc 
source ~/.bashrc

 
# 9. Gemini 설정

echo 'export GEMINI_API_KEY="본인의_API_키_입력"' >> ~/.bashrc
source ~/.bashrc

 
# 10. OpenClaw 실행 확인
openclaw onboard
# 11. Openclaw 실행
openclaw gateway run

Posted by chobocho
Tip/Windows2026. 1. 26. 23:45

실행파일:

uCalendar_V1.216.2.zip
5.57MB

기본 기능 

- 일정 관리
- 일정 검색
- 메모장 

소스코드 위치

https://github.com/chobocho/uCalendar

 

GitHub - chobocho/uCalendar: Simple canlendar

Simple canlendar. Contribute to chobocho/uCalendar development by creating an account on GitHub.

github.com

 

* 관공서/기업 포함 누구나 이용할 수 있는 프리웨어 입니다.

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

Chobocho's Commander  (0) 2026.04.12
Gemini 로 만든 오델로 게임  (0) 2025.12.31
Gemini 로 만든 주사위 게임  (0) 2025.12.31
Posted by chobocho
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

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
My Life/Book Story2025. 12. 2. 23:11

A Philosophy of Software Design

https://www.amazon.com/Philosophy-Software-Design-John-Ousterhout/dp/1732102201

 

AWK 프로그래밍 언어 2판

https://www.yes24.com/product/goods/139880801

 

AWK 프로그래밍 언어 2판 | 앨프리드 에이호 | 인사이트(insight) - 예스24

코드의 거장들이 만든, 텍스트 처리의 숨은 고수 AWK1977년부터 지금까지 변하지 않는 데이터 분석 도구쉽다, 생산적이다, 언제나 사용할 수 있다!AWK 창시자가 직접 쓴 가이드대규모 로그 파일 분

www.yes24.com

Crafting Interpreters 로버트 나이스트롬의 인터프리터 in Java, C

https://www.yes24.com/product/goods/123859288

 

Crafting Interpreters 로버트 나이스트롬의 인터프리터 in Java, C | 로버트 나이스트롬 | 길벗 - 예스24

프로그래밍 언어 디자인에 관한 최고의 책! Dragon Book보다 재미있다!OOP와 함수형 프로그래밍을 모두 지원하는, 현대 프로그래밍 언어의 실용적 구현! 매일 사용하고 있는 프로그래밍 언어가 어떻

www.yes24.com

 

게으른 백만장자

https://www.yes24.com/product/goods/2603267

 

게으른 백만장자 | 마크 피셔 | 밀리언하우스 - 예스24

세계적으로 유명한 백만장자이자 자기계발 전문가인 마크 피셔의 혁신적인 부의 개념! 학교에서는 열심히 일하는 법을 가르칠 뿐 부자가 되는 법을 가르쳐주지 않았다. 부지런한 가난뱅이는 늘

www.yes24.com

 

마피아 경영학 

https://www.yes24.com/product/goods/1372947

 

마피아 경영학 | 원재길 역 | 황금가지 - 예스24

1996년 11월에 출간되자마자 경제 경영 분야의 베스트셀러에 오르며 2001년 개정판 작업에 들어가기까지, 17쇄까지 거듭한 책. 건전한(?) 경영 이론을 다룬 책들과 달리, 조잡한 수단이나 권고를 늘

www.yes24.com

밑바닥부터 시작하는 웹 브라우저

https://www.yes24.com/product/goods/153499985

 

 

 

스타트업 서비스 설계는 처음인데요

https://www.yes24.com/product/goods/158727530

 

스타트업 서비스 설계는 처음인데요 | 강대명 | 더 타이즈 - 예스24

스타트업 백엔드 개발자의 필독서! 무에서 유를 창조할 생존과 성장의 로드맵스타트업 서비스 개발은 제한된 자원 속에서 기술 스택 선택부터 인프라 구축, 모놀리식 아키텍처와 MSA 선택, 안정

www.yes24.com

실용주의 프로그래머

https://www.yes24.com/product/goods/107077663

 

실용주의 프로그래머 | 데이비드 토머스 | 인사이트(insight) - 예스24

『실용주의 프로그래머』는 당신이 읽고, 또 읽고, 수년간 또다시 읽게 될 몇 안 되는 기술 서적이다. 당신이 이 분야에 처음 발을 디딘 사람이건, 경험 많은 전문가이건 매번 새로운 통찰을 얻

www.yes24.com

 

엔비디아 젠슨 황, 생각하는 기계

https://www.yes24.com/product/goods/146344342

 

엔비디아 젠슨 황, 생각하는 기계 | 스티븐 위트 | 알에이치코리아(RHK) - 예스24

엔비디아 젠슨 황, 전 세계 최초 공식 자서전“엔비디아의 혁신이 곧 AI의 혁신이다!”1,095일 밀착 취재, 300여 명 핵심 관계자 심층 인터뷰,시가총액 1위 등극한 엔비디아 젠슨 황 33년 경영사 최

www.yes24.com

 

오리지널스

https://www.yes24.com/product/goods/96568233

 

오리지널스 | 애덤 그랜트 | 한국경제신문사(한경비피) - 예스24

통념을 깨고 대세를 거스르는 독창적인 사람들“지금까지 우리가 알고 있던 독창적 혁신가의 신화는 전부 틀렸다!”그들도 우리처럼 실패할까 봐 전전긍긍하고, 옆에서 등 떠밀어 억지로 책임

www.yes24.com

 

이펙티브 엔지니어

https://www.yes24.com/product/goods/110243880

 

이펙티브 엔지니어 | 에드먼드 라우 | 길벗 - 예스24

뛰어난 엔지니어와 일반 엔지니어는 무엇이 다른가? 열심히 일하기와 똑똑하게 일하기는 어떻게 다른가? 구글, 페이스북, 인스타그램, 드롭박스 등 세계 최고 기업의 실제 사례 제시! 개인과 조

www.yes24.com

 

인생의 컨닝페이퍼

https://www.yes24.com/product/goods/146894793

 

인생의 컨닝페이퍼 | 박종경 | 토네이도 - 예스24

“당신이 그토록 열망하는 목표를 먼저 손에 넣은 사람들의 답안지를 훔쳐라!“★ 유튜브 조회수 2,500만 ★2030세대 멘토 ‘인생컨닝, 박종경 변호사’가 찾아낸성공하는 삶을 위한 보석 같은 통

www.yes24.com

 

피터 드러커 - 매니지먼트

https://www.yes24.com/product/goods/2689310

 

피터 드러커 - 매니지먼트 | 피터 F. 드러커 | 청림출판 - 예스24

30년 만에 국내 첫 출간된 피터 드러커 경영학의 원전. 『피터 드러커 매니지먼트Management』는 그의 명저들 중에서도『경영의 실제』와 더불어 피터 드러커 최고의 저작으로 첫 손가락에 꼽히는

www.yes24.com

혼자 공부하는 컴퓨터 구조+운영체제

https://www.yes24.com/product/goods/111378840

 

혼자 공부하는 컴퓨터 구조+운영체제 | 강민철 | 한빛미디어 - 예스24

혼자 해도 충분합니다! 1:1 과외하듯 배우는 IT 지식 입문서이 책은 독학으로 컴퓨터 구조와 운영체제를 배우는 입문자가 ‘꼭 필요한 내용을 제대로 학습’할 수 있도록 구성했다. 뭘 모르는지

www.yes24.com

 

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