Tip/Windows2026. 5. 10. 22:11

클로드 코드를 이용해서 10년전에 만들었다 방치해둔 Scheme 클론을 개선해보았습니다.
개선 버전은 브라우저 안에서 동작하는 간단한 Scheme 인터프리터입니다.
bytecode VM으로 다시 작성했고, 외부 의존성 없이 단일 index.html 한 파일로 동작합니다.

📝사용해 보기
http://www.chobocho.com/javascript/index.html

 

SmallLisp - Bytecode VM

 

www.chobocho.com

 

📍소스코드 위치
https://github.com/chobocho/SmallLisp

 

GitHub - chobocho/SmallLisp: Javascript

Javascript. Contribute to chobocho/SmallLisp development by creating an account on GitHub.

github.com

 

Posted by chobocho
Tip/Windows2026. 5. 4. 01:21

[실행파일]

hview_v0.1b.zip
0.23MB

EasyView의 클론을 Claude code가 만들어 주었다.
만들면서 느꼈지만 EasyView는 대단한 앱이다 ^^ 

 

기능

  • 64MB 까지 텍스트 파일 지원
  • 조합형 한글 지원
  • 완성형 한글 지원
  • 줄번호 기능 지원
  • 검색 기능 지원
  • 책갈피 기능 지원

 

소스코드: https://github.com/chobocho/hviewer

 

GitHub - chobocho/hviewer: 한글 텍스트 뷰어

한글 텍스트 뷰어. Contribute to chobocho/hviewer development by creating an account on GitHub.

github.com

 

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

Simple Clone of Scheme  (0) 2026.05.10
Web 프리셀(FreeCell)과 솔리테어(Solitaire) 게임  (0) 2026.04.12
[ImageMatch] 같은 그림 찾기  (0) 2026.04.12
Posted by chobocho
Tip/Windows2026. 4. 12. 20:21

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

[hViewer] Windows용 초간단 파일 뷰어  (0) 2026.05.04
[ImageMatch] 같은 그림 찾기  (0) 2026.04.12
Chobocho's Commander  (0) 2026.04.12
Posted by chobocho
Tip/Windows2026. 4. 12. 20:18
Tip/Windows2026. 4. 12. 20:14

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

[ImageMatch] 같은 그림 찾기  (0) 2026.04.12
[uCalendar] Gemini와 함께 만든 달력 앱  (1) 2026.01.26
Gemini 로 만든 오델로 게임  (0) 2025.12.31
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/Windows2025. 12. 31. 21:54
Posted by chobocho
Tip/Windows2025. 12. 31. 21:51
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