en
Feedback
ToCode

ToCode

Open in Telegram

讟讬驻讬诐 拽爪专讬诐 诇诪转讻谞转讬诐 诪讗转 讬谞讜谉 驻专拽

Show more
1 418
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
ToCode
1 419
# 讞讬讚转 Strict Mode 讘 JavaScript 讗谞讬 讗讜讛讘 讗讬讱 砖 JavaScript 诇讜拽讞转 专注讬讜谞讜转 诪诪拽讜诪讜转 讗讞专讬诐, 砖讜讘专转 讜诪注拽诪转 讗讜转诐 讜讘住讜祝 诪讙讬砖讛 诪专拽 驻讜砖专 讜讚诇讜讞. 讟讜讘 讘拽讬爪讜专 讚讬 注诐 讛讗讜讻诇 讘讜讗讜 谞讚讘专 专讙注 注诇 拽讜讚. 讛拽讜讚 讛讘讗 诪讚驻讬住 9, 讜讝讛 讛讙讬讜谞讬 讗讘诇 拽爪转 诪讜讝专:
let x = 09;
console.log(x);
诪讜讝专 讻讬 讘 Python 拽讜讚 讚讜诪讛 讝讜专拽 砖讙讬讗讛:
# Error: SyntaxError: leading zeros in decimal integer literals are not permitted
x = 09
print(x)
讘 Ruby 讛拽讜讚 讝讜专拽 砖讙讬讗讛:
# SyntaxError ((irb):1: Invalid octal digit)
x = 09
讘 Clojure 讛拽讜讚 讝讜专拽 砖讙讬讗讛:
;; Invalid number: 09
(let [x 09] (print x))
讜讛讗诪转 砖专拽 Scheme 讛住讻讬诪讛 诇砖转祝 讗讬转讬 驻注讜诇讛 讜诇讛讚驻讬住 讗转 讛诪住驻专 9 讘讚讜诪讛 诇 JavaScript:
(display 09)
讗讘诇, 讜驻讛 JavaScript 诪转讞讬诇讛 诇讛讬讜转 诪讜讝专讛, 谞住讜 诇讞砖讜讘 诪讛 拽讜专讛 讻砖诪讞诇讬驻讬诐 讗转 讛-9 诇-10:
let x = 010;
console.log(x);
讜诇讞讬讚讛 - 诪讛 拽讜专讛 砖诐? 诇诪讛 讝讛 拽讜专讛 (专诪讝 讘讛讜讚注讜转 讛砖讙讬讗讛 砖诇 讻诇 讛砖驻讜转 讛讗讞专讜转)? 讜讗讬讱 Strict Mode 讬讻讜诇 诇注讝讜专 诇讬 诇讛讬讝讛专 诪诪爪讘讬诐 讻讗诇讛?

ToCode
1 419
# 讛讬讜诐 诇诪讚转讬: 谞拽讜讚转 注爪讬专讛 注诐 转谞讗讬 讘 Chrome 讗谞讬 诇讗 诪讗诪讬谉 砖诇拽讞 诇讬 讻诇 讻讱 讛专讘讛 砖谞讬诐 (讜讟注讜转 讗讞转 讘诇讞讬爪讛 注诇 讛注讻讘专) 讘砖讘讬诇 诇讙诇讜转 讗转 讝讛, 讗讘诇 讛讙讬诇讜讬 讻诇 讻讱 诪诇讛讬讘 砖讛讜讗 诪爪讚讬拽 驻讜住讟 诪砖诇讜, 讙诐 讗诐 拽爪专. 注讚 注讻砖讬讜 讻诇 驻注诐 砖讛讬讛 诇讬 拽讜讚 砖谞专讗讛 讻讱:
for (let i=99; i > 0; i--) {
    consoe.log(`${i} bottles of beer on the wall`);
}
讜专爪讬转讬 诇注爪讜专 诇诪砖诇 讻砖 i 讛讬讛 砖讜讜讛 诇-10, 讛讜住驻转讬 讗转 讛转谞讗讬 讛讘讗 诇拽讜讚 (讘讗诪转!):
for (let i=99; i > 0; i--) {
    consoe.log(`${i} bottles of beer on the wall`);
    if (i == 10) debugger;
}

讜讛谞讛, 诇讙诪专讬 讘诪拽专讛 讛讙注转讬 讛讬讜诐 诇砖讬诐 谞拽讜讚转 注爪讬专讛 讘讻专讜诐, 讗讘诇 讘诪拽讜诐 诇诇讞讜抓 注诇 讛讻驻转讜专 讛砖诪讗诇讬 砖诇 讛注讻讘专 讻砖讛爪讘注转讬 注诇 诪住驻专 讛砖讜专讛 讘讞诇讜谉 讛 Debugger, 谞诇讞抓 讛讻驻转讜专 讛讬诪谞讬. 诪住转讘专 砖讘诪爪讘 讻讝讛 讻专讜诐 驻讜转讞 转驻专讬讟 讻驻转讜专 讬诪谞讬 讜讗讞转 讛讗讜驻爪讬讜转 讘转驻专讬讟 谞拽专讗转 Conditional Breakpoint. 诇讜讞爪讬诐 注诇 讛驻专讬讟, 讻讜转讘讬诐 讗转 讛转谞讗讬 (i == 10 讘诪拽专讛 砖诇谞讜) 讜... Voila, 诇讗 爪专讬讱 诇讻转讜讘 拽讜讚 JavaScript 讘砖讘讬诇 诇注爪讜专 专拽 讻砖转谞讗讬 诪住讜讬诐 诪转拽讬讬诐. 讗诐 诇讗 讛讻专转诐 谞住讜 讗转 讝讛. 讻谉, 注讻砖讬讜, 诇讗 爪专讬讱 诇讞讻讜转. 讝讛 注讜讘讚 讜讝讛 讬砖谞讛 诇讻诐 讗转 讛讞讬讬诐.

