uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

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

Ko'proq ko'rsatish
1 420
Obunachilar
Ma'lumot yo'q24 soatlar
+37 kunlar
-430 kunlar
Postlar arxiv
ToCode
1 421
We use the same configuration as Parcel to bundle this sandbox, you can find more
    info about Parcel 
    <a href="https://parceljs.org" target="_blank" rel="noopener noreferrer">here</a>.
  </div>
  `;  
}

window.addEventListener('pagehide', (ev) => {
  countdown = 10;
  document.getElementById("app").innerHTML = `${countdown}`
});

window.addEventListener('pageshow', (ev) => {
  setTimeout(tick, 0);
});

ToCode
1 421
# ื˜ื™ืคื™ื ืœืขื‘ื•ื“ื” ื™ืขื™ืœื” ืขื bfcache ืื—ื“ ื”ื˜ืจื™ืงื™ื ืฉืœ ื“ืคื“ืคืŸ ื›ื“ื™ ืœื”ืฆื™ื’ ืขืžื•ื“ื™ื ืžื”ืจ ื™ื•ืชืจ ื ืงืจื bfcache. ื–ื” ื‘ืขืฆื ื–ื™ื›ืจื•ืŸ ืžื˜ืžื•ืŸ ื‘ื• ื”ื“ืคื“ืคืŸ ืฉื•ืžืจ ืืช ื”ืขืžื•ื“ ื•ืืช ื›ืœ ืžืฆื‘ ื” JavaScript ืฉืœ ื”ืขืžื•ื“ ื‘ื™ืฆื™ืื” ืžืžื ื•, ื›ืื™ืœื• ื”ืขืžื•ื“ ืขื“ื™ื™ืŸ ืคืขื™ืœ ื‘ืื™ื–ื” "ื˜ืื‘" ื ืกืชืจ. ื‘ืœื—ื™ืฆื” ืขืœ ื›ืคืชื•ืจ "ืื—ื•ืจื”" ื”ื“ืคื“ืคืŸ ืžื•ืฉืš ืžื”ืžื˜ืžื•ืŸ ืืช ื”ืขืžื•ื“ ื•ืืช ื›ืœ ื–ื™ื›ืจื•ืŸ ื” JavaScript ื›ื“ื™ ืฉืžืฉืชืžืฉื™ื ื™ื•ื›ืœื• ืœื”ืžืฉื™ืš ืœืขื‘ื•ื“ ืขืœ ื”ืขืžื•ื“ ื‘ืžื”ื™ืจื•ืช ื•ืžืื•ืชื” ื ืงื•ื“ื”. ื‘ืชื•ืจ ืžืชื›ื ืชื™ื ืื ื—ื ื• ืฉืžื—ื™ื ืขืœ ื›ืœ ื”ืชื ื”ื’ื•ืช ืฉืœ ื”ื“ืคื“ืคืŸ ืฉืžืื™ืฆื” ืืช ื”ืืชืจื™ื ืฉืœื ื•, ืื‘ืœ ื’ื ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ืžื•ื“ืขื™ื ืœื›ืžื” ืืชื’ืจื™ื ืกืคืฆื™ืคื™ื™ื ืกื‘ื™ื‘ ื˜ืขื™ื ืช ืขืžื•ื“ ืž bfcache. ## ื”ืžื—ืฉืช ื”ืฉื™ืžื•ืฉ ื‘ bfcache ื”ื™ื›ื ืกื• ืœืงื™ืฉื•ืจ ื”ื‘ื: https://cdpn.io/pen/debug/JjegWao ืชื•ื›ืœื• ืœืจืื•ืช ืฉื ืžืกืคืจื™ื ื™ื•ืจื“ื™ื ืž 9 ืขื“ 1, ื•ืื– ื‘ืžืงื•ื 0 ื™ื•ืคื™ืข ื˜ืงืกื˜ ื•ืžืชื—ืช ืœื˜ืงืกื˜ ื™ืฉ ืœื™ื ืง. ืœื•ื—ืฆื™ื ืขืœ ื”ืœื™ื ืง ื•ืื– ืœื•ื—ืฆื™ื "ืื—ื•ืจื”" ื‘ื“ืคื“ืคืŸ, ื•ืชื•ื›ืœื• ืœืจืื•ืช ืฉื”ื“ืคื“ืคืŸ ืœื ื™ืจื™ืฅ ืืช ื”ืžืกืคืจื™ื ืื—ื•ืจื” ืฉื•ื‘ ื•ื™ืฉืจ ื™ืฆื™ื’ ืืช ื”ื˜ืงืกื˜, ื‘ื“ื™ื•ืง ืžื”ื ืงื•ื“ื” ื‘ื” ืขืฆืจื ื•. ื–ื” ืงื•ื“ ื”ืขืžื•ื“ ืื’ื‘ ืžื•ื˜ืžืข ื›ืืŸ: <iframe height="300" style="width: 100%;" scrolling="no" title="Untitled" src="https://codepen.io/ynonp/embed/JjegWao?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true"> See the Pen <a href="https://codepen.io/ynonp/pen/JjegWao"> Untitled</a> by Ynon Perek (<a href="https://codepen.io/ynonp">@ynonp</a>) on <a href="https://codepen.io">CodePen</a>. </iframe> ## ืื™ืš ื™ื•ื“ืขื™ื ืื ื”ืขืžื•ื“ ื ื˜ืขืŸ ืžื” Cache ื“ืคื“ืคื ื™ื ืžืกืคืงื™ื ืœื ื• API ื›ื“ื™ ืœื”ื‘ื™ืŸ ืื™ืš ื”ืขืžื•ื“ ื ื˜ืขืŸ ื•ื”ืื ื”ื•ื ื”ื’ื™ืข ืžื” cache. ื”ืื™ืจื•ืข pageshow ื™ื™ืฉืœื— ืœ window ืžื™ื“ ืื—ืจื™ load ื•ื‘ื›ืœ ืคืขื ืฉื”ืขืžื•ื“ ื ื˜ืขืŸ ืžื” Cache. ืœืื™ืจื•ืข ื–ื” ื™ืฉ ืžืืคื™ื™ืŸ ื‘ืฉื persisted, ื•ืื ืขืจื›ื• true ืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉื”ืขืžื•ื“ ื”ื’ื™ืข ืžื” cache. ื‘ืขื–ืจืช ืื™ืจื•ืข ื–ื” ืื ื™ ื™ื›ื•ืœ ืœื”ืฆื™ื’ ื”ื•ื“ืขื” ืกืคืฆื™ืคื™ืช ืœืžืฉืชืžืฉ ืฉื”ื’ื™ืข ืื—ืจื™ ืœื—ื™ืฆื” ืขืœ ื›ืคืชื•ืจ "ืื—ื•ืจื”", ื›ืžื• ื‘ื“ื•ื’ืžื” ื”ื‘ืื”: https://cdpn.io/pen/debug/BaGXWGJ ืงื•ื“ ื”ื“ื•ื’ืžื”:
let countdown = 10;

function tick() {
  countdown -= 1;
  if (countdown > 0) {
    document.getElementById("app").innerHTML = `${countdown}`;
    return setTimeout(tick, 1000);
  }

  document.getElementById("app").innerHTML = `
  <h1>Hello Vanilla!</h1>
  <div>
    We use the same configuration as Parcel to bundle this sandbox, you can find more
    info about Parcel 
    <a href="https://parceljs.org" target="_blank" rel="noopener noreferrer">here</a>.
  </div>
  `;
}

window.addEventListener('pageshow', (ev) => {
  console.dir(ev);
  if (ev.persisted) {
    // page loaded from cache after "back"
    document.getElementById("app").innerHTML = `Did you find what you were looking for?`
  }
});

setTimeout(tick, 0);
## ืื™ืš ืœื’ืจื•ื ืœืขืžื•ื“ ืœื ืœื”ื™ื˜ืขืŸ ืžื” Cache ื™ืฉ ืžืกืคืจ ื“ื‘ืจื™ื ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืขืฉื•ืช ื‘ืขืžื•ื“ ืฉื™ืžื ืขื• ืžื“ืคื“ืคืŸ ืœืฉืžื•ืจ ืืช ื”ืขืžื•ื“ ืฉืœื ื• ื‘ bfcache, ื•ืœื›ืŸ ืจื•ื‘ ื”ื–ืžืŸ ืืœื” ื“ื‘ืจื™ื ืฉื ืจืฆื” ืœื”ื™ืžื ืข ืžื”ื: 1. ืจื•ื‘ ื”ื“ืคื“ืคื ื™ื ืœื ื™ืฉืžืจื• ืืช ื”ืขืžื•ื“ ื‘ bfcache ืื ืžื•ื’ื“ืจ ืงื•ื“ ื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืข unload. 2. ื“ืคื“ืคืŸ ืคื™ื™ืจืคื•ืงืก ืœื ื™ืฉืžื•ืจ ืืช ื”ืขืžื•ื“ ื‘ bfcache ืื ืžื•ื’ื“ืจ ืงื•ื“ ื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืข beforeunload. 3. ื“ืคื“ืคื ื™ื ืœื ื™ืฉืžืจื• ืืช ื”ืขืžื•ื“ ื‘ bfcache ืื ื”ืฉืจืช ืฉื•ืœื— ืืช ื”ื›ื•ืชืจืช Cache-Control: no-store. 4. ื—ืœืง ืžื”ื“ืคื“ืคื ื™ื ืœื ื™ืฉืžืจื• ืขืžื•ื“ ื‘ bfcache ืื ื™ืฉ ืœื• ื—ื™ื‘ื•ืจื™ื ืคืชื•ื—ื™ื ืื• ื‘ืงืฉื•ืช ืจืฉืช ืคืชื•ื—ื•ืช (ืœื“ื•ื’ืžื” ื—ื™ื‘ื•ืจ ืœ IndexDB, ืžืžืชื™ืŸ ืœืชืฉื•ื‘ื” ืฉืœ fetch, ืžืžืชื™ืŸ ืœืชืฉื•ื‘ื” ืฉืœ XMLHttpRequest ืื• ืžื—ื–ื™ืง WebSocket ืคืชื•ื—). ืื™ืจื•ืข ื‘ืฉื pagehide ื™ื™ืฉืœื— ืœืขืžื•ื“ ืฉืœื›ื ื‘ื“ื™ื•ืง ืœืคื ื™ ืฉืžืฉืชืžืฉื™ื ื’ื•ืœืฉื™ื ื”ื—ื•ืฆื” ืžืžื ื•, ื•ืืชื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืื™ืจื•ืข ื–ื” ื›ื“ื™ ืœืกื’ื•ืจ ื—ื™ื‘ื•ืจื™ื ื•ืœื‘ื˜ืœ ื‘ืงืฉื•ืช ืคืชื•ื—ื•ืช. ื‘ื“ื•ื’ืžื” ื”ืื—ืจื•ื ื” ืื ื™ ืžืฉืชืžืฉ ื‘ืื™ืจื•ืข pagehide ื›ื“ื™ ืœื”ื—ื–ื™ืจ ืืช ืฉืขื•ืŸ ื” 10 ืฉื ื™ื•ืช ืœืžืฆื‘ื• ื”ืžืงื•ืจื™, ื•ืžืชื—ื™ืœ ืœื”ืจื™ืฅ ืืช ื”ืฉืขื•ืŸ ืื—ื•ืจื” ื‘ืื™ืจื•ืข pageshow ื‘ืžืงื•ื ื‘ื˜ืขื™ื ื” ืฉืœ ื”ืขืžื•ื“. ื‘ืฆื•ืจื” ื›ื–ืืช ื”ืขืžื•ื“ ืขื“ื™ื™ืŸ ื ื˜ืขืŸ ืžื” bfcache, ืื‘ืœ ื‘ื ื™ื•ื•ื˜ ืื—ื•ืจื” ืืœื™ื• ืžืฉืชืžืฉื™ื ื™ืฆื˜ืจื›ื• ืœื—ื›ื•ืช ืฉื•ื‘ 10 ืฉื ื™ื•ืช ืขื“ ืฉื™ืจืื• ืืช ื”ืชื•ื›ืŸ: https://cdpn.io/pen/debug/vYQoxMx ื”ืงื•ื“:
let countdown = 10;

function tick() {
  countdown -= 1;
  if (countdown > 0) {
    document.getElementById("app").innerHTML = `${countdown}`;
    return setTimeout(tick, 1000);
  }

  document.getElementById("app").innerHTML = `
  <h1>Hello Vanilla!</h1>
  <div>

