uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 418
Obunachilar
+124 soatlar
-27 kunlar
-530 kunlar
Postlar arxiv
ToCode
1 418
ืฉืžื•ืช ื‘ืขืœื™ ืžืฉืžืขื•ืช? ืจื•ื‘ื™ 3.4 ื”ื•ืกื™ืคื” ืชืžื™ื›ื” ื‘ืžื™ืœื” ืฉืžื•ืจื” ื—ื“ืฉื” - it. ืขื›ืฉื™ื• ืืคืฉืจ ืœื›ืชื•ื‘:
users
  .reject(&:admin?)
  .flat_map { find_teams(it) }
  .uniq
ืžืขื ื™ื™ืŸ ืœืฉื™ื ืœื‘ ืฉืจืง ืœืคื ื™ 5 ืฉื ื™ื ื™ืฆืื” ื’ื™ืจืกื” 2.7 ืฉืœ ืจื•ื‘ื™ ืฉื”ื•ืกื™ืคื” ืืช ื”ืชืžื™ื›ื” ื‘ _1, ื•ื”ื™ืชื” ื”ืจื‘ื” ื”ืชืœื”ื‘ื•ืช ืกื‘ื™ื‘ ื–ื” ื›ื™ ืขื“ ืื– ื”ื™ื™ื ื• ื›ื•ืชื‘ื™ื:
users
  .reject(&:admin?)
  .flat_map { |user| find_teams(users) }
  .uniq
ื•ื”ื—ืœ ืž 2019 ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื›ืชื•ื‘:
users
  .reject(&:admin?)
  .flat_map { find_teams(_1) }
  .uniq
ื•ืคื” ื”ืžืงื•ื ืœื—ื–ื•ืจ ืœืคื™ืกืงื” ื”ืจืืฉื•ื ื” ื•ืœืฉืื•ืœ - ืžื” ื‘ืขืฆื ืงืจื” ืคื”? ืœืžื” ืฆืจื™ืš ื’ื _1 (ื•ืืช ื”ื—ื‘ืจื™ื ืฉืœื• _2 ืœืคืจืžื˜ืจ ื”ืฉื ื™, _3 ืœืฉืœื™ืฉื™ ื•ืขื“ _9) ื•ื’ื ืืช it ืฉืžืชื ื”ื’ ื‘ื“ื™ื•ืง ื›ืžื• _1 ืฉื›ื‘ืจ ืงื™ื™ื? ืื‘ืœ ืื•ืœื™ ื™ื•ืชืจ ื ื›ื•ืŸ ืœื”ืกืชื›ืœ ืขืœ ื”ืชื•ืกืคืช ื”ื–ืืช ื›ืžื• ืขื•ื“ ื—ืœืง ื‘ืคืื–ืœ ื”ืชืจื‘ื•ืชื™ ืฉืœ ืจื•ื‘ื™. ื›ืŸ ื—ืœืง ืžื”ืžื˜ืจื” ืฉื ื”ื™ื ืœื™ืฆื•ืจ ืฉืคื” ืขื ื”ืจื‘ื” ืžื™ืœื™ื, ื•ืฉืชื”ื™ื” ืžื™ืœื” ืฉืžืชืื™ืžื” ืœื›ืœ ื“ื‘ืจ. ื›ืฉืจื•ืื™ื _1 ื‘ืชื•ืš ื‘ืœื•ืง ืืคืฉืจ ืœืชื”ื•ืช ื”ืื ื™ืฉ ื’ื _2 ื•ืœืžื” ื”ื•ื ืœื ื›ืชื•ื‘ ืฉื. ื›ืฉืจื•ืื™ื it ื‘ืจื•ืจ ืฉื™ืฉ ืจืง ืคืจืžื˜ืจ ืื—ื“, ื•ืขื‘ื•ืจ ืื•ืชื ืžืงืจื™ื ื”ืžื™ืœื” ื”ื—ื“ืฉื” ืฉื™ืคืจื” ืงืฆืช ืืช ื”ืงืจื™ืื•ืช ืฉืœ ื”ืงื•ื“. ื•ืžื” ืขื "ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืจืง ื“ืจืš ืื—ืช ื‘ืจื•ืจื” ืœืขืฉื•ืช ื“ื‘ืจื™ื?" ื ื•, ื–ื” ื‘ื›ืœืœ ืžืฉืคื” ืื—ืจืช.

ToCode
1 418
white-space: pre-wrap;
}
</style>

ToCode
1 418
ืงื‘ืœืช ืžื™ื“ืข ื‘ Streaming ื”ื™ื ื“ื•ื•ืงื ื“ื™ ืคืฉื•ื˜ื” ืžืžืฉืงื™ Chat ืžืื•ื“ ืื•ื”ื‘ื™ื ืœื”ืฉืชืžืฉ ื‘ Streaming ื›ื™ ืœ AI ืœื•ืงื— ื”ืžื•ืŸ ื–ืžืŸ ืœื™ื™ืฆืจ ืืช ื”ืชืฉื•ื‘ื”. ื‘ืฆื“ ื”ืœืงื•ื— ืžืฉื™ื›ืช ืžื™ื“ืข ืžืฉืจืช HTTP ื‘ Streaming ื”ืชื‘ืจืจื” ื›ืžืฉื™ืžื” ื“ื™ ืคืฉื•ื˜ื” ืื ื™ ืžื“ื‘ื™ืง ืคื” ืืช ื”ืงื•ื“ ื•ืื—ืจื™ื• ื”ื”ืกื‘ืจ:
export default async function* sendQuestion(questionText: string) {
  const res = await fetch('http://localhost:11434/api/generate', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      model: 'llama3.2',
      prompt: questionText,
      stream: true,
    }),
  })
  
  if (!res.ok) throw new Error('Failed to connect to Ollama server')
    
  const reader = res.body?.getReader()
  if (!reader) throw new Error('Failed to initialize stream reader')
    
  while (true) {
    const { done, value } = await reader.read()
    if (done) break
    
    // Decode the stream data
    const chunk = new TextDecoder().decode(value)            
    const json = JSON.parse(chunk)
    yield json
  }
}
ื”ืงื•ื“ ืคื•ื ื” ืœืฉืจืช ืฉืœ Ollama ืฉืจืฅ ืืฆืœื™ ืžืงื•ืžื™ืช ืขืœ ื”ืžื—ืฉื‘ ื•ืฉื•ืœื— ืœื• ืฉืืœื”. ื”ืคืจืžื˜ืจ stream ืžืงื‘ืœ ืขืจืš ืืžืช ืื‘ืœ ื–ื” ืœื ื”ื›ืจื—ื™ ื›ื™ ื–ื• ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ืคืจืžื˜ืจ ื–ื”. ืื ื”ืชืฉื•ื‘ื” ื”ื™ืชื” ืžื’ื™ืขื” ื‘ืชื•ืจ ืื•ื‘ื™ืงื˜ ืื—ื“ ื”ื™ื™ืชื™ ืžืคืขื™ืœ ืืช res.json() ืื• res.text() ื›ื“ื™ ืœืงื‘ืœ ืื•ืชื”, ืื‘ืœ ื‘ื’ืœืœ ืฉื”ืชืฉื•ื‘ื” ืžื’ื™ืขื” ื‘ืชื•ืจ ื–ืจื ืฉืœ ืื•ื‘ื™ืงื˜ื™ื ืื ื™ ืงื•ืจื ืœ getReader ืขืœ ื” body, ื›ื“ื™ ืœืงื‘ืœ ืžืžืฉืง ืงืจื™ืื”. ื” body ื”ื•ื ื‘ืขืฆื ReadableStream ื•ืืคืฉืจ ืœืงืจื•ื ืขืœื™ื• ื‘ื”ืจื—ื‘ื” ื‘ื“ืฃ ื”ืชื™ืขื•ื“: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/getReader ืื—ืจื™ ืฉืœืงื—ืชื™ ืืช ื” Reader ืžืชื—ื™ืœ ื”ื—ืœืง ื”ืžืขื™ื™ืฃ - ืขืœื™ื ื• ืœืงืจื•ื ืžื” Reader ืืช ื”ืžื™ื“ืข ื—ืœืง ืื—ืจื™ ื—ืœืง ื•ืœืคืขื ื— ื›ืœ ืคืขื ืืช ื”ื—ืœืง ื”ื‘ื ื‘ืชื•ืจ ืื•ื‘ื™ืงื˜ JSON. ื‘ืงื•ื“ ื”ื–ื” ืื ื™ ืžื ื™ื— ืฉื›ืœ Chunk ื™ื›ื™ืœ ืื•ื‘ื™ืงื˜ JSON ืฉืœื, ืœืžืจื•ืช ืฉื‘ืขื•ืœื ื”ืืžื™ืชื™ ื™ื™ืชื›ืŸ ื•ื™ื™ื“ืจืฉ ื˜ื™ืคื•ืœ ื™ื•ืชืจ ืคืจื˜ื ื™ ื›ืฉืคื™ืขื ื•ื— ืฉืœ Chunk ื ื›ืฉืœ ื›ื™ ืื•ืœื™ ื–ื” ื—ืœืง ืฉืžื—ื–ื™ืง ืจืง ื—ืœืง ืžืื•ื‘ื™ืงื˜ ื” JSON ื•ื”ื”ืžืฉืš ืฉืœื• ื”ื•ื ื‘ Chunk ื”ื‘ื. ืฉื™ืžื• ืœื‘ ืœืฉื™ืžื•ืฉ ื‘ TextDecoder ืฉืžื•ื ืข ื‘ืขื™ื” ื“ื•ืžื” ืขื‘ื•ืจ ืคื™ืขื ื•ื— ื”ื˜ืงืกื˜, ื›ืœื•ืžืจ ื” decode ืฉืœ TextDecoderื™ื•ื“ืข ืœื—ืชื•ืš ืืช ื”ื‘ื™ื˜ื™ื ื”ืขื•ื“ืคื™ื ืื ื™ืฉ ื•ืœื”ื“ื‘ื™ืง ืื•ืชื ืœื”ืชื—ืœื” ืฉืœ ื” Chunk ื”ื‘ื ื›ื“ื™ ืฉื™ื•ื›ืœ ืœื”ืคื•ืš ื‘ื™ื˜ื™ื ืœื˜ืงืกื˜. ื”ืคื•ื ืงืฆื™ื” ื›ื•ืœื” ื”ื™ื Generator ื•ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ื” ืœืžืฉืœ ืžืชื•ืš ืงื•ืžืคื•ื ื ื˜ืช vue ื‘ืื•ืคืŸ ื”ื‘ื:
<script setup lang="ts">
import { ref } from 'vue'
import streamChatResponse from '../streamChatResponse';
const question = ref('')
const response = ref('')
const isLoading = ref(false)
const error = ref<string | null>(null)