ToCode
1 419
# 讟讻谞讬拽讛 驻砖讜讟讛 诇转讜讜讬讜转 爪驻讜转 讘 CSS 讗讞讚 讛讟专讬拽讬诐 讛砖讬诪讜砖讬讬诐 讘讗转专讬 诪讜讘讬讬诇 讛讜讗 诇讛驻讜讱 讗转 讛 Placeholder 砖诇 转讬讘转 拽诇讟 诇 Label 砖诇 讗讜转讛 转讬讘讛. 讘诪讬诇讬诐 讗讞专讜转 讘诪拽讜诐 诇讻转讜讘 转讜讜讬转 Email 讜讗讞专讬讛 转讬讘转 讟拽住讟 注讘讜专 讗讬诪讬讬诇 注诐 placeholder 砖诪讬讬爪讙 拽诇讟 讗驻砖专讬 讻诪讜 讝讛:
<label>
    Email:
    <input type="email" placeholder="demo@gmail.com" />
</label>
讗谞讞谞讜 专讜讗讬诐 转讬讘讜转 讟拽住讟 砖谞专讗讜转 讻讱:
<input type="email" placeholder="Email Address" />
讛讬转专讜谉 注讘讜专 诪注爪讘讬诐 砖讗讜讛讘讬诐 讗转 讛讟专讬拽 讛讜讗 砖讝讛 讞讜住讱 诪拽讜诐. 讗转讛 诇讗 爪专讬讱 诇砖讬诐 讙诐 转讜讜讬转 讟拽住讟 讜讙诐 转讬讘转 拽诇讟, 讜讬讻讜诇 诇讛住转驻拽 专拽 讘转讬讘转 讛拽诇讟. 诪讘讞讬谞转 讛诪砖转诪砖讬诐 讛讞讬住专讜谉 讛专讗砖讜谉 讛讜讗 砖 Placeholder 讻转讜讘 讘讚专讱 讻诇诇 讘讙讜驻谉 讘讛讬专 讬讜转专 诪讛讙讜驻谉 讛专讙讬诇 砖诇 转讜讜讬转 讟拽住讟, 讗讘诇 讛讞讬住专讜谉 讛讙讚讜诇 讬讜转专 讛讜讗 砖讛 Placeholder 谞注诇诐 讻砖诪转讞讬诇讬诐 诇讻转讜讘 讟拽住讟 讘转讬讘讛. 驻讬转专讜谉 讗驻砖专讬 讗讞讚 诇诪爪讘 谞拽专讗 Floating Labels 讗讜 转讜讜讬讜转 爪驻讜转. 讝讛 注讜讘讚 讻讻讛: 1. 讘诪爪讘 专讙讬诇 讗谞讞谞讜 诪住转讬专讬诐 讗转 讛转讜讜讬转 讻讚讬 砖诪砖转诪砖 讬专讗讛 专拽 讗转 讛 Placeholder 讘转讜讱 讛转讬讘讛. 2. 讻砖转讬讘转 讛讟拽住讟 谞诪爪讗转 讘驻讜拽讜住 讗谞讞谞讜 注讜讘专讬诐 诇讛爪讬讙 讗转 讛转讜讜讬转, 讗讘诇 诪拽讟讬谞讬诐 讗转 讛转讬讘讛 讻讱 砖讛诪拽讜诐 讬讞讜诇拽 讘讬谉 转讜讜讬转 讛讟拽住讟 (砖谞诪爪讗转 诇诪注诇讛) 诇讟拽住讟 注爪诪讜 砖诪砖转诪砖 讻讜转讘 讘转讜讱 讛转讬讘讛. 讗驻砖专 诇讛砖转诪砖 讘驻诇拽住讘讜拽住 讻讚讬 诇住讚专 讗转 砖谞讬 讛专讻讬讘讬诐. 拽讜讚? 讘专讜专. 讛谞讛 讛 HTML:
<label>
  <input type="text" placeholder="name" />
  <span class="label-text">Name</span>
</label>
讜讝讛 讛 CSS:
label {
    position: relative;
    height: 50px;
    display: flex;
    flex-direction: column-reverse;
}

.label-text {
  left:-10000px;
  position:absolute;
  top:auto;
  width:1px;
  height:1px;
  overflow: hidden;
  background: orange;
  color: white;
}

label input {
  font-size: 24px;
  height: 100%;
  border: 1px solid orange;
  box-sizing: border-box;
}

input:focus::placeholder {
  color: transparent;
}

input:focus + .label-text {
  position: relative;
  width: auto;
  height: auto;
  left: 0;
}

input:focus {
  font-size: 18px;
  height: auto;
}
砖讬诪讜 诇讘 砖讘讙诇诇 诪讙讘诇讜转 砖诇 CSS 讗谞讬 爪专讬讱 诇讻转讜讘 讗转 讛 label-text 讗讞专讬 讛 input (讻讚讬 砖讗讜讻诇 诇讛砖转诪砖 讘住讬诪谉 讛驻诇讜住 诇注爪讘 讗转 讛 label-text). 讚讘专 谞讜住祝 砖砖讜讜讛 诇专讗讜转 讛讜讗 讛砖讬诪讜砖 讘 position 讻讚讬 诇讛住转讬专 讗转 讛讟拽住讟, 讗讘诇 诇讛砖讗讬专 讗讜转讜 拽专讬讗 注讘讜专 Screen Readers. 讘爪讜专讛 讻讝讗转 讻砖诪讙讬注 拽讜专讗 诪住讱 诇拽专讜讗 讗转 讛讚祝 讛讜讗 注讚讬讬谉 讬讜讻诇 诇讛拽专讬讗 讗转 讟拽住讟 讛转讜讜讬转 (讝讛 驻讜转专 诇谞讜 讘注讬讛 砖讛讬转讛 讘砖讬诪讜砖 专讙讬诇 讘 Placeholder 诇爪讜专讱 讛讙讚专转 转讜讜讬转 诇转讬讘讛). 讛诪谞讙谞讜谉 砖讜诇讞 讗转 讛讟拽住讟 讗诇祝 驻讬拽住诇讬诐 砖诪讗诇讛 讗讘诇 诪砖讗讬专 讗讜转讜 讘讙讜讚诇 驻讬拽住诇 讗讞讚, 讻讬 拽讜专讗讬 诪住讱 诪转注诇诪讬诐 诪讗诇诪谞讟讬诐 讘讙讜讚诇 0. 讜讬砖 讙诐 拽讜讚驻谉 讘拽讬砖讜专: https://codepen.io/ynonp/pen/Vwvbrxm, 讗讜 讘讛讟诪注讛: <iframe height="300" style="width: 100%;" scrolling="no" title="Vwvbrxm" src="https://codepen.io/ynonp/embed/Vwvbrxm?height=300&theme-id=20374&default-tab=css,result" frameborder="no" allowtransparency="true" allowfullscreen="true" loading="lazy"> See the Pen <a href='https://codepen.io/ynonp/pen/Vwvbrxm'>Vwvbrxm</a> by Ynon Perek (<a href='https://codepen.io/ynonp'>@ynonp</a>) on <a href='https://codepen.io'>CodePen</a>. </iframe>