ToCode
1 421
# ื”ื˜ื™ืคื•ืก ื”ืžื™ื ื™ืžืœื™ ืฉื™ืžื• ืœื‘ ืœืคื•ื ืงืฆื™ื” ื”ื‘ืื” ื‘ืคื™ื™ืชื•ืŸ ืฉืžืงื‘ืœืช ืื•ืจืš ืžื™ื ื™ืžืœื™ ื•ืจืฉื™ืžื” ืฉืœ ืžื—ืจื•ื–ื•ืช, ื•ืžื—ื–ื™ืจื” ืจืง ืืช ื”ืžื—ืจื•ื–ื•ืช ืฉืื•ืจื›ืŸ ื’ื“ื•ืœ ื™ื•ืชืจ ืžื”ืคืจืžื˜ืจ ื”ืจืืฉื•ืŸ:
def longer_than(n: int, items: list[str]) -> list[str]:
 return [I for I in items if len(i) > n]
ื”ืžื™ืžื•ืฉ ืžื“ื•ื™ืง ืื‘ืœ ื‘ื“ื™ืงืช ื”ื˜ื™ืคื•ืกื™ื ืขืœื•ืœื” ืœื‘ืœื‘ืœ. ื”ืคืขืœื” ื›ื–ืืช ืขื•ื‘ื“ืช ืžื‘ื—ื™ื ืช ืงื•ื“, ืื‘ืœ ื–ื•ืจืงืช ืฉื’ื™ืื” ืขืœ ื˜ื™ืคื•ืกื™ื:
print(longer_than(3, ((1, 2, 3), (2, 3, 4, 5, 6), range(10))))
ื•ื–ื” ื—ื‘ืœ ื›ื™ ื”ืžื˜ืจื” ืฉืœ ื‘ื“ื™ืงืช ื˜ื™ืคื•ืกื™ื ื”ื™ื ืœื ืœืฉื‘ื•ืจ ืงื•ื“ ืฉืขื•ื‘ื“ ืืœื ืœืขื–ื•ืจ ืœื ื• ืœื›ืชื•ื‘ ืงื•ื“ ื ื›ื•ืŸ. ื“ืจืš ืงืœื” ืœืฉืคืจ ืืช ื”ืžืฆื‘ ื”ื™ื ืœืขื‘ื•ืจ ืœื”ืฉืชืžืฉ ื‘ื˜ื™ืคื•ืก ื”ืžื™ื ื™ืžืœื™ ืฉืื ื™ ืฆืจื™ืš, ื›ืœื•ืžืจ ื‘ืžืงื•ื ืœืงื—ืช ืจืฉื™ืžื” ืฉืœ ืžื—ืจื•ื–ื•ืช ืื ื™ ืื‘ืงืฉ Iterable ืฉืœ Sized:
def longer_than(n: int, items: Iterable[Sized]) -> list[Sized]:
 return [I for I in items if len(i) > n]


print(longer_than(3, ((1, 2, 3), (2, 3, 4, 5, 6), range(10))))
ื•ื–ื” ื›ื‘ืจ ืขื•ื‘ื“ ืžืฆื•ื™ืŸ ืžื‘ื—ื™ื ืช ื‘ื“ื™ืงืช ื”ื˜ื™ืคื•ืกื™ื ืื‘ืœ ืขื“ื™ื™ืŸ ื™ืฉ ื‘ืขื™ื” ืขื ืขืจืš ื”ื”ื—ื–ืจ. ื”ืงื•ื“ ื”ื‘ื ื–ื•ืจืง ืฉื’ื™ืืช ื˜ื™ืคื•ืกื™ื, ืœืžืจื•ืช ืฉื‘ืจื•ืจ ืฉื”ื•ื ืขื•ื‘ื“:
long_items = longer_than(3, ((1, 2, 3), (2, 3, 4, 5, 6), range(10)))
print(long_items[0][0])
ื”ื‘ืขื™ื” ื”ื™ื ืฉ long_items ื”ื•ื Iterable ืฉืœ Sized (ื›ื™ ื–ื” ืžื” ืฉื”ืคื•ื ืงืฆื™ื” ืžื—ื–ื™ืจื”), ื• Sized ืœื ืžืืคืฉืจ ื’ื™ืฉื” ื“ืจืš ืื™ื ื“ืงืก. ื”ืืžืช ื”ื™ื ืฉ long_items ื”ื•ื ื‘ื›ืœืœ Iterable ืฉืœ tuple, ื•ืœื›ืŸ ื”ืงื•ื“ ื›ืŸ ืขื•ื‘ื“ ืื‘ืœ ืžืขืจื›ืช ื”ื˜ื™ืคื•ืกื™ื ืœื ืจื•ืื” ืืช ื–ื”. ื”ืคื™ืชืจื•ืŸ ื›ืžื• ืฉืื ื™ ืžืงื•ื•ื” ืฉืืชื ื›ื‘ืจ ื™ื•ื“ืขื™ื ื”ื•ื TypeVar ืฉืžื•ื›ืŸ ืœืงื‘ืœ ื›ืœ ื˜ื™ืคื•ืก ื™ื•ืชืจ ืกืคืฆื™ืคื™ ืž Sized, ื›ืœื•ืžืจ:
T = TypeVar('T', bound=Sized)  
def longer_than(n: int, items: Iterable[T]) -> list[T]:
 return [I for I in items if len(i) > n]

