From 5249dbe3820b1662deab1cfd0d6306f9f538f21b Mon Sep 17 00:00:00 2001 From: David Crosby Date: Fri, 16 Feb 2024 21:40:05 -0700 Subject: [PATCH] sync --- README.md | 2 +- algorithms.md | 6 + artificial-intelligence.md | 29 +- artificial-intelligence/clips.md | 566 +++++++++++++++++++ artificial-intelligence/expert-systems.md | 2 +- artificial-intelligence/pytorch.md | 7 - artificial-intelligence/society-of-mind.md | 1 - artificial-intelligence/tensorflow.md | 3 - assembly.md | 2 +- bash.md | 2 +- binary-analysis.md | 2 +- bootloaders.md | 2 +- build-automation.md | 2 +- character-encodings.md | 2 +- chat-programs.md | 2 +- cisco-networking.md | 2 +- cloud-hosting-providers.md | 2 +- compression.md | 2 +- computational-complexity-theory.md | 2 +- configuration-management.md | 2 +- containers.md | 2 +- continuous-integration-delivery.md | 2 +- cryptography.md | 2 +- data-structures.md | 2 +- debugging.md | 2 +- distributed-systems.md | 2 +- documentation-systems.md | 2 +- editors.md | 2 +- electronic-hardware.md | 2 +- emacs/abbrev.md | 2 +- emacs/community.md | 2 +- emacs/design.md | 2 +- emacs/display.md | 2 +- emacs/evil.md | 2 +- emacs/fun_and_games.md | 2 +- emacs/help.md | 2 +- emacs/linux.md | 2 +- emacs/lisp.md | 2 +- emacs/macos.md | 2 +- emacs/org/agenda.md | 2 +- emacs/org/hyperlinking.md | 2 +- emacs/org/index.md | 2 +- emacs/packages.md | 2 +- emacs/slime.md | 2 +- file-archiving.md | 2 +- file-systems.md | 2 +- file-transfer.md | 2 +- fuzzing.md | 2 +- graphics-libraries.md | 2 +- graphing.md | 2 +- ham_radio.md | 2 +- hardware-virtualization.md | 2 +- http.md | 3 +- image-manipulation.md | 2 +- information-theory.md | 41 ++ journal.md | 2 +- key-value-storage.md | 2 +- linux-kernel.md | 15 + linux/cgroups.md | 13 - lisp/common_lisp.md => lisp.md | 104 +++- lisp/index.md | 32 -- lisp/quicklisp.md | 22 - macos.md | 2 +- microsoft.md | 2 +- multimedia.md | 2 +- mysql.md | 2 +- networking.md | 5 +- operations.md | 2 +- package-management.md | 2 +- people.md | 12 +- phones.md | 2 +- physical-security.md | 2 +- procedural_content_generation.md | 2 +- process-tracing.md | 2 +- programming-language-design.md | 296 ++++++++++ programming-languages.md | 127 ++++- project-management.md | 2 +- public-key-infrastructure.md | 2 +- python.md | 2 +- quantum-computing.md | 2 +- ruby/bundler.md | 44 -- ruby/minitest.md | 13 - ruby/solargraph.md | 2 +- secrets-management.md | 2 +- server-validation.md | 2 +- social-media.md | 2 +- software-security.md | 2 +- sql-database.md | 2 +- static-site-generators.md | 2 +- statistics.md | 93 +++- text-manipulation.md | 2 +- time-series-database.md | 14 - transport-layer-security.md | 2 +- unix.md | 2 +- video-conferencing.md | 2 +- vim.md | 2 +- virtual_reality.md | 2 +- web-browsers.md | 2 +- web-programming.md | 13 +- workload-orchestration.md | 2 +- z_meta/abstraction_comics.md | 6 - z_meta/academic_papers.md | 26 - z_meta/accessability.md | 3 - z_meta/advice_for_new_software_devs.md | 34 -- z_meta/anonymity.md | 15 - z_meta/blogs.md | 15 - z_meta/canada.md | 8 - z_meta/capability_maturity_model.md | 9 - z_meta/chaos_engineering.md | 3 - z_meta/code_of_conduct.md | 3 - z_meta/colemak.md | 2 +- z_meta/computer_associations.md | 19 - z_meta/contracting_advice.md | 57 -- z_meta/{hilarity.md => culture.md} | 88 ++- z_meta/cyberpunk.md | 8 - z_meta/employment.md | 504 ++++++++++++++++- z_meta/good_software_practices.md | 127 ----- z_meta/good_videos.md | 9 - z_meta/grim_meathook_future.md | 8 - z_meta/hypothesis-driven-delivery.md | 10 - z_meta/index.md | 5 - z_meta/jet_propulsion_laboratory.md | 8 - z_meta/labour_market.md | 3 - z_meta/landing_pages.md | 10 - z_meta/laws_of_computing.md | 11 - z_meta/life_stuff.md | 98 +++- z_meta/managing.md | 391 ------------- z_meta/meetings.md | 36 -- z_meta/movies.md | 16 - z_meta/outsourcing.md | 10 - z_meta/personal_information_management.md | 2 +- z_meta/practice_programming.md | 32 -- z_meta/privacy.md | 13 - z_meta/productivity.md | 14 +- z_meta/public_speaking.md | 7 - z_meta/reliability-centered_maintenance.md | 9 - z_meta/retrocomputing.md | 3 - z_meta/running_a_business.md | 14 +- z_meta/skill_aggregation.md | 43 -- z_meta/software_bugs.md | 83 --- z_meta/software_disasters.md | 80 --- z_meta/software_engineering.md | 620 ++++++++++++++++++++- z_meta/sysadmin_life.md | 21 - z_meta/system_design.md | 83 --- z_meta/working_from_home.md | 10 - 145 files changed, 2695 insertions(+), 1496 deletions(-) create mode 100644 algorithms.md delete mode 100644 artificial-intelligence/pytorch.md delete mode 100644 artificial-intelligence/society-of-mind.md delete mode 100644 artificial-intelligence/tensorflow.md create mode 100644 information-theory.md delete mode 100644 linux/cgroups.md rename lisp/common_lisp.md => lisp.md (62%) delete mode 100644 lisp/index.md delete mode 100644 lisp/quicklisp.md create mode 100644 programming-language-design.md delete mode 100644 ruby/bundler.md delete mode 100644 ruby/minitest.md delete mode 100644 time-series-database.md delete mode 100644 z_meta/abstraction_comics.md delete mode 100644 z_meta/academic_papers.md delete mode 100644 z_meta/accessability.md delete mode 100644 z_meta/advice_for_new_software_devs.md delete mode 100644 z_meta/anonymity.md delete mode 100644 z_meta/blogs.md delete mode 100644 z_meta/canada.md delete mode 100644 z_meta/capability_maturity_model.md delete mode 100644 z_meta/chaos_engineering.md delete mode 100644 z_meta/code_of_conduct.md delete mode 100644 z_meta/computer_associations.md delete mode 100644 z_meta/contracting_advice.md rename z_meta/{hilarity.md => culture.md} (54%) delete mode 100644 z_meta/cyberpunk.md delete mode 100644 z_meta/good_software_practices.md delete mode 100644 z_meta/good_videos.md delete mode 100644 z_meta/grim_meathook_future.md delete mode 100644 z_meta/hypothesis-driven-delivery.md delete mode 100644 z_meta/index.md delete mode 100644 z_meta/jet_propulsion_laboratory.md delete mode 100644 z_meta/labour_market.md delete mode 100644 z_meta/landing_pages.md delete mode 100644 z_meta/laws_of_computing.md delete mode 100644 z_meta/managing.md delete mode 100644 z_meta/meetings.md delete mode 100644 z_meta/movies.md delete mode 100644 z_meta/outsourcing.md delete mode 100644 z_meta/practice_programming.md delete mode 100644 z_meta/privacy.md delete mode 100644 z_meta/public_speaking.md delete mode 100644 z_meta/reliability-centered_maintenance.md delete mode 100644 z_meta/retrocomputing.md delete mode 100644 z_meta/skill_aggregation.md delete mode 100644 z_meta/software_bugs.md delete mode 100644 z_meta/software_disasters.md delete mode 100644 z_meta/sysadmin_life.md delete mode 100644 z_meta/system_design.md delete mode 100644 z_meta/working_from_home.md diff --git a/README.md b/README.md index 72d79ab..74769f5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ This is daveops.net, my little repo of code snippets and chunks of wisdom that's in no particular organized state. -Pull requests are appreciated, but added at my discretion. \ No newline at end of file +Pull requests are appreciated, but added at my discretion. diff --git a/algorithms.md b/algorithms.md new file mode 100644 index 0000000..31520d0 --- /dev/null +++ b/algorithms.md @@ -0,0 +1,6 @@ + +# Algorithms + +# Algorithm pictionary + +Where you draw how the algorithm works, and others have to guess diff --git a/artificial-intelligence.md b/artificial-intelligence.md index 81b2653..5fb9b9f 100644 --- a/artificial-intelligence.md +++ b/artificial-intelligence.md @@ -1,3 +1,6 @@ + +# Artificial Intelligence + # Artificial Intelligence @@ -12,4 +15,28 @@ Computers can easily do things that were recently invented in human history, but # Machine Learning -Machine learning is the automation of automation. \ No newline at end of file +Machine learning is the automation of automation. + + +# PyTorch + + + +[PyTorch GH repo](https://github.com/pytorch/pytorch) + +[Deep Learning with PyTorch: A 60 Minute Blitz](https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html) + + +# TensorFlow + + + + +# Society of Mind by Marvin Minsky + + +# Neural Networks + +Input layer -> Hidden Layer -> Output Layer + +Perceptron (Cornell) first trainable NN diff --git a/artificial-intelligence/clips.md b/artificial-intelligence/clips.md index 29d2eb3..2c4c35f 100644 --- a/artificial-intelligence/clips.md +++ b/artificial-intelligence/clips.md @@ -1,3 +1,4 @@ + # CLIPS @@ -9,3 +10,568 @@ Invented in NASA in 1985 Written in C, provides a LISPy language called COOL for rule definitions [CLIPS wikipedia](https://en.wikipedia.org/wiki/CLIPS) + + +# Starting up Emacs CLIPS mode + REPL + +```elisp +(require 'inf-clips) +(setq inferior-clips-program "clips") +``` + +| M-x run-clips | start clips in a buffer | +| C-c C-l | load lisp file | +| C-c r | get rules | +| C-c f | get facts | +| C-c i | reset | +| C-c g | run | +| C-c . | previous argument | + +C-x C-e will evaluate last sexp in a buffer with clips mode + + +# high-level architecture + +1. fact-list and instance-list +2. knowledge-base (rule-base) +3. inference engine + +```clips +; exit program +(exit) + +; assert a fact +(assert (duck)) + +; get list of facts +(facts) + +; clear memory +(clear) + +; run rules against the facts +(run) + +; watch new facts roll in/out (disable w/ (unwatch facts)) +(watch facts) +; can also watch instances/slots/rules/activations/messages +; message-handlers/generic-functions/methods/deffunctions +; compilations/statistics/globals/focus and all + +; get activations +(agenda) +``` + + +# vocabulary + +**then symbol** is => + +**salience** is the order/priority + +**activations** are rules that match a pattern entity + +**conflict resolution** is when the highest salience activation fires + + +## refraction + +**refraction** is when a rule cannot fire again after a period of time + + +## truth maintenance + +truth maintenance is when information is altered to conform to reality, and minimize conflicts with the real world. + + +# facts + +```clips +(assert (duck)) ; assert a fact + +(facts) ; get list of facts + +; clear memory +(clear) + +; reset just the facts, running any deffacts+definstances +(reset) + +; deffacts are a way of adding a bunch of facts +(deffacts walk "Some facts about walking" + ; status fact to be asserted + (status walking) + ; walk-sign fact to be asserted + (walk-sign walk)) + +; remove walk deffacts from memory +(undeffacts walk) + +(list-deffacts) +(ppdeffacts) +``` + +A **control fact** is a fact that's used to control another rule. If you want to re-assert a changed list, you would need to retract the old list. + + +# fields + +CLIPS is case-sensitive. + + +## symbols + +Special characters: " ( ) & | <~ ; ? $ + +The “&”, “|”, and “~” may not be used as stand-alone symbols or as any part of a symbol. + +Some characters act as delimiters by ending a symbol. The following characters act as delimiters for symbols. + +- any non-printable ASCII character, including spaces, carriage returns, tabs, and linefeeds +- double quotes, " +- opening and closing parentheses, () +- ampersand, & +- vertical bar, | +- less than, <. Note that this may be the first character of a symbol +- tilde, ~ +- semicolon, ; indicates start of a comment, a carriage return ends it +- ? and $? may not begin a symbol but may be inside it + +The semicolon acts as the start of a comment in CLIPS. + + +## strings + +"foobar" + + +## numeric fields + +integer and float + +floats are double-precision + + +# relations + +It's good practice to have the first field describe the relationship of the following fields + +```clips +(animal-is chicken) +(animal-is rooster) +(animals chicken rooster) +``` + + +# retraction + +```clips +; retract 3rd fact +(retract 3) +; retract 1st and 2nd fact +(retract 1 2) +``` + + +# defrules + +```clips +(rules) ; list rules + +(defrule foo + (animal-is duck) ; pattern + (animal-is ~boar) ; ~ constraint checks is a logical NOT + (animal-is duck|goose) ; | is a logical OR + (animal-is ?bird&duck|goose) ; & is a logical AND that is used for capturing value + ; in this case, ?bird would be duck or goose + (animal-is ?bird&~mammal&~amphibian) ; & is good for ~ as well + => ; you need this arrow! + (assert (sound-is quack))) ; action + +; for arguments +(defrule addition + (numbers ?x ?y) + => + (assert (answer-plus (+ ?x ?y))) + (bind ?answer (+ ?x ?y)) ; if you need to bind a variable (not create a fact), + ; you can use bind +) + +; pretty-prints the rule +(ppdefrule foo) + +; remove defrule from memory +(undefrule foo) + +; see what facts match the rule +(matches foo) +``` + +pattern entity - a fact or instance of a user-defined class + +rule names operate in a global namespace, but there are modules + + +# system + +```clips +; Files +(save "file.clp") ; save rules to file +(load "file.clp") ; load file +(bsave "bfile.clp") ; binary save +(bload "bfile.clp") ; binary load + +(save-facts "data.clp") ; save facts +(load-facts "data.clp") ; load facts + +(batch) ; TODO +(system) ; TODO + +; print to STDOUT +(printout t "hello world" crlf) + +; turn logs on and off +(dribble-on "logfile") +(dribble-off "logfile") +``` + + +# strategy + +CLIPS offers seven different modes of conflict resolution: depth, breadth, LEX, MEA, complexity, simplicity, and random. It’s difficult to say that one is clearly better than another without considering the specific application. Even then, it may be difficult to judge which is “best.” + +The depth strategy is the standard default strategy of CLIPS. + + +# breakpoints + +```clips +; break on rule foo +(set break foo) +(remove-break foo) +(show-breaks) +``` + + +# variables + +```clips +(assert (food snacks)) +(assert (food veggies)) +(defrule eat-snacks + ?factnum <- (food snacks) + => + (printout t "ate snacks" crlf) + (retract ?factnum)) ; remove a fact with a variable + +(defrule eat-anything + ?factnum <- (food ?yum) + => + (printout t "ate " ?yum crlf) + (retract ?factnum)) +; you can also do a single-filed wildcard with `?` +; multi-field wildcards are `$?` +``` + +A variable is only used within a rule, so if ?name is used in multiple patterns, it is the same value. + + +# deftemplate + +Like a struct, with named fields called **slots** + +unordered (use named fields), sort of like structs + +multislot with single value != a single-slot + +```clips +; name of deftemplate relation +(deftemplate prospect + ; optional comment in quotes + "vital information" + ; name of field + (slot name + ; type of field + (type STRING) + ; default value of field name + (default ?DERIVE)) ; derives default value for type + ; name of field + (slot assets + ; type of field + (type SYMBOL) + ; default value of field assets + (allowed-symbols + poor rich wealthy loaded) + (default rich)) + ; name of field + (slot age + ; type. NUMBER can be INTEGER or FLOAT + (type NUMBER) + ; default value of field age + (default 80))) +``` + +| allowed-symbols | rich filthy-rich loaded | +| allowed-strings | "Dopey" "Dorky" "Dicky" | +| allowed-numbers | 1 2 3 4.5 -2.001 1.3e-4 | +| allowed-integers | -100 53 | +| allowed-floats | -2.3 1.0 300.00056 | +| allowed-values | "Dopey" rich 99 1.e9 | + + +# deffunction + +deffunctions are plain ol' functions + +```clips +(deffunction foo + "this is a comment" + (?arg1 ?arg2 $?argN) ; arguments + (+ ?arg1 ?arg2) ; actions + ) + +(list-deffunctions) ; list deffunctions +(ppdeffunction foo) ; pretty-print deffunction +(undeffunction foo) ; undefine deffunction +``` + + +# reading input + +```clips +(defrule ask-color + "Ask for favorite color" + => + (printout t "favorite color?" crlf) + (assert (favorite-color (read)))) + +(defrule ask-food + => + (printout t "favorite food?" crlf) + (bind ?string (readline)) + (assert-string (str-cat "(" ?string ")"))) +``` + + +# Rete Algorithm + +Latin for *net*. + +To be efficient with Rete algorithm, in order of efficiency: + +1. Control facts +2. Fewest matching facts +3. Most specific patterns +4. Unbound variables/wildcards +5. Patterns that are often retracted and asserted (aka **volatile patterns**) + + +# logical values and functions + +TRUE and FALSE (must be capitalized) + +`and`, `or`, `not` are functions + + +## predicate functions + +| (evenp ) | even number | +| (floatp ) | floating-point number | +| (integerp ) | integer | +| (lexemep ) | symbol or string | +| (multifieldp ) | multifield value | +| (numberp ) | float or integer | +| (oddp ) | odd number | +| (pointerp ) | external address | +| (stringp ) | string | +| (symbolp ) | symbol | + + +# dependencies + +```clips +; TODO actual examples +(dependencies) +(dependents) +``` + + +# defglobal + +```clips +(defglobal pi 3.14) ; this would be more efficient than a fact +``` + + +# randomness + +```clips +(random) ; returns a pseudorandom number +``` + + +# CLIPS Object-Oriented Language (COOL) + +CLIPS supports abstraction, inheritance, encapsulation, polymorphism, and dynamic binding + +Root class is OBJECT, USER is a subclass of OBJECT. + +Generally speaking, all user-defined classes should be a subclass of USER, as it has all the needed handlers + +CLIPS supports only `is-a` links + +Behavior is inherited, which reduces **Verification and Validation** of handlers + +```clips +(defclass WRESTLER (is-a USER)) ; USER is the direct superclass + ; (which means OBJECT is indirect superclass) + +(defclass VEHICLE (is-a USER)) +(defclass BIKE (is-a VEHICLE) + (slot color (default blue)) ; you can add slot facets to a class + (slot ID (default (gensym*))) ; gensym creates IDs unique through entire CLIPS run + (multislot bellsound (default ding ding)) + ) +(defclass SWITCHBLADE (is-a USER)) +(defclass FOLDINGBIKE (is-a BIKE SWITCHBLADE)) ; multiple inheritance + +(subclassp BIKE OBJECT) ; return TRUE +(superclassp VEHICLE BIKE) ; return TRUE + +(list-defclasses) ; list all defclasses +(browse-classes) ; hierarchical list of classes, * means multiple inheritance +(ppdefclass) ; pretty print internal structure +(describe-class) ; additional info on class +(class-abstractp) ; predicate function returns TRUE if abstract + +; An instance name has brackets +(symbol-to-instance-name Dorky_Duck) ; return [Dorky_Duck] +(symbol-to-instance-name (sym-cat Dorky "_" Duck)) ; ditto +(instance-name-to-symbol [Dorky_Duck]) ; return Dorky_Duck + +(make-instance [Asama] of BIKE) ; returns [Asama] +(instances) ; get all available instances + +; definstances works like deffacts +(definstances BIKE_OBJECTS + "My Bikes" + (Asama of BIKE) + (Brompton of BIKE)) + +(send [Brompton] unfold) ; send unfold message to [Brompton] instance + +; accessors +(send [Brompton] put-serial "123") +(send [Brompton] get-serial) + +``` + +You can't modify the slots of a class, if you want to change it you need to delete all instances of the class and use the defclass with the same name. + +Class etiquette + +1. hierarchy should be in specialized logical increments using is-a links +2. a class is unnecessary if it only has one instance +3. class should not be named for an instance and vice versa + +| class-slot-exists | Returns TRUE if the class slot exists | +| slot-existp | Returns TRUE if the instance slot exists | +| slot-boundp | Returns TRUE if the specified slot has a value | +| instance-address | Returns machine address at which the specified instance is stored | +| instance-name | Returns the name given an instance | +| instancep | Returns TRUE if its argument is an instance | +| instance-addressp | Returns TRUE if its argument is an instance address | +| instance-namep | Returns TRUE if its argument is an instance name | +| instance-existp | Returns TRUE if the instance exists | +| list-definstances | Lists all the definstances | +| ppdefinstances | Pretty-prints the definstance | +| watch instances | Allows you to watch instances being created and deleted | +| unwatch instances | Turns off watching instances | +| save-instances | Saves instances to a file | +| load-instances | Loads instances from a file | +| undefinstances | Deletes the named definstance | + + +## facets + +| default and default-dynamic | Set initial values for slots | +| cardinality | Number of multifield values | +| access | Read-write, read-only, initialize-only access | +| storage | Local slot in instance or shared slot in class | +| propagation | Inherit or no inherit slots | +| source | Composite or exclusive inheritance | +| override-message | Indicates message to send for slot override | +| create-accessor | Create put- and get- handler | +| visibility | Public or private to defining class only | +| reactive | Changes to a slot trigger pattern-matching | + +functions: + +| slot-replace$ | Replace the specified range | +| slot-insert$ | Insert the specified range | +| slot-delete$ | Delete the specified range | + +```clips +(slot-writablep) ; returns TRUE if writable +(slot-initablep) ; returns TRUE if initializable +``` + +(reset) is **cold-initialization** since only definstances are created + +(initialize-instance) (which resets an instances default values) is **warm-initialization** + + +# message handlers + +> (defmessage-handler [handler-type] [comment] (\* [wildcard-parameter]) \*) + +```clips +(defclass BIKE (is-a USER)) +(defmessage-handler BIKE ring-bell () + (printout t "ding ding" crlf)) +(make-instance [Asama] of BIKE) +(send [Asama] ring-bell) ; returns "ding ding\n" +(preview-send BIKE ring-bell) ; see what message handlers could potentially be involved + +; handler to print slots +(defmessage-handler USER print-slots () (ppinstance)) +``` + +You can read dynamically read a slot's value in a message handler with ?self:name> + + +# OOP classes + +Inheritance by Specialization -> analysis Inheritance by Generalization -> synthesis (ie composition) + +```clips +(defclass LINE (is-a POINT) + (slot point1 + (default-dynamic + (make-instance (gensym*) of POINT)) ; acts as pointer to different POINT instances + (propagation no-inherit)) ; no-inherit means only direct instances has class slot + (slot point2 + (default-dynamic + (make-instance (gensym*) of POINT)) + (propagation no-inherit)) + (message-handler find-point) + (message-handler print-points) + (message-handler find-distance) + (message-handler print-distance)) +``` + +| any-instancep | Determines if one or more instance-sets satisfy a query | +| find-instance | Returns the first instance-set that satisfies a query | +| find-all-instances | Groups and returns all instance-sets which satisfy a query | +| do-for-instance | Performs an action for the first instance-set which satisfies a query | +| do-for-all-instances | Performs an action for every instance-set which satisfies a query as they are found | +| delayed-do-for-all-instances | Groups all instance-sets which satisfy a query and then iterates an action over this group | + + +# defmodules + +> (defmodule [] \*) +> +> ::= (export ) | (import ) ::= ?ALL | ?NONE | ?ALL | ?NONE | + +> +> ::= deftemplate | defclass | defglobal | deffunction | defgeneric diff --git a/artificial-intelligence/expert-systems.md b/artificial-intelligence/expert-systems.md index 6842df8..c1b93e5 100644 --- a/artificial-intelligence/expert-systems.md +++ b/artificial-intelligence/expert-systems.md @@ -28,4 +28,4 @@ Rules are represented by the **antecedent** (aka left-handed side) which is the ## Forward-chaining and backwards-chaining -**Forward-chaining systems** start with a premises and work forward to the conclusions supported by those premises. **Backward-chaining systems** start with a conclusion to be proved and work backward to the premises that would support the conclusion. There are also systems that are a hybrid of both. \ No newline at end of file +**Forward-chaining systems** start with a premises and work forward to the conclusions supported by those premises. **Backward-chaining systems** start with a conclusion to be proved and work backward to the premises that would support the conclusion. There are also systems that are a hybrid of both. diff --git a/artificial-intelligence/pytorch.md b/artificial-intelligence/pytorch.md deleted file mode 100644 index 398b22e..0000000 --- a/artificial-intelligence/pytorch.md +++ /dev/null @@ -1,7 +0,0 @@ -# PyTorch - - - -[PyTorch GH repo](https://github.com/pytorch/pytorch) - -[Deep Learning with PyTorch: A 60 Minute Blitz](https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html) \ No newline at end of file diff --git a/artificial-intelligence/society-of-mind.md b/artificial-intelligence/society-of-mind.md deleted file mode 100644 index e307072..0000000 --- a/artificial-intelligence/society-of-mind.md +++ /dev/null @@ -1 +0,0 @@ -# Society of Mind by Marvin Minsky \ No newline at end of file diff --git a/artificial-intelligence/tensorflow.md b/artificial-intelligence/tensorflow.md deleted file mode 100644 index 26da353..0000000 --- a/artificial-intelligence/tensorflow.md +++ /dev/null @@ -1,3 +0,0 @@ -# TensorFlow - - \ No newline at end of file diff --git a/assembly.md b/assembly.md index 0647634..18eb3bc 100644 --- a/assembly.md +++ b/assembly.md @@ -78,4 +78,4 @@ Since strcpy stops at a null byte, you'll need to adjust your instructions to av mov eax, 0 ; no null byte xor eax, eax -``` \ No newline at end of file +``` diff --git a/bash.md b/bash.md index bcb7595..2dea5f3 100644 --- a/bash.md +++ b/bash.md @@ -212,4 +212,4 @@ grep -l ... | xargs -I% sed -i".bkp" -e "s/old/new/" % | 1> | Redirect stdout | | 2> | Redirect stderr | | 2>&1 | Redirect stderr to stdout | -| < | Redirect stdin to a process | \ No newline at end of file +| < | Redirect stdin to a process | diff --git a/binary-analysis.md b/binary-analysis.md index f4437ce..e7531fb 100644 --- a/binary-analysis.md +++ b/binary-analysis.md @@ -96,4 +96,4 @@ Interesting offsets (sections, functions, symbols, etc) are called "flags" ## Veles - \ No newline at end of file + diff --git a/bootloaders.md b/bootloaders.md index f02df31..62c5161 100644 --- a/bootloaders.md +++ b/bootloaders.md @@ -42,4 +42,4 @@ The Linux Loader, which is reinstalled with each config change (by running `lilo | arg | desc | |------------ |--------------------------- | | large-memory | allow ram disk above 15MB | -| lba32 | use logical block addresses | \ No newline at end of file +| lba32 | use logical block addresses | diff --git a/build-automation.md b/build-automation.md index 3dd493c..0800ff0 100644 --- a/build-automation.md +++ b/build-automation.md @@ -65,4 +65,4 @@ ninja -t compdb > compile_commands.json # watchman -- \ No newline at end of file +- diff --git a/character-encodings.md b/character-encodings.md index 4725180..5694f98 100644 --- a/character-encodings.md +++ b/character-encodings.md @@ -14,4 +14,4 @@ | 6 | 0 1 1 0 | | 7 | 0 1 1 1 | | 8 | 1 0 0 0 | -| 9 | 1 0 0 1 | \ No newline at end of file +| 9 | 1 0 0 1 | diff --git a/chat-programs.md b/chat-programs.md index 771c6fd..6df7d20 100644 --- a/chat-programs.md +++ b/chat-programs.md @@ -39,4 +39,4 @@ s/search/replace/ ## Links - [Emoticons list](https://www.hipchat.com/emoticons) -- \ No newline at end of file +- diff --git a/cisco-networking.md b/cisco-networking.md index 88a3b40..cbd91c7 100644 --- a/cisco-networking.md +++ b/cisco-networking.md @@ -196,4 +196,4 @@ A higher security-level can always talk to a lower security-level, but not vice- # RANCID - \ No newline at end of file + diff --git a/cloud-hosting-providers.md b/cloud-hosting-providers.md index 8e029db..c51b2aa 100644 --- a/cloud-hosting-providers.md +++ b/cloud-hosting-providers.md @@ -347,4 +347,4 @@ EOF ## Cloud Custodian - \ No newline at end of file + diff --git a/compression.md b/compression.md index 76dac0a..de37a60 100644 --- a/compression.md +++ b/compression.md @@ -24,4 +24,4 @@ xz -d file - - - -- \ No newline at end of file +- diff --git a/computational-complexity-theory.md b/computational-complexity-theory.md index ce47485..29f3f5a 100644 --- a/computational-complexity-theory.md +++ b/computational-complexity-theory.md @@ -3,4 +3,4 @@ ## Links -- \ No newline at end of file +- diff --git a/configuration-management.md b/configuration-management.md index 5684ad5..ef5b808 100644 --- a/configuration-management.md +++ b/configuration-management.md @@ -414,4 +414,4 @@ mkdir -p /tmp/thing # Inspec - \ No newline at end of file + diff --git a/containers.md b/containers.md index d0284fd..076ec86 100644 --- a/containers.md +++ b/containers.md @@ -121,4 +121,4 @@ hab cli setup ## Links -- [CLI Reference](https://www.habitat.sh/docs/habitat-cli/) \ No newline at end of file +- [CLI Reference](https://www.habitat.sh/docs/habitat-cli/) diff --git a/continuous-integration-delivery.md b/continuous-integration-delivery.md index 1564083..8afc001 100644 --- a/continuous-integration-delivery.md +++ b/continuous-integration-delivery.md @@ -26,4 +26,4 @@ GO_SERVER_SYSTEM_PROPERTIES="$GO_SERVER_SYSTEM_PROPERTIES -Djavax.net.debug=ssl: # Travis -- \ No newline at end of file +- diff --git a/cryptography.md b/cryptography.md index c835f58..3b6017b 100644 --- a/cryptography.md +++ b/cryptography.md @@ -50,4 +50,4 @@ Common triplets of text are THE, EST, FOR, AND, HIS, ENT or THA. ## Set 1 -Base 64 - RFC 4648 \ No newline at end of file +Base 64 - RFC 4648 diff --git a/data-structures.md b/data-structures.md index 3ce85db..7d850c1 100644 --- a/data-structures.md +++ b/data-structures.md @@ -49,4 +49,4 @@ - Can provide near-constant time insertion, deletion, and lookup - Hash collisions can be handled by chaining, ie pointer to a linked list. They can also be handled by open addressing, where you use linear probing to check for the next empty spot (for the lookup, check the hash's array element, and then each after that until the value is found or you reach an empty element). You could also use quadratic probing as well (1 element ahead, 2 elements ahead, ...) - A good hash can prevent needless collisions. Use all the information in the key. Combine the info by multiplying with prime numbers -- If load factor greater than 75%, double it. If less than 20%, halve it. \ No newline at end of file +- If load factor greater than 75%, double it. If less than 20%, halve it. diff --git a/debugging.md b/debugging.md index ba79d2c..547d3fc 100644 --- a/debugging.md +++ b/debugging.md @@ -117,4 +117,4 @@ gdb executable coredump 2. Your 'creative side' 3. Your Mental Model of the System -I agree a lot with #3 - often when I'm helping someone debugging, it's helping them establish this mental model. \ No newline at end of file +I agree a lot with #3 - often when I'm helping someone debugging, it's helping them establish this mental model. diff --git a/distributed-systems.md b/distributed-systems.md index 541e37d..fb8da0c 100644 --- a/distributed-systems.md +++ b/distributed-systems.md @@ -284,4 +284,4 @@ A sort of namespace for principals (ie users, services). - -- \ No newline at end of file +- diff --git a/documentation-systems.md b/documentation-systems.md index c26875c..2db7b8e 100644 --- a/documentation-systems.md +++ b/documentation-systems.md @@ -74,4 +74,4 @@ I need a footnote[^footnote] ## Links -- [Pandoc manual](https://pandoc.org/MANUAL.html) \ No newline at end of file +- [Pandoc manual](https://pandoc.org/MANUAL.html) diff --git a/editors.md b/editors.md index 10447d3..16942a1 100644 --- a/editors.md +++ b/editors.md @@ -215,4 +215,4 @@ End: # Mindforger - \ No newline at end of file + diff --git a/electronic-hardware.md b/electronic-hardware.md index b1778ce..b9131e6 100644 --- a/electronic-hardware.md +++ b/electronic-hardware.md @@ -129,4 +129,4 @@ stop /SYS | 4 | Data striped over multiple disks. Parity information on separate disk | Read operations benefit by striping. Writes are bottlenecked on the parity disk | More efficient use of data redundancy with parity disk | If parity disk is lost, data redundancy is lost | | 5 | Data and parity striped over multiple disks | Read operations benefit by striping | | Can only handle one disk failure before data loss | | 6 | Data and dual parity blocks striped over multiple disks | Read operations benefit by striping | | Can handle two disk failures before data loss | -| 10 | Hybridizing of 1 + 0, striping over mirrored sets | Read operations benefit by striping | | | \ No newline at end of file +| 10 | Hybridizing of 1 + 0, striping over mirrored sets | Read operations benefit by striping | | | diff --git a/emacs/abbrev.md b/emacs/abbrev.md index 63c9ae2..9aba509 100644 --- a/emacs/abbrev.md +++ b/emacs/abbrev.md @@ -19,4 +19,4 @@ |-------------------------------------------------- |----------------- | | write lisp file of user-created abbrev definitions | write-abbrev-file | | edit in-memory abbrev definitions | edit-abbrevs | -| read definitions file | read-abbrev-file | \ No newline at end of file +| read definitions file | read-abbrev-file | diff --git a/emacs/community.md b/emacs/community.md index 3243541..48ff3ff 100644 --- a/emacs/community.md +++ b/emacs/community.md @@ -10,4 +10,4 @@ # Email lists - \ No newline at end of file + diff --git a/emacs/design.md b/emacs/design.md index 561e85e..8b747b0 100644 --- a/emacs/design.md +++ b/emacs/design.md @@ -6,4 +6,4 @@ The extensibility of EMACS is the point, not the key commands. Any editor where interpreter facilities are always available at runtime could (more or less) do the same thing. -One argument made was that because Emacs was written in Lisp, it pulled Lisp from the ivory towers into systems programming. Not sure I agree with that one totally (especially given the jankiness of [Emacs Lisp](lisp.md)), but it's an interesting use of it. \ No newline at end of file +One argument made was that because Emacs was written in Lisp, it pulled Lisp from the ivory towers into systems programming. Not sure I agree with that one totally (especially given the jankiness of [Emacs Lisp](lisp.md)), but it's an interesting use of it. diff --git a/emacs/display.md b/emacs/display.md index 224e3fe..53a42bb 100644 --- a/emacs/display.md +++ b/emacs/display.md @@ -13,4 +13,4 @@ | tab-line-mode | create a tab line in the window's buffer | | C-x t 2 | create a tab | -| C-tab | swap tab | \ No newline at end of file +| C-tab | swap tab | diff --git a/emacs/evil.md b/emacs/evil.md index 3745947..c9bbb2c 100644 --- a/emacs/evil.md +++ b/emacs/evil.md @@ -4,4 +4,4 @@ | desc | keystrokes | |---------------------------- |---------- | | toggle evil mode | C-z | -| put emacs to background mode | C-x C-z | \ No newline at end of file +| put emacs to background mode | C-x C-z | diff --git a/emacs/fun_and_games.md b/emacs/fun_and_games.md index c3faab9..2a35458 100644 --- a/emacs/fun_and_games.md +++ b/emacs/fun_and_games.md @@ -18,4 +18,4 @@ Conference typically in December | calc | calc mode | | lunar-phases | phases of the moon | | doctor | "doctor" chatbot | -| emacs-uptime | Emacs uptime counter | \ No newline at end of file +| emacs-uptime | Emacs uptime counter | diff --git a/emacs/help.md b/emacs/help.md index e6100b6..c180e3c 100644 --- a/emacs/help.md +++ b/emacs/help.md @@ -13,4 +13,4 @@ | --- | --- | | next page | n | | previous page | p | -| up | u | \ No newline at end of file +| up | u | diff --git a/emacs/linux.md b/emacs/linux.md index e2fd2de..2538446 100644 --- a/emacs/linux.md +++ b/emacs/linux.md @@ -57,4 +57,4 @@ git clone git://git.sv.gnu.org/emacs.git cd emacs sh autogen.sh ./configure -``` \ No newline at end of file +``` diff --git a/emacs/lisp.md b/emacs/lisp.md index 1a5cbf9..05ab047 100644 --- a/emacs/lisp.md +++ b/emacs/lisp.md @@ -59,4 +59,4 @@ From From -> - Memory consumption gets out-of-hand REAL FAST if you don’t pay attention. If you’re writing a new library, be sure to turn on garbage collection messages by setting ‘garbage-collection-messages’ to t. If you see the collection messages every few seconds, you can be sure that your library is eating up and spitting out cons cells and strings at a furious rate. \ No newline at end of file +> - Memory consumption gets out-of-hand REAL FAST if you don’t pay attention. If you’re writing a new library, be sure to turn on garbage collection messages by setting ‘garbage-collection-messages’ to t. If you see the collection messages every few seconds, you can be sure that your library is eating up and spitting out cons cells and strings at a furious rate. diff --git a/emacs/macos.md b/emacs/macos.md index 2b487f4..7c03ce5 100644 --- a/emacs/macos.md +++ b/emacs/macos.md @@ -26,4 +26,4 @@ ```shell launchctl load -w ~/Library/LaunchAgents/emacs.daemon.plist -``` \ No newline at end of file +``` diff --git a/emacs/org/agenda.md b/emacs/org/agenda.md index 1fc22b7..f01bdb8 100644 --- a/emacs/org/agenda.md +++ b/emacs/org/agenda.md @@ -3,4 +3,4 @@ | desc | keystroke | | --- | --- | -| open agenda mode | C-c a | \ No newline at end of file +| open agenda mode | C-c a | diff --git a/emacs/org/hyperlinking.md b/emacs/org/hyperlinking.md index b6a0a63..a46ef14 100644 --- a/emacs/org/hyperlinking.md +++ b/emacs/org/hyperlinking.md @@ -23,4 +23,4 @@ '(("duckduckgo" . "https://duckduckgo.com/?q=%s") ("wp" . "https://en.wikipedia.org/wiki/%s") ("omap" . "https://nominatim.openstreetmap.org/ui/search.html?q=%s&polygon=1"))) -``` \ No newline at end of file +``` diff --git a/emacs/org/index.md b/emacs/org/index.md index fafc0f9..dc03da4 100644 --- a/emacs/org/index.md +++ b/emacs/org/index.md @@ -2,4 +2,4 @@ Possibly the killer app for Emacs [Org Mode Website](https://orgmode.org/) -[Org Mode Manual](https://orgmode.org/manual/) \ No newline at end of file +[Org Mode Manual](https://orgmode.org/manual/) diff --git a/emacs/packages.md b/emacs/packages.md index 3cffdba..234c9a8 100644 --- a/emacs/packages.md +++ b/emacs/packages.md @@ -63,4 +63,4 @@ Standard with Emacs 29 -Emacs Lisp Package Archive \ No newline at end of file +Emacs Lisp Package Archive diff --git a/emacs/slime.md b/emacs/slime.md index f555671..350f35b 100644 --- a/emacs/slime.md +++ b/emacs/slime.md @@ -2,4 +2,4 @@ | desc | keystroke | |------------ |--------- | -| execute line | C-c C-e | \ No newline at end of file +| execute line | C-c C-e | diff --git a/file-archiving.md b/file-archiving.md index 0cb964c..090e8d7 100644 --- a/file-archiving.md +++ b/file-archiving.md @@ -48,4 +48,4 @@ restic backup -r $REPO_PATH $PATH_TO_BACKUP # List snapshots restic snapshots -r $REPO_PATH -``` \ No newline at end of file +``` diff --git a/file-systems.md b/file-systems.md index dee1c02..6106c2b 100644 --- a/file-systems.md +++ b/file-systems.md @@ -113,4 +113,4 @@ ipfs init ```shell ncdu -x $MOUNT_POINT -``` \ No newline at end of file +``` diff --git a/file-transfer.md b/file-transfer.md index 48613e7..c239796 100644 --- a/file-transfer.md +++ b/file-transfer.md @@ -20,4 +20,4 @@ using GNU Screen, press ctrl-a, :, then type `exec !! lsz -X thing.bin` ```shell rsync -a -e "ssh" --rsync-path="/usr/bin/sudo /usr/bin/rsync" user@example.com:/remote_files/ local_dir/ -``` \ No newline at end of file +``` diff --git a/fuzzing.md b/fuzzing.md index 6219e8c..813ca02 100644 --- a/fuzzing.md +++ b/fuzzing.md @@ -8,4 +8,4 @@ ``` CC=/path/to/afl/afl-gcc ./configure afl-fuzz -i testcase_dir -o findings_dir /path/to/program [...params...] -``` \ No newline at end of file +``` diff --git a/graphics-libraries.md b/graphics-libraries.md index fbe5e11..7fdc5f8 100644 --- a/graphics-libraries.md +++ b/graphics-libraries.md @@ -52,4 +52,4 @@ After the first two lines in `/etc/gdm/Init/Default` , put: ``` xrandr --output S-video --set “tv standard” ntsc -``` \ No newline at end of file +``` diff --git a/graphing.md b/graphing.md index d469cc8..b4c29d2 100644 --- a/graphing.md +++ b/graphing.md @@ -58,4 +58,4 @@ digraph graph_name { ## graphing - \ No newline at end of file + diff --git a/ham_radio.md b/ham_radio.md index b6a9eb8..f3b9cec 100644 --- a/ham_radio.md +++ b/ham_radio.md @@ -80,4 +80,4 @@ Uplink: 145.990 (67hz PL Tone) | 40 | 7.0 to 7.3 MHz | | 20 | 14.000 to 14.350 MHz | | 15 | 21.000 to 21.450 MHz | -| 10 | 28.000 to 29.700 MHz | \ No newline at end of file +| 10 | 28.000 to 29.700 MHz | diff --git a/hardware-virtualization.md b/hardware-virtualization.md index 879aeba..da1ee73 100644 --- a/hardware-virtualization.md +++ b/hardware-virtualization.md @@ -43,4 +43,4 @@ vagrant ssh # Firecracker - \ No newline at end of file + diff --git a/http.md b/http.md index f14eb7c..32b96ae 100644 --- a/http.md +++ b/http.md @@ -296,6 +296,7 @@ SecDefaultAction "phase:2,deny,log,status:403" - - - [Docker image](https://hub.docker.com/_/nginx) +- [freenginx](http://freenginx.org/) (forked from F5) A funny aside, one of my coworkers said that "nginx is just a hipster Apache". However, there's sound technical reasons for choosing nginx called [the C10K Problem](http://www.kegel.com/c10k.html) @@ -429,4 +430,4 @@ bind :443 ssl no-sslv3 crt /path/to/cert.pem ciphers ALL:!EXPORT:!aNULL:!eNULL:! # Proxygen -- \ No newline at end of file +- diff --git a/image-manipulation.md b/image-manipulation.md index 1c9cdfd..b919639 100644 --- a/image-manipulation.md +++ b/image-manipulation.md @@ -38,4 +38,4 @@ exiftool file.pdf -Title="Animal Farm" -Author="George Orwell" ```shell jp2a -b --colors --fill -``` \ No newline at end of file +``` diff --git a/information-theory.md b/information-theory.md new file mode 100644 index 0000000..c4fd480 --- /dev/null +++ b/information-theory.md @@ -0,0 +1,41 @@ + +# Information Theory + +# Resources + +[Wikipedia - Information theory](https://en.wikipedia.org/wiki/Information_theory) + + +# People + + + + +## Claude Shannon + +Founder of information theory + + + + +## Harry Nyquist + +Invented communications theory + +From [wikipedia](https://en.wikipedia.org/wiki/Harry_Nyquist): + +> As reported in The Idea Factory, the Bell Labs patent lawyers wanted to know why some people were so much more productive (in terms of patents) than others. After crunching a lot of data, they found that the only thing the productive employees had in common (other than having made it through the Bell Labs hiring process) was that “… Workers with the most patents often shared lunch or breakfast with a Bell Labs electrical engineer named Harry Nyquist. It wasn’t the case that Nyquist gave them specific ideas. Rather, as one scientist recalled, ‘he drew people out, got them thinking.” (Pg. 135) + + +## Ralph Hartley + +[wikipedia - Ralph Hartley](https://en.wikipedia.org/wiki/Ralph_Hartley) + +The hartley unit (one decimal digit) is named after him + + +## John R. Pierce + +Coined "transistor" + +Worked on Pulse Code Modulation with [Shannon](#orgfdb97b9) diff --git a/journal.md b/journal.md index 9d3a533..8aab16b 100644 --- a/journal.md +++ b/journal.md @@ -379,4 +379,4 @@ CVE-2017-9798 \ No newline at end of file + diff --git a/key-value-storage.md b/key-value-storage.md index 7c1d694..3c7797d 100644 --- a/key-value-storage.md +++ b/key-value-storage.md @@ -116,4 +116,4 @@ dc.get('foo') # etcd - \ No newline at end of file + diff --git a/linux-kernel.md b/linux-kernel.md index 0b82c6d..dda049e 100644 --- a/linux-kernel.md +++ b/linux-kernel.md @@ -339,3 +339,18 @@ Running: - [Meta blog post](https://developers.facebook.com/blog/post/2021/12/09/drgn-how-linux-kernel-team-meta-debugs-kernel-scale/) - [Github](https://github.com/osandov/drgn) + + +# cgroups + + +# cgroupsv2 + +- +- +- + + +# cgroupsv1 + +- diff --git a/linux/cgroups.md b/linux/cgroups.md deleted file mode 100644 index c7e03dc..0000000 --- a/linux/cgroups.md +++ /dev/null @@ -1,13 +0,0 @@ -# cgroups - - -# cgroupsv2 - -- -- -- - - -# cgroupsv1 - -- \ No newline at end of file diff --git a/lisp/common_lisp.md b/lisp.md similarity index 62% rename from lisp/common_lisp.md rename to lisp.md index 46ecae3..19ef57a 100644 --- a/lisp/common_lisp.md +++ b/lisp.md @@ -1,3 +1,37 @@ +# Lisp + +(This is more a directory of interesting Lisp artifacts and sites I've stumbled across, and don't want to have to find again). + +- [ISLISP](http://www.islisp.info) - a Lisp standard + + +## Quotes + +> "LISP is a high-level language, but you can still feel the bits sliding between your toes." -Guy Steele + + +# Scheme + +- + + +## Syntax cheatsheet + +```scheme +"This is a string" +CaseSensitiveIdentifiers + +(define add2 + (lambda (n) + (+ n 2))) +;; syntactic sugar: +(define (add2 n) + (+ n 2)) + +(load "filename.ss") +``` + + # Common Lisp @@ -97,10 +131,78 @@ destination can be nil, t (ie STDOUT), a stream, or string w/ fill pointer - +## Quicklisp + + + + +### download + +```shell +curl -O https://beta.quicklisp.org/quicklisp.lisp +curl -O https://beta.quicklisp.org/quicklisp.lisp.asc +gpg --verify quicklisp.lisp.asc quicklisp.lisp +``` + + +### initial install + +```lisp +(load "quicklisp.lisp") +``` + + +### get software update + +```lisp +(ql:update-dist "quicklisp") +``` + + +### Load a system + +```lisp +(ql:quickload "system-name") +``` + + +### Find a system + +```lisp +(ql:system-apropos "term") +``` + + +### Load Quicklisp every time Lisp starts + +```lisp +(ql:add-to-init-file) +``` + + # Clozure [Clozure homepage](https://ccl.clozure.com/) ```lisp (external-call "getpid" :pid_t) -``` \ No newline at end of file +``` + + +# Interlisp + +- +- + + +## Prominent Interlisp Programs + + +### Automated Mathematician + + + + +### EURISKO + + diff --git a/lisp/index.md b/lisp/index.md deleted file mode 100644 index cb68d30..0000000 --- a/lisp/index.md +++ /dev/null @@ -1,32 +0,0 @@ -# Lisp - -(This is more a directory of interesting Lisp artifacts and sites I've stumbled across, and don't want to have to find again). - -- [ISLISP](http://www.islisp.info) - a Lisp standard - - -## Quotes - -> "LISP is a high-level language, but you can still feel the bits sliding between your toes." -Guy Steele - - -# Scheme - -- - - -## Syntax cheatsheet - -```scheme -"This is a string" -CaseSensitiveIdentifiers - -(define add2 - (lambda (n) - (+ n 2))) -;; syntactic sugar: -(define (add2 n) - (+ n 2)) - -(load "filename.ss") -``` \ No newline at end of file diff --git a/lisp/quicklisp.md b/lisp/quicklisp.md deleted file mode 100644 index 0aece5f..0000000 --- a/lisp/quicklisp.md +++ /dev/null @@ -1,22 +0,0 @@ -# Quicklisp - - -## Load a system - -``` -(ql:quickload "system-name") -``` - - -## Find a system - -``` -(ql:system-apropos "term") -``` - - -## Load Quicklisp every time Lisp starts - -``` -(ql:add-to-init-file) -``` \ No newline at end of file diff --git a/macos.md b/macos.md index 73baafb..0c579b3 100644 --- a/macos.md +++ b/macos.md @@ -745,4 +745,4 @@ Note: this is for the CLI to the keychains and Security framework, not a general ```shell # Print password security find-generic-password -a "${account}" -s "${name}" -w -``` \ No newline at end of file +``` diff --git a/microsoft.md b/microsoft.md index ef8ca41..4d7287d 100644 --- a/microsoft.md +++ b/microsoft.md @@ -85,4 +85,4 @@ installer.exe /x # Microsoft Outlook - \ No newline at end of file + diff --git a/multimedia.md b/multimedia.md index 8b0f174..c874bdb 100644 --- a/multimedia.md +++ b/multimedia.md @@ -342,4 +342,4 @@ mplayer dvdnav:// | Werewolf Horror Movies | 75930 | | Westerns | 7700 | | World Music Concerts | 2856 | -| Zombie Horror Movies | 75405 | \ No newline at end of file +| Zombie Horror Movies | 75405 | diff --git a/mysql.md b/mysql.md index 6b6ad58..fda3f4e 100644 --- a/mysql.md +++ b/mysql.md @@ -564,4 +564,4 @@ mysqlhotcopy A utility that quickly makes backups of MyISAM tables while the ser ## MySQL - XtraDB Engine -drop-in replacement for InnoDB binary compatibility with InnoDB database files \ No newline at end of file +drop-in replacement for InnoDB binary compatibility with InnoDB database files diff --git a/networking.md b/networking.md index be426a0..023bcf0 100644 --- a/networking.md +++ b/networking.md @@ -222,7 +222,10 @@ whois 'p ! + NAME-ARIN' RFC 2281 -[No RFC for V2](https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipapp_fhrp/configuration/15-mt/fhp-15-mt-book/fhp-hsrp-v2.html) # SOAP +[No RFC for V2](https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipapp_fhrp/configuration/15-mt/fhp-15-mt-book/fhp-hsrp-v2.html) + + +# SOAP Simple Object Access Protocol diff --git a/operations.md b/operations.md index c97bb4d..02ce4fc 100644 --- a/operations.md +++ b/operations.md @@ -256,4 +256,4 @@ Incident commander hand-off is explicitly confirmed by person taking over. - DevOps is not something you can buy or force down someone's throat - DevOps does not require special tools. It requires a mindset of deployment automation and frequent builds - Failure is inevitable, work to reduce MTTR -- Developers and ops should be working together \ No newline at end of file +- Developers and ops should be working together diff --git a/package-management.md b/package-management.md index 9c7badb..0879d7b 100644 --- a/package-management.md +++ b/package-management.md @@ -180,4 +180,4 @@ rm -f /var/lib/rpm/__db* && rpm --rebuilddb The CLI is generally the same as YUM. -yum-plugin-versionlock is replaced with dnf-plugins-core \ No newline at end of file +yum-plugin-versionlock is replaced with dnf-plugins-core diff --git a/people.md b/people.md index 5cd6cfb..2906c53 100644 --- a/people.md +++ b/people.md @@ -1,5 +1,5 @@ -# People +# People # Akira Kitamura @@ -150,9 +150,8 @@ When faced with two or more alternatives that deliver roughly the same value, ta # G. Mark Hardy - -G Mark's Observations on Life: +## G Mark's Observations on Life: - Just ask. - Don't wait for perfection. @@ -357,7 +356,7 @@ Inventor of Xanadu Inventory of Ruby language -> "...computers don't mind if I must make effort to communicate with them or if it is easy to communicate with them. They don't care if I put the numbers of instruction byte sequences in a file and feed it to them to run, or if a very high level language generated the instructions. The computers don't care. We humans care about the effort we pay. Often people, especially computer engineers, focus on the machines. They think,"By doing this, the machine will run faster. By doing this, the machine will run more effectively. By doing this, the machine will something something something.” They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves.” +> ...computers don't mind if I must make effort to communicate with them or if it is easy to communicate with them. They don't care if I put the numbers of instruction byte sequences in a file and feed it to them to run, or if a very high level language generated the instructions. The computers don't care. We humans care about the effort we pay. Often people, especially computer engineers, focus on the machines. They think, "By doing this, the machine will run faster. By doing this, the machine will run more effectively. By doing this, the machine will something something something." They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. # Paul Graham @@ -371,4 +370,7 @@ The day job to pay the bills, and the fun/beautiful work after hours When you're small and nimble, try to get as much technical ground between you and the competition. They're bigger, so it will take longer for them to reach feature parity. Natural barrier to entry. -> "Start by picking a hard problem, and then at every decision point, take the harder choice." \ No newline at end of file +> "Start by picking a hard problem, and then at every decision point, take the harder choice." + + +# Leslie Lamport diff --git a/phones.md b/phones.md index f230003..f4f6602 100644 --- a/phones.md +++ b/phones.md @@ -70,4 +70,4 @@ blackberry-deploy -installApp 169.254.0.1 -password $PW $PKG.bar ## Reference documentation -- [Native API Reference](https://developer.blackberry.com/playbook/native/reference/) \ No newline at end of file +- [Native API Reference](https://developer.blackberry.com/playbook/native/reference/) diff --git a/physical-security.md b/physical-security.md index a150afe..92a39ad 100644 --- a/physical-security.md +++ b/physical-security.md @@ -4,4 +4,4 @@ ## Visual Microphones - -- \ No newline at end of file +- diff --git a/procedural_content_generation.md b/procedural_content_generation.md index 4f62619..da62f95 100644 --- a/procedural_content_generation.md +++ b/procedural_content_generation.md @@ -9,4 +9,4 @@ # Perlin Noise -- \ No newline at end of file +- diff --git a/process-tracing.md b/process-tracing.md index 41831f4..6ac74dd 100644 --- a/process-tracing.md +++ b/process-tracing.md @@ -49,4 +49,4 @@ lsof -U ## Links -- [Self hosting with Docker](https://develop.sentry.dev/self-hosted/) \ No newline at end of file +- [Self hosting with Docker](https://develop.sentry.dev/self-hosted/) diff --git a/programming-language-design.md b/programming-language-design.md new file mode 100644 index 0000000..a4663ff --- /dev/null +++ b/programming-language-design.md @@ -0,0 +1,296 @@ + +# Programming Language Theory and Design + +# Compilers + +A compiler transforms one language into another (eg High-Level Language -> Machine Code) + +A [lexer](#org48676fa) tokenizes a file + +A [parser](Parsers) takes the tokens and creates an abstract syntax tree + + +## Self-hosting + +A self-hosted compiler is one where the language is used for its own compiler. In order to accomplish this, the initial compiler is bootstrapped from either another language or assembled + + +## Compiler-compilers + +A compiler-compiler takes a grammar file and creates a source files for an implementation to use + +See lex, yacc, bison + + +## Just-in-time compilation + +JIT compilation is when the interpreter takes the loaded program and compiles it to native code for the architecture the program is running on. + +Sophisticated JITs use profiling hooks in generated code to see which regions are performance critical, recompiling with more advanced optimizations as needed (eg HotSpot JVM) + + +## Single-pass compilers + +You can create a simple compiler that parses the source, analyzes the code, and generates native language code in a single pass. There's no IR, and code isn't revisited. Early C and Pascal compilers did this since memory was at a premium, which is why type and function declarations have to be defined before usage. + + +# Assembler + +An assembler translates a program into machine code. There is no fancy changing of code like you would get with a compiler - this is an easier way to read machine code. + + + + +# Lexers + +AKA Scanners + +Convert strings of characters into groups of [tokens](#orgd7d2eeb) + +After lexical analysis, something like + +``` +foo = 2 + 2 +``` + +Would become something like + +``` +[:identifier, +'=', :number, :'+', :number] +``` + +A lexer will use multiple pointers in the file to know + +- the line number +- the starting location of a [lexeme](#org2325e30) +- where in the lexeme it is as it is scanning + +Not all tokens can be determined by the first character (take for example `!=` - if you're too agressive, instead of 'not equal' you could get 'not' and 'assign' - different semantics!) + + + + +## Lexemes + +A sequence of characters that matches a [token](#orgd7d2eeb) pattern + + + + +## Tokens + +A token is a data structure that conveys the meaning of a [lexeme](#org2325e30) + + + + +## Expressions + +An expression, in contrast to [statements](#org0046328), will return a value. `2 + 2` is an example of an expression. + +In languages like Ruby/Lisp/etc where "everything is an expression", you have to decide what a control flow (if, while) evaluates as, a variable declation evaluates to, a block. In exchange for making a few critical choices up front, you cut out redundancy and get implicit returns (ie last expression is the return value) cheaply. + + + + +## Statements + +A statement, in contrast to an [expressions](#orgfb82f31), does not produce a value. This is often something like a conditional. + + +# Static analysis + +Binding/resolution is where an identifier (eg a variable name) is defined and the scope is determined. + +In statically-typed languages, this is where the type is checked. + +The information from an identified node can be stored as an **attribute** within the AST tree node. It can also be put in a **symbol table** (a key-value lookup). The tree can also be transformed into an **[Intermediate Representation](#org3d37664)**. + + + + +## Intermediate Representation + +An intermediate representation is tied neither to the source language nor to a particular target platform - this makes it easy to have a 'general' compiler that can handle multiple languages and platforms (eg [LLVM](compilers.md), [GCC](compilers.md)) + + +# Class-based vs Prototype-based languages + +In class-based, instances store state for an object and have a reference to a class. Classes contain the methods and inheritance chain + +To call a method on an instance requires a lookup of the instances' classes' methods. + +In a prototype-based language there are no classes, only objects, and each object may contain state and methods. Objects can directly inherit form each other. + +There's no hard-line difference between the two - JS constructor functions create class-like objects. Class-based Ruby lets you attach methods to individual instances. What often happens with prototype-based languages is that the user creates classes instead of the language (what Larry Wall calls the "Waterbed Theory" - there's a basic complexity that's either handled by the user or the language, but it's going to be there nevertheless). + + +# Static and dynamic dispatch + +Static dispatch is when method lookup happens at compile time based on the static type of the instance. + +Dynamic dispatch looks up the class of the actual instance object at runtime. Virtual methods are a form of dynamic dispatch + + +# Parsers + +A parser works through a list of [tokens](#orgd7d2eeb) to create an [abstract syntax tree](#org97a93ac). It uses multiple pointers to track the state of the input (eg. the tokens inside of matching brackets (which are also tokens)) + +A parser will determine if something is a [statement](#org0046328) or an [expression](#orgfb82f31) + +When parsing, you will need to decide how to handle unrecognized tokens (generally best to throw an error) + +- [Syntactical sugar](#org2a9a2ff) +- [Abstract Syntax Trees](#org97a93ac) + + + + +## Abstract Syntax Trees + +An AST is only concerned with the semantic meaning of a program, not the syntactical expression. + +You can compare two programs if each node in the AST implements an equivalence function (`==`) comparing the children values + + +# Interpreters + +An interpreter takes the code that it is given and executes it immediately. + +The interpreter will need to track the output and the environment (eg variable assignments, etc) as it walks the tree. + + +## Tree-walking interpreter + +A tree-walking interpreter walks each leaf of an [AST](#org97a93ac) to execute - this can be kind of slow. + +Early Ruby versions using the Matz Ruby Interpreter did this, before being replaced by Yet Another Ruby VM (YARV) + + + + +# Syntactical Sugar + +Syntax sugar is when, through a shorthand, you are able to express the same semantics in less code. You can spot sugar when removing it causes no irreparable harm to a program (ie could transform the code to the more verbose version, often mechanically). + +```ruby +if some_condition + # ... +else + if another_condition + # ... + end +end + +# Semantically identical syntax sugar +if some_condition + # ... +elsif another_condition + # ... +end +``` + + +# Code generation + +Code generation is when you create code for the underlying platform/processor. + +One way of addressing portability is generating p-code/bytecode for a hypothetical machine, which isn't tied too tightly to a particular computer architecture. Then you write a language virtual machine that runs on the physical platform, which should be easier than writing native machine code. + + +# Code Optimization + + +## Constant folding + +Constant folding is when the compiler determines that an expressions will always evaluate the same way. `a = 2 + 5` can be converted at compile time to `a = 7`. + + +# Closures + +A closure is when a function has an inner function that is allowed to use references within the outer function. This means you can't assume variable scope is like a stack (where variables disappear on function return). + + +# Syntax + +An argument is a value you pass to a function when you call it. + +A parameter is a variable that holds the value of the argument inside the body of the function. A function declaration has a *parameter list*. AKA formal parameters + + +# Control Flow + +Control flow is a way of managing the logic of a program with if/then, goto, etc. + +- if statements +- loop constructs + - while + - for + - foreach + - requires dynamic dispatch to an iterator protocol +- goto + + +# Memory Management + +3 kinds of MM + +1. Hardware MM (eg MMU, RAM,) +2. OS MM (virtual memory, process memory protection) +3. Application MM (garbage collection) + +Resources: + +- + + +## tracing garbage collection + +Trickier to debug than [reference counting](#org0267e9b) + +> In practice, ref counting and tracing are more ends of a continuum than opposing sides. Most ref counting systems end up doing some tracing to handle cycles, and the write barriers of a generational collector look a bit like retain calls if you squint. + + + + +## Reference counting + +Reference counting is easy to implement, but has limitations. Perl, PHP, and Python started with it, but eventually moved to tracing garbage collection + + +# Papers/books + + +## A Nanopass Framework for Compiler Education + +Dipanwita Sarkar, Oscar Waddell, R. Kent Dybvig + + + +Each pass of a micropass compiler performs a single specific task: + +- simplify (eg relaxing the AST) +- verify (eg check compiler invariants that are hard to express in grammar) +- convert (eg makes abstractions explicit into lower-level target language) +- analyze (eg collect program information and annotate the output program) +- improve (eg decrease run time/resource utilization) + +A nanopass compiler differs from a micropass compiler in three ways: + +1. the intermediate-language grammars are formally specified and enforced +2. each pass needs to contain traversal code only for forms that undergo meaningful transformation +3. the intermediate code is represented more efficiently as records, although all interaction with the programmer is still via the s-expression syntax + + +## "Go To Statement Considered Harmful" by Edsgar Dijkstra + +Dijkstra argues in "Go To Statement Consider Harmful" that beyond being logically superfluous (Bohm-Jacopini), goto has the problem of making programs hard to reason about - we aren't just reasoning about the static program, we're reasoning about the dynamic process behaviour as well (which is more difficult). + + +## Program Development by Stepwise Refinement by Niklaus Wirth + +It's better pedagogically to show (and do) the development process than read old programs + +8 Queen's problem: 8x8 chessboard and 8 queens that are hostile. What configuration must they be in to be on the board + +Brute force would take ~8 hours if each config took 100 microseconds. (That would be ~4-5 minutes at one microsecond - Moore's Law could well make this kind of a example a moot point if seen in terms of developer productivity time...) diff --git a/programming-languages.md b/programming-languages.md index b7c17f9..e79236b 100644 --- a/programming-languages.md +++ b/programming-languages.md @@ -13,6 +13,122 @@ - +## overview + + +### Memory + +- Free allocated memory when you are done with it, don't assume that OS will clean up your mess. + + +### Casting + +- Don't cast returned pointers from malloc. `(void *)` should get automatically promoted to any pointer type, and casting just makes it likely you'll get it wrong. + + +### keywords + +- \_Alignas (C11) +- \_Alignof (C11) +- \_Atomic (C11) +- \_Bool (C99) +- \_Complex (C99) +- \_Decimal128 (C23) +- \_Decimal32 (C23) +- \_Decimal64 (C23) +- \_Generic (C11) +- \_Imaginary (C99) +- \_Noreturn (C11) +- \_Staticassert (C11) +- \_Threadlocal (C11) +- alignas (C23) +- alignof (C23) +- auto +- bool (C23) +- break +- case +- char +- const +- constexpr (C23) +- continue +- default +- do +- double +- else +- enum +- extern +- false (C23) +- float +- for +- goto +- if +- inline (C99) +- int +- long +- nullptr (C23) +- register +- restrict (C99) +- return +- short +- signed +- sizeof +- static +- staticassert (C23) +- struct +- switch +- threadlocal (C23) +- true (C23) +- typedef +- typeof (C23) +- typeofunqual (C23) +- union +- unsigned +- void +- volatile +- while + + +### Standards + + +#### C23 + +- links + + - + - + + +### Install tooling in Fedora + +```shell +sudo yum groupinstall "C Development Tools and Libraries" +``` + + +### Open and read file + +```C +const char *filename = "file.txt"; +unsigned char byte; +FILE *fp; + +fp = fopen(filename, "rb"); + +if (!fp) { + printf("Couldn't open file\n"); + return 1; +} + +while(!feof(fp)) { + fread(&byte, sizeof(int), 1, fp); + printf("%i\n",byte); +} + +fclose(fp); +``` + + ## libraries @@ -165,7 +281,7 @@ CGO_ENABLED=0 go build GOOS=linux GOARCH=amd64 go build ``` -[https://golang.org/doc/install/source#environment](List%20of%20compilation%20targets) + ## libraries @@ -2048,3 +2164,12 @@ A subset of Python intended as a configuration language ### specifications - [Starlark specification](https://github.com/bazelbuild/starlark/blob/master/spec.md) + + +# Nim + + +## resources + + +### [official website](https://nim-lang.org) diff --git a/project-management.md b/project-management.md index f2a48dc..6c68107 100644 --- a/project-management.md +++ b/project-management.md @@ -244,4 +244,4 @@ curl -H "Authorization: Bearer ${API_TOKEN}" https://app.liquidplanner.com/api/v - Closure - Get signoff that everything is done - Hand over everything - - Do a retrospective \ No newline at end of file + - Do a retrospective diff --git a/public-key-infrastructure.md b/public-key-infrastructure.md index 10d2a3d..1b02d5f 100644 --- a/public-key-infrastructure.md +++ b/public-key-infrastructure.md @@ -159,4 +159,4 @@ gpg --delete-secret-key USERNAME ```shell pkitool --server -``` \ No newline at end of file +``` diff --git a/python.md b/python.md index bd1ba01..0142d37 100644 --- a/python.md +++ b/python.md @@ -824,4 +824,4 @@ class PyGUI(): def main(self): self.main_window.show() gtk.main() -``` \ No newline at end of file +``` diff --git a/quantum-computing.md b/quantum-computing.md index dbd1a53..de241e0 100644 --- a/quantum-computing.md +++ b/quantum-computing.md @@ -7,4 +7,4 @@ When we get to the point of storing bits in things the size of atoms, we're deal Peter Shor's algorithm for factoring large numbers (1994) -Grover's algorithm \ No newline at end of file +Grover's algorithm diff --git a/ruby/bundler.md b/ruby/bundler.md deleted file mode 100644 index 9284813..0000000 --- a/ruby/bundler.md +++ /dev/null @@ -1,44 +0,0 @@ -# Bundler - -- - - -## Writing a Gemfile - -```ruby -source 'https://example.org' do - # If you have private gems, put them here so that someone doesn't spoof them on rubygems.org ! -end - -source 'https://rubygems.org' do - # Gems here -end - -# Using a git repository -gem 'rack', git: 'https://github.com/rack/rack' - -# Make a gem group optional -# use `bundle config set --local with GROUP` to install -group :development, optional: true do - gem 'guard' -end -``` - - - - -## Install gems to dir - -```shell -bundle config set --local path 'vendor' - -# Deprecated way: -bundle install --path dir -``` - - -## Using an http proxy - -```shell -http_proxy=http://proxy bundle install -``` \ No newline at end of file diff --git a/ruby/minitest.md b/ruby/minitest.md deleted file mode 100644 index 956c1d0..0000000 --- a/ruby/minitest.md +++ /dev/null @@ -1,13 +0,0 @@ -# Minitest - -- - - -## Mocking methods - -```ruby -# method mocking is done with a block -ClassName.stub :method_name, method_value do - ClassName.method_to_run_against -end -``` \ No newline at end of file diff --git a/ruby/solargraph.md b/ruby/solargraph.md index 7ed78b7..00a630a 100644 --- a/ruby/solargraph.md +++ b/ruby/solargraph.md @@ -4,4 +4,4 @@ gem install solargraph # get core solargraph download-core -``` \ No newline at end of file +``` diff --git a/secrets-management.md b/secrets-management.md index 8f9ab04..e82d255 100644 --- a/secrets-management.md +++ b/secrets-management.md @@ -51,4 +51,4 @@ vault operator init -recovery-shares=1 -recovery-threshold=1 # passwordstore - [core](https://www.passwordstore.org/) -- [gopass](https://www.gopass.pw/) \ No newline at end of file +- [gopass](https://www.gopass.pw/) diff --git a/server-validation.md b/server-validation.md index aa6e3c0..8897886 100644 --- a/server-validation.md +++ b/server-validation.md @@ -8,4 +8,4 @@ # ServerSpec - \ No newline at end of file + diff --git a/social-media.md b/social-media.md index c9ca1f2..9a42d5b 100644 --- a/social-media.md +++ b/social-media.md @@ -84,4 +84,4 @@ Validator <-- Twitter Summary card images must be at least 120x120px --> -``` \ No newline at end of file +``` diff --git a/software-security.md b/software-security.md index b4dd6c8..1e618fa 100644 --- a/software-security.md +++ b/software-security.md @@ -208,4 +208,4 @@ Since you have to "teach" a bootstrapping compiler new tricks, it's possible to > The moral is obvious. You can't trust code that you did not totally create yourself. (Especially code from companies that employ people like me.) No amount of source-level verification or scrutiny will protect you from using untrusted code. -Communication of the ACM, Vol. 27, No. 8, August 1984, pp. 761-763. \ No newline at end of file +Communication of the ACM, Vol. 27, No. 8, August 1984, pp. 761-763. diff --git a/sql-database.md b/sql-database.md index 1c5c66a..39e94b3 100644 --- a/sql-database.md +++ b/sql-database.md @@ -231,4 +231,4 @@ REINDEX { INDEX | TABLE | DATABASE | SYSTEM } name ## Handy URLs - -- \ No newline at end of file +- diff --git a/static-site-generators.md b/static-site-generators.md index 9e0ba3d..2c342c3 100644 --- a/static-site-generators.md +++ b/static-site-generators.md @@ -22,4 +22,4 @@ hugo server -D - - -- \ No newline at end of file +- diff --git a/statistics.md b/statistics.md index 9eeb4b5..1cb8b6e 100644 --- a/statistics.md +++ b/statistics.md @@ -1,15 +1,102 @@ + # Statistics +Statistics is about organizing data in a way that can allow further meaning and inferences. + +One of the means for organizing data is [frequency distribution](#orgce70972) + +When using pictograms, beware of the possibility of giving a false impression with the data. -## Statistical hypothesis testing +When describing the data, it is good to have the [measures of central tendency](#org5cf38d9) and [measures of dispersion](#org2e4c99f) + + +# Statistical hypothesis testing Null hypothesis - general statement that nothing is happening. -## Errors +# Errors Type 1 - False positive. The mistaken rejection of an actually true null hypothesis. "An innocent person is convicted." Type 2 - False negative. The mistaken acceptance of an actually false null hypothesis. "A guilty person is not convicted." -A crossover error rate (CER) is the point at which both types are equal. A lower CER means something is more accurate. \ No newline at end of file +A crossover error rate (CER) is the point at which both types are equal. A lower CER means something is more accurate. + + + + +# Frequency distribution + +Frequency distribution is where the you take each possible value of data and enumerate the total number of times that data has appeared (the *frequency*) + +Where the number of different of data points becomes difficult (eg the income of every individual in Canada), consider [grouping data](#org797ee13). + +Frequency distribution lends itself well to [statistics](statistics.md) + + + + +# Grouping data + +When making a [frequency distribution](#orgce70972), it can sometimes make the information clearer by grouping data. An example for this is "income per individual." Instead of having thousands of individual points, you can group them like so: + +| Income | Frequency | +| 120k-159k | 45 | +| 90-119k | 345 | +| 60-89k | 44453 | +| 30-59k | 3345 | +| 0-29k | 600 | + +Rules of thumb when creating classes: + +- Keep number of classes reasonable to what you're trying to convey (8-15) +- Classes should be of the same size +- Classes should be easy to handle + +One way to handle this is to take the range from highest to lowest, then divide by the number of classes. While you *can* do something like "120k+" plus in the above table, you lose the ability to do arithmetic on the data. It might also hide outliers and anomalies. + + +# Law of Large Numbers + +Don't mistake probability for reality + + + + +# Measures of central tendency + +MCT can be best thought of as averages. A useful tool in [Statistics](statistics.md) + +| Mean | weighted center, summing the values then dividing by size of the set | +| Median | the numerical center, halving the set length | +| Mode | the most frequent value in a set | + +In a set of [1, 2, 2, 4, 6], the mean is 3, the mode is 2, the median is 2. + +If the number of values in a set is even, the median of the set is the average of the two middle-most numbers. + +range = highest value - lowest value (obvious, but worth stating) + + + + +# Measures of dispersion + +Dispersion (also called variability, scatter, or spread) is the extent to which a distribution is stretched or squeezed + +On symmetrical distributions, you'll want to find the standard deviation (how close numbers are to the mean). + +Where distributions are asymmetric or have outlier values, consider using the semi-interquartile range: Q = 1/2(Q3 - Q1) + + +# Percentile + +The percentile of a set is the number of n percent of the set. + + +# Bar graphs + +Bar graphs are a way of visualizing data that can make numbers more obvious, for example showing [frequency distribution](#orgce70972). + +A histogram is similar to a bar graph, but the variables are broken into intervals. diff --git a/text-manipulation.md b/text-manipulation.md index bc2a4ec..ac8200c 100644 --- a/text-manipulation.md +++ b/text-manipulation.md @@ -26,4 +26,4 @@ sed -i '/pattern to match/d' ./infile ```shell sed -i '1i header line' ./infile -``` \ No newline at end of file +``` diff --git a/time-series-database.md b/time-series-database.md deleted file mode 100644 index 3293a3b..0000000 --- a/time-series-database.md +++ /dev/null @@ -1,14 +0,0 @@ -# Time-series database - - -# influxdb - - - - -# Prometheus - -Official docker container: prom/prometheus - -- -- \ No newline at end of file diff --git a/transport-layer-security.md b/transport-layer-security.md index cacb3f0..fe55f03 100644 --- a/transport-layer-security.md +++ b/transport-layer-security.md @@ -49,4 +49,4 @@ Here's a quick checklist of best practices as of this writing. It is by no means # NSS - \ No newline at end of file + diff --git a/unix.md b/unix.md index 2187c33..8c551cb 100644 --- a/unix.md +++ b/unix.md @@ -85,4 +85,4 @@ man 5 proc - /proc/partitions - list of partitions \ No newline at end of file + list of partitions diff --git a/video-conferencing.md b/video-conferencing.md index d4b1366..2339a42 100644 --- a/video-conferencing.md +++ b/video-conferencing.md @@ -25,4 +25,4 @@ Convert: needs to be converted to - \ No newline at end of file + diff --git a/vim.md b/vim.md index 8e07514..5b33f3e 100644 --- a/vim.md +++ b/vim.md @@ -152,4 +152,4 @@ Note the `\{` ``` s/function(.\{-})// -``` \ No newline at end of file +``` diff --git a/virtual_reality.md b/virtual_reality.md index e49254f..a7e769e 100644 --- a/virtual_reality.md +++ b/virtual_reality.md @@ -26,4 +26,4 @@ # WebVR - -- \ No newline at end of file +- diff --git a/web-browsers.md b/web-browsers.md index 2a778b1..5541598 100644 --- a/web-browsers.md +++ b/web-browsers.md @@ -61,4 +61,4 @@ SHIFT-ESC - see which tabs are chewing up the most CPU/memory # HyperCard -- \ No newline at end of file +- diff --git a/web-programming.md b/web-programming.md index f52d7eb..2792de4 100644 --- a/web-programming.md +++ b/web-programming.md @@ -31,18 +31,12 @@ og:image # Speed Optimization - Enable caching - - Minify your resources - - Optimize your images - - Check out your database - When was it last vacuumed? - - Use a CDN - - Consider preloading - - Use the latest language/server/platform/library versions? @@ -115,4 +109,9 @@ og:image - Not every human activity can be measured - The ceaseless pursuit of data to quantify the value of any endeavour is catastrophic to true understanding - The barrier between public and private must remain unbreachable -- We must all have the right to disappear \ No newline at end of file +- We must all have the right to disappear + + +# Accessibility + +[W3C Web Accessibility Initiative](https://www.w3.org/WAI/) diff --git a/workload-orchestration.md b/workload-orchestration.md index c5a2997..8f3cda6 100644 --- a/workload-orchestration.md +++ b/workload-orchestration.md @@ -228,4 +228,4 @@ Default web UI port is 4646 │ │ │ │ │ │ │ │ │ │ * * * * * command to execute -``` \ No newline at end of file +``` diff --git a/z_meta/abstraction_comics.md b/z_meta/abstraction_comics.md deleted file mode 100644 index 7622906..0000000 --- a/z_meta/abstraction_comics.md +++ /dev/null @@ -1,6 +0,0 @@ -# Abstraction Comics - -There's some webcomics that have a tidy way of explaining a concept. - -- [Nerdsniping (XKCD)](https://xkcd.com/356/) -- [Information half-life (Abstruse Goose)](https://abstrusegoose.com/531) \ No newline at end of file diff --git a/z_meta/academic_papers.md b/z_meta/academic_papers.md deleted file mode 100644 index e4d5c70..0000000 --- a/z_meta/academic_papers.md +++ /dev/null @@ -1,26 +0,0 @@ -# Academic Papers - - -## On Reading Papers - -- [Should I Read Papers?](http://michaelrbernste.in/2014/10/21/should-i-read-papers.html) -- -- - - -## How to read a paper - -- Read intro and conclusion first -- Summarize the background and specific questions -- Determine purpose, structure, and direction -- Write down every word you don't understand -- Main points? Strengths? Weaknesses? Do the results answer the questions? -- Does the abstract jive with the rest of the paper? -- Look into citations -- What do other researchers say about the paper? - - -## Sources For Papers - -- [The Morning Paper](https://blog.acolyer.org/) -- [Papers We Love](https://github.com/papers-we-love/papers-we-love) \ No newline at end of file diff --git a/z_meta/accessability.md b/z_meta/accessability.md deleted file mode 100644 index 032a169..0000000 --- a/z_meta/accessability.md +++ /dev/null @@ -1,3 +0,0 @@ -# Accessibility - -[W3C Web Accessibility Initiative](https://www.w3.org/WAI/) \ No newline at end of file diff --git a/z_meta/advice_for_new_software_devs.md b/z_meta/advice_for_new_software_devs.md deleted file mode 100644 index 736dc67..0000000 --- a/z_meta/advice_for_new_software_devs.md +++ /dev/null @@ -1,34 +0,0 @@ -# Advice for new software devs - -- Build the right *it* before you build it *right*. Do a [pretotype](http://www.pretotyping.org) before a prototype to see if it's even worth the effort (you'll find often it's not). -- When you're stuck, ask a more experienced developer. Don't let pride keep you from getting the work done. -- If you see something broken, resist the immediate temptation to fix it. - - Mark it as TODO, and return to it when you've got free time. - -- Learn how to write really good bug reports - - Steps to duplicate (in ordered form) - - Desired behaviour - - Current behaviour - - Bonus points if you can explain how it affects the end user - -- You'll spend more time reading code and documentation than writing it, so make sure the stuff you write is readable -- Your "soft skills" will carry you much further than your coding skills - - Public speaking - - Pleasant conversations - - Writing skills - -- Take notes of new stuff, and have a system to organize the notes (e.g. a wiki) - - You will want a digital system for this. The faster you can retrieve your notes, the better. - -- Always try to work with exceptionally good developers -- What makes software 'legacy software' is that you will grow smarter and more experienced, and you'll just know better ways to organize and your code. If you try to learn lessons from legacy software, your time will be well-rewarded. -- Look at the source code of the programs you use regularly. You might just be able to directly improve your own tools. -- Don't celebrate sleep-deprivation. It's stupid. Get 8-9 hours of [good sleep](life_stuff.md) a day, so that your mind can actually do good work. -- Don't break backwards compatibility unless the idea behind breaking it is exceptionally good (e.g. the program runs 5x faster, takes 1/10th the memory, or something else materially worthwhile for your end users) -- Don't work in a job just for the money - the money will dry up, but those memories won't. Your life is too valuable to waste on stupid crap. -- Learn how to write tests - - ...but don't go overboard. Find the right amount of testing so that it's actually *helpful*. Code-to-test ratio shouldn't be over 1.2, and writing tests shouldn't take more than 1/3 of your time. - -- Know what 'good enough' is in any project. There's seldom a need to optimize, don't build up technical debt needlessly. -- Legacy software is the perception shift that happens when you become a better programmer. Legacy software *keeps you honest*. -- [Your users might never tell you something is broken](https://pointersgonewild.com/2019/11/02/they-might-never-tell-you-its-broken/) diff --git a/z_meta/anonymity.md b/z_meta/anonymity.md deleted file mode 100644 index 5aa083a..0000000 --- a/z_meta/anonymity.md +++ /dev/null @@ -1,15 +0,0 @@ -# Anonymity - - - - -# The Circle by Dave Eggers - - -## The Rights of Humans in a Digital Age - -- We must all have the right to anonymity -- Not every human activity can be measured -- The ceaseless pursuit of data to quantify the value of any endeavour is catastrophic to true understanding -- The barrier between public and private must remain unbreachable -- We must all have the right to disappear \ No newline at end of file diff --git a/z_meta/blogs.md b/z_meta/blogs.md deleted file mode 100644 index 584422a..0000000 --- a/z_meta/blogs.md +++ /dev/null @@ -1,15 +0,0 @@ -# Blogs - -- [Coding Horror](http://www.codinghorror.com/blog/) -- [Joel on Software](http://www.joelonsoftware.com/) -- [37signals Company Blog](https://37signals.com/svn) -- [Steve Yegge's Drunken Rants](https://sites.google.com/site/steveyegge2/blog-rants) -- [Programming in the 21st Century](http://prog21.dadgum.com/) -- [Kernel Who?](https://kernelwho.wordpress.com) -- [Papers We Love](http://paperswelove.org/) - - -## Windows / Microsoft - -- [Mark Russinovich](https://blogs.technet.microsoft.com/markrussinovich/) -- [The Old New Thing (Raymond Chen)](https://blogs.msdn.microsoft.com/oldnewthing/) \ No newline at end of file diff --git a/z_meta/canada.md b/z_meta/canada.md deleted file mode 100644 index b838de2..0000000 --- a/z_meta/canada.md +++ /dev/null @@ -1,8 +0,0 @@ -# Canada-specific resources - -- [Innovation, Science and Economic Development Canada](http://www.ic.gc.ca) -- [Canada Intellectual Property Office](http://www.ic.gc.ca/eic/site/cipointernet-internetopic.nsf/eng/home) -- [Canadian whistle-blower laws](http://www.canadianlawsite.ca/whistle-blower.htm) -- [Canada Labour Code](https://laws-lois.justice.gc.ca/eng/acts/L-2/) -- [Occupational Health and Safety](https://www.canada.ca/en/health-canada/services/environmental-workplace-health/occupational-health-safety.html) -- [International Development Research Centre](https://www.idrc.ca/) \ No newline at end of file diff --git a/z_meta/capability_maturity_model.md b/z_meta/capability_maturity_model.md deleted file mode 100644 index b903175..0000000 --- a/z_meta/capability_maturity_model.md +++ /dev/null @@ -1,9 +0,0 @@ -# Capability Maturity Model - - - -- Level 1 - Initial -- Level 2 - Repeatable -- Level 3 - Defined -- Level 4 - Managed (Capable) -- Level 5 - Optimizing (Efficient) \ No newline at end of file diff --git a/z_meta/chaos_engineering.md b/z_meta/chaos_engineering.md deleted file mode 100644 index 1f4a1be..0000000 --- a/z_meta/chaos_engineering.md +++ /dev/null @@ -1,3 +0,0 @@ -# Chaos Engineering - -- [Principles of Chaos Engineering](https://principlesofchaos.org/) \ No newline at end of file diff --git a/z_meta/code_of_conduct.md b/z_meta/code_of_conduct.md deleted file mode 100644 index 33861ad..0000000 --- a/z_meta/code_of_conduct.md +++ /dev/null @@ -1,3 +0,0 @@ -# code of conduct - - \ No newline at end of file diff --git a/z_meta/colemak.md b/z_meta/colemak.md index 2a8d2c4..7023ba4 100644 --- a/z_meta/colemak.md +++ b/z_meta/colemak.md @@ -37,4 +37,4 @@ There's a slightly more ergonomic typing layout called [Colemak-DH](https://cole While there's [macOS keyboard layouts](https://github.com/ColemakMods/mod-dh/tree/master/macOS), apparently macOS will boot you back to a normal keyboard if you use these for sensitive inputs (which would be a big hassle/problem when typing in a hurry). -# amphetype - most common 2-3 letter shortcuts/commands \ No newline at end of file +# amphetype - most common 2-3 letter shortcuts/commands diff --git a/z_meta/computer_associations.md b/z_meta/computer_associations.md deleted file mode 100644 index 0a7b320..0000000 --- a/z_meta/computer_associations.md +++ /dev/null @@ -1,19 +0,0 @@ -# Computer Associations - - -## IEEE - -- [Certification](https://www.computer.org/education/certifications) - -Standards: - -| no. | desc | -|---- |--------------------------- | -| 1003 | POSIX | -| 1016 | Software design description | - - -## ACM - - -## [Canadian Information Processing Society (CIPS)](http://cips.ca) \ No newline at end of file diff --git a/z_meta/contracting_advice.md b/z_meta/contracting_advice.md deleted file mode 100644 index 3acb216..0000000 --- a/z_meta/contracting_advice.md +++ /dev/null @@ -1,57 +0,0 @@ -# Contracting advice - -Wisdom pulled from a variety of sources - - -## Technical - -- Always have the technology installed and comprehended before making estimates -- Don't reinvent the wheel. -- If the customer has given you full access to the site, straight up mirror it. Download everything and just change the configuration file that connects the database. -- When taking on a project, first write down all the steps necessary. Figure out what the Minimum Viable Product is **with the customer** and go from there. -- Never have the live site on your terminal unless you are entirely awake. -- If the customer says "it takes me 1 hour to do...", they mean it actually takes 4 hours -- Get actual deadlines in writing. Verify them with the customer throughout the project. -- No matter how small the project, always put it in Git -- Only work on the things you've agreed on with the customer. If they want the extras, they'll say so. -- If you patched anything, try to send that upstream. It shows familiarity with project to potential employers. - - -## Business - -- Always ask for double or more the rate you would get working full-time at a company -- Documentation, documentation, documentation -- If you think you offer $100/hr service, then CHARGE $100/hr service -- Automation, automation, automation - just keep your standard forms (quotes, bills) in Google Docs, have them do the number crunching for you. -- Don't do support - it's not worth the hassle, not worth the headache, not worth the money -- Just because they're your friend, doesn't mean you have to charge them less. -- Always have the hourly rate in your mind. Don't compromise. If they can't pay it, you don't want it. Really. -- Set a reputation for quality, not cost. -- Have a precise system for clocking your hours. Only give freebies for screw-ups. Easy work is still work. -- Don't have more than 2 gigs plus full-time - there is no room for balance after that. Mental well-being is more valuable than money. -- Don't bite off more than you can chew - if an opportunity comes along but you're too busy/tired, get the rest. There's always more opportunities. -- You *cannot* do real work in front of a television. Work, or watch TV. -- Neil Gaiman's rule: be easy to work with, make really good stuff, deliver on time (just 2 out of 3 is enough) -- A really good lawyer is essential to professional contracting. Interview several and find the right one. -- Make internal allies within the customer when you can. -- Try to resolve conflicts in person. Often a cup of coffee is enough to sort out issues. -- When firing a client, it is important that you do it in writing and mention which part of the contract has been violated. - - -## Contract - -- Set clear expectations and clear definitions. Put them in a contract. -- If the customer refuses to pay, don't appeal to emotion. Get a lawyer, instead. -- If the project changes, either amend the existing contract or settle up the existing contract and create a new one. -- In the contract, state non-failure to pay means inclusion of attorney costs if they lose lawsuit. -- A contract is in place to protect *both* parties. Negotiation makes it fair. -- Don't start work before you've signed a contract. You will lose critical leverage. -- Don't blindly accept the client's terms. Often they are just boilerplate, and sometimes just wrong. -- Don't back down on the important stuff: - - IP transfers on full payment (if they use your work before full payment, you can sue for that). - - A kill fee for project termination (amount the client will have to pay for an unreasonable termination of project - ensures no wasted time) - be sure to have multiple phases written in the contract. - - Liability (transferred after project acceptance by client) - -- Have the project deemed 'accepted' after the deliverable has been given for 5-10 business days -- Be specific and confident about money. Sound like you know what you're talking about, even when you don't. -- Have penalties after non-payment (net-d) \ No newline at end of file diff --git a/z_meta/hilarity.md b/z_meta/culture.md similarity index 54% rename from z_meta/hilarity.md rename to z_meta/culture.md index 8f89ea1..694b196 100644 --- a/z_meta/hilarity.md +++ b/z_meta/culture.md @@ -1,3 +1,41 @@ +# Abstraction Comics + +There's some webcomics that have a tidy way of explaining a concept. + +- [Nerdsniping (XKCD)](https://xkcd.com/356/) +- [Information half-life (Abstruse Goose)](https://abstrusegoose.com/531) + + +# Anonymity + + +# The Circle by Dave Eggers + + +## The Rights of Humans in a Digital Age + +- We must all have the right to anonymity +- Not every human activity can be measured +- The ceaseless pursuit of data to quantify the value of any endeavour is catastrophic to true understanding +- The barrier between public and private must remain unbreachable +- We must all have the right to disappear + + +# Privacy + +- [Office of the Privacy Commissioner of Canada](https://www.priv.gc.ca/en/) + + +## [Personal Information Protection and Electronic Documents Act (PIPEDA)](https://www.priv.gc.ca/en/privacy-topics/privacy-laws-in-canada/the-personal-information-protection-and-electronic-documents-act-pipeda/) + +Canadian guidelines + +- [10 Fair Information Principles](https://www.priv.gc.ca/en/privacy-topics/privacy-laws-in-canada/the-personal-information-protection-and-electronic-documents-act-pipeda/p_principle/) + + +# [GDPR](https://gdpr.eu/) + + # Hilarity @@ -42,4 +80,52 @@ > 19. Self-escrowable to enable authorities to capture kiddie-porn people and baddies but not the goodies ("but we'll only decode it with a court order, honest"). > 20. Not decryptable by exhaustive application of possible one time pads. > -> Due to the severity of the restrictions, if the password is entered incorrectly three (3) times at login time, you will be asked if you would like to pick a new one. \ No newline at end of file +> Due to the severity of the restrictions, if the password is entered incorrectly three (3) times at login time, you will be asked if you would like to pick a new one. + + +# Grim Meathook Future + + +## Greyball + +Uber created a program to deliberately avoid individuals/institutions critical of Uber + + + + +# Movies + +Good movies for the computer geek + +- Hackers +- The Net +- Sneakers +- Pirates of Silicon Valley +- Swordfish +- Johnny Mnemonic +- Freedom Downtime +- Tron +- 2001: A Space Odyssey +- Blade Runner +- War Games +- The Matrix + + +# Cyberpunk + + +## Books + +- Neuromancer by William Gibson +- Burning Chrome by William Gibson +- Simulacron-3 by Daniel F. Galouye + + +# code of conduct + + + + +# Retrocomputing + + diff --git a/z_meta/cyberpunk.md b/z_meta/cyberpunk.md deleted file mode 100644 index f1d3063..0000000 --- a/z_meta/cyberpunk.md +++ /dev/null @@ -1,8 +0,0 @@ -# Cyberpunk - - -## Books - -- Neuromancer by William Gibson -- Burning Chrome by William Gibson -- Simulacron-3 by Daniel F. Galouye \ No newline at end of file diff --git a/z_meta/employment.md b/z_meta/employment.md index 65d6166..75b3d57 100644 --- a/z_meta/employment.md +++ b/z_meta/employment.md @@ -45,4 +45,506 @@ - How is good work rewarded? - What do you do to ensure people don't burnout? -- What is the process for replacing/acquiring equipment? \ No newline at end of file +- What is the process for replacing/acquiring equipment? + + +# Outsourcing + + +## Tom Limoncelli + + + +> If you aren't familiar with the term "vertical integration" it is the MBA term for "if you want something done right, do it yourself." + +> Imagine trying to drive a car with someone else controlling the steering wheel. Now imagine that their incentives are perversely the opposite of yours. They get paid by how many turns they make. You get paid by how fast you get there. It just doesn't work. They control the wheel. + + +# Contracting advice + +Wisdom pulled from a variety of sources + + +## Technical + +- Always have the technology installed and comprehended before making estimates +- Don't reinvent the wheel. +- If the customer has given you full access to the site, straight up mirror it. Download everything and just change the configuration file that connects the database. +- When taking on a project, first write down all the steps necessary. Figure out what the Minimum Viable Product is **with the customer** and go from there. +- Never have the live site on your terminal unless you are entirely awake. +- If the customer says "it takes me 1 hour to do...", they mean it actually takes 4 hours +- Get actual deadlines in writing. Verify them with the customer throughout the project. +- No matter how small the project, always put it in Git +- Only work on the things you've agreed on with the customer. If they want the extras, they'll say so. +- If you patched anything, try to send that upstream. It shows familiarity with project to potential employers. + + +## Business + +- Always ask for double or more the rate you would get working full-time at a company +- Documentation, documentation, documentation +- If you think you offer $100/hr service, then CHARGE $100/hr service +- Automation, automation, automation - just keep your standard forms (quotes, bills) in Google Docs, have them do the number crunching for you. +- Don't do support - it's not worth the hassle, not worth the headache, not worth the money +- Just because they're your friend, doesn't mean you have to charge them less. +- Always have the hourly rate in your mind. Don't compromise. If they can't pay it, you don't want it. Really. +- Set a reputation for quality, not cost. +- Have a precise system for clocking your hours. Only give freebies for screw-ups. Easy work is still work. +- Don't have more than 2 gigs plus full-time - there is no room for balance after that. Mental well-being is more valuable than money. +- Don't bite off more than you can chew - if an opportunity comes along but you're too busy/tired, get the rest. There's always more opportunities. +- You *cannot* do real work in front of a television. Work, or watch TV. +- Neil Gaiman's rule: be easy to work with, make really good stuff, deliver on time (just 2 out of 3 is enough) +- A really good lawyer is essential to professional contracting. Interview several and find the right one. +- Make internal allies within the customer when you can. +- Try to resolve conflicts in person. Often a cup of coffee is enough to sort out issues. +- When firing a client, it is important that you do it in writing and mention which part of the contract has been violated. + + +## Contract + +- Set clear expectations and clear definitions. Put them in a contract. +- If the customer refuses to pay, don't appeal to emotion. Get a lawyer, instead. +- If the project changes, either amend the existing contract or settle up the existing contract and create a new one. +- In the contract, state non-failure to pay means inclusion of attorney costs if they lose lawsuit. +- A contract is in place to protect *both* parties. Negotiation makes it fair. +- Don't start work before you've signed a contract. You will lose critical leverage. +- Don't blindly accept the client's terms. Often they are just boilerplate, and sometimes just wrong. +- Don't back down on the important stuff: + - IP transfers on full payment (if they use your work before full payment, you can sue for that). + - A kill fee for project termination (amount the client will have to pay for an unreasonable termination of project - ensures no wasted time) - be sure to have multiple phases written in the contract. + - Liability (transferred after project acceptance by client) + +- Have the project deemed 'accepted' after the deliverable has been given for 5-10 business days +- Be specific and confident about money. Sound like you know what you're talking about, even when you don't. +- Have penalties after non-payment (net-d) + + +# Meetings + + +## Meeting timeline + + +### Start of the meeting + +- Give at least 30m notice, in addition to any extra time people might need to gather information +- Everything on the table, no surprises +- Don't start just before your lunch or before the end of the business day when people will be leaving +- Have an agenda with stated goals and a scheduled end time +- If you're going to use the projector or teleconferencing, come in 5m earlier than start time so you don't bungle the first critical minutes + + +### During the meeting + +- Don't marry your ideas - be open to suitable alternatives +- Keep a list of actionable items +- Be objective +- When it seems that a conversation is going into technical details best handled outside of the meeting, say so, try to get back to the agenda + + +### End of the meeting + +- At scheduled endtime, decide if you need to continue. Let people who need to leave go, and maybe take a 5 minute breather to clear your head. Set a new end time. +- Do a quick overview of the action items, confirm you've hit all agenda points. + + +## Meetings, Bloody Meetings + +1. plan - be precise about the objectives and why you need the meeting +2. inform - what people need to bring to the meeting +3. prepare - the logical sequence of items (prioritizing the important) +4. structure and control - present evidence first, then discuss without jumping around +5. summarize and record - write down the who/what of action items, decisions + + +# Managing + +- [The Manager as Debugger](http://www.elidedbranches.com/2015/11/the-manager-as-debugger.html) +- + + +## Does Management Matter? (paper) + + + +- factory operations + - regular maintenance and recording reasons for breakdowns + - standard procedures for operations + +- quality control + - quality problems by type + - formalizing procedures to address defects + +- inventory + - determining optimal inventory + +- human resources management + - performance based incentives + +- sales and order management + + +## Building A Learning Organization + + + +> Knowing how is partial knowledge; it is rooted in norms of behavior, standards of practice, and settings of equipment. Knowing why is more fundamental: it captures underlying cause-and-effect relationships and accommodates exceptions, adaptations, and unforeseen events. + +Deming's "Plan, Do, Check, Act" + + +### Peter Senge's 5 component technologies + +- systems thinking +- personal mastery +- mental models +- shared vision +- team learning + +> Most discussions of learning organizations finesse these issues. Their focus is high philosophy and grand themes, sweeping metaphors rather than the gritty details of practice. Three critical issues are left unresolved; yet each is essential for effective implementation. First is the question of meaning. We need a plausible, well-grounded definition of learning organizations; it must be actionable and easy to apply. Second is the question of management. We need clearer guidelines for practice, filled with operational advice rather than high aspirations. And third is the question of measurement. We need better tools for assessing an organization's rate and level of learning to ensure that gains have in fact been made. + + +## Delivering bad news + + + +- Start by listening. "How are you doing?" Don't go straight to business. +- Explore perceptions. "How do you think you're doing?" +- Legitimize emotions. Their feelings are valid. +- Don't let your own emotions cloud the message. + + +# Crucial Accountability by Patterson, Grenny, McMillan, Switzler, Maxfield + +How do I speak up about infractions so that dangerous behaviour is avoided + +Find a polite way to interject - positive deviance + + +## Know *what* convo to hold and *if* you should hold it + +If you find yourself having the same convo again and again, there's another, larger violation that needs to be addressed. + +".. [S]peed rarely leads to careful thought." + +> You have to distill the issue to a single sentence. Lengthy descriptions of violated expectations only obscure the real issue. If you can't reduce a violation to a clear sentence before you talk, the issue almost never becomes more understandable and focused as a conversation unfolds. + +- Content - 'You did x,y,z' +- Pattern - 'This is Nth occurrence' +- Relationship - 'This is putting a strain on our (work|friendship|marriage)' + +Do you actually know the intention? Don't leap to conclusions + + +# Crucial Conversations + +By: Kerry Patterson; Joseph Grenny; Ron McMillan; Al Switzler + + +## What's a crucial convo? + +- different opinions +- stakes are high +- emotions run strong + +The results of a crucial conversation have high impact on quality of life + +Given choices on approach, we can: + +- avoid them +- face them, handle poorly +- face them, handle well + +(I suspect there's actually a larger spectrum than 3 choices ;-) + +Crucial conversations are frequently spontaneous, catching you off-guard + +Common crucial conversations include: + +- Ending a relationship +- Talking to a coworker who behaves offensively or makes suggestive comments +- Asking a friend to repay a loan +- Giving the boss feedback about her behavior +- Approaching a boss who is breaking his own safety or quality policies +- Critiquing a colleague's work +- Asking a roommate to move out +- Resolving custody or visitation issues with an ex-spouse +- Dealing with a rebellious teen +- Talking to a team member who isn't keeping commitments +- Discussing problems with sexual intimacy +- Confronting a loved one about a substance abuse problem +- Talking to a colleague who is hoarding information or resources +- Giving an unfavorable performance review +- Asking in-laws to quit interfering +- Talking to a coworker about a personal hygiene problem + +"How can I be 100 percent honest with , and at the same time be 100 percent respectful?" + +> At the core of every successful conversation lies the free flow of relevant information. People openly and honestly express their opinions, share their feelings, and articulate their theories. They willingly and capably share their views, even when their ideas are controversial or unpopular. + +Pool of shared meaning -> everyone should feel comfortable adding to it + +Hints, sarcasm, caustic humor, innuendo, and looks of disgust are not effective sharing of meaning. + +Maintain your focus: + +- What are your motives? What do you actually want? +- Don't make an either/or choice - talk until you find another option. + +Killers of honest dialogue: + +- trying to "win" +- punishment +- keeping the peace (ie silence) + +When a conversation turns crucial, ask "What do I *really* want here?" + +> Also, as the conversation unfolds and you find yourself starting to, say, defer to the boss or give your spouse the cold shoulder, pay attention to what's happening to your objectives. Are you starting to change your goal to save face, avoid embarrassment, win, be right, or punish others? Here's the tricky part. Our motives usually change without any conscious thought on our part. When adrenaline does our thinking for us, our motives flow with the chemical tide. + +"We assume we have to choose between getting results and keeping a relationship. In our dumbed-down condition, we don't even consider the option of achieving both." + +Know what you want *and* what you don't want, ie want to voice concerns AND not hurt feelings. + +Watch for content *and* conditions + +You want to be alert for the moment a convo goes from routine to Crucial + +Signs that a conversation is about to get Crucial + +- physical signals (stomach gets tight, shoulders tense, hairs stand up) +- emotions (feel hurt, scared, angry) +- behaviour (raise voice, point a finger, become quiet) + +Look for safety problems. Safe conversations let the things that need to be said be said. Unsafe convos are ugly. + + +## Silence + +- masking (sarcasm, sugarcoating) + +- avoiding (steering away from sensitive subjects) + +- withdrawing (running away altogether) + +> Conversely, when people aren't involved, when they sit back quietly during touchy conversations, they're rarely committed to the final decision. Since their ideas remain in their heads and their opinions never make it into the pool, they end up quietly criticizing and passively resisting. Worse still, when others force their ideas into the pool, people have a harder time accepting the information. + + +## Violence + +- controlling (coercion, using directive questions) +- labeling (stereotyping) +- attacking + +> The best don't play games. Period. They know that in order to solve their problem, they'll need to talk about their problem---with no pretending, sugarcoating, or faking. So they do something completely different. They step out of the content of the conversation, make it safe, and then step back in. Once safety is restored, they can talk about nearly anything. + +> Remember the last time someone gave you difficult feedback and you didn't become defensive? Say a friend said some things to you that most people might get upset over. In order for this person to be able to deliver the delicate message, you must have believed he or she cared about you or about your goals and objectives. That means you trusted his or her purposes so you were willing to listen to some pretty tough feedback. + +> Crucial conversations often go awry not because others dislike the content of the conversation, but because they believe the content (even if it's delivered in a gentle way) suggests that you have a malicious intent. How can others feel safe when they believe you're out to harm them? Soon, every word out of your mouth is suspect. You can't utter a harmless "good morning" without others interpreting it in a negative way. + +> Consequently, the first condition of safety is Mutual Purpose. Mutual Purpose means that others perceive that you're working toward a common outcome in the conversation, that you care about their goals, interests, and values. And vice versa. You believe they care about yours. Consequently, Mutual Purpose is the entry condition of dialogue. Find a shared goal, and you have both a good reason and a healthy climate for talking. + +Here are two crucial questions to help us determine when Mutual Purpose is at risk: + +- Do others believe I care about their goals in this conversation? +- Do they trust my motives? + + > If your only reason for approaching the boss is to get what you want, the boss will hear you as critical and selfish---which is what you are. In contrast, if you try to see the other person's point of view, you can often find a way to draw the other person willingly into even very sensitive conversations. For example, if the boss's behavior is causing you to miss deadlines he cares about, or incur costs he frets over, or lose productivity that he worries about, then you're onto a possible Mutual Purpose. + + > Imagine raising the topic this way: "I've got some ideas for how I can be much more reliable and even reduce costs by a few thousand dollars in preparing the report each month. It's going to be a bit of a sensitive conversation---but I think it will help a great deal if we can talk about it." + + > The instant people perceive disrespect in a conversation, the interaction is no longer about the original purpose---it is now about defending dignity. + + > Telltale signs. To spot when respect is violated and safety takes a turn south, watch for signs that people are defending their dignity. Emotions are the key. When people feel disrespected, they become highly charged. Their emotions turn from fear to anger. Then they resort to pouting, name-calling, yelling, and making threats. Ask the following question to determine when Mutual Respect is at risk: Do others believe I respect them? + +Three good skills that the best dialogues use: + +- apologize +- contrast +- create a mutual purpose + +contrasting provides context, proportion, and can fix misunderstandings of scope or severity + +Agree to agree. Focus on your purpose, and be open to alternatives. Find the higher objective which you agree on. + + +## CRIB + +- Commit to seek Mutual Purpose +- Recognize the purpose behind the strategy +- Invent a Mutual Purpose +- Brainstorm New Strategies + +Don't treat your emotions as if they are the only valid response. + +See + Hear -> Tell a Story -> Feel -> Act + +> If we can find a way to control the stories we tell, by rethinking or retelling them, we can master our emotions and, therefore, master our crucial conversations. + +"Any set of facts can be used to tell an infinite number of stories." + +Expand your emotional vocabulary + +Question your feelings and stories - is it the right feeling? + +Don't confuse stories with facts + +Clever stories: + +- victim stories (exaggeration of own innocence) +- villain stories (overemphasize other's guilt/stupidity) +- helpless ('there's nothing I could do') + +watch for double standard with victim/villain + +clever stories can: + +- match reality (it does sometimes happen) +- get us off the hook (still partially responsible) +- keep us from acknowledging our own sellouts + +Sellouts: + +- You believe you should help someone, but don't. +- You believe you should apologize, but don't. +- You believe you should stay late to finish up on a commitment, but go home instead. +- You say yes when you know you should say no, then hope no one follows up to see if you keep your commitment. +- You believe you should talk to someone about concerns you have with him or her, but don't. +- You do less than your share and think you should acknowledge it, but say nothing knowing no one else will bring it up either. +- You believe you should listen respectfully to feedback, but become defensive instead. +- You see problems with a plan someone presents and think you should speak up, but don't. +- You fail to complete an assignment on time and believe you should let others know, but don't. +- You know you have information a coworker could use, but keep it to yourself. + +Clever stories omit crucial information about us, about others + +Broaching uncomfortable topics requires: + +- confidence +- humility +- skill + +STATE: + +- Share your facts +- Tell your story +- Ask for others' paths +- Talk tentatively +- Encourage testing + +Facts are the least controversial, and they are the most persuasive + +> When we start with shocking or offensive conclusions ("Quit groping me with your eyes!" or "I think we should declare bankruptcy"), we actually encourage others to tell Villain Stories about us. Since we've given them no facts to support our conclusion, they make up reasons we're saying these things. They're likely to believe we're either stupid or evil. +> +> So if your goal is to help others see how a reasonable, rational, and decent person could think what you're thinking, start with your facts. +> +> And if you aren't sure what your facts are (your story is absolutely filling your brain), take the time to think them through before you enter the crucial conversation. Take the time to sort out facts from conclusions. Gathering the facts is the homework required for crucial conversations. + +Always start with facts. "Facts lay the groundwork for all delicate conversations." + +"be willing to abandon or reshape your story as more information pours into the Pool of Shared Meaning." + +Soften the message, be tentative (not wimpy). + +Invite opposing views, and mean it. + +Don't launch into monologues. Avoid harsh, conclusive language. + +Hold to your belief, but be nice about it. + +Look for opportunities to be curious about others + +> When others are acting out their feelings and opinions through silence or violence, it's a good bet they're starting to feel the effects of adrenaline. Even if we do our best to safely and effectively respond to the other person's verbal attack, we still have to face up to the fact that it's going to take a little while for him or her to settle down. Say, for example, that a friend dumps out an ugly story and you treat it with respect and continue on with the conversation. Even if the two of you now share a similar view, it may seem like your friend is still pushing too hard. While it's natural to move quickly from one thought to the next, strong emotions take a while to subside. Once the chemicals that fuel emotions are released, they hang around in the bloodstream for a time---in some cases, long after thoughts have changed. + +Every sentence has a history - find out what's lead to this + + +## Disagreement + +Break the cycle, encourage other person to step away from their harsh feelings, anger + +Ask to get things rolling -> Mirror to confirm feelings -> Paraphrase to acknowledge the story -> Prime when you're getting nowhere + +> To keep ourselves from feeling nervous while exploring others' paths---no matter how different or wrong they seem---remember we're trying to understand their point of view, not necessarily agree with it or support it. Understanding doesn't equate with agreement. Sensitivity does equate to acquiescence. By taking steps to understand another person's Path to Action, we are promising that we'll accept their point of view. + +Agree -> Build -> Compare + +> Most arguments consist of battles over the 5 to 10 percent of the facts and stories that people disagree over. And while it's true that people eventually need to work through differences, you shouldn't start there. Start with an area of agreement. +> +> So here's the take-away. If you completely agree with the other person's path, say so and move on. Agree when you agree. Don't turn an agreement into an argument. + +Don't get caught up in trivial differences, making a mole hill into a mountain. Say "I agree," and then build. + +> If you agree with what has been said but the information is incomplete, build. Point out areas of agreement, and then add elements that were left out of the discussion. + +Compare your path with the other person, determine what they're trying to accomplish + + +## Decision making + +Dialogue is not decision making + +Before making a decision, decide how to decide + +Decision Making styles + +- Command (outside forces) +- Consult (1 person decides, fills pool) +- Vote (consensus with 2 or more options) +- Consensus (talk until everyone honestly agrees to one decision) + +Before making decisions: Who cares? Who knows? Who must agree? How many people is it worth involving? + +When making decisions: Who? Does what? By when? How will you follow up? If multiple people share a task, who's responsible? Spell out exact deliverables, no fuzziness. Use contrasting. Prototypes/examples are good. Write down the details of conclusions, decisions, and assignments. + +Don't get pulled into any one instance or your concern will seem trivial. Talk about overall pattern. + +> Look for those areas that are most grievous to you and might not be all that hard to talk about. Pick one element and work on it. Establish Mutual Purpose. Frame the conversation in a way that the other person will care about. + + +## Stress + +What is your Style under Stress? Your family? Coworkers? + + +## Trust + +Trust is not binary, there are degrees of trust + +Have a clear 'no surprises' rule, that folks should let you know of snags ASAP. + + +# The Five Dysfunctions of a Team by Patrick Lencioni + +- Inattention to results - status and ego +- Avoidance of accountability - low standards +- Lack of commitment - ambiguity +- Fear of conflict - artificial harmony +- Absence of trust - invulnerability + + +# Google Understanding Team Effectiveness + + + +> The researchers found that what really mattered was less about who is on the team, and more about how the team worked together. In order of importance: +> +> - Psychological safety: Psychological safety refers to an individual's perception of the consequences of taking an interpersonal risk or a belief that a team is safe for risk taking in the face of being seen as ignorant, incompetent, negative, or disruptive. In a team with high psychological safety, teammates feel safe to take risks around their team members. They feel confident that no one on the team will embarrass or punish anyone else for admitting a mistake, asking a question, or offering a new idea. +> +> - Dependability: On dependable teams, members reliably complete quality work on time (vs the opposite - shirking responsibilities). +> +> - Structure and clarity: An individual's understanding of job expectations, the process for fulfilling these expectations, and the consequences of one's performance are important for team effectiveness. Goals can be set at the individual or group level, and must be specific, challenging, and attainable. Google often uses Objectives and Key Results (OKRs) to help set and communicate short and long term goals. +> +> - Meaning: Finding a sense of purpose in either the work itself or the output is important for team effectiveness. The meaning of work is personal and can vary: financial security, supporting family, helping the team succeed, or self-expression for each individual, for example. +> +> - Impact: The results of one's work, the subjective judgement that your work is making a difference, is important for teams. Seeing that one's work is contributing to the organization's goals can help reveal impact. + +> The researchers also discovered which variables were not significantly connected with team effectiveness at Google: +> +> - Colocation of teammates (sitting together in the same office) +> - Consensus-driven decision making +> - Extroversion of team members +> - Individual performance of team members +> - Workload size +> - Seniority +> - Team size +> - Tenure diff --git a/z_meta/good_software_practices.md b/z_meta/good_software_practices.md deleted file mode 100644 index 72f8599..0000000 --- a/z_meta/good_software_practices.md +++ /dev/null @@ -1,127 +0,0 @@ -# Good Software Practices - - -## Don't reinvent the wheel - -The world does not need another XML parser. Use what's already been written and tested. Often what you think sucks only needs a few patches to be adequate. - - -## Code without a written plan is just asking for trouble - -When I hear someone brag that they've got the whole program in their head, I know it will turn out like garbage. Exceptions to this are rare. There's always something found in the process of writing the idea down that makes the program better, and it also becomes a form of documentation. - - -## Don't repeat yourself - -Try to remove duplication in code by refactoring, so that it's easier to extend and debug the program later on. - - -## Your build system should *never* be more than 1 step - -`configure && make && make install` should be the most complicated build setup you have. - -Get it to one-step-to-build - instant feedback is awesome, and the time saved will pay off when "I need a build for the customer in 5 minutes!" For that matter, have automated testing that the master always builds clean. - - -## Keep it simple - -I once replaced an elaborate Java-based build system with 2 shell scripts. Mine worked faster, better, and was simpler to read. - - -## Prototypes! - -A simple prototype done in a few hours can save a week's worth of speculation, and often you can plunder the prototype for technical insights and even code. - - -## Business rules and logic don't mix well - -Business rules will change. It's in your best interest to make them easily configurable (read: not compiled into the binary). Even better, make it simple enough that Bob in accounting can manage the rules. - - -## Code can be the best documentation - -Descriptive variables and functions are better than comments. When you actually need non-code documentation, make sure that the docs are automatically pulled together from the code (a la doxygen, etc.). - - -## Keep LOC down to keep bugs down - -Code Complete said that the industry average is 15-50 bugs per 1000 lines of code. By reducing the lines of code and keeping functions simple, your life will be much easier. - - -## ALWAYS validate your inputs - -Because 13-year-olds know enough to fuzz your text box. SQL injections are one of the most common bugs. - - -## Be correct first, then be fast. - -Debugging a fast program that's segfaulting is slow work... - - -## Always review your releases - -Code audits are a cheap way of ensuring quality (though they may not seem so at the time). Lost customers and lost time to troubleshooting problems are expensive. As well, keep metrics on defects from release to release, so that you can adjust practices as necessary. Use the "Infinite Hows" technique to examine release/deployment issues - deployment issues should be dealt with once, *permanently*. - - -## 1 hour of inspection can save up to 100 hours of related work - -IBM study found "each hour of inspection prevented about 100 hours of related work (testing and defect correction)" - - -## Testing - it's worth the effort - -When you learn a new language, learn how to test its code as early as possible. Time spent writing tests is rarely wasted. When you use test cases, you can refactor without (much) fear. When you need to debug quickly, having tests make a huge difference. - - -## It's easier to be secure when you bake it in at the start - -It sucks to break backwards compatibility, or worse, get caught with your pants down, because *someone* didn't bother with security when they hacked the program together. - - -## Stop with 'good enough' - -To keep from going crazy and spending too much time on irrelevant crap, set specific and quantitative goals for your project at the start. When you've met a goal, move on to the next one. - - -## Source control everything - -Seriously. Learn git. It'll take you just a couple hours, and you'll make it back in no time at all. - - -## Don't marry your framework - -A framework is a great way to ensure you don't reinvent the wheel, but if possible keep your business logic external to it. That way if something sexier comes along you're not fully invested in the old crap. Decoupling can also mean faster tests. - - -## Practice defensive programming - -Use assertions to ensure the state is correct, and use tests to simulate faults. - - -## A bad process will lead to lots of preventable headaches - -Take an active role in perfecting the process wherever you work. - - -## Nail the basic process to avoid certain failure - -- Do an analysis, capture the requirements, and create a design document -- Review the design - catch errors before the coding stage -- Code review -- Use automated code analysis -- Unit and component tests to stress-test and ensure edge cases are properly handled - - -## Velocity is a good measure of project health - -Good code allows you to fix bugs and add features quickly. - - -## Keep a bug database - -Even something as simple as BUGS.txt eliminates bus factor, and makes it easier to approach a project months later. - - -## Keep a changelog - -This doesn't have to be fancy, and there's [thoughtful guidelines you can follow](https://keepachangelog.com/en/1.0.0/). Just remember that this is for humans, not machines. \ No newline at end of file diff --git a/z_meta/good_videos.md b/z_meta/good_videos.md deleted file mode 100644 index 1971bba..0000000 --- a/z_meta/good_videos.md +++ /dev/null @@ -1,9 +0,0 @@ -# Good Videos - -This is a list of talks, etc. that are quite good - -- [Is it really "Complex"? Or did we just make it "Complicated" (Alan Kay)](https://www.youtube.com/watch?v=ubaX1Smg6pY) -- [17th Century Shipbuilding and Your Failed Software Project (Pete Cheslock)](http://confreaks.tv/videos/monitorama2014-monitorama-pdx-2014-lightning-talk-pete-cheslock) - -- Gerry Sussman - We Really Don't Know How To Compute -- Alan Kay - The Computer Revolution Hasn't Happened Yet \ No newline at end of file diff --git a/z_meta/grim_meathook_future.md b/z_meta/grim_meathook_future.md deleted file mode 100644 index 8cde3ec..0000000 --- a/z_meta/grim_meathook_future.md +++ /dev/null @@ -1,8 +0,0 @@ -# Grim Meathook Future - - -## Greyball - -Uber created a program to deliberately avoid individuals/institutions critical of Uber - - \ No newline at end of file diff --git a/z_meta/hypothesis-driven-delivery.md b/z_meta/hypothesis-driven-delivery.md deleted file mode 100644 index 72f7039..0000000 --- a/z_meta/hypothesis-driven-delivery.md +++ /dev/null @@ -1,10 +0,0 @@ -# Hypothesis-Driven Delivery - -``` -We believe that - [building this feature] - [for these people] - will achieve [this outcome]. -We will know we are successful when we see - [this signal from the market]. -``` \ No newline at end of file diff --git a/z_meta/index.md b/z_meta/index.md deleted file mode 100644 index 05ad2d4..0000000 --- a/z_meta/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -layout: index ---- - -These pages don't really fit into a technical space, but do contain bits of interesting facts and wisdom I've collected over the years. diff --git a/z_meta/jet_propulsion_laboratory.md b/z_meta/jet_propulsion_laboratory.md deleted file mode 100644 index 1fc5bc0..0000000 --- a/z_meta/jet_propulsion_laboratory.md +++ /dev/null @@ -1,8 +0,0 @@ -# Jet Propulsion Laboratory - - -## Pi - -3.141592653589793 - -From \ No newline at end of file diff --git a/z_meta/labour_market.md b/z_meta/labour_market.md deleted file mode 100644 index 9442141..0000000 --- a/z_meta/labour_market.md +++ /dev/null @@ -1,3 +0,0 @@ -# Labour Market - -- [Information and Communications Technology Council](https://www.ictc-ctic.ca) \ No newline at end of file diff --git a/z_meta/landing_pages.md b/z_meta/landing_pages.md deleted file mode 100644 index 0716ae1..0000000 --- a/z_meta/landing_pages.md +++ /dev/null @@ -1,10 +0,0 @@ -# Landing Pages - -- Have one conversion goal, and only one goal -- Point out why you're unique -- Use testimonial language -- Use simple language -- Paint a picture of the customer's pain -- Clear benefits -- Let customers know when to expect when they engage -- Set up analytics and event tracking - and actually use it \ No newline at end of file diff --git a/z_meta/laws_of_computing.md b/z_meta/laws_of_computing.md deleted file mode 100644 index 398f3ac..0000000 --- a/z_meta/laws_of_computing.md +++ /dev/null @@ -1,11 +0,0 @@ -# Laws of Computing - - -# Marick's Law - -In software, anything of the form "X's Law" is better understood by replacing the word "Law" with "Fervent Desire". - - -# Hanlon's Razor - -Don't attribute to malice that which is adequately explained by carelessness/ignorance/stupidity. \ No newline at end of file diff --git a/z_meta/life_stuff.md b/z_meta/life_stuff.md index 22063b6..f04b07c 100644 --- a/z_meta/life_stuff.md +++ b/z_meta/life_stuff.md @@ -8,6 +8,8 @@ - Memento mori - don't waste your life on stupid shit. + + # Coffee If coffee is sour, it's under-extracted. @@ -15,6 +17,8 @@ If coffee is sour, it's under-extracted. - + + # Sleep - Buy black-out curtains for your bedroom windows, and keep electronic lights to a bare minimum @@ -39,4 +43,96 @@ If coffee is sour, it's under-extracted. - [ACM Code of Ethics](https://www.acm.org/code-of-ethics) - [CIPS Code of Ethics](http://www.cips.ca/ethics) - [IEEE Computer Society Code of Ethics](https://www.computer.org/education/code-of-ethics) -- [Computer Professionals for Social Responsibility](http://cpsr.org/) \ No newline at end of file +- [Computer Professionals for Social Responsibility](http://cpsr.org/) + + +# Sysadmin Life + +- Write great documentation, not necessarily for others, but for your own sanity +- Assume that you typing something in is the weakest link in any chain. If it can be automated, it should be. + + +## Outside of work + +- [Sleep](#org810c0f9) is precious. Invest in a nice bed, keep light out of the room, keep [caffeinated substance consumption](#org99f1ab5) to a minimum. +- If you're on-call, assume things will break any minute. Shower, middle of a meal, while you're hanging a chandelier - the most inconvenient time. Schedule accordingly. + + +## Staying current + +- [League of Professional System Administrators](https://lopsa.org/) +- [System Administration Book of Knowledge](http://sabok.org/) + + +## Links + +- + + +# Public Speaking + +- Don't make hesitation noises ("ummm"), just pause +- Rotate eye contact between 3 people +- Avoid the podium +- Use gestures. Don't fidget +- Don't read from notes + + +# Canada-specific resources + +- [Innovation, Science and Economic Development Canada](http://www.ic.gc.ca) +- [Canada Intellectual Property Office](http://www.ic.gc.ca/eic/site/cipointernet-internetopic.nsf/eng/home) +- [Canadian whistle-blower laws](http://www.canadianlawsite.ca/whistle-blower.htm) +- [Canada Labour Code](https://laws-lois.justice.gc.ca/eng/acts/L-2/) +- [Occupational Health and Safety](https://www.canada.ca/en/health-canada/services/environmental-workplace-health/occupational-health-safety.html) +- [International Development Research Centre](https://www.idrc.ca/) + + +# Labour Market + +- [Information and Communications Technology Council](https://www.ictc-ctic.ca) + + +# Skill Aggregation + + +## level 1: beginner + +- Little or no previous experience +- Doesn't want to learn: wants to accomplish a goal +- No discretionary judgement +- Rigid adherence to rules + + +## Level 2: Advanced Beginner + +- Starts trying tasks on their own +- Has difficulty troubleshooting +- Wants information fast +- Can place some advice in context required +- Uses guidelines, but without holistic understanding + + +## Level 3: Competent + +- Develops conceptual models +- Troubleshoots on their own +- Seeks out expert advice +- Sees actions at least partially in terms of long-term plans and goals + + +## Level 4: Proficient + +- Guided by maxims applied to the current situation +- Sees situations holistically +- Will self-correct based on previous performance +- Learns from the experience of others +- Frustrated by oversimplified information + + +## Level 5: Expert + +- No longer relies on rules, guidelines, or maxims +- Works primarily from intuition +- Analytic approaches only used in novel situations or when problems occur +- When forced to follow set rules, performance is degraded diff --git a/z_meta/managing.md b/z_meta/managing.md deleted file mode 100644 index 217ac1d..0000000 --- a/z_meta/managing.md +++ /dev/null @@ -1,391 +0,0 @@ -# Managing - -- [The Manager as Debugger](http://www.elidedbranches.com/2015/11/the-manager-as-debugger.html) -- - - -## Does Management Matter? (paper) - - - -- factory operations - - regular maintenance and recording reasons for breakdowns - - standard procedures for operations - -- quality control - - quality problems by type - - formalizing procedures to address defects - -- inventory - - determining optimal inventory - -- human resources management - - performance based incentives - -- sales and order management - - -## Building A Learning Organization - - - -> Knowing how is partial knowledge; it is rooted in norms of behavior, standards of practice, and settings of equipment. Knowing why is more fundamental: it captures underlying cause-and-effect relationships and accommodates exceptions, adaptations, and unforeseen events. - -Deming's "Plan, Do, Check, Act" - - -### Peter Senge's 5 component technologies - -- systems thinking -- personal mastery -- mental models -- shared vision -- team learning - -> Most discussions of learning organizations finesse these issues. Their focus is high philosophy and grand themes, sweeping metaphors rather than the gritty details of practice. Three critical issues are left unresolved; yet each is essential for effective implementation. First is the question of meaning. We need a plausible, well-grounded definition of learning organizations; it must be actionable and easy to apply. Second is the question of management. We need clearer guidelines for practice, filled with operational advice rather than high aspirations. And third is the question of measurement. We need better tools for assessing an organization's rate and level of learning to ensure that gains have in fact been made. - - -## Delivering bad news - - - -- Start by listening. "How are you doing?" Don't go straight to business. -- Explore perceptions. "How do you think you're doing?" -- Legitimize emotions. Their feelings are valid. -- Don't let your own emotions cloud the message. - - -# Crucial Accountability by Patterson, Grenny, McMillan, Switzler, Maxfield - -How do I speak up about infractions so that dangerous behaviour is avoided - -Find a polite way to interject - positive deviance - - -## Know *what* convo to hold and *if* you should hold it - -If you find yourself having the same convo again and again, there's another, larger violation that needs to be addressed. - -".. [S]peed rarely leads to careful thought." - -> You have to distill the issue to a single sentence. Lengthy descriptions of violated expectations only obscure the real issue. If you can't reduce a violation to a clear sentence before you talk, the issue almost never becomes more understandable and focused as a conversation unfolds. - -- Content - 'You did x,y,z' -- Pattern - 'This is Nth occurrence' -- Relationship - 'This is putting a strain on our (work|friendship|marriage)' - -Do you actually know the intention? Don't leap to conclusions - - -# Crucial Conversations - -By: Kerry Patterson; Joseph Grenny; Ron McMillan; Al Switzler - - -## What's a crucial convo? - -- different opinions -- stakes are high -- emotions run strong - -The results of a crucial conversation have high impact on quality of life - -Given choices on approach, we can: - -- avoid them -- face them, handle poorly -- face them, handle well - -(I suspect there's actually a larger spectrum than 3 choices ;-) - -Crucial conversations are frequently spontaneous, catching you off-guard - -Common crucial conversations include: - -- Ending a relationship -- Talking to a coworker who behaves offensively or makes suggestive comments -- Asking a friend to repay a loan -- Giving the boss feedback about her behavior -- Approaching a boss who is breaking his own safety or quality policies -- Critiquing a colleague's work -- Asking a roommate to move out -- Resolving custody or visitation issues with an ex-spouse -- Dealing with a rebellious teen -- Talking to a team member who isn't keeping commitments -- Discussing problems with sexual intimacy -- Confronting a loved one about a substance abuse problem -- Talking to a colleague who is hoarding information or resources -- Giving an unfavorable performance review -- Asking in-laws to quit interfering -- Talking to a coworker about a personal hygiene problem - -"How can I be 100 percent honest with , and at the same time be 100 percent respectful?" - -> At the core of every successful conversation lies the free flow of relevant information. People openly and honestly express their opinions, share their feelings, and articulate their theories. They willingly and capably share their views, even when their ideas are controversial or unpopular. - -Pool of shared meaning -> everyone should feel comfortable adding to it - -Hints, sarcasm, caustic humor, innuendo, and looks of disgust are not effective sharing of meaning. - -Maintain your focus: - -- What are your motives? What do you actually want? -- Don't make an either/or choice - talk until you find another option. - -Killers of honest dialogue: - -- trying to "win" -- punishment -- keeping the peace (ie silence) - -When a conversation turns crucial, ask "What do I *really* want here?" - -> Also, as the conversation unfolds and you find yourself starting to, say, defer to the boss or give your spouse the cold shoulder, pay attention to what's happening to your objectives. Are you starting to change your goal to save face, avoid embarrassment, win, be right, or punish others? Here's the tricky part. Our motives usually change without any conscious thought on our part. When adrenaline does our thinking for us, our motives flow with the chemical tide. - -"We assume we have to choose between getting results and keeping a relationship. In our dumbed-down condition, we don't even consider the option of achieving both." - -Know what you want *and* what you don't want, ie want to voice concerns AND not hurt feelings. - -Watch for content *and* conditions - -You want to be alert for the moment a convo goes from routine to Crucial - -Signs that a conversation is about to get Crucial - -- physical signals (stomach gets tight, shoulders tense, hairs stand up) -- emotions (feel hurt, scared, angry) -- behaviour (raise voice, point a finger, become quiet) - -Look for safety problems. Safe conversations let the things that need to be said be said. Unsafe convos are ugly. - - -## Silence - -- masking (sarcasm, sugarcoating) - -- avoiding (steering away from sensitive subjects) - -- withdrawing (running away altogether) - -> Conversely, when people aren't involved, when they sit back quietly during touchy conversations, they're rarely committed to the final decision. Since their ideas remain in their heads and their opinions never make it into the pool, they end up quietly criticizing and passively resisting. Worse still, when others force their ideas into the pool, people have a harder time accepting the information. - - -## Violence - -- controlling (coercion, using directive questions) -- labeling (stereotyping) -- attacking - -> The best don't play games. Period. They know that in order to solve their problem, they'll need to talk about their problem---with no pretending, sugarcoating, or faking. So they do something completely different. They step out of the content of the conversation, make it safe, and then step back in. Once safety is restored, they can talk about nearly anything. - -> Remember the last time someone gave you difficult feedback and you didn't become defensive? Say a friend said some things to you that most people might get upset over. In order for this person to be able to deliver the delicate message, you must have believed he or she cared about you or about your goals and objectives. That means you trusted his or her purposes so you were willing to listen to some pretty tough feedback. - -> Crucial conversations often go awry not because others dislike the content of the conversation, but because they believe the content (even if it's delivered in a gentle way) suggests that you have a malicious intent. How can others feel safe when they believe you're out to harm them? Soon, every word out of your mouth is suspect. You can't utter a harmless "good morning" without others interpreting it in a negative way. - -> Consequently, the first condition of safety is Mutual Purpose. Mutual Purpose means that others perceive that you're working toward a common outcome in the conversation, that you care about their goals, interests, and values. And vice versa. You believe they care about yours. Consequently, Mutual Purpose is the entry condition of dialogue. Find a shared goal, and you have both a good reason and a healthy climate for talking. - -Here are two crucial questions to help us determine when Mutual Purpose is at risk: - -- Do others believe I care about their goals in this conversation? -- Do they trust my motives? - - > If your only reason for approaching the boss is to get what you want, the boss will hear you as critical and selfish---which is what you are. In contrast, if you try to see the other person's point of view, you can often find a way to draw the other person willingly into even very sensitive conversations. For example, if the boss's behavior is causing you to miss deadlines he cares about, or incur costs he frets over, or lose productivity that he worries about, then you're onto a possible Mutual Purpose. - - > Imagine raising the topic this way: "I've got some ideas for how I can be much more reliable and even reduce costs by a few thousand dollars in preparing the report each month. It's going to be a bit of a sensitive conversation---but I think it will help a great deal if we can talk about it." - - > The instant people perceive disrespect in a conversation, the interaction is no longer about the original purpose---it is now about defending dignity. - - > Telltale signs. To spot when respect is violated and safety takes a turn south, watch for signs that people are defending their dignity. Emotions are the key. When people feel disrespected, they become highly charged. Their emotions turn from fear to anger. Then they resort to pouting, name-calling, yelling, and making threats. Ask the following question to determine when Mutual Respect is at risk: Do others believe I respect them? - -Three good skills that the best dialogues use: - -- apologize -- contrast -- create a mutual purpose - -contrasting provides context, proportion, and can fix misunderstandings of scope or severity - -Agree to agree. Focus on your purpose, and be open to alternatives. Find the higher objective which you agree on. - - -## CRIB - -- Commit to seek Mutual Purpose -- Recognize the purpose behind the strategy -- Invent a Mutual Purpose -- Brainstorm New Strategies - -Don't treat your emotions as if they are the only valid response. - -See + Hear -> Tell a Story -> Feel -> Act - -> If we can find a way to control the stories we tell, by rethinking or retelling them, we can master our emotions and, therefore, master our crucial conversations. - -"Any set of facts can be used to tell an infinite number of stories." - -Expand your emotional vocabulary - -Question your feelings and stories - is it the right feeling? - -Don't confuse stories with facts - -Clever stories: - -- victim stories (exaggeration of own innocence) -- villain stories (overemphasize other's guilt/stupidity) -- helpless ('there's nothing I could do') - -watch for double standard with victim/villain - -clever stories can: - -- match reality (it does sometimes happen) -- get us off the hook (still partially responsible) -- keep us from acknowledging our own sellouts - -Sellouts: - -- You believe you should help someone, but don't. -- You believe you should apologize, but don't. -- You believe you should stay late to finish up on a commitment, but go home instead. -- You say yes when you know you should say no, then hope no one follows up to see if you keep your commitment. -- You believe you should talk to someone about concerns you have with him or her, but don't. -- You do less than your share and think you should acknowledge it, but say nothing knowing no one else will bring it up either. -- You believe you should listen respectfully to feedback, but become defensive instead. -- You see problems with a plan someone presents and think you should speak up, but don't. -- You fail to complete an assignment on time and believe you should let others know, but don't. -- You know you have information a coworker could use, but keep it to yourself. - -Clever stories omit crucial information about us, about others - -Broaching uncomfortable topics requires: - -- confidence -- humility -- skill - -STATE: - -- Share your facts -- Tell your story -- Ask for others' paths -- Talk tentatively -- Encourage testing - -Facts are the least controversial, and they are the most persuasive - -> When we start with shocking or offensive conclusions ("Quit groping me with your eyes!" or "I think we should declare bankruptcy"), we actually encourage others to tell Villain Stories about us. Since we've given them no facts to support our conclusion, they make up reasons we're saying these things. They're likely to believe we're either stupid or evil. -> -> So if your goal is to help others see how a reasonable, rational, and decent person could think what you're thinking, start with your facts. -> -> And if you aren't sure what your facts are (your story is absolutely filling your brain), take the time to think them through before you enter the crucial conversation. Take the time to sort out facts from conclusions. Gathering the facts is the homework required for crucial conversations. - -Always start with facts. "Facts lay the groundwork for all delicate conversations." - -"be willing to abandon or reshape your story as more information pours into the Pool of Shared Meaning." - -Soften the message, be tentative (not wimpy). - -Invite opposing views, and mean it. - -Don't launch into monologues. Avoid harsh, conclusive language. - -Hold to your belief, but be nice about it. - -Look for opportunities to be curious about others - -> When others are acting out their feelings and opinions through silence or violence, it's a good bet they're starting to feel the effects of adrenaline. Even if we do our best to safely and effectively respond to the other person's verbal attack, we still have to face up to the fact that it's going to take a little while for him or her to settle down. Say, for example, that a friend dumps out an ugly story and you treat it with respect and continue on with the conversation. Even if the two of you now share a similar view, it may seem like your friend is still pushing too hard. While it's natural to move quickly from one thought to the next, strong emotions take a while to subside. Once the chemicals that fuel emotions are released, they hang around in the bloodstream for a time---in some cases, long after thoughts have changed. - -Every sentence has a history - find out what's lead to this - - -## Disagreement - -Break the cycle, encourage other person to step away from their harsh feelings, anger - -Ask to get things rolling -> Mirror to confirm feelings -> Paraphrase to acknowledge the story -> Prime when you're getting nowhere - -> To keep ourselves from feeling nervous while exploring others' paths---no matter how different or wrong they seem---remember we're trying to understand their point of view, not necessarily agree with it or support it. Understanding doesn't equate with agreement. Sensitivity does equate to acquiescence. By taking steps to understand another person's Path to Action, we are promising that we'll accept their point of view. - -Agree -> Build -> Compare - -> Most arguments consist of battles over the 5 to 10 percent of the facts and stories that people disagree over. And while it's true that people eventually need to work through differences, you shouldn't start there. Start with an area of agreement. -> -> So here's the take-away. If you completely agree with the other person's path, say so and move on. Agree when you agree. Don't turn an agreement into an argument. - -Don't get caught up in trivial differences, making a mole hill into a mountain. Say "I agree," and then build. - -> If you agree with what has been said but the information is incomplete, build. Point out areas of agreement, and then add elements that were left out of the discussion. - -Compare your path with the other person, determine what they're trying to accomplish - - -## Decision making - -Dialogue is not decision making - -Before making a decision, decide how to decide - -Decision Making styles - -- Command (outside forces) -- Consult (1 person decides, fills pool) -- Vote (consensus with 2 or more options) -- Consensus (talk until everyone honestly agrees to one decision) - -Before making decisions: Who cares? Who knows? Who must agree? How many people is it worth involving? - -When making decisions: Who? Does what? By when? How will you follow up? If multiple people share a task, who's responsible? Spell out exact deliverables, no fuzziness. Use contrasting. Prototypes/examples are good. Write down the details of conclusions, decisions, and assignments. - -Don't get pulled into any one instance or your concern will seem trivial. Talk about overall pattern. - -> Look for those areas that are most grievous to you and might not be all that hard to talk about. Pick one element and work on it. Establish Mutual Purpose. Frame the conversation in a way that the other person will care about. - - -## Stress - -What is your Style under Stress? Your family? Coworkers? - - -## Trust - -Trust is not binary, there are degrees of trust - -Have a clear 'no surprises' rule, that folks should let you know of snags ASAP. - - -# The Five Dysfunctions of a Team by Patrick Lencioni - -- Inattention to results - status and ego -- Avoidance of accountability - low standards -- Lack of commitment - ambiguity -- Fear of conflict - artificial harmony -- Absence of trust - invulnerability - - -# Google Understanding Team Effectiveness - - - -> The researchers found that what really mattered was less about who is on the team, and more about how the team worked together. In order of importance: -> -> - Psychological safety: Psychological safety refers to an individual's perception of the consequences of taking an interpersonal risk or a belief that a team is safe for risk taking in the face of being seen as ignorant, incompetent, negative, or disruptive. In a team with high psychological safety, teammates feel safe to take risks around their team members. They feel confident that no one on the team will embarrass or punish anyone else for admitting a mistake, asking a question, or offering a new idea. -> -> - Dependability: On dependable teams, members reliably complete quality work on time (vs the opposite - shirking responsibilities). -> -> - Structure and clarity: An individual's understanding of job expectations, the process for fulfilling these expectations, and the consequences of one's performance are important for team effectiveness. Goals can be set at the individual or group level, and must be specific, challenging, and attainable. Google often uses Objectives and Key Results (OKRs) to help set and communicate short and long term goals. -> -> - Meaning: Finding a sense of purpose in either the work itself or the output is important for team effectiveness. The meaning of work is personal and can vary: financial security, supporting family, helping the team succeed, or self-expression for each individual, for example. -> -> - Impact: The results of one's work, the subjective judgement that your work is making a difference, is important for teams. Seeing that one's work is contributing to the organization's goals can help reveal impact. - -> The researchers also discovered which variables were not significantly connected with team effectiveness at Google: -> -> - Colocation of teammates (sitting together in the same office) -> - Consensus-driven decision making -> - Extroversion of team members -> - Individual performance of team members -> - Workload size -> - Seniority -> - Team size -> - Tenure \ No newline at end of file diff --git a/z_meta/meetings.md b/z_meta/meetings.md deleted file mode 100644 index 0032d84..0000000 --- a/z_meta/meetings.md +++ /dev/null @@ -1,36 +0,0 @@ -# Meetings - - -## Meeting timeline - - -### Start of the meeting - -- Give at least 30m notice, in addition to any extra time people might need to gather information -- Everything on the table, no surprises -- Don't start just before your lunch or before the end of the business day when people will be leaving -- Have an agenda with stated goals and a scheduled end time -- If you're going to use the projector or teleconferencing, come in 5m earlier than start time so you don't bungle the first critical minutes - - -### During the meeting - -- Don't marry your ideas - be open to suitable alternatives -- Keep a list of actionable items -- Be objective -- When it seems that a conversation is going into technical details best handled outside of the meeting, say so, try to get back to the agenda - - -### End of the meeting - -- At scheduled endtime, decide if you need to continue. Let people who need to leave go, and maybe take a 5 minute breather to clear your head. Set a new end time. -- Do a quick overview of the action items, confirm you've hit all agenda points. - - -## Meetings, Bloody Meetings - -1. plan - be precise about the objectives and why you need the meeting -2. inform - what people need to bring to the meeting -3. prepare - the logical sequence of items (prioritizing the important) -4. structure and control - present evidence first, then discuss without jumping around -5. summarize and record - write down the who/what of action items, decisions \ No newline at end of file diff --git a/z_meta/movies.md b/z_meta/movies.md deleted file mode 100644 index f032118..0000000 --- a/z_meta/movies.md +++ /dev/null @@ -1,16 +0,0 @@ -# Movies - -Good movies for the computer geek - -- Hackers -- The Net -- Sneakers -- Pirates of Silicon Valley -- Swordfish -- Johnny Mnemonic -- Freedom Downtime -- Tron -- 2001: A Space Odyssey -- Blade Runner -- War Games -- The Matrix \ No newline at end of file diff --git a/z_meta/outsourcing.md b/z_meta/outsourcing.md deleted file mode 100644 index 726de52..0000000 --- a/z_meta/outsourcing.md +++ /dev/null @@ -1,10 +0,0 @@ -# Outsourcing - - -## Tom Limoncelli - - - -> If you aren't familiar with the term "vertical integration" it is the MBA term for "if you want something done right, do it yourself." - -> Imagine trying to drive a car with someone else controlling the steering wheel. Now imagine that their incentives are perversely the opposite of yours. They get paid by how many turns they make. You get paid by how fast you get there. It just doesn't work. They control the wheel. \ No newline at end of file diff --git a/z_meta/personal_information_management.md b/z_meta/personal_information_management.md index dea9547..9aaa8ca 100644 --- a/z_meta/personal_information_management.md +++ b/z_meta/personal_information_management.md @@ -58,4 +58,4 @@ In the creation of a project, does how we categorize and file drive the success # Resources -- Keeping Found Things Found: The Study and Practice of Personal Information Management by William Jones \ No newline at end of file +- Keeping Found Things Found: The Study and Practice of Personal Information Management by William Jones diff --git a/z_meta/practice_programming.md b/z_meta/practice_programming.md deleted file mode 100644 index de6bd16..0000000 --- a/z_meta/practice_programming.md +++ /dev/null @@ -1,32 +0,0 @@ -# Practice programming - - - - -## Puzzles - -- -- [Project Euler](http://projecteuler.net/) -- -- -- -- -- -- -- [Regex Golf](https://alf.nu/RegexGolf) - - -## Competitions - -- -- -- -- -- (September) -- - - -## Problems - -- Write a program to do the pop count of a byte -- Write a program to check a string for duplicate characters \ No newline at end of file diff --git a/z_meta/privacy.md b/z_meta/privacy.md deleted file mode 100644 index a1c32dc..0000000 --- a/z_meta/privacy.md +++ /dev/null @@ -1,13 +0,0 @@ -# Privacy - -- [Office of the Privacy Commissioner of Canada](https://www.priv.gc.ca/en/) - - -## [Personal Information Protection and Electronic Documents Act (PIPEDA)](https://www.priv.gc.ca/en/privacy-topics/privacy-laws-in-canada/the-personal-information-protection-and-electronic-documents-act-pipeda/) - -Canadian guidelines - -- [10 Fair Information Principles](https://www.priv.gc.ca/en/privacy-topics/privacy-laws-in-canada/the-personal-information-protection-and-electronic-documents-act-pipeda/p_principle/) - - -# [GDPR](https://gdpr.eu/) \ No newline at end of file diff --git a/z_meta/productivity.md b/z_meta/productivity.md index e435683..ea91b2d 100644 --- a/z_meta/productivity.md +++ b/z_meta/productivity.md @@ -1,5 +1,5 @@ -# Productivity +# Productivity # General life hacks @@ -144,3 +144,15 @@ Work Right trumps finding the Right Work - Desk clear of clutter - Necessary stationary within reach - Lots of monitor space + + +# Working from Home + +- Take regular breaks +- No social media during working hours +- Get in regular exercise +- Have timelines for tasks +- Wear your regular work clothes +- Set an alarm for end of day, and respect it +- Have a dedicated work space +- Socialize outside of work, don't become a hermit diff --git a/z_meta/public_speaking.md b/z_meta/public_speaking.md deleted file mode 100644 index cc65aa0..0000000 --- a/z_meta/public_speaking.md +++ /dev/null @@ -1,7 +0,0 @@ -# Public Speaking - -- Don't make hesitation noises ("ummm"), just pause -- Rotate eye contact between 3 people -- Avoid the podium -- Use gestures. Don't fidget -- Don't read from notes \ No newline at end of file diff --git a/z_meta/reliability-centered_maintenance.md b/z_meta/reliability-centered_maintenance.md deleted file mode 100644 index 45ff9b6..0000000 --- a/z_meta/reliability-centered_maintenance.md +++ /dev/null @@ -1,9 +0,0 @@ -# Reliability-Centered Maintenance - -1. What is the item supposed to do and its associated performance standards? -2. In what ways can it fail to provide the required functions? -3. What are the events that cause each failure? -4. What happens when each failure occurs? -5. In what way does each failure matter? -6. What systematic task can be performed proactively to prevent, or to diminish to a satisfactory degree, the consequences of the failure? -7. What must be done if a suitable preventive task cannot be found? \ No newline at end of file diff --git a/z_meta/retrocomputing.md b/z_meta/retrocomputing.md deleted file mode 100644 index c1489b0..0000000 --- a/z_meta/retrocomputing.md +++ /dev/null @@ -1,3 +0,0 @@ -# Retrocomputing - - \ No newline at end of file diff --git a/z_meta/running_a_business.md b/z_meta/running_a_business.md index e51ed63..77c238c 100644 --- a/z_meta/running_a_business.md +++ b/z_meta/running_a_business.md @@ -204,4 +204,16 @@ Answer support queries quickly. Good customer service can disarm a customer. # Selling software -Customers want *benefits*, not features. Users do not have a "software" problem \ No newline at end of file +Customers want *benefits*, not features. Users do not have a "software" problem + + +# Landing Pages + +- Have one conversion goal, and only one goal +- Point out why you're unique +- Use testimonial language +- Use simple language +- Paint a picture of the customer's pain +- Clear benefits +- Let customers know when to expect when they engage +- Set up analytics and event tracking - and actually use it diff --git a/z_meta/skill_aggregation.md b/z_meta/skill_aggregation.md deleted file mode 100644 index 7dcf396..0000000 --- a/z_meta/skill_aggregation.md +++ /dev/null @@ -1,43 +0,0 @@ -# Skill Aggregation - - -## level 1: beginner - -- Little or no previous experience -- Doesn't want to learn: wants to accomplish a goal -- No discretionary judgement -- Rigid adherence to rules - - -## Level 2: Advanced Beginner - -- Starts trying tasks on their own -- Has difficulty troubleshooting -- Wants information fast -- Can place some advice in context required -- Uses guidelines, but without holistic understanding - - -## Level 3: Competent - -- Develops conceptual models -- Troubleshoots on their own -- Seeks out expert advice -- Sees actions at least partially in terms of long-term plans and goals - - -## Level 4: Proficient - -- Guided by maxims applied to the current situation -- Sees situations holistically -- Will self-correct based on previous performance -- Learns from the experience of others -- Frustrated by oversimplified information - - -## Level 5: Expert - -- No longer relies on rules, guidelines, or maxims -- Works primarily from intuition -- Analytic approaches only used in novel situations or when problems occur -- When forced to follow set rules, performance is degraded \ No newline at end of file diff --git a/z_meta/software_bugs.md b/z_meta/software_bugs.md deleted file mode 100644 index 9d66b1d..0000000 --- a/z_meta/software_bugs.md +++ /dev/null @@ -1,83 +0,0 @@ -# Software bugs - - -## Design Bugs - -- Don't Repeat Yourself violation -- Bad API usage -- Using deprecated functions -- Incorrect variable manipulation -- Incorrect regular expression use -- Incorrect protocol implementation -- Unauthorized user access -- Conceptual Error -- Incorrect documentation -- Incorrect return value -- Incorrect database query -- Incorrect business rules - - -## UI Bugs - -- Missing/bad information -- Insufficient performance -- Inappropriate error message -- Expectation failure - - -## Code Bugs - -- Syntax error -- Off-by-one -- Division-by-zero -- Loss of arithmetic precision -- Injection attack -- Overflow -- Underflow -- Infinite loop -- Uninitialized variable -- Incorrect initialization of variable -- Resource leak -- Excessive recursion -- Null pointer dereference -- Race condition -- Doesn't return memory when finished -- incorrect data type handling -- Incorrect file handling - - -## Testing Errors - -- Did not provide steps to reproduce -- Misunderstanding of documentation -- Failed to notice or report problem -- Failed to run automated tests first -- Failure to verify fixes - - -# Time bugs - -[Wikipedia list of time bugs](https://en.wikipedia.org/wiki/Time_formatting_and_storage_bugs) - - -## TOPS-10 - -Has a clock for [1964-01-01 Wed] to [1975-01-04 Sat]. It was given another 3 bits to go to [2052-02-01 Thu], but this crept into other data structures in use causing weird bugs - - -## NTP overflow - - -## Unix 32-bit - -2038 - - -## World Computer Corporation - -2028 - - -## GPS epoch - -Last was in 2019 - happens every 1024 weeks \ No newline at end of file diff --git a/z_meta/software_disasters.md b/z_meta/software_disasters.md deleted file mode 100644 index 95d3b4c..0000000 --- a/z_meta/software_disasters.md +++ /dev/null @@ -1,80 +0,0 @@ -# Software Disasters - -This is a list of software disasters where bugs had real-world repercussions beyond typical annoyance. - - -## Mariner 1 rocket - -Transcription mistake sent rocket off-course - - -## Hartford Coliseum Collapse - -CAD software didn't take into account wet snow - - -## Therac-25 - -Race condition gave lethal doses of radiation - - -## 1983 Soviet early-warning ballistic detection system - -Software did not account for false detections from clouds, nearly started WW3 - - -## Knight Capital Trading glitch - -Insufficient cleanup of program artifacts, lack of testing, and lack of monitoring led to $440 million loss in 30 minutes. - - -## 1990 AT&T Outage - -Single line of code knocked out a single switch, shuts down national phone network - - -## 1991 Patriot system - -Miscalculation of trajectory because of rounding error - - -## Pentium FPU (f00f bug) - -Floating point instruction halts processor - -- -- - - -## Cyrix Coma bug - -Unprivileged instructions send processor into infinite loop, requiring reboot - - - - -## Arianne 5 - -64-bit to 16-bit conversion, causing an overflow that knocked out the guidance system. Backup system had identical problem. - - -## Y2K bug - -Shortening year to two digits causes overflow at turn of century - - -## 2038 bug - -32-bit `time_t` overflows in year 2038 - - -## Mars Orbiter - -Mismatch of metric and imperial measurements puts orbiter wildly off-course. - - -## Virtual Case File - -Less a case of any one bug, and more program mismanagement. $170 million spent before program scrapped. A case study in why following software engineering best practices matters. - - \ No newline at end of file diff --git a/z_meta/software_engineering.md b/z_meta/software_engineering.md index e259d67..e0ac807 100644 --- a/z_meta/software_engineering.md +++ b/z_meta/software_engineering.md @@ -1,22 +1,19 @@ -# Software Engineering +# Bodies of knowledge -## Bodies of knowledge - - -### IEEE SWEBOK +## IEEE SWEBOK ISO created the [Software Engineering Body of Knowledge](https://ieeecs-media.computer.org/media/education/swebok/swebok-v3.pdf), which can be used to determine gaps in software knowledge. -### Australian Computer Society +## Australian Computer Society -### SFIA +## SFIA Skills Framework for the Information Age (SFIA) promotes [existing BoKs](https://sfia-online.org/en/tools-and-resources/bodies-of-knowledge/list-of-bodies-of-knowledge) as opposed to creating a new one @@ -25,4 +22,611 @@ Skills Framework for the Information Age (SFIA) promotes [existing BoKs](https:/ # Pretotyping - \ No newline at end of file + + + +# Advice for new software devs + +- Build the right *it* before you build it *right*. Do a [pretotype](http://www.pretotyping.org) before a prototype to see if it's even worth the effort (you'll find often it's not). +- When you're stuck, ask a more experienced developer. Don't let pride keep you from getting the work done. +- If you see something broken, resist the immediate temptation to fix it. + - Mark it as TODO, and return to it when you've got free time. + +- Learn how to write really good bug reports + - Steps to duplicate (in ordered form) + - Desired behaviour + - Current behaviour + - Bonus points if you can explain how it affects the end user + +- You'll spend more time reading code and documentation than writing it, so make sure the stuff you write is readable +- Your "soft skills" will carry you much further than your coding skills + - Public speaking + - Pleasant conversations + - Writing skills + +- Take notes of new stuff, and have a system to organize the notes (e.g. a wiki) + - You will want a digital system for this. The faster you can retrieve your notes, the better. + +- Always try to work with exceptionally good developers +- What makes software 'legacy software' is that you will grow smarter and more experienced, and you'll just know better ways to organize and your code. If you try to learn lessons from legacy software, your time will be well-rewarded. +- Look at the source code of the programs you use regularly. You might just be able to directly improve your own tools. +- Don't celebrate sleep-deprivation. It's stupid. Get 8-9 hours of [good sleep](life_stuff.md) a day, so that your mind can actually do good work. +- Don't break backwards compatibility unless the idea behind breaking it is exceptionally good (e.g. the program runs 5x faster, takes 1/10th the memory, or something else materially worthwhile for your end users) +- Don't work in a job just for the money - the money will dry up, but those memories won't. Your life is too valuable to waste on stupid crap. +- Learn how to write tests + - ...but don't go overboard. Find the right amount of testing so that it's actually *helpful*. Code-to-test ratio shouldn't be over 1.2, and writing tests shouldn't take more than 1/3 of your time. + +- Know what 'good enough' is in any project. There's seldom a need to optimize, don't build up technical debt needlessly. +- Legacy software is the perception shift that happens when you become a better programmer. Legacy software *keeps you honest*. +- [Your users might never tell you something is broken](https://pointersgonewild.com/2019/11/02/they-might-never-tell-you-its-broken/) + + +# Jet Propulsion Laboratory + + +## Pi + +3.141592653589793 + +From + + +# Capability Maturity Model + + + +- Level 1 - Initial +- Level 2 - Repeatable +- Level 3 - Defined +- Level 4 - Managed (Capable) +- Level 5 - Optimizing (Efficient) + + +# Computer Associations + + +## IEEE + +- [Certification](https://www.computer.org/education/certifications) + +Standards: + +| no. | desc | +|---- |--------------------------- | +| 1003 | POSIX | +| 1016 | Software design description | + + +## ACM + + +## [Canadian Information Processing Society (CIPS)](http://cips.ca) + + +# Good Software Practices + + +## Don't reinvent the wheel + +The world does not need another XML parser. Use what's already been written and tested. Often what you think sucks only needs a few patches to be adequate. + + +## Code without a written plan is just asking for trouble + +When I hear someone brag that they've got the whole program in their head, I know it will turn out like garbage. Exceptions to this are rare. There's always something found in the process of writing the idea down that makes the program better, and it also becomes a form of documentation. + + +## Don't repeat yourself + +Try to remove duplication in code by refactoring, so that it's easier to extend and debug the program later on. + + +## Your build system should *never* be more than 1 step + +`configure && make && make install` should be the most complicated build setup you have. + +Get it to one-step-to-build - instant feedback is awesome, and the time saved will pay off when "I need a build for the customer in 5 minutes!" For that matter, have automated testing that the master always builds clean. + + +## Keep it simple + +I once replaced an elaborate Java-based build system with 2 shell scripts. Mine worked faster, better, and was simpler to read. + + +## Prototypes! + +A simple prototype done in a few hours can save a week's worth of speculation, and often you can plunder the prototype for technical insights and even code. + + +## Business rules and logic don't mix well + +Business rules will change. It's in your best interest to make them easily configurable (read: not compiled into the binary). Even better, make it simple enough that Bob in accounting can manage the rules. + + +## Code can be the best documentation + +Descriptive variables and functions are better than comments. When you actually need non-code documentation, make sure that the docs are automatically pulled together from the code (a la doxygen, etc.). + + +## Keep LOC down to keep bugs down + +Code Complete said that the industry average is 15-50 bugs per 1000 lines of code. By reducing the lines of code and keeping functions simple, your life will be much easier. + + +## ALWAYS validate your inputs + +Because 13-year-olds know enough to fuzz your text box. SQL injections are one of the most common bugs. + + +## Be correct first, then be fast. + +Debugging a fast program that's segfaulting is slow work... + + +## Always review your releases + +Code audits are a cheap way of ensuring quality (though they may not seem so at the time). Lost customers and lost time to troubleshooting problems are expensive. As well, keep metrics on defects from release to release, so that you can adjust practices as necessary. Use the "Infinite Hows" technique to examine release/deployment issues - deployment issues should be dealt with once, *permanently*. + + +## 1 hour of inspection can save up to 100 hours of related work + +IBM study found "each hour of inspection prevented about 100 hours of related work (testing and defect correction)" + + +## Testing - it's worth the effort + +When you learn a new language, learn how to test its code as early as possible. Time spent writing tests is rarely wasted. When you use test cases, you can refactor without (much) fear. When you need to debug quickly, having tests make a huge difference. + + +## It's easier to be secure when you bake it in at the start + +It sucks to break backwards compatibility, or worse, get caught with your pants down, because *someone* didn't bother with security when they hacked the program together. + + +## Stop with 'good enough' + +To keep from going crazy and spending too much time on irrelevant crap, set specific and quantitative goals for your project at the start. When you've met a goal, move on to the next one. + + +## Source control everything + +Seriously. Learn git. It'll take you just a couple hours, and you'll make it back in no time at all. + + +## Don't marry your framework + +A framework is a great way to ensure you don't reinvent the wheel, but if possible keep your business logic external to it. That way if something sexier comes along you're not fully invested in the old crap. Decoupling can also mean faster tests. + + +## Practice defensive programming + +Use assertions to ensure the state is correct, and use tests to simulate faults. + + +## A bad process will lead to lots of preventable headaches + +Take an active role in perfecting the process wherever you work. + + +## Nail the basic process to avoid certain failure + +- Do an analysis, capture the requirements, and create a design document +- Review the design - catch errors before the coding stage +- Code review +- Use automated code analysis +- Unit and component tests to stress-test and ensure edge cases are properly handled + + +## Velocity is a good measure of project health + +Good code allows you to fix bugs and add features quickly. + + +## Keep a bug database + +Even something as simple as BUGS.txt eliminates bus factor, and makes it easier to approach a project months later. + + +## Keep a changelog + +This doesn't have to be fancy, and there's [thoughtful guidelines you can follow](https://keepachangelog.com/en/1.0.0/). Just remember that this is for humans, not machines. + + +# Chaos Engineering + +- [Principles of Chaos Engineering](https://principlesofchaos.org/) + + +# System Design + + +## Software System Design Cycle + +1. Determine feature set + - Functional requirements (how should it work?) + - Non-functional requirements (latency, availability) + - Extended requirements (analytics, monitoring, integration) + +2. Back of the envelope estimations + - Ratios between reads, writes + - \# actions/month, queries per second + - storage, memory, bandwidth estimates + +3. System interface definition + - API signatures + - Design against API abuse + +4. Define the data model + - Database schema + - Relational vs non-relational + +5. High-level design (basic block diagram) +6. Detailed design +7. Identify/resolve bottlenecks, justify design + - Look for SPOFs + - How is partition/machine loss handled? + - Where should caches reside? + - How to monitor? + + +## Vocab + + +### Stovepipe system + +System that solves a specific problem, but shares nothing with larger system (eg maintains own user/password system) + + +# Theory of Inventive Problem Solving + +Teoriya Resheniya Izobreatatelskikh Zadatch + +- [TRIZ Journal](https://triz-journal.com) + + +## Theory + +From ["What is TRIZ?"](https://triz-journal.com/what-is-triz/) + +1. That the same problems and solutions appear again and again across different industries, but that most organisations tend to re-invent the wheel rather than look outside their own experiences or the experiences of their direct competitors. +2. That the most powerful solutions are the ones that successfully eliminate the compromises and trade-offs conventionally viewed as inherent in systems. +3. That there are only a small number of possible strategies for overcoming such contradictions. +4. That the most powerful solutions also make maximum use of resources. Most organisations are highly inclined to solve problems by adding things rather than making the current things work more effectively, or transforming the things viewed as harmful into something useful. +5. That technology evolution trends follow highly predictable paths. + +The Ideal Final Result (IFR) is when the product has no costs/harms to the customer. + +Five Pillars: + +- Ideality +- Contradictions + + +# YAGNI exceptions + +This is a non-exhaustive list of features that are worth implementing early because the cost is significantly greater later in the process. + +- API + - client kill-switch ("you need to update your client to use the new API") + - pagination + - detailed logging + - versioning + +- Automated deployment +- Testing framework +- zero-one-many applications +- timestamps (especially `created_at`) +- basic documentation / operations playbook + +- +- + + +# Good Videos + +This is a list of talks, etc. that are quite good + +- [Is it really "Complex"? Or did we just make it "Complicated" (Alan Kay)](https://www.youtube.com/watch?v=ubaX1Smg6pY) +- [17th Century Shipbuilding and Your Failed Software Project (Pete Cheslock)](http://confreaks.tv/videos/monitorama2014-monitorama-pdx-2014-lightning-talk-pete-cheslock) + +- Gerry Sussman - We Really Don't Know How To Compute +- Alan Kay - The Computer Revolution Hasn't Happened Yet + + +# Software Disasters + +This is a list of software disasters where bugs had real-world repercussions beyond typical annoyance. + + +## Mariner 1 rocket + +Transcription mistake sent rocket off-course + + +## Hartford Coliseum Collapse + +CAD software didn't take into account wet snow + + +## Therac-25 + +Race condition gave lethal doses of radiation + + +## 1983 Soviet early-warning ballistic detection system + +Software did not account for false detections from clouds, nearly started WW3 + + +## Knight Capital Trading glitch + +Insufficient cleanup of program artifacts, lack of testing, and lack of monitoring led to $440 million loss in 30 minutes. + + +## 1990 AT&T Outage + +Single line of code knocked out a single switch, shuts down national phone network + + +## 1991 Patriot system + +Miscalculation of trajectory because of rounding error + + +## Pentium FPU (f00f bug) + +Floating point instruction halts processor + +- +- + + +## Cyrix Coma bug + +Unprivileged instructions send processor into infinite loop, requiring reboot + + + + +## Arianne 5 + +64-bit to 16-bit conversion, causing an overflow that knocked out the guidance system. Backup system had identical problem. + + +## Y2K bug + +Shortening year to two digits causes overflow at turn of century + + +## 2038 bug + +32-bit `time_t` overflows in year 2038 + + +## Mars Orbiter + +Mismatch of metric and imperial measurements puts orbiter wildly off-course. + + +## Virtual Case File + +Less a case of any one bug, and more program mismanagement. $170 million spent before program scrapped. A case study in why following software engineering best practices matters. + + + + +# Blogs + +- [Coding Horror](http://www.codinghorror.com/blog/) +- [Joel on Software](http://www.joelonsoftware.com/) +- [37signals Company Blog](https://37signals.com/svn) +- [Steve Yegge's Drunken Rants](https://sites.google.com/site/steveyegge2/blog-rants) +- [Programming in the 21st Century](http://prog21.dadgum.com/) +- [Kernel Who?](https://kernelwho.wordpress.com) +- [Papers We Love](http://paperswelove.org/) + + +## Windows / Microsoft + +- [Mark Russinovich](https://blogs.technet.microsoft.com/markrussinovich/) +- [The Old New Thing (Raymond Chen)](https://blogs.msdn.microsoft.com/oldnewthing/) + + +# Hypothesis-Driven Delivery + +``` +We believe that + [building this feature] + [for these people] + will achieve [this outcome]. +We will know we are successful when we see + [this signal from the market]. +``` + + +# Reliability-Centered Maintenance + +1. What is the item supposed to do and its associated performance standards? +2. In what ways can it fail to provide the required functions? +3. What are the events that cause each failure? +4. What happens when each failure occurs? +5. In what way does each failure matter? +6. What systematic task can be performed proactively to prevent, or to diminish to a satisfactory degree, the consequences of the failure? +7. What must be done if a suitable preventive task cannot be found? + + +# Laws of Computing + + +## Marick's Law + +In software, anything of the form "X's Law" is better understood by replacing the word "Law" with "Fervent Desire". + + +## Hanlon's Razor + +Don't attribute to malice that which is adequately explained by carelessness/ignorance/stupidity. + + +# Practice programming + + + + +## Puzzles + +- +- [Project Euler](http://projecteuler.net/) +- +- +- +- +- +- +- [Regex Golf](https://alf.nu/RegexGolf) + + +## Competitions + +- +- +- +- +- (September) +- + + +## Problems + +- Write a program to do the pop count of a byte +- Write a program to check a string for duplicate characters + + +# Software bugs + + +## Design Bugs + +- Don't Repeat Yourself violation +- Bad API usage +- Using deprecated functions +- Incorrect variable manipulation +- Incorrect regular expression use +- Incorrect protocol implementation +- Unauthorized user access +- Conceptual Error +- Incorrect documentation +- Incorrect return value +- Incorrect database query +- Incorrect business rules + + +## UI Bugs + +- Missing/bad information +- Insufficient performance +- Inappropriate error message +- Expectation failure + + +## Code Bugs + +- Syntax error +- Off-by-one +- Division-by-zero +- Loss of arithmetic precision +- Injection attack +- Overflow +- Underflow +- Infinite loop +- Uninitialized variable +- Incorrect initialization of variable +- Resource leak +- Excessive recursion +- Null pointer dereference +- Race condition +- Doesn't return memory when finished +- incorrect data type handling +- Incorrect file handling + + +## Testing Errors + +- Did not provide steps to reproduce +- Misunderstanding of documentation +- Failed to notice or report problem +- Failed to run automated tests first +- Failure to verify fixes + + +# Time bugs + +[Wikipedia list of time bugs](https://en.wikipedia.org/wiki/Time_formatting_and_storage_bugs) + + +## TOPS-10 + +Has a clock for [1964-01-01 Wed] to [1975-01-04 Sat]. It was given another 3 bits to go to [2052-02-01 Thu], but this crept into other data structures in use causing weird bugs + + +## NTP overflow + + +## Unix 32-bit + +2038 + + +## World Computer Corporation + +2028 + + +## GPS epoch + +Last was in 2019 - happens every 1024 weeks + + +# Academic Papers + + +## On Reading Papers + +- [Should I Read Papers?](http://michaelrbernste.in/2014/10/21/should-i-read-papers.html) +- +- + + +## How to read a paper + +- Read intro and conclusion first +- Summarize the background and specific questions +- Determine purpose, structure, and direction +- Write down every word you don't understand +- Main points? Strengths? Weaknesses? Do the results answer the questions? +- Does the abstract jive with the rest of the paper? +- Look into citations +- What do other researchers say about the paper? + + +## Sources For Papers + +- [The Morning Paper](https://blog.acolyer.org/) +- [Papers We Love](https://github.com/papers-we-love/papers-we-love) + + +# Versioning + + +## [Semantic Versioning](https://semver.org/) + +> Given a version number MAJOR.MINOR.PATCH, increment the: +> +> MAJOR version when you make incompatible API changes MINOR version when you add functionality in a backward compatible manner PATCH version when you make backward compatible bug fixes +> +> Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. + + +## [Calendar Versioning](https://calver.org/) + +Use eg YYYY-MM-DD for versioning diff --git a/z_meta/sysadmin_life.md b/z_meta/sysadmin_life.md deleted file mode 100644 index 9d8ca60..0000000 --- a/z_meta/sysadmin_life.md +++ /dev/null @@ -1,21 +0,0 @@ -# Sysadmin Life - -- Write great documentation, not necessarily for others, but for your own sanity -- Assume that you typing something in is the weakest link in any chain. If it can be automated, it should be. - - -## Outside of work - -- [Sleep](life_stuff.md) is precious. Invest in a nice bed, keep light out of the room, keep [caffeinated substance consumption](life_stuff.md) to a minimum. -- If you're on-call, assume things will break any minute. Shower, middle of a meal, while you're hanging a chandelier - the most inconvenient time. Schedule accordingly. - - -## Staying current - -- [League of Professional System Administrators](https://lopsa.org/) -- [System Administration Book of Knowledge](http://sabok.org/) - - -## Links - -- diff --git a/z_meta/system_design.md b/z_meta/system_design.md deleted file mode 100644 index 0f55d55..0000000 --- a/z_meta/system_design.md +++ /dev/null @@ -1,83 +0,0 @@ -# System Design - - -## Software System Design Cycle - -1. Determine feature set - - Functional requirements (how should it work?) - - Non-functional requirements (latency, availability) - - Extended requirements (analytics, monitoring, integration) - -2. Back of the envelope estimations - - Ratios between reads, writes - - \# actions/month, queries per second - - storage, memory, bandwidth estimates - -3. System interface definition - - API signatures - - Design against API abuse - -4. Define the data model - - Database schema - - Relational vs non-relational - -5. High-level design (basic block diagram) -6. Detailed design -7. Identify/resolve bottlenecks, justify design - - Look for SPOFs - - How is partition/machine loss handled? - - Where should caches reside? - - How to monitor? - - -## Vocab - - -### Stovepipe system - -System that solves a specific problem, but shares nothing with larger system (eg maintains own user/password system) - - -# Theory of Inventive Problem Solving - -Teoriya Resheniya Izobreatatelskikh Zadatch - -- [TRIZ Journal](https://triz-journal.com) - - -## Theory - -From ["What is TRIZ?"](https://triz-journal.com/what-is-triz/) - -1. That the same problems and solutions appear again and again across different industries, but that most organisations tend to re-invent the wheel rather than look outside their own experiences or the experiences of their direct competitors. -2. That the most powerful solutions are the ones that successfully eliminate the compromises and trade-offs conventionally viewed as inherent in systems. -3. That there are only a small number of possible strategies for overcoming such contradictions. -4. That the most powerful solutions also make maximum use of resources. Most organisations are highly inclined to solve problems by adding things rather than making the current things work more effectively, or transforming the things viewed as harmful into something useful. -5. That technology evolution trends follow highly predictable paths. - -The Ideal Final Result (IFR) is when the product has no costs/harms to the customer. - -Five Pillars: - -- Ideality -- Contradictions - - -# YAGNI exceptions - -This is a non-exhaustive list of features that are worth implementing early because the cost is significantly greater later in the process. - -- API - - client kill-switch ("you need to update your client to use the new API") - - pagination - - detailed logging - - versioning - -- Automated deployment -- Testing framework -- zero-one-many applications -- timestamps (especially `created_at`) -- basic documentation / operations playbook - -- -- \ No newline at end of file diff --git a/z_meta/working_from_home.md b/z_meta/working_from_home.md deleted file mode 100644 index 249ec55..0000000 --- a/z_meta/working_from_home.md +++ /dev/null @@ -1,10 +0,0 @@ -# Working from Home - -- Take regular breaks -- No social media during working hours -- Get in regular exercise -- Have timelines for tasks -- Wear your regular work clothes -- Set an alarm for end of day, and respect it -- Have a dedicated work space -- Socialize outside of work, don't become a hermit \ No newline at end of file