ToCode
1 419
# 讗讬讱 诇讘讞讜专 诪驻转讞讜转 Cache 诇讗转专 讚讬谞诪讬 讗讜诪专讬诐 砖讬砖 专拽 砖转讬 讘注讬讜转 拽砖讜转 讘诪讚注讬 讛诪讞砖讘: 讗讬讱 诇讘讞讜专 砖诪讜转 诇讚讘专讬诐 讜讗讬讱 诇讛讞诇讬讟 诪转讬 爪专讬讱 诇谞拽讜转 讗转 讛 Cache. 讛砖讘讜注 讛注诇讬转讬 驻讬爪'专 砖诇 Server Side Rendering 砖讚讞祝 讗讜转讬 诇驻转讜专 诇驻讞讜转 诇讗转专 讟讜拽讜讚 讗转 讛讘注讬讛 讛砖谞讬讛 讜讘驻讜住讟 讛讬讜诐 讗谞住讛 诇住讻诐 讗转 注讬拽专讬 讛讚讘专讬诐. ## 诇诪讛 爪专讬讱 诇讘讞讜专 诪驻转讞 Cache 讘讗转专 讚讬谞诪讬 讻诇 讚祝 讘讗转专 谞讜爪专 讘转讙讜讘讛 诇讛讙注讛 砖诇 讙讜诇砖 住驻爪讬驻讬 砖诪讙讬注. 诪住驻专 讙讜诇砖讬诐 砖诪讙讬注讬诐 讘讚讬讜拽 诇讗讜转讛 讻转讜讘转 诇驻注诪讬诐 爪专讬讻讬诐 诇拽讘诇 讚祝 砖谞专讗讛 讗讞专转 诇讙诪专讬. 拽讞讜 讗转 ynet 诇讚讜讙诪讗: 讻诇 讛讝诪谉 注讜诇讜转 讻转讘讜转 讞讚砖讜转, 讜诇讻谉 讗讬 讗驻砖专 诇砖诪讜专 讗转 讚祝 讛讘讬转 砖诇 ynet 讘讝讬讻专讜谉 讜诇砖诇讜讞 诇讻讜诇诐 讻诇 讛讝诪谉 讗转 讗讜转讜 讚祝. 讻诇 驻注诐 砖讙讜诇砖 诪讙讬注 讗谞讞谞讜 爪专讬讻讬诐 诇讘讚讜拽 讘 DB 诪讛谉 讛讻转讘讜转 讛讞讚砖讜转 讘讬讜转专 讜诇讬讬爪专 讚祝 注讘讜专 讗讜转讜 讛讙讜诇砖. 讻讱 讙诐 讘讟讜拽讜讚 - 诪讗讞专 讜讛讘诇讜讙 诪转注讚讻谉 诇注转讬诐 拽专讜讘讜转, 讻诇 驻注诐 砖讙讜诇砖 诪讙讬注 诇讚祝 讛专讗砖讬 砖诇 讛讘诇讜讙 讛砖专转 讘讜讚拽 讘讘住讬住 讛谞转讜谞讬诐 诪讛 讛驻讜住讟讬诐 讛注讚讻谞讬讬诐 讘讬讜转专 讜讘讜谞讛 讚祝 讘讬转 讞讚砖 注讘讜专 讗讜转讛 讘拽砖讛. 讛诪注讘专 诇 Server Sider Rendering 讗讜诪专 砖讻诇 讘谞讬讛 砖诇 讚祝 讛讜诇讻转 诇讛讬讜转 讛专讘讛 讬讜转专 诪住讜讘讻转 讻讬 爪专讬讱 诇讛专讬抓 讗转 拽讜讚 专讬讗拽讟 砖诇 讛讗转专 讘诪诇讜讗讜 讘爪讚 讛砖专转. 讗讘诇, 拽诇 诇砖讬诐 诇讘 砖讛讘诇讜讙 讗讜诪谞诐 诪转注讚讻谉 驻注诐 讘讬讜诐 讗讘诇 讙讜诇砖讬诐 诪讙讬注讬诐 讘转讚讬专讜转 讛专讘讛 讬讜转专 讙讘讜讛讛, 讜诇讻谉 诪住驻讬拽 诇讛专讬抓 讗转 拽讜讚 专讬讗拽讟 讛讻讘讚 注讘讜专 讛讙讜诇砖 讛专讗砖讜谉 砖诪讙讬注 讘讻诇 讬讜诐, 诇砖诪讜专 讗转 讛转讜爪讗讛 讜诇砖诇讜讞 讗讜转讛 诇砖讗专 讛讙讜诇砖讬诐 砖讛讙讬注讜 讘讗讜转讜 讬讜诐. 讘砖讘讬诇 诇诪诪砖 讗转 讛诇讜讙讬拽讛 讛讝讗转 讘拽讜讚 讛注诇讬转讬 砖专转 redis 砖砖讜诪专 讗转 讻诇 讚驻讬 讛转讜爪讗讜转 砖谞砖诇讞讜 诇讙讜诇砖讬诐 - 讜讛砖讗诇讛 讛拽砖讛 诪讛讻讜转专转 讛讬讗 讗讬讱 讗驻砖专 诇讚注转 砖讙讜诇砖 讞讚砖 砖诪讙讬注 诪讘拽砖 讚祝 砖讻讘专 讬砖 诇谞讜? 诪讛 砖讘讟讜讞 诇讗 讬注讘讜讚 讝讛 诇讛砖转诪砖 讘讻转讜讘转 讛注诪讜讚. 讛讻转讜讘转 https://www.tocode.co.il/blog 砖诪讜讘讬诇讛 诇讘诇讜讙 讻讗谉 转讬砖讗专 讝讛讛 讙诐 诪讞专, 诇诪专讜转 砖转讜讻谉 讛讚祝 讬讛讬讛 砖讜谞讛. ## 诪驻转讞 注讘讜专 讚祝 砖诪爪讬讙 讗讜讘讬拽讟 讬讞讬讚 诪讘住讬住 讛谞转讜谞讬诐 讛 SSR 诪讜驻注诇 注诇 讻诇 讛讚驻讬诐 讘讗转专. 讻诇 讛讚驻讬诐 谞讘谞讬诐 诪转讜讱 诪讬讚注 砖砖诪讜专 讘讘住讬住 谞转讜谞讬诐 - 讜讻诇 讚祝 谞讬讘谞讛 诪转讜讱 讗讜讘讬拽讟讬诐 讗讞专讬诐 讘讘住讬住 讛谞转讜谞讬诐. 讚驻讬诐 诪住讜讬诪讬诐 讘讗转专 诪砖转诪砖讬诐 讘砖讜专讛 讘讜讚讚转 诪讟讘诇讗 讗讜 讘砖讜专讜转 讘讜讚讚讜转 诪诪住驻专 讟讘诇讗讜转. 诇讚讜讙诪讗 讚祝 砖诇 驻讜住讟 讘讜讚讚 讘讗转专 诪砖转诪砖 讘诪讬讚注 诪讟讘诇转 讛驻讜住讟讬诐. 砖谞讬 讛诪讝讛讬诐 讛讞砖讜讘讬诐 诇讻诇 砖讜专讛 讘讛拽砖专 砖诇 Cache 讛诐: idupdated_at. 诇讻谉 诪驻转讞 Cache 讟讜讘 诇谞转讬讘 砖诇 驻讜住讟 讬讛讬讛 砖诐 讛谞转讬讘, blog_show, 讜讗讞专讬讜 砖谞讬 讛砖讚讜转 idupdated_at 砖诇 讛驻讜住讟 讛住驻爪讬驻讬 砖注讻砖讬讜 诪住转讻诇讬诐 注诇讬讜. 讗诐 讘诪拽专讛 讗砖谞讛 讘讘住讬住 讛谞转讜谞讬诐 驻讜住讟 讗讞专讬 砖讬爪专转讬 讗讜转讜 (诇讚讜讙诪讗 讘砖讘讬诇 诇转拽谉 砖讙讬讗转 讻转讬讘), 砖讚讛 updated_at 砖诇 讛砖讜专讛 讬砖转谞讛 讛讙讜诇砖 讛讘讗 讬拽讘诇 诪驻转讞 Cache 讞讚砖, 讛讚祝 讬讬讘谞讛 诪讞讚砖 讜讛讙讜诇砖 讬拽讘诇 讗转 讛讚祝 讛谞讻讜谉. 讗讘诇 讻诇 注讜讚 砖讚讜转 讛 idupdated_at 诇讗 诪砖转谞讬诐, 讻诇 讙讜诇砖 谞讜住祝 砖诪讙讬注 讬拽讘诇 讘讚讬讜拽 讗转 讗讜转讜 讚祝 砖讻讘专 谞讜爪专 讜砖诪讜专 讘 redis. ## 诪驻转讞 注讘讜专 讚祝 砖诪爪讬讙 讗讜住祝 讗讜讘讬拽讟讬诐 讗驻砖专 诇讛专讞讬讘 讗转 讛驻讬转专讜谉 讙诐 诇讚驻讬诐 砖转驻拽讬讚诐 诇讛爪讬讙 诪住驻专 讗讜讘讬拽讟讬诐, 讻诇讜诪专 诪住驻专 砖讜专讜转. 诇讚讜讙诪讗 讛讚祝 讛专讗砖讬 砖诇 讛讘诇讜讙 诪爪讬讙 10 驻讜住讟讬诐 讗讞专讜谞讬诐 砖驻讜专住诪讜, 讜诇讻谉 讗驻砖专 诇拽讞转 讗转 讻诇 砖讚讜转 讛 updated_atid 砖诇 讻诇 注砖专转 讛驻讜住讟讬诐, 诇砖专砖专 讗转 讻讜诇诐 讬讞讚 讜诇拽讘诇 诪讝讛讛 讬讬讞讜讚讬 砖诇 讛讚祝. 讘专讙注 砖谞讜爪专 驻讜住讟 讞讚砖 专砖讬诪转 讛转讜爪讗讜转 诪砖转谞讛 (讻讬 诇驻讜住讟 讛讞讚砖 讬砖 id 讞讚砖) 讜诇讻谉 讬讬讜讜爪专 诪讞讚砖 注诪讜讚 讛讘诇讜讙 讛专讗砖讬 注诐 讛专砖讬诪讛 讛讞讚砖讛. 讗讘诇, 讻诇 注讜讚 10 讛驻讜住讟讬诐 讛专讗砖讜谞讬诐 诇讗 诪砖转谞讬诐, 谞砖诇讞 讗转 讗讜转讜 讚祝 砖讻讘专 砖诪讜专 讘专讚讬住 诇讻诇 讙讜诇砖 谞讜住祝 砖诪讙讬注. 讛专讻讬讘 讛讗讞专讜谉 砖诇 讛诪谞讙谞讜谉 讛讜讗 诪讞讬拽讛 讗讜讟讜诪讟讬转 砖诇 诪驻转讞讜转 Cache 讬砖谞讬诐. 谞砖讬诐 诇讘 砖注诐 讛诪谞讙谞讜谉 砖转讬讗专转讬, 诪驻转讞讜转 Cache 诪住讜讬诪讬诐 诪驻住讬拽讬诐 诇讛讬讜转 专诇讜讜谞讟讬诐 (诇诪砖诇 讚祝 讛讘诇讜讙 讛专讗砖讬 诪讗转诪讜诇 讻讘专 诇讗 讬砖诪砖 诇砖诇讬驻讜转 注转讬讚讬讜转). 诇讚驻讬诐 砖讜谞讬诐 讬砖 讗讜专讱 讞讬讬诐 砖讜谞讛, 讜驻讛 爪专讬讱 诇讛驻注讬诇 讛讬讙讬讜谉 讘专讬讗 讜讛讬讻专讜转 注诐 转讚讬专讜转 讛注讚讻讜谞讬诐 讘讗转专 讻讚讬 诇讚注转 诇讻诪讛 讝诪谉 讻讚讗讬 诇砖诪讜专 讻诇 讚祝. 讛拽讜砖讬 讛诪专讻讝讬 讘讬讬砖讜诐 Cache 讛讜讗 讛注讜讘讚讛 砖爪专讬讱 诇讝讻讜专 诇讛转讬讞住 诇讻诇 讛砖讜专讜转 砖诪砖驻讬注讜转 注诇 讚祝 讛转讜爪讗讛 讘注转 讬爪讬专转 讛 Cache Key. 讘讬诪讬诐 讛拽专讜讘讬诐 谞讙诇讛 讗诐 讛爪诇讞转讬 诇讝讻讜专 讗转 讻讜诇诐 讗讜 讗诐 讞诇拽 诪讛讚驻讬诐 讬驻住讬拽讜 诇讛转注讚讻谉 讜谞爪讟专讱 诇讛注诇讜转 转讬拽讜谉.

