惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Exploit Database - CXSecurity.com
V
Vulnerabilities – Threatpost
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
Webroot Blog
Webroot Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
TaoSecurity Blog
TaoSecurity Blog
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News | PayPal Newsroom
S
Security Affairs
T
Tor Project blog
P
Proofpoint News Feed
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security @ Cisco Blogs
H
Heimdal Security Blog
Hacker News: Ask HN
Hacker News: Ask HN
Help Net Security
Help Net Security
U
Unit 42
云风的 BLOG
云风的 BLOG
The Hacker News
The Hacker News
Cisco Talos Blog
Cisco Talos Blog
量子位
F
Full Disclosure
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
有赞技术团队
有赞技术团队
T
Troy Hunt's Blog
P
Privacy & Cybersecurity Law Blog
Forbes - Security
Forbes - Security
人人都是产品经理
人人都是产品经理
L
Lohrmann on Cybersecurity
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Security Blog
Microsoft Security Blog
博客园 - Franky
腾讯CDC
AI
AI
Last Week in AI
Last Week in AI
Latest news
Latest news
Google Online Security Blog
Google Online Security Blog
N
Netflix TechBlog - Medium
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
Martin Fowler
Martin Fowler
Blog — PlanetScale
Blog — PlanetScale
V2EX - 技术
V2EX - 技术
酷 壳 – CoolShell
酷 壳 – CoolShell

Ivan on Containers, Kubernetes, and Server-Side

A grounded take on agentic coding for production environments Server-Side Playgrounds Reimagined: Build, Boot, and Network Your Own Virtual Labs [not a] Kubernetes 101 - Pods, Deployments, and Services As an Attempt To Automate Age-Old Infra Patterns JavaScript or TypeScript? How To Benefit From the Dichotomy On Software Design... and Good Writing Building a Firecracker-Powered Course Platform To Learn Docker and Kubernetes How To Publish a Port of a Running Container What Actually Happens When You Publish a Container Port A Visual Guide to SSH Tunnels: Local and Remote Port Forwarding Debugging Containers Like a Pro Docker: How To Debug Distroless And Slim Containers How To Extract Container Image Filesystem Using Docker | iximiuz Labs In Pursuit of Better Container Images: Alpine, Distroless, Apko, Chisel, DockerSlim, oh my! How To Start Programming In Go: Advice For Fellow DevOps Engineers Kubernetes Ephemeral Containers and kubectl debug Command How To Develop Kubernetes CLIs Like a Pro Docker Container Commands Explained: Understand, Don't Memorize | iximiuz Labs Learning Docker with Docker - Toying With DinD For Fun And Profit How To Extend Kubernetes API - Kubernetes vs. Django The Influence of Plumbing on Programming How To Call Kubernetes API from Go - Types and Common Machinery How To Call Kubernetes API using Simple HTTP Client Kubernetes API Basics - Resources, Kinds, and Objects OpenFaaS - Run Containerized Functions On Your Own Terms Learning Containers From The Bottom Up Docker Containers vs. Kubernetes Pods - Taking a Deeper Look | iximiuz Labs Learn-by-Doing Platforms for Dev, DevOps, and SRE Folks How HTTP Keep-Alive can cause TCP race condition How to Work with Container Images Using ctr | iximiuz Labs Multiple Containers, Same Port, no Reverse Proxy... Exploring Go net/http Package - On How Not To Set Socket Options Disposable Local Development Environments with Vagrant, Docker, and Arkade DevOps, SRE, and Platform Engineering My Choice of Programming Languages Prometheus Is Not a TSDB How to learn PromQL with Prometheus Playground Prometheus Cheat Sheet - Basics (Metrics, Labels, Time Series, Scraping) Rust - Writing Parsers With nom Parser Combinator Framework pq - parse and query log files as time series Prometheus Cheat Sheet - Moving Average, Max, Min, etc (Aggregation Over Time) Prometheus Cheat Sheet - How to Join Multiple Metrics (Vector Matching) The Need For Slimmer Containers Understanding Rust Privacy and Visibility Model Bridge vs. Switch: Takeaways from a Real Data Center Tour | iximiuz Labs From LAN to VXLAN: Networking Basics for Non-Network Engineers | iximiuz Labs KiND - How I Wasted a Day Loading Local Docker Images Go, HTTP handlers, panic, and deadlocks Exploring Kubernetes Operator Pattern Making Sense Out Of Cloud Native Buzz Service Discovery in Kubernetes: Combining the Best of Two Worlds API Developers Never REST How Container Networking Works: Building a Bridge Network From Scratch | iximiuz Labs Traefik: canary deployments with weighted load balancing Service Proxy, Pod, Sidecar, oh my! You Need Containers To Build Images You Don't Need an Image To Run a Container Not Every Container Has an Operating System Inside Working with container images in Go Master Go While Learning Containers Implementing Container Runtime Shim: Interactive Containers How to use Flask with gevent (uWSGI and Gunicorn editions) My 10 Years of Programming Experience Implementing Container Runtime Shim: First Code Implementing Container Runtime Shim: runc Kubernetes Repository On Flame Dealing with process termination in Linux (with Rust examples) conman - [the] Container Manager: Inception Journey From Containerization To Orchestration And Beyond Linux PTY - How docker attach and docker exec Commands Work Inside Illustrated introduction to Linux iptables From Docker Container to Bootable Linux Disk Image Пишем свой веб-сервер на Python: протокол HTTP 9001 способ создать веб-сервер на Python Explaining async/await in 200 lines of code Explaining event loop in 100 lines of code Save the day with gevent Пишем свой веб-сервер на Python: процессы, потоки и асинхронный I/O Truly optional scalar types in protobuf3 (with Go examples) Node.js Writable streams distilled Node.js Readable streams distilled How to on starting processes (mostly in Linux) Пишем свой веб-сервер на Python: сокеты Наследование в JavaScript Мастерить!
Дайджест интересных ссылок – Июль 2016
Ivan Velichko · 2016-07-31 · via Ivan on Containers, Kubernetes, and Server-Side

