en
Feedback
ToCode

ToCode

Open in Telegram

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

Show more
1 419
Subscribers
No data24 hours
No data7 days
-530 days
Posts Archive
ToCode
1 419
ืื– OpenAI ืขื‘ืจื• ืœืจืžื™ืงืก ื”ืจืฉืช ื’ื•ืขืฉืช ืกื‘ื™ื‘ ื”ืžืขื‘ืจ ืฉืœ OpenAI ืž next ืœ remix. ื›ื•ืœื ืžืฉืชืคื™ื ื—ื•ื•ื™ื•ืช ื•ืžืกื‘ื™ืจื™ื ื›ืžื” ื’ื ืœื”ื ื”ื™ื” ืงืฉื” ืœืขื‘ื•ื“ ืขื next ื•ืื™ืš ื” App Router ื”ื—ื“ืฉ ืžืกื•ื‘ืš ืžื“ื™. ืื ืกื” ืœืขืฉื•ืช ืงืฆืช ืกื“ืจ: 1. ืืคืœื™ืงืฆื™ื•ืช ืขืžื•ื“-ื™ื—ื™ื“ (SPA) ื–ื” ืžืกื•ื‘ืš. ื–ื” ืชืžื™ื“ ื”ื™ื”. ืกืคืจื™ื•ืช ืœืคื™ืชื•ื— SPA ื›ืžื• react-router ืงื™ื™ืžื•ืช ื‘ื“ื™ื•ืง ื‘ื’ืœืœ ืฉื–ื” ืžืกื•ื‘ืš ื•ืฉืœืืฃ ืื—ื“ ืื™ืŸ ื›ื— ืœื˜ืคืœ ื‘ืœื—ื™ืฆื•ืช ืขืœ ื›ืคืชื•ืจ "ืื—ื•ืจื”" ื•ืกื™ืžื ื™ื•ืช ื‘ื“ืคื“ืคืŸ. ืื ื—ื ื• ื‘ื•ื ื™ื SPA ื›ื™ ืœืคืขืžื™ื ื–ื” ื ื•ืชืŸ ื—ื•ื•ื™ืช ืฉื™ืžื•ืฉ ื˜ื•ื‘ื” ื™ื•ืชืจ. 2. ืจื™ื ื“ื•ืจ ื‘ืฆื“ ืฉืจืช (SSR) ื–ื” ืืคื™ืœื• ืขื•ื“ ื™ื•ืชืจ ืžืกื•ื‘ืš, ื›ื™ ื™ืฉ ืœื ื• ืืช ื›ืœ ื”ืกื™ื‘ื•ืš ืฉืœ SPA ื•ื‘ื ื•ืกืฃ ืฆืจื™ื›ื™ื ืœื”ืชืžื•ื“ื“ ืขื ื ื™ื”ื•ืœ Cache ื‘ืฆื“ ืฉืจืช ื•ืœื•ื•ื“ื ืฉื”ืงื•ื“ ืฉืœ ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ืœื ืžืคืขื™ืœ ื“ื‘ืจื™ื ืฉืฆืจื™ื›ื™ื ืืช window ื›ืฉื”ื•ื ืจืฅ ื‘ืฉืจืช. ืื ื—ื ื• ืžืจื ื“ืจื™ื ื‘ืฆื“ ืฉืจืช ื›ื™ ืžื ื•ืขื™ ื—ื™ืคื•ืฉ, ืงื•ืจืื™ ืžืกืš ื•ืขื•ื“ ื›ืœื™ื ืจื‘ื™ื ืื—ืจื™ื ืื•ื”ื‘ื™ื ืœืงื‘ืœ ืืช ื” HTML ืžื•ื›ืŸ ื’ื ืื ื”ื ืœื ืžืจื™ืฆื™ื JavaScript. 3. ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืฉืจืช (RSC) ื–ื” ืืคื™ืœื• ืขื•ื“ ื™ื•ืชืจ ืžืกื•ื‘ืš ืžืจื™ื ื“ื•ืจ ืฆื“ ืฉืจืช. ื‘ืจื™ื ื“ื•ืจ ืฆื“ ืฉืจืช ืจื’ื™ืœ ื›ืœ ื”ืงื•ื“ ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืžืฉืžืฉ ืœื‘ื ื™ื™ืช ื” HTML ื•ืื– ื ืฉืœื— ืœื“ืคื“ืคืŸ ื›ื“ื™ ืœื”ื•ืกื™ืฃ ืืช ื” JavaScript ื•ืงื•ื“ ื”ื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืขื™ื. ื‘ืžื‘ื ื” ืฉืœ ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืฉืจืช ืฆืจื™ืš ืœื‘ื—ื•ืจ ืžืจืืฉ ืื™ื–ื” ืงื•ืžืคื•ื ื ื˜ื•ืช ื›ื•ืœืœื•ืช ืงื•ื“ JavaScript ืฉืฆืจื™ืš ืœืจื•ืฅ ื‘ื“ืคื“ืคืŸ (ืืœื” ื”"ืื™ื™ื" ืื• ื”ืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืœืงื•ื—) ื•ืืช ื”ืงื•ื“ ืฉืœื”ืŸ ืื ื• ืฉื•ืœื—ื™ื ืœื“ืคื“ืคืŸ, ื•ื™ืฉ ืงื•ืžืคื•ื ื ื˜ื•ืช ืื—ืจื•ืช ืฉืื™ืŸ ืœื”ืŸ ืงื•ื“ ื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืขื™ื ื•ืœื›ืŸ ื ืขื“ื™ืฃ ืœื ืœืฉืœื•ื— ืืช ื”ืงื•ื“ ืฉืœื”ืŸ ืœื“ืคื“ืคืŸ. ื›ื›ื” ื‘ืืคืœื™ืงืฆื™ื” ื’ื“ื•ืœื” ืืคืฉืจ ืœืฉืœื•ื— ืœื“ืคื“ืคืŸ ืคื—ื•ืช ืงื•ื“ ื•ืœืงื‘ืœ ืฉื™ืคื•ืจ ื‘ื–ืžื ื™ ื”ื˜ืขื™ื ื” ื•ื‘ื—ื•ื•ื™ืช ื”ืžืฉืชืžืฉ. ื”ื ื˜ื™ื” ืฉืœ ื™ื•ืชืจ ืžื“ื™ ืžืคืชื—ื™ื ื”ื™ื ืœื‘ื—ื•ืจ ืืช ืฉื™ื˜ืช ื”ืขื‘ื•ื“ื” ื”ื›ื™ ืžืกื•ื‘ื›ืช ื›ื™ ืื•ืœื™ ื ืฆื˜ืจืš ืืช ื–ื” ื‘ืขืชื™ื“. ื–ื” ืžื” ืฉืงืจื” ื‘ OpenAI, ืฉื‘ื•ื ื™ื ืืคืœื™ืงืฆื™ื™ืช SPA ืื‘ืœ ื”ืฉืชืžืฉื• ื‘ next.js ืฉืžืชืื™ื ืœืงื•ืžืคื•ื ื ื˜ื•ืช ืฆื“ ืฉืจืช. ื‘ืฉืœื‘ ืžืกื•ื™ื ื”ื ื›ื ืจืื” ื”ื‘ื™ื ื• ืฉื”ื ืžืฉืœืžื™ื ื™ื•ืชืจ ืžื“ื™ ืขืœ ื”ื‘ื—ื™ืจื” ื”ื˜ื›ื ื•ืœื•ื’ื™ืช ืฉืœื”ื ื•ืขื‘ืจื• ืœืืคืœื™ืงืฆื™ื™ืช SPA ืจื’ื™ืœื” ืขื ืจืžื™ืงืก, ืฉืื’ื‘ ื”ืกืคื™ืง ืœืื—ืจื•ื ื” ืœื”ืชืžื–ื’ ื—ื–ืจื” ืœืชื•ืš React Router. ืžื™ ืฉืžื—ืคืฉ ืชื—ืžื•ืฉืช ืœืื™ื–ื” ื•ื™ื›ื•ื— ื“ืžื™ื•ื ื™ ื‘ื™ืŸ next.js ืœ react router ืœื“ืขืชื™ ืœื ื™ืžืฆื ืื•ืชื” ื›ืืŸ. ืื ื›ื‘ืจ ื™ืฉ ืคื” ืจืง ื—ื™ื“ื•ื“ ืฉืœ ื”ื”ื‘ื“ืœ ื‘ื™ืŸ ืฉื ื™ ื”ื›ืœื™ื ื•ื”ื‘ื ื” ื™ื•ืชืจ ืžื“ื•ื™ืงืช ืฉืœ ืžื” ืžืชืื™ื ืœืžื”. ื‘ืื•ืคืŸ ื›ืœืœื™ ื”ืชืืžื” ืฉืœ ืฉื™ื˜ืช ื”ืขื‘ื•ื“ื” ืœืืชื’ืจ ืื™ืชื• ืื ื—ื ื• ืžืชืžื•ื“ื“ื™ื ื•ืœืื™ืœื•ืฆื™ื ื”ื˜ื›ื ื•ืœื•ื’ื™ื™ื ืฉืœ ื”ืžืขืจื›ืช ืฉืœื ื• ื–ืืช ื”ื“ืจืš ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืœื‘ื—ื•ืจ ืกืคืจื™ื•ืช ืœืคืจื•ื™ืงื˜ ื”ื‘ื ืฉืœื ื•.