long_items1 = longer_than(3, ((1, 2, 3), (2, 3, 4, 5, 6), range(10)))
print(long_items1[0][0])  

long_items2 = longer_than(3, ['abc', 'abcdefg', 'as'])
print(long_items2[0].capitalize())
ื•ื–ื” ืžื‘ื™ื ืื•ืชื ื• ืœื˜ื™ืค ืฉืœ ื”ื™ื•ื - ื‘ื›ืชื™ื‘ืช ืคื•ื ืงืฆื™ื” ื‘ืคื™ื™ืชื•ืŸ ื ืกื• ืœื›ืชื•ื‘ ืืช ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืงืœื˜ ื‘ืฆื•ืจื” ื”ื›ืœืœื™ืช ื‘ื™ื•ืชืจ ืฉืืคืฉืจ, ื•ืืช ื”ื˜ื™ืคื•ืก ืฉืœ ืขืจืš ื”ื”ื—ื–ืจ ื‘ืฆื•ืจื” ื”ืกืคืฆื™ืคื™ืช ื‘ื™ื•ืชืจ ืฉืืคืฉืจ. ืฉื™ืœื•ื‘ ื›ื–ื” ื”ื•ื ื”ืžืคืชื— ืœื‘ื ื™ื™ืช ืคื•ื ืงืฆื™ื•ืช ืฉื™ื”ื™ื” ืงืœ ืœื”ืฉืชืžืฉ ื‘ื”ืŸ ื‘ืœื™ ืฉื”ืžืฉืชืžืฉื™ื ื™ืฆื˜ืจื›ื• ืœื”ืชืขืฆื‘ืŸ ืขืœ ืฉื’ื™ืื•ืช ื˜ื™ืคื•ืกื™ื ื‘ืงื•ื“ ืฉืขื•ื‘ื“.

ToCode
1 421
# ื‘ืขื™ื“ืŸ ืฉืœ ChatGPT, ื”ื›ืœ ื–ื” ื”ืชืœื‘ื˜ื•ื™ื•ืช ื‘ื™ืŸ ืืคืฉืจื•ื™ื•ืช ืขื•ื‘ื“ื•ืช ืดืื™ืš ืืช ื‘ื•ื ื” ืชื™ื‘ื” ืขื ื”ืฉืœืžื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืชื”ื™ื” ื ื’ื™ืฉื”?ืด ืดืื™ืš ืืชื” ื‘ื•ื ื” Checkbox ืฉื™ืฉืชืžืฉ ื‘ืชืžื•ื ื” ืžื•ืชืืžืช ืื™ืฉื™ืช ื•ื’ื ื™ืืคืฉืจ ื ื™ื•ื•ื˜ ืžืงืœื“ืช?ืด ืดืื™ืš ืชื‘ื ื™ ื’ืœืจื™ื™ืช ืชืžื•ื ื•ืช ื‘ HTML/CSS ืื ื›ืœ ื”ืชืžื•ื ื•ืช ื‘ื’ื“ืœื™ื ืฉื•ื ื™ื?ืด ืดืื™ืš ืชืฆื™ื’ ืขืœ ื”ืžืกืš ืชืžื•ื ื” ืขื ืืคืงื˜ Scale ื›ืฉืขื•ื‘ืจื™ื ืขืœื™ื” ืขื ื”ืขื›ื‘ืจ?ืด ื›ืœ ืืœื” ืฉืืœื•ืช ืฉืคืขื ืืคืฉืจ ื”ื™ื” ืœื”ืฉืชืžืฉ ื‘ื”ืŸ ื‘ืจืื™ื•ื ื•ืช ืขื‘ื•ื“ื”, ืื‘ืœ ื”ื™ื•ื ื”ืคื›ื• ืœืœื ืจืœื•ื•ื ื˜ื™ื•ืช. ืื ืžืชื›ื ืช ื™ื›ืชื•ื‘ ืœื™ ื”ื™ื•ื ืฉื”ื•ื ืœื ื”ืฆืœื™ื— ืœื‘ื ื•ืช Checkbox ืฉื™ืฉ ื‘ื• ื’ื ืชืžื•ื ื” ื•ื’ื ื ื™ื•ื•ื˜ ืžืงืœื“ืช ื–ื” ื™ื™ืฉืžืข ืžืื•ื“ ืžื•ื–ืจ. ืดืœืžื” ืืชื” ืฉื•ืืœ ืื•ืชื™? ื™ืฉ Chat GPTืด. ื”ื™ื›ื•ืœืช ืฉืœ Chat GPT ืื• ื‘ื™ื ื’ (ืื• Copilot ื‘ืžื™ื“ืช ืžื™ื•ืžื ื•ืช ืคื—ื•ืชื”) ืœื™ืฆื•ืจ ืชื‘ื ื™ื•ืช ื”ืชื—ืœื” ื•ืงื˜ืขื™ ืงื•ื“ ืงื˜ื ื™ื ืฉืขื•ื‘ื“ื™ื ืฆืจื™ื›ื” ืœืฉื ื•ืช ืืช ื›ืœ ื”ื’ื™ืฉื” ืฉืœื ื• ืœืขื‘ื•ื“ื”. ืื™ ืืคืฉืจ ืœื”ื™ืฉืืจ ืื“ื™ืฉื™ื.

