개요

 

- 도큐사우르스( docusaurus ) 에 파이어베이스 ( firebase ) 로그인 연동

- 기준 작업일 : 24/11/04

- Nodejs : 22.11.0 LTS

- Docusaurus : 3.6

 

설치

- Nodejs 설치 : https://nodejs.org/en/download/package-manager

- Docusaurus 설치 : https://docusaurus.io/docs

 

Introduction | Docusaurus

Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.

docusaurus.io

 

아래 커맨드를 실행하여 my-website 라는 폴더에 docusaurus 를 설치한다

( 필자는 js 로 설치 했는데 ts 로 설치 해도 무방함 / 그러나 js 로 하여 그냥 똑같이 하는 걸 추천 )

npx create-docusaurus@latest my-website classic
 

맥의 경우 npx 로 설치 시 오류가 발생하는 경우 아래와 같은 커맨드를 해본다. ( .npm 경로 소유자를 sudo 가 로그인 계정으로 변경)

sudo chown -R $(whoami) ~/.npm

 

대상 폴더 아래에 들어가서 실행 해보면 잘 동작하는 것을 확인할 수 있다.

 

cd my-website
npm run start

# 이후 http://localhost:3000/ 으로 접속하여 정상적으로 데모 사이트가 잘 뜨는지 확인한다.

 

이후 아래와 같은 폴더를 구성 해주도록 한다.

 

 

추가 의존성 설치 

npm i firebase firebaseui docusaurus-plugin-dotenv

 

이제 관련 파일은 아래 링크를 참조하여 수정한다

https://iammassoud.net/blog/docusaurus-authentication-using-google-firebase

 

그런데 StyledFirebaseAuth 의 경우 아래와 같이 파일 작성 하도록 한다.

( react-firebaseui 가 업데이트 되지 않아 해당 부분을 아래 파일을 작성하여 해결 )

 

import { useEffect, useRef, useState } from "react"
import { onAuthStateChanged } from "firebase/auth"
import * as firebaseui from "firebaseui"
import "firebaseui/dist/firebaseui.css"

const StyledFirebaseAuth = ({
  uiConfig,
  firebaseAuth,
  className,
  uiCallback
}) => {
  const [userSignedIn, setUserSignedIn] = useState(false)
  const elementRef = useRef(null)

  useEffect(() => {
    // Get or Create a firebaseUI instance.
    const firebaseUiWidget =
      firebaseui.auth.AuthUI.getInstance() ||
      new firebaseui.auth.AuthUI(firebaseAuth)
    if (uiConfig.signInFlow === "popup") firebaseUiWidget.reset()

    // We track the auth state to reset firebaseUi if the user signs out.
    const unregisterAuthObserver = onAuthStateChanged(firebaseAuth, user => {
      if (!user && userSignedIn) firebaseUiWidget.reset()
      setUserSignedIn(!!user)
    })

    // Trigger the callback if any was set.
    if (uiCallback) uiCallback(firebaseUiWidget)

    // Render the firebaseUi Widget.
    // @ts-ignore
    firebaseUiWidget.start(elementRef.current, uiConfig)

    return () => {
      unregisterAuthObserver()
      firebaseUiWidget.reset()
    }
  }, [firebaseui, uiConfig])

  return <div className={className} ref={elementRef} />
}

export default StyledFirebaseAuth

 

그리고 Firebase를 설정하고 나면 ...

 

 

 

위처럼 로그인 설정을 할 수 있게 된다 :) 

( src/utils/constants.js 파일 내에서 PROTECTED_PATHS 를 조정하여 접속 제한 폴더를 지정할 수 있음 ) 

 

많은 부분을 생략 하였는데 ... 나중에 시간 될 때 Github Template 을 추가하여 빠르게 setup 하는 부분을 공유 해보도록 하겠습니다.

 

---

 

참조링크

 

- https://jiyeongstar.tistory.com/197

- https://github.com/massoudmaboudi/docusaurus-auth-firebase/tree/main