ToCode
1 419
# 讝讬讛讜讬 驻谞讬诐 讘 Python 注诐 OpenCV 讝讬讛讜讬 驻谞讬诐 讘转诪讜谞讛 讝讜 讘注讬讛 驻转讜专讛 讜诪讛 砖讻讬祝 讘讘注讬讜转 驻转讜专讜转 讝讛 砖讗谞讞谞讜 讬讻讜诇讬诐 诪诪砖 讘拽诇讜转 诇砖诇讘 讗转 讛驻讬转专讜谉 讙诐 讘讬讬砖讜诪讬诐 讙讚讜诇讬诐 讬讜转专 砖诇谞讜. 讗诐 讗转诐 专讜爪讬诐 诇讚注转 诇注讜诪拽 讗讬讱 注讜砖讬诐 讗转 讝讛 转爪讟专讻讜 诇拽专讜讗 注诇 讗诇讙讜专讬转诪讬诐 讜转诪讜谞讜转 讜讛诪讜谉 讚讘专讬诐 砖讗谞讬 诇讗 诪住驻讬拽 诪讘讬谉 讘讛诐, 讗讘诇 讗诐 讗转诐 驻砖讜讟 爪专讬讻讬诐 诇诪爪讜讗 驻专爪讜祝 讘转诪讜谞讛 诪住驻讬拽 诇讛砖转诪砖 讘诪谞讙谞讜谉 讛拽讬讬诐 砖诇 OpenCV. 讛谞讛 讛拽讜讚 砖注讜砖讛 讗转 讝讛. ## 讛转拽谞转 OpenCV 讛转拽谞转 住驻专讬讬转 OpenCV 讘 Python 讛讬讗 讚讬 驻砖讜讟讛 讜讘住讱 讛讻诇 讚讜专砖转 讛专爪转 砖转讬 驻拽讜讚讜转 pip:
python -m pip install numpy opencv-python
讘砖讘讬诇 诇讘讚讜拽 砖讛讛转拽谞讛 注讘专讛 讞诇拽 讗驻砖专 诇讛驻注讬诇 讗转 讛住拽专讬驻讟 讛讘讗:
import cv2
print(cv2.__version__)
讗谞讬 拽讬讘诇转讬 讗转 4.2.0 讗讘诇 讗谞讬 讞讜砖讘 砖讻诇 讙讬专住讗 诪注诇 4 转住驻讬拽. 讛讚讘专 讛砖谞讬 砖谞爪讟专讱 讛讜讗 拽讜讘抓 讛诪讬讚注 注讘讜专 讛 Classifier. 讝讛 讘注爪诐 讛拽讜讘抓 砖诪住驻专 诇 OpenCV 诪讛 讝讛 驻专爪讜祝. 讛讜讗 讛讜讻谉 讘转讛诇讬讱 砖诇 住专讬拽转 讛诪讜谉 转诪讜谞讜转 讜住讬诪讜谉 讬讚谞讬 砖诇 诪讗驻讬讬谞讬诐 讘转讜讻谉. 讛拽讜讘抓 诪讙讬注 讘驻讜专诪讟 xml 讜讗驻砖专 诇诪爪讜讗 诪住驻专 讗驻砖专讜讬讜转 诇拽讘爪讬 诪讬讚注 讻讗诇讛 讘诪讗讙专 砖诇 OpenCV 注爪诪讜 讘讙讬讟讛讗讘. 讘驻讜住讟 讝讛 讗砖转诪砖 讘拽讜讘抓 haarcascade_frontalface_default.xml 砖讻讜诇诇 诪讬讚注 注诇 驻谞讬诐 砖诇 讗谞砖讬诐. 讗驻砖专 诇讛讜专讬讚 讗转 讛拽讜讘抓 诪讛拽讬砖讜专 讛讝讛. ## 讛住拽专讬驻讟 拽讜讘抓 讛 Python 砖诪讝讛讛 驻专爪讜驻讬诐 讻讜诇诇 讘住讱 讛讻诇 驻讞讜转 诪-30 砖讜专讜转 讻讬 讗转 讻诇 讛注讘讜讚讛 讻讘专 注砖讜 讘砖讘讬诇讬 讘 OpenCV. 讘讙讚讜诇 讗谞讞谞讜: 1. 讛讜驻讻讬诐 讗转 讛转诪讜谞讛 诇砖讞讜专-诇讘谉 讻讚讬 砖讬讛讬讛 诇 OpenCV 讬讜转专 拽诇 诇注讘讜讚 讗讬转讛. 2. 诪讘拽砖讬诐 诪 OpenCV 诇诪爪讜讗 驻专爪讜驻讬诐 讘转诪讜谞讛 讘讗诪爪注讜转 讛 Cascader 砖诇谞讜 (讝讛 讛诪讬讚注 诪拽讜讘抓 讛 xml 砖诇拽讞谞讜 诪讛诪讗讙专 砖诇 OpenCV). 3. 诪爪讬讬专讬诐 注诇 讛转诪讜谞讛 讛诪拽讜专讬转 专讬讘讜注 诪住讘讬讘 诇讻诇 驻专爪讜祝 砖 OpenCV 诪爪讗 4. 诪爪讬讙讬诐 讗转 讛转诪讜谞讛 注诐 讛专讬讘讜注讬诐 诪住讘讬讘 诇驻专爪讜驻讬诐. 拽讜讚? 讘专讜专:
import sys, pathlib
import cv2