ToCode
1 421
# ืžื” ืขื‘ื“ ืœืš? ืื ืชืฉืืœื• ื—ื‘ืจื™ื ืฉืขื•ืฉื™ื ืžืฉื”ื• ืฉื’ื ืืชื ืจื•ืฆื™ื ืœืขืฉื•ืช ืื™ืš ื”ื ืขืฉื• ืืช ื–ื”, ืœื›ืœ ืื—ื“ ืชื”ื™ื” ืชืฉื•ื‘ื” ืื—ืจืช - ื—ื‘ืจ ืื—ื“ ืœืžื“ ืกืคืจื“ื™ืช ื“ืจืš ื˜ื™ื•ืœ ื‘ื“ืจื•ื ืืžืจื™ืงื”, ื—ื‘ืจื” ืื—ืจืช ืœืžื“ื” ืขื ืกืคืจ ืฉืžืžืฉ ืžืžืœื™ืฆื” ืขืœื™ื•, ืขื•ื“ ื—ื‘ืจ ืœื•ืžื“ ื‘ืื™ื ื˜ืจื ื˜ ืขื ืžื•ืจื” ื•ืื—ืจ ื“ืจืš ืฆืคื™ื” ื‘ืกื“ืจื•ืช ื•ืกืจื˜ื™ื ืžื“ื•ื‘ื‘ื™ื. ื•ื›ื›ืœ ืฉื™ืฉ ื™ื•ืชืจ ืืคืฉืจื•ื™ื•ืช ื›ืš ื™ืฉ ื™ื•ืชืจ ืฉื™ืœื•ื‘ื™ื, ืื—ื“ ืœื•ืžื“ ืขื ืืคืœื™ืงืฆื™ื” ื•ืกืคืจื™ื ื•ืื—ืจืช ืขื ืžื•ื–ื™ืงื” ื•ื˜ื™ื•ืœื™ื. ื‘ื ื™ืกื™ื•ืŸ ืœืžืฆื•ื ืืช ืดื”ื ื•ืกื—ื” ื”ืžื•ืฉืœืžืชืด ืœืœื™ืžื•ื“ื™ื (ื”ื ื•ืกื—ื” ืฉืœ ื‘ื™ืช ืกืคืจ, ื”ื ื•ืกื—ื” ืฉืœ ืดืžื•ืจื” ืžืœืžื“ ื›ื•ืœื ืžืงืฉื™ื‘ื™ืืด, ื”ื ื•ืกื—ื” ืฉืœ ืžื‘ื—ื ื™ื ื•ืขื‘ื•ื“ื•ืช, ืฉืœ ืฆื™ื•ื ื™ื ื•ืื ืœื ืชืฆืœื™ื— ืœื ืชืชืงื‘ืœ ืœืื•ื ื™ื‘ืจืกื™ื˜ื”), ืงืœ ืœืจืื•ืช ืฉื”ื ื•ืกื—ื” ื”ืžื•ืฉืœืžืช ืœื ืขื•ื‘ื“ืช ืœื”ืจื‘ื” ืžืื•ื“ ืื ืฉื™ื. ืงืœ ืœืจืื•ืช ืฉื‘ืขืฆื ืื™ืŸ ื ื•ืกื—ื” ืžื•ืฉืœืžืช. ืœื ืœืœื™ืžื•ื“ื™ ืฉืคื” ื•ืœื ืœืœื™ืžื•ื“ื™ ืชื›ื ื•ืช. ื”ืžื˜ืจื” ืฉืœ ืœืœื›ืช ืœื—ืคืฉ ืื ืฉื™ื ืฉืขืฉื• ืืช ื”ืฉื™ื ื•ื™ ืฉืืชื ืจื•ืฆื™ื ืœืขืฉื•ืช ื•ืœืฉืื•ืœ ืดืžื” ืขื‘ื“ ืœืš?ืด ื”ื™ื ืœื ืœื”ืขืชื™ืง ืฉื™ื˜ื•ืช, ื›ื™ ื”ืฉื™ื˜ื” ืฉืขื‘ื“ื” ืœื”ื ืœื ืชืขื‘ื•ื“ ืœื ื•. ื™ื•ืชืจ ื ื›ื•ืŸ ืฉื”ืžื˜ืจื” ื”ื™ื ืื™ื ื˜ื’ืจืฆื™ื”, ืœืงื—ืช ื—ืœืงื™ื ืžื›ืœ ืฉื™ื˜ื” ื•ืœื‘ื ื•ืช ืฉื™ื˜ื” ื—ื“ืฉื” ืฉืชืขื‘ื•ื“ ืœื›ื. ื•ืžื™ื˜ื™ื‘ื™ ืœื›ืช ื™ื“ืขื• ืœืฉื™ื ืœื‘ ืฉื’ื ืืช ื”ืงืจื™ื˜ืจื™ื•ื ื™ื ืฉืœ ืดืžื” ืขื‘ื“ ืœืšืด ืื ื—ื ื• ื‘ื•ื—ืจื™ื. ืฉืืคืฉืจ ืœืœืžื•ื“ ืชื›ื ื•ืช ื›ื“ื™ ืœื‘ื ื•ืช ืคืจื•ื™ืงื˜ ืฆื“ ืื• ืœืงื—ืช ืงืฆืช ืขื‘ื•ื“ื•ืช ืคืจื™ืœืื ืก ืื• ืœืขื‘ื•ื“ ื‘ื’ื•ื’ืœ ืื• ืœืงืจื•ื ื•ืœื›ืชื•ื‘ ืžืืžืจื™ื ืžืงืฆื•ืขื™ื™ื ืื• ืœืคืชื•ืจ ืฉืืœื•ืช ื‘ืคืจื•ื™ืงื˜ ืื•ื™ืœืจ. ื›ืœ ืžื˜ืจื” ื‘ืื” ืขื ืงืจื™ื˜ืจื™ื•ื ื™ื ืฉื•ื ื™ื, ืฉืขื•ื–ืจื™ื ืœื ื• ืœื”ื‘ื™ืŸ ืื ืื ื—ื ื• ื‘ื›ื™ื•ื•ืŸ. ืฉื™ื˜ืช ืœื™ืžื•ื“ ืฉืชืขื–ื•ืจ ืœืš ืœื”ืชืงื‘ืœ ืœืขื‘ื•ื“ื” ื‘ื’ื•ื’ืœ ื”ื™ื ืœื ืื•ืชื” ืฉื™ื˜ื” ืฉืชืขื–ื•ืจ ืœืš ืœื‘ื ื•ืช ืคืจื•ื™ืงื˜ ืฆื“ ืฉื™ื›ื›ื‘ ื‘ืื™ื ื“ื™ื”ืืงืจืก. ืดืžื” ืขื‘ื“ ืœืš?. ืื•ืœื™ ื—ืœืง ืžื–ื” ื™ืขื‘ื•ื“ ื’ื ืœื™ (ื•ืื•ืœื™ ืœื, ื•ื–ื” ื’ื ื‘ืกื“ืจ).ืด

ToCode
1 421
# ื”ื™ื•ื ืœืžื“ืชื™: npm isntall ืฉื’ื™ืืช ื›ืชื™ื‘ ืžืงืจื™ืช ื‘ื”ืชืงื ืช ื—ื‘ื™ืœื•ืช ื”ื•ื‘ื™ืœื” ืื•ืชื™ ืœืงื•ื‘ืฅ cmd-list.js ื‘ืžืื’ืจ npm/cli, ื•ืžืฉื ืœืงื˜ืข ื”ื‘ื ืžืชื•ืš ืื•ื‘ื™ืงื˜ aliases:
in: 'install',
ins: 'install',
inst: 'install',
insta: 'install',
instal: 'install',
isnt: 'install',
isnta: 'install',
isntal: 'install',
isntall: 'install',
ืžื” ืงื•ืจื” ื›ืืŸ? ืื– ื”ื›ื™ ืื—ื•ืจื” ืฉื”ืฆืœื—ืชื™ ืœื”ื’ื™ืข ืขื ื–ื” ื”ื™ื” ื” PR ื”ื–ื” ืฉื”ื•ืกื™ืฃ ืืช ื” alias ื‘ืฉื‘ื™ืœ ืœื ืœื”ืจื’ื™ื– ืืช ืืœื›ืก ืกืงืกื˜ื•ืŸ. ืื•ืชื• ืืœื›ืก ืื’ื‘ ืคื™ืจืกื ื‘ืื™ื–ื” ื’ื™ืกื˜ ืžืื•ืชื” ืชืงื•ืคื” ืืช ื”ืœื•ื’ ื”ื‘ื ืžืขื‘ื•ื“ื” ืขื npm ืขื ื”ื›ื•ืชืจืช How Dare You:
$ npm isntall
npm ERR! Darwin 14.0.0
npm ERR! argv "node" "/Users/alexsexton/.nave/installed/0.10.33/bin/npm" "isntall"
npm ERR! node v0.10.33
npm ERR! npm  v2.1.7
npm ERR! code MODULE_NOT_FOUND

npm ERR! Cannot find module '/Users/alexsexton/.nave/installed/0.10.33/lib/node_modules/npm/lib/isntall.js'
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <http://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/alexsexton/stripe/dashboard-ui/npm-debug.log
ืœื™ืžื™ื ื ื•ืกืคื• ืขื•ื“ alias-ื™ื ื ื•ืกืคื™ื ืœ install ื•ืœืคืงื•ื“ื•ืช ืจื‘ื•ืช ื ื•ืกืคื•ืช, ื›ืฉื”ื”ืกื‘ืจ ื”ืจืฉืžื™ ืœื›ื•ืœื (ืžืชื•ืš ื”ื“ื™ื•ืŸ ื›ืืŸ) ื”ื•ื: > npm is not here to punish people for spelling mistakes. npm is here to install your packages, even if you type "isntall". ื’ื™ืฉื” ื—ื™ื•ื‘ื™ืช ื•ืœื ืžืื•ื“ ื ืคื•ืฆื”.

ToCode
1 421
ื”ืžื‘ื ื” ื˜ื•ื‘ ื›ื™ื•ื•ืŸ ืฉื”ื•ื ืžื—ื‘ืจ ื‘ื™ืŸ ืžืฉื”ื• ืฉื”ืคื•ื ืงืฆื™ื” ืฆืจื™ื›ื” - ื”ืžืฉืชืžืฉ - ืœื‘ื™ืŸ ืฉื•ืจืช ื”ื”ื’ื“ืจื” ืฉืœ ื”ืคื•ื ืงืฆื™ื”. ืื™ ืืคืฉืจ ื”ื™ื” ืœื”ื™ื›ื ืก ืœืงื•ื“ ื”ื˜ื™ืคื•ืœ ื‘ื ืชื™ื‘ ื‘ืœื™ ืฉืขื‘ืจื ื• ื‘ืงื•ื“ ืฉืงื•ื“ื ืžืคืขื ื— ืืช ื” User ืžืชื•ืš ื”ื‘ืงืฉื”. ื ืฉื•ื•ื” ืืช ื–ื” ืœืจื™ื™ืœืก ืฉื ื›ืœ ื ืชื™ื‘ ืื—ืจืื™ ืขืœ ื˜ืขื™ื ืช ื”ืžื™ื“ืข ื•ื‘ื“ื™ืงืช ื”ืžืฉืชืžืฉ:
def show
    @post = Post.find(params[:id])
    authorize! :read, @post
    render plain: "Welcome #{current_user.name}"