async function sendQuestion() {
  for await (const chunk of streamChatResponse(question.value)) {
    response.value += chunk.response;
  }
  question.value = '';
}

</script>

<template>
  <div class="chat-container">
    <form @submit.prevent="sendQuestion" class="question-form">
      <textarea
        v-model="question"
        placeholder="Ask a question..."
        :disabled="isLoading"
        class="question-input"
      />
      <button 
        type="submit" 
        :disabled="isLoading || !question.trim()"
        class="submit-button"
      >
        {{ isLoading ? 'Thinking...' : 'Send' }}
      </button>
    </form>

    <div v-if="error" class="error-message">
      {{ error }}
    </div>

    <div v-if="response" class="response-container">
      <div class="response-text">{{ response }}</div>
    </div>
  </div>
</template>

<style scoped>
.chat-container {
  max-width: 800px;
  margin: 0 auto;
  padding: 1rem;
}

.question-form {
  display: flex;
  gap: 1rem;
  margin-bottom: 1rem;
}

.question-input {
  flex: 1;
  min-height: 80px;
  padding: 0.5rem;
  border: 1px solid #ccc;
  border-radius: 4px;
  resize: vertical;
}

.submit-button {
  padding: 0.5rem 1rem;
  background-color: #4CAF50;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

.submit-button:disabled {
  background-color: #cccccc;
  cursor: not-allowed;
}

.error-message {
  color: #dc3545;
  margin-bottom: 1rem;
}

.response-container {
  padding: 1rem;
  background-color: #f8f9fa;
  border-radius: 4px;
}

.response-text {

ToCode
1 418
ื”ื›ืœื™ ื”ื›ื™ ื˜ื•ื‘ ื‘ืฉื‘ื™ืœ ืœื›ืชื•ื‘ ื™ื™ืฉื•ื ืจื™ืืงื˜ ื’ื“ื•ืœ ื‘ืœื™ ื‘ืื’ื™ื ื•ืœื”ืฆืœื™ื— ืœื”ืชืžื•ื“ื“ ืขื ื“ืจื™ืฉื•ืช ื—ื“ืฉื•ืช ืฉืžื’ื™ืขื•ืช ืœืื•ืจืš ื–ืžืŸ ื‘ื˜ื•ื— ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืžื” ื–ื” State Management, ืฆืจื™ืš ืœื”ื—ืœื™ื˜ ืื ืจื•ืฆื™ื ืœื”ืฉืชืžืฉ ื‘ Context ื›ื“ื™ ืœืฉืžื•ืจ ืกื˜ื™ื™ื˜, ืื ืžืกืชืคืงื™ื ื‘ืกืคืจื™ื™ืช ื ื™ื”ื•ืœ ืกื˜ื™ื™ื˜ ืงื˜ื ื” ื›ืžื• Valtio ืื• ืฉื”ื•ืœื›ื™ื ืขืœ ื›ืœ ื”ืงื•ืคื” ื•ืžืฉืœื‘ื™ื ืจื™ื“ืืงืก. ืื‘ืœ ื‘ืชื—ื™ืœืช ื”ื“ืจืš ืื• ื›ืฉื”ื™ื™ืฉื•ื ืงื˜ืŸ ื”ื›ืœื™ื ื”ืืœื” ื™ื›ื•ืœื™ื ืžืื•ื“ ืœื‘ืœื‘ืœ. ื•ื›ืืŸ ื”ืฉืืœื” - ืขื“ ื›ืžื” ืฆืจื™ืš ืœื”ืชืืžืฅ ืœื”ื‘ื™ืŸ ืื™ืš ืจื™ื“ืืงืก ืขื•ื‘ื“ ื›ืฉืื ื—ื ื• ืจืง ืœื•ืžื“ื™ื ืจื™ืืงื˜? ืขื“ ื›ืžื” ื—ืฉื•ื‘ ืœื”ื‘ื™ืŸ ืื™ืš GraphQL ืขื•ื‘ื“ ื›ืฉืื ื—ื ื• ืจืง ืžืชื—ื™ืœื™ื ืœืœืžื•ื“ ืขืœ ืคื™ืชื•ื— ืงื•ื“ ืฆื“ ืฉืจืช? ืขื“ ื›ืžื” ื—ืฉื•ื‘ "ืœื”ืชืจื’ืœ" ืœืฉื™ื˜ืช ืขื‘ื•ื“ื” ืžืกื•ื™ืžืช ืจืง ื‘ื’ืœืœ ืฉื”ื™ื Best Practice ื•ืชืขื–ื•ืจ ืœื ื• ื‘ืขืชื™ื“? ื›ืœื™ื ืžืชืงื“ืžื™ื ื”ื ืžืœื›ื•ื“ืช ื’ื ืฉืœ ืžื•ืจื™ื ื•ื’ื ืฉืœ ืชืœืžื™ื“ื™ื. ืชืœืžื™ื“ื™ื ืจื•ืฆื™ื ืœืœืžื•ื“ ืขืœื™ื”ื ื›ื™ ื–ื” ืžื” ืฉื ืžืฆื ื‘ืฉื™ืžื•ืฉ ื‘ืชืขืฉื™ื™ื” ื•ืื ื—ื ื• ืจื•ืฆื™ื ืœื“ืขืช ืœืขื‘ื•ื“ ื›ืžื• ืฉื›ื•ืœื ืขื•ื‘ื“ื™ื. ืžื•ืจื™ื ืจื•ืฆื™ื ืœืœืžื“ ืื•ืชื ื›ื™ ื›ืฉืื ื—ื ื• ืžืœืžื“ื™ื ื›ืœื™ื ืžืกื•ื‘ื›ื™ื ื”ืงื•ืจืก ื ืจืื” ื™ื•ืชืจ ืงืฉื” ื•ืชืœืžื™ื“ื™ื ืžืจื’ื™ืฉื™ื ืฉื”ื ื”ืฆืœื™ื—ื• ื™ื•ืชืจ, ืื• ืฉืœื ื”ื™ื• ืžืฆืœื™ื—ื™ื ืœืœืžื•ื“ ืืช ื”ื›ืœื™ ื‘ืœื™ ื”ืงื•ืจืก. ืื‘ืœ ื”ืืžืช ื”ื™ื ืฉืจื•ื‘ื ื• ื ืจื•ื•ื™ื— ืื ื ื•ื•ืชืจ ืขืœ ื”ื›ืœื™ื ื”ืžืชืงื“ืžื™ื ื‘ืฉืœื‘ื™ ื”ืœื™ืžื•ื“ ื”ืจืืฉื•ื ื™ื ื•ื ืชืžืงื“ ื‘ื™ืกื•ื“ื•ืช. ืื•ืชื ื“ื‘ืจื™ื ืฉื›ืฉืœื•ืžื“ื™ื ืื•ืชื ื”ื ืœื ื ืจืื™ื ืžืกื•ื‘ื›ื™ื ืื‘ืœ ืื—ืจื™ ืžืกืคื™ืง ืชืจื’ื•ืœ ื•ืขื‘ื•ื“ื” ืื™ืชื ืžืชื—ื™ืœื™ื ืœื”ื’ื™ืข ืœื‘ืขื™ื•ืช ืฉืขื‘ื•ืจืŸ ืคื•ืชื—ื• ื”ื›ืœื™ื ื”ืžืชืงื“ืžื™ื. ื”ื›ืœื™ ื”ื›ื™ ื˜ื•ื‘ ื”ื•ื ื›ืœื™ ืฉืคื•ืชืจ ื‘ืขื™ื” ืฉืขื›ืฉื™ื• ื™ืฉ ืœืš.

ToCode
1 418
ื“ื•ื’ืžืช ืงื•ื“: ื•ื™ื“ื•ื ืงืœื˜ ื‘ืฉืจืช ืขื yup ืœืคื ื™ ื›ืžื” ื™ืžื™ื ื”ืจืื™ืชื™ ื›ืืŸ ืื™ืš ืœื‘ื“ื•ืง ืงืœื˜ ื‘ื˜ื•ืคืก ืฆื“ ืœืงื•ื— ืขื yup. ืจืื™ื ื• ืฉ yup ืžื’ื™ืข ืขื ื”ืžื•ืŸ ื™ื›ื•ืœื•ืช ืื‘ืœ ื”ื—ื™ื‘ื•ืจ ืฉืœื• ืœืžืžืฉืง ื“ื•ืจืฉ ืขื‘ื•ื“ื” ื•ื‘ืจื•ื‘ ื”ืžืงืจื™ื ืืคืฉืจ ืœืงื‘ืœ ืชื•ืฆืื” ื˜ื•ื‘ื” ื™ื•ืชืจ ื“ืจืš ื”ื›ืœื™ื ื”ืžื•ื‘ื ื™ื ื‘ HTML. ืžืฆื“ ืฉื ื™ ื‘ืขื‘ื•ื“ืช ืฆื“ ืฉืจืช ืื ื—ื ื• ืžื’ืœื™ื ื›ืžื” yup ื™ืขื™ืœ ื•ื’ื ื”ืžื‘ื ื” ื”ืืกื™ื ื›ืจื•ื ื™ ืฉืœื• ื ืจืื” ืžืื•ื“ ื”ื’ื™ื•ื ื™, ื›ื™ ืžืžื™ืœื ื›ืœ ื” APIs ื‘ node ื”ื ืืกื™ื ื›ืจื•ื ื™ื™ื. ืฉื™ืžื• ืœื‘ ืœืงื•ื“ ื”ื‘ื ืœืฆื“ ืฉืจืช ืขื‘ื•ืจ REST API ืขื Hono:
app.post('/signup', async (c) => {
  const body = await c.req.parseBody()
  try {
    await signupUserSchema.validate(body);
    // create the user and redirect
    return c.json({ ok: true });
  } catch (err) {
    throw new HTTPException(401, {message: String(err)})
  }
});
ื”ืงื•ื“ ืœื•ืงื— ื ืชื•ื ื™ื ืฉื”ื’ื™ืขื• ืžื‘ืงืฉืช POST ืœื˜ื•ืคืก ื•ืžื•ื•ื“ื ืฉื”ื ืชืงื™ื ื™ื ืชื•ืš ืฉื™ืžื•ืฉ ื‘ืกื›ื™ืžื” ืฉืœ yup. ื”ืžื‘ื ื” ื”ื–ื” ื˜ื•ื‘ ื›ื™ ื”ื•ื ืžืคืจื™ื“ ื‘ื™ืŸ "ืžื” ืฉืฆืจื™ืš ืœืขืฉื•ืช" ืœ"ืื™ืš ืฆืจื™ืš ืœืขืฉื•ืช ืืช ื–ื”", ื›ืœื•ืžืจ ื‘ืจื•ืจ ื›ืฉืžืกืชื›ืœื™ื ืขืœ ื”ืงื•ื“ ืฉื™ืฉ ืคื” ื•ื•ืœื™ื“ืฆื™ื”, ื‘ืจื•ืจ ืžื” ืงื•ืจื” ืื ื”ื•ื•ืœื™ื“ืฆื™ื” ืžืฆืœื™ื—ื” ืื• ืื ื”ื™ื ื ื›ืฉืœืช, ืื‘ืœ ื”ื•ื•ืœื™ื“ืฆื™ื” ืขืฆืžื” ืžื‘ื•ืกืกืช ืขืœ ืกื›ื™ืžื” ืฉืžื•ื’ื“ืจืช ื‘ืžืงื•ื ืื—ืจ. ืื ื‘ืขืชื™ื“ ื ืจืฆื” ืœืฉื ื•ืช ืฉื“ื•ืช ื‘ื˜ื•ืคืก ืื• ืืช ื—ื•ืงื™ ื”ื•ื•ืœื™ื“ืฆื™ื” ืฉืœื”ื ืœื ื ืฆื˜ืจืš ืœื’ืขืช ื‘ืงื•ื“ ืฉืœ ื” Endpoint. ื•ืจืง ื‘ืฉื‘ื™ืœ ืœื”ืฉืœื™ื ืืช ื”ืชืžื•ื ื” ื–ื” ืงื•ื“ ื”ืกื›ื™ืžื” ืžืชื•ืš ื”ืงื•ื‘ืฅ signupUserSchema:
import {object, string} from 'yup';

export default object().shape({
  email: string().required().email(),
  password: string().required().min(3),
});
ื•ืงื•ื“ ื”ื˜ื•ืคืก:
<!DOCTYPE html>
<html>
  <body>
    <h1>Sign Up</h1>
    <form action="/signup" method="post">
      <label>
        Email
        <input type="email" name="email" required />
      </label>

      <label>
        Password
        <input type="password" name="password" required minlength="3" />
      </label>
      
      <input type="submit" />
    </form>
  </body>
</html>

ToCode
1 418
"ืจืง" ืขื•ื“ render ืื—ื“ ื”ื‘ืขื™ื” ื”ื™ื ืœื ื”"ืจืง" ืขื•ื“ render ืื—ื“ ืฉื”ืงื•ืžืคื•ื ื ื˜ื” ืฉืœืš ืžื•ืกื™ืคื” ืœืžืขืจื›ืช ื‘ื’ืœืœ ืฉื™ืžื•ืฉ ืœื ื ื›ื•ืŸ ื‘ useEffect. ื”ื‘ืขื™ื” ื”ื™ื ืžืื•ืช ื” render-ื™ื ืฉื™ืชื•ื•ืกืคื• ื‘ืืจื‘ืข ื”ืฉื ื™ื ื”ืงืจื•ื‘ื•ืช ื›ืฉืื ืฉื™ื ื™ืขืชื™ืงื• ืืช ื”ืงื•ื“ ื”ื–ื” ืœืขื•ื“ ืžืงื•ืžื•ืช ื•ื™ืฉืชืžืฉื• ื‘ืงื•ืžืคื•ื ื ื˜ื” ื‘ื“ืจื›ื™ื ืœื ืฆืคื•ื™ื•ืช. ื™ืฉ ืจืง ืฉืชื™ ื“ืจื›ื™ื ืœื–ื•ื– ืงื“ื™ืžื” ื•ืœืฉืžื•ืจ ืขืœ ืžื”ื™ืจื•ืช ืœืื•ืจืš ื–ืžืŸ: 1. ืืคืฉืจ ืœื›ืชื•ื‘ ืชืžื™ื“ ืืช ื”ืงื•ื“ ื”ื›ื™ ื ื›ื•ืŸ (ืงืฉื” ืžืื•ื“). 2. ืืคืฉืจ ืœื›ืชื•ื‘ ืงื•ื“ ืขื•ื‘ื“ ื•ืคืขื ื‘ื›ืžื” ื™ืžื™ื ืœื ืงื•ืช ืื•ืชื• (ื’ื ืงืฉื” ืžืื•ื“). ื•ื›ืŸ ื‘ืจื•ืจ ืœื™ ืฉืื™ืŸ ื“ืจืš ืงืœื” ืœื–ื•ื– ืงื“ื™ืžื” ื‘ืžื”ื™ืจื•ืช ืœืื•ืจืš ื–ืžืŸ. ื”ื—ื™ื™ื ื–ื” ืœื ืกืคืจ ืœื™ืžื•ื“ ื•ืจืื™ื ื• ื›ื‘ืจ ืžืกืคื™ืง ืžืขืจื›ื•ืช ืฉื™ื”ื™ื” ืงืฉื” ืžื“ื™ ืœื”ืฆื™ืœ. ื•ื‘ื›ืœ ื–ืืช, ื ืกื• ืœื–ื›ื•ืจ ืืช ื–ื” ื‘ืคืขื ื”ื‘ืื” ืฉืืชื ื—ื•ืฉื‘ื™ื "ืืฃ ืื—ื“ ืœื ื™ืฉื™ื ืœื‘ ืื ืื•ืกื™ืฃ ืจืง ืขื•ื“ render ืื—ื“".

ToCode
1 418
ืื™ืš ื›ื“ืื™ ืœื‘ื ื•ืช ืžืชื›ื ืชื™ื ืžื ื•ืกื™ื ื™ื•ื“ืขื™ื ื™ื•ืชืจ ื˜ื•ื‘ ืœืจืื•ืช ื‘ืขื™ื•ืช ืžืจืืฉ ื•ืœื—ื–ื•ืช ืื™ืคื” ื“ื‘ืจื™ื ืื•ืœื™ ื™ื™ืฉื‘ืจื•. ื›ืฉืื ื—ื ื• ืžื’ื™ื™ืกื™ื ืžืชื›ื ืชื™ื ืžื ื•ืกื™ื ื ื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ืžื™ื•ืžื ื•ืช ื–ืืช ื‘ืจืื™ื•ื ื•ืช ืขื‘ื•ื“ื” ื•ื›ืš ื’ื ืœืงื‘ืœ ืฉื™ื—ื” ื™ื•ืชืจ ืžืขื ื™ื™ื ืช ื•ื’ื ืœืกื ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืื ืฉื™ื ืฉื‘ืืžืช ืขื‘ื“ื• ืขื ื˜ื›ื ื•ืœื•ื’ื™ื” ืžืกื•ื™ืžืช ื•ืœืžื“ื• ืžื˜ืขื•ื™ื•ืช ืฉืขืฉื•. ื”ื ื” ื›ืžื” ื“ื•ื’ืžืื•ืช ืœืกื•ื’ ื”ืฉืืœื•ืช ืฉืฉื•ื•ื” ืœื—ืคืฉ: 1. ื™ืฉ ืœื™ ืฉืจืช REST API ื•ืืœื” ื” Endpoints ืฉืœื•. ืžื” ื™ื›ื•ืœื•ืช ืœื”ื™ื•ืช ื”ื‘ืขื™ื•ืช ื‘ืžืžืฉืง ืฉื‘ื—ืจืชื™? ืื™ื–ื” ื“ืจื™ืฉื” ืื• ื“ืจื™ืฉื•ืช ืœืงื•ื— ื™ื”ื™ื” ืœื™ ืงืฉื” ืœืžืžืฉ? 2. ื ืชื•ื ื” ืกืคืจื™ื™ืช ืจื™ืืงื˜ ื•ื–ื” ื” API ืฉืœื”. ื‘ืื™ื–ื” ืกื•ื’ื™ ืžืขืจื›ื•ืช ื™ื”ื™ื” ืงืœ ืœืฉืœื‘ ืื•ืชื”? ื•ืื™ืคื” ื™ื”ื™ื” ืงืฉื”? 3. ื ืชื•ืŸ ืžื‘ื ื” ื”ื˜ื‘ืœืื•ืช ื‘ื‘ืกื™ืก ื”ื ืชื•ื ื™ื. ืœืžื” ื›ื“ืื™ ืœืฉื™ื ืœื‘ ื›ืฉื™ื•ืฆืจื™ื ืืช ื‘ืกื™ืก ื”ื ืชื•ื ื™ื? ืื™ื–ื” ืคื™ืฆ'ืจื™ื ื™ื”ื™ื” ืงืœ ืื• ืงืฉื” ืœืžืžืฉ ืขื ื˜ื‘ืœืื•ืช ืืœื”? ืื™ื–ื” ืคื™ืฆ'ืจ ืขืœื•ืœ ืœื—ื™ื™ื‘ ืื•ืชื™ ืœ Data Migration ืžืฉืžืขื•ืชื™? 4. ื ืชื•ืŸ ืงื•ื“ ืฉืขื•ืฉื” X. ืื™ื–ื” ื“ืจื™ืฉื” ื—ื“ืฉื” ื™ื›ื•ืœื” ืœื”ื’ื™ืข ืžื”ืœืงื•ื— ืฉืชืฉื‘ื•ืจ ืืช ื”ืงื•ื“ ื”ื–ื”? ืขื ืื™ื–ื” ื“ืจื™ืฉื•ืช ืœืงื•ื— ื™ื”ื™ื” ืžืื•ื“ ืงืœ ืœื”ืชืžื•ื“ื“ ื‘ืขื–ืจืช ื”ืงื•ื“ ื”ืงื™ื™ื? 5. ื ืชื•ื ื™ื ืฉืœื•ืฉื” ืžื™ืžื•ืฉื™ื ืœืคื•ื ืงืฆื™ื” X, ื›ื•ืœื ืžื—ื–ื™ืจื™ื ืืช ืื•ืชื” ืชื•ืฆืื”. ืžื” ื”ื™ืชืจื•ื ื•ืช ื•ื”ื—ืกืจื•ื ื•ืช ืฉืœ ื›ืœ ืžื™ืžื•ืฉ? ื”ืžืฉื•ืชืฃ ืœื›ื•ืœืŸ: ื‘ืžืงื•ื ืœืฉืื•ืœ "ืื™ืš ืขื•ืฉื™ื X" ืื ื—ื ื• ืขื•ื‘ืจื™ื ืœืฉืื•ืœ "ืื™ืš ื›ื“ืื™ ืœืขืฉื•ืช X".

ToCode
1 418
ื•ื•ืœื™ื“ืฆื™ื™ืช ืงืœื˜ื™ื ื‘ืฆื“ ืœืงื•ื— ื–ื” ืชืžื™ื“ ื›ืื‘ ืจืืฉ ืื‘ืœ ื–ื” ืจืง ื ื”ื™ื” ื™ื•ืชืจ ืžืขื™ื™ืฃ ื›ืฉืฆืจื™ืš ืœื—ื‘ืจ ื‘ื™ืŸ ื”ื•ื•ืœื™ื“ืฆื™ื” ืœืกืคืจื™ื™ืช SPA. ืกืคืจื™ื•ืช ืงื•ื“ ืœื˜ื™ืคื•ืœ ืื•ื˜ื•ืžื˜ื™ ื‘ื“ื‘ืจื™ื ื”ืืœื” ืงื™ื™ืžื•ืช ืื‘ืœ ื”ืืžืช ืฉื‘ืœื™ ืงื•ื“ ืชืžื™ื“ ืขื“ื™ืฃ ืขืœ ืงื•ื“ ืฉืžื•ื—ื‘ื ื‘ืชื•ืš ืกืคืจื™ื™ื”. ืฉื™ืžื•ืฉ ื‘ืคืงื•ื“ื•ืช ื”ืžื•ื‘ื ื•ืช ื‘ HTML ื—ื•ืกืš ืืœืžื ื˜ื™ื ืขื•ื“ืคื™ื ื‘ DOM ื•ื—ื•ืกืš ืžืฉืชื ื™ื ืจื™ืืงื˜ื™ื‘ื™ื™ื ื•ื›ืš ื’ื ืขื‘ื•ื“ืช JavaScript. ื•ืžื” ืืชื›ื? ืื™ืš ืืชื ืื•ื”ื‘ื™ื ืœื ื”ืœ ืืช ื”ื˜ืคืกื™ื ืฉืœื›ื? ืืœ ืชืชื‘ื™ื™ืฉื• ืœืฉืชืฃ ื‘ืชื’ื•ื‘ื•ืช ืื• ื‘ื˜ืœื’ืจื.

ToCode
1 418
ื“ื•ื’ืžืช ืงื•ื“: ื‘ื“ื™ืงืช ื˜ื•ืคืก ืขื yup ื‘ vue ื”ื“ืจืš ื”ื›ื™ ืงืœื” ื”ื™ื•ื ืœืขื‘ื•ื“ ืขื ื˜ืคืกื™ื ื”ื™ื ืœื“ืœื’ ืขืœื™ื”ื ื‘ืกืคืจื™ื™ืช ื” SPA ืฉืœื ื•, ื•ืœื”ืฉืชืžืฉ ื‘ืžืืคื™ื™ื ื™ ื” HTML ื• ValidityState ืฉืœ ืจื›ื™ื‘ื™ ื”ืงืœื˜ ื›ื“ื™ ืœื”ืฆื™ื’ ื”ื•ื“ืขื•ืช ืœืžืฉืชืžืฉื™ื. ื•ืขื“ื™ื™ืŸ ืœืคืขืžื™ื ืื ื—ื ื• ืฆืจื™ื›ื™ื ื‘ื“ื™ืงื•ืช ื™ื•ืชืจ ืžืกื•ื‘ื›ื•ืช ืื• ืฉืจื•ืฆื™ื ืœื”ืจื™ืฅ ืชื”ืœื™ืš ื™ื•ืชืจ ืžืกื•ื“ืจ ืกื‘ื™ื‘ ื”ื ื•ืฉื ืฉืœ ื‘ื“ื™ืงื•ืช ืงืœื˜ ื‘ืฆื“ ืœืงื•ื—. ื‘ืžืฆื‘ื™ื ื›ืืœื” ื ื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ืกืคืจื™ื” ื›ืžื• yup ื›ื“ื™ ืœืชืืจ ืืช ื”ื˜ื•ืคืก ื•ื‘ืงื•ื“ ืœืขื“ื›ืŸ ืืช ื”ื•ื“ืขื•ืช ื”ืฉื’ื™ืื” ื‘ืชื•ืš ืืคืœื™ืงืฆื™ื™ืช vue ืื• ืจื™ืืงื˜. ื‘ื•ืื• ื ืจืื” ืื™ืš ื–ื” ืขื•ื‘ื“. ืกื›ื™ืžืช yup ืกืคืจื™ื™ืช yup ื”ื™ื ืกืคืจื™ื™ืช ื•ื•ืœื™ื“ืฆื™ื” ืœืžื™ื“ืข ืฉืžืืคืฉืจืช ืœื”ืจื™ืฅ ื‘ื“ื™ืงื•ืช ื•ืœื‘ืฆืข ื”ืžืจื•ืช ืขืœ ืงืœื˜ ืฉืงื™ื‘ืœื”. ื™ืฉ ืœื” ื”ืžื•ืŸ ืื•ืคืฆื™ื•ืช ืื™ืš ืœื”ื’ื“ื™ืจ ืืช ื”ืงืœื˜ ื•ืื ื—ื ื• ื ื™ืงื— ื›ืืŸ ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ืขื‘ื•ืจ ื˜ื•ืคืก ืจื™ืฉื•ื ืฉืžืงื‘ืœ ื›ืชื•ื‘ืช ืื™ืžื™ื™ืœ ื•ืกื™ืกืžื”, ืฉื ื™ื”ื ื”ื›ืจื—ื™ื™ื ื•ืื•ืจืš ื”ืกื™ืกืžื” ืฆืจื™ืš ืœื”ื™ื•ืช ืœืคื—ื•ืช 8 ืชื•ื•ื™ื. ื–ื” ื”ืงื•ื“ ื›ื“ื™ ืœื™ืฆื•ืจ ืืช ื”ืกื›ื™ืžื” ืขื yup:
import {object, string} from 'yup';

export const signupFormSchema = object({
  email: string()
    .email()
    .required(),

  password: string()
    .min(8, 'password must be at least 8 characters long')
    .required(),
});
ืกื›ื™ืžื” ืฉืœ yup ื™ื•ื“ืขืช ืœืงื‘ืœ ืื•ื‘ื™ืงื˜ ื•ืœื”ื’ื™ื“ ืื ื”ื•ื ืžืชืื™ื ืื• ืœื ื‘ืขื–ืจืช ืคื•ื ืงืฆื™ื” ืืกื™ื ื›ืจื•ื ื™ืช ื‘ืฉื validate. ืœื“ื•ื’ืžื” ื”ืงื•ื“ ื”ื‘ื:
try {
    await signupFormSchema.validate({email: 'ynon@demo.com', password: '12345678'});
    console.log('OK');
} catch (err) {
    console.log(err);
}
ืžื“ืคื™ืก ืืช ื”ื”ื•ื“ืขื” OK, ืื‘ืœ ื”ืงื•ื“ ื”ื–ื” ืžื“ืคื™ืก ื”ื•ื“ืขืช ืฉื’ื™ืื” ื›ื™ ื”ืกื™ืกืžื” ืงืฆืจื” ืžื“ื™:
try {
    await signupFormSchema.validate({email: 'ynon@demo.com', password: '123'});
    console.log('OK');
} catch (err) {
    console.log(err);
}
ื—ื™ื‘ื•ืจ ื”ืกื›ื™ืžื” ืœื˜ื•ืคืก ื—ื™ื‘ื•ืจ ื”ืกื›ื™ืžื” ืœื˜ื•ืคืก ื”ื•ื ื”ืกื™ื‘ื” ืฉืื ื™ ืžืขื“ื™ืฃ ื›ืžืขื˜ ืชืžื™ื“ ืœื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื•ืช ื”ืžื•ื‘ื ื•ืช ื‘ HTML ืขืœ ืคื ื™ ืงื•ื“, ื‘ืžื™ื•ื—ื“ ื‘ืขื‘ื•ื“ื” ืขื ืกืคืจื™ื•ืช SPA. ืืœื” ื”ื“ื‘ืจื™ื ืฉื”ื™ื™ืชื™ ืฆืจื™ืš ืœืขืฉื•ืช ื‘ vue ื‘ืฉื‘ื™ืœ ื”ื—ื™ื‘ื•ืจ (ื•ื›ืŸ ืื ื™ ื™ื•ื“ืข ืฉื™ืฉ ืกืคืจื™ื•ืช ืฉื™ืขืฉื• ืืช ื”ื—ื™ื‘ื•ืจ ื”ื–ื” ื‘ืฉื‘ื™ืœื™. ืœื”ื—ื‘ื™ื ืงื•ื“ ื‘ืชื•ืš ืกืคืจื™ื” ืœื ืžืขืœื™ื ืื•ืชื•): 1. ื”ื’ื“ืจืชื™ ืžืฉืชื ื” ืจื™ืืงื˜ื™ื‘ื™ ืฉื™ืฉืžื•ืจ ืืช ื”ืฉื’ื™ืื•ืช. 2. ื”ื’ื“ืจืชื™ ืžืฉืชื ื” ืจื™ืืงื˜ื™ื‘ื™ ื ื•ืกืฃ ืฉื™ืฉืžื•ืจ ืืช ืžืฆื‘ ื”ื”ื’ืฉื” ืฉืœ ื”ื˜ื•ืคืก (ืื ื›ื‘ืจ ื”ื’ืฉืชื™ ืื•ืชื• ืื• ืœื). 3. ื”ื’ื“ืจืชื™ ืคื•ื ืงืฆื™ื” ืœื˜ืคืœ ื‘ืื™ืจื•ืข submit ืฉืœ ื”ื˜ื•ืคืก ื•ืœื‘ืฆืข ื•ื•ืœื™ื“ืฆื™ื” ืขืœ ื”ืžื™ื“ืข ืฉื‘ื˜ื•ืคืก. 4. ื”ื•ืกืคืชื™ ืืœืžื ื˜ื™ HTML ืœื”ืฆื’ืช ื”ื•ื“ืขื•ืช ื”ืฉื’ื™ืื”. ืกืš ื”ื›ืœ ืงื•ื“ ื”ื˜ื•ืคืก ื‘ vue ื”ื•ื:
<script setup lang="ts">
import {signupFormSchema} from '../schemas/signup1';
import { ValidationError } from 'yup';
import {computed, ref, Ref} from 'vue';
const errors = ref<Array<ValidationError>>([]);
const status = ref<'pending'|'submitted'>('pending');

const errorsObject: Ref<Record<string, Array<ValidationError>>> = computed(() => 
  Object.groupBy(errors.value, e => e.path))

async function signup(ev: Event) {
  const form = ev.target as HTMLFormElement;
  const fd = new FormData(form);  
  const data = Object.fromEntries(fd);

  try {
    await signupFormSchema.validate(data, {abortEarly: false})
    errors.value = [];
    status.value = 'submitted';
  } catch (err) {
    if (err instanceof ValidationError) {
      errors.value = err.inner;
      console.log(err.inner);
    } else {
      throw err
    }    
  }
}
</script>

<template>
  <div v-if="status == 'submitted'">
    Ready!
  </div>
  <form @submit.prevent="signup">
    <div class="errors" v-if="errors.length > 0">
      <h3>Form Erorrs:</h3>
      <ul >
      <li
        v-for="(error, index) in errors"
        :key="index"      
        >
        {{ error.message }}
      </li>
      </ul>
    </div>    

    <div>
      <label>
        <span>Email: </span>
        <input name="email" type="email"  />
      </label>
    </div>
    <div>
      <label>
        <span>
          Password: 
        </span>
      <input name="password" type="password"  />
    </label>
    </div>
    <div>
      <input type="submit" value="Signup" :disabled="status === 'submitted'" />
    </div>    
  </form>
</template>

<style scoped>

label > span {
  width: 100px;
  display: inline-block;
}

form > div {
  text-align: left;
  margin: 10px;
}

.errors {
  text-align: left;
  list-style: none;
  padding-left: 10px;
}
</style>
ืžืกืงื ื•ืช

ToCode
1 418
ืืœื ืื ื›ืŸ ืืชื ื ื˜ืคืœื™ืงืก ื›ืฉื’ื•ืœืฉ ื ื›ื ืก ืืœื™ื›ื ืœืืชืจ, ื›ืžื” ื–ืžืŸ ื”ื“ืคื“ืคืŸ ืฉืœื• ืฆืจื™ืš ืœืขื‘ื•ื“ ื•ืœื”ืจื™ืฅ JavaScript ืœืคื ื™ ืฉื”ื•ื ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืืชืจ? ืžืกืชื‘ืจ ืฉื‘ืžืžื•ืฆืข ื”ืชืฉื•ื‘ื” ืชืœื•ื™ื” ื”ืจื‘ื” ื™ื•ืชืจ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื” ืื™ืชื” ื‘ื—ืจืชื ืœื‘ื ื•ืช ืืช ื”ืืชืจ ืžืืฉืจ ื‘ืคื™ืฆ'ืจื™ื ืฉืœ ื”ืืชืจ ืขืฆืžื•. ื”ืœื›ืชื™ ืœ Page Speed ืœื‘ื“ื•ืง 9 ืืชืจื™ ืจื™ืืงื˜ ื• next.js ื•ืœื ื”ื•ืคืชืขืชื™ ืžื”ืชื•ืฆืื•ืช: 1. ื‘ืฉื‘ื™ืœ ืœืงืจื•ื ืžืืžืจ ืžื”ืืชืจ ืฉืœ vercel ืฆืจื™ืš ืœื”ืจื™ืฅ JavaScript ื‘ืžืฉืš 2.5 ืฉื ื™ื•ืช. 2. ื“ืฃ ื”ื‘ื™ืช ืฉืœ nike ื”ืขืกื™ืง ืืช ื”ื“ืคื“ืคืŸ ื‘ืžืฉืš 8.1 ืฉื ื™ื•ืช ืจืง ื‘ื”ืจืฆืช ื”ืงื•ื“. 3. ื“ืฃ ื”ื‘ื™ืช ืฉืœ solana ืขื ื”ืกืœื•ื’ืŸ Poweful for developers, Fast for everyone ื‘ื™ืœื” "ืจืง" 1.6 ืฉื ื™ื•ืช ื‘ื”ืจืฆืช ืงื•ื“. 4. ืœืคื ื™ ืฉื‘ื•ื—ืจื™ื ืืจื•ื—ื” ื‘ wegmans ื”ื“ืคื“ืคืŸ ืฆืจื™ืš ืœื‘ืœื•ืช 10 ืฉื ื™ื•ืช ื‘ื”ืจืฆืช ื” JavaScript ืฉืœื”ื. 5. ืœืคื ื™ ืฉื‘ื•ื—ืจื™ื ืงื•ืจืก ื‘ืืงื“ืžื™ื” ืฉืœ ืงืืŸ ืฆืจื™ืš ืœื—ื›ื•ืช 2.9 ืฉื ื™ื•ืช ื›ื“ื™ ืœื”ืจื™ืฅ ืืช ื” JavaScript ืืฆืœื ื‘ืขืžื•ื“. 6. ืœืคื ื™ ืฉืืคืฉืจ ืœืงืจื•ื ืขื“ื›ื•ื ื™ื ื‘ืจื“ื™ื˜ ื ืงื“ื™ืฉ 2.3 ืฉื ื™ื•ืช ืœื”ืจืฆืช JavaScript. 7. ื‘ืงื•ืจืกืจื” ื ื‘ืœื” 3.8 ืฉื ื™ื•ืช ื‘ื”ืจืฆืช ื” JavaScript ืœืคื ื™ ืฉื ื•ื›ืœ ืœื”ื™ื›ื ืก ืœืงื•ืจืกื™ื. 8. ื™ื•ื“ืžื™ ื˜ื™ืคื” ื™ื•ืชืจ ื˜ื•ื‘ื™ื ืขื 3.1 ืฉื ื™ื•ืช ื–ืžืŸ ืจื™ืฆื” ืฉืœ JavaScript ื‘ื›ื ื™ืกื” ืœืขืžื•ื“. ืฆืจื™ืš ืœื”ื’ื™ื“ - ืžืฉืชืžืฉื™ื ืœื ืจื•ืฆื™ื ืœื‘ืœื•ืช ื–ืžืŸ ื‘ื”ืžืชื ื” ืœ JavaScript ืฉื™ืจื•ืฅ. ืื ืืคืฉืจ ื”ื™ื” ืœื‘ื ื•ืช ืืช ื”ืืชืจ ื‘ืฆื•ืจื” ืฉืชืชืŸ ืืช ืื•ืชื” ืคื•ื ืงืฆื™ื•ื ืืœื™ื•ืช ืื‘ืœ ื‘ืœื™ 10 ืฉื ื™ื•ืช ืฉืœ ื–ืžืŸ ืจื™ืฆื” ืฉืœ JavaScript ื›ื•ืœื ื”ื™ื• ืฉืžื—ื™ื ื™ื•ืชืจ. ืžื” ืฉืžืฉื•ืชืฃ ืœื›ืœ ื”ืืชืจื™ื ื‘ืจืฉื™ืžื” ื”ื•ื ื”ื‘ื—ื™ืจื” ื‘ React, ื—ืœืงื ื™ืฉื™ืจื•ืช ื•ื—ืœืงื ื’ื ืขื next.js. ื›ืŸ ื™ื”ื™ื” ืžืขื ื™ื™ืŸ ืœื‘ื“ื•ืง ื’ื ืคืจื™ื™ืžื•ื•ืจืงื™ื ืื—ืจื™ื ืื‘ืœ ืœื ื–ืืช ื”ื ืงื•ื“ื” ื›ืืŸ. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืขื•ื“ ืฉื ื™ ืืชืจื™ื ืžืขื ื™ื™ื ื™ื: ื”ืจืืฉื•ืŸ ื”ื•ื ื”ืืชืจ ื”ื–ื”, ื˜ื•ืงื•ื“. ื‘ื˜ื•ืงื•ื“ ื‘ื›ื ื™ืกื” ืœื“ืฃ ื”ื‘ื™ืช ื”ื“ืคื“ืคืŸ ื™ื‘ืœื” 0.8 ืฉื ื™ื•ืช ื‘ื”ืจืฆืช JavaScript. ื–ื” ื™ื•ืชืจ ื˜ื•ื‘ ืžื›ืœ ืืชืจื™ ื”ืจื™ืืงื˜ ืฉื‘ืจืฉื™ืžื” (ื•ื›ืŸ ื–ื• ืื—ืช ื”ืกื™ื‘ื•ืช ื‘ื’ืœืœืŸ ื ืคืจื“ืชื™ ืžืจื™ืืงื˜ ื›ื‘ืจ ืœืคื ื™ ื›ืžื” ืฉื ื™ื). ืื ื™ ืœื ื ื˜ืคืœื™ืงืก ื•ืื™ืŸ ืœื™ ืืช ืืช ื”ืจืฆื•ืŸ ืื• ื”ืžืฉืื‘ื™ื ืœื”ื™ืœื—ื ื‘ืคืจื™ื™ืžื•ื•ืจืง ื›ื“ื™ ืฉื“ืคื™ื ื™ื™ื˜ืขื ื• ืžื”ืจ. ืืชืจ ืฉื ื™ ื”ื•ื ื ื˜ืคืœื™ืงืก, ื•ื™ื“ืขืชื ืฉื”ื•ื ื™ื‘ื•ื. ื ื˜ืคืœื™ืงืก ื™ื•ื“ืขื™ื ืžื” ื”ื ืขื•ืฉื™ื ื•ืžื•ื›ื ื™ื ืœื”ืฉืงื™ืข ื‘ืชื”ืœื™ื›ื™ ืคื™ืชื•ื—, ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื•ืžื” ืœื. ืขืžื•ื“ ื” jobs ืฉืœื”ื ื‘ื›ืชื•ื‘ืช jobs.netflix.com ืžืฉืชืžืฉ ื‘ืจื™ืืงื˜ ื‘ืฆื•ืจื” ืžืื•ื“ ืืคืงื˜ื™ื‘ื™ืช ื•ืžื‘ืœื” ืจืง 0.6 ืฉื ื™ื•ืช ื‘ื”ืจืฆืช JavaScript ื›ืฉื”ื“ืฃ ื ื˜ืขืŸ. ืื’ืฃ ื’ื ืืชืจ ื”ืชื™ืขื•ื“ ืฉืœ ืจื™ืืงื˜ ืžืื•ื“ ื™ืขื™ืœ ื•ืžื’ื™ืข ืœืชื•ืฆืื•ืช ื“ื•ืžื•ืช ื•ืืฃ ื˜ื•ื‘ื•ืช ื™ื•ืชืจ. ื”ืกื™ืคื•ืจ ืขื ื”ืคืจื™ื™ืžื•ื•ืจืง ื”ื•ื ืœื ืฉื›ืœ ื“ืฃ ืจื™ืืงื˜ ืื• next ื”ื•ืœืš ืœื”ื™ื˜ืขืŸ ืœืื˜ ืื• ืœื‘ืœื•ืช ื”ืžื•ืŸ ื–ืžืŸ ื‘ื”ืจืฆืช JavaScript. ืื ืืชื ื™ื•ื“ืขื™ื ืžื” ืืชื ืขื•ืฉื™ื ื•ืžื•ื›ื ื™ื ืœื”ืชื™ื™ื—ืก ืœื‘ืขื™ื•ืช ื‘ื™ืฆื•ืขื™ื ื›ืžื• ืœื›ืœ ื‘ืื’ ืื—ืจ ืืคืฉืจ ืœืงื‘ืœ ื–ืžื ื™ ื˜ืขื™ื ื” ื˜ื•ื‘ื™ื ืœืžืจื•ืช ืจื™ืืงื˜. ืžื™ืœืช ื”ืžืคืชื— ื”ื™ื "ืœืžืจื•ืช".

ToCode
1 418
ื” fix ื”ืฉื ื™ ืžื™ื•ืชืจ ื“ื™ืœืŸ ื”ื•ืื ื’ ื”ื—ืœื™ื˜ ืœืกื’ื•ืจ ืืช ื”ืกื˜ืืจื˜-ืืค ืฉืœื• ื•ืคืจืกื ืืช ื›ืœ ื”ืงื•ื“ ืฉื”ื ื›ืชื‘ื• ื‘ื’ื™ื˜ื”ืื‘ ื›ื“ื™ ืฉื“ื‘ืจื™ื ืœื ื™ืœื›ื• ืœืคื—. ืื ื™ ืื•ื”ื‘ ื›ืืœื” ื”ื–ื“ืžื ื•ื™ื•ืช ื›ื™ ื–ื” ืžืืคืฉืจ ื”ืฆืฆื” ืœืคื™ืชื•ื— ืฉืœ ืžืขืจื›ืช ืืžื™ืชื™ืช, ืœื—ืฆื™ื ืืžื™ืชื™ื™ื ื•ืงื•ื“ ืืžื™ืชื™ ืฉื ื›ืชื‘. ื›ืฉืื ื™ ืžืชื—ื™ืœ ืœื”ืกืชื›ืœ ืขืœ ืงื•ื“ ืื—ื“ ื”ืžืกื›ื™ื ื”ืจืืฉื•ื ื™ื ืฉืื ื™ ืคื•ืชื— ื”ื•ื ื”ืกื™ื˜ื•ืจื™ื™ืช ื”ืงื•ืžื™ื˜ื™ื. ื”ืžื˜ืจื” ื”ื™ื ืœื”ื‘ื™ืŸ ืงืฆืช ืืช ื”ืžื—ืฉื‘ื” ืฉืœ ืžื™ ืฉื›ื•ืชื‘ ืืช ื”ืงื•ื“, ืœืคื ื™ ืฉืื ื™ ืฆื•ืœืœ ืœื‘ืขื™ื•ืช ืขืฆืžืŸ ื•ืœืคื™ืชืจื•ื ื•ืช ืฉื ื‘ื—ืจื•. ื‘ืจื™ืคื• ืฉืœ konfig, ื”ืกื˜ืืจื˜-ืืค ืฉืœ ืื•ืชื• ื“ื™ืœืŸ, ืชื•ืคืขื” ืื—ืช ื‘ืœื˜ื” ืžืื•ื“ ื‘ืžืกืš ื”ืงื•ืžื™ื˜ื™ื. ื”ื ื” ื›ืžื” ื“ื•ื’ืžืื•ืช:
f1ed4259c fix
75e825f62 fix
c388772ec remove unnecessary env group
1cc57ce33 fix sizing of logo
d26a25c47 fix sizing
f510e4f5d update
89007aad9 update
0d9701a14 updates to workflow
ื”ืจื‘ื” ืžื”ืงื•ืžื™ื˜ื™ื, ืื• ื™ื•ืชืจ ื ื›ื•ืŸ ื”ื•ื“ืขื•ืช ื”ืงื•ืžื™ื˜, ืžื•ืคื™ืขื•ืช ืฉื•ื‘ ื•ืฉื•ื‘. ื‘ื“ื•ื’ืžื” ื”ืจืืฉื•ื ื” ืื ื™ ืžื“ืžื™ื™ืŸ ืฉืื—ืจื™ ืฉื”ื•ื ื”ื•ืจื™ื“ ืืช ื” env group ื”ืžื™ื•ืชืจื™ื ื”ื™ืชื” ืื™ื–ื• ืชืงืœื” ื•ื” fix ืžืชื™ื™ื—ืก ืœืชื™ืงื•ืŸ ืื•ืชื” ืชืงืœื”, ื•ืื•ืœื™ ื”ืชื™ืงื•ืŸ ืœื ื”ืฆืœื™ื— ืžืกืคื™ืง ื˜ื•ื‘ ื‘ืคืขื ื”ืจืืฉื•ื ื” ืื– ืžื™ื“ ืื—ืจื™ื• ื”ื™ื” fix ื ื•ืกืฃ ืฉืžืชืงืŸ ืืช ื”ืชื™ืงื•ืŸ. ืžื•ื›ืจ? ื‘ืจื•ืจ. ืื‘ืœ ื™ืฉ ื’ื ื“ืจืš ื™ื•ืชืจ ื˜ื•ื‘ื”. ื ื ืกื” ืืช ื–ื”. ื™ืฆืจืชื™ ืจื™ืคื• ืจื™ืง ื•ื‘ืชื•ื›ื• ืจืง ืืช ืฉืœื•ืฉืช ื”ืงื•ืžื™ื˜ื™ื ื›ืš ืฉื”ืœื•ื’ ื”ื•ื:
41a1948 fix
0a197d4 fix
e7572cf remove unnecessary env group
daf174b initial commit
ื‘ื’ืœืœ ืฉืœื ื“ื—ืคืชื™ ืืช ื”ืฉื™ื ื•ื™ื™ื ืœืฉื•ื ืžืงื•ื, ื›ืœ ืžื” ืฉืฆืจื™ืš ื‘ืฉื‘ื™ืœ ืœืฉื ื•ืช ืืช ืฉืœื•ืฉืช ื”ื•ื“ืขื•ืช ื”ืงื•ืžื™ื˜ ื”ื•ื "ืœื—ื–ื•ืจ ืื—ื•ืจื”" ืฉืœื•ืฉื” ืงื•ืžื™ื˜ื™ื ื•ืœืขืฉื•ืช ืงื•ืžื™ื˜ ืžื—ื“ืฉ:
$ git reset HEAD~3
Unstaged changes after reset:
M       textfile.txt

$ git add .
$ git commit -m 'remove unnecessary env group'
ื”ืคืจื•ื™ืงื˜ ื›ืขืช ื ืžืฆื ื‘ืื•ืชื• ืžืฆื‘ ืฉืœ ืงื•ืžื™ื˜ 41a1948 ืื‘ืœ ื”ืœื•ื’ ื”ื•ื:
622a0da remove unnecessary env group
daf174b initial commit
ื•ืžื™ ืฉื™ืกืชื›ืœ ื‘ืœื•ื’ ื™ืจืื” ื‘ืชื•ืš ืงื•ืžื™ื˜ 622a0da ืืช ื›ืœ ื”ืฉื™ื ื•ื™ื™ื ืฉืœ ื›ืœ ืฉืœื•ืฉืช ื”ืงื•ืžื™ื˜ื™ื ื”ืžืงื•ืจื™ื™ื. ื .ื‘. ื™ืฉ ืžืขืจื›ื•ืช ืฉืžื›ืจื™ื—ื•ืช ืื•ืชืš ืœืขืฉื•ืช Push ื›ื“ื™ ืœื”ืคืขื™ืœ CI Pipeline. ืฉื™ื ื•ื™ ืงื•ืžื™ื˜ื™ื ืื—ืจื™ ื“ื—ื™ืคื” ื”ื•ื ืชื”ืœื™ืš ื”ืจื‘ื” ืคื—ื•ืช ื™ื“ื™ื“ื•ืชื™ ื•ื™ื›ื•ืœ ืœื‘ืœื‘ืœ ืžืคืชื—ื™ื ืื—ืจื™ื ืฉื›ื‘ืจ ืžืฉื›ื• ืืช ื”ืงื•ืžื™ื˜ื™ื ื”ืงื•ื“ืžื™ื. ื‘ืžืฆื‘ื™ื ื›ืืœื” ืื ื™ ืื•ื”ื‘ ืœื™ืฆื•ืจ ืขื ืฃ ื ืคืจื“ ืœืฆื•ืจืš ื”ืคืขืœืช ื” CI ื•ืื– ืื—ืจื™ ืฉืกื™ื™ืžืชื™ ืœื‘ื“ื•ืง ืื ื™ ืžืžื–ื’ ืืช ื”ืขื ืฃ ื•ืžื•ื—ืง ืืช ื”ืงื•ืžื™ื˜ื™ื ื”ืžื™ื•ืชืจื™ื ืขื ืจื™ื‘ื™ื™ืก.