Почему объектно-ориентированное программирование - отстой, как технологии обманывают наш мозг и почему нужно избегать поверхностных задач...

Level up your server-side game — join 20,000 engineers getting insightful learning materials straight to their inbox.

Почему ООП - отстой

Объектно-ориентированное программирование - наиболее распространенная парадигма в разработке програмного обеспечения, и по мнению большинства она основывается на трех столпах: наследование, инкапсуляция и полиморфизм.

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.

Dr. Alan Kay считает немного по-другому

Но, несмотря на огромную популярность объектно-ориентированной методологии, большинство ее реализаций в мейнстримовых языках программирования обладают множеством проблем. Автор статьи Goodbye, Object Oriented Programming показывает, как абстракции наследование и инкапсуляция благополучно протекают и не выполняют возложенные на них обязанности.

Дублирования кода (между проектами) не удается избежать при наличии обширных иерархий наследования, так как для переноса конкретного класса в другой проект требуется перенести его родителей, родителей его родителей и тп.

ООП - это про создание сущностей из реального мира (объектов, их свойств, поведения, отношений) в программе. Но иерархии в реальном мире могут не быть древовидными. Проблема ромбовидной иерархии (имеет место в жизни, но нельзя непротиворечиво реализовать в ЯП) и проблема фасетной классификации не могут быть решены традиционным наследованием.

Родительский класс не является на 100% черным ящиком для своих наследников. Из-за этого возникает проблема т.н. хрупких базовых классов, когда изменение реализации (но не интерфейса) родительского класса приводит к поломке наследников, которые зависели от особенностей реализации.