end
ืื• ืœ Express ืฉื ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ Middlewares ื‘ืฉื•ืจืช ื”ื’ื“ืจืช ื”ืคื•ื ืงืฆื™ื”:
app.get('/post/:id', authorize_user, (req, res) => {
    const user = res.locals.user;
    res.send(`Welcome! ${user.name}`);
});
ืื– ื‘ืจื™ื™ืœืก ื”ืžืฆื‘ ื”ื›ื™ ื’ืจื•ืข ื›ื™ ื”ื›ื™ ืงืœ ืœืฉื›ื•ื— ืœืงืจื•ื ืœ authorize ืื• ืœืงืจื•ื ืœื• ืขื ืคืจืžื˜ืจื™ื ืœื ื ื›ื•ื ื™ื (ืงืจื” ืœื™ ื™ื•ืชืจ ืžื“ื™ ืคืขืžื™ื), ืื‘ืœ ื’ื ื‘ Express ื”ืžืฆื‘ ื‘ืขื™ื™ืชื™ ื›ื™ ืื ื—ื ื• ืžืชื‘ืกืกื™ื ืขืœ ืชื™ืื•ื ื‘ื™ืŸ ื”ืžื™ื“ืœื•ื•ืจ authorize_user ืฉืชื›ืชื•ื‘ ืืช ื”ืžื™ื“ืข ืœืฉื“ื” ื‘ req.locals ื‘ืื•ืชื• ืฉื ื‘ื• ื”ื ืชื™ื‘ ืžืฆืคื” ืœืžืฆื•ื ืื•ืชื•. ื‘ื™ืŸ ืฉืœื•ืฉืช ื”ืืคืฉืจื•ื™ื•ืช ื”ืคื™ืชืจื•ืŸ ืฉืœ ืจื•ืงื˜ ื”ื•ื ื”ื˜ื•ื‘ ื‘ื™ื•ืชืจ ืžืื—ืจ ื•ืื™ ืืคืฉืจ "ืœืฉื›ื•ื—" ืœื‘ืงืฉ ืืช ื” User (ืื ืชืฉื›ื—ื• ืคืฉื•ื˜ ืœื ืชืงื‘ืœื• ืืช ื”ืžื™ื“ืข ืขืœ ื”ืžืฉืชืžืฉ), ื•ืœื ืฆืจื™ืš ืœืชืื ืฉืžื•ืช ื‘ื™ืŸ ืžืกืคืจ ืžืงื•ืžื•ืช ืฉื•ื ื™ื ื‘ืงื•ื“.

ToCode
1 421
# ืžื” ืœืžื“ืชื™ ืž Rocket ืขืœ ื ื™ื”ื•ืœ ืชืœื•ื™ื•ืช ืจื•ืงื˜ ื”ื™ื ืกืคืจื™ื™ืช ืคื™ืชื•ื— ื•ื•ื‘ ืœ Rust. ืœืžืคืชื— ื”ืžืจื›ื–ื™ ืฉืœื” ืงื•ืจืื™ื ืกืจื—ื™ื• ื‘ื ื™ื˜ื– ื•ื”ื•ื ืžืคืชื— ืืช ืจื•ืงื˜ ืžืื– 2016. ืื ืืชื ื›ืžื•ื ื™, ื›ืœื•ืžืจ ืื ืฉื™ื ืฉื ืœื—ืฆื™ื ืžืคืจื•ื™ืงื˜ื™ ืฆื“ ืฉืœ ื‘ืŸ ืื“ื ืื—ื“ ืฉืขื“ื™ื™ืŸ ื ืžืฆืื™ื ื‘ื’ื™ืจืกื” 0.5 ืื– ืื•ืœื™ ืœื ืชืจืฆื• ืœื‘ื—ื•ืจ ืืช ืจื•ืงื˜ ื‘ืชื•ืจ ืชืฉืชื™ืช ืœืคืจื•ื™ืงื˜ ื”ื‘ื ืฉืœื›ื, ื•ื–ื” ื‘ืกื“ืจ. ืื‘ืœ ืืคื™ืœื• ืื ื–ื” ื”ืžืฆื‘ ื”ืกืคืจื™ื” ืขื“ื™ื™ืŸ ืžืขื ื™ื™ื ืช ื•ืžืฆื™ื’ื” ืžื‘ื˜ ืจืขื ืŸ ืขืœ ืคื™ืชื•ื— ื•ื•ื‘ ื‘ืชื•ืš ืฉืคื” ืขื ื”ื’ื“ืจืช ื˜ื™ืคื•ืกื™ื ืกื˜ื˜ื™ืช. ื“ื•ื’ืžืช ื” Hello World ืฉืœื”ื ื ืจืื™ืช ื›ืš:
#[macro_use] extern crate rocket;

#[get("/hello/<name>/<age>")]
fn hello(name: &str, age: u8) -> String {
    format!("Hello, {} year old named {}!", age, name)
}

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", routes![hello])
}
ื•ื”ื™ื ืžื™ื™ืฆืจืช ื ืชื™ื‘ ืขื ืฉื ื™ ืžืฉืชื ื™ื, name ื• age ืฉื‘ื’ืœื™ืฉื” ืืœื™ื• ื™ื—ื–ื™ืจ ื”ื•ื“ืขืช ื˜ืงืกื˜ ืขื ื”ืขืจื›ื™ื. ื–ื” ืœื‘ื“ ื ืจืื” ืื—ืœื” ื•ืขื•ืฉื” ื—ืฉืง ืœื”ืžืฉื™ืš ืœืœืžื•ื“, ืื‘ืœ ื”ื ื•ืฉื ืฉืœ ื”ืคื•ืกื˜ ื”ื™ื•ื ื”ื•ื ื“ื•ื•ืงื ืœื ืจื•ืงื˜ ืืœื ืคื™ืฆ'ืจ ืกืคืฆื™ืคื™ ืฉืœ ืจื•ืงื˜ ืฉื ืงืจื Request Guards. ื”ืจืขื™ื•ืŸ ืžืื•ื“ ืžื–ื›ื™ืจ ืืช ื” Middlewares ืฉืœ ืืงืกืคืจืก ื•ืื•ืžืจ ืฉื›ืฉื™ืฉ ืœื™ ื‘ืงืฉื” ืื– ืœืคื ื™ ืฉืื ื™ ืžื’ื™ืข ืœืงื•ื“ ื”ื˜ื™ืคื•ืœ ื‘ื ืชื™ื‘ ืงื•ื“ื ืฆืจื™ืš ืœืขื‘ื•ืจ ื“ืจืš ื”"ืฉื•ืžืจื™ื" ืฉื™ืงื—ื• ืžื™ื“ืข ืžื”ื‘ืงืฉื” ื•ื™ืืชื—ืœื• ืžืฉืชื ื™ื ืžืกื•ื™ืžื™ื, ืฉืื—ืจื™ ื–ื” ืขื•ื‘ืจื™ื ื›ืคืจืžื˜ืจื™ื ืœื ืชื™ื‘. ื”ื“ื•ื’ืžื” ื”ื‘ืื” ืžืžื—ื™ืฉื” ืืช ื”ืงื•ื ืกืคื˜ ืœื ืจืข:
#[get("/sensitive")]
fn sensitive(key: ApiKey) { /* .. */ }
ื‘ื”ื ื—ื” ืฉื™ืฉ ืœื ื• ื˜ื™ืคื•ืก ื‘ืฉื ApiKey ื•ื”ื˜ื™ืคื•ืก ืžืžืžืฉ ื”ืชื ื”ื’ื•ืช ื‘ืฉื FromRequest, ืื– ืœืคื ื™ ืฉืจื•ืงื˜ ืชืขื‘ื™ืจ ืืช ื”ื˜ื™ืคื•ืœ ืœื ืชื™ื‘ ืฉื”ื’ื“ืจื ื• ื”ื™ื ืชื ืกื” "ืœื™ืฆื•ืจ" ApiKey ืžื”ื‘ืงืฉื”. ื”ื“ื•ื’ืžื” ื”ื‘ืื” ืžืฆื™ื’ื” ืคื•ื ืงืฆื™ื” ื™ื•ืชืจ ืžืคื•ืจื˜ืช ืฉืชื™ืงืจื ืจืง ืื ืžืฉืชืžืฉ ื‘ืžืขืจื›ืช ืžื ืกื” ืœื’ืฉืช ืœื ืชื™ื‘:
/// This route is chosen if the request guard for User passes (e.g. logged in).
#[get("/")]
fn home(user: User, _cookies: Cookies) -> Markup {
    html! {
        head {
            title {"Welcome | Auth0 Rocket Example"}
            link rel="stylesheet" href="static/css/style.css";
        }
        body{
            h1 {"Guarded Route"}
            div {p {
                "You logged in successfully."
            }}
            div {p {
                "Email: " (user.email)
            }}
            div {p {
                a class="login" href="/profile" {"Another private route"}
            }}
        }
    }
}
ื›ืฉื”ืงื•ื“ ืฉืœ User ื”ื•ื:
#[derive(Debug, Serialize, Deserialize)]
struct User {
    user_id: String,
    email: String,
}

