ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 420
Obunachilar
Ma'lumot yo'q24 soatlar
+27 kunlar
-230 kunlar
Postlar arxiv
1 420
# ืขืื 3 ืคืืฆ'ืจืื ืฉื ES13 ืืื ืืชื ืืฉืืจื ืืืืืื ืืืฉืชืืฉ
ื'ืืืืืกืงืจืืคื ืื ืืืื ืืชืงืืืช ืืืืจืืช ืฉืืืจ ืืจืื ื ืืจืืืช ืืืจืื ืฉืืืชื ES6, ืขืืืื ืืฉ ืฉืืคืืจืื ืงืื ืื ืฉืืืคืืื ืืช ืืืืื ืืงืืื ืืืชืจ ืื ืืื. ืื ื ืืื ืืฉืืืฉืืื ืขื ES13 ืืื ืงืืคืฅ ืืจืืฉ ืกืืื ืืกืืืืืช ืืืืืืืช ืืืืืืจ ืคืื ืงืฆืืืช ืคืจืืืืช, ืืื ืืืืช ืฉืืื ืื ื ืื ืจืืื ืกืืื ืืืฉืชืืฉ. ืื ื 3 ืคืืฆ'ืจืื ืืืจืื ืฉืืืืงื ืื ืืืืืื ืืืืื ืก ืืงืื ืฉืื-
## ืืืืืจ ืืืืจืื ืืืขืจื (ืกืืฃ ืกืืฃ)
ืืคืืฆ'ืจ ืฉืืื ืืืืืชื ืื ื JavaScript ืืืืข. ืืื, ืื ืืืืืง ืืฆืืจื ืฉืจืฆืืชื ืืื ืืกืคืืง ืืืื. ืื ืืฉ ืืื ืืื ืืขืจื ืชืืืื ืืืฉืชืืฉ ืืคืื ืงืฆืื
at ืืื ืืืฉืช ืืืืืจืื ืขื ืชืืืื ืืืกืคืจืื ืฉืืืืืื ืืื ืืืฉืช ืืืกืืฃ. ืื ืืงืื:
const x = [10, 20, 30, 40, 50];
// prints: 50
console.log(x.at(-1));
## ืืืคืืฉ ืืืกืืฃ
ืืื ืืืจ ืืืืจืื ืขื ืกืืฃ, ืืคืื ืงืฆืื findLast ืืื ืืื find ืืื ืืืกืืฃ. ืื ื ืจืื ืืื:
const x = [10, 20, 30, 40, 50];
// prints 50
x.findLast(i => i > 30)
// prints 40
x.find(i => i > 30)
## ืืคืฉืจ ืืืชืื await ืื ืืืืฅ ืืคืื ืงืฆืื
ืืืคืื ืืง ืืื ืืืื ืฉื ES13 (ืืืืืขื ืื ืืชืืจ ES2022) ืืื ืืืืืืช ืืืชืื await ืืืืฅ ืืื ืคืื ืงืฆืื. ืืช ืื ืืืื ืจืืืชื ื dev tools ืืืกืชืืจ ืฉืืคืฉืจ ืืืชืื ืืืชื ืืื ืืืืื.
ืื ืืืืจ ืฉืื ืืฉ ืืื ืงืืืฅ ืฉืชืืื ืืืืืข ืืืืืฅ ืืื ืืืืืขื ืืชื ืืืจ ืื ืฆืจืืืื ืืืืืืจ ืคืื ืงืฆืืืช main ืืกืื ืืจืื ืืช, ืืืคืฉืจ ืคืฉืื ืืืชืื:
const response = await fetch('/theme');
const theme = await response.json();
document.body.backgroundColor = theme.background;1 420
# ืืื ืื ืืฆืืขื "ืืืื ื ืืืืฃ ืืช ื Backend"
ืืืจื ืืื ืืฉืืืฉืืื ืขื ืงืื "ืงืจืื" ืื ืื ื ืืืฉืืื ืขื ืงืื ืฉืื ืฉืงืืจื ืืืชื ืืืื ืืืืื ืื ืืื ืขืืฉื ืืืกืืช ืืงืืืช, ืืขื ืงืื ืื ืงืจืื ืืชืืจ ืงืื ืฉืฆืจืื ืืืื ืืืชืืืฅ ืืื ืืืืื ืื ืงืืจื ืื. ืืฉืืกืชืืืื ืขื ืคืื ืงืฆืื ืืืืืช ืงื ืืจืืืช ืืืื ืืืจืื ืืืคืืื ืงืื ืืื ืงืจืื ืืืฉื ืืฉืืคืื ืงืฆืื ืืจืืื ืืื, ืืืืืช ืืืื ืชื ืืื ืืฉืืืช ืืืฉืชื ืื ืื ืคืฉืื ืจืฆืฃ ืืงืจืื ืฉื ืืืชืืืช. ืืืขืจืืช ืืืืื ืืืจ ืืจืื ืืืชืจ ืงืฉื ืืืฉืื ืขื ืงืื ืงืจืื ืืจื ืืืืืืช "ืืงืจืื" ืืืชื, ืคืฉืื ืื ืืฉ ืืืชืจ ืืื ืืื ื. ืืืื ืฉืืฉ ืืืชืจ ืงืื ืืื ืืืื ืืืชืจ ืงืฉื ืืืืื ืื ืื ืืืง ืขืืฉื ืืืื ืืื ืชืืื.
ืืจื ื ืืกืคืช ืืืืจ ืขื ืงืื ืงืจืื ืฉืืืื ืืืชืจ ืืชืืืื ืืืขืจืืืช ืืืืืืช ืชืืื ืืืืืง ืืื ืืกืืื ืืขื ืืช ืขื ืฉืืื ืกืคืฆืืคืืช ืืืื ืืงืื, ืืื ืืืืื ืืขืฆืื ื ืจืฉืืื ืฉื ืฉืืืืช ืฉืืฉืื ืื ื ืฉืืืื ืงื ืืขื ืืช ืขืืืื. ืื ืืืื ื"ืืื ืืงืื ืืืื", ืืฉืืฉ ืื ื ืฉืืื ืกืคืฆืืคืืช ืืจืืฉ ืืงืจืืืจืืื ืืืคื ืืืืชืจ ืงืฉืื.
ืืฉืืื ืืืืืื ื ืืืืื Service ืฉืืชืื ืืจืืืงื ืืืชืืืจ ืืฉืจืช Backend, ืืื ืื ืืชืืืจ ืืื ืืื ื APIs ืืจืฉืช. ืืงืื ืืฉ ืืื ืืืืช ืงืืืคืื ื ืืืช, ืืืงื ืืืงืืืช ืืืืข ืื Backend ืืจื SWR, ืืืงื ืืขืืื ืืช ืืืืข ืืืืฆืขืืช fetch ืืงืืืคืื ื ืืืช ืืืจืืช ืืฉืชืืฉืืช ืืืืฉืงืื ืืืขืืืืื ืฉื APIs ืืืฆืื ืืื ืืื ืืชืงืฉืจ ืขื ืืืชื APIs. ืืขืืฉืื ื ืฉืื "ืืืคื ืื ื ืืืฆื ืจืฉืืื ืฉื ืื ืืงืฉืืช ืืจืฉืช ืฉื Service ืฉืื ืืกืืื ืืืืฆืื?"
ืืืงืจื ืืืื ืื ืืงืื ืงืจืื ืืืืก ืืฉืืื ืืืืช ืืืื ืื ื ืืืขืจืืช ืงืืืฅ ืืื ืฉืืืคื ืืื ืืืงืฉืืช ืฉืืืฆืืืช ืืืืืฉืื ืืืืืื "ื ืงืืืช ืืฆืืื" ืืื Backend ืื API. ืืงืืืคืื ื ืืืช ืชืืื ืืขืืจื ืืจื ื ืงืืืช ืืฆืืื ืื ืืื ืืฉืืื ืืขื ืืช ืขื ืืฉืืื ืฆืจืื ืจืง ืืคืชืื ืืช ืืงืืืฅ.
ืืืงืจื ืืคืืืช ืืื ืื ืงืืืคืื ื ืื ืชืงืจื ืืืจื ืฉืื ื API ืื ื Backend ืฉืืื ืขืืืืช ืืืื, ืื ืฆืืจื ืืขืืืจ ืขื ืืงืืืคืื ื ืืืช ืืืช ืืืช ืืื ืืืกืืฃ ืืช ืื ืืงืจืืืืช.
ืงืฉื ืืืื ืืืชืื ืงืื ืฉืืืื ืงืจืื ืืืืก ืืื ืฉืืื, ืืื ืืืืจื ืืื ืืื ืฉื ืืกืืฃ ืืืชืจ ืฉืืืืช ืฉืืขื ืืื ืืช ืืืชื ื ื ืืื ืืืืื ืืช ืืงืื ืฉืื ื ืืื ืฉืืืื ืงืจืื ืืืืก ืืืืชื ืฉืืืืช, ืืื ืืฉืคืจ ืืช ืืืืืช ืืืขืจืืช ืืืืืจืืช ืืคืืชืื.
1 420
<input type="submit" name="commit" value="send" data-disable-with="send" /> </form> </template></turbo-stream>ืงืื JavaScript ืืชืื ืืกืคืจืื Turbo ืืคืขื ื ืืช ืืชืฉืืื ืืืขืืื ืืืืืืืืช ืืช ืืขืืื. ืืื ืืขืื ื ืืืืฉ ืืืื ืืคื ืื ืืืงืืืืช ืืืจืื, ืืืฉ ืืื ืฉืืื ืงืืจื ืขื ืื ืคืจืืืืืืจืง ืฆื ืืงืื. ## ืฉืืชืืฃ ืืืืืขืืช ืขื ืืืืฉืื ืืืจืื ืืืื ืืืช ืืืืืื ืืฉืื ืืื ืืืืืง ืืขืืื ืืื ืืฉืืชืืฃ ืืืื ืืืช ืืืืฆืขืืช Web Sockets: ืืืงืื ืืฉืืื ืืช ืืืจืืช ืืขืืืื "ืืชืืืื" ืืืืืฉ ืฉืืฆืจ ืืืืขื ืืืฉื, ืื ื ืืืื ืืฉืืื ืืช ืืืชื ืืืจืืช ืขืืืื ืืจื Socket, ืคืฉืื ืื ืืฉืื ืืฉืจืช ืืฉืชื ื. ืืฆืืจื ืืืืช ืื ืืืืืฉืื ืืงืืื ืืช ืืืืืขื ืืืืฉื ืืื ืฉืืฆืืจืื ืืจืขื ื ืืช ืืขืืื. ืืงืื ืืฉืื ืืฉืืืฉื ื ืืฆื ืืื: ืฉืื 3 ืืืขืืงืจืื ืืื ืืืจืื ืืกื ืืื ืืฉื ื ืฉืื ืืืื. ืืืืื
app/models/message.rb ืืืกืคืชื ืืช ืืฉืืจื:
class Message < ApplicationRecord
after_create_commit { broadcast_append_to('messages') }
end
ืฉืืคืขืืื ืคืงืืืช ืฉืืืืจ ืืืจื ืื ืืฆืืจืช ืืืืขื.
ื Controller ืืืงืชื ืืช ืืืืจืื ืืืฆืืจ ืืืืขื ืืืฉื, ืื ืืื ืชืืืข ืื Broadcast:
def create
@message = Message.new(message_params)
respond_to do |format|
if @message.save
format.html { redirect_to messages_path }
format.turbo_stream do
render turbo_stream: [
turbo_stream.replace('new_message', partial: 'new_message_form')
]
end
else
format.html { render :index, status: :unprocessable_entity }
end
end
end
ืืืืืคืืืื ืืืกืคืชื ืืช ืืคืงืืื:
<%= turbo_stream_from "messages" %>
ืืงืืืฅ app/views/messages/index.html.erb. ืฉืืื ืื ืฉืืืืื messages ืฉื ืืื ืืคืจืืืจ ืฉืืขืืจืชื ื broadcast_append_to ืฉืืื ืืืืื.
ืืชืืฆืื - ืื ืืฉืชืืฉ ืืืื ืืฉืืื ืืืืขื ืืฉืจืช, ืืืืืขื ืื ืชืืื ืก ืืืกืืก ืื ืชืื ืื ืืื ืชืืฉืื ื Web Socket ืืื ืืืืืฉืื ืืืืจืื ืืืชืจ. ืืื ืื ืืื ืืืชืื ืฉืืจืช JavaScript ืืืช.
## ืื ืืืื
ืืืืืื ืฉืืืฆืื ืืื ืืืื ืคืฉืื ืืช - ืืขืืื ืืืืืชื ืืืื ื ืฆืจืืืื ืื ืื ืืฉืชืืฉืื, ืงืืืฆืืช ืืืฉืืื ืขืืืื ืื ืจืง ืืื ืฉืื ืฉืืขืืืื ืืืืช ืจืืืื ืื ืขืืืจื. ืชืฉืืื ืืฉืืืข ืฉืืจืืืืก ืืฉ ืืช ืื ืืืืื ืืขืฉืืช ืืช ืื, ืืืื ื ืืืื ืืจืฉืืืช ืืจืืฉืื ืืขืืืื ืื ืืืื ืืชืื ืืืืื ืฉื ืจืืืืก.
ืืืจืื Streams, ืฉืื ืืืืง ืฉืืงืื ืืืจืืืช ืืืฉืจืช ืืืขืืื ืืช ืืขืืื ืชืืื ืืืกืคืจ ืคืขืืืืช ืืืื ืืช ืขืืืจ ืืืกืคื ืืืืืงื ืืื ืืื ื ืืงืืืืช (ืืืกืคื ืืกืืฃ, ืืืกืคื ืืืชืืื ืืืืจืื ืืืื), ืืื ืืืคืฉืจ ืืื ืืืชืื ืงืื JavaScript ืืื ืืืืฉ ืคืขืืืืช ืืืฉืืช ืืฉืืื, ืื ืฉืื ืืชืืื ืืืช ืืืืืืช ืืืชืจ ืื ืจืื ืฉืื ืชืืชืงืขื.
ืืฆื ืืฉืืืื ืืืื ืชืืื ืืคืจืืืืืืจืงืื ืืืกืื ืืื, ืืฉืืฉืืืื ืฉืืื ืืืืืืช ืืคืขืืื ืงืฉื ืืืชืจ ืืืฆืื ืืืืื ืื ืืืืฉ Use Cases ืืชืืืืืื ืืืชืจ, ืืืฉื ืื ืืจืืจ ืืื ืืืืฉ Optimistic Updates ืื ืืฆื Offline ืืฉืฆืจืื ืืช ืืฉืจืช ืืื ืฉืื ืื.
ืืฉืืจื ืืชืืชืื ื ืื ืืชื ืืืจ ืืจืืืืก ืืืืคืืืงืฆืื ืฉืืื ืื ืืืื ืืชืืืืืช ืฉืืืื ืืื ืืืืืื ืืื Turbo Streams ืืขืืืจ ืืื ืืืืฉืืจ ืืจืืืืก ืืื ืืฉืืชื ืืช ืืื ืืคืจืืืืืืจืง ืฆื-ืืงืื.1 420
# ืืืื ื ืื ื ืืื ืืืืขืืช ื Rails ืืื JavaScript
ืืืช ืืืืืืืืช ืืจืืฉืื ืืช ืฉืื ื ืืจืื ื Web Sockets ืืื ืื ืื ืฉื ืืื ืืืืขืืช ืืฉืืชืฃ ืืืื ืืืืฉืื - ืื ืคืขื ืฉืืืืฉ ืืื ืฉืืื ืืืืขื, ืืืืืขื ืืื ืืืคืืขื ืขื ืืืกื ืฉื ืื ืืืืจืื. ืืืืื ื ื ืกื ืืื ืืช ืืช ืืืชื ืืื ืืืืขืืช ืืื ืืืชืื ืฉืืจื ืฉื JavaScript, ืจืง ืืืืฆืขืืช ืืื ืื ืื ืื ืืืืื ืื ื Rails.
## ืฉืื 1 - ืืื ืืืืขืืช
ืืฉืื ืืจืืฉืื ืืืจื ืืืื ืืืืขืืช ืืฉืืชืฃ ืืื ืื ืืืช ืืื ืืืืขืืช. ืืื ืืื ืืืื ืืฉืืชืฃ ืื ืืฉ ืื ื ืฆื ืฉืจืช, ืืื ืขืืืื ืื ืืืื ืืืช. ืืงืื ืืฉืื ืืื ื ืืฆื ืืื:
ืืื ืืืืขืืช ืฉืื 1
ืื ืืชื ืืืื ืืฉืืื ืืืืขื ืืงืื ืืจืืืจ ืขื ืืงืื ืืื:
class MessagesController < ApplicationController
def index
@messages = Message.all
@message = Message.new
end
def create
@message = Message.new(message_params)
@message.save!
redirect_to messages_path
end
def message_params
params.require(:message).permit(:text)
end
end
ืืคืื ืงืฆืื ืืืืืื ืืื ืฉืืืืฆืจืช HTML ืืื index, ืฉืืืจืืืช ืขื ืืฆืืช ืื ืืืืืขืืช ืืื ืืฆืืื ืืืคืก ืืืฆืืจืช ืืืืขื ืืืฉื. ืืงืื ืฉื ืืชืื ืืช ืืืืืง ืืฉื ื ืงืืฆืื, ืืงืืืฅ ืืจืืฉืื ืืื app/views/messages/index.html.erb ืืื ืืงืื ืฉืื:
<h1>Messages#index</h1>
<%= render partial: 'message', collection: @messages %>
<%= form_for @message, url: messages_path, method: :POST do |f| %>
<%= f.label :text %>
<%= f.text_field :text %>
<%= f.submit :send %>
<% end %>
ืืืงืืืฅ ืืฉื ื ืืื ื HTML ืฉื ืื ืืืืขื ืืงืืืฅ app/views/messages/_message.html.erb:
<p><%= message.text %></p>
<hr />
ื ืฉืื ืื ืืืจ ืฉืืื ืฉืื JavaScript Framework ืื ืฉืื ืืืจ ืื ื ืืงืื ืืงืืืช ืืคืจืื ืฉืื ืื ืืืง ืืขืืื ืืชืื ืืงืืืฅ ื ืคืจื, ืืืืง ืืื - ืจืฉืืืช ืืืืืขืืช - ืืฉืชืืฉ ืืืืง ืืฉื ื - ืืฃ ืืืืืขื.
ืื ืชืคืขืืื ืืช ืืงืื ืชืืืื ืืืืืฉ ืืงืืืืช ืื ืชืื:
http://localhost:3000/messages
ืืจืืืช ืจืฉืืื ืฉื ืฉืชื ืืืืขืืช ืืืื ืืช ืืืืคืก ืฉืืืฆืจ ืืืืขืืช ืืืฉืืช. ืืืืคืก ืืืืข ืืคืื ืงืฆืื create ื controller ืฉืชืฉืืืจ ืืช ืืืืืขื ืืืืฉื ืืชืฉืื Redirect ืื ืชืื ืจืฉืืืช ืืืืืขืืช, ืฉื ืืืืืฉ ืืจืื ืืช ืื ืืืืืขืืช ืืืช ืืืืืขื ืืืืฉื ืฉืื.
## ืฉืืคืืจ ืืืฆืืขืื - ืืืืื ืขื ื Redirect
ืฉืื ืฉื ื ืืืจื ืืืฆืืจืช ืืืื ืืฉืืชืืคื ืืื ืฉืืคืืจ ืืืจืืืืงืืืจื - ืืืงืื ืืขื ืืช ืืืืืฉ ืขื ืืืืขืช Redirect, ืื ืื ื ื ืฉืื ืืืืขืช Turbo Stream ืฉืื ืืขืฆื ืืงืฉื ืืขืืืื ืืขืืื ืืคื ืืืืื ืืกืืืืื. ืืืงืจื ืฉืื ื ืืืื ืฉืชื ืืืืขืืช:
1. ืืงืฉื ืืืืกืืฃ ืืช ืืืืืขื ืืืืฉื ืืจืฉืืืช ืืืืืขืืช.
2. ืืงืฉื ืื ืงืืช ืืช ืืืงืกื ืืืืคืก.
ืืงืื ืืฉืื ืืื ื ืืฆื ืืื:
ืฉืื 2
ืืฉืืื ืืฉืืื ืืช ืืืืืขืืช ืืืืืฉ ืืชืืชื ืืช ืืงืื ืืื ืืคืื ืงืฆืื create:
def create
@message = Message.new(message_params)
respond_to do |format|
if @message.save
format.html { redirect_to messages_path }
format.turbo_stream do
render turbo_stream: [
turbo_stream.append('messages', partial: 'message', locals: { message: @message }),
turbo_stream.replace('new_message', partial: 'new_message_form')
]
end
else
format.html { render :index, status: :unprocessable_entity }
end
end
end
ืืื ืืื - ืืขืฆื ืฉืชื ืืฉืืจืืช:
turbo_stream.append('messages', partial: 'message', locals: { message: @message }),
turbo_stream.replace('new_message', partial: 'new_message_form')
ืื ืืืืจืืืช ืืขืืื ืืขืืื ืืช ื HTML ืืคื ืืคืจืืื ืืืืฉืื. ืืฉืืืคืืคื ืืงืื ืืช ืืชืฉืืื ืื POST, ืฉื ืจืืืช ืืื:
<turbo-stream action="append" target="messages"><template><p>new text</p>
<hr />
</template></turbo-stream><turbo-stream action="replace" target="new_message"><template><form class="new_message" id="new_message" action="/messages" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="Z4ROwg-7zOPU38BqhifwH3AdWu6NZ8f-Oy-xoPV_ZClJxs0FjpwmjtYeG3Pcd2QyasuRhrGRi9QEP1I27gb0DA" autocomplete="off" />
<label for="message_text">Text</label>
<input type="text" name="message[text]" id="message_text" />1 420
# ืืขืงืคืื
ืื ืงืืจื ืืฉืืฉ ืืื ืืืขืจืืช ืฉืืชื ืื ืืฆืืื ืืืฆืื? ื ืืื, ืืืชืืื ืืขืงืฃ. ืืขืงืฃ ืืื ืื ืื ืื ืฉืืืืื ืืืืจ "ืืื ืื ืืืฉื ืืื ืืืขื ื ืืืื, ืืื ืื ืืืจ ืืชื ืืื ืื ืขืืืฃ ืฉืชืคื ื ืืืื ื". ืื ืื ื ืืืืขืื ืืืขืงืคืื ืืจื ืืชืจืกืงืืืืช ืื ืืืืื - ืคืื ืงืฆืื ืืืืจื ืืงืื ืืกืคืจ ืืคืชืืื ืืืคืขืืช ืขื ืืืจืืืช ืืืื ืืชืจืกืงืช. ืืืจื ืฉืื ืืฆืืืช ืืืฆืื ืฉืื ื ืชืื ืืงืื ืฉืืืจื ืืคืื ืงืฆืื ืืงืื ืืืจืืืช ืืฆืขื ืืื ืืื ืืขืืื ืืช ืงืื ืืคืื ืงืฆืื ืืืคื ืื ืืืืจืืืืช, ืืืฉื:
function isInCanvas(x, y) {
if (typeof x === 'string') {
x = Number(x);
}
if (typeof y === 'string') {
y = Number(y);
}
// check if (x,y) is in the canvas
}
ืืื ืืฉ ืฉืชื ืืขืืืช ืขื ืืขืงืคืื:
1. ืื ืืงืฉืื ืขื ืงืจืืืช ืืงืื - ืืื ืืื ืืขืื ืืืืฉืืื (ืื ืฉืืืขืืื) ืืฉืืืฉืื ืืืืข ืืืกืชืื ืขื ืืคืื ืงืฆืื ืืื ืื ืืืื ืืื ืืื ืฆืจืืื ืืืชืืืื ืื ืขื ืืืจืืืืช.
2. ืื ืืชืจืืื ืืืืฆืจืื ืชืจืืืช ืฉื ืืขืงืคืื - ืืืืจื ืืื ืื ืืืื ืืืชืื ืชืื ืืชืืืจืื ืืจืขืืื ืืืขืงืคืื ืืืืกืืคืื ืืขืงืฃ ืืืงืื ืืืฉืงืืข ืืช ืืืื ืืืืคืืฉ ืืืื ืืืืืชื, ืื ืฉืจืง ืืืืืจ ืืช ืืืขืื ืื ืืืชื ืืื ืืืื ืืืฉืคืืข ืขื ืขืื ืืงืืืืช ืืืขืจืืช, ืืื ืื ืืื ื ืฆืืจื ืืืืกืืฃ ืืขืงืคืื.
ืืืืื ืื ืื ืกืคืจ ืืืืื ืืืจืืจ ืฉืืืขืจืืช ืืืืชืืช ืชืฆืืจืื ืืืื ืืก ืืืชืจ ืืืขืงืฃ ืืื. ืืืื ืืฉืืชื ืขืืฉืื ืืช ืื ืืืืืช ืืจืืจืื, ืืืืกืืฃ ืืขืจื ืืงืื ืฉืืกืืืจื ืื ืืฆื ืืืขืงืฃ ืืื ืืฆืืชื ืขื ืขืืฉืื ืืืจืฆืื ืืื ืืืืช ืื ืืืกืืคื ื Backlog ื Jira ืืฉืืื ืืืฉื ืืืกืืจ ืืช ืืืขืงืฃ, ืืฉืืืื ืืื ืืืืื.1 420
# ืคืืฆ'ืจ ืืฉืื ืืื ืื ืืฉืืืื
ืื ืืช ืขืืืืช ืขื React ืืื ืืืืขืช ืืื ืืืชืื Custom Hook ืฉืืื ืืขืฆืืจ ืขืืฉืื ืืืืืื ืืช ืื, ืืืืจ ื Custom Hook ืืื ืืื ืืื ืื ืื ืื ืืืกืืกืืื ืฉื ืฉืืชืืฃ ืงืื ืืื ืงืืืคืื ื ืืืช, ืืืื ืคืจืืืงื ืจืืืงื ืืืืข ืืจืืข ืฉืืืฉืื ืืืชืื ืืื.
ืืื ืื ืืืืชื React ืืช ืื ืืืืขืช ืื ืื Server Side Rendering ืื ืืื ืืืฉืชืืฉ ื
useDeferredValue, ืื ืงืจื ืืืื. ืื ืืืื ืืืื ืืืฉืื ืืจืืืื ืืช ืขืืืื ืืื ืืืืื ืืืืืชืืื ืืฉ ืืจืื ืคืจืืืงืืื ืฉืื ืฆืจืืืื ืืช ืืคืืฆ'ืจืื ืืืื, ืืืืชืจ ืืื - ืืฉ ืืจืื ืคืจืืืงืืื ืืื ืืืื ืฉืื ืกื ืืืืืืข ืืช ืืคืืฆ'ืจืื ืืืื ืืคืจืืืงื ืจืง ืืืคืื ืืืืชืจ ืงืฉื ืืชืืืืงื.
ืืืืชื ืฉืื ืื ืืชืืขืื ืฉื ืกืคืจืื ืืืื ื ืจืืืื ืืื ืื ืคืื ืงืฆืื ืืืื ืืืจืื ืฉืืืืจ ืืื ืืืื ืืืฉืชืืฉ ืื - ื"ืื ืืชื ืื ืืฉืชืืฉ ืืื ืื ืื ืืื ืืงืื ืฉืื ืฉืืืจ" ื-"ืื ืืชื ืืฉืชืืฉ ืืื ืื ืื ืืื ืืงืื ืฉืื ืฉืืืจ". ืขื ืฉืื ืืงืจื ืืืืจืืืช ืขืืื ื ืืืคืขืื ืฉืืงืื ืืขืช, ืืืืื ืืืืืจ, ืจืง ืืืื ืฉืืคืืฆ'ืจ ืงืืื ืื ืืืืจ ืฉืืื ืจืืืื ืื (ืื ืื ืคืขื ืืืื) ืืขืืื ืฉืืื.1 420
# ืืช ืืืขืืช ืืืืช ืืคืืื TypeScript ืื ืืฆืืื ืืชืคืืก
ืืืืืง ืืฉืืฉืืชื ืฉืืฆืืชื ืืช ืืืืจ ื TypeScript ืืชืงื ืื ืืช ืื ืืืืืื ืืืกืื ื ืืืืขื ืืืฉืืจ. ืืื ืืชืืื ืืคืื ืงืฆืื ืชืืืื ืฉืืืงืืช ืืืจืืืช, ืืืืืคื ืืชืืื ืืื ืกืืื ืื ืืืืืืจื ืืช ืืืงืกื ืืืืืืฃ:
function replaceByDictionary(text: string, replacements: Record<string, string>) {
let interpolatedText = text;
for (const [key, value] of Object.entries(replacements)) {
interpolatedText = interpolatedText.replace(key, value);
}
}
ืืื ืืฉืื ืื ืืืื ืืืฉืืชื ืืืฉืชืืฉ ืืคืื ืงืฆืื ืืื ืืฉืืื ืืช ืืืงืกื ืืืืืืฃ ืืฉืจืช:
const replacedText = replaceByDictionary("I love TypeScript", { "I": "Everyone" });
await fetch(`https://tocode.requestcatcher.com/test?text=${replacedText}`, { method: 'POST' });
ืจืง ืืื ืืืืฉืืจ ืขื ืื (ืืงืื) ืฉืืืจ ืืฉืืืืืชื ืฉืืืงืฉื ืฉืชืื'ืก ื ืฉืืื ืืฉืจืช ืืืชื ืขื ื URL:
POST /test?text=undefined
ืื ืงืจื ืืื? ืืื ืืืืคืกืงืจืืคื ืคืกืคืก? ืืชืฉืืื ืคืฉืืื - ืืกืงืช ืืืคืืกืื ืืืืืืืืช ืืจืื ืืืืืคืกืงืจืืคื ืืืืืืจ ืืช replacedText ืืชืืจ void, ืืืืคืจืืืจ ืืืจืฉ ืืืคืื ืืืืข ืืงืื ืืฉืชื ื void ืืชืื ืืืจืืืืช. ืืืงื ืืืืจื, ืืืืื ืื ืื ืฉืืชืืืื ืชื.
ืืคืืชืจืื? ืืื ืชืืื ืืชืื ืืช ืืื ืคืืชืจืื ืืช ืงืกื, ืืื ืื ืืฉ ืฉืชื ืืคืฉืจืืืืช ืืจืืืืืช:
ืืคืฉืจ ืืืืืื ืฉืื ืื ื ืื ืืืืืื ืืช ืืกืงืช ืืืืคืืกืื ืฉื ืืืืคืกืงืจืืคื, ืืืืืืจืื ืืช replacedText ืืชืืจ string ืืขืฆืื ื. ืื ืืืืจ ืืืชืื:
const replacedText: string = replaceByDictionary("I love TypeScript", { "I": "Everyone" });
ืืขื ืื ืืืืคืกืงืจืืคื ืืืจ ืืฆืขืง.
ืื (ืืืืขืชื ืขืืืฃ) ืืืืืื ืืืืฆืื ืืคืื ืงืฆืื ืืช ืืงืื ืฉืฉืืื ืืงืกื ืืฉืจืช, ืืื ื ืงืื:
async function postText(text: string) {
await fetch(`https://tocode.requestcatcher.com/test?text=${replacedText}`, { method: 'POST' });
}
const replacedText = replaceByDictionary("I love TypeScript", { "I": "Everyone" });
await postText(replacedText);
ืืืืฉื ืืืืช ืื ืื ื ืื ืฉืืืจืื ืขื ืืืืืฉืืช ืืฉื ืืช ืืช ืงืื ืืฉืืืื ืืฉืจืช ืืขืชืื, ืื ืืคืจืืืื ืืื ืืืืืืงื (ืืขืืื ืืช ืืืงืกื) ืืืื ืื ืขืืฉืื ืขื ืืชืืฆืื (ืฉืืืืื ืืฉืจืช), ืืืื ืืฉืื, ืืงืืืื ืืืืืคืกืงืจืืคื ืืช ืืืื ื ืฉืจืฆืื ื.1 420
# ืฉื ื ืกืืืื ืฉื ืงืื ื ืืื
ืืฉ ืงืื ื ืืื ืื ืืื ืืืื ืืช ืืืืกืืจืงืฆืื ืื ืืื ื, ืื ืืื ืืืคื ืืื ืืงืจื ืืงืฆื, ืื ืืื ืจืฅ ืืืืฆืืขืื ืืืืื ืืื ืืืื ืืืืฉืืช ืืืืื. ืื ื ืืืื ืืืื ืงืื ื ืืื ืืื ืืกืื ืืื ืฉื ื ืืื ืืื ืื ืืฉืื ืฉืงื ืืืชืื ืืคืขื ืืจืืฉืื ื. ืจืื ืืคืขืืื ืืื ืืืจืฉ ืืืชืจ ืืืืข ืขื ืืืขืจืืช ืืื ืฉืืฉ ืื ื, ืืืืชืจ ืื ืืกืืื ืืื ืืฉืืื ืืงืืืข.
ืืื ืืฉ ืื ืงืื ื ืืื ืื ืืื ืืชืื ืืคื Best Practices. ืงืื ืฉื ืืชื ื ืืื ืืคืขื ืืจืืฉืื ื ืื ืื ืืฉื ื ืืชื ืื ืื ื ืืืชืืื ืืืชื, ืืืชืื ืืช ืืืืจืกื ืื ืืื ื ืื ืืืชืจ ืืกืืื ืืืืชืื ืืืจืกื ืื ื ืืื ื. ืืืืืื ืืืชืื ื Dockerfile ืืช ืืฉืืจื:
FROM postgres:15.1
ืืืงืื:
FROM postgres
ืื latest ืืชืืฉืื ืืืื ืืืคืื ืืืฉืื ืืืจ ืืื ื ืื ืจืืฆื ืฉืืกืืก ืื ืชืื ืื ืืฉืชืืจื ืื ืืชืืช ืืจืืืืื.
ืื ื JavaScript ื ืขืืืฃ ืืืชืื:
JSON.parse(data);
ืขื ืคื ื:
eval('(' + data + ')');
ืืืจืืช ืฉืื ืืืืจืกื ืืฉื ืื ืขืืืืช, ืื ืืืืจืกื ืืจืืฉืื ื ืืืืจื ืืืชืจ ืืืชืืืืืช ืืื ืืืชืจ ืขื ืืืืข ืฉืืื ื JSON.
ืื ืืืคืืจืกืืืช ืฉ"ืืืคืืืืืืฆืื ืฉืืงืืืื ืืช ืืื ื ืืื ืฉืืจืฉ ืื ืจืฉืข", ืืื ืื ืื ืชืืจืืฅ ืืืชืื ืงืื ืืจืืข. ืื ืืชื ืืืืืื ืืืฉ ืืื ืืช ืื ืื ืชืื ืื, ืชืืื ืขืืืคื ืืืืจืกื ืื ืืื ื ืืืื ืฉืืืชืจ ืืืงืื.1 420
ืืขืืืื ืขื ืืจืกื ืืชื ืืงืืืื ืืงืื ืืื ืื ืืืืจื ืืืืกื ืืืืืืฉ ืืื ื ืืช ืคืจืืืงื ื flask ืฉืืื, ืืื ืื ืจืง ืื - ืืชื ืืงืืืื ืืืืื ืืช ืืขืืื ืขื ืืืืื ืืื ืืคื ืงืื ืฉื ืืชืขืฉืื, ืืืื ืฉืืืฉืืื ืืฉืจืช ืืชืื ืื ืืฉืืคืจืืืงื ืืืื (ืืชืจืฆื ืืขืืืจ ืืืืช ืืชืืื ืืืช ืืชืฉืืื ืฉืืื). ืืืืืืืช ืืืชืงืื ืชืืืืืช, ืืืขืืืช ืืืจืืืช ืื ืืืจืกื ืืืฉืืืจ ืขื ืืืืืจ ืืื ื Deployment ื git, ืืืืืื ืืืืืจ (ืืื ื ืืืืจื) ืื ืกืืืืช ืืฆืืื ืืช ืืืืืจื ื vercel ืืชืืจ ืืืช ืืคืจืืืงื ืืคืืืชืื ืืื ืฉืืื.
1 420
# ืืจืกื ืืฆืืขื ืืช ืืืจื ืืงืื ืืืืชืจ ืืืขืืืช ืืืฉืื Flask ืืขื ื
ืืจืกื (vercel) ืืคืืจืกืืช ืืืืืช ืืคืจืืืืืืจืง next.js, ืืืชื ืืฆืจ ืืืชื ืืืืจืื ืจืืื ืฉืืงืื ืื ืืช ืืจืกื. ืืื ืืืฅ ืืคืจืืืงืื ืจืืืงื ืืืจืกื ืืฉ ืขืื ืื ืืขื ืคืืฆ'ืจืื ืืฉืจืืื. ืื ืืืืืื ืืืืืช ืฉืืื ืืขื AWS ืฉืชืืคืฉืจ ืืงืื ืงืื ืืืชืจ ืฉื ืฉืืจืืชืื ืืืืกืกื ืขื ื, ืืืคืืืช ืืคื ืืชืงื ืช ืืืฉืื flask ืขื ืืชืฉืชืืืช ืฉืืื - ืื ืืงืืืืื ืืืืืื. ืืืื ื ืจืื ืืื ืื ืขืืื.
## ืื ืื ืื ื ืืื ืื
ืืฉืืื ืืืืืื ืื ื ืืขืืื ืขื ืืงืื ืืืืืืจ: https://github.com/ynonp/flask-demo-on-vercel. ืืื, ืืช ืืกืืืจืืจ ืืืืืจ ืืฆืจืชื ืืจื ืืืืฉืง ืืืจืคื ืฉื ืืจืกื ืืขืืื ืืฆืืจืช ืคืจืืืงื ืืืฉ ืฉืืื.
ืืคืจืืืงื ืืืจืื ืืชืืงืื ืืฉื api ืืื ืงืืืฅ
index.py ืฉืืืคื ืืื ืืืงืฉืืช ืื ืื ืกืืช. ืื ืชืืื ื:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'some new text'
@app.route('/about')
def about():
return 'About'
ืืงืืืฅ ืืื ืงืืืฅ flask ืจืืื ืืืืจื ืืขืื ืืขื ื ืจืื ืืื ืืขืืื ืืืชื ืืื ืืืืืืจ JSON ืืืงืื ืืืจืืืืช.
ืืืฅ ืืื ื ืืฉ ืืคืจืืืงื ืงืืืฅ ืืฉื requirements.txt ืขื ืืชืืื ืืื:
Flask==2.2.2
ืืื ืืืืื ืฉืืคืฉืจ ืืืืกืืฃ ืืืื ืฉืืจืืช ืืื ืืืืกืืฃ ืชืืืืืช ืืคืจืืืงื, ืืงืืืฅ ืืฉื vercel.json ืฉืืชืืจ ืืช ืืื ื ืืคืจืืืงื ืืฉืืื ื Deployment:
{
"builds": [
{
"src": "api/index.py",
"use": "@vercel/python"
}
],
"routes": [
{
"src": "/(.*)",
"dest": "api/index.py"
}
]
}
## ืืขืืื ืืฉืจืช
ืืจืกื ืืืืฆืจืื Deployment ืืืฉ ืืฆืืจื ืืืืืืืืช ืืืจื ืื Push ืืคืจืืืงื. ืื ืื ืฉืืืจืื ืืช ืื ื Deployments ืืืฉื ืื ืฉืืื, ืืืฉ ืืืคืฆืื ืืืกื ืืืืืจืืช ืฉื ืืคืจืืืงื ืืืืืื ืืช ืืืืฉื ืืืืชื Deployments ื ืืกืืื ืืื. ืืืืืฆืช ืืคืชืืจ ืืชื "ืืงืืืื" Deployment ืืกืืื ืื ืฉืืืคืื ื Production Deployment.
ืืคืจืืืงื ืืืืืื ืฉืื ืืฆืจืชื ืืกืคืจ Deployments. ืืฉืืชืืืชื ืืขืืื ืืฆืจืชื Deployment ืจืืฉืื ืฉืืืื ืืงืืฉืืจ ืืื:
https://flask-demo-on-vercel-4k95r1get-ynonp.vercel.app
ืืืจื ืื ืขืืื ืชื ืืช ืืงืื ืืืฆืจืชื Deployment ื ืืกืฃ ืฉืืืื ืืงืืฉืืจ ืืื:
https://flask-demo-on-vercel-ayghas8d3-ynonp.vercel.app
ืื ืืฉื ื ืืื ืืืจืกืืืช ืขืื ืืืฉืื ืืื ืืช, ืืงืืฉืืจืื ืืืฉื ืื ืืืฉืืื ืืขืืื ืืื ืื ื ืชืืื ืืืื ืืืฉืืืช ืืช ืืคืจืืืงื ืขื ืืื ืฉืขืื ืืขืืจ, ืืืขืฆื ืืื ืงืืืื ื git ืืฉ ืื ืื Preview Version ืฉืื ืฉื ืฉืืจ ืืชืืื.
ื ืขืืื ืืช ืืคืจืืืงื ืื ืืฆืืจ ืืืจืกื ืืืฉื ืฉืืืืืจื ืืช ืืืงืกื ืืชืืจ JSON. ืืืื ืฉืื ืคืจืืืงื flask ืื ื ืืืื ืืืจืืฅ ืืืชื ืืงืืืืช ืขื:
python -m flask --app api.index run
ืขืืฉืื ืืคืฉืจ ืืืืืฉ ื http://localhost:5000/ ืืื ืืงืื ืืช ืืืงืกื. ืื ื ืืขืืื ืืช ืืงืื ื api/index.py ืืงืื ืืื ืฉืืืืืจ ืืช ืืืงืกื ืืชืืจ JSON:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return { "text": "Hello WOrld" }
@app.route('/about')
def about():
return 'About'
ืืขืืฉืื ืืืืฉื ืืืืฉ ืืขืืื ืืืืืจื ืืช ื JSON:
{ text: "Hello WOrld" }
ืืืจื ืืขืืืื ืื ื ืจืืฆื ืืืขืืืช ืืช ืืืืจืกื ืืืืฉื ืืฉืจืช - ืืื ืืืฉ ืคืฉืื! ืืคืขืื:
$ git commit -a -m 'return JSON'
$ git push
ืขืืฉืื ืืืกื ืื ืืืื ืฉื ืืจืกื ืื ื ืจืืื ืืืจืกื ืืืฉื, ืื ื ืจืืื ืืช ืืืื ืืงืืืื ืืืืืขืช ืืงืืืื ืืืืื ืืืฉืชืืฉ ืืงืืืืชื ืงืืฉืืจ ืืืฉ ืืื ืืจืืืช ืืช ืืืืจืกื ืืืืฉื ืฉืื ืืืืืืจ:
https://flask-demo-on-vercel-e6irs1pie-ynonp.vercel.app
ืืฉืืืืจืกื ืืืื ื ืื ื ืืืื ืืืืจ ืืืชื ื Production ืฉืื ืืจื ืืกืื ืื ืืืื ืฉื ืืจืกื. ืื ื ืืืืฅ ืขื ืืคืชืืจ Promote To Production ืืืงืื ืืช ื JSON ืืืืืืื ืืจืืฉื ืฉื ืืืคืืืงืฆืื, ืืืชื ืื ืงืืืืชื ื vercel ืืงืืฉืืจ https://flask-demo-on-vercel.vercel.app.1 420
# ืืคืืืืจืื ืืืง (ืื: ืื ืขืืฉืื ืขื ืืืื ืืคื ืื)
ืจืง ืืคื ื ืืื ืืืืฉืื ืืื ื ืืื ืฉืืขืืื ืืื ืืื ืื ืืช ืืืชืงืื ืขื ืงืืช ืืื ืื ื ืจืง ืฆืจืืืื ืืืืืจ ืืืื ืกืืืจืื ืืคืชืื ืงืืื, ืืื ื ื ืืคืื ืืงืขืจื ืขื ืคืื ืืืืื ืืืฉืฉืื ืืืฆืืืฅ ืืื ืืืืคื ืืืื ืืคืืืืจืื ืืืืื. ืืืืจืืช ืฉืื ืืื ืืื ืจืืฆื ืืืฉืื ืฉืืื "ืืื ืืืื ืฉืืคืืจื ืืืชื" ืืืฆืืืืช ืืจืื ืฉืื ืืฉื ื ืืื ืืชื ืืืืื, ืืืจื ืฉืกืืืจืช ืืืฆืจ ืื ืืืืจืช ืืืขืืืจ ืืช ืืื ืฉืื ืืขืืื ืขื ืืืฆืจ ืืืจ.
ืื ืืื ืื ืืชื ืืืจ ืืืืช ืืืืื ืืืืื ืืืืื ืืืชืจ ืื ืขืืืื ืขืืืืื ืืื ืืืฉืฉืื, ืื ื ืืื ืืืคืื ืฉืืืืืื ืืขืืืจ ืืืขืืืจ ืืช ืืืื ืขื ืืืืืช ืืืื-
## ืื ืืื ื
ืืืจ ืจืืฉืื ืืืฉืื ืืืืืจ ืืื ืฉืขืืื ืืืจืืืืช ืืืื ืื ืืื ืืืช. ืืืื ืืืื ืืืืจืื ืืกืืืจ ืืืฆืจืื ืืื ืจืง ืืคื ื ืฉื ื ืืืื ืืืืกื ืืืืืชื ืฆืจืืืื ืืืืืฃ ืืฆืขืืช ืฉืืจ ืคืกืืืืืช. ืืื ืฉืื ืฆืจืื ืืืชืจืืฉ ืืฉืืฆืืขืื ืื ืืฉืืืจืช ืืืืื ืื ืืืื ืืงืืช ืืช ืืืืจืื ืืคืจืืคืืจืฆืื ืืฉืืืงืืื ืืืชื. ืืืื ืืืืื ืืืชืจ ืืืืื.
ืื ืื ืืกืืจ ืืกืคืื ืืจืืื ืืฉืืจ ืื ืคืืืขื ืืชื ืืื. ืืฉืืฉืืจ ืืืจื ืืื ืืชืขืฉืื, ืงืฉื ืืฆืคืืช ืฉืืืืจื ืืืื ืื ืชืชืืืื ืืขืืื ืชืจืฆื ืืืฆืืข ืืืชืจ ืืื ืฉืืฆืืขื ืืื ืืคื ื ืฉื ื. ืืื ืืงืจื ืขืืืฃ ืืืืืช ืืขืฉืื ืืื ืืฉ ืืืืื ืืช ืืืฉืจื ืืขื ืืื ืช (ืื ืืฉืืจ ืืืชืจ ื ืืื) ืื ื ืืืืชื ืืืงื.
ืื ืฉืื ืืืื ืืขืฉืืช ืื ืืืืื ืจืืืื ืืช ืขืืืื ืืืืคืฉ ืืช ืืืืจ ืืืืื ืืื. ืืชืงืืคืืช ืืืื ืืจืื ืืืชืจ ืงืฉื ืืืฆืื ืืื ืกืืืจ ืฉืขืื ืจืืืื ืืช ืื ืื ืฉืืกืจ ืืื.
## ืืคืจืืืงื ืืืื ืฉืจืฆืืช ืืืชืื
ืื ืื ืืืื ืืขืฉืืช ืขื ืืืื? ืืืืจ ืืื ืืฉืื ืืื ืืืืฉืืจ ืืขืฉืื, ืืืืจื ืืื ืงืื ืืขืฉืืช ืืช ืื ืืื ืืงืืช ืคืจืืืงื ืฉืชืืื ืจืฆืืชื ืืืชืื ืืื ืืื ืืื ืืื. ืื ืืืืื ืืืืืช ืืขืจืืช ืืื ืืจื ืืืช ืฉืชืขืืืจ ืืขืืืชื ืื ืืจืืื ืฉืงืจืื ืืืืื, ืืืื ืืืืืช ืืื ืฉืืขืืืจ ืืื ืืชืืืื ืื ืจืขืืื ืฉืืฉืืชื ืขืืื ืืขืืืื ืืงืืืืช ืืืฃ ืคืขื ืื ืืื ืืื ืืื ืืืืฉื.
ืืื ืืื ืืืกืฃ ืืืืืจ ืืฉืืง ืืืืฉืื ืืฉืื ืืชืื ืืจืืืื ืื ืขืฉืืชื ืขื ืืืื ืืคื ืื. ืคืจืืืงื ืืื ืืืืื ืฉืืฉืชืืฉ ืืืืื ืืชืงืืืื (ืืชืื ืืชืืื ืืกืคืฆืืคื ืฉืืชื ืขืืืืื ืื) ืืืื ืืืืืช ืืืืืง ืืกืืคืืจ ืฉืื ืืืคืฉื.
## ืืงืืจืก ืืืื ืฉืจืฆืืช ืืงืืช
ืชืืื ืจืฆืืช ืืืืื ืก ืืขืืื ื Front End ืืื ืืื ืืื? ืืืื ืืืืช ืขื ืคืืชืื ืืืฉืืื ืืื ื ืืืืืืชืืช ืืื ืชืืื ืขืืืช ืืช ืืงืืจืก ืืืื ืืงืืจืกืจื ืืืจื ืืฉืืืข ืืฉื ื? ื ื, ืื ืืืจ ืืื ืคื ืื ืืื ืงืืื?
ืงืืจืกืื ืืงืฆืืขืืื ืืคืื ืืืืื ืืืื ืื ืืคืืื ืืืขื ืืื ืืืื ืืฉื ืื ืืืืจืื ืืช. ืืืจ ืื ืฆืจืื ืื ืกืืข ืืืจื"ื ืื ืืืืื ืก ืืืืืืช ืืื ืืืืจืฉื ืืืื ืืืจืกืืื. ืืจืฆืืืช ืืืงืืืืช ืืชืจืืืืื ืืืื ืื ืืื ืืืื ืืื ื ืืฉื, ืืืชื ืฆืจืืืื ืจืง ืืืฆืื ืืืืืื. ืขืืฉืื ืขื Chat GPT ืืคืืื ืื ืฆืจืื ืืืจื ืืืคืฉืจ ืืชืช ืืืื ื ืืืืืืชืืช ืืขื ืืช ืขื ืจืื ืืฉืืืืช.
## ืืขืกืง ืืงืื ืฉืืชืืืื ืช ืืคืชืื
ืชืงืืคืืช ืฉื ืืฉืืจ ืื ืืืื ืืื ืืื ืืคืชืื ืขืกืง ืงืื ืืืฉ, ืฉืืืชื ืืื ืืื ืกื ืฆืืืืช ืื ืืืื ืืืฉืืจ ืืื ืืืจืื. ืืืชืื ืชืื ืืืืจืื ืืืจืืืืื ืฉืื ืื ื ืืืืืื ืืขืฉืืช ืืืื:
1. ืืื ืืช ืกืคืจืืืช ืงืื ืคืชืื ืืืืกืืฃ ืชืจืืืืช ืืื ืฉืื ืฉืืืืืื ืืช ืืกืคืจืื (ืืคืชืืจื ื"ืงื ื ืื ืงืคื" ืื patreon ืืืื ืืื).
2. ืืื ืืช ืืืฆืจ Saas ืฉืชืืืื ืืืืืจ ืืืื ืืืฉื (ืืื ืืฉ ืืื ืจืขืืื ืืช)
3. ืืื ืืช ืืคืืืงืฆืืืช ืืืืืื ืืืืืืจ ืืืชื ืืจื ืื ืืืืช ืืืคืืืงืฆืืืช (ืืื ืืฉ ืืื ืจืขืืื ืืช)
ืืืืจ ืืืฉืื ืืืืื ืืื ืื ืจืง ืืืืฆืจ ืืื ืืืืจืช ืืฉืืง, ืืืืืืจ ืืื ืฉืืืื ืืจืฆื ืืฉืื ืขื ืืืฆืจ ืืื ืืืืืคืืฉ ืืืจื ืืืงืืืืช ืืจืืฉืื ืื. ืืืืื ืืืืช ืืืืื ืืืืืช ืืืื ืืืขืืื ืืืชืช ืืื ืคืจืกืคืงืืืื ืืืื ืืืชืจ ืืืชื ืชืืืขื ืืชืคืงืื ืืื ืืฉืืขืืื ืืืืืจ ืืืืืก.
ืื ื ืืื ืืฃ ืืื ืื ืืืื ืืืืฉืืจ ืืืืช ืื ืืืื ืืืืกืชืื ืืคืื ืขื ืืฉืืื ืืื ืง ืืืชืจืืงื, ืืื ืขื ื ืืฆืื ื ืืื ืฉื ืืืื ืืฉ ืกืืืื ืืฆืืช ืืืืืงืื ืื ืืืชืงืืคื ืืงืจืืื.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