imagePath = sys.argv[1]
cascader_file = str(pathlib.Path(__file__).parent / "haarcascade_frontalface_default.xml")
faceCascade = cv2.CascadeClassifier(cascader_file)

image = cv2.imread(imagePath)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect faces in the image
faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30),
    flags = cv2.CASCADE_SCALE_IMAGE
)

print("Found {0} faces!".format(len(faces)))

# Draw a rectangle around the faces
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow("Faces found", image)
cv2.waitKey(0)
讛拽讜讚 诪讘讜住住 注诇 驻讜住讟 讘讗讜转讜 谞讜砖讗 诪 Real Python 讜讻讜诇诇 讻诪讛 转讬拽讜谞讬诐 砖诇讬 讻讚讬 砖讬注讘讜讚 注诐 讙讬专住讗 讞讚砖讛 砖诇 驻讬讬转讜谉 讜 OpenCV. 讘砖讘讬诇 诇讛驻注讬诇 讗讜转讜 讗转诐 诪注讘讬专讬诐 讘砖讜专转 讛驻拽讜讚讛 砖诐 砖诇 拽讜讘抓 转诪讜谞讛 讘转讜专 驻专诪讟专 专讗砖讜谉 讜谞讜转谞讬诐 诇驻讬讬转讜谉 诇注砖讜转 讗转 讻诇 讛砖讗专.