- https://transform.tools/typescript-to-javascript

- https://docusaurus.io/docs

 


1. NVIDIA 사용자용 ComfyUI Windows 버전다운로드 링크

https://github.com/comfyanonymous/ComfyUI/releases/latest/download/ComfyUI_windows_portable_nvidia.7z
- 파일 : ComfyUI_windows_portable_nvidia.7z
- 파일 다운로드 후 압축 해제

2. Flux-1 관련파일 다운로드

1) model x1

https://huggingface.co/black-forest-labs/FLUX.1-dev/tree/main
- 파일 : flux1-dev.sft: 23.8 GB
- 파일 위치 : ComfyUI/models/unet/

2) clip x2

https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp16.safetensors
- 파일 : t5xxl_fp16.safetensors: 9.79 GB
- 파일 위치 : ComfyUI/models/clip/

https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/clip_l.safetensors
- 파일 : clip_l.safetensors: 246 MB
- 파일 위치 : ComfyUI/models/clip/

3) vae x1

https://huggingface.co/black-forest-labs/FLUX.1-schnell/blob/main/ae.sft
- 파일 : ae.sft: 335 MB
- 파일 위치 : ComfyUI/models/vae/

2. 실행

- 압축 해제 된 폴더 에서
- run_nvidia_gpu.bat 파일 실행

---

참조링크

