ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
Ma'lumot yo'q24 soatlar
-27 kunlar
-530 kunlar
Postlar arxiv
1 419
ืืคืขืืื ืืคื ืงืื ืืืืงื ืืืื ืืืืืช ืืืชืจ ืงืจืื
ืืืื ื ืจืื ืืืืื ืคืฉืืื ื vue ืืฆืืฆืื ืืคื ืงืื ืืื ื ื ืกื ืืจืืืช ืื ืืขืชื ื ืขื ืืฉืื ืื. ืื ื ืืชืืื ืขื ืืฉืชื ื ืืฉื seconds ืืฉื ื ืืฉืชื ืื ืืืืฉืืื ืืฉื minutes ื hours:
const seconds = ref(0);
const minutes = computed(() => {
get() { return seconds / 60},
set(minutes) { seconds.value = minutes * 60}
});
const hours = computed(() => {
get() { return hours / 3600},
set(hours) {seconds.value = hours * 3600}
})
ืืื ืื ื ืฉื ืื ืฉ minutes ื hours ืืขืฆื ืืืฉืื ืืืืชื ืฆืืจื ืื ืื ื ืืืจืื ืืืืฉ ืืช ืืงืื:
function deriveTime(start: Ref<number>, factor: number) {
return computed({
get() { return Number((start.value / factor).toFixed(2)) },
set(newValue) { start.value = newValue * factor }
})
}
const seconds = ref(0);
const minutes = deriveTime(seconds, 60);
const hours = deriveTime(seconds, 3600);
ืืืชืจ ืืื, ืืืืจ ื deriveTime ืื ืืืืช ืงืฉืืจื ืืงืืืคืื ื ืื ืื ื ืืืื ืืืขืืืจ ืืืชื ืืงืืืฅ ืืืจ ืืื ืืฉ ืื ืจืง:
const seconds = ref(0);
const minutes = deriveTime(seconds, 60);
const hours = deriveTime(seconds, 3600);
ืืืฉืืื - ืืืื API ืืื ืืืชืจ? ืืื ืืืฉืืืช:
1. ืืคืื ืงืฆืื deriveTime ืืฉื ื ืืชื ืืืืช. ืืื ืฉืืื ืืืืืื ืงืจืืื ื computed ืืื ืืืืืงื ืืชืืื ืืืขื ืกืื ืื ืืฉืืขืืชื. ืื ืื ืฉืืงืจื ืืช ืืงืื ืืฆืืจื ืืืขืช ืฉืคืื ืงืฆืื ืื ืืืืืจื ืขืจื ืืืืฉื ืืฉืืืจืช ืขื ืจืืืงืืืืืืช, ืืฉืืช ืืขืจื ืืืืืฉื ืืื ืืคืฉืจ ืื ืืฉื ืืช.
2. ืืืืืื ืืืจืืช ืืืืื ืฉื ืคืื ืงืฆืืืช deriveTime ืขื ืืงืื ืืืืฆืื ื ืืืื ืืืชืจ ืืชืืืืืืืืช ืืื ืฉืจืืืื ืืจืฉืืืช ืืคืจืืืจืื.
3. ืื ืืคืื ืงืฆืื ื ืืฆืืช ืืฉืืืืฉ ืืืจืื ืืงืืืืช ืืงืื ืืืขืจืืช ืืฉ ืืืืื ืืืืกืืฃ ืื ืืช ืืืืขื ืืกืื ืื ืืื. ืืืืื ืื ืื ืฉืืงืจื ืืช ืืงืื ืฆืคืื ืืืืืจ ืืืชื. ืืื ืฉืืื ืคืืืช ื ืืฆืืช ืืฉืืืืฉ ืืื ืขืืืื ืืืืื.
4. ืคืืชืจืื ืืื ืืืื ืืืืกืืฃ ืชืืขืื ืืืชืจ ืืงืจืืื ืฉืืกืืืจ ืื ืงืืจื ืคื, ืืฉืื ืืื:
const seconds = ref(0);
// create reactive modifiable computed refs for other time units:
const minutes = deriveTime(seconds, 60);
const hours = deriveTime(seconds, 3600);
ืืฆื ืฉื ื ืืื ืฉืืืกืืจ ืืชืืขืื ืืืชืจ ืืจืื ืืืื ืขืืืฃ ืืืืฉืืจ ืขื ืืงืื ืืืงืืจื.
ืคืืชืจืื ืืื ืืื ื ืืกืฃ ืฉืืืื ืืขืืืจ ืืื ืืื ืืืขืืืจ ืจืง ืืช ืืฆืืจืช ืืืืืืงื ืืคืื ืงืฆืื ืืื ืืืฉืืืจ ืืช ืืงืจืืื ื computed ืืืชืจ ืืงืจืืื ืืืืืจ:
const seconds = ref(0);
const minutes = computed(deriveTime(seconds, 60));
const hours = computed(deriveTime(seconds, 3600));
ืืชืืื ืืืืช ืืฉืืืจื ืืช "ืืืืช ืืืคืชื" computed ืืืงืื ืืืื ืืื ืื ืื ื ืืืืขืื ืื ืื ืื ื ืืืฆืจืื. ืขืืืื ืื ืืืจืกื ืืืช ืืกืชืืจื ืืช ืืขืืืื ืฉืืืืืืงื ืืืื ืื getter ืืื setter ืืืื ืืคืฉืจ ืืฉื ืืช ืืช ืืืงืืช ืืืฉืขืืช.
ืืืฆืืช ืงืื ืืคืื ืงืฆืื ืืื ืืื ืืข ืืืจื ืืื ืืจืื ืคืขืืื ืจืขืืื ืืื. ืืื ืืืคืฉืจืช ืชืืืืงื ืืืื ืืืชืจ ืฉื ืืงืื ืืชืืงืื ืืขืืืช ืจืง ืืืงืื ืืื. ืืฆื ืฉื ื ืืฉืื ืื ื ืืกืชืืจืื ืงืจืืื ืืคืื ืงืฆืืืช ืืืื ืฉื ืืคืจืืืืืืจืง ืืชืื ืคืื ืงืฆืืืช ืขืืจ ืฉืื ื ืืชืืฆืื ืขืืืื ืืืืืช ืงืื ืืืืื ืืืชืจ ืืจืง ืืืงืฉืืช ืขื ืืชืืืืงื.
ืื ืืขืชืื? ืืืฆื ืืื ืืืืชื ืืฉืชืืฉืื ืืคืื ืงืฆืืืช ืขืืจ, ื ืฉืืจืื ืขื ืืงืื ืืืคืื ืื ืืืืจืื ืคืืชืจืื ืืืจ?1 419
ืืฉืืงืื ืขื Embeddings
ืืืฅ ืืฉืืืืช, ChatGPT ืื ืืืืข ืืืฉื ืืฉืื ืฉื ืงืจื Embedding ืืื ืืงืกื ืฉื ืืชื ืื. ืืืืืื ื ืื ืืขืฆื ืืงืืืจ ืฉื ืืกืคืจืื ืฉืืืืฆื ืืืคื ืืืื ืฉื ChatGPT ืืืงืกื ืืื ืืืฉื, ืื ืืคืฉืจ ืืืืืื ืืช ืืืื ืฉื ChatGPT ืืชืืจ ืืจืื ืจื ืืืืื ืฉื ืืงืกืืื. ืืขืืจืช ืืงืืืจ ืืื ืืคืฉืจ ืืคืขืืื ืืืฆืื ืืืจืื ืฉืงืฉืืจืื ืืื ืืฉื ื, ืื ืื ืื ืจืื ืืืื "ืงืจืืืื" ืืืืชื ืืจืื ืจื ืืืืื.
ืืคืืกื ืืืื ืืืืชื ืื ืกืืช ืืืฉื Embeddings ืืืจืืืช ืื ืื ืืขืืืจ ืื ืืืืืช ืคืืกืืื ืืืืืื ืฉืงืฉืืจืื ืืคืืกื ืืกืืื. ืืืกืงื ื ืืื ื ืื ืืฉืืขืืช ืืื ืื ื ืืงืืื ืฉืืืจื ืชืืื ืืขื ืืื ืช.
ืืื ืืืฉืืื Embedding
ืืจืขืืื ืืจืืฉืื ืืืื ืืืื ืคืฉืื ืื ืฉืืฉืืื ืืืฉื Embedding ืจืง ืฆืจืื ืืฉืืื ืืงืกื ืืืืื ืฉืคื ืืืื, ืืืงืจื ืฉืื ื ื ChatGPT. ืื ื ืืจืืื ืื ืืงืืชื ืกืคืจืื ืฉื ืงืจืืช ruby-openai ืืืฉืชืืฉืชื ืืงืื ืฉื ืจืื ืืื:
response = client.embeddings(
parameters: {
model: "text-embedding-3-large",
input: "The food was delicious and the waiter..."
}
)
puts response.dig("data", 0, "embedding")
ืืฉืืื ืืืฉื Embeddings ืขื ืคืืกืืื ืืคืขืืชื ืืช ืืงืื ืืื ืขื 100 ืืคืืกืืื ืืืืจืื ืื ืฉืคืจืกืืชื:
sources = blogPost.last(100).map(&:markdown_source)
embeddings2 = sources.map do |s|
client.embeddings(parameters: {model: "text-embedding-3-large", input: s })
end
ืืืืจื ืืืชื ื ืงืฆืจื ืงืืืืชื ืืขืจื ืฉื 100 ืืืืืื ืืก ืขืืืจ 100 ืคืืกืืื ืืืจืื ืื ืืืืืื.
ืืจืืง ืืื Embeddings
ืจืืืชื ืืจืฉืช ืื ืืื ื ืืจืืื ืืืฉื ืืจืืงืื ืืื Embeddings ืืื ื ืฉืืข ืฉืืคืืคืืืจืืช ืืืืชืจ ืืืฆืื ืืืจืื ืฉืงืฉืืจืื ืืื ืืฉื ื ื ืงืจืืช cosine similarity. ืืืืชื ื ChatGPT ืืืืงืฉืชื ืืื ื ืฉืืืชืื ืื ืคืื ืงืฆืื ืืจืืื ืืืฉื ืืช ืื ืืื ืฉื ื ืืงืืืจืื:
def cosine_similarity(vec1, vec2)
dot_product = vec1.zip(vec2).map { |a, b| a * b }.sum
magnitude1 = Math.sqrt(vec1.map { |v| v**2 }.sum)
magnitude2 = Math.sqrt(vec2.map { |v| v**2 }.sum)
dot_product / (magnitude1 * magnitude2)
end
ืืชืืฆืืืช
ืขืืฉืื ื ืฉืืจ ืจืง ืืฉืืง ืขื ืืืกืคืจืื. ืืืืืื ืืงืืชื ืืช ืืคืืกื ืืืืจืื ืฉืคืืจืกืืชื (ื ืืกืื ืืชืืืช Directives ืืจืืืงื) ืืืืคืฉืชื ืืืื Embeddings ืืื ืืืกืืช ืงืจืืืื ืืืื, ืืืืืจ ืืืจืืง ืืืื ื 0.5:
distances = embeddings2.map {|i| cosine_similarity(embeddings2[-1]["data"][0]["embedding"], i["data"][0]["embedding"])
}
distances.each_index.select {|i| distances[i] > 0.5 }
ืืชืืฆืื ืืืื ืื ืืจืื ืคืืกืืื:
1. ืืื ืขืืื ืคืจืืืงื Rails ืขื ESBuild
2. ืื OpenAI ืขืืจื ืืจืืืงืก
3. ืืืฉ ืืงืืช ืขื flet
4. ื ืืกืื ืืื ื - ืื ืืคืฉืจ ืืขืฉืืช ืืืื ืขื Deno ื next.js
5. ื ืืกืื ืจืืืืก: ืืฉืืง ืืืงืก ืขืืืื
6. ืืฉืชืืฉื ืืืืื ืกืคืจืืืช ืฉืชืจืฆื
7. ืืืค LLM - ืืื ืื ืขืืื ื X ?
8. ืจืืืงื ืื Vue - ืืืืื ืืจื ืืืง ืงืฆืจ
9. ืืื ืื ื ืืืจ
10. ื ืืกืื React - ืืื ืืื Directives?
ืื ืืืคืฉืื ืจืง ืคืืกืืื ืฉืืืจืืง ืฉืืื ืืืื ื 0.6 ืืงืืืื ืจืง ืืช ืืคืืกื ืืืงืืจื ืืืช "ืจืืืงื ืื Vue - ืืืืื ืืจื ืืืง ืงืฆืจ". ืฉืื ืืืชืจ ืืืืื ื ืื ืืืืืจ ืขื ืฉื ื ืคืืกืืื ืฉืืฉืืืื ืืื ืจืืืงื ื Vue ืืืืืืืช ืฉืื ืืช.
ืืืจื ืื ืืงืืชื ืืช ืืคืืกื "ื ืืกืื ืืื ื - ืื ืืคืฉืจ ืืขืฉืืช ืืืื ืขื Deno ื next.js" ืืืืคืฉืชื ืืืืชื ืฉืืื ืคืืกืืื ืงืฉืืจืื. ืืืขืชื ื:
1. ื Killer Feature ืืืืฉ ืฉื node.js (ืื: ืืื ืื ืืกืืฃ ืฉื ืืื ื?)
2. ืืื ื ืืื ืื ืื ืฉืจืฆืืชื ื express
3. ืื OpenAI ืขืืจื ืืจืืืงืก
4. ืืืืืช ืืื ื: ืฉืืืจืช ืชืืื ืืช ืืืืงืืคืืื
ืฉืื ืืืจ ืื ืืืฆืื.
ืืฆืขื ืืื
ืขืืฉืื ืฉืืชืฉืชืืช ืืืงืื ืืคืืื ืื ืื ืืืฉืืืช ืื ื ืืงืืื ืืงืืช ืืช ืื ืฆืขื ื ืืกืฃ ืงืืืื ืืืืชืืื ืืืฉื Embeddings ืฉื ืคืืกืืื ืืฉืื ื ืืขืื ืืืชื ืืืชืจ ืืืฉืืืจ ื DB, ืืื ืืืจืืฅ ืืืฉืื ืืจืืื ืขื ืื ืืคืืกืืื ืฉืืืจ ืคืืจืกืืชื (ืืคืืืช ืืฉื ื ืืืืจืื ื). ืืืจื ืฉืื ืืืื ืืืงืื ืืคืฉืจ ืืืื ืืืืกืืฃ ืงืืคืกืช "ืคืืกืืื ืงืฉืืจืื". ืขืืืื ืื ืืจืืจ ืื ืื ืืขืืื, ืืื ืื ืืกืื ืืืื ืืจืื ืฉืืฉ ืกืืืื.1 419
ื ืืกืื React - ืืื ืืื Directives?
ืืื ืืื ืื ืื ืื ืืืืืืื ืฉื Vue ืืื ื Directives ืฉืืืคืฉืจืื ืืืชืื ืคืืืช ืงืื ืืงืื ืืชืื ืืช ืืืงืืช ืืืงืื ืฉื ืงืื ืฉืืฉืคืืขืื ืขื ื DOM ืืื ืืืฉืชืืฉ ืืื ืืืื ืืงืืืืช. ืืฉืืื ืืืฉืืง ืืืื ื ื ืกื ืืื ืืช ืืฉืื ืืืื ืืจืืืงื.
ืื ืื Directives
ืืืช ืืชืืื ืืช ืฉืื ืฉืื ืืืืืื ื Vue ืืื ื Directives. ืืงืฆืจื ืืืช ืืืืืืช ืืืชืื ืืืคืืื ืืชืื ืืืื ื ืืืงืื ืืชื ืืืืช ืืกืืืืช ืขืืืจ ืืืืคืืื ืืื. ืืืืืื:
<p v-if="seen">Now you see me</p>
ืืืืคืืื v-if ืืื ืืืคืืื ืืืืื ืืกืื ืื. ืืื ืืืื "ืงืื" ืฉืจืฅ ืื ืคืขื ืฉืฆืจืืืื ืืจื ืืจ ืืช ืืืืื ื ืืืงืื ืืื ืืืื ืืฉื ืืช ืืช ืืืืื ื ืื ืืคืืื ืืืืฆืื ืืืชื ืืืืจื ืืืขืฅ. ืืืืืื ืฉื v-if ืื ืืืฉืชื ื seen ืืื ืืืืชื ืืืืื ื ืืืคืืข ืืื ืืื "ืฉืงืจ" ืื ืืืืื ื ืื ืืืคืืข. ืื ืขืืฉืื ืืืื ืืืจืื ืขื Directives ื Vue ืืื ืื ืฉืืฉืื ืืงืืช ืืืื ืื:
1. ืืืจืงืืืืก ืืืคืฉืจืื ืืืฉืคืืข ืขื ืงืืืคืื ื ืื ืืืืืฅ, ืืื ืงืฉืจ ืืงืื ืฉื ืืงืืืคืื ื ืื ืขืฆืื (ืื ืืืืชื ืฆืจืื ืืืขืช ืืงืื ืฉื p ืืฉืืื ืืืืืช ืืกืืื ืืืืกืืฃ ืื v-if).
2. ืืคืฉืจ ืืืืกืืฃ ืืืจืงืืืืก ืืื ืงืืืคืื ื ืื.
3. ืืืจืงืืื ืืื ืืืง ืืงืื ืืงืืืคืื ื ืื ืฉืื ืืชืื ืืชืืื ืืืชืืืกืฃ ืื ืืืกืจ ืืฆืืจื ืฉื ืืจืืื.
ืืืืืืช ืืจืืืงื
ืื ืืืืชื ืื ืกืืช ืืืชืื ืืฉืื ืืืื ืืจืืืงื, ืืคืืืช ืืช ืืจืขืืื. ืืชืืืชื ืืืงืื ืืื ืืงืืืคืื ื ืื ืืจืืฉืืช App:
function App() {
const [count, setCount] = useState(0)
return (
<>
<div>
<Text v-if={count % 2 == 0}></Text>
<Text v-highlight={true} v-if={count % 2 == 0}></Text>
<button onClick={() => setCount(c => c+1)}>{count}</button>
</div>
</>
)
}
ืืืืจ ืคื ืื ื ืืืื ืืช ืืืืืืืช ืฉืื. ืืื ืื ืืื ืืืฉืคืืข ืขื ืงืืืคืื ื ืืืช ืืื p ืื div ืื ืื ืงืืืคืื ื ืื ืืืื ืืช ืืืจืช ืืจืืืงื. ืืืืจืื ืืืืืืื ืฉืื ื ืืืื ืืืฉืคืืข ืขืืืื ืื ืงืืืคืื ื ืืืช ืฉืื ื ืืื ื, ืืืื ืืฉืืื ืื ืกืืช ืืืชืื Directives ืืฆืจืชื ืงืืืคืื ื ืื ืืฉื Text ืฉืืฆืืื ืืงืกื.
ืื ื ืื ืืืืข ืฉืืฉืืื ืืืืกืืฃ ืชืืืื ื Directives ืฆืจืื ืืืืื ืก ืืงืื ืืงืืืคืื ื ืื, ืืื ืื ื ืื ืจืืฆื ืืขืฉืืช ืืช ืื ืืื ืงืืืคืื ื ืื ืืืขืจืืช ืืื ืืฆืจืชื ืคืื ืงืฆืื ืฉืขืืืคืช ืืืืจื ืฉื ืงืืืคืื ื ืืืช:
const Text = directify((props) => {
return <p>Hello World</p>
});
ืื ืขืื ืื ื ืืืืืจ ืงืืืคืื ื ืืืช ืขื ืืคืื ืงืฆืื directify ืืคืฉืจ ืืืื ืืืืกืืฃ ืืื Directives.
ืงืื ืืคืื ืงืฆืื ืืื ืื ืคืฉืื ืื ืื ืจืง ืคืืกื ืืืืื, ืืืืื ืฉืื ืชืจืฆื ืืงืืช ืืช ืืจืขืืื ืืื ืืื ืื ืื ืืืืชื ืชืฆืืจืื ืืืฉืื ืงืฆืช ืืืชืจ ืืขืืืง ืขื ืกืืจ ืคืขืืืืช ืืืชื ืืคืขืืืื ืืช ืงืื ื Directive. ืืื ืชืืื ืืชืืชื ืืช ืื:
export const Directives = {};
export function directify(c) {
return (props) => {
let el = c(props);
for (const [directiveName, directive] of Object.entries(Directives)) {
if (directiveName in props) {
if (el) {
el = directive(el, props[directiveName]);
} else return el;
}
}
return el;
}
}
ืืคืื ืงืฆืื ืืงืืืช ืงืืืคืื ื ืื, ืืคืขืืื ืืืชื ืืืขืืืจื ืืช ืืชืืฆืื ื Directives. ืืื ืืคืื ืงืฆืื ืืฉ ืืืืืืงื ืืืืืืื ืฉื Directives.
ื Directives ืขืฆืื ืืืืืืืงื ืืืืืืืื ื ืจืืืช ืื:
Directives['v-if'] = (el, value) => {
if (value) {
return el;
} else {
return false;
}
}
Directives['v-highlight'] = (el, value) => {
return cloneElement(el, {
style: {
...(el.props.style),
backgroundColor: 'yellow',
}
})
}
ืื ืื ืื ืขืืื, ืืื ืฆืจืื ืขืื ืืจืื ืขืืืื. ืืคืืื ืืืืืื ืืงืื ื ืฉื ื v-if ืฆืจืื ืืืืื ืฉ v-if ืืืืจ ืืจืืฅ ืืคื ื ืฉืืจื ืืจืื ืืช ืืืืื ื ืืื ืืื ืืืืืจ false ืื ืื ืฆืจืื ืืจื ืืจ ืืช ืืืืื ื ืืืื. ืืฆื ืฉื ื v-highlight ืขืืื ืืืกืืช ืืกืืจ. ืื ื ืื ืืืื ืืื ืืืืืื ืืช v-for ืืื ืื ืืืื ืืืืืช ืชืจืืื ืืขื ืืื.
ืืืืกืจืื ืืื ืืืื ืืื ืฉืื ืืคืฉืจ ืืืืกืืฃ Directives ืืืจื ืืืืช ืืืืื ืืื ืืืืื ืื ืืจืืืงื, ืืื ื ืฆืืจื ืื ืืืฆืืจ ืืืจืกื "ืชืืืืช Directives" ืฉื ืื ืืงืืืคืื ื ืืืช ืืืืื ืืช.
ืกืคืจืื ืืขื ืืื ืช ืฉืืืื ืืืืืื ืืื ืืื react-directive. ืฉื ืื ืืชืืงืื ืืืืกืคืช ืชืืืื ื Directives ืืืืื ื div ืืืื ืืืืืืฉ ื Directives ืืืืื ืื ืืื ืืื ืืช ืชืฉืชืืช ืืืจืืื ื Directives ืฉืื ื.1 419
ืืื ืื ื ืืืจ
ืืืฉืื ืืจืืื ืฉืื- ืืฉ ืื ื ืืืคื ืืืืงืืช ืื ืืื ืืคืจืืืงื ืจืืืงื ืืื ื ืจืืื ืฉืื ืืื ืืืจ ืื ื ืชืื ืืจืง ืืืื ืืืืืงืืช ืื ืื ื ืชืงืืขืื ืขื ืืืจืกื ืืฉื ื ืฉื ืจืืืงื. ืื ืขืืฉืื?
ืืืืชื ืฉืืื ืืืืจืช ืื ืืืื ืืืืื ืกืืฃ ืืืจืกืืืช ... ืื ืขืืฉืื ืขื ืืคืืืงืฆืืืช ืื ืืืืจ1? ืื ืืงืจื ืขื ืืคืืืงืฆืืืช ื next.js ืฉืื ืืืขืืจ ื App Router? ืื ืขืืฉืื ืขื ืื ืืงืืืกืื ืืฉืืฆืื React Hooks? ืื ืขืืฉืื ืขื ืืชืจ ืืคืืืฉ? ืืกืืืืจืืืื? ื Java Applet?
ืืืืืงืืช ืื ืขืื ืืืืง ืืงื. ืื ื ืขืื ืืื ืืคืฉืจ ืืืืืง ืืช ืื ืืืืืงืืช ืืืืชืืื ืืืชืื ืืืืฉ ื React Testing Framework. ืืคืขืืื ืฆืจืื ืืขืืื ืงืื ืืืคืขืืื ืืืชืื ืืืฆืจ ืืืฉ ืืืคืก.
ืืฉ ืฉืืืืื ืฉืฉืื ืืืื ืืืื ืื ืืกืืื ืืืชืื Micro Services. ืื ื ืื ืืืืฉื ืืืืช. ืฉืื ืืืื ืืจืกืืืื (ืคืจืืืืืืจืง ืฉืื ืื ืขืืื ืืืชืจ) ืืื ื ืคืชืืืืืื, ืืืืขื ืชืืื ืืคืฉืจ ืืฉืืชื ืืืจืื ืืืืจืื ืื ืจืง ืืืง ืืืืืฆืจ. ืืกืืฃ ืื ืื ื ืืืื ืืขืืื ืืื ืื ืืืืื ืืืืืจ ืืืืฉืื ื ืืฆืจื ืืกืืื - ืืจืื ืคืขืืื ืืชืืื ืืืืฉ ืฉื ืืืชื ืงืื ืขื ืืืืื ืืืืฉืื ืชืืื ืืจืื ืืืชืจ ืืืืจื ืืืืชืืื ืืคืขื ืืจืืฉืื ื, ืื ืืืื ืฉืื ืื ื ืืืืขืื ืืืชืจ ืืื ืื ืืขืฉืืช ืืื ืืืื ืฉืืืืื ืืืืฉืื ืคืฉืืืื ืืืืืื ืืืชืจ.
1 419
ืจืืืงื ืื Vue - ืืืืื ืืจื ืืืง ืงืฆืจ
ืืจืื ืื ืฉืื ืืืืจืื ืขื ืขืงืืืช ืืืืืื ืฉื ืจืืืงื ืืืฉืืืื ื Vue ืืืฉ ืืื ืืฉืื. ื ืืื ืืจืืืงื 18 (ืืืืืจ ืืคื ื ืฉ Suspense ืืืื ืืืจ ืืืื ืืืคื ื use ืืืืขืืืช ืฉืื), ืืืชืืจ ืืื ืืืื ืขื ืจืืืงื ืืื useEffect. ืืืื ื ืจืื ืืืืื ืงืฆืจื ืฉื ืืคืงื ืืืฉืืืื ืืื ืฉืชื ืืกืคืจืืืช ืืื ืืืืื ืงืฆืช ืืช ืืจืื ืืืืืืืืืืช ืฉื ืื ืืืช.
ืจืืืงื: ืืงืฉืื ืืชื ืืขืช ืขืืืจ
ืืืืืื ืื ื ืืืชื Hook ืฉืืงืฉืื ืืชื ืืขืช ืขืืืจ ืืื ืืืฆืื ืืช ืืืืงืื ืื ืืืื ืฉื ืืขืืืจ ืืืืฆืข ืืืกื. ืื ืืงืื ืฉื ื Hook ืืืงืืืคืื ื ืื ืฉืืฉืชืืฉืช ืื, ืืฉืืื ืืคืฉืืืช ืืืืชื ืงืืืฅ:
import { useEffect, useState } from 'react'
import './App.css'
function useMousePosition() {
const [position, setPosition] = useState([0, 0]);
useEffect(() => {
function handleMove(ev: MouseEvent) {
setPosition([ev.clientX, ev.clientY]);
}
window.addEventListener('mousemove', handleMove);
return () => {
window.removeEventListener('mousemove', handleMove);
}
}, [])
return position;
}
function App() {
const position = useMousePosition();
return (
<h1>Position: {position[0]}, {position[1]}</h1>
)
}
export default App
ืืืืื ืช ืืงืืืคืื ื ืื ืืฉืืืืฉ ื Custom Hook ื ืจืื ืืืื ืคืฉืื, ืืืงืืืคืื ื ืื ืืืืืช ืืกื ืืื ืืช ืฉืืจืช ืืืืจืช ืืืฉืชื ื ืืืช ืืชืื ืืช. ืืืืืช ืืืืคืกืงืจืืคื ืื ืื ื ืืืืขืื ืฉ position ืืืจืื ืืฉื ื ืืกืคืจืื, ืืื ื Hook-ืื ืืืชืจ ืืกืืืืื ืืืืคืกืงืจืืคื ืืืื ืืขืืืจ ืืืืืจ ืื ืืืืืง ืืืืจ ืืืคืื ืงืฆืื.
ืืืืื ืช ืงืื ื Hook ืืฉ ืคื ืงืฆืช ืืืชืจ ืืชืืจ ืืืื ืืืื ื ืฉื useState, useEffect ืืืงืฉืจ ืืื ืืื:
1. ืคืื ืงืฆืืืช useState ืืืืืจื ืืฉืชื ื ืืคืื ืงืฆืืืช ืขืืืื ืืืืชื ืืฉืชื ื. ืืืงืจื ืฉื ืืขืจืืื ืื ืืืืื ืืฆืจืื ืืืืืจ ืฉืื ืืคืฉืจ ืคืฉืื ืืฉื ืืช ืขืจื ืืืื ืืชืืื ืฉื ืืืขืจื, ืืื ืชืืื ืืงืจืื ืืคืื ืงืฆืืืช ืืขืืืื.
2. ืืืชืจ ืืืืื ืืื ืืืืฉืง ืฉื useEffect, ืืืื ืฉืืื ืืืืืง ื-3 - ืืคืื ืงืฆืื ืืจืืฉืื ื ื ืงืจืืช ืืื ืืืฆืืจ ืืช ืืืคืงื, ืืคืื ืงืฆืื ืืฉื ืืื (ืฉืืืืจืช ื useEffect) ืฆืจืืื ืื ืงืืช ืืช ืืืคืงื ืืืขืจื ืืชืืืืืช ืฉืงืืืข ืืชื ืืืฆืืจ ืืืืฉ ืืช ืืืคืงื. ืื ืืื ืืืืืงืื ืืืจืื ืืื ื ืืชื ืืืฉืืื ืืื ืืืง ืฉืฉืืืืื ืืืชืื ืืืื ืืืืื ืืชืืฆืืืช ืืืืจืืช.
ืืืจืกืช Vue
ืืืชื ืืืืื ืืืืจืกืช Vue ืื ื ืจืืืช ืืืชืจ ืืื ืฉืื ื, ืืื ืืชืืื ืืืื:
<script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue'
function useMouse() {
const position = ref([0, 0])
function update(event: MouseEvent) {
position.value = [event.clientX, event.clientY];
}
onMounted(() => window.addEventListener('mousemove', update))
onUnmounted(() => window.removeEventListener('mousemove', update))
return position;
}
const position = useMouse();
</script>
<template>
<h1>{{ position[0] }}, {{ position[1] }}</h1>
</template>
ืืงืืืคืื ื ืื ืืืืืจื ืืช position ืืชืืจ ref ืืืงืื ืืชืืจ useState, ืืืขืืืื ืฉืื ืืชืืฆืข ืขื ืืื ืืฉืื ืืืืคืืื .value. ืื ืืื ืื ืืคืฉืจ ืืฉื ืืช ืจืง ืชื ืืื ืืืขืจื ืืื ืืืื ืืืืืช ืืืืื.
ืืฉืื ืื ืืืืชืจ ืืืื ืืื ืืืืฉืง ืฉื ื Hook - ืืคืขื ืืืงืื ืืืฉืชืืฉ ืืคืื ืงืฆืื ืืืช ืื ืื ื ืงืืจืืื ื-2, ืืคืื ืงืฆืื onMounted ื onUnmounted, ืืคื ืื ืืืคืชื ืืืืื ืืช ืืืืืืื ืืื ืืกืคืจืืืช. ืืขืื ืฉืจืืืงื ืืื ืืกื ืืช ืืืืื Effect ืืชืืจ ืืืกืฃ ืฉื 3 ืืืงืื, ื Vue ืืืื ืขื ืืืฉื ืืืชืจ Low Level ืื ืื ืื ื ืคืฉืื ืืืืืจืื ืืืื ืงืื ืืืคืขืื ืืชื. ืืืืชืจืื ืืืืฉื ืืื ืืคืฉืืืช ืืขืงืืืช ืืืืืื ืืืืชืจ ืงืื, ืื ืื ืฆืจืื ืืืฉืื ืื ืื ืืคืงื ืืืชื ืืื ืื ืื ืืื ืืืฉืชืืฉ ืื, ืืื ืืืืกืจืื ืืื ืฉืืฉ ืืืชืจ ืืงืื ืืืขืืืืช ืืฉืฆืจืื ืืืฉืื ืืืฉื ืืืืื ืืฆืืื ืจืืฆืื ืืืฆืืจ ืืืืฉ ืืช ื Event Handler. ืืงืฉืจ ืืื onMounted ื onUpdated ืืืื ืืืืืช ืืกืืจืื ืืืชืืื ืืืื ืืจืืืงื ืขืืจื ืืืืื ืฉื Lifecycle ืืืืื ืฉื ืืคืงืืื, ืืื ืืฆื ืฉื ื ืืืืื ืืืืฉ ืืจืืืงื ืืฆืจ ืขืงืืืช ืืืืื ืืจืื ืืืชืจ ืืฉืืขืืชืืช ืืืคืจืกืคืงืืืื ืฉื ืืฉื ืื ืฉืขืืจื ืืื ืืฆืืจืช ืืืืื ืื ื ืื ืืืื ืฉืื ืืื ืจืขืืื ืืื.
ืื ืืขืชืื? ืืืื ืืืืืฉืืช ืืืืชื ืืืชืจ? ืืืืื ืืืคืืื ืื ืืืืืืืื ืฉื ืื ืกืคืจืื ืืชื ืืืืืื?1 419
ืืืค CSS: ืืืชืจืืช ืืืืงืืช ืืืืื
ืืขืจื sticky ืฉื ืืืคืืื position ื CSS ืืืื ืืืกืื ืืจืื ืืื ืจืืฉ ืืฉืจืืฆืื ืืื ืืช ืืืื ืขื ืืืชืจืืช ืืืืงืืช - ืืืืืจ ืืืื ืขื ืคืกื ืืืืื ืื ืฉืืจืช ืืืืชืจืช ื ืฉืืจืช ืชืืื ืืืขืื (ืืื ืืืงืกื) ืืฉืืืืืื ืืืื ืืื ืฉืืคืฉืจ ืืืื ืืจืืืช ืืช ืฉืืืช ืืขืืืืืช, ืืืืืชื ืืืคื ืืขืืืื ืืจืืฉืื ื ืชืืฉืืจ ืชืืื ืขื ืืืกื ืืฉื ืืืื ืืฆืืื. ืื ืืงืื ืืงืฆืจื:
thead {
position: sticky;
top: 0;
z-index: 2;
}
th:first-child, td:first-child {
position: sticky;
left: 0;
}
td:first-child {
background-color: white;
}
th {
background-color: #f2f2f2;
}
ืืืื ื ืขืืืจ ืขื ืื ืืืืคืืื ืื:
1. ืืืืคืืื position: sticky ืืืจื ืืืืื ื "ืืืืืืง" ืืืืงืื ืืกืืื ืื ืืืืื ืชืืจืื ืื ืืฆืืช ืืืืกื. ืื ืืืืืง ืืืคืงื ืฉืื ืื ื ืจืืฆืื ืืืืชืจืืช ืฉื ืืืืื. ื thead ืืืืจืชื ืฉืืืืืง ืืืืง ืืขืืืื ืืขืืจืช top ืืื td ืฉืืื ืืื ืจืืฉืื, ืืืืืจ ืื ืืขืืืื ืืจืืฉืื ื, ื ืืืงืช ืืฆื ืฉืืื.
2. ืืืืจืช z-index ืขื thead ืงืืขื ืฉืฉืืจืช ืืืืชืจืช ืืขืืืื ื ืชืืคืืข ืืขื ืขืืืืช ืืืืชืจืช ืืื ืฉื ืืขืืืื ืืจืืฉืื ื ืื ืืืกืชืจ ืืืืืื ืืืื ืขื ืืื ืืขืจืืื ืฉื ืืขืืืื.
3. ืืืื ืืื ืฉืืืืืจืื ืืชืืจ sticky ืืืคืืขื "ืืขื" ืืืื ืืื ืืืจืื ืืืื ืฆืจืืืื ืืืืจืช ืฆืืข ืจืงืข ืื ืืืจืช ื ืืื ืืจืืืช ืืช ืืืงืกื ืฉื ืืฉืืจืืช ืืฉืื ืขืืืจืืช "ืืชืืช" ืืฉืืจืช ืืืืชืจืช ืื ืฉื ืืขืืืืืช ืืฉืื ืขืืืจืืช "ืืชืืช" ืืขืืืืช ืืืืชืจืช.
ืืขืืืชื ืืงืืืคื ืืช ืืงืื ืืืื ืขื ืื ื CSS ืื HTML ืฉื ืืืืื ืืืืื ืื ืืฉืืง ืขื ืื ืืงืืฉืืจ:
https://codepen.io/ynonp/pen/zYgWKOM
ืื ืืืืืข ืืื:
<iframe height="400" style="width: 100%;" scrolling="no" title="Untitled" src="https://codepen.io/ynonp/embed/zYgWKOM?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/ynonp/pen/zYgWKOM">
Untitled</a> by Ynon Perek (<a href="https://codepen.io/ynonp">@ynonp</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>1 419
ืกืืจืืื
ืืืื ืืฉืื ืื ืฉืืจืื ืืขืืืช ืืืืืช ืืืืข ืื ืืขืฆื ืืขืืืช ืชืืืื ืฆืืคืืืช. ืืื ืืกืคืืง ืฉืกืืจืืื ืืืชื ืืฆืืื ืคืืค-ืืค ืืคื ื ืฉืืชืืฃ ืืกืืื ืฉืืืืจ ืืฉืื ืืื-
> ืืชื ืขืืื ืืฉืชืฃ ืืืืข ืขื ืืกืืื ืจืืฆื ืฉืืืฆืขืช ืขื ืืืื ืืจื ื. ืฉืื ืื: ืื ืื ืืื ืืืจ ืฉืจืฅ ืืช ืืืชื ืืกืืื ืืืื ืืจืืืช ืืช ืืคืจืืื ืฉืื ืืืช ืื ืืืกืืืืื ืืืืจืื ืืื ืจืฆืช. ืืื ืืชื ืืืื ืฉืืชื ืจืืฆื ืืืืฉืื?
ืืืืื ืืขืฆื ืืืฉ ื Product ืฉืืื ืื ืกื ืืืืช ืืืืขื ืืื ืืืื ืฉืฉืืชืืฃ ืืื ืืื ืฉืืืจ ืืืืื ืืขืืืช ืืืืื ืืืื ืืช ืืื ืืื ื ืืกื ืืืืชื ื ืคืืฆ'ืจ ืจืืืื ืืืืชืจ.
1 419
ืืืค ืืืืืื ืืขืืืช ืงืื ืคืืืืจืฆืื ืฉื Apache
ืื ื ืืืืข ืืชื ืืืจ ืื ืืฉืชืืฉืื ื Apache, ืืฉ ืืื nginx ืื ืฉืืชื ืฉืืื ืืช ืืคืจืืืงืืื ืฉืืื ืขื vercel ืื AWS ืืื ืืืื ืืชืืืง ืฉืจืชืื ืืืืื ื. ื ื, ืื ื ืฆืืืง. ืืืื ืื ืฉืื ืืชืืืงืื ืฉืจืชืื, ืืืืจืื ืืื ืจืฅ ืขืืืื Apache. ืืืืช ืืืขืืืช ืขื Apache ืืื ืฉืืืืขืืช ืืฉืืืื ืฉืื ืื ืชืืื ืงืืืืืช ืื ืื ืืืืืงืืช.
ืื ืื ืืืืืื ืืฉ ืื ืงืืืฅ ืงืื ืคืืืืจืฆืื ื Site ืขื ืืขืืช, ืืคืขืืื ืืคืืฆ'ื ืืกืจื ืืขืืืช. ืืคืขืืื ืืื ืืกืคืจ ืคืจืืื ืขื ืืืขืืช ืืืคืขืืื ืืื ืคืฉืื ืืขืืืจ ืืช ืืชื ืืขื ืฉื ืฉืืื ื Site ืืื ื Site ืืืจ ืขื ืงืื ืคืืืืจืฆืื ืืืชืจ ืื ืจืืช.
ืืจื ืืืช ืืงืื ืืืชืจ ืืื ืคืืจืืฆืื ืขื Apache ืืื ืืคืงืืื:
apache2ctl -S. ืืคืื ืืืฉืจืช ืฉืื ื ืจืื ืืขืจื ืื:
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/sites-enabled/002-tocode.co.il.conf:1
VirtualHost configuration:
*:443 is a NameVirtualHost
default server tocode.co.il (/etc/apache2/sites-enabled/002-tocode.co.il.conf:8)
port 443 namevhost tocode.co.il (/etc/apache2/sites-enabled/002-tocode.co.il.conf:8)
port 443 namevhost www.tocode.co.il (/etc/apache2/sites-enabled/002-tocode.co.il.conf:27)
*:80 is a NameVirtualHost
default server tocode.co.il (/etc/apache2/sites-enabled/002-tocode.co.il.conf:3)
port 80 namevhost tocode.co.il (/etc/apache2/sites-enabled/002-tocode.co.il.conf:3)
ืืื ืืจืื ืื ื ืืืื Host-ืื ืืฉ ืื ื ืขื ืืฉืจืช, ืืืืื ืฉืืืช ืืืคื ืื Host ืืืื ืืฉืื ืืืืื ืงืืืฅ ืงืื ืคืืืืจืฆืื ืื Host ืืืืืจ. ืืืฉื ืืคืื ืืจืื ืขืื ื ืชืื ื debug ืฉืื ืืื ืคืืืช ืืฉืืืื. ื ืกื ืืช ืื ืขื ืืฉืจืชืื ืฉืืื ืืกืคืจื ืื ืืืืชื ืืฉืื ืืืฉ ืื ืืฆืืชื ืืฉืื ืืืืชืจ.1 419
ืืืืื ืช ืงืื ืืขืืืื ืขื ืืื ื ืืืชื ืืืื ืคืฉืืื ืืืืืช ืืชืืืื ืืกืื ืืจืืื ืืืชืงืืืื ืฉื ืคืืชืื ืจืฉืช, ืืืืืจ ืืคืฉืจ ืืืฉืชืืฉ ื fetch ืืื ืืืฉืื ืืืืข ื URL ืืจืืืง, Promise.all ืืื ืืืืืช ืืืื ืืงืฉืืช ืจืฉืช ืืืงืืื ืืืฉ ืืื ืคืื ืงืฆืื ืืฉื
Deno.writeFile ืืื ืืืชืื ืืงืืืฅ. ืืืืื ืืืืื ืช ืงืื ืืื ืฉื ืฉืื ืืืจ ืฉ Chat GPT ืื ืืื ืืื ืืืชืื. ืืขืื ืืืช ืฉืื ืืืชื ืื ืขื ืืงืื ืืื ืืืืืื:
for (let i=0; i < names.length; i++) {
const fixed = await modifyImage(buffers[i], 512, 512);
await Deno.writeFile(path.join(dir, names[i]), fixed);
}
ืืืืืื ืืคืขืืื ืืช modifyImage ืืฆืืจื ืกืืจืชืืช ืชืืื ื ืืืจื ืชืืื ื. ืืฉื ืืกืืชื ืืืคืขืื ืืช ืืคืื ืงืฆืื ืืืงืืื ืขื ืื ืืชืืื ืืช ืขื Promise.all ืงืืืืชื ืชืืฆืืืช ืฉืืืืืช. ืื ืืฆืืืชื ืืืืื ืืื.
ืืขืื ื ืืกืคืช ืขื ืืงืื ืืืชื ืฉ Deno ืื ืืฆืืื ืืคืขื ื ืืช ืงืืืฅ ื index.d.ts ืฉื ืกืคืจืืืช wikipedia ื npm, ืืืื ืื ืืคืฉืจ ืืื ืืืฉืชืืฉ ืืกืคืจืื ืืงืืืฅ TypeScript ืืขืืจืชื ื JavaScript ืืงืืืฅ ืืืืืืงื.
ืืืงืจ
ืืงืืืฅ ืืืืจืื ืืื ื Dockerfile ืืื ืคื ืืฉ ืืืจ ืคืืชืจืื ืืื ืืืื ื ืื ื ืจืื ืืื:
FROM denoland/deno:2.0.3
* The port that your application listens to. *
EXPOSE 8000
WORKDIR /app
RUN bash -c "mkdir -p /app/files && chown -R deno /app/files"
* Prefer not to run as root. *
USER deno
* These steps will be re-run upon each file change in your working directory: *
COPY . .
* Compile the main app so that it doesn't need to be compiled each startup/entry. *
RUN deno cache main.ts
CMD ["run", "-A", "main.ts"]
ืืืืื' deno ื Denoland ืืื ืืืื' ืืกืืกื ืืืจืฆืช ืชืืื ืืช ืืื ื ืืฆืจืื ืืืืกืืฃ ืขืืื ืจืง ืืช ืืงืืฆืื ืฉืื ื ืืืืจืืฅ.
ืืขืื ืืืช ืฉืืืชื ืื ืขื ื Dockerfile ืืื ืืื ืฉืืชืงื ืช ืืชืืืืืช ืงืืจืืช ืืฉืืจื:
RUN deno cache main.ts
ืื ืฉืืืืจ ืฉืืฉืืื ืืืชืงืื ืืช ืืชืืืืืช ืื ื ืฆืจืื ืืืขืชืืง ืืืืื' ืืช ืื ืืงืืฆืื ืฉื ืืคืจืืืงื ืืืื ืงืืจื ืจืง ืืืจื ืืขืชืงืชื. ืืืืงืจ ืื ืืืืจ ืฉืื ืืคืฉืจ ืืืฉืชืืฉ ืืชืืืืืช ืืชืืจ ืฉืืื ื ืคืจืืช ืืืื ืื ืฉืื ืื ืืงืื ืืื ืืื ืืืื ืืื ืืฆืืจื ืืืชืงืื ืืืืฉ ืืช ืื ืืชืืืืืช. ื node ืื ื ืืืืืจ ืฉืืื ืื ื ืืช:
COPY package*.json ./
RUN npm install
ืืคื ื ืืขืชืงืช ืฉืืจ ืืคืจืืืงื ืืื ืฉืื ืืืื ืืงืื ื ืื ืกื ืืฉืืื ืขืืืื ื ืืืชืจ ืืืชืืืืืช. ืื ื ืืืฉื ืฉืืฉ ืืจื ืืขืฉืืช ืืฉืื ืืืื ืื ื Deno ืืื ืขืืืื ืื ืืฆืืชื.
ืฉืืจื ืชืืชืื ื ืืขืืืื ืขื ืืื ื ืื ืืืชื ืจืขื ืืืฉ ืืจืื ืืืจืื ืฉืขืืื ืื ืคืืืช ืืื ืืื ืฉืืืืชื ืืงืื ืขื node.js, ืืื ืขืืืื ืงืฉื ืืืชืืืก ืืื ืืงืคืืฆืช ืืืจืื. ืืืงืืกืืกืื ืขืืืื ืืืืืื ืืืชืืืื ืืืืืืืื ื npm ืืืงืืช, ืืืื ืชืืืื ืืืงืืช ืืืืืจืืช ืืืืคืืกืื ืฉืฉื ืื ืฉืืืื ืืืืืื ืืงืืฉื ืืคืจืืืงืืื ืืืืืื ืืืชืจ.
ืืืชืืจ ืืื ืืืืื ืช ืืื ื ื ืฉืืจ ืืืขืชื ืืืืืืจ ื npm - ืื ืขื ืืื ืฉืืคืืจ ืืชืืืื ืืืืืืืื ื npm ืืืคืืืชื ื First Class Citizens ืืืงืืกืืกืื ืื ืขื ืืื ืืืื ืืืื ืืืกืืื ืฉื ืืืืืืื ื npm ื JSR.1 419
ืืืืืช ืืื ื: ืฉืืืจืช ืชืืื ืืช ืืืืงืืคืืื
ืืืจ ืืื ืืืื ืฉืื ื ืืฉืืง ืขื ืงืื ืืื ืืืืจืื ืชืืื ืืช ืืืืงืืคืืื ืืฉืืื ืืื ืืืืื ืฉืื ื ืืืชื, ืืืื ืืจืื ืคืขืืื ืืคืจืืืงืื ืฆื ืื ื ืืืื ืืืืืจ ืืื ืืืืืืืช ืฉืืขื ืืื ืืช ืืืชื ืืื ืืจืืืช ืืื ืื ืขืืื ืืขืืื ืืืืืชื. ืืคืขื ืืงืืชื ืืช ืืื ื ืืจืฆืืชื ืืจืืืช ืื ืื ื ืืืื ืืืฉืชืืฉ ื Deno2 ืืคืจืืืงื ืืืขืืงืจ ืื ืืืื ืืงืฉืืื. ืกืืืื ืื ืืกืื ืืคืืกื ืืื.
ืื ืืื ืื
ืืฉืืื ืืฉืืื ืชืืื ื ืืจื ืืืืจื ืืื ืฆืจืืื ืืืืืช ืื ืืืืื ืืื ืืื ืืืขืื ืฉืชืืื ืืช ืืืืงืืคืืื ืืืืืืช ืืืืืข ืืื ืืืื. ืืื ื ืื ื ืืืงืจื ืกืจืืืก ื Deno ืฉืืงืื ืืืืจ ืืืืงืืคืืื (ืฉื ืื ืืฉื ืืืฉืคื), ืืืฉื ืืช ืื ืืชืืื ืืช, ืืงืืื ืืืชื ืืฉืืืจ ืืชืืงืืื ืืงืืืืช. ืืืจื ืื ืืคืฉืจ ืืืื ืืงืืช ืืช ืืชืืื ืืช ืืืกืจืืืก ืืืงืื ืืืืงืืคืืื ืืื ืืงืื ืืช ืืืืจืกื ืืงืื ื ืฉืื ืืชืืืื ืืืืืจื.
ืืคืฉืจ ืืจืืืช ืืช ืืงืื ืืืื ืืืืืืื:
https://github.com/ynonp/wikipedia-image-fetcher
ืืงืืืฅ main.ts
ืคืจืืืืืืจืง ื Web ืฉืืืจืชื ื ืงืจื Hono. ืืชืืชื ืขืืื ืืื ืืืืจ ืืจืื ืืื ืฉืื ื ืจืืฆื ืืื ืืช ืขืื ืืืจืื ืืขืืจืชื. ืืื ื ืืืืจ ืืงื ืืฉืืืืฉ ืืื ื ืืจืืืฉ ืฉืืื ืืืจืกืช ืืงืกืคืจืก ืฉืืชืืืื ื 2024. ืื ืชืื ืืจืืฉืื ืฉืื ื ืืื ืืก ืืคืจืืืงืืื ืคืฉืื ืืืืืจ ืฉืืื ืืกืืจ:
app.get('/up', (c) => {
return c.json({ok: true})
})
ืืื ืืขืืืจ ืื ืืื ืืื ื ืจืฆื ืืฉืื ืืช ืืคืจืืืงื ืืืืื ืืขืจืืช Zero Downtime Deployment ืืื ืฉืืื ืชืืข ืฉืืื ืขืื ืืื ืฉืฆืจืื, ืืื ืื ืืืืคื ืืืื ืืฉืืืื ื ืฉื ืืข ืฉืืืจืื ืขืืืืื.
ืื ืชืื ืืื ืืื ืืืืชืจ ืืขื ืืื. ืืื ืืงืื ืฉืคื ืื ืืฉื, ืืืืง ืื ืืฉ ืื ืืืจ ืชืืื ืืช ืขื ืื ืืฉื ืืื. ืื ืืื ืชืืื ืืช ืืื ืืืจืื ืืืชื ืืื ืืฉ ืืื ืจืง ืืืืืจ ืืช ืจืฉืืืช ืืชืืื ืืช:
app.get('/images', async (c) => {
const { topic, lang } = c.req.query();
if (await lib.hasSavedImages(lang, topic)) {
const images = await lib.getSavedImages(lang, topic);
return c.json(images);
} else {
const images = await lib.downloadWikipediaImages(lang, topic);
return c.json(images);
}
})
ื hono ืืื ืืขืื ืืืชืื ืงืื ืืืคืื ืื ืชืื ืืกืื ืืจืื ื ืืืืืืืจ json. ืืืืจ ืืืืื ืฉืืืืชื ืฆืจืื ืืืชืจืื ืืืื ืื ืฉืืฉ ืคืจืืืจ ืืื ืืคืื ืงืฆืืืช ืืืืคืื ืืืงืื ืฉื ื ืคืจืืืจืื ืืื ืืืงืกืคืจืก.
ืืื ื ืขืืื ื Deno ืืื ืื ื node.js ื bun. ืืฉ ืื ืืืฆืืขืื ืืฆืืื ืื ืืืื ืชืืื ืืื ืื ืฉืื ืชืืื ืืช ืืืืื. ืื ืื ื ืืคืขืืืื ืืช ืืฉืจืช ืขื:
Deno.serve(app.fetch)
ืฉืืืจืช ืชืืื ืืช ืืฉืื ืื ืืืื
ืืงืืืฅ ืืฉื ื ืืคืจืืืงื ื ืงืจื wikipedia_fetcher.js ืืฉื ืืชืืชื ืืช ืื ืืืืืืงื, ืืฉื ืื ืืืจืื ืืชืืืื ืืืกืชืื.
ืืขืื ืจืืฉืื ื ืฉืืืชื ืื ืขื ืืื ื ืืื ืฉืืื ื ืืืืข ืืืฉืื ืกืคืจืืืช ื-3 ืืืืจืื: ืืฉ ืื ืืช ืืืืืจ ืืจืฉืื ืฉื ืงืจื JSR, ืฉื ืืื ืืืขื ืืืืืืช ืืื ื ืจืื ืฉื Toolchain ืฉื ืืื ื ืขืืื ืืืชื ืืื ืืื. ืืฉ ืืืืจ ืจืฉืื ืืฉื ืืืชืจ ืฉื ืงืจื Deno land, ืฉื ืืฉ ืืืชืจ ืืืืืืช ืืื ืื ืื ื ืชืื ืืื ืืืืื ืืืฉ ืื ืชืืืื ืืกืคืจืืืช ื npm ืฉื ืืืืื ืขืืืืื ืื ืืื ืืื ืืกืคืจืืืช ืขืฆืื ืื ืชืืื ื ืชืืืืช ืืืืืื. ืืื ืืืฆื ืฉืืฆื ืืื ืื ืืคืฉืจ ืืืืืื ืืช ืขืฆืื ื ืจืง ื JSR ืื ืืื ืฉื ืืกืคืืง ืืืืืืช ืืื ืขืืืื ืขื ืืืืจืื ืืืจืื ืืืฆืจืช ืืืืื ืืคืจืืืงื.
ืืื ืืชืืื ืงืืืฅ ืืืืืืงื ืืคืจืืืงื ืฉืื, ืืฉืื ืื ื ืืืืืจ ืื ืคืจืืืงื ืืืฉ ืงืื ืฉืืชืืชื ืืืื ืฉืขืืช:
import * as fs from "@std/fs";
import * as path from "jsr:@std/path";
import wiki from "wikipedia";
import {basename} from "https://deno.land/std@0.224.0/url/mod.ts";
import {
ImageMagick,
initialize,
MagickGeometry,
} from "https://deno.land/x/imagemagick_deno@0.0.31/mod.ts";
ืืงืืืฅ ืืืื ืกืคืจืืืช ื JSR, ืกืคืจืืืช ื Deno land ืืขืื ืกืคืจืืืช ืฉืืืกืคืชื ืืขืืจืช ืคืงืืืช deno add ืืืื ื ืฉืืจื ืืชืื ืืงืืืฅ deno.json ืืจืฉืืืช ื import-ืื:
"imports": {
"@std/fs": "jsr:@std/fs@^1.0.5",
"hono": "jsr:@hono/hono@^4.6.6",
"wikipedia": "npm:wikipedia@^2.1.2"
},
ืขืืฉืื ืืจืืจ ืฉืืืขืื ืืืจืืืืช ืคื ืืื ืฉืื ื ืื ืืกืคืืง ืืกืืืจ ืืคืฉืื ืืืจืง ืกืคืจืืืช ืคื ืืื ืืคื ืงืื ืืืืืื ืืืืชื ืกืคืจืื. ืืื ืืืื ืื ืืืงืืกืืกืื ืืื ืืืชืจ ืืืืจืื ืื ืื ื ืืืืชื ืืฉืงืืข ืืืชืจ.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