ToCode
1 419
ื ื™ืกื•ื™ Hono - ืกื™ื ื›ืจื•ืŸ ืขืจืš ื‘ื™ืŸ ื“ืคื“ืคื ื™ื ื”ืชืžื™ื›ื” ืฉืœ ื“ื™ื ื• ื‘ Web Standards ื”ื‘ื™ืื” ืœื–ื” ืฉืžืื•ื“ ืงืœ ืœื›ืชื•ื‘ ืงื•ื“ ื”ื•ื ื• ืฉืžืฉืชืžืฉ ื‘ Streams ื›ื“ื™ ืœืงื‘ืœ ื”ื•ื“ืขื•ืช ืžื’ื•ืœืฉื™ื ื•ืœื“ื•ื•ื— ืื•ืชืŸ ื”ืœืื” ืœื’ื•ืœืฉื™ื ื”ืื—ืจื™ื ื‘ืืชืจ, ื”ื›ืœ ื‘ SSE. ื‘ื•ืื• ื ืจืื” ืื™ืš ืœื—ื‘ืจ ืืช ื”ื—ื•ื˜ื™ื ื‘ืคืจื•ื™ืงื˜ ื“ื™ื ื• ื• Hono. ืžื” ืื ื—ื ื• ื‘ื•ื ื™ื ื”ืืชืจ ื™ื›ื™ืœ ืชื™ื‘ืช ื˜ืงืกื˜ ื•ื›ืคืชื•ืจ. ืื ื™ืฉ ืžืกืคืจ ื’ื•ืœืฉื™ื ืฉืžื—ื•ื‘ืจื™ื ืœืืชืจ ื•ืื—ื“ ืžื”ื ืœื•ื—ืฅ ืขืœ ื”ื›ืคืชื•ืจ ืื– ื”ืขืจืš ื‘ืชื™ื‘ืช ื”ื˜ืงืกื˜ ื™ื™ืฉืœื— ืœื›ืœ ื”ื“ืคื“ืคื ื™ื ืฉืœ ื”ื’ื•ืœืฉื™ื ื”ืื—ืจื™ื ื•ื™ืขื•ื“ื›ืŸ ืขืœ ื”ืžืกืš ืฉืœื”ื. ืงื•ื“ ืฆื“ ืฉืจืช ืงื•ื“ ืฆื“ ื”ืฉืจืช ืžื•ืจื›ื‘ ืžืฉื ื™ ื ืชื™ื‘ื™ื - ืื—ื“ ืžื˜ืคืœ ื‘ืขื™ื“ื›ื•ืŸ ื•ื”ืฉื ื™ ืžื˜ืคืœ ื‘ืจื™ืฉื•ื. ื›ืœ ื’ื•ืœืฉ ืฉื ื›ื ืก ืœืืชืจ ืคื•ืชื— ื—ื™ื‘ื•ืจ ืœื ืชื™ื‘ ื”ืจื™ืฉื•ื, ื•ื›ืœ ืคืขื ืฉืœื•ื—ืฆื™ื ืขืœ ื”ื›ืคืชื•ืจ ื”ื’ื•ืœืฉื™ื ืฉื•ืœื—ื™ื ื”ื•ื“ืขืช POST ืœื ืชื™ื‘ ื”ืขื™ื“ื›ื•ืŸ. ืื ื™ ืžืชื—ื™ืœ ื‘ื”ื’ื“ืจืช ืžืขืจืš ืฉืœ ื›ืœ ื”ื’ื•ืœืฉื™ื ืฉื›ืจื’ืข ืžื—ื•ื‘ืจื™ื:
const clients: Array<SSEStreamingApi> = [];
ื”ืžืžืฉืง SSEStreamingApi ืžื’ื™ืข ืž Hono ื•ืžืืคืฉืจ ืœืฉืœื•ื— ืื™ืจื•ืขื™ ืฆื“ ืฉืจืช ืœืœืงื•ื—ื•ืช ืฉืžืžืชื™ื ื™ื ืœื”ื. ื ืชื™ื‘ ื”ืจื™ืฉื•ื ื ืจืื” ื›ืš:
app.get('/count', (c) => {
  return streamSSE(c, async (stream) => {
    stream.writeln("data: Start\n\n");
    clients.push(stream);
    const id = clients.length - 1;

    stream.onAbort(() => {
      clients.splice(id, 1);
      console.log(\removed client ${id}\);
    });
    
    while(true) {
      await stream.sleep(1000);
    }
  })
})
ืœืงื•ื—ื•ืช ืฉืžืชื—ื‘ืจื™ื ืœืืชืจ ื™ื™ื›ื ืกื• ืœื ืชื™ื‘ ื–ื” ื›ื“ื™ ืœื”ื™ืจืฉื ืœืงื‘ืœืช ื”ื•ื“ืขื•ืช. ื”ืคื•ื ืงืฆื™ื” streamSSE ืžื’ื™ืขื” ืž hono. ื”ื™ื ืžืงื‘ืœืช ืืช ืื•ื‘ื™ืงื˜ ื”ื—ื™ื‘ื•ืจ ืฉืœ hono ืขืฆืžื• ื•ืคื•ื ืงืฆื™ื™ืช Callback. ื›ืœ ืคืขื ืฉืœืงื•ื— ืžืชื—ื‘ืจ ืžื•ืคืขืœืช ืคื•ื ืงืฆื™ื™ืช ื” Callback ืขื ื”ืคืจืžื˜ืจ stream ืฉืžื™ื™ืฆื’ ืืช ื–ืจื ื”ืชืงืฉื•ืจืช ืœืื•ืชื• ื’ื•ืœืฉ. ื‘ืงื•ื“ ื”ื“ื•ื’ืžื” ืื ื™ ืžื“ื‘ื™ืง ืืช ื”ืื•ื‘ื™ืงื˜ ื”ื–ื” ืœืžืขืจืš ื•ื’ื ืจื•ืฉื ืขืœื™ื• ืคื•ื ืงืฆื™ื™ืช ื‘ื™ื˜ื•ืœ ื›ืš ืฉื›ืฉื”ื–ืจื ื™ื™ืกื’ืจ ืื•ื˜ื•ืžื˜ื™ืช ื”ื•ื ื™ื•ืกืจ ืžื”ืžืขืจืš. ื”ืคื•ื ืงืฆื™ื” ืžืกืชื™ื™ืžืช ื‘ืœื•ืœืื” ืื™ื ืกื•ืคื™ืช ืฉืžื˜ืจืชื” ืœืฉืžื•ืจ ืืช ื”ื—ื™ื‘ื•ืจ ื‘ื—ื™ื™ื. ืืช ื”ื›ืชื™ื‘ื” ืื ื™ ืžื‘ืฆืข ืžืงื•ื“ ื”ื˜ื™ืคื•ืœ ื‘ื ืชื™ื‘ ื”ืขื™ื“ื›ื•ืŸ:
app.post('/count', async (c) => {
  console.log(\POST /count\);
  const { value } = await c.req.json();
  console.log(\Got ${value}\);

  clients.forEach(c => {
    c.writeSSE({ data: value });
  })
  
  return c.json({ message: 'Value received' });
})
ืงื•ื“ ื–ื” ื ืงืจื ื›ืœ ืคืขื ืฉื ืฉืœื—ืช ื‘ืงืฉืช POST ืœื ืชื™ื‘ ื”ืขื™ื“ื›ื•ืŸ. ื”ืงื•ื“ ืจืฅ ืขืœ ื›ืœ ื”ืœืงื•ื—ื•ืช ื‘ืžืขืจืš ื•ื›ื•ืชื‘ ืœื›ืœ ืื—ื“ ืžื”ื ืืช ื”ืขืจืš ืฉื ืฉืœื—. ื”ืขืœื™ืชื™ ืืช ื”ืงื•ื“ ื”ืžืœื ืฉืœ main.ts ืขื ื›ืœ ื” import-ื™ื ืœื’ื™ื˜ื”ืื‘ ืžื•ื–ืžื ื™ื ืœืžืฆื•ื ืื•ืชื• ื‘ื“ืฃ ื”ืคืจื•ื™ืงื˜: https://github.com/ynonp/hono-sync-counter-demo ืงื•ื“ ืฆื“ ืœืงื•ื— ื‘ืฆื“ ื”ืœืงื•ื— ืื ื™ ืจื•ืฆื” ืœื”ืชื—ื‘ืจ ืœื ืชื™ื‘ ื”ืจื™ืฉื•ื ื‘ืขืœื™ื™ื”, ื•ืื—ืจื™ ื–ื” ืœืฉืœื•ื— ื”ื•ื“ืขื•ืช POST ืœื ืชื™ื‘ ื”ืขื“ื›ื•ืŸ ื›ืœ ืคืขื ืฉืœื•ื—ืฆื™ื ืขืœ ื”ื›ืคืชื•ืจ. ื–ื” ืงื•ื‘ืฅ ื” JavaScript ืฉืื ื™ ืฉื•ืœื— ืœืœืงื•ื—:
// client/sync.js

const evtSource = new EventSource("/count");
const ti = document.querySelector('input');

evtSource.onmessage = (event) => {
  ti.value = event.data;
};

document.querySelector('button').addEventListener('click', async () => {
  await fetch('/count', {
    method: "POST",
    body: JSON.stringify({ value: ti.value }),
    contentType: 'application/json',
  });
});
ื”ืขื‘ื•ื“ื” ืขื SSE ื‘ื“ืคื“ืคืŸ ืžืื•ื“ ื ื•ื—ื” ื•ืื ื™ ืžืขื“ื™ืฃ ืื•ืชื• ืขืœ ืคื ื™ Web Sockets ืขื‘ื•ืจ ืขื™ื“ื›ื•ื ื™ื ืืกื™ื ื›ืจื•ื ื™ื™ื ืžืฆื“ ืฉืจืช.