ToCode
1 419
# 讟讬驻 CSS: 讛诪讬诇讛 matches 讗讞转 讛讬讻讜诇讜转 讛诪讚诇讬拽讜转 砖诇 Scss 砖讛专讘讛 讝诪谉 讛讬转讛 讞住专讛 诇讬 讘 CSS 讛讬讗 讛讬讻讜诇转 诇讗专讙谉 Selectors 讗讞讚 讘转讜讱 讛砖谞讬. 讻诇讜诪专 讘诪拽讜诐 诇讻转讜讘:
header h1,
header h2,
header h3,
header h4,
header h5,
header h6 {
  font-weight: normal;
}
讗谞讞谞讜 讬讻讜诇讬诐 诇讻转讜讘 驻砖讜讟:
header {
  h1, h2, h3, h4, h5, h6 { font-weight: normal; }
}
诪住转讘专 砖诪诪砖 讘拽专讜讘 谞讜讻诇 诇讛转讞讬诇 诇讛砖转诪砖 讘讻转讬讘 砖谞拽专讗 matches 讻讚讬 诇讛讙讬注 诇讗讜转讛 转讜爪讗讛 讘讚讬讜拽 讘 CSS:
header :matches(h1, h2) {
  font-weight: normal;
}
讛讘注讬讛 讛讬讞讬讚讛 讗讙讘 砖讘讬谞转讬讬诐 讚驻讚驻谞讬诐 诇讗 诪诪砖 转讜诪讻讬诐 讘讻转讬讘 讝讛. 讘爪讚 讛讞讬讜讘讬 专讜讘诐 讻谉 转讜诪讻讬诐 讘讚讬讜拽 讘驻讬爪'专 讛讝讛 讘砖诐 讗讞专 - 讘讗诪爪注讜转 诪讬诇转 讛拽讜讚 any 讜转讜住驻转 Vendor Prefix. 讻诇讜诪专 讛拽讜讚 讛讘讗 讻谉 注讜讘讚 讘专讜讘 讛讚驻讚驻谞讬诐 讛诪讜讚专谞讬讬诐 讛讬讜诐:
header :-moz-any(h1, h2) {
  font-weight: normal;
}

header :-webkit-any(h1, h2) {
  font-weight: normal;
}
讻讱 砖讗诐 讗转诐 诪专讬爪讬诐 住拽专讬驻讟 砖诪讜住讬祝 Vendor Prefix 讘爪讜专讛 讗讜讟讜诪讟讬转 讗讜 讘 prefixfree 讗转诐 讻讘专 讬讻讜诇讬诐 诇讛谞讜转 诪讛讻转讬讘 讛讞讚砖 (讜专拽 转讝讻专讜 砖讘拽专讜讘 讛讻转讬讘 砖诇 any 讬讛驻讜讱 诇 matches 讜转讛讬讜 诪讜讻谞讬诐 诇讛讞诇讬祝 讻砖讬讙讬注 讛讬讜诐).

ToCode
1 419
# 讞讬讚转 专讗讬讜谞讜转 注讘讜讚讛 讘砖驻转 Java 讗诐 讬砖 砖驻讛 砖讗谞讬 诇讗 诪转讙注讙注 讗诇讬讛 讝讜 Java. 讛讬讗 诪爪诇讬讞讛 诇讛讬讜转 讘讗讜转讜 讝诪谉 讙诐 诪住讜讚专转 诪讚讬 讜讙诐 诪讘诇讘诇转. 讛砖讘讜注 注讝专转讬 诇讞讘专讛 讘转专讙讬诇 Java 拽讟谉. 讛诪讟专讛 讛讬转讛 诇讻转讜讘 驻讜谞拽爪讬讛 砖诪拽讘诇转 诪住驻专 讜诪讝讛讛 讛讗诐 讛诪住驻专 讛讜讗 驻诇讬谞讚专讜诐, 讻诇讜诪专 讗诐 讛讜讗 讬讜爪讗 讗讜转讜 讚讘专 讻砖拽讜专讗讬诐 讗讜转讜 诪讛住讜祝 诇讛转讞诇讛 讜诪讛讛转讞诇讛 诇住讜祝. 诇讚讜讙诪讗 9009 讛讜讗 驻诇讬谞讚专讜诐, 讜讙诐 121 讛讜讗 讻讝讛, 讗讘诇 199 讗讬谞讜 驻诇讬谞讚专讜诐 讜讙诐 1920 讗讬谞讜 讻讝讛. 讛谞讬住讬讜谉 讛专讗砖讜谉 砖诇讛 诇讻转讜讘 讗转 讛转讜讻谞讬转 讻诇诇 砖转讬 讟注讜讬讜转 诪注谞讬讬谞讜转. 转专讗讜 讗诐 讗转诐 诪爪诇讬讞讬诐 诇诪爪讜讗 讗讜转谉 讜诇讛住讘讬专 诇讙讘讬 讻诇 讟注讜转 诪讛 讛讘注讬讛 讜讗讬讱 诪转拽谞讬诐.
 public static boolean isPelindrome(int number) {
    String reverseNumberString = new StringBuilder(number).reverse().toString();
    String numberString = String.valueOf(number);
    return reverseNumberString == numberString;
  }
诪爪讗转诐 讗转 讛讘注讬讜转? 住驻专讜 讘转讙讜讘讜转 诪讛 讝讛 讛讬讛.

ToCode
1 419
# 讗讬讱 诪讙讘讬诇讬诐 诪住驻专 驻注讜诇讜转 讘讚拽讛 诪注专讻讜转 转讜讻谞讛 讟讜讘讜转 讬讜讚注讜转 诇谞爪诇 讘爪讜专讛 诪讬讟讘讬转 讗转 诪砖讗讘讬 讛诪讞砖讘 注诇讬讜 讛谉 专爪讜转. 讗讞讚 讛诪谞讙谞讜谞讬诐 砖注讜讝专讬诐 诇谞讜 诇注砖讜转 讗转 讝讛 讛讜讗 Rate Limit, 讜讝讛 注讜讘讚 讻讻讛: 讘讙诇诇 砖讛诪注专讻转 砖诇谞讜 诪专讬爪讛 诪住驻专 转讛诇讬讻讬诐, 讗诐 谞讬转谉 诇转讛诇讬讱 讗讞讚 诇专讜抓 "讛讻讬 诪讛专 砖专拽 讗驻砖专" 讛转讛诇讬讱 讛讝讛 注诇讜诇 诇转驻讜住 诪砖讗讘讬诐 讛谞讞讜爪讬诐 诇转讛诇讬讻讬诐 讗讞专讬诐 讘诪注专讻转. 讛专讘讛 驻注诪讬诐 诪谞讙谞讜谉 Rate Limit 诪砖诪砖 讘拽讜讚 转拽砖讜专转. 讻砖讗谞讞谞讜 讻讜转讘讬诐 转讜讻谞讛 砖诪讜砖讻转 诪讬讚注 诪 API 讗谞讞谞讜 诇讗 专讜爪讬诐 诇诪砖讜讱 讗转 讛诪讬讚注 "诪讛专" 诪讚讬, 讻讬 讗讝 讛 API 注诇讜诇 诇谞注讜诇 讗讜转谞讜 讘讞讜抓. 讻砖讗谞讞谞讜 讻讜转讘讬诐 讗转 讛 API 讗谞讞谞讜 诇讗 专讜爪讬诐 诇讗驻砖专 诇诇拽讜讞 讘讜讚讚 诇诪砖讜讱 讬讜转专 诪讚讬 诪讬讚注 诪讛专 诪讚讬, 讻讬 讗讝 诇讗 讬讬砖讗专讜 诇谞讜 诪砖讗讘讬诐 诇讟驻诇 讘诇拽讜讞讜转 讛讗讞专讬诐. 讚专讱 讗讞转 诇诪讬诪讜砖 Rate Limiter 讛讬讗 砖讬诪讜砖 讘 Semaphore. 讻转讘转讬 驻注诐 讚讜讙诪讗 讘 Python 讘拽讬砖讜专 讻讗谉. 讛住诪驻讜专 诪讗讜转讞诇 注诐 诪住驻专 讟讜拽谞讬诐 讜讻诇 讘拽砖讛 诪拽讘讬诇讬转 诇讜拽讞转 讗住讬诪讜谉, 讜讻讱 讻砖谞讙诪专讬诐 讛讗住讬诪讜谞讬诐 讛讘拽砖讛 讛讘讗讛 转讬转拽注 注讚 砖讗讞转 讗讞专转 转住讬讬诐. 讝讛 注讜讘讚 讗讘诇 诇讗 诪诪砖 注讜讝专 诇谞讜 讗诐 讻诇 讘拽砖讜转 讛专砖转 砖诇谞讜 讞讜讝专讜转 诪讗讜讚 诪讛专, 讜诪讛 砖讗谞讞谞讜 专讜爪讬诐 讝讛 诇讛讙讘讬诇 讗转 诪住驻专 讛讘拽砖讜转 讘讚拽讛. 讟讻谞讬拽讛 讗讞专转 驻砖讜讟讛 诇诪讬诪讜砖 诪讙讘诇转 讘拽砖讜转 讘讚拽讛 讗驻砖专 诇诪爪讜讗 讘拽讜讚 砖诇 Limiter, 砖讛讬讗 讙'诐 砖诇 专讜讘讬 诇诪讬诪讜砖 诪讙讘诇讛 讝讜. 讛专注讬讜谉 砖诇讛诐 注讜讘讚 讻讱: 1. 诪讗转讞讬诇 诪注专讱 讻讱 砖讛讙讜讚诇 砖诇讜 讬讛讬讛 讝讛讛 诇诪讙讘诇转 讛讘拽砖讜转 讘讚拽讛 砖讗转诐 爪专讬讻讬诐. 诇讚讜讙诪讗 讗诐 讗谞讞谞讜 专讜爪讬诐 诪讙讘诇讛 砖诇 10 讘拽砖讜转 讘讚拽讛 谞讬爪讜专 诪注专讱 砖诇 10 转讗讬诐. 2. 讘讻诇 转讗 讘诪注专讱 专讜砖诪讬诐 讗转 讛砖注讛 讛讬砖谞讛 讘讬讜转专 砖诪讞砖讘 转讜诪讱 讘讛 (诪讬讜爪讙转 注诇 讬讚讬 讛诪住驻专 0 - 诪住驻专 讛砖谞讬讜转 诪讗讝 讛 1/1/1970). 3. 讻诇 驻注诐 砖诇拽讜讞 诪讘拽砖 诇讘爪注 驻注讜诇讛 讗谞讞谞讜 诇讜拽讞讬诐 讗转 讛转讗 讛讘讗 讘诪注专讱, 诪讜住讬驻讬诐 诇讜 讗转 讛讗讬谞讟专讜讜诇 (讻诇讜诪专 讚拽讛) 讜讘讜讚拽讬诐 讗诐 讛转讜爪讗讛 讛讬讗 讘注转讬讚. 讗诐 讻谉 诪讞讻讬诐 注讚 砖讛转讜爪讗讛 转讙讬注. 讗诐 诇讗 诪讗驻砖专讬诐 讗转 讘讬爪讜注 讛驻注讜诇讛 讘诪讬讬讚讬. 4. 诪注讚讻谞讬诐 讗转 转讜讻谉 讛转讗 讘讝诪谉 讛谞讜讻讞讬, 讜注讜讘专讬诐 诇转讗 讛讘讗 讘砖讘讬诇 讛诇拽讜讞 讛讘讗 (讛诪注讘专 诇转讗 讛讘讗 诪砖转诪砖 讘诪讜讚讜诇讜 讻讚讬 诇专讜抓 注诇 讛诪注专讱 讘爪讜专讛 诪注讙诇讬转). 讻诇 注讜讚 诪住驻专 讛讘拽砖讜转 讘讚拽讛 拽讟谉 诪讛讗讬谞讟专讜讜诇, 讻砖谞讞讘专 诇转讗 讛讘讗 讗转 讛讗讬谞讟专讜讜诇 谞拽讘诇 讝诪谉 讘注讘专 讜讛讻诇 讬专讜抓 诪讛专. 讗讘诇 讘专讙注 砖诪转讞讬诇 注讜诪住 讛诪注专讻转 转讬注爪专 注讚 砖转注讘讜专 讚拽讛 诪讛讘拽砖讛 讛讬砖谞讛 讘讬讜转专 讜讗讝 转诪砖讬讱 诇专讜抓, 讜讻讱 讘讻诇 讗讬谞讟专讜讜诇 砖诇 讚拽讛 诇注讜诇诐 诇讗 讬讛讬讜 讬讜转专 诪 n 讘拽砖讜转 讘诪拽讘讬诇, 诇驻讬 讙讜讚诇 讛诪注专讱. 讛驻讜谞拽爪讬讛 讛诪专讻讝讬转 讘专讜讘讬 诪讛拽讜讚 讛讬讗:
    def shift
      time = nil

      @mutex.synchronize do
        time = @ring[@head]

        sleep_until(time + @interval)

        @ring[@head] = Time.now
        @head = (@head + 1) % @size
      end

      time
    end
