Lingara Lingara 문서 학습 가이드 API 라이브러리 앱 만들기 웹 앱
언어: 한국어

튜터 메모

이 페이지는 영어에서 번역되었습니다. 두 내용이 다를 경우 영어 페이지가 정확합니다. 영어 페이지 읽기

앱은 응답에 tutor_note를 추가하여, 학습자가 방금 연습한 단어처럼 한 줄의 컨텍스트를 Lingara의 튜터에게 전달할 수 있습니다. 메모는 매니페스트에서 이를 선언하고 동시에 학습자가 앱을 설치할 때 이를 켠 경우에만 튜터에게 전달됩니다. 그 선택을 바꾸려면 학습자는 앱을 제거한 뒤 다시 설치합니다.

Lingara가 메모에 하는 처리

  • 줄바꿈은 공백이 됩니다.
  • 제어 문자와 방향 재정의 문자는 제거됩니다.
  • 280자보다 긴 메모는 280자로 잘리고 …로 끝납니다. 문자는 바이트나 화면상의 글리프가 아니라 Unicode 스칼라 값으로 셉니다.
  • 매니페스트가 선언하지 않았거나 학습자가 허용하지 않은 메모는 버려집니다.

튜터가 메모를 읽는 방식

튜터는 메모를 지시가 아니라 제3자의 인용 텍스트로 읽습니다. Lingara의 안전 검사에서 거부된 메모는 버려지며, 학습자의 차례는 메모 없이 계속됩니다. 학습자는 메모를 절대 보지 않습니다.

좋은 메모

좋은 메모는 튜터가 활용할 수 있는 하나의 단순한 사실입니다. 예를 들면 “학습자가 방금 일본어 계획에서 단어 5개를 복습했습니다.”와 같습니다. 튜터가 무엇을 해야 하는지가 아니라 학습자가 무엇을 하고 있는지를 말합니다. 지시, 학습자에 대한 판단, 학습자가 카드에서 보지 않은 내용은 넣지 마세요.

코드 예제 언어

TypeScript

function withNote(request: AppRenderRequest) {
  const note = planLine(request);
  // Plain text, at most 280 characters; the tutor reads it, the learner does not.
  return note === "" ? todayCard(0) : reply(todayCard(0)).tutorNote(note);
}

Rust

async fn render(seen: Seen, request: AppRenderRequest) -> Result<Reply, BoxError> {
    let (lang, progress) = shared_plan(&request);
    let count = seen.lock().map_err(|_| "poisoned")?.get(&request.subject).copied().unwrap_or(0);
    let card = today_card("Today's five", &lang)?;
    // Plain text the learner's tutor can read: at most 280 characters.
    let note = match progress {
        Some((done, total)) => format!("The learner has reviewed {count} words with this app today; {done} of {total} sets done."),
        None => format!("The learner has reviewed {count} words with this app today."),
    };
    Ok(reply(card).tutor_note(note)?)
}

Go

card, err := lingaraapps.NewCard().Heading("Daily five", 1).Text("雨 · 雪 · 风 · 云 · 雷").Build()
if err != nil {
	return nil, err
}
// Plain text, at most 280 characters, for Lingara's tutor to use.
return lingaraapps.Reply(card).
	TutorNote("The learner is reviewing weather words today."), nil

Java

import com.getlingara.apps.Card;
import com.getlingara.apps.Reply;

Card card = Card.card().heading("Today's five", 1).term("雨", "yǔ", "rain", "zh").build();
// Plain text, at most 280 characters; the tutor reads it beside the card.
return Reply.reply(card).tutorNote("The learner is reviewing weather words today.");

Kotlin

import com.getlingara.apps.kotlin.Reply
import com.getlingara.apps.kotlin.card
import com.getlingara.apps.kotlin.reply

val c =
    card {
        heading("Today's five", 1)
        term("雨", reading = "yǔ", gloss = "rain", lang = "zh")
    }
// Plain text, at most 280 characters; the tutor reads it beside the card.
return reply(c).tutorNote("The learner is reviewing weather words today.")

Ruby

note = plan_line(request)
# Plain text, at most 280 characters; the tutor reads it, the learner does not.
note.empty? ? today_card(0) : Lingara::Apps.reply(today_card(0)).tutor_note(note)

PHP

use Lingara\Apps\Reply;

function withNote(AppRenderRequest $request): CardModel|Reply
{
    $note = planLine($request);
    // Plain text, at most 280 characters; the tutor reads it, the learner does not.
    return $note === '' ? todayCard(0) : Reply::of(todayCard(0))->tutorNote($note);
}