ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
Ma'lumot yo'q24 soatlar
-17 kunlar
+230 kunlar
Postlar arxiv
1 419
# ืืืื ืืืืชื: ืฉืื ืื ืฉื ื git
ืฉืืื ืฉื ืืงืืื ืฉืืื ืืืชื ืืืคืฉ ืื ืืื ืขืืฉื ืืฉืืื ืืืชื ืื ื ืฉืงืืืฅ ืฉืื ื ืืช ืืฉื - ืืืชืฉืืื ืืคืชืืขื ืืคืืื ืืืชื. ืืืื ื ืคืชื ืืืืจ ืืฉืืื ืืจืืืช ืืื.
ืื ื ืืชืืงืื ืืืฉื ืืืชื:
$ git init .
$ echo hello > file1.txt
$ git add .
$ git commit -m 'initial commit'
ืืขืืฉืื ื ืฉื ื ืืงืืืฅ ืืช ืืฉื:
$ git mv file1.txt file2.txt
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: file1.txt -> file2.txt
$ git commit -m 'rename'
ืืืคืฉืจ ืืจืืืช ืืช ืฉืื ืื ืืฉื ืื ืืฆืคืื ืืืื:
$ git log -p --oneline
25ccbd7 (HEAD -> main) rename
diff --git a/file1.txt b/file2.txt
similarity index 100%
rename from file1.txt
rename to file2.txt
0e6c0e3 initial commit
diff --git a/file1.txt b/file1.txt
new file mode 100644
index 0000000..ce01362
--- /dev/null
+++ b/file1.txt
@@ -0,0 +1 @@
+hello
ืขืืฉืื ืื ืื ื ืืืืขืื ืฉืื ืงืืืื ื git ืืื ืืกื ืืื Snapshot ืฉื ืื ืืงืืฆืื ืืคืจืืืงื. ืื ืื ื ืืืืขืื ืฉืืื ืื ืฉืืืจ ืฉืื ืืืื ืืื ืงืืืืืื ืืืฉืื ืื ื ืื ืกืื ืืืฆืื ืฉืื ืืืื ืืื ืืฉืืื ืืืื ืืืช ืืื ืืงืืืืืื ืืื ืืืืืช ืืช ืืฉืื ืืืื. ืืืืืื ืืืจืืช ืื ืื ื ืืืืขืื ืฉืืืืื ืช ืืื ืื ืงืืืื ืืื ืคืชืืช ืฉืื ืืืืืื ืฉืืืื ืืช ืื ืืืืืข ืฉื ืืคืจืืืงื.
ืื ืืื ืืื ืืืืข ืฉืงืืืฅ ืฉืื ื ืืช ืืฉื ืืื ืงืืืืืื? ืืืคื ืืืืืข ืืื ื ืฉืืจ? ... ืืกืชืืจ ืฉืืฉืื ืืงืื. ืืืคืชื ืืื ื similiarity index ืฉื ืืงืืฆืื. ืืฉืืื ืืงืก ืื ืืืื ืืื ืื ืื ืืกืืืจืืช ืืืืื ืฉืืืืืจ ืืืืชื ืงืืืฅ ืฉืคืฉืื ืฉืื ื ืืช ืืฉื.
ืืืช ืื ืืกืืื ืฉืืื ืืืื ืืืืืช ืืื ืืฉืงืืืฅ ืฉืื ื ืืช ืฉืื, ืืฉืืคืขืืื ืืื ืืืขื ืืืืืื. ืื ืื ืืื ืืกื ืืื ืืงืกื ืืคื ืฉืืื ืืฉืชืืฉ ืื ืืื ืืืกืืืจ ืื ื ืืืจืื ืฉืืื ืืืฉื ืฉืืืื ืงืจื, ืืื ืืขืฆื ืืื ืื ืืจื ืืืืืงืช ืืืขืช ืืช ืื.
ืืืืจืืง ืืืืื ืืื ืืืชื --no-renames ืฉืืคืฉืจ ืืฆืจืฃ ืืืจืื ืคืงืืืืช ืืื ืืื ืืืืืช ืืช ืื ืื ืื ืืืืื ืฉืื ืืื ืืฉื. ืื ืืืชื ืืืื ืืจืื ืืื ืืื ืื ืื:
$ git log -p --oneline --no-renames
25ccbd7 (HEAD -> main) rename
diff --git a/file1.txt b/file1.txt
deleted file mode 100644
index ce01362..0000000
--- a/file1.txt
+++ /dev/null
@@ -1 +0,0 @@
-hello
diff --git a/file2.txt b/file2.txt
new file mode 100644
index 0000000..ce01362
--- /dev/null
+++ b/file2.txt
@@ -0,0 +1 @@
+hello
0e6c0e3 initial commit
diff --git a/file1.txt b/file1.txt
new file mode 100644
index 0000000..ce01362
--- /dev/null
+++ b/file1.txt
@@ -0,0 +1 @@
+hello
ืืคืขื ืืืงืื ืฉืื ืื ืฉื ืืฉ ืื ื ืืืืงื ืืืฆืืจื ืฉื ืงืืืฅ ืืืฉ. ืขืืืจ ืืืชื ืืื.
ืื diff ืืืื ืืงืื ืืืชื ืืืคืื ืืื ื ืฉืชื ืืืคืฉืจืืืืช:
$ git diff --name-status HEAD~
R100 file1.txt file2.txt
$ git diff --name-status --no-renames HEAD~
D file1.txt
A file2.txt
ืืืืืจื ืืืฉืชืืฉ ืืื ืื ืื ืืืืื ืฉืื ืื ืืฉืืืช ืฉื ืืื ืืื ืฉืืื, ืืืื ืื ืงืฉืืจื ืืชืืื ืืงืืฆืื ืขืฆืื ืฉื ืฉืืจืื ืืืืืจ. ืืคืขืืื ืื ืื ืื ืื ื ืื ืืขืืืจ ืืจืืืช ืื ืงืจื ืืืื ืืฆืืจื ืืืชืจ ืืืืืงืช, ืืื ืืฉืืื ืื ืขืืืจ ืืื ืื ืชืชืืืืฉื ืืืืืช ืืืชื.1 419
# ืืืืืืช
ืืจืืจืช ืืืืื ืฉื ืฉืจืช Express ืืื ืืืคืฉืจ ืืขืืื ืฉื ืงืืฆืื ืขื 1 ืืื. ืื ืืืืจ ืฉืื ืืชื ืืืชืืื ืงืื ืืืืืงืื ืืืชื ืืขืฆืืื ืจืง ืขื ืงืืฆืื ืงืื ืื, ืืฉืชืืืขื ืืคืจืืืงืฉื ืื ืจืื ืชืืื ืชืงืืืช ืืคืชืืขืืช.
ืืื ืื ืืชื ืืืืจืื ืืช ืืืืื ืืชื ืืืืขืื ืฉืืืืฉืื Express ืฉืืืคืฉืจ ืืขืืืช ืงืืฆืื ืชืืื ืืืื ืืืืืง ืขื ืงืืืฅ ืฉื ืืื ืืืฆื ืื ืฉื ืืื - ืจืง ืืืชืจ ืืืืืื.
ืืืืืคื ืืืื, ืืฉืื ืื ื ืืืืจืื ืืืื ืืืืืขืื ืฉืคืืฆ'ืจ ืืกืืื ืืืื ืืืืืื ืืกืืืืช ืืืจืฉ ืืืคืื ืืืืื (ืกืืจ ืงืื ืืืื ืจืื ืืืืงืจ, ืกืืื ืื ืืืืืืื ื SQL, ืจืฉืืืืช ืืจืืืืช ืืจืืืงื, ืืืืื ืฉืืคืกืืง ืืืืฆืข ืืชืืื ืช ืืืืื) ืื ืื ื ืืืืืื ืืืืืง ืืช ืืชื ืื ืืืืืื ืืื ืืขืจืืช ืืืฉื ืฉื ืืชืื ืืืกืื ืืื, ืืืืืื ืฉืืชื ืื ืืื ืืืคื ืืฉืื ืื ื ืขืืืจืื ืขื ืงืื ืฉื ืืืจืื ื Code Review.
ืืฉืืชื ืืืืืื ืืื ืืืืืื ืืืฉื ืืคืฉื ืืช ืืืืืืืช. ืืืืจืืช ืืืชื ืชืืกืื ืืจืื ืืขืืืช ืืืขืืจ ื Tutorial ืืขืืื ืืืืืชื.
1 419
$ pip install -r requirements.txtืืื ืืืคืขืื ืืช ืฉืจืช ืืคืืืชืื ืขื:
$ python main.py
ืืืืกืืฃ ืืืคืขืื ืืช ืฉืจืช ืืคืืชืื ืืฆื ืืงืื ืขื:
$ cd frontend
$ yarn dev
ื ืกื ืืืืื ืก ื localhost:3000 ืืืกืคืจ ืืืื ืืช ืืืืชืื ืืงืกื ืืชืืื. ืื ืืื ืขืืื ืืื ืฉืฆืจืื ืืชื ืชืจืื ืืช ืืืงืกื ืืืขืชืง ืืื ืืืืื ืืช ืืืืจืื.1 419
# ืืืืืช ืคืืชืื ืชืงืฉืืจืช ืื-ืืืืื ืืช ืืื ืฉืจืช ืคืืืชืื ืืืงืื ืจืืืงื
ืกืคืจืืืช socket.io ืืื ืขืืืื ืืืจื ืืื ืคืฉืืื ืืื ืืช ืืืืืจ ืชืงืฉืืจืช ืืกืื ืืจืื ื ืืื ืงืื ืฆื ืืงืื ืืงืื ืฆื ืฉืจืช. ืืืืืื ืืืื ืื ื ืืืงื ืฉืจืช ืคืืืชืื ืืืงืื ืจืืืงื ืืื ืืื ืืช ืชืืืช ืืงืกื ืฉืืจืื ืืช ืืืชื ืืืงืกื ืืื ืืื ืืืื ืืช - ืืืืืจ ืื ืื ื ืืฉื ืื ืืช ืืืงืกื ืืืืื ืืื ืืืืืืืืืช ืืืืื ืืช ืืืจืื ืืืืืฉืืื ืืืจืื ืืืงืกื ืืชืืื ืืฉืชื ื ืืืชืืื.
## ืฆื ืืฉืจืช: ืคืืืชืื ื Socket IO
ืืกืคืจืื python-socketio ืืกืคืงืช ืืืืืฉ ื ืื ืืคืจืืืืงืื SocketIO ืืฆื ืฉืจืช ืืคืืืชืื. ืื ืกืคืจืืืช ืืขืืคืช ืฉืืืืื ืืืฉืชืืฉ ืืืกืคืจ ืกืคืจืืืช ื ืืืื ืืืจืืขืื ืืฉืืื ืืชืงืฉืืจืช, ืืื ื ืืืืชื ืขื ืืืืืฉ ื aiohttp.
ืืืืง ืืืขื ืืื ืืงืื ืฆื ืืฉืจืช ืืื ืืืืงืื ืืืฆืืจื ืืื:
@sio.on('message')
async def print_message(sid, message):
print("Socket ID: " , sid)
print(message)
await sio.emit('message', message, broadcast=True);
ืื ืืชืืื ืฉืืกืืื ืช ืขื ื Decorator ืฉื SocketIO ืชืืื ืืชืืื ืฉืืืืื ื ืืืืจืืข. ืืงืื ืืืืืื ืืืืื ืื ืืืืจืืข ืืฉื message. ืืคืื ืงืฆืื emit ืฉืืืืช ืืืจืืขืื ืืืืฆื ืืืคืจืืืจ broadcast ืืืจื ืืคืจืืืจ ืืืืฉืื ืืื ืืืงืืืืช. ืื ื ืื ืืชืืืช ืืงืกื ืฉืฆืจืืื ืืืืืช ืืกืื ืืจื ืช ืืื ืืื ืืืื ืืช ืืื ืฉืื ืฉืื ืื ืืืืื ื ืืืช ืืืืืืืืช ืืืฉืื ืืื ืืืืื ืืช ืืืืจืืช.
ืงืื ืืฉืจืช ืืืื ืืื ืืกื ืืื ืงืืืฅ ืคืืืชืื ืืื ืขื ืืชืืื ืืื:
from aiohttp import web
import socketio
static_files = {
'/static': './frontend/dist',
}
sio = socketio.AsyncServer(cors_allowed_origins='*', aync_mode='aiohttp')
app = web.Application()
app.add_routes([web.static('/static', './public')])
sio.attach(app)
@sio.on('message')
async def print_message(sid, message):
print("Socket ID: " , sid)
print(message)
await sio.emit('message', message, broadcast=True);
if __name__ == '__main__':
web.run_app(app)
ืื ื ืืืกืคืชื CORS Headers ืืื ืฉืืืื ื ืื ืืืฆื ืคืืชืื ืืืคืขืื ืฉืจืช Webpack ืืืืชืืืจ ืืื ื ืืฉืจืช ื SocketIO (ืื ืืื ืืื ืจืฅ ืขื ืคืืจื ืืืจ). ืืืฆื ืืืฆืืจ ืืคืฉืจ ืืืืชืจ ืขื ืื ืืืืืืฉ ืืช ืืงืืฆืื ืืืืชื ืืืืืื ืืจื nginx ืื ืืืืฆืขืืช ืื ืื ืื ื Static Files ืฉื ืฉืจืช aiohttp.
## ืฆื ืืืงืื: ืจืืืงื ื socket.io-react-hook
ืืฆื ืืืงืื ืืงืื ืืืืืง ืืฉื ื ืงืืฆืื: ืืงืืืฅ ื index.js ืื main.js (ืชืืื ืืชืื ืืช ืืคืจืืืงื ืฉืืื) ืื ื ืฆืจืื ืืืืกืืฃ ืืืื ื ืืฉื IoProvider ืืกืืื ืืื ืืืคืืืงืฆืื ืฉืื:
import React from 'react'
import ReactDOM from 'react-dom'
import './index.css'
import App from './App'
import { IoProvider } from 'socket.io-react-hook';
ReactDOM.render(
<React.StrictMode>
<IoProvider>
<App />
</IoProvider>
</React.StrictMode>,
document.getElementById('root')
)
ืืืืืง ืืืขื ืืื ืืื ืืงืืืคืื ื ืื ืขืฆืื: ืฉื ืื ื ืืฉืชืืฉ ื Hooks ืืืืื:
1. ืืคืื ืงืฆืื useSocket ืืชืืืจืช ืืฉืจืช Socket IO ืืจืืืง.
2. ืืคืื ืงืฆืื useSocketEvent ืืชืืืจืช ืืืืจืืข ืฉืืฉืจืช ืืืื ืืฉืืื, ืืื ืคืขื ืฉืืฉืจืช ืฉืืื ืืช ืืืืจืืข ืืืืืืืืช ืชืืจืื ื Render ืืืืฉ ืฉื ืืงืืืคืื ื ืื.
ืืขืืจืช useEffect ืื ื ืืืืจ ืืื ืืืืจืืข ืฉืืืืจ ื useSocketEvent ืืืงืกื ืฉืืืฆื: ืื ืคืขื ืฉืงืืืื ื ืืืืขื ืืืฉืจืช ื ืืืืง ืื ืืื ืฉืื ื ืืืืงืกื ืฉืฉืืืจ ืืฆืื ื ื ืฆืื ืืืชื ืืขืืจืช ืฉืืืจืชื ืืืฉืชื ื ื State.
ืืงืื ืืืื ืืงืืืฅ App.jsx ื ืจืื ืื:
import './App.css'
import { useState, useEffect } from 'react';
import { useSocket, useSocketEvent } from 'socket.io-react-hook';
function App() {
const [text, setText] = useState('');
const { socket, error } = useSocket('http://localhost:8080');
const { lastMessage } = useSocketEvent(socket, 'message');
useEffect(function() {
if (lastMessage && lastMessage !== text) {
setText(lastMessage);
}
}, [lastMessage]);
if (error) {
return <p>{String(error)}</p>
}
function handleChange(e) {
setText(e.target.value);
socket.emit('message', e.target.value);
}
return (
<div>
<input type="text" value={text} onChange={handleChange} />
<p>Last message = {lastMessage}</p>
</div>
);
}
export default App
## ืืื ืืคืขืืืื
ืื ืืชื ืจืืฆืื ืืฉืืง ืขื ืืคืจืืืงื ืชืฉืืื ืืฉืืืข ืฉืฉืืชื ืืช ืื ืืงืื ืืืืืืื ืืืืืจ https://github.com/ynonp/python-socketio-demo.
ืืฉืืื ืืืคืขืื ืืืชื ืฆืจืื ืืืจืืฅ ืงืืื ืื ืืช ืืืชืงื ืืช ืืคืืืชืื ืขื:1 419
# ืืชืืจ ืจืืคืงืืืจืื ื ื JavaScript
ืื ืื ืืื ืฆืจืื ืคืื ืงืฆืื ืฉืืืืืจื ืงืื HTML ืืืืื ื ืงืืฉืืจ ืืคื ืืกืคืจ ืืืคืืื ืื. ืืคืื ืงืฆืื ืืงืืืช ืืืืืงื ืืฉื props ืืชืืืืช ืืืืคืืื ืื ืืืืื:
1. ืื ืืืืืืงื ืืืื ืืช ืืืืคืืื href ืื ื a ืืืื href ืขื ืืขืจื ืืืชืืื. ืืืจืช ืื ืืืื ืื.
2. ืื ืืืืืืงื ืืืื ืืช ืืืืื ื title ืื ื a ืืืื title ืขื ืืขืจื ืืืชืืื. ืืืจืช ืื ืืืื ืื.
3. ืื ืืืืืืงื ืืืื ืืช ืืืืื ื text ืื ื a ืืืื ืืงืกื ืขื ืืขืจื ืฉืขืืจ.
ืืืช ืืคืื ืงืฆืื ืฉืื ืื ืืชื:
function showLink(props) {
return (
`<a
${props.href ? `href="${props.href}"` : ''}
${props.title ? `title="${props.title}"` : ''}
>${props.text ? props.text : ''}
</a>`
);
}
ืืฉืื ื ืืกืชืืื ืขื ืืงืื ืืื ืืจืืืฉื ืฉืืคืื ืงืฆืื ืืกืืจืืืช ืืื. ืืื ืืฆืืขื ืืฉืืชื ืืืชื ืืขืืจืช ืฉืชื ืคืื ืงืฆืืืช ืขืืจ ืืงืื ืืื:
function showLinkBetter(props) {
const { href, title } = attrs(props);
const { text } = values(props);
return (
`<a ${href} ${title}>${text}</a>`
);
}
"ืืืืชืจ ืืื", ืืชืืืื ืื ื, "ืขื ืคืื ืงืฆืืืช ืืขืืจ ืฉืื ืืชื ืืืื ืืชืืื ืืืืคืืื ืื ืืืฉืื ืืฆืืจื ืงืื ืืื ืืฉื ืืช ืืช ืืคืื ืงืฆืืืช attrs ื values ืฉืืชืืชื - ืจืง ืชืื ืฉืื ืื ืืคืื ืงืฆืื showLinkBeter".
ืืื ื ืจืื ืืืืืืฉ ืฉื attrs ื values ืฉืื ื ืืชืื?
## ืคืืชืจืื
ืืืขืื ืฉืื ื ืืืชื ืฆืจืืื ืืืชืืืื ืืืชื ืืื ืื ืืจืืืืืืืืช: ืืฉ ืืฉื ืืช ืืช ืื ืืขืจืืื ืืืืืืงื, ืืืื ืืืื ืฉืืืื ืื ื ืืฆืืื ืื! ืืืืืืงื ืฉ attrs ืืืืืจื ืฆืจืื ืืืขืช ืืืืืืจ ืืืจืืืช ืจืืงื ืขืืืจ ืื ืืคืชื ืฉืืืงืฉื ืืื ื ืืฉืื ื ืืฆื ืืืืืืงื ื props.
ืืจื ืืืช ืืืฉืช ืืคืชืืจ ืืช ืื ืืื ืืืืืช ืืช ืืืืฉืื ืฉื ืขืจื ืืืืืจ ืขื ืฉืืืืช ืืืฉืื ืืืงืฉ ืืคืชื ืืืฉืื. ื JavaScript ืื ืื ื ืืืืืื ืืขืฉืืช ืืช ืื ืขื ืืืืจืช Getter (ืืื ืื ื ืฆืืจื ืืืขืช ืืื ืงืืจืืื ืืืคืชื), ืื ืขื ืืืืจืช Proxy.
ืื ื ืื ืืืืข ืื ืื ื ืืชืื, ืืื ืื ืืคืืชืจืื ืฉืื ื ืืืืชื ืืืชื ืืขืืจืช proxy ืืื ืืืืฉ ืืช attrs ื values:
function returnTextProxy(props, withPrefix) {
return new Proxy(props, {
get: function(target, prop, _receiver) {
if (target[prop]) {
return withPrefix ? `${prop}="${target[prop]}"` : target[prop];
} else {
return "";
}
}
});
}
function attrs(props) {
return returnTextProxy(props, true);
}
function values(props) {
return returnTextProxy(props, false);
}
ืืฉ ืืื ืจืขืืื ืืช ืืืจืื? ืื ืชืชืืืืฉื ืืฉืชืคื ืืชืืืืืช.1 419
# ืืืื ืืืืชื: ืืจืืืืงืืืจืืช ื Docker Images
ืืื ืืืืจืื ืฉืืืืืืื ืืขืืืื ืขื ืืืงืจ ืื ืืืืืื (ืืืืืื) ืืื ืงืื ืืืื ืจืื ืืืืื ืืช ืืืจืืืืืืืช. ืืืื ื ืืืื ืจืืฆืื ืืืฉืื ืขื ืงืื ืืืื ืจ ืืชืืจ ืืฉืื ืฉืืคืฉืจ ืืืจืืฅ ืืื ืืงืื, ืืื ืืฆื ืฉื ื ืื ืื ื ืื ืืืืขืื ืฉืืืื' ืืื ืื ืืืฉื ืืื ืืืฉ ืืืจืื ืฉืืื ืืืงื ืืืขืจืืช ืืืคืขืื. ืืื ืฉื ื ืืืืจืื ืืืื ืืกืชืืจืื ืืื? ืื ื ืขืืงืจื ืืืืจืื:
1. ืืื ืืืช Docker Image ืื ืื ื ืืื ืื ืืืื' ืกืคืฆืืคื ืืืจืืืืงืืืจืช ืืืขืื ืืืืขืจืืช ืืืคืขืื ืขืืื ืื ืื ื ืืจืืฆืื ืืช ืชืืืื ืืื ืื.
2. ืืื ืืข ืฉืืจืืฅ ืืช ื build ืื ืืืื ืืืืืช ืืื ืืืขืจืืช ืืืคืขืื ืฉืืฉ ืืื ืขื ืืืืฉื, ืืื ืืืืง ืืืืืื. ื Windows ืื ืื ื ืืืจื ืืื ืืจืืฆืื ืืช ื build ืืื ืืข ืฉืจืฅ ื WSL ืืืืืจ ืืืืื ืช ืืื ืืงืก ืืืจืืืืืืช. ืืืงืจ ืขื ืืืง ืืฉืชืืฉ ืืืืื ื ืืืจืืืืืืช ืืืจืช ืืื ืืืจืืฅ ืืช ืืื ืืข, ืืื ืื ืืื ืืจืืฆื ืืื ืืงืก. ืืื ืื ืื ืขืฉืืชื ืืฉืื ืืืืจ ืชืืืื ื build ืืื ื ืืืื' ื Linux.
3. ืืจืื ืืืื'ืื ืืืืงืจ ืืื ื ืื ื ืืื ืคืขืืื, ืขืืืจ ืืกืคืจ ืืขืจืืืช ืืคืขืื ืืืจืืืืงืืืจืืช ืืขืื. ืืื ืื ืืืืช ืื ืฉืืคืจืกื ืืช ืืืืื' ืืขืฆื ืืื ื ืืืคืจืกื ืืื ืืืื'ืื ืืืกืืฃ ืืืื ืืช ืืืื ืืฉื ืืื ื Dockerhub. ืชืจืื ืืืฉื ืืช ืืืืื' ืฉื ืคืืืชืื. ืืชื 3.9.8 ืืืื ืจืฉืืื ืฉื 11 ืืืื'ืื ืฉืื ืื, ืื ืืื ืืืื ืืืจ ืฉื ืืจืืืืงืืืจืช ืืขืื ืืืขืจืืช ืืคืขืื.
4. ืื ืคืขื ืฉืืชื ืืืชืืื
docker run ืื docker pul ืืื ืืข ืฉื ืืืงืจ ืืืคืฉ ืืืื' ืฉืืชืืื ืืืจืืืืงืืืจื ืืืืขืจืืช ืืคืขืื ืฉืืื ืจืฅ ืื ืืจืืข. ืื ืืืืจ ืฉืืฉืื ื ืืืชืื docker run python ืขื ืืขืจืืช ืืื ืืงืก ืืขื ืืขืจืืช Windows, ืื ื ืืงืื ืืืื' ืฉืื ื ืืื ืืขืจืืช. ืืคืฉืจ ืืจืืืช ืืช ืื ืื ืชืคืขืืื docker image ls ืืื ืืืช ืืฉืชื ืืืืื ืืช ืืชืจืื ืืช ื Digest ืืฉืื ื.
5. ืื ืฉืืืฉืช ืืขืจืืืช ืืืคืขืื ืืืืขืืช ืืื ืืช ืืืื'ืื ื Linux ืืืื ืจืื ืืืื ืืืืืืื ื ืฉืืจืื ืืืกืชืจืื. ืืื ื ืงืืื ืืืช ืฉืงืฉื ืืืกืชืืจ ืืื ืืจืืืืงืืืจืช ืืืขืื. ืืืงืจ ืฉืจืฅ ืขื ืืืฉื Arm ืืื ื ืืืจืืฅ ืืืื'ืื ื Arm, ืืืืงืจ ืฉืจืฅ ืขื ืืืฉื ืืื ืื ืืื ื ืืืจืืฅ ืืืื'ืื ืฉื ืืื ืื.
6. ืงืืืกืืจืื ืืงืืืจื ืืก ืื ืจืฆืื ืขื ืืจืืืืงืืืจืช ืืขืื ืกืคืฆืืคืืช ืืฉื ืืฉ ืื ื ืืืืจื ืืฉืืงืืืื ืืช ืืงืืืกืืจ. ื AWS ืืฉ ืืืืืื ืืขืื ืฉื ืงืจื Graviton2 ืืืืืกืก ARM ืืืคื ืืขื ืชื ืืืื ืืืกืื ืืขืืืช ืืงืืืกืืจ ืืืฉืืืื ืืืขืื ืืื ืื. ืืื, ืื ืืืืื' ืฉืื ืื ืื ืจืง ืืืจืืืืงืืืจืช amd64 ืื ื ืื ืืืื ืืืฉืชืืฉ ืืงืืืกืืจ ืืื. ืืืืื ืืคืืื ืืกืืืจืื ืืื ืืื ืืช ืืืื' ืืืจืืืืงืืืจืช ARM ืืื ืฉืื ืจืืฆื ืืืกืื.
7. ืืคืฉืจ ืืืืืง ืื ืืืจืืืืงืืืจื ืฉื Docker Engine ืฉืืื ืืจืืข ืืจืืฅ ืขื docker version. ืืคืฉื ืืช ืืืคืชื OS/Arch.
8. ืืฉืชื ื ืืกืืืื DOCKER_DEFAULT_PLATFORM ืงืืืข ืืืืื ืืจืืืืงืืืจืช ืืขื ืื ืื ื ืืื ืื ืืช ืืืืื'ืื ืืฉืืจืืฆืื docker build. ืืฉืืื ืืื ืืช ืืืขืืื ืืื ืื ืืฉืื ื ืจืฅ ืขื ืืืื ืช ARM ืื ื ืงืืืข ืืช ืืขืจื ื linux/amd64. ืืฉืืื ืืื ืืช ืกืืืืืช ืืืชืจ ืืชืืืืืืช ืืฉ ืื ืื ืื ืฉื ืงืจื buildx.
ืืืจืืช ืฉืงืื ืืืื ืจืื ืืจืืืฉืื ืืื ืืฉืื ืฉืขืืื ืืื ืืงืื ืืืืช ืืื ืงืฆืช ืืืชืจ ืืืจืืืช. ืืื ื ืืืื ืฉื ืืื ืืข ืืกืืืืช ืืจืืฆื ืฉืื ืืืืื ืืขืืืจ ืืื ืืืชืืืื ืขื ืืืืื ืืืืจืื ืืืคืขืืื ืื ืืืกืื ืืขืืืืืช ืืฉืจืชืื.1 419
const countries = Object.keys(db);
const selectedCountry = ref("");
const cities = computed(() => db[selectedCountry.value] || []);
const selectedCity = ref("");
watchEffect(() => {
if (!cities.value.includes(selectedCity.value)) {
selectedCity.value = '';
}
});
</script>
<template>
<div>
<select v-model="selectedCountry">
<option value="" disabled="true">Please select a country</option>
<option v-for="country in countries" :value="country">{{country}}</option>
</select>
<p>Selected country = {{selectedCountry}}</p>
<pre>Cities = {{cities}}</pre>
<select v-model="selectedCity">
<option value="" disabled="true">Please select city</option>
<option v-for="city in cities" :value="city">{{city}}</option>
</select>
<p>You selected country = {{selectedCountry}} and city = {{selectedCity}}</p>
</div>
</template>
<style scoped>
</style>1 419
# ืืืืช ืจืืืงื: ืคืจืืื ืืงืืืคืื ื ืื
ื ืชืื ืืงืื ืืื ืฉืืืื ืฉืชื ืงืืืคืื ื ืืืช:
import React from 'react';
function Yo() {
React.useEffect(function() {
alert('bye bye');
}, []);
return <p>Yo</p>;
}
export default function App() {
function handleClick() {
}
return (
<div className="App">
<Yo />
<button onClick={handleClick} >Say bye bye</button>
</div>
);
}
ืขืืื ื ืืช ืงืื ืืงืืืคืื ื ืื App ืื ืฉืืืืฆื ืขื ืืืคืชืืจ ืชืืจืื ืืืฆืืช ื alert ืฉืืืืืจ ื Yo.
ืืื ืฆืืจื ืืฉื ืืช ืืช ืืงืื ืฉื Yo ืืืื ืืืฆืข ืื ืฉืื ืื ืืืืืืื ืืืืฉืง.1 419
# ืฉืืงืืื ืชืงืฆืื
ืืื ืืืืจืื ืืืจืืืืื ืฉืืืืืืื ืืื ืื ืฉื ืืงืฆืืข ืืืืืื ืื ืืื ืื ืืื ืืช ืืขืืื ืืคื ืชืงืฆืื. ืืชืงืฆืื ืื ืื ืจืง ืืกืฃ. ืืชืงืฆืื ืืื ืืืืจืช ืืืืืืืช ืืืืกืืจืช ืฉืจืง ืืชืืื ืืคืฉืจ ืืืืืช ืืฆืืจืชืืื.
ืชืงืฆืื ืืืื ืืืืืช ืืืื ืงืื ืืจื, ืืขืืืื ืืคื ืชืงืฆืื ืืื ืืืืืจื ืืืฉืืง ืืช ืืืืฆืจ ืืืืขื ืฉืืชืืืืืช.
ืชืงืฆืื ืืืื ืืืืืช ืืฉืขืืช ืขืืืื, ืืขืืืื ืืคื ืชืงืฆืื ืืื ืืืืืจื ืืขืืื X ืฉืขืืช ืืืื ืืืกืืื ืืืื.
ืชืงืฆืื ืืืื ืืืืืช ืืื ืคืจืืืจ ืืื ื, ืืืืืื ืฆืืืชืื ืืงืฆืืขืืื ืฉืืื ืื ืืขืจืืช ืืื ืืืืืจืื ืฉืืื ืืืขืื ื ืฉื ืืืชืจ ืขืืืจ 80% ืืืืฉืชืืฉืื ืฉืืื ืืืื ืคืืืช ื X ืฉื ืืืช.
ืืืืื ืฉื ืืืืืช ืงืื ืื ืื ื ืืืืืื ืืืืืื ืขื ืืืืืช X ืฉืืจืืช ืืงืืืฅ ืื ืืกืคืจ ืชื ืืื ืืืฉืืืช ืืคืื ืงืฆืื.
ืืกืืคืืจ ืขื ืชืงืฆืื ืืื ืฉืืฉืืื ืืขืืื ืืชืงืฆืื ืืืืคื ืขืงืื ืืืืืื ืืืืื ืืขืฉืืช ืคืฉืจืืช, ืืืืืืื ืคืฉืจืืช ืฉื ืจืืืช ืืืชื ืืคืฉืจืืืช ืืื ืกืืืืืฆืื ืืืจืช. ืขืืืชื ืคืขื ืขื ืืชืื ืช ืฉืืืืคื ืขืงืื ืืฃ ืคืขื ืื ืคืกืคืก ืืืืืื. ืืจืื ืืชืื ืชืื ืืืจืื ืฉืขืืืชื ืืืชื ืืขืืื ืื ืืื ืืืื ืื ืืขืฉืืช ืืช ืืคืฉืจืืช ืฉืืืชื ืืชืื ืช ืขืฉื ืืฉืืื ืืืืฉืืจ ืืชืื ืืชืงืฆืื.
ืืฉืื ืื ื ืืชืืจ ืื ืฉื ืืงืฆืืข ืืชืืืฉืืื ืืขืืื ืืืื ืืืืืช ืืจืืจืื ืขื ืขืฆืื ื ืืขื ืืืงืืืืช ืฉืื ื: ืื ืืชืงืฆืื, ืื ืืคืฉืจืืช ืฉื ืฆืืจื ืืขืฉืืช ืืื ืืขืืื ืื ืืืืืื ืืฆืืื ืืคืฉืจ ืืืฉืจ ืืืืื ืฉื ืืชืงืฆืื. ืฉืืงืืื ืชืงืฆืื ืื ืืืืืื ืืช ืฉืืื ืืืคืื ืืื ืฉื ืืงืฆืืข ืืืืื ืืืชืจ.
1 419
ืื ืืชืจืืื ืืจืืฉืื ืื ืืฉ ืืืื ืืกืืื ืืื ืคืืชืจืื ืืคืืืชืื ืืืืฆืข ืืคืืชืจืื ืืงืืงื ืื ืฉืื ื ืืฉืืชื ืขืืื - ืืคืืืชืื ืื ืืฆืจื ืจืฉืืื ืืืฉื ืืืืกืืคื ืืืื ืืช ืืืืื ืืื ืืืคืืืื. ืืงืืงื ืื ืืฉืชืืฉืชื ื filter ื map ืืื ืืืฆืืจ ืืช ืืื ืืืืชื Pipeline.
ืืืจ ืืื ืฉืืืจ ืื ืื ื ืจืืืื ืฉืืืจืื ืืืื ืืฉืคื ืืื ืฉืืื ืชืืืื ื Destructuring ืืืจืืืื ืืื ืฉื ืคืื ืงืฆืืืช, ืืืื filter ืืืืืจืช ืืงืื ืืฉืชื ื ืืืื x ืืฆืจืืื ืืืฉืช ืืืงืื ืืฉื ื ืื (ืืืงืื ืืงืื ืืื ืืืืฆืข ืืฉืื). ืืืืืจ ืืืืชื ืจืืฆื ืืืชืื ืืช ืืืืืื:
|> filter$((k, v) -> v > 1)
ืืื ืื ืื ืืื ืงืืงื ืื ืชืงื ื.
## ืืฉืืืฉ ืืกืคืจืื
ืชืจืืื ืืืจืื ืืกืืืื ืืื ืืื ืืืคืกืช ืืฉืืืฉ ืืกืคืจืื, ืืืืืจ ืืชืื ืชืืื ืืช ืฉืืืคืืกื ืืช ืชืื ืืช ืืืกืคืจืื ืืืื:
1 1 1 1 1
2 2 2 2
3 3 3
4 4
5
ืคืืชืจืื ืืฉืคืช ืคืืืชืื:
rows = 5
x = 0
# reverse for loop from 5 to 0
for i in range(rows, 0, -1):
x += 1
for j in range(1, i + 1):
print(x, end=' ')
print('\r')
ืคืืชืจืื ืฉืื ืืงืืงื ืื:
def triangle(size)= (
range(size, 0, -1)
|> map$(i -> [i, size-i + 1])
|> map$(x -> f"{x[1]} " * x[0])
|> '\n'.join)
print(triangle(5))
ืืืฉืืื ืืื ืืงืกืื ืืฃ ืคืขื ืื ืืื ืืฆื ืืืืง ืฉืื ืืื ืืคืขื ื ืจืื ืฉืงืื ืงืืงื ืื ืืืกื ืื ืืืง ืืืืืฉืืืื ืืืืคืฉืจ ืืืชืืงื ื"ืื ืฆืจืื ืืขืฉืืช" ืืืงืื ืืืื. ืืืงืื ืืืกืชืื ืขื ืืืขืื ืืชืืจ ืืืืื ืืคืืื ืื ื ืืกืชืื ืขืืื ืืกืืืจื ืฉื ืฉืชื ืคืื ืงืฆืืืช map ืฉืืืืฆืจืืช ืืช ืืขืจื ืืืืคืกื.
ืืฉ ืขืื ืืืื ืืืจืื ืฉ coconut ืืืืขืช ืืขืฉืืช ืืื ืืืคืืขื ืืื ืืืืืืืืช ืืงืฆืจืืช, ืืคืจื ืืฉ ืืื ืื ืื ืื ืื ื ืืืืื ืืคืืชืื ืืงืืืื ืืชืืืื ืืืื ืืช ื Pattern Matching (ืฉืขืืฉืื ืงืืื ืืืจ ืื ืืคืืืชืื). ืกื ืืื ืืชืืืืจ ืืขืื ืื ืืืชืจ ื ืื ืืงืื ืคืืืชืื ืืงืืื.
ืืืืืข ื ืืกืฃ ืขื coconut ืฉืืื ืืืงืจ ืืืฃ ืืชืืขืื ืืจืืฉื ืฉืืื ืืงืืฉืืจ:
https://coconut.readthedocs.io/en/master/DOCS.html.1 419
# ืืืฉ ืชืืื ืืืช coconut ืืื ืืืืืจ ืฉืคื ืืืฉื
ืงืืงืื ืื ืืื ืฉืคื ืคืื ืงืฆืื ืืืืช ืฉืืชืงืืคืืช ืืคืืืชืื ืื ืืชื ืช ืืืฉื ืืืื ืืื ืืืงืืกืืกืื ืฉื ืคืืืชืื ืืื ืืืชืื ืคืื ืงืฆืืื ืืื ืขื ืื ืืคืื ืืงืื. ืืชืงืื ืื ืืืชื ืืื ืื ืกืคืจืืืช ืคืืืชืื ืขื:
$ pip install coconut
ืืืืจื ืืืชืงื ื ืืคืฉืจ ืืืฆืืจ ืชืืื ืืืช ืงืืงืื ืื ืืชืื ืงืืฆืื ืขื ืกืืืืช coco ืื ืืืคืขืื ืืช ื interpreter ืขื ืืคืงืืื coconut ืืืืจืืฅ ืืืืืื ืงืืงืื ื. ืืืฉ ืื ืกืืืืช ืืจืฆื ื ืืื ืืขื ื ืืงืืฉืืจ: https://cs121-team-panda.github.io/coconut-interpreter/.
ืืฉืืื ืืืืืจ ืืช ืืฉืคื ืืงืืชื ืืกืคืจ ืชืจืืืื ืคืืืชืื ืื ืืกืืชื ืืืืฉ ืืืชื ืืงืืงื ืื. ืืชืืฆืืืช ืืคื ืืื:
## ืืืคืื ืื ืืืื ืืืืจืืืช
ื ืชืื ื ืืืืจืืืช:
text = 'My Name is Jessa'
ืืืชืื ืชืืื ืืช ืฉืชืืคืืก ืืช ืืืืจืืืช ืชืื ืืืคืื ืกืืจ ืืืืชืืืช ืืื ืืืื, ืืืืืจ ืืคืื ืืฆืคืื ืืืื:
yM emaN si asseJ
ืคืืชืจืื ืืคืืืชืื ืืชืื ืืชืจ ืืชืจืืื:
def reverse_words(Sentence):
words = Sentence.split(" ")
new_word_list = [word[::-1] for word in words]
res_str = " ".join(new_word_list)
return res_str
# Given String
str1 = "My Name is Jessa"
print(reverse_words(str1))
ืคืืชืจืื ืฉืื ื coconut:
def reverse_words(sentence) = (
sentence
|> .split(" ")
|> map$(n -> n[::-1])
|> list
|> ' '.join)
reverse_words("My Name is Jessa") |> print
ืืืื ืืืื ืืงืื ืคืืืชืื ืืืงืืจื ืืื ืืืืืช ืืฉืืืืฉ ื Pipeline Operator ืื ืฆืจืื ืืืืืืจ ืืฉืชื ื ืืื ืืื ืืืขืฆื ืืชืืฆืื ืฉื ืื ืคืื ืงืฆืื ืืืฉืืื ืืคืื ืงืฆืื ืืืื ื Pipeline.
## ืืืืคืช ืชืื ืกืืฃ ืฉืืจื ืืจืืืืื
ืืชืื ืชืืื ืืช ืฉืงืืจืืช ืืช ืืงืืืฅ sample.txt ืืืืคืืกื ืืช ืื ืืฉืืจืืช ืื ืืืคืจืืืช ืืจืืืืื (ืืืงืื ืืชื ืืจืืืช ืฉืืจื).
ืคืืชืจืื ืคืืืชืื:
with open('sample.txt', 'r') as file:
data = file.read().replace('\n', ' ')
print(data)
ืคืืชืจืื ืงืืงืื ืื ืฉืื:
with open("sample.txt") as file:
(file.read()
|> .replace("\n", " ")
|> print)
ืฉืื ืืืื ืืืื ืืงืื ืืืงืืจื - ืืื ืืืืืง ืืืืจื. ืงืืงื ื ืขืืืจืช ืืืชืื ืชื ืคืืืชืื ืฉืืืืจืื ืชืื ืืช ืคืื ืงืฆืืื ืืื ืืืชืื ืงืื ืืืชืจ ืืืืืืชื. ืืืืจ ืืืืื ืฉืืขืฆืื ืืื ืชืืื ืืื ืฉืืืืืื ืืืงืืฃ ืื Pipeline ืืกืืืจืืื ืื ืืืชืื ืืืชื ืืฉืืจื ืืืช.
ืืจืืง ืืขื ืืื ื ืืกืฃ ืืื ืืื ืืงืจืืื ื .replace. ืื ืื ื ืจืืืืื ืืคืืืชืื ืฉืืคื ื ืืคืขืืช ืืชืืื ืฆืจืื ืืืื ืืืืืงื, ืืคื ืืงืืงื ื ืงืจืืื ืื ืืื Partial Application ืฉื ืืคืื ืงืฆืื, ืืืืืจ ืืื ืืืืฆืจืช ืคืื ืงืฆืื ืฉืืฉืืืืข ืืืื ืืืืืงื ืืื ืคืฉืื ืชืคืขืื ืืช ืคืื ืงืฆืืืช replace ืฉืื.
## ืืืคืื ืืืืื ืืคืื
ืืืื ืชื ืืืืื:
ascii_dict = {'A': 65, 'B': 66, 'C': 67, 'D': 68}
ืืชืื ืชืืื ืืช ืฉืชืืคืื ืืช ืืืคืชืืืช ืืืขืจืืื ืืชืืคืืก:
{65: 'A', 66: 'B', 67: 'C', 68: 'D'}
ืคืืชืจืื ืืงืื ืคืืืชืื:
ascii_dict = {'A': 65, 'B': 66, 'C': 67, 'D': 68}
# Reverse mapping
new_dict = {value: key for key, value in ascii_dict.items()}
print(new_dict)
ืคืืชืจืื ืืงืื ืงืืงื ืื:
({'A': 65, 'B': 66, 'C': 67, 'D': 68}
|> fmap$((k, v) -> [v, k])
|> print)
ืืคืื ืงืฆืื fmap ืฉื ืงืืงื ื ืืื ืคืฉืื ืคืื ืงืฆืืืช map ืื ืจืืช ืฉืืคืฉืจ ืืืคืขืื ืขื ืื ืืืืืงื ืืืื ืชืืื ืขืืฉื ืืช ืืืืจ ืื ืืื. ืขื ืืืืื ืืื ืืคืขืืื ืืช ืืคืื ืงืฆืื ืขื ื items ืฉื ืืืืืื ืืื ืืขืฆื ืืืืืฃ ืืช ื Dictionary Comprehension ืฉืจืืื ื ืืคืืืชืื.
## ืืืคืกืช ืื ืืขืจืืื ืืจืฉืืื ืฉืืืคืืขืื ืืืชืจ ืืคืขื ืืืช
ืืืื ืชื ืจืฉืืื ืฉื ืืกืคืจืื:
sample_list = [10, 20, 60, 30, 20, 40, 30, 60, 70, 80]
ืืฆืืื ืืช ืื ืืคืจืืืื ืืืจืฉืืื ืฉืืืคืืขืื ืืืชืจ ืืคืขื ืืืช. ืืืืืื ืฉืื ื ืืื 20, 60 ื 30.
ืคืืชืจืื ืืงืื ืคืืืชืื:
import collections
sample_list = [10, 20, 60, 30, 20, 40, 30, 60, 70, 80]
duplicates = []
for item, count in collections.Counter(sample_list).items():
if count > 1:
duplicates.append(item)
print(duplicates)
ืคืืชืจืื ืืงืื ืงืืงื ืื:
import collections
sample_list = [10, 20, 60, 30, 20, 40, 30, 60, 70, 80]
(sample_list
|> collections.Counter
|> .items()
|> filter$(x -> x[1] > 1)
|> map$(x -> x[0])
|> list
|> print)1 419
# ืืื ืื ื ืฉืืจ
ืืฉ ืื ืืืจืื ืขืจืืื ืฉื ืฆืืืืช ืืืืืืช ืฉืืืจืืช ืงืื ืืช ืฉืื ื ืจืืืช ืืืืืืืช ืืฉืื ืฆืืจื. ืื ืื ืืคืืช ืืืืืื ืืืืืื ืช ืืืื ืืงืกืืืื ืืคืฉืจ ืืฉืื ืขื ืืืช ืืื ืฆืืืืช ืืืืจื.
ืืื ืื ืืืงืจื ืืืช ื ืืคืืช ืืืฉืืืื ืื ืกืืคืืจ ืืืจ ืืืืจื.
ืื ืฆืืืช ืืืืช ื ืฉืืจืช ืืืืืืื ืืืงืืงื ืืืืืืช ืืืืืื ืฉืื ืื ืฉืืชืคืืจืื ืืื ืืืจ ืืืืงื ืฉืขืืช ืื ืงืืช ืืช ืืืื. ืืืจื ืืคืขื ืืจืืฉืื ื ืฉืืืืชื ืืช ืื ืื ื ืืืฉื ืขืฉืจ ืคืขืืื ืืคื ื ืฉืืืฆืื ืืืช ืืืืจืื. ืื ืืื ืืืืจืื ืื ืืื ืื ืืืื ืืืืฉืืจ ืืื ืืฆื ืฉืืืืชื ืงืื ื ืืืชื ืืืืชืืื.
ืืงืฆืช ืืื ืฆืืืช, ืื ืืชืจ ืฉื ืคืจืฅ ืืืื ืืช ืืืืืข ืืคืจืื ืฉืื ื ืืืืืืื ืืืงืื ืงืื ืื, ืฉืฉืื ืืืง ืื ืืฆืืื ืืืกืืฃ ืืืืจื. ืื ืชืืื ืืฉ ืื ื ืฉืืืื ืขื ืืืจืื ืืื ืชืืื ืืฉ ืืจืืจื ืืืจืช, ืืื ืืฉืืฉ ืืื ืฉืืืื - ืฉืืื ืื ืืืฉืื ืขืฉืจ ืคืขืืื ืืคื ื ืฉื ืจืฉืืื ืขื ืืืืข ืคืจืื ืืืชืจืื. ืืฃ ืืื ืื ืืืื ืืชืื ื ืืจืืฉ ืืื ืื ืืืฉืืจ.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