讜讗转 砖讗专 讛诪讞诇拽讛 转讜讻诇讜 诇诪爪讜讗 讘拽讜讚 砖诇 讛讙'诐 讘拽讬砖讜专 https://github.com/Shopify/limiter/blob/master/lib/limiter/rate_queue.rb.

ToCode
1 419
# 注诐 讛讗讜讻诇 讘讗 讛转讬讗讘讜谉 讛专讘讛 讬讜转专 拽诇 诇讬 诇讻转讜讘 讘诇讜讙 讻诇 讬讜诐 诪讗砖专 讻砖讻转讘转讬 驻讜住讟 驻注诐 讘砖讘讜注. 讗讬谉 讬讜诐 砖讞住专讬诐 诇讬 专注讬讜谞讜转 诇讻转讬讘讛, 讜讘专讜讘 讛讬诪讬诐 讬砖 诇讬 诇驻讞讜转 3-4 专注讬讜谞讜转 诇驻讜住讟讬诐 讘专讗砖 诪讛诐 讗谞讬 讘讜讞专 讗转 讝讛 砖讗谞讬 讛讻讬 讗讜讛讘. 讻砖讻转讘转讬 讘诇讜讙 砖讘讜注讬 讛住讬驻讜专 讛讬讛 讗讞专 诇讙诪专讬, 讜讗谞讬 诪诪砖 讝讜讻专 讗讬讱 讻诇 驻注诐 讛讬讬转讬 诪转讬砖讘 诇讻转讜讘 讜谞讗讘拽 讘谞讬讬专 讛专讬拽 讘诇讬 砖讬砖 诇讬 诪讜砖讙 注诇 诪讛 讻讚讗讬 诇讻转讜讘 讛砖讘讜注. 讙诐 讘诪拽专讛 讛讻诇诇讬 - 诇驻讞讜转 诇讙讘讬讬 砖诪转讬 诇讘 - 砖讻讻诇 砖讗谞讬 注讜砖讛 诪砖讛讜 讬讜转专 讻讱 讗谞讬 谞讛谞讛 诪诪谞讜 讬讜转专 讜专讜爪讛 诇讛诪砖讬讱 诇注砖讜转 讗讜转讜. 讛讛讘讚诇 讘讬谉 驻注诐 讘讬讜诐 诇驻注诐 讗讜 驻注诪讬讬诐 讘砖讘讜注 讛讜讗 注爪讜诐. 讜讗讜转讜 讻诇诇 注讜讘讚 讙诐 讘诇讬诪讜讚讬诐 讜讘拽讜专住讬诐: 讗诐 讗谞讬 诇讜拽讞 讛转讞讬讬讘讜转 砖诇 诇诇诪讜讚 谞讜砖讗 砖注讛 讘讬讜诐, 5 讬诪讬诐 讘砖讘讜注, 讝讛 讬讛讬讛 讛专讘讛 讬讜转专 讗驻拽讟讬讘讬 诪讗砖专 专讬讻讜讝 讻诇 讛-5 砖注讜转 诇讬讜诐 讗讞讚 诪专讜讻讝. 讜讛专讘讛 驻注诪讬诐 诪驻转讬注 诇讙诇讜转 砖砖注讛 讘讬讜诐 讗讞专讬 讞诪讬砖讛 讬诪讬诐 诪住转讻诪讜转 讘讛专讘讛 讬讜转专 诪-5 砖注讜转.