ToCode
1 419
ื–ืžืŸ ืœืงื‘ื•ืจ ืืช ื–ื” ืžื” ืขื•ืฉื” ืจืืฉืช ื”ืฆื•ื•ืช ืฉืžื’ืœื” ืฉืื™ืŸ ืชืฉืชื™ืช ื‘ื—ื‘ืจื” ืœื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช ืœืžืขืจื›ืช? ืžื” ืขื•ืฉื” ื”ืžืคืชื—ืช ืฉืžื‘ื™ื ื” ืฉื‘ืœื™ ืืชืจ ืชื™ืขื•ื“ ืืฃ ืื—ื“ ืœื ื™ื‘ื™ืŸ ืืช ื”ืคืจื™ื™ืžื•ื•ืจืง ืฉื”ื™ื ื‘ื•ื ื”? ื”ืชืจื‘ื•ืช ื‘ืชืขืฉื™ื™ื” ืฉืœื ื• ืžืขื•ื“ื“ืช ื™ื–ืžื•ืช ื›ื•ืœืœ ื™ื–ืžื•ืช ืคื ื™ืžื™ืช. ืื ื—ื ื• ืžืขื“ื™ืคื™ื ืœืคืชื•ืจ ื‘ืขื™ื•ืช ืขื ื”ื›ืœื™ื ืฉืขื•ืžื“ื™ื ืœืจืฉื•ืชื ื•, ื•ืื ืื™ืŸ ืคื™ืชืจื•ืŸ ื˜ื•ื‘ ืžื›ื ื™ืกื™ื ื›ืœื™ื ื—ื“ืฉื™ื. ืžืคืชื—ืช ืฉืชื‘ื™ื ืคืจื™ื™ืžื•ื•ืจืง ืขื ืชื™ืขื•ื“ ื•ื‘ื“ื™ืงื•ืช ืชืงื‘ืœ ื™ื•ืชืจ ืงืจื“ื™ื˜ ืขืœ ื”ืขื‘ื•ื“ื” ืฉืœื”, ืืคื™ืœื• ืื ื–ื” ื”ื™ื” ืžืขื‘ืจ ืœื“ืจื™ืฉื•ืช. ืจืืฉ ื”ืฆื•ื•ืช ืฉื™ืฆืœื™ื— ืœื”ื•ืจื™ื“ ืืช ื›ืžื•ืช ื”ื‘ืื’ื™ื ื‘ืืžืฆืขื•ืช ืฉื™ืœื•ื‘ ืžืขืจื›ืช ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช ื™ื–ื›ื” ื‘ืชื”ื™ืœื” ื•ื‘ืฆื“ืง. ื”ืืชื’ืจ ื”ื•ื ืžื” ืฉืงื•ืจืื™ื ื‘ื˜ืขื•ืช Job Security - ื”ืฆื•ืจืš ืฉืœ ืื•ืชื ืื ืฉื™ื ืœื”ืžืฉื™ืš ืœืชื—ื–ืง ืืช ื”ืžื•ืฆืจื™ื ืฉื”ื ื”ื›ื ื™ืกื• ืืคื™ืœื• ืื—ืจื™ ืฉื”ื ืžืžืฉื™ื›ื™ื ืœืชืคืงื™ื“ื™ื ื—ื“ืฉื™ื ื‘ื—ื‘ืจื” ื•ืœืคืขืžื™ื ื’ื ื‘ืชื•ืจ ืคืจื™ืœืื ืกืจื™ื ืื—ืจื™ ืฉืขื•ื–ื‘ื™ื ืืช ื”ื—ื‘ืจื”. ื”ืžืฉืš ืชื—ื–ื•ืงืช ืžื•ืฆืจื™ื ื™ืฉื ื™ื ื–ื” ืœื ื‘ืื™ื ื˜ืจืก ืฉืœ ืืฃ ืื—ื“. ื”ื—ื‘ืจื” ืžืคืกื™ื“ื” ื›ื™ ื”ื™ื ืชืœื•ื™ื” ื‘ืžืคืชื— ื‘ื•ื“ื“, ื”ืžืคืชื— ืžืคืกื™ื“ ื›ื™ ื”ื•ื ืœื ืžืฆืœื™ื— ืœื”ืชืคื ื•ืช 100% ืœืคืจื•ื™ืงื˜ื™ื ื—ื“ืฉื™ื, ื•ื”ืคืจื•ื™ืงื˜ ืžืคืกื™ื“ ื›ื™ ื™ื’ื™ืข ื™ื•ื ืฉื›ืœ ื”ืงื•ื“ ื”ื–ื” ื™ื’ื™ืข ืœืคื— ื•ื ืฆื˜ืจืš ืœื›ืชื•ื‘ ืžืขืจื›ืช ื—ื“ืฉื”. ืžื•ืฆืจื™ื ืคื ื™ืžื™ื™ื, ื›ืžื• ืžื•ืฆืจื™ื ื—ื™ืฆื•ื ื™ื™ื, ื™ื›ื•ืœื™ื "ืœืชืคื•ืก" ืื• ืœื. ื™ื•ื ื™ืงืก ื”ื—ืœื” ืืช ื“ืจื›ื” ื›ืžื•ืฆืจ ืคื ื™ืžื™, ืื‘ืœ ื‘ืจื’ืข ืฉื›ื•ืœื ื‘ื—ื‘ืจื” ื”ืฉืชืžืฉื• ื‘ื” ื”ื™ื” ื‘ืจื•ืจ ืฉืื™ืŸ ื“ืจืš ื—ื–ืจื”. ืชืฉืชื™ืช ื‘ื“ื™ืงื•ืช ืคื ื™ืžื™ืช ืฉืžื™ืฉื”ื• ื‘ื ื” ื‘ืฉื‘ื™ืœ ื”ืฆื•ื•ืช ืฉืœื• ื™ื›ื•ืœื” ื‘ืงืœื•ืช ืœื”ืคื•ืš ืœืžื•ืฆืจ ืœื™ื‘ื” ืฉืœ ื”ื—ื‘ืจื” ื•ืœืงื‘ืœ ืฆื•ื•ืช ืฉืื—ืจืื™ ืœื”ืจื—ื™ื‘ ื•ืœืคืชื— ืื•ืชื”. ื•ื‘ืื•ืชื” ืžื™ื“ื” ืžื•ืฆืจื™ื ืคื ื™ืžื™ื™ื, ื›ืžื• ืžื•ืฆืจื™ื ื—ื™ืฆื•ื ื™ื™ื, ื™ื›ื•ืœื™ื ืœื”ื™ืฉืืจ ื‘ืฉื™ืžื•ืฉ ืฉืœ ืžืกืคืจ ืงื˜ืŸ ืฉืœ ืžืคืชื—ื™ื ื•ืœื”ืžืฉื™ืš ืœื”ื™ื•ืช ืžืชื•ื—ื–ืงื™ื ืขืœ ื™ื“ื™ ืื•ืชื• ืžืคืชื— ืื•ืžืœืœ ืฉื›ืชื‘ ืื•ืชื ืœืคื ื™ ืฉื ื™ื. ื›ืฉื–ื” ืงื•ืจื” ื•ื›ื— ื”ืื™ื ืจืฆื™ื” ื”ื•ื ื”ื“ื‘ืจ ื”ื™ื—ื™ื“ ืฉืžืฉืื™ืจ ืื•ืชื ื‘ื—ื™ื™ื ืฉื•ื•ื” ืœืชื›ื ืŸ ืžื•ืขื“ ืกื™ื•ื ื—ื™ื™ื ืœืื•ืชื ืžื•ืฆืจื™ื. ื”ืืชื’ืจ ืžื‘ื—ื™ื ืช ื”ื—ื‘ืจื” ื”ื•ื ืฉืœื›ืื•ืจื” ืื ื—ื ื• ืจืง ืžืจื•ื•ื™ื—ื™ื - ื™ืฉ ืœื ื• ืžื•ืฆืจ ืขื ืืคืก ืขืœื•ืช ืชื—ื–ื•ืงื” ื›ื™ ืืœื‘ืจื˜ ืžื”ืคื™ืชื•ื— ืžืชื—ื–ืง ืื•ืชื• ื‘ื ื•ืกืฃ ืœืขื‘ื•ื“ื” ื”ืจื’ื™ืœื” ืฉืœื• ื•ืœื ืžืชืœื•ื ืŸ. ื‘ื˜ื•ื•ื— ื”ืจื—ื•ืง ืžื•ืขื“ ื”ืชืฉืœื•ื ื™ื’ื™ืข ื•ื‘ืจื™ื‘ื™ืช, ื›ืฉืืœื‘ืจื˜ ืžื”ืคื™ืชื•ื— ื™ื—ืœื™ื˜ ืœืขื–ื•ื‘ ื•ื ืžืฆื ืืช ืขืฆืžื ื• ืžื—ืคืฉื™ื ืžืคืชื— TypeScript ืฉื’ื ื™ื•ื“ืข awk ื‘ืฉื‘ื™ืœ ืœื”ื—ืœื™ืฃ ืื•ืชื•.