impl<'a, 'r> FromRequest<'a, 'r> for User {
    type Error = ();
    fn from_request(request: &'a Request<'r>) -> Outcome<User, ()> {
        let session_id: Option<String> = request
            .cookies()
            .get("session")
            .and_then(|cookie| cookie.value().parse().ok());
        match session_id {
            None => {
                println!("no session id");
                rocket::Outcome::Forward(())
            }
            Some(session_id) => {
                println!("session id: {}", session_id);
                let db = State::<DB>::from_request(request).unwrap();
                let session_key = make_key!("sessions/", session_id);
                match db.get(&session_key.0) {
                    Ok(Some(sess)) => {
                        let sess: Session =
                            deserialize(&sess).expect("could not deserialize session");
                        if sess.expired() {
                            return rocket::Outcome::Forward(());
                        }
                        let user_key = make_key!("users/", sess.user_id);
                        match db.get(&user_key.0) {
                            Ok(Some(user)) => {
                                let user: User =
                                    deserialize(&user).expect("could not deserialize user");
                                rocket::Outcome::Success(user)
                            }
                            _ => rocket::Outcome::Forward(()),
                        }
                    }
                    _ => rocket::Outcome::Forward(()),
                }
            }
        }
    }
}

ToCode
1 421
ื‘ืกื’ื™ืจื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืกื’ื•ืจ ืืช ืชื”ืœื™ื›ื•ืŸ ื”ืจืงืข ื•ื‘ืฉื‘ื™ืœ ื–ื” ื”ื’ื“ืจืชื™ ืคื•ื ืงืฆื™ื™ืช ื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืข ืกื’ื™ืจื”:
def closeEvent(self, event):
    self.finder_thread.exit(0)
ืคื™ืชืจื•ืŸ ื›ื–ื” ื™ื›ื•ืœ ืœืชืช ืžืขื ื” ื˜ื•ื‘ ืœื›ืœ ืชื•ื›ื ื™ืช ื’ืจืคื™ืช ืฉืฆืจื™ื›ื” ืœื‘ืฆืข ืขื‘ื•ื“ื” ื‘ืจืงืข. ื ื›ื•ืŸ ืื™ืŸ ืœื”ื ืขื“ื™ื™ืŸ ืชืžื™ื›ื” ื˜ื•ื‘ื” ื‘ async/await, ืื‘ืœ ืื ื™ ืžืงื•ื•ื” ืฉื‘ืขืชื™ื“ ื’ื ืœื–ื” ื™ื™ืžืฆื ืคื™ืชืจื•ืŸ.

ToCode
1 421
# ื”ืจืฆืช ืžืฉื™ืžื•ืช ื‘ืจืงืข ืขื Qt ื‘ืคื™ื™ืชื•ืŸ ื‘ื›ืชื™ื‘ืช ืชื•ื›ื ื™ื•ืช ื’ืจืคื™ื•ืช ืขื Qt ื‘ Python ื ื•ื›ืœ ืœืฉื™ื ืœื‘ ืฉืคืขื•ืœื•ืช ืืจื•ื›ื•ืช ืดืชื•ืงืขื•ืชืด ืืช ื”ืชื•ื›ื ื™ืช. ืœื“ื•ื’ืžื” ื ื“ืžื™ื™ืŸ ืชื•ื›ื ื™ืช ื”ืžืฆื™ื’ื” ืชื™ื‘ืช ื—ื™ืคื•ืฉ ืœืงื‘ืฆื™ื, ื›ืคืชื•ืจ ื•ืจืฉื™ืžื” ื•ื‘ืœื—ื™ืฆื” ืขืœ ื”ื›ืคืชื•ืจ ื”ืชื•ื›ื ื™ืช ืžื—ืคืฉืช ืงื‘ืฆื™ื ืฉืžืชืื™ืžื™ื ืœืฉื ื”ืงื•ื‘ืฅ ืฉื‘ืชื™ื‘ื” ื•ืžืžืœืืช ืืช ื”ืจืฉื™ืžื” ื‘ืฉืžื•ืช ื”ืงื‘ืฆื™ื ืฉื ืžืฆืื•. ืื ื ืจื™ืฅ ืืช ื”ืชื•ื›ื ื™ืช ืชื•ืš ืฉื™ืžื•ืฉ ื‘ Thread ืื—ื“, ื‘ืœื—ื™ืฆื” ืขืœ ื”ื›ืคืชื•ืจ ืคื™ื™ืชื•ืŸ ื™ืชื—ื™ืœ ืœื—ืคืฉ ืงื‘ืฆื™ื ื•ืœื ื™ื”ื™ื” ื–ืžื™ืŸ ืœื˜ืคืœ ื‘ืื™ืจื•ืขื™ื ืื—ืจื™ื ื”ืงืฉื•ืจื™ื ืœืžืžืฉืง ื”ืžืฉืชืžืฉ - ืœืžืฉืœ ื”ื’ื“ืœื” ืื• ื”ืงื˜ื ื” ืฉืœ ื”ื—ืœื•ืŸ, ืื• ืืคื™ืœื• ืฉื™ื ื•ื™ื™ ืขื™ืฆื•ื‘ ืงื˜ื ื™ื ื›ืฉืกืžืŸ ื”ืขื›ื‘ืจ ืขื•ื‘ืจ ืขืœ ื”ื›ืคืชื•ืจ. ื”ืชื ื”ื’ื•ืช ื›ื–ืืช ืชื™ืชืŸ ืœืžืฉืชืžืฉื™ื ื”ืจื’ืฉื” ืฉื”ืชื•ื›ื ื™ืช ืดืชืงื•ืขื”ืด, ืœืžืจื•ืช ืฉื”ื”ื™ืคืš ื”ื•ื ื”ื ื›ื•ืŸ ื•ื”ืชื•ื›ื ื™ืช ืขื•ื‘ื“ืช ืžืื•ื“ ืงืฉื”. ื™ื•ืชืจ ืžื–ื”, ืจืง ืื—ืจื™ ืฉื™ื™ืžืฆืื• ื›ืœ ื”ืงื‘ืฆื™ื ื•ืœื•ืœืืช ื”ื—ื™ืคื•ืฉ ืชืกืชื™ื™ื ื ืจืื” ืฉื™ื ื•ื™ ื‘ืžืžืฉืง ื”ืžืฉืชืžืฉ ื•ืœื›ืŸ ื‘ืจื’ืข ืื—ื“ ื™ืชื•ื•ืกืคื• ืœืจืฉื™ืžื” ื›ืœ ื”ืงื‘ืฆื™ื ืฉืžืฆืื ื•. ื—ื•ื•ื™ืช ืžืฉืชืžืฉ ื˜ื•ื‘ื” ื™ื•ืชืจ ืชืืคืฉืจ ืœืžืฉืชืžืฉื™ื ืœื”ืžืฉื™ืš ืœืขื‘ื•ื“ ืขื ื”ืžืžืฉืง ื•ืชื•ืกื™ืฃ ืืช ื”ืชื•ืฆืื•ืช ืฉื”ื™ื ืžื•ืฆืืช ืื—ืช-ืื—ืช ื‘ื–ืžืŸ ื‘ื• ื”ืชื•ื›ื ื™ืช ืžื•ืฆืืช ืื•ืชืŸ. ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœ Qt ื™ืฉ ืฉืชื™ ื“ืจื›ื™ื ืžืจื›ื–ื™ื•ืช ืœื”ื’ื™ืข ืœืชื•ืฆืื” ื–ื•: 1. ืืคืฉืจ ืœื›ืชื•ื‘ ืืช ืœื•ืœืืช ื”ื—ื™ืคื•ืฉ ืขื ืดื”ืคืกืงื•ืชืด, ื›ืš ืฉื›ืœ ืคืขื ืฉืžื•ืฆืื™ื ืงื•ื‘ืฅ ืฉืžืชืื™ื ืœืžื™ืœืช ื”ื—ื™ืคื•ืฉ ื ืขืฆื•ืจ ืœื ืฉื•ื ื•ื ื‘ืงืฉ ืž Qt ืœื˜ืคืœ ื‘ืื™ืจื•ืขื™ื ื’ืจืคื™ื™ื ืฉืื•ืœื™ ื”ืฆื˜ื‘ืจื•. ื–ื” ื™ื™ืชืŸ ื—ื•ื•ื™ืช ืžืฉืชืžืฉ ื˜ื•ื‘ื” ื™ื•ืชืจ ื•ื™ืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื‘ืชื•ื›ื ื™ืช ื—ื™ืคื•ืฉ ื”ืงื‘ืฆื™ื, ืื‘ืœ ืœื ืชืžื™ื“ ืืคืฉืจื™ ื‘ืžืงืจื” ื”ื›ืœืœื™ ื›ื™ ืœื ืชืžื™ื“ ื™ืฉ ืžืงื•ื ื˜ื•ื‘ ืœืขืฆื™ืจื•ืช ื›ืืœื”. 2. ืคื™ืชืจื•ืŸ ื™ื•ืชืจ ื›ืœืœื™ ื™ื”ื™ื” ืœืคืชื•ื— Thread ื ื•ืกืฃ ื•ืœื‘ืฆืข ืืช ื”ืœื•ืœืื” (ื‘ืžืงืจื” ืฉืœื ื• ืœื•ืœืืช ื—ื™ืคื•ืฉ) ืžืชื•ืš ื” Thread ื”ื ื•ืกืฃ. ื”ืชืงืฉื•ืจืช ื‘ื™ืŸ ืชื”ืœื™ื›ื•ืŸ ืจืืฉื™ ื‘ Qt ืœื‘ื™ืŸ ืชื”ืœื™ื›ื•ืŸ ื ื•ืกืฃ ืฉืจืฅ ื‘ืจืงืข ืžืชื‘ืฆืขืช ื‘ืžื ื’ื ื•ืŸ ื”ืกื™ื’ื ืœื™ื ื”ืจื’ื™ืœ ืฉืœ Qt - ื”ืชื”ืœื™ื›ื•ืŸ ื”ืจืืฉื™ ืฉื•ืœื— ืกื™ื’ื ืœ ื•ืชื”ืœื™ื›ื•ืŸ ื”ืจืงืข ืงื•ืจื ืืช ื”ืกื™ื’ื ืœ ื”ื–ื” ื•ืžืชื—ื™ืœ ืœืขื‘ื•ื“. ื›ืœ ืคืขื ืฉืชื”ืœื™ื›ื•ืŸ ื”ื—ื™ืคื•ืฉ ืžื–ื”ื” ืชื•ืฆืื” ื—ื“ืฉื” ื”ื•ื ื™ืฉืœื— ืกื™ื’ื ืœ ื•ื”ืชื”ืœื™ื›ื•ืŸ ื”ืจืืฉื™ ื™ื•ืกื™ืฃ ืคืจื™ื˜ ื ื•ืกืฃ ืœืชื™ื‘ืช ื”ืชื•ืฆืื•ืช. ืงื•ื“? ื‘ืจื•ืจ, ื•ืžืกืคื™ืง ืงื•ื‘ืฅ ืื—ื“:
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
from pathlib import Path
from time import sleep

