터미널의 플래시 카드
I have trouble remembering names and faces. What if I had a flashcard system to help me memorize them?
하지만 끝내기 전에 지루해졌습니다.
리벤델 업데이트
저는 이번 주에 Elvish v0.17용 Rivendell 업데이트 작업에 열중했습니다. 나는 최근에 대부분의 기능적 부분을 포함하는
fun
모듈의 테스트 및 문서화를 완료했습니다. 문서here를 볼 수 있습니다.흥미 있는 문서를 생성한 방법에 대한 또 다른 블로그 게시물이 있습니다.
테스트에서 문서 생성
Daniel Fitzpatrick ・ 4월 4일 ・ 3분 읽기
#testing
#bash
Rivendell의 발전으로 지금이 플래시 카드 앱을 완성하기에 좋은 시기라고 생각합니다.
설정 지침
Rivendell은 현재 개발 중이므로 Elvish의 기능rsync을 사용하고 있습니다.
rivendell을 복제하고
update-for-0.17
분기로 전환합니다. 그런 다음 이 파일을 ~/.local/share/elvish/lib/dev/epm-domain.cfg
에 넣습니다.{
"method": "rsync",
"location": <path to rivendell parent directory>,
"levels": "1"
}
그런 다음 이것을
~/.config/elvish/rc.elv
에 추가하십시오.use epm
epm:install &silent-if-installed=$true dev/rivendell
epm:upgrade dev/rivendell
use dev/rivendell/fun
마지막으로 Terminal Graphics Protocol 을 이해하는 터미널이 필요합니다. Kitty을 사용하겠습니다.
필요한 기능
Rivendell에서 필요한 함수는 shuffle 및 destruct 입니다. 다음으로 이미지를 표시하는 방법이 필요합니다. 내 환경을 복제하려는 경우 이미지 표시를 위해 내
rc.elv
에 이 기능을 정의했습니다.fn icat {|@a| kitty +kitten icat $@a }
다음으로 추측 점수를 매기는 방법이 필요합니다. 이를 위해 간단한 Levenshtein 함수를 정의해 보겠습니다. 낮은 점수가 더 좋습니다.
use dev/rivendell/base b
use dev/rivendell/fun f
use math
fn levenshtein {|w1 w2|
var cell-value = {|same-char prev-row cur-row col-idx|
math:min (b:inc $prev-row[$col-idx]) ^
(b:inc (b:end $cur-row)) ^
(+ (if $same-char { put 0 } else { put 1 }) ^
$prev-row[(b:dec $col-idx)])
}
var row-idx = 1
var max-rows = (b:inc (count $w2))
var @prev-row = (range (b:inc (count $w1)))
while (!= $row-idx $max-rows) {
var ch2 = $w2[(b:dec $row-idx)]
set row-idx = (b:inc $row-idx)
set prev-row = (f:reduce {|cur-row i|
var same-char = (eq $w1[(b:dec $i)] $ch2)
b:append $cur-row ($cell-value $same-char $prev-row $cur-row $i)
} [$row-idx] (range 1 (count $prev-row)))
}
b:end $prev-row
}
이 코드는 Elvish의 모듈aliasing feature을 활용하고 몇 가지 더 간단한 Rivendell 함수reduce를 보여줍니다.
이 코드를
levenshtein.elv
라는 파일에 넣고 use ./levenshtein l
로 가져왔습니다.다음으로 이들을 하나로 묶는 기능이 필요합니다. 화려하지 않습니다. 방금 터미널에서 이것을 정의했습니다.
fn guess {|name image|
icat $image; echo
var guess = (read-line)
var score = (l:levenshtein $name $guess)
put $name $score
}
이제 모든 구성 요소가 있습니다. 이제 디렉터리 정보를 가져와서 추측 점수를 매기도록 하겠습니다.
플래시 카드 "앱" 실행
이것이 앱과 범주적으로 다른가요? 아마.
첫 번째 게시물에서 congr 프로젝트를 빌드한 후 다음을 실행합니다.
var @directory = (java -jar target/uberjar/congr-0.1.0-SNAPSHOT-standalone.jar site username password)
마지막 명령은 몇 초가 걸릴 수 있습니다.
다음으로 섞습니다.
var @shuffled = (each {|x| echo $x | from-json} $directory | fun:shuffle)
마지막으로 추측을 시작하십시오.
each (fun:destruct $guess~) $shuffled
개인 정보 보호를 위해 디렉토리의 실제 이름과 사진은 표시하지 않지만
knowyourmeme.com
에서 모의 정보가 포함된 스크린샷을 볼 수 있습니다.결론
나는 항상 이 프로젝트를 위한 어리석고 단순한 터미널 "앱"을 구상했기 때문에 성공한 것 같습니다. 또한 Clojure와 Elvish가 협력하여 진정으로 해커다운 경험을 하게 해준 점에 감사드립니다.
행복한 해킹!
Reference
이 문제에 관하여(터미널의 플래시 카드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/crinklywrappr/flashcards-in-the-terminal-2akj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)