ToCode
1 419
ืฆื•ื•ืช ืชืฉืชื™ื•ืช ืงื•ืœื•ืžื‘ื™ืื ื™ ืฉื™ืจืฆื” ืœืขื‘ื•ืจ 400 ืง"ืž ื›ื“ื™ ืœื”ื’ื™ืข ืžืžื“ื’'ื™ืŸ ืœื‘ื•ื’ื•ื˜ื” ื™ืฆื˜ืจืš ืœืฉื‘ืช 10 ืฉืขื•ืช ื‘ืื•ื˜ื•ื‘ื•ืก. ืฆืจืคืชื™ ืฉื™ืจืฆื” ืœืขื‘ื•ืจ ืืช ืื•ืชื• ืžืจื—ืง ืžืคืจื™ื– ืœื‘ื•ืจื“ื• ื™ืฆื˜ืจืš ืจืง ืฉืขืชื™ื™ื ื•ื—ืฆื™ ื‘ืจื›ื‘ืช. ื”ื—ื™ืกื›ื•ืŸ ื‘ื–ืžืŸ ื”ื•ื ืขืฆื•ื ืื‘ืœ ื’ื ืืคืฉืจื•ื™ื•ืช ื”ื”ืจื—ื‘ื” - ื‘ืจื›ื‘ืช ืืคืฉืจ ืœืขื‘ื•ื“ ืชื•ืš ื›ื“ื™ ื ืกื™ืขื” ื•ื”ืงื™ื‘ื•ืœืช ื”ื’ื“ื•ืœื” ื™ื•ืชืจ ืžืืคืฉืจ ืœื”ืขื‘ื™ืจ ืžื˜ืขื ื™ื. ืื™ืš ื”ื”ื‘ื“ืœ ื”ื–ื” ืžืฉืคื™ืข ืขืœ ื”ื›ืœื›ืœื”? ืขืœ ื”ืชืจื‘ื•ืช? ืขืœ ื”ืžื“ืข? ืขืœ ื”ื—ื™ื™ื? ืขื‘ื•ื“ื” ืขืœ ืชืฉืชื™ื•ืช ืœื ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืจืง ืชื—ื–ื•ืงื” ื•ืชื™ืงื•ืŸ ืชืงืœื•ืช ื‘ื›ื‘ื™ืฉ. ืฆื•ื•ืชื™ ืชืฉืชื™ื•ืช ื˜ื•ื‘ื™ื ื”ื ืืœื” ืฉื‘ื•ื ื™ื ืืช ื”ืขืชื™ื“. ื”ื ืžืืคืฉืจื™ื ืœืคื™ืชื•ื— ืœื—ืœื•ื ื‘ื’ื“ื•ืœ ื•ื”ื•ืคื›ื™ื ืืช ื”ื—ืœื•ืžื•ืช ื”ืืœื” ืœืืคืฉืจื™ื™ื. ืฆื•ื•ืชื™ ืชืฉืชื™ื•ืช ื”ื ืืœื” ืฉืžื ื™ื—ื™ื ืืช ืžืกื™ืœืช ื”ืจื›ื‘ืช. ื”ืžืขื‘ืจ ืžืชื—ื–ื•ืงื” ืœื™ื•ื–ืžื” ื”ื•ื ืื—ื“ ื”ื—ืฉื•ื‘ื™ื ืฉื ืขืฉื” ื‘ืงืจื™ื™ืจื”. (ื .ื‘. ื”ืงื•ืฉื™ ื‘ืคืจื•ื™ืงื˜ื™ ืชืฉืชื™ืช ื˜ื•ื‘ื™ื ื“ื•ืžื” ืœืงื•ืฉื™ ื›ืœืœื™ ื‘ืคื™ืชื•ื— ืžื•ืฆืจื™ื - ืื™ืš ื™ื•ื“ืขื™ื ืžื” ืœื‘ื ื•ืช ื•ื”ืื ืžื” ืฉืื ื™ ื‘ื•ื ื” ื‘ืืžืช ื™ืขื–ื•ืจ. ืจืง ื‘ื’ืœืœ ืฉืืคืฉืจ ืœื”ืขื‘ื™ืจ ืืช ื›ืœ ื”ื—ื‘ืจื” ืœืงื•ื‘ืจื ื˜ื™ืก ืœื ืื•ืžืจ ืฉื–ื” ื”ื“ื‘ืจ ื”ื ื›ื•ืŸ ืœืขืฉื•ืช. ื”ืืชื’ืจ ื”ื™ื•ื ื™ื•ืชืจ ืžืื™ ืคืขื ื‘ืขื‘ืจ ื”ื•ื ืœื”ื‘ื™ืŸ ืืช ืฆืจื›ื™ ื”ื—ื‘ืจื” ื•ืœืขืฉื•ืช ืืช ื”ืฉื™ื ื•ื™ื™ื ืฉืื—ืจื™ื ืคื•ื—ื“ื™ื ืœืขืฉื•ืช ืื‘ืœ ื›ืŸ ื™ืคืชื—ื• ื“ืœืชื•ืช ืœื”ืฆืœื—ื”).

ToCode
1 419
ื›ืžื” ืžื—ืฉื‘ื•ืช ืขืœ ืกื˜ืืง ืื•ื‘ืจืคืœื• ื• AI ืœืžื” Stack Overflow ืœื ืจื•ืฆื™ื ืฉ Chat GPT ื™ืขื ื” ืขืœ ืฉืืœื•ืช? ื•ืžื” ื–ื” ืื•ืžืจ ืขืœ ืฉืืจ ื”ื“ื‘ืจื™ื ืฉืื ื—ื ื• ืจื•ืฆื™ื ืื• ืœื ืจื•ืฆื™ื ืœืขืฉื•ืช ืขื AI? ื ืชื—ื™ืœ ืขื ื”ืžืงืจื™ื ื”ืงืœื™ื - ืื ืื ื™ ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ื ื™ืชื•ื‘ ืœืคืจื•ืงืกื™ ื—ื“ืฉ ืขืœ ืฉืจืช ื” Apache ืฉืœื™ ื‘ืจื•ืจ ืฉืื ื™ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ AI ื›ื“ื™ ืœื™ื™ืฆืจ ืืช ืงื•ื‘ืฅ ื”ื”ื’ื“ืจื•ืช. ื’ื ื‘ืฉื‘ื™ืœ ืœื™ืฆื•ืจ ืžื ื™ืคืกื˜ ืœืงื•ื‘ืจื ื˜ื™ืก, ืœื”ืžื™ืจ ืงื•ื‘ืฅ JSON ืœ YAML ื•ืœื™ืฆื•ืจ ื ืชื•ื ื™ื ืืงืจืื™ื™ื ืœื‘ื“ื™ืงื•ืช. ื›ืœ ื”ืžืงืจื™ื ื”ืืœื” ื ืจืื™ื ื”ื’ื™ื•ื ื™ื™ื ื›ื™ ืืœื” ื“ื‘ืจื™ื ืฉื™ื›ื•ืœืชื™ ื‘ืงืœื•ืช ืœืžืฆื•ื ื‘ืชื™ืขื•ื“ ื‘ืจืฉืช, ืืคืฉืจ ืœื”ื’ื™ื“ ืฉื” AI ืœื ื—ืกืš ืœื™ ืคื” ื”ืžื•ืŸ ืขื‘ื•ื“ื”. ืื‘ืœ ื–ืืช ืจืง ื”ื”ืชื—ืœื”. ืžื” ืœื’ื‘ื™ ื”ืงื•ื“ ื”ืืžื™ืชื™? ืขื“ื™ื™ืŸ ื ืจืื” ืœื™ ื”ื’ื™ื•ื ื™ ืœื‘ืงืฉ ืž AI ืœื›ืชื•ื‘ ืœื™ ืฉืื™ืœืชืช SQL, ื’ื ืื ื”ื™ื ืžืกื•ื‘ื›ืช, ืœื‘ื ื•ืช ื‘ืฉื‘ื™ืœื™ ื‘ืœื•ืง CSS ื’ื ืื ื”ื•ื ืžืฉืชืžืฉ ื‘ื™ื›ื•ืœื•ืช CSS ืฉืื ื™ ืœื ืžืžืฉ ืžื›ื™ืจ ื•ืืคื™ืœื• ืœืขืฆื‘ ื•ืœืฆื™ื™ืจ ืงื•ื“ ืœืงื•ืžืคื•ื ื ื˜ืช ืจื™ืืงื˜ ื›ื•ืœืœ ื”ืคื•ื ืงืฆื™ื•ื ืืœื™ื•ืช ืฉืœื”. ื‘ื›ืœ ื”ืžืงืจื™ื ื”ืืœื” ืื ื™ ื›ื‘ืจ ืœื ื—ื•ืฉื‘ ืขืœ ื”ืชื•ืฆืื” ืฉื” AI ืžื™ื™ืฆืจ ื‘ืชื•ืจ ืžืฉื”ื• ืฉื”ื™ื™ืชื™ ื™ื›ื•ืœ ืœืžืฆื•ื ื‘ืจืฉืช, ืืœื ืื ื™ ื—ื•ืฉื‘ ืขืœ ื” AI ื‘ืชื•ืจ ืžื™ืฉื”ื• ืฉืขื•ื‘ื“ ื‘ืฉื‘ื™ืœื™. ืžืขื™ืŸ ืขื•ื–ืจ ื•ื™ืจื˜ื•ืืœื™ ืฉื ื›ื ืก ืœืงื•ื“ ื•ืขื•ื–ืจ ืœื™ ืœืžืฆื•ื ืชืงืœื•ืช ื•ืœื”ื•ืกื™ืฃ ืคื™ืฆ'ืจื™ื ืงื˜ื ื™ื. ืืคืฉืจ ืœื“ืžื™ื™ืŸ ืฉื‘ื’ืœืœ ืฉืื ื™ ืžืฉืœื ืกื›ื•ื ื—ื•ื“ืฉื™ ืœ Open AI ืื– ืื ื™ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืงื•ื“ ืฉืœ ืื•ืชื• ืขื•ื–ืจ ื•ื™ืจื˜ื•ืืœื™ ื‘ืื•ืชื• ืื•ืคืŸ ืฉื”ื™ื™ืชื™ ื™ื›ื•ืœ ืœื”ืขืกื™ืง ืžืชื›ื ืช ืืžื™ืชื™ ื•ืœื”ืฉืชืžืฉ ื‘ืงื•ื“ ืฉื”ื•ื ื›ื•ืชื‘ (ืจืง ื”ืจื‘ื” ื™ื•ืชืจ ื–ื•ืœ). ืžืกื™ื‘ื•ืช ืืœื” ืื ื—ื ื• ื’ื ืžืจื’ื™ืฉื™ื ื‘ื ื•ื— ืœืชืช ืœ AI ืœื‘ื ื•ืช ืขื‘ื•ืจื ื• ื“ืคื™ ื ื—ื™ืชื”, ืœืขื–ื•ืจ ื‘ื ื™ืกื•ื— ืžื™ื™ืœื™ื, ืœื”ืขืœื•ืช ืจืขื™ื•ื ื•ืช ื—ื“ืฉื™ื (ืฉื™ื•ื ืื—ื“ ื’ื ื ืฆื™ื’ ืื•ืชื ื‘ืคื’ื™ืฉื” ื‘ืชื•ืจ ืจืขื™ื•ื ื•ืช ืฉืœื ื•), ืœื™ื™ืฆืจ ื’ืจืคื™ืงื” ืื• ืžื•ื–ื™ืงื” ื•ืขื•ื“ ืขื‘ื•ื“ื•ืช ืงืจื™ืื™ื™ื˜ื™ื‘ ืฉื™ื”ื™ื• ื–ืžื™ื ื•ืช ืœื ื• ื‘ืœื™ ื–ื›ื•ื™ื•ืช ื™ื•ืฆืจื™ื. ืื– ืžื” ืœื’ื‘ื™ Stack Overflow? ื•ืคื•ืกื˜ื™ื ืœื‘ืœื•ื’? ืื• ืฆื™ื•ืฆื™ื ื‘ืื™ื–ื” ืจืฉืช ื—ื‘ืจืชื™ืช? ืื• ืืคื™ืœื• ื‘ืจื›ืช ื™ื•ื ื”ื•ืœื“ืช ืœืงืจื•ื‘ ืžืฉืคื—ื”? ืขื›ืฉื™ื• ื–ื” ื ืจืื” ื‘ืจื•ืจ - ื”ืžืฉื—ืง ื”ื•ื ืœื ื›ืžื” ื” AI ื ื•ืชืŸ ืชื•ืฆืื” ื˜ื•ื‘ื”, ืืœื ื›ืžื” ื—ืฉื•ื‘ ืœื ื• ืชื•ื›ืŸ ืื•ืชื ื˜ื™ ื‘ืื•ืชื ืžืฆื‘ื™ื. ื›ืฉืื ื—ื ื• ืžื—ืคืฉื™ื ืชืฉื•ื‘ื” ืฉืœ ื‘ืŸ ืื“ื ื•ืžื’ื™ืขื™ื ืœื˜ืงืกื˜ ืฉืœ AI ื–ื” ืคื•ื’ืข ื‘ืืžื•ืŸ ืฉืœื ื• ื‘ืื•ืชื• ืžื“ื™ื•ื. ืื ืžื™ืฉื”ื• ืคืขื ืื—ืช ื™ืฉืœื— ืœื™ ื‘ืจื›ื” ืฉื›ืชื‘ AI ืื ื™ ืœื ืืงืจื ื™ื•ืชืจ ืืช ื”ื‘ืจื›ื•ืช ืฉืื•ืชื• ื—ื‘ืจ ื™ืฉืœื— ื‘ืขืชื™ื“. ืื ืื’ืœื” ืฉื‘ืœื•ื’ืจ ืคืขื ืื—ืช ืคื™ืจืกื ืคื•ืกื˜ ืฉื›ืชื‘ ืขื‘ื•ืจื• AI ืื ื™ ืœื ืื˜ืจื— ืœืงืจื•ื ืืช ื”ืคื•ืกื˜ื™ื ืฉืœ ืื•ืชื• ื‘ืœื•ื’ืจ ื‘ืขืชื™ื“. ืžืขื‘ืจ ืœืฉืืœืช ื”ื“ื™ื•ืง, ื”ื‘ื—ื™ืจื” ืฉืœ ืกื˜ืืง ืื•ื‘ืจืคืœื• ื•ืืชืจื™ื ืจื‘ื™ื ื ื•ืกืคื™ื ื”ื™ื ื‘ื—ื™ืจืช ื›ื™ื•ื•ืŸ, ืื™ื–ื” ืกื•ื’ ืืชืจ ืื ื—ื ื• ืจื•ืฆื™ื ืœื”ื™ื•ืช ื•ืื™ื–ื” ืกื•ื’ ืžืฉืชืžืฉื™ื ืื ื—ื ื• ืจื•ืฆื™ื ืฉื™ื’ื™ืขื•. ืœืื•ืจืš ื–ืžืŸ ืื ื™ ืœื ืืชืคืœื ืื ื”ืชืฉื•ื‘ื•ืช ืฉืœ Chat GPT ื™ื”ื™ื• ื˜ื•ื‘ื•ืช ื™ื•ืชืจ ืžื”ืชืฉื•ื‘ื•ืช ืฉื ืžืฆื ื‘ืกื˜ืืง ืื•ื‘ืจืคืœื•, ื›ืฉื ืฉื”ื”ืกื‘ืจื™ื ืฉืœื• ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื˜ื•ื‘ื™ื ื™ื•ืชืจ ืžืคื•ืกื˜ื™ื ื‘ื‘ืœื•ื’ื™ื ืื• ืฆื™ื•ืฆื™ื ื‘ืจืฉืชื•ืช ื—ื‘ืจืชื™ื•ืช. ืื‘ืœ ื“ื•ื•ืงื ื›ื›ืœ ืฉื”ื”ืกื‘ืจื™ื ืฉืœ ื” AI ื™ืžืฉื™ื›ื• ืœื”ืฉืชืคืจ ื–ื” ืจืง ื™ื“ื’ื™ืฉ ืืช ื”ืžืงื•ื ืฉืœ ืชื•ื›ืŸ ืžืงื•ืจื™, ื™ืฆื™ืจืชื™ ื•ืื™ืฉื™ ืฉื‘ื ื™ ืื“ื ื›ื•ืชื‘ื™ื.