class Finder(QObject):
    path_found = Signal(str)

    def __init__(self, parent=None):
        super().__init__(parent)

    def search(self, text):
        results = Path('.').rglob(text)

        for result in results:
            self.path_found.emit(str(result.absolute()))
            sleep(0.01)



class Ui(QWidget):
    start_search = Signal(str)

    def __init__(self, parent=None):
        super().__init__(parent)
        self.results = QListWidget()
        self.searchbox = QLineEdit()
        self.search_button = QPushButton("Search")
        self.finder = Finder()
        self.finder_thread = QThread(self)
        self.finder.moveToThread(self.finder_thread)
        self.finder_thread.start()

        self.main_layout = QVBoxLayout(self)
        self.top_layout = QHBoxLayout()
        self.main_layout.addLayout(self.top_layout)

        self.top_layout.addWidget(self.searchbox)
        self.top_layout.addWidget(self.search_button)
        self.main_layout.addWidget(self.results)

        self.search_button.clicked.connect(self.search)

        self.start_search.connect(self.finder.search)
        self.finder.path_found.connect(self.results.addItem)

    def search(self):
        self.results.clear()
        self.start_search.emit(self.searchbox.text())

    def closeEvent(self, event):
        self.finder_thread.exit(0)



app = QApplication()
w = Ui()
w.show()
app.exec()
ืื– ืžื” ื”ื™ื” ืœื ื• ื›ืืŸ? 1. ื”ืื•ื‘ื™ืงื˜ Finder ืื—ืจืื™ ืขืœ ื—ื™ืคื•ืฉ ื”ืงื‘ืฆื™ื. ื”ื•ื ื™ื•ืจืฉ ืž QObject ื›ื™ ื›ื›ื” Qt ื“ื•ืจืฉ. ื”ืคื•ื ืงืฆื™ื” moveToThread ืฉืœื• ืฉื•ืœื—ืช ืื•ืชื• ืœืขื‘ื•ื“ ื‘ Thread ืื—ืจ. 2. ื” Thread ืื’ื‘ ื”ื•ื Thread ืฉืœ Qt ื•ืœื ืฉืœ ืคื™ื™ืชื•ืŸ. ื ื•ืฆืจ ื‘ืืžืฆืขื•ืช QThread(). 3. ื” Widget ื”ืจืืฉื™ ืžื’ื“ื™ืจ ืกื™ื’ื ืœ ื›ื“ื™ ืœืื•ืชืช ืœ Finder ืฉืฆืจื™ืš ืœื”ืชื—ื™ืœ ืืช ื”ื—ื™ืคื•ืฉ, ื•ื” Finder ืžื’ื“ื™ืจ ืกื™ื’ื ืœ ื›ื“ื™ ืœืื•ืชืช ืœ Widget ื”ืจืืฉื™ ืฉื”ื•ื ืžืฆื ืงื•ื‘ืฅ. 4. ื”ืฉื•ืจื•ืช ืฉืžื—ื‘ืจื•ืช ืืช ื”ืกื™ื’ื ืœื™ื ืœืงื•ื“ื™ ื”ื˜ื™ืคื•ืœ ืžื•ืคืขืœื•ืช ื‘ init ืฉืœ ื” Widget ื•ื”ืŸ:
self.start_search.connect(self.finder.search)
self.finder.path_found.connect(self.results.addItem)
ื›ืœ ื”ืฉืืจ ื–ื” ืงืกื ืื•ื˜ื•ืžื˜ื™ ืฉืœ Qt - ื›ืฉื”ืกื™ื’ื ืœ start_search ื ืฉืœื— ื” Finder ืžืชื—ื™ืœ ืœื—ืคืฉ ื‘ืจืงืข, ื•ื›ืœ ืชื•ืฆืื” ืฉื”ื•ื ืžืฆื ื ืฉืœื—ืช ื“ืจืš ืกื™ื’ื ืœ ืœืคื•ื ืงืฆื™ื” addItem ืฉืœ ืชื™ื‘ืช ื”ืชื•ืฆืื•ืช.

