Cloud-based tool for storing and retrieving passwords and other secrets. There's even a command-line client available.
- Learning Agile, by J. Greene & A. Stellman
- User Stories Applied
- How Programmers and Testers (and Others) Should Collaborate on User Stories, by Mike Cohn
- Agile Software Development with Distributed Teams: Staying Agile in a Global World
- An Iterative Waterfall Isn't Agile
- The Difference Between a Story and a Task (aka Sub-Task)
- How to impose Agile
- Forget about "Agile vs Waterfall", It's about Silo Busting
- The Difference Between a Professional and an Amateur
- How To Fail With Agile, by Mike Cohn
- Dependencies, by Ron Jeffries
- “Agile” is More Than a Buzzword: Continuous Improvement
- Agile at Executive Team Level
- Advice on Conducting Agile Project Kickoff Meetings, by Mike Cohn
- Three Questions to Determine If an Organization Is Agile, by Mike Cohn
- Include All Team Members in Sprint Meetings. Yes, Them Too., by Mike Cohn
- What to Do When Agile Isn't Working, by Stacey Ackerman
- Quite short, but still touches the most important points revolving around the required organization's support for Agile.
- The Agile Mind-Set: Making Agile Processes Work, by Gil Broza
- Deciding What Kind of Projects are Most Suited for Agile, by Mike Cohn
- Why Agile is Eating The World, by Steve Denning
- From Good to Great: Agile Mindset, by Zuzi Sochova
- Getting Business Value out of Agile Retrospectives, by Ben Linders.
- Agile Retrospectives: Making Good Teams Great, by Esther Derby, Diana Larsen
- The Liberators -- Agile Teams: Don’t use happiness metrics, measure Team Morale
- Why Agile Teams Put So Much Emphasis on Being Done Each Iteration, by Mike Cohn
- From Good to Great: Cross-Functional Teams, by Zuzi Sochova
- Incorporating UI Design in Agile Sprints, by Mike Cohn
- From Good to Great: Collaboration, by Zuzi Sochova
- Managing Risk on Agile Projects with the Risk Burndown Chart, by Mike Cohn
- Six Agile Product Development Myths: Busted, by Mike Cohn
- Organizations that Work on Fewer Projects at a Time Get More Done, by Mike Cohn
- Do we need CEO in Agile organization?, by Zuzi Sochova
- How to Ensure You’re Working on the Most Important Items Each Iteration, by Mike Cohn
- Understanding Fake Agile, by Steve Denning
- Defect Management by Policy: A Fast Easy Approach to Prioritizing Bug Fixes, by Mike Cohn
- The Importance of Overlapping Work in Agile, by Mike Cohn
- "Agile is Dead", video by Dave Thomas
- The Top 10 Rebuttals To: "Agile is great. But It won't work here.", article by Jeff Gothelf
- Standards are not the answer, article by Diane Zajac
- Agile Performance Appraisals, article by Karen Greaves
- Six Reasons to go Agile, article by Hunter Thevis
- Tn Things the Beatles Taught Me About Being Agile, article by Mike Cohn
- Agile Transformation — Definition of Business and Enterprise Agile, article by Michal Vallo
- Why Middle Management Is The Ultimate Agility Killer, article by Mike MacIsaac
- What's a Community of Practice?, article by Michael Küsters
- Accelerating Velocity and Customer Value With Agile and DevOps, study by CA Technologies
- "Agile and DevOps actually reduce costs by 65 % once implemented"!
- We Tried Baseball and It Didn't Work, article by Ron Jeffries
- Agile Weekly Tips, on-going short video series on LinkedIn by Kelley O'Connel
- Not the greatest name, but really good content, organized as Q&A's. And, it keeps growing!
- Dear Agile, I'm Tired of Pretending, article by Charles Lambdin ← click bait, but interesting to read anyway
- Agile at Work: Getting Better With Agile Retrospectives, video course on LinkedIn Learning
- Transitioning from Waterfall to Agile Project Management, video course on LinkedIn Learning
- Not super informative when you already know a lot, but easily digestible.
- Agile at Work: Planning with Agile User Stories, video course on LinkedIn Learning
- DevOps Foundations: Lean and Agile, video course on LinkedIn Learning
- Cert Prep: PMI Agile Certified Practitioner, video course on LinkedIn Learning
- Pentagon Wars: Bradley Fighting Vehicle Evolution
- How not to develop a product. Based on real life events.
- Any resemblance to real-life individuals around you is purely incidental. However, I do suggest you share this video with them and check if they will spot themselves.
- Is Your Organization's Culture Ready for Agile or Will Its Organizational Gravity Pull You Back Down?, article by Jonathan Kessel-Fell
- Agile does not have dates. Really!!!!, article by Varun Maheshwari
- This is ANYTHING BUT agile !!!!, blog post by Varun Maheshwari
- How do You Measure the Success of Your Agile Transformation?, blog post by Michal Vallo
- What I Want for an Agile Christmas, post by Mike Cohn
- Is It Time to Stop Thinking about Projects, article by Mike Cohn
- Why the Word "assign" should be Banned from Agile Teams, article by René Rosendahl
- Setting and Managing Expectations, post by Mike Cohn
- Accepting Uncertainty: The Problem of Predictions in Software Engineering, article by J. Meadows
- Ending Video Game Death Marches - #1 Managing Debt, blog post by Clinton Keith
- Stop Managing Dependencies, article by Jurgen de Smet
- Agility != Speed, lecture by Kevlin Henney on YouTube
- Self-Organizing Agile Teams Are Not Put Together Randomly, post by Mike Cohn
- How Scrum Patterns help you become a better Scrum Master, post by Karel Smutný
- What Went Wrong with The IT Industry?; talk by James Coplien; at FooCafe 2017
- How to Reward Agile Teams, by Mike Cohn
- Agile HR: Recruiting, by Zuzi Sochova
- Agile HR: Evaluations and Performance Reviews, by Zuzi Sochova
- Agile HR: Career Path and Salaries, by Zuzi Sochová
- Scaling Agile At Spotify
- Spotify Engineering Culture
- Enterprise Agile: Disciplined Agile vs Spotify, video course on LinkedIn Learning
- Enterprise Agile: Changing Your Culture, video course by LinkedIn Learning
- A full remote highly collaborative teams self-design workshop with 80+ people? Yes!, blog post by Mark Uijen de Kleijn
- Common misconception about large scale agility, video by Michael James
- Overcoming the false dichotomy of Specialization vs Generalization with Scrum, article by Bas Vodde
- How Organizations Go Nuts, YouTube video featuring Jurgen de Smet at Agile Prague 2016
- Why Should Most Organizations Ditch Scrum?, talk by Jurgen de Smet, at Agile Prague Conference 2019
- Adapting and Using Scrum in a Software Research and Development Laboratory, by Igor Ribeiro Lima, Tiago de Castro Freire, Heitor Augustus Xavier Costa
- Adapting Scrum to Managing a Research Group, by Michael Hicks, Jeffrey S. Foster
- Scrum is the best thing that happened to our government team, article by Michelle Thong
- The city of San Jose and their scrum adoption.
- The Agile Household: How Scrum Made Us a Better Family, article by Martin Lapointe
- Implementation of Scrum in the Construction Industry, paper by Thomas STREULE, Nino MISERINI, Olin BARTLOMÉ, Michael KLIPPEL, Borja GARCÍA DE SOTO
- Construction Managers, If You Are Not Doing Scrum, You Are Missing Out., article by Spart Pillar
- Scrum in Government, Q&A video by Scrum.org
(These are just examples. There's more).
- British Telecom, 2004
- Delivery cycle shorter, from 12 months to 90 days.
- Improved developer morale and motivation.
- ING, 2011
- Cost savings in software delivery in the range of 30-50 %.
- Overall time to market of IT changes improved by 37 %.
- The number of technical incidents reduced by over 30 %.
- The number of releases gradually increased, leading to shorter cycles and faster learning.
- Cisco, 2015
- A 40% decrease in critical and major defects.
- No more overtime, and their products are delivered on time.
Ananas Analytics is a platform that can be used for quick data visualization using either files or cloud-based database engines as its data store. For scalability, the execution can be ran inside e.g. Apache Spark. But by default, the execution itself always takes place on the desktop. One of the goals of the platform is to be nice and easy to use by an end user, even though it still retains features for developers and power users to utilize.
This procedure only applies to a real Android device. AVD (Android Virtual Devices aka emulators) have the Developer mode enabled by default.
- Go into Settings and locate a field called
Build Number
(it's in different places on different phones, but usually it sits somewhere under About) - Click on the field multiple times
- At some point a message will pop up saying
You are now 3 steps away from being a developer
– continue clicking... - A message will pop up saying
You are now a developer!
- At some point a message will pop up saying
- Go into Settings, locate a section called
Developer options
and enter it - Enable (check)
Allow USB debugging
and confirm whatever dialog pops up - Disable (uncheck)
Verify apps over USB
- Optionally you might want to enable
Stay awake
(so that the screen will not go into sleep mode while charging (i.e. connected to wall outlet or PC))
- Xiaomi Mi Note 2
- The procedure is the same as for any other Android system, however, you first need to go into Installed Apps and enable the Documents app (it might be at the very bottom of the list of installed apps). If you don't do this, the stock Xiaomi app will prohibit you from installing the certificates with a strange almost random toast message "Couldn't install the certificate because the file couldn't be read"
- Commercial product using the Hypervisor.framework library on MacOS to
automate deployment of virtualized macOS.
- Due to the nature of the library, the VMs are really low level (using para-virtualized hardware/drivers where possible), and theoretically are as fast as VMs can ever be.
- Has support for running on developers machine as well as in a cluster.
- The system takes care of the tediousness of installing macOS on the VMs. After requesting a VM, one only has to wait for the installation to finish, and one eventually gets an installed VM (without having to manually click through the steps).
- One can use either VNC, SSH or an integrated Anka shell to control the VMs (install additional software, reconfigure, ...).
- Has support for custom bootstrapping of the VMs (e.g. install Xcode).
ansible
is a very nice tool (part of Red Hat's suite) that makes it super easy to
control and deploy infrastructure (servers, switches, ...). It's extremely
lightweight (you just need pip
to install it and then ssh
) and can be very
easily used to simply query things such as IP addresses, hostnames, ... from
remote machines. So, even if you don't plan to control any device with it, you
can still take advantage of its querying capability just as easily. All you need
is pip
and ssh
:).
I might be wrong, but I think Ansible's biggest strength is that one can easily use it to control machines and infrastructure that already exist. When you want to do infrastructure as a code, terraform might be a better choice, especially with containers and/or virtualization.
- Ansible Quick Start, course on Linux Academy
- Ansible: Setup, Configure and Ad Hoc Commands Deep Dive, video course on Linux Academy
- Red Hat Certified Specialist in Ansible Automation (EX407) Preparation Course, video course on Linux Academy
- Managing AWS with Ansible, video course on Linux Academy
- Ansible: Playbooks Deep Dive, video course on Linux Academy
- Learn Ansible by Doing, video course on Linux Academy
- Automating AWS with Lambda, Python, and Boto3, course on Linux Academy
- AWS Certified Solutions Architect - Professional, video course on Linux Academy
- "Very useful to get to know the offerings overall. The quiz/certification is a bit questionable, though :).
- Designing Fault Tolerant Applications, talk by Jeff Barr, Atila Narin and Max Ramsay
- While being quite dated, it still holds some valuable insights even into the current AWS inner-workings.
Powerful platform for real-time processing of data. Unlike, say, Hadoop or the likes, Apache Storm is meant to ingest the real-time events and process them on the fly.
balenaEtcher is a macOS application similar in
functionality (taking a bootable ISO and turning it into a bootable USB drive;
provided, you have the USB drive :)) to the likes of the well-known
UNetBootIn or Rufus. Can be installed via brew cask install balenaetcher
.
- pushd & popd (stackfull
cd
) - Bats: Bash Automated Testing System: a TAP-compliant testing framework for Bash. It provides a simple way to verify that the UNIX programs you write behave as expected.
- bash-it: a flexible tool that allows one to configure their prompt using themes with the input from various helpers (such as SCM status in the current working directory, battery levels, ...).
- Bash bang commands: A must-know trick for the Linux command line, article by Keerthi Chinthaguntla
Inspired by Ansible, Bashible aims to be a declaratorive automation tool, but instead of Python, it utilizes Bash.
While similar tools such as conky or gkrellm display information directly over the root window (over the wallpaper) or in a separate dock bar, bitbar shows it in the macOS menubar.
- IncludeOS - running C++ applications without an operating system
- Forbidden C++, video by OneLoneCoder
- The Essence of C++, video lecture by Bjarne Stroustrup
- The Design of C++, lecture by Bjarne Stroustrup
"A utility-first CSS framework for rapidly building custom designs." In other words: you can use this to build up styles for an entire application from the ground up. An example: where Vuetify would give you high level components as cards, carousels, ..., Tailwind gives you the building blocks to build them yourself.
Celery is a distributed platform for task queue management. based on sending and receiving of messages.
- Asynchronous Tasks in Python - Getting Started With Celery [2020], video by Pretty Printed, on YouTube
- Task Queues: A Celery Story, lecture by Tom Manderson, at PyCon AU 2018, on YouTube
- CloudFlare's PKI/TLS Toolkit – a nifty gadget that's easier to use than openssl, as it for example doesn't require a bunch of extra configuration files for "simple" procedures such as subject alternate names. It also contains an HTTP-based API server that can be used for signing certificates (internally encapsulating the CA cert+key). There is a Docker Hub image available also, for ease of use.
- How to write a function, by Jack Diederich
- Some interesting concepts, not everything that I would strictly stand by. But it's definitely worth seeing to expand one's horizon :).
- Seven Ineffective Coding Habits of Many Programmers, video by Kevlin Henney
- "Good Enough" Architecture, GOTO 2019, talk by Stefan Tilkov
- Clean Code, series of 6 lectures given by Uncle Bob
- If you have any interest in clean code and agility, this is a must to watch. Bob has a very neat way of connecting the two.
- The Forgotten Art of Structured Programming, video lecture by Kevlin Henney
- Kevlin has a great gift to keep you both interested and smiling throughout most of his presentation.
- Monolith Decomposition Patterns (GOTO 2019), lecture by Sam Newman
- The Art of Code, lecture by Dylan Beattie
- Modern Continuous Delivery (GOTO 2020), lecture by Ken Mugrage
- Clean Coders Hate What Happens to Your Code When You Use These Enterprise Programming Tricks (NDC London 2017), lecture by Kevlin Henney
- Why Auto Increment is a Terrible Idea, post by Clément Delafargue
- Uncle Bob Expecting Professionalism, lecture by Robert C Martin, shot at Kuppelsalen, Copenhagen
- FULL HOUR with Robert "Uncle Bob" Martin, Zoom Recording with Robert C Martin
- Functional Programming; What? Why? When?, lecture by Robert C Martin, recorded at NDC 2014
- TDD, Where Did It All Go Wrong; lecture by Ian Cooper, at DevTernity 2017
- Jim Coplien and Uncle Bob Debate TDD, video
- Mastering Chaos: A Netflix Guide to Microservices, lecture by Josh Evans, at QCon 2017
- SOLID Principles -- lecture by Uncle Bob
- Functional Programming in 40 Minutes; lecture by Russ Olsen, at GOTO 2018
- Old Is the New New, talk by Kevlin Henney, at GOTO 2018
- Feature Branches and Toggles in Post-GitHub World, lecture by Sam Newman at GOTO 2017 on YouTube
- Very good summary of why you need trunk-based development instead of *-branches.
- Continuous Integration vs Feature Branch Workflow, talk by Dave Farley
- Feature Branching is Evil, talk by Thierry de Paux, at XP Days Ukraine 2017
- Insecure Transit -- Microservice Security; lecture by Sam Newman, at NDC London 2019, on YouTube
- Goodbye, Object Oriented Programming; blog post by Charles Scalfani
- Lean Code, talk by Kevlin Henney, at DevTernity 2019
- Refactoring to Immutability, talk by Kevlin Henney, at NDC Conference 2018
- Small is Beautiful, talk by Kevlin Henney, at GOTO 2016
- Software is Details, talk by Kevlin Henney, at GOTO 2020
- The Many Meanings of Event-Driven Architecture, talk by Martin Fowler, at GOTO 2017
- The Future of Software Engineering, talk by Mary Poppendieck, at GOTO 2016
- Using Sagas to Maintain Data Consistency in a Microservice Architecture, talk by Chris Richardson, at Devoxx 2017
- Design Microservice Architectures the Right Way, talk by Michael Bryzek, InfoQ 2018
- At many places during the talk I feel like Michael might be pushing his hiring PR a bit too much. However, msot of the talk is actually a somewhat good inspiration for folks.
- The Single Responsibility Principle; talk by Uncle Bob Martin; at NDC 2014
- The SOLID Design Principles Deconstructed; talk by Kevlin Henney; at YOW! 2013
- Codility
- You can register and track your progress. With every exercise, you can choose a different language in which you want to perform it. Unfortunatelly, TypeScript is as of 2020-12-12 not supported (but one can always write it elsewhere, convert to JavaScript and paste it in).
- PR: CMAF is coming and it could dramatically improve livestreaming
- About the CMAF with HLS, by Apple
consul (aka HashiCorp Consul)
- consul is a service-discovery platform suitable for containerized deployments.
- Learn how to run service discovery and a service mesh with Consul, tutorial by HashiCorp
- Consul Service Mesh: Deep Dive, by Nic Jackson, lecture on Youtube
- Demystifying Service Mesh, lecture by Stephen Wilson, on Youtube
- CoreOS Essentials, video course on Linux Academy – slightly outdated as CoreOS is pretty much dead and work continues under the Red Hat umbrella and RHEL Container Linux and Fedora Container Linux brands. They aren't compatible with CoreOS, though. So, be careful.
- Flatcar Linux is a (still) maintained fork of CoreOS. Unlike Container Linux, they actually kept most of things backward compatible.
- A Java framework that allows one to develop their GUI application in one place and have it run on Windows, OSX+iOS and Android.
- very powerful tool that allows conversion/merge/join of csv, json, various other formats and also pretty prints this
CoreDNS is, mainly, a DNS server written in Go. Thus it is mean to be pretty fast and secure, including memory operations. It also offers a wide range of plugins to make its job easier, or more complicated, but to still get it done. It can even do service discovery. It has since become the standard service inside any Kubernetes cluster.
- Clean Up Your Mess -- concise entry into the world of design thinking.
- DevOps Foundations: Infrastructure as Code, video course on LinkedIn Learning
- How to Explain DevOps in Plain English, article by Carla Rudder
- Implementing SRE practices: SLI/SLO deep dive; talk by David Blank Edelman; at DevOpsDays Tel Aviv 2018
Despite what the name suggests, DirSyncPro is actually free to use, and it is a great tool for those who like to keep files and directories synchronized (or mirrored, or one-way mirrored, or simply backed up) on Windows. It supports instant (in response to file system change) actions as well as recurring ones.
From the most part, I expect this section to be pure theory, full of bookmarks to other theory, papers, video lectures, ...
- Distributed Systems, YouTube playlist, by Chris Colohan
- A good starting point. Quite short, but concise.
- CSE138; Distributed Systems; Spring 2021, YouTube playlist, by Lindsey Kuper
- It's a whole university class, but Lindsey Kuper surely knows how to teach it. I recommend it wholeheartedly, if you want to know more about the topic.
This is about always being able to only choose two out of: Consistency, Availability and Partition tolerance.
Paxos is one of the algorithms used by distributed systems to reach consensus (e.g. consistency).
It is probably the oldest, published by Leslie Lamport, who actually originally tried to disprove the algorithm. Well, what do you know? He ended up proving it works.
Recently, a slightly different algorithm, Raft, has seend an uprise in popularity, so it might be worth a while to check it out too.
- The Paxos Algorithm, YouTube video, by Luis Quesada Torres @ Google
- Paxos Simplified, YouTube video, by Chris Colohan
- This video is actually part of a series that I suggest people go watch. It is quite concise and goes over most of the distributed systems basics.
Raft is a younger competitor to the Paxos consensus algorithm. It is commonly referred by people as "being simpler to understand and implement".
- Docker Containers LiveLessons – brief introduction to docker containers and why you should care :)
- Play With Docker is an online (in-browser) 4-hour-lasting app that allows one to run multiple Docker nodes and, well, play with them.
- Docker Essential Trainings, by David Davis
- tini: a "tini" lightweight init process
suited very much for containers
- Use it if you are running a process that does not reap it's own children properly.
- Docker Certified Associate (DCA), Video Course on Linux Academy
- Lazy Docker – a text-based user interface that's very handy when you aren't proficient with docker command line and you just want to dig around for information on your docker engine (containers, images, ...)
- Secure Socks: Exploring Microservice Security in an Open Source Sock Shop, lecture by Phil Winder, at GOTO 2016, on YouTube
"EditorConfig helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs."
Prettier can honor whatever settings are in .editorconfig
- Elastic Search Tutorial for Beginners, video by Udemy feat. Frank Kane, on YouTube
- Elasticsearch Do's, Don'ts and Pro-Tips, talk by Itamar Syn Hershko, at NDC 2017
-
ESXI client console for Windows download https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2089791
-
VMRC client for Mac download https://my.vmware.com/group/vmware/details?downloadGroup=VMRC801&productId=491
-
Overview of ESXI command-line tools http://blog-lrivallain.rhcloud.com/2015/02/26/play-vm-snapshots-esxi-command-line-tools/
-
authorized_keys
are @/etc/ssh/keys-root/authorized_keys
-
Dynamic IPv6 configuration
- in vSphere client, select an ESXI
- Configuration → Networking
- wSwitch0 Properties
- select Management Network, click Edit
- IPv6 Settings, select "Obtain IPv6 automatically through Router Advertisement" (only), then click OK.
The Falcon Web Framework is supposed to be a blazingly fast low-level alternative to any other RESTful framework/library, such as Flask-RESTful or Django REST Framework.
- BLSCD: "blscd
is a stupid ranger-like file browser/navigator
(not manager) for the command line using
stty
,tput
and other Unix utilities." - FFF (F'ing Fast File Manager)
Flask-RESTful is an extension to the popular flask web-building framework that allows one to easily build out RESTful services.
Flask-RESTPlus is yet another library/toolkit to help you create great APIs on top of flask.
making files "hidden" from Git's change detection
Should you ever need to "hide" changes in certain files from git's automated change detection, you can
mark those files using git update-index --skip-worktree ...
, which will make Git not try to detect
any changes in them. When checking out or merging a different branch into the working tree, it will,
however, properly realize that the file has changed and prevent you from accidentally overwriting it.
git config --global core.autocrlf input
- ogletest: unit testing framework for Go with the following features
- assertions: Fluent assertion-style functions used by goconvey and gunit. Can also be used in any test or application.
- goconvey: Write behavioral tests in your editor. Get live results in your browser.
Goa is a library for the Go language that makes it very easy to develop RESTful API services.
An open source tool similar in nature to teleconsole. You wrap a terminal application in it and it will make it available over HTTP or HTTPS. Its main goal seems to be read-only access (i.e. you can expose monitoring information, etc, over HTTP), but you can, if you so desire, allow remote users to also control the session. You might for instance use this for some kind of GUI-oriented API server.
docker run -it --rm -p 8080:8080 ubuntu:latest /usr/bin/env bash
# apt-get update && apt-get install -y --no-install-recommends curl ca-certificates git cmatrix
# curl -L https://dl.google.com/go/go1.12.6.linux-amd64.tar.gz | tar -xz -C /usr/local
# export PATH="${PATH}:/usr/local/go/bin:${HOME}/go/bin"
# go get github.com/yudai/gotty
# gotty cmatrix
2019/07/03 13:26:08 GoTTY is starting with command: cmatrix
2019/07/03 13:26:08 HTTP server is listening at: http://:::8080/
2019/07/03 13:26:08 Alternative URL: http://127.0.0.1:8080/
2019/07/03 13:26:08 Alternative URL: http://172.17.0.3:8080/
GraphQL is a specification of a powerful query language for data-based APIs. In itself it does not mandate any specific implementation of the spec, and there are many, such as Prisma and/or Graphene for Python. The ecosystem also comes with a couple client-side libraries as well as IDEs and plugins.
It is very useful for micro-service applications, but can be just as easily used for monolithic ones too.
- JS GraphQL -- IntelliJ IDEA (and friends) Plugin
- Ariadne GraphQL – Python schema-first server-side GraphQL server implementation
- Headless CMS & GraphQL API with KeystoneJS, tutorial by Brad Traversy
Built on top of Protocol Buffers, gRPC is a multi-language client-server framework/library that makes it possible to specify the protocol, then, whenever you need, generate stubs for all clients & servers you will ever want. They claim it is usable for both close-by scenarios (such as microservices talking to each other) as well as long-distance dating. Examples of supported languages for both client/server include: JavaScript (Node), Python, Java, Go, C++, ... you still readin'? What else do you need? :)
Marketing: InfluxDB is a time series database designed to handle high write and query loads. It is an integral component of the TICK stack. InfluxDB is meant to be used as a backing store for any use case involving large amounts of timestamped data, including DevOps monitoring, application metrics, IoT sensor data, and real-time analytics.
- 12 Intellij IDEA Keyboard Shortcuts You Should Know About, article by Grgur Grisogono
- IntelliJ IDEA Community Edition Essential Training, video course on LinkedIn Learning
- while it tries to explain even the simplest concepts of source code version control etc, it is a good starter for somebody who never used any IDE from IntellIJ and wants to become used to it fairly quickly.
- Make sure you do in fact have a working ESLint setup. The next steps will effectively disable all of the IDE's style checks.
- Settings - Languages & Frameworks - JavaScript - Code Quality Tools - ESLint
- PICK Automatic ESLint Configuration
- CHECK Run eslint --fix on save
- Settings - Languages & Frameworks - TypeScript - TSLint
- PICK Disable TSLint
- Settings - Editor - Inspections - JavaScript and TypeScript
- UNCHECK everything
- Settings - Editor - Inspections - JavaScript and TypeScript - Code quality
tools
- UNCHECK everything
- CHECK ESLint
- Settings - Editor - Inspections - JavaScript and TypeScript - Code quality
tools - ESLint
- CHECK Use rule severity from the configuration file
- Settings - Editor - Inspections - TypeScript
- UNCHECK everything
- Rainbow Brackets – indispensable. Color-codes brackets such that you will never miss which ones end and stop where :).
- Material Theme UI
- .env files support
- Gradianto (Theme)
- AWS Toolkit
- Key Promoter X
- Kubernetes
- *.ignore
- EditorConfig
- GitToolbox
- Protobuf Support
Istio makes it easy to create a network of deployed services with load balancing, service-to-service authentication, monitoring, and more, with few or no code changes in service code.
- JGiven is an intruiging Java framework that seems to finally make it possible to write BDD tests directly in Java, as opposed to using plain text formats.
- JavaScript: Understanding the Weird Parts, video course by Tony Alicea
- First 3.5 hours of a 12-hour-long course.
- JavaScript: Understanding the Weird Parts, video course by Tony Alicea
- An entire course on Udemy.
- Async JS Crash Course - Callbacks, Promises, Async, Await; tutorial by Traversy Media on YouTube
- JavaScript Symbols: But Why?, article by Thomas Hunter II
- Dynamic Promise Chaining, article by Rafayel Arakelyan
- 11+ Features of JavaScript You've Probably Never Used, post by Chidume Nnamdi
- Quokka | The JavaScript Scratchpad, introductory video by Brad Traversy
- What the Heck is the Event Loop Anyway; talk by Philip Roberts; at JSConf EU 2014
- http://vowsjs.org – BDD-style unit-testing framework
- Jasmine – BDD-style unit-testing framework
- HTTP AJAX Request Library
babel is a transpiler for JavaScript that amongst other things, allows one to write code using the latest syntactic sugars, while keeping the resulting code compatible with engines that do not support those features (as long as Babel is able to transpile them).
"The config to share target browsers and Node.js versions between different front-end tools."
copy-to-clipboard is a JavaScript library for copying things into user's clipboard through their browser. TypeScript typings are included.
dockerode is a JavaScript library for communicating with Docker Engine. For TypeScript, @types/dockerode are available.
execa is a JavaScript library/wrapper that makes spawning processes a breeze (has a Promise-like and synchronous interfaces, no weird callbacks). TypeScript typings are included.
eslint is a JavaScript linter.
Compression/decompression library written in pure JavaScript, hence it does not require any specific underlying library, and can thus run even in the browser.
I personally like it, since I've noticed that NodeJS's Gzip standard library
tends to leak file descriptors (they hang around until the process gets
reaped), and fflate
does not suffer from that. And the devs claim
it can even be faster in some occasions than the standard library.
It contains integrated TypeScript types in the main package.
genversion is a handy JavaScript
tool that's able to take a look at your package.json
file, read the version
from it, and store it in a regular .js
file that can then be imported from
both JavaScript and TypeScript (use the --es6
command-line flag).
Put simply, gulp is an alternative to GNU Make when it comes to JavaScript-based projects.
js-yaml is a JavaScript library for encoding and decoding YAML. TypeScript typings are available as @types/js-yaml.
knex is a JavaScript library for accessing SQL databases (MS SQL (Azure included), MySQL, PgSQL, ...). Where it really outshines all the others is the superb builder interface and integrated schema migration. TypeScript typings are included.
There's a bunch of tools that have more or less the same objective: for one to be able to quickly and easily switch between different versions of Node on their machine. Such as
$ nvm install 14 # install the latest NodeJS 14
$ nvm use 14 # use the already installed NodeJS 14 version
$ nvm use # use whatever NodeJS version is expected in the project's .nvmrc file
- nvm-sh -- the original that started it all (works on most standard Unix shells, such as Bash, ZSH, ...)
- nvm-windows -- a Windows clone with the most similar command-line interface, but still somewhat different
- nvm for PowerShell -- a clone that works on Powershell; has a different interface, but is also usable to get the job done
Sometimes, a NodeJS process just hangs. This is usually caused by an unawaited promise,
or unclosed database connection, etc. I never found it easy enough to figure out which
exactly it is. why-is-node-running
can help.
The one thing I really like about it is that it can be easily used without changing the
underlying sources. It is possible to simply run node
(or nodemon
)
with -r
why-is-node-running/include
as extra arguments, and then, when the process
remains hanging, simply kill -SIGUSR1
the process, and it will print out a report.
pg is a JavaScript library providing the very basic PgSQL client bindings. Most of the higher-level libraries will require you to install this in order to be able to talk to PgSQL, so that's why it's here for reference, but ac:link</ac:link> would not recommend anyone actually use this alone. It is too basic. Little to no support for building queries. TypeScript typings available in @types/pg.
prettier is a code-formatter. It supports JavaScript, TypeScript, JSON, YAML, HTLM, CSS, VueJS, and others.
ramda is a JavaScript library providing a lot of simple to very complex functions that make functional programming easier. If you also enjoy functional programming, this is one of the libraries to get. TypeScript typings are available in @types/ramda.
ramda-adjunct is a complementary (much smaller in comparison) JavaScript library to ramda. TypeScript typings are included.
- Complete React Tutorial (with Redux), YouTube Playlist, by The Net Ninja
- React Context & Hooks Tutorial, YouTube Playlist, by The Net Ninja
Acceptance-testing-focused framework that supports JavaScript & TypeScript out of the box, and connects with Jasmine and Mocha.
tar is a JavaScript library capable of creating and reading (incl. extraction) tar archives. The author tried to simulate the actual command-line tar syntax, to make it easier to use for people familiar with tar. TypeScript typings are available as @types/tar.
tar-stream is a generator (creation) and parser (decompression) for tar files. It is seemingly faster than tar (aka node-tar) and uses streams. TypeScript typings are available as @types/tar-stream.
tmp is a JavaScript library for creating temporary files directories nodejs. TypeScript typings are available as @types/tmp.
untildify is a JavaScript library that makes it easy to expand ~ (tilda) in filesystem paths (which is something a shell normally does, but people have gotten used to using it, because it's short) to the user's home directory. TypeScript typings are included.
- Vue.js Performance Series, by Filip Rakowski on vueschool.io
- Lazy loadng and code splitting in Vue.js, post by Filip Rakowski on vueschool.io
- Vue.js Router Performance, post by Filip Rakowski on vueschool.io
- Lazy Loading Individual Vue Components and Prefetching, post by Filip Rakowski on vueschool.io
- Optimizing Third-Party Libraries, post by Filip Rakowski on vueschool.io
- Mastering Browser Cache, post by Filip Rakowski on vueschool.io
- Nuxt SSR Optimizing Tips, post by Filip Rakowski on vueschool.io
- VueJS 2, video playlist by The Net Ninja
- Tips for Unit Testing Vue Components with Jest, post by Achhunna Mali
- I believe the post is worth reading, to understand how one can take a Vue component and write tests against it. However, I do also believe that one should not (when possible) couple their code too much to any given framework. Hence, try to keep the minimum amount of logic that you actually need to test inside the component, and extract as much as you can outside of it. It is much easier to test your own code the layout of which you can always change, rather than the layout that is imposed on you by Vue's authors.
- Plans for the Next Iteration of Vue.js, article by Evan You, at Medium
- Vue 3: What's New? What Changed?; tutorial by Academind on YouTube
- Vue 3 Composition API Full Introduction; tutorial by Academind on YouTube
npm install --save-dev eslint-plugin-prettier-vue eslint-plugin-vue eslint-config-prettier eslint prettier
{
"eslintConfig": {
"parser": "vue-eslint-parser",
"plugins": [
"@typescript-eslint"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"prettier/@typescript-eslint",
"plugin:prettier/recommended",
"plugin:vue/recommended",
"plugin:prettier-vue/recommended"
],
"settings": {
"prettier-vue": {
"SFCBlocks": {
"template": false
}
}
},
"env": {
"node": true,
"es6": true,
"browser": true
},
"parserOptions": {
"parser": "@typescript-eslint/parser",
"ecmaVersion": 2019,
"sourceType": "module"
},
"rules": {
"@typescript-eslint/explicit-function-return-type": [
"error",
{
"allowExpressions": true,
"allowTypedFunctionExpressions": true
}
]
}
}
}
Vuex is a store for the state of your VueJS application.
winston is one of the must-have JavaScript logging frameworks. TypeScript typings are included.
yargs is a JavaScript framework for parsing command line arguments. It expects to be the main entry point into your application, and while many of its pieces support asynchronous code, it is mainly synchronous. TypeScript typings are available as @types/yargs.
- pipelines
Powerful templating engine for Python.
- How to make your template raise when variables are undefined
- The default behavior is to silently print nothing instead.
- https://stedolan.github.io/jq/
- Uses JMESPath – a very powerful query language for JSON data extraction and manipulation
aka Apache Kafka, is a publish/subscribe messaging system that include streaming support.
- Fail Fast, Move On: 10 Bad Reasons to Choose Kanban over Scrum, by Michael Küsters
- Sometimes Kanban is Better Than Scrum, by Mike Cohn
- Stay Lean With Kanban, video course on LinkedIn Learning
- The 10 Misconceptions about Kanban, short blog post by Varun Maheshwari
Knot DNS is very fast authoritative-only DNS server. It's easy to configure (uses YAML+regular text zone files). And there are Docker images available for Knot DNS too.
Originally developed at Google, kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. I.e. it is a replacement for Docker Swarm, with batteries included.
- Microservice Applications in Kubernetes, course by Linux Academy
- Learn Kubernetes by Doing, course on Linux Academy ← there's no theory in this course; it's just a bunch of hands-on labs, so I only recommend taking it after you have at least started with some other, more theory-oriented, course
- Kubernetes: Continuous Delivery w Spinnaker, video course on LinkedIn Learning
- Kubernetes: Native Tools, video course on LinkedIn Learning
- Learning Kubernetes, video course on LinkedIn Learning
- Kubernetes Security, video course on Linux Academy and Kubernetes Security (Advanced Concepts), video course on Linux Academy
- Kubernetes pod autoscaling for beginners, YouTube video, by That DevOps Guy
- Understanding CPU & Memory with the Kubernetes Vertical Pod Autoscaler, YouTube video, by That DevOps Guy
- Configure Liveness, Readiness and Startup Probes, manual page for Kubernetes
helm is a tool that makes it possible to write your Kubernetes deployments (services, secrets, actual deployments, ...) as code. It utilizes Go's templating language.
Helm allows to specify a JSON schema to restrict/validate input variables for your charts. JSON can be a bit too wordy to use. It is possible to write the schema in YAML and to convert it into the JSON format quite easily, though. One example using pyyaml is:
$ <values.schema.yaml python -c "import json; import sys; import yaml; json.dump(yaml.load(sys.stdin), sys.stdout, indent=2)" >values.schema.json
k8s_gateway is a really cool extension to any k8s cluster, becaue it allows external DNS resolution for all service and ingress resources.
kind
is a tool for running local Kubernetes clusters using Docker container “nodes”.
Krew is a package manager for Kubernetes.
metalLB is a very easy-to-use load balancer for Kubernetes, that can be told explicitly what subnet of IPs to allocate from when using services with the LoadBalancer type.
- minikube is a tool for spinning up small-scale Kubernetes. It's most prominent use case is for Desktops.
kubernetes/client-node is a JavaScript (w/ TypeScript typings included) library for Kubernetes. It can be used to actually talk to Kubernetes, as well as reading and creating configuration files.
Rancher is a set of utilities for spinning up and maintaining Docker and Kubernetes clusters in no time.
RancherOS is very similar in nature to CoreOS, in that it gives one the ability to quickly spin up a Linux machine with Docker Engine up and running. It supports cloud config (ie. you can provide it with a config file and it will set up itself based on that, unattended).
It can run either on a physical machine, VM or in the cloud.
Rancher Kubernetes Environment (aka RKE)
RKE is a tool that can either be used standalone or in conjunction with RancherOS and allows one to upgrade their running Docker Engine installation to a Kubernetes installation. Again, it is configurable upfront.
- LPI Linux Essentials Certification, video course on Linux Academy
- Learn Linux by Doing, set of labs from Linux Academy
- Red Hat Certified Specialist in Linux Diagnostics and Troubleshooting Exam Prep (RH342 ), video course on Linux Academy
- Very little actually in this course that would be RHEL-only. Useful.
- Red Hat Certified System Administrator (EX200) - RHCSA Exam Prep, video course on Linux Academy
- Red Hat Certified Engineer (RHCE), video course on Linux Academy
- Linux Foundation Certified Engineer, video course on Linux Academy
- Nice library of various tasks that everyone gets to do every now and then, e.g. set up BIND, set up iSCSI, ...
- LPIC-1: System Administrator Exam 101, video course on Linux Academy
- YouTube Videos
- Safari Books Courses
- Safari Books
- Petr Motejlek's Leadership Safari Books Playlist
- Peopleware: Productive Projects and Teams
- Getting Things Done: The Art of Stress-Free Productivity
- To give better feedback, you must fully understand the agony of receiving it
- Giving and Receiving Feedback, by Gemma Roberts, at Lynda.com
- Business Express: Manage Yourself And Your Workload, by Mike Clayton, at Safari Books
- Improving Your Judgement on Lynda.com
- Radical Candor: Be a Kick-Ass Boss Without Losing Your Humanity, by Kim Scott
- 8 Signs an Employee Is Exceptional, by Jeff Haden
- There is Value in Having a Stable Team, by Derek Huether
- How to say "no" to clients, bosses, and stakeholders, by Jennifer Hamel
- Organizations that Work on Fewer Projects at a Time Get More Done, by Mike Cohn
- Ideation for Marketers, by Brad Batesole – useful techniques for brainstorming sessions
- Impact Mapping
- Critical Thinking, by Mike Figliuolo
- A Feedback Exercise for Teams That Gets Results, by Lou Bergholz
- Effective Listening, video course of LinkedIn Learning
- Interpersonal Communication, course on LinkedIn Learning
- Developing Self Awareness, video course on LinkedIn Learning
- Transitioning from Technical Professional to Manager, video course on LinkedIn Learning
- Delivering Employee Feedback, video course on LinkedIn Learning
- Having Difficult Conversations, video course on LinkedIn Learning
- You According to Them, book by Sara Canaday (T&C Press)
- 5 Team Dynamics Mistakes--And 5 Ways to Fix Them, poster by Viktor Cessan & Stefan Lindbohm
- Is Working on a Team for Everyone?, blog post by Stacey Ackerman
- Stable Team: How to Keep the Performance and the Ability to Compete, blog post by Martin Dusek
- The Truth About Open Offices, article by Ethan Bernstein & Ben Waber
- Tuckman Was Wrong, article by Doc Norton
- Turns out, stable teams don't necessarily equate to performing teams.
- Rip IT Up And Start Again?, lecture by Sam Newman, at NDC 2020
- Servant Leadership: Putting Your Team First, and Yourself Second
- Servant Leadership, Wikipedia
- The Role of Leaders on a Self-Organizing Team, by Mike Cohn
- Challenges of Being a Servant Leader, by Stacey Ackerman
- Impact Mapping
- Four Quick Ways To Gain Or Assess Team Consensus, article by Mike Cohn
- Two Types of Authority Leaders Must Give to Self-Organizing Teams, article by Mike Cohn
- "DO's and DON'T'S for Managers in Agile", blog post by Anton Zotin
- Management 3.0 -- A real experiment with agile management -- Agile Prague 2019, lecture by Ralph van Roosmalen
- Lies, Damned Lies, and Metrics; lecture by Roy Osherove, at GOTO 2017, on YouTube
- This sits in the middle between management and perfect code, as metrics is something that both management on which the teams and the management need to work together. I have seen it fail too many times when management were the only ones working on it, failing (because they were forcing the teams into bad habbits). I have also seen it being done only be the teams, failing (because management did not care and did not allow changes to happen based on those metrics' results).
- Learn to Say "No" and End Your Multitasking!, talk by Johanna Rothman, at Agile Prague Conference 2016
- The Mother of All Demos, demo by Douglas Engelbert, in 1968
- Maybe this does not technically belong here, because it is a category of its own, but it is mind-boggling to see how many pieces of computer systems we take for granted now are actually quite old (the demo being from 1968).
minio is both an AWS S3-compatible server as well as client that can be used to interact with the files inside S3-compatible servers. It can even mount an S3 bucket as a regular file system.
mkcert is the tool you've been looking for if you've ever need to develop SSL-enabled services and hated there never was an easy way to create the certificates. mkcert comes to the rescue. It allows one to generate a local CA (installs it as trusted into system store, Java keystore, ...) and then generate as many server-side certificates as one needs. It supports wildcards and multiple SANs, but that's too obvious :).
- In case you need a client auth cert (like the ones for PgSQL clients), as
of now, mkcert does not generate certificates with CN (used by PgSQL server to
authenticate you). There's
a PR open (that nobody yet
reviewed nor merged). For the time being, it is possible to use the rpeo
directly to install the tool using Go:
go get [github.com/antong/mkcert](https://github.com/antong/mkcert)
"MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. No database makes you more productive."
Mozilla SSL Configuration Generator is a web tool that can be used to quickly generate SSL-enabling configuration snippets for popular web-servers (e.g. Nginx) and providers (e.g. AWS Load Balancer). Have you ever been looking for the super-safe-super-secure-and-trustworthy SSL configuration snippet for your favorite web server? They have it! (Unless that web server is Ghost, in which case you are "attached to another object by an inclined plane, wrapped helically around an axis").
neo4j is a graph-based NoSQL database engine. It has support for numerous programming languages. Available on Docker Hub.
There is also very impressive Neo4j online sandbox.
Poke-through-your-firewall tool. It allows one to expose a network service (HTTP/HTTPS or regular TCP) that would normally be available only to your machine, to the Internet.
- Nexus Framework Guide – for scaling scrum (when you need many people in a team)
Nomad is a clustered server/client system for workload orchestrations. It supports running and managing jobs via containerization (Docker), pure binaries, virtual machines, ...
- A nice command line tool for making image-only (i.e. scanned) documents into searchable PDFs with text.
OrientDB is essentially an object-graphed database. It is a NoSQL database, yet it uses SQL-like syntax. It has client support for many languages, incl. Python, PHP, JavaScript, ... It is also available as a Docker image.
-
Swiss army knife for converting between multiple document formats (including PPTX, PDF, HTML, Markdown, ...).
-
My ( ac:link</ac:link>) use case: write one Markdown doc and then use it as source for your slides as well as document to be published (HTML).
- oracle/docker-images
- official Docker images (or Dockerfile's) from Oracle themselves for not only their database, but also the command line tools
- 7 Ways to Win with Pair Programming, by Byron Sommardahl
- 10 Ways to Kill Pair Programming, by Byron Sommardahl
- Pair programming, by Wikipedia
- Pair Programming vs. Code Reviews, by Jeff Atwood
- Effective vs Ineffective Pair Programming, by Alan Skorkin
- I Love Pair-Programming, by Rod Hilton
- Why I'm not a fan of pair programming, by Edaqa Mortoray
- The Benefits and Pitfalls of Pair Programming in the Workplace, by Sam Harris
- Pair programming is hard, by Martin T. Varga
- Pair Programming -- My Personal Nightmare, by Ben Northrop
- Extreme Programming Rules
- "All production code is pair programmed."
- "Move People Around."
- On Pair Programming, article by Birgitta Böckeler & Nina Siessegger
- Remote Mob Programming, article by Simon Harrer, Jochen Christ and Martin Huber
- Mob Programming -- Agile Prague 2019, lecture by Llewellyn Falco
- Remote Mob Programming, Mob Programming Gathering, recording by Agile New England, on 2020-09-03
- Mob Programming: A Whole Team Approach, YouTube video featuring Woody Zuill at GOTO 2017
- Google Remote Desktop – works only when both parties have Google Chrome installed, and only allows two parties to participate. Is reasonably quick and deals well with latency jittering.
PCP, for short, is an attempt to put together the power behind tools like htop, iotop, ... not only at runtime, but also to allow later processing of the collected data.
Composer is dependency manager for the PHP programming language. Similar in nature to JavaScript's NPM or Ruby's Gems.
If you already use Nette (or parts of it), I think this is so similar, that it's not really worth switching. Nevertheless, it's good to know about it.
- PowerShell History File, article by 0xdf hacks stuff
- Nice description of how can one set up their history file to remember command history and to have it saved upon every command entry (ie. if you have multiple terminals open, they won't rewrite each other's history).
Prisma is a a server backend that implements the GraphQL specification, as well as a powerful client-side library for accessing such a server. As of 2019, it supports TypeScript, JavaScript, Go and MySQL, PostgreSQL natively.
It is a nice-enough and simple to use tool for folks who are building micro-service applications and do not wish to directly implement the GraphQL specification themselves. A notable feature is the ability to design a schema for your database and letting Prisma take care of its deployment.
Prometheus is a monitoring platform that collects metrics from monitored targets. It can scrape API endpoints, it can pull/push data from clients in your favorite languages and it has many plugins that make it possible for it to scrape things like collectd.
It can be used to alert when metics are outside of operational ranges. It can also be used to produce graphs. If one isn't satisfied with the graphs, one can also use Grafana to create the graphs.
The main advantage of prometheus over something like Zabbix, for example, is the fact it has a declarative configuration. I.e. you configure it using code (or config file). No need to click through the GUI or something awful like that. Obviously, if you wanted to have a config file, you wouldn't use Zabbix, but Nagios instead, but still those are heavily geared towards a human using the GUI. Prometheus is much better in a micro-service-oriented infrastructure.
No, this has nothing to do with the puppet master from Outlast (video game), although a certain component called puppetmaster was involved at one point or another. Puppet is a tool for automating server and other devices installation and setup (similar to Ansible).
- Although not called like that (based on the man page), pv is a progress (or pipe?) visualizer, in that it can be used either an intermediary between two processes communicating or asked to visualize the data transfer on a given PID and File Descriptor (only works on Linux and when the file descriptor has either a file or block device open :).
$ dd if=/dev/urandom of=/dev/stdout bs=512 count=$(( 2 * 1024 * 1024 )) | pv | dd if=/dev/stdin of=/dev/null 1.00GiB 0:00:36 [27.8MiB/s] [ <=> ]
Installing Python on MacOS: Make sure to install your python interpreter using homebrew or macports. Should you chose to install it using the installer available from python.org it will not be able to use TLSv1.2 (and maybe other things) ... DON'T.
-
Don't forget to install open-ssl and curl-ca-bundle using homebrew or macports
-
PyCharm - Python IDE, free community edition
- Keyboard Shortcuts for PyCharm
- Plugins
- Makefile Support – syntax highlighting for Makefiles and support for run configurations for make
- GitToolBox – can perform "git fetch" at specified intervals and much more
- Refactoring
-
Formatting
-
Interesting, yet standard library modules
- abc -- Abstract Base Classes
- decimal – fixed float point and floating point arithmetic
- itertools
- functools
-
eBooks
- Safari Books
- https://www.safaribooksonline.com/library/view/python-cookbook-3rd/9781449357337/ – Python Cookbook by David Beazley
- https://www.safaribooksonline.com/library/view/effective-python-59/9780134034416/ – Effective Python: 59 Specific Ways to Write Better Python
- Safari Books
-
Conventions
-
Interesting PEPs
- PEP-8 – Style Guide for Python Code
- PEP-20 -- The Zen of Python
- PEP-257 – Docstring Conventions
- PEP-343 -- The "with" Statement
- PEP-544: Protocols: Structural subtyping (static duck typing)
- PEP-557: Data Classes
- PEP-561: Distributing and Packaging Type Information
- PEP-3119 -- Introducing Abstract Base Classes
-
REFACTORING IN PYTHON LIVELESSONS: IMPROVING YOUR CODE VIDEO TRAINING
- Not the best of the materials out there if you've already known about these practices, but it's great for the novices out there.
-
Modern Python LiveLessons: Big Ideas and Little Code in Python (by Raymond Hettinger)
-
PyTest
-
- See also the thredo library
-
The Fun of Reinvention, by David Beazley at Pycon Israel 2017
-
Dataclasses: The code generator to end all code generators, by Raymond Hettinger at PyCon 2018
-
bpython interpreter – a very useful interpreter for interactive code journeys (where the standard repl loop just doesn't cut it for you, yet IDE would be too much).
-
- One of many tools for runing static code analysis. The two of its major features are the fact it can check both dynamic and static types and it has an integrated daemon that can run in the background in order to speed up subsequent runs after making changes (this really saves a lot of time).
-
Promise is a library that implements Promises, as known from e.g. JavaScript, in Python.
-
Graphene is a library that allows one to easily implement the GraphQL server protocol in Python. It is a layer, and thus, you will need to think of using something like Graphene-Django or flask-graphql.
-
responses: library for faking (stubbing, mocking, ...) rwquests in your unit tests
-
pytest-subprocess: library for faking (stubbing, mocking, ...)
subprocess
calls in your unit tests -
pyfakefs: library for faking (stubbing, mocking, ...) filesystem calls (
pathlib
,os
, ...) in your unit tests -
WTForms – convenient library for HTML forms
django rest framework is an extension to the django Python web-building framework that allows one to easily spin up RESTful application programming interfaces.
dramatiq is a distributed task processing library for Python 3. In other words, you can use it whenever you need to solve a problem where you have some workers (processes, threads, machines) and you have some tasks they should perform, but you don't want to micromanage them. dramatiq also allows you to create pipelines (like you would in a shell, i.e. one task's result is another task's input) or groups (group of tasks need to all be finished before proceeding further). Internally it uses a message broker, such as RabbitMQ or Redis (since those can be accessed from multiple machines, that's where the distributed comes from).
Pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language.
- Boundaries, by Gary Bernhardt
- Using simple values (as opposed to complex objects) not just for holding data, but also as the boundaries between components and subsystems. It moves through many topics: functional programming; mutability's relationship to OO; isolated unit testing with and without test doubles; and concurrency, to name some bar.
- Why Isn't Functional Programming the Norm?, lecture by Richard Feldman at Clojure 2019
- The Web That Never Was, talk by Dylan Beattie, at NDC 2018
- This is a joke. Meant to prognose what potentially could have happened... Totally worth watching.
- Rethinking Time in Distributed Systems, lecture by Paul Borill at Stanford in 2010
- Although quite old, I really find it interesting that it still provides some interesting insights into our current world. I even find myself thinking that Paul talked about event-driven architecture even back then.
- Game of Life Kata in Clojure; by Michael Whatcott
- The Frontend Taboo: a Story of Full Stack Microservices; talk by Luis Mineiro and Moritz Grauel; at GOTO 2016
- Micro-frontends: A microservice approach to the modern web; talk by Ivan Jovanovic; at NearForm 2020
- Micro Frontends: Composing a Greater Whole; talk by Yoav Yanovski; at Vue.js Amsterdam 2020
- Avoiding Microservice Megadisasters; talk by Jimmy Bogard; at NDC 2017
- Microservices and Frontends; talk by Erik Dörnenburg; at ThoughtWorks Talks Tech 2019
- The Next Paradigm Shift in Programming; talk by Richard Feldman
- "Adding resources to a late project makes it later." (aka Brook's Law)
- "Scrum recognizes no sub-teams in the Development Team, regardless of domains that need to be addressed like testing, architecture, operations, or business analysis" – Scrum Guide
- "There are no experts, there is only us" – Jeremy D. Miller
- "In preparing for battle I have always found that plans are useless, but planning is indispensable." – Dwight D. Eisenhower
- "It seems that perfection is reached not when there is nothing left to add but when there is nothing left to take away." – Antoine de Saint-Exupéry
- "If you work only on the problem at hand, you will get by for today. If you work on yourself, you will excel for a lifetime." – Jim Rohn
- "Agile is highly disciplined and more difficult, requires more maturity, than waterfall." – Lise Hvatum
- "It is impossible to create joint plans with people who strive for different goals." – Confucius
- "Make decisions slowly by consensus, thoroughly considering all options; implement decisions rapidly." – Toyota Way, #13
- "If we can only offer new value to our customers every six months, they’ll benefit slowly, we’ll benefit slowly, and, worst of all, we’ll learn slowly. That puts us all at risk." – Ron Jeffries
- "Be quick, but don't hurry." – John Wooden
- "The plan is to become a successful company in the right way. That is: have a product, have a market, and have customers who are buying your product." – Daniel "Danny" Mark Lewin
- "A conference is a gathering of people who singly can do nothing, but together can decide that nothing can be done." – Fred Allen
- "Goals may cause systematic problems for organizations due to narrowed focus, unethical behavior, increased risk taking, decreased cooperation, and decreased intrinsic motivation." – Daniel H. Pink
- "The very presence of goals may lead employees to focus myopically on
short-term gains and to lose sight of the potential devastating long-term
effects on the organization." – Ordóñez et al., 2009
- Taken out of context, this might be misinterpreted as "goals are always bad". This relates to goals that are set by individuals other than the ones executing on them.
- "Scrum is more like your mother-in-law. She will point out all your deficiencies and the things that are going wrong with you, but not fix them. You need to fix them yourself." – Jurgen De Smet
- "The most successful people, the evidence shows, often aren't directly pursuing conventional notions of success. They're working hard and persisting through difficulties because of their internal desire to control their lives, learn about their world, and accomplish something that endures." – Daniel H. Pink
- "That's how we are out of the box. If, at age fourteen or forty-three, we're passive and inert, that's not because it's our nature. It's because something flipped our default setting," – Daniel H. Pink
- "The ultimate freedom for creative groups is the freedom to experiment with mnew ideas. Some skeptics insist that innovation is expensive. In the long run, innovation is cheap. Mediocrity is expensive-- and autonomy can be the antidote." – Tom Kelley
- "Perhaps it's time to toss the very word 'management' onto the linguistic ash heap alongside 'icebox' and 'horseless carriage'. This era doesn't call for better management. It calls for a renaissance of self-direction." – Daniel H. Pink
- "Those men and women to whom we delegate authority and responsibility, if they are good people, are going to want to do their jobs in their own way." – William McKnight
- "The desire to do something because you find it deeply satisfying and personally challenging inspires the highest levels of creativity, whether it's in the arts, science, or business." – Teresa Amabile
- "Figure out for yourself what you want to be really good at, know that you'll never really satisfy yourself that you've made it, and accept that that's okay." – Robert B. Reich
- "One cannot lead a life that is truly excellent without feeling that one belongs to something greater and permanent than oneself." – Mihaly Csikszentmihalyi
- "Be prepared to cut your losses – canceling bad projects early is success because you save time, talent, money and resources that can be applied to better opportunities." – Ian Spence and Kurt Bittner
- "Any intelligent fool can make things bigger and more complex... It takes a touch of genius - and a lot of courage to move in the opposite direction." – "Small is Beautiful", by E.F. Shumacher
- "Your work is shit." – Steve Jobs, interview with Bob Cringely
- Bob Cringely: "What does it mean when you tell someone their work is shit?"
- Steve Jobs:
- "It usually means their work is shit. Sometimes it means, 'I think your work is shit. And I – I'm wrong'".
- "The most important thing I think yo can do for somebody who's really good and who's really being counted on is to point out to them when their work isn't good enough. And to do it very clearly and to articulate why ... and to get them back on track."
- "When you have to fire people, do it with humility. Remember, the reason you have to fire them is not that they suck. It's not even that they suck at this job. It's that this job–the job you gave them–sucks for them." – Kim Scott
- If no mistake have you made, yet losing you are… a different game you should play. -- Yoda
- "The client or sponsor is the driver, yes, and has brought resources to bear to accomplish this goal that you’re managing, but you were not brought on to be a “yes” person. (If you were, then stop reading right now and go find another job. You’re in an unhealthy situation!)" – Jeniffer Hamel, in How to say "no" to clients, bosses, and stakeholders
- "If everything is under control, you're going too slow!" – Mario Andretti
- "Anyone who has never made a mistake has never tried anything new." – Albert Einstein
- "It does not matter how good you are, it does not matter how big you are, you can be taken down; if you are not agile." (talking about Nokia, Myspace, ...) – Jeff Sutherland
- "You cannot make a commitment on anyone else's behalf and expect committed behavior from them." – Lisa Adkins
- "The single biggest problem in communication is the illusion that it place." – George Bernard Shaw
- "So much of what we call management consists of making it difficult for people to work." – Peter Drucker
- "If you don't change, you die!" – by Herb Kelleher
- "Yes, we want to play football, we really like it...but let’s be pragmatic about it, the “by the book” football doesn’t really fit our context. So we will do 3 hours long matches because our players need more time to score. Also we don’t need trainer for our players, we will just tell them when to hit the ball and how (plus they saw a video about football and few of them are certified players now l). Also the ball is too hard for our players so we will use a beach ball and make the goals bigger. And goalkeeper will be a temporary role." – by Karel Slatinský
- "Simple, clear purpose and principles give rise to complex and intelligent behavior. Complex rules and regulations give rise to simple and stupid behavior." – by Dee Hock
- "For the record, a single "I don't know" is enough to disqualify a story from sprint planning." – by Kelley O'Conell
- "Scrum focuses on being agile which may (and should) lead to improving. Kanban focuses on improving, which may lead to being agile." – by Karl Scotland
- "The first thing you’ll see is, much like you do with an application, you’re not going to have 1 super-app that represents the whole company; you’re going to break it down into many smaller services and applications that compose it." – by Armon Dadgar
- "We don't need an accurate document. We need a shared understanding." – by Jeff Patton
- "Agility means that you are faster than your competition. Agile time frames are measured in weeks and months, not years." – by Michael Hugos
- "We regularly coach groups that ask, 'How can we calculate how many people we will need?'. Our suggestion is, 'Start with a small group of great people, and only grow when it really starts to hurt.'. That rarely happens." – by Bas Vodde and Craig Larman
- "Do the planning, but throw out the plans." – by Mary Poppendieck
- "Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations" (ie. any piece of software reflects the organizational structure that produced it) – Conway's Law
- "Let's (over) simplify the jobs within Scrum to their bare minimum description: Product Owner has a focus to build the right things; Team has a focus to build the things right; Scrum Master helps them build the right things right", by Jürgen de Smet
- "Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite. The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt.", by Ward Cunningham
- "Cars have breaks so you can go fast.", by Kevlin Henney
RabbitMQ is a multiplatform distributed message broker.
redis is a powerful in-memory (with persistence support) database for storing various data types; it can also be used as a message broker.
- Learning Redis, course on LinkedIn Learning
- Simple Task Queues with Flask & Redis, video tutorial by Julian Nash on YouTube
- Web Scraping & Task Queues with Flask, video tutorial by Julian Nash on YouTube
- Faster Image Loading with Pillow, RQ & Flask, video tutorial by Julian Nash on YouTube
- How Shopify is Scaling Up Its Redis Message Queues, lecture by Moe Chaieb at Redis Day New York 2019, on YouTube
- Redis Crash Course Tutorial, video by Traversy Media on YouTube
- Working Remotely (2015), by Todd Dewett
- ex: "Every productive behavior starts with a conscious choice. I want you to start the day by deciding that non-work activities will not be an option during your designated work time. Believe me, once you allow non-work activities to invade your work time, the easier it becomes to do it again, and again. Next, adopt this rule. No personal calls, emails, texts, instant messages, and so on. Yes, emergencies happen but they're rare and you need to protect your work time. Not only do I want you to refrain from sending personal messages, I want you to try and not receive them either."
- Rust, Crash Course, video by Traversy Media
- Next-Generation Programming: Rust & Elm, lecture by Richard Feldman at GOTO 2020 on YouTube
Salt is:
- A configuration management system. Salt is capable of maintaining remote nodes in defined states. For example, it can ensure that specific packages are installed and that specific services are running.
- A distributed remote execution system used to execute commands and query data on remote nodes. Salt can query and execute commands either on individual nodes or by using an arbitrary selection criteria.
Seems like Salt is basically Ansible with state, that is not Ansible Tower :). They both use Python and YAML.
- Official
- https://www.scrum.org
- Scrum Guide
- Nexus Scrum – for scaling scrum (when you need many people in a team)
- Books
- LiveLessons
- Other Safari Books Videos
- YouTube
- Petr Motejlek's Safari Books Agile Playlist
- Scrum Guide
- Do Scrum Teams Meet Too Much, by Mike Cohn
- 3 Agile Expers on the Role of the Scrum Master (VIMEO link)
- Deadlines in Scrum, by Zuzi Šochová
- Personalized Guide to Agile, by Mike Cohn
- Scrum - Pitfalls from more than 10 years of practical experience, by Benjamin Lutz
- Scrum Master Toolbox Podcast
- Sprint Zero: A Good Idea or Not?, by Mike Cohn
- GOTO 2015: Scrum at Scale, by Jeff Sutherland
- A longer version of this: Postgres Vision 2018, Keynote, Scrum at Scale, by Jeff Sutherland
- Scrum@Scale Guide
- Coaching Agile Teams (Video), by Lisa Adkins
- Interlocking Agile Roles, video by Lisa Adkins
- Agile at Work: Driving Productive Agile Meetings, video by Doug Rose
- 7 lesson's I've learned using Scrum for infrastructure projects, article by Bob Molenaar
- Agile Scrum and Infrastructure, article by Craig Gmyrek
- Do Scrum Teams Meet Too Much?, article by Mike Cohn
- Why Scrum Isn't Making Your Company Very Agile: How Misconceptions About The Product Owner Role Harm Your Organization, and What To Do About It., presentation by Michael James
- Scrum & The Toyota Production System, Build Ultra-Powerful Teams, article by Pierre Jannez
- How Scrum Patterns help you become a better Scrum Master, blog post by Karel Smutný
- Differences Between Scrum and Extreme Programming, blog post by Mike Cohn
- Jeremy Stafford's answer to Do programmers really like Scrum?
- Common Dysfunctions of Scrum Teams, Part I, post by "The Clever PM"
- Common Dysfunctions of Scrum Teams, Part II, post by "The Clever PM"
- Scrum@Scale, GOTO 2017, presentation by Joe Justice
- Very inspiring. Very motivating. Recommended.
- Scrum Master: Shared or Dedicated, post by Andreea Gheorghiu
- Scrum Patterns, lecture by James Coplian at Agile Bratislava, on Youtube
- The Main Purpose Behind All The Scrum Elements -- The Development Team, YouTube video from Jurgen de Smet
- The Main Purpose Behind All The Scrum Elements -- The Product Owner, YouTube video by Jurgen de Smet
- Not Just About Sucking a Little Less, YouTube video featuring James Coplien
- Scrum is Bad, talk by Jonathan Crossland
- QUite an interesting take on the whole scrum methodology, from the other side. Recommend watching more videos of Jonathan's.
/tz is an internet service (but can also be integrated into Slack) that can be used for very quick time zone conversions. A notable feature is the ability to ask for the best time to meet between multiple time zones/cities.
snap(s)
"A snap is a bundle of your app and its dependencies that works without modification across many different Linux distributions. Snaps are discoverable and installable from the Snap Store, an app store with an audience of millions."
snaprd is a backup utility utilizing rsync and smart hard link creation. It can be run locally or remotely.
Multi-platform peer2peer communication framework
- socket.io
- https://github.com/miguelgrinberg/python-socketio – Python Socket.IO server
- https://pypi.python.org/pypi/socketIO-client – Python Socket.IO client
- https://github.com/socketio/socket.io-client-swift – ObjectiveC/Swift Socket.IO client
- https://github.com/socketio/socket.io-client-java – Java Socket.IO client
- MOSH
- sshpass: can't use SSH keys for whatever reason, yet you don't want to type the password manually. Perhaps you're doing some kind of automation? Use sshpass!
Socat is a command-line-based utility that establishes two bidirectional byte streams and transfers data between them. Because the streams can be constructed from a large set of different types of data sinks and sources (incl. SSL).
Sococo is a company/product that attempts to bridge the gap between being just a unified communications tool and a kinda virtual reality for remote work environments (with a grain of salt).
Basically, the selling point is that with you team/organization, you can create a layout/map of your workplace (including seats, conference rooms, kitchens, ...) and have your colleagues kinda roam around that workplace and interact with others, should they feel like it (it's also possible to sit in a phone booth for just one person).
I find this interesting, since using simple text/emoji statuses in a unified messaging app is definitely not enough -- I never know when others are engaged in some kind of discussion, but simply just type (as opposed to being in some kind of room/area that anyone can join), or whether they are truly available (their status might show available, even though they are in a room/area and are actively engaged with people -- sococo should make it obvious where they are).
Splunk is a de facto standard tool for log collection, storing, processing and analysis (incl. graphs, alerts, etc). It is a commercial offering, but it also offers a free version, which is usable for small-scale deployments.
Text editor.
"Honestly, Svelte feels and seems like a Vue ripoff. To me, a heavy TypeScript user, it does not seem to be doing anything too different or radical enough, to really warrant a switch."
Equipment: none Time: 15 - 30 minutes Number of Participants: 8 - 20 people (with less, it's not so exciting)
Rules: Have everyone stand in a circle facing each other, shoulder to shoulder. Instruct everyone to put their right hand out and grab a random hand of someone across from them. Then, tell them to put their left hand out and grab another random hand from a different person across the circle. Within a set time limit, the group needs to untangle the knot of arms without releasing their hands. If the group is too large, make multiple smaller circles and have the separate groups compete.
Objective: This game for team building relies heavily on good communication and teamwork. It also results in a lot of great stories for the water cooler chat in the workplace.
Equipment: blind folds and 2 (or more) ropes Time: 15 - 30 minutes Number of Participants: 5 - 20 people
Rules: Lay the ropes in a straight line in front of each team. Have the teams stand side by side behind the rope. Have everyone take a step or two back away from the rope. Next, ask everyone to come back and try to form a square with the rope without removing their blindfolds. Set a time limit to make it more competitive. To make it even more difficult, instruct some team members to stay silent.
Objective: Focuses on strong communication and leadership skills. By instructing some team members to be silent, this game also requires an element of trust across the team, allowing team members to guide each other in the right direction.
Equipment: flipchart (or clipboard), **papers, crayons (or pencils or pens), photos/pictures to draw (or some assortment of every day objects) **Time: **15-30 minutes **Number of Participants: 4-20 people
Rules:
1. Get a flipchart (or clipboard), markers, pencils, crayons or pens, and a bunch of random pictures. This game works best with more unobvious objects (say, a trampoline vs a coin). 2. Divide all participants into teams of 4-6 people. 3. Ask each team to pick one person to be the "artist". Ask the artists to take their place next to the flipchart. 4. Face the teams away from the flipcharts and present them all with one (the same) picture. 5. The teams will then instruct their artists on how to draw the picture based on verbal instructions alone. They can describe the object but not state its name. The artist can't see the object at any time, nor can the team see what the artist is drawing. 6. The team whose drawing comes closest to the actual object wins.
Equipment: rope (or measuring or masking tape or long stick) Time: 15-30 minutes Number of Participants: 5-20 people
Rules:
1. Create a straight 'finish line' using the rope. 2. Ask all participants to cross the finish line at exactly the same time, i.e. a "photo finish". Participants will have to coordinate with each other to pull this off. 3. Take a photograph or take a video every time they cross the finish line to see if it qualifies as a photo finish. 4. For added difficulty, ask the participants to walk or run across the finish line in a photo finish.
Equipment: papers, crayons (or pencils or pens) Time: 15-30 minutes Number of Participants: 4-20 people
1. Grab cardboard, chart paper, markers, crayons, tape or anything else you'll
need to draw and paint a team emblem or team shield.
2. Divide players into small teams of 3-4 people each. You can make the team
composition the same as your real-life office teams to focus more on the team
identity aspects of this activity.
3. Give each team enough time to plan, draw and paint an emblem for their
teams. The emblem must represent something the identifies the team and its
values. They get 10 minutes for inspiration (they can look up ideas online if
they want to), 20-80 minutes to make the emblem.
4. Once the time is up, ask each team to display their emblem. Invite all other
teams to give their own interpretation of the emblem. Then the creating team
gives their actual interpretation. Repeat the process for all other teams.
Teleconsole is a tool for enabling remote access to local services, similar to ngrok. Teleconsole is different in that it allows the other party to directly control a terminal session (with the possibility of even being able to forward ports over the protocol), such that both of you can actively participate in the session. (It's more or less like a shared tmux panel over SSH or web interface).
Telegraf is an agent (written in Go) for collecting metrics and writing/sending them into various outputs. Similar tools include CollectD for instance. It has many plugins that facilitate its metric collection as well as storage capabilities. For example, the nginx plugin can be used to collect requests per second, response times, active connections, ... and you can ingest the metrics into Prometheus.
- Terraform.io is in infrastructure as a code
solution that allows one to specify how one's infrastructure is supposed to
look like, and Terraform makes it happen. It supports many different cloud
providers as well as virtualization platforms, and others.
- Terraform is the answer to the people who don't want the hassle of interfacing with APIs directly (i.e. using boto3 or similar tools) and want one more level of abstraction.
- Example/Tutorial: A complete AWS environment with Terraform, by pippopeppe83
- Terraform Credentials from the Environment, project on GitHub
- very useful for switching between different Terraform Cloud credentials using environment variables
- Understanding Test Driven Development -- Roy Osherove
- Understanding Mock Objects -- Roy Osherove
- Unit Testing Best Practices -- Roy Osherove
- Unit Testing Code Reviews Best Practices -- Roy Osherove
- Unit Testing and TDD: Why you should care and how to make it happen -- Roy Osherove
- Test Reviews
- Surviving the Top Ten Challenges of Software Testing: A People-Oriented Approach
- This is quite an old one, but very good still.
- Beyond Unit Tests: Taking Your Testing to the Next Level, by Hillel Wayne
- TDD Harms Architecture, by Uncle Bob
- Test Coverage (Alone) Is A Lie!, by Stephen Mizell
- Please don't mock me, by Justin Searls
- xUnit Test Patterns: Refactoring Test Code, by Gerard Meszaros
- Behavior Driven Design, course on LinkedIn Learning
- Thoughts on TDD (After almost 20 years), blog post by James Grenning
- YouTube
- Safari Books
- Growing Object-Oriented Software, Guided by Tests
- "This is a great book that greatly promotes testing and readability of code over over-engineering".
- Testing Python: Applying Unit Testing, TDD, BDD and Acceptance Testing
- Test-Driven Development with Python, 2nd Edition
- Test-Driven Python Development
- Growing Object-Oriented Software, Guided by Tests
TextFSM is both a Python
module (library) as well as command line utility that makes it very easy to
parse out information from textual data, such as your ifconfig
/ip
output
etc. You do have to prepare a state automaton first, but hey, that's easy. Not
everybody failed their college education with that like I did :).
$ tee template <<EOF
Value Required,Key Iface ([a-zA-Z0-9]+)
Value Required MAC ([a-z0-9:]+)
Value List Inet ([0-9.]+)
Value List Inet6 ([a-zA-Z0-9:]+)
Start
^\S+:.* -> Continue.Record
^${Iface}:
^\s+ether\s+${MAC}
^\s+inet6\s+${Inet6}
^\s+inet\s+${Inet}
EOF
$ python3.7 -m textfsm template <( ifconfig )
FSM Template:
Value Required,Key Iface ([a-zA-Z0-9]+)
Value Required MAC ([a-z0-9:]+)
Value List Inet ([0-9.]+)
Value List Inet6 ([a-zA-Z0-9:]+)
Start
^\S+:.* -> Continue.Record
^${Iface}:
^\s+ether\s+${MAC}
^\s+inet6\s+${Inet6}
^\s+inet\s+${Inet}
FSM Table:
['Iface', 'MAC', 'Inet', 'Inet6']
['en0', '28:cf:e9:15:0c:1d', ['172.30.163.245'], ['fe80::c0:ad4e:4923:a0da', '2001:4878:a261:3000:10cd:7715:e55a:6722', '2001:4878:a261:3000:80ee:72e0:df15:a06b']]
['p2p0', '0a:cf:e9:15:0c:1d', [], []]
['awdl0', '6a:9e:da:fa:6b:41', [], ['fe80::689e:daff:fefa:6b41']]
['en1', '32:00:11:83:aa:c0', [], []]
['en2', '32:00:11:83:aa:c1', [], []]
['bridge0', '32:00:11:83:aa:c0', [], []]
-
Tmux is a terminal multiplexor, like screen (for those familiar with that), which not only allows one to multiplex terminals in text mode, but also offers integration with GUI tools, like iTerm.
-
tmux 2 by Brian P. Hogan (Safari Books)
-
TIP: To make it easier for one to SSH into a machine equipped with tmux and have a constant and isolated remote tmux session either created or attached, one can use the below function (if placed in .bash_profile, it can then be used as a command)
tssh() { ssh -t "${*}" "LANG=en_US.UTF8 tmux -CC new-session -A -s '${USER}'" }
Tuleap is an open source issue tracking system and Git source code repository. It has many features included. It can be easily spun up using a Docker image.
- Safari Books
- TypeDI is a library for both JavaScript and TypeScript that takes your dependency injection pains away.
- Wondering what to put into the
target
field of yourtsconfig.json
? Well, if you are targetting NodeJS, you could take a look at node.green (the page is long and headings for more recent ECMAScript proopsals are close to the bottom (WHY?)). It's easy to see what version of NodeJS supports what standard. - Typing Destructured Object Parameters in TypeScript, article by Marius Schulz
- Advanced TypeScript Types with Examples, article by Elena Sufieva
- Type-Safe Value Objects in TypeScript, article by Hannes Petri, at Medium
- Webpack & TypeScript Setup, tutorial by The Net Ninja, on Youtube
- Using TypeScript's singleton types in practice, article by Tar Viturawong
- Create an NPM Module with TypeScript, article by Ernesto F
This is a boiler-plate-free example gulpfile.js
suitable for use with NodeJS.
It expects all your sources to live under src
, and will produce their
equivalent JavaScript files in dist
. It also expects a working Babel and
ESLint setup.
The main two targets to use from the outside are cleanBuild
and
buildAndWatch
(spawning a loop watching the sources and recompiling when they
change).
const gulp = require("gulp");
const typescript = require("gulp-typescript");
const eslint = require("gulp-eslint");
const sourcemaps = require("gulp-sourcemaps");
const babel = require("gulp-babel");
const del = require("del");
const cached = require("gulp-cached");
exports.clean = gulp.parallel(
function deleteDist() {
return del(["dist"]);
},
function deletePackage() {
return del(["package"]);
}
);
const tsProject = typescript.createProject("tsconfig.json");
exports.build = gulp.series(function buildTypescript() {
return tsProject
.src()
.pipe(cached("dist"))
.pipe(eslint())
.pipe(eslint.format())
.pipe(eslint.failAfterError())
.pipe(sourcemaps.init())
.pipe(tsProject())
.js.pipe(babel())
.pipe(sourcemaps.write())
.pipe(gulp.dest("dist"));
});
exports.cleanBuild = gulp.series(exports.clean, exports.build);
exports.buildAndWatch = gulp.series([exports.cleanBuild], function watch() {
return gulp.watch("src/**/*.ts", exports.build);
});
This is a boiler-plate-free example .eslintrc.js suitable for use with NodeJS. It also includes Prettier rules, to make sure you run it against your files :).
module.exports = {
parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint"],
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"prettier/@typescript-eslint",
// PRETTIER NEEDS TO BE THE LAST ONE
"plugin:prettier/recommended"
],
env: {
node: true,
es6: true
},
parserOptions: {
ecmaVersion: 2019,
sourceType: "module"
},
rules: {}
};
This is a boiler-plate-free example tsconfig.json
suitable for use with
NodeJS. It expects all your sources to live under src and will produce their
equivalent JavaScript files into dist
.
{
"compilerOptions": {
"declaration": true,
"resolveJsonModule": true,
"target": "es2019",
"module": "CommonJS",
"moduleResolution": "Node",
"strict": true,
"importHelpers": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"allowJs": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"inlineSourceMap": true,
"baseUrl": "src",
"paths": {
"@/*": ["src/*"]
},
"outDir": "dist"
},
"include": ["src/**/*.ts"],
"exclude": ["node_modules"]
}
runtypes is a TypeScript library that makes it simple to create custom type-guarding (and validating) classes and static typings in one go. This is the tool you will use whenever you acquire an object at runtime that you expect to conform to a particular static type, but you are not sure, and the static analyzer isn't either. Situations like this usually happen when deserializing an object, parsing command line arguments, ...
tsdef is a TypeScript library of type shortcuts (less typing for you).
- tsdx -- a zero-config CLI for spinning up a templated TypeScript library project is a TypeScript library of type
shortcuts (less typing for you).
- I don't particularly like the fact it is not suited directly for CLI's themselves. Eg. you have to make manual changes to the result in order to be able to run it as such.
"A tool for writing Linux pipes in a terminal-based UI interactively, with instant live preview of command results.". Ultimate Plumber on GitHub
- Firefox Hardware Report (shows SW as well)
- StatCounter GlobalStats -- OS, Browser, ... market shares
Vagrant is a tool (and an ecosystem) that enables one to deploy and provision virtual machines onto many different hypervisors (e.g. VirtualBox, Hyper-V, AWS, ...).
Yet another bootable USB flash drive creator. This ones is different, though, as it allows for multiple different ISOs to be placed onto the drive and used to boot up. Should you need a different ISO, just place it there, or replace the previous, or keep all of them. No need to reformat, like some of the other tools need.
HashiCorp's Vault is an open-source platform for secrets management and data protection (encryption). It supports many different authentication schemes. It can talk to different storage backends (file, in-memory, Consul, ...) and it also supports various features, such as automatic user creation in AWS, databases, ...
- Day 1: Deploying Your First Vault Cluster, tutorial by HashiCorp
- Secrets Management, tutorial by HashiCorp
- Access Management, tutorial by HashiCorp
- Data Encryption, tutorial by HashiCorp
- Demo: Vault + Kubernetes Sidecar Injection, tutorial by Jason Donell (HashiCorp) on Youtube
- Introductory Videos, by the VSCode authors
- An In Depth Tutorial on Linux Development on Windows with WSL and Visual Studio Code, post by Craig Loewen
- Process Hacker
- tries to fill in the gap between the SysInternals' Process Explorer and the classic Task Manager
I personally tried a couple different solutions, starting with the obvious settings presented by Windows in the control panel, going through the secret settings (that one has to first enable), and ending up with 3rd-party apps to do the job.
Turns out, preventing Windows from falling asleep on a laptop computer is suspiciously hard. It seems somewhat doable if you don't plan to ever enable the lock screen (which you should, because there's no need to keep the computer fully accessible when you might be in the other room). But when Windows gets to the lock screen, it seems (despite being told not to) to always decide it's time to go to sleep.
My recommendation is then either Don't sleep or Caffeine. They just do the job. No need to fiddle with a gazillion of configuration options. And you can still lock the computer and it won't go to sleep :).
Interested in the "secret" sleep-prevention settings in Windows? Here you go!
"xonsh is a shell language and command prompt. Unlike other shells, xonsh is based on Python, with additional syntax added that makes calling subprocess commands, manipulating the environment, and dealing with the file system easy. The xonsh command prompt gives users interactive access to the xonsh language."
aka "yaml ain't markup language", is a serialization format (similarly to JSON) that targets to be very easy to write and read by humans. Used widely for configuration files, but even has support for document streaming.
- YAML Essentials, video course on Linux Academy
- shyaml: YAML for command line
- Learn YAML in 5 minutes, article by Leigh Brenecki, Suhas SG
- yq -- parses YAML, TOML and XML into JSON and feeds it to
jq
bringing its capabilities to the other formats