- [flux settings](https://civitai.com/models/617609?modelVersionId=690425)
- [flux simple comfyui workflow](https://openart.ai/workflows/maitruclam/comfyui-workflow-for-flux-simple/iuRdGnfzmTbOOzONIiVV)

## 개요

 

맥에서 타자를 입력하다보면 자꾸 점이 찍히는 문제

 

## 원인

 

iOS 에서 있던 기능이 이식 된거 같음.

( 폰에서 점(dot) 을 손쉽게 입력 하는 것을 돕기 위함 ?? )

 

## 해결방법

 

[ 그림1 ] 텍스트 입력에서 편집 버튼을 눌러준다

( 설정에서 키보드로 검색 )

환경설정 - 키보드 - 텍스트 입력 - 입력소스 - 편집

 

[그림2] 스페이스를 두 번 눌러 마침표 추가 ( 기능설정 해제 )

 

스페이스를 두 번 눌러 마침표 추가 ( 기능설정 해제 )

## 기타 정보

 

- [유용한정보] DAILY 뉴스 요약

- [무료] 300$ 상당 서버운영 비용 제공 - 레퍼럴링크 포함 ( vultr.com )

자바에서 백그라운드 잡을 비동기로 처리하고 싶을때 사용

 

- Apache commons exec / ProcessBuilder 보다 많은 기능을 제공

- 자세한 내용은 아래 깃헙 참조 

- zt-exec 는 2020 년 apache commons exec 는 2014년 

- zt-exec 는 최신까지 패치는 안되어 최신 보안 이슈는 존재 (내부 의존성 때문, 2022.08 기준 )

 

java

- https://github.com/zeroturnaround/zt-exec

 

GitHub - zeroturnaround/zt-exec: ZeroTurnaround Process Executor

ZeroTurnaround Process Executor. Contribute to zeroturnaround/zt-exec development by creating an account on GitHub.

github.com

  public static int exec2(String... args) throws Exception {
    log.info("started at : {}", getCurrentTimestamp());

    String[] params = { "7", "5", "1" };
    for (String p : params) {
      String[] command = { "python3", "/Users/wonsama/Desktop/spring-dev/elk-log-test/test.py", p };
      Future<ProcessResult> future = new ProcessExecutor().command(command).readOutput(true).start().getFuture();
      // 아래 두 라인 주석 해제를 하면 동기 처리 됨
      // String output = future.get(60, TimeUnit.SECONDS).outputUTF8();
      // log.info("output : {}", output);
    }
    log.info("end at : {}", getCurrentTimestamp());
    return 0;
  }

python

import time
from datetime import datetime
import sys

loop = int(sys.argv[1])

for idx in range(1, loop+1):
    time.sleep(1)

f = open("result.txt", "a")
f.write("argv1 : {}, occured : {}\n".format(
    sys.argv[1], datetime.now(tz=None)))
f.close()

 

설치 완료 후 iTerm2 테마 화면

 

1. zsh 활용법 

https://sourabhbajaj.com/mac-setup/iTerm/zsh.html

 

Zsh · macOS Setup Guide

zsh The Z shell (also known as zsh) is a Unix shell that is built on top of bash (the default shell for macOS) with additional features. It's recommended to use zsh over bash. It's also highly recommended to install a framework with zsh as it makes dealing

sourabhbajaj.com

2. agnoster 테마 설치

 

> git 사용자에게 매우 좋음 

 

https://github.com/agnoster/agnoster-zsh-theme

 

agnoster/agnoster-zsh-theme

A ZSH theme designed to disclose information contextually, with a powerline aesthetic - agnoster/agnoster-zsh-theme

github.com

 

3. 파워라인 폰트 설치

https://github.com/powerline/fonts

 

powerline/fonts

Patched fonts for Powerline users. Contribute to powerline/fonts development by creating an account on GitHub.

github.com

4. 추가 색상판 설치 ( solarized ) 

 

https://github.com/brantb/solarized/tree/master/iterm2-colors-solarized

 

brantb/solarized

precision color scheme for multiple applications (terminal, vim, etc.) with both dark/light modes - brantb/solarized

github.com

 

 

flutter 설치하기

 

https://flutter.dev/docs/get-started/install/macos

 

macOS install

How to install on macOS.

flutter.dev

 

 

qrcode.min.js



 

[ 사전 준비 ]


- 후라이팬

- 허브솔트 ( 갠적으로 - 청정원 마늘양파 맛 )

- 집게 ( 고기 뒤집기 & 먹기용 )

- 가위 



[ 구매 ]


- 쌈케일 990 ( 10장 들어 있음 / 1인분 5장 )

- 양송이 1,800 ( 4개 입 / 1인분 2개 )

- 살치살 9,300 ( 캐나다산 300g / 1인분 150g )

- 양파 860 ( 1개 / 1인분 반쪽 )


약 집밥 한끼 약 7,000 원 정도면 준수하게 고기 구워먹기 가능


[ 굽는 방법 ]


( 후라이팬 쎈불 ) - - - - - - - - 

- 양송이 내부 기둥 따네고 후라이팬에 배치

- 양송이는 굽는 시간이 젤 많이 걸림

- 쌈케일 한번 씻어두기 


( 후라이팬 중불 ) - - - - - - - - 

( 양파 준비 )

- 절반 잘라 놓고 우선 두껍께 가로 썰기 함.

- 후에 고기를 양파 위에 올려놓기 위함.

- 양파도 나름 금방 익음


( 양송이 내부에 물기가 보이기 시작한다면 ... )

- 양파 올리기

- 고기 반 도막 올리기 

- 고기는 빨리 익으므로 주의 !!

- 고기 5초정도 익히고 모두 뒤집기

- 처음 올린거 부터 먹기 좋은 형태로 가위로 자르기

- 다 잘랐으면 한번 더 뒤집어 주기

- 양파도 상황봐서 중간 중간 뒤집기 시전


( 후라이팬 약불 ) - - - - - - - - 


- 이제 양파 위에 고기 익은것을 올려 놓기

- 씻어 놓은 쌈케일과 고기를 냠냠 맛있게 물론 양파와 함께라면 굳

- 양송이 대는 상대적으로 빨리 구워짐 / 적절하게 익으면 먹기 !!

- 양송이에 물이 많이 올라오면 건져 놓고 먹기 (뜨거울 수 있으므로 주의)

- 다 먹고 불 끄기 !!



( 청소 )


- 육즙이 내려가면서 후라이팬을 태워버림

- 키친타올 2장 정도를 집게에 찝어서 휘휘 닦아줌

- 다 닦은 후 설걷이로 마무리하면 끝 !!



[ 키포인트 ]


- 고기는 끝까지 불 위에 놓기 ( 육즙이 흘러 고기가 맛 없어짐 )



장모님께서 부탁하셔서 만든 금연, 광고부착 금지 포스터


A4로 출력하여 코팅한 다음 붙여서 쓸 예정


그럭저럭 잘 만든거 같아서 나름 뿌듯 ;; 포토샵에서 대충 해서 만든것이긴 하지만 ㅜㅜ


nosmoking.psd

마음껏 받아서 사용하세요 ~~~



라즈베리에서 사용할 UI를 찾는 도중...

(MAC에서 개발해보고 raspberrypi에 배포가능한 형태로 ...)


1) Electron + html

언어 : nodejs, javascript, css, html, electron-framework

장점 : html로 구현가능, javascript만 잘알아도 굳

단점 : html로 하기 때문에 제약이 좀 있음. nodejs도 알아야 편함.


2) JavaFX

언어 : java, css

장점 : 무겁다 

단점 : 참조 소스가 많음, SceneBuilder를 UI구성 손쉽다. 코딩량이 많음.


3) Kivy 

언어 : pythonm kivy-framework

장점 : 가볍다, 코딩량이 적음

단점 : 환경구성이 쉽진 않았음. (뭐 공홈에 나온데로 해도 안되는 부분이 좀 발생함)



위 3개 중에서 고민 했었는데 ... 

각각 일장 일단이 있으므로, 일단 다 helloworld 수준까지는 해보기로 함.

( python, java, javascript, nodejs ... 다양한 언어를 알아야 됨... 물론 약간만 알고 PASS, 현시점에서는)

( 물론 pyqt 같은 것도 있었는데 설치 용량도 크고 배워야 될 것이 너무 많아 일단 배제함. )


1) Electron + html


매직미러를 만들어 봤음 



웹으로 UI를 손쉽게 구현할 수 있었으나 ... 라즈베리에 올라가니 실제 속도가 늦어지는 단점이 있었고 뭔가 아쉬움이 있었음


2) JavaFX


간단한 websocket 기반의 채팅 프로그램을 올려서 테스트 해봤는데 ... 

부팅 시간이랑 Animation 부분이 영 맘에 안들었음 ㅜㅜ 1) 보다 속도가 더 안나오는 듯한 느낌이 들었음

하지만 정형화 된 틀에서 뭔가를 만든다고 한다면 생산성이 잘 나올거 같음(SceneBuilder 때문, Java에 익숙하기 ㅋ)


3) Kivy 




소스코드 분량도 확실히 적고 코딩(.py) 디자인(.kv)가 분리 되어 유지보수가 수월함.(python이 익숙하지 않은것이 문제 ;;)



==> 총평

Java에 익숙하다면 JavaFx

Python에 익숙하면 Kivy

Web에 익숙하다면 Electron + HTML


[코딩시간]

개인적으로는 java와 javascript를 많이 써서 1(electron), 2(javafx)가 시간이 적게 든거 같음.

하지만 python에 익숙한 사람이라면 kivy를 배워 UI를 구성하는 것도 좋은거 같음.


[UI구성]

UI구성에 있어서는 정형화된 대쉬보드를 만드는 것이라면 2(javafx)를 선택하여 scenebuilder를 활용한다면 손쉽고 빠르게 뭔가를 만들 수 있을거 같음.


[범용성]

3(kivy) 같은 경우 거의모든 플렛폼에서 (linux, vm, windows, mac, rapberrypi, ios, android) 동작하기 때문에 잘 만들어만 두면 좋을거 같다. 거기다 파이썬을 어느정도 해본 사람이라면 추천 !!



참조1) JavaFX에서 WebView올리고 HTML로만 구성하는것 보단 Electron으로 구현하는 편이좋음

참조2) 동일 CASE로 테스트 하면 더 좋겠지만 재미도 없고, 시간도 없어서 샘플에 맞춰 대충 해보니 ;;


+ Recent posts