Copy disabled (too large)
Download .txt
Showing preview only (16,314K chars total). Download the full file to get everything.
Repository: xitu/gold-miner
Branch: master
Commit: db4f91ae0df1
Files: 2590
Total size: 28.6 MB
Directory structure:
gitextract_3knw1box/
├── .github/
│ ├── CONTRIBUTING.md
│ ├── ISSUE_TEMPLATE/
│ │ ├── recommendation.md
│ │ └── sign_up.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ ├── generate-catalog.yml
│ ├── stale.yml
│ └── translator-application.yaml
├── .gitignore
├── AI.md
├── CODE_OF_CONDUCT.md
├── README.md
├── TODO/
│ ├── 10-best-reactjs-ui-frameworks-for-rapid-prototyping.md
│ ├── 10-steps-to-better-hybrid-apps.md
│ ├── 10-things-you-probably-didnt-know-about-javascript-react-and-nodejs-and-graphql-development-at-facebook.md
│ ├── 101-ways-to-make-your-website-more-awesome.md
│ ├── 11-things-i-learned-reading-the-flexbox-spec.md
│ ├── 11-top-designers-give-11-pieces-of-realistic-ux-advice.md
│ ├── 12-best-practices-for-user-account.md
│ ├── 14-must-knows-for-an-ios-developer.md
│ ├── 17-xcode-tips-and-tricks-that-every-ios-developer-should-know.md
│ ├── 19-things-i-learnt-reading-the-nodejs-docs.md
│ ├── 2018-design-trends.md
│ ├── 25-core-data-in-ios10-nspersistentcontainer.md
│ ├── 3-new-css-features-to-learn-in-2017.md
│ ├── 39-open-source-swift-ui-libraries-for-ios-app-development.md
│ ├── 3d-force-touch-beyond-peek-pop.md
│ ├── 4-must-know-tips-for-building-cross-platform-electron-apps.md
│ ├── 5-not-so-obvious-things-about-rxjava.md
│ ├── 5-step-life-cycle-neural-network-models-keras.md
│ ├── 6-practical-skills-for-ux-designers.md
│ ├── 8-key-react-component-decisions.md
│ ├── Android-Studio-Tips.md
│ ├── Breaking-Swift-with-reference-counted-structs.md
│ ├── Cocoa-Architecture-Dropped-Design-Patterns.md
│ ├── Dependency-Injection-with-Dagger-2.md
│ ├── Eight-Ways-Your-Android-App-Can-Leak-Memory.md
│ ├── GoogleCloudFunctions/
│ │ ├── calling-cloud-functions.md
│ │ ├── catlog.md
│ │ ├── command-reference.md
│ │ ├── deploying-cloud-functions.md
│ │ ├── getting-started.md
│ │ ├── quick-starts.md
│ │ ├── walkthroughs.md
│ │ └── writing-cloud-functions.md
│ ├── How-to-hideshow-Toolbar-when-list-is-scroling.md
│ ├── Introducing-Swift 3.0.md
│ ├── OAuth2 Authentication with Lua.md
│ ├── Of SVG, Minification and Gzip
│ ├── Optimization-killers.md
│ ├── OptimizationTips.rst
│ ├── Overview-of-JavaScript-ES6-features-a-k-a-ECMAScript-6-and-ES2015.md
│ ├── PHP-7-Virtual-machine.md
│ ├── Testing-Schemes.md
│ ├── Top-5-Android-libraries-every-Android-developer-should-know-about.md
│ ├── Under-the-hood-ReactJS.md
│ ├── Understanding-code-signing-for-iOS-apps.md
│ ├── Unit-tests-with-Mockito.md
│ ├── Using-Flutter-in-China.md
│ ├── What-would-be-your-advice-to-a-software-engineer-who-wants-to-learn-machine-learning.md
│ ├── Yarn-A-new-package-manager-for-JavaScript.md
│ ├── a-5-minute-intro-to-styled-components.md
│ ├── a-beginners-guide-to-making-progressive-web-apps.md
│ ├── a-beginners-guide-to-website-optimization.md
│ ├── a-better-underline-for-android.md
│ ├── a-blurring-view-for-android.md
│ ├── a-cartoon-intro-to-webassembly.md
│ ├── a-case-for-using-storyboards-on-ios.md
│ ├── a-crash-course-in-assembly.md
│ ├── a-crash-course-in-just-in-time-jit-compilers.md
│ ├── a-day-without-javascript.md
│ ├── a-detailed-guide-on-developing-android-apps-using-the-clean-architecture-pattern.md
│ ├── a-dramatic-tour-through-pythons-data-visualization-landscape-including-ggplot-and-altair.md
│ ├── a-fairer-vue-of-react-comparing-react-to-vue-for-dynamic-tabular-data-part-2.md
│ ├── a-first-walk-into-kotlin-coroutines-on-android.md
│ ├── a-follow-up-on-how-to-store-tokens-securely-in-android.md
│ ├── a-functional-programmers-introduction-to-javascript-composing-software.md
│ ├── a-gentle-introduction-to-self-sovereign-identity.md
│ ├── a-guide-to-automating-scraping-the-web-with-javascript-chrome-puppeteer-node-js.md
│ ├── a-guide-to-interviewing-for-product-design-internships.md
│ ├── a-guide-to-the-google-play-console.md
│ ├── a-look-back-at-the-state-of-javascript-in-2017.md
│ ├── a-map-to-modern-javascript-development.md
│ ├── a-mindful-design-process.md
│ ├── a-primer-on-android-navigation.md
│ ├── a-quick-look-at-semaphores.md
│ ├── a-simple-object-model.md
│ ├── a-simple-web-app-in-rust-conclusion.md
│ ├── a-simple-web-app-in-rust-pt-1.md
│ ├── a-simple-web-app-in-rust-pt-2a.md
│ ├── a-simple-web-app-in-rust-pt-2b.md
│ ├── a-simple-web-app-in-rust-pt-3.md
│ ├── a-simple-web-app-in-rust-pt-4-cli-option-parsing.md
│ ├── a-tinder-progressive-web-app-performance-case-study.md
│ ├── a-unified-styling-language.md
│ ├── after-a-year-of-nodejs-in-production.md
│ ├── age-of-algorithm-human-gatekeeper.md
│ ├── ajax-polling-in-react-with-redux.md
│ ├── ajax-polling-part-2-sagas.md
│ ├── align-svg-icons-to-text-and-say-goodbye-to-font-icons.md
│ ├── all-about-concurrency-in-swift-1-the-present.md
│ ├── all-about-react-router-4.md
│ ├── all-you-need-to-know-about-parce.md
│ ├── all-you-need-to-know-to-really-understand-the-node-js-event-loop-and-its-metrics.md
│ ├── altering-javascript-frames.md
│ ├── an-absolute-beginners-guide-to-swift.md
│ ├── an-animated-guide-to-flexbox.md
│ ├── an-exhaustive-guide-to-writing-dockerfiles-for-node-js-web-apps.md
│ ├── an-introduction-to-functional-reactive-programming.md
│ ├── an-introduction-to-in-app-a-b-testing.md
│ ├── an-introduction-to-the-usernotifications-framework.md
│ ├── an-ios-devs-experience-with-react-native.md
│ ├── an-ode-to-async-await.md
│ ├── an-overview-of-the-logging-ecosystem-in-2017.md
│ ├── an-undervalued-blockchain-market-in-china-is-good-news-for-you.md
│ ├── an-update-on-es6-modules-in-node-js.md
│ ├── anatomy-of-a-function-call-in-go.md
│ ├── android-app-optimization-using-arraymap-and-sparsearray.md
│ ├── android-basic-project-architecture-for-mvp.md
│ ├── android-data-binding-recyclerview.md
│ ├── android-handler-internals.md
│ ├── android-o-fonts.md
│ ├── android-themes-an-in-depth-guide.md
│ ├── android-why-your-canvas-shapes-arent-smooth.md
│ ├── angular-jwt-authentication.md
│ ├── angular-jwt.md
│ ├── angular-vs-react-vs-vue-a-2017-comparison.md
│ ├── angular-vs-react-which-is-better-for-web-development.md
│ ├── animated-intro-rxjs.md
│ ├── announcing-ant-design-3-0.md
│ ├── any-web-site-can-become-a-pwa-but-we-need-to-do-better.md
│ ├── applying-human-centered-design-to-emerging-technologies.md
│ ├── approaching-android-with-mvvm.md
│ ├── are-notifications-a-dark-pattern.md
│ ├── are-the-ux-articles-youre-reading-trying-to-sell-you-something.md
│ ├── artificial-intelligence-in-ux-design.md
│ ├── atomic-design-how-to-design-systems-of-components.md
│ ├── attract-millions-developers-product.md
│ ├── audio-focus-1.md
│ ├── audio-focus-2.md
│ ├── audio-focus-3.md
│ ├── auto-sizing-columns-css-grid-auto-fill-vs-auto-fit.md
│ ├── automate-cicd-visual-app-center.md
│ ├── automated-npm-releases-with-travis-ci.md
│ ├── avoiding-accidental-complexity-when-structuring-your-app-state.md
│ ├── avoiding-force-unwrapping-in-swift-unit-tests.md
│ ├── avoiding-objc-in-swift.md
│ ├── backend-api-documentation-in-swift.md
│ ├── backwards-compatibility-with-ios-10-today-widgets.md
│ ├── before-you-bury-yourself-in-packages-learn-the-node-js-runtime-itself.md
│ ├── benchmarks-for-the-top-server-side-swift-frameworks-vs-node-js.md
│ ├── best-practices-for-search-results.md
│ ├── best-practices-in-designing-graphql-apis.md
│ ├── better-form-design-one-thing-per-page.md
│ ├── better-javascript-with-es6-pt-ii-a-deep-dive-into-classes.md
│ ├── better-javascript-with-es6-pt-iii-cool-collections-slicker-strings.md
│ ├── better-node-with-es6-pt-i.md
│ ├── beyond-browser-web-desktop-apps.md
│ ├── binary-ast-newsletter-1.md
│ ├── bootstrap-considered-harmful.md
│ ├── boring-design-systems.md
│ ├── breaking-wpa2-by-forcubg-nonce-reuse.md
│ ├── breakpoints-debugging-like-pro.md
│ ├── bridging-existentials-generics-swift-2.md
│ ├── bringing-Pokemon-GO-to-life-on-Google-Cloud.md
│ ├── bubble-sheet-multiple-choice-scanner-and-test-grader-using-omr-python-and-opencv.md
│ ├── build-a-journaling-app-with-meteor-1-3-beta-react-react-bootstrap-and-mantra.md
│ ├── build-tic-tac-toe-with-ai-using-swift.md
│ ├── building-a-kotlin-project-2.md
│ ├── building-a-kotlin-project.md
│ ├── building-a-mobile-app-with-cordova-vuejs.md
│ ├── building-a-shop-with-sub-second-page-loads-lessons-learned.md
│ ├── building-a-virtual-world-worthy-of-sci-fi.md
│ ├── building-account-systems.md
│ ├── building-an-api-gateway-using-nodejs.md
│ ├── building-android-apps-30-things-that-experience-made-me-learn-the-hard-way.md
│ ├── building-ar-game-arkit-spritekit.md
│ ├── building-for-the-future-of-tv-with-android.md
│ ├── building-interfaces-with-constraintlayout.md
│ ├── building-ios-apps-with-xamarin-and-visual-studio.md
│ ├── building-modern-web-applications-in-2017.md
│ ├── building-our-personal-deep-learning-rig-gtx-1080-ubuntu-16-04-cuda-8-0rc-cudnn-7-tensorflowmxnetcaffedarknet.md
│ ├── building-react-components-for-multiple-brands-and-applications.md
│ ├── building-the-web-of-things.md
│ ├── building-trello-layout-css-grid-flexbox.md
│ ├── buttons-in-design-systems.md
│ ├── bye-bye-burger.md
│ ├── can-email-be-responsive.md
│ ├── check-in-frequency-and-codebase-impact-the-surprising-correlation.md
│ ├── choosing-a-front-end-framework-angular-ember-react.md
│ ├── choosing-right-markdown-parser.md
│ ├── chrome-devtools-performance-monitor.md
│ ├── chrome-devtools.md
│ ├── clean-java-immutability.md
│ ├── closure-capture-1.md
│ ├── code-comments-the-good-the-bad-and-the-ugly.md
│ ├── code-smells-in-css-revisited.md
│ ├── code-splitting-with-parcel-web-app-bundler.md
│ ├── collaborative-map-reduce-in-the-browser.md
│ ├── comparing-the-performance-between-native-ios-swift-and-react-native.md
│ ├── compile-time-vs-runtime-type-checking-swift.md
│ ├── complexion-reduction-a-new-trend-in-mobile-design.md
│ ├── composable-datatypes-with-functions.md
│ ├── comprehensive-guide-web-design.md
│ ├── comprehensive-webfonts.md
│ ├── computed-properties-javascript-dependency-tracking.md
│ ├── concurrent-programming.md
│ ├── conditions-for-css-variables.md
│ ├── confusion-subject-observable-observer-android-rxjava2-hell-part8.md
│ ├── constraint-layout-animations-dynamic-constraints-ui-java-hell.md
│ ├── constraint-layout-concepts-hell-tips-tricks-part-2.md
│ ├── constraint-layout-hell.md
│ ├── constraint-layout-visual-design-editor-hell.md
│ ├── contextual-chat-bots-with-tensorflow.md
│ ├── continuation-observable-marriage-proposal-observer-dialogue-rx-observable-developer-android-rxjava2-hell-part7.md
│ ├── continuation-summer-vs-winter-observable-dialogue-rx-observable-developer-android-rxjava2-hell-part6.md
│ ├── contributing-hugh-lib.md
│ ├── convert-time-series-supervised-learning-problem-python.md
│ ├── convincing-the-kotlin-compiler-that-code-is-safe.md
│ ├── core-plot-tutorial-getting-started.md
│ ├── courseras-journey-to-graphql.md
│ ├── crafting-better-code-reviews.md
│ ├── crafting-high-performance-tv-user.md
│ ├── create-effective-push-notifications.md
│ ├── create-react-app.md
│ ├── create-simple-blockchain-java-tutorial-from-scratch.md
│ ├── create-your-first-ethereum-dapp-with-web3-and-vue-js-part-2.md
│ ├── create-your-first-ethereum-dapp-with-web3-and-vue-js-part-3.md
│ ├── create-your-first-ethereum-dapp-with-web3-and-vue-js.md
│ ├── creating-accessible-react-apps.md
│ ├── creating-an-html5-game-bot-using-python.md
│ ├── creating-and-working-with-webassembly-modules.md
│ ├── creating-highly-modular-android-apps.md
│ ├── creating-usability-with-motion-the-ux-in-motion-manifesto.md
│ ├── creating-your-first-blockchain-with-java-part-2-transactions.md
│ ├── creating-your-first-desktop.md
│ ├── csrf-is-dead.md
│ ├── css-architecture.md
│ ├── css-grid-supporting-browsers-without-grid.md
│ ├── css-hex-colors-demystified.md
│ ├── css-in-javascript-the-future-of-component-based-styling.md
│ ├── css-inheritance-cascade-global-scope-new-old-worst-best-friends.md
│ ├── css-is-fine-its-just-really-hard.md
│ ├── css-naming-conventions-that-will-save-you-hours-of-debugging.md
│ ├── css-writing-mode.md
│ ├── csv-injection.md
│ ├── dark-side-of-ui-benefits-of-dark-background.md
│ ├── data-analytics-with-python-by-web-scraping-illustration-with-cia-world-factbook.md
│ ├── data-flow-in-vue-and-vuex.md
│ ├── dealing-with-complex-table-views-in-ios-and-keeping-your-sanity.md
│ ├── dealing-with-imbalanced-data-undersampling-oversampling-and-proper-cross-validation.md
│ ├── debugging-nodejs-in-chrome-devtools.md
│ ├── debugging-swift-code-with-lldb.md
│ ├── debugging-tips-tricks.md
│ ├── declarative-api-design-in-swift.md
│ ├── deconstructing-the-poor-design-of-a-well-intentioned-microinteraction.md
│ ├── deep-learning-1-setting-up-aws-image-recognition.md
│ ├── deep-learning-2-convolutional-neural-networks.md
│ ├── deep-learning-3-more-on-cnns-handling-overfitting.md
│ ├── deep-learning-4-embedding-layers.md
│ ├── design-at-1x-its-a-fact.md
│ ├── design-better-data-tables.md
│ ├── design-doesnt-scale.md
│ ├── design-for-internationalization.md
│ ├── design-is-mainly-about-empathy.md
│ ├── design-like-a-developer.md
│ ├── design-principle-aesthetics.md
│ ├── design-principle-consistency.md
│ ├── design-principles-behind-great-products.md
│ ├── design-principles-what-to-do-when-nobody-is-using-your-feature.md
│ ├── design-thinking-not-just-another-buzzword.md
│ ├── design-words-with-data.md
│ ├── design-your-app-for-decision-making.md
│ ├── designers-problem.md
│ ├── designers-should-write.md
│ ├── designing-a-product-youre-not-going-to-use.md
│ ├── designing-anticipated-user-experiences.md
│ ├── designing-better-tables-for-enterprise-applications.md
│ ├── designing-design-system-for-complex-products.md
│ ├── designing-html-apis.md
│ ├── designing-in-app-survey.md
│ ├── designing-the-icons-for-flinto-s-ui.md
│ ├── designing-the-new-uber-app.md
│ ├── designing-websites-for-iphone-x.md
│ ├── detect-bots-apache-nginx-logs.md
│ ├── detecting-incoming-phone-calls-in-android.md
│ ├── detecting-low-power-mode.md
│ ├── develop-your-first-application-with-flutter.md
│ ├── developers-are-users-too-introduction.md
│ ├── developers-are-users-too-part-1.md
│ ├── developers-are-users-too-part-2.md
│ ├── developing-games-with-react-redux-and-svg-part-1.md
│ ├── developing-small-javascript-components-without-frameworks.md
│ ├── dialogue-rx-observable-developer-android-rxjava2-hell-part5.md
│ ├── disassembling-javascripts-iife-syntax.md
│ ├── distributed-logging-architecture-in-the-container-era.md
│ ├── distributing-react-components.md
│ ├── dont-fear-the-rebase.md
│ ├── dont-use-automatic-image-sliders-or-carousels.md
│ ├── dos-and-don-ts-of-web-design.md
│ ├── double-stuffed-security-in-android-oreo.md
│ ├── dragging-react-performance-forward.md
│ ├── dropouts-need-not-apply-silicon-valley-asks-mostly-for-developers-with-degrees.md
│ ├── effective-environment-switching-in-ios.md
│ ├── effective-java-for-android-cheatsheet.md
│ ├── effective-okhttp.md
│ ├── efficient-iOS-version-checking.md
│ ├── elasticsearch-rolling-upgrades.md
│ ├── embedding-lua-in-the-web.md
│ ├── embracing-java-8-language-features.md
│ ├── empathy-and-ux-design.md
│ ├── empty-state-mobile-app-nice-to-have-essential.md
│ ├── enabling-proguard-in-an-android-instant-app.md
│ ├── enhancing-css-layout-floats-flexbox-grid.md
│ ├── error-handling-in-rxjava.md
│ ├── es6-modules-support-lands-in-browsers-is-it-time-to-rethink-bundling.md
│ ├── es6-private-members.md
│ ├── es6.md
│ ├── es8-was-released-and-here-are-its-main-new-features.md
│ ├── eslint-migrating-to-4.0.0.md
│ ├── essential-guide-for-designing-your-android-app-architecture-mvp-part-2.md
│ ├── essential-guide-for-designing-your-android-app-architecture-mvp-part-3.md
│ ├── essential-guide-for-designing-your-android-app-architecture-mvp-part.md
│ ├── even-fibonacci-numbers-python-vs-javascript.md
│ ├── everyone-is-a-designer-get-over-it.md
│ ├── everything-you-need-to-know-about-css-variables.md
│ ├── evolving-the-facebook-news-feed-to-serve-you-better.md
│ ├── explain-activity-launch-mode-with-examples.md
│ ├── exploring-es7-decorators.md
│ ├── exploring-firebase-on-android-ios-analytics.md
│ ├── exploring-firebase-on-android-ios-remote-config.md
│ ├── exploring-kotlins-hidden-costs-part-1.md
│ ├── exploring-kotlins-hidden-costs-part-2.md
│ ├── exploring-kotlins-hidden-costs-part-3.md
│ ├── exploring-the-product.md
│ ├── express-js-and-aws-lambda-a-serverless-love-story.md
│ ├── facebook-content-placeholder-deconstruction.md
│ ├── facebook-open-sources-detectron.md
│ ├── familiarity-bias-is-holding-you-back-its-time-to-embrace-arrow-functions.md
│ ├── fast-properties-in-v8.md
│ ├── faster-more-reliable-ci-builds-with-yarn.md
│ ├── faster-photos-in-facebook-for-ios.md
│ ├── finally-understanding-how-references-work-in-android-and-java.md
│ ├── fingerprinting-and-audio-recognition-with-python.md
│ ├── five-things-you-can-do-with-yarn.md
│ ├── five-tips-for-working-with-redux-in-large-applications.md
│ ├── five-tips-to-improve-your-games-as-a-service-monetization.md
│ ├── flat-ui-less-attention-cause-uncertainty.md
│ ├── flatbuffers-in-android-introdution.md
│ ├── floating-action-button-in-ux-design.md
│ ├── floating-label-no-js-pure-css.md
│ ├── flutter-5-reasons-why-you-may-love-it.md
│ ├── flutter-for-javascript-developers.md
│ ├── flying-solo-with-android-development.md
│ ├── force-with-lease.md
│ ├── form-design-for-complex-applications.md
│ ├── forms-need-validation.md
│ ├── freemium-conversion-rate/
│ │ └── freemium-conversion-rate.md
│ ├── from-a-react-point-of-vue-comparing-reactjs-to-vuejs-for-dynamic-tabular-data.md
│ ├── from-app-explorer-to-first-time-buyer.md
│ ├── from-automatons-to-deep-learning.md
│ ├── from-form-to-function-our-thoughts-on-design-are-changing.md
│ ├── from-functional-java-to-functioning-kotlin.md
│ ├── from-product-design-to-virtual-reality.md
│ ├── front-end-developers-guide-graphql.md
│ ├── front-end-performance-checklist-2018-1.md
│ ├── front-end-performance-checklist-2018-2.md
│ ├── front-end-performance-checklist-2018-3.md
│ ├── front-end-performance-checklist-2018-4.md
│ ├── frontend-in-2017-the-important-parts.md
│ ├── function-as-child-components.md
│ ├── function-caller-considered-harmful.md
│ ├── function-naming-in-swift-3.md
│ ├── functional-interfaces-functional-programming-and-lambda-expressions-reactive-programming-android-rxjava2-what-the-hell-is-this-part3.md
│ ├── functional-mixins-composing-software.md
│ ├── functional-programming-for-android-developers-part-1.md
│ ├── functional-programming-for-android-developers-part-2.md
│ ├── functional-programming-for-android-developers-part-3.md
│ ├── functional-programming-in-javascript-is-an-antipattern.md
│ ├── functional-setstate-is-the-future-of-react.md
│ ├── functors-categories.md
│ ├── future-front-end-web-development.md
│ ├── gang-of-four-patterns-in-kotlin.md
│ ├── generative-research-ux.md
│ ├── generic-data-sources-in-swift.md
│ ├── gentle-introduction-to-functional-javascript-intro.md
│ ├── genuine-guide-to-testing-react-redux-applications.md
│ ├── geolocation-using-multiple-services.md
│ ├── get-ready-a-new-v8-is-coming-node-js-performance-is-changing.md
│ ├── get-started-tensorflow.md
│ ├── getting-started-with-elasticsearch.md
│ ├── getting-started-with-jrebel-for-android.md
│ ├── getting-started-with-retrofit.md
│ ├── getting-the-login-page-right.md
│ ├── getting-to-swift-3-at-airbnb.md
│ ├── go-function-calls-redux.md
│ ├── golden-guidelines-for-writing-clean-css.md
│ ├── good-swift-bad-swift-part-1.md
│ ├── good-swift-bad-swift-part-2.md
│ ├── google-design.md
│ ├── google.interview.university.md
│ ├── graphql-vs-rest.md
│ ├── growing-popularity-atomic-css.md
│ ├── guide-to-interviewing-for-product-design-internships.md
│ ├── guide-to-ux-sketching.md
│ ├── handling-scrolls-with-coordinatorlayout.md
│ ├── handmade-svg-bar-chart-featuring-svg-positioning-gotchas.md
│ ├── high-level-reactivity.md
│ ├── higher-order-functions-composing-software.md
│ ├── hot-vs-cold-observables.md
│ ├── how-a-template-engine-works.md
│ ├── how-apple.md
│ ├── how-can-i-use-css-in-js-securely.md
│ ├── how-chat-bots-work.md
│ ├── how-color-affects-ux-and-behavior.md
│ ├── how-do-promises-work.md
│ ├── how-does-redux-work.md
│ ├── how-google-builds-a-web-framework.md
│ ├── how-i-built-a-web-server-using-go-and-on-chromeos.md
│ ├── how-i-do-developer-ux-at-google.md
│ ├── how-i-learned-to-love-parallelized-applies-with-python-pandas-dask-and-numba
│ ├── how-i-used-stack-overflow-github-to-get-dream-job-before-19-without-degree.md
│ ├── how-ios-apps-on-the-mac-could-work.md
│ ├── how-javascript-works-deep-dive-into-websockets-and-http-2-with-sse-how-to-pick-the-right-path.md
│ ├── how-javascript-works-event-loop-and-the-rise-of-async-programming-5-ways-to-better-coding-with.md
│ ├── how-javascript-works-inside-the-v8-engine-5-tips-on-how-to-write-optimized-code.md
│ ├── how-javascript-works-memory-management-how-to-handle-4-common-memory-leaks.md
│ ├── how-javascript-works-the-building-blocks-of-web-workers-5-cases-when-you-should-use-them.md
│ ├── how-modern-web-browsers-accelerate-performance-the-networking-layer.md
│ ├── how-not-to-crash-1.md
│ ├── how-protocol-oriented-programming-in-swift-saved-my-day.md
│ ├── how-should-i-separate-components.md
│ ├── how-switching-our-domain-structure-unlocked-international-growth.md
│ ├── how-the-heck-does-async-await-work-in-python-3-5.md
│ ├── how-to-achieve-reusability-with-react-components.md
│ ├── how-to-be-a-compiler-make-a-compiler-with-javascript.md
│ ├── how-to-become-an-ios-developer-bob.md
│ ├── how-to-build-a-material-design-prototype-using-sketch-and-pixate-part-three.md
│ ├── how-to-build-a-material-design-prototype-using-sketch-and-pixate-part-two.md
│ ├── how-to-build-a-news-website-layout-with-flexbox.md
│ ├── how-to-build-a-reactive-engine-in-javascript-part-1-observable-objects.md
│ ├── how-to-build-a-spritekit-game-in-swift-3-part-1.md
│ ├── how-to-build-a-spritekit-game-in-swift-3-part-2.md
│ ├── how-to-build-a-spritekit-game-in-swift-3-part-3.md
│ ├── how-to-build-and-publish-es6-modules-today-with-babel-and-rollup.md
│ ├── how-to-build-mobile-games-with-people-in-mind.md
│ ├── how-to-cancel-your-promise.md
│ ├── how-to-communicate-hidden-gestures-in-mobile-app.md
│ ├── how-to-configure-nginx-for-a-flask-web-application.md
│ ├── how-to-craft-mobile-notifications-that-users-actually-want.md
│ ├── how-to-create-a-bubble-selection-animation-on-android.md
│ ├── how-to-create-a-front-end-framework-with-sketch.md
│ ├── how-to-debug-front-end-console.md
│ ├── how-to-design-notifications-for-better-ux.md
│ ├── how-to-design-words.md
│ ├── how-to-disable-links.md
│ ├── how-to-do-proper-tree-shaking-in-webpack-2.md
│ ├── how-to-generate-haptic-feedback-with-uifeedbackgenerator.md
│ ├── how-to-get-the-most-out-of-the-javascript-console.md
│ ├── how-to-go-from-hobbyist-to-professional-developer.md
│ ├── how-to-handle-imbalanced-classes-in-machine-learning.md
│ ├── how-to-implement-expandable-menu-on-ios-like-in-airbnb.md
│ ├── how-to-improve-quality-and-syntax-of-your-android-code.md
│ ├── how-to-javascript-in-2018.md
│ ├── how-to-leak-memory-with-subscriptions-in-rxjava.md
│ ├── how-to-make-a-chart-using-ajax-rest-apis.md
│ ├── how-to-make-your-not-so-great-visual-design-better.md
│ ├── how-to-make-your-react-app-fully-functional-fully-reactive-and-able-to-handle-all-those-crazy.md
│ ├── how-to-make-your-react-native-app-respond-gracefully-when-the-keyboard-pops-up.md
│ ├── how-to-pretend-youre-a-great-designer.md
│ ├── how-to-set-up-a-continuous-integration-server-for-android-development-ubuntu-jenkins-sonarqube.md
│ ├── how-to-start-with-backend-typescript-and-use-its-full-potential.md
│ ├── how-to-stop-online-harassment.md
│ ├── how-to-test-a-singleton-in-an-android-service-2.md
│ ├── how-to-test-a-singleton-in-an-android-service-one.md
│ ├── how-to-use-a-model-view-viewmodel-architecture-for-ios.md
│ ├── how-to-use-colors-in-ui-design.md
│ ├── how-to-use-generators.md
│ ├── how-to-write-a-javascript-package-for-both-node-and-the-browser.md
│ ├── how-to-write-a-perfect-error-message.md
│ ├── how-to-write-dockerfiles-for-python-web-apps.md
│ ├── how-to-write-high-performance-code-in-golang-using-go-routines.md
│ ├── how-to-write-low-garbage-real-time-javascript.md
│ ├── how-vr-is-changing-ux-from-prototyping-to-device-design.md
│ ├── how-we-created-bubblepicker-a-colourful-animation-for-android.md
│ ├── how-we-css-at-bigcommerce.md
│ ├── how-we-use-bem-to-modularise-our-css.md
│ ├── how-writing-custom-babel-and-eslint-plugins-can-increase-your-productivity-and-improve-user.md
│ ├── how-you-can-decrease-application-size-by-60-in-only-5-minutes.md
│ ├── how_to_draw.md
│ ├── http2-for-web-developers.md
│ ├── https-medium-com-alexstyl-animating-the-toolbar.md
│ ├── i-interviewed-at-five-top-companies-in-silicon-valley-in-five-days-and-luckily-got-five-job-offers.md
│ ├── i-m-a-web-developer-and-i-ve-been-stuck-with-the-simplest-app-for-the-last-10-days.md
│ ├── ibeacon-in-swift.md
│ ├── ibm-is-becoming-the-worlds-largest-design-company.md
│ ├── if-i-have-one-month-to-learn-ios-how-would-i-spend-it.md
│ ├── im-not-a-ux-designer-and-neither-are-you.md
│ ├── image-upload-manipulation-react.md
│ ├── immutable-models-and-data-consistency-our-ios-app.md
│ ├── implementation-of-convolutional-neural-network-using-python-and-keras.md
│ ├── implementing-delegates-in-swift-step-by-step.md
│ ├── improve-web-typography-css-font-size-adjust.md
│ ├── improving-perceived-performance-with-multiple-background-images.md
│ ├── improving-performance-with-background-data-prefetching.md
│ ├── improving-swift-compile-times.md
│ ├── increasing-attacker-cost-using-immutable-infrastructure.md
│ ├── incrementally-migrate-from-sqlite-to-room.md
│ ├── ink-transition-effect.md
│ ├── intro-to-swift-functional-programming-with-bob.md
│ ├── introducing-design-systems-ops.md
│ ├── introducing-pokedex-org/
│ │ └── introducing-pokedex-org.md
│ ├── introducing-redux-recompose.md
│ ├── introducing-turbo-5x-faster-than-yarn-npm-and-runs-natively-in-browser.md
│ ├── introduction-nginscript.md
│ ├── introduction-to-node-express.md
│ ├── introduction-to-protocol-oriented-programming-in-swift.md
│ ├── intuitive-design-vs-shareable-design.md
│ ├── ios-11-machine-learning-for-everyone.md
│ ├── ios-11-notable-uikit-additions.md
│ ├── ios-9-tutorial-series-protocol-oriented-programming-with-uikit.md
│ ├── ios-custom-modality.md
│ ├── is-this-my-interface-or-yours.md
│ ├── is-this-the-perfect-save-icon.md
│ ├── is-vanilla-javascript-worth-learning-absolutely.md
│ ├── its-not-dark-magic-pulling-back-the-curtains-from-your-stylesheets.md
│ ├── jQuery-Tips-Everyone-Should-Know.md
│ ├── java-8-in-android-n-preview.md
│ ├── javascript-debugging-tips.md
│ ├── javascript-developer-survey-results.md
│ ├── javascript-es6-var-let-or-const.md
│ ├── javascript-factory-functions-with-es6.md
│ ├── javascript-firefox-debugger.md
│ ├── javascript-monads-made-simple.md
│ ├── javascript-package-managers.md
│ ├── javascript-start-up-performance.md
│ ├── javascript-testing-unit-functional-integration.md
│ ├── javascript-what-the-heck-is-a-callback.md
│ ├── jquery-3-0-final-released.md
│ ├── js-things-i-never-knew-existed.md
│ ├── json-javascript-object-notation.md
│ ├── keep-webpack-fast-a-field-guide-for-better-build-performance.md
│ ├── kerning.md
│ ├── kotlin-its-the-little-things.md
│ ├── lazy-loading-images-dont-rely-on-javascript.md
│ ├── learn-blockchains-by-building-one.md
│ ├── learn-css-flexbox-in-3-minutes.md
│ ├── learning-how-to-set-up-automated-cross-browser-javascript-unit-testing.md
│ ├── learning-javascript-9-common-mistakes.md
│ ├── learning-react-js-is-easier-than-you-think.md
│ ├── lecture-1-what-is-product-design.md
│ ├── less-coding-guidelines.md
│ ├── lets-make-your-svg-symbol-icons-multi-colored-with-css-variables.md
│ ├── leveling-up-your-javascript.md
│ ├── life-after-js-learning-2nd-language.md
│ ├── life-without-interface-builder.md
│ ├── little-big-details-for-your-mobile-app.md
│ ├── lost-in-translation-the-importance-of-visual-design-localisation.md
│ ├── love-letter-css.md
│ ├── macOS-Security-and-Privacy-Guide.md
│ ├── machine-learning-for-android-developers-with-the-mobile-vision-api-part-1-face-detection.md
│ ├── make-memory-management-great-again.md
│ ├── make-node-js-core-bigger.md
│ ├── make-or-break-with-gradle.md
│ ├── make-react-fast-again-tools-and-techniques-for-speeding-up-your-react-app.md
│ ├── making-magic-with-websockets-and-css3.md
│ ├── making-photos-smaller.md
│ ├── making-react-native-apps-accessible.md
│ ├── making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit.md
│ ├── making-svg-icon-libraries-for-react-apps
│ ├── making-the-most-of-the-apk-analyzer.md
│ ├── making-the-web-more-accessible-with-ai.md
│ ├── managing-css-js-http-2.md
│ ├── managing-resources-for-large-scale-testing.md
│ ├── mastering-swift-essential-details-about-strings.md
│ ├── material-design-prototype-tutorial-part-1.md
│ ├── media-query-units.md
│ ├── meet-michelangelo-ubers-mechine-learning-plantform.md
│ ├── meet-the-new-dialog-element.md
│ ├── messaging-sync-scaling-mobile-messaging-at-airbnb.md
│ ├── metaprogramming-in-es6-part-2-reflect.md
│ ├── metaprogramming-in-es6-part-3-proxies.md
│ ├── metaprogramming-in-es6-symbols.md
│ ├── migrating-an-android-project-to-kotlin.md
│ ├── migrating-mediastyle-notifications-to-support-android-o.md
│ ├── million-requests-per-second-with-python.md
│ ├── mobile-design-best-practices.md
│ ├── mobile-friendly.md
│ ├── mobile-small-portrait-slow-interlace-monochrome-coarse-non-hover-first.md
│ ├── mocking-is-a-code-smell.md
│ ├── modelling-state-in-swift.md
│ ├── modern-javascript-for-ancient-web-developers.md
│ ├── modernization-reactivity.md
│ ├── modules-vs-microservices.md
│ ├── mosby3-mvi-3.md
│ ├── mosby3-mvi-4.md
│ ├── mosby3-mvi-5.md
│ ├── mosby3-mvi-6.md
│ ├── mosby3-mvi.md
│ ├── motion-in-ux-design-9-points-to-get-started.md
│ ├── moving-a-large-and-old-codebase-to-python3.md
│ ├── moving-existing-api-from-rest-to-graphql.md
│ ├── multithreading-with-rxjava-dadddc.md
│ ├── must-see-javascript-dev-tools-that-put-other-dev-tools-to-shame.md
│ ├── mvvm-with-flow-controller-first-step.md
│ ├── mvvmc-with-swift.md
│ ├── my-least-favorite-thing-about-swift.md
│ ├── mysql-migration.md
│ ├── native-modules-for-react-native-android.md
│ ├── natural-language-processing-made-easy-using-spacy-in-python.md
│ ├── neo-project-docs-consensus.md
│ ├── nested-ternaries-are-great.md
│ ├── neural-networks-from-scratch-in-r.md
│ ├── new-android-injector-with-dagger-2-part-1.md
│ ├── new-android-injector-with-dagger-2-part-2.md
│ ├── new-android-injector-with-dagger-2-part-3.md
│ ├── new-in-python-3.7.md
│ ├── next-generation-3d-graphics-on-the-web.md
│ ├── no-excuses-it-takes-5-mins-make-that-drawer-visible-under-your-status-bar-2.md
│ ├── node-hero-node-js-authentication-passport-js.md
│ ├── node-js-child-processes-everything-you-need-to-know.md
│ ├── node-js-development-tips-2018.md
│ ├── node-js-native-modules-with-rust.md
│ ├── node-js-streams-everything-you-need-to-know.md
│ ├── node-js-war-stories-solving-issues-in-production.md
│ ├── nodejs-best-practices-how-to-become-a-better-developer-in-2018.md
│ ├── nodejs-vs-python-where-to-use-and-where-not.md
│ ├── nothing-will-change-until-you-start-building.md
│ ├── notifications-in-android-n.md
│ ├── nsfetchedresultscontroller-woes.md
│ ├── o-h-yeah-what-we-look-forward-to-in-android-o.md
│ ├── object-detection-with-yolo.md
│ ├── of-svg-minification-and-gzip.md
│ ├── offline-friendly-forms.md
│ ├── offline-support-try-again-later-no-more.md
│ ├── on-loser-experience-design.md
│ ├── on-performant-arrays-in-swift.md
│ ├── on-strategies-to-apply-kotlin-to-existing-java-code.md
│ ├── on-writing-less-damn-code.md
│ ├── online-migrations.md
│ ├── open-sourcing-a-10x-reduction-in-apache-cassandra-tail-latency.md
│ ├── optimize-battery-life-with-androids-gcm-network-manager.md
│ ├── optimizing-layouts-in-android-reducing-overdraw.md
│ ├── our-best-practices-for-writing-react-components.md
│ ├── out-of-the-dropshadows.md
│ ├── outside-in-development-with-double-loop-tdd.md
│ ├── outsmarting-subscription-challenges.md
│ ├── package-manager-fetch.md
│ ├── performance-metrics-whats-this-all-about.md
│ ├── performance-optimisations-for-react-applications.md
│ ├── performance-tuning-a-react-application.md
│ ├── permissions-part-1.md
│ ├── permissions-part-2.md
│ ├── php-7-hhvm-benchmarks.md
│ ├── playing-with-paths.md
│ ├── popovers-on-popovers.md
│ ├── post-a-boarding-pass-on-facebook-get-your-account-stolen.md
│ ├── postcss-what-it-is-and-what-it-can-do.md
│ ├── postgres-atomicity.md
│ ├── postgres-full-text-search-with-django.md
│ ├── powering-php-with-janusgraph.md
│ ├── practical-guide-sql-isolation.md
│ ├── practical-redux-part-0-introduction.md
│ ├── practical-redux-part-1-redux-orm-basics.md
│ ├── practical-redux-part-2-redux-orm-concepts-and-techniques.md
│ ├── practical-svg.md
│ ├── predicting-your-apps-monetization-future.md
│ ├── preload-prefetch-and-priorities-in-chrome.md
│ ├── preparing-ios-app-for-extensions.md
│ ├── private-variables-in-javascript.md
│ ├── product-listing-information.md
│ ├── programmers-confess-unethical-illegal-tasks-asked-of-them.md
│ ├── progressive-web-amps.md
│ ├── progressive-web-apps-with-react-js-part-2-page-load-performance.md
│ ├── progressive-web-apps-with-react-js-part-3-offline-support-and-network-resilience.md
│ ├── progressive-web-apps-with-react-js-part-4-site-is-progressively-enhanced.md
│ ├── progressive-web-apps-with-react-js-part-i-introduction.md
│ ├── project-need-react.md
│ ├── projects-need-react.md
│ ├── promising-promise-tips.md
│ ├── proof-of-work-vs-proof-of-stake.md
│ ├── protocol-oriented-programming-view-in-swift-3.md
│ ├── protocol-oriented-programming.md
│ ├── pull-vs-push-imperative-vs-reactive-reactive-programming-android-rxjava2-hell-part2.md
│ ├── pury-new-way-to-profile-your-android-application.md
│ ├── push-for-a-point-of-view.md
│ ├── pyqt-versus-wxpython.md
│ ├── python-3-an-intro-to-encryption.md
│ ├── python-dynamic-attributes.md
│ ├── python-introspection-with-the-inspect-module.md
│ ├── python-is-the-perfect-tool-for-any-problem.md
│ ├── python-pandas-databases.md
│ ├── quantum-up-close-what-is-a-browser-engine.md
│ ├── quickly-process-api-requests-with-shoryuken-and-sqs.md
│ ├── rate-limiters.md
│ ├── react-16-features-and-fiber-explanation.md
│ ├── react-aha-moments.md
│ ├── react-at-light-speed.md
│ ├── react-is-slow-react-is-fast.md
│ ├── react-native-android-app-memory-investigation.md
│ ├── react-native-at-walmartlabs.md
│ ├── react-native-push-notifications-with-onesignal.md
│ ├── react-newbies-tutorial.md
│ ├── react-redux-optimization.md
│ ├── reactive-generic-segue-with-rxswift.md
│ ├── reactive-programming-android-rxjava2-hell-part1.md
│ ├── reactiveswift-manage-your-memory.md
│ ├── reacts-jsx-vs-vue-s-templates-a-showdown-on-the-front-end.md
│ ├── real-world-flux-ios.md
│ ├── rearchitecting-airbnbs-frontend.md
│ ├── rebuilding-slack-com.md
│ ├── recent-web-performance-fixes-on-airbnb-listing-pages.md
│ ├── recurrent-neural-network-rnn-part-4-attentional-interfaces.md
│ ├── recurrent-neural-network-rnn-part-5-custom-cells.md
│ ├── recurrent-neural-networks-rnn-part-1-basic-rnn-char-rnn.md
│ ├── recurrent-neural-networks-rnn-part-2-text-classification.md
│ ├── recurrent-neural-networks-rnn-part-3-encoder-decoder.md
│ ├── recyclerview-prefetch.md
│ ├── reduce-composing-software.md
│ ├── reducers-vs-transducers.md
│ ├── reducing-cognitive-overload-for-a-better-user-experience.md
│ ├── reducing-jpg-file-size.md
│ ├── redux-4-ways.md
│ ├── refactoring-not-on-the-backlog.md
│ ├── refactoring-singletons-in-swift.md
│ ├── reflections-on-eslints-success.md
│ ├── regarding-swift-build-time-optimizations.md
│ ├── requiring-modules-in-node-js-everything-you-need-to-know.md
│ ├── rest-2-0-graphql.md
│ ├── rest-apis-are-rest-in-peace-apis-long-live-graphql.md
│ ├── retrofit-getting-started.md
│ ├── rewriting-rxjava-with-kotlin-coroutines.md
│ ├── rice-simple-prioritization-for-product-managers.md
│ ├── right-click-logo-show-logo-download-options.md
│ ├── rollup-interview.md
│ ├── rom-simple-to-unusual-a-look-at-navigation-in-web-design.md
│ ├── rss-responsive-design.md
│ ├── rxandroid-tutorial.md
│ ├── rxjava-production-line.md
│ ├── rxjava-vs-kotlin-coroutines-quick-look.md
│ ├── rxjs-observables-observers-operators.md
│ ├── rxswift-at-first-sight.md
│ ├── scaling-node-js-applications.md
│ ├── schedule-tasks-and-jobs-intelligently-in-android.md
│ ├── scrolling-behavior-for-appbars-in-android.md
│ ├── seamless-ways-to-upgrade-angular-1-x-to-angular-2.md
│ ├── secure-web-app-http-headers.md
│ ├── securing-cookies-in-go.md
│ ├── securing-your-express-app.md
│ ├── server-side-react-rendering.md
│ ├── server-side-web-components-how-and-why.md
│ ├── service-workers-the-little-heroes-behind-progressive-web-apps.md
│ ├── setstate-gate-abc.md
│ ├── setting-up-prototypes-in-v8.md
│ ├── sharing-files-though-intents-are-you-ready-for-nougat.md
│ ├── shaving-our-image-size.md
│ ├── shrinking-apks-growing-installs.md
│ ├── simplify-your-life-with-an-ssh-config-file.md
│ ├── six-of-the-most-exciting-es6-features-in-node-js-v6-lts.md
│ ├── sketch-mastering.md
│ ├── slack-s-2-8-billion-dollar-secret-sauce.md
│ ├── sloped-edges-with-consistent-angle-in-css.md
│ ├── smooth-css-animations.md
│ ├── so-whats-this-graphql-thing-i-keep-hearing-about.md
│ ├── so-you-want-to-be-a-functional-programmer-part-1.md
│ ├── so-you-want-to-be-a-functional-programmer-part-2.md
│ ├── so-you-want-to-be-a-functional-programmer-part-3.md
│ ├── so-you-want-to-be-a-functional-programmer-part-4.md
│ ├── so-you-want-to-be-a-functional-programmer-part-5.md
│ ├── so-you-want-to-be-a-functional-programmer-part-6.md
│ ├── so-you-want-to-learn-react-js.md
│ ├── software-testing-big-picture.md
│ ├── solid-principles-the-definitive-guide.md
│ ├── spotifys-discover-weekly-how-machine-learning-finds-your-new-music.md
│ ├── sprite-animation.md
│ ├── sql-tutorial-how-to-write-better-queries.md
│ ├── standard-package-layout.md
│ ├── start-your-open-source-career.md
│ ├── state-containers-in-swift.md
│ ├── state-of-vue-report-2017.md
│ ├── statements-messages-reducers.md
│ ├── steve-jobs-in-1994-the-rolling-stone-interview-20110117.md
│ ├── stop-designing-interfaces-start-designing-experiences.md
│ ├── stop-foxtrots-now.md
│ ├── story-thought-and-system-thought.md
│ ├── streams-ftw.md
│ ├── surprising-polymorphism-in-react-applications.md
│ ├── svg-vs-gif.md
│ ├── swift-3-0-release-process.md
│ ├── swift-3-migration-pitfalls.md
│ ├── swift-4-0-released.md
│ ├── swift-algorithm-club-swift-binary-search-tree-data-structure.md
│ ├── swift-arrays-holding-elements-weak-references.md
│ ├── swift-initialization-with-closures.md
│ ├── swift-keywords.md
│ ├── swift-lazy-initialization-with-closures.md
│ ├── swift-retention-cycle-in-closures-and-delegate.md
│ ├── swift-struct-references.md
│ ├── swift-testability.md
│ ├── swift-value-types-reference-types.md
│ ├── switching-site-https-shoestring-budget.md
│ ├── talk-the-state-of-the-web.md
│ ├── taming-great-complexity-mvvm-coordinators-and-rxswift.md
│ ├── tdd-quick-nimble.md
│ ├── tensorflow-in-a-nutshell-part-one-basics.md
│ ├── tensorflow-in-a-nutshell-part-three-all-the-models.md
│ ├── tensorflow-in-a-nutshell-part-two-hybrid-learning.md
│ ├── terrible-ux-trends-for.md
│ ├── test-driving-away-coupling-in-activities.md
│ ├── testing-ios-apps.md
│ ├── testing-mvp-using-espresso-and-mockito.md
│ ├── testing-views-in-isolation-with-espresso.md
│ ├── text-classification-using-neural-networks.md
│ ├── text-fields-in-mobile-app.md
│ ├── the-10-unique-ways-slack-hacked-growth-to-become-a-4-billion-company.md
│ ├── the-9-rules-of-design-research.md
│ ├── the-GCD-handbook.md
│ ├── the-android-lifecycle-cheat-sheet-part-i-single-activities.md
│ ├── the-art-of-defensive-programming.md
│ ├── the-art-of-designing-with-heart.md
│ ├── the-art-of-minimalism-in-mobile-app-ui-design.md
│ ├── the-basics-of-designing-mobile-apps.md
│ ├── the-caching-antipattern.md
│ ├── the-circle-of-product-design.md
│ ├── the-coming-era-of-the-zombie-token.md
│ ├── the-complete-guide-to-network-unit-testing-in-swift.md
│ ├── the-constructor-is-dead-long-live-the-constructor.md
│ ├── the-details-that-matter.md
│ ├── the-dos-and-don-ts-of-writing-test-cases-in-android.md
│ ├── the-easiest-core-data.md
│ ├── the-easy-way-to-turn-a-website-into-a-progressive-web-app.md
│ ├── the-essentials-of-ios-app-testing-for-iphone-x.md
│ ├── the-evolution-of-code-deploys-at-reddit.md
│ ├── the-flexible-routing-approach-in-an-ios-app.md
│ ├── the-future-of-deep-learning.md
│ ├── the-future-of-state-management.md
│ ├── the-future-of-ux-design.md
│ ├── the-hidden-treasures-of-object-composition.md
│ ├── the-introduction-of-starspace.md
│ ├── the-limitations-of-deep-learning.md
│ ├── the-many-faces-of-this-in-javascript.md
│ ├── the-next-step-for-reactive-android-programming.md
│ ├── the-one-python-library-everyone-needs.md
│ ├── the-past-present-and-future-of-sketch.md
│ ├── the-perils-of-shared-code.md
│ ├── the-right-way-to-bundle-your-assets-for-faster-sites-over-http-2.md
│ ├── the-rise-and-fall-and-rise-of-functional-programming-composable-software.md
│ ├── the-secret-of-successful-typeface-combinations.md
│ ├── the-secret-to-writing-killer-product-copy.md
│ ├── the-three-economic-eras-of-bitcoin.md
│ ├── the-time-i-had-to-crack-my-own-reddit-password.md
│ ├── the-tiny-keyboard-problem-do-people-complete-forms.md
│ ├── the-truth-is-in-the-code.md
│ ├── the-two-types-of-product-virality.md
│ ├── the-ultimate-guide-to-creating-a-mobile-application.md
│ ├── the-way-of-the-gopher.md
│ ├── the-worlds-fastest-javascript-memoization-library.md
│ ├── things-i-wish-i-knew-before-i-wrote-my-first-android-app.md
│ ├── things-i-wish-i-knew-when-i-started-building-android-sdk-libraries.md
│ ├── things-i-wish-i-were-told-about-react-native.md
│ ├── think-less-design-better.md
│ ├── this-browser-tweak-saved-60%-of-requests-to-facebook.md
│ ├── timeline-for-learning-react.md
│ ├── timer-problems.md
│ ├── timing-is-everything.md
│ ├── tips-to-keep-in-mind-while-developing-complex-ui-in-web.md
│ ├── tools-for-developing-accessible-websites.md
│ ├── top-javascript-libraries-tech-to-learn-in-2018.md
│ ├── top-ten-pull-request-review-mistakes.md
│ ├── toward-go2.md
│ ├── towards-godless-android-development-how-and-why-i-kill-god-objects.md
│ ├── tracing-patterns-hinder-performance.md
│ ├── transition-effect-with-css-masks.md
│ ├── troubleshooting-proguard-issues-on-android.md
│ ├── trusting-sdks.md
│ ├── turbocharged-javascript-refactoring-with-codemods.md
│ ├── turning-design-mockups-into-code-with-deep-learning-1.md
│ ├── turning-design-mockups-into-code-with-deep-learning-2.md
│ ├── type-checker-issues.md
│ ├── typescript-class-vs-interface.md
│ ├── typescript-getting-popular.md
│ ├── typescript-javascript-with-super-powers.md
│ ├── typescript-javascript-with-superpowers-part-ii.md
│ ├── typography-as-base-from-the-content-out.md
│ ├── typography-can-make-your-design-or-break-it.md
│ ├── typography-for-user-interfaces.md
│ ├── ui-vs-ux-what-is-the-difference.md
│ ├── uiscrollview-tutorial.md
│ ├── ultimate-guide-to-json-parsing-with-swift-4.md
│ ├── unconventional-way-of-learning-a-new-programming-language.md
│ ├── under-the-hood-of-futures-and-promises-in-swift.md
│ ├── understanding-asynchronous-programming-in-python.md
│ ├── understanding-higher-order-components.md
│ ├── understanding-javascript-promises-pt-i-background-basics.md
│ ├── understanding-javascripts-engine-with-cartoons.md
│ ├── understanding-lock-files-in-npm-5.md
│ ├── understanding-node-js-event-driven-architecture.md
│ ├── understanding-service-workers.md
│ ├── understanding-tensorflow-using-go.md
│ ├── understanding-v8s-bytecode.md
│ ├── undo-history-in-swift.md
│ ├── upcoming-regexp-features.md
│ ├── upgrade-project-css-selector-custom-attributes.md
│ ├── use-a-render-prop.md
│ ├── user-breakpoints-in-xcode.md
│ ├── using-a-core-data-model-in-swift-playgrounds.md
│ ├── using-a-function-in-setstate-instead-of-an-object.md
│ ├── using-arkit-with-metal-part-2.md
│ ├── using-arkit-with-metal.md
│ ├── using-buffers-node-js-c-plus-plus.md
│ ├── using-concurrency-and-speed-and-performance-on-android.md
│ ├── using-css-counters.md
│ ├── using-devtools-tweak-designs-browser.md
│ ├── using-feature-queries-in-css.md
│ ├── using-fetch-as-google-for-seo-experiments-with-react-driven-websites.md
│ ├── using-leanbacks-diffcallback.md
│ ├── using-machine-learning-to-predict-value-of-homes-on-airbnb.md
│ ├── using-new-google-sheets-api.md
│ ├── using-swifts-enums-for-quick-actions.md
│ ├── using-zopfli-to-optimize-png-images.md
│ ├── uuid-or-guid-as-primary-keys-be-careful.md
│ ├── ux-and-design-thinking-5-tips-for-changing-your-company-mindset.md
│ ├── ux-infinite-scrolling-vs-pagination.md
│ ├── ux-is-grounded-in-rationale-not-design.md
│ ├── ux-review-and-redesign-of-the-cocacola-freestyle-kiosk-interface.md
│ ├── v3-1-0-such-perf-wow-many-streams.md
│ ├── v8-behind-the-scenes-november-edition.md
│ ├── vectors-for-all-almost.md
│ ├── vectors-for-all-finally.md
│ ├── vectors-for-all-slight-return.md
│ ├── vertical-typesetting-revisited.md
│ ├── viewmodels-a-simple-example.md
│ ├── viewmodels-and-livedata-patterns-antipatterns.md
│ ├── viewmodels-persistence-onsaveinstancestate-restoring-ui-state-and-loaders.md
│ ├── war-learning-curve-rx-java-2-java-8-stream-android-rxjava2-hell-part4.md
│ ├── we-analyzed-thousands-of-coding-interviews-heres-what-we-learned.md
│ ├── web-developer-security-checklist.md
│ ├── web-font-loading-patterns.md
│ ├── web-fonts-when-you-need-them-when-you-dont.md
│ ├── webhooks-dos-and-dont-s-what-we-learned-after-integrating-100-apis.md
│ ├── webpack-3-official-release.md
│ ├── webpack-4-beta-try-it-today.md
│ ├── webpack-and-rollup-the-same-but-different.md
│ ├── webpack-bits-getting-the-most-out-of-the-commonschunkplugin.md
│ ├── webpack-http-2.md
│ ├── webpack-your-bags.md
│ ├── what-archive-format-should-you-use-war-or-jar.md
│ ├── what-does-the-time-complexity-o-log-n-actually-mean.md
│ ├── what-face-id-means-for-accessibility.md
│ ├── what-i-hate-in-kotlin.md
│ ├── what-i-learned-from-reading-the-redux-source-code.md
│ ├── what-i-learned-from-writing-six-functions-that-all-did-the-same-thing.md
│ ├── what-i-would-like-to-know-before-i-code-my-first-ios-application-in-swift.md
│ ├── what-is-mcts.md
│ ├── what-is-the-real-role-of-a-design-portfolio-website.md
│ ├── what-makes-webassembly-fast.md
│ ├── what-to-do-if-your-product-isnt-growing.md
│ ├── what-unit-tests-are-trying-to-tell-us-about-activities-pt-2.md
│ ├── what-unit-tests-are-trying-to-tell-us-about-activities-pt1.md
│ ├── what-will-bitcoin-look-like-in-twenty-years-1.md
│ ├── what-will-bitcoin-look-like-in-twenty-years-2.md
│ ├── what-will-bitcoin-look-like-in-twenty-years-3.md
│ ├── what-you-must-know-to-build-savvy-push-notifications.md
│ ├── what-you-see-is-what-you-use.md
│ ├── whats-in-the-apk.md
│ ├── whats-new-in-html-5-2.md
│ ├── whats-new-in-ios-11.md
│ ├── whats-new-in-react-16-3.md
│ ├── whats-new-in-vue-devtools-4-0.md
│ ├── whats-so-great-about-redux.md
│ ├── where-is-webassembly-now-and-whats-next.md
│ ├── where-to-spot-new-design-trends-15-sources-to-stay-fresh.md
│ ├── who-plays-mobile-games.md
│ ├── whole-module-optimizations.md
│ ├── why-and-how-the-cryptobubble-will-burst.md
│ ├── why-android-testing-is-so-hard-historical-edition.md
│ ├── why-building-community-is-the-new-growth-hack.md
│ ├── why-composition-is-harder-with-classes.md
│ ├── why-context-value-matters-and-how-to-improve-it.md
│ ├── why-design-principles-shape-stronger-products.md
│ ├── why-design.md
│ ├── why-do-people-open-emails.md
│ ├── why-do-we-need-a-new-api.md
│ ├── why-drop-down-lists-are-bad-for-the-user-experience.md
│ ├── why-i-close-prs-oss-project-maintainer-notes.md
│ ├── why-i-havent-fixed-your-issue-yet.md
│ ├── why-i-love-ugly-messy-interfaces-and-you-probably-do-too.md
│ ├── why-is-arkit-better-than-the-alternatives.md
│ ├── why-learn-functional-programming-in-javascript-composing-software.md
│ ├── why-object-literals-in-javascript-are-cool.md
│ ├── why-our-website-is-faster-than-yours.md
│ ├── why-the-first-ten-minutes-is-crucial-if-you-want-to-keep-players-coming-back-to-your-mobile-game.md
│ ├── why-user-experience-always-has-to-come-first.md
│ ├── why-vertical-rhythms.md
│ ├── why-we-desperately-need-women-to-design-ai.md
│ ├── why-we-never-thank-open-source-maintainers.md
│ ├── why-your-app-looks-better-in-sketch.md
│ ├── women-and-mobile-games-learnings-for-developers.md
│ ├── workcation-app-part-1-fragments-custom-transition.md
│ ├── workcation-app-part-2-animating-markers-with-mapoverlaylayout.md
│ ├── workcation-app-part-3-recyclerview-interaction-with-animated-markers.md
│ ├── workcation-app-part-4-shared-element-transition-recyclerview-scenes.md
│ ├── world-class-testing-development-pipeline-for-android-part-2.md
│ ├── world-class-testing-development-pipeline-for-android.md
│ ├── wrapping-existing-libraries-with-rxjava.md
│ ├── write-clean-css-10-simple-steps-pt1.md
│ ├── write-clean-css-10-simple-steps-pt2.md
│ ├── write-safer-and-cleaner-code-by-leveraging-the-power-of-immutability.md
│ ├── writing-a-lambda-calculus-interpreter-in-javascrip.md
│ ├── writing-better-adapters.md
│ ├── writing-better-css-with-currentcolor.md
│ ├── writing-unit-tests-in-a-swift-playground.md
│ ├── wwdc-2016-increased-safety-in-swift-3.md
│ ├── xcode7-xcode8.md
│ ├── yammer-ios-app-ported-to-swift-3.md
│ ├── yeah-redesign-part-1.md
│ ├── you-do-not-need-a-css-grid-based-grid-system.md
│ ├── you-dont-know-node.md
│ └── your-node-js-authentication-tutorial-is-wrong.md
├── TODO1/
│ ├── 1-2-3-9-looking-into-assembly-code-of-coercion.md
│ ├── 10-signs-you-will-suck-at-programming.md
│ ├── 10-things-ive-learned-from-working-remotely.md
│ ├── 101-tips-for-being-a-great-programmer-human.md
│ ├── 11-chrome-apis-that-give-your-web-app-a-native-feel.md
│ ├── 11-react-component-libraries-you-should-know.md
│ ├── 13-javascript-methods-useful-for-dom-manipulation.md
│ ├── 13-reasons-why-you-should-choose-consider-to-move-to-flutter-in-2019.md
│ ├── 16-devtools-tips-and-tricks-every-css-developer-need-to-know.md
│ ├── 23-facilitation-tips-for-design-sprints.md
│ ├── 30-minute-python-web-scraper.md
│ ├── 4-css-filters-for-adjusting-color.md
│ ├── 4-reasons-why-you-should-design-without-color-first.md
│ ├── 5-animation-packages-ionic.md
│ ├── 5-best-practices-to-prevent-git-leaks.md
│ ├── 5-better-practices-for-javascript-promises-in-real-projects.md
│ ├── 5-more-drawing-exercises.md
│ ├── 5-optimization-tips-for-your-mobile-web-app-for-higher-user-retention.md
│ ├── 5-rules-for-designer-engineer-collaboration.md
│ ├── 5-secret-features-of-json-stringify.md
│ ├── 5-tips-for-using-showinstallprompt-in-your-instant-experience.md
│ ├── 5-tips-to-write-better-conditionals-in-javascript.md
│ ├── 5-tools-for-faster-development-in-react.md
│ ├── 5-ways-to-create-a-settings-icon.md
│ ├── 6-best-javascript-frameworks-in-2020.md
│ ├── 7-javascript-eeg-mind-reading-libraries-for-2018.md
│ ├── 7-principles-of-icon-design.md
│ ├── 7-rules-for-creating-gorgeous-ui-part-1.md
│ ├── 7-rules-for-creating-gorgeous-ui-part-2.md
│ ├── 7-steps-to-get-more-clients-as-a-freelance-developer.md
│ ├── 8-tips-for-great-code-reviews.md
│ ├── 8-ui-ux-design-trends-for-2020.md
│ ├── 8-useful-javascript-tricks.md
│ ├── 8-useful-tree-data-structures-worth-knowing.md
│ ├── The-Android-Lifecycle-cheat-sheet-part-II-Multiple-activities.md
│ ├── The-Android-Lifecycle-cheat-sheet-part-III-Fragments.md
│ ├── The-Android-Lifecycle-cheat-sheet-part-IV.md
│ ├── a-beginner-friendly-introduction-to-containers-vms-and-docker.md
│ ├── a-beginners-guide-to-ethereum.md
│ ├── a-beginners-guide-to-rapid-prototyping.md
│ ├── a-beginners-guide-to-simulating-dynamical-systems-with-python.md
│ ├── a-brief-totally-accurate-history-of-programming-languages.md
│ ├── a-closer-look-at-the-provider-package.md
│ ├── a-complete-guide-to-getting-hired-as-an-ios-developer-in-2018.md
│ ├── a-comprehensive-and-honest-list-of-ux-clichés.md
│ ├── a-comprehensive-look-back-at-frontend-in-2018.md
│ ├── a-deep-dive-into-native-lazy-loading-for-images-and-frames.md
│ ├── a-deep-dive-on-python-type-hints.md
│ ├── a-gentle-introduction-to-react-motion.md
│ ├── a-guide-to-color-accessibility-in-product-design.md
│ ├── a-guide-to-css-grid-and-accessibility.md
│ ├── a-guide-to-css-support-in-browsers.md
│ ├── a-guide-to-custom-elements-for-react-developers.md
│ ├── a-little-reminder-that-pseudo-elements-are-children-kinda.md
│ ├── a-look-at-css-hyphenation-in-2019.md
│ ├── a-minimal-guide-to-ecmascript-decorators.md
│ ├── a-netflix-web-performance-case-study.md
│ ├── a-new-era-of-launching-mobile-games.md
│ ├── a-new-go-api-for-protocol-buffers.md
│ ├── a-new-hope-the-future-of-application-platforms.md
│ ├── a-patchwork-plaid-monolith-to-modularized-app.md
│ ├── a-picture-is-worth-a-thousand-words-faces-and-barcodes—the-shape-detection-api.md
│ ├── a-quick-beginners-guide-to-drawing.md
│ ├── a-quick-introduction-to-functional-javascript.md
│ ├── a-react-job-interview-recruiter-perspective.md
│ ├── a-real-world-comparison-of-front-end-frameworks-with-benchmarks-2018-update.md
│ ├── a-realworld-comparison-of-front-end-frameworks-2020.md
│ ├── a-simple-guide-to-a-b-testing-for-data-science.md
│ ├── a-simple-guide-to-es6-promises.md
│ ├── a-simple-guide-to-understanding-javascript-es6-generators.md
│ ├── a-step-by-step-explanation-of-principal-component-analysis.md
│ ├── a-tale-of-webpack-4-and-how-to-finally-configure-it-in-the-right-way.md
│ ├── a-web-application-completely-in-rust.md
│ ├── absolute-truths-unlearned-as-junior-developer.md
│ ├── abstraction-composition.md
│ ├── abusing-and-overusing-list-comprehensions-in-python.md
│ ├── accepting-payments-with-stripe-vuejs-and-flask.md
│ ├── active-learning-in-machine-learning.md
│ ├── activity-recognitions-new-transition.md
│ ├── adaptive-serving-using-javascript-and-the-network-information-api.md
│ ├── adopting-kotlin.md
│ ├── advanced-tooling-for-web-components.md
│ ├── agile-agile-blah-blah.md
│ ├── airflow-a-workflow-management-platform.md
│ ├── algebraic-effects-for-the-rest-of-us.md
│ ├── algorithms-behind-modern-storage-systems.md
│ ├── alternatives-to-jsx.md
│ ├── an-easier-path-to-functional-programming-in-java.md
│ ├── an-illustrated-and-musical-guide-to-map-reduce-and-filter-array-methods.md
│ ├── an-in-depth-exploration-of-the-array-fill-function.md
│ ├── an-in-depth-svg-tutorial.md
│ ├── an-introduction-to-css-shapes.md
│ ├── an-introduction-to-raspberry-pi-4-gpio-and-controlling-it-with-node-js.md
│ ├── an-introduction-to-speech-recognition-using-wfsts.md
│ ├── an-open-source-interactive-data-visualization-tool-for-neuroevolution.md
│ ├── an-overview-of-go-tooling.md
│ ├── analysing-1-4-billion-rows-with-python.md
│ ├── android-data-binding-library-from-observable-fields-to-livedata-in-two-steps.md
│ ├── android-emulator-project-marble-improvements.md
│ ├── android-networking-in-2019-retrofit-with-kotlins-coroutines.md
│ ├── android-studio-project-marble-apply-changes.md
│ ├── android-studio-switching-to-d8-dexer.md
│ ├── animated-qr-data-transfer-with-gomobile-and-gopherjs.md
│ ├── animated-transition-in-react-native.md
│ ├── announcing-the-alexa-skills-kit-for-node-js.md
│ ├── announcing-typescript-3-7-beta.md
│ ├── answering-questions-on-flutter-app-development.md
│ ├── apple-has-no-idea-whats-next-so-it-s-just-banging-on-the-same-old-drum.md
│ ├── applying-styles-based-on-the-user-scroll-position-with-smart-css.md
│ ├── architecting-single-page-applications.md
│ ├── art-direction-for-the-web-using-css-shapes.md
│ ├── articles-website-design-mistakes.md
│ ├── asynchronous-tasks-with-flask-and-redis-queue.md
│ ├── automated-feature-engineering-in-python.md
│ ├── avoiding-the-async-await-hell.md
│ ├── avoiding-those-dang-cannot-read-property-of-undefined-errors.md
│ ├── basic-color-theory-for-web-developers.md
│ ├── beautility-my-ultimate-iphone-setup.md
│ ├── better-stats-for-better-decisions.md
│ ├── beyond-console-log.md
│ ├── birdseye-go.md
│ ├── bitcoin-in-bigquery-blockchain-analytics-on-public-data.md
│ ├── blazingly-fast-parsing-part-1-optimizing-the-scanner.md
│ ├── blazingly-fast-parsing-part-2-lazy-parsing.md
│ ├── blockchain-implementation-with-java-code.md
│ ├── blockchain-platforms-tech-to-watch-in-2019.md
│ ├── boost-your-website-performance-with-phpfastcache.md
│ ├── bottom-navigation-bar-using-provider-flutter.md
│ ├── brief-history-of-http.md
│ ├── btc-history-git.md
│ ├── build-a-blog-using-nuxt-strapi-and-apollo.md
│ ├── build-a-drag-and-drop-dnd-layout-builder-with-react-and-immutablejs.md
│ ├── build-a-state-management-system-with-vanilla-javascript.md
│ ├── build-it-test-it-deliver-it-complete-ios-guide-on-continuous-delivery-with-fastlane-and-jenkins.md
│ ├── build-secure-rest-api-with-node.md
│ ├── build-time-travel-debugging-in-redux-from-scratch.md
│ ├── build-your-own-oauth2-server-in-go.md
│ ├── building-a-cross-platform-mobile-team.md
│ ├── building-a-custom-slider-in-flutter-with-gesturedetector.md
│ ├── building-a-dynamic-tree-diagram-with-svg-and-vue-js.md
│ ├── building-a-successful-app-or-game-business-in-southeast-asia.md
│ ├── building-a-text-editor-for-a-digital-first-newsroom.md
│ ├── building-accessible-websites-and-apps-is-a-moral-obligation.md
│ ├── building-beautiful-flexible-user-interfaces-with-flutter-material-theming-and-official-material.md
│ ├── building-bikesharing-application-open-source-tools.md
│ ├── building-fluid-interfaces-ios-swift.md
│ ├── building-hocs-with-recompose.md
│ ├── building-the-design-ecosystem-of-the-future.md
│ ├── building-type-mode-for-stories-on-ios-and-android.md
│ ├── bye-bye-mongo-hello-postgres.md
│ ├── cache-control-for-civilians.md
│ ├── calls-between-javascript-and-webassembly-are-finally-fast.md
│ ├── camera-enumeration-on-android.md
│ ├── can-machine-learning-model-simple-math-functions.md
│ ├── can-you-console-log-in-jsx.md
│ ├── cant-picture-this-an-analysis-of-image-filtering-on-wechat-moments-1.md
│ ├── cant-picture-this-an-analysis-of-image-filtering-on-wechat-moments-2.md
│ ├── cant-picture-this-an-analysis-of-image-filtering-on-wechat-moments-3.md
│ ├── cant-picture-this-an-analysis-of-image-filtering-on-wechat-moments-4.md
│ ├── ces-learn-css-layout-part-1-flexbox.md
│ ├── chars2vec-character-based-language-model-for-handling-real-world-texts-with-spelling-errors-and.md
│ ├── checking-the-network-connection-with-a-react-hook.md
│ ├── classes-vs-data-structures.md
│ ├── classes-without-classes.md
│ ├── clean-architecture-in-go.md
│ ├── cloud-computing-without-containers.md
│ ├── code-your-own-blockchain-in-less-than-200-lines-of-go.md
│ ├── code-your-own-blockchain-mining-algorithm-in-go.md
│ ├── collection-cognitive-biases-how-to-use-1.md
│ ├── collection-cognitive-biases-how-to-use-2.md
│ ├── collection-cognitive-biases-how-to-use-3.md
│ ├── combine-getting-started.md
│ ├── commit-messages-guide.md
│ ├── comparing-compilers-in-rust-haskell-c-and-python-1.md
│ ├── comparing-compilers-in-rust-haskell-c-and-python-2.md
│ ├── composing-software-an-introduction.md
│ ├── composing-software-the-book.md
│ ├── compromised-npm-package-event-stream.md
│ ├── conditional-rendering-in-react.md
│ ├── connected-cars-what-are-they-and-how-to-get-started-developing-connected-car-apps.md
│ ├── context-api-vs-redux.md
│ ├── control-flow-integrity-in-android-kernel.md
│ ├── converting-your-ios-app-to-android-using-kotlin.md
│ ├── convolutional-layers-for-deep-learning-neural-networks.md
│ ├── coroutines-snags.md
│ ├── courier-dropbox-migration-to-grpc.md
│ ├── crafting-beautiful-ux-with-api-requests.md
│ ├── crafting-reusable-html-templates.md
│ ├── create-a-line-chart-in-swiftui-using-paths.md
│ ├── creating-a-custom-element-from-scratch.md
│ ├── creating-a-graphql-server-with-nodejs.md
│ ├── creating-a-multi-level-hierarchical-flyout-navigation-menu-using-only-html-and-css.md
│ ├── creating-a-simple-recommender-system-in-python-using-pandas.md
│ ├── creating-good-roadmaps-6-practical-steps-product-leaders.md
│ ├── creating-spm-tools-from-your-existing-codebase.md
│ ├── creating-website-sitemap.md
│ ├── creating-with-a-design-system-in-sketch-part-one-tutorial.md
│ ├── creating-with-a-design-system-in-sketch-part-two-tutoria.md
│ ├── cross-stitching-plaid-and-androidx.md
│ ├── css-architecture-for-multiple-websites.md
│ ├── css-pseudo-selectors-you-never-knew-existed.md
│ ├── css-quickies-css-variables-or-how-you-create-a-white-dark-theme-easily.md
│ ├── css-variables-dynamic-app-themes.md
│ ├── curiosity-and-procrastination-in.md
│ ├── current-status-of-python-packaging.md
│ ├── curry-and-function-composition.md
│ ├── custom-encoding-and-decoding-json-in-swift.md
│ ├── dart-features-for-better-code-types-and-working-with-parameters.md
│ ├── data-binding-lessons-learnt.md
│ ├── data-science-and-machine-learning-interview-questions.md
│ ├── data-science-for-startups-introduction.md
│ ├── data-streaming-scalability.md
│ ├── data-streaming.md
│ ├── data-visualization-with-bokeh-in-python-part-ii-interactions.md
│ ├── data-visualization-with-bokeh-in-python-part-iii-a-complete-dashboard.md
│ ├── data-visualization-with-bokeh-in-python-part-one-getting-started.md
│ ├── databook-turning-big-data-into-knowledge-with-metadata-at-uber.md
│ ├── decouple-your-code-with-dependency-injection.md
│ ├── deep-dive-into-react-fiber-internals.md
│ ├── deep-learning-competence.md
│ ├── deep-learning-is-going-to-teach-us-all-the-lesson-of-our-lives-jobs-are-for-machines.md
│ ├── defining-component-apis-in-react.md
│ ├── delightful-animations-in-ios.md
│ ├── dependencies-ios-carthage.md
│ ├── dependency-injection-in-a-multi-module-project.md
│ ├── deploy-not-equal-release-part-one.md
│ ├── deploy-not-equal-release-part-two-2.md
│ ├── deploy-not-equal-release-part-two.md
│ ├── design-is-not-going-to-save-the-world.md
│ ├── design-patterns-in-modern-javascript-development.md
│ ├── design-patterns-on-ios-using-swift-part-1-2.md
│ ├── design-patterns-on-ios-using-swift-part-2-2.md
│ ├── design-types-7d75839a20ea.md
│ ├── designing-for-the-web-ought-to-mean-making-html-and-css.md
│ ├── designing-notifications-for-applications.md
│ ├── designing-search-for-mobile-apps.md
│ ├── designing-sound-and-silence.md
│ ├── designing-very-large-javascript-applications.md
│ ├── developing-a-single-page-app-with-flask-and-vuejs.md
│ ├── developing-games-with-react-redux-and-svg-part-2.md
│ ├── developing-games-with-react-redux-and-svg-part-3.md
│ ├── differentiable-plasticity.md
│ ├── discovery-in-the-age-of-abundant-video.md
│ ├── distributed-transactions-in-spring-with-and-without-xa-part-1.md
│ ├── distributed-transactions-in-spring-with-and-without-xa-part-2.md
│ ├── distributed-transactions-in-spring-with-and-without-xa-part-3.md
│ ├── dns-over-tls.md
│ ├── dns-servers-you-should-have-memorized.md
│ ├── do-you-know-about-the-keyboard-tag-in-html.md
│ ├── dont-call-me-i-ll-call-you-side-effects-management-with-redux-saga-part-1.md
│ ├── double-stuffed-security-in-android-oreo.md
│ ├── draw-a-path-rendering-android-vectordrawables.md
│ ├── dynamic-features-in-swift.md
│ ├── easy-coroutines-in-android-viewmodelscope.md
│ ├── easy-responsive-modern-css-grid-layout.md
│ ├── ecmascript-classes-keeping-things-private.md
│ ├── edge-detection-in-python.md
│ ├── effective-bloc-pattern.md
│ ├── effective-code-review.md
│ ├── elements-of-javascript-style.md
│ ├── elixir-phoenix-absinthe-graphql-react-apollo-absurdly-deep-dive-1.md
│ ├── elixir-phoenix-absinthe-graphql-react-apollo-absurdly-deep-dive-2.md
│ ├── enabling-modern-js-on-npm.md
│ ├── encapsulating-style-and-structure-with-shadow-dom.md
│ ├── energy-sector-now-on-blockchain-based-cryptocurrency.md
│ ├── engineering-to-improve-marketing-effectiveness-part-1.md
│ ├── enough-to-decide.md
│ ├── ensemble-learning-to-improve-machine-learning-results.md
│ ├── envion-a-name-of-mining-in-block-chain-to-support-renewable-energy.md
│ ├── es-modules-a-cartoon-deep-dive.md
│ ├── es6-and-npm-modules-in-google-apps-script.md
│ ├── es6-notes-default-values-of-parameters.md
│ ├── ethereum-bitcoin-explainer.md
│ ├── ethereumbook-wallets.md
│ ├── eval-via-import.md
│ ├── event-stoppropagation-in-a-modular-system.md
│ ├── every-single-machine-learning-course-on-the-internet-ranked-by-your-reviews.md
│ ├── everything-you-need-to-know-about-change-detection-in-angular.md
│ ├── everything-you-need-to-know-about-flutter-page-route-transition.md
│ ├── everything-you-need-to-know-about-javascript-symbols.md
│ ├── examining-performance-differences-between-native-flutter-and-react-native-mobile-development.md
│ ├── exploratory-statistical-data-analysis-with-a-kaggle-dataset-using-pandas.md
│ ├── exploring-apps-without-jailbreaking.md
│ ├── expressive-code-for-state-machines-in-cpp.md
│ ├── extracting-insights-from-a-kaggle-dataset-using-pythons-pandas-and-seaborn.md
│ ├── extreme-rare-event-classification-using-autoencoders-in-keras.md
│ ├── eye-tracking-and-the-best-ux-practices-in-the-mobile-world.md
│ ├── fast-pipelines-with-generators-in-typescript.md
│ ├── find-top-10-meaningful-web-design-trends-in-2020.md
│ ├── five-options-for-ios-continuous-delivery-without-fastlane.md
│ ├── fixing-memory-leaks-in-web-applications.md
│ ├── flask-video-streaming-revisited.md
│ ├── flexbox-alignment.md
│ ├── flexbox-display-flex-container.md
│ ├── flutter-challenge-twitter.md
│ ├── flutter-challenge-whatsapp.md
│ ├── flutter-challenge-youtube.md
│ ├── flutter-deep-dive-gestures.md
│ ├── flutter-for-android-developers-how-to-design-linearlayout-in-flutter.md
│ ├── flutter-getting-started-tutorial-5-grid.md
│ ├── flutter-heroes-and-villains-bringing-balance-to-the-flutterverse.md
│ ├── flutter-infinite-listview-with-redux.md
│ ├── flutter-layout-cheat-sheet.md
│ ├── flutter-state-management-setstate-bloc-valuenotifier-provider.md
│ ├── flutter_go.md
│ ├── focus-and-deep-work-your-secret-weapons-to-becoming-a-10x-developer.md
│ ├── font-size-an-unexpectedly-complex-css-property.md
│ ├── fountaincodes.md
│ ├── four-ways-to-quantify-synchrony-between-time-series-data.md
│ ├── front-end-performance-checklist-2019-pdf-pages-1.md
│ ├── front-end-performance-checklist-2019-pdf-pages-2.md
│ ├── front-end-performance-checklist-2019-pdf-pages-3.md
│ ├── front-end-performance-checklist-2019-pdf-pages-4.md
│ ├── front-end-performance-checklist-2019-pdf-pages-5.md
│ ├── front-end-performance-checklist-2019-pdf-pages-6.md
│ ├── frontend-vs-backend-which-one-is-right-for-you.md
│ ├── funding-eslint-future.md
│ ├── future-of-web-design.md
│ ├── futures-isolates-event-loop.md
│ ├── generator-functions-in-javascript.md
│ ├── gentle-introduction-multithreading.md
│ ├── getting-creative-with-the-console-api.md
│ ├── getting-started-with-c-and-android-native-activities.md
│ ├── getting-started-with-differentialequations-jl.md
│ ├── getting-the-most-from-the-new-multi-camera-api.md
│ ├── git-aliases-i-cant-live-without.md
│ ├── git-aliases.md
│ ├── go-graphql-gateway-microservices.md
│ ├── golang-datastructures-trees.md
│ ├── good-coding-practices-tips-enhance-code-quality.md
│ ├── good-practices-for-high-performance-and-scalable-node-js-applications-part-1-3.md
│ ├── good-practices-for-high-performance-and-scalable-node-js-applications-part-2-3.md
│ ├── good-practices-for-high-performance-and-scalable-node-js-applications-part-3-3.md
│ ├── goodbye-clean-code.md
│ ├── google-advanced-search-operators.md
│ ├── google-chrome-kill-url-first-steps.md
│ ├── google-colab-free-gpu-tutorial.md
│ ├── google-i-o-2018-for-android-updated-w-more-detailed-map-navigation-assistant-action.md
│ ├── google-santa-tracker-moving-to-an-android-app-bundle.md
│ ├── googles-ml-kit-offers-easy-machine-learning-apis-for-android-and-ios.md
│ ├── gophercon-2018-binary-search-tree-algorithms.md
│ ├── graphql-a-retrospective.md
│ ├── graphql-server-design-medium.md
│ ├── great-design-vs-good-design-whats-the-difference-here-s-the-truth.md
│ ├── guide-node-js-logging.md
│ ├── gunicorn-3-means-of-concurrency.md
│ ├── headers-we-dont-want.md
│ ├── headless-user-interface-components.md
│ ├── heuristic-principles-for-mobile-interfaces.md
│ ├── high-speed-inserts-with-mysql.md
│ ├── history-of-go-testing.md
│ ├── history-of-javascript.md
│ ├── homepod-12-wish-list.md
│ ├── hooks-intro.md
│ ├── how-airbnb-proved-that-storytelling-is-the-most-important-skill-in-design.md
│ ├── how-apple-beat-swiss-watchmakers-at-their-own-game.md
│ ├── how-apple-can-fix-3d-touch.md
│ ├── how-blockchain-can-help-re-invent-healthcare.md
│ ├── how-building-a-design-system-empowers-your-team-to-focus-on-people-not-pixels.md
│ ├── how-can-a-designer-become-a-leader.md
│ ├── how-can-cloud-services-help-improve-your-businessess-efficiency.md
│ ├── how-data-sharding-works-in-a-distributed-sql-database.md
│ ├── how-discord-renders-rich-messages-on-the-android-app.md
│ ├── how-do-you-figure.md
│ ├── how-does-react-tell-a-class-from-a-function.md
│ ├── how-does-the-development-mode-work.md
│ ├── how-fast-is-flutter-i-built-a-stopwatch-app-to-find-out.md
│ ├── how-i-automated-my-job-with-node-js.md
│ ├── how-i-built-a-web-crawler-to-automate-my-job-search.md
│ ├── how-i-built-an-async-form-validation-library-in-100-lines-of-code-with-react-hooks.md
│ ├── how-i-finally-got-my-head-around-scoped-slots-in-vue.md
│ ├── how-i-fixed-a-very-old-gil-race-condition-in-python-3-7.md
│ ├── how-i-landed-a-job-in-ux-design-at-google.md
│ ├── how-i-used-python-to-find-interesting-people-on-medium.md
│ ├── how-javascript-works-a-comparison-with-webassembly-why-in-certain-cases-its-better-to-use-it.md
│ ├── how-javascript-works-inside-the-networking-layer-how-to-optimize-its-performance-and-security.md
│ ├── how-javascript-works-service-workers-their-life-cycle-and-use-cases.md
│ ├── how-javascript-works-the-mechanics-of-web-push-notifications.md
│ ├── how-javascript-works-the-rendering-engine-and-tips-to-optimize-its-performance.md
│ ├── how-javascript-works-tracking-changes-in-the-dom-using-mutationobserver.md
│ ├── how-javascript-works-under-the-hood-of-css-and-js-animations-how-to-optimize-their-performance.md
│ ├── how-not-to-vue.md
│ ├── how-pagespeed-works.md
│ ├── how-to-avoid-opinion-based-product-prioritization.md
│ ├── how-to-avoid-these-7-mistakes-i-made-as-a-junior-developer.md
│ ├── how-to-be-a-good-remote-developer.md
│ ├── how-to-become-a-devops-engineer-in-six-months-or-less-part-2-configure.md
│ ├── how-to-become-a-devops-engineer-in-six-months-or-less-part-3-version.md
│ ├── how-to-become-a-devops-engineer-in-six-months-or-less-part-4-package.md
│ ├── how-to-become-a-devops-engineer-in-six-months-or-less.md
│ ├── how-to-build-a-blog-with-nest-js-mongodb-and-vue-js.md
│ ├── how-to-build-a-circular-slider-in-flutter.md
│ ├── how-to-build-a-cli-with-node-js.md
│ ├── how-to-build-a-delightful-loading-screen-in-5-minutes.md
│ ├── how-to-build-a-simple-chrome-extension-in-vanilla-javascript.md
│ ├── how-to-build-a-simple-game-in-the-browser-with-phaser-3-and-typescript.md
│ ├── how-to-build-ios-mobile-group-chat-app-swift-5-pubnub.md
│ ├── how-to-build-minesweeper-with-javascript.md
│ ├── how-to-build-your-own-neural-network-from-scratch-in-python.md
│ ├── how-to-choose-the-best-static-site-generator-in-2018.md
│ ├── how-to-choose-the-right-database.md
│ ├── how-to-conditionally-build-an-object-in-javascript-with-es6.md
│ ├── how-to-configure-image-data-augmentation-when-training-deep-learning-neural-networks.md
│ ├── how-to-connect-stackdriver-to-your-smart-home-server-for-error-logging.md
│ ├── how-to-deal-with-dirty-side-effects-in-your-pure-functional-javascript.md
│ ├── how-to-debug-front-end-optimising-network-assets.md
│ ├── how-to-design-delightful-dark-themes.md
│ ├── how-to-develop-a-generative-adversarial-network-for-a-1-dimensional-function-from-scratch-in-keras.md
│ ├── how-to-develop-react-js-apps-fast-using-webpack-4.md
│ ├── how-to-easily-detect-objects-with-deep-learning-on-raspberrypi.md
│ ├── how-to-fix-app-quality-issues-with-android-vitals-and-improve-performance-on-the-play-store-part.md
│ ├── how-to-format-dates-in-python.md
│ ├── how-to-gain-widespread-adoption-of-your-design-system.md
│ ├── how-to-generate-music-using-a-lstm-neural-network-in-keras.md
│ ├── how-to-get-a-progressive-web-app-into-the-google-play-store.md
│ ├── how-to-implement-consistent-hashing-efficiently.md
│ ├── how-to-improve-your-data-structures-algorithms-and-problem-solving-skills.md
│ ├── how-to-keep-your-dependencies-secure-and-up-to-date.md
│ ├── how-to-learn-css.md
│ ├── how-to-make-a-beautiful-tiny-npm-package-and-publish-it.md
│ ├── how-to-mock-services-using-mountebank-and-node-js.md
│ ├── how-to-not-react-common-anti-patterns-and-gotchas-in-react.md
│ ├── how-to-optimize-your-app-for-android-go-edition.md
│ ├── how-to-organize-a-hacktoberfest-themed-meetup.md
│ ├── how-to-perform-object-detection-with-yolov3-in-keras.md
│ ├── how-to-prioritize-your-teams-work.md
│ ├── how-to-react-native-web-app-a-happy-struggle.md
│ ├── how-to-read-source-code-without-ripping-your-hair-out.md
│ ├── how-to-rewrite-your-sql-queries-in-pandas-and-more.md
│ ├── how-to-save-ui-designers-front-end-developers-up-to-50-of-their-time.md
│ ├── how-to-scrape-websites-with-python-and-beautifulsoup.md
│ ├── how-to-simplify-your-design.md
│ ├── how-to-think-like-a-programmer-lessons-in-problem-solving.md
│ ├── how-to-train-an-object-detection-model-with-keras.md
│ ├── how-to-use-flutter-to-build-an-app-with-bottom-navigation.md
│ ├── how-to-use-result-in-swift.md
│ ├── how-to-use-tensorflow-mobile-in-android-apps.md
│ ├── how-to-watch-flutter-at-google-i-o-2018.md
│ ├── how-to-win-back-subscribers-who-cancel.md
│ ├── how-to-write-a-discord-bot-in-python.md
│ ├── how-to-write-a-front-end-developer-resume-that-will-land-you-an-interview.md
│ ├── how-to-write-a-function-pycon-2018.md
│ ├── how-to-write-a-production-level-code-in-data-science.md
│ ├── how-to-write-beautiful-and-meaningful-readme-md-for-your-next-project.md
│ ├── how-to-write-better-code-in-react-best-practices.md
│ ├── how-to-write-video-chat-app-using-webrtc-and-nodejs.md
│ ├── how-we-built-the-fastest-conference-website-in-the-world.md
│ ├── how-we-ditched-redux-for-mobx.md
│ ├── how-we-made-carousells-mobile-web-experience-3x-faster.md
│ ├── how-writing-simple-javascript-got-us-6200-github-stars-in-a-single-day.md
│ ├── how-you-can-use-simple-trigonometry-to-create-better-loaders.md
│ ├── how_to_prep_your_github_for_job_seeking.md
│ ├── html-is-and-always-was-a-compilation-target-can-we-deal-with-that.md
│ ├── http-2-frequently-asked-questions.md
│ ├── http-3-from-root-to-tip.md
│ ├── http-security-headers-a-complete-guide.md
│ ├── http2-causalprof.md
│ ├── https-medium-com-netflixtechblog-engineering-to-improve-marketing-effectiveness-part-2.md
│ ├── hyphenation-in-css.md
│ ├── i-built-an-app-that-uses-all-7-new-features-in-javascript-es2020.md
│ ├── i-built-tic-tac-toe-with-javascript.md
│ ├── i-created-the-exact-same-app-in-react-and-vue-here-are-the-differences.md
│ ├── i-dont-hate-arrow-functions.md
│ ├── i-worked-with-a-data-scientist-heres-what-i-learned.md
│ ├── iOS-Responder-Chain-UIResponder-UIEvent-UIControl-and-uses.md
│ ├── idle-until-urgent.md
│ ├── if-screen-product-designers-designed-physical-products.md
│ ├── image-inpainting-humans-vs-ai.md
│ ├── image-manipulation-libraries-for-javascript.md
│ ├── imaginary-problems.md
│ ├── immutability-in-react-theres-nothing-wrong-with-mutating-objects.md
│ ├── immutable-data-with-immer-and-react-setstate.md
│ ├── implement-a-design-with-css.md
│ ├── implement-google-inbox-style-animation-on-android.md
│ ├── implementing-linkedpurchasetoken-correctly-to-prevent-duplicate-subscriptions.md
│ ├── implementing-seam-carving-with-python.md
│ ├── implementing-svm-and-kernel-svm-with-pythons-scikit-learn.md
│ ├── improving-app-performance-with-art-optimizing-profiles-in-the-cloud.md
│ ├── improving-build-speed-in-android-studio.md
│ ├── in-defense-of-the-ternary-statement.md
│ ├── in-unix-everything-is-a-file.md
│ ├── inclusively-hidden.md
│ ├── increase-your-apps-performance-with-react-hooks-and-the-react-dev-tools.md
│ ├── inside-browser-part2.md
│ ├── inside-browser-part3.md
│ ├── inside-browser-part4.md
│ ├── inside-fiber-in-depth-overview-of-the-new-reconciliation-algorithm-in-react.md
│ ├── inside-look-at-modern-web-browser-part1.md
│ ├── integrating-third-party-animation-libraries-to-a-project-1.md
│ ├── integrating-third-party-animation-libraries-to-a-project-2.md
│ ├── interesting-ecmascript-2017-proposals.md
│ ├── intermediate-design-patterns-in-swift.md
│ ├── interpreting-predictive-models-with-skater-unboxing-model-opacity.md
│ ├── introducing-aloestackview-for-ios.md
│ ├── introducing-constraint-layout-1-1.md
│ ├── introducing-flutter-widget-maker-a-flutter-app-builder-written-in-flutter.md
│ ├── introducing-github-actions.md
│ ├── introducing-new-android-excellence-apps.md
│ ├── introducing-spaceace-a-new-kind-of-front-end-state-library.md
│ ├── introducing-the-react-profiler.md
│ ├── introducing-the-single-element-pattern.md
│ ├── introducing-workmanager.md
│ ├── introduction-source-maps.md
│ ├── introduction-to-1d-convolutional-neural-networks-in-keras-for-time-sequences.md
│ ├── introduction-to-accessibility-for-android-apps-and-games.md
│ ├── introduction-to-ethereum-the-internets-government.md
│ ├── introduction-to-graph-theory-network-analysis-python-codes.md
│ ├── ios-12-now-installed-on-50-of-devices-outpacing-ios-11.md
│ ├── ios-file-provider-extension-tutorial.md
│ ├── ios-how-to-build-a-table-view-with-multiple-cell-types.md
│ ├── ios-performance-tricks-apps.md
│ ├── is-no-sql-killing-sql.md
│ ├── is-postmessage-slow.md
│ ├── is-your-rest-api-ready-for-deployment-7-questions-to-help-you-decide.md
│ ├── its-2019-and-i-still-make-websites-with-my-bare-hands.md
│ ├── its-the-future.md
│ ├── j-introducing-junit5-part1-jupiter-api.md
│ ├── j-javaee8-security-api-1.md
│ ├── j-javaee8-security-api-2.md
│ ├── j-javaee8-security-api-3.md
│ ├── j-javaee8-security-api-4.md
│ ├── java-and-etcd-together-at-last-with-jetcd.md
│ ├── java-bridge-methods-explained.md
│ ├── java-data-streaming.md
│ ├── java-service-loader-vs-spring-factories-loader.md
│ ├── javascript-array-push-is-945x-faster-than-array-concat.md
│ ├── javascript-call-apply-and-bind.md
│ ├── javascript-clean-code-best-practices.md
│ ├── javascript-generator-yield-next-async-await.md
│ ├── javascript-knowledge-reading-source-code.md
│ ├── javascript-native-methods-you-may-not-know.md
│ ├── javascript-symbols-but-why.md
│ ├── javascript-top-level-await-in-a-nutshell.md
│ ├── javascript-unit-testing-frameworks.md
│ ├── javascripts-filter-function-explained-by-applying-to-college.md
│ ├── joining-data-streams.md
│ ├── json-parser-with-javascript.md
│ ├── jupyter-notebook-tutorial.md
│ ├── kafka-vs-rabbitmq-why-use-kafka.md
│ ├── keeping-git-commit-history-clean.md
│ ├── keeping-up-with-ai-in-2019.md
│ ├── keras-cheat-sheet.md
│ ├── keras-generative-adversarial-networks-image-deblurring.md
│ ├── keyword-arguments-in-python.md
│ ├── killing-a-process-and-all-of-its-descendants.md
│ ├── kotlin-clean-architecture.md
│ ├── kotlin-demystified-understanding-shorthand-lamba-syntax.md
│ ├── kotlin-standard-functions-cheat-sheet.md
│ ├── kubernetes-distributed-application.md
│ ├── larder-links-06-iOS-Auto-Layout-DSLs.md
│ ├── launching-the-front-end-tooling-survey-2019.md
│ ├── layouts-of-tomorrow.md
│ ├── lazy-loading-video-based-on-connection-speed.md
│ ├── lazy-sequences-in-swift-and-how-they-work.md
│ ├── lazy-var-in-ios-swift.md
│ ├── learn-bootstrap-4-in-30-minute-by-building-a-landing-page-website-guide-for-beginners.md
│ ├── learn-enough-docker-to-be-useful-1.md
│ ├── learn-git-concepts-not-commands-1.md
│ ├── learn-git-concepts-not-commands-2.md
│ ├── learn-git-concepts-not-commands-3.md
│ ├── learn-to-cache-your-nodejs-application-with-redis-in-6-minutes.md
│ ├── learning-gos-concurrency-through-illustrations.md
│ ├── learning-parser-combinators-with-rust-1.md
│ ├── learning-parser-combinators-with-rust-2.md
│ ├── learning-parser-combinators-with-rust-3.md
│ ├── learning-parser-combinators-with-rust-4.md
│ ├── lenses-composable-getters-and-setterssfor-functional-programming.md
│ ├── lessons-learned-at-instagram-stories-and-feed-machine-learning.md
│ ├── lets-settle-this-part-one.md
│ ├── lets-settle-this-part-two.md
│ ├── lets-simplify-the-work-with-userdefaults.md
│ ├── lets-talk-js-documentation.md
│ ├── levels-of-seniority.md
│ ├── linear-algebra-animating-linear-transformations-with-threejs.md
│ ├── linear-algebra-basic-matrix-operations.md
│ ├── linear-algebra-for-deep-learning.md
│ ├── linear-algebra-linear-transformation-matrix.md
│ ├── linear-algebra-vectors.md
│ ├── listeners-several-functions-kotlin.md
│ ├── livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case.md
│ ├── loaders-in-support-library-27-1-0.md
│ ├── locale-changes-and-the-androidviewmodel-antipattern.md
│ ├── localize-swift-application.md
│ ├── logging-activity-web-beacon-api.md
│ ├── logistic-regression-on-mnist-with-pytorch.md
│ ├── longest-keyword-sequence.md
│ ├── love-js-hate-css.md
│ ├── lru-cache.md
│ ├── machine-learning-for-diabetes-with-python.md
│ ├── magic-numbers-are-not-that-magic.md
│ ├── maintainable-etls.md
│ ├── make-3d-flip-animation-in-flutter.md
│ ├── make-shimmer-effect-in-flutter.md
│ ├── making-a-todo-app-with-flutter.md
│ ├── making-logs-colorful-in-nodejs.md
│ ├── making-sense-of-react-hooks.md
│ ├── making-svg-icon-component-in-vue.md
│ ├── making-the-uamp-sample-an-instant-app.md
│ ├── making-webassembly-even-faster-firefoxs-new-streaming-and-tiering-compiler.md
│ ├── manage-different-environments-in-your-swift-project-with-ease.md
│ ├── markov-chains-python-tutorial.md
│ ├── master-the-javascript-interview-what-is-a-pure-function.md
│ ├── master-the-javascript-interview-what-is-functional-programming.md
│ ├── mastering-javascript-this-keyword-detailed-guide.md
│ ├── mathematical-programming-a-key-habit-to-built-up-for-advancing-in-data-science.md
│ ├── maybe-you-dont-need-rust-to-speed-up-your-js-1.md
│ ├── maybe-you-dont-need-rust-to-speed-up-your-js-2.md
│ ├── mdc-101-flutter.md
│ ├── mdc-102-flutter.md
│ ├── mdc-103-flutter.md
│ ├── mdc-104-flutter.md
│ ├── memory-leaks-in-swift.md
│ ├── micro-design-systems-breaking-the-monolith.md
│ ├── micro-frontends-1.md
│ ├── micro-frontends-2.md
│ ├── micro-frontends-3.md
│ ├── micro-frontends-4.md
│ ├── millions-of-active-websockets-with-node-js.md
│ ├── minimize-for-loop-usage-in-python.md
│ ├── mistakes-weve-drawn-a-few.md
│ ├── misunderstanding-es6-modules-upgrading-babel-tears-and-a-solution.md
│ ├── ml-kit-tutorial-for-ios-recognizing-text-in-images.md
│ ├── mobile-apps-capacitor-vue-js.md
│ ├── modern-script-loading.md
│ ├── more-reasons-why-developers-should-blog.md
│ ├── mosby3-mvi-7.md
│ ├── motion-design-doesnt-have-to-be-hard.md
│ ├── moving-to-three-person-engineering-teams.md
│ ├── mvc-mvp-mvvm-clean-viper-redux-mvi-prnsaaspfruicc-building-abstractions-for-the-sake-of-building.md
│ ├── mvp-for-android.md
│ ├── mvvm-rxswift-on-ios-part-1.md
│ ├── my-personal-git-tricks-cheatsheet.md
│ ├── naive-bayes-classifier-sklearn-python-example-tips.md
│ ├── native-image-lazy-loading-for-the-web.md
│ ├── native-web-components.md
│ ├── natural-language-processing-is-fun.md
│ ├── nestjs-basic-auth-and-sessions.md
│ ├── new-node-js-features.md
│ ├── next-generation-package-management.md
│ ├── node-js-can-http-2-push.md
│ ├── nodejs-express-api-markdown-html.md
│ ├── nodejs-jwt-authentication-oauth.md
│ ├── normalization-vs-standardization-quantitative-analysis.md
│ ├── object-detection-metrics.md
│ ├── offline-first.md
│ ├── offline-graphql-queries-with-redux-offline-and-apollo.md
│ ├── on-engineers-and-influence.md
│ ├── one-year-with-flutter-my-experience.md
│ ├── open-source-doesnt-make-money-by-design.md
│ ├── operating-a-high-scale-distributed-system.md
│ ├── optimal-control-lqr.md
│ ├── optimize-enterprise-scale-node-js.md
│ ├── optimizing-a-static-site.md
│ ├── optimizing-mp4-video-for-fast-streaming.md
│ ├── optimizing-webpack-for-faster-react-builds.md
│ ├── our-learnings-from-adopting-graphql.md
│ ├── out-of-depth-with-flutter.md
│ ├── oxidizing-source-maps-with-rust-and-webassembly.md
│ ├── pandas-dtypes.md
│ ├── parallel-streaming-of-progressive-images.md
│ ├── parsing-complex-json-in-flutter.md
│ ├── parsing-drugbank-xml-or-any-large-xml-file-in-streaming-mode-in-go.md
│ ├── part-of-speech-tagging-tutorial-with-the-keras-deep-learning-library.md
│ ├── password-hashing-pbkdf2-scrypt-bcrypt-and-argon2.md
│ ├── password-reset-emails-in-your-react-app-made-easy-with-nodemailer.md
│ ├── patterns-generic-repository-with-typescript-and-node-js.md
│ ├── performance-under-load.md
│ ├── performant-javascript-best-practices.md
│ ├── picking-apart-stackoverflow-what-bugs-developers-the-most.md
│ ├── pika-web-a-future-without-webpack.md
│ ├── plain-javascript-versions-of-lodash-array-filtering-and-manipulation-methods.md
│ ├── planning-for-responsive-images.md
│ ├── platforms-and-languages.md
│ ├── playground-driven-development-in-swift.md
│ ├── pluggable-slots-in-react-components.md
│ ├── polymorphic-react-components.md
│ ├── practical-flutter-my-personal-6-tips-for-newcomers.md
│ ├── practical-mvvm-rxswift.md
│ ├── practical-proguard-rules-examples.md
│ ├── practical-rxjs-in-the-wild-requests-with-concatmap-vs-mergemap-vs-forkjoin.md
│ ├── predicting-your-games-monetization-future.md
│ ├── pro-pattern-matching-in-swift.md
│ ├── product-management-mental-models-for-everyone.md
│ ├── project-worlds-achieving-god-mode-in-digital-design.md
│ ├── promoting-install-mobile.md
│ ├── protected-routes-and-authentication-with-react-and-node-js.md
│ ├── protecting-a-spring-boot-app-with-apache-shiro.md
│ ├── protecting-users-with-tls-by-default-in.md
│ ├── protecting-webview-with-safe-browsing.md
│ ├── prototyping-animations-in-swift.md
│ ├── providing-safe-and-secure-experience.md
│ ├── publishing-machine-learning-api-with-python-flask.md
│ ├── publishing-private-apps-just-got-easier.md
│ ├── pwa-native-mobile-apps.md
│ ├── python-architecture-stuff-do-we-need-more.md
│ ├── python-big-data-airflow-jupyter-notebook-hadoop-3-hive-presto.md
│ ├── python-data-cleaning-numpy-pandas.md
│ ├── python-libraries-for-data-science-other-than-pandas-and-numpy.md
│ ├── python-multithreading-vs-multiprocessing.md
│ ├── rage-against-the-codebase-programmers-and-negativity.md
│ ├── react-16-lifecycle-methods-how-and-when-to-use-them.md
│ ├── react-for-linear-algebra-examples-grid-and-arrows.md
│ ├── react-higher-order-components.md
│ ├── react-hooks-not-magic-just-arrays.md
│ ├── react-inline-functions-and-performance.md
│ ├── react-native-a-retrospective-from-the-mobile-engineering-team-at-udacity.md
│ ├── react-native-at-airbnb-the-technology.md
│ ├── react-native-at-airbnb.md
│ ├── react-native-bridge-for-ios-and-android.md
│ ├── react-native-vs-flutter-which-is-more-startup-friendly.md
│ ├── react-svg-icon-components.md
│ ├── reactive-app-state-in-flutter.md
│ ├── real-time-human-pose-estimation-in-the-browser-with-tensorflow-js.md
│ ├── real-world-dynamic-programming-seam-carving.md
│ ├── recommendation-woff-2012-12-13.md
│ ├── redefining-data-visualization-at-google.md
│ ├── reducing-dimensionality-from-dimensionality-reduction-techniques.md
│ ├── redux-tutorial.md
│ ├── regex-was-taking-5-days-flashtext-does-it-in-15-minutes.md
│ ├── rel-noopener.md
│ ├── representing-music-with-word2vec.md
│ ├── responsive-design-ground-rules.md
│ ├── retries-timeouts-backoff.md
│ ├── reverse-engineering-how-you-can-build-a-test-library.md
│ ├── room-coroutines.md
│ ├── rules-for-autocomplete.md
│ ├── running-flask-with-an-ssh-remote-python-interpreter.md
│ ├── running-jupyter-notebooks-on-remote-servers.md
│ ├── running-uitests-with-facebook-login-in-ios.md
│ ├── rust-2018-is-here-but-what-is-it.md
│ ├── rust-case-study-community-makes-rust-an-easy-choice-for-npm.md
│ ├── scarcity-in-ux-the-psychological-bias-that-became-the-norm.md
│ ├── scheduling-in-react.md
│ ├── scrolling-and-attention.md
│ ├── secrets-of-a-wsgi-master-pycon-2018.md
│ ├── self-host-your-static-assets.md
│ ├── semantic-segmentation-u-net-part-1.md
│ ├── sending-web-push-notifications-from-node-js.md
│ ├── separation-of-data-and-ui-in-your-web-app.md
│ ├── serverless-api-with-go-and-aws-lambda.md
│ ├── serverless-machine-learning-with-tensorflow-dot-js.md
│ ├── sharing-databases-between-laravel-applications.md
│ ├── shine-a-light-on-javascript-performance-with-lighthouse-1opf.md
│ ├── should-you-learn-vim-as-a-developer-in-2020.md
│ ├── simple-mailer-with-django.md
│ ├── sketch-plugins-i-cant-live-without.md
│ ├── slidable-a-flutter-story.md
│ ├── slide-an-image-to-reveal-text-with-css-animations.md
│ ├── sliding-in-and-out-of-vue-js.md
│ ├── smacss-scalable-modular-architecture-css.md
│ ├── small-websites-are-dying.md
│ ├── software-below-the-poverty-line.md
│ ├── software-roles-and-titles.md
│ ├── solving-the-graph-theory-expenses-management.md
│ ├── some-notes-about-http3.md
│ ├── sorting-algorithms-in-python.md
│ ├── spantastic-text-styling-with-spans.md
│ ├── speech-recognition-deepspeech.md
│ ├── speech-voice-translation-microsoft-dr.md
│ ├── start-performance-budgeting.md
│ ├── state-restoration-tutorial-getting-started.md
│ ├── static-properties-in-javascript-with-inheritance.md
│ ├── stop-using-default-exports-javascript-module.md
│ ├── stop-using-everywhere.md
│ ├── stopping-using-console-log-and-start-using-your-browsers-debugger.md
│ ├── streams-for-the-win-a-performance-comparison-of-nodejs-methods-for-reading-large-datasets-pt-2.md
│ ├── structuring-your-ios-app-for-split-testing.md
│ ├── styled-components-magic-explained.md
│ ├── styling-html-checkboxes-is-hard-heres-why.md
│ ├── styling-modern-web-apps.md
│ ├── subscriptions-101-for-android-apps.md
│ ├── sunsetting-react-native.md
│ ├── supercharging-your-app-development-speed-with-custom-file-templates.md
│ ├── support-vector-machines-tutorial.md
│ ├── survival-guide-for-new-developers.md
│ ├── swift-5-exclusivity.md
│ ├── swift-5-frozen-enums.md
│ ├── swift-api-pollution.md
│ ├── swift-avoiding-memory-leaks-by-examples.md
│ ├── swift-code-formatters.md
│ ├── swiftui-3d-scroll-effect.md
│ ├── swiftui-animating-color-changes.md
│ ├── swiftwebui.md
│ ├── syslog-the-complete-system-administrator-guide.md
│ ├── tab-bars-are-the-new-hamburger-menus.md
│ ├── talking-django-async-pycon-2018.md
│ ├── ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist.md
│ ├── ten-things-you-didnt-know-about-webpagetest-org.md
│ ├── testing-react-apps-with-cypress.md
│ ├── testing-your-react-app-with-puppeteer-and-jest.md
│ ├── the-10-statistical-techniques-data-scientists-need-to-master.md
│ ├── the-4-types-of-why-what-is-the-driving-force-behind-your-product.md
│ ├── the-4px-baseline-grid-the-present.md
│ ├── the-6-most-desirable-coding-jobs-and-the-types-of-people-drawn-to-each.md
│ ├── the-7-programming-languages-frameworks-to-learn-in-2020.md
│ ├── the-80-20-guide-to-json-stringify-in-javascript.md
│ ├── the-9-big-design-trends-of-2019.md
│ ├── the-absolute-easiest-way-to-debug-node-js-with-vscode.md
│ ├── the-algorithm-is-not-the-product.md
│ ├── the-anatomy-of-a-frame.md
│ ├── the-android-dev-summit-2018-app-instant-app-takeaways-open-source.md
│ ├── the-art-of-system-performance-for-engineers.md
│ ├── the-beginners-guide-to-contributing-to-a-github-project.md
│ ├── the-best-database-as-a-service-solutions-of-2018.md
│ ├── the-best-explanation-of-javascript-reactivity.md
│ ├── the-c10k-problem.md
│ ├── the-childrens-illustrated-guide-to-kubernetes.md
│ ├── the-concepts-of-graphql.md
│ ├── the-cost-of-javascript-in-2018.md
│ ├── the-css-mindset.md
│ ├── the-dao-of-immutability.md
│ ├── the-definitive-guide-to-javascript-dates.md
│ ├── the-design-system-decision-tree.md
│ ├── the-economics-of-package-management-1.md
│ ├── the-economics-of-package-management-2.md
│ ├── the-evolution-of-the-design-from-ux-towards-personal-experience.md
│ ├── the-fallacy-of-easy.md
│ ├── the-forbidden-inline-attribute-in-swift.md
│ ├── the-forgotten-history-of-oop.md
│ ├── the-future-of-digital-product-design-is-about-human-empowerment.md
│ ├── the-importance-of-design-qa-in-digital-product-design.md
│ ├── the-importance-of-why-docs.md
│ ├── the-introverts-guide-to-professional-development.md
│ ├── the-javascript-developers-intro-to-crypto.md
│ ├── the-love-hate-relationship-between-react-router-and-react-components.md
│ ├── the-many-ways-to-include-css-in-javascript-applications.md
│ ├── the-mistakes-i-made-as-a-beginner-programmer.md
│ ├── the-most-famous-data-visualisation-ever-and-what-we-can-learn-from-it.md
│ ├── the-most-uncommon-html5-tags.md
│ ├── the-open-source-conundrum-how-do-we-keep-the-lights-on.md
│ ├── the-open-source-project-nginx.md
│ ├── the-perfect-javascript-unit-test.md
│ ├── the-problem-with-web-components.md
│ ├── the-publisher-subscriber-pattern-in-javascript.md
│ ├── the-react-state-museum.md
│ ├── the-ripple-effect-expanding-our-icon-design-system.md
│ ├── the-rise-of-the-meta-designer.md
│ ├── the-role-of-mobile-technology-in-improving-financial-health.md
│ ├── the-simple-guide-to-server-side-rendering-react-with-styled-components.md
│ ├── the-smart-ways-to-correct-mistakes-in-git.md
│ ├── the-state-of-fluid-web-typography.md
│ ├── the-state-of-graphql-by-reddit.md
│ ├── the-state-of-web-browsers-2019-edition.md
│ ├── the-state-of-web-browsers.md
│ ├── the-story-of-css-grid-from-its-creators.md
│ ├── the-trick-to-animating-the-dot-on-the-letter-i.md
│ ├── the-typescript-tax.md
│ ├── the-zen-of-erlang-1.md
│ ├── the-zen-of-erlang-2.md
│ ├── things-about-react-native-i-found-the-hard-but-rewarding-way.md
│ ├── things-nobody-ever-taught-me-about-css.md
│ ├── this-is-how-to-plan-a-day.md
│ ├── this-is-why-we-need-to-bind-event-handlers-in-class-components-in-react.md
│ ├── this-keyword-call-apply-bind-javascript.md
│ ├── this-one-line-of-javascript-made-ft-com-10-times-slower.md
│ ├── threads-in-rust.md
│ ├── three-input-element-properties-that-i-discovered-while-reading-mdn.md
│ ├── time-series-analysis-in-python-an-introduction.md
│ ├── time-series-analysis-visualization-forecasting-with-lstm.md
│ ├── time-series-anomaly-detection-algorithms.md
│ ├── time-series-of-price-anomaly-detection.md
│ ├── time-series-prediction-using-recurrent-neural-networks-lstms.md
│ ├── tips-to-use-VSCode-more-efficiently.md
│ ├── to-grid-or-to-flex.md
│ ├── to-yarn-and-back-again-npm.md
│ ├── top-7-modern-programming-language-to-learn-now.md
│ ├── top-javascript-frameworks-and-topics-to-learn-in-2019.md
│ ├── top-react-and-redux-packages-for-faster-development.md
│ ├── tracing-or-debugging-vue-js-reactivity-the-computed-tree.md
│ ├── transducers-efficient-data-processing-pipelines-in-javascript.md
│ ├── trick-out-your-terminal-in-10-minutes-or-less.md
│ ├── trying-out-dask-dataframes-in-python-for-fast-data-analysis-in-parallel.md
│ ├── tslint-in-2019.md
│ ├── tuple-unpacking-improves-python-code-readability.md
│ ├── tutorial-write-a-shell-in-c.md
│ ├── typescript-3-0-the-unknown-type.md
│ ├── typescript-impossible-states-irrepresentable.md
│ ├── typescript-with-babel-a-beautiful-marriage.md
│ ├── un-places-to-learn-css-layout-part-2-grid-layout.md
│ ├── under-the-hood-of-reacts-hooks-system.md
│ ├── underspanding-spans.md
│ ├── understanding-a-performance-issue-with-polymorphic-json-data.md
│ ├── understanding-androids-vector-image-format-vectordrawable.md
│ ├── understanding-apache-airflows-key-concepts.md
│ ├── understanding-asynchronous-javascript-the-event-loop.md
│ ├── understanding-compilers-for-humans-version-2.md
│ ├── understanding-database-sharding.md
│ ├── understanding-execution-context-and-execution-stack-in-javascript.md
│ ├── understanding-higher-order-components-in-react.md
│ ├── understanding-javascript-async-and-await-with-examples.md
│ ├── understanding-javascript-memory-management-using-garbage-collection.md
│ ├── understanding-mixins-in-vue-js.md
│ ├── understanding-operator-co-await.md
│ ├── understanding-python-bytecode-pycon-2018.md
│ ├── understanding-react-render-props-and-hoc.md
│ ├── understanding-recursion.md
│ ├── understanding-service-workers-and-caching-strategies.md
│ ├── understanding-undefined-and-preventing-referenceerrors.md
│ ├── understanding-webviews.md
│ ├── unidirectional-user-interface-architectures.md
│ ├── unit-testing-react-components.md
│ ├── unpacking-hoisting.md
│ ├── unsupervised-learning-with-python.md
│ ├── use-web-workers-for-your-event-listeners.md
│ ├── user-experience-mapping-alice-emma-walker.md
│ ├── userland-api-monitoring-and-code-injection-detection.md
│ ├── using-behavioural-economics-to-convey-the-value-of-paid-app-subscriptions.md
│ ├── using-closest-to-return-the-correct-dom-element.md
│ ├── using-errors-as-control-flow-in-swift.md
│ ├── using-iphone-x-maya-quick-cheap-facial-capture.md
│ ├── using-lstms-for-stock-market-predictions-tensorflow.md
│ ├── using-multiple-camera-streams-simultaneously.md
│ ├── using-node-js-to-read-really-really-large-files-pt-1.md
│ ├── using-proxy-to-track-javascript-class.md
│ ├── using-vector-assets-in-android-apps.md
│ ├── using-what-if-tool-to-investigate-machine-learning-models.md
│ ├── using-workers-to-make-static-sites-dynamic.md
│ ├── ux-design-practices-how-to-make-web-interface-scannable.md
│ ├── value-oriented-programming.md
│ ├── video-streaming-with-flask.md
│ ├── visualising-machine-learning-datasets-with-googles-facets.md
│ ├── vue-js-considerations-and-tricks.md
│ ├── vue-router-the-missing-manual.md
│ ├── vuejs-3-0-0-beta-features-im-excited-about.md
│ ├── vuejs-or-react-which-you-would-chose-and-why.md
│ ├── vuex-perfect-interface-frontend-backend.md
│ ├── warning-your-programming-career.md
│ ├── watchos-5-wish-list.md
│ ├── web-architecture-101.md
│ ├── web-components-in-2018.md
│ ├── web-scraping-with-puppeteer-in-node-js.md
│ ├── webapks-on-android.md
│ ├── webassembly-why-and-how-to-use-it.md
│ ├── websockets-vs-long-polling.md
│ ├── were-nearing-the-7-0-babel-release-here-s-all-the-cool-stuff-we-ve-been-doing.md
│ ├── what-5-years-of-a-relationships-messages-look-like.md
│ ├── what-are-javascript-generators-and-how-to-use-them.md
│ ├── what-do-flutter-package-users-need-findings-from-q2-user-survey.md
│ ├── what-even-are-flutter-widgets.md
│ ├── what-hooks-mean-for-vue.md
│ ├── what-i-wish-i-knew-when-i-started-to-work-with-react-js.md
│ ├── what-is-a-python-core-developer-pycon-2018.md
│ ├── what-is-accessibility-and-why-is-it-crucial-for-your-users-experience.md
│ ├── what-is-google-tag-manager-and-why-use-it.md
│ ├── what-is-modular-css.md
│ ├── what-is-progressive-enhancement-and-why-it-matters.md
│ ├── what-is-this-the-inner-workings-of-javascript-objects.md
│ ├── what-it-was-like-to-write-a-full-blown-flutter-app.md
│ ├── what-on-earth-is-the-shadow-dom-and-why-it-matters.md
│ ├── what-replaces-javascript.md
│ ├── what-tools-do-you-need-to-do-devops.md
│ ├── what-we-learned-migrating-off-cron-to-airflow.md
│ ├── what-we-ve-learned-about-hiring-engineering-managers.md
│ ├── whats-coming-up-in-javascript-2018-async-generators-better-regex.md
│ ├── whats-going-on-in-that-front-end-head.md
│ ├── whats-new-in-php-7-4-top-10-features-that-you-need-to-know.md
│ ├── whats-new-in-swift-5-0.md
│ ├── whats-next-for-mobile-at-airbnb.md
│ ├── whats-the-difference-between-dogs-html-and-dogs-html.md
│ ├── when-a-rewrite-isnt-rebuilding-slack-on-the-desktop.md
│ ├── when-every-product-of-design-is-one-of-opinion.md
│ ├── when-to-standardize-your-data.md
│ ├── when-workers.md
│ ├── which-deep-learning-framework-is-growing-fastest.md
│ ├── why-ai-is-here-to-stay.md
│ ├── why-coding-your-own-makes-you-a-better-developer.md
│ ├── why-designers-hate-politics-and-what-to-do-about-it.md
│ ├── why-every-android-developer-should-try-out-flutter.md
│ ├── why-flutter-will-change-mobile-development-for-the-best.md
│ ├── why-i-write-css-in-javascript.md
│ ├── why-is-front-end-development-so-unstable.md
│ ├── why-is-object-immutability-important.md
│ ├── why-isnt-x-a-hook.md
│ ├── why-machine-learning-matters.md
│ ├── why-math-max-is-less-than-math-min-in-javascript.md
│ ├── why-one-hot-encode-data-in-machine-learning.md
│ ├── why-robinhood-uses-airflow.md
│ ├── why-should-you-learn-go.md
│ ├── why-svelte-wont-kill-react.md
│ ├── why-ux-and-ui-should-remain-separate.md
│ ├── why-we-need-web-3-0.md
│ ├── why-were-bullish-on-crypto-collectibles-nfts.md
│ ├── why-were-switching-to-grpc.md
│ ├── why-you-should-give-flutter-some-of-your-attention.md
│ ├── why-you-should-leave-react-for-vue-and-never-use-it-again.md
│ ├── why-you-should-replace-foreach.md
│ ├── why-you-should-totally-switch-to-kotlin.md
│ ├── why-your-app-should-be-optimized-for-screen-of-all-sizes.md
│ ├── widget-state-context-inheritedwidget.md
│ ├── will-node-js-forever-be-the-sluggish-golang.md
│ ├── windows-insets-fragment-transitions.md
│ ├── wireframes-are-becoming-less-relevant-and-thats-a-good-thing.md
│ ├── workmanager-basics.md
│ ├── write-once-run-everywhere-tests-on-android.md
│ ├── writing-a-compiler-in-rust.md
│ ├── writing-a-dumb-icon-flutter-package.md
│ ├── writing-a-killer-software-engineering-resume.md
│ ├── writing-a-microservice-in-rust.md
│ ├── writing-a-web-server-node.md
│ ├── writing-cleaner-view-code-by-overriding-loadview.md
│ ├── writing-network-layer-in-swift-protocol-oriented-approach.md
│ ├── wwdc-2018-rumors-ios-12-new-macbook-air-ipad-pro-homepod.md
│ ├── xcode-and-lldb-advanced-debugging-tutorial-part-1.md
│ ├── xcode-and-lldb-advanced-debugging-tutorial-part-2.md
│ ├── xcode-and-lldb-advanced-debugging-tutorial-part-3.md
│ ├── xgboost-algorithm-long-may-she-reign.md
│ ├── yarn-vs-npm-everything-you-need-to-know.md
│ ├── you-should-never-ever-run-directly-against-node-js-in-production-maybe.md
│ ├── your-first-cli-tool-with-rust.md
│ ├── zero-to-one-with-flutter-part-two.md
│ └── zero-to-one-with-flutter.md
├── a-new-post-template.md
├── algorithm.md
├── android.md
├── article/
│ ├── 2020/
│ │ ├── 10-awesome-chrome-flags-you-should-enable-right-now.md
│ │ ├── 10-best-practices-for-improving-your-css.md
│ │ ├── 10-tips-shortcuts-you-should-be-using-right-now-on-xcode.md
│ │ ├── 14-javascript-code-optimization-tips-for-front-end-developers.md
│ │ ├── 15-vscode-extensions-every-web-developer-must-have-in-2021.md
│ │ ├── 3-essential-questions-about-hashable-in-python.md
│ │ ├── 4-options-for-using-mongodb-with-business-intelligence.md
│ │ ├── 4-useful-javascript-design-patterns-you-should-know.md
│ │ ├── 4-ways-to-communicate-across-browser-tabs-in-realtime.md
│ │ ├── 5-chrome-extensions-for-developers-productivity.md
│ │ ├── 5-lesser-known-features-of-chrome-devtools.md
│ │ ├── 5-reasons-to-choose-pwa-for-your-web-and-mobile-apps.md
│ │ ├── 5-reasons-why-you-should-use-svelte-for-front-end-development-in-2021.md
│ │ ├── 5-string-manipulation-libraries-for-javascript.md
│ │ ├── 5-tips-for-better-typescript-code.md
│ │ ├── 5-types-of-arguments-in-python-function-definition.md
│ │ ├── 5-useful-things-the-spread-operator-can-do-in-javascript.md
│ │ ├── 6-months-of-using-graphql.md
│ │ ├── 6-things-to-know-to-get-started-with-python-data-classes.md
│ │ ├── 6-ways-to-speed-up-your-vue-js-application.md
│ │ ├── 7-helpful-time-complexities.md
│ │ ├── 7-modules-you-can-use-right-now-to-build-your-first-deno-web-app.md
│ │ ├── 8-scss-best-practices-to-keep-in-mind.md
│ │ ├── 8-unheard-of-browser-apis-you-should-be-aware-of.md
│ │ ├── Damn-Cool-Algorithms-Log-structured-storage.md
│ │ ├── Stale-props-and-zombie-children-in-Redux.md
│ │ ├── a-complete-introduction-to-webassembly-and-its-javascript-api.md
│ │ ├── a-comprehensive-guide-to-slices-in-golang.md
│ │ ├── a-high-level-overview-of-load-balancing-algorithms.md
│ │ ├── abstract-data-types-and-the-software-crisis.md
│ │ ├── adaptive-video-with-css-math.md
│ │ ├── applications-of-some-of-the-famous-algorithms.md
│ │ ├── aspect-oriented-programming-in-javascript.md
│ │ ├── auto-documenting-a-python-project-using-sphinx.md
│ │ ├── avoiding-memory-leaks-in-nodejs-best-practices-for-performance.md
│ │ ├── best-features-of-es2017-async-functions-and-arrays-and-shared-buffers.md
│ │ ├── best-static-site-generators-for-vue-js.md
│ │ ├── better-composition-in-vue.md
│ │ ├── big-data-lambda-architecture-in-a-nutshell.md
│ │ ├── build-a-graphql-server-with-spring-boot-and-mysql.md
│ │ ├── build-a-server-driven-ui-using-ui-components-in-swiftui.md
│ │ ├── building-a-design-system-and-a-component-library.md
│ │ ├── building-and-monitoring-your-first-github-actions-workflow.md
│ │ ├── building-crud-apis-using-deno-and-oak.md
│ │ ├── clamp-for-responsive-design.md
│ │ ├── code-coverage-vue-cypress.md
│ │ ├── color-scales-in-javascript-with-chroma-js.md
│ │ ├── comparing-api-architectural-styles-soap-vs-rest-vs-graphql-vs-rpc.md
│ │ ├── create-a-private-postgresql-database-for-your-development-environment-in-seconds.md
│ │ ├── create-your-own-camscanner-using-python-opencv.md
│ │ ├── creating-a-menu-image-animation-on-hover.md
│ │ ├── css-fix-for-100vh-in-mobile-webkit.md
│ │ ├── dark-theme-a-modern-ui-design.md
│ │ ├── deepspeed-extreme-scale-model-training-for-everyone.md
│ │ ├── demoforbeginner-what-is-wsgi.md
│ │ ├── demystifying-the-0-1-knapsack-problem.md
│ │ ├── design-patterns-structural-patterns-of-design-classes-and-objects.md
│ │ ├── detect-faces-texts-and-even-barcodes-with-chromes-shape-detection-api.md
│ │ ├── diverse-mini-batch-active-learning-a-reproduction-exercise.md
│ │ ├── easy-dark-mode-switch-with-react-and-localstorage-3k6d.md
│ │ ├── enhance-javascript-security-with-content-security-policies.md
│ │ ├── es2020-optional-chaining-and-dynamic-imports-are-game-changers-heres-why.md
│ │ ├── example-of-a-machine-learning-algorithm-to-predict-spam-emails-in-python.md
│ │ ├── exciting-features-of-javascript-es2021-es12.md
│ │ ├── exploring-constraintlayout-2-0-in-android.md
│ │ ├── flutter-may-or-may-not-be-the-next-big-thing-but-kotlin-multiplatform-is-here-to-stay.md
│ │ ├── from-monolith-to-microservices-in-5-minutes.md
│ │ ├── from-scratch-to-the-first-10-customers-how-i-designed-and-launched-a-saas-product.md
│ │ ├── function-in-javascript-has-much-more-secrets-than-you-think.md
│ │ ├── functional-programming-explained-in-python-javascript-and-java.md
│ │ ├── fundamentals-of-caching-web-applications.md
│ │ ├── garbage-collection-in-python.md
│ │ ├── generators-in-javascript-when-should-i-use-yield-and-yield.md
│ │ ├── github-package-registry-is-it-worth-trying-out.md
│ │ ├── greedy-algorithms-101.md
│ │ ├── handling-location-permissions-in-ios-14.md
│ │ ├── hiding-data-in-an-image-image-steganography-using-python.md
│ │ ├── how-and-why-you-should-avoid-cors-in-single-page-apps.md
│ │ ├── how-i-increased-our-web-performance-by-422.md
│ │ ├── how-i-learned-sass-in-20-hours-and-why-you-should-too.md
│ │ ├── how-powerful-are-graph-convolutions-review-of-kipf-welling.md
│ │ ├── how-to-avoid-wifi-throttling-on-android-devices.md
│ │ ├── how-to-become-a-google-developer-expert-gde-a-practical-guide.md
│ │ ├── how-to-build-a-recommendation-system-in-a-graph-database-using-a-latent-factor-model.md
│ │ ├── how-to-build-redux.md
│ │ ├── how-to-create-a-reusable-web-scraper.md
│ │ ├── how-to-create-charts-from-external-data-sources-with-d3-js.md
│ │ ├── how-to-generate-random-text-captchas-using-python.md
│ │ ├── how-to-handle-comparison-corner-cases.md
│ │ ├── how-to-hide-secrets-in-strings-modern-text-hiding-in-javascript.md
│ │ ├── how-to-simulate-a-udp-flood-dos-attack-on-your-computer.md
│ │ ├── how-to-use-cookies-for-persisting-users-in-nextjs.md
│ │ ├── how-to-useref-to-fix-react-performance-issues.md
│ │ ├── how-to-write-clean-code-lessons-learnt-from-the-clean-code-robert-c-martin.md
│ │ ├── how-to-write-log-files-that-save-you-hours-of-time.md
│ │ ├── hunting-for-the-optimal-automl-library.md
│ │ ├── i-built-the-same-api-with-without-express-here-are-the-differences.md
│ │ ├── identify-well-connected-users-in-a-network.md
│ │ ├── implementing-heaps-in-javascript.md
│ │ ├── implementing-monte-carlo-tree-search-in-node-js.md
│ │ ├── improve-mongodb-performance-using-projection.md
│ │ ├── improve-page-rendering-speed-using-only-css.md
│ │ ├── improving-massively-imbalanced-datasets-in-machine-learning-with-synthetic-data.md
│ │ ├── incremental-vs-virtual-dom.md
│ │ ├── inheritance-vs-composition-which-is-better-for-your-javascript-project.md
│ │ ├── interactive-webgl-hover-effects.md
│ │ ├── introduction-to-blitz-js.md
│ │ ├── is-deno-a-threat-to-node.md
│ │ ├── is-deno-already-dead.md
│ │ ├── is-virtual-dom-derived-from-document-fragments.md
│ │ ├── javascript-decorators-from-scratch.md
│ │ ├── javascript-engines-an-overview.md
│ │ ├── javascript-proxies.md
│ │ ├── javascript-tips-child-constructors-text-selection-inline-workers-and-more.md
│ │ ├── latest-features-javascript-ecmascript-2020.md
│ │ ├── learn-about-swiftui-text-and-label-in-ios-14.md
│ │ ├── loving-graphql-more-than-rest.md
│ │ ├── lsm.md
│ │ ├── making-neural-networks-smaller-for-better-deployment.md
│ │ ├── master-python-lambda-functions-with-these-4-donts.md
│ │ ├── mastering-javascript-es6-symbols.md
│ │ ├── microservices-the-right-solution-for-you.md
│ │ ├── monolith-vs-micro-frontend.md
│ │ ├── mood-talk-tell-how-you-feel-to-others-who-face-the-same-challenges.md
│ │ ├── mvc-vs-mvp-vs-mvvm.md
│ │ ├── mvvm-in-swift-infinite-scrolling-and-image-loading.md
│ │ ├── my-experiences-with-api-gateways.md
│ │ ├── my-favorite-javascript-tips-and-tricks.md
│ │ ├── my-react-components-render-twice-and-drive-me-crazy.md
│ │ ├── my-website-now-loads-in-less-than-2-sec-here-s-how-i-did-it-hoj.md
│ │ ├── natural-language-processing-in-the-browser.md
│ │ ├── nextjs-vs-nuxtjs-vs-gatsbyjs.md
│ │ ├── object-freeze-vs-object-seal-immutability.md
│ │ ├── on-let-vs-const.md
│ │ ├── one-of-the-first-things-to-understand-in-javascript-immutability.md
│ │ ├── operator-overloading-in-python.md
│ │ ├── optimization-in-python-interning.md
│ │ ├── packaging-a-ui-library-for-distribution.md
│ │ ├── page-lifecycle-api-a-browser-api-every-frontend-developer-should-know.md
│ │ ├── pagetabviewstyle-in-swiftui.md
│ │ ├── performance-analysis-tools-for-front-end-development.md
│ │ ├── performance-metrics-for-front-end-applications.md
│ │ ├── python-smart-coding-with-locals-and-global.md
│ │ ├── react-native-vs-flutter-vs-ionic.md
│ │ ├── react-vs-sveltejs-the-war-between-virtual-and-real-dom.md
│ │ ├── responsive-font-size-using-vanilla-css.md
│ │ ├── rethinking-the-front-end-micro-frontend.md
│ │ ├── rust-wasm-yew-single-page-application.md
│ │ ├── safe-recursion-with-trampoline-in-javascript.md
│ │ ├── safe-unsafe-alignment-in-css-flexbox.md
│ │ ├── sandboxed-iframes.md
│ │ ├── schema-org-the-popular-web-standard-youve-never-heard-of.md
│ │ ├── security-best-practices-for-nodejs.md
│ │ ├── solving-word-hunt-in-python-the-trie.md
│ │ ├── some-arbitrary-number-of-lesser-known-graphql-features.md
│ │ ├── swiftui-cheat-sheet.md
│ │ ├── swiftui-dark-mode-the-easiest-way.md
│ │ ├── the-10-best-and-most-liked-flutter-packages.md
│ │ ├── the-anatomy-of-a-machine-learning-system-design-interview-question.md
│ │ ├── the-beginners-guide-to-elasticsearch.md
│ │ ├── the-dos-and-don-ts-of-python-list-comprehension.md
│ │ ├── the-law-of-demeter.md
│ │ ├── the-limits-of-knowledge.md
│ │ ├── the-world-needs-web-accessibility-now-more-than-ever.md
│ │ ├── top-image-lazy-loading-libraries-for-javascript.md
│ │ ├── tutorial-on-python-logging.md
│ │ ├── typescript-4-0-i-want-a-list-of-generic-params-with-good-labels.md
│ │ ├── typescript-the-value-of-a-good-generic.md
│ │ ├── typescripts-never-type.md
│ │ ├── ui-cheat-sheet-pagination-infinite-scroll-and-the-load-more-button.md
│ │ ├── uikit-or-swiftui-which-should-you-use-in-production.md
│ │ ├── understand-the-deflate-compression-behind-the-zip-and-gzip-formats.md
│ │ ├── understanding-modules-and-import-and-export-statements-in-javascript.md
│ │ ├── understanding-react-portals.md
│ │ ├── understanding-the-web-history-api-in-javascript.md
│ │ ├── understanding-why-a-database-deadlock-occurs.md
│ │ ├── unexpected-app-crashes-on-android-and-how-to-deal-with-them.md
│ │ ├── use-the-latest-javascript-features-in-any-browser.md
│ │ ├── user-defaults-in-swift.md
│ │ ├── user-tracking-with-css-only.md
│ │ ├── using-hashed-vs-nonhashed-url-paths-in-single-page-apps.md
│ │ ├── using-json-stringify-to-work-with-javascript-object.md
│ │ ├── using-service-workers-with-react.md
│ │ ├── ux-case-study-koinstreet-homepage-redesign.md
│ │ ├── vue-plugins-you-dont-know-you-may-need.md
│ │ ├── web-locks-api-cross-tab-resource-synchronization.md
│ │ ├── what-does-serverless-actually-mean.md
│ │ ├── what-makes-a-good-github-profile.md
│ │ ├── what-to-expect-in-python-3-9.md
│ │ ├── whats-new-in-swift-5-3.md
│ │ ├── which-should-you-use-asynchronous-programming-or-multi-threading.md
│ │ ├── why-color-is-key-for-data-visualization-and-how-to-use-it.md
│ │ ├── why-deno-is-perfectly-ready-to-take-over-node-js-now.md
│ │ ├── why-is-my-data-drifting.md
│ │ ├── why-you-should-make-your-code-as-simple-as-possible.md
│ │ ├── widgets-on-ios.md
│ │ ├── will-ubuntu-20-04-steal-more-windows-users.md
│ │ ├── will-webtransport-replace-webrtc-in-near-future.md
│ │ ├── working-with-emoji-in-swift.md
│ │ ├── write-cleaner-code-by-using-javascript-destructuring.md
│ │ └── writing-tetris-in-python.md
│ ├── 2021/
│ │ ├── 10-awesome-things-you-can-do-with-github-dev.md
│ │ ├── 10-years-of-open-source-visualization.md
│ │ ├── 100-tips-on-software-developer-productivity.md
│ │ ├── 11-easy-ui-design-tips-for-web-devs-j3j.md
│ │ ├── 11-rare-javascript-one-liners-that-will-amaze-you.md
│ │ ├── 16px-or-larger-text-prevents-ios-form-zoom.md
│ │ ├── 1993-cgi-scripts-and-early-server-side-web-programming.md
│ │ ├── 20-go-packages-you-can-use-in-your-next-project.md
│ │ ├── 2021-03-15-highlights-from-git-2-31.md
│ │ ├── 3-fallback-techniques-to-support-css-grid-in-any-browser.md
│ │ ├── 3-uncommon-bash-tricks-that-you-should-know.md
│ │ ├── 34-javascript-optimization-techniques-to-know-in-2021.md
│ │ ├── 4-security-concerns-with-iframes-every-web-developer-should-know.md
│ │ ├── 4-ways-to-reduce-cors-preflight-time-in-web-apps.md
│ │ ├── 5-Reasons-to-Switch-from-React-to-Next-js.md
│ │ ├── 5-advanced-typescript-tips-to-make-you-a-better-programmer.md
│ │ ├── 5-css-practices-to-avoid-as-a-web-developer.md
│ │ ├── 5-kotlin-extensions-to-make-your-android-code-more-expressive.md
│ │ ├── 5-misconceptions-about-design-systems.md
│ │ ├── 5-reasons-why-Deno-will-stop-using-TypeScript- StartFunction.md
│ │ ├── 5-reasons-why-flutter-is-better-than-react-native.md
│ │ ├── 5-strategies-to-reduce-frontend-build-time-with-ci-cd.md
│ │ ├── 5-string-manipulation-libraries-for-javascript.md
│ │ ├── 6-alternatives-to-classes-in-python.md
│ │ ├── 6-amazing-free-tools-that-will-save-you-some-time-when-u-are-building-websites-especially-for-non-designer-developers.md
│ │ ├── 6-css-properties-nobody-is-talking-about.md
│ │ ├── 6-regrets-i-have-as-a-react-developer.md
│ │ ├── 7-JavaScript-Fundamentals-Every-Web-Developer-Should-Know.md
│ │ ├── 9-distance-measures-in-data-science.md
│ │ ├── About-Async-Iterators-in-Node.js.md
│ │ ├── Algorithms-in-JavaScript-with-visual-examples.md
│ │ ├── Angular-vs-React-vs-Vue-Which-Framework-is-Best-in-2021.md
│ │ ├── Announcing-Dart-2-12.md
│ │ ├── Building-an-SQL-Database-Audit-System-Using-Kafka,-MongoDB-and-Maxwell's-Daemon.md
│ │ ├── Case-Study-Building-a-Mobile-Game-with-Dart-and-Flutter.md
│ │ ├── Common-Anti-Patterns-in-Go.md
│ │ ├── Decoding-Django-Sessions-in-PostgreSQL.md
│ │ ├── Deno-1-8-Release-Notes.md
│ │ ├── Go-developer-survey-2020-results.md
│ │ ├── Interview-with-Ryan-Dahl-Creator-of-Node-js.md
│ │ ├── Monitor-Spring-Boot-microservices.md
│ │ ├── NumPy-1-20-Released-with-Runtime-SIMD-Support-and-Type-Annotations.md
│ │ ├── Part-Of-Why-I-Think-React-Is-Junk.md
│ │ ├── RabbitMQ-and-SpringBoot-for-Real-Time-Messaging.md
│ │ ├── Rust-1.51.0.md
│ │ ├── Rust-in-production-at-Figma.md
│ │ ├── The-End-of-Applets.md
│ │ ├── The-RedMonk-Programming-Language-Rankings-January-2021.md
│ │ ├── Tutorial-Building-a-D3-js-Calendar-Heatmap.md
│ │ ├── Typescript-4-2-Released-Improves-Types-and-Developer-Experience.md
│ │ ├── Web-Performance-for-Product-Managers.md
│ │ ├── a-beginners-guide-to-memoization-with-javascript.md
│ │ ├── a-case-for-compile-to-javascript-interface-frameworks.md
│ │ ├── a-complete-guide-of-node-js-buffer.md
│ │ ├── a-deep-dive-into-actors-in-swift-5-5.md
│ │ ├── a-deep-dive-into-javascript-modules.md
│ │ ├── a-laymans-intro-to-quantum-computers.md
│ │ ├── a-new-standard-for-mobile-app-security.md
│ │ ├── a-review-of-javascript-testing-frameworks-in-2021.md
│ │ ├── adding-a-unique-constraint-in-an-online-way.md
│ │ ├── advanced-python-how-to-implement-caching-in-python-application.md
│ │ ├── ai-in-content-marketing.md
│ │ ├── all-you-need-to-know-about-higher-order-functions-in-javascript.md
│ │ ├── an-introduction-to-jetpack-compose-for-desktop.md
│ │ ├── android-new-features-spring-2021.md
│ │ ├── android-startup-tip-dont-use-kotlin-coroutines.md
│ │ ├── announcing-react-native-0.64-with-hermes-on-ios.md
│ │ ├── announcing-the-new-typescript-handbook.md
│ │ ├── apis-vs-websockets-vs-webhooks-what-to-choose.md
│ │ ├── apple-announces-june-7-start-date-for-wwdc-2021.md
│ │ ├── authorization-and-authentication-for-everyone.md
│ │ ├── auto-generated-social-media-images.md
│ │ ├── avoid-trusting-const-in-javascript.md
│ │ ├── bash-if-else-statement.md
│ │ ├── better-privacy-with-chromiums-privacy-sandbox.md
│ │ ├── brown-green-language.md
│ │ ├── build-an-article-recommendation-engine-with-ai-ml.md
│ │ ├── building-a-map-of-your-python-project-using-graph-technology-visualize-your-code.md
│ │ ├── building-a-reactive-architecture-around-redis.md
│ │ ├── building-a-read-through-cache-using-cdn.md
│ │ ├── built-in-explicit-animations-in-flutter.md
│ │ ├── chrome-90-beta-av1-encoder-for-webrtc.md
│ │ ├── chrome-93-multi-screen-window-placement.md
│ │ ├── common-social-engineering-attack-strategies.md
│ │ ├── creating-stylesheet-feature-flags-with-sass-default.md
│ │ ├── creating_colorful_smart_shadows.md
│ │ ├── cross-site-scripting.md
│ │ ├── csrf-attacks.md
│ │ ├── css-is-magic-its-time-you-try-3d.md
│ │ ├── custom-state-pseudo-classes-in-chrome.md
│ │ ├── deconstructing-the-iconic-apple-watch-bubble-ui.md
│ │ ├── deep-dive-cors-history-how-it-works-best-practices.md
│ │ ├── deepmind-NFNets-deep-learning.md
│ │ ├── demystify-graph-coloring-algorithms.md
│ │ ├── demystifying-java-lambda-expressions.md
│ │ ├── dependency-injection-in-typescript.md
│ │ ├── developer-tooling-for-kubernetes-in-2021-helm-kust.md
│ │ ├── directory-traversal.md
│ │ ├── distributed-tracing-matters.md
│ │ ├── dont-let-carousels-kill-your-application.md
│ │ ├── dont-run-benchmarks-on-a-debuggable-android-app-like-i-did.md
│ │ ├── dont-show-me-your-design-portfolio.md
│ │ ├── dropbox-reveals-Atlas.md
│ │ ├── ensure-javascript-code-quality-with-husky-and-hooks.md
│ │ ├── event-bubbling-and-capturing-in-javascript.md
│ │ ├── everything-about-the-latest-ecmascript-release-ecmascript-2021.md
│ │ ├── expert-hackers-used-11-zerodays-to-infect-windows-ios-and-android-users.md
│ │ ├── exploring-android-12-splash-screen.md
│ │ ├── ffmpeg-webassembly.md
│ │ ├── flutter-animation-creating-mediums-clap-animation-in-flutter.md
│ │ ├── flutter-creating-elegant-uis-with-containers.md
│ │ ├── flutter-quote-app.md
│ │ ├── from-rxjava-2-to-kotlin-flow-threading.md
│ │ ├── gcp-healthcare-consent-api.md
│ │ ├── getting-started-with-sqldelight-in-android-development.md
│ │ ├── google-ai-chip-design.md
│ │ ├── google-microsoft-attack-open-web-online-news-australia-laws.md
│ │ ├── google-oss-fuzz-extends-fuzzing-to-java-apps.md
│ │ ├── grafana-managed-observability.md
│ │ ├── graph-data-structure-implementation-in-javascript.md
│ │ ├── heres-a-list-of-technologies-i-wasted-my-time-learning-as-a-web-developer.md
│ │ ├── heres-exactly-what-you-need-to-know-about-apple-s-app-tracking-transparency.md
│ │ ├── hex-vs-rgb-vs-hsl-what-is-the-best-method-to-set-css-color-property.md
│ │ ├── hookrouter-a-modern-approach-to-react-routing.md
│ │ ├── how-a-cache-stampede-caused-one-of-facebooks-biggest-outages.md
│ │ ├── how-an-anti-typescript-javascript-developer-like-me-became-a-typescript-fan.md
│ │ ├── how-dagger-hilt-and-koin-differ-under-the-hood.md
│ │ ├── how-do-you-create-an-efficient-data-structure-for-spatial-indexing.md
│ │ ├── how-github-actions-renders-large-scale-logs.md
│ │ ├── how-its-made-i-o-photo-booth.md
│ │ ├── how-to-do-multithreading-with-node-js.md
│ │ ├── how-to-implement-a-graphql-api-on-top-of-an-existing-rest-api.md
│ │ ├── how-to-slow-down-a-for-loop-in-javascript.md
│ │ ├── how-to-use-indexeddb-a-nosql-db-on-the-browser.md
│ │ ├── http-strict-transport-security-faqs.md
│ │ ├── i-cant-believe-it-s-not-better-active-learning-flavor.md
│ │ ├── i-got-into-mit-refused-the-offer-and-still-became-a-highly-valued-developer.md
│ │ ├── ibm-12-project-debater-api.md
│ │ ├── imagining-native-skip-link.md
│ │ ├── importing-json-modules-in-typescript.md
│ │ ├── improving-firefox-stability-on-linux.md
│ │ ├── improving-node-application-performance-with-clustering.md
│ │ ├── introducing-page-shield.md
│ │ ├── introduction-to-creating-interpreter-using-python.md
│ │ ├── is-css-a-programming-language.md
│ │ ├── is-it-the-beginning-of-the-end-for-pwas.md
│ │ ├── javascript-symbols-the-most-misunderstood-feature-of-the-language.md
│ │ ├── javascript-temporal-api-a-fix-for-the-date-api.md
│ │ ├── javascript-typed-arrays.md
│ │ ├── javascript-visualized-the-javascript-engine.md
│ │ ├── jetpack-compose-styles-and-themes.md
│ │ ├── json-encoding-decoding-with-python.md
│ │ ├── leave-javascript-aside-mint-is-a-great-language-for-building-web-apps.md
│ │ ├── library-tree-shaking.md
│ │ ├── machine-learning-with-android-11-whats-new.md
│ │ ├── making-javascript-run-fast-on-webassembly.md
│ │ ├── memory-layout-in-swift.md
│ │ ├── messengers-like-imageview.md
│ │ ├── microsoft-makes-changes-to-windows-10-inbox-apps-with-latest-dev-channel-test-build.md
│ │ ├── migrating-from-livedata-to-kotlins-flow.md
│ │ ├── monads-for-javascript-developers.md
│ │ ├── mongodb-vs-mysql-when-to-use.md
│ │ ├── my-favorite-interservice-communication-patterns-for-microservices.md
│ │ ├── native-splash-screen-in-flutter-using-lottie.md
│ │ ├── new-css-features-2021.md
│ │ ├── new-features-chrome-88.md
│ │ ├── new-in-devtools-92.md
│ │ ├── new-standards-to-access-user-device-hardware-using-javascript.md
│ │ ├── new-suspense-ssr-architecture-in-react-18.md
│ │ ├── next-gen-css-container.md
│ │ ├── nginx-concepts-i-wish-i-knew-years-ago.md
│ │ ├── node-js-vs-python-which-one-to-choose-for-your-project.md
│ │ ├── nodejs-memory-limits-what-you-should-know.md
│ │ ├── numpy-on-gpu-tpu.md
│ │ ├── observer-design-pattern-in-javascript.md
│ │ ├── passwordless-authentication-for-better-security.md
│ │ ├── performance-best-practices-transactions-and-read--write-concerns.md
│ │ ├── performance-differences-between-postgres-and-mysql.md
│ │ ├── physics-simulations-using-vpython.md
│ │ ├── pipe-operations-in-python.md
│ │ ├── programmatically-generate-images-with-css-painting-api.md
│ │ ├── python-features-that-you-will-miss-in-typescript.md
│ │ ├── python-lists-and-tuples.md
│ │ ├── quick-overview-of-http-requests-cross-origin-resource-sharing-cors.md
│ │ ├── raspberry-pi’s-ninth-birthday-9-things-you-might-not-know.md
│ │ ├── react-vs-vue-in-2021-best-javascript-framework.md
│ │ ├── recyclerview-in-jetpack-compose.md
│ │ ├── replace-null-with-es6-symbols.md
│ │ ├── responsive-images-different-techniques-and-tactics.md
│ │ ├── reverse-engineering-the-car-file-format.md
│ │ ├── running-javascript-in-webassembly.md
│ │ ├── rust-not-firefox-is-mozillas-greatest-industry-contribution.md
│ │ ├── safari-has-become-the-second-internet-explorer.md
│ │ ├── selector-nesting-has-come-to-css.md
│ │ ├── self-supervised-learning-the-dark-matter-of-intelligence.md
│ │ ├── send-http-requests-as-fast-as-possible-in-python.md
│ │ ├── server-side-request-forgery-vulnerability.md
│ │ ├── serverless-where-is-the-industry-going-in-2021.md
│ │ ├── should-you-compile-your-javascript-code.md
│ │ ├── should-you-really-be-coding-in-dark-mode.md
│ │ ├── simplified-peer-to-peer-communication-with-peerjs.md
│ │ ├── simulating-interplanetary-space-travel-in-python.md
│ │ ├── snowpack-an-alternative-build-tool-to-webpack.md
│ │ ├── so-whats-the-state-of-jquery-in-2021.md
│ │ ├── solutions-architect-tips-the-5-types-of-architecture-diagrams.md
│ │ ├── speed-of-rust-vs-c.md
│ │ ├── speed-up-your-angular-projects-by-10x-with-gpu-js.md
│ │ ├── sql-injection.md
│ │ ├── staggered-animation-in-flutter.md
│ │ ├── stanford-ai-report-2021.md
│ │ ├── static-analysis-tools-for-android.md
│ │ ├── stop-using-the-pixel-unit-in-css.md
│ │ ├── svelte-for-the-experienced-react-dev.md
│ │ ├── svelte-nodegui-native-desktop.md
│ │ ├── swiftui-2021-the-good-the-bad-and-the-ugly.md
│ │ ├── system-design-interview-all-or-none-ordered-peer-to-peer-broadcast.md
│ │ ├── telegram-like-uploading-animation.md
│ │ ├── that-time-when-you-thought-you-knew-y-a-ml.md
│ │ ├── the-arrival-of-java-16.md
│ │ ├── the-dark-side-of-javascript-a-look-at-3-features-you-never-want-to-use.md
│ │ ├── the-different-types-of-browser-storage.md
│ │ ├── the-future-of-the-web.md
│ │ ├── the-javascript-landscape-in-2021.md
│ │ ├── the-new-king-of-bundlers-is-here-all-bow-before-vitejs.md
│ │ ├── the-road-to-kotlin-1-5.md
│ │ ├── the-why-and-how-of-microservice-messaging-in-kubernetes.md
│ │ ├── threats-of-using-regular-expressions-in-javascript.md
│ │ ├── three-framework-problem-with-kotlin-multiplatform-mobile.md
│ │ ├── time-for-next-gen-codecs-to-dethrone-jpeg.md
│ │ ├── tools-for-auditing-css.md
│ │ ├── top-3-css-grid-features-to-start-using-in-production.md
│ │ ├── top-5-embedded-databases-for-javascript-applications.md
│ │ ├── top-5-icon-packs-for-web-apps-in-2021.md
│ │ ├── top-7-dart-tips-and-tricks-for-cleaner-flutter-apps.md
│ │ ├── top-node-js-development-trends-in-2021.md
│ │ ├── top-node-js-frameworks-to-use-in-2021.md
│ │ ├── top-open-source-projects-for-sres-and-devops.md
│ │ ├── transposed-convolution-demystified.md
│ │ ├── trending-storage-options-for-react-native-developers.md
│ │ ├── ultimate-guide-to-swiftui2-application-lifecycle.md
│ │ ├── undefined-null-revisited.md
│ │ ├── understanding-cross-site-request-forgery-csrf-or-xsrf.md
│ │ ├── understanding-css-grid.md
│ │ ├── understanding-rust-ownership-borrowing-lifetimes.md
│ │ ├── untested-python-code-is-already-broken.md
│ │ ├── using-bloc-pattern-with-react.md
│ │ ├── using-github-code-scanning-and-codeql-to-detect-traces-of-solorigate-and-other-backdoors.md
│ │ ├── using-immer-with-react-a-simple-solutions-for-immutable-states.md
│ │ ├── using-interfaces-to-write-better-php-code.md
│ │ ├── using-rust-to-scale-elixir-for-11-million-concurrent-users.md
│ │ ├── using-spring-cloud-gateway-for-microservices-app.md
│ │ ├── using-web-workers-to-speed-up-javascript-applications.md
│ │ ├── v8-release-92.md
│ │ ├── v8-sparkplug-compiler.md
│ │ ├── variable-aspect-ratio-card-with-conic-gradients-meeting-along-the-diagonal.md
│ │ ├── we-collected-500-000-browser-fingerprints-here-is-what-we-found.md
│ │ ├── web-almanac-2020.md
│ │ ├── web-share-for-modern-web-apps.md
│ │ ├── webpacks-hot-module-replacement-feature-explained.md
│ │ ├── what-is-http-3-and-why-does-it-matter.md
│ │ ├── what-is-mobile-devops-and-why-should-you-care.md
│ │ ├── whats-new-in-sqlite-3-35.md
│ │ ├── whats-new-in-swift-5-4.md
│ │ ├── when-compat-libraries-do-not-save-you.md
│ │ ├── which-type-of-loop-is-fastest-in-javascript.md
│ │ ├── why-discord-is-switching-from-go-to-rust.md
│ │ ├── why-i-still-lisp-and-you-should-too.md
│ │ ├── why-java-is-so-young-after-25-years-an-architects.md
│ │ ├── why-react-hooks-are-the-wrong-abstraction.md
│ │ ├── why-the-service-mesh-should-fade-out-of-sight.md
│ │ ├── why-you-should-use-picture-tag-instead-of-img-tag.md
│ │ ├── will-scss-be-replaced-by-css3.md
│ │ └── working-toward-fairer-machine-learning.md
│ ├── 2022/
│ │ ├── .gitkeep
│ │ ├── 10-hardest-python-questions.md
│ │ ├── 4-lesser-known-swift-features.md
│ │ ├── 5-extremely-amusing-reasons-to-date-a-programmer.md
│ │ ├── 6-jetpack-compose-guidelines-to-optimize-your-app-performance.md
│ │ ├── Create-A-Real-Time-Medical-App-With-React-Native.md
│ │ ├── Install-and-uninstall-WasmEdge.md
│ │ ├── Stop-Building-Your-UI-Components-like-this.md
│ │ ├── a-thorough-analysis-of-css-in-js.md
│ │ ├── bad-microservices.md
│ │ ├── best-practices-for-cookie-notifications.md
│ │ ├── effects-of-too-much-lazy-loading-on-web-performance.md
│ │ ├── everything-you-need-to-know-about-automation-testing.md
│ │ ├── github-copilot-review-after-3-months-of-usage-with-examples.md
│ │ ├── hash-map-analysis.md
│ │ ├── how-slow-is-python.md
│ │ ├── how-to-build-gui-with-python.md
│ │ ├── how-to-package-and-deploy-cli-apps.md
│ │ ├── how-to-write-cleaner-react-code.md
│ │ ├── http3-is-fast.md
│ │ ├── implement-memoization-in-react-to-improve-performance.md
│ │ ├── implementing-bitcask-a-log-structured-hash-table.md
│ │ ├── introduction-to-android-multi-touch.md
│ │ ├── javascript-frontend-speed-is-the-next-big-thing.md
│ │ ├── new-features-in-python-3-10-you-should-know.md
│ │ ├── pyscript-unleash-the-power-of-python-in-your-browser.md
│ │ ├── replacing-lerna-and-yarn-with-pnpm-workspaces.md
│ │ ├── requirements-txt-vs-setup-py-in-python.md
│ │ ├── retries.md
│ │ ├── send-data-to-the-server-when-the-user-navigates-to-another-page-using-javascript.md
│ │ ├── speed-up-your-python-code.md
│ │ ├── the-complete-guide-to-concurrency-and-multithreading-in-ios.md
│ │ ├── top-10-java-language-features.md
│ │ ├── two-way-binding-will-make-your-react-code-better.md
│ │ ├── use-streams-to-build-high-performing-nodejs-applications.md
│ │ ├── using-redis-on-cloud-here-are-ten-things-you-should-know.md
│ │ ├── verifying-distributed-systems-isabelle.md
│ │ ├── webgpu-computations-performance-in-comparison-to-webgl.md
│ │ ├── webrtc-vs-websockets.md
│ │ ├── what-are-responsive-images-and-why-you-should-use-them.md
│ │ ├── whats-new-in-es2022.md
│ │ ├── why-does-console-log-return-undefined.md
│ │ └── why-websockets-are-hard-to-scale.md
│ ├── 2023/
│ │ ├── .gitkeep
│ │ ├── 44-react-frontend-interview-questions.md
│ │ ├── A-First-Look-at-GPT-4.md
│ │ ├── A-step-by-step-guide-to-building-a-chatbot-based-on-your-own-documents-with-GPT.md
│ │ ├── How-to-Use-ChatGPT-to-Improve-Your-Productivity-(5-Examples).md
│ │ ├── achieve-nextjs-mastery-build-a-sales-page-with-stripe-and-airtable.md
│ │ ├── building-an-amazon-bedrock-app-for-text-and-image-retrieval.md
│ │ ├── from-lab-to-live-implementing-open-source-ai-models-for-real-time-unsupervised-anomaly-detection-in-images.md
│ │ ├── on-the-unpredictable-nature-of-llm-output-and-type-safety-in-langchain-ts.md
│ │ ├── unpopular-opinion-its-harder-than-ever-to-be-a-good-software-engineer.md
│ │ └── why-naming-is-1-skill-for-writing-clean-code.md
│ └── ECMA-TC39/
│ ├── Archival-of-TC39-materials.md
│ ├── Becoming-a-TC39-delegate.md
│ ├── Championing-a-proposal-at-TC39.md
│ ├── How-to-become-a-TC39-Invited-Expert.md
│ ├── How-to-experiment-with-a-proposal-before-Stage-4.md
│ ├── How-to-give-helpful-feedback.md
│ ├── How-to-host-a-TC39-meeting.md
│ ├── How-to-make-a-Pull-Request-against-the-ECMAScript-specification.md
│ ├── How-to-participate-in-meetings.md
│ ├── How-to-run-an-online-meeting.md
│ ├── How-to-take-notes.md
│ ├── How-to-write-a-good-explainer.md
│ ├── Implementing-and-shipping-TC39-proposals.md
│ ├── Presenting-a-Proposal-to-TC39.md
│ ├── README.md
│ ├── Reading-a-proposal-draft.md
│ ├── Revised-Patterns-for-Participation-in-Standards-Committees.md
│ ├── Stage-3-Proposal-Reviews.md
│ ├── TC39-and-IP.md
│ ├── TC39-management.md
│ └── terminology.md
├── backend.md
├── blockchain.md
├── design.md
├── front-end.md
├── glossary/
│ └── blockchain.md
├── integrals.md
├── ios.md
├── others.md
└── product.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing
## 参与翻译
- 请确保参与翻译之前已在相关文章的 Issue 发出过申请,避免重复性劳动。
- 如果你还不是我们的译者,请参考 [如何参与翻译](https://github.com/xitu/gold-miner/wiki/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E%E7%BF%BB%E8%AF%91)。
## 问题反馈
- 本项目只接受译文存在的相关问题反馈。任何需要针对原文的讨论请在英文原文处讨论。
- 针对译文的反馈,请 [提交一个 Issue](https://github.com/xitu/gold-miner/issues/new),指出问题对应的译文地址,并简明扼要的叙述问题所在。
## Pull Requests
- 译文请严格遵从 [译文排版规则指北](https://github.com/xitu/gold-miner/wiki/%E8%AF%91%E6%96%87%E6%8E%92%E7%89%88%E8%A7%84%E5%88%99%E6%8C%87%E5%8C%97) 中的要求。
- 每个 PR 只允许包含一篇文章的翻译版本。包含两篇或多篇的 PR 会立即被 close 掉。
- 翻译文章前,请从主分支的最新状态上新建一个译文分支,保证每个分支只翻译一篇文章。我们推荐的新分支名格式为:`translation/文件名`。
- 在翻译过程中,请直接编辑源文件,并不需要包含英文原文内容。
- 在翻译过程中,请尽可能保证在原行上进行修改,以保证行与行之间的原始对应关系。
- 在翻译完成后,请在中文环境下完整地阅读一遍译文,保证语句符合中文表达习惯。
- 在翻译完成后,请在 GitHub 网页版检查一下译文,确保不出现 Markdown 语法错误和排版错误。
================================================
FILE: .github/ISSUE_TEMPLATE/recommendation.md
================================================
---
name: 推荐优秀英文文章
about: 推荐值得翻译且暂未被翻译的优质英文文章
title: '推荐前端/后端/AI/Android/iOS/产品/设计/Flutter/Kotlin/其他/资讯优秀英文文章'
labels:
- 文章推荐
assignees: ''
---
- 原文链接:推荐文章前 Google 一下,尽量保证本文未被翻译
- 简要介绍:介绍一下好不好啦,毕竟小编也看不太懂哎_(:з」∠)_
- 翻译计划处理能力有限,请勿一次性提交超过 3 篇文章的推荐哦
- 由于 markdown 的局限性以及掘金和 GitHub 的排版限制,不建议推荐包含特别多富文本或者代码沙盒的文章哈
---
### 请完成并勾选一下三项:
* [ ] 按文章分类填写 Issue 标题:推荐前端/后端/AI/Android/iOS/产品/设计/Flutter/Kotlin/其他/资讯优秀英文文章
* [ ] 本文很值得翻译,我推荐
* [ ] 已经过初步搜索,暂未发现中文版译文
> 首先通过 [Google](https://google.com) / [Bing](https://bing.com) / Baidu 等搜索关键词组合:**原文 翻译 英文文章标题** 确认没有中文译文。例如搜索:原文 翻译 Garbage Collection In Go : Part I - Semantics
================================================
FILE: .github/ISSUE_TEMPLATE/sign_up.md
================================================
---
name: 申请成为译者
about: 写一份译者申请表,向大家介绍一下你吧~
title: '申请成为译者'
labels:
- 申请译者
assignees: ''
---
- 公司/学校:
- 工作内容/专业:
- 常浏览的国外网站:
- 英语水平:
- 翻译经验:
- 主要翻译方向:
- 个人博客:
- 个人介绍:
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
译文翻译完成,resolve #id
================================================
FILE: .github/workflows/generate-catalog.yml
================================================
name: 生成文章目录
on:
push:
paths:
- 'integrals.md'
workflow_dispatch:
jobs:
generate:
if: github.repository == 'xitu/gold-miner'
runs-on: ubuntu-latest
strategy:
fail-fast: false
max-parallel: 1
matrix:
include:
- label: '前端'
target: 'front-end.md'
- label: '后端'
target: 'backend.md'
- label: 'AI'
target: 'AI.md'
- label: '设计'
target: 'design.md'
- label: 'Android'
target: 'android.md'
- label: '算法'
target: 'algorithm.md'
- label: 'iOS'
target: 'ios.md'
- label: '其他'
target: 'others.md'
- label: '产品'
target: 'product.md'
steps:
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- run: |
python -m pip install lxml requests markdown
- uses: actions/checkout@master
with:
repository: xitu/juejin-integral-database
path: ./juejin-integral-database
- uses: actions/checkout@master
with:
path: ./gold-miner
token: ${{ secrets.LSVIH_PAT }}
- name: Generate Catalog
env:
TOKEN: ${{ secrets.GITHUB_TOKEN }}
LABEL: ${{ matrix.label }}
TARGET: ${{ matrix.target }}
run: |
cd juejin-integral-database
echo -n "$TOKEN" > secret
python script_generate_catalog.py --label "$LABEL" --target "$TARGET"
mv new_$TARGET ../gold-miner/$TARGET
- name: Commit Catalog
uses: EndBug/add-and-commit@v7
with:
message: '更新${{ matrix.label }}文章目录'
author_name: 'lsvih'
author_email: 'lsvih@qq.com'
add: '*.md'
cwd: './gold-miner/'
push: true
reindex:
if: github.repository == 'xitu/gold-miner'
needs: generate
runs-on: ubuntu-latest
steps:
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- uses: actions/checkout@master
with:
repository: xitu/juejin-integral-database
path: ./juejin-integral-database
- uses: actions/checkout@master
with:
path: ./gold-miner
token: ${{ secrets.LSVIH_PAT }}
- name: Reindex catalogues
run: |
cd juejin-integral-database
python reindex.py
- name: Commit Catalog
uses: EndBug/add-and-commit@v7
with:
message: '更新最新文章索引'
author_name: 'lsvih'
author_email: 'lsvih@qq.com'
add: 'README.md'
cwd: './gold-miner/'
push: true
================================================
FILE: .github/workflows/stale.yml
================================================
name: Mark stale issues
on:
schedule:
- cron: '0 6,18 * * *'
permissions:
issues: write
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v3
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-issue-stale: 7
stale-issue-label: "stale"
stale-issue-message: "Inactive Issue"
skip-stale-issue-message: true
days-before-issue-close: 0
close-issue-message: 'This issue was closed because it has been open 7 days with no activity.'
only-issue-labels: '文章推荐'
exempt-issue-labels: '标注'
days-before-pr-stale: -1
days-before-pr-close: -1
================================================
FILE: .github/workflows/translator-application.yaml
================================================
name: "Translator Application"
on:
issues:
types: [opened]
jobs:
translatorApplicationProcessor:
name: Translator Application Processor
if: ${{ contains(github.event.issue.title, '申请成为译者') }}
runs-on: ubuntu-latest
steps:
- name: Close Issue
uses: peter-evans/close-issue@v1
with:
token: "${{ secrets.GITHUB_TOKEN }}"
comment: |
Hi, @${{ github.event.issue.user.login }}, 感谢你申请加入掘金翻译计划,你需要做以下的事:
1. 认真学习 [掘金翻译计划译者教程](https://github.com/xitu/gold-miner/wiki),校对和翻译文章时,严格遵循教程,杜绝不看教程,只知道问的伸手党;
2. 确认认真学习了 [译文排版规则指北](https://github.com/xitu/gold-miner/wiki/%E8%AF%91%E6%96%87%E6%8E%92%E7%89%88%E8%A7%84%E5%88%99%E6%8C%87%E5%8C%97),翻译文章时严格遵循,校对文章时也要指出译者的格式错误;
3. 确认认真学习了 [翻译和校对文章的注意事项](https://github.com/xitu/gold-miner/wiki/%E5%8D%81%E4%B8%87%E4%B8%AA%E4%B8%BA%E4%BB%80%E4%B9%88),避免翻译校对过程中出错;
4. 加管理员微信 `chnyifan`,**验证信息格式**:翻译计划 + GitHub ID + 申请的 Issue Number;
5. 进群后修改群昵称为 GitHub ID。
**注意**:加完微信后,管理员会在当天拉你进译者群,进群之后做下简单的自我介绍。加入微信群则代表申请译者成功,接下来你需要看译者教程,然后先校对至少一篇文章才能开始正式翻译文章。当然也可以继续校对文章。
================================================
FILE: .gitignore
================================================
.DS_Store
.AppleDouble
.LSOverride
.idea
.vscode
================================================
FILE: AI.md
================================================
* [机器学习系统设计相关面试问题的剖析](https://juejin.cn/post/7109306303285051406)([caiyundong](https://github.com/caiyundong) 翻译)
* [如何使用 Python 管道 Pipe 高效编码](https://juejin.cn/post/7051051681357758494)([zenblofe](https://github.com/zenblofe) 翻译)
* [使用人工智能/机器学习构建文章推荐引擎](https://juejin.cn/post/7001479252163952670)([jaredliw](https://github.com/jaredliw) 翻译)
* [AI 是否已经成为内容营销的重要组成部分?](https://juejin.cn/post/6964280632801394724)([5Reasons](https://github.com/5Reasons) 翻译)
* [Google 的 Apollo 芯片设计人工智能框架将深度学习芯片的性能提高了 25%](https://juejin.cn/post/6952819856429285407)([PingHGao](https://github.com/PingHGao) 翻译)
* [解密转置卷积](https://juejin.cn/post/6954678998123151390)([PingHGao](https://github.com/PingHGao) 翻译)
* [人工智能系统 Project Debater 即将提供 12 个新的云 API](https://juejin.cn/post/6955657126647857159)([Kimhooo](https://github.com/Kimhooo) 翻译)
* [谷歌 DeepMind 发布 NFNet:高效的深度网络](https://juejin.cn/post/6947586233522454558)([chzh9311](https://github.com/chzh9311) 翻译)
* [斯坦福发布 2021 年人工智能指数报告](https://juejin.cn/post/6942769081363726373)([PingHGao](https://github.com/PingHGao) 翻译)
* [让机器学习更加公正](https://juejin.cn/post/6941964171974017031)([PingHGao](https://github.com/PingHGao) 翻译)
* [使用 Node.js 实现蒙特卡洛树搜索](https://juejin.cn/post/6944240279784423461)([zenblo](https://github.com/zenblo) 翻译)
* [恋爱 5 年的消息看起来是什么样](https://juejin.cn/post/6944711045449515038)([Amberlin1970](https://github.com/Amberlin1970) 翻译)
* [使用 Android 11 进行机器学习:新功能](https://juejin.cn/post/6933208209259757581)([PassionPenguin](https://github.com/PassionPenguin) 翻译)
* [数据科学中的 9 种距离度量](https://juejin.cn/post/6935265008045686815)([chzh9311](https://github.com/chzh9311) 翻译)
* [如何利用隐语义模型在图数据库中构建推荐系统](https://juejin.cn/post/6925019556108828685)([stuchilde](https://github.com/stuchilde) 翻译)
* [为什么我的数据会漂移?](https://juejin.cn/post/6923824334188314638)([chzh9311](https://github.com/chzh9311) 翻译)
* [DeepSpeed:所有人都能用的超大规模模型训练工具](https://juejin.cn/post/6916500899577724942)([zhuzilin](https://github.com/zhuzilin) 翻译)
* [寻找最优化 AutoML 库](https://juejin.cn/post/6906859687682965517)([zhusimaji](https://github.com/zhusimaji) 翻译)
* [在浏览器中处理自然语言](https://juejin.cn/post/6899707995828174861)([regon-cao](https://github.com/regon-cao) 翻译)
* [重现:多样化 Mini-Batch 主动学习](https://juejin.cn/post/6890560237091340302)([z0gSh1u](https://github.com/z0gSh1u) 翻译)
* [知识的极限](https://juejin.im/post/6874475968325484552)([QinRoc](https://github.com/QinRoc) 翻译)
* [让神经网络变得更小巧以方便部署](https://juejin.im/post/6873068232505458701)([PingHGao](https://github.com/PingHGao) 翻译)
* [使用合成数据改善机器学习中的极度不平衡数据集](https://juejin.im/post/6872609287802388488)([PingHGao](https://github.com/PingHGao) 翻译)
* [使用 Chrome 的 Shape Detection API 检测人脸,文本甚至条形码](https://juejin.im/post/6864391729693491207)([rocwong-cn](https://github.com/rocwong-cn) 翻译)
* [机器学习中的主动学习](https://juejin.im/post/5eaa71435188256d6c594746)([PingHGao](https://github.com/PingHGao) 翻译)
* [目标检测评价标准](https://juejin.im/post/5eaa67f55188256d9c259bd0)([PingHGao](https://github.com/PingHGao) 翻译)
* [一份数据科学 A/B 测试的简单指南](https://juejin.im/post/5e61b88cf265da57602c5b95)([Amberlin1970](https://github.com/Amberlin1970) 翻译)
* [图像修复:人类和 AI 的对决](https://juejin.im/post/5e43b2edf265da576543a0bb)([Starry316](https://github.com/Starry316) 翻译)
* [使用 Python 进行边缘检测](https://juejin.im/post/5e3d4b53e51d4526c26fadd4)([lsvih](https://github.com/lsvih) 翻译)
* [如何用 Keras 从头搭建一维生成对抗网络](https://juejin.im/post/5dcf5aba6fb9a0203161f376)([TokenJan](https://github.com/TokenJan) 翻译)
* [数学编程 —— 一个为推进数据科学发展而培养的关键习惯](https://zhuanlan.zhihu.com/p/100212596)([Weirdochr](https://github.com/Weirdochr) 翻译)
* [如何使用 Keras 训练目标检测模型](https://juejin.im/post/5d4bb1db6fb9a06add4e18b6)([EmilyQiRabbit](https://github.com/EmilyQiRabbit) 翻译)
* [XGBoost 算法万岁!](https://juejin.im/post/5d484040e51d4561f95ee9de)([lsvih](https://github.com/lsvih) 翻译)
* [由浅入深理解主成分分析](https://juejin.im/post/5d41321df265da03c926d65a)([Ultrasteve](https://github.com/Ultrasteve) 翻译)
* [人工智能何以留存](https://juejin.im/post/5d4c1155e51d4562061159d1)([YueYongDev](https://github.com/YueYongDev) 翻译)
* [什么时候需要进行数据的标准化? 为什么?](https://juejin.im/post/5d41a46bf265da03d727f85d)([Ultrasteve](https://github.com/Ultrasteve) 翻译)
* [数据科学家需要掌握的十种统计技术](https://juejin.im/post/5d42340d6fb9a06ae61a95f5)([HearFishle](https://github.com/HearFishle) 翻译)
* [从著名数据数据可视化中我们可以学到什么](https://juejin.im/user/567e246a34f81a1d879e7a14)([aceleewinnie](https://github.com/AceLeeWinnie) 翻译)
* [时间序列数据间量化同步的四种方法](https://juejin.im/post/5d213c126fb9a07f091bc3f5)([EmilyQiRabbit](https://github.com/EmilyQiRabbit) 翻译)
* [在 Python 中过度使用列表解析器和生成表达式](https://juejin.im/post/5d281b0ff265da1b8b2b8ae0)([ccJia](https://github.com/ccJia) 翻译)
* [使用 What-If 工具来研究机器学习模型](https://juejin.im/post/5d143abff265da1bb80c4005)([Starriers](https://github.com/Starriers) 翻译)
* [如何在 Keras 中用 YOLOv3 进行对象检测](https://juejin.im/post/5d12eef5e51d455a68490ba8)([Daltan](https://github.com/Daltan) 翻译)
* [在机器学习中为什么要进行 One-Hot 编码?](https://juejin.im/post/5d15840e5188255c23553204)([lsvih](https://github.com/lsvih) 翻译)
* [在 Keras 下使用自编码器分类极端稀有事件](https://juejin.im/post/5cff17296fb9a07ec63b0a7f)([ccJia](https://github.com/ccJia) 翻译)
* [使用谷歌 FACETS 可视化机器学习数据集](https://juejin.im/post/5d0226986fb9a07ecb0ba33a)([QiaoN](https://github.com/QiaoN) 翻译)
* [浅析深度学习神经网络的卷积层](https://juejin.im/post/5ceeef01518825351e354747)([QiaoN](https://github.com/QiaoN) 翻译)
* [时间序列分析、可视化、和使用 LSTM 预测](https://juejin.im/post/5cecdbb75188252db706f4e9)([Minghao23](https://github.com/Minghao23) 翻译)
* [用 Word2vec 表示音乐?](https://juejin.im/post/5cdcdd9ee51d456e8240ddc3)([Minghao23](https://github.com/Minghao23) 翻译)
* [使用 Python Flask 框架发布机器学习 API](https://juejin.im/post/5cd7f862e51d453aa44ad6f3)([sisibeloved](https://github.com/sisibeloved) 翻译)
* [使用 WFST 进行语音识别](https://juejin.im/post/5cd7f7c56fb9a03218556ea4)([sisibeloved](https://github.com/sisibeloved) 翻译)
* [Keras 速查表:使用 Python 构建神经网络](https://juejin.im/post/5cd40d24f265da038412a8be)([Minghao23](https://github.com/Minghao23) 翻译)
* [在数据可视化中,我们曾经“画”下的那些错误](https://juejin.im/post/5cd39e1de51d453a3a0acb7b)([ccJia](https://github.com/ccJia) 翻译)
* [机器学习可以建模简单的数学函数吗?](https://juejin.im/post/5ccd6d30e51d453ae03507da)([Minghao23](https://github.com/Minghao23) 翻译)
* [Python 架构相关:我们需要更多吗?](https://juejin.im/post/5cd1db8c51882535b323a3c7)([QiaoN](https://github.com/QiaoN) 翻译)
* [深度学习能力的三个等级](https://juejin.im/post/5cce97ec6fb9a031fe3bd85d)([HearFishle](https://github.com/HearFishle) 翻译)
* [在深度学习训练过程中如何设置数据增强?](https://juejin.im/post/5cc87ec8f265da03b446202b)([ccJia](https://github.com/ccJia) 翻译)
* [使用 PyTorch 在 MNIST 数据集上进行逻辑回归](https://juejin.im/post/5cc66d946fb9a032286173a7)([lsvih](https://github.com/lsvih) 翻译)
* [归一化和标准化 — 量化分析](https://juejin.im/post/5cc5c0a06fb9a0321b69740a)([ccJia](https://github.com/ccJia) 翻译)
* [如何在远程服务器上运行 Jupyter Notebooks](https://juejin.im/post/5cb5e0a9f265da036c577f24)([Daltan](https://github.com/Daltan) 翻译)
* [哪一个深度学习框架增长最迅猛?TensorFlow 还是 PyTorch?](https://juejin.im/post/5caefef45188251b070f7d70)([ccJia](https://github.com/ccJia) 翻译)
* [如何在 Keras 中使用 LSTM 神经网络创作音乐](https://juejin.im/post/5c9c19d7e51d453e7d28a173)([HearFishle](https://github.com/HearFishle) 翻译)
* [Chars2vec: 基于字符实现的可用于处理现实世界中包含拼写错误和俚语的语言模型](https://juejin.im/post/5c96fd46e51d4513e072c3ae)([kasheemlew](https://github.com/kasheemlew) 翻译)
* [基于 Python 的图理论和网络分析](https://juejin.im/post/5c9066b3f265da612e6d5770)([EmilyQiRabbit](https://github.com/EmilyQiRabbit) 翻译)
* [时间顺序的价格异常检测](https://juejin.im/post/5c998f8ae51d454e523b6ed5)([kasheemlew](https://github.com/kasheemlew) 翻译)
* [用长短期记忆网络预测股票市场(使用 Tensorflow)](https://juejin.im/post/5c8114de51882540a830b910)([Qiuk17](https://github.com/Qiuk17) 翻译)
* [2019 跟上 AI 的脚步:AI 和 ML 接下来会发生什么重要的事?](https://juejin.im/post/5c83c8ba5188250aa57a0e2f)([TUARAN](https://github.com/TUARAN) 翻译)
* [数据科学领域十大必知机器学习算法](https://juejin.im/post/5c73bbfff265da2da771d42a)([JohnJiangLA](https://github.com/JohnJiangLA) 翻译)
* [如何用 Python 从零开始构建你自己的神经网络](https://juejin.im/post/5c7a478c518825787e6a0f67)([JackEggie](https://github.com/JackEggie) 翻译)
* [提取图像中的文字、人脸或者条形码 — 形状检测 API](https://juejin.im/post/5c64026fe51d457f963d249c)([jerryOnlyZRJ](https://github.com/jerryOnlyZRJ) 翻译)
* [Python 的时间序列分析:简介](https://juejin.im/post/5c6c12def265da2ddc3c70ce)([ppp-man](https://github.com/ppp-man) 翻译)
* [从 Instagram 上的故事和反馈机器学习中收获的一些经验](https://juejin.im/post/5c683dfce51d45164c7599fb)([TrWestdoor](https://github.com/TrWestdoor) 翻译)
* [利用 Python中的 Bokeh 实现数据可视化,第一部分:入门](https://juejin.im/post/5c3c83c7f265da612d197bf0)([Starriers](https://github.com/Starriers) 翻译)
* [利用 Python中的 Bokeh 实现数据可视化,第二部分:交互](https://juejin.im/post/5c34a9dee51d4551d044efce)([Starriers](https://github.com/Starriers) 翻译)
* [利用 Python中的 Bokeh 实现数据可视化,第三部分:制作一个完整的仪表盘](https://juejin.im/post/5c3ae4656fb9a049d9757021)([YueYongDev](https://github.com/YueYongDev) 翻译)
* [降维技术中常用的几种降维方法](https://juejin.im/post/5c4513a06fb9a049dc028d0c)([haiyang-tju](https://github.com/haiyang-tju) 翻译)
* [如何使用 Dask Dataframes 在 Python 中运行并行数据分析](https://juejin.im/post/5c1feeaf5188257f9242b65c)([Starriers](https://github.com/Starriers) 翻译)
* [时间序列异常检测算法](https://juejin.im/post/5c19f4cb518825678a7bad4c)([haiyang-tju](https://github.com/haiyang-tju) 翻译)
* [支持向量机(SVM) 教程](http://5a77c24cf265da4e747f92e8/)([zhmhhu](https://github.com/zhmhhu) 翻译)
* [通过集成学习提高机器学习效果](https://juejin.im/post/5c0909d951882548e93806e0)([Starriers](https://github.com/Starriers) 翻译)
* [Google Colab 免费 GPU 使用教程](https://juejin.im/post/5c05e1bc518825689f1b4948)([haiyang-tju](https://github.com/haiyang-tju) 翻译)
* [鲜为人知的数据科学 Python 库](https://juejin.im/post/5c075e09518825159512715f)([haiyang-tju](https://github.com/haiyang-tju) 翻译)
* [强化学习中的好奇心与拖延症](https://juejin.im/post/5bff316651882548e937ef20)([haiyang-tju](https://github.com/haiyang-tju) 翻译)
* [使用递归神经网络(LSTMs)对时序数据进行预测](https://juejin.im/post/5bf8a70cf265da61776ba1dc)([haiyang-tju](https://github.com/haiyang-tju) 翻译)
* [深度学习将会给我们所有人的生活一个教训:工作是为了机器准备的](https://juejin.im/post/5bd71fd6f265da0aa94a5bce)([yuwhuawang](https://github.com/yuwhuawang) 翻译)
* [初创公司的数据科学:简介](https://juejin.im/post/5bd55b76f265da0ae472ce1b)([tmpbook](https://github.com/tmpbook) 翻译)
* [在 Keras 中使用一维卷积神经网络处理时间序列数据](https://juejin.im/post/5beb7432f265da61524cf27c)([haiyang-tju](https://github.com/haiyang-tju) 翻译)
* [使用 Python 的 Pandas 和 Seaborn 框架从 Kaggle 数据集中提取信息](https://juejin.im/post/5be8caf651882551cc25acf5)([haiyang-tju](https://github.com/haiyang-tju) 翻译)
* [使用 Pandas 对 Kaggle 数据集进行统计数据分析](https://juejin.im/post/5be8c994f265da61461db107)([haiyang-tju](https://github.com/haiyang-tju) 翻译)
* [如何使用 Python 格式化时间型数据](https://juejin.im/post/5be26d15f265da61776b720a)([Raoul1996](https://github.com/Raoul1996) 翻译)
* [使用 Pandas 在 Python 中创建一个简单的推荐系统](https://juejin.im/post/5be958416fb9a049af6cc969)([xilihuasi](https://github.com/xilihuasi) 翻译)
* [基于评论的机器学习在线课程排名](https://juejin.im/post/5bc997fd6fb9a05cdb106d7a)([davelet](https://github.com/davelet) 翻译)
* [语义分割 — U-Net(第一部分)](https://juejin.im/post/5bc55ec8f265da0a8f35ef20)([JohnJiangLA](https://github.com/JohnJiangLA) 翻译)
* [TensorFlow 中的 RNN 串流](https://juejin.im/post/5bcb2975f265da0a8d36c7d8)([sisibeloved](https://github.com/sisibeloved) 翻译)
* [使用 TensorFlow.js 进行无服务的机器学习](https://juejin.im/post/5bc13de2e51d450e827b88fc)([wzasd](https://github.com/wzasd) 翻译)
* [数据科学和机器学习面试问题](https://juejin.im/post/5bbb104f5188255c960c4d7e)([jianboy](https://github.com/jianboy) 翻译)
* [用 Python 实现马尔可夫链的初学者教程](https://juejin.im/post/5bb031d06fb9a05cdb104888)([cdpath](https://github.com/cdpath) 翻译)
* [Python 中的无监督学习算法](https://juejin.im/post/5bab10ed6fb9a05d1f2211b6)([zhmhhu](https://github.com/zhmhhu) 翻译)
* [用 Scikit-Learn 实现 SVM 和 Kernel SVM](https://juejin.im/post/5b7fd39af265da43831fa136)([rockyzhengwu](https://github.com/rockyzhengwu) 翻译)
* [Sklearn 中的朴素贝叶斯分类器](https://juejin.im/post/5b8510be51882542d23a1d66)([sisibeloved](https://github.com/sisibeloved) 翻译)
* [使用 Python 进行自动化特征工程](https://juejin.im/post/5b6ea0e4e51d4519044adff0)([mingxing47](https://github.com/mingxing47) 翻译)
* [Python 与大数据:Airflow & Jupyter Notebook with Hadoop 3, Spark & Presto](https://juejin.im/post/5b5a7fdfe51d453526175687)([cf020031308](https://github.com/cf020031308) 翻译)
* [自然语言处理真是有趣](https://juejin.im/post/5b6d08e2f265da0f9c67cf0b)([lihanxiang](https://github.com/lihanxiang) 翻译)
* [给人类的机器学习指南🤖👶](https://juejin.im/post/5b136f12f265da6e5415114b)([sisibeloved](https://github.com/sisibeloved) 翻译)
* [深度学习中所需的线性代数知识](https://juejin.im/post/5b19d99ae51d4506d81a7a2f)([maoqyhz](https://github.com/maoqyhz) 翻译)
* [可微可塑性:一种学会学习的新方法](https://juejin.im/post/5b055308f265da0ba063879d)([luochen1992](https://github.com/luochen1992) 翻译)
* [给初学者的 Jupyter Notebook 教程](https://juejin.im/post/5af8d3776fb9a07ab7744dd0)([SergeyChang](https://github.com/SergeyChang) 翻译)
* [如何在安卓应用中使用 TensorFlow Mobile](https://juejin.im/post/5afb8dc5518825426c690236)([luochen1992](https://github.com/luochen1992) 翻译)
* [在浏览器里使用 TenserFlow.js 实时估计人体姿态](https://juejin.im/post/5afd833b5188254270642ff3)([NoName4Me](https://github.com/NoName4Me) 翻译)
* [Google 的 ML Kit 为 Android 和 iOS 提供了简单的机器学习 API](https://juejin.im/post/5af2942e51882567244df836)([ALVINYEH](https://github.com/ALVINYEH) 翻译)
* [利用 Keras 深度学习库进行词性标注教程](https://juejin.im/post/5ae4613a5188256727742d7d)([luochen1992](https://github.com/luochen1992) 翻译)
* [Facebook 的 AI 万金油:StarSpace 神经网络模型简介](https://juejin.im/post/5a83af7c6fb9a0633c661404)([noahziheng](https://github.com/noahziheng) 翻译)
* [Facebook 开源了物体检测研究项目 Detectron](https://juejin.im/post/5a6c2ba56fb9a01cb64f0591)([SeanW20](https://github.com/SeanW20) 翻译)
* [使用深度学习自动生成HTML代码 - 第 1 部分](https://juejin.im/post/5a72744e6fb9a01cb64f1d66)([sakila1012](https://github.com/sakila1012) 翻译)
* [IBM 工程师的 TensorFlow 入门指北](https://juejin.im/post/5a3d1ecb518825256362de6a)([JohnJiangLA](https://github.com/JohnJiangLA) 翻译)
* [如何使用 Golang 中的 Go-Routines 写出高性能的代码](https://juejin.im/post/5a17c0f9f265da431a42e060)([tmpbook](https://github.com/tmpbook) 翻译)
* [RNN 循环神经网络系列 4: 注意力机制](https://juejin.im/post/59f72f61f265da432002871c?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([TobiasLee](https://github.com/TobiasLee) 翻译)
* [Keras 中构建神经网络的 5 个步骤](https://juejin.im/post/59e43b5b6fb9a0452a3b5f4f?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lsvih](https://github.com/lsvih) 翻译)
* [RNN 循环神经网络系列 3:编码、解码器](https://juejin.im/post/59fc1616f265da432b4a2d44?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([changkun](https://github.com/changkun) 翻译)
* [RNN 循环神经网络系列 5: 自定义单元](https://juejin.im/post/59fbd28b6fb9a045204b91f2?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lsvih](https://github.com/lsvih) 翻译)
* [Spotify 每周推荐功能:基于机器学习的音乐推荐](https://juejin.im/post/59fbd0d9518825299a468a8b?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lsvih](https://github.com/lsvih) 翻译)
* [RNN 循环神经网络系列 1:基本 RNN 与 CHAR-RNN](https://juejin.im/post/59f0c5b0f265da43085d3e94?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([changkun](https://github.com/changkun) 翻译)
* [RNN 循环神经网络系列 2:文本分类](https://juejin.im/post/59f0c6b3f265da4319557de4?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([changkun](https://github.com/changkun) 翻译)
* [什么是蒙特卡洛树搜索](https://juejin.im/post/59f16e8c5188250385371302?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([CACppuccino](https://github.com/CACppuccino) 翻译)
* [搭建个人深度学习平台](https://juejin.im/post/59be8e2b5188252c24746e9c?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([RichardLeeH](https://github.com/RichardLeeH) 翻译)
* [Uber 机器学习平台 — 米开朗基罗](https://juejin.im/post/59c8b4d56fb9a00a4843b2a6?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lsvih](https://github.com/lsvih) 翻译)
* [基于 TensorFlow 的上下文聊天机器人](https://juejin.im/entry/5992cd385188252433704fa3?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([edvardHua](https://github.com/edvardHua) 翻译)
* [使用 AI 为 Web 网页增加无障碍功能](https://juejin.im/post/59a51e91f265da2499603c8c?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lsvih](https://github.com/lsvih) 翻译)
* [在 Airbnb 使用机器学习预测房源的价值](https://juejin.im/post/59acfc336fb9a0249471e47d?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lsvih](https://github.com/lsvih) 翻译)
* [为什么我们渴求女性来设计 AI ](https://juejin.im/post/599c1e45518825242a02596e?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([TobiasLee](https://github.com/TobiasLee) 翻译)
* [巧用 ARKit 和 SpriteKit 从零开始做 AR 游戏](https://juejin.im/post/599aaf746fb9a02477072380?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([Danny1451](https://github.com/Danny1451) 翻译)
* [深度学习系列4: 为什么你需要使用嵌入层](https://juejin.im/post/599183c6f265da3e2e5717d2?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lileizhenshuai](https://github.com/lileizhenshuai) 翻译)
* [机器之魂:聊天机器人是怎么工作的](https://juejin.im/post/599155d86fb9a03c467c151d?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lsvih](https://github.com/lsvih) 翻译)
* [深度学习系列3 - CNNs 以及应对过拟合的详细探讨](https://juejin.im/post/598f25b15188257d8643173d?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lj147](https://github.com/lj147) 翻译)
* [深度学习系列2:卷积神经网络](https://juejin.im/post/598ac6a55188257dd366367f?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lsvih](https://github.com/lsvih) 翻译)
* [如何将时间序列问题用 Python 转换成为监督学习问题](https://juejin.im/post/598ac4e651882548605ce4a9?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lsvih](https://github.com/lsvih) 翻译)
* [深度学习系列1:设置 AWS & 图像识别](https://juejin.im/post/5987f5885188256dcf65d01e?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lileizhenshuai](https://github.com/lileizhenshuai) 翻译)
* [深度学习的未来](https://juejin.im/post/597843506fb9a06ba4747db5?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([changkun](https://github.com/changkun) 翻译)
* [论深度学习的局限性](https://juejin.im/post/5978352a6fb9a06bad6574a4?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([CACppuccino](https://github.com/CACppuccino) 翻译)
* [使用 Python+spaCy 进行简易自然语言处理](https://juejin.im/post/5971a4b9f265da6c42353332?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lsvih](https://github.com/lsvih) 翻译)
* [从金属巨人到深度学习](https://juejin.im/post/596f4cecf265da6c2f0adb04?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([XatMassacrE](https://github.com/XatMassacrE) 翻译)
* [在使用过采样或欠采样处理类别不均衡的数据后,如何正确的做交叉验证?](https://juejin.im/entry/5976dde9f265da6c2e0fc2f9/detail?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([edvardHua](https://github.com/edvardHua) 翻译)
* [如何处理机器学习中的不平衡类别](https://juejin.im/post/596f150551882549980c5f56?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([RichardLeeH](https://github.com/RichardLeeH) 翻译)
* [Scratch 平台的神经网络实现(R 语言)](https://juejin.im/post/5965cf75f265da6c4741adc4?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([CACppuccino](https://github.com/CACppuccino) 翻译)
* [你会给想学习机器学习的软件工程师提出什么建议?](https://juejin.im/post/596323416fb9a06bae1dff63?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)([lsvih](https://github.com/lsvih) 翻译)
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hi@xitu.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
================================================
FILE: README.md
================================================
# 掘金翻译计划
[](https://github.com/xitu/gold-miner)
[](https://github.com/xitu/gold-miner/)
[](http://weibo.com/juejinfanyi)
[](https://zhuanlan.zhihu.com/juejinfanyi)
[掘金翻译计划](https://juejin.im/tag/%E6%8E%98%E9%87%91%E7%BF%BB%E8%AF%91%E8%AE%A1%E5%88%92) 是一个翻译优质互联网技术文章的社区,文章来源为 [掘金](https://juejin.im) 上的英文分享文章。内容覆盖[区块链](#区块链)、[人工智能](#ai--deep-learning--machine-learning)、[Android](#android)、[iOS](#ios)、[前端](#前端)、[后端](#后端)、[设计](#设计)、[产品](#产品)、[算法](https://github.com/xitu/gold-miner/blob/master/algorithm.md)和[其他](#其他)等领域,以及各大型优质 [官方文档及手册](#官方文档及手册),读者为热爱新技术的新锐开发者。
掘金翻译计划目前翻译完成 [4000](#近期文章列表) 余篇文章,官方文档及手册 [13](#官方文档及手册) 个,共有 [1500](https://github.com/xitu/gold-miner/wiki/%E8%AF%91%E8%80%85%E7%A7%AF%E5%88%86%E8%A1%A8) 余名译者贡献翻译和校对。
> ## [🥇掘金翻译计划 — 区块链分舵](https://github.com/xitu/blockchain-miner)
# 官方指南
[**推荐优质英文文章到掘金翻译计划**](https://github.com/xitu/gold-miner/issues/new/choose)
<!--
https://github.com/xitu/gold-miner/issues/new?title=推荐优秀英文文章&body=-%20原文链接:推荐文章前%20Google%20一下,尽量保证本文未被翻译%0A-%20简要介绍:介绍一下好不好啦,毕竟小编也看不太懂哎_(:з」∠)_)
-->
### 翻译计划译者教程
1. [如何参与翻译](https://github.com/xitu/gold-miner/wiki/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E%E7%BF%BB%E8%AF%91)
2. [关于如何提交翻译以及后续更新的教程](https://github.com/xitu/gold-miner/wiki/%E5%85%B3%E4%BA%8E%E5%A6%82%E4%BD%95%E6%8F%90%E4%BA%A4%E7%BF%BB%E8%AF%91%E4%BB%A5%E5%8F%8A%E5%90%8E%E7%BB%AD%E6%9B%B4%E6%96%B0%E7%9A%84%E6%95%99%E7%A8%8B)
3. [如何参与校对及校对的正确姿势](https://github.com/xitu/gold-miner/wiki/%E5%8F%82%E4%B8%8E%E6%A0%A1%E5%AF%B9%E7%9A%84%E6%AD%A3%E7%A1%AE%E5%A7%BF%E5%8A%BF)
4. [文章分享到掘金指南](https://github.com/xitu/gold-miner/wiki/%E5%88%86%E4%BA%AB%E5%88%B0%E6%8E%98%E9%87%91%E6%8C%87%E5%8D%97)
5. [译文排版规则指北](https://github.com/xitu/gold-miner/wiki/%E8%AF%91%E6%96%87%E6%8E%92%E7%89%88%E8%A7%84%E5%88%99%E6%8C%87%E5%8C%97)
# 近期文章列表
## 官方文档及手册
* [年度总结系列](https://github.com/xitu/Annual-Survey)
* [TensorFlow 中文文档](https://github.com/xitu/tensorflow-docs)
* [The JavaScript Tutorial](https://github.com/xitu/javascript-tutorial-zh)
* [ML Kit 中文文档](https://github.com/Quorafind/MLkit-CN)
* [GraphQL 中文文档](https://github.com/xitu/graphql.github.io)
* [Under-the-hood-ReactJS 系列教程](https://github.com/xitu/Under-the-hood-ReactJS)
* [系统设计入门教程](https://github.com/xitu/system-design-primer)
* [Google Interview University 面试指北](https://github.com/xitu/google-interview-university)
* [前端开发者指南(2017)](https://github.com/xitu/front-end-handbook-2017)
* [前端开发者指南(2018)](https://github.com/xitu/front-end-handbook-2018)
* [Awesome Flutter](https://github.com/xitu/awesome-flutter)
* [macOS Security and Privacy Guide](https://github.com/xitu/macOS-Security-and-Privacy-Guide)
* [State of Vue.js report 2017 中文版](https://github.com/xitu/gold-miner/blob/master/TODO/state-of-vue-report-2017.md)
* [Next.js 轻量级 React 服务端渲染应用框架中文文档](http://nextjs.frontendx.cn/)
## 区块链
* [属于 JavaScript 开发者的 Crypto 简介](https://juejin.im/post/5ce0c39a51882525f07ef0fa) ([Xuyuey](https://github.com/Xuyuey) 翻译)
* [我们为什么看好加密收藏品(NFT)的前景](https://juejin.im/post/5cb87819518825329e7ea61e) ([portandbridge](https://github.com/portandbridge) 翻译)
* [2019 区块链平台与技术展望](https://juejin.im/post/5c613e6e6fb9a049e4132ba5) ([gs666](https://github.com/gs666) 翻译)
* [以太坊入门指南](https://juejin.im/post/5c1080fbe51d452b307969a3) ([gs666](https://github.com/gs666) 翻译)
* [以太坊入门:互联网政府](https://juejin.im/post/5c03c68851882551236eaa82) ([newraina](https://github.com/newraina) 翻译)
* [所有区块链译文>>](https://github.com/xitu/gold-miner/blob/master/blockchain.md)
## 人工智能
* [机器学习系统设计相关面试问题的剖析](https://juejin.cn/post/7109306303285051406)([caiyundong](https://github.com/caiyundong) 翻译)
* [如何使用 Python 管道 Pipe 高效编码](https://juejin.cn/post/7051051681357758494)([zenblofe](https://github.com/zenblofe) 翻译)
* [使用人工智能/机器学习构建文章推荐引擎](https://juejin.cn/post/7001479252163952670)([jaredliw](https://github.com/jaredliw) 翻译)
* [AI 是否已经成为内容营销的重要组成部分?](https://juejin.cn/post/6964280632801394724)([5Reasons](https://github.com/5Reasons) 翻译)
* [Google 的 Apollo 芯片设计人工智能框架将深度学习芯片的性能提高了 25%](https://juejin.cn/post/6952819856429285407)([PingHGao](https://github.com/PingHGao) 翻译)
* [所有 AI 译文>>](https://github.com/xitu/gold-miner/blob/master/AI.md)
## Android
* [6 条 Jetpack Compose 指南帮你优化 App 性能](https://juejin.cn/post/7153803045418041358)([Quincy-Ye](https://github.com/Quincy-Ye) 翻译)
* [React Native 开发者的流行存储方案](https://juejin.cn/post/7008020729832669191)([KimYangOfCat](https://github.com/KimYangOfCat) 翻译)
* [Jetpack Compose:样式和主题(第二部分)](https://juejin.cn/post/6995419287435345934)([Kimhooo](https://github.com/Kimhooo) 翻译)
* [探索 ANDROID 12:启动画面](https://juejin.cn/post/6983942336824737822)([Kimhooo](https://github.com/Kimhooo) 翻译)
* [Jetpack Compose:更简便的 RecyclerView(第一部分)](https://juejin.cn/post/6970858140824764424)([Kimhooo](https://github.com/Kimhooo) 翻译)
* [所有 Android 译文>>](https://github.com/xitu/gold-miner/blob/master/android.md)
## iOS
* [2021 的 SwiftUI:好处、坏处以及丑处](https://juejin.cn/post/7140825514108780580)([earthaYan](https://github.com/earthaYan) 翻译)
* [4 个鲜为人知的 Swift 特性](https://juejin.cn/post/7069326429397205005)([jaredliw](https://github.com/jaredliw) 翻译)
* [React Native 开发者的流行存储方案](https://juejin.cn/post/7008020729832669191)([KimYangOfCat](https://github.com/KimYangOfCat) 翻译)
* [逆向 `.car` 文件(已编译的 Asset Catalogs)](https://juejin.cn/post/7002491722550919198)([LoneyIsError](https://github.com/LoneyIsError) 翻译)
* [Swift 中的内存布局](https://juejin.cn/post/6986520506002472973)([LoneyIsError](https://github.com/LoneyIsError) 翻译)
* [所有 iOS 译文>>](https://github.com/xitu/gold-miner/blob/master/ios.md)
## 前端
* [全面刨析 CSS-in-JS](https://juejin.cn/post/7172360607201493029)([Tong-H](https://github.com/Tong-H) 翻译)
* [WebRTC 与 WebSockets 教程 — Web 端的实时通信](https://juejin.cn/post/7138015673850003493)([DylanXie123](https://github.com/DylanXie123) 翻译)
* [ES2022 有什么新特性?](https://juejin.cn/post/7114676836851777566)([CarlosChenN](https://github.com/CarlosChenN) 翻译)
* [作为一名前端工程师我浪费时间学习了这些技术](https://juejin.cn/post/7086019601372282888)([airfri](https://github.com/airfri) 翻译)
* [过度使用懒加载对 Web 性能的影响](https://juejin.cn/post/7074759905197948935)([Tong-H](https://github.com/Tong-H) 翻译)
* [如何在网页中使用响应式图像](https://juejin.cn/post/7074199947477778439)([zenblofe](https://github.com/zenblofe) 翻译)
* [如何编写更简洁优雅的 React 代码](https://juejin.cn/post/7070479272380465166)([zenblofe](https://github.com/zenblofe) 翻译)
* [用 PNPM Workspaces 替换 Lerna + Yarn](https://juejin.cn/post/7071992448511279141)([CarlosChenN](https://github.com/CarlosChenN) 翻译)
* [所有前端译文>>](https://github.com/xitu/gold-miner/blob/master/front-end.md)
## 后端
* [实现 Bitcask ,一种日志结构的哈希表](https://juejin.cn/post/7174345557861728292)([wangxuanni](https://github.com/wangxuanni) 翻译)
* [用 Isabelle/HOL 验证分布式系统](https://juejin.cn/post/7166450887626326030)([wangxuanni](https://github.com/wangxuanni) 翻译)
* [十大 Java 语言特性](https://juejin.cn/post/7140097107000000520)([jaredliw](https://github.com/jaredliw) 翻译)
* [使用令牌桶和熔断器进行重试](https://juejin.cn/post/7153093426446237727)([wangxuanni](https://github.com/wangxuanni) 翻译)
* [WebRTC 与 WebSockets 教程 — Web 端的实时通信](https://juejin.cn/post/7138015673850003493)([DylanXie123](https://github.com/DylanXie123) 翻译)
* [微服务架构何时会是一种坏选择](https://juejin.cn/post/7135364257918484488)([DylanXie123](https://github.com/DylanXie123) 翻译)
* [如何使用 Python 中的 PyPA setuptools 打包和部署 CLI 应用程序](https://juejin.cn/post/7125323312321789989)([haiyang-tju](https://github.com/haiyang-tju) 翻译)
* [10 个最难的 Python 问题](https://juejin.cn/post/7124285689717325831)([jaredliw](https://github.com/jaredliw) 翻译)
* [所有后端译文>>](https://github.com/xitu/gold-miner/blob/master/backend.md)
## 设计
* [5个关于 UI 设计系统的误解](https://juejin.cn/post/7086291006286462990)([CarlosChenN](https://github.com/CarlosChenN) 翻译)
* [别让轮播毁了你的应用程序](https://juejin.cn/post/7003637296050225189)([jaredliw](https://github.com/jaredliw) 翻译)
* [为 Web 开发同学准备的 11 个简单实用的 UI 设计小技巧](https://juejin.cn/post/6960922956876742669)([5Reasons](https://github.com/5Reasons) 翻译)
* [你有设计作品的作品集吗?挺好的,但这还不够](https://juejin.cn/post/6934328263011467277)([PassionPenguin](https://github.com/PassionPenguin) 翻译)
* [构建设计系统和组件库](https://juejin.cn/post/6924152501805678606)([Charlo-O](https://github.com/Charlo-O) 翻译)
* [所有设计译文>>](https://github.com/xitu/gold-miner/blob/master/design.md)
## 产品
* [Github Actions 是如何渲染超大日志的](https://juejin.cn/post/6966082485226569759)([felixliao](https://github.com/felixliao) 翻译)
* [算法不是产品](https://juejin.im/post/5e398e806fb9a07cb52bb462)([fireairforce](https://github.com/fireairforce) 翻译)
* [利用 84 种认知偏见设计更好的产品 —— 第三部分](https://juejin.im/post/5d568c9ce51d453bc64801cd)([JalanJiang](https://github.com/JalanJiang) 翻译)
* [想帮助用户做决定?你的 APP 可以这样设计!](https://juejin.im/post/5a7194986fb9a01c9f5bbbb2)([pthtc](https://github.com/pthtc) 翻译)
* [利用 84 种认知偏见设计更好的产品 —— 第二部分](https://juejin.im/post/5d37e1816fb9a07ee1696a4e)([JalanJiang](https://github.com/JalanJiang) 翻译)
* [所有产品译文>>](https://github.com/xitu/gold-miner/blob/master/product.md)
## 其他
* [自动化测试:你应当了解的一切](https://juejin.cn/post/7084071159821500447)([samyu2000](https://github.com/samyu2000) 翻译)
* [使用了三个月的 Github Copilot,这是我的一些看法……](https://juejin.cn/post/7067817036738461732)([jaredliw](https://github.com/jaredliw) 翻译)
* [5 个有趣的原因告诉你:找对象就得找程序员!](https://juejin.cn/post/7053326045352558599)([jaredliw](https://github.com/jaredliw) 翻译)
* [WasmEdge 的安装与卸载](https://github.com/xitu/gold-miner/blob/master/article/2022/Install-and-uninstall-WasmEdge.md)([jaredliw](https://github.com/jaredliw) 翻译)
* [使用 Python 模拟实现行星际空间旅行](https://juejin.cn/post/7047685861365776414)([zenblofe](https://github.com/zenblofe) 翻译)
* [所有其他分类译文>>](https://github.com/xitu/gold-miner/blob/master/others.md)
# Copyright
> **版权声明:**[掘金翻译计划](https://github.com/xitu/gold-miner)译文仅用于学习、研究和交流。版权归[掘金翻译计划](https://github.com/xitu/gold-miner/)、文章作者和译者所有,欢迎非商业转载。转载前请联系译者或[管理员](https://user-images.githubusercontent.com/8282645/118856035-10a49d80-b909-11eb-8561-00a5a16bd58a.png)获取授权,并在文章开头明显位置注明本文出处、译者、校对者和掘金翻译计划的完整链接,违者必究。
# 合作伙伴
<a href="http://www.ituring.com.cn/" target="_blank"><img src="https://i.loli.net/2018/03/21/5ab1c8723d6de.jpg" width="130px;"/></a>
================================================
FILE: TODO/10-best-reactjs-ui-frameworks-for-rapid-prototyping.md
================================================
> * 原文地址:[10 Best ReactJS UI Frameworks for rapid prototyping](https://hashnode.com/post/10-best-reactjs-ui-frameworks-for-rapid-prototyping-cit49tqx414z89c53equ4zc5k?utm_source=Feed%20Digest&utm_medium=email&utm_campaign=Hashnode%20Feed%20Digest)
* 原文作者:[Tom Alter](https://hashnode.com/@tomasp)
* 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者:[cyseria](https://github.com/cyseria)
* 校对者:[Zheaoli](https://github.com/Zheaoli),[Grace-xhw](https://github.com/Grace-xhw)
# 快速构建原型最好用的 10 个 ReactJS UI 框架
我正在探索一些基于 React 的,可以很好的和 React 组件结合起来,并且能直接在你的 React 项目中插入使用的功能丰富的 UI 框架。
下面列举了一些基于 ReactJS 编译的 UI 框架(排名不分先后),希望以下内容的能帮助你快速用 ReactJS 原型实现你的想法:
* * *
## Material UI
Material-UI 是基于 Google 的质感设计(Material Design)产生的一套丰富的 React 组件。
在数以百计的 UI 框架中,Material UI 是最准确的实现了质感设计的一个 UI 框架。

[主页](http://www.material-ui.com/) | [案例](http://www.material-ui.com/#/components/)
* * *
## React-Bootstrap
这个还要解释吗?毫无疑问 Bootstrap 是这里最受欢迎的 UI 框架。
Bootstrap 是最先进的 UI 框架之一并且能帮我们做大部分的事情。这个就是 Bootstrap 3 的 React 组件。

[主页](https://react-bootstrap.github.io/) | [案例](https://react-bootstrap.github.io/components.html) | [GitHub](https://github.com/react-bootstrap/react-bootstrap/)
* * *
## React-Foundation
来自 Zurb 的 [Foundation](http://foundation.zurb.com/) 是一个功能丰富且很容易自定义的库,也是目前最受欢迎的 UI 框架之一。
React-Foundation 是在形式上用 Foundation UI 实现的 React 组件。

[主页](https://react.foundation) | [GitHub](https://github.com/nordsoftware/react-foundation)
* * *
## Essence
Essence 是一个用 ReactJS 实现了谷歌的 Material Design 规范的 CSS 框架。使用 Essence 你可以快速构建一个很好看的很棒的响应式网站( web 端和移动端)。

[主页](http://getessence.io/home) | [案例](http://getessence.io/core)
* * *
## React-MDL
React-MDL 是用 React 实现的已经火了很久的谷歌的 [轻质感设计(Material Design Light)](https://www.getmdl.io/components/index.html) 框架。
MDL 作为一个轻质感设计的 CSS 框架,致力于在保持 UI 的小巧轻便的同时保留质感设计的概念。

[主页](https://tleunen.github.io/react-mdl/) | [案例](https://tleunen.github.io/react-mdl/components/)
* * *
## Belle
Belle 给你提供了一个的 React 组件的集合,像开关、下拉列表、等级评定、文本框、按钮、卡片、选择框等等。
所有的组件都能在移动端和桌面上极优的运行。他有两个级别给你来做高度的自定义,你可以配置所有组件的基本样式或者随意修改其中的某一个。

[主页](http://nikgraf.github.io/belle/) | [GitHub](https://github.com/nikgraf/belle)
* * *
## Elemental-UI
Elemental-UI 是一个高质量的模块化的,能够用 React 来控制并且从一开始就被定义为能自然实现 React 模式的 UI 脚手架组件
Elemental-UI 借鉴了很多 UI 组件库的灵感,看起来就像是一个增强版的 Bootstrap。如果你是他的粉丝你一定要去试试。

[主页](http://elemental-ui.com/) | [Github](https://github.com/elementalui/elemental)
* * *
## MUI
MUI 是一个借鉴 Material Design 规范的一个轻量级 CSS 框架。MUI 只提供 CSS 和 JS,有 React 和 Angular 这两个版本。

[主页](https://www.muicss.com/) | [GitHub](https://github.com/muicss/mui)
* * *
## Grommet
Grommet 是一个基于 ReactJS 用 JavaScript 提供了的一个很好的构造用户界面的例子。
Grommet 是开发者 HP 开发的,他们宣称这是在企业应用中有最好的用户体验的框架。

[主页](https://grommet.github.io/) | [Demo](https://grommet.github.io/docs/get-started) | [GitHub](https://github.com/grommet/grommet)
* * *
## React Toolbox
React Toolbox 又是一个采用 Google 的 Material Design 的 UI 库,并且采用了一些最新的构建方法,像 CSS 模块化(用 SASS 编写),Webpack 和 ES6。这个库完美的结合了 Webpack 工作流,并且拥有非常容易的个性化配置以及非常灵活。

[主页](http://react-toolbox.com/) | [案例](http://react-toolbox.com/#/components) | [GitHub](http://www.github.com/react-toolbox/react-toolbox)
* * *
## Ant Design of React
Ant Design 是一个中国公司(蚂蚁金服)设计的 React 库,基于他们自己项目的设计规范。是一套由 React 构建的漂亮的完整 UI 组件,采用 Material Design 设计原则。
他们正在寻找志愿者来完善他们的英文翻译(例如,时间选择器组件需要翻译),如果你有兴趣,请查看 [这个issue](https://github.com/ant-design/ant-design/issues/1471)。

[主页](http://beta.ant.design/docs/react/introduce) | [GitHub](https://github.com/ant-design/ant-design)
## 总结
这里只是一个我收集到的框架的一个简单列表,希望他能帮到大家。
如果有漏掉什么其他框架,欢迎评论。😊
================================================
FILE: TODO/10-steps-to-better-hybrid-apps.md
================================================
>* 原文链接 : [10 steps to better hybrid apps](https://medium.com/net-magazine/10-steps-to-better-hybrid-apps-e8e33831ea5e#.4fh1wbsy9)
* 原文作者 : [Oliver Lindberg](https://medium.com/@oliverlindberg)
* 译文出自 : [掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者 : [Yves X](https://github.com/Yves-X)
* 校对者: [Malcolm](https://github.com/malcolmyu), [circlelove](https://github.com/circlelove)
# 10 步带你做一个棒棒的 Hybrid 应用
**随着 Hybrid 应用人气渐涨,人们创造了越来越多的工具帮助开发者高效创建跨平台应用。** [**James Miller**](https://twitter.com/jimhunty) **介绍了 10 条建议以助你得到最佳成果。**

<figcaption>插图来自 [Luke O’Neill](http://lukeoneill.co.uk)</figcaption>
为手机和平板开发应用程序并非移动开发者的专利。如今 Web 开发者可以通过原生应用封装工具,使用 HTML、CSS 与 JavaScript 来构建自己的应用,而无需了解任何设备特定代码。这种方式使用设备的 Web 视图,像浏览器一般去展示 Hybrid 应用中基于 Web 的代码。在这 10 条建议的帮助下,你将把自己的 Hybrid 应用打造得尽善尽美。
#### **1\. 规划**
在开始开发前规划你的应用能避开许多坑,带来更成功的结果。开发过程中的很多情况,应该在规划阶段中考虑清楚。
Hybrid 应用使用的 Web 视图实际上是按比例缩小的浏览器,你需要预见到,那些存在于传统浏览器的问题,在这里也同样存在。理解你的目标受众及其期望,有助于明确你的应用的技术短板。这可以与设备分析一道,帮助你发掘潜在性能,并达到更高的性能指标。
一旦你知道你的目标受众想要什么,你需要考虑发行渠道。Google Play 和 Apple 的 App Store 是最大的两个生态系统。为了在这些商店上架你的应用,你必须确定你的应用遵循它们的准则。
Google Play 对应用审查提供了更多回溯渠道,发行也相对容易。然而举报能使你的应用遭到移除。遵循这份[准则](https://play.google.com/about/developer-content-policy.html?rd=1)会让你的应用更有望列入精选。
Apple 有更严格的[准则](https://developer.apple.com/app-store/review/guidelines/),堪称一项挑战。你需要整合手机的原生功能,而非构建一个 Web 应用了事。需要整合的功能包含相机、定位和其它一些功能,在适当的框架下它们能通过 JavaScript 插件调用。不要仅仅为了迎合商店准则去添加功能,要确认它们真的是用户想要的。

<figcaption>**避免违规** 使用 Google Play 的内容审查工具把那些可能违规的国家从你的发行列表中移除。</figcaption>
#### 2\. 市场考虑
应用程序是一种全球性产品,但不像 Web 一般开放,它们主要可用于特定国家的应用商城。每个国家有其不同的文化和法律。不要假设你的应用全球通吃,这很重要——在一个不合适的国家上架,对你的品牌弊大于利。
同样重要的是注意欲发行国家的网络局限性。并非处处都有快如闪电的移动互联网接入或 Wi-Fi 热点。即使你的应用不是面向新兴市场,网络连接依然是个问题。使应用的网络请求轻量一些,并试着保持最少吧。
#### 3\. 可扩展性
无论是登录还是更新数据,大多数应用程序需要一个网络组件。这需要一些形式的服务器与 API。当你的应用俘获了更多用户,这份压力会加诸你的后端,像是超时和错误等会愈演愈烈。为了避免这个问题,计划好你的后端将如何升级很重要。你的 API 应该遵循 REST 风格的接口模式来建立一个工作标准。还要考虑加以验证,因为一个开放的 API 可能会遭到滥用。终端也必须正确管理,因为一旦应用发布,鉴于审查流程,可能需要数周才能让更新版本得以运行。
也许有朝一日你的 API 会收到过多请求然后挂掉。别急着投资于更多服务器,现有大量的后端即服务(BaaS)可选择,包括 [Parse](http://parse.com) 和 [Firebase](http://firebase.com) 在内,它们可以助你搞定这个问题。它们储存你的数据,并常提供基于你的数据结构和认证方式的标准 API。 还有许多基于用量的免费套餐。在全球覆盖、优良技术和强力网络的支持下,你知道自己应用的网络部件将有良好性能。

<figcaption>**Parse** Facebook 的 BaaS 解决方案,使你不再需要投资于私有服务器</figcaption>
#### 4\. 性能
在用 Web 视图呈现的 Hybrid 应用中,老掉牙的多浏览器和多操作系统支持程度不同的问题又会出现。这在 Web 上用渐进增强解决,同样的策略亦可用于 Hybrid 以提供平滑的跨平台体验。
拥有太多后台进程会逐渐榨干电量、拖低性能。考虑使用像 AngularJS 或者 Ember.js 这样的框架将你的应用构建为单页应用吧。这会使你结构化你的代码,使你的应用更易维护。这个通行做法将保证更好的性能,并减少内存泄漏的可能。像是 Ionic 这样包含了 Cordova、AngularJS 以及自有 UI 组件的框架,用于构建快速原型和最终产品都不赖。
在移动设备上,CSS 动画的性能比 JavaScript 更好。试着以每秒 60 帧为目标,给应用原生感,并且在可以使动画更带感的地方使用硬件加速。

<figcaption>**便捷框架** Ionic 框架提供了结构化的方法来构建你的 Hybrid 应用</figcaption>
#### 5\. 交互设计
近乎所有移动设备都主要靠触控操作。基于这种认识,尽量跳出 Web 的局限来思考,使用基于手势的简单交互,让你的应用体验尽量直观。触屏设备没有 hover 状态,所以要考虑换用 active 和 visited 状态之类的视觉提示。
> 跳出 Web 的局限来思考,使用基于手势的简单交互,让你的应用体验尽量直观
在触屏设备上,用户触摸屏幕到事件被触发之间有 300 毫秒的延迟。这是由于 Web 视图等着确认是单击还是双击。尽管乍一听并不长,但这延迟是可察觉的。为了克服它,在你的项目中添加 [FastClick](http://github.com/ftlabs/fastclick) 脚本库并在 body 对它实例化。
#### 6\. 响应式设计
如今设备的屏幕尺寸千差万别,涵盖了广泛的分辨率。所幸响应式设计原则仍然适用于 Hybrid 应用与平板电脑。在你选定的设备范围内,专注于最小的屏幕尺寸,然后选择你想要拉伸覆盖的断点。横向和纵向试图都要考虑。它们都可以在构建应用时锁定,这有助于减小复杂度和引导用户行为。
想一想你要如何使用应用设计规范:弹出菜单,固定头部以及列表设计。有限的屏幕尺寸适合于使用图标而不是文本来叙述,但是恰当的标签仍有助于提升可访问性。尽管用户们期待特定元素,不要让此局限你的设计。
#### 7\. 图片
高清屏幕是移动设备厂商的优先选择。但别忘记,许多用户仍然使用屏幕分辨率较低的旧设备。针对你目标市场的设备选用适当的图片,并且确保每一张图片看上去都尽可能好。当图片经常复用时,在设备上储存它们。文件体积可以比你通常在移动网站上使用的更大,但也必须考虑到设备内存大小。对 Retina 屏幕酌情使用 SVG 来最大化视觉输出,但要留心设备支持情况。
#### 8\. 网络
采取离线优先的做法。用移动设备,用户总会有没有网络连接的时候,不应该以用户体验受损收场。通过在本地缓存网络请求来搞定它,从而优化信号不好甚至没有信号的时候的体验。
> 采取离线优先的做法。通过在本地缓存网络请求来优化信号不好甚至没有信号的时候的体验。
本地保存脚本。Web 开发中,外链脚本会提升性能,因为它们更可能被缓存。这在应用程序中就行不通了——就算没有网络,应用也要工作。脚本往往并不会拖累文件体积和连接速度,却带来更快的加载速度以及原生感。如果你的用户路径的预设性很强,不妨试试提前预加载数据,带来无缝衔接的体验。
#### 9\. 插件
正如之前所述,通过使用相机、定位或是社交分享添加原生功能来扩展你基于 Web 的应用,能够显著提升用户体验。通常你无法通过移动 Web 浏览器来调用原生功能,但这可以在 Hybrid 应用中使用插件实现。
Cordova 是一款 Hybrid 应用封装工具,它有大量可用 JavaScript 调用的相关插件。详见 [Plugreg](http://plugreg.com),它们的目录。
要对第三方插件保持警惕。移动操作系统迅速发展,缺乏支持的第三方插件可能导致问题、减少电池寿命,还可能让你的应用不稳定。去找那些在 Github 上好评如潮并且开发活跃的项目。
#### 10\. 测试
Hybrid 应用的核心以 Web 技术构建。这意味着非设备的功能可在浏览器里得到测试。使用像 gulp 或 Grunt 这样的任务运行器启动 LiveReload 之类的工具,创建一个有效的并行开发和测试流程。
接下来的一步是模拟。Google Chrome 提供了[移动模拟器](https://developer.chrome.com/devtools/docs/device-mode),所以你可以在最流行的设备间测试各种屏幕分辨率,这对设计断点很有帮助。Apple 提供了 [iOS 模拟器](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/iOS_Simulator_Guide/Introduction/Introduction.html)作为 Xcode 的一部分,而 Google 提供了 [Android 模拟器](http://developer.android.com/tools/help/emulator.html)作为它的开发者工具的一部分。
这向你提供了在模拟设备上测试你的应用的机会,这比在物理设备上搭建更快,并且意味着你可以测试原生设备的功能。然而模拟器性能取决于你的机器,Android 模拟器更是特别慢。这也导致 [Genymotion](http://genymotion.com) 创造了一个竞品,它模拟 Android 快得多。
你不该上架一款从未在至少一部真机上完全测试过的应用。真机环境与模拟器一样有用,它能够突显性能问题和关于用户交互的痛点。
#### 结论
这 10 条建议为你将构想转化为全功能的移动应用提供了一个良好的开端。然而,在 Web 开发的方方面面,Hybrid 应用的发展步伐如此迅速。随着社区成长,新工具和新技术几乎每天都在涌现。
如果你真的决定在 Hybrid 应用的世界里深耕细作,社区将是你最宝贵的资源之一。前来参加会议和聚会很有价值,这能让你与最新进展齐头并进,并分享自己的创造。我们期待着一览你的高见!
#### 流行的 Hybrid 应用框架
[CORDOVA](http://cordova.apache.org)
原始且最受欢迎的开源 Hybrid 框架。JS APIs 可调用手机原生功能。它有助力开发跨平台应用的 CLI。
[PHONEGAP](http://phonegap.com)
PhoneGap 是在 Cordova 基础上构建的 Adobe 产品。这俩基本是一样的,但 PhoneGap 提供了额外的服务,包括云上的应用构建和跨渠道经销。
[IONIC](http://ionicframework.com)
Ionic 为商业逻辑和设计准则给 Cordova 添加了 AngularJS 和自有 UI 框架。它基于 Cordova 的 CLI,并向之添加了 LiveReload 这样的服务来部署设备。[Ionic Creator](http://creator.ionic.io) 允许使用它的 Web 接口创建应用。
[APPCELERATOR](http://appcelerator.com)
它提供了一个用以构建原生和 Web 应用的统一平台,辅以自动化测试工具、实时分析和 BaaS。它旨在提供你部署和延伸应用所需的一切,且这些服务在你应用上架以前都是免费的。
[COCOONJS](http://ludei.com/cocoonjs)
提供了一个应用封装工具,它有内置以及改装的 Canvas 和 WebGL 引擎。这使得它成为用 Web 技术写 iOS 和 Android 游戏的理想环境。
================================================
FILE: TODO/10-things-you-probably-didnt-know-about-javascript-react-and-nodejs-and-graphql-development-at-facebook.md
================================================
>* 原文链接 : [10-things-you-probably-didnt-know-about-javascript-react-and-nodejs-and-graphql-development-at-facebook](https://hashnode.com/post/10-things-you-probably-didnt-know-about-javascript-react-and-nodejs-and-graphql-development-at-facebook-cink0r0e500h5io53fpl7ediu)
* 原文作者 : [Sandeep Panda](https://hashnode.com/@sandeep)
* 译文出自 : [掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者 : [Jack](https://github.com/Jack-Kingdom)
* 校对者: [DeadLion](https://github.com/DeadLion),[Joddiy](https://github.com/joddiy)
# 10 个你可能不知道的事,关于 Facebook 内部开发环境是如何使用 JavaScript 和 GraphQL 的
最近, 来自 Facebook 的 Lee Byron ([@leebyron](https://hashnode.com/@leebyron)) 在Hashnode上主办了一场 [AMA](https://hashnode.com/ama/with-lee-byron-cin0kpe8p0073rb53b19emcda)( Ask Me Anything )。 这里提出了许多有趣的问题,并且 Lee 透露了一些关于 Facebook 如何使用 React 、GraphQL 、和 React Native 的惊人事实与细节。我拜读了他在 AMA 上的回答,思考并总结出了十条有趣的重点。
那么,开始吧。
## React 背后的灵感?
React 一定程度上受到了 [XHP](https://github.com/facebook/xhp-lib) 的启发,来自 Facebook 的 Marcel Laverdet 在2009年创建了此项目,用于模块化 Facebook 的用户界面。详见[这里](https://hashnode.com/ama/with-lee-byron-cin0kpe8p0073rb53b19emcda#cin120uib00edlv533i6d8yd7)。
## Facebook计划用React Native 重写他的移动应用吗?
好吧, 答案是 : _他们已经这样做了_。 有一部分 Facebook 的应用使用了 React Native 构建,也有一部分不是。 详细的答案见这个[讨论](https://hashnode.com/ama/with-lee-byron-cin0kpe8p0073rb53b19emcda#cin6vg5r201wqjh53ne77tao1).
## 哪些场景正在使用 Immutable.js ?
* Ads Manager 和他们基于 React Native 的 Android 和 IOS 应用。
* Messenger 网站 ([messenger.com](https://hashnode.com/util/redirect?url=http://messenger.com))
* 用 Draft.js 写的新文章。
* 在 Facebook News Feed 上所有的评论。
## Facebook 如何为 React 组件写 CSS ?
Lee 透露到他们禁止导入 CSS 规则到除 React 组件以外的任意文件。 这样不仅确保了一个组件经由格式化的属性所应该暴露出的正确的 API ,同时其他的组件不能够通过导入一个规则来覆盖他。 此外,他们并不需要通过 JavaScript 的一些技巧来导入 CSS 文件。相反,他们遵循`Button.js` 临靠 `Button.css` 的规范。详见 [这里](https://hashnode.com/ama/with-lee-byron-cin0kpe8p0073rb53b19emcda#cin5qpdbv01apk85319o2c1fx)。
## Facebook 会随着每个 React 重要发行版而更新 React 组件吗?
* 是的,他们会。
* Facebook 通常将 React **master** 分支用于生产环境
* 从2012开始,React API 并没有进行多少重大的更改。 因此,React 团队也很少面临必须更新组件的状况。
* 如果有突发的更新,React 团队的成员 Ben Alpert 将会负责代码库的所有同步工作。
* 他们也会使用类似 [jscodeshift](https://github.com/facebook/jscodeshift) 的自动化工具去简化问题。
## GraphQL 背后的故事是什么?
GraphQL 诞生于2012年,当时 Lee 正在 IOS 组致力于 News Feed 。 当时,在一些网络环境糟糕的地区,Facebook 正急速增长。 因此, GraphQL 最初被设计于应对缓慢的手机连接。 不久,当 Relay 正准备开源时,他们认为缺乏 GraphQL ,Relay 的开源就没有多少意义。 同时,他们也意识到 GraphQL 服务编写得很巧妙并且大多数 Facebook 以外的公司都未尝使用过。因此,他们决定通过编写一个语言无关的规范来发布它。那就是 GraphQL 背后的故事。详情可阅读 [此处](https://hashnode.com/ama/with-lee-byron-cin0kpe8p0073rb53b19emcda#cin1gw37n00kwlv53rretxpe8) 的回答。
## Facebook 正在什么场景使用 GraphQL ?
Facebook的 Android 和 IOS 应用 几乎全部依赖于 GraphQL 支持。 在一些情况下, 如Ads Manager,整个应有都在使用 Relay + GraphQL 。
是的, Facebook 重度依赖 SSR 。尽管如此,Lee 说他们很少有在服务器使用 React 渲染组件的场景。这个主要取决于他们的服务器环境。
## Facebook 使用 Node.js 吗?
Lee 说他们有许多客户端的工具由 Javascript 编写并通过 Node 运行。[remodel](https://github.com/facebook/remodel) 就是这样一个通过 npm 安装的工具.他们所有的 IOS 和 android 上的内部 GraphQL 客户端工具都在使用 Node 。但是他们在服务器端使用 Node 并不多,因为迄今都没有一个强烈的需求。 即使某一天他们想在服务器端使用 Javascript (例如:在服务器上渲染 React ),他们也会直接使用 V8 引擎而非 Node 。
## Falcor (by Netflix) 对比 GraphQL 如何?
据 Lee 所说, 两个工具都在尝试解决类似的问题。当 GraphQL 团队第一次听说 Falcor 时,他们与 Netflix 团队见了一面并交换了一些想法。虽然如此,Falcor 与GraphQL 之间还是有许多区别的。阅读 [此处](https://hashnode.com/ama/with-lee-byron-cin0kpe8p0073rb53b19emcda#cinj7lim4002lid53x47g060n) 的回答可以知道更多。
我希望你能喜欢这份非常简短的总结。 详细的回答与讨论请移步 [AMA 页面](https://hashnode.com/ama/with-lee-byron-cin0kpe8p0073rb53b19emcda)。
================================================
FILE: TODO/101-ways-to-make-your-website-more-awesome.md
================================================
>* 原文链接 : [101 Ways to Make Your Website More Awesome](https://medium.freecodecamp.com/101-ways-to-make-your-website-more-awesome-79c934dd2a11#.enfq945da)
* 原文作者 : [Nicholas Tart](https://medium.freecodecamp.com/@wntart)
* 译文出自 : [掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者 : [达仔](https://github.com/zhangjd)
* 校对者: [jamweak](https://github.com/jamweak)、[cyseria](https://github.com/cyseria)
# 让你的网站更炫酷的一些小 tips
上周,我和一位老客户聊天,她说:“尼克,我觉得我的网站需要改进,但我不能确定我具体需要做什么。”
然后我就去问了一圈,包括朋友、家人和其他非互联网行业的商务人士,他们都提到了相同的观点:
> “我需要一个检查清单,因为我不知道怎样建站,这也是我要雇人来做这件事情的原因。但是我依然需要知道这个过程涉及到哪些方面。”
因此,我列了一个我们在 [AwesomeWeb](https://awesomeweb.com/) 上完成的优化清单(以及一些我们还没完成的)。
我敢保证:
如果你能把列表的每一项问题都改好,你将会拥有业界里最好的网站之一。
_你是怎么知道的?_
在 AwesomeWeb 里,我已经评估过 1,000 多个自由职业者。据我所了解的情况,我从没见过一个网站可以把所有选框都打上勾的。
对于企业老板,根据这个列表,你可以了解到接下来可以做哪些改进工作,然后把它发给你的设计或者开发去修改。你甚至还可以自己去修复其中的一部分问题。
对于自由职业者,使用这个列表可以让你做出更加酷炫的内容,然后回去找你的老客户们,对他们说:
“我重新回顾了之前的项目,我们可以修复这里、这里和这里,给我 $500, $1000, $5000 然后你可以期待得到以下的改进结果……”
重点是…
…我希望可以帮你构造出更加酷炫的网站。事不宜迟,现在进入正题,开始介绍这个列表:
### 酷炫的品牌
1. 挑选一个 `专业的 logo`,现在很难找到一个带有很棒的 logo 的网站或者博客,因此这是一个瞬间获取信任感的好方法。
2. 上传一个 `支持 retina 屏幕的 favicon` (在浏览器标签上显示的正方形小图标)。大部分网站的 favicon 都是 16x16 像素的,在 retina 屏幕会显得模糊。使用 [X-Icon Editor](http://www.xiconeditor.com/) 生成 64x64 像素大小的 favicon。
3. 使用 `支持 retina 屏幕的图片`。这很简单,只需要确保图片宽高是容器的两倍,然后显示时缩放就可以了。
4. `最多使用 2-3 种颜色`。包括背景色、文字-动作颜色和强调色。
5. 选择调色板时,从 `互补色或者三色组`(complementary or triad colors)开始选择,然后再进行调整。好的颜色组合会给你带来充满故事感的设计。
6. `不要使用纯黑色` (#000000)。纯黑色是不存在的,所以在网上使用纯黑色看起来不合适。实际上,黑色应该总是作为其它颜色的深色阴影。
7. `不要使用浅灰色` (比如 #cccccc)。如果你希望设计更显个性化,可以试着添加一点黄色显得温暖,添加红色给予能量,而蓝色产生信任。
### 酷炫的排版
1. 挑选一种 `优质的字体`。使用 [Typekit](https://typekit.com/) 之类的服务吧。据说多达 95% 的网站都是有排版的,想要产生良好的第一印象,使用优质字体是最简单、成本最低的方法。
2. `最多使用 2-3 种字体`。使用更多字体会显得杂乱,并且减慢加载时间。挑选一种字体用在头部,一种用在段落中,如果有需要的话,还可以挑选一种用在其它特殊情况里。
3. 设置 body 的字体大小为 `最小 16px`,更小的字体在大屏幕中不方便阅读,如果是移动端页面可以考虑的最小值为 12px。
4. 设置 `排版缩放比例`,就像(乐理中有)增四度,纯五度音程或者(在绘画使用)黄金比例。根据比例来设置段落文本大小,以及 H4, H3, H2 和 H1 标签。当然,文本的行高和间距也要基于这个比例。
5. 设计其它的 `排版元素`,包括引用、符号列表、数字编号列表、表格标题、帮助文本、警告框、高亮文本、代码示例、缩写甚至地址。
6. 选择一种 `自定义图标字体`,比如 [Font Awesome](https://fortawesome.github.io/Font-Awesome/),来代替图片和其它一些元素,比如社交媒体 logo、导航按钮、交互图形等。图标字体的加载速度更快,可以任意缩放,并且可以随意更改图标颜色。
### 酷炫的布局
1. 使用 `三分法` 来设计基本布局。水平垂直把布局划成三等分,然后当线段横穿时,设法对齐关键的焦点。
2. 使用一个网格系统来维护 `垂直方向的网格`。把你的布局分隔成 8 列、12 列或者 16 列的布局,列与列之间带有足够空白。
3. 使用 `基线网格` 保持垂直方向的调和感。文本行之间的空间,和内容块之间的空间都同样重要。每行文本应该都拥有一定的底部外边距,也就是位于基线的地方。
4. `空白` 是奢侈的。空格的存在是为了创造呼吸空间和平衡,你应该把读者的眼球吸引到重要的地方去。
5. `均衡摆放视觉元素`,比如按钮、输入框、表单和大标题等。你应该把眼睛眯起来,试着跟踪那些你想让用户关注到的路径点。
### 酷炫的用户界面
1. 使用大大的加粗的 `行为按钮`。每个页面应该只有一个目标,而且几乎都是点击一个按钮而已。所以确保这个按钮不会被用户忽略。
2. 添加 `鼠标悬停 (hover) 和鼠标点击 (active) 状态` 的样式给链接、按钮、输入框和文字区域。如果你选择在鼠标悬停时让按钮颜色变亮,那你也应该对于链接和输入框边框给出同样的样式。
3. 保持 `表单样式` 的一致性。所有的文本区域和输入框都应该有相同的样式。包括相同的边框颜色、背景颜色、悬停状态、点击状态、占位符文字、点击状态文字等。确保 tabindex 属性的正确设置,以便用户可以使用 tab 键在表单项之间用正确的顺序切换。
4. 改变 `已经点击过的链接` 的颜色,让用户知道他们已经去过那个页面了。
5. 一旦你拥有了自己的 logo、颜色、排版、布局和图像大小,你要建立一个 `风格指南`。好的用户界面应该使用风格一致的组件,其样式应该总是相同的。
### 酷炫的用户体验
1. 在按钮和其它表单域元素使用 `微交互(microinteractions)`。比如,点击上传按钮之后,提示文字可以变为 “正在上传” 或者 “处理中”。
2. `不要使用 scroll jacking` (译注:通过重新定义鼠标滚动速度、幅度达到控制可视区域视觉效果的方式)!不要打乱浏览器的默认行为,虽然你可能会觉得让滚动速度变成原来的两倍很不错,但事实并非如此。
3. `放弃使用首页轮播`。轮播会减少转化率,可以考虑使用更佳的方法来在有限空间显示更多信息。
4. `不要使用欢迎界面`。当用户第一次打开首页时,用户希望能直接看到首页内容。
5. 使用 `标题、副标题、头段落、列表、表格标题` 让你的内容更容易被检索。大部分人在浏览网页前,都会先检索一遍全文,再决定是否阅读。
6. 添加 `描述性的占位符文字` 到你的表单、输入框和下拉菜单。如果你想要让浏览者用某种特定方式来填写表单,你应该指引他怎么做。对于下拉菜单和选择框来说,可以让第一个选项变成描述,比如 “选择年份” 就比 “2016” 更合适。
7. 往表单添加 `HTML5 验证`,让用户在提交表单时可以清楚地知道哪些部分出现填写错误。
8. 通过避免含糊链接名字、减少杂乱排版、使用标点符号、保持简洁布局、添加图片提示(alt text)、使用大字号、保持文本和背景色的高对比度,可以让你的网站 `适用于视觉障碍人群`。
9. 通过 [BrokenLinkCheck.com](http://brokenlinkcheck.com/) 检查你的网站是否有 `损坏的链接`。修复这些坏链,避免让用户因为点击到它们而抓狂。
### 酷炫的开发
1. 确保你的站点是经过 `移动端优化` 的,也就是在任何设备上都可以响应式地显示。合理优化移动端的站点,加载速度更快,排行更高,并且可以提供更佳的用户体验。
2. 生成并 `显示经过优化的图像`。假设你上传了一张大图片,比如博文的特征图像,如果你想在站点的其他地方显示(比如侧边栏),应确保你在侧边栏显示的是图像的缩略图而非原图。
3. `所有图片和超链接都要添加 alt 和 title 属性`。当遇到某种异常情况,图片没有正常加载出来的时候,网站应该在图片位置显示替换文字(alt text)。并且,当鼠标悬停在链接时,浏览器应该显示该链接的 title 属性的值。
4. 使用 `<strong>` 和 `<em>` 标签代替 `<b>` and `<i>`,以输出加粗和斜体字符。虽然他们的作用相同,但是有着根本区别。`<b>` 标签对应着一种样式,而 `<strong>` 标签则是一种语义化的表示,指明了应该如何理解这个标签的含义。
5. `去除多余的 HTML`。当你复制粘贴内容到 WYSIWYG 编辑器(类似于 WordPress 的编辑器)的时候,它会添加许多不必要的 span 标签与内联样式。时间长了,你的网站代码就会变得不可读了。
6. 说到这里,需要给你的 HTML `移除内联样式`。99% 的样式规则都应该写进 CSS 文件,以便你可以在同一时间更新一个组件在所有页面的样式。
7. 使用 `Sass 变量` 代替原生 CSS,以保持颜色和其他组件可以在整个网站之间共用。这样,当你想要改变这个颜色时,只需改变一行代码而不是上百行。
8. `链接使用永久链接(permalinks)代替完整 URL`。当你打算切换域名时,你的链接最好使用 <a href=“/slug-goes-here”> 代替完整路径 <a href=“http://domain.com/slug-goes-here”>。对于一些图片资源和 CSS 背景,如果你不这么做,当域名变化的时候,你的所有资源都将会失效。
9. 开发一个 `自定义插件` 或者工具,为你的网站提供独特的功能。虽然自定义软件难以维护,但是这样做可以让你的网站在众多类似网站中脱颖而出。
10. 测试 `跨浏览器兼容性`,确保你的网站可以在 Chrome, Firefox, Safari, Internet Explorer 和其它浏览器正常显示。虽然旧版 IE 在兼容性方面臭名昭著,但是可以通过 [BrowserStack](https://www.browserstack.com/screenshots) 进行人工检查。
11. 使用 [W3C 的](https://validator.w3.org/) `Markup Validation Service(标记语言验证服务)` 来检查 HTML 的明显错误。要记住,大部分网站的 HTML 都不是十分完善的。虽然这项检查并非最高优先级,但是如果你的 HTML 没有错误,你会感到更开心。
12. 设定一个 `模拟环境` 用来改变你的当前网站。理想情况下,你应该有一个生产环境,是用户能看见的;以及一个模拟环境,供开发者作出更改。一旦更改已经准备好发布,就可以把模拟环境的代码部署到生产环境。
13. `在页面显示当前年份`。当你看见一个站点的 copyright 年份不是最新的时候,你就会觉得这个网站应该很久没维护了。可以使用 PHP 或者类似的脚本语言,动态地显示当前年份,而不仅仅是显示静态文本。(比如 © <established year> — <current year>)。
### 酷炫的搜索引擎优化
1. `为每个页面选择一个关键词`,这个关键词关系到你的页面排名。围绕这个关键词,优化这个页面的方方面面。当然,并不是让你在每句话都提到这个词,可以动脑筋想想你想让它排到第几位去。
2. 给每个页面设定一个充满关键词的 `title 标签`。标题会显示在谷歌搜索结果的蓝色链接文字上,有 55 个字符的长度限制。
3. 每个页面`有且仅有一个 H1 标签`。在大多数情况下,这个标签的文字应该和 title 标签相同。
4. 在页面内容中包含很多 `H2、H3 和 H4 标签` ,以创建小标题和显出视觉层次感。
5. 用一个 `特定的关键词` 优化页面,可以通过把它包含在标题、H1、副标题和内容的前 1/3 部分。
6. 你的 `meta 标签的描述(description)` 会显示在搜索引擎的链接下方。所以确保你的每个页面都包含 meta description,并确保在描述里包含关键词。
7. 你的 `永久链接(permalink)`,也就是 URL 里紧随域名的部分(比如 domain.com/permalink-here/),应该包含破折号分隔开的关键词内容。
8. Google 把 `域名的注册时长` 考虑到算法中,他们认为,注册时间长的域名更有可能提供高质量的资源。提前注册你的域名吧,如果你的域名注册时间超过 10 年,相信你对你的事业是认真的。
9. 平均起来,SERP (搜索引擎结果页面) 的第一个结果,不管是任何关键词,打开的页面都不少于 `2000 字/页`。当你写文章或者创建页面时,如果你希望页面的排名更高,试着至少写 2000 字吧。
10. 总是 `创建站点地图` 并命名为 sitemap.xml 文件,然后把它放进根目录,并让文件可以通过 domain.com/sitemap.xml 访问。这个文件可以告诉谷歌,你的所有页面的位置,并应该在添加新内容时更新地图。可以通过 [Webmaster Tools](https://www.google.com/webmasters/tools/home?hl=en) 提交给谷歌。
11. 添加你的网站的 `Google Webmaster Tools`,然后你可以知道 Google 如何索引你的站点,并在遇到关键问题时保持更新。
12. 为了提高图片的排行,上传之前应该总是 `重命名你的图片` 和其它文件。(比如:rank_for_this_keyword_phrase.png)
13. 在站点中包含 `robots.txt` 文件,告诉爬虫哪些页面应该/不应该被索引。
14. 添加 `canonical 重定向` 把不带 www 的页面访问指向网站的 www 版本,或者反过来也可以。
15. 研究并整合每个页面的 `LSI 关键词`(LSI: 潜在语义索引),以帮助提高页面在主关键词的排行。通过 Google 搜索一些关键词短语并寻找 “相关搜索” 链接,可以帮你找出 LSI 关键词。
16. 经常确保 `你的内容之间可以互相连接`。你的站点的每个页面,都应该可以通过从首页开始的不多于三次点击访问到。
17. 添加 `结构化的数据` 到相关页面,以帮助 Google 合理索引你的内容。以下这些页面类型需要结构化的数据,包括:人物、产品、事件、公司、电影、书本、报刊评论等。使用 [Schema Creator](http://schema-creator.org/) 可以帮你生成结构化的数据。
18. 使用 [Google 的](https://developers.google.com/speed/pagespeed/insights/) `PageSpeed Insights` 工具,以确保你修复了所有可能降低页面速度的普遍问题。页面加载速度越快,排名越高。
### 酷炫的网页速度
1. 保持 `页面流量低于 2MB`。使用 [tools.pingdom.com](http://tools.pingdom.com/) 检查主页面的加载流量,如果多于 2MB 说明内容太多了。
2. 保持 `页面请求低于 50 个`。页面中的每个文件和图片都是一个 HTTP 请求,请求数越少,加载速度越快。平均每个网页的请求数是 70 个。使用 [GTmetrix](https://gtmetrix.com/) 可以检查你的网页请求数。
3. 设计页面元素时,使用 `CSS 代替背景图片`。不要使用图片来显示按钮、表单或者其它通用的元素。CSS 的加载速度更快,并且在响应式布局中更加灵活。
4. 在图片上传之前 `优化图像`。比如 [TinyPNG](https://tinypng.com/) 这样的工具,可以帮助你在不降低分辨率或者图像质量的情况下,减少图片文件大小。
5. 使用 `内容分发网络(Content Delivery Network)` 来存储你的图片和其它大文件,并放在世界上的不同区域中。CDN 通过策略定位好的服务器,存储分发你的文件,可以最大化加速页面速度,当然加载速度也根据访客的所在地区而有所差别。
6. 在上传你的代码文件到服务器之前,通过编译和压缩工具,`最小化 JavaScript, HTML 和 CSS`。对于 JavaScript,可以使用 [Closure Compiler](https://developers.google.com/closure/compiler/)。对于 HTML,可以使用 [HTML Minifier](http://www.willpeavy.com/minifier/)。对于 CSS,可以使用 [YUI Compressor](http://yui.github.io/yuicompressor/)。
7. 把 `阻塞渲染的 JavaScript 移动到底部`。唯一应该放在头部的脚本是那些会立刻影响页面设计的内容(比如:自定义字体)。
8. `避免目标网页重定向`。重定向触发额外的 HTTP 请求,会延迟页面渲染。
9. 借助 `浏览器缓存`,可以通过为页面和不经常更新的资源设置过期时间来实现。浏览器缓存会通知浏览器,从本地磁盘加载之前下载过的页面,以减少不必要的网络请求。
10. 在服务器配置中启用 `gzip 压缩`。压缩可以减少多达 90% 的传输响应时间,大大减少了首次渲染页面的时间。
11. 在服务器配置中启用 `Keep-Alive`,以允许同一个 TCP 链接可以发送和接收多个 HTTP 请求,因而可以减少后来请求的延迟。
12. 升级为 `专用服务器` 或者更优质的主机服务,以降低服务器响应时间。当你使用共享的服务器环境时,你的站点通常放在一台需要同时响应至少上百个网站的服务器里,如果其它网站的流量很大,你的网站速度自然就会降低。
### 酷炫的平面设计
1. 作为可选的加分项,使用 `自定义 ebook 封面`。它不难创建,但是可以让你的转化率大大提高。
2. 为你的主页和销售页面设计一个 `自定义的平面图形或者插图`。一个专门为站点设计的好插图,可以让你的站点更加容易让人记住。
3. 创建一个或者一系列的自定义 `博客特征图像设计`。也就是你在 Facebook, Twitter, Pinterest 等社交网站传播时使用的图片。当用户看到和博客有所关联的某类型的图片时,他们会联想到文章可能是你写的。
4. 给你自己和你的团队的每个成员显示一张自定义的 `头像插图或者漫画`。相比于聘请专业的摄影师,自定义的漫画成本较低,特别是当你的团队增加新成员的时候。此外,对于新成员来说这也是一份不错的礼物。
5. `自定义图表` 以可视化的方式显示数据和其他内容,相比于同类的博客文章,更容易获取更多流量。人们更喜欢在 Pinterest 这样的网站上分享图表,或者是带着你的站点的反向链接并转发到他们自己的网站上。
6. 如果你创作了一个甚至一系列的视频,你应该拥有一个 `定制的视频开场部分和/或结尾部分`,让大家感受到视频是专业的。不要提及其它的视频画面或者动画,可以帮助你的品牌更加突出。
### 酷炫的 Web 安全性
1. 安装 `SSL 证书`,以允许服务器端和浏览器之间建立安全连接。如果网站用到银行卡支付功能,大部分的检测软件都要求使用 SSL 证书。Google 称,用上 SSL 证书可以帮助提高网站的搜索排行。
2. 你用到的软件和插件要 `保持最新版本`。Wordpress 和其它 CMS 软件都会释放更新,通常是为了修复漏洞。如果你没有及时更新,你的网站被攻击也就是迟早的事情了。
3. 为管理员页面设置 `双认证登录`。大部分的黑客入侵都是从登录页开始的。
4. 检查并 `删除恶意软件`。如果你的网站曾经被入侵,黑客很可能会留下一些不容易发现的后门。如果你没有及时删除,你的网站可能会被谷歌列入黑名单,大大降低你的网站排行,并在用户打开网站时,警告用户离开。
5. 不要把 `管理员账号` 称为 “admin”。删除默认的管理员账号,并创建一个使用其他名字的新账号。
6. 定期 `备份数据库和网站文件`。大部分备份软件和插件都只备份你的数据库,里面包括了数据和内容。但如果你把整个网站都丢了,你还需要文件内容的备份来还原网站。
### 酷炫的内容
1. 创建一个自定义 `错误 404` 页面,当用户尝试访问不存在的地址时,这个页面就会显示出来。可以使用 404 页面把他们引导到首页,并帮助他们寻找他们想要的页面。
2. 除了主页之外,`关于页面` 可能是用户最常访问的页面了。要确保这个页面能够很好地代表你和你的公司。
3. `联系方式页` 帮助用户找到你,而且还能够建立你和访客甚至 Google 之间的信赖。当决定站点排名时,机器会寻找你的联系方式,然后找到邮箱地址、电话号码和地址。联系信息告诉 Google,这个站点更加值得信赖一点。
4. 在战略上,站点里拥有选填的表单是正确的,然而建立一个 `准顾客收集页面` 的想法也不错,除了一个高转化率的选填表格什么也不用放。当你希望用户提交信息时,链接到该页面就行了。
5. 当用户订阅你的列表时,确保你可以给他们一个 `确认页面`,让他们可以确认邮箱地址。假如用户不能确认邮箱是否正确,他们可能就会把事情给忘了,然后再也不会回来你的站点了。
6. 在点击邮箱里的确认链接后,给用户发送一个 `感谢页面` 让他们知道下一步可以做什么。这个页面是每个订阅者都能看见而且只能看见一次的,因此这是一个绝佳机会鼓励用户去掏腰包购买内容。
7. 你的网站或者主题应该有一个 `着陆页` 模板,当你需要用户进行特定操作时,可以用上。
8. 如果你在网站上买东西,确保你有一个漂亮的 `销售页面`。从大字标题开始;为你的卖场留出足够空间;有可能的话做一个介绍视频;在页面底部指引用户如何购买。
### 酷炫的社交媒体
1. 在你的文章和页面上,限制 `社交媒体按钮的数量`,因为每个按钮都会运行相关的脚本,额外增加页面加载时间。通常包含 1-5 个按钮比较合适,比如 Facebook、Twitter、LinkedIn、Pinterest、Google+ 等,这些网站是你的内容最容易被分享的地方。
2. 在你的 Facebook 页面、Twitter 账号、YouTube 频道上创建 `社交媒体的图片`。对于第一次访问的用户,自定义的图片可以给予他们良好的第一印象,并鼓励他们点赞、关注、订阅你的页面、个人档和频道。
3. 设置 `Facebook Open Graph META 标签` 以确保你的内容被分享到 Facebook 时可以正常显示内容。可以使用 [Facebook Debugger](https://developers.facebook.com/tools/debug/) 检查你的主页、文章和其它页面,并看到当别人把 URL 分享出去的时候是什么样子的。
4. 设置 `Twitter Cards`,目的是当你的站点 URL 被分享到 Twitter 时,丰富的图片和视频资源可以显示到卡片上。要开始使用 `Twitter Cards` 可以 [点击这里](https://dev.twitter.com/cards/getting-started)
5. 设置 `Google+ Snippets`,以自定义用户分享站点到 Google+ 时看见的内容。你可以使用 [Snippet 指南](https://developers.google.com/+/web/snippet/) 生成相关代码。即使你的网站在 Google+ 没那么受欢迎,Google 也可以知道你正确地添加了 meta 信息,从而带来一定的权重加成。
6. `弱化那些链接到个人档的社交媒体图标`,可以让图标变小或者放在页面底部。其实社交媒体营销的目的就是把用户导流到你的网站来,而不是反过来作用。
好了,我还有什么遗漏的吗?作为自由职业者或者老板,你有没有尝试过使用上述方法让网站变得酷炫呢?
期待你的回复,可以在原文留言或者在推特上联系 [@wntart](https://twitter.com/wntart)。
如果你希望更多人看见这个列表,不妨推荐这篇文章给大家。让我们一起把网站变得更加酷炫!
加油!尼克
P.S. 如果你需要有人帮忙完成列表上的事情,可以在这里寻找[设计师](https://www.awesomeweb.com/skill/web-design)、[开发者](https://www.awesomeweb.com/skill/web-development),或者[发布你的招聘广告](https://www.awesomeweb.com/why-post-a-job)。我们拥有世界上最好的自由职业者,他们非常乐意帮助你!
如果你也希望加入 AwesomeWeb 成为一名自由职业者,并认识更多客户,可以[点击这里注册](https://www.awesomeweb.com/signup)。
================================================
FILE: TODO/11-things-i-learned-reading-the-flexbox-spec.md
================================================
> * 原文地址:[11 things I learned reading the flexbox spec](https://hackernoon.com/11-things-i-learned-reading-the-flexbox-spec-5f0c799c776b)
> * 原文作者:本文已获原作者 [David Gilbertson](https://hackernoon.com/@david.gilbertson) 授权
> * 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
> * 译者:[XatMassacrE](https://github.com/XatMassacrE)
> * 校对者:[zaraguo](https://github.com/zaraguo),[reid3290](https://github.com/reid3290)
# 读完 flexbox 细则之后学到的 11 件事
在经历了多年的浮动布局和清除浮动的折磨之后,flexbox 就像新鲜空气一般,使用起来是如此的简单方便。
然而最近我发现了一些问题。当我认为它不应该是弹性的时候它却是弹性的。修复了之后,别的地方又出问题了。再次修复之后,一些元素又被推到了屏幕的最右边。这到底是什么情况?
当然了,最后我把它们都解决了,但是黄花菜都凉了而且我的处理方式也基本上没什么规范,就好像那个砸地鼠的游戏,当你砸一个地鼠的时候,另一个地鼠又冒出来,很烦。
不管怎么说,我发现要成为一个成熟的开发者并且真正地学会 flexbox 是需要花时间的。但是不是再去翻阅另外的 10 篇博客,而是决定直接去追寻它的源头,那就是阅读 [The CSS Flexible Box Layout Module Level 1 Spec](https://www.w3.org/TR/css-flexbox-1/)。
下面这些就是我的收获。
### 1. Margins 有特别的功能
我过去常常想,如果你想要一个 logo 和 title 在左边,sign in 按钮在右边的 header ...

点线为了更清晰
... 那么你应该给 title 的 flex 属性设置为 1 就可以把其他的条目推到两头了。
```
.header {
display: flex;
}
.header .logo {
/* nothing needed! */
}
.header .title {
flex: 1;
}
.header .sign-in {
/* nothing needed! */
}
```
这就是为什么说 flexbox 是个好东西了。看看代码,多简单啊。
但是,从某种角度讲,你并不想仅仅为了把一个元素推到右边就拉伸其他的元素。它有可能是一个有下划线的盒子,一张图片或者是因为其他的什么元素需要这样做。
好消息!你可以不用说“把这么条目推到右边去”而是更直接地给那个条目定义 `margin-left: auto`,就像 `float: right`。
举个例子,如果左边的条目是一张图片:

我不需要给图片使用任何的 flex,也不需要给 flex 容器设置 `space-between`,只需要给 'Sign in' 按钮设置 `margin-left: auto` 就可以了。
```
.header {
display: flex;
}
.header .logo {
/* nothing needed! */
}
.header .sign-in {
margin-left: auto;
}
```
你或许会想这有一点钻空子,但是并不是,在 [概述](https://www.w3.org/TR/css-flexbox-1/#overview) 里面**这个**方法就是用来将一个 flex 条目推到 flexbox 的末端的。它甚至还有自己单独的章节,[使用 auto margins 对齐](https://www.w3.org/TR/css-flexbox-1/#auto-margins)。
哦对了,我应该在这里添加一个说明,在这篇博客中我会假设所有的地方都设置了 `flex-direction: row`。但是对于 `row-reverse`,`column` 和 `column-reverse` 也都是适用的。
### 2. min-width 问题
你或许会想一定有一个直截了当的方法确保在一个容器中所有的 flex 条目都适应地收缩。当然了,如果你给所有的条目设置 `flex-shrink: 1`,这不就是它的作用吗?
还是举例说吧。
假设你有很多的 DOM 元素来显示出售的书籍并且有个按钮来购买它。

(剧透:蝴蝶最后死了)
你已经用 flexbox 安排地很好了。
```
.book {
display: flex;
}
.book .description {
font-size: 30px;
}
.book .buy {
margin-left: auto;
width: 80px;
text-align: center;
align-self: center;
}
```
(你想让 'Buy now' 按钮在右边,即使是很短的标题的时候,那么你就要给他设置 `margin-left: auto`。)
这个标题太长了,所以他占用了尽可能多的空间,然后换到了下一行。你很开心,生活真美好。你洋洋得意地将代码发布到生产环境并且自信地认为没有任何问题。
然后你就会得到一个惊喜,但不是好的那种。
一些自命不凡的作者在标题中用了一个很长的单词。

那就完了!
如果那个红色的边框代表手机的宽度,并且你隐藏了溢出,那么你就失去你的 'Buy now' 按钮。你的转换率,可怜的作者的自我感觉都会遭殃。
(注:幸运的是我工作的地方有一个很棒的 QA 团队,他们维护了一个拥有各种类似于这样的令人不爽的文本的数据库。也正是这个问题特别的促使我去阅读这些细则。)
就像图片展示的那样,这样的表现是因为描述条目的 `min-width` 初始被设置为 `auto`,在这种情况下就相当于 **Electroencephalographically** 这个单词的宽度。这个 flex 条目就如它的字面意思一样不允许被任何的压缩。
那么解决办法是什么呢?重写这个有问题的属性,将 `min-width: auto` 改为 `min-width: 0`,给 flexbox 指明了对于这个条目可以比它里面的内容更窄。
这样就可以在条目里面处理文本了。我建议包裹单词。那么你的 CSS 代码就会是下面这个样子:
```
.book {
display: flex;
}
.book .description {
font-size: 30px;
min-width: 0;
word-wrap: break-word;
}
.book .buy {
margin-left: auto;
width: 80px;
text-align: center;
align-self: center;
}
```
这样的结果就是这个样子:

重申一下,`min-width: 0` 不是什么为了特定结果取巧的技术,它是[细则中建议的行为 ](https://www.w3.org/TR/css-flexbox-1/#min-size-auto)。
下个章节我会处理尽管我明确写明了但是 ‘Buy now’ 按钮仍然不总是 80px 宽的问题。
### 3. flexbox 作者的水晶球
就像你知道的,`flex` 属性其实是 `flex-grow`,`flex-shrink` 和 `flex-basis` 的简写。
我必须承认为了达到我想要的效果,我在不停地尝试和验证这三个属性上面花费了很多时间。
但是直到现在我才明白,我其实只是需要这三者的一个组合。
- 如果我想当空间不够的时候条目可以被压缩,但是不要伸展,那么我们需要:`flex: 0 1 auto`
- 如果我的条目需要尽可能地填满空间,并且空间不够时也可以被压缩,那么我们需要:`flex: 1 1 auto`
- 如果我们要求条目既不伸展也不压缩,那么我们需要:`flex: 0 0 auto`
我希望你还不是很惊奇,因为还有让你更惊奇的。
你看,Flexbox Crew (我通常认为 flexbox 团队的皮衣是男女都能穿的尺寸)。对,Flexbox Crew 知道我用得最多的就是这三个属性的组合,所以他们给予了这些组合 [对应的关键字](https://www.w3.org/TR/css-flexbox-1/#flex-common)。
第一个场景是 `initial` 的值,所以并不需要关键字。`flex: auto` 适用于第二种场景,`flex: none` 是条目不伸缩的最简单的解决办法。
早就该想到它了。
它就好像用 `box-shadow: garish` 来默认表示 `2px 2px 4px hotpink`,因为它被认为是一个 ‘有用的默认值’。
让我们再回到之前那个丑陋的图书的例子。让我们的 'Buy now' 按钮更胖一点...

... 我只要设置 `flex: none`:
```
.book {
display: flex;
}
.book .description {
font-size: 30px;
min-width: 0;
word-wrap: break-word;
}
.book .buy {
margin-left: auto;
flex: none;
width: 80px;
text-align: center;
align-self: center;
}
```
(是的,我可以设置 `flex: 0 0 80px;` 来节省一行 CSS。但是设置为 `flex: none`可以更清楚地表示代码的语义。这对于那些忘记这些代码是如何工作的人来说就友好多了。 )
### 4. inline-flex
坦白讲,几个月前我才知道 `display: inline-flex` 这个属性。它会代替块容器创建一个内联的 flex 容器。
但是我估计有 28% 的人还不知道这件事,所以现在你就不是那 28% 了。
### 5. vertical-align 不会对 flex 条目起作用
或者这件事我并不是完全的懂,但是从某种意义上我可以确定,当使用 `vertical-align: middle` 来尝试对齐的时候,它并不会起作用。
现在我知道了,细则里面直接写了,[vertical-align 在 flex 条目上不起作用](https://www.w3.org/TR/css-flexbox-1/#flex-containers)” (注意:就好像 `float` 一样)。
### 6. margins 和 padding 不要使用 %
这并不仅仅是一个最佳实践,它类似于外婆说的话,去遵守就好了,不要问为什么。
"开发者们在 flex 条目上使用 paddings 和 margins 时,应该避免使用百分比" — 爱你的,flexbox 细则。
下面是我在细则里面看到的最喜欢的一段话。
> 注解:这个变化糟透了,但是它精准地抓住了世界的当前状态(实现无定法,CSS 无定则)
> 当心,糖衣炮弹进行中。
### 7. 相邻的 flex 条目的边缘不会塌陷
你或许知道有时候会出现相邻条目的边缘塌陷。你或许也知道其他的时候**不会**出现边缘塌陷。
现在我们都知道相邻的 flex 条目是不会发生边缘塌陷的。
### 8. 即使 position: static,z-index 也会有效
我不确定我是否真的在乎这一点。但是我想到或许有一天,它就会真地有用。就好像我冰箱里有一瓶柠檬汁。
某一天我家来了其他人,然后他会问:"嗨,你这里有柠檬汁吗?",我这时就会告诉他:"有的,就在冰箱里",他会接着说:"谢谢,大兄弟。那么如果我想给一个 flex 条目设置 z-index,我需要指定 position 吗?",我会说:"兄弟,不需要,flex 条目不需要这样。"
### 9. Flex-basis 是精细且重要的
一旦 `initial`,`auto` 和 `none` 都不能满足你的需求时,事情就有点复杂了,但是我们**有** `flex-basis`,有趣的是,你知道的,我不知道怎么结束这句话。如果你们有好的建议的话,欢迎留言。
如果你有 3 个 flex 条目,它们的 flex 值分别为 3,3 和 4。那么当 `flex-basis` 为 `0` 的话它们就会忽略他们的内容,占据可用空间的 30%,30%,40%。
然而,如果你想要 flex 更友好但是有点不太可预测的话,使用 `flex-basis: auto`。这个会将你的 flex 的值设置得更合理,同时也会考虑到一些其他因素,然后为你给出相对合理的宽度。
看看这个很棒的示意图。

我十分确定我读到的关于 flex 的博客中至少有一篇提到了这一点,但是我也不知道为什么,直到我看到上面这张图才想起来。
### 10. align-items: baseline
如果我想让我的 flex 条目垂直对齐,我总是使用 `align-items: center`。但是就像 `vertical-align`一样,这样当你的条目有不同的字体大小并且你希望它们基于 baselines 对齐的时,你需要设置 `baseline` 才能对齐的更完美。
`align-self: baseline` 也可以,或许更直观。
### 11. 我很蠢
下面这段话不论我读几遍,都无法理解它的含义...
> 在主轴上内容大小是最小内容大小的尺寸,并且是加紧的,如果它有一个宽高比,那么任何定义的 min 和 max 的大小属性都会通过宽高比转换,并且如果主轴的 max 尺寸是确定的话会进一步加紧。
这些单词通过我的眼睛被转化成电信号穿过我的视神经,刚刚抵达的时候就看到我的大脑打开后门一溜烟跑了。
就像米老鼠和疯狂麦克斯 7 年前生了个孩子,现在和薄荷酒喝醉了,使用他从爸爸妈妈吵架时学到的语言肆意的辱骂周围的人。
女士们,先生们,我已经放弃了体面开始胡言乱语了,这意味着你可以关闭这篇文章了(如果你看这个是为了学习的话你可以在这里停止了)。
读这篇细则我学到的最有趣的事情是,尽管我看过大量的博文,以及 flexbox 也算是相对简单的知识点,但是我对其的了解曾是那么的不彻底。事实证明 '经验' 不总是起作用的。
我可以很开心的说花时间来阅读这些细则已经得到了回报。我已经优化的我的代码,设置了 auto margins,flex 的值也设置成了 auto 或者 none,并在需要的地方定义了 min-width 为 0。
现在这些代码看起来好多了,因为我知道这样做是正确的。
我的另外一个收获就是,尽管这些细则在某些方面正如我所想的基于编者视角并有些庞杂,但是仍然有有很多友好的说明和例子。甚至还高亮了那些初级开发者容易忽略的部分。
然而,这个是多余的,因为我已经告诉了你所有有用知识点,你就不用再自己去阅读了。
现在,如果你们要求,那么我会再去阅读所有其他的 CSS 细则。
PS:我强烈建议读读这个,一个浏览器 flexbox bugs 的清单:[https://github.com/philipwalton/flexbugs](https://github.com/philipwalton/flexbugs).
---
> [掘金翻译计划](https://github.com/xitu/gold-miner) 是一个翻译优质互联网技术文章的社区,文章来源为 [掘金](https://juejin.im) 上的英文分享文章。内容覆盖 [Android](https://github.com/xitu/gold-miner#android)、[iOS](https://github.com/xitu/gold-miner#ios)、[React](https://github.com/xitu/gold-miner#react)、[前端](https://github.com/xitu/gold-miner#前端)、[后端](https://github.com/xitu/gold-miner#后端)、[产品](https://github.com/xitu/gold-miner#产品)、[设计](https://github.com/xitu/gold-miner#设计) 等领域,想要查看更多优质译文请持续关注 [掘金翻译计划](https://github.com/xitu/gold-miner)。
================================================
FILE: TODO/11-top-designers-give-11-pieces-of-realistic-ux-advice.md
================================================
* 原文链接 : [11 Top Designers Share Honest Career Advice](https://studio.uxpin.com/blog/11-top-designers-give-11-pieces-of-realistic-ux-advice/)
* 原文作者 : [Roger Huang]
* 译文出自 : [掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者 : [Adam Shen](https://github.com/shenxn)
* 校对者: [joyking7](https://github.com/joyking7),[circlelove](https://github.com/circlelove)
# 11个顶级设计师分享他们的职业建议
优秀的设计者是终生学习者。
在 [Springboard](http://springboard.com),我们将 UX(User Experience 即用户体验) 以及数据科学的导师和学习者配对,这有助于我们听从前辈的意见。
在我们免费的[用户体验职业引导 - Guide to UX Careers](https://www.springboard.com/guide-to-ux-design-careers/) 中,我们汇总了许多领域内顶尖从业者的建议。
我们采访了11位厉害的 UX 设计师,询问了他们的设计灵感,并且也让他们给其他从业者提了一些 UX 方面的建议。
我们与 [UXPin](https://www.uxpin.com/) 的团队合作为你带来了以下的见解。
## 1\. [**Paul Boag**](https://twitter.com/boagworld)
作为一个网站设计代理商 [Headscape](http://headscape.co.uk/)(雀巢、麦克米伦、以及一些英国的大学都是他们的客户) 的联合创始人,Paul 从事网站相关工作已经二十多年了。他同时也是一个发表了大量作品的作家和演说家。

### **设计灵感**
我最喜欢的设计就是原始版本的[伦敦地铁图](http://www.theverge.com/2013/3/29/4160028/harry-beck-designer-of-iconic-london-underground-map)。
它打破常规的设计使之具有相当的开创性。它抛弃了呈现真实距离和地点的传统,这样,他们就可以将复杂的地铁网络用非常简单的方式呈现出来。对我来说,这就是一个优秀的设计应该要做到的:从一个不同的角度切入以使用简单的方式去表达复杂的东西。

### **职业建议**
老实说,我绝对不会给年轻的我任何意见,因为我知道我一定不会听的。
即使我听从了,我也不会像我自己发现一样学到那么多。学习任何事的最好方法都是从错误中学习,所以我不希望让年轻的我失去这个机会。就像 Winston Churchill 曾经说过的:“成功就是不断失败而热情不减。”
不要听从任何人,犯你自己的错,当你失败的时候,爬起来,再试一次。
## 2\. [**Eva Kaniasty**](https://twitter.com/kaniasty)
Eva 运营着她自己在波士顿的公司 [Red Pill UX](http://www.redpillux.com/)。她同时也是 [UXPA](http://www.upaboston.org/) 的主席。

### **设计灵感**
我最近发现了 [多邻国](https://www.duolingo.com/),一个在线语言学习平台
我喜欢它的 UX 有很多的原因。它的用户界面非常简洁、有趣且具有激励性。许多应用试图结合游戏性以及社区,只是因为这样做很酷,这最终导致这些功能就像是后来加入的。而多邻国在课程中完美运用游戏元素和多样化的课程来吸引用户。

我也很喜欢它的语言沉浸功能,用户可以在翻译上相互合作。记忆和重复是语言初学者总是要经历的阶段,但这总让人感到无趣。而多邻国在这方面的尝试非常有创意。
我总是觉得我们消费者应用的创新上已经到达了某种意义上的高处,所以还能见到一些很新鲜的同时也很合适的创意让人感到非常惊喜。
### **职业建议**
要知道在像 UX 这样需要合作的职业中,人远比技能重要。如果你有研究和设计的天分,你迟早都能学会这些技能。但是人际关系会很大程度上影响你职业的成败。
当我把最初的职业变成高科技的时候,我知道很少有人跟我在做一样的事。当我回到学校,在 Bentley University 学习人为因素工程(Human Factors)的时候,我感觉像是进入了一个全新的世界。当然,这很大程度上是由于学到的东西,但是能在那里遇到那么多人也很有意义。
现在我依然在参与当地的 UX 专家协会(UXPA)分会活动,当我现在开始做独立咨询的时候,那个团体甚至变得更重要了。所以尽可能去与那些跟你一样对用户体验富有热情的人交流,并且去询问他们的意见。
## 3\. [**Mike Kus**](https://twitter.com/mikekus)
Mike 最初从事平面设计,之后转而做网站设计。他与 Twitter、微软、MailChimp 等公司合作,创造了许多兼顾形式和功能性的用户体验设计。

### **设计灵感**
[Hipopotam Studio](http://hipopotamstudio.pl),我喜欢这个网站以及它纯粹的、富有创意和乐趣的UI。

### **职业建议**
学会将用户界面趋势和实用的设计惯例分开。单单因为一种设计方式当前被广泛使用,不意味着这就是最好的方法。
## 4\. [**Jack Zerby**](https://twitter.com/jackzerby)
Jack 是 [Flavors.me](http://flavors.me/) 和 [Flavors.me](http://flavors.me/) 的联合创始人,[Vimeo](https://vimeo.com/) 的前设计主管。Jack 说在它高中第一次启动 Photoshop 时,就被设计吸引了,同时,他的父亲对他的影响也非常大。现在你可以在 [Workshop](https://thisisworkshop.com/)(一个面向年轻人的企业家培训项目) 上找到他。

## **设计灵感**
我近来最喜欢的产品体验就是在城区中使用 [ParkMobile 应用](https://play.google.com/store/apps/details?id=net.sharewire.parkmobilev2&hl=en)
我再也不需要在附近花几十分钟的时间寻找熟食店换零钱来支付停车费了,我现在可以直接输入[停车计时表上的数字](http://parkitnyc.com/wp-content/uploads/2011/08/image_parkmobile_meter-279x300.png),设定好预计的停车时间,然后在应用中直接支付停车费。当预计时间快要结束时,应用还会给我发来消息,如果我需要的话,可以直接加钱以延长停车时间。

流畅而且没有麻烦。
### **职业建议**
总是去考虑最终呈现给用户的结果以及用户所处的情境:用户需要在怎样的情境中完成哪些任务?
举个例子,我试图在我的车上安装一个自行车架,于是我访问了制造商的网站。我的目标是尽快安装好自行车架并行驶上路。我当前的情形是,我顶着大太阳站在车外,而我的孩子们都在哭,因为他们想要立刻到公园去。
设计的时候应时刻牢记,要试图去理解你的用户。就像是成功的营销一样,要去理解用户遇到的问题、挫折,并且使用他们能听懂的方式去交流。
不要去猜测或是落入设计者的傲慢(这是我们总是在做的)。
## 5\. [**Laura Klein**](https://twitter.com/lauraklein)
Laura 在硅谷做了15年的工程师和设计师。她的目标是帮助创业公司了解他们的用户,从而更快地做出更好的产品。她的书,[UX 精益创业 - UX for Lean Startups](http://www.amazon.com/UX-Lean-Startups-Experience-Research/dp/1449334911),以及她倍受欢迎的设计博客,[Users Know](http://usersknow.blogspot.com/),都告诉了产品所有者他们在做研究和设计的时候,需要了解什么。

### **设计灵感**
用户体验设计师总是只注意到那些让我们感觉不舒服的设计,我想这大概是一种诅咒吧,又或者只有我是这样的。无论如何,我总是很喜欢任何简单的、与我的生活融为一体的、我甚至不去注意到的那些设计。
### **职业建议**
寻找两位导师。
第一位导师应该是一个在你关心的领域比你经验丰富并且具有影响力的人。他们会帮助你,给你一些观点,并且教会你被他们那样的人雇佣所必须的技能。
第二位导师应该是比你年长几岁的人。他们会教你做你想做的工作需要知道的东西。我不知道现在那些刚开始做科技相关工作的人的生活是怎么样的,但是我确定那些只要是已经做这个工作几年的人就会有非常深刻的理解。
所以,去寻找两个人:一个帮助你得到下一份工作的人和一个帮你做好下一份工作的人。
## 6\. [**Joshua Garity**](https://twitter.com/iamlucid)
作为一个设计心理学家和品牌策略家,Joshua 曾与 Wendy's 以及纽约时报等公司合作,帮助它们更好地与顾客交流并增加他们的收入。你可以从[他的博客](http://www.joshuagarity.com/)、[Twitter](https://twitter.com/iamlucid) 以及 [Candorem](http://www.candorem.com/)(他经营的公司) 上看到他所说的东西。

### **设计灵感**
用户体验存在于我们生活中的方方面面,它已经远远超出数字网络的范围。用户体验应该从与真实媒体或平台交互环境的角度来考虑。
把汽车作为例子。
假设我们在车上的大多数时间都是在驾驶。当我们驾驶的时候,我希望能优先照顾到眼前道路上的情况:保持在自己的车道内行驶,不超速,主语其他车辆,行人和动物。但是我们在车辆中引入了收音机和空调。视线从道路上移开哪怕是不到一秒的时间,都会对在路上的每一个人造成很大的安全威胁。所以,为什么汽车制造商在设计中控板的时候,没有留心它呢?大多数车辆的中控板上都有过多的选项、按钮一级转盘,有些车辆甚至使用触摸屏来改变空调温度或是收音机电台。
如果用户体验是关于交互环境的话,我们需要关注如何简化体验来使用户的主要注意力不会放在那些不良影响上。
一个优秀的设计能够在不需要用户过多思考的情况下就正确地引导他们。
### **职业建议**
不要轻易满足。活在当下。不要让一个标签定义你,或是限制你的人生目标。试图从一切人和物中寻找答案,即使一开始他们看起来与问题毫无关系。你总是能够变成任何你想要的样子。
## 7\. [**Kevin M. Hoffman**](https://twitter.com/kevinmhoffman)
在 Seven Heads Design,Kevin 致力于“解决那些你甚至不知道你有的问题” —— 这不仅仅包含了人与电脑的交互,也包含了人与人自己的交互。他的客户包括哈佛大学、任天堂、以及 MTV。你可以在他的[网站](http://kevinmhoffman.com/)以及 [Twitter](https://twitter.com/kevinmhoffman) 上找到他。

### **设计灵感**
我是整个 Android 系统以及 Google Play 用户体验的粉丝,我最近还爱上了 Android Wear。
当 Android [Kit Kat](http://www.android.com/kitkat/) 版本以及 Nexus 5 发布的时候,我试着开始使用 Android。我认为其中有大量的界面选择都是非常好的。而其中我最喜欢的是其预见性以及[微交互(microinteraction)](http://microinteractions.com/),比如在推送通知上你可以做的不同动作,或者系统将用户所需日程安排无缝整合。

当我第一次发现我可以仅仅使用两次点击就让其他人知道我可能要迟到时,我感觉到“哇!这真的很实用”。最近,我开始使用 Android Wear 手表,仅仅使用了五天的时间它就完全成为我生活中很自然的一部分了。现在当我需要处理一些社交状态时,我只需要时常看一看我的手表,而不需要从口袋中拿出手机来查看并处理消息。
我同样也非常期待 Android Auto。我们还不知道下一代的 iOS 会是什么样的,但就现在来说,我并没有换回 iOS 的想法。
### **职业建议**
“嘿,年轻的我!
你会花一些时间理想化你的长期目标,那会是一个很好的练习。你会考虑你理想的工作、雇主、生活方式、家庭、以及很多其他的事。但是事实上,你在以上这些事情中很少为感到满意,并且你不应该去等待一个完美的状态。
把你的人生用来生活。
最有趣的事,就是描绘那些你不论是否愿意而面对的事实上很小的决定。你的目标应该是做出更好的决定,使得它们能最大化地影响你的人生,而不是选择那些理想化的东西。
此外,尽可能去理解自我怀疑能且仅能帮助你变得谦卑。不要过于严肃地对待你自己。更多地练习,因为你,对于这个年长的我,做了一些什么呢?此外(Also),不要过度使用‘also’这个词。”
## 8\. [**Lis Hubert**](https://twitter.com/lishubert)
Lis 曾与很多大大小小的公司合作创造一些科技产品:像 espnw.com 和 nba.com。这些产品都以某种有意义的方式改变着人们的生活。她同时也是 [Future Insights](http://futureinsights.com/) 活动的咨询董事会成员。

### **设计灵感**
我近来最大的设计灵感来源于大城市的公共空间设计,比如我生活的纽约。
我不仅注意到像中央公园这样的大型空间被设计得很好,还发现那些小的公共空间也同样给人带来便利。同时,我还着迷于观察在公园中、以及公园里的运动场和球场上活动的人。我把这样的生态系统当做灵感的原因是,要成功设计这些空间,设计师必须考虑到如此庞大的、多种多样的人群享受其中时的体验。如果设计不当,就很有可能变得拥挤不堪。

这对我来说,就是在构建用户体验时的目标。去思考,他们是通过怎样的考虑,使得这些公共空间能使用户、拥有者以及设计师都感到满意。
### **职业建议**
新手们,先冷静下来。
在我们这个领域中工作经常要做的是,我们知道我们工作的重要性,并且我们希望其他人也能知道并且理解这个重要性。所以很多时候我们都在奋力地把我们的想法传达出去。
这当然非常疲惫且令人沮丧。我意识到如此努力地把我的知识灌输给那些其他领域的人并不是主要该做的事。我同时也发现商业团队、技术团队或是其他任何人是否真正理解了我这些做法最深层次的意义并没有什么太大的关系。
唯一重要的是,你对于你可以控制的内容富有热情,做好你负责的部分(如果有必要也可以做更多),来使你的这份热情来到生活中,并且你十分享受于这个过程。
## 9\. [**Matt Hamm**](https://twitter.com/matthamm)
[Twitter](http://www.twitter.com/matthamm).
Matt 是英国 [Supereight Studio](http://www.supereightstudio.com) 的联合创始人。他从1998年就开始设计网站了。你可以从[这里](http://www.matthamm.com/portfolio.php)找到他的作品,或是从 [Twitter](http://www.twitter.com/matthamm) 上找到他所说的话。

### **设计灵感**
Dropbox 仍然引领着 UX,其应用的体验是无缝的。
一个优秀的 UX 设计应该是无法被感知的。Dropbox 非常完美的体验带给我很深的印象。设计师重视细节,且有独特的想法,而不是完全凭直觉去复制一些固有的设计模式。
### **职业建议**
用文档写下所有的事情!
如果一个有序的 UX 设计能有一份详尽的参考文档将会极大地帮助你理解问题和找到解决方案。记得要同时记录下真实的体验,这些也同样能被用作参考。
## 10**.** [**Pavel Macek**](https://twitter.com/pavel_macek)
Pavel 现在是 [Slack](http://slack.com) 的一名产品设计师。Pavel 说他“非常在乎用户”,这也体现在他的作品中:他设计出的产品都令许多人感到享受。你可以在[这里](https://twitter.com/pavel_macek)关注他。

### **设计灵感**
对我来说,UX 设计的一个极佳的例子就是 Technics 唱机转盘 SL-1200,这款转盘已经在没有重大改动的情况下卖了35年了。然而这依然是 DJ、制作人和音乐家圈子中最流行的唱机转盘。

这极好地证明了实用性设计以及将创新的设计和精确的执行相结合的重要性。我觉得人们常常忘记保证功能性也是 UX 设计师的职责所在,但这恰恰是决定产品是否成功的最终因素。
### **职业建议**
不要在所有的设计方法论和设计模式中迷失。学习设计框架以及保持严格的设计流程是非常重要的,但是开头总是很简单的:我在为谁设计?他需要实现什么?我能够如何帮助他实现?
然后就只是重复和学习哪些方法可行而哪些不可行。
## 11**.** [**Robert Fabricant**](https://twitter.com/fabtweet)
Robert 是健康护理和社会创新设计方面的专家。它最近在领导 [Masiluleke 项目](http://www.poptech.org/project_m)。这是一个在南非利用移动技术对抗 HIV/AIDS 的创新项目。他之前在一个国际上非常有声望的设计代理机构 [frog design](http://www.frogdesign.com/) 工作。他同时也[开设课程](http://about.tisch.nyu.edu/object/FabricantR.html)、做演讲、以及[写文章](http://www.fastcodesign.com/user/robert-fabricant)。

### **设计灵感**
我总是会被[纽约市地铁系统](http://www.fastcodesign.com/1665022/why-does-interaction-design-matter-lets-look-at-the-evolving-subway-experience)惊人的、多方面的用户体验所启发。
我至少已经坐地铁45年了。除非你生活在其中,并且生活了很长一段时间,不然你永远无法准确说出一种体验的价值。
我们赞美的太多用户体验都是转瞬即逝的:那些应用没几个月可能就不在我们的手机里了。但是地铁一直都在这里,任何改进都是很缓慢的,都需要人工和钢铁来进行。这样的设计是很慢而且很困难的工作。

然而,改变是永恒的。作为纽约居民,几乎没有什么其他的系统比地铁更需要了解了。但是体验是从哪里开始哪里结束的呢?体验并不仅仅局限于地铁站内、地铁上和验票闸门口。
近年来,地铁系统已经成为了一个实验平台。用于实验不论是经过验证的还是临时性的想法。最近,联合广场的平台上开始试用一些大型的触摸屏信息显示器。观察人们第一次与之互动,并通过这一项实验把这座大型城市(对这就是我的家乡)中这么多人连接起来,是一件非常吸引人的事。
作为 UX 设计师,我们应该思考和实践一些大范围的实验。什么对象会比一座城市更好?数据和移动性在哪里可以更好地结合?以及我们在哪里可以持续探索和享受我们自己的实验与周围实验的差距。
### **职业建议**
我很喜欢与其他设计师谈论你第一次把自己的设计放在别人面前,看着他探索、体验和(希望是)享受的时刻。
在那一刻,即使是在那个人真正被设计吸引之前,你总是能看到一些你之前不曾注意的东西。就像是老话说的那样“鳞片从你的眼中掉下来了(译者注:指恍然大悟)”。你突然发现了在你的理解、计划和直觉之外的那么多东西。
那些时刻是非常珍贵的,这对于所有的设计师来说都是一样的,不论他有多高的成就。
相比来说,设计本身似乎变得不那么珍贵了,所以在项目中尽可能创造这种时刻。你不需要为此获得许可。
在 [frog](http://www.frogdesign.com/) 工作了13年,我有幸在许多不同的团队中经历了一次又一次那样的情形。
设计的质量总是,也只能由设计所产生的反馈来衡量,通过这个设计如何吸引、支持用户并使他们感到高兴。
[行为就是我们的媒体](http://www.ixda.org/resources/robert-fabricant-behavior-our-medium),切记!
================================================
FILE: TODO/12-best-practices-for-user-account.md
================================================
> * 原文地址:[12 best practices for user account, authorization and password management](https://cloudplatform.googleblog.com/2018/01/12-best-practices-for-user-account.html)
> * 原文作者:[Google Cloud Platform](https://cloudplatform.googleblog.com/)
> * 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
> * 本文永久链接:[https://github.com/xitu/gold-miner/blob/master/TODO/12-best-practices-for-user-account.md](https://github.com/xitu/gold-miner/blob/master/TODO/12-best-practices-for-user-account.md)
> * 译者:[Wangalan30](https://github.com/Wangalan30)
> * 校对者:[ryouaki](https://github.com/ryouaki), [Potpot](https://github.com/Potpot)
# 用户账户、授权和密码管理的 12 个最佳实践
账户管理、授权和密码管理问题可以变得很棘手。对于很多开发者来说,账户管理仍是一个盲区,并没有得到足够的重视。而对于产品管理者和客户来说,由此产生的体验往往达不到预期的效果。
幸运的是,[Google Cloud Platform](https://cloud.google.com/) (GCP) 上有几个工具,可以帮助你在围绕用户账户(在这里指那些在你的系统中认证的客户和内部用户)进行的创新、安全处理和授权方面做出好的决定。无论你是在 [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine/) 上负责网站托管,还是 [Apigee](https://cloud.google.com/apigee-api-management/) 上的一个 API,亦或是 一个应用[Firebase](https://firebase.google.com/) 或其他拥有经过身份认证用户服务的 APP,这篇文章都会为你展示出最佳实践,来确保你拥有一个安全、可扩展、可使用的账户认证系统。
## 对密码进行散列处理
账户管理最重要的准则是安全地存储敏感的用户信息,包括他们的密码。你必须神圣地对待并恰当地处理这些数据。
不要在任何情况下存储明文密码。相反,你的服务应该存储经过散列处理之后的、不可逆转的密码 —— 比如,可以用 PBKDF2、SHA3、Scrypt 或 Bcrypt 等这些散列算法。同时,散列时还要进行 [加盐](https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet#Use_a_cryptographically_strong_credential-specific_salt) 处理,同时,盐值也不能和登陆用的验证信息相同。不要用已经弃用的哈希技术比如 MDS 和 SHA1,并且,任何情况下都不要使用可逆加密方式或者 [试着发明自己的哈希算法](https://www.schneier.com/blog/archives/2011/04/schneiers_law.html)。
在设计系统时,应该假设你的系统会受到攻击,并以此为前提设计系统。设计系统时要考虑“如果我的数据库今天受损,用户在我或者其他服务上的安全和保障会有危险吗?我们怎样做才能减小事件中的潜在损失。”
另外一点:如果你能够根据用户提供的密码生成明文密码,那么你的系统就是有问题的。
## 如果可以的话,允许第三方提供身份验证
使用第三方提供身份验证,你就可以依赖一个可靠的外部服务来对用户的身份进行验证。Google、Facebook 和 Twitter 都是常用的身份验证提供者。
你可以使用 [Firebase Auth](https://firebase.google.com/docs/auth/) 这样的平台在已有的身份验证体系的基础上再添加额外的身份验证方式。使用 Firebase Auth 有许多好处,比如更简单的管理、更小的受攻击面和一个多平台的 SDK。通过这个清单我们可以接触更多的益处。查看我们专为企业设计的 [案例](https://firebase.google.com/docs/auth/case-studies/),可以让你在一日之内集成 Firebase Auth。
## 区分用户身份和用户账户的概念
你的用户并不是一个邮件地址,也不是一个电话号码,更不是由一个 OAUTH 回复提供的特有 ID。他们是你的服务中,所有与之相关的独特、个性化的数据和经验呈现的最终结果。一个设计优良的用户管理系统在不同用户的个人简介之间低耦合且高内聚。
在概念上将用户账户和证书区分开可以极大地简化使用第三方身份验证的过程,允许用户修改自己的用户名,并关联多个身份到单一用户账户上。在实用阶段,这样可以使我们对每个用户都有一个内部的全局标识符,并通过这个 ID 将他们的个人简介与身份验证相关联,而不是将它全部堆放在一条记录里。
## 允许单一用户账户关联多重身份
一个每星期用 [用户名和密码](https://firebase.google.com/docs/auth/web/password-auth) 在你的服务上认证的用户,往往会选择下次登录使用 [Google 登录](https://firebase.google.com/docs/auth/web/google-signin),但是他们可能没意识到这样会创建重复的账户。同样的,一个用户可能将多个邮件地址连接到你的服务上。如果你能够正确地将用户的身份和认证区分开,那么 [关联多个身份](https://firebase.google.com/docs/auth/web/account-linking) 到一个单一用户上将是一件十分简单的事情。
你的系统需要考虑这样一种情况:当用户已经进行了一部分或者已经完成了整个注册过程之后,他们才意识到,他们正在使用一个与他们已有的账户完全无关的新的第三方身份。要解决这个问题可以简单地要求客户提供一份普通的身份细节,比如邮件地址、电话或用户名等。如果这份数据与系统中已有的用户相匹配,则需要他们使用已知的身份认证,并将新的 ID 关联到他们已有的账户上。
## 不要限制较长或者复杂的密码
NIST 最近在 [密码的复杂度和强度](https://pages.nist.gov/800-63-3/sp800-63b.html#appendix-astrength-of-memorized-secrets) 上更新了指南。既然你正在(或者很快就要)使用一个强加密的哈希值来进行密码存储,那么大部分的问题已经解决了。无论输入内容的长短,哈希值总会生成一个固定长度的输出值,所以你的用户应该根据自己喜好的长度设置自己的用户密码。如果你必须限制密码的长度,请按照你的服务器所允许的 POST 的最大值来设置。实际来说。这通常超过1M。
你的哈希密码将包含一小部分已知的 ASCII 码。如果不是,你可以轻易地将一个二进制的哈希值转成 [Base64](https://en.wikipedia.org/wiki/Base64)。考虑到这一点,你应该允许你的用户在设置密码时自由地使用任何他们想要的字符。如果有人想要一个由 [Klingon](https://en.wikipedia.org/wiki/Klingon_alphabets)、[Emoji](https://en.wikipedia.org/wiki/Emoji#Unicode_blocks) 以及两端带有空格的控制字符组成的密码,你不能因任何技术实现上的理由而拒绝他们。
## 不要对用户名强加不合理的规则
如果一个网站或服务要求用户名长度必须大于两个或三个字 符、限制隐藏字符或不允许用户名的两端带有空格,这都不属于不合理的范畴。然而,有些网站的要求未免有些极端,比如,最小长度为八个字符或不允许使用任何大于 7bit 的 ASCII 字母和数字。
一个对用户名要求严格的站点会给开发者提供一些捷径,但这却是以用户的损失为代价的,同时,一些极端的情况也会带走一定数量的用户。
有些情况需要我们分配用户名。如果你的服务属于这些情况,要确保用户名能够使用户在回想或交流时感觉到足够友好。由字母和数字组成的 ID 应该尽量避免会在视觉上会产生歧义的符号,比如“Il1O0”。同时,我们建议你对所有随机生成的字符串进行字典扫描,以确保没有嵌入用户名中的意外信息。这些相同的准则适用于自动生成的密码。
## 允许用户修改用户名
令人普遍感到惊讶的是,原有系统或是其他提供邮箱账户的平台都不允许用户修改他们的用户名。我们有很多 [正当理由](https://www.computerworld.com/article/2838283/facebook-yahoo-prevent-use-of-recycled-email-addresses-to-hijack-accounts.html) 不允许重用已经自动回收的用户名,但是如果你的长期用户突然想要换个新的用户名,最好能不用另外新建一个账户。
你可以允许使用别名,并让你的用户选择一个首要的别名,以此来满足他们想要修改自己用户名的要求。你可以在此功能之上应用任何你需要的商务规则。有些系统可能会允许用户一年修改一次用户名或者只显示用户的别名。电子邮件服务提供商应该可以确保用户在将旧用户名与他们的账户分离开,或是完全禁止断开旧用户名之前,已经充分的了解了其中的风险。
为你的平台选择正确的规则,但是要确保他们允许你的用户随着时间增长和变化。
## 让你的用户删掉他们的账户
没有提供自助服务的服务系统数量惊人,这对一个用户来说就意味着删掉他们的账户和相关数据。对一个用户来说,永久地关掉一个账户并删掉所有的个人数据有很多的好理由。这些需求点需要与你的安全性和顺从性需求相平衡,但大多数受监管的环境都会提供有关数据存储的相关指导。为避免顺从性以及黑客的关注,一个较普遍的做法是让用户安排他们的账户,以便未来自动删除。
在某些情况下,你可能会 [被合法地要求遵照](http://ec.europa.eu/justice/data-protection/files/factsheets/factsheet_data_protection_en.pdf) 用户的需求及时的删掉他们的数据。同样,当“已关闭”账户的数据泄漏时,你也会极大的增加你的曝光率。
## 在对话长度上做出理智的选择
安全和认证中一个经常被忽视的方面是 [会话长度](https://firebase.google.com/docs/auth/web/auth-state-persistence)。Google 在 [确保用户是他们所说的人](https://support.google.com/accounts/answer/7162782?co=GENIE.Platform%3DAndroid&hl=en) 方面做了很多努力,并将基于某些事件或行为进行二次确认。用户可以采取措施 [进一步提高自己的安全度](https://support.google.com/accounts/answer/7519408?hl=en&ref_topic=7189123)。
你的服务可能有充分的理由为非关键的分析目的保持一段会话无限期开放,但是这应该有 [门槛](https://pages.nist.gov/800-63-3/sp800-63b.html#aal1reauth),要求输入密码,第二因素或其他用户验证。
考虑一个用户在重新认证之前需要保持多长时间的非活跃状态。如果某人想要执行密码重置,需要在所有活跃会话中验证用户身份。如果一个用户想要更改他们个人信息的核心内容,或者当他们在执行一次敏感的行为时,提示进行身份验证或第二因素。要考虑不允许同时在不同设备或地址登录是否有意义。
当你的服务终止用户会话或需要再次验证时,实时提示用户或提供一种机制来保存自他们上次验证后还没来得及保存的全部活动。对用户来说,当他们填好一份很长的表格并在之后提交,却发现他们输入的所有信息全部丢失且他们必须再次登录,这是十分令人沮丧的。
## 使用两步身份验证
要考虑当用户选择 [两步验证](https://www.google.com/landing/2step/) (也称两因素验证或只是 2FA)方法而账户被盗后的实际影响。由于有许多缺陷,SMS 2FA 认证 [被 NIST 反对](https://pages.nist.gov/800-63-3/sp800-63b.html),然而,它或许是你的用户考虑到这是一项微不足道的服务时会接受的最安全的选择了。请尽可能提供你能提供的最安全的 2FA 认证。支持第三方身份验证和在他们的 2FA 上面打包是个十分简单的方法,使你能够不花费太多力气就能提高你的安全度。
## 用户 ID 不区分大小写
你的用户不会关心或者甚至可能并不记得他们确切的用户名。用户名应该完全不区分大小写。与输入时将所有字符转换为小写相比,存储时将用户名和邮件地址全部保存为小写显得十分微不足道。
智能手机的使用代表用户设备所占的比重不断增加。他们大多数提供纯文本字段的自动更正和首字母自动大写功能。
## 建立一个安全认证系统
如果你在使用一个像 Firebase Auth 一样的设备,大量的安全隐患都会自动帮你处理。然而,你的设备总是需要正确地设计以防滥用。核心的问题包括实现 [密码重置](https://firebase.google.com/docs/auth/web/manage-users#send_a_password_reset_email)而不是密码检索,详细账户活动日志,限制登录尝试率,多次登录尝试不成功后锁定账户以及需双因素识别已长时间限制的未知设备或账户。安全认证系统还有很多方面,所以请查看下方的链接获取更多信息。
## 进一步阅读
还有很多优秀的可用资源可以指导你的开发进程,更新或迁移你的账户和认证管理系统。我建议以下为出发点:
- NIST 800-063B 包含认证和生命周期管理
- OWASP 持续更新密码存储备忘单
- OWASP 使用认证备忘单进行深入研究
- Google 的 Firebase 认证网站有丰富的指南库,参考资料和示例代码
---
> [掘金翻译计划](https://github.com/xitu/gold-miner) 是一个翻译优质互联网技术文章的社区,文章来源为 [掘金](https://juejin.im) 上的英文分享文章。内容覆盖 [Android](https://github.com/xitu/gold-miner#android)、[iOS](https://github.com/xitu/gold-miner#ios)、[前端](https://github.com/xitu/gold-miner#前端)、[后端](https://github.com/xitu/gold-miner#后端)、[区块链](https://github.com/xitu/gold-miner#区块链)、[产品](https://github.com/xitu/gold-miner#产品)、[设计](https://github.com/xitu/gold-miner#设计)、[人工智能](https://github.com/xitu/gold-miner#人工智能)等领域,想要查看更多优质译文请持续关注 [掘金翻译计划](https://github.com/xitu/gold-miner)、[官方微博](http://weibo.com/juejinfanyi)、[知乎专栏](https://zhuanlan.zhihu.com/juejinfanyi)。
================================================
FILE: TODO/14-must-knows-for-an-ios-developer.md
================================================
> * 原文地址:[14 must knows for an iOS developer](https://swiftsailing.net/14-must-knows-for-an-ios-developer-5ae502d7d87f#.5qoqojm6n)
* 原文作者:[Norberto Gil Vasconcelos](https://swiftsailing.net/@nobizard)
* 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者:[Deepmissea](http://deepmissea.blue)
* 校对者:[ldhlfzysys](http://www.jianshu.com/u/bff850e51395),[ChenDongnan](https://github.com/ChenDongnan)
# iOS 开发者一定要知道的 14 个知识点

作为一个 iOS 开发者(现在对 Swift 中毒颇深 😍)。我从零开始创建应用、维护应用,并且在很多团队待过。在我的职业生涯中,一句话一直响彻耳边:“如果你不能解释一件事情,那你根本就不理解它。” 所以为了充分的理解我每天的日常,我创建了一个清单,在我看来,它适合任何 iOS 开发者。我会试着清晰的解释每一个观点。**[请随时纠正我,提出你的意见,或者干脆也来一发你觉得应该在列表上的“必须知道”的知识]**
**Topics:** [**源码管控**|**架构**|**Objective-C vs Swift**|**响应式**|**依赖管理**|**信息存储**|**CollectionViews 和 TableViews**|**UI**|**协议**|**闭包**|**scheme**|**测试**|**定位**|**字符串本地化**]
事不宜迟,没有特定的顺序,这就是我的清单。
#### 1 — 源码管控
恭喜你被雇佣了!现在从 repo 上拿代码开始干活吧,还等什么?
每个项目都需要控制源码的版本,即使只有你一个开发者。最常见的就是 Git 和 SVN 了。
**SVN** 依赖于一个集中的系统来进行版本管理。它是一个用来生成工作副本(working copies)的中央仓库,并且需要网络连接才能访问。 它的访问授权是基于路径的,追踪的是注册文件的改变,更改历史记录只能在中央仓库中完全可见。 工作副本只包含最新版本。
*推荐的图形界面工具:*
[**Versions - Mac Subversion Client (SVN)** *Versions, the first easy to use Mac OS X Subversion client* versionsapp.com](http://versionsapp.com)
**Git** 依赖于一个分布式的系统来进行版本管理。你有一个本地的仓库来进行工作,只需要在同步代码的时候联网。它的访问授权是整个目录,追踪的是注册内容的改变,在工作副本和主仓库都可也看到完整的更改历史。
*推荐的图形界面工具:*
[**SourceTree | Free Git and Hg Client for Mac and Windows**
*SourceTree is a free Mercurial and Git Client for Windows and Mac that provides a graphical interface for your Hg and…* www.sourcetreeapp.com](https://www.sourcetreeapp.com)
#### 2 — 架构
你的指尖因兴奋而颤抖,你想通了怎么控制源码!那先来杯咖啡压压惊?喝个P!现在的你正是巅峰状态,正是写代码的最佳时刻!不,还需要再等等,等什么?
在你蹂躏你的键盘之前,你需要先为项目选择一个架构。因为项目还没开始,你需要让项目的结构符合你的选择的架构。
有很多在移动应用开发中广泛使用的架构,MVC、MVP、MVVM、VIPER 等等。我会简短的概括这些之中 iOS 开发者最常用的:
- **MVC** — 模型(**M**odel)、视图(**V**iew)、控制器(**C**ontroller)的缩写。控制器的作用是连接模型和视图,因为他们互不干涉。视图和控制器的联系非常紧密,因此,控制器最终几乎做了所有的工作。这意味着什么?简单来说,如果你创建了一个复杂的视图,你的控制器(ViewController)会疯狂的变大。有办法绕过这个,但是他们不符合 MVC 规则。另一个 MVC 不好的地方是测试。如果你做测试(这对你有好处!),你会发现只能测试模型,因为跟其他层相比,它是唯一能单独分离出来的层。MVC 的加分项是直观,而且大多数 iOS 开发者都用习惯了。

- **MVVM** — 模型(**M**odel)、视图(**V**iew)、视图模型(**V**iew**M**odel)的缩写。在视图和视图模型之间设置一种绑定(基本地响应式编程)的关系,这使得视图模型来调用模型层改变自身时,由于和视图之间的绑定关系而自动更新视图。视图模型并不知道视图的所有事情,这样利于测试,而且绑定节省了大量代码。

对于其他架构更深入的说明和信息,我建议阅读这篇文章:
[**iOS Architecture Patterns**
*Demystifying MVC, MVP, MVVM and VIPER* medium.com](https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52)
这一条看上去不是很重要,但是代码良好的结构性和组织性可以避免很多头疼的问题。每个开发者有时候都会犯一个大错,那就是为了得到想要的结果而放弃组织代码,他们以为这节省了时间。如果你不同意,引用自 Benji:
> 组织代码所耗费的每一分钟,都相当于赚了一个小时。
> — 本杰明·富兰克林
我们的目标是让代码变得直观易读,这样你才能简单地建立并维护。
#### 3 — Objective-C vs. Swift
在决定选择哪种语言编写应用时,你需要知道不同的语言能带来什么。如果可以选择的话,我个人建议使用 Swift。为什么?实话说,Objective-C 相比于 Swift 是有微弱优势的,大多数的例子和教程都是用 Objective-C 写的,而且每次 Swift 语言更新的时候,都会对范式做调整,真是让人发愁。但从长远的角度来说,这些问题都会消失。
Swift 真的在很多方面都领先一步。它读起来简单,类似于自然语言,而且因为它不是基于 C 构建的,使得它可以抛弃 C 语言中的语法惯例。对于知道 Objective-C 的人来说,它意味着没有分号,方法调用不需要括号,而且条件分支的表达式也不用括号。对代码的维护也更容易了,Swift 只有一个 .swift 文件,而不是 .h 和 .m 文件,因为 Xcode 和 LLVM 编译器可以找出依赖关系,并且自动地执行增量构建。总而言之,你不需要担心创建模板代码,而且你会发现用更少的代码可以得到相同的结果。
不信?Swift 还更安全、更快而且还负责内存管理(大多数情况)。知道在 Objective-C 中用一个未初始化的指针变量调用一个方法会发生什么吗?什么也不会发生。表达式变成空操作(no-op),然后跳过了。听起来特棒,因为你不用担心这会导致应用崩溃了,尽管,它会导致一系列严重的 bug 和不稳定的行为,以致于你开始怀疑人生,决定重新考虑你的职业生涯。我非常确定你不想那样。不过当一个职业遛狗人的念头听起来还是有那么一点吸引人的。Swift 通过可选类型消除了这个问题。不仅你会精心思考什么会是 nil,并在某个位置设置条件来来阻止它的使用,Swift 也会在 nil 值被使用时,弹出运行时的崩溃,以便更好的调试。内存方面,简单的说,ARC(自动引用计数)在 Swift 上工作的更好。在 Objective-C 里,ARC 并不支持 C 语言的代码和 API,比如 Core Graphics。
#### 4 — 响应式还是非响应式?

函数响应式编程(**FRP**)看上去似乎很潮。它的意图是更简单的组合异步操作并以事件/数据流的方式驱动。对于 Swift来说,通过 `Observable<Element>` 接口来表示的通用计算抽象。(译者注:这里 `Observable<Element>` 并不是原生的,而是 RxSwift 的接口)
最简单的例子还是写一点代码。让我们看看小 Timmy 和他的姐姐 Jenny,他们想要买一个新的游戏机。Timmy 每周从他父母那里得到 5€,Jenny 也一样。不过 Jenny 每周末还能通过发报纸赚到 5€。如果他们把每一分钱都存下来,我们就可以每周检查一下他们是否能得到游戏机。每当他们其中一人的存款变化时,就计算一次他们的存款总额。如果钱够了,一个消息就会被存储在变量 isConsoleAttainable 里。在任何时候,我们可以通过订阅它来检查消息。
// Savings
let timmySavings = Variable(5)
let jennySavings = Variable(10)
var isConsoleAttainable =
Observable
.combineLatest(timmy.asObservable(), jenny.asObservable()) { $0 + $1 }
.filter { $0 >= 300 }
.map { "\($0) is enough for the gaming console!" }
// Week 2
timmySavings.value = 10
jennySavings.value = 20
isConsoleAttainable
.subscribe(onNext: { print($0) }) // Doesn't print anything
// Week 20
timmySavings.value = 100
jennySavings.value = 200
isConsoleAttainable
.subscribe(onNext: { print($0) }) // 300 is enough for the gaming console!
我们做的这点东西对 FRP 来说都是皮毛,一旦你真的用起来了,它会为你打开新世界的大门,甚至允许你采用不同于传统 MVC 的架构,对,就是 MVVM !
你可以看看 Swift FRP 王座的两位主要竞争者:
- **RxSwift**
[**ReactiveX/RxSwift**
*RxSwift - Reactive Programming in Swift* github.com](https://github.com/ReactiveX/RxSwift)
- **ReactiveCocoa**
[**ReactiveCocoa/ReactiveCocoa**
*ReactiveCocoa - Streams of values over time* github.com](https://github.com/ReactiveCocoa/ReactiveCocoa)
#### 5 — 依赖管理
CocoaPods 和 Carthage 是 Swift 和 Objective-C Cocoa 项目里最常见的依赖管理工具。他们简化了库的实现,并且保持库的更新。
**CocoaPods** 有大量的三方库支持,用 Ruby 构建,可以用下面的命令来安装:
$ sudo gem install cocoapods
安装过后,你需要为项目创建一个 Podfile 文件,你可以运行下面这条命令:
$ pod init(译者注:原文是 pod install ,写错了。)
或者按照这个结构自定义一个 Podfile 文件:
platform :ios, '8.0'
use_frameworks!
target 'MyApp' do
pod 'AFNetworking', '~> 2.6'
pod 'ORStackView', '~> 3.0'
pod 'SwiftyJSON', '~> 2.3'
end
一旦完成创建,那就是时候来安装你的新 pods 了
$ pod install
现在,你可以打开项目里的 **.xcworkspace** 文件,别忘了引入你需要的依赖。
**Carthage** 是一个去中心化的依赖管理工具,和 Cocoapods 相对立。缺点是使用者很难找到现有的使用 Carthage 的库。另一方面来说,它只需要很少的维护工作,而且避免了各种中心化产生的问题。
你可以看看他们的 GitHub 来获取更多的关于安装和使用的信息:
[**Carthage/Carthage**
*Carthage - A simple, decentralized dependency manager for Cocoa* github.com](https://github.com/Carthage/Carthage)
#### 6 — 信息存储
如果想用简单的方式为你的应用存储数据,那么 **NSUserDefaults** 就是这种方式,因为它通常保存的是用户的默认数据,在应用首次加载的时候就被放入了。出于这个原因,它就变得简单易用,尽管这也意味着一些限制。其中一条限制就是它接受对象的类型。它的作用和 **Property List(Plist)** 非常像(其中也有同样的限制)。下面的六种类型能被存储到里面:
- NSData
- NSDate
- NSNumber
- NSDictionary
- NSString
- NSArray
为了和 Swift 兼容,NSNumber 可以接受以下的类型:
- UInt
- Int
- Float
- Double
- Bool
对象可以以下列方式保存到 NSUserDefaults(要先创建一个常量,作为我们要保存的对象的键):
let keyConstant = "objectKey"
let defaults = NSUserDefaults.standardsUserDefaults()
defaults.setObject("Object to save", objectKey: keyConstant)
想要从 NSUserDefaults 读取一个对象时,这样做:
if let name = defaults.stringForKey(keyConstant) {
print(name)
}
为了获取特定类型的对象而不是 AnyObject(Swift 3 中的 Any),有几个便捷函数来读写 NSUserDefaults。
**钥匙串**是一个可以保存密码、证书、私钥以及私有信息的密码管理系统。keychain 的设备加密有两个级别。第一级别是使用锁屏密码作为密钥,第二级别使用由设备生成的密钥,并存储在设备上。
这意味着什么呢?意味着它不是很安全,尤其是你不使用锁屏密码的时候。同样,也有很多方式可以获取第二种密钥,毕竟它是存在设备上的。
最好的解决方案还是使用你自己的加密。(不要把密钥存在设备上)
**CoreData** 是一个苹果公司开发的框架,它的目的是让你的应用以面向对象的方式与数据库沟通。它简化了访问过程,减少了代码量而且去掉了需要测试的那部分代码。
如果你的应用需要数据持久化,那么你就应该用它,它大大的简化了数据持久化的过程,这意味着你再也不用构建与数据库连接的这部分程序,以及这部分的测试代码。
#### 7 — CollectionViews 和 TableViews
每个应用都有或多或少的 CollectionView 或 TableView。了解他们的工作原理,什么时候用哪个,都会在未来防止你的应用发生复杂的更改。
**TableViews** 以单列的方式,展示了一个列表,它只能垂直的滑动。列表的每项由 UITableViewCell 来表示,可以完全的自定义。这些项以 sections 和 rows 的方式来分类。
**CollectionViews** 也展示了一个列表,不过他可以有多行多列(像网格)。它水平竖直都可以滑动,每个项通过 UICollectionViewCell 来表示。和 UITableViewCell 一样,也可以自定义,并按照 sections 和 rows 的方式来分类。
他们有相似的功能,并都使用可复用 cell 来提高流畅性。选择哪个取决于你要写的列表的复杂程度。集合视图可以用于任何的列表,在我看来,始终是个不错的选择。现在假设你想做一个联系人列表。这太简单了,一列就可以搞定,所以你选择用 UITableView。伟大的作品!几个月以后,你们的设计师决定联系人还是以网格的形式来显示。那你就只能把 UITableView 的实现全部换成 UICollectionView 的。我想说的是,即使你的列表很简单,用 UITableView 足以搞定,如果有好灵感,设计也许会变,所以最好还是用 UICollectionView 来实现一个列表。
不管你最后选择了哪个,最好写一个通用的 tableview/collectionview,它让你的实现更容易,并且可以重用很多代码。
#### 8 — Storyboards vs. Xibs vs. 手撸 UI 代码
他们每一种方式都可以在编写 UI 方面独挡一面,当然,也没有人不让你一起用。
**Storyboards** 允许你为项目创建一个更宽泛的视图,设计师们很喜欢,因为他们可以看到应用的流程和所有的屏幕。坏处在于,随着屏幕的增加,他们之间的连接变得越来越混乱,storyboard 的加载时间也会增加。合并代码的冲突也会频繁的发生,因为所有的 UI 都写在了一个文件上。而且这些冲突还很难解决。
**Xibs** 提供了一个屏幕或者部分屏幕的视图。他们的好处是易于复用,合并代码的冲突比用 storyboard 要少,而且也可以简单的看到每个屏幕上有什么。
**手撸 UI 代码** 让你在最大程度上控制你的代码,并减少合并冲突,如果冲突发生,也可以很容易的解决。缺点就是没法看到具体的内容,还要花额外的时间去撸 UI。
有多种不同的方式来实现你应用的 UI 部分。但我还是主观的认为,最好的方式就是三种混合使用。使用多个 Storyboards(现在 storyboards 之间可以连接),然后用 Xibs 来展现那些非主屏幕上的内容,最后,在确定的情况下用代码做额外的控制。
#### 9 — 协议!
协议存在于我们的日常生活中,它可以来确定在给定的环境下,我们知道如何反应。假如你是一个消防员,现在有紧急情况。
每个消防队员都必须遵守协议,按照既定要求,才能成功的应对。这同样适用于一个 Swift/Objective-C 协议。
一个协议是按照给定的功能,定了了方法、属性和其他需要的约定。它可以被类、结构体或枚举采用,然后由他们提供这些功能具体的实现。
这里有一个怎么创建并使用协议的例子:
在例子中,我会使用一个枚举,来列出不同的灭火材料。
enum ExtinguisherType: String {
case water, foam, sand
}
接着,我要创建一个能应对紧急情况的协议。
protocol RespondEmergencyProtocol {
func putOutFire(with material: ExtinguisherType)
}
现在我要创建一个消防员来实现协议。
class Fireman: RespondEmergencyProtocol {
func putOutFire(with material: ExtinguisherType) {
print("Fire was put out using \(material.rawValue).")
}
}
干的漂亮!现在让消防员行动起来。
var fireman: Fireman = Fireman()
fireman.putOutFire(with: .foam)
结果应该是 *“Fire was put out using foam.”*
协议也被用于**委托**。它允许类或结构体将功能委托给另一个类型的实例。创建具有委托职责的协议,以保证符合类型的实例为他们提供具体的功能。
快速示例!
protocol FireStationDelegate {
func handleEmergency()
}
消防站将处理紧急情况的行动委托给消防员。
class FireStation {
var delegate: FireStationDelegate?
fun emergencyCallReceived() {
delegate?.handleEmergency()
}
}
这就意味着消防员也要实现 FireStationDelegate 协议。
class Fireman: RespondEmergencyProtocol, FireStationDelegate {
func putOutFire(with material: ExtinguisherType) {
print("Fire was put out using \(material.rawValue).")
}
func handleEmergency() {
putOutFire(with: .water)
}
}
需要做的就是把待命的消防员设为消防站的代理,他会处理那些接到的火警电话。
let firestation: FireStation = FireStation()
firestation.delegate = fireman
firestation.emergencyCallReceived()
结果应该是 *“Fire was put out using water.”*
可以看到,协议非常有用。用他们还可以做很多很多的事情,但现在我只介绍到这里。
#### 10 — 闭包
这里我只说 Swift 里的闭包。他们多数的用途是,作为一个函数完成的回调或者是高阶函数。函数回调,顾名思义,就是一个任务完成,执行这段回调代码。
> Swift 里的闭包类似于 C 和 Objective-C 中的 block。
> 闭包是第一类对象,所以可以被嵌套和传递(像 Objective-C 里的 block)。
> 在 Swift 里,函数是一种特殊的闭包。
来源: [Swift Block Syntax](http://fuckingswiftblocksyntax.com)
这是一个学习闭包语法很不错的地方。
#### 11 — scheme
简单的说,schemes 就是在各种配置间切换的简单方式。设想几种情况。Workspace 包含了各种的相关联的项目。项目可以多个 target(target指定了要构建的产品以及如何构建)。项目也可能有多种配置。Xcode scheme 定义了要构建的 target 集合、构建时使用的配置以及要执行测试的集合。

#### 12 — 测试
如果你分配时间为你的应用编写测试代码,那你正走向正轨。它不是万能的,不能避免每一个错误,也不能保证你的应用没有任何问题,但我还是觉得好处多于坏处。
让我们从单元测试开始 **坏处:**
- 开发时间增加;
- 代码量增加。
**好处:**
- 强制的创建模块化代码 (这样才利于测试);
- 显然,更多的 bug 会在正式版本发布前被找到;
- 更好维护。
配合 **Instruments** 工具,你已经拥有了所有让你应用变得流畅的工具,无论从处理 bug 角度还是解决崩溃的角度。
有不少的工具可以测试你的应用有什么问题。你可以根据你想要知道的,来选择其中的一个或者多个。最常用的,大概就是 Leak Checks(内存泄露检测),Profile Timer(性能调优) 和 Memory Allocation(内存分配)了。
#### 13 — 定位
很多应用会有一些功能需要知道用户的位置。所以了解一下 iOS 上定位系统的基本知识是一个不错的点子。
有个叫做 Core Location 的框架给了你需要的一切:
> Core Location 框架,可以让你确定与设备相关的当前位置或方向。它通过可用的硬件来确认用户的位置与方向。你可以使用框架内部的类和协议来配置或计划位置的变更和方向的转变。你也可以使用它来定义地理区域,并监控用户何时跨越边界。在 iOS 里,你也可以定义一个蓝牙信标区域。
很不错是吧?查看苹果的官方文档和示例代码,来更好的了解你能做什么以及怎么做。
[**关于定位服务和地图**
*描述了定位和地图服务的使用* developer.apple.com](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/LocationAwarenessPG/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009497)
#### 14 — 字符串本地化
这是每个应用都需要实现的。它允许应用根据所在地区而改变语言。即使你的应用只有一种语言,在将来也可能会有添加另一种语言的情况。如果所有的文本都使用了字符串本地化,需要做的所有工作就是为新语言添加一个 Localizable.strings 文件的翻译版本。
可以通过文件检查器将资源添加到一个语言。 要使用 NSLocalizedString 获取字符串,所有你要做的就是下面的内容:
NSLocalizedString(key:, comment:)
不幸地是,往 Localization 文件里添加新字符串是手动的。以下是一个结构示例:
{
"APP_NAME" = "MyApp"
"LOGIN_LBL" = "Login"
...
}
现在一个相对应的,不同语言(葡萄牙语),Localizable 文件格式:
{
"APP_NAME" = "MinhaApp"
"LOGIN_LBL" = "Entrar"
...
}
甚至有办法实现复数。😁
================================================
FILE: TODO/17-xcode-tips-and-tricks-that-every-ios-developer-should-know.md
================================================
> * 原文地址:[17 Xcode Tips and Tricks That Every iOS Developer Should Know](https://www.detroitlabs.com/blog/2017/04/13/17-xcode-tips-and-tricks-that-every-ios-developer-should-know/)
> * 原文作者:[Elyse Turner](https://www.detroitlabs.com/blog/author/elyse-turner/)
> * 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
> * 本文永久链接:[https://github.com/xitu/gold-miner/blob/master/TODO/17-xcode-tips-and-tricks-that-every-ios-developer-should-know.md](https://github.com/xitu/gold-miner/blob/master/TODO/17-xcode-tips-and-tricks-that-every-ios-developer-should-know.md)
> * 译者:[PTHFLY](https://github.com/pthtc)
> * 校对者:[Danny1451](https://github.com/Danny1451)、[ryouaki](https://github.com/ryouaki)
# 每个 iOS 开发者都该知道的 17 个 Xcode 小技巧

对于 iOS 开发者,尤其是新手,来说,Xcode 可谓太过复杂,但是不要害怕!我们在这里帮助你。 Xcode 可以帮助你、允许你做的事情非常多。熟悉你的 IDE 是最简单有效增进实力的方法之一。
在对抗越来越臃肿的 Xcode 方面,我们底特律实验室没有新手,并且想与你分享我们的对抗策略。在底特律实验室的开发者投票之后,这是 17 个我们最受欢迎的 Xcode 小技巧。
**键位参考:**
* `⌃`: Control
* `⌘`: Command
* `⌥`: Option
* `⇧`: Shift
* `⏎`: Return
* * *
**1)** 上下移动一整行或者许多行代码:使用 `⌘ ⌥ {` 上移 或者 `⌘ ⌥ }` 下移。如果你选择了一些内容, Xcode 会移动所有你选择的代码行;否则,只会移动光标所在的那一行。
**2)** 使用 tabs 来保持聚焦。Tab 可以在不同使用情况下被单独配置和优化。Tab可以在`Behaviors`<sup><a href="#note1">[1]</a></sup>中被命名以及使用。
**3)** 使用 `Behaviors` 来根据上下文显示有用的面板。
* `Behaviors` 在 Xcode 回应某个事项时是重要的偏好设置。当你开始构建的时候,你可以设置一个偏好来打开一个窗口来响应成功、失败、开始调试等等。
* **有趣的事实:** 在测试失败的时候,你可以将播放音乐作为一个 `behavior` 。一个这儿的开发者喜欢用『 The Price is Right. 』的音乐当做失败音。
**4)** 以辅助编辑窗模式打开文件。当使用『快速打开』( `⌘ ⇧ O` )时,按住 `⌥` 的同时按 `return`。
**5)** 当光标处于显示『 Copy Qualified Symbol Name 』命令的方法内,使用 `⌘ ⇧ ⌃ ⌥ C` 会以一个优质、容易粘贴的格式拷贝方法名称。(译者注:例如`[UIColor colorWithRed:255/255.0f green:127/255.0f blue:80/255.0f alpha:1]`将会被拷贝为`+[UIColor colorWithRed:green:blue:alpha:]`。)
**6)** 当按住 `⌥` 并点击代码或方法时,有效地使用 Xcode 解析的行内文档可以提供帮助。
**7)** 在全局范围一次性更改某个变量名,可以使用 `⌘ ⇧ E`<sup><a href="#note2">[2]</a></sup>。
**8)** 你是否使用终端进入一个文件夹并且不确定你的工程使用的是 Xcode 的 workspaces 或者 仅仅是 project ?只需要运行 `open -a Xcode` 来打开文件夹本身 Xcode 会自动识别。专业提示:把这个加入你的 `.bash_profile` ,使用一个牛逼的名字(比如 `workit` )来让你看起来像一个真的骇客。
**9)** Xcode 中显示和隐藏的快捷键。
* `⌘ ⇧ Y` : 显示/隐藏调试区域
* `⌘ ⌥ ⏎` : 显示辅助编辑器
* `⌘ ⏎` : 隐藏辅助编辑器
**10)** 使用 `⌘ A ^ I` 进行自动缩进代码
**11)** [LICEcap](http://www.cockos.com/licecap/) 对于制作在模拟器中的 GIF 动图非常有帮助,用于项目评审非常棒。在 LICEcap 上方,你可以使用 QuickTime 在屏幕上来分享你的硬件(做一个示范或者使用 LICEcap 制作 GIF )。 在你的 iPhone 或者 iPad 插入的情况下,打开 QuickTime Player,点击 File -> New Movie Recording。然后点击记录按钮旁边的向下箭头,选择你的连接设备。这对于远程展示很有用,使用 LICEcap 来制作 GIF 或者为展示制作真机视频。
**12)** 按下 `⌥ ⇧` 然后点击项目导航栏中的文件打开一个选择窗口,这时你可以选择在编辑器的哪个位置显示打开的文件。
**13)** 按住 `⌥` 的同时点击一个项目导航栏中的文件,它会显示在辅助编辑器中。
**14)** 把导航面板(显示在 Xcode 界面的左边)想成是『 Command 』面板。那是因为按住 `⌘` 的同时按一个数字键可以切换到导航栏内相关的『标签』。例如,`⌘ 1` 打开项目导航;`⌘ 7` 打开断点导航。相似的,把工具面板看作『 Command+Option 』窗口,`⌘ ⌥ 1` 也可以打开那个面板的第一个标签 —— 文件检查器。
**15)** `⌥ ⌘ ↑` 和 `⌥ ⌘ ↓` 在相关文件中进行导航(例如 .m .h 和 .xib 文件)。
**16)** 如果你在与 `code signing` 作战而 Xcode 说你没有一个有效的符合 `provisioning profile` 的签名身份,它可能会显示给你一个看起来随机、没有什么意义的码。find-identity 会很有帮助。命令 `Security find-identity -v` 会显示出一件安装的有效身份。
**17)** 在你的层层叠叠的文件夹中讯中某个文件夹非常浪费时间。在 Xcode 8 中,你可以使用『 Open Quickly 』对话框或者 `⌘ ⇧ O` 来省点时间。当它打开了你可以输入你正寻找的文件的文件名的任何部分来找到它。
你是一个 iOS 开发者吗?看看在这里工作是怎样的体验,如果你有兴趣的话,[点此申请](https://detroitlabs.workable.com/j/F1D69FF0B5)!
译者注:
1. <a name="note1"></a> `Behaviors` 可以在`偏好设置`中找到
2. <a name="note2"></a> 此处意思是缓存选中的变量名,此时进行 `Replace` 操作时,替换内容将会直接显示为缓存的内容,而不是空白一片。
---
> [掘金翻译计划](https://github.com/xitu/gold-miner) 是一个翻译优质互联网技术文章的社区,文章来源为 [掘金](https://juejin.im) 上的英文分享文章。内容覆盖 [Android](https://github.com/xitu/gold-miner#android)、[iOS](https://github.com/xitu/gold-miner#ios)、[前端](https://github.com/xitu/gold-miner#前端)、[后端](https://github.com/xitu/gold-miner#后端)、[区块链](https://github.com/xitu/gold-miner#区块链)、[产品](https://github.com/xitu/gold-miner#产品)、[设计](https://github.com/xitu/gold-miner#设计)、[人工智能](https://github.com/xitu/gold-miner#人工智能)等领域,想要查看更多优质译文请持续关注 [掘金翻译计划](https://github.com/xitu/gold-miner)、[官方微博](http://weibo.com/juejinfanyi)、[知乎专栏](https://zhuanlan.zhihu.com/juejinfanyi)。
================================================
FILE: TODO/19-things-i-learnt-reading-the-nodejs-docs.md
================================================
> * 原文地址:[19 things I learnt reading the NodeJS docs](https://hackernoon.com/19-things-i-learnt-reading-the-nodejs-docs-8a2dcc7f307f#.8iaiz8xls)
* 原文作者:[David Gilbertson](https://hackernoon.com/@david.gilbertson)
* 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者:jacksonke20120711@gmail.com
* 校对者:[mortyu](https://github.com/mortyu), [rottenpen](https://github.com/rottenpen)
# 阅读 NodeJS 文档,我学到了这 19 件事情
我相信我对 Node 了若指掌。我这 3 年来写的网站都是用 Node 来开发的。但实际上,我从没有详细查看 Node 文档。
长期的订阅者应该知道,我正处在书写每一个接口(interface),属性(prop),方法(method),函数(function),数据类型(data type)等等关于 Web 开发的漫漫长途中,这样可以填补我的知识面的空缺。在完成了 HTML,DOM, WebApi, CSS, SVG 和 EcmaScript 之后, Node 文档会是我的最后一站。
对我来说,这里面有很多宝贵的知识,所以我想简短地列举,并且分享它们。我会按吸引力从高到低列举它们,好比我见新朋友时的衣服顺序,(最吸引人的放外面 ^_^)
### 把 querystring 当作通用解析器
假设你从一些古怪的数据库中获取到的数据是一些键值对数组,格式像`name:Sophie;shape:fox;condition:new`。很自然的,你会将它当成一个 JavaScript 对象。你会将所取得的数据以`;`为分隔符切分成数组,然后遍历数组,用`:`分割,第一项作为属性,第二项作为该属性对应的值。
这样对吧?
不用这般麻烦的,你可以使用 `querystring`
const weirdoString = `name:Sophie;shape:fox;condition:new`;
const result = querystring.parse(weirdoString, `;`, `:`);
// result:
// {
// name: `Sophie`,
// shape: `fox`,
// condition: `new`,
// };
[**Query String | Node.js v7.0.0 Documentation**
_By default, percent-encoded characters within the query string will be assumed to use UTF-8 encoding. If an alternative…_nodejs.org](https://nodejs.org/api/querystring.html#querystring_querystring_parse_str_sep_eq_options "https://nodejs.org/api/querystring.html#querystring_querystring_parse_str_sep_eq_options")
### V8 Inspector
运行 node,加上`--inspect`选项,会给出一个 URL 地址。粘贴该 URL 到 Chrome。哈哈,这就能用 Chrome DevTools 调试 Node,这多方便,多轻松。这篇文章有介绍如何使用[ how-to by Paul Irish over here ](https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.evhku718w).
虽然它现在还处于“试验”阶段,但是现在已经极大地解决了我的困挠。
[**Debugger | Node.js v7.0.0 Documentation**
_Node.js includes a full-featured out-of-process debugging utility accessible via a simple TCP-based protocol and built…_nodejs.org](https://nodejs.org/api/debugger.html#debugger_v8_inspector_integration_for_node_js "https://nodejs.org/api/debugger.html#debugger_v8_inspector_integration_for_node_js")
### nextTick 和 setImmediate 的不同点
和多数情况一样,如果能给它们起个更贴切的名字,就很容易记住两者的不同了。
`process.nextTick()` 是 `process.sendThisToTheStartOfTheQueue()`.(译者注:放入队列的第一个位置)
`setImmediate()` 应该被叫做 `sendThisToTheEndOfTheQueue()`.(译者注:放入队列的尾部,最后一个处理的)
(题外话:React 中,我通常将`props`当成`stuffThatShouldStayTheSameIfTheUserRefreshes`,而将`state`当成`stuffThatShouldBeForgottenIfTheUserRefreshes`.这两者长度一致也是个意外,哈哈哈。)
[**Node.js v7.0.0 Documentation**
_Stability: 3 — Locked The timer module exposes a global API for scheduling functions to be called at some future period…_nodejs.org](https://nodejs.org/api/timers.html#timers_setimmediate_callback_args "https://nodejs.org/api/timers.html#timers_setimmediate_callback_args")
[**process | Node.js v7.0.0 Documentation**
_A process warning is similar to an error in that it describes exceptional conditions that are being brought to the user…_nodejs.org](https://nodejs.org/api/process.html#process_process_nexttick_callback_args "https://nodejs.org/api/process.html#process_process_nexttick_callback_args")
[**Node v0.10.0 (Stable)**
_I am pleased to announce a new stable version of Node. This branch brings significant improvements to many areas, with…_nodejs.org](https://nodejs.org/en/blog/release/v0.10.0/#faster-process-nexttick "https://nodejs.org/en/blog/release/v0.10.0/#faster-process-nexttick")
### Server.listen 只带一个参数对象
对于参数传递,我倾向于只使用一个参数 `options` ,而不是传 5 个没命名且必须按照特定顺序的参数。这可以在服务端监听连接时使用。
require(`http`)
.createServer()
.listen({
port: 8080,
host: `localhost`,
})
.on(`request`, (req, res) => {
res.end(`Hello World!`);
});
这个文档比较隐蔽,它并不在`http.Server`的方法列表里,而是在`net.Server`中(`http.Server`继承`net.Server`)
[**net | Node.js v7.0.0 Documentation**
_Stops the server from accepting new connections and keeps existing connections. This function is asynchronous, the…_nodejs.org](https://nodejs.org/api/net.html#net_net_createserver_options_connectionlistener "https://nodejs.org/api/net.html#net_net_createserver_options_connectionlistener")
### 相对路径
传入`fs`模块方法的路径可以是相对路径。这是相对于`process.cwd()`。这可能多数人都知道了,但我以前一直以为要传入绝对路径。
const fs = require(`fs`);
const path = require(`path`);
// why have I always done this...
fs.readFile(path.join(__dirname, `myFile.txt`), (err, data) => {
// do something
});
// when I could just do this?
fs.readFile(`./path/to/myFile.txt`, (err, data) => {
// do something
});
[**File System | Node.js v7.0.0 Documentation**
_birthtime “Birth Time” — Time of file creation. Set once when the file is created. On filesystems where birthtime is…_nodejs.org](https://nodejs.org/api/fs.html#fs_file_system "https://nodejs.org/api/fs.html#fs_file_system")
### 路径解析
以前我会显摆的技术之一就是使用正则表达式从路径字符串中获取文件名和拓展名,这其实根本没有必要,需要做的仅仅是调用接口:
myFilePath = `/someDir/someFile.json`;
path.parse(myFilePath).base === `someFile.json`; // true
path.parse(myFilePath).name === `someFile`; // true
path.parse(myFilePath).ext === `.json`; // true
[**Node.js v7.0.0 Documentation**
_Stability: 2 — Stable The path module provides utilities for working with file and directory paths. It can be accessed…_nodejs.org](https://nodejs.org/api/path.html#path_path_parse_path "https://nodejs.org/api/path.html#path_path_parse_path")
### 使用不同颜色来记录日志
使用`console.dir(obj, {colors: true})`可以使用预先设置好的配色方案打印日志,这样更易于阅读。
[**Console | Node.js v7.0.0 Documentation**
_The console functions are usually asynchronous unless the destination is a file. Disks are fast and operating systems…_nodejs.org](https://nodejs.org/api/console.html#console_console_dir_obj_options "https://nodejs.org/api/console.html#console_console_dir_obj_options")
### 让 setInterval() 不去影响应用的效率
假设你使用`setInterval()`来执行数据库清理操作,一天一次。默认情况下,只要`setInterval()`的请求还在, Node 的事件循环是不会停止的。如果你想让 Node 休息(我也不知道这样做的好处),你可以这么做:
const dailyCleanup = setInterval(() => {
cleanup();
}, 1000 * 60 * 60 * 24);
dailyCleanup.unref();
需要注意的是,如果你的队列中没有其它的请求(比如 http 服务监听),Node 会退出的。
[**Node.js v7.0.0 Documentation**
_Stability: 3 — Locked The timer module exposes a global API for scheduling functions to be called at some future period…_nodejs.org](https://nodejs.org/api/timers.html#timers_timeout_unref "https://nodejs.org/api/timers.html#timers_timeout_unref")
### 使用 Signal 常量
可能你以前会这样处理 kill:
process.kill(process.pid, `SIGTERM`);
如果计算机编程的历史不存在由错字引发的错误,这样做没什么错的。但是实际上这是发生过的。第二个参数可以是带上'string'**或者**对应的 int ,你可以使用下面更健壮的方式
process.kill(process.pid, os.constants.signals.SIGTERM);
### IP 地址有效性验证
Node 已经有内置的 IP 地址校验器。我以前不止一次自己写正则表达式去做这个。好蠢(┬_┬)
`require(`net`).isIP(`10.0.0.1`)` will return `4`.
`require(`net`).isIP(`cats`)` will return `0`.
因为`cats`并不是一个IP地址
如果你没注意到,我正经历着这么个阶段,字符串使用反引号包起来, 它在我身上越来越多,但我知道它看起来很奇怪,所以我特意提到它。。。(作者的唠叨)
[**net | Node.js v7.0.0 Documentation**
_Stops the server from accepting new connections and keeps existing connections. This function is asynchronous, the…_nodejs.org](https://nodejs.org/api/net.html#net_net_isip_input "https://nodejs.org/api/net.html#net_net_isip_input")
### os.EOL
你曾经对行结束符硬编码吗?
我的天!
`os.EOL`是专门为你准备的,它在 Windows 操作系统上为`\r\n`,在其它系统上是`\n`。[使用 os.EOL ](https://github.com/sasstools/sass-lint/pull/92/files) 能让你的代码在不同的操作系统上表现一致。
const fs = require(`fs`);
// bad
fs.readFile(`./myFile.txt`, `utf8`, (err, data) => {
data.split(`\r\n`).forEach(line => {
// do something
});
});
// good
const os = require(`os`);
fs.readFile(`./myFile.txt`, `utf8`, (err, data) => {
data.split(os.EOL).forEach(line => {
// do something
});
});
[**OS | Node.js v7.0.0 Documentation**
_{ model: ‘Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz’, speed: 2926, times: { user: 252020, nice: 0, sys: 30340, idle…_nodejs.org](https://nodejs.org/api/os.html#os_os_eol "https://nodejs.org/api/os.html#os_os_eol")
### 状态码查询
HTTP 状态码及其对应的易读性的名字是可以查询的。`http.STATUS_CODES`正是我这里想说的,它的键是个状态码,值对应其状态的简短描述。

所以你可以这么做:
someResponse.code === 301; // true
require(`http`).STATUS_CODES[someResponse.code] === `Moved Permanently`; // true
[**HTTP | Node.js v7.0.0 Documentation**
_The HTTP interfaces in Node.js are designed to support many features of the protocol which have been traditionally…_nodejs.org](https://nodejs.org/api/http.html#http_http_status_codes "https://nodejs.org/api/http.html#http_http_status_codes")
### 预防崩溃
我一直认为下面的这种错误导致的服务崩溃是非常荒谬的:
const jsonData = getDataFromSomeApi(); // But oh no, bad data!
const data = JSON.parse(jsonData); // Loud crashing noise.
预防这种可笑的错误,你可以在你 app 的中使用`process.on(`uncaughtException`, console.error);`
当然,我不是傻瓜,在付费的项目中,我会使用[ PM2 ](http://pm2.keymetrics.io/),同时把所有的东西都装到`try...catch`语句中。但是,私人免费项目就另说 o_o ....
警告,这个[并非最好的练习](https://nodejs.org/api/process.html#process_warning_using_uncaughtexception_correctly),在大点复杂点的 app 中,这甚至可能是个坏主意。这需要你来决定是否要信任一个家伙的博客文章或官方文档。
[**process | Node.js v7.0.0 Documentation**
_A process warning is similar to an error in that it describes exceptional conditions that are being brought to the user…_nodejs.org](https://nodejs.org/api/process.html#process_event_uncaughtexception "https://nodejs.org/api/process.html#process_event_uncaughtexception")
### Just this once()
对所有的事件发送者(EventEmitters),除了`on()`方法之外,还有`once()`,我很确认我是地球上最后一个学到这点的人 (T_T)
server.once(`request`, (req, res) => res.end(`No more from me.`));
[**Events | Node.js v7.0.0 Documentation**
_Much of the Node.js core API is built around an idiomatic asynchronous event-driven architecture in which certain kinds…_nodejs.org](https://nodejs.org/api/events.html#events_emitter_once_eventname_listener "https://nodejs.org/api/events.html#events_emitter_once_eventname_listener")
### 定制控制台
你可以使用 `new console.Console(standardOut, errorOut)` 创建你自己的控制台,传入你自己的输出流。
为什么要定制控制台? 我也不知道。或许想要将一些内容输出到文件,套接字,或者其他东西的时候,会考虑定制控制台。
[**Console | Node.js v7.0.0 Documentation**
_The console functions are usually asynchronous unless the destination is a file. Disks are fast and operating systems…_nodejs.org](https://nodejs.org/api/console.html#console_new_console_stdout_stderr "https://nodejs.org/api/console.html#console_new_console_stdout_stderr")
### DNS查询结果
Node [不缓存 DNS 返回的结果](https://github.com/nodejs/node/issues/5893).所以当你一次又一次地查询同一个 URL 的时候,其实已经浪费了很多宝贵的时间。这种情况下,你完全可以自己调用`dns.lookup()`并缓存结果的。或者可以[这么](https://www.npmjs.com/package/dnscache)做,这个是先前有人实现的。
dns.lookup(`www.myApi.com`, 4, (err, address) => {
cacheThisForLater(address);
});
[**DNS | Node.js v7.0.0 Documentation**
_2) Functions that connect to an actual DNS server to perform name resolution, and that always use the network to…_nodejs.org](https://nodejs.org/api/dns.html#dns_dns_lookup_hostname_options_callback "https://nodejs.org/api/dns.html#dns_dns_lookup_hostname_options_callback")
### `fs`模块是多操作系统兼容性的雷区
如果你写代码的风格和我一样--阅读最少的知识,微调程序,直到它可以运行。那么,你很有可能也会触到`fs`模块的雷区。虽然 Node 为多操作系统的兼容性做了很多,但毕竟也只能做到那么多。许多 OS 的不同特性就像代码海洋中突起的珊瑚瞧,每个瞧石都隐藏着风险。而你,仅仅是小船。
不幸的是,这些不同点不仅仅是存在于 Windows 和其它操作系统之间,所以,你不能简单的自我安慰“哇,太好了,没人使用 Windows”。(我写过一大篇反对使用 Windows 来进行 Web 开发的文章,但我自己把它删了,因为那些说教,连我自己看了都翻白眼)。
下面这些是你在使用`fs`模块时,可能碰到的坑
* `fs.stats()`返回的`mode`属性在 Windows 和其它操作系统上是不同的(在 Windows 上没有匹配一些文件模式常量,比如 `fs.constants.S_IRWXU`)
* `fs.lchmod()`只能在 macOS 中使用
* `fs.symlink()` 的`type`参数只可能在 Windows 上使用
* `fs.watch()` 选项`recursive`只能在 macOS 和 Windows 中使用。
* `fs.watch()` 在 Windows 和 Linux 上,回调只会接受一个文件名
* `fs.open()` 打开一个文件夹,在 FreeBSD 和 Windows 上使用`a+`属性是可以的,但是在 macOS 和 Linux 上是不行的。
* `fs.write()` 在linux上,当文件是以append的方式打开的,参数`position`是会被直接忽视掉的,直接在文件末尾添加。
(我还算挺赶时髦的,我已经改用`macOS`了,`OS X`只用了 49 天)
[**File System | Node.js v7.0.0 Documentation**
_birthtime “Birth Time” – Time of file creation. Set once when the file is created. On filesystems where birthtime is…_nodejs.org](https://nodejs.org/api/fs.html "https://nodejs.org/api/fs.html")
### net 模块是 http 模块速度的两倍
阅读文档,我学到了`net`模块是个事儿。它支撑着`http`模块。这会让我思索,假如我只想做服务器间的通讯 (server-to-server communication ),我是不是只需要使用`net`模块?
网上的人或许很难相信我不能凭直觉获得答案。作为一个 Web 开发者,我一开始就扎进了服务端的世界里,我知道 http 但是其他方面并不是很多。所有的 TCP, 套接字,流之类的对我来说就像[日本摇滚](https://www.youtube.com/watch?v=FQgH4G3qypI).我真的不是很明白,但是我很好奇。
为了比较验证我的想法,我建立了多个服务端程序,(我相信这时你肯定在听日本摇滚了),并且发送了多个请求。结论是 `http.Server`每秒中处理了大约3,400个请求,`net.Server`每秒钟处理5,500个。
它其实也很简单。
如果你感兴趣的话,可以查看我的代码。如果不感兴趣,那不好意思,需要你滚动页面了。
// This makes two connections, one to a tcp server, one to an http server (both in server.js)
// It fires off a bunch of connections and times the response
// Both send strings.
const net = require(`net`);
const http = require(`http`);
function parseIncomingMessage(res) {
return new Promise((resolve) => {
let data = ``;
res.on(`data`, (chunk) => {
data += chunk;
});
res.on(`end`, () => resolve(data));
});
}
const testLimit = 5000;
/* ------------------ */
/* -- NET client -- */
/* ------------------ */
function testNetClient() {
const netTest = {
startTime: process.hrtime(),
responseCount: 0,
testCount: 0,
payloadData: {
type: `millipede`,
feet: 100,
test: 0,
},
};
function handleSocketConnect() {
netTest.payloadData.test++;
netTest.payloadData.feet++;
const payload = JSON.stringify(netTest.payloadData);
this.end(payload, `utf8`);
}
function handleSocketData() {
netTest.responseCount++;
if (netTest.responseCount === testLimit) {
const hrDiff = process.hrtime(netTest.startTime);
const elapsedTime = hrDiff[0] * 1e3 + hrDiff[1] / 1e6;
const requestsPerSecond = (testLimit / (elapsedTime / 1000)).toLocaleString();
console.info(`net.Server handled an average of ${requestsPerSecond} requests per second.`);
}
}
while (netTest.testCount {
httpTest.responseCount++;
if (httpTest.responseCount === testLimit) {
const hrDiff = process.hrtime(httpTest.startTime);
const elapsedTime = hrDiff[0] * 1e3 + hrDiff[1] / 1e6;
const requestsPerSecond = (testLimit / (elapsedTime / 1000)).toLocaleString();
console.info(`http.Server handled an average of ${requestsPerSecond} requests per second.`);
}
});
}
while (httpTest.testCount {
console.info(`Starting testNetClient()`);
testNetClient();
}, 50);
setTimeout(() => {
console.info(`Starting testHttpClient()`);
testHttpClient();
}, 2000);
// This sets up two servers. A TCP and an HTTP one.
// For each response, it parses the received string as JSON, converts that object and returns a string
const net = require(`net`);
const http = require(`http`);
function renderAnimalString(jsonString) {
const data = JSON.parse(jsonString);
return `${data.test}: your are a ${data.type} and you have ${data.feet} feet.`;
}
/* ------------------ */
/* -- NET server -- */
/* ------------------ */
net
.createServer((socket) => {
socket.on(`data`, (jsonString) => {
socket.end(renderAnimalString(jsonString));
});
})
.listen(8888);
/* ------------------- */
/* -- HTTP server -- */
/* ------------------- */
function parseIncomingMessage(res) {
return new Promise((resolve) => {
let data = ``;
res.on(`data`, (chunk) => {
data += chunk;
});
res.on(`end`, () => resolve(data));
});
}
http
.createServer()
.listen(8080)
.on(`request`, (req, res) => {
parseIncomingMessage(req).then((jsonString) => {
res.end(renderAnimalString(jsonString));
});
});
[**net | Node.js v7.0.0 Documentation**
_Stops the server from accepting new connections and keeps existing connections. This function is asynchronous, the…_nodejs.org](https://nodejs.org/api/net.html "https://nodejs.org/api/net.html")
### REPL技巧
1. 当你处于 REPL(那是你在控制台敲入`node`,并按了回车键的情形),你可以敲入`.load someFile.js`,这时,它会将这个文件的内容加载进来。(比如,你可以加载一个包含大量常量的文件)。
2. 当你设置环境变量`NODE_REPL_HISTORY=""`,这样可以禁止 repl 的历史写入文件中。同时我也学到(至少是被提醒了)REPL 的历史默认是写到`~/.node_repl_history`中,当你想回忆起之前的 REPL 历史时,可以上这儿查。
3. `_` 这个变量,保存着上一次的计算结果. 相当方便!
4. 当你进入 REPL 模式中时,模块都已经为你加载好了。所以了,比如说,你可以直接敲入`os.arch()`查看操作系统体系结构。你不需要先敲入`require(`os`).arch();` (注: 确的说,是按需加载的模块.)
================================================
FILE: TODO/2018-design-trends.md
================================================
> * 原文地址:[2018 Design Trends](https://www.behance.net/gallery/59540015/2018-Design-Trends)
> * 原文作者:[Mark Banaynal](https://www.behance.net/markbnynl), [Epicco Digital](https://www.behance.net/infoe9291e3c)
> * 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
> * 本文永久链接:[https://github.com/xitu/gold-miner/blob/master/TODO/2018-design-trends.md](https://github.com/xitu/gold-miner/blob/master/TODO/2018-design-trends.md)
> * 译者:[pot-code](https://github.com/pot-code)
> * 校对者:[wzy816](https://github.com/wzy816)、[ryouaki](https://github.com/ryouaki)
# 2018 设计趋势

为项目选一个合适的设计风格越来越关键,挑战也很大。如何才能吸引观众呢,怎样才能让自己的设计从竞争激烈、信息过载的市场中脱颖而出呢?即便这是个信息驱动的世界,设计还是有机会让人们在情感上产生共鸣,从而打造出符合人直觉的交互体验。
## 双色调和双重曝光
2015 年末,Pantone(潘通)公布了 2016 年的代表色为静谧蓝(Serenity)和粉晶(Rose Quartz),这一声明震惊了设计界。可能正是因为这点,引领了数码界渐渐使用双色调的趋势。到了 2016 年,大量网站开始采用双色调的设计风格,试图营造一种富有冲击力和活力的氛围,典型的如 SpotifyBy。最后到了 2017 年,这种风格已经烂大街了。2018 年比以前还是有所进步:多了双重曝光的效果,倒也能在某些照片中表现出均衡的色感、增加一点戏剧性。

[Adison Partner's Website](http://www.adisonpartners.com/)

[Spotlight Festival Identity](https://www.behance.net/gallery/58313279/Spotlight-Festival-Identity),摘自 [Manitou Design](https://www.behance.net/manitoudesign),由 [Kristina Udovichenko](https://www.behance.net/kristina_udovichenko) 和 [Shamil Karim](https://www.behance.net/shamilkarimov) 联合设计

[7h10 Double Color Exposure](https://graphicriver.net/user/7h10)
## 更大胆的用色
虽然最近渐变色大有回归之势,但大胆、鲜明的色系在设计界仍然有着不可撼动的地位。毕竟在让人眼花缭乱的品牌设计中,没有什么能比大胆和鲜明的用色更加出类拔萃、让人印象深刻了。但是,一旦决定使用大胆色系,就要斟酌色彩之间的搭配问题,还要考虑如何才能更好的凸显出品牌形象,抓住目标观众的心。
[Simply Chocolate Website](https://simplychocolate.dk/)

Visión Yo Soy 的商业铭牌,由 [Eduardo Vázquez](https://www.behance.net/edkills) 为 [Qualium](https://www.behance.net/qualiummx) 设计
## 更加生动的渐变
大胆色如日中天,渐变色也不甘示弱,相比以前有了很大的进步。渐变回归设计界后,也算是站住了脚跟:品牌设计、web 设计、logo 设计、用户界面设计等都陆续开始使用渐变元素。双色、三色或者色彩大满贯的组合让设计更显得有范,富有吸引力。

Magic.co 的首页,由 [Ludmila Shevchenko](https://dribbble.com/LudmilaShevchenko) 设计

[Gradient Studies 12](https://www.behance.net/gallery/51830921/Gradient-Studies),由 [Evgeniya Righini-Brand](https://www.behance.net/jackie-kaydo) 设计

[KIWI Rebranding](https://www.behance.net/gallery/43220641/KIWI-Rebranding-and-Website),由 [Fabio Pistoia](https://www.behance.net/fabiopistoia) 设计
## 几何图样
继扁平设计和极简主义之后,几何系逐渐成为设计界的新宠。再加上大胆的用色,几何系适当增加了视觉上的复杂性,还有那么点视觉刺激,不过也正是这样才能足够吸睛。

Goldengate 的商业铭牌设计,出自 [Studio Recode ](https://www.behance.net/studiorecode)

[BigCommerce Mural](https://dribbble.com/shots/3408379-BigCommerce-Mural),出自 [Steve Wolf](https://dribbble.com/WOLF_STEVE)

[Mercht Brand Identity](https://www.behance.net/gallery/36549745/Mercht),出自 [Robot Food](https://www.behance.net/RobotFood)
## 动效
近几年动效发展迅猛,随着硬件性能的提升,动效的执行也越来越流畅,交互体验也更加符合直觉。 动效在 web 页面中可以起到铺陈的作用,手机端可以用来平滑元素间的过渡。毫无疑问,动效为设计注入了无穷的活力。 当然,动效也不必设计的多么华丽,避免显得多余,只需要在感官、交互和处理过程上传达出细节上的人文关怀,这样才能更好的取悦用户。
[Facebook F8 峰会的网页设计](https://www.f8.com/)

[PocketBook 的欢迎页设计](https://dribbble.com/shots/3613821-Onboarding-Pocketbook-Gif),由 [Andrew McKay](https://dribbble.com/andrewmckay) 设计

[Intel Logo 动画](https://dribbble.com/shots/1489338-Look-Inside),[Nicolas Girard](https://dribbble.com/nicolas) 设计
还有另一个 [Google 点阵动效](https://design.google/library/evolving-google-identity/)。
## 视差效果
视差效果让网站显得更有趣,更容易让人留下印象。例如,页面滚动时,在页面的前景和背景元素之间插入 3D 效果,可以让元素的穿梭更加丝滑,还能带来沉浸式的浏览体验。
[Ronin Amsterdam Website](https://www.roninamsterdam.com/)
[AMAIÒ Website](http://as.ouiwill.com/about)
[Elevux Website](https://elevux.com/#home)
## 3D
3D 用途广泛,例如现在 AR 和 VR 的沉浸式体验。不管是表现现实中的物体还是创作纯粹的艺术作品,3D 技术都能轻松胜任。圆润的抛光、细腻的表面和恰当的打光,达到了以假乱真的地步。3D 不仅可以给作品带来深度,还能给观者一种实感 —— 通过手头物品的联想来感知画面中物体的触感、运动趋势等。



[Marina Bay Sands Singapore X'Mas Comes Alive](https://www.behance.net/gallery/59201983/Marina-Bay-Sands-Xmas-Comes-Alive) [Campaign by MACHINEAST -](https://www.behance.net/MACHINEAST)




Rubik,由 [molistudio ™](https://www.behance.net/moli) 和 [Peter Tarka](https://www.behance.net/trk) 联合设计
## 金属风
现在的渲染工具越来越强大,渲染出的模型看起来也越光滑圆润了。有了这些黑科技,要做出奢华、高级的金属质感也就不是什么难事了。打好光、调好反射和阴影参数,坐等出图就可以了。

[Grand Spectacular 2016](https://www.behance.net/gallery/42252791/Grand-Spectacular-2016),由 [C&B Advertising](https://www.behance.net/mustaali) 设计

[Various Concepts](https://www.behance.net/gallery/58895659/VARIOUS-CONCEPTS),由 [Oleg Morozov](https://www.behance.net/olegmorozov) 设计

[League of Legends Mid-Season Invitational and World Championship Branding](https://www.behance.net/gallery/58298917/LEAGUE-OF-LEGENDS-RIOT-GAMES),由 [ILOVEDUST](https://www.behance.net/ilovedust) 设计
## 等轴设计
设计也不必拘泥于二维的,可以尝试多种透视风格。等轴设计将物体分布在三个维度来隔离彼此,可以给创作带来更多机遇,或可一展宏图。

[Adobe 之城](https://www.behance.net/gallery/53792757/Adobe-Government),由 [Peter Tarka](https://www.behance.net/trk) 和 [Mateusz Krol](https://www.behance.net/MateuszKrol) 联合设计


谷歌人,来自 [Markus Magnusson](https://dribbble.com/MarkusM) / 社交媒体,来自 [Ricardo Nask](https://dribbble.com/ricardonask)

[3D 城](https://www.behance.net/gallery/16479195/3d-city),来自 [Anna Paschenko](https://www.behance.net/anna_paschenko)
## 留白
给用户多点呼吸的空间,满屏幕的信息怕不是要把用户噎死。适当的留白反而可以让设计更现代化,看起来更舒服,也能让用户更专注于主体内容,不被冗杂的信息干扰,对内容的消化也更彻底。
可以参考:
[Great Wisdom Buddhist Institute](https://gwbi.org/)
## 打破 Grid 布局
长久以来,元素都是呆在自己的区域内,不敢跨越界线一点,更不谈相互重叠了。当然,这也确实方便了设计师的规划:指定某个区域只展示什么内容。长期如此,观众未免产生审美疲劳,看到千篇一律的设计就失去了继续看下去的欲望。
所以,越来越多的设计师开始打破 Grid 布局风格,力图打造独特的风格,让设计看起来更富有表现力和吸引力。想要保持与时俱进,赢得市场竞争力,挑战就会存在,这种趋势也还会继续下去。
可以参考:
[Cedric Lachot Website](http://cedricklachot.com/)
[Red Collar Digital Agency](http://redcollar.digital/)
希望 2018 年,这些设计趋势不止成为趋势,还能成为主流;设计也能更加大胆,能有更多出色、独特的设计让人记住。观众们可以期待以后的设计能带来更多沉浸式的体验,在信息量和美观度之间达到平衡的同时,还能沁人心扉。
2018 年的设计,绝对碉堡了。
---
> [掘金翻译计划](https://github.com/xitu/gold-miner) 是一个翻译优质互联网技术文章的社区,文章来源为 [掘金](https://juejin.im) 上的英文分享文章。内容覆盖 [Android](https://github.com/xitu/gold-miner#android)、[iOS](https://github.com/xitu/gold-miner#ios)、[前端](https://github.com/xitu/gold-miner#前端)、[后端](https://github.com/xitu/gold-miner#后端)、[区块链](https://github.com/xitu/gold-miner#区块链)、[产品](https://github.com/xitu/gold-miner#产品)、[设计](https://github.com/xitu/gold-miner#设计)、[人工智能](https://github.com/xitu/gold-miner#人工智能)等领域,想要查看更多优质译文请持续关注 [掘金翻译计划](https://github.com/xitu/gold-miner)、[官方微博](http://weibo.com/juejinfanyi)、[知乎专栏](https://zhuanlan.zhihu.com/juejinfanyi)。
================================================
FILE: TODO/25-core-data-in-ios10-nspersistentcontainer.md
================================================
> * 原文地址:[25 Core Data in iOS10: NSPersistentContainer](https://swifting.io/blog/2016/09/25/25-core-data-in-ios10-nspersistentcontainer/)
* 原文作者:[Michał Wojtysiak](https://swifting.io/about/)
* 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者:[Nicolas(Yifei) Li](https://github.com/yifili09)
* 校对者: [Gran](https://github.com/Graning), [Wenlin Ou(owenlyn)](https://github.com/owenlyn)
# iOS 10 中的 NSPersistentContainer
Xcode 8 已经面世了,如果你还没有尝试过这个测试版本,你将会发现各种新东西。这里有 Swift 3 [主要的更新](https://swifting.io/blog/2016/08/17/22-swift-3-access-control-beta-6?utm_source=swifting.io&utm_medium=web&utm_campaign=blog%20post),有新的框架,比如 [SiriKit](https://swifting.io/blog/2016/07/18/20-sirikit-can-you-outsmart-provided-intents?utm_source=swifting.io&utm_medium=web&utm_campaign=blog%20post) 和一些对现存特性的增强改进,比如 [notifications](https://swifting.io/blog/2016/08/22/23-notifications-in-ios-10?utm_source=swifting.io&utm_medium=web&utm_campaign=blog%20post)。 我们也接收以 `NSPersistentContainer` 形式的简化版的 `Core Data stack`,它为我们做了大部分的准备工作。它值得我们去尝试么?让我们开始深入挖掘这些新特性吧。
#### `iOS 10` 之前的 `Core Data stack`
多年来,在尝试了很多种 `Core Data stack` 之后,我们选定了两个简单的 `stack`,融合成一个使用。让我们仔细看一下这些关键组件并开始连接使用他们。完整版本的 `Github` 链接在引用中能找到。代码已经适配到 `Swift 3` 和 `Xcode 8`。
```
final class CoreDataStack {
static let sharedStack = CoreDataStack()
var errorHandler: (Error) -> Void = {_ in }
private init() {
#1
NotificationCenter.default.addObserver(self,
selector: #selector(CoreDataStack.mainContextChanged(notification:)),
name: .NSManagedObjectContextDidSave,
object: self.managedObjectContext)
NotificationCenter.default.addObserver(self,
selector: #selector(CoreDataStack.bgContextChanged(notification:)),
name: .NSManagedObjectContextDidSave,
object: self.backgroundManagedObjectContext)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
#2
lazy var applicationDocumentsDirectory: NSURL = {
let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return urls[urls.count-1] as NSURL
}()
#3
lazy var managedObjectModel: NSManagedObjectModel = {
let modelURL = Bundle.main.url(forResource: "DataModel", withExtension: "momd")!
return NSManagedObjectModel(contentsOf: modelURL)!
}()
#4
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
let url = self.applicationDocumentsDirectory.appendingPathComponent("DataModel.sqlite")
do {
try coordinator.addPersistentStore(ofType: NSSQLiteStoreType,
configurationName: nil,
at: url,
options: [NSMigratePersistentStoresAutomaticallyOption: true,
NSInferMappingModelAutomaticallyOption: true])
} catch {
// Report any error we got.
NSLog("CoreData error \(error), \(error._userInfo)")
self.errorHandler(error)
}
return coordinator
}()
#5
lazy var backgroundManagedObjectContext: NSManagedObjectContext = {
let coordinator = self.persistentStoreCoordinator
var privateManagedObjectContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
privateManagedObjectContext.persistentStoreCoordinator = coordinator
return privateManagedObjectContext
}()
#6
lazy var managedObjectContext: NSManagedObjectContext = {
let coordinator = self.persistentStoreCoordinator
var mainManagedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
mainManagedObjectContext.persistentStoreCoordinator = coordinator
return mainManagedObjectContext
}()
#7
@objc func mainContextChanged(notification: NSNotification) {
backgroundManagedObjectContext.perform { [unowned self] in
self.backgroundManagedObjectContext.mergeChanges(fromContextDidSave: notification as Notification)
}
}
@objc func bgContextChanged(notification: NSNotification) {
managedObjectContext.perform{ [unowned self] in
self.managedObjectContext.mergeChanges(fromContextDidSave: notification as Notification)
}
}
}
```
上面是啥?且容我慢慢道来。
##### #1
在初始化的时候,我们订阅了从主线程和后台线程 `NSMagedObjectContext` 发送来的通知。
##### #2
获取文档路径 `NSURL` 的 `getter`。`NSPersistentStoreCoordinator` 使用它在给定的位置创建 `NSPersistentStore`。
##### #3
和文件目录相似,他获得 `NSManagedObjectModel` 的 `getter` 方法,用它来初始化有我们模型的 `NSPersistentStoreCoordinator`。
##### #4
这就是这些神奇的代码干的事情。首先,我们创建有模型的 `NSPersistentStoreCoordinator`。之后,我们获取我们文档目录的 `url`。最后,我们在这些文档目录内为某些类型的 `NSPersistentStoreCoordinator` 增加一个持久化的存储。
##### #5
我们在一个私有队列里创建一个'后台' `NSManagedObjectContext` 并且把它绑定到 `NSPersistentStoreCoordinator`。这个 `context` 被用于执行同步和写操作。
##### #6
我们在主队列中创建一个'视图' `NSManagedObjectContext`并且把它绑定到我们的 `NSPersistentStoreCoordinator`。这个 `context` 被用于获取显示在 `UI` 上的数据。
##### #7
这个 `stack` 使用了稳定、成熟的融合过的 `contexts`,它被保存的 `notifications` 驱动。在这些方法中,我们执行这个融合。
#### `NSPersistentContainer` 简介
iOS 10 给我们提供了 `NSPersistentContainer`。它意图简化代码并且为我们解决负担。它能做到么?让我展示给你我们基于 `NSPersistentContainer` 重建 `CoreData stack` 。 一个**完整**的例子:
```
final class CoreDataStack {
static let shared = CoreDataStack()
var errorHandler: (Error) -> Void = {_ in }
#1
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "DataModel")
container.loadPersistentStores(completionHandler: { [weak self](storeDescription, error) in
if let error = error {
NSLog("CoreData error \(error), \(error._userInfo)")
self?.errorHandler(error)
}
})
return container
}()
#2
lazy var viewContext: NSManagedObjectContext = {
return self.persistentContainer.viewContext
}()
#3
// Optional
lazy var backgroundContext: NSManagedObjectContext = {
return self.persistentContainer.newBackgroundContext()
}()
#4
func performForegroundTask(_ block: @escaping (NSManagedObjectContext) -> Void) {
self.viewContext.perform {
block(self.viewContext)
}
}
#5
func performBackgroundTask(_ block: @escaping (NSManagedObjectContext) -> Void) {
self.persistentContainer.performBackgroundTask(block)
}
}
```
实际上这个更简短。但是之前版本的代码发生了什么?
简单的答案是,`NSPersistentContainer` 已可以为我们代劳。对于一个博客文章的解释,这肯定不够 😆 。还是容我慢慢道来。
##### #1
这里,我们能看到 `NSPersistentContainer` 的能力。它完成了之前 `stack` 内#2, #3, #4, #5, #6 的工作,并一定程度上把我们从 #1 和 #7 中的工作中解放出来。
怎么做到的?
首先,它通过一个名字来初始化,这个名字被用于在文档目录中查找一个模型并且用相同的名字创建一个存储器。这是一个快捷初始器。你也可以使用完整的版本,手动地传递你的模型。
public init(name:String,managedObjectModel model:NSManagedObjectModel)
之后,在调用 `loadPersistentStores` 方法之前,你还有时间来进一步配置你的容器,例如,使用 `NSPersistentStoreDescription`。我们使用一个默认的 `SQLite` 数据库,所以我们装载自己的永久存储器并且确保错误处理。
##### #2
实际上这只是一个封装器。已经通过 `NSPersistentContainer` 为我们创建了 `viewContext`。而且,它已经被配置成可以接收从其他的 `contexts` 来的保存通知。引用自 `Apple` 公司:
> 这个被管理的 `context` 对象与主队列有关。(只读)... 这个 `context` 是被配置成可持续的,并且从其他 `contexts` 处理保存的通知。
##### #3
`NSpersistentContainer` 也给予了我们一个工厂方法,它用来创建多个私有队列的 `contexts`。我们为了复杂的同步目的,在这里仅使用一个,常见的后台 `context`。由工厂方法创建出的 `Contexts` 也被设定成可自动地接收和处理 `NSManagedObjectContextDidSave` 的广播消息。
这是可选项。
##### #4
`NSPersistentContainer` 在后台(详情可见 #5)为运行 `Core Data stack` 暴露了一个方法。我们非常喜欢这个 `API` 的命名,所以我们也为 `viewContext` 创建了类似的封装器。
##### #5
正如上文提到的,这仅是一个有关 `performBackgroundTask` 方法的封装器,它是 `NSPersistentContainer` 中的一个方法。每一次它调用一个新的 `context`, `parivateQueueConcurrencyType` 也被创建。
**注意:** 我们已讨论了大部分 `NSPersistentContainer` 的特性,但是你也可以查看[参考资料](https://developer.apple.com/reference/coredata/nspersistentcontainer?utm_source=swifting.io&utm_medium=web&utm_campaign=blog%20post),去查阅完整的内容。
### 如果 `NSPersistentContinainer` 对我来说还是太庞大?
有一些可选项。
首先,确保查阅了完整的参考资料,并且在寻找你所需要的属性或者方法。我们已经涵盖了两个初始化器,一个仅需要字符串名和完整采用 `NSManagedObjectModel` 的快捷方法。
之后,你可以调查扩展或者子类。举个例子,在我们其中一个项目中,我们在核心程序和扩展程序之间共享了一个 `Core Data stack`。它不得不落地在一个 App 共享组群空间中,并且 `NSPersistentContainer` 默认的文档目录已经不再为我们所用。
幸运的是,通过一个轻量的子类 `NSPersistentContainer`,我们又满血复活了,并且能继续使用那些容器类带来的好处。
```
struct CoreDataServiceConsts {
static let applicationGroupIdentifier = "group.com.identifier.app-name"
}
final class PersistentContainer: NSPersistentContainer {
internal override class func defaultDirectoryURL() -> URL {
var url = super.defaultDirectoryURL()
if let newURL =
FileManager.default.containerURL(
forSecurityApplicationGroupIdentifier: CoreDataServiceConsts.applicationGroupIdentifier) {
url = newURL
}
return url
}
}
```
#### 总结 & 参考文献
我希望你们喜欢这篇有关 `NSPersistentContainer` 的简短精干的文章,并且我们也希望看到你们是如何通过这些在 `Core Data` 框架上的改进来演进你们的 `Core Data stack`。
稍等一下... 啊?还有其他的改变么?
是的,当然有。最佳的方法是通过 `Apple` 公司的官方推文 'Core Data 在 iOS 10 上的新特性'。这些改变从并发、`context` 版本、请求获取、自动融合来自父 `context` 变化等开始,以在 `macOS 10.12` 中的 `NSFetchResultsController` 结束。
作者: Michał Wojtysiak
================================================
FILE: TODO/3-new-css-features-to-learn-in-2017.md
================================================
> * 原文地址:[3 New CSS Features to Learn in 2017](https://bitsofco.de/3-new-css-features-to-learn-in-2017/)
* 原文作者:[ireaderinokun](https://twitter.com/ireaderinokun)
* 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者: [熊贤仁](https://github.com/FrankXiong)
* 校对者: [vuuihc](https://github.com/vuuihc) [aleen42](https://github.com/aleen42)
# 2017 年要去学的 3 个 CSS 新属性
## 1. 特性查询(Feature Queries)
不久前,我写过一篇关于特性查询的文章 —— [《一个我十分期待的CSS特性 - the one CSS feature I really want》](https://bitsofco.de/the-one-css-feature/)。如今果然出现了。除了 IE浏览器之外,所有主流浏览器(包括 Opera Mini)均已支持特性查询。
特性查询采用 `@supports` 规则,它使得我们可以将 CSS 代码包裹一个条件块中。只有当浏览器的用户代理(user agent)支持某个特定的 CSS 属性-值对时,该条件块中的样式代码才会生效。下面举个简单的例子来说:只有支持 display: flex 的浏览器才会应用 Flexbox 样式
```
@supports ( display: flex ) {
.foo { display: flex; }
}
```
另外,我们甚至可以使用像 `and` 和 `not` 这类操作符来创建更为复杂的特性查询。例如,检测一个浏览器是否只支持老式的 Flexbox 语法
```
@supports ( display: flexbox )
and
( not ( display: flex ) ) {
.foo { display: flexbox; }
}
```
### 兼容性

## 2. 栅格布局(Grid Layout)
[CSS 栅格布局模块(CSS Grid Layout Module)](https://drafts.csswg.org/css-grid/) 定义了一个用于创建基于栅格布局的系统。它和 [弹性盒子布局模块(Flexbible Box Layout Module)](https://www.w3.org/TR/css-flexbox-1/) 有些相似,但由于其专为页面布局而设计,因此拥有许多不同的特性。
### 显式定位元素
一个栅格由栅格容器(由 `display: grid` 所创建)和栅格项(子元素)组成。在 CSS 中,我们可以简单且显式地组织栅格项的位置及顺序,并独立于 markup 语言中元素的位置。
在[《CSS栅格实现圣杯布局》](https://bitsofco.de/holy-grail-layout-css-grid/)这篇文章中,我演示了如何使用栅格布局模块来创建万恶的“圣杯布局”。

下列 CSS 代码仅有 31 行
```
.hg__header { grid-area: header; }
.hg__footer { grid-area: footer; }
.hg__main { grid-area: main; }
.hg__left { grid-area: navigation; }
.hg__right { grid-area: ads; }
.hg {
display: grid;
grid-template-areas: "header header header"
"navigation main ads"
"footer footer footer";
grid-template-columns: 150px 1fr 150px;
grid-template-rows: 100px
1fr
30px;
min-height: 100vh;
}
@media screen and (max-width: 600px) {
.hg {
grid-template-areas: "header"
"navigation"
"main"
"ads"
"footer";
grid-template-columns: 100%;
grid-template-rows: 100px
50px
1fr
50px
30px;
}
}
```
### 弹性长度
CSS 栅格模块引入了一个新的长度单位:`fr` ,用于表示栅格容器中所剩空间的占比。
这样我们可以根据栅格容器中的可用空间来分配栅格项的宽高。比如在圣杯布局中,我们可以通过下面的简单代码使得 `main` 区域占用两个边栏外的余下空间。
```
.hg {
grid-template-columns: 150px 1fr 150px;
}
```
### 槽(Gutters)
我们可以使用 `grid-row-gap`,`grid-column-gap`,和 `grid-gap` 属性来为栅格布局明确地定义槽。这些属性接受一个 [`<length-percentage>` 数据类型](https://bitsofco.de/generic-css-data-types/#percentages) 作为值,以表示内容区大小的相对百分比。
比如设置一个 5% 的槽,我们可以这样写
```
.hg {
display: grid;
grid-column-gap: 5%;
}
```
### 兼容性
CSS 栅格模块最早将在今年三月份被浏览器们支持。

## 3. 原生变量(Native Variables)
最后,原生 CSS 变量([层叠变量模块(Cascading Variables Module)的自定义属性](https://drafts.csswg.org/css-variables/))来了。该模块引入了一个用于创建用户自定义变量的方法,变量可被赋值给 CSS 属性。
譬如,若有多个样式表使用同一个主题颜色,那么我们就可以将其抽象成一个变量,并引用该变量,而非重复书写。
```
:root {
--theme-colour: cornflowerblue;
}
h1 { color: var(--theme-colour); }
a { color: var(--theme-colour); }
strong { color: var(--theme-colour); }
```
我们之前可以用像 SASS 这种 CSS 预处理器来做到这一点,但 CSS 变量的优势是能实际运行于浏览器中。这就意味着,变量的值可以被动态的更新。比如要修改以上所有 --theme-colour 属性,我们只需要这样做
```
const rootEl = document.documentElement;
rootEl.style.setProperty('--theme-colour','plum');
```
## 兼容性

## 关于兼容性?
如你所见,以上所有特性目前都没有被所有浏览器完全支持,那么我们如何在生产环境中舒服地用上他们呢?渐进增强(Progressive Enhancement)!去年的前端开发者大会上,我就曾就如何在 CSS 中进行渐进增强做过一次分享。点击下面可以看到
[](https://player.vimeo.com/video/194815985)
2017年有哪些 CSS 特性令你激动不已想要学习?
================================================
FILE: TODO/39-open-source-swift-ui-libraries-for-ios-app-development.md
================================================
> * 原文地址:[39 Open Source Swift UI Libraries For iOS App Development](https://medium.mybridge.co/39-open-source-swift-ui-libraries-for-ios-app-development-da1f8dc61a0f#.tg0lhb6r8)
* 原文作者:[Mybridge](https://medium.mybridge.co/@Mybridge)
* 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者:[jiaowoyongqi](https://github.com/jiaowoyongqi)
* 校对者:[xiaoheiai4719](https://github.com/xiaoheiai4719), [Tuccuay](https://github.com/Tuccuay)
# 给 iOS App 开发者的 39 个开源的 Swift UI 库
由苹果公司创建的 **Swift** 是目前 [Github](https://github.com/showcases/programming-languages) 上最受欢迎的编程语言,并且对于开源项目的贡献 Swift 也是世界上最活跃的社区之一。
开源框架是非常可爱的,因为当你打算开发 iOS 应用时,它们可以让你的工作变得极为简单。 对于通常需要几小时甚至几天来寻找开源框架的 iOS 开发者来说,这篇文章将会大大节省你的时间。
[Mybridge AI](https://www.mybridge.co/) 评估了内容的质量,并且为专业人士将文章分级排序。在这次调查中,我们对比了近 **2,700 个开源 Swift UI 库** 并选出了前39名,被挑选出来的仅占总数的 **1.4%** ,但他们在 Github 上的平均 stars 数为 **2,527**。
> 这是一个详细的 Swift “UI” (User Interface 用户界面) 库,分为 12 组:动画、弹出框、Feed 流、着陆页、色彩、图片、图形、图标、表格、布局、消息、搜索。
> 如果你想寻找开源的 Swift “Apps”,请关注 [这个](https://goo.gl/5hR1e2)。

###
#### [**No 1**](https://github.com/MengTo/Spring)
**Spring: 一个基于 Swift 的简洁易用的 iOS 动效库[Github 上有 9164 个 stars]。**

* * *
#### [**No 2**](https://github.com/CosmicMind/Materia)
**Material: 用于开发漂亮应用的动效和图形框架[Github 上有 6120 个 stars]。**

* * *
#### [**No 3**](https://github.com/IFTTT/RazzleDazzle)
**RazzleDazzle: Swift 编写的,简单的基于关键帧的并且针对于 iOS 的动效框架。极为适用于滚动介绍的长页面[Github 上有 2291 个 stars]。**

* * *
#### [**No 4**](https://github.com/AugustRush/Stellar)
**Stellar: 酷炫的物理动效库[Github 上有 1881 个 stars]。**

* * *
#### [**No 5**](https://github.com/exyte/Macaw)
**Macaw: 强大且易用的矢量图形库,并且支持 SVG[Github 上有 594 个 stars]。**


###
#### [**No 6**](https://github.com/kitasuke/PagingMenuControlle)
**PagingMenuController: 页面浏览控制器,并且菜单可以自定义[Github 上有 594 个 stars]。**

* * *
#### [**No 7**](https://github.com/Ramotion/Preview-Transition)
**PreviewTransition: 简单的相片预览控制器[Github 上有 1025 个 stars]。**

* * *
#### [**No 8**](https://github.com/demonnico/PinterestSwift)
**PinterestSwift: 跟 Pinterest 一样的转场动画[Github 上有 1007 个 stars]。**

* * *
#### [**No 9**](https://github.com/aslanyanhaik/youtube-iOS)
**YouTube Transition: 像 YouTube iOS 应用一样在右侧观看缩略视频,用 Swift 3 编写[Github 上有 786 个 stars]。**

* * *
#### [**No 10**](https://github.com/twicketapp/TwicketSegmentedControl?utm_source=mybridge&utm_medium=blog&utm_campaign=read_more)
**Twicket Segmented Control: 用于替代 iOS 默认组件的自定义 UISegmentedControl [Github 上有 680 个 stars]。**


###
#### [**No 11**](https://github.com/vikmeup/SCLAlertView-Swift)
**SCLAlertView-Swift: 基于 Swift 的漂亮的弹窗动效[Github 上有 3056 个 stars]。**

* * *
#### [**No 12**](https://github.com/SwiftKickMobile/SwiftMessages)
**SwiftMessages: 基于 Swift 的各式各样的提示信息[Github 上有 1356 个 stars]。**

* * *
#### [**No 13**](https://github.com/xmartlabs/XLActionController)
**XLActionController:基于 Swift 的完全自定义并且可扩展的 action sheet controller[Github 上有 1346 个 stars]。**

* * *
#### [**No 14**](https://github.com/corin8823/Popover)
**Popover: 像 Facebook 应用里的气球呼出框,用纯 Swift 语言编写[Github 上有 852 个 stars]。**

* * *
#### [**No 15**](https://github.com/IcaliaLabs/Presentr)
**Presentr: 对 传统 ViewController present 的封装[Github 上有 635 个 stars]。**


###
#### [**No 16**](https://github.com/Ramotion/folding-cell)
**FoldingCell: 一种的内容展开样式的扩展,灵感来源是现实生活中的折纸[Github 上有 4285 个 stars]。**

* * *
#### [**No 17**](https://github.com/Ramotion/expanding-collection)
**ExpandingCollection: 一个可以实现卡片弹出并预览部分信息的控制器[Github 上有 2425 个 stars]。**

* * *
#### [**No 18**](https://github.com/gontovnik/DGElasticPullToRefresh)
**DGElasticPullToRefresh: 基于 Swift 语言,富含弹性及延展性的下拉刷新组件[Github 上有 2308 个 stars]。**

* * *
#### [**No 19**](https://github.com/Yalantis/Persei)
**Persei: 基于 Swift 语言,顶部菜单的动效,针对于 UITableView 、 UICollectionView 、 UIScrollView[Github 上有 2269 个 stars]。**

* * *
#### [**No 20**](https://github.com/Instagram/IGListKit)
**IGListKit: 一个以数据驱动的 UICollectionView 框架,旨在组建更快更灵活的列表,Instagram 下的项目[Github 上有 2443 个 stars]。**

* * *
#### [**No 21**](https://github.com/Yalantis/PullToMakeSoup)
**PullToMakeSoup: 能够被很简单的增加到 UIScrollView 中的自定义下拉刷新动效。**


###
#### [**No 22**](https://github.com/dzenbot/DZNEmptyDataSe)
**DZNEmptyDataSet: 数据为空状态的 UI 库[Github 上有 6552 个 stars]。**

* * *
#### [**No 23**](https://github.com/ephread/Instructions)
**Instructions: 首次使用的教程指导[Github 上有 2256 个 stars]。**

* * *
#### [**No 24**](https://github.com/hyperoslo/Presentation)
**Presentation: 新手引导页,欢迎页及其动效[Github 上有 1680 个 stars]。**


###
#### [**No 25**](https://github.com/ViccAlexander/Chameleon)
**Chameleon: 为 Swift 开发者准备的扁平化风格的颜色[Github 上有 7071 个 stars]。**

* * *
#### [**No 26**](https://github.com/hyperoslo/Hue?utm_source=mybridge&utm_medium=blog&utm_campaign=read_more)
**Hue: 万能的颜色工具,以后再也不用写 Swift 代码啦[Github 上有 1612 个 stars]。**

* * *
#### [**No 27**](https://github.com/yannickl/DynamicColor)
**DynamicColor: 更简单的控制颜色的 Swift 拓展插件[Github 上有 1310 个 stars]。**


###
#### [**No 28**](https://github.com/BeauNouvelle/FaceAware)
**FaceAware:这个插件帮助 UIImageView 将中心聚焦到照片的脸上,前提是这个照片使用了 AspectFill [Github 上有 1424 个 stars]。**

* * *
#### [**No 29**](https://github.com/gkye/ComplimentaryGradientView)
**ComplimentaryGradientView: 通过源图片的主要颜色生成颜色渐变[Github 上有 384 个 stars]。**


###
#### [**No 30**](https://github.com/danielgindi/Charts)
**Charts: iOS 应用的漂亮图表[Github 上有 11433 个 stars]。**

* * *
#### [**No 31**](https://github.com/philackm/Scrollable-GraphView)
**Scrollable-GraphView:针对于 iOS 应用的自适应滚动图形,用于将离散的数据集进行可视化[Github 上有 3065 个 stars]。**


###
#### [**No 32**](https://github.com/Ramotion/paper-switch)
**Paper Switch:这是一个 Swift 的模块组件,当页面中的开关打开后该页面填充底色[Github 上有 1849 个 stars]。**

* * *
#### [**No 33**](https://github.com/Ramotion/circle-menu)
**Circle Menu:简单优雅的环形布局菜单[Github 上有 1768 个 stars]。**


###
#### [**No 34**](https://github.com/patchthecode/JTAppleCalendar)
**JTAppleCalendar: 非正式的 Swift Apple 日历库。可查看、操作。适用于 iOS 和 tvOS [Github 上有 1026 个 stars]。**

* * *
#### [**No 35**](https://github.com/itsmeichigo/DateTimePicker)
**DateTimePicker: 一个漂亮的用于选择时间和日期的iOS UI 组件[Github 上有 455 个 stars]。**


###
#### [**No 36**](https://github.com/xmartlabs/Eureka)
**Eureka: 优雅的 iOS 表格组件[Github 上有 4117 个 stars]。**


###
#### [**No 37**](https://github.com/mamaral/Neon)
**Neon:适用于 iPhone 和 iPad ,更强大 UI 布局框架[Github 上有 3439 个 stars]。**


###
#### [**No 38**](https://github.com/eBay/NMessenger)
**NMessenger: 更快更轻量级的消息组件,构建于 AsyncDisplaykit 并且由 Swift 编写[Github 上有 1492 个 stars]。**


###
#### [**No 39**](https://github.com/ramotion/reel-search)
**Reel-search:带有模糊搜索的搜索组件[Github 上有 1364 个 stars]。**


### 资源
#### [No 1) 学习](https://goo.gl/lhGClQ)

[所有的 iOS 10 编程课程: 开发 21 个应用包括Uber、Instagram 和 Tinder](https://goo.gl/lhGClQ)
**[22,575 次推荐, 4.7/5 评分]**
#### [No 2) 面试](https://goo.gl/xlvQ4y)

[软件工程师面试的答疑解惑: 学习往期的谷歌面试](https://goo.gl/xlvQ4y)
**[210 次推荐, 4.8/5 评分]**
#### [No 3) 建立网站](https://goo.gl/zWn3Pw)

[给那些想在 5 分钟内建立网站的人](https://goo.gl/zWn3Pw)
**[最便宜的一个]**

以上就是我说的开源 Swift UI 库。如果你喜欢这篇文章,快来下载我们的 [**iOS App.**](https://goo.gl/dJi5H6) 每天阅读基于你使用的编程语言的 10 篇文章。
================================================
FILE: TODO/3d-force-touch-beyond-peek-pop.md
================================================
> * 原文链接: [3D Force Touch: beyond peek & pop](https://medium.com/produkt-blog/3d-force-touch-beyond-peek-pop-c448edc2b1f5#.4miueafqm)
* 原文作者 : [Victor Baro](https://medium.com/@victorbaro)
* 译文出自 : [掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者 : [shiguol(SAlex)](https://github.com/shiguol)
* 校对者 : [cdpath (cdpath)](https://github.com/cdpath) [nathanwhy (nathan)](https://github.com/nathanwhy)
* 状态 : 完成
# 3D Force Touch 的新玩儿法
几天前我买了部 iPhone 6S,接着我被 **3D touch** 功能深深地吸引住了,于是迫不及待地体验了一番。
<iframe width="382" height="214" src="https://www.youtube.com/embed/d-hlQISXj8M" frameborder="0" allowfullscreen=""></iframe>
在一个应用程序中,Peek 和 pop 是一个很出彩的特性。不过话说回来:我们没有太多的控制权。我们只能添加一个预览功能和几个动作 - iOS 系统会管理剩下的工作。
因为我探索了 _3D Touch_ 功能,就一直在思考与内容互动的新方式。Peek 和 pop 是一个很好的交互方式; 但我真正想要的是创建自定义的控制技术。
我们需要考虑的是,由于 _3D touch_ 仅在 iPhone 6S 和 6S Plus 上提供,所以不应该存在**仅**能使用该动作执行的功能。用户应不依赖 _3D touch_ 也可以完成所有功能(就像使用 Peek 和 pop 实现的一样), 而 _3D touch_ 最好只提供额外的交互体验。
#### 访问 force 属性
新的 force 属性在 UITouch 类中。如果想获得用户 _touch_ 事件,我们应该重写 _touches_ 相关方法(类如:touchesBegan, touchesMoved, touchesEnded), 或者继承相关类(例如 UIView,UIButton;见例1),抑或继承实现一个手势(见下文,例 2 和 例 3);
import UIKit.UIGestureRecognizerSubclass
class ForceGestureRecognizer: UIGestureRecognizer {
var forceValue: CGFloat = 0
override func touchesBegan(touches: Set, withEvent event: UIEvent) {
super.touchesBegan(touches, withEvent: event)
state = .Began
handleForceWithTouches(touches)
}
override func touchesMoved(touches: Set, withEvent event: UIEvent) {
super.touchesMoved(touches, withEvent: event)
state = .Changed
handleForceWithTouches(touches)
}
override func touchesEnded(touches: Set, withEvent event: UIEvent) {
super.touchesEnded(touches, withEvent: event)
state = .Ended
handleForceWithTouches(touches)
}
func handleForceWithTouches(touches: Set) {
if touches.count != 1 {
state = .Failed
return
}
guard let touch = touches.first else {
state = .Failed
return
}
forceValue = touch.force
}
}
在这里,我们可以看到 force 属性值介于 0.0 ~ 6.667 之间;关于该值的更多讨论,推荐看这篇文章[探索 Apple`s 3D Touch](https://medium.com/@rknla/exploring-apple-s-3d-touch-f5980ef45af5).
#### 例 1: Force Button
**Force Button** 是 UIButton 的子类,可根据按压的力量变化来修改按钮的阴影属性(见文章开头处视频)。
func shadowWithAmount(amount: CGFloat) {
self.layer.shadowColor = shadowColor.CGColor
self.layer.shadowOpacity = shadowOpacity
let widthFactor = maxShadowOffset.width/maxForceValue
let heightFactor = maxShadowOffset.height/maxForceValue
self.layer.shadowOffset = CGSize(width: maxShadowOffset.width - amount * widthFactor, height: maxShadowOffset.height - amount * heightFactor)
self.layer.shadowRadius = maxShadowRadius - amount
}
上面的函数依据按压力的大小来修改按钮的阴影。你可以找到另外一个例子,解释了如何依据按压力的大小来缩放按钮,[文章在这里](https://github.com/Produkt/3dForceTouchExamples)。
这个按钮使用 _3D touch_ 技术只实现了视觉上的反馈,它没有任何额外的功能。其实,它可以在用户用力按压按钮时系统回调的事件(如 _UIControlEvents.ForceMaxInside)中进行我们自己额外的事件响应。
#### Example 2: Zooming
<iframe width="382" height="214" src="https://www.youtube.com/embed/8RcDqH4kfo8" frameborder="0" allowfullscreen=""></iframe>
我们都是用来双指的捏来实现放大和缩小,这样操作起来感觉自然。然而,有时候当你单手拿着手机时,双指缩放手势操作起来会感觉怪怪的。谷歌地图应用程序尝试通过使用 _doble-tap-longPress-drag_ 手势来解决这个的问题(这感觉怪怪的,如果你不使用它)。
当使用 ForceGestureRecognizer 手势时(见上面的代码),该手势在你拖拽时也很容易放大和缩小。如果你有一个 iPhone6S 可以试一试,这感觉太棒了。
为了达到这个效果,我简单地应用一个 CATransform3D 缩放效果到 ImageView 的层。这样,图像从它的中心进行缩放。通过按住并移动我的手指(缩小到一个特定的区域),我就可以根据手指的位置更新图片的锚点。
func imagePressed(sender: ForceGestureRecognizer) {
let point = sender.locationInView(self.view)
let imageCoordPoint = CGPointMake(point.x - initialFrame.origin.x, point.y - initialFrame.origin.y)
var xValue = max(0, imageCoordPoint.x / initialFrame.size.width)
var yValue = max(0, imageCoordPoint.y / initialFrame.size.height)
xValue = min(xValue, 1)
yValue = min(yValue, 1)
let anchor = CGPointMake(xValue, yValue)
mainImageView.layer.anchorPoint = anchor
let forceValue = max(1, sender.forceValue)
mainImageView.layer.transform = CATransform3DMakeScale(forceValue, forceValue, 1)
if sender.state == .Ended {
mainImageView.layer.anchorPoint = CGPointMake(0.5, 0.5)
mainImageView.layer.transform = CATransform3DIdentity
}
}
最后一个关于 _3D_touch_ 的交互特性我觉得就是**控制动画**了.不过,实话说,我还没有发现这种相互作用的任何有趣的用途(不是作为精细调谐),但我想提一提它(有人可能会发现它很有用)。
这里有一个动画视频是由 _3D_touch_ 进行的控制。
<iframe width="382" height="214" src="https://www.youtube.com/embed/LXQ-iSYhHFI" frameborder="0" allowfullscreen=""></iframe></div>
这里还有给设计师和工程师的一些示例演示了使用 _3D_touch_ 进行交互的方法。我希望我已经说服你去尝试 _3D_touch_。
我想通过推荐[FlexMonkey 的博客](http://flexmonkey.blogspot.com.es)最新文章:[3D Retouch](http://flexmonkey.blogspot.com.es/2015/10/3D-retouch-experimental-retouching-app.html),在这篇文章中,他使用 3D Touch 修改滤镜的强度。
整个项目在这里[github](https://github.com/Produkt/3dForceTouchExamples)。
_特别感谢 @pivalue_
================================================
FILE: TODO/4-must-know-tips-for-building-cross-platform-electron-apps.md
================================================
> * 原文地址:[4 must-know tips for building cross platform Electron apps](https://blog.avocode.com/blog/4-must-know-tips-for-building-cross-platform-electron-apps)
* 原文作者:[Kilian Valkhof](https://blog.avocode.com/authors/kilian-valkhof)
* 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者:[huanglizhuo](https://github.com/huanglizhuo/)
* 校对者:[DeadLion](https://github.com/DeadLion) , [zhouzihanntu](https://github.com/zhouzihanntu)
# 开发 Electron app 必知的 4 个 tips
[Electron](https://electron.atom.io) ,是包括 Avocode 在内的众多 app 采用的技术,能让你快速实现并运行一个跨平台桌面应用。有些问题不注意的话,你的 app 很快就会掉到“坑”里。无法从其它 app 中脱颖而出。
这是我 2016 年 5月 在 Amsterdam 的 Electron Meetup 上演讲的手抄版,加入了对 api 变化的考虑。注意,以下内容会很深入细节,并假设你对 Electron有一定了解。
**首先,我是谁**
我是 Kilian Valkhof ,一个前端工程师,UX 设计师,app 开发者,取决于你的提问对象是谁。我有超过10年的互联网从业经验,在各种环境下构建过桌面应用,比如 GTK 和 QT ,当然也包括 Electron。
你或许应该试试我最近开发的一个自动保存笔记的免费跨平台应用 [Fromscratch](https://fromscratch/) 。
在 Fromscratch 的开发过程中,我花了大量时间确保应用在三大平台上都能保持良好运行,并找到了在 Electron 中的实现方法。这些都是我挖坑填坑过程中积累起来的。
使用 Electron 让 app 使用感和一致性良好并不难,你只需要注意以下细节。
## **1\. 在 macOS 上复制粘贴**
想象一下,你发布了一款记笔记的应用。你在 Linux 机器上进行了多次使用和测试,然而你在 ProductHunt 上收到了一个友善的消息:

if (process.platform === 'darwin') {
var template = [{
label: 'FromScratch',
submenu: [{
label: 'Quit',
accelerator: 'CmdOrCtrl+Q',
click: function() { app.quit(); }
}]
}, {
label: 'Edit',
submenu: [{
label: 'Undo',
accelerator: 'CmdOrCtrl+Z',
selector: 'undo:'
}, {
label: 'Redo',
accelerator: 'Shift+CmdOrCtrl+Z',
selector: 'redo:'
}, {
type: 'separator'
}, {
label: 'Cut',
accelerator: 'CmdOrCtrl+X',
selector: 'cut:'
}, {
label: 'Copy',
accelerator: 'CmdOrCtrl+C',
selector: 'copy:'
}, {
label: 'Paste',
accelerator: 'CmdOrCtrl+V',
selector: 'paste:'
}, {
label: 'Select All',
accelerator: 'CmdOrCtrl+A',
selector: 'selectAll:'
}]
}];
var osxMenu = menu.buildFromTemplate(template);
menu.setApplicationMenu(osxMenu);
}
如果你已经有了菜单,你需要将以上 剪切/复制/粘贴 命令添加到你的已有菜单中。
### 1.1 添加 icon
...否则你的应用在 ubuntu 上就是这样的:

许多应用都有这样的问题,因为在 Windows 和 macOS 系统上,任务栏或 dock 中显示的图标就是应用图标(一个 .ico 或者 .icns),而在 Ubuntu 系统上显示的却是你的窗口图标。 。添加这个很简单。在 `BrowserWindow` 选项中,申明 icon:
mainWindow = new BrowserWindow({
title: 'ElectronApp',
*icon: __dirname + '/app/assets/img/icon.png',*
};
这也会让你的 Windows app 左上角显示一个小图标。
### 1.2 UI Text 不可选
当使用浏览器,文字编辑工具,或者其它原生应用时,你应该注意到你不可以选择菜单上的文字,比如 chrome。在 Electron 中让 app 变的怪异的一个方法就是无意中触发了文字选择,或者高亮了 UI 组件。
CSS 在这里可以帮助我们:向所有按钮,菜单,或者其它任何 UI 元素,添加下面的代码:
.my-ui-text {
*-webkit-user-select:none;*
}
这样文字就不可选了。它更像原生应用了。一个最简单的测试方法就是 ctrl/cmd + A 选中你的应用中所有可选的文字,可以有助于你快速识别哪些还需要添加这个效果。
### 1.3 你需要在三大平台上分别使用三种图标
说实在的,这真是太不方便了,在 Windows 上你需要 .ico 文件,在 macOS 上你需要 .icns 文件,而在 Linux 上你需要 .png 文件。

幸运的是普通的 png 图可以生成另俩个 icon。下面这是最方便的做法:
1\. 制作一张 1024x1024 像素的 PNG,这意味着你已近完成 1/3 的工作了。 (Linux, check!)
2\. 对于 Windows,用 [icotools](http://www.nongnu.org/icoutils/) 生成 .ico:
`icontool -c icon.png > icon.ico`
3\. 对于 macOS,用 png2icns 生成 icns:
`png2icns icon.icns icon.png`
4\. 完成了!
在 macOS 上也有像 [img2icns](http://www.img2icnsapp.com/) 这样的 GUI 工具,或者 [iconverticons](https://iconverticons.com/online/) 这样的 web 工具,但我并没有用过。
### 1.4 意外之喜!
electron-packager 不需要额外的 icon 来为给定的平台选择正确的图标:
$ electron-packager . MyApp *--icon=img/icon* --platform=all --arch=all --version=0.36.0 --out=../dist/ --asar
好吧,我是写完构建针对不同版本选用不同 icon 脚本之后才发现的 :(
## **2\. 白色 loading 状态是属于浏览器行为**
没有什么比白色的 loading 更能代表 Electron app 只是个内嵌浏览器的本质了。不过我们可以通过两种手段来避免 loading 状态:
### 2.1 指定 BrowserWindow 背景颜色
如果你的应用没有白色背景,那么一定要在 BrowserWindow 选项中明确声明。这并不会阻止应用加载时的纯色方块,但至少它不会半路改变颜色:
mainWindow = new BrowserWindow({
title: 'ElectronApp',
*backgroundColor: '#002b36',*
};
### 2.2 在你应用加载完成前隐藏它:
因为应用实际上是在浏览器中运行的,我们可以选择在所有资源加载完成前隐藏窗口。在开始前,确保隐藏掉浏览器窗口:
var mainWindow = new BrowserWindow({
title: 'ElectronApp',
*show: false,*
};
然后在所有东西都加载完成时,显示窗口并聚焦在上面提醒用户。这里推荐使用 `BrowserWindow` 的 "ready-to-show" 事件实现,或者用 webContents 的 'did-finish-load' 事件。
mainWindow.on('ready-to-show', function() {
mainWindow.show();
mainWindow.focus();
});
这里记得要调用 foucs ,提醒用户你的应用已经加载完成了。
## **3\. 保持窗口的大小和位置**
这个问题在很多原生应用中也存在,我发现这是最令人头疼的事情之一。本来一个位置处理很好的 app 在重启时所有的位置又变为默认的了,虽然这对于开发者来说是很合理的,但这会让人有种想撞墙的冲动。千万不要这样做。
相反,保存窗口的大小和位置,并在每次重启时恢复,你的用户会很感激的。
### 3.1 预编译方案
有 [electron-window-state](https://www.npmjs.com/package/electron-window-state) 和 [electron-window-state-manager](https://www.npmjs.com/package/electron-window-state-manager) 两种预编译方案。两种都能用,好好读文档并且小心边界情况,比如最大化你的应用。如果你很想快一点编译完成并看到成品,你可以采用这两种方案。
### 3.2 自己处理滚动
你可以自己处理滚动,这也正是我用的方案,主要是基于我前几年给 [Trimage](https://trimage.org) 写的代码的基础上实现的。并不需要写很多的代码,而且可以给你很多控制权。下面是演示:
#### 3.2.1 把状态保存起来
首先我们得把应用的位置和大小保存在某个地方。用 [Electron-settings](https://github.com/nathanbuchar/electron-settings) 可以轻松做到这一点,但我选择用 [node-localstorage](https://www.npmjs.com/package/node-localstorage) 因为它更简单。
var JSONStorage = require('node-localstorage').JSONStorage;
var storageLocation = app.getPath('userData');
global.nodeStorage = new JSONStorage(storageLocation);
如果你把数据保存到 _`getPath('userData')`_ , electron 将会把它保存到自己的应用设置里,在 _`~/.config/YOURAPPNAME`_ 位置,在 Windows 上就是你的用户文件夹下的 appdata 文件夹中。
#### 3.2.2 打开应用时恢复你的状态
var windowState = {};
try {
windowState = global.nodeStorage.getItem('windowstate');
} catch (err) {
// the file is there, but corrupt. Handle appropriately.
}
当然了,第一次启动的时是不可行,你得处理这种情况。可以提供默认设置,一旦你在 JavaScript 对象中获取到了前一次的状态,就使用保存的状态信息去设置 BrowserWindow 的大小:
var mainWindow = new BrowserWindow({
title: 'ElectronApp',
x: windowState.bounds && windowState.bounds.x || undefined,
y: windowState.bounds && windowState.bounds.y || undefined,
width: windowState.bounds && windowState.bounds.width || 550,
height: windowState.bounds && windowState.bounds.height || 450,
});
正如你看到的那样,我通过提供回退值来添加默认设置。
现在在 Electron 中,在开启应用时并不能以最大化状态启动应用,因此我们得在创建好 BrowserWindow 之后再最大化窗口。
// Restore maximised state if it is set.
// not possible via options so we do it here
if (windowState.isMaximized) {
mainWindow.maximize();
}
#### 3.2.3 在 move resize 和 close 时保存状态:
在理想世界中你只需要在关闭应用时保存你的窗口状态,但事实上它错过了很多未知原因导致的应用终止事件,比如断电之类的。
在每次 move resize 事件时获取和保存状态可以让我们可以恢复上次已知状态的位置和大小。
['resize', 'move', 'close'].forEach(function(e) {
mainWindow.on(e, function() {
storeWindowState();
});
});
And the storeWindowState function:
var storeWindowState = function() {
windowState.isMaximized = mainWindow.isMaximized();
if (!windowState.isMaximized) {
// only update bounds if the window isn't currently maximized
windowState.bounds = mainWindow.getBounds();
}
global.nodeStorage.setItem('windowstate', windowState);
};
storeWindowState 函数有个小小的问题:如果你最小化一个最大化状态的原生窗口时,它会恢复到前一个状态,这意味着本来我们想要保存的是最大化的状态,但我们并不想覆盖掉前一个窗口的大小(没有最大化的窗口),因此如果你最大化,关闭,重新打开,取消最大化,这时应用的位置是你最大化之前的位置。
## **4\. 一些小贴士**
下面是一些很小很简短有用的小技巧。
### 4.1 快捷键
通常来讲 Windows 和 Linux 使用 Ctrl,而 macOS 用 Cmd 。为了避免给每个快捷键(在 Electron 这叫做加速器 _Accelerator_ )添加两次,你可以用 "CmdOrCtrl" 一次性给所有的平台进行设置。
### 4.2 使用系统字体 San Francisco
用系统默认的字体意味着你的应用可以和操作系统看起来很和谐。为了避免给每个系统都单独设置字体,你可以用下面的 CSS 代码块速实现更随系统字体:
body {
font: caption;
}
"caption" 是 CSS 中关键字,它会连接到系统指定字体。
### 4.3 系统颜色
和系统字体一样,你也可以用 [System colors](http://www.sitepoint.com/css-system-styles/) 让系统决定你应用的颜色。这其实是一个在 CSS3 中已经弃用的未完全实现的属性,但在可见的未来中它并不会被很快废弃。
### 4.4 布局
CSS 是个相当强大的布局方式,尤其是把 `calc()` 和 flexbox 结合到一起时,但这并不会减少在像 GTK, Qt 或者 Apple Autolayout 这类老旧的 GUI 框架中需要做的工作。你可以用 [Grid Stylesheets](https://gridstylesheets.org/)(这是一个基于约束的布局系统) 采用类似的方式实现你 app 的 GUI 。
## **感谢!**
在 Electron 中构建应用是一件很有趣的事情并且会让你有很多的收获 : 你可以在很短的时间内实现并运行一个跨平台的应用。如果你之前从没有用过 Electron 我希望这篇文章可以引起你足够的兴趣去尝试它。很多的收获[Electron](http://electron.atom.io) 的网站有很全的文档以及很多很酷的 Demo 可以让你尝试它的 API
如果你已经在写 Electron 应用了,我希望上面的可以鼓励你更多的考虑你的 app 在所有平台上究竟运行的怎么样。
最后,有什么其他的小贴士,请把它写在评论区。
================================================
FILE: TODO/5-not-so-obvious-things-about-rxjava.md
================================================
> * 原文地址:[5 Not So Obvious Things About RxJava](https://medium.com/@jagsaund/5-not-so-obvious-things-about-rxjava-c388bd19efbc#.kf2q0gksm)
> * 原文作者:[Jag Saund](https://medium.com/@jagsaund)
> * 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
> * 译者: [skyar2009](https://github.com/skyar2009)
> * 校对者:[Danny1451](https://github.com/Danny1451), [yunshuipiao](https://github.com/yunshuipiao)

# 震惊!RxJava 5 个不为人知的小秘密
无论你是刚刚接触 RxJava,还是已经使用过一段时间,关于 RxJava 你总会有些新的知识要学。在使用 RxJava 框架过程中,我发现了 5 点不那么明显的知识,使我可以充分挖掘它的潜能。
**注释** 本文引用的 APIs 是基于 **RxJava 1.2.6**
### 1. 什么时候使用 map,什么时候使用 flatMap
[map](http://reactivex.io/documentation/operators/map.html) 和 [flatMap](http://reactivex.io/documentation/operators/flatmap.html) 是常用的两个 ReactiveX 操作。它们往往是你最先接触的两个操作,并且很难确定使用哪个是正确的。
**map** 和 **flatMap** 都是对 Observable 发出的每一个元素执行转换方法。但是,**map** 只输出一个元素,**flatMap** 输出 0 或多个元素。

在上面的例子中,`map` 操作对每一个字符串执行了 `split` 方法并输出了一个包含字符串数组的元素。当你想将一个元素转换成另一个时使用 `map`。
有些时候,我们执行的方法返回多个元素,并且我们希望将他们添加到同一个流中。这种情况下,`flatMap` 是一个好的选择。在上面的例子中 `flatMap` 操作将字符串数组处理后输出到了同一个序列。
### 2. 避免使用 Observable.create(…) 创建 Observable
有些时候你需要将同步或异步的 API 转成响应式的 API。使用 [Observable.create](http://reactivex.io/documentation/operators/create.html) 看起来是个极具诱惑性的选择,但它有如下要求:
- 当取消 Observable 订阅时需要注销回调 (否则会造成内存泄露)
- 只有当有订阅者订阅时才能使用 onNext 或 onCompleted 发送事件
- 使用 onError 向上游传递错误
- 处理背压
很难正确的实现以上要求,幸运的是,你可以不这么做。有一些静态工具方法可以帮你解决:
**syncOnSubscribe**
一个可以创建安全 `OnSubscribe<T>` 的工具,它创建的 `OnSubscribe<T>` 能够正确地处理来自订阅者的背压请求。当你需要将一个同步获取式的阻塞 API 转成响应式 API 时可以使用。
```
public Observable<byte[]> readFile(@NonNull FileInputStream stream) {
final SyncOnSubscribe<FileInputStream, byte[]> fileReader = SyncOnSubscribe.createStateful(
() -> stream,
(stream, output) -> {
try {
final byte[] buffer = new byte[BUFFER_SIZE];
int count = stream.read(buffer);
if (count < 0) {
output.onCompleted();
} else {
output.onNext(buffer);
}
} catch (IOException error) {
output.onError(error);
}
return stream;
},
s -> IOUtil.closeSilently(s));
return Observable.create(fileReader);
}
```
**fromCallable**
一个静态工具,可以对简单的同步 API 进行封装并将之转化成响应式 API。更赞的是,`fromCallable` 也可以处理检查到的异常。
```
public Observable<Boolean> enablePushNotifications(boolean enable) {
return Observable.fromCallable(() -> sharedPrefs
.edit()
.putBoolean(KEY_PUSH_NOTIFICATIONS_PREFS, enable)
.commit());
}
```
**fromEmitter**
一个静态工具,对异步 API 进行封装并可以管理 Observable 被取消订阅时释放的资源。不像 `fromCallable`,你可以输出多个元素。
```
import android.bluetooth.le.BluetoothLeScanner;
import android.bluetooth.le.ScanCallback;
import android.bluetooth.le.ScanResult;
import android.support.annotation.NonNull;
import rx.Emitter;
import rx.Observable;
import java.util.List;
public class RxBluetoothScanner {
public static class ScanResultException extends RuntimeException {
public ScanResultException(int errorCode) {
super("Bluetooth scan failed. Error code: " + errorCode);
}
}
private RxBluetoothScanner() {
}
@NonNull
public static Observable<ScanResult> scan(@NonNull final BluetoothLeScanner scanner) {
return Observable.fromEmitter(scanResultEmitter -> {
final ScanCallback scanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, @NonNull ScanResult result) {
scanResultEmitter.onNext(result);
}
@Override
public void onBatchScanResults(@NonNull List<ScanResult> results) {
for (ScanResult r : results) {
scanResultEmitter.onNext(r);
}
}
@Override
public void onScanFailed(int errorCode) {
scanResultEmitter.onError(new ScanResultException(errorCode));
}
};
scanResultEmitter.setCancellation(() -> scanner.stopScan(scanCallback));
scanner.startScan(scanCallback);
}, Emitter.BackpressureMode.BUFFER);
}
}
```
### 3. 如何处理背压
有时,Observable 产生事件过快以至于下游观察者跟不上它的速度。当这种情况发生时,你往往会遇到 `MissingBackpressureException` 异常。

RxJava 提供了一些方法管理背压,但是具体使用哪一种需要视情况而定。
**冷、热 Observable**
只有当有订阅时,冷 Observable 才会发送元素。观察者订阅冷 Observable 可以控制发送事件的速度而不需要牺牲流的完整性。冷 Observable 例子有:读文件、数据库查询、网络请求以及静态迭代器转成的 Observable。
热 Observable 是连续的事件流,它的发出不依赖订阅者的数量。当一个观察者订阅了 Observable,那么它将面临下面的一种情况:
- 收到所有事件子集的重放
- 收到所有事件的重放
- 收到新的事件
热 Observables 例子有:触摸事件、通知以及进度更新。
由于热 Observable 发出事件的本性,我们不能控制它的速度。例如,你不能降低触摸事件发出的速度。因此,最好是使用 `BackpressureMode` 提供的流控制策略。
使用一个响应式获取方法,冷 Observable 可以根据观察者的反馈降低发送速度。更多知识,请看 ReactiveX 文档的[背压与响应式获取方法](https://github.com/ReactiveX/RxJava/wiki/Backpressure).
**BackpressureMode.NONE 和 BackpressureMode.ERROR**
在这两种模式中,发送的事件不是背压。当被观察者的 16 元素缓冲区溢出时会抛出 `MissingBackpressureException`。

**BackpressureMode.BUFFER**
在这种模式下,有一个无限的缓冲区(初始化时是 128)。过快发出的元素都会放到缓冲区中。如果缓冲区中的元素无法消耗,会持续的积累直到内存耗尽。结果是 `OutOfMemoryException` 异常。

**BackpressureMode.DROP**
这种模式是使用固定大小为 1 的缓冲区。如果下游观察者无法处理,第一个元素会缓存下来后续的会被丢弃。当消费者可以处理下一个元素时,它收到的将是 Observable 发出的第一个元素。

**BackpressureMode.LATEST**
这种模式与 `BackpressureMode.DROP` 类似,因为它也使用固定大小为 1 的缓冲区。然而,不是缓存第一个元素丢弃后续元素,`BackpressureMode.LATEST` 而是使用最新的元素替换缓冲区缓存的元素。当消费者可以处理下一个元素时,它收到的是 Observable 最近一次发送的元素。

### 4. 如何防止无意的结束流错误
RxJava 通过给 Observable 序列发送 `onError` 通知不可恢复的错误,并且会结束序列。
有时,你不希望结束序列。对于这种情况,RxJava 提供了几种不会结束序列的错误处理方法。
RxJava 提供了许多错误处理方法,但是有时你不希望结束序列。尤其是涉及到主题时。
**onErrorResumeNext**
使用 [onErrorResumeNext](http://reactivex.io/RxJava/javadoc/rx/Observable.html#onErrorResumeNext%28rx.Observable%29) 可以拦截 `onError` 并返回一个 Observable。或者对错误信息添加附加信息并返回一个新的错误,或者发送给 `onNext` 一个新的事件。
```
public Observable<SearchResult> search(@NotNull EditText searchView) {
return RxTextView.textChanges(searchView) // In production, share this text view observable, don't create a new one each time
.map(CharSequence::toString)
.debounce(500, TimeUnit.MILLISECONDS) // Avoid getting spammed with key stroke changes
.filter(s -> s.length() > 1) // Only interested in queries of length greater than 1
.observeOn(workerScheduler) // Next set of operations will be network so switch to an IO Scheduler (or worker)
.switchMap(query -> searchService.query(query)) // Take the latest observable from upstream and unsubscribe from any previous subscriptions
.onErrorResumeNext(Observable.empty()); // <-- This will terminate upstream (ie. we will stop receiving text view changes after an error!)
}
```
**使用 onErrorResumeNext 捕获**
使用该操作会修复下游序列,但是会结束上游序列因为已经发送了 `onError` 通知。所以,如果你连接的是一个发布通知的主题,`onError` 通知会结束主题。
如果你希望上游继续运行,可以在 `onErrorResumeNext` 操作中嵌套 `flatMap` 或 `switchMap` 操作。
```
public Observable<SearchResult> search(@NotNull EditText searchView) {
return RxTextView.textChanges(searchView) // In production, share this text view observable, don't create a new one each time
.map(CharSequence::toString)
.debounce(500, TimeUnit.MILLISECONDS) // Avoid getting spammed with key stroke changes
.filter(s -> s.length() > 1) // Only interested in queries of length greater than 1
.observeOn(workerScheduler) // Next set of operations will be network so switch to an IO Scheduler (or worker)
.switchMap(query -> searchService.query(query) // Take the latest observable from upstream and unsubscribe from any previous subscriptions
.onErrorResumeNext(Observable.empty()); // <-- This fixes the problem since the error is not seen by the upstream observable
}
```
### 5. 如何共享你的 Observable
有时你需要将 Observable 的输出共享给多个观察者。RxJava 提供了 `share` 和 `publish` 两种方式实现 Observable 发送事件的多播。
**Share**
`share` 允许多个观察者连接到源 Observable。下面的例子中,共享的是 Observable 发送的 `MotionEvent` 事件。然后,我们创建了另外两个 Observable 分别过滤 `DOWN` 和 `UP` 触摸事件。`DOWN` 事件我们画红圈,`UP` 事件我们画篮圈。
```
public void touchEventHandler(@NotNull View view) {
final Observable<MotionEvent> motionEventObservable = RxView.touches(view).share();
// Capture down events
final Observable<MotionEvent> downEventsObservable = motionEventObservable
.filter(event -> event.getAction() == MotionEvent.ACTION_DOWN);
// Capture up events
final Observable<MotionEvent> upEventsObservable = motionEventObservable
.filter(event -> event.getAction() == MotionEvent.ACTION_UP);
// Show a red circle at the position where the down event ocurred
subscriptions.add(downEventsObservable.subscribe(event ->
view.showCircle(event.getX(), event.getY(), Color.RED)));
// Show a blue circle at the position where the up event ocurred
subscriptions.add(upEventsObservable.subscribe(event ->
view.showCircle(event.getX(), event.getY(), Color.BLUE)));
}
```
然而,一旦有观察者订阅 Observable,Observable 就会开始发送事件。这样就会造成后续的订阅者会错过一个或多个触摸事件。

在这个例子中,“蓝” 观察者错过了第一个事件。有些时候这没问题,但是如果你不能接受错过任何事件,那么你需要使用 `publish` 操作。
**Publish**
对 Observable 执行 `publish` 操作会将值转化为 ConnectedObservable。就像打开阀门一样。下面的例子和上面一样,需要注意的是我们现在使用的是 `publish` 操作。
```
public void touchEventHandler(@NotNull View view) {
final ConnectedObservable<MotionEvent> motionEventObservable = RxView.touches(view).publish();
// Capture down events
final Observable<MotionEvent> downEventsObservable = motionEventObservable
.filter(event -> event.getAction() == MotionEvent.ACTION_DOWN);
// Capture up events
final Observable<MotionEvent> upEventsObservable = motionEventObservable
.filter(event -> event.getAction() == MotionEvent.ACTION_UP);
// Show a red circle at the position where the down event ocurred
subscriptions.add(downEventsObservable.subscribe(event ->
view.showCircle(event.getX(), event.getY(), Color.RED)));
// Show a blue circle at the position where the up event ocurred
subscriptions.add(upEventsObservable.subscribe(event ->
view.showCircle(event.getX(), event.getY(), Color.BLUE)));
// Connect the source observable to begin emitting events
subscriptions.add(motionEventObservable.connect());
}
```
一旦必要的 Observables 订阅了源,你需要执行对源 ConnectedObservable 执行 `connect` 来开始发送事件。

注意,一旦对源调用了 `connect` 方法,相同事件序列会分别发送给 “绿” 和 “蓝” 观察者。
================================================
FILE: TODO/5-step-life-cycle-neural-network-models-keras.md
================================================
> * 原文地址:[5 Step Life-Cycle for Neural Network Models in Keras](https://machinelearningmastery.com/5-step-life-cycle-neural-network-models-keras/)
> * 原文作者:[Jason Brownlee](https://machinelearningmastery.com/author/jasonb/)
> * 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
> * 本文永久链接:[https://github.com/xitu/gold-miner/blob/master/TODO/5-step-life-cycle-neural-network-models-keras.md](https://github.com/xitu/gold-miner/blob/master/TODO/5-step-life-cycle-neural-network-models-keras.md)
> * 译者:[lsvih](https://github.com/lsvih)
> * 校对者:[CACppuccino](https://github.com/CACppuccino)
# Keras 中构建神经网络的 5 个步骤
使用 Keras 创建、评价深度神经网络非常的便捷,不过你需要严格地遵循几个步骤来构建模型。
在本文中我们将一步步地探索在 Keras 中创建、训练、评价深度神经网络,并了解如何使用训练好的模型进行预测。
在阅读完本文后你将了解:
* 如何在 Keras 中定义、编译、训练以及评价一个深度神经网络。
* 如何选择、使用默认的模型解决回归、分类预测问题。
* 如何使用 Keras 开发并运行你的第一个多层感知机网络。
* **2017 年 3 月更新**:将示例更新至 Keras 2.0.2 / TensorFlow 1.0.1 / Theano 0.9.0。

题图版权由 [Martin Stitchener](https://www.flickr.com/photos/dxhawk/6842278135/) 所有。
## 综述
下面概括一下我们将要介绍的在 Keras 中构建神经网络模型的 5 个步骤。
1. 定义网络。
2. 编译网络。
3. 训练网络。
4. 评价网络。
5. 进行预测。

Keras 中构建神经网络的 5 个步骤
## 想要了解更多使用 Python 进行深度学习的知识?
免费订阅 2 周,收取我的邮件,探索 MLP、CNN 以及 LSTM 吧!(附带样例代码)
现在点击注册还能得到免费的 PDF 版教程。
[点击这里开始你的小课程吧!](https://machinelearningmastery.leadpages.co/leadbox/142d6e873f72a2%3A164f8be4f346dc/5657382461898752/)
## 第一步:定义网络
首先要做的就是定义你的神经网络。
在 Keras 中,可以通过一系列的层来定义神经网络。这些层的容器就是 Sequential 类。(译注:序贯模型)
第一步要做的就是创建 Sequential 类的实例。然后你就可以按照层的连接顺序创建你所需要的网络层了。
例如,我们可以做如下两步:
```
model = Sequential()
model.add(Dense(2))
```
此外,我们也可以通过创建一个层的数组,并将其传给 Sequential 构造器来定义模型。
```
layers = [Dense(2)]
model = Sequential(layers)
```
网络的第一层必须要定义预期输入维数。指定这个参数的方式有许多种,取决于要建造的模型种类,不过在本文的多层感知机模型中我们将通过 `input_dim` 属性来指定它。
例如,我们要定义一个小型的多层感知机模型,这个模型在可见层中具有 2 个输入,在隐藏层中有 5 个神经元,在输出层中有 1 个神经元。这个模型可以定义如下:
```
model = Sequential()
model.add(Dense(5, input_dim=2))
model.add(Dense(1))
```
你可以将这个序贯模型看成一个管道,从一头喂入数据,从另一头得到预测。
这种将通常互相连接的层分开,并作为单独的层加入模型是 Keras 中一个非常有用的概念,这样可以清晰地表明各层在数据从输入到输出的转换过程中起到的职责。例如,可以将用于将各个神经元中信号求和、转换的激活函数单独提取出来,并将这个 Activation 对象同层一样加入 Sequential 模型中。
```
model = Sequential()
model.add(Dense(5, input_dim=2))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
```
输出层激活函数的选择尤为重要,它决定了预测值的格式。
例如,以下是一些常用的预测建模问题类型,以及它们可以在输出层使用的结构和标准的激活函数:
* **回归问题**:使用线性的激活函数 “linear”,并使用与与输出数量相匹配的神经元数量。
* **二分类问题**:使用逻辑激活函数 “sigmoid”,在输出层仅设一个神经元。
* **多分类问题**:使用 Softmax 激活函数 “softmax”;假如你使用的是 one-hot 编码的输出格式的话,那么每个输出对应一个神经元。
## 第二步:编译网络
当我们定义好网络之后,必须要对它进行编译。
编译是一个高效的步骤。它会将我们定义的层序列通过一系列高效的矩阵转换,根据 Keras 的配置转换成能在 GPU 或 CPU 上执行的格式。
你可以将编译过程看成是对你网络的预计算。
无论是要使用优化器方案进行训练,还是从保存的文件中加载一组预训练权重,只要是在定义模型之后都需要编译,因为编译步骤会将你的网络转换为适用于你的硬件的高效结构。此外,进行预测也是如此。
编译步骤需要专门针对你的网络的训练设定一些参数,设定训练网络使用的优化算法 以及用于评价网络通过优化算法最小化结果的损失函数尤为重要。
下面的例子对定义好的用于回归问题的模型进行编译时,指定了随机梯度下降(sgd)优化算法,以及均方差(mse)算是函数。
```
model.compile(optimizer='sgd', loss='mse')
```
预测建模问题的种类也会限制可以使用的损失函数类型。
例如,下面是几种不同的预测建模类型对应的标准损失函数:
* **回归问题**:均方差误差 “_mse_”。
* **二分类问题**:对数损失(也称为交叉熵)“_binary_crossentropy_”。
* **多分类问题**:多类对数损失 “_categorical_crossentropy_”。
你可以查阅 [Keras 支持的损失函数](http://keras.io/objectives/)。
最常用的优化算法是随机梯度下降,不过 Keras 也支持[其它的一些优化算法](http://keras.io/optimizers/)。
以下几种优化算法可能是最常用的优化算法,因为它们的性能一般都很好:
* **随机梯度下降** “_sgd_” 需要对学习率以及动量参数进行调参。
* **ADAM** “_adam_” 需要对学习率进行调参。
* **RMSprop** “_rmsprop_” 需要对学习率进行调参。
最后,你还可以指定在训练模型过程中除了损失函数值之外的特定指标。一般对于分类问题来说,最常收集的指标就是准确率。需要收集的指标由设定数组中的名称决定。
例如:
```
model.compile(optimizer='sgd', loss='mse', metrics=['accuracy'])
```
## 第三步:训练网络
在网络编译完成后,就能对它进行训练了。这个过程也可以看成是调整权重以拟合训练数据集。
训练网络需要制定训练数据,包括输入矩阵 X 以及相对应的输出 y。
在此步骤,将使用反向传播算法对网络进行训练,并使用在编译时制定的优化算法以及损失函数来进行优化。
反向传播算法需要指定训练的 Epoch(回合数、历元数)、对数据集的 exposure 数。
每个 epoch 都可以被划分成多组数据输入输出对,它们也称为 batch(批次大小)。batch 设定的数字将会定义在每个 epoch 中更新权重之前输入输出对的数量。这种做法也是一种优化效率的方式,可以确保不会同时加载过多的输入输出对到内存(显存)中。
以下是一个最简单的训练网络的例子:
```
model.compile(optimizer='sgd', loss='mse', metrics=['accuracy'])
```
在训练网络之后,会返回一个历史对象(History oject),其中包括了模型在训练中各项性能的摘要(包括每轮的损失函数值及在编译时制定收集的指标)。
## 第四步:评价网络
在网络训练完毕之后,就可以对其进行评价。
可以使用训练集的数据对网络进行评价,但这种做法得到的指标对于将网络进行预测并没有什么用。因为在训练时网络已经“看”到了这些数据。
因此我们可以使用之前没有“看”到的额外数据集来评估网络性能。这将提供网络在未来对没有见过的数据进行预测的性能时的估测。
评价模型将会评价所有测试集中的输入输出对的损失值,以及在模型编译时指定的其它指标(例如分类准确率)。本步骤将返回一组评价指标结果。
例如,一个在编译时使用准确率作为指标的模型可以在新数据集上进行评价,如下所示:
```
loss, accuracy = model.evaluate(X, y)
```
## 第五步:进行预测
最后,如果我们对训练后的模型的性能满意的话,就能用它来对新的数据做预测了。
这一步非常简单,直接在模型上调用 predict() 函数,传入一组新的输入即可。
例如:
```
predictions = model.predict(x)
```
预测值将以网络输出层定义的格式返回。
在回归问题中,这些由线性激活函数得到的预测值可能直接就符合问题需要的格式。
对于二分类问题,预测值可能是一组概率值,这些概率说明了数据分到第一类的可能性。可以通过四舍五入(K.round)将这些概率值转换成 0 与 1。
而对于多分类问题,得到的结果可能也是一组概率值(假设输出变量用的是 one-hot 编码方式),因此它还需要用 [argmax 函数](http://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html)将这些概率数组转换为所需要的单一类输出。
## End-to-End Worked Example
让我们用一个小例子将以上的所有内容结合起来。
我们将以 Pima Indians 糖尿病发病二分类问题为例。你可以在 [UCI 机器学习仓库](https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes)中下载此数据集。
该问题有 8 个输入变量,需要输出 0 或 1 的分类值。
我们将构建一个包含 8 个输入的可见层、12 个神经元的隐藏层、rectifier 激活函数、1 个神经元的输出层、sigmoid 激活函数的多层感知机神经网络。
我们将对网络进行 100 epoch 次训练,batch 大小设为 10,使用 ADAM 优化算法以及对数损失函数。
在训练之后,我们使用训练数据对模型进行评价,然后使用训练数据对模型进行单独的预测。这么做是为了方便起见,一般来说我们都会使用额外的测试数据集进行评价,用新的数据进行预测。
完整代码如下:
```
# Keras 多层感知机神经网络样例
from keras.models import Sequential
from keras.layers import Dense
import numpy
# 加载数据
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
X = dataset[:,0:8]
Y = dataset[:,8]
# 1. 定义网络
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 2. 编译网络
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 3. 训练网络
history = model.fit(X, Y, epochs=100, batch_size=10)
# 4. 评价网络
loss, accuracy = model.evaluate(X, Y)
print("\nLoss: %.2f, Accuracy: %.2f%%" % (loss, accuracy*100))
# 5. 进行预测
probabilities = model.predict(X)
predictions = [float(round(x)) for x in probabilities]
accuracy = numpy.mean(predictions == Y)
print("Prediction Accuracy: %.2f%%" % (accuracy*100))
```
运行样例,会得到以下输出:
```
...
768/768 [==============================] - 0s - loss: 0.5219 - acc: 0.7591
Epoch 99/100
768/768 [==============================] - 0s - loss: 0.5250 - acc: 0.7474
Epoch 100/100
768/768 [==============================] - 0s - loss: 0.5416 - acc: 0.7331
32/768 [>.............................] - ETA: 0s
Loss: 0.51, Accuracy: 74.87%
Prediction Accuracy: 74.87%
```
## 总结
在本文中,我们探索了使用 Keras 库进行深度学习时构建神经网络的 5 个步骤。
此外,你还学到了:
* 如何在 Keras 中定义、编译、训练以及评价一个深度神经网络。
* 如何选择、使用默认的模型解决回归、分类预测问题。
* 如何使用 Keras 开发并运行你的第一个多层感知机网络。
你对 Keras 的神经网络模型还有别的问题吗?或者你对本文还有什么建议吗?请在评论中留言,我会尽力回答。
---
> [掘金翻译计划](https://github.com/xitu/gold-miner) 是一个翻译优质互联网技术文章的社区,文章来源为 [掘金](https://juejin.im) 上的英文分享文章。内容覆盖 [Android](https://github.com/xitu/gold-miner#android)、[iOS](https://github.com/xitu/gold-miner#ios)、[React](https://github.com/xitu/gold-miner#react)、[前端](https://github.com/xitu/gold-miner#前端)、[后端](https://github.com/xitu/gold-miner#后端)、[产品](https://github.com/xitu/gold-miner#产品)、[设计](https://github.com/xitu/gold-miner#设计) 等领域,想要查看更多优质译文请持续关注 [掘金翻译计划](https://github.com/xitu/gold-miner)、[官方微博](http://weibo.com/juejinfanyi)、[知乎专栏](https://zhuanlan.zhihu.com/juejinfanyi)。
================================================
FILE: TODO/6-practical-skills-for-ux-designers.md
================================================
> * 原文地址:[6 Practical Skills for UX Designers](https://uxdesign.cc/6-practical-skills-for-ux-designers-22c852d6c576#.vjeb02dwq)
* 原文作者:[Joanna Ngai](https://uxdesign.cc/@ngai.yt)
* 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
* 译者:[Kulbear](https://kulbear.github.io/)
* 校对者:[owenlyn](https://github.com/owenlyn), [shixinzhang](https://github.com/shixinzhang)
# 给 UX 设计师的 6 个超实用技巧指南

#### 一些关于怎么变革产品、服务和流程的开发方式的想法

我们都同意[中高级设计师和初级设计师处理问题的方法有着显著区别](https://medium.com/the-year-of-the-looking-glass/junior-designers-vs-senior-designers-fbe483d3b51e#.4a2tc78vd),到底是什么东西使我们能区分开新人和久经沙场的老设计师们呢?
接下来是一些在你从事设计师的这条漫长旅途上需要磨砺的一些实用技能。
### 1. 从长远的角度看你的设计方案
如我[之前](https://blog.prototypr.io/essential-lessons-on-ux-18f96933e885#.mjgjp0osb)所提及的,设计师们需要站在一定高度上观察、理解复杂的问题,避免过早被细节困扰。
> 我的一位导师提过,设计师们做的不仅仅是引导用户去点击一个按钮或是完成一个小任务。用户体验设计师必须从长远角度看待设计问题,并拥有一个**站在"10000 英尺以上高度” 的思维方式**。
> 也就是需要在用户交互的这个系统中考虑以前的想法,态度,竞争对手和其他工具。
在你设计的时候,要从全局考虑用户所处的环境,而不是考虑某个特定的情况;避免出现不顾及你设计内容的上下文状态,横冲直撞的设计。
### 2. 专注于核心问题(Issue)
专注于核心问题的能力是设计师成功解决困难问题的保证。
老练的用户体验设计师即使在遇到未解决的问题(大型的或抽象的)也可以轻松的完成整个项目。
他们可以建立一些假设,根据自己最初的想法收集一些数据从而将口头上的想法通过设计和提炼转换为可见的概念。

### 3. 以人为本
及时对用户关注点的反馈提问。
世界那么大,你得去看看。走到外面去多观察,理解并明确的将以用户为中心的设计理念应用到设计中,这是对于设计师是十分重要的。
你要问自己这些问题:现在的问题是什么?我的目标用户是谁?我们为什么要解决这个问题?他们的目标是什么?
所有的这些功夫都不会白费——在最终交付产品的时候这些都会成为产品的核心价值。

### 4. 用设计思维影响(我个人觉得引导更好)你的同事
优秀的用户体验设计师往往也是沟通的专家——无论是从口头上(为设计或非设计人员讲述故事、阐述概念等等)或是从视觉上(略图,草稿,模拟图)。
他们能在避免不必要的争论的同时将自己的要点阐述清楚,给大家呈现新鲜的观点(灵感)。


### 5. 不断观察与学习
设计是一个快速更迭的领域。你要随着科技快速增长的脚步持续学习新事物,使自己成长,让自己保持在潮流的前端。
- [Seth 的博客](http://sethgodin.typepad.com/) — *一些有趣的商业 idea*
- [Creative Mornings](https://creativemornings.com/) — *一些来自一个富有创造力的社区的早餐读物*
- [LukeW](http://www.lukew.com/ff/) — *Web 的实用和美工设计策略*
- [24 个最佳的用户体验设计学习去处](https://uxdesign.cc/learning-as-a-designer-9c1edcc989ae#.b4y792xhx)
- [2016 年最佳用户体验设计](https://blog.prototypr.io/best-of-ux-links-of-2016-eb2f44a2c9c0#.w0fl1cq76)
#### 持续学习、成长的思维是需要终生培养的。
### 6. 勇气(决心)

Angela Lee Duckworth
> 决心是长远目标的激情与持之以恒的源头。它是拥有着毅力。它和你的未来紧密相关,日复一日,直至数年,而非一周一月的功劳。它能实现你对未来的宏愿。它不是百米冲刺跑,而是一场生活中漫长的马拉松。
> —* Angela Lee Duckworth, TED 演讲者, Grit: The power of passion and perseverance*
尽管所谓决心看起来和设计毫无关联,但我相信这是具有创新思维的人最实际的特点。
决心使你可以迈过失败。它的动力并非来自于燃烧你的激情,而是你的刻苦与努力。

Ji lee — Words As Image

Ji lee — Words As Image
对于设计师们来说,这看起来像是习惯或是一些[辅助项目](http://pleaseenjoy.com/projects/personal/bubble-project/),或是超越基本要求的探索。这是对未来前景的乐观思考。
#### 对我来说,最有价值的技能就是从失败中学习。
—
*感谢您的阅读,如果想浏览更多我的作品,请参考 [*design work*](http://www.cargocollective.com/joannan) 。*
================================================
FILE: TODO/8-key-react-component-decisions.md
================================================
> * 原文地址:[8 Key React Component Decisions: Standardize your React development with these key decisions](https://medium.freecodecamp.org/8-key-react-component-decisions-cc965db11594)
> * 原文作者:[Cory House](https://medium.freecodecamp.org/@housecor?source=post_header_lockup)
> * 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
> * 本文永久链接:[https://github.com/xitu/gold-miner/blob/master/TODO/8-key-react-component-decisions.md](https://github.com/xitu/gold-miner/blob/master/TODO/8-key-react-component-decisions.md)
> * 译者:[undead25](https://github.com/undead25)
> * 校对者:[Tina92](https://github.com/Tina92)、[vuuihc](https://github.com/vuuihc)
# React 组件的 8 个关键决策
## 通过这些关键决策来标准化你的 React 开发

React 自 2013 年被开源以来,一直在迭代更新。当你在网上搜索相关信息时,可能会被一些使用了过时的方法的文章坑到。所以,现在在写 React 组件时,你的团队需要作出以下八个关键决策。
### 决策 1:开发环境
在编写第一个组件之前,你的团队需要就开发环境达成一致。太多选择了……

当然,你可以[从头开始构建 JS 开发环境](https://www.pluralsight.com/courses/javascript-development-environment),有 25% 的 React 开发者是这么做的。我目前的团队使用的是 create-react-app 的 fork,并拓展了一些功能,例如[支持 CRUD 的 mock API](https://medium.freecodecamp.org/rapid-development-via-mock-apis-e559087be066)、[可复用的组件库](https://www.pluralsight.com/courses/react-creating-reusable-components)和增强的代码检测功能(我们会检测 create-react-app 忽略了的测试文件)。我是喜欢 create-react-app 的,但[这个工具可以帮助你比较许多不错的替代方案](http://andrewhfarmer.com/starter-project/)。想在服务端进行渲染?可以了解下 [Gatsby](http://gatsbyjs.org) 或者 [Next.js](https://github.com/zeit/next.js/)。你甚至可以考虑使用在线编辑器,例如 [CodeSandbox](https://codesandbox.io)。
### 决策 2:类型检测
你可以忽略类型,也可以使用 [prop-types](https://reactjs.org/docs/typechecking-with-proptypes.html)、[Flow](https://flow.org) 或者 [TypeScript](https://www.typescriptlang.org)。需要注意的是,在 React 15.5 中,prop-types 被提取到了[单独的库](https://www.npmjs.com/package/prop-types),因此按照较老的文章进行导入会报警告(React 16 会报错)。
社区在这个话题上依然存在着分歧:

我更倾向于 prop-types,因为我发现它在 React 组件中提供了足够的类型安全性,几乎没有任何阻碍。使用 Babel、[Jest](https://facebook.github.io/jest/)、[ESLint](http://www.eslint.org) 和 prop-types 的组合,我很少看到运行时的类型问题。
### 决策 3:createClass 和 ES 类
React.createClass 是原始 API,但在 15.5 中已被弃用。有点感觉[我们将枪头指向了 ES 类](https://medium.com/dailyjs/we-jumped-the-gun-moving-react-components-to-es2015-class-syntax-2b2bb6f35cb3)。不管怎样,createClass 已经从 React 的核心中移除,并被[归类到 React 官方文档中一个名为“React without ES6”的页面](https://reactjs.org/docs/react-without-es6.html)。所以很清楚的是:ES 类是趋势。你可以使用 [react-codemod](https://github.com/reactjs/react-codemod) 轻松地从 createClass 转换为 ES 类。
### 决策 4:类和函数
你可以通过类或函数来声明 React 组件。当你需要 refs 或者生命周期方法时,类很有用。这里有[尽可能考虑使用函数的 9 个理由](https://hackernoon.com/react-stateless-functional-components-nine-wins-you-might-have-overlooked-997b0d933dbc)。但值得注意的是,[函数组件有一些缺点](https://medium.freecodecamp.org/7-reasons-to-outlaw-reacts-functional-components-ff5b5ae09b7c)。
### 决策 5:状态
使用普通的 React 组件状态足以满足大多数场景。[状态提升](https://reactjs.org/docs/lifting-state-up.html)可以很好地解决状态共享的问题。或者,你也可以使用 Redux 或 MobX:

[我是 Redux 的粉丝](https://www.pluralsight.com/courses/react-redux-react-router-es6),但我经常使用普通的 React 状态,因为它更简单。就目前来看,我们已经上线了十几个 React 应用程序,其中的两个是值得使用 Redux 的。我更喜欢多个小型的、自治的应用程序而不是单个的大型的应用程序。
如果你对不可变状态感兴趣,这里有一篇相关的文章,提到了至少有 [4 种方式来保持状态不可变](https://medium.com/@housecor/handling-state-in-react-four-immutable-approaches-to-consider-d1f5c00249d5)。
### Decision 6: 绑定
在 React 组件中,至少有[半打方式可以处理绑定](https://medium.freecodecamp.org/react-binding-patterns-5-approaches-for-handling-this-92c651b5af56)。这主要是因为现代 JS 提供了很多方法来处理绑定。你可以在构造函数中绑定,在 render 中绑定,在 render 中使用箭头函数,使用类属性或者装饰器。[这篇文章的评论](https://medium.freecodecamp.org/react-binding-patterns-5-approaches-for-handling-this-92c651b5af56)里有更多的选择!每种方式都有其优点,但假设你觉得实验性功能还不错,[我建议默认使用类属性(也叫属性初始值)](https://medium.freecodecamp.org/react-binding-patterns-5-approaches-for-handling-this-92c651b5af56)。
这个投票是从 2016 年 8 月开始的。从那时起,类属性越来越受欢迎,而 crea
gitextract_3knw1box/ ├── .github/ │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE/ │ │ ├── recommendation.md │ │ └── sign_up.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── generate-catalog.yml │ ├── stale.yml │ └── translator-application.yaml ├── .gitignore ├── AI.md ├── CODE_OF_CONDUCT.md ├── README.md ├── TODO/ │ ├── 10-best-reactjs-ui-frameworks-for-rapid-prototyping.md │ ├── 10-steps-to-better-hybrid-apps.md │ ├── 10-things-you-probably-didnt-know-about-javascript-react-and-nodejs-and-graphql-development-at-facebook.md │ ├── 101-ways-to-make-your-website-more-awesome.md │ ├── 11-things-i-learned-reading-the-flexbox-spec.md │ ├── 11-top-designers-give-11-pieces-of-realistic-ux-advice.md │ ├── 12-best-practices-for-user-account.md │ ├── 14-must-knows-for-an-ios-developer.md │ ├── 17-xcode-tips-and-tricks-that-every-ios-developer-should-know.md │ ├── 19-things-i-learnt-reading-the-nodejs-docs.md │ ├── 2018-design-trends.md │ ├── 25-core-data-in-ios10-nspersistentcontainer.md │ ├── 3-new-css-features-to-learn-in-2017.md │ ├── 39-open-source-swift-ui-libraries-for-ios-app-development.md │ ├── 3d-force-touch-beyond-peek-pop.md │ ├── 4-must-know-tips-for-building-cross-platform-electron-apps.md │ ├── 5-not-so-obvious-things-about-rxjava.md │ ├── 5-step-life-cycle-neural-network-models-keras.md │ ├── 6-practical-skills-for-ux-designers.md │ ├── 8-key-react-component-decisions.md │ ├── Android-Studio-Tips.md │ ├── Breaking-Swift-with-reference-counted-structs.md │ ├── Cocoa-Architecture-Dropped-Design-Patterns.md │ ├── Dependency-Injection-with-Dagger-2.md │ ├── Eight-Ways-Your-Android-App-Can-Leak-Memory.md │ ├── GoogleCloudFunctions/ │ │ ├── calling-cloud-functions.md │ │ ├── catlog.md │ │ ├── command-reference.md │ │ ├── deploying-cloud-functions.md │ │ ├── getting-started.md │ │ ├── quick-starts.md │ │ ├── walkthroughs.md │ │ └── writing-cloud-functions.md │ ├── How-to-hideshow-Toolbar-when-list-is-scroling.md │ ├── Introducing-Swift 3.0.md │ ├── OAuth2 Authentication with Lua.md │ ├── Of SVG, Minification and Gzip │ ├── Optimization-killers.md │ ├── OptimizationTips.rst │ ├── Overview-of-JavaScript-ES6-features-a-k-a-ECMAScript-6-and-ES2015.md │ ├── PHP-7-Virtual-machine.md │ ├── Testing-Schemes.md │ ├── Top-5-Android-libraries-every-Android-developer-should-know-about.md │ ├── Under-the-hood-ReactJS.md │ ├── Understanding-code-signing-for-iOS-apps.md │ ├── Unit-tests-with-Mockito.md │ ├── Using-Flutter-in-China.md │ ├── What-would-be-your-advice-to-a-software-engineer-who-wants-to-learn-machine-learning.md │ ├── Yarn-A-new-package-manager-for-JavaScript.md │ ├── a-5-minute-intro-to-styled-components.md │ ├── a-beginners-guide-to-making-progressive-web-apps.md │ ├── a-beginners-guide-to-website-optimization.md │ ├── a-better-underline-for-android.md │ ├── a-blurring-view-for-android.md │ ├── a-cartoon-intro-to-webassembly.md │ ├── a-case-for-using-storyboards-on-ios.md │ ├── a-crash-course-in-assembly.md │ ├── a-crash-course-in-just-in-time-jit-compilers.md │ ├── a-day-without-javascript.md │ ├── a-detailed-guide-on-developing-android-apps-using-the-clean-architecture-pattern.md │ ├── a-dramatic-tour-through-pythons-data-visualization-landscape-including-ggplot-and-altair.md │ ├── a-fairer-vue-of-react-comparing-react-to-vue-for-dynamic-tabular-data-part-2.md │ ├── a-first-walk-into-kotlin-coroutines-on-android.md │ ├── a-follow-up-on-how-to-store-tokens-securely-in-android.md │ ├── a-functional-programmers-introduction-to-javascript-composing-software.md │ ├── a-gentle-introduction-to-self-sovereign-identity.md │ ├── a-guide-to-automating-scraping-the-web-with-javascript-chrome-puppeteer-node-js.md │ ├── a-guide-to-interviewing-for-product-design-internships.md │ ├── a-guide-to-the-google-play-console.md │ ├── a-look-back-at-the-state-of-javascript-in-2017.md │ ├── a-map-to-modern-javascript-development.md │ ├── a-mindful-design-process.md │ ├── a-primer-on-android-navigation.md │ ├── a-quick-look-at-semaphores.md │ ├── a-simple-object-model.md │ ├── a-simple-web-app-in-rust-conclusion.md │ ├── a-simple-web-app-in-rust-pt-1.md │ ├── a-simple-web-app-in-rust-pt-2a.md │ ├── a-simple-web-app-in-rust-pt-2b.md │ ├── a-simple-web-app-in-rust-pt-3.md │ ├── a-simple-web-app-in-rust-pt-4-cli-option-parsing.md │ ├── a-tinder-progressive-web-app-performance-case-study.md │ ├── a-unified-styling-language.md │ ├── after-a-year-of-nodejs-in-production.md │ ├── age-of-algorithm-human-gatekeeper.md │ ├── ajax-polling-in-react-with-redux.md │ ├── ajax-polling-part-2-sagas.md │ ├── align-svg-icons-to-text-and-say-goodbye-to-font-icons.md │ ├── all-about-concurrency-in-swift-1-the-present.md │ ├── all-about-react-router-4.md │ ├── all-you-need-to-know-about-parce.md │ ├── all-you-need-to-know-to-really-understand-the-node-js-event-loop-and-its-metrics.md │ ├── altering-javascript-frames.md │ ├── an-absolute-beginners-guide-to-swift.md │ ├── an-animated-guide-to-flexbox.md │ ├── an-exhaustive-guide-to-writing-dockerfiles-for-node-js-web-apps.md │ ├── an-introduction-to-functional-reactive-programming.md │ ├── an-introduction-to-in-app-a-b-testing.md │ ├── an-introduction-to-the-usernotifications-framework.md │ ├── an-ios-devs-experience-with-react-native.md │ ├── an-ode-to-async-await.md │ ├── an-overview-of-the-logging-ecosystem-in-2017.md │ ├── an-undervalued-blockchain-market-in-china-is-good-news-for-you.md │ ├── an-update-on-es6-modules-in-node-js.md │ ├── anatomy-of-a-function-call-in-go.md │ ├── android-app-optimization-using-arraymap-and-sparsearray.md │ ├── android-basic-project-architecture-for-mvp.md │ ├── android-data-binding-recyclerview.md │ ├── android-handler-internals.md │ ├── android-o-fonts.md │ ├── android-themes-an-in-depth-guide.md │ ├── android-why-your-canvas-shapes-arent-smooth.md │ ├── angular-jwt-authentication.md │ ├── angular-jwt.md │ ├── angular-vs-react-vs-vue-a-2017-comparison.md │ ├── angular-vs-react-which-is-better-for-web-development.md │ ├── animated-intro-rxjs.md │ ├── announcing-ant-design-3-0.md │ ├── any-web-site-can-become-a-pwa-but-we-need-to-do-better.md │ ├── applying-human-centered-design-to-emerging-technologies.md │ ├── approaching-android-with-mvvm.md │ ├── are-notifications-a-dark-pattern.md │ ├── are-the-ux-articles-youre-reading-trying-to-sell-you-something.md │ ├── artificial-intelligence-in-ux-design.md │ ├── atomic-design-how-to-design-systems-of-components.md │ ├── attract-millions-developers-product.md │ ├── audio-focus-1.md │ ├── audio-focus-2.md │ ├── audio-focus-3.md │ ├── auto-sizing-columns-css-grid-auto-fill-vs-auto-fit.md │ ├── automate-cicd-visual-app-center.md │ ├── automated-npm-releases-with-travis-ci.md │ ├── avoiding-accidental-complexity-when-structuring-your-app-state.md │ ├── avoiding-force-unwrapping-in-swift-unit-tests.md │ ├── avoiding-objc-in-swift.md │ ├── backend-api-documentation-in-swift.md │ ├── backwards-compatibility-with-ios-10-today-widgets.md │ ├── before-you-bury-yourself-in-packages-learn-the-node-js-runtime-itself.md │ ├── benchmarks-for-the-top-server-side-swift-frameworks-vs-node-js.md │ ├── best-practices-for-search-results.md │ ├── best-practices-in-designing-graphql-apis.md │ ├── better-form-design-one-thing-per-page.md │ ├── better-javascript-with-es6-pt-ii-a-deep-dive-into-classes.md │ ├── better-javascript-with-es6-pt-iii-cool-collections-slicker-strings.md │ ├── better-node-with-es6-pt-i.md │ ├── beyond-browser-web-desktop-apps.md │ ├── binary-ast-newsletter-1.md │ ├── bootstrap-considered-harmful.md │ ├── boring-design-systems.md │ ├── breaking-wpa2-by-forcubg-nonce-reuse.md │ ├── breakpoints-debugging-like-pro.md │ ├── bridging-existentials-generics-swift-2.md │ ├── bringing-Pokemon-GO-to-life-on-Google-Cloud.md │ ├── bubble-sheet-multiple-choice-scanner-and-test-grader-using-omr-python-and-opencv.md │ ├── build-a-journaling-app-with-meteor-1-3-beta-react-react-bootstrap-and-mantra.md │ ├── build-tic-tac-toe-with-ai-using-swift.md │ ├── building-a-kotlin-project-2.md │ ├── building-a-kotlin-project.md │ ├── building-a-mobile-app-with-cordova-vuejs.md │ ├── building-a-shop-with-sub-second-page-loads-lessons-learned.md │ ├── building-a-virtual-world-worthy-of-sci-fi.md │ ├── building-account-systems.md │ ├── building-an-api-gateway-using-nodejs.md │ ├── building-android-apps-30-things-that-experience-made-me-learn-the-hard-way.md │ ├── building-ar-game-arkit-spritekit.md │ ├── building-for-the-future-of-tv-with-android.md │ ├── building-interfaces-with-constraintlayout.md │ ├── building-ios-apps-with-xamarin-and-visual-studio.md │ ├── building-modern-web-applications-in-2017.md │ ├── building-our-personal-deep-learning-rig-gtx-1080-ubuntu-16-04-cuda-8-0rc-cudnn-7-tensorflowmxnetcaffedarknet.md │ ├── building-react-components-for-multiple-brands-and-applications.md │ ├── building-the-web-of-things.md │ ├── building-trello-layout-css-grid-flexbox.md │ ├── buttons-in-design-systems.md │ ├── bye-bye-burger.md │ ├── can-email-be-responsive.md │ ├── check-in-frequency-and-codebase-impact-the-surprising-correlation.md │ ├── choosing-a-front-end-framework-angular-ember-react.md │ ├── choosing-right-markdown-parser.md │ ├── chrome-devtools-performance-monitor.md │ ├── chrome-devtools.md │ ├── clean-java-immutability.md │ ├── closure-capture-1.md │ ├── code-comments-the-good-the-bad-and-the-ugly.md │ ├── code-smells-in-css-revisited.md │ ├── code-splitting-with-parcel-web-app-bundler.md │ ├── collaborative-map-reduce-in-the-browser.md │ ├── comparing-the-performance-between-native-ios-swift-and-react-native.md │ ├── compile-time-vs-runtime-type-checking-swift.md │ ├── complexion-reduction-a-new-trend-in-mobile-design.md │ ├── composable-datatypes-with-functions.md │ ├── comprehensive-guide-web-design.md │ ├── comprehensive-webfonts.md │ ├── computed-properties-javascript-dependency-tracking.md │ ├── concurrent-programming.md │ ├── conditions-for-css-variables.md │ ├── confusion-subject-observable-observer-android-rxjava2-hell-part8.md │ ├── constraint-layout-animations-dynamic-constraints-ui-java-hell.md │ ├── constraint-layout-concepts-hell-tips-tricks-part-2.md │ ├── constraint-layout-hell.md │ ├── constraint-layout-visual-design-editor-hell.md │ ├── contextual-chat-bots-with-tensorflow.md │ ├── continuation-observable-marriage-proposal-observer-dialogue-rx-observable-developer-android-rxjava2-hell-part7.md │ ├── continuation-summer-vs-winter-observable-dialogue-rx-observable-developer-android-rxjava2-hell-part6.md │ ├── contributing-hugh-lib.md │ ├── convert-time-series-supervised-learning-problem-python.md │ ├── convincing-the-kotlin-compiler-that-code-is-safe.md │ ├── core-plot-tutorial-getting-started.md │ ├── courseras-journey-to-graphql.md │ ├── crafting-better-code-reviews.md │ ├── crafting-high-performance-tv-user.md │ ├── create-effective-push-notifications.md │ ├── create-react-app.md │ ├── create-simple-blockchain-java-tutorial-from-scratch.md │ ├── create-your-first-ethereum-dapp-with-web3-and-vue-js-part-2.md │ ├── create-your-first-ethereum-dapp-with-web3-and-vue-js-part-3.md │ ├── create-your-first-ethereum-dapp-with-web3-and-vue-js.md │ ├── creating-accessible-react-apps.md │ ├── creating-an-html5-game-bot-using-python.md │ ├── creating-and-working-with-webassembly-modules.md │ ├── creating-highly-modular-android-apps.md │ ├── creating-usability-with-motion-the-ux-in-motion-manifesto.md │ ├── creating-your-first-blockchain-with-java-part-2-transactions.md │ ├── creating-your-first-desktop.md │ ├── csrf-is-dead.md │ ├── css-architecture.md │ ├── css-grid-supporting-browsers-without-grid.md │ ├── css-hex-colors-demystified.md │ ├── css-in-javascript-the-future-of-component-based-styling.md │ ├── css-inheritance-cascade-global-scope-new-old-worst-best-friends.md │ ├── css-is-fine-its-just-really-hard.md │ ├── css-naming-conventions-that-will-save-you-hours-of-debugging.md │ ├── css-writing-mode.md │ ├── csv-injection.md │ ├── dark-side-of-ui-benefits-of-dark-background.md │ ├── data-analytics-with-python-by-web-scraping-illustration-with-cia-world-factbook.md │ ├── data-flow-in-vue-and-vuex.md │ ├── dealing-with-complex-table-views-in-ios-and-keeping-your-sanity.md │ ├── dealing-with-imbalanced-data-undersampling-oversampling-and-proper-cross-validation.md │ ├── debugging-nodejs-in-chrome-devtools.md │ ├── debugging-swift-code-with-lldb.md │ ├── debugging-tips-tricks.md │ ├── declarative-api-design-in-swift.md │ ├── deconstructing-the-poor-design-of-a-well-intentioned-microinteraction.md │ ├── deep-learning-1-setting-up-aws-image-recognition.md │ ├── deep-learning-2-convolutional-neural-networks.md │ ├── deep-learning-3-more-on-cnns-handling-overfitting.md │ ├── deep-learning-4-embedding-layers.md │ ├── design-at-1x-its-a-fact.md │ ├── design-better-data-tables.md │ ├── design-doesnt-scale.md │ ├── design-for-internationalization.md │ ├── design-is-mainly-about-empathy.md │ ├── design-like-a-developer.md │ ├── design-principle-aesthetics.md │ ├── design-principle-consistency.md │ ├── design-principles-behind-great-products.md │ ├── design-principles-what-to-do-when-nobody-is-using-your-feature.md │ ├── design-thinking-not-just-another-buzzword.md │ ├── design-words-with-data.md │ ├── design-your-app-for-decision-making.md │ ├── designers-problem.md │ ├── designers-should-write.md │ ├── designing-a-product-youre-not-going-to-use.md │ ├── designing-anticipated-user-experiences.md │ ├── designing-better-tables-for-enterprise-applications.md │ ├── designing-design-system-for-complex-products.md │ ├── designing-html-apis.md │ ├── designing-in-app-survey.md │ ├── designing-the-icons-for-flinto-s-ui.md │ ├── designing-the-new-uber-app.md │ ├── designing-websites-for-iphone-x.md │ ├── detect-bots-apache-nginx-logs.md │ ├── detecting-incoming-phone-calls-in-android.md │ ├── detecting-low-power-mode.md │ ├── develop-your-first-application-with-flutter.md │ ├── developers-are-users-too-introduction.md │ ├── developers-are-users-too-part-1.md │ ├── developers-are-users-too-part-2.md │ ├── developing-games-with-react-redux-and-svg-part-1.md │ ├── developing-small-javascript-components-without-frameworks.md │ ├── dialogue-rx-observable-developer-android-rxjava2-hell-part5.md │ ├── disassembling-javascripts-iife-syntax.md │ ├── distributed-logging-architecture-in-the-container-era.md │ ├── distributing-react-components.md │ ├── dont-fear-the-rebase.md │ ├── dont-use-automatic-image-sliders-or-carousels.md │ ├── dos-and-don-ts-of-web-design.md │ ├── double-stuffed-security-in-android-oreo.md │ ├── dragging-react-performance-forward.md │ ├── dropouts-need-not-apply-silicon-valley-asks-mostly-for-developers-with-degrees.md │ ├── effective-environment-switching-in-ios.md │ ├── effective-java-for-android-cheatsheet.md │ ├── effective-okhttp.md │ ├── efficient-iOS-version-checking.md │ ├── elasticsearch-rolling-upgrades.md │ ├── embedding-lua-in-the-web.md │ ├── embracing-java-8-language-features.md │ ├── empathy-and-ux-design.md │ ├── empty-state-mobile-app-nice-to-have-essential.md │ ├── enabling-proguard-in-an-android-instant-app.md │ ├── enhancing-css-layout-floats-flexbox-grid.md │ ├── error-handling-in-rxjava.md │ ├── es6-modules-support-lands-in-browsers-is-it-time-to-rethink-bundling.md │ ├── es6-private-members.md │ ├── es6.md │ ├── es8-was-released-and-here-are-its-main-new-features.md │ ├── eslint-migrating-to-4.0.0.md │ ├── essential-guide-for-designing-your-android-app-architecture-mvp-part-2.md │ ├── essential-guide-for-designing-your-android-app-architecture-mvp-part-3.md │ ├── essential-guide-for-designing-your-android-app-architecture-mvp-part.md │ ├── even-fibonacci-numbers-python-vs-javascript.md │ ├── everyone-is-a-designer-get-over-it.md │ ├── everything-you-need-to-know-about-css-variables.md │ ├── evolving-the-facebook-news-feed-to-serve-you-better.md │ ├── explain-activity-launch-mode-with-examples.md │ ├── exploring-es7-decorators.md │ ├── exploring-firebase-on-android-ios-analytics.md │ ├── exploring-firebase-on-android-ios-remote-config.md │ ├── exploring-kotlins-hidden-costs-part-1.md │ ├── exploring-kotlins-hidden-costs-part-2.md │ ├── exploring-kotlins-hidden-costs-part-3.md │ ├── exploring-the-product.md │ ├── express-js-and-aws-lambda-a-serverless-love-story.md │ ├── facebook-content-placeholder-deconstruction.md │ ├── facebook-open-sources-detectron.md │ ├── familiarity-bias-is-holding-you-back-its-time-to-embrace-arrow-functions.md │ ├── fast-properties-in-v8.md │ ├── faster-more-reliable-ci-builds-with-yarn.md │ ├── faster-photos-in-facebook-for-ios.md │ ├── finally-understanding-how-references-work-in-android-and-java.md │ ├── fingerprinting-and-audio-recognition-with-python.md │ ├── five-things-you-can-do-with-yarn.md │ ├── five-tips-for-working-with-redux-in-large-applications.md │ ├── five-tips-to-improve-your-games-as-a-service-monetization.md │ ├── flat-ui-less-attention-cause-uncertainty.md │ ├── flatbuffers-in-android-introdution.md │ ├── floating-action-button-in-ux-design.md │ ├── floating-label-no-js-pure-css.md │ ├── flutter-5-reasons-why-you-may-love-it.md │ ├── flutter-for-javascript-developers.md │ ├── flying-solo-with-android-development.md │ ├── force-with-lease.md │ ├── form-design-for-complex-applications.md │ ├── forms-need-validation.md │ ├── freemium-conversion-rate/ │ │ └── freemium-conversion-rate.md │ ├── from-a-react-point-of-vue-comparing-reactjs-to-vuejs-for-dynamic-tabular-data.md │ ├── from-app-explorer-to-first-time-buyer.md │ ├── from-automatons-to-deep-learning.md │ ├── from-form-to-function-our-thoughts-on-design-are-changing.md │ ├── from-functional-java-to-functioning-kotlin.md │ ├── from-product-design-to-virtual-reality.md │ ├── front-end-developers-guide-graphql.md │ ├── front-end-performance-checklist-2018-1.md │ ├── front-end-performance-checklist-2018-2.md │ ├── front-end-performance-checklist-2018-3.md │ ├── front-end-performance-checklist-2018-4.md │ ├── frontend-in-2017-the-important-parts.md │ ├── function-as-child-components.md │ ├── function-caller-considered-harmful.md │ ├── function-naming-in-swift-3.md │ ├── functional-interfaces-functional-programming-and-lambda-expressions-reactive-programming-android-rxjava2-what-the-hell-is-this-part3.md │ ├── functional-mixins-composing-software.md │ ├── functional-programming-for-android-developers-part-1.md │ ├── functional-programming-for-android-developers-part-2.md │ ├── functional-programming-for-android-developers-part-3.md │ ├── functional-programming-in-javascript-is-an-antipattern.md │ ├── functional-setstate-is-the-future-of-react.md │ ├── functors-categories.md │ ├── future-front-end-web-development.md │ ├── gang-of-four-patterns-in-kotlin.md │ ├── generative-research-ux.md │ ├── generic-data-sources-in-swift.md │ ├── gentle-introduction-to-functional-javascript-intro.md │ ├── genuine-guide-to-testing-react-redux-applications.md │ ├── geolocation-using-multiple-services.md │ ├── get-ready-a-new-v8-is-coming-node-js-performance-is-changing.md │ ├── get-started-tensorflow.md │ ├── getting-started-with-elasticsearch.md │ ├── getting-started-with-jrebel-for-android.md │ ├── getting-started-with-retrofit.md │ ├── getting-the-login-page-right.md │ ├── getting-to-swift-3-at-airbnb.md │ ├── go-function-calls-redux.md │ ├── golden-guidelines-for-writing-clean-css.md │ ├── good-swift-bad-swift-part-1.md │ ├── good-swift-bad-swift-part-2.md │ ├── google-design.md │ ├── google.interview.university.md │ ├── graphql-vs-rest.md │ ├── growing-popularity-atomic-css.md │ ├── guide-to-interviewing-for-product-design-internships.md │ ├── guide-to-ux-sketching.md │ ├── handling-scrolls-with-coordinatorlayout.md │ ├── handmade-svg-bar-chart-featuring-svg-positioning-gotchas.md │ ├── high-level-reactivity.md │ ├── higher-order-functions-composing-software.md │ ├── hot-vs-cold-observables.md │ ├── how-a-template-engine-works.md │ ├── how-apple.md │ ├── how-can-i-use-css-in-js-securely.md │ ├── how-chat-bots-work.md │ ├── how-color-affects-ux-and-behavior.md │ ├── how-do-promises-work.md │ ├── how-does-redux-work.md │ ├── how-google-builds-a-web-framework.md │ ├── how-i-built-a-web-server-using-go-and-on-chromeos.md │ ├── how-i-do-developer-ux-at-google.md │ ├── how-i-learned-to-love-parallelized-applies-with-python-pandas-dask-and-numba │ ├── how-i-used-stack-overflow-github-to-get-dream-job-before-19-without-degree.md │ ├── how-ios-apps-on-the-mac-could-work.md │ ├── how-javascript-works-deep-dive-into-websockets-and-http-2-with-sse-how-to-pick-the-right-path.md │ ├── how-javascript-works-event-loop-and-the-rise-of-async-programming-5-ways-to-better-coding-with.md │ ├── how-javascript-works-inside-the-v8-engine-5-tips-on-how-to-write-optimized-code.md │ ├── how-javascript-works-memory-management-how-to-handle-4-common-memory-leaks.md │ ├── how-javascript-works-the-building-blocks-of-web-workers-5-cases-when-you-should-use-them.md │ ├── how-modern-web-browsers-accelerate-performance-the-networking-layer.md │ ├── how-not-to-crash-1.md │ ├── how-protocol-oriented-programming-in-swift-saved-my-day.md │ ├── how-should-i-separate-components.md │ ├── how-switching-our-domain-structure-unlocked-international-growth.md │ ├── how-the-heck-does-async-await-work-in-python-3-5.md │ ├── how-to-achieve-reusability-with-react-components.md │ ├── how-to-be-a-compiler-make-a-compiler-with-javascript.md │ ├── how-to-become-an-ios-developer-bob.md │ ├── how-to-build-a-material-design-prototype-using-sketch-and-pixate-part-three.md │ ├── how-to-build-a-material-design-prototype-using-sketch-and-pixate-part-two.md │ ├── how-to-build-a-news-website-layout-with-flexbox.md │ ├── how-to-build-a-reactive-engine-in-javascript-part-1-observable-objects.md │ ├── how-to-build-a-spritekit-game-in-swift-3-part-1.md │ ├── how-to-build-a-spritekit-game-in-swift-3-part-2.md │ ├── how-to-build-a-spritekit-game-in-swift-3-part-3.md │ ├── how-to-build-and-publish-es6-modules-today-with-babel-and-rollup.md │ ├── how-to-build-mobile-games-with-people-in-mind.md │ ├── how-to-cancel-your-promise.md │ ├── how-to-communicate-hidden-gestures-in-mobile-app.md │ ├── how-to-configure-nginx-for-a-flask-web-application.md │ ├── how-to-craft-mobile-notifications-that-users-actually-want.md │ ├── how-to-create-a-bubble-selection-animation-on-android.md │ ├── how-to-create-a-front-end-framework-with-sketch.md │ ├── how-to-debug-front-end-console.md │ ├── how-to-design-notifications-for-better-ux.md │ ├── how-to-design-words.md │ ├── how-to-disable-links.md │ ├── how-to-do-proper-tree-shaking-in-webpack-2.md │ ├── how-to-generate-haptic-feedback-with-uifeedbackgenerator.md │ ├── how-to-get-the-most-out-of-the-javascript-console.md │ ├── how-to-go-from-hobbyist-to-professional-developer.md │ ├── how-to-handle-imbalanced-classes-in-machine-learning.md │ ├── how-to-implement-expandable-menu-on-ios-like-in-airbnb.md │ ├── how-to-improve-quality-and-syntax-of-your-android-code.md │ ├── how-to-javascript-in-2018.md │ ├── how-to-leak-memory-with-subscriptions-in-rxjava.md │ ├── how-to-make-a-chart-using-ajax-rest-apis.md │ ├── how-to-make-your-not-so-great-visual-design-better.md │ ├── how-to-make-your-react-app-fully-functional-fully-reactive-and-able-to-handle-all-those-crazy.md │ ├── how-to-make-your-react-native-app-respond-gracefully-when-the-keyboard-pops-up.md │ ├── how-to-pretend-youre-a-great-designer.md │ ├── how-to-set-up-a-continuous-integration-server-for-android-development-ubuntu-jenkins-sonarqube.md │ ├── how-to-start-with-backend-typescript-and-use-its-full-potential.md │ ├── how-to-stop-online-harassment.md │ ├── how-to-test-a-singleton-in-an-android-service-2.md │ ├── how-to-test-a-singleton-in-an-android-service-one.md │ ├── how-to-use-a-model-view-viewmodel-architecture-for-ios.md │ ├── how-to-use-colors-in-ui-design.md │ ├── how-to-use-generators.md │ ├── how-to-write-a-javascript-package-for-both-node-and-the-browser.md │ ├── how-to-write-a-perfect-error-message.md │ ├── how-to-write-dockerfiles-for-python-web-apps.md │ ├── how-to-write-high-performance-code-in-golang-using-go-routines.md │ ├── how-to-write-low-garbage-real-time-javascript.md │ ├── how-vr-is-changing-ux-from-prototyping-to-device-design.md │ ├── how-we-created-bubblepicker-a-colourful-animation-for-android.md │ ├── how-we-css-at-bigcommerce.md │ ├── how-we-use-bem-to-modularise-our-css.md │ ├── how-writing-custom-babel-and-eslint-plugins-can-increase-your-productivity-and-improve-user.md │ ├── how-you-can-decrease-application-size-by-60-in-only-5-minutes.md │ ├── how_to_draw.md │ ├── http2-for-web-developers.md │ ├── https-medium-com-alexstyl-animating-the-toolbar.md │ ├── i-interviewed-at-five-top-companies-in-silicon-valley-in-five-days-and-luckily-got-five-job-offers.md │ ├── i-m-a-web-developer-and-i-ve-been-stuck-with-the-simplest-app-for-the-last-10-days.md │ ├── ibeacon-in-swift.md │ ├── ibm-is-becoming-the-worlds-largest-design-company.md │ ├── if-i-have-one-month-to-learn-ios-how-would-i-spend-it.md │ ├── im-not-a-ux-designer-and-neither-are-you.md │ ├── image-upload-manipulation-react.md │ ├── immutable-models-and-data-consistency-our-ios-app.md │ ├── implementation-of-convolutional-neural-network-using-python-and-keras.md │ ├── implementing-delegates-in-swift-step-by-step.md │ ├── improve-web-typography-css-font-size-adjust.md │ ├── improving-perceived-performance-with-multiple-background-images.md │ ├── improving-performance-with-background-data-prefetching.md │ ├── improving-swift-compile-times.md │ ├── increasing-attacker-cost-using-immutable-infrastructure.md │ ├── incrementally-migrate-from-sqlite-to-room.md │ ├── ink-transition-effect.md │ ├── intro-to-swift-functional-programming-with-bob.md │ ├── introducing-design-systems-ops.md │ ├── introducing-pokedex-org/ │ │ └── introducing-pokedex-org.md │ ├── introducing-redux-recompose.md │ ├── introducing-turbo-5x-faster-than-yarn-npm-and-runs-natively-in-browser.md │ ├── introduction-nginscript.md │ ├── introduction-to-node-express.md │ ├── introduction-to-protocol-oriented-programming-in-swift.md │ ├── intuitive-design-vs-shareable-design.md │ ├── ios-11-machine-learning-for-everyone.md │ ├── ios-11-notable-uikit-additions.md │ ├── ios-9-tutorial-series-protocol-oriented-programming-with-uikit.md │ ├── ios-custom-modality.md │ ├── is-this-my-interface-or-yours.md │ ├── is-this-the-perfect-save-icon.md │ ├── is-vanilla-javascript-worth-learning-absolutely.md │ ├── its-not-dark-magic-pulling-back-the-curtains-from-your-stylesheets.md │ ├── jQuery-Tips-Everyone-Should-Know.md │ ├── java-8-in-android-n-preview.md │ ├── javascript-debugging-tips.md │ ├── javascript-developer-survey-results.md │ ├── javascript-es6-var-let-or-const.md │ ├── javascript-factory-functions-with-es6.md │ ├── javascript-firefox-debugger.md │ ├── javascript-monads-made-simple.md │ ├── javascript-package-managers.md │ ├── javascript-start-up-performance.md │ ├── javascript-testing-unit-functional-integration.md │ ├── javascript-what-the-heck-is-a-callback.md │ ├── jquery-3-0-final-released.md │ ├── js-things-i-never-knew-existed.md │ ├── json-javascript-object-notation.md │ ├── keep-webpack-fast-a-field-guide-for-better-build-performance.md │ ├── kerning.md │ ├── kotlin-its-the-little-things.md │ ├── lazy-loading-images-dont-rely-on-javascript.md │ ├── learn-blockchains-by-building-one.md │ ├── learn-css-flexbox-in-3-minutes.md │ ├── learning-how-to-set-up-automated-cross-browser-javascript-unit-testing.md │ ├── learning-javascript-9-common-mistakes.md │ ├── learning-react-js-is-easier-than-you-think.md │ ├── lecture-1-what-is-product-design.md │ ├── less-coding-guidelines.md │ ├── lets-make-your-svg-symbol-icons-multi-colored-with-css-variables.md │ ├── leveling-up-your-javascript.md │ ├── life-after-js-learning-2nd-language.md │ ├── life-without-interface-builder.md │ ├── little-big-details-for-your-mobile-app.md │ ├── lost-in-translation-the-importance-of-visual-design-localisation.md │ ├── love-letter-css.md │ ├── macOS-Security-and-Privacy-Guide.md │ ├── machine-learning-for-android-developers-with-the-mobile-vision-api-part-1-face-detection.md │ ├── make-memory-management-great-again.md │ ├── make-node-js-core-bigger.md │ ├── make-or-break-with-gradle.md │ ├── make-react-fast-again-tools-and-techniques-for-speeding-up-your-react-app.md │ ├── making-magic-with-websockets-and-css3.md │ ├── making-photos-smaller.md │ ├── making-react-native-apps-accessible.md │ ├── making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit.md │ ├── making-svg-icon-libraries-for-react-apps │ ├── making-the-most-of-the-apk-analyzer.md │ ├── making-the-web-more-accessible-with-ai.md │ ├── managing-css-js-http-2.md │ ├── managing-resources-for-large-scale-testing.md │ ├── mastering-swift-essential-details-about-strings.md │ ├── material-design-prototype-tutorial-part-1.md │ ├── media-query-units.md │ ├── meet-michelangelo-ubers-mechine-learning-plantform.md │ ├── meet-the-new-dialog-element.md │ ├── messaging-sync-scaling-mobile-messaging-at-airbnb.md │ ├── metaprogramming-in-es6-part-2-reflect.md │ ├── metaprogramming-in-es6-part-3-proxies.md │ ├── metaprogramming-in-es6-symbols.md │ ├── migrating-an-android-project-to-kotlin.md │ ├── migrating-mediastyle-notifications-to-support-android-o.md │ ├── million-requests-per-second-with-python.md │ ├── mobile-design-best-practices.md │ ├── mobile-friendly.md │ ├── mobile-small-portrait-slow-interlace-monochrome-coarse-non-hover-first.md │ ├── mocking-is-a-code-smell.md │ ├── modelling-state-in-swift.md │ ├── modern-javascript-for-ancient-web-developers.md │ ├── modernization-reactivity.md │ ├── modules-vs-microservices.md │ ├── mosby3-mvi-3.md │ ├── mosby3-mvi-4.md │ ├── mosby3-mvi-5.md │ ├── mosby3-mvi-6.md │ ├── mosby3-mvi.md │ ├── motion-in-ux-design-9-points-to-get-started.md │ ├── moving-a-large-and-old-codebase-to-python3.md │ ├── moving-existing-api-from-rest-to-graphql.md │ ├── multithreading-with-rxjava-dadddc.md │ ├── must-see-javascript-dev-tools-that-put-other-dev-tools-to-shame.md │ ├── mvvm-with-flow-controller-first-step.md │ ├── mvvmc-with-swift.md │ ├── my-least-favorite-thing-about-swift.md │ ├── mysql-migration.md │ ├── native-modules-for-react-native-android.md │ ├── natural-language-processing-made-easy-using-spacy-in-python.md │ ├── neo-project-docs-consensus.md │ ├── nested-ternaries-are-great.md │ ├── neural-networks-from-scratch-in-r.md │ ├── new-android-injector-with-dagger-2-part-1.md │ ├── new-android-injector-with-dagger-2-part-2.md │ ├── new-android-injector-with-dagger-2-part-3.md │ ├── new-in-python-3.7.md │ ├── next-generation-3d-graphics-on-the-web.md │ ├── no-excuses-it-takes-5-mins-make-that-drawer-visible-under-your-status-bar-2.md │ ├── node-hero-node-js-authentication-passport-js.md │ ├── node-js-child-processes-everything-you-need-to-know.md │ ├── node-js-development-tips-2018.md │ ├── node-js-native-modules-with-rust.md │ ├── node-js-streams-everything-you-need-to-know.md │ ├── node-js-war-stories-solving-issues-in-production.md │ ├── nodejs-best-practices-how-to-become-a-better-developer-in-2018.md │ ├── nodejs-vs-python-where-to-use-and-where-not.md │ ├── nothing-will-change-until-you-start-building.md │ ├── notifications-in-android-n.md │ ├── nsfetchedresultscontroller-woes.md │ ├── o-h-yeah-what-we-look-forward-to-in-android-o.md │ ├── object-detection-with-yolo.md │ ├── of-svg-minification-and-gzip.md │ ├── offline-friendly-forms.md │ ├── offline-support-try-again-later-no-more.md │ ├── on-loser-experience-design.md │ ├── on-performant-arrays-in-swift.md │ ├── on-strategies-to-apply-kotlin-to-existing-java-code.md │ ├── on-writing-less-damn-code.md │ ├── online-migrations.md │ ├── open-sourcing-a-10x-reduction-in-apache-cassandra-tail-latency.md │ ├── optimize-battery-life-with-androids-gcm-network-manager.md │ ├── optimizing-layouts-in-android-reducing-overdraw.md │ ├── our-best-practices-for-writing-react-components.md │ ├── out-of-the-dropshadows.md │ ├── outside-in-development-with-double-loop-tdd.md │ ├── outsmarting-subscription-challenges.md │ ├── package-manager-fetch.md │ ├── performance-metrics-whats-this-all-about.md │ ├── performance-optimisations-for-react-applications.md │ ├── performance-tuning-a-react-application.md │ ├── permissions-part-1.md │ ├── permissions-part-2.md │ ├── php-7-hhvm-benchmarks.md │ ├── playing-with-paths.md │ ├── popovers-on-popovers.md │ ├── post-a-boarding-pass-on-facebook-get-your-account-stolen.md │ ├── postcss-what-it-is-and-what-it-can-do.md │ ├── postgres-atomicity.md │ ├── postgres-full-text-search-with-django.md │ ├── powering-php-with-janusgraph.md │ ├── practical-guide-sql-isolation.md │ ├── practical-redux-part-0-introduction.md │ ├── practical-redux-part-1-redux-orm-basics.md │ ├── practical-redux-part-2-redux-orm-concepts-and-techniques.md │ ├── practical-svg.md │ ├── predicting-your-apps-monetization-future.md │ ├── preload-prefetch-and-priorities-in-chrome.md │ ├── preparing-ios-app-for-extensions.md │ ├── private-variables-in-javascript.md │ ├── product-listing-information.md │ ├── programmers-confess-unethical-illegal-tasks-asked-of-them.md │ ├── progressive-web-amps.md │ ├── progressive-web-apps-with-react-js-part-2-page-load-performance.md │ ├── progressive-web-apps-with-react-js-part-3-offline-support-and-network-resilience.md │ ├── progressive-web-apps-with-react-js-part-4-site-is-progressively-enhanced.md │ ├── progressive-web-apps-with-react-js-part-i-introduction.md │ ├── project-need-react.md │ ├── projects-need-react.md │ ├── promising-promise-tips.md │ ├── proof-of-work-vs-proof-of-stake.md │ ├── protocol-oriented-programming-view-in-swift-3.md │ ├── protocol-oriented-programming.md │ ├── pull-vs-push-imperative-vs-reactive-reactive-programming-android-rxjava2-hell-part2.md │ ├── pury-new-way-to-profile-your-android-application.md │ ├── push-for-a-point-of-view.md │ ├── pyqt-versus-wxpython.md │ ├── python-3-an-intro-to-encryption.md │ ├── python-dynamic-attributes.md │ ├── python-introspection-with-the-inspect-module.md │ ├── python-is-the-perfect-tool-for-any-problem.md │ ├── python-pandas-databases.md │ ├── quantum-up-close-what-is-a-browser-engine.md │ ├── quickly-process-api-requests-with-shoryuken-and-sqs.md │ ├── rate-limiters.md │ ├── react-16-features-and-fiber-explanation.md │ ├── react-aha-moments.md │ ├── react-at-light-speed.md │ ├── react-is-slow-react-is-fast.md │ ├── react-native-android-app-memory-investigation.md │ ├── react-native-at-walmartlabs.md │ ├── react-native-push-notifications-with-onesignal.md │ ├── react-newbies-tutorial.md │ ├── react-redux-optimization.md │ ├── reactive-generic-segue-with-rxswift.md │ ├── reactive-programming-android-rxjava2-hell-part1.md │ ├── reactiveswift-manage-your-memory.md │ ├── reacts-jsx-vs-vue-s-templates-a-showdown-on-the-front-end.md │ ├── real-world-flux-ios.md │ ├── rearchitecting-airbnbs-frontend.md │ ├── rebuilding-slack-com.md │ ├── recent-web-performance-fixes-on-airbnb-listing-pages.md │ ├── recurrent-neural-network-rnn-part-4-attentional-interfaces.md │ ├── recurrent-neural-network-rnn-part-5-custom-cells.md │ ├── recurrent-neural-networks-rnn-part-1-basic-rnn-char-rnn.md │ ├── recurrent-neural-networks-rnn-part-2-text-classification.md │ ├── recurrent-neural-networks-rnn-part-3-encoder-decoder.md │ ├── recyclerview-prefetch.md │ ├── reduce-composing-software.md │ ├── reducers-vs-transducers.md │ ├── reducing-cognitive-overload-for-a-better-user-experience.md │ ├── reducing-jpg-file-size.md │ ├── redux-4-ways.md │ ├── refactoring-not-on-the-backlog.md │ ├── refactoring-singletons-in-swift.md │ ├── reflections-on-eslints-success.md │ ├── regarding-swift-build-time-optimizations.md │ ├── requiring-modules-in-node-js-everything-you-need-to-know.md │ ├── rest-2-0-graphql.md │ ├── rest-apis-are-rest-in-peace-apis-long-live-graphql.md │ ├── retrofit-getting-started.md │ ├── rewriting-rxjava-with-kotlin-coroutines.md │ ├── rice-simple-prioritization-for-product-managers.md │ ├── right-click-logo-show-logo-download-options.md │ ├── rollup-interview.md │ ├── rom-simple-to-unusual-a-look-at-navigation-in-web-design.md │ ├── rss-responsive-design.md │ ├── rxandroid-tutorial.md │ ├── rxjava-production-line.md │ ├── rxjava-vs-kotlin-coroutines-quick-look.md │ ├── rxjs-observables-observers-operators.md │ ├── rxswift-at-first-sight.md │ ├── scaling-node-js-applications.md │ ├── schedule-tasks-and-jobs-intelligently-in-android.md │ ├── scrolling-behavior-for-appbars-in-android.md │ ├── seamless-ways-to-upgrade-angular-1-x-to-angular-2.md │ ├── secure-web-app-http-headers.md │ ├── securing-cookies-in-go.md │ ├── securing-your-express-app.md │ ├── server-side-react-rendering.md │ ├── server-side-web-components-how-and-why.md │ ├── service-workers-the-little-heroes-behind-progressive-web-apps.md │ ├── setstate-gate-abc.md │ ├── setting-up-prototypes-in-v8.md │ ├── sharing-files-though-intents-are-you-ready-for-nougat.md │ ├── shaving-our-image-size.md │ ├── shrinking-apks-growing-installs.md │ ├── simplify-your-life-with-an-ssh-config-file.md │ ├── six-of-the-most-exciting-es6-features-in-node-js-v6-lts.md │ ├── sketch-mastering.md │ ├── slack-s-2-8-billion-dollar-secret-sauce.md │ ├── sloped-edges-with-consistent-angle-in-css.md │ ├── smooth-css-animations.md │ ├── so-whats-this-graphql-thing-i-keep-hearing-about.md │ ├── so-you-want-to-be-a-functional-programmer-part-1.md │ ├── so-you-want-to-be-a-functional-programmer-part-2.md │ ├── so-you-want-to-be-a-functional-programmer-part-3.md │ ├── so-you-want-to-be-a-functional-programmer-part-4.md │ ├── so-you-want-to-be-a-functional-programmer-part-5.md │ ├── so-you-want-to-be-a-functional-programmer-part-6.md │ ├── so-you-want-to-learn-react-js.md │ ├── software-testing-big-picture.md │ ├── solid-principles-the-definitive-guide.md │ ├── spotifys-discover-weekly-how-machine-learning-finds-your-new-music.md │ ├── sprite-animation.md │ ├── sql-tutorial-how-to-write-better-queries.md │ ├── standard-package-layout.md │ ├── start-your-open-source-career.md │ ├── state-containers-in-swift.md │ ├── state-of-vue-report-2017.md │ ├── statements-messages-reducers.md │ ├── steve-jobs-in-1994-the-rolling-stone-interview-20110117.md │ ├── stop-designing-interfaces-start-designing-experiences.md │ ├── stop-foxtrots-now.md │ ├── story-thought-and-system-thought.md │ ├── streams-ftw.md │ ├── surprising-polymorphism-in-react-applications.md │ ├── svg-vs-gif.md │ ├── swift-3-0-release-process.md │ ├── swift-3-migration-pitfalls.md │ ├── swift-4-0-released.md │ ├── swift-algorithm-club-swift-binary-search-tree-data-structure.md │ ├── swift-arrays-holding-elements-weak-references.md │ ├── swift-initialization-with-closures.md │ ├── swift-keywords.md │ ├── swift-lazy-initialization-with-closures.md │ ├── swift-retention-cycle-in-closures-and-delegate.md │ ├── swift-struct-references.md │ ├── swift-testability.md │ ├── swift-value-types-reference-types.md │ ├── switching-site-https-shoestring-budget.md │ ├── talk-the-state-of-the-web.md │ ├── taming-great-complexity-mvvm-coordinators-and-rxswift.md │ ├── tdd-quick-nimble.md │ ├── tensorflow-in-a-nutshell-part-one-basics.md │ ├── tensorflow-in-a-nutshell-part-three-all-the-models.md │ ├── tensorflow-in-a-nutshell-part-two-hybrid-learning.md │ ├── terrible-ux-trends-for.md │ ├── test-driving-away-coupling-in-activities.md │ ├── testing-ios-apps.md │ ├── testing-mvp-using-espresso-and-mockito.md │ ├── testing-views-in-isolation-with-espresso.md │ ├── text-classification-using-neural-networks.md │ ├── text-fields-in-mobile-app.md │ ├── the-10-unique-ways-slack-hacked-growth-to-become-a-4-billion-company.md │ ├── the-9-rules-of-design-research.md │ ├── the-GCD-handbook.md │ ├── the-android-lifecycle-cheat-sheet-part-i-single-activities.md │ ├── the-art-of-defensive-programming.md │ ├── the-art-of-designing-with-heart.md │ ├── the-art-of-minimalism-in-mobile-app-ui-design.md │ ├── the-basics-of-designing-mobile-apps.md │ ├── the-caching-antipattern.md │ ├── the-circle-of-product-design.md │ ├── the-coming-era-of-the-zombie-token.md │ ├── the-complete-guide-to-network-unit-testing-in-swift.md │ ├── the-constructor-is-dead-long-live-the-constructor.md │ ├── the-details-that-matter.md │ ├── the-dos-and-don-ts-of-writing-test-cases-in-android.md │ ├── the-easiest-core-data.md │ ├── the-easy-way-to-turn-a-website-into-a-progressive-web-app.md │ ├── the-essentials-of-ios-app-testing-for-iphone-x.md │ ├── the-evolution-of-code-deploys-at-reddit.md │ ├── the-flexible-routing-approach-in-an-ios-app.md │ ├── the-future-of-deep-learning.md │ ├── the-future-of-state-management.md │ ├── the-future-of-ux-design.md │ ├── the-hidden-treasures-of-object-composition.md │ ├── the-introduction-of-starspace.md │ ├── the-limitations-of-deep-learning.md │ ├── the-many-faces-of-this-in-javascript.md │ ├── the-next-step-for-reactive-android-programming.md │ ├── the-one-python-library-everyone-needs.md │ ├── the-past-present-and-future-of-sketch.md │ ├── the-perils-of-shared-code.md │ ├── the-right-way-to-bundle-your-assets-for-faster-sites-over-http-2.md │ ├── the-rise-and-fall-and-rise-of-functional-programming-composable-software.md │ ├── the-secret-of-successful-typeface-combinations.md │ ├── the-secret-to-writing-killer-product-copy.md │ ├── the-three-economic-eras-of-bitcoin.md │ ├── the-time-i-had-to-crack-my-own-reddit-password.md │ ├── the-tiny-keyboard-problem-do-people-complete-forms.md │ ├── the-truth-is-in-the-code.md │ ├── the-two-types-of-product-virality.md │ ├── the-ultimate-guide-to-creating-a-mobile-application.md │ ├── the-way-of-the-gopher.md │ ├── the-worlds-fastest-javascript-memoization-library.md │ ├── things-i-wish-i-knew-before-i-wrote-my-first-android-app.md │ ├── things-i-wish-i-knew-when-i-started-building-android-sdk-libraries.md │ ├── things-i-wish-i-were-told-about-react-native.md │ ├── think-less-design-better.md │ ├── this-browser-tweak-saved-60%-of-requests-to-facebook.md │ ├── timeline-for-learning-react.md │ ├── timer-problems.md │ ├── timing-is-everything.md │ ├── tips-to-keep-in-mind-while-developing-complex-ui-in-web.md │ ├── tools-for-developing-accessible-websites.md │ ├── top-javascript-libraries-tech-to-learn-in-2018.md │ ├── top-ten-pull-request-review-mistakes.md │ ├── toward-go2.md │ ├── towards-godless-android-development-how-and-why-i-kill-god-objects.md │ ├── tracing-patterns-hinder-performance.md │ ├── transition-effect-with-css-masks.md │ ├── troubleshooting-proguard-issues-on-android.md │ ├── trusting-sdks.md │ ├── turbocharged-javascript-refactoring-with-codemods.md │ ├── turning-design-mockups-into-code-with-deep-learning-1.md │ ├── turning-design-mockups-into-code-with-deep-learning-2.md │ ├── type-checker-issues.md │ ├── typescript-class-vs-interface.md │ ├── typescript-getting-popular.md │ ├── typescript-javascript-with-super-powers.md │ ├── typescript-javascript-with-superpowers-part-ii.md │ ├── typography-as-base-from-the-content-out.md │ ├── typography-can-make-your-design-or-break-it.md │ ├── typography-for-user-interfaces.md │ ├── ui-vs-ux-what-is-the-difference.md │ ├── uiscrollview-tutorial.md │ ├── ultimate-guide-to-json-parsing-with-swift-4.md │ ├── unconventional-way-of-learning-a-new-programming-language.md │ ├── under-the-hood-of-futures-and-promises-in-swift.md │ ├── understanding-asynchronous-programming-in-python.md │ ├── understanding-higher-order-components.md │ ├── understanding-javascript-promises-pt-i-background-basics.md │ ├── understanding-javascripts-engine-with-cartoons.md │ ├── understanding-lock-files-in-npm-5.md │ ├── understanding-node-js-event-driven-architecture.md │ ├── understanding-service-workers.md │ ├── understanding-tensorflow-using-go.md │ ├── understanding-v8s-bytecode.md │ ├── undo-history-in-swift.md │ ├── upcoming-regexp-features.md │ ├── upgrade-project-css-selector-custom-attributes.md │ ├── use-a-render-prop.md │ ├── user-breakpoints-in-xcode.md │ ├── using-a-core-data-model-in-swift-playgrounds.md │ ├── using-a-function-in-setstate-instead-of-an-object.md │ ├── using-arkit-with-metal-part-2.md │ ├── using-arkit-with-metal.md │ ├── using-buffers-node-js-c-plus-plus.md │ ├── using-concurrency-and-speed-and-performance-on-android.md │ ├── using-css-counters.md │ ├── using-devtools-tweak-designs-browser.md │ ├── using-feature-queries-in-css.md │ ├── using-fetch-as-google-for-seo-experiments-with-react-driven-websites.md │ ├── using-leanbacks-diffcallback.md │ ├── using-machine-learning-to-predict-value-of-homes-on-airbnb.md │ ├── using-new-google-sheets-api.md │ ├── using-swifts-enums-for-quick-actions.md │ ├── using-zopfli-to-optimize-png-images.md │ ├── uuid-or-guid-as-primary-keys-be-careful.md │ ├── ux-and-design-thinking-5-tips-for-changing-your-company-mindset.md │ ├── ux-infinite-scrolling-vs-pagination.md │ ├── ux-is-grounded-in-rationale-not-design.md │ ├── ux-review-and-redesign-of-the-cocacola-freestyle-kiosk-interface.md │ ├── v3-1-0-such-perf-wow-many-streams.md │ ├── v8-behind-the-scenes-november-edition.md │ ├── vectors-for-all-almost.md │ ├── vectors-for-all-finally.md │ ├── vectors-for-all-slight-return.md │ ├── vertical-typesetting-revisited.md │ ├── viewmodels-a-simple-example.md │ ├── viewmodels-and-livedata-patterns-antipatterns.md │ ├── viewmodels-persistence-onsaveinstancestate-restoring-ui-state-and-loaders.md │ ├── war-learning-curve-rx-java-2-java-8-stream-android-rxjava2-hell-part4.md │ ├── we-analyzed-thousands-of-coding-interviews-heres-what-we-learned.md │ ├── web-developer-security-checklist.md │ ├── web-font-loading-patterns.md │ ├── web-fonts-when-you-need-them-when-you-dont.md │ ├── webhooks-dos-and-dont-s-what-we-learned-after-integrating-100-apis.md │ ├── webpack-3-official-release.md │ ├── webpack-4-beta-try-it-today.md │ ├── webpack-and-rollup-the-same-but-different.md │ ├── webpack-bits-getting-the-most-out-of-the-commonschunkplugin.md │ ├── webpack-http-2.md │ ├── webpack-your-bags.md │ ├── what-archive-format-should-you-use-war-or-jar.md │ ├── what-does-the-time-complexity-o-log-n-actually-mean.md │ ├── what-face-id-means-for-accessibility.md │ ├── what-i-hate-in-kotlin.md │ ├── what-i-learned-from-reading-the-redux-source-code.md │ ├── what-i-learned-from-writing-six-functions-that-all-did-the-same-thing.md │ ├── what-i-would-like-to-know-before-i-code-my-first-ios-application-in-swift.md │ ├── what-is-mcts.md │ ├── what-is-the-real-role-of-a-design-portfolio-website.md │ ├── what-makes-webassembly-fast.md │ ├── what-to-do-if-your-product-isnt-growing.md │ ├── what-unit-tests-are-trying-to-tell-us-about-activities-pt-2.md │ ├── what-unit-tests-are-trying-to-tell-us-about-activities-pt1.md │ ├── what-will-bitcoin-look-like-in-twenty-years-1.md │ ├── what-will-bitcoin-look-like-in-twenty-years-2.md │ ├── what-will-bitcoin-look-like-in-twenty-years-3.md │ ├── what-you-must-know-to-build-savvy-push-notifications.md │ ├── what-you-see-is-what-you-use.md │ ├── whats-in-the-apk.md │ ├── whats-new-in-html-5-2.md │ ├── whats-new-in-ios-11.md │ ├── whats-new-in-react-16-3.md │ ├── whats-new-in-vue-devtools-4-0.md │ ├── whats-so-great-about-redux.md │ ├── where-is-webassembly-now-and-whats-next.md │ ├── where-to-spot-new-design-trends-15-sources-to-stay-fresh.md │ ├── who-plays-mobile-games.md │ ├── whole-module-optimizations.md │ ├── why-and-how-the-cryptobubble-will-burst.md │ ├── why-android-testing-is-so-hard-historical-edition.md │ ├── why-building-community-is-the-new-growth-hack.md │ ├── why-composition-is-harder-with-classes.md │ ├── why-context-value-matters-and-how-to-improve-it.md │ ├── why-design-principles-shape-stronger-products.md │ ├── why-design.md │ ├── why-do-people-open-emails.md │ ├── why-do-we-need-a-new-api.md │ ├── why-drop-down-lists-are-bad-for-the-user-experience.md │ ├── why-i-close-prs-oss-project-maintainer-notes.md │ ├── why-i-havent-fixed-your-issue-yet.md │ ├── why-i-love-ugly-messy-interfaces-and-you-probably-do-too.md │ ├── why-is-arkit-better-than-the-alternatives.md │ ├── why-learn-functional-programming-in-javascript-composing-software.md │ ├── why-object-literals-in-javascript-are-cool.md │ ├── why-our-website-is-faster-than-yours.md │ ├── why-the-first-ten-minutes-is-crucial-if-you-want-to-keep-players-coming-back-to-your-mobile-game.md │ ├── why-user-experience-always-has-to-come-first.md │ ├── why-vertical-rhythms.md │ ├── why-we-desperately-need-women-to-design-ai.md │ ├── why-we-never-thank-open-source-maintainers.md │ ├── why-your-app-looks-better-in-sketch.md │ ├── women-and-mobile-games-learnings-for-developers.md │ ├── workcation-app-part-1-fragments-custom-transition.md │ ├── workcation-app-part-2-animating-markers-with-mapoverlaylayout.md │ ├── workcation-app-part-3-recyclerview-interaction-with-animated-markers.md │ ├── workcation-app-part-4-shared-element-transition-recyclerview-scenes.md │ ├── world-class-testing-development-pipeline-for-android-part-2.md │ ├── world-class-testing-development-pipeline-for-android.md │ ├── wrapping-existing-libraries-with-rxjava.md │ ├── write-clean-css-10-simple-steps-pt1.md │ ├── write-clean-css-10-simple-steps-pt2.md │ ├── write-safer-and-cleaner-code-by-leveraging-the-power-of-immutability.md │ ├── writing-a-lambda-calculus-interpreter-in-javascrip.md │ ├── writing-better-adapters.md │ ├── writing-better-css-with-currentcolor.md │ ├── writing-unit-tests-in-a-swift-playground.md │ ├── wwdc-2016-increased-safety-in-swift-3.md │ ├── xcode7-xcode8.md │ ├── yammer-ios-app-ported-to-swift-3.md │ ├── yeah-redesign-part-1.md │ ├── you-do-not-need-a-css-grid-based-grid-system.md │ ├── you-dont-know-node.md │ └── your-node-js-authentication-tutorial-is-wrong.md ├── TODO1/ │ ├── 1-2-3-9-looking-into-assembly-code-of-coercion.md │ ├── 10-signs-you-will-suck-at-programming.md │ ├── 10-things-ive-learned-from-working-remotely.md │ ├── 101-tips-for-being-a-great-programmer-human.md │ ├── 11-chrome-apis-that-give-your-web-app-a-native-feel.md │ ├── 11-react-component-libraries-you-should-know.md │ ├── 13-javascript-methods-useful-for-dom-manipulation.md │ ├── 13-reasons-why-you-should-choose-consider-to-move-to-flutter-in-2019.md │ ├── 16-devtools-tips-and-tricks-every-css-developer-need-to-know.md │ ├── 23-facilitation-tips-for-design-sprints.md │ ├── 30-minute-python-web-scraper.md │ ├── 4-css-filters-for-adjusting-color.md │ ├── 4-reasons-why-you-should-design-without-color-first.md │ ├── 5-animation-packages-ionic.md │ ├── 5-best-practices-to-prevent-git-leaks.md │ ├── 5-better-practices-for-javascript-promises-in-real-projects.md │ ├── 5-more-drawing-exercises.md │ ├── 5-optimization-tips-for-your-mobile-web-app-for-higher-user-retention.md │ ├── 5-rules-for-designer-engineer-collaboration.md │ ├── 5-secret-features-of-json-stringify.md │ ├── 5-tips-for-using-showinstallprompt-in-your-instant-experience.md │ ├── 5-tips-to-write-better-conditionals-in-javascript.md │ ├── 5-tools-for-faster-development-in-react.md │ ├── 5-ways-to-create-a-settings-icon.md │ ├── 6-best-javascript-frameworks-in-2020.md │ ├── 7-javascript-eeg-mind-reading-libraries-for-2018.md │ ├── 7-principles-of-icon-design.md │ ├── 7-rules-for-creating-gorgeous-ui-part-1.md │ ├── 7-rules-for-creating-gorgeous-ui-part-2.md │ ├── 7-steps-to-get-more-clients-as-a-freelance-developer.md │ ├── 8-tips-for-great-code-reviews.md │ ├── 8-ui-ux-design-trends-for-2020.md │ ├── 8-useful-javascript-tricks.md │ ├── 8-useful-tree-data-structures-worth-knowing.md │ ├── The-Android-Lifecycle-cheat-sheet-part-II-Multiple-activities.md │ ├── The-Android-Lifecycle-cheat-sheet-part-III-Fragments.md │ ├── The-Android-Lifecycle-cheat-sheet-part-IV.md │ ├── a-beginner-friendly-introduction-to-containers-vms-and-docker.md │ ├── a-beginners-guide-to-ethereum.md │ ├── a-beginners-guide-to-rapid-prototyping.md │ ├── a-beginners-guide-to-simulating-dynamical-systems-with-python.md │ ├── a-brief-totally-accurate-history-of-programming-languages.md │ ├── a-closer-look-at-the-provider-package.md │ ├── a-complete-guide-to-getting-hired-as-an-ios-developer-in-2018.md │ ├── a-comprehensive-and-honest-list-of-ux-clichés.md │ ├── a-comprehensive-look-back-at-frontend-in-2018.md │ ├── a-deep-dive-into-native-lazy-loading-for-images-and-frames.md │ ├── a-deep-dive-on-python-type-hints.md │ ├── a-gentle-introduction-to-react-motion.md │ ├── a-guide-to-color-accessibility-in-product-design.md │ ├── a-guide-to-css-grid-and-accessibility.md │ ├── a-guide-to-css-support-in-browsers.md │ ├── a-guide-to-custom-elements-for-react-developers.md │ ├── a-little-reminder-that-pseudo-elements-are-children-kinda.md │ ├── a-look-at-css-hyphenation-in-2019.md │ ├── a-minimal-guide-to-ecmascript-decorators.md │ ├── a-netflix-web-performance-case-study.md │ ├── a-new-era-of-launching-mobile-games.md │ ├── a-new-go-api-for-protocol-buffers.md │ ├── a-new-hope-the-future-of-application-platforms.md │ ├── a-patchwork-plaid-monolith-to-modularized-app.md │ ├── a-picture-is-worth-a-thousand-words-faces-and-barcodes—the-shape-detection-api.md │ ├── a-quick-beginners-guide-to-drawing.md │ ├── a-quick-introduction-to-functional-javascript.md │ ├── a-react-job-interview-recruiter-perspective.md │ ├── a-real-world-comparison-of-front-end-frameworks-with-benchmarks-2018-update.md │ ├── a-realworld-comparison-of-front-end-frameworks-2020.md │ ├── a-simple-guide-to-a-b-testing-for-data-science.md │ ├── a-simple-guide-to-es6-promises.md │ ├── a-simple-guide-to-understanding-javascript-es6-generators.md │ ├── a-step-by-step-explanation-of-principal-component-analysis.md │ ├── a-tale-of-webpack-4-and-how-to-finally-configure-it-in-the-right-way.md │ ├── a-web-application-completely-in-rust.md │ ├── absolute-truths-unlearned-as-junior-developer.md │ ├── abstraction-composition.md │ ├── abusing-and-overusing-list-comprehensions-in-python.md │ ├── accepting-payments-with-stripe-vuejs-and-flask.md │ ├── active-learning-in-machine-learning.md │ ├── activity-recognitions-new-transition.md │ ├── adaptive-serving-using-javascript-and-the-network-information-api.md │ ├── adopting-kotlin.md │ ├── advanced-tooling-for-web-components.md │ ├── agile-agile-blah-blah.md │ ├── airflow-a-workflow-management-platform.md │ ├── algebraic-effects-for-the-rest-of-us.md │ ├── algorithms-behind-modern-storage-systems.md │ ├── alternatives-to-jsx.md │ ├── an-easier-path-to-functional-programming-in-java.md │ ├── an-illustrated-and-musical-guide-to-map-reduce-and-filter-array-methods.md │ ├── an-in-depth-exploration-of-the-array-fill-function.md │ ├── an-in-depth-svg-tutorial.md │ ├── an-introduction-to-css-shapes.md │ ├── an-introduction-to-raspberry-pi-4-gpio-and-controlling-it-with-node-js.md │ ├── an-introduction-to-speech-recognition-using-wfsts.md │ ├── an-open-source-interactive-data-visualization-tool-for-neuroevolution.md │ ├── an-overview-of-go-tooling.md │ ├── analysing-1-4-billion-rows-with-python.md │ ├── android-data-binding-library-from-observable-fields-to-livedata-in-two-steps.md │ ├── android-emulator-project-marble-improvements.md │ ├── android-networking-in-2019-retrofit-with-kotlins-coroutines.md │ ├── android-studio-project-marble-apply-changes.md │ ├── android-studio-switching-to-d8-dexer.md │ ├── animated-qr-data-transfer-with-gomobile-and-gopherjs.md │ ├── animated-transition-in-react-native.md │ ├── announcing-the-alexa-skills-kit-for-node-js.md │ ├── announcing-typescript-3-7-beta.md │ ├── answering-questions-on-flutter-app-development.md │ ├── apple-has-no-idea-whats-next-so-it-s-just-banging-on-the-same-old-drum.md │ ├── applying-styles-based-on-the-user-scroll-position-with-smart-css.md │ ├── architecting-single-page-applications.md │ ├── art-direction-for-the-web-using-css-shapes.md │ ├── articles-website-design-mistakes.md │ ├── asynchronous-tasks-with-flask-and-redis-queue.md │ ├── automated-feature-engineering-in-python.md │ ├── avoiding-the-async-await-hell.md │ ├── avoiding-those-dang-cannot-read-property-of-undefined-errors.md │ ├── basic-color-theory-for-web-developers.md │ ├── beautility-my-ultimate-iphone-setup.md │ ├── better-stats-for-better-decisions.md │ ├── beyond-console-log.md │ ├── birdseye-go.md │ ├── bitcoin-in-bigquery-blockchain-analytics-on-public-data.md │ ├── blazingly-fast-parsing-part-1-optimizing-the-scanner.md │ ├── blazingly-fast-parsing-part-2-lazy-parsing.md │ ├── blockchain-implementation-with-java-code.md │ ├── blockchain-platforms-tech-to-watch-in-2019.md │ ├── boost-your-website-performance-with-phpfastcache.md │ ├── bottom-navigation-bar-using-provider-flutter.md │ ├── brief-history-of-http.md │ ├── btc-history-git.md │ ├── build-a-blog-using-nuxt-strapi-and-apollo.md │ ├── build-a-drag-and-drop-dnd-layout-builder-with-react-and-immutablejs.md │ ├── build-a-state-management-system-with-vanilla-javascript.md │ ├── build-it-test-it-deliver-it-complete-ios-guide-on-continuous-delivery-with-fastlane-and-jenkins.md │ ├── build-secure-rest-api-with-node.md │ ├── build-time-travel-debugging-in-redux-from-scratch.md │ ├── build-your-own-oauth2-server-in-go.md │ ├── building-a-cross-platform-mobile-team.md │ ├── building-a-custom-slider-in-flutter-with-gesturedetector.md │ ├── building-a-dynamic-tree-diagram-with-svg-and-vue-js.md │ ├── building-a-successful-app-or-game-business-in-southeast-asia.md │ ├── building-a-text-editor-for-a-digital-first-newsroom.md │ ├── building-accessible-websites-and-apps-is-a-moral-obligation.md │ ├── building-beautiful-flexible-user-interfaces-with-flutter-material-theming-and-official-material.md │ ├── building-bikesharing-application-open-source-tools.md │ ├── building-fluid-interfaces-ios-swift.md │ ├── building-hocs-with-recompose.md │ ├── building-the-design-ecosystem-of-the-future.md │ ├── building-type-mode-for-stories-on-ios-and-android.md │ ├── bye-bye-mongo-hello-postgres.md │ ├── cache-control-for-civilians.md │ ├── calls-between-javascript-and-webassembly-are-finally-fast.md │ ├── camera-enumeration-on-android.md │ ├── can-machine-learning-model-simple-math-functions.md │ ├── can-you-console-log-in-jsx.md │ ├── cant-picture-this-an-analysis-of-image-filtering-on-wechat-moments-1.md │ ├── cant-picture-this-an-analysis-of-image-filtering-on-wechat-moments-2.md │ ├── cant-picture-this-an-analysis-of-image-filtering-on-wechat-moments-3.md │ ├── cant-picture-this-an-analysis-of-image-filtering-on-wechat-moments-4.md │ ├── ces-learn-css-layout-part-1-flexbox.md │ ├── chars2vec-character-based-language-model-for-handling-real-world-texts-with-spelling-errors-and.md │ ├── checking-the-network-connection-with-a-react-hook.md │ ├── classes-vs-data-structures.md │ ├── classes-without-classes.md │ ├── clean-architecture-in-go.md │ ├── cloud-computing-without-containers.md │ ├── code-your-own-blockchain-in-less-than-200-lines-of-go.md │ ├── code-your-own-blockchain-mining-algorithm-in-go.md │ ├── collection-cognitive-biases-how-to-use-1.md │ ├── collection-cognitive-biases-how-to-use-2.md │ ├── collection-cognitive-biases-how-to-use-3.md │ ├── combine-getting-started.md │ ├── commit-messages-guide.md │ ├── comparing-compilers-in-rust-haskell-c-and-python-1.md │ ├── comparing-compilers-in-rust-haskell-c-and-python-2.md │ ├── composing-software-an-introduction.md │ ├── composing-software-the-book.md │ ├── compromised-npm-package-event-stream.md │ ├── conditional-rendering-in-react.md │ ├── connected-cars-what-are-they-and-how-to-get-started-developing-connected-car-apps.md │ ├── context-api-vs-redux.md │ ├── control-flow-integrity-in-android-kernel.md │ ├── converting-your-ios-app-to-android-using-kotlin.md │ ├── convolutional-layers-for-deep-learning-neural-networks.md │ ├── coroutines-snags.md │ ├── courier-dropbox-migration-to-grpc.md │ ├── crafting-beautiful-ux-with-api-requests.md │ ├── crafting-reusable-html-templates.md │ ├── create-a-line-chart-in-swiftui-using-paths.md │ ├── creating-a-custom-element-from-scratch.md │ ├── creating-a-graphql-server-with-nodejs.md │ ├── creating-a-multi-level-hierarchical-flyout-navigation-menu-using-only-html-and-css.md │ ├── creating-a-simple-recommender-system-in-python-using-pandas.md │ ├── creating-good-roadmaps-6-practical-steps-product-leaders.md │ ├── creating-spm-tools-from-your-existing-codebase.md │ ├── creating-website-sitemap.md │ ├── creating-with-a-design-system-in-sketch-part-one-tutorial.md │ ├── creating-with-a-design-system-in-sketch-part-two-tutoria.md │ ├── cross-stitching-plaid-and-androidx.md │ ├── css-architecture-for-multiple-websites.md │ ├── css-pseudo-selectors-you-never-knew-existed.md │ ├── css-quickies-css-variables-or-how-you-create-a-white-dark-theme-easily.md │ ├── css-variables-dynamic-app-themes.md │ ├── curiosity-and-procrastination-in.md │ ├── current-status-of-python-packaging.md │ ├── curry-and-function-composition.md │ ├── custom-encoding-and-decoding-json-in-swift.md │ ├── dart-features-for-better-code-types-and-working-with-parameters.md │ ├── data-binding-lessons-learnt.md │ ├── data-science-and-machine-learning-interview-questions.md │ ├── data-science-for-startups-introduction.md │ ├── data-streaming-scalability.md │ ├── data-streaming.md │ ├── data-visualization-with-bokeh-in-python-part-ii-interactions.md │ ├── data-visualization-with-bokeh-in-python-part-iii-a-complete-dashboard.md │ ├── data-visualization-with-bokeh-in-python-part-one-getting-started.md │ ├── databook-turning-big-data-into-knowledge-with-metadata-at-uber.md │ ├── decouple-your-code-with-dependency-injection.md │ ├── deep-dive-into-react-fiber-internals.md │ ├── deep-learning-competence.md │ ├── deep-learning-is-going-to-teach-us-all-the-lesson-of-our-lives-jobs-are-for-machines.md │ ├── defining-component-apis-in-react.md │ ├── delightful-animations-in-ios.md │ ├── dependencies-ios-carthage.md │ ├── dependency-injection-in-a-multi-module-project.md │ ├── deploy-not-equal-release-part-one.md │ ├── deploy-not-equal-release-part-two-2.md │ ├── deploy-not-equal-release-part-two.md │ ├── design-is-not-going-to-save-the-world.md │ ├── design-patterns-in-modern-javascript-development.md │ ├── design-patterns-on-ios-using-swift-part-1-2.md │ ├── design-patterns-on-ios-using-swift-part-2-2.md │ ├── design-types-7d75839a20ea.md │ ├── designing-for-the-web-ought-to-mean-making-html-and-css.md │ ├── designing-notifications-for-applications.md │ ├── designing-search-for-mobile-apps.md │ ├── designing-sound-and-silence.md │ ├── designing-very-large-javascript-applications.md │ ├── developing-a-single-page-app-with-flask-and-vuejs.md │ ├── developing-games-with-react-redux-and-svg-part-2.md │ ├── developing-games-with-react-redux-and-svg-part-3.md │ ├── differentiable-plasticity.md │ ├── discovery-in-the-age-of-abundant-video.md │ ├── distributed-transactions-in-spring-with-and-without-xa-part-1.md │ ├── distributed-transactions-in-spring-with-and-without-xa-part-2.md │ ├── distributed-transactions-in-spring-with-and-without-xa-part-3.md │ ├── dns-over-tls.md │ ├── dns-servers-you-should-have-memorized.md │ ├── do-you-know-about-the-keyboard-tag-in-html.md │ ├── dont-call-me-i-ll-call-you-side-effects-management-with-redux-saga-part-1.md │ ├── double-stuffed-security-in-android-oreo.md │ ├── draw-a-path-rendering-android-vectordrawables.md │ ├── dynamic-features-in-swift.md │ ├── easy-coroutines-in-android-viewmodelscope.md │ ├── easy-responsive-modern-css-grid-layout.md │ ├── ecmascript-classes-keeping-things-private.md │ ├── edge-detection-in-python.md │ ├── effective-bloc-pattern.md │ ├── effective-code-review.md │ ├── elements-of-javascript-style.md │ ├── elixir-phoenix-absinthe-graphql-react-apollo-absurdly-deep-dive-1.md │ ├── elixir-phoenix-absinthe-graphql-react-apollo-absurdly-deep-dive-2.md │ ├── enabling-modern-js-on-npm.md │ ├── encapsulating-style-and-structure-with-shadow-dom.md │ ├── energy-sector-now-on-blockchain-based-cryptocurrency.md │ ├── engineering-to-improve-marketing-effectiveness-part-1.md │ ├── enough-to-decide.md │ ├── ensemble-learning-to-improve-machine-learning-results.md │ ├── envion-a-name-of-mining-in-block-chain-to-support-renewable-energy.md │ ├── es-modules-a-cartoon-deep-dive.md │ ├── es6-and-npm-modules-in-google-apps-script.md │ ├── es6-notes-default-values-of-parameters.md │ ├── ethereum-bitcoin-explainer.md │ ├── ethereumbook-wallets.md │ ├── eval-via-import.md │ ├── event-stoppropagation-in-a-modular-system.md │ ├── every-single-machine-learning-course-on-the-internet-ranked-by-your-reviews.md │ ├── everything-you-need-to-know-about-change-detection-in-angular.md │ ├── everything-you-need-to-know-about-flutter-page-route-transition.md │ ├── everything-you-need-to-know-about-javascript-symbols.md │ ├── examining-performance-differences-between-native-flutter-and-react-native-mobile-development.md │ ├── exploratory-statistical-data-analysis-with-a-kaggle-dataset-using-pandas.md │ ├── exploring-apps-without-jailbreaking.md │ ├── expressive-code-for-state-machines-in-cpp.md │ ├── extracting-insights-from-a-kaggle-dataset-using-pythons-pandas-and-seaborn.md │ ├── extreme-rare-event-classification-using-autoencoders-in-keras.md │ ├── eye-tracking-and-the-best-ux-practices-in-the-mobile-world.md │ ├── fast-pipelines-with-generators-in-typescript.md │ ├── find-top-10-meaningful-web-design-trends-in-2020.md │ ├── five-options-for-ios-continuous-delivery-without-fastlane.md │ ├── fixing-memory-leaks-in-web-applications.md │ ├── flask-video-streaming-revisited.md │ ├── flexbox-alignment.md │ ├── flexbox-display-flex-container.md │ ├── flutter-challenge-twitter.md │ ├── flutter-challenge-whatsapp.md │ ├── flutter-challenge-youtube.md │ ├── flutter-deep-dive-gestures.md │ ├── flutter-for-android-developers-how-to-design-linearlayout-in-flutter.md │ ├── flutter-getting-started-tutorial-5-grid.md │ ├── flutter-heroes-and-villains-bringing-balance-to-the-flutterverse.md │ ├── flutter-infinite-listview-with-redux.md │ ├── flutter-layout-cheat-sheet.md │ ├── flutter-state-management-setstate-bloc-valuenotifier-provider.md │ ├── flutter_go.md │ ├── focus-and-deep-work-your-secret-weapons-to-becoming-a-10x-developer.md │ ├── font-size-an-unexpectedly-complex-css-property.md │ ├── fountaincodes.md │ ├── four-ways-to-quantify-synchrony-between-time-series-data.md │ ├── front-end-performance-checklist-2019-pdf-pages-1.md │ ├── front-end-performance-checklist-2019-pdf-pages-2.md │ ├── front-end-performance-checklist-2019-pdf-pages-3.md │ ├── front-end-performance-checklist-2019-pdf-pages-4.md │ ├── front-end-performance-checklist-2019-pdf-pages-5.md │ ├── front-end-performance-checklist-2019-pdf-pages-6.md │ ├── frontend-vs-backend-which-one-is-right-for-you.md │ ├── funding-eslint-future.md │ ├── future-of-web-design.md │ ├── futures-isolates-event-loop.md │ ├── generator-functions-in-javascript.md │ ├── gentle-introduction-multithreading.md │ ├── getting-creative-with-the-console-api.md │ ├── getting-started-with-c-and-android-native-activities.md │ ├── getting-started-with-differentialequations-jl.md │ ├── getting-the-most-from-the-new-multi-camera-api.md │ ├── git-aliases-i-cant-live-without.md │ ├── git-aliases.md │ ├── go-graphql-gateway-microservices.md │ ├── golang-datastructures-trees.md │ ├── good-coding-practices-tips-enhance-code-quality.md │ ├── good-practices-for-high-performance-and-scalable-node-js-applications-part-1-3.md │ ├── good-practices-for-high-performance-and-scalable-node-js-applications-part-2-3.md │ ├── good-practices-for-high-performance-and-scalable-node-js-applications-part-3-3.md │ ├── goodbye-clean-code.md │ ├── google-advanced-search-operators.md │ ├── google-chrome-kill-url-first-steps.md │ ├── google-colab-free-gpu-tutorial.md │ ├── google-i-o-2018-for-android-updated-w-more-detailed-map-navigation-assistant-action.md │ ├── google-santa-tracker-moving-to-an-android-app-bundle.md │ ├── googles-ml-kit-offers-easy-machine-learning-apis-for-android-and-ios.md │ ├── gophercon-2018-binary-search-tree-algorithms.md │ ├── graphql-a-retrospective.md │ ├── graphql-server-design-medium.md │ ├── great-design-vs-good-design-whats-the-difference-here-s-the-truth.md │ ├── guide-node-js-logging.md │ ├── gunicorn-3-means-of-concurrency.md │ ├── headers-we-dont-want.md │ ├── headless-user-interface-components.md │ ├── heuristic-principles-for-mobile-interfaces.md │ ├── high-speed-inserts-with-mysql.md │ ├── history-of-go-testing.md │ ├── history-of-javascript.md │ ├── homepod-12-wish-list.md │ ├── hooks-intro.md │ ├── how-airbnb-proved-that-storytelling-is-the-most-important-skill-in-design.md │ ├── how-apple-beat-swiss-watchmakers-at-their-own-game.md │ ├── how-apple-can-fix-3d-touch.md │ ├── how-blockchain-can-help-re-invent-healthcare.md │ ├── how-building-a-design-system-empowers-your-team-to-focus-on-people-not-pixels.md │ ├── how-can-a-designer-become-a-leader.md │ ├── how-can-cloud-services-help-improve-your-businessess-efficiency.md │ ├── how-data-sharding-works-in-a-distributed-sql-database.md │ ├── how-discord-renders-rich-messages-on-the-android-app.md │ ├── how-do-you-figure.md │ ├── how-does-react-tell-a-class-from-a-function.md │ ├── how-does-the-development-mode-work.md │ ├── how-fast-is-flutter-i-built-a-stopwatch-app-to-find-out.md │ ├── how-i-automated-my-job-with-node-js.md │ ├── how-i-built-a-web-crawler-to-automate-my-job-search.md │ ├── how-i-built-an-async-form-validation-library-in-100-lines-of-code-with-react-hooks.md │ ├── how-i-finally-got-my-head-around-scoped-slots-in-vue.md │ ├── how-i-fixed-a-very-old-gil-race-condition-in-python-3-7.md │ ├── how-i-landed-a-job-in-ux-design-at-google.md │ ├── how-i-used-python-to-find-interesting-people-on-medium.md │ ├── how-javascript-works-a-comparison-with-webassembly-why-in-certain-cases-its-better-to-use-it.md │ ├── how-javascript-works-inside-the-networking-layer-how-to-optimize-its-performance-and-security.md │ ├── how-javascript-works-service-workers-their-life-cycle-and-use-cases.md │ ├── how-javascript-works-the-mechanics-of-web-push-notifications.md │ ├── how-javascript-works-the-rendering-engine-and-tips-to-optimize-its-performance.md │ ├── how-javascript-works-tracking-changes-in-the-dom-using-mutationobserver.md │ ├── how-javascript-works-under-the-hood-of-css-and-js-animations-how-to-optimize-their-performance.md │ ├── how-not-to-vue.md │ ├── how-pagespeed-works.md │ ├── how-to-avoid-opinion-based-product-prioritization.md │ ├── how-to-avoid-these-7-mistakes-i-made-as-a-junior-developer.md │ ├── how-to-be-a-good-remote-developer.md │ ├── how-to-become-a-devops-engineer-in-six-months-or-less-part-2-configure.md │ ├── how-to-become-a-devops-engineer-in-six-months-or-less-part-3-version.md │ ├── how-to-become-a-devops-engineer-in-six-months-or-less-part-4-package.md │ ├── how-to-become-a-devops-engineer-in-six-months-or-less.md │ ├── how-to-build-a-blog-with-nest-js-mongodb-and-vue-js.md │ ├── how-to-build-a-circular-slider-in-flutter.md │ ├── how-to-build-a-cli-with-node-js.md │ ├── how-to-build-a-delightful-loading-screen-in-5-minutes.md │ ├── how-to-build-a-simple-chrome-extension-in-vanilla-javascript.md │ ├── how-to-build-a-simple-game-in-the-browser-with-phaser-3-and-typescript.md │ ├── how-to-build-ios-mobile-group-chat-app-swift-5-pubnub.md │ ├── how-to-build-minesweeper-with-javascript.md │ ├── how-to-build-your-own-neural-network-from-scratch-in-python.md │ ├── how-to-choose-the-best-static-site-generator-in-2018.md │ ├── how-to-choose-the-right-database.md │ ├── how-to-conditionally-build-an-object-in-javascript-with-es6.md │ ├── how-to-configure-image-data-augmentation-when-training-deep-learning-neural-networks.md │ ├── how-to-connect-stackdriver-to-your-smart-home-server-for-error-logging.md │ ├── how-to-deal-with-dirty-side-effects-in-your-pure-functional-javascript.md │ ├── how-to-debug-front-end-optimising-network-assets.md │ ├── how-to-design-delightful-dark-themes.md │ ├── how-to-develop-a-generative-adversarial-network-for-a-1-dimensional-function-from-scratch-in-keras.md │ ├── how-to-develop-react-js-apps-fast-using-webpack-4.md │ ├── how-to-easily-detect-objects-with-deep-learning-on-raspberrypi.md │ ├── how-to-fix-app-quality-issues-with-android-vitals-and-improve-performance-on-the-play-store-part.md │ ├── how-to-format-dates-in-python.md │ ├── how-to-gain-widespread-adoption-of-your-design-system.md │ ├── how-to-generate-music-using-a-lstm-neural-network-in-keras.md │ ├── how-to-get-a-progressive-web-app-into-the-google-play-store.md │ ├── how-to-implement-consistent-hashing-efficiently.md │ ├── how-to-improve-your-data-structures-algorithms-and-problem-solving-skills.md │ ├── how-to-keep-your-dependencies-secure-and-up-to-date.md │ ├── how-to-learn-css.md │ ├── how-to-make-a-beautiful-tiny-npm-package-and-publish-it.md │ ├── how-to-mock-services-using-mountebank-and-node-js.md │ ├── how-to-not-react-common-anti-patterns-and-gotchas-in-react.md │ ├── how-to-optimize-your-app-for-android-go-edition.md │ ├── how-to-organize-a-hacktoberfest-themed-meetup.md │ ├── how-to-perform-object-detection-with-yolov3-in-keras.md │ ├── how-to-prioritize-your-teams-work.md │ ├── how-to-react-native-web-app-a-happy-struggle.md │ ├── how-to-read-source-code-without-ripping-your-hair-out.md │ ├── how-to-rewrite-your-sql-queries-in-pandas-and-more.md │ ├── how-to-save-ui-designers-front-end-developers-up-to-50-of-their-time.md │ ├── how-to-scrape-websites-with-python-and-beautifulsoup.md │ ├── how-to-simplify-your-design.md │ ├── how-to-think-like-a-programmer-lessons-in-problem-solving.md │ ├── how-to-train-an-object-detection-model-with-keras.md │ ├── how-to-use-flutter-to-build-an-app-with-bottom-navigation.md │ ├── how-to-use-result-in-swift.md │ ├── how-to-use-tensorflow-mobile-in-android-apps.md │ ├── how-to-watch-flutter-at-google-i-o-2018.md │ ├── how-to-win-back-subscribers-who-cancel.md │ ├── how-to-write-a-discord-bot-in-python.md │ ├── how-to-write-a-front-end-developer-resume-that-will-land-you-an-interview.md │ ├── how-to-write-a-function-pycon-2018.md │ ├── how-to-write-a-production-level-code-in-data-science.md │ ├── how-to-write-beautiful-and-meaningful-readme-md-for-your-next-project.md │ ├── how-to-write-better-code-in-react-best-practices.md │ ├── how-to-write-video-chat-app-using-webrtc-and-nodejs.md │ ├── how-we-built-the-fastest-conference-website-in-the-world.md │ ├── how-we-ditched-redux-for-mobx.md │ ├── how-we-made-carousells-mobile-web-experience-3x-faster.md │ ├── how-writing-simple-javascript-got-us-6200-github-stars-in-a-single-day.md │ ├── how-you-can-use-simple-trigonometry-to-create-better-loaders.md │ ├── how_to_prep_your_github_for_job_seeking.md │ ├── html-is-and-always-was-a-compilation-target-can-we-deal-with-that.md │ ├── http-2-frequently-asked-questions.md │ ├── http-3-from-root-to-tip.md │ ├── http-security-headers-a-complete-guide.md │ ├── http2-causalprof.md │ ├── https-medium-com-netflixtechblog-engineering-to-improve-marketing-effectiveness-part-2.md │ ├── hyphenation-in-css.md │ ├── i-built-an-app-that-uses-all-7-new-features-in-javascript-es2020.md │ ├── i-built-tic-tac-toe-with-javascript.md │ ├── i-created-the-exact-same-app-in-react-and-vue-here-are-the-differences.md │ ├── i-dont-hate-arrow-functions.md │ ├── i-worked-with-a-data-scientist-heres-what-i-learned.md │ ├── iOS-Responder-Chain-UIResponder-UIEvent-UIControl-and-uses.md │ ├── idle-until-urgent.md │ ├── if-screen-product-designers-designed-physical-products.md │ ├── image-inpainting-humans-vs-ai.md │ ├── image-manipulation-libraries-for-javascript.md │ ├── imaginary-problems.md │ ├── immutability-in-react-theres-nothing-wrong-with-mutating-objects.md │ ├── immutable-data-with-immer-and-react-setstate.md │ ├── implement-a-design-with-css.md │ ├── implement-google-inbox-style-animation-on-android.md │ ├── implementing-linkedpurchasetoken-correctly-to-prevent-duplicate-subscriptions.md │ ├── implementing-seam-carving-with-python.md │ ├── implementing-svm-and-kernel-svm-with-pythons-scikit-learn.md │ ├── improving-app-performance-with-art-optimizing-profiles-in-the-cloud.md │ ├── improving-build-speed-in-android-studio.md │ ├── in-defense-of-the-ternary-statement.md │ ├── in-unix-everything-is-a-file.md │ ├── inclusively-hidden.md │ ├── increase-your-apps-performance-with-react-hooks-and-the-react-dev-tools.md │ ├── inside-browser-part2.md │ ├── inside-browser-part3.md │ ├── inside-browser-part4.md │ ├── inside-fiber-in-depth-overview-of-the-new-reconciliation-algorithm-in-react.md │ ├── inside-look-at-modern-web-browser-part1.md │ ├── integrating-third-party-animation-libraries-to-a-project-1.md │ ├── integrating-third-party-animation-libraries-to-a-project-2.md │ ├── interesting-ecmascript-2017-proposals.md │ ├── intermediate-design-patterns-in-swift.md │ ├── interpreting-predictive-models-with-skater-unboxing-model-opacity.md │ ├── introducing-aloestackview-for-ios.md │ ├── introducing-constraint-layout-1-1.md │ ├── introducing-flutter-widget-maker-a-flutter-app-builder-written-in-flutter.md │ ├── introducing-github-actions.md │ ├── introducing-new-android-excellence-apps.md │ ├── introducing-spaceace-a-new-kind-of-front-end-state-library.md │ ├── introducing-the-react-profiler.md │ ├── introducing-the-single-element-pattern.md │ ├── introducing-workmanager.md │ ├── introduction-source-maps.md │ ├── introduction-to-1d-convolutional-neural-networks-in-keras-for-time-sequences.md │ ├── introduction-to-accessibility-for-android-apps-and-games.md │ ├── introduction-to-ethereum-the-internets-government.md │ ├── introduction-to-graph-theory-network-analysis-python-codes.md │ ├── ios-12-now-installed-on-50-of-devices-outpacing-ios-11.md │ ├── ios-file-provider-extension-tutorial.md │ ├── ios-how-to-build-a-table-view-with-multiple-cell-types.md │ ├── ios-performance-tricks-apps.md │ ├── is-no-sql-killing-sql.md │ ├── is-postmessage-slow.md │ ├── is-your-rest-api-ready-for-deployment-7-questions-to-help-you-decide.md │ ├── its-2019-and-i-still-make-websites-with-my-bare-hands.md │ ├── its-the-future.md │ ├── j-introducing-junit5-part1-jupiter-api.md │ ├── j-javaee8-security-api-1.md │ ├── j-javaee8-security-api-2.md │ ├── j-javaee8-security-api-3.md │ ├── j-javaee8-security-api-4.md │ ├── java-and-etcd-together-at-last-with-jetcd.md │ ├── java-bridge-methods-explained.md │ ├── java-data-streaming.md │ ├── java-service-loader-vs-spring-factories-loader.md │ ├── javascript-array-push-is-945x-faster-than-array-concat.md │ ├── javascript-call-apply-and-bind.md │ ├── javascript-clean-code-best-practices.md │ ├── javascript-generator-yield-next-async-await.md │ ├── javascript-knowledge-reading-source-code.md │ ├── javascript-native-methods-you-may-not-know.md │ ├── javascript-symbols-but-why.md │ ├── javascript-top-level-await-in-a-nutshell.md │ ├── javascript-unit-testing-frameworks.md │ ├── javascripts-filter-function-explained-by-applying-to-college.md │ ├── joining-data-streams.md │ ├── json-parser-with-javascript.md │ ├── jupyter-notebook-tutorial.md │ ├── kafka-vs-rabbitmq-why-use-kafka.md │ ├── keeping-git-commit-history-clean.md │ ├── keeping-up-with-ai-in-2019.md │ ├── keras-cheat-sheet.md │ ├── keras-generative-adversarial-networks-image-deblurring.md │ ├── keyword-arguments-in-python.md │ ├── killing-a-process-and-all-of-its-descendants.md │ ├── kotlin-clean-architecture.md │ ├── kotlin-demystified-understanding-shorthand-lamba-syntax.md │ ├── kotlin-standard-functions-cheat-sheet.md │ ├── kubernetes-distributed-application.md │ ├── larder-links-06-iOS-Auto-Layout-DSLs.md │ ├── launching-the-front-end-tooling-survey-2019.md │ ├── layouts-of-tomorrow.md │ ├── lazy-loading-video-based-on-connection-speed.md │ ├── lazy-sequences-in-swift-and-how-they-work.md │ ├── lazy-var-in-ios-swift.md │ ├── learn-bootstrap-4-in-30-minute-by-building-a-landing-page-website-guide-for-beginners.md │ ├── learn-enough-docker-to-be-useful-1.md │ ├── learn-git-concepts-not-commands-1.md │ ├── learn-git-concepts-not-commands-2.md │ ├── learn-git-concepts-not-commands-3.md │ ├── learn-to-cache-your-nodejs-application-with-redis-in-6-minutes.md │ ├── learning-gos-concurrency-through-illustrations.md │ ├── learning-parser-combinators-with-rust-1.md │ ├── learning-parser-combinators-with-rust-2.md │ ├── learning-parser-combinators-with-rust-3.md │ ├── learning-parser-combinators-with-rust-4.md │ ├── lenses-composable-getters-and-setterssfor-functional-programming.md │ ├── lessons-learned-at-instagram-stories-and-feed-machine-learning.md │ ├── lets-settle-this-part-one.md │ ├── lets-settle-this-part-two.md │ ├── lets-simplify-the-work-with-userdefaults.md │ ├── lets-talk-js-documentation.md │ ├── levels-of-seniority.md │ ├── linear-algebra-animating-linear-transformations-with-threejs.md │ ├── linear-algebra-basic-matrix-operations.md │ ├── linear-algebra-for-deep-learning.md │ ├── linear-algebra-linear-transformation-matrix.md │ ├── linear-algebra-vectors.md │ ├── listeners-several-functions-kotlin.md │ ├── livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case.md │ ├── loaders-in-support-library-27-1-0.md │ ├── locale-changes-and-the-androidviewmodel-antipattern.md │ ├── localize-swift-application.md │ ├── logging-activity-web-beacon-api.md │ ├── logistic-regression-on-mnist-with-pytorch.md │ ├── longest-keyword-sequence.md │ ├── love-js-hate-css.md │ ├── lru-cache.md │ ├── machine-learning-for-diabetes-with-python.md │ ├── magic-numbers-are-not-that-magic.md │ ├── maintainable-etls.md │ ├── make-3d-flip-animation-in-flutter.md │ ├── make-shimmer-effect-in-flutter.md │ ├── making-a-todo-app-with-flutter.md │ ├── making-logs-colorful-in-nodejs.md │ ├── making-sense-of-react-hooks.md │ ├── making-svg-icon-component-in-vue.md │ ├── making-the-uamp-sample-an-instant-app.md │ ├── making-webassembly-even-faster-firefoxs-new-streaming-and-tiering-compiler.md │ ├── manage-different-environments-in-your-swift-project-with-ease.md │ ├── markov-chains-python-tutorial.md │ ├── master-the-javascript-interview-what-is-a-pure-function.md │ ├── master-the-javascript-interview-what-is-functional-programming.md │ ├── mastering-javascript-this-keyword-detailed-guide.md │ ├── mathematical-programming-a-key-habit-to-built-up-for-advancing-in-data-science.md │ ├── maybe-you-dont-need-rust-to-speed-up-your-js-1.md │ ├── maybe-you-dont-need-rust-to-speed-up-your-js-2.md │ ├── mdc-101-flutter.md │ ├── mdc-102-flutter.md │ ├── mdc-103-flutter.md │ ├── mdc-104-flutter.md │ ├── memory-leaks-in-swift.md │ ├── micro-design-systems-breaking-the-monolith.md │ ├── micro-frontends-1.md │ ├── micro-frontends-2.md │ ├── micro-frontends-3.md │ ├── micro-frontends-4.md │ ├── millions-of-active-websockets-with-node-js.md │ ├── minimize-for-loop-usage-in-python.md │ ├── mistakes-weve-drawn-a-few.md │ ├── misunderstanding-es6-modules-upgrading-babel-tears-and-a-solution.md │ ├── ml-kit-tutorial-for-ios-recognizing-text-in-images.md │ ├── mobile-apps-capacitor-vue-js.md │ ├── modern-script-loading.md │ ├── more-reasons-why-developers-should-blog.md │ ├── mosby3-mvi-7.md │ ├── motion-design-doesnt-have-to-be-hard.md │ ├── moving-to-three-person-engineering-teams.md │ ├── mvc-mvp-mvvm-clean-viper-redux-mvi-prnsaaspfruicc-building-abstractions-for-the-sake-of-building.md │ ├── mvp-for-android.md │ ├── mvvm-rxswift-on-ios-part-1.md │ ├── my-personal-git-tricks-cheatsheet.md │ ├── naive-bayes-classifier-sklearn-python-example-tips.md │ ├── native-image-lazy-loading-for-the-web.md │ ├── native-web-components.md │ ├── natural-language-processing-is-fun.md │ ├── nestjs-basic-auth-and-sessions.md │ ├── new-node-js-features.md │ ├── next-generation-package-management.md │ ├── node-js-can-http-2-push.md │ ├── nodejs-express-api-markdown-html.md │ ├── nodejs-jwt-authentication-oauth.md │ ├── normalization-vs-standardization-quantitative-analysis.md │ ├── object-detection-metrics.md │ ├── offline-first.md │ ├── offline-graphql-queries-with-redux-offline-and-apollo.md │ ├── on-engineers-and-influence.md │ ├── one-year-with-flutter-my-experience.md │ ├── open-source-doesnt-make-money-by-design.md │ ├── operating-a-high-scale-distributed-system.md │ ├── optimal-control-lqr.md │ ├── optimize-enterprise-scale-node-js.md │ ├── optimizing-a-static-site.md │ ├── optimizing-mp4-video-for-fast-streaming.md │ ├── optimizing-webpack-for-faster-react-builds.md │ ├── our-learnings-from-adopting-graphql.md │ ├── out-of-depth-with-flutter.md │ ├── oxidizing-source-maps-with-rust-and-webassembly.md │ ├── pandas-dtypes.md │ ├── parallel-streaming-of-progressive-images.md │ ├── parsing-complex-json-in-flutter.md │ ├── parsing-drugbank-xml-or-any-large-xml-file-in-streaming-mode-in-go.md │ ├── part-of-speech-tagging-tutorial-with-the-keras-deep-learning-library.md │ ├── password-hashing-pbkdf2-scrypt-bcrypt-and-argon2.md │ ├── password-reset-emails-in-your-react-app-made-easy-with-nodemailer.md │ ├── patterns-generic-repository-with-typescript-and-node-js.md │ ├── performance-under-load.md │ ├── performant-javascript-best-practices.md │ ├── picking-apart-stackoverflow-what-bugs-developers-the-most.md │ ├── pika-web-a-future-without-webpack.md │ ├── plain-javascript-versions-of-lodash-array-filtering-and-manipulation-methods.md │ ├── planning-for-responsive-images.md │ ├── platforms-and-languages.md │ ├── playground-driven-development-in-swift.md │ ├── pluggable-slots-in-react-components.md │ ├── polymorphic-react-components.md │ ├── practical-flutter-my-personal-6-tips-for-newcomers.md │ ├── practical-mvvm-rxswift.md │ ├── practical-proguard-rules-examples.md │ ├── practical-rxjs-in-the-wild-requests-with-concatmap-vs-mergemap-vs-forkjoin.md │ ├── predicting-your-games-monetization-future.md │ ├── pro-pattern-matching-in-swift.md │ ├── product-management-mental-models-for-everyone.md │ ├── project-worlds-achieving-god-mode-in-digital-design.md │ ├── promoting-install-mobile.md │ ├── protected-routes-and-authentication-with-react-and-node-js.md │ ├── protecting-a-spring-boot-app-with-apache-shiro.md │ ├── protecting-users-with-tls-by-default-in.md │ ├── protecting-webview-with-safe-browsing.md │ ├── prototyping-animations-in-swift.md │ ├── providing-safe-and-secure-experience.md │ ├── publishing-machine-learning-api-with-python-flask.md │ ├── publishing-private-apps-just-got-easier.md │ ├── pwa-native-mobile-apps.md │ ├── python-architecture-stuff-do-we-need-more.md │ ├── python-big-data-airflow-jupyter-notebook-hadoop-3-hive-presto.md │ ├── python-data-cleaning-numpy-pandas.md │ ├── python-libraries-for-data-science-other-than-pandas-and-numpy.md │ ├── python-multithreading-vs-multiprocessing.md │ ├── rage-against-the-codebase-programmers-and-negativity.md │ ├── react-16-lifecycle-methods-how-and-when-to-use-them.md │ ├── react-for-linear-algebra-examples-grid-and-arrows.md │ ├── react-higher-order-components.md │ ├── react-hooks-not-magic-just-arrays.md │ ├── react-inline-functions-and-performance.md │ ├── react-native-a-retrospective-from-the-mobile-engineering-team-at-udacity.md │ ├── react-native-at-airbnb-the-technology.md │ ├── react-native-at-airbnb.md │ ├── react-native-bridge-for-ios-and-android.md │ ├── react-native-vs-flutter-which-is-more-startup-friendly.md │ ├── react-svg-icon-components.md │ ├── reactive-app-state-in-flutter.md │ ├── real-time-human-pose-estimation-in-the-browser-with-tensorflow-js.md │ ├── real-world-dynamic-programming-seam-carving.md │ ├── recommendation-woff-2012-12-13.md │ ├── redefining-data-visualization-at-google.md │ ├── reducing-dimensionality-from-dimensionality-reduction-techniques.md │ ├── redux-tutorial.md │ ├── regex-was-taking-5-days-flashtext-does-it-in-15-minutes.md │ ├── rel-noopener.md │ ├── representing-music-with-word2vec.md │ ├── responsive-design-ground-rules.md │ ├── retries-timeouts-backoff.md │ ├── reverse-engineering-how-you-can-build-a-test-library.md │ ├── room-coroutines.md │ ├── rules-for-autocomplete.md │ ├── running-flask-with-an-ssh-remote-python-interpreter.md │ ├── running-jupyter-notebooks-on-remote-servers.md │ ├── running-uitests-with-facebook-login-in-ios.md │ ├── rust-2018-is-here-but-what-is-it.md │ ├── rust-case-study-community-makes-rust-an-easy-choice-for-npm.md │ ├── scarcity-in-ux-the-psychological-bias-that-became-the-norm.md │ ├── scheduling-in-react.md │ ├── scrolling-and-attention.md │ ├── secrets-of-a-wsgi-master-pycon-2018.md │ ├── self-host-your-static-assets.md │ ├── semantic-segmentation-u-net-part-1.md │ ├── sending-web-push-notifications-from-node-js.md │ ├── separation-of-data-and-ui-in-your-web-app.md │ ├── serverless-api-with-go-and-aws-lambda.md │ ├── serverless-machine-learning-with-tensorflow-dot-js.md │ ├── sharing-databases-between-laravel-applications.md │ ├── shine-a-light-on-javascript-performance-with-lighthouse-1opf.md │ ├── should-you-learn-vim-as-a-developer-in-2020.md │ ├── simple-mailer-with-django.md │ ├── sketch-plugins-i-cant-live-without.md │ ├── slidable-a-flutter-story.md │ ├── slide-an-image-to-reveal-text-with-css-animations.md │ ├── sliding-in-and-out-of-vue-js.md │ ├── smacss-scalable-modular-architecture-css.md │ ├── small-websites-are-dying.md │ ├── software-below-the-poverty-line.md │ ├── software-roles-and-titles.md │ ├── solving-the-graph-theory-expenses-management.md │ ├── some-notes-about-http3.md │ ├── sorting-algorithms-in-python.md │ ├── spantastic-text-styling-with-spans.md │ ├── speech-recognition-deepspeech.md │ ├── speech-voice-translation-microsoft-dr.md │ ├── start-performance-budgeting.md │ ├── state-restoration-tutorial-getting-started.md │ ├── static-properties-in-javascript-with-inheritance.md │ ├── stop-using-default-exports-javascript-module.md │ ├── stop-using-everywhere.md │ ├── stopping-using-console-log-and-start-using-your-browsers-debugger.md │ ├── streams-for-the-win-a-performance-comparison-of-nodejs-methods-for-reading-large-datasets-pt-2.md │ ├── structuring-your-ios-app-for-split-testing.md │ ├── styled-components-magic-explained.md │ ├── styling-html-checkboxes-is-hard-heres-why.md │ ├── styling-modern-web-apps.md │ ├── subscriptions-101-for-android-apps.md │ ├── sunsetting-react-native.md │ ├── supercharging-your-app-development-speed-with-custom-file-templates.md │ ├── support-vector-machines-tutorial.md │ ├── survival-guide-for-new-developers.md │ ├── swift-5-exclusivity.md │ ├── swift-5-frozen-enums.md │ ├── swift-api-pollution.md │ ├── swift-avoiding-memory-leaks-by-examples.md │ ├── swift-code-formatters.md │ ├── swiftui-3d-scroll-effect.md │ ├── swiftui-animating-color-changes.md │ ├── swiftwebui.md │ ├── syslog-the-complete-system-administrator-guide.md │ ├── tab-bars-are-the-new-hamburger-menus.md │ ├── talking-django-async-pycon-2018.md │ ├── ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist.md │ ├── ten-things-you-didnt-know-about-webpagetest-org.md │ ├── testing-react-apps-with-cypress.md │ ├── testing-your-react-app-with-puppeteer-and-jest.md │ ├── the-10-statistical-techniques-data-scientists-need-to-master.md │ ├── the-4-types-of-why-what-is-the-driving-force-behind-your-product.md │ ├── the-4px-baseline-grid-the-present.md │ ├── the-6-most-desirable-coding-jobs-and-the-types-of-people-drawn-to-each.md │ ├── the-7-programming-languages-frameworks-to-learn-in-2020.md │ ├── the-80-20-guide-to-json-stringify-in-javascript.md │ ├── the-9-big-design-trends-of-2019.md │ ├── the-absolute-easiest-way-to-debug-node-js-with-vscode.md │ ├── the-algorithm-is-not-the-product.md │ ├── the-anatomy-of-a-frame.md │ ├── the-android-dev-summit-2018-app-instant-app-takeaways-open-source.md │ ├── the-art-of-system-performance-for-engineers.md │ ├── the-beginners-guide-to-contributing-to-a-github-project.md │ ├── the-best-database-as-a-service-solutions-of-2018.md │ ├── the-best-explanation-of-javascript-reactivity.md │ ├── the-c10k-problem.md │ ├── the-childrens-illustrated-guide-to-kubernetes.md │ ├── the-concepts-of-graphql.md │ ├── the-cost-of-javascript-in-2018.md │ ├── the-css-mindset.md │ ├── the-dao-of-immutability.md │ ├── the-definitive-guide-to-javascript-dates.md │ ├── the-design-system-decision-tree.md │ ├── the-economics-of-package-management-1.md │ ├── the-economics-of-package-management-2.md │ ├── the-evolution-of-the-design-from-ux-towards-personal-experience.md │ ├── the-fallacy-of-easy.md │ ├── the-forbidden-inline-attribute-in-swift.md │ ├── the-forgotten-history-of-oop.md │ ├── the-future-of-digital-product-design-is-about-human-empowerment.md │ ├── the-importance-of-design-qa-in-digital-product-design.md │ ├── the-importance-of-why-docs.md │ ├── the-introverts-guide-to-professional-development.md │ ├── the-javascript-developers-intro-to-crypto.md │ ├── the-love-hate-relationship-between-react-router-and-react-components.md │ ├── the-many-ways-to-include-css-in-javascript-applications.md │ ├── the-mistakes-i-made-as-a-beginner-programmer.md │ ├── the-most-famous-data-visualisation-ever-and-what-we-can-learn-from-it.md │ ├── the-most-uncommon-html5-tags.md │ ├── the-open-source-conundrum-how-do-we-keep-the-lights-on.md │ ├── the-open-source-project-nginx.md │ ├── the-perfect-javascript-unit-test.md │ ├── the-problem-with-web-components.md │ ├── the-publisher-subscriber-pattern-in-javascript.md │ ├── the-react-state-museum.md │ ├── the-ripple-effect-expanding-our-icon-design-system.md │ ├── the-rise-of-the-meta-designer.md │ ├── the-role-of-mobile-technology-in-improving-financial-health.md │ ├── the-simple-guide-to-server-side-rendering-react-with-styled-components.md │ ├── the-smart-ways-to-correct-mistakes-in-git.md │ ├── the-state-of-fluid-web-typography.md │ ├── the-state-of-graphql-by-reddit.md │ ├── the-state-of-web-browsers-2019-edition.md │ ├── the-state-of-web-browsers.md │ ├── the-story-of-css-grid-from-its-creators.md │ ├── the-trick-to-animating-the-dot-on-the-letter-i.md │ ├── the-typescript-tax.md │ ├── the-zen-of-erlang-1.md │ ├── the-zen-of-erlang-2.md │ ├── things-about-react-native-i-found-the-hard-but-rewarding-way.md │ ├── things-nobody-ever-taught-me-about-css.md │ ├── this-is-how-to-plan-a-day.md │ ├── this-is-why-we-need-to-bind-event-handlers-in-class-components-in-react.md │ ├── this-keyword-call-apply-bind-javascript.md │ ├── this-one-line-of-javascript-made-ft-com-10-times-slower.md │ ├── threads-in-rust.md │ ├── three-input-element-properties-that-i-discovered-while-reading-mdn.md │ ├── time-series-analysis-in-python-an-introduction.md │ ├── time-series-analysis-visualization-forecasting-with-lstm.md │ ├── time-series-anomaly-detection-algorithms.md │ ├── time-series-of-price-anomaly-detection.md │ ├── time-series-prediction-using-recurrent-neural-networks-lstms.md │ ├── tips-to-use-VSCode-more-efficiently.md │ ├── to-grid-or-to-flex.md │ ├── to-yarn-and-back-again-npm.md │ ├── top-7-modern-programming-language-to-learn-now.md │ ├── top-javascript-frameworks-and-topics-to-learn-in-2019.md │ ├── top-react-and-redux-packages-for-faster-development.md │ ├── tracing-or-debugging-vue-js-reactivity-the-computed-tree.md │ ├── transducers-efficient-data-processing-pipelines-in-javascript.md │ ├── trick-out-your-terminal-in-10-minutes-or-less.md │ ├── trying-out-dask-dataframes-in-python-for-fast-data-analysis-in-parallel.md │ ├── tslint-in-2019.md │ ├── tuple-unpacking-improves-python-code-readability.md │ ├── tutorial-write-a-shell-in-c.md │ ├── typescript-3-0-the-unknown-type.md │ ├── typescript-impossible-states-irrepresentable.md │ ├── typescript-with-babel-a-beautiful-marriage.md │ ├── un-places-to-learn-css-layout-part-2-grid-layout.md │ ├── under-the-hood-of-reacts-hooks-system.md │ ├── underspanding-spans.md │ ├── understanding-a-performance-issue-with-polymorphic-json-data.md │ ├── understanding-androids-vector-image-format-vectordrawable.md │ ├── understanding-apache-airflows-key-concepts.md │ ├── understanding-asynchronous-javascript-the-event-loop.md │ ├── understanding-compilers-for-humans-version-2.md │ ├── understanding-database-sharding.md │ ├── understanding-execution-context-and-execution-stack-in-javascript.md │ ├── understanding-higher-order-components-in-react.md │ ├── understanding-javascript-async-and-await-with-examples.md │ ├── understanding-javascript-memory-management-using-garbage-collection.md │ ├── understanding-mixins-in-vue-js.md │ ├── understanding-operator-co-await.md │ ├── understanding-python-bytecode-pycon-2018.md │ ├── understanding-react-render-props-and-hoc.md │ ├── understanding-recursion.md │ ├── understanding-service-workers-and-caching-strategies.md │ ├── understanding-undefined-and-preventing-referenceerrors.md │ ├── understanding-webviews.md │ ├── unidirectional-user-interface-architectures.md │ ├── unit-testing-react-components.md │ ├── unpacking-hoisting.md │ ├── unsupervised-learning-with-python.md │ ├── use-web-workers-for-your-event-listeners.md │ ├── user-experience-mapping-alice-emma-walker.md │ ├── userland-api-monitoring-and-code-injection-detection.md │ ├── using-behavioural-economics-to-convey-the-value-of-paid-app-subscriptions.md │ ├── using-closest-to-return-the-correct-dom-element.md │ ├── using-errors-as-control-flow-in-swift.md │ ├── using-iphone-x-maya-quick-cheap-facial-capture.md │ ├── using-lstms-for-stock-market-predictions-tensorflow.md │ ├── using-multiple-camera-streams-simultaneously.md │ ├── using-node-js-to-read-really-really-large-files-pt-1.md │ ├── using-proxy-to-track-javascript-class.md │ ├── using-vector-assets-in-android-apps.md │ ├── using-what-if-tool-to-investigate-machine-learning-models.md │ ├── using-workers-to-make-static-sites-dynamic.md │ ├── ux-design-practices-how-to-make-web-interface-scannable.md │ ├── value-oriented-programming.md │ ├── video-streaming-with-flask.md │ ├── visualising-machine-learning-datasets-with-googles-facets.md │ ├── vue-js-considerations-and-tricks.md │ ├── vue-router-the-missing-manual.md │ ├── vuejs-3-0-0-beta-features-im-excited-about.md │ ├── vuejs-or-react-which-you-would-chose-and-why.md │ ├── vuex-perfect-interface-frontend-backend.md │ ├── warning-your-programming-career.md │ ├── watchos-5-wish-list.md │ ├── web-architecture-101.md │ ├── web-components-in-2018.md │ ├── web-scraping-with-puppeteer-in-node-js.md │ ├── webapks-on-android.md │ ├── webassembly-why-and-how-to-use-it.md │ ├── websockets-vs-long-polling.md │ ├── were-nearing-the-7-0-babel-release-here-s-all-the-cool-stuff-we-ve-been-doing.md │ ├── what-5-years-of-a-relationships-messages-look-like.md │ ├── what-are-javascript-generators-and-how-to-use-them.md │ ├── what-do-flutter-package-users-need-findings-from-q2-user-survey.md │ ├── what-even-are-flutter-widgets.md │ ├── what-hooks-mean-for-vue.md │ ├── what-i-wish-i-knew-when-i-started-to-work-with-react-js.md │ ├── what-is-a-python-core-developer-pycon-2018.md │ ├── what-is-accessibility-and-why-is-it-crucial-for-your-users-experience.md │ ├── what-is-google-tag-manager-and-why-use-it.md │ ├── what-is-modular-css.md │ ├── what-is-progressive-enhancement-and-why-it-matters.md │ ├── what-is-this-the-inner-workings-of-javascript-objects.md │ ├── what-it-was-like-to-write-a-full-blown-flutter-app.md │ ├── what-on-earth-is-the-shadow-dom-and-why-it-matters.md │ ├── what-replaces-javascript.md │ ├── what-tools-do-you-need-to-do-devops.md │ ├── what-we-learned-migrating-off-cron-to-airflow.md │ ├── what-we-ve-learned-about-hiring-engineering-managers.md │ ├── whats-coming-up-in-javascript-2018-async-generators-better-regex.md │ ├── whats-going-on-in-that-front-end-head.md │ ├── whats-new-in-php-7-4-top-10-features-that-you-need-to-know.md │ ├── whats-new-in-swift-5-0.md │ ├── whats-next-for-mobile-at-airbnb.md │ ├── whats-the-difference-between-dogs-html-and-dogs-html.md │ ├── when-a-rewrite-isnt-rebuilding-slack-on-the-desktop.md │ ├── when-every-product-of-design-is-one-of-opinion.md │ ├── when-to-standardize-your-data.md │ ├── when-workers.md │ ├── which-deep-learning-framework-is-growing-fastest.md │ ├── why-ai-is-here-to-stay.md │ ├── why-coding-your-own-makes-you-a-better-developer.md │ ├── why-designers-hate-politics-and-what-to-do-about-it.md │ ├── why-every-android-developer-should-try-out-flutter.md │ ├── why-flutter-will-change-mobile-development-for-the-best.md │ ├── why-i-write-css-in-javascript.md │ ├── why-is-front-end-development-so-unstable.md │ ├── why-is-object-immutability-important.md │ ├── why-isnt-x-a-hook.md │ ├── why-machine-learning-matters.md │ ├── why-math-max-is-less-than-math-min-in-javascript.md │ ├── why-one-hot-encode-data-in-machine-learning.md │ ├── why-robinhood-uses-airflow.md │ ├── why-should-you-learn-go.md │ ├── why-svelte-wont-kill-react.md │ ├── why-ux-and-ui-should-remain-separate.md │ ├── why-we-need-web-3-0.md │ ├── why-were-bullish-on-crypto-collectibles-nfts.md │ ├── why-were-switching-to-grpc.md │ ├── why-you-should-give-flutter-some-of-your-attention.md │ ├── why-you-should-leave-react-for-vue-and-never-use-it-again.md │ ├── why-you-should-replace-foreach.md │ ├── why-you-should-totally-switch-to-kotlin.md │ ├── why-your-app-should-be-optimized-for-screen-of-all-sizes.md │ ├── widget-state-context-inheritedwidget.md │ ├── will-node-js-forever-be-the-sluggish-golang.md │ ├── windows-insets-fragment-transitions.md │ ├── wireframes-are-becoming-less-relevant-and-thats-a-good-thing.md │ ├── workmanager-basics.md │ ├── write-once-run-everywhere-tests-on-android.md │ ├── writing-a-compiler-in-rust.md │ ├── writing-a-dumb-icon-flutter-package.md │ ├── writing-a-killer-software-engineering-resume.md │ ├── writing-a-microservice-in-rust.md │ ├── writing-a-web-server-node.md │ ├── writing-cleaner-view-code-by-overriding-loadview.md │ ├── writing-network-layer-in-swift-protocol-oriented-approach.md │ ├── wwdc-2018-rumors-ios-12-new-macbook-air-ipad-pro-homepod.md │ ├── xcode-and-lldb-advanced-debugging-tutorial-part-1.md │ ├── xcode-and-lldb-advanced-debugging-tutorial-part-2.md │ ├── xcode-and-lldb-advanced-debugging-tutorial-part-3.md │ ├── xgboost-algorithm-long-may-she-reign.md │ ├── yarn-vs-npm-everything-you-need-to-know.md │ ├── you-should-never-ever-run-directly-against-node-js-in-production-maybe.md │ ├── your-first-cli-tool-with-rust.md │ ├── zero-to-one-with-flutter-part-two.md │ └── zero-to-one-with-flutter.md ├── a-new-post-template.md ├── algorithm.md ├── android.md ├── article/ │ ├── 2020/ │ │ ├── 10-awesome-chrome-flags-you-should-enable-right-now.md │ │ ├── 10-best-practices-for-improving-your-css.md │ │ ├── 10-tips-shortcuts-you-should-be-using-right-now-on-xcode.md │ │ ├── 14-javascript-code-optimization-tips-for-front-end-developers.md │ │ ├── 15-vscode-extensions-every-web-developer-must-have-in-2021.md │ │ ├── 3-essential-questions-about-hashable-in-python.md │ │ ├── 4-options-for-using-mongodb-with-business-intelligence.md │ │ ├── 4-useful-javascript-design-patterns-you-should-know.md │ │ ├── 4-ways-to-communicate-across-browser-tabs-in-realtime.md │ │ ├── 5-chrome-extensions-for-developers-productivity.md │ │ ├── 5-lesser-known-features-of-chrome-devtools.md │ │ ├── 5-reasons-to-choose-pwa-for-your-web-and-mobile-apps.md │ │ ├── 5-reasons-why-you-should-use-svelte-for-front-end-development-in-2021.md │ │ ├── 5-string-manipulation-libraries-for-javascript.md │ │ ├── 5-tips-for-better-typescript-code.md │ │ ├── 5-types-of-arguments-in-python-function-definition.md │ │ ├── 5-useful-things-the-spread-operator-can-do-in-javascript.md │ │ ├── 6-months-of-using-graphql.md │ │ ├── 6-things-to-know-to-get-started-with-python-data-classes.md │ │ ├── 6-ways-to-speed-up-your-vue-js-application.md │ │ ├── 7-helpful-time-complexities.md │ │ ├── 7-modules-you-can-use-right-now-to-build-your-first-deno-web-app.md │ │ ├── 8-scss-best-practices-to-keep-in-mind.md │ │ ├── 8-unheard-of-browser-apis-you-should-be-aware-of.md │ │ ├── Damn-Cool-Algorithms-Log-structured-storage.md │ │ ├── Stale-props-and-zombie-children-in-Redux.md │ │ ├── a-complete-introduction-to-webassembly-and-its-javascript-api.md │ │ ├── a-comprehensive-guide-to-slices-in-golang.md │ │ ├── a-high-level-overview-of-load-balancing-algorithms.md │ │ ├── abstract-data-types-and-the-software-crisis.md │ │ ├── adaptive-video-with-css-math.md │ │ ├── applications-of-some-of-the-famous-algorithms.md │ │ ├── aspect-oriented-programming-in-javascript.md │ │ ├── auto-documenting-a-python-project-using-sphinx.md │ │ ├── avoiding-memory-leaks-in-nodejs-best-practices-for-performance.md │ │ ├── best-features-of-es2017-async-functions-and-arrays-and-shared-buffers.md │ │ ├── best-static-site-generators-for-vue-js.md │ │ ├── better-composition-in-vue.md │ │ ├── big-data-lambda-architecture-in-a-nutshell.md │ │ ├── build-a-graphql-server-with-spring-boot-and-mysql.md │ │ ├── build-a-server-driven-ui-using-ui-components-in-swiftui.md │ │ ├── building-a-design-system-and-a-component-library.md │ │ ├── building-and-monitoring-your-first-github-actions-workflow.md │ │ ├── building-crud-apis-using-deno-and-oak.md │ │ ├── clamp-for-responsive-design.md │ │ ├── code-coverage-vue-cypress.md │ │ ├── color-scales-in-javascript-with-chroma-js.md │ │ ├── comparing-api-architectural-styles-soap-vs-rest-vs-graphql-vs-rpc.md │ │ ├── create-a-private-postgresql-database-for-your-development-environment-in-seconds.md │ │ ├── create-your-own-camscanner-using-python-opencv.md │ │ ├── creating-a-menu-image-animation-on-hover.md │ │ ├── css-fix-for-100vh-in-mobile-webkit.md │ │ ├── dark-theme-a-modern-ui-design.md │ │ ├── deepspeed-extreme-scale-model-training-for-everyone.md │ │ ├── demoforbeginner-what-is-wsgi.md │ │ ├── demystifying-the-0-1-knapsack-problem.md │ │ ├── design-patterns-structural-patterns-of-design-classes-and-objects.md │ │ ├── detect-faces-texts-and-even-barcodes-with-chromes-shape-detection-api.md │ │ ├── diverse-mini-batch-active-learning-a-reproduction-exercise.md │ │ ├── easy-dark-mode-switch-with-react-and-localstorage-3k6d.md │ │ ├── enhance-javascript-security-with-content-security-policies.md │ │ ├── es2020-optional-chaining-and-dynamic-imports-are-game-changers-heres-why.md │ │ ├── example-of-a-machine-learning-algorithm-to-predict-spam-emails-in-python.md │ │ ├── exciting-features-of-javascript-es2021-es12.md │ │ ├── exploring-constraintlayout-2-0-in-android.md │ │ ├── flutter-may-or-may-not-be-the-next-big-thing-but-kotlin-multiplatform-is-here-to-stay.md │ │ ├── from-monolith-to-microservices-in-5-minutes.md │ │ ├── from-scratch-to-the-first-10-customers-how-i-designed-and-launched-a-saas-product.md │ │ ├── function-in-javascript-has-much-more-secrets-than-you-think.md │ │ ├── functional-programming-explained-in-python-javascript-and-java.md │ │ ├── fundamentals-of-caching-web-applications.md │ │ ├── garbage-collection-in-python.md │ │ ├── generators-in-javascript-when-should-i-use-yield-and-yield.md │ │ ├── github-package-registry-is-it-worth-trying-out.md │ │ ├── greedy-algorithms-101.md │ │ ├── handling-location-permissions-in-ios-14.md │ │ ├── hiding-data-in-an-image-image-steganography-using-python.md │ │ ├── how-and-why-you-should-avoid-cors-in-single-page-apps.md │ │ ├── how-i-increased-our-web-performance-by-422.md │ │ ├── how-i-learned-sass-in-20-hours-and-why-you-should-too.md │ │ ├── how-powerful-are-graph-convolutions-review-of-kipf-welling.md │ │ ├── how-to-avoid-wifi-throttling-on-android-devices.md │ │ ├── how-to-become-a-google-developer-expert-gde-a-practical-guide.md │ │ ├── how-to-build-a-recommendation-system-in-a-graph-database-using-a-latent-factor-model.md │ │ ├── how-to-build-redux.md │ │ ├── how-to-create-a-reusable-web-scraper.md │ │ ├── how-to-create-charts-from-external-data-sources-with-d3-js.md │ │ ├── how-to-generate-random-text-captchas-using-python.md │ │ ├── how-to-handle-comparison-corner-cases.md │ │ ├── how-to-hide-secrets-in-strings-modern-text-hiding-in-javascript.md │ │ ├── how-to-simulate-a-udp-flood-dos-attack-on-your-computer.md │ │ ├── how-to-use-cookies-for-persisting-users-in-nextjs.md │ │ ├── how-to-useref-to-fix-react-performance-issues.md │ │ ├── how-to-write-clean-code-lessons-learnt-from-the-clean-code-robert-c-martin.md │ │ ├── how-to-write-log-files-that-save-you-hours-of-time.md │ │ ├── hunting-for-the-optimal-automl-library.md │ │ ├── i-built-the-same-api-with-without-express-here-are-the-differences.md │ │ ├── identify-well-connected-users-in-a-network.md │ │ ├── implementing-heaps-in-javascript.md │ │ ├── implementing-monte-carlo-tree-search-in-node-js.md │ │ ├── improve-mongodb-performance-using-projection.md │ │ ├── improve-page-rendering-speed-using-only-css.md │ │ ├── improving-massively-imbalanced-datasets-in-machine-learning-with-synthetic-data.md │ │ ├── incremental-vs-virtual-dom.md │ │ ├── inheritance-vs-composition-which-is-better-for-your-javascript-project.md │ │ ├── interactive-webgl-hover-effects.md │ │ ├── introduction-to-blitz-js.md │ │ ├── is-deno-a-threat-to-node.md │ │ ├── is-deno-already-dead.md │ │ ├── is-virtual-dom-derived-from-document-fragments.md │ │ ├── javascript-decorators-from-scratch.md │ │ ├── javascript-engines-an-overview.md │ │ ├── javascript-proxies.md │ │ ├── javascript-tips-child-constructors-text-selection-inline-workers-and-more.md │ │ ├── latest-features-javascript-ecmascript-2020.md │ │ ├── learn-about-swiftui-text-and-label-in-ios-14.md │ │ ├── loving-graphql-more-than-rest.md │ │ ├── lsm.md │ │ ├── making-neural-networks-smaller-for-better-deployment.md │ │ ├── master-python-lambda-functions-with-these-4-donts.md │ │ ├── mastering-javascript-es6-symbols.md │ │ ├── microservices-the-right-solution-for-you.md │ │ ├── monolith-vs-micro-frontend.md │ │ ├── mood-talk-tell-how-you-feel-to-others-who-face-the-same-challenges.md │ │ ├── mvc-vs-mvp-vs-mvvm.md │ │ ├── mvvm-in-swift-infinite-scrolling-and-image-loading.md │ │ ├── my-experiences-with-api-gateways.md │ │ ├── my-favorite-javascript-tips-and-tricks.md │ │ ├── my-react-components-render-twice-and-drive-me-crazy.md │ │ ├── my-website-now-loads-in-less-than-2-sec-here-s-how-i-did-it-hoj.md │ │ ├── natural-language-processing-in-the-browser.md │ │ ├── nextjs-vs-nuxtjs-vs-gatsbyjs.md │ │ ├── object-freeze-vs-object-seal-immutability.md │ │ ├── on-let-vs-const.md │ │ ├── one-of-the-first-things-to-understand-in-javascript-immutability.md │ │ ├── operator-overloading-in-python.md │ │ ├── optimization-in-python-interning.md │ │ ├── packaging-a-ui-library-for-distribution.md │ │ ├── page-lifecycle-api-a-browser-api-every-frontend-developer-should-know.md │ │ ├── pagetabviewstyle-in-swiftui.md │ │ ├── performance-analysis-tools-for-front-end-development.md │ │ ├── performance-metrics-for-front-end-applications.md │ │ ├── python-smart-coding-with-locals-and-global.md │ │ ├── react-native-vs-flutter-vs-ionic.md │ │ ├── react-vs-sveltejs-the-war-between-virtual-and-real-dom.md │ │ ├── responsive-font-size-using-vanilla-css.md │ │ ├── rethinking-the-front-end-micro-frontend.md │ │ ├── rust-wasm-yew-single-page-application.md │ │ ├── safe-recursion-with-trampoline-in-javascript.md │ │ ├── safe-unsafe-alignment-in-css-flexbox.md │ │ ├── sandboxed-iframes.md │ │ ├── schema-org-the-popular-web-standard-youve-never-heard-of.md │ │ ├── security-best-practices-for-nodejs.md │ │ ├── solving-word-hunt-in-python-the-trie.md │ │ ├── some-arbitrary-number-of-lesser-known-graphql-features.md │ │ ├── swiftui-cheat-sheet.md │ │ ├── swiftui-dark-mode-the-easiest-way.md │ │ ├── the-10-best-and-most-liked-flutter-packages.md │ │ ├── the-anatomy-of-a-machine-learning-system-design-interview-question.md │ │ ├── the-beginners-guide-to-elasticsearch.md │ │ ├── the-dos-and-don-ts-of-python-list-comprehension.md │ │ ├── the-law-of-demeter.md │ │ ├── the-limits-of-knowledge.md │ │ ├── the-world-needs-web-accessibility-now-more-than-ever.md │ │ ├── top-image-lazy-loading-libraries-for-javascript.md │ │ ├── tutorial-on-python-logging.md │ │ ├── typescript-4-0-i-want-a-list-of-generic-params-with-good-labels.md │ │ ├── typescript-the-value-of-a-good-generic.md │ │ ├── typescripts-never-type.md │ │ ├── ui-cheat-sheet-pagination-infinite-scroll-and-the-load-more-button.md │ │ ├── uikit-or-swiftui-which-should-you-use-in-production.md │ │ ├── understand-the-deflate-compression-behind-the-zip-and-gzip-formats.md │ │ ├── understanding-modules-and-import-and-export-statements-in-javascript.md │ │ ├── understanding-react-portals.md │ │ ├── understanding-the-web-history-api-in-javascript.md │ │ ├── understanding-why-a-database-deadlock-occurs.md │ │ ├── unexpected-app-crashes-on-android-and-how-to-deal-with-them.md │ │ ├── use-the-latest-javascript-features-in-any-browser.md │ │ ├── user-defaults-in-swift.md │ │ ├── user-tracking-with-css-only.md │ │ ├── using-hashed-vs-nonhashed-url-paths-in-single-page-apps.md │ │ ├── using-json-stringify-to-work-with-javascript-object.md │ │ ├── using-service-workers-with-react.md │ │ ├── ux-case-study-koinstreet-homepage-redesign.md │ │ ├── vue-plugins-you-dont-know-you-may-need.md │ │ ├── web-locks-api-cross-tab-resource-synchronization.md │ │ ├── what-does-serverless-actually-mean.md │ │ ├── what-makes-a-good-github-profile.md │ │ ├── what-to-expect-in-python-3-9.md │ │ ├── whats-new-in-swift-5-3.md │ │ ├── which-should-you-use-asynchronous-programming-or-multi-threading.md │ │ ├── why-color-is-key-for-data-visualization-and-how-to-use-it.md │ │ ├── why-deno-is-perfectly-ready-to-take-over-node-js-now.md │ │ ├── why-is-my-data-drifting.md │ │ ├── why-you-should-make-your-code-as-simple-as-possible.md │ │ ├── widgets-on-ios.md │ │ ├── will-ubuntu-20-04-steal-more-windows-users.md │ │ ├── will-webtransport-replace-webrtc-in-near-future.md │ │ ├── working-with-emoji-in-swift.md │ │ ├── write-cleaner-code-by-using-javascript-destructuring.md │ │ └── writing-tetris-in-python.md │ ├── 2021/ │ │ ├── 10-awesome-things-you-can-do-with-github-dev.md │ │ ├── 10-years-of-open-source-visualization.md │ │ ├── 100-tips-on-software-developer-productivity.md │ │ ├── 11-easy-ui-design-tips-for-web-devs-j3j.md │ │ ├── 11-rare-javascript-one-liners-that-will-amaze-you.md │ │ ├── 16px-or-larger-text-prevents-ios-form-zoom.md │ │ ├── 1993-cgi-scripts-and-early-server-side-web-programming.md │ │ ├── 20-go-packages-you-can-use-in-your-next-project.md │ │ ├── 2021-03-15-highlights-from-git-2-31.md │ │ ├── 3-fallback-techniques-to-support-css-grid-in-any-browser.md │ │ ├── 3-uncommon-bash-tricks-that-you-should-know.md │ │ ├── 34-javascript-optimization-techniques-to-know-in-2021.md │ │ ├── 4-security-concerns-with-iframes-every-web-developer-should-know.md │ │ ├── 4-ways-to-reduce-cors-preflight-time-in-web-apps.md │ │ ├── 5-Reasons-to-Switch-from-React-to-Next-js.md │ │ ├── 5-advanced-typescript-tips-to-make-you-a-better-programmer.md │ │ ├── 5-css-practices-to-avoid-as-a-web-developer.md │ │ ├── 5-kotlin-extensions-to-make-your-android-code-more-expressive.md │ │ ├── 5-misconceptions-about-design-systems.md │ │ ├── 5-reasons-why-Deno-will-stop-using-TypeScript- StartFunction.md │ │ ├── 5-reasons-why-flutter-is-better-than-react-native.md │ │ ├── 5-strategies-to-reduce-frontend-build-time-with-ci-cd.md │ │ ├── 5-string-manipulation-libraries-for-javascript.md │ │ ├── 6-alternatives-to-classes-in-python.md │ │ ├── 6-amazing-free-tools-that-will-save-you-some-time-when-u-are-building-websites-especially-for-non-designer-developers.md │ │ ├── 6-css-properties-nobody-is-talking-about.md │ │ ├── 6-regrets-i-have-as-a-react-developer.md │ │ ├── 7-JavaScript-Fundamentals-Every-Web-Developer-Should-Know.md │ │ ├── 9-distance-measures-in-data-science.md │ │ ├── About-Async-Iterators-in-Node.js.md │ │ ├── Algorithms-in-JavaScript-with-visual-examples.md │ │ ├── Angular-vs-React-vs-Vue-Which-Framework-is-Best-in-2021.md │ │ ├── Announcing-Dart-2-12.md │ │ ├── Building-an-SQL-Database-Audit-System-Using-Kafka,-MongoDB-and-Maxwell's-Daemon.md │ │ ├── Case-Study-Building-a-Mobile-Game-with-Dart-and-Flutter.md │ │ ├── Common-Anti-Patterns-in-Go.md │ │ ├── Decoding-Django-Sessions-in-PostgreSQL.md │ │ ├── Deno-1-8-Release-Notes.md │ │ ├── Go-developer-survey-2020-results.md │ │ ├── Interview-with-Ryan-Dahl-Creator-of-Node-js.md │ │ ├── Monitor-Spring-Boot-microservices.md │ │ ├── NumPy-1-20-Released-with-Runtime-SIMD-Support-and-Type-Annotations.md │ │ ├── Part-Of-Why-I-Think-React-Is-Junk.md │ │ ├── RabbitMQ-and-SpringBoot-for-Real-Time-Messaging.md │ │ ├── Rust-1.51.0.md │ │ ├── Rust-in-production-at-Figma.md │ │ ├── The-End-of-Applets.md │ │ ├── The-RedMonk-Programming-Language-Rankings-January-2021.md │ │ ├── Tutorial-Building-a-D3-js-Calendar-Heatmap.md │ │ ├── Typescript-4-2-Released-Improves-Types-and-Developer-Experience.md │ │ ├── Web-Performance-for-Product-Managers.md │ │ ├── a-beginners-guide-to-memoization-with-javascript.md │ │ ├── a-case-for-compile-to-javascript-interface-frameworks.md │ │ ├── a-complete-guide-of-node-js-buffer.md │ │ ├── a-deep-dive-into-actors-in-swift-5-5.md │ │ ├── a-deep-dive-into-javascript-modules.md │ │ ├── a-laymans-intro-to-quantum-computers.md │ │ ├── a-new-standard-for-mobile-app-security.md │ │ ├── a-review-of-javascript-testing-frameworks-in-2021.md │ │ ├── adding-a-unique-constraint-in-an-online-way.md │ │ ├── advanced-python-how-to-implement-caching-in-python-application.md │ │ ├── ai-in-content-marketing.md │ │ ├── all-you-need-to-know-about-higher-order-functions-in-javascript.md │ │ ├── an-introduction-to-jetpack-compose-for-desktop.md │ │ ├── android-new-features-spring-2021.md │ │ ├── android-startup-tip-dont-use-kotlin-coroutines.md │ │ ├── announcing-react-native-0.64-with-hermes-on-ios.md │ │ ├── announcing-the-new-typescript-handbook.md │ │ ├── apis-vs-websockets-vs-webhooks-what-to-choose.md │ │ ├── apple-announces-june-7-start-date-for-wwdc-2021.md │ │ ├── authorization-and-authentication-for-everyone.md │ │ ├── auto-generated-social-media-images.md │ │ ├── avoid-trusting-const-in-javascript.md │ │ ├── bash-if-else-statement.md │ │ ├── better-privacy-with-chromiums-privacy-sandbox.md │ │ ├── brown-green-language.md │ │ ├── build-an-article-recommendation-engine-with-ai-ml.md │ │ ├── building-a-map-of-your-python-project-using-graph-technology-visualize-your-code.md │ │ ├── building-a-reactive-architecture-around-redis.md │ │ ├── building-a-read-through-cache-using-cdn.md │ │ ├── built-in-explicit-animations-in-flutter.md │ │ ├── chrome-90-beta-av1-encoder-for-webrtc.md │ │ ├── chrome-93-multi-screen-window-placement.md │ │ ├── common-social-engineering-attack-strategies.md │ │ ├── creating-stylesheet-feature-flags-with-sass-default.md │ │ ├── creating_colorful_smart_shadows.md │ │ ├── cross-site-scripting.md │ │ ├── csrf-attacks.md │ │ ├── css-is-magic-its-time-you-try-3d.md │ │ ├── custom-state-pseudo-classes-in-chrome.md │ │ ├── deconstructing-the-iconic-apple-watch-bubble-ui.md │ │ ├── deep-dive-cors-history-how-it-works-best-practices.md │ │ ├── deepmind-NFNets-deep-learning.md │ │ ├── demystify-graph-coloring-algorithms.md │ │ ├── demystifying-java-lambda-expressions.md │ │ ├── dependency-injection-in-typescript.md │ │ ├── developer-tooling-for-kubernetes-in-2021-helm-kust.md │ │ ├── directory-traversal.md │ │ ├── distributed-tracing-matters.md │ │ ├── dont-let-carousels-kill-your-application.md │ │ ├── dont-run-benchmarks-on-a-debuggable-android-app-like-i-did.md │ │ ├── dont-show-me-your-design-portfolio.md │ │ ├── dropbox-reveals-Atlas.md │ │ ├── ensure-javascript-code-quality-with-husky-and-hooks.md │ │ ├── event-bubbling-and-capturing-in-javascript.md │ │ ├── everything-about-the-latest-ecmascript-release-ecmascript-2021.md │ │ ├── expert-hackers-used-11-zerodays-to-infect-windows-ios-and-android-users.md │ │ ├── exploring-android-12-splash-screen.md │ │ ├── ffmpeg-webassembly.md │ │ ├── flutter-animation-creating-mediums-clap-animation-in-flutter.md │ │ ├── flutter-creating-elegant-uis-with-containers.md │ │ ├── flutter-quote-app.md │ │ ├── from-rxjava-2-to-kotlin-flow-threading.md │ │ ├── gcp-healthcare-consent-api.md │ │ ├── getting-started-with-sqldelight-in-android-development.md │ │ ├── google-ai-chip-design.md │ │ ├── google-microsoft-attack-open-web-online-news-australia-laws.md │ │ ├── google-oss-fuzz-extends-fuzzing-to-java-apps.md │ │ ├── grafana-managed-observability.md │ │ ├── graph-data-structure-implementation-in-javascript.md │ │ ├── heres-a-list-of-technologies-i-wasted-my-time-learning-as-a-web-developer.md │ │ ├── heres-exactly-what-you-need-to-know-about-apple-s-app-tracking-transparency.md │ │ ├── hex-vs-rgb-vs-hsl-what-is-the-best-method-to-set-css-color-property.md │ │ ├── hookrouter-a-modern-approach-to-react-routing.md │ │ ├── how-a-cache-stampede-caused-one-of-facebooks-biggest-outages.md │ │ ├── how-an-anti-typescript-javascript-developer-like-me-became-a-typescript-fan.md │ │ ├── how-dagger-hilt-and-koin-differ-under-the-hood.md │ │ ├── how-do-you-create-an-efficient-data-structure-for-spatial-indexing.md │ │ ├── how-github-actions-renders-large-scale-logs.md │ │ ├── how-its-made-i-o-photo-booth.md │ │ ├── how-to-do-multithreading-with-node-js.md │ │ ├── how-to-implement-a-graphql-api-on-top-of-an-existing-rest-api.md │ │ ├── how-to-slow-down-a-for-loop-in-javascript.md │ │ ├── how-to-use-indexeddb-a-nosql-db-on-the-browser.md │ │ ├── http-strict-transport-security-faqs.md │ │ ├── i-cant-believe-it-s-not-better-active-learning-flavor.md │ │ ├── i-got-into-mit-refused-the-offer-and-still-became-a-highly-valued-developer.md │ │ ├── ibm-12-project-debater-api.md │ │ ├── imagining-native-skip-link.md │ │ ├── importing-json-modules-in-typescript.md │ │ ├── improving-firefox-stability-on-linux.md │ │ ├── improving-node-application-performance-with-clustering.md │ │ ├── introducing-page-shield.md │ │ ├── introduction-to-creating-interpreter-using-python.md │ │ ├── is-css-a-programming-language.md │ │ ├── is-it-the-beginning-of-the-end-for-pwas.md │ │ ├── javascript-symbols-the-most-misunderstood-feature-of-the-language.md │ │ ├── javascript-temporal-api-a-fix-for-the-date-api.md │ │ ├── javascript-typed-arrays.md │ │ ├── javascript-visualized-the-javascript-engine.md │ │ ├── jetpack-compose-styles-and-themes.md │ │ ├── json-encoding-decoding-with-python.md │ │ ├── leave-javascript-aside-mint-is-a-great-language-for-building-web-apps.md │ │ ├── library-tree-shaking.md │ │ ├── machine-learning-with-android-11-whats-new.md │ │ ├── making-javascript-run-fast-on-webassembly.md │ │ ├── memory-layout-in-swift.md │ │ ├── messengers-like-imageview.md │ │ ├── microsoft-makes-changes-to-windows-10-inbox-apps-with-latest-dev-channel-test-build.md │ │ ├── migrating-from-livedata-to-kotlins-flow.md │ │ ├── monads-for-javascript-developers.md │ │ ├── mongodb-vs-mysql-when-to-use.md │ │ ├── my-favorite-interservice-communication-patterns-for-microservices.md │ │ ├── native-splash-screen-in-flutter-using-lottie.md │ │ ├── new-css-features-2021.md │ │ ├── new-features-chrome-88.md │ │ ├── new-in-devtools-92.md │ │ ├── new-standards-to-access-user-device-hardware-using-javascript.md │ │ ├── new-suspense-ssr-architecture-in-react-18.md │ │ ├── next-gen-css-container.md │ │ ├── nginx-concepts-i-wish-i-knew-years-ago.md │ │ ├── node-js-vs-python-which-one-to-choose-for-your-project.md │ │ ├── nodejs-memory-limits-what-you-should-know.md │ │ ├── numpy-on-gpu-tpu.md │ │ ├── observer-design-pattern-in-javascript.md │ │ ├── passwordless-authentication-for-better-security.md │ │ ├── performance-best-practices-transactions-and-read--write-concerns.md │ │ ├── performance-differences-between-postgres-and-mysql.md │ │ ├── physics-simulations-using-vpython.md │ │ ├── pipe-operations-in-python.md │ │ ├── programmatically-generate-images-with-css-painting-api.md │ │ ├── python-features-that-you-will-miss-in-typescript.md │ │ ├── python-lists-and-tuples.md │ │ ├── quick-overview-of-http-requests-cross-origin-resource-sharing-cors.md │ │ ├── raspberry-pi’s-ninth-birthday-9-things-you-might-not-know.md │ │ ├── react-vs-vue-in-2021-best-javascript-framework.md │ │ ├── recyclerview-in-jetpack-compose.md │ │ ├── replace-null-with-es6-symbols.md │ │ ├── responsive-images-different-techniques-and-tactics.md │ │ ├── reverse-engineering-the-car-file-format.md │ │ ├── running-javascript-in-webassembly.md │ │ ├── rust-not-firefox-is-mozillas-greatest-industry-contribution.md │ │ ├── safari-has-become-the-second-internet-explorer.md │ │ ├── selector-nesting-has-come-to-css.md │ │ ├── self-supervised-learning-the-dark-matter-of-intelligence.md │ │ ├── send-http-requests-as-fast-as-possible-in-python.md │ │ ├── server-side-request-forgery-vulnerability.md │ │ ├── serverless-where-is-the-industry-going-in-2021.md │ │ ├── should-you-compile-your-javascript-code.md │ │ ├── should-you-really-be-coding-in-dark-mode.md │ │ ├── simplified-peer-to-peer-communication-with-peerjs.md │ │ ├── simulating-interplanetary-space-travel-in-python.md │ │ ├── snowpack-an-alternative-build-tool-to-webpack.md │ │ ├── so-whats-the-state-of-jquery-in-2021.md │ │ ├── solutions-architect-tips-the-5-types-of-architecture-diagrams.md │ │ ├── speed-of-rust-vs-c.md │ │ ├── speed-up-your-angular-projects-by-10x-with-gpu-js.md │ │ ├── sql-injection.md │ │ ├── staggered-animation-in-flutter.md │ │ ├── stanford-ai-report-2021.md │ │ ├── static-analysis-tools-for-android.md │ │ ├── stop-using-the-pixel-unit-in-css.md │ │ ├── svelte-for-the-experienced-react-dev.md │ │ ├── svelte-nodegui-native-desktop.md │ │ ├── swiftui-2021-the-good-the-bad-and-the-ugly.md │ │ ├── system-design-interview-all-or-none-ordered-peer-to-peer-broadcast.md │ │ ├── telegram-like-uploading-animation.md │ │ ├── that-time-when-you-thought-you-knew-y-a-ml.md │ │ ├── the-arrival-of-java-16.md │ │ ├── the-dark-side-of-javascript-a-look-at-3-features-you-never-want-to-use.md │ │ ├── the-different-types-of-browser-storage.md │ │ ├── the-future-of-the-web.md │ │ ├── the-javascript-landscape-in-2021.md │ │ ├── the-new-king-of-bundlers-is-here-all-bow-before-vitejs.md │ │ ├── the-road-to-kotlin-1-5.md │ │ ├── the-why-and-how-of-microservice-messaging-in-kubernetes.md │ │ ├── threats-of-using-regular-expressions-in-javascript.md │ │ ├── three-framework-problem-with-kotlin-multiplatform-mobile.md │ │ ├── time-for-next-gen-codecs-to-dethrone-jpeg.md │ │ ├── tools-for-auditing-css.md │ │ ├── top-3-css-grid-features-to-start-using-in-production.md │ │ ├── top-5-embedded-databases-for-javascript-applications.md │ │ ├── top-5-icon-packs-for-web-apps-in-2021.md │ │ ├── top-7-dart-tips-and-tricks-for-cleaner-flutter-apps.md │ │ ├── top-node-js-development-trends-in-2021.md │ │ ├── top-node-js-frameworks-to-use-in-2021.md │ │ ├── top-open-source-projects-for-sres-and-devops.md │ │ ├── transposed-convolution-demystified.md │ │ ├── trending-storage-options-for-react-native-developers.md │ │ ├── ultimate-guide-to-swiftui2-application-lifecycle.md │ │ ├── undefined-null-revisited.md │ │ ├── understanding-cross-site-request-forgery-csrf-or-xsrf.md │ │ ├── understanding-css-grid.md │ │ ├── understanding-rust-ownership-borrowing-lifetimes.md │ │ ├── untested-python-code-is-already-broken.md │ │ ├── using-bloc-pattern-with-react.md │ │ ├── using-github-code-scanning-and-codeql-to-detect-traces-of-solorigate-and-other-backdoors.md │ │ ├── using-immer-with-react-a-simple-solutions-for-immutable-states.md │ │ ├── using-interfaces-to-write-better-php-code.md │ │ ├── using-rust-to-scale-elixir-for-11-million-concurrent-users.md │ │ ├── using-spring-cloud-gateway-for-microservices-app.md │ │ ├── using-web-workers-to-speed-up-javascript-applications.md │ │ ├── v8-release-92.md │ │ ├── v8-sparkplug-compiler.md │ │ ├── variable-aspect-ratio-card-with-conic-gradients-meeting-along-the-diagonal.md │ │ ├── we-collected-500-000-browser-fingerprints-here-is-what-we-found.md │ │ ├── web-almanac-2020.md │ │ ├── web-share-for-modern-web-apps.md │ │ ├── webpacks-hot-module-replacement-feature-explained.md │ │ ├── what-is-http-3-and-why-does-it-matter.md │ │ ├── what-is-mobile-devops-and-why-should-you-care.md │ │ ├── whats-new-in-sqlite-3-35.md │ │ ├── whats-new-in-swift-5-4.md │ │ ├── when-compat-libraries-do-not-save-you.md │ │ ├── which-type-of-loop-is-fastest-in-javascript.md │ │ ├── why-discord-is-switching-from-go-to-rust.md │ │ ├── why-i-still-lisp-and-you-should-too.md │ │ ├── why-java-is-so-young-after-25-years-an-architects.md │ │ ├── why-react-hooks-are-the-wrong-abstraction.md │ │ ├── why-the-service-mesh-should-fade-out-of-sight.md │ │ ├── why-you-should-use-picture-tag-instead-of-img-tag.md │ │ ├── will-scss-be-replaced-by-css3.md │ │ └── working-toward-fairer-machine-learning.md │ ├── 2022/ │ │ ├── .gitkeep │ │ ├── 10-hardest-python-questions.md │ │ ├── 4-lesser-known-swift-features.md │ │ ├── 5-extremely-amusing-reasons-to-date-a-programmer.md │ │ ├── 6-jetpack-compose-guidelines-to-optimize-your-app-performance.md │ │ ├── Create-A-Real-Time-Medical-App-With-React-Native.md │ │ ├── Install-and-uninstall-WasmEdge.md │ │ ├── Stop-Building-Your-UI-Components-like-this.md │ │ ├── a-thorough-analysis-of-css-in-js.md │ │ ├── bad-microservices.md │ │ ├── best-practices-for-cookie-notifications.md │ │ ├── effects-of-too-much-lazy-loading-on-web-performance.md │ │ ├── everything-you-need-to-know-about-automation-testing.md │ │ ├── github-copilot-review-after-3-months-of-usage-with-examples.md │ │ ├── hash-map-analysis.md │ │ ├── how-slow-is-python.md │ │ ├── how-to-build-gui-with-python.md │ │ ├── how-to-package-and-deploy-cli-apps.md │ │ ├── how-to-write-cleaner-react-code.md │ │ ├── http3-is-fast.md │ │ ├── implement-memoization-in-react-to-improve-performance.md │ │ ├── implementing-bitcask-a-log-structured-hash-table.md │ │ ├── introduction-to-android-multi-touch.md │ │ ├── javascript-frontend-speed-is-the-next-big-thing.md │ │ ├── new-features-in-python-3-10-you-should-know.md │ │ ├── pyscript-unleash-the-power-of-python-in-your-browser.md │ │ ├── replacing-lerna-and-yarn-with-pnpm-workspaces.md │ │ ├── requirements-txt-vs-setup-py-in-python.md │ │ ├── retries.md │ │ ├── send-data-to-the-server-when-the-user-navigates-to-another-page-using-javascript.md │ │ ├── speed-up-your-python-code.md │ │ ├── the-complete-guide-to-concurrency-and-multithreading-in-ios.md │ │ ├── top-10-java-language-features.md │ │ ├── two-way-binding-will-make-your-react-code-better.md │ │ ├── use-streams-to-build-high-performing-nodejs-applications.md │ │ ├── using-redis-on-cloud-here-are-ten-things-you-should-know.md │ │ ├── verifying-distributed-systems-isabelle.md │ │ ├── webgpu-computations-performance-in-comparison-to-webgl.md │ │ ├── webrtc-vs-websockets.md │ │ ├── what-are-responsive-images-and-why-you-should-use-them.md │ │ ├── whats-new-in-es2022.md │ │ ├── why-does-console-log-return-undefined.md │ │ └── why-websockets-are-hard-to-scale.md │ ├── 2023/ │ │ ├── .gitkeep │ │ ├── 44-react-frontend-interview-questions.md │ │ ├── A-First-Look-at-GPT-4.md │ │ ├── A-step-by-step-guide-to-building-a-chatbot-based-on-your-own-documents-with-GPT.md │ │ ├── How-to-Use-ChatGPT-to-Improve-Your-Productivity-(5-Examples).md │ │ ├── achieve-nextjs-mastery-build-a-sales-page-with-stripe-and-airtable.md │ │ ├── building-an-amazon-bedrock-app-for-text-and-image-retrieval.md │ │ ├── from-lab-to-live-implementing-open-source-ai-models-for-real-time-unsupervised-anomaly-detection-in-images.md │ │ ├── on-the-unpredictable-nature-of-llm-output-and-type-safety-in-langchain-ts.md │ │ ├── unpopular-opinion-its-harder-than-ever-to-be-a-good-software-engineer.md │ │ └── why-naming-is-1-skill-for-writing-clean-code.md │ └── ECMA-TC39/ │ ├── Archival-of-TC39-materials.md │ ├── Becoming-a-TC39-delegate.md │ ├── Championing-a-proposal-at-TC39.md │ ├── How-to-become-a-TC39-Invited-Expert.md │ ├── How-to-experiment-with-a-proposal-before-Stage-4.md │ ├── How-to-give-helpful-feedback.md │ ├── How-to-host-a-TC39-meeting.md │ ├── How-to-make-a-Pull-Request-against-the-ECMAScript-specification.md │ ├── How-to-participate-in-meetings.md │ ├── How-to-run-an-online-meeting.md │ ├── How-to-take-notes.md │ ├── How-to-write-a-good-explainer.md │ ├── Implementing-and-shipping-TC39-proposals.md │ ├── Presenting-a-Proposal-to-TC39.md │ ├── README.md │ ├── Reading-a-proposal-draft.md │ ├── Revised-Patterns-for-Participation-in-Standards-Committees.md │ ├── Stage-3-Proposal-Reviews.md │ ├── TC39-and-IP.md │ ├── TC39-management.md │ └── terminology.md ├── backend.md ├── blockchain.md ├── design.md ├── front-end.md ├── glossary/ │ └── blockchain.md ├── integrals.md ├── ios.md ├── others.md └── product.md
Copy disabled (too large)
Download .json
Condensed preview — 2590 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,326K chars).
[
{
"path": ".github/CONTRIBUTING.md",
"chars": 790,
"preview": "# Contributing\n\n## 参与翻译\n\n- 请确保参与翻译之前已在相关文章的 Issue 发出过申请,避免重复性劳动。\n- 如果你还不是我们的译者,请参考 [如何参与翻译](https://github.com/xitu/gold"
},
{
"path": ".github/ISSUE_TEMPLATE/recommendation.md",
"chars": 616,
"preview": "---\nname: 推荐优秀英文文章\nabout: 推荐值得翻译且暂未被翻译的优质英文文章\ntitle: '推荐前端/后端/AI/Android/iOS/产品/设计/Flutter/Kotlin/其他/资讯优秀英文文章'\nlabels:\n-"
},
{
"path": ".github/ISSUE_TEMPLATE/sign_up.md",
"chars": 168,
"preview": "---\nname: 申请成为译者\nabout: 写一份译者申请表,向大家介绍一下你吧~\ntitle: '申请成为译者'\nlabels:\n- 申请译者\nassignees: ''\n---\n\n- 公司/学校:\n- 工作内容/专业:\n- 常浏览的"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 19,
"preview": "译文翻译完成,resolve #id\n"
},
{
"path": ".github/workflows/generate-catalog.yml",
"chars": 2768,
"preview": "name: 生成文章目录\non:\n push:\n paths:\n - 'integrals.md'\n workflow_dispatch:\n\njobs:\n generate:\n if: github.reposi"
},
{
"path": ".github/workflows/stale.yml",
"chars": 668,
"preview": "name: Mark stale issues\n\non:\n schedule:\n - cron: '0 6,18 * * *'\n \npermissions:\n issues: write\n\njobs:\n stale:\n ru"
},
{
"path": ".github/workflows/translator-application.yaml",
"chars": 1140,
"preview": "name: \"Translator Application\"\n\non:\n issues:\n types: [opened]\n\njobs:\n translatorApplicationProcessor:\n name: Tra"
},
{
"path": ".gitignore",
"chars": 48,
"preview": ".DS_Store\n.AppleDouble\n.LSOverride\n.idea\n.vscode"
},
{
"path": "AI.md",
"chars": 19048,
"preview": "* [机器学习系统设计相关面试问题的剖析](https://juejin.cn/post/7109306303285051406)([caiyundong](https://github.com/caiyundong) 翻译)\n* [如何使"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3207,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "README.md",
"chars": 10551,
"preview": "# 掘金翻译计划\n\n[\n> * 原文作者:[Mark Banaynal](http"
},
{
"path": "TODO/25-core-data-in-ios10-nspersistentcontainer.md",
"chars": 9552,
"preview": "> * 原文地址:[25 Core Data in iOS10: NSPersistentContainer](https://swifting.io/blog/2016/09/25/25-core-data-in-ios10-nspers"
},
{
"path": "TODO/3-new-css-features-to-learn-in-2017.md",
"chars": 4113,
"preview": "> * 原文地址:[3 New CSS Features to Learn in 2017](https://bitsofco.de/3-new-css-features-to-learn-in-2017/)\n* 原文作者:[ireader"
},
{
"path": "TODO/39-open-source-swift-ui-libraries-for-ios-app-development.md",
"chars": 11143,
"preview": "> * 原文地址:[39 Open Source Swift UI Libraries For iOS App Development](https://medium.mybridge.co/39-open-source-swift-ui-"
},
{
"path": "TODO/3d-force-touch-beyond-peek-pop.md",
"chars": 5160,
"preview": "> * 原文链接: [3D Force Touch: beyond peek & pop](https://medium.com/produkt-blog/3d-force-touch-beyond-peek-pop-c448edc2b1f"
},
{
"path": "TODO/4-must-know-tips-for-building-cross-platform-electron-apps.md",
"chars": 9259,
"preview": "> * 原文地址:[4 must-know tips for building cross platform Electron apps](https://blog.avocode.com/blog/4-must-know-tips-for"
},
{
"path": "TODO/5-not-so-obvious-things-about-rxjava.md",
"chars": 10825,
"preview": "> * 原文地址:[5 Not So Obvious Things About RxJava](https://medium.com/@jagsaund/5-not-so-obvious-things-about-rxjava-c388bd"
},
{
"path": "TODO/5-step-life-cycle-neural-network-models-keras.md",
"chars": 7490,
"preview": "\n> * 原文地址:[5 Step Life-Cycle for Neural Network Models in Keras](https://machinelearningmastery.com/5-step-life-cycle-ne"
},
{
"path": "TODO/6-practical-skills-for-ux-designers.md",
"chars": 3064,
"preview": "> * 原文地址:[6 Practical Skills for UX Designers](https://uxdesign.cc/6-practical-skills-for-ux-designers-22c852d6c576#.vje"
},
{
"path": "TODO/8-key-react-component-decisions.md",
"chars": 8085,
"preview": "> * 原文地址:[8 Key React Component Decisions: Standardize your React development with these key decisions](https://medium.f"
},
{
"path": "TODO/Android-Studio-Tips.md",
"chars": 20921,
"preview": "> * 原文链接: [Android Studio Tips by Philippe Breault](https://github.com/pavlospt/Android-Studio-Tips-by-Philippe-Breault/"
},
{
"path": "TODO/Breaking-Swift-with-reference-counted-structs.md",
"chars": 6969,
"preview": ">* 原文链接 : [Breaking Swift with reference counted structs](http://www.cocoawithlove.com/blog/2016/03/27/on-delete.html)\n*"
},
{
"path": "TODO/Cocoa-Architecture-Dropped-Design-Patterns.md",
"chars": 10450,
"preview": "> * 原文链接: [Cocoa Architecture: Dropped Design Patterns](http://artsy.github.io/blog/2015/09/01/Cocoa-Architecture-Droppe"
},
{
"path": "TODO/Dependency-Injection-with-Dagger-2.md",
"chars": 20892,
"preview": "> * 原文地址:[Dependency Injection with Dagger 2](https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-"
},
{
"path": "TODO/Eight-Ways-Your-Android-App-Can-Leak-Memory.md",
"chars": 9392,
"preview": ">* 原文链接 : [Eight Ways Your Android App Can Leak Memory](http://blog.nimbledroid.com/2016/05/23/memory-leaks.html)\n* 原文作者"
},
{
"path": "TODO/GoogleCloudFunctions/calling-cloud-functions.md",
"chars": 3022,
"preview": "* 原文[Calling Cloud Functions](https://cloud.google.com/functions/calling)\n* 译文出自 : [掘金翻译计划](https://github.com/xitu/gold"
},
{
"path": "TODO/GoogleCloudFunctions/catlog.md",
"chars": 211,
"preview": "[入门](./quick-starts.md)\n[开始](./getting-started.md)\n[编写](./writing-cloud-functions.md)\n[部署](./deploying-cloud-functions.m"
},
{
"path": "TODO/GoogleCloudFunctions/command-reference.md",
"chars": 799,
"preview": "* 原文[Command Reference](https://cloud.google.com/functions/reference)\n* 译文出自 : [掘金翻译计划](https://github.com/xitu/gold-min"
},
{
"path": "TODO/GoogleCloudFunctions/deploying-cloud-functions.md",
"chars": 4338,
"preview": "* 原文[ Deploying Cloud Functions](https://cloud.google.com/functions/deploying)\n* 译文出自 : [掘金翻译计划](https://github.com/xitu"
},
{
"path": "TODO/GoogleCloudFunctions/getting-started.md",
"chars": 2151,
"preview": "* 原文[Getting Started](https://cloud.google.com/functions/getting-started)\n* 译文出自 : [掘金翻译计划](https://github.com/xitu/gold"
},
{
"path": "TODO/GoogleCloudFunctions/quick-starts.md",
"chars": 1103,
"preview": "* 原文[Quickstarts - Guides](https://cloud.google.com/functions/docs)\n* 译文出自 : [掘金翻译计划](https://github.com/xitu/gold-miner"
},
{
"path": "TODO/GoogleCloudFunctions/walkthroughs.md",
"chars": 3026,
"preview": "* 原文[Walkthroughs](https://cloud.google.com/functions/walkthroughs)\n* 译文出自 : [掘金翻译计划](https://github.com/xitu/gold-miner"
},
{
"path": "TODO/GoogleCloudFunctions/writing-cloud-functions.md",
"chars": 3249,
"preview": "* 原文[Writing Cloud Functions](https://cloud.google.com/functions/writing)\n* 译文出自 : [掘金翻译计划](https://github.com/xitu/gold"
},
{
"path": "TODO/How-to-hideshow-Toolbar-when-list-is-scroling.md",
"chars": 15360,
"preview": "> * 原文链接 : [How to hide/show Toolbar when list is scroling (part 1) · Michał Z.](https://mzgreen.github.io/2015/02/15/Ho"
},
{
"path": "TODO/Introducing-Swift 3.0.md",
"chars": 5035,
"preview": "> * 原文链接: [Introducing Swift 3.0](http://dev.iachieved.it/iachievedit/)\n* 原文作者 : [ Joe](http://dev.iachieved.it/iachieve"
},
{
"path": "TODO/OAuth2 Authentication with Lua.md",
"chars": 5223,
"preview": "* 原文链接 : [OAuth2 Authentication with Lua](http://lua.space/webdev/oauth2-authentication-with-lua)\n* 原文作者 : [Israel Sotom"
},
{
"path": "TODO/Of SVG, Minification and Gzip",
"chars": 12253,
"preview": "> * 原文地址:[Of SVG, Minification and Gzip](https://blog.usejournal.com/of-svg-minification-and-gzip-21cd26a5d007)\n> * 原文作者"
},
{
"path": "TODO/Optimization-killers.md",
"chars": 10805,
"preview": "> * 原文地址:[Optimization killers](https://github.com/petkaantonov/bluebird/wiki/Optimization-killers)\n> * 原文作者:[github.com"
},
{
"path": "TODO/OptimizationTips.rst",
"chars": 10973,
"preview": " - 原文链接: `Optimization Tips <https://github.com/apple/swift/blob/master/docs/OptimizationTips.rst>`_\n - 原文作者 : `apple "
},
{
"path": "TODO/Overview-of-JavaScript-ES6-features-a-k-a-ECMAScript-6-and-ES2015.md",
"chars": 13630,
"preview": "> * 原文地址:[Overview of JavaScript ES6 features (a.k.a ECMAScript 6 and ES2015+)](http://adrianmejia.com/blog/2016/10/19/O"
},
{
"path": "TODO/PHP-7-Virtual-machine.md",
"chars": 60654,
"preview": "> * 原文地址:[PHP 7 Virtual Machine](http://nikic.github.io/2017/04/14/PHP-7-Virtual-machine.html)\n> * 原文作者:[nikic](http://n"
},
{
"path": "TODO/Testing-Schemes.md",
"chars": 3125,
"preview": ">* 原文链接 : [Using Xcode's Schemes to run a subset of your tests](http://artsy.github.io/blog/2016/04/06/Testing-Schemes/)"
},
{
"path": "TODO/Top-5-Android-libraries-every-Android-developer-should-know-about.md",
"chars": 5448,
"preview": "> * 原文链接 : [Top 5 Android libraries every Android developer should know about - v. 2015](https://infinum.co/the-capsized"
},
{
"path": "TODO/Under-the-hood-ReactJS.md",
"chars": 46423,
"preview": "\n > * 原文地址:[Under-the-hood-ReactJS](https://github.com/Bogdan-Lyashenko/Under-the-hood-ReactJS)\n >\n > * 原文作者:[Bogdan-"
},
{
"path": "TODO/Understanding-code-signing-for-iOS-apps.md",
"chars": 5099,
"preview": "> * 原文地址:[Understanding code signing for iOS apps](https://engineering.nodesagency.com/articles/iOS/Understanding-code-s"
},
{
"path": "TODO/Unit-tests-with-Mockito.md",
"chars": 15876,
"preview": "> * 原文链接 : [Unit tests with Mockito - Tutorial](http://www.vogella.com/tutorials/Mockito/article.html)\n> * 原文作者 : [vogel"
},
{
"path": "TODO/Using-Flutter-in-China.md",
"chars": 2240,
"preview": "> * 原文地址:[Using Flutter in China](https://github.com/flutter/flutter/wiki/Using-Flutter-in-China)\n> * 原文作者:[Flutter](htt"
},
{
"path": "TODO/What-would-be-your-advice-to-a-software-engineer-who-wants-to-learn-machine-learning.md",
"chars": 8959,
"preview": "> * 原文地址:[What would be your advice to a software engineer who wants to learn machine learning?](https://www.quora.com/W"
},
{
"path": "TODO/Yarn-A-new-package-manager-for-JavaScript.md",
"chars": 5575,
"preview": ">* 原文链接 : [Yarn: A new package manager for JavaScript](https://code.facebook.com/posts/1840075619545360)\n* 原文作者 : [SEBAS"
},
{
"path": "TODO/a-5-minute-intro-to-styled-components.md",
"chars": 4388,
"preview": "> * 原文地址:[A 5-minute Intro to Styled Components](https://medium.freecodecamp.com/a-5-minute-intro-to-styled-components-4"
},
{
"path": "TODO/a-beginners-guide-to-making-progressive-web-apps.md",
"chars": 6543,
"preview": "\n> * 原文地址:[A beginner’s guide to making Progressive Web Apps](https://medium.com/samsung-internet-dev/a-beginners-guide-"
},
{
"path": "TODO/a-beginners-guide-to-website-optimization.md",
"chars": 6715,
"preview": "> * 原文地址:[A beginner’s guide to website optimization](https://medium.freecodecamp.org/a-beginners-guide-to-website-optim"
},
{
"path": "TODO/a-better-underline-for-android.md",
"chars": 5584,
"preview": ">* 原文链接 : [A better underline for Android](https://medium.com/google-developers/a-better-underline-for-android-90ba3a2e4"
},
{
"path": "TODO/a-blurring-view-for-android.md",
"chars": 4567,
"preview": "> * 原文链接: [A Blurring View for Android](http://developers.500px.com/2015/03/17/a-blurring-view-for-android.html)\n* 原文作者 "
},
{
"path": "TODO/a-cartoon-intro-to-webassembly.md",
"chars": 1661,
"preview": "> * 原文地址:[A cartoon intro to WebAssembly](https://hacks.mozilla.org/2017/02/a-cartoon-intro-to-webassembly/)\n> * 原文作者:本文"
},
{
"path": "TODO/a-case-for-using-storyboards-on-ios.md",
"chars": 9140,
"preview": "> * 原文地址:[A Case For Using Storyboards on iOS](https://medium.cobeisfresh.com/a-case-for-using-storyboards-on-ios-3bbe69"
},
{
"path": "TODO/a-crash-course-in-assembly.md",
"chars": 3344,
"preview": "> * 原文地址:[A crash course in assembly](https://hacks.mozilla.org/2017/02/a-crash-course-in-assembly/)\n> * 原文作者:本文已获作者 [Li"
},
{
"path": "TODO/a-crash-course-in-just-in-time-jit-compilers.md",
"chars": 5881,
"preview": "> * 原文地址:[A crash course in just-in-time (JIT) compilers](https://hacks.mozilla.org/2017/02/a-crash-course-in-just-in-ti"
},
{
"path": "TODO/a-day-without-javascript.md",
"chars": 10946,
"preview": "> * 原文地址:[A day without Javascript](https://sonniesedge.co.uk/blog/a-day-without-javascript)\n> * 原文作者:[A day without Jav"
},
{
"path": "TODO/a-detailed-guide-on-developing-android-apps-using-the-clean-architecture-pattern.md",
"chars": 22419,
"preview": ">* 原文链接 : [A detailed guide on developing Android apps using the Clean Architecture pattern](https://medium.com/@dmilici"
},
{
"path": "TODO/a-dramatic-tour-through-pythons-data-visualization-landscape-including-ggplot-and-altair.md",
"chars": 29814,
"preview": "> * 原文地址:[A Dramatic Tour through Python’s Data Visualization Landscape (including ggplot and Altair)](https://dansaber."
},
{
"path": "TODO/a-fairer-vue-of-react-comparing-react-to-vue-for-dynamic-tabular-data-part-2.md",
"chars": 4077,
"preview": ">* 原文链接 : [\"A fairer Vue of React\" - Comparing React to Vue for dynamic tabular data, part 2.](https://engineering.footb"
},
{
"path": "TODO/a-first-walk-into-kotlin-coroutines-on-android.md",
"chars": 6409,
"preview": "> * 原文地址:[A first walk into Kotlin coroutines on Android](https://android.jlelse.eu/a-first-walk-into-kotlin-coroutines-"
},
{
"path": "TODO/a-follow-up-on-how-to-store-tokens-securely-in-android.md",
"chars": 6450,
"preview": "> * 原文地址:[A follow-up on how to store tokens securely in Android](https://medium.com/@enriquelopezmanas/a-follow-up-on-h"
},
{
"path": "TODO/a-functional-programmers-introduction-to-javascript-composing-software.md",
"chars": 11479,
"preview": "> * 原文地址:[A Functional Programmer’s Introduction to JavaScript (Composing Software)(part 3)](https://medium.com/javascri"
},
{
"path": "TODO/a-gentle-introduction-to-self-sovereign-identity.md",
"chars": 6341,
"preview": "> * 原文地址:[A gentle introduction to self-sovereign identity](https://bitsonblocks.net/2017/05/17/a-gentle-introduction-to"
},
{
"path": "TODO/a-guide-to-automating-scraping-the-web-with-javascript-chrome-puppeteer-node-js.md",
"chars": 12313,
"preview": "> * 原文地址:[A Guide to Automating & Scraping the Web with JavaScript (Chrome + Puppeteer + Node JS)](https://codeburst.io/"
},
{
"path": "TODO/a-guide-to-interviewing-for-product-design-internships.md",
"chars": 12186,
"preview": "\n>* 原文链接 : [A Guide to Interviewing for Product Design Internships](https://medium.com/facebook-design/a-guide-to-interv"
},
{
"path": "TODO/a-guide-to-the-google-play-console.md",
"chars": 27264,
"preview": "> * 原文地址:[A guide to the Google Play Console](https://medium.com/googleplaydev/a-guide-to-the-google-play-console-1bdc79"
},
{
"path": "TODO/a-look-back-at-the-state-of-javascript-in-2017.md",
"chars": 8477,
"preview": "> * 原文地址:[A Look Back at the State of JavaScript in 2017](https://medium.freecodecamp.org/a-look-back-at-the-state-of-ja"
},
{
"path": "TODO/a-map-to-modern-javascript-development.md",
"chars": 3521,
"preview": "> * 原文地址:[A Map To Modern JavaScript Development](https://hackernoon.com/a-map-to-modern-javascript-development-2017-16d"
},
{
"path": "TODO/a-mindful-design-process.md",
"chars": 13017,
"preview": "> * 原文地址:[A Mindful Design Process](https://headspace.design/a-mindful-design-process-f4a4641ee88f)\n> * 原文作者:[François C"
},
{
"path": "TODO/a-primer-on-android-navigation.md",
"chars": 10530,
"preview": "\n> * 原文地址:[A Primer on Android navigation](https://medium.com/google-design/a-primer-on-android-navigation-75e57d9d63fe)"
},
{
"path": "TODO/a-quick-look-at-semaphores.md",
"chars": 8171,
"preview": "> * 原文地址:[A Quick Look at Semaphores in Swift 🚦](https://medium.com/swiftly-swift/a-quick-look-at-semaphores-6b7b85233dd"
},
{
"path": "TODO/a-simple-object-model.md",
"chars": 23798,
"preview": "> * 原文地址:[A Simple Object Model](http://aosabook.org/en/500L/a-simple-object-model.html)\n* 原文作者:[Carl Friedrich Bolz](ht"
},
{
"path": "TODO/a-simple-web-app-in-rust-conclusion.md",
"chars": 2505,
"preview": "> * 原文地址:[A Simple Web App in Rust, Conclusion: Putting Rust Aside for Now](http://joelmccracken.github.io/entries/a-sim"
},
{
"path": "TODO/a-simple-web-app-in-rust-pt-1.md",
"chars": 10935,
"preview": "> * 原文地址:[A Simple Web App in Rust, Part 1](http://joelmccracken.github.io/entries/a-simple-web-app-in-rust-pt-1/)\n> * 原"
},
{
"path": "TODO/a-simple-web-app-in-rust-pt-2a.md",
"chars": 18705,
"preview": "> * 原文地址:[A Simple Web App in Rust, Part 2a](http://joelmccracken.github.io/entries/a-simple-web-app-in-rust-pt-2a/)\n> *"
},
{
"path": "TODO/a-simple-web-app-in-rust-pt-2b.md",
"chars": 22833,
"preview": "> * 原文地址:[A Simple Web App in Rust, Part 2b](http://joelmccracken.github.io/entries/a-simple-web-app-in-rust-pt-2b/)\n> *"
},
{
"path": "TODO/a-simple-web-app-in-rust-pt-3.md",
"chars": 18349,
"preview": "> * 原文地址:[A Simple Web App in Rust, Part 3 -- Integration](http://joelmccracken.github.io/entries/a-simple-web-app-in-ru"
},
{
"path": "TODO/a-simple-web-app-in-rust-pt-4-cli-option-parsing.md",
"chars": 33008,
"preview": "> * 原文地址:[A Simple Web App in Rust, Part 4 -- CLI Option Parsing](http://joelmccracken.github.io/entries/a-simple-web-ap"
},
{
"path": "TODO/a-tinder-progressive-web-app-performance-case-study.md",
"chars": 12513,
"preview": "> * 原文地址:[A Tinder Progressive Web App Performance Case Study](https://medium.com/@addyosmani/a-tinder-progressive-web-a"
},
{
"path": "TODO/a-unified-styling-language.md",
"chars": 19318,
"preview": "> * 原文地址:[A Unified Styling Language](https://medium.com/seek-blog/a-unified-styling-language-d0c208de2660)\n> * 原文作者:本文已"
},
{
"path": "TODO/after-a-year-of-nodejs-in-production.md",
"chars": 3133,
"preview": ">* 原文链接 : [AFTER A YEAR OF USING NODEJS IN PRODUCTION](http://geekforbrains.com/post/after-a-year-of-nodejs-in-productio"
},
{
"path": "TODO/age-of-algorithm-human-gatekeeper.md",
"chars": 3940,
"preview": "* 原文地址:[ In the age of the algorithm, the human gatekeeper is back ](https://www.theguardian.com/technology/2016/sep/30/"
},
{
"path": "TODO/ajax-polling-in-react-with-redux.md",
"chars": 4522,
"preview": "> * 原文地址:[AJAX POLLING IN REACT WITH REDUX](http://notjoshmiller.com/ajax-polling-in-react-with-redux/)\n> * 原文作者:[Josh M"
},
{
"path": "TODO/ajax-polling-part-2-sagas.md",
"chars": 3866,
"preview": "> * 原文地址:[AJAX POLLING IN REDUX PART 2: SAGAS](http://notjoshmiller.com/ajax-polling-part-2-sagas/)\n> * 原文作者:[Josh M](ht"
},
{
"path": "TODO/align-svg-icons-to-text-and-say-goodbye-to-font-icons.md",
"chars": 3841,
"preview": "> * 原文链接: [Align SVG Icons to Text and Say Goodbye to Font Icons](https://blog.prototypr.io/align-svg-icons-to-text-and-"
},
{
"path": "TODO/all-about-concurrency-in-swift-1-the-present.md",
"chars": 24961,
"preview": "> * 原文地址:[All about Concurrency in Swift - Part 1: The Present](https://www.uraimo.com/2017/05/07/all-about-concurrency-"
},
{
"path": "TODO/all-about-react-router-4.md",
"chars": 17764,
"preview": "\r\n > * 原文地址:[All About React Router 4](https://css-tricks.com/react-router-4/)\r\n > * 原文作者:[BRAD WESTFALL](https://css-"
},
{
"path": "TODO/all-you-need-to-know-about-parce.md",
"chars": 6493,
"preview": "> * 原文地址:[Everything You Need To Know About Parcel: The Blazing Fast Web App Bundler 🚀](https://medium.freecodecamp.org/"
},
{
"path": "TODO/all-you-need-to-know-to-really-understand-the-node-js-event-loop-and-its-metrics.md",
"chars": 6245,
"preview": "\n> * 原文地址:[All you need to know to really understand the Node.js Event Loop and its Metrics](https://www.dynatrace.com/b"
},
{
"path": "TODO/altering-javascript-frames.md",
"chars": 8420,
"preview": "\n> * 原文地址:[Altering JavaScript frames](https://ripsawridge.github.io/articles/stack-changes/)\n> * 原文作者:[michael stanton]"
},
{
"path": "TODO/an-absolute-beginners-guide-to-swift.md",
"chars": 8720,
"preview": "> * 原文链接: [Absolute Beginner's Guide to Swift](http://blog.teamtreehouse.com/an-absolute-beginners-guide-to-swift)\n* 原文作"
},
{
"path": "TODO/an-animated-guide-to-flexbox.md",
"chars": 4284,
"preview": "> * 原文地址:[How Flexbox works — explained with big, colorful, animated gifs](https://medium.freecodecamp.com/an-animated-g"
},
{
"path": "TODO/an-exhaustive-guide-to-writing-dockerfiles-for-node-js-web-apps.md",
"chars": 7439,
"preview": "> * 原文地址:[An Exhaustive Guide to Writing Dockerfiles for Node.js Web Apps](https://blog.hasura.io/an-exhaustive-guide-to"
},
{
"path": "TODO/an-introduction-to-functional-reactive-programming.md",
"chars": 14457,
"preview": "> * 原文地址:[An Introduction to Functional Reactive Programming](http://blog.danlew.net/2017/07/27/an-introduction-to-funct"
},
{
"path": "TODO/an-introduction-to-in-app-a-b-testing.md",
"chars": 8432,
"preview": "> * 原文地址:[An introduction to in-app A/B testing: How A/B testing can help you get more out of your app](https://medium.c"
},
{
"path": "TODO/an-introduction-to-the-usernotifications-framework.md",
"chars": 11165,
"preview": "> * 原文地址:[An Introduction to the UserNotifications Framework](https://code.tutsplus.com/tutorials/an-introduction-to-the"
},
{
"path": "TODO/an-ios-devs-experience-with-react-native.md",
"chars": 4070,
"preview": "> * 原文地址:[An iOS Dev’s Experience with React Native](https://blog.madebywindmill.com/an-ios-devs-experience-with-react-n"
},
{
"path": "TODO/an-ode-to-async-await.md",
"chars": 11522,
"preview": "> * 原文地址:[An Ode to Async-Await](https://hackernoon.com/an-ode-to-async-await-7da2dd3c2056#.pdydhv9a0)\n* 原文作者:[Tal Kol]("
},
{
"path": "TODO/an-overview-of-the-logging-ecosystem-in-2017.md",
"chars": 7322,
"preview": "\n > * 原文地址:[An Overview of the Logging Ecosystem in 2017](https://blog.codeship.com/an-overview-of-the-logging-ecosyste"
},
{
"path": "TODO/an-undervalued-blockchain-market-in-china-is-good-news-for-you.md",
"chars": 17378,
"preview": "> * 原文地址:[An Undervalued Blockchain Market In China Is Good News For You](https://medium.com/theblock1/an-undervalued-bl"
},
{
"path": "TODO/an-update-on-es6-modules-in-node-js.md",
"chars": 3907,
"preview": "> * 原文地址:[An Update on ES6 Modules in Node.js ](https://medium.com/@jasnell/an-update-on-es6-modules-in-node-js-42c958b8"
},
{
"path": "TODO/anatomy-of-a-function-call-in-go.md",
"chars": 5302,
"preview": "> * 原文地址:[Anatomy of a function call in Go](https://syslog.ravelin.com/anatomy-of-a-function-call-in-go-f6fc81b80ecc#.po"
},
{
"path": "TODO/android-app-optimization-using-arraymap-and-sparsearray.md",
"chars": 2954,
"preview": "> * 原文地址:[Android App Optimization Using ArrayMap and SparseArray](https://medium.com/@amitshekhar/android-app-optimizat"
},
{
"path": "TODO/android-basic-project-architecture-for-mvp.md",
"chars": 7726,
"preview": "> * 原文链接: [Android Basic Project Architecture for MVP — mobiwise blog — Medium](https://medium.com/mobiwise-blog/android"
},
{
"path": "TODO/android-data-binding-recyclerview.md",
"chars": 5448,
"preview": "> * 原文地址:[Android Data Binding: RecyclerView](https://medium.com/google-developers/android-data-binding-recyclerview-db7"
},
{
"path": "TODO/android-handler-internals.md",
"chars": 17901,
"preview": "> * 原文地址:[Android Handler Internals](https://medium.com/@jagsaund/android-handler-internals-b5d49eba6977)\n* 原文作者:[Jag Sa"
},
{
"path": "TODO/android-o-fonts.md",
"chars": 6404,
"preview": "> * 原文地址:[Android O: Fonts – Part 1](https://blog.stylingandroid.com/android-o-fonts/)\n> * 原文作者:[Mark Allison](https://b"
},
{
"path": "TODO/android-themes-an-in-depth-guide.md",
"chars": 4292,
"preview": ">* 原文链接 : [Android Themes — An in-depth guide](https://medium.com/@Sserra90/android-themes-an-in-depth-guide-f71f9db6e5b"
},
{
"path": "TODO/android-why-your-canvas-shapes-arent-smooth.md",
"chars": 4258,
"preview": ">* 原文链接 : [Android: Why your Canvas shapes aren’t smooth](https://medium.com/@ali.muzaffar/android-why-your-canvas-shape"
},
{
"path": "TODO/angular-jwt-authentication.md",
"chars": 25301,
"preview": "> * 原文地址:[Angular Security - Authentication With JSON Web Tokens (JWT): The Complete Guide](https://blog.angular-univers"
},
{
"path": "TODO/angular-jwt.md",
"chars": 19705,
"preview": "> * 原文地址:[JWT: The Complete Guide to JSON Web Tokens](https://blog.angular-university.io/angular-jwt/)\n> * 原文作者:[angular"
},
{
"path": "TODO/angular-vs-react-vs-vue-a-2017-comparison.md",
"chars": 29697,
"preview": "\n> * 原文地址:[Angular vs. React vs. Vue: A 2017 comparison](https://medium.com/unicorn-supplies/angular-vs-react-vs-vue-a-2"
},
{
"path": "TODO/angular-vs-react-which-is-better-for-web-development.md",
"chars": 33711,
"preview": "\n> * 原文地址:[Angular vs. React: Which Is Better for Web Development?](https://codeburst.io/angular-vs-react-which-is-bette"
},
{
"path": "TODO/animated-intro-rxjs.md",
"chars": 8875,
"preview": "> * 原文地址:[An Animated Intro to RxJS](https://css-tricks.com/animated-intro-rxjs/)\n> * 原文作者:[David Khourshid](https://css"
},
{
"path": "TODO/announcing-ant-design-3-0.md",
"chars": 4575,
"preview": "> * 原文地址:[Announcing Ant Design 3.0](https://medium.com/ant-design/announcing-ant-design-3-0-70e3e65eca0c)\n> * 原文作者:[Mec"
},
{
"path": "TODO/any-web-site-can-become-a-pwa-but-we-need-to-do-better.md",
"chars": 6272,
"preview": "\n> * 原文地址:[Any web site can become a PWA – but we need to do better](https://christianheilmann.com/2017/06/27/any-web-si"
},
{
"path": "TODO/applying-human-centered-design-to-emerging-technologies.md",
"chars": 5529,
"preview": "> * 原文地址:[Applying human-centered design to emerging technologies](https://medium.com/googleplaydev/applying-human-cente"
},
{
"path": "TODO/approaching-android-with-mvvm.md",
"chars": 20639,
"preview": "> * 原文链接 : [Approaching Android with MVVM — ribot labs — Medium](https://medium.com/ribot-labs/approaching-android-with-"
},
{
"path": "TODO/are-notifications-a-dark-pattern.md",
"chars": 6123,
"preview": "\n > * 原文地址:[Are Notifications A Dark Pattern?](https://blog.prototypr.io/are-notifications-a-dark-pattern-2c1a177b26e0)"
},
{
"path": "TODO/are-the-ux-articles-youre-reading-trying-to-sell-you-something.md",
"chars": 7359,
"preview": "> * 原文地址:[Are the UX articles you’re reading trying to sell you something?](https://uxdesign.cc/are-the-ux-articles-your"
},
{
"path": "TODO/artificial-intelligence-in-ux-design.md",
"chars": 5146,
"preview": "\n > * 原文地址:[Can AI Solve Your UX Design Problems?](https://www.sitepoint.com/artificial-intelligence-in-ux-design/)\n >"
},
{
"path": "TODO/atomic-design-how-to-design-systems-of-components.md",
"chars": 6969,
"preview": "\n> * 原文地址:[Atomic design: how to design systems of components](https://uxdesign.cc/atomic-design-how-to-design-systems-o"
},
{
"path": "TODO/attract-millions-developers-product.md",
"chars": 7992,
"preview": ">* 原文链接 : [How To Attract Millions of Developers to Your Product](http://www.techstars.com/content/accelerators/boulder/"
},
{
"path": "TODO/audio-focus-1.md",
"chars": 4252,
"preview": "> * 原文地址:[Understanding Audio Focus (Part 1 / 3): Common Audio Focus use cases](https://medium.com/google-developers/aud"
},
{
"path": "TODO/audio-focus-2.md",
"chars": 4168,
"preview": "> * 原文地址:[Understanding Audio Focus (Part 2 / 3): More Audio Focus use cases](https://medium.com/google-developers/audio"
},
{
"path": "TODO/audio-focus-3.md",
"chars": 11962,
"preview": "> * 原文地址:[Understanding Audio Focus (Part 3 / 3): 3 steps to implementing Audio Focus in your app](https://medium.com/go"
},
{
"path": "TODO/auto-sizing-columns-css-grid-auto-fill-vs-auto-fit.md",
"chars": 5147,
"preview": "> * 原文地址:[Auto-Sizing Columns in CSS Grid: `auto-fill` vs `auto-fit`](https://css-tricks.com/auto-sizing-columns-css-gri"
},
{
"path": "TODO/automate-cicd-visual-app-center.md",
"chars": 5096,
"preview": "> * 原文地址:[Automate CI/CD and Spend More Time Writing Code](https://www.sitepoint.com/automate-cicd-visual-app-center/?ut"
},
{
"path": "TODO/automated-npm-releases-with-travis-ci.md",
"chars": 5550,
"preview": "> * 原文地址:[Automated npm releases with Travis CI](https://tailordev.fr/blog/2018/03/15/automated-npm-releases-with-travis"
},
{
"path": "TODO/avoiding-accidental-complexity-when-structuring-your-app-state.md",
"chars": 8879,
"preview": "* 原文地址:[Avoiding Accidental Complexity When Structuring Your App State](https://hackernoon.com/avoiding-accidental-compl"
},
{
"path": "TODO/avoiding-force-unwrapping-in-swift-unit-tests.md",
"chars": 7484,
"preview": "> * 原文地址:[Avoiding force unwrapping in Swift unit tests](https://www.swiftbysundell.com/posts/avoiding-force-unwrapping-"
},
{
"path": "TODO/avoiding-objc-in-swift.md",
"chars": 4172,
"preview": ">* 原文链接 : [Avoiding the overuse of @objc in Swift](http://www.jessesquires.com/avoiding-objc-in-swift/)\n* 原文作者 : [Jesse "
},
{
"path": "TODO/backend-api-documentation-in-swift.md",
"chars": 2781,
"preview": "> * 原文地址:[Backend API Documentation in Swift](https://medium.com/ios-os-x-development/backend-api-documentation-in-swift"
},
{
"path": "TODO/backwards-compatibility-with-ios-10-today-widgets.md",
"chars": 5005,
"preview": "> * 原文地址:[Tips for Backwards Compatibility with iOS 10 Today Widgets](https://kristina.io/backwards-compatibility-with-i"
},
{
"path": "TODO/before-you-bury-yourself-in-packages-learn-the-node-js-runtime-itself.md",
"chars": 6514,
"preview": "> * 原文地址:[Before you bury yourself in packages, learn the Node.js runtime itself](https://medium.freecodecamp.com/before"
},
{
"path": "TODO/benchmarks-for-the-top-server-side-swift-frameworks-vs-node-js.md",
"chars": 8529,
"preview": "> * 原文地址:[Benchmarks for the Top Server-Side Swift Frameworks vs. Node.js](https://medium.com/@rymcol/benchmarks-for-the"
},
{
"path": "TODO/best-practices-for-search-results.md",
"chars": 5285,
"preview": "> * 原文地址:[Best Practices for Search Results](https://uxplanet.org/best-practices-for-search-results-1bbed9d7a311#.8pyskn"
},
{
"path": "TODO/best-practices-in-designing-graphql-apis.md",
"chars": 2267,
"preview": "> * 原文地址:[Best Practices in Designing GraphQL APIs](https://medium.com/@zavilla90/best-practices-in-designing-graphql-ap"
},
{
"path": "TODO/better-form-design-one-thing-per-page.md",
"chars": 7532,
"preview": "\n> * 原文地址:[Better Form Design: One Thing Per Page (Case Study)](https://www.smashingmagazine.com/2017/05/better-form-des"
},
{
"path": "TODO/better-javascript-with-es6-pt-ii-a-deep-dive-into-classes.md",
"chars": 22087,
"preview": ">* 原文链接 : [Better JavaScript with ES6, Pt. II: A Deep Dive into Classes](https://scotch.io/tutorials/better-javascript-w"
},
{
"path": "TODO/better-javascript-with-es6-pt-iii-cool-collections-slicker-strings.md",
"chars": 15910,
"preview": ">* 原文链接 : [Better JavaScript with ES6, Pt. III: Cool Collections & Slicker Strings](https://scotch.io/tutorials/better-j"
},
{
"path": "TODO/better-node-with-es6-pt-i.md",
"chars": 12731,
"preview": ">* 原文链接 : [Better Node with ES6, Pt. I](https://scotch.io/tutorials/better-node-with-es6-pt-i)\n* 原文作者 : [Peleke](https:/"
},
{
"path": "TODO/beyond-browser-web-desktop-apps.md",
"chars": 25861,
"preview": "> * 原文地址:[Beyond The Browser: From Web Apps To Desktop Apps](https://www.smashingmagazine.com/2017/03/beyond-browser-web"
},
{
"path": "TODO/binary-ast-newsletter-1.md",
"chars": 6507,
"preview": "\n > * 原文地址:[Towards a JavaScript Binary AST](https://yoric.github.io/post/binary-ast-newsletter-1/)\n > * 原文作者:[Yoric]("
},
{
"path": "TODO/bootstrap-considered-harmful.md",
"chars": 1932,
"preview": "> * 原文地址:[Bootstrap considered harmful](https://hiddedevries.nl/en/blog/2016-08-09-bootstrap-considered-harmful)\n* 原文作者:"
},
{
"path": "TODO/boring-design-systems.md",
"chars": 4794,
"preview": "> * 原文地址:[The Most Exciting Design Systems Are Boring](https://bigmedium.com/ideas/boring-design-systems.html)\n> * 原文作者:"
},
{
"path": "TODO/breaking-wpa2-by-forcubg-nonce-reuse.md",
"chars": 30443,
"preview": "\n> * 原文地址:[Key Reinstallation Attacks: Breaking WPA2 by forcing nonce reuse](https://www.krackattacks.com/?from=groupmes"
},
{
"path": "TODO/breakpoints-debugging-like-pro.md",
"chars": 4254,
"preview": "> * 原文地址:[Breakpoints: Debugging like a Pro](https://cheesecakelabs.com/blog/breakpoints-debugging-like-pro/)\n> * 原文作者:["
},
{
"path": "TODO/bridging-existentials-generics-swift-2.md",
"chars": 5009,
"preview": "> * 原文链接 : [Bridging Existentials & Generics in Swift 2](http://blog.benjamin-encz.de/post/bridging-existentials-generic"
},
{
"path": "TODO/bringing-Pokemon-GO-to-life-on-Google-Cloud.md",
"chars": 3868,
"preview": "> * 原文地址:[Bringing Pokémon GO to life on Google Cloud](https://cloudplatform.googleblog.com/2016/09/bringing-Pokemon-GO-"
},
{
"path": "TODO/bubble-sheet-multiple-choice-scanner-and-test-grader-using-omr-python-and-opencv.md",
"chars": 51835,
"preview": "> * 原文地址:[Bubble sheet multiple choice scanner and test grader using OMR, Python and OpenCV](http://www.pyimagesearch.co"
},
{
"path": "TODO/build-a-journaling-app-with-meteor-1-3-beta-react-react-bootstrap-and-mantra.md",
"chars": 17710,
"preview": ">* 原文链接 : [Build A Journaling App with Meteor 1.3 (Beta), React, React-Bootstrap, and Mantra](https://medium.com/@kenrog"
},
{
"path": "TODO/build-tic-tac-toe-with-ai-using-swift.md",
"chars": 18206,
"preview": "> * 原文链接 : [Build Tic Tac Toe with AI Using Swift](https://medium.com/swift-programming/build-tic-tac-toe-with-ai-using-"
},
{
"path": "TODO/building-a-kotlin-project-2.md",
"chars": 12572,
"preview": ">* 原文链接 : [Building a Kotlin project 2/2](http://www.cirorizzo.net/2016/03/04/building-a-kotlin-project-2/)\n* 原文作者 : [CI"
},
{
"path": "TODO/building-a-kotlin-project.md",
"chars": 6232,
"preview": "> * 原文链接 : [Building a Kotlin project 1/2](http://cirorizzo.net/2016/03/04/building-a-kotlin-project/)\n* 原文作者 : [CIRO RI"
},
{
"path": "TODO/building-a-mobile-app-with-cordova-vuejs.md",
"chars": 16755,
"preview": "> * 原文地址:[使用 Cordova 和 Vue.js 创建移动应用](https://coligo.io/building-a-mobile-app-with-cordova-vuejs/)\n* 原文作者:[Michael Viver"
},
{
"path": "TODO/building-a-shop-with-sub-second-page-loads-lessons-learned.md",
"chars": 17923,
"preview": "> * 原文地址:[Building a Shop with Sub-Second Page Loads: Lessons Learned](https://medium.baqend.com/building-a-shop-with-su"
},
{
"path": "TODO/building-a-virtual-world-worthy-of-sci-fi.md",
"chars": 6192,
"preview": "> * 原文地址:[Building a Virtual World Worthy of Sci-Fi: Designing a global metaverse](https://medium.com/google-developers/"
},
{
"path": "TODO/building-account-systems.md",
"chars": 8763,
"preview": "\n > * 原文地址:[Building account systems](https://blog.plan99.net/building-account-systems-f790bf5fdbe0)\n > * 原文作者:[Mike H"
},
{
"path": "TODO/building-an-api-gateway-using-nodejs.md",
"chars": 6222,
"preview": "\n > * 原文地址:[Building an API Gateway using Node.js](https://blog.risingstack.com/building-an-api-gateway-using-nodejs/)\n"
},
{
"path": "TODO/building-android-apps-30-things-that-experience-made-me-learn-the-hard-way.md",
"chars": 4148,
"preview": "> * 原文地址:[Building Android Apps — 30 things that experience made me learn the hard way](https://medium.com/@cesarmcferre"
},
{
"path": "TODO/building-ar-game-arkit-spritekit.md",
"chars": 16304,
"preview": "> * 原文地址:[Building an AR game with ARKit and Spritekit](https://blog.pusher.com/building-ar-game-arkit-spritekit/)\n> * 原"
},
{
"path": "TODO/building-for-the-future-of-tv-with-android.md",
"chars": 4518,
"preview": "> * 原文地址:[Building for the future of TV with Android](https://medium.com/googleplaydev/building-for-the-future-of-tv-wit"
},
{
"path": "TODO/building-interfaces-with-constraintlayout.md",
"chars": 4630,
"preview": "> * 原文地址:[Building interfaces with ConstraintLayout\n](https://medium.com/google-developers/building-interfaces-with-cons"
},
{
"path": "TODO/building-ios-apps-with-xamarin-and-visual-studio.md",
"chars": 20612,
"preview": "> * 原文链接 : [Building iOS Apps with Xamarin and Visual Studio](https://www.raywenderlich.com/134049/building-ios-apps-wit"
},
{
"path": "TODO/building-modern-web-applications-in-2017.md",
"chars": 7484,
"preview": "\n> * 原文地址:[Choosing a frontend framework in 2017](https://medium.com/this-dot-labs/building-modern-web-applications-in-2"
},
{
"path": "TODO/building-our-personal-deep-learning-rig-gtx-1080-ubuntu-16-04-cuda-8-0rc-cudnn-7-tensorflowmxnetcaffedarknet.md",
"chars": 13907,
"preview": "\n> * 原文地址:[Build Personal Deep Learning Rig: GTX 1080 + Ubuntu 16.04 + CUDA 8.0RC + CuDnn 7 + Tensorflow/Mxnet/Caffe/Dar"
},
{
"path": "TODO/building-react-components-for-multiple-brands-and-applications.md",
"chars": 4338,
"preview": "> * 原文地址:[Building React Components for Multiple Brands and Applications](https://medium.com/walmartlabs/building-react-"
},
{
"path": "TODO/building-the-web-of-things.md",
"chars": 12910,
"preview": "\n> * 原文地址:[Building the Web of Things](https://hacks.mozilla.org/2017/06/building-the-web-of-things/)\n> * 原文作者:[Ben Fran"
},
{
"path": "TODO/building-trello-layout-css-grid-flexbox.md",
"chars": 7052,
"preview": "\n> * 原文地址:[Building a Trello Layout with CSS Grid and Flexbox](https://www.sitepoint.com/building-trello-layout-css-grid"
},
{
"path": "TODO/buttons-in-design-systems.md",
"chars": 6755,
"preview": "> * 原文地址:[Buttons in Design Systems](https://medium.com/eightshapes-llc/buttons-in-design-systems-eac3acf7e23#.u8m3qun1i"
},
{
"path": "TODO/bye-bye-burger.md",
"chars": 5015,
"preview": "> * 原文地址:[Bye, Bye Burger! What we learned from implementing the new Android Bottom Navigation](https://medium.com/start"
},
{
"path": "TODO/can-email-be-responsive.md",
"chars": 10004,
"preview": "> * 原文地址:[Can Email Be Responsive?](http://alistapart.com/article/can-email-be-responsive)\n* 原文作者:[Jason Rodriguez](http"
},
{
"path": "TODO/check-in-frequency-and-codebase-impact-the-surprising-correlation.md",
"chars": 2860,
"preview": "* 原文地址:[ Prolific Engineers Take Small Bites — Patterns in Developer Impact ](https://blog.gitprime.com/check-in-frequen"
},
{
"path": "TODO/choosing-a-front-end-framework-angular-ember-react.md",
"chars": 17054,
"preview": ">* 原文链接 : [CHOOSING A FRONT END FRAMEWORK: ANGULAR VS. EMBER VS. REACT](http://smashingboxes.com/blog/choosing-a-front-e"
},
{
"path": "TODO/choosing-right-markdown-parser.md",
"chars": 12244,
"preview": "\n# 选择使用正确的 Markdown Parser\n\n* 原文链接 : [Choosing the Right Markdown Parser](https://css-tricks.com/choosing-right-markdown"
},
{
"path": "TODO/chrome-devtools-performance-monitor.md",
"chars": 2979,
"preview": "> * 原文地址:[Chrome DevTools- Performance monitor](https://hospodarets.com/chrome-devtools-performance-monitor?utm_source=S"
},
{
"path": "TODO/chrome-devtools.md",
"chars": 4404,
"preview": "* 原文链接 : [Chrome Devtools Tips & Tricks](http://mo.github.io/2015/10/19/chrome-devtools.html)\n* 原文作者 : [Molsson](http://"
},
{
"path": "TODO/clean-java-immutability.md",
"chars": 7533,
"preview": ">* 原文链接 : [Clean Java immutability](http://blog.alexsimo.com/clean-java-immutability/)\n* 原文作者 : [Alexandru Simonescu](ht"
},
{
"path": "TODO/closure-capture-1.md",
"chars": 11683,
"preview": "> * 原文链接 : [Closures Capture Semantics, Part 1: Catch them all!](http://alisoftware.github.io/swift/closures/2016/07/25/"
},
{
"path": "TODO/code-comments-the-good-the-bad-and-the-ugly.md",
"chars": 5181,
"preview": "> * 原文地址:[Putting comments in code: the good, the bad, and the ugly.](https://medium.freecodecamp.com/code-comments-the-"
},
{
"path": "TODO/code-smells-in-css-revisited.md",
"chars": 5907,
"preview": "> * 原文地址:[Code Smells in CSS Revisited](https://csswizardry.com/2017/02/code-smells-in-css-revisited/)\n* 原文作者:[Harry](ht"
},
{
"path": "TODO/code-splitting-with-parcel-web-app-bundler.md",
"chars": 4681,
"preview": "> * 原文地址:[Code Splitting with Parcel Web App Bundler](https://hackernoon.com/code-splitting-with-parcel-web-app-bundler-"
},
{
"path": "TODO/collaborative-map-reduce-in-the-browser.md",
"chars": 4246,
"preview": "> * 原文地址:[Collaborative Map-Reduce in the Browser](https://www.igvita.com/2009/03/03/collaborative-map-reduce-in-the-bro"
},
{
"path": "TODO/comparing-the-performance-between-native-ios-swift-and-react-native.md",
"chars": 8990,
"preview": "> * 原文地址:[Comparing the Performance between Native iOS (Swift) and React-Native](https://medium.com/the-react-native-log"
},
{
"path": "TODO/compile-time-vs-runtime-type-checking-swift.md",
"chars": 4627,
"preview": ">* 原文链接 : [Compile Time vs. Run Time Type Checking in Swift](http://blog.benjamin-encz.de/post/compile-time-vs-runtime-t"
}
]
// ... and 2390 more files (download for full content)
About this extraction
This page contains the full source code of the xitu/gold-miner GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2590 files (28.6 MB), approximately 4.1M tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.