Вышеописанные проблемы автор предлагает решать заменой идеи наследования композицией и включением. Сложные объекты должны создаваться комбинированием уже существующих, при этом иерархия может быть только одного типа — принадлежность. Проблема же фасетной классификации решается с помощью теггирования функциональности, где в качестве тегов выступают интерфейсы.

Инкапсуляция, в свою очередь, не работает из-за наличия ссылочных типов. Когда ссылка на существующий объект передается в конструктор нового объекта и сохраняется в приватном поле — это ложная инкапсуляция. При таком сценарии она вроде бы и есть (ссылка сохранена в приватном поле, никто за пределами объект-владельца не может получить к ней доступ), но на самом деле ее нет (изменение переданного в констуктор объекта за пределами объекта-"владельца" приводит к изменению состояния "владельца"). Автор предлагает решать такую проблему при помощи передачи по значению и использования неизменяемых типов данных.

Читая статью, складывается впечатление, что автор пропагандирует использование Go. Идеи, используемые в этом языке (компоновка типов из существующих, легковесные интерфейсы, повсеместная передача аргументов по значению) очень сильно перекликаются с идеями из статьи. Но, в конце оказывается, что, по мнению автора, функциональное программирование - наше все. В общем, всем рекомендую самостоятельно прочитать в оригинале Goodbye, Object Oriented Programming.

Как технологии обманывают наш мозг

При помощи не совсем честного пользовательского интерфейса и навязываемых сценариев использования программное обеспечение ежедневно изменяет наше поведение и привычки. Заметили, что очень часто проверяете телефон на предмет наличия новых email/сообщений в Facebook/лайков в Instagram? На самом деле ваш телефон - однорукий бандит. Принцип тот же, что и в казино. Простое действие (обновление страницы) - и мгновенная награда (новый коммент, лайк или сообщение). Человеческий мозг попадается на такие зависимости уже тысячи лет.

На коллективной фотке вас отметил ваш босс, а других коллег - нет? Не обольщайтесь и не ждите скорого повышения, в 99% случаев в этот момент он и не думал о вас. Просто Facebook смог распознать именно ваше лицо на снимке и подтолкнул его к действию. Он оказал внимание социальной сети, а не вам. Возникающее в такие моменты чувство социального подтверждения — ложное.

Про эти и многие другие опасные аспекты UI/UX круто написано тут How Technology Hijacks People’s Minds — from a Magician and Google’s Design Ethicist.

Избегайте поверхностных задач

Так много дел, которые нужно сделать. И так легко попасть в ловушку "поверхностных" задач. Есть задачи которые имеют значение в долгосрочной перспективе. А есть все остальные, которых куда больше и которые куда проще. И очень легко оказаться в водовороте таких мелких дел, которые забирают все твое время и энергию, а взамен не дают практически ничего. Наш мозг любит делать выбор именно в пользу таких дел-пустышек, потому что их легче и быстрее сделать и получить никому не нужный результат, который является легкой наградой для мозга (см. пример с постоянным обновлением ленты событий из Как технологии обманывают наш мозг, опять же однорукий бандит в действии). Ответить на дюжину email от коллег, вместо того, чтобы выключить все уведомления, сконцентрироваться и написать новый сложный модуль - ваш мозг к вашим услугам, и вот вы уже открываете ваш любимый редактор кода почтовый клиент...

Самые крутые ученые и писатели делают выбор именно в пользу "глубоких" задач, банально отфильтровывая все остальные. Внешне такое поведение может напоминать лень (когда игнорируются некоторые дела) или даже невоспитанность (когда игнориуется излишнее общение). Но только так можно добиться действительно значимых результатов! Концентрация, концентрация, концентрация!

Кстати, 10000 часов, оказывается, уже давно не достаточно, чтобы стать супер-звездой в своей области. Это просто необходимое, но не достаточное условие достижения вершины профессионального мастерства. Не менее важно чем и как ты занимаешься, настоящая работа начинается именно после 10000 часов!

Level up your server-side game — join 20,000 engineers getting insightful learning materials straight to their inbox: