전체 글
-
javascript callback 처리 하기 - dropdownweb/mhtml 2021. 10. 25. 14:01
문제 scalajs 에서 fomantic-ui dropdown module 을 사용하기 위해서는 javascript callback 을 등록해 줘야 한다. dropdown 동작 방식 처리는 아래와 같이 2가지로 할 수 있다. dropdown 메뉴에서 아이템이 선택되면 바로 UI 갱신 (reactive) 아이템을 선택한 후 별도의 버튼을 누르면 그 때 선택된 아이템을 읽어 UI 갱신 (non-reactive) fomantic-ui example 을 대상으로 mhtml 을 함께 사용해 구현해 보자 코드 reactive 방식 import mhtml._ import org.scalajs.dom import scala.scalajs.js val selectedGender: Var[String] = Var("") ..
-
Rest API 로 특정 색인의 특정 항목만 보기elasticsearch 2021. 10. 24. 23:37
문제 elasticsearch rest api 로 색인을 조회하기 위해 아래와 요청 하면 /_cat/indices 결과는 아래처럼 나온다. green open rising-batch-20211024 ea1Pke2LQ1-hqy822TbOCw 20 1 2264383 0 1.1gb 603.5mb green open rising-stream-20211021 xZLXfZzMQC-4RT2Td1T66A 20 1 5243762 0 2.5gb 1.2gb ... 색인 이름만 가져오고 싶다면 어떻게 호출해야 할까? 설명 /_cat/indices?v 위와 같이 호출하면 아래처럼 결과가 나온다. health status index uuid pri rep docs.count docs.deleted store.size pri.st..
-
Variance 문제scala/basic 2021. 10. 22. 21:30
scala 에서 이해하기 가장 어려운 부분 중 하나가 Variance 일 것이다. Variance 를 이해 했다면 다음 문제를 풀어보자. 문제1 아래와 같이 정의했을 때 trait Sum[+A, +B] { def flatMap[C](f: B => Sum[A, C]): Sum[A, C] = ??? } 다음과 같은 에러 메시지를 보게 될 것이다. error: covariant type A occurs in contravariant position in type B => Sum[A,C] of value f 이를 해결하려면 어디를 수정해야 할까? 아래와 같이 작성하면 된다. (Why?) trait Sum[+A, +B] { def flatMap[T >: A, C](f: B => Sum[T, C]): Sum[T, ..
-
docker container 에서 zombie 프로세스 발생 문제docker 2021. 10. 14. 12:05
문제 jupyterhub 를 docker 로 실행해 서비스를 제공했다. 각각의 사용자들이 notebook 을 닫지 않은채 single-user server 를 재시작할 경우 zombie 프로세스가 발생했다. bare metal 장비에 직접 jupyterhub 를 설치했으면 발생하지 않았을 문제인데, docker 를 사용해서 발생한 문제였다. 왜 그럴까? 설명 jupyterhub 는 user 마다 single-user server process 가 실행된다. 그리고 user 가 notebook 을 실행할 때 마다 single-user server process 의 child process 가 실행된다. 결국 아래와 같은 구조가 된다. jupyterhub L single-user server L notebo..
-
apache poi 를 사용해 scala 에서 Excel 파일 읽기scala/basic 2021. 10. 14. 11:17
def main(args: Array[String]): Unit = { val rows = readSheet[MyModel]("c:/work/input.xlsx", "평가 항목", true) println(rows) } 문제 apache poi 를 사용해 Excel 파일을 읽어보자. apache poi 는 자바 라이브러리지만 스칼라 스타일로 코딩해 보도록 한다. 코드 일반적으로 사용할 수 있도록 아래처럼 Generic 한 util 을 작성한다. import org.apache.poi.openxml4j.opc.OPCPackage import org.apache.poi.ss.usermodel.{Row, Workbook} import org.apache.poi.xssf.usermodel.XSSFWorkbook..
-
프로세스가 실행 중인지 체크 후 실행하기bash 2021. 10. 14. 11:15
문제 프로세스가 이미 실행 중이면 실행하지 않고, 실행중이지 않으면 실행하는 스크립트를 작성한다. (스크립트를 반복 실행 하더라도 프로세스가 중복 실행되지 않도록 한다.) 프로세스가 실행될 때 PID 를 파일로 기록하고, kill -0 PID 로 체크 하도록 한다. 코드 #!/bin/bash ulimit -c unlimited BIN_DIR=`dirname "$0"` BASE_DIR=`cd "$BIN_DIR"; cd ..; pwd` LOG_DIR=$BASE_DIR/logs PID_FILE=$BASE_DIR/application.pid # PID_FILE 이 존재하고, 해당 PID 로 running 중이면 application 을 실행하지 않고 exit 한다. if [ -f $PID_FILE ]; then..
-
gitbook 배포 하기gitbook 2021. 10. 13. 13:58
문제 markdown 으로 문서를 작성후 github pages 에 배포하도록 한다. master branch 가 checkout 된 상태에서 gitbook build 를 하면 생성되는 _book 디렉토리를 gh-pages branch 에 docs 로 이름을 변경 후 덮어쓰도록 한다. 코드 #!/bin/bash # gitbook 이 설치된 장비에서 # master branch 가 checkout 된 상태에서 repo_dir=`dirname "$0"` cd $repo_dir GH_PAGES_TEMP_DIR="gh-pages-temp-branch" rm -rf ./_book $GH_PAGES_TEMP_DIR gitbook build || exit $? git clone -b gh-pages --single-..
-
실행되는 스크립트로 부터 프로젝트 홈의 절대 경로 알아내기bash 2021. 10. 13. 11:17
문제 디렉토리 구조가 아래와 같고, /home/windbird/work/project/bin/run.sh 가 있을 때 $pwd /home/windbird $tree work/ work/ └── project ├── bin │ └── run.sh ├── conf │ └── server.conf └── logs cd /home/windbird/; sh work/project/bin/run.sh 로 실행되거나 cd /home/windbird/work; sh project/bin/run.sh 로 실행되든지 간에 항상 프로젝트 홈인 /home/windbird/work/project 가 출력되도록 run.sh 스크립트를 작성해 보자 코드 #!/bin/bash bin_dir=`dirname "$0"` home_dir..