ToCode
1 421
# ื”ืคืจื•ื™ืงื˜ ื”ืจืืฉื•ืŸ ืžื” ืขื•ืฉื™ื ื›ืฉืื™ืŸ ืขื“ื™ื™ืŸ ืชื™ืง ืขื‘ื•ื“ื•ืช? ืžื” ืขื•ืฉื™ื ื›ืฉืจื•ืฆื™ื ืœื”ื™ื›ื ืก ืœื”ื™ื™ื˜ืง, ืื‘ืœ ืืฃ ืื—ื“ ืœื ืžื“ื‘ืจ ืื™ืชืš (ื•ื‘ืฆื“ืง) ื›ื™ ื”ื ืœื ืžื–ื”ื™ื ืืช ื”ืขืจืš ืขื‘ื•ืจื, ื›ื™ ื”ื (ืขื“ื™ื™ืŸ) ืœื ืจื•ืื™ื? ื”ืืชื’ืจ ื›ืืŸ ื”ื•ื ื›ืคื•ืœ ื›ื™ ืฆืจื™ืš ื’ื ืœื‘ื ื•ืช ืชื™ืง ืขื‘ื•ื“ื•ืช, ื’ื ืฉื”ืคืจื•ื™ืงื˜ื™ื ื™ื”ื™ื• ืžืกืคื™ืง ื˜ื•ื‘ื™ื ื•ื’ื ืœื”ืกืคื™ืง ืœืขืฉื•ืช ืืช ื”ื›ืœ ืœืคื ื™ ืฉื”ื›ืกืฃ ื™ื™ื’ืžืจ - ื•ืืช ื›ืœ ื–ื” ืฆืจื™ืš ืœืขืฉื•ืช ืขื•ื“ ืœืคื ื™ ืฉื ื›ื ืกืช ืœืขื‘ื•ื“ื” ื•ืœืคื ื™ ืฉื™ืฉ ืœืš ืืช ื”ื›ืœื™ื ื•ื”ื™ื“ืข ืœื”ืฆืœื™ื—. ืžืืชื’ืจ, ืื‘ืœ ืœื ื‘ืœืชื™ ืืคืฉืจื™. ื›ื™ื•ื•ืŸ ืื—ื“ ืฉืขื•ื‘ื“ ื”ื•ื ืœื‘ื—ื•ืจ ืคืจื•ื™ืงื˜ ืื—ื“ ื•ืœื‘ื ื•ืช ืื•ืชื• ื‘ืฆื•ืจื” ืคืชื•ื—ื” ืชื•ืš ื›ื“ื™ ื—ื™ืคื•ืฉ ืขื‘ื•ื“ื”, ื•ืชื•ืš ื”ื“ื’ืฉืช ื”ืžืกื’ืจืช. ื›ืœื•ืžืจ: 1. ื‘ื•ื ื™ื ืงื•ื“ื ื“ืฃ ื ื—ื™ืชื” ืฉืžืกืคืจ ืขืœ ื”ืคืจื•ื™ืงื˜. ืชื ื™ื—ื• ืฉื”ื›ืœ ื›ื‘ืจ ื›ืชื•ื‘ ื•ืขื•ื‘ื“ ื•ืืคื™ืœื• ืชื•ื›ืœื• ืœืฉื™ื Screenshots ืžื”ืคืจื•ื™ืงื˜ ื”ื“ืžื™ื•ื ื™ (ืžื ื•ืขื™ ื‘ื™ื ื” ืžืœืื›ื•ืชื™ืช ื™ืฉืžื—ื• ืœื™ื™ืฆืจ ืœื›ื ื›ืžื”). 2. ื‘ื•ื ื™ื ืคืจื•ื™ืงื˜ ื‘ื’ื™ื˜ื”ืื‘ ืขื ืงื•ื‘ืฅ readme ืžื•ืฉืงืข ืฉืžืกืคืจ ืขืœ ื”ืคืจื•ื™ืงื˜. 3. ืืช ื”ืคื™ืชื•ื— ืžืชื—ื™ืœื™ื ืขื ืชืฉืชื™ื•ืช ืฉืœ ื‘ื“ื™ืงื•ืช ื• Deployment ืื•ื˜ื•ืžื˜ื™ ื“ืจืš Github Actions. 4. ืžืฉืงื™ืขื™ื ื‘ื”ื•ื“ืขื•ืช ืงื•ืžื™ื˜ (ืžื™ืฉื”ื• ืืžืจ gitpoet?) ืขื›ืฉื™ื• ืืคืฉืจ ืœื”ืชื—ื™ืœ ืœืขื‘ื•ื“ - ืชื•ืš ื›ื“ื™ ื—ื™ืคื•ืฉ ื”ืขื‘ื•ื“ื” ืืชื ืžืžืฉื™ื›ื™ื ืœื”ืฉืงื™ืข ืœืคื—ื•ืช ื—ืฆื™ ืžื”ื–ืžืŸ ืฉืœื›ื ื‘ืคื™ืชื•ื— ื”ืคืจื•ื™ืงื˜ ืฉื‘ื—ืจืชื. ื‘ืงื•ืจื•ืช ื—ื™ื™ื ืžื•ืคื™ืข ืงื™ืฉื•ืจ ืœื“ืฃ ื”ื ื—ื™ืชื” ืฉืœ ื”ืคืจื•ื™ืงื˜ ื›ื“ื™ ืœื”ืจืฉื™ื ืืช ื”ืžื’ื™ื™ืกื™ื, ื•ื‘ื–ืžืŸ ื”ืจืื™ื•ื ื•ืช ืืชื ืžืกืคืจื™ื ืขืœ ื”ืืชื’ืจื™ื ืื™ืชื ืืชื ืžืชืžื•ื“ื“ื™ื ื‘ืžื”ืœืš ื”ืคื™ืชื•ื—. ื ื›ื•ืŸ ื”ืคืจื•ื™ืงื˜ ืขื“ื™ื™ืŸ ืœื ืขื•ื‘ื“ ื•ืื™ืŸ ืฉื ื”ืžื•ืŸ ืงื•ื“, ืื‘ืœ ื›ืฉื”ื›ื™ื•ื•ืŸ ื‘ืจื•ืจ ื•ื”ืชืฉืชื™ืช ื”ื‘ืกื™ืกื™ืช ื˜ื•ื‘ื” ืืคืฉืจ ืœืจืื•ืช ืืช ื”ืคื•ื˜ื ืฆื™ืืœ ื’ื ื‘ืคืจื•ื™ืงื˜ ืื—ื“ ืฉืขื“ื™ื™ืŸ ื ืžืฆื ื‘ื”ืชื—ืœื”.

ToCode
1 421
# ื•ืื•ืœื™ Icon Fonts ืœื ื”ื™ื• ืจืขื™ื•ืŸ ื›ื–ื” ื˜ื•ื‘ ื‘ืžืื™ 2012 ื“ื™ื™ื‘ ื’ืื ื“ื™ ืคื™ืจืกื ืืช ืกืคืจื™ื™ืช Font Awesome ืฉื›ืชื‘, ืฉืื™ืคืฉืจื” ืœืžืชื›ื ืชื™ื ืœื‘ื ื•ืช ืื™ื™ืงื•ื ื™ื ื‘ืืžืฆืขื•ืช ืื•ืชื™ื•ืช ื‘ื’ื•ืคืŸ. ื‘ื’ืœืœ ืฉื”ื™ื” ื™ื•ืชืจ ืงืœ ืœืขืฆื‘ ื˜ืงืกื˜ ืžืืฉืจ ืœืขืฆื‘ ืชืžื•ื ื•ืช, ืืคืฉืจ ื”ื™ื” ื‘ืืžืฆืขื•ืช CSS ืœืฉื ื•ืช ืืช ื”ืฆื‘ืขื™ื ื•ื”ื’ื“ืœื™ื ืฉืœ ื”ืื™ื™ืงื•ื ื™ื ื•ื›ืš ืœื”ืชืื™ื ืื•ืชื ืœื›ืœ ืขื™ืฆื•ื‘. ื”ื™ื•ื ื›ื‘ืจ ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ SVG ื›ื“ื™ ืœื”ืฉื™ื’ ื‘ื“ื™ื•ืง ืืช ืื•ืชื• ืืคืงื˜, ืื‘ืœ ื”ืืงื™ื ืฉื ื•ืฆืจื• ื‘ 2012 ืœื ืžืชื™ื ื‘ืงืœื•ืช. ื•ื›ืš ืœื ืžื–ืžืŸ ื—ื‘ืจื” ื‘ื™ืงืฉื” ืฉืืขื–ื•ืจ ืœื” ืœืคืชื•ืจ ื‘ืขื™ื” ื‘ืืชืจ. ืžืกืชื‘ืจ ืฉืžืฉืชืžืฉื™ื ืฉื ืขื–ืจื• ื‘ืงื•ืจืื™ ืžืกืš ื›ื“ื™ ืœื’ืœื•ืฉ ื‘ืืชืจ ืฉืžืขื• ืื•ืชื™ื•ืช ืžื•ื–ืจื•ืช ื•ืœื ืงืฉื•ืจื•ืช ื‘ื™ืŸ ื”ื˜ืงืกื˜ื™ื ื”ืจื’ื™ืœื™ื. ื–ื” ื ืฉืžืข ื›ืื™ืœื• ืงื•ืจื ื”ืžืกืš ืคืชืื•ื ืžืžืฆื™ื ื˜ืงืกื˜ื™ื ืฉืœื ืžื•ืคื™ืขื™ื ื‘ื˜ืงืกื˜. ืžื”ืจ ืžืื•ื“ ืฉืžื ื• ืœื‘ ืฉื”ืื•ืชื™ื•ืช ื”ืžื•ื–ืจื•ืช ืžื•ืคื™ืขื•ืช ื‘ื“ื™ื•ืง ืื™ืคื” ืฉื‘ืืชืจ ืžื•ืคื™ืขื™ื ืื™ื™ืงื•ื ื™ื, ื•ืฉื”ืืชืจ ืžืฉืชืžืฉ ื‘ Icon Font. ื‘ืจื’ืข ืฉื—ื™ื‘ืจื ื• ืืช ื”ื ืงื•ื“ื•ืช ื’ื ื”ืคื™ืชืจื•ืŸ ื”ื™ื” ืงืœ - ืื• ื›ืžื• ืฉื›ื•ืชื‘ื™ื ื‘ืืชืจ ืฉืœ Font Awesome ืคืฉื•ื˜ ืฆืจื™ืš ืœื”ืกืชื™ืจ ืืช ื”ืื™ื™ืงื•ื ื™ื ืžืงื•ืจื ื”ืžืกืš ืขื:
<span class="fa-solid fa-envelope" aria-hidden="true" />
ืื– ื›ืŸ ื’ื ืื™ื™ืงื•ื ื™ื ื‘ื’ื•ืคืŸ ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื ื’ื™ืฉื™ื. ื—ืฉื•ื‘ ืจืง ืœืฉื™ื ืœื‘ ื•ืœื–ื›ื•ืจ ืืช ื”ื˜ื™ืคื•ืœ ื”ืžื™ื•ื—ื“ ื‘ื”ื ื›ืฉืžืฉืชืžืฉื™ื ื‘ื”ื ื‘ืืชืจ.