ToCode
1 419
ืขืจืš ืจื™ืง ื‘ืžืžืฉืง ืื—ื“ ื”ื“ื‘ืจื™ื ืฉืชืžื™ื“ ืžื‘ืœื‘ืœื™ื ืื•ืชื™ ื”ื•ื ื”ืžืฉืžืขื•ืช ืฉืœ ืขืจื›ื™ื ืจื™ืงื™ื ื‘ืชื•ืš ืžืžืฉืงื™ื. ื›ืžื” ื“ื•ื’ืžืื•ืช ืžื”ืชืงื•ืคื” ื”ืื—ืจื•ื ื”: 1. ื‘ Rails ืืคืฉืจ ืœื”ื’ื“ื™ืจ ื‘ config.hosts ืจืฉื™ืžื” ืฉืœ ื“ื•ืžื™ื™ื ื™ื ืžื•ืจืฉื™ื. ืžืขืจืš ืจื™ืง ืื•ืžืจ ืฉื›ืœ ื”ื“ื•ืžื™ื™ื ื™ื ืžื•ืจืฉื™ื, ื•ืœื›ืŸ ืื ืื ื™ "ืจืง" ืžื•ืกื™ืฃ ืขืจืš ืœืžืขืจืš ื‘ืขืฆื ืื ื™ ืžืคืขื™ืœ ื‘ื“ื™ืงืช ืื‘ื˜ื—ื” ื—ื“ืฉื”. 2. ื‘ Gremlin ื”ืคืงื•ื“ื” g.V(id) ืžื—ื–ื™ืจื” ืฆื•ืžืช ืžื”ื’ืจืฃ ืœืคื™ id. ืืคืฉืจ ืœื”ืขื‘ื™ืจ ืžืกืคืจ ืžื–ื”ื™ื ื›ื“ื™ ืœืงื‘ืœ ืžืกืคืจ ืฆืžืชื™ื ืœืžืฉืœ g.V(2, 3, 5) ื™ื—ื–ื™ืจ ืืช ื”ืฆืžืชื™ื 2, 3 ื•-5. ื”ืขื‘ืจื” ืฉืœ ืขืจืš ืจื™ืง (ื‘ืœื™ ื›ืœื•ื ื‘ืชื•ืš ื”ืกื•ื’ืจื™ื™ื) ืžื—ื–ื™ืจื” ืืช ื›ืœ ื”ืฆืžืชื™ื ื‘ื’ืจืฃ. 3. ื”ืคืงื•ื“ื” cat ื‘ื™ื•ื ื™ืงืก ืœื•ืงื—ืช ืฉื ืงื•ื‘ืฅ ื•ืžืฆื™ื’ื” ืื•ืชื• ืขืœ ื”ืžืกืš. ืื ื ืขื‘ื™ืจ ืœื” ืžืกืคืจ ืงื‘ืฆื™ื ื”ื™ื ืชื“ืคื™ืก ืืช ื›ื•ืœื, ืื‘ืœ ืื ืœื ื ืขื‘ื™ืจ ืืฃ ืฉื ื”ื™ื ืชื“ืคื™ืก ืืช ื”ืชื•ื›ืŸ ืฉืœ STDIN ืฉืœื”, ื›ืœื•ืžืจ ืชื›ื ืก ืœืžืฆื‘ ืฉืœ ืงืœื™ื˜ืช ืฉื•ืจื•ืช ื•ืชื—ื–ื•ืจ ืขืœ ื›ืœ ืฉื•ืจื” ืฉืื ื—ื ื• ื›ื•ืชื‘ื™ื ืขื“ ืฉื ืœื—ืฅ Ctrl+D ืœืกื™ื™ื ืืช ื”ืงืœื˜. ื™ืฆื™ืจืช ื”ืชื ื”ื’ื•ืช ืฉื•ื ื” ืœืคื•ื ืงืฆื™ื” ืขื‘ื•ืจ ืขืจืš ืจื™ืง ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื˜ืจื™ืง ื—ืžื•ื“ ืœื™ื•ื“ืขื™ ื“ื‘ืจ ื•ื’ื ืœืงืฆืจ ืงืฆืช ืืช ื”ืงื•ื“ ื•ืœื›ืŸ ื”ืจื‘ื” ืคืขืžื™ื ื–ื” ืงื™ืฆื•ืจ ืฉืžืคืชื” ืœื”ื›ื ื™ืก. ื‘ืคื•ืขืœ ื”ืงื™ืฆื•ืจื™ื ื”ืืœื” ื”ืจื‘ื” ืคืขืžื™ื ืžื‘ืœื‘ืœื™ื ืžืฉืชืžืฉื™ื ื—ื“ืฉื™ื ื•ืจืง ื”ื•ืคื›ื™ื ืืช ื”ืžืžืฉืง ืฉืœื›ื ืœืคื—ื•ืช ื™ื“ื™ื“ื•ืชื™.

ToCode
1 419
ื”ื•ื ื• ืžืฉืชืœื‘ ืขื ืžื ื’ื ื•ืŸ ื”ื‘ื“ื™ืงื•ืช ื”ืื•ื˜ื•ืžื˜ื™ื•ืช ืฉืœ ื“ื™ื ื• ื‘ืฆื•ืจื” ืžื•ื‘ื ื™ืช. ื ื™ืฆื•ืจ ืชื™ืงื™ื™ื” ื‘ืฉื tests ื•ื‘ืชื•ื›ื” ืงื•ื‘ืฅ ื‘ืฉื tests/demo1_test.ts ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
import { expect } from "jsr:@std/expect";
import demo1 from '../routes/demo1.ts';

// basic test
Deno.test("simple test", async () => {
  const res = await demo1.request('/text')
  expect(res.status).toBe(200)
  expect(await res.text()).toBe('Hello Hono!')
});
ืืคืฉืจ ืœื”ืคืขื™ืœ ืืช ื”ื‘ื“ื™ืงื” ืขื:
$ deno test
ืื• ื‘ืœื—ื™ืฆื” ืขืœ ืื™ื™ืงื•ืŸ ื”ื”ืจืฆื” ื”ืžืฉื•ืœืฉ ืœื™ื“ ืงื•ื“ ื”ื‘ื“ื™ืงื” ืฉื™ื•ืคื™ืข ืื•ื˜ื•ืžื˜ื™ืช ื‘ VS Code. ื”ืขืœืื” ืœืจืฉืช ื•ื›ืžื•ื‘ืŸ ื‘ื’ืœืœ ืฉื–ื” ื“ื™ื ื• ื™ืฉ ืœื ื• ื”ืขืœืื” ืื•ื˜ื•ืžื˜ื™ืช ืœืจืฉืช ื‘ื—ื™ื ื ื‘ denodeploy. ืฆืจื™ืš ืจืง ืœื›ืชื•ื‘:
deployctl deploy
ืžืฉื•ืจืช ื”ืคืงื•ื“ื” ื•ืœืขืงื•ื‘ ืื—ืจ ื”ื”ื•ืจืื•ืช. ื”ืคืจื•ื™ืงื˜ ืฉืœื™ ื–ืžื™ืŸ ื›ื‘ืจ ื‘ืงื™ืฉื•ืจ: https://ynonp-hono-demo.deno.dev/demo1/api/hello ื•ืืชื ืžื•ื–ืžื ื™ื ืœืขื‘ื•ืจ ืขืœ ื”ืงื•ื“ ื”ืžืœื ื‘ื’ื™ื˜ื”ืื‘ ื‘ืงื™ืฉื•ืจ: https://github.com/ynonp/hono-demo ืกืš ื”ื›ืœ ื”ืขื‘ื•ื“ื” ืขื ื”ื•ื ื• ื”ื™ืชื” ื›ืœ ืžื” ืฉ Express ื”ื™ื” ืคืขื - ื›ื™ืฃ, ืขื•ื‘ื“ ื‘ืœื™ ื›ืื‘ ืจืืฉ ื•ืขื•ืฉื” ื›ืœ ืžื” ืฉืฆืจื™ืš.

ToCode
1 419
ื”ื•ื ื• ื”ื•ื ื›ืœ ืžื” ืฉืจืฆื™ืชื™ ืž express ื”ื•ื ื• (hono) ื”ื•ื ืกืคืจื™ื™ื” ืœืคื™ืชื•ื— ื•ื•ื‘ ืฉืงืฆืช ืžื–ื›ื™ืจื” ืืช ืืงืกืคืจืก ืื‘ืœ ืขืœ ืกื˜ืจื•ืื™ื“ื™ื - ื™ืฉ ืœื• ืชืžื™ื›ื” ืžืœืื” ื‘ื›ืœ ืกื‘ื™ื‘ืช ื”ืจืฆืช JavaScript, ืชืžื™ื›ื” ืžื•ื‘ื ื™ืช ื‘ื‘ื“ื™ืงื•ืช, ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื™ืฉืจ ืžื”ืงื•ืคืกื”, ื”ื•ื ื™ื•ืชืจ ืžื”ื™ืจ ื•ื’ื ืžื’ื™ืข ืขื ืกืคืจื™ื™ืช ืฆื“-ืœืงื•ื— ืฉืžื–ื›ื™ืจื” ืืช ืจื™ืืงื˜ ืื‘ืœ ื”ืจื‘ื” ื™ื•ืชืจ ืงื˜ื ื”. ื”ื ื” ืฉืœื•ืฉ ื“ื•ื’ืžืื•ืช ืžื”ื™ืจื•ืช ื›ื“ื™ ืœื”ืชืจืฉื ืžืžื ื•. ืคื™ืชื•ื— ืคืจื•ื™ืงื˜ ื—ื“ืฉ ื›ืœ ืžื” ืฉืฆืจื™ืš ื‘ืฉื‘ื™ืœ ืœืคืชื•ื— ืคืจื•ื™ืงื˜ hono ื—ื“ืฉ ื–ื” ืืช ื“ื™ื ื• ืžื•ืชืงืŸ ื•ืœื”ืจื™ืฅ ืืช ื”ืคืงื•ื“ื”:
deno run -A npm:create-hono@latest my-app
ืื ื™ ื‘ื•ื—ืจ ืืช ื“ื™ื ื• ื‘ืชื•ืจ ืกื‘ื™ื‘ืช ื”ืจื™ืฆื” ื•ื–ื” ื”ื›ืœ. ืขื›ืฉื™ื• ืืคืฉืจ ืœื”ืคืขื™ืœ VS Code ื‘ืชื™ืงื™ื™ื” ื•ืœื”ืชื—ื™ืœ ืœืขื‘ื•ื“. ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉืื ื™ ืจื•ืฆื” ืœืฉื ื•ืช ื‘ื”ื’ื“ืจื•ืช ื”ืคืจื•ื™ืงื˜ ื™ื”ื™ื” ื‘ืงื•ื‘ืฅ deno.json ื•ื–ื” ืœื”ื•ืกื™ืฃ ืœืชื‘ื ื™ืช ืžืฉื™ืžื” ืฉืœ ืคื™ืชื•ื— ืฉืชืขื‘ื•ื“ ื‘ืžืฆื‘ watch. ืื ื™ ืžืขื“ื›ืŸ ืืช ื”ืงื•ื‘ืฅ ื•ืื—ืจื™ ื”ืฉื™ื ื•ื™ ื”ื•ื ื ืจืื” ื›ืš:
{
  "imports": {
    "hono": "jsr:@hono/hono@^4.5.10"
  },
  "tasks": {
    "start": "deno run --allow-net main.ts",
    "dev": "deno run --allow-net --watch main.ts"
  },
  "compilerOptions": {
    "jsx": "precompile",
    "jsxImportSource": "hono/jsx"
  },
  "deploy": {
    "project": "b737e735-3715-4077-a44b-782fc7424cb5",
    "exclude": [
      "**/node_modules"
    ],
    "include": [],
    "entrypoint": "main.ts"
  }
}
ื”ืฉื•ืจื” ื”ื™ื—ื™ื“ื” ืฉื”ื•ืกืคืชื™ ื”ื™ื ื”ืขืจืš dev ื‘ืชื•ืš ื”ืื•ื‘ื™ืงื˜ tasks. ืžืฉื•ืจืช ื”ืคืงื•ื“ื” ืื ื™ ืžืคืขื™ืœ:
deno task dev
ื•ื™ืฉ ืœื™ ืฉืจืช ืฉืžืงืฉื™ื‘ ืขืœ ืคื•ืจื˜ 8000 ื•ืื ื™ ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ืœืขื‘ื•ื“, ื”ืงื•ื“ ื›ืชื•ื‘ ื‘ื˜ื™ื™ืคืกืงืจื™ืคื˜ ื•ื›ืœ ืฉื™ื ื•ื™ ืงื•ื“ ืื•ื˜ื•ืžื˜ื™ืช ืžืจืขื ืŸ ืืช ื”ืฉืจืช. ื“ื•ื’ืžื” 1 - ื”ื—ื–ืจืช ืžื™ื“ืข ืื ื™ ื™ื•ืฆืจ ืชื™ืงื™ื” ื—ื“ืฉื” ื‘ืฉื routes ื•ื‘ืชื•ื›ื” ืงื•ื‘ืฅ ื‘ืฉื demo1.ts ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
import { Hono } from "hono";

const router = new Hono();
let counter = 0;

router.get('/text', (c) => {
  return c.text('Hello Hono!')
})

router.get('/api/hello', (c) => {
  return c.json({
    ok: true,
    message: 'Hello Hono!',
  })
})

router.get('/api/counter', (c) => {
  return c.json({
    value: counter++,
  })
})

export default router;
ื”ืงื•ื‘ืฅ ืžื’ื“ื™ืจ ืฉืœื•ืฉื” ื ืชื™ื‘ื™ื, ืื—ื“ ืžื—ื–ื™ืจ ื˜ืงืกื˜, ื”ืฉื ื™ ื•ื”ืฉืœื™ืฉื™ ืžื—ื–ื™ืจื™ื ืื•ื‘ื™ืงื˜ื™ JSON. ื‘ืฉื‘ื™ืœ ืœื’ืฉืช ืœื ืชื™ื‘ื™ื ืื ื™ ืฆืจื™ืš ืœื—ื‘ืจ ืื•ืชื ืœืฉืจืช ื•ืœื›ืŸ ืื ื™ ื”ื•ืœืš ืœืงื•ื‘ืฅ main.ts ื•ืฉื ืžืขื“ื›ืŸ ืืช ื”ืงื•ื‘ืฅ ืœืชื•ื›ืŸ ื”ื‘ื:
import { Hono } from 'hono'
import demo1 from './routes/demo1.ts';

const app = new Hono()
app.route('demo1', demo1);

Deno.serve(app.fetch)
ืขื›ืฉื™ื• ื‘ื“ืคื“ืคืŸ ืื ื™ ื’ื•ืœืฉ ืœ localhost:8000/demo1/text ื›ื“ื™ ืœืจืื•ืช ืืช ื”ื˜ืงืกื˜, ืœ localhost:8000/demo1/api/hello ื›ื“ื™ ืœืจืื•ืช ืืช ื”ืื•ื‘ื™ืงื˜ ื”ืจืืฉื•ืŸ ื•ืœ localhost:8000/demo1/api/counter ื›ื“ื™ ืœืจืื•ืช ืืช ื”ืื•ื‘ื™ืงื˜ ื”ืฉื ื™. ื“ื•ื’ืžื” 2 - ื’ื™ืฉื” ืœืคืจืžื˜ืจื™ื ืฉืœ ื”ื‘ืงืฉื” ื‘ื•ืื• ื ืคืชื— ืงื•ื‘ืฅ ื ื•ืกืฃ ื‘ืฉื routes/demo2.ts ื•ื”ืคืขื ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
import { Hono } from "hono";

const router = new Hono();

router.get('hello', (c) => {
  const name = c.req.query('name') ?? 'Guest';
  return c.text(\Hello! ${name}\);
});

router.post('item', async (c) => {
  const props = await c.req.json();
  console.log(props);
  return c.json(props);
})

export default router;
ื”ืงื•ื‘ืฅ ืžื’ื“ื™ืจ ืฉื ื™ ื ืชื™ื‘ื™ื - ื ืชื™ื‘ ืื—ื“ ืœื•ืงื— ืืช ื”ืคืจืžื˜ืจ name ืžื” Query String ื•ืžื—ื–ื™ืจ ื˜ืงืกื˜ ืฉื›ื•ืœืœ ืืช ื”ืขืจืš ืฉืœ ื”ืคืจืžื˜ืจ ืื• ืฉื ื‘ืจื™ืจืช ืžื—ื“ืœ. ื”ื ืชื™ื‘ ื”ืฉื ื™ ืœื•ืงื— ืืช ื’ื•ืฃ ื”ื‘ืงืฉื” ื‘ืชื•ืจ ืื•ื‘ื™ืงื˜ JSON ื•ืžื—ื–ื™ืจ ืื•ืชื•. ื‘ืฉื‘ื™ืœ ืœื—ื‘ืจ ืื•ืชื ืœืืคืœื™ืงืฆื™ื” ืฆืจื™ืš ืจืง ืœื”ื•ืกื™ืฃ ืืช ื”ืฉื•ืจื”:
app.route('demo2', demo2);
ืœืงื•ื‘ืฅ main.ts, ื•ื›ืŸ ืืคื™ืœื• ืœื ืฆืจื™ืš ืœืกื’ื•ืจ ื•ืœืคืชื•ื— ืืช ื”ืชื•ื›ื ื™ืช ื”ื›ืœ ืคืฉื•ื˜ ืžืชืจืขื ืŸ ื•ืžืจืื” ืืช ื”ื ืชื™ื‘ื™ื ื”ืžืขื•ื“ื›ื ื™ื. ื“ื•ื’ืžื” 3 - ืฉืœื™ื—ืช HTML ื”ืงื•ื‘ืฅ ื”ืฉืœื™ืฉื™ ืฉืœื ื• ื ืงืจื routes/demo3.tsx, ื•ื›ืŸ ื”ืกื™ื•ืžืช ื”ื™ื tsx ื•ืœื ts ื”ืคืขื. ื–ื” ื”ืชื•ื›ืŸ ืฉืœื•:
import { Hono } from "hono";

const router = new Hono();

const View = ({name = "Guest"}) => {
  return (
    <html>
      <body>
        <h1>Hello! {name}</h1>
      </body>
    </html>
  )
}

router.get('/', (c) => {
  return c.html(<View name="ynon" />)
})

export default router;
ืืชื ืœื ื˜ื•ืขื™ื - ื–ื” ื ืจืื” ื›ืžื• JSX ื•ื–ื” ืื›ืŸ ื–ื”. ืœ Hono ื™ืฉ ื“ืจืš ืžื•ื‘ื ื™ืช ื•ืคืฉื•ื˜ื” ืœื›ืชื•ื‘ HTML ื‘ืืžืฆืขื•ืช jsx. ื™ืฉ ืฉื ืขื•ื“ ื›ืœ ืžื™ื ื™ ืงื™ืฆื•ืจื™ื ื’ื ืœ CSS ื•ืืคื™ืœื• ืกืคืจื™ื™ืช JavaScriptืฉื”ื•ืœื›ืช ืขื ื–ื” ื•ืžืืคืฉืจืช ืœื”ื•ืกื™ืฃ ืชืžื™ื›ื” ื‘ Hooks ื›ืžื• useEffect, ืื‘ืœ ื–ื” ื›ื‘ืจ ืกื™ืคื•ืจ ืœืคื•ืกื˜ ืื—ืจ. ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช

ToCode
1 419
ืื™ืŸ ืื• ื™ืฉ ืžืงื•ื ื‘ื“ื™ืกืง? ื”ืคืœื˜ ืฉืœ ืฉืชื™ ื”ืคืงื•ื“ื•ืช ื”ืืœื” ืขืœ ื”ืฉืจืช ื”ืคืชื™ืข ืื•ืชื™ -
ynon@schooler-prod-2:~$ touch a
touch: cannot touch 'a': No space left on device

ynon@schooler-prod-2:~$ df -h
Filesystem                                               Size  Used Avail Use% Mounted on
udev                                                     7.9G     0  7.9G   0% /dev
tmpfs                                                    1.6G  8.5M  1.6G   1% /run
/dev/sda                                                 315G  103G  197G  35% /
tmpfs
ืื™ืš ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉ touch ืœื ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืงื•ื‘ืฅ ื—ื“ืฉ ื•ืžืชืœื•ื ืŸ ืฉืื™ืŸ ืžืกืคื™ืง ืžืงื•ื ืขืœ ื”ื“ื™ืกืง, ื›ืฉ df ืžืจืื” ืฉื™ืฉ ื“ื•ื•ืงื ื”ืžื•ืŸ ืžืงื•ื? ื”ืื df ืžืฉืงืจ? ื”ืื ื™ืฉ corruption ื‘ืžืขืจื›ืช ื”ืงื‘ืฆื™ื? ืžื” ืงื•ืจื” ืคื”? ื™ื™ืชื›ืŸ. ืื‘ืœ ืœืคื ื™ ืฉืจืฆื™ื ืœื”ืคืขื™ืœ fsck ืฉื•ื•ื” ืœื ืกื•ืช ื’ื ืืช df -i. ืžืขืจื›ื•ืช ืงื‘ืฆื™ื ื‘ืœื™ื ื•ืงืก ืฆืจื™ื›ื•ืช ืœืฉืžื•ืจ ื‘ื ื•ืกืฃ ืœืงื‘ืฆื™ื ืขืฆืžื ื’ื ืื™ื ื“ืงืก ืฉืžืงืฉืจ ื‘ื™ืŸ ืฉื ื”ืงื•ื‘ืฅ ืœืชื•ื›ืŸ ืฉืœื• ืขืœ ื”ื“ื™ืกืง. ื”ืื™ื ื“ืงืก ื”ื–ื” ื’ื ืชื•ืคืก ืžืงื•ื ื•ื”ืžื‘ื ื” ืฉืœื• ื™ื•ืฆืจ ืžื’ื‘ืœื” ืขืœ ืžืกืคืจ ื”ืงื‘ืฆื™ื ืฉืืคืฉืจ ืœืฉืžื•ืจ ื‘ืชื™ืงื™ื™ื”. ื”ืคืงื•ื“ื” df -i ืžืฆื™ื’ื” ื›ืžื” ืงื‘ืฆื™ื ืืคืฉืจ ืœืฉืžื•ืจ ืขืœ ื›ืœ ื›ื•ื ืŸ ื•ื›ืžื” ื™ืฉ ืœื›ื, ื‘ืœื™ ืงืฉืจ ืœื’ื•ื“ืœ ืฉืœื”ื. ื›ืฉื™ืฉ ืžืงื•ื ืขืœ ื”ื“ื™ืกืง ืื‘ืœ ืื™ืŸ ืžืกืคื™ืง inodes ืคื ื•ื™ื™ื, ื”ืคืงื•ื“ื” touch (ื•ื™ืฆื™ืจืช ืงื‘ืฆื™ื ื‘ืื•ืคืŸ ื›ืœืœื™) ื™ืฆื™ื’ื• ืืช ืื•ืชื” ื”ื•ื“ืขืช ืฉื’ื™ืื” ืžื‘ืœื‘ืœืช No space left on device, ืœืžืจื•ืช ืฉื”ื ื”ื™ื• ืฆืจื™ื›ื™ื ืœื”ื’ื™ื“ Not enough free inodes on device.

ToCode
1 419
ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ื”ืกืคืจื™ื” ื•ืขื•ื“ ืื™ื ืกื•ืฃ ื“ื•ื’ืžืื•ืช ืฉื•ื•ื” ืœื‘ืงืจ ื‘ืืชืจ ืฉืœื”ื ื‘ืงื™ืฉื•ืจ: https://observablehq.com/plot/

ToCode
1 419
ื”ื›ื™ืจื• ืืช Observable Plot - ื”ื’ื™ืจืกื” ื”ืงืœื” ืฉืœ D3 ืื ื™ ืื•ื”ื‘ ืืช D3 ื›ื™ ืืคืฉืจ ืœืขืฉื•ืช ืื™ืชื• ื”ื›ืœ ื•ื™ืฉ ืื™ื ืกื•ืฃ ื“ื•ื’ืžืื•ืช ื‘ืจืฉืช, ืื‘ืœ ืื™ ืืคืฉืจ ืœื”ื›ื—ื™ืฉ ืฉ D3 ืงืฆืช ืžืกื•ื‘ืš ื•ื›ื•ืœืœ ืฉืคื” ื•ืžื•ืฉื’ื™ื ืฉืœื ืœื›ื•ืœื ื™ืฉ ื›ื— ืœื”ื›ื™ืจ. ืื ืืชื ืจืง ืฆืจื™ื›ื™ื ืœื”ื•ืกื™ืฃ ืื™ื–ื” ื’ืจืฃ ืœืžืกื›ื™ ื”ื ื™ื”ื•ืœ ืฉืœื›ื ื‘ืœื™ ื™ื•ืชืจ ืžื“ื™ ืื™ื ื˜ืจืงืฆื™ื” ืกืคืจื™ื™ืช Observable Plot ื™ื›ื•ืœื” ืœืชืช ืคื™ืชืจื•ืŸ ืžื”ื™ืจ. ื”ืฉื™ืžื•ืฉ ื”ืขื™ืงืจื™ ืฉืœื” ืื’ื‘ ื”ื•ื ื‘ืชื•ืš ืžื—ื‘ืจื•ืช ื’'ื•ืคื™ื˜ืจ ื›ืฉืฆื“ ื”ืฉืจืช ื”ื•ื deno. ื“ื•ื’ืžื” 1 - ืฆื™ื•ืจ ื”ืคื•ื ืงืฆื™ื” x ื‘ืจื™ื‘ื•ืข ื‘ื“ื•ื’ืžื” ื”ืจืืฉื•ื ื” ื ืจืื” ื’ืจืฃ ืคืฉื•ื˜ ืฉืœ ื”ืคื•ื ืงืฆื™ื” x ื‘ืจื™ื‘ื•ืข. ืืช observable plot ืืคืฉืจ ืœื˜ืขื•ืŸ ื“ืจืš jsdeliver ื™ืฉื™ืจื•ืช ืœื“ืคื“ืคืŸ ืขื ื”ืคืงื•ื“ื”:
import * as Plot from "https://cdn.jsdelivr.net/npm/@observablehq/plot@0.6/+esm";
ื”ืžื˜ืจื” ืฉืœ Observable Plot ื”ื™ื ืœืงื—ืช ืžื™ื“ืข ื•ื”ื•ืจืื•ืช ืื™ืš ืœื”ืฆื™ื’ ืื•ืชื• ื•ืœื—ื‘ืจ ืื•ืชื ื™ื—ื“ ืœื’ืจืฃ, ืœื›ืŸ ืื ื—ื ื• ืžืชื—ื™ืœื™ื ืขื ื™ืฆื™ืจืช ื”ืžื™ื“ืข:
const data = Array.from({length: 100}, (_, i) => {
  let x = i - 50;
  return {x, y: x * x};
});
ืžื” ืฉื™ื•ืฆืจ ืžืขืจืš ืฉืœ ืžืื” ืชืื™ืš, ื›ืœ ืชื ืžื›ื™ืœ ืื•ื‘ื™ืงื˜ ืขื ืฉื“ื” ื‘ืฉื x ืฉืžื›ื™ืœ ืžืกืคืจ (ื‘ื™ืŸ ืžื™ื ื•ืก 50 ืœ 50) ื•ืฉื“ื” y ืฉืžื›ื™ืœ ืืช x ื‘ืจื™ื‘ื•ืข. ื”ื—ืœืง ื”ืฉื ื™ ืœื•ืงื— ืืช ื”ืžืขืจืš ื•ื”ื•ืจืื•ืช ืื™ืš ืœื”ืฆื™ื’ ืื•ืชื• ื•ื™ื•ืฆืจ ืื•ื‘ื™ืงื˜ plot:
const plot = Plot.plot({
  marks: [
    Plot.line(data, {x: "x", y: "y", stroke: "blue"})
  ],
  x: {label: "x"},
  y: {label: "f = xยฒ"},
})
ื”ืชื•ืฆืื” plot ื”ื™ื ืžืžืฉ SVG ืฉืืคืฉืจ ืœื”ื•ืกื™ืฃ ืœ DOM. ืืคืฉืจ ืœืจืื•ืช ืืช ื”ืงื•ื“ ื”ืžืœื ื•ื”ืชื•ืฆืื” ื‘ืงื•ื“ืคืŸ: https://codepen.io/ynonp/pen/abgamwv?editors=1010 ืื• ืžื•ื˜ืžืข: <iframe height="300" style="width: 100%;" scrolling="no" title="Untitled" src="https://codepen.io/ynonp/embed/abgamwv?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true"> See the Pen <a href="https://codepen.io/ynonp/pen/abgamwv"> Untitled</a> by Ynon Perek (<a href="https://codepen.io/ynonp">@ynonp</a>) on <a href="https://codepen.io">CodePen</a>. </iframe> ื“ื•ื’ืžื” 2 - ื”ื™ืกื˜ื•ื’ืจืžืช ืชื“ื™ืจื•ืช ืžื™ืœื™ื ื“ื•ื’ืžื” ืฉื ื™ื” ื•ืงืฆืช ื™ื•ืชืจ ืžื•ืจื›ื‘ืช ื”ื™ื ืฆื™ื•ืจ ื”ื™ืกื˜ื•ื’ืจืžืช ืชื“ื™ืจื•ืช ื”ื•ืคืขื” ืฉืœ ืžื™ืœื™ื ื‘ื˜ืงืกื˜. ืื ื™ ืžืชื—ื™ืœ ืขื ื”ืžื™ื“ืข:
const wordFrequency = [
  {word: "quick", count: 4},
  {word: "brown", count: 2},
  {word: "fox", count: 2},
  {word: "jumps", count: 1},
  {word: "over", count: 1},
  {word: "the", count: 5},
  {word: "lazy", count: 3},
  {word: "dog", count: 2},
  {word: "is", count: 3},
  {word: "very", count: 2},
  {word: "and", count: 1},
  {word: "agile", count: 1},
  {word: "not", count: 1},
  {word: "as", count: 1},
  {word: "but", count: 1},
  {word: "certainly", count: 1}
];
ื•ื›ืŸ ืื™ืŸ ื‘ืขื™ื” ืœืงื—ืช ืžื—ืจื•ื–ืช ื•ืœื™ื™ืฆืจ ืืช ื”ืžื™ื“ืข ื”ื–ื” ื“ื™ื ืžื™ืช, ืคืฉื•ื˜ ืจืฆื™ืชื™ ืœื”ืจืื•ืช ื›ืืŸ ืืช ื”ืžื™ื“ืข ื›ืžื• ืฉื”ื•ื ืขื•ื‘ืจ ืœ Observable Plot. ื‘ื—ืœืง ื”ืฉื ื™ ืื ื™ ื™ื•ืฆืจ ืืช ื” SVG:
const plot = Plot.plot({
  marks: [
    Plot.barY(wordFrequency, {x: "word", y: "count", sort: {x: "y", reverse: true}})
  ],
  x: {
    label: "Word",
    tickRotate: -45
  },
  y: {
    label: "Frequency",
    tickFormat: d => d, // Ensure only integer ticks are shown
    ticks: Math.max(...wordFrequency.map(d => d.count)) + 1 // Set the number of ticks to match the highest count
  },
  height: 400,
  width: 600
});
ื”ืคืขื ื™ืฉ ืงืฆืช ื™ื•ืชืจ ืงื•ื“ ื›ื™ ืจืฆื™ืชื™ ืœืฉืœื•ื˜ ื‘ืื•ืคืŸ ืฆื™ื•ืจ ื”ืฉื ืชื•ืช ืขืœ ืฆื™ืจ ื” y ื•ืœื•ื•ื“ื ืฉืœื ื™ื•ืคื™ืขื• ื—ืฆืื™ ืžืกืคืจื™ื. ืขื“ื™ื™ืŸ ืžื” ืฉื—ืฉื•ื‘ ื–ื” ื”ืžื™ืคื•ื™ ื‘ื™ืŸ ืื•ื‘ื™ืงื˜ ื”ืžื™ื“ืข ืœ plot, ืžื™ืคื•ื™ ืฉื‘ื ืœื™ื“ื™ ื‘ื™ื˜ื•ื™ ื‘ืฉื•ืจื”:
Plot.barY(wordFrequency, {x: "word", y: "count", sort: {x: "y", reverse: true}})
ื”ืชื•ืฆืื” ืฉื•ื‘ ื‘ืงื•ื“ืคืŸ: https://codepen.io/ynonp/pen/gONdwZK?editors=1010 ืื• ืžื•ื˜ืžืขืช: <iframe height="300" style="width: 100%;" scrolling="no" title="Untitled" src="https://codepen.io/ynonp/embed/gONdwZK?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true"> See the Pen <a href="https://codepen.io/ynonp/pen/gONdwZK"> Untitled</a> by Ynon Perek (<a href="https://codepen.io/ynonp">@ynonp</a>) on <a href="https://codepen.io">CodePen</